From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mx.groups.io with SMTP id smtpd.web11.8106.1616167998667383778 for ; Fri, 19 Mar 2021 08:33:19 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=of97puv8; spf=pass (domain: intel.com, ip: 192.55.52.136, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: aGtdpBDHdeHSkgeFSC/XRRkEA2b8BP2EE5T82SAq+QsRaZLdsHxqQ5hv0nGPZ4ME/Aq540qogM tj8aEU+vuuaw== X-IronPort-AV: E=McAfee;i="6000,8403,9928"; a="169218912" X-IronPort-AV: E=Sophos;i="5.81,262,1610438400"; d="scan'208";a="169218912" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Mar 2021 08:33:16 -0700 IronPort-SDR: b7WpIYoH66jLSdlUqydzmAXQzcAjdgDiDOnAWKeowMFQSbbsU/gLzb4cJy12hLPda7NHp4xZKb F1pR28lPYySw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,262,1610438400"; d="scan'208";a="380211062" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga007.fm.intel.com with ESMTP; 19 Mar 2021 08:33:16 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) 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.2106.2; Fri, 19 Mar 2021 08:33:16 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Fri, 19 Mar 2021 08:33:15 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Fri, 19 Mar 2021 08:33:15 -0700 Received: from NAM04-CO1-obe.outbound.protection.outlook.com (104.47.45.55) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Fri, 19 Mar 2021 08:33:15 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m6dE/EXM08TMMm0FNrYg6hUxfu7cFIekhd/FaakW3H7Kg8mEJi22nBcUJiQLRBk+1ex8N+tPD7b2w+KH2idQONfpqP78+EHk1pLUx2JNeNtVxog/d2B3kbLsepvZ+y8XZf3HVKtJs9bWVji85nElY7u7Qfoi98ykmOzQD/pfDAPspVVHtCar9AQ7bDtPiQliipwhFCr+nhQDNwlB9Tpb0WhMPCk5aAduRwVFl7dslcZZLFx/yJllp3i/5TyqTTNUNed4Dn656wybPX2zqIpuQ7FxcYlmhUrt0Cy3oOpvUHGpT1pEM7+YwqC+z6a/kQZ6RjNq4zzfQJ39YPMadEN6Vg== 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-SenderADCheck; bh=TvNNm2NFzdUAp2WBZ17fkANAmoOPdv2DxfDJJ5fLtzk=; b=bYkZqYpyWmKRWQlYEEo2cRJNPE027sFxnKh8pMPLxHQCsEvbVngxBB5TDmzFPRKiHjYHybLROmG4ZRyczREEXqupJShTTSPOPQpYIZV6er9B9+mEKp/fM7r9AlHlM0GNSyeMZ5wekPBOq7EEHxRaF1PvGMi9ehHmxUtKmPb/+DanZmcHtiwuP0Tu5w7JPZDz2FMpVIr4EoYnPLuCp0trWi2ec4VXRk3WhMZT6Mi4gdpxVRL9jUe3ENHNqXxB3BVMuCbTIKtlX/SqdhDSnErMHMDqce6knASRNrYcwGpCHETVbYo5Uic/43Xi5wLBXfTr6eoFm2venmZcM7EGM/3luQ== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TvNNm2NFzdUAp2WBZ17fkANAmoOPdv2DxfDJJ5fLtzk=; b=of97puv8tcNsAAK+8cJ2wxIZAQcGrNX+QsYu/FbgmYditGjuoX9K0UNRXTVZF/SwmDUs4vN0fbaE7lNwSlyzkhGozb8gtnO4dpSjwE8wJVJ2t2EqU7YtcY/IhcXH9HxtGAu2N34aEoUEvEE4jPKPJE2dCUGy7PmKO/tAOw0bZfI= Received: from CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by MWHPR11MB1455.namprd11.prod.outlook.com (2603:10b6:301:9::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.31; Fri, 19 Mar 2021 15:33:10 +0000 Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ddb6:ec7f:2548:efdc]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ddb6:ec7f:2548:efdc%4]) with mapi id 15.20.3955.018; Fri, 19 Mar 2021 15:33:10 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "Loh, Tien Hock" , "Kinney, Michael D" CC: "thloh85@gmail.com" , Leif Lindholm , Ard Biesheuvel Subject: Re: [edk2-devel] [PATCH V4 1/1] EmbeddedPkg: DwMmcHcDxe: Add support for Designware SDMMC driver Thread-Topic: [edk2-devel] [PATCH V4 1/1] EmbeddedPkg: DwMmcHcDxe: Add support for Designware SDMMC driver Thread-Index: AQHXHJkWY3dtcDh8x0mObQORSE+Bt6qLb9GA Date: Fri, 19 Mar 2021 15:33:10 +0000 Message-ID: References: <20210319082216.34366-1-tien.hock.loh@intel.com> <20210319082216.34366-2-tien.hock.loh@intel.com> In-Reply-To: <20210319082216.34366-2-tien.hock.loh@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [24.19.191.44] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a6bd4ad9-9a52-4ee9-2b9a-08d8eaec4d79 x-ms-traffictypediagnostic: MWHPR11MB1455: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iV7L1pFriyrchzZRshZKE7RycsLiEY5VjGayzlLi5JkSKwgrkfuQlqoFmskWVhE5RsXVl6ra8vri2gTabeN8VB4mHDcoWLUURtcACe/PaSIQPj0QWTzCGJBShPACwTy/ZEqgD2sUxykcvokKUw8SaGN55J3anKpefH4ckwQPQenUpj/OWifkBd9l4tKHl00Jt6VBfdFW0UVjNTAKpPsYzi0YLkpBTvyBpThJdY0WCAidvMucUByyymsXUDly5hJSGjquoxUoTX5prRmQmz2AoQZEHVSJypzCww9tkOC4OxDKLdKH0RvltO9qc/Kr8mP4z4ZjJpT2v1r+uWCtJsyyd0rml5+HzoiVX2I/t/pbs5LPpFr7wwDTby1sqDYtpyXdPvf1IUC73AAvdUuQ7e5q3Nk+IW2soay7D7TUA4n/KGBum9e5hNjBpim8lW0/nUVdxVuX2IDX8trmV20Fh5CgSPDERtBG8/uuWJx0cGVZZYlBaMuodYqrGjhbEm6NqY6LK5V0lcbL01dVHEhKxzDJwO3r1FfXF6blgEkmV++RUmESfXv/M6bFgMpJr2Ie3/P1m1M11WAIulnOcNLIAl389ilNMHUVcn05d5otWRP28D/rXT5i9DwoZcICrc3xDfc4DSOiETYciuge85LzEfiNiwue8HpXAEfZ0OR3ZTLhuqT4eAzhp+squa8de9/QadhyCyFBk9q1oSIXeDqyLtqRTyx4/LLFv0/Nu6xrbxNTaEDrKAwYjqrtdAa9fYWX+d1oyJjUkO4jwvrNJTlHBPkAcFEf1Y9GN+eIgR9fbFJIdRs= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4929.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(6029001)(136003)(39860400002)(366004)(346002)(396003)(376002)(66556008)(66446008)(64756008)(16799955002)(26005)(2906002)(5660300002)(478600001)(8936002)(52536014)(4326008)(186003)(66476007)(83380400001)(66946007)(15188155005)(76116006)(71200400001)(966005)(7696005)(8676002)(55016002)(6506007)(86362001)(53546011)(19627235002)(38100700001)(33656002)(9686003)(316002)(54906003)(110136005)(30864003)(290074003)(569008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?R3RBK0tBNTU1NUd1YURVbWZjbHc5Y3NsYzJ5STlqbWJtc0tlTDgxUW9PQks1?= =?utf-8?B?TlJFOHRIRXNCQVhPL2pUTit3cmlDVksvdVdSMTFyVmJpeUpZVDhxUGI3Zm8z?= =?utf-8?B?Rkx6Qm93bTdsMCtETU5kanVUajdmSTRFNVRackI2UmVUVDc5NGtvR2E3TUxP?= =?utf-8?B?WmJmTzBObHh6SyttS1FIdGVzNWhnczNPOVB4RnV4S2hBSlZ1QjhKbjJzRGVX?= =?utf-8?B?SEc4MDBRRkVUeEtKdmxzTHJnNEwvOFJTRHpDbDBRRWlzaWVnY01GT2pQd0hY?= =?utf-8?B?bVNzUHRxbDMxQ2hkWGpqZ2hPQ1JaVnBsUFNNcDQwTmJDWEs4cnVEZzJJRTNw?= =?utf-8?B?ajI5SjFPTFA2eFN5YUV5Sy9ZaEZQN3VtTUlzb3Fma204dC9Xb2g5WFpUTFlU?= =?utf-8?B?UXdiZkkxd21ibjY4R3RWWWpQZjRjMGRWaDd1V1dvYmpic0luNjQxdHZocXo4?= =?utf-8?B?ajdPNC9RYWJoNnNJYlVNNjNuM3RqU05zV3RYSXdzdVdnMTN1L2FaVlE5cGtu?= =?utf-8?B?MTJmSzVHaVJ6dkswbk53QmRKTlVCSXFTcXVxSlFHU1B2UXdvOWdhNjc5dnR4?= =?utf-8?B?Y1F5d0JyYUptRXRJTlFuMzZFeUl0WkthVE5NOXRZQ2Q3UnJtaGlTdUZUTGlV?= =?utf-8?B?cDVDd0ZsYk9OMElXaVV0MFZJM1kzOWJzQXVtVnNqOVBqM0NLWlprblN0eXFE?= =?utf-8?B?d2N2aEhuZDE2SWc2MnVJWnhsT2ZFUEZTRzlmYWdjM1R5T2I1SUo3VnZzcmho?= =?utf-8?B?cHVXYnJBN1AxR0dLUlBEdFFPQkdUakFsK3NmMlA2b0VEU2pWbmJLNVBrWnp5?= =?utf-8?B?My9NMVhlcXQyYkg5ZDVyQllKQnMralBJYlRRZ1Fwcnpla3I3TXd0VE5uQXBY?= =?utf-8?B?OUtTU256OHB0cURNbWI2OHhhR3QyRGZvTW9uVS9ZMFRMTi9HVllyWUdlZFBE?= =?utf-8?B?a3ZUR1I0a2xsSVhNRXM5dGM3VE5ucURkbUl5NE1pNWFmSzNqWVljSmRVVjdy?= =?utf-8?B?alBoUVdtVmdRdTFjUll1Zzk0OGQ3dnpoNFVVR05XSXh4ZzJUbVBKVWNEcTFK?= =?utf-8?B?UzVqSDZ0WjRTUGtSckZCcUhjSnZ4WXVHRktQK3MvN1Z4RVNYVDhGdG54VGNH?= =?utf-8?B?cmNmdlFTcDJpSnVZdEV0akRkRmZxMGh0TEtadTdxZjF4N3FhaWlaRDFoU2Jp?= =?utf-8?B?MklGOSswaDRPYTVKbjhhN0ljVmxtcjlzUXFDY29yN2pXeWNRN2J3NGswY0J3?= =?utf-8?B?SnZDQjQ0Sm8veStFdFl4YytZVmRicEN6aDlNS2g0ak9GSmUrRmZZdS9TZVZU?= =?utf-8?B?TkllZVdYcVNUYU83MWl4NE00YXBnWjY4aHVqcXdkU1VNbTA0bC9GSC9BT1Nz?= =?utf-8?B?eGQ1QXF2eVRWNUkxUDA3blBidlVqU2tYTmEra1BwWkVGQnR6NUg3RG04NHpq?= =?utf-8?B?cVFiNEk2L0lWdHREVkhrL1NteVR3alg5TFRhM2I1L2JqQUFVYjJiMmhmRlRK?= =?utf-8?B?SEFaMVlUWEFvc1cyN0YzTHZHNWlRY2FoTGtRWjhibllrTWl1VE14RVZ4M2Nm?= =?utf-8?B?bUtNVVNOaDBOL0dYVUJ1c05zbWNYZ25MWkYvUTlEWTdFYlhNZ3VGV0E0WXFx?= =?utf-8?B?eDVtZC9vZTRnYlo1ZHU4Um5LQkNQZWxPdkg4SFdBN3pYcTRGVW4yTjNtRkgr?= =?utf-8?B?MXN5RHI0UVB4NXFBekt2UFBpazVBK0wyOWRYZzM5N2ZYaHh1UnZUbjVaVG9p?= =?utf-8?Q?9SvZEeqrZih14lve2Y=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6bd4ad9-9a52-4ee9-2b9a-08d8eaec4d79 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2021 15:33:10.3772 (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: GQiHFiQvYdNUU9F9GVt4gSb+W3MJyBrcLJU0gnmPJm6cdS5FLG93FZNtYba/myuOYoG63IabQ3Ll5au3BIFx1Y1DWc1SAo+J5ermFW3PtLw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1455 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGVsbG8sDQoNClRoZSBtYWpvcml0eSBvZiB0aGUgRURLIElJIGZpbGVzIHVzZSBCU0QgMi1DbGF1 c2UgUGx1cyBQYXRlbnQgbGljZW5zZSB3aXRoIFNQRFggaWRlbnRpZmllcnMgaW4gdGhlIHNvdXJj ZSBmaWxlIGhlYWRlcnM6DQoNCglodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIjbGlj ZW5zZS1kZXRhaWxzDQoJaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFz dGVyL0xpY2Vuc2UudHh0DQoJIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KDQpDYW4gdGhpcyBjb250ZW50IGJlIHVwZGF0ZWQgdG8gdXNlIHRoYXQgbGljZW5z ZSBhbmQgZmlsZSBoZWFkZXIgc3R5bGU/DQoNClRoYW5rcywNCg0KTWlrZQ0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBl ZGsyLmdyb3Vwcy5pbz4gT24gQmVoYWxmIE9mIExvaCwgVGllbiBIb2NrDQo+IFNlbnQ6IEZyaWRh eSwgTWFyY2ggMTksIDIwMjEgMToyMiBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4g Q2M6IExvaCwgVGllbiBIb2NrIDx0aWVuLmhvY2subG9oQGludGVsLmNvbT47IHRobG9oODVAZ21h aWwuY29tOyBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT47IEFyZCBCaWVzaGV1dmVs DQo+IDxhcmRiK3RpYW5vY29yZUBrZXJuZWwub3JnPg0KPiBTdWJqZWN0OiBbZWRrMi1kZXZlbF0g W1BBVENIIFY0IDEvMV0gRW1iZWRkZWRQa2c6IER3TW1jSGNEeGU6IEFkZCBzdXBwb3J0IGZvciBE ZXNpZ253YXJlIFNETU1DIGRyaXZlcg0KPiANCj4gRnJvbTogIlRpZW4gSG9jaywgTG9oIiA8dGll bi5ob2NrLmxvaEBpbnRlbC5jb20+DQo+IA0KPiBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRGVzaWdu d2FyZSBTRE1NQyBkcml2ZXIuIFRoZSBTRE1NQyBkcml2ZXIgZGVwZW5kcyBvbg0KPiBNZGVNb2R1 bGVQa2cvQnVzL1NkLywgYW5kIHByb2R1Y2VzIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09M LiBUaGUNCj4gZHJpdmVyIHVzZXMgTU1JTyB0byByZWFkL3dyaXRlLCBhbmQgdXNlcw0KPiBnRWRr aWlOb25EaXNjb3ZlcmFibGVEZXZpY2VQcm90b2NvbEd1aWQuIFBsYXRmb3JtIG5lZWRzIHRvIHJl Z2lzdGVyIGRldmljZQ0KPiB3aXRoIGdFZGtpaU5vbkRpc2NvdmVyYWJsZURldmljZVByb3RvY29s R3VpZC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IExvaCBUaWVuIEhvY2sgPHRpZW4uaG9jay5sb2hA aW50ZWwuY29tPg0KPiBDYzogTGVpZiBMaW5kaG9sbSA8bGVpZkBudXZpYWluYy5jb20+DQo+IENj OiBBcmQgQmllc2hldXZlbCA8YXJkYit0aWFub2NvcmVAa2VybmVsLm9yZz4NCj4gLS0tDQo+ICBF bWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5kZWMgIHwgICA0MCArDQo+ ICBFbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5pbmYgIHwgICA3MCAr DQo+ICBFbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5oICAgIHwgIDgx NyArKysrKysrKysrDQo+ICBFbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY2ku aCAgICAgIHwgIDk4NSArKysrKysrKysrKysNCj4gIEVtYmVkZGVkUGtnL0luY2x1ZGUvUHJvdG9j b2wvUGxhdGZvcm1Ed01tYy5oICAgfCAgIDc5ICsNCj4gIEVtYmVkZGVkUGtnL0RyaXZlcnMvRHdN bWNIY0R4ZS9Db21wb25lbnROYW1lLmMgfCAgMjE0ICsrKw0KPiAgRW1iZWRkZWRQa2cvRHJpdmVy cy9Ed01tY0hjRHhlL0R3TW1jSGNEeGUuYyAgICB8IDEyOTYgKysrKysrKysrKysrKysrKw0KPiAg RW1iZWRkZWRQa2cvRHJpdmVycy9Ed01tY0hjRHhlL0R3TW1jSGNpLmMgICAgICB8IDE2MDIgKysr KysrKysrKysrKysrKysrKysNCj4gIEVtYmVkZGVkUGtnL0RyaXZlcnMvRHdNbWNIY0R4ZS9FbW1j RGV2aWNlLmMgICAgfCAxMDQyICsrKysrKysrKysrKysNCj4gIEVtYmVkZGVkUGtnL0RyaXZlcnMv RHdNbWNIY0R4ZS9TZERldmljZS5jICAgICAgfCAxMTA1ICsrKysrKysrKysrKysrDQo+ICAxMCBm aWxlcyBjaGFuZ2VkLCA3MjUwIGluc2VydGlvbnMoKykNCj4gDQo+IGRpZmYgLS1naXQgYS9FbWJl ZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5kZWMgYi9FbWJlZGRlZFBrZy9E cml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5kZWMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jZjg1Y2NiMWEwMzANCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9FbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5kZWMNCj4gQEAg LTAsMCArMSw0MCBAQA0KPiArIy8qKiBAZmlsZQ0KPiArIyBGcmFtZXdvcmsgTW9kdWxlIERldmVs b3BtZW50IEVudmlyb25tZW50IEluZHVzdHJ5IFN0YW5kYXJkcw0KPiArIw0KPiArIyBUaGlzIFBh Y2thZ2UgcHJvdmlkZXMgaGVhZGVycyBhbmQgbGlicmFyaWVzIHRoYXQgY29uZm9ybSB0byBFRkkv UEkgSW5kdXN0cnkgc3RhbmRhcmRzLg0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMDcsIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgQ29weXJpZ2h0IChjKSAy MDEyLTIwMTQsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyBDb3B5cmln aHQgKGMpIDIwMTgsIExpbmFyby4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjDQo+ICsj ICAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vu c2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlcg0KPiArIyAgICB0aGUgdGVybXMgYW5kIGNvbmRp dGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLg0KPiArIyAgICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBh dA0KPiArIyAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhw DQo+ICsjDQo+ICsjICAgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0Qg TElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE Lg0KPiArIw0KPiArIyoqLw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgREVDX1NQRUNJRklDQVRJ T04gICAgICAgICAgICAgID0gMHgwMDAxMDAxOQ0KPiArICBQQUNLQUdFX05BTUUgICAgICAgICAg ICAgICAgICAgPSBEd01tY0hjRHhlUGtnDQo+ICsgIFBBQ0tBR0VfR1VJRCAgICAgICAgICAgICAg ICAgICA9IGU3MzA5N2NlLTFmZTItNDFhNi1hOTMwLTMxMzZiYzZkMjNlZg0KPiArICBQQUNLQUdF X1ZFUlNJT04gICAgICAgICAgICAgICAgPSAwLjENCj4gKw0KPiArDQo+ICsjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIw0KPiArIw0KPiArIyBJbmNsdWRlIFNlY3Rpb24gLSBsaXN0IG9mIEluY2x1ZGUg UGF0aHMgdGhhdCBhcmUgcHJvdmlkZWQgYnkgdGhpcyBwYWNrYWdlLg0KPiArIyAgICAgICAgICAg ICAgICAgICBDb21tZW50cyBhcmUgdXNlZCBmb3IgS2V5d29yZHMgYW5kIE1vZHVsZSBUeXBlcy4N Cj4gKyMNCj4gKyMgU3VwcG9ydGVkIE1vZHVsZSBUeXBlczoNCj4gKyMgIEJBU0UgU0VDIFBFSV9D T1JFIFBFSU0gRFhFX0NPUkUgRFhFX0RSSVZFUiBEWEVfUlVOVElNRV9EUklWRVIgRFhFX1NNTV9E UklWRVIgRFhFX1NBTF9EUklWRVIgVUVGSV9EUklWRVINCj4gVUVGSV9BUFBMSUNBVElPTg0KPiAr Iw0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gKw0KPiArW0d1aWRzLmNvbW1vbl0NCj4g KyAgZ0R3TW1jSGNEeGVUb2tlblNwYWNlR3VpZCAgICAgPSB7IDB4NTc2YzEzMmUsIDB4N2Q1MSwg MHg0YWJiLCB7IDB4YmMsIDB4NjAsIDB4MTMsIDB4MDgsIDB4MDQsIDB4MGUsIDB4OTAsIDB4OTIg fX0NCj4gKw0KPiArW1Byb3RvY29scy5jb21tb25dDQo+ICsgIGdQbGF0Zm9ybUR3TW1jUHJvdG9j b2xHdWlkICAgID0geyAweDFkNmRmZGU1LCAweDc2YTcsIDB4NDQwNCwgeyAweDg1LCAweDc0LCAw eDdhLCAweGRmLCAweDFhLCAweDhhLCAweGEyLCAweDBkIH19DQo+IGRpZmYgLS1naXQgYS9FbWJl ZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5pbmYgYi9FbWJlZGRlZFBrZy9E cml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5pbmYNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40Y2QwOTYwZWY5YzMNCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9FbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5pbmYNCj4gQEAg LTAsMCArMSw3MCBAQA0KPiArIyMgQGZpbGUNCj4gKyMgIER3U2RNbWNIY0R4ZSBkcml2ZXIgaXMg dXNlZCB0byBtYW5hZ2UgdGhvc2UgaG9zdCBjb250cm9sbGVycyB3aGljaCBjb21wbHkgd2l0aA0K PiArIyAgRGVzaWdud2FyZSBTRCBIb3N0IENvbnRyb2xsZXIuDQo+ICsjDQo+ICsjICBJdCB3aWxs IHByb2R1Y2UgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgdG8gYWxsb3cgc2VuZGluZyBT RC9NTUMvZU1NQyBjbWRzDQo+ICsjICB0byBzcGVjaWZpZWQgZGV2aWNlcyBmcm9tIHVwcGVyIGxh eWVyLg0KPiArIw0KPiArIyAgQ29weXJpZ2h0IChjKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjICBDb3B5cmlnaHQgKEMpIDIwMTYsIE1hcnZl bGwgSW50ZXJuYXRpb25hbCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyAgQ29w eXJpZ2h0IChjKSAyMDE4LCBMaW5hcm8gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g KyMNCj4gKyMgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4g KyMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5k IGF0DQo+ICsjICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhw DQo+ICsjICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0Ug T04gQU4gIkFTIElTIiBCQVNJUywNCj4gKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsjDQo+ ICsjDQo+ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAg ICAgICAgICAgID0gMHgwMDAxMDAxOQ0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAg ICAgPSBEd01tY0hjRHhlDQo+ICsgIE1PRFVMRV9VTklfRklMRSAgICAgICAgICAgICAgICA9IER3 TW1jSGNEeGUudW5pDQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDliZTRk MjYwLTIwOGMtNGVmZS1hNTI0LTBiNWQzYmY3N2Y5ZA0KPiArICBNT0RVTEVfVFlQRSAgICAgICAg ICAgICAgICAgICAgPSBVRUZJX0RSSVZFUg0KPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAg ICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gSW5pdGlh bGl6ZUR3TW1jSGNEeGUNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIENvbXBvbmVudE5hbWUuYw0K PiArICBEd01tY0hjRHhlLmMNCj4gKyAgRHdNbWNIY0R4ZS5oDQo+ICsgIER3TW1jSGNpLmMNCj4g KyAgRHdNbWNIY2kuaA0KPiArICBFbW1jRGV2aWNlLmMNCj4gKyAgU2REZXZpY2UuYw0KPiArDQo+ ICtbUGFja2FnZXNdDQo+ICsgIEFybVBrZy9Bcm1Qa2cuZGVjDQo+ICsgIEVtYmVkZGVkUGtnL0Ry aXZlcnMvRHdNbWNIY0R4ZS9Ed01tY0hjRHhlLmRlYw0KPiArICBFbWJlZGRlZFBrZy9FbWJlZGRl ZFBrZy5kZWMNCj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKyAgTWRlUGtn L01kZVBrZy5kZWMNCj4gKw0KPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiArICBBcm1MaWINCj4gKyAg QmFzZUxpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsgIENhY2hlTWFpbnRlbmFuY2VMaWINCj4g KyAgRGVidWdMaWINCj4gKyAgRGV2aWNlUGF0aExpYg0KPiArICBEbWFMaWINCj4gKyAgTWVtb3J5 QWxsb2NhdGlvbkxpYg0KPiArICBUaW1lckxpYg0KPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVM aWINCj4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4gKyAgVWVmaUxpYg0KPiArICBVZWZpUnVu dGltZVNlcnZpY2VzVGFibGVMaWINCj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAgZ0Vka2lpTm9u RGlzY292ZXJhYmxlRGV2aWNlUHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlEZXZpY2VQYXRoUHJvdG9j b2xHdWlkICAgICAgICAgICAgICAgICAgICAjIyBUT19TVEFSVA0KPiArICBnRWZpUGNpSW9Qcm90 b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgIyMgVE9fU1RBUlQNCj4gKyAgZ0VmaVNk TW1jUGFzc1RocnVQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICMjIEJZX1NUQVJUDQo+ICsg IGdQbGF0Zm9ybUR3TW1jUHJvdG9jb2xHdWlkDQo+ICsNCj4gK1tVc2VyRXh0ZW5zaW9ucy5UaWFu b0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiArICBEd01tY0hjRHhlRXh0cmEudW5pDQo+IGRpZmYgLS1n aXQgYS9FbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY0R4ZS5oIGIvRW1iZWRk ZWRQa2cvRHJpdmVycy9Ed01tY0hjRHhlL0R3TW1jSGNEeGUuaA0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmI3ODNkOTgzMDMyNQ0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL0VtYmVkZGVkUGtnL0RyaXZlcnMvRHdNbWNIY0R4ZS9Ed01tY0hjRHhlLmgNCj4g QEAgLTAsMCArMSw4MTcgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIFByb3ZpZGVzIHNvbWUg ZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgRGVzaWdud2FyZSBTRC9NTUMN Cj4gKyAgaG9zdCBjb250cm9sbGVyIGRyaXZlci4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIw MTUsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29w eXJpZ2h0IChDKSAyMDE4LCBMaW5hcm8gTHRkLiBBbGwgcmlndGhzIHJlc2VydmVkLjxCUj4NCj4g Kw0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBs aWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUNCj4gKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZSB3aGljaCBhY2NvbXBhbmllcyB0aGlzDQo+ICsgIGRp c3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0 DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4g Kw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0Ug T04gQU4gIkFTIElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiAr KiovDQo+ICsNCj4gKyNpZm5kZWYgX0RXX01NQ19IQ19EWEVfSF8NCj4gKyNkZWZpbmUgX0RXX01N Q19IQ19EWEVfSF8NCj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKw0KPiArI2luY2x1ZGUg PExpYnJhcnkvVWVmaUxpYi5oPg0KPiArDQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvQ29tcG9uZW50 TmFtZS5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL0NvbXBvbmVudE5hbWUyLmg+DQo+ICsjaW5j bHVkZSA8UHJvdG9jb2wvRGV2aWNlSW8uaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Ecml2ZXJC aW5kaW5nLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvU2RNbWNQYXNzVGhydS5oPg0KPiArDQo+ ICsjaW5jbHVkZSAiRHdNbWNIY2kuaCINCj4gKw0KPiArZXh0ZXJuIEVGSV9DT01QT05FTlRfTkFN RV9QUk9UT0NPTCAgZ0R3TW1jSGNDb21wb25lbnROYW1lOw0KPiArZXh0ZXJuIEVGSV9DT01QT05F TlRfTkFNRTJfUFJPVE9DT0wgZ0R3TW1jSGNDb21wb25lbnROYW1lMjsNCj4gK2V4dGVybiBFRklf RFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdEd01tY0hjRHJpdmVyQmluZGluZzsNCj4gKw0KPiAr I2RlZmluZSBEV19NTUNfSENfUFJJVkFURV9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMiAoJ2QnLCAn dycsICdzJywgJ2QnKQ0KPiArDQo+ICsjZGVmaW5lIERXX01NQ19IQ19QUklWQVRFX0ZST01fVEhJ UyhhKSBcDQo+ICsgICAgQ1IoYSwgRFdfTU1DX0hDX1BSSVZBVEVfREFUQSwgUGFzc1RocnUsIERX X01NQ19IQ19QUklWQVRFX1NJR05BVFVSRSkNCj4gKw0KPiArLy8NCj4gKy8vIEdlbmVyaWMgdGlt ZSBvdXQgdmFsdWUsIDEgbWljcm9zZWNvbmQgYXMgdW5pdC4NCj4gKy8vDQo+ICsjZGVmaW5lIERX X01NQ19IQ19HRU5FUklDX1RJTUVPVVQgICAgICgxICogMTAwMCAqIDEwMDApDQo+ICsNCj4gKy8v DQo+ICsvLyBTRC9NTUMgYXN5bmMgdHJhbnNmZXIgdGltZXIgaW50ZXJ2YWwsIHNldCBieSBleHBl cmllbmNlLg0KPiArLy8gVGhlIHVuaXQgaXMgMTAwdXMsIHRha2VzIDFtcyBhcyBpbnRlcnZhbC4N Cj4gKy8vDQo+ICsjZGVmaW5lIERXX01NQ19IQ19BU1lOQ19USU1FUiAgICAgICAgIEVGSV9USU1F Ul9QRVJJT0RfTUlMTElTRUNPTkRTKDEpDQo+ICsvLw0KPiArLy8gU0QvTU1DIHJlbW92YWJsZSBk ZXZpY2UgZW51bWVyYXRpb24gdGltZXIgaW50ZXJ2YWwsIHNldCBieSBleHBlcmllbmNlLg0KPiAr Ly8gVGhlIHVuaXQgaXMgMTAwdXMsIHRha2VzIDEwMG1zIGFzIGludGVydmFsLg0KPiArLy8NCj4g KyNkZWZpbmUgRFdfTU1DX0hDX0VOVU1fVElNRVIgICAgICAgICAgRUZJX1RJTUVSX1BFUklPRF9N SUxMSVNFQ09ORFMoMTAwKQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZTsNCj4gKyAgRUZJX1NEX01NQ19TTE9U X1RZUEUgICAgICAgICAgICAgICAgU2xvdFR5cGU7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1lZGlhUHJlc2VudDsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSW5pdGlhbGl6ZWQ7DQo+ICsgIFNEX01NQ19DQVJEX1RZUEUgICAgICAg ICAgICAgICAgICAgIENhcmRUeXBlOw0KPiArfSBEV19NTUNfSENfU0xPVDsNCj4gKw0KPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT aWduYXR1cmU7DQo+ICsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZTsNCj4gKw0KPiArICAvLyBNbWlvIGJhc2UgYWRkcmVzcw0KPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZCYXNlOw0KPiArDQo+ICsgIEVG SV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MICAgICAgIFBhc3NUaHJ1Ow0KPiArDQo+ICsgIFBM QVRGT1JNX0RXX01NQ19QUk9UT0NPTCAgICAgICAgICAgICpQbGF0Zm9ybUR3TW1jOw0KPiArICAv Lw0KPiArICAvLyBUaGUgZmllbGQgaXMgdXNlZCB0byByZWNvcmQgdGhlIHByZXZpb3VzIHNsb3Qg aW4gR2V0TmV4dFNsb3QoKS4NCj4gKyAgLy8NCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHJldmlvdXNTbG90Ow0KPiArICAvLw0KPiArICAvLyBGb3IgTm9uLWJsb2Nr aW5nIG9wZXJhdGlvbi4NCj4gKyAgLy8NCj4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGltZXJFdmVudDsNCj4gKyAgLy8NCj4gKyAgLy8gRm9yIFNkIHJlbW92YWJsZSBk ZXZpY2UgZW51bWVyYXRpb24uDQo+ICsgIC8vDQo+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAg ICAgICAgICAgICAgIENvbm5lY3RFdmVudDsNCj4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAg ICAgICAgICAgICAgUXVldWU7DQo+ICsNCj4gKyAgRFdfTU1DX0hDX1NMT1QgICAgICAgICAgICAg ICAgICAgICAgU2xvdFtEV19NTUNfSENfTUFYX1NMT1RdOw0KPiArICBEV19NTUNfSENfU0xPVF9D QVAgICAgICAgICAgICAgICAgICBDYXBhYmlsaXR5W0RXX01NQ19IQ19NQVhfU0xPVF07DQo+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heEN1cnJlbnRbRFdfTU1DX0hD X01BWF9TTE9UXTsNCj4gKw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDb250cm9sbGVyVmVyc2lvbjsNCj4gK30gRFdfTU1DX0hDX1BSSVZBVEVfREFUQTsNCj4gKw0K PiArI2RlZmluZSBEV19NTUNfSENfVFJCX1NJRyAgICAgICAgICAgICBTSUdOQVRVUkVfMzIgKCdE JywgJ1QnLCAnUicsICdCJykNCj4gKw0KPiArLy8NCj4gKy8vIFRSQiAoVHJhbnNmZXIgUmVxdWVz dCBCbG9jaykgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIHRoZSBjbWQgcmVxdWVzdC4NCj4gKy8v DQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNpZ25hdHVyZTsNCj4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAg ICAgVHJiTGlzdDsNCj4gKw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTbG90Ow0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja1Np emU7DQo+ICsNCj4gKyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgKlBhY2tl dDsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGE7DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW47DQo+ICsgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQ7DQo+ICsgIEVGSV9QSFlTSUNBTF9B RERSRVNTICAgICAgICAgICAgICAgIERhdGFQaHk7DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpEYXRhTWFwOw0KPiArICBEV19NTUNfSENfVFJBTlNGRVJfTU9ERSAg ICAgICAgICAgICBNb2RlOw0KPiArDQo+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgICAg ICAgICAgIEV2ZW50Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT dGFydGVkOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0 Ow0KPiArDQo+ICsgIERXX01NQ19IQ19ETUFfREVTQ19MSU5FICAgICAgICAgICAgICpEbWFEZXNj Ow0KPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgICBEbWFEZXNjUGh5Ow0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEbWFEZXNjUGFnZXM7DQo+ ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpEbWFNYXA7DQo+ICsNCj4g KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlRmlmbzsNCj4gKyAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlQkU7ICAgICAgICAgICAgICAgICAg Ly8gQmlnLWVuZGlhbg0KPiArDQo+ICsgIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAg ICAgICpQcml2YXRlOw0KPiArfSBEV19NTUNfSENfVFJCOw0KPiArDQo+ICsjZGVmaW5lIERXX01N Q19IQ19UUkJfRlJPTV9USElTKGEpIFwNCj4gKyAgICBDUihhLCBEV19NTUNfSENfVFJCLCBUcmJM aXN0LCBEV19NTUNfSENfVFJCX1NJRykNCj4gKw0KPiArLy8NCj4gKy8vIFRhc2sgZm9yIE5vbi1i bG9ja2luZyBtb2RlLg0KPiArLy8NCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiArICBMSVNUX0VOVFJZICAg ICAgICAgICAgICAgICAgICAgICAgICBMaW5rOw0KPiArDQo+ICsgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNsb3Q7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1B TkRfUEFDS0VUICpQYWNrZXQ7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElzU3RhcnQ7DQo+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2 ZW50Ow0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRyeVRpbWVz Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZpbml0ZVdhaXQ7 DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpNYXA7DQo+ICsgIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpNYXBBZGRyZXNzOw0KPiArfSBEV19N TUNfSENfUVVFVUU7DQo+ICsNCj4gKy8vDQo+ICsvLyBQcm90b3R5cGVzDQo+ICsvLw0KPiArLyoq DQo+ICsgIEV4ZWN1dGUgY2FyZCBpZGVudGlmaWNhdGlvbiBwcm9jZWR1cmUuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSBQcml2YXRlICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIERXX01NQ19IQ19QUklW QVRFX0RBVEEgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBU aGUgY2FyZCBpcyBpZGVudGlmaWVkIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICBUaGUgY2FyZCBjYW4ndCBiZSBpZGVudGlmaWVkLg0KPiArDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKygqRFdNTUNfQ0FSRF9UWVBFX0RFVEVDVF9ST1VUSU5F KSAoDQo+ICsgIElOIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgICAgKlByaXZhdGUN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFNlbmRzIFNEIGNvbW1hbmQgdG8gYW4gU0QgY2Fy ZCB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoZSBTRCBjb250cm9sbGVyLg0KPiArDQo+ICsgIFRoZSBQ YXNzVGhydSgpIGZ1bmN0aW9uIHNlbmRzIHRoZSBTRCBjb21tYW5kIHNwZWNpZmllZCBieSBQYWNr ZXQgdG8gdGhlIFNEDQo+ICsgIGNhcmQgc3BlY2lmaWVkIGJ5IFNsb3QuDQo+ICsNCj4gKyAgSWYg UGFja2V0IGlzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSBTRCBjYXJkLCB0aGVuIEVGSV9TVUND RVNTIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIElmIGEgZGV2aWNlIGVycm9yIG9jY3VycyB3aGls ZSBzZW5kaW5nIHRoZSBQYWNrZXQsIHRoZW4gRUZJX0RFVklDRV9FUlJPUiBpcw0KPiArICByZXR1 cm5lZC4NCj4gKw0KPiArICBJZiBTbG90IGlzIG5vdCBpbiBhIHZhbGlkIHJhbmdlIGZvciB0aGUg U0QgY29udHJvbGxlciwgdGhlbg0KPiArICBFRklfSU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0dXJu ZWQuDQo+ICsNCj4gKyAgSWYgUGFja2V0IGRlZmluZXMgYSBkYXRhIGNvbW1hbmQgYnV0IGJvdGgg SW5EYXRhQnVmZmVyIGFuZCBPdXREYXRhQnVmZmVyIGFyZQ0KPiArICBOVUxMLCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgVGhpcyAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFt W2luXSAgICAgU2xvdCAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRv IHNlbmQgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8u DQo+ICsgIEBwYXJhbVtpbixvdXRdIFBhY2tldCAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgU0Qg Y29tbWFuZCBkYXRhIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgRXZlbnQgICAgICAg ICAgSWYgRXZlbnQgaXMgTlVMTCwgYmxvY2tpbmcgSS9PIGlzIHBlcmZvcm1lZC4gSWYNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQgaXMgbm90IE5VTEwsIHRoZW4gbm9u YmxvY2tpbmcgSS9PIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZv cm1lZCwgYW5kIEV2ZW50IHdpbGwgYmUgc2lnbmFsZWQgd2hlbiB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUGFja2V0IGNvbXBsZXRlcy4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgU0QgQ29tbWFuZCBQYWNrZXQgd2FzIHNlbnQgYnkg dGhlIGhvc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIEEgZGV2aWNlIGVy cm9yIG9jY3VycmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gc2VuZA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGUgU0QgY29tbWFuZCBQYWNrZXQuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIFBhY2tldCwgU2xvdCwgb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSBQ YWNrZXQgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZC4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgUGFja2V0IGRlZmluZXMgYSBkYXRhIGNv bW1hbmQgYnV0IGJvdGgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5EYXRh QnVmZmVyIGFuZCBPdXREYXRhQnVmZmVyIGFyZSBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT19N RURJQSAgICAgICAgICBTRCBEZXZpY2Ugbm90IHByZXNlbnQgaW4gdGhlIFNsb3QuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBjb21tYW5kIGRlc2NyaWJlZCBieSB0aGUg U0QgQ29tbWFuZCBQYWNrZXQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMg bm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBjb250cm9sbGVyLg0KPiArICBAcmV0dmFsIEVGSV9C QURfQlVGRkVSX1NJWkUgICBUaGUgSW5UcmFuc2Zlckxlbmd0aCBvciBPdXRUcmFuc2Zlckxlbmd0 aA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRzIHRoZSBsaW1pdCBz dXBwb3J0ZWQgYnkgU0QgY2FyZCAoIGkuZS4gaWYNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBleGNlZWQgdGhlIExhc3QgTEJBKS4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0R3TW1jUGFzc1RocnVQYXNzVGhy dSAoDQo+ICsgIElOICAgICBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTCAgICAgICAgICpU aGlzLA0KPiArICBJTiAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT bG90LA0KPiArICBJTiBPVVQgRUZJX1NEX01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgICAq UGFja2V0LA0KPiArICBJTiAgICAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFdmVudCAgICBPUFRJT05BTA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVXNlZCB0byBy ZXRyaWV2ZSBuZXh0IHNsb3QgbnVtYmVycyBzdXBwb3J0ZWQgYnkgdGhlIFNEIGNvbnRyb2xsZXIu IFRoZQ0KPiArICBmdW5jdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGFsbCBhdmFpbGFi bGUgc2xvdHMgKHBvcHVsYXRlZCBvcg0KPiArICBub3QtcG9wdWxhdGVkKS4NCj4gKw0KPiArICBU aGUgR2V0TmV4dFNsb3QoKSBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIG5leHQgc2xvdCBudW1iZXIg b24gYW4gU0QgY29udHJvbGxlci4NCj4gKyAgSWYgb24gaW5wdXQgU2xvdCBpcyAweEZGLCB0aGVu IHRoZSBzbG90IG51bWJlciBvZiB0aGUgZmlyc3Qgc2xvdCBvbiB0aGUgU0QNCj4gKyAgY29udHJv bGxlciBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBJZiBTbG90IGlzIGEgc2xvdCBudW1iZXIgdGhh dCB3YXMgcmV0dXJuZWQgb24gYSBwcmV2aW91cyBjYWxsIHRvDQo+ICsgIEdldE5leHRTbG90KCks IHRoZW4gdGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBuZXh0IHNsb3Qgb24gdGhlIFNEIGNvbnRyb2xs ZXIgaXMNCj4gKyAgcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgU2xvdCBpcyBub3QgMHhGRiBhbmQg U2xvdCB3YXMgbm90IHJldHVybmVkIG9uIGEgcHJldmlvdXMgY2FsbCB0bw0KPiArICBHZXROZXh0 U2xvdCgpLCBFRklfSU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYg U2xvdCBpcyB0aGUgc2xvdCBudW1iZXIgb2YgdGhlIGxhc3Qgc2xvdCBvbiB0aGUgU0QgY29udHJv bGxlciwgdGhlbg0KPiArICBFRklfTk9UX0ZPVU5EIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gICAgIFRoaXMgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NTUNf UEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW4sb3V0XSBTbG90ICAgICAgICAgICBPbiBpbnB1dCwgYSBw b2ludGVyIHRvIGEgc2xvdCBudW1iZXIgb24gdGhlIFNEDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRyb2xsZXIuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9uIG91dHB1dCwgYSBwb2ludGVyIHRvIHRoZSBuZXh0IHNsb3QgbnVtYmVyIG9uDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTRCBjb250cm9sbGVyLg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBpbnB1dCB2YWx1ZSBvZiAweEZGIHJldHJp ZXZlcyB0aGUgZmlyc3Qgc2xvdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu dW1iZXIgb24gdGhlIFNEIGNvbnRyb2xsZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIG5leHQgc2xvdCBudW1iZXIgb24gdGhlIFNEIGNvbnRyb2xsZXIgd2Fz DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGluIFNsb3QuDQo+ ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZXJlIGFyZSBubyBtb3JlIHNsb3Rz IG9uIHRoaXMgU0QgY29udHJvbGxlci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgU2xvdCBpcyBub3QgMHhGRiBhbmQgU2xvdCB3YXMgbm90IHJldHVybmVkIG9uIGENCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgY2FsbCB0byBHZXROZXh0U2xv dCgpLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArRHdNbWNQYXNz VGhydUdldE5leHRTbG90ICgNCj4gKyAgSU4gICAgIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RP Q09MICAgICAgICAqVGhpcywNCj4gKyAgSU4gT1VUIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqU2xvdA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVXNlZCB0byBhbGxv Y2F0ZSBhbmQgYnVpbGQgYSBkZXZpY2UgcGF0aCBub2RlIGZvciBhbiBTRCBjYXJkIG9uIHRoZSBT RA0KPiArICBjb250cm9sbGVyLg0KPiArDQo+ICsgIFRoZSBCdWlsZERldmljZVBhdGgoKSBmdW5j dGlvbiBhbGxvY2F0ZXMgYW5kIGJ1aWxkcyBhIHNpbmdsZSBkZXZpY2Ugbm9kZQ0KPiArICBmb3Ig dGhlIFNEDQo+ICsgIGNhcmQgc3BlY2lmaWVkIGJ5IFNsb3QuDQo+ICsNCj4gKyAgSWYgdGhlIFNE IGNhcmQgc3BlY2lmaWVkIGJ5IFNsb3QgaXMgbm90IHByZXNlbnQgb24gdGhlIFNEIGNvbnRyb2xs ZXIsIHRoZW4NCj4gKyAgRUZJX05PVF9GT1VORCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBJZiBE ZXZpY2VQYXRoIGlzIE5VTEwsIHRoZW4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIGlzIHJldHVybmVk Lg0KPiArDQo+ICsgIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBhbGxvY2F0 ZSB0aGUgZGV2aWNlIHBhdGggbm9kZSwgdGhlbg0KPiArICBFRklfT1VUX09GX1JFU09VUkNFUyBp cyByZXR1cm5lZC4NCj4gKw0KPiArICBPdGhlcndpc2UsIERldmljZVBhdGggaXMgYWxsb2NhdGVk IHdpdGggdGhlIGJvb3Qgc2VydmljZSBBbGxvY2F0ZVBvb2woKSwgdGhlDQo+ICsgIGNvbnRlbnRz IG9mIERldmljZVBhdGggYXJlIGluaXRpYWxpemVkIHRvIGRlc2NyaWJlIHRoZSBTRCBjYXJkIHNw ZWNpZmllZCBieQ0KPiArICBTbG90LCBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgICAgVGhpcyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklf U0RfTU1NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gICAgIFNsb3QgICAgICAgICAgIFNwZWNp ZmllcyB0aGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgZm9yDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdoaWNoIGEgZGV2aWNlIHBhdGggbm9kZSBpcyB0byBiZSBhbGxv Y2F0ZWQgYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0Lg0KPiAr ICBAcGFyYW1baW4sb3V0XSBEZXZpY2VQYXRoICAgICBBIHBvaW50ZXIgdG8gYSBzaW5nbGUgZGV2 aWNlIHBhdGggbm9kZSB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl c2NyaWJlcyB0aGUgU0QgY2FyZCBzcGVjaWZpZWQgYnkgU2xvdC4gVGhpcw0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2Nh dGluZyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIERldmlj ZVBhdGggd2l0aCB0aGUgYm9vdCBzZXJ2aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFsbG9jYXRlUG9vbCgpLiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaS0NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0eSB0byBmcmVlIERldmljZVBhdGgg d2hlbiB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp bmlzaGVkIHdpdGggRGV2aWNlUGF0aC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgZGV2aWNlIHBhdGggbm9kZSB0aGF0IGRlc2NyaWJlcyB0aGUgU0QgY2FyZA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgU2xvdCB3YXMg YWxsb2NhdGVkIGFuZCByZXR1cm5lZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEZXZpY2VQYXRoLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUg U0QgY2FyZCBzcGVjaWZpZWQgYnkgU2xvdCBkb2VzIG5vdCBleGlzdCBvbg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgU0QgY29udHJvbGxlci4NCj4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgRGV2aWNlUGF0aCBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gYWxs b2NhdGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlUGF0aC4NCj4g Kw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0R3TW1jUGFzc1RocnVCdWls ZERldmljZVBhdGggKA0KPiArICBJTiAgICAgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wg ICAgICAgKlRoaXMsDQo+ICsgIElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTbG90LA0KPiArICBJTiBPVVQgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAg ICAgKipEZXZpY2VQYXRoDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9u IHJldHJpZXZlcyBhbiBTRCBjYXJkIHNsb3QgbnVtYmVyIGJhc2VkIG9uIHRoZSBpbnB1dCBkZXZp Y2UgcGF0aC4NCj4gKw0KPiArICBUaGUgR2V0U2xvdE51bWJlcigpIGZ1bmN0aW9uIHJldHJpZXZl cyBzbG90IG51bWJlciBmb3IgdGhlIFNEIGNhcmQgc3BlY2lmaWVkDQo+ICsgIGJ5IHRoZSBEZXZp Y2VQYXRoIG5vZGUuIElmIERldmljZVBhdGggaXMgTlVMTCwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IGlzDQo+ICsgIHJldHVybmVkLg0KPiArDQo+ICsgIElmIERldmljZVBhdGggaXMgbm90IGEgZGV2 aWNlIHBhdGggbm9kZSB0eXBlIHRoYXQgdGhlIFNEIFBhc3MgVGhydSBkcml2ZXINCj4gKyAgc3Vw cG9ydHMsIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJV X1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0K PiArICBAcGFyYW1baW5dICBEZXZpY2VQYXRoICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGRldmlj ZSBwYXRoIG5vZGUgdGhhdCBkZXNjcmliZXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYSBTRCBjYXJkIG9uIHRoZSBTRCBjb250cm9sbGVyLg0KPiArICBAcGFyYW1bb3V0XSBT bG90ICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50cyB0byB0aGUgc2xvdCBudW1iZXIgb2Yg YW4gU0QNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZCBvbiB0aGUgU0Qg Y29udHJvbGxlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBTRCBj YXJkIHNsb3QgbnVtYmVyIGlzIHJldHVybmVkIGluIFNsb3QuDQo+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIFNsb3Qgb3IgRGV2aWNlUGF0aCBpcyBOVUxMLg0KPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICBEZXZpY2VQYXRoIGlzIG5vdCBhIGRldmljZSBwYXRoIG5v ZGUgdHlwZSB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTRCBQ YXNzIFRocnUgZHJpdmVyIHN1cHBvcnRzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArRHdNbWNQYXNzVGhydUdldFNsb3ROdW1iZXIgKA0KPiArICBJTiAgRUZJX1NE X01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAgICAgICAgKlRoaXMsDQo+ICsgIElOICBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgICAqRGV2aWNlUGF0aCwNCj4gKyAgT1VUIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpTbG90DQo+ICsgICk7DQo+ICsN Cj4gKy8qKg0KPiArICBSZXNldHMgYW4gU0QgY2FyZCB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUg U0QgY29udHJvbGxlci4NCj4gKw0KPiArICBUaGUgUmVzZXREZXZpY2UoKSBmdW5jdGlvbiByZXNl dHMgdGhlIFNEIGNhcmQgc3BlY2lmaWVkIGJ5IFNsb3QuDQo+ICsNCj4gKyAgSWYgdGhpcyBTRCBj b250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgYSBkZXZpY2UgcmVzZXQgb3BlcmF0aW9uLA0KPiAr ICBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgU2xvdCBpcyBub3Qg aW4gYSB2YWxpZCBzbG90IG51bWJlciBmb3IgdGhpcyBTRCBjb250cm9sbGVyLA0KPiArICBFRklf SU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgdGhlIGRldmljZSBy ZXNldCBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVG SV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBTbG90ICAgICAgICAgICAgICBTcGVj aWZpZXMgdGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIGJlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSBTRCBjYXJkIHNwZWNpZmllZCBieSBTbG90IHdhcyByZXNldC4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIFNEIGNvbnRyb2xsZXIgZG9lcyBu b3Qgc3VwcG9ydCBhIGRldmljZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXNldCBvcGVyYXRpb24uDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFNsb3Qg bnVtYmVyIGlzIGludmFsaWQuDQo+ICsgIEByZXR2YWwgRUZJX05PX01FRElBICAgICAgICAgIFNE IERldmljZSBub3QgcHJlc2VudCBpbiB0aGUgU2xvdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgVGhlIHJlc2V0IGNvbW1hbmQgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJv cg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArRHdNbWNQYXNzVGhy dVJlc2V0RGV2aWNlICgNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAg ICAgICAgICpUaGlzLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU2xvdA0KPiArICApOw0KPiArDQo+ICsvLw0KPiArLy8gRHJpdmVyIG1vZGVsIHByb3Rv Y29sIGludGVyZmFjZXMNCj4gKy8vDQo+ICsvKioNCj4gKyAgVGVzdHMgdG8gc2VlIGlmIHRoaXMg ZHJpdmVyIHN1cHBvcnRzIGEgZ2l2ZW4gY29udHJvbGxlci4gSWYgYSBjaGlsZCBkZXZpY2UgaXMN Cj4gKyAgcHJvdmlkZWQsIGl0IGZ1cnRoZXIgdGVzdHMgdG8gc2VlIGlmIHRoaXMgZHJpdmVyIHN1 cHBvcnRzIGNyZWF0aW5nIGEgaGFuZGxlDQo+ICsgIGZvciB0aGUgc3BlY2lmaWVkIGNoaWxkIGRl dmljZS4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIGRyaXZl ciBzcGVjaWZpZWQgYnkgVGhpcyBzdXBwb3J0cyB0aGUNCj4gKyAgZGV2aWNlIHNwZWNpZmllZCBi eSBDb250cm9sbGVySGFuZGxlLiBEcml2ZXJzIHdpbGwgdHlwaWNhbGx5IHVzZSB0aGUgZGV2aWNl DQo+ICsgIHBhdGggYXR0YWNoZWQgdG8gQ29udHJvbGxlckhhbmRsZSBhbmQvb3IgdGhlIHNlcnZp Y2VzIGZyb20gdGhlIGJ1cyBJL08NCj4gKyAgYWJzdHJhY3Rpb24gYXR0YWNoZWQgdG8gQ29udHJv bGxlckhhbmRsZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRyaXZlciBzdXBwb3J0cw0KPiArICBDb250 cm9sbGVySGFuZGxlLiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbWFueSB0aW1lcyBkdXJp bmcgcGxhdGZvcm0NCj4gKyAgaW5pdGlhbGl6YXRpb24uIEluIG9yZGVyIHRvIHJlZHVjZSBib290 IHRpbWVzLCB0aGUgdGVzdHMgcGVyZm9ybWVkIGJ5IHRoaXMNCj4gKyAgZnVuY3Rpb24gbXVzdCBi ZSB2ZXJ5IHNtYWxsLCBhbmQgdGFrZSBhcyBsaXR0bGUgdGltZSBhcyBwb3NzaWJsZSB0byBleGVj dXRlLg0KPiArICBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55 IGhhcmR3YXJlIGRldmljZXMsIGFuZCB0aGlzDQo+ICsgIGZ1bmN0aW9uIG11c3QgYmUgYXdhcmUg dGhhdCB0aGUgZGV2aWNlIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIG1heQ0KPiArICBh bHJlYWR5IGJlIG1hbmFnZWQgYnkgdGhlIHNhbWUgZHJpdmVyIG9yIGEgZGlmZmVyZW50IGRyaXZl ci4gVGhpcyBmdW5jdGlvbg0KPiArICBtdXN0IG1hdGNoIGl0cyBjYWxscyB0byBBbGxvY2F0ZVBh Z2VzKCkgd2l0aCBGcmVlUGFnZXMoKSwgQWxsb2NhdGVQb29sKCkgd2l0aA0KPiArICBGcmVlUG9v bCgpLCBhbmQgT3BlblByb3RvY29sKCkgd2l0aCBDbG9zZVByb3RvY29sKCkuDQo+ICsgIFNpbmNl IENvbnRyb2xsZXJIYW5kbGUgbWF5IGhhdmUgYmVlbiBwcmV2aW91c2x5IHN0YXJ0ZWQgYnkgdGhl IHNhbWUgZHJpdmVyLCBpZg0KPiArICBhIHByb3RvY29sIGlzIGFscmVhZHkgaW4gdGhlIG9wZW5l ZCBzdGF0ZSwgdGhlbiBpdCBtdXN0IG5vdCBiZSBjbG9zZWQgd2l0aA0KPiArICBDbG9zZVByb3Rv Y29sKCkuIFRoaXMgaXMgcmVxdWlyZWQgdG8gZ3VhcmFudGVlIHRoZSBzdGF0ZSBvZiBDb250cm9s bGVySGFuZGxlDQo+ICsgIGlzIG5vdCBtb2RpZmllZCBieSB0aGlzIGZ1bmN0aW9uLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJ X0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICBU aGUgaGFuZGxlIG9mIHRoZSBjb250cm9sbGVyIHRvIHRlc3QuIFRoaXMNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG11c3Qgc3VwcG9ydCBhIHByb3RvY29sIGlu dGVyZmFjZSB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBs aWVzIGFuIEkvTyBhYnN0cmFjdGlvbiB0byB0aGUgZHJpdmVyLg0KPiArICBAcGFyYW1baW5dICBS ZW1haW5pbmdEZXZpY2VQYXRoICBBIHBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBwb3J0aW9uIG9m IGENCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHBhdGguICBU aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRldmljZSBkcml2ZXJzLCBhbmQgaXMgb3B0aW9uYWwgZm9yIGJ1cw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzLiBGb3IgYnVzIGRyaXZlcnMs IGlmIHRoaXMgcGFyYW1ldGVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlzIG5vdCBOVUxMLCB0aGVuIHRoZSBidXMgZHJpdmVyIG11c3QgZGV0ZXItDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmUgaWYgdGhlIGJ1cyBjb250cm9sbGVyIHNw ZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlIGFuZCB0aGUgY2hpbGQgY29udHJvbGxlcg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgUmVtYWluaW5nRGV2aWNlUGF0aCBhcmUgYm90 aA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgdGhp cyBidXMgZHJpdmVyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAg IFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmluZ0RldmljZVBhdGggaXMgc3VwcG9y dGVkIGJ5IHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMuDQo+ICsgIEByZXR2YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICAg IFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmluZ0RldmljZVBhdGggaXMgYWxyZWFk eSBiZWluZyBtYW5hZ2VkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5 IHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19E RU5JRUQgICAgICAgIFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5k DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmluZ0RldmljZVBh dGggaXMgYWxyZWFkeSBiZWluZyBtYW5hZ2VkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ5IGEgZGlmZmVyZW50IGRyaXZlciBvciBhbiBhcHBsaWNhdGlvbiB0aGF0DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIGV4Y2x1c2l2ZSBh Y2Nlc3MuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSBu b3QgaW1wbGVtZW50ZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgIFRo ZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmluZ0RldmljZVBhdGggaXMgbm90IHN1cHBv cnRlZCBieSB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy IHNwZWNpZmllZCBieSBUaGlzLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K0R3TW1jSGNEcml2ZXJCaW5kaW5nU3VwcG9ydGVkICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5E SU5HX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAg Q29udHJvbGxlciwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICpSZW1haW5p bmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBTdGFydHMgYSBkZXZpY2Ug Y29udHJvbGxlciBvciBhIGJ1cyBjb250cm9sbGVyLg0KPiArDQo+ICsgIFRoZSBTdGFydCgpIGZ1 bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGludm9rZWQgZnJvbSB0aGUgRUZJIGJvb3Qgc2Vydmlj ZQ0KPiArICBDb25uZWN0Q29udHJvbGxlcigpLg0KPiArICBBcyBhIHJlc3VsdCwgbXVjaCBvZiB0 aGUgZXJyb3IgY2hlY2tpbmcgb24gdGhlIHBhcmFtZXRlcnMgdG8gU3RhcnQoKSBoYXMgYmVlbg0K PiArICBtb3ZlZCBpbnRvIHRoaXMgY29tbW9uIGJvb3Qgc2VydmljZS4gSXQgaXMgbGVnYWwgdG8g Y2FsbCBTdGFydCgpIGZyb20gb3RoZXINCj4gKyAgbG9jYXRpb25zLA0KPiArICBidXQgdGhlIGZv bGxvd2luZyBjYWxsaW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGZvbGxvd2VkIG9yIHRoZSBzeXN0 ZW0gYmVoYXZpb3INCj4gKyAgd2lsbCBub3QgYmUgZGV0ZXJtaW5pc3RpYy4NCj4gKyAgMS4gQ29u dHJvbGxlckhhbmRsZSBtdXN0IGJlIGEgdmFsaWQgRUZJX0hBTkRMRS4NCj4gKyAgMi4gSWYgUmVt YWluaW5nRGV2aWNlUGF0aCBpcyBub3QgTlVMTCwgdGhlbiBpdCBtdXN0IGJlIGEgcG9pbnRlciB0 byBhIG5hdHVyYWwtDQo+ICsgICAgIGx5IGFsaWduZWQgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M Lg0KPiArICAzLiBQcmlvciB0byBjYWxsaW5nIFN0YXJ0KCksIHRoZSBTdXBwb3J0ZWQoKSBmdW5j dGlvbiBmb3IgdGhlIGRyaXZlciBzcGVjaWZpZWQNCj4gKyAgICAgYnkgVGhpcyBtdXN0IGhhdmUg YmVlbiBjYWxsZWQgd2l0aCB0aGUgc2FtZSBjYWxsaW5nIHBhcmFtZXRlcnMsIGFuZA0KPiArICAg ICBTdXBwb3J0ZWQoKSBtdXN0IGhhdmUgcmV0dXJuZWQgRUZJX1NVQ0NFU1MuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfRFJJ VkVSX0JJTkRJTkdfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgIFRoZSBo YW5kbGUgb2YgdGhlIGNvbnRyb2xsZXIgdG8gc3RhcnQuIFRoaXMNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG11c3Qgc3VwcG9ydCBhIHByb3RvY29sIGludGVy ZmFjZSB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVz IGFuIEkvTyBhYnN0cmFjdGlvbiB0byB0aGUgZHJpdmVyLg0KPiArICBAcGFyYW1baW5dICBSZW1h aW5pbmdEZXZpY2VQYXRoICBBIHBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBwb3J0aW9uIG9mIGEN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHBhdGguICBUaGlz IHBhcmFtZXRlciBpcyBpZ25vcmVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldmljZSBkcml2ZXJzLCBhbmQgaXMgb3B0aW9uYWwgZm9yIGJ1cyBkcmktDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnMuIEZvciBhIGJ1cyBkcml2ZXIs IGlmIHRoaXMgcGFyYW1ldGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsIHRoZW4gaGFuZGxlcyBmb3IgYWxsIHRoZSBjaGlsZHJlbiBvZg0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyIGFyZSBjcmVhdGVkIGJ5IHRo aXMgZHJpdmVyLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlz IHBhcmFtZXRlciBpcyBub3QgTlVMTCBhbmQgdGhlIGZpcnN0DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERldmljZSBQYXRoIE5vZGUgaXMgbm90IHRoZSBFbmQgb2YgRGV2 aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggTm9kZSwgdGhl biBvbmx5IHRoZSBoYW5kbGUgZm9yIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGlsZCBkZXZpY2Ugc3BlY2lmaWVkIGJ5IHRoZSBmaXJzdCBEZXZpY2UNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCBOb2RlIG9mIFJlbWFpbmluZ0Rl dmljZVBhdGggaXMgY3JlYXRlZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBieSB0aGlzIGRyaXZlci4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SWYgdGhlIGZpcnN0IERldmljZSBQYXRoIE5vZGUgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVtYWluaW5nRGV2aWNlUGF0aCBpcyB0aGUgRW5kIG9mIERldmljZSBQ YXRoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUsIG5vIGNoaWxk IGhhbmRsZSBpcyBjcmVhdGVkIGJ5IHRoaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHJpdmVyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICAgIFRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgICAgIFRoZSBkZXZpY2UgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVlIHRvIGENCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIGVycm9yLiBDdXJyZW50bHkg bm90IGltcGxlbWVudGVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICBU aGUgcmVxdWVzdCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFs IE90aGVycyAgICAgICAgICAgICAgICAgICBUaGUgZHJpdmVyIGZhaWxkZWQgdG8gc3RhcnQgdGhl IGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0R3TW1j SGNEcml2ZXJCaW5kaW5nU3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9D T0wgICAgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXIsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgKlJlbWFp bmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFN0b3BzIGEgZGV2aWNl IGNvbnRyb2xsZXIgb3IgYSBidXMgY29udHJvbGxlci4NCj4gKw0KPiArICBUaGUgU3RvcCgpIGZ1 bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGludm9rZWQgZnJvbSB0aGUgRUZJIGJvb3Qgc2Vydmlj ZQ0KPiArICBEaXNjb25uZWN0Q29udHJvbGxlcigpLg0KPiArICBBcyBhIHJlc3VsdCwgbXVjaCBv ZiB0aGUgZXJyb3IgY2hlY2tpbmcgb24gdGhlIHBhcmFtZXRlcnMgdG8gU3RvcCgpIGhhcyBiZWVu DQo+ICsgIG1vdmVkIGludG8gdGhpcyBjb21tb24gYm9vdCBzZXJ2aWNlLiBJdCBpcyBsZWdhbCB0 byBjYWxsIFN0b3AoKSBmcm9tIG90aGVyDQo+ICsgIGxvY2F0aW9ucywgYnV0IHRoZSBmb2xsb3dp bmcgY2FsbGluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBmb2xsb3dlZCBvciB0aGUNCj4gKyAgc3lz dGVtIGJlaGF2aW9yIHdpbGwgbm90IGJlIGRldGVybWluaXN0aWMuDQo+ICsgIDEuIENvbnRyb2xs ZXJIYW5kbGUgbXVzdCBiZSBhIHZhbGlkIEVGSV9IQU5ETEUgdGhhdCB3YXMgdXNlZCBvbiBhIHBy ZXZpb3VzDQo+ICsgICAgIGNhbGwgdG8gdGhpcyBzYW1lIGRyaXZlcidzIFN0YXJ0KCkgZnVuY3Rp b24uDQo+ICsgIDIuIFRoZSBmaXJzdCBOdW1iZXJPZkNoaWxkcmVuIGhhbmRsZXMgb2YgQ2hpbGRI YW5kbGVCdWZmZXIgbXVzdCBhbGwgYmUgYSB2YWxpZA0KPiArICAgICBFRklfSEFORExFLiBJbiBh ZGRpdGlvbiwgYWxsIG9mIHRoZXNlIGhhbmRsZXMgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBpbg0K PiArICAgICB0aGlzIGRyaXZlcidzIFN0YXJ0KCkgZnVuY3Rpb24sIGFuZCB0aGUgU3RhcnQoKSBm dW5jdGlvbiBtdXN0IGhhdmUgY2FsbGVkDQo+ICsgICAgIE9wZW5Qcm90b2NvbCgpIG9uIENvbnRy b2xsZXJIYW5kbGUgd2l0aCBhbiBBdHRyaWJ1dGUgb2YNCj4gKyAgICAgRUZJX09QRU5fUFJPVE9D T0xfQllfQ0hJTERfQ09OVFJPTExFUi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSAgQ29udHJvbGxlckhhbmRsZSAgQSBoYW5kbGUgdG8gdGhlIGRldmljZSBiZWluZyBzdG9wcGVk LiBUaGUgaGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc3Vw cG9ydCBhIGJ1cyBzcGVjaWZpYyBJL08gcHJvdG9jb2wgZm9yIHRoZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdG8gdXNlIHRvIHN0b3AgdGhlIGRldmljZS4NCj4g KyAgQHBhcmFtW2luXSAgTnVtYmVyT2ZDaGlsZHJlbiAgVGhlIG51bWJlciBvZiBjaGlsZCBkZXZp Y2UgaGFuZGxlcyBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhh bmRsZUJ1ZmZlci4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGVCdWZmZXIgQW4gYXJyYXkg b2YgY2hpbGQgaGFuZGxlcyB0byBiZSBmcmVlZC4gTWF5IGJlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwgaWYgTnVtYmVyT2ZDaGlsZHJlbiBpcyAwLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQuDQo+ ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBkZXZpY2UgY291bGQgbm90IGJl IHN0b3BwZWQgZHVlIHRvIGEgZGV2aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVycm9yLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArRHdN bWNIY0RyaXZlckJpbmRpbmdTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9U T0NPTCAgICAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXIsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIE51 bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAg ICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICsvLw0KPiArLy8gRUZJIENvbXBv bmVudCBOYW1lIEZ1bmN0aW9ucw0KPiArLy8NCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgYSBVbmlj b2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGRyaXZlci4N Cj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1l IG9mIGEgZHJpdmVyIGluIHRoZSBmb3JtIG9mIGENCj4gKyAgVW5pY29kZSBzdHJpbmcuIElmIHRo ZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ ICsgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRv IHRoZSBkcml2ZXIgbmFtZSBpcw0KPiArICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLCBhbmQgRUZJ X1NVQ0NFU1MgaXMgcmV0dXJuZWQuIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkDQo+ICsgIGJ5IFRo aXMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLA0K PiArICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW0g IFRoaXNbaW5dICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFN RTJfUFJPVE9DT0wgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NP TVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJhbSAgTGFuZ3Vh Z2VbaW5dICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJp bmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0 aGUgbGFuZ3VhZ2UuIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0 Y2ggb25lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFn ZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJp dmVyIGlzIHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2 ZXIgd3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW4gUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0 Lg0KPiArDQo+ICsgIEBwYXJhbSAgRHJpdmVyTmFtZVtvdXRdICAgICAgIEEgcG9pbnRlciB0byB0 aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaW4gdGhl IGxhbmd1YWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBi eSBMYW5ndWFnZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg VW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkg TGFuZ3VhZ2Ugd2FzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVk IGluIERyaXZlck5hbWUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg TGFuZ3VhZ2UgaXMgTlVMTC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBEcml2ZXJOYW1lIGlzIE5VTEwuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkg TGFuZ3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtEd01t Y0hjQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9O QU1FX1BST1RPQ09MICAgICAqVGhpcywNCj4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBh IFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29u dHJvbGxlcg0KPiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ICsNCj4g KyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUg Y29udHJvbGxlciBzcGVjaWZpZWQgYnkNCj4gKyAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRI YW5kbGUgaW4gdGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlDQo+ICsgIGRyaXZl ciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4gdGhlIGxhbmd1 YWdlIHNwZWNpZmllZCBieQ0KPiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNv bnRyb2xsZXIgbmFtZSBpcyByZXR1cm5lZCBpbiBDb250cm9sbGVyTmFtZSwNCj4gKyAgYW5kIEVG SV9TVUNDRVNTIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBp cyBub3QgY3VycmVudGx5DQo+ICsgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBi eSBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQ T1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMg bm90DQo+ICsgIHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhl biBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtICBUaGlzW2lu XSAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RP Q09MIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRf TkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcGFyYW0gIENvbnRyb2xsZXJIYW5k bGVbaW5dICBUaGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXINCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbWFuYWdp bmcuICBUaGlzIGhhbmRsZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVj aWZpZXMgdGhlIGNvbnRyb2xsZXIgd2hvc2UgbmFtZSBpcyB0byBiZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW0gIENoaWxkSGFu ZGxlW2luXSAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBjb250cm9sbGVyIHRvIHJldHJp ZXZlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9mLiAgVGhp cyBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXkgYmUgTlVMTC4gIEl0IHdpbGwgYmUgTlVMTCBmb3IgZGV2aWNlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcnMuICBJdCB3aWxsIGFsc28gYmUg TlVMTCBmb3IgYSBidXMgZHJpdmVycw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGF0IHdpc2ggdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGJ1cw0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLiAgSXQgd2lsbCBub3QgYmUgTlVMTCBm b3IgYSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHRoYXQg d2lzaGVzIHRvIHJldHJpZXZlIHRoZSBuYW1lIG9mIGENCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hpbGQgY29udHJvbGxlci4NCj4gKw0KPiArICBAcGFyYW0gIExhbmd1YWdl W2luXSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5n DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhl IGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRj aCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdl cyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2 ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZl ciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmllZCBpbg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQu DQo+ICsNCj4gKyAgQHBhcmFtICBDb250cm9sbGVyTmFtZVtvdXRdICAgQSBwb2ludGVyIHRvIHRo ZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xs ZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFu ZGxlIGluIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFuZ3VhZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZHJpdmVy DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmlu ZyBmb3IgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIGZvciB0aGUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlz IHdhcyByZXR1cm5lZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2 ZXJOYW1lLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xs ZXJIYW5kbGUgaXMgbm90IGEgdmFsaWQgRUZJX0hBTkRMRS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBhbmQgaXQgaXMgbm90 IGEgdmFsaWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0hBTkRMRS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBOVUxM Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJOYW1l IGlzIE5VTEwuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRy aXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFuZCBD aGlsZEhhbmRsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUg ZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4N Cj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0R3TW1jSGNDb21wb25l bnROYW1lR2V0Q29udHJvbGxlck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BS T1RPQ09MICAgICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICAgQ2hpbGRIYW5kbGUsIE9QVElPTkFMDQo+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAg ICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAg ICAgICAgICAgKipDb250cm9sbGVyTmFtZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ3Jl YXRlIGEgbmV3IFRSQiBmb3IgdGhlIFNEL01NQyBjbWQgcmVxdWVzdC4NCj4gKw0KPiArICBAcGFy YW1baW5dIFByaXZhdGUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1BSSVZBVEVf REFUQSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBTbG90ICAgICAgICAgICBUaGUgc2xvdCBu dW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRvLg0KPiArICBAcGFyYW1baW5dIFBhY2tldCAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgU0QgY29tbWFuZCBkYXRhIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2luXSBF dmVudCAgICAgICAgICBJZiBFdmVudCBpcyBOVUxMLCBibG9ja2luZyBJL08gaXMgcGVyZm9ybWVk Lg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIEV2ZW50IGlzIG5vdCBOVUxMLCB0 aGVuIG5vbmJsb2NraW5nIEkvTyBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBl cmZvcm1lZCwgYW5kIEV2ZW50IHdpbGwgYmUgc2lnbmFsZWQgd2hlbiB0aGUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQYWNrZXQgY29tcGxldGVzLg0KPiArDQo+ICsgIEByZXR1cm4g Q3JlYXRlZCBUcmIgb3IgTlVMTC4NCj4gKw0KPiArKiovDQo+ICtEV19NTUNfSENfVFJCICoNCj4g K0R3TW1jQ3JlYXRlVHJiICgNCj4gKyAgSU4gRFdfTU1DX0hDX1BSSVZBVEVfREFUQSAgICAgICAg ICAgICAgKlByaXZhdGUsDQo+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNsb3QsDQo+ICsgIElOIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICpQ YWNrZXQsDQo+ICsgIElOIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50 DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBGcmVlIHRoZSByZXNvdXJjZSB1c2VkIGJ5IHRo ZSBUUkIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBUcmIgICAgICAgICAgICBUaGUgcG9pbnRlciB0 byB0aGUgRFdfTU1DX0hDX1RSQiBpbnN0YW5jZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtE d01tY0ZyZWVUcmIgKA0KPiArICBJTiBEV19NTUNfSENfVFJCICAgICAgICAgICAqVHJiDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgZW52IGlzIHJlYWR5IGZvciBleGVj dXRlIHNwZWNpZmllZCBUUkIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQcml2YXRlICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIERXX01NQ19IQ19QUklWQVRFX0RBVEEgaW5zdGFuY2UuDQo+ICsgIEBw YXJhbVtpbl0gVHJiICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIERXX01NQ19IQ19UUkIg aW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgZW52IGlz IHJlYWR5IGZvciBUUkIgZXhlY3V0aW9uLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAg IFRoZSBlbnYgaXMgbm90IHJlYWR5IGZvciBUUkIgZXhlY3V0aW9uLg0KPiArICBAcmV0dmFsIE90 aGVycyAgICAgICAgICAgIFNvbWUgZXJyb3MgaGFwcGVuLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9T VEFUVVMNCj4gK0R3TW1jQ2hlY2tUcmJFbnYgKA0KPiArICBJTiBEV19NTUNfSENfUFJJVkFURV9E QVRBICAgICAgICAgICAqUHJpdmF0ZSwNCj4gKyAgSU4gRFdfTU1DX0hDX1RSQiAgICAgICAgICAg ICAgICAgICAgKlRyYg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgV2FpdCBmb3IgdGhlIGVu diB0byBiZSByZWFkeSBmb3IgZXhlY3V0ZSBzcGVjaWZpZWQgVFJCLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gUHJpdmF0ZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBEV19NTUNfSENfUFJJVkFURV9E QVRBIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFRyYiAgICAgICAgICAgIFRoZSBwb2ludGVy IHRvIHRoZSBEV19NTUNfSENfVFJCIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgVGhlIGVudiBpcyByZWFkeSBmb3IgVFJCIGV4ZWN1dGlvbi4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICBUaGUgZW52IGlzIG5vdCByZWFkeSBmb3IgVFJCIGV4ZWN1 dGlvbiBpbiB0aW1lLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFNvbWUgZXJyb3Mg aGFwcGVuLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jV2FpdFRyYkVudiAo DQo+ICsgIElOIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgICpQcml2YXRlLA0KPiAr ICBJTiBEV19NTUNfSENfVFJCICAgICAgICAgICAgICAgICAgICAqVHJiDQo+ICsgICk7DQo+ICsN Cj4gKy8qKg0KPiArICBFeGVjdXRlIHRoZSBzcGVjaWZpZWQgVFJCLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gUHJpdmF0ZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBEV19NTUNfSENfUFJJVkFURV9E QVRBIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFRyYiAgICAgICAgICAgIFRoZSBwb2ludGVy IHRvIHRoZSBEV19NTUNfSENfVFJCIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgVGhlIFRSQiBpcyBzZW50IHRvIGhvc3QgY29udHJvbGxlciBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgU29tZSBlcnJvcyBoYXBwZW4gd2hl biBzZW5kaW5nIHRoaXMgcmVxdWVzdCB0byB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBob3N0IGNvbnRyb2xsZXIuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHdN bWNFeGVjVHJiICgNCj4gKyAgSU4gRFdfTU1DX0hDX1BSSVZBVEVfREFUQSAgICAgICAgICAgKlBy aXZhdGUsDQo+ICsgIElOIERXX01NQ19IQ19UUkIgICAgICAgICAgICAgICAgICAgICpUcmINCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIHRoZSBUUkIgZXhlY3V0aW9uIHJlc3VsdC4N Cj4gKw0KPiArICBAcGFyYW1baW5dIFByaXZhdGUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRFdf TU1DX0hDX1BSSVZBVEVfREFUQSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBUcmIgICAgICAg ICAgICBUaGUgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1RSQiBpbnN0YW5jZS4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBUUkIgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgIFRoZSBUUkIgaXMgbm90IGNvbXBs ZXRlZCBmb3IgZXhlY3V0aW9uLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFNvbWUg ZXJyb3MgaGFwcGVuIHdoZW4gZXhlY3V0aW5nIHRoaXMgcmVxdWVzdC4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtEd01tY0NoZWNrVHJiUmVzdWx0ICgNCj4gKyAgSU4gRFdfTU1DX0hD X1BSSVZBVEVfREFUQSAgICAgICAgICAgKlByaXZhdGUsDQo+ICsgIElOIERXX01NQ19IQ19UUkIg ICAgICAgICAgICAgICAgICAgICpUcmINCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFdhaXQg Zm9yIHRoZSBUUkIgZXhlY3V0aW9uIHJlc3VsdC4NCj4gKw0KPiArICBAcGFyYW1baW5dIFByaXZh dGUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1BSSVZBVEVfREFUQSBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSBUcmIgICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgRFdf TU1DX0hDX1RSQiBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg IFRoZSBUUkIgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgIFNvbWUgZXJyb3MgaGFwcGVuIHdoZW4gZXhlY3V0aW5nIHRoaXMgcmVxdWVzdC4N Cj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY1dhaXRUcmJSZXN1bHQgKA0KPiAr ICBJTiBEV19NTUNfSENfUFJJVkFURV9EQVRBICAgICAgICAgICAqUHJpdmF0ZSwNCj4gKyAgSU4g RFdfTU1DX0hDX1RSQiAgICAgICAgICAgICAgICAgICAgKlRyYg0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgRXhlY3V0ZSBFTU1DIGRldmljZSBpZGVudGlmaWNhdGlvbiBwcm9jZWR1cmUuDQo+ ICsNCj4gKyAgUmVmZXIgdG8gRU1NQyBFbGVjdHJpY2FsIFN0YW5kYXJkIFNwZWMgNS4xIFNlY3Rp b24gNi40IGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUHJpdmF0ZSAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBEV19NTUNfSENfUFJJVkFURV9EQVRBIGluc3RhbmNlLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlcmUgaXMgYSBFTU1DIGNhcmQuDQo+ICsg IEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlcmUgaXMgbm90IGEgRU1NQyBjYXJkLg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VtbWNJZGVudGlmaWNhdGlvbiAoDQo+ICsgIElO IERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgICAgKlByaXZhdGUNCj4gKyAgKTsNCj4g Kw0KPiArLyoqDQo+ICsgIEV4ZWN1dGUgRU1NQyBkZXZpY2UgaWRlbnRpZmljYXRpb24gcHJvY2Vk dXJlLg0KPiArDQo+ICsgIFJlZmVyIHRvIEVNTUMgRWxlY3RyaWNhbCBTdGFuZGFyZCBTcGVjIDUu MSBTZWN0aW9uIDYuNCBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1baW5dIFByaXZhdGUg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1BSSVZBVEVfREFUQSBpbnN0YW5jZS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZXJlIGlzIGEgRU1NQyBjYXJk Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZXJlIGlzIG5vdCBhIEVNTUMgY2Fy ZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtTZENhcmRJZGVudGlmaWNhdGlvbiAo DQo+ICsgIElOIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgICAgKlByaXZhdGUNCj4g KyAgKTsNCj4gKw0KPiArI2VuZGlmIC8qIF9EV19NTUNfSENfRFhFX0hfICovDQo+IGRpZmYgLS1n aXQgYS9FbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY2kuaCBiL0VtYmVkZGVk UGtnL0RyaXZlcnMvRHdNbWNIY0R4ZS9Ed01tY0hjaS5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTJlZjU4YTM3MzY4DQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvRW1iZWRkZWRQa2cvRHJpdmVycy9Ed01tY0hjRHhlL0R3TW1jSGNpLmgNCj4gQEAgLTAs MCArMSw5ODUgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIFByb3ZpZGVzIHNvbWUgZGF0YSBz dHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgU0QvTU1DIGhvc3QgY29udHJvbGxlcg0K PiArICBkcml2ZXIuDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE1LCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAxOCwg TGluYXJvIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsNCj4gKyAgVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbGljZW5zZWQgYW5kIG1hZGUg YXZhaWxhYmxlDQo+ICsgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE IExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5pZXMgdGhpcw0KPiArICBkaXN0cmlidXRpb24uICBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArICBodHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFT SVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaWZu ZGVmIF9EV19NTUNfSENJX0hfDQo+ICsjZGVmaW5lIF9EV19NTUNfSENJX0hfDQo+ICsNCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0NhY2hlTWFpbnRlbmFuY2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L1RpbWVyTGliLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9QbGF0Zm9ybUR3TW1j Lmg+DQo+ICsNCj4gKy8vDQo+ICsvLyBTRCBIb3N0IENvbnRyb2xsZXIgU2xvdEluZm8gUmVnaXN0 ZXIgT2Zmc2V0DQo+ICsvLw0KPiArI2RlZmluZSBEV19NTUNfSENfU0xPVF9PRkZTRVQgICAgICAg ICAweDQwDQo+ICsNCj4gKyNkZWZpbmUgRFdfTU1DX0hDX01BWF9TTE9UICAgICAgICAgICAgMQ0K PiArDQo+ICsvLw0KPiArLy8gU0QgSG9zdCBDb250cm9sbGVyIE1NSU8gUmVnaXN0ZXIgT2Zmc2V0 DQo+ICsvLw0KPiArI2RlZmluZSBEV19NTUNfQ1RSTCAgICAgICAgICAgICAgICAgICAweDAwMA0K PiArI2RlZmluZSBEV19NTUNfUFdSRU4gICAgICAgICAgICAgICAgICAweDAwNA0KPiArI2RlZmlu ZSBEV19NTUNfQ0xLRElWICAgICAgICAgICAgICAgICAweDAwOA0KPiArI2RlZmluZSBEV19NTUNf Q0xLU1JDICAgICAgICAgICAgICAgICAweDAwYw0KPiArI2RlZmluZSBEV19NTUNfQ0xLRU5BICAg ICAgICAgICAgICAgICAweDAxMA0KPiArI2RlZmluZSBEV19NTUNfVE1PVVQgICAgICAgICAgICAg ICAgICAweDAxNA0KPiArI2RlZmluZSBEV19NTUNfQ1RZUEUgICAgICAgICAgICAgICAgICAweDAx OA0KPiArI2RlZmluZSBEV19NTUNfQkxLU0laICAgICAgICAgICAgICAgICAweDAxYw0KPiArI2Rl ZmluZSBEV19NTUNfQllUQ05UICAgICAgICAgICAgICAgICAweDAyMA0KPiArI2RlZmluZSBEV19N TUNfSU5UTUFTSyAgICAgICAgICAgICAgICAweDAyNA0KPiArI2RlZmluZSBEV19NTUNfQ01EQVJH ICAgICAgICAgICAgICAgICAweDAyOA0KPiArI2RlZmluZSBEV19NTUNfQ01EICAgICAgICAgICAg ICAgICAgICAweDAyYw0KPiArI2RlZmluZSBEV19NTUNfUkVTUDAgICAgICAgICAgICAgICAgICAw eDAzMA0KPiArI2RlZmluZSBEV19NTUNfUkVTUDEgICAgICAgICAgICAgICAgICAweDAzNA0KPiAr I2RlZmluZSBEV19NTUNfUkVTUDIgICAgICAgICAgICAgICAgICAweDAzOA0KPiArI2RlZmluZSBE V19NTUNfUkVTUDMgICAgICAgICAgICAgICAgICAweDAzYw0KPiArI2RlZmluZSBEV19NTUNfUklO VFNUUyAgICAgICAgICAgICAgICAweDA0NA0KPiArI2RlZmluZSBEV19NTUNfU1RBVFVTICAgICAg ICAgICAgICAgICAweDA0OA0KPiArI2RlZmluZSBEV19NTUNfRklGT1RIICAgICAgICAgICAgICAg ICAweDA0Yw0KPiArI2RlZmluZSBEV19NTUNfR1BJTyAgICAgICAgICAgICAgICAgICAweDA1OA0K PiArI2RlZmluZSBEV19NTUNfREVCTkNFICAgICAgICAgICAgICAgICAweDA2NA0KPiArI2RlZmlu ZSBEV19NTUNfVVNSSUQgICAgICAgICAgICAgICAgICAweDA2OA0KPiArI2RlZmluZSBEV19NTUNf VkVSSUQgICAgICAgICAgICAgICAgICAweDA2Yw0KPiArI2RlZmluZSBEV19NTUNfSENPTiAgICAg ICAgICAgICAgICAgICAweDA3MA0KPiArI2RlZmluZSBEV19NTUNfVUhTUkVHICAgICAgICAgICAg ICAgICAweDA3NA0KPiArI2RlZmluZSBEV19NTUNfQk1PRCAgICAgICAgICAgICAgICAgICAweDA4 MA0KPiArI2RlZmluZSBEV19NTUNfREJBRERSICAgICAgICAgICAgICAgICAweDA4OA0KPiArI2Rl ZmluZSBEV19NTUNfSURTVFMgICAgICAgICAgICAgICAgICAweDA4Yw0KPiArI2RlZmluZSBEV19N TUNfSURJTlRFTiAgICAgICAgICAgICAgICAweDA5MA0KPiArI2RlZmluZSBEV19NTUNfRFNDQURE UiAgICAgICAgICAgICAgICAweDA5NA0KPiArI2RlZmluZSBEV19NTUNfQlVGQUREUiAgICAgICAg ICAgICAgICAweDA5OA0KPiArI2RlZmluZSBEV19NTUNfQ0FSRFRIUkNUTCAgICAgICAgICAgICAw eDEwMA0KPiArI2RlZmluZSBEV19NTUNfVUhTUkVHX0VYVCAgICAgICAgICAgICAweDEwOA0KPiAr I2RlZmluZSBEV19NTUNfRU5BQkxFX1NISUZUICAgICAgICAgICAweDExMA0KPiArI2RlZmluZSBE V19NTUNfRklGT19TVEFSVCAgICAgICAgICAgICAweDIwMA0KPiArDQo+ICsjZGVmaW5lIEdFVF9J RFNUU19ETUFDX0ZTTSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweGYpDQo+ ICsjZGVmaW5lIElEU1RTX0ZTTV9ETUFfSURMRSAgICAgICAgICAgICAgICAgICAgICAwDQo+ICsj ZGVmaW5lIElEU1RTX0ZTTV9ETUFfU1VTUEVORCAgICAgICAgICAgICAgICAgICAxDQo+ICsjZGVm aW5lIElEU1RTX0ZTTV9ERVNDX1JEICAgICAgICAgICAgICAgICAgICAgICAyDQo+ICsjZGVmaW5l IElEU1RTX0ZTTV9ERVNDX0NISyAgICAgICAgICAgICAgICAgICAgICAzDQo+ICsjZGVmaW5lIElE U1RTX0ZTTV9ETUFfUkRfUkVRX1dBSVQgICAgICAgICAgICAgICA0DQo+ICsjZGVmaW5lIElEU1RT X0ZTTV9ETUFfV1JfUkVRX1dBSVQgICAgICAgICAgICAgICA1DQo+ICsjZGVmaW5lIElEU1RTX0ZT TV9ETUFfUkQgICAgICAgICAgICAgICAgICAgICAgICA2DQo+ICsjZGVmaW5lIElEU1RTX0ZTTV9E TUFfV1IgICAgICAgICAgICAgICAgICAgICAgICA3DQo+ICsjZGVmaW5lIElEU1RTX0ZTTV9ERVND X0NMT1NFICAgICAgICAgICAgICAgICAgICA4DQo+ICsjZGVmaW5lIElEU1RTX0ZTTV9NQVNLICAg ICAgICAgICAgICAgICAgICAgICAgICAweGYNCj4gKw0KPiArI2RlZmluZSBDTURfVVBEQVRFX0NM SyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDIwMjAwMA0KPiArI2RlZmluZSBDTURfU1RB UlRfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpDQo+ICsNCj4gKyNkZWZp bmUgTU1DXzhCSVRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQ0KPiAr I2RlZmluZSBNTUNfNEJJVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkN Cj4gKyNkZWZpbmUgTU1DXzFCSVRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIDANCj4g Kw0KPiArI2RlZmluZSBEV19NTUNfQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgICAgICAgNTEy DQo+ICsNCj4gKyNkZWZpbmUgQ01EX0lOREVYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAg IDB4M0YNCj4gKyNkZWZpbmUgQklUX0NNRF9SRVNQT05TRV9FWFBFQ1QgICAgICAgICAgICAgICAg ICgxIDw8IDYpDQo+ICsjZGVmaW5lIEJJVF9DTURfTE9OR19SRVNQT05TRSAgICAgICAgICAgICAg ICAgICAoMSA8PCA3KQ0KPiArI2RlZmluZSBCSVRfQ01EX0NIRUNLX1JFU1BPTlNFX0NSQyAgICAg ICAgICAgICAgKDEgPDwgOCkNCj4gKyNkZWZpbmUgQklUX0NNRF9EQVRBX0VYUEVDVEVEICAgICAg ICAgICAgICAgICAgICgxIDw8IDkpDQo+ICsjZGVmaW5lIEJJVF9DTURfUkVBRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMCA8PCAxMCkNCj4gKyNkZWZpbmUgQklUX0NNRF9XUklURSAgICAg ICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQ0KPiArI2RlZmluZSBCSVRfQ01EX0JMT0NL X1RSQU5TRkVSICAgICAgICAgICAgICAgICAgKDAgPDwgMTEpDQo+ICsjZGVmaW5lIEJJVF9DTURf U1RSRUFNX1RSQU5TRkVSICAgICAgICAgICAgICAgICAoMSA8PCAxMSkNCj4gKyNkZWZpbmUgQklU X0NNRF9TRU5EX0FVVE9fU1RPUCAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQ0KPiArI2RlZmlu ZSBCSVRfQ01EX1dBSVRfUFJWREFUQV9DT01QTEVURSAgICAgICAgICAgKDEgPDwgMTMpDQo+ICsj ZGVmaW5lIEJJVF9DTURfU1RPUF9BQk9SVF9DTUQgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkN Cj4gKyNkZWZpbmUgQklUX0NNRF9TRU5EX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICgxIDw8 IDE1KQ0KPiArI2RlZmluZSBCSVRfQ01EX1VQREFURV9DTE9DS19PTkxZICAgICAgICAgICAgICAg KDEgPDwgMjEpDQo+ICsjZGVmaW5lIEJJVF9DTURfUkVBRF9DRUFUQV9ERVZJQ0UgICAgICAgICAg ICAgICAoMSA8PCAyMikNCj4gKyNkZWZpbmUgQklUX0NNRF9DQ1NfRVhQRUNURUQgICAgICAgICAg ICAgICAgICAgICgxIDw8IDIzKQ0KPiArI2RlZmluZSBCSVRfQ01EX0VOQUJMRV9CT09UICAgICAg ICAgICAgICAgICAgICAgKDEgPDwgMjQpDQo+ICsjZGVmaW5lIEJJVF9DTURfRVhQRUNUX0JPT1Rf QUNLICAgICAgICAgICAgICAgICAoMSA8PCAyNSkNCj4gKyNkZWZpbmUgQklUX0NNRF9ESVNBQkxF X0JPT1QgICAgICAgICAgICAgICAgICAgICgxIDw8IDI2KQ0KPiArI2RlZmluZSBCSVRfQ01EX01B TkRBVE9SWV9CT09UICAgICAgICAgICAgICAgICAgKDAgPDwgMjcpDQo+ICsjZGVmaW5lIEJJVF9D TURfQUxURVJOQVRFX0JPT1QgICAgICAgICAgICAgICAgICAoMSA8PCAyNykNCj4gKyNkZWZpbmUg QklUX0NNRF9WT0xUX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI4KQ0KPiArI2Rl ZmluZSBCSVRfQ01EX1VTRV9IT0xEX1JFRyAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjkpDQo+ ICsjZGVmaW5lIEJJVF9DTURfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAz MSkNCj4gKw0KPiArI2RlZmluZSBDTURfSU5ERVgoeCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCh4KSAmIENNRF9JTkRFWF9NQVNLKQ0KPiArDQo+ICsjZGVmaW5lIERXX01NQ19JTlRfRUJF ICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkgICAgICAgLyogRW5kLWJpdCBFcnIg Ki8NCj4gKyNkZWZpbmUgRFdfTU1DX0lOVF9TQkUgICAgICAgICAgICAgICAgICAgICAgICAgICgx IDw8IDEzKSAgICAgICAvKiBTdGFydC1iaXQgIEVyciAqLw0KPiArI2RlZmluZSBEV19NTUNfSU5U X0hMRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpICAgICAgIC8qIEhhcmR3YXJl LWxvY2sgRXJyICovDQo+ICsjZGVmaW5lIERXX01NQ19JTlRfRlJVTiAgICAgICAgICAgICAgICAg ICAgICAgICAoMSA8PCAxMSkgICAgICAgLyogRklGTyBVTi9PViBSVU4gKi8NCj4gKyNkZWZpbmUg RFdfTU1DX0lOVF9EUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpICAgICAgICAv KiBEYXRhIHRpbWVvdXQgKi8NCj4gKyNkZWZpbmUgRFdfTU1DX0lOVF9SVE8gICAgICAgICAgICAg ICAgICAgICAgICAgICgxIDw8IDgpICAgICAgICAvKiBSZXNwb25zZSB0aW1lb3V0ICovDQo+ICsj ZGVmaW5lIERXX01NQ19JTlRfRENSQyAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KSAg ICAgICAgLyogRGF0YSBDUkMgZXJyICovDQo+ICsjZGVmaW5lIERXX01NQ19JTlRfUkNSQyAgICAg ICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KSAgICAgICAgLyogUmVzcG9uc2UgQ1JDIGVyciAq Lw0KPiArI2RlZmluZSBEV19NTUNfSU5UX1JYRFIgICAgICAgICAgICAgICAgICAgICAgICAgKDEg PDwgNSkgICAgICAgIC8qIFJlY2VpdmUgRklGTyBkYXRhIHJlcXVlc3QgKi8NCj4gKyNkZWZpbmUg RFdfTU1DX0lOVF9UWERSICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpICAgICAgICAv KiBUcmFuc21pdCBGSUZPIGRhdGEgcmVxdWVzdCAqLw0KPiArI2RlZmluZSBEV19NTUNfSU5UX0RU TyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykgICAgICAgIC8qIERhdGEgdHJhbnMg b3ZlciAqLw0KPiArI2RlZmluZSBEV19NTUNfSU5UX0NNRF9ET05FICAgICAgICAgICAgICAgICAg ICAgKDEgPDwgMikgICAgICAgIC8qIENvbW1hbmQgZG9uZSAqLw0KPiArI2RlZmluZSBEV19NTUNf SU5UX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkgICAgICAgIC8qIFJlc3Bv bnNlIGVycm9yICovDQo+ICsNCj4gKyNkZWZpbmUgRFdfTU1DX0lETUFDX0RFUzBfRElDICAgICAg ICAgICAgICAgICAgICgxIDw8IDEpDQo+ICsjZGVmaW5lIERXX01NQ19JRE1BQ19ERVMwX0xEICAg ICAgICAgICAgICAgICAgICAoMSA8PCAyKQ0KPiArI2RlZmluZSBEV19NTUNfSURNQUNfREVTMF9G UyAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykNCj4gKyNkZWZpbmUgRFdfTU1DX0lETUFDX0RF UzBfQ0ggICAgICAgICAgICAgICAgICAgICgxIDw8IDQpDQo+ICsjZGVmaW5lIERXX01NQ19JRE1B Q19ERVMwX0VSICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQ0KPiArI2RlZmluZSBEV19NTUNf SURNQUNfREVTMF9DRVMgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApDQo+ICsjZGVmaW5lIERX X01NQ19JRE1BQ19ERVMwX09XTiAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkNCj4gKyNkZWZp bmUgRFdfTU1DX0lETUFDX0RFUzFfQlMxKHgpICAgICAgICAgICAgICAgICgoeCkgJiAweDFmZmYp DQo+ICsjZGVmaW5lIERXX01NQ19JRE1BQ19ERVMyX0JTMih4KSAgICAgICAgICAgICAgICAoKCh4 KSAmIDB4MWZmZikgPDwgMTMpDQo+ICsjZGVmaW5lIERXX01NQ19JRE1BQ19TV1JFU0VUICAgICAg ICAgICAgICAgICAgICAoMSA8PCAwKQ0KPiArI2RlZmluZSBEV19NTUNfSURNQUNfRkIgICAgICAg ICAgICAgICAgICAgICAgICAgKDEgPDwgMSkNCj4gKyNkZWZpbmUgRFdfTU1DX0lETUFDX0VOQUJM RSAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpDQo+ICsNCj4gKyNkZWZpbmUgRFdfTU1DX0NU UkxfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApDQo+ICsjZGVmaW5lIERXX01N Q19DVFJMX0ZJRk9fUkVTRVQgICAgICAgICAgICAgICAgICAoMSA8PCAxKQ0KPiArI2RlZmluZSBE V19NTUNfQ1RSTF9ETUFfUkVTRVQgICAgICAgICAgICAgICAgICAgKDEgPDwgMikNCj4gKyNkZWZp bmUgRFdfTU1DX0NUUkxfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpDQo+ICsj ZGVmaW5lIERXX01NQ19DVFJMX0RNQV9FTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQ0K PiArI2RlZmluZSBEV19NTUNfQ1RSTF9JRE1BQ19FTiAgICAgICAgICAgICAgICAgICAgKDEgPDwg MjUpDQo+ICsjZGVmaW5lIERXX01NQ19DVFJMX1JFU0VUX0FMTCAgICAgICAgICAgICAgICAgICAo RFdfTU1DX0NUUkxfUkVTRVQgfCBEV19NTUNfQ1RSTF9GSUZPX1JFU0VUIHwgRFdfTU1DX0NUUkxf RE1BX1JFU0VUKQ0KPiArDQo+ICsjZGVmaW5lIERXX01NQ19TVFNfREFUQV9CVVNZICAgICAgICAg ICAgICAgICAgICAoMSA8PCA5KQ0KPiArI2RlZmluZSBEV19NTUNfU1RTX0ZJRk9fQ09VTlQoeCkg ICAgICAgICAgICAgICAgKCgoeCkgJiAweDFmZmYpIDw8IDE3KSAgIC8qIE51bWJlciBvZiBmaWxs ZWQgbG9jYXRpb25zIGluIEZJRk8gKi8NCj4gKyNkZWZpbmUgR0VUX1NUU19GSUZPX0NPVU5UKHgp ICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MWZmZikNCj4gKyNkZWZpbmUgRFdf TU1DX1NUU19GSUZPX0ZVTEwoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMSkNCj4g Kw0KPiArI2RlZmluZSBEV19NTUNfQk1PRF9TV1IgICAgICAgICAgICAgICAgICAgICAgICAgKDEg PDwgMCkgICAgICAgICAvKiBTb2Z0d2FyZSBSZXNldCAqLw0KPiArI2RlZmluZSBEV19NTUNfQk1P RF9GQiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkgICAgICAgICAvKiBGaXggQnVy c3QgKi8NCj4gKyNkZWZpbmUgRFdfTU1DX0JNT0RfREUgICAgICAgICAgICAgICAgICAgICAgICAg ICgxIDw8IDcpICAgICAgICAgLyogSURNQUMgRW5hYmxlICovDQo+ICsNCj4gKyNkZWZpbmUgRFdf TU1DX0lEU1RTX1RJICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApICAgICAgICAgLyog VHJhbnNtaXQgSW50ZXJydXB0ICovDQo+ICsjZGVmaW5lIERXX01NQ19JRFNUU19SSSAgICAgICAg ICAgICAgICAgICAgICAgICAoMSA8PCAxKSAgICAgICAgIC8qIFJlY2VpdmUgSW50ZXJydXB0ICov DQo+ICsNCj4gKyNkZWZpbmUgRFdfTU1DX0ZJRk9fVFdNQVJLKHgpICAgICAgICAgICAgICAgICAg ICgoeCkgJiAweGZmZikNCj4gKyNkZWZpbmUgRFdfTU1DX0ZJRk9fUldNQVJLKHgpICAgICAgICAg ICAgICAgICAgICgoKHgpICYgMHgxZmYpIDw8IDE2KQ0KPiArI2RlZmluZSBEV19NTUNfRE1BX0JV UlNUX1NJWkUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDI4KQ0KPiArDQo+ICsj ZGVmaW5lIERXX01NQ19DQVJEX1JEX1RIUih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4 ZmZmKSA8PCAxNikNCj4gKyNkZWZpbmUgRFdfTU1DX0NBUkRfUkRfVEhSX0VOICAgICAgICAgICAg ICAgICAgICgxIDw8IDApDQo+ICsNCj4gKyNkZWZpbmUgVUhTX0REUl9NT0RFICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgxIDw8IDE2KQ0KPiArDQo+ICsjZGVmaW5lIEdFTkNMS19ESVYgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA3DQo+ICsNCj4gKyNkZWZpbmUgRFdfTU1DX0dQSU9f Q0xLX0RJVih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmKSA8PCA4KQ0KPiArI2RlZmlu ZSBEV19NTUNfR1BJT19VU0VfU0FNUExFX0RMWSh4KSAgICAgICAgICAgKCgoeCkgJiAxKSA8PCAx MykNCj4gKyNkZWZpbmUgRFdfTU1DX0dQSU9fQ0xLX0VOQUJMRSAgICAgICAgICAgICAgICAgIEJJ VDE2DQo+ICsNCj4gKyNkZWZpbmUgVUhTRVhUX1NBTVBMRV9QSEFTRSh4KSAgICAgICAgICAgICAg ICAgICgoKHgpICYgMHgxZikgPDwgMTYpDQo+ICsjZGVmaW5lIFVIU0VYVF9TQU1QTEVfRFJWUEhB U0UoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWYpIDw8IDIxKQ0KPiArI2RlZmluZSBVSFNF WFRfU0FNUExFX0RMWSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFmKSA8PCAyNikN Cj4gKw0KPiArI2RlZmluZSBEV01NQ19ETUFfQlVGX1NJWkUgICAgICAgICAgICAgICAgICAgICAg KDUxMiAqIDgpDQo+ICsjZGVmaW5lIERXTU1DX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAg ICAgICAxNg0KPiArDQo+ICsjZGVmaW5lIERXTU1DX0lOSVRfQ0xPQ0tfRlJFUSAgICAgICAgICAg ICAgICAgICA0MDAgICAgICAgICAgICAgIC8qIEtIeiAqLw0KPiArDQo+ICsvLw0KPiArLy8gVGhl IHRyYW5zZmVyIG1vZGVzIHN1cHBvcnRlZCBieSBTRCBIb3N0IENvbnRyb2xsZXINCj4gKy8vIFNp bXBsaWZpZWQgU3BlYyAzLjAgVGFibGUgMS0yDQo+ICsvLw0KPiArdHlwZWRlZiBlbnVtIHsNCj4g KyAgU2RNbWNOb0RhdGEsDQo+ICsgIFNkTW1jUGlvTW9kZSwNCj4gKyAgU2RNbWNTZG1hTW9kZSwN Cj4gKyAgU2RNbWNBZG1hTW9kZQ0KPiArfSBEV19NTUNfSENfVFJBTlNGRVJfTU9ERTsNCj4gKw0K PiArLy8NCj4gKy8vIFRoZSBtYXhpbXVtIGRhdGEgbGVuZ3RoIG9mIGVhY2ggZGVzY3JpcHRvciBs aW5lDQo+ICsvLw0KPiArI2RlZmluZSBBRE1BX01BWF9EQVRBX1BFUl9MSU5FICAgICAweDEwMDAw DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgRGVzMDsNCj4gKyAgVUlO VDMyICAgRGVzMTsNCj4gKyAgVUlOVDMyICAgRGVzMjsNCj4gKyAgVUlOVDMyICAgRGVzMzsNCj4g K30gRFdfTU1DX0hDX0RNQV9ERVNDX0xJTkU7DQo+ICsNCj4gKyNkZWZpbmUgU0RfTU1DX1NETUFf Qk9VTkRBUlkgICAgICAgICAgNTEyICogMTAyNA0KPiArI2RlZmluZSBTRF9NTUNfU0RNQV9ST1VO RF9VUCh4LCBuKSAgICAoKCh4KSArIG4pICYgfihuIC0gMSkpDQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgVUlOVDggICAgRmlyc3RCYXI6MzsgICAgICAgIC8vIGJpdCAwOjINCj4gKyAg VUlOVDggICAgUmVzZXJ2ZWQ6MTsgICAgICAgIC8vIGJpdCAzDQo+ICsgIFVJTlQ4ICAgIFNsb3RO dW06MzsgICAgICAgICAvLyBiaXQgNDo2DQo+ICsgIFVJTlQ4ICAgIFJlc2VydmVkMToxOyAgICAg ICAvLyBiaXQgNw0KPiArfSBEV19NTUNfSENfU0xPVF9JTkZPOw0KPiArDQo+ICsvKioNCj4gKyAg RHVtcCB0aGUgY29udGVudCBvZiBTRC9NTUMgaG9zdCBjb250cm9sbGVyJ3MgQ2FwYWJpbGl0eSBS ZWdpc3Rlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBTbG90ICAgICAgICAgICAgVGhlIHNsb3Qg bnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8uDQo+ICsgIEBwYXJh bVtpbl0gIENhcGFiaWxpdHkgICAgICBUaGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBjYXBhYmlsaXR5 IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcENhcGFiaWxpdHlSZWcgKA0KPiAr ICBJTiBVSU5UOCAgICAgICAgICAgICAgICBTbG90LA0KPiArICBJTiBEV19NTUNfSENfU0xPVF9D QVAgICAqQ2FwYWJpbGl0eQ0KPiArICApOw0KPiArDQo+ICsjaWYgMA0KPiArLyoqDQo+ICsgIFJl YWQgU2xvdEluZm8gcmVnaXN0ZXIgZnJvbSBTRC9NTUMgaG9zdCBjb250cm9sbGVyIHBjaSBjb25m aWcgc3BhY2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgUGNpSW8gICAgICAgIFRoZSBQQ0kgSU8g cHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIEZpcnN0QmFyICAgICBUaGUgYnVm ZmVyIHRvIHN0b3JlIHRoZSBmaXJzdCBCQVIgdmFsdWUuDQo+ICsgIEBwYXJhbVtvdXRdIFNsb3RO dW0gICAgICBUaGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBzdXBwb3J0ZWQgc2xvdCBudW1iZXIuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIFRoZSBvcGVyYXRpb24gc3VjY2VlZHMu DQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArRHdNbWNIY0dldFNsb3RJbmZv ICgNCj4gKyAgSU4gICAgIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAqUGNpSW8sDQo+ICsgICAgIE9V VCBVSU5UOCAgICAgICAgICAgICAgICAgKkZpcnN0QmFyLA0KPiArICAgICBPVVQgVUlOVDggICAg ICAgICAgICAgICAgICpTbG90TnVtDQo+ICsgICk7DQo+ICsjZW5kaWYNCj4gKw0KPiArI2lmZGVm IERXTU1DX1BDSQ0KPiArLyoqDQo+ICsgIFJlYWQvV3JpdGUgc3BlY2lmaWVkIFNEL01NQyBob3N0 IGNvbnRyb2xsZXIgbW1pbyByZWdpc3Rlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgUGNp SW8gICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g ICAgICBCYXJJbmRleCAgICAgVGhlIEJBUiBpbmRleCBvZiB0aGUgc3RhbmRhcmQgUENJIENvbmZp Z3VyYXRpb24NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgdG8gdXNl IGFzIHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZSBtZW1vcnkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvcGVyYXRpb24gdG8gcGVyZm9ybS4NCj4gKyAgQHBhcmFtW2luXSAgICAg IE9mZnNldCAgICAgICBUaGUgb2Zmc2V0IHdpdGhpbiB0aGUgc2VsZWN0ZWQgQkFSIHRvIHN0YXJ0 IHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBvcGVyYXRpb24u DQo+ICsgIEBwYXJhbVtpbl0gICAgICBSZWFkICAgICAgICAgQSBib29sZWFuIHRvIGluZGljYXRl IGl0J3MgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDb3Vu dCAgICAgICAgVGhlIHdpZHRoIG9mIHRoZSBtbWlvIHJlZ2lzdGVyIGluIGJ5dGVzLg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgMSwgMiAsIDQgb3IgOCBieXRlcy4N Cj4gKyAgQHBhcmFtW2luLCBvdXRdIERhdGEgICAgICAgICBGb3IgcmVhZCBvcGVyYXRpb25zLCB0 aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvIHN0b3JlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIHJlc3VsdHMuIEZvciB3cml0ZSBvcGVyYXRpb25zLCB0aGUgc291cmNlIGJ1 ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdyaXRlIGRhdGEgZnJv bS4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3INCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYXZpbmcgb3duZXJzaGlwIG9mIHRoZSBkYXRhIGJ1ZmZlciBhbmQgZW5zdXJp bmcgaXRzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBub3QgbGVzcyB0 aGFuIENvdW50IGJ5dGVzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IFRoZSBQY2lJbyBvciBEYXRhIGlzIE5VTEwgb3IgdGhlIENvdW50IGlzIG5vdCB2YWxpZC4NCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlYWQvd3JpdGUgb3BlcmF0aW9u IHN1Y2NlZWRzLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBUaGUgcmVhZC93 cml0ZSBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtEd01tY0hjUndNbWlvICgNCj4gKyAgSU4gICAgIEVGSV9QQ0lfSU9fUFJPVE9DT0wg ICAqUGNpSW8sDQo+ICsgIElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgQmFySW5kZXgsDQo+ ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgT2Zmc2V0LA0KPiArICBJTiAgICAgQk9P TEVBTiAgICAgICAgICAgICAgIFJlYWQsDQo+ICsgIElOICAgICBVSU5UOCAgICAgICAgICAgICAg ICAgQ291bnQsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgKkRhdGENCj4gKyAg KTsNCj4gKyNlbHNlDQo+ICsvKioNCj4gKyAgUmVhZC9Xcml0ZSBzcGVjaWZpZWQgU0QvTU1DIGhv c3QgY29udHJvbGxlciBtbWlvIHJlZ2lzdGVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBE ZXZJbyAgICAgICAgVGhlIERFVklDRSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFt W2luXSAgICAgIE9mZnNldCAgICAgICBUaGUgb2Zmc2V0IHdpdGhpbiB0aGUgc2VsZWN0ZWQgQkFS IHRvIHN0YXJ0IHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBv cGVyYXRpb24uDQo+ICsgIEBwYXJhbVtpbl0gICAgICBSZWFkICAgICAgICAgQSBib29sZWFuIHRv IGluZGljYXRlIGl0J3MgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uDQo+ICsgIEBwYXJhbVtpbl0g ICAgICBDb3VudCAgICAgICAgVGhlIHdpZHRoIG9mIHRoZSBtbWlvIHJlZ2lzdGVyIGluIGJ5dGVz Lg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgMSwgMiAsIDQgb3Ig OCBieXRlcy4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIERhdGEgICAgICAgICBGb3IgcmVhZCBvcGVy YXRpb25zLCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvIHN0b3JlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdHMuIEZvciB3cml0ZSBvcGVyYXRpb25zLCB0aGUg c291cmNlIGJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdyaXRl IGRhdGEgZnJvbS4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3INCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoYXZpbmcgb3duZXJzaGlwIG9mIHRoZSBkYXRhIGJ1ZmZlciBh bmQgZW5zdXJpbmcgaXRzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBu b3QgbGVzcyB0aGFuIENvdW50IGJ5dGVzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIFRoZSBQY2lJbyBvciBEYXRhIGlzIE5VTEwgb3IgdGhlIENvdW50IGlzIG5vdCB2 YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlYWQvd3JpdGUg b3BlcmF0aW9uIHN1Y2NlZWRzLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBU aGUgcmVhZC93cml0ZSBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtEd01tY0hjUndNbWlvICgNCj4gKyAgSU4gICAgIFVJTlROICAgICAg ICAgICAgICAgICAgIERldkJhc2UsDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgT2Zmc2V0LA0KPiArICBJTiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgIFJlYWQsDQo+ ICsgIElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgQ291bnQsDQo+ICsgIElOIE9VVCBW T0lEICAgICAgICAgICAgICAgICAgICAgKkRhdGENCj4gKyAgKTsNCj4gKyNlbmRpZg0KPiArDQo+ ICsjaWZkZWYgRFdNTUNfUENJDQo+ICsvKioNCj4gKyAgRG8gT1Igb3BlcmF0aW9uIHdpdGggdGhl IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgU0QvTU1DIGhvc3QgY29udHJvbGxlciBtbWlvIHJlZ2lz dGVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGNpSW8gICAgICAgICAgICAgVGhlIFBDSSBJTyBw cm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBCYXJJbmRleCAgICAgICAgICBUaGUg QkFSIGluZGV4IG9mIHRoZSBzdGFuZGFyZCBQQ0kgQ29uZmlndXJhdGlvbg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciB0byB1c2UgYXMgdGhlIGJhc2UgYWRkcmVzcyBm b3IgdGhlIG1lbW9yeQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv biB0byBwZXJmb3JtLg0KPiArICBAcGFyYW1baW5dIE9mZnNldCAgICAgICAgICAgIFRoZSBvZmZz ZXQgd2l0aGluIHRoZSBzZWxlY3RlZCBCQVIgdG8gc3RhcnQgdGhlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWVtb3J5IG9wZXJhdGlvbi4NCj4gKyAgQHBhcmFtW2luXSBDb3Vu dCAgICAgICAgICAgICBUaGUgd2lkdGggb2YgdGhlIG1taW8gcmVnaXN0ZXIgaW4gYnl0ZXMuDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSAxLCAyICwgNCBvciA4IGJ5 dGVzLg0KPiArICBAcGFyYW1baW5dIE9yRGF0YSAgICAgICAgICAgIFRoZSBwb2ludGVyIHRvIHRo ZSBkYXRhIHVzZWQgdG8gZG8gT1Igb3BlcmF0aW9uLg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGhhdmluZyBvd25lcnNoaXAg b2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YSBidWZmZXIgYW5k IGVuc3VyaW5nIGl0cyBzaXplIG5vdCBsZXNzIHRoYW4NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb3VudCBieXRlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBUaGUgUGNpSW8gb3IgT3JEYXRhIGlzIE5VTEwgb3IgdGhlIENvdW50IGlzIG5vdCB2 YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIE9SIG9wZXJhdGlv biBzdWNjZWVkcy4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgVGhlIE9SIG9w ZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K0R3TW1jSGNPck1taW8gKA0KPiArICBJTiAgRUZJX1BDSV9JT19QUk9UT0NPTCAgICAgICpQY2lJ bywNCj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBCYXJJbmRleCwNCj4gKyAgSU4g IFVJTlQzMiAgICAgICAgICAgICAgICAgICBPZmZzZXQsDQo+ICsgIElOICBVSU5UOCAgICAgICAg ICAgICAgICAgICAgQ291bnQsDQo+ICsgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgKk9y RGF0YQ0KPiArICApOw0KPiArI2Vsc2UNCj4gKy8qKg0KPiArICBEbyBPUiBvcGVyYXRpb24gd2l0 aCB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBTRC9NTUMgaG9zdCBjb250cm9sbGVyIG1taW8g cmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICAgICBUaGUgREVW SUNFIElPIHByb3RvY29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIEJhckluZGV4ICAgICAg ICAgIFRoZSBCQVIgaW5kZXggb2YgdGhlIHN0YW5kYXJkIFBDSSBDb25maWd1cmF0aW9uDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyIHRvIHVzZSBhcyB0aGUgYmFzZSBh ZGRyZXNzIGZvciB0aGUgbWVtb3J5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3BlcmF0aW9uIHRvIHBlcmZvcm0uDQo+ICsgIEBwYXJhbVtpbl0gT2Zmc2V0ICAgICAgICAgICAg VGhlIG9mZnNldCB3aXRoaW4gdGhlIHNlbGVjdGVkIEJBUiB0byBzdGFydCB0aGUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgb3BlcmF0aW9uLg0KPiArICBAcGFyYW1b aW5dIENvdW50ICAgICAgICAgICAgIFRoZSB3aWR0aCBvZiB0aGUgbW1pbyByZWdpc3RlciBpbiBi eXRlcy4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIDEsIDIgLCA0 IG9yIDggYnl0ZXMuDQo+ICsgIEBwYXJhbVtpbl0gT3JEYXRhICAgICAgICAgICAgVGhlIHBvaW50 ZXIgdG8gdGhlIGRhdGEgdXNlZCB0byBkbyBPUiBvcGVyYXRpb24uDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaGF2aW5nIG93 bmVyc2hpcCBvZg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhIGJ1 ZmZlciBhbmQgZW5zdXJpbmcgaXRzIHNpemUgbm90IGxlc3MgdGhhbg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENvdW50IGJ5dGVzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIFRoZSBQY2lJbyBvciBPckRhdGEgaXMgTlVMTCBvciB0aGUgQ291bnQg aXMgbm90IHZhbGlkLg0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgT1Ig b3BlcmF0aW9uIHN1Y2NlZWRzLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBU aGUgT1Igb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArRHdNbWNIY09yTW1pbyAoDQo+ICsgIElOICAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICBEZXZCYXNlLA0KPiArICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgIE9mZnNldCwN Cj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBDb3VudCwNCj4gKyAgSU4gIFZPSUQg ICAgICAgICAgICAgICAgICAgICAqT3JEYXRhDQo+ICsgICk7DQo+ICsjZW5kaWYNCj4gKw0KPiAr I2lmZGVmIERXTU1DX1BDSQ0KPiArLyoqDQo+ICsgIERvIEFORCBvcGVyYXRpb24gd2l0aCB0aGUg dmFsdWUgb2YgdGhlIHNwZWNpZmllZCBTRC9NTUMgaG9zdCBjb250cm9sbGVyIG1taW8gcmVnaXN0 ZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQY2lJbyAgICAgICAgICAgICBUaGUgUENJIElPIHBy b3RvY29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIEJhckluZGV4ICAgICAgICAgIFRoZSBC QVIgaW5kZXggb2YgdGhlIHN0YW5kYXJkIFBDSSBDb25maWd1cmF0aW9uDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGVhZGVyIHRvIHVzZSBhcyB0aGUgYmFzZSBhZGRyZXNzIGZv ciB0aGUgbWVtb3J5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u IHRvIHBlcmZvcm0uDQo+ICsgIEBwYXJhbVtpbl0gT2Zmc2V0ICAgICAgICAgICAgVGhlIG9mZnNl dCB3aXRoaW4gdGhlIHNlbGVjdGVkIEJBUiB0byBzdGFydCB0aGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZW1vcnkgb3BlcmF0aW9uLg0KPiArICBAcGFyYW1baW5dIENvdW50 ICAgICAgICAgICAgIFRoZSB3aWR0aCBvZiB0aGUgbW1pbyByZWdpc3RlciBpbiBieXRlcy4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIDEsIDIgLCA0IG9yIDggYnl0 ZXMuDQo+ICsgIEBwYXJhbVtpbl0gQW5kRGF0YSAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhl IGRhdGEgdXNlZCB0byBkbyBBTkQgb3BlcmF0aW9uLg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGhhdmluZyBvd25lcnNoaXAg b2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YSBidWZmZXIgYW5k IGVuc3VyaW5nIGl0cyBzaXplIG5vdCBsZXNzIHRoYW4NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb3VudCBieXRlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBUaGUgUGNpSW8gb3IgQW5kRGF0YSBpcyBOVUxMIG9yIHRoZSBDb3VudCBpcyBub3Qg dmFsaWQuDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBBTkQgb3BlcmF0 aW9uIHN1Y2NlZWRzLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBUaGUgQU5E IG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK0R3TW1jSGNBbmRNbWlvICgNCj4gKyAgSU4gIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgICAq UGNpSW8sDQo+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgQmFySW5kZXgsDQo+ICsg IElOICBVSU5UMzIgICAgICAgICAgICAgICAgICAgT2Zmc2V0LA0KPiArICBJTiAgVUlOVDggICAg ICAgICAgICAgICAgICAgIENvdW50LA0KPiArICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAg ICpBbmREYXRhDQo+ICsgICk7DQo+ICsjZWxzZQ0KPiArLyoqDQo+ICsgIERvIEFORCBvcGVyYXRp b24gd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBTRC9NTUMgaG9zdCBjb250cm9sbGVy IG1taW8gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICAgICBU aGUgREVWSUNFIElPIHByb3RvY29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIE9mZnNldCAg ICAgICAgICAgIFRoZSBvZmZzZXQgd2l0aGluIHRoZSBzZWxlY3RlZCBCQVIgdG8gc3RhcnQgdGhl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IG9wZXJhdGlvbi4NCj4g KyAgQHBhcmFtW2luXSBDb3VudCAgICAgICAgICAgICBUaGUgd2lkdGggb2YgdGhlIG1taW8gcmVn aXN0ZXIgaW4gYnl0ZXMuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBi ZSAxLCAyICwgNCBvciA4IGJ5dGVzLg0KPiArICBAcGFyYW1baW5dIEFuZERhdGEgICAgICAgICAg IFRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIHVzZWQgdG8gZG8gQU5EIG9wZXJhdGlvbi4NCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZv ciBoYXZpbmcgb3duZXJzaGlwIG9mDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhlIGRhdGEgYnVmZmVyIGFuZCBlbnN1cmluZyBpdHMgc2l6ZSBub3QgbGVzcyB0aGFuDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQgYnl0ZXMuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVGhlIFBjaUlvIG9yIEFuZERhdGEgaXMgTlVMTCBv ciB0aGUgQ291bnQgaXMgbm90IHZhbGlkLg0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgQU5EIG9wZXJhdGlvbiBzdWNjZWVkcy4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICAgICAgVGhlIEFORCBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtEd01tY0hjQW5kTW1pbyAoDQo+ICsgIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAg ICAgICBPZmZzZXQsDQo+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgQ291bnQsDQo+ ICsgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgKkFuZERhdGENCj4gKyAgKTsNCj4gKyNl bmRpZg0KPiArDQo+ICsjaWZkZWYgRFdNTUNfUENJDQo+ICsvKioNCj4gKyAgV2FpdCBmb3IgdGhl IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgTU1JTyByZWdpc3RlciBzZXQgdG8gdGhlIHRlc3QgdmFs dWUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgUGNpSW8gICAgICAgICBUaGUgUENJIElPIHByb3Rv Y29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBCYXJJbmRleCAgICAgIFRoZSBCQVIgaW5k ZXggb2YgdGhlIHN0YW5kYXJkIFBDSSBDb25maWd1cmF0aW9uDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGVhZGVyIHRvIHVzZSBhcyB0aGUgYmFzZSBhZGRyZXNzIGZvciB0aGUgbWVt b3J5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHRvIHBlcmZvcm0u DQo+ICsgIEBwYXJhbVtpbl0gIE9mZnNldCAgICAgICAgVGhlIG9mZnNldCB3aXRoaW4gdGhlIHNl bGVjdGVkIEJBUiB0byBzdGFydCB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZW1vcnkgb3BlcmF0aW9uLg0KPiArICBAcGFyYW1baW5dICBDb3VudCAgICAgICAgIFRoZSB3aWR0 aCBvZiB0aGUgbW1pbyByZWdpc3RlciBpbiBieXRlcy4NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNdXN0IGJlIDEsIDIsIDQgb3IgOCBieXRlcy4NCj4gKyAgQHBhcmFtW2luXSAgTWFz a1ZhbHVlICAgICBUaGUgbWFzayB2YWx1ZSBvZiBtZW1vcnkuDQo+ICsgIEBwYXJhbVtpbl0gIFRl c3RWYWx1ZSAgICAgVGhlIHRlc3QgdmFsdWUgb2YgbWVtb3J5Lg0KPiArICBAcGFyYW1baW5dICBU aW1lb3V0ICAgICAgIFRoZSB0aW1lIG91dCB2YWx1ZSBmb3Igd2FpdCBtZW1vcnkgc2V0LCB1c2Vz IDENCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZCBhcyBhIHVuaXQu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICBUaGUgTU1JTyByZWdpc3RlciBo YXNuJ3QgZXhwZWN0ZWQgdmFsdWUgaW4gdGltZW91dA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJhbmdlLg0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBNTUlPIHJl Z2lzdGVyIGhhcyBleHBlY3RlZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg ICBUaGUgTU1JTyBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtEd01tY0hjV2FpdE1taW9TZXQgKA0KPiArICBJTiAgRUZJX1BDSV9JT19Q Uk9UT0NPTCAgICAgICAqUGNpSW8sDQo+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAg IEJhckluZGV4LA0KPiArICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBPZmZzZXQsDQo+ ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgIENvdW50LA0KPiArICBJTiAgVUlOVDY0 ICAgICAgICAgICAgICAgICAgICBNYXNrVmFsdWUsDQo+ICsgIElOICBVSU5UNjQgICAgICAgICAg ICAgICAgICAgIFRlc3RWYWx1ZSwNCj4gKyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAg VGltZW91dA0KPiArICApOw0KPiArI2Vsc2UNCj4gKy8qKg0KPiArICBXYWl0IGZvciB0aGUgdmFs dWUgb2YgdGhlIHNwZWNpZmllZCBNTUlPIHJlZ2lzdGVyIHNldCB0byB0aGUgdGVzdCB2YWx1ZS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBEZXZJbyAgICAgICAgIFRoZSBERVZJQ0UgSU8gcHJvdG9j b2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIE9mZnNldCAgICAgICAgVGhlIG9mZnNldCB3 aXRoaW4gdGhlIHNlbGVjdGVkIEJBUiB0byBzdGFydCB0aGUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtZW1vcnkgb3BlcmF0aW9uLg0KPiArICBAcGFyYW1baW5dICBDb3VudCAgICAg ICAgIFRoZSB3aWR0aCBvZiB0aGUgbW1pbyByZWdpc3RlciBpbiBieXRlcy4NCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIDEsIDIsIDQgb3IgOCBieXRlcy4NCj4gKyAgQHBh cmFtW2luXSAgTWFza1ZhbHVlICAgICBUaGUgbWFzayB2YWx1ZSBvZiBtZW1vcnkuDQo+ICsgIEBw YXJhbVtpbl0gIFRlc3RWYWx1ZSAgICAgVGhlIHRlc3QgdmFsdWUgb2YgbWVtb3J5Lg0KPiArICBA cGFyYW1baW5dICBUaW1lb3V0ICAgICAgIFRoZSB0aW1lIG91dCB2YWx1ZSBmb3Igd2FpdCBtZW1v cnkgc2V0LCB1c2VzIDENCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29u ZCBhcyBhIHVuaXQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICBUaGUgTU1J TyByZWdpc3RlciBoYXNuJ3QgZXhwZWN0ZWQgdmFsdWUgaW4gdGltZW91dA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJhbmdlLg0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg IFRoZSBNTUlPIHJlZ2lzdGVyIGhhcyBleHBlY3RlZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBPdGhl cnMgICAgICAgICAgICBUaGUgTU1JTyBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtEd01tY0hjV2FpdE1taW9TZXQgKA0KPiArICBJTiAg VUlOVE4gICAgICAgICAgICAgICAgICAgIERldkJhc2UsDQo+ICsgIElOICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIE9mZnNldCwNCj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg Q291bnQsDQo+ICsgIElOICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIE1hc2tWYWx1ZSwNCj4g KyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgVGVzdFZhbHVlLA0KPiArICBJTiAgVUlO VDY0ICAgICAgICAgICAgICAgICAgICBUaW1lb3V0DQo+ICsgICk7DQo+ICsjZW5kaWYNCj4gKw0K PiArI2lmZGVmIERXTU1DX1BDSQ0KPiArLyoqDQo+ICsgIFNvZnR3YXJlIHJlc2V0IHRoZSBzcGVj aWZpZWQgU0QvTU1DIGhvc3QgY29udHJvbGxlci4NCj4gKw0KPiArICBAcGFyYW1baW5dIFBjaUlv ICAgICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g U2xvdCAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhl IGNvbW1hbmQgdG8uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgc29m dHdhcmUgcmVzZXQgZXhlY3V0ZXMgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgIFRoZSBzb2Z0d2FyZSByZXNldCBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtEd01tY0hjUmVzZXQgKA0KPiArZmFyaw0KPiArICBJTiBFRklfUENJX0lPX1BS T1RPQ09MICAgICpQY2lJbywNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90LA0K PiArICBJTiBEV19NTUNfSENfU0xPVF9DQVAgICAgIENhcGFiaWxpdHkNCj4gKyAgKTsNCj4gKyNl bHNlDQo+ICsvKioNCj4gKyAgU29mdHdhcmUgcmVzZXQgdGhlIHNwZWNpZmllZCBTRC9NTUMgaG9z dCBjb250cm9sbGVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gRGV2SW8gICAgICAgICAgVGhlIERF VklDRSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgIFRoZSBzb2Z0d2FyZSByZXNldCBleGVjdXRlcyBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIHNvZnR3YXJlIHJlc2V0IGZhaWxzLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNSZXNldCAoDQo+ICsgIElOIFVJTlROICAg ICAgICAgICAgICAgICAgICBEZXZCYXNlLA0KPiArICBJTiBEV19NTUNfSENfU0xPVF9DQVAgICAg IENhcGFiaWxpdHkNCj4gKyAgKTsNCj4gKyNlbmRpZg0KPiArDQo+ICsjaWZkZWYgRFdNTUNfUENJ DQo+ICsvKioNCj4gKyAgU2V0IGFsbCBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgaW4gTm9ybWFsIGFu ZCBFcnJvciBJbnRlcnJ1cHQgU3RhdHVzIEVuYWJsZQ0KPiArICByZWdpc3Rlci4NCj4gKw0KPiAr ICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2Uu DQo+ICsgIEBwYXJhbVtpbl0gU2xvdCAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBT RCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICBUaGUgb3BlcmF0aW9uIGV4ZWN1dGVzIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNFbmFibGVJbnRlcnJ1cHQgKA0KPiArICBJTiBFRklf UENJX0lPX1BST1RPQ09MICAgICpQY2lJbywNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAg ICBTbG90DQo+ICsgICk7DQo+ICsjZWxzZQ0KPiArLyoqDQo+ICsgIFNldCBhbGwgaW50ZXJydXB0 IHN0YXR1cyBiaXRzIGluIE5vcm1hbCBhbmQgRXJyb3IgSW50ZXJydXB0IFN0YXR1cyBFbmFibGUN Cj4gKyAgcmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICBUaGUg REVWSUNFIElPIHByb3RvY29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFNsb3QgICAgICAg ICAgIFRoZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kIHRv Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIG9wZXJhdGlvbiBleGVj dXRlcyBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIG9w ZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY0hjRW5h YmxlSW50ZXJydXB0ICgNCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICBEZXZCYXNl DQo+ICsgICk7DQo+ICsjZW5kaWYNCj4gKw0KPiArI2lmZGVmIERXTU1DX1BDSQ0KPiArLyoqDQo+ ICsgIEdldCB0aGUgY2FwYWJpbGl0eSBkYXRhIGZyb20gdGhlIHNwZWNpZmllZCBzbG90Lg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFBjaUlvICAgICAgICAgICBUaGUgUENJIElPIHByb3RvY29sIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBTbG90ICAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVy IG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8uDQo+ICsgIEBwYXJhbVtvdXRd IENhcGFiaWxpdHkgICAgICBUaGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBjYXBhYmlsaXR5IGRhdGEu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgIFRoZSBvcGVyYXRpb24gZXhl Y3V0ZXMgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgVGhl IG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY0hj R2V0Q2FwYWJpbGl0eSAoDQo+ICsgIElOICAgICBFRklfUENJX0lPX1BST1RPQ09MICAqUGNpSW8s DQo+ICsgIElOICAgICBFRklfSEFORExFICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiAg ICAgVUlOVDggICAgICAgICAgICAgICAgU2xvdCwNCj4gKyAgICAgT1VUIERXX01NQ19IQ19TTE9U X0NBUCAgICpDYXBhYmlsaXR5DQo+ICsgICk7DQo+ICsjZWxzZQ0KPiArLyoqDQo+ICsgIEdldCB0 aGUgY2FwYWJpbGl0eSBkYXRhIGZyb20gdGhlIHNwZWNpZmllZCBzbG90Lg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIERldklvICAgICAgICAgICBUaGUgREVWSUNFIElPIHByb3RvY29sIGluc3RhbmNl Lg0KPiArICBAcGFyYW1baW5dICBTbG90ICAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRo ZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8uDQo+ICsgIEBwYXJhbVtvdXRdIENhcGFi aWxpdHkgICAgICBUaGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBjYXBhYmlsaXR5IGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgIFRoZSBvcGVyYXRpb24gZXhlY3V0ZXMg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgVGhlIG9wZXJh dGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY0hjR2V0Q2Fw YWJpbGl0eSAoDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgRGV2QmFzZSwNCj4g KyAgSU4gICAgIEVGSV9IQU5ETEUgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOICAg ICBVSU5UOCAgICAgICAgICAgICAgICAgICBTbG90LA0KPiArICAgICBPVVQgRFdfTU1DX0hDX1NM T1RfQ0FQICAgICAgKkNhcGFiaWxpdHkNCj4gKyAgKTsNCj4gKyNlbmRpZg0KPiArDQo+ICsjaWYg MA0KPiArLyoqDQo+ICsgIEdldCB0aGUgbWF4aW11bSBjdXJyZW50IGNhcGFiaWxpdHkgZGF0YSBm cm9tIHRoZSBzcGVjaWZpZWQgc2xvdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBQY2lJbyAgICAg ICAgICAgVGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgU2xv dCAgICAgICAgICAgIFRoZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBj b21tYW5kIHRvLg0KPiArICBAcGFyYW1bb3V0XSBNYXhDdXJyZW50ICAgICAgVGhlIGJ1ZmZlciB0 byBzdG9yZSB0aGUgbWF4aW11bSBjdXJyZW50IGNhcGFiaWxpdHkgZGF0YS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgVGhlIG9wZXJhdGlvbiBleGVjdXRlcyBzdWNjZXNz ZnVsbHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZh aWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNHZXRNYXhDdXJyZW50 ICgNCj4gKyAgSU4gICAgIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICpQY2lJbywNCj4gKyAgSU4gICAg IFVJTlQ4ICAgICAgICAgICAgICAgIFNsb3QsDQo+ICsgICAgIE9VVCBVSU5UNjQgICAgICAgICAg ICAgICAqTWF4Q3VycmVudA0KPiArICApOw0KPiArI2VuZGlmDQo+ICsNCj4gKyNpZmRlZiBEV01N Q19QQ0kNCj4gKy8qKg0KPiArICBEZXRlY3Qgd2hldGhlciB0aGVyZSBpcyBhIFNEL01NQyBjYXJk IGF0dGFjaGVkIGF0IHRoZSBzcGVjaWZpZWQgU0QvTU1DIGhvc3QgY29udHJvbGxlcg0KPiArICBz bG90Lg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIEhvc3QgQ29udHJvbGxlciBTaW1wbGlmaWVkIHNw ZWMgMy4wIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFBj aUlvICAgICAgICAgVGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSAgU2xvdCAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0 aGUgY29tbWFuZCB0by4NCj4gKyAgQHBhcmFtW291dF0gTWVkaWFQcmVzZW50ICBUaGUgcG9pbnRl ciB0byB0aGUgbWVkaWEgcHJlc2VudCBib29sZWFuIHZhbHVlLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgVGhlcmUgaXMgbm8gbWVkaWEgY2hhbmdlIGhhcHBlbmVkLg0KPiAr ICBAcmV0dmFsIEVGSV9NRURJQV9DSEFOR0VEIFRoZXJlIGlzIG1lZGlhIGNoYW5nZSBoYXBwZW5l ZC4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgZGV0ZWN0aW9uIGZhaWxzLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNDYXJkRGV0ZWN0ICgNCj4gKyAg SU4gICAgIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICpQY2lJbywNCj4gKyAgSU4gICAgIEVGSV9IQU5E TEUgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOICAgICBVSU5UOCAgICAgICAgICAgICAg ICBTbG90LA0KPiArICAgICBPVVQgQk9PTEVBTiAgICAgICAgICAgICAgKk1lZGlhUHJlc2VudA0K PiArICApOw0KPiArI2Vsc2UNCj4gKy8qKg0KPiArICBEZXRlY3Qgd2hldGhlciB0aGVyZSBpcyBh IFNEL01NQyBjYXJkIGF0dGFjaGVkIGF0IHRoZSBzcGVjaWZpZWQgU0QvTU1DIGhvc3QgY29udHJv bGxlcg0KPiArICBzbG90Lg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIEhvc3QgQ29udHJvbGxlciBT aW1wbGlmaWVkIHNwZWMgMy4wIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIERldklvICAgICAgICAgVGhlIERFVklDRSBJTyBwcm90b2NvbCBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW2luXSAgU2xvdCAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNE IGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4NCj4gKyAgQHBhcmFtW291dF0gTWVkaWFQcmVz ZW50ICBUaGUgcG9pbnRlciB0byB0aGUgbWVkaWEgcHJlc2VudCBib29sZWFuIHZhbHVlLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlcmUgaXMgbm8gbWVkaWEgY2hhbmdl IGhhcHBlbmVkLg0KPiArICBAcmV0dmFsIEVGSV9NRURJQV9DSEFOR0VEIFRoZXJlIGlzIG1lZGlh IGNoYW5nZSBoYXBwZW5lZC4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgZGV0 ZWN0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNDYXJk RGV0ZWN0ICgNCj4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgIERldkJhc2UsDQo+ ICsgIElOICAgICBFRklfSEFORExFICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiAg ICAgVUlOVDggICAgICAgICAgICAgICAgICAgU2xvdCwNCj4gKyAgICAgT1VUIEJPT0xFQU4gICAg ICAgICAgICAgICAgICpNZWRpYVByZXNlbnQNCj4gKyAgKTsNCj4gKyNlbmRpZg0KPiArDQo+ICsj aWZkZWYgRFdNTUNfUENJDQo+ICsvKioNCj4gKyAgU3RvcCBTRC9NTUMgY2FyZCBjbG9jay4NCj4g Kw0KPiArICBSZWZlciB0byBTRCBIb3N0IENvbnRyb2xsZXIgU2ltcGxpZmllZCBzcGVjIDMuMCBT ZWN0aW9uIDMuMi4yIGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGNpSW8gICAg ICAgICAgVGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBTbG90 ICAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29t bWFuZCB0by4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFN1Y2NlZWQgdG8g c3RvcCBTRC9NTUMgY2xvY2suDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgRmFpbCB0 byBzdG9wIFNEL01NQyBjbG9jay4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01t Y0hjU3RvcENsb2NrICgNCj4gKyAgSU4gRUZJX1BDSV9JT19QUk9UT0NPTCAgICAqUGNpSW8sDQo+ ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgU2xvdA0KPiArICApOw0KPiArDQo+ICsvKioN Cj4gKyAgU0QvTU1DIGNhcmQgY2xvY2sgc3VwcGx5Lg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIEhv c3QgQ29udHJvbGxlciBTaW1wbGlmaWVkIHNwZWMgMy4wIFNlY3Rpb24gMy4yLjEgZm9yIGRldGFp bHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQY2lJbyAgICAgICAgICBUaGUgUENJIElPIHByb3Rv Y29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFNsb3QgICAgICAgICAgIFRoZSBzbG90IG51 bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kIHRvLg0KPiArICBAcGFyYW1b aW5dIENsb2NrRnJlcSAgICAgIFRoZSBtYXggY2xvY2sgZnJlcXVlbmN5IHRvIGJlIHNldC4gVGhl IHVuaXQgaXMgS0h6Lg0KPiArICBAcGFyYW1baW5dIENhcGFiaWxpdHkgICAgIFRoZSBjYXBhYmls aXR5IG9mIHRoZSBzbG90Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhl IGNsb2NrIGlzIHN1cHBsaWVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICBUaGUgY2xvY2sgaXNuJ3Qgc3VwcGxpZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNDbG9ja1N1cHBseSAoDQo+ICsgIElOIEVGSV9Q Q0lfSU9fUFJPVE9DT0wgICAgKlBjaUlvLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAg IFNsb3QsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgQ2xvY2tGcmVxLA0KPiArICBJ TiBEV19NTUNfSENfU0xPVF9DQVAgICAgIENhcGFiaWxpdHkNCj4gKyAgKTsNCj4gKyNlbHNlDQo+ ICsvKioNCj4gKyAgU3RvcCBTRC9NTUMgY2FyZCBjbG9jay4NCj4gKw0KPiArICBSZWZlciB0byBT RCBIb3N0IENvbnRyb2xsZXIgU2ltcGxpZmllZCBzcGVjIDMuMCBTZWN0aW9uIDMuMi4yIGZvciBk ZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gRGV2SW8gICAgICAgICAgVGhlIERFVklDRSBJ TyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg IFN1Y2NlZWQgdG8gc3RvcCBTRC9NTUMgY2xvY2suDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAg ICAgICAgRmFpbCB0byBzdG9wIFNEL01NQyBjbG9jay4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtEd01tY0hjU3RvcENsb2NrICgNCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAg ICAgICBEZXZCYXNlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBTRC9NTUMgY2FyZCBjbG9j ayBzdXBwbHkuDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgSG9zdCBDb250cm9sbGVyIFNpbXBsaWZp ZWQgc3BlYyAzLjAgU2VjdGlvbiAzLjIuMSBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1b aW5dIERldklvICAgICAgICAgIFRoZSBERVZJQ0UgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsg IEBwYXJhbVtpbl0gQ2xvY2tGcmVxICAgICAgVGhlIG1heCBjbG9jayBmcmVxdWVuY3kgdG8gYmUg c2V0LiBUaGUgdW5pdCBpcyBLSHouDQo+ICsgIEBwYXJhbVtpbl0gQ2FwYWJpbGl0eSAgICAgVGhl IGNhcGFiaWxpdHkgb2YgdGhlIHNsb3QuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICBUaGUgY2xvY2sgaXMgc3VwcGxpZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90 aGVycyAgICAgICAgICAgIFRoZSBjbG9jayBpc24ndCBzdXBwbGllZCBzdWNjZXNzZnVsbHkuDQo+ ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHdNbWNIY0Nsb2NrU3VwcGx5ICgNCj4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICBEZXZCYXNlLA0KPiArICBJTiBVSU5UNjQgICAg ICAgICAgICAgICAgIENsb2NrRnJlcSwNCj4gKyAgSU4gRFdfTU1DX0hDX1NMT1RfQ0FQICAgICBD YXBhYmlsaXR5DQo+ICsgICk7DQo+ICsjZW5kaWYNCj4gKw0KPiArI2lmIDANCj4gKy8qKg0KPiAr ICBTRC9NTUMgYnVzIHBvd2VyIGNvbnRyb2wuDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgSG9zdCBD b250cm9sbGVyIFNpbXBsaWZpZWQgc3BlYyAzLjAgU2VjdGlvbiAzLjMgZm9yIGRldGFpbHMuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSBQY2lJbyAgICAgICAgICBUaGUgUENJIElPIHByb3RvY29sIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFNsb3QgICAgICAgICAgIFRoZSBzbG90IG51bWJlciBv ZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kIHRvLg0KPiArICBAcGFyYW1baW5dIFBv d2VyQ3RybCAgICAgIFRoZSB2YWx1ZSBzZXR0aW5nIHRvIHRoZSBwb3dlciBjb250cm9sIHJlZ2lz dGVyLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgVGhlcmUgaXMgYSBTRC9N TUMgY2FyZCBhdHRhY2hlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICBUaGVyZSBp cyBubyBhIFNEL01NQyBjYXJkIGF0dGFjaGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0R3TW1jSGNQb3dlckNvbnRyb2wgKA0KPiArICBJTiBFRklfUENJX0lPX1BST1RPQ09MICAg ICpQY2lJbywNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90LA0KPiArICBJTiBV SU5UOCAgICAgICAgICAgICAgICAgIFBvd2VyQ3RybA0KPiArICApOw0KPiArI2VuZGlmDQo+ICsN Cj4gKyNpZmRlZiBEV01NQ19QQ0kNCj4gKy8qKg0KPiArICBTZXQgdGhlIFNEL01NQyBidXMgd2lk dGguDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgSG9zdCBDb250cm9sbGVyIFNpbXBsaWZpZWQgc3Bl YyAzLjAgU2VjdGlvbiAzLjQgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQY2lJ byAgICAgICAgICBUaGUgUENJIElPIHByb3RvY29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5d IFNsb3QgICAgICAgICAgIFRoZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRo ZSBjb21tYW5kIHRvLg0KPiArICBAcGFyYW1baW5dIEJ1c1dpZHRoICAgICAgIFRoZSBidXMgd2lk dGggdXNlZCBieSB0aGUgU0QvTU1DIGRldmljZSwgaXQgbXVzdCBiZSAxLCA0IG9yIDguDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgYnVzIHdpZHRoIGlzIHNldCBzdWNj ZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIGJ1cyB3aWR0aCBp c24ndCBzZXQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3 TW1jSGNTZXRCdXNXaWR0aCAoDQo+ICsgIElOIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgKlBjaUlv LA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgIFNsb3QsDQo+ICsgIElOIEJPT0xFQU4g ICAgICAgICAgICAgICAgSXNEZHIsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgQnVz V2lkdGgNCj4gKyAgKTsNCj4gKyNlbHNlDQo+ICsvKioNCj4gKyAgU2V0IHRoZSBTRC9NTUMgYnVz IHdpZHRoLg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIEhvc3QgQ29udHJvbGxlciBTaW1wbGlmaWVk IHNwZWMgMy4wIFNlY3Rpb24gMy40IGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g RGV2SW8gICAgICAgICAgVGhlIERFVklDRSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luXSBCdXNXaWR0aCAgICAgICBUaGUgYnVzIHdpZHRoIHVzZWQgYnkgdGhlIFNEL01NQyBk ZXZpY2UsIGl0IG11c3QgYmUgMSwgNCBvciA4Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgVGhlIGJ1cyB3aWR0aCBpcyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IE90aGVycyAgICAgICAgICAgIFRoZSBidXMgd2lkdGggaXNuJ3Qgc2V0IHN1Y2Nlc3NmdWxseS4N Cj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY0hjU2V0QnVzV2lkdGggKA0KPiAr ICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgIERldkJhc2UsDQo+ICsgIElOIEJPT0xFQU4g ICAgICAgICAgICAgICAgSXNEZHIsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgQnVz V2lkdGgNCj4gKyAgKTsNCj4gKyNlbmRpZg0KPiArDQo+ICsjaWZkZWYgRFdNTUNfUENJDQo+ICsv KioNCj4gKyAgU3VwcGx5IFNEL01NQyBjYXJkIHdpdGggbG93ZXN0IGNsb2NrIGZyZXF1ZW5jeSBh dCBpbml0aWFsaXphdGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgIFRo ZSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gU2xvdCAgICAgICAg ICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8u DQo+ICsgIEBwYXJhbVtpbl0gQ2FwYWJpbGl0eSAgICAgVGhlIGNhcGFiaWxpdHkgb2YgdGhlIHNs b3QuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgY2xvY2sgaXMgc3Vw cGxpZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBj bG9jayBpc24ndCBzdXBwbGllZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRHdNbWNIY0luaXRDbG9ja0ZyZXEgKA0KPiArICBJTiBFRklfUENJX0lPX1BST1RP Q09MICAgICpQY2lJbywNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBTbG90LA0KPiAr ICBJTiBEV19NTUNfSENfU0xPVF9DQVAgICAgIENhcGFiaWxpdHkNCj4gKyAgKTsNCj4gKyNlbHNl DQo+ICsvKioNCj4gKyAgU3VwcGx5IFNEL01NQyBjYXJkIHdpdGggbG93ZXN0IGNsb2NrIGZyZXF1 ZW5jeSBhdCBpbml0aWFsaXphdGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dIERldklvICAgICAg ICAgIFRoZSBERVZJQ0UgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gQ2Fw YWJpbGl0eSAgICAgVGhlIGNhcGFiaWxpdHkgb2YgdGhlIHNsb3QuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICBUaGUgY2xvY2sgaXMgc3VwcGxpZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBjbG9jayBpc24ndCBzdXBwbGllZCBz dWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHdNbWNIY0luaXRD bG9ja0ZyZXEgKA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIERldkJhc2UsDQo+ICsg IElOIERXX01NQ19IQ19TTE9UX0NBUCAgICAgQ2FwYWJpbGl0eQ0KPiArICApOw0KPiArI2VuZGlm DQo+ICsNCj4gKyNpZmRlZiBEV01NQ19QQ0kNCj4gKy8qKg0KPiArICBTdXBwbHkgU0QvTU1DIGNh cmQgd2l0aCBtYXhpbXVtIHZvbHRhZ2UgYXQgaW5pdGlhbGl6YXRpb24uDQo+ICsNCj4gKyAgUmVm ZXIgdG8gU0QgSG9zdCBDb250cm9sbGVyIFNpbXBsaWZpZWQgc3BlYyAzLjAgU2VjdGlvbiAzLjMg Zm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQY2lJbyAgICAgICAgICBUaGUgUENJ IElPIHByb3RvY29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFNsb3QgICAgICAgICAgIFRo ZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kIHRvLg0KPiAr ICBAcGFyYW1baW5dIENhcGFiaWxpdHkgICAgIFRoZSBjYXBhYmlsaXR5IG9mIHRoZSBzbG90Lg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIHZvbHRhZ2UgaXMgc3VwcGxp ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSB2b2x0 YWdlIGlzbid0IHN1cHBsaWVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtEd01tY0hjSW5pdFBvd2VyVm9sdGFnZSAoDQo+ICsgIElOIEVGSV9QQ0lfSU9fUFJP VE9DT0wgICAgKlBjaUlvLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgIFNsb3QsDQo+ ICsgIElOIERXX01NQ19IQ19TTE9UX0NBUCAgICAgQ2FwYWJpbGl0eQ0KPiArICApOw0KPiArI2Vs c2UNCj4gKy8qKg0KPiArICBTdXBwbHkgU0QvTU1DIGNhcmQgd2l0aCBtYXhpbXVtIHZvbHRhZ2Ug YXQgaW5pdGlhbGl6YXRpb24uDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgSG9zdCBDb250cm9sbGVy IFNpbXBsaWZpZWQgc3BlYyAzLjAgU2VjdGlvbiAzLjMgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSBEZXZJbyAgICAgICAgICBUaGUgREVWSUNFIElPIHByb3RvY29sIGluc3RhbmNl Lg0KPiArICBAcGFyYW1baW5dIENhcGFiaWxpdHkgICAgIFRoZSBjYXBhYmlsaXR5IG9mIHRoZSBz bG90Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIHZvbHRhZ2UgaXMg c3VwcGxpZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRo ZSB2b2x0YWdlIGlzbid0IHN1cHBsaWVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtEd01tY0hjSW5pdFBvd2VyVm9sdGFnZSAoDQo+ICsgIElOIFVJTlROICAg ICAgICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gRFdfTU1DX0hDX1NMT1RfQ0FQICAgICBD YXBhYmlsaXR5DQo+ICsgICk7DQo+ICsjZW5kaWYNCj4gKw0KPiArI2lmZGVmIERXTU1DX1BDSQ0K PiArLyoqDQo+ICsgIEluaXRpYWxpemUgdGhlIFRpbWVvdXQgQ29udHJvbCByZWdpc3RlciB3aXRo IG1vc3QgY29uc2VydmF0aXZlIHZhbHVlIGF0IGluaXRpYWxpemF0aW9uLg0KPiArDQo+ICsgIFJl ZmVyIHRvIFNEIEhvc3QgQ29udHJvbGxlciBTaW1wbGlmaWVkIHNwZWMgMy4wIFNlY3Rpb24gMi4y LjE1IGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGNpSW8gICAgICAgICAgVGhl IFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBTbG90ICAgICAgICAg ICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSB0aW1lb3V0IGNvbnRyb2wg cmVnaXN0ZXIgaXMgY29uZmlndXJlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgT3RoZXJz ICAgICAgICAgICAgVGhlIHRpbWVvdXQgY29udHJvbCByZWdpc3RlciBpc24ndCBjb25maWd1cmVk IHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY0hjSW5p dFRpbWVvdXRDdHJsICgNCj4gKyAgSU4gRUZJX1BDSV9JT19QUk9UT0NPTCAgICAqUGNpSW8sDQo+ ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgU2xvdA0KPiArICApOw0KPiArI2Vsc2UNCj4g Ky8qKg0KPiArICBJbml0aWFsaXplIHRoZSBUaW1lb3V0IENvbnRyb2wgcmVnaXN0ZXIgd2l0aCBt b3N0IGNvbnNlcnZhdGl2ZSB2YWx1ZSBhdCBpbml0aWFsaXphdGlvbi4NCj4gKw0KPiArICBSZWZl ciB0byBTRCBIb3N0IENvbnRyb2xsZXIgU2ltcGxpZmllZCBzcGVjIDMuMCBTZWN0aW9uIDIuMi4x NSBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1baW5dIERldklvICAgICAgICAgIFRoZSBE RVZJQ0UgSU8gcHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gU2xvdCAgICAgICAg ICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8u DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgdGltZW91dCBjb250cm9s IHJlZ2lzdGVyIGlzIGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgIFRoZSB0aW1lb3V0IGNvbnRyb2wgcmVnaXN0ZXIgaXNuJ3QgY29uZmlndXJl ZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHdNbWNIY0lu aXRUaW1lb3V0Q3RybCAoDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgRGV2QmFz ZQ0KPiArICApOw0KPiArI2VuZGlmDQo+ICsNCj4gKyNpZmRlZiBEV01NQ19QQ0kNCj4gKy8qKg0K PiArICBJbml0aWFsIFNEL01NQyBob3N0IGNvbnRyb2xsZXIgd2l0aCBsb3dlc3QgY2xvY2sgZnJl cXVlbmN5LCBtYXggcG93ZXIgYW5kIG1heCB0aW1lb3V0IHZhbHVlDQo+ICsgIGF0IGluaXRpYWxp emF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGNpSW8gICAgICAgICAgVGhlIFBDSSBJTyBw cm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBTbG90ICAgICAgICAgICBUaGUgc2xv dCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4NCj4gKyAgQHBh cmFtW2luXSBDYXBhYmlsaXR5ICAgICBUaGUgY2FwYWJpbGl0eSBvZiB0aGUgc2xvdC4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBob3N0IGNvbnRyb2xsZXIgaXMgaW5p dGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRo ZSBob3N0IGNvbnRyb2xsZXIgaXNuJ3QgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNJbml0SG9zdCAoDQo+ICsgIElOIEVGSV9Q Q0lfSU9fUFJPVE9DT0wgICAgKlBjaUlvLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAg IFNsb3QsDQo+ICsgIElOIERXX01NQ19IQ19TTE9UX0NBUCAgICAgQ2FwYWJpbGl0eQ0KPiArICAp Ow0KPiArI2Vsc2UNCj4gKy8qKg0KPiArICBJbml0aWFsIFNEL01NQyBob3N0IGNvbnRyb2xsZXIg d2l0aCBsb3dlc3QgY2xvY2sgZnJlcXVlbmN5LCBtYXggcG93ZXIgYW5kDQo+ICsgIG1heCB0aW1l b3V0IHZhbHVlIGF0IGluaXRpYWxpemF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gRGV2SW8g ICAgICAgICAgVGhlIERFVklDRSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSBDYXBhYmlsaXR5ICAgICBUaGUgY2FwYWJpbGl0eSBvZiB0aGUgc2xvdC4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBob3N0IGNvbnRyb2xsZXIgaXMgaW5pdGlhbGl6 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBob3N0 IGNvbnRyb2xsZXIgaXNuJ3QgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNJbml0SG9zdCAoDQo+ICsgIElOICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gRFdfTU1DX0hDX1NMT1RfQ0FQICAgICAg ICBDYXBhYmlsaXR5DQo+ICsgICk7DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmIC8qIF9EV19N TUNfSENJX0hfICovDQo+IGRpZmYgLS1naXQgYS9FbWJlZGRlZFBrZy9JbmNsdWRlL1Byb3RvY29s L1BsYXRmb3JtRHdNbWMuaCBiL0VtYmVkZGVkUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGxhdGZvcm1E d01tYy5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWNi YzNlMTUzZGFjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvRW1iZWRkZWRQa2cvSW5jbHVkZS9Q cm90b2NvbC9QbGF0Zm9ybUR3TW1jLmgNCj4gQEAgLTAsMCArMSw3OSBAQA0KPiArLyoqIEBmaWxl DQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE4LCBMaW5hcm8uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuDQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFs cyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlDQo+ICsgIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5pZXMgdGhpcw0K PiArICBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBm b3VuZCBhdA0KPiArICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2Uu cGhwDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBM SUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBS RVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ ICsNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9fUExBVEZPUk1fRFdfTU1DX0hfXw0KPiArI2Rl ZmluZSBfX1BMQVRGT1JNX0RXX01NQ19IX18NCj4gKw0KPiArdHlwZWRlZiBlbnVtIHsNCj4gKyAg UmVtb3ZhYmxlU2xvdCwNCj4gKyAgRW1iZWRkZWRTbG90LA0KPiArICBTaGFyZWRCdXNTbG90LA0K PiArICBVbmtub3duU2xvdA0KPiArfSBFRklfU0RfTU1DX1NMT1RfVFlQRTsNCj4gKw0KPiArdHlw ZWRlZiBlbnVtIHsNCj4gKyAgVW5rbm93bkNhcmRUeXBlLA0KPiArICBTZENhcmRUeXBlLA0KPiAr ICBTZGlvQ2FyZFR5cGUsDQo+ICsgIE1tY0NhcmRUeXBlLA0KPiArICBFbW1jQ2FyZFR5cGUNCj4g K30gU0RfTU1DX0NBUkRfVFlQRTsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5U MzIgICAgICAgIERlZmF1bHRTcGVlZDoxOyAgICAvLyBiaXQgMA0KPiArICBVSU5UMzIgICAgICAg IEhpZ2hTcGVlZDoxOyAgICAgICAvLyBiaXQgMQ0KPiArICBVSU5UMzIgICAgICAgIFNkcjEyOjE7 ICAgICAgICAgICAvLyBiaXQgMg0KPiArICBVSU5UMzIgICAgICAgIFNkcjI1OjE7ICAgICAgICAg ICAvLyBiaXQgMw0KPiArICBVSU5UMzIgICAgICAgIFNkcjUwOjE7ICAgICAgICAgICAvLyBiaXQg NA0KPiArICBVSU5UMzIgICAgICAgIFNkcjEwNDoxOyAgICAgICAgICAvLyBiaXQgNQ0KPiArICBV SU5UMzIgICAgICAgIERkcjUwOjE7ICAgICAgICAgICAvLyBiaXQgNg0KPiArICBVSU5UMzIgICAg ICAgIFN5c0J1czY0OjE7ICAgICAgICAvLyBiaXQgNw0KPiArICBVSU5UMzIgICAgICAgIEJ1c1dp ZHRoOjQ7ICAgICAgICAvLyBiaXQgMTE6OA0KPiArICBVSU5UMzIgICAgICAgIFNsb3RUeXBlOjI7 ICAgICAgICAvLyBiaXQgMTM6MTINCj4gKyAgVUlOVDMyICAgICAgICBDYXJkVHlwZTozOyAgICAg ICAgLy8gYml0IDE2OjE0DQo+ICsgIFVJTlQzMiAgICAgICAgVm9sdGFnZTE4OjE7ICAgICAgIC8v IGJpdCAxNw0KPiArICBVSU5UMzIgICAgICAgIFZvbHRhZ2UzMDoxOyAgICAgICAvLyBiaXQgMTgN Cj4gKyAgVUlOVDMyICAgICAgICBWb2x0YWdlMzM6MTsgICAgICAgLy8gYml0IDE5DQo+ICsgIFVJ TlQzMiAgICAgICAgQmFzZUNsa0ZyZXE7DQo+ICsgIEVGSV9IQU5ETEUgICAgQ29udHJvbGxlcjsN Cj4gK30gRFdfTU1DX0hDX1NMT1RfQ0FQOw0KPiArDQo+ICsvLw0KPiArLy8gUHJvdG9jb2wgaW50 ZXJmYWNlIHN0cnVjdHVyZQ0KPiArLy8NCj4gK3R5cGVkZWYgc3RydWN0IF9QTEFURk9STV9EV19N TUNfUFJPVE9DT0wgICAgICAgUExBVEZPUk1fRFdfTU1DX1BST1RPQ09MOw0KPiArDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpQTEFURk9STV9EV19NTUNfR0VUX0NBUEFC SUxJVFkpICgNCj4gKyAgSU4gICAgIEVGSV9IQU5ETEUgICAgICAgICAgICAgQ29udHJvbGxlciwN Cj4gKyAgSU4gICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgU2xvdCwNCj4gKyAgICAgT1VUIERX X01NQ19IQ19TTE9UX0NBUCAgICAgKkNhcGFiaWxpdHkNCj4gKyAgKTsNCj4gKw0KPiArdHlwZWRl Zg0KPiArQk9PTEVBTg0KPiArKEVGSUFQSSAqUExBVEZPUk1fRFdfTU1DX0NBUkRfREVURUNUKSAo DQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElO IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIFNsb3QNCj4gKyAgKTsNCj4gKw0KPiArc3RydWN0 IF9QTEFURk9STV9EV19NTUNfUFJPVE9DT0wgew0KPiArICBQTEFURk9STV9EV19NTUNfR0VUX0NB UEFCSUxJVFkgICAgICAgICAgICAgICBHZXRDYXBhYmlsaXR5Ow0KPiArICBQTEFURk9STV9EV19N TUNfQ0FSRF9ERVRFQ1QgICAgICAgICAgICAgICAgICBDYXJkRGV0ZWN0Ow0KPiArfTsNCj4gKw0K PiArZXh0ZXJuIEVGSV9HVUlEIGdQbGF0Zm9ybUR3TW1jUHJvdG9jb2xHdWlkOw0KPiArDQo+ICsj ZW5kaWYgLyogX19QTEFURk9STV9EV19NTUNfSF9fICovDQo+IGRpZmYgLS1naXQgYS9FbWJlZGRl ZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvQ29tcG9uZW50TmFtZS5jIGIvRW1iZWRkZWRQa2cvRHJp dmVycy9Ed01tY0hjRHhlL0NvbXBvbmVudE5hbWUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMDAwMDAuLjFlZGFkZTY5ZDA5MQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL0VtYmVkZGVkUGtnL0RyaXZlcnMvRHdNbWNIY0R4ZS9Db21wb25lbnROYW1lLmMNCj4gQEAg LTAsMCArMSwyMTQgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBVRUZJIENvbXBvbmVudCBOYW1lKDIp IHByb3RvY29sIGltcGxlbWVudGF0aW9uIGZvciBEZXNpZ253YXJlIFNEL01NQyBob3N0DQo+ICsg IGNvbnRyb2xsZXIgZHJpdmVyLg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAxNSwgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMp IDIwMTgsIExpbmFybyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArDQo+ICsgIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZQ0KPiArICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEJTRCBMaWNlbnNlIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMNCj4gKyAgZGlzdHJpYnV0aW9u LiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyAgaHR0 cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRI RSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMg SVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0K PiArI2luY2x1ZGUgIkR3TW1jSGNEeGUuaCINCj4gKw0KPiArLy8NCj4gKy8vIEVGSSBDb21wb25l bnQgTmFtZSBQcm90b2NvbA0KPiArLy8NCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VE IEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBnRHdNbWNIY0NvbXBvbmVudE5hbWUgPSB7DQo+ ICsgIER3TW1jSGNDb21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gKyAgRHdNbWNIY0NvbXBv bmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4gKyAgImVuZyINCj4gK307DQo+ICsNCj4gKy8v DQo+ICsvLyBFRkkgQ29tcG9uZW50IE5hbWUgMiBQcm90b2NvbA0KPiArLy8NCj4gK0dMT0JBTF9S RU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgZ0R3TW1j SGNDb21wb25lbnROYW1lMiA9IHsNCj4gKyAgKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0RSSVZF Ul9OQU1FKSAgICAgRHdNbWNIY0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0KPiArICAoRUZJ X0NPTVBPTkVOVF9OQU1FMl9HRVRfQ09OVFJPTExFUl9OQU1FKSBEd01tY0hjQ29tcG9uZW50TmFt ZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAiZW4iDQo+ICt9Ow0KPiArDQo+ICtHTE9CQUxfUkVN T1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09ERV9TVFJJTkdfVEFCTEUgbUR3TW1jSGNEcml2 ZXJOYW1lVGFibGVbXSA9IHsNCj4gKyAgeyAiZW5nO2VuIiwgTCJEZXNpZ253YXJlIFNkL01tYyBI b3N0IENvbnRyb2xsZXIgRHJpdmVyIiB9LA0KPiArICB7IE5VTEwgLCBOVUxMIH0NCj4gK307DQo+ ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19U QUJMRSBtRHdNbWNIY0NvbnRyb2xsZXJOYW1lVGFibGVbXSA9IHsNCj4gKyAgeyAiZW5nO2VuIiwg TCJEZXNpZ253YXJlIFNkL01tYyBIb3N0IENvbnRyb2xsZXIiIH0sDQo+ICsgIHsgTlVMTCAsIE5V TEwgfQ0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5n IHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgZHJpdmVyLg0KPiArDQo+ICsg IFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgYSBkcml2 ZXIgaW4gdGhlIGZvcm0gb2YgYQ0KPiArICBVbmljb2RlIHN0cmluZy4gSWYgdGhlIGRyaXZlciBz cGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4NCj4gKyAgdGhlIGxh bmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGRyaXZl ciBuYW1lIGlzDQo+ICsgIHJldHVybmVkIGluIERyaXZlck5hbWUsIGFuZCBFRklfU1VDQ0VTUyBp cyByZXR1cm5lZC4gSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQNCj4gKyAgYnkgVGhpcyBkb2VzIG5v dCBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsDQo+ICsgIHRoZW4g RUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBwYXJhbSAgVGhpc1tpbl0g ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NP TCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfQ09NUE9ORU5UX05B TUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHBhcmFtICBMYW5ndWFnZVtpbl0gICAg ICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRoZSBsYW5ndWFn ZS4gVGhpcyBpcyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3Vh Z2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2Yg dGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZp ZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXAN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIu IExhbmd1YWdlIGlzIHNwZWNpZmllZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbiBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsNCj4g KyAgQHBhcmFtICBEcml2ZXJOYW1lW291dF0gICAgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2Rl IHN0cmluZyB0byByZXR1cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRo aXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpbiB0aGUgbGFuZ3VhZ2UN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IExhbmd1YWdl Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0 cmluZyBmb3IgdGhlIERyaXZlciBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGhpcyBhbmQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSB3 YXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVy TmFtZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBp cyBOVUxMLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIERyaXZlck5h bWUgaXMgTlVMTC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUg ZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4N Cj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0R3TW1jSGNDb21wb25l bnROYW1lR2V0RHJpdmVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9D T0wgICAgICpUaGlzLA0KPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAq TGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICoqRHJp dmVyTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBMb29rdXBVbmljb2RlU3RyaW5nMiAo DQo+ICsgICAgICAgICAgIExhbmd1YWdlLA0KPiArICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRM YW5ndWFnZXMsDQo+ICsgICAgICAgICAgIG1Ed01tY0hjRHJpdmVyTmFtZVRhYmxlLA0KPiArICAg ICAgICAgICBEcml2ZXJOYW1lLA0KPiArICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAmZ0R3 TW1jSGNDb21wb25lbnROYW1lKQ0KPiArICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJs ZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyDQo+ICsgIHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSBh IGRyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFk YWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0KPiArICBDb250cm9sbGVy SGFuZGxlIGFuZCBDaGlsZEhhbmRsZSBpbiB0aGUgZm9ybSBvZiBhIFVuaWNvZGUgc3RyaW5nLiBJ ZiB0aGUNCj4gKyAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUg bmFtZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQo+ICsgIExhbmd1YWdlLCB0aGVuIGEg cG9pbnRlciB0byB0aGUgY29udHJvbGxlciBuYW1lIGlzIHJldHVybmVkIGluIENvbnRyb2xsZXJO YW1lLA0KPiArICBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNw ZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCj4gKyAgbWFuYWdpbmcgdGhlIGNvbnRy b2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLA0KPiAr ICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lm aWVkIGJ5IFRoaXMgZG9lcyBub3QNCj4gKyAgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5IExhbmd1YWdlLCB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiAr ICBAcGFyYW0gIFRoaXNbaW5dICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01Q T05FTlRfTkFNRTJfUFJPVE9DT0wgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJh bSAgQ29udHJvbGxlckhhbmRsZVtpbl0gIFRoZSBoYW5kbGUgb2YgYSBjb250cm9sbGVyIHRoYXQg dGhlIGRyaXZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQg YnkgVGhpcyBpcyBtYW5hZ2luZy4gIFRoaXMgaGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgY29udHJvbGxlciB3aG9zZSBuYW1lIGlzIHRvIGJl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLg0KPiArDQo+ICsg IEBwYXJhbSAgQ2hpbGRIYW5kbGVbaW5dICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNoaWxkIGNv bnRyb2xsZXIgdG8gcmV0cmlldmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhlIG5hbWUgb2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBOVUxMLiAgSXQgd2lsbCBiZSBOVUxM IGZvciBkZXZpY2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy4g IEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBhIGJ1cyBkcml2ZXJzDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUg YnVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuICBJdCB3 aWxsIG5vdCBiZSBOVUxMIGZvciBhIGJ1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgYQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCBjb250cm9sbGVyLg0KPiArDQo+ICsg IEBwYXJhbSAgTGFuZ3VhZ2VbaW5dICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWlu YXRlZCBBU0NJSSBzdHJpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy YXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuICBUaGlzIGlzIHRoZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUg Y2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rpbmcs IGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMuIFRoZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1 cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkIGluDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQyA0NjQ2IG9yIElTTyA2MzktMiBsYW5n dWFnZSBjb2RlIGZvcm1hdC4NCj4gKw0KPiArICBAcGFyYW0gIENvbnRyb2xsZXJOYW1lW291dF0g ICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBv ZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciBzcGVj aWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ2hpbGRIYW5kbGUgaW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSBmcm9tIHRoZSBwb2ludCBvZiB2 aWV3IG9mIHRoZSBkcml2ZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bl Y2lmaWVkIGJ5IFRoaXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFu Z3VhZ2UgZm9yIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMgd2FzIHJldHVybmVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERyaXZlck5hbWUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBub3QgYSB2YWxpZCBFRklfSEFORExFLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIG5vdCBO VUxMIGFuZCBpdCBpcyBub3QgYSB2YWxpZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFRklfSEFORExFLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IExhbmd1YWdlIGlzIE5VTEwuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgQ29udHJvbGxlck5hbWUgaXMgTlVMTC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdpbmcgdGhlIGNvbnRyb2xs ZXIgc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9y dA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lm aWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArRHdNbWNIY0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOICBFRklf Q09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICAgICpUaGlzLA0KPiArICBJTiAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSwgT1BUSU9OQUwNCj4gKyAgSU4gIENI QVI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoTGFuZ3VhZ2Ug PT0gTlVMTCB8fCBDb250cm9sbGVyTmFtZSA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFRoaXMgaXMg YSBkZXZpY2UgZHJpdmVyLCBzbyBDaGlsZEhhbmRsZSBtdXN0IGJlIE5VTEwuDQo+ICsgIC8vDQo+ ICsgIGlmIChDaGlsZEhhbmRsZSAhPSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE1ha2Ugc3VyZSB0aGlzIGRyaXZl ciBpcyBjdXJyZW50bHkgbWFuYWdpbmcgQ29udHJvbGxlckhhbmRsZQ0KPiArICAvLw0KPiArICBT dGF0dXMgPSBFZmlUZXN0TWFuYWdlZERldmljZSAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgICBnRHdNbWNIY0RyaXZlckJpbmRpbmcuRHJpdmVyQmlu ZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0VmaVBjaUlvUHJvdG9jb2xHdWlkDQo+ICsg ICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gTG9va3VwVW5pY29kZVN0cmlu ZzIgKA0KPiArICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAgICAgICAgVGhpcy0+U3VwcG9y dGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICBtRHdNbWNIY0NvbnRyb2xsZXJOYW1lVGFibGUs DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJOYW1lLA0KPiArICAgICAgICAgICAoQk9PTEVBTiko VGhpcyA9PSAmZ0R3TW1jSGNDb21wb25lbnROYW1lKQ0KPiArICAgICAgICAgICApOw0KPiArfQ0K PiBkaWZmIC0tZ2l0IGEvRW1iZWRkZWRQa2cvRHJpdmVycy9Ed01tY0hjRHhlL0R3TW1jSGNEeGUu YyBiL0VtYmVkZGVkUGtnL0RyaXZlcnMvRHdNbWNIY0R4ZS9Ed01tY0hjRHhlLmMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hZWExMjE3MGQyY2MNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9FbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNI Y0R4ZS5jDQo+IEBAIC0wLDAgKzEsMTI5NiBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZHJp dmVyIGlzIHVzZWQgdG8gbWFuYWdlIERlc2lnbndhcmUgU0QvTU1DIGhvc3QgY29udHJvbGxlci4N Cj4gKw0KPiArICBJdCB3b3VsZCBleHBvc2UgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wg Zm9yIHVwcGVyIGxheWVyIHVzZS4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDIx LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHly aWdodCAoQykgMjAxNiBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiBBbGwgcmlndGhzIHJlc2Vy dmVkLjxCUj4NCj4gKyAgQ29weXJpZ2h0IChDKSAyMDE4LCBMaW5hcm8gTHRkLiBBbGwgcmlndGhz IHJlc2VydmVkLjxCUj4NCj4gKw0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vu c2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i c2QtbGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRF UiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJS QU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1Ig SU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1v cnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0K PiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiArI2luY2x1ZGUg PFByb3RvY29sL05vbkRpc2NvdmVyYWJsZURldmljZS5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkv VWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpRHJp dmVyRW50cnlQb2ludC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRGV2aWNlUGF0aC5o Pg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1BsYXRmb3JtRHdNbWMuaD4NCj4gKw0KPiArI2luY2x1 ZGUgIkR3TW1jSGNEeGUuaCINCj4gKw0KPiArLy8NCj4gKy8vIERyaXZlciBHbG9iYWwgVmFyaWFi bGVzDQo+ICsvLw0KPiArRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MIGdEd01tY0hjRHJpdmVy QmluZGluZyA9IHsNCj4gKyAgRHdNbWNIY0RyaXZlckJpbmRpbmdTdXBwb3J0ZWQsDQo+ICsgIER3 TW1jSGNEcml2ZXJCaW5kaW5nU3RhcnQsDQo+ICsgIER3TW1jSGNEcml2ZXJCaW5kaW5nU3RvcCwN Cj4gKyAgMHgxMCwNCj4gKyAgTlVMTCwNCj4gKyAgTlVMTA0KPiArfTsNCj4gKw0KPiArLy8NCj4g Ky8vIFRlbXBsYXRlIGZvciBEZXNpZ253YXJlIFNEL01NQyBob3N0IGNvbnRyb2xsZXIgcHJpdmF0 ZSBkYXRhLg0KPiArLy8NCj4gK0RXX01NQ19IQ19QUklWQVRFX0RBVEEgZ0R3TW1jSGNUZW1wbGF0 ZSA9IHsNCj4gKyAgRFdfTU1DX0hDX1BSSVZBVEVfU0lHTkFUVVJFLCAgICAgIC8vIFNpZ25hdHVy ZQ0KPiArICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udHJvbGxlckhh bmRsZQ0KPiArICAweDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNbWlvIGJhc2Ug YWRkcmVzcw0KPiArICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzc1Ro cnUNCj4gKyAgICBzaXplb2YgKFVJTlQzMiksDQo+ICsgICAgRHdNbWNQYXNzVGhydVBhc3NUaHJ1 LA0KPiArICAgIER3TW1jUGFzc1RocnVHZXROZXh0U2xvdCwNCj4gKyAgICBEd01tY1Bhc3NUaHJ1 QnVpbGREZXZpY2VQYXRoLA0KPiArICAgIER3TW1jUGFzc1RocnVHZXRTbG90TnVtYmVyLA0KPiAr ICAgIER3TW1jUGFzc1RocnVSZXNldERldmljZQ0KPiArICB9LA0KPiArICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gUGxhdGZvcm1Ed01tYw0KPiArICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmlvdXNTbG90DQo+ICsgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBUaW1lckV2ZW50DQo+ICsgIE5VTEwsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBDb25uZWN0RXZlbnQNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFF1ZXVlDQo+ICsgIElOSVRJQUxJWkVfTElTVF9IRUFEX1ZBUklB QkxFIChnRHdNbWNIY1RlbXBsYXRlLlF1ZXVlKSwNCj4gKyAgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIFNsb3QNCj4gKyAgICB7MCwgVW5rbm93blNsb3QsIDAsIDAsIDB9DQo+ ICsgIH0sDQo+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXBhYmls aXR5DQo+ICsgICAgezB9DQo+ICsgIH0sDQo+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBNYXhDdXJyZW50DQo+ICsgICAgMA0KPiArICB9LA0KPiArICAwICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udHJvbGxlclZlcnNpb24NCj4gK307DQo+ICsN Cj4gK1NEX0RFVklDRV9QQVRIICAgIG1TZERwVGVtcGxhdGUgPSB7DQo+ICsgIHsNCj4gKyAgICBN RVNTQUdJTkdfREVWSUNFX1BBVEgsDQo+ICsgICAgTVNHX1NEX0RQLA0KPiArICAgIHsNCj4gKyAg ICAgIChVSU5UOCkgKHNpemVvZiAoU0RfREVWSUNFX1BBVEgpKSwNCj4gKyAgICAgIChVSU5UOCkg KChzaXplb2YgKFNEX0RFVklDRV9QQVRIKSkgPj4gOCkNCj4gKyAgICB9DQo+ICsgIH0sDQo+ICsg IDANCj4gK307DQo+ICsNCj4gK0VNTUNfREVWSUNFX1BBVEggICAgbUVtbWNEcFRlbXBsYXRlID0g ew0KPiArICB7DQo+ICsgICAgTUVTU0FHSU5HX0RFVklDRV9QQVRILA0KPiArICAgIE1TR19FTU1D X0RQLA0KPiArICAgIHsNCj4gKyAgICAgIChVSU5UOCkgKHNpemVvZiAoRU1NQ19ERVZJQ0VfUEFU SCkpLA0KPiArICAgICAgKFVJTlQ4KSAoKHNpemVvZiAoRU1NQ19ERVZJQ0VfUEFUSCkpID4+IDgp DQo+ICsgICAgfQ0KPiArICB9LA0KPiArICAwDQo+ICt9Ow0KPiArDQo+ICsvLw0KPiArLy8gUHJp b3JpdGl6ZWQgZnVuY3Rpb24gbGlzdCB0byBkZXRlY3QgY2FyZCB0eXBlLg0KPiArLy8gVXNlciBj b3VsZCBhZGQgb3RoZXIgY2FyZCBkZXRlY3Rpb24gbG9naWMgaGVyZS4NCj4gKy8vDQo+ICtEV01N Q19DQVJEX1RZUEVfREVURUNUX1JPVVRJTkUgbUNhcmRUeXBlRGV0ZWN0Um91dGluZVRhYmxlW10g PSB7DQo+ICsgIEVtbWNJZGVudGlmaWNhdGlvbiwNCj4gKyAgU2RDYXJkSWRlbnRpZmljYXRpb24s DQo+ICsgIE5VTEwNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgZW50cnkgcG9pbnQgZm9y IFNEIGhvc3QgY29udHJvbGxlciBkcml2ZXIsIHVzZWQgdG8gaW5zdGFsbCB0aGlzIGRyaXZlciBv biB0aGUgSW1hZ2VIYW5kbGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUgICBU aGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBmb3IgdGhpcyBkcml2ZXIgaW1hZ2UuDQo+ICsg IEBwYXJhbVtpbl0gIFN5c3RlbVRhYmxlICAgUG9pbnRlciB0byB0aGUgRUZJIHN5c3RlbSB0YWJs ZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgRHJpdmVyIGxvYWRlZC4NCj4gKyAg QHJldHZhbCBvdGhlciAgICAgICAgIERyaXZlciBub3QgbG9hZGVkLg0KPiArDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArSW5pdGlhbGl6ZUR3TW1jSGNEeGUgKA0KPiArICBJ TiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJM RSAgKlN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAg U3RhdHVzOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVmaUxpYkluc3RhbGxEcml2ZXJCaW5kaW5nQ29t cG9uZW50TmFtZTIgKA0KPiArICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICAgICAgICAg ICAgIFN5c3RlbVRhYmxlLA0KPiArICAgICAgICAgICAgICZnRHdNbWNIY0RyaXZlckJpbmRpbmcs DQo+ICsgICAgICAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdEd01tY0hj Q29tcG9uZW50TmFtZSwNCj4gKyAgICAgICAgICAgICAmZ0R3TW1jSGNDb21wb25lbnROYW1lMg0K PiArICAgICAgICAgICAgICk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ICsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENhbGwgYmFjayBm dW5jdGlvbiB3aGVuIHRoZSB0aW1lciBldmVudCBpcyBzaWduYWxlZC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBFdmVudCAgICAgVGhlIEV2ZW50IHRoaXMgbm90aWZ5IGZ1bmN0aW9uIHJlZ2lzdGVy ZWQgdG8uDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICBQb2ludGVyIHRvIHRoZSBjb250ZXh0 IGRhdGEgcmVnaXN0ZXJlZCB0byB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50 Lg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArUHJvY2Vzc0FzeW5jVGFza0xp c3QgKA0KPiArICBJTiBFRklfRVZFTlQgICAgICAgICAgRXZlbnQsDQo+ICsgIElOIFZPSUQqICAg ICAgICAgICAgICBDb250ZXh0DQo+ICsgICkNCj4gK3sNCj4gKyAgRFdfTU1DX0hDX1BSSVZBVEVf REFUQSAgICAgICAgICAgICAgKlByaXZhdGU7DQo+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAg ICAgICAgICAgICAgICpMaW5rOw0KPiArICBEV19NTUNfSENfVFJCICAgICAgICAgICAgICAgICAg ICAgICAqVHJiOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICpQYWNrZXQ7DQo+ ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZmluaXRlV2FpdDsNCj4g KyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJiRXZlbnQ7DQo+ICsNCj4g KyAgUHJpdmF0ZSA9IChEV19NTUNfSENfUFJJVkFURV9EQVRBICopQ29udGV4dDsNCj4gKw0KPiAr ICAvLw0KPiArICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIGFzeW5jIEkvTyBx dWV1ZSBpcyBkb25lIG9yIG5vdC4NCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7 DQo+ICsgIFRyYiAgICA9IE5VTEw7DQo+ICsgIExpbmsgICA9IEdldEZpcnN0Tm9kZSAoJlByaXZh dGUtPlF1ZXVlKTsNCj4gKyAgaWYgKCFJc051bGwgKCZQcml2YXRlLT5RdWV1ZSwgTGluaykpIHsN Cj4gKyAgICBUcmIgPSBEV19NTUNfSENfVFJCX0ZST01fVEhJUyAoTGluayk7DQo+ICsgICAgaWYg KCFQcml2YXRlLT5TbG90W1RyYi0+U2xvdF0uTWVkaWFQcmVzZW50KSB7DQo+ICsgICAgICBTdGF0 dXMgPSBFRklfTk9fTUVESUE7DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAgfQ0KPiArICAg IGlmICghVHJiLT5TdGFydGVkKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gQ2hlY2sgd2hl dGhlciB0aGUgY21kL2RhdGEgbGluZSBpcyByZWFkeSBmb3IgdHJhbnNmZXIuDQo+ICsgICAgICAv Lw0KPiArICAgICAgU3RhdHVzID0gRHdNbWNDaGVja1RyYkVudiAoUHJpdmF0ZSwgVHJiKTsNCj4g KyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIFRyYi0+U3RhcnRl ZCA9IFRSVUU7DQo+ICsgICAgICAgIFN0YXR1cyA9IER3TW1jRXhlY1RyYiAoUHJpdmF0ZSwgVHJi KTsNCj4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAgIGdv dG8gRG9uZTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgZ290 byBEb25lOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgICBTdGF0dXMgPSBEd01tY0NoZWNr VHJiUmVzdWx0IChQcml2YXRlLCBUcmIpOw0KPiArICB9DQo+ICsNCj4gK0RvbmU6DQo+ICsgIGlm ICgoVHJiICE9IE5VTEwpICYmIChTdGF0dXMgPT0gRUZJX05PVF9SRUFEWSkpIHsNCj4gKyAgICBQ YWNrZXQgPSBUcmItPlBhY2tldDsNCj4gKyAgICBpZiAoUGFja2V0LT5UaW1lb3V0ID09IDApIHsN Cj4gKyAgICAgIEluZmluaXRlV2FpdCA9IFRSVUU7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAg IEluZmluaXRlV2FpdCA9IEZBTFNFOw0KPiArICAgIH0NCj4gKyAgICBpZiAoKCFJbmZpbml0ZVdh aXQpICYmIChUcmItPlRpbWVvdXQtLSA9PSAwKSkgew0KPiArICAgICAgUmVtb3ZlRW50cnlMaXN0 IChMaW5rKTsNCj4gKyAgICAgIFRyYi0+UGFja2V0LT5UcmFuc2FjdGlvblN0YXR1cyA9IEVGSV9U SU1FT1VUOw0KPiArICAgICAgVHJiRXZlbnQgPSBUcmItPkV2ZW50Ow0KPiArICAgICAgRHdNbWNG cmVlVHJiIChUcmIpOw0KPiArICAgICAgREVCVUcgKCgNCj4gKyAgICAgICAgREVCVUdfVkVSQk9T RSwNCj4gKyAgICAgICAgIlByb2Nlc3NBc3luY1Rhc2tMaXN0KCk6IFNpZ25hbCBFdmVudCAlcCBF RklfVElNRU9VVFxuIiwNCj4gKyAgICAgICAgVHJiRXZlbnQNCj4gKyAgICAgICAgKSk7DQo+ICsg ICAgICBnQlMtPlNpZ25hbEV2ZW50IChUcmJFdmVudCk7DQo+ICsgICAgICByZXR1cm47DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsgIGlmICgoVHJiICE9IE5VTEwpICYmIChTdGF0dXMgIT0gRUZJX05P VF9SRUFEWSkpIHsNCj4gKyAgICBSZW1vdmVFbnRyeUxpc3QgKExpbmspOw0KPiArICAgIFRyYi0+ UGFja2V0LT5UcmFuc2FjdGlvblN0YXR1cyA9IFN0YXR1czsNCj4gKyAgICBUcmJFdmVudCA9IFRy Yi0+RXZlbnQ7DQo+ICsgICAgRHdNbWNGcmVlVHJiIChUcmIpOw0KPiArICAgIERFQlVHICgoDQo+ ICsgICAgICBERUJVR19WRVJCT1NFLA0KPiArICAgICAgIlByb2Nlc3NBc3luY1Rhc2tMaXN0KCk6 IFNpZ25hbCBFdmVudCAlcCB3aXRoICVyXG4iLA0KPiArICAgICAgVHJiRXZlbnQsDQo+ICsgICAg ICBTdGF0dXMNCj4gKyAgICAgICkpOw0KPiArICAgIGdCUy0+U2lnbmFsRXZlbnQgKFRyYkV2ZW50 KTsNCj4gKyAgfQ0KPiArICByZXR1cm47DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZCByZW1v dmFibGUgZGV2aWNlIGVudW1lcmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIHRpbWVy IGV2ZW50IGlzIHNpZ25hbGVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEV2ZW50ICAgICBUaGUg RXZlbnQgdGhpcyBub3RpZnkgZnVuY3Rpb24gcmVnaXN0ZXJlZCB0by4NCj4gKyAgQHBhcmFtW2lu XSAgQ29udGV4dCAgIFBvaW50ZXIgdG8gdGhlIGNvbnRleHQgZGF0YSByZWdpc3RlcmVkIHRvIHRo ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuDQo+ICsNCj4gKyoqLw0KPiArVk9J RA0KPiArRUZJQVBJDQo+ICtEd01tY0hjRW51bWVyYXRlRGV2aWNlICgNCj4gKyAgSU4gRUZJX0VW RU5UICAgICAgICAgIEV2ZW50LA0KPiArICBJTiBWT0lEKiAgICAgICAgICAgICAgQ29udGV4dA0K PiArICApDQo+ICt7DQo+ICsgIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgICAgICpQ cml2YXRlOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUHJlc2VudDsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm91dGluZU51bTsNCj4g KyAgRFdNTUNfQ0FSRF9UWVBFX0RFVEVDVF9ST1VUSU5FICAgICAgKlJvdXRpbmU7DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBMSVNUX0VOVFJZ ICAgICAgICAgICAgICAgICAgICAgICAgICAqTGluazsNCj4gKyAgTElTVF9FTlRSWSAgICAgICAg ICAgICAgICAgICAgICAgICAgKk5leHRMaW5rOw0KPiArICBEV19NTUNfSENfVFJCICAgICAgICAg ICAgICAgICAgICAgICAqVHJiOw0KPiArICBFRklfVFBMICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPbGRUcGw7DQo+ICsNCj4gKyAgUHJpdmF0ZSA9IChEV19NTUNfSENfUFJJVkFURV9EQVRB ICopQ29udGV4dDsNCj4gKw0KPiArICBpZiAoKFByaXZhdGUtPlNsb3RbMF0uRW5hYmxlKSAmJg0K PiArICAgICAgKFByaXZhdGUtPlNsb3RbMF0uU2xvdFR5cGUgPT0gUmVtb3ZhYmxlU2xvdCkpIHsN Cj4gKyAgICBTdGF0dXMgPSBEd01tY0hjQ2FyZERldGVjdCAoDQo+ICsgICAgICAgICAgICAgICBQ cml2YXRlLT5EZXZCYXNlLA0KPiArICAgICAgICAgICAgICAgUHJpdmF0ZS0+Q29udHJvbGxlckhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAmTWVkaWFQcmVz ZW50DQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgIGlmICgoU3RhdHVzID09IEVGSV9NRURJ QV9DSEFOR0VEKSAmJiAhTWVkaWFQcmVzZW50KSB7DQo+ICsgICAgICBERUJVRyAoKA0KPiArICAg ICAgICBERUJVR19JTkZPLA0KPiArICAgICAgICAiRHdNbWNIY0VudW1lcmF0ZURldmljZTogZGV2 aWNlIGRpc2Nvbm5lY3RlZCBhdCAlcFxuIiwNCj4gKyAgICAgICAgUHJpdmF0ZS0+RGV2QmFzZQ0K PiArICAgICAgICApKTsNCj4gKyAgICAgIFByaXZhdGUtPlNsb3RbMF0uTWVkaWFQcmVzZW50ID0g RkFMU0U7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gU2lnbmFsIGFsbCBhc3luYyB0YXNrIGV2 ZW50cyBhdCB0aGUgc2xvdCB3aXRoIEVGSV9OT19NRURJQSBzdGF0dXMuDQo+ICsgICAgICAvLw0K PiArICAgICAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBMX05PVElGWSk7DQo+ICsgICAgICBm b3IgKExpbmsgPSBHZXRGaXJzdE5vZGUgKCZQcml2YXRlLT5RdWV1ZSk7DQo+ICsgICAgICAgICAg ICFJc051bGwgKCZQcml2YXRlLT5RdWV1ZSwgTGluayk7DQo+ICsgICAgICAgICAgIExpbmsgPSBO ZXh0TGluaykgew0KPiArICAgICAgICBOZXh0TGluayA9IEdldE5leHROb2RlICgmUHJpdmF0ZS0+ UXVldWUsIExpbmspOw0KPiArICAgICAgICBUcmIgPSBEV19NTUNfSENfVFJCX0ZST01fVEhJUyAo TGluayk7DQo+ICsgICAgICAgIGlmIChUcmItPlNsb3QgPT0gMCkgew0KPiArICAgICAgICAgIFJl bW92ZUVudHJ5TGlzdCAoTGluayk7DQo+ICsgICAgICAgICAgVHJiLT5QYWNrZXQtPlRyYW5zYWN0 aW9uU3RhdHVzID0gRUZJX05PX01FRElBOw0KPiArICAgICAgICAgIGdCUy0+U2lnbmFsRXZlbnQg KFRyYi0+RXZlbnQpOw0KPiArICAgICAgICAgIER3TW1jRnJlZVRyYiAoVHJiKTsNCj4gKyAgICAg ICAgfQ0KPiArICAgICAgfQ0KPiArICAgICAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiAr ICAgICAgLy8NCj4gKyAgICAgIC8vIE5vdGlmeSB0aGUgdXBwZXIgbGF5ZXIgdGhlIGNvbm5lY3Qg c3RhdGUgY2hhbmdlIHRocm91Z2gNCj4gKyAgICAgIC8vIFJlaW5zdGFsbFByb3RvY29sSW50ZXJm YWNlLg0KPiArICAgICAgLy8NCj4gKyAgICAgIGdCUy0+UmVpbnN0YWxsUHJvdG9jb2xJbnRlcmZh Y2UgKA0KPiArICAgICAgICAgICAgUHJpdmF0ZS0+Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAg ICAgICAgICZnRWZpU2RNbWNQYXNzVGhydVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICZQ cml2YXRlLT5QYXNzVGhydSwNCj4gKyAgICAgICAgICAgICZQcml2YXRlLT5QYXNzVGhydQ0KPiAr ICAgICAgICAgICAgKTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKChTdGF0dXMgPT0gRUZJX01FRElB X0NIQU5HRUQpICYmIE1lZGlhUHJlc2VudCkgew0KPiArICAgICAgREVCVUcgKCgNCj4gKyAgICAg ICAgREVCVUdfSU5GTywNCj4gKyAgICAgICAgIkR3TW1jSGNFbnVtZXJhdGVEZXZpY2U6IGRldmlj ZSBjb25uZWN0ZWQgYXQgJXBcbiIsDQo+ICsgICAgICAgIFByaXZhdGUtPkRldkJhc2UNCj4gKyAg ICAgICAgKSk7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gSW5pdGlhbGl6ZSBzbG90IGFuZCBz dGFydCBpZGVudGlmaWNhdGlvbiBwcm9jZXNzIGZvciB0aGUgbmV3DQo+ICsgICAgICAvLyBhdHRh Y2hlZCBkZXZpY2UNCj4gKyAgICAgIC8vDQo+ICsgICAgICBTdGF0dXMgPSBEd01tY0hjSW5pdEhv c3QgKFByaXZhdGUtPkRldkJhc2UsIFByaXZhdGUtPkNhcGFiaWxpdHlbMF0pOw0KPiArICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICByZXR1cm47DQo+ICsgICAgICB9 DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gUmVzZXQgdGhlIHNwZWNpZmllZCBzbG90IG9mIHRo ZSBTRC9NTUMgUGNpIEhvc3QgQ29udHJvbGxlcg0KPiArICAgICAgLy8NCj4gKyAgICAgIFN0YXR1 cyA9IER3TW1jSGNSZXNldCAoUHJpdmF0ZS0+RGV2QmFzZSwgUHJpdmF0ZS0+Q2FwYWJpbGl0eVsw XSk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIHJldHVy bjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgUHJpdmF0ZS0+U2xvdFswXS5NZWRpYVByZXNl bnQgPSBUUlVFOw0KPiArICAgICAgUm91dGluZU51bSA9IHNpemVvZiAobUNhcmRUeXBlRGV0ZWN0 Um91dGluZVRhYmxlKSAvDQo+ICsgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChEV01NQ19DQVJE X1RZUEVfREVURUNUX1JPVVRJTkUpOw0KPiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg Um91dGluZU51bTsgSW5kZXgrKykgew0KPiArICAgICAgICBSb3V0aW5lID0gJm1DYXJkVHlwZURl dGVjdFJvdXRpbmVUYWJsZVtJbmRleF07DQo+ICsgICAgICAgIGlmICgqUm91dGluZSAhPSBOVUxM KSB7DQo+ICsgICAgICAgICAgU3RhdHVzID0gKCpSb3V0aW5lKSAoUHJpdmF0ZSk7DQo+ICsgICAg ICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgICAgIGJyZWFrOw0K PiArICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgICAgLy8NCj4g KyAgICAgIC8vIFRoaXMgY2FyZCBkb2Vzbid0IGdldCBpbml0aWFsaXplZCBjb3JyZWN0bHkuDQo+ ICsgICAgICAvLw0KPiArICAgICAgaWYgKEluZGV4ID09IFJvdXRpbmVOdW0pIHsNCj4gKyAgICAg ICAgcmV0dXJuOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gTm90 aWZ5IHRoZSB1cHBlciBsYXllciB0aGUgY29ubmVjdCBzdGF0ZSBjaGFuZ2UgdGhyb3VnaA0KPiAr ICAgICAgLy8gUmVpbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UuDQo+ICsgICAgICAvLw0KPiArICAg ICAgZ0JTLT5SZWluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ICsgICAgICAgICAgICAgUHJp dmF0ZS0+Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0VmaVNkTW1jUGFzc1Ro cnVQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgJlByaXZhdGUtPlBhc3NUaHJ1LA0KPiAr ICAgICAgICAgICAgICZQcml2YXRlLT5QYXNzVGhydQ0KPiArICAgICAgICAgICAgICk7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg UmVzZXQgdGhlIHNwZWNpZmllZCBTRC9NTUMgaG9zdCBjb250cm9sbGVyIGFuZCBlbmFibGUgYWxs IGludGVycnVwdHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBEZXZCYXNlICAgICAgICBUaGUgTW1p byBEZXZpY2UgQmFzZSBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgVGhlIHNvZnR3YXJlIHJlc2V0IGV4ZWN1dGVzIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBPdGhlcnMgICAgICAgICAgICBUaGUgc29mdHdhcmUgcmVzZXQgZmFpbHMuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRHdNbWNIY1Jlc2V0ICgNCj4gKyAgSU4gVUlOVE4gICAgRGV2 QmFzZSwNCj4gKyAgSU4gRFdfTU1DX0hDX1NMT1RfQ0FQICAgICAgICBDYXBhYmlsaXR5DQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgQmxrU2l6ZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBF bmFibGUgYWxsIGludGVycnVwdCBhZnRlciByZXNldCBhbGwuDQo+ICsgIC8vDQo+ICsgIFN0YXR1 cyA9IER3TW1jSGNFbmFibGVJbnRlcnJ1cHQgKERldkJhc2UpOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkR3TW1jSGNSZXNldDog ZW5hYmxlIGludGVycnVwdHMgZmFpbDogJXJcbiIsIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKyAgU3RhdHVzID0gRHdNbWNIY0luaXRUaW1lb3V0Q3RybCAoRGV2 QmFzZSk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgQmxrU2l6ZSA9IERXX01NQ19CTE9DS19TSVpFOw0KPiAr ICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19CTEtTSVosIEJsa1NpemUpOw0KPiArDQo+ ICsgIFN0YXR1cyA9IER3TW1jSGNJbml0Q2xvY2tGcmVxIChEZXZCYXNlLCBDYXBhYmlsaXR5KTsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBEd01tY0hjU2V0QnVzV2lkdGggKERldkJhc2UsIEZB TFNFLCAxKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGVzdHMgdG8gc2VlIGlmIHRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgZ2l2ZW4gY29udHJvbGxl ci4gSWYgYSBjaGlsZCBkZXZpY2UNCj4gKyAgaXMgcHJvdmlkZWQsIGl0IGZ1cnRoZXIgdGVzdHMg dG8gc2VlIGlmIHRoaXMgZHJpdmVyIHN1cHBvcnRzIGNyZWF0aW5nIGENCj4gKyAgaGFuZGxlIGZv ciB0aGUgc3BlY2lmaWVkIGNoaWxkIGRldmljZS4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGNo ZWNrcyB0byBzZWUgaWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBzdXBwb3J0cyB0aGUN Cj4gKyAgZGV2aWNlIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlLiBEcml2ZXJzIHdpbGwg dHlwaWNhbGx5IHVzZSB0aGUgZGV2aWNlDQo+ICsgIHBhdGggYXR0YWNoZWQgdG8gQ29udHJvbGxl ckhhbmRsZSBhbmQvb3IgdGhlIHNlcnZpY2VzIGZyb20gdGhlIGJ1cyBJL08NCj4gKyAgYWJzdHJh Y3Rpb24gYXR0YWNoZWQgdG8gQ29udHJvbGxlckhhbmRsZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRy aXZlciBzdXBwb3J0cw0KPiArICBDb250cm9sbGVySGFuZGxlLiBUaGlzIGZ1bmN0aW9uIG1heSBi ZSBjYWxsZWQgbWFueSB0aW1lcyBkdXJpbmcgcGxhdGZvcm0NCj4gKyAgaW5pdGlhbGl6YXRpb24u IEluIG9yZGVyIHRvIHJlZHVjZSBib290IHRpbWVzLCB0aGUgdGVzdHMgcGVyZm9ybWVkIGJ5IHRo aXMNCj4gKyAgZnVuY3Rpb24gbXVzdCBiZSB2ZXJ5IHNtYWxsLCBhbmQgdGFrZSBhcyBsaXR0bGUg dGltZSBhcyBwb3NzaWJsZSB0byBleGVjdXRlLg0KPiArICBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90 IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IGhhcmR3YXJlIGRldmljZXMsIGFuZCB0aGlzDQo+ICsg IGZ1bmN0aW9uIG11c3QgYmUgYXdhcmUgdGhhdCB0aGUgZGV2aWNlIHNwZWNpZmllZCBieSBDb250 cm9sbGVySGFuZGxlIG1heQ0KPiArICBhbHJlYWR5IGJlIG1hbmFnZWQgYnkgdGhlIHNhbWUgZHJp dmVyIG9yIGEgZGlmZmVyZW50IGRyaXZlci4gVGhpcyBmdW5jdGlvbg0KPiArICBtdXN0IG1hdGNo IGl0cyBjYWxscyB0byBBbGxvY2F0ZVBhZ2VzKCkgd2l0aCBGcmVlUGFnZXMoKSwgQWxsb2NhdGVQ b29sKCkgd2l0aA0KPiArICBGcmVlUG9vbCgpLCBhbmQgT3BlblByb3RvY29sKCkgd2l0aCBDbG9z ZVByb3RvY29sKCkuIFNpbmNlIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgbWF5IGhhdmUgYmVlbiBw cmV2aW91c2x5IHN0YXJ0ZWQgYnkgdGhlIHNhbWUgZHJpdmVyLCBpZiBhIHByb3RvY29sIGlzIGFs cmVhZHkNCj4gKyAgaW4gdGhlIG9wZW5lZCBzdGF0ZSwgdGhlbiBpdCBtdXN0IG5vdCBiZSBjbG9z ZWQgd2l0aCBDbG9zZVByb3RvY29sKCkuIFRoaXMgaXMNCj4gKyAgcmVxdWlyZWQgdG8gZ3VhcmFu dGVlIHRoZSBzdGF0ZSBvZiBDb250cm9sbGVySGFuZGxlIGlzIG5vdCBtb2RpZmllZCBieSB0aGlz DQo+ICsgIGZ1bmN0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5d ICBDb250cm9sbGVySGFuZGxlICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjb250cm9sbGVyIHRvIHRl c3QuIFRoaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG11 c3Qgc3VwcG9ydCBhIHByb3RvY29sIGludGVyZmFjZSB0aGF0DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN1cHBsaWVzIGFuIEkvTyBhYnN0cmFjdGlvbiB0byB0aGUgZHJp dmVyLg0KPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICBBIHBvaW50ZXIgdG8g dGhlIHJlbWFpbmluZyBwb3J0aW9uIG9mIGENCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2aWNlIHBhdGguICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGJ5DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBkcml2ZXJzLCBhbmQgaXMg b3B0aW9uYWwgZm9yIGJ1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk cml2ZXJzLiBGb3IgYnVzIGRyaXZlcnMsIGlmIHRoaXMgcGFyYW1ldGVyDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBOVUxMLCB0aGVuIHRoZSBidXMgZHJpdmVy IG11c3QgZGV0ZXItDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmUg aWYgdGhlIGJ1cyBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFuZCB0aGUgY2hpbGQgY29udHJvbGxl cg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgUmVt YWluaW5nRGV2aWNlUGF0aCBhcmUgYm90aA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdXBwb3J0ZWQgYnkgdGhpcyBidXMgZHJpdmVyLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IENvbnRyb2xs ZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFp bmluZ0RldmljZVBhdGggaXMgc3VwcG9ydGVkIGJ5IHRoZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ICsgIEByZXR2YWwg RUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgIFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IENvbnRyb2xs ZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFp bmluZ0RldmljZVBhdGggaXMgYWxyZWFkeSBiZWluZyBtYW5hZ2VkDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgICAgIFRoZSBkZXZpY2Ugc3BlY2lmaWVk IGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlbWFpbmluZ0RldmljZVBhdGggaXMgYWxyZWFkeSBiZWluZyBtYW5hZ2VkDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGEgZGlmZmVyZW50IGRyaXZlciBv ciBhbiBhcHBsaWNhdGlvbiB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlcXVpcmVzIGV4Y2x1c2l2ZSBhY2Nlc3MuDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgICAgIFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJI YW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmlu Z0RldmljZVBhdGggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzLg0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0R3TW1jSGNEcml2ZXJCaW5kaW5nU3VwcG9ydGVkICgN Cj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBFRklf SEFORExFICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgSU4gRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9Q Uk9UT0NPTCAgKlBhcmVudERldmljZVBhdGg7DQo+ICsgIE5PTl9ESVNDT1ZFUkFCTEVfREVWSUNF ICAgKkRldjsNCj4gKyAgUExBVEZPUk1fRFdfTU1DX1BST1RPQ09MICAqUGxhdGZvcm1Ed01tYzsN Cj4gKw0KPiArICBQYXJlbnREZXZpY2VQYXRoID0gTlVMTDsNCj4gKw0KPiArICBTdGF0dXMgPSBn QlMtPkxvY2F0ZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICZnUGxhdGZvcm1Ed01t Y1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikgJlBsYXRmb3JtRHdNbWMNCj4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNl UGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICopICZQYXJlbnRE ZXZpY2VQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgICAgICAgICAgICAgICAg ICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEVGSV9B TFJFQURZX1NUQVJURUQgaXMgYWxzbyBhbiBlcnJvci4NCj4gKyAgICAvLw0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gQ2xvc2UgdGhlIHByb3RvY29sIGJl Y2F1c2Ugd2UgZG9uJ3QgdXNlIGl0IGhlcmUuDQo+ICsgIC8vDQo+ICsgIGdCUy0+Q2xvc2VQcm90 b2NvbCAoDQo+ICsgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgQ29udHJvbGxlcg0KPiArICAgICAgICApOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IE5vdyB0ZXN0IHRoZSBFbWJlZGRlZE5vbkRpc2NvdmVyYWJsZUlvUHJvdG9jb2wuDQo+ICsgIC8v DQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXIsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka2lpTm9uRGlzY292ZXJhYmxl RGV2aWNlUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZEZXYs DQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVO X1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAg Z0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgICAgICAg ICAmZ0Vka2lpTm9uRGlzY292ZXJhYmxlRGV2aWNlUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xsZXINCj4gKyAg ICAgICAgICk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFN0YXJ0cyBhIGRldmljZSBjb250cm9sbGVyIG9yIGEgYnVzIGNvbnRyb2xsZXIuDQo+ICsN Cj4gKyAgVGhlIFN0YXJ0KCkgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW52b2tlZCBmcm9t IHRoZSBFRkkgYm9vdCBzZXJ2aWNlDQo+ICsgIENvbm5lY3RDb250cm9sbGVyKCkuDQo+ICsgIEFz IGEgcmVzdWx0LCBtdWNoIG9mIHRoZSBlcnJvciBjaGVja2luZyBvbiB0aGUgcGFyYW1ldGVycyB0 byBTdGFydCgpIGhhcw0KPiArICBiZWVuIG1vdmVkIGludG8gdGhpcw0KPiArICBjb21tb24gYm9v dCBzZXJ2aWNlLiBJdCBpcyBsZWdhbCB0byBjYWxsIFN0YXJ0KCkgZnJvbSBvdGhlciBsb2NhdGlv bnMsDQo+ICsgIGJ1dCB0aGUgZm9sbG93aW5nIGNhbGxpbmcgcmVzdHJpY3Rpb25zIG11c3QgYmUg Zm9sbG93ZWQgb3IgdGhlIHN5c3RlbQ0KPiArICBiZWhhdmlvciB3aWxsIG5vdCBiZSBkZXRlcm1p bmlzdGljLg0KPiArICAxLiBDb250cm9sbGVySGFuZGxlIG11c3QgYmUgYSB2YWxpZCBFRklfSEFO RExFLg0KPiArICAyLiBJZiBSZW1haW5pbmdEZXZpY2VQYXRoIGlzIG5vdCBOVUxMLCB0aGVuIGl0 IG11c3QgYmUgYSBwb2ludGVyIHRvIGENCj4gKyAgICAgbmF0dXJhbGx5IGFsaWduZWQgRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MLg0KPiArICAzLiBQcmlvciB0byBjYWxsaW5nIFN0YXJ0KCksIHRo ZSBTdXBwb3J0ZWQoKSBmdW5jdGlvbiBmb3IgdGhlIGRyaXZlcg0KPiArICAgICBzcGVjaWZpZWQg YnkgVGhpcyBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgd2l0aCB0aGUgc2FtZSBjYWxsaW5nIHBhcmFt ZXRlcnMsDQo+ICsgICAgIGFuZCBTdXBwb3J0ZWQoKSBtdXN0IGhhdmUgcmV0dXJuZWQgRUZJX1NV Q0NFU1MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xs ZXJIYW5kbGUgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNvbnRyb2xsZXIgdG8gc3RhcnQuIFRoaXMN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIG11c3Qgc3VwcG9y dCBhIHByb3RvY29sIGludGVyZmFjZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGF0IHN1cHBsaWVzIGFuIEkvTyBhYnN0cmFjdGlvbiB0byB0aGUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyLg0KPiArICBAcGFyYW1baW5dICBSZW1h aW5pbmdEZXZpY2VQYXRoICBBIHBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBwb3J0aW9uIG9mIGEN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHBhdGguICBUaGlz IHBhcmFtZXRlciBpcyBpZ25vcmVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldmljZSBkcml2ZXJzLCBhbmQgaXMgb3B0aW9uYWwgZm9yIGJ1cw0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzLg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGb3IgYSBidXMgZHJpdmVyLCBpZiB0aGlzIHBhcmFtZXRlciBp cyBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIGhhbmRs ZXMgZm9yIGFsbCB0aGUgY2hpbGRyZW4gb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlciBhcmUgY3JlYXRlZCBieSB0aGlzIGRyaXZlci4NCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IE5V TEwgYW5kIHRoZSBmaXJzdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE ZXZpY2UgUGF0aCBOb2RlIGlzIG5vdCB0aGUgRW5kIG9mIERldmljZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQYXRoIE5vZGUsIHRoZW4gb25seSB0aGUgaGFuZGxlIGZv ciB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgZGV2aWNl IHNwZWNpZmllZCBieSB0aGUgZmlyc3QgRGV2aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBhdGggTm9kZSBvZiBSZW1haW5pbmdEZXZpY2VQYXRoIGlzIGNyZWF0ZWQN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhpcyBkcml2ZXIuDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaXJzdCBEZXZpY2Ug UGF0aCBOb2RlIG9mDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFp bmluZ0RldmljZVBhdGggaXMgdGhlIEVuZCBvZiBEZXZpY2UgUGF0aA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOb2RlLCBubyBjaGlsZCBoYW5kbGUgaXMgY3JlYXRlZCBi eSB0aGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlci4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBUaGUgZGV2aWNlIHdhcyBz dGFydGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgICBUaGUgZGV2aWNl IGNvdWxkIG5vdCBiZSBzdGFydGVkIGR1ZSB0byBhDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRldmljZSBlcnJvci4gQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4NCj4g KyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgVGhlIHJlcXVlc3QgY291bGQgbm90 IGJlIGNvbXBsZXRlZCBkdWUgdG8gYQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAg ICAgICAgVGhlIGRyaXZlciBmYWlsZGVkIHRvIHN0YXJ0IHRoZSBkZXZpY2UuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtEd01tY0hjRHJpdmVyQmluZGluZ1N0YXJ0 ICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAgICAqVGhpcywNCj4gKyAg SU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgKlByaXZhdGU7DQo+ICsNCj4gKyAg Tk9OX0RJU0NPVkVSQUJMRV9ERVZJQ0UgICAgICAgICAqRGV2Ow0KPiArDQo+ICsgIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFQcmVzZW50Ow0KPiArICBEV01NQ19DQVJEX1RZ UEVfREVURUNUX1JPVVRJTkUgICpSb3V0aW5lOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIFJv dXRpbmVOdW07DQo+ICsgIFBMQVRGT1JNX0RXX01NQ19QUk9UT0NPTCAgICAgICAgKlBsYXRmb3Jt RHdNbWM7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICAgICAmZ1BsYXRmb3JtRHdNbWNQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZQbGF0Zm9ybUR3 TW1jDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJlcnIgJWQiLCBfX0xJTkVfXykpOw0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Q cm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZGtpaU5vbkRpc2NvdmVyYWJsZURldmljZVByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgIChWT0lEICoqKSAmRGV2LA0KPiArICAgICAgICAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIs DQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg REVCVUcgKChERUJVR19FUlJPUiwgImVyciAlZCIsIF9fTElORV9fKSk7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFByaXZhdGUgPSBBbGxvY2F0ZUNvcHlQb29sIChz aXplb2YgKERXX01NQ19IQ19QUklWQVRFX0RBVEEpLCAmZ0R3TW1jSGNUZW1wbGF0ZSk7DQo+ICsg IGlmIChQcml2YXRlID09IE5VTEwpIHsNCj4gKyAgREVCVUcgKChERUJVR19FUlJPUiwgImVyciAl ZCIsIF9fTElORV9fKSk7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpdmF0ZS0+Q29udHJvbGxlckhh bmRsZSA9IENvbnRyb2xsZXI7DQo+ICsgIFByaXZhdGUtPkRldkJhc2UgICAgICAgICAgPSBEZXYt PlJlc291cmNlc1swXS5BZGRyUmFuZ2VNaW47DQo+ICsgIFByaXZhdGUtPlBsYXRmb3JtRHdNbWMg ICAgPSBQbGF0Zm9ybUR3TW1jOw0KPiArICBJbml0aWFsaXplTGlzdEhlYWQgKCZQcml2YXRlLT5R dWV1ZSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUHJpdmF0ZS0+UGxhdGZvcm1Ed01tYy0+R2V0Q2Fw YWJpbGl0eSAoQ29udHJvbGxlciwgMCwgJlByaXZhdGUtPkNhcGFiaWxpdHlbMF0pOw0KPiArDQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoUHJpdmF0ZS0+Q2FwYWJpbGl0eVswXS5CYXNlQ2xrRnJlcSA9PSAwKSB7 DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgRHVtcENhcGFiaWxpdHlSZWcg KDAsICZQcml2YXRlLT5DYXBhYmlsaXR5WzBdKTsNCj4gKw0KPiArICBNZWRpYVByZXNlbnQgPSBG QUxTRTsNCj4gKw0KPiArICBTdGF0dXMgPSBQcml2YXRlLT5QbGF0Zm9ybUR3TW1jLT5DYXJkRGV0 ZWN0IChDb250cm9sbGVyLCAwKTsNCj4gKyAgU3RhdHVzID0gRHdNbWNIY0NhcmREZXRlY3QgKFBy aXZhdGUtPkRldkJhc2UsIENvbnRyb2xsZXIsIDAsICZNZWRpYVByZXNlbnQpOw0KPiArICBpZiAo TWVkaWFQcmVzZW50ID09IEZBTFNFKSB7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gSW5pdGlhbGl6ZSBzbG90IGFuZCBzdGFydCBpZGVudGlmaWNhdGlv biBwcm9jZXNzIGZvciB0aGUgbmV3IGF0dGFjaGVkIGRldmljZQ0KPiArICAvLw0KPiArICBTdGF0 dXMgPSBEd01tY0hjSW5pdEhvc3QgKFByaXZhdGUtPkRldkJhc2UsIFByaXZhdGUtPkNhcGFiaWxp dHlbMF0pOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBEb25l Ow0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVzZXQgSEMNCj4gKyAgLy8NCj4gKyAg U3RhdHVzID0gRHdNbWNIY1Jlc2V0IChQcml2YXRlLT5EZXZCYXNlLCBQcml2YXRlLT5DYXBhYmls aXR5WzBdKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gRG9u ZTsNCj4gKyAgfQ0KPiArDQo+ICsgIFByaXZhdGUtPlNsb3RbMF0uQ2FyZFR5cGUgPSBQcml2YXRl LT5DYXBhYmlsaXR5WzBdLkNhcmRUeXBlOw0KPiArICBQcml2YXRlLT5TbG90WzBdLkVuYWJsZSA9 IFRSVUU7DQo+ICsgIFByaXZhdGUtPlNsb3RbMF0uTWVkaWFQcmVzZW50ID0gVFJVRTsNCj4gKw0K PiArICBSb3V0aW5lTnVtID0gc2l6ZW9mIChtQ2FyZFR5cGVEZXRlY3RSb3V0aW5lVGFibGUpIC8g c2l6ZW9mIChEV01NQ19DQVJEX1RZUEVfREVURUNUX1JPVVRJTkUpOw0KPiArICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBSb3V0aW5lTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgUm91dGluZSA9ICZt Q2FyZFR5cGVEZXRlY3RSb3V0aW5lVGFibGVbSW5kZXhdOw0KPiArICAgIGlmICgqUm91dGluZSAh PSBOVUxMKSB7DQo+ICsgICAgICBTdGF0dXMgPSAoKlJvdXRpbmUpIChQcml2YXRlKTsNCj4gKyAg ICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAg ICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFN0YXJ0IHRoZSBh c3luY2hyb25vdXMgSS9PIG1vbml0b3INCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gZ0JTLT5DcmVh dGVFdmVudCAoDQo+ICsgICAgICAgICAgICAgICAgICBFVlRfVElNRVIgfCBFVlRfTk9USUZZX1NJ R05BTCwNCj4gKyAgICAgICAgICAgICAgICAgIFRQTF9OT1RJRlksDQo+ICsgICAgICAgICAgICAg ICAgICBQcm9jZXNzQXN5bmNUYXNrTGlzdCwNCj4gKyAgICAgICAgICAgICAgICAgIFByaXZhdGUs DQo+ICsgICAgICAgICAgICAgICAgICAmUHJpdmF0ZS0+VGltZXJFdmVudA0KPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8g RG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+U2V0VGltZXIgKFByaXZhdGUt PlRpbWVyRXZlbnQsIFRpbWVyUGVyaW9kaWMsIERXX01NQ19IQ19BU1lOQ19USU1FUik7DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4g Kw0KPiArICAvLw0KPiArICAvLyBTdGFydCB0aGUgU2QgcmVtb3ZhYmxlIGRldmljZSBjb25uZWN0 aW9uIGVudW1lcmF0aW9uDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQg KA0KPiArICAgICAgICAgICAgICAgICAgRVZUX1RJTUVSIHwgRVZUX05PVElGWV9TSUdOQUwsDQo+ ICsgICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+ICsgICAgICAgICAgICAgICAgICBE d01tY0hjRW51bWVyYXRlRGV2aWNlLA0KPiArICAgICAgICAgICAgICAgICAgUHJpdmF0ZSwNCj4g KyAgICAgICAgICAgICAgICAgICZQcml2YXRlLT5Db25uZWN0RXZlbnQNCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIERv bmU7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPlNldFRpbWVyIChQcml2YXRlLT5D b25uZWN0RXZlbnQsIFRpbWVyUGVyaW9kaWMsIERXX01NQ19IQ19FTlVNX1RJTUVSKTsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiAr DQo+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgN Cj4gKyAgICAgICAgICAgICAgICAgICZDb250cm9sbGVyLA0KPiArICAgICAgICAgICAgICAgICAg JmdFZmlTZE1tY1Bhc3NUaHJ1UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgJihQ cml2YXRlLT5QYXNzVGhydSksDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAg ICAgICAgICAgICApOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkR3TW1jSGNEcml2 ZXJCaW5kaW5nU3RhcnQ6ICVyIEVuZCBvbiAleFxuIiwgU3RhdHVzLCBDb250cm9sbGVyKSk7DQo+ ICsNCj4gK0RvbmU6DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBpZiAo KFByaXZhdGUgIT0gTlVMTCkgJiYgKFByaXZhdGUtPlRpbWVyRXZlbnQgIT0gTlVMTCkpIHsNCj4g KyAgICAgIGdCUy0+Q2xvc2VFdmVudCAoUHJpdmF0ZS0+VGltZXJFdmVudCk7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgaWYgKChQcml2YXRlICE9IE5VTEwpICYmIChQcml2YXRlLT5Db25uZWN0RXZl bnQgIT0gTlVMTCkpIHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VFdmVudCAoUHJpdmF0ZS0+Q29ubmVj dEV2ZW50KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoUHJpdmF0ZSAhPSBOVUxMKSB7DQo+ ICsgICAgICBGcmVlUG9vbCAoUHJpdmF0ZSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFN0b3BzIGEgZGV2aWNlIGNv bnRyb2xsZXIgb3IgYSBidXMgY29udHJvbGxlci4NCj4gKw0KPiArICBUaGUgU3RvcCgpIGZ1bmN0 aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGludm9rZWQgZnJvbSB0aGUgRUZJIGJvb3Qgc2VydmljZQ0K PiArICBEaXNjb25uZWN0Q29udHJvbGxlcigpLg0KPiArICBBcyBhIHJlc3VsdCwgbXVjaCBvZiB0 aGUgZXJyb3IgY2hlY2tpbmcgb24gdGhlIHBhcmFtZXRlcnMgdG8gU3RvcCgpIGhhcyBiZWVuDQo+ ICsgIG1vdmVkIGludG8gdGhpcyBjb21tb24gYm9vdCBzZXJ2aWNlLiBJdCBpcyBsZWdhbCB0byBj YWxsIFN0b3AoKSBmcm9tIG90aGVyDQo+ICsgIGxvY2F0aW9ucywgYnV0IHRoZSBmb2xsb3dpbmcg Y2FsbGluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBmb2xsb3dlZCBvciB0aGUNCj4gKyAgc3lzdGVt IGJlaGF2aW9yIHdpbGwgbm90IGJlIGRldGVybWluaXN0aWMuDQo+ICsgIDEuIENvbnRyb2xsZXJI YW5kbGUgbXVzdCBiZSBhIHZhbGlkIEVGSV9IQU5ETEUgdGhhdCB3YXMgdXNlZCBvbiBhIHByZXZp b3VzDQo+ICsgICAgIGNhbGwgdG8gdGhpcyBzYW1lIGRyaXZlcidzIFN0YXJ0KCkgZnVuY3Rpb24u DQo+ICsgIDIuIFRoZSBmaXJzdCBOdW1iZXJPZkNoaWxkcmVuIGhhbmRsZXMgb2YgQ2hpbGRIYW5k bGVCdWZmZXIgbXVzdCBhbGwgYmUgYSB2YWxpZA0KPiArICAgICBFRklfSEFORExFLiBJbiBhZGRp dGlvbiwgYWxsIG9mIHRoZXNlIGhhbmRsZXMgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBpbg0KPiAr ICAgICB0aGlzIGRyaXZlcidzIFN0YXJ0KCkgZnVuY3Rpb24sIGFuZCB0aGUgU3RhcnQoKSBmdW5j dGlvbiBtdXN0IGhhdmUgY2FsbGVkDQo+ICsgICAgIE9wZW5Qcm90b2NvbCgpIG9uIENvbnRyb2xs ZXJIYW5kbGUgd2l0aCBhbiBBdHRyaWJ1dGUgb2YNCj4gKyAgICAgRUZJX09QRU5fUFJPVE9DT0xf QllfQ0hJTERfQ09OVFJPTExFUi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAg Q29udHJvbGxlckhhbmRsZSAgQSBoYW5kbGUgdG8gdGhlIGRldmljZSBiZWluZyBzdG9wcGVkLiBU aGUgaGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc3VwcG9y dCBhIGJ1cyBzcGVjaWZpYyBJL08gcHJvdG9jb2wgZm9yIHRoZQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkcml2ZXIgdG8gdXNlIHRvIHN0b3AgdGhlIGRldmljZS4NCj4gKyAg QHBhcmFtW2luXSAgTnVtYmVyT2ZDaGlsZHJlbiAgVGhlIG51bWJlciBvZiBjaGlsZCBkZXZpY2Ug aGFuZGxlcyBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRs ZUJ1ZmZlci4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGVCdWZmZXIgQW4gYXJyYXkgb2Yg Y2hpbGQgaGFuZGxlcyB0byBiZSBmcmVlZC4gTWF5IGJlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwgaWYgTnVtYmVyT2ZDaGlsZHJlbiBpcyAwLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBkZXZpY2UgY291bGQgbm90IGJlIHN0 b3BwZWQgZHVlIHRvIGEgZGV2aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVycm9yLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArRHdNbWNI Y0RyaXZlckJpbmRpbmdTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NP TCAgICAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXIsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJl ck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICpD aGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9D T0wgICAgICAgKlBhc3NUaHJ1Ow0KPiArICBEV19NTUNfSENfUFJJVkFURV9EQVRBICAgICAgICAg ICAgICAqUHJpdmF0ZTsNCj4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICAg Kkxpbms7DQo+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAgICpOZXh0TGlu azsNCj4gKyAgRFdfTU1DX0hDX1RSQiAgICAgICAgICAgICAgICAgICAgICAgKlRyYjsNCj4gKw0K PiArICBERUJVRyAoKERFQlVHX0lORk8sICJEd01tY0hjRHJpdmVyQmluZGluZ1N0b3A6IFN0YXJ0 XG4iKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpU2RNbWNQ YXNzVGhydVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEKiopICZQYXNz VGhydSwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICAgICAgICAgICAgICAgICAgRUZJ X09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIFByaXZhdGUgPSBEV19NTUNfSENfUFJJVkFURV9GUk9NX1RISVMgKFBhc3NU aHJ1KTsNCj4gKyAgLy8NCj4gKyAgLy8gQ2xvc2UgTm9uLUJsb2NraW5nIHRpbWVyIGFuZCBmcmVl IFRhc2sgbGlzdC4NCj4gKyAgLy8NCj4gKyAgaWYgKFByaXZhdGUtPlRpbWVyRXZlbnQgIT0gTlVM TCkgew0KPiArICAgIGdCUy0+Q2xvc2VFdmVudCAoUHJpdmF0ZS0+VGltZXJFdmVudCk7DQo+ICsg ICAgUHJpdmF0ZS0+VGltZXJFdmVudCA9IE5VTEw7DQo+ICsgIH0NCj4gKyAgaWYgKFByaXZhdGUt PkNvbm5lY3RFdmVudCAhPSBOVUxMKSB7DQo+ICsgICAgZ0JTLT5DbG9zZUV2ZW50IChQcml2YXRl LT5Db25uZWN0RXZlbnQpOw0KPiArICAgIFByaXZhdGUtPkNvbm5lY3RFdmVudCA9IE5VTEw7DQo+ ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gQXMgdGhlIHRpbWVyIGlzIGNsb3NlZCwgdGhlcmUgaXMg bm8gbmVlZHMgdG8gdXNlIFRQTCBsb2NrIHRvDQo+ICsgIC8vIHByb3RlY3QgdGhlIGNyaXRpY2Fs IHJlZ2lvbiAicXVldWUiLg0KPiArICAvLw0KPiArICBmb3IgKExpbmsgPSBHZXRGaXJzdE5vZGUg KCZQcml2YXRlLT5RdWV1ZSk7DQo+ICsgICAgICAgIUlzTnVsbCAoJlByaXZhdGUtPlF1ZXVlLCBM aW5rKTsNCj4gKyAgICAgICBMaW5rID0gTmV4dExpbmspIHsNCj4gKyAgICBOZXh0TGluayA9IEdl dE5leHROb2RlICgmUHJpdmF0ZS0+UXVldWUsIExpbmspOw0KPiArICAgIFJlbW92ZUVudHJ5TGlz dCAoTGluayk7DQo+ICsgICAgVHJiID0gRFdfTU1DX0hDX1RSQl9GUk9NX1RISVMgKExpbmspOw0K PiArICAgIFRyYi0+UGFja2V0LT5UcmFuc2FjdGlvblN0YXR1cyA9IEVGSV9BQk9SVEVEOw0KPiAr ICAgIGdCUy0+U2lnbmFsRXZlbnQgKFRyYi0+RXZlbnQpOw0KPiArICAgIER3TW1jRnJlZVRyYiAo VHJiKTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFVuaW5zdGFsbCBCbG9jayBJL08g cHJvdG9jb2wgZnJvbSB0aGUgZGV2aWNlIGhhbmRsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBn QlMtPlVuaW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gKyAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXIsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVNkTW1jUGFzc1RocnVQcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAmKFByaXZhdGUtPlBhc3NUaHJ1KQ0KPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGdCUy0+Q2xvc2VQcm90b2Nv bCAoDQo+ICsgICAgICAgICBDb250cm9sbGVyLA0KPiArICAgICAgICAgJmdFZmlQY2lJb1Byb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAg ICAgICBDb250cm9sbGVyDQo+ICsgICAgICAgICApOw0KPiArDQo+ICsgIEZyZWVQb29sIChQcml2 YXRlKTsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJEd01tY0hjRHJpdmVyQmluZGlu Z1N0b3A6IEVuZCB3aXRoICVyXG4iLCBTdGF0dXMpKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2VuZHMgU0QgY29tbWFuZCB0byBhbiBTRCBjYXJk IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIFNEIGNvbnRyb2xsZXIuDQo+ICsNCj4gKyAgVGhlIFBh c3NUaHJ1KCkgZnVuY3Rpb24gc2VuZHMgdGhlIFNEIGNvbW1hbmQgc3BlY2lmaWVkIGJ5IFBhY2tl dCB0byB0aGUgU0QNCj4gKyAgY2FyZCBzcGVjaWZpZWQgYnkgU2xvdC4NCj4gKw0KPiArICBJZiBQ YWNrZXQgaXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIFNEIGNhcmQsIHRoZW4gRUZJX1NVQ0NF U1MgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgYSBkZXZpY2UgZXJyb3Igb2NjdXJzIHdoaWxl IHNlbmRpbmcgdGhlIFBhY2tldCwgdGhlbiBFRklfREVWSUNFX0VSUk9SIGlzDQo+ICsgIHJldHVy bmVkLg0KPiArDQo+ICsgIElmIFNsb3QgaXMgbm90IGluIGEgdmFsaWQgcmFuZ2UgZm9yIHRoZSBT RCBjb250cm9sbGVyLCB0aGVuDQo+ICsgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBpcyByZXR1cm5l ZC4NCj4gKw0KPiArICBJZiBQYWNrZXQgZGVmaW5lcyBhIGRhdGEgY29tbWFuZCBidXQgYm90aCBJ bkRhdGFCdWZmZXIgYW5kIE91dERhdGFCdWZmZXIgYXJlDQo+ICsgIE5VTEwsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICBUaGlzICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1b aW5dICAgICBTbG90ICAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8g c2VuZCB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0by4N Cj4gKyAgQHBhcmFtW2luLG91dF0gUGFja2V0ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBTRCBj b21tYW5kIGRhdGEgc3RydWN0dXJlLg0KPiArICBAcGFyYW1baW5dICAgICBFdmVudCAgICAgICAg ICBJZiBFdmVudCBpcyBOVUxMLCBibG9ja2luZyBJL08gaXMgcGVyZm9ybWVkLiBJZg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudCBpcyBub3QgTlVMTCwgdGhlbiBub25i bG9ja2luZyBJL08gaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9y bWVkLCBhbmQgRXZlbnQgd2lsbCBiZSBzaWduYWxlZCB3aGVuIHRoZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQYWNrZXQgY29tcGxldGVzLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBTRCBDb21tYW5kIFBhY2tldCB3YXMgc2VudCBieSB0 aGUgaG9zdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgQSBkZXZpY2UgZXJy b3Igb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byBzZW5kDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRoZSBTRCBjb21tYW5kIFBhY2tldC4NCj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgUGFja2V0LCBTbG90LCBvciB0aGUgY29udGVudHMgb2YgdGhlIFBh Y2tldCBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBQYWNrZXQgZGVmaW5lcyBhIGRhdGEgY29t bWFuZCBidXQgYm90aA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbkRhdGFC dWZmZXIgYW5kIE91dERhdGFCdWZmZXIgYXJlIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PX01F RElBICAgICAgICAgIFNEIERldmljZSBub3QgcHJlc2VudCBpbiB0aGUgU2xvdC4NCj4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGNvbW1hbmQgZGVzY3JpYmVkIGJ5IHRoZSBT RCBDb21tYW5kIFBhY2tldA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBu b3Qgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IGNvbnRyb2xsZXIuDQo+ICsgIEByZXR2YWwgRUZJX0JB RF9CVUZGRVJfU0laRSAgIFRoZSBJblRyYW5zZmVyTGVuZ3RoIG9yIE91dFRyYW5zZmVyTGVuZ3Ro DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VlZHMgdGhlIGxpbWl0IHN1 cHBvcnRlZCBieSBTRCBjYXJkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgg aS5lLiBpZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGV4Y2VlZCB0aGUgTGFzdA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMQkEpLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArRHdNbWNQYXNzVGhydVBhc3NUaHJ1ICgNCj4gKyAgSU4gICAgIEVGSV9T RF9NTUNfUEFTU19USFJVX1BST1RPQ09MICAgICAgICAgKlRoaXMsDQo+ICsgIElOICAgICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3QsDQo+ICsgIElOIE9VVCBFRklf U0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgICpQYWNrZXQsDQo+ICsgIElOICAgICBF RklfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50ICAgIE9QVElPTkFMDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+ICsgIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgKlByaXZhdGU7DQo+ICsgIERX X01NQ19IQ19UUkIgICAgICAgICAgICAgICAgICAgKlRyYjsNCj4gKyAgRUZJX1RQTCAgICAgICAg ICAgICAgICAgICAgICAgICBPbGRUcGw7DQo+ICsNCj4gKyAgaWYgKChUaGlzID09IE5VTEwpIHx8 IChQYWNrZXQgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChQYWNrZXQtPlNkTW1jQ21kQmxrID09IE5VTEwpIHx8 IChQYWNrZXQtPlNkTW1jU3RhdHVzQmxrID09IE5VTEwpKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoUGFja2V0LT5PdXREYXRh QnVmZmVyID09IE5VTEwpICYmIChQYWNrZXQtPk91dFRyYW5zZmVyTGVuZ3RoICE9IDApKSB7DQo+ ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm ICgoUGFja2V0LT5JbkRhdGFCdWZmZXIgPT0gTlVMTCkgJiYgKFBhY2tldC0+SW5UcmFuc2Zlckxl bmd0aCAhPSAwKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsg IH0NCj4gKw0KPiArICBQcml2YXRlID0gRFdfTU1DX0hDX1BSSVZBVEVfRlJPTV9USElTIChUaGlz KTsNCj4gKw0KPiArICBpZiAoIVByaXZhdGUtPlNsb3RbU2xvdF0uRW5hYmxlKSB7DQo+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghUHJp dmF0ZS0+U2xvdFtTbG90XS5NZWRpYVByZXNlbnQpIHsNCj4gKyAgICByZXR1cm4gRUZJX05PX01F RElBOw0KPiArICB9DQo+ICsNCj4gKyAgVHJiID0gRHdNbWNDcmVhdGVUcmIgKFByaXZhdGUsIFNs b3QsIFBhY2tldCwgRXZlbnQpOw0KPiArICBpZiAoVHJiID09IE5VTEwpIHsNCj4gKyAgICByZXR1 cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gSW1tZWRp YXRlbHkgcmV0dXJuIGZvciBhc3luYyBJL08uDQo+ICsgIC8vDQo+ICsgIGlmIChFdmVudCAhPSBO VUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gV2FpdCBhc3luYyBJL08gbGlzdCBpcyBlbXB0eSBiZWZvcmUgZXhlY3V0ZSBzeW5j IEkvTyBvcGVyYXRpb24uDQo+ICsgIC8vDQo+ICsgIHdoaWxlIChUUlVFKSB7DQo+ICsgICAgT2xk VHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBMX05PVElGWSk7DQo+ICsgICAgaWYgKElzTGlzdEVtcHR5 ICgmUHJpdmF0ZS0+UXVldWUpKSB7DQo+ICsgICAgICBnQlMtPlJlc3RvcmVUUEwgKE9sZFRwbCk7 DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgICAgZ0JTLT5SZXN0b3JlVFBMIChPbGRU cGwpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRHdNbWNXYWl0VHJiRW52IChQcml2YXRl LCBUcmIpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBEb25l Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRHdNbWNFeGVjVHJiIChQcml2YXRlLCBUcmIp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBEb25lOw0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRHdNbWNXYWl0VHJiUmVzdWx0IChQcml2YXRlLCBUcmIp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBEb25lOw0KPiAr ICB9DQo+ICsNCj4gK0RvbmU6DQo+ICsgIGlmIChUcmIgIT0gTlVMTCkgew0KPiArICAgIER3TW1j RnJlZVRyYiAoVHJiKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBVc2VkIHRvIHJldHJpZXZlIG5leHQgc2xvdCBudW1iZXJzIHN1cHBv cnRlZCBieSB0aGUgU0QgY29udHJvbGxlci4gVGhlDQo+ICsgIGZ1bmN0aW9uIHJldHVybnMgaW5m b3JtYXRpb24gYWJvdXQgYWxsIGF2YWlsYWJsZSBzbG90cyAocG9wdWxhdGVkIG9yDQo+ICsgIG5v dC1wb3B1bGF0ZWQpLg0KPiArDQo+ICsgIFRoZSBHZXROZXh0U2xvdCgpIGZ1bmN0aW9uIHJldHJp ZXZlcyB0aGUgbmV4dCBzbG90IG51bWJlciBvbiBhbiBTRCBjb250cm9sbGVyLg0KPiArICBJZiBv biBpbnB1dCBTbG90IGlzIDB4RkYsIHRoZW4gdGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBmaXJzdCBz bG90IG9uIHRoZSBTRA0KPiArICBjb250cm9sbGVyIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIElm IFNsb3QgaXMgYSBzbG90IG51bWJlciB0aGF0IHdhcyByZXR1cm5lZCBvbiBhIHByZXZpb3VzIGNh bGwgdG8NCj4gKyAgR2V0TmV4dFNsb3QoKSwgdGhlbiB0aGUgc2xvdCBudW1iZXIgb2YgdGhlIG5l eHQgc2xvdCBvbiB0aGUgU0QgY29udHJvbGxlciBpcw0KPiArICByZXR1cm5lZC4NCj4gKw0KPiAr ICBJZiBTbG90IGlzIG5vdCAweEZGIGFuZCBTbG90IHdhcyBub3QgcmV0dXJuZWQgb24gYSBwcmV2 aW91cyBjYWxsIHRvDQo+ICsgIEdldE5leHRTbG90KCksIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBp cyByZXR1cm5lZC4NCj4gKw0KPiArICBJZiBTbG90IGlzIHRoZSBzbG90IG51bWJlciBvZiB0aGUg bGFzdCBzbG90IG9uIHRoZSBTRCBjb250cm9sbGVyLCB0aGVuDQo+ICsgIEVGSV9OT1RfRk9VTkQg aXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgVGhpcyAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfU0RfTU1NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbixvdXRdIFNs b3QgICAgICAgICAgIE9uIGlucHV0LCBhIHBvaW50ZXIgdG8gYSBzbG90IG51bWJlciBvbiB0aGUg U0QNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci4NCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCBhIHBvaW50ZXIgdG8gdGhl IG5leHQgc2xvdCBudW1iZXIgb24NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhlIFNEIGNvbnRyb2xsZXIuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFu IGlucHV0IHZhbHVlIG9mIDB4RkYgcmV0cmlldmVzIHRoZSBmaXJzdCBzbG90DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvbiB0aGUgU0QgY29udHJvbGxlci4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgbmV4dCBzbG90IG51bWJl ciBvbiB0aGUgU0QgY29udHJvbGxlciB3YXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuZWQgaW4gU2xvdC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAg ICAgVGhlcmUgYXJlIG5vIG1vcmUgc2xvdHMgb24gdGhpcyBTRCBjb250cm9sbGVyLg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBTbG90IGlzIG5vdCAweEZGIGFuZCBTbG90IHdh cyBub3QgcmV0dXJuZWQgb24gYQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmV2aW91cyBjYWxsIHRvIEdldE5leHRTbG90KCkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtEd01tY1Bhc3NUaHJ1R2V0TmV4dFNsb3QgKA0KPiArICBJTiAgICAg RUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAgICAgICpUaGlzLA0KPiArICBJTiBPVVQg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpTbG90DQo+ICsgICkNCj4gK3sN Cj4gKyAgRFdfTU1DX0hDX1BSSVZBVEVfREFUQSAgICAgICAgICAqUHJpdmF0ZTsNCj4gKw0KPiAr ICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFNsb3QgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpdmF0ZSA9IERXX01N Q19IQ19QUklWQVRFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgaWYgKCpTbG90ID09IDB4 RkYpIHsNCj4gKyAgICBpZiAoUHJpdmF0ZS0+U2xvdFswXS5FbmFibGUpIHsNCj4gKyAgICAgICpT bG90ID0gMDsNCj4gKyAgICAgIFByaXZhdGUtPlByZXZpb3VzU2xvdCA9IDA7DQo+ICsgICAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5E Ow0KPiArICB9IGVsc2UgaWYgKCpTbG90ID09IFByaXZhdGUtPlByZXZpb3VzU2xvdCkgew0KPiAr ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVz ZWQgdG8gYWxsb2NhdGUgYW5kIGJ1aWxkIGEgZGV2aWNlIHBhdGggbm9kZSBmb3IgYW4gU0QgY2Fy ZCBvbiB0aGUgU0QNCj4gKyAgY29udHJvbGxlci4NCj4gKw0KPiArICBUaGUgQnVpbGREZXZpY2VQ YXRoKCkgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBidWlsZHMgYSBzaW5nbGUgZGV2aWNlIG5vZGUN Cj4gKyAgZm9yIHRoZSBTRCBjYXJkIHNwZWNpZmllZCBieSBTbG90Lg0KPiArDQo+ICsgIElmIHRo ZSBTRCBjYXJkIHNwZWNpZmllZCBieSBTbG90IGlzIG5vdCBwcmVzZW50IG9uIHRoZSBTRCBjb250 cm9sbGVyLCB0aGVuDQo+ICsgIEVGSV9OT1RfRk9VTkQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAg SWYgRGV2aWNlUGF0aCBpcyBOVUxMLCB0aGVuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBpcyByZXR1 cm5lZC4NCj4gKw0KPiArICBJZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gYWxs b2NhdGUgdGhlIGRldmljZSBwYXRoIG5vZGUsIHRoZW4NCj4gKyAgRUZJX09VVF9PRl9SRVNPVVJD RVMgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgT3RoZXJ3aXNlLCBEZXZpY2VQYXRoIGlzIGFsbG9j YXRlZCB3aXRoIHRoZSBib290IHNlcnZpY2UgQWxsb2NhdGVQb29sKCksDQo+ICsgIHRoZSBjb250 ZW50cyBvZiBEZXZpY2VQYXRoIGFyZSBpbml0aWFsaXplZCB0byBkZXNjcmliZSB0aGUgU0QgY2Fy ZCBzcGVjaWZpZWQNCj4gKyAgYnkgU2xvdCwgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gICAgIFRoaXMgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg RUZJX1NEX01NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICAgICBTbG90ICAgICAgICAgICBT cGVjaWZpZXMgdGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIGZvcg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBhIGRldmljZSBwYXRoIG5vZGUgaXMgdG8gYmUg YWxsb2NhdGVkIGFuZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdC4N Cj4gKyAgQHBhcmFtW2luLG91dF0gRGV2aWNlUGF0aCAgICAgQSBwb2ludGVyIHRvIGEgc2luZ2xl IGRldmljZSBwYXRoIG5vZGUgdGhhdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjcmliZXMgdGhlIFNEIGNhcmQgc3BlY2lmaWVkIGJ5IFNsb3QuIFRoaXMNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFs bG9jYXRpbmcgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBE ZXZpY2VQYXRoIHdpdGggdGhlIGJvb3Qgc2VydmljZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBbGxvY2F0ZVBvb2woKS4gSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpLQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWxpdHkgdG8gZnJlZSBEZXZpY2VQ YXRoIHdoZW4gdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmaW5pc2hlZCB3aXRoIERldmljZVBhdGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIGRldmljZSBwYXRoIG5vZGUgdGhhdCBkZXNjcmliZXMgdGhlIFNEIGNh cmQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFNsb3Qg d2FzIGFsbG9jYXRlZCBhbmQgcmV0dXJuZWQgaW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGV2aWNlUGF0aC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAg VGhlIFNEIGNhcmQgc3BlY2lmaWVkIGJ5IFNsb3QgZG9lcyBub3QgZXhpc3Qgb24NCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFNEIGNvbnRyb2xsZXIuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIERldmljZVBhdGggaXMgTlVMTC4NCj4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRv IGFsbG9jYXRlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZVBhdGgu DQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtEd01tY1Bhc3NUaHJ1 QnVpbGREZXZpY2VQYXRoICgNCj4gKyAgSU4gICAgIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RP Q09MICAgICAgICpUaGlzLA0KPiArICBJTiAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2xvdCwNCj4gKyAgSU4gT1VUIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAg ICAgICAgICoqRGV2aWNlUGF0aA0KPiArICApDQo+ICt7DQo+ICsgIERXX01NQ19IQ19QUklWQVRF X0RBVEEgICAgICAgICAgKlByaXZhdGU7DQo+ICsgIFNEX0RFVklDRV9QQVRIICAgICAgICAgICAg ICAgICAgKlNkTm9kZTsNCj4gKyAgRU1NQ19ERVZJQ0VfUEFUSCAgICAgICAgICAgICAgICAqRW1t Y05vZGU7DQo+ICsNCj4gKyAgaWYgKChUaGlzID09IE5VTEwpIHx8IChEZXZpY2VQYXRoID09IE5V TEwpIHx8IChTbG90ID49IERXX01NQ19IQ19NQVhfU0xPVCkpIHsNCj4gKyAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpdmF0ZSA9IERXX01NQ19I Q19QUklWQVRFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgaWYgKCghUHJpdmF0ZS0+U2xv dFtTbG90XS5FbmFibGUpIHx8ICghUHJpdmF0ZS0+U2xvdFtTbG90XS5NZWRpYVByZXNlbnQpKSB7 DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoUHJp dmF0ZS0+U2xvdFtTbG90XS5DYXJkVHlwZSA9PSBTZENhcmRUeXBlKSB7DQo+ICsgICAgU2ROb2Rl ID0gQWxsb2NhdGVDb3B5UG9vbCAoc2l6ZW9mIChTRF9ERVZJQ0VfUEFUSCksICZtU2REcFRlbXBs YXRlKTsNCj4gKyAgICBpZiAoU2ROb2RlID09IE5VTEwpIHsNCj4gKyAgICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICB9DQo+ICsgICAgU2ROb2RlLT5TbG90TnVtYmVyID0g U2xvdDsNCj4gKw0KPiArICAgICpEZXZpY2VQYXRoID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAqKSBTZE5vZGU7DQo+ICsgIH0gZWxzZSBpZiAoUHJpdmF0ZS0+U2xvdFtTbG90XS5DYXJkVHlw ZSA9PSBFbW1jQ2FyZFR5cGUpIHsNCj4gKyAgICBFbW1jTm9kZSA9IEFsbG9jYXRlQ29weVBvb2wg KHNpemVvZiAoRU1NQ19ERVZJQ0VfUEFUSCksICZtRW1tY0RwVGVtcGxhdGUpOw0KPiArICAgIGlm IChFbW1jTm9kZSA9PSBOVUxMKSB7DQo+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ICsgICAgfQ0KPiArICAgIEVtbWNOb2RlLT5TbG90TnVtYmVyID0gU2xvdDsNCj4gKw0K PiArICAgICpEZXZpY2VQYXRoID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSBFbW1jTm9k ZTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5 IHN1cHBvcnQgU0QgYW5kIEVNTUMgdHdvIGRldmljZSBub2Rlcy4NCj4gKyAgICAvLw0KPiArICAg IHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYW4g U0QgY2FyZCBzbG90IG51bWJlciBiYXNlZCBvbiB0aGUgaW5wdXQgZGV2aWNlIHBhdGguDQo+ICsN Cj4gKyAgVGhlIEdldFNsb3ROdW1iZXIoKSBmdW5jdGlvbiByZXRyaWV2ZXMgc2xvdCBudW1iZXIg Zm9yIHRoZSBTRCBjYXJkIHNwZWNpZmllZA0KPiArICBieSB0aGUgRGV2aWNlUGF0aCBub2RlLiBJ ZiBEZXZpY2VQYXRoIGlzIE5VTEwsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBpcw0KPiArICByZXR1 cm5lZC4NCj4gKw0KPiArICBJZiBEZXZpY2VQYXRoIGlzIG5vdCBhIGRldmljZSBwYXRoIG5vZGUg dHlwZSB0aGF0IHRoZSBTRCBQYXNzIFRocnUgZHJpdmVyDQo+ICsgIHN1cHBvcnRzLCBFRklfVU5T VVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSAgRGV2aWNlUGF0aCAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgcGF0aCBub2RlIHRo YXQgZGVzY3JpYmVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgU0QgY2Fy ZCBvbiB0aGUgU0QgY29udHJvbGxlci4NCj4gKyAgQHBhcmFtW291dF0gU2xvdCAgICAgICAgICAg ICAgT24gcmV0dXJuLCBwb2ludHMgdG8gdGhlIHNsb3QgbnVtYmVyIG9mIGFuIFNEDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQgb24gdGhlIFNEIGNvbnRyb2xsZXIuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgU0QgY2FyZCBzbG90IG51bWJl ciBpcyByZXR1cm5lZCBpbiBTbG90Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBTbG90IG9yIERldmljZVBhdGggaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICAgICAgRGV2aWNlUGF0aCBpcyBub3QgYSBkZXZpY2UgcGF0aCBub2RlIHR5cGUgdGhhdA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgU0QgUGFzcyBUaHJ1IGRyaXZl ciBzdXBwb3J0cy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0R3 TW1jUGFzc1RocnVHZXRTbG90TnVtYmVyICgNCj4gKyAgSU4gIEVGSV9TRF9NTUNfUEFTU19USFJV X1BST1RPQ09MICAgICAgICAgICpUaGlzLA0KPiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICAgICAgICAgICAgICAgKkRldmljZVBhdGgsDQo+ICsgIE9VVCBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqU2xvdA0KPiArICApDQo+ICt7DQo+ICsgIERXX01NQ19I Q19QUklWQVRFX0RBVEEgICAgICAgICAgKlByaXZhdGU7DQo+ICsgIFNEX0RFVklDRV9QQVRIICAg ICAgICAgICAgICAgICAgKlNkTm9kZTsNCj4gKyAgRU1NQ19ERVZJQ0VfUEFUSCAgICAgICAgICAg ICAgICAqRW1tY05vZGU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xv dE51bWJlcjsNCj4gKw0KPiArICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKERldmljZVBhdGggPT0g TlVMTCkgfHwgKFNsb3QgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpdmF0ZSA9IERXX01NQ19IQ19QUklWQVRFX0ZS T01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgd2hldGhlciB0aGUg RGV2aWNlUGF0aCBiZWxvbmdzIHRvIFNEX0RFVklDRV9QQVRIIG9yIEVNTUNfREVWSUNFX1BBVEgN Cj4gKyAgLy8NCj4gKyAgaWYgKChEZXZpY2VQYXRoLT5UeXBlICE9IE1FU1NBR0lOR19ERVZJQ0Vf UEFUSCkgfHwNCj4gKyAgICAgICgoRGV2aWNlUGF0aC0+U3ViVHlwZSAhPSBNU0dfU0RfRFApICYm DQo+ICsgICAgICAgKERldmljZVBhdGgtPlN1YlR5cGUgIT0gTVNHX0VNTUNfRFApKSB8fA0KPiAr ICAgICAgKERldmljZVBhdGhOb2RlTGVuZ3RoKERldmljZVBhdGgpICE9IHNpemVvZihTRF9ERVZJ Q0VfUEFUSCkpIHx8DQo+ICsgICAgICAoRGV2aWNlUGF0aE5vZGVMZW5ndGgoRGV2aWNlUGF0aCkg IT0gc2l6ZW9mKEVNTUNfREVWSUNFX1BBVEgpKSkgew0KPiArICAgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRGV2aWNlUGF0aC0+U3ViVHlwZSA9PSBNU0df U0RfRFApIHsNCj4gKyAgICBTZE5vZGUgPSAoU0RfREVWSUNFX1BBVEggKikgRGV2aWNlUGF0aDsN Cj4gKyAgICBTbG90TnVtYmVyID0gU2ROb2RlLT5TbG90TnVtYmVyOw0KPiArICB9IGVsc2Ugew0K PiArICAgIEVtbWNOb2RlID0gKEVNTUNfREVWSUNFX1BBVEggKikgRGV2aWNlUGF0aDsNCj4gKyAg ICBTbG90TnVtYmVyID0gRW1tY05vZGUtPlNsb3ROdW1iZXI7DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoU2xvdE51bWJlciA+PSBEV19NTUNfSENfTUFYX1NMT1QpIHsNCj4gKyAgICByZXR1cm4gRUZJ X05PVF9GT1VORDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChQcml2YXRlLT5TbG90W1Nsb3ROdW1i ZXJdLkVuYWJsZSkgew0KPiArICAgICpTbG90ID0gU2xvdE51bWJlcjsNCj4gKyAgICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlc2V0cyBhbiBTRCBjYXJkIHRoYXQg aXMgY29ubmVjdGVkIHRvIHRoZSBTRCBjb250cm9sbGVyLg0KPiArDQo+ICsgIFRoZSBSZXNldERl dmljZSgpIGZ1bmN0aW9uIHJlc2V0cyB0aGUgU0QgY2FyZCBzcGVjaWZpZWQgYnkgU2xvdC4NCj4g Kw0KPiArICBJZiB0aGlzIFNEIGNvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCBhIGRldmljZSBy ZXNldCBvcGVyYXRpb24sDQo+ICsgIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0K PiArICBJZiBTbG90IGlzIG5vdCBpbiBhIHZhbGlkIHNsb3QgbnVtYmVyIGZvciB0aGlzIFNEIGNv bnRyb2xsZXIsDQo+ICsgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBpcyByZXR1cm5lZC4NCj4gKw0K PiArICBJZiB0aGUgZGV2aWNlIHJlc2V0IG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIEVGSV9TVUND RVNTIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFNs b3QgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQg dG8gYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFNEIGNhcmQgc3BlY2lmaWVkIGJ5 IFNsb3Qgd2FzIHJlc2V0Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUg U0QgY29udHJvbGxlciBkb2VzIG5vdCBzdXBwb3J0IGEgZGV2aWNlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc2V0IG9wZXJhdGlvbi4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgU2xvdCBudW1iZXIgaXMgaW52YWxpZC4NCj4gKyAgQHJldHZhbCBFRklf Tk9fTUVESUEgICAgICAgICAgU0QgRGV2aWNlIG5vdCBwcmVzZW50IGluIHRoZSBTbG90Lg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVzZXQgY29tbWFuZCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtEd01tY1Bhc3NUaHJ1UmVzZXREZXZpY2UgKA0KPiArICBJTiBFRklfU0RfTU1DX1BB U1NfVEhSVV9QUk9UT0NPTCAgICAgICAgICAgKlRoaXMsDQo+ICsgIElOIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTbG90DQo+ICsgICkNCj4gK3sNCj4gKyAgRFdfTU1D X0hDX1BSSVZBVEVfREFUQSAgICAgICAgICAqUHJpdmF0ZTsNCj4gKyAgTElTVF9FTlRSWSAgICAg ICAgICAgICAgICAgICAgICAqTGluazsNCj4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAg ICAgICAqTmV4dExpbms7DQo+ICsgIERXX01NQ19IQ19UUkIgICAgICAgICAgICAgICAgICAgKlRy YjsNCj4gKyAgRUZJX1RQTCAgICAgICAgICAgICAgICAgICAgICAgICBPbGRUcGw7DQo+ICsNCj4g KyAgaWYgKFRoaXMgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+ICsgIH0NCj4gKw0KPiArICBQcml2YXRlID0gRFdfTU1DX0hDX1BSSVZBVEVfRlJPTV9U SElTIChUaGlzKTsNCj4gKw0KPiArICBpZiAoIVByaXZhdGUtPlNsb3RbU2xvdF0uRW5hYmxlKSB7 DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmICghUHJpdmF0ZS0+U2xvdFtTbG90XS5NZWRpYVByZXNlbnQpIHsNCj4gKyAgICByZXR1cm4g RUZJX05PX01FRElBOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gRnJlZSBhbGwgYXN5 bmMgSS9PIHJlcXVlc3RzIGluIHRoZSBxdWV1ZQ0KPiArICAvLw0KPiArICBPbGRUcGwgPSBnQlMt PlJhaXNlVFBMIChUUExfTk9USUZZKTsNCj4gKw0KPiArICBmb3IgKExpbmsgPSBHZXRGaXJzdE5v ZGUgKCZQcml2YXRlLT5RdWV1ZSk7DQo+ICsgICAgICAgIUlzTnVsbCAoJlByaXZhdGUtPlF1ZXVl LCBMaW5rKTsNCj4gKyAgICAgICBMaW5rID0gTmV4dExpbmspIHsNCj4gKyAgICBOZXh0TGluayA9 IEdldE5leHROb2RlICgmUHJpdmF0ZS0+UXVldWUsIExpbmspOw0KPiArICAgIFJlbW92ZUVudHJ5 TGlzdCAoTGluayk7DQo+ICsgICAgVHJiID0gRFdfTU1DX0hDX1RSQl9GUk9NX1RISVMgKExpbmsp Ow0KPiArICAgIFRyYi0+UGFja2V0LT5UcmFuc2FjdGlvblN0YXR1cyA9IEVGSV9BQk9SVEVEOw0K PiArICAgIGdCUy0+U2lnbmFsRXZlbnQgKFRyYi0+RXZlbnQpOw0KPiArICAgIER3TW1jRnJlZVRy YiAoVHJiKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGdCUy0+UmVzdG9yZVRQTCAoT2xkVHBsKTsNCj4g Kw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9FbWJlZGRl ZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRHdNbWNIY2kuYyBiL0VtYmVkZGVkUGtnL0RyaXZlcnMv RHdNbWNIY0R4ZS9Ed01tY0hjaS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAwMC4uYjA5MWY5ODAzYjJlDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvRW1iZWRk ZWRQa2cvRHJpdmVycy9Ed01tY0hjRHhlL0R3TW1jSGNpLmMNCj4gQEAgLTAsMCArMSwxNjAyIEBA DQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBkcml2ZXIgaXMgdXNlZCB0byBtYW5hZ2UgRGVzaWdu d2FyZSBTRC9NTUMgUENJIGhvc3QgY29udHJvbGxlcnMuDQo+ICsNCj4gKyAgSXQgd291bGQgZXhw b3NlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MIGZvciB1cHBlciBsYXllciB1c2UuDQo+ ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTgsIExpbmFybyBM dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJs ZQ0KPiArICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNl IHdoaWNoIGFjY29tcGFuaWVzIHRoaXMNCj4gKyAgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4 dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uu b3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJ U1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiAr ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPElu ZHVzdHJ5U3RhbmRhcmQvRW1tYy5oPg0KPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvU2Qu aD4NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvQXJtTGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EbWFMaWIuaD4NCj4g KyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xp Yi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsNCj4gKyNpbmNs dWRlICJEd01tY0hjRHhlLmgiDQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIHRoZSBjb250ZW50IG9m IFNEL01NQyBob3N0IGNvbnRyb2xsZXIncyBDYXBhYmlsaXR5IFJlZ2lzdGVyLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFNsb3QgICAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNh cmQgdG8gc2VuZCB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQg dG8uDQo+ICsgIEBwYXJhbVtpbl0gIENhcGFiaWxpdHkgICAgICBUaGUgYnVmZmVyIHRvIHN0b3Jl IHRoZSBjYXBhYmlsaXR5IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcENhcGFi aWxpdHlSZWcgKA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICBTbG90LA0KPiArICBJTiBE V19NTUNfSENfU0xPVF9DQVAgICAqQ2FwYWJpbGl0eQ0KPiArICApDQo+ICt7DQo+ICsgIC8vDQo+ ICsgIC8vIER1bXAgQ2FwYWJpbGl0eSBEYXRhDQo+ICsgIC8vDQo+ICsgIERFQlVHICgoDQo+ICsg ICAgREVCVUdfSU5GTywNCj4gKyAgICAiID09IFNsb3QgWyVkXSBDYXBhYmlsaXR5IGlzIDB4JXgg PT1cbiIsDQo+ICsgICAgU2xvdCwNCj4gKyAgICBDYXBhYmlsaXR5DQo+ICsgICAgKSk7DQo+ICsg IERFQlVHICgoDQo+ICsgICAgREVCVUdfSU5GTywNCj4gKyAgICAiICAgQmFzZSBDbGsgRnJlcSAg ICAgJWRLSHpcbiIsDQo+ICsgICAgQ2FwYWJpbGl0eS0+QmFzZUNsa0ZyZXENCj4gKyAgICApKTsN Cj4gKyAgREVCVUcgKCgNCj4gKyAgICBERUJVR19JTkZPLA0KPiArICAgICIgICBCdXNXaWR0aCAg ICAgICAgICAlZFxuIiwNCj4gKyAgICBDYXBhYmlsaXR5LT5CdXNXaWR0aA0KPiArICAgICkpOw0K PiArICBERUJVRyAoKA0KPiArICAgIERFQlVHX0lORk8sDQo+ICsgICAgIiAgIEhpZ2hTcGVlZCBT dXBwb3J0ICVhXG4iLA0KPiArICAgIENhcGFiaWxpdHktPkhpZ2hTcGVlZCA/ICJUUlVFIiA6ICJG QUxTRSINCj4gKyAgICApKTsNCj4gKyAgREVCVUcgKCgNCj4gKyAgICBERUJVR19JTkZPLA0KPiAr ICAgICIgICBWb2x0YWdlIDEuOCAgICAgICAlYVxuIiwNCj4gKyAgICBDYXBhYmlsaXR5LT5Wb2x0 YWdlMTggPyAiVFJVRSIgOiAiRkFMU0UiDQo+ICsgICAgKSk7DQo+ICsgIERFQlVHICgoDQo+ICsg ICAgREVCVUdfSU5GTywNCj4gKyAgICAiICAgNjQtYml0IFN5cyBCdXMgICAgJWFcbiIsDQo+ICsg ICAgQ2FwYWJpbGl0eS0+U3lzQnVzNjQgPyAiVFJVRSIgOiAiRkFMU0UiDQo+ICsgICAgKSk7DQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIiAgIFNsb3RUeXBlICAgICAgICAgICIpKTsNCj4gKyAg aWYgKENhcGFiaWxpdHktPlNsb3RUeXBlID09IDB4MDApIHsNCj4gKyAgICBERUJVRyAoKERFQlVH X0lORk8sICIlYVxuIiwgIlJlbW92YWJsZSBTbG90IikpOw0KPiArICB9IGVsc2UgaWYgKENhcGFi aWxpdHktPlNsb3RUeXBlID09IDB4MDEpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIl YVxuIiwgIkVtYmVkZGVkIFNsb3QiKSk7DQo+ICsgIH0gZWxzZSBpZiAoQ2FwYWJpbGl0eS0+U2xv dFR5cGUgPT0gMHgwMikgew0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVhXG4iLCAiU2hh cmVkIEJ1cyBTbG90IikpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIERFQlVHICgoREVCVUdfSU5G TywgIiVhXG4iLCAiUmVzZXJ2ZWQiKSk7DQo+ICsgIH0NCj4gKyAgREVCVUcgKCgNCj4gKyAgICBE RUJVR19JTkZPLA0KPiArICAgICIgICBTRFI1MCAgU3VwcG9ydCAgICAlYVxuIiwNCj4gKyAgICBD YXBhYmlsaXR5LT5TZHI1MCA/ICJUUlVFIiA6ICJGQUxTRSINCj4gKyAgICApKTsNCj4gKyAgREVC VUcgKCgNCj4gKyAgICBERUJVR19JTkZPLA0KPiArICAgICIgICBTRFIxMDQgU3VwcG9ydCAgICAl YVxuIiwNCj4gKyAgICBDYXBhYmlsaXR5LT5TZHIxMDQgPyAiVFJVRSIgOiAiRkFMU0UiDQo+ICsg ICAgKSk7DQo+ICsgIERFQlVHICgoDQo+ICsgICAgREVCVUdfSU5GTywNCj4gKyAgICAiICAgRERS NTAgIFN1cHBvcnQgICAgJWFcbiIsDQo+ICsgICAgQ2FwYWJpbGl0eS0+RGRyNTAgPyAiVFJVRSIg OiAiRkFMU0UiDQo+ICsgICAgKSk7DQo+ICsgIHJldHVybjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFNldCBhbGwgaW50ZXJydXB0IHN0YXR1cyBiaXRzIGluIE5vcm1hbCBhbmQgRXJyb3IgSW50 ZXJydXB0IFN0YXR1cyBFbmFibGUNCj4gKyAgcmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSBEZXZJbyAgICAgICAgICBUaGUgREVWSUNFIElPIHByb3RvY29sIGluc3RhbmNlLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIG9wZXJhdGlvbiBleGVjdXRlcyBzdWNj ZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBm YWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY0hjRW5hYmxlSW50ZXJy dXB0ICgNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIERldkJhc2UNCj4gKyAg KQ0KPiArew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEludFN0YXR1czsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICBJZEludEVuOw0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgIElkU3RzOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEVuYWJsZSBhbGwgYml0cyBp biBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlcg0KPiArICAvLw0KPiArICBJbnRTdGF0dXMgPSAwOw0K PiArICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19JTlRNQVNLLCBJbnRTdGF0dXMpOw0K PiArDQo+ICsgIC8vDQo+ICsgIC8vIENsZWFyIHN0YXR1cyBpbiBJbnRlcnJ1cHQgU3RhdHVzIFJl Z2lzdGVyDQo+ICsgIC8vDQo+ICsgIEludFN0YXR1cyA9IH4wOw0KPiArICBNbWlvV3JpdGUzMiAo RGV2QmFzZSArIERXX01NQ19SSU5UU1RTLCBJbnRTdGF0dXMpOw0KPiArDQo+ICsgIElkSW50RW4g PSB+MDsNCj4gKyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfSURJTlRFTiwgSWRJbnRF bik7DQo+ICsNCj4gKyAgSWRTdHMgPSB+MDsNCj4gKyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBE V19NTUNfSURTVFMsIElkU3RzKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNHZXRDYXBhYmlsaXR5ICgNCj4gKyAgSU4g ICAgIFVJTlROICAgICAgICAgICAgICAgICAgIERldkJhc2UsDQo+ICsgIElOICAgICBFRklfSEFO RExFICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiAgICAgVUlOVDggICAgICAgICAg ICAgICAgICAgU2xvdCwNCj4gKyAgICAgT1VUIERXX01NQ19IQ19TTE9UX0NBUCAgICAgICpDYXBh Y2l0eQ0KPiArICApDQo+ICt7DQo+ICsgIFBMQVRGT1JNX0RXX01NQ19QUk9UT0NPTCAgICAgICAq UGxhdGZvcm1Ed01tYzsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKw0KPiArICBpZiAoQ2FwYWNpdHkgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90 b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAmZ1BsYXRmb3JtRHdNbWNQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQg KiopICZQbGF0Zm9ybUR3TW1jDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArICBT dGF0dXMgPSBQbGF0Zm9ybUR3TW1jLT5HZXRDYXBhYmlsaXR5IChDb250cm9sbGVyLCBTbG90LCBD YXBhY2l0eSk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBE ZXRlY3Qgd2hldGhlciB0aGVyZSBpcyBhIFNEL01NQyBjYXJkIGF0dGFjaGVkIGF0IHRoZSBzcGVj aWZpZWQgU0QvTU1DIGhvc3QNCj4gKyAgY29udHJvbGxlciBzbG90Lg0KPiArDQo+ICsgIFJlZmVy IHRvIFNEIEhvc3QgQ29udHJvbGxlciBTaW1wbGlmaWVkIHNwZWMgMy4wIFNlY3Rpb24gMy4xIGZv ciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIERldklvICAgICAgICAgVGhlIERFVklD RSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgU2xvdCAgICAgICAgICBU aGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRvLg0KPiArICBAcGFyYW1bb3V0XSBNZWRpYVByZXNl bnQgIFRoZSBwb2ludGVyIHRvIHRoZSBtZWRpYSBwcmVzZW50IGJvb2xlYW4gdmFsdWUuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGVyZSBpcyBubyBtZWRpYSBjaGFuZ2Ug aGFwcGVuZWQuDQo+ICsgIEByZXR2YWwgRUZJX01FRElBX0NIQU5HRUQgVGhlcmUgaXMgbWVkaWEg Y2hhbmdlIGhhcHBlbmVkLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBkZXRl Y3Rpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHdNbWNIY0NhcmRE ZXRlY3QgKA0KPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICBEZXZCYXNlLA0KPiAr ICBJTiAgICAgRUZJX0hBTkRMRSAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiAgICAg VUlOVDggICAgICAgICAgICAgICAgICBTbG90LA0KPiArICAgICBPVVQgQk9PTEVBTiAgICAgICAg ICAgICAgICAqTWVkaWFQcmVzZW50DQo+ICsgICkNCj4gK3sNCj4gKyAgUExBVEZPUk1fRFdfTU1D X1BST1RPQ09MICAqUGxhdGZvcm1Ed01tYzsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKE1lZGlhUHJlc2VudCA9PSBOVUxMKSB7DQo+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArICBTdGF0dXMgPSBnQlMt PkxvY2F0ZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICZnUGxhdGZvcm1Ed01tY1By b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAg ICAgICAoVk9JRCAqKikgJlBsYXRmb3JtRHdNbWMNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICB9DQo+ICsgICpNZWRpYVByZXNlbnQgPSBQbGF0Zm9ybUR3TW1jLT5DYXJkRGV0ZWN0IChDb250 cm9sbGVyLCBTbG90KTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICtT VEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNVcGRhdGVDbG9jayAoDQo+ICsgIElOIFVJ TlROICAgICAgICAgICAgICAgICAgRGV2QmFzZQ0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgQ21kOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIElu dFN0YXR1czsNCj4gKw0KPiArICBDbWQgPSBCSVRfQ01EX1dBSVRfUFJWREFUQV9DT01QTEVURSB8 IEJJVF9DTURfVVBEQVRFX0NMT0NLX09OTFkgfA0KPiArICAgICAgICBCSVRfQ01EX1NUQVJUOw0K PiArICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19DTUQsIENtZCk7DQo+ICsNCj4gKyAg d2hpbGUgKDEpIHsNCj4gKyAgICBDbWQgPSBNbWlvUmVhZDMyIChEZXZCYXNlICsgRFdfTU1DX0NN RCk7DQo+ICsNCj4gKyAgICBpZiAoIShDbWQgJiBDTURfU1RBUlRfQklUKSkgew0KPiArICAgICAg YnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSW50U3RhdHVzID0gTW1pb1JlYWQzMiAoRGV2 QmFzZSArIERXX01NQ19SSU5UU1RTKTsNCj4gKw0KPiArICAgIGlmIChJbnRTdGF0dXMgJiBEV19N TUNfSU5UX0hMRSkgew0KPiArICAgICAgREVCVUcgKCgNCj4gKyAgICAgICAgREVCVUdfRVJST1Is DQo+ICsgICAgICAgICJEd01tY0hjVXBkYXRlQ2xvY2s6IGZhaWxlZCB0byB1cGRhdGUgbW1jIGNs b2NrIGZyZXF1ZW5jeVxuIg0KPiArICAgICAgICApKTsNCj4gKyAgICAgIHJldHVybiBFRklfREVW SUNFX0VSUk9SOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFN0b3AgU0QvTU1DIGNhcmQgY2xvY2suDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICBUaGUgREVWSUNFIElPIHByb3RvY29sIGlu c3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgU3VjY2VlZCB0byBz dG9wIFNEL01NQyBjbG9jay4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBGYWlsIHRv IHN0b3AgU0QvTU1DIGNsb2NrLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1j SGNTdG9wQ2xvY2sgKA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIERldkJhc2UNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICBDbGtFbmE7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g RGlzYWJsZSBNTUMgY2xvY2sgZmlyc3QNCj4gKyAgLy8NCj4gKyAgQ2xrRW5hID0gMDsNCj4gKyAg TW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfQ0xLRU5BLCBDbGtFbmEpOw0KPiArDQo+ICsg IFN0YXR1cyA9IER3TW1jSGNVcGRhdGVDbG9jayAoRGV2QmFzZSk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIHJldHVy biBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTRC9NTUMgY2FyZCBjbG9jayBzdXBw bHkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICBUaGUgREVWSUNFIElPIHBy b3RvY29sIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIENsb2NrRnJlcSAgICAgIFRoZSBtYXgg Y2xvY2sgZnJlcXVlbmN5IHRvIGJlIHNldC4gVGhlIHVuaXQgaXMgS0h6Lg0KPiArICBAcGFyYW1b aW5dIENhcGFiaWxpdHkgICAgIFRoZSBjYXBhYmlsaXR5IG9mIHRoZSBzbG90Lg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIGNsb2NrIGlzIHN1cHBsaWVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgY2xvY2sgaXNuJ3Qgc3Vw cGxpZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1j SGNDbG9ja1N1cHBseSAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgRGV2QmFzZSwN Cj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICBDbG9ja0ZyZXEsDQo+ICsgIElOIERXX01N Q19IQ19TTE9UX0NBUCAgICAgQ2FwYWJpbGl0eQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg IEJhc2VDbGtGcmVxOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFNldHRpbmdGcmVx Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIERpdmlzb3I7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgUmVtYWluZGVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgIE1tY1N0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBDbGtFbmE7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQ2xrU3JjOw0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIENhbGN1bGF0ZSBhIGRpdmlzb3IgZm9yIFNEIGNsb2NrIGZyZXF1ZW5jeQ0KPiArICAvLw0K PiArICBBU1NFUlQgKENhcGFiaWxpdHkuQmFzZUNsa0ZyZXEgIT0gMCk7DQo+ICsNCj4gKyAgQmFz ZUNsa0ZyZXEgPSBDYXBhYmlsaXR5LkJhc2VDbGtGcmVxOw0KPiArICBpZiAoQ2xvY2tGcmVxID09 IDApIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsN Cj4gKyAgaWYgKENsb2NrRnJlcSA+IEJhc2VDbGtGcmVxKSB7DQo+ICsgICAgQ2xvY2tGcmVxID0g QmFzZUNsa0ZyZXE7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDYWxjdWxhdGUgdGhl IGRpdmlzb3Igb2YgYmFzZSBmcmVxdWVuY3kuDQo+ICsgIC8vDQo+ICsgIERpdmlzb3IgICAgID0g MDsNCj4gKyAgU2V0dGluZ0ZyZXEgPSBCYXNlQ2xrRnJlcTsNCj4gKyAgd2hpbGUgKENsb2NrRnJl cSA8IFNldHRpbmdGcmVxKSB7DQo+ICsgICAgRGl2aXNvcisrOw0KPiArDQo+ICsgICAgU2V0dGlu Z0ZyZXEgPSBCYXNlQ2xrRnJlcSAvICgyICogRGl2aXNvcik7DQo+ICsgICAgUmVtYWluZGVyICAg PSBCYXNlQ2xrRnJlcSAlICgyICogRGl2aXNvcik7DQo+ICsgICAgaWYgKChDbG9ja0ZyZXEgPT0g U2V0dGluZ0ZyZXEpICYmIChSZW1haW5kZXIgPT0gMCkpIHsNCj4gKyAgICAgIGJyZWFrOw0KPiAr ICAgIH0NCj4gKyAgICBpZiAoKENsb2NrRnJlcSA9PSBTZXR0aW5nRnJlcSkgJiYgKFJlbWFpbmRl ciAhPSAwKSkgew0KPiArICAgICAgU2V0dGluZ0ZyZXEgKys7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsNCj4gKyAgREVCVUcgKCgNCj4gKyAgICBERUJVR19JTkZPLA0KPiArICAgICJCYXNlQ2xrRnJl cSAlZEtIeiBEaXZpc29yICVkIENsb2NrRnJlcSAlZEtoelxuIiwNCj4gKyAgICBCYXNlQ2xrRnJl cSwNCj4gKyAgICBEaXZpc29yLA0KPiArICAgIENsb2NrRnJlcQ0KPiArICAgICkpOw0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIFdhaXQgdW50aWwgTU1DIGlzIGlkbGUNCj4gKyAgLy8NCj4gKyAgZG8g ew0KPiArICAgIE1tY1N0YXR1cyA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19NTUNfU1RBVFVT KTsNCj4gKyAgfSB3aGlsZSAoTW1jU3RhdHVzICYgRFdfTU1DX1NUU19EQVRBX0JVU1kpOw0KPiAr DQo+ICsgIGRvIHsNCj4gKyAgICBTdGF0dXMgPSBEd01tY0hjU3RvcENsb2NrIChEZXZCYXNlKTsN Cj4gKyAgfSB3aGlsZSAoRUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gKw0KPiArICBkbyB7DQo+ICsg ICAgQ2xrU3JjID0gMDsNCj4gKyAgICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19DTEtT UkMsIENsa1NyYyk7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBTZXQgY2xvY2sgZGl2aXNvcg0KPiAr ICAgIC8vDQo+ICsgICAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfQ0xLRElWLCBEaXZp c29yKTsNCj4gKyAgICAvLw0KPiArICAgIC8vIEVuYWJsZSBNTUMgY2xvY2sNCj4gKyAgICAvLw0K PiArICAgIENsa0VuYSA9IDE7DQo+ICsgICAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNf Q0xLRU5BLCBDbGtFbmEpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gRHdNbWNIY1VwZGF0ZUNsb2Nr IChEZXZCYXNlKTsNCj4gKyAgfSB3aGlsZSAoRUZJX0VSUk9SIChTdGF0dXMpKTsNCj4gKw0KPiAr ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgdGhlIFNE L01NQyBidXMgd2lkdGguDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgSG9zdCBDb250cm9sbGVyIFNp bXBsaWZpZWQgc3BlYyAzLjAgU2VjdGlvbiAzLjQgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSBEZXZJbyAgICAgICAgICBUaGUgREVWSUNFIElPIHByb3RvY29sIGluc3RhbmNlLg0K PiArICBAcGFyYW1baW5dIElzRGRyICAgICAgICAgIEEgYm9vbGVhbiB0byBpbmRpY2F0ZSBpdCdz IGR1YWwgZGF0YSByYXRlIG9yIG5vdC4NCj4gKyAgQHBhcmFtW2luXSBCdXNXaWR0aCAgICAgICBU aGUgYnVzIHdpZHRoIHVzZWQgYnkgdGhlIFNEL01NQyBkZXZpY2UsIGl0IG11c3QgYmUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCA0IG9yIDguDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICBUaGUgYnVzIHdpZHRoIGlzIHNldCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIGJ1cyB3aWR0aCBpc24ndCBzZXQgc3VjY2Vz c2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNTZXRCdXNXaWR0 aCAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gQk9P TEVBTiAgICAgICAgICAgICAgICBJc0RkciwNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAg ICBCdXNXaWR0aA0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg Q3R5cGU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgVWhzOw0KPiArDQo+ICsgIHN3 aXRjaCAoQnVzV2lkdGgpIHsNCj4gKyAgY2FzZSAxOg0KPiArICAgIEN0eXBlID0gTU1DXzFCSVRf TU9ERTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSA0Og0KPiArICAgIEN0eXBlID0gTU1DXzRC SVRfTU9ERTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSA4Og0KPiArICAgIEN0eXBlID0gTU1D XzhCSVRfTU9ERTsNCj4gKyAgICBicmVhazsNCj4gKyAgZGVmYXVsdDoNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsgIE1taW9Xcml0ZTMyIChEZXZCYXNl ICsgRFdfTU1DX0NUWVBFLCBDdHlwZSk7DQo+ICsNCj4gKyAgVWhzID0gTW1pb1JlYWQzMiAoRGV2 QmFzZSArIERXX01NQ19VSFNSRUcpOw0KPiArDQo+ICsgIGlmIChJc0Rkcikgew0KPiArICAgIFVo cyB8PSBVSFNfRERSX01PREU7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgVWhzICY9IH4oVUhTX0RE Ul9NT0RFKTsNCj4gKyAgfQ0KPiArDQo+ICsgIE1taW9Xcml0ZTMyIChEZXZCYXNlICsgRFdfTU1D X1VIU1JFRywgVWhzKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBTdXBwbHkgU0QvTU1DIGNhcmQgd2l0aCBsb3dlc3QgY2xvY2sgZnJlcXVl bmN5IGF0IGluaXRpYWxpemF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gRGV2SW8gICAgICAg ICAgVGhlIERFVklDRSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBDYXBh YmlsaXR5ICAgICBUaGUgY2FwYWJpbGl0eSBvZiB0aGUgc2xvdC4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgIFRoZSBjbG9jayBpcyBzdXBwbGllZCBzdWNjZXNzZnVsbHkuDQo+ ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIGNsb2NrIGlzbid0IHN1cHBsaWVkIHN1 Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY0hjSW5pdENs b2NrRnJlcSAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgRGV2QmFzZSwNCj4g KyAgSU4gRFdfTU1DX0hDX1NMT1RfQ0FQICAgICAgICBDYXBhYmlsaXR5DQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgSW5pdEZyZXE7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2FsY3VsYXRl IGEgZGl2aXNvciBmb3IgU0QgY2xvY2sgZnJlcXVlbmN5DQo+ICsgIC8vDQo+ICsgIGlmIChDYXBh YmlsaXR5LkJhc2VDbGtGcmVxID09IDApIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIERvbid0IHN1 cHBvcnQgZ2V0IEJhc2UgQ2xvY2sgRnJlcXVlbmN5IGluZm9ybWF0aW9uIHZpYSBhbm90aGVyIG1l dGhvZA0KPiArICAgIC8vDQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0K PiArICAvLw0KPiArICAvLyBTdXBwbHkgNDAwS0h6IGNsb2NrIGZyZXF1ZW5jeSBhdCBpbml0aWFs aXphdGlvbiBwaGFzZS4NCj4gKyAgLy8NCj4gKyAgSW5pdEZyZXEgPSBEV01NQ19JTklUX0NMT0NL X0ZSRVE7DQo+ICsgIFN0YXR1cyA9IER3TW1jSGNDbG9ja1N1cHBseSAoRGV2QmFzZSwgSW5pdEZy ZXEsIENhcGFiaWxpdHkpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArICBNaWNyb1NlY29uZERlbGF5ICgxMDApOw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU3VwcGx5IFNEL01NQyBj YXJkIHdpdGggbWF4aW11bSB2b2x0YWdlIGF0IGluaXRpYWxpemF0aW9uLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gRGV2SW8gICAgICAgICAgVGhlIERFVklDRSBJTyBwcm90b2NvbCBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW2luXSBDYXBhYmlsaXR5ICAgICBUaGUgY2FwYWJpbGl0eSBvZiB0aGUgc2xv dC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSB2b2x0YWdlIGlzIHN1 cHBsaWVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUg dm9sdGFnZSBpc24ndCBzdXBwbGllZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRHdNbWNIY0luaXRQb3dlclZvbHRhZ2UgKA0KPiArICBJTiBVSU5UTiBEZXZC YXNlLA0KPiArICBJTiBEV19NTUNfSENfU0xPVF9DQVAgICAgIENhcGFiaWxpdHkNCj4gKyAgKQ0K PiArew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIERhdGE7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgVGltZW91dDsNCj4gKw0KPiArICBEYXRhID0gMHgxOw0KPiArICBN bWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19QV1JFTiwgRGF0YSk7DQo+ICsNCj4gKyAgRGF0 YSA9IERXX01NQ19DVFJMX1JFU0VUX0FMTDsNCj4gKyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBE V19NTUNfQ1RSTCwgRGF0YSk7DQo+ICsNCj4gKyAgVGltZW91dCA9IERXX01NQ19IQ19HRU5FUklD X1RJTUVPVVQ7DQo+ICsgIHdoaWxlIChUaW1lb3V0ID4gMCkgew0KPiArICAgIERhdGEgPSBNbWlv UmVhZDMyIChEZXZCYXNlICsgRFdfTU1DX0NUUkwpOw0KPiArDQo+ICsgICAgaWYgKChEYXRhICYg RFdfTU1DX0NUUkxfUkVTRVRfQUxMKSA9PSAwKSB7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9 DQo+ICsgICAgZ0JTLT5TdGFsbCAoMSk7DQo+ICsNCj4gKyAgICBUaW1lb3V0LS07DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoVGltZW91dCA8PSAwKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZP LA0KPiArICAgICAgIkR3TW1jSGNJbml0UG93ZXJWb2x0YWdlOiByZXNldCBmYWlsZWQgZHVlIHRv IHRpbWVvdXQiKSk7DQo+ICsNCj4gKyAgICByZXR1cm4gRUZJX1RJTUVPVVQ7DQo+ICsgIH0NCj4g Kw0KPiArICBEYXRhID0gRFdfTU1DX0NUUkxfSU5UX0VOOw0KPiArICBNbWlvV3JpdGUzMiAoRGV2 QmFzZSArIERXX01NQ19DVFJMLCBEYXRhKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIHRoZSBUaW1lb3V0IENvbnRyb2wg cmVnaXN0ZXIgd2l0aCBtb3N0IGNvbnNlcnZhdGl2ZSB2YWx1ZSBhdA0KPiArICBpbml0aWFsaXph dGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dIERldklvICAgICAgICAgIFRoZSBERVZJQ0UgSU8g cHJvdG9jb2wgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBU aGUgdGltZW91dCBjb250cm9sIHJlZ2lzdGVyIGlzIGNvbmZpZ3VyZWQNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAg ICAgICAgVGhlIHRpbWVvdXQgY29udHJvbCByZWdpc3RlciBpc24ndCBjb25maWd1cmVkDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0R3TW1jSGNJbml0VGltZW91dEN0cmwgKA0KPiArICBJTiBVSU5UTiAg ICAgICAgICAgICAgICAgIERldkJhc2UNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIERhdGE7DQo+ICsNCj4gKyAgRGF0YSA9IH4wOw0KPiArICBNbWlvV3JpdGUz MiAoRGV2QmFzZSArIERXX01NQ19UTU9VVCwgRGF0YSk7DQo+ICsNCj4gKyAgRGF0YSA9IDB4MDBG RkZGRkY7DQo+ICsgIE1taW9Xcml0ZTMyIChEZXZCYXNlICsgRFdfTU1DX0RFQk5DRSwgRGF0YSk7 DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg SW5pdGlhbCBTRC9NTUMgaG9zdCBjb250cm9sbGVyIHdpdGggbG93ZXN0IGNsb2NrIGZyZXF1ZW5j eSwgbWF4IHBvd2VyIGFuZA0KPiArICBtYXggdGltZW91dCB2YWx1ZSBhdCBpbml0aWFsaXphdGlv bi4NCj4gKw0KPiArICBAcGFyYW1baW5dIERldklvICAgICAgICAgIFRoZSBERVZJQ0UgSU8gcHJv dG9jb2wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gU2xvdCAgICAgICAgICAgVGhlIHNsb3Qg bnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0by4NCj4gKyAgQHBhcmFtW2luXSBDYXBhYmlsaXR5ICAgICBUaGUg Y2FwYWJpbGl0eSBvZiB0aGUgc2xvdC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgIFRoZSBob3N0IGNvbnRyb2xsZXIgaXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBob3N0IGNvbnRyb2xsZXIgaXNuJ3QgaW5p dGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3 TW1jSGNJbml0SG9zdCAoDQo+ICsgIElOIFVJTlROICAgIERldkJhc2UsDQo+ICsgIElOIERXX01N Q19IQ19TTE9UX0NBUCAgICAgICAgQ2FwYWJpbGl0eQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIFN0YXR1cyA9IER3TW1jSGNJbml0UG93ZXJW b2x0YWdlIChEZXZCYXNlLCBDYXBhYmlsaXR5KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRHdNbWNIY1N0YXJ0RG1hICgNCj4gKyAgSU4g RFdfTU1DX0hDX1BSSVZBVEVfREFUQSAgICAgICAgICAgKlByaXZhdGUsDQo+ICsgIElOIERXX01N Q19IQ19UUkIgICAgICAgICAgICAgICAgICAgICpUcmINCj4gKyAgKQ0KPiArew0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZCYXNlOw0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJsOw0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCbW9kOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUaW1lb3V0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEYXRhOw0KPiArDQo+ICsvLyAgRGV2SW8gID0gVHJiLT5Qcml2YXRlLT5EZXZJbzsNCj4gKyAg RGV2QmFzZSA9IFRyYi0+UHJpdmF0ZS0+RGV2QmFzZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBS ZXNldCBETUENCj4gKyAgLy8NCj4gKyAgQ3RybCA9IERXX01NQ19DVFJMX0RNQV9SRVNFVDsNCj4g KyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfQ1RSTCwgQ3RybCk7DQo+ICsNCj4gKyAg VGltZW91dCA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsgIHdoaWxlIChUaW1lb3V0 ID4gMCkgew0KPiArICAgIERhdGEgPSBNbWlvUmVhZDMyIChEZXZCYXNlICsgRFdfTU1DX0NUUkwp Ow0KPiArDQo+ICsgICAgaWYgKChEYXRhICYgRFdfTU1DX0NUUkxfRE1BX1JFU0VUKSA9PSAwKSB7 DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgICAgZ0JTLT5TdGFsbCAoMSk7DQo+ICsN Cj4gKyAgICBUaW1lb3V0LS07DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoVGltZW91dCA8PSAwKSB7 DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBDVFJM X0RNQV9SRVNFVCIpKTsNCj4gKw0KPiArICAgIHJldHVybiBFRklfVElNRU9VVDsNCj4gKyAgfQ0K PiArDQo+ICsgIEJtb2QgPSBEV19NTUNfSURNQUNfU1dSRVNFVCB8IE1taW9SZWFkMzIgKERldkJh c2UgKyBEV19NTUNfQk1PRCk7DQo+ICsNCj4gKyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19N TUNfQk1PRCwgQm1vZCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2VsZWN0IElETUFDDQo+ICsg IC8vDQo+ICsgIEN0cmwgPSBEV19NTUNfQ1RSTF9JRE1BQ19FTjsNCj4gKyAgQ3RybCB8PSBNbWlv UmVhZDMyIChEZXZCYXNlICsgRFdfTU1DX0NUUkwpOw0KPiArICBNbWlvV3JpdGUzMiAoRGV2QmFz ZSArIERXX01NQ19DVFJMLCBDdHJsKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBFbmFibGUgSURN QUMNCj4gKyAgLy8NCj4gKyAgQm1vZCA9IERXX01NQ19JRE1BQ19FTkFCTEUgfCBEV19NTUNfSURN QUNfRkI7DQo+ICsgIEJtb2QgfD0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19CTU9EKTsN Cj4gKw0KPiArICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19CTU9ELCBCbW9kKTsNCj4g Kw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4g K0R3TW1jSGNTdG9wRG1hICgNCj4gKyAgSU4gRFdfTU1DX0hDX1BSSVZBVEVfREFUQSAgICAgICAg ICAgKlByaXZhdGUsDQo+ICsgIElOIERXX01NQ19IQ19UUkIgICAgICAgICAgICAgICAgICAgICpU cmINCj4gKyAgKQ0KPiArew0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEZXZCYXNlOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJs Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbW9kOw0KPiArDQo+ ICsgIERldkJhc2UgPSBUcmItPlByaXZhdGUtPkRldkJhc2U7DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gRGlzYWJsZSBhbmQgcmVzZXQgSURNQUMNCj4gKyAgLy8NCj4gKyAgQ3RybCA9IE1taW9SZWFk MzIgKERldkJhc2UgKyBEV19NTUNfQ1RSTCk7DQo+ICsgIEN0cmwgJj0gfkRXX01NQ19DVFJMX0lE TUFDX0VOOw0KPiArICBDdHJsIHw9IERXX01NQ19DVFJMX0RNQV9SRVNFVDsNCj4gKyAgTW1pb1dy aXRlMzIgKERldkJhc2UgKyBEV19NTUNfQ1RSTCwgQ3RybCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gU3RvcCBJRE1BQw0KPiArICAvLw0KPiArICBCbW9kID0gTW1pb1JlYWQzMiAoRGV2QmFzZSAr IERXX01NQ19CTU9EKTsNCj4gKyAgQm1vZCAmPSB+KERXX01NQ19CTU9EX0ZCIHwgRFdfTU1DX0JN T0RfREUpOw0KPiArICBCbW9kIHw9IERXX01NQ19CTU9EX1NXUjsNCj4gKyAgTW1pb1dyaXRlMzIg KERldkJhc2UgKyBEV19NTUNfQk1PRCwgQm1vZCk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQnVpbGQgRE1BIGRlc2NyaXB0b3IgdGFibGUg Zm9yIHRyYW5zZmVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gVHJiICAgICAgICAgICAgVGhlIHBv aW50ZXIgdG8gdGhlIERXX01NQ19IQ19UUkIgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICBUaGUgRE1BIGRlc2NyaXB0b3IgdGFibGUgaXMgY3JlYXRlZCBzdWNj ZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIERNQSBkZXNjcmlw dG9yIHRhYmxlIGlzbid0IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0J1aWxkRG1hRGVzY1RhYmxlICgNCj4gKyAgSU4gRFdfTU1DX0hDX1RSQiAg ICAgICAgICAqVHJiDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAg ICBEYXRhOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIERhdGFMZW47DQo+ICsgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgRW50cmllczsNCj4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBSZW1haW5pbmc7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgVGFibGVTaXplOw0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgIERldkJhc2U7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEJ5dGVzOw0KPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgIEJsb2NrczsNCj4gKyAgRFdfTU1DX0hDX0RNQV9ERVND X0xJTkUgICAqRG1hRGVzYzsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBEbWFEZXNj UGh5Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIElkc3RzOw0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIEJ5dENudDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICBCbGtTaXplOw0KPiArDQo+ICsgIERhdGEgICAgPSBUcmItPkRhdGFQaHk7DQo+ICsgIERhdGFM ZW4gPSBUcmItPkRhdGFMZW47DQo+ICsgIERldkJhc2UgPSBUcmItPlByaXZhdGUtPkRldkJhc2U7 DQo+ICsgIC8vDQo+ICsgIC8vIE9ubHkgc3VwcG9ydCAzMmJpdCBETUEgRGVzY3JpcHRvciBUYWJs ZQ0KPiArICAvLw0KPiArICBpZiAoKERhdGEgPj0gMHgxMDAwMDAwMDB1bCkgfHwgKChEYXRhICsg RGF0YUxlbikgPiAweDEwMDAwMDAwMHVsKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gQWRkcmVzcyBmaWVsZCBzaGFsbCBi ZSBzZXQgb24gMzItYml0IGJvdW5kYXJ5IChMb3dlciAyLWJpdCBpcyBhbHdheXMgc2V0DQo+ICsg IC8vIHRvIDApIGZvciAzMi1iaXQgYWRkcmVzcyBkZXNjcmlwdG9yIHRhYmxlLg0KPiArICAvLw0K PiArICBpZiAoKERhdGEgJiAoQklUMCB8IEJJVDEpKSAhPSAwKSB7DQo+ICsgICAgREVCVUcgKCgN Cj4gKyAgICAgIERFQlVHX0lORk8sDQo+ICsgICAgICAiVGhlIGJ1ZmZlciBbMHgleF0gdG8gY29u c3RydWN0IERNQSBkZXNjIGlzIG5vdCBhbGlnbmVkIHRvIDQgYnl0ZXMhXG4iLA0KPiArICAgICAg RGF0YQ0KPiArICAgICAgKSk7DQo+ICsgIH0NCj4gKw0KPiArICBFbnRyaWVzICAgPSAoRGF0YUxl biArIERXTU1DX0RNQV9CVUZfU0laRSAtIDEpIC8gRFdNTUNfRE1BX0JVRl9TSVpFOw0KPiArICBU YWJsZVNpemUgPSBFbnRyaWVzICogc2l6ZW9mIChEV19NTUNfSENfRE1BX0RFU0NfTElORSk7DQo+ ICsgIEJsb2NrcyAgICA9IChEYXRhTGVuICsgRFdfTU1DX0JMT0NLX1NJWkUgLSAxKSAvIERXX01N Q19CTE9DS19TSVpFOw0KPiArDQo+ICsgIFRyYi0+RG1hRGVzY1BhZ2VzID0gKFVJTlQzMilFRklf U0laRV9UT19QQUdFUyAoRW50cmllcyAqIERXTU1DX0RNQV9CVUZfU0laRSk7DQo+ICsvKiAgU3Rh dHVzID0gRGV2SW8tPkFsbG9jYXRlQnVmZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICAgRGV2 SW8sDQo+ICsgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlQW55UGFnZXMsDQo+ICsgICAgICAg ICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAg IEVGSV9TSVpFX1RPX1BBR0VTIChUYWJsZVNpemUpLA0KPiArICAgICAgICAgICAgICAgICAgICAo RUZJX1BIWVNJQ0FMX0FERFJFU1MgKikmVHJiLT5EbWFEZXNjDQo+ICsgICAgICAgICAgICAgICAg ICAgICk7Ki8NCj4gKyAgU3RhdHVzID0gRG1hQWxsb2NhdGVCdWZmZXIgKEVmaUJvb3RTZXJ2aWNl c0RhdGEsIEVGSV9TSVpFX1RPX1BBR0VTIChUYWJsZVNpemUpLA0KPiArICAgICAgICAgICAgIChW T0lEICopJlRyYi0+RG1hRGVzYyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICBaZXJv TWVtIChUcmItPkRtYURlc2MsIFRhYmxlU2l6ZSk7DQo+ICsgIEJ5dGVzICA9IFRhYmxlU2l6ZTsN Cj4gKw0KPiArICBTdGF0dXMgPSBEbWFNYXAgKE1hcE9wZXJhdGlvbkJ1c01hc3RlckNvbW1vbkJ1 ZmZlciwNCj4gKyAgICAgICAgICAgICAoRUZJX1BIWVNJQ0FMX0FERFJFU1MgKilUcmItPkRtYURl c2MsDQo+ICsgICAgICAgICAgICAgJkJ5dGVzLCAmVHJiLT5EbWFEZXNjUGh5LCAmVHJiLT5EbWFN YXApOw0KPiArLyogIFN0YXR1cyA9IERldklvLT5NYXAgKA0KPiArICAgICAgICAgICAgICAgICAg ICBEZXZJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgRWZpQnVzTWFzdGVyQ29tbW9uQnVmZmVy LA0KPiArICAgICAgICAgICAgICAgICAgICAoRUZJX1BIWVNJQ0FMX0FERFJFU1MgKilUcmItPkRt YURlc2MsDQo+ICsgICAgICAgICAgICAgICAgICAgICZCeXRlcywNCj4gKyAgICAgICAgICAgICAg ICAgICAgJlRyYi0+RG1hRGVzY1BoeSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJlRyYi0+RG1h TWFwDQo+ICsgICAgICAgICAgICAgICAgICAgICk7Ki8NCj4gKw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpIHx8IChCeXRlcyAhPSBUYWJsZVNpemUpKSB7DQo+ICsgICAgLy8NCj4gKyAgICAv LyBNYXAgZXJyb3Igb3IgdW5hYmxlIHRvIG1hcCB0aGUgd2hvbGUgUkZpcyBidWZmZXIgaW50byBh IGNvbnRpZ3VvdXMNCj4gKyAgICAvLyByZWdpb24uDQo+ICsgICAgLy8NCj4gKy8qICAgIERldklv LT5GcmVlQnVmZmVyICgNCj4gKyAgICAgICAgICAgICBEZXZJbywNCj4gKyAgICAgICAgICAgICBF RklfU0laRV9UT19QQUdFUyAoVGFibGVTaXplKSwNCj4gKyAgICAgICAgICAgICAoRUZJX1BIWVNJ Q0FMX0FERFJFU1MpVHJiLT5EbWFEZXNjDQo+ICsgICAgICAgICAgICAgKTsqLw0KPiArICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoVUlOVDY0 KShVSU5UTilUcmItPkRtYURlc2NQaHkgPiAweDEwMDAwMDAwMHVsKSB7DQo+ICsgICAgLy8NCj4g KyAgICAvLyBUaGUgRE1BIGRvZXNuJ3Qgc3VwcG9ydCA2NGJpdCBhZGRyZXNzaW5nLg0KPiArICAg IC8vDQo+ICsgICAgRG1hVW5tYXAgKFRyYi0+RG1hTWFwKTsNCj4gKy8qICAgIERldklvLT5Vbm1h cCAoDQo+ICsgICAgICBEZXZJbywNCj4gKyAgICAgIFRyYi0+RG1hTWFwDQo+ICsgICAgKTsqLw0K PiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKERh dGFMZW4gPCBEV19NTUNfQkxPQ0tfU0laRSkgew0KPiArICAgIEJsa1NpemUgPSBEYXRhTGVuOw0K PiArICAgIEJ5dENudCA9IERhdGFMZW47DQo+ICsgICAgUmVtYWluaW5nID0gRGF0YUxlbjsNCj4g KyAgfSBlbHNlIHsNCj4gKyAgICBCbGtTaXplID0gRFdfTU1DX0JMT0NLX1NJWkU7DQo+ICsgICAg Qnl0Q250ID0gRFdfTU1DX0JMT0NLX1NJWkUgKiBCbG9ja3M7DQo+ICsgICAgUmVtYWluaW5nID0g RFdfTU1DX0JMT0NLX1NJWkUgKiBCbG9ja3M7DQo+ICsgIH0NCj4gKw0KPiArICBNbWlvV3JpdGUz MiAoRGV2QmFzZSArIERXX01NQ19CTEtTSVosIEJsa1NpemUpOw0KPiArICBNbWlvV3JpdGUzMiAo RGV2QmFzZSArIERXX01NQ19CWVRDTlQsIEJ5dENudCk7DQo+ICsgIERtYURlc2MgPSBUcmItPkRt YURlc2M7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEVudHJpZXM7IEluZGV4KyssIERt YURlc2MrKykgew0KPiArICAgIERtYURlc2MtPkRlczAgPSBEV19NTUNfSURNQUNfREVTMF9PV04g fCBEV19NTUNfSURNQUNfREVTMF9DSCB8DQo+ICsgICAgICAgICAgICAgICAgICAgIERXX01NQ19J RE1BQ19ERVMwX0RJQzsNCj4gKyAgICBEbWFEZXNjLT5EZXMxID0gRFdfTU1DX0lETUFDX0RFUzFf QlMxIChEV01NQ19ETUFfQlVGX1NJWkUpOw0KPiArICAgIC8vDQo+ICsgICAgLy8gQnVmZmVyIEFk ZHJlc3MNCj4gKyAgICAvLw0KPiArICAgIERtYURlc2MtPkRlczIgPSAoVUlOVDMyKSgoVUlOVE4p VHJiLT5EYXRhUGh5ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgKERXTU1DX0RNQV9CVUZfU0la RSAqIEluZGV4KSk7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBOZXh0IERlc2NyaXB0b3IgQWRkcmVz cw0KPiArICAgIC8vDQo+ICsgICAgRG1hRGVzYy0+RGVzMyA9IChVSU5UMzIpKChVSU5UTilUcmIt PkRtYURlc2NQaHkgKw0KPiArICAgICAgICAgICAgICAgICAgICBzaXplb2YgKERXX01NQ19IQ19E TUFfREVTQ19MSU5FKSAqIChJbmRleCArIDEpKTsNCj4gKyAgICBSZW1haW5pbmcgPSBSZW1haW5p bmcgLSBEV01NQ19ETUFfQlVGX1NJWkU7DQo+ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gRmlyc3Qg RGVzY3JpcHRvcg0KPiArICAvLw0KPiArICBUcmItPkRtYURlc2NbMF0uRGVzMCB8PSBEV19NTUNf SURNQUNfREVTMF9GUzsNCj4gKyAgLy8NCj4gKyAgLy8gTGFzdCBEZXNjcmlwdG9yDQo+ICsgIC8v DQo+ICsgIFRyYi0+RG1hRGVzY1tFbnRyaWVzIC0gMV0uRGVzMCAmPSB+KERXX01NQ19JRE1BQ19E RVMwX0NIIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXX01NQ19J RE1BQ19ERVMwX0RJQyk7DQo+ICsgIFRyYi0+RG1hRGVzY1tFbnRyaWVzIC0gMV0uRGVzMCB8PSBE V19NTUNfSURNQUNfREVTMF9PV04gfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFdfTU1DX0lETUFDX0RFUzBfTEQ7DQo+ICsgIFRyYi0+RG1hRGVzY1tFbnRyaWVzIC0g MV0uRGVzMSA9IERXX01NQ19JRE1BQ19ERVMxX0JTMSAoUmVtYWluaW5nICsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdNTUNfRE1BX0JVRl9TSVpFKTsNCj4gKyAgLy8N Cj4gKyAgLy8gU2V0IHRoZSBuZXh0IGZpZWxkIG9mIHRoZSBMYXN0IERlc2NyaXB0b3INCj4gKyAg Ly8NCj4gKyAgVHJiLT5EbWFEZXNjW0VudHJpZXMgLSAxXS5EZXMzID0gMDsNCj4gKyAgRG1hRGVz Y1BoeSA9IChVSU5UMzIpVHJiLT5EbWFEZXNjUGh5Ow0KPiArDQo+ICsgIE1taW9Xcml0ZTMyIChE ZXZCYXNlICsgRFdfTU1DX0RCQUREUiwgRG1hRGVzY1BoeSk7DQo+ICsNCj4gKyAgQXJtRGF0YVN5 bmNocm9uaXphdGlvbkJhcnJpZXIgKCk7DQo+ICsgIEFybUluc3RydWN0aW9uU3luY2hyb25pemF0 aW9uQmFycmllciAoKTsNCj4gKyAgLy8NCj4gKyAgLy8gQ2xlYXIgaW50ZXJydXB0cw0KPiArICAv Lw0KPiArICBJZHN0cyA9IH4wOw0KPiArICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19J RFNUUywgSWRzdHMpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK1RyYW5zZmVyRmlmbyAoDQo+ICsgIElOIERXX01NQ19IQ19UUkIgICAgICAg ICAgKlRyYg0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgRGV2 QmFzZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBEYXRhOw0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIFJlY2VpdmVkOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgIENvdW50Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEludHN0czsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICBTdHM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgRmlmb0NvdW50Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEluZGV4OyAg ICAgLyogY291bnQgd2l0aCBieXRlcyAqLw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg IEFzY2VuZGluZzsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBEZXNjZW5kaW5nOw0K PiArDQo+ICsgIERldkJhc2UgICA9IFRyYi0+UHJpdmF0ZS0+RGV2QmFzZTsNCj4gKyAgUmVjZWl2 ZWQgPSAwOw0KPiArICBDb3VudCA9IDA7DQo+ICsgIEluZGV4ID0gMDsNCj4gKyAgQXNjZW5kaW5n ID0gMDsNCj4gKyAgRGVzY2VuZGluZyA9ICgoVHJiLT5EYXRhTGVuICsgMykgJiB+MykgLSA0Ow0K PiArICBkbyB7DQo+ICsgICAgSW50c3RzID0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19S SU5UU1RTKTsNCj4gKw0KPiArICAgIGlmIChUcmItPkRhdGFMZW4gJiYgKEludHN0cyAmIERXX01N Q19JTlRfVFhEUikgJiYgIVRyYi0+UmVhZCkgew0KPiArICAgICAgU3RzID0gTW1pb1JlYWQzMiAo RGV2QmFzZSArIERXX01NQ19TVEFUVVMpOw0KPiArDQo+ICsgICAgICB3aGlsZSAoIShEV19NTUNf U1RTX0ZJRk9fRlVMTChTdHMpKQ0KPiArICAgICAgICAgICAgICAmJiAoUmVjZWl2ZWQgPCBUcmIt PkRhdGFMZW4pDQo+ICsgICAgICAgICAgICAgICYmIChJbnRzdHMgJiBEV19NTUNfSU5UX1RYRFIp KSB7DQo+ICsgICAgICAgIGlmIChUcmItPlVzZUJFKSB7DQo+ICsgICAgICAgICAgRGF0YSA9IFN3 YXBCeXRlczMyICgqKFVJTlQzMiAqKSgoVUlOVE4pVHJiLT5EYXRhICsgRGVzY2VuZGluZykpOw0K PiArICAgICAgICAgIERlc2NlbmRpbmcgPSBEZXNjZW5kaW5nIC0gNDsNCj4gKyAgICAgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgICBEYXRhID0gKihVSU5UMzIgKikoKFVJTlROKVRyYi0+RGF0YSAr IEFzY2VuZGluZyk7DQo+ICsgICAgICAgICAgQXNjZW5kaW5nICs9IDQ7DQo+ICsgICAgICAgIH0N Cj4gKyAgICAgICAgSW5kZXggKz0gNDsNCj4gKyAgICAgICAgUmVjZWl2ZWQgKz0gNDsNCj4gKw0K PiArICAgICAgICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19GSUZPX1NUQVJULCBEYXRh KTsNCj4gKw0KPiArICAgICAgICBJbnRzdHMgPSBEV19NTUNfSU5UX1RYRFI7DQo+ICsgICAgICAg IE1taW9Xcml0ZTMyIChEZXZCYXNlICsgRFdfTU1DX1JJTlRTVFMsIEludHN0cyk7DQo+ICsNCj4g KyAgICAgICAgSW50c3RzID0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19SSU5UU1RTKTsN Cj4gKyAgICAgICAgU3RzID0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19TVEFUVVMpOw0K PiArICAgICAgICB9DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBp ZiAoVHJiLT5EYXRhTGVuICYmICgoSW50c3RzICYgRFdfTU1DX0lOVF9SWERSKSB8fA0KPiArICAg ICAgIChJbnRzdHMgJiBEV19NTUNfSU5UX0RUTykpICYmIFRyYi0+UmVhZCkgew0KPiArICAgICAg U3RzID0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19TVEFUVVMpOw0KPiArICAgICAgLy8N Cj4gKyAgICAgIC8vIENvbnZlcnQgdG8gYnl0ZXMNCj4gKyAgICAgIC8vDQo+ICsgICAgICBGaWZv Q291bnQgPSBHRVRfU1RTX0ZJRk9fQ09VTlQgKFN0cykgPDwgMjsNCj4gKyAgICAgIGlmICgoRmlm b0NvdW50ID09IDApICYmIChSZWNlaXZlZCA8IFRyYi0+RGF0YUxlbikpIHsNCj4gKyAgICAgICAg Y29udGludWU7DQo+ICsgICAgICB9DQo+ICsgICAgICBJbmRleCA9IDA7DQo+ICsgICAgICBDb3Vu dCA9IChNSU4gKEZpZm9Db3VudCwgVHJiLT5EYXRhTGVuKSArIDMpICYgfjM7DQo+ICsgICAgICB3 aGlsZSAoSW5kZXggPCBDb3VudCkgew0KPiArICAgICAgICBEYXRhID0gTW1pb1JlYWQzMiAoRGV2 QmFzZSArIERXX01NQ19GSUZPX1NUQVJUKTsNCj4gKw0KPiArICAgICAgICBpZiAoVHJiLT5Vc2VC RSkgew0KPiArICAgICAgICAgICooVUlOVDMyICopKChVSU5UTilUcmItPkRhdGEgKyBEZXNjZW5k aW5nKSA9IFN3YXBCeXRlczMyIChEYXRhKTsNCj4gKyAgICAgICAgICBEZXNjZW5kaW5nID0gRGVz Y2VuZGluZyAtIDQ7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgKihVSU5UMzIg KikoKFVJTlROKVRyYi0+RGF0YSArIEFzY2VuZGluZykgPSBEYXRhOw0KPiArICAgICAgICAgIEFz Y2VuZGluZyArPSA0Ow0KPiArICAgICAgICB9DQo+ICsgICAgICAgIEluZGV4ICs9IDQ7DQo+ICsg ICAgICAgIFJlY2VpdmVkICs9IDQ7DQo+ICsgICAgICB9IC8qIHdoaWxlICovDQo+ICsgICAgfSAv KiBpZiAqLw0KPiArICB9IHdoaWxlICgoKEludHN0cyAmIERXX01NQ19JTlRfQ01EX0RPTkUpID09 IDApIHx8IChSZWNlaXZlZCA8IFRyYi0+RGF0YUxlbikpOw0KPiArICAvLw0KPiArICAvLyBDbGVh ciBSSU5UU1RTDQo+ICsgIC8vDQo+ICsgIEludHN0cyA9IH4wOw0KPiArICBNbWlvV3JpdGUzMiAo RGV2QmFzZSArIERXX01NQ19SSU5UU1RTLCBJbnRzdHMpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgYSBuZXcgVFJCIGZvciB0aGUgU0Qv TU1DIGNtZCByZXF1ZXN0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUHJpdmF0ZSAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBEV19NTUNfSENfUFJJVkFURV9EQVRBIGluc3RhbmNlLg0KPiArICBAcGFy YW1baW5dIFNsb3QgICAgICAgICAgIFRoZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBz ZW5kIHRoZSBjb21tYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8uDQo+ICsg IEBwYXJhbVtpbl0gUGFja2V0ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBTRCBjb21tYW5kIGRh dGEgc3RydWN0dXJlLg0KPiArICBAcGFyYW1baW5dIEV2ZW50ICAgICAgICAgIElmIEV2ZW50IGlz IE5VTEwsIGJsb2NraW5nIEkvTyBpcyBwZXJmb3JtZWQuIElmDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRXZlbnQgaXMgbm90IE5VTEwsIHRoZW4gbm9uYmxvY2tpbmcgSS9PIGlzDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWVkLCBhbmQgRXZlbnQgd2lsbCBi ZSBzaWduYWxlZCB3aGVuIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2tl dCBjb21wbGV0ZXMuDQo+ICsNCj4gKyAgQHJldHVybiBDcmVhdGVkIFRyYiBvciBOVUxMLg0KPiAr DQo+ICsqKi8NCj4gK0RXX01NQ19IQ19UUkIgKg0KPiArRHdNbWNDcmVhdGVUcmIgKA0KPiArICBJ TiBEV19NTUNfSENfUFJJVkFURV9EQVRBICAgICAgICAgICAgICAqUHJpdmF0ZSwNCj4gKyAgSU4g VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCwNCj4gKyAgSU4gRUZJX1NE X01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgKlBhY2tldCwNCj4gKyAgSU4gRUZJX0VWRU5U ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQNCj4gKyAgKQ0KPiArew0KPiArICBEV19N TUNfSENfVFJCICAgICAgICAgICAgICAgICAqVHJiOw0KPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9UUEwgICAgICAgICAgICAgICAgICAgICAgIE9s ZFRwbDsNCj4gKyAgRUZJX0lPX09QRVJBVElPTl9UWVBFICAgICAgICAgRmxhZzsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgTWFwTGVuZ3RoOw0KPiArDQo+ICsgIFRyYiA9IEFs bG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoRFdfTU1DX0hDX1RSQikpOw0KPiArICBpZiAoVHJiID09 IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4gKyAgfQ0KPiArDQo+ICsgIFRyYi0+U2ln bmF0dXJlID0gRFdfTU1DX0hDX1RSQl9TSUc7DQo+ICsgIFRyYi0+U2xvdCAgICAgID0gU2xvdDsN Cj4gKyAgVHJiLT5CbG9ja1NpemUgPSAweDIwMDsNCj4gKyAgVHJiLT5QYWNrZXQgICAgPSBQYWNr ZXQ7DQo+ICsgIFRyYi0+RXZlbnQgICAgID0gRXZlbnQ7DQo+ICsgIFRyYi0+U3RhcnRlZCAgID0g RkFMU0U7DQo+ICsgIFRyYi0+VGltZW91dCAgID0gUGFja2V0LT5UaW1lb3V0Ow0KPiArICBUcmIt PlByaXZhdGUgICA9IFByaXZhdGU7DQo+ICsNCj4gKyAgaWYgKChQYWNrZXQtPkluVHJhbnNmZXJM ZW5ndGggIT0gMCkgJiYgKFBhY2tldC0+SW5EYXRhQnVmZmVyICE9IE5VTEwpKSB7DQo+ICsgICAg VHJiLT5EYXRhICAgID0gUGFja2V0LT5JbkRhdGFCdWZmZXI7DQo+ICsgICAgVHJiLT5EYXRhTGVu ID0gUGFja2V0LT5JblRyYW5zZmVyTGVuZ3RoOw0KPiArICAgIFRyYi0+UmVhZCAgICA9IFRSVUU7 DQo+ICsgICAgWmVyb01lbSAoVHJiLT5EYXRhLCBUcmItPkRhdGFMZW4pOw0KPiArICB9IGVsc2Ug aWYgKFBhY2tldC0+T3V0VHJhbnNmZXJMZW5ndGggJiYgKFBhY2tldC0+T3V0RGF0YUJ1ZmZlciAh PSBOVUxMKSkgew0KPiArICAgIFRyYi0+RGF0YSAgICA9IFBhY2tldC0+T3V0RGF0YUJ1ZmZlcjsN Cj4gKyAgICBUcmItPkRhdGFMZW4gPSBQYWNrZXQtPk91dFRyYW5zZmVyTGVuZ3RoOw0KPiArICAg IFRyYi0+UmVhZCAgICA9IEZBTFNFOw0KPiArICB9IGVsc2UgaWYgKCFQYWNrZXQtPkluVHJhbnNm ZXJMZW5ndGggJiYgIVBhY2tldC0+T3V0VHJhbnNmZXJMZW5ndGgpIHsNCj4gKyAgICBUcmItPkRh dGEgICAgPSBOVUxMOw0KPiArICAgIFRyYi0+RGF0YUxlbiA9IDA7DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgZ290byBFcnJvcjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoKFByaXZhdGUtPlNsb3Rb VHJiLT5TbG90XS5DYXJkVHlwZSA9PSBFbW1jQ2FyZFR5cGUpICYmDQo+ICsgICAgICAgKFBhY2tl dC0+U2RNbWNDbWRCbGstPkNvbW1hbmRJbmRleCA9PSBFTU1DX1NFTkRfVFVOSU5HX0JMT0NLKSkg fHwNCj4gKyAgICAgICgoUHJpdmF0ZS0+U2xvdFtUcmItPlNsb3RdLkNhcmRUeXBlID09IFNkQ2Fy ZFR5cGUpICYmDQo+ICsgICAgICAgKFBhY2tldC0+U2RNbWNDbWRCbGstPkNvbW1hbmRJbmRleCA9 PSBTRF9TRU5EX1RVTklOR19CTE9DSykpKSB7DQo+ICsgICAgVHJiLT5Nb2RlID0gU2RNbWNQaW9N b2RlOw0KPiArICB9IGVsc2Ugew0KPiArICAgIGlmIChUcmItPlJlYWQpIHsNCj4gKyAgICAgIEZs YWcgPSBFZmlCdXNNYXN0ZXJXcml0ZTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgRmxhZyA9 IEVmaUJ1c01hc3RlclJlYWQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFByaXZhdGUtPlNs b3RbVHJiLT5TbG90XS5DYXJkVHlwZSA9PSBTZENhcmRUeXBlKSB7DQo+ICsgICAgICBUcmItPlVz ZUZpZm8gPSBUUlVFOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBUcmItPlVzZUZpZm8gPSBG QUxTRTsNCj4gKyAgICAgIGlmIChUcmItPkRhdGFMZW4pIHsNCj4gKyAgICAgICAgTWFwTGVuZ3Ro ID0gVHJiLT5EYXRhTGVuOw0KPiArICAgICAgICBTdGF0dXMgPSBEbWFNYXAgKEZsYWcsIFRyYi0+ RGF0YSwgJk1hcExlbmd0aCwgJlRyYi0+RGF0YVBoeSwgJlRyYi0+RGF0YU1hcCk7DQo+ICsvKiAg ICAgICAgU3RhdHVzID0gRGV2SW8tPk1hcCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IERldklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBUcmItPkRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICZNYXBMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmItPkRhdGFQaHks DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmItPkRhdGFNYXANCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsqLw0KPiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp IHx8IChUcmItPkRhdGFMZW4gIT0gTWFwTGVuZ3RoKSkgew0KPiArICAgICAgICAgIFN0YXR1cyA9 IEVGSV9CQURfQlVGRkVSX1NJWkU7DQo+ICsgICAgICAgICAgZ290byBFcnJvcjsNCj4gKyAgICAg ICAgfQ0KPiArDQo+ICsgICAgICAgIFN0YXR1cyA9IEJ1aWxkRG1hRGVzY1RhYmxlIChUcmIpOw0K PiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgICAgRG1hVW5t YXAoVHJiLT5EYXRhTWFwKTsNCj4gKyAgICAgICAgICBnb3RvIEVycm9yOw0KPiArICAgICAgICB9 DQo+ICsgICAgICAgIFN0YXR1cyA9IER3TW1jSGNTdGFydERtYSAoUHJpdmF0ZSwgVHJiKTsNCj4g KyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAgIERtYVVubWFw KFRyYi0+RGF0YU1hcCk7DQo+ICsgICAgICAgICAgZ290byBFcnJvcjsNCj4gKyAgICAgICAgfQ0K PiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfSAvKiBUdW5pbmdCbG9jayAqLw0KPiArDQo+ICsg IGlmIChFdmVudCAhPSBOVUxMKSB7DQo+ICsgICAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBM X05PVElGWSk7DQo+ICsgICAgSW5zZXJ0VGFpbExpc3QgKCZQcml2YXRlLT5RdWV1ZSwgJlRyYi0+ VHJiTGlzdCk7DQo+ICsgICAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIFRyYjsNCj4gKw0KPiArRXJyb3I6DQo+ICsgIHJldHVybiBOVUxMOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSB0aGUgcmVzb3VyY2UgdXNlZCBieSB0aGUgVFJCLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gVHJiICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIERX X01NQ19IQ19UUkIgaW5zdGFuY2UuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArRHdNbWNGcmVl VHJiICgNCj4gKyAgSU4gRFdfTU1DX0hDX1RSQiAgICAgICAgICAgKlRyYg0KPiArICApDQo+ICt7 DQo+ICsgIGlmIChUcmItPkRtYU1hcCAhPSBOVUxMKSB7DQo+ICsgICAgRG1hVW5tYXAgKFRyYi0+ RG1hTWFwKTsNCj4gKyAgfQ0KPiArICBpZiAoVHJiLT5EYXRhTWFwICE9IE5VTEwpIHsNCj4gKyAg ICBEbWFVbm1hcCAoVHJiLT5EYXRhTWFwKTsNCj4gKyAgfQ0KPiArICBGcmVlUG9vbCAoVHJiKTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBlbnYgaXMgcmVhZHkgZm9yIGV4 ZWN1dGUgc3BlY2lmaWVkIFRSQi4NCj4gKw0KPiArICBAcGFyYW1baW5dIFByaXZhdGUgICAgICAg IEEgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1BSSVZBVEVfREFUQSBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luXSBUcmIgICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1RS QiBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBlbnYg aXMgcmVhZHkgZm9yIFRSQiBleGVjdXRpb24uDQo+ICsgIEByZXR2YWwgRUZJX05PVF9SRUFEWSAg ICAgVGhlIGVudiBpcyBub3QgcmVhZHkgZm9yIFRSQiBleGVjdXRpb24uDQo+ICsgIEByZXR2YWwg T3RoZXJzICAgICAgICAgICAgU29tZSBlcnJvcyBoYXBwZW4uDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRHdNbWNDaGVja1RyYkVudiAoDQo+ICsgIElOIERXX01NQ19IQ19QUklWQVRF X0RBVEEgICAgICAgICAgICpQcml2YXRlLA0KPiArICBJTiBEV19NTUNfSENfVFJCICAgICAgICAg ICAgICAgICAgICAqVHJiDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgV2FpdCBmb3IgdGhlIGVudiB0byBiZSByZWFkeSBmb3Ig ZXhlY3V0ZSBzcGVjaWZpZWQgVFJCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUHJpdmF0ZSAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBEV19NTUNfSENfUFJJVkFURV9EQVRBIGluc3RhbmNlLg0KPiAr ICBAcGFyYW1baW5dIFRyYiAgICAgICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBEV19NTUNfSENf VFJCIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIGVu diBpcyByZWFkeSBmb3IgVFJCIGV4ZWN1dGlvbi4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAg ICAgICBUaGUgZW52IGlzIG5vdCByZWFkeSBmb3IgVFJCIGV4ZWN1dGlvbiBpbiB0aW1lLg0KPiAr ICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFNvbWUgZXJyb3MgaGFwcGVuLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jV2FpdFRyYkVudiAoDQo+ICsgIElOIERXX01NQ19I Q19QUklWQVRFX0RBVEEgICAgICAgICAgICpQcml2YXRlLA0KPiArICBJTiBEV19NTUNfSENfVFJC ICAgICAgICAgICAgICAgICAgICAqVHJiDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfU0RfTU1DX1BBU1NfVEhS VV9DT01NQU5EX1BBQ0tFVCAqUGFja2V0Ow0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUaW1lb3V0Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmZpbml0ZVdhaXQ7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gV2FpdCBDb21tYW5kIENv bXBsZXRlIEludGVycnVwdCBTdGF0dXMgYml0IGluIE5vcm1hbCBJbnRlcnJ1cHQgU3RhdHVzDQo+ ICsgIC8vIFJlZ2lzdGVyDQo+ICsgIC8vDQo+ICsgIFBhY2tldCAgPSBUcmItPlBhY2tldDsNCj4g KyAgVGltZW91dCA9IFBhY2tldC0+VGltZW91dDsNCj4gKyAgaWYgKFRpbWVvdXQgPT0gMCkgew0K PiArICAgIEluZmluaXRlV2FpdCA9IFRSVUU7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgSW5maW5p dGVXYWl0ID0gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICB3aGlsZSAoSW5maW5pdGVXYWl0IHx8 IChUaW1lb3V0ID4gMCkpIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIENoZWNrIFRyYiBleGVjdXRp b24gcmVzdWx0IGJ5IHJlYWRpbmcgTm9ybWFsIEludGVycnVwdCBTdGF0dXMgcmVnaXN0ZXIuDQo+ ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBEd01tY0NoZWNrVHJiRW52IChQcml2YXRlLCBUcmIp Ow0KPiArICAgIGlmIChTdGF0dXMgIT0gRUZJX05PVF9SRUFEWSkgew0KPiArICAgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgICB9DQo+ICsgICAgLy8NCj4gKyAgICAvLyBTdGFsbCBmb3IgMSBtaWNy b3NlY29uZC4NCj4gKyAgICAvLw0KPiArICAgIGdCUy0+U3RhbGwgKDEpOw0KPiArDQo+ICsgICAg VGltZW91dC0tOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9USU1FT1VUOw0KPiArfQ0K PiArDQo+ICtFRklfU1RBVFVTDQo+ICtEd0VtbWNFeGVjVHJiICgNCj4gKyAgSU4gRFdfTU1DX0hD X1BSSVZBVEVfREFUQSAgICAgICAgICAgKlByaXZhdGUsDQo+ICsgIElOIERXX01NQ19IQ19UUkIg ICAgICAgICAgICAgICAgICAgICpUcmINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU0RfTU1DX1BB U1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAqUGFja2V0Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEZXZCYXNlOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDbWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1tY1N0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50 U3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVu dDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyTWFzazsNCj4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dDsNCj4gKw0KPiAr ICBQYWNrZXQgPSBUcmItPlBhY2tldDsNCj4gKyAgRGV2QmFzZSA9IFRyYi0+UHJpdmF0ZS0+RGV2 QmFzZTsNCj4gKw0KPiArICBBcm1EYXRhU3luY2hyb25pemF0aW9uQmFycmllciAoKTsNCj4gKyAg QXJtSW5zdHJ1Y3Rpb25TeW5jaHJvbml6YXRpb25CYXJyaWVyICgpOw0KPiArICAvLw0KPiArICAv LyBXYWl0IHVudGlsIE1NQyBpcyBpZGxlDQo+ICsgIC8vDQo+ICsgIGRvIHsNCj4gKyAgICBNbWNT dGF0dXMgPSBNbWlvUmVhZDMyIChEZXZCYXNlICsgRFdfTU1DX1NUQVRVUyk7DQo+ICsgIH0gd2hp bGUgKE1tY1N0YXR1cyAmIERXX01NQ19TVFNfREFUQV9CVVNZKTsNCj4gKw0KPiArICBJbnRTdGF0 dXMgPSB+MDsNCj4gKyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfUklOVFNUUywgSW50 U3RhdHVzKTsNCj4gKyAgQ21kID0gQ01EX0lOREVYIChQYWNrZXQtPlNkTW1jQ21kQmxrLT5Db21t YW5kSW5kZXgpOw0KPiArICBpZiAoKFBhY2tldC0+U2RNbWNDbWRCbGstPkNvbW1hbmRUeXBlID09 IFNkTW1jQ29tbWFuZFR5cGVBYykgfHwNCj4gKyAgICAgIChQYWNrZXQtPlNkTW1jQ21kQmxrLT5D b21tYW5kVHlwZSA9PSBTZE1tY0NvbW1hbmRUeXBlQWR0YykpIHsNCj4gKyAgICBzd2l0Y2ggKFBh Y2tldC0+U2RNbWNDbWRCbGstPkNvbW1hbmRJbmRleCkgew0KPiArICAgIGNhc2UgRU1NQ19TRVRf UkVMQVRJVkVfQUREUjoNCj4gKyAgICAgIENtZCB8PSBCSVRfQ01EX1NFTkRfSU5JVDsNCj4gKyAg ICAgIGJyZWFrOw0KPiArICAgIGNhc2UgRU1NQ19TRU5EX1NUQVRVUzoNCj4gKyAgICAgIENtZCB8 PSBCSVRfQ01EX1dBSVRfUFJWREFUQV9DT01QTEVURTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAg IGNhc2UgRU1NQ19TVE9QX1RSQU5TTUlTU0lPTjoNCj4gKyAgICAgIENtZCB8PSBCSVRfQ01EX1NU T1BfQUJPUlRfQ01EOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICAgIGlmIChQYWNr ZXQtPkluVHJhbnNmZXJMZW5ndGgpIHsNCj4gKyAgICAgIENtZCB8PSBCSVRfQ01EX1dBSVRfUFJW REFUQV9DT01QTEVURSB8IEJJVF9DTURfREFUQV9FWFBFQ1RFRCB8DQo+ICsgICAgICAgICAgICAg QklUX0NNRF9SRUFEOw0KPiArICAgIH0gZWxzZSBpZiAoUGFja2V0LT5PdXRUcmFuc2Zlckxlbmd0 aCkgew0KPiArICAgICAgQ21kIHw9IEJJVF9DTURfV0FJVF9QUlZEQVRBX0NPTVBMRVRFIHwgQklU X0NNRF9EQVRBX0VYUEVDVEVEIHwNCj4gKyAgICAgICAgICAgICBCSVRfQ01EX1dSSVRFOw0KPiAr ICAgIH0NCj4gKyAgICBDbWQgfD0gQklUX0NNRF9SRVNQT05TRV9FWFBFQ1QgfCBCSVRfQ01EX0NI RUNLX1JFU1BPTlNFX0NSQzsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBzd2l0Y2ggKFBhY2tldC0+ U2RNbWNDbWRCbGstPkNvbW1hbmRJbmRleCkgew0KPiArICAgIGNhc2UgRU1NQ19HT19JRExFX1NU QVRFOg0KPiArICAgICAgQ21kIHw9IEJJVF9DTURfU0VORF9JTklUOw0KPiArICAgICAgYnJlYWs7 DQo+ICsgICAgY2FzZSBFTU1DX1NFTkRfT1BfQ09ORDoNCj4gKyAgICAgIENtZCB8PSBCSVRfQ01E X1JFU1BPTlNFX0VYUEVDVDsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgRU1NQ19BTExf U0VORF9DSUQ6DQo+ICsgICAgICBDbWQgfD0gQklUX0NNRF9SRVNQT05TRV9FWFBFQ1QgfCBCSVRf Q01EX0xPTkdfUkVTUE9OU0UgfA0KPiArICAgICAgICAgICAgIEJJVF9DTURfQ0hFQ0tfUkVTUE9O U0VfQ1JDIHwgQklUX0NNRF9TRU5EX0lOSVQ7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gKyAgc3dpdGNoIChQYWNrZXQtPlNkTW1jQ21kQmxrLT5SZXNwb25zZVR5cGUpIHsN Cj4gKyAgY2FzZSBTZE1tY1Jlc3BvbnNlVHlwZVIyOg0KPiArICAgIENtZCB8PSBCSVRfQ01EX1JF U1BPTlNFX0VYUEVDVCB8IEJJVF9DTURfQ0hFQ0tfUkVTUE9OU0VfQ1JDIHwNCj4gKyAgICAgICAg ICAgQklUX0NNRF9MT05HX1JFU1BPTlNFOw0KPiArICAgIGJyZWFrOw0KPiArICBjYXNlIFNkTW1j UmVzcG9uc2VUeXBlUjM6DQo+ICsgICAgQ21kIHw9IEJJVF9DTURfUkVTUE9OU0VfRVhQRUNUOw0K PiArICAgIGJyZWFrOw0KPiArICB9DQo+ICsgIENtZCB8PSBCSVRfQ01EX1VTRV9IT0xEX1JFRyB8 IEJJVF9DTURfU1RBUlQ7DQo+ICsNCj4gKyAgQXJndW1lbnQgPSBQYWNrZXQtPlNkTW1jQ21kQmxr LT5Db21tYW5kQXJndW1lbnQ7DQo+ICsgIE1taW9Xcml0ZTMyIChEZXZCYXNlICsgRFdfTU1DX0NN REFSRywgQXJndW1lbnQpOw0KPiArDQo+ICsgIEFybURhdGFTeW5jaHJvbml6YXRpb25CYXJyaWVy ICgpOw0KPiArICBBcm1JbnN0cnVjdGlvblN5bmNocm9uaXphdGlvbkJhcnJpZXIgKCk7DQo+ICsN Cj4gKyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfQ01ELCBDbWQpOw0KPiArICBBcm1E YXRhU3luY2hyb25pemF0aW9uQmFycmllciAoKTsNCj4gKyAgQXJtSW5zdHJ1Y3Rpb25TeW5jaHJv bml6YXRpb25CYXJyaWVyICgpOw0KPiArDQo+ICsgIEVyck1hc2sgPSBEV19NTUNfSU5UX0VCRSB8 IERXX01NQ19JTlRfSExFIHwgRFdfTU1DX0lOVF9SVE8gfA0KPiArICAgICAgICAgICAgRFdfTU1D X0lOVF9SQ1JDIHwgRFdfTU1DX0lOVF9SRTsNCj4gKyAgRXJyTWFzayB8PSBEV19NTUNfSU5UX0RD UkMgfCBEV19NTUNfSU5UX0RSVCB8IERXX01NQ19JTlRfU0JFOw0KPiArICBkbyB7DQo+ICsgICAg VGltZW91dCA9IDEwMDAwOw0KPiArICAgIGlmICgtLVRpbWVvdXQgPT0gMCkgew0KPiArICAgICAg YnJlYWs7DQo+ICsgICAgfQ0KPiArICAgIEludFN0YXR1cyA9IE1taW9SZWFkMzIgKERldkJhc2Ug KyBEV19NTUNfUklOVFNUUyk7DQo+ICsgICAgaWYgKEludFN0YXR1cyAmIEVyck1hc2spIHsNCj4g KyAgICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICAgIH0NCj4gKyAgICBpZiAoVHJi LT5EYXRhTGVuICYmICgoSW50U3RhdHVzICYgRFdfTU1DX0lOVF9EVE8pID09IDApKSB7DQo+ICsg ICAgICAvLw0KPiArICAgICAgLy8gVHJhbnNmZXIgTm90IERvbmUNCj4gKyAgICAgIC8vDQo+ICsg ICAgICBNaWNyb1NlY29uZERlbGF5ICgxMCk7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9 DQo+ICsgICAgTWljcm9TZWNvbmREZWxheSAoMTApOw0KPiArICB9IHdoaWxlICghKEludFN0YXR1 cyAmIERXX01NQ19JTlRfQ01EX0RPTkUpKTsNCj4gKyAgc3dpdGNoIChQYWNrZXQtPlNkTW1jQ21k QmxrLT5SZXNwb25zZVR5cGUpIHsNCj4gKyAgICBjYXNlIFNkTW1jUmVzcG9uc2VUeXBlUjE6DQo+ ICsgICAgY2FzZSBTZE1tY1Jlc3BvbnNlVHlwZVIxYjoNCj4gKyAgICBjYXNlIFNkTW1jUmVzcG9u c2VUeXBlUjM6DQo+ICsgICAgY2FzZSBTZE1tY1Jlc3BvbnNlVHlwZVI0Og0KPiArICAgIGNhc2Ug U2RNbWNSZXNwb25zZVR5cGVSNToNCj4gKyAgICAgIFBhY2tldC0+U2RNbWNTdGF0dXNCbGstPlJl c3AwID0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19SRVNQMCk7DQo+ICsgICAgICBicmVh azsNCj4gKyAgICBjYXNlIFNkTW1jUmVzcG9uc2VUeXBlUjI6DQo+ICsgICAgICBQYWNrZXQtPlNk TW1jU3RhdHVzQmxrLT5SZXNwMCA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19NTUNfUkVTUDAp Ow0KPiArICAgICAgUGFja2V0LT5TZE1tY1N0YXR1c0Jsay0+UmVzcDEgPSBNbWlvUmVhZDMyIChE ZXZCYXNlICsgRFdfTU1DX1JFU1AxKTsNCj4gKyAgICAgIFBhY2tldC0+U2RNbWNTdGF0dXNCbGst PlJlc3AyID0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19SRVNQMik7DQo+ICsgICAgICBQ YWNrZXQtPlNkTW1jU3RhdHVzQmxrLT5SZXNwMyA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19N TUNfUkVTUDMpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAv LyBUaGUgd29ya2Fyb3VuZCBvbiBFTU1DX1NFTkRfQ1NEIGlzIHVzZWQgdG8gYmUgY29tcGF0aWJs ZSB3aXRoIFNESEMuDQo+ICsgIC8vDQo+ICsgIGlmIChQYWNrZXQtPlNkTW1jQ21kQmxrLT5Db21t YW5kSW5kZXggPT0gRU1NQ19TRU5EX0NTRCkgew0KPiArICAgIHsNCj4gKyAgICAgIFVJTlQzMiAg IEJ1Zls0XTsNCj4gKyAgICAgIFplcm9NZW0gKEJ1Ziwgc2l6ZW9mIChCdWYpKTsNCj4gKyAgICAg IENvcHlNZW0gKA0KPiArICAgICAgICAoVUlOVDggKilCdWYsDQo+ICsgICAgICAgIChVSU5UOCAq KSZQYWNrZXQtPlNkTW1jU3RhdHVzQmxrLT5SZXNwMCArIDEsDQo+ICsgICAgICAgIHNpemVvZiAo QnVmKSAtIDENCj4gKyAgICAgICAgKTsNCj4gKyAgICAgIENvcHlNZW0gKA0KPiArICAgICAgICAo VUlOVDggKikmUGFja2V0LT5TZE1tY1N0YXR1c0Jsay0+UmVzcDAsDQo+ICsgICAgICAgIChVSU5U OCAqKUJ1ZiwNCj4gKyAgICAgICAgc2l6ZW9mIChCdWYpIC0gMQ0KPiArICAgICAgICApOw0KPiAr ICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRHdTZEV4ZWNUcmIgKA0KPiArICBJTiBEV19NTUNfSENfUFJJVkFU RV9EQVRBICAgICAgICAgICAqUHJpdmF0ZSwNCj4gKyAgSU4gRFdfTU1DX0hDX1RSQiAgICAgICAg ICAgICAgICAgICAgKlRyYg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJV X0NPTU1BTkRfUEFDS0VUICpQYWNrZXQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERldkJhc2U7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENtZDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW1jU3Rh dHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTdGF0dXM7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50Ow0KPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJNYXNrOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0Ow0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJZHN0czsNCj4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQnl0Q250Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCbGtTaXplOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgUGFja2V0ID0gVHJiLT5QYWNrZXQ7DQo+ICsgIERldkJh c2UgID0gVHJiLT5Qcml2YXRlLT5EZXZCYXNlOw0KPiArDQo+ICsgIEFybURhdGFTeW5jaHJvbml6 YXRpb25CYXJyaWVyICgpOw0KPiArICBBcm1JbnN0cnVjdGlvblN5bmNocm9uaXphdGlvbkJhcnJp ZXIgKCk7DQo+ICsgIC8vDQo+ICsgIC8vIFdhaXQgdW50aWwgTU1DIGlzIGlkbGUNCj4gKyAgLy8N Cj4gKyAgZG8gew0KPiArICAgIE1tY1N0YXR1cyA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19N TUNfU1RBVFVTKTsNCj4gKyAgfSB3aGlsZSAoTW1jU3RhdHVzICYgRFdfTU1DX1NUU19EQVRBX0JV U1kpOw0KPiArDQo+ICsgIEludFN0YXR1cyA9IH4wOw0KPiArICBNbWlvV3JpdGUzMiAoRGV2QmFz ZSArIERXX01NQ19SSU5UU1RTLCBJbnRTdGF0dXMpOw0KPiArICBDbWQgPSBDTURfSU5ERVggKFBh Y2tldC0+U2RNbWNDbWRCbGstPkNvbW1hbmRJbmRleCk7DQo+ICsgIGlmICgoUGFja2V0LT5TZE1t Y0NtZEJsay0+Q29tbWFuZFR5cGUgPT0gU2RNbWNDb21tYW5kVHlwZUFjKSB8fA0KPiArICAgICAg KFBhY2tldC0+U2RNbWNDbWRCbGstPkNvbW1hbmRUeXBlID09IFNkTW1jQ29tbWFuZFR5cGVBZHRj KSkgew0KPiArICAgIHN3aXRjaCAoUGFja2V0LT5TZE1tY0NtZEJsay0+Q29tbWFuZEluZGV4KSB7 DQo+ICsgICAgY2FzZSBTRF9TRVRfUkVMQVRJVkVfQUREUjoNCj4gKyAgICAgIENtZCB8PSBCSVRf Q01EX1NFTkRfSU5JVDsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgU0RfU1RPUF9UUkFO U01JU1NJT046DQo+ICsgICAgICBDbWQgfD0gQklUX0NNRF9TVE9QX0FCT1JUX0NNRDsNCj4gKyAg ICAgIGJyZWFrOw0KPiArICAgIGNhc2UgU0RfU0VORF9TQ1I6DQo+ICsgICAgICBUcmItPlVzZUJF ID0gVFJVRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgICBpZiAoUGFja2V0LT5J blRyYW5zZmVyTGVuZ3RoKSB7DQo+ICsgICAgICBDbWQgfD0gQklUX0NNRF9XQUlUX1BSVkRBVEFf Q09NUExFVEUgfCBCSVRfQ01EX0RBVEFfRVhQRUNURUQgfA0KPiArICAgICAgICAgICAgIEJJVF9D TURfUkVBRDsNCj4gKyAgICB9IGVsc2UgaWYgKFBhY2tldC0+T3V0VHJhbnNmZXJMZW5ndGgpIHsN Cj4gKyAgICAgIENtZCB8PSBCSVRfQ01EX1dBSVRfUFJWREFUQV9DT01QTEVURSB8IEJJVF9DTURf REFUQV9FWFBFQ1RFRCB8DQo+ICsgICAgICAgICAgICAgQklUX0NNRF9XUklURTsNCj4gKyAgICB9 DQo+ICsgICAgQ21kIHw9IEJJVF9DTURfUkVTUE9OU0VfRVhQRUNUIHwgQklUX0NNRF9DSEVDS19S RVNQT05TRV9DUkMgfA0KPiArICAgICAgICAgICBCSVRfQ01EX1NFTkRfQVVUT19TVE9QOw0KPiAr ICB9IGVsc2Ugew0KPiArICAgIHN3aXRjaCAoUGFja2V0LT5TZE1tY0NtZEJsay0+Q29tbWFuZElu ZGV4KSB7DQo+ICsgICAgY2FzZSBTRF9HT19JRExFX1NUQVRFOg0KPiArICAgICAgQ21kIHw9IEJJ VF9DTURfU0VORF9JTklUOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsg IHN3aXRjaCAoUGFja2V0LT5TZE1tY0NtZEJsay0+UmVzcG9uc2VUeXBlKSB7DQo+ICsgIGNhc2Ug U2RNbWNSZXNwb25zZVR5cGVSMjoNCj4gKyAgICBDbWQgfD0gQklUX0NNRF9SRVNQT05TRV9FWFBF Q1QgfCBCSVRfQ01EX0NIRUNLX1JFU1BPTlNFX0NSQyB8DQo+ICsgICAgICAgICAgIEJJVF9DTURf TE9OR19SRVNQT05TRTsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSBTZE1tY1Jlc3BvbnNlVHlw ZVIzOg0KPiArICAgIENtZCB8PSBCSVRfQ01EX1JFU1BPTlNFX0VYUEVDVDsNCj4gKyAgICBicmVh azsNCj4gKyAgY2FzZSBTZE1tY1Jlc3BvbnNlVHlwZVIxYjoNCj4gKyAgY2FzZSBTZE1tY1Jlc3Bv bnNlVHlwZVI0Og0KPiArICBjYXNlIFNkTW1jUmVzcG9uc2VUeXBlUjY6DQo+ICsgIGNhc2UgU2RN bWNSZXNwb25zZVR5cGVSNzoNCj4gKyAgICBDbWQgfD0gQklUX0NNRF9SRVNQT05TRV9FWFBFQ1Qg fCBCSVRfQ01EX0NIRUNLX1JFU1BPTlNFX0NSQzsNCj4gKyAgICBicmVhazsNCj4gKyAgfQ0KPiAr ICBDbWQgfD0gQklUX0NNRF9VU0VfSE9MRF9SRUcgfCBCSVRfQ01EX1NUQVJUOw0KPiArDQo+ICsg IGlmIChUcmItPlVzZUZpZm8gPT0gVFJVRSkgew0KPiArICAgIEJ5dENudCA9IFRyYi0+UmVhZCA/ IFBhY2tldC0+SW5UcmFuc2Zlckxlbmd0aCA6IFBhY2tldC0+T3V0VHJhbnNmZXJMZW5ndGg7DQo+ ICsgICAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfQllUQ05ULCBCeXRDbnQpOw0KPiAr ICAgIGlmIChUcmItPlJlYWQpIHsNCj4gKyAgICAgIGlmIChQYWNrZXQtPkluVHJhbnNmZXJMZW5n dGggPiBEV19NTUNfQkxPQ0tfU0laRSkgew0KPiArICAgICAgICBCbGtTaXplID0gRFdfTU1DX0JM T0NLX1NJWkU7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBCbGtTaXplID0gUGFja2V0 LT5JblRyYW5zZmVyTGVuZ3RoOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgICBlbHNlIHsN Cj4gKyAgICAgIGlmIChQYWNrZXQtPk91dFRyYW5zZmVyTGVuZ3RoID4gRFdfTU1DX0JMT0NLX1NJ WkUpIHsNCj4gKyAgICAgICAgQmxrU2l6ZSA9IERXX01NQ19CTE9DS19TSVpFOw0KPiArICAgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgQmxrU2l6ZSA9IFBhY2tldC0+T3V0VHJhbnNmZXJMZW5ndGg7 DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTW1pb1dyaXRlMzIgKERldkJhc2Ug KyBEV19NTUNfQkxLU0laLCBCbGtTaXplKTsNCj4gKyAgfQ0KPiArDQo+ICsgIEFyZ3VtZW50ID0g UGFja2V0LT5TZE1tY0NtZEJsay0+Q29tbWFuZEFyZ3VtZW50Ow0KPiArICBNbWlvV3JpdGUzMiAo RGV2QmFzZSArIERXX01NQ19DTURBUkcsIEFyZ3VtZW50KTsNCj4gKyAgQXJtRGF0YVN5bmNocm9u aXphdGlvbkJhcnJpZXIgKCk7DQo+ICsgIEFybUluc3RydWN0aW9uU3luY2hyb25pemF0aW9uQmFy cmllciAoKTsNCj4gKyAgTW1pb1dyaXRlMzIgKERldkJhc2UgKyBEV19NTUNfQ01ELCBDbWQpOw0K PiArICBBcm1EYXRhU3luY2hyb25pemF0aW9uQmFycmllciAoKTsNCj4gKyAgQXJtSW5zdHJ1Y3Rp b25TeW5jaHJvbml6YXRpb25CYXJyaWVyICgpOw0KPiArDQo+ICsgIEVyck1hc2sgPSBEV19NTUNf SU5UX0VCRSB8IERXX01NQ19JTlRfSExFIHwgRFdfTU1DX0lOVF9SVE8gfA0KPiArICAgICAgICAg ICAgRFdfTU1DX0lOVF9SQ1JDIHwgRFdfTU1DX0lOVF9SRTsNCj4gKyAgRXJyTWFzayB8PSBEV19N TUNfSU5UX0RSVCB8IERXX01NQ19JTlRfU0JFOw0KPiArICBpZiAoUGFja2V0LT5JblRyYW5zZmVy TGVuZ3RoIHx8IFBhY2tldC0+T3V0VHJhbnNmZXJMZW5ndGgpIHsNCj4gKyAgICBFcnJNYXNrIHw9 IERXX01NQ19JTlRfRENSQzsNCj4gKyAgfQ0KPiArICBpZiAoVHJiLT5Vc2VGaWZvID09IFRSVUUp IHsNCj4gKyAgICBTdGF0dXMgPSBUcmFuc2ZlckZpZm8gKFRyYik7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsg IH0gZWxzZSB7DQo+ICsgICAgVGltZW91dCA9IDEwMDAwOw0KPiArICAgIGRvIHsNCj4gKyAgICAg IGlmICgtLVRpbWVvdXQgPT0gMCkgew0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4g KyAgICAgIEludFN0YXR1cyA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19NTUNfUklOVFNUUyk7 DQo+ICsgICAgICBpZiAoSW50U3RhdHVzICYgRXJyTWFzaykgew0KPiArICAgICAgICByZXR1cm4g RUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgICAgIH0NCj4gKyAgICAgIGlmIChUcmItPkRhdGFMZW4g JiYgKChJbnRTdGF0dXMgJiBEV19NTUNfSU5UX0RUTykgPT0gMCkpIHsNCj4gKyAgICAgICAgLy8N Cj4gKyAgICAgICAgLy8gVHJhbnNmZXIgbm90IERvbmUNCj4gKyAgICAgICAgLy8NCj4gKyAgICAg ICAgTWljcm9TZWNvbmREZWxheSAoMTApOw0KPiArICAgICAgICBjb250aW51ZTsNCj4gKyAgICAg IH0NCj4gKyAgICAgIE1pY3JvU2Vjb25kRGVsYXkgKDEwKTsNCj4gKyAgICB9IHdoaWxlICghKElu dFN0YXR1cyAmIERXX01NQ19JTlRfQ01EX0RPTkUpKTsNCj4gKyAgICBpZiAoUGFja2V0LT5JblRy YW5zZmVyTGVuZ3RoKSB7DQo+ICsgICAgICBkbyB7DQo+ICsgICAgICAgIElkc3RzID0gTW1pb1Jl YWQzMiAoRGV2QmFzZSArIERXX01NQ19JRFNUUyk7DQo+ICsgICAgICB9IHdoaWxlICgoSWRzdHMg JiBEV19NTUNfSURTVFNfUkkpID09IDApOw0KPiArICAgICAgU3RhdHVzID0gRHdNbWNIY1N0b3BE bWEgKFByaXZhdGUsIFRyYik7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfSBlbHNlIGlmIChQ YWNrZXQtPk91dFRyYW5zZmVyTGVuZ3RoKSB7DQo+ICsgICAgICBkbyB7DQo+ICsgICAgICAgIElk c3RzID0gTW1pb1JlYWQzMiAoRGV2QmFzZSArIERXX01NQ19JRFNUUyk7DQo+ICsgICAgICB9IHdo aWxlICgoSWRzdHMgJiBEV19NTUNfSURTVFNfVEkpID09IDApOw0KPiArICAgICAgU3RhdHVzID0g RHdNbWNIY1N0b3BEbWEgKFByaXZhdGUsIFRyYik7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAg fSAvKiBQYWNrZXQtPkluVHJhbnNmZXJMZW5ndGggKi8NCj4gKyAgfSAvKiBVc2VGaWZvICovDQo+ ICsgIHN3aXRjaCAoUGFja2V0LT5TZE1tY0NtZEJsay0+UmVzcG9uc2VUeXBlKSB7DQo+ICsgICAg Y2FzZSBTZE1tY1Jlc3BvbnNlVHlwZVIxOg0KPiArICAgIGNhc2UgU2RNbWNSZXNwb25zZVR5cGVS MWI6DQo+ICsgICAgY2FzZSBTZE1tY1Jlc3BvbnNlVHlwZVIzOg0KPiArICAgIGNhc2UgU2RNbWNS ZXNwb25zZVR5cGVSNDoNCj4gKyAgICBjYXNlIFNkTW1jUmVzcG9uc2VUeXBlUjU6DQo+ICsgICAg Y2FzZSBTZE1tY1Jlc3BvbnNlVHlwZVI2Og0KPiArICAgIGNhc2UgU2RNbWNSZXNwb25zZVR5cGVS NzoNCj4gKyAgICAgIFBhY2tldC0+U2RNbWNTdGF0dXNCbGstPlJlc3AwID0gTW1pb1JlYWQzMiAo RGV2QmFzZSArIERXX01NQ19SRVNQMCk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFNk TW1jUmVzcG9uc2VUeXBlUjI6DQo+ICsgICAgICBQYWNrZXQtPlNkTW1jU3RhdHVzQmxrLT5SZXNw MCA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19NTUNfUkVTUDApOw0KPiArICAgICAgUGFja2V0 LT5TZE1tY1N0YXR1c0Jsay0+UmVzcDEgPSBNbWlvUmVhZDMyIChEZXZCYXNlICsgRFdfTU1DX1JF U1AxKTsNCj4gKyAgICAgIFBhY2tldC0+U2RNbWNTdGF0dXNCbGstPlJlc3AyID0gTW1pb1JlYWQz MiAoRGV2QmFzZSArIERXX01NQ19SRVNQMik7DQo+ICsgICAgICBQYWNrZXQtPlNkTW1jU3RhdHVz QmxrLT5SZXNwMyA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19NTUNfUkVTUDMpOw0KPiArICAg ICAgYnJlYWs7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBUaGUgd29ya2Fyb3VuZCBv biBTRF9TRU5EX0NTRCBpcyB1c2VkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBTREhDLg0KPiArICAv Lw0KPiArICBpZiAoUGFja2V0LT5TZE1tY0NtZEJsay0+Q29tbWFuZEluZGV4ID09IFNEX1NFTkRf Q1NEKSB7DQo+ICsgICAgew0KPiArICAgICAgVUlOVDMyICAgQnVmWzRdOw0KPiArICAgICAgWmVy b01lbSAoQnVmLCBzaXplb2YgKEJ1ZikpOw0KPiArICAgICAgQ29weU1lbSAoDQo+ICsgICAgICAg IChVSU5UOCAqKUJ1ZiwNCj4gKyAgICAgICAgKFVJTlQ4ICopJlBhY2tldC0+U2RNbWNTdGF0dXNC bGstPlJlc3AwICsgMSwNCj4gKyAgICAgICAgc2l6ZW9mIChCdWYpIC0gMQ0KPiArICAgICAgICAp Ow0KPiArICAgICAgQ29weU1lbSAoDQo+ICsgICAgICAgIChVSU5UOCAqKSZQYWNrZXQtPlNkTW1j U3RhdHVzQmxrLT5SZXNwMCwNCj4gKyAgICAgICAgKFVJTlQ4ICopQnVmLA0KPiArICAgICAgICBz aXplb2YgKEJ1ZikgLSAxDQo+ICsgICAgICAgICk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRXhlY3V0ZSB0 aGUgc3BlY2lmaWVkIFRSQi4NCj4gKw0KPiArICBAcGFyYW1baW5dIFByaXZhdGUgICAgICAgIEEg cG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1BSSVZBVEVfREFUQSBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luXSBUcmIgICAgICAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1RSQiBp bnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBUUkIgaXMg c2VudCB0byBob3N0IGNvbnRyb2xsZXIgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgIFNvbWUgZXJyb3MgaGFwcGVuIHdoZW4gc2VuZGluZyB0aGlzIHJlcXVlc3Qg dG8gdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBjb250cm9sbGVyLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R3TW1jRXhlY1RyYiAoDQo+ICsgIElOIERX X01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgICpQcml2YXRlLA0KPiArICBJTiBEV19NTUNf SENfVFJCICAgICAgICAgICAgICAgICAgICAqVHJiDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Q7DQo+ICsNCj4gKyAgU2xv dCA9IFRyYi0+U2xvdDsNCj4gKyAgaWYgKFByaXZhdGUtPlNsb3RbU2xvdF0uQ2FyZFR5cGUgPT0g RW1tY0NhcmRUeXBlKSB7DQo+ICsgICAgU3RhdHVzID0gRHdFbW1jRXhlY1RyYiAoUHJpdmF0ZSwg VHJiKTsNCj4gKyAgfSBlbHNlIGlmIChQcml2YXRlLT5TbG90W1Nsb3RdLkNhcmRUeXBlID09IFNk Q2FyZFR5cGUpIHsNCj4gKyAgICBTdGF0dXMgPSBEd1NkRXhlY1RyYiAoUHJpdmF0ZSwgVHJiKTsN Cj4gKyAgfSBlbHNlIHsNCj4gKyAgICBBU1NFUlQgKDApOw0KPiArICB9DQo+ICsgIHJldHVybiBT dGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayB0aGUgVFJCIGV4ZWN1dGlvbiBy ZXN1bHQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQcml2YXRlICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIERXX01NQ19IQ19QUklWQVRFX0RBVEEgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gVHJi ICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIERXX01NQ19IQ19UUkIgaW5zdGFuY2UuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgVFJCIGlzIGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICBUaGUgVFJCIGlzIG5v dCBjb21wbGV0ZWQgZm9yIGV4ZWN1dGlvbi4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg ICBTb21lIGVycm9zIGhhcHBlbiB3aGVuIGV4ZWN1dGluZyB0aGlzIHJlcXVlc3QuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHdNbWNDaGVja1RyYlJlc3VsdCAoDQo+ICsgIElOIERX X01NQ19IQ19QUklWQVRFX0RBVEEgICAgICAgICAgICpQcml2YXRlLA0KPiArICBJTiBEV19NTUNf SENfVFJCICAgICAgICAgICAgICAgICAgICAqVHJiDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NE X01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgKlBhY2tldDsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSWRzdHM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERldkJhc2U7DQo+ICsNCj4gKyAgRGV2QmFzZSA9IFByaXZhdGUtPkRl dkJhc2U7DQo+ICsgIFBhY2tldCAgPSBUcmItPlBhY2tldDsNCj4gKyAgaWYgKFRyYi0+VXNlRmlm byA9PSBUUlVFKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsgIGlm IChQYWNrZXQtPkluVHJhbnNmZXJMZW5ndGgpIHsNCj4gKyAgICBkbyB7DQo+ICsgICAgICBJZHN0 cyA9IE1taW9SZWFkMzIgKERldkJhc2UgKyBEV19NTUNfSURTVFMpOw0KPiArICAgIH0gd2hpbGUg KChJZHN0cyAmIEJJVDEpID09IDApOw0KPiArICB9IGVsc2UgaWYgKFBhY2tldC0+T3V0VHJhbnNm ZXJMZW5ndGgpIHsNCj4gKyAgICBkbyB7DQo+ICsgICAgICBJZHN0cyA9IE1taW9SZWFkMzIgKERl dkJhc2UgKyBEV19NTUNfSURTVFMpOw0KPiArICAgIH0gd2hpbGUgKChJZHN0cyAmIEJJVDApID09 IDApOw0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0K PiArICBJZHN0cyA9IH4wOw0KPiArICBNbWlvV3JpdGUzMiAoRGV2QmFzZSArIERXX01NQ19JRFNU UywgSWRzdHMpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFdhaXQgZm9yIHRoZSBUUkIgZXhlY3V0aW9uIHJlc3VsdC4NCj4gKw0KPiArICBA cGFyYW1baW5dIFByaXZhdGUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1BSSVZB VEVfREFUQSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBUcmIgICAgICAgICAgICBUaGUgcG9p bnRlciB0byB0aGUgRFdfTU1DX0hDX1RSQiBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgIFRoZSBUUkIgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgIFNvbWUgZXJyb3MgaGFwcGVuIHdoZW4gZXhlY3V0aW5n IHRoaXMgcmVxdWVzdC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEd01tY1dhaXRU cmJSZXN1bHQgKA0KPiArICBJTiBEV19NTUNfSENfUFJJVkFURV9EQVRBICAgICAgICAgICAqUHJp dmF0ZSwNCj4gKyAgSU4gRFdfTU1DX0hDX1RSQiAgICAgICAgICAgICAgICAgICAgKlRyYg0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgKlBhY2tldDsNCj4g KyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dDsNCj4gKyAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5maW5pdGVXYWl0Ow0KPiArDQo+ICsg IFBhY2tldCA9IFRyYi0+UGFja2V0Ow0KPiArICAvLw0KPiArICAvLyBXYWl0IENvbW1hbmQgQ29t cGxldGUgSW50ZXJydXB0IFN0YXR1cyBiaXQgaW4gTm9ybWFsIEludGVycnVwdCBTdGF0dXMNCj4g KyAgLy8gUmVnaXN0ZXINCj4gKyAgLy8NCj4gKyAgVGltZW91dCA9IFBhY2tldC0+VGltZW91dDsN Cj4gKyAgaWYgKFRpbWVvdXQgPT0gMCkgew0KPiArICAgIEluZmluaXRlV2FpdCA9IFRSVUU7DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgSW5maW5pdGVXYWl0ID0gRkFMU0U7DQo+ICsgIH0NCj4gKw0K PiArICB3aGlsZSAoSW5maW5pdGVXYWl0IHx8IChUaW1lb3V0ID4gMCkpIHsNCj4gKyAgICAvLw0K PiArICAgIC8vIENoZWNrIFRyYiBleGVjdXRpb24gcmVzdWx0IGJ5IHJlYWRpbmcgTm9ybWFsIElu dGVycnVwdCBTdGF0dXMgcmVnaXN0ZXIuDQo+ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBEd01t Y0NoZWNrVHJiUmVzdWx0IChQcml2YXRlLCBUcmIpOw0KPiArICAgIGlmIChTdGF0dXMgIT0gRUZJ X05PVF9SRUFEWSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsgICAg Ly8NCj4gKyAgICAvLyBTdGFsbCBmb3IgMSBtaWNyb3NlY29uZC4NCj4gKyAgICAvLw0KPiArICAg IGdCUy0+U3RhbGwgKDEpOw0KPiArDQo+ICsgICAgVGltZW91dC0tOw0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIEVGSV9USU1FT1VUOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvRW1iZWRkZWRQa2cv RHJpdmVycy9Ed01tY0hjRHhlL0VtbWNEZXZpY2UuYyBiL0VtYmVkZGVkUGtnL0RyaXZlcnMvRHdN bWNIY0R4ZS9FbW1jRGV2aWNlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMDAwLi5iN2E4Njg4YzRkMmUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9FbWJlZGRl ZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvRW1tY0RldmljZS5jDQo+IEBAIC0wLDAgKzEsMTA0MiBA QA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBwcm92aWRlcyBzb21lIGhlbHBlciBmdW5j dGlvbnMgd2hpY2ggYXJlIHNwZWNpZmljIGZvciBFTU1DIGRldmljZS4NCj4gKw0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMTUgLSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAxOCwgTGluYXJvLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gKw0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUNCj4gKyAgdW5kZXIgdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZSB3aGljaCBhY2NvbXBhbmll cyB0aGlzDQo+ICsgIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2Ug bWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2Qt bGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBU SEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5U SUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1Q TElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0Vt bWMuaD4NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290 U2VydmljZXNUYWJsZUxpYi5oPg0KPiArDQo+ICsjaW5jbHVkZSAiRHdNbWNIY0R4ZS5oIg0KPiAr DQo+ICsjZGVmaW5lIEVNTUNfR0VUX1NUQVRFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+ IDkpICYgMHhmKQ0KPiArI2RlZmluZSBFTU1DX1NUQVRFX0lETEUgICAgICAgICAgICAgICAgICAg ICAwDQo+ICsjZGVmaW5lIEVNTUNfU1RBVEVfUkVBRFkgICAgICAgICAgICAgICAgICAgIDENCj4g KyNkZWZpbmUgRU1NQ19TVEFURV9JREVOVCAgICAgICAgICAgICAgICAgICAgMg0KPiArI2RlZmlu ZSBFTU1DX1NUQVRFX1NUQlkgICAgICAgICAgICAgICAgICAgICAzDQo+ICsjZGVmaW5lIEVNTUNf U1RBVEVfVFJBTiAgICAgICAgICAgICAgICAgICAgIDQNCj4gKyNkZWZpbmUgRU1NQ19TVEFURV9E QVRBICAgICAgICAgICAgICAgICAgICAgNQ0KPiArI2RlZmluZSBFTU1DX1NUQVRFX1JDViAgICAg ICAgICAgICAgICAgICAgICA2DQo+ICsjZGVmaW5lIEVNTUNfU1RBVEVfUFJHICAgICAgICAgICAg ICAgICAgICAgIDcNCj4gKyNkZWZpbmUgRU1NQ19TVEFURV9ESVMgICAgICAgICAgICAgICAgICAg ICAgOA0KPiArI2RlZmluZSBFTU1DX1NUQVRFX0JUU1QgICAgICAgICAgICAgICAgICAgICA5DQo+ ICsjZGVmaW5lIEVNTUNfU1RBVEVfU0xQICAgICAgICAgICAgICAgICAgICAgIDEwDQo+ICsNCj4g KyNkZWZpbmUgRU1NQ19DTUQxX0NBUEFDSVRZX0xFU1NfVEhBTl8yR0IgICAgMHgwMEZGODA4MCAv LyBDYXBhY2l0eSA8PSAyR0IsIGJ5dGUgYWRkcmVzc2luZyB1c2VkDQo+ICsjZGVmaW5lIEVNTUNf Q01EMV9DQVBBQ0lUWV9HUkVBVEVSX1RIQU5fMkdCIDB4NDBGRjgwODAgLy8gQ2FwYWNpdHkgPiAy R0IsIDUxMi1ieXRlIHNlY3RvciBhZGRyZXNzaW5nIHVzZWQNCj4gKw0KPiArLyoqDQo+ICsgIFNl bmQgY29tbWFuZCBHT19JRExFX1NUQVRFIChDTUQwIHdpdGggYXJndW1lbnQgb2YgMHgwMDAwMDAw MCkgdG8gdGhlIGRldmljZSB0bw0KPiArICBtYWtlIGl0IGdvIHRvIElkbGUgU3RhdGUuDQo+ICsN Cj4gKyAgUmVmZXIgdG8gRU1NQyBFbGVjdHJpY2FsIFN0YW5kYXJkIFNwZWMgNS4xIFNlY3Rpb24g Ni40IGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGFzc1RocnUgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFNsb3QgICAgICAg ICAgIFRoZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICBUaGUgRU1NQyBkZXZpY2UgaXMgcmVzZXQgY29ycmVjdGx5Lg0KPiArICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBkZXZpY2UgcmVzZXQgZmFpbHMuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRW1tY1Jlc2V0ICgNCj4gKyAgSU4gRUZJX1NEX01NQ19Q QVNTX1RIUlVfUFJPVE9DT0wgICAgICAqUGFzc1RocnUNCj4gKyAgKQ0KPiArew0KPiArICBFRklf U0RfTU1DX0NPTU1BTkRfQkxPQ0sgICAgICAgICAgICAgIFNkTW1jQ21kQmxrOw0KPiArICBFRklf U0RfTU1DX1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNkTW1jU3RhdHVzQmxrOw0KPiArICBF RklfU0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgIFBhY2tldDsNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgWmVyb01l bSAoJlNkTW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZT ZE1tY1N0YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0JsaykpOw0KPiArICBaZXJvTWVtICgm UGFja2V0LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBhY2tldC5TZE1tY0NtZEJsayAg ICA9ICZTZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxrID0gJlNkTW1jU3Rh dHVzQmxrOw0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBEV19NTUNfSENfR0VORVJJQ19U SU1FT1VUOw0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IEVNTUNfR09fSURM RV9TVEFURTsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlw ZUJjOw0KPiArICBTZE1tY0NtZEJsay5SZXNwb25zZVR5cGUgPSAwOw0KPiArICBTZE1tY0NtZEJs ay5Db21tYW5kQXJndW1lbnQgPSAwOw0KPiArDQo+ICsgIGdCUy0+U3RhbGwgKDEwMDApOw0KPiAr DQo+ICsgIFN0YXR1cyA9IFBhc3NUaHJ1LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQs IE5VTEwpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBTZW5kIGNvbW1hbmQgU0VORF9PUF9DT05EIHRvIHRoZSBFTU1DIGRldmljZSB0byBnZXQgdGhl IGRhdGEgb2YgdGhlIE9DUg0KPiArICByZWdpc3Rlci4NCj4gKw0KPiArICBSZWZlciB0byBFTU1D IEVsZWN0cmljYWwgU3RhbmRhcmQgU3BlYyA1LjEgU2VjdGlvbiA2LjQgZm9yIGRldGFpbHMuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIFBhc3NUaHJ1ICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9T RF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBBcmd1bWVudCAgT24gaW5wdXQsIHRoZSBh cmd1bWVudCBvZiBTRU5EX09QX0NPTkQgaXMgdG8gc2VuZA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvIHRoZSBkZXZpY2UuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg T24gb3V0cHV0LCB0aGUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIE9DUg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VtbWNHZXRPY3IgKA0KPiArICBJTiAgICAgRUZJX1NEX01NQ19QQVNTX1RI UlVfUFJPVE9DT0wgICpQYXNzVGhydSwNCj4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAqQXJndW1lbnQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU0RfTU1DX0NPTU1B TkRfQkxPQ0sgICAgICAgICAgICAgIFNkTW1jQ21kQmxrOw0KPiArICBFRklfU0RfTU1DX1NUQVRV U19CTE9DSyAgICAgICAgICAgICAgIFNkTW1jU3RhdHVzQmxrOw0KPiArICBFRklfU0RfTU1DX1BB U1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgIFBhY2tldDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlNkTW1jQ21k QmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZTZE1tY1N0YXR1c0Js aywgc2l6ZW9mIChTZE1tY1N0YXR1c0JsaykpOw0KPiArICBaZXJvTWVtICgmUGFja2V0LCBzaXpl b2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBhY2tldC5TZE1tY0NtZEJsayAgICA9ICZTZE1tY0Nt ZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxrID0gJlNkTW1jU3RhdHVzQmxrOw0KPiAr ICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBEV19NTUNfSENfR0VORVJJQ19USU1FT1VUOw0KPiAr DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IEVNTUNfU0VORF9PUF9DT05EOw0KPiAr ICBTZE1tY0NtZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0NvbW1hbmRUeXBlQmNyOw0KPiArICBT ZE1tY0NtZEJsay5SZXNwb25zZVR5cGUgPSBTZE1tY1Jlc3BvbnNlVHlwZVIzOw0KPiArICBTZE1t Y0NtZEJsay5Db21tYW5kQXJndW1lbnQgPSAqQXJndW1lbnQ7DQo+ICsNCj4gKyAgU3RhdHVzID0g UGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhydSwgMCwgJlBhY2tldCwgTlVMTCk7DQo+ICsgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBGb3IgZGV0YWls cywgcmVmZXIgdG8gU0QgSG9zdCBDb250cm9sbGVyIFNpbXBsaWZpZWQgU3BlYyAzLjAgVGFibGUg Mi0xMi4NCj4gKyAgICAvLw0KPiArICAgICpBcmd1bWVudCA9IFNkTW1jU3RhdHVzQmxrLlJlc3Aw Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIEJyb2FkY2FzdCBjb21tYW5kIEFMTF9TRU5EX0NJRCB0byB0aGUgYnVzIHRvIGFzayBhbGwg dGhlIEVNTUMgZGV2aWNlcyB0byBzZW5kDQo+ICsgIHRoZSBkYXRhIG9mIHRoZWlyIENJRCByZWdp c3RlcnMuDQo+ICsNCj4gKyAgUmVmZXIgdG8gRU1NQyBFbGVjdHJpY2FsIFN0YW5kYXJkIFNwZWMg NS4xIFNlY3Rpb24gNi40IGZvciBkZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGFzc1Ro cnUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4g KyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VtbWNHZXRBbGxDaWQgKA0KPiArICBJTiBFRklfU0Rf TU1DX1BBU1NfVEhSVV9QUk9UT0NPTCAgICAgICpQYXNzVGhydQ0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TRF9NTUNfQ09NTUFORF9CTE9DSyAgICAgICAgICAgICAgU2RNbWNDbWRCbGs7DQo+ICsg IEVGSV9TRF9NTUNfU1RBVFVTX0JMT0NLICAgICAgICAgICAgICAgU2RNbWNTdGF0dXNCbGs7DQo+ ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICAgUGFja2V0Ow0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBa ZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVvZiAoU2RNbWNDbWRCbGspKTsNCj4gKyAgWmVyb01l bSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2YgKFNkTW1jU3RhdHVzQmxrKSk7DQo+ICsgIFplcm9N ZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0KSk7DQo+ICsNCj4gKyAgUGFja2V0LlNkTW1jQ21k QmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiArICBQYWNrZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RN bWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5UaW1lb3V0ICAgICAgICA9IERXX01NQ19IQ19HRU5F UklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEluZGV4ID0gRU1NQ19B TExfU0VORF9DSUQ7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRUeXBlICA9IFNkTW1jQ29tbWFu ZFR5cGVCY3I7DQo+ICsgIFNkTW1jQ21kQmxrLlJlc3BvbnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VU eXBlUjI7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRBcmd1bWVudCA9IDA7DQo+ICsNCj4gKyAg U3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhydSwgMCwgJlBhY2tldCwgTlVMTCk7 DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNlbmQg Y29tbWFuZCBTRVRfUkVMQVRJVkVfQUREUiB0byB0aGUgRU1NQyBkZXZpY2UgdG8gYXNzaWduIGEg UmVsYXRpdmUgZGV2aWNlDQo+ICsgIEFkZHJlc3MgKFJDQSkuDQo+ICsNCj4gKyAgUmVmZXIgdG8g RU1NQyBFbGVjdHJpY2FsIFN0YW5kYXJkIFNwZWMgNS4xIFNlY3Rpb24gNi40IGZvciBkZXRhaWxz Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGFzc1RocnUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBF RklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFJjYSAgICAgICAgICAgIFRoZSByZWxhdGl2 ZSBkZXZpY2UgYWRkcmVzcyB0byBiZSBhc3NpZ25lZC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2 YWwgT3RoZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFbW1jU2V0UmNhICgNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RI UlVfUFJPVE9DT0wgICAgICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmNhDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NEX01NQ19DT01NQU5E X0JMT0NLICAgICAgICAgICAgICBTZE1tY0NtZEJsazsNCj4gKyAgRUZJX1NEX01NQ19TVEFUVVNf QkxPQ0sgICAgICAgICAgICAgICBTZE1tY1N0YXR1c0JsazsNCj4gKyAgRUZJX1NEX01NQ19QQVNT X1RIUlVfQ09NTUFORF9QQUNLRVQgICBQYWNrZXQ7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIFplcm9NZW0gKCZTZE1tY0NtZEJs aywgc2l6ZW9mIChTZE1tY0NtZEJsaykpOw0KPiArICBaZXJvTWVtICgmU2RNbWNTdGF0dXNCbGss IHNpemVvZiAoU2RNbWNTdGF0dXNCbGspKTsNCj4gKyAgWmVyb01lbSAoJlBhY2tldCwgc2l6ZW9m IChQYWNrZXQpKTsNCj4gKw0KPiArICBQYWNrZXQuU2RNbWNDbWRCbGsgICAgPSAmU2RNbWNDbWRC bGs7DQo+ICsgIFBhY2tldC5TZE1tY1N0YXR1c0JsayA9ICZTZE1tY1N0YXR1c0JsazsNCj4gKyAg UGFja2V0LlRpbWVvdXQgICAgICAgID0gRFdfTU1DX0hDX0dFTkVSSUNfVElNRU9VVDsNCj4gKw0K PiArICBTZE1tY0NtZEJsay5Db21tYW5kSW5kZXggPSBFTU1DX1NFVF9SRUxBVElWRV9BRERSOw0K PiArICBTZE1tY0NtZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0NvbW1hbmRUeXBlQWM7DQo+ICsg IFNkTW1jQ21kQmxrLlJlc3BvbnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VUeXBlUjE7DQo+ICsgIFNk TW1jQ21kQmxrLkNvbW1hbmRBcmd1bWVudCA9IChVSU5UMzIpUmNhIDw8IDE2Ow0KPiArDQo+ICsg IFN0YXR1cyA9IFBhc3NUaHJ1LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5VTEwp Ow0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZW5k IGNvbW1hbmQgU0VORF9DU0QgdG8gdGhlIEVNTUMgZGV2aWNlIHRvIGdldCB0aGUgZGF0YSBvZiB0 aGUgQ1NEIHJlZ2lzdGVyLg0KPiArDQo+ICsgIFJlZmVyIHRvIEVNTUMgRWxlY3RyaWNhbCBTdGFu ZGFyZCBTcGVjIDUuMSBTZWN0aW9uIDYuMTAuNCBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFy YW1baW5dICBQYXNzVGhydSAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RI UlVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4g KyAgQHBhcmFtW2luXSAgUmNhICAgICAgICAgICBUaGUgcmVsYXRpdmUgZGV2aWNlIGFkZHJlc3Mg b2Ygc2VsZWN0ZWQgZGV2aWNlLg0KPiArICBAcGFyYW1bb3V0XSBDc2QgICAgICAgICAgIFRoZSBi dWZmZXIgdG8gc3RvcmUgdGhlIGNvbnRlbnQgb2YgdGhlIENTRCByZWdpc3Rlci4NCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoZSBjYWxsZXIgc2hvdWxkIGlnbm9yZSB0aGUg bG93ZXN0IGJ5dGUgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJ1ZmZl ciBhcyB0aGUgY29udGVudCBvZiB0aGlzIGJ5dGUgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtZWFuaW5nbGVzcyBldmVuIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgY29y cmVjdGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFp bHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRW1tY0dldENzZCAoDQo+ICsgIElO ICAgICBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTCAgKlBhc3NUaHJ1LA0KPiArICBJTiAg ICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJjYSwNCj4gKyAgICAgT1VUIEVNTUNf Q1NEICAgICAgICAgICAgICAgICAgICAgICAqQ3NkDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NE X01NQ19DT01NQU5EX0JMT0NLICAgICAgICAgICAgICBTZE1tY0NtZEJsazsNCj4gKyAgRUZJX1NE X01NQ19TVEFUVVNfQkxPQ0sgICAgICAgICAgICAgICBTZE1tY1N0YXR1c0JsazsNCj4gKyAgRUZJ X1NEX01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgICBQYWNrZXQ7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIFplcm9NZW0g KCZTZE1tY0NtZEJsaywgc2l6ZW9mIChTZE1tY0NtZEJsaykpOw0KPiArICBaZXJvTWVtICgmU2RN bWNTdGF0dXNCbGssIHNpemVvZiAoU2RNbWNTdGF0dXNCbGspKTsNCj4gKyAgWmVyb01lbSAoJlBh Y2tldCwgc2l6ZW9mIChQYWNrZXQpKTsNCj4gKw0KPiArICBQYWNrZXQuU2RNbWNDbWRCbGsgICAg PSAmU2RNbWNDbWRCbGs7DQo+ICsgIFBhY2tldC5TZE1tY1N0YXR1c0JsayA9ICZTZE1tY1N0YXR1 c0JsazsNCj4gKyAgUGFja2V0LlRpbWVvdXQgICAgICAgID0gRFdfTU1DX0hDX0dFTkVSSUNfVElN RU9VVDsNCj4gKw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kSW5kZXggPSBFTU1DX1NFTkRfQ1NE Ow0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0NvbW1hbmRUeXBlQWM7DQo+ ICsgIFNkTW1jQ21kQmxrLlJlc3BvbnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VUeXBlUjI7DQo+ICsg IFNkTW1jQ21kQmxrLkNvbW1hbmRBcmd1bWVudCA9IChVSU5UMzIpUmNhIDw8IDE2Ow0KPiArDQo+ ICsgIFN0YXR1cyA9IFBhc3NUaHJ1LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5V TEwpOw0KPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIC8vDQo+ICsgICAg Ly8gQ29weSAxMjhiaXQgZGF0YSBmb3IgQ1NEIHN0cnVjdHVyZS4NCj4gKyAgICAvLw0KPiArICAg IENvcHlNZW0gKChWT0lEICopQ3NkICsgMSwgJlNkTW1jU3RhdHVzQmxrLlJlc3AwLCBzaXplb2Yg KEVNTUNfQ1NEKSAtIDEpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFNlbmQgY29tbWFuZCBTRUxFQ1RfREVTRUxFQ1RfQ0FSRCB0byB0 aGUgRU1NQyBkZXZpY2UgdG8gc2VsZWN0L2Rlc2VsZWN0IGl0Lg0KPiArDQo+ICsgIFJlZmVyIHRv IEVNTUMgRWxlY3RyaWNhbCBTdGFuZGFyZCBTcGVjIDUuMSBTZWN0aW9uIDYuMTAuNCBmb3IgZGV0 YWlscy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBQYXNzVGhydSAgICAgIEEgcG9pbnRlciB0byB0 aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgUmNhICAgICAgICAgICBUaGUgcmVs YXRpdmUgZGV2aWNlIGFkZHJlc3Mgb2Ygc2VsZWN0ZWQgZGV2aWNlLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4g KyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VtbWNTZWxlY3QgKA0KPiArICBJTiBFRklfU0RfTU1D X1BBU1NfVEhSVV9QUk9UT0NPTCAgICAgICpQYXNzVGhydSwNCj4gKyAgSU4gVUlOVDE2ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSY2ENCj4gKyAgKQ0KPiArew0KPiArICBFRklfU0RfTU1D X0NPTU1BTkRfQkxPQ0sgICAgICAgICAgICAgIFNkTW1jQ21kQmxrOw0KPiArICBFRklfU0RfTU1D X1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNkTW1jU3RhdHVzQmxrOw0KPiArICBFRklfU0Rf TU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgIFBhY2tldDsNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlNk TW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZTZE1tY1N0 YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0JsaykpOw0KPiArICBaZXJvTWVtICgmUGFja2V0 LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBhY2tldC5TZE1tY0NtZEJsayAgICA9ICZT ZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxrID0gJlNkTW1jU3RhdHVzQmxr Ow0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBEV19NTUNfSENfR0VORVJJQ19USU1FT1VU Ow0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IEVNTUNfU0VMRUNUX0RFU0VM RUNUX0NBUkQ7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRUeXBlICA9IFNkTW1jQ29tbWFuZFR5 cGVBYzsNCj4gKyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0gU2RNbWNSZXNwb25zZVR5cGVS MTsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEFyZ3VtZW50ID0gKFVJTlQzMilSY2EgPDwgMTY7 DQo+ICsNCj4gKyAgU3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhydSwgMCwgJlBh Y2tldCwgTlVMTCk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFNlbmQgY29tbWFuZCBTRU5EX0VYVF9DU0QgdG8gdGhlIEVNTUMgZGV2aWNlIHRvIGdl dCB0aGUgZGF0YSBvZiB0aGUgRVhUX0NTRA0KPiArICByZWdpc3Rlci4NCj4gKw0KPiArICBSZWZl ciB0byBFTU1DIEVsZWN0cmljYWwgU3RhbmRhcmQgU3BlYyA1LjEgU2VjdGlvbiA2LjEwLjQgZm9y IGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgUGFzc1RocnUgICAgICBBIHBvaW50ZXIg dG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIEV4dENzZCAgICAgICAgVGhl IGJ1ZmZlciB0byBzdG9yZSB0aGUgY29udGVudCBvZiB0aGUgRVhUX0NTRA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VtbWNHZXRFeHRDc2QgKA0KPiArICBJTiAgICAgRUZJX1NEX01NQ19QQVNT X1RIUlVfUFJPVE9DT0wgICpQYXNzVGhydSwNCj4gKyAgICAgT1VUIEVNTUNfRVhUX0NTRCAgICAg ICAgICAgICAgICAgICAqRXh0Q3NkDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NEX01NQ19DT01N QU5EX0JMT0NLICAgICAgICAgICAgICBTZE1tY0NtZEJsazsNCj4gKyAgRUZJX1NEX01NQ19TVEFU VVNfQkxPQ0sgICAgICAgICAgICAgICBTZE1tY1N0YXR1c0JsazsNCj4gKyAgRUZJX1NEX01NQ19Q QVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgICBQYWNrZXQ7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIFplcm9NZW0gKCZTZE1tY0Nt ZEJsaywgc2l6ZW9mIChTZE1tY0NtZEJsaykpOw0KPiArICBaZXJvTWVtICgmU2RNbWNTdGF0dXNC bGssIHNpemVvZiAoU2RNbWNTdGF0dXNCbGspKTsNCj4gKyAgWmVyb01lbSAoJlBhY2tldCwgc2l6 ZW9mIChQYWNrZXQpKTsNCj4gKw0KPiArICBQYWNrZXQuU2RNbWNDbWRCbGsgICAgPSAmU2RNbWND bWRCbGs7DQo+ICsgIFBhY2tldC5TZE1tY1N0YXR1c0JsayA9ICZTZE1tY1N0YXR1c0JsazsNCj4g KyAgUGFja2V0LlRpbWVvdXQgICAgICAgID0gRFdfTU1DX0hDX0dFTkVSSUNfVElNRU9VVDsNCj4g Kw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kSW5kZXggPSBFTU1DX1NFTkRfRVhUX0NTRDsNCj4g KyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlwZUFkdGM7DQo+ICsg IFNkTW1jQ21kQmxrLlJlc3BvbnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VUeXBlUjE7DQo+ICsgIFNk TW1jQ21kQmxrLkNvbW1hbmRBcmd1bWVudCA9IDB4MDAwMDAwMDA7DQo+ICsNCj4gKyAgUGFja2V0 LkluRGF0YUJ1ZmZlciAgICAgPSBFeHRDc2Q7DQo+ICsgIFBhY2tldC5JblRyYW5zZmVyTGVuZ3Ro ID0gc2l6ZW9mIChFTU1DX0VYVF9DU0QpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFBhc3NUaHJ1LT5Q YXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5VTEwpOw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2VuZCBjb21tYW5kIFNXSVRDSCB0byB0aGUgRU1N QyBkZXZpY2UgdG8gc3dpdGNoIHRoZSBtb2RlIG9mIG9wZXJhdGlvbiBvZiB0aGUNCj4gKyAgc2Vs ZWN0ZWQgRGV2aWNlIG9yIG1vZGlmaWVzIHRoZSBFWFRfQ1NEIHJlZ2lzdGVycy4NCj4gKw0KPiAr ICBSZWZlciB0byBFTU1DIEVsZWN0cmljYWwgU3RhbmRhcmQgU3BlYyA1LjEgU2VjdGlvbiA2LjEw LjQgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgUGFzc1RocnUgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIEFjY2VzcyAgICAg ICAgVGhlIGFjY2VzcyBtb2RlIG9mIFNXVElDSCBjb21tYW5kLg0KPiArICBAcGFyYW1baW5dICBJ bmRleCAgICAgICAgIFRoZSBvZmZzZXQgb2YgdGhlIGZpZWxkIHRvIGJlIGFjY2Vzcy4NCj4gKyAg QHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgdmFsdWUgdG8gYmUgc2V0IHRvIHRoZSBzcGVj aWZpZWQgZmllbGQgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRfQ1NEIHJl Z2lzdGVyLg0KPiArICBAcGFyYW1baW5dICBDbWRTZXQgICAgICAgIFRoZSB2YWx1ZSBvZiBDbWRT ZXQgZmllbGQgb2YgRVhUX0NTRCByZWdpc3Rlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwg T3RoZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFbW1jU3dpdGNoICgNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVf UFJPVE9DT0wgICAgICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQWNjZXNzLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4LA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZhbHVlLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENtZFNl dA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TRF9NTUNfQ09NTUFORF9CTE9DSyAgICAgICAgICAg ICAgU2RNbWNDbWRCbGs7DQo+ICsgIEVGSV9TRF9NTUNfU1RBVFVTX0JMT0NLICAgICAgICAgICAg ICAgU2RNbWNTdGF0dXNCbGs7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFD S0VUICAgUGFja2V0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCj4gKw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVvZiAoU2RNbWND bWRCbGspKTsNCj4gKyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2YgKFNkTW1jU3Rh dHVzQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0KSk7DQo+ICsN Cj4gKyAgUGFja2V0LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiArICBQYWNrZXQu U2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5UaW1lb3V0ICAg ICAgICA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RNbWNDbWRCbGsu Q29tbWFuZEluZGV4ID0gRU1NQ19TV0lUQ0g7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRUeXBl ICA9IFNkTW1jQ29tbWFuZFR5cGVBYzsNCj4gKyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0g U2RNbWNSZXNwb25zZVR5cGVSMWI7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRBcmd1bWVudCA9 IChBY2Nlc3MgPDwgMjQpIHwgKEluZGV4IDw8IDE2KSB8IFwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFZhbHVlIDw8IDgpIHwgQ21kU2V0Ow0KPiArDQo+ICsgIFN0YXR1cyA9 IFBhc3NUaHJ1LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5VTEwpOw0KPiArDQo+ ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZW5kIGNvbW1hbmQg U0VORF9TVEFUVVMgdG8gdGhlIGFkZHJlc3NlZCBFTU1DIGRldmljZSB0byBnZXQgaXRzIHN0YXR1 cw0KPiArICByZWdpc3Rlci4NCj4gKw0KPiArICBSZWZlciB0byBFTU1DIEVsZWN0cmljYWwgU3Rh bmRhcmQgU3BlYyA1LjEgU2VjdGlvbiA2LjEwLjQgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgUGFzc1RocnUgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19U SFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ ICsgIEBwYXJhbVtpbl0gIFJjYSAgICAgICAgICAgVGhlIHJlbGF0aXZlIGRldmljZSBhZGRyZXNz IG9mIGFkZHJlc3NlZCBkZXZpY2UuDQo+ICsgIEBwYXJhbVtvdXRdIERldlN0YXR1cyAgICAgVGhl IHJldHVybmVkIGRldmljZSBzdGF0dXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgY29ycmVjdGx5Lg0KPiArICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRW1tY1NlbmRTdGF0dXMgKA0KPiArICBJTiAgICAgRUZJX1NEX01NQ19QQVNTX1RI UlVfUFJPVE9DT0wgICpQYXNzVGhydSwNCj4gKyAgSU4gICAgIFVJTlQxNiAgICAgICAgICAgICAg ICAgICAgICAgICBSY2EsDQo+ICsgICAgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgKkRldlN0YXR1cw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TRF9NTUNfQ09NTUFORF9CTE9D SyAgICAgICAgICAgICAgU2RNbWNDbWRCbGs7DQo+ICsgIEVGSV9TRF9NTUNfU1RBVFVTX0JMT0NL ICAgICAgICAgICAgICAgU2RNbWNTdGF0dXNCbGs7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJV X0NPTU1BTkRfUEFDS0VUICAgUGFja2V0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNp emVvZiAoU2RNbWNDbWRCbGspKTsNCj4gKyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXpl b2YgKFNkTW1jU3RhdHVzQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFj a2V0KSk7DQo+ICsNCj4gKyAgUGFja2V0LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0K PiArICBQYWNrZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tl dC5UaW1lb3V0ICAgICAgICA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAg U2RNbWNDbWRCbGsuQ29tbWFuZEluZGV4ID0gRU1NQ19TRU5EX1NUQVRVUzsNCj4gKyAgU2RNbWND bWRCbGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlwZUFjOw0KPiArICBTZE1tY0NtZEJs ay5SZXNwb25zZVR5cGUgPSBTZE1tY1Jlc3BvbnNlVHlwZVIxOw0KPiArICBTZE1tY0NtZEJsay5D b21tYW5kQXJndW1lbnQgPSAoVUlOVDMyKVJjYSA8PCAxNjsNCj4gKw0KPiArICBTdGF0dXMgPSBQ YXNzVGhydS0+UGFzc1RocnUgKFBhc3NUaHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsNCj4gKyAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAqRGV2U3RhdHVzID0gU2RNbWNTdGF0dXNC bGsuUmVzcDA7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgU2VuZCBjb21tYW5kIFNFTkRfVFVOSU5HX0JMT0NLIHRvIHRoZSBFTU1DIGRl dmljZSBmb3IgSFMyMDAgb3B0aW1hbCBzYW1wbGluZw0KPiArICBwb2ludCBkZXRlY3Rpb24uDQo+ ICsNCj4gKyAgSXQgbWF5IGJlIHNlbnQgdXAgdG8gNDAgdGltZXMgdW50aWwgdGhlIGhvc3QgZmlu aXNoZXMgdGhlIHR1bmluZyBwcm9jZWR1cmUuDQo+ICsNCj4gKyAgUmVmZXIgdG8gRU1NQyBFbGVj dHJpY2FsIFN0YW5kYXJkIFNwZWMgNS4xIFNlY3Rpb24gNi42LjggZm9yIGRldGFpbHMuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSBQYXNzVGhydSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9N TUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gQnVzV2lkdGggICAgICAgVGhlIGJ1cyB3aWR0aCB0byB3 b3JrLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIG9wZXJhdGlvbiBp cyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgb3Bl cmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VtbWNTZW5kVHVu aW5nQmxrICgNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAgICAqUGFz c1RocnUsDQo+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzV2lk dGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU0RfTU1DX0NPTU1BTkRfQkxPQ0sgICAgICAgICAg ICAgIFNkTW1jQ21kQmxrOw0KPiArICBFRklfU0RfTU1DX1NUQVRVU19CTE9DSyAgICAgICAgICAg ICAgIFNkTW1jU3RhdHVzQmxrOw0KPiArICBFRklfU0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BB Q0tFVCAgIFBhY2tldDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVu aW5nQmxvY2tbMTI4XTsNCj4gKw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVvZiAo U2RNbWNDbWRCbGspKTsNCj4gKyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2YgKFNk TW1jU3RhdHVzQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0KSk7 DQo+ICsNCj4gKyAgUGFja2V0LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiArICBQ YWNrZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5UaW1l b3V0ICAgICAgICA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RNbWND bWRCbGsuQ29tbWFuZEluZGV4ID0gRU1NQ19TRU5EX1RVTklOR19CTE9DSzsNCj4gKyAgU2RNbWND bWRCbGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlwZUFkdGM7DQo+ICsgIFNkTW1jQ21k QmxrLlJlc3BvbnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VUeXBlUjE7DQo+ICsgIFNkTW1jQ21kQmxr LkNvbW1hbmRBcmd1bWVudCA9IDA7DQo+ICsNCj4gKyAgUGFja2V0LkluRGF0YUJ1ZmZlciA9IFR1 bmluZ0Jsb2NrOw0KPiArICBpZiAoQnVzV2lkdGggPT0gOCkgew0KPiArICAgIFBhY2tldC5JblRy YW5zZmVyTGVuZ3RoID0gc2l6ZW9mIChUdW5pbmdCbG9jayk7DQo+ICsgIH0gZWxzZSB7DQo+ICsg ICAgUGFja2V0LkluVHJhbnNmZXJMZW5ndGggPSA2NDsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1 cyA9IFBhc3NUaHJ1LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5VTEwpOw0KPiAr DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUdW5uaW5nIHRo ZSBjbG9jayB0byBnZXQgSFMyMDAgb3B0aW1hbCBzYW1wbGluZyBwb2ludC4NCj4gKw0KPiArICBD b21tYW5kIFNFTkRfVFVOSU5HX0JMT0NLIG1heSBiZSBzZW50IHVwIHRvIDQwIHRpbWVzIHVudGls IHRoZSBob3N0IGZpbmlzaGVzDQo+ICsgIHRoZSB0dW5pbmcgcHJvY2VkdXJlLg0KPiArDQo+ICsg IFJlZmVyIHRvIEVNTUMgRWxlY3RyaWNhbCBTdGFuZGFyZCBTcGVjIDUuMSBTZWN0aW9uIDYuNi44 Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gRGV2SW8gICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBF RklfREVWSUNFX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFBhc3NUaHJ1 ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBC dXNXaWR0aCAgICAgICBUaGUgYnVzIHdpZHRoIHRvIHdvcmsuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgY29ycmVjdGx5Lg0KPiArICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRW1tY1R1bmluZ0Nsa0ZvckhzMjAwICgNCj4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZCYXNlLA0KPiArICBJTiBFRklfU0Rf TU1DX1BBU1NfVEhSVV9QUk9UT0NPTCAgICAgICpQYXNzVGhydSwNCj4gKyAgSU4gVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNXaWR0aA0KPiArICApDQo+ICt7DQo+ICsgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFN3aXRjaCB0aGUgYnVz IHdpZHRoIHRvIHNwZWNpZmllZCB3aWR0aC4NCj4gKw0KPiArICBSZWZlciB0byBFTU1DIEVsZWN0 cmljYWwgU3RhbmRhcmQgU3BlYyA1LjEgU2VjdGlvbiA2LjYuOS4NCj4gKw0KPiArICBAcGFyYW1b aW5dIERldklvICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9JT19QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBQYXNzVGhydSAgICAgICBBIHBvaW50ZXIgdG8g dGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gUmNhICAgICAgICAgICAgVGhlIHJl bGF0aXZlIGRldmljZSBhZGRyZXNzIHRvIGJlIGFzc2lnbmVkLg0KPiArICBAcGFyYW1baW5dIElz RGRyICAgICAgICAgIElmIFRSVUUsIHVzZSBkdWFsIGRhdGEgcmF0ZSBkYXRhIHNpbXBsaW5nIG1l dGhvZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UgdXNlIHNpbmds ZSBkYXRhIHJhdGUgZGF0YSBzaW1wbGluZyBtZXRob2QuDQo+ICsgIEBwYXJhbVtpbl0gQnVzV2lk dGggICAgICAgVGhlIGJ1cyB3aWR0aCB0byBiZSBzZXQsIGl0IGNvdWxkIGJlIDQgb3IgOC4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBj b3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBm YWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFbW1jU3dpdGNoQnVzV2lkdGgg KA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldkJhc2UsDQo+ ICsgIElOIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MICAgICAgKlBhc3NUaHJ1LA0KPiAr ICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJjYSwNCj4gKyAgSU4gQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc0RkciwNCj4gKyAgSU4gVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNXaWR0aA0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgIEFjY2Vz czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICBWYWx1ZTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICBDbWRTZXQ7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgRGV2U3RhdHVzOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdyaXRlIEJ5 dGUsIHRoZSBWYWx1ZSBmaWVsZCBpcyB3cml0dGVuIGludG8gdGhlIGJ5dGUgcG9pbnRlZCBieSBJ bmRleC4NCj4gKyAgLy8NCj4gKyAgQWNjZXNzID0gMHgwMzsNCj4gKyAgSW5kZXggID0gT0ZGU0VU X09GIChFTU1DX0VYVF9DU0QsIEJ1c1dpZHRoKTsNCj4gKyAgaWYgKEJ1c1dpZHRoID09IDEpIHsN Cj4gKyAgICBWYWx1ZSA9IDA7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgaWYgKEJ1c1dpZHRoID09 IDQpIHsNCj4gKyAgICAgIFZhbHVlID0gMTsNCj4gKyAgICB9IGVsc2UgaWYgKEJ1c1dpZHRoID09 IDgpIHsNCj4gKyAgICAgIFZhbHVlID0gMjsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoSXNE ZHIpIHsNCj4gKyAgICAgIFZhbHVlICs9IDQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg Q21kU2V0ID0gMDsNCj4gKyAgU3RhdHVzID0gRW1tY1N3aXRjaCAoUGFzc1RocnUsIEFjY2Vzcywg SW5kZXgsIFZhbHVlLCBDbWRTZXQpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgREVCVUcgKCgNCj4gKyAgICAgIERFQlVHX0VSUk9SLA0KPiArICAgICAgIkVtbWNTd2l0 Y2hCdXNXaWR0aDogU3dpdGNoIHRvIGJ1cyB3aWR0aCAlZCBmYWlscyB3aXRoICVyXG4iLA0KPiAr ICAgICAgQnVzV2lkdGgsDQo+ICsgICAgICBTdGF0dXMNCj4gKyAgICAgICkpOw0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBkbyB7DQo+ICsgICAgU3RhdHVzID0gRW1t Y1NlbmRTdGF0dXMgKFBhc3NUaHJ1LCBSY2EsICZEZXZTdGF0dXMpOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoDQo+ICsgICAgICAgIERFQlVHX0VS Uk9SLA0KPiArICAgICAgICAiRW1tY1N3aXRjaEJ1c1dpZHRoOiBTZW5kIHN0YXR1cyBmYWlscyB3 aXRoICVyXG4iLA0KPiArICAgICAgICBTdGF0dXMNCj4gKyAgICAgICAgKSk7DQo+ICsgICAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKyAgICAvLw0KPiArICAgIC8vIENoZWNrIHRoZSBz d2l0Y2ggb3BlcmF0aW9uIGlzIHJlYWxseSBzdWNjZXNzZnVsIG9yIG5vdC4NCj4gKyAgICAvLw0K PiArICB9IHdoaWxlICgoRGV2U3RhdHVzICYgMHhmKSA9PSBFTU1DX1NUQVRFX1BSRyk7DQo+ICsN Cj4gKyAgU3RhdHVzID0gRHdNbWNIY1NldEJ1c1dpZHRoIChEZXZCYXNlLCBJc0RkciwgQnVzV2lk dGgpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBTd2l0Y2ggdGhlIGNsb2NrIGZyZXF1ZW5jeSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLg0K PiArDQo+ICsgIFJlZmVyIHRvIEVNTUMgRWxlY3RyaWNhbCBTdGFuZGFyZCBTcGVjIDUuMSBTZWN0 aW9uIDYuNi4NCj4gKw0KPiArICBAcGFyYW1baW5dIERldklvICAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgRUZJX0RFVklDRV9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBQ YXNzVGhydSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RP Q09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJh bVtpbl0gUmNhICAgICAgICAgICAgVGhlIHJlbGF0aXZlIGRldmljZSBhZGRyZXNzIHRvIGJlIGFz c2lnbmVkLg0KPiArICBAcGFyYW1baW5dIEhzVGltaW5nICAgICAgIFRoZSB2YWx1ZSB0byBiZSB3 cml0dGVuIHRvIEhTX1RJTUlORyBmaWVsZCBvZg0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVYVF9DU0QgcmVnaXN0ZXIuDQo+ICsgIEBwYXJhbVtpbl0gQ2xvY2tGcmVxICAgICAgVGhl IG1heCBjbG9jayBmcmVxdWVuY3kgdG8gYmUgc2V0LCB0aGUgdW5pdCBpcyBNSHouDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgY29ycmVj dGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMu DQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRW1tY1N3aXRjaENsb2NrRnJlcSAoDQo+ ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAg SU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAgICAqUGFzc1RocnUsDQo+ICsgIElO IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmNhLA0KPiArICBJTiBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhzVGltaW5nLA0KPiArICBJTiBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENsb2NrRnJlcQ0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgIEFjY2VzczsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICBWYWx1ZTsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICBDbWRTZXQ7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgRGV2U3Rh dHVzOw0KPiArICBEV19NTUNfSENfUFJJVkFURV9EQVRBICAgICpQcml2YXRlOw0KPiArDQo+ICsg IFByaXZhdGUgPSBEV19NTUNfSENfUFJJVkFURV9GUk9NX1RISVMgKFBhc3NUaHJ1KTsNCj4gKyAg Ly8NCj4gKyAgLy8gV3JpdGUgQnl0ZSwgdGhlIFZhbHVlIGZpZWxkIGlzIHdyaXR0ZW4gaW50byB0 aGUgYnl0ZSBwb2ludGVkIGJ5IEluZGV4Lg0KPiArICAvLw0KPiArICBBY2Nlc3MgPSAweDAzOw0K PiArICBJbmRleCAgPSBPRkZTRVRfT0YgKEVNTUNfRVhUX0NTRCwgSHNUaW1pbmcpOw0KPiArICBW YWx1ZSAgPSBIc1RpbWluZzsNCj4gKyAgQ21kU2V0ID0gMDsNCj4gKw0KPiArICBTdGF0dXMgPSBF bW1jU3dpdGNoIChQYXNzVGhydSwgQWNjZXNzLCBJbmRleCwgVmFsdWUsIENtZFNldCk7DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAgREVC VUdfRVJST1IsDQo+ICsgICAgICAiRW1tY1N3aXRjaENsb2NrRnJlcTogU3dpdGNoIHRvIGhzdGlt aW5nICVkIGZhaWxzIHdpdGggJXJcbiIsDQo+ICsgICAgICBIc1RpbWluZywNCj4gKyAgICAgIFN0 YXR1cw0KPiArICAgICAgKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ ICsgIFN0YXR1cyA9IEVtbWNTZW5kU3RhdHVzIChQYXNzVGhydSwgUmNhLCAmRGV2U3RhdHVzKTsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoDQo+ICsgICAg ICBERUJVR19FUlJPUiwNCj4gKyAgICAgICJFbW1jU3dpdGNoQ2xvY2tGcmVxOiBTZW5kIHN0YXR1 cyBmYWlscyB3aXRoICVyXG4iLA0KPiArICAgICAgU3RhdHVzDQo+ICsgICAgICApKTsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHRoZSBzd2l0 Y2ggb3BlcmF0aW9uIGlzIHJlYWxseSBzdWNjZXNzZnVsIG9yIG5vdC4NCj4gKyAgLy8NCj4gKyAg aWYgKChEZXZTdGF0dXMgJiBCSVQ3KSAhPSAwKSB7DQo+ICsgICAgREVCVUcgKCgNCj4gKyAgICAg IERFQlVHX0VSUk9SLA0KPiArICAgICAgIkVtbWNTd2l0Y2hDbG9ja0ZyZXE6IFRoZSBzd2l0Y2gg b3BlcmF0aW9uIGZhaWxzIGFzIERldlN0YXR1cyAweCUwOHhcbiIsDQo+ICsgICAgICBEZXZTdGF0 dXMNCj4gKyAgICAgICkpOw0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9 DQo+ICsgIC8vDQo+ICsgIC8vIENvbnZlcnQgdGhlIGNsb2NrIGZyZXEgdW5pdCBmcm9tIE1IeiB0 byBLSHouDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IER3TW1jSGNDbG9ja1N1cHBseSAoRGV2QmFz ZSwgQ2xvY2tGcmVxICogMTAwMCwgUHJpdmF0ZS0+Q2FwYWJpbGl0eVswXSk7DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFN3aXRjaCB0byB0aGUgSGln aCBTcGVlZCB0aW1pbmcgYWNjb3JkaW5nIHRvIHJlcXVlc3QuDQo+ICsNCj4gKyAgUmVmZXIgdG8g RU1NQyBFbGVjdHJpY2FsIFN0YW5kYXJkIFNwZWMgNS4xIFNlY3Rpb24gNi42LjguDQo+ICsNCj4g KyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0Vf SU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gUGFzc1RocnUgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFJjYSAgICAgICAg ICAgIFRoZSByZWxhdGl2ZSBkZXZpY2UgYWRkcmVzcyB0byBiZSBhc3NpZ25lZC4NCj4gKyAgQHBh cmFtW2luXSBDbG9ja0ZyZXEgICAgICBUaGUgbWF4IGNsb2NrIGZyZXF1ZW5jeSB0byBiZSBzZXQu DQo+ICsgIEBwYXJhbVtpbl0gSXNEZHIgICAgICAgICAgSWYgVFJVRSwgdXNlIGR1YWwgZGF0YSBy YXRlIGRhdGEgc2ltcGxpbmcgbWV0aG9kLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IE90aGVyd2lzZSB1c2Ugc2luZ2xlIGRhdGEgcmF0ZSBkYXRhIHNpbXBsaW5nIG1ldGhvZC4NCj4g KyAgQHBhcmFtW2luXSBCdXNXaWR0aCAgICAgICBUaGUgYnVzIHdpZHRoIHRvIGJlIHNldCwgaXQg Y291bGQgYmUgNCBvciA4Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhl IG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAg ICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VtbWNTd2l0Y2hUb0hpZ2hTcGVlZCAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9D T0wgICAgICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmNhLA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENs b2NrRnJlcSwNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc0Rk ciwNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNXaWR0aA0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5U OCAgICAgICAgICAgICAgIEhzVGltaW5nOw0KPiArDQo+ICsgIEhzVGltaW5nID0gMTsNCj4gKyAg U3RhdHVzID0gRW1tY1N3aXRjaENsb2NrRnJlcSAoRGV2QmFzZSwgUGFzc1RocnUsIFJjYSwgSHNU aW1pbmcsIENsb2NrRnJlcSk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIFN0YXR1cyA9IEVtbWNTd2l0Y2hCdXNXaWR0 aCAoRGV2QmFzZSwgUGFzc1RocnUsIFJjYSwgSXNEZHIsIEJ1c1dpZHRoKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU3dpdGNoIHRvIHRo ZSBIUzIwMCB0aW1pbmcgYWNjb3JkaW5nIHRvIHJlcXVlc3QuDQo+ICsNCj4gKyAgUmVmZXIgdG8g RU1NQyBFbGVjdHJpY2FsIFN0YW5kYXJkIFNwZWMgNS4xIFNlY3Rpb24gNi42LjguDQo+ICsNCj4g KyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0Vf SU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gUGFzc1RocnUgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFJjYSAgICAgICAg ICAgIFRoZSByZWxhdGl2ZSBkZXZpY2UgYWRkcmVzcyB0byBiZSBhc3NpZ25lZC4NCj4gKyAgQHBh cmFtW2luXSBDbG9ja0ZyZXEgICAgICBUaGUgbWF4IGNsb2NrIGZyZXF1ZW5jeSB0byBiZSBzZXQu DQo+ICsgIEBwYXJhbVtpbl0gQnVzV2lkdGggICAgICAgVGhlIGJ1cyB3aWR0aCB0byBiZSBzZXQs IGl0IGNvdWxkIGJlIDQgb3IgOC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg IFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAg ICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFbW1jU3dpdGNoVG9IUzIwMCAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9D T0wgICAgICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmNhLA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENs b2NrRnJlcSwNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNX aWR0aA0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFN3aXRjaCB0aGUgaGlnaCBzcGVlZCB0aW1pbmcgYWNjb3JkaW5nIHRvIHJl cXVlc3QuDQo+ICsNCj4gKyAgUmVmZXIgdG8gRU1NQyBFbGVjdHJpY2FsIFN0YW5kYXJkIFNwZWMg NS4xIFNlY3Rpb24gNi42LjguDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBEZXZJbyAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0VfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBw YXJhbVtpbl0gUGFzc1RocnUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1Nf VEhSVV9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLg0K PiArICBAcGFyYW1baW5dIFJjYSAgICAgICAgICAgIFRoZSByZWxhdGl2ZSBkZXZpY2UgYWRkcmVz cyB0byBiZSBhc3NpZ25lZC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRo ZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAg ICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFbW1jU2V0QnVzTW9kZSAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAg ICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmNhDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArICBFTU1DX0NTRCAgICAgICAgICAgICAgICAgICAgICBDc2Q7DQo+ICsgIEVNTUNf RVhUX0NTRCAgICAgICAgICAgICAgICAgIEV4dENzZDsNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgSHNUaW1pbmc7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg IElzRGRyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBEZXZTdGF0dXM7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIENsb2NrRnJlcTsNCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgQnVzV2lkdGg7DQo+ICsgIERXX01NQ19IQ19QUklWQVRF X0RBVEEgICAgICAgICpQcml2YXRlOw0KPiArDQo+ICsgIFByaXZhdGUgPSBEV19NTUNfSENfUFJJ VkFURV9GUk9NX1RISVMgKFBhc3NUaHJ1KTsNCj4gKyAgQVNTRVJUIChQcml2YXRlLT5DYXBhYmls aXR5WzBdLkJhc2VDbGtGcmVxICE9IDApOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVtbWNHZXRDc2Qg KFBhc3NUaHJ1LCBSY2EsICZDc2QpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVtbWNTZXRCdXNNb2RlOiBHZXRDc2QgZmFpbHMg d2l0aCAlclxuIiwgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIFN0YXR1cyA9IEVtbWNTZWxlY3QgKFBhc3NUaHJ1LCBSY2EpOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVtbWNTZXRC dXNNb2RlOiBTZWxlY3QgZmFpbHMgd2l0aCAlclxuIiwgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGRvIHsNCj4gKyAgICBTdGF0dXMgPSBFbW1jU2Vu ZFN0YXR1cyAoUGFzc1RocnUsIFJjYSwgJkRldlN0YXR1cyk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgREVCVUcgKCgNCj4gKyAgICAgICAgREVCVUdfRVJST1Is DQo+ICsgICAgICAgICJFbW1jU2V0QnVzTW9kZTogR2V0IFN0YXR1cyBmYWlscyB3aXRoICVyXG4i LA0KPiArICAgICAgICBTdGF0dXMNCj4gKyAgICAgICAgKSk7DQo+ICsgICAgICByZXR1cm4gU3Rh dHVzOw0KPiArICAgIH0NCj4gKyAgfSB3aGlsZSAoRU1NQ19HRVRfU1RBVEUgKERldlN0YXR1cykg IT0gRU1NQ19TVEFURV9UUkFOKTsNCj4gKw0KPiArICBCdXNXaWR0aCA9IDE7DQo+ICsgIFN0YXR1 cyA9IEVtbWNTd2l0Y2hCdXNXaWR0aCAoRGV2QmFzZSwgUGFzc1RocnUsIFJjYSwgRkFMU0UsIEJ1 c1dpZHRoKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBCdXNXaWR0aCA9IFByaXZhdGUtPkNhcGFiaWxpdHlb MF0uQnVzV2lkdGg7DQo+ICsgIC8vDQo+ICsgIC8vIEdldCBEZWl2Y2VfVHlwZSBmcm9tIEVYVF9D U0QgcmVnaXN0ZXIuDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEVtbWNHZXRFeHRDc2QgKFBhc3NU aHJ1LCAmRXh0Q3NkKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERF QlVHICgoREVCVUdfRVJST1IsICJFbW1jU2V0QnVzTW9kZTogR2V0RXh0Q3NkIGZhaWxzIHdpdGgg JXJcbiIsIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICAvLw0KPiArICAvLyBDYWxjdWxhdGUgc3VwcG9ydGVkIGJ1cyBzcGVlZC9idXMgd2lkdGgvY2xv Y2sgZnJlcXVlbmN5Lg0KPiArICAvLw0KPiArICBIc1RpbWluZyAgPSAwOw0KPiArICBJc0RkciAg ICAgPSBGQUxTRTsNCj4gKyAgQ2xvY2tGcmVxID0gMDsNCj4gKyAgaWYgKCgoRXh0Q3NkLkRldmlj ZVR5cGUgJiAoQklUNCB8IEJJVDUpKSAhPSAwKSAmJg0KPiArICAgICAgKFByaXZhdGUtPkNhcGFi aWxpdHlbMF0uU2RyMTA0ICE9IDApKSB7DQo+ICsgICAgSHNUaW1pbmcgID0gMjsNCj4gKyAgICBJ c0RkciAgICAgPSBGQUxTRTsNCj4gKyAgICBDbG9ja0ZyZXEgPSAyMDA7DQo+ICsgIH0gZWxzZSBp ZiAoKChFeHRDc2QuRGV2aWNlVHlwZSAmIChCSVQyIHwgQklUMykpICE9IDApICYmDQo+ICsgICAg ICAgICAgICAgKFByaXZhdGUtPkNhcGFiaWxpdHlbMF0uRGRyNTAgIT0gMCkpIHsNCj4gKyAgICBI c1RpbWluZyAgPSAxOw0KPiArICAgIElzRGRyICAgICA9IFRSVUU7DQo+ICsgICAgQ2xvY2tGcmVx ID0gNTI7DQo+ICsgIH0gZWxzZSBpZiAoKChFeHRDc2QuRGV2aWNlVHlwZSAmIEJJVDEpICE9IDAp ICYmDQo+ICsgICAgICAgICAgICAgKFByaXZhdGUtPkNhcGFiaWxpdHlbMF0uSGlnaFNwZWVkICE9 IDApKSB7DQo+ICsgICAgSHNUaW1pbmcgID0gMTsNCj4gKyAgICBJc0RkciAgICAgPSBGQUxTRTsN Cj4gKyAgICBDbG9ja0ZyZXEgPSA1MjsNCj4gKyAgfSBlbHNlIGlmICgoKEV4dENzZC5EZXZpY2VU eXBlICYgQklUMCkgIT0gMCkgJiYNCj4gKyAgICAgICAgICAgICAoUHJpdmF0ZS0+Q2FwYWJpbGl0 eVswXS5IaWdoU3BlZWQgIT0gMCkpIHsNCj4gKyAgICBIc1RpbWluZyAgPSAxOw0KPiArICAgIElz RGRyICAgICA9IEZBTFNFOw0KPiArICAgIENsb2NrRnJlcSA9IDI2Ow0KPiArICB9DQo+ICsNCj4g KyAgaWYgKChDbG9ja0ZyZXEgPT0gMCkgfHwgKEhzVGltaW5nID09IDApKSB7DQo+ICsgICAgLy8N Cj4gKyAgICAvLyBDb250aW51ZSB1c2luZyBkZWZhdWx0IHNldHRpbmcuDQo+ICsgICAgLy8NCj4g KyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAoKA0KPiAr ICAgIERFQlVHX0lORk8sDQo+ICsgICAgIkVtbWNTZXRCdXNNb2RlOiBIc1RpbWluZyAlZCBDbG9j a0ZyZXEgJWQgQnVzV2lkdGggJWQgRGRyICVhXG4iLA0KPiArICAgIEhzVGltaW5nLA0KPiArICAg IENsb2NrRnJlcSwNCj4gKyAgICBCdXNXaWR0aCwNCj4gKyAgICBJc0RkciA/ICJUUlVFIiA6ICJG QUxTRSINCj4gKyAgICApKTsNCj4gKw0KPiArICBpZiAoSHNUaW1pbmcgPT0gMikgew0KPiArICAg IC8vDQo+ICsgICAgLy8gRXhlY3V0ZSBIUzIwMCB0aW1pbmcgc3dpdGNoIHByb2NlZHVyZQ0KPiAr ICAgIC8vDQo+ICsgICAgU3RhdHVzID0gRW1tY1N3aXRjaFRvSFMyMDAgKERldkJhc2UsIFBhc3NU aHJ1LCBSY2EsIENsb2NrRnJlcSwgQnVzV2lkdGgpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIC8v DQo+ICsgICAgLy8gRXhlY3V0ZSBIaWdoIFNwZWVkIHRpbWluZyBzd2l0Y2ggcHJvY2VkdXJlDQo+ ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBFbW1jU3dpdGNoVG9IaWdoU3BlZWQgKA0KPiArICAg ICAgICAgICAgICAgRGV2QmFzZSwNCj4gKyAgICAgICAgICAgICAgIFBhc3NUaHJ1LA0KPiArICAg ICAgICAgICAgICAgUmNhLA0KPiArICAgICAgICAgICAgICAgQ2xvY2tGcmVxLA0KPiArICAgICAg ICAgICAgICAgSXNEZHIsDQo+ICsgICAgICAgICAgICAgICBCdXNXaWR0aA0KPiArICAgICAgICAg ICAgICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIERFQlVHICgoDQo+ICsgICAgREVCVUdfSU5GTywN Cj4gKyAgICAiRW1tY1NldEJ1c01vZGU6IFN3aXRjaCB0byAlYSAlclxuIiwNCj4gKyAgICAoSHNU aW1pbmcgPT0gMykgPyAiSFM0MDAiIDogKChIc1RpbWluZyA9PSAyKSA/ICJIUzIwMCIgOiAiSGln aFNwZWVkIiksDQo+ICsgICAgU3RhdHVzDQo+ICsgICAgKSk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0 YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEV4ZWN1dGUgRU1NQyBkZXZpY2UgaWRlbnRp ZmljYXRpb24gcHJvY2VkdXJlLg0KPiArDQo+ICsgIFJlZmVyIHRvIEVNTUMgRWxlY3RyaWNhbCBT dGFuZGFyZCBTcGVjIDUuMSBTZWN0aW9uIDYuNCBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFy YW1baW5dIFByaXZhdGUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRFdfTU1DX0hDX1BSSVZBVEVf REFUQSBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZXJl IGlzIGEgRU1NQyBjYXJkLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZXJlIGlz IG5vdCBhIEVNTUMgY2FyZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFbW1jSWRl bnRpZmljYXRpb24gKA0KPiArICBJTiBEV19NTUNfSENfUFJJVkFURV9EQVRBICAgICAgICAgICAg ICpQcml2YXRlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIERldkJhc2U7 DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MICAqUGFzc1RocnU7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBPY3I7DQo+ICsgIFVJTlQxNiAgICAgICAgICAg ICAgICAgICAgICAgICBSY2E7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBE ZXZTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0Ow0K PiArDQo+ICsgIERldkJhc2UgICAgPSBQcml2YXRlLT5EZXZCYXNlOw0KPiArICBQYXNzVGhydSA9 ICZQcml2YXRlLT5QYXNzVGhydTsNCj4gKw0KPiArICBTdGF0dXMgPSBFbW1jUmVzZXQgKFBhc3NU aHJ1KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoDQo+ ICsgICAgICBERUJVR19JTkZPLA0KPiArICAgICAgIkVtbWNJZGVudGlmaWNhdGlvbjogRXhlY3V0 aW5nIENtZDAgZmFpbHMgd2l0aCAlclxuIiwNCj4gKyAgICAgIFN0YXR1cw0KPiArICAgICAgKSk7 DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFRpbWVvdXQgPSAxMDA7 DQo+ICsgIGRvIHsNCj4gKyAgICBPY3IgPSBFTU1DX0NNRDFfQ0FQQUNJVFlfR1JFQVRFUl9USEFO XzJHQjsNCj4gKyAgICBTdGF0dXMgPSBFbW1jR2V0T2NyIChQYXNzVGhydSwgJk9jcik7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgREVCVUcgKCgNCj4gKyAgICAg ICAgREVCVUdfSU5GTywNCj4gKyAgICAgICAgIkVtbWNJZGVudGlmaWNhdGlvbjogRXhlY3V0aW5n IENtZDEgZmFpbHMgd2l0aCAlclxuIiwNCj4gKyAgICAgICAgU3RhdHVzDQo+ICsgICAgICAgICkp Ow0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsgICAgaWYgKC0tVGltZW91 dCA8PSAwKSB7DQo+ICsgICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgICB9DQo+ ICsgICAgTWljcm9TZWNvbmREZWxheSAoMTAwKTsNCj4gKyAgfSB3aGlsZSAoKE9jciAmIEJJVDMx KSA9PSAwKTsNCj4gKw0KPiArICBTdGF0dXMgPSBFbW1jR2V0QWxsQ2lkIChQYXNzVGhydSk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAg REVCVUdfSU5GTywNCj4gKyAgICAgICJFbW1jSWRlbnRpZmljYXRpb246IEV4ZWN1dGluZyBDbWQy IGZhaWxzIHdpdGggJXJcbiIsDQo+ICsgICAgICBTdGF0dXMNCj4gKyAgICAgICkpOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gdmFsaWQgUkNBIHN0YXJ0 cyBmcm9tIDEuDQo+ICsgIC8vIEhlcmUgd2UgdGFrZXMgYSBzaW1wbGUgZm9ybXVsYSB0byBjYWxj dWxhdGUgdGhlIFJDQS4NCj4gKyAgLy8gRG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSBkZXZpY2VzIG9u IHRoZSBzbG90LCB0aGF0IGlzDQo+ICsgIC8vIHNoYXJlZCBidXMgc2xvdCBmZWF0dXJlLg0KPiAr ICAvLw0KPiArICBSY2EgICAgPSAxOw0KPiArICBTdGF0dXMgPSBFbW1jU2V0UmNhIChQYXNzVGhy dSwgUmNhKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgo DQo+ICsgICAgICBERUJVR19JTkZPLA0KPiArICAgICAgIkVtbWNJZGVudGlmaWNhdGlvbjogRXhl Y3V0aW5nIENtZDMgZmFpbHMgd2l0aCAlclxuIiwNCj4gKyAgICAgIFN0YXR1cw0KPiArICAgICAg KSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArICAvLw0KPiArICAvLyBFbnRl ciBEYXRhIFRyYW5mZXIgTW9kZS4NCj4gKyAgLy8NCj4gKyAgREVCVUcgKCgNCj4gKyAgICBERUJV R19JTkZPLA0KPiArICAgICJFbW1jSWRlbnRpZmljYXRpb246IEZvdW5kIGEgRU1NQyBkZXZpY2Ug YXQgUkNBIFslZF1cbiIsDQo+ICsgICAgUmNhDQo+ICsgICAgKSk7DQo+ICsgIFByaXZhdGUtPlNs b3RbMF0uQ2FyZFR5cGUgPSBFbW1jQ2FyZFR5cGU7DQo+ICsNCj4gKyAgU3RhdHVzID0gRW1tY1Nl dEJ1c01vZGUgKERldkJhc2UsIFBhc3NUaHJ1LCBSY2EpOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIEV4aXQgREFUQSBNb2RlLg0KPiArICAvLw0KPiArICBkbyB7DQo+ICsgICAgU3RhdHVz ID0gRW1tY1NlbmRTdGF0dXMgKFBhc3NUaHJ1LCBSY2EsICZEZXZTdGF0dXMpOw0KPiArICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoDQo+ICsgICAgICAgIERF QlVHX0lORk8sDQo+ICsgICAgICAgICJFbW1jU3dpdGNoQnVzV2lkdGg6IFNlbmQgc3RhdHVzIGZh aWxzIHdpdGggJXJcbiIsDQo+ICsgICAgICAgIFN0YXR1cw0KPiArICAgICAgICApKTsNCj4gKyAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArICB9IHdoaWxlICgoRGV2U3RhdHVzICYg MHhmKSA9PSBFTU1DX1NUQVRFX0RBVEEpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9 DQo+IGRpZmYgLS1naXQgYS9FbWJlZGRlZFBrZy9Ecml2ZXJzL0R3TW1jSGNEeGUvU2REZXZpY2Uu YyBiL0VtYmVkZGVkUGtnL0RyaXZlcnMvRHdNbWNIY0R4ZS9TZERldmljZS5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjMyNDY2MzdiNmRkDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvRW1iZWRkZWRQa2cvRHJpdmVycy9Ed01tY0hjRHhlL1NkRGV2aWNl LmMNCj4gQEAgLTAsMCArMSwxMTA1IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIHBy b3ZpZGVzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB3aGljaCBhcmUgc3BlY2lmaWMgZm9yIFNEIGNh cmQNCj4gKyAgZGV2aWNlLg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjEsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29weXJpZ2h0 IChjKSAyMDE4LCBMaW5hcm8uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArDQo+ICsgIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZQ0KPiArICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEJTRCBMaWNlbnNlIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMNCj4gKyAgZGlzdHJpYnV0aW9u LiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyAgaHR0 cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRI RSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMg SVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0K PiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvU2QuaD4NCj4gKw0KPiArI2luY2x1ZGUgPExp YnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4N Cj4gKw0KPiArI2luY2x1ZGUgIkR3TW1jSGNEeGUuaCINCj4gKw0KPiArLyoqDQo+ICsgIFNlbmQg Y29tbWFuZCBHT19JRExFX1NUQVRFIHRvIHRoZSBkZXZpY2UgdG8gbWFrZSBpdCBnbyB0byBJZGxl IFN0YXRlLg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIFBoeXNpY2FsIExheWVyIFNpbXBsaWZpZWQg U3BlYyA0LjEgU2VjdGlvbiA0LjcgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQ YXNzVGhydSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RP Q09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgU0QgZGV2aWNlIGlzIHJlc2V0IGNvcnJlY3Rs eS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgZGV2aWNlIHJlc2V0IGZhaWxz Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NkQ2FyZFJlc2V0ICgNCj4gKyAgSU4g RUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAgICAqUGFzc1RocnUNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU0RfTU1DX0NPTU1BTkRfQkxPQ0sgICAgICAgICAgICAgIFNkTW1jQ21kQmxr Ow0KPiArICBFRklfU0RfTU1DX1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNkTW1jU3RhdHVz QmxrOw0KPiArICBFRklfU0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgIFBhY2tldDsN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsN Cj4gKyAgWmVyb01lbSAoJlNkTW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQo+ICsg IFplcm9NZW0gKCZTZE1tY1N0YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0JsaykpOw0KPiAr ICBaZXJvTWVtICgmUGFja2V0LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBhY2tldC5T ZE1tY0NtZEJsayAgICA9ICZTZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxr ID0gJlNkTW1jU3RhdHVzQmxrOw0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBEV19NTUNf SENfR0VORVJJQ19USU1FT1VUOw0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9 IFNEX0dPX0lETEVfU1RBVEU7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRUeXBlICA9IFNkTW1j Q29tbWFuZFR5cGVCYzsNCj4gKw0KPiArICBTdGF0dXMgPSBQYXNzVGhydS0+UGFzc1RocnUgKFBh c3NUaHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsNCj4gKyAgLy9TdGF0dXMgPSBQYXNzVGhydS0+UGFz c1RocnUgKFBhc3NUaHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsNCj4gKw0KPiArICByZXR1cm4gU3Rh dHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2VuZCBjb21tYW5kIFNFTkRfSUZfQ09ORCB0 byB0aGUgZGV2aWNlIHRvIGlucXVpcnkgdGhlIFNEIE1lbW9yeSBDYXJkDQo+ICsgIGludGVyZmFj ZSBjb25kaXRpb24uDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgUGh5c2ljYWwgTGF5ZXIgU2ltcGxp ZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1b aW5dIFBhc3NUaHJ1ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVf UFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luXSBTdXBwbHlWb2x0YWdlICBUaGUgc3VwcGxpZWQgdm9sdGFnZSBieSB0aGUgaG9z dC4NCj4gKyAgQHBhcmFtW2luXSBDaGVja1BhdHRlcm4gICBUaGUgY2hlY2sgcGF0dGVybiB0byBi ZSBzZW50IHRvIHRoZSBkZXZpY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgY29ycmVjdGx5Lg0KPiArICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArU2RDYXJkVm9sdGFnZUNoZWNrICgNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVf UFJPVE9DT0wgICAgICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU3VwcGx5Vm9sdGFnZSwNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDaGVja1BhdHRlcm4NCj4gKyAgKQ0KPiArew0KPiArICBFRklfU0RfTU1D X0NPTU1BTkRfQkxPQ0sgICAgICAgICAgICAgIFNkTW1jQ21kQmxrOw0KPiArICBFRklfU0RfTU1D X1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNkTW1jU3RhdHVzQmxrOw0KPiArICBFRklfU0Rf TU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgIFBhY2tldDsNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlNk TW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZTZE1tY1N0 YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0JsaykpOw0KPiArICBaZXJvTWVtICgmUGFja2V0 LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBhY2tldC5TZE1tY0NtZEJsayAgICA9ICZT ZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxrID0gJlNkTW1jU3RhdHVzQmxr Ow0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBEV19NTUNfSENfR0VORVJJQ19USU1FT1VU Ow0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IFNEX1NFTkRfSUZfQ09ORDsN Cj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlwZUJjcjsNCj4g KyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0gU2RNbWNSZXNwb25zZVR5cGVSNzsNCj4gKyAg U2RNbWNDbWRCbGsuQ29tbWFuZEFyZ3VtZW50ID0gKFN1cHBseVZvbHRhZ2UgPDwgOCkgfCBDaGVj a1BhdHRlcm47DQo+ICsNCj4gKyAgU3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhy dSwgMCwgJlBhY2tldCwgTlVMTCk7DQo+ICsNCj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICBpZiAoU2RNbWNTdGF0dXNCbGsuUmVzcDAgIT0gU2RNbWNDbWRCbGsuQ29tbWFu ZEFyZ3VtZW50KSB7DQo+ICsgICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgU2VuZCBjb21tYW5kIFNESU9fU0VORF9PUF9DT05EIHRvIHRoZSBkZXZpY2UgdG8gc2VlIHdo ZXRoZXIgaXQgaXMgU0RJTyBkZXZpY2UuDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0RJTyBTaW1wbGlm aWVkIFNwZWMgMyBTZWN0aW9uIDMuMiBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1baW5d IFBhc3NUaHJ1ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJP VE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luXSBWb2x0YWdlV2luZG93ICBUaGUgc3VwcGx5IHZvbHRhZ2Ugd2luZG93Lg0KPiArICBA cGFyYW1baW5dIFMxOFIgICAgICAgICAgIFRoZSBib29sZWFuIHRvIHNob3cgaWYgaXQgc2hvdWxk IHN3aXRjaCB0byAxLjh2Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhl IG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAg ICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K1NkaW9TZW5kT3BDb25kICgNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wg ICAgICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVm9sdGFnZVdpbmRvdywNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTMThSDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NEX01NQ19DT01NQU5EX0JMT0NLICAg ICAgICAgICAgICBTZE1tY0NtZEJsazsNCj4gKyAgRUZJX1NEX01NQ19TVEFUVVNfQkxPQ0sgICAg ICAgICAgICAgICBTZE1tY1N0YXR1c0JsazsNCj4gKyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfQ09N TUFORF9QQUNLRVQgICBQYWNrZXQ7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN3aXRjaDsNCj4gKw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVvZiAoU2RN bWNDbWRCbGspKTsNCj4gKyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2YgKFNkTW1j U3RhdHVzQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0KSk7DQo+ ICsNCj4gKyAgUGFja2V0LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiArICBQYWNr ZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5UaW1lb3V0 ICAgICAgICA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RNbWNDbWRC bGsuQ29tbWFuZEluZGV4ID0gU0RJT19TRU5EX09QX0NPTkQ7DQo+ICsgIFNkTW1jQ21kQmxrLkNv bW1hbmRUeXBlICA9IFNkTW1jQ29tbWFuZFR5cGVCY3I7DQo+ICsgIFNkTW1jQ21kQmxrLlJlc3Bv bnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VUeXBlUjQ7DQo+ICsNCj4gKyAgU3dpdGNoID0gUzE4UiA/ IEJJVDI0IDogMDsNCj4gKw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kQXJndW1lbnQgPSAoVm9s dGFnZVdpbmRvdyAmIDB4RkZGRkZGKSB8IFN3aXRjaDsNCj4gKw0KPiArICBTdGF0dXMgPSBQYXNz VGhydS0+UGFzc1RocnUgKFBhc3NUaHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsNCj4gKw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2VuZCBjb21tYW5kIFNEX1NF TkRfT1BfQ09ORCB0byB0aGUgZGV2aWNlIHRvIHNlZSB3aGV0aGVyIGl0IGlzIFNESU8gZGV2aWNl Lg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIFBoeXNpY2FsIExheWVyIFNpbXBsaWZpZWQgU3BlYyA0 LjEgU2VjdGlvbiA0LjcgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgUGFzc1Ro cnUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSAgUmNhICAgICAgICAgICAgVGhlIHJlbGF0aXZlIGRldmljZSBhZGRyZXNzIG9mIGFkZHJlc3Nl ZCBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZvbHRhZ2VXaW5kb3cgIFRoZSBzdXBwbHkgdm9s dGFnZSB3aW5kb3cuDQo+ICsgIEBwYXJhbVtpbl0gIFMxOFIgICAgICAgICAgIFRoZSBib29sZWFu IHRvIHNob3cgaWYgaXQgc2hvdWxkIHN3aXRjaCB0byAxLjh2Lg0KPiArICBAcGFyYW1baW5dICBY cGMgICAgICAgICAgICBUaGUgYm9vbGVhbiB0byBzaG93IGlmIGl0IHNob3VsZCBwcm92aWRlIDAu MzZ3DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VyIGNvbnRyb2wuDQo+ICsg IEBwYXJhbVtpbl0gIEhjcyAgICAgICAgICAgIFRoZSBib29sZWFuIHRvIHNob3cgaWYgaXQgc3Vw cG9ydCBob3N0IGNhcGFjaXR5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8u DQo+ICsgIEBwYXJhbVtvdXRdIE9jciAgICAgICAgICAgIFRoZSBidWZmZXIgdG8gc3RvcmUgcmV0 dXJuZWQgT0NSIHJlZ2lzdGVyIHZhbHVlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3Ro ZXJzICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArU2RDYXJkU2VuZE9wQ29uZCAoDQo+ICsgIElOICAgICBFRklfU0RfTU1DX1BB U1NfVEhSVV9QUk9UT0NPTCAgKlBhc3NUaHJ1LA0KPiArICBJTiAgICAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICAgIFJjYSwNCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICBWb2x0YWdlV2luZG93LA0KPiArICBJTiAgICAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICAgIFMxOFIsDQo+ICsgIElOICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgWHBjLA0KPiArICBJTiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgIEhjcywN Cj4gKyAgICAgT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAqT2NyDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NEX01NQ19DT01NQU5EX0JMT0NLICAgICAgICAgICAgICBTZE1tY0Nt ZEJsazsNCj4gKyAgRUZJX1NEX01NQ19TVEFUVVNfQkxPQ0sgICAgICAgICAgICAgICBTZE1tY1N0 YXR1c0JsazsNCj4gKyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgICBQYWNr ZXQ7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaDsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhQb3dlcjsNCj4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0Q2FwYWNpdHk7DQo+ICsNCj4g KyAgWmVyb01lbSAoJlNkTW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQo+ICsgIFpl cm9NZW0gKCZTZE1tY1N0YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0JsaykpOw0KPiArICBa ZXJvTWVtICgmUGFja2V0LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBhY2tldC5TZE1t Y0NtZEJsayAgICA9ICZTZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxrID0g JlNkTW1jU3RhdHVzQmxrOw0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBEV19NTUNfSENf R0VORVJJQ19USU1FT1VUOw0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IFNE X0FQUF9DTUQ7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRUeXBlICA9IFNkTW1jQ29tbWFuZFR5 cGVBYzsNCj4gKyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0gU2RNbWNSZXNwb25zZVR5cGVS MTsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEFyZ3VtZW50ID0gKFVJTlQzMilSY2EgPDwgMTY7 DQo+ICsNCj4gKyAgU3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhydSwgMCwgJlBh Y2tldCwgTlVMTCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEluZGV4ID0g U0RfU0VORF9PUF9DT05EOw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0Nv bW1hbmRUeXBlQmNyOw0KPiArICBTZE1tY0NtZEJsay5SZXNwb25zZVR5cGUgPSBTZE1tY1Jlc3Bv bnNlVHlwZVIzOw0KPiArDQo+ICsgIFN3aXRjaCAgICAgICA9IFMxOFIgPyBCSVQyNCA6IDA7DQo+ ICsgIE1heFBvd2VyICAgICA9IFhwYyA/IEJJVDI4IDogMDsNCj4gKyAgSG9zdENhcGFjaXR5ID0g SGNzID8gQklUMzAgOiAwOw0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRBcmd1bWVudCA9 IChWb2x0YWdlV2luZG93ICYgMHhGRkZGRkYpIHwgU3dpdGNoIHwgXA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNYXhQb3dlciB8IEhvc3RDYXBhY2l0eTsNCj4gKw0KPiArICBT dGF0dXMgPSBQYXNzVGhydS0+UGFzc1RocnUgKFBhc3NUaHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsN Cj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAqT2NyID0gU2RNbWNTdGF0 dXNCbGsuUmVzcDA7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgQnJvYWRjYXN0IGNvbW1hbmQgQUxMX1NFTkRfQ0lEIHRvIHRoZSBidXMg dG8gYXNrIGFsbCB0aGUgU0QgZGV2aWNlcyB0byBzZW5kDQo+ICsgIHRoZSBkYXRhIG9mIHRoZWly IENJRCByZWdpc3RlcnMuDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgUGh5c2ljYWwgTGF5ZXIgU2lt cGxpZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFy YW1baW5dIFBhc3NUaHJ1ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RI UlVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBj b3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBm YWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtTZENhcmRBbGxTZW5kQ2lkICgN Cj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICAgICAqUGFzc1RocnUNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU0RfTU1DX0NPTU1BTkRfQkxPQ0sgICAgICAgICAgICAgIFNk TW1jQ21kQmxrOw0KPiArICBFRklfU0RfTU1DX1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNk TW1jU3RhdHVzQmxrOw0KPiArICBFRklfU0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAg IFBhY2tldDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlNkTW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxr KSk7DQo+ICsgIFplcm9NZW0gKCZTZE1tY1N0YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0Js aykpOw0KPiArICBaZXJvTWVtICgmUGFja2V0LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsg IFBhY2tldC5TZE1tY0NtZEJsayAgICA9ICZTZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1j U3RhdHVzQmxrID0gJlNkTW1jU3RhdHVzQmxrOw0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAg PSBEV19NTUNfSENfR0VORVJJQ19USU1FT1VUOw0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1h bmRJbmRleCA9IFNEX0FMTF9TRU5EX0NJRDsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUg ID0gU2RNbWNDb21tYW5kVHlwZUJjcjsNCj4gKyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0g U2RNbWNSZXNwb25zZVR5cGVSMjsNCj4gKw0KPiArICBTdGF0dXMgPSBQYXNzVGhydS0+UGFzc1Ro cnUgKFBhc3NUaHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2VuZCBjb21tYW5kIFNFVF9SRUxBVElWRV9BRERS IHRvIHRoZSBTRCBkZXZpY2UgdG8gYXNzaWduIGEgUmVsYXRpdmUgZGV2aWNlDQo+ICsgIEFkZHJl c3MgKFJDQSkuDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgUGh5c2ljYWwgTGF5ZXIgU2ltcGxpZmll ZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBQYXNzVGhydSAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJP VE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW291dF0gUmNhICAgICAgICAgICBUaGUgcmVsYXRpdmUgZGV2aWNlIGFkZHJlc3MgdG8gYXNz aWduLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIG9wZXJhdGlvbiBp cyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgb3Bl cmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NkQ2FyZFNldFJj YSAoDQo+ICsgIElOICAgICBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTCAgKlBhc3NUaHJ1 LA0KPiArICAgICBPVVQgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICpSY2ENCj4gKyAg KQ0KPiArew0KPiArICBFRklfU0RfTU1DX0NPTU1BTkRfQkxPQ0sgICAgICAgICAgICAgIFNkTW1j Q21kQmxrOw0KPiArICBFRklfU0RfTU1DX1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNkTW1j U3RhdHVzQmxrOw0KPiArICBFRklfU0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgIFBh Y2tldDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+ICsNCj4gKyAgWmVyb01lbSAoJlNkTW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7 DQo+ICsgIFplcm9NZW0gKCZTZE1tY1N0YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0Jsaykp Ow0KPiArICBaZXJvTWVtICgmUGFja2V0LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBh Y2tldC5TZE1tY0NtZEJsayAgICA9ICZTZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3Rh dHVzQmxrID0gJlNkTW1jU3RhdHVzQmxrOw0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBE V19NTUNfSENfR0VORVJJQ19USU1FT1VUOw0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJ bmRleCA9IFNEX1NFVF9SRUxBVElWRV9BRERSOw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kVHlw ZSAgPSBTZE1tY0NvbW1hbmRUeXBlQmNyOw0KPiArICBTZE1tY0NtZEJsay5SZXNwb25zZVR5cGUg PSBTZE1tY1Jlc3BvbnNlVHlwZVI2Ow0KPiArDQo+ICsgIFN0YXR1cyA9IFBhc3NUaHJ1LT5QYXNz VGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5VTEwpOw0KPiArICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICpSY2EgPSAoVUlOVDE2KShTZE1tY1N0YXR1c0Jsay5SZXNwMCA+ PiAxNik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgU2VuZCBjb21tYW5kIFNFTkRfQ1NEIHRvIHRoZSBTRCBkZXZpY2UgdG8gZ2V0IHRo ZSBkYXRhIG9mIHRoZSBDU0QgcmVnaXN0ZXIuDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgUGh5c2lj YWwgTGF5ZXIgU2ltcGxpZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBmb3IgZGV0YWlscy4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBQYXNzVGhydSAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NE X01NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgUmNhICAgICAgICAgICBUaGUgcmVsYXRpdmUgZGV2 aWNlIGFkZHJlc3Mgb2Ygc2VsZWN0ZWQgZGV2aWNlLg0KPiArICBAcGFyYW1bb3V0XSBDc2QgICAg ICAgICAgIFRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIGNvbnRlbnQgb2YgdGhlIENTRCByZWdpc3Rl ci4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoZSBjYWxsZXIgc2hvdWxk IGlnbm9yZSB0aGUgbG93ZXN0IGJ5dGUgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGlzIGJ1ZmZlciBhcyB0aGUgY29udGVudCBvZiB0aGlzIGJ5dGUgaXMgbWVhbmluZy0NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIGV2ZW4gaWYgdGhlIG9wZXJhdGlvbiBz dWNjZWVkcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBvcGVyYXRp b24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhl IG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtTZENhcmRH ZXRDc2QgKA0KPiArICBJTiAgICAgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICpQYXNz VGhydSwNCj4gKyAgSU4gICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBSY2EsDQo+ ICsgICAgIE9VVCBTRF9DU0QgICAgICAgICAgICAgICAgICAgICAgICAgKkNzZA0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TRF9NTUNfQ09NTUFORF9CTE9DSyAgICAgICAgICAgICAgU2RNbWNDbWRC bGs7DQo+ICsgIEVGSV9TRF9NTUNfU1RBVFVTX0JMT0NLICAgICAgICAgICAgICAgU2RNbWNTdGF0 dXNCbGs7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICAgUGFja2V0 Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g Kw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVvZiAoU2RNbWNDbWRCbGspKTsNCj4g KyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2YgKFNkTW1jU3RhdHVzQmxrKSk7DQo+ ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0KSk7DQo+ICsNCj4gKyAgUGFja2V0 LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiArICBQYWNrZXQuU2RNbWNTdGF0dXNC bGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5UaW1lb3V0ICAgICAgICA9IERXX01N Q19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEluZGV4 ID0gU0RfU0VORF9DU0Q7DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRUeXBlICA9IFNkTW1jQ29t bWFuZFR5cGVBYzsNCj4gKyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0gU2RNbWNSZXNwb25z ZVR5cGVSMjsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEFyZ3VtZW50ID0gKFVJTlQzMilSY2Eg PDwgMTY7DQo+ICsNCj4gKyAgU3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhydSwg MCwgJlBhY2tldCwgTlVMTCk7DQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgQ29weU1lbSAoKChVSU5UOCopQ3NkKSArIDEsICZTZE1tY1N0YXR1c0Jsay5SZXNwMCwgc2l6 ZW9mIChTRF9DU0QpIC0gMSk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgU2VuZCBjb21tYW5kIFNFTkRfQ1NEIHRvIHRoZSBTRCBkZXZp Y2UgdG8gZ2V0IHRoZSBkYXRhIG9mIHRoZSBDU0QgcmVnaXN0ZXIuDQo+ICsNCj4gKyAgUmVmZXIg dG8gU0QgUGh5c2ljYWwgTGF5ZXIgU2ltcGxpZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBmb3Ig ZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBQYXNzVGhydSAgICAgIEEgcG9pbnRlciB0 byB0aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgUmNhICAgICAgICAgICBUaGUg cmVsYXRpdmUgZGV2aWNlIGFkZHJlc3Mgb2Ygc2VsZWN0ZWQgZGV2aWNlLg0KPiArICBAcGFyYW1b b3V0XSBTY3IgICAgICAgICAgIFRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIGNvbnRlbnQgb2YgdGhl IFNDUiByZWdpc3Rlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBv cGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAg ICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtT ZENhcmRHZXRTY3IgKA0KPiArICBJTiAgICAgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wg ICpQYXNzVGhydSwNCj4gKyAgSU4gICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBS Y2EsDQo+ICsgICAgIE9VVCBTRF9TQ1IgICAgICAgICAgICAgICAgICAgICAgICAgKlNjcg0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TRF9NTUNfQ09NTUFORF9CTE9DSyAgICAgICAgICAgICAgU2RN bWNDbWRCbGs7DQo+ICsgIEVGSV9TRF9NTUNfU1RBVFVTX0JMT0NLICAgICAgICAgICAgICAgU2RN bWNTdGF0dXNCbGs7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICAg UGFja2V0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVvZiAoU2RNbWNDbWRCbGsp KTsNCj4gKyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2YgKFNkTW1jU3RhdHVzQmxr KSk7DQo+ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0KSk7DQo+ICsNCj4gKyAg UGFja2V0LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiArICBQYWNrZXQuU2RNbWNT dGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5UaW1lb3V0ICAgICAgICA9 IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFu ZEluZGV4ID0gU0RfQVBQX0NNRDsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUgID0gU2RN bWNDb21tYW5kVHlwZUFjOw0KPiArICBTZE1tY0NtZEJsay5SZXNwb25zZVR5cGUgPSBTZE1tY1Jl c3BvbnNlVHlwZVIxOw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kQXJndW1lbnQgPSAoVUlOVDMy KVJjYSA8PCAxNjsNCj4gKw0KPiArICBTdGF0dXMgPSBQYXNzVGhydS0+UGFzc1RocnUgKFBhc3NU aHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTZE1tY0NtZEJsay5Db21t YW5kSW5kZXggPSBTRF9TRU5EX1NDUjsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUgID0g U2RNbWNDb21tYW5kVHlwZUFkdGM7DQo+ICsgIFNkTW1jQ21kQmxrLlJlc3BvbnNlVHlwZSA9IFNk TW1jUmVzcG9uc2VUeXBlUjE7DQo+ICsNCj4gKyAgUGFja2V0LkluRGF0YUJ1ZmZlciAgICAgPSBT Y3I7DQo+ICsgIFBhY2tldC5JblRyYW5zZmVyTGVuZ3RoID0gc2l6ZW9mIChTRF9TQ1IpOw0KPiAr DQo+ICsgIFN0YXR1cyA9IFBhc3NUaHJ1LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQs IE5VTEwpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBTZW5kIGNvbW1hbmQgU0VMRUNUX0RFU0VMRUNUX0NBUkQgdG8gdGhlIFNEIGRldmljZSB0byBz ZWxlY3QvZGVzZWxlY3QgaXQuDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgUGh5c2ljYWwgTGF5ZXIg U2ltcGxpZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBmb3IgZGV0YWlscy4NCj4gKw0KPiArICBA cGFyYW1baW5dICBQYXNzVGhydSAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNT X1RIUlVfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW2luXSAgUmNhICAgICAgICAgICBUaGUgcmVsYXRpdmUgZGV2aWNlIGFkZHJl c3Mgb2Ygc2VsZWN0ZWQgZGV2aWNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgVGhlIG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMg ICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK1NkQ2FyZFNlbGVjdCAoDQo+ICsgIElOIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RP Q09MICAgICAgKlBhc3NUaHJ1LA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJjYQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TRF9NTUNfQ09NTUFORF9CTE9DSyAg ICAgICAgICAgICAgU2RNbWNDbWRCbGs7DQo+ICsgIEVGSV9TRF9NTUNfU1RBVFVTX0JMT0NLICAg ICAgICAgICAgICAgU2RNbWNTdGF0dXNCbGs7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NP TU1BTkRfUEFDS0VUICAgUGFja2V0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVv ZiAoU2RNbWNDbWRCbGspKTsNCj4gKyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2Yg KFNkTW1jU3RhdHVzQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0 KSk7DQo+ICsNCj4gKyAgUGFja2V0LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiAr ICBQYWNrZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5U aW1lb3V0ICAgICAgICA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RN bWNDbWRCbGsuQ29tbWFuZEluZGV4ID0gU0RfU0VMRUNUX0RFU0VMRUNUX0NBUkQ7DQo+ICsgIFNk TW1jQ21kQmxrLkNvbW1hbmRUeXBlICA9IFNkTW1jQ29tbWFuZFR5cGVBYzsNCj4gKyAgaWYgKFJj YSAhPSAwKSB7DQo+ICsgICAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0gU2RNbWNSZXNwb25z ZVR5cGVSMWI7DQo+ICsgIH0NCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEFyZ3VtZW50ID0gKFVJ TlQzMilSY2EgPDwgMTY7DQo+ICsNCj4gKyAgU3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQ YXNzVGhydSwgMCwgJlBhY2tldCwgTlVMTCk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFNlbmQgY29tbWFuZCBWT0xUQUdFX1NXSVRDSCB0byB0aGUg U0QgZGV2aWNlIHRvIHN3aXRjaCB0aGUgdm9sdGFnZSBvZiB0aGUNCj4gKyAgZGV2aWNlLg0KPiAr DQo+ICsgIFJlZmVyIHRvIFNEIFBoeXNpY2FsIExheWVyIFNpbXBsaWZpZWQgU3BlYyA0LjEgU2Vj dGlvbiA0LjcgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgUGFzc1RocnUgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgY29ycmVjdGx5Lg0KPiArICBAcmV0 dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMuDQo+ICsNCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArU2RDYXJkVm9sdGFnZVN3aXRjaCAoDQo+ICsgIElOIEVGSV9TRF9N TUNfUEFTU19USFJVX1BST1RPQ09MICAgICAgKlBhc3NUaHJ1DQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NEX01NQ19DT01NQU5EX0JMT0NLICAgICAgICAgICAgICBTZE1tY0NtZEJsazsNCj4gKyAg RUZJX1NEX01NQ19TVEFUVVNfQkxPQ0sgICAgICAgICAgICAgICBTZE1tY1N0YXR1c0JsazsNCj4g KyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfQ09NTUFORF9QQUNLRVQgICBQYWNrZXQ7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIFpl cm9NZW0gKCZTZE1tY0NtZEJsaywgc2l6ZW9mIChTZE1tY0NtZEJsaykpOw0KPiArICBaZXJvTWVt ICgmU2RNbWNTdGF0dXNCbGssIHNpemVvZiAoU2RNbWNTdGF0dXNCbGspKTsNCj4gKyAgWmVyb01l bSAoJlBhY2tldCwgc2l6ZW9mIChQYWNrZXQpKTsNCj4gKw0KPiArICBQYWNrZXQuU2RNbWNDbWRC bGsgICAgPSAmU2RNbWNDbWRCbGs7DQo+ICsgIFBhY2tldC5TZE1tY1N0YXR1c0JsayA9ICZTZE1t Y1N0YXR1c0JsazsNCj4gKyAgUGFja2V0LlRpbWVvdXQgICAgICAgID0gRFdfTU1DX0hDX0dFTkVS SUNfVElNRU9VVDsNCj4gKw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kSW5kZXggPSBTRF9WT0xU QUdFX1NXSVRDSDsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5k VHlwZUFjOw0KPiArICBTZE1tY0NtZEJsay5SZXNwb25zZVR5cGUgPSBTZE1tY1Jlc3BvbnNlVHlw ZVIxOw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kQXJndW1lbnQgPSAwOw0KPiArDQo+ICsgIFN0 YXR1cyA9IFBhc3NUaHJ1LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5VTEwpOw0K PiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZW5kIGNv bW1hbmQgU0VUX0JVU19XSURUSCB0byB0aGUgU0QgZGV2aWNlIHRvIHNldCB0aGUgYnVzIHdpZHRo Lg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIFBoeXNpY2FsIExheWVyIFNpbXBsaWZpZWQgU3BlYyA0 LjEgU2VjdGlvbiA0LjcgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBQYXNzVGhy dSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RPQ09MDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g UmNhICAgICAgICAgICAgVGhlIHJlbGF0aXZlIGRldmljZSBhZGRyZXNzIG9mIGFkZHJlc3NlZCBk ZXZpY2UuDQo+ICsgIEBwYXJhbVtpbl0gQnVzV2lkdGggICAgICAgVGhlIGJ1cyB3aWR0aCB0byBi ZSBzZXQsIGl0IGNvdWxkIGJlIDEgb3IgNC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3Ro ZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtTZENhcmRTZXRCdXNXaWR0aCAoDQo+ICsgIElOIEVGSV9TRF9NTUNfUEFTU19U SFJVX1BST1RPQ09MICAgICAgKlBhc3NUaHJ1LA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJjYSwNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCdXNXaWR0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TRF9NTUNfQ09NTUFORF9C TE9DSyAgICAgICAgICAgICAgU2RNbWNDbWRCbGs7DQo+ICsgIEVGSV9TRF9NTUNfU1RBVFVTX0JM T0NLICAgICAgICAgICAgICAgU2RNbWNTdGF0dXNCbGs7DQo+ICsgIEVGSV9TRF9NTUNfUEFTU19U SFJVX0NPTU1BTkRfUEFDS0VUICAgUGFja2V0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWYWx1ZTsNCj4gKw0KPiArICBaZXJvTWVtICgmU2RNbWNDbWRCbGssIHNpemVv ZiAoU2RNbWNDbWRCbGspKTsNCj4gKyAgWmVyb01lbSAoJlNkTW1jU3RhdHVzQmxrLCBzaXplb2Yg KFNkTW1jU3RhdHVzQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZQYWNrZXQsIHNpemVvZiAoUGFja2V0 KSk7DQo+ICsNCj4gKyAgUGFja2V0LlNkTW1jQ21kQmxrICAgID0gJlNkTW1jQ21kQmxrOw0KPiAr ICBQYWNrZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNCbGs7DQo+ICsgIFBhY2tldC5U aW1lb3V0ICAgICAgICA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVPVVQ7DQo+ICsNCj4gKyAgU2RN bWNDbWRCbGsuQ29tbWFuZEluZGV4ID0gU0RfQVBQX0NNRDsNCj4gKyAgU2RNbWNDbWRCbGsuQ29t bWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlwZUFjOw0KPiArICBTZE1tY0NtZEJsay5SZXNwb25z ZVR5cGUgPSBTZE1tY1Jlc3BvbnNlVHlwZVIxOw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kQXJn dW1lbnQgPSAoVUlOVDMyKVJjYSA8PCAxNjsNCj4gKw0KPiArICBTdGF0dXMgPSBQYXNzVGhydS0+ UGFzc1RocnUgKFBhc3NUaHJ1LCAwLCAmUGFja2V0LCBOVUxMKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBT ZE1tY0NtZEJsay5Db21tYW5kSW5kZXggPSBTRF9TRVRfQlVTX1dJRFRIOw0KPiArICBTZE1tY0Nt ZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0NvbW1hbmRUeXBlQWM7DQo+ICsgIFNkTW1jQ21kQmxr LlJlc3BvbnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VUeXBlUjE7DQo+ICsNCj4gKyAgaWYgKEJ1c1dp ZHRoID09IDEpIHsNCj4gKyAgICBWYWx1ZSA9IDA7DQo+ICsgIH0gZWxzZSBpZiAoQnVzV2lkdGgg PT0gNCkgew0KPiArICAgIFZhbHVlID0gMjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU2RNbWNDbWRCbGsuQ29t bWFuZEFyZ3VtZW50ID0gVmFsdWUgJiAweDM7DQo+ICsNCj4gKyAgU3RhdHVzID0gUGFzc1RocnUt PlBhc3NUaHJ1IChQYXNzVGhydSwgMCwgJlBhY2tldCwgTlVMTCk7DQo+ICsgIHJldHVybiBTdGF0 dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZW5kIGNvbW1hbmQgU1dJVENIX0ZVTkMgdG8g dGhlIFNEIGRldmljZSB0byBjaGVjayBzd2l0Y2hhYmxlIGZ1bmN0aW9uIG9yDQo+ICsgIHN3aXRj aCBjYXJkIGZ1bmN0aW9uLg0KPiArDQo+ICsgIFJlZmVyIHRvIFNEIFBoeXNpY2FsIExheWVyIFNp bXBsaWZpZWQgU3BlYyA0LjEgU2VjdGlvbiA0LjcgZm9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgUGFzc1RocnUgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19U SFJVX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ ICsgIEBwYXJhbVtpbl0gIEFjY2Vzc01vZGUgICAgVGhlIHZhbHVlIGZvciBhY2Nlc3MgbW9kZSBn cm91cC4NCj4gKyAgQHBhcmFtW2luXSAgQ29tbWFuZFN5c3RlbSBUaGUgdmFsdWUgZm9yIGNvbW1h bmQgc2V0IGdyb3VwLg0KPiArICBAcGFyYW1baW5dICBEcml2ZVN0cmVuZ3RoIFRoZSB2YWx1ZSBm b3IgZHJpdmUgbGVuZ3RoIGdyb3VwLg0KPiArICBAcGFyYW1baW5dICBQb3dlckxpbWl0ICAgIFRo ZSB2YWx1ZSBmb3IgcG93ZXIgbGltaXQgZ3JvdXAuDQo+ICsgIEBwYXJhbVtpbl0gIE1vZGUgICAg ICAgICAgU3dpdGNoIG9yIGNoZWNrIGZ1bmN0aW9uLg0KPiArICBAcGFyYW1bb3V0XSBTd2l0Y2hS ZXNwICAgIFRoZSByZXR1cm4gc3dpdGNoIGZ1bmN0aW9uIHN0YXR1cy4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtTZENhcmRTd2l0Y2ggKA0KPiArICBJTiAgICAgRUZJ X1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICpQYXNzVGhydSwNCj4gKyAgSU4gICAgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NNb2RlLA0KPiArICBJTiAgICAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRTeXN0ZW0sDQo+ICsgIElOICAgICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVTdHJlbmd0aCwNCj4gKyAgSU4gICAgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlckxpbWl0LA0KPiArICBJTiAgICAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUsDQo+ICsgICAgIE9VVCBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICAgICAgKlN3aXRjaFJlc3ANCj4gKyAgKQ0KPiArew0KPiArICBFRklf U0RfTU1DX0NPTU1BTkRfQkxPQ0sgICAgICAgICAgICAgIFNkTW1jQ21kQmxrOw0KPiArICBFRklf U0RfTU1DX1NUQVRVU19CTE9DSyAgICAgICAgICAgICAgIFNkTW1jU3RhdHVzQmxrOw0KPiArICBF RklfU0RfTU1DX1BBU1NfVEhSVV9DT01NQU5EX1BBQ0tFVCAgIFBhY2tldDsNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZVZhbHVlOw0KPiArDQo+ICsgIFplcm9NZW0g KCZTZE1tY0NtZEJsaywgc2l6ZW9mIChTZE1tY0NtZEJsaykpOw0KPiArICBaZXJvTWVtICgmU2RN bWNTdGF0dXNCbGssIHNpemVvZiAoU2RNbWNTdGF0dXNCbGspKTsNCj4gKyAgWmVyb01lbSAoJlBh Y2tldCwgc2l6ZW9mIChQYWNrZXQpKTsNCj4gKw0KPiArICBQYWNrZXQuU2RNbWNDbWRCbGsgICAg PSAmU2RNbWNDbWRCbGs7DQo+ICsgIFBhY2tldC5TZE1tY1N0YXR1c0JsayA9ICZTZE1tY1N0YXR1 c0JsazsNCj4gKyAgUGFja2V0LlRpbWVvdXQgICAgICAgID0gRFdfTU1DX0hDX0dFTkVSSUNfVElN RU9VVDsNCj4gKw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kSW5kZXggPSBTRF9TV0lUQ0hfRlVO QzsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZFR5cGUgID0gU2RNbWNDb21tYW5kVHlwZUFkdGM7 DQo+ICsgIFNkTW1jQ21kQmxrLlJlc3BvbnNlVHlwZSA9IFNkTW1jUmVzcG9uc2VUeXBlUjE7DQo+ ICsNCj4gKyAgTW9kZVZhbHVlID0gTW9kZSA/IEJJVDMxIDogMDsNCj4gKyAgU2RNbWNDbWRCbGsu Q29tbWFuZEFyZ3VtZW50ID0gKEFjY2Vzc01vZGUgJiAweEYpIHwgICAgICAgICAgICBcDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUG93ZXJMaW1pdCAmIDB4RikgPDwgNCkg fCAgICAgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERyaXZlU3RyZW5n dGggJiAweEYpIDw8IDgpIHwgIFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KChEcml2ZVN0cmVuZ3RoICYgMHhGKSA8PCAxMikgfCBcDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1vZGVWYWx1ZTsNCj4gKw0KPiArICBQYWNrZXQuSW5EYXRhQnVmZmVyICAg ICA9IFN3aXRjaFJlc3A7DQo+ICsgIFBhY2tldC5JblRyYW5zZmVyTGVuZ3RoID0gNjQ7DQo+ICsN Cj4gKyAgU3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhydSwgMCwgJlBhY2tldCwg TlVMTCk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFNlbmQgY29tbWFuZCBTRU5EX1NUQVRVUyB0byB0aGUgYWRkcmVzc2VkIFNEIGRldmljZSB0byBn ZXQgaXRzIHN0YXR1cw0KPiArICByZWdpc3Rlci4NCj4gKw0KPiArICBSZWZlciB0byBTRCBQaHlz aWNhbCBMYXllciBTaW1wbGlmaWVkIFNwZWMgNC4xIFNlY3Rpb24gNC43IGZvciBkZXRhaWxzLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIFBhc3NUaHJ1ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklf U0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBSY2EgICAgICAgICAgIFRoZSByZWxhdGl2ZSBk ZXZpY2UgYWRkcmVzcyBvZiBhZGRyZXNzZWQgZGV2aWNlLg0KPiArICBAcGFyYW1bb3V0XSBEZXZT dGF0dXMgICAgIFRoZSByZXR1cm5lZCBkZXZpY2Ugc3RhdHVzLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4gKyAg QHJldHZhbCBPdGhlcnMgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK1NkQ2FyZFNlbmRTdGF0dXMgKA0KPiArICBJTiAgICAgRUZJ X1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICpQYXNzVGhydSwNCj4gKyAgSU4gICAgIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgICAgICBSY2EsDQo+ICsgICAgIE9VVCBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgICAgKkRldlN0YXR1cw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TRF9N TUNfQ09NTUFORF9CTE9DSyAgICAgICAgICAgICAgU2RNbWNDbWRCbGs7DQo+ICsgIEVGSV9TRF9N TUNfU1RBVFVTX0JMT0NLICAgICAgICAgICAgICAgU2RNbWNTdGF0dXNCbGs7DQo+ICsgIEVGSV9T RF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICAgUGFja2V0Ow0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBaZXJvTWVtICgm U2RNbWNDbWRCbGssIHNpemVvZiAoU2RNbWNDbWRCbGspKTsNCj4gKyAgWmVyb01lbSAoJlNkTW1j U3RhdHVzQmxrLCBzaXplb2YgKFNkTW1jU3RhdHVzQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZQYWNr ZXQsIHNpemVvZiAoUGFja2V0KSk7DQo+ICsNCj4gKyAgUGFja2V0LlNkTW1jQ21kQmxrICAgID0g JlNkTW1jQ21kQmxrOw0KPiArICBQYWNrZXQuU2RNbWNTdGF0dXNCbGsgPSAmU2RNbWNTdGF0dXNC bGs7DQo+ICsgIFBhY2tldC5UaW1lb3V0ICAgICAgICA9IERXX01NQ19IQ19HRU5FUklDX1RJTUVP VVQ7DQo+ICsNCj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEluZGV4ID0gU0RfU0VORF9TVEFUVVM7 DQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRUeXBlICA9IFNkTW1jQ29tbWFuZFR5cGVBYzsNCj4g KyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0gU2RNbWNSZXNwb25zZVR5cGVSMTsNCj4gKyAg U2RNbWNDbWRCbGsuQ29tbWFuZEFyZ3VtZW50ID0gKFVJTlQzMilSY2EgPDwgMTY7DQo+ICsNCj4g KyAgU3RhdHVzID0gUGFzc1RocnUtPlBhc3NUaHJ1IChQYXNzVGhydSwgMCwgJlBhY2tldCwgTlVM TCk7DQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgKkRldlN0YXR1cyA9 IFNkTW1jU3RhdHVzQmxrLlJlc3AwOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNlbmQgY29tbWFuZCBTRU5EX1RVTklOR19CTE9DSyB0 byB0aGUgU0QgZGV2aWNlIGZvciBIUzIwMCBvcHRpbWFsIHNhbXBsaW5nDQo+ICsgIHBvaW50IGRl dGVjdGlvbi4NCj4gKw0KPiArICBJdCBtYXkgYmUgc2VudCB1cCB0byA0MCB0aW1lcyB1bnRpbCB0 aGUgaG9zdCBmaW5pc2hlcyB0aGUgdHVuaW5nIHByb2NlZHVyZS4NCj4gKw0KPiArICBSZWZlciB0 byBTRCBQaHlzaWNhbCBMYXllciBTaW1wbGlmaWVkIFNwZWMgNC4xIFNlY3Rpb24gNC43IGZvciBk ZXRhaWxzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gUGFzc1RocnUgICAgICAgQSBwb2ludGVyIHRv IHRoZSBFRklfU0RfTU1DX1BBU1NfVEhSVV9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg VGhlIG9wZXJhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK1NkQ2FyZFNlbmRUdW5pbmdCbGsgKA0KPiArICBJTiBFRklfU0RfTU1DX1BBU1NfVEhSVV9Q Uk9UT0NPTCAgICAgICpQYXNzVGhydQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TRF9NTUNfQ09N TUFORF9CTE9DSyAgICAgICAgICAgICAgU2RNbWNDbWRCbGs7DQo+ICsgIEVGSV9TRF9NTUNfU1RB VFVTX0JMT0NLICAgICAgICAgICAgICAgU2RNbWNTdGF0dXNCbGs7DQo+ICsgIEVGSV9TRF9NTUNf UEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICAgUGFja2V0Ow0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUdW5pbmdCbG9ja1s2NF07DQo+ICsNCj4gKyAgWmVyb01lbSAoJlNk TW1jQ21kQmxrLCBzaXplb2YgKFNkTW1jQ21kQmxrKSk7DQo+ICsgIFplcm9NZW0gKCZTZE1tY1N0 YXR1c0Jsaywgc2l6ZW9mIChTZE1tY1N0YXR1c0JsaykpOw0KPiArICBaZXJvTWVtICgmUGFja2V0 LCBzaXplb2YgKFBhY2tldCkpOw0KPiArDQo+ICsgIFBhY2tldC5TZE1tY0NtZEJsayAgICA9ICZT ZE1tY0NtZEJsazsNCj4gKyAgUGFja2V0LlNkTW1jU3RhdHVzQmxrID0gJlNkTW1jU3RhdHVzQmxr Ow0KPiArICBQYWNrZXQuVGltZW91dCAgICAgICAgPSBEV19NTUNfSENfR0VORVJJQ19USU1FT1VU Ow0KPiArDQo+ICsgIFNkTW1jQ21kQmxrLkNvbW1hbmRJbmRleCA9IFNEX1NFTkRfVFVOSU5HX0JM T0NLOw0KPiArICBTZE1tY0NtZEJsay5Db21tYW5kVHlwZSAgPSBTZE1tY0NvbW1hbmRUeXBlQWR0 YzsNCj4gKyAgU2RNbWNDbWRCbGsuUmVzcG9uc2VUeXBlID0gU2RNbWNSZXNwb25zZVR5cGVSMTsN Cj4gKyAgU2RNbWNDbWRCbGsuQ29tbWFuZEFyZ3VtZW50ID0gMDsNCj4gKw0KPiArICBQYWNrZXQu SW5EYXRhQnVmZmVyICAgICA9IFR1bmluZ0Jsb2NrOw0KPiArICBQYWNrZXQuSW5UcmFuc2Zlckxl bmd0aCA9IHNpemVvZiAoVHVuaW5nQmxvY2spOw0KPiArDQo+ICsgIFN0YXR1cyA9IFBhc3NUaHJ1 LT5QYXNzVGhydSAoUGFzc1RocnUsIDAsICZQYWNrZXQsIE5VTEwpOw0KPiArDQo+ICsgIHJldHVy biBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTd2l0Y2ggdGhlIGJ1cyB3aWR0aCB0 byBzcGVjaWZpZWQgd2lkdGguDQo+ICsNCj4gKyAgUmVmZXIgdG8gU0QgUGh5c2ljYWwgTGF5ZXIg U2ltcGxpZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBhbmQNCj4gKyAgU0QgSG9zdCBDb250cm9s bGVyIFNpbXBsaWZpZWQgU3BlYyAzLjAgc2VjdGlvbiBGaWd1cmUgMy03IGZvciBkZXRhaWxzLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gUGNpSW8gICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklf UENJX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIFBhc3NUaHJ1ICAgICAg IEEgcG9pbnRlciB0byB0aGUgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBSY2EgICAg ICAgICAgICBUaGUgcmVsYXRpdmUgZGV2aWNlIGFkZHJlc3MgdG8gYmUgYXNzaWduZWQuDQo+ICsg IEBwYXJhbVtpbl0gQnVzV2lkdGggICAgICAgVGhlIGJ1cyB3aWR0aCB0byBiZSBzZXQsIGl0IGNv dWxkIGJlIDQgb3IgOC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBv cGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAg ICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtT ZENhcmRTd2l0Y2hCdXNXaWR0aCAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGV2QmFzZSwNCj4gKyAgSU4gRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wg ICAgICAqUGFzc1RocnUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmNhLA0KPiArICBJTiBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzRGRy LA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1c1dpZHRoDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgRGV2U3RhdHVzOw0KPiArDQo+ICsgIFN0YXR1cyA9IFNkQ2FyZFNldEJ1 c1dpZHRoIChQYXNzVGhydSwgUmNhLCBCdXNXaWR0aCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAgREVCVUdfRVJST1IsDQo+ICsgICAg ICAiU2RDYXJkU3dpdGNoQnVzV2lkdGg6IFN3aXRjaCB0byBidXMgd2lkdGggJWQgZmFpbHMgd2l0 aCAlclxuIiwNCj4gKyAgICAgIEJ1c1dpZHRoLA0KPiArICAgICAgU3RhdHVzDQo+ICsgICAgICAp KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gU2RD YXJkU2VuZFN0YXR1cyAoUGFzc1RocnUsIFJjYSwgJkRldlN0YXR1cyk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAgREVCVUdfRVJST1Is DQo+ICsgICAgICAiU2RDYXJkU3dpdGNoQnVzV2lkdGg6IFNlbmQgc3RhdHVzIGZhaWxzIHdpdGgg JXJcbiIsDQo+ICsgICAgICBTdGF0dXMNCj4gKyAgICAgICkpOw0KPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgdGhlIHN3aXRjaCBvcGVyYXRpb24g aXMgcmVhbGx5IHN1Y2Nlc3NmdWwgb3Igbm90Lg0KPiArICAvLw0KPiArICBpZiAoKERldlN0YXR1 cyA+PiAxNikgIT0gMCkgew0KPiArICAgIERFQlVHICgoDQo+ICsgICAgICBERUJVR19FUlJPUiwN Cj4gKyAgICAgICJTZENhcmRTd2l0Y2hCdXNXaWR0aDogVGhlIHN3aXRjaCBvcGVyYXRpb24gZmFp bHMgYXMgRGV2U3RhdHVzIDB4JTA4eFxuIiwNCj4gKyAgICAgIERldlN0YXR1cw0KPiArICAgICAg KSk7DQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBEd01tY0hjU2V0QnVzV2lkdGggKERldkJhc2UsIElzRGRyLCBCdXNXaWR0aCk7DQo+ ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFN3aXRjaCB0 aGUgaGlnaCBzcGVlZCB0aW1pbmcgYWNjb3JkaW5nIHRvIHJlcXVlc3QuDQo+ICsNCj4gKyAgUmVm ZXIgdG8gU0QgUGh5c2ljYWwgTGF5ZXIgU2ltcGxpZmllZCBTcGVjIDQuMSBTZWN0aW9uIDQuNyBm b3IgZGV0YWlscy4NCj4gKw0KPiArICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgRUZJX1BDSV9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBQ YXNzVGhydSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9TRF9NTUNfUEFTU19USFJVX1BST1RP Q09MDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuDQo+ICsgIEBwYXJh bVtpbl0gUmNhICAgICAgICAgICAgVGhlIHJlbGF0aXZlIGRldmljZSBhZGRyZXNzIHRvIGJlIGFz c2lnbmVkLg0KPiArICBAcGFyYW1baW5dIFMxOEEgICAgICAgICAgIFRoZSBib29sZWFuIHRvIHNo b3cgaWYgaXQncyBhIFVIUy1JIFNEIGNhcmQuDQo+ICsgIEBwYXJhbVtpbl0gQnVzV2lkdGhzICAg ICAgVGhlIGJ1cyB3aWR0aCBvZiB0aGUgU0QgY2FyZC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgIFRoZSBvcGVyYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuDQo+ICsgIEByZXR2 YWwgT3RoZXJzICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtTZENhcmRTZXRCdXNNb2RlICgNCj4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEZXZCYXNlLA0KPiArICBJTiBFRklfU0RfTU1DX1BBU1Nf VEhSVV9QUk9UT0NPTCAgICAgICpQYXNzVGhydSwNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSY2EsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgUzE4QSwNCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCdXNXaWR0aHMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgRFdfTU1DX0hDX1NMT1RfQ0FQICAgICAgICAgICAqQ2FwYWJpbGl0 eTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICBDbG9ja0ZyZXE7DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzTW9kZTsNCj4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICBTd2l0Y2hSZXNwWzY0XTsNCj4gKyAgRFdfTU1DX0hDX1BSSVZBVEVf REFUQSAgICAgICAqUHJpdmF0ZTsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICBJ c0RkcjsNCj4gKw0KPiArICBQcml2YXRlID0gRFdfTU1DX0hDX1BSSVZBVEVfRlJPTV9USElTIChQ YXNzVGhydSk7DQo+ICsNCj4gKyAgQ2FwYWJpbGl0eSA9ICZQcml2YXRlLT5DYXBhYmlsaXR5WzBd Ow0KPiArDQo+ICsgIGlmICgoQ2FwYWJpbGl0eS0+QnVzV2lkdGggPT0gMSkgfHwgKENhcGFiaWxp dHktPkJ1c1dpZHRoID09IDQpKSB7DQo+ICsgICAgQnVzV2lkdGhzICY9IENhcGFiaWxpdHlbMF0u QnVzV2lkdGg7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgREVCVUcgKCgNCj4gKyAgICAgIERFQlVH X0VSUk9SLA0KPiArICAgICAgIlNkQ2FyZFNldEJ1c01vZGU6IEJ1c1dpZHRocyAoJWQpIGluIGNh cGFiaWxpdHkgYXJlIHdyb25nXG4iLA0KPiArICAgICAgQ2FwYWJpbGl0eS0+QnVzV2lkdGgNCj4g KyAgICAgICkpOw0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoQnVzV2lkdGhzID09IDApIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAg ICAgREVCVUdfRVJST1IsDQo+ICsgICAgICAiU2RDYXJkU2V0QnVzTW9kZTogR2V0IHdyb25nIEJ1 c1dpZHRoczolZFxuIiwNCj4gKyAgICAgIEJ1c1dpZHRocw0KPiArICAgICAgKSk7DQo+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChQcml2 YXRlLT5DYXBhYmlsaXR5WzBdLkRkcjUwKSB7DQo+ICsgICAgSXNEZHIgPSBUUlVFOw0KPiArICB9 IGVsc2Ugew0KPiArICAgIElzRGRyID0gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMg PSBTZENhcmRTd2l0Y2hCdXNXaWR0aCAoRGV2QmFzZSwgUGFzc1RocnUsIFJjYSwgSXNEZHIsIEJ1 c1dpZHRocyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAo KA0KPiArICAgICAgREVCVUdfRVJST1IsDQo+ICsgICAgICAiU2RDYXJkU2V0QnVzTW9kZTogRXhl Y3V0aW5nIFNkQ2FyZFN3aXRjaEJ1c1dpZHRoIGZhaWxzIHdpdGggJXJcbiIsDQo+ICsgICAgICBT dGF0dXMNCj4gKyAgICAgICkpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICAvLw0KPiArICAvLyBHZXQgdGhlIHN1cHBvcnRlZCBidXMgc3BlZWQgZnJvbSBTV0lUQ0gg Y21kIHJldHVybiBkYXRhIGdyb3VwICMxLg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBTZENhcmRT d2l0Y2ggKFBhc3NUaHJ1LCAweEYsIDB4RiwgMHhGLCAweEYsIEZBTFNFLCBTd2l0Y2hSZXNwKTsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKyAgLy8NCj4gKyAgLy8gQ2FsY3VsYXRlIHN1cHBvcnRlZCBidXMgc3BlZWQvYnVz IHdpZHRoL2Nsb2NrIGZyZXF1ZW5jeSBieSBob3N0IGFuZCBkZXZpY2UNCj4gKyAgLy8gY2FwYWJp bGl0eS4NCj4gKyAgLy8NCj4gKyAgQ2xvY2tGcmVxID0gMDsNCj4gKyAgaWYgKFMxOEEgJiYgKENh cGFiaWxpdHktPlNkcjEwNCAhPSAwKSAmJiAoKFN3aXRjaFJlc3BbMTNdICYgQklUMykgIT0gMCkp IHsNCj4gKyAgICBDbG9ja0ZyZXEgPSAyMDg7DQo+ICsgICAgQWNjZXNzTW9kZSA9IDM7DQo+ICsg IH0gZWxzZSBpZiAoUzE4QSAmJiAoQ2FwYWJpbGl0eS0+U2RyNTAgIT0gMCkgJiYNCj4gKyAgICAg ICAgICAgICAoKFN3aXRjaFJlc3BbMTNdICYgQklUMikgIT0gMCkpIHsNCj4gKyAgICBDbG9ja0Zy ZXEgPSAxMDA7DQo+ICsgICAgQWNjZXNzTW9kZSA9IDI7DQo+ICsgIH0gZWxzZSBpZiAoUzE4QSAm JiAoQ2FwYWJpbGl0eS0+RGRyNTAgIT0gMCkgJiYNCj4gKyAgICAgICAgICAgICAoKFN3aXRjaFJl c3BbMTNdICYgQklUNCkgIT0gMCkpIHsNCj4gKyAgICBDbG9ja0ZyZXEgPSA1MDsNCj4gKyAgICBB Y2Nlc3NNb2RlID0gNDsNCj4gKyAgfSBlbHNlIGlmICgoU3dpdGNoUmVzcFsxM10gJiBCSVQxKSAh PSAwKSB7DQo+ICsgICAgQ2xvY2tGcmVxID0gNTA7DQo+ICsgICAgQWNjZXNzTW9kZSA9IDE7DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2xvY2tGcmVxID0gMjU7DQo+ICsgICAgQWNjZXNzTW9kZSA9 IDA7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBTZENhcmRTd2l0Y2ggKFBhc3NUaHJ1LCBB Y2Nlc3NNb2RlLCAweEYsIDB4RiwgMHhGLCBUUlVFLCBTd2l0Y2hSZXNwKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICBpZiAoKFN3aXRjaFJlc3BbMTZdICYgMHhGKSAhPSBBY2Nlc3NNb2RlKSB7DQo+ICsgICAg REVCVUcgKCgNCj4gKyAgICAgIERFQlVHX0VSUk9SLA0KPiArICAgICAgIlNkQ2FyZFNldEJ1c01v ZGU6IFN3aXRjaCB0byBBY2Nlc3NNb2RlICVkIENsb2NrRnJlcSAlZCBmYWlscyEgVGhlIFN3aXRj aCByZXNwb25zZSBpcyAweCUxeFxuIiwNCj4gKyAgICAgIEFjY2Vzc01vZGUsDQo+ICsgICAgICBD bG9ja0ZyZXEsDQo+ICsgICAgICBTd2l0Y2hSZXNwWzE2XSAmIDB4Rg0KPiArICAgICAgKSk7DQo+ ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAo KA0KPiArICAgIERFQlVHX0lORk8sDQo+ICsgICAgIlNkQ2FyZFNldEJ1c01vZGU6IFN3aXRjaCB0 byBBY2Nlc3NNb2RlICVkIENsb2NrRnJlcSAlZCBcbiIsDQo+ICsgICAgQWNjZXNzTW9kZSwNCj4g KyAgICBDbG9ja0ZyZXENCj4gKyAgICApKTsNCj4gKw0KPiArICBTdGF0dXMgPSBEd01tY0hjQ2xv Y2tTdXBwbHkgKERldkJhc2UsIENsb2NrRnJlcSAqIDEwMDAsICpDYXBhYmlsaXR5KTsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtT ZENhcmRJZGVudGlmaWNhdGlvbiAoDQo+ICsgIElOIERXX01NQ19IQ19QUklWQVRFX0RBVEEgICAg ICAgICAgICAgKlByaXZhdGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg RGV2QmFzZTsNCj4gKyAgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9DT0wgICpQYXNzVGhydTsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIE9jcjsNCj4gKyAgVUlOVDE2ICAg ICAgICAgICAgICAgICAgICAgICAgIFJjYTsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICAgIFhwYzsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgIFMxOHI7DQo+ ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBNYXhDdXJyZW50Ow0KPiArICBTRF9T Q1IgICAgICAgICAgICAgICAgICAgICAgICAgU2NyOw0KPiArICBTRF9DU0QgICAgICAgICAgICAg ICAgICAgICAgICAgQ3NkOw0KPiArDQo+ICsgIERldkJhc2UgICAgPSBQcml2YXRlLT5EZXZCYXNl Ow0KPiArICBQYXNzVGhydSA9ICZQcml2YXRlLT5QYXNzVGhydTsNCj4gKyAgLy8NCj4gKyAgLy8g MS4gU2VuZCBDbWQwIHRvIHRoZSBkZXZpY2UNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gU2RDYXJk UmVzZXQgKFBhc3NUaHJ1KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IERFQlVHICgoDQo+ICsgICAgICBERUJVR19JTkZPLA0KPiArICAgICAgIlNkQ2FyZElkZW50aWZp Y2F0aW9uOiBFeGVjdXRpbmcgQ21kMCBmYWlscyB3aXRoICVyXG4iLA0KPiArICAgICAgU3RhdHVz DQo+ICsgICAgICApKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIE1pY3Jv U2Vjb25kRGVsYXkgKDEwMDAwKTsNCj4gKyAgLy8NCj4gKyAgLy8gMi4gU2VuZCBDbWQ4IHRvIHRo ZSBkZXZpY2UNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gU2RDYXJkVm9sdGFnZUNoZWNrIChQYXNz VGhydSwgMHgxLCAweEZGKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IERFQlVHICgoDQo+ICsgICAgICBERUJVR19JTkZPLA0KPiArICAgICAgIlNkQ2FyZElkZW50aWZp Y2F0aW9uOiBFeGVjdXRpbmcgQ21kOCBmYWlscyB3aXRoICVyXG4iLA0KPiArICAgICAgU3RhdHVz DQo+ICsgICAgICApKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIC8vDQo+ ICsgIC8vIDMuIFNlbmQgQWNtZDQxIHdpdGggdm9sdGFnZSB3aW5kb3cgMCB0byB0aGUgZGV2aWNl DQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFNkQ2FyZFNlbmRPcENvbmQgKFBhc3NUaHJ1LCAwLCAw LCBGQUxTRSwgRkFMU0UsIEZBTFNFLCAmT2NyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIERFQlVHICgoDQo+ICsgICAgICBERUJVR19JTkZPLA0KPiArICAgICAgIlNk Q2FyZElkZW50aWZpY2F0aW9uOiBFeGVjdXRpbmcgU2RDYXJkU2VuZE9wQ29uZCBmYWlscyB3aXRo ICVyXG4iLA0KPiArICAgICAgU3RhdHVzDQo+ICsgICAgICApKTsNCj4gKyAgICByZXR1cm4gRUZJ X0RFVklDRV9FUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChQcml2YXRlLT5DYXBhYmlsaXR5 WzBdLlZvbHRhZ2UzMyAhPSAwKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBTdXBwb3J0IDMuM1YN Cj4gKyAgICAvLw0KPiArICAgIE1heEN1cnJlbnQgPSAoKFVJTlQzMilQcml2YXRlLT5NYXhDdXJy ZW50WzBdICYgMHhGRikgKiA0Ow0KPiArICAgIFMxOHIgPSBGQUxTRTsNCj4gKyAgfSBlbHNlIGlm IChQcml2YXRlLT5DYXBhYmlsaXR5WzBdLlZvbHRhZ2UzMCAhPSAwKSB7DQo+ICsgICAgLy8NCj4g KyAgICAvLyBTdXBwb3J0IDMuMFYNCj4gKyAgICAvLw0KPiArICAgIE1heEN1cnJlbnQgPSAoKChV SU5UMzIpUHJpdmF0ZS0+TWF4Q3VycmVudFswXSA+PiA4KSAmIDB4RkYpICogNDsNCj4gKyAgICBT MThyID0gRkFMU0U7DQo+ICsgIH0gZWxzZSBpZiAoUHJpdmF0ZS0+Q2FwYWJpbGl0eVswXS5Wb2x0 YWdlMTggIT0gMCkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gU3VwcG9ydCAxLjhWDQo+ICsgICAg Ly8NCj4gKyAgICBNYXhDdXJyZW50ID0gKCgoVUlOVDMyKVByaXZhdGUtPk1heEN1cnJlbnRbMF0g Pj4gMTYpICYgMHhGRikgKiA0Ow0KPiArICAgIFMxOHIgPSBUUlVFOw0KPiArICB9IGVsc2Ugew0K PiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKE1heEN1cnJlbnQgPj0gMTUwKSB7DQo+ICsgICAgWHBjID0g VFJVRTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBYcGMgPSBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIDQuIFJlcGVhdGx5IHNlbmQgQWNtZDQxIHdpdGggc3VwcGx5IHZvbHRh Z2Ugd2luZG93IHRvIHRoZSBkZXZpY2UuDQo+ICsgIC8vICAgIE5vdGUgaGVyZSB3ZSBvbmx5IHN1 cHBvcnQgdGhlIGNhcmRzIGNvbXBsaWVkIHdpdGggU0QgcGh5c2ljYWwNCj4gKyAgLy8gICAgbGF5 ZXIgc2ltcGxpZmllZCBzcGVjIHZlcnNpb24gMi4wIGFuZCB2ZXJzaW9uIDMuMCBhbmQgYWJvdmUu DQo+ICsgIC8vDQo+ICsgIGRvIHsNCj4gKyAgICBTdGF0dXMgPSBTZENhcmRTZW5kT3BDb25kIChQ YXNzVGhydSwgMCwgT2NyLCBTMThyLCBYcGMsIFRSVUUsICZPY3IpOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoDQo+ICsgICAgICAgIERFQlVHX0VS Uk9SLA0KPiArICAgICAgICAiU2RDYXJkSWRlbnRpZmljYXRpb246IFNkQ2FyZFNlbmRPcENvbmQg ZmFpbHMgd2l0aCAlciBPY3IgJXgsIFMxOHIgJXgsIFhwYyAleFxuIiwNCj4gKyAgICAgICAgU3Rh dHVzLA0KPiArICAgICAgICBPY3IsDQo+ICsgICAgICAgIFMxOHIsDQo+ICsgICAgICAgIFhwYw0K PiArICAgICAgICApKTsNCj4gKyAgICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICAg IH0NCj4gKyAgfSB3aGlsZSAoKE9jciAmIEJJVDMxKSA9PSAwKTsNCj4gKw0KPiArICBTdGF0dXMg PSBTZENhcmRBbGxTZW5kQ2lkIChQYXNzVGhydSk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAgREVCVUdfRVJST1IsDQo+ICsgICAgICAi U2RDYXJkSWRlbnRpZmljYXRpb246IEV4ZWN1dGluZyBTZENhcmRBbGxTZW5kQ2lkIGZhaWxzIHdp dGggJXJcbiIsDQo+ICsgICAgICBTdGF0dXMNCj4gKyAgICAgICkpOw0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBTZENhcmRTZXRSY2EgKFBhc3NUaHJ1 LCAmUmNhKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgo DQo+ICsgICAgICBERUJVR19FUlJPUiwNCj4gKyAgICAgICJTZENhcmRJZGVudGlmaWNhdGlvbjog RXhlY3V0aW5nIFNkQ2FyZFNldFJjYSBmYWlscyB3aXRoICVyXG4iLA0KPiArICAgICAgU3RhdHVz DQo+ICsgICAgICApKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg U3RhdHVzID0gU2RDYXJkR2V0Q3NkIChQYXNzVGhydSwgUmNhLCAmQ3NkKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoDQo+ICsgICAgICBERUJVR19FUlJP UiwNCj4gKyAgICAgICJTZENhcmRJZGVudGlmaWNhdGlvbjogRXhlY3V0aW5nIFNkQ2FyZEdldENz ZCBmYWlscyB3aXRoICVyXG4iLA0KPiArICAgICAgU3RhdHVzDQo+ICsgICAgICApKTsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gU2RDYXJkU2VsZWN0 IChQYXNzVGhydSwgUmNhKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IERFQlVHICgoDQo+ICsgICAgICBERUJVR19FUlJPUiwNCj4gKyAgICAgICJTZENhcmRJZGVudGlm aWNhdGlvbjogU2VsZWN0aW5nIGNhcmQgZmFpbHMgd2l0aCAlclxuIiwNCj4gKyAgICAgIFN0YXR1 cw0KPiArICAgICAgKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsg IFN0YXR1cyA9IFNkQ2FyZEdldFNjciAoUGFzc1RocnUsIFJjYSwgJlNjcik7DQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAgREVCVUdfRVJS T1IsDQo+ICsgICAgICAiU2RDYXJkSWRlbnRpZmljYXRpb246IEV4ZWN1dGluZyBTZENhcmRHZXRT Y3IgZmFpbHMgd2l0aCAlclxuIiwNCj4gKyAgICAgIFN0YXR1cw0KPiArICAgICAgKSk7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEVudGVyIERh dGEgVHJhbmZlciBNb2RlLg0KPiArICAvLw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJTZENh cmRJZGVudGlmaWNhdGlvbjogRm91bmQgYSBTRCBkZXZpY2VcbiIpKTsNCj4gKyAgUHJpdmF0ZS0+ U2xvdFswXS5DYXJkVHlwZSA9IFNkQ2FyZFR5cGU7DQo+ICsNCj4gKyAgU3RhdHVzID0gU2RDYXJk U2V0QnVzTW9kZSAoRGV2QmFzZSwgUGFzc1RocnUsIFJjYSwgUzE4ciwgU2NyLlNkQnVzV2lkdGhz KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICBQcml2YXRlLT5TbG90WzBdLkluaXRpYWxpemVkID0gVFJVRTsN Cj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAtLQ0KPiAyLjEyLjMNCj4gDQo+IA0K PiANCj4gDQo+IA0KDQo=