From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.120; helo=mga04.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 BBCE1211799DD for ; Thu, 25 Oct 2018 18:20:12 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Oct 2018 18:20:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,426,1534834800"; d="scan'208";a="84562299" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga008.jf.intel.com with ESMTP; 25 Oct 2018 18:20:11 -0700 Received: from fmsmsx115.amr.corp.intel.com (10.18.116.19) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 25 Oct 2018 18:20:11 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx115.amr.corp.intel.com (10.18.116.19) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 25 Oct 2018 18:20:11 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.161]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.214]) with mapi id 14.03.0415.000; Fri, 26 Oct 2018 09:20:09 +0800 From: "Wang, Jian J" To: "Zeng, Star" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" , "Ni, Ruiyu" , "Yao, Jiewen" , Laszlo Ersek Thread-Topic: [edk2] [PATCH v4 6/6] MdeModulePkg/Core: add freed-memory guard feature Thread-Index: AQHUbDL8B5v50hW71kWaT5BguLhBI6UwNTWAgACGbvA= Date: Fri, 26 Oct 2018 01:20:08 +0000 Message-ID: References: <20181025071805.6692-1-jian.j.wang@intel.com> <20181025071805.6692-7-jian.j.wang@intel.com> <7e89d631-202c-9cc7-7bf3-98e12407e160@intel.com> In-Reply-To: <7e89d631-202c-9cc7-7bf3-98e12407e160@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZDRhMGFkMmItYTM2YS00OTAyLWIzZWUtODkyY2I4N2ZlNTNiIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiZ2hhZGVoUTlOYVJndUdPUDVNRFkrUTRjeVY1YWlxM0MxU2NnZko4TzljbUp0MU13Tk9cLzZuelpOazlnTVwvYXgzIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v4 6/6] MdeModulePkg/Core: add freed-memory guard feature X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Oct 2018 01:20:13 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U3VyZS4gVGhhbmtzLg0KDQpSZWdhcmRzLA0KSmlhbg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gRnJvbTogWmVuZywgU3Rhcg0KPiBTZW50OiBGcmlkYXksIE9jdG9iZXIgMjYs IDIwMTggOToxOSBBTQ0KPiBUbzogV2FuZywgSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+ OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgTmksIFJ1aXl1DQo+IDxydWl5dS5uaUBpbnRlbC5jb20+ OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsNCj4gPGxl cnNla0ByZWRoYXQuY29tPjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gU3Vi amVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggdjQgNi82XSBNZGVNb2R1bGVQa2cvQ29yZTogYWRkIGZy ZWVkLW1lbW9yeQ0KPiBndWFyZCBmZWF0dXJlDQo+IA0KPiBPbiAyMDE4LzEwLzI1IDE1OjE4LCBK aWFuIEogV2FuZyB3cm90ZToNCj4gPj4gdjQgY2hhbmdlczoNCj4gPj4gYS4gcmVwbGFjZSBoYXJk LWNvZGVkIG1lbW9yeSBhdHRyaWJ1dGVzIHdpdGggdGhlIHZhbHVlIGdvdCBmcm9tDQo+ID4+ICAg ICBDb3JlR2V0TWVtb3J5U3BhY2VEZXNjcmlwdG9yKCkNCj4gPj4gYi4gcmVtb3ZlIHRoZSBlbmNs b3N1cmUgb2YgQ29yZUFjcXVpcmVHY2RNZW1vcnlMb2NrKCkgYW5kDQo+ID4+ICAgICBDb3JlUmVs ZWFzZUdjZE1lbW9yeUxvY2soKSBhcm91bmQgQ29yZUFkZFJhbmdlKCkNCj4gPg0KPiA+IEZyZWVk LW1lbW9yeSBndWFyZCBpcyB1c2VkIHRvIGRldGVjdCBVQUYgKFVzZS1BZnRlci1GcmVlKSBtZW1v cnkgaXNzdWUNCj4gPiB3aGljaCBpcyBpbGxlZ2FsIGFjY2VzcyB0byBtZW1vcnkgd2hpY2ggaGFz IGJlZW4gZnJlZWQuIFRoZSBwcmluY2lwbGUNCj4gPiBiZWhpbmQgaXMgc2ltaWxhciB0byBoZWFw IGd1YXJkIGZlYXR1cmUsIHRoYXQgaXMgd2UnbGwgdHVybiBhbGwgcG9vbA0KPiANCj4gUmVtZW1i ZXIgdG8gdXNlICJwb29sL3BhZ2UgaGVhcCBndWFyZCBmZWF0dXJlIiBpbnN0ZWFkIG9mICJoZWFw IGd1YXJkDQo+IGZlYXR1cmUiIGhlcmUuIE5vIG5lZWQgdG8gc2VuZCBuZXcgcGF0Y2ggc2VyaWVz IGZvciBpdC4NCj4gDQo+IFRoYW5rcywNCj4gU3Rhcg0KPiANCj4gPiBtZW1vcnkgYWxsb2NhdGlv biB0byBwYWdlIGFsbG9jYXRpb24gYW5kIG1hcmsgdGhlbSB0byBiZSBub3QtcHJlc2VudA0KPiA+ IG9uY2UgdGhleSBhcmUgZnJlZWQuDQo+ID4NCj4gPiBUaGlzIGFsc28gaW1wbGllcyB0aGF0LCBv bmNlIGEgcGFnZSBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBpdCBjYW5ub3QNCj4gPiBiZSByZS1h bGxvY2F0ZWQuIFRoaXMgd2lsbCBicmluZyBhbm90aGVyIGlzc3VlLCB3aGljaCBpcyB0aGF0IHRo ZXJlJ3MNCj4gPiByaXNrIHRoYXQgbWVtb3J5IHNwYWNlIHdpbGwgYmUgdXNlZCBvdXQuIFRvIGFk ZHJlc3MgaXQsIHRoZSBtZW1vcnkNCj4gPiBzZXJ2aWNlIGFkZCBsb2dpYyB0byBwdXQgcGFydCAo YXQgbW9zdCA2NCBwYWdlcyBhIHRpbWUpIG9mIGZyZWVkIHBhZ2VzDQo+ID4gYmFjayBpbnRvIHBh Z2UgcG9vbCwgc28gdGhhdCB0aGUgbWVtb3J5IHNlcnZpY2UgY2FuIHN0aWxsIGhhdmUgbWVtb3J5 DQo+ID4gdG8gYWxsb2NhdGUsIHdoZW4gYWxsIG1lbW9yeSBzcGFjZSBoYXZlIGJlZW4gYWxsb2Nh dGVkIG9uY2UuIFRoaXMgaXMNCj4gPiBjYWxsZWQgbWVtb3J5IHByb21vdGlvbi4gVGhlIHByb21v dGVkIHBhZ2VzIGFyZSBhbHdheXMgZnJvbSB0aGUgZWxkZXN0DQo+ID4gcGFnZXMgd2hpY2ggaGF2 ZW4gYmVlbiBmcmVlZC4NCj4gPg0KPiA+IFRoaXMgZmVhdHVyZSBicmluZ3MgYW5vdGhlciBwcm9i bGVtIGlzIHRoYXQgbWVtb3J5IG1hcCBkZXNjcmlwdG9ycyB3aWxsDQo+ID4gYmUgaW5jcmVhc2Vk IGVub3Jtb3VzbHkgKDIwMCsgLT4gMjAwMCspLiBPbmUgb2YgY2hhbmdlIGluIHRoaXMgcGF0Y2gN Cj4gPiBpcyB0byB1cGRhdGUgTWVyZ2VNZW1vcnlNYXAoKSBpbiBmaWxlIFByb3BlcnRpZXNUYWJs ZS5jIHRvIGFsbG93IG1lcmdlDQo+ID4gZnJlZWQgcGFnZXMgYmFjayBpbnRvIHRoZSBtZW1vcnkg bWFwLiBOb3cgdGhlIG51bWJlciBjYW4gc3RheSBhdCBhcm91bmQNCj4gPiA1MTAuDQo+ID4NCj4g PiBDYzogU3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiA+IENjOiBNaWNoYWVsIEQg S2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiBDYzogSmlld2VuIFlhbyA8 amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IFJ1aXl1IE5pIDxydWl5dS5uaUBpbnRlbC5j b20+DQo+ID4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gQ29udHJp YnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+IFNp Z25lZC1vZmYtYnk6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+ID4gLS0t DQo+ID4gICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jICAgICAgICAgfCA0 MDkNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3Jl L0R4ZS9NZW0vSGVhcEd1YXJkLmggICAgICAgICB8ICA2NSArKystDQo+ID4gICBNZGVNb2R1bGVQ a2cvQ29yZS9EeGUvTWVtL1BhZ2UuYyAgICAgICAgICAgICAgfCAgNDIgKystDQo+ID4gICBNZGVN b2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYyAgICAgICAgICAgICAgfCAgMjMgKy0NCj4gPiAg IE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL01lbW9yeVByb3RlY3Rpb24uYyB8ICAgMiArLQ0K PiA+ICAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01pc2MvUHJvcGVydGllc1RhYmxlLmMgIHwgIDE4 ICstDQo+ID4gICA2IGZpbGVzIGNoYW5nZWQsIDUyNSBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlv bnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hl YXBHdWFyZC5jDQo+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuYw0KPiA+ IGluZGV4IDY2M2Y5NjljMGQuLjQ0OWEwMjI2NTggMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxl UGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuYw0KPiA+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3Jl L0R4ZS9NZW0vSGVhcEd1YXJkLmMNCj4gPiBAQCAtNDQsNiArNDQsMTEgQEAgR0xPQkFMX1JFTU9W RV9JRl9VTlJFRkVSRU5DRUQgVUlOVE4NCj4gbUxldmVsU2hpZnRbR1VBUkRFRF9IRUFQX01BUF9U QUJMRV9ERVBUSF0NCj4gPiAgIEdMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIFVJTlRODQo+ IG1MZXZlbE1hc2tbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF0NCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBU SF9NQVNLUzsNCj4gPg0KPiA+ICsvLw0KPiA+ICsvLyBVc2VkIGZvciBwcm9tb3RpbmcgZnJlZWQg YnV0IG5vdCB1c2VkIHBhZ2VzLg0KPiA+ICsvLw0KPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVG RVJFTkNFRCBFRklfUEhZU0lDQUxfQUREUkVTUw0KPiBtTGFzdFByb21vdGVkUGFnZSA9IEJBU0Vf NEdCOw0KPiA+ICsNCj4gPiAgIC8qKg0KPiA+ICAgICBTZXQgY29ycmVzcG9uZGluZyBiaXRzIGlu IGJpdG1hcCB0YWJsZSB0byAxIGFjY29yZGluZyB0byB0aGUgYWRkcmVzcy4NCj4gPg0KPiA+IEBA IC0zNzksNyArMzg0LDcgQEAgQ2xlYXJHdWFyZGVkTWVtb3J5Qml0cyAoDQo+ID4NCj4gPiAgICAg QHJldHVybiBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGd1YXJkZWQgbWVtb3J5IGJpdG1hcC4N Cj4gPiAgICoqLw0KPiA+IC1VSU5UTg0KPiA+ICtVSU5UNjQNCj4gPiAgIEdldEd1YXJkZWRNZW1v cnlCaXRzICgNCj4gPiAgICAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQWRkcmVzcywNCj4g PiAgICAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQYWdlcw0KPiA+IEBAIC0z ODcsNyArMzkyLDcgQEAgR2V0R3VhcmRlZE1lbW9yeUJpdHMgKA0KPiA+ICAgew0KPiA+ICAgICBV SU5UNjQgICAgICAgICAgICAqQml0TWFwOw0KPiA+ICAgICBVSU5UTiAgICAgICAgICAgICBCaXRz Ow0KPiA+IC0gIFVJTlROICAgICAgICAgICAgIFJlc3VsdDsNCj4gPiArICBVSU5UNjQgICAgICAg ICAgICBSZXN1bHQ7DQo+ID4gICAgIFVJTlROICAgICAgICAgICAgIFNoaWZ0Ow0KPiA+ICAgICBV SU5UTiAgICAgICAgICAgICBCaXRzVG9Vbml0RW5kOw0KPiA+DQo+ID4gQEAgLTY2MCwxNSArNjY1 LDE2IEBAIElzUGFnZVR5cGVUb0d1YXJkICgNCj4gPiAgIC8qKg0KPiA+ICAgICBDaGVjayB0byBz ZWUgaWYgdGhlIGhlYXAgZ3VhcmQgaXMgZW5hYmxlZCBmb3IgcGFnZSBhbmQvb3IgcG9vbCBhbGxv Y2F0aW9uLg0KPiA+DQo+ID4gKyAgQHBhcmFtW2luXSAgR3VhcmRUeXBlICAgU3BlY2lmeSB0aGUg c3ViLXR5cGUocykgb2YgSGVhcCBHdWFyZC4NCj4gPiArDQo+ID4gICAgIEByZXR1cm4gVFJVRS9G QUxTRS4NCj4gPiAgICoqLw0KPiA+ICAgQk9PTEVBTg0KPiA+ICAgSXNIZWFwR3VhcmRFbmFibGVk ICgNCj4gPiAtICBWT0lEDQo+ID4gKyAgVUlOVDggICAgICAgICAgIEd1YXJkVHlwZQ0KPiA+ICAg ICApDQo+ID4gICB7DQo+ID4gLSAgcmV0dXJuIElzTWVtb3J5VHlwZVRvR3VhcmQgKEVmaU1heE1l bW9yeVR5cGUsIEFsbG9jYXRlQW55UGFnZXMsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdVQVJEX0hFQVBfVFlQRV9QT09MfEdVQVJEX0hFQVBfVFlQRV9QQUdFKTsNCj4gPiAr ICByZXR1cm4gSXNNZW1vcnlUeXBlVG9HdWFyZCAoRWZpTWF4TWVtb3J5VHlwZSwgQWxsb2NhdGVB bnlQYWdlcywNCj4gR3VhcmRUeXBlKTsNCj4gPiAgIH0NCj4gPg0KPiA+ICAgLyoqDQo+ID4gQEAg LTEyMDMsNiArMTIwOSwzODAgQEAgU2V0QWxsR3VhcmRQYWdlcyAoDQo+ID4gICAgIH0NCj4gPiAg IH0NCj4gPg0KPiA+ICsvKioNCj4gPiArICBGaW5kIHRoZSBhZGRyZXNzIG9mIHRvcC1tb3N0IGd1 YXJkZWQgZnJlZSBwYWdlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1bb3V0XSAgQWRkcmVzcyAgICBT dGFydCBhZGRyZXNzIG9mIHRvcC1tb3N0IGd1YXJkZWQgZnJlZSBwYWdlLg0KPiA+ICsNCj4gPiAr ICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0dldExhc3RHdWFyZGVk RnJlZVBhZ2VBZGRyZXNzICgNCj4gPiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAq QWRkcmVzcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg IEFkZHJlc3NHcmFudWxhcml0eTsNCj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBCYXNl QWRkcmVzczsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBMZXZlbDsNCj4gPiArICBV SU5UNjQgICAgICAgICAgICAgICAgICBNYXA7DQo+ID4gKyAgSU5UTiAgICAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAobU1hcExldmVsID49IDEpOw0KPiA+ICsN Cj4gPiArICBCYXNlQWRkcmVzcyA9IDA7DQo+ID4gKyAgTWFwID0gbUd1YXJkZWRNZW1vcnlNYXA7 DQo+ID4gKyAgZm9yIChMZXZlbCA9IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEggLSBtTWFw TGV2ZWw7DQo+ID4gKyAgICAgICBMZXZlbCA8IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEg7 DQo+ID4gKyAgICAgICArK0xldmVsKSB7DQo+ID4gKyAgICBBZGRyZXNzR3JhbnVsYXJpdHkgPSBM U2hpZnRVNjQgKDEsIG1MZXZlbFNoaWZ0W0xldmVsXSk7DQo+ID4gKw0KPiA+ICsgICAgLy8NCj4g PiArICAgIC8vIEZpbmQgdGhlIG5vbi1OVUxMIGVudHJ5IGF0IGxhcmdlc3QgaW5kZXguDQo+ID4g KyAgICAvLw0KPiA+ICsgICAgZm9yIChJbmRleCA9IChJTlROKW1MZXZlbE1hc2tbTGV2ZWxdOyBJ bmRleCA+PSAwIDsgLS1JbmRleCkgew0KPiA+ICsgICAgICBpZiAoKChVSU5UNjQgKikoVUlOVE4p TWFwKVtJbmRleF0gIT0gMCkgew0KPiA+ICsgICAgICAgIEJhc2VBZGRyZXNzICs9IE11bHRVNjR4 MzIgKEFkZHJlc3NHcmFudWxhcml0eSwgKFVJTlQzMilJbmRleCk7DQo+ID4gKyAgICAgICAgTWFw ID0gKChVSU5UNjQgKikoVUlOVE4pTWFwKVtJbmRleF07DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gRmluZCB0aGUgbm9uLXplcm8gTVNCIHRoZW4gZ2V0IHRoZSBwYWdlIGFkZHJlc3MuDQo+ ID4gKyAgLy8NCj4gPiArICB3aGlsZSAoTWFwICE9IDApIHsNCj4gPiArICAgIE1hcCA9IFJTaGlm dFU2NCAoTWFwLCAxKTsNCj4gPiArICAgIEJhc2VBZGRyZXNzICs9IEVGSV9QQUdFU19UT19TSVpF ICgxKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpBZGRyZXNzID0gQmFzZUFkZHJlc3M7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlY29yZCBmcmVlZCBwYWdlcy4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJlc3MgICBCYXNlIGFkZHJlc3Mgb2YganVzdCBm cmVlZCBwYWdlcy4NCj4gPiArICBAcGFyYW1baW5dICBQYWdlcyAgICAgICAgIE51bWJlciBvZiBm cmVlZCBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lELg0KPiA+ICsqKi8NCj4gPiAr Vk9JRA0KPiA+ICtNYXJrRnJlZWRQYWdlcyAoDQo+ID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJF U1MgICAgIEJhc2VBZGRyZXNzLA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICBQ YWdlcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFNldEd1YXJkZWRNZW1vcnlCaXRzIChCYXNl QWRkcmVzcywgUGFnZXMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWNvcmQg ZnJlZWQgcGFnZXMgYXMgd2VsbCBhcyBtYXJrIHRoZW0gYXMgbm90LXByZXNlbnQuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNzICAgQmFzZSBhZGRyZXNzIG9mIGp1c3QgZnJl ZWQgcGFnZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAgUGFnZXMgICAgICAgICBOdW1iZXIgb2YgZnJl ZWQgcGFnZXMuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9JRC4NCj4gPiArKiovDQo+ID4gK1ZP SUQNCj4gPiArRUZJQVBJDQo+ID4gK0d1YXJkRnJlZWRQYWdlcyAoDQo+ID4gKyAgSU4gIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgIEJhc2VBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAg ICAgICAgICAgICBQYWdlcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAg ICBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gTGVnYWN5IG1lbW9yeSBsb3dl ciB0aGFuIDFNQiBtaWdodCBiZSBhY2Nlc3NlZCB3aXRoIG5vIGFsbG9jYXRpb24uDQo+IExlYXZl DQo+ID4gKyAgLy8gdGhlbSBhbG9uZS4NCj4gPiArICAvLw0KPiA+ICsgIGlmIChCYXNlQWRkcmVz cyA8IEJBU0VfMU1CKSB7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBNYXJrRnJlZWRQYWdlcyAoQmFzZUFkZHJlc3MsIFBhZ2VzKTsNCj4gPiArICBpZiAoZ0NwdSAh PSBOVUxMKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gU2V0IGZsYWcgdG8gbWFrZSBzdXJl IGFsbG9jYXRpbmcgbWVtb3J5IHdpdGhvdXQgR1VBUkQgZm9yIHBhZ2UgdGFibGUNCj4gPiArICAg IC8vIG9wZXJhdGlvbjsgb3RoZXJ3aXNlIGluZmluaXRlIGxvb3BzIGNvdWxkIGJlIGNhdXNlZC4N Cj4gPiArICAgIC8vDQo+ID4gKyAgICBtT25HdWFyZGluZyA9IFRSVUU7DQo+ID4gKyAgICAvLw0K PiA+ICsgICAgLy8gTm90ZTogVGhpcyBtaWdodCBvdmVyd3JpdGUgb3RoZXIgYXR0cmlidXRlcyBu ZWVkZWQgYnkgb3RoZXIgZmVhdHVyZXMsDQo+ID4gKyAgICAvLyBzdWNoIGFzIE5YIG1lbW9yeSBw cm90ZWN0aW9uLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIFN0YXR1cyA9IGdDcHUtPlNldE1lbW9y eUF0dHJpYnV0ZXMgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBnQ3B1LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBCYXNlQWRkcmVzcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAg RUZJX1BBR0VTX1RPX1NJWkUgKFBhZ2VzKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgRUZJ X01FTU9SWV9SUA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgLy8NCj4g PiArICAgIC8vIE5vcm1hbGx5IHdlIHNob3VsZCBBU1NFUlQgdGhlIHJldHVybmVkIFN0YXR1cy4g QnV0IHRoZXJlIG1pZ2h0IGJlDQo+IG1lbW9yeQ0KPiA+ICsgICAgLy8gYWxsb2MvZnJlZSBpbnZv bHZlZCBpbiBTZXRNZW1vcnlBdHRyaWJ1dGVzKCksIHdoaWNoIG1pZ2h0IGZhaWwgdGhpcw0KPiA+ ICsgICAgLy8gY2FsbGluZy4gSXQncyByYXJlIGNhc2Ugc28gaXQncyBPSyB0byBsZXQgYSBmZXcg dGlueSBob2xlcyBiZSBub3QtZ3VhcmRlZC4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIkZhaWxl ZCB0byBndWFyZCBmcmVlZCBwYWdlczogJXAgKCVsdSlcbiIsDQo+IEJhc2VBZGRyZXNzLCAoVUlO VDY0KVBhZ2VzKSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBtT25HdWFyZGluZyA9IEZBTFNFOw0K PiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVjb3JkIGZyZWVkIHBh Z2VzIGFzIHdlbGwgYXMgbWFyayB0aGVtIGFzIG5vdC1wcmVzZW50LCBpZiBlbmFibGVkLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICBCYXNlQWRkcmVzcyAgIEJhc2UgYWRkcmVzcyBvZiBqdXN0 IGZyZWVkIHBhZ2VzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBhZ2VzICAgICAgICAgTnVtYmVyIG9m IGZyZWVkIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ICtHdWFyZEZyZWVkUGFnZXNDaGVja2VkICgNCj4gPiAr ICBJTiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQmFzZUFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgIFBhZ2VzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYg KElzSGVhcEd1YXJkRW5hYmxlZCAoR1VBUkRfSEVBUF9UWVBFX0ZSRUVEKSkgew0KPiA+ICsgICAg R3VhcmRGcmVlZFBhZ2VzIChCYXNlQWRkcmVzcywgUGFnZXMpOw0KPiA+ICsgIH0NCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTWFyayBhbGwgcGFnZXMgZnJlZWQgYmVmb3JlIENQVSBB cmNoIFByb3RvY29sIGFzIG5vdC1wcmVzZW50Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQN Cj4gPiArR3VhcmRBbGxGcmVlZFBhZ2VzICgNCj4gPiArICBWT0lEDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgVUlOVE4gICAgIEVudHJpZXNbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF07 DQo+ID4gKyAgVUlOVE4gICAgIFNoaWZ0c1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsN Cj4gPiArICBVSU5UTiAgICAgSW5kaWNlc1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsN Cj4gPiArICBVSU5UNjQgICAgVGFibGVzW0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdOw0K PiA+ICsgIFVJTlQ2NCAgICBBZGRyZXNzZXNbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF07 DQo+ID4gKyAgVUlOVDY0ICAgIFRhYmxlRW50cnk7DQo+ID4gKyAgVUlOVDY0ICAgIEFkZHJlc3M7 DQo+ID4gKyAgVUlOVDY0ICAgIEd1YXJkUGFnZTsNCj4gPiArICBJTlROICAgICAgTGV2ZWw7DQo+ ID4gKyAgVUlOVE4gICAgIEJpdEluZGV4Ow0KPiA+ICsgIFVJTlROICAgICBHdWFyZFBhZ2VOdW1i ZXI7DQo+ID4gKw0KPiA+ICsgIGlmIChtR3VhcmRlZE1lbW9yeU1hcCA9PSAwIHx8DQo+ID4gKyAg ICAgIG1NYXBMZXZlbCA9PSAwIHx8DQo+ID4gKyAgICAgIG1NYXBMZXZlbCA+IEdVQVJERURfSEVB UF9NQVBfVEFCTEVfREVQVEgpIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIENvcHlNZW0gKEVudHJpZXMsIG1MZXZlbE1hc2ssIHNpemVvZiAoRW50cmllcykpOw0K PiA+ICsgIENvcHlNZW0gKFNoaWZ0cywgbUxldmVsU2hpZnQsIHNpemVvZiAoU2hpZnRzKSk7DQo+ ID4gKw0KPiA+ICsgIFNldE1lbSAoVGFibGVzLCBzaXplb2YoVGFibGVzKSwgMCk7DQo+ID4gKyAg U2V0TWVtIChBZGRyZXNzZXMsIHNpemVvZihBZGRyZXNzZXMpLCAwKTsNCj4gPiArICBTZXRNZW0g KEluZGljZXMsIHNpemVvZihJbmRpY2VzKSwgMCk7DQo+ID4gKw0KPiA+ICsgIExldmVsICAgICAg ICAgICA9IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEggLSBtTWFwTGV2ZWw7DQo+ID4gKyAg VGFibGVzW0xldmVsXSAgID0gbUd1YXJkZWRNZW1vcnlNYXA7DQo+ID4gKyAgQWRkcmVzcyAgICAg ICAgID0gMDsNCj4gPiArICBHdWFyZFBhZ2UgICAgICAgPSAoVUlOVDY0KS0xOw0KPiA+ICsgIEd1 YXJkUGFnZU51bWJlciA9IDA7DQo+ID4gKw0KPiA+ICsgIHdoaWxlIChUUlVFKSB7DQo+ID4gKyAg ICBpZiAoSW5kaWNlc1tMZXZlbF0gPiBFbnRyaWVzW0xldmVsXSkgew0KPiA+ICsgICAgICBUYWJs ZXNbTGV2ZWxdID0gMDsNCj4gPiArICAgICAgTGV2ZWwgICAgICAgIC09IDE7DQo+ID4gKyAgICB9 IGVsc2Ugew0KPiA+ICsgICAgICBUYWJsZUVudHJ5ICA9ICgoVUlOVDY0ICopKFVJTlROKShUYWJs ZXNbTGV2ZWxdKSlbSW5kaWNlc1tMZXZlbF1dOw0KPiA+ICsgICAgICBBZGRyZXNzICAgICA9IEFk ZHJlc3Nlc1tMZXZlbF07DQo+ID4gKw0KPiA+ICsgICAgICBpZiAoTGV2ZWwgPCBHVUFSREVEX0hF QVBfTUFQX1RBQkxFX0RFUFRIIC0gMSkgew0KPiA+ICsgICAgICAgIExldmVsICAgICAgICAgICAg Kz0gMTsNCj4gPiArICAgICAgICBUYWJsZXNbTGV2ZWxdICAgICA9IFRhYmxlRW50cnk7DQo+ID4g KyAgICAgICAgQWRkcmVzc2VzW0xldmVsXSAgPSBBZGRyZXNzOw0KPiA+ICsgICAgICAgIEluZGlj ZXNbTGV2ZWxdICAgID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICAgY29udGludWU7DQo+ID4gKyAg ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgQml0SW5kZXggPSAxOw0KPiA+ICsgICAgICAgIHdo aWxlIChCaXRJbmRleCAhPSAwKSB7DQo+ID4gKyAgICAgICAgICBpZiAoKFRhYmxlRW50cnkgJiBC aXRJbmRleCkgIT0gMCkgew0KPiA+ICsgICAgICAgICAgICBpZiAoR3VhcmRQYWdlID09IChVSU5U NjQpLTEpIHsNCj4gPiArICAgICAgICAgICAgICBHdWFyZFBhZ2UgPSBBZGRyZXNzOw0KPiA+ICsg ICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICsrR3VhcmRQYWdlTnVtYmVyOw0KPiA+ICsg ICAgICAgICAgfSBlbHNlIGlmIChHdWFyZFBhZ2VOdW1iZXIgPiAwKSB7DQo+ID4gKyAgICAgICAg ICAgIEd1YXJkRnJlZWRQYWdlcyAoR3VhcmRQYWdlLCBHdWFyZFBhZ2VOdW1iZXIpOw0KPiA+ICsg ICAgICAgICAgICBHdWFyZFBhZ2VOdW1iZXIgPSAwOw0KPiA+ICsgICAgICAgICAgICBHdWFyZFBh Z2UgICAgICAgPSAoVUlOVDY0KS0xOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAgICAgIGlmIChUYWJsZUVudHJ5ID09IDApIHsNCj4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ ID4gKyAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgQWRkcmVzcyArPSBFRklfUEFH RVNfVE9fU0laRSAoMSk7DQo+ID4gKyAgICAgICAgICBCaXRJbmRleCA9IExTaGlmdFU2NCAoQml0 SW5kZXgsIDEpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIGlmIChMZXZlbCA8IChHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIIC0g KElOVE4pbU1hcExldmVsKSkgew0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiAr DQo+ID4gKyAgICBJbmRpY2VzW0xldmVsXSArPSAxOw0KPiA+ICsgICAgQWRkcmVzcyA9IChMZXZl bCA9PSAwKSA/IDAgOiBBZGRyZXNzZXNbTGV2ZWwgLSAxXTsNCj4gPiArICAgIEFkZHJlc3Nlc1tM ZXZlbF0gPSBBZGRyZXNzIHwgTFNoaWZ0VTY0IChJbmRpY2VzW0xldmVsXSwgU2hpZnRzW0xldmVs XSk7DQo+ID4gKw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBVcGRhdGUg dGhlIG1heGltdW0gYWRkcmVzcyBvZiBmcmVlZCBwYWdlIHdoaWNoIGNhbiBiZSB1c2VkIGZvcg0K PiBtZW1vcnkNCj4gPiArICAvLyBwcm9tb3Rpb24gdXBvbiBvdXQtb2YtbWVtb3J5LXNwYWNlLg0K PiA+ICsgIC8vDQo+ID4gKyAgR2V0TGFzdEd1YXJkZWRGcmVlUGFnZUFkZHJlc3MgKCZBZGRyZXNz KTsNCj4gPiArICBpZiAoQWRkcmVzcyAhPSAwKSB7DQo+ID4gKyAgICBtTGFzdFByb21vdGVkUGFn ZSA9IEFkZHJlc3M7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBU aGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIG1lbW9yeSBtYXAgZGVzY3Jp cHRvciBpbiBhIG1lbW9yeQ0KPiBtYXANCj4gPiArICBjYW4gYmUgbWVyZ2VkIHdpdGggYW55IGd1 YXJkZWQgZnJlZSBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBNZW1vcnlNYXBFbnRyeSAg ICBBIHBvaW50ZXIgdG8gYSBkZXNjcmlwdG9yIGluIE1lbW9yeU1hcC4NCj4gPiArICBAcGFyYW0g IE1heEFkZHJlc3MgICAgICAgIE1heGltdW0gYWRkcmVzcyB0byBzdG9wIHRoZSBtZXJnZS4NCj4g PiArDQo+ID4gKyAgQHJldHVybiBWT0lEDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ ICtNZXJnZUd1YXJkUGFnZXMgKA0KPiA+ICsgIElOIEVGSV9NRU1PUllfREVTQ1JJUFRPUiAgICAg ICpNZW1vcnlNYXBFbnRyeSwNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICBN YXhBZGRyZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgICAgIEVuZEFkZHJlc3M7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIEJp dG1hcDsNCj4gPiArICBJTlROICAgICAgICAgICAgICAgICAgICAgICAgUGFnZXM7DQo+ID4gKw0K PiA+ICsgIGlmICghSXNIZWFwR3VhcmRFbmFibGVkIChHVUFSRF9IRUFQX1RZUEVfRlJFRUQpIHx8 DQo+ID4gKyAgICAgIE1lbW9yeU1hcEVudHJ5LT5UeXBlID49IEVmaU1lbW9yeU1hcHBlZElPKSB7 DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBCaXRtYXAgPSAwOw0K PiA+ICsgIFBhZ2VzICA9IEVGSV9TSVpFX1RPX1BBR0VTIChNYXhBZGRyZXNzIC0gTWVtb3J5TWFw RW50cnktDQo+ID5QaHlzaWNhbFN0YXJ0KTsNCj4gPiArICBQYWdlcyAtPSBNZW1vcnlNYXBFbnRy eS0+TnVtYmVyT2ZQYWdlczsNCj4gPiArICB3aGlsZSAoUGFnZXMgPiAwKSB7DQo+ID4gKyAgICBp ZiAoQml0bWFwID09IDApIHsNCj4gPiArICAgICAgRW5kQWRkcmVzcyA9IE1lbW9yeU1hcEVudHJ5 LT5QaHlzaWNhbFN0YXJ0ICsNCj4gPiArICAgICAgICAgICAgICAgICAgIEVGSV9QQUdFU19UT19T SVpFIChNZW1vcnlNYXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyk7DQo+ID4gKyAgICAgIEJpdG1hcCA9 IEdldEd1YXJkZWRNZW1vcnlCaXRzIChFbmRBZGRyZXNzLA0KPiBHVUFSREVEX0hFQVBfTUFQX0VO VFJZX0JJVFMpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmICgoQml0bWFwICYgMSkg PT0gMCkgew0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBQ YWdlcy0tOw0KPiA+ICsgICAgTWVtb3J5TWFwRW50cnktPk51bWJlck9mUGFnZXMrKzsNCj4gPiAr ICAgIEJpdG1hcCA9IFJTaGlmdFU2NCAoQml0bWFwLCAxKTsNCj4gPiArICB9DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFB1dCBwYXJ0IChhdCBtb3N0IDY0IHBhZ2VzIGEgdGltZSkg Z3VhcmRlZCBmcmVlIHBhZ2VzIGJhY2sgdG8gZnJlZSBwYWdlDQo+IHBvb2wuDQo+ID4gKw0KPiA+ ICsgIEZyZWVkIG1lbW9yeSBndWFyZCBpcyB1c2VkIHRvIGRldGVjdCBVc2UtQWZ0ZXItRnJlZSAo VUFGKSBtZW1vcnkgaXNzdWUsDQo+IHdoaWNoDQo+ID4gKyAgbWFrZXMgdXNlIG9mICdVc2VkIHRo ZW4gdGhyb3cgYXdheScgd2F5IHRvIGRldGVjdCBhbnkgaWxsZWdhbCBhY2Nlc3MgdG8NCj4gZnJl ZWQNCj4gPiArICBtZW1vcnkuIFRoZSB0aHJvd24tYXdheSBtZW1vcnkgd2lsbCBiZSBtYXJrZWQg YXMgbm90LXByZXNlbnQgc28gdGhhdA0KPiBhbnkgYWNjZXNzDQo+ID4gKyAgdG8gdGhvc2UgbWVt b3J5IChhZnRlciBmcmVlKSB3aWxsIGJlIGNhdWdodCBieSBwYWdlLWZhdWx0IGV4Y2VwdGlvbi4N Cj4gPiArDQo+ID4gKyAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGlzIHdpbGwgY29uc3VtZSBsb3Rz IG9mIG1lbW9yeSBzcGFjZS4gT25jZSBubw0KPiBtZW1vcnkNCj4gPiArICBsZWZ0IGluIHBvb2wg dG8gYWxsb2NhdGUsIHdlIGhhdmUgdG8gcmVzdG9yZSBwYXJ0IG9mIHRoZSBmcmVlZCBwYWdlcyB0 byB0aGVpcg0KPiA+ICsgIG5vcm1hbCBmdW5jdGlvbi4gT3RoZXJ3aXNlIHRoZSB3aG9sZSBzeXN0 ZW0gd2lsbCBzdG9wIGZ1bmN0aW9uaW5nLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIFN0YXJ0QWRk cmVzcyAgICBTdGFydCBhZGRyZXNzIG9mIHByb21vdGVkIG1lbW9yeS4NCj4gPiArICBAcGFyYW0g IEVuZEFkZHJlc3MgICAgICBFbmQgYWRkcmVzcyBvZiBwcm9tb3RlZCBtZW1vcnkuDQo+ID4gKw0K PiA+ICsgIEByZXR1cm4gVFJVRSAgICBTdWNjZWVkZWQgdG8gcHJvbW90ZSBtZW1vcnkuDQo+ID4g KyAgQHJldHVybiBGQUxTRSAgIE5vIGZyZWUgbWVtb3J5IGZvdW5kLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArUHJvbW90ZUd1YXJkZWRGcmVlUGFnZXMgKA0KPiA+ICsgIE9V VCBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICpTdGFydEFkZHJlc3MsDQo+ID4gKyAgT1VUIEVG SV9QSFlTSUNBTF9BRERSRVNTICAgICAgKkVuZEFkZHJlc3MNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgQXZhaWxhYmxlUGFnZXM7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAg ICAgQml0bWFwOw0KPiA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIFN0YXJ0Ow0KPiA+ICsN Cj4gPiArICBpZiAoIUlzSGVhcEd1YXJkRW5hYmxlZCAoR1VBUkRfSEVBUF9UWVBFX0ZSRUVEKSkg ew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4g PiArICAvLyBTaW1pbGFyIHRvIG1lbW9yeSBhbGxvY2F0aW9uIHNlcnZpY2UsIGFsd2F5cyBzZWFy Y2ggdGhlIGZyZWVkIHBhZ2VzIGluDQo+ID4gKyAgLy8gZGVzY2VuZGluZyBkaXJlY3Rpb24uDQo+ ID4gKyAgLy8NCj4gPiArICBTdGFydCAgICAgICAgICAgPSBtTGFzdFByb21vdGVkUGFnZTsNCj4g PiArICBBdmFpbGFibGVQYWdlcyAgPSAwOw0KPiA+ICsgIHdoaWxlIChBdmFpbGFibGVQYWdlcyA9 PSAwKSB7DQo+ID4gKyAgICBTdGFydCAtPSBFRklfUEFHRVNfVE9fU0laRSAoR1VBUkRFRF9IRUFQ X01BUF9FTlRSWV9CSVRTKTsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBJZiB0aGUgYWRkcmVz cyB3cmFwcyBhcm91bmQsIHRyeSB0aGUgcmVhbGx5IGZyZWVkIHBhZ2VzIGF0IHRvcC4NCj4gPiAr ICAgIC8vDQo+ID4gKyAgICBpZiAoU3RhcnQgPiBtTGFzdFByb21vdGVkUGFnZSkgew0KPiA+ICsg ICAgICBHZXRMYXN0R3VhcmRlZEZyZWVQYWdlQWRkcmVzcyAoJlN0YXJ0KTsNCj4gPiArICAgICAg QVNTRVJUIChTdGFydCAhPSAwKTsNCj4gPiArICAgICAgU3RhcnQgLT0gRUZJX1BBR0VTX1RPX1NJ WkUgKEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgQml0bWFwID0gR2V0R3VhcmRlZE1lbW9yeUJpdHMgKFN0YXJ0LA0KPiBHVUFSREVEX0hF QVBfTUFQX0VOVFJZX0JJVFMpOw0KPiA+ICsgICAgd2hpbGUgKEJpdG1hcCA+IDApIHsNCj4gPiAr ICAgICAgaWYgKChCaXRtYXAgJiAxKSAhPSAwKSB7DQo+ID4gKyAgICAgICAgKytBdmFpbGFibGVQ YWdlczsNCj4gPiArICAgICAgfSBlbHNlIGlmIChBdmFpbGFibGVQYWdlcyA9PSAwKSB7DQo+ID4g KyAgICAgICAgU3RhcnQgKz0gRUZJX1BBR0VTX1RPX1NJWkUgKDEpOw0KPiA+ICsgICAgICB9IGVs c2Ugew0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAg ICBCaXRtYXAgPSBSU2hpZnRVNjQgKEJpdG1hcCwgMSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoQXZhaWxhYmxlUGFnZXMpIHsNCj4gPiArICAgIERFQlVHICgoREVC VUdfSU5GTywgIlByb21vdGVkIHBhZ2VzOiAlbFggKCVseClcclxuIiwgU3RhcnQsDQo+IChVSU5U NjQpQXZhaWxhYmxlUGFnZXMpKTsNCj4gPiArICAgIENsZWFyR3VhcmRlZE1lbW9yeUJpdHMgKFN0 YXJ0LCBBdmFpbGFibGVQYWdlcyk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKGdDcHUgIT0gTlVMTCkg ew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBTZXQgZmxhZyB0byBtYWtlIHN1cmUgYWxs b2NhdGluZyBtZW1vcnkgd2l0aG91dCBHVUFSRCBmb3IgcGFnZSB0YWJsZQ0KPiA+ICsgICAgICAv LyBvcGVyYXRpb247IG90aGVyd2lzZSBpbmZpbml0ZSBsb29wcyBjb3VsZCBiZSBjYXVzZWQuDQo+ ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIG1Pbkd1YXJkaW5nID0gVFJVRTsNCj4gPiArICAgICAg U3RhdHVzID0gZ0NwdS0+U2V0TWVtb3J5QXR0cmlidXRlcyAoZ0NwdSwgU3RhcnQsDQo+IEVGSV9Q QUdFU19UT19TSVpFKEF2YWlsYWJsZVBhZ2VzKSwgMCk7DQo+ID4gKyAgICAgIEFTU0VSVF9FRklf RVJST1IgKFN0YXR1cyk7DQo+ID4gKyAgICAgIG1Pbkd1YXJkaW5nID0gRkFMU0U7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgICAgbUxhc3RQcm9tb3RlZFBhZ2UgPSBTdGFydDsNCj4gPiArICAg ICpTdGFydEFkZHJlc3MgICAgID0gU3RhcnQ7DQo+ID4gKyAgICAqRW5kQWRkcmVzcyAgICAgICA9 IFN0YXJ0ICsgRUZJX1BBR0VTX1RPX1NJWkUgKEF2YWlsYWJsZVBhZ2VzKSAtIDE7DQo+ID4gKyAg ICByZXR1cm4gVFJVRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4g PiArfQ0KPiA+ICsNCj4gPiAgIC8qKg0KPiA+ICAgICBOb3RpZnkgZnVuY3Rpb24gdXNlZCB0byBz ZXQgYWxsIEd1YXJkIHBhZ2VzIGJlZm9yZSBDUFUgQXJjaCBQcm90b2NvbA0KPiBpbnN0YWxsZWQu DQo+ID4gICAqKi8NCj4gPiBAQCAtMTIxMiw3ICsxNTkyLDIwIEBAIEhlYXBHdWFyZENwdUFyY2hQ cm90b2NvbE5vdGlmeSAoDQo+ID4gICAgICkNCj4gPiAgIHsNCj4gPiAgICAgQVNTRVJUIChnQ3B1 ICE9IE5VTEwpOw0KPiA+IC0gIFNldEFsbEd1YXJkUGFnZXMgKCk7DQo+ID4gKw0KPiA+ICsgIGlm IChJc0hlYXBHdWFyZEVuYWJsZWQNCj4gKEdVQVJEX0hFQVBfVFlQRV9QQUdFfEdVQVJEX0hFQVBf VFlQRV9QT09MKSAmJg0KPiA+ICsgICAgICBJc0hlYXBHdWFyZEVuYWJsZWQgKEdVQVJEX0hFQVBf VFlQRV9GUkVFRCkpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJIZWFwIGd1YXJk IGFuZCBmcmVlZCBtZW1vcnkgZ3VhcmQgY2Fubm90IGJlDQo+IGVuYWJsZWQgYXQgdGhlIHNhbWUg dGltZS5cbiIpKTsNCj4gPiArICAgIENwdURlYWRMb29wICgpOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgaWYgKElzSGVhcEd1YXJkRW5hYmxlZA0KPiAoR1VBUkRfSEVBUF9UWVBFX1BBR0V8R1VB UkRfSEVBUF9UWVBFX1BPT0wpKSB7DQo+ID4gKyAgICBTZXRBbGxHdWFyZFBhZ2VzICgpOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKElzSGVhcEd1YXJkRW5hYmxlZCAoR1VBUkRfSEVBUF9U WVBFX0ZSRUVEKSkgew0KPiA+ICsgICAgR3VhcmRBbGxGcmVlZFBhZ2VzICgpOw0KPiA+ICsgIH0N Cj4gPiAgIH0NCj4gPg0KPiA+ICAgLyoqDQo+ID4gQEAgLTEyNjQsNiArMTY1NywxMCBAQCBEdW1w R3VhcmRlZE1lbW9yeUJpdG1hcCAoDQo+ID4gICAgIENIQVI4ICAgICAqUnVsZXIxOw0KPiA+ICAg ICBDSEFSOCAgICAgKlJ1bGVyMjsNCj4gPg0KPiA+ICsgIGlmICghSXNIZWFwR3VhcmRFbmFibGVk IChHVUFSRF9IRUFQX1RZUEVfQUxMKSkgew0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gICAgIGlmIChtR3VhcmRlZE1lbW9yeU1hcCA9PSAwIHx8DQo+ID4gICAgICAgICBt TWFwTGV2ZWwgPT0gMCB8fA0KPiA+ICAgICAgICAgbU1hcExldmVsID4gR1VBUkRFRF9IRUFQX01B UF9UQUJMRV9ERVBUSCkgew0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUv TWVtL0hlYXBHdWFyZC5oDQo+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQu aA0KPiA+IGluZGV4IDhjMzQ2OTI0MzkuLjU1YTkxZWMwOTggMTAwNjQ0DQo+ID4gLS0tIGEvTWRl TW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaA0KPiA+ICsrKyBiL01kZU1vZHVsZVBr Zy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmgNCj4gPiBAQCAtMSw3ICsxLDcgQEANCj4gPiAgIC8q KiBAZmlsZQ0KPiA+ICAgICBEYXRhIHR5cGUsIG1hY3JvcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBl cyBvZiBoZWFwIGd1YXJkIGZlYXR1cmUuDQo+ID4NCj4gPiAtQ29weXJpZ2h0IChjKSAyMDE3LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gK0NvcHlyaWdo dCAoYykgMjAxNy0yMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ID4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ ID4gICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+IExpY2Vuc2UNCj4gPiAgIHdoaWNoIGFjY29tcGFuaWVz IHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUg Zm91bmQNCj4gYXQNCj4gPiBAQCAtMTYwLDYgKzE2MCw5IEBAIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBSRVBSRVNFTlRBVElPTlMgT0YNCj4gQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJ RUQuDQo+ID4gICAvLw0KPiA+ICAgI2RlZmluZSBHVUFSRF9IRUFQX1RZUEVfUEFHRSAgICAgICAg QklUMA0KPiA+ICAgI2RlZmluZSBHVUFSRF9IRUFQX1RZUEVfUE9PTCAgICAgICAgQklUMQ0KPiA+ ICsjZGVmaW5lIEdVQVJEX0hFQVBfVFlQRV9GUkVFRCAgICAgICBCSVQ0DQo+ID4gKyNkZWZpbmUg R1VBUkRfSEVBUF9UWVBFX0FMTCAgICAgICAgIFwNCj4gPiArDQo+IChHVUFSRF9IRUFQX1RZUEVf UEFHRXxHVUFSRF9IRUFQX1RZUEVfUE9PTHxHVUFSRF9IRUFQX1RZUEVfRlINCj4gRUVEKQ0KPiA+ DQo+ID4gICAvLw0KPiA+ICAgLy8gRGVidWcgbWVzc2FnZSBsZXZlbA0KPiA+IEBAIC0zOTIsMTEg KzM5NSwxMyBAQCBBZGp1c3RQb29sSGVhZEYgKA0KPiA+ICAgLyoqDQo+ID4gICAgIENoZWNrIHRv IHNlZSBpZiB0aGUgaGVhcCBndWFyZCBpcyBlbmFibGVkIGZvciBwYWdlIGFuZC9vciBwb29sIGFs bG9jYXRpb24uDQo+ID4NCj4gPiArICBAcGFyYW1baW5dICBHdWFyZFR5cGUgICBTcGVjaWZ5IHRo ZSBzdWItdHlwZShzKSBvZiBIZWFwIEd1YXJkLg0KPiA+ICsNCj4gPiAgICAgQHJldHVybiBUUlVF L0ZBTFNFLg0KPiA+ICAgKiovDQo+ID4gICBCT09MRUFODQo+ID4gICBJc0hlYXBHdWFyZEVuYWJs ZWQgKA0KPiA+IC0gIFZPSUQNCj4gPiArICBVSU5UOCAgICAgICAgICAgR3VhcmRUeXBlDQo+ID4g ICAgICk7DQo+ID4NCj4gPiAgIC8qKg0KPiA+IEBAIC00MDcsNiArNDEyLDYyIEBAIEhlYXBHdWFy ZENwdUFyY2hQcm90b2NvbE5vdGlmeSAoDQo+ID4gICAgIFZPSUQNCj4gPiAgICAgKTsNCj4gPg0K PiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVu IG1lbW9yeSBtYXAgZGVzY3JpcHRvciBpbiBhIG1lbW9yeQ0KPiBtYXANCj4gPiArICBjYW4gYmUg bWVyZ2VkIHdpdGggYW55IGd1YXJkZWQgZnJlZSBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFt ICBNZW1vcnlNYXBFbnRyeSAgICBBIHBvaW50ZXIgdG8gYSBkZXNjcmlwdG9yIGluIE1lbW9yeU1h cC4NCj4gPiArICBAcGFyYW0gIE1heEFkZHJlc3MgICAgICAgIE1heGltdW0gYWRkcmVzcyB0byBz dG9wIHRoZSBtZXJnZS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lEDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArVk9JRA0KPiA+ICtNZXJnZUd1YXJkUGFnZXMgKA0KPiA+ICsgIElOIEVGSV9NRU1P UllfREVTQ1JJUFRPUiAgICAgICpNZW1vcnlNYXBFbnRyeSwNCj4gPiArICBJTiBFRklfUEhZU0lD QUxfQUREUkVTUyAgICAgICBNYXhBZGRyZXNzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFJlY29yZCBmcmVlZCBwYWdlcyBhcyB3ZWxsIGFzIG1hcmsgdGhlbSBhcyBub3QtcHJl c2VudCwgaWYgZW5hYmxlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJlc3Mg ICBCYXNlIGFkZHJlc3Mgb2YganVzdCBmcmVlZCBwYWdlcy4NCj4gPiArICBAcGFyYW1baW5dICBQ YWdlcyAgICAgICAgIE51bWJlciBvZiBmcmVlZCBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHJldHVy biBWT0lELg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArR3VhcmRGcmVl ZFBhZ2VzQ2hlY2tlZCAoDQo+ID4gKyAgSU4gIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEJhc2VB ZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICBQYWdlcw0KPiA+ICsg ICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBQdXQgcGFydCAoYXQgbW9zdCA2NCBwYWdlcyBh IHRpbWUpIGd1YXJkZWQgZnJlZSBwYWdlcyBiYWNrIHRvIGZyZWUgcGFnZQ0KPiBwb29sLg0KPiA+ ICsNCj4gPiArICBGcmVlZCBtZW1vcnkgZ3VhcmQgaXMgdXNlZCB0byBkZXRlY3QgVXNlLUFmdGVy LUZyZWUgKFVBRikgbWVtb3J5IGlzc3VlLA0KPiB3aGljaA0KPiA+ICsgIG1ha2VzIHVzZSBvZiAn VXNlZCB0aGVuIHRocm93IGF3YXknIHdheSB0byBkZXRlY3QgYW55IGlsbGVnYWwgYWNjZXNzIHRv DQo+IGZyZWVkDQo+ID4gKyAgbWVtb3J5LiBUaGUgdGhyb3duLWF3YXkgbWVtb3J5IHdpbGwgYmUg bWFya2VkIGFzIG5vdC1wcmVzZW50IHNvIHRoYXQNCj4gYW55IGFjY2Vzcw0KPiA+ICsgIHRvIHRo b3NlIG1lbW9yeSAoYWZ0ZXIgZnJlZSkgd2lsbCBiZSBjYXVnaHQgYnkgcGFnZS1mYXVsdCBleGNl cHRpb24uDQo+ID4gKw0KPiA+ICsgIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyB3aWxsIGNvbnN1 bWUgbG90cyBvZiBtZW1vcnkgc3BhY2UuIE9uY2Ugbm8NCj4gbWVtb3J5DQo+ID4gKyAgbGVmdCBp biBwb29sIHRvIGFsbG9jYXRlLCB3ZSBoYXZlIHRvIHJlc3RvcmUgcGFydCBvZiB0aGUgZnJlZWQg cGFnZXMgdG8gdGhlaXINCj4gPiArICBub3JtYWwgZnVuY3Rpb24uIE90aGVyd2lzZSB0aGUgd2hv bGUgc3lzdGVtIHdpbGwgc3RvcCBmdW5jdGlvbmluZy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBT dGFydEFkZHJlc3MgICAgU3RhcnQgYWRkcmVzcyBvZiBwcm9tb3RlZCBtZW1vcnkuDQo+ID4gKyAg QHBhcmFtICBFbmRBZGRyZXNzICAgICAgRW5kIGFkZHJlc3Mgb2YgcHJvbW90ZWQgbWVtb3J5Lg0K PiA+ICsNCj4gPiArICBAcmV0dXJuIFRSVUUgICAgU3VjY2VlZGVkIHRvIHByb21vdGUgbWVtb3J5 Lg0KPiA+ICsgIEByZXR1cm4gRkFMU0UgICBObyBmcmVlIG1lbW9yeSBmb3VuZC4NCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK1Byb21vdGVHdWFyZGVkRnJlZVBhZ2VzICgNCj4g PiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAqU3RhcnRBZGRyZXNzLA0KPiA+ICsg IE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICpFbmRBZGRyZXNzDQo+ID4gKyAgKTsNCj4g PiArDQo+ID4gICBleHRlcm4gQk9PTEVBTiBtT25HdWFyZGluZzsNCj4gPg0KPiA+ICAgI2VuZGlm DQo+ID4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5jDQo+IGIv TWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gPiBpbmRleCAzYjRjYzA4ZTdjLi45 NjFjNWI4MzM1IDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFn ZS5jDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gPiBAQCAt NDAxLDkgKzQwMSwxMiBAQCBQcm9tb3RlTWVtb3J5UmVzb3VyY2UgKA0KPiA+ICAgICBWT0lEDQo+ ID4gICAgICkNCj4gPiAgIHsNCj4gPiAtICBMSVNUX0VOVFJZICAgICAgICAgKkxpbms7DQo+ID4g LSAgRUZJX0dDRF9NQVBfRU5UUlkgICpFbnRyeTsNCj4gPiAtICBCT09MRUFOICAgICAgICAgICAg UHJvbW90ZWQ7DQo+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICpMaW5r Ow0KPiA+ICsgIEVGSV9HQ0RfTUFQX0VOVFJZICAgICAgICAgICAgICAgICAqRW50cnk7DQo+ID4g KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21vdGVkOw0KPiA+ICsgIEVG SV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICBTdGFydEFkZHJlc3M7DQo+ID4gKyAgRUZJ X1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgIEVuZEFkZHJlc3M7DQo+ID4gKyAgRUZJX0dD RF9NRU1PUllfU1BBQ0VfREVTQ1JJUFRPUiAgIERlc2NyaXB0b3I7DQo+ID4NCj4gPiAgICAgREVC VUcgKChERUJVR19QQUdFLCAiUHJvbW90ZSB0aGUgbWVtb3J5IHJlc291cmNlXG4iKSk7DQo+ID4N Cj4gPiBAQCAtNDUxLDYgKzQ1NCwyNCBAQCBQcm9tb3RlTWVtb3J5UmVzb3VyY2UgKA0KPiA+DQo+ ID4gICAgIENvcmVSZWxlYXNlR2NkTWVtb3J5TG9jayAoKTsNCj4gPg0KPiA+ICsgIGlmICghUHJv bW90ZWQpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBJZiBmcmVlZC1tZW1vcnkgZ3VhcmQg aXMgZW5hYmxlZCwgd2UgY291bGQgcHJvbW90ZSBwYWdlcyBmcm9tDQo+ID4gKyAgICAvLyBndWFy ZGVkIGZyZWUgcGFnZXMuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgUHJvbW90ZWQgPSBQcm9tb3Rl R3VhcmRlZEZyZWVQYWdlcyAoJlN0YXJ0QWRkcmVzcywgJkVuZEFkZHJlc3MpOw0KPiA+ICsgICAg aWYgKFByb21vdGVkKSB7DQo+ID4gKyAgICAgIENvcmVHZXRNZW1vcnlTcGFjZURlc2NyaXB0b3Ig KFN0YXJ0QWRkcmVzcywgJkRlc2NyaXB0b3IpOw0KPiA+ICsgICAgICBDb3JlQWRkUmFuZ2UgKA0K PiA+ICsgICAgICAgIEVmaUNvbnZlbnRpb25hbE1lbW9yeSwNCj4gPiArICAgICAgICBTdGFydEFk ZHJlc3MsDQo+ID4gKyAgICAgICAgRW5kQWRkcmVzcywNCj4gPiArICAgICAgICBEZXNjcmlwdG9y LkNhcGFiaWxpdGllcyAmIH4oRUZJX01FTU9SWV9QUkVTRU5UIHwNCj4gRUZJX01FTU9SWV9JTklU SUFMSVpFRCB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9N RU1PUllfVEVTVEVEIHwgRUZJX01FTU9SWV9SVU5USU1FKQ0KPiA+ICsgICAgICAgICk7DQo+ID4g KyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAgICAgcmV0dXJuIFByb21vdGVkOw0KPiA+ICAg fQ0KPiA+ICAgLyoqDQo+ID4gQEAgLTg5Niw5ICs5MTcsMTUgQEAgQ29yZUNvbnZlcnRQYWdlc0V4 ICgNCj4gPiAgICAgICB9DQo+ID4NCj4gPiAgICAgICAvLw0KPiA+IC0gICAgLy8gQWRkIG91ciBu ZXcgcmFuZ2UgaW4NCj4gPiArICAgIC8vIEFkZCBvdXIgbmV3IHJhbmdlIGluLiBEb24ndCBkbyB0 aGlzIGZvciBmcmVlZCBwYWdlcyBpZiBmcmVlZC1tZW1vcnkNCj4gPiArICAgIC8vIGd1YXJkIGlz IGVuYWJsZWQuDQo+ID4gICAgICAgLy8NCj4gPiAtICAgIENvcmVBZGRSYW5nZSAoTWVtVHlwZSwg U3RhcnQsIFJhbmdlRW5kLCBBdHRyaWJ1dGUpOw0KPiA+ICsgICAgaWYgKCFJc0hlYXBHdWFyZEVu YWJsZWQgKEdVQVJEX0hFQVBfVFlQRV9GUkVFRCkgfHwNCj4gPiArICAgICAgICAhQ2hhbmdpbmdU eXBlIHx8DQo+ID4gKyAgICAgICAgTWVtVHlwZSAhPSBFZmlDb252ZW50aW9uYWxNZW1vcnkpIHsN Cj4gPiArICAgICAgQ29yZUFkZFJhbmdlIChNZW1UeXBlLCBTdGFydCwgUmFuZ2VFbmQsIEF0dHJp YnV0ZSk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICAgICAgIGlmIChDaGFuZ2luZ1R5cGUgJiYg KE1lbVR5cGUgPT0gRWZpQ29udmVudGlvbmFsTWVtb3J5KSkgew0KPiA+ICAgICAgICAgLy8NCj4g PiAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgREVCVUdfQ0xFQVJfTUVNT1JZKCkgZm9yIGFuIGFk ZHJlc3Mgb2YgMCBiZWNhdXNlDQo+IHRoaXMNCj4gPiBAQCAtMTUxNCw2ICsxNTQxLDcgQEAgQ29y ZUZyZWVQYWdlcyAoDQo+ID4NCj4gPiAgICAgU3RhdHVzID0gQ29yZUludGVybmFsRnJlZVBhZ2Vz IChNZW1vcnksIE51bWJlck9mUGFnZXMsICZNZW1vcnlUeXBlKTsNCj4gPiAgICAgaWYgKCFFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIEd1YXJkRnJlZWRQYWdlc0NoZWNrZWQgKE1lbW9y eSwgTnVtYmVyT2ZQYWdlcyk7DQo+ID4gICAgICAgQ29yZVVwZGF0ZVByb2ZpbGUgKA0KPiA+ICAg ICAgICAgKEVGSV9QSFlTSUNBTF9BRERSRVNTKSAoVUlOVE4pIFJFVFVSTl9BRERSRVNTICgwKSwN Cj4gPiAgICAgICAgIE1lbW9yeVByb2ZpbGVBY3Rpb25GcmVlUGFnZXMsDQo+ID4gQEAgLTE5MDgs OSArMTkzNiw3IEBAIERvbmU6DQo+ID4gICAgICpNZW1vcnlNYXBTaXplID0gQnVmZmVyU2l6ZTsN Cj4gPg0KPiA+ICAgICBERUJVR19DT0RFICgNCj4gPiAtICAgIGlmIChQY2RHZXQ4IChQY2RIZWFw R3VhcmRQcm9wZXJ0eU1hc2spICYgKEJJVDF8QklUMCkpIHsNCj4gPiAtICAgICAgRHVtcEd1YXJk ZWRNZW1vcnlCaXRtYXAgKCk7DQo+ID4gLSAgICB9DQo+ID4gKyAgICBEdW1wR3VhcmRlZE1lbW9y eUJpdG1hcCAoKTsNCj4gPiAgICAgKTsNCj4gPg0KPiA+ICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYw0KPiBiL01kZU1v ZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUG9vbC5jDQo+ID4gaW5kZXggMWZmMjA2MWY3Zi4uYjkxODJl YTgwNyAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYw0K PiA+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUG9vbC5jDQo+ID4gQEAgLTEsNyAr MSw3IEBADQo+ID4gICAvKiogQGZpbGUNCj4gPiAgICAgVUVGSSBNZW1vcnkgcG9vbCBtYW5hZ2Vt ZW50IGZ1bmN0aW9ucy4NCj4gPg0KPiA+IC1Db3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE2LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gK0NvcHlyaWdodCAo YykgMjAwNiAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gPiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4g PiAgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiA+ICAgd2hpY2ggYWNjb21wYW5pZXMg dGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBm b3VuZA0KPiBhdA0KPiA+IEBAIC0yNiw3ICsyNiw4IEBAIHR5cGVkZWYgc3RydWN0IHsNCj4gPiAg IH0gUE9PTF9GUkVFOw0KPiA+DQo+ID4NCj4gPiAtI2RlZmluZSBQT09MX0hFQURfU0lHTkFUVVJF ICAgU0lHTkFUVVJFXzMyKCdwJywnaCcsJ2QnLCcwJykNCj4gPiArI2RlZmluZSBQT09MX0hFQURf U0lHTkFUVVJFICAgICAgIFNJR05BVFVSRV8zMigncCcsJ2gnLCdkJywnMCcpDQo+ID4gKyNkZWZp bmUgUE9PTFBBR0VfSEVBRF9TSUdOQVRVUkUgICBTSUdOQVRVUkVfMzIoJ3AnLCdoJywnZCcsJzEn KQ0KPiA+ICAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICAgICBVSU5UMzIgICAgICAgICAgU2lnbmF0 dXJlOw0KPiA+ICAgICBVSU5UMzIgICAgICAgICAgUmVzZXJ2ZWQ7DQo+ID4gQEAgLTM2Nyw2ICsz NjgsNyBAQCBDb3JlQWxsb2NhdGVQb29sSSAoDQo+ID4gICAgIFVJTlROICAgICAgIE5vUGFnZXM7 DQo+ID4gICAgIFVJTlROICAgICAgIEdyYW51bGFyaXR5Ow0KPiA+ICAgICBCT09MRUFOICAgICBI YXNQb29sVGFpbDsNCj4gPiArICBCT09MRUFOICAgICBQYWdlQXNQb29sOw0KPiA+DQo+ID4gICAg IEFTU0VSVF9MT0NLRUQgKCZtUG9vbE1lbW9yeUxvY2spOw0KPiA+DQo+ID4gQEAgLTM4Niw2ICsz ODgsNyBAQCBDb3JlQWxsb2NhdGVQb29sSSAoDQo+ID4NCj4gPiAgICAgSGFzUG9vbFRhaWwgID0g IShOZWVkR3VhcmQgJiYNCj4gPiAgICAgICAgICAgICAgICAgICAgICAoKFBjZEdldDggKFBjZEhl YXBHdWFyZFByb3BlcnR5TWFzaykgJiBCSVQ3KSA9PSAwKSk7DQo+ID4gKyAgUGFnZUFzUG9vbCA9 IChJc0hlYXBHdWFyZEVuYWJsZWQgKEdVQVJEX0hFQVBfVFlQRV9GUkVFRCkNCj4gJiYgIW1Pbkd1 YXJkaW5nKTsNCj4gPg0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBBZGp1c3RpbmcgdGhlIFNpemUg dG8gYmUgb2YgcHJvcGVyIGFsaWdubWVudCBzbyB0aGF0DQo+ID4gQEAgLTQwNiw3ICs0MDksNyBA QCBDb3JlQWxsb2NhdGVQb29sSSAoDQo+ID4gICAgIC8vIElmIGFsbG9jYXRpb24gaXMgb3ZlciBt YXggc2l6ZSwganVzdCBhbGxvY2F0ZSBwYWdlcyBmb3IgdGhlIHJlcXVlc3QNCj4gPiAgICAgLy8g KHNsb3cpDQo+ID4gICAgIC8vDQo+ID4gLSAgaWYgKEluZGV4ID49IFNJWkVfVE9fTElTVCAoR3Jh bnVsYXJpdHkpIHx8IE5lZWRHdWFyZCkgew0KPiA+ICsgIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJ U1QgKEdyYW51bGFyaXR5KSB8fCBOZWVkR3VhcmQgfHwgUGFnZUFzUG9vbCkgew0KPiA+ICAgICAg IGlmICghSGFzUG9vbFRhaWwpIHsNCj4gPiAgICAgICAgIFNpemUgLT0gc2l6ZW9mIChQT09MX1RB SUwpOw0KPiA+ICAgICAgIH0NCj4gPiBAQCAtNDk4LDcgKzUwMSw3IEBAIERvbmU6DQo+ID4gICAg ICAgLy8NCj4gPiAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9vbCBidWZmZXIsIGZpbGwgaW4gdGhl IGhlYWRlciAmIHRhaWwgaW5mbw0KPiA+ICAgICAgIC8vDQo+ID4gLSAgICBIZWFkLT5TaWduYXR1 cmUgPSBQT09MX0hFQURfU0lHTkFUVVJFOw0KPiA+ICsgICAgSGVhZC0+U2lnbmF0dXJlID0gKFBh Z2VBc1Bvb2wpID8gUE9PTFBBR0VfSEVBRF9TSUdOQVRVUkUgOg0KPiBQT09MX0hFQURfU0lHTkFU VVJFOw0KPiA+ICAgICAgIEhlYWQtPlNpemUgICAgICA9IFNpemU7DQo+ID4gICAgICAgSGVhZC0+ VHlwZSAgICAgID0gKEVGSV9NRU1PUllfVFlQRSkgUG9vbFR5cGU7DQo+ID4gICAgICAgQnVmZmVy ICAgICAgICAgID0gSGVhZC0+RGF0YTsNCj4gPiBAQCAtNjE1LDYgKzYxOCw3IEBAIENvcmVGcmVl UG9vbFBhZ2VzSSAoDQo+ID4gICAgIENvcmVGcmVlUG9vbFBhZ2VzIChNZW1vcnksIE5vUGFnZXMp Ow0KPiA+ICAgICBDb3JlUmVsZWFzZU1lbW9yeUxvY2sgKCk7DQo+ID4NCj4gPiArICBHdWFyZEZy ZWVkUGFnZXNDaGVja2VkIChNZW1vcnksIE5vUGFnZXMpOw0KPiA+ICAgICBBcHBseU1lbW9yeVBy b3RlY3Rpb25Qb2xpY3kgKFBvb2xUeXBlLCBFZmlDb252ZW50aW9uYWxNZW1vcnksDQo+ID4gICAg ICAgKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilNZW1vcnksIEVGSV9QQUdFU19UT19TSVpF IChOb1BhZ2VzKSk7DQo+ID4gICB9DQo+ID4gQEAgLTY4NSwxNSArNjg5LDE5IEBAIENvcmVGcmVl UG9vbEkgKA0KPiA+ICAgICBVSU5UTiAgICAgICBHcmFudWxhcml0eTsNCj4gPiAgICAgQk9PTEVB TiAgICAgSXNHdWFyZGVkOw0KPiA+ICAgICBCT09MRUFOICAgICBIYXNQb29sVGFpbDsNCj4gPiAr ICBCT09MRUFOICAgICBQYWdlQXNQb29sOw0KPiA+DQo+ID4gICAgIEFTU0VSVChCdWZmZXIgIT0g TlVMTCk7DQo+ID4gICAgIC8vDQo+ID4gICAgIC8vIEdldCB0aGUgaGVhZCAmIHRhaWwgb2YgdGhl IHBvb2wgZW50cnkNCj4gPiAgICAgLy8NCj4gPiAtICBIZWFkID0gQ1IgKEJ1ZmZlciwgUE9PTF9I RUFELCBEYXRhLCBQT09MX0hFQURfU0lHTkFUVVJFKTsNCj4gPiArICBIZWFkID0gQkFTRV9DUiAo QnVmZmVyLCBQT09MX0hFQUQsIERhdGEpOw0KPiA+ICAgICBBU1NFUlQoSGVhZCAhPSBOVUxMKTsN Cj4gPg0KPiA+IC0gIGlmIChIZWFkLT5TaWduYXR1cmUgIT0gUE9PTF9IRUFEX1NJR05BVFVSRSkg ew0KPiA+ICsgIGlmIChIZWFkLT5TaWduYXR1cmUgIT0gUE9PTF9IRUFEX1NJR05BVFVSRSAmJg0K PiA+ICsgICAgICBIZWFkLT5TaWduYXR1cmUgIT0gUE9PTFBBR0VfSEVBRF9TSUdOQVRVUkUpIHsN Cj4gPiArICAgIEFTU0VSVCAoSGVhZC0+U2lnbmF0dXJlID09IFBPT0xfSEVBRF9TSUdOQVRVUkUg fHwNCj4gPiArICAgICAgICAgICAgSGVhZC0+U2lnbmF0dXJlID09IFBPT0xQQUdFX0hFQURfU0lH TkFUVVJFKTsNCj4gPiAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAg ICB9DQo+ID4NCj4gPiBAQCAtNzAxLDYgKzcwOSw3IEBAIENvcmVGcmVlUG9vbEkgKA0KPiA+ICAg ICAgICAgICAgICAgICAgIElzTWVtb3J5R3VhcmRlZCAoKEVGSV9QSFlTSUNBTF9BRERSRVNTKShV SU5UTilIZWFkKTsNCj4gPiAgICAgSGFzUG9vbFRhaWwgPSAhKElzR3VhcmRlZCAmJg0KPiA+ICAg ICAgICAgICAgICAgICAgICAgKChQY2RHZXQ4IChQY2RIZWFwR3VhcmRQcm9wZXJ0eU1hc2spICYg QklUNykgPT0gMCkpOw0KPiA+ICsgIFBhZ2VBc1Bvb2wgPSAoSGVhZC0+U2lnbmF0dXJlID09IFBP T0xQQUdFX0hFQURfU0lHTkFUVVJFKTsNCj4gPg0KPiA+ICAgICBpZiAoSGFzUG9vbFRhaWwpIHsN Cj4gPiAgICAgICBUYWlsID0gSEVBRF9UT19UQUlMIChIZWFkKTsNCj4gPiBAQCAtNzU3LDcgKzc2 Niw3IEBAIENvcmVGcmVlUG9vbEkgKA0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBJZiBpdCdzIG5v dCBvbiB0aGUgbGlzdCwgaXQgbXVzdCBiZSBwb29sIHBhZ2VzDQo+ID4gICAgIC8vDQo+ID4gLSAg aWYgKEluZGV4ID49IFNJWkVfVE9fTElTVCAoR3JhbnVsYXJpdHkpIHx8IElzR3VhcmRlZCkgew0K PiA+ICsgIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdyYW51bGFyaXR5KSB8fCBJc0d1YXJk ZWQgfHwgUGFnZUFzUG9vbCkgew0KPiA+DQo+ID4gICAgICAgLy8NCj4gPiAgICAgICAvLyBSZXR1 cm4gdGhlIG1lbW9yeSBwYWdlcyBiYWNrIHRvIGZyZWUgbWVtb3J5DQo+ID4gZGlmZiAtLWdpdCBh L01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL01lbW9yeVByb3RlY3Rpb24uYw0KPiBiL01kZU1v ZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL01lbW9yeVByb3RlY3Rpb24uYw0KPiA+IGluZGV4IGZhOGY4 ZmU5MWEuLjYyOThiNjdkYjEgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhl L01pc2MvTWVtb3J5UHJvdGVjdGlvbi5jDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhl L01pc2MvTWVtb3J5UHJvdGVjdGlvbi5jDQo+ID4gQEAgLTEyNTAsNyArMTI1MCw3IEBAIEFwcGx5 TWVtb3J5UHJvdGVjdGlvblBvbGljeSAoDQo+ID4gICAgIC8vIERvbid0IG92ZXJ3cml0ZSBHdWFy ZCBwYWdlcywgd2hpY2ggc2hvdWxkIGJlIHRoZSBmaXJzdCBhbmQvb3IgbGFzdCBwYWdlLA0KPiA+ ICAgICAvLyBpZiBhbnkuDQo+ID4gICAgIC8vDQo+ID4gLSAgaWYgKElzSGVhcEd1YXJkRW5hYmxl ZCAoKSkgew0KPiA+ICsgIGlmIChJc0hlYXBHdWFyZEVuYWJsZWQNCj4gKEdVQVJEX0hFQVBfVFlQ RV9QQUdFfEdVQVJEX0hFQVBfVFlQRV9QT09MKSkgew0KPiA+ICAgICAgIGlmIChJc0d1YXJkUGFn ZSAoTWVtb3J5KSkgIHsNCj4gPiAgICAgICAgIE1lbW9yeSArPSBFRklfUEFHRV9TSVpFOw0KPiA+ ICAgICAgICAgTGVuZ3RoIC09IEVGSV9QQUdFX1NJWkU7DQo+ID4gZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL1Byb3BlcnRpZXNUYWJsZS5jDQo+IGIvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL01pc2MvUHJvcGVydGllc1RhYmxlLmMNCj4gPiBpbmRleCAwNWViNGY0MjJiLi4w NGNmYjJkYWIyIDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL1By b3BlcnRpZXNUYWJsZS5jDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01pc2MvUHJv cGVydGllc1RhYmxlLmMNCj4gPiBAQCAtMSw3ICsxLDcgQEANCj4gPiAgIC8qKiBAZmlsZQ0KPiA+ ICAgICBVRUZJIFByb3BlcnRpZXNUYWJsZSBzdXBwb3J0DQo+ID4NCj4gPiAtQ29weXJpZ2h0IChj KSAyMDE1IC0gMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KPiA+ICtDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+ID4gICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+IExpY2Vuc2UNCj4gPiAg IHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0 aGUgbGljZW5zZSBtYXkgYmUgZm91bmQNCj4gYXQNCj4gPiBAQCAtMzIsNiArMzIsNyBAQCBXSVRI T1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWQ0KPiBLSU5ELCBFSVRIRVIg RVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ICAgI2luY2x1ZGUgPEd1aWQvUHJvcGVydGllc1RhYmxl Lmg+DQo+ID4NCj4gPiAgICNpbmNsdWRlICJEeGVNYWluLmgiDQo+ID4gKyNpbmNsdWRlICJIZWFw R3VhcmQuaCINCj4gPg0KPiA+ICAgI2RlZmluZSBQUkVWSU9VU19NRU1PUllfREVTQ1JJUFRPUihN ZW1vcnlEZXNjcmlwdG9yLCBTaXplKSBcDQo+ID4gICAgICgoRUZJX01FTU9SWV9ERVNDUklQVE9S ICopKChVSU5UOCAqKShNZW1vcnlEZXNjcmlwdG9yKSAtIChTaXplKSkpDQo+ID4gQEAgLTIwNSwx NiArMjA2LDEzIEBAIE1lcmdlTWVtb3J5TWFwICgNCj4gPiAgICAgICBOZXh0TWVtb3J5TWFwRW50 cnkgPSBORVhUX01FTU9SWV9ERVNDUklQVE9SIChNZW1vcnlNYXBFbnRyeSwNCj4gRGVzY3JpcHRv clNpemUpOw0KPiA+DQo+ID4gICAgICAgZG8gew0KPiA+IC0gICAgICBNZW1vcnlCbG9ja0xlbmd0 aCA9IChVSU5UNjQpIChFZmlQYWdlc1RvU2l6ZSAoTWVtb3J5TWFwRW50cnktDQo+ID5OdW1iZXJP ZlBhZ2VzKSk7DQo+ID4gKyAgICAgIE1lcmdlR3VhcmRQYWdlcyAoTmV3TWVtb3J5TWFwRW50cnks IE5leHRNZW1vcnlNYXBFbnRyeS0NCj4gPlBoeXNpY2FsU3RhcnQpOw0KPiA+ICsgICAgICBNZW1v cnlCbG9ja0xlbmd0aCA9IChVSU5UNjQpIChFZmlQYWdlc1RvU2l6ZSAoTmV3TWVtb3J5TWFwRW50 cnktDQo+ID5OdW1iZXJPZlBhZ2VzKSk7DQo+ID4gICAgICAgICBpZiAoKChVSU5UTilOZXh0TWVt b3J5TWFwRW50cnkgPCAoVUlOVE4pTWVtb3J5TWFwRW5kKSAmJg0KPiA+IC0gICAgICAgICAgKE1l bW9yeU1hcEVudHJ5LT5UeXBlID09IE5leHRNZW1vcnlNYXBFbnRyeS0+VHlwZSkgJiYNCj4gPiAt ICAgICAgICAgIChNZW1vcnlNYXBFbnRyeS0+QXR0cmlidXRlID09IE5leHRNZW1vcnlNYXBFbnRy eS0+QXR0cmlidXRlKSAmJg0KPiA+IC0gICAgICAgICAgKChNZW1vcnlNYXBFbnRyeS0+UGh5c2lj YWxTdGFydCArIE1lbW9yeUJsb2NrTGVuZ3RoKSA9PQ0KPiBOZXh0TWVtb3J5TWFwRW50cnktPlBo eXNpY2FsU3RhcnQpKSB7DQo+ID4gLSAgICAgICAgTWVtb3J5TWFwRW50cnktPk51bWJlck9mUGFn ZXMgKz0gTmV4dE1lbW9yeU1hcEVudHJ5LQ0KPiA+TnVtYmVyT2ZQYWdlczsNCj4gPiAtICAgICAg ICBpZiAoTmV3TWVtb3J5TWFwRW50cnkgIT0gTWVtb3J5TWFwRW50cnkpIHsNCj4gPiAtICAgICAg ICAgIE5ld01lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzICs9IE5leHRNZW1vcnlNYXBFbnRy eS0NCj4gPk51bWJlck9mUGFnZXM7DQo+ID4gLSAgICAgICAgfQ0KPiA+IC0NCj4gPiArICAgICAg ICAgIChOZXdNZW1vcnlNYXBFbnRyeS0+VHlwZSA9PSBOZXh0TWVtb3J5TWFwRW50cnktPlR5cGUp ICYmDQo+ID4gKyAgICAgICAgICAoTmV3TWVtb3J5TWFwRW50cnktPkF0dHJpYnV0ZSA9PSBOZXh0 TWVtb3J5TWFwRW50cnktPkF0dHJpYnV0ZSkNCj4gJiYNCj4gPiArICAgICAgICAgICgoTmV3TWVt b3J5TWFwRW50cnktPlBoeXNpY2FsU3RhcnQgKyBNZW1vcnlCbG9ja0xlbmd0aCkgPT0NCj4gTmV4 dE1lbW9yeU1hcEVudHJ5LT5QaHlzaWNhbFN0YXJ0KSkgew0KPiA+ICsgICAgICAgIE5ld01lbW9y eU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzICs9IE5leHRNZW1vcnlNYXBFbnRyeS0NCj4gPk51bWJl ck9mUGFnZXM7DQo+ID4gICAgICAgICAgIE5leHRNZW1vcnlNYXBFbnRyeSA9IE5FWFRfTUVNT1JZ X0RFU0NSSVBUT1INCj4gKE5leHRNZW1vcnlNYXBFbnRyeSwgRGVzY3JpcHRvclNpemUpOw0KPiA+ ICAgICAgICAgICBjb250aW51ZTsNCj4gPiAgICAgICAgIH0gZWxzZSB7DQo+ID4NCg0K