From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (NAM02-DM3-obe.outbound.protection.outlook.com [40.107.95.59]) by mx.groups.io with SMTP id smtpd.web10.27072.1681642264020008542 for ; Sun, 16 Apr 2023 03:51:04 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=y3xBxVTR; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.95.59, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CJz0i4u/3eqWCMY1V/wABmAtaQe8dfEM8kIQdqikDkx65VOo8fGVEEpBfbnbeb/ziww42pVH/uoRru5MO0+j7AHk7gWuuZoi+XBtvRg0lGy2GunEX9uvXSmNfjQPzthNr2tODF6BS5x1GNFId9bLeq7J9u8lXL2BA4z46j+645l5DiX7w7wtq88Ij2XJioCH+Q+mR8hr5Nh0pgPGAIHjaQSH9qt67YEckUPppBi2j5iuJ+Es3zwu7AzDZvJii0GVF/UgCkiWBHHa3/yPdO6ESP0EQfSw24w7in2o32MYc+Rik1CtUc+5biLW/K8CWfUJYLp+ZrImNGwk/CcsBXWf9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/LwMibv2CTXILUiy5T+c/fVRVz0P/GYHiNBYA1BXM6A=; b=FYaHDZn9TYKuPNFOpDdPfcJ1Wf91EmJBFZhn0PVewwWjJaI+soBuIXhaYyvz94Ik0niY+cw05eebUdym28sefIOXypw+o9BjFcQ9WEwtgZSSpCrwL1smw1YdmWicJJm+CEN8+290AfxErZxHsgz7oAOOFQgj688UZ4NcJaXAloDfAbs+tEXqBJB6DrPgrKvSgb8xzAfAoTeongOv2d14XDM0MlgZgrkLuUfch35u9RupIVyXp65Ue0ALAJgwP8JSS8XPXTQWhiNjPWFfC8xIsFis11mngPAXAKNXk4is7IBdH7YOIVM98shgAdy7FX1N1EnnY+xKiWgX+Ni351y3rg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/LwMibv2CTXILUiy5T+c/fVRVz0P/GYHiNBYA1BXM6A=; b=y3xBxVTR16A1fnhJafUKqHn0J0ETf4Pu8PqNn4aIkqrNiYL00CfopqeGrR26CsvvjGbKtNcgLCPriznJ1jWfNC7j51CtGKtZgtS31Eu4VBHiRW/a3BdXzeqUUPLK1s0axoaKLGAgRBlT/VkIxz7qFv5+NFlMbCSoRYZ14W8/0As= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by CH3PR12MB8402.namprd12.prod.outlook.com (2603:10b6:610:132::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6277.43; Sun, 16 Apr 2023 10:50:56 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::30f:bd83:40dd:8f1]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::30f:bd83:40dd:8f1%3]) with mapi id 15.20.6298.030; Sun, 16 Apr 2023 10:50:56 +0000 From: "Chang, Abner" To: Tinh Nguyen , Nickle Wang , "devel@edk2.groups.io" CC: Isaac Oram , "Attar, AbdulLateef (Abdul Lateef)" Subject: Re: [edk2-platforms][PATCH] ManageabilityPkg: add support for the phosphor ipmi blob transfer protocol Thread-Topic: [edk2-platforms][PATCH] ManageabilityPkg: add support for the phosphor ipmi blob transfer protocol Thread-Index: AQHZbO1biTXS7tPYRkSQFekf8oIdY68twpCAgAABLpA= Date: Sun, 16 Apr 2023 10:50:56 +0000 Message-ID: References: <20230412031724.12690-1-nicklew@nvidia.com> <0c49ba9d-25e8-2727-a1bd-c93d2d2d6bce@amperemail.onmicrosoft.com> In-Reply-To: <0c49ba9d-25e8-2727-a1bd-c93d2d2d6bce@amperemail.onmicrosoft.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-04-16T10:50:52Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=fbd0170c-348a-4053-a023-8a845ef97347; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB3966:EE_|CH3PR12MB8402:EE_ x-ms-office365-filtering-correlation-id: 6f964cb5-32c7-423a-de00-08db3e6874f3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Hm9Awaf9+k3H0E7yQlUyU+LHtDlY6OY4c8K+WEvu2b1aF4uoez5bfChoHKRnH5OmCxB7z7b3wNuNm9xJbKLGbqJC+SgWnFqXc5SLjo0CFpX13ACqU/oHjhooSCpnNhaUaVYybbIPVTHPperC85aF8fksDyDJMzwwAOUr3UUxYLDlOAbDaxLLhtKJDz+1iUNZECvu0LEhyW88vcu3TWh3nXx3YuZcNHKrIdZXkV938JJkfw5fBKtA5TIkLUVlgWYXt9tCHZARExW7mJak8Lh2xYW6I5Jqy6XR+yW7+z7KpZ52iMELm54dkVwN7XrG9GCPT0a/K0E3/RdytIDSJVnsxBO5Buc3mTe3XvMXHzAdve69AIJTFG3iVNI/9TTu9TPRe4fsr7/KoYCey5eJfh2fF66crx0WFh/J7UzP0+KgyioaO6U14B0TcxLXI4tK8gAAEyH8qpm/xToCl2pD9+tVf0a94f19lUSOOnfKY+bgBgD2ya5P1OK8NnUAhRKXzRg4qEX690Tp1JrRnV3CtCVve1X7XS1FR+1EV3GJ2eRsSl2nZiUOvBwP/iTDxef4Q4qEC8PoYBkO9Hzl115zqlHafNvcsaGW461WeqdD98Wbf0p6heHjCa3KHqMl8ru49Ecxj1sEq/c9fBN2hZBPoKTeeZlDqPmfEvhFVVRX1dBuRYM= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(366004)(396003)(346002)(376002)(39860400002)(136003)(451199021)(8936002)(30864003)(52536014)(186003)(53546011)(26005)(6506007)(9686003)(55016003)(5660300002)(478600001)(122000001)(86362001)(33656002)(38070700005)(38100700002)(83380400001)(296002)(316002)(19627235002)(54906003)(41300700001)(110136005)(2906002)(76116006)(71200400001)(66476007)(7696005)(966005)(66946007)(66556008)(4326008)(8676002)(64756008)(66446008)(559001)(579004)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MW8vZnIwVTg4YjlKMElNT0VIRXY3R1NiNS9YZzRYa2crT3ZUb3dkSnNCYVZu?= =?utf-8?B?NnJHQUVtTzVVY2w5OVh4SGJQRkdsTFRjcWZKbzNIWlQvQzRIVTJHU2MzcmNO?= =?utf-8?B?VmswNVJ5Z3FFazA4cmQzN3RJcE1lWHRCQjZwSUNjOFZLY3hUOXVoTjh0bm5o?= =?utf-8?B?SGxpODZUMVVmdjNLVmJlaXUyZ3FlVVpTOG5KclJLMEV1QTdKL1o0TitQdy9r?= =?utf-8?B?VkQ4OTd0SUtqZ05HU3BWSFdzSUQ3SjUzRldqUm9HWjVWWmRPeDB5aStKNGhz?= =?utf-8?B?S2w2eXZIUjFUSHlQWkMvSW9zamc2Q1c3MkFaYk13Y2tKZEdWVHl2RWM2TnF2?= =?utf-8?B?Y2dsYTgvakZ6ZjNNTmJTSXZRN0l4T2Rtazg1VGNXNDNzOXFhdlFtKy9DQk5r?= =?utf-8?B?WmxHemhTdXVOQnFYNTJlUndCMXVpMDZVVmRic1NvSWlRK2JQSmE4UHBta0Vm?= =?utf-8?B?QUFsNm4yb215SEtLUi9EZ1g5eWdFcUl4VWpiaGxiaDZrbEJibWNjQ2d3MGtj?= =?utf-8?B?enlGcHFCaGdJbTRXa2dkRHhDZVNidjk0MXJBY21UamtGVUpacWFmc0RqNEp4?= =?utf-8?B?VVA4bnNPUFhQOXdudWtYMzlpNTFxUXJxaDRLRjlnUFJvQU1BSkxvYmxUM0kz?= =?utf-8?B?Z0pJV3orRVVMOHNIOGNyZWpVQUdGNVhDVlQ4c1Eva1VLLy9qNXcxYWY0blBa?= =?utf-8?B?WXlBYnJzVk1GSHBxVEdnS2VlWWYzcFJkY3gvWkk2MC9YdXRiWmw5eklJd1JE?= =?utf-8?B?NVhZakNuQTNvTFk0aGpmdi93OHRRRUpJalFoTVNud1U1WkdYSmVKZHEyNUhG?= =?utf-8?B?cTZyT29KWGNHTTVZbFRvUzl5SlgrZW5IRlNPNmVGV3FiS3Jjb2pPdktWN2xB?= =?utf-8?B?N3VyVkVURllQWG9JZEdLdnN3MTBwVzdKOFRzSldPNEx6dFAwT2ZhTEtRUlUr?= =?utf-8?B?U1VFWG4wR3l5WFo4ajFJV3NIbUNoWDAwdndoaEdqRGNienlweWxLak5Ub1Vh?= =?utf-8?B?bkhRZ2lhZE5JNnFwOGhkRXpBUEdaRC9pSnhvS0phRFFHR2VUVTBjaENnNWw0?= =?utf-8?B?M0JPbzVtRUF1Q0RvbUswaDRiS2JvazFqbDhTakc3WXI2VGVVNStSUFJnd05z?= =?utf-8?B?THVlbVJiMEZKWWxBZEpLdDRPNGpUeitDbEZncGZpVHRhQWpheG5NUU9oUTdG?= =?utf-8?B?T29aL0Y0VEd5eUxlMnpxeEFSVm55WmFhM2pIVG5qd052YmdhcUhuSSsxd2Yv?= =?utf-8?B?SlB5WlVDS09WTUNrR2Qwb2daNXdRUm14bHJHZlZKMktnMHZFdU5OLzRMT0pl?= =?utf-8?B?algzcUlCTHl2ZEZxTkVEZGtGR2ZXSHV4VGFFNkVuVWVIMGNvZXFwb3NRVjFK?= =?utf-8?B?QXdtN0hyYS82N0NDd2hvNnU0M3MyQmpyR1lrcDF2UXpuUFRrOE1NL0V2cDh2?= =?utf-8?B?L2RYZGlKQTQwaWpNcWgyQnlyTnN5ZmpxTlIxbEpFY1pzRmNBTGFEMWJTcTRZ?= =?utf-8?B?dlBFNmhwUTBtUWcvMlNVbUlLbEQ4QWdJUEFLcUwrNUhGWGFUVmgzcEhmckV6?= =?utf-8?B?ZHZRVUFXT0prUncya3N1OEhDZmhBR0hGNWdYMksybDBmVEQ4MkRqREllVW00?= =?utf-8?B?MGxobmpxQm9aZzRwTERBOEJxeHlqM2F3RnJmT0ZCN0NvVSsyNzdJUm9iWVpX?= =?utf-8?B?ZFY0OXY2TE5zUi9PM3lMNXR5MEpjMzc3QVY4TDlTNVJQZVNiNHdyYzFzUDlD?= =?utf-8?B?Mnp6VzhYc3pDdHVXaytiQkJPTzFmeW5sVjFacjRXY3JMWmg4YjU5dzBBeUt2?= =?utf-8?B?b2tmT1VhMm5oTWM4UnV6bUlpeXJaTWR4YmlOanhTandMaDY3NXZLc1JVUDNz?= =?utf-8?B?VzFVdDNQbTg3ejlFa2xwZVU5NGErcXBwWW1KNk9ycnpxY3k1WVRTbEpOOTBR?= =?utf-8?B?U3h1Mm5NK2doV0lHT2k5VVp4NnR3MWdnV2M2Vm83cDJjRm81bXBaWERxVTYz?= =?utf-8?B?aW56NFgxUGYxY2YwV0dCTXpwYVRXV0ZiSUgyamVqNE0ycVhBWSs0WlF3dnVu?= =?utf-8?B?eDdQUFZibDBGNDV5VHlSU0dZb2FYYUJFTEtFZlI0elhaYjhSMWtPbUdUNTNv?= =?utf-8?Q?sKkc=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f964cb5-32c7-423a-de00-08db3e6874f3 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Apr 2023 10:50:56.2643 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zU7OpqNE/fCXgvYX5b131HPiwh48Rz+VMJntd1z0JqkVzqhWUCgp36ALYP7wS7N5LKz9mJyTlTbfKZMoJhaAlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8402 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 W0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEdlbmVyYWxdDQoNClRpbmsgYW5kIE5pY2tsZSwNClR3 byBmZWVkYmFja3MgaW4gYmVsb3csDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g RnJvbTogVGluaCBOZ3V5ZW4gPHRpbmhuZ3V5ZW5AYW1wZXJlbWFpbC5vbm1pY3Jvc29mdC5jb20+ DQo+IFNlbnQ6IFN1bmRheSwgQXByaWwgMTYsIDIwMjMgNjoyOSBQTQ0KPiBUbzogTmlja2xlIFdh bmcgPG5pY2tsZXdAbnZpZGlhLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBDaGFu ZywgQWJuZXIgPEFibmVyLkNoYW5nQGFtZC5jb20+OyBJc2FhYyBPcmFtDQo+IDxpc2FhYy53Lm9y YW1AaW50ZWwuY29tPjsgQXR0YXIsIEFiZHVsTGF0ZWVmIChBYmR1bCBMYXRlZWYpDQo+IDxBYmR1 bExhdGVlZi5BdHRhckBhbWQuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazItcGxhdGZvcm1zXVtQ QVRDSF0gTWFuYWdlYWJpbGl0eVBrZzogYWRkIHN1cHBvcnQgZm9yIHRoZQ0KPiBwaG9zcGhvciBp cG1pIGJsb2IgdHJhbnNmZXIgcHJvdG9jb2wNCj4gDQo+IENhdXRpb246IFRoaXMgbWVzc2FnZSBv cmlnaW5hdGVkIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlLiBVc2UgcHJvcGVyDQo+IGNhdXRpb24g d2hlbiBvcGVuaW5nIGF0dGFjaG1lbnRzLCBjbGlja2luZyBsaW5rcywgb3IgcmVzcG9uZGluZy4N Cj4gDQo+IA0KPiBIaSBOaWNrbGUsDQo+IA0KPiBQbGVhc2UgZmluZCBteSBpbmxpbmUgY29tbWVu dHMgYmVsb3cNCj4gDQo+IE9uIDQvMTIvMjAyMyAxMDoxNyBBTSwgTmlja2xlIFdhbmcgd3JvdGU6 DQo+ID4gW0VYVEVSTkFMIEVNQUlMIE5PVElDRTogVGhpcyBlbWFpbCBvcmlnaW5hdGVkIGZyb20g YW4gZXh0ZXJuYWwgc2VuZGVyLg0KPiBQbGVhc2UgYmUgbWluZGZ1bCBvZiBzYWZlIGVtYWlsIGhh bmRsaW5nIGFuZCBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbg0KPiBwcm90ZWN0aW9uIHByYWN0aWNl cy5dDQo+ID4NCj4gPg0KPiA+IFRoaXMgY2hhbmdlIGltcGxlbWVudHMgdGhlIGJsb2IgdHJhbnNm ZXIgcHJvdG9jb2wgdXNlZCBpbiBPcGVuQm1jDQo+ID4gZG9jdW1lbnRlZCBoZXJlOiBodHRwczov L2dpdGh1Yi5jb20vb3BlbmJtYy9waG9zcGhvci1pcG1pLWJsb2JzDQo+ID4NCj4gPiBTaWduZWQt b2ZmLWJ5OiBOaWNrIFJhbWlyZXogPG5yYW1pcmV6QG52aWRpYS5jb20+DQo+ID4gQ2M6IEFibmVy IENoYW5nIDxhYm5lci5jaGFuZ0BhbWQuY29tPg0KPiA+IENjOiBJc2FhYyBPcmFtIDxpc2FhYy53 Lm9yYW1AaW50ZWwuY29tPg0KPiA+IENjOiBBYmR1bCBMYXRlZWYgQXR0YXIgPEFiZHVsTGF0ZWVm LkF0dGFyQGFtZC5jb20+DQo+ID4gQ2M6IE5pY2tsZSBXYW5nIDxuaWNrbGV3QG52aWRpYS5jb20+ DQo+ID4gQ2M6IFRpbmggTmd1eWVuIDx0aW5obmd1eWVuQGFtcGVyZW1haWwub25taWNyb3NvZnQu Y29tPg0KPiA+IC0tLQ0KPiA+ICAgLi4uL01hbmFnZWFiaWxpdHlQa2cvTWFuYWdlYWJpbGl0eVBr Zy5kZWMgICAgIHwgICAgNiArDQo+ID4gICAuLi4vSW5jbHVkZS9Ec2MvTWFuYWdlYWJpbGl0eS5k c2MgICAgICAgICAgICAgfCAgICA0ICstDQo+ID4gICAuLi4vSXBtaUJsb2JUcmFuc2ZlckR4ZS5p bmYgICAgICAgICAgICAgICAgICAgfCAgIDM5ICsNCj4gPiAgIC4uLi9JcG1pQmxvYlRyYW5zZmVy VGVzdFVuaXRUZXN0c0hvc3QuaW5mICAgICB8ICAgNDAgKw0KPiA+ICAgLi4uL0luY2x1ZGUvUHJv dG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5oICAgICAgIHwgIDEzNiArKw0KPiA+ICAgLi4uL0ludGVy bmFsSXBtaUJsb2JUcmFuc2Zlci5oICAgICAgICAgICAgICAgIHwgIDM2MyArKysrKysNCj4gPiAg IC4uLi9JcG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlCbG9iVHJhbnNmZXJEeGUuYyB8ICA3OTkgKysr KysrKysrKysrDQo+ID4gICAuLi4vVW5pdFRlc3QvSXBtaUJsb2JUcmFuc2ZlclRlc3RVbml0VGVz dHMuYyAgfCAxMTEzDQo+ICsrKysrKysrKysrKysrKysrDQo+ID4gICAuLi4vVW5pdmVyc2FsL0lw bWlCbG9iVHJhbnNmZXJEeGUvUmVhZG1lLm1kICAgfCAgIDI0ICsNCj4gPiAgIDkgZmlsZXMgY2hh bmdlZCwgMjUyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+ID4gICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JU cmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW5zZg0KPiBlckR4ZS5pbmYNCj4gPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NA0KPiBGZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRy YW5zZmVyRHhlL1VuaXRUZXN0L0lwbWlCbA0KPiBvYlRyYW5zZmVyVGVzdFVuaXRUZXN0c0hvc3Qu aW5mDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBr Zy9JbmNsdWRlL1Byb3RvY29sL0lwbWlCbG9iVHJhbnNmZXIuaA0KPiA+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+IEZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJh bnNmZXJEeGUvSW50ZXJuYWxJcG1pQmxvDQo+IGJUcmFuc2Zlci5oDQo+ID4gICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JU cmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW5zZg0KPiBlckR4ZS5jDQo+ID4gICBjcmVhdGUgbW9kZSAx MDA2NDQNCj4gRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFu c2ZlckR4ZS9Vbml0VGVzdC9JcG1pQmwNCj4gb2JUcmFuc2ZlclRlc3RVbml0VGVzdHMuYw0KPiA+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IEZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVy c2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvUmVhZG1lLm1kDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEv RmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9NYW5hZ2VhYmlsaXR5UGtnLmRlYw0KPiBiL0ZlYXR1 cmVzL01hbmFnZWFiaWxpdHlQa2cvTWFuYWdlYWJpbGl0eVBrZy5kZWMNCj4gPiBpbmRleCA5YTkz MGQzZTRiLi5lMmQ2Y2NjYzUwIDEwMDY0NA0KPiA+IC0tLSBhL0ZlYXR1cmVzL01hbmFnZWFiaWxp dHlQa2cvTWFuYWdlYWJpbGl0eVBrZy5kZWMNCj4gPiArKysgYi9GZWF0dXJlcy9NYW5hZ2VhYmls aXR5UGtnL01hbmFnZWFiaWxpdHlQa2cuZGVjDQo+ID4gQEAgLTQsNiArNCw3IEBADQo+ID4gICAj IHRob3NlIGFyZSByZWxhdGVkIHRvIHRoZSBwbGF0Zm9ybSBtYW5hZ2VtZW50Lg0KPiA+ICAgIw0K PiA+ICAgIyBDb3B5cmlnaHQgKEMpIDIwMjMgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArIyBDb3B5cmlnaHQgKGMpIDIwMjMsIE5WSURJ QSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuDQo+ID4g ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAj DQo+ID4gICAjIw0KPiA+IEBAIC00OCwzICs0OSw4IEBADQo+ID4gICAgIGdNYW5hZ2VhYmlsaXR5 UHJvdG9jb2xNY3RwR3VpZCAgICA9IHsgMHg3NkZFRDhGMSwgMHgwQkU1LCAweDQyNjksDQo+IHsg MHhBMywgMHgxQSwgMHgzOCwgMHgwRiwgMHg1NCwgMHhGMSwgMHhBMSwgMHg4QSB9IH0NCj4gPiAg ICAgIyBNYW5hZ2VhYmlsaXR5IFByb3RvY29sIFBMRE0NCj4gPiAgICAgZ01hbmFnZWFiaWxpdHlQ cm90b2NvbFBsZG1HdWlkICAgID0geyAweDM5NTgwOTBELCAweDY5REQsIDB4NDg2OCwNCj4geyAw eDlDLCAweDQxLCAweEM5LCAweEFDLCAweDMxLCAweEI1LCAweDI1LCAweEM1IH0gfQ0KPiA+ICsN Cj4gPiArW1Byb3RvY29sc10NCj4gPiArDQo+ID4gKyAgIyMgSW5jbHVkZS9Qcm90b2NvbC9JcG1p QmxvYlRyYW5zZmVyLmgNCj4gPiArICBnRWRraWlJcG1pQmxvYlRyYW5zZmVyUHJvdG9jb2xHdWlk ID0geyAweDA1ODM3Yzc1LCAweDFkNjUsIDB4NDY4YiwNCj4geyAweGIxLCAweGMyLCAweDgxLCAw eGFmLCAweDlhLCAweDMxLCAweDViLCAweDJjIH0gfQ0KPiA+IGRpZmYgLS1naXQgYS9GZWF0dXJl cy9NYW5hZ2VhYmlsaXR5UGtnL0luY2x1ZGUvRHNjL01hbmFnZWFiaWxpdHkuZHNjDQo+IGIvRmVh dHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9JbmNsdWRlL0RzYy9NYW5hZ2VhYmlsaXR5LmRzYw0KPiA+ IGluZGV4IDBkODY4ZmRmNGEuLjExMWQ2YjkxZGMgMTAwNjQ0DQo+ID4gLS0tIGEvRmVhdHVyZXMv TWFuYWdlYWJpbGl0eVBrZy9JbmNsdWRlL0RzYy9NYW5hZ2VhYmlsaXR5LmRzYw0KPiA+ICsrKyBi L0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvSW5jbHVkZS9Ec2MvTWFuYWdlYWJpbGl0eS5kc2MN Cj4gPiBAQCAtMiwxMSArMiwxMyBAQA0KPiA+ICAgIyBDb21tb24gbGlicmFyaWVzIGZvciBNYW5h Z2VhYmlsdHkgUGFja2FnZQ0KPiA+ICAgIw0KPiA+ICAgIyBDb3B5cmlnaHQgKEMpIDIwMjMgQWR2 YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAr IyBDb3B5cmlnaHQgKGMpIDIwMjMsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFs bCByaWdodHMNCj4gcmVzZXJ2ZWQuDQo+ID4gICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAjDQo+ID4gICAjIw0KPiA+ICAgW0xpYnJhcnlDbGFz c2VzXQ0KPiA+DQo+IE1hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwZXJMaWJ8TWFuYWdlYWJpbGl0 eVBrZy9MaWJyYXJ5L0Jhc2VNYW5hZ2VhYmkNCj4gbGl0eVRyYW5zcG9ydEhlbHBlckxpYi9CYXNl TWFuYWdlYWJpbGl0eVRyYW5zcG9ydEhlbHBlci5pbmYNCj4gPiArDQo+IElwbWlMaWJ8TWRlTW9k dWxlUGtnL0xpYnJhcnkvRHhlSXBtaUxpYklwbWlQcm90b2NvbC9EeGVJcG1pTGliSXBtaVByDQo+ IG90b2NvbC5pbmYNCj4gPg0KPiA+ICAgW0xpYnJhcnlDbGFzc2VzLkFSTSwgTGlicmFyeUNsYXNz ZXMuQUFSQ0g2NF0NCj4gPiAgICAgIw0KPiA+IEBAIC0yMiw0ICsyNCw0IEBADQo+ID4gICBbQ29t cG9uZW50cy5YNjRdDQo+ID4gICAgIE1hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlQcm90 b2NvbC9EeGUvSXBtaVByb3RvY29sRHhlLmluZg0KPiA+ICAgICBNYW5hZ2VhYmlsaXR5UGtnL1Vu aXZlcnNhbC9JcG1pUHJvdG9jb2wvU21tL0lwbWlQcm90b2NvbFNtbS5pbmYNCj4gPiAtDQo+ID4g Kw0KPiBNYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlC bG9iVHJhbnNmZXJEeGUuaW5mDQo+ID4gZGlmZiAtLWdpdA0KPiBhL0ZlYXR1cmVzL01hbmFnZWFi aWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvSXBtaUJsb2JUcmFuDQo+IHNm ZXJEeGUuaW5mDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJs b2JUcmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW4NCj4gc2ZlckR4ZS5pbmYNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjI4ZTlkMjkzYzENCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwv SXBtaUJsb2JUcmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW4NCj4gc2ZlckR4ZS5pbmYNCj4gPiBAQCAt MCwwICsxLDM5IEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgSVBNSSBCbG9iIFRyYW5zZmVyIFBy b3RvY29sIERYRSBEcml2ZXIuDQo+ID4gKyMNCj4gPiArIyAgQ29weXJpZ2h0IChjKSAyMDIyLTIw MjMsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gcmVzZXJ2 ZWQuDQo+ID4gKyMNCj4gPiArIyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gPiArIw0KPiA+ICsNCj4gPiArW0RlZmluZXNdDQo+ID4gKyAgSU5GX1ZFUlNJ T04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiA+ICsgIEJBU0VfTkFNRSAgICAg ICAgICAgICAgICAgICAgICA9IElwbWlCbG9iVHJhbnNmZXJEeGUNCj4gPiArICBGSUxFX0dVSUQg ICAgICAgICAgICAgICAgICAgICAgPSA2MzU3YzgwNC03OGJiLTRiMGMtYWJkZi1jNzVkZjk0MmYz MTkNCj4gPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQo+ ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gKyAgRU5UUllf UE9JTlQgICAgICAgICAgICAgICAgICAgID0gSXBtaUJsb2JUcmFuc2ZlckR4ZURyaXZlckVudHJ5 UG9pbnQNCj4gPiArDQo+ID4gK1tTb3VyY2VzLmNvbW1vbl0NCj4gPiArICBJcG1pQmxvYlRyYW5z ZmVyRHhlLmMNCj4gPiArDQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArICBCYXNlTGliDQo+ ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICsgIERlYnVnTGliDQo+ID4gKyAgSXBtaUxpYg0KPiA+ ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4gPiArICBQY2RMaWINCj4gPiArICBVZWZpQm9vdFNl cnZpY2VzVGFibGVMaWINCj4gPiArICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPiA+ICsNCj4gPiAr W1BhY2thZ2VzXQ0KPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gKyAgTWRlTW9kdWxlUGtn L01kZU1vZHVsZVBrZy5kZWMNCj4gPiArICBNYW5hZ2VhYmlsaXR5UGtnL01hbmFnZWFiaWxpdHlQ a2cuZGVjDQo+ID4gKw0KPiA+ICtbUHJvdG9jb2xzXQ0KPiA+ICsgIGdFZGtpaUlwbWlCbG9iVHJh bnNmZXJQcm90b2NvbEd1aWQNCj4gPiArDQo+ID4gK1tEZXBleF0NCj4gPiArICBUUlVFDQo+ID4g ZGlmZiAtLWdpdA0KPiBhL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlC bG9iVHJhbnNmZXJEeGUvVW5pdFRlc3QvSXBtaQ0KPiBCbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3Rz SG9zdC5pbmYNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxv YlRyYW5zZmVyRHhlL1VuaXRUZXN0L0lwbQ0KPiBpQmxvYlRyYW5zZmVyVGVzdFVuaXRUZXN0c0hv c3QuaW5mDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi4x ZjA3MWJiYWRjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKw0KPiBiL0ZlYXR1cmVzL01hbmFn ZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvVW5pdFRlc3QvSXBtDQo+ IGlCbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3RzSG9zdC5pbmYNCj4gPiBAQCAtMCwwICsxLDQwIEBA DQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgVW5pdCB0ZXN0cyBvZiB0aGUgSXBtaSBibG9iIHRyYW5z ZmVyIGRyaXZlciB0aGF0IGFyZSBydW4gZnJvbSBhIGhvc3QNCj4gZW52aXJvbm1lbnQuDQo+ID4g KyMNCj4gPiArIyBDb3B5cmlnaHQgKGMpIDIwMjAtMjAyMywgTlZJRElBIENPUlBPUkFUSU9OICYg QUZGSUxJQVRFUy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC4NCj4gPiArIw0KPiA+ICsjIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyMjDQo+ID4gKw0K PiA+ICtbRGVmaW5lc10NCj4gPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAw eDAwMDEwMDA2DQo+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gSXBtaUJs b2JUcmFuc2ZlckR4ZVVuaXRUZXN0c0hvc3QNCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAg ICAgICAgICAgPSAxZjVkNDA5NS1lYTUyLTQzMmMtYjA3OC04NjA5N2ZlZjYwMDQNCj4gPiArICBN T0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBIT1NUX0FQUExJQ0FUSU9ODQo+ID4gKyAg VkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gKw0KPiA+ICsjDQo+ID4g KyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkNCj4gPiAr IyBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCj4gPiArIw0KPiA+ICsjICBW QUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IFg2NA0KPiA+ICsjDQo+ID4gKw0KPiA+ICtb U291cmNlc10NCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyVGVzdFVuaXRUZXN0cy5jDQo+ID4gKw0K PiA+ICtbUGFja2FnZXNdDQo+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiArICBNZGVNb2R1 bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiA+ICsgIE1hbmFnZWFiaWxpdHlQa2cvTWFuYWdlYWJp bGl0eVBrZy5kZWMNCj4gPiArICBVbml0VGVzdEZyYW1ld29ya1BrZy9Vbml0VGVzdEZyYW1ld29y a1BrZy5kZWMNCj4gPiArDQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArICBCYXNlTGliDQo+ ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICsgIERlYnVnTGliDQo+ID4gKyAgVW5pdFRlc3RMaWIN Cj4gPiArICBJcG1pTGliDQo+ID4gKw0KPiA+ICtbUHJvdG9jb2xzXQ0KPiA+ICsgIGdFZGtpaUlw bWlCbG9iVHJhbnNmZXJQcm90b2NvbEd1aWQNCj4gPiBkaWZmIC0tZ2l0DQo+IGEvRmVhdHVyZXMv TWFuYWdlYWJpbGl0eVBrZy9JbmNsdWRlL1Byb3RvY29sL0lwbWlCbG9iVHJhbnNmZXIuaA0KPiBi L0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvSW5jbHVkZS9Qcm90b2NvbC9JcG1pQmxvYlRyYW5z ZmVyLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjhl YTcxZDg4MTYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvRmVhdHVyZXMvTWFuYWdlYWJp bGl0eVBrZy9JbmNsdWRlL1Byb3RvY29sL0lwbWlCbG9iVHJhbnNmZXIuaA0KPiA+IEBAIC0wLDAg KzEsMTM2IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsNCj4gPiArICBJUE1JIEJsb2IgVHJhbnNm ZXIgZHJpdmVyDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMi0yMDIzLCBOVklESUEg Q09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLg0KPiA+ICsN Cj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ ICsNCj4gPiArKiovDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0lwbWlMaWIuaD4NCj4gPiArI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ID4gKyNpbmNsdWRl IDxJbmR1c3RyeVN0YW5kYXJkL0lwbWkuaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgSVBNSV9ORVRG Tl9PRU0gICAgICAgICAgICAgICAgICAgICAweDJFDQo+ID4gKyNkZWZpbmUgSVBNSV9PRU1fQkxP Ql9UUkFOU0ZFUl9DTUQgICAgICAgICAweDgwDQo+ID4gKyNkZWZpbmUgSVBNSV9PRU1fQkxPQl9N QVhfREFUQV9QRVJfUEFDS0VUICA2NA0KPiANCj4gSXQgaXMgYmV0dGVyIHRvIGF2b2lkIGZpeGlu ZyB0aGUgcGFja2V0IHNpemUgaGVyZS4NCj4gDQo+IC0gRm9yIHNzaWYsIGdldCBpdCBmcm9tICJn ZXQgY2FwYWJpbGl0aWVzIiBjb21tYW5kLiBJZiBCTUMgc3VwcG9ydHMgb25seQ0KPiBzaW5nbGUt cGFydCByZWFkL3dyaXRlLCB0aGlzIHNpemUgZXhjZWVkcyBCTUMgY2FwYWJpbGl0eQ0KPiANCj4g LSBGb3Iga2NzLCBJIGRvbid0IHNlZSB0aGUgbGltaXRhdGlvbg0KPiANCj4gSSB0aGluayBsaW1p dGluZyB0aGUgc2l6ZSBoZXJlIGlzIHVuc3VpdGFibGUsIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0 aGlzDQo+IHByb3RvY29sIHNob3VsZCBjaGVjayB0aGUgc2l6ZSB0aGVtc2VsdmVzDQpJUE1JIGJs b2IgdXNlcyBJcG1pTGliIHRvIHN1Ym1pdCB0aGUgY29tbWFuZCBhbmQgSVBNSSBwcm90b2NvbCBp cyB0aGUgb25lIHRoYXQgdGFsa3MgdG8gdHJhbnNwb3J0IGludGVyZmFjZS4gVGhhdCB3b3VsZCBi ZSBJUE1JIHByb3RvY29sJ3MgcmVzcG9uc2liaWxpdHkgdG8ga25vdyB0aGUgZXhhY3QgbWF4aW11 bSBzaXplIG9mIGVhY2ggdHJhbnNmZXIgcGF5bG9hZCwgYWNjb3JkaW5nIHRvIHRoZSB0cmFuc3Bv cnQgaW50ZXJmYWNlLg0KRnJvbSB0aGUgTWFuYWdlYWJpbGl0eVBrZyBkZXNpZ24sIFNTSUYgbWFu YWdlYWJpbGl0eSB0cmFuc3BvcnQgbGlicmFyeSBjYW4gcmV0dXJucyBNVFUgYW5kIHRoZSBjYXBh YmlsaXR5IG9mIHNpbmdsZS9tdWx0aSBwYXJ0IHJlYWQvd3JpdGUgdG8gY2FsbGVyIChJUE1JIHBy b3RvY29sIGZvciBleGFtcGxlKS4gSVBNSSBwcm90b2NvbCBzaG91bGQgZGV0ZXJtaW5lIGhhdmlu ZyBhIHNpbmdsZSBwYXJ0IHRyYW5zZmVyIG9yIHNwbGl0dGluZyB0aGUgcGFja2V0IGludG8gbXVs dGkgdHJhbnNmZXJzLg0KSSBjYW4gaGVscCBvbiBTU0lGIG1hbmFnZWFiaWxpdHkgdHJhbnNwb3J0 IGxpYnJhcnkgYXMgd2VsbCBpZiB5b3UgaGF2ZSBTU0lGIHNhbXBsZSBjb2RlLg0KDQo+IA0KPiA+ ICsNCj4gPiArI2RlZmluZSBCTE9CX1RSQU5TRkVSX1NUQVRfT1BFTl9SICAgICAgICBCSVQwDQo+ ID4gKyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9TVEFUX09QRU5fVyAgICAgICAgQklUMQ0KPiA+ICsj ZGVmaW5lIEJMT0JfVFJBTlNGRVJfU1RBVF9DT01NSVRJTkcgICAgIEJJVDINCj4gPiArI2RlZmlu ZSBCTE9CX1RSQU5TRkVSX1NUQVRfQ09NTUlUVEVEICAgICBCSVQzDQo+ID4gKyNkZWZpbmUgQkxP Ql9UUkFOU0ZFUl9TVEFUX0NPTU1JVF9FUlJPUiAgQklUNA0KPiA+ICsvLyBCaXRzIDUtNyBhcmUg cmVzZXJ2ZWQNCj4gPiArLy8gQml0cyA4LTE1IGFyZSBibG9iLXNwZWNpZmljIGRlZmluaXRpb25z DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyAgQmxvYiBUcmFuc2ZlciBGdW5jdGlvbiBQcm90b3R5 cGVzDQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJ ICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfR0VUX0NPVU5UKSgNCj4gPiArICBPVVQgVUlO VDMyICpDb3VudA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArKEVGSUFQSSAqSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0VOVU1FUkFURSko DQo+ID4gKyAgSU4gIFVJTlQzMiAgICAgIEJsb2JJbmRleCwNCj4gPiArICBPVVQgQ0hBUjggKkJs b2JJZA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4g PiArKEVGSUFQSSAqSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX09QRU4pKA0KPiA+ICsgIElO ICBDSEFSOCAqQmxvYklkLA0KPiA+ICsgIElOICBVSU5UMTYgICAgICBGbGFncywNCj4gPiArICBP VVQgVUlOVDE2ICpTZXNzaW9uSWQNCj4gPiArICApOw0KPiA+ICsNCj4gPiArdHlwZWRlZg0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKklQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9S RUFEKSgNCj4gPiArICBJTiAgVUlOVDE2ICAgICAgU2Vzc2lvbklkLA0KPiA+ICsgIElOICBVSU5U MzIgICAgICBPZmZzZXQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgICAgIFJlcXVlc3RlZFNpemUsDQo+ ID4gKyAgT1VUIFVJTlQ4ICpEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK3R5cGVkZWYNCj4g PiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xf V1JJVEUpKA0KPiA+ICsgIElOICBVSU5UMTYgICAgICBTZXNzaW9uSWQsDQo+ID4gKyAgSU4gIFVJ TlQzMiAgICAgIE9mZnNldCwNCj4gPiArICBJTiAgVUlOVDggKkRhdGEsDQo+ID4gKyAgSU4gIFVJ TlQzMiAgICAgIFdyaXRlTGVuZ3RoDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK3R5cGVkZWYNCj4g PiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xf Q09NTUlUKSgNCj4gPiArICBJTiAgVUlOVDE2ICAgICAgU2Vzc2lvbklkLA0KPiA+ICsgIElOICBV SU5UOCAgICAgICBDb21taXREYXRhTGVuZ3RoLA0KPiA+ICsgIElOICBVSU5UOCAqQ29tbWl0RGF0 YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr KEVGSUFQSSAqSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0NMT1NFKSgNCj4gPiArICBJTiAg VUlOVDE2ICAgICAgU2Vzc2lvbklkDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK3R5cGVkZWYNCj4g PiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xf REVMRVRFKSgNCj4gPiArICBJTiAgQ0hBUjggKkJsb2JJZA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqSVBNSV9CTE9CX1RSQU5T RkVSX1BST1RPQ09MX1NUQVQpKA0KPiA+ICsgIElOICBDSEFSOCAqQmxvYklkLA0KPiA+ICsgIE9V VCBVSU5UMTYgKkJsb2JTdGF0ZSwNCj4gPiArICBPVVQgVUlOVDMyICpTaXplLA0KPiA+ICsgIE9V VCBVSU5UOCAqTWV0YWRhdGFMZW5ndGgsDQo+ID4gKyAgT1VUIFVJTlQ4ICpNZXRhZGF0YQ0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQ SSAqSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NFU1NJT05fU1RBVCkoDQo+ID4gKyAgSU4g IFVJTlQxNiAgICAgIFNlc3Npb25JZCwNCj4gPiArICBPVVQgVUlOVDE2ICpCbG9iU3RhdGUsDQo+ ID4gKyAgT1VUIFVJTlQzMiAqU2l6ZSwNCj4gPiArICBPVVQgVUlOVDggKk1ldGFkYXRhTGVuZ3Ro LA0KPiA+ICsgIE9VVCBVSU5UOCAqTWV0YWRhdGENCj4gPiArICApOw0KPiA+ICsNCj4gPiArdHlw ZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKklQTUlfQkxPQl9UUkFOU0ZFUl9Q Uk9UT0NPTF9XUklURV9NRVRBKSgNCj4gPiArICBJTiAgVUlOVDE2ICAgICAgU2Vzc2lvbklkLA0K PiA+ICsgIElOICBVSU5UMzIgICAgICBPZmZzZXQsDQo+ID4gKyAgSU4gIFVJTlQ4ICpEYXRhLA0K PiA+ICsgIElOICBVSU5UMzIgICAgICBXcml0ZUxlbmd0aA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvLw0KPiA+ICsvLyBTdHJ1Y3R1cmUgb2YgSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MDQo+ ID4gKy8vDQo+ID4gK3N0cnVjdCBfSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MIHsNCj4gPiAr ICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfR0VUX0NPVU5UICAgICAgIEJsb2JHZXRDb3Vu dDsNCj4gPiArICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfRU5VTUVSQVRFICAgICAgIEJs b2JFbnVtZXJhdGU7DQo+ID4gKyAgSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX09QRU4gICAg ICAgICAgICBCbG9iT3BlbjsNCj4gPiArICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfUkVB RCAgICAgICAgICAgIEJsb2JSZWFkOw0KPiA+ICsgIElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NP TF9XUklURSAgICAgICAgICAgQmxvYldyaXRlOw0KPiA+ICsgIElQTUlfQkxPQl9UUkFOU0ZFUl9Q Uk9UT0NPTF9DT01NSVQgICAgICAgICAgQmxvYkNvbW1pdDsNCj4gPiArICBJUE1JX0JMT0JfVFJB TlNGRVJfUFJPVE9DT0xfQ0xPU0UgICAgICAgICAgIEJsb2JDbG9zZTsNCj4gPiArICBJUE1JX0JM T0JfVFJBTlNGRVJfUFJPVE9DT0xfREVMRVRFICAgICAgICAgIEJsb2JEZWxldGU7DQo+ID4gKyAg SVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NUQVQgICAgICAgICAgICBCbG9iU3RhdDsNCj4g PiArICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfU0VTU0lPTl9TVEFUICAgIEJsb2JTZXNz aW9uU3RhdDsNCj4gPiArICBJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfV1JJVEVfTUVUQSAg ICAgIEJsb2JXcml0ZU1ldGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICt0eXBlZGVmIHN0cnVjdCBf SVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MDQo+IElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NP TDsNCj4gPiArDQo+ID4gK2V4dGVybiBFRklfR1VJRCAgZ0Vka2lpSXBtaUJsb2JUcmFuc2ZlclBy b3RvY29sR3VpZDsNCj4gPiBkaWZmIC0tZ2l0DQo+IGEvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBr Zy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9JbnRlcm5hbElwbWlCDQo+IGxvYlRyYW5z ZmVyLmgNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRy YW5zZmVyRHhlL0ludGVybmFsSXBtaUINCj4gbG9iVHJhbnNmZXIuaA0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uMTRmMGRjMDJiYw0KPiA+IC0tLSAvZGV2 L251bGwNCj4gPiArKysNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9J cG1pQmxvYlRyYW5zZmVyRHhlL0ludGVybmFsSXBtaUINCj4gbG9iVHJhbnNmZXIuaA0KPiA+IEBA IC0wLDAgKzEsMzYzIEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsNCj4gPiArICBIZWFkZXJzIGZv ciBJUE1JIEJsb2IgVHJhbnNmZXIgZHJpdmVyDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykg MjAyMi0yMDIzLCBOVklESUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzDQo+ IHJlc2VydmVkLg0KPiA+ICsNCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4N Cj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJh cnkvSXBtaUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGli Lmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQUk9UT0NPTF9SRVNQT05TRV9PVkVSSEVBRCAgKDQgKiBzaXplb2YoVUlOVDgpKSAgICAgLy8g MQ0KPiBieXRlIGNvbXBsZXRpb24gY29kZSArIDMgYnl0ZXMgT0VODQo+ID4gKw0KPiA+ICsvLyBT dWJjb21tYW5kcyBmb3IgdGhpcyBwcm90b2NvbA0KPiA+ICt0eXBlZGVmIGVudW0gew0KPiA+ICsg IElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291bnQgPSAwLA0KPiA+ICsgIElwbWlCbG9i VHJhbnNmZXJTdWJjb21tYW5kRW51bWVyYXRlLA0KPiA+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJj b21tYW5kT3BlbiwNCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZFJlYWQsDQo+ID4g KyAgSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRXcml0ZSwNCj4gPiArICBJcG1pQmxvYlRyYW5z ZmVyU3ViY29tbWFuZENvbW1pdCwNCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZENs b3NlLA0KPiA+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kRGVsZXRlLA0KPiA+ICsgIElw bWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kU3RhdCwNCj4gPiArICBJcG1pQmxvYlRyYW5zZmVyU3Vi Y29tbWFuZFNlc3Npb25TdGF0LA0KPiA+ICsgIElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kV3Jp dGVNZXRhLA0KPiA+ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9TVUJDT01NQU5EUzsNCj4gPiArDQo+ ID4gKyNwcmFnbWEgcGFjaygxKQ0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsg IFVJTlQ4ICAgIE9FTlszXTsNCj4gPiArICBVSU5UOCAgICBTdWJDb21tYW5kOw0KPiA+ICt9IElQ TUlfQkxPQl9UUkFOU0ZFUl9IRUFERVI7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBDb21tYW5k IDAgLSBCbWNCbG9iR2V0Q291bnQNCj4gPiArLy8gVGhlIEJtY0Jsb2JHZXRDb3VudCBjb21tYW5k IGV4cGVjdHMgdG8gcmVjZWl2ZSBhbiBlbXB0eSBib2R5Lg0KPiA+ICsvLyBUaGUgQk1DIHdpbGwg cmV0dXJuIHRoZSBudW1iZXIgb2YgZW51bWVyYWJsZSBibG9icw0KPiA+ICsvLw0KPiA+ICt0eXBl ZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVDMyICAgIEJsb2JDb3VudDsNCj4gPiArfSBJUE1JX0JM T0JfVFJBTlNGRVJfR0VUX0NPVU5UX1JFU1BPTlNFOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8g Q29tbWFuZCAxIC0gQm1jQmxvYkVudW1lcmF0ZQ0KPiA+ICsvLyBUaGUgQm1jQmxvYkVudW1lcmF0 ZSBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2ZSBhIGJvZHkgb2Y6DQo+ID4gKy8vDQo+ID4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMzIgICAgQmxvYkluZGV4OyAvLyAwLWJhc2VkIGlu ZGV4IG9mIGJsb2IgdG8gcmVjZWl2ZQ0KPiA+ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX0VO VU1FUkFURV9TRU5EX0RBVEE7DQo+ID4gKw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAg Q0hBUjggICAgQmxvYklkW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4g K30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfRU5VTUVSQVRFX1JFU1BPTlNFOw0KPiA+ICsNCj4g PiArLy8NCj4gPiArLy8gQ29tbWFuZCAyIC0gQm1jQmxvYk9wZW4NCj4gPiArLy8gVGhlIEJtY0Js b2JPcGVuIGNvbW1hbmQgZXhwZWN0cyB0byByZWNlaXZlIGEgYm9keSBvZjoNCj4gPiArLy8NCj4g PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQxNiAgICBGbGFnczsNCj4gPiArICBDSEFS OCAgICAgQmxvYklkW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30g SVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfT1BFTl9TRU5EX0RBVEE7DQo+ID4gKw0KPiA+ICsjZGVm aW5lIEJMT0JfT1BFTl9GTEFHX1JFQUQgICAwDQo+ID4gKyNkZWZpbmUgQkxPQl9PUEVOX0ZMQUdf V1JJVEUgIDENCj4gPiArLy8gQml0cyAyLTcgYXJlIHJlc2VydmVkDQo+ID4gKy8vIEJpdHMgOC0x NSBhcmUgYmxvYi1zcGVjaWZpYyBkZWZpbml0aW9ucw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiA+ICsgIFVJTlQxNiAgICBTZXNzaW9uSWQ7DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5T RkVSX0JMT0JfT1BFTl9SRVNQT05TRTsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIENvbW1hbmQg MyAtIEJtY0Jsb2JSZWFkDQo+ID4gKy8vIFRoZSBCbWNCbG9iUmVhZCBjb21tYW5kIGV4cGVjdHMg dG8gcmVjZWl2ZSBhIGJvZHkgb2Y6DQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4g PiArICBVSU5UMTYgICAgU2Vzc2lvbklkOyAvLyBSZXR1cm5lZCBmcm9tIEJsb2JPcGVuDQo+ID4g KyAgVUlOVDMyICAgIE9mZnNldDsNCj4gPiArICBVSU5UMzIgICAgUmVxdWVzdGVkU2l6ZTsNCj4g PiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9SRUFEX1NFTkRfREFUQTsNCj4gPiArDQo+ID4g K3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UOCAgICBEYXRhW0lQTUlfT0VNX0JMT0JfTUFY X0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9S RVNQT05TRTsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIENvbW1hbmQgNCAtIEJtY0Jsb2JXcml0 ZQ0KPiA+ICsvLyBUaGUgQm1jQmxvYldyaXRlIGNvbW1hbmQgZXhwZWN0cyB0byByZWNlaXZlIGEg Ym9keSBvZjoNCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQxNiAg ICBTZXNzaW9uSWQ7IC8vIFJldHVybmVkIGZyb20gQmxvYk9wZW4NCj4gPiArICBVSU5UMzIgICAg T2Zmc2V0Ow0KPiA+ICsgIFVJTlQ4ICAgICBEYXRhW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVS X1BBQ0tFVF07DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfV1JJVEVfU0VORF9EQVRB Ow0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFuZCA1IC0gQm1jQmxvYkNvbW1pdA0KPiA+ ICsvLyBUaGUgQm1jQmxvYkNvbW1pdCBjb21tYW5kIGV4cGVjdHMgdG8gcmVjZWl2ZSBhIGJvZHkg b2Y6DQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMTYgICAgU2Vz c2lvbklkOyAvLyBSZXR1cm5lZCBmcm9tIEJsb2JPcGVuDQo+ID4gKyAgVUlOVDggICAgIENvbW1p dERhdGFMZW5ndGg7DQo+ID4gKyAgVUlOVDggICAgIENvbW1pdERhdGFbSVBNSV9PRU1fQkxPQl9N QVhfREFUQV9QRVJfUEFDS0VUXTsNCj4gPiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9DT01N SVRfU0VORF9EQVRBOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFuZCA2IC0gQm1jQmxv YkNsb3NlDQo+ID4gKy8vIFRoZSBCbWNCbG9iQ2xvc2UgY29tbWFuZCBleHBlY3RzIHRvIHJlY2Vp dmUgYSBib2R5IG9mOg0KPiA+ICsvLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlO VDE2ICAgIFNlc3Npb25JZDsgLy8gUmV0dXJuZWQgZnJvbSBCbG9iT3Blbg0KPiA+ICt9IElQTUlf QkxPQl9UUkFOU0ZFUl9CTE9CX0NMT1NFX1NFTkRfREFUQTsNCj4gPiArDQo+ID4gKy8vDQo+ID4g Ky8vIENvbW1hbmQgNyAtIEJtY0Jsb2JEZWxldGUNCj4gPiArLy8gTk9URTogVGhpcyBjb21tYW5k IHdpbGwgZmFpbCBpZiB0aGVyZSBhcmUgb3BlbiBzZXNzaW9ucyBmb3IgdGhpcyBibG9iDQo+ID4g Ky8vIFRoZSBCbWNCbG9iRGVsZXRlIGNvbW1hbmQgZXhwZWN0cyB0byByZWNlaXZlIGEgYm9keSBv ZjoNCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIENIQVI4ICAgIEJsb2JJ ZFtJUE1JX09FTV9CTE9CX01BWF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+ICt9IElQTUlfQkxPQl9U UkFOU0ZFUl9CTE9CX0RFTEVURV9TRU5EX0RBVEE7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBD b21tYW5kIDggLSBCbWNCbG9iU3RhdA0KPiA+ICsvLyBUaGlzIGNvbW1hbmQgcmV0dXJucyBzdGF0 aXN0aWNzIGFib3V0IGEgYmxvYi4NCj4gPiArLy8gVGhpcyBjb21tYW5kIGV4cGVjdHMgdG8gcmVj ZWl2ZSBhIGJvZHkgb2Y6DQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBD SEFSOCAgICBCbG9iSWRbSVBNSV9PRU1fQkxPQl9NQVhfREFUQV9QRVJfUEFDS0VUXTsNCj4gPiAr fSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1NFTkRfREFUQTsNCj4gPiArDQo+ID4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMTYgICAgQmxvYlN0YXRlOw0KPiA+ICsgIFVJTlQz MiAgICBTaXplOyAvLyBTaXplIGluIGJ5dGVzIG9mIHRoZSBibG9iDQo+ID4gKyAgVUlOVDggICAg IE1ldGFEYXRhTGVuOw0KPiA+ICsgIFVJTlQ4ICAgICBNZXRhRGF0YVtJUE1JX09FTV9CTE9CX01B WF9EQVRBX1BFUl9QQUNLRVRdOw0KPiA+ICt9IElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NUQVRf UkVTUE9OU0U7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBDb21tYW5kIDkgLSBCbWNCbG9iU2Vz c2lvblN0YXQNCj4gPiArLy8gUmV0dXJucyBzYW1lIGRhdGEgYXMgQm1jQmxvYlN0YXRlIGV4cGVj dCBmb3IgYSBzZXNzaW9uLCBub3QgYSBibG9iDQo+ID4gKy8vIFRoaXMgY29tbWFuZCBleHBlY3Rz IHRvIHJlY2VpdmUgYSBib2R5IG9mOg0KPiA+ICsvLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ID4gKyAgVUlOVDE2ICAgIFNlc3Npb25JZDsNCj4gPiArfSBJUE1JX0JMT0JfVFJBTlNGRVJfQkxP Ql9TRVNTSU9OX1NUQVRfU0VORF9EQVRBOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiA+ICsgIFVJTlQxNiAgICBCbG9iU3RhdGU7DQo+ID4gKyAgVUlOVDMyICAgIFNpemU7IC8vIFNp emUgaW4gYnl0ZXMgb2YgdGhlIGJsb2INCj4gPiArICBVSU5UOCAgICAgTWV0YURhdGFMZW47DQo+ ID4gKyAgVUlOVDggICAgIE1ldGFEYXRhW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tF VF07DQo+ID4gK30gSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU0VTU0lPTl9TVEFUX1JFU1BPTlNF Ow0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ29tbWFuZCAxMCAtIEJtY0Jsb2JXcml0ZU1ldGEN Cj4gPiArLy8gVGhlIEJtY0Jsb2JXcml0ZU1ldGEgY29tbWFuZCBleHBlY3RzIHRvIHJlY2VpdmUg YSBib2R5IG9mOg0KPiA+ICsvLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVDE2 ICAgIFNlc3Npb25JZDsNCj4gPiArICBVSU5UMzIgICAgT2Zmc2V0Ow0KPiA+ICsgIFVJTlQ4ICAg ICBEYXRhW0lQTUlfT0VNX0JMT0JfTUFYX0RBVEFfUEVSX1BBQ0tFVF07DQo+ID4gK30gSVBNSV9C TE9CX1RSQU5TRkVSX0JMT0JfV1JJVEVfTUVUQV9TRU5EX0RBVEE7DQo+ID4gKw0KPiA+ICsjZGVm aW5lIElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX01FVEFfUkVTUE9OU0UgIE5VTEwNCj4g PiArDQo+ID4gKyNwcmFnbWEgcGFjaygpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDYWxjdWxh dGUgQ1JDLTE2LUNDSVRUIHdpdGggcG9seSBvZiAweDEwMjENCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgRGF0YSAgICAgICAgICAgICAgVGhlIHRhcmdldCBkYXRhLg0KPiA+ICsgIEBwYXJhbVtp bl0gIERhdGFTaXplICAgICAgICAgIFRoZSB0YXJnZXQgZGF0YSBzaXplLg0KPiA+ICsNCj4gPiAr ICBAcmV0dXJuIFVJTlQxNiAgICAgVGhlIENSQzE2IHZhbHVlLg0KPiA+ICsNCj4gPiArKiovDQo+ ID4gK1VJTlQxNg0KPiA+ICtDYWxjdWxhdGVDcmMxNiAoDQo+ID4gKyAgSU4gVUlOVDggICpEYXRh LA0KPiA+ICsgIElOIFVJTlROICBEYXRhU2l6ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaSAoDQo+ID4gKyAgSU4gIFVJTlQ4 ICAgU3ViQ29tbWFuZCwNCj4gPiArICBJTiAgVUlOVDggICAqU2VuZERhdGEsDQo+ID4gKyAgSU4g IFVJTlQzMiAgU2VuZERhdGFTaXplLA0KPiA+ICsgIE9VVCBVSU5UOCAgICpSZXNwb25zZURhdGEs DQo+ID4gKyAgT1VUIFVJTlQzMiAgKlJlc3BvbnNlRGF0YVNpemUNCj4gPiArICApOw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIENvdW50ICAgICAgIFRoZSBudW1i ZXIgb2YgYWN0aXZlIGJsb2JzDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBudW1iZXIgb2YgYWN0aXZlDQo+IGJs b2JzLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICBBbiBlcnJvciBvY2N1 cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxvYlRyYW5zZmVyR2V0 Q291bnQgKA0KPiA+ICsgIE9VVCBVSU5UMzIgICpDb3VudA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgQmxvYkluZGV4ICAgICAgIFRoZSAwLWJh c2VkIEluZGV4IG9mIHRoZSBibG9iIHRvDQo+IGVudW1lcmF0ZQ0KPiA+ICsgIEBwYXJhbVtvdXRd ICAgICAgICBCbG9iSWQgICAgICAgICAgVGhlIElEIG9mIHRoZSBibG9iDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVudW1lcmF0 ZWQgdGhlIGJsb2IuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBB biBlcnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxv YlRyYW5zZmVyRW51bWVyYXRlICgNCj4gPiArICBJTiAgVUlOVDMyICBCbG9iSW5kZXgsDQo+ID4g KyAgT1VUIENIQVI4ICAgKkJsb2JJZA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBAcGFyYW1baW5dICAgICAgICAgQmxvYklkICAgICAgICAgIFRoZSBJRCBvZiB0aGUgYmxvYiB0 byBvcGVuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIEZsYWdzICAgICAgICAgICBGbGFncyB0 byBjb250cm9sIGhvdyB0aGUgYmxvYiBpcyBvcGVuZWQNCj4gPiArICBAcGFyYW1bb3V0XSAgICAg ICAgU2Vzc2lvbklkICAgICAgIEEgdW5pcXVlIHNlc3Npb24gaWRlbnRpZmllcg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBvcGVu ZWQgdGhlIGJsb2IuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBB biBlcnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxv YlRyYW5zZmVyT3BlbiAoDQo+ID4gKyAgSU4gIENIQVI4ICAgKkJsb2JJZCwNCj4gPiArICBJTiAg VUlOVDE2ICBGbGFncywNCj4gPiArICBPVVQgVUlOVDE2ICAqU2Vzc2lvbklkDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAg ICAgVGhlIHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4gQmxvYk9wZW4NCj4g PiArICBAcGFyYW1baW5dICAgICAgICAgT2Zmc2V0ICAgICAgICAgIFRoZSBvZmZzZXQgb2YgdGhl IGJsb2IgZnJvbSB3aGljaCB0byBzdGFydA0KPiByZWFkaW5nDQo+ID4gKyAgQHBhcmFtW2luXSAg ICAgICAgIFJlcXVlc3RlZFNpemUgICBUaGUgbGVuZ3RoIG9mIGRhdGEgdG8gcmVhZA0KPiA+ICsg IEBwYXJhbVtvdXRdICAgICAgICBEYXRhICAgICAgICAgICAgRGF0YSByZWFkIGZyb20gdGhlIGJs b2INCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBTdWNj ZXNzZnVsbHkgcmVhZCBmcm9tIHRoZSBibG9iLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAg ICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArSXBtaUJsb2JUcmFuc2ZlclJlYWQgKA0KPiA+ICsgIElOICBVSU5UMTYgIFNlc3Np b25JZCwNCj4gPiArICBJTiAgVUlOVDMyICBPZmZzZXQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgUmVx dWVzdGVkU2l6ZSwNCj4gPiArICBPVVQgVUlOVDggICAqRGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRoZSBz ZXNzaW9uIElEIHJldHVybmVkIGZyb20gYSBjYWxsIHRvDQo+IEJsb2JPcGVuDQo+ID4gKyAgQHBh cmFtW2luXSAgICAgICAgIE9mZnNldCAgICAgICAgICBUaGUgb2Zmc2V0IG9mIHRoZSBibG9iIGZy b20gd2hpY2ggdG8gc3RhcnQNCj4gd3JpdGluZw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBE YXRhICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHdyb3Rl IHRvIHRoZSBibG9iLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAg QW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJs b2JUcmFuc2ZlcldyaXRlICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ID4gKyAg SU4gIFVJTlQzMiAgT2Zmc2V0LA0KPiA+ICsgIElOICBVSU5UOCAgICpEYXRhLA0KPiA+ICsgIElO ICBVSU5UMzIgIFdyaXRlTGVuZ3RoDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAgICAgIFRoZSBzZXNzaW9uIElEIHJldHVy bmVkIGZyb20gYSBjYWxsIHRvDQo+IEJsb2JPcGVuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAg IENvbW1pdERhdGFMZW5ndGggVGhlIGxlbmd0aCBvZiBkYXRhIHRvIGNvbW1pdCB0byB0aGUNCj4g YmxvYg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBDb21taXREYXRhICAgICAgIEEgcG9pbnRl ciB0byB0aGUgZGF0YSB0byBjb21taXQNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgICAgICBTdWNjZXNzZnVsIGNvbW1pdCB0byB0aGUgYmxvYi4NCj4gPiArICBA cmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4g KyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJDb21taXQgKA0KPiA+ ICsgIElOICBVSU5UMTYgIFNlc3Npb25JZCwNCj4gPiArICBJTiAgVUlOVDggICBDb21taXREYXRh TGVuZ3RoLA0KPiA+ICsgIElOICBVSU5UOCAgICpDb21taXREYXRhDQo+ID4gKyAgKTsNCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAgICAgVGhl IHNlc3Npb24gSUQgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8NCj4gQmxvYk9wZW4NCj4gPiArDQo+ ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiB3YXMgY2xv c2VkLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Ig b2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2Zl ckNsb3NlICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQNCj4gPiArICApOw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAgICAgICAgICBUaGUg QmxvYklkIHRvIGJlIGRlbGV0ZWQNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICAgICBUaGUgYmxvYiB3YXMgZGVsZXRlZC4NCj4gPiArICBAcmV0dmFsIE90aGVy ICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJEZWxldGUgKA0KPiA+ICsgIElOICBDSEFS OCAgKkJsb2JJZA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5d ICAgICAgICAgQmxvYklkICAgICAgICAgIFRoZSBCbG9iIElEIHRvIGdhdGhlciBzdGF0aXN0aWNz IGZvcg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgICBCbG9iU3RhdGUgICAgICAgVGhlIGN1cnJl bnQgc3RhdGUgb2YgdGhlIGJsb2INCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgU2l6ZSAgICAg ICAgICAgIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGJsb2INCj4gPiArICBAcGFyYW1bb3V0XSAgICAg ICAgTWV0YWRhdGFMZW5ndGggIExlbmd0aCBvZiB0aGUgb3B0aW9uYWwgbWV0YWRhdGENCj4gPiAr ICBAcGFyYW1bb3V0XSAgICAgICAgTWV0YWRhdGEgICAgICAgIE9wdGlvbmFsIGJsb2Itc3BlY2lm aWMgbWV0YWRhdGENCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg ICAgICBUaGUgYmxvYiBzdGF0aXN0aWNzIHdlcmUgc3VjY2Vzc2Z1bGx5DQo+IGdhdGhlcmVkLg0K PiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJy ZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2ZlclN0YXQg KA0KPiA+ICsgIElOICBDSEFSOCAgICpCbG9iSWQsDQo+ID4gKyAgT1VUIFVJTlQxNiAgKkJsb2JT dGF0ZSwNCj4gPiArICBPVVQgVUlOVDMyICAqU2l6ZSwNCj4gPiArICBPVVQgVUlOVDggICAqTWV0 YWRhdGFMZW5ndGgsDQo+ID4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhDQo+ID4gKyAgKTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAgICAg VGhlIElEIG9mIHRoZSBzZXNzaW9uIHRvIGdhdGhlciBzdGF0aXN0aWNzIGZvcg0KPiA+ICsgIEBw YXJhbVtvdXRdICAgICAgICBCbG9iU3RhdGUgICAgICAgVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhl IGJsb2INCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgU2l6ZSAgICAgICAgICAgIFNpemUgaW4g Ynl0ZXMgb2YgdGhlIGJsb2INCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgTWV0YWRhdGFMZW5n dGggIExlbmd0aCBvZiB0aGUgb3B0aW9uYWwgbWV0YWRhdGENCj4gPiArICBAcGFyYW1bb3V0XSAg ICAgICAgTWV0YWRhdGEgICAgICAgIE9wdGlvbmFsIGJsb2Itc3BlY2lmaWMgbWV0YWRhdGENCj4g PiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiBz dGF0aXN0aWNzIHdlcmUgc3VjY2Vzc2Z1bGx5DQo+IGdhdGhlcmVkLg0KPiA+ICsgIEByZXR2YWwg T3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2ZlclNlc3Npb25TdGF0ICgNCj4gPiAr ICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ID4gKyAgT1VUIFVJTlQxNiAgKkJsb2JTdGF0ZSwN Cj4gPiArICBPVVQgVUlOVDMyICAqU2l6ZSwNCj4gPiArICBPVVQgVUlOVDggICAqTWV0YWRhdGFM ZW5ndGgsDQo+ID4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAgICAgVGhlIElE IG9mIHRoZSBzZXNzaW9uIHRvIHdyaXRlIG1ldGFkYXRhIGZvcg0KPiA+ICsgIEBwYXJhbVtpbl0g ICAgICAgICBPZmZzZXQgICAgICAgICAgVGhlIG9mZnNldCBvZiB0aGUgbWV0YWRhdGEgdG8gd3Jp dGUgdG8NCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgRGF0YSAgICAgICAgICAgIFRoZSBkYXRh IHRvIHdyaXRlIHRvIHRoZSBtZXRhZGF0YQ0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgICAgIFRoZSBibG9iIG1ldGFkYXRhIHdhcyBzdWNjZXNzZnVsbHkgd3Jp dHRlbi4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9y IG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNm ZXJXcml0ZU1ldGEgKA0KPiA+ICsgIElOICBVSU5UMTYgIFNlc3Npb25JZCwNCj4gPiArICBJTiAg VUlOVDMyICBPZmZzZXQsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgKkRhdGEsDQo+ID4gKyAgSU4gIFVJ TlQzMiAgV3JpdGVMZW5ndGgNCj4gPiArICApOw0KPiA+IGRpZmYgLS1naXQNCj4gYS9GZWF0dXJl cy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNhbC9JcG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlCbG9i VHJhbg0KPiBzZmVyRHhlLmMNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL1VuaXZlcnNh bC9JcG1pQmxvYlRyYW5zZmVyRHhlL0lwbWlCbG9iVHJhbg0KPiBzZmVyRHhlLmMNCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjllNjYzMjg5ZDUNCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2 ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9JcG1pQmxvYlRyYW4NCj4gc2ZlckR4ZS5jDQo+ID4g QEAgLTAsMCArMSw3OTkgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKw0KPiA+ICsgIElQTUkgQmxv YiBUcmFuc2ZlciBkcml2ZXINCj4gPiArDQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjMs IE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQu DQo+ID4gKw0KPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL0lwbWlCbG9iVHJh bnNmZXIuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJJbnRlcm5hbElwbWlCbG9iVHJhbnNmZXIu aCINCj4gPiArDQo+ID4gKyNkZWZpbmUgQkxPQl9UUkFOU0ZFUl9ERUJVRyAgMA0KPiA+ICsNCj4g PiArU1RBVElDIENPTlNUIElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTCAgbUlwbWlCbG9iVHJh bnNmZXIgPSB7DQo+ID4gKw0KPiAoSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX0dFVF9DT1VO VCkqSXBtaUJsb2JUcmFuc2ZlckdldENvdQ0KPiBudCwNCj4gPiArDQo+IChJUE1JX0JMT0JfVFJB TlNGRVJfUFJPVE9DT0xfRU5VTUVSQVRFKSpJcG1pQmxvYlRyYW5zZmVyRW51bWUNCj4gcmF0ZSwN Cj4gPiArICAoSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX09QRU4pKklwbWlCbG9iVHJhbnNm ZXJPcGVuLA0KPiA+ICsgIChJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfUkVBRCkqSXBtaUJs b2JUcmFuc2ZlclJlYWQsDQo+ID4gKyAgKElQTUlfQkxPQl9UUkFOU0ZFUl9QUk9UT0NPTF9XUklU RSkqSXBtaUJsb2JUcmFuc2ZlcldyaXRlLA0KPiA+ICsNCj4gKElQTUlfQkxPQl9UUkFOU0ZFUl9Q Uk9UT0NPTF9DT01NSVQpKklwbWlCbG9iVHJhbnNmZXJDb21taXQsDQo+ID4gKyAgKElQTUlfQkxP Ql9UUkFOU0ZFUl9QUk9UT0NPTF9DTE9TRSkqSXBtaUJsb2JUcmFuc2ZlckNsb3NlLA0KPiA+ICsg IChJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfREVMRVRFKSpJcG1pQmxvYlRyYW5zZmVyRGVs ZXRlLA0KPiA+ICsgIChJUE1JX0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfU1RBVCkqSXBtaUJsb2JU cmFuc2ZlclN0YXQsDQo+ID4gKw0KPiAoSVBNSV9CTE9CX1RSQU5TRkVSX1BST1RPQ09MX1NFU1NJ T05fU1RBVCkqSXBtaUJsb2JUcmFuc2ZlclNlc3NpDQo+IG9uU3RhdCwNCj4gPiArDQo+IChJUE1J X0JMT0JfVFJBTlNGRVJfUFJPVE9DT0xfV1JJVEVfTUVUQSkqSXBtaUJsb2JUcmFuc2ZlcldyaXRl DQo+IE1ldGENCj4gPiArfTsNCj4gPiArDQo+ID4gK2NvbnN0IFVJTlQ4ICBPcGVuQm1jT2VuW10g PSB7IDB4Q0YsIDB4QzIsIDB4MDAgfTsgICAgICAgICAgLy8gT3BlbkJNQyBPRU4NCj4gY29kZSBp biBsaXR0bGUgZW5kaWFuIGZvcm1hdA0KPiANCj4gSSBkb27igJl0IGtub3cgd2hhdCDigJxPZW7i gJ0gbWVhbnMuIFNob3VsZCBpdCBiZSDigJxPZW3igJ0gb3Ig4oCcSUFOQeKAnSBudW1iZXI/DQpU aGlzIGlzIHRoZSBPRU0gbnVtYmVyIGRlZmluZWQgYnkgb3BlbmJtYyBwaG9zcGhvciBibG9iIHRy YW5zZmVyIGludGVyZmFjZSBmb3Igb3BlbmJtYy4NCmh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYm1j L3Bob3NwaG9yLWlwbWktYmxvYnMjcGhvc3Bob3ItYmxvYi10cmFuc2Zlci1pbnRlcmZhY2UgDQoN Cj4gDQo+IEFuZCB0aGlzIG51bWJlciBjYW4gYmUgY29uZmlndXJlZCwgb3RoZXIgT0VNcyB3aWxs IGhhdmUgdGhlaXIgb3duIG51bWJlci4NCk9wZW5ibWMgaXMgYWxyZWFkeSB0aGUgT0VNIHRoYXQg dXNlcyB0aGlzIE9FTiBudW1iZXIgKDQ5ODcxKS4gSSBjb25zaWRlciB0aGlzIGlzIGEgaW5kdXN0 cnkgc3RhbmRhcmQgZm9yIG9wZW5ibWMgSVBNSSBCTE9CIHRyYW5zZmVyIGFuZCBpdCBpcyB1bm5l Y2Vzc2FyeSB0byBiZSBvdmVycmlkZSBieSBvdGhlcnMsIHJpZ2h0PyBBbnkgdXNlIGNhc2UgeW91 IGNhbiB0aGluayBvZiB0byBtYWtlIHRoaXMgdmFsdWUgY29uZmlndXJhYmxlPw0KDQpUaGFua3MN CkFibmVyDQoNCj4gDQo+IFRoaXMgbnVtYmVyIHNob3VsZCBiZSBwcm92aWRlZCBieSBkcml2ZXJz IHRoYXQgY29uc3VtZSB0aGlzIHByb3RvY29sDQo+IA0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg Q2FsY3VsYXRlIENSQy0xNi1DQ0lUVCB3aXRoIHBvbHkgb2YgMHgxMDIxDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIERhdGEgICAgICAgICAgICAgIFRoZSB0YXJnZXQgZGF0YS4NCj4gPiArICBA cGFyYW1baW5dICBEYXRhU2l6ZSAgICAgICAgICBUaGUgdGFyZ2V0IGRhdGEgc2l6ZS4NCj4gPiAr DQo+ID4gKyAgQHJldHVybiBVSU5UMTYgICAgIFRoZSBDUkMxNiB2YWx1ZS4NCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtVSU5UMTYNCj4gPiArQ2FsY3VsYXRlQ3JjMTYgKA0KPiA+ICsgIElOIFVJTlQ4 ICAqRGF0YSwNCj4gPiArICBJTiBVSU5UTiAgRGF0YVNpemUNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBVSU5UTiAgICBJbmRleDsNCj4gPiArICBVSU5UTiAgICBCaXRJbmRleDsNCj4gPiArICBV SU5UMTYgICBDcmMgICAgID0gMHhGRkZGOw0KPiA+ICsgIFVJTlQxNiAgIFBvbHkgICAgPSAweDEw MjE7DQo+ID4gKyAgQk9PTEVBTiAgWG9yRmxhZyA9IEZBTFNFOw0KPiA+ICsNCj4gPiArICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCAoRGF0YVNpemUgKyAyKTsgKytJbmRleCkgew0KPiA+ICsgICAg Zm9yIChCaXRJbmRleCA9IDA7IEJpdEluZGV4IDwgODsgKytCaXRJbmRleCkgew0KPiA+ICsgICAg ICBYb3JGbGFnID0gKENyYyAmIDB4ODAwMCkgPyBUUlVFIDogRkFMU0U7DQo+ID4gKyAgICAgIENy YyAgIDw8PSAxOw0KPiA+ICsgICAgICBpZiAoKEluZGV4IDwgRGF0YVNpemUpICYmIChEYXRhW0lu ZGV4XSAmICgxIDw8ICg3IC0gQml0SW5kZXgpKSkpIHsNCj4gPiArICAgICAgICBDcmMrKzsNCj4g PiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgaWYgKFhvckZsYWcgPT0gVFJVRSkgew0KPiA+ ICsgICAgICAgIENyYyBePSBQb2x5Ow0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICNpZiBCTE9CX1RSQU5TRkVSX0RFQlVHDQo+ID4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiJWE6IENSQy0xNi1DQ0lUVCAleFxuIiwgX19GVU5DVElPTl9fLCBDcmMpKTsN Cj4gPiArICNlbmRpZg0KPiA+ICsNCj4gPiArICByZXR1cm4gQ3JjOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaSAoDQo+ID4gKyAg SU4gIFVJTlQ4ICAgU3ViQ29tbWFuZCwNCj4gPiArICBJTiAgVUlOVDggICAqU2VuZERhdGEsDQo+ ID4gKyAgSU4gIFVJTlQzMiAgU2VuZERhdGFTaXplLA0KPiA+ICsgIE9VVCBVSU5UOCAgICpSZXNw b25zZURhdGEsDQo+ID4gKyAgT1VUIFVJTlQzMiAgKlJlc3BvbnNlRGF0YVNpemUNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbkNvZGU7DQo+ID4gKyAgVUlO VDE2ICAgICAgICAgICAgICAgICAgICAgQ3JjOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgIE9lblszXTsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAqSXBtaVNl bmREYXRhOw0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIElwbWlTZW5kRGF0YVNp emU7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgKklwbWlSZXNwb25zZURhdGE7 DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgKk1vZGlmaWVkUmVzcG9uc2VEYXRh Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIElwbWlSZXNwb25zZURhdGFTaXpl Ow0KPiA+ICsgIElQTUlfQkxPQl9UUkFOU0ZFUl9IRUFERVIgIEhlYWRlcjsNCj4gPiArDQo+ID4g KyAgQ3JjID0gMDsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBQcmVwZW5kIHRoZSBwcm9w ZXIgaGVhZGVyIHRvIHRoZSBTZW5kRGF0YQ0KPiA+ICsgIC8vDQo+ID4gKyAgSXBtaVNlbmREYXRh U2l6ZSA9IChzaXplb2YgKElQTUlfQkxPQl9UUkFOU0ZFUl9IRUFERVIpKTsNCj4gPiArICBpZiAo U2VuZERhdGFTaXplKSB7DQo+ID4gKyAgICBJcG1pU2VuZERhdGFTaXplICs9IHNpemVvZiAoQ3Jj KSArIChzaXplb2YgKFVJTlQ4KSAqIFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBJcG1pU2VuZERhdGEgPSBBbGxvY2F0ZVplcm9Qb29sIChJcG1pU2VuZERhdGFTaXplKTsN Cj4gPiArICBpZiAoSXBtaVNlbmREYXRhID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEhlYWRlci5PRU5bMF0g ICAgID0gT3BlbkJtY09lblswXTsNCj4gPiArICBIZWFkZXIuT0VOWzFdICAgICA9IE9wZW5CbWNP ZW5bMV07DQo+ID4gKyAgSGVhZGVyLk9FTlsyXSAgICAgPSBPcGVuQm1jT2VuWzJdOw0KPiA+ICsg IEhlYWRlci5TdWJDb21tYW5kID0gU3ViQ29tbWFuZDsNCj4gPiArICBDb3B5TWVtIChJcG1pU2Vu ZERhdGEsICZIZWFkZXIsIHNpemVvZg0KPiAoSVBNSV9CTE9CX1RSQU5TRkVSX0hFQURFUikpOw0K PiA+ICsgIGlmIChTZW5kRGF0YVNpemUpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBDYWxj dWxhdGUgdGhlIENyYyBvZiB0aGUgc2VuZCBkYXRhDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgQ3Jj ID0gQ2FsY3VsYXRlQ3JjMTYgKFNlbmREYXRhLCBTZW5kRGF0YVNpemUpOw0KPiA+ICsgICAgQ29w eU1lbSAoSXBtaVNlbmREYXRhICsgc2l6ZW9mIChJUE1JX0JMT0JfVFJBTlNGRVJfSEVBREVSKSwN Cj4gJkNyYywgc2l6ZW9mIChVSU5UMTYpKTsNCj4gPiArICAgIENvcHlNZW0gKElwbWlTZW5kRGF0 YSArIHNpemVvZiAoSVBNSV9CTE9CX1RSQU5TRkVSX0hFQURFUikgKw0KPiBzaXplb2YgKFVJTlQx NiksIFNlbmREYXRhLCBTZW5kRGF0YVNpemUpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAjaWYg QkxPQl9UUkFOU0ZFUl9ERUJVRw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBJbnB1 dHM6XG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICIlYTog U2VuZERhdGFTaXplOiAlMDJ4XG5EYXRhOiAiLA0KPiBfX0ZVTkNUSU9OX18sIFNlbmREYXRhU2l6 ZSkpOw0KPiA+ICsgIFVJTlQ4ICBpOw0KPiA+ICsgIGZvciAoaSA9IDA7IGkgPCBTZW5kRGF0YVNp emU7IGkrKykgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiJTAyeCIsICooKFVJTlQ4 ICopU2VuZERhdGEgKyBpKSkpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJV R19JTkZPLCAiXG4iKSk7DQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6IElwbWlTZW5k RGF0YVNpemU6ICUwMnhcbkRhdGE6ICIsDQo+IF9fRlVOQ1RJT05fXywgSXBtaVNlbmREYXRhU2l6 ZSkpOw0KPiA+ICsgIGZvciAoaSA9IDA7IGkgPCBJcG1pU2VuZERhdGFTaXplOyBpKyspIHsNCj4g PiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiUwMngiLCAqKChVSU5UOCAqKUlwbWlTZW5kRGF0 YSArIGkpKSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICJc biIpKTsNCj4gPiArICNlbmRpZg0KPiA+ICsNCj4gPiArICBJcG1pUmVzcG9uc2VEYXRhU2l6ZSA9 ICgqUmVzcG9uc2VEYXRhU2l6ZSArDQo+IFBST1RPQ09MX1JFU1BPTlNFX09WRVJIRUFEKTsNCj4g PiArICAvLw0KPiA+ICsgIC8vIElmIGV4cGVjdGluZyBkYXRhIHRvIGJlIHJldHVybmVkLCB3ZSBo YXZlIHRvIGFsc28gYWNjb3VudCBmb3IgdGhlIDE2IGJpdA0KPiBDUkMNCj4gPiArICAvLw0KPiA+ ICsgIGlmICgqUmVzcG9uc2VEYXRhU2l6ZSkgew0KPiA+ICsgICAgSXBtaVJlc3BvbnNlRGF0YVNp emUgKz0gc2l6ZW9mIChDcmMpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgSXBtaVJlc3BvbnNl RGF0YSA9IEFsbG9jYXRlWmVyb1Bvb2wgKElwbWlSZXNwb25zZURhdGFTaXplKTsNCj4gPiArICBp ZiAoSXBtaVJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pU3VibWl0 Q29tbWFuZCAoDQo+ID4gKyAgICAgICAgICAgICBJUE1JX05FVEZOX09FTSwNCj4gPiArICAgICAg ICAgICAgIElQTUlfT0VNX0JMT0JfVFJBTlNGRVJfQ01ELA0KPiA+ICsgICAgICAgICAgICAgKFZP SUQgKilJcG1pU2VuZERhdGEsDQo+ID4gKyAgICAgICAgICAgICBJcG1pU2VuZERhdGFTaXplLA0K PiA+ICsgICAgICAgICAgICAgKFZPSUQgKilJcG1pUmVzcG9uc2VEYXRhLA0KPiA+ICsgICAgICAg ICAgICAgJklwbWlSZXNwb25zZURhdGFTaXplDQo+ID4gKyAgICAgICAgICAgICApOw0KPiA+ICsN Cj4gPiArICBGcmVlUG9vbCAoSXBtaVNlbmREYXRhKTsNCj4gPiArICBNb2RpZmllZFJlc3BvbnNl RGF0YSA9IElwbWlSZXNwb25zZURhdGE7DQo+ID4gKw0KPiA+ICsgI2lmIEJMT0JfVFJBTlNGRVJf REVCVUcNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogSVBNSSBSZXNwb25zZTpcbiIs IF9fRlVOQ1RJT05fXykpOw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBSZXNwb25z ZURhdGFTaXplOiAlMDJ4XG5EYXRhOiAiLA0KPiBfX0ZVTkNUSU9OX18sIElwbWlSZXNwb25zZURh dGFTaXplKSk7DQo+ID4gKyAgZm9yIChpID0gMDsgaSA8IElwbWlSZXNwb25zZURhdGFTaXplOyBp KyspIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiUwMngiLCAqKE1vZGlmaWVkUmVz cG9uc2VEYXRhICsgaSkpKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoREVCVUdf SU5GTywgIlxuIikpOw0KPiA+ICsgI2VuZGlmDQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBDb21wbGV0aW9uQ29kZSA9ICpNb2RpZmllZFJlc3BvbnNlRGF0YTsNCj4gPiArICBpZiAo Q29tcGxldGlvbkNvZGUgIT0gSVBNSV9DT01QX0NPREVfTk9STUFMKSB7DQo+ID4gKyAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiJWE6IFJldHVybmluZyBiZWNhdXNlIENvbXBsZXRpb25Db2RlID0N Cj4gMHgleFxuIiwgX19GVU5DVElPTl9fLCBDb21wbGV0aW9uQ29kZSkpOw0KPiA+ICsgICAgRnJl ZVBvb2wgKElwbWlSZXNwb25zZURhdGEpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9QUk9UT0NPTF9F UlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIFN0cmlwIGNvbXBsZXRpb24gY29kZSwg d2UgYXJlIGRvbmUgd2l0aCBpdA0KPiA+ICsgIE1vZGlmaWVkUmVzcG9uc2VEYXRhICA9IE1vZGlm aWVkUmVzcG9uc2VEYXRhICsgc2l6ZW9mDQo+IChDb21wbGV0aW9uQ29kZSk7DQo+ID4gKyAgSXBt aVJlc3BvbnNlRGF0YVNpemUgLT0gc2l6ZW9mIChDb21wbGV0aW9uQ29kZSk7DQo+ID4gKw0KPiA+ ICsgIC8vIENoZWNrIE9FTiBjb2RlIGFuZCB2ZXJpZnkgaXQgbWF0Y2hlcyB0aGUgT3BlbkJNQyBP RU4NCj4gPiArICBDb3B5TWVtIChPZW4sIE1vZGlmaWVkUmVzcG9uc2VEYXRhLCBzaXplb2YgKE9w ZW5CbWNPZW4pKTsNCj4gPiArICBpZiAoQ29tcGFyZU1lbSAoT2VuLCBPcGVuQm1jT2VuLCBzaXpl b2YgKE9wZW5CbWNPZW4pKSAhPSAwKSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoSXBtaVJlc3BvbnNl RGF0YSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX1BST1RPQ09MX0VSUk9SOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgaWYgKElwbWlSZXNwb25zZURhdGFTaXplID09IHNpemVvZiAoT3BlbkJtY09l bikpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZXJlIHdhcyBu byByZXNwb25zZSBkYXRhIHNlbnQuIFRoaXMgaXMgbm90IGFuIGVycm9yLg0KPiA+ICsgICAgLy8g U29tZSBtZXNzYWdlcyBkbyBub3QgcmVxdWlyZSBhIHJlc3BvbnNlLg0KPiA+ICsgICAgLy8NCj4g PiArICAgICpSZXNwb25zZURhdGFTaXplID0gMDsNCj4gPiArICAgIEZyZWVQb29sIChJcG1pUmVz cG9uc2VEYXRhKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgICAvLyBOb3cgd2Ug bmVlZCB0byB2YWxpZGF0ZSB0aGUgQ1JDIHRoZW4gc2VuZCB0aGUgUmVzcG9uc2UgYm9keSBiYWNr DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIC8vIFN0cmlwIHRoZSBPRU4sIHdlIGFyZSBkb25l IHdpdGggaXQgbm93DQo+ID4gKyAgICBNb2RpZmllZFJlc3BvbnNlRGF0YSAgPSBNb2RpZmllZFJl c3BvbnNlRGF0YSArIHNpemVvZiAoT2VuKTsNCj4gPiArICAgIElwbWlSZXNwb25zZURhdGFTaXpl IC09IHNpemVvZiAoT2VuKTsNCj4gPiArICAgIC8vIFRoZW4gdmFsaWRhdGUgdGhlIENyYw0KPiA+ ICsgICAgQ29weU1lbSAoJkNyYywgTW9kaWZpZWRSZXNwb25zZURhdGEsIHNpemVvZiAoQ3JjKSk7 DQo+ID4gKyAgICBNb2RpZmllZFJlc3BvbnNlRGF0YSAgPSBNb2RpZmllZFJlc3BvbnNlRGF0YSAr IHNpemVvZiAoQ3JjKTsNCj4gPiArICAgIElwbWlSZXNwb25zZURhdGFTaXplIC09IHNpemVvZiAo Q3JjKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoQ3JjID09IENhbGN1bGF0ZUNyYzE2IChNb2RpZmll ZFJlc3BvbnNlRGF0YSwNCj4gSXBtaVJlc3BvbnNlRGF0YVNpemUpKSB7DQo+ID4gKyAgICAgIENv cHlNZW0gKFJlc3BvbnNlRGF0YSwgTW9kaWZpZWRSZXNwb25zZURhdGEsDQo+IElwbWlSZXNwb25z ZURhdGFTaXplKTsNCj4gPiArICAgICAgQ29weU1lbSAoUmVzcG9uc2VEYXRhU2l6ZSwgJklwbWlS ZXNwb25zZURhdGFTaXplLCBzaXplb2YNCj4gKElwbWlSZXNwb25zZURhdGFTaXplKSk7DQo+ID4g KyAgICAgIEZyZWVQb29sIChJcG1pUmVzcG9uc2VEYXRhKTsNCj4gPiArICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgRnJlZVBvb2wgKElwbWlS ZXNwb25zZURhdGEpOw0KPiA+ICsgICAgICByZXR1cm4gRUZJX0NSQ19FUlJPUjsNCj4gPiArICAg IH0NCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtvdXRd ICAgICAgICBDb3VudCAgICAgICBUaGUgbnVtYmVyIG9mIGFjdGl2ZSBibG9icw0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIGNvbW1hbmQgYnl0ZSBzdHJl YW0gd2FzIHN1Y2Nlc3NmdWxseQ0KPiBzdWJtaXQgdG8gdGhlIGRldmljZSBhbmQgYSByZXNwb25z ZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09M X0VSUk9SICAgICBUaGUgSXBtaSBjb21tYW5kIGZhaWxlZA0KPiA+ICsgIEByZXR2YWwgRUZJX0NS Q19FUlJPUiAgICAgICAgICBUaGUgSXBtaSBjb21tYW5kIHJldHVybmVkIGEgYmFkDQo+IGNoZWNr c3VtDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJHZXRD b3VudCAoDQo+ID4gKyAgT1VUIFVJTlQzMiAgKkNvdW50DQo+ID4gKyAgKQ0KPiA+ICt7DQo+IA0K PiBQbGVhc2UgYWRkIHRoZSBhcmd1bWVudCB2YWxpZGF0aW9uIGZvciBmdW5jdGlvbnMgd2hpY2gg ZXhwb3NlIGZvciBvdGhlcg0KPiBkcml2ZXJzDQo+IA0KPiANCj4gPiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ID4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIg ICAgICBSZXNwb25zZURhdGFTaXplOw0KPiA+ICsNCj4gPiArICBSZXNwb25zZURhdGFTaXplID0g c2l6ZW9mDQo+IChJUE1JX0JMT0JfVFJBTlNGRVJfR0VUX0NPVU5UX1JFU1BPTlNFKTsNCj4gPiAr ICBSZXNwb25zZURhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7 DQo+ID4gKyAgaWYgKFJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1p QmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291 bnQsIE5VTEwsIDAsIChVSU5UOCAqKVJlc3BvbnNlRGF0YSwNCj4gJlJlc3BvbnNlRGF0YVNpemUp Ow0KPiA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAqQ291bnQgPSAo KElQTUlfQkxPQl9UUkFOU0ZFUl9HRVRfQ09VTlRfUkVTUE9OU0UNCj4gKilSZXNwb25zZURhdGEp LT5CbG9iQ291bnQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VE YXRhKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBAcGFyYW1baW5dICAgICAgICAgQmxvYkluZGV4ICAgICAgIFRoZSAwLWJhc2VkIEluZGV4 IG9mIHRoZSBibG9iIHRvDQo+IGVudW1lcmF0ZQ0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgICBC bG9iSWQgICAgICAgICAgVGhlIElEIG9mIHRoZSBibG9iDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVudW1lcmF0ZWQgdGhlIGJs b2IuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciBv Y2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJcG1pQmxvYlRyYW5zZmVy RW51bWVyYXRlICgNCj4gPiArICBJTiAgVUlOVDMyICBCbG9iSW5kZXgsDQo+ID4gKyAgT1VUIENI QVI4ICAgKkJsb2JJZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1 czsNCj4gPiArDQo+ID4gKyAgVUlOVDggICAqU2VuZERhdGE7DQo+ID4gKyAgVUlOVDggICAqUmVz cG9uc2VEYXRhOw0KPiA+ICsgIFVJTlQzMiAgU2VuZERhdGFTaXplOw0KPiA+ICsgIFVJTlQzMiAg UmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArDQo+ID4gKyAgaWYgKEJsb2JJZCA9PSBOVUxMKSB7DQo+ ID4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICAgIHJldHVybiBFRklfQUJPUlRFRDsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgPSBzaXplb2YNCj4gKElQTUlf QkxPQl9UUkFOU0ZFUl9CTE9CX0VOVU1FUkFURV9SRVNQT05TRSk7DQo+ID4gKyAgUmVzcG9uc2VE YXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsgIGlm IChSZXNwb25zZURhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBGb3JtYXQgc2Vu ZCBkYXRhDQo+ID4gKyAgLy8NCj4gPiArICBTZW5kRGF0YVNpemUgPSBzaXplb2YNCj4gKElQTUlf QkxPQl9UUkFOU0ZFUl9CTE9CX0VOVU1FUkFURV9TRU5EX0RBVEEpOw0KPiA+ICsgIFNlbmREYXRh ICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKFNlbmRE YXRhID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfRU5VTUVSQVRF X1NFTkRfREFUQSAqKVNlbmREYXRhKS0NCj4gPkJsb2JJbmRleCA9IEJsb2JJbmRleDsNCj4gPiAr DQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pDQo+IChJcG1pQmxvYlRy YW5zZmVyU3ViY29tbWFuZEVudW1lcmF0ZSwgU2VuZERhdGEsIFNlbmREYXRhU2l6ZSwgKFVJTlQ4 DQo+ICopUmVzcG9uc2VEYXRhLCAmUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKCFFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIEFzY2lpU3RyQ3B5UyAoQmxvYklkLCBSZXNwb25z ZURhdGFTaXplLCAoQ0hBUjggKilSZXNwb25zZURhdGEpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgIEJsb2JJZCAgICAg ICAgICBUaGUgSUQgb2YgdGhlIGJsb2IgdG8gb3Blbg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAg ICBGbGFncyAgICAgICAgICAgRmxhZ3MgdG8gY29udHJvbCBob3cgdGhlIGJsb2IgaXMgb3BlbmVk DQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIFNlc3Npb25JZCAgICAgICBBIHVuaXF1ZSBzZXNz aW9uIGlkZW50aWZpZXINCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgICAgICBTdWNjZXNzZnVsbHkgb3BlbmVkIHRoZSBibG9iLg0KPiA+ICsgIEByZXR2YWwgT3Ro ZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCj4gPiArKiovDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2Zlck9wZW4gKA0KPiA+ICsgIElOICBDSEFS OCAgICpCbG9iSWQsDQo+ID4gKyAgSU4gIFVJTlQxNiAgRmxhZ3MsDQo+ID4gKyAgT1VUIFVJTlQx NiAgKlNlc3Npb25JZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1 czsNCj4gPiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4gKyAgVUlOVDggICAgICAgKlJl c3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICBTZW5kRGF0YVNpemU7DQo+ID4gKyAgVUlO VDMyICAgICAgUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArICBDSEFSOCAgICAgICAqQmxvYlNlYXJj aDsNCj4gPiArICBVSU5UMzIgICAgICBOdW1CbG9iczsNCj4gPiArICBVSU5UMTYgICAgICBJbmRl eDsNCj4gPiArICBCT09MRUFOICAgICBCbG9iRm91bmQ7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gQmVmb3JlIG9wZW5pbmcgYSBibG9iLCBuZWVkIHRvIGNoZWNrIGlmIGl0IGV4aXN0cw0K PiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlckdldENvdW50ICgmTnVt QmxvYnMpOw0KPiANCj4gSSB0aGluayBpdCBzaG91bGQgYmUgcmVtb3ZlZCBhcyB0aGF0IHdpbGwg ZHVwbGljYXRlIHdvcmsNCj4gDQo+IFRoZSBkcml2ZXJzIHVzaW5nIElQTUkgYmxvYiBwcm90b2Nv bCB3aWxsICAiZ2V0IGNvdW50IiB0aGVtc2VsdmVzLg0KPiANCj4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpIHx8IChOdW1CbG9icyA9PSAwKSkgew0KPiA+ICsgICAgaWYgKFN0YXR1cyA9PSBF RklfVU5TVVBQT1JURUQpIHsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IENvdWxkIG5vdCBmaW5k IGFueSBibG9iczogJXJcbiIsDQo+IF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ID4gKyAgICBy ZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEJsb2JTZWFyY2gg PSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKENIQVI4KSAqDQo+IElQTUlfT0VNX0JMT0JfTUFY X0RBVEFfUEVSX1BBQ0tFVCk7DQo+ID4gKyAgaWYgKEJsb2JTZWFyY2ggPT0gTlVMTCkgew0KPiA+ ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgQmxvYkZvdW5kID0gRkFMU0U7DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVt QmxvYnM7IEluZGV4KyspIHsNCj4gPiArICAgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJFbnVt ZXJhdGUgKEluZGV4LCBCbG9iU2VhcmNoKTsNCj4gdGhlIHNhbWUgaGVyZQ0KPiA+ICsgICAgaWYg KCghRUZJX0VSUk9SIChTdGF0dXMpKSAmJiAoQXNjaWlTdHJDbXAgKEJsb2JTZWFyY2gsIEJsb2JJ ZCkgPT0gMCkpIHsNCj4gPiArICAgICAgQmxvYkZvdW5kID0gVFJVRTsNCj4gPiArICAgICAgYnJl YWs7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiArICAgIH0N Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICghQmxvYkZvdW5kKSB7DQo+ID4gKyAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiJWE6IENvdWxkIG5vdCBmaW5kIGEgYmxvYiB0aGF0IG1hdGNoZXMg JXNcbiIsDQo+IF9fRlVOQ1RJT05fXywgQmxvYklkKSk7DQo+ID4gKyAgICBGcmVlUG9vbCAoQmxv YlNlYXJjaCk7DQo+ID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgPSBzaXplb2YNCj4gKElQTUlfQkxPQl9UUkFOU0ZF Ul9CTE9CX09QRU5fUkVTUE9OU0UpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YSAgICAgPSBBbGxvY2F0 ZVplcm9Qb29sIChSZXNwb25zZURhdGFTaXplKTsNCj4gPiArICBpZiAoUmVzcG9uc2VEYXRhID09 IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+ICsgIC8v DQo+ID4gKyAgU2VuZERhdGFTaXplID0gc2l6ZW9mDQo+ICgoKElQTUlfQkxPQl9UUkFOU0ZFUl9C TE9CX09QRU5fU0VORF9EQVRBICopU2VuZERhdGEpLT5GbGFncykgKw0KPiAoKEFzY2lpU3RyTGVu IChCbG9iSWQpKSAqIHNpemVvZiAoQ0hBUjgpKSArIHNpemVvZiAoQ0hBUjgpOw0KPiA+ICsgIFNl bmREYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgaWYg KFNlbmREYXRhID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEFzY2lpU3RyQ3B5UyAoKChJUE1JX0JMT0JfVFJB TlNGRVJfQkxPQl9PUEVOX1NFTkRfREFUQQ0KPiAqKVNlbmREYXRhKS0+QmxvYklkLCBBc2NpaVN0 clNpemUgKEJsb2JJZCkgLyBzaXplb2YgKENIQVI4KSwgQmxvYklkKTsNCj4gPiArICAoKElQTUlf QkxPQl9UUkFOU0ZFUl9CTE9CX09QRU5fU0VORF9EQVRBICopU2VuZERhdGEpLT5GbGFncw0KPiA9 IEZsYWdzOw0KPiA+ICsgIC8vIGFwcGVuZCBudWxsIGNoYXIgdG8gU2VuZERhdGENCj4gPiArICBT ZW5kRGF0YVtTZW5kRGF0YVNpemUtMV0gPSAwOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1p QmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kT3Blbiwg U2VuZERhdGEsIFNlbmREYXRhU2l6ZSwgKFVJTlQ4DQo+ICopUmVzcG9uc2VEYXRhLCAmUmVzcG9u c2VEYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAg ICpTZXNzaW9uSWQgPSAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX09QRU5fUkVTUE9OU0UNCj4g KilSZXNwb25zZURhdGEpLT5TZXNzaW9uSWQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBGcmVl UG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPiArICBGcmVlUG9vbCAoU2VuZERhdGEpOw0KPiA+ICsg IEZyZWVQb29sIChCbG9iU2VhcmNoKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAg IFRoZSBzZXNzaW9uIElEIHJldHVybmVkIGZyb20gYSBjYWxsIHRvDQo+IEJsb2JPcGVuDQo+ID4g KyAgQHBhcmFtW2luXSAgICAgICAgIE9mZnNldCAgICAgICAgICBUaGUgb2Zmc2V0IG9mIHRoZSBi bG9iIGZyb20gd2hpY2ggdG8gc3RhcnQNCj4gcmVhZGluZw0KPiA+ICsgIEBwYXJhbVtpbl0gICAg ICAgICBSZXF1ZXN0ZWRTaXplICAgVGhlIGxlbmd0aCBvZiBkYXRhIHRvIHJlYWQNCj4gPiArICBA cGFyYW1bb3V0XSAgICAgICAgRGF0YSAgICAgICAgICAgIERhdGEgcmVhZCBmcm9tIHRoZSBibG9i DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vz c2Z1bGx5IHJlYWQgZnJvbSB0aGUgYmxvYi4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAg ICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJSZWFkICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9u SWQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgT2Zmc2V0LA0KPiA+ICsgIElOICBVSU5UMzIgIFJlcXVl c3RlZFNpemUsDQo+ID4gKyAgT1VUIFVJTlQ4ICAgKkRhdGENCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKyAgVUlOVDggICAgICAgKlNlbmREYXRhOw0K PiA+ICsgIFVJTlQ4ICAgICAgICpSZXNwb25zZURhdGE7DQo+ID4gKyAgVUlOVDMyICAgICAgU2Vu ZERhdGFTaXplOw0KPiA+ICsgIFVJTlQzMiAgICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4gKw0K PiA+ICsgIGlmIChEYXRhID09IE5VTEwpIHsNCj4gPiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUmVzcG9u c2VEYXRhU2l6ZSA9IFJlcXVlc3RlZFNpemUgKiBzaXplb2YgKFVJTlQ4KTsNCj4gPiArICBSZXNw b25zZURhdGEgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4g KyAgaWYgKFJlc3BvbnNlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZvcm1h dCBzZW5kIGRhdGENCj4gPiArICAvLw0KPiA+ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZg0KPiAo SVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9TRU5EX0RBVEEpOw0KPiA+ICsgIFNlbmREYXRh ICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKFNlbmRE YXRhID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9TRU5E X0RBVEEgKilTZW5kRGF0YSktDQo+ID5TZXNzaW9uSWQgICAgID0gU2Vzc2lvbklkOw0KPiA+ICsg ICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfUkVBRF9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ ID5PZmZzZXQgICAgICAgID0gT2Zmc2V0Ow0KPiA+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JM T0JfUkVBRF9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ID5SZXF1ZXN0ZWRTaXplID0gUmVxdWVz dGVkU2l6ZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1p IChJcG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZFJlYWQsDQo+IFNlbmREYXRhLCBTZW5kRGF0YVNp emUsIChVSU5UOCAqKVJlc3BvbnNlRGF0YSwgJlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBDb3B5TWVtIChEYXRhLCAoKElQTUlf QkxPQl9UUkFOU0ZFUl9CTE9CX1JFQURfUkVTUE9OU0UNCj4gKilSZXNwb25zZURhdGEpLT5EYXRh LCBSZXNwb25zZURhdGFTaXplICogc2l6ZW9mIChVSU5UOCkpOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgRnJlZVBvb2wgKFNlbmREYXRh KTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRoZSBzZXNzaW9uIElEIHJldHVy bmVkIGZyb20gYSBjYWxsIHRvDQo+IEJsb2JPcGVuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAg IE9mZnNldCAgICAgICAgICBUaGUgb2Zmc2V0IG9mIHRoZSBibG9iIGZyb20gd2hpY2ggdG8gc3Rh cnQNCj4gd3JpdGluZw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBEYXRhICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHdyb3RlIHRvIHRoZSBibG9iLg0K PiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJy ZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2ZlcldyaXRl ICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgT2Zm c2V0LA0KPiA+ICsgIElOICBVSU5UOCAgICpEYXRhLA0KPiA+ICsgIElOICBVSU5UMzIgIFdyaXRl TGVuZ3RoDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ ICsgIFVJTlQ4ICAgICAgICpTZW5kRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICBTZW5kRGF0YVNp emU7DQo+ID4gKyAgVUlOVDMyICAgICAgUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArDQo+ID4gKyAg Ly8NCj4gPiArICAvLyBGb3JtYXQgc2VuZCBkYXRhDQo+ID4gKyAgLy8NCj4gPiArICBTZW5kRGF0 YVNpemUgPSBzaXplb2YgKFNlc3Npb25JZCkgKyBzaXplb2YgKE9mZnNldCkgKyBXcml0ZUxlbmd0 aDsNCj4gPiArICBTZW5kRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChTZW5kRGF0YVNpemUp Ow0KPiA+ICsgIGlmIChTZW5kRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAoKElQTUlfQkxPQl9UUkFO U0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFUQSAqKVNlbmREYXRhKS0NCj4gPlNlc3Npb25JZCA9IFNl c3Npb25JZDsNCj4gPiArICAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFU QSAqKVNlbmREYXRhKS0NCj4gPk9mZnNldCAgICA9IE9mZnNldDsNCj4gPiArICBDb3B5TWVtICgo KElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFUQQ0KPiAqKVNlbmREYXRhKS0+ RGF0YSwgRGF0YSwgc2l6ZW9mIChVSU5UOCkgKiBXcml0ZUxlbmd0aCk7DQo+ID4gKw0KPiA+ICsg IFJlc3BvbnNlRGF0YVNpemUgPSAwOw0KPiA+ICsgIFN0YXR1cyAgICAgICAgICAgPSBJcG1pQmxv YlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kV3JpdGUsIFNl bmREYXRhLCBTZW5kRGF0YVNpemUsIE5VTEwsDQo+ICZSZXNwb25zZURhdGFTaXplKTsNCj4gPiAr DQo+ID4gKyAgRnJlZVBvb2wgKFNlbmREYXRhKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklk ICAgICAgICBUaGUgc2Vzc2lvbiBJRCByZXR1cm5lZCBmcm9tIGEgY2FsbCB0bw0KPiBCbG9iT3Bl bg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBDb21taXREYXRhTGVuZ3RoIFRoZSBsZW5ndGgg b2YgZGF0YSB0byBjb21taXQgdG8gdGhlDQo+IGJsb2INCj4gPiArICBAcGFyYW1baW5dICAgICAg ICAgQ29tbWl0RGF0YSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gY29tbWl0DQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bCBj b21taXQgdG8gdGhlIGJsb2IuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAgICAgICAg ICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJ cG1pQmxvYlRyYW5zZmVyQ29tbWl0ICgNCj4gPiArICBJTiAgVUlOVDE2ICBTZXNzaW9uSWQsDQo+ ID4gKyAgSU4gIFVJTlQ4ICAgQ29tbWl0RGF0YUxlbmd0aCwNCj4gPiArICBJTiAgVUlOVDggICAq Q29tbWl0RGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsN Cj4gPiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4gKyAgVUlOVDMyICAgICAgU2VuZERh dGFTaXplOw0KPiA+ICsgIFVJTlQzMiAgICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4gKw0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+ICsgIC8vDQo+ID4gKyAgU2Vu ZERhdGFTaXplID0gc2l6ZW9mIChTZXNzaW9uSWQpICsgc2l6ZW9mIChDb21taXREYXRhTGVuZ3Ro KSArDQo+IENvbW1pdERhdGFMZW5ndGg7DQo+ID4gKyAgU2VuZERhdGEgICAgID0gQWxsb2NhdGVa ZXJvUG9vbCAoU2VuZERhdGFTaXplKTsNCj4gPiArICBpZiAoU2VuZERhdGEgPT0gTlVMTCkgew0K PiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9DT01NSVRfU0VORF9EQVRBICopU2VuZERh dGEpLQ0KPiA+U2Vzc2lvbklkICAgICAgICA9IFNlc3Npb25JZDsNCj4gPiArICAoKElQTUlfQkxP Ql9UUkFOU0ZFUl9CTE9CX0NPTU1JVF9TRU5EX0RBVEEgKilTZW5kRGF0YSktDQo+ID5Db21taXRE YXRhTGVuZ3RoID0gQ29tbWl0RGF0YUxlbmd0aDsNCj4gPiArICBDb3B5TWVtICgoKElQTUlfQkxP Ql9UUkFOU0ZFUl9CTE9CX0NPTU1JVF9TRU5EX0RBVEENCj4gKilTZW5kRGF0YSktPkNvbW1pdERh dGEsIENvbW1pdERhdGEsIHNpemVvZiAoVUlOVDgpICoNCj4gQ29tbWl0RGF0YUxlbmd0aCk7DQo+ ID4gKw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgPSAwOw0KPiA+ICsNCj4gPiArICBTdGF0dXMg PSBJcG1pQmxvYlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5k Q29tbWl0LCBTZW5kRGF0YSwgU2VuZERhdGFTaXplLCBOVUxMLA0KPiAmUmVzcG9uc2VEYXRhU2l6 ZSk7DQo+ID4gKw0KPiA+ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFN0 YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAg IFNlc3Npb25JZCAgICAgICBUaGUgc2Vzc2lvbiBJRCByZXR1cm5lZCBmcm9tIGEgY2FsbCB0bw0K PiBCbG9iT3Blbg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg ICAgIFRoZSBibG9iIHdhcyBjbG9zZWQuDQo+ID4gKyAgQHJldHZhbCBPdGhlciAgICAgICAgICAg ICAgICAgICAgICBBbiBlcnJvciBvY2N1cnJlZA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0K PiA+ICtJcG1pQmxvYlRyYW5zZmVyQ2xvc2UgKA0KPiA+ICsgIElOICBVSU5UMTYgIFNlc3Npb25J ZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBV SU5UOCAgICAgICAqU2VuZERhdGE7DQo+ID4gKyAgVUlOVDMyICAgICAgU2VuZERhdGFTaXplOw0K PiA+ICsgIFVJTlQzMiAgICAgIFJlc3BvbnNlRGF0YVNpemU7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0YQ0KPiA+ICsgIC8vDQo+ID4gKyAgU2VuZERhdGFTaXpl ID0gc2l6ZW9mDQo+IChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9DTE9TRV9TRU5EX0RBVEEpOw0K PiA+ICsgIFNlbmREYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFNlbmREYXRhU2l6ZSk7DQo+ ID4gKyAgaWYgKFNlbmREYXRhID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICgoSVBNSV9CTE9CX1RSQU5TRkVS X0JMT0JfQ0xPU0VfU0VORF9EQVRBICopU2VuZERhdGEpLQ0KPiA+U2Vzc2lvbklkID0gU2Vzc2lv bklkOw0KPiA+ICsNCj4gPiArICBSZXNwb25zZURhdGFTaXplID0gMDsNCj4gPiArDQo+ID4gKyAg U3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pIChJcG1pQmxvYlRyYW5zZmVyU3ViY29t bWFuZENsb3NlLA0KPiBTZW5kRGF0YSwgU2VuZERhdGFTaXplLCBOVUxMLCAmUmVzcG9uc2VEYXRh U2l6ZSk7DQo+ID4gKw0KPiA+ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4gKyAgcmV0dXJu IFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg ICAgIEJsb2JJZCAgICAgICAgICBUaGUgQmxvYklkIHRvIGJlIGRlbGV0ZWQNCj4gPiArDQo+ID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBUaGUgYmxvYiB3YXMgZGVsZXRl ZC4NCj4gPiArICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9j Y3VycmVkDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJE ZWxldGUgKA0KPiA+ICsgIElOICBDSEFSOCAgKkJsb2JJZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ ID4gKyAgVUlOVDMyICAgICAgU2VuZERhdGFTaXplOw0KPiA+ICsgIFVJTlQzMiAgICAgIFJlc3Bv bnNlRGF0YVNpemU7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRm9ybWF0IHNlbmQgZGF0 YQ0KPiA+ICsgIC8vDQo+ID4gKyAgU2VuZERhdGFTaXplID0gc2l6ZW9mDQo+IChJUE1JX0JMT0Jf VFJBTlNGRVJfQkxPQl9ERUxFVEVfU0VORF9EQVRBKTsNCj4gPiArICBTZW5kRGF0YSAgICAgPSBB bGxvY2F0ZVplcm9Qb29sIChTZW5kRGF0YVNpemUpOw0KPiA+ICsgIGlmIChTZW5kRGF0YSA9PSBO VUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBBc2NpaVN0ckNweVMgKCgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfREVM RVRFX1NFTkRfREFUQQ0KPiAqKVNlbmREYXRhKS0+QmxvYklkLCBBc2NpaVN0ckxlbiAoQmxvYklk KSwgQmxvYklkKTsNCj4gPiArDQo+ID4gKyAgUmVzcG9uc2VEYXRhU2l6ZSA9IDA7DQo+ID4gKw0K PiA+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiAoSXBtaUJsb2JUcmFu c2ZlclN1YmNvbW1hbmREZWxldGUsIFNlbmREYXRhLCBTZW5kRGF0YVNpemUsIE5VTEwsDQo+ICZS ZXNwb25zZURhdGFTaXplKTsNCj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKFNlbmREYXRhKTsNCj4g PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFy YW1baW5dICAgICAgICAgQmxvYklkICAgICAgICAgIFRoZSBCbG9iIElEIHRvIGdhdGhlciBzdGF0 aXN0aWNzIGZvcg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgICBCbG9iU3RhdGUgICAgICAgVGhl IGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJsb2INCj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgU2l6 ZSAgICAgICAgICAgIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGJsb2INCj4gPiArICBAcGFyYW1bb3V0 XSAgICAgICAgTWV0YWRhdGFMZW5ndGggIExlbmd0aCBvZiB0aGUgb3B0aW9uYWwgbWV0YWRhdGEN Cj4gPiArICBAcGFyYW1bb3V0XSAgICAgICAgTWV0YWRhdGEgICAgICAgIE9wdGlvbmFsIGJsb2It c3BlY2lmaWMgbWV0YWRhdGENCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgICAgICBUaGUgYmxvYiBzdGF0aXN0aWNzIHdlcmUgc3VjY2Vzc2Z1bGx5DQo+IGdhdGhl cmVkLg0KPiA+ICsgIEByZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICAgICAgQW4gZXJyb3Ig b2NjdXJyZWQNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSXBtaUJsb2JUcmFuc2Zl clN0YXQgKA0KPiA+ICsgIElOICBDSEFSOCAgICpCbG9iSWQsDQo+ID4gKyAgT1VUIFVJTlQxNiAg KkJsb2JTdGF0ZSwNCj4gPiArICBPVVQgVUlOVDMyICAqU2l6ZSwNCj4gPiArICBPVVQgVUlOVDgg ICAqTWV0YWRhdGFMZW5ndGgsDQo+ID4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFVJTlQ4ICAgICAg ICpTZW5kRGF0YTsNCj4gPiArICBVSU5UOCAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+ICsgIFVJ TlQzMiAgICAgIFNlbmREYXRhU2l6ZTsNCj4gPiArICBVSU5UMzIgICAgICBSZXNwb25zZURhdGFT aXplOw0KPiA+ICsNCj4gPiArICBpZiAoTWV0YWRhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgQVNT RVJUIChGQUxTRSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICBSZXNwb25zZURhdGFTaXplID0gc2l6ZW9mDQo+IChJUE1JX0JMT0JfVFJBTlNG RVJfQkxPQl9TVEFUX1JFU1BPTlNFKTsNCj4gPiArICBSZXNwb25zZURhdGEgICAgID0gQWxsb2Nh dGVaZXJvUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKFJlc3BvbnNlRGF0YSA9 PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGENCj4gPiArICAv Lw0KPiA+ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZg0KPiAoSVBNSV9CTE9CX1RSQU5TRkVSX0JM T0JfU1RBVF9TRU5EX0RBVEEpOw0KPiA+ICsgIFNlbmREYXRhICAgICA9IEFsbG9jYXRlWmVyb1Bv b2wgKFNlbmREYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKFNlbmREYXRhID09IE5VTEwpIHsNCj4gPiAr ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IEFzY2lpU3RyQ3B5UyAoKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1NFTkRfREFUQQ0K PiAqKVNlbmREYXRhKS0+QmxvYklkLCBJUE1JX09FTV9CTE9CX01BWF9EQVRBX1BFUl9QQUNLRVQs IEJsb2JJZCk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBt aSAoSXBtaUJsb2JUcmFuc2ZlclN1YmNvbW1hbmRTdGF0LA0KPiBTZW5kRGF0YSwgU2VuZERhdGFT aXplLCAoVUlOVDggKilSZXNwb25zZURhdGEsICZSZXNwb25zZURhdGFTaXplKTsNCj4gPiArICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgKkJsb2JTdGF0ZSAgICAgID0gKChJ UE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFDQo+ICopUmVzcG9uc2VEYXRhKS0+ QmxvYlN0YXRlOw0KPiA+ICsgICAgKlNpemUgICAgICAgICAgID0gKChJUE1JX0JMT0JfVFJBTlNG RVJfQkxPQl9TVEFUX1JFU1BPTlNFDQo+ICopUmVzcG9uc2VEYXRhKS0+U2l6ZTsNCj4gPiArICAg ICpNZXRhZGF0YUxlbmd0aCA9ICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU1RBVF9SRVNQT05T RQ0KPiAqKVJlc3BvbnNlRGF0YSktPk1ldGFEYXRhTGVuOw0KPiA+ICsNCj4gPiArICAgIENvcHlN ZW0gKCZNZXRhZGF0YSwNCj4gJigoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfU1RBVF9SRVNQT05T RSAqKVJlc3BvbnNlRGF0YSktDQo+ID5NZXRhRGF0YSwgc2l6ZW9mICgoKElQTUlfQkxPQl9UUkFO U0ZFUl9CTE9CX1NUQVRfUkVTUE9OU0UNCj4gKilSZXNwb25zZURhdGEpLT5NZXRhRGF0YSkpOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAg RnJlZVBvb2wgKFNlbmREYXRhKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgU2Vzc2lvbklkICAgICAgIFRo ZSBJRCBvZiB0aGUgc2Vzc2lvbiB0byBnYXRoZXIgc3RhdGlzdGljcyBmb3INCj4gPiArICBAcGFy YW1bb3V0XSAgICAgICAgQmxvYlN0YXRlICAgICAgIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBi bG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIFNpemUgICAgICAgICAgICBTaXplIGluIGJ5 dGVzIG9mIHRoZSBibG9iDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICAgIE1ldGFkYXRhTGVuZ3Ro ICBMZW5ndGggb2YgdGhlIG9wdGlvbmFsIG1ldGFkYXRhDQo+ID4gKyAgQHBhcmFtW291dF0gICAg ICAgIE1ldGFkYXRhICAgICAgICBPcHRpb25hbCBibG9iLXNwZWNpZmljIG1ldGFkYXRhDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgVGhlIGJsb2Igc3Rh dGlzdGljcyB3ZXJlIHN1Y2Nlc3NmdWxseQ0KPiBnYXRoZXJlZC4NCj4gPiArICBAcmV0dmFsIE90 aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJTZXNzaW9uU3RhdCAoDQo+ID4gKyAg SU4gIFVJTlQxNiAgU2Vzc2lvbklkLA0KPiA+ICsgIE9VVCBVSU5UMTYgICpCbG9iU3RhdGUsDQo+ ID4gKyAgT1VUIFVJTlQzMiAgKlNpemUsDQo+ID4gKyAgT1VUIFVJTlQ4ICAgKk1ldGFkYXRhTGVu Z3RoLA0KPiA+ICsgIE9VVCBVSU5UOCAgICpNZXRhZGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAqU2VuZERhdGE7DQo+ ID4gKyAgVUlOVDggICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICBTZW5k RGF0YVNpemU7DQo+ID4gKyAgVUlOVDMyICAgICAgUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiArDQo+ ID4gKyAgaWYgKChCbG9iU3RhdGUgPT0gTlVMTCkgfHwgKFNpemUgPT0gTlVMTCkgfHwgKE1ldGFk YXRhTGVuZ3RoID09IE5VTEwpDQo+IHx8IChNZXRhZGF0YSA9PSBOVUxMKSkgew0KPiA+ICsgICAg QVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBSZXNwb25zZURhdGFTaXplID0gc2l6ZW9mDQo+IChJUE1JX0JMT0JfVFJB TlNGRVJfQkxPQl9TVEFUX1JFU1BPTlNFKTsNCj4gPiArICBSZXNwb25zZURhdGEgICAgID0gQWxs b2NhdGVaZXJvUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgaWYgKFJlc3BvbnNlRGF0 YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGENCj4gPiAr ICAvLw0KPiA+ICsgIFNlbmREYXRhU2l6ZSA9IHNpemVvZg0KPiAoSVBNSV9CTE9CX1RSQU5TRkVS X0JMT0JfU0VTU0lPTl9TVEFUX1NFTkRfREFUQSk7DQo+ID4gKyAgU2VuZERhdGEgICAgID0gQWxs b2NhdGVaZXJvUG9vbCAoU2VuZERhdGFTaXplKTsNCj4gPiArICBpZiAoU2VuZERhdGEgPT0gTlVM TCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgKChJUE1JX0JMT0JfVFJBTlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfU0VORF9E QVRBDQo+ICopU2VuZERhdGEpLT5TZXNzaW9uSWQgPSBTZXNzaW9uSWQ7DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiAoSXBtaUJsb2JUcmFuc2ZlclN1 YmNvbW1hbmRTZXNzaW9uU3RhdCwgU2VuZERhdGEsIFNlbmREYXRhU2l6ZSwgKFVJTlQ4DQo+ICop UmVzcG9uc2VEYXRhLCAmUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAqQmxvYlN0YXRlICAgICAgPQ0KPiAoKElQTUlf QkxPQl9UUkFOU0ZFUl9CTE9CX1NFU1NJT05fU1RBVF9SRVNQT05TRQ0KPiAqKVJlc3BvbnNlRGF0 YSktPkJsb2JTdGF0ZTsNCj4gPiArICAgICpTaXplICAgICAgICAgICA9ICgoSVBNSV9CTE9CX1RS QU5TRkVSX0JMT0JfU0VTU0lPTl9TVEFUX1JFU1BPTlNFDQo+ICopUmVzcG9uc2VEYXRhKS0+U2l6 ZTsNCj4gPiArICAgICpNZXRhZGF0YUxlbmd0aCA9DQo+ICgoSVBNSV9CTE9CX1RSQU5TRkVSX0JM T0JfU0VTU0lPTl9TVEFUX1JFU1BPTlNFDQo+ICopUmVzcG9uc2VEYXRhKS0+TWV0YURhdGFMZW47 DQo+ID4gKw0KPiA+ICsgICAgQ29weU1lbSAoJk1ldGFkYXRhLA0KPiAmKChJUE1JX0JMT0JfVFJB TlNGRVJfQkxPQl9TRVNTSU9OX1NUQVRfUkVTUE9OU0UNCj4gKilSZXNwb25zZURhdGEpLT5NZXRh RGF0YSwgc2l6ZW9mDQo+ICgoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1NFU1NJT05fU1RBVF9S RVNQT05TRQ0KPiAqKVJlc3BvbnNlRGF0YSktPk1ldGFEYXRhKSk7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhKTsNCj4gPiArICBGcmVlUG9vbCAoU2VuZERh dGEpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIEBwYXJhbVtpbl0gICAgICAgICBTZXNzaW9uSWQgICAgICAgVGhlIElEIG9mIHRoZSBzZXNz aW9uIHRvIHdyaXRlIG1ldGFkYXRhIGZvcg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICBPZmZz ZXQgICAgICAgICAgVGhlIG9mZnNldCBvZiB0aGUgbWV0YWRhdGEgdG8gd3JpdGUgdG8NCj4gPiAr ICBAcGFyYW1baW5dICAgICAgICAgRGF0YSAgICAgICAgICAgIFRoZSBkYXRhIHRvIHdyaXRlIHRv IHRoZSBtZXRhZGF0YQ0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgICAgIFRoZSBibG9iIG1ldGFkYXRhIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4NCj4gPiAr ICBAcmV0dmFsIE90aGVyICAgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIG9jY3VycmVkDQo+ ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJXcml0ZU1ldGEg KA0KPiA+ICsgIElOICBVSU5UMTYgIFNlc3Npb25JZCwNCj4gPiArICBJTiAgVUlOVDMyICBPZmZz ZXQsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgKkRhdGEsDQo+ID4gKyAgSU4gIFVJTlQzMiAgV3JpdGVM ZW5ndGgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4g KyAgVUlOVDggICAgICAgKlNlbmREYXRhOw0KPiA+ICsgIFVJTlQzMiAgICAgIFNlbmREYXRhU2l6 ZTsNCj4gPiArICBVSU5UMzIgICAgICBSZXNwb25zZURhdGFTaXplOw0KPiA+ICsNCj4gPiArICAv Lw0KPiA+ICsgIC8vIEZvcm1hdCBzZW5kIGRhdGENCj4gPiArICAvLw0KPiA+ICsgIFNlbmREYXRh U2l6ZSA9IHNpemVvZg0KPiAoSVBNSV9CTE9CX1RSQU5TRkVSX0JMT0JfV1JJVEVfU0VORF9EQVRB KTsNCj4gPiArICBTZW5kRGF0YSAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChTZW5kRGF0YVNpemUp Ow0KPiA+ICsgIGlmIChTZW5kRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAoKElQTUlfQkxPQl9UUkFO U0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFUQSAqKVNlbmREYXRhKS0NCj4gPlNlc3Npb25JZCA9IFNl c3Npb25JZDsNCj4gPiArICAoKElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFU QSAqKVNlbmREYXRhKS0NCj4gPk9mZnNldCAgICA9IE9mZnNldDsNCj4gPiArICBDb3B5TWVtICgo KElQTUlfQkxPQl9UUkFOU0ZFUl9CTE9CX1dSSVRFX1NFTkRfREFUQQ0KPiAqKVNlbmREYXRhKS0+ RGF0YSwgRGF0YSwgc2l6ZW9mIChVSU5UOCkgKiBXcml0ZUxlbmd0aCk7DQo+ID4gKw0KPiA+ICsg IFJlc3BvbnNlRGF0YVNpemUgPSAwOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRy YW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kV3JpdGVNZXRhLCBT ZW5kRGF0YSwgU2VuZERhdGFTaXplLCBOVUxMLA0KPiAmUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4g Kw0KPiA+ICsgIEZyZWVQb29sIChTZW5kRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBpcyB0aGUgZGVjbGFyYXRpb24gb2Yg YW4gRUZJIGltYWdlIGVudHJ5IHBvaW50LiBUaGlzIGVudHJ5IHBvaW50IGlzDQo+ID4gKyAgdGhl IHNhbWUgZm9yIFVFRkkgQXBwbGljYXRpb25zLCBVRUZJIE9TIExvYWRlcnMsIGFuZCBVRUZJIERy aXZlcnMNCj4gaW5jbHVkaW5nDQo+ID4gKyAgYm90aCBkZXZpY2UgZHJpdmVycyBhbmQgYnVzIGRy aXZlcnMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICAgIFRoZSBm aXJtd2FyZSBhbGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUgVUVGSQ0KPiBpbWFnZS4NCj4gPiArICBA cGFyYW1baW5dICBTeXN0ZW1UYWJsZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0g VGFibGUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBv cGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgICAgICBBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK0lwbWlCbG9iVHJhbnNmZXJE eGVEcml2ZXJFbnRyeVBvaW50ICgNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhh bmRsZSwNCj4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICByZXR1cm4gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVy ZmFjZXMgKA0KPiA+ICsgICAgICAgICAgICAgICAgJkltYWdlSGFuZGxlLA0KPiA+ICsgICAgICAg ICAgICAgICAgJmdFZGtpaUlwbWlCbG9iVHJhbnNmZXJQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAg ICAgICAgICAgICAoVk9JRCAqKSZtSXBtaUJsb2JUcmFuc2ZlciwNCj4gPiArICAgICAgICAgICAg ICAgIE5VTEwNCj4gPiArICAgICAgICAgICAgICAgICk7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0 DQo+IGEvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJsb2JUcmFuc2Zl ckR4ZS9Vbml0VGVzdC9JcG1pDQo+IEJsb2JUcmFuc2ZlclRlc3RVbml0VGVzdHMuYw0KPiBiL0Zl YXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9iVHJhbnNmZXJEeGUvVW5p dFRlc3QvSXBtDQo+IGlCbG9iVHJhbnNmZXJUZXN0VW5pdFRlc3RzLmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmYzMjY0Njc5MjINCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwv SXBtaUJsb2JUcmFuc2ZlckR4ZS9Vbml0VGVzdC9JcG0NCj4gaUJsb2JUcmFuc2ZlclRlc3RVbml0 VGVzdHMuYw0KPiA+IEBAIC0wLDAgKzEsMTExMyBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArKg0K PiA+ICsqICBDb3B5cmlnaHQgKGMpIDIwMjIsIE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4NCj4gMjAyMw0KPiA+ICsqDQo+ID4gKyogIFNQRFgtRmlsZUNvcHlyaWdodFRl eHQ6IENvcHlyaWdodCAoYykgMjAyMiBOVklESUEgQ09SUE9SQVRJT04gJg0KPiBBRkZJTElBVEVT DQo+ID4gKyogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ID4gKyoNCj4gPiArKiovDQo+ID4gKyNpbmNsdWRlIDxzdGRhcmcuaD4NCj4gPiArI2luY2x1ZGUg PHN0ZGRlZi5oPg0KPiA+ICsjaW5jbHVkZSA8c2V0am1wLmg+DQo+ID4gKyNpbmNsdWRlIDxzdGRp bnQuaD4NCj4gPiArI2luY2x1ZGUgPGNtb2NrYS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPFVl ZmkuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICsjaW5j bHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlB bGxvY2F0aW9uTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0hvc3RCYXNlZFRlc3RTdHVi TGliL0lwbWlTdHViTGliLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9Vbml0VGVz dExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvSXBtaUJsb2JUcmFuc2Zlci5oPg0KPiA+ ICsjaW5jbHVkZSAiLi4vSW50ZXJuYWxJcG1pQmxvYlRyYW5zZmVyLmgiDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFVOSVRfVEVTVF9OQU1FICAgICAiSVBNSSBCbG9iIFRyYW5zZmVyIFVuaXQgVGVzdHMi DQo+ID4gKyNkZWZpbmUgVU5JVF9URVNUX1ZFUlNJT04gICIxLjAiDQo+ID4gKw0KPiA+ICtVSU5U OCAgSW52YWxpZENvbXBsZXRpb25bXSA9IHsNCj4gPiArICAweEMwLCAgICAgICAgICAgICAvLyBD b21wbGV0aW9uQ29kZQ0KPiA+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsIC8vIE9wZW5CTUMgT0VODQo+ ID4gK307DQo+ID4gKyNkZWZpbmUgSU5WQUxJRF9DT01QTEVUSU9OX1NJWkUgIDQgKiBzaXplb2Yo VUlOVDgpDQo+ID4gKw0KPiA+ICtVSU5UOCAgTm9EYXRhUmVzcG9uc2VbXSA9IHsNCj4gPiArICAw eDAwLCAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ICsgIDB4Q0YsIDB4QzIsIDB4 MDAsIC8vIE9wZW5CTUMgT0VODQo+ID4gK307DQo+ID4gKyNkZWZpbmUgTk9fREFUQV9SRVNQT05T RV9TSVpFICA0ICogc2l6ZW9mKFVJTlQ4KQ0KPiA+ICsNCj4gPiArVUlOVDggIEJhZE9lblJlc3Bv bnNlW10gPSB7DQo+ID4gKyAgMHgwMCwgICAgICAgICAgICAgLy8gQ29tcGxldGlvbkNvZGUNCj4g PiArICAweEZGLCAweEMyLCAweDAwLCAvLyBXcm9uZyBPRU4NCj4gPiArfTsNCj4gPiArI2RlZmlu ZSBCQURfT0VOX1JFU1BPTlNFX1NJWkUgIDQgKiBzaXplb2YoVUlOVDgpDQo+ID4gKw0KPiA+ICtV SU5UOCAgQmFkQ3JjUmVzcG9uc2VbXSA9IHsNCj4gPiArICAweDAwLCAgICAgICAgICAgICAgICAg ICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9w ZW5CTUMgT0VODQo+ID4gKyAgMHgwMCwgMHgwMCwgICAgICAgICAgICAgLy8gQ1JDDQo+ID4gKyAg MHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gRGF0YQ0KPiA+ICt9Ow0KPiA+ICsjZGVmaW5lIEJB RF9DUkNfUkVTUE9OU0VfU0laRSAgMTAgKiBzaXplb2YoVUlOVDgpDQo+ID4gKw0KPiA+ICtVSU5U OCAgVmFsaWROb0RhdGFSZXNwb25zZVtdID0gew0KPiA+ICsgIDB4MDAsICAgICAgICAgICAgIC8v IENvbXBsZXRpb25Db2RlDQo+ID4gKyAgMHhDRiwgMHhDMiwgMHgwMCwgLy8gT3BlbkJNQyBPRU4N Cj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgVkFMSURfTk9EQVRBX1JFU1BPTlNFX1NJWkUg IDQgKiBzaXplb2YoVUlOVDgpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICBD b250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRoIHZh cmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVz dC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5k IGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkg b2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNl cyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4g PiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3Qg aGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCAg VU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzDQo+ IGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ ID4gK0dvb2RDcmMgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDggICBEYXRhWzVdID0geyAweDEyLCAweDM0LCAweDU2 LCAweDc4LCAweDkwIH07DQo+ID4gKyAgVUlOVE4gICBEYXRhU2l6ZTsNCj4gPiArICBVSU5UMTYg IENyYzsNCj4gPiArDQo+ID4gKyAgRGF0YVNpemUgPSBzaXplb2YgKERhdGEpOw0KPiA+ICsNCj4g PiArICBDcmMgPSBDYWxjdWxhdGVDcmMxNiAoRGF0YSwgRGF0YVNpemUpOw0KPiA+ICsNCj4gPiAr ICBVVF9BU1NFUlRfRVFVQUwgKENyYywgMHhCOTI4KTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNU X1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29u dGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJp ZWQgcGFyYW1ldGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3Qt Y2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBp dCBpcyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9m IHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMg dGhhdCBtYXkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4g KyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhh cyBjb21wbGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiBm YWlsZWQuDQo+ID4gKyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ ICtCYWRDcmMgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDggICBEYXRhWzVdID0geyAweDEyLCAweDM0LCAweDU2LCAw eDc4LCAweDkwIH07DQo+ID4gKyAgVUlOVE4gICBEYXRhU2l6ZTsNCj4gPiArICBVSU5UMTYgIENy YzsNCj4gPiArDQo+ID4gKyAgRGF0YVNpemUgPSBzaXplb2YgKERhdGEpOw0KPiA+ICsNCj4gPiAr ICBDcmMgPSBDYWxjdWxhdGVDcmMxNiAoRGF0YSwgRGF0YVNpemUpOw0KPiA+ICsNCj4gPiArICBV VF9BU1NFUlRfTk9UX0VRVUFMIChDcmMsIDB4MzQwOSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVT VF9QQVNTRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFy aWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0 LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQg aXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBv ZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2Vz IHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBo YXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBV TklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4g ZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4g PiArU2VuZElwbWlCYWRDb21wbGV0aW9uICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAg Q29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFZPSUQgICAgICAgICpSZXNwb25zZURh dGE7DQo+ID4gKyAgVUlOVDMyICAgICAgKlJlc3BvbnNlRGF0YVNpemU7DQo+ID4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0g TlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9j YXRlWmVyb1Bvb2wNCj4gKElOVkFMSURfQ09NUExFVElPTl9TSVpFKTsNCj4gPiArICBSZXNwb25z ZURhdGFTaXplICAgID0gKFVJTlQzMiAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVUlOVDMy KSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJkludmFsaWRDb21wbGV0 aW9uLA0KPiBJTlZBTElEX0NPTVBMRVRJT05fU0laRSk7DQo+ID4gKw0KPiA+ICsgIE1vY2tJcG1p U3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gSU5WQUxJRF9D T01QTEVUSU9OX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArDQo+ID4gKyAgUmVzcG9uc2VEYXRh ID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoKlJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsg IFN0YXR1cyAgICAgICA9IElwbWlCbG9iVHJhbnNmZXJTZW5kSXBtaQ0KPiAoSXBtaUJsb2JUcmFu c2ZlclN1YmNvbW1hbmRHZXRDb3VudCwgTlVMTCwgMCwgUmVzcG9uc2VEYXRhLA0KPiBSZXNwb25z ZURhdGFTaXplKTsNCj4gPiArDQo+ID4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVz LCBFRklfUFJPVE9DT0xfRVJST1IpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1 bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAgRnJlZVBv b2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlv bmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMg YW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkg Zm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRo b3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250 ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFu ZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1Jf VEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gZmFpbGVkLg0KPiA+ICsq Ki8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2VuZElwbWlOb0Rh dGFSZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBWT0lEICAgICAgICAqUmVzcG9uc2VEYXRhOw0KPiA+ICsgIFVJ TlQzMiAgICAgICpSZXNwb25zZURhdGFTaXplOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsN Cj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0K PiA+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sDQo+ IChOT19EQVRBX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgICAgPSAo VUlOVDMyICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UMzIpKTsNCj4gPiArICBDb3B5 TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmTm9EYXRhUmVzcG9uc2UsDQo+IE5PX0RBVEFfUkVT UE9OU0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFu ZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gTk9fREFUQV9SRVNQT05TRV9TSVpF LCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIFJlc3BvbnNlRGF0YSA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAo Tm9EYXRhUmVzcG9uc2UpKTsNCj4gPiArICBTdGF0dXMgICAgICAgPSBJcG1pQmxvYlRyYW5zZmVy U2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291bnQsIE5VTEwsIDAs IFJlc3BvbnNlRGF0YSwNCj4gUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FT U0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIFVUX0FTU0VS VF9FUVVBTCAoKlJlc3BvbnNlRGF0YVNpemUsIDApOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVz cG9uc2VSZXN1bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4g KyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNT RUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQg ICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBh cmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2Ug cmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMg dGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUg dGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQg bWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29t cGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gZmFpbGVk Lg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2Vu ZElwbWlCYWRPZW5SZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRl eHQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBWT0lEICAgICAgICAqUmVzcG9uc2VEYXRhOw0K PiA+ICsgIFVJTlQzMiAgICAgICpSZXNwb25zZURhdGFTaXplOw0KPiA+ICsgIEVGSV9TVEFUVVMg IFN0YXR1czsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7 DQo+ID4gKw0KPiA+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVpl cm9Qb29sDQo+IChCQURfT0VOX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNp emUgICAgPSAoVUlOVDMyICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UMzIpKTsNCj4g PiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmQmFkT2VuUmVzcG9uc2UsDQo+IEJB RF9PRU5fUkVTUE9OU0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3Vi bWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gQkFEX09FTl9SRVNQ T05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIFJlc3BvbnNlRGF0YSA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZiAoQmFkT2VuUmVzcG9uc2UpKTsNCj4gPiArICBTdGF0dXMgICAgICAgPSBJcG1pQmxv YlRyYW5zZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291bnQs IE5VTEwsIDAsIFJlc3BvbnNlRGF0YSwNCj4gUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1BST1RPQ09MX0VSUk9SKTsN Cj4gPiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgRnJlZVBvb2wg KFJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsgIEZyZWVQb29sIChSZXNwb25zZURhdGEpOw0KPiA+ ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1l dGVyIHRoYXQgZW5hYmxlczoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3Qt Y2FzZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBu ZWVkIGENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1l dGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9v ZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3VtZSBpdC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAg ICAgIFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwu DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2Fz ZSBhc3NlcnRpb24gaGFzDQo+IGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFU VVMNCj4gPiArRUZJQVBJDQo+ID4gK1NlbmRJcG1pQmFkQ3JjUmVzcG9uc2UgKA0KPiA+ICsgIElO IFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVk9J RCAgICAgICAgKlJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICAqUmVzcG9uc2VEYXRh U2l6ZTsNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKyAgVk9JRCAgICAgICAgKk1v Y2tSZXNwb25zZVJlc3VsdHMgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1 bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChCQURfQ1JDX1JFU1BP TlNFX1NJWkUpKTsNCj4gPiArICBSZXNwb25zZURhdGFTaXplICAgID0gKFVJTlQzMiAqKUFsbG9j YXRlWmVyb1Bvb2wgKHNpemVvZiAoVUlOVDMyKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3Bv bnNlUmVzdWx0cywgJkJhZENyY1Jlc3BvbnNlLA0KPiBCQURfQ1JDX1JFU1BPTlNFX1NJWkUpOw0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1v Y2tSZXNwb25zZVJlc3VsdHMsDQo+IEJBRF9DUkNfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1Mp Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklU X1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXNwb25z ZURhdGEgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKEJhZENyY1Jlc3BvbnNl KSk7DQo+ID4gKyAgU3RhdHVzICAgICAgID0gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pDQo+IChJ cG1pQmxvYlRyYW5zZmVyU3ViY29tbWFuZEdldENvdW50LCBOVUxMLCAwLCBSZXNwb25zZURhdGEs DQo+IFJlc3BvbnNlRGF0YVNpemUpOw0KPiA+ICsNCj4gPiArICBVVF9BU1NFUlRfU1RBVFVTX0VR VUFMIChTdGF0dXMsIEVGSV9DUkNfRVJST1IpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9u c2VSZXN1bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKyAg RnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK1VJTlQ4ICBWYWxpZEdldENvdW50UmVzcG9uc2VbXSA9IHsN Cj4gPiArICAweDAwLCAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ICsg IDB4Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMgT0VODQo+ID4gKyAgMHhBNCwgMHg3 OCwgICAgICAgICAgICAgLy8gQ1JDDQo+ID4gKyAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgLy8g RGF0YQ0KPiA+ICt9Ow0KPiA+ICsjZGVmaW5lIFZBTElEX0dFVF9DT1VOVF9SRVNQT05TRV9TSVpF ICAxMCAqIHNpemVvZihVSU5UOCkNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0g IENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVz Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGgg dmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0 ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBh bmQgaXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0 eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNh c2VzIHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0K PiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVz dCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFs ICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMN Cj4gZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkN Cj4gPiArU2VuZElwbWlWYWxpZENvdW50UmVzcG9uc2UgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9D T05URVhUICBDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDggICAgICAgKlJl c3BvbnNlRGF0YTsNCj4gPiArICBVSU5UMzIgICAgICAqUmVzcG9uc2VEYXRhU2l6ZTsNCj4gPiAr ICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJl c3VsdHMgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4 ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0Vf U0laRSkpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YVNpemUgICAgPSAoVUlOVDMyICopQWxsb2NhdGVa ZXJvUG9vbCAoc2l6ZW9mIChVSU5UMzIpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VS ZXN1bHRzLCAmVmFsaWRHZXRDb3VudFJlc3BvbnNlLA0KPiBWQUxJRF9HRVRfQ09VTlRfUkVTUE9O U0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAo KFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfR0VUX0NPVU5UX1JFU1BPTlNF X1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgUmVzcG9uc2VEYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChWYWxp ZEdldENvdW50UmVzcG9uc2UpKTsNCj4gPiArICBTdGF0dXMgICAgICAgPSBJcG1pQmxvYlRyYW5z ZmVyU2VuZElwbWkNCj4gKElwbWlCbG9iVHJhbnNmZXJTdWJjb21tYW5kR2V0Q291bnQsIE5VTEws IDAsIFJlc3BvbnNlRGF0YSwNCj4gUmVzcG9uc2VEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIFVU X0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIEZyZWVQ b29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoUmVzcG9uc2VEYXRh U2l6ZSk7DQo+ID4gKyAgRnJlZVBvb2wgKFJlc3BvbnNlRGF0YSk7DQo+ID4gKyAgcmV0dXJuIFVO SVRfVEVTVF9QQVNTRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtp bl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFi bGVzOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdp dGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAy KSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lE KiBhbmQgaXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJp bGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0 IGNhc2VzIHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0 Lg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQg dGVzdCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0 dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBo YXMNCj4gZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklB UEkNCj4gPiArR2V0Q291bnRWYWxpZENvdW50UmVzcG9uc2UgKA0KPiA+ICsgIElOIFVOSVRfVEVT VF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPiA+ICsgIFVJTlQzMiAgICAgIENvdW50Ow0KPiA+ICsgIFZPSUQgICAgICAgICpN b2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgQ291bnQgPSAwOw0KPiA+ ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICopQWxsb2NhdGVaZXJvUG9v bCAoc2l6ZW9mDQo+IChWQUxJRF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSkpOw0KPiA+ICsgIENv cHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZEdldENvdW50UmVzcG9uc2UsDQo+IFZB TElEX0dFVF9DT1VOVF9SRVNQT05TRV9TSVpFKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gTW9j a0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiBWQUxJ RF9HRVRfQ09VTlRfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9G QUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVy R2V0Q291bnQgKCZDb3VudCk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwg KFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoQ291bnQsIDEp Ow0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4g VU5JVF9URVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArVUlOVDggIFZhbGlkRW51bWVy YXRlUmVzcG9uc2VbXSA9IHsNCj4gPiArICAweDAwLCAgICAgICAgICAgICAgICAgICAvLyBDb21w bGV0aW9uQ29kZQ0KPiA+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMgT0VO DQo+ID4gKyAgMHg4MSwgMHgxMywgICAgICAgICAgICAgLy8gQ1JDDQo+ID4gKyAgMHgyRiwgMHg3 MywgMHg2RCwgMHg2MiwgLy8gRGF0YSA9ICIvc21iaW9zIg0KPiA+ICsgIDB4NjksIDB4NkYsIDB4 NzMsIDB4MDAsDQo+ID4gK307DQo+ID4gKyNkZWZpbmUgVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNF X1NJWkUgIDE0ICogc2l6ZW9mKFVJTlQ4KQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFt W2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVu YWJsZXM6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ug d2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg IDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZP SUQqIGFuZCBpdCBpcyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNp YmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRl c3QgY2FzZXMgdGhhdCBtYXkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUg aXQuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5p dCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9u IGhhcw0KPiBmYWlsZWQuDQo+ID4gKyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VG SUFQSQ0KPiA+ICtFbnVtZXJhdGVWYWxpZFJlc3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1Rf Q09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1czsNCj4gPiArICBDSEFSOCAgICAgICAqQmxvYklkOw0KPiA+ICsgIFZPSUQgICAgICAgICpN b2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVz dWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfRU5VTUVS QVRFX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRz LCAmVmFsaWRFbnVtZXJhdGVSZXNwb25zZSwNCj4gVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJ WkUpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5U OCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+IFZBTElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpF LCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIEJsb2JJZCA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoQ0hBUjgpICoNCj4gSVBN SV9PRU1fQkxPQl9NQVhfREFUQV9QRVJfUEFDS0VUKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0g SXBtaUJsb2JUcmFuc2ZlckVudW1lcmF0ZSAoMCwgQmxvYklkKTsNCj4gPiArDQo+ID4gKyAgVVRf QVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgVVRfQVNT RVJUX01FTV9FUVVBTCAoQmxvYklkLCAiL3NtYmlvcyIsIDcpOw0KPiA+ICsgIEZyZWVQb29sIChN b2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICBGcmVlUG9vbCAoQmxvYklkKTsNCj4gPiArICBy ZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg QHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0 aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2Ug cmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBh DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBp cyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJl c3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkg YWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN1bWUgaXQuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBU aGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNz ZXJ0aW9uIGhhcw0KPiBmYWlsZWQuDQo+ID4gKyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ ID4gK0VGSUFQSQ0KPiA+ICtFbnVtZXJhdGVJbnZhbGlkQnVmZmVyICgNCj4gPiArICBJTiBVTklU X1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIENIQVI4ICAg ICAgICpCbG9iSWQ7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAg ICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3Bv bnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURf RU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VS ZXN1bHRzLCAmVmFsaWRFbnVtZXJhdGVSZXNwb25zZSwNCj4gVkFMSURfRU5VTUVSQVRFX1JFU1BP TlNFX1NJWkUpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQg KChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+IFZBTElEX0VOVU1FUkFURV9SRVNQT05T RV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIEJsb2JJZCA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIFVUX0VYUEVDVF9BU1NF UlRfRkFJTFVSRSAoSXBtaUJsb2JUcmFuc2ZlckVudW1lcmF0ZSAoMCwgQmxvYklkKSwNCj4gTlVM TCk7DQo+ID4gKw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiAr ICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArVUlOVDggIFZh bGlkT3BlblJlc3BvbnNlW10gPSB7DQo+ID4gKyAgMHgwMCwgICAgICAgICAgICAgLy8gQ29tcGxl dGlvbkNvZGUNCj4gPiArICAweENGLCAweEMyLCAweDAwLCAvLyBPcGVuQk1DIE9FTg0KPiA+ICsg IDB4OTMsIDB4RDEsICAgICAgIC8vIENSQw0KPiA+ICsgIDB4MDMsIDB4MDAsICAgICAgIC8vIFNl c3Npb25JZCA9IDMNCj4gPiArfTsNCj4gPiArI2RlZmluZSBWQUxJRF9PUEVOX1JFU1BPTlNFX1NJ WkUgIDggKiBzaXplb2YoVUlOVDgpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5d ICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxl czoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRo IHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikg dGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCog YW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxp dHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBj YXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4N Cj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRl c3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZh bCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFz DQo+IGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiArRUZJQVBJ DQo+ID4gK09wZW5WYWxpZFJlc3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAg Q29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4g PiArICBDSEFSOCAgICAgICAqQmxvYklkOw0KPiA+ICsgIFVJTlQxNiAgICAgIEZsYWdzOw0KPiA+ ICsgIFVJTlQxNiAgICAgIFNlc3Npb25JZDsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3Bv bnNlUmVzdWx0cyAgPSBOVUxMOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1 bHRzMiA9IE5VTEw7DQo+ID4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJlc3VsdHMzID0g TlVMTDsNCj4gPiArDQo+ID4gKyAgRmxhZ3MgPSBCTE9CX1RSQU5TRkVSX1NUQVRfT1BFTl9XOw0K PiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEFuIG9wZW4gY2FsbCBlZmZlY3RpdmVseSBsZWFk cyB0byB0aHJlZSBJUE1JIGNvbW1hbmRzDQo+ID4gKyAgLy8gMS4gR2V0Q291bnQgb2YgYmxvYnMN Cj4gPiArICAvLyAyLiBFbnVtZXJhdGUgdGhlIHJlcXVlc3RlZCBibG9iDQo+ID4gKyAgLy8gMy4g T3BlbiB0aGUgcmVxdWVzdGVkIGJsb2INCj4gPiArICAvLw0KPiA+ICsgIC8vIFNvIHdlJ2xsIHB1 c2ggdGhyZWUgSXBtaSByZXNwb25zZXMgaW4gdGhpcyBjYXNlDQo+ID4gKyAgLy8NCj4gPiArDQo+ ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNp emVvZg0KPiAoVkFMSURfT1BFTl9SRVNQT05TRV9TSVpFKSk7DQo+ID4gKw0KPiA+ICsgIENvcHlN ZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZE9wZW5SZXNwb25zZSwNCj4gVkFMSURfT1BF Tl9SRVNQT05TRV9TSVpFKTsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQg KChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+IFZBTElEX09QRU5fUkVTUE9OU0VfU0la RSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAr ICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzMiA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZg0KPiAoVkFMSURfRU5VTUVSQVRFX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5 TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzMiwgJlZhbGlkRW51bWVyYXRlUmVzcG9uc2UsDQo+IFZB TElEX0VOVU1FUkFURV9SRVNQT05TRV9TSVpFKTsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1 Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25zZVJlc3VsdHMyLA0KPiBWQUxJRF9FTlVN RVJBVEVfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzMyA9IChVSU5UOCAq KUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfR0VUX0NPVU5UX1JFU1BPTlNFX1NJ WkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzMywgJlZhbGlkR2V0Q291 bnRSZXNwb25zZSwNCj4gVkFMSURfR0VUX0NPVU5UX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsgIFN0 YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0 czMsDQo+IFZBTElEX0dFVF9DT1VOVF9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ID4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFVOSVRfVEVTVF9F UlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEJsb2JJZCA9ICIvc21i aW9zIjsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2Zlck9wZW4gKEJsb2JJ ZCwgRmxhZ3MsICZTZXNzaW9uSWQpOw0KPiA+ICsNCj4gPiArICBVVF9BU1NFUlRfU1RBVFVTX0VR VUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKFNlc3Np b25JZCwgMyk7DQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+ICsg IHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtVSU5UOCAgVmFs aWRSZWFkUmVzcG9uc2VbXSA9IHsNCj4gPiArICAweDAwLCAgICAgICAgICAgICAgICAgICAvLyBD b21wbGV0aW9uQ29kZQ0KPiA+ICsgIDB4Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMg T0VODQo+ID4gKyAgMHgyMSwgMHg2RiwgICAgICAgICAgICAgLy8gQ1JDDQo+ID4gKyAgMHgwMCwg MHgwMSwgMHgwMiwgMHgwMywgLy8gRGF0YSB0byByZWFkDQo+ID4gK307DQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFZBTElEX1JFQURfUkVTUE9OU0VfU0laRSAgMTAgKiBzaXplb2YoVUlOVDgpDQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4g b3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJn ZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9v dC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVu c3VyZSB0aGF0IHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJl IHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1Rf UEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+ IHRlc3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug d2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJ TEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzDQo+IGZhaWxlZC4NCj4gPiArKiovDQo+ID4g K1VOSVRfVEVTVF9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JlYWRWYWxpZFJlc3BvbnNlICgN Cj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAqUmVzcG9uc2VE YXRhOw0KPiA+ICsgIFVJTlQ4ICAgICAgIEV4cGVjdGVkRGF0YVJlc3BvbnNlWzRdID0geyAweDAw LCAweDAxLCAweDAyLCAweDAzIH07DQo+ID4gKyAgVk9JRCAgICAgICAgKk1vY2tSZXNwb25zZVJl c3VsdHMgICAgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJ TlQ4ICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChWQUxJRF9SRUFEX1JFU1BPTlNFX1NJ WkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRSZWFkUmVz cG9uc2UsDQo+IFZBTElEX1JFQURfUkVTUE9OU0VfU0laRSk7DQo+ID4gKyAgUmVzcG9uc2VEYXRh ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChWYWxpZFJlYWRSZXNwb25zZSkpOw0KPiA+ICsN Cj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNw b25zZVJlc3VsdHMsDQo+IFZBTElEX1JFQURfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0K PiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJ cG1pQmxvYlRyYW5zZmVyUmVhZCAoMCwgMCwgNCwgUmVzcG9uc2VEYXRhKTsNCj4gPiArDQo+ID4g KyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklfU1VDQ0VTUyk7DQo+ID4gKyAg VVRfQVNTRVJUX01FTV9FUVVBTCAoUmVzcG9uc2VEYXRhLCBFeHBlY3RlZERhdGFSZXNwb25zZSwg NCk7DQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+ICsgIEZyZWVQ b29sIChSZXNwb25zZURhdGEpOw0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRp b25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJz IGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5 IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGENCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0 aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBhbGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSBpdC4NCj4gPiArICBAcmV0dmFsICBV TklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBh bmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9S X1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3NlcnRpb24gaGFzDQo+IGZhaWxlZC4NCj4gPiAr KiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JlYWRJbnZhbGlk QnVmZmVyICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIFVJTlQ4ICAgICAgICpSZXNwb25zZURhdGE7DQo+ID4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0g TlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9j YXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfUkVBRF9SRVNQT05TRV9TSVpFKSk7DQo+ID4g KyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlkUmVhZFJlc3BvbnNlLA0KPiBW QUxJRF9SRUFEX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsgIFJlc3BvbnNlRGF0YSA9IE5VTEw7DQo+ ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9j a1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfUkVBRF9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VT Uyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFVO SVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFVUX0VY UEVDVF9BU1NFUlRfRkFJTFVSRSAoSXBtaUJsb2JUcmFuc2ZlclJlYWQgKDAsIDAsIDQsDQo+IFJl c3BvbnNlRGF0YSksIE5VTEwpOw0KPiA+ICsNCj4gPiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNl UmVzdWx0cyk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBv cHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdl dCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290 LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5z dXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUg d2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9Q QVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4g dGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3 YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlM RUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiAr VU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArV3JpdGVWYWxpZFJlc3BvbnNlICgN Cj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICBTZW5kRGF0YVs0 XSAgICAgICAgICA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMyB9Ow0KPiA+ICsgIFZPSUQgICAg ICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3Bv bnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURf Tk9EQVRBX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1 bHRzLCAmVmFsaWROb0RhdGFSZXNwb25zZSwNCj4gVkFMSURfTk9EQVRBX1JFU1BPTlNFX1NJWkUp Ow0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAq KU1vY2tSZXNwb25zZVJlc3VsdHMsDQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFLCBFRklf U1VDQ0VTUyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0 dXJuIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IElwbWlCbG9iVHJhbnNmZXJXcml0ZSAoMCwgMCwgU2VuZERhdGEsIDQpOw0KPiA+ ICsNCj4gPiArICBVVF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsN Cj4gPiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgcmV0dXJuIFVO SVRfVEVTVF9QQVNTRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtp bl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFi bGVzOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdp dGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAy KSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgcmVib290LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lE KiBhbmQgaXQgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJp bGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0 IGNhc2VzIHRoYXQgbWF5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lIGl0 Lg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQg dGVzdCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4gdGVzdA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0 dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBo YXMNCj4gZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklB UEkNCj4gPiArQ29tbWl0VmFsaWRSZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRF WFQgIENvbnRleHQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7 DQo+ID4gKyAgVUlOVDggICAgICAgU2VuZERhdGFbNF0gICAgICAgICAgPSB7IDB4MDAsIDB4MDEs IDB4MDIsIDB4MDMgfTsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9 IE5VTEw7DQo+ID4gKw0KPiA+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxv Y2F0ZVplcm9Qb29sIChzaXplb2YNCj4gKFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFKSk7DQo+ ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlkTm9EYXRhUmVzcG9uc2Us DQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0g TW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiBW QUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9G QUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVy Q29tbWl0ICgwLCA0LCBTZW5kRGF0YSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNf RVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9u c2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFu IG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFy Z2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJv b3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBl bnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFy ZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNU X1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZQ0K PiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZB SUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiBmYWlsZWQuDQo+ID4gKyoqLw0KPiA+ ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtDbG9zZVZhbGlkUmVzcG9uc2Ug KA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVz cG9uc2VSZXN1bHRzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9 IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfTk9EQVRBX1JFU1BP TlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRO b0RhdGFSZXNwb25zZSwNCj4gVkFMSURfTk9EQVRBX1JFU1BPTlNFX1NJWkUpOw0KPiA+ICsNCj4g PiArICBTdGF0dXMgPSBNb2NrSXBtaVN1Ym1pdENvbW1hbmQgKChVSU5UOCAqKU1vY2tSZXNwb25z ZVJlc3VsdHMsDQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFLCBFRklfU1VDQ0VTUyk7DQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFVOSVRfVEVT VF9FUlJPUl9URVNUX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IElw bWlCbG9iVHJhbnNmZXJDbG9zZSAoMSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNf RVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIEZyZWVQb29sIChNb2NrUmVzcG9u c2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFu IG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFy Z2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJv b3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBl bnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFy ZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNU X1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZQ0K PiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZB SUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiBmYWlsZWQuDQo+ID4gKyoqLw0KPiA+ ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtEZWxldGVWYWxpZFJlc3BvbnNl ICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jl c3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIE1vY2tSZXNwb25zZVJlc3VsdHMg PSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gKFZBTElEX05PREFUQV9SRVNQ T05TRV9TSVpFKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jlc3BvbnNlUmVzdWx0cywgJlZhbGlk Tm9EYXRhUmVzcG9uc2UsDQo+IFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFKTsNCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9u c2VSZXN1bHRzLA0KPiBWQUxJRF9OT0RBVEFfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0K PiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJ cG1pQmxvYlRyYW5zZmVyRGVsZXRlICgiL3NtYmlvcyIpOw0KPiA+ICsNCj4gPiArICBVVF9BU1NF UlRfU1RBVFVTX0VRVUFMIChTdGF0dXMsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBGcmVlUG9vbCAo TW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK1VJTlQ4ICBWYWxpZEJsb2JTdGF0UmVzcG9uc2VbXSA9IHsNCj4g PiArICAweDAwLCAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0aW9uQ29kZQ0KPiA+ICsgIDB4 Q0YsIDB4QzIsIDB4MDAsICAgICAgIC8vIE9wZW5CTUMgT0VODQo+ID4gKyAgMHgxRiwgMHg0Riwg ICAgICAgICAgICAgLy8gQ3JjDQo+ID4gKyAgMHgwMSwgMHgwMCwgICAgICAgICAgICAgLy8gQmxv YlN0YXRlDQo+ID4gKyAgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgLy8gQmxvYlNpemUNCj4gPiAr ICAweDA0LCAgICAgICAgICAgICAgICAgICAvLyBNZXRhRGF0YUxlbg0KPiA+ICsgIDB4MDYsIDB4 MDcsIDB4MDgsIDB4MDksIC8vIE1ldGFEYXRhDQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5l IFZBTElEX0JMT0JfU1RBVF9SRVNQT05TRV9TSVpFICAxNyAqIHNpemVvZihVSU5UOCkNCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgW09wdGlvbmFsXSBBbiBv cHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBlbmFibGVzOg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGggdmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdl dCB0ZXN0cyB0aGF0IG5lZWQgYQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290 LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBWT0lEKiBhbmQgaXQgaXMgdGhlDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5z dXJlIHRoYXQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUg d2VsbCB1bmRlcnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdW1lIGl0Lg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9Q QVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4g dGVzdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3 YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlM RUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gZmFpbGVkLg0KPiA+ICsqKi8NCj4gPiAr VU5JVF9URVNUX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArQmxvYlN0YXRWYWxpZFJlc3BvbnNl ICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBVSU5UMTYgICAgICAqQmxvYlN0 YXRlOw0KPiA+ICsgIFVJTlQzMiAgICAgICpTaXplOw0KPiA+ICsgIFVJTlQ4ICAgICAgICpNZXRh ZGF0YUxlbmd0aDsNCj4gPiArICBVSU5UOCAgICAgICAqTWV0YWRhdGE7DQo+ID4gKyAgVUlOVDgg ICAgICAgKkV4cGVjdGVkTWV0YWRhdGE7DQo+ID4gKyAgQ0hBUjggICAgICAgKkJsb2JJZDsNCj4g PiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ ICsgIEJsb2JTdGF0ZSAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVJTlQxNikp Ow0KPiA+ICsgIFNpemUgICAgICAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVJ TlQzMikpOw0KPiA+ICsgIEJsb2JJZCAgICAgICAgICAgPSAiQmxvYklkIjsNCj4gPiArICBNZXRh ZGF0YUxlbmd0aCAgID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVSU5UOCkpOw0KPiA+ICsg IE1ldGFkYXRhICAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sICg0ICogc2l6ZW9mIChVSU5UOCkp Ow0KPiA+ICsgIEV4cGVjdGVkTWV0YWRhdGEgPSBBbGxvY2F0ZVplcm9Qb29sICg0ICogc2l6ZW9m IChVSU5UOCkpOw0KPiA+ICsNCj4gPiArICBNb2NrUmVzcG9uc2VSZXN1bHRzID0gKFVJTlQ4ICop QWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0la RSkpOw0KPiA+ICsgIENvcHlNZW0gKE1vY2tSZXNwb25zZVJlc3VsdHMsICZWYWxpZEJsb2JTdGF0 UmVzcG9uc2UsDQo+IFZBTElEX0JMT0JfU1RBVF9SRVNQT05TRV9TSVpFKTsNCj4gPiArDQo+ID4g KyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5kICgoVUlOVDggKilNb2NrUmVzcG9uc2VS ZXN1bHRzLA0KPiBWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSwgRUZJX1NVQ0NFU1MpOw0K PiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBVTklUX1RF U1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBJ cG1pQmxvYlRyYW5zZmVyU3RhdCAoQmxvYklkLCBCbG9iU3RhdGUsIFNpemUsIE1ldGFkYXRhTGVu Z3RoLA0KPiBNZXRhZGF0YSk7DQo+ID4gKw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwg KFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoKkJsb2JTdGF0 ZSwgMSk7DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMICgqU2l6ZSwgMHgwNTA0MDMwMik7DQo+ID4g KyAgVVRfQVNTRVJUX0VRVUFMICgqTWV0YWRhdGFMZW5ndGgsIDQpOw0KPiA+ICsgIFVUX0FTU0VS VF9NRU1fRVFVQUwgKE1ldGFkYXRhLCBFeHBlY3RlZE1ldGFkYXRhLCA0KTsNCj4gPiArICBGcmVl UG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0cyk7DQo+ID4gKyAgRnJlZVBvb2wgKEJsb2JTdGF0ZSk7 DQo+ID4gKyAgRnJlZVBvb2wgKFNpemUpOw0KPiA+ICsgIEZyZWVQb29sIChNZXRhZGF0YUxlbmd0 aCk7DQo+ID4gKyAgRnJlZVBvb2wgKE1ldGFkYXRhKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNU X1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29u dGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJp ZWQgcGFyYW1ldGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3Qt Y2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBp dCBpcyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9m IHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMg dGhhdCBtYXkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4g KyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhh cyBjb21wbGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiBm YWlsZWQuDQo+ID4gKyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ ICtCbG9iU3RhdEludmFsaWRCdWZmZXIgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBD b250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDggICAgICAgKk1ldGFkYXRhOw0K PiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3Bv bnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIE1ldGFkYXRhID0gTlVMTDsNCj4gPiAr DQo+ID4gKyAgTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZg0KPiAoVkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5 TWVtIChNb2NrUmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRCbG9iU3RhdFJlc3BvbnNlLA0KPiBWQUxJ RF9CTE9CX1NUQVRfUkVTUE9OU0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJ cG1pU3VibWl0Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURf QkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJ TEVEOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChJ cG1pQmxvYlRyYW5zZmVyU3RhdCAoTlVMTCwgMCwgMCwgMCwNCj4gTWV0YWRhdGEpLCBOVUxMKTsN Cj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+ICsgIHJl dHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBA cGFyYW1baW5dICBDb250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRo YXQgZW5hYmxlczoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2FzZSBy ZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgMikgdGVzdC1jYXNlIHJlLWVudHJ5IGZvciBUYXJnZXQgdGVzdHMgdGhhdCBuZWVkIGEN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlz IGEgVk9JRCogYW5kIGl0IGlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgcmVz cG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRoZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYXJlIHdlbGwgdW5kZXJzdG9vZCBieSBh bGwgdGVzdCBjYXNlcyB0aGF0IG1heQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3VtZSBpdC4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRo ZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlDQo+IHRlc3QNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4g KyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZSBhc3Nl cnRpb24gaGFzDQo+IGZhaWxlZC4NCj4gPiArKiovDQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK1Nlc3Npb25TdGF0VmFsaWRSZXNwb25zZSAoDQo+ID4gKyAgSU4gVU5J VF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ID4gKyAgVUlOVDE2ICAgICAgKkJsb2JTdGF0ZTsNCj4gPiArICBVSU5U MzIgICAgICAqU2l6ZTsNCj4gPiArICBVSU5UOCAgICAgICAqTWV0YWRhdGFMZW5ndGg7DQo+ID4g KyAgVUlOVDggICAgICAgKk1ldGFkYXRhOw0KPiA+ICsgIFVJTlQ4ICAgICAgICpFeHBlY3RlZE1l dGFkYXRhOw0KPiA+ICsgIFZPSUQgICAgICAgICpNb2NrUmVzcG9uc2VSZXN1bHRzID0gTlVMTDsN Cj4gPiArDQo+ID4gKyAgQmxvYlN0YXRlICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVv ZiAoVUlOVDE2KSk7DQo+ID4gKyAgU2l6ZSAgICAgICAgICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wg KHNpemVvZiAoVUlOVDMyKSk7DQo+ID4gKyAgTWV0YWRhdGFMZW5ndGggICA9IEFsbG9jYXRlWmVy b1Bvb2wgKHNpemVvZiAoVUlOVDgpKTsNCj4gPiArICBNZXRhZGF0YSAgICAgICAgID0gQWxsb2Nh dGVaZXJvUG9vbCAoNCAqIHNpemVvZiAoVUlOVDgpKTsNCj4gPiArICBFeHBlY3RlZE1ldGFkYXRh ID0gQWxsb2NhdGVaZXJvUG9vbCAoNCAqIHNpemVvZiAoVUlOVDgpKTsNCj4gPiArDQo+ID4gKyAg TW9ja1Jlc3BvbnNlUmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0K PiAoVkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2Nr UmVzcG9uc2VSZXN1bHRzLCAmVmFsaWRCbG9iU3RhdFJlc3BvbnNlLA0KPiBWQUxJRF9CTE9CX1NU QVRfUkVTUE9OU0VfU0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0 Q29tbWFuZCAoKFVJTlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfQkxPQl9TVEFU X1JFU1BPTlNFX1NJWkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSXBtaUJsb2JUcmFuc2ZlclNlc3Npb25TdGF0 ICgwLCBCbG9iU3RhdGUsIFNpemUsDQo+IE1ldGFkYXRhTGVuZ3RoLCBNZXRhZGF0YSk7DQo+ID4g Kw0KPiA+ICsgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgRUZJX1NVQ0NFU1MpOw0K PiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoKkJsb2JTdGF0ZSwgMSk7DQo+ID4gKyAgVVRfQVNTRVJU X0VRVUFMICgqU2l6ZSwgMHgwNTA0MDMwMik7DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMICgqTWV0 YWRhdGFMZW5ndGgsIDQpOw0KPiA+ICsgIFVUX0FTU0VSVF9NRU1fRVFVQUwgKE1ldGFkYXRhLCBF eHBlY3RlZE1ldGFkYXRhLCA0KTsNCj4gPiArICBGcmVlUG9vbCAoTW9ja1Jlc3BvbnNlUmVzdWx0 cyk7DQo+ID4gKyAgRnJlZVBvb2wgKEJsb2JTdGF0ZSk7DQo+ID4gKyAgRnJlZVBvb2wgKFNpemUp Ow0KPiA+ICsgIEZyZWVQb29sIChNZXRhZGF0YUxlbmd0aCk7DQo+ID4gKyAgRnJlZVBvb2wgKE1l dGFkYXRhKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9w dGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQgcGFyYW1ldGVycyBhbmQNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0 IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3Qu ICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IGF1dGhvciB0byBlbnN1 cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3 ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BB U1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZQ0KPiB0 ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdh cyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxF RCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiBmYWlsZWQuDQo+ID4gKyoqLw0KPiA+ICtV TklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTZXNzaW9uU3RhdEludmFsaWRCdWZm ZXIgKA0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgVUlOVDggICAgICAgKk1ldGFkYXRhOw0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1czsNCj4gPiArICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ ID4gKw0KPiA+ICsgIE1ldGFkYXRhID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgTW9ja1Jlc3BvbnNl UmVzdWx0cyA9IChVSU5UOCAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoVkFMSURfQkxP Ql9TVEFUX1JFU1BPTlNFX1NJWkUpKTsNCj4gPiArICBDb3B5TWVtIChNb2NrUmVzcG9uc2VSZXN1 bHRzLCAmVmFsaWRCbG9iU3RhdFJlc3BvbnNlLA0KPiBWQUxJRF9CTE9CX1NUQVRfUkVTUE9OU0Vf U0laRSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1vY2tJcG1pU3VibWl0Q29tbWFuZCAoKFVJ TlQ4ICopTW9ja1Jlc3BvbnNlUmVzdWx0cywNCj4gVkFMSURfQkxPQl9TVEFUX1JFU1BPTlNFX1NJ WkUsIEVGSV9TVUNDRVNTKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g KyAgICByZXR1cm4gVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChJcG1pQmxvYlRyYW5zZmVyU2Vzc2lv blN0YXQgKDAsIDAsIDAsIDAsDQo+IE1ldGFkYXRhKSwgTlVMTCk7DQo+ID4gKw0KPiA+ICsgIEZy ZWVQb29sIChNb2NrUmVzcG9uc2VSZXN1bHRzKTsNCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BB U1NFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4 dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGVuYWJsZXM6DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAxKSB0ZXN0LWNhc2UgcmV1c2Ugd2l0aCB2YXJpZWQg cGFyYW1ldGVycyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIpIHRlc3QtY2Fz ZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFtZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBp cyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRo ZSB0ZXN0IGF1dGhvciB0byBlbnN1cmUgdGhhdCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxsIHRlc3QgY2FzZXMgdGhh dCBtYXkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4gKyAg QHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0IGhhcyBj b21wbGV0ZWQgYW5kIHRoZQ0KPiB0ZXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgIFVOSVRf VEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiBmYWls ZWQuDQo+ID4gKyoqLw0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtX cml0ZU1ldGFWYWxpZFJlc3BvbnNlICgNCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29u dGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAr ICBWT0lEICAgICAgICAqTW9ja1Jlc3BvbnNlUmVzdWx0cyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsg IE1vY2tSZXNwb25zZVJlc3VsdHMgPSAoVUlOVDggKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YN Cj4gKFZBTElEX05PREFUQV9SRVNQT05TRV9TSVpFKSk7DQo+ID4gKyAgQ29weU1lbSAoTW9ja1Jl c3BvbnNlUmVzdWx0cywgJlZhbGlkTm9EYXRhUmVzcG9uc2UsDQo+IFZBTElEX05PREFUQV9SRVNQ T05TRV9TSVpFKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gTW9ja0lwbWlTdWJtaXRDb21tYW5k ICgoVUlOVDggKilNb2NrUmVzcG9uc2VSZXN1bHRzLA0KPiBWQUxJRF9OT0RBVEFfUkVTUE9OU0Vf U0laRSwgRUZJX1NVQ0NFU1MpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgIHJldHVybiBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICBTdGF0dXMgPSBJcG1pQmxvYlRyYW5zZmVyV3JpdGVNZXRhICgwLCAwLCBOVUxM LCAwKTsNCj4gPiArDQo+ID4gKyAgVVRfQVNTRVJUX1NUQVRVU19FUVVBTCAoU3RhdHVzLCBFRklf U1VDQ0VTUyk7DQo+ID4gKyAgRnJlZVBvb2wgKE1vY2tSZXNwb25zZVJlc3VsdHMpOw0KPiA+ICsg IHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBJbml0aWFsaXplIHRoZSB1bml0IHRlc3QgZnJhbWV3b3JrLCBzdWl0ZSwgYW5kIHVuaXQgdGVz dHMgZm9yIHRoZQ0KPiA+ICsgIHNhbXBsZSB1bml0IHRlc3RzIGFuZCBydW4gdGhlIHVuaXQgdGVz dHMuDQo+ID4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgIEFsbCB0ZXN0IGNhc2Vz IHdlcmUgZGlzcGF0Y2hlZC4NCj4gPiArICBAcmV0dmFsICBFRklfT1VUX09GX1JFU09VUkNFUyAg VGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzDQo+IGF2YWlsYWJsZSB0bw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplIHRoZSB1bml0IHRlc3RzLg0K PiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2V0dXBBbmRSdW5V bml0VGVzdHMgKA0KPiA+ICsgIFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIFVOSVRfVEVTVF9GUkFNRVdPUktf SEFORExFICBGcmFtZXdvcms7DQo+ID4gKyAgVU5JVF9URVNUX1NVSVRFX0hBTkRMRSAgICAgIElw bWlCbG9iVHJhbnNmZXI7DQo+ID4gKw0KPiA+ICsgIEZyYW1ld29yayA9IE5VTEw7DQo+ID4gKyAg REVCVUcgKChERUJVR19JTkZPLCAiJWE6IHYlYVxuIiwgVU5JVF9URVNUX05BTUUsDQo+IFVOSVRf VEVTVF9WRVJTSU9OKSk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEluaXRVbml0VGVzdEZyYW1l d29yayAoJkZyYW1ld29yaywgVU5JVF9URVNUX05BTUUsDQo+IGdFZmlDYWxsZXJCYXNlTmFtZSwg VU5JVF9URVNUX1ZFUlNJT04pOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQgdG8gc2V0dXAgVGVzdCBGcmFtZXdv cmsuIEV4aXRpbmcgd2l0aA0KPiBzdGF0dXMgPSAlclxuIiwgU3RhdHVzKSk7DQo+ID4gKyAgICBB U1NFUlQgKEZBTFNFKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIFBvcHVsYXRlIHRoZSBVbml0IFRlc3QgU3VpdGUuDQo+ID4g KyAgLy8NCj4gPiArICBTdGF0dXMgPSBDcmVhdGVVbml0VGVzdFN1aXRlICgmSXBtaUJsb2JUcmFu c2ZlciwgRnJhbWV3b3JrLCAiSVBNSQ0KPiBCbG9iIFRyYW5zZmVyIFRlc3RzIiwgIlVuaXRUZXN0 LklwbWlCbG9iVHJhbnNmZXJDQiIsIE5VTEwsIE5VTEwpOw0KPiA+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQgaW4gQ3Jl YXRlVW5pdFRlc3RTdWl0ZSBmb3IgSVBNSSBCbG9iDQo+IFRyYW5zZmVyIFRlc3RzXG4iKSk7DQo+ ID4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgIHJldHVybiBT dGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBDYWxjdWxhdGVDcmMxNg0KPiA+ICsg IFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiVGVzdCBDUkMgQ2FsY3Vs YXRpb24iLA0KPiAiR29vZENyYyIsIEdvb2RDcmMsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsg IFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiVGVzdCBCYWQgQ1JDIENh bGN1bGF0aW9uIiwNCj4gIkJhZENyYyIsIEJhZENyYywgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4g KyAgLy8gSXBtaUJsb2JUcmFuc2ZlclNlbmRJcG1pDQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENh c2UgKElwbWlCbG9iVHJhbnNmZXIsICJTZW5kIElQTUkgcmV0dXJucyBiYWQNCj4gY29tcGxldGlv biIsICJTZW5kSXBtaUJhZENvbXBsZXRpb24iLCBTZW5kSXBtaUJhZENvbXBsZXRpb24sIE5VTEws DQo+IE5VTEwsIE5VTEwpOw0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRy YW5zZmVyLCAiU2VuZCBJUE1JIHJldHVybnMgc3VjY2Vzc2Z1bGx5DQo+IHdpdGggbm8gZGF0YSIs ICJTZW5kSXBtaU5vRGF0YVJlc3BvbnNlIiwgU2VuZElwbWlOb0RhdGFSZXNwb25zZSwNCj4gTlVM TCwgTlVMTCwgTlVMTCk7DQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9iVHJh bnNmZXIsICJTZW5kIElQTUkgcmV0dXJucyBzdWNjZXNzZnVsbHkNCj4gd2l0aCBiYWQgT0VOIiwg IlNlbmRJcG1pQmFkT2VuUmVzcG9uc2UiLCBTZW5kSXBtaUJhZE9lblJlc3BvbnNlLA0KPiBOVUxM LCBOVUxMLCBOVUxMKTsNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JUcmFu c2ZlciwgIlNlbmQgSVBNSSByZXR1cm5zIHN1Y2Nlc3NmdWxseQ0KPiB3aXRoIGJhZCBDUkMiLCAi U2VuZElwbWlCYWRDcmNSZXNwb25zZSIsIFNlbmRJcG1pQmFkQ3JjUmVzcG9uc2UsDQo+IE5VTEws IE5VTEwsIE5VTEwpOw0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5z ZmVyLCAiU2VuZCBJUE1JIHJldHVybnMgd2l0aCB2YWxpZA0KPiBHZXRDb3VudCBkYXRhIiwgIlNl bmRJcG1pVmFsaWRDb3VudFJlc3BvbnNlIiwNCj4gU2VuZElwbWlWYWxpZENvdW50UmVzcG9uc2Us IE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsgIC8vIElwbWlCbG9iVHJhbnNmZXJHZXRDb3VudA0K PiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiR2V0Q291bnQg Y2FsbCB3aXRoIHZhbGlkIGRhdGEiLA0KPiAiR2V0Q291bnRWYWxpZENvdW50UmVzcG9uc2UiLCBH ZXRDb3VudFZhbGlkQ291bnRSZXNwb25zZSwgTlVMTCwNCj4gTlVMTCwgTlVMTCk7DQo+ID4gKyAg Ly8gSXBtaUJsb2JUcmFuc2ZlckVudW1lcmF0ZQ0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNl IChJcG1pQmxvYlRyYW5zZmVyLCAiRW51bWVyYXRlIGNhbGwgd2l0aCB2YWxpZCBkYXRhIiwNCj4g IkVudW1lcmF0ZVZhbGlkUmVzcG9uc2UiLCBFbnVtZXJhdGVWYWxpZFJlc3BvbnNlLCBOVUxMLCBO VUxMLCBOVUxMKTsNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JUcmFuc2Zl ciwgIkVudW1lcmF0ZSBjYWxsIHdpdGggaW52YWxpZA0KPiBvdXRwdXQgYnVmZmVyIiwgIkVudW1l cmF0ZUludmFsaWRCdWZmZXIiLCBFbnVtZXJhdGVJbnZhbGlkQnVmZmVyLCBOVUxMLA0KPiBOVUxM LCBOVUxMKTsNCj4gPiArICAvLyBJcG1pQmxvYlRyYW5zZmVyT3Blbg0KPiA+ICsgIFN0YXR1cyA9 IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiT3BlbiBjYWxsIHdpdGggdmFsaWQgZGF0 YSIsDQo+ICJPcGVuVmFsaWRSZXNwb25zZSIsIE9wZW5WYWxpZFJlc3BvbnNlLCBOVUxMLCBOVUxM LCBOVUxMKTsNCj4gPiArICAvLyBJcG1pQmxvYlRyYW5zZmVyUmVhZA0KPiA+ICsgIFN0YXR1cyA9 IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiUmVhZCBjYWxsIHdpdGggdmFsaWQgZGF0 YSIsDQo+ICJSZWFkVmFsaWRSZXNwb25zZSIsIFJlYWRWYWxpZFJlc3BvbnNlLCBOVUxMLCBOVUxM LCBOVUxMKTsNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JUcmFuc2Zlciwg IlJlYWQgY2FsbCB3aXRoIGludmFsaWQgYnVmZmVyIiwNCj4gIlJlYWRJbnZhbGlkQnVmZmVyIiwg UmVhZEludmFsaWRCdWZmZXIsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsgIC8vIElwbWlCbG9i VHJhbnNmZXJXcml0ZQ0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJcG1pQmxvYlRyYW5z ZmVyLCAiV3JpdGUgY2FsbCB3aXRoIHZhbGlkIGRhdGEiLA0KPiAiV3JpdGVWYWxpZFJlc3BvbnNl IiwgV3JpdGVWYWxpZFJlc3BvbnNlLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArICAvLyBJcG1p QmxvYlRyYW5zZmVyQ29tbWl0DQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENhc2UgKElwbWlCbG9i VHJhbnNmZXIsICJDb21taXQgY2FsbCB3aXRoIHZhbGlkIGRhdGEiLA0KPiAiQ29tbWl0VmFsaWRS ZXNwb25zZSIsIENvbW1pdFZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsg IC8vIElwbWlCbG9iVHJhbnNmZXJDbG9zZQ0KPiA+ICsgIFN0YXR1cyA9IEFkZFRlc3RDYXNlIChJ cG1pQmxvYlRyYW5zZmVyLCAiQ2xvc2UgY2FsbCB3aXRoIHZhbGlkIGRhdGEiLA0KPiAiQ2xvc2VW YWxpZFJlc3BvbnNlIiwgQ2xvc2VWYWxpZFJlc3BvbnNlLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4g PiArICAvLyBJcG1pQmxvYlRyYW5zZmVyRGVsZXRlDQo+ID4gKyAgU3RhdHVzID0gQWRkVGVzdENh c2UgKElwbWlCbG9iVHJhbnNmZXIsICJEZWxldGUgY2FsbCB3aXRoIHZhbGlkIGRhdGEiLA0KPiAi RGVsZXRlVmFsaWRSZXNwb25zZSIsIERlbGV0ZVZhbGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsIE5V TEwpOw0KPiA+ICsgIC8vIElwbWlCbG9iVHJhbnNmZXJTdGF0DQo+ID4gKyAgU3RhdHVzID0gQWRk VGVzdENhc2UgKElwbWlCbG9iVHJhbnNmZXIsICJCbG9iIFN0YXQgY2FsbCB3aXRoIHZhbGlkIGRh dGEiLA0KPiAiQmxvYlN0YXRWYWxpZFJlc3BvbnNlIiwgQmxvYlN0YXRWYWxpZFJlc3BvbnNlLCBO VUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JU cmFuc2ZlciwgIkJsb2IgU3RhdCBjYWxsIHdpdGggaW52YWxpZA0KPiBidWZmZXIiLCAiQmxvYlN0 YXRJbnZhbGlkQnVmZmVyIiwgQmxvYlN0YXRJbnZhbGlkQnVmZmVyLCBOVUxMLCBOVUxMLCBOVUxM KTsNCj4gPiArICAvLyBJcG1pQmxvYlRyYW5zZmVyU2Vzc2lvblN0YXQNCj4gPiArICBTdGF0dXMg PSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JUcmFuc2ZlciwgIlNlc3Npb24gU3RhdCBjYWxsIHdpdGgg dmFsaWQNCj4gZGF0YSIsICJTZXNzaW9uU3RhdFZhbGlkUmVzcG9uc2UiLCBTZXNzaW9uU3RhdFZh bGlkUmVzcG9uc2UsIE5VTEwsIE5VTEwsDQo+IE5VTEwpOw0KPiA+ICsgIFN0YXR1cyA9IEFkZFRl c3RDYXNlIChJcG1pQmxvYlRyYW5zZmVyLCAiU2Vzc2lvbiBTdGF0IGNhbGwgd2l0aCBpbnZhbGlk DQo+IGJ1ZmZlciIsICJTZXNzaW9uU3RhdEludmFsaWRCdWZmZXIiLCBTZXNzaW9uU3RhdEludmFs aWRCdWZmZXIsIE5VTEwsIE5VTEwsDQo+IE5VTEwpOw0KPiA+ICsgIC8vIElwbWlCbG9iVHJhbnNm ZXJXcml0ZU1ldGENCj4gPiArICBTdGF0dXMgPSBBZGRUZXN0Q2FzZSAoSXBtaUJsb2JUcmFuc2Zl ciwgIldyaXRlTWV0YSBjYWxsIHdpdGggdmFsaWQgZGF0YSIsDQo+ICJXcml0ZU1ldGFWYWxpZFJl c3BvbnNlIiwgV3JpdGVNZXRhVmFsaWRSZXNwb25zZSwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4g Kw0KPiA+ICsgIC8vIEV4ZWN1dGUgdGhlIHRlc3RzLg0KPiA+ICsgIFN0YXR1cyA9IFJ1bkFsbFRl c3RTdWl0ZXMgKEZyYW1ld29yayk7DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgU3RhbmRhcmQgVUVGSSBlbnRyeSBwb2ludCBmb3IgdGFyZ2V0 IGJhc2VkDQo+ID4gKyAgdW5pdCB0ZXN0IGV4ZWN1dGlvbiBmcm9tIFVFRkkgU2hlbGwuDQo+ID4g KyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtCYXNlTGliVW5pdFRlc3RB cHBFbnRyeSAoDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4g KyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgcmV0dXJuIFNldHVwQW5kUnVuVW5pdFRlc3RzICgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBTdGFuZGFyZCBQT1NJWCBDIGVudHJ5IHBvaW50IGZvciBob3N0IGJhc2Vk IHVuaXQgdGVzdCBleGVjdXRpb24uDQo+ID4gKyoqLw0KPiA+ICtpbnQNCj4gPiArbWFpbiAoDQo+ ID4gKyAgaW50ICAgYXJnYywNCj4gPiArICBjaGFyICAqYXJndltdDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgcmV0dXJuIFNldHVwQW5kUnVuVW5pdFRlc3RzICgpOw0KPiA+ICt9DQo+ID4gZGlm ZiAtLWdpdA0KPiBhL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvVW5pdmVyc2FsL0lwbWlCbG9i VHJhbnNmZXJEeGUvUmVhZG1lLm1kDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2 ZXJzYWwvSXBtaUJsb2JUcmFuc2ZlckR4ZS9SZWFkbWUubWQNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjQ3ODAwZjU4MDENCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrDQo+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9Vbml2ZXJzYWwvSXBtaUJs b2JUcmFuc2ZlckR4ZS9SZWFkbWUubWQNCj4gPiBAQCAtMCwwICsxLDI0IEBADQo+ID4gKyMgSVBN SSBCbG9iIFRyYW5zZmVyIEludGVyZmFjZSBEcml2ZXINCj4gPiArDQo+ID4gK1RoaXMgRFhFIG1v ZHVsZSBpcyBhIFVFRkkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBob3JwaG9yIEJsb2IgVHJhbnNm ZXINCj4gSW50ZXJmYWNlIGRlZmluZWQgaW4gT3BlbkJNQw0KPiA+ICtodHRwczovL2dpdGh1Yi5j b20vb3BlbmJtYy9waG9zcGhvci1pcG1pLWJsb2JzDQo+ID4gKw0KPiA+ICsjIyBOVklESUEncyBP cGVuQk1DIGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UgYXMgYSBwcm90b2NvbCwgYWxsb3dpbmcN Cj4gVUVGSSBhbmQgQk1DIHRvIHRyYW5zZmVyIGJsb2JzIG92ZXIgSVBNSS4NCj4gPiArDQo+ID4g KyMjIyBVc2FnZToNCj4gPiArQW55IERYRSBtb2R1bGUgdGhhdCB3aXNoZXMgdG8gdXNlIHRoaXMg cHJvdG9jb2wgc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmc6DQo+ID4gKzEpIFRoZSBtb2R1bGUgc2hv dWxkIGhhdmUgYSBkZXBlbmRlbmN5IG9uDQo+IGdFZGtpaUlwbWlCbG9iVHJhbnNmZXJQcm90b2Nv bEd1aWQgaW4gaXRzIGluZiAiRGVwZXgiIHNlY3Rpb24NCj4gPiArMikgVGhlIG1vZHVsZSBzaG91 bGQgbGlzdCBnRWRraWlJcG1pQmxvYlRyYW5zZmVyUHJvdG9jb2xHdWlkIGluIGl0cyBpbmYNCj4g IlByb3RvY29sIiBzZWN0aW9uDQo+ID4gKzMpIFRoZSBtb2R1bGUncyBlbnRyeSBwb2ludCBzaG91 bGQgZG8gYSBMb2NhdGVQcm90b2NvbCBvbg0KPiBnRWRraWlJcG1pQmxvYlRyYW5zZmVyUHJvdG9j b2xHdWlkDQo+ID4gKw0KPiA+ICsjIyMgQSBzYW1wbGUgZmxvdyBvZiBwcm90b2NvbCB1c2FnZSBp cyBhcyBmb2xsb3dzOg0KPiA+ICsxKSBBIGNhbGwgdG8gSXBtaUJsb2JUcmFuc2Zlck9wZW4gKCkN Cj4gPiArMikgSXRlcmF0aXZlIGNhbGxzIHRvIElwbWlCbG9iVHJhbnNmZXJXcml0ZQ0KPiA+ICsz KSBBIGNhbGwgdG8gSXBtaUJsb2JUcmFuc2ZlckNsb3NlICgpDQo+ID4gKw0KPiA+ICsjIyMgVW5p dCBUZXN0czoNCj4gPiArSXBtaUJsb2JUcmFuc2ZlckR4ZS9Vbml0VGVzdC8gY29udGFpbnMgaG9z dCBiYXNlZCB1bml0IHRlc3RzIG9mIHRoaXMNCj4gaW1wbGVtZW50YXRpb24uDQo+ID4gK0FueSBj aGFuZ2VzIHRvIElwbWlCbG9iVHJhbnNmZXJEeGUgc2hvdWxkIGluY2x1ZGUgcHJvb2Ygb2Ygc3Vj Y2Vzc2Z1bA0KPiB1bml0IHRlc3RzLg0KPiA+ICsNCj4gPiArIyMjIERlYnVnZ2luZw0KPiA+ICtU byBhc3Npc3QgaW4gZGVidWdnaW5nIGFueSBpc3N1ZXMsIGNoYW5nZSBCTE9CX1RSQU5TRkVSX0RF QlVHIHRvIDENCj4gPiAtLQ0KPiA+IDIuMTcuMQ0KPiA+DQo=