From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 05DB381C4B for ; Wed, 14 Dec 2016 00:41:42 -0800 (PST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP; 14 Dec 2016 00:41:41 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,346,1477983600"; d="scan'208";a="797832047" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by FMSMGA003.fm.intel.com with ESMTP; 14 Dec 2016 00:41:34 -0800 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 00:41:34 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx110.amr.corp.intel.com (10.18.116.10) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 14 Dec 2016 00:41:32 -0800 Received: from shsmsx151.ccr.corp.intel.com ([169.254.3.77]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.97]) with mapi id 14.03.0248.002; Wed, 14 Dec 2016 16:41:30 +0800 From: "Fu, Siyuan" To: "Wu, Jiaxin" , "edk2-devel@lists.01.org" CC: "Ye, Ting" , "Zhang, Lubo" , "Long, Qin" , Thomas Palmer Thread-Topic: [Patch 05/10] NetworkPkg/TlsDxe: TlsDxe driver implementation over OpenSSL Thread-Index: AQHSVdyICWZadcqs802Q2VGIxl2l06EHG4mA Date: Wed, 14 Dec 2016 08:41:29 +0000 Message-ID: References: <1481700859-76060-1-git-send-email-jiaxin.wu@intel.com> <1481700859-76060-6-git-send-email-jiaxin.wu@intel.com> In-Reply-To: <1481700859-76060-6-git-send-email-jiaxin.wu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_IC x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNzQzYmZiNWQtMzgzMi00ZGIwLWIwNjQtYTQ3NjMyZmJkMjI4IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6InR0NndXWmtlRzBtb2N3Q0w2Rlc3NnhyOFJVY3E3Y0doY0F6TVl2ODc3ZEU9In0= x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 05/10] NetworkPkg/TlsDxe: TlsDxe driver implementation over OpenSSL X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Dec 2016 08:41:42 -0000 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGksIEppYXhpbg0KDQpTb21lIGNvbW1lbnRzIGFzIGJlbG93Og0KDQpJbiBUbHNJbXBsLmMNCgkN ClNob3VsZCB0aGUgQVNTRVJUIGluIGxpbmUgMTA0IGJlIGFuIGVycm9yIGhhbmRsaW5nPyBJIG1l YW4gaXMgdGhlIGlucHV0IGJ1ZmZlciBjb21pbmcgZnJvbSBleHRlcm5hbCBpbnB1dCwgYW5kIGhh dmUgd2UgY2hlY2tlZCBDb250ZW50VHlwZSB3aXRoaW4gaXQ/DQoNClNlZW1zIHRoZSBUZW1wUmVj b3JkSGVhZGVyIHBvaW50ZXIgd2lsbCBiZSBtb2RpZmllZCBpbiB0aGUgd2hpbGUgbG9vcCwgc2hv dWxkbid0IHRoZSAzcmQgcGFyYW1ldGVyIGJlIHRoZSByZW1pbmRpbmcgYnVmZmVyIHNpemUgb2Yg dGhlIG91dHB1dCBidWZmZXI/DQoNClNob3VsZCB3ZSByZXR1cm4gZXJyb3IgaWYgdGhlIFRsc0N0 cmxUcmFmZmljT3V0IHJldHVybiBhIGZhaWx1cmU/DQoNClNpbWlsYXIgcXVlc3Rpb25zIGZvciB0 aGUgZGVjcnlwdCBwYWNrZXQgZnVuY3Rpb24uDQoNCg0KQmVzdCBSZWdhcmRzLA0KU2l5dWFuDQoN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBXdSwgSmlheGluIA0KU2VudDogMjAx NsTqMTLUwjE0yNUgMTU6MzQNClRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KQ2M6IFllLCBU aW5nIDx0aW5nLnllQGludGVsLmNvbT47IEZ1LCBTaXl1YW4gPHNpeXVhbi5mdUBpbnRlbC5jb20+ OyBaaGFuZywgTHVibyA8bHViby56aGFuZ0BpbnRlbC5jb20+OyBMb25nLCBRaW4gPHFpbi5sb25n QGludGVsLmNvbT47IFRob21hcyBQYWxtZXIgPHRob21hcy5wYWxtZXJAaHBlLmNvbT47IFd1LCBK aWF4aW4gPGppYXhpbi53dUBpbnRlbC5jb20+DQpTdWJqZWN0OiBbUGF0Y2ggMDUvMTBdIE5ldHdv cmtQa2cvVGxzRHhlOiBUbHNEeGUgZHJpdmVyIGltcGxlbWVudGF0aW9uIG92ZXIgT3BlblNTTA0K DQpUaGlzIHBhdGNoIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBFRkkgVExTIFNlcnZpY2UgQmlu ZGluZw0KUHJvdG9jb2wsIEVGSSBUTFMgUHJvdG9jb2wgYW5kIEVGSSBUTFMgQ29uZmlndXJhdGlv biBQcm90b2NvbA0KSW50ZXJmYWNlcy4NCg0KQ2M6IFllIFRpbmcgPHRpbmcueWVAaW50ZWwuY29t Pg0KQ2M6IEZ1IFNpeXVhbiA8c2l5dWFuLmZ1QGludGVsLmNvbT4NCkNjOiBaaGFuZyBMdWJvIDxs dWJvLnpoYW5nQGludGVsLmNvbT4NCkNjOiBMb25nIFFpbiA8cWluLmxvbmdAaW50ZWwuY29tPg0K Q2M6IFRob21hcyBQYWxtZXIgPHRob21hcy5wYWxtZXJAaHBlLmNvbT4NCkNvbnRyaWJ1dGVkLXVu ZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjANClNpZ25lZC1vZmYtYnk6 IFd1IEppYXhpbiA8amlheGluLnd1QGludGVsLmNvbT4NCi0tLQ0KIE5ldHdvcmtQa2cvVGxzRHhl L1Rsc0NvbmZpZ1Byb3RvY29sLmMgfCAxNTIgKysrKysrKysNCiBOZXR3b3JrUGtnL1Rsc0R4ZS9U bHNEcml2ZXIuYyAgICAgICAgIHwgNDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIE5l dHdvcmtQa2cvVGxzRHhlL1Rsc0RyaXZlci5oICAgICAgICAgfCAyMzcgKysrKysrKysrKysrKw0K IE5ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZS5pbmYgICAgICAgICAgfCAgNjUgKysrKw0KIE5ldHdv cmtQa2cvVGxzRHhlL1Rsc0R4ZS51bmkgICAgICAgICAgfCAgMjUgKysNCiBOZXR3b3JrUGtnL1Rs c0R4ZS9UbHNEeGVFeHRyYS51bmkgICAgIHwgIDE4ICsNCiBOZXR3b3JrUGtnL1Rsc0R4ZS9UbHNJ bXBsLmMgICAgICAgICAgIHwgMjcwICsrKysrKysrKysrKysrKw0KIE5ldHdvcmtQa2cvVGxzRHhl L1Rsc0ltcGwuaCAgICAgICAgICAgfCAzMTUgKysrKysrKysrKysrKysrKysNCiBOZXR3b3JrUGtn L1Rsc0R4ZS9UbHNQcm90b2NvbC5jICAgICAgIHwgNjMyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCiA5IGZpbGVzIGNoYW5nZWQsIDIyMTIgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL1Rsc0R4ZS9UbHNDb25maWdQcm90b2NvbC5jDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzRHhlL1Rsc0RyaXZlci5jDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzRHhlL1Rsc0RyaXZlci5oDQogY3JlYXRlIG1vZGUgMTAw NjQ0IE5ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZS5pbmYNCiBjcmVhdGUgbW9kZSAxMDA2NDQgTmV0 d29ya1BrZy9UbHNEeGUvVGxzRHhlLnVuaQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtn L1Rsc0R4ZS9UbHNEeGVFeHRyYS51bmkNCiBjcmVhdGUgbW9kZSAxMDA2NDQgTmV0d29ya1BrZy9U bHNEeGUvVGxzSW1wbC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvVGxzRHhlL1Rs c0ltcGwuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL1Rsc0R4ZS9UbHNQcm90b2Nv bC5jDQoNCmRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNDb25maWdQcm90b2NvbC5j IGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzQ29uZmlnUHJvdG9jb2wuYw0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAuLjJlYzc5YzkNCi0tLSAvZGV2L251bGwNCisrKyBiL05ldHdv cmtQa2cvVGxzRHhlL1Rsc0NvbmZpZ1Byb3RvY29sLmMNCkBAIC0wLDAgKzEsMTUyIEBADQorLyoq IEBmaWxlDQorICBJbXBsZW1lbnRhdGlvbiBvZiBFRkkgVExTIENvbmZpZ3VyYXRpb24gUHJvdG9j b2wgSW50ZXJmYWNlcy4NCisNCisgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUg YWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJs ZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorICB3 aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhl IGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5z ZXMvYnNkLWxpY2Vuc2UucGhwLg0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ TVBMSUVELg0KKw0KKyoqLw0KKw0KKyNpbmNsdWRlICJUbHNJbXBsLmgiDQorDQorRUZJX1RMU19D T05GSUdVUkFUSU9OX1BST1RPQ09MICBtVGxzQ29uZmlndXJhdGlvblByb3RvY29sID0gew0KKyAg VGxzQ29uZmlndXJhdGlvblNldERhdGEsDQorICBUbHNDb25maWd1cmF0aW9uR2V0RGF0YQ0KK307 DQorDQorLyoqDQorICBTZXQgVExTIGNvbmZpZ3VyYXRpb24gZGF0YS4NCisNCisgIFRoZSBTZXRE YXRhKCkgZnVuY3Rpb24gc2V0cyBUTFMgY29uZmlndXJhdGlvbiB0byBub24tdm9sYXRpbGUgc3Rv cmFnZSBvciB2b2xhdGlsZQ0KKyAgc3RvcmFnZS4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09M IGluc3RhbmNlLg0KKyAgQHBhcmFtW2luXSAgRGF0YVR5cGUgICAgICAgICAgICBDb25maWd1cmF0 aW9uIGRhdGEgdHlwZS4NCisgIEBwYXJhbVtpbl0gIERhdGEgICAgICAgICAgICAgICAgUG9pbnRl ciB0byBjb25maWd1cmF0aW9uIGRhdGEuDQorICBAcGFyYW1baW5dICBEYXRhU2l6ZSAgICAgICAg ICAgIFRvdGFsIHNpemUgb2YgY29uZmlndXJhdGlvbiBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBUaGUgVExTIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBzZXQgc3Vj Y2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUgb3IgbW9y ZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgVFJVRToNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGhpcyBpcyBOVUxMLg0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEYXRhIGlzIE5VTEwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERhdGFTaXplIGlzIDAuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgIFRo ZSBEYXRhVHlwZSBpcyB1bnN1cHBvcnRlZC4NCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJD RVMgICAgUmVxdWlyZWQgc3lzdGVtIHJlc291cmNlcyBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLg0K Kw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitUbHNDb25maWd1cmF0aW9uU2V0RGF0YSAo DQorICBJTiAgICAgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MICAqVGhpcywNCisgIElO ICAgICBFRklfVExTX0NPTkZJR19EQVRBX1RZUEUgICAgICAgIERhdGFUeXBlLA0KKyAgSU4gICAg IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGEsDQorICBJTiAgICAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVExTX0lOU1RBTkNFICAgICAgICAgICAgICAq SW5zdGFuY2U7DQorICBFRklfVFBMICAgICAgICAgICAgICAgICAgIE9sZFRwbDsNCisNCisgIFN0 YXR1cyA9IEVGSV9TVUNDRVNTOw0KKw0KKyAgaWYgKFRoaXMgPT0gTlVMTCB8fCAgRGF0YSA9PSBO VUxMIHx8IERhdGFTaXplID09IDApIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCisgIH0NCisNCisgIE9sZFRwbCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9DQUxMQkFDSyk7DQor DQorICBJbnN0YW5jZSA9IFRMU19JTlNUQU5DRV9GUk9NX0NPTkZJR1VSQVRJT05fVEhJUyAoVGhp cyk7DQorDQorICBzd2l0Y2ggKERhdGFUeXBlKSB7DQorICBjYXNlIEVmaVRsc0NvbmZpZ0RhdGFU eXBlQ0FDZXJ0aWZpY2F0ZToNCisgICAgU3RhdHVzID0gVGxzU2V0Q2FDZXJ0aWZpY2F0ZSAoSW5z dGFuY2UtPlRsc0Nvbm4sIERhdGEsIERhdGFTaXplKTsNCisgICAgYnJlYWs7DQorICBjYXNlIEVm aVRsc0NvbmZpZ0RhdGFUeXBlSG9zdFB1YmxpY0NlcnQ6DQorICAgIFN0YXR1cyA9IFRsc1NldEhv c3RQdWJsaWNDZXJ0IChJbnN0YW5jZS0+VGxzQ29ubiwgRGF0YSwgRGF0YVNpemUpOw0KKyAgICBi cmVhazsNCisgIGNhc2UgRWZpVGxzQ29uZmlnRGF0YVR5cGVIb3N0UHJpdmF0ZUtleToNCisgICAg U3RhdHVzID0gVGxzU2V0SG9zdFByaXZhdGVLZXkgKEluc3RhbmNlLT5UbHNDb25uLCBEYXRhLCBE YXRhU2l6ZSk7DQorICAgIGJyZWFrOw0KKyAgY2FzZSBFZmlUbHNDb25maWdEYXRhVHlwZUNlcnRS ZXZvY2F0aW9uTGlzdDoNCisgICAgU3RhdHVzID0gVGxzU2V0Q2VydFJldm9jYXRpb25MaXN0IChE YXRhLCBEYXRhU2l6ZSk7DQorICAgIGJyZWFrOw0KKyAgZGVmYXVsdDoNCisgICAgIFN0YXR1cyA9 IEVGSV9VTlNVUFBPUlRFRDsNCisgIH0NCisNCisgIGdCUy0+UmVzdG9yZVRQTCAoT2xkVHBsKTsN CisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgR2V0IFRMUyBjb25maWd1cmF0aW9u IGRhdGEuDQorDQorICBUaGUgR2V0RGF0YSgpIGZ1bmN0aW9uIGdldHMgVExTIGNvbmZpZ3VyYXRp b24uDQorDQorICBAcGFyYW1baW5dICAgICAgIFRoaXMgICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0g ICAgICAgRGF0YVR5cGUgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIHR5cGUuDQorICBAcGFyYW1b aW4sIG91dF0gIERhdGEgICAgICAgICAgIFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbiBkYXRhLg0K KyAgQHBhcmFtW2luLCBvdXRdICBEYXRhU2l6ZSAgICAgICBUb3RhbCBzaXplIG9mIGNvbmZpZ3Vy YXRpb24gZGF0YS4gT24gaW5wdXQsIGl0IG1lYW5zDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoZSBzaXplIG9mIERhdGEgYnVmZmVyLiBPbiBvdXRwdXQsIGl0IG1lYW5zIHRo ZSBzaXplDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvcGllZCBEYXRh IGJ1ZmZlciBpZiBFRklfU1VDQ0VTUywgYW5kIG1lYW5zIHRoZQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplIG9mIGRlc2lyZWQgRGF0YSBidWZmZXIgaWYgRUZJX0JVRkZF Ul9UT09fU01BTEwuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBU TFMgY29uZmlndXJhdGlvbiBkYXRhIGlzIGdvdCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBpcyBUUlVFOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlz IE5VTEwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplIGlzIE5V TEwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgaXMgTlVMTCBpZiAq RGF0YVNpemUgaXMgbm90IHplcm8uDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAg IFRoZSBEYXRhVHlwZSBpcyB1bnN1cHBvcnRlZC4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgICAgVGhlIFRMUyBjb25maWd1cmF0aW9uIGRhdGEgaXMgbm90IGZvdW5kLg0KKyAgQHJl dHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgICBUaGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byBo b2xkIHRoZSBkYXRhLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitUbHNDb25maWd1cmF0 aW9uR2V0RGF0YSAoDQorICBJTiAgICAgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MICAq VGhpcywNCisgIElOICAgICBFRklfVExTX0NPTkZJR19EQVRBX1RZUEUgICAgICAgIERhdGFUeXBl LA0KKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGEsIE9QVElP TkFMDQorICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YVNpemUN CisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFRMU19J TlNUQU5DRSAgICAgICAgICAgICAgKkluc3RhbmNlOw0KKw0KKyAgRUZJX1RQTCAgICAgICAgICAg ICAgICAgICBPbGRUcGw7DQorDQorICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCisNCisgIGlmIChU aGlzID09IE5VTEwgfHwgRGF0YVNpemUgPT0gTlVMTCB8fCAoRGF0YSA9PSBOVUxMICYmICpEYXRh U2l6ZSAhPSAwKSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0K Kw0KKyAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBMX0NBTExCQUNLKTsNCisNCisgIEluc3Rh bmNlID0gVExTX0lOU1RBTkNFX0ZST01fQ09ORklHVVJBVElPTl9USElTIChUaGlzKTsNCisNCisg IHN3aXRjaCAoRGF0YVR5cGUpIHsNCisgIGNhc2UgRWZpVGxzQ29uZmlnRGF0YVR5cGVDQUNlcnRp ZmljYXRlOg0KKyAgICBTdGF0dXMgPSBUbHNHZXRDYUNlcnRpZmljYXRlIChJbnN0YW5jZS0+VGxz Q29ubiwgRGF0YSwgRGF0YVNpemUpOw0KKyAgICBicmVhazsNCisgIGNhc2UgRWZpVGxzQ29uZmln RGF0YVR5cGVIb3N0UHVibGljQ2VydDoNCisgICAgU3RhdHVzID0gVGxzR2V0SG9zdFB1YmxpY0Nl cnQgKEluc3RhbmNlLT5UbHNDb25uLCBEYXRhLCBEYXRhU2l6ZSk7DQorICAgIGJyZWFrOw0KKyAg Y2FzZSBFZmlUbHNDb25maWdEYXRhVHlwZUhvc3RQcml2YXRlS2V5Og0KKyAgICBTdGF0dXMgPSBU bHNHZXRIb3N0UHJpdmF0ZUtleSAoSW5zdGFuY2UtPlRsc0Nvbm4sIERhdGEsIERhdGFTaXplKTsN CisgICAgYnJlYWs7DQorICBjYXNlIEVmaVRsc0NvbmZpZ0RhdGFUeXBlQ2VydFJldm9jYXRpb25M aXN0Og0KKyAgICBTdGF0dXMgPSBUbHNHZXRDZXJ0UmV2b2NhdGlvbkxpc3QgKERhdGEsIERhdGFT aXplKTsNCisgICAgYnJlYWs7DQorICBkZWZhdWx0Og0KKyAgICBTdGF0dXMgPSBFRklfVU5TVVBQ T1JURUQ7DQorICB9DQorDQorICBnQlMtPlJlc3RvcmVUUEwgKE9sZFRwbCk7DQorICByZXR1cm4g U3RhdHVzOw0KK30NCmRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNEcml2ZXIuYyBi L05ldHdvcmtQa2cvVGxzRHhlL1Rsc0RyaXZlci5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMC4uMGE3NWMzOQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvTmV0d29ya1BrZy9UbHNE eGUvVGxzRHJpdmVyLmMNCkBAIC0wLDAgKzEsNDk4IEBADQorLyoqIEBmaWxlDQorICBUaGUgRHJp dmVyIEJpbmRpbmcgYW5kIFNlcnZpY2UgQmluZGluZyBQcm90b2NvbCBmb3IgVGxzRHhlIGRyaXZl ci4NCisNCisgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5n IG1hdGVyaWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorICB3aGljaCBhY2NvbXBh bmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5 IGJlIGZvdW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vu c2UucGhwLg0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBM SUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQ UkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0K KyoqLw0KKw0KKyNpbmNsdWRlICJUbHNJbXBsLmgiDQorDQorRUZJX1NFUlZJQ0VfQklORElOR19Q Uk9UT0NPTCBtVGxzU2VydmljZUJpbmRpbmcgPSB7DQorICBUbHNTZXJ2aWNlQmluZGluZ0NyZWF0 ZUNoaWxkLA0KKyAgVGxzU2VydmljZUJpbmRpbmdEZXN0cm95Q2hpbGQNCit9Ow0KKw0KKy8qKg0K KyAgUmVsZWFzZSBhbGwgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBUTFMgaW5zdGFuY2UuDQor DQorICBAcGFyYW1baW5dICBJbnN0YW5jZSAgICAgICAgVGhlIFRMUyBpbnN0YW5jZSBkYXRhLg0K Kw0KKyoqLw0KK1ZPSUQNCitUbHNDbGVhbkluc3RhbmNlICgNCisgIElOIFRMU19JTlNUQU5DRSAg ICAgICAgICAgKkluc3RhbmNlDQorICApDQorew0KKyAgaWYgKEluc3RhbmNlICE9IE5VTEwpIHsN CisgICAgaWYgKEluc3RhbmNlLT5UbHNDb25uICE9IE5VTEwpIHsNCisgICAgICBUbHNGcmVlIChJ bnN0YW5jZS0+VGxzQ29ubik7DQorICAgIH0NCisNCisgICAgRnJlZVBvb2wgKEluc3RhbmNlKTsN CisgIH0NCit9DQorDQorLyoqDQorICBDcmVhdGUgdGhlIFRMUyBpbnN0YW5jZSBhbmQgaW5pdGlh bGl6ZSBpdC4NCisNCisgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAgICAgICAgICAgIFRoZSBwb2lu dGVyIHRvIHRoZSBUTFMgc2VydmljZS4NCisgIEBwYXJhbVtvdXRdIEluc3RhbmNlICAgICAgICAg ICAgIFRoZSBwb2ludGVyIHRvIHRoZSBUTFMgaW5zdGFuY2UuDQorDQorICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIHJlc291cmNlcy4NCisgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgVExTIGluc3RhbmNlIGlzIGNyZWF0ZWQuDQor DQorKiovDQorRUZJX1NUQVRVUw0KK1Rsc0NyZWF0ZUluc3RhbmNlICgNCisgIElOICBUTFNfU0VS VklDRSAgICAgICAgICpTZXJ2aWNlLA0KKyAgT1VUIFRMU19JTlNUQU5DRSAgICAgICAgKipJbnN0 YW5jZQ0KKyAgKQ0KK3sNCisgIFRMU19JTlNUQU5DRSAgICAgICAgICAgICpUbHNJbnN0YW5jZTsN CisNCisgICpJbnN0YW5jZSA9IE5VTEw7DQorDQorICBUbHNJbnN0YW5jZSA9IEFsbG9jYXRlWmVy b1Bvb2wgKHNpemVvZiAoVExTX0lOU1RBTkNFKSk7DQorICBpZiAoVGxzSW5zdGFuY2UgPT0gTlVM TCkgew0KKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorDQorICBUbHNJ bnN0YW5jZS0+U2lnbmF0dXJlID0gVExTX0lOU1RBTkNFX1NJR05BVFVSRTsNCisgIEluaXRpYWxp emVMaXN0SGVhZCAoJlRsc0luc3RhbmNlLT5MaW5rKTsNCisgIFRsc0luc3RhbmNlLT5JbkRlc3Ry b3kgPSBGQUxTRTsNCisgIFRsc0luc3RhbmNlLT5TZXJ2aWNlICAgPSBTZXJ2aWNlOw0KKw0KKyAg Q29weU1lbSAoJlRsc0luc3RhbmNlLT5UbHMsICZtVGxzUHJvdG9jb2wsIHNpemVvZiAoVGxzSW5z dGFuY2UtPlRscykpOw0KKyAgQ29weU1lbSAoJlRsc0luc3RhbmNlLT5UbHNDb25maWcsICZtVGxz Q29uZmlndXJhdGlvblByb3RvY29sLCBzaXplb2YgKFRsc0luc3RhbmNlLT5UbHNDb25maWcpKTsN CisNCisgIFRsc0luc3RhbmNlLT5UbHNTZXNzaW9uU3RhdGUgPSBFZmlUbHNTZXNzaW9uTm90U3Rh cnRlZDsNCisNCisgICpJbnN0YW5jZSA9IFRsc0luc3RhbmNlOw0KKw0KKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KK30NCisNCisvKioNCisgIFJlbGVhc2UgYWxsIHRoZSByZXNvdXJjZXMgdXNlZCBi eSB0aGUgVExTIHNlcnZpY2UgYmluZGluZyBpbnN0YW5jZS4NCisNCisgIEBwYXJhbVtpbl0gIFNl cnZpY2UgICAgICAgIFRoZSBUTFMgc2VydmljZSBkYXRhLg0KKw0KKyoqLw0KK1ZPSUQNCitUbHND bGVhblNlcnZpY2UgKA0KKyAgSU4gVExTX1NFUlZJQ0UgICAgICpTZXJ2aWNlDQorICApDQorew0K KyAgaWYgKFNlcnZpY2UgIT0gTlVMTCkgew0KKyAgICBpZiAoU2VydmljZS0+VGxzQ3R4ICE9IE5V TEwpIHsNCisgICAgICBUbHNDdHhGcmVlIChTZXJ2aWNlLT5UbHNDdHgpOw0KKyAgICB9DQorDQor ICAgIEZyZWVQb29sIChTZXJ2aWNlKTsNCisgIH0NCit9DQorDQorLyoqDQorICBDcmVhdGUgdGhl biBpbml0aWFsaXplIGEgVExTIHNlcnZpY2UuDQorDQorICBAcGFyYW1baW5dICBJbWFnZSAgICAg ICAgICAgICAgICAgIEltYWdlSGFuZGxlIG9mIHRoZSBUTFMgZHJpdmVyDQorICBAcGFyYW1bb3V0 XSBTZXJ2aWNlICAgICAgICAgICAgICAgIFRoZSBzZXJ2aWNlIGZvciBUTFMgZHJpdmVyDQorDQor ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIHJlc291 cmNlIHRvIGNyZWF0ZSB0aGUgc2VydmljZS4NCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICBUaGUgc2VydmljZSBpcyBjcmVhdGVkIGZvciB0aGUgZHJpdmVyLg0KKw0KKyoqLw0KK0VG SV9TVEFUVVMNCitUbHNDcmVhdGVTZXJ2aWNlICgNCisgIElOICBFRklfSEFORExFICAgICAgICAg ICAgSW1hZ2UsDQorICBPVVQgVExTX1NFUlZJQ0UgICAgICAgICAgICoqU2VydmljZQ0KKyAgKQ0K K3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVExTX1NFUlZJQ0UgICAg ICAgICAgICAqVGxzU2VydmljZTsNCisNCisgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KKyAgKlNl cnZpY2UgPSBOVUxMOw0KKw0KKyAgQVNTRVJUIChTZXJ2aWNlICE9IE5VTEwpOw0KKw0KKyAgLy8N CisgIC8vIEFsbG9jYXRlIGEgVExTIFNlcnZpY2UgRGF0YQ0KKyAgLy8NCisgIFRsc1NlcnZpY2Ug PSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFRMU19TRVJWSUNFKSk7DQorICBpZiAoVGxzU2Vy dmljZSA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0N CisNCisgIC8vDQorICAvLyBJbml0aWFsaXplIFRMUyBTZXJ2aWNlIERhdGENCisgIC8vDQorICBU bHNTZXJ2aWNlLT5TaWduYXR1cmUgICAgICAgID0gVExTX1NFUlZJQ0VfU0lHTkFUVVJFOw0KKyAg Q29weU1lbSAoJlRsc1NlcnZpY2UtPlNlcnZpY2VCaW5kaW5nLCAmbVRsc1NlcnZpY2VCaW5kaW5n LCBzaXplb2YgKFRsc1NlcnZpY2UtPlNlcnZpY2VCaW5kaW5nKSk7DQorICBUbHNTZXJ2aWNlLT5U bHNDaGlsZHJlbk51bSAgID0gMDsNCisgIEluaXRpYWxpemVMaXN0SGVhZCAoJlRsc1NlcnZpY2Ut PlRsc0NoaWxkcmVuTGlzdCk7DQorICBUbHNTZXJ2aWNlLT5JbWFnZUhhbmRsZSAgICAgID0gSW1h Z2U7DQorDQorICAqU2VydmljZSA9IFRsc1NlcnZpY2U7DQorDQorICByZXR1cm4gU3RhdHVzOw0K K30NCisNCisvKioNCisgIFVubG9hZHMgYW4gaW1hZ2UuDQorDQorICBAcGFyYW1baW5dICBJbWFn ZUhhbmRsZSAgICAgICAgICAgSGFuZGxlIHRoYXQgaWRlbnRpZmllcyB0aGUgaW1hZ2UgdG8gYmUg dW5sb2FkZWQuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgaW1hZ2Ug aGFzIGJlZW4gdW5sb2FkZWQuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbWFn ZUhhbmRsZSBpcyBub3QgYSB2YWxpZCBpbWFnZSBoYW5kbGUuDQorDQorKiovDQorRUZJX1NUQVRV Uw0KK0VGSUFQSQ0KK1Rsc1VubG9hZCAoDQorICBJTiBFRklfSEFORExFICBJbWFnZUhhbmRsZQ0K KyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVOdW07DQorICBFRklfSEFORExF ICAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQorICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KKyAgRUZJX1NFUlZJQ0VfQklORElOR19QUk9UT0NPTCAg ICAqU2VydmljZUJpbmRpbmc7DQorICBUTFNfU0VSVklDRSAgICAgICAgICAgICAgICAgICAgICpU bHNTZXJ2aWNlOw0KKw0KKyAgSGFuZGxlQnVmZmVyICAgPSBOVUxMOw0KKyAgU2VydmljZUJpbmRp bmcgPSBOVUxMOw0KKyAgVGxzU2VydmljZSAgICAgPSBOVUxMOw0KKw0KKyAgLy8NCisgIC8vIExv Y2F0ZSBhbGwgdGhlIGhhbmRsZXMgd2l0aCBUbHMgc2VydmljZSBiaW5kaW5nIHByb3RvY29sLg0K KyAgLy8NCisgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCisgICAgICAgICAg ICAgICAgICBCeVByb3RvY29sLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpVGxzU2VydmljZUJp bmRpbmdQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAg ICAgICAgICAmSGFuZGxlTnVtLA0KKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCisg ICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBy ZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxl TnVtOyBJbmRleCsrKSB7DQorICAgIC8vDQorICAgIC8vIEZpcnN0bHksIGZpbmQgU2VydmljZUJp bmRpbmcgaW50ZXJmYWNlDQorICAgIC8vDQorICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29s ICgNCisgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQorICAgICAgICAg ICAgICAgICAgICAmZ0VmaVRsc1NlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KKyAgICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopICZTZXJ2aWNlQmluZGluZywNCisgICAgICAgICAgICAgICAg ICAgIEltYWdlSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAg ICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0hBTkRMRV9QUk9UT0NPTA0KKyAgICAgICAg ICAgICAgICAgICAgKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIHJl dHVybiBTdGF0dXM7DQorICAgIH0NCisNCisgICAgVGxzU2VydmljZSA9IFRMU19TRVJWSUNFX0ZS T01fVEhJUyAoU2VydmljZUJpbmRpbmcpOw0KKw0KKyAgICAvLw0KKyAgICAvLyBUaGVuLCB1bmlu c3RhbGwgU2VydmljZUJpbmRpbmcgaW50ZXJmYWNlDQorICAgIC8vDQorICAgIFN0YXR1cyA9IGdC Uy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KKyAgICAgICAgICAgICAg ICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCisgICAgICAgICAgICAgICAgICAgICZnRWZpVGxz U2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsIFNlcnZpY2VCaW5kaW5nLA0KKyAgICAgICAgICAg ICAgICAgICAgTlVMTA0KKyAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVybiBTdGF0dXM7DQorICAgIH0NCisNCisgICAgVGxz Q2xlYW5TZXJ2aWNlIChUbHNTZXJ2aWNlKTsNCisgIH0NCisNCisgIGlmIChIYW5kbGVCdWZmZXIg IT0gTlVMTCkgew0KKyAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCisgIH0NCisNCisgIHJl dHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorICBUaGlzIGlzIHRoZSBkZWNsYXJhdGlv biBvZiBhbiBFRkkgaW1hZ2UgZW50cnkgcG9pbnQuIFRoaXMgZW50cnkgcG9pbnQgaXMNCisgIHRo ZSBzYW1lIGZvciBVRUZJIEFwcGxpY2F0aW9ucywgVUVGSSBPUyBMb2FkZXJzLCBhbmQgVUVGSSBE cml2ZXJzIGluY2x1ZGluZw0KKyAgYm90aCBkZXZpY2UgZHJpdmVycyBhbmQgYnVzIGRyaXZlcnMu DQorDQorICBAcGFyYW0gIEltYWdlSGFuZGxlICAgICAgICAgICBUaGUgZmlybXdhcmUgYWxsb2Nh dGVkIGhhbmRsZSBmb3IgdGhlIFVFRkkgaW1hZ2UuDQorICBAcGFyYW0gIFN5c3RlbVRhYmxlICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQorDQorICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVs bHkuDQorICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBBbiB1bmV4cGVjdGVkIGVycm9y IG9jY3VycmVkLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitUbHNEcml2ZXJFbnRyeVBv aW50ICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KKyAgSU4gRUZJX1NZ U1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICBTdGF0dXM7DQorDQorICBUTFNfU0VSVklDRSAgICAgICAgICAgICpUbHNTZXJ2aWNlOw0K Kw0KKyAgLy8NCisgIC8vIENyZWF0ZSBUTFMgU2VydmljZQ0KKyAgLy8NCisgIFN0YXR1cyA9IFRs c0NyZWF0ZVNlcnZpY2UgKEltYWdlSGFuZGxlLCAmVGxzU2VydmljZSk7DQorICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBBU1NFUlQg KFRsc1NlcnZpY2UgIT0gTlVMTCk7DQorDQorICAvLw0KKyAgLy8gSW5pdGlhbGl6ZXMgdGhlIE9w ZW5TU0wgbGlicmFyeS4NCisgIC8vDQorICBUbHNJbml0aWFsaXplICgpOw0KKw0KKyAgLy8NCisg IC8vIENyZWF0ZSBhIG5ldyBTU0xfQ1RYIG9iamVjdCBhcyBmcmFtZXdvcmsgdG8gZXN0YWJsaXNo IFRMUy9TU0wgZW5hYmxlZA0KKyAgLy8gY29ubmVjdGlvbnMuIFRMUyAxLjAgaXMgdXNlZCBhcyB0 aGUgZGVmYXVsdCB2ZXJzaW9uLg0KKyAgLy8NCisgIFRsc1NlcnZpY2UtPlRsc0N0eCA9IFRsc0N0 eE5ldyAoVExTMTBfUFJPVE9DT0xfVkVSU0lPTl9NQUpPUiwgVExTMTBfUFJPVE9DT0xfVkVSU0lP Tl9NSU5PUik7DQorICBpZiAoVGxzU2VydmljZS0+VGxzQ3R4ID09IE5VTEwpIHsNCisgICAgRnJl ZVBvb2wgKFRsc1NlcnZpY2UpOw0KKyAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQorICB9DQorDQor ICAvLw0KKyAgLy8gSW5zdGFsbCB0aGUgVGxzU2VydmljZUJpbmRpbmcgUHJvdG9jb2wgb250byBI YW5kbGUNCisgIC8vDQorICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50 ZXJmYWNlcyAoDQorICAgICAgICAgICAgICAgICAgJlRsc1NlcnZpY2UtPkhhbmRsZSwNCisgICAg ICAgICAgICAgICAgICAmZ0VmaVRsc1NlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KKyAgICAg ICAgICAgICAgICAgICZUbHNTZXJ2aWNlLT5TZXJ2aWNlQmluZGluZywNCisgICAgICAgICAgICAg ICAgICBOVUxMDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgZ290byBPTl9DTEVBTl9TRVJWSUNFOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0 YXR1czsNCisNCitPTl9DTEVBTl9TRVJWSUNFOg0KKyAgVGxzQ2xlYW5TZXJ2aWNlIChUbHNTZXJ2 aWNlKTsNCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgQ3JlYXRlcyBhIGNo aWxkIGhhbmRsZSBhbmQgaW5zdGFsbHMgYSBwcm90b2NvbC4NCisNCisgIFRoZSBDcmVhdGVDaGls ZCgpIGZ1bmN0aW9uIGluc3RhbGxzIGEgcHJvdG9jb2wgb24gQ2hpbGRIYW5kbGUuDQorICBJZiBD aGlsZEhhbmRsZSBpcyBhIHBvaW50ZXIgdG8gTlVMTCwgdGhlbiBhIG5ldyBoYW5kbGUgaXMgY3Jl YXRlZCBhbmQgcmV0dXJuZWQgaW4gQ2hpbGRIYW5kbGUuDQorICBJZiBDaGlsZEhhbmRsZSBpcyBu b3QgYSBwb2ludGVyIHRvIE5VTEwsIHRoZW4gdGhlIHByb3RvY29sIGluc3RhbGxzIG9uIHRoZSBl eGlzdGluZyBDaGlsZEhhbmRsZS4NCisNCisgIEBwYXJhbVtpbl0gVGhpcyAgICAgICAgUG9pbnRl ciB0byB0aGUgRUZJX1NFUlZJQ0VfQklORElOR19QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJh bVtpbl0gQ2hpbGRIYW5kbGUgUG9pbnRlciB0byB0aGUgaGFuZGxlIG9mIHRoZSBjaGlsZCB0byBj cmVhdGUuIElmIGl0IGlzIE5VTEwsDQorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gYSBu ZXcgaGFuZGxlIGlzIGNyZWF0ZWQuIElmIGl0IGlzIGEgcG9pbnRlciB0byBhbiBleGlzdGluZyBV RUZJIGhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgcHJvdG9jb2wg aXMgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIFVFRkkgaGFuZGxlLg0KKw0KKyAgQHJldHZhbCBFRklf U1VDQ0VTICAgICAgICAgICAgVGhlIHByb3RvY29sIHdhcyBhZGRlZCB0byBDaGlsZEhhbmRsZS4N CisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIE5VTEwuDQor ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBhcmUgbm90IGVub3VnaCByZXNv dXJjZXMgYXZhaWxhYmxlIHRvIGNyZWF0ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGNoaWxkLg0KKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgVGhlIGNoaWxk IGhhbmRsZSB3YXMgbm90IGNyZWF0ZWQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0K K1Rsc1NlcnZpY2VCaW5kaW5nQ3JlYXRlQ2hpbGQgKA0KKyAgSU4gRUZJX1NFUlZJQ0VfQklORElO R19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAq Q2hpbGRIYW5kbGUNCisgICkNCit7DQorICBUTFNfU0VSVklDRSAgICAgICAgICpUbHNTZXJ2aWNl Ow0KKyAgVExTX0lOU1RBTkNFICAgICAgICAqVGxzSW5zdGFuY2U7DQorICBFRklfU1RBVFVTICAg ICAgICAgICBTdGF0dXM7DQorICBFRklfVFBMICAgICAgICAgICAgICBPbGRUcGw7DQorDQorICBp ZiAoKFRoaXMgPT0gTlVMTCkgfHwgKENoaWxkSGFuZGxlID09IE5VTEwpKSB7DQorICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBUbHNTZXJ2aWNlID0gVExTX1NF UlZJQ0VfRlJPTV9USElTIChUaGlzKTsNCisNCisgIFN0YXR1cyA9IFRsc0NyZWF0ZUluc3RhbmNl IChUbHNTZXJ2aWNlLCAmVGxzSW5zdGFuY2UpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgQVNTRVJUIChUbHNJbnN0YW5jZSAh PSBOVUxMKTsNCisNCisgIC8vDQorICAvLyBDcmVhdGUgYSBuZXcgVExTIGNvbm5lY3Rpb24gb2Jq ZWN0Lg0KKyAgLy8NCisgIFRsc0luc3RhbmNlLT5UbHNDb25uID0gVGxzTmV3IChUbHNTZXJ2aWNl LT5UbHNDdHgpOw0KKyAgaWYgKFRsc0luc3RhbmNlLT5UbHNDb25uID09IE5VTEwpIHsNCisgICAg U3RhdHVzID0gRUZJX0FCT1JURUQ7DQorICAgIGdvdG8gT05fRVJST1I7DQorICB9DQorDQorICAv Lw0KKyAgLy8gU2V0IGRlZmF1bHQgQ29ubmVjdGlvbkVuZCB0byBFZmlUbHNDbGllbnQNCisgIC8v DQorICBTdGF0dXMgPSBUbHNTZXRDb25uZWN0aW9uRW5kIChUbHNJbnN0YW5jZS0+VGxzQ29ubiwg RWZpVGxzQ2xpZW50KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgZ290byBP Tl9FUlJPUjsNCisgIH0NCisNCisgIC8vDQorICAvLyBJbnN0YWxsIFRMUyBwcm90b2NvbCBhbmQg Y29uZmlndXJhdGlvbiBwcm90b2NvbCBvbnRvIENoaWxkSGFuZGxlDQorICAvLw0KKyAgU3RhdHVz ID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KKyAgICAgICAgICAg ICAgICAgIENoaWxkSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpVGxzUHJvdG9jb2xH dWlkLA0KKyAgICAgICAgICAgICAgICAgICZUbHNJbnN0YW5jZS0+VGxzLA0KKyAgICAgICAgICAg ICAgICAgICZnRWZpVGxzQ29uZmlndXJhdGlvblByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAg ICAgICAmVGxzSW5zdGFuY2UtPlRsc0NvbmZpZywNCisgICAgICAgICAgICAgICAgICBOVUxMDQor ICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAg Z290byBPTl9FUlJPUjsNCisgIH0NCisNCisgIFRsc0luc3RhbmNlLT5DaGlsZEhhbmRsZSA9ICpD aGlsZEhhbmRsZTsNCisNCisgIC8vDQorICAvLyBBZGQgaXQgdG8gdGhlIFRMUyBzZXJ2aWNlJ3Mg Y2hpbGQgbGlzdC4NCisgIC8vDQorICBPbGRUcGwgPSBnQlMtPlJhaXNlVFBMIChUUExfQ0FMTEJB Q0spOw0KKw0KKyAgSW5zZXJ0VGFpbExpc3QgKCZUbHNTZXJ2aWNlLT5UbHNDaGlsZHJlbkxpc3Qs ICZUbHNJbnN0YW5jZS0+TGluayk7DQorICBUbHNTZXJ2aWNlLT5UbHNDaGlsZHJlbk51bSsrOw0K Kw0KKyAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KKw0KK09OX0VSUk9SOg0KKyAgVGxzQ2xlYW5JbnN0YW5jZSAoVGxzSW5zdGFuY2UpOw0KKyAg cmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQorICBEZXN0cm95cyBhIGNoaWxkIGhhbmRsZSB3 aXRoIGEgcHJvdG9jb2wgaW5zdGFsbGVkIG9uIGl0Lg0KKw0KKyAgVGhlIERlc3Ryb3lDaGlsZCgp IGZ1bmN0aW9uIGRvZXMgdGhlIG9wcG9zaXRlIG9mIENyZWF0ZUNoaWxkKCkuIEl0IHJlbW92ZXMg YSBwcm90b2NvbA0KKyAgdGhhdCB3YXMgaW5zdGFsbGVkIGJ5IENyZWF0ZUNoaWxkKCkgZnJvbSBD aGlsZEhhbmRsZS4gSWYgdGhlIHJlbW92ZWQgcHJvdG9jb2wgaXMgdGhlDQorICBsYXN0IHByb3Rv Y29sIG9uIENoaWxkSGFuZGxlLCB0aGVuIENoaWxkSGFuZGxlIGlzIGRlc3Ryb3llZC4NCisNCisg IEBwYXJhbSAgVGhpcyAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1NFUlZJQ0VfQklORElOR19Q Uk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbSAgQ2hpbGRIYW5kbGUgSGFuZGxlIG9mIHRoZSBj aGlsZCB0byBkZXN0cm95Lg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTICAgICAgICAgICAgVGhl IHByb3RvY29sIHdhcyByZW1vdmVkIGZyb20gQ2hpbGRIYW5kbGUuDQorICBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgICAgICBDaGlsZEhhbmRsZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBwcm90b2Nv bCB0aGF0IGlzIGJlaW5nIHJlbW92ZWQuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBDaGlsZCBoYW5kbGUgaXMgTlVMTC4NCisgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAg IFRoZSBwcm90b2NvbCBjb3VsZCBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBDaGlsZEhhbmRsZQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBpdHMgc2VydmljZXMgYXJl IGJlaW5nIHVzZWQuDQorICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICBUaGUgY2hpbGQg aGFuZGxlIHdhcyBub3QgZGVzdHJveWVkLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkN CitUbHNTZXJ2aWNlQmluZGluZ0Rlc3Ryb3lDaGlsZCAoDQorICBJTiBFRklfU0VSVklDRV9CSU5E SU5HX1BST1RPQ09MICAqVGhpcywNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg IENoaWxkSGFuZGxlDQorICApDQorew0KKyAgVExTX1NFUlZJQ0UgICAgICAgICAgICAgICAgICAg ICpUbHNTZXJ2aWNlOw0KKyAgVExTX0lOU1RBTkNFICAgICAgICAgICAgICAgICAgICpUbHNJbnN0 YW5jZTsNCisNCisgIEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAgICAgICAqVGxzOw0KKyAgRUZJ X1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MICpUbHNDb25maWc7DQorICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX1RQTCAgICAgICAgICAgICAgICAgICAg ICAgIE9sZFRwbDsNCisNCisgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoQ2hpbGRIYW5kbGUgPT0g TlVMTCkpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisg IFRsc1NlcnZpY2UgPSBUTFNfU0VSVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KKw0KKyAgLy8NCisg IC8vIEZpbmQgVExTIHByb3RvY29sIGludGVyZmFjZSBpbnN0YWxsZWQgaW4gQ2hpbGRIYW5kbGUN CisgIC8vDQorICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQorICAgICAgICAgICAgICAg ICAgQ2hpbGRIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlUbHNQcm90b2NvbEd1aWQs DQorICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZUbHMsDQorICAgICAgICAgICAgICAgICAg VGxzU2VydmljZS0+SW1hZ2VIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgTlVMTCwNCisgICAg ICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9IQU5ETEVfUFJPVE9DT0wNCisgICAg ICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1 cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIEZpbmQgVExTIGNvbmZpZ3VyYXRpb24g cHJvdG9jb2wgaW50ZXJmYWNlIGluc3RhbGxlZCBpbiBDaGlsZEhhbmRsZQ0KKyAgLy8NCisgIFN0 YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRs ZSwNCisgICAgICAgICAgICAgICAgICAmZ0VmaVRsc0NvbmZpZ3VyYXRpb25Qcm90b2NvbEd1aWQs DQorICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZUbHNDb25maWcsDQorICAgICAgICAgICAg ICAgICAgVGxzU2VydmljZS0+SW1hZ2VIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgTlVMTCwN CisgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9IQU5ETEVfUFJPVE9DT0wN CisgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgVGxzSW5zdGFuY2UgID0gVExTX0lOU1RBTkNF X0ZST01fUFJPVE9DT0xfVEhJUyAoVGxzKTsNCisNCisgIGlmIChUbHNJbnN0YW5jZS0+U2Vydmlj ZSAhPSBUbHNTZXJ2aWNlKSB7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQor ICB9DQorDQorICBpZiAoVGxzSW5zdGFuY2UtPkluRGVzdHJveSkgew0KKyAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQorICB9DQorDQorICBPbGRUcGwgPSBnQlMtPlJhaXNlVFBMIChUUExfQ0FMTEJB Q0spOw0KKw0KKyAgVGxzSW5zdGFuY2UtPkluRGVzdHJveSA9IFRSVUU7DQorDQorICAvLw0KKyAg Ly8gVW5pbnN0YWxsIHRoZSBUTFMgcHJvdG9jb2wgYW5kIFRMUyBDb25maWd1cmF0aW9uIFByb3Rv Y29sIGludGVyZmFjZSBpbnN0YWxsZWQgaW4gQ2hpbGRIYW5kbGUuDQorICAvLw0KKyAgU3RhdHVz ID0gZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQorICAgICAgICAg ICAgICAgICAgQ2hpbGRIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlUbHNQcm90b2Nv bEd1aWQsDQorICAgICAgICAgICAgICAgICAgVGxzLA0KKyAgICAgICAgICAgICAgICAgICZnRWZp VGxzQ29uZmlndXJhdGlvblByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICBUbHNDb25m aWcsDQorICAgICAgICAgICAgICAgICAgTlVMTA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQor ICBSZW1vdmVFbnRyeUxpc3QgKCZUbHNJbnN0YW5jZS0+TGluayk7DQorICBUbHNTZXJ2aWNlLT5U bHNDaGlsZHJlbk51bS0tOw0KKw0KKyAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KKw0KKyAg VGxzQ2xlYW5JbnN0YW5jZSAoVGxzSW5zdGFuY2UpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KK30NCmRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNEcml2ZXIuaCBiL05ldHdv cmtQa2cvVGxzRHhlL1Rsc0RyaXZlci5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMC4uYzNjMzBhOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxz RHJpdmVyLmgNCkBAIC0wLDAgKzEsMjM3IEBADQorLyoqIEBmaWxlDQorICBIZWFkZXIgZmlsZSBv ZiB0aGUgRHJpdmVyIEJpbmRpbmcgYW5kIFNlcnZpY2UgQmluZGluZyBQcm90b2NvbCBmb3IgVGxz RHhlIGRyaXZlci4NCisNCisgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorICB3aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxp Y2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv YnNkLWxpY2Vuc2UucGhwLg0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM SUVELg0KKw0KKyoqLw0KKw0KKyNpZm5kZWYgX19FRklfVExTX0RSSVZFUl9IX18NCisjZGVmaW5l IF9fRUZJX1RMU19EUklWRVJfSF9fDQorDQorI2luY2x1ZGUgPFVlZmkuaD4NCisNCisvLw0KKy8v IERyaXZlciBQcm90b2NvbHMNCisvLw0KKyNpbmNsdWRlIDxQcm90b2NvbC9TZXJ2aWNlQmluZGlu Zy5oPg0KKw0KKy8vDQorLy8gRHJpdmVyIFZlcnNpb24NCisvLw0KKyNkZWZpbmUgVExTX1ZFUlNJ T04gIDB4MDAwMDAwMDANCisNCisjZGVmaW5lIFRMU19TRVJWSUNFX1NJR05BVFVSRSAgICBTSUdO QVRVUkVfMzIgKCdUJywgJ0wnLCAnUycsICdTJykNCisNCisjZGVmaW5lIFRMU19JTlNUQU5DRV9T SUdOQVRVUkUgICBTSUdOQVRVUkVfMzIgKCdUJywgJ0wnLCAnUycsICdJJykNCisNCisvLy8NCisv Ly8gVExTIFNlcnZpY2UgRGF0YQ0KKy8vLw0KK3R5cGVkZWYgc3RydWN0IF9UTFNfU0VSVklDRSAg VExTX1NFUlZJQ0U7DQorDQorLy8vDQorLy8vIFRMUyBJbnN0YW5jZSBEYXRhDQorLy8vDQordHlw ZWRlZiBzdHJ1Y3QgX1RMU19JTlNUQU5DRSBUTFNfSU5TVEFOQ0U7DQorDQorDQorc3RydWN0IF9U TFNfU0VSVklDRSB7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVy ZTsNCisgIEVGSV9TRVJWSUNFX0JJTkRJTkdfUFJPVE9DT0wgICAgU2VydmljZUJpbmRpbmc7DQor DQorICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgIFRsc0NoaWxkcmVuTnVtOw0KKyAg TElTVF9FTlRSWSAgICAgICAgICAgICAgICAgICAgICBUbHNDaGlsZHJlbkxpc3Q7DQorDQorICAv Lw0KKyAgLy8gSGFuZGxlIHRvIGluc3RhbGwgVGxzU2VydmljZUJpbmRpbmcgcHJvdG9jb2wuDQor ICAvLw0KKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICBIYW5kbGU7DQorICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlOw0KKw0KKyAgLy8NCisgIC8v IE1haW4gU1NMIENvbnRleHQgb2JqZWN0IHdoaWNoIGlzIGNyZWF0ZWQgYnkgYSBzZXJ2ZXIgb3Ig Y2xpZW50IG9uY2UgcGVyIHByb2dyYW0NCisgIC8vIGxpZmUtdGltZSBhbmQgd2hpY2ggaG9sZHMg bWFpbmx5IGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgU1NMIG9iamVjdCB3aGljaCBhcmUgbGF0ZXIN CisgIC8vIGNyZWF0ZWQgZm9yIHRoZSBjb25uZWN0aW9ucy4NCisgIC8vDQorICBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpUbHNDdHg7DQorfTsNCisNCitzdHJ1Y3QgX1RMU19JTlNU QU5DRSB7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTsNCisg IExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgTGluazsNCisNCisgIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgICAgSW5EZXN0cm95Ow0KKw0KKyAgVExTX1NFUlZJQ0UgICAgICAg ICAgICAgICAgICAgICAqU2VydmljZTsNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgQ2hpbGRIYW5kbGU7DQorDQorICBFRklfVExTX1BST1RPQ09MICAgICAgICAgICAgICAgIFRs czsNCisgIEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCAgVGxzQ29uZmlnOw0KKw0KKyAg RUZJX1RMU19TRVNTSU9OX1NUQVRFICAgICAgICAgICBUbHNTZXNzaW9uU3RhdGU7DQorDQorICAv Lw0KKyAgLy8gTWFpbiBTU0wgQ29ubmVjdGlvbiB3aGljaCBpcyBjcmVhdGVkIGJ5IGEgc2VydmVy IG9yIGEgY2xpZW50DQorICAvLyBwZXIgZXN0YWJsaXNoZWQgY29ubmVjdGlvbi4NCisgIC8vDQor ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUbHNDb25uOw0KK307DQorDQorDQor I2RlZmluZSBUTFNfU0VSVklDRV9GUk9NX1RISVMoYSkgICBcDQorICBDUiAoYSwgVExTX1NFUlZJ Q0UsIFNlcnZpY2VCaW5kaW5nLCBUTFNfU0VSVklDRV9TSUdOQVRVUkUpDQorDQorI2RlZmluZSBU TFNfSU5TVEFOQ0VfRlJPTV9QUk9UT0NPTF9USElTKGEpICBcDQorICBDUiAoYSwgVExTX0lOU1RB TkNFLCBUbHMsIFRMU19JTlNUQU5DRV9TSUdOQVRVUkUpDQorDQorI2RlZmluZSBUTFNfSU5TVEFO Q0VfRlJPTV9DT05GSUdVUkFUSU9OX1RISVMoYSkgIFwNCisgIENSIChhLCBUTFNfSU5TVEFOQ0Us IFRsc0NvbmZpZywgVExTX0lOU1RBTkNFX1NJR05BVFVSRSkNCisNCisNCisvKioNCisgIFJlbGVh c2UgYWxsIHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgVExTIGluc3RhbmNlLg0KKw0KKyAgQHBh cmFtW2luXSAgSW5zdGFuY2UgICAgICAgIFRoZSBUTFMgaW5zdGFuY2UgZGF0YS4NCisNCisqKi8N CitWT0lEDQorVGxzQ2xlYW5JbnN0YW5jZSAoDQorICBJTiBUTFNfSU5TVEFOQ0UgICAgICAgICAg ICpJbnN0YW5jZQ0KKyAgKTsNCisNCisvKioNCisgIENyZWF0ZSB0aGUgVExTIGluc3RhbmNlIGFu ZCBpbml0aWFsaXplIGl0Lg0KKw0KKyAgQHBhcmFtW2luXSAgU2VydmljZSAgICAgICAgICAgICAg VGhlIHBvaW50ZXIgdG8gdGhlIFRMUyBzZXJ2aWNlLg0KKyAgQHBhcmFtW291dF0gSW5zdGFuY2Ug ICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIFRMUyBpbnN0YW5jZS4NCisNCisgIEByZXR2 YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmVzb3VyY2VzLg0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBUTFMgaW5zdGFuY2UgaXMgY3Jl YXRlZC4NCisNCisqKi8NCitFRklfU1RBVFVTDQorVGxzQ3JlYXRlSW5zdGFuY2UgKA0KKyAgSU4g IFRMU19TRVJWSUNFICAgICAgICAgKlNlcnZpY2UsDQorICBPVVQgVExTX0lOU1RBTkNFICAgICAg ICAqKkluc3RhbmNlDQorICApOw0KKw0KKy8qKg0KKyAgUmVsZWFzZSBhbGwgdGhlIHJlc291cmNl cyB1c2VkIGJ5IHRoZSBUTFMgc2VydmljZSBiaW5kaW5nIGluc3RhbmNlLg0KKw0KKyAgQHBhcmFt W2luXSAgU2VydmljZSAgICAgICAgVGhlIFRMUyBzZXJ2aWNlIGRhdGEuDQorDQorKiovDQorVk9J RA0KK1Rsc0NsZWFuU2VydmljZSAoDQorICBJTiBUTFNfU0VSVklDRSAgICAgKlNlcnZpY2UNCisg ICk7DQorDQorLyoqDQorICBDcmVhdGUgdGhlbiBpbml0aWFsaXplIGEgVExTIHNlcnZpY2UuDQor DQorICBAcGFyYW1baW5dICBJbWFnZSAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlIG9mIHRo ZSBUTFMgZHJpdmVyDQorICBAcGFyYW1bb3V0XSBTZXJ2aWNlICAgICAgICAgICAgICAgIFRoZSBz ZXJ2aWNlIGZvciBUTFMgZHJpdmVyDQorDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICAgRmFpbGVkIHRvIGFsbG9jYXRlIHJlc291cmNlIHRvIGNyZWF0ZSB0aGUgc2VydmljZS4NCisg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgc2VydmljZSBpcyBjcmVhdGVkIGZv ciB0aGUgZHJpdmVyLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitUbHNDcmVhdGVTZXJ2aWNlICgN CisgIElOICBFRklfSEFORExFICAgICAgICAgICAgSW1hZ2UsDQorICBPVVQgVExTX1NFUlZJQ0Ug ICAgICAgICAgICoqU2VydmljZQ0KKyAgKTsNCisNCisvKioNCisgIFVubG9hZHMgYW4gaW1hZ2Uu DQorDQorICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBIYW5kbGUgdGhhdCBpZGVudGlm aWVzIHRoZSBpbWFnZSB0byBiZSB1bmxvYWRlZC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBpbWFnZSBoYXMgYmVlbiB1bmxvYWRlZC4NCisgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIEltYWdlSGFuZGxlIGlzIG5vdCBhIHZhbGlkIGltYWdlIGhhbmRsZS4N CisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorVGxzVW5sb2FkICgNCisgIElOIEVGSV9I QU5ETEUgIEltYWdlSGFuZGxlDQorICApOw0KKw0KKy8qKg0KKyAgVGhpcyBpcyB0aGUgZGVjbGFy YXRpb24gb2YgYW4gRUZJIGltYWdlIGVudHJ5IHBvaW50LiBUaGlzIGVudHJ5IHBvaW50IGlzDQor ICB0aGUgc2FtZSBmb3IgVUVGSSBBcHBsaWNhdGlvbnMsIFVFRkkgT1MgTG9hZGVycywgYW5kIFVF RkkgRHJpdmVycyBpbmNsdWRpbmcNCisgIGJvdGggZGV2aWNlIGRyaXZlcnMgYW5kIGJ1cyBkcml2 ZXJzLg0KKw0KKyAgQHBhcmFtICBJbWFnZUhhbmRsZSAgICAgICAgICAgVGhlIGZpcm13YXJlIGFs bG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBVRUZJIGltYWdlLg0KKyAgQHBhcmFtICBTeXN0ZW1UYWJs ZSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KKw0KKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vz c2Z1bGx5Lg0KKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgQW4gdW5leHBlY3RlZCBl cnJvciBvY2N1cnJlZC4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorVGxzRHJpdmVyRW50 cnlQb2ludCAoDQorICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCisgIElOIEVG SV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KKyAgKTsNCisNCisvKioNCisgIENyZWF0ZXMg YSBjaGlsZCBoYW5kbGUgYW5kIGluc3RhbGxzIGEgcHJvdG9jb2wuDQorDQorICBUaGUgQ3JlYXRl Q2hpbGQoKSBmdW5jdGlvbiBpbnN0YWxscyBhIHByb3RvY29sIG9uIENoaWxkSGFuZGxlLg0KKyAg SWYgQ2hpbGRIYW5kbGUgaXMgYSBwb2ludGVyIHRvIE5VTEwsIHRoZW4gYSBuZXcgaGFuZGxlIGlz IGNyZWF0ZWQgYW5kIHJldHVybmVkIGluIENoaWxkSGFuZGxlLg0KKyAgSWYgQ2hpbGRIYW5kbGUg aXMgbm90IGEgcG9pbnRlciB0byBOVUxMLCB0aGVuIHRoZSBwcm90b2NvbCBpbnN0YWxscyBvbiB0 aGUgZXhpc3RpbmcgQ2hpbGRIYW5kbGUuDQorDQorICBAcGFyYW1baW5dIFRoaXMgICAgICAgIFBv aW50ZXIgdG8gdGhlIEVGSV9TRVJWSUNFX0JJTkRJTkdfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBA cGFyYW1baW5dIENoaWxkSGFuZGxlIFBvaW50ZXIgdG8gdGhlIGhhbmRsZSBvZiB0aGUgY2hpbGQg dG8gY3JlYXRlLiBJZiBpdCBpcyBOVUxMLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGVu IGEgbmV3IGhhbmRsZSBpcyBjcmVhdGVkLiBJZiBpdCBpcyBhIHBvaW50ZXIgdG8gYW4gZXhpc3Rp bmcgVUVGSSBoYW5kbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIHByb3Rv Y29sIGlzIGFkZGVkIHRvIHRoZSBleGlzdGluZyBVRUZJIGhhbmRsZS4NCisNCisgIEByZXR2YWwg RUZJX1NVQ0NFUyAgICAgICAgICAgIFRoZSBwcm90b2NvbCB3YXMgYWRkZWQgdG8gQ2hpbGRIYW5k bGUuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBOVUxM Lg0KKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgYXJlIG5vdCBlbm91Z2gg cmVzb3VyY2VzIGF2YWlsYWJsZSB0byBjcmVhdGUNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZSBjaGlsZC4NCisgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgIFRoZSBj aGlsZCBoYW5kbGUgd2FzIG5vdCBjcmVhdGVkLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklB UEkNCitUbHNTZXJ2aWNlQmluZGluZ0NyZWF0ZUNoaWxkICgNCisgIElOIEVGSV9TRVJWSUNFX0JJ TkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICAgKkNoaWxkSGFuZGxlDQorICApOw0KKw0KKy8qKg0KKyAgRGVzdHJveXMgYSBjaGlsZCBoYW5k bGUgd2l0aCBhIHByb3RvY29sIGluc3RhbGxlZCBvbiBpdC4NCisNCisgIFRoZSBEZXN0cm95Q2hp bGQoKSBmdW5jdGlvbiBkb2VzIHRoZSBvcHBvc2l0ZSBvZiBDcmVhdGVDaGlsZCgpLiBJdCByZW1v dmVzIGEgcHJvdG9jb2wNCisgIHRoYXQgd2FzIGluc3RhbGxlZCBieSBDcmVhdGVDaGlsZCgpIGZy b20gQ2hpbGRIYW5kbGUuIElmIHRoZSByZW1vdmVkIHByb3RvY29sIGlzIHRoZQ0KKyAgbGFzdCBw cm90b2NvbCBvbiBDaGlsZEhhbmRsZSwgdGhlbiBDaGlsZEhhbmRsZSBpcyBkZXN0cm95ZWQuDQor DQorICBAcGFyYW0gIFRoaXMgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVGSV9TRVJWSUNFX0JJTkRJ TkdfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW0gIENoaWxkSGFuZGxlIEhhbmRsZSBvZiB0 aGUgY2hpbGQgdG8gZGVzdHJveS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFUyAgICAgICAgICAg IFRoZSBwcm90b2NvbCB3YXMgcmVtb3ZlZCBmcm9tIENoaWxkSGFuZGxlLg0KKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgQ2hpbGRIYW5kbGUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcHJv dG9jb2wgdGhhdCBpcyBiZWluZyByZW1vdmVkLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgQ2hpbGQgaGFuZGxlIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVE ICAgICBUaGUgcHJvdG9jb2wgY291bGQgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgQ2hpbGRIYW5k bGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXRzIHNlcnZpY2Vz IGFyZSBiZWluZyB1c2VkLg0KKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgVGhlIGNo aWxkIGhhbmRsZSB3YXMgbm90IGRlc3Ryb3llZC4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJ QVBJDQorVGxzU2VydmljZUJpbmRpbmdEZXN0cm95Q2hpbGQgKA0KKyAgSU4gRUZJX1NFUlZJQ0Vf QklORElOR19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgICBDaGlsZEhhbmRsZQ0KKyAgKTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9OZXR3b3Jr UGtnL1Rsc0R4ZS9UbHNEeGUuaW5mIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzRHhlLmluZg0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmRiYTMyNTcNCi0tLSAvZGV2L251bGwN CisrKyBiL05ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZS5pbmYNCkBAIC0wLDAgKzEsNjUgQEANCisj IyBAZmlsZQ0KKyMgIFRoaXMgbW9kdWxlIHByb2R1Y2VzIEVGSSBUTFMgUHJvdG9jb2wsIEVGSSBU TFMgU2VydmljZSBCaW5kaW5nIFByb3RvY29sIGFuZA0KKyMgIEVGSSBUTFMgQ29uZmlndXJhdGlv biBQcm90b2NvbC4NCisjDQorIyAgVGhpcyBtb2R1bGUgcHJvZHVjZXMgRUZJIFRMUyAoVHJhbnNw b3J0IExheWVyIFNlY3VyaXR5KSBQcm90b2NvbCBhbmQgRUZJIFRMUw0KKyMgIFNlcnZpY2UgQmlu ZGluZyBQcm90b2NvbCwgdG8gcHJvdmlkZSBUTFMgc2VydmljZXMuDQorIw0KKyMgIENvcHlyaWdo dCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0K KyMNCisjICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorIyAg YXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRp dGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQor IyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4NCisjICBU SEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFT IElTIiBCQVNJUywNCisjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9G IEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKyMNCisjDQorIyMNCisNCitb RGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQorICBC QVNFX05BTUUgICAgICAgICAgICAgICAgID0gVGxzRHhlDQorICBGSUxFX0dVSUQgICAgICAgICAg ICAgICAgID0gM2FjZWIwYzAtM2M3Mi0xMWU0LTlhNTYtNzRkNDM1MDUyNjQ2DQorICBNT0RVTEVf VFlQRSAgICAgICAgICAgICAgID0gVUVGSV9EUklWRVINCisgIFZFUlNJT05fU1RSSU5HICAgICAg ICAgICAgPSAxLjANCisgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgPSBUbHNEcml2ZXJFbnRy eVBvaW50DQorICBVTkxPQURfSU1BR0UgICAgICAgICAgICAgID0gVGxzVW5sb2FkDQorICBNT0RV TEVfVU5JX0ZJTEUgICAgICAgICAgID0gVGxzRHhlLnVuaQ0KKw0KKyMNCisjICBWQUxJRF9BUkNI SVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0DQorIw0KKw0KK1tQYWNrYWdlc10NCisgIE1k ZVBrZy9NZGVQa2cuZGVjDQorICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KKyAgQ3J5 cHRvUGtnL0NyeXB0b1BrZy5kZWMNCisNCitbU291cmNlc10NCisgIFRsc0RyaXZlci5oDQorICBU bHNEcml2ZXIuYw0KKyAgVGxzUHJvdG9jb2wuYw0KKyAgVGxzQ29uZmlnUHJvdG9jb2wuYw0KKyAg VGxzSW1wbC5oDQorICBUbHNJbXBsLmMNCisNCitbTGlicmFyeUNsYXNzZXNdDQorICBVZWZpRHJp dmVyRW50cnlQb2ludA0KKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQorICBNZW1vcnlBbGxv Y2F0aW9uTGliDQorICBCYXNlTWVtb3J5TGliDQorICBCYXNlTGliDQorICBVZWZpTGliDQorICBE ZWJ1Z0xpYg0KKyAgTmV0TGliDQorICBCYXNlQ3J5cHRMaWINCisgIFRsc0xpYg0KKw0KK1tQcm90 b2NvbHNdDQorICBnRWZpVGxzU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQgICAgICAgICAgIyMg UFJPRFVDRVMNCisgIGdFZmlUbHNQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAj IyBQUk9EVUNFUw0KKyAgZ0VmaVRsc0NvbmZpZ3VyYXRpb25Qcm90b2NvbEd1aWQgICAgICAgICAg ICMjIFBST0RVQ0VTDQorDQorW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJd DQorICBUbHNEeGVFeHRyYS51bmkNCmRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNE eGUudW5pIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzRHhlLnVuaQ0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAuLjk4YzQxY2ENCi0tLSAvZGV2L251bGwNCisrKyBiL05ldHdvcmtQ a2cvVGxzRHhlL1Rsc0R4ZS51bmkNCkBAIC0wLDAgKzEsMjUgQEANCisvLyAvKiogQGZpbGUNCisv LyBUaGlzIG1vZHVsZSBwcm9kdWNlcyBFRkkgVExTIFByb3RvY29sLCBFRkkgVExTIFNlcnZpY2Ug QmluZGluZyBQcm90b2NvbCBhbmQNCisvLyBFRkkgVExTIENvbmZpZ3VyYXRpb24gUHJvdG9jb2wu DQorLy8NCisvLyBUaGlzIG1vZHVsZSBwcm9kdWNlcyBFRkkgVExTIChUcmFuc3BvcnQgTGF5ZXIg U2VjdXJpdHkpIFByb3RvY29sLCBFRkkgVExTDQorLy8gU2VydmljZSBCaW5kaW5nIFByb3RvY29s LCBhbmQgRUZJIFRMUyBDb25maWd1cmF0aW9uIFByb3RvY29sIHRvIHByb3ZpZGUgVExTDQorLy8g c2VydmljZXMuDQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisvLw0KKy8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisvLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCisv LyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2Yg dGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xp Y2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KKy8vDQorLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVU RUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorLy8gV0lUSE9V VCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF U1MgT1IgSU1QTElFRC4NCisvLw0KKy8vICoqLw0KKw0KKw0KKyNzdHJpbmcgU1RSX01PRFVMRV9B QlNUUkFDVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlVFRkkgVExTIHNlcnZpY2UiDQor DQorI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiVGhpcyBtb2R1bGUgcHJvZHVjZXMgRUZJIFRMUyBQcm90b2NvbCwgRUZJIFRMUyBTZXJ2aWNl IEJpbmRpbmcgUHJvdG9jb2wgYW5kIEVGSSBUTFMgQ29uZmlndXJhdGlvbiBQcm90b2NvbCB0byBw cm92aWRlIEVGSSBUTFMgc2VydmljZXMuIg0KKw0KZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvVGxz RHhlL1Rsc0R4ZUV4dHJhLnVuaSBiL05ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZUV4dHJhLnVuaQ0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmEzODU4MmENCi0tLSAvZGV2L251 bGwNCisrKyBiL05ldHdvcmtQa2cvVGxzRHhlL1Rsc0R4ZUV4dHJhLnVuaQ0KQEAgLTAsMCArMSwx OCBAQA0KKy8vIC8qKiBAZmlsZQ0KKy8vIFRsc0R4ZSBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQgQ29u dGVudA0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQorLy8NCisvLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQorLy8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorLy8gd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxp Y2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L2JzZC1saWNlbnNlLnBocC4NCisvLw0KKy8vIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KKy8vIFdJVEhPVVQgV0FS UkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S IElNUExJRUQuDQorLy8NCisvLyAqKi8NCisNCisjc3RyaW5nIFNUUl9QUk9QRVJUSUVTX01PRFVM RV9OQU1FDQorI2xhbmd1YWdlIGVuLVVTDQorIkVGSSBUTFMgRFhFIERyaXZlciINCmRpZmYgLS1n aXQgYS9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNJbXBsLmMgYi9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNJ bXBsLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi41ZmIxZTc4DQotLS0g L2Rldi9udWxsDQorKysgYi9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNJbXBsLmMNCkBAIC0wLDAgKzEs MjcwIEBADQorLyoqIEBmaWxlDQorICBUaGUgTWlzY2VsbGFuZW91cyBSb3V0aW5lcyBmb3IgVGxz RHhlIGRyaXZlci4NCisNCitDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisNCitUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQorYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQord2hpY2ggYWNjb21w YW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1h eSBiZSBmb3VuZCBhdA0KK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5z ZS5waHANCisNCitUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIiBCQVNJUywNCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5U QVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KKw0KKyoqLw0K Kw0KKyNpbmNsdWRlICJUbHNJbXBsLmgiDQorDQorLyoqDQorICBFbmNyeXB0IHRoZSBtZXNzYWdl IGxpc3RlZCBpbiBmcmFnbWVudC4NCisNCisgIEBwYXJhbVtpbl0gICAgICAgVGxzSW5zdGFuY2Ug ICAgVGhlIHBvaW50ZXIgdG8gdGhlIFRMUyBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbiwgb3V0XSAg RnJhZ21lbnRUYWJsZSAgUG9pbnRlciB0byBhIGxpc3Qgb2YgZnJhZ21lbnQuDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE9uIGlucHV0IHRoZXNlIGZyYWdtZW50cyBjb250YWlu IHRoZSBUTFMgaGVhZGVyIGFuZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw bGFpbiB0ZXh0IFRMUyBwYXlsb2FkOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPbiBvdXRwdXQgdGhlc2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5kDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlciB0ZXh0IFRMUyBwYXlsb2Fk Lg0KKyAgQHBhcmFtW2luXSAgICAgICBGcmFnbWVudENvdW50ICBOdW1iZXIgb2YgZnJhZ21lbnQu DQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gY29t cGxldGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAg Q2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCisgIEByZXR2YWwgRUZJX0FCT1JURUQg ICAgICAgICAgICAgVExTIHNlc3Npb24gc3RhdGUgaXMgaW5jb3JyZWN0Lg0KKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KKyoqLw0K K0VGSV9TVEFUVVMNCitUbHNFY3J5cHRQYWNrZXQgKA0KKyAgSU4gICAgIFRMU19JTlNUQU5DRSAg ICAgICAgICAgICAgICAgICpUbHNJbnN0YW5jZSwNCisgIElOIE9VVCBFRklfVExTX0ZSQUdNRU5U X0RBVEEgICAgICAgICAqKkZyYWdtZW50VGFibGUsDQorICBJTiAgICAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgKkZyYWdtZW50Q291bnQNCisgICkNCit7DQorICBVSU5UTiAgICAgICAg ICAgICAgIEluZGV4Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICBCeXRlc0NvcGllZDsNCisgIFVJ TlQzMiAgICAgICAgICAgICAgQnVmZmVySW5TaXplOw0KKyAgVUlOVDggICAgICAgICAgICAgICAq QnVmZmVySW47DQorICBVSU5UOCAgICAgICAgICAgICAgICpCdWZmZXJJblB0cjsNCisgIFRMU19S RUNPUkRfSEVBREVSICAgKlJlY29yZEhlYWRlckluOw0KKyAgVUlOVDE2ICAgICAgICAgICAgICBU aGlzUGxhaW5NZXNzYWdlU2l6ZTsNCisgIFRMU19SRUNPUkRfSEVBREVSICAgKlRlbXBSZWNvcmRI ZWFkZXI7DQorICBVSU5UMTYgICAgICAgICAgICAgIFRoaXNNZXNzYWdlU2l6ZTsNCisgIFVJTlQz MiAgICAgICAgICAgICAgQnVmZmVyT3V0U2l6ZTsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgKkJ1 ZmZlck91dDsNCisgIElOVE4gICAgICAgICAgICAgICAgUmV0Ow0KKw0KKyAgQnl0ZXNDb3BpZWQg ICAgICA9IDA7DQorICBCdWZmZXJJblNpemUgICAgID0gMDsNCisgIEJ1ZmZlckluICAgICAgICAg PSBOVUxMOw0KKyAgQnVmZmVySW5QdHIgICAgICA9IE5VTEw7DQorICBSZWNvcmRIZWFkZXJJbiAg ID0gTlVMTDsNCisgIFRlbXBSZWNvcmRIZWFkZXIgPSBOVUxMOw0KKyAgQnVmZmVyT3V0U2l6ZSAg ICA9IDA7DQorICBCdWZmZXJPdXQgICAgICAgID0gTlVMTDsNCisgIFJldCAgICAgICAgICAgICAg PSAwOw0KKw0KKyAgLy8NCisgIC8vIENhbGN1bGF0ZSB0aGUgc2l6ZSBhY2NvcmRpbmcgdG8gdGhl IGZyYWdtZW50IHRhYmxlLg0KKyAgLy8NCisgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICpGcmFn bWVudENvdW50OyBJbmRleCsrKSB7DQorICAgIEJ1ZmZlckluU2l6ZSArPSAoKkZyYWdtZW50VGFi bGUpW0luZGV4XS5GcmFnbWVudExlbmd0aDsNCisgIH0NCisNCisgIC8vDQorICAvLyBBbGxvY2F0 ZSBidWZmZXIgZm9yIHByb2Nlc3NpbmcgZGF0YS4NCisgIC8vDQorICBCdWZmZXJJbiA9IEFsbG9j YXRlWmVyb1Bvb2wgKEJ1ZmZlckluU2l6ZSk7DQorICBpZiAoQnVmZmVySW4gPT0gTlVMTCkgew0K KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorDQorICAvLw0KKyAgLy8g Q29weSBhbGwgVExTIHBsYWluIHJlY29yZCBoZWFkZXIgYW5kIHBheWxvYWQgaW50byBQcm9jZXNz QnVmZmVyLg0KKyAgLy8NCisgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICpGcmFnbWVudENvdW50 OyBJbmRleCsrKSB7DQorICAgIENvcHlNZW0gKA0KKyAgICAgIChCdWZmZXJJbiArIEJ5dGVzQ29w aWVkKSwNCisgICAgICAoKkZyYWdtZW50VGFibGUpW0luZGV4XS5GcmFnbWVudEJ1ZmZlciwNCisg ICAgICAoKkZyYWdtZW50VGFibGUpW0luZGV4XS5GcmFnbWVudExlbmd0aA0KKyAgICAgICk7DQor ICAgIEJ5dGVzQ29waWVkICs9ICgqRnJhZ21lbnRUYWJsZSlbSW5kZXhdLkZyYWdtZW50TGVuZ3Ro Ow0KKyAgfQ0KKw0KKyAgQnVmZmVyT3V0ID0gQWxsb2NhdGVaZXJvUG9vbCAoTUFYX0JVRkZFUl9T SVpFKTsNCisgIGlmIChCdWZmZXJPdXQgPT0gTlVMTCkgew0KKyAgICBGcmVlUG9vbCAoQnVmZmVy SW4pOw0KKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorDQorICAvLw0K KyAgLy8gUGFyc2luZyBidWZmZXIuDQorICAvLw0KKyAgQnVmZmVySW5QdHIgPSBCdWZmZXJJbjsN CisgIFRlbXBSZWNvcmRIZWFkZXIgPSAoVExTX1JFQ09SRF9IRUFERVIgKikgQnVmZmVyT3V0Ow0K KyAgd2hpbGUgKChVSU5UTikgQnVmZmVySW5QdHIgPCAoVUlOVE4pIEJ1ZmZlckluICsgQnVmZmVy SW5TaXplKSB7DQorICAgIFJlY29yZEhlYWRlckluID0gKFRMU19SRUNPUkRfSEVBREVSICopIEJ1 ZmZlckluUHRyOw0KKyAgICBBU1NFUlQgKFJlY29yZEhlYWRlckluLT5Db250ZW50VHlwZSA9PSBU TFNfQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX0RBVEEpOw0KKyAgICBUaGlzUGxhaW5NZXNzYWdl U2l6ZSA9IFJlY29yZEhlYWRlckluLT5MZW5ndGg7DQorDQorICAgIFRsc1dyaXRlIChUbHNJbnN0 YW5jZS0+VGxzQ29ubiwgKFVJTlQ4ICopIChSZWNvcmRIZWFkZXJJbiArIDEpLCBUaGlzUGxhaW5N ZXNzYWdlU2l6ZSk7DQorICAgIA0KKyAgICBSZXQgPSBUbHNDdHJsVHJhZmZpY091dCAoVGxzSW5z dGFuY2UtPlRsc0Nvbm4sIChVSU5UOCAqKShUZW1wUmVjb3JkSGVhZGVyKSwgTUFYX0JVRkZFUl9T SVpFKTsNCisNCisgICAgaWYgKFJldCA+IDApIHsNCisgICAgICBUaGlzTWVzc2FnZVNpemUgPSAo VUlOVDE2KSBSZXQ7DQorICAgIH0gZWxzZSB7DQorICAgICAgVGhpc01lc3NhZ2VTaXplID0gMDsN CisgICAgfQ0KKw0KKyAgICBCdWZmZXJPdXRTaXplICs9IFRoaXNNZXNzYWdlU2l6ZTsNCisNCisg ICAgQnVmZmVySW5QdHIgKz0gUkVDT1JEX0hFQURFUl9MRU4gKyBUaGlzUGxhaW5NZXNzYWdlU2l6 ZTsNCisgICAgVGVtcFJlY29yZEhlYWRlciArPSBUaGlzTWVzc2FnZVNpemU7DQorICB9DQorDQor ICBGcmVlUG9vbCAoQnVmZmVySW4pOw0KKw0KKyAgLy8NCisgIC8vIFRoZSBjYWxsZXIgd2lsbCB0 YWtlIHJlc3BvbnNpYmxlIHRvIGhhbmRsZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgdGFibGUuDQor ICAvLw0KKyAgKkZyYWdtZW50VGFibGUgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKEVGSV9U TFNfRlJBR01FTlRfREFUQSkpOw0KKyAgaWYgKCpGcmFnbWVudFRhYmxlID09IE5VTEwpIHsNCisg ICAgRnJlZVBvb2wgKEJ1ZmZlck91dCk7DQorICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNF UzsNCisgIH0NCisNCisgICgqRnJhZ21lbnRUYWJsZSlbMF0uRnJhZ21lbnRCdWZmZXIgID0gQnVm ZmVyT3V0Ow0KKyAgKCpGcmFnbWVudFRhYmxlKVswXS5GcmFnbWVudExlbmd0aCAgPSBCdWZmZXJP dXRTaXplOw0KKyAgKkZyYWdtZW50Q291bnQgICAgICAgICAgICAgICAgICAgICAgPSAxOw0KKw0K KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIERlY3J5cHQgdGhlIG1lc3Nh Z2UgbGlzdGVkIGluIGZyYWdtZW50Lg0KKw0KKyAgQHBhcmFtW2luXSAgICAgICBUbHNJbnN0YW5j ZSAgICBUaGUgcG9pbnRlciB0byB0aGUgVExTIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luLCBvdXRd ICBGcmFnbWVudFRhYmxlICBQb2ludGVyIHRvIGEgbGlzdCBvZiBmcmFnbWVudC4NCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gaW5wdXQgdGhlc2UgZnJhZ21lbnRzIGNvbnRh aW4gdGhlIFRMUyBoZWFkZXIgYW5kDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNpcGhlciB0ZXh0IFRMUyBwYXlsb2FkOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPbiBvdXRwdXQgdGhlc2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5k DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgVExTIHBheWxv YWQuDQorICBAcGFyYW1baW5dICAgICAgIEZyYWdtZW50Q291bnQgIE51bWJlciBvZiBmcmFnbWVu dC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBj b21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg ICBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgcmVzb3VyY2VzLg0KKyAgQHJldHZhbCBFRklfQUJPUlRF RCAgICAgICAgICAgICBUTFMgc2Vzc2lvbiBzdGF0ZSBpcyBpbmNvcnJlY3QuDQorICBAcmV0dmFs IE90aGVycyAgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQorKiov DQorRUZJX1NUQVRVUw0KK1Rsc0RlY3J5cHRQYWNrZXQgKA0KKyAgSU4gICAgIFRMU19JTlNUQU5D RSAgICAgICAgICAgICAgICAgICpUbHNJbnN0YW5jZSwNCisgIElOIE9VVCBFRklfVExTX0ZSQUdN RU5UX0RBVEEgICAgICAgICAqKkZyYWdtZW50VGFibGUsDQorICBJTiAgICAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgKkZyYWdtZW50Q291bnQNCisgICkNCit7DQorICBVSU5UTiAgICAg ICAgICAgICAgIEluZGV4Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICBCeXRlc0NvcGllZDsNCisg IFVJTlQ4ICAgICAgICAgICAgICAgKkJ1ZmZlckluOw0KKyAgVUlOVDMyICAgICAgICAgICAgICBC dWZmZXJJblNpemU7DQorICBVSU5UOCAgICAgICAgICAgICAgICpCdWZmZXJJblB0cjsNCisgIFRM U19SRUNPUkRfSEVBREVSICAgKlJlY29yZEhlYWRlckluOw0KKyAgVUlOVDE2ICAgICAgICAgICAg ICBUaGlzQ2lwaGVyTWVzc2FnZVNpemU7DQorICBUTFNfUkVDT1JEX0hFQURFUiAgICpUZW1wUmVj b3JkSGVhZGVyOw0KKyAgVUlOVDE2ICAgICAgICAgICAgICBUaGlzUGxhaW5NZXNzYWdlU2l6ZTsN CisgIFVJTlQ4ICAgICAgICAgICAgICAgKkJ1ZmZlck91dDsNCisgIFVJTlQzMiAgICAgICAgICAg ICAgQnVmZmVyT3V0U2l6ZTsNCisgIElOVE4gICAgICAgICAgICAgICAgUmV0Ow0KKw0KKyAgQnl0 ZXNDb3BpZWQgICAgICA9IDA7DQorICBCdWZmZXJJbiAgICAgICAgID0gTlVMTDsNCisgIEJ1ZmZl ckluU2l6ZSAgICAgPSAwOw0KKyAgQnVmZmVySW5QdHIgICAgICA9IE5VTEw7DQorICBSZWNvcmRI ZWFkZXJJbiAgID0gTlVMTDsNCisgIFRlbXBSZWNvcmRIZWFkZXIgPSBOVUxMOw0KKyAgQnVmZmVy T3V0ICAgICAgICA9IE5VTEw7DQorICBCdWZmZXJPdXRTaXplICAgID0gMDsNCisgIFJldCAgICAg ICAgICAgICAgPSAwOw0KKw0KKyAgLy8NCisgIC8vIENhbGN1bGF0ZSB0aGUgc2l6ZSBhY2NvcmRp bmcgdG8gdGhlIGZyYWdtZW50IHRhYmxlLg0KKyAgLy8NCisgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8ICpGcmFnbWVudENvdW50OyBJbmRleCsrKSB7DQorICAgIEJ1ZmZlckluU2l6ZSArPSAoKkZy YWdtZW50VGFibGUpW0luZGV4XS5GcmFnbWVudExlbmd0aDsNCisgIH0NCisNCisgIC8vDQorICAv LyBBbGxvY2F0ZSBidWZmZXIgZm9yIHByb2Nlc3NpbmcgZGF0YQ0KKyAgLy8NCisgIEJ1ZmZlcklu ID0gQWxsb2NhdGVaZXJvUG9vbCAoQnVmZmVySW5TaXplKTsNCisgIGlmIChCdWZmZXJJbiA9PSBO VUxMKSB7DQorICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIC8v DQorICAvLyBDb3B5IGFsbCBUTFMgcGxhaW4gcmVjb3JkIGhlYWRlciBhbmQgcGF5bG9hZCB0byBQ cm9jZXNzQnVmZmVyDQorICAvLw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKkZyYWdtZW50 Q291bnQ7IEluZGV4KyspIHsNCisgICAgQ29weU1lbSAoDQorICAgICAgKEJ1ZmZlckluICsgQnl0 ZXNDb3BpZWQpLA0KKyAgICAgICgqRnJhZ21lbnRUYWJsZSlbSW5kZXhdLkZyYWdtZW50QnVmZmVy LA0KKyAgICAgICgqRnJhZ21lbnRUYWJsZSlbSW5kZXhdLkZyYWdtZW50TGVuZ3RoDQorICAgICAg KTsNCisgICAgQnl0ZXNDb3BpZWQgKz0gKCpGcmFnbWVudFRhYmxlKVtJbmRleF0uRnJhZ21lbnRM ZW5ndGg7DQorICB9DQorDQorICBCdWZmZXJPdXQgPSBBbGxvY2F0ZVplcm9Qb29sIChNQVhfQlVG RkVSX1NJWkUpOw0KKyAgaWYgKEJ1ZmZlck91dCA9PSBOVUxMKSB7DQorICAgIEZyZWVQb29sIChC dWZmZXJJbik7DQorICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisg IC8vDQorICAvLyBQYXJzaW5nIGJ1ZmZlci4gUmVjZWl2ZWQgcGFja2V0IG1heSBoYXZlIG11bHRp cGx5IFRMUyByZWNvcmQgbWVzc2FnZS4NCisgIC8vDQorICBCdWZmZXJJblB0ciA9IEJ1ZmZlcklu Ow0KKyAgVGVtcFJlY29yZEhlYWRlciA9IChUTFNfUkVDT1JEX0hFQURFUiAqKSBCdWZmZXJPdXQ7 DQorICB3aGlsZSAoKFVJTlROKSBCdWZmZXJJblB0ciA8IChVSU5UTikgQnVmZmVySW4gKyBCdWZm ZXJJblNpemUpIHsNCisgICAgUmVjb3JkSGVhZGVySW4gPSAoVExTX1JFQ09SRF9IRUFERVIgKikg QnVmZmVySW5QdHI7DQorICAgIEFTU0VSVCAoUmVjb3JkSGVhZGVySW4tPkNvbnRlbnRUeXBlID09 IFRMU19DT05URU5UX1RZUEVfQVBQTElDQVRJT05fREFUQSk7DQorICAgIFRoaXNDaXBoZXJNZXNz YWdlU2l6ZSA9IE5UT0hTIChSZWNvcmRIZWFkZXJJbi0+TGVuZ3RoKTsNCisNCisgICAgUmV0ID0g VGxzQ3RybFRyYWZmaWNJbiAoVGxzSW5zdGFuY2UtPlRsc0Nvbm4sIChVSU5UOCAqKSAoUmVjb3Jk SGVhZGVySW4pLCBSRUNPUkRfSEVBREVSX0xFTiArIFRoaXNDaXBoZXJNZXNzYWdlU2l6ZSk7DQor ICAgIGlmIChSZXQgIT0gUkVDT1JEX0hFQURFUl9MRU4gKyBUaGlzQ2lwaGVyTWVzc2FnZVNpemUp IHsNCisgICAgICBGcmVlUG9vbCAoQnVmZmVySW4pOw0KKyAgICAgIFRsc0luc3RhbmNlLT5UbHNT ZXNzaW9uU3RhdGUgPSBFZmlUbHNTZXNzaW9uRXJyb3I7DQorICAgICAgcmV0dXJuIEVGSV9BQk9S VEVEOw0KKyAgICB9DQorDQorICAgIFJldCA9IDA7DQorICAgIFJldCA9IFRsc1JlYWQgKFRsc0lu c3RhbmNlLT5UbHNDb25uLCAoVUlOVDggKikgKFRlbXBSZWNvcmRIZWFkZXIgKyAxKSwgTUFYX0JV RkZFUl9TSVpFKTsNCisNCisgICAgaWYgKFJldCA+IDApIHsNCisgICAgICBUaGlzUGxhaW5NZXNz YWdlU2l6ZSA9IChVSU5UMTYpIFJldDsNCisgICAgfSBlbHNlIHsNCisgICAgICBUaGlzUGxhaW5N ZXNzYWdlU2l6ZSA9IDA7DQorICAgIH0NCisNCisgICAgQ29weU1lbSAoVGVtcFJlY29yZEhlYWRl ciwgUmVjb3JkSGVhZGVySW4sIFJFQ09SRF9IRUFERVJfTEVOKTsNCisgICAgVGVtcFJlY29yZEhl YWRlci0+TGVuZ3RoID0gVGhpc1BsYWluTWVzc2FnZVNpemU7DQorICAgIEJ1ZmZlck91dFNpemUg Kz0gUkVDT1JEX0hFQURFUl9MRU4gKyBUaGlzUGxhaW5NZXNzYWdlU2l6ZTsNCisNCisgICAgQnVm ZmVySW5QdHIgKz0gUkVDT1JEX0hFQURFUl9MRU4gKyBUaGlzQ2lwaGVyTWVzc2FnZVNpemU7DQor ICAgIFRlbXBSZWNvcmRIZWFkZXIgKz0gUkVDT1JEX0hFQURFUl9MRU4gKyBUaGlzUGxhaW5NZXNz YWdlU2l6ZTsNCisgIH0NCisNCisgIEZyZWVQb29sIChCdWZmZXJJbik7DQorDQorICAvLw0KKyAg Ly8gVGhlIGNhbGxlciB3aWxsIHRha2UgcmVzcG9uc2libGUgdG8gaGFuZGxlIHRoZSBvcmlnaW5h bCBmcmFnbWVudCB0YWJsZQ0KKyAgLy8NCisgICpGcmFnbWVudFRhYmxlID0gQWxsb2NhdGVaZXJv UG9vbCAoc2l6ZW9mIChFRklfVExTX0ZSQUdNRU5UX0RBVEEpKTsNCisgIGlmICgqRnJhZ21lbnRU YWJsZSA9PSBOVUxMKSB7DQorICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KKyAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorDQorICAoKkZyYWdtZW50VGFibGUpWzBdLkZy YWdtZW50QnVmZmVyICA9IEJ1ZmZlck91dDsNCisgICgqRnJhZ21lbnRUYWJsZSlbMF0uRnJhZ21l bnRMZW5ndGggID0gQnVmZmVyT3V0U2l6ZTsNCisgICpGcmFnbWVudENvdW50ICAgICAgICAgICAg ICAgICAgICAgID0gMTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQpkaWZmIC0tZ2l0 IGEvTmV0d29ya1BrZy9UbHNEeGUvVGxzSW1wbC5oIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzSW1w bC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYjA2MTVjYg0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzSW1wbC5oDQpAQCAtMCwwICsxLDMx NSBAQA0KKy8qKiBAZmlsZQ0KKyAgSGVhZGVyIGZpbGUgb2YgTWlzY2VsbGFuZW91cyBSb3V0aW5l cyBmb3IgVGxzRHhlIGRyaXZlci4NCisNCitDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisNCitUaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJs ZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQord2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i c2QtbGljZW5zZS5waHANCisNCitUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUg QlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCitXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig UkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0K Kw0KKyoqLw0KKw0KKyNpZm5kZWYgX19FRklfVExTX0lNUExfSF9fDQorI2RlZmluZSBfX0VGSV9U TFNfSU1QTF9IX18NCisNCisvLw0KKy8vIExpYnJhcmllcw0KKy8vDQorI2luY2x1ZGUgPExpYnJh cnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5 QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCisj aW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTmV0 TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZUNyeXB0TGliLmg+DQorI2luY2x1ZGUgPExp YnJhcnkvVGxzTGliLmg+DQorDQorLy8NCisvLyBDb25zdW1lZCBQcm90b2NvbHMNCisvLw0KKyNp bmNsdWRlIDxQcm90b2NvbC9UbHMuaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvVGxzQ29uZmlnLmg+ DQorDQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvVGxzMS5oPg0KKw0KKyNpbmNsdWRlICJU bHNEcml2ZXIuaCINCisNCisvLw0KKy8vIFByb3RvY29sIGluc3RhbmNlcw0KKy8vDQorZXh0ZXJu IEVGSV9TRVJWSUNFX0JJTkRJTkdfUFJPVE9DT0wgICAgbVRsc1NlcnZpY2VCaW5kaW5nOw0KK2V4 dGVybiBFRklfVExTX1BST1RPQ09MICAgICAgICAgICAgICAgIG1UbHNQcm90b2NvbDsNCitleHRl cm4gRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MICBtVGxzQ29uZmlndXJhdGlvblByb3Rv Y29sOw0KKw0KKyNkZWZpbmUgUkVDT1JEX0hFQURFUl9MRU4gNSAvLy8gQ29udGVudFR5cGUoMSkg KyBWZXJzaW9uKDIpICsgTGVuZ3RoKDIpDQorDQorI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUgICAz Mjc2OA0KKw0KKy8qKg0KKyAgRW5jcnlwdCB0aGUgbWVzc2FnZSBsaXN0ZWQgaW4gZnJhZ21lbnQu DQorDQorICBAcGFyYW1baW5dICAgICAgIFRsc0luc3RhbmNlICAgIFRoZSBwb2ludGVyIHRvIHRo ZSBUTFMgaW5zdGFuY2UuDQorICBAcGFyYW1baW4sIG91dF0gIEZyYWdtZW50VGFibGUgIFBvaW50 ZXIgdG8gYSBsaXN0IG9mIGZyYWdtZW50Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPbiBpbnB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTIGhlYWRlciBhbmQN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4gdGV4dCBUTFMgcGF5bG9h ZDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0IHRoZXNlIGZy YWdtZW50cyBjb250YWluIHRoZSBUTFMgaGVhZGVyIGFuZA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaXBoZXIgdGV4dCBUTFMgcGF5bG9hZC4NCisgIEBwYXJhbVtpbl0gICAg ICAgRnJhZ21lbnRDb3VudCAgTnVtYmVyIG9mIGZyYWdtZW50Lg0KKw0KKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHku DQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIENhbid0IGFsbG9jYXRlIG1lbW9y eSByZXNvdXJjZXMuDQorICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAgICAgIFRMUyBzZXNz aW9uIHN0YXRlIGlzIGluY29ycmVjdC4NCisgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAg ICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCisqKi8NCitFRklfU1RBVFVTDQorVGxzRWNy eXB0UGFja2V0ICgNCisgIElOICAgICBUTFNfSU5TVEFOQ0UgICAgICAgICAgICAgICAgICAqVGxz SW5zdGFuY2UsDQorICBJTiBPVVQgRUZJX1RMU19GUkFHTUVOVF9EQVRBICAgICAgICAgKipGcmFn bWVudFRhYmxlLA0KKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICpGcmFn bWVudENvdW50DQorICApOw0KKw0KKy8qKg0KKyAgRGVjcnlwdCB0aGUgbWVzc2FnZSBsaXN0ZWQg aW4gZnJhZ21lbnQuDQorDQorICBAcGFyYW1baW5dICAgICAgIFRsc0luc3RhbmNlICAgIFRoZSBw b2ludGVyIHRvIHRoZSBUTFMgaW5zdGFuY2UuDQorICBAcGFyYW1baW4sIG91dF0gIEZyYWdtZW50 VGFibGUgIFBvaW50ZXIgdG8gYSBsaXN0IG9mIGZyYWdtZW50Lg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPbiBpbnB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExT IGhlYWRlciBhbmQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyIHRl eHQgVExTIHBheWxvYWQ7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91 dHB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTIGhlYWRlciBhbmQNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4gdGV4dCBUTFMgcGF5bG9hZC4NCisgIEBw YXJhbVtpbl0gICAgICAgRnJhZ21lbnRDb3VudCAgTnVtYmVyIG9mIGZyYWdtZW50Lg0KKw0KKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRlZCBz dWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIENhbid0IGFs bG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQorICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAg ICAgIFRMUyBzZXNzaW9uIHN0YXRlIGlzIGluY29ycmVjdC4NCisgIEByZXR2YWwgT3RoZXJzICAg ICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCisqKi8NCitFRklfU1RB VFVTDQorVGxzRGVjcnlwdFBhY2tldCAoDQorICBJTiAgICAgVExTX0lOU1RBTkNFICAgICAgICAg ICAgICAgICAgKlRsc0luc3RhbmNlLA0KKyAgSU4gT1VUIEVGSV9UTFNfRlJBR01FTlRfREFUQSAg ICAgICAgICoqRnJhZ21lbnRUYWJsZSwNCisgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAqRnJhZ21lbnRDb3VudA0KKyAgKTsNCisNCisvKioNCisgIFNldCBUTFMgc2Vzc2lv biBkYXRhLg0KKw0KKyAgVGhlIFNldFNlc3Npb25EYXRhKCkgZnVuY3Rpb24gc2V0IGRhdGEgZm9y IGEgbmV3IFRMUyBzZXNzaW9uLiBBbGwgc2Vzc2lvbiBkYXRhIHNob3VsZA0KKyAgYmUgc2V0IGJl Zm9yZSBCdWlsZFJlc3BvbnNlUGFja2V0KCkgaW52b2tlZC4NCisNCisgIEBwYXJhbVtpbl0gIFRo aXMgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1RMU19QUk9UT0NPTCBpbnN0YW5j ZS4NCisgIEBwYXJhbVtpbl0gIERhdGFUeXBlICAgICAgICAgICAgVExTIHNlc3Npb24gZGF0YSB0 eXBlLg0KKyAgQHBhcmFtW2luXSAgRGF0YSAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHNlc3Np b24gZGF0YS4NCisgIEBwYXJhbVtpbl0gIERhdGFTaXplICAgICAgICAgICAgVG90YWwgc2l6ZSBv ZiBzZXNzaW9uIGRhdGEuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRo ZSBUTFMgc2Vzc2lvbiBkYXRhIGlzIHNldCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBpcyBUUlVFOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIE5V TEwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgaXMgTlVMTC4NCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemUgaXMgMC4NCisgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgVGhlIERhdGFUeXBlIGlzIHVuc3VwcG9ydGVkLg0K KyAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRCAgICAgICBJZiB0aGUgRGF0YVR5cGUgaXMgb25l IG9mIGJlbG93Og0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNDbGll bnRSYW5kb20NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVGxzU2VydmVy UmFuZG9tDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc0tleU1hdGVy aWFsDQorICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICAgIEN1cnJlbnQgVExTIHNlc3Np b24gc3RhdGUgaXMgTk9UDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRs c1Nlc3Npb25TdGF0ZU5vdFN0YXJ0ZWQuDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICAgIFJlcXVpcmVkIHN5c3RlbSByZXNvdXJjZXMgY291bGQgbm90IGJlIGFsbG9jYXRlZC4NCisq Ki8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorVGxzU2V0U2Vzc2lvbkRhdGEgKA0KKyAgSU4gICAg IEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAgICAgICpUaGlzLA0KKyAgSU4gICAgIEVGSV9UTFNf U0VTU0lPTl9EQVRBX1RZUEUgICAgIERhdGFUeXBlLA0KKyAgSU4gICAgIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICpEYXRhLA0KKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgIERhdGFTaXplDQorICApOw0KKw0KKy8qKg0KKyAgR2V0IFRMUyBzZXNzaW9uIGRhdGEu DQorDQorICBUaGUgR2V0U2Vzc2lvbkRhdGEoKSBmdW5jdGlvbiByZXR1cm4gdGhlIFRMUyBzZXNz aW9uIGluZm9ybWF0aW9uLg0KKw0KKyAgQHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAgICBQ b2ludGVyIHRvIHRoZSBFRklfVExTX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luXSAg ICAgICBEYXRhVHlwZSAgICAgICBUTFMgc2Vzc2lvbiBkYXRhIHR5cGUuDQorICBAcGFyYW1baW4s IG91dF0gIERhdGEgICAgICAgICAgIFBvaW50ZXIgdG8gc2Vzc2lvbiBkYXRhLg0KKyAgQHBhcmFt W2luLCBvdXRdICBEYXRhU2l6ZSAgICAgICBUb3RhbCBzaXplIG9mIHNlc3Npb24gZGF0YS4gT24g aW5wdXQsIGl0IG1lYW5zDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBz aXplIG9mIERhdGEgYnVmZmVyLiBPbiBvdXRwdXQsIGl0IG1lYW5zIHRoZSBzaXplDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvcGllZCBEYXRhIGJ1ZmZlciBpZiBFRklf U1VDQ0VTUywgYW5kIG1lYW5zIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplIG9mIGRlc2lyZWQgRGF0YSBidWZmZXIgaWYgRUZJX0JVRkZFUl9UT09fU01BTEwuDQor DQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBUTFMgc2Vzc2lvbiBkYXRh IGlzIGdvdCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg IE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBUUlVFOg0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwuDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplIGlzIE5VTEwuDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdGEgaXMgTlVMTCBpZiAqRGF0YVNpemUgaXMgbm90IHplcm8u DQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgIFRoZSBEYXRhVHlwZSBpcyB1bnN1 cHBvcnRlZC4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIFRMUyBzZXNz aW9uIGRhdGEgaXMgbm90IGZvdW5kLg0KKyAgQHJldHZhbCBFRklfTk9UX1JFQURZICAgICAgICAg ICBUaGUgRGF0YVR5cGUgaXMgbm90IHJlYWR5IGluIGN1cnJlbnQgc2Vzc2lvbiBzdGF0ZS4NCisg IEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgICAgVGhlIGJ1ZmZlciBpcyB0b28gc21hbGwg dG8gaG9sZCB0aGUgZGF0YS4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorVGxzR2V0U2Vz c2lvbkRhdGEgKA0KKyAgSU4gICAgIEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAgICAgICpUaGlz LA0KKyAgSU4gICAgIEVGSV9UTFNfU0VTU0lPTl9EQVRBX1RZUEUgICAgIERhdGFUeXBlLA0KKyAg SU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhLCAgT1BUSU9OQUwNCisg IElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YVNpemUNCisgICk7DQor DQorLyoqDQorICBCdWlsZCByZXNwb25zZSBwYWNrZXQgYWNjb3JkaW5nIHRvIFRMUyBzdGF0ZSBt YWNoaW5lLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdmFsaWQgZm9yDQorICBhbGVydCwgaGFuZHNo YWtlIGFuZCBjaGFuZ2VfY2lwaGVyX3NwZWMgY29udGVudCB0eXBlLg0KKw0KKyAgVGhlIEJ1aWxk UmVzcG9uc2VQYWNrZXQoKSBmdW5jdGlvbiBidWlsZHMgVExTIHJlc3BvbnNlIHBhY2tldCBpbiBy ZXNwb25zZSB0byB0aGUgVExTDQorICByZXF1ZXN0IHBhY2tldCBzcGVjaWZpZWQgYnkgUmVxdWVz dEJ1ZmZlciBhbmQgUmVxdWVzdFNpemUuIElmIFJlcXVlc3RCdWZmZXIgaXMgTlVMTCBhbmQNCisg IFJlcXVlc3RTaXplIGlzIDAsIGFuZCBUTFMgc2Vzc2lvbiBzdGF0dXMgaXMgRWZpVGxzU2Vzc2lv bk5vdFN0YXJ0ZWQsIHRoZSBUTFMgc2Vzc2lvbg0KKyAgd2lsbCBiZSBpbml0aWF0ZWQgYW5kIHRo ZSByZXNwb25zZSBwYWNrZXQgbmVlZHMgdG8gYmUgQ2xpZW50SGVsbG8uIElmIFJlcXVlc3RCdWZm ZXIgaXMNCisgIE5VTEwgYW5kIFJlcXVlc3RTaXplIGlzIDAsIGFuZCBUTFMgc2Vzc2lvbiBzdGF0 dXMgaXMgRWZpVGxzU2Vzc2lvbkNsb3NpbmcsIHRoZSBUTFMNCisgIHNlc3Npb24gd2lsbCBiZSBj bG9zZWQgYW5kIHJlc3BvbnNlIHBhY2tldCBuZWVkcyB0byBiZSBDbG9zZU5vdGlmeS4gSWYgUmVx dWVzdEJ1ZmZlciBpcw0KKyAgTlVMTCBhbmQgUmVxdWVzdFNpemUgaXMgMCwgYW5kIFRMUyBzZXNz aW9uIHN0YXR1cyBpcyBFZmlUbHNTZXNzaW9uRXJyb3IsIHRoZSBUTFMNCisgIHNlc3Npb24gaGFz IGVycm9ycyBhbmQgdGhlIHJlc3BvbnNlIHBhY2tldCBuZWVkcyB0byBiZSBBbGVydCBtZXNzYWdl IGJhc2VkIG9uIGVycm9yDQorICB0eXBlLg0KKw0KKyAgQHBhcmFtW2luXSAgICAgICBUaGlzICAg ICAgICAgICBQb2ludGVyIHRvIHRoZSBFRklfVExTX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBh cmFtW2luXSAgICAgICBSZXF1ZXN0QnVmZmVyICBQb2ludGVyIHRvIHRoZSBtb3N0IHJlY2VudGx5 IHJlY2VpdmVkIFRMUyBwYWNrZXQuIE5VTEwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWVhbnMgVExTIG5lZWQgaW5pdGlhdGUgdGhlIFRMUyBzZXNzaW9uIGFuZCByZXNwb25z ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQgbmVlZCB0byBiZSBD bGllbnRIZWxsby4NCisgIEBwYXJhbVtpbl0gICAgICAgUmVxdWVzdFNpemUgICAgUGFja2V0IHNp emUgaW4gYnl0ZXMgZm9yIHRoZSBtb3N0IHJlY2VudGx5IHJlY2VpdmVkIFRMUw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQuIDAgaXMgb25seSB2YWxpZCB3aGVuIFJl cXVlc3RCdWZmZXIgaXMgTlVMTC4NCisgIEBwYXJhbVtvdXRdICAgICAgQnVmZmVyICAgICAgICAg UG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIGhvbGQgdGhlIGJ1aWx0IHBhY2tldC4NCisgIEBwYXJh bVtpbiwgb3V0XSAgQnVmZmVyU2l6ZSAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHNpemUgaW4g Ynl0ZXMuIE9uIGlucHV0LCBpdCBpcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGUgYnVmZmVyIHNpemUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4gT24gb3V0cHV0LCBpdA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgYnVmZmVyIHNpemUgaW4g ZmFjdCBuZWVkZWQgdG8gY29udGFpbiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFja2V0Lg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUg cmVxdWlyZWQgVExTIHBhY2tldCBpcyBidWlsdCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBpcyBUUlVFOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlz IE5VTEwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RCdWZmZXIg aXMgTlVMTCBidXQgUmVxdWVzdFNpemUgaXMgTk9UIDAuDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlcXVlc3RTaXplIGlzIDAgYnV0IFJlcXVlc3RCdWZmZXIgaXMgTk9UIE5V TEwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUgaXMgTlVM TC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGlzIE5VTEwgaWYg KkJ1ZmZlclNpemUgaXMgbm90IHplcm8uDQorICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxM ICAgIEJ1ZmZlclNpemUgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHJlc3BvbnNlIHBhY2tldC4N CisgIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICAgQ3VycmVudCBUTFMgc2Vzc2lvbiBz dGF0ZSBpcyBOT1QgcmVhZHkgdG8gYnVpbGQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVzcG9uc2VQYWNrZXQuDQorICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAgICAg IFNvbWV0aGluZyB3cm9uZyBidWlsZCByZXNwb25zZSBwYWNrZXQuDQorKiovDQorRUZJX1NUQVRV Uw0KK0VGSUFQSQ0KK1Rsc0J1aWxkUmVzcG9uc2VQYWNrZXQgKA0KKyAgSU4gICAgIEVGSV9UTFNf UFJPVE9DT0wgICAgICAgICAgICAgICpUaGlzLA0KKyAgSU4gICAgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgICpSZXF1ZXN0QnVmZmVyLCBPUFRJT05BTA0KKyAgSU4gICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTaXplLCBPUFRJT05BTA0KKyAgICAgT1VUIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIsIE9QVElPTkFMDQorICBJTiBPVVQg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUNCisgICk7DQorDQorLyoq DQorICBEZWNyeXB0IG9yIGVuY3J5cHQgVExTIHBhY2tldCBkdXJpbmcgc2Vzc2lvbi4gVGhpcyBm dW5jdGlvbiBpcyBvbmx5IHZhbGlkIGFmdGVyDQorICBzZXNzaW9uIGNvbm5lY3RlZCBhbmQgZm9y IGFwcGxpY2F0aW9uX2RhdGEgY29udGVudCB0eXBlLg0KKw0KKyAgVGhlIFByb2Nlc3NQYWNrZXQg KCkgZnVuY3Rpb24gcHJvY2VzcyBlYWNoIGluYm91bmQgb3Igb3V0Ym91bmQgVExTIEFQUCBwYWNr ZXQuDQorDQorICBAcGFyYW1baW5dICAgICAgIFRoaXMgICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IEVGSV9UTFNfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1baW4sIG91dF0gIEZyYWdtZW50 VGFibGUgIFBvaW50ZXIgdG8gYSBsaXN0IG9mIGZyYWdtZW50LiBUaGUgY2FsbGVyIHdpbGwgdGFr ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJsZSB0byBoYW5k bGUgdGhlIG9yaWdpbmFsIEZyYWdtZW50VGFibGUgd2hpbGUNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaXQgbWF5IGJlIHJlYWxsb2NhdGVkIGluIFRMUyBkcml2ZXIuIElmIENy eXB0TW9kZSBpcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNFbmNy eXB0LCBvbiBpbnB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciBhbmQgcGxhaW4gdGV4dCBUTFMgQVBQIHBh eWxvYWQ7IG9uIG91dHB1dCB0aGVzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmcmFnbWVudHMgY29udGFpbiB0aGUgVExTIGhlYWRlciBhbmQgY2lwaGVyIHRleHQgVExTDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUCBwYXlsb2FkLiBJZiBDcnlwdE1v ZGUgaXMgRWZpVGxzRGVjcnlwdCwgb24gaW5wdXQNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlc2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5kIGNpcGhl ciB0ZXh0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMUyBBUFAgcGF5bG9h ZDsgb24gb3V0cHV0IHRoZXNlIGZyYWdtZW50cyBjb250YWluIHRoZQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUTFMgaGVhZGVyIGFuZCBwbGFpbiB0ZXh0IFRMUyBBUFAgcGF5 bG9hZC4NCisgIEBwYXJhbVtpbl0gICAgICAgRnJhZ21lbnRDb3VudCAgTnVtYmVyIG9mIGZyYWdt ZW50Lg0KKyAgQHBhcmFtW2luXSAgICAgICBDcnlwdE1vZGUgICAgICBDcnlwdCBtb2RlLg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGNvbXBsZXRl ZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBv ciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBUUlVFOg0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwuDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZyYWdtZW50VGFibGUgaXMgTlVMTC4NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRnJhZ21lbnRDb3VudCBpcyBOVUxMLg0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDcnlwdG9Nb2RlIGlzIGludmFsaWQuDQorICBAcmV0dmFsIEVG SV9OT1RfUkVBRFkgICAgICAgICAgIEN1cnJlbnQgVExTIHNlc3Npb24gc3RhdGUgaXMgTk9UDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1Nlc3Npb25EYXRhVHJhbnNm ZXJyaW5nLg0KKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICAgICAgICAgICBTb21ldGhpbmcgd3Jv bmcgZGVjcnlwdGlvbiB0aGUgbWVzc2FnZS4gVExTIHNlc3Npb24NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhdHVzIHdpbGwgYmVjb21lIEVmaVRsc1Nlc3Npb25FcnJvci4g VGhlIGNhbGxlciBuZWVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwg QnVpbGRSZXNwb25zZVBhY2tldCgpIHRvIGdlbmVyYXRlIEVycm9yIEFsZXJ0DQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgYW5kIHNlbmQgaXQgb3V0Lg0KKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBObyBlbm91Z2ggcmVzb3VyY2UgdG8gZmluaXNo IHRoZSBvcGVyYXRpb24uDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Rsc1Byb2Nlc3NQ YWNrZXQgKA0KKyAgSU4gICAgIEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAgICAgICpUaGlzLA0K KyAgSU4gT1VUIEVGSV9UTFNfRlJBR01FTlRfREFUQSAgICAgICAgICoqRnJhZ21lbnRUYWJsZSwN CisgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAqRnJhZ21lbnRDb3VudCwN CisgIElOICAgICBFRklfVExTX0NSWVBUX01PREUgICAgICAgICAgICBDcnlwdE1vZGUNCisgICk7 DQorDQorLyoqDQorICBTZXQgVExTIGNvbmZpZ3VyYXRpb24gZGF0YS4NCisNCisgIFRoZSBTZXRE YXRhKCkgZnVuY3Rpb24gc2V0cyBUTFMgY29uZmlndXJhdGlvbiB0byBub24tdm9sYXRpbGUgc3Rv cmFnZSBvciB2b2xhdGlsZQ0KKyAgc3RvcmFnZS4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09M IGluc3RhbmNlLg0KKyAgQHBhcmFtW2luXSAgRGF0YVR5cGUgICAgICAgICAgICBDb25maWd1cmF0 aW9uIGRhdGEgdHlwZS4NCisgIEBwYXJhbVtpbl0gIERhdGEgICAgICAgICAgICAgICAgUG9pbnRl ciB0byBjb25maWd1cmF0aW9uIGRhdGEuDQorICBAcGFyYW1baW5dICBEYXRhU2l6ZSAgICAgICAg ICAgIFRvdGFsIHNpemUgb2YgY29uZmlndXJhdGlvbiBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBUaGUgVExTIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBzZXQgc3Vj Y2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUgb3IgbW9y ZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgVFJVRToNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGhpcyBpcyBOVUxMLg0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEYXRhIGlzIE5VTEwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERhdGFTaXplIGlzIDAuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgIFRo ZSBEYXRhVHlwZSBpcyB1bnN1cHBvcnRlZC4NCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJD RVMgICAgUmVxdWlyZWQgc3lzdGVtIHJlc291cmNlcyBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLg0K KyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitUbHNDb25maWd1cmF0aW9uU2V0RGF0YSAoDQor ICBJTiAgICAgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MICAqVGhpcywNCisgIElOICAg ICBFRklfVExTX0NPTkZJR19EQVRBX1RZUEUgICAgICAgIERhdGFUeXBlLA0KKyAgSU4gICAgIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGEsDQorICBJTiAgICAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZQ0KKyAgKTsNCisNCisvKioNCisgIEdldCBU TFMgY29uZmlndXJhdGlvbiBkYXRhLg0KKw0KKyAgVGhlIEdldERhdGEoKSBmdW5jdGlvbiBnZXRz IFRMUyBjb25maWd1cmF0aW9uLg0KKw0KKyAgQHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBFRklfVExTX0NPTkZJR1VSQVRJT05fUFJPVE9DT0wgaW5zdGFuY2Uu DQorICBAcGFyYW1baW5dICAgICAgIERhdGFUeXBlICAgICAgIENvbmZpZ3VyYXRpb24gZGF0YSB0 eXBlLg0KKyAgQHBhcmFtW2luLCBvdXRdICBEYXRhICAgICAgICAgICBQb2ludGVyIHRvIGNvbmZp Z3VyYXRpb24gZGF0YS4NCisgIEBwYXJhbVtpbiwgb3V0XSAgRGF0YVNpemUgICAgICAgVG90YWwg c2l6ZSBvZiBjb25maWd1cmF0aW9uIGRhdGEuIE9uIGlucHV0LCBpdCBtZWFucw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiBEYXRhIGJ1ZmZlci4gT24gb3V0 cHV0LCBpdCBtZWFucyB0aGUgc2l6ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvZiBjb3BpZWQgRGF0YSBidWZmZXIgaWYgRUZJX1NVQ0NFU1MsIGFuZCBtZWFucyB0aGUNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiBkZXNpcmVkIERhdGEgYnVm ZmVyIGlmIEVGSV9CVUZGRVJfVE9PX1NNQUxMLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICBUaGUgVExTIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBnb3Qgc3VjY2Vzc2Z1bGx5 Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUgb3IgbW9yZSBvZiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgVFJVRToNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGhpcyBpcyBOVUxMLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEYXRhU2l6ZSBpcyBOVUxMLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE YXRhIGlzIE5VTEwgaWYgKkRhdGFTaXplIGlzIG5vdCB6ZXJvLg0KKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgICBUaGUgRGF0YVR5cGUgaXMgdW5zdXBwb3J0ZWQuDQorICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICAgIFRoZSBUTFMgY29uZmlndXJhdGlvbiBkYXRhIGlzIG5v dCBmb3VuZC4NCisgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgICAgVGhlIGJ1ZmZlciBp cyB0b28gc21hbGwgdG8gaG9sZCB0aGUgZGF0YS4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJ DQorVGxzQ29uZmlndXJhdGlvbkdldERhdGEgKA0KKyAgSU4gICAgIEVGSV9UTFNfQ09ORklHVVJB VElPTl9QUk9UT0NPTCAgKlRoaXMsDQorICBJTiAgICAgRUZJX1RMU19DT05GSUdfREFUQV9UWVBF ICAgICAgICBEYXRhVHlwZSwNCisgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpEYXRhLCBPUFRJT05BTA0KKyAgSU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkRhdGFTaXplDQorICApOw0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL05ldHdvcmtQ a2cvVGxzRHhlL1Rsc1Byb3RvY29sLmMgYi9OZXR3b3JrUGtnL1Rsc0R4ZS9UbHNQcm90b2NvbC5j DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYmM2MTdlMQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvTmV0d29ya1BrZy9UbHNEeGUvVGxzUHJvdG9jb2wuYw0KQEAgLTAsMCArMSw2 MzIgQEANCisvKiogQGZpbGUNCisgIEltcGxlbWVudGF0aW9uIG9mIEVGSSBUTFMgUHJvdG9jb2wg SW50ZXJmYWNlcy4NCisNCisgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQorICB3aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxp Y2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQorICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv YnNkLWxpY2Vuc2UucGhwLg0KKw0KKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorICBXSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM SUVELg0KKw0KKyoqLw0KKw0KKyNpbmNsdWRlICJUbHNJbXBsLmgiDQorDQorRUZJX1RMU19QUk9U T0NPTCAgbVRsc1Byb3RvY29sID0gew0KKyAgVGxzU2V0U2Vzc2lvbkRhdGEsDQorICBUbHNHZXRT ZXNzaW9uRGF0YSwNCisgIFRsc0J1aWxkUmVzcG9uc2VQYWNrZXQsDQorICBUbHNQcm9jZXNzUGFj a2V0DQorfTsNCisNCisvKioNCisgIFNldCBUTFMgc2Vzc2lvbiBkYXRhLg0KKw0KKyAgVGhlIFNl dFNlc3Npb25EYXRhKCkgZnVuY3Rpb24gc2V0IGRhdGEgZm9yIGEgbmV3IFRMUyBzZXNzaW9uLiBB bGwgc2Vzc2lvbiBkYXRhIHNob3VsZA0KKyAgYmUgc2V0IGJlZm9yZSBCdWlsZFJlc3BvbnNlUGFj a2V0KCkgaW52b2tlZC4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgUG9p bnRlciB0byB0aGUgRUZJX1RMU19QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gIERh dGFUeXBlICAgICAgICAgICAgVExTIHNlc3Npb24gZGF0YSB0eXBlLg0KKyAgQHBhcmFtW2luXSAg RGF0YSAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHNlc3Npb24gZGF0YS4NCisgIEBwYXJhbVtp bl0gIERhdGFTaXplICAgICAgICAgICAgVG90YWwgc2l6ZSBvZiBzZXNzaW9uIGRhdGEuDQorDQor ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBUTFMgc2Vzc2lvbiBkYXRhIGlz IHNldCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIE9u ZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBUUlVFOg0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwuDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdGEgaXMgTlVMTC4NCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGF0YVNpemUgaXMgMC4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgICAgVGhlIERhdGFUeXBlIGlzIHVuc3VwcG9ydGVkLg0KKyAgQHJldHZhbCBFRklfQUNDRVNT X0RFTklFRCAgICAgICBJZiB0aGUgRGF0YVR5cGUgaXMgb25lIG9mIGJlbG93Og0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNDbGllbnRSYW5kb20NCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRWZpVGxzU2VydmVyUmFuZG9tDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc0tleU1hdGVyaWFsDQorICBAcmV0dmFsIEVGSV9O T1RfUkVBRFkgICAgICAgICAgIEN1cnJlbnQgVExTIHNlc3Npb24gc3RhdGUgaXMgTk9UDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1Nlc3Npb25TdGF0ZU5vdFN0YXJ0 ZWQuDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIFJlcXVpcmVkIHN5c3RlbSBy ZXNvdXJjZXMgY291bGQgbm90IGJlIGFsbG9jYXRlZC4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJ QVBJDQorVGxzU2V0U2Vzc2lvbkRhdGEgKA0KKyAgSU4gICAgIEVGSV9UTFNfUFJPVE9DT0wgICAg ICAgICAgICAgICpUaGlzLA0KKyAgSU4gICAgIEVGSV9UTFNfU0VTU0lPTl9EQVRBX1RZUEUgICAg IERhdGFUeXBlLA0KKyAgSU4gICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpEYXRh LA0KKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplDQorICAp DQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBUTFNfSU5TVEFO Q0UgICAgICAgICAgICAgICpJbnN0YW5jZTsNCisgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg KkNpcGhlcklkOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCisNCisgIEVG SV9UUEwgICAgICAgICAgICAgICAgICAgT2xkVHBsOw0KKw0KKyAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQorICBDaXBoZXJJZCA9IE5VTEw7DQorDQorICBpZiAoVGhpcyA9PSBOVUxMIHx8IERhdGEg PT0gTlVMTCB8fCBEYXRhU2l6ZSA9PSAwKSB7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQorICB9DQorDQorICBPbGRUcGwgPSBnQlMtPlJhaXNlVFBMIChUUExfQ0FMTEJBQ0sp Ow0KKw0KKyAgSW5zdGFuY2UgPSBUTFNfSU5TVEFOQ0VfRlJPTV9QUk9UT0NPTF9USElTIChUaGlz KTsNCisNCisgIGlmIChEYXRhVHlwZSAhPSBFZmlUbHNTZXNzaW9uU3RhdGUgICYmIEluc3RhbmNl LT5UbHNTZXNzaW9uU3RhdGUgIT0gRWZpVGxzU2Vzc2lvbk5vdFN0YXJ0ZWQpew0KKyAgICBTdGF0 dXMgPSBFRklfTk9UX1JFQURZOw0KKyAgICBnb3RvIE9OX0VYSVQ7DQorICB9DQorDQorICBzd2l0 Y2ggKERhdGFUeXBlKSB7DQorICAvLw0KKyAgLy8gU2Vzc2lvbiBDb25maWd1cmF0aW9uDQorICAv Lw0KKyAgY2FzZSBFZmlUbHNWZXJzaW9uOg0KKyAgICBpZiAoRGF0YVNpemUgIT0gc2l6ZW9mIChF RklfVExTX1ZFUlNJT04pKSB7DQorICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KKyAgICAgIGdvdG8gT05fRVhJVDsNCisgICAgfQ0KKw0KKyAgICBTdGF0dXMgPSBUbHNTZXRW ZXJzaW9uIChJbnN0YW5jZS0+VGxzQ29ubiwgKChFRklfVExTX1ZFUlNJT04gKikgRGF0YSktPk1h am9yLCAoKEVGSV9UTFNfVkVSU0lPTiAqKSBEYXRhKS0+TWlub3IpOw0KKyAgICBicmVhazsNCisg IGNhc2UgRWZpVGxzQ29ubmVjdGlvbkVuZDoNCisgICAgaWYgKERhdGFTaXplICE9IHNpemVvZiAo RUZJX1RMU19DT05ORUNUSU9OX0VORCkpIHsNCisgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQorICAgICAgZ290byBPTl9FWElUOw0KKyAgICB9DQorDQorICAgIFN0YXR1cyA9 IFRsc1NldENvbm5lY3Rpb25FbmQgKEluc3RhbmNlLT5UbHNDb25uLCAqKChFRklfVExTX0NPTk5F Q1RJT05fRU5EICopIERhdGEpKTsNCisgICAgYnJlYWs7DQorICBjYXNlIEVmaVRsc0NpcGhlckxp c3Q6DQorICAgIENpcGhlcklkID0gQWxsb2NhdGVQb29sIChEYXRhU2l6ZSk7DQorICAgIGlmIChD aXBoZXJJZCA9PSBOVUxMKSB7DQorICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQorICAgICAgZ290byBPTl9FWElUOw0KKyAgICB9DQorDQorICAgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IERhdGFTaXplIC8gc2l6ZW9mIChFRklfVExTX0NJUEhFUik7IEluZGV4KyspIHsNCisg ICAgICAqKENpcGhlcklkICtJbmRleCkgPSBIVE9OUyAoKigoKFVJTlQxNiAqKSBEYXRhKSArIElu ZGV4KSk7DQorICAgIH0NCisNCisgICAgU3RhdHVzID0gVGxzU2V0Q2lwaGVyTGlzdCAoSW5zdGFu Y2UtPlRsc0Nvbm4sIENpcGhlcklkLCBEYXRhU2l6ZSAvIHNpemVvZiAoRUZJX1RMU19DSVBIRVIp KTsNCisNCisgICAgRnJlZVBvb2wgKENpcGhlcklkKTsNCisgICAgYnJlYWs7DQorICBjYXNlIEVm aVRsc0NvbXByZXNzaW9uTWV0aG9kOg0KKyAgICAvLw0KKyAgICAvLyBUTFMgc2VlbXMgb25seSBk ZWZpbmUgb25lIENvbXByZXNzaW9uTWV0aG9kLm51bGwsIHdoaWNoIHNwZWNpZmllcyB0aGF0IGRh dGEgZXhjaGFuZ2VkIHZpYSB0aGUNCisgICAgLy8gcmVjb3JkIHByb3RvY29sIHdpbGwgbm90IGJl IGNvbXByZXNzZWQuDQorICAgIC8vIE1vcmUgaW5mb3JtYXRpb24gZnJvbSBPcGVuU1NMOiBodHRw Oi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvbWFubWFzdGVyL3NzbC9TU0xfQ09NUF9hZGRfY29tcHJl c3Npb25fbWV0aG9kLmh0bWwNCisgICAgLy8gVGhlIFRMUyBSRkMgZG9lcyBob3dldmVyIG5vdCBz cGVjaWZ5IGNvbXByZXNzaW9uIG1ldGhvZHMgb3IgdGhlaXIgY29ycmVzcG9uZGluZyBpZGVudGlm aWVycywNCisgICAgLy8gc28gdGhlcmUgaXMgY3VycmVudGx5IG5vIGNvbXBhdGlibGUgd2F5IHRv IGludGVncmF0ZSBjb21wcmVzc2lvbiB3aXRoIHVua25vd24gcGVlcnMuDQorICAgIC8vIEl0IGlz IHRoZXJlZm9yZSBjdXJyZW50bHkgbm90IHJlY29tbWVuZGVkIHRvIGludGVncmF0ZSBjb21wcmVz c2lvbiBpbnRvIGFwcGxpY2F0aW9ucy4NCisgICAgLy8gQXBwbGljYXRpb25zIGZvciBub24tcHVi bGljIHVzZSBtYXkgYWdyZWUgb24gY2VydGFpbiBjb21wcmVzc2lvbiBtZXRob2RzLg0KKyAgICAv LyBVc2luZyBkaWZmZXJlbnQgY29tcHJlc3Npb24gbWV0aG9kcyB3aXRoIHRoZSBzYW1lIGlkZW50 aWZpZXIgd2lsbCBsZWFkIHRvIGNvbm5lY3Rpb24gZmFpbHVyZS4NCisgICAgLy8NCisgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgRGF0YVNpemUgLyBzaXplb2YgKEVGSV9UTFNfQ09NUFJFU1NJ T04pOyBJbmRleCsrKSB7DQorICAgICAgU3RhdHVzID0gVGxzU2V0Q29tcHJlc3Npb25NZXRob2Qg KCooKFVJTlQ4ICopIERhdGEgKyBJbmRleCkpOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBicmVhazsN CisgIGNhc2UgRWZpVGxzRXh0ZW5zaW9uRGF0YToNCisgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9S VEVEOw0KKyAgICBnb3RvIE9OX0VYSVQ7DQorICBjYXNlIEVmaVRsc1ZlcmlmeU1ldGhvZDoNCisg ICAgaWYgKERhdGFTaXplICE9IHNpemVvZiAoRUZJX1RMU19WRVJJRlkpKSB7DQorICAgICAgU3Rh dHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgICAgIGdvdG8gT05fRVhJVDsNCisgICAg fQ0KKw0KKyAgICBUbHNTZXRWZXJpZnkgKEluc3RhbmNlLT5UbHNDb25uLCAqKChVSU5UMzIgKikg RGF0YSkpOw0KKyAgICBicmVhazsNCisgIGNhc2UgRWZpVGxzU2Vzc2lvbklEOg0KKyAgICBpZiAo RGF0YVNpemUgIT0gc2l6ZW9mIChFRklfVExTX1NFU1NJT05fSUQpKSB7DQorICAgICAgU3RhdHVz ID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgICAgIGdvdG8gT05fRVhJVDsNCisgICAgfQ0K Kw0KKyAgICBTdGF0dXMgPSBUbHNTZXRTZXNzaW9uSWQgKA0KKyAgICAgICAgICAgICAgIEluc3Rh bmNlLT5UbHNDb25uLA0KKyAgICAgICAgICAgICAgICgoRUZJX1RMU19TRVNTSU9OX0lEICopIERh dGEpLT5EYXRhLA0KKyAgICAgICAgICAgICAgICgoRUZJX1RMU19TRVNTSU9OX0lEICopIERhdGEp LT5MZW5ndGgNCisgICAgICAgICAgICAgICApOw0KKyAgICBicmVhazsNCisgIGNhc2UgRWZpVGxz U2Vzc2lvblN0YXRlOg0KKyAgICBpZiAoRGF0YVNpemUgIT0gc2l6ZW9mIChFRklfVExTX1NFU1NJ T05fU1RBVEUpKSB7DQorICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAg ICAgIGdvdG8gT05fRVhJVDsNCisgICAgfQ0KKw0KKyAgICBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0 YXRlID0gKihFRklfVExTX1NFU1NJT05fU1RBVEUgKikgRGF0YTsNCisgICAgYnJlYWs7DQorICAv Lw0KKyAgLy8gU2Vzc2lvbiBpbmZvcm1hdGlvbg0KKyAgLy8NCisgIGNhc2UgRWZpVGxzQ2xpZW50 UmFuZG9tOg0KKyAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCisgICAgYnJlYWs7DQor ICBjYXNlIEVmaVRsc1NlcnZlclJhbmRvbToNCisgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5J RUQ7DQorICAgIGJyZWFrOw0KKyAgY2FzZSBFZmlUbHNLZXlNYXRlcmlhbDoNCisgICAgU3RhdHVz ID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQorICAgIGJyZWFrOw0KKyAgLy8NCisgIC8vIFVuc3VwcG9y dGVkIHR5cGUuDQorICAvLw0KKyAgZGVmYXVsdDoNCisgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9S VEVEOw0KKyAgfQ0KKw0KK09OX0VYSVQ6DQorICBnQlMtPlJlc3RvcmVUUEwgKE9sZFRwbCk7DQor ICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgIEdldCBUTFMgc2Vzc2lvbiBkYXRhLg0K Kw0KKyAgVGhlIEdldFNlc3Npb25EYXRhKCkgZnVuY3Rpb24gcmV0dXJuIHRoZSBUTFMgc2Vzc2lv biBpbmZvcm1hdGlvbi4NCisNCisgIEBwYXJhbVtpbl0gICAgICAgVGhpcyAgICAgICAgICAgUG9p bnRlciB0byB0aGUgRUZJX1RMU19QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gICAg ICAgRGF0YVR5cGUgICAgICAgVExTIHNlc3Npb24gZGF0YSB0eXBlLg0KKyAgQHBhcmFtW2luLCBv dXRdICBEYXRhICAgICAgICAgICBQb2ludGVyIHRvIHNlc3Npb24gZGF0YS4NCisgIEBwYXJhbVtp biwgb3V0XSAgRGF0YVNpemUgICAgICAgVG90YWwgc2l6ZSBvZiBzZXNzaW9uIGRhdGEuIE9uIGlu cHV0LCBpdCBtZWFucw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6 ZSBvZiBEYXRhIGJ1ZmZlci4gT24gb3V0cHV0LCBpdCBtZWFucyB0aGUgc2l6ZQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBjb3BpZWQgRGF0YSBidWZmZXIgaWYgRUZJX1NV Q0NFU1MsIGFuZCBtZWFucyB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZSBvZiBkZXNpcmVkIERhdGEgYnVmZmVyIGlmIEVGSV9CVUZGRVJfVE9PX1NNQUxMLg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgVExTIHNlc3Npb24gZGF0YSBp cyBnb3Qgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBP bmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgVFJVRToNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBOVUxMLg0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSBpcyBOVUxMLg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEYXRhIGlzIE5VTEwgaWYgKkRhdGFTaXplIGlzIG5vdCB6ZXJvLg0K KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBUaGUgRGF0YVR5cGUgaXMgdW5zdXBw b3J0ZWQuDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgIFRoZSBUTFMgc2Vzc2lv biBkYXRhIGlzIG5vdCBmb3VuZC4NCisgIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgICAg VGhlIERhdGFUeXBlIGlzIG5vdCByZWFkeSBpbiBjdXJyZW50IHNlc3Npb24gc3RhdGUuDQorICBA cmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICAgIFRoZSBidWZmZXIgaXMgdG9vIHNtYWxsIHRv IGhvbGQgdGhlIGRhdGEuDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Rsc0dldFNlc3Np b25EYXRhICgNCisgIElOICAgICBFRklfVExTX1BST1RPQ09MICAgICAgICAgICAgICAqVGhpcywN CisgIElOICAgICBFRklfVExTX1NFU1NJT05fREFUQV9UWVBFICAgICBEYXRhVHlwZSwNCisgIElO IE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YSwgIE9QVElPTkFMDQorICBJ TiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFTaXplDQorICApDQorew0K KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBUTFNfSU5TVEFOQ0UgICAg ICAgICAgICAgICpJbnN0YW5jZTsNCisNCisgIEVGSV9UUEwgICAgICAgICAgICAgICAgICAgT2xk VHBsOw0KKw0KKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQorDQorICBpZiAoVGhpcyA9PSBOVUxM IHx8IERhdGFTaXplID09IE5VTEwgfHwgKERhdGEgPT0gTlVMTCAmJiAqRGF0YVNpemUgIT0gMCkp IHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIE9sZFRw bCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9DQUxMQkFDSyk7DQorDQorICBJbnN0YW5jZSA9IFRMU19J TlNUQU5DRV9GUk9NX1BST1RPQ09MX1RISVMgKFRoaXMpOw0KKw0KKyAgaWYgKEluc3RhbmNlLT5U bHNTZXNzaW9uU3RhdGUgPT0gRWZpVGxzU2Vzc2lvbk5vdFN0YXJ0ZWQgJiYNCisgICAgKERhdGFU eXBlID09IEVmaVRsc1Nlc3Npb25JRCB8fCBEYXRhVHlwZSA9PSBFZmlUbHNDbGllbnRSYW5kb20g fHwNCisgICAgRGF0YVR5cGUgPT0gRWZpVGxzU2VydmVyUmFuZG9tIHx8IERhdGFUeXBlID09IEVm aVRsc0tleU1hdGVyaWFsKSkgew0KKyAgICBTdGF0dXMgPSBFRklfTk9UX1JFQURZOw0KKyAgICBn b3RvIE9OX0VYSVQ7DQorICB9DQorDQorICBzd2l0Y2ggKERhdGFUeXBlKSB7DQorICBjYXNlIEVm aVRsc1ZlcnNpb246DQorICAgIGlmICgqRGF0YVNpemUgPCBzaXplb2YgKEVGSV9UTFNfVkVSU0lP TikpIHsNCisgICAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfVkVSU0lPTik7DQorICAg ICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQorICAgICAgZ290byBPTl9FWElUOw0K KyAgICB9DQorICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19WRVJTSU9OKTsNCisgICAg KigoVUlOVDE2ICopIERhdGEpID0gSFRPTlMgKFRsc0dldFZlcnNpb24gKEluc3RhbmNlLT5UbHND b25uKSk7DQorICAgIGJyZWFrOw0KKyAgY2FzZSBFZmlUbHNDb25uZWN0aW9uRW5kOg0KKyAgICBp ZiAoKkRhdGFTaXplIDwgc2l6ZW9mIChFRklfVExTX0NPTk5FQ1RJT05fRU5EKSkgew0KKyAgICAg ICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19DT05ORUNUSU9OX0VORCk7DQorICAgICAgU3Rh dHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQorICAgICAgZ290byBPTl9FWElUOw0KKyAgICB9 DQorICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19DT05ORUNUSU9OX0VORCk7DQorICAg ICooKFVJTlQ4ICopIERhdGEpID0gVGxzR2V0Q29ubmVjdGlvbkVuZCAoSW5zdGFuY2UtPlRsc0Nv bm4pOw0KKyAgICBicmVhazsNCisgIGNhc2UgRWZpVGxzQ2lwaGVyTGlzdDoNCisgICAgLy8NCisg ICAgLy8gR2V0IHRoZSBjdXJyZW50IHNlc3Npb24gY2lwaGVyIHN1aXRlLg0KKyAgICAvLw0KKyAg ICBpZiAoKkRhdGFTaXplIDwgc2l6ZW9mIChFRklfVExTX0NJUEhFUikpIHsNCisgICAgICAqRGF0 YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfQ0lQSEVSKTsNCisgICAgICBTdGF0dXMgPSBFRklfQlVG RkVSX1RPT19TTUFMTDsNCisgICAgICBnb3RvIE9OX0VYSVQ7DQorICAgIH0NCisgICAgKkRhdGFT aXplID0gc2l6ZW9mKEVGSV9UTFNfQ0lQSEVSKTsNCisgICAgU3RhdHVzID0gVGxzR2V0Q3VycmVu dENpcGhlciAoSW5zdGFuY2UtPlRsc0Nvbm4sIChVSU5UMTYgKikgRGF0YSk7DQorICAgICooKFVJ TlQxNiAqKSBEYXRhKSA9IEhUT05TICgqKChVSU5UMTYgKikgRGF0YSkpOw0KKyAgICBicmVhazsN CisgIGNhc2UgRWZpVGxzQ29tcHJlc3Npb25NZXRob2Q6DQorICAgIC8vDQorICAgIC8vIEdldCB0 aGUgY3VycmVudCBzZXNzaW9uIGNvbXByZXNzaW9uIG1ldGhvZC4NCisgICAgLy8NCisgICAgaWYg KCpEYXRhU2l6ZSA8IHNpemVvZiAoRUZJX1RMU19DT01QUkVTU0lPTikpIHsNCisgICAgICAqRGF0 YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfQ09NUFJFU1NJT04pOw0KKyAgICAgIFN0YXR1cyA9IEVG SV9CVUZGRVJfVE9PX1NNQUxMOw0KKyAgICAgIGdvdG8gT05fRVhJVDsNCisgICAgfQ0KKyAgICAq RGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfQ09NUFJFU1NJT04pOw0KKyAgICBTdGF0dXMgPSBU bHNHZXRDdXJyZW50Q29tcHJlc3Npb25JZCAoSW5zdGFuY2UtPlRsc0Nvbm4sIChVSU5UOCAqKSBE YXRhKTsNCisgICAgYnJlYWs7DQorICBjYXNlIEVmaVRsc0V4dGVuc2lvbkRhdGE6DQorICAgIFN0 YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCisgICAgZ290byBPTl9FWElUOw0KKyAgY2FzZSBFZmlU bHNWZXJpZnlNZXRob2Q6DQorICAgIGlmICgqRGF0YVNpemUgPCBzaXplb2YgKEVGSV9UTFNfVkVS SUZZKSkgew0KKyAgICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19WRVJJRlkpOw0KKyAg ICAgIFN0YXR1cyA9IEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KKyAgICAgIGdvdG8gT05fRVhJVDsN CisgICAgfQ0KKyAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfVkVSSUZZKTsNCisgICAg KigoVUlOVDMyICopIERhdGEpID0gVGxzR2V0VmVyaWZ5IChJbnN0YW5jZS0+VGxzQ29ubik7DQor ICAgIGJyZWFrOw0KKyAgY2FzZSBFZmlUbHNTZXNzaW9uSUQ6DQorICAgIGlmICgqRGF0YVNpemUg PCBzaXplb2YgKEVGSV9UTFNfU0VTU0lPTl9JRCkpIHsNCisgICAgICAqRGF0YVNpemUgPSBzaXpl b2YgKEVGSV9UTFNfU0VTU0lPTl9JRCk7DQorICAgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09f U01BTEw7DQorICAgICAgZ290byBPTl9FWElUOw0KKyAgICB9DQorICAgICpEYXRhU2l6ZSA9IHNp emVvZiAoRUZJX1RMU19TRVNTSU9OX0lEKTsNCisgICAgU3RhdHVzID0gVGxzR2V0U2Vzc2lvbklk ICgNCisgICAgICAgICAgICAgICBJbnN0YW5jZS0+VGxzQ29ubiwNCisgICAgICAgICAgICAgICAo KEVGSV9UTFNfU0VTU0lPTl9JRCAqKSBEYXRhKS0+RGF0YSwNCisgICAgICAgICAgICAgICAmKCgo RUZJX1RMU19TRVNTSU9OX0lEICopIERhdGEpLT5MZW5ndGgpDQorICAgICAgICAgICAgICAgKTsN CisgICAgYnJlYWs7DQorICBjYXNlIEVmaVRsc1Nlc3Npb25TdGF0ZToNCisgICAgaWYgKCpEYXRh U2l6ZSA8IHNpemVvZiAoRUZJX1RMU19TRVNTSU9OX1NUQVRFKSkgew0KKyAgICAgICpEYXRhU2l6 ZSA9IHNpemVvZiAoRUZJX1RMU19TRVNTSU9OX1NUQVRFKTsNCisgICAgICBTdGF0dXMgPSBFRklf QlVGRkVSX1RPT19TTUFMTDsNCisgICAgICBnb3RvIE9OX0VYSVQ7DQorICAgIH0NCisgICAgKkRh dGFTaXplID0gc2l6ZW9mIChFRklfVExTX1NFU1NJT05fU1RBVEUpOw0KKyAgICBDb3B5TWVtIChE YXRhLCAmSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSwgKkRhdGFTaXplKTsNCisgICAgYnJlYWs7 DQorICBjYXNlIEVmaVRsc0NsaWVudFJhbmRvbToNCisgICAgaWYgKCpEYXRhU2l6ZSA8IHNpemVv ZiAoRUZJX1RMU19SQU5ET00pKSB7DQorICAgICAgKkRhdGFTaXplID0gc2l6ZW9mIChFRklfVExT X1JBTkRPTSk7DQorICAgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQorICAgICAg Z290byBPTl9FWElUOw0KKyAgICB9DQorICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19S QU5ET00pOw0KKyAgICBUbHNHZXRDbGllbnRSYW5kb20gKEluc3RhbmNlLT5UbHNDb25uLCAoVUlO VDggKikgRGF0YSk7DQorICAgIGJyZWFrOw0KKyAgY2FzZSBFZmlUbHNTZXJ2ZXJSYW5kb206DQor ICAgIGlmICgqRGF0YVNpemUgPCBzaXplb2YgKEVGSV9UTFNfUkFORE9NKSkgew0KKyAgICAgICpE YXRhU2l6ZSA9IHNpemVvZiAoRUZJX1RMU19SQU5ET00pOw0KKyAgICAgIFN0YXR1cyA9IEVGSV9C VUZGRVJfVE9PX1NNQUxMOw0KKyAgICAgIGdvdG8gT05fRVhJVDsNCisgICAgfQ0KKyAgICAqRGF0 YVNpemUgPSBzaXplb2YgKEVGSV9UTFNfUkFORE9NKTsNCisgICAgVGxzR2V0U2VydmVyUmFuZG9t IChJbnN0YW5jZS0+VGxzQ29ubiwgKFVJTlQ4ICopIERhdGEpOw0KKyAgICBicmVhazsNCisgIGNh c2UgRWZpVGxzS2V5TWF0ZXJpYWw6DQorICAgIGlmICgqRGF0YVNpemUgPCBzaXplb2YgKEVGSV9U TFNfTUFTVEVSX1NFQ1JFVCkpIHsNCisgICAgICAqRGF0YVNpemUgPSBzaXplb2YgKEVGSV9UTFNf TUFTVEVSX1NFQ1JFVCk7DQorICAgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7DQor ICAgICAgZ290byBPTl9FWElUOw0KKyAgICB9DQorICAgICpEYXRhU2l6ZSA9IHNpemVvZiAoRUZJ X1RMU19NQVNURVJfU0VDUkVUKTsNCisgICAgU3RhdHVzID0gVGxzR2V0S2V5TWF0ZXJpYWwgKElu c3RhbmNlLT5UbHNDb25uLCAoVUlOVDggKikgRGF0YSk7DQorICAgIGJyZWFrOw0KKyAgLy8NCisg IC8vIFVuc3VwcG9ydGVkIHR5cGUuDQorICAvLw0KKyAgZGVmYXVsdDoNCisgICAgU3RhdHVzID0g RUZJX1VOU1VQUE9SVEVEOw0KKyAgfQ0KKw0KK09OX0VYSVQ6DQorICBnQlMtPlJlc3RvcmVUUEwg KE9sZFRwbCk7DQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgIEJ1aWxkIHJlc3Bv bnNlIHBhY2tldCBhY2NvcmRpbmcgdG8gVExTIHN0YXRlIG1hY2hpbmUuIFRoaXMgZnVuY3Rpb24g aXMgb25seSB2YWxpZCBmb3INCisgIGFsZXJ0LCBoYW5kc2hha2UgYW5kIGNoYW5nZV9jaXBoZXJf c3BlYyBjb250ZW50IHR5cGUuDQorDQorICBUaGUgQnVpbGRSZXNwb25zZVBhY2tldCgpIGZ1bmN0 aW9uIGJ1aWxkcyBUTFMgcmVzcG9uc2UgcGFja2V0IGluIHJlc3BvbnNlIHRvIHRoZSBUTFMNCisg IHJlcXVlc3QgcGFja2V0IHNwZWNpZmllZCBieSBSZXF1ZXN0QnVmZmVyIGFuZCBSZXF1ZXN0U2l6 ZS4gSWYgUmVxdWVzdEJ1ZmZlciBpcyBOVUxMIGFuZA0KKyAgUmVxdWVzdFNpemUgaXMgMCwgYW5k IFRMUyBzZXNzaW9uIHN0YXR1cyBpcyBFZmlUbHNTZXNzaW9uTm90U3RhcnRlZCwgdGhlIFRMUyBz ZXNzaW9uDQorICB3aWxsIGJlIGluaXRpYXRlZCBhbmQgdGhlIHJlc3BvbnNlIHBhY2tldCBuZWVk cyB0byBiZSBDbGllbnRIZWxsby4gSWYgUmVxdWVzdEJ1ZmZlciBpcw0KKyAgTlVMTCBhbmQgUmVx dWVzdFNpemUgaXMgMCwgYW5kIFRMUyBzZXNzaW9uIHN0YXR1cyBpcyBFZmlUbHNTZXNzaW9uQ2xv c2luZywgdGhlIFRMUw0KKyAgc2Vzc2lvbiB3aWxsIGJlIGNsb3NlZCBhbmQgcmVzcG9uc2UgcGFj a2V0IG5lZWRzIHRvIGJlIENsb3NlTm90aWZ5LiBJZiBSZXF1ZXN0QnVmZmVyIGlzDQorICBOVUxM IGFuZCBSZXF1ZXN0U2l6ZSBpcyAwLCBhbmQgVExTIHNlc3Npb24gc3RhdHVzIGlzIEVmaVRsc1Nl c3Npb25FcnJvciwgdGhlIFRMUw0KKyAgc2Vzc2lvbiBoYXMgZXJyb3JzIGFuZCB0aGUgcmVzcG9u c2UgcGFja2V0IG5lZWRzIHRvIGJlIEFsZXJ0IG1lc3NhZ2UgYmFzZWQgb24gZXJyb3INCisgIHR5 cGUuDQorDQorICBAcGFyYW1baW5dICAgICAgIFRoaXMgICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IEVGSV9UTFNfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1baW5dICAgICAgIFJlcXVlc3RC dWZmZXIgIFBvaW50ZXIgdG8gdGhlIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgVExTIHBhY2tldC4g TlVMTA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBUTFMgbmVlZCBp bml0aWF0ZSB0aGUgVExTIHNlc3Npb24gYW5kIHJlc3BvbnNlDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhY2tldCBuZWVkIHRvIGJlIENsaWVudEhlbGxvLg0KKyAgQHBhcmFt W2luXSAgICAgICBSZXF1ZXN0U2l6ZSAgICBQYWNrZXQgc2l6ZSBpbiBieXRlcyBmb3IgdGhlIG1v c3QgcmVjZW50bHkgcmVjZWl2ZWQgVExTDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhY2tldC4gMCBpcyBvbmx5IHZhbGlkIHdoZW4gUmVxdWVzdEJ1ZmZlciBpcyBOVUxMLg0K KyAgQHBhcmFtW291dF0gICAgICBCdWZmZXIgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIg dG8gaG9sZCB0aGUgYnVpbHQgcGFja2V0Lg0KKyAgQHBhcmFtW2luLCBvdXRdICBCdWZmZXJTaXpl ICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcy4gT24gaW5wdXQsIGl0IGlz DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgc2l6ZSBwcm92 aWRlZCBieSB0aGUgY2FsbGVyLiBPbiBvdXRwdXQsIGl0DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlzIHRoZSBidWZmZXIgc2l6ZSBpbiBmYWN0IG5lZWRlZCB0byBjb250YWlu IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQuDQorDQorICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSByZXF1aXJlZCBUTFMgcGFja2V0IGlz IGJ1aWx0IHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAg T25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIFRSVUU6DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgTlVMTC4NCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdEJ1ZmZlciBpcyBOVUxMIGJ1dCBSZXF1ZXN0U2l6 ZSBpcyBOT1QgMC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdFNp emUgaXMgMCBidXQgUmVxdWVzdEJ1ZmZlciBpcyBOT1QgTlVMTC4NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZSBpcyBOVUxMLg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCdWZmZXIgaXMgTlVMTCBpZiAqQnVmZmVyU2l6ZSBpcyBub3QgemVy by4NCisgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgICAgQnVmZmVyU2l6ZSBpcyB0b28g c21hbGwgdG8gaG9sZCB0aGUgcmVzcG9uc2UgcGFja2V0Lg0KKyAgQHJldHZhbCBFRklfTk9UX1JF QURZICAgICAgICAgICBDdXJyZW50IFRMUyBzZXNzaW9uIHN0YXRlIGlzIE5PVCByZWFkeSB0byBi dWlsZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZVBhY2tldC4N CisgIEByZXR2YWwgRUZJX0FCT1JURUQgICAgICAgICAgICAgU29tZXRoaW5nIHdyb25nIGJ1aWxk IHJlc3BvbnNlIHBhY2tldC4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorVGxzQnVpbGRS ZXNwb25zZVBhY2tldCAoDQorICBJTiAgICAgRUZJX1RMU19QUk9UT0NPTCAgICAgICAgICAgICAg KlRoaXMsDQorICBJTiAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgKlJlcXVlc3RC dWZmZXIsIE9QVElPTkFMDQorICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg UmVxdWVzdFNpemUsIE9QVElPTkFMDQorICAgICBPVVQgVUlOVDggICAgICAgICAgICAgICAgICAg ICAgICAgKkJ1ZmZlciwgT1BUSU9OQUwNCisgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAqQnVmZmVyU2l6ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgU3RhdHVzOw0KKyAgVExTX0lOU1RBTkNFICAgICAgICAgICAgICAqSW5zdGFuY2U7DQorICBF RklfVFBMICAgICAgICAgICAgICAgICAgIE9sZFRwbDsNCisNCisgIFN0YXR1cyA9IEVGSV9TVUND RVNTOw0KKw0KKyAgaWYgKChUaGlzID09IE5VTEwpIHx8IChCdWZmZXJTaXplID09IE5VTEwpIHx8 DQorICAgICAgKFJlcXVlc3RCdWZmZXIgPT0gTlVMTCAmJiBSZXF1ZXN0U2l6ZSAhPSAwKSB8fA0K KyAgICAgIChSZXF1ZXN0QnVmZmVyICE9IE5VTEwgJiYgUmVxdWVzdFNpemUgPT0gMCkgfHwNCisg ICAgICAoQnVmZmVyID09IE5VTEwgJiYgKkJ1ZmZlclNpemUgIT0wKSkgew0KKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQ TCAoVFBMX0NBTExCQUNLKTsNCisNCisgIEluc3RhbmNlID0gVExTX0lOU1RBTkNFX0ZST01fUFJP VE9DT0xfVEhJUyAoVGhpcyk7DQorDQorICBpZihSZXF1ZXN0QnVmZmVyID09IE5VTEwgJiYgUmVx dWVzdFNpemUgPT0gMCkgew0KKyAgICBzd2l0Y2ggKEluc3RhbmNlLT5UbHNTZXNzaW9uU3RhdGUp IHsNCisgICAgY2FzZSBFZmlUbHNTZXNzaW9uTm90U3RhcnRlZDoNCisgICAgICAvLw0KKyAgICAg IC8vIENsaWVudEhlbGxvLg0KKyAgICAgIC8vDQorICAgICAgU3RhdHVzID0gVGxzRG9IYW5kc2hh a2UgKA0KKyAgICAgICAgICAgICAgICAgSW5zdGFuY2UtPlRsc0Nvbm4sDQorICAgICAgICAgICAg ICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAgICAgIEJ1ZmZl ciwNCisgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUNCisgICAgICAgICAgICAgICAgICk7DQor ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgICAgZ290byBPTl9FWElUOw0K KyAgICAgIH0NCisNCisgICAgICAvLw0KKyAgICAgIC8vICpCdWZmZXJTaXplIHNob3VsZCBub3Qg YmUgemVybyB3aGVuIENsaWVudEhlbGxvLg0KKyAgICAgIC8vDQorICAgICAgaWYgKCpCdWZmZXJT aXplID09IDApIHsNCisgICAgICAgIFN0YXR1cyA9IEVGSV9BQk9SVEVEOw0KKyAgICAgICAgZ290 byBPTl9FWElUOw0KKyAgICAgIH0NCisNCisgICAgICBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0YXRl ID0gRWZpVGxzU2Vzc2lvbkhhbmRTaGFraW5nOw0KKw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNl IEVmaVRsc1Nlc3Npb25DbG9zaW5nOg0KKyAgICAgIC8vDQorICAgICAgLy8gVExTIHNlc3Npb24g d2lsbCBiZSBjbG9zZWQgYW5kIHJlc3BvbnNlIHBhY2tldCBuZWVkcyB0byBiZSBDbG9zZU5vdGlm eS4NCisgICAgICAvLw0KKyAgICAgIFN0YXR1cyA9IFRsc0Nsb3NlTm90aWZ5ICgNCisgICAgICAg ICAgICAgICAgIEluc3RhbmNlLT5UbHNDb25uLA0KKyAgICAgICAgICAgICAgICAgQnVmZmVyLA0K KyAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZQ0KKyAgICAgICAgICAgICAgICAgKTsNCisgICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgICBnb3RvIE9OX0VYSVQ7DQorICAg ICAgfQ0KKw0KKyAgICAgIC8vDQorICAgICAgLy8gKkJ1ZmZlclNpemUgc2hvdWxkIG5vdCBiZSB6 ZXJvIHdoZW4gYnVpbGQgQ2xvc2VOb3RpZnkgbWVzc2FnZS4NCisgICAgICAvLw0KKyAgICAgIGlm ICgqQnVmZmVyU2l6ZSA9PSAwKSB7DQorICAgICAgICBTdGF0dXMgPSBFRklfQUJPUlRFRDsNCisg ICAgICAgIGdvdG8gT05fRVhJVDsNCisgICAgICB9DQorDQorICAgICAgYnJlYWs7DQorICAgIGNh c2UgRWZpVGxzU2Vzc2lvbkVycm9yOg0KKyAgICAgIC8vDQorICAgICAgLy8gVExTIHNlc3Npb24g aGFzIGVycm9ycyBhbmQgdGhlIHJlc3BvbnNlIHBhY2tldCBuZWVkcyB0byBiZSBBbGVydA0KKyAg ICAgIC8vIG1lc3NhZ2UgYmFzZWQgb24gZXJyb3IgdHlwZS4NCisgICAgICAvLw0KKyAgICAgIFN0 YXR1cyA9IFRsc0hhbmRlQWxlcnQgKA0KKyAgICAgICAgICAgICAgICAgSW5zdGFuY2UtPlRsc0Nv bm4sDQorICAgICAgICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgICAgMCwNCisgICAg ICAgICAgICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUNCisgICAg ICAgICAgICAgICAgICk7DQorICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAg ICAgZ290byBPTl9FWElUOw0KKyAgICAgIH0NCisNCisgICAgICBicmVhazsNCisgICAgZGVmYXVs dDoNCisgICAgICAvLw0KKyAgICAgIC8vIEN1cnJlbnQgVExTIHNlc3Npb24gc3RhdGUgaXMgTk9U IHJlYWR5IHRvIGJ1aWxkIFJlc3BvbnNlUGFja2V0Lg0KKyAgICAgIC8vDQorICAgICAgU3RhdHVz ID0gRUZJX05PVF9SRUFEWTsNCisgICAgfQ0KKyAgfSBlbHNlIHsNCisgICAgLy8NCisgICAgLy8g MS4gUmVjZWl2ZWQgcGFja2V0IG1heSBoYXZlIG11bHRpcGx5IFRMUyByZWNvcmQgbWVzc2FnZXMu DQorICAgIC8vIDIuIE9uZSBUTFMgcmVjb3JkIG1lc3NhZ2UgbWF5IGhhdmUgbXVsdGlwbHkgaGFu ZHNoYWtlIHByb3RvY29sLg0KKyAgICAvLyAzLiBTb21lIGVycm9ycyBtYXkgYmUgaGFwcGVuZWQg aW4gaGFuZHNoYWtlLg0KKyAgICAvLyBUbHNEb0hhbmRzaGFrZSgpIGNhbiBoYW5kbGUgYWxsIG9m IHRob3NlIGNhc2VzLg0KKyAgICAvLw0KKyAgICBpZiAoVGxzSW5IYW5kc2hha2UgKEluc3RhbmNl LT5UbHNDb25uKSkgew0KKyAgICAgIFN0YXR1cyA9IFRsc0RvSGFuZHNoYWtlICgNCisgICAgICAg ICAgICAgICAgIEluc3RhbmNlLT5UbHNDb25uLA0KKyAgICAgICAgICAgICAgICAgUmVxdWVzdEJ1 ZmZlciwNCisgICAgICAgICAgICAgICAgIFJlcXVlc3RTaXplLA0KKyAgICAgICAgICAgICAgICAg QnVmZmVyLA0KKyAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZQ0KKyAgICAgICAgICAgICAgICAg KTsNCisgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgICBnb3RvIE9OX0VY SVQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmICghVGxzSW5IYW5kc2hha2UgKEluc3RhbmNlLT5U bHNDb25uKSkgew0KKyAgICAgICAgSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSA9IEVmaVRsc1Nl c3Npb25EYXRhVHJhbnNmZXJyaW5nOw0KKyAgICAgIH0NCisgICAgfSBlbHNlIHsNCisgICAgICAv Lw0KKyAgICAgIC8vIE11c3QgYmUgYWxlcnQgbWVzc2FnZSwgRGVjcnlwdCBpdCBhbmQgYnVpbGQg dGhlIFJlc3BvbnNlUGFja2V0Lg0KKyAgICAgIC8vDQorICAgICAgQVNTRVJUICgoKFRMU19SRUNP UkRfSEVBREVSICopIFJlcXVlc3RCdWZmZXIpLT5Db250ZW50VHlwZSA9PSBUTFNfQ09OVEVOVF9U WVBFX0FMRVJUKTsNCisNCisgICAgICBTdGF0dXMgPSBUbHNIYW5kZUFsZXJ0ICgNCisgICAgICAg ICAgICAgICAgIEluc3RhbmNlLT5UbHNDb25uLA0KKyAgICAgICAgICAgICAgICAgUmVxdWVzdEJ1 ZmZlciwNCisgICAgICAgICAgICAgICAgIFJlcXVlc3RTaXplLA0KKyAgICAgICAgICAgICAgICAg QnVmZmVyLA0KKyAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZQ0KKyAgICAgICAgICAgICAgICAg KTsNCisgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgICBpZiAoU3RhdHVz ICE9IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQorICAgICAgICAgIEluc3RhbmNlLT5UbHNTZXNz aW9uU3RhdGUgPSBFZmlUbHNTZXNzaW9uRXJyb3I7DQorICAgICAgICB9DQorDQorICAgICAgICBn b3RvIE9OX0VYSVQ7DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorDQorT05fRVhJVDoNCisgIGdC Uy0+UmVzdG9yZVRQTCAoT2xkVHBsKTsNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0K KyAgRGVjcnlwdCBvciBlbmNyeXB0IFRMUyBwYWNrZXQgZHVyaW5nIHNlc3Npb24uIFRoaXMgZnVu Y3Rpb24gaXMgb25seSB2YWxpZCBhZnRlcg0KKyAgc2Vzc2lvbiBjb25uZWN0ZWQgYW5kIGZvciBh cHBsaWNhdGlvbl9kYXRhIGNvbnRlbnQgdHlwZS4NCisNCisgIFRoZSBQcm9jZXNzUGFja2V0ICgp IGZ1bmN0aW9uIHByb2Nlc3MgZWFjaCBpbmJvdW5kIG9yIG91dGJvdW5kIFRMUyBBUFAgcGFja2V0 Lg0KKw0KKyAgQHBhcmFtW2luXSAgICAgICBUaGlzICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBF RklfVExTX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luLCBvdXRdICBGcmFnbWVudFRh YmxlICBQb2ludGVyIHRvIGEgbGlzdCBvZiBmcmFnbWVudC4gVGhlIGNhbGxlciB3aWxsIHRha2UN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2libGUgdG8gaGFuZGxl IHRoZSBvcmlnaW5hbCBGcmFnbWVudFRhYmxlIHdoaWxlDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGl0IG1heSBiZSByZWFsbG9jYXRlZCBpbiBUTFMgZHJpdmVyLiBJZiBDcnlw dE1vZGUgaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVGxzRW5jcnlw dCwgb24gaW5wdXQgdGhlc2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUw0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgYW5kIHBsYWluIHRleHQgVExTIEFQUCBwYXls b2FkOyBvbiBvdXRwdXQgdGhlc2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5kIGNpcGhlciB0ZXh0IFRMUw0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAgcGF5bG9hZC4gSWYgQ3J5cHRNb2Rl IGlzIEVmaVRsc0RlY3J5cHQsIG9uIGlucHV0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZXNlIGZyYWdtZW50cyBjb250YWluIHRoZSBUTFMgaGVhZGVyIGFuZCBjaXBoZXIg dGV4dA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTFMgQVBQIHBheWxvYWQ7 IG9uIG91dHB1dCB0aGVzZSBmcmFnbWVudHMgY29udGFpbiB0aGUNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVExTIGhlYWRlciBhbmQgcGxhaW4gdGV4dCBUTFMgQVBQIHBheWxv YWQuDQorICBAcGFyYW1baW5dICAgICAgIEZyYWdtZW50Q291bnQgIE51bWJlciBvZiBmcmFnbWVu dC4NCisgIEBwYXJhbVtpbl0gICAgICAgQ3J5cHRNb2RlICAgICAgQ3J5cHQgbW9kZS4NCisNCisg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQg c3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUgb3Ig bW9yZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgVFJVRToNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBOVUxMLg0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGcmFnbWVudFRhYmxlIGlzIE5VTEwuDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZyYWdtZW50Q291bnQgaXMgTlVMTC4NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ3J5cHRvTW9kZSBpcyBpbnZhbGlkLg0KKyAgQHJldHZhbCBFRklf Tk9UX1JFQURZICAgICAgICAgICBDdXJyZW50IFRMUyBzZXNzaW9uIHN0YXRlIGlzIE5PVA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlUbHNTZXNzaW9uRGF0YVRyYW5zZmVy cmluZy4NCisgIEByZXR2YWwgRUZJX0FCT1JURUQgICAgICAgICAgICAgU29tZXRoaW5nIHdyb25n IGRlY3J5cHRpb24gdGhlIG1lc3NhZ2UuIFRMUyBzZXNzaW9uDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXR1cyB3aWxsIGJlY29tZSBFZmlUbHNTZXNzaW9uRXJyb3IuIFRo ZSBjYWxsZXIgbmVlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsIEJ1 aWxkUmVzcG9uc2VQYWNrZXQoKSB0byBnZW5lcmF0ZSBFcnJvciBBbGVydA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGFuZCBzZW5kIGl0IG91dC4NCisgIEByZXR2 YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgTm8gZW5vdWdoIHJlc291cmNlIHRvIGZpbmlzaCB0 aGUgb3BlcmF0aW9uLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitUbHNQcm9jZXNzUGFj a2V0ICgNCisgIElOICAgICBFRklfVExTX1BST1RPQ09MICAgICAgICAgICAgICAqVGhpcywNCisg IElOIE9VVCBFRklfVExTX0ZSQUdNRU5UX0RBVEEgICAgICAgICAqKkZyYWdtZW50VGFibGUsDQor ICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgKkZyYWdtZW50Q291bnQsDQor ICBJTiAgICAgRUZJX1RMU19DUllQVF9NT0RFICAgICAgICAgICAgQ3J5cHRNb2RlDQorICApDQor ew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBUTFNfSU5TVEFOQ0Ug ICAgICAgICAgICAgICpJbnN0YW5jZTsNCisNCisgIEVGSV9UUEwgICAgICAgICAgICAgICAgICAg T2xkVHBsOw0KKw0KKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQorDQorICBpZiAoVGhpcyA9PSBO VUxMIHx8IEZyYWdtZW50VGFibGUgPT0gTlVMTCB8fCBGcmFnbWVudENvdW50ID09IE5VTEwpIHsN CisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIE9sZFRwbCA9 IGdCUy0+UmFpc2VUUEwgKFRQTF9DQUxMQkFDSyk7DQorDQorICBJbnN0YW5jZSA9IFRMU19JTlNU QU5DRV9GUk9NX1BST1RPQ09MX1RISVMgKFRoaXMpOw0KKw0KKyAgaWYgKEluc3RhbmNlLT5UbHNT ZXNzaW9uU3RhdGUgIT0gRWZpVGxzU2Vzc2lvbkRhdGFUcmFuc2ZlcnJpbmcpIHsNCisgICAgU3Rh dHVzID0gRUZJX05PVF9SRUFEWTsNCisgICAgZ290byBPTl9FWElUOw0KKyAgfQ0KKw0KKyAgLy8N CisgIC8vIFBhY2tldCBzZW50IG9yIHJlY2VpdmVkIG1heSBoYXZlIG11bHRpcGx5IFRMUyByZWNv cmQgbWVzc2FnZShBcHBsaWNhdGlvbiBkYXRhIHR5cGUpLg0KKyAgLy8gU28sb24gaW5wdXQgdGhl c2UgZnJhZ21lbnRzIGNvbnRhaW4gdGhlIFRMUyBoZWFkZXIgYW5kIFRMUyBBUFAgcGF5bG9hZDsN CisgIC8vIG9uIG91dHB1dCB0aGVzZSBmcmFnbWVudHMgYWxzbyBjb250YWluIHRoZSBUTFMgaGVh ZGVyIGFuZCBUTFMgQVBQIHBheWxvYWQuDQorICAvLw0KKyAgc3dpdGNoIChDcnlwdE1vZGUpIHsN CisgIGNhc2UgRWZpVGxzRW5jcnlwdDoNCisgICAgU3RhdHVzID0gVGxzRWNyeXB0UGFja2V0IChJ bnN0YW5jZSwgRnJhZ21lbnRUYWJsZSwgRnJhZ21lbnRDb3VudCk7DQorICAgIGJyZWFrOw0KKyAg Y2FzZSBFZmlUbHNEZWNyeXB0Og0KKyAgICBTdGF0dXMgPSBUbHNEZWNyeXB0UGFja2V0IChJbnN0 YW5jZSwgRnJhZ21lbnRUYWJsZSwgRnJhZ21lbnRDb3VudCk7DQorICAgIGJyZWFrOw0KKyAgZGVm YXVsdDoNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCitPTl9F WElUOg0KKyAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9 DQotLSANCjEuOS41Lm1zeXNnaXQuMQ0KDQo=