From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.1546.1648063670202114027 for ; Wed, 23 Mar 2022 12:27:51 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=eJtone2p; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: guo.dong@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648063670; x=1679599670; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=Awm0eftCfJgc9wFdomcQDTKTMsKeSofLqo7AwO27edI=; b=eJtone2pLO8mx1nttCyaEwua37Qkkcc9BPeyvrhP+ZINL7ue9G8INxof Ff8EVs7WcXPPOcXygyFPz/R8m0oqIvEKqewEzp2/jmebJ2lLMX9jvOpZw DpS9AA85+5oj6Xd27VUDKJtOHX6ptVWkRyztqNZsKGD7Lmp6itZ4otrOn E3FGAHDdMnBPhfvQ0ivq2HOd8LU5Mdo6HBMTIf2ts91xizDzzXe99r8jO Z2iJ0ZQiCQBMnpbVJo3Ngzy2kHEdD4yFsqqMB2fbcnWqu3bSGnIXxNA68 Sw96h5k9oEwHQJFx9EvgKJb1WMa+tbKGBgKZauRInQMYvYGZU3znhsPTu w==; X-IronPort-AV: E=McAfee;i="6200,9189,10295"; a="283057956" X-IronPort-AV: E=Sophos;i="5.90,204,1643702400"; d="scan'208";a="283057956" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Mar 2022 12:27:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,204,1643702400"; d="scan'208";a="552612484" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga007.fm.intel.com with ESMTP; 23 Mar 2022 12:27:49 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 23 Mar 2022 12:27:49 -0700 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 23 Mar 2022 12:27:48 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Wed, 23 Mar 2022 12:27:48 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.174) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.21; Wed, 23 Mar 2022 12:27:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YqqPFdEmiMRJYUcly8rLQI4Huy0Ltb+KmS9MnKwNZcJwqQRpYJ93b12r1K68YyDjFBDMInPszdJ8xhQBSWNosooQcRDgKU/5+NlxrqGta5jdgbZkIXQQ+2RaRN1sBRs1rF27V9qrh3cey9S/0ZMyjhvFLbhxfHu0ukK+0/gDBk+cxwe1NhR7zq2TPQJp6oGNffjhUrNodSN2EARAGkBsSdkWQ/9kTus0GQ6z4qU883n6sJwkRZbnWcuRD0yefjEH5a2OHJaPlUUcC0TdDojZrXdoV9n48U6hHbo7i/YKAaE4FSCtn6sFpn+d5k+IwmiQyXroNCmRcJIpPFE7cy4hfA== 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=Awm0eftCfJgc9wFdomcQDTKTMsKeSofLqo7AwO27edI=; b=NpWYWTD9C2Y0M02PLy63aAERm5wxQxpGRTyIFqKtwrSpz46pD/aPP6s2sZIMyBktVk8dvG3HOQwdcRN1dM1MMTlgfF3Ue1vow4aGC+Tm9KFJbhmPCKsZxxz0G3c2gHHXIrn5OGi3LBsdc5ZH+RD4deLcL33F/tXF/gaMwl0xyt+DqUs3DeDvepyDuA2TCi1Rc996PWGbAmNSkrBmmFptJJU31a++t648N1mJg7bjxVTt6QANYDpWy3XiDBUCReUTQ2LFj8mniWJdUSsBAeG4sr30D8UL+r5/kobMAOMl6a22e7vph/Ce943E+q/nfjoBMuWgO7y6Qhoq6Yq4dh0BvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BYAPR11MB3622.namprd11.prod.outlook.com (2603:10b6:a03:fe::30) by MWHPR1101MB2238.namprd11.prod.outlook.com (2603:10b6:301:55::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.15; Wed, 23 Mar 2022 19:27:42 +0000 Received: from BYAPR11MB3622.namprd11.prod.outlook.com ([fe80::b4d1:1ea2:e9c:f4ec]) by BYAPR11MB3622.namprd11.prod.outlook.com ([fe80::b4d1:1ea2:e9c:f4ec%7]) with mapi id 15.20.5081.023; Wed, 23 Mar 2022 19:27:42 +0000 From: "Guo Dong" To: "devel@edk2.groups.io" , "patrick.rudolph@9elements.com" CC: "Rhodes, Sean" , "Ni, Ray" , "Ma, Maurice" , "You, Benjamin" Subject: Re: [edk2-devel] [PATCH 5/5] UefiPayloadPkg: Add support for Firmware Volume Block Protocol Thread-Topic: [edk2-devel] [PATCH 5/5] UefiPayloadPkg: Add support for Firmware Volume Block Protocol Thread-Index: AQHYPQOpVqMjXgVgIkiasvA5zAVnXKzNRs0AgAAFsACAAA0s4A== Date: Wed, 23 Mar 2022 19:27:41 +0000 Message-ID: References: <11ad7629288bc1e0e4f3b61333efe448cd81b5a4.1647853813.git.sean@starlabs.systems> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.401.20 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 763dde65-b4ee-4a23-3e65-08da0d03331f x-ms-traffictypediagnostic: MWHPR1101MB2238:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mnC5iy61hWUzinykFGbWaNAIIPyt1+Lj0u4MRrCzUCPGy1RQNpD4gyNvABgcNB6iuAsq8O+INt3dEE0td8oaUjZNhfopXn1xD2779IbyIzP+Zo6Q9+MOuFjsXRtJQ0zoWvEx2pFCjoRcimovCYIvNhJVFKY03gTLecvjED4jlH9iYeN27JbK17VMG4qgLf+lO1PLjQdc4+GO+2QnPa3L+N2ZWpHWtJ9Q5Gbfl0C4qyIXq5mCidNCGzANYqMIQhBfEeZ3vR5TyRQqNeDwRIsvO3nvA3mlWgzJ6esFqM2WByP5t4m16gUS5h9sa95PKWQeZ+KXrEdudqPoPa3SYgRC06tqvTSXod30fhPdteNC4+tsgKxVmIgFCawcTg2ZlDOLtp5InlNuYt2nG8n+r0Kr4nnNiOkd/Orl3qkRVZSBvqRSti5lXSLc4kRkleNoT6KLsuI6p2wCVx7GhI8w7nWfNoVdNJxOcyHj/v/hx0mraoVChNEQrR0yBKgqRf3E6AMeLCX+ijnN9QzsOfbatJcpxUUmnnU04jj+l4Mbt2fiQDiPV/NNj+tl6FB8x2bcLckcTUQpEkJG/2fuAi8sUEkptO6dbsujePfpRDpDAK3131ImFKwaaetuh6J6REwRyb/B3XvoJNJwX/hstpAfHlUp2hJq0dLjcFkHXt9OZFKkUYKPgjR+IVEgEHFmXcllpJxAJNLDeC2L6wVJNr0iWib6M69vyXUcWA+/uoh3WI3L/+zO+8h/RciHvUtve2FuT+okb8rOTx6Y018KxVno6NVcrVEf8gTHveqkMwGteyqBS+yBccGsKQXDxsTa9bAJcLFO4JyZPkQCkXW3A6fultY2rHbN8o+x7vxEk+A6DqulqoI= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR11MB3622.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(55016003)(86362001)(19627235002)(966005)(122000001)(83380400001)(54906003)(316002)(38100700002)(508600001)(4326008)(110136005)(66446008)(8676002)(66556008)(66476007)(76116006)(66946007)(71200400001)(64756008)(38070700005)(7696005)(82960400001)(52536014)(186003)(53546011)(2906002)(9686003)(107886003)(8936002)(5660300002)(33656002)(30864003)(6506007)(26005)(579004)(559001)(44824005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Nk9pRzU2akEweUhlU1lUd21ZZ2d1UCt5WXNEVUpJcHEyald6UHJWV1NhVE9a?= =?utf-8?B?VXhOR2p6VEV5aHBGbzZDcVQ5b0hxRWd4UGFtMlNJemV6YzBybTdvSVdWR2Vj?= =?utf-8?B?M1Z4c2ZzanJPYUxQYlJZZjZRck5PQ0VTYm5HeUU3RUlBV3ZaQnhrNmRZdEs4?= =?utf-8?B?d20xM2NaNE1oTndUNG15K2FUa3JMYjcyWWpVOUNpWkxzbkRKTnhWQVl0RjJS?= =?utf-8?B?VGtvV0V2SzIvVzJEVVJROWZBdkdLdVloZXBUNVBDU3luMGEzbEN2MVJzenp5?= =?utf-8?B?QSt6aE1ZaHB4Yk9mWGlGa0l3ZTFDRlFxcjJvWTFnaUZZRHl5TTNqclZVVkRP?= =?utf-8?B?UWc0SGlQcTdCRDNkc2hqQmRJbkhhODVoWFpsZ1Q0V2c3RE9DbC9YYXk5bXRT?= =?utf-8?B?VnR6Rjd0KzFJWnJ2T0hNa2pMMmhDV01LTERlbWlPWlpoQU1NWVZQcXVSZGRx?= =?utf-8?B?aU1kclpoM3lTdDlvVmF6Y2N3dUJpc1YwTWMxMTV0MUlIWCttV0lxZUJ4N1Y3?= =?utf-8?B?OWh3K1pXWG9ZeUVONWJMZklnUHhDakZYV3VaamNVeG12L20zVkcxU2NqMlVW?= =?utf-8?B?K3IyNGRJditHMkx2T09ob09xOGhPc0c3aE9HSnlralV2a01zb1JoazdxOFJ1?= =?utf-8?B?M0xSaGpjcGdLWlY4aGlBc0wyM1lTeHZsY1hwNjBucDUvaWVHcGgyZHd2QjFV?= =?utf-8?B?Q0lwanpBUWtkZWxrSHNyWlUwTGtaUUhPcjJya21xNGZFd29acU40d1RmbEZl?= =?utf-8?B?WFh1K3BReVQ4RVJBVEF6TDhWTmlyazA3VXJNUjViRG9XRU0rVnpVSjl2alZZ?= =?utf-8?B?ODZ6L3g4bWlzbERBd0NNblRZRHJVVnM5dm9oRkxROFRXbEtudEQxV2I0ME9L?= =?utf-8?B?Tm8yMVlvQ0hXRHYzYSs2N0kzTHFlMk1SeEIvVWhBbVN4M1JBN1p1YWFaZXlK?= =?utf-8?B?eFd6c0NjWnFMMXRkYThRd2Q4RFhxaGJlTFgvM3h0MElMVThIaU0zUW92N0Q1?= =?utf-8?B?OWs2bUFseGpRV0Y3QmtTYnZSeno2eWh2QzhMNEQyQlNnM01yUXpvMlg3bGly?= =?utf-8?B?Sy8rRTY1UnhQZm53SE0rVnU3ck9HVmtMZmpwdnlZQXFTcTZ2TEhyUEdHeHJX?= =?utf-8?B?d0ZlME9kMGVzWTBoM0dCZDVhSUNhMk5JcW15alFHRVFPc0NJK0JmYmpsT2Fp?= =?utf-8?B?UGprbm56VWY4dzhUd1dqZkZrVk9aQVdvbGdXVnlzNWtGS1pHd3FDOWIzMmxQ?= =?utf-8?B?dWVLc1FXTUxmaFNSM000QS9MY3NVcDlrb3BmNTVmb2FpNHpXdGppMXl0Qytm?= =?utf-8?B?dXJPQ3d2M0FPcnhmN0h0M0c5RnRzZk1tRkQ5S3ViMGJORThpU0NKbnVEd2g3?= =?utf-8?B?eHdaSEJSVGpKVWxBNmlPVGhzeC9jc1YwUTh3eHF2WWhjUjF4UExsYk4yMmRv?= =?utf-8?B?Y2pORXArYTEwYVgrVEhYWFNLTGlXV0Z0ZGFiaFZ3cjdYY2dnQVZvRk9XaVFW?= =?utf-8?B?Yml2ZWR3NStReEtRbGV4dEVhdGZmc2xjNDk0M2RUL3VxWkJnbVpDa0dXV3JM?= =?utf-8?B?YzJheWZnc2wyTkNVMjhzRXhOYVFCbzQvNGhZTWlUUHBta0cxMURLVHpaNUdo?= =?utf-8?B?K2xVemcrcGRNeTlMNXAvVHZUcm5Qd0s0bXZaQ2Vna0ZqdVZuS0NLeERrY0FO?= =?utf-8?B?dnMyY203Ly91U3pSRTU3b0wzeDhQUkNqTU5nc0JlTVVlUWtQbmM2UmhGalE5?= =?utf-8?B?eDB5a3VaOTZPVDhzdlRjclI0dmdHbFdWR2lTeUQ4K0hrN284Q1RCeEt4cUVB?= =?utf-8?B?TDlvaGFXeXUwRG5WYmFqY1J3TnVaa0V1RVdhOVJTajFDOStBcUJUTHQwT29N?= =?utf-8?B?UFhTMmJzSXRyL0JPcEQyNGY4bkdJQXFJTE1WYjhZUU9jdDRSYjBETzFpT2Rz?= =?utf-8?Q?GEAb4OXsle00p+PomXb/osjVmE/6kFyl?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR11MB3622.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 763dde65-b4ee-4a23-3e65-08da0d03331f X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2022 19:27:41.8532 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: g7t0A9V/VAuaITj/a0q/YHS3jcbfnxQWASu0c94Ga3Z4CwHyQRopcaoMKGHSfFoH6zjrewTOSCABLHJk7gCeDQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR1101MB2238 Return-Path: guo.dong@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQpIaSBSdWRvbHBoLA0KDQpCeSBteSB1bmRlcnN0YW5kaW5nLCBlZGsyIHJlcG8gaXMgbWFpbmx5 IGZvciB0aGUgbW9kdWxlcyBkZWZpbmVkIGJ5IGluZHVzdHJ5IHN0YW5kYXJkcyAoZS5nLiBVRUZJ IGFuZCBQSSBzcGVjaWZpY2F0aW9ucykuDQpGb3IgdGhlIG1vZHVsZXMgdGhhdCBpcyBzcGVjaWZp YyB0byBhIHZlbmRvciAoZS5nLiBJbnRlbCBQQ0gpLCBvciBhIGJvb3Rsb2FkZXIsIGVkazItcGxh dGZvcm0gd291bGQgYmUgYSBiZXR0ZXIgcGxhY2VzLg0KDQpDdXJyZW50bHkgaW4gdGhlIEVESzIg VWVmaVBheWxvYWRwa2csIGJlc2lkZSB0aGUgUENIIG1vZHVsZXMgSSBtZW50aW9uZWQgYmVmb3Jl LCBvbmx5IFBhcnN0TGliIGlzIGJvb3Rsb2FkZXIgc3BlY2lmaWMuDQpTbyBmb3IgUENIIG1vZHVs ZXMsIEkgYWxyZWFkeSBzdWJtaXR0ZWQgYSBwYXRjaCB0byBtb3ZlIHRvIGVkazItcGxhdGZvcm1z IHJlcG8uDQpGb3IgUGFyc2VMaWIsIGl0IGlzIG5vdCB1c2VkIGluIHVuaXZlcnNhbCBVRUZJIHBh eWxvYWQuIFdpbGwga2VlcCBpdCBhcy1pcyB0byBiZSB1c2VkIGZvciBub24tdW5pdmVyc2FsIFVF RkkgcGF5bG9hZCBmb3IgYmFjay1jb21iYXRhYmxlLiANCkhvcGUgdGhpcyBjb3VsZCBoZWxwLg0K DQpUaGFua3MsDQpHdW8NCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IGRldmVs QGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gT24gQmVoYWxmIE9mIFBhdHJp Y2sgUnVkb2xwaA0KU2VudDogV2VkbmVzZGF5LCBNYXJjaCAyMywgMjAyMiAxMToyNSBBTQ0KVG86 IERvbmcsIEd1byA8Z3VvLmRvbmdAaW50ZWwuY29tPg0KQ2M6IFJob2RlcywgU2VhbiA8c2VhbkBz dGFybGFicy5zeXN0ZW1zPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87IE5pLCBSYXkgPHJheS5uaUBp bnRlbC5jb20+OyBNYSwgTWF1cmljZSA8bWF1cmljZS5tYUBpbnRlbC5jb20+OyBZb3UsIEJlbmph bWluIDxiZW5qYW1pbi55b3VAaW50ZWwuY29tPg0KU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBb UEFUQ0ggNS81XSBVZWZpUGF5bG9hZFBrZzogQWRkIHN1cHBvcnQgZm9yIEZpcm13YXJlIFZvbHVt ZSBCbG9jayBQcm90b2NvbA0KDQpIaSBHdW8sDQpJIGRvbid0IHNlZSB3aGVyZSBpdCdzIHdyaXR0 ZW4gdGhhdCBVZWZpUGF5bG9hZFBrZyBpcyBib290bG9hZGVyDQppbmRlcGVuZGVudC4gQ2FuIHlv dSBwb2ludCBtZSB0byB0aGF0IGRvY3VtZW50YXRpb24/DQpSZWFkaW5nIHRoZSBCdWlsZEFuZElu dGVncmF0aW9uSW5zdHJ1Y3Rpb25zLnR4dCBJIHVuZGVyc3RhbmQgdGhhdCBpdA0KaXMgdmVyeSBi b290bG9hZGVyIHNwZWNpZmljLCBhcyBpdCdzICBiYXNpY2FsbHkgZGVzaWduZWQgYXMgYQ0KYm9v dGxvYWRlciBwYXlsb2FkLg0KV2hlcmUgZG8geW91IGRyYXcgdGhlIGxpbmUgYmV0d2VlbiBwbGF0 Zm9ybSBjb2RlIGFuZCAiZ2VuZXJpYyIgcGF5bG9hZCBjb2RlPw0KDQpSZWdhcmRzLA0KUGF0cmlj ayBSdWRvbHBoDQoNCk9uIFdlZCwgTWFyIDIzLCAyMDIyIGF0IDc6MTIgUE0gRG9uZywgR3VvIDxn dW8uZG9uZ0BpbnRlbC5jb20+IHdyb3RlOg0KPg0KPg0KPiBIaSBTZWFuLA0KPiBTTU1TVE9SRSBh bmQgdGhpcyBGVkIgbW9kdWxlIGFyZSBzcGVjaWZpYyBmb3IgY29yZWJvb3Qgd2hpbGUgVWVmaVBh eWxvYWRQa2cgaW4gRWRrMiBpcyB0YXJnZXRpbmcgcGxhdGZvcm0vYm9vdGxvYWRlciBpbmRlcGVu ZGVudC4NCj4gSSBqdXN0IHN1Ym1pdHRlZCBhbiAiYWRkIFVFRkkgcGF5bG9hZCBwbGF0Zm9ybSBG ViIgcGF0Y2ggdG8gZWRrMi1wbGF0Zm9ybXMgcmVwbywgaW4gdGhpcyBwYXRjaCBpdCBtb3ZlcyBQ Q0ggc3BlY2lmaWMgbW9kdWxlcyBmcm9tDQo+IEVkazIgVWVmaVBheWxvYWRQa2cgdG8gZWRrMi1w bGF0Zm9ybXMgUGxhdGZvcm0vSW50ZWwvUGF5bG9hZFBsYXRmb3JtUGtnLiBNYXliZSB0aGVzZSBj b3JlYm9vdCBzcGVjaWZpYyBtb2R1bGVzIGNvdWxkIGFsc28gdGFyZ2V0DQo+IHRvIGVkazItcGxh dGZvcm1zIHJlcG8/DQo+DQo+IFRoYW5rcywNCj4gR3VvDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+IEZyb206IFNlYW4gUmhvZGVzIDxzZWFuQHN0YXJsYWJzLnN5c3RlbXM+DQo+IFNl bnQ6IE1vbmRheSwgTWFyY2ggMjEsIDIwMjIgMjoxMCBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91 cHMuaW8NCj4gQ2M6IFJob2RlcywgU2VhbiA8c2VhbkBzdGFybGFicy5zeXN0ZW1zPjsgRG9uZywg R3VvIDxndW8uZG9uZ0BpbnRlbC5jb20+OyBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgTWEs IE1hdXJpY2UgPG1hdXJpY2UubWFAaW50ZWwuY29tPjsgWW91LCBCZW5qYW1pbiA8YmVuamFtaW4u eW91QGludGVsLmNvbT47IFBhdHJpY2sgUnVkb2xwaCA8cGF0cmljay5ydWRvbHBoQDllbGVtZW50 cy5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCA1LzVdIFVlZmlQYXlsb2FkUGtnOiBBZGQgc3VwcG9y dCBmb3IgRmlybXdhcmUgVm9sdW1lIEJsb2NrIFByb3RvY29sDQo+DQo+IFRoaXMgYWRkcyBzdXBw b3J0IGZvciBGVkIgaW4gb3JkZXIgdG8gc3VwcG9ydCBhIHBsYXRmb3JtIGluZGVwZW5kZW50DQo+ IGFuZCBub24tdm9sYXRpbGUgdmFyaWFibGUgc3RvcmUgb24gVWVmaVBheWxvYWRQa2cuIFRoZSB2 YXJpYWJsZSBzdG9yZQ0KPiBtYWtlcyB1c2UgdGhlIFNtbVN0b3JlTGliIHRvIHByb3ZpZGUgYW4g dW5hdXRoZW50aWNlZCB2YXJpYWJsZSBzdG9yZS4NCj4NCj4gU2luY2UgY29tbWl0IGJjNzQ0ZjU4 OTNmYzRkNTMyNzVlZDI2ZGQ4ZDk2ODAxMWM2YTA5YzEgY29yZWJvb3Qgc3VwcG9ydHMNCj4gdGhl IFNNTVNUT1JFIHYyIGZlYXR1cmUuIEl0IGltcGxlbWVudHMgYSBTTUkgaGFuZGxlciB0aGF0IGlz IGFibGUgdG8NCj4gd3JpdGUsIHJlYWQgYW5kIGVyYXNlIHBhZ2VzIGluIHRoZSBib290IG1lZGlh IChTUEkgZmxhc2gpLg0KPiBUaGUgY29tbXVuaWNhdGlvbiBpcyBkb25lIHVzaW5nIGEgZml4ZWQg Y29tbXVuaWNhdGlvbiBidWZmZXIgdGhhdCBpcw0KPiBhbGxvY2F0ZWQgaW4gQ0JNRU0uIFRoZSBl eGlzdGVuY2Ugb2YgdGhpcyBvcHRpb25hbCBmZWF0dXJlIGlzIGFkdmVydGlzZWQNCj4gYnkgYSBj b3JlYm9vdCB0YWJsZS4NCj4gV2hlbiB0aGUgU01NU1RPUkUgZmVhdHVyZSBpcyBub3QgYXZhaWxh YmxlIHRoZSB2YXJpYWJsZSBlbXVsYXRpb24gaXMgdXNlZA0KPiBieSBzZXR0aW5nIFBjZEVtdVZh cmlhYmxlTnZNb2RlRW5hYmxlIHRvIFRSVUUuDQo+DQo+IFRoZSBEWEUgY29tcG9uZW50IHByb3Zp ZGVzIHJ1bnRpbWUgc2VydmljZXMgYW5kIHRha2VzIGNhcmUgb2YgdmlydHVhbCB0bw0KPiBwaHlz aWNhbCBtYXBwaW5nIHRoZSBjb21tdW5pY2F0aW9uIGJ1ZmZlcnMgYmV0d2VlbiBTTU0gYW5kIE9T Lg0KPg0KPiBUaGUgY29udGVudHMgb2YgdGhlIHZhcmlhYmxlIHN0b3JlIGNhbiBiZSBhY2Nlc3Nl ZCBhbmQgbW9kaWZpZWQgYnkgYW55DQo+IHByaXZpbGVkZ2VkIGFwcGxpY2F0aW9uLiBBcyBhdXRo ZW50aWNhdGlvbiBpcyBkb25lIGJ5IHJ1bnRpbWUgc2VydmljZXMNCj4gb25seSB0aGUgc3RvcmUg c2hvdWxkbid0IGJlIHVzZWQgdG8gc3RvcmUgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMuDQo+DQo+ IFRlc3RlZCBvbiBMaW51eCBhbmQgV2luZG93cyAxMCBvbiByZWFsIGhhcmR3YXJlLg0KPiBDdXJy ZW50bHkgdGhpcyBjYW5ub3QgYmUgdGVzdGVkIG9uIGNvcmVib290IGFuZCBxZW11IGFzIGl0IGRv ZXNuJ3Qgc3VwcG9ydA0KPiB0aGUgU01NU1RPUkUgb24gcWVtdS4NCj4NCj4gQ2M6IEd1byBEb25n IDxndW8uZG9uZ0BpbnRlbC5jb20+DQo+IENjOiBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQo+ IENjOiBNYXVyaWNlIE1hIDxtYXVyaWNlLm1hQGludGVsLmNvbT4NCj4gQ2M6IEJlbmphbWluIFlv dSA8YmVuamFtaW4ueW91QGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogUGF0cmljayBSdWRv bHBoIDxwYXRyaWNrLnJ1ZG9scGhAOWVsZW1lbnRzLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogU2Vh biBSaG9kZXMgPHNlYW5Ac3RhcmxhYnMuc3lzdGVtcz4NCj4gLS0tDQo+ICAuLi4vU21tU3RvcmVG dmIvU21tU3RvcmVGdmJSdW50aW1lLmMgICAgICAgICAgfCAyODIgKysrKysrDQo+ICAuLi4vU21t U3RvcmVGdmIvU21tU3RvcmVGdmJSdW50aW1lLmggICAgICAgICAgfCAxMTEgKysrDQo+ICAuLi4v U21tU3RvcmVGdmIvU21tU3RvcmVGdmJSdW50aW1lRHhlLmMgICAgICAgfCA4NDkgKysrKysrKysr KysrKysrKysrDQo+ICAuLi4vU21tU3RvcmVGdmIvU21tU3RvcmVGdmJSdW50aW1lRHhlLmluZiAg ICAgfCAgNjYgKysNCj4gIFVlZmlQYXlsb2FkUGtnL1VlZmlQYXlsb2FkUGtnLmRzYyAgICAgICAg ICAgICB8ICAyNCArLQ0KPiAgVWVmaVBheWxvYWRQa2cvVWVmaVBheWxvYWRQa2cuZmRmICAgICAg ICAgICAgIHwgICA0ICsNCj4gIDYgZmlsZXMgY2hhbmdlZCwgMTMzMCBpbnNlcnRpb25zKCspLCA2 IGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVlZmlQYXlsb2FkUGtnL1NtbVN0 b3JlRnZiL1NtbVN0b3JlRnZiUnVudGltZS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgVWVmaVBh eWxvYWRQa2cvU21tU3RvcmVGdmIvU21tU3RvcmVGdmJSdW50aW1lLmgNCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBVZWZpUGF5bG9hZFBrZy9TbW1TdG9yZUZ2Yi9TbW1TdG9yZUZ2YlJ1bnRpbWVEeGUu Yw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVlZmlQYXlsb2FkUGtnL1NtbVN0b3JlRnZiL1NtbVN0 b3JlRnZiUnVudGltZUR4ZS5pbmYNCj4NCj4gZGlmZiAtLWdpdCBhL1VlZmlQYXlsb2FkUGtnL1Nt bVN0b3JlRnZiL1NtbVN0b3JlRnZiUnVudGltZS5jIGIvVWVmaVBheWxvYWRQa2cvU21tU3RvcmVG dmIvU21tU3RvcmVGdmJSdW50aW1lLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMDAwMC4uMDhkNWM0MDhmYg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VlZmlQYXls b2FkUGtnL1NtbVN0b3JlRnZiL1NtbVN0b3JlRnZiUnVudGltZS5jDQo+IEBAIC0wLDAgKzEsMjgy IEBADQo+ICsvKiogQGZpbGUgIFNtbVN0b3JlRnZiUnVudGltZS5jDQo+DQo+ICsNCj4NCj4gKyAg Q29weXJpZ2h0IChjKSAyMDIyLCA5ZWxlbWVudHMgR21iSDxCUj4NCj4NCj4gKw0KPg0KPiArICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPg0KPiArDQo+DQo+ ICsqKi8NCj4NCj4gKw0KPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPg0KPiArI2luY2x1ZGUgPExpYnJh cnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRHhlU2Vy dmljZXNUYWJsZUxpYi5oPg0KPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5o Pg0KPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L1NtbVN0b3JlTGliLmg+DQo+DQo+ICsNCj4NCj4gKyNpbmNsdWRlICJTbW1TdG9yZUZ2YlJ1bnRp bWUuaCINCj4NCj4gKw0KPg0KPiArU1RBVElDIEVGSV9FVkVOVCAgbVNtbVN0b3JlVmlydHVhbEFk ZHJDaGFuZ2VFdmVudDsNCj4NCj4gKw0KPg0KPiArLy8NCj4NCj4gKy8vIEdsb2JhbCB2YXJpYWJs ZSBkZWNsYXJhdGlvbnMNCj4NCj4gKy8vDQo+DQo+ICtTTU1TVE9SRV9JTlNUQU5DRSAgKm1TbW1T dG9yZUluc3RhbmNlOw0KPg0KPiArDQo+DQo+ICtTTU1TVE9SRV9JTlNUQU5DRSAgbVNtbVN0b3Jl SW5zdGFuY2VUZW1wbGF0ZSA9IHsNCj4NCj4gKyAgU01NU1RPUkVfU0lHTkFUVVJFLCAvLyBTaWdu YXR1cmUNCj4NCj4gKyAgTlVMTCwgICAgICAgICAgICAgICAvLyBIYW5kbGUgLi4uIE5FRUQgVE8g QkUgRklMTEVEDQo+DQo+ICsgIHsNCj4NCj4gKyAgICBGdmJHZXRBdHRyaWJ1dGVzLCAgICAgIC8v IEdldEF0dHJpYnV0ZXMNCj4NCj4gKyAgICBGdmJTZXRBdHRyaWJ1dGVzLCAgICAgIC8vIFNldEF0 dHJpYnV0ZXMNCj4NCj4gKyAgICBGdmJHZXRQaHlzaWNhbEFkZHJlc3MsIC8vIEdldFBoeXNpY2Fs QWRkcmVzcw0KPg0KPiArICAgIEZ2YkdldEJsb2NrU2l6ZSwgICAgICAgLy8gR2V0QmxvY2tTaXpl DQo+DQo+ICsgICAgRnZiUmVhZCwgICAgICAgICAgICAgICAvLyBSZWFkDQo+DQo+ICsgICAgRnZi V3JpdGUsICAgICAgICAgICAgICAvLyBXcml0ZQ0KPg0KPiArICAgIEZ2YkVyYXNlQmxvY2tzLCAg ICAgICAgLy8gRXJhc2VCbG9ja3MNCj4NCj4gKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8v IFBhcmVudEhhbmRsZQ0KPg0KPiArICB9LCAvLyAgRnZiUHJvdG9jY29sDQo+DQo+ICsgIDAsIC8v IEJsb2NrU2l6ZSAuLi4gTkVFRCBUTyBCRSBGSUxMRUQNCj4NCj4gKyAgMCwgLy8gTGFzdEJsb2Nr IC4uLiBORUVEIFRPIEJFIEZJTExFRA0KPg0KPiArICAwLCAvLyBNbWlvQWRkcmVzcyAuLi4gTkVF RCBUTyBCRSBGSUxMRUQNCj4NCj4gKyAgew0KPg0KPiArICAgIHsNCj4NCj4gKyAgICAgIHsNCj4N Cj4gKyAgICAgICAgSEFSRFdBUkVfREVWSUNFX1BBVEgsDQo+DQo+ICsgICAgICAgIEhXX01FTU1B UF9EUCwNCj4NCj4gKyAgICAgICAgew0KPg0KPiArICAgICAgICAgIChVSU5UOCkoc2l6ZW9mIChN RU1NQVBfREVWSUNFX1BBVEgpKSwNCj4NCj4gKyAgICAgICAgICAoVUlOVDgpKHNpemVvZiAoTUVN TUFQX0RFVklDRV9QQVRIKSA+PiA4KQ0KPg0KPiArICAgICAgICB9DQo+DQo+ICsgICAgICB9LA0K Pg0KPiArICAgICAgRWZpTWVtb3J5TWFwcGVkSU8sDQo+DQo+ICsgICAgICAoRUZJX1BIWVNJQ0FM X0FERFJFU1MpMCwgLy8gTkVFRCBUTyBCRSBGSUxMRUQNCj4NCj4gKyAgICAgIChFRklfUEhZU0lD QUxfQUREUkVTUykwLCAvLyBORUVEIFRPIEJFIEZJTExFRA0KPg0KPiArICAgIH0sDQo+DQo+ICsg ICAgew0KPg0KPiArICAgICAgRU5EX0RFVklDRV9QQVRIX1RZUEUsDQo+DQo+ICsgICAgICBFTkRf RU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUsDQo+DQo+ICsgICAgICB7DQo+DQo+ICsgICAgICAg IEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgsDQo+DQo+ICsgICAgICAgIDANCj4NCj4gKyAgICAgIH0N Cj4NCj4gKyAgICB9DQo+DQo+ICsgIH0gLy8gRGV2aWNlUGF0aA0KPg0KPiArfTsNCj4NCj4gKw0K Pg0KPiArLyoqDQo+DQo+ICsgIEluaXRpYWxpemUgdGhlIFNtbVN0b3JlIGluc3RhbmNlLg0KPg0K PiArDQo+DQo+ICsNCj4NCj4gKyAgQHBhcmFtW2luXSAgICAgIEZ2QmFzZSAgICAgICAgIFRoZSBw aHlzaWNhbCBNTUlPIGJhc2UgYWRkcmVzcyBvZiB0aGUgRlYgY29udGFpbmluZw0KPg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIHN0b3JlLg0KPg0KPiAr DQo+DQo+ICsgIEBwYXJhbVtpbl0gICAgICBOdW1iZXJvZkJsb2NrcyBOdW1iZXIgb2YgYmxvY2tz IHdpdGhpbiB0aGUgRlYuDQo+DQo+ICsgIEBwYXJhbVtpbl0gICAgICBCbG9ja1NpemUgICAgICBU aGUgc2l6ZSBpbiBieXRlcyBvZiBvbmUgYmxvY2sgd2l0aGluIHRoZSBGVi4NCj4NCj4gKyAgQHBh cmFtW2luLCBvdXRdIEluc3RhbmNlICAgICAgIFRoZSBTbW1TdG9yZSBpbnN0YWNlIHRvIGluaXRp YWxpemUNCj4NCj4gKw0KPg0KPiArKiovDQo+DQo+ICtTVEFUSUMNCj4NCj4gK0VGSV9TVEFUVVMN Cj4NCj4gK1NtbVN0b3JlSW5pdEluc3RhbmNlICgNCj4NCj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICBGdkJhc2UsDQo+DQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgTnVtYmVy b2ZCbG9ja3MsDQo+DQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgQmxvY2tTaXplLA0K Pg0KPiArICBJTiBPVVQgU01NU1RPUkVfSU5TVEFOQ0UgICpJbnN0YW5jZQ0KPg0KPiArICApDQo+ DQo+ICt7DQo+DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KPg0KPiArICBG Vl9NRU1NQVBfREVWSUNFX1BBVEggICpGdkRldmljZVBhdGg7DQo+DQo+ICsNCj4NCj4gKyAgQVNT RVJUIChJbnN0YW5jZSAhPSBOVUxMKTsNCj4NCj4gKw0KPg0KPiArICBJbnN0YW5jZS0+QmxvY2tT aXplICAgPSBCbG9ja1NpemU7DQo+DQo+ICsgIEluc3RhbmNlLT5MYXN0QmxvY2sgICA9IE51bWJl cm9mQmxvY2tzIC0gMTsNCj4NCj4gKyAgSW5zdGFuY2UtPk1taW9BZGRyZXNzID0gRnZCYXNlOw0K Pg0KPiArDQo+DQo+ICsgIEZ2RGV2aWNlUGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPSAmSW5zdGFuY2UtPkRldmljZVBhdGg7DQo+DQo+ICsgIEZ2RGV2aWNlUGF0aC0+TWVtTWFw RGV2UGF0aC5TdGFydGluZ0FkZHJlc3MgPSBGdkJhc2U7DQo+DQo+ICsgIEZ2RGV2aWNlUGF0aC0+ TWVtTWFwRGV2UGF0aC5FbmRpbmdBZGRyZXNzICAgPSBGdkJhc2UgKyBCbG9ja1NpemUgKiBOdW1i ZXJvZkJsb2NrcyAtIDE7DQo+DQo+ICsNCj4NCj4gKyAgU3RhdHVzID0gRnZiSW5pdGlhbGl6ZSAo SW5zdGFuY2UpOw0KPg0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIFN0YXR1cyA9IGdCUy0+ SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4NCj4gKyAgICAgICAgICAgICAg ICAgICZJbnN0YW5jZS0+SGFuZGxlLA0KPg0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZp Y2VQYXRoUHJvdG9jb2xHdWlkLA0KPg0KPiArICAgICAgICAgICAgICAgICAgJkluc3RhbmNlLT5E ZXZpY2VQYXRoLA0KPg0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlGaXJtd2FyZVZvbHVtZUJs b2NrUHJvdG9jb2xHdWlkLA0KPg0KPiArICAgICAgICAgICAgICAgICAgJkluc3RhbmNlLT5GdmJQ cm90b2NvbCwNCj4NCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4NCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4NCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPg0KPiArICB9DQo+DQo+ICsNCj4NCj4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiJWE6IENyZWF0ZWQgYSBuZXcgaW5zdGFuY2VcbiIsIF9fRlVOQ1RJT05fXykpOw0KPg0K PiArDQo+DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+DQo+ICt9DQo+DQo+ICsNCj4NCj4gKy8qKg0K Pg0KPiArICBGaXh1cCBpbnRlcm5hbCBkYXRhIHNvIHRoYXQgRUZJIGNhbiBiZSBjYWxsIGluIHZp cnR1YWwgbW9kZS4NCj4NCj4gKyAgQ2FsbCB0aGUgcGFzc2VkIGluIENoaWxkIE5vdGlmeSBldmVu dCBhbmQgY29udmVydCBhbnkgcG9pbnRlcnMgaW4NCj4NCj4gKyAgbGliIHRvIHZpcnR1YWwgbW9k ZS4NCj4NCj4gKw0KPg0KPiArICBAcGFyYW1baW5dICAgIEV2ZW50ICAgVGhlIEV2ZW50IHRoYXQg aXMgYmVpbmcgcHJvY2Vzc2VkDQo+DQo+ICsgIEBwYXJhbVtpbl0gICAgQ29udGV4dCBFdmVudCBD b250ZXh0DQo+DQo+ICsqKi8NCj4NCj4gK1NUQVRJQw0KPg0KPiArVk9JRA0KPg0KPiArRUZJQVBJ DQo+DQo+ICtTbW1TdG9yZVZpcnR1YWxOb3RpZnlFdmVudCAoDQo+DQo+ICsgIElOIEVGSV9FVkVO VCAgRXZlbnQsDQo+DQo+ICsgIElOIFZPSUQgICAgICAgKkNvbnRleHQNCj4NCj4gKyAgKQ0KPg0K PiArew0KPg0KPiArICAvLyBDb252ZXJ0IEZ2Yg0KPg0KPiArICBFZmlDb252ZXJ0UG9pbnRlciAo MHgwLCAoVk9JRCAqKikmbVNtbVN0b3JlSW5zdGFuY2UtPkZ2YlByb3RvY29sLkVyYXNlQmxvY2tz KTsNCj4NCj4gKyAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1TbW1TdG9yZUlu c3RhbmNlLT5GdmJQcm90b2NvbC5HZXRBdHRyaWJ1dGVzKTsNCj4NCj4gKyAgRWZpQ29udmVydFBv aW50ZXIgKDB4MCwgKFZPSUQgKiopJm1TbW1TdG9yZUluc3RhbmNlLT5GdmJQcm90b2NvbC5HZXRC bG9ja1NpemUpOw0KPg0KPiArICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbVNt bVN0b3JlSW5zdGFuY2UtPkZ2YlByb3RvY29sLkdldFBoeXNpY2FsQWRkcmVzcyk7DQo+DQo+ICsg IEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtU21tU3RvcmVJbnN0YW5jZS0+RnZi UHJvdG9jb2wuUmVhZCk7DQo+DQo+ICsgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoq KSZtU21tU3RvcmVJbnN0YW5jZS0+RnZiUHJvdG9jb2wuU2V0QXR0cmlidXRlcyk7DQo+DQo+ICsg IEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtU21tU3RvcmVJbnN0YW5jZS0+RnZi UHJvdG9jb2wuV3JpdGUpOw0KPg0KPiArICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAq KikmbVNtbVN0b3JlSW5zdGFuY2UtPk1taW9BZGRyZXNzKTsNCj4NCj4gKyAgRWZpQ29udmVydFBv aW50ZXIgKDB4MCwgKFZPSUQgKiopJm1TbW1TdG9yZUluc3RhbmNlKTsNCj4NCj4gKw0KPg0KPiAr ICByZXR1cm47DQo+DQo+ICt9DQo+DQo+ICsNCj4NCj4gKy8qKg0KPg0KPiArICBUaGUgdXNlciBF bnRyeSBQb2ludCBmb3IgbW9kdWxlIFNtbVN0b3JlRnZiUnVudGltZUR4ZS4gVGhlIHVzZXIgY29k ZSBzdGFydHMgd2l0aCB0aGlzIGZ1bmN0aW9uLg0KPg0KPiArDQo+DQo+ICsgIEBwYXJhbVtpbl0g SW1hZ2VIYW5kbGUgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkg aW1hZ2UuDQo+DQo+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgICAgQSBwb2ludGVyIHRvIHRo ZSBFRkkgU3lzdGVtIFRhYmxlLg0KPg0KPiArDQo+DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgVGhlIGVudHJ5IHBvaW50IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4NCj4gKyAg QHJldHZhbCBvdGhlciAgICAgICAgICAgICBTb21lIGVycm9yIG9jY3VycyB3aGVuIGV4ZWN1dGlu ZyB0aGlzIGVudHJ5IHBvaW50Lg0KPg0KPiArDQo+DQo+ICsqKi8NCj4NCj4gK0VGSV9TVEFUVVMN Cj4NCj4gK0VGSUFQSQ0KPg0KPiArU21tU3RvcmVJbml0aWFsaXplICgNCj4NCj4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+DQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUg ICpTeXN0ZW1UYWJsZQ0KPg0KPiArICApDQo+DQo+ICt7DQo+DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICBTdGF0dXM7DQo+DQo+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICBNbWlvQWRkcmVz czsNCj4NCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsNCj4NCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgIEJsb2NrQ291bnQ7DQo+DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICBOdlN0b3JhZ2VCYXNlOw0KPg0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgTnZTdG9y YWdlU2l6ZTsNCj4NCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgIE52VmFyaWFibGVTaXplOw0K Pg0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgRnR3V29ya2luZ1NpemU7DQo+DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICBGdHdTcGFyZVNpemU7DQo+DQo+ICsNCj4NCj4gKyAgU3RhdHVz ID0gU21tU3RvcmVMaWJJbml0aWFsaXplICgpOw0KPg0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBGYWlsZWQgdG8gaW5p dGlhbGl6ZSBTbW1TdG9yZUxpYlxuIiwgX19GVU5DVElPTl9fKSk7DQo+DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIFN0YXR1cyA9IFNtbVN0b3JlTGli R2V0TW1pb0FkZHJlc3MgKCZNbWlvQWRkcmVzcyk7DQo+DQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4NCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEZhaWxlZCB0byBn ZXQgU21tU3RvcmUgTU1JTyBhZGRyZXNzXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4NCj4gKyAgICBT bW1TdG9yZUxpYkRlaW5pdGlhbGl6ZSAoKTsNCj4NCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPg0K PiArICB9DQo+DQo+ICsNCj4NCj4gKyAgU3RhdHVzID0gU21tU3RvcmVMaWJHZXROdW1CbG9ja3Mg KCZCbG9ja0NvdW50KTsNCj4NCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPg0KPiAr ICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogRmFpbGVkIHRvIGdldCBTbW1TdG9yZSBOby4g YmxvY2tzXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4NCj4gKyAgICBTbW1TdG9yZUxpYkRlaW5pdGlh bGl6ZSAoKTsNCj4NCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPg0KPiArICB9DQo+DQo+ICsNCj4N Cj4gKyAgU3RhdHVzID0gU21tU3RvcmVMaWJHZXRCbG9ja1NpemUgKCZCbG9ja1NpemUpOw0KPg0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+DQo+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIiVhOiBGYWlsZWQgdG8gZ2V0IFNtbVN0b3JlIGJsb2NrIHNpemVcbiIsIF9fRlVOQ1RJ T05fXykpOw0KPg0KPiArICAgIFNtbVN0b3JlTGliRGVpbml0aWFsaXplICgpOw0KPg0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiArICBOdlN0b3JhZ2VTaXpl ID0gQmxvY2tDb3VudCAqIEJsb2NrU2l6ZTsNCj4NCj4gKyAgTnZTdG9yYWdlQmFzZSA9IE1taW9B ZGRyZXNzOw0KPg0KPiArDQo+DQo+ICsgIEZ0d1NwYXJlU2l6ZSAgID0gKEJsb2NrQ291bnQgLyAy KSAqIEJsb2NrU2l6ZTsNCj4NCj4gKyAgRnR3V29ya2luZ1NpemUgPSBCbG9ja1NpemU7DQo+DQo+ ICsgIE52VmFyaWFibGVTaXplID0gTnZTdG9yYWdlU2l6ZSAtIEZ0d1NwYXJlU2l6ZSAtIEZ0d1dv cmtpbmdTaXplOw0KPg0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJOdlN0b3JhZ2VCYXNlOjB4 JXgsIE52U3RvcmFnZVNpemU6MHgleFxuIiwgTnZTdG9yYWdlQmFzZSwgTnZTdG9yYWdlU2l6ZSkp Ow0KPg0KPiArDQo+DQo+ICsgIGlmIChOdlZhcmlhYmxlU2l6ZSA+PSAweDgwMDAwMDAwKSB7DQo+ DQo+ICsgICAgU21tU3RvcmVMaWJEZWluaXRpYWxpemUgKCk7DQo+DQo+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIFN0YXR1cyA9 IFBjZFNldDMyUyAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUsIE52VmFyaWFibGVTaXpl KTsNCj4NCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4NCj4gKyAgU3RhdHVzID0g UGNkU2V0MzJTIChQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlQmFzZSwgTnZTdG9yYWdlQmFzZSk7 DQo+DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+DQo+ICsgIFN0YXR1cyA9IFBj ZFNldDY0UyAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZUJhc2U2NCwgTnZTdG9yYWdlQmFzZSk7 DQo+DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+DQo+ICsNCj4NCj4gKyAgU3Rh dHVzID0gUGNkU2V0MzJTIChQY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplLCBGdHdXb3Jr aW5nU2l6ZSk7DQo+DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+DQo+ICsgIFN0 YXR1cyA9IFBjZFNldDMyUyAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZSwgTnZTdG9y YWdlQmFzZSArIE52VmFyaWFibGVTaXplKTsNCj4NCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3Rh dHVzKTsNCj4NCj4gKyAgU3RhdHVzID0gUGNkU2V0NjRTIChQY2RGbGFzaE52U3RvcmFnZUZ0d1dv cmtpbmdCYXNlNjQsIE52U3RvcmFnZUJhc2UgKyBOdlZhcmlhYmxlU2l6ZSk7DQo+DQo+ICsgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+DQo+ICsNCj4NCj4gKyAgU3RhdHVzID0gUGNkU2V0 MzJTIChQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSwgRnR3U3BhcmVTaXplKTsNCj4NCj4g KyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4NCj4gKyAgU3RhdHVzID0gUGNkU2V0MzJT IChQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlQmFzZSwgTnZTdG9yYWdlQmFzZSArIE52VmFyaWFi bGVTaXplICsgRnR3V29ya2luZ1NpemUpOw0KPg0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0 dXMpOw0KPg0KPiArICBTdGF0dXMgPSBQY2RTZXQ2NFMgKFBjZEZsYXNoTnZTdG9yYWdlRnR3U3Bh cmVCYXNlNjQsIE52U3RvcmFnZUJhc2UgKyBOdlZhcmlhYmxlU2l6ZSArIEZ0d1dvcmtpbmdTaXpl KTsNCj4NCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4NCj4gKw0KPg0KPiArICBt U21tU3RvcmVJbnN0YW5jZSA9IEFsbG9jYXRlUnVudGltZUNvcHlQb29sIChzaXplb2YgKFNNTVNU T1JFX0lOU1RBTkNFKSwgJm1TbW1TdG9yZUluc3RhbmNlVGVtcGxhdGUpOw0KPg0KPiArICBpZiAo bVNtbVN0b3JlSW5zdGFuY2UgPT0gTlVMTCkgew0KPg0KPiArICAgIFNtbVN0b3JlTGliRGVpbml0 aWFsaXplICgpOw0KPg0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogT3V0IG9mIHJl c291cmNlc1xuIiwgX19GVU5DVElPTl9fKSk7DQo+DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPg0KPiArICB9DQo+DQo+ICsNCj4NCj4gKyAgU3RhdHVzID0gU21tU3RvcmVJ bml0SW5zdGFuY2UgKA0KPg0KPiArICAgICAgICAgICAgIE1taW9BZGRyZXNzLA0KPg0KPiArICAg ICAgICAgICAgIEJsb2NrQ291bnQsDQo+DQo+ICsgICAgICAgICAgICAgQmxvY2tTaXplLA0KPg0K PiArICAgICAgICAgICAgIG1TbW1TdG9yZUluc3RhbmNlDQo+DQo+ICsgICAgICAgICAgICAgKTsN Cj4NCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPg0KPiArICAgIERFQlVHICgNCj4N Cj4gKyAgICAgICgNCj4NCj4gKyAgICAgICBERUJVR19FUlJPUiwNCj4NCj4gKyAgICAgICAiJWE6 IEZhaWwgdG8gY3JlYXRlIGluc3RhbmNlIGZvciBTbW1TdG9yZVxuIiwNCj4NCj4gKyAgICAgICBf X0ZVTkNUSU9OX18NCj4NCj4gKyAgICAgICkNCj4NCj4gKyAgICAgICk7DQo+DQo+ICsgICAgRnJl ZVBvb2wgKG1TbW1TdG9yZUluc3RhbmNlKTsNCj4NCj4gKyAgICBTbW1TdG9yZUxpYkRlaW5pdGlh bGl6ZSAoKTsNCj4NCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPg0KPiArICB9DQo+DQo+ICsNCj4N Cj4gKyAgLy8NCj4NCj4gKyAgLy8gUmVnaXN0ZXIgZm9yIHRoZSB2aXJ0dWFsIGFkZHJlc3MgY2hh bmdlIGV2ZW50DQo+DQo+ICsgIC8vDQo+DQo+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnRF eCAoDQo+DQo+ICsgICAgICAgICAgICAgICAgICBFVlRfTk9USUZZX1NJR05BTCwNCj4NCj4gKyAg ICAgICAgICAgICAgICAgIFRQTF9OT1RJRlksDQo+DQo+ICsgICAgICAgICAgICAgICAgICBTbW1T dG9yZVZpcnR1YWxOb3RpZnlFdmVudCwNCj4NCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ DQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaUV2ZW50VmlydHVhbEFkZHJlc3NDaGFuZ2VHdWlk LA0KPg0KPiArICAgICAgICAgICAgICAgICAgJm1TbW1TdG9yZVZpcnR1YWxBZGRyQ2hhbmdlRXZl bnQNCj4NCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+DQo+ICsgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQo+DQo+ICsNCj4NCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4NCj4gK30NCj4NCj4g ZGlmZiAtLWdpdCBhL1VlZmlQYXlsb2FkUGtnL1NtbVN0b3JlRnZiL1NtbVN0b3JlRnZiUnVudGlt ZS5oIGIvVWVmaVBheWxvYWRQa2cvU21tU3RvcmVGdmIvU21tU3RvcmVGdmJSdW50aW1lLmgNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uODAxNWQxMmQxMw0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL1VlZmlQYXlsb2FkUGtnL1NtbVN0b3JlRnZiL1NtbVN0b3Jl RnZiUnVudGltZS5oDQo+IEBAIC0wLDAgKzEsMTExIEBADQo+ICsvKiogQGZpbGUgIFNtbVN0b3Jl RnZiUnVudGltZS5oDQo+DQo+ICsNCj4NCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCA5ZWxlbWVu dHMgR21iSDxCUj4NCj4NCj4gKw0KPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPg0KPiArDQo+DQo+ICsqKi8NCj4NCj4gKw0KPg0KPiArI2lmbmRl ZiBTTU1fU1RPUkVfRFhFX0hfDQo+DQo+ICsjZGVmaW5lIFNNTV9TVE9SRV9EWEVfSF8NCj4NCj4g Kw0KPg0KPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4NCj4gKyNpbmNsdWRlIDxQaUR4ZS5oPg0KPg0K PiArDQo+DQo+ICsjaW5jbHVkZSA8R3VpZC9FdmVudEdyb3VwLmg+DQo+DQo+ICsNCj4NCj4gKyNp bmNsdWRlIDxQcm90b2NvbC9GaXJtd2FyZVZvbHVtZUJsb2NrLmg+DQo+DQo+ICsNCj4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Jb0xp Yi5oPg0KPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvVWVmaVJ1bnRpbWVMaWIuaD4NCj4NCj4gKw0KPg0KPiArI2RlZmluZSBTTU1TVE9S RV9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMignUycsICdNJywgJ00nLCAnUycpDQo+DQo+ICsjZGVm aW5lIElOU1RBTkNFX0ZST01fRlZCX1RISVMoYSkgIENSKGEsIFNNTVNUT1JFX0lOU1RBTkNFLCBG dmJQcm90b2NvbCwgU01NU1RPUkVfU0lHTkFUVVJFKQ0KPg0KPiArDQo+DQo+ICt0eXBlZGVmIHN0 cnVjdCBfU01NU1RPUkVfSU5TVEFOQ0UgU01NU1RPUkVfSU5TVEFOQ0U7DQo+DQo+ICsNCj4NCj4g K3R5cGVkZWYgc3RydWN0IHsNCj4NCj4gKyAgTUVNTUFQX0RFVklDRV9QQVRIICAgICAgICAgIE1l bU1hcERldlBhdGg7DQo+DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICBFbmREZXZQ YXRoOw0KPg0KPiArfSBGVl9NRU1NQVBfREVWSUNFX1BBVEg7DQo+DQo+ICsNCj4NCj4gK3N0cnVj dCBfU01NU1RPUkVfSU5TVEFOQ0Ugew0KPg0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4NCj4gKyAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9D SzJfUFJPVE9DT0wgICAgRnZiUHJvdG9jb2w7DQo+DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsNCj4NCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGFzdEJsb2NrOw0KPg0KPiArICBFRklfUEhZU0lDQUxfQURE UkVTUyAgICAgICAgICAgICAgICAgICBNbWlvQWRkcmVzczsNCj4NCj4gKyAgRlZfTUVNTUFQX0RF VklDRV9QQVRIICAgICAgICAgICAgICAgICAgRGV2aWNlUGF0aDsNCj4NCj4gK307DQo+DQo+ICsN Cj4NCj4gKy8vDQo+DQo+ICsvLyBTbW1TdG9yZUZ2YlJ1bnRpbWVEeGUuYw0KPg0KPiArLy8NCj4N Cj4gKw0KPg0KPiArRUZJX1NUQVRVUw0KPg0KPiArRUZJQVBJDQo+DQo+ICtGdmJJbml0aWFsaXpl ICgNCj4NCj4gKyAgSU4gU01NU1RPUkVfSU5TVEFOQ0UgICpJbnN0YW5jZQ0KPg0KPiArICApOw0K Pg0KPiArDQo+DQo+ICtFRklfU1RBVFVTDQo+DQo+ICtFRklBUEkNCj4NCj4gK0Z2YkdldEF0dHJp YnV0ZXMgKA0KPg0KPiArICBJTiBDT05TVCAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJP VE9DT0wgICpUaGlzLA0KPg0KPiArICBPVVQgICAgICAgRUZJX0ZWQl9BVFRSSUJVVEVTXzIgICAg ICAgICAgICAgICAgICpBdHRyaWJ1dGVzDQo+DQo+ICsgICk7DQo+DQo+ICsNCj4NCj4gK0VGSV9T VEFUVVMNCj4NCj4gK0VGSUFQSQ0KPg0KPiArRnZiU2V0QXR0cmlidXRlcyAoDQo+DQo+ICsgIElO IENPTlNUICBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLMl9QUk9UT0NPTCAgKlRoaXMsDQo+DQo+ ICsgIElOIE9VVCAgICBFRklfRlZCX0FUVFJJQlVURVNfMiAgICAgICAgICAgICAgICAgKkF0dHJp YnV0ZXMNCj4NCj4gKyAgKTsNCj4NCj4gKw0KPg0KPiArRUZJX1NUQVRVUw0KPg0KPiArRUZJQVBJ DQo+DQo+ICtGdmJHZXRQaHlzaWNhbEFkZHJlc3MgKA0KPg0KPiArICBJTiBDT05TVCAgRUZJX0ZJ Uk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgICpUaGlzLA0KPg0KPiArICBPVVQgICAgICAg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgICpBZGRyZXNzDQo+DQo+ICsgICk7 DQo+DQo+ICsNCj4NCj4gK0VGSV9TVEFUVVMNCj4NCj4gK0VGSUFQSQ0KPg0KPiArRnZiR2V0Qmxv Y2tTaXplICgNCj4NCj4gKyAgSU4gQ09OU1QgIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0syX1BS T1RPQ09MICAqVGhpcywNCj4NCj4gKyAgSU4gICAgICAgIEVGSV9MQkEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMYmEsDQo+DQo+ICsgIE9VVCAgICAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkJsb2NrU2l6ZSwNCj4NCj4gKyAgT1VUICAgICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqTnVtYmVyT2ZCbG9ja3MNCj4NCj4gKyAgKTsN Cj4NCj4gKw0KPg0KPiArRUZJX1NUQVRVUw0KPg0KPiArRUZJQVBJDQo+DQo+ICtGdmJSZWFkICgN Cj4NCj4gKyAgSU4gQ09OU1QgIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0syX1BST1RPQ09MICAq VGhpcywNCj4NCj4gKyAgSU4gICAgICAgIEVGSV9MQkEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYmEsDQo+DQo+ICsgIElOICAgICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT2Zmc2V0LA0KPg0KPiArICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpOdW1CeXRlcywNCj4NCj4gKyAgSU4gT1VUICAgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyDQo+DQo+ICsgICk7DQo+DQo+ICsNCj4N Cj4gK0VGSV9TVEFUVVMNCj4NCj4gK0VGSUFQSQ0KPg0KPiArRnZiV3JpdGUgKA0KPg0KPiArICBJ TiBDT05TVCAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgICpUaGlzLA0KPg0K PiArICBJTiAgICAgICAgRUZJX0xCQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExiYSwN Cj4NCj4gKyAgSU4gICAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP ZmZzZXQsDQo+DQo+ICsgIElOIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKk51bUJ5dGVzLA0KPg0KPiArICBJTiAgICAgICAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpCdWZmZXINCj4NCj4gKyAgKTsNCj4NCj4gKw0KPg0KPiArRUZJX1NU QVRVUw0KPg0KPiArRUZJQVBJDQo+DQo+ICtGdmJFcmFzZUJsb2NrcyAoDQo+DQo+ICsgIElOIENP TlNUICBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLMl9QUk9UT0NPTCAgKlRoaXMsDQo+DQo+ICsg IC4uLg0KPg0KPiArICApOw0KPg0KPiArDQo+DQo+ICsjZW5kaWYgLy8gU01NX1NUT1JFX0RYRV9I Xw0KPg0KPiBkaWZmIC0tZ2l0IGEvVWVmaVBheWxvYWRQa2cvU21tU3RvcmVGdmIvU21tU3RvcmVG dmJSdW50aW1lRHhlLmMgYi9VZWZpUGF5bG9hZFBrZy9TbW1TdG9yZUZ2Yi9TbW1TdG9yZUZ2YlJ1 bnRpbWVEeGUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4x NGQ0ZWMzMjRkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVWVmaVBheWxvYWRQa2cvU21tU3Rv cmVGdmIvU21tU3RvcmVGdmJSdW50aW1lRHhlLmMNCj4gQEAgLTAsMCArMSw4NDkgQEANCj4gKy8q KiBAZmlsZSAgU21tU3RvcmVGdmJSdW50aW1lRHhlLmMNCj4NCj4gKw0KPg0KPiArICBDb3B5cmln aHQgKGMpIDIwMjIsIDllbGVtZW50cyBHbWJIPEJSPg0KPg0KPiArDQo+DQo+ICsgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+DQo+ICsNCj4NCj4gKyoqLw0K Pg0KPiArDQo+DQo+ICsjaW5jbHVkZSA8UGlEeGUuaD4NCj4NCj4gKw0KPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvUGNkTGliLmg+DQo+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Ib2JMaWIuaD4NCj4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L1VlZmlMaWIuaD4NCj4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L0R4ZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4NCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPg0KPiArI2luY2x1ZGUgPExpYnJhcnkv U21tU3RvcmVMaWIuaD4NCj4NCj4gKw0KPg0KPiArI2luY2x1ZGUgPEd1aWQvVmFyaWFibGVGb3Jt YXQuaD4NCj4NCj4gKyNpbmNsdWRlIDxHdWlkL1N5c3RlbU52RGF0YUd1aWQuaD4NCj4NCj4gKyNp bmNsdWRlIDxHdWlkL052VmFyU3RvcmVGb3JtYXR0ZWQuaD4NCj4NCj4gKw0KPg0KPiArI2luY2x1 ZGUgIlNtbVN0b3JlRnZiUnVudGltZS5oIg0KPg0KPiArDQo+DQo+ICsvLy8NCj4NCj4gKy8vLyBU aGUgRmlybXdhcmUgVm9sdW1lIEJsb2NrIFByb3RvY29sIGlzIHRoZSBsb3ctbGV2ZWwgaW50ZXJm YWNlDQo+DQo+ICsvLy8gdG8gYSBmaXJtd2FyZSB2b2x1bWUuIEZpbGUtbGV2ZWwgYWNjZXNzIHRv IGEgZmlybXdhcmUgdm9sdW1lDQo+DQo+ICsvLy8gc2hvdWxkIG5vdCBiZSBkb25lIHVzaW5nIHRo ZSBGaXJtd2FyZSBWb2x1bWUgQmxvY2sgUHJvdG9jb2wuDQo+DQo+ICsvLy8gTm9ybWFsIGFjY2Vz cyB0byBhIGZpcm13YXJlIHZvbHVtZSBtdXN0IHVzZSB0aGUgRmlybXdhcmUNCj4NCj4gKy8vLyBW b2x1bWUgUHJvdG9jb2wuIFR5cGljYWxseSwgb25seSB0aGUgZmlsZSBzeXN0ZW0gZHJpdmVyIHRo YXQNCj4NCj4gKy8vLyBwcm9kdWNlcyB0aGUgRmlybXdhcmUgVm9sdW1lIFByb3RvY29sIHdpbGwg YmluZCB0byB0aGUNCj4NCj4gKy8vLyBGaXJtd2FyZSBWb2x1bWUgQmxvY2sgUHJvdG9jb2wuDQo+ DQo+ICsvLy8NCj4NCj4gKw0KPg0KPiArLyoqDQo+DQo+ICsgIEluaXRpYWxpc2VzIHRoZSBGViBI ZWFkZXIgYW5kIFZhcmlhYmxlIFN0b3JlIEhlYWRlcg0KPg0KPiArICB0byBzdXBwb3J0IHZhcmlh YmxlIG9wZXJhdGlvbnMuDQo+DQo+ICsNCj4NCj4gKyAgQHBhcmFtW2luXSAgSW5zdGFuY2UgLSBQ b2ludGVyIHRvIFNtbVN0b3JlIGluc3RhbmNlDQo+DQo+ICsNCj4NCj4gKyoqLw0KPg0KPiArRUZJ X1NUQVRVUw0KPg0KPiArSW5pdGlhbGl6ZUZ2QW5kVmFyaWFibGVTdG9yZUhlYWRlcnMgKA0KPg0K PiArICBJTiBTTU1TVE9SRV9JTlNUQU5DRSAgKkluc3RhbmNlDQo+DQo+ICsgICkNCj4NCj4gK3sN Cj4NCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4NCj4gKyAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAgICpIZWFkZXJzOw0KPg0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgSGVhZGVyc0xlbmd0aDsNCj4NCj4gKyAgRUZJX0ZJUk1XQVJFX1ZPTFVN RV9IRUFERVIgICpGaXJtd2FyZVZvbHVtZUhlYWRlcjsNCj4NCj4gKyAgVkFSSUFCTEVfU1RPUkVf SEVBREVSICAgICAgICpWYXJpYWJsZVN0b3JlSGVhZGVyOw0KPg0KPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgTnZTdG9yYWdlRnR3U3BhcmVTaXplOw0KPg0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgTnZTdG9yYWdlRnR3V29ya2luZ1NpemU7DQo+DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICBOdlN0b3JhZ2VWYXJpYWJsZVNpemU7DQo+DQo+ICsgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICBOdlN0b3JhZ2VGdHdTcGFyZUJhc2U7DQo+DQo+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZTsNCj4N Cj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE52U3RvcmFnZVZhcmlhYmxlQmFzZTsN Cj4NCj4gKw0KPg0KPiArICBIZWFkZXJzTGVuZ3RoID0gc2l6ZW9mIChFRklfRklSTVdBUkVfVk9M VU1FX0hFQURFUikgKyBzaXplb2YgKEVGSV9GVl9CTE9DS19NQVBfRU5UUlkpICsgc2l6ZW9mIChW QVJJQUJMRV9TVE9SRV9IRUFERVIpOw0KPg0KPiArICBIZWFkZXJzICAgICAgID0gQWxsb2NhdGVa ZXJvUG9vbCAoSGVhZGVyc0xlbmd0aCk7DQo+DQo+ICsNCj4NCj4gKyAgTnZTdG9yYWdlRnR3V29y a2luZ1NpemUgPSBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nU2l6ZSk7DQo+ DQo+ICsgIE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSAgID0gUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9y YWdlRnR3U3BhcmVTaXplKTsNCj4NCj4gKyAgTnZTdG9yYWdlVmFyaWFibGVTaXplICAgPSBQY2RH ZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUpOw0KPg0KPiArDQo+DQo+ICsgIE52 U3RvcmFnZUZ0d1NwYXJlQmFzZSA9IChQY2RHZXQ2NCAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFy ZUJhc2U2NCkgIT0gMCkgPw0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQY2RHZXQ2 NCAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZUJhc2U2NCkgOiBQY2RHZXQzMiAoUGNkRmxhc2hO dlN0b3JhZ2VGdHdTcGFyZUJhc2UpOw0KPg0KPiArICBOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZSA9 IChQY2RHZXQ2NCAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZTY0KSAhPSAwKSA/DQo+ DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGNkR2V0NjQgKFBjZEZsYXNoTnZTdG9y YWdlRnR3V29ya2luZ0Jhc2U2NCkgOiBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3Jr aW5nQmFzZSk7DQo+DQo+ICsgIE52U3RvcmFnZVZhcmlhYmxlQmFzZSA9IChQY2RHZXQ2NCAoUGNk Rmxhc2hOdlN0b3JhZ2VWYXJpYWJsZUJhc2U2NCkgIT0gMCkgPw0KPg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBQY2RHZXQ2NCAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZUJhc2U2NCkg OiBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZUJhc2UpOw0KPg0KPiArDQo+DQo+ ICsgIC8vIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5Gdkxlbmd0aCBpcyBkZWNsYXJlZCB0byBoYXZl IHRoZSBWYXJpYWJsZSBhcmVhIEFORCB0aGUgRlRXIHdvcmtpbmcgYXJlYSBBTkQgdGhlIEZUVyBT cGFyZSBjb250aWd1b3VzLg0KPg0KPiArICBpZiAoKE52U3RvcmFnZVZhcmlhYmxlQmFzZSArIE52 U3RvcmFnZVZhcmlhYmxlU2l6ZSkgIT0gTnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UpIHsNCj4NCj4g KyAgICBERUJVRyAoKA0KPg0KPiArICAgICAgREVCVUdfRVJST1IsDQo+DQo+ICsgICAgICAiJWE6 IE52U3RvcmFnZUZ0d1dvcmtpbmdCYXNlIGlzIG5vdCBjb250aWd1b3VzIHdpdGggTnZTdG9yYWdl VmFyaWFibGVCYXNlIHJlZ2lvblxuIiwNCj4NCj4gKyAgICAgIF9fRlVOQ1RJT05fXw0KPg0KPiAr ICAgICAgKSk7DQo+DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4NCj4g KyAgfQ0KPg0KPiArDQo+DQo+ICsgIGlmICgoTnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UgKyBOdlN0 b3JhZ2VGdHdXb3JraW5nU2l6ZSkgIT0gTnZTdG9yYWdlRnR3U3BhcmVCYXNlKSB7DQo+DQo+ICsg ICAgREVCVUcgKCgNCj4NCj4gKyAgICAgIERFQlVHX0VSUk9SLA0KPg0KPiArICAgICAgIiVhOiBO dlN0b3JhZ2VGdHdTcGFyZUJhc2UgaXMgbm90IGNvbnRpZ3VvdXMgd2l0aCBOdlN0b3JhZ2VGdHdX b3JraW5nQmFzZSByZWdpb25cbiIsDQo+DQo+ICsgICAgICBfX0ZVTkNUSU9OX18NCj4NCj4gKyAg ICAgICkpOw0KPg0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+DQo+ICsg IH0NCj4NCj4gKw0KPg0KPiArICAvLyBDaGVjayBpZiB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBpcyBh dCBsZWFzdCBvbmUgYmxvY2sgc2l6ZQ0KPg0KPiArICBpZiAoKE52U3RvcmFnZVZhcmlhYmxlU2l6 ZSA8PSAwKSB8fCAoTnZTdG9yYWdlVmFyaWFibGVTaXplIC8gSW5zdGFuY2UtPkJsb2NrU2l6ZSA8 PSAwKSkgew0KPg0KPiArICAgIERFQlVHICgoDQo+DQo+ICsgICAgICBERUJVR19FUlJPUiwNCj4N Cj4gKyAgICAgICIlYTogTnZTdG9yYWdlVmFyaWFibGVTaXplIGlzIDB4JXgsIHNob3VsZCBiZSBh dGxlYXN0IG9uZSBibG9jayBzaXplXG4iLA0KPg0KPiArICAgICAgX19GVU5DVElPTl9fLA0KPg0K PiArICAgICAgTnZTdG9yYWdlVmFyaWFibGVTaXplDQo+DQo+ICsgICAgICApKTsNCj4NCj4gKyAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPg0KPiArICB9DQo+DQo+ICsNCj4NCj4g KyAgaWYgKChOdlN0b3JhZ2VGdHdXb3JraW5nU2l6ZSA8PSAwKSB8fCAoTnZTdG9yYWdlRnR3V29y a2luZ1NpemUgLyBJbnN0YW5jZS0+QmxvY2tTaXplIDw9IDApKSB7DQo+DQo+ICsgICAgREVCVUcg KCgNCj4NCj4gKyAgICAgIERFQlVHX0VSUk9SLA0KPg0KPiArICAgICAgIiVhOiBOdlN0b3JhZ2VG dHdXb3JraW5nU2l6ZSBpcyAweCV4LCBzaG91bGQgYmUgYXRsZWFzdCBvbmUgYmxvY2sgc2l6ZVxu IiwNCj4NCj4gKyAgICAgIF9fRlVOQ1RJT05fXywNCj4NCj4gKyAgICAgIE52U3RvcmFnZUZ0d1dv cmtpbmdTaXplDQo+DQo+ICsgICAgICApKTsNCj4NCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPg0KPiArICB9DQo+DQo+ICsNCj4NCj4gKyAgaWYgKChOdlN0b3JhZ2VGdHdT cGFyZVNpemUgPD0gMCkgfHwgKE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSAvIEluc3RhbmNlLT5CbG9j a1NpemUgPD0gMCkpIHsNCj4NCj4gKyAgICBERUJVRyAoKA0KPg0KPiArICAgICAgREVCVUdfRVJS T1IsDQo+DQo+ICsgICAgICAiJWE6IE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSBpcyAweCV4LCBzaG91 bGQgYmUgYXRsZWFzdCBvbmUgYmxvY2sgc2l6ZVxuIiwNCj4NCj4gKyAgICAgIF9fRlVOQ1RJT05f XywNCj4NCj4gKyAgICAgIE52U3RvcmFnZUZ0d1NwYXJlU2l6ZQ0KPg0KPiArICAgICAgKSk7DQo+ DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4NCj4gKyAgfQ0KPg0KPiAr DQo+DQo+ICsgIC8vIEVuc3VyZSB0aGUgVmFyaWFibGUgYXJlYSBCYXNlIEFkZHJlc3NlcyBhcmUg YWxpZ25lZCBvbiBhIGJsb2NrIHNpemUgYm91bmRhcmllcw0KPg0KPiArICBpZiAoKE52U3RvcmFn ZVZhcmlhYmxlQmFzZSAlIEluc3RhbmNlLT5CbG9ja1NpemUgIT0gMCkgfHwNCj4NCj4gKyAgICAg IChOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZSAlIEluc3RhbmNlLT5CbG9ja1NpemUgIT0gMCkgfHwN Cj4NCj4gKyAgICAgIChOdlN0b3JhZ2VGdHdTcGFyZUJhc2UgJSBJbnN0YW5jZS0+QmxvY2tTaXpl ICE9IDApKQ0KPg0KPiArICB7DQo+DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBO dlN0b3JhZ2UgQmFzZSBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIGJsb2NrIHNpemUgYm91 bmRhcmllcyIsIF9fRlVOQ1RJT05fXykpOw0KPg0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiArICAvLw0KPg0KPiArICAvLyBFRklf RklSTVdBUkVfVk9MVU1FX0hFQURFUg0KPg0KPiArICAvLw0KPg0KPiArICBGaXJtd2FyZVZvbHVt ZUhlYWRlciA9IChFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAqKUhlYWRlcnM7DQo+DQo+ICsg IENvcHlHdWlkICgmRmlybXdhcmVWb2x1bWVIZWFkZXItPkZpbGVTeXN0ZW1HdWlkLCAmZ0VmaVN5 c3RlbU52RGF0YUZ2R3VpZCk7DQo+DQo+ICsgIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5Gdkxlbmd0 aCA9DQo+DQo+ICsgICAgUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVTaXplKSAr DQo+DQo+ICsgICAgUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ1NpemUpICsN Cj4NCj4gKyAgICBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUpOw0KPg0K PiArICBGaXJtd2FyZVZvbHVtZUhlYWRlci0+U2lnbmF0dXJlICA9IEVGSV9GVkhfU0lHTkFUVVJF Ow0KPg0KPiArICBGaXJtd2FyZVZvbHVtZUhlYWRlci0+QXR0cmlidXRlcyA9IChFRklfRlZCX0FU VFJJQlVURVNfMikoDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFRklfRlZCMl9SRUFEX0VOQUJMRURfQ0FQICAgfCAvLyBS ZWFkcyBtYXkgYmUgZW5hYmxlZA0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0ZWQjJfUkVBRF9TVEFUVVMgICAgICAg IHwgLy8gUmVhZHMgYXJlIGN1cnJlbnRseSBlbmFibGVkDQo+DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRlZCMl9TVElD S1lfV1JJVEUgICAgICAgfCAvLyBBIGJsb2NrIGVyYXNlIGlzIHJlcXVpcmVkIHRvIGZsaXAgYml0 cyBpbnRvIEVGSV9GVkIyX0VSQVNFX1BPTEFSSVRZDQo+DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRlZCMl9NRU1PUllf TUFQUEVEICAgICAgfCAvLyBJdCBpcyBtZW1vcnkgbWFwcGVkDQo+DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRlZCMl9F UkFTRV9QT0xBUklUWSAgICAgfCAvLyBBZnRlciBlcmFzdXJlIGFsbCBiaXRzIHRha2UgdGhpcyB2 YWx1ZSAoaS5lLiAnMScpDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRlZCMl9XUklURV9TVEFUVVMgICAgICAgfCAv LyBXcml0ZXMgYXJlIGN1cnJlbnRseSBlbmFibGVkDQo+DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRlZCMl9XUklURV9F TkFCTEVEX0NBUCAgICAvLyBXcml0ZXMgbWF5IGJlIGVuYWJsZWQNCj4NCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+DQo+ ICsgIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5IZWFkZXJMZW5ndGggICAgICAgICAgPSBzaXplb2Yg KEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSKSArIHNpemVvZiAoRUZJX0ZWX0JMT0NLX01BUF9F TlRSWSk7DQo+DQo+ICsgIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5SZXZpc2lvbiAgICAgICAgICAg ICAgPSBFRklfRlZIX1JFVklTSU9OOw0KPg0KPiArICBGaXJtd2FyZVZvbHVtZUhlYWRlci0+Qmxv Y2tNYXBbMF0uTnVtQmxvY2tzID0gSW5zdGFuY2UtPkxhc3RCbG9jayArIDE7DQo+DQo+ICsgIEZp cm13YXJlVm9sdW1lSGVhZGVyLT5CbG9ja01hcFswXS5MZW5ndGggICAgPSBJbnN0YW5jZS0+Qmxv Y2tTaXplOw0KPg0KPiArICBGaXJtd2FyZVZvbHVtZUhlYWRlci0+QmxvY2tNYXBbMV0uTnVtQmxv Y2tzID0gMDsNCj4NCj4gKyAgRmlybXdhcmVWb2x1bWVIZWFkZXItPkJsb2NrTWFwWzFdLkxlbmd0 aCAgICA9IDA7DQo+DQo+ICsgIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5DaGVja3N1bSAgICAgICAg ICAgICAgPSBDYWxjdWxhdGVDaGVja1N1bTE2ICgoVUlOVDE2ICopRmlybXdhcmVWb2x1bWVIZWFk ZXIsIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5IZWFkZXJMZW5ndGgpOw0KPg0KPiArDQo+DQo+ICsg IC8vDQo+DQo+ICsgIC8vIFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPg0KPiArICAvLw0KPg0KPiAr ICBWYXJpYWJsZVN0b3JlSGVhZGVyID0gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKSgoVUlOVE4p SGVhZGVycyArIEZpcm13YXJlVm9sdW1lSGVhZGVyLT5IZWFkZXJMZW5ndGgpOw0KPg0KPiArICBD b3B5R3VpZCAoJlZhcmlhYmxlU3RvcmVIZWFkZXItPlNpZ25hdHVyZSwgJmdFZmlWYXJpYWJsZUd1 aWQpOw0KPg0KPiArICBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaXplICAgPSBQY2RHZXQzMiAoUGNk Rmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUpIC0gRmlybXdhcmVWb2x1bWVIZWFkZXItPkhlYWRl ckxlbmd0aDsNCj4NCj4gKyAgVmFyaWFibGVTdG9yZUhlYWRlci0+Rm9ybWF0ID0gVkFSSUFCTEVf U1RPUkVfRk9STUFUVEVEOw0KPg0KPiArICBWYXJpYWJsZVN0b3JlSGVhZGVyLT5TdGF0ZSAgPSBW QVJJQUJMRV9TVE9SRV9IRUFMVEhZOw0KPg0KPiArDQo+DQo+ICsgIC8vIEluc3RhbGwgdGhlIGNv bWJpbmVkIHN1cGVyLWhlYWRlciBpbiB0aGUgTm9yRmxhc2gNCj4NCj4gKyAgU3RhdHVzID0gRnZi V3JpdGUgKCZJbnN0YW5jZS0+RnZiUHJvdG9jb2wsIDAsIDAsICZIZWFkZXJzTGVuZ3RoLCBIZWFk ZXJzKTsNCj4NCj4gKw0KPg0KPiArICBGcmVlUG9vbCAoSGVhZGVycyk7DQo+DQo+ICsgIHJldHVy biBTdGF0dXM7DQo+DQo+ICt9DQo+DQo+ICsNCj4NCj4gKy8qKg0KPg0KPiArICBDaGVjayB0aGUg aW50ZWdyaXR5IG9mIGZpcm13YXJlIHZvbHVtZSBoZWFkZXIuDQo+DQo+ICsNCj4NCj4gKyAgQHJl dHZhbCAgRUZJX1NVQ0NFU1MgICAtIFRoZSBmaXJtd2FyZSB2b2x1bWUgaXMgY29uc2lzdGVudA0K Pg0KPiArICBAcmV0dmFsICBFRklfTk9UX0ZPVU5EIC0gVGhlIGZpcm13YXJlIHZvbHVtZSBoYXMg YmVlbiBjb3JydXB0ZWQuDQo+DQo+ICsNCj4NCj4gKyoqLw0KPg0KPiArRUZJX1NUQVRVUw0KPg0K PiArVmFsaWRhdGVGdkhlYWRlciAoDQo+DQo+ICsgIFZPSUQNCj4NCj4gKyAgKQ0KPg0KPiArew0K Pg0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tzdW07DQo+DQo+ICsgIEVG SV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICAqRndWb2xIZWFkZXI7DQo+DQo+ICsgIFZBUklBQkxF X1NUT1JFX0hFQURFUiAgICAgICAqVmFyaWFibGVTdG9yZUhlYWRlcjsNCj4NCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlU3RvcmVMZW5ndGg7DQo+DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICBGdkxlbmd0aDsNCj4NCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgIFRlbXBTdGF0dXM7DQo+DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICBCdWZmZXJTaXplOw0KPg0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgQnVm ZmVyU2l6ZVJlcWVzdGVkOw0KPg0KPiArDQo+DQo+ICsgIEJ1ZmZlclNpemVSZXFlc3RlZCA9IHNp emVvZiAoRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIpOw0KPg0KPiArICBGd1ZvbEhlYWRlciAg ICAgICAgPSAoRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIgKilBbGxvY2F0ZVBvb2wgKEJ1ZmZl clNpemVSZXFlc3RlZCk7DQo+DQo+ICsgIGlmICghRndWb2xIZWFkZXIpIHsNCj4NCj4gKyAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiArICBC dWZmZXJTaXplID0gQnVmZmVyU2l6ZVJlcWVzdGVkOw0KPg0KPiArICBUZW1wU3RhdHVzID0gU21t U3RvcmVMaWJSZWFkICgwLCAwLCAmQnVmZmVyU2l6ZSwgKFVJTlQ4ICopRndWb2xIZWFkZXIpOw0K Pg0KPiArICBpZiAoRUZJX0VSUk9SIChUZW1wU3RhdHVzKSB8fCAoQnVmZmVyU2l6ZVJlcWVzdGVk ICE9IEJ1ZmZlclNpemUpKSB7DQo+DQo+ICsgICAgRnJlZVBvb2wgKEZ3Vm9sSGVhZGVyKTsNCj4N Cj4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ ICsgIEZ2TGVuZ3RoID0gUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVTaXplKSAr IFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplKSArDQo+DQo+ICsgICAg ICAgICAgICAgUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVTaXplKTsNCj4NCj4g Kw0KPg0KPiArICAvLw0KPg0KPiArICAvLyBWZXJpZnkgdGhlIGhlYWRlciByZXZpc2lvbiwgaGVh ZGVyIHNpZ25hdHVyZSwgbGVuZ3RoDQo+DQo+ICsgIC8vIExlbmd0aCBvZiBGdkJsb2NrIGNhbm5v dCBiZSAyKio2NC0xDQo+DQo+ICsgIC8vIEhlYWRlckxlbmd0aCBjYW5ub3QgYmUgYW4gb2RkIG51 bWJlcg0KPg0KPiArICAvLw0KPg0KPiArICBpZiAoICAoRndWb2xIZWFkZXItPlJldmlzaW9uICAh PSBFRklfRlZIX1JFVklTSU9OKQ0KPg0KPiArICAgICB8fCAoRndWb2xIZWFkZXItPlNpZ25hdHVy ZSAhPSBFRklfRlZIX1NJR05BVFVSRSkNCj4NCj4gKyAgICAgfHwgKEZ3Vm9sSGVhZGVyLT5Gdkxl bmd0aCAgIT0gRnZMZW5ndGgpDQo+DQo+ICsgICAgICAgICkNCj4NCj4gKyAgew0KPg0KPiArICAg IERFQlVHICgoDQo+DQo+ICsgICAgICBERUJVR19JTkZPLA0KPg0KPiArICAgICAgIiVhOiBObyBG aXJtd2FyZSBWb2x1bWUgaGVhZGVyIHByZXNlbnRcbiIsDQo+DQo+ICsgICAgICBfX0ZVTkNUSU9O X18NCj4NCj4gKyAgICAgICkpOw0KPg0KPiArICAgIEZyZWVQb29sIChGd1ZvbEhlYWRlcik7DQo+ DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiAr ICAvLyBDaGVjayB0aGUgRmlybXdhcmUgVm9sdW1lIEd1aWQNCj4NCj4gKyAgaWYgKCBDb21wYXJl R3VpZCAoJkZ3Vm9sSGVhZGVyLT5GaWxlU3lzdGVtR3VpZCwgJmdFZmlTeXN0ZW1OdkRhdGFGdkd1 aWQpID09IEZBTFNFICkgew0KPg0KPiArICAgIERFQlVHICgoDQo+DQo+ICsgICAgICBERUJVR19J TkZPLA0KPg0KPiArICAgICAgIiVhOiBGaXJtd2FyZSBWb2x1bWUgR3VpZCBub24tY29tcGF0aWJs ZVxuIiwNCj4NCj4gKyAgICAgIF9fRlVOQ1RJT05fXw0KPg0KPiArICAgICAgKSk7DQo+DQo+ICsg ICAgRnJlZVBvb2wgKEZ3Vm9sSGVhZGVyKTsNCj4NCj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VO RDsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIEJ1ZmZlclNpemVSZXFlc3RlZCA9IEZ3Vm9s SGVhZGVyLT5IZWFkZXJMZW5ndGg7DQo+DQo+ICsgIEZyZWVQb29sIChGd1ZvbEhlYWRlcik7DQo+ DQo+ICsgIEZ3Vm9sSGVhZGVyID0gKEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICopQWxsb2Nh dGVQb29sIChCdWZmZXJTaXplUmVxZXN0ZWQpOw0KPg0KPiArICBpZiAoIUZ3Vm9sSGVhZGVyKSB7 DQo+DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPg0KPiArICB9DQo+DQo+ ICsNCj4NCj4gKyAgQnVmZmVyU2l6ZSA9IEJ1ZmZlclNpemVSZXFlc3RlZDsNCj4NCj4gKyAgVGVt cFN0YXR1cyA9IFNtbVN0b3JlTGliUmVhZCAoMCwgMCwgJkJ1ZmZlclNpemUsIChVSU5UOCAqKUZ3 Vm9sSGVhZGVyKTsNCj4NCj4gKyAgaWYgKEVGSV9FUlJPUiAoVGVtcFN0YXR1cykgfHwgKEJ1ZmZl clNpemVSZXFlc3RlZCAhPSBCdWZmZXJTaXplKSkgew0KPg0KPiArICAgIEZyZWVQb29sIChGd1Zv bEhlYWRlcik7DQo+DQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+DQo+ICsgIH0N Cj4NCj4gKw0KPg0KPiArICAvLyBWZXJpZnkgdGhlIGhlYWRlciBjaGVja3N1bQ0KPg0KPiArICBD aGVja3N1bSA9IENhbGN1bGF0ZVN1bTE2ICgoVUlOVDE2ICopRndWb2xIZWFkZXIsIEZ3Vm9sSGVh ZGVyLT5IZWFkZXJMZW5ndGgpOw0KPg0KPiArICBpZiAoQ2hlY2tzdW0gIT0gMCkgew0KPg0KPiAr ICAgIERFQlVHICgoDQo+DQo+ICsgICAgICBERUJVR19JTkZPLA0KPg0KPiArICAgICAgIiVhOiBG ViBjaGVja3N1bSBpcyBpbnZhbGlkIChDaGVja3N1bToweCVYKVxuIiwNCj4NCj4gKyAgICAgIF9f RlVOQ1RJT05fXywNCj4NCj4gKyAgICAgIENoZWNrc3VtDQo+DQo+ICsgICAgICApKTsNCj4NCj4g KyAgICBGcmVlUG9vbCAoRndWb2xIZWFkZXIpOw0KPg0KPiArICAgIHJldHVybiBFRklfTk9UX0ZP VU5EOw0KPg0KPiArICB9DQo+DQo+ICsNCj4NCj4gKyAgQnVmZmVyU2l6ZVJlcWVzdGVkICA9IHNp emVvZiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKTsNCj4NCj4gKyAgVmFyaWFibGVTdG9yZUhlYWRl ciA9IChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKilBbGxvY2F0ZVBvb2wgKEJ1ZmZlclNpemVSZXFl c3RlZCk7DQo+DQo+ICsgIGlmICghVmFyaWFibGVTdG9yZUhlYWRlcikgew0KPg0KPiArICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIEJ1 ZmZlclNpemUgPSBCdWZmZXJTaXplUmVxZXN0ZWQ7DQo+DQo+ICsgIFRlbXBTdGF0dXMgPSBTbW1T dG9yZUxpYlJlYWQgKDAsIEZ3Vm9sSGVhZGVyLT5IZWFkZXJMZW5ndGgsICZCdWZmZXJTaXplLCAo VUlOVDggKilWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCj4NCj4gKyAgaWYgKEVGSV9FUlJPUiAoVGVt cFN0YXR1cykgfHwgKEJ1ZmZlclNpemVSZXFlc3RlZCAhPSBCdWZmZXJTaXplKSkgew0KPg0KPiAr ICAgIEZyZWVQb29sIChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCj4NCj4gKyAgICBGcmVlUG9vbCAo RndWb2xIZWFkZXIpOw0KPg0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPg0KPiAr ICB9DQo+DQo+ICsNCj4NCj4gKyAgLy8gQ2hlY2sgdGhlIFZhcmlhYmxlIFN0b3JlIEd1aWQNCj4N Cj4gKyAgaWYgKCFDb21wYXJlR3VpZCAoJlZhcmlhYmxlU3RvcmVIZWFkZXItPlNpZ25hdHVyZSwg JmdFZmlWYXJpYWJsZUd1aWQpICYmDQo+DQo+ICsgICAgICAhQ29tcGFyZUd1aWQgKCZWYXJpYWJs ZVN0b3JlSGVhZGVyLT5TaWduYXR1cmUsICZnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZCkp DQo+DQo+ICsgIHsNCj4NCj4gKyAgICBERUJVRyAoKA0KPg0KPiArICAgICAgREVCVUdfSU5GTywN Cj4NCj4gKyAgICAgICIlYTogVmFyaWFibGUgU3RvcmUgR3VpZCBub24tY29tcGF0aWJsZVxuIiwN Cj4NCj4gKyAgICAgIF9fRlVOQ1RJT05fXw0KPg0KPiArICAgICAgKSk7DQo+DQo+ICsgICAgRnJl ZVBvb2wgKEZ3Vm9sSGVhZGVyKTsNCj4NCj4gKyAgICBGcmVlUG9vbCAoVmFyaWFibGVTdG9yZUhl YWRlcik7DQo+DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+DQo+ICsgIH0NCj4NCj4g Kw0KPg0KPiArICBWYXJpYWJsZVN0b3JlTGVuZ3RoID0gUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9y YWdlVmFyaWFibGVTaXplKSAtIEZ3Vm9sSGVhZGVyLT5IZWFkZXJMZW5ndGg7DQo+DQo+ICsgIGlm IChWYXJpYWJsZVN0b3JlSGVhZGVyLT5TaXplICE9IFZhcmlhYmxlU3RvcmVMZW5ndGgpIHsNCj4N Cj4gKyAgICBERUJVRyAoKA0KPg0KPiArICAgICAgREVCVUdfSU5GTywNCj4NCj4gKyAgICAgICIl YTogVmFyaWFibGUgU3RvcmUgTGVuZ3RoIGRvZXMgbm90IG1hdGNoXG4iLA0KPg0KPiArICAgICAg X19GVU5DVElPTl9fDQo+DQo+ICsgICAgICApKTsNCj4NCj4gKyAgICBGcmVlUG9vbCAoRndWb2xI ZWFkZXIpOw0KPg0KPiArICAgIEZyZWVQb29sIChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCj4NCj4g KyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIEZy ZWVQb29sIChGd1ZvbEhlYWRlcik7DQo+DQo+ICsgIEZyZWVQb29sIChWYXJpYWJsZVN0b3JlSGVh ZGVyKTsNCj4NCj4gKw0KPg0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+DQo+ICt9DQo+DQo+ ICsNCj4NCj4gKy8qKg0KPg0KPiArIFRoZSBHZXRBdHRyaWJ1dGVzKCkgZnVuY3Rpb24gcmV0cmll dmVzIHRoZSBhdHRyaWJ1dGVzIGFuZA0KPg0KPiArIGN1cnJlbnQgc2V0dGluZ3Mgb2YgdGhlIGJs b2NrLg0KPg0KPiArDQo+DQo+ICsgQHBhcmFtIFRoaXMgICAgICAgICBJbmRpY2F0ZXMgdGhlIEVG SV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0syX1BST1RPQ09MIGluc3RhbmNlLg0KPg0KPiArDQo+DQo+ ICsgQHBhcmFtIEF0dHJpYnV0ZXMgICBQb2ludGVyIHRvIEVGSV9GVkJfQVRUUklCVVRFU18yIGlu IHdoaWNoIHRoZSBhdHRyaWJ1dGVzIGFuZA0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgY3Vy cmVudCBzZXR0aW5ncyBhcmUgcmV0dXJuZWQuDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICBU eXBlIEVGSV9GVkJfQVRUUklCVVRFU18yIGlzIGRlZmluZWQgaW4gRUZJX0ZJUk1XQVJFX1ZPTFVN RV9IRUFERVIuDQo+DQo+ICsNCj4NCj4gKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFRoZSBmaXJtd2Fy ZSB2b2x1bWUgYXR0cmlidXRlcyB3ZXJlIHJldHVybmVkLg0KPg0KPiArDQo+DQo+ICsgKiovDQo+ DQo+ICtFRklfU1RBVFVTDQo+DQo+ICtFRklBUEkNCj4NCj4gK0Z2YkdldEF0dHJpYnV0ZXMgKA0K Pg0KPiArICBJTiBDT05TVCAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgICpU aGlzLA0KPg0KPiArICBPVVQgICAgICAgRUZJX0ZWQl9BVFRSSUJVVEVTXzIgICAgICAgICAgICAg ICAgICpBdHRyaWJ1dGVzDQo+DQo+ICsgICkNCj4NCj4gK3sNCj4NCj4gKyAgRUZJX0ZWQl9BVFRS SUJVVEVTXzIgIEZsYXNoRnZiQXR0cmlidXRlczsNCj4NCj4gKw0KPg0KPiArICBGbGFzaEZ2YkF0 dHJpYnV0ZXMgPSAoRUZJX0ZWQl9BVFRSSUJVVEVTXzIpKA0KPg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GVkIyX1JFQURfU1RBVFVTICAgICAg fCAvLyBSZWFkcyBhcmUgY3VycmVudGx5IGVuYWJsZWQNCj4NCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRlZCMl9XUklURV9TVEFUVVMgICAgIHwg Ly8gV3JpdGVzIGFyZSBlbmFibGVkDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX0ZWQjJfU1RJQ0tZX1dSSVRFICAgICB8IC8vIEEgYmxvY2sg ZXJhc2UgaXMgcmVxdWlyZWQgdG8gZmxpcCBiaXRzIGludG8gRUZJX0ZWQjJfRVJBU0VfUE9MQVJJ VFkNCj4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF RklfRlZCMl9NRU1PUllfTUFQUEVEICAgIHwgLy8gSXQgaXMgbWVtb3J5IG1hcHBlZA0KPg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GVkIyX0VS QVNFX1BPTEFSSVRZICAgICAvLyBBZnRlciBlcmFzdXJlIGFsbCBiaXRzIHRha2UgdGhpcyB2YWx1 ZSAoaS5lLiAnMScpDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4NCj4gKw0KPg0KPiArICAqQXR0cmlidXRlcyA9IEZsYXNoRnZiQXR0cmli dXRlczsNCj4NCj4gKw0KPg0KPiArICBERUJVRyAoKERFQlVHX0JMS0lPLCAiRnZiR2V0QXR0cmli dXRlcygweCVYKVxuIiwgKkF0dHJpYnV0ZXMpKTsNCj4NCj4gKw0KPg0KPiArICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+DQo+ICt9DQo+DQo+ICsNCj4NCj4gKy8qKg0KPg0KPiArIFRoZSBTZXRBdHRy aWJ1dGVzKCkgZnVuY3Rpb24gc2V0cyBjb25maWd1cmFibGUgZmlybXdhcmUgdm9sdW1lIGF0dHJp YnV0ZXMNCj4NCj4gKyBhbmQgcmV0dXJucyB0aGUgbmV3IHNldHRpbmdzIG9mIHRoZSBmaXJtd2Fy ZSB2b2x1bWUuDQo+DQo+ICsNCj4NCj4gKw0KPg0KPiArIEBwYXJhbSBUaGlzICAgICAgICAgICAg ICAgICAgICAgSW5kaWNhdGVzIHRoZSBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLMl9QUk9UT0NP TCBpbnN0YW5jZS4NCj4NCj4gKw0KPg0KPiArIEBwYXJhbSBBdHRyaWJ1dGVzICAgICAgICAgICAg ICAgT24gaW5wdXQsIEF0dHJpYnV0ZXMgaXMgYSBwb2ludGVyIHRvIEVGSV9GVkJfQVRUUklCVVRF U18yDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW5z IHRoZSBkZXNpcmVkIGZpcm13YXJlIHZvbHVtZSBzZXR0aW5ncy4NCj4NCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCBpdCBjb250YWlucyB0 aGUgbmV3IHNldHRpbmdzIG9mDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGUgZmlybXdhcmUgdm9sdW1lLg0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVHlwZSBFRklfRlZCX0FUVFJJQlVURVNfMiBpcyBkZWZpbmVkIGluIEVGSV9GSVJNV0FS RV9WT0xVTUVfSEVBREVSLg0KPg0KPiArDQo+DQo+ICsgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgICBUaGUgZmlybXdhcmUgdm9sdW1lIGF0dHJpYnV0ZXMgd2VyZSByZXR1cm5lZC4NCj4N Cj4gKw0KPg0KPiArIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgVGhlIGF0dHJpYnV0 ZXMgcmVxdWVzdGVkIGFyZSBpbiBjb25mbGljdCB3aXRoIHRoZSBjYXBhYmlsaXRpZXMNCj4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGRlY2xhcmVkIGluIHRoZSBmaXJt d2FyZSB2b2x1bWUgaGVhZGVyLg0KPg0KPiArDQo+DQo+ICsgKiovDQo+DQo+ICtFRklfU1RBVFVT DQo+DQo+ICtFRklBUEkNCj4NCj4gK0Z2YlNldEF0dHJpYnV0ZXMgKA0KPg0KPiArICBJTiBDT05T VCAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgICpUaGlzLA0KPg0KPiArICBJ TiBPVVQgICAgRUZJX0ZWQl9BVFRSSUJVVEVTXzIgICAgICAgICAgICAgICAgICpBdHRyaWJ1dGVz DQo+DQo+ICsgICkNCj4NCj4gK3sNCj4NCj4gKyAgREVCVUcgKChERUJVR19FUlJPUiwgIkZ2YlNl dEF0dHJpYnV0ZXMoMHglWCkgaXMgbm90IHN1cHBvcnRlZFxuIiwgKkF0dHJpYnV0ZXMpKTsNCj4N Cj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4NCj4gK30NCj4NCj4gKw0KPg0KPiArLyoq DQo+DQo+ICsgVGhlIEdldFBoeXNpY2FsQWRkcmVzcygpIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUg YmFzZSBhZGRyZXNzIG9mDQo+DQo+ICsgYSBtZW1vcnktbWFwcGVkIGZpcm13YXJlIHZvbHVtZS4g VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkDQo+DQo+ICsgb25seSBmb3IgbWVtb3J5LW1h cHBlZCBmaXJtd2FyZSB2b2x1bWVzLg0KPg0KPiArDQo+DQo+ICsgQHBhcmFtIFRoaXMgICAgICAg ICAgICAgICBJbmRpY2F0ZXMgdGhlIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0syX1BST1RPQ09M IGluc3RhbmNlLg0KPg0KPiArDQo+DQo+ICsgQHBhcmFtIEFkZHJlc3MgICAgICAgICAgICBQb2lu dGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRlZA0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgdGhhdCwgb24gc3VjY2Vzc2Z1bA0KPg0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb20gR2V0UGh5c2ljYWxBZGRyZXNzKCksIGNv bnRhaW5zIHRoZQ0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSBhZGRyZXNz IG9mIHRoZSBmaXJtd2FyZSB2b2x1bWUuDQo+DQo+ICsNCj4NCj4gKyBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgIFRoZSBmaXJtd2FyZSB2b2x1bWUgYmFzZSBhZGRyZXNzIHdhcyByZXR1cm5lZC4N Cj4NCj4gKw0KPg0KPiArIEByZXR2YWwgRUZJX05PVF9TVVBQT1JURUQgVGhlIGZpcm13YXJlIHZv bHVtZSBpcyBub3QgbWVtb3J5IG1hcHBlZC4NCj4NCj4gKw0KPg0KPiArICoqLw0KPg0KPiArRUZJ X1NUQVRVUw0KPg0KPiArRUZJQVBJDQo+DQo+ICtGdmJHZXRQaHlzaWNhbEFkZHJlc3MgKA0KPg0K PiArICBJTiBDT05TVCAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgICpUaGlz LA0KPg0KPiArICBPVVQgICAgICAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAg ICpBZGRyZXNzDQo+DQo+ICsgICkNCj4NCj4gK3sNCj4NCj4gKyAgU01NU1RPUkVfSU5TVEFOQ0Ug ICpJbnN0YW5jZTsNCj4NCj4gKw0KPg0KPiArICBJbnN0YW5jZSA9IElOU1RBTkNFX0ZST01fRlZC X1RISVMgKFRoaXMpOw0KPg0KPiArDQo+DQo+ICsgIEFTU0VSVCAoQWRkcmVzcyAhPSBOVUxMKTsN Cj4NCj4gKyAgKkFkZHJlc3MgPSBJbnN0YW5jZS0+TW1pb0FkZHJlc3M7DQo+DQo+ICsNCj4NCj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPg0KPiArfQ0KPg0KPiArDQo+DQo+ICsvKioNCj4NCj4g KyBUaGUgR2V0QmxvY2tTaXplKCkgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzaXplIG9mIHRoZSBy ZXF1ZXN0ZWQNCj4NCj4gKyBibG9jay4gSXQgYWxzbyByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRk aXRpb25hbCBibG9ja3Mgd2l0aA0KPg0KPiArIHRoZSBpZGVudGljYWwgc2l6ZS4gVGhlIEdldEJs b2NrU2l6ZSgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8NCj4NCj4gKyByZXRyaWV2ZSB0aGUgYmxvY2sg bWFwIChzZWUgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIpLg0KPg0KPiArDQo+DQo+ICsNCj4N Cj4gKyBAcGFyYW0gVGhpcyAgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGUgRUZJX0ZJ Uk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgaW5zdGFuY2UuDQo+DQo+ICsNCj4NCj4gKyBA cGFyYW0gTGJhICAgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGUgYmxvY2sgZm9yIHdo aWNoIHRvIHJldHVybiB0aGUgc2l6ZS4NCj4NCj4gKw0KPg0KPiArIEBwYXJhbSBCbG9ja1NpemUg ICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIGNhbGxlci1hbGxvY2F0ZWQgVUlOVE4gaW4gd2hp Y2gNCj4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaXplIG9mIHRo ZSBibG9jayBpcyByZXR1cm5lZC4NCj4NCj4gKw0KPg0KPiArIEBwYXJhbSBOdW1iZXJPZkJsb2Nr cyAgICAgICAgICAgUG9pbnRlciB0byBhIGNhbGxlci1hbGxvY2F0ZWQgVUlOVE4gaW4NCj4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSBudW1iZXIgb2YgY29u c2VjdXRpdmUgYmxvY2tzLA0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhcnRpbmcgd2l0aCBMYmEsIGlzIHJldHVybmVkLiBBbGwNCj4NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJsb2NrcyBpbiB0aGlzIHJhbmdlIGhhdmUgYSBzaXplIG9mDQo+ DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemUuDQo+DQo+ICsN Cj4NCj4gKw0KPg0KPiArIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIGZpcm13 YXJlIHZvbHVtZSBiYXNlIGFkZHJlc3Mgd2FzIHJldHVybmVkLg0KPg0KPiArDQo+DQo+ICsgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBUaGUgcmVxdWVzdGVkIExCQSBpcyBvdXQgb2Yg cmFuZ2UuDQo+DQo+ICsNCj4NCj4gKyAqKi8NCj4NCj4gK0VGSV9TVEFUVVMNCj4NCj4gK0VGSUFQ SQ0KPg0KPiArRnZiR2V0QmxvY2tTaXplICgNCj4NCj4gKyAgSU4gQ09OU1QgIEVGSV9GSVJNV0FS RV9WT0xVTUVfQkxPQ0syX1BST1RPQ09MICAqVGhpcywNCj4NCj4gKyAgSU4gICAgICAgIEVGSV9M QkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYmEsDQo+DQo+ICsgIE9VVCAgICAgICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJsb2NrU2l6ZSwNCj4NCj4gKyAg T1VUICAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqTnVtYmVyT2ZC bG9ja3MNCj4NCj4gKyAgKQ0KPg0KPiArew0KPg0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3Rh dHVzOw0KPg0KPiArICBTTU1TVE9SRV9JTlNUQU5DRSAgKkluc3RhbmNlOw0KPg0KPiArDQo+DQo+ ICsgIEluc3RhbmNlID0gSU5TVEFOQ0VfRlJPTV9GVkJfVEhJUyAoVGhpcyk7DQo+DQo+ICsNCj4N Cj4gKyAgREVCVUcgKChERUJVR19CTEtJTywgIkZ2YkdldEJsb2NrU2l6ZShMYmE9JWxkLCBCbG9j a1NpemU9MHgleCwgTGFzdEJsb2NrPSVsZClcbiIsIExiYSwgSW5zdGFuY2UtPkJsb2NrU2l6ZSwg SW5zdGFuY2UtPkxhc3RCbG9jaykpOw0KPg0KPiArDQo+DQo+ICsgIGlmIChMYmEgPiBJbnN0YW5j ZS0+TGFzdEJsb2NrKSB7DQo+DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZ2YkdldEJs b2NrU2l6ZTogRVJST1IgLSBQYXJhbWV0ZXIgTEJBICVsZCBpcyBiZXlvbmQgdGhlIGxhc3QgTGJh ICglbGQpLlxuIiwgTGJhLCBJbnN0YW5jZS0+TGFzdEJsb2NrKSk7DQo+DQo+ICsgICAgU3RhdHVz ID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPg0KPiArICB9IGVsc2Ugew0KPg0KPiArICAgICpC bG9ja1NpemUgICAgICA9IChVSU5UTilJbnN0YW5jZS0+QmxvY2tTaXplOw0KPg0KPiArICAgICpO dW1iZXJPZkJsb2NrcyA9IChVSU5UTikoSW5zdGFuY2UtPkxhc3RCbG9jayAtIExiYSArIDEpOw0K Pg0KPiArDQo+DQo+ICsgICAgREVCVUcgKChERUJVR19CTEtJTywgIkZ2YkdldEJsb2NrU2l6ZTog KkJsb2NrU2l6ZT0weCV4LCAqTnVtYmVyT2ZCbG9ja3M9MHgleC5cbiIsICpCbG9ja1NpemUsICpO dW1iZXJPZkJsb2NrcykpOw0KPg0KPiArDQo+DQo+ICsgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7 DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiArICByZXR1cm4gU3RhdHVzOw0KPg0KPiArfQ0KPg0K PiArDQo+DQo+ICsvKioNCj4NCj4gKyBSZWFkcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRl cyBpbnRvIGEgYnVmZmVyIGZyb20gdGhlIHNwZWNpZmllZCBibG9jay4NCj4NCj4gKw0KPg0KPiAr IFRoZSBSZWFkKCkgZnVuY3Rpb24gcmVhZHMgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMg ZnJvbSB0aGUNCj4NCj4gKyByZXF1ZXN0ZWQgYmxvY2sgYW5kIHN0b3JlcyB0aGVtIGluIHRoZSBw cm92aWRlZCBidWZmZXIuDQo+DQo+ICsgSW1wbGVtZW50YXRpb25zIHNob3VsZCBiZSBtaW5kZnVs IHRoYXQgdGhlIGZpcm13YXJlIHZvbHVtZQ0KPg0KPiArIG1pZ2h0IGJlIGluIHRoZSBSZWFkRGlz YWJsZWQgc3RhdGUuIElmIGl0IGlzIGluIHRoaXMgc3RhdGUsDQo+DQo+ICsgdGhlIFJlYWQoKSBm dW5jdGlvbiBtdXN0IHJldHVybiB0aGUgc3RhdHVzIGNvZGUNCj4NCj4gKyBFRklfQUNDRVNTX0RF TklFRCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29udGVudHMgb2YgdGhlDQo+DQo+ICsgYnVmZmVy LiBUaGUgUmVhZCgpIGZ1bmN0aW9uIG11c3QgYWxzbyBwcmV2ZW50IHNwYW5uaW5nIGJsb2NrDQo+ DQo+ICsgYm91bmRhcmllcy4gSWYgYSByZWFkIGlzIHJlcXVlc3RlZCB0aGF0IHdvdWxkIHNwYW4g YSBibG9jaw0KPg0KPiArIGJvdW5kYXJ5LCB0aGUgcmVhZCBtdXN0IHJlYWQgdXAgdG8gdGhlIGJv dW5kYXJ5IGJ1dCBub3QNCj4NCj4gKyBiZXlvbmQuIFRoZSBvdXRwdXQgcGFyYW1ldGVyIE51bUJ5 dGVzIG11c3QgYmUgc2V0IHRvIGNvcnJlY3RseQ0KPg0KPiArIGluZGljYXRlIHRoZSBudW1iZXIg b2YgYnl0ZXMgYWN0dWFsbHkgcmVhZC4gVGhlIGNhbGxlciBtdXN0IGJlDQo+DQo+ICsgYXdhcmUg dGhhdCBhIHJlYWQgbWF5IGJlIHBhcnRpYWxseSBjb21wbGV0ZWQuDQo+DQo+ICsNCj4NCj4gKyBA cGFyYW0gVGhpcyAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoZSBFRklfRklSTVdBUkVfVk9M VU1FX0JMT0NLMl9QUk9UT0NPTCBpbnN0YW5jZS4NCj4NCj4gKw0KPg0KPiArIEBwYXJhbSBMYmEg ICAgICAgICAgICAgICAgICBUaGUgc3RhcnRpbmcgbG9naWNhbCBibG9jayBpbmRleCBmcm9tIHdo aWNoIHRvIHJlYWQuDQo+DQo+ICsNCj4NCj4gKyBAcGFyYW0gT2Zmc2V0ICAgICAgICAgICAgICAg T2Zmc2V0IGludG8gdGhlIGJsb2NrIGF0IHdoaWNoIHRvIGJlZ2luIHJlYWRpbmcuDQo+DQo+ICsN Cj4NCj4gKyBAcGFyYW0gTnVtQnl0ZXMgICAgICAgICAgICAgUG9pbnRlciB0byBhIFVJTlROLg0K Pg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdCBlbnRyeSwgKk51bUJ5dGVzIGNv bnRhaW5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBidWZmZXIuDQo+DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEF0IGV4aXQsICpOdW1CeXRlcyBjb250YWlucyB0aGUgdG90YWwgbnVt YmVyIG9mIGJ5dGVzIHJlYWQuDQo+DQo+ICsNCj4NCj4gKyBAcGFyYW0gQnVmZmVyICAgICAgICAg ICAgICAgUG9pbnRlciB0byBhIGNhbGxlci1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQgd2lsbCBiZSB1 c2VkDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGhvbGQgdGhlIGRhdGEg dGhhdCBpcyByZWFkLg0KPg0KPiArDQo+DQo+ICsgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg IFRoZSBmaXJtd2FyZSB2b2x1bWUgd2FzIHJlYWQgc3VjY2Vzc2Z1bGx5LCAgYW5kIGNvbnRlbnRz IGFyZQ0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBCdWZmZXIuDQo+DQo+ ICsNCj4NCj4gKyBAcmV0dmFsIEVGSV9CQURfQlVGRkVSX1NJWkUgUmVhZCBhdHRlbXB0ZWQgYWNy b3NzIGFuIExCQSBib3VuZGFyeS4NCj4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T24gb3V0cHV0LCBOdW1CeXRlcyBjb250YWlucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzDQo+ DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGluIEJ1ZmZlci4NCj4N Cj4gKw0KPg0KPiArIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICBUaGUgZmlybXdhcmUgdm9s dW1lIGlzIGluIHRoZSBSZWFkRGlzYWJsZWQgc3RhdGUuDQo+DQo+ICsNCj4NCj4gKyBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgVGhlIGJsb2NrIGRldmljZSBpcyBub3QgZnVuY3Rpb25pbmcg Y29ycmVjdGx5IGFuZCBjb3VsZCBub3QgYmUgcmVhZC4NCj4NCj4gKw0KPg0KPiArICoqLw0KPg0K PiArRUZJX1NUQVRVUw0KPg0KPiArRUZJQVBJDQo+DQo+ICtGdmJSZWFkICgNCj4NCj4gKyAgSU4g Q09OU1QgIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0syX1BST1RPQ09MICAqVGhpcywNCj4NCj4g KyAgSU4gICAgICAgIEVGSV9MQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYmEsDQo+ DQo+ICsgIElOICAgICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zm c2V0LA0KPg0KPiArICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpOdW1CeXRlcywNCj4NCj4gKyAgSU4gT1VUICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqQnVmZmVyDQo+DQo+ICsgICkNCj4NCj4gK3sNCj4NCj4gKyAgVUlOVE4g ICAgICAgICAgICAgIEJsb2NrU2l6ZTsNCj4NCj4gKyAgU01NU1RPUkVfSU5TVEFOQ0UgICpJbnN0 YW5jZTsNCj4NCj4gKw0KPg0KPiArICBJbnN0YW5jZSA9IElOU1RBTkNFX0ZST01fRlZCX1RISVMg KFRoaXMpOw0KPg0KPiArDQo+DQo+ICsgIERFQlVHICgoREVCVUdfQkxLSU8sICJGdmJSZWFkKFBh cmFtZXRlcnM6IExiYT0lbGQsIE9mZnNldD0weCV4LCAqTnVtQnl0ZXM9MHgleCwgQnVmZmVyIEAg MHglMDh4KVxuIiwgTGJhLCBPZmZzZXQsICpOdW1CeXRlcywgQnVmZmVyKSk7DQo+DQo+ICsNCj4N Cj4gKyAgLy8gQ2FjaGUgdGhlIGJsb2NrIHNpemUgdG8gYXZvaWQgZGUtcmVmZXJlbmNpbmcgcG9p bnRlcnMgYWxsIHRoZSB0aW1lDQo+DQo+ICsgIEJsb2NrU2l6ZSA9IEluc3RhbmNlLT5CbG9ja1Np emU7DQo+DQo+ICsNCj4NCj4gKyAgLy8gVGhlIHJlYWQgbXVzdCBub3Qgc3BhbiBibG9jayBib3Vu ZGFyaWVzLg0KPg0KPiArICAvLyBXZSBuZWVkIHRvIGNoZWNrIGVhY2ggdmFyaWFibGUgaW5kaXZp ZHVhbGx5IGJlY2F1c2UgYWRkaW5nIHR3byBsYXJnZSB2YWx1ZXMgdG9nZXRoZXIgb3ZlcmZsb3dz Lg0KPg0KPiArICBpZiAoKE9mZnNldCAgICAgICAgICAgICAgID49IEJsb2NrU2l6ZSkgfHwNCj4N Cj4gKyAgICAgICgqTnVtQnl0ZXMgICAgICAgICAgICA+ICBCbG9ja1NpemUpIHx8DQo+DQo+ICsg ICAgICAoKE9mZnNldCArICpOdW1CeXRlcykgPiAgQmxvY2tTaXplKSkNCj4NCj4gKyAgew0KPg0K PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGdmJSZWFkOiBFUlJPUiAtIEVGSV9CQURfQlVG RkVSX1NJWkU6IChPZmZzZXQ9MHgleCArIE51bUJ5dGVzPTB4JXgpID4gQmxvY2tTaXplPTB4JXhc biIsIE9mZnNldCwgKk51bUJ5dGVzLCBCbG9ja1NpemUpKTsNCj4NCj4gKyAgICByZXR1cm4gRUZJ X0JBRF9CVUZGRVJfU0laRTsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIC8vIFdlIG11c3Qg aGF2ZSBzb21lIGJ5dGVzIHRvIHJlYWQNCj4NCj4gKyAgaWYgKCpOdW1CeXRlcyA9PSAwKSB7DQo+ DQo+ICsgICAgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7DQo+DQo+ICsgIH0NCj4NCj4gKw0K Pg0KPiArICByZXR1cm4gU21tU3RvcmVMaWJSZWFkIChMYmEsIE9mZnNldCwgTnVtQnl0ZXMsIEJ1 ZmZlcik7DQo+DQo+ICt9DQo+DQo+ICsNCj4NCj4gKy8qKg0KPg0KPiArIFdyaXRlcyB0aGUgc3Bl Y2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIGJsb2Nr Lg0KPg0KPiArDQo+DQo+ICsgVGhlIFdyaXRlKCkgZnVuY3Rpb24gd3JpdGVzIHRoZSBzcGVjaWZp ZWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20NCj4NCj4gKyB0aGUgcHJvdmlkZWQgYnVmZmVyIHRvIHRo ZSBzcGVjaWZpZWQgYmxvY2sgYW5kIG9mZnNldC4gSWYgdGhlDQo+DQo+ICsgZmlybXdhcmUgdm9s dW1lIGlzIHN0aWNreSB3cml0ZSwgdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0DQo+DQo+ICsg YWxsIHRoZSBiaXRzIG9mIHRoZSBzcGVjaWZpZWQgcmFuZ2UgdG8gd3JpdGUgYXJlIGluIHRoZQ0K Pg0KPiArIEVGSV9GVkJfRVJBU0VfUE9MQVJJVFkgc3RhdGUgYmVmb3JlIGNhbGxpbmcgdGhlIFdy aXRlKCkNCj4NCj4gKyBmdW5jdGlvbiwgb3IgZWxzZSB0aGUgcmVzdWx0IHdpbGwgYmUgdW5wcmVk aWN0YWJsZS4gVGhpcw0KPg0KPiArIHVucHJlZGljdGFiaWxpdHkgYXJpc2VzIGJlY2F1c2UsIGZv ciBhIHN0aWNreS13cml0ZSBmaXJtd2FyZQ0KPg0KPiArIHZvbHVtZSwgYSB3cml0ZSBtYXkgbmVn YXRlIGEgYml0IGluIHRoZSBFRklfRlZCX0VSQVNFX1BPTEFSSVRZDQo+DQo+ICsgc3RhdGUgYnV0 IGNhbm5vdCBmbGlwIGl0IGJhY2sgYWdhaW4uICBCZWZvcmUgY2FsbGluZyB0aGUNCj4NCj4gKyBX cml0ZSgpIGZ1bmN0aW9uLCAgaXQgaXMgcmVjb21tZW5kZWQgZm9yIHRoZSBjYWxsZXIgdG8gZmly c3QgY2FsbA0KPg0KPiArIHRoZSBFcmFzZUJsb2NrcygpIGZ1bmN0aW9uIHRvIGVyYXNlIHRoZSBz cGVjaWZpZWQgYmxvY2sgdG8NCj4NCj4gKyB3cml0ZS4gQSBibG9jayBlcmFzZSBjeWNsZSB3aWxs IHRyYW5zaXRpb24gYml0cyBmcm9tIHRoZQ0KPg0KPiArIChOT1QpRUZJX0ZWQl9FUkFTRV9QT0xB UklUWSBzdGF0ZSBiYWNrIHRvIHRoZQ0KPg0KPiArIEVGSV9GVkJfRVJBU0VfUE9MQVJJVFkgc3Rh dGUuIEltcGxlbWVudGF0aW9ucyBzaG91bGQgYmUNCj4NCj4gKyBtaW5kZnVsIHRoYXQgdGhlIGZp cm13YXJlIHZvbHVtZSBtaWdodCBiZSBpbiB0aGUgV3JpdGVEaXNhYmxlZA0KPg0KPiArIHN0YXRl LiBJZiBpdCBpcyBpbiB0aGlzIHN0YXRlLCB0aGUgV3JpdGUoKSBmdW5jdGlvbiBtdXN0DQo+DQo+ ICsgcmV0dXJuIHRoZSBzdGF0dXMgY29kZSBFRklfQUNDRVNTX0RFTklFRCB3aXRob3V0IG1vZGlm eWluZyB0aGUNCj4NCj4gKyBjb250ZW50cyBvZiB0aGUgZmlybXdhcmUgdm9sdW1lLiBUaGUgV3Jp dGUoKSBmdW5jdGlvbiBtdXN0DQo+DQo+ICsgYWxzbyBwcmV2ZW50IHNwYW5uaW5nIGJsb2NrIGJv dW5kYXJpZXMuIElmIGEgd3JpdGUgaXMNCj4NCj4gKyByZXF1ZXN0ZWQgdGhhdCBzcGFucyBhIGJs b2NrIGJvdW5kYXJ5LCB0aGUgd3JpdGUgbXVzdCBzdG9yZSB1cA0KPg0KPiArIHRvIHRoZSBib3Vu ZGFyeSBidXQgbm90IGJleW9uZC4gVGhlIG91dHB1dCBwYXJhbWV0ZXIgTnVtQnl0ZXMNCj4NCj4g KyBtdXN0IGJlIHNldCB0byBjb3JyZWN0bHkgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBieXRlcyBh Y3R1YWxseQ0KPg0KPiArIHdyaXR0ZW4uIFRoZSBjYWxsZXIgbXVzdCBiZSBhd2FyZSB0aGF0IGEg d3JpdGUgbWF5IGJlDQo+DQo+ICsgcGFydGlhbGx5IGNvbXBsZXRlZC4gQWxsIHdyaXRlcywgcGFy dGlhbCBvciBvdGhlcndpc2UsIG11c3QgYmUNCj4NCj4gKyBmdWxseSBmbHVzaGVkIHRvIHRoZSBo YXJkd2FyZSBiZWZvcmUgdGhlIFdyaXRlKCkgc2VydmljZQ0KPg0KPiArIHJldHVybnMuDQo+DQo+ ICsNCj4NCj4gKyBAcGFyYW0gVGhpcyAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoZSBFRklf RklSTVdBUkVfVk9MVU1FX0JMT0NLMl9QUk9UT0NPTCBpbnN0YW5jZS4NCj4NCj4gKw0KPg0KPiAr IEBwYXJhbSBMYmEgICAgICAgICAgICAgICAgICBUaGUgc3RhcnRpbmcgbG9naWNhbCBibG9jayBp bmRleCB0byB3cml0ZSB0by4NCj4NCj4gKw0KPg0KPiArIEBwYXJhbSBPZmZzZXQgICAgICAgICAg ICAgICBPZmZzZXQgaW50byB0aGUgYmxvY2sgYXQgd2hpY2ggdG8gYmVnaW4gd3JpdGluZy4NCj4N Cj4gKw0KPg0KPiArIEBwYXJhbSBOdW1CeXRlcyAgICAgICAgICAgICBUaGUgcG9pbnRlciB0byBh IFVJTlROLg0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdCBlbnRyeSwgKk51 bUJ5dGVzIGNvbnRhaW5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBidWZmZXIuDQo+DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEF0IGV4aXQsICpOdW1CeXRlcyBjb250YWlucyB0aGUg dG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4uDQo+DQo+ICsNCj4NCj4gKyBA cGFyYW0gQnVmZmVyICAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2Nh dGVkIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgZm9yIHRoZSB3cml0ZS4NCj4NCj4g Kw0KPg0KPiArIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICBUaGUgZmlybXdhcmUgdm9sdW1l IHdhcyB3cml0dGVuIHN1Y2Nlc3NmdWxseS4NCj4NCj4gKw0KPg0KPiArIEByZXR2YWwgRUZJX0JB RF9CVUZGRVJfU0laRSBUaGUgd3JpdGUgd2FzIGF0dGVtcHRlZCBhY3Jvc3MgYW4gTEJBIGJvdW5k YXJ5Lg0KPg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIE51bUJ5 dGVzIGNvbnRhaW5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMNCj4NCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWN0dWFsbHkgd3JpdHRlbi4NCj4NCj4gKw0KPg0KPiArIEByZXR2 YWwgRUZJX0FDQ0VTU19ERU5JRUQgICBUaGUgZmlybXdhcmUgdm9sdW1lIGlzIGluIHRoZSBXcml0 ZURpc2FibGVkIHN0YXRlLg0KPg0KPiArDQo+DQo+ICsgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgIFRoZSBibG9jayBkZXZpY2UgaXMgbWFsZnVuY3Rpb25pbmcgYW5kIGNvdWxkIG5vdCBiZSB3 cml0dGVuLg0KPg0KPiArDQo+DQo+ICsNCj4NCj4gKyAqKi8NCj4NCj4gK0VGSV9TVEFUVVMNCj4N Cj4gK0VGSUFQSQ0KPg0KPiArRnZiV3JpdGUgKA0KPg0KPiArICBJTiBDT05TVCAgRUZJX0ZJUk1X QVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgICpUaGlzLA0KPg0KPiArICBJTiAgICAgICAgRUZJ X0xCQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExiYSwNCj4NCj4gKyAgSU4gICAgICAg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQsDQo+DQo+ICsgIElO IE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk51bUJ5dGVzLA0K Pg0KPiArICBJTiAgICAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpC dWZmZXINCj4NCj4gKyAgKQ0KPg0KPiArew0KPg0KPiArICBVSU5UTiAgICAgICAgICAgICAgQmxv Y2tTaXplOw0KPg0KPiArICBTTU1TVE9SRV9JTlNUQU5DRSAgKkluc3RhbmNlOw0KPg0KPiArDQo+ DQo+ICsgIEluc3RhbmNlID0gSU5TVEFOQ0VfRlJPTV9GVkJfVEhJUyAoVGhpcyk7DQo+DQo+ICsN Cj4NCj4gKyAgREVCVUcgKChERUJVR19CTEtJTywgIkZ2YldyaXRlKFBhcmFtZXRlcnM6IExiYT0l bGQsIE9mZnNldD0weCV4LCAqTnVtQnl0ZXM9MHgleCwgQnVmZmVyIEAgMHglMDh4KVxuIiwgTGJh LCBPZmZzZXQsICpOdW1CeXRlcywgQnVmZmVyKSk7DQo+DQo+ICsNCj4NCj4gKyAgLy8gQ2FjaGUg dGhlIGJsb2NrIHNpemUgdG8gYXZvaWQgZGUtcmVmZXJlbmNpbmcgcG9pbnRlcnMgYWxsIHRoZSB0 aW1lDQo+DQo+ICsgIEJsb2NrU2l6ZSA9IEluc3RhbmNlLT5CbG9ja1NpemU7DQo+DQo+ICsNCj4N Cj4gKyAgLy8gVGhlIHJlYWQgbXVzdCBub3Qgc3BhbiBibG9jayBib3VuZGFyaWVzLg0KPg0KPiAr ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGVhY2ggdmFyaWFibGUgaW5kaXZpZHVhbGx5IGJlY2F1c2Ug YWRkaW5nIHR3byBsYXJnZSB2YWx1ZXMgdG9nZXRoZXIgb3ZlcmZsb3dzLg0KPg0KPiArICBpZiAo KE9mZnNldCAgICAgICAgICAgICAgID49IEJsb2NrU2l6ZSkgfHwNCj4NCj4gKyAgICAgICgqTnVt Qnl0ZXMgICAgICAgICAgICA+ICBCbG9ja1NpemUpIHx8DQo+DQo+ICsgICAgICAoKE9mZnNldCAr ICpOdW1CeXRlcykgPiAgQmxvY2tTaXplKSkNCj4NCj4gKyAgew0KPg0KPiArICAgIERFQlVHICgo REVCVUdfRVJST1IsICJGdmJSZWFkOiBFUlJPUiAtIEVGSV9CQURfQlVGRkVSX1NJWkU6IChPZmZz ZXQ9MHgleCArIE51bUJ5dGVzPTB4JXgpID4gQmxvY2tTaXplPTB4JXhcbiIsIE9mZnNldCwgKk51 bUJ5dGVzLCBCbG9ja1NpemUpKTsNCj4NCj4gKyAgICByZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0la RTsNCj4NCj4gKyAgfQ0KPg0KPiArDQo+DQo+ICsgIC8vIFdlIG11c3QgaGF2ZSBzb21lIGJ5dGVz IHRvIHJlYWQNCj4NCj4gKyAgaWYgKCpOdW1CeXRlcyA9PSAwKSB7DQo+DQo+ICsgICAgcmV0dXJu IEVGSV9CQURfQlVGRkVSX1NJWkU7DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiArICByZXR1cm4g U21tU3RvcmVMaWJXcml0ZSAoTGJhLCBPZmZzZXQsIE51bUJ5dGVzLCBCdWZmZXIpOw0KPg0KPiAr fQ0KPg0KPiArDQo+DQo+ICsvKioNCj4NCj4gKyBFcmFzZXMgYW5kIGluaXRpYWxpc2VzIGEgZmly bXdhcmUgdm9sdW1lIGJsb2NrLg0KPg0KPiArDQo+DQo+ICsgVGhlIEVyYXNlQmxvY2tzKCkgZnVu Y3Rpb24gZXJhc2VzIG9uZSBvciBtb3JlIGJsb2NrcyBhcyBkZW5vdGVkDQo+DQo+ICsgYnkgdGhl IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuIFRoZSBlbnRpcmUgcGFyYW1ldGVyIGxpc3Qgb2YNCj4N Cj4gKyBibG9ja3MgbXVzdCBiZSB2ZXJpZmllZCBiZWZvcmUgZXJhc2luZyBhbnkgYmxvY2tzLiBJ ZiBhIGJsb2NrIGlzDQo+DQo+ICsgcmVxdWVzdGVkIHRoYXQgZG9lcyBub3QgZXhpc3Qgd2l0aGlu IHRoZSBhc3NvY2lhdGVkIGZpcm13YXJlDQo+DQo+ICsgdm9sdW1lIChpdCBoYXMgYSBsYXJnZXIg aW5kZXggdGhhbiB0aGUgbGFzdCBibG9jayBvZiB0aGUNCj4NCj4gKyBmaXJtd2FyZSB2b2x1bWUp LCB0aGUgRXJhc2VCbG9ja3MoKSBmdW5jdGlvbiBtdXN0IHJldHVybiB0aGUNCj4NCj4gKyBzdGF0 dXMgY29kZSBFRklfSU5WQUxJRF9QQVJBTUVURVIgd2l0aG91dCBtb2RpZnlpbmcgdGhlIGNvbnRl bnRzDQo+DQo+ICsgb2YgdGhlIGZpcm13YXJlIHZvbHVtZS4gSW1wbGVtZW50YXRpb25zIHNob3Vs ZCBiZSBtaW5kZnVsIHRoYXQNCj4NCj4gKyB0aGUgZmlybXdhcmUgdm9sdW1lIG1pZ2h0IGJlIGlu IHRoZSBXcml0ZURpc2FibGVkIHN0YXRlLiBJZiBpdA0KPg0KPiArIGlzIGluIHRoaXMgc3RhdGUs IHRoZSBFcmFzZUJsb2NrcygpIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRoZQ0KPg0KPiArIHN0YXR1 cyBjb2RlIEVGSV9BQ0NFU1NfREVOSUVEIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb250ZW50cyBv Zg0KPg0KPiArIHRoZSBmaXJtd2FyZSB2b2x1bWUuIEFsbCBjYWxscyB0byBFcmFzZUJsb2Nrcygp IG11c3QgYmUgZnVsbHkNCj4NCj4gKyBmbHVzaGVkIHRvIHRoZSBoYXJkd2FyZSBiZWZvcmUgdGhl IEVyYXNlQmxvY2tzKCkgc2VydmljZQ0KPg0KPiArIHJldHVybnMuDQo+DQo+ICsNCj4NCj4gKyBA cGFyYW0gVGhpcyAgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGUgRUZJX0ZJUk1XQVJF X1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wNCj4NCj4gKyBpbnN0YW5jZS4NCj4NCj4gKw0KPg0KPiAr IEBwYXJhbSAuLi4gICAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxp c3QgaXMgYSBsaXN0IG9mIHR1cGxlcy4NCj4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVhY2ggdHVwbGUgZGVzY3JpYmVzIGEgcmFuZ2Ugb2YgTEJBcyB0byBlcmFzZQ0KPg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvbnNpc3RzIG9mIHRoZSBm b2xsb3dpbmc6DQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIEVG SV9MQkEgdGhhdCBpbmRpY2F0ZXMgdGhlIHN0YXJ0aW5nIExCQQ0KPg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLSBBIFVJTlROIHRoYXQgaW5kaWNhdGVzIHRoZSBudW1iZXIg b2YgYmxvY2tzIHRvIGVyYXNlLg0KPg0KPiArDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUaGUgbGlzdCBpcyB0ZXJtaW5hdGVkIHdpdGggYW4gRUZJX0xCQV9MSVNUX1RF Uk1JTkFUT1IuDQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhh bXBsZSwgdGhlIGZvbGxvd2luZyBpbmRpY2F0ZXMgdGhhdCB0d28gcmFuZ2VzIG9mIGJsb2Nrcw0K Pg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUtNyBhbmQgMTAtMTEpIGFy ZSB0byBiZSBlcmFzZWQ6DQo+DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF cmFzZUJsb2NrcyAoVGhpcywgNSwgMywgMTAsIDIsIEVGSV9MQkFfTElTVF9URVJNSU5BVE9SKTsN Cj4NCj4gKw0KPg0KPiArIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIGVyYXNl IHJlcXVlc3Qgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4NCj4NCj4gKw0KPg0KPiArIEByZXR2YWwg RUZJX0FDQ0VTU19ERU5JRUQgICAgICAgVGhlIGZpcm13YXJlIHZvbHVtZSBpcyBpbiB0aGUgV3Jp dGVEaXNhYmxlZCBzdGF0ZS4NCj4NCj4gKw0KPg0KPiArIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgICAgVGhlIGJsb2NrIGRldmljZSBpcyBub3QgZnVuY3Rpb25pbmcgY29ycmVjdGx5IGFu ZCBjb3VsZCBub3QgYmUgd3JpdHRlbi4NCj4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRoZSBmaXJtd2FyZSBkZXZpY2UgbWF5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgZXJhc2Vk Lg0KPg0KPiArDQo+DQo+ICsgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUgb3Ig bW9yZSBvZiB0aGUgTEJBcyBsaXN0ZWQgaW4gdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QgZG8N Cj4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBleGlzdCBpbiB0aGUg ZmlybXdhcmUgdm9sdW1lLg0KPg0KPiArDQo+DQo+ICsgKiovDQo+DQo+ICtFRklfU1RBVFVTDQo+ DQo+ICtFRklBUEkNCj4NCj4gK0Z2YkVyYXNlQmxvY2tzICgNCj4NCj4gKyAgSU4gQ09OU1QgRUZJ X0ZJUk1XQVJFX1ZPTFVNRV9CTE9DSzJfUFJPVE9DT0wgICpUaGlzLA0KPg0KPiArICAuLi4NCj4N Cj4gKyAgKQ0KPg0KPiArew0KPg0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0KPg0K PiArICBWQV9MSVNUICAgICAgICAgICAgQXJnczsNCj4NCj4gKyAgRUZJX0xCQSAgICAgICAgICAg IFN0YXJ0aW5nTGJhOyAvLyBMYmEgZnJvbSB3aGljaCB3ZSBzdGFydCBlcmFzaW5nDQo+DQo+ICsg IFVJTlROICAgICAgICAgICAgICBOdW1PZkxiYTsgICAgLy8gTnVtYmVyIG9mIExiYSBibG9ja3Mg dG8gZXJhc2UNCj4NCj4gKyAgU01NU1RPUkVfSU5TVEFOQ0UgICpJbnN0YW5jZTsNCj4NCj4gKw0K Pg0KPiArICBJbnN0YW5jZSA9IElOU1RBTkNFX0ZST01fRlZCX1RISVMgKFRoaXMpOw0KPg0KPiAr DQo+DQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPg0KPiArDQo+DQo+ICsgIC8vIEJlZm9y ZSBlcmFzaW5nLCBjaGVjayB0aGUgZW50aXJlIGxpc3Qgb2YgcGFyYW1ldGVycyB0byBlbnN1cmUg YWxsIHNwZWNpZmllZCBibG9ja3MgYXJlIHZhbGlkDQo+DQo+ICsNCj4NCj4gKyAgVkFfU1RBUlQg KEFyZ3MsIFRoaXMpOw0KPg0KPiArICBkbyB7DQo+DQo+ICsgICAgLy8gR2V0IHRoZSBMYmEgZnJv bSB3aGljaCB3ZSBzdGFydCBlcmFzaW5nDQo+DQo+ICsgICAgU3RhcnRpbmdMYmEgPSBWQV9BUkcg KEFyZ3MsIEVGSV9MQkEpOw0KPg0KPiArDQo+DQo+ICsgICAgLy8gSGF2ZSB3ZSByZWFjaGVkIHRo ZSBlbmQgb2YgdGhlIGxpc3Q/DQo+DQo+ICsgICAgaWYgKFN0YXJ0aW5nTGJhID09IEVGSV9MQkFf TElTVF9URVJNSU5BVE9SKSB7DQo+DQo+ICsgICAgICAvLyBFeGl0IHRoZSB3aGlsZSBsb29wDQo+ DQo+ICsgICAgICBicmVhazsNCj4NCj4gKyAgICB9DQo+DQo+ICsNCj4NCj4gKyAgICAvLyBIb3cg bWFueSBMYmEgYmxvY2tzIGFyZSB3ZSByZXF1ZXN0ZWQgdG8gZXJhc2U/DQo+DQo+ICsgICAgTnVt T2ZMYmEgPSBWQV9BUkcgKEFyZ3MsIFVJTlROKTsNCj4NCj4gKw0KPg0KPiArICAgIC8vIEFsbCBi bG9ja3MgbXVzdCBiZSB3aXRoaW4gcmFuZ2UNCj4NCj4gKyAgICBERUJVRyAoKA0KPg0KPiArICAg ICAgREVCVUdfQkxLSU8sDQo+DQo+ICsgICAgICAiRnZiRXJhc2VCbG9ja3M6IENoZWNrIGlmOiAo IFN0YXJ0aW5nTGJhPSVsZCArIE51bU9mTGJhPSVMdSAtIDEgKSA+IExhc3RCbG9jaz0lbGQuXG4i LA0KPg0KPiArICAgICAgU3RhcnRpbmdMYmEsDQo+DQo+ICsgICAgICAoVUlOVDY0KU51bU9mTGJh LA0KPg0KPiArICAgICAgSW5zdGFuY2UtPkxhc3RCbG9jaw0KPg0KPiArICAgICAgKSk7DQo+DQo+ ICsgICAgaWYgKChOdW1PZkxiYSA9PSAwKSB8fCAoKFN0YXJ0aW5nTGJhICsgTnVtT2ZMYmEgLSAx KSA+IEluc3RhbmNlLT5MYXN0QmxvY2spKSB7DQo+DQo+ICsgICAgICBWQV9FTkQgKEFyZ3MpOw0K Pg0KPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZ2YkVyYXNlQmxvY2tzOiBFUlJPUiAt IExiYSByYW5nZSBnb2VzIHBhc3QgdGhlIGxhc3QgTGJhLlxuIikpOw0KPg0KPiArICAgICAgU3Rh dHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPg0KPiArICAgICAgZ290byBFWElUOw0KPg0K PiArICAgIH0NCj4NCj4gKyAgfSB3aGlsZSAoVFJVRSk7DQo+DQo+ICsNCj4NCj4gKyAgVkFfRU5E IChBcmdzKTsNCj4NCj4gKw0KPg0KPiArICAvLw0KPg0KPiArICAvLyBUbyBnZXQgaGVyZSwgYWxs IG11c3QgYmUgb2ssIHNvIHN0YXJ0IGVyYXNpbmcNCj4NCj4gKyAgLy8NCj4NCj4gKyAgVkFfU1RB UlQgKEFyZ3MsIFRoaXMpOw0KPg0KPiArICBkbyB7DQo+DQo+ICsgICAgLy8gR2V0IHRoZSBMYmEg ZnJvbSB3aGljaCB3ZSBzdGFydCBlcmFzaW5nDQo+DQo+ICsgICAgU3RhcnRpbmdMYmEgPSBWQV9B UkcgKEFyZ3MsIEVGSV9MQkEpOw0KPg0KPiArDQo+DQo+ICsgICAgLy8gSGF2ZSB3ZSByZWFjaGVk IHRoZSBlbmQgb2YgdGhlIGxpc3Q/DQo+DQo+ICsgICAgaWYgKFN0YXJ0aW5nTGJhID09IEVGSV9M QkFfTElTVF9URVJNSU5BVE9SKSB7DQo+DQo+ICsgICAgICAvLyBFeGl0IHRoZSB3aGlsZSBsb29w DQo+DQo+ICsgICAgICBicmVhazsNCj4NCj4gKyAgICB9DQo+DQo+ICsNCj4NCj4gKyAgICAvLyBI b3cgbWFueSBMYmEgYmxvY2tzIGFyZSB3ZSByZXF1ZXN0ZWQgdG8gZXJhc2U/DQo+DQo+ICsgICAg TnVtT2ZMYmEgPSBWQV9BUkcgKEFyZ3MsIFVJTlROKTsNCj4NCj4gKw0KPg0KPiArICAgIC8vIEdv IHRocm91Z2ggZWFjaCBvbmUgYW5kIGVyYXNlIGl0DQo+DQo+ICsgICAgd2hpbGUgKE51bU9mTGJh ID4gMCkgew0KPg0KPiArICAgICAgLy8gRXJhc2UgaXQNCj4NCj4gKyAgICAgIERFQlVHICgoREVC VUdfQkxLSU8sICJGdmJFcmFzZUJsb2NrczogRXJhc2luZyBMYmE9JWxkXG4iLCBTdGFydGluZ0xi YSkpOw0KPg0KPiArICAgICAgU3RhdHVzID0gU21tU3RvcmVMaWJFcmFzZUJsb2NrIChTdGFydGlu Z0xiYSk7DQo+DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+DQo+ICsgICAg ICAgIFZBX0VORCAoQXJncyk7DQo+DQo+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9ERVZJQ0VfRVJS T1I7DQo+DQo+ICsgICAgICAgIGdvdG8gRVhJVDsNCj4NCj4gKyAgICAgIH0NCj4NCj4gKw0KPg0K PiArICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBMYmENCj4NCj4gKyAgICAgIFN0YXJ0aW5nTGJh Kys7DQo+DQo+ICsgICAgICBOdW1PZkxiYS0tOw0KPg0KPiArICAgIH0NCj4NCj4gKyAgfSB3aGls ZSAoVFJVRSk7DQo+DQo+ICsNCj4NCj4gKyAgVkFfRU5EIChBcmdzKTsNCj4NCj4gKw0KPg0KPiAr RVhJVDoNCj4NCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4NCj4gK30NCj4NCj4gKw0KPg0KPiArLyoq DQo+DQo+ICsgIEluaXRpYWxpemVkIHRoZSBGaXJtd2FyZSBWb2x1bWUgaWYgbmVjZXNzYXJ5IGFu ZCBpbnN0YWxscyB0aGUNCj4NCj4gKyAgZ0Vka2lpTnZWYXJTdG9yZUZvcm1hdHRlZEd1aWQgcHJv dG9jb2wuDQo+DQo+ICsNCj4NCj4gKyAgQHBhcmFtIEluc3RhbmNlICAgICAgICAgICAgICAgICAg ICBQb2ludGVyIHRvIFNtbVN0b3JlIGluc3RhbmNlDQo+DQo+ICsNCj4NCj4gKyAqKi8NCj4NCj4g K0VGSV9TVEFUVVMNCj4NCj4gK0VGSUFQSQ0KPg0KPiArRnZiSW5pdGlhbGl6ZSAoDQo+DQo+ICsg IElOIFNNTVNUT1JFX0lOU1RBTkNFICAqSW5zdGFuY2UNCj4NCj4gKyAgKQ0KPg0KPiArew0KPg0K PiArICBFRklfU1RBVFVTICAgICBTdGF0dXM7DQo+DQo+ICsgIFVJTlQzMiAgICAgICAgIEZ2Yk51 bUxiYTsNCj4NCj4gKyAgRUZJX0JPT1RfTU9ERSAgQm9vdE1vZGU7DQo+DQo+ICsNCj4NCj4gKyAg QVNTRVJUICgoSW5zdGFuY2UgIT0gTlVMTCkpOw0KPg0KPiArDQo+DQo+ICsgIEJvb3RNb2RlID0g R2V0Qm9vdE1vZGVIb2IgKCk7DQo+DQo+ICsgIGlmIChCb290TW9kZSA9PSBCT09UX1dJVEhfREVG QVVMVF9TRVRUSU5HUykgew0KPg0KPiArICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4NCj4gKyAgfSBlbHNlIHsNCj4NCj4gKyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlcmUgaXMg YSB2YWxpZCBoZWFkZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgTm9yRmxhc2gNCj4NCj4gKyAg ICBTdGF0dXMgPSBWYWxpZGF0ZUZ2SGVhZGVyICgpOw0KPg0KPiArICB9DQo+DQo+ICsNCj4NCj4g KyAgLy8gSW5zdGFsbCB0aGUgRGVmYXVsdCBGVkIgaGVhZGVyIGlmIHJlcXVpcmVkDQo+DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4NCj4gKyAgICAvLyBUaGVyZSBpcyBubyB2YWxp ZCBoZWFkZXIsIHNvIHRpbWUgdG8gaW5zdGFsbCBvbmUuDQo+DQo+ICsgICAgREVCVUcgKChERUJV R19JTkZPLCAiJWE6IFRoZSBGVkIgSGVhZGVyIGlzIG5vdCB2YWxpZC5cbiIsIF9fRlVOQ1RJT05f XykpOw0KPg0KPiArICAgIERFQlVHICgoDQo+DQo+ICsgICAgICBERUJVR19JTkZPLA0KPg0KPiAr ICAgICAgIiVhOiBJbnN0YWxsaW5nIGEgY29ycmVjdCBvbmUgZm9yIHRoaXMgdm9sdW1lLlxuIiwN Cj4NCj4gKyAgICAgIF9fRlVOQ1RJT05fXw0KPg0KPiArICAgICAgKSk7DQo+DQo+ICsNCj4NCj4g KyAgICAvLyBFcmFzZSBhbGwgdGhlIE5vckZsYXNoIHRoYXQgaXMgcmVzZXJ2ZWQgZm9yIHZhcmlh YmxlIHN0b3JhZ2UNCj4NCj4gKyAgICBGdmJOdW1MYmEgPSAoUGNkR2V0MzIgKFBjZEZsYXNoTnZT dG9yYWdlVmFyaWFibGVTaXplKSArDQo+DQo+ICsgICAgICAgICAgICAgICAgIFBjZEdldDMyIChQ Y2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplKSArDQo+DQo+ICsgICAgICAgICAgICAgICAg IFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSkpIC8gSW5zdGFuY2UtPkJs b2NrU2l6ZTsNCj4NCj4gKw0KPg0KPiArICAgIFN0YXR1cyA9IEZ2YkVyYXNlQmxvY2tzICgmSW5z dGFuY2UtPkZ2YlByb3RvY29sLCAoRUZJX0xCQSkwLCBGdmJOdW1MYmEsIEVGSV9MQkFfTElTVF9U RVJNSU5BVE9SKTsNCj4NCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+DQo+ICsg ICAgICByZXR1cm4gU3RhdHVzOw0KPg0KPiArICAgIH0NCj4NCj4gKw0KPg0KPiArICAgIC8vIElu c3RhbGwgYWxsIGFwcHJvcHJpYXRlIGhlYWRlcnMNCj4NCj4gKyAgICBTdGF0dXMgPSBJbml0aWFs aXplRnZBbmRWYXJpYWJsZVN0b3JlSGVhZGVycyAoSW5zdGFuY2UpOw0KPg0KPiArICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4NCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+DQo+ICsg ICAgfQ0KPg0KPiArICB9IGVsc2Ugew0KPg0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVh OiBGVkIgaGVhZGVyIGlzIHZhbGlkXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4NCj4gKyAgfQ0KPg0K PiArDQo+DQo+ICsgIC8vDQo+DQo+ICsgIC8vIFRoZSBkcml2ZXIgaW1wbGVtZW50aW5nIHRoZSB2 YXJpYWJsZSByZWFkIHNlcnZpY2UgY2FuIG5vdyBiZSBkaXNwYXRjaGVkOw0KPg0KPiArICAvLyB0 aGUgdmFyc3RvcmUgaGVhZGVycyBhcmUgaW4gcGxhY2UuDQo+DQo+ICsgIC8vDQo+DQo+ICsgIFN0 YXR1cyA9IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4NCj4gKyAgICAgICAgICAg ICAgICAgICZnSW1hZ2VIYW5kbGUsDQo+DQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka2lpTnZW YXJTdG9yZUZvcm1hdHRlZEd1aWQsDQo+DQo+ICsgICAgICAgICAgICAgICAgICBFRklfTkFUSVZF X0lOVEVSRkFDRSwNCj4NCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4NCj4gKyAgICAgICAg ICAgICAgICAgICk7DQo+DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+DQo+ICsN Cj4NCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4NCj4gK30NCj4NCj4gZGlmZiAtLWdpdCBhL1VlZmlQ YXlsb2FkUGtnL1NtbVN0b3JlRnZiL1NtbVN0b3JlRnZiUnVudGltZUR4ZS5pbmYgYi9VZWZpUGF5 bG9hZFBrZy9TbW1TdG9yZUZ2Yi9TbW1TdG9yZUZ2YlJ1bnRpbWVEeGUuaW5mDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjJiZDg4ODZiY2MNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9VZWZpUGF5bG9hZFBrZy9TbW1TdG9yZUZ2Yi9TbW1TdG9yZUZ2YlJ1bnRp bWVEeGUuaW5mDQo+IEBAIC0wLDAgKzEsNjYgQEANCj4gKyMjIEBmaWxlDQo+DQo+ICsjICBDb21w b25lbnQgZGVzY3JpcHRpb24gZmlsZSBmb3IgU21tU3RvcmUgbW9kdWxlDQo+DQo+ICsjDQo+DQo+ ICsjICBUaGlzIG1vZHVsZSBwcm9kdWNlcyB0aGUgRmlybXdhcmVWb2x1bWVCbG9jayBwcm90b2Nv bCBvbiB0b3Agb2YgdGhlDQo+DQo+ICsjICBTbW1TdG9yZSBwcm92aWRlZCBieSBib290bG9hZGVy IGFuZCBpbnN0YWxscyB0aGUgTnZWYXJTdG9yZUZvcm1hdHRlZCBwcm90b2NvbC4NCj4NCj4gKyMN Cj4NCj4gKyMgIENvcHlyaWdodCAoYykgMjAyMiwgOWVsZW1lbnRzIEdtYkg8QlI+DQo+DQo+ICsj DQo+DQo+ICsjICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K Pg0KPiArIw0KPg0KPiArIyMNCj4NCj4gKw0KPg0KPiArW0RlZmluZXNdDQo+DQo+ICsgIElORl9W RVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4NCj4gKyAgQkFTRV9OQU1F ICAgICAgICAgICAgICAgICAgICAgID0gU21tU3RvcmVGdmJSdW50aW1lRHhlDQo+DQo+ICsgIEZJ TEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEEwNDAyRkNBLTZCMjUtNENFQS1CN0RELUMw OEY5OTcxNEIyOQ0KPg0KPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVf UlVOVElNRV9EUklWRVINCj4NCj4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0g MS4wDQo+DQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFNtbVN0b3JlSW5p dGlhbGl6ZQ0KPg0KPiArDQo+DQo+ICtbU291cmNlcy5jb21tb25dDQo+DQo+ICsgIFNtbVN0b3Jl RnZiUnVudGltZUR4ZS5jDQo+DQo+ICsgIFNtbVN0b3JlRnZiUnVudGltZS5oDQo+DQo+ICsgIFNt bVN0b3JlRnZiUnVudGltZS5jDQo+DQo+ICsNCj4NCj4gK1tQYWNrYWdlc10NCj4NCj4gKyAgTWRl UGtnL01kZVBrZy5kZWMNCj4NCj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4N Cj4gKyAgRW1iZWRkZWRQa2cvRW1iZWRkZWRQa2cuZGVjDQo+DQo+ICsgIFVlZmlQYXlsb2FkUGtn L1VlZmlQYXlsb2FkUGtnLmRlYw0KPg0KPiArDQo+DQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+DQo+ ICsgIEJhc2VMaWINCj4NCj4gKyAgRGVidWdMaWINCj4NCj4gKyAgSG9iTGliDQo+DQo+ICsgIFNt bVN0b3JlTGliDQo+DQo+ICsgIFVlZmlMaWINCj4NCj4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQN Cj4NCj4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+DQo+ICsgIFVlZmlSdW50aW1lTGli DQo+DQo+ICsgIER4ZVNlcnZpY2VzVGFibGVMaWINCj4NCj4gKw0KPg0KPiArW0d1aWRzXQ0KPg0K PiArICBnRWZpU3lzdGVtTnZEYXRhRnZHdWlkDQo+DQo+ICsgIGdFZmlWYXJpYWJsZUd1aWQgICAg ICAgICAgICAgICAgICAjIyBQUk9EVUNFUyAjIyBQUk9UT0NPTA0KPg0KPiArICBnRWZpQXV0aGVu dGljYXRlZFZhcmlhYmxlR3VpZA0KPg0KPiArICBnRWZpRXZlbnRWaXJ0dWFsQWRkcmVzc0NoYW5n ZUd1aWQNCj4NCj4gKyAgZ0Vka2lpTnZWYXJTdG9yZUZvcm1hdHRlZEd1aWQgICAgICMjIFBST0RV Q0VTICMjIFBST1RPQ09MDQo+DQo+ICsNCj4NCj4gK1tQcm90b2NvbHNdDQo+DQo+ICsgIGdFZmlE ZXZpY2VQYXRoUHJvdG9jb2xHdWlkICAgICAgICAgICMjIEJZX1NUQVJUDQo+DQo+ICsgIGdFZmlG aXJtd2FyZVZvbHVtZUJsb2NrUHJvdG9jb2xHdWlkICMjIEJZX1NUQVJUDQo+DQo+ICsNCj4NCj4g K1tQY2RdDQo+DQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52 U3RvcmFnZVZhcmlhYmxlQmFzZQ0KPg0KPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1 aWQuUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUNCj4NCj4gKyAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UNCj4NCj4gKyAg Z0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2lu Z1NpemUNCj4NCj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoTnZT dG9yYWdlRnR3U3BhcmVCYXNlDQo+DQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZQ0KPg0KPiArICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZUJhc2U2NA0KPg0KPiArICBn RWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5n QmFzZTY0DQo+DQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52 U3RvcmFnZVZhcmlhYmxlQmFzZTY0DQo+DQo+ICsNCj4NCj4gK1tEZXBleF0NCj4NCj4gKyAgVFJV RQ0KPg0KPiBkaWZmIC0tZ2l0IGEvVWVmaVBheWxvYWRQa2cvVWVmaVBheWxvYWRQa2cuZHNjIGIv VWVmaVBheWxvYWRQa2cvVWVmaVBheWxvYWRQa2cuZHNjDQo+IGluZGV4IGNmNDQwZmVlNTguLjBm NjQyMTYxMmMgMTAwNjQ0DQo+IC0tLSBhL1VlZmlQYXlsb2FkUGtnL1VlZmlQYXlsb2FkUGtnLmRz Yw0KPiArKysgYi9VZWZpUGF5bG9hZFBrZy9VZWZpUGF5bG9hZFBrZy5kc2MNCj4gQEAgLTk3LDYg Kzk3LDcgQEANCj4gICAgIw0KPg0KPiAgICAjIEVNVTogICAgICBVRUZJIHBheWxvYWQgd2l0aCBF TVUgdmFyaWFibGUNCj4NCj4gICAgIyBTUEk6ICAgICAgVUVGSSBwYXlsb2FkIHdpdGggU1BJIE5W IHZhcmlhYmxlIHN1cHBvcnQNCj4NCj4gKyAgIyBTTU1TVE9SRTogVUVGSSBwYXlsb2FkIHdpdGgg Y29yZWJvb3QgU01NIE5WIHZhcmlhYmxlIHN1cHBvcnQNCj4NCj4gICAgIyBOT05FOiAgICAgVUVG SSBwYXlsb2FkIHdpdGggbm8gdmFyaWFibGUgbW9kdWxlcw0KPg0KPiAgICAjDQo+DQo+ICAgIERF RklORSBWQVJJQUJMRV9TVVBQT1JUICAgICAgPSBFTVUNCj4NCj4gQEAgLTI2MSw5ICsyNjIsMTEg QEANCj4gICAgTG9ja0JveExpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9Mb2NrQm94TnVsbExpYi9M b2NrQm94TnVsbExpYi5pbmYNCj4NCj4gICAgRmlsZUV4cGxvcmVyTGlifE1kZU1vZHVsZVBrZy9M aWJyYXJ5L0ZpbGVFeHBsb3JlckxpYi9GaWxlRXhwbG9yZXJMaWIuaW5mDQo+DQo+ICAgIEF1dGhW YXJpYWJsZUxpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9BdXRoVmFyaWFibGVMaWJOdWxsL0F1dGhW YXJpYWJsZUxpYk51bGwuaW5mDQo+DQo+IC0gIFNtbVN0b3JlTGlifFVlZmlQYXlsb2FkUGtnL0xp YnJhcnkvU21tU3RvcmVMaWIvU21tU3RvcmVMaWIuaW5mDQo+DQo+ICAhaWYgJChWQVJJQUJMRV9T VVBQT1JUKSA9PSAiRU1VIg0KPg0KPiAgICBUcG1NZWFzdXJlbWVudExpYnxNZGVNb2R1bGVQa2cv TGlicmFyeS9UcG1NZWFzdXJlbWVudExpYk51bGwvVHBtTWVhc3VyZW1lbnRMaWJOdWxsLmluZg0K Pg0KPiArIWVsc2VpZiAkKFZBUklBQkxFX1NVUFBPUlQpID09ICJTTU1TVE9SRSINCj4NCj4gKyAg U21tU3RvcmVMaWJ8VWVmaVBheWxvYWRQa2cvTGlicmFyeS9TbW1TdG9yZUxpYi9TbW1TdG9yZUxp Yi5pbmYNCj4NCj4gKyAgVHBtTWVhc3VyZW1lbnRMaWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvVHBt TWVhc3VyZW1lbnRMaWJOdWxsL1RwbU1lYXN1cmVtZW50TGliTnVsbC5pbmYNCj4NCj4gICFlbHNl aWYgJChWQVJJQUJMRV9TVVBQT1JUKSA9PSAiU1BJIg0KPg0KPiAgICBQbGF0Zm9ybVNlY3VyZUxp YnxTZWN1cml0eVBrZy9MaWJyYXJ5L1BsYXRmb3JtU2VjdXJlTGliTnVsbC9QbGF0Zm9ybVNlY3Vy ZUxpYk51bGwuaW5mDQo+DQo+ICAgIFRwbU1lYXN1cmVtZW50TGlifFNlY3VyaXR5UGtnL0xpYnJh cnkvRHhlVHBtTWVhc3VyZW1lbnRMaWIvRHhlVHBtTWVhc3VyZW1lbnRMaWIuaW5mDQo+DQo+IEBA IC0zNzksMTUgKzM4MiwxMyBAQA0KPiAgICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENw dVNtbUVuYWJsZUJzcEVsZWN0aW9ufEZBTFNFDQo+DQo+DQo+DQo+ICBbUGNkc0ZpeGVkQXRCdWls ZF0NCj4NCj4gLSAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heFZhcmlhYmxl U2l6ZXwweDEwMDAwDQo+DQo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RN YXhIYXJkd2FyZUVycm9yVmFyaWFibGVTaXplfDB4ODAwMA0KPg0KPiAgICBnRWZpTWRlTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkVmFyaWFibGVTdG9yZVNpemV8MHgxMDAwMA0KPg0KPiAgIWlm ICQoVkFSSUFCTEVfU1VQUE9SVCkgPT0gIkVNVSINCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxlTnZNb2RlRW5hYmxlICAgICAgICB8VFJVRQ0KPg0K PiAtIWVsc2UNCj4NCj4gKyFlbHNlaWYgJChWQVJJQUJMRV9TVVBQT1JUKSA9PSAiU1BJIiB8fCAk KFZBUklBQkxFX1NVUFBPUlQpID09ICJTTU1TVE9SRSINCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxlTnZNb2RlRW5hYmxlICAgICAgICB8RkFMU0UN Cj4NCj4gICFlbmRpZg0KPg0KPiAtDQo+DQo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNl R3VpZC5QY2RWcGRCYXNlQWRkcmVzc3wweDANCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZFN0YXR1c0NvZGVVc2VNZW1vcnl8RkFMU0UNCj4NCj4gICAgZ0VmaU1kZU1v ZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVzZTFHUGFnZVRhYmxlfFRSVUUNCj4NCj4gQEAgLTQ0 NSw3ICs0NDYsNiBAQA0KPiAgICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdU1heExv Z2ljYWxQcm9jZXNzb3JOdW1iZXJ8JChNQVhfTE9HSUNBTF9QUk9DRVNTT1JTKQ0KPg0KPiAgICBn VWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10 cnJzfDANCj4NCj4gICAgZ1VlZmlQYXlsb2FkUGtnVG9rZW5TcGFjZUd1aWQuUGNkQm9vdGxvYWRl clBhcmFtZXRlcnwwDQo+DQo+IC0NCj4NCj4gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+DQo+ ICAjDQo+DQo+ICAjIFBjZCBEeW5hbWljRXggU2VjdGlvbiAtIGxpc3Qgb2YgYWxsIEVESyBJSSBQ Q0QgRW50cmllcyBkZWZpbmVkIGJ5IHRoaXMgUGxhdGZvcm0NCj4NCj4gQEAgLTQ3MywxNSArNDcz LDE5IEBADQo+ICAhZW5kaWYNCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZFJlc2V0T25NZW1vcnlUeXBlSW5mb3JtYXRpb25DaGFuZ2V8RkFMU0UNCj4NCj4gICAgZ0Vm aU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxlTnZTdG9yZVJlc2VydmVk fDANCj4NCj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoTnZTdG9y YWdlVmFyaWFibGVCYXNlfDANCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVCYXNlNjR8MA0KPg0KPiAgICBnRWZpTWRlTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZXwwDQo+DQo+ ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1Nw YXJlQmFzZXwwDQo+DQo+ICAgIGdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZC5QY2RQbGF0Zm9ybUJv b3RUaW1lT3V0fDMNCj4NCj4gLSFpZiAkKFZBUklBQkxFX1NVUFBPUlQpID09ICJTUEkiDQo+DQo+ ICshaWYgJChWQVJJQUJMRV9TVVBQT1JUKSA9PSAiU1BJIiB8fCAkKFZBUklBQkxFX1NVUFBPUlQp ID09ICJTTU1TVE9SRSINCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBj ZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVTaXplICB8MA0KPg0KPiAgICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nU2l6ZXwwDQo+DQo+ICAg IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJl U2l6ZSAgfDANCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNo TnZTdG9yYWdlVmFyaWFibGVCYXNlICB8MA0KPg0KPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZUJhc2U2NHwwDQo+DQo+ICsgIGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdCYXNl NjR8MA0KPg0KPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0 b3JhZ2VGdHdTcGFyZUJhc2U2NHwwDQo+DQo+ICAhZW5kaWYNCj4NCj4gICAgIyBEaXNhYmxlIFNN TSBTMyBzY3JpcHQNCj4NCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEFj cGlTM0VuYWJsZXxGQUxTRQ0KPg0KPiBAQCAtNjk3LDYgKzcwMSwxNCBAQA0KPg0KPg0KPiAgIWlm ICQoVkFSSUFCTEVfU1VQUE9SVCkgPT0gIkVNVSINCj4NCj4gICAgTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUR4ZS5pbmYNCj4NCj4gKyFl bHNlaWYgJChWQVJJQUJMRV9TVVBQT1JUKSA9PSAiU01NU1RPUkUiDQo+DQo+ICsgIFVlZmlQYXls b2FkUGtnL1NtbVN0b3JlRnZiL1NtbVN0b3JlRnZiUnVudGltZUR4ZS5pbmYNCj4NCj4gKyAgTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9GYXVsdFRvbGVyYW50V3JpdGVEeGUvRmF1bHRUb2xlcmFudFdy aXRlRHhlLmluZg0KPg0KPiArICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRp bWVEeGUvVmFyaWFibGVSdW50aW1lRHhlLmluZiB7DQo+DQo+ICsgICAgPExpYnJhcnlDbGFzc2Vz Pg0KPg0KPiArICAgICAgTlVMTHxNZGVNb2R1bGVQa2cvTGlicmFyeS9WYXJDaGVja1VlZmlMaWIv VmFyQ2hlY2tVZWZpTGliLmluZg0KPg0KPiArICAgICAgTlVMTHxFbWJlZGRlZFBrZy9MaWJyYXJ5 L052VmFyU3RvcmVGb3JtYXR0ZWRMaWIvTnZWYXJTdG9yZUZvcm1hdHRlZExpYi5pbmYNCj4NCj4g KyAgfQ0KPg0KPiAgIWVsc2VpZiAkKFZBUklBQkxFX1NVUFBPUlQpID09ICJTUEkiDQo+DQo+ICAg IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZVNtbS5p bmYgew0KPg0KPiAgICAgIDxMaWJyYXJ5Q2xhc3Nlcz4NCj4NCj4gZGlmZiAtLWdpdCBhL1VlZmlQ YXlsb2FkUGtnL1VlZmlQYXlsb2FkUGtnLmZkZiBiL1VlZmlQYXlsb2FkUGtnL1VlZmlQYXlsb2Fk UGtnLmZkZg0KPiBpbmRleCBjN2IwNDk3OGFkLi5jYTQ0ZjQ4ZjZkIDEwMDY0NA0KPiAtLS0gYS9V ZWZpUGF5bG9hZFBrZy9VZWZpUGF5bG9hZFBrZy5mZGYNCj4gKysrIGIvVWVmaVBheWxvYWRQa2cv VWVmaVBheWxvYWRQa2cuZmRmDQo+IEBAIC0xNDAsNiArMTQwLDEwIEBAIElORiBQY0F0Q2hpcHNl dFBrZy9QY2F0UmVhbFRpbWVDbG9ja1J1bnRpbWVEeGUvUGNhdFJlYWxUaW1lQ2xvY2tSdW50aW1l RHhlLmluZg0KPg0KPg0KPiAgIWlmICQoVkFSSUFCTEVfU1VQUE9SVCkgPT0gIkVNVSINCj4NCj4g ICAgSU5GIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJs ZVJ1bnRpbWVEeGUuaW5mDQo+DQo+ICshZWxzZWlmICQoVkFSSUFCTEVfU1VQUE9SVCkgPT0gIlNN TVNUT1JFIg0KPg0KPiArICBJTkYgVWVmaVBheWxvYWRQa2cvU21tU3RvcmVGdmIvU21tU3RvcmVG dmJSdW50aW1lRHhlLmluZg0KPg0KPiArICBJTkYgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9GYXVs dFRvbGVyYW50V3JpdGVEeGUvRmF1bHRUb2xlcmFudFdyaXRlRHhlLmluZg0KPg0KPiArICBJTkYg TWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGlt ZUR4ZS5pbmYNCj4NCj4gICFlbHNlaWYgJChWQVJJQUJMRV9TVVBQT1JUKSA9PSAiU1BJIg0KPg0K PiAgICBJTkYgVWVmaVBheWxvYWRQa2cvRnZiUnVudGltZUR4ZS9GdmJTbW0uaW5mDQo+DQo+ICAg IElORiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0ZhdWx0VG9sZXJhbnRXcml0ZUR4ZS9GYXVsdFRv bGVyYW50V3JpdGVTbW0uaW5mDQo+DQo+IC0tDQo+IDIuMzIuMA0KPg0KDQoNCg0KDQoNCg==