From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (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 7AD3C21D492F0 for ; Wed, 13 Sep 2017 18:22:28 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Sep 2017 18:25:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,390,1500966000"; d="scan'208";a="151089176" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga005.fm.intel.com with ESMTP; 13 Sep 2017 18:25:26 -0700 Received: from fmsmsx120.amr.corp.intel.com (10.18.124.208) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 13 Sep 2017 18:25:26 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx120.amr.corp.intel.com (10.18.124.208) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 13 Sep 2017 18:25:25 -0700 Received: from shsmsx152.ccr.corp.intel.com ([169.254.6.93]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.98]) with mapi id 14.03.0319.002; Thu, 14 Sep 2017 09:25:23 +0800 From: "Wang, Jian J" To: "Justen, Jordan L" , "edk2-devel@lists.01.org" CC: "Yao, Jiewen" , "Dong, Eric" , "Zeng, Star" , Laszlo Ersek , "Kinney, Michael D" , "Wolman, Ayellet" Thread-Topic: [PATCH 1/4] MdeModulePkg/Core: Implement NULL pointer detection in EDK-II Core. Thread-Index: AQHTLLW70Zt5i1glGEyGt5nGzpL0lKKzlfHA Date: Thu, 14 Sep 2017 01:25:22 +0000 Message-ID: References: <20170913092507.12504-1-jian.j.wang@intel.com> <20170913092507.12504-2-jian.j.wang@intel.com> <150532368984.21662.15999032054940467421@jljusten-skl> In-Reply-To: <150532368984.21662.15999032054940467421@jljusten-skl> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 1/4] MdeModulePkg/Core: Implement NULL pointer detection in EDK-II Core. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Sep 2017 01:22:28 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U2VlIG15IGNvbW1lbnRzIHN0YXJ0IHdpdGggW0ppYW5dIGJlbG93Lg0KDQotLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KRnJvbTogSnVzdGVuLCBKb3JkYW4gTCANClNlbnQ6IFRodXJzZGF5LCBT ZXB0ZW1iZXIgMTQsIDIwMTcgMToyOCBBTQ0KVG86IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdA aW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCkNjOiBZYW8sIEppZXdlbiA8amll d2VuLnlhb0BpbnRlbC5jb20+OyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgWmVu ZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhh dC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBX b2xtYW4sIEF5ZWxsZXQgPGF5ZWxsZXQud29sbWFuQGludGVsLmNvbT4NClN1YmplY3Q6IFJlOiBb UEFUQ0ggMS80XSBNZGVNb2R1bGVQa2cvQ29yZTogSW1wbGVtZW50IE5VTEwgcG9pbnRlciBkZXRl Y3Rpb24gaW4gRURLLUlJIENvcmUuDQoNCk9uIDIwMTctMDktMTMgMDI6MjU6MDQsIFdhbmcsIEpp YW4gSiB3cm90ZToNCj4gVGhlIG1lY2hhbmlzbSBiZWhpbmQgaXMgdG8gdHJpZ2dlciBhIHBhZ2Ug ZmF1bHQgZXhjZXB0aW9uIGF0IGFkZHJlc3MgMC4gVGhpcyBjYW4gYmUgbWFkZSBieSBkaXNhYmxp bmcgcGFnZSAwICgwLTQwOTUpIGR1cmluZyBwYWdlIHRhYmxlIHNldHVwLiBTbyB0aGlzIGZlYXR1 cmUgY2FuIG9ubHkgYmUgYXZhaWxhYmxlIG9uIHBsYXRmb3JtIHdpdGggcGFnaW5nIGVuYWJsZWQu IE9uY2UgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGFueSBjb2RlLCBsaWtlIENTTSwgd2hpY2gg aGFzIHRvIGFjY2VzcyBtZW1vcnkgaW4gcGFnZSAwIG5lZWRzIHRvIGVuYWJsZSB0aGlzIHBhZ2Ug dGVtcG9yYXJpbHkgaW4gYWR2YW5jZSBhbmQgZGlzYWJsZSBpdCBhZnRlcndhcmRzLiBQY2ROdWxs UG9pbnRlckRldGVjdGlvblByb3BlcnR5TWFzayBpcyB1c2VkIHRvIGNvbnRyb2wgYW5kIGVsYWJv cmF0ZSB0aGUgdXNlIGNhc2VzLg0KPg0KDQpZb3VyIGNvbW1pdCBtZXNzYWdlIGxpbmUgaXMgPiA0 NTAgY29sdW1ucy4NCg0KaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS90aWFub2NvcmUuZ2l0 aHViLmlvL3dpa2kvQ29tbWl0LU1lc3NhZ2UtRm9ybWF0DQoNCkkgdGhpbmsgQmFzZVRvb2xzL1Nj cmlwdHMvUGF0Y2hDaGVjay5weSBjYW4gaGVscCBkZXRlY3QgdGhpcyBpc3N1ZS4NCg0KKG1vcmUg YmVsb3cuLi4pDQoNCltKaWFuXSBTdXJlLg0KDQo+IENjOiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFv QGludGVsLmNvbT4NCj4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gQ2M6 IFN0YXIgWmVuZyA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gQ2M6IExhc3psbyBFcnNlayA8bGVy c2VrQHJlZGhhdC5jb20+DQo+IENjOiBKdXN0ZW4sIEpvcmRhbiBMIDxqb3JkYW4ubC5qdXN0ZW5A aW50ZWwuY29tPg0KPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPg0KPiBDYzogV29sbWFuLCBBeWVsbGV0IDxheWVsbGV0LndvbG1hbkBpbnRlbC5jb20+ DQo+IFN1Z2dlc3RlZC1ieTogV29sbWFuLCBBeWVsbGV0IDxheWVsbGV0LndvbG1hbkBpbnRlbC5j b20+DQo+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVu dCAxLjENCj4gU2lnbmVkLW9mZi1ieTogV2FuZywgSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5j b20+DQo+IC0tLQ0KPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaW5mICAgICAgICAg ICAgICAgIHwgIDMgKy0NCj4gIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5jICAgICAg ICAgICAgICAgICB8IDIxICsrKysrKy0tLS0NCj4gIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNj L01lbW9yeVByb3RlY3Rpb24uYyAgICB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKw0KPiAgTWRl TW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaCAgICAgICAgICAgIHwgMTUgKysrKysr Kw0KPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaW5mICAgICAgICAgIHwg IDMgKy0NCj4gIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlTG9hZC5jICAgICAgICAg ICB8IDUzICsrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhl SXBsUGVpbS9JYTMyL0R4ZUxvYWRGdW5jLmMgIHwgIDggKysrLQ0KPiAgTWRlTW9kdWxlUGtnL0Nv cmUvRHhlSXBsUGVpbS9YNjQvRHhlTG9hZEZ1bmMuYyAgIHwgIDIgKw0KPiAgTWRlTW9kdWxlUGtn L0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jIHwgMjMgKysrKysrLS0tLQ0KPiAg TWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMgICAgICAgICAgICAgICAgICAgIHwgMTIgKysr KysrDQo+ICAxMCBmaWxlcyBjaGFuZ2VkLCAxNjcgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25z KC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaW5m IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaW5mDQo+IGluZGV4IDMwZDU5ODRmN2Mu LjI3M2I4YjdjMGUgMTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWlu LmluZg0KPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5pbmYNCj4gQEAgLTE3 OSw3ICsxNzksNyBAQA0KPiAgICBnRWZpV2F0Y2hkb2dUaW1lckFyY2hQcm90b2NvbEd1aWQgICAg ICAgICAgICAgIyMgQ09OU1VNRVMNCj4gIA0KPiAgW0ZlYXR1cmVQY2RdDQo+IC0gIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGcmFtZXdvcmtDb21wYXRpYmlsaXR5U3VwcG9ydCAg ICAgICAgICMjIENPTlNVTUVTDQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5Q Y2RGcmFtZXdvcmtDb21wYXRpYmlsaXR5U3VwcG9ydCAgICAgICAgICAjIyBDT05TVU1FUw0KDQpX aHkgaXMgdGhpcyBsaW5lIGNoYW5nZWQ/DQpbSmlhbl0gSnVzdCBhbGlnbiB0aGUgY29tbWVudCBm b2xsb3dlZCBiZWNhdXNlIHRoZSBuZXcgb25lIGFkZGVkDQoNCj4gIA0KPiAgW1BjZF0NCj4gICAg Z0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZExvYWRGaXhBZGRyZXNzQm9vdFRpbWVD b2RlUGFnZU51bWJlciAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gQEAgLTE5Miw2ICsxOTIs NyBAQA0KPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkUHJvcGVydGllc1Rh YmxlRW5hYmxlICAgICAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQo+ICAgIGdFZmlNZGVNb2R1 bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RJbWFnZVByb3RlY3Rpb25Qb2xpY3kgICAgICAgICAgICAg ICAgICAgIyMgQ09OU1VNRVMNCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBj ZER4ZU54TWVtb3J5UHJvdGVjdGlvblBvbGljeSAgICAgICAgICAgICAjIyBDT05TVU1FUw0KPiAr ICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTnVsbFBvaW50ZXJEZXRlY3Rpb25Q cm9wZXJ0eU1hc2sgICAgICAgICMjIENPTlNVTUVTDQo+ICANCj4gICMgW0hvYl0NCj4gICMgUkVT T1VSQ0VfREVTQ1JJUFRPUiAgICMjIENPTlNVTUVTDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQ a2cvQ29yZS9EeGUvTWVtL1BhZ2UuYyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5j DQo+IGluZGV4IGExNDJjNzllZTIuLjJlMGI3MmY4NjQgMTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVs ZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5jDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9N ZW0vUGFnZS5jDQo+IEBAIC0xNzAsNiArMTcwLDcgQEAgQ29yZUFkZFJhbmdlICgNCj4gIHsNCj4g ICAgTElTVF9FTlRSWSAgICAgICAgKkxpbms7DQo+ICAgIE1FTU9SWV9NQVAgICAgICAgICpFbnRy eTsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiAgDQo+ICAgIEFTU0VSVCAoKFN0 YXJ0ICYgRUZJX1BBR0VfTUFTSykgPT0gMCk7DQo+ICAgIEFTU0VSVCAoRW5kID4gU3RhcnQpIDsN Cj4gQEAgLTE4OCw3ICsxODksMTcgQEAgQ29yZUFkZFJhbmdlICgNCj4gICAgLy8gdXNlZCBmb3Ig b3RoZXIgcHVycG9zZXMuDQo+ICAgIC8vICANCj4gICAgaWYgKFR5cGUgPT0gRWZpQ29udmVudGlv bmFsTWVtb3J5ICYmIFN0YXJ0ID09IDAgJiYgKEVuZCA+PSBFRklfUEFHRV9TSVpFIC0gMSkpIHsN Cj4gLSAgICBTZXRNZW0gKChWT0lEICopKFVJTlROKVN0YXJ0LCBFRklfUEFHRV9TSVpFLCAwKTsN Cj4gKyAgICBpZiAoKFBjZEdldDgoUGNkTnVsbFBvaW50ZXJEZXRlY3Rpb25Qcm9wZXJ0eU1hc2sp ICYgQklUMCkgPT0gMCkgew0KPiArICAgICAgU2V0TWVtICgoVk9JRCAqKShVSU5UTilTdGFydCwg RUZJX1BBR0VfU0laRSwgMCk7DQo+ICsgICAgfSBlbHNlIGlmIChnQ3B1ICE9IE5VTEwpIHsNCj4g KyAgICAgIFN0YXR1cyA9IGdDcHUtPlNldE1lbW9yeUF0dHJpYnV0ZXMoZ0NwdSwgMCwgRUZJX1BB R0VfU0laRSwgMCk7DQo+ICsgICAgICBBU1NFUlRfRUZJX0VSUk9SKFN0YXR1cyk7DQo+ICsNCj4g KyAgICAgIFNldE1lbSAoKFZPSUQgKikoVUlOVE4pU3RhcnQsIEVGSV9QQUdFX1NJWkUsIDApOw0K PiArDQo+ICsgICAgICBTdGF0dXMgPSBnQ3B1LT5TZXRNZW1vcnlBdHRyaWJ1dGVzKGdDcHUsIDAs IEVGSV9QQUdFX1NJWkUsIEVGSV9NRU1PUllfUlApOw0KPiArICAgICAgQVNTRVJUX0VGSV9FUlJP UihTdGF0dXMpOw0KPiArICAgIH0NCj4gICAgfQ0KPiAgICANCj4gICAgLy8NCj4gQEAgLTE5NzIs MTEgKzE5ODMsMyBAQCBEb25lOg0KPiAgICByZXR1cm4gU3RhdHVzOw0KPiAgfQ0KPiAgDQo+IC0N Cj4gLQ0KPiAtDQo+IC0NCj4gLQ0KPiAtDQo+IC0NCj4gLQ0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlL01pc2MvTWVtb3J5UHJvdGVjdGlvbi5jIGIvTWRlTW9kdWxlUGtnL0Nv cmUvRHhlL01pc2MvTWVtb3J5UHJvdGVjdGlvbi5jDQo+IGluZGV4IGE3M2M0Y2NkNjQuLjIzNjdk Njc0ZTEgMTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL01lbW9yeVBy b3RlY3Rpb24uYw0KPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9NZW1vcnlQcm90 ZWN0aW9uLmMNCj4gQEAgLTk5NSw2ICs5OTUsMzYgQEAgTWVtb3J5UHJvdGVjdGlvbkV4aXRCb290 U2VydmljZXNDYWxsYmFjayAoDQo+ICAgIH0NCj4gIH0NCj4gIA0KPiArLyoqDQo+ICsgIERpc2Fi bGUgTlVMTCBwb2ludGVyIGRldGVjdGlvbiBhZnRlciBFbmRPZkR4ZS4gVGhpcyBpcyBhIHdvcmth cm91bmQgcmVzb3J0IGluIA0KPiArICBvcmRlciB0byBza2lwIHVuZml4YWJsZSBOVUxMIHBvaW50 ZXIgYWNjZXNzIGlzc3VlcyBkZXRlY3RlZCBpbiBPcHRpb25ST00gb3IgDQo+ICsgIGJvb3QgbG9h ZGVycy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBFdmVudCAgICAgVGhlIEV2ZW50IHRoaXMgbm90 aWZ5IGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdG8uDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICBQ b2ludGVyIHRvIHRoZSBjb250ZXh0IGRhdGEgcmVnaXN0ZXJlZCB0byB0aGUgRXZlbnQuDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArRGlzYWJsZU51bGxEZXRlY3Rpb25BdFRoZUVuZE9m RHhlICgNCj4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50 LA0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRleHQN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArDQo+ICsgIERFQlVHKChERUJVR19JTkZPLCAiRGlzYWJsZU51bGxEZXRlY3Rpb25B dFRoZUVuZE9mRHhlKCk6IHN0YXJ0XHJcbiIpKTsNCj4gKyAgLy8NCj4gKyAgLy8gRGlzYWJsZSBO VUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGJ5IGVuYWJsaW5nIGZpcnN0IDRLIHBhZ2UNCj4gKyAgLy8N Cj4gKyAgU3RhdHVzID0gZ0NwdS0+U2V0TWVtb3J5QXR0cmlidXRlcyhnQ3B1LCAwLCBFRklfUEFH RV9TSVpFLCAwKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUihTdGF0dXMpOw0KPiArDQo+ICsgIENv cmVDbG9zZUV2ZW50IChFdmVudCk7DQo+ICsgIERFQlVHKChERUJVR19JTkZPLCAiRGlzYWJsZU51 bGxEZXRlY3Rpb25BdFRoZUVuZE9mRHhlKCk6IGVuZFxyXG4iKSk7DQo+ICsNCj4gKyAgcmV0dXJu Ow0KPiArfQ0KPiArDQo+ICAvKioNCj4gICAgSW5pdGlhbGl6ZSBNZW1vcnkgUHJvdGVjdGlvbiBz dXBwb3J0Lg0KPiAgKiovDQo+IEBAIC0xMDA2LDYgKzEwMzYsNyBAQCBDb3JlSW5pdGlhbGl6ZU1l bW9yeVByb3RlY3Rpb24gKA0KPiAgew0KPiAgICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICAgIEVG SV9FVkVOVCAgIEV2ZW50Ow0KPiArICBFRklfRVZFTlQgICBFbmRPZkR4ZUV2ZW50Ow0KPiAgICBW T0lEICAgICAgICAqUmVnaXN0cmF0aW9uOw0KPiAgDQo+ICAgIG1JbWFnZVByb3RlY3Rpb25Qb2xp Y3kgPSBQY2RHZXQzMihQY2RJbWFnZVByb3RlY3Rpb25Qb2xpY3kpOw0KPiBAQCAtMTA0NCw2ICsx MDc1LDIyIEBAIENvcmVJbml0aWFsaXplTWVtb3J5UHJvdGVjdGlvbiAoDQo+ICAgICAgICAgICAg ICAgICApOw0KPiAgICAgIEFTU0VSVF9FRklfRVJST1IoU3RhdHVzKTsNCj4gICAgfQ0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gZGlzYWJsZSBOVUxMIHBvaW50 ZXIgZGV0ZWN0aW9uIGF0IEVuZE9mRHhlDQo+ICsgIC8vDQo+ICsgIGlmICgoUGNkR2V0OChQY2RO dWxsUG9pbnRlckRldGVjdGlvblByb3BlcnR5TWFzaykgJiAoQklUMHxCSVQ3KSkgPT0gKEJJVDB8 QklUNykpIHsNCj4gKyAgICBTdGF0dXMgPSBDb3JlQ3JlYXRlRXZlbnRFeCAoDQo+ICsgICAgICAg ICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPiArICAgICAgICAgICAgICAgICAgICBU UExfTk9USUZZLA0KPiArICAgICAgICAgICAgICAgICAgICBEaXNhYmxlTnVsbERldGVjdGlvbkF0 VGhlRW5kT2ZEeGUsDQo+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAg ICAgICAgICAgICZnRWZpRW5kT2ZEeGVFdmVudEdyb3VwR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgJkVuZE9mRHhlRXZlbnQNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArICB9DQo+ICsNCj4gICAgcmV0dXJuIDsNCj4g IH0NCj4gIA0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJ cGwuaCBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmgNCj4gaW5kZXggNzJk MjUzMmY1MC4uMTA0NTk5MTU2YyAxMDA2NDQNCj4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhl SXBsUGVpbS9EeGVJcGwuaA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4 ZUlwbC5oDQo+IEBAIC01Miw2ICs1Miw3IEBAIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICAjZGVm aW5lIFNUQUNLX1NJWkUgICAgICAweDIwMDAwDQo+ICAjZGVmaW5lIEJTUF9TVE9SRV9TSVpFICAw eDQwMDANCj4gIA0KPiArI2RlZmluZSBOVUxMX0RFVEVDVElPTl9FTkFCTEVEICAoKFBjZEdldDgo UGNkTnVsbFBvaW50ZXJEZXRlY3Rpb25Qcm9wZXJ0eU1hc2spICYgQklUMCkgIT0gMCkNCg0KSSB0 aGluayBtYXliZSB0aGUgY29kZSBzdHlsZSB3b3VsZCBsb29rIGJldHRlciBpZiB5b3UgZGVmaW5l ZCBhDQpmdW5jdGlvbiBmb3IgdGhpcyByYXRoZXIgdGhhbiB1c2luZyBhIG1hY3JvLiBXaGF0IGRv IHlvdSB0aGluaz8NCg0KW0ppYW5dIE9rLiBJJ2xsIGFkZCBhIGZ1bmN0aW9uIGluc3RlYWQuDQoN Cj4gIA0KPiAgLy8NCj4gIC8vIFRoaXMgUFBJIGlzIGluc3RhbGxlZCB0byBpbmRpY2F0ZSB0aGUg ZW5kIG9mIHRoZSBQRUkgdXNhZ2Ugb2YgbWVtb3J5DQo+IEBAIC0yNDAsNCArMjQxLDE4IEBAIERl Y29tcHJlc3MgKA0KPiAgICBPVVQgICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgKk91dHB1 dFNpemUNCj4gICAgKTsNCj4gIA0KPiArLyoqDQo+ICsgICBDbGVhciBsZWdhY3kgbWVtb3J5IGxv Y2F0ZWQgYXQgdGhlIGZpcnN0IDRLLXBhZ2UuDQo+ICsNCj4gKyAgIFRoaXMgZnVuY3Rpb24gdHJh dmVyc2VzIHRoZSB3aG9sZSBIT0IgbGlzdCB0byBjaGVjayBpZiBtZW1vcnkgZnJvbSAwIHRvIDQw OTUgDQo+ICsgICBleGlzdHMgYW5kIGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQsIGFuZCB0aGVuIGNs ZWFyIGl0IGlmIHNvLg0KPiArDQo+ICsgICBAcGFyYW0gSG9TdGFydCAgICAgICAgIFRoZSBzdGFy dCBvZiBIb2JMaXN0IHBhc3NlZCB0byBEeGVDb3JlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4g K0NsZWFyTGVnYWN5TWVtb3J5KA0KPiArICBJTiAgVk9JRCAqSG9iU3RhcnQNCj4gKyAgKTsNCj4g Kw0KPiAgI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWlt L0R4ZUlwbC5pbmYgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYNCj4g aW5kZXggYzU0YWZlNGFhNi4uZmRlNzBmOTRiYiAxMDA2NDQNCj4gLS0tIGEvTWRlTW9kdWxlUGtn L0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaW5mDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4 ZUlwbFBlaW0vRHhlSXBsLmluZg0KPiBAQCAtMTEwLDExICsxMTAsMTIgQEANCj4gICAgZ0VmaU1k ZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZER4ZUlwbEJ1aWxkUGFnZVRhYmxlcyAgICAgICAj IyBDT05TVU1FUw0KPiAgDQo+ICBbRmVhdHVyZVBjZF0NCj4gLSAgZ0VmaU1kZU1vZHVsZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZER4ZUlwbFN1cHBvcnRVZWZpRGVjb21wcmVzcyAjIyBDT05TVU1FUw0K PiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRHhlSXBsU3VwcG9ydFVlZmlE ZWNvbXByZXNzICAgICAgICAgIyMgQ09OU1VNRVMNCj4gIA0KPiAgW1BjZC5JQTMyLFBjZC5YNjRd DQo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2UxR1BhZ2VUYWJsZSAg ICAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gICAgZ0VmaU1kZU1v ZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFB0ZU1lbW9yeUVuY3J5cHRpb25BZGRyZXNzT3JNYXNr ICAgICMjIENPTlNVTUVTDQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RO dWxsUG9pbnRlckRldGVjdGlvblByb3BlcnR5TWFzayAgICAjIyBDT05TVU1FUw0KPiAgDQo+ICBb UGNkLklBMzIsUGNkLlg2NCxQY2QuQVJNLFBjZC5BQVJDSDY0XQ0KPiAgICBnRWZpTWRlTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkU2V0TnhGb3JTdGFjayAgICAgICAgICAgICAgICMjIFNPTUVU SU1FU19DT05TVU1FUw0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVp bS9EeGVMb2FkLmMgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUxvYWQuYw0KPiBp bmRleCA1MGI1NDQwZDE1Li5iNWY5ZDkyZjViIDEwMDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cv Q29yZS9EeGVJcGxQZWltL0R4ZUxvYWQuYw0KPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJ cGxQZWltL0R4ZUxvYWQuYw0KPiBAQCAtODI1LDMgKzgyNSw1NiBAQCBVcGRhdGVTdGFja0hvYiAo DQo+ICAgICAgSG9iLlJhdyA9IEdFVF9ORVhUX0hPQiAoSG9iKTsNCj4gICAgfQ0KPiAgfQ0KPiAr DQo+ICsvKioNCj4gKyAgIENsZWFyIGxlZ2FjeSBtZW1vcnkgbG9jYXRlZCBhdCB0aGUgZmlyc3Qg NEstcGFnZSwgaWYgYXZhaWxhYmxlLg0KPiArDQo+ICsgICBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNl cyB0aGUgd2hvbGUgSE9CIGxpc3QgdG8gY2hlY2sgaWYgbWVtb3J5IGZyb20gMCB0byA0MDk1IA0K PiArICAgZXhpc3RzIGFuZCBoYXMgbm90IGJlZW4gYWxsb2NhdGVkLCBhbmQgdGhlbiBjbGVhciBp dCBpZiBzby4NCj4gKw0KPiArICAgQHBhcmFtIEhvU3RhcnQgICAgICAgICAgICAgICAgICAgVGhl IHN0YXJ0IG9mIEhvYkxpc3QgcGFzc2VkIHRvIER4ZUNvcmUuDQo+ICsNCj4gKyoqLw0KPiArVk9J RA0KPiArQ2xlYXJMZWdhY3lNZW1vcnkoDQo+ICsgIElOICBWT0lEICpIb2JTdGFydA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9QRUlfSE9CX1BPSU5URVJTICAgICAgICAgIFJzY0Rlc2NIb2I7DQo+ ICsgIEVGSV9QRUlfSE9CX1BPSU5URVJTICAgICAgICAgIE1lbUFsbG9jSG9iOw0KPiArICBCT09M RUFOICAgICAgICAgICAgICAgICAgICAgICBEb0NsZWFyOw0KPiArDQo+ICsgIFJzY0Rlc2NIb2Iu UmF3ID0gSG9iU3RhcnQ7DQo+ICsgIE1lbUFsbG9jSG9iLlJhdyA9IEhvYlN0YXJ0Ow0KPiArICBE b0NsZWFyID0gRkFMU0U7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgaWYgcGFnZSAwIGV4 aXN0cyBhbmQgZnJlZQ0KPiArICAvLw0KPiArICB3aGlsZSAoKFJzY0Rlc2NIb2IuUmF3ID0gR2V0 TmV4dEhvYiAoRUZJX0hPQl9UWVBFX1JFU09VUkNFX0RFU0NSSVBUT1IsIFJzY0Rlc2NIb2IuUmF3 KSkgIT0gTlVMTCkgew0KDQpUaGlzIGNvZGUgbGluZSBpcyBsb25nZXIgdGhhbiA4MCBjb2x1bW5z LiBUaGVyZSBhcmUgbW9yZSBjYXNlcyBvZiB0aGlzDQppbiB5b3VyIHBhdGNoc2V0Lg0KDQotSm9y ZGFuDQoNCj4gKyAgICBpZiAoUnNjRGVzY0hvYi5SZXNvdXJjZURlc2NyaXB0b3ItPlJlc291cmNl VHlwZSA9PSBFRklfUkVTT1VSQ0VfU1lTVEVNX01FTU9SWSAmJiANCj4gKyAgICAgICAgUnNjRGVz Y0hvYi5SZXNvdXJjZURlc2NyaXB0b3ItPlBoeXNpY2FsU3RhcnQgPT0gMCkgew0KPiArICAgICAg RG9DbGVhciA9IFRSVUU7DQo+ICsgICAgICAvLyANCj4gKyAgICAgIC8vIE1ha2Ugc3VyZSBtZW1v cnkgYXQgMC00MDk1IGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQuDQo+ICsgICAgICAvLw0KPiArICAg ICAgd2hpbGUgKChNZW1BbGxvY0hvYi5SYXcgPSBHZXROZXh0SG9iIChFRklfSE9CX1RZUEVfTUVN T1JZX0FMTE9DQVRJT04sIE1lbUFsbG9jSG9iLlJhdykpICE9IE5VTEwpIHsNCj4gKyAgICAgICAg aWYgKE1lbUFsbG9jSG9iLk1lbW9yeUFsbG9jYXRpb24tPkFsbG9jRGVzY3JpcHRvci5NZW1vcnlC YXNlQWRkcmVzcyA8IEVGSV9QQUdFX1NJWkUpIHsNCj4gKyAgICAgICAgICBEb0NsZWFyID0gRkFM U0U7DQo+ICsgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgTWVtQWxs b2NIb2IuUmF3ID0gR0VUX05FWFRfSE9CIChNZW1BbGxvY0hvYik7DQo+ICsgICAgICB9DQo+ICsg ICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgICAgUnNjRGVzY0hvYi5SYXcgPSBHRVRfTkVYVF9I T0IgKFJzY0Rlc2NIb2IpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKERvQ2xlYXIpIHsNCj4gKyAg ICBERUJVRygoREVCVUdfSU5GTywgIkNsZWFyaW5nIGZpcnN0IDRLLXBhZ2UhXHJcbiIpKTsNCj4g KyAgICBTZXRNZW0oTlVMTCwgRUZJX1BBR0VfU0laRSwgMCk7DQo+ICsgIH0NCj4gKw0KPiArICBy ZXR1cm47DQo+ICt9DQo+ICsNCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlw bFBlaW0vSWEzMi9EeGVMb2FkRnVuYy5jIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9J YTMyL0R4ZUxvYWRGdW5jLmMNCj4gaW5kZXggMTk1NzMyNmNhZi4uYThhYTBkNWQxYiAxMDA2NDQN Cj4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9JYTMyL0R4ZUxvYWRGdW5jLmMN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9JYTMyL0R4ZUxvYWRGdW5jLmMN Cj4gQEAgLTEyMyw3ICsxMjMsOCBAQCBDcmVhdGU0R1BhZ2VUYWJsZXNJYTMyUGFlICgNCj4gICAg ICBQYWdlRGlyZWN0b3J5UG9pbnRlckVudHJ5LT5CaXRzLlByZXNlbnQgPSAxOw0KPiAgDQo+ICAg ICAgZm9yIChJbmRleE9mUGFnZURpcmVjdG9yeUVudHJpZXMgPSAwOyBJbmRleE9mUGFnZURpcmVj dG9yeUVudHJpZXMgPCA1MTI7IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmllcysrLCBQYWdlRGly ZWN0b3J5RW50cnkrKywgUGh5c2ljYWxBZGRyZXNzICs9IFNJWkVfMk1CKSB7DQo+IC0gICAgICBp ZiAoKFBoeXNpY2FsQWRkcmVzcyA8IFN0YWNrQmFzZSArIFN0YWNrU2l6ZSkgJiYgKChQaHlzaWNh bEFkZHJlc3MgKyBTSVpFXzJNQikgPiBTdGFja0Jhc2UpKSB7DQo+ICsgICAgICBpZiAoKE5VTExf REVURUNUSU9OX0VOQUJMRUQgJiYgUGh5c2ljYWxBZGRyZXNzID09IDApDQo+ICsgICAgICAgICAg fHwgKChQaHlzaWNhbEFkZHJlc3MgPCBTdGFja0Jhc2UgKyBTdGFja1NpemUpICYmICgoUGh5c2lj YWxBZGRyZXNzICsgU0laRV8yTUIpID4gU3RhY2tCYXNlKSkpIHsNCj4gICAgICAgICAgLy8NCj4g ICAgICAgICAgLy8gTmVlZCB0byBzcGxpdCB0aGlzIDJNIHBhZ2UgdGhhdCBjb3ZlcnMgc3RhY2sg cmFuZ2UuDQo+ICAgICAgICAgIC8vDQo+IEBAIC0yNDAsNiArMjQxLDggQEAgSGFuZE9mZlRvRHhl Q29yZSAoDQo+ICAgIEVGSV9QRUlfVkVDVE9SX0hBTkRPRkZfSU5GT19QUEkgKlZlY3RvckhhbmRv ZmZJbmZvUHBpOw0KPiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgIEJ1aWxkUGFnZVRhYmxl c0lhMzJQYWU7DQo+ICANCj4gKyAgQ2xlYXJMZWdhY3lNZW1vcnkoSG9iTGlzdC5SYXcpOw0KPiAr DQo+ICAgIFN0YXR1cyA9IFBlaVNlcnZpY2VzQWxsb2NhdGVQYWdlcyAoRWZpQm9vdFNlcnZpY2Vz RGF0YSwgRUZJX1NJWkVfVE9fUEFHRVMgKFNUQUNLX1NJWkUpLCAmQmFzZU9mU3RhY2spOw0KPiAg ICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiAgDQo+IEBAIC0zNzksNyArMzgyLDggQEAg SGFuZE9mZlRvRHhlQ29yZSAoDQo+ICAgICAgVG9wT2ZTdGFjayA9IChFRklfUEhZU0lDQUxfQURE UkVTUykgKFVJTlROKSBBTElHTl9QT0lOVEVSIChUb3BPZlN0YWNrLCBDUFVfU1RBQ0tfQUxJR05N RU5UKTsNCj4gIA0KPiAgICAgIFBhZ2VUYWJsZXMgPSAwOw0KPiAtICAgIEJ1aWxkUGFnZVRhYmxl c0lhMzJQYWUgPSAoQk9PTEVBTikgKFBjZEdldEJvb2wgKFBjZFNldE54Rm9yU3RhY2spICYmIElz SWEzMlBhZVN1cHBvcnQgKCkgJiYgSXNFeGVjdXRlRGlzYWJsZUJpdEF2YWlsYWJsZSAoKSk7DQo+ ICsgICAgQnVpbGRQYWdlVGFibGVzSWEzMlBhZSA9IChCT09MRUFOKSAoSXNJYTMyUGFlU3VwcG9y dCAoKSAmJiBJc0V4ZWN1dGVEaXNhYmxlQml0QXZhaWxhYmxlICgpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKFBjZEdldEJvb2wgKFBjZFNldE54Rm9yU3Rh Y2spIHx8IE5VTExfREVURUNUSU9OX0VOQUJMRUQpKTsNCj4gICAgICBpZiAoQnVpbGRQYWdlVGFi bGVzSWEzMlBhZSkgew0KPiAgICAgICAgUGFnZVRhYmxlcyA9IENyZWF0ZTRHUGFnZVRhYmxlc0lh MzJQYWUgKEJhc2VPZlN0YWNrLCBTVEFDS19TSVpFKTsNCj4gICAgICAgIEVuYWJsZUV4ZWN1dGVE aXNhYmxlQml0ICgpOw0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVp bS9YNjQvRHhlTG9hZEZ1bmMuYyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vWDY0L0R4 ZUxvYWRGdW5jLmMNCj4gaW5kZXggNjQ4ODg4MGVhYi4uNTBhOGQ3N2E1YiAxMDA2NDQNCj4gLS0t IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQvRHhlTG9hZEZ1bmMuYw0KPiArKysg Yi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9EeGVMb2FkRnVuYy5jDQo+IEBAIC00 Miw2ICs0Miw4IEBAIEhhbmRPZmZUb0R4ZUNvcmUgKA0KPiAgICBFRklfVkVDVE9SX0hBTkRPRkZf SU5GTyAgICAgICAgICpWZWN0b3JJbmZvOw0KPiAgICBFRklfUEVJX1ZFQ1RPUl9IQU5ET0ZGX0lO Rk9fUFBJICpWZWN0b3JIYW5kb2ZmSW5mb1BwaTsNCj4gIA0KPiArICBDbGVhckxlZ2FjeU1lbW9y eShIb2JMaXN0LlJhdyk7DQo+ICsNCj4gICAgLy8NCj4gICAgLy8gR2V0IFZlY3RvciBIYW5kLW9m ZiBJbmZvIFBQSSBhbmQgYnVpbGQgR3VpZGVkIEhPQg0KPiAgICAvLw0KPiBkaWZmIC0tZ2l0IGEv TWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jIGIvTWRlTW9k dWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jDQo+IGluZGV4IDQ4MTUw YmU0ZTEuLmNjZDZlMTBjYjIgMTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlw bFBlaW0vWDY0L1ZpcnR1YWxNZW1vcnkuYw0KPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJ cGxQZWltL1g2NC9WaXJ0dWFsTWVtb3J5LmMNCj4gQEAgLTkwLDggKzkwLDE0IEBAIFNwbGl0Mk1Q YWdlVG80SyAoDQo+ICAgICAgLy8NCj4gICAgICBQYWdlVGFibGVFbnRyeS0+VWludDY0ID0gKFVJ TlQ2NCkgUGh5c2ljYWxBZGRyZXNzNEsgfCBBZGRyZXNzRW5jTWFzazsNCj4gICAgICBQYWdlVGFi bGVFbnRyeS0+Qml0cy5SZWFkV3JpdGUgPSAxOw0KPiAtICAgIFBhZ2VUYWJsZUVudHJ5LT5CaXRz LlByZXNlbnQgPSAxOw0KPiAtICAgIGlmICgoUGh5c2ljYWxBZGRyZXNzNEsgPj0gU3RhY2tCYXNl KSAmJiAoUGh5c2ljYWxBZGRyZXNzNEsgPCBTdGFja0Jhc2UgKyBTdGFja1NpemUpKSB7DQo+ICsN Cj4gKyAgICBpZiAoTlVMTF9ERVRFQ1RJT05fRU5BQkxFRCAmJiBQaHlzaWNhbEFkZHJlc3M0SyA9 PSAwKSB7DQo+ICsgICAgICBQYWdlVGFibGVFbnRyeS0+Qml0cy5QcmVzZW50ID0gMDsNCj4gKyAg ICB9IGVsc2Ugew0KPiArICAgICAgUGFnZVRhYmxlRW50cnktPkJpdHMuUHJlc2VudCA9IDE7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFBjZEdldEJvb2wgKFBjZFNldE54Rm9yU3RhY2spICYm IChQaHlzaWNhbEFkZHJlc3M0SyA+PSBTdGFja0Jhc2UpICYmIChQaHlzaWNhbEFkZHJlc3M0SyA8 IFN0YWNrQmFzZSArIFN0YWNrU2l6ZSkpIHsNCj4gICAgICAgIC8vDQo+ICAgICAgICAvLyBTZXQg TnggYml0IGZvciBzdGFjay4NCj4gICAgICAgIC8vDQo+IEBAIC0xMzcsOSArMTQzLDEwIEBAIFNw bGl0MUdQYWdlVG8yTSAoDQo+ICANCj4gICAgUGh5c2ljYWxBZGRyZXNzMk0gPSBQaHlzaWNhbEFk ZHJlc3M7DQo+ICAgIGZvciAoSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzID0gMDsgSW5kZXhP ZlBhZ2VEaXJlY3RvcnlFbnRyaWVzIDwgNTEyOyBJbmRleE9mUGFnZURpcmVjdG9yeUVudHJpZXMr KywgUGFnZURpcmVjdG9yeUVudHJ5KyssIFBoeXNpY2FsQWRkcmVzczJNICs9IFNJWkVfMk1CKSB7 DQo+IC0gICAgaWYgKChQaHlzaWNhbEFkZHJlc3MyTSA8IFN0YWNrQmFzZSArIFN0YWNrU2l6ZSkg JiYgKChQaHlzaWNhbEFkZHJlc3MyTSArIFNJWkVfMk1CKSA+IFN0YWNrQmFzZSkpIHsNCj4gKyAg ICBpZiAoKE5VTExfREVURUNUSU9OX0VOQUJMRUQgJiYgUGh5c2ljYWxBZGRyZXNzMk0gPT0gMCkN Cj4gKyAgICAgICAgfHwgKFBjZEdldEJvb2wgKFBjZFNldE54Rm9yU3RhY2spICYmIChQaHlzaWNh bEFkZHJlc3MyTSA8IFN0YWNrQmFzZSArIFN0YWNrU2l6ZSkgJiYgKChQaHlzaWNhbEFkZHJlc3My TSArIFNJWkVfMk1CKSA+IFN0YWNrQmFzZSkpKSB7DQo+ICAgICAgICAvLw0KPiAtICAgICAgLy8g TmVlZCB0byBzcGxpdCB0aGlzIDJNIHBhZ2UgdGhhdCBjb3ZlcnMgc3RhY2sgcmFuZ2UuDQo+ICsg ICAgICAvLyBOZWVkIHRvIHNwbGl0IHRoaXMgMk0gcGFnZSB0aGF0IGNvdmVycyBOVUxMIG9yIHN0 YWNrIHJhbmdlLg0KPiAgICAgICAgLy8NCj4gICAgICAgIFNwbGl0Mk1QYWdlVG80SyAoUGh5c2lj YWxBZGRyZXNzMk0sIChVSU5UNjQgKikgUGFnZURpcmVjdG9yeUVudHJ5LCBTdGFja0Jhc2UsIFN0 YWNrU2l6ZSk7DQo+ICAgICAgfSBlbHNlIHsNCj4gQEAgLTI3OSw3ICsyODYsOCBAQCBDcmVhdGVJ ZGVudGl0eU1hcHBpbmdQYWdlVGFibGVzICgNCj4gICAgICAgIFBhZ2VEaXJlY3RvcnkxR0VudHJ5 ID0gKFZPSUQgKikgUGFnZURpcmVjdG9yeVBvaW50ZXJFbnRyeTsNCj4gICAgICANCj4gICAgICAg IGZvciAoSW5kZXhPZlBhZ2VEaXJlY3RvcnlFbnRyaWVzID0gMDsgSW5kZXhPZlBhZ2VEaXJlY3Rv cnlFbnRyaWVzIDwgNTEyOyBJbmRleE9mUGFnZURpcmVjdG9yeUVudHJpZXMrKywgUGFnZURpcmVj dG9yeTFHRW50cnkrKywgUGFnZUFkZHJlc3MgKz0gU0laRV8xR0IpIHsNCj4gLSAgICAgICAgaWYg KFBjZEdldEJvb2wgKFBjZFNldE54Rm9yU3RhY2spICYmIChQYWdlQWRkcmVzcyA8IFN0YWNrQmFz ZSArIFN0YWNrU2l6ZSkgJiYgKChQYWdlQWRkcmVzcyArIFNJWkVfMUdCKSA+IFN0YWNrQmFzZSkp IHsNCj4gKyAgICAgICAgaWYgKChOVUxMX0RFVEVDVElPTl9FTkFCTEVEICYmIFBhZ2VBZGRyZXNz ID09IDApDQo+ICsgICAgICAgICAgICB8fCAoUGNkR2V0Qm9vbCAoUGNkU2V0TnhGb3JTdGFjaykg JiYgKFBhZ2VBZGRyZXNzIDwgU3RhY2tCYXNlICsgU3RhY2tTaXplKSAmJiAoKFBhZ2VBZGRyZXNz ICsgU0laRV8xR0IpID4gU3RhY2tCYXNlKSkpIHsNCj4gICAgICAgICAgICBTcGxpdDFHUGFnZVRv Mk0gKFBhZ2VBZGRyZXNzLCAoVUlOVDY0ICopIFBhZ2VEaXJlY3RvcnkxR0VudHJ5LCBTdGFja0Jh c2UsIFN0YWNrU2l6ZSk7DQo+ICAgICAgICAgIH0gZWxzZSB7DQo+ICAgICAgICAgICAgLy8NCj4g QEAgLTMwOCw5ICszMTYsMTAgQEAgQ3JlYXRlSWRlbnRpdHlNYXBwaW5nUGFnZVRhYmxlcyAoDQo+ ICAgICAgICAgIFBhZ2VEaXJlY3RvcnlQb2ludGVyRW50cnktPkJpdHMuUHJlc2VudCA9IDE7DQo+ ICANCj4gICAgICAgICAgZm9yIChJbmRleE9mUGFnZURpcmVjdG9yeUVudHJpZXMgPSAwOyBJbmRl eE9mUGFnZURpcmVjdG9yeUVudHJpZXMgPCA1MTI7IEluZGV4T2ZQYWdlRGlyZWN0b3J5RW50cmll cysrLCBQYWdlRGlyZWN0b3J5RW50cnkrKywgUGFnZUFkZHJlc3MgKz0gU0laRV8yTUIpIHsNCj4g LSAgICAgICAgICBpZiAoUGNkR2V0Qm9vbCAoUGNkU2V0TnhGb3JTdGFjaykgJiYgKFBhZ2VBZGRy ZXNzIDwgU3RhY2tCYXNlICsgU3RhY2tTaXplKSAmJiAoKFBhZ2VBZGRyZXNzICsgU0laRV8yTUIp ID4gU3RhY2tCYXNlKSkgew0KPiArICAgICAgICAgIGlmICgoTlVMTF9ERVRFQ1RJT05fRU5BQkxF RCAmJiBQYWdlQWRkcmVzcyA9PSAwKQ0KPiArICAgICAgICAgICAgICB8fCAoUGNkR2V0Qm9vbCAo UGNkU2V0TnhGb3JTdGFjaykgJiYgKFBhZ2VBZGRyZXNzIDwgU3RhY2tCYXNlICsgU3RhY2tTaXpl KSAmJiAoKFBhZ2VBZGRyZXNzICsgU0laRV8yTUIpID4gU3RhY2tCYXNlKSkpIHsNCj4gICAgICAg ICAgICAgIC8vDQo+IC0gICAgICAgICAgICAvLyBOZWVkIHRvIHNwbGl0IHRoaXMgMk0gcGFnZSB0 aGF0IGNvdmVycyBzdGFjayByYW5nZS4NCj4gKyAgICAgICAgICAgIC8vIE5lZWQgdG8gc3BsaXQg dGhpcyAyTSBwYWdlIHRoYXQgY292ZXJzIE5VTEwgb3Igc3RhY2sgcmFuZ2UuDQo+ICAgICAgICAg ICAgICAvLw0KPiAgICAgICAgICAgICAgU3BsaXQyTVBhZ2VUbzRLIChQYWdlQWRkcmVzcywgKFVJ TlQ2NCAqKSBQYWdlRGlyZWN0b3J5RW50cnksIFN0YWNrQmFzZSwgU3RhY2tTaXplKTsNCj4gICAg ICAgICAgICB9IGVsc2Ugew0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBr Zy5kZWMgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiBpbmRleCA1OTNiZmYzNTdh Li4xY2M4NDg5NGFmIDEwMDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRl Yw0KPiArKysgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiBAQCAtODYwLDYgKzg2 MCwxOCBAQA0KPiAgICAjIEBWYWxpZExpc3QgIDB4ODAwMDAwMDYgfCAweDAzMDU4MDAyDQo+ICAg IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFcnJvckNvZGVTZXRWYXJpYWJsZXww eDAzMDU4MDAyfFVJTlQzMnwweDMwMDAxMDQwDQo+ICANCj4gKyAgIyMgTWFzayB0byBjb250cm9s IHRoZSBOVUxMIGFkZHJlc3MgZGV0ZWN0aW9uIGluIGNvZGUgZm9yIGRpZmZlcmVudCBwaGFzZXMu DQo+ICsgICMgIElmIGVuYWJsZWQsIGFjY2Vzc2luZyBOVUxMIGFkZHJlc3MgaW4gVUVGSSBvciBT TU0gY29kZSBjYW4gYmUgY2F1Z2h0LjxCUj48QlI+DQo+ICsgICMgICAgQklUMCAgICAtIEVuYWJs ZSBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGZvciBVRUZJLjxCUj4NCj4gKyAgIyAgICBCSVQxICAg IC0gRW5hYmxlIE5VTEwgcG9pbnRlciBkZXRlY3Rpb24gZm9yIFNNTS48QlI+DQo+ICsgICMgICAg QklUMi4uNiAtIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlcy48QlI+DQo+ICsgICMgICAgQklUNyAg ICAtIERpc2FibGUgTlVMTCBwb2ludGVyIGRldGVjdGlvbiBqdXN0IGFmdGVyIEVuZE9mRHhlLiA8 QlI+DQo+ICsgICMgICAgICAgICAgICAgIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB0aG9zZSB1 bnNvbHZhYmxlIE5VTEwgYWNjZXNzIGlzc3VlcyBpbiBPcHRpb25ST00sIGJvb3QgbG9hZGVyLCBl dGMuDQo+ICsgICMgICAgICAgICAgICAgIEl0IGNhbiBhbHNvIGhlbHAgdG8gYXZvaWQgdW5uZWNl c3NhcnkgZXhjZXB0aW9uIGNhdXNlZCBieSBsZWdhY3kgbWVtb3J5ICgwLTQwOTUpIGFjY2VzcyBh ZnRlciANCj4gKyAgIyAgICAgICAgICAgICAgRW5kT2ZEeGUsIHN1Y2ggYXMgV2luZG93cyA3IGJv b3Qgb24gUWVtdS48QlI+DQo+ICsgICMgQFByb21wdCBFbmFibGUgTlVMTCBhZGRyZXNzIGRldGVj dGlvbi4NCj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE51bGxQb2ludGVy RGV0ZWN0aW9uUHJvcGVydHlNYXNrfDB4MHxVSU5UOHwweDMwMDAxMDUwDQo+ICsNCj4gIFtQY2Rz Rml4ZWRBdEJ1aWxkLCBQY2RzUGF0Y2hhYmxlSW5Nb2R1bGVdDQo+ICAgICMjIER5bmFtaWMgdHlw ZSBQQ0QgY2FuIGJlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIFBjZCBzZXR0aW5n IGFjdGlvbi4NCj4gICAgIyAgUGNkTWF4UGVpUGNkQ2FsbEJhY2tOdW1iZXJQZXJQY2RFbnRyeSBp bmRpY2F0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhbGxiYWNrIGZ1bmN0aW9uDQo+IC0tIA0K PiAyLjE0LjEud2luZG93cy4xDQo+IA0K