From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.65; helo=mga03.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 1D5A321C8EFB5 for ; Wed, 24 Oct 2018 23:28:20 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Oct 2018 23:28:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,423,1534834800"; d="scan'208";a="103128342" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga002.jf.intel.com with ESMTP; 24 Oct 2018 23:28:19 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 24 Oct 2018 23:28:18 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.161]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.102]) with mapi id 14.03.0415.000; Thu, 25 Oct 2018 14:28:15 +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 v3 6/6] MdeModulePkg/Core: add freed-memory guard feature Thread-Index: AQHUa1pI52SWoNQrbUWPAh41QE5L+qUuy0UAgACz+6A= Date: Thu, 25 Oct 2018 06:28:15 +0000 Message-ID: References: <20181024052620.4088-1-jian.j.wang@intel.com> <20181024052620.4088-7-jian.j.wang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjVjOTlmMDEtOGM0YS00MTE1LThlMmItMWY1YjdmN2VkZDcwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiR01aa1psWWhLejJqdCtlc1pENllFWVVBQWVwK1hjOXZZXC9LMTdHVUVtSW4yMFRub1dRMTdFSlgxaU1vMFZET0kifQ== 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 v3 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: Thu, 25 Oct 2018 06:28:20 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U3RhciwNCg0KSSB0aGluayB0aGUgQ29yZUdldE1lbW9yeVNwYWNlRGVzY3JpcHRvcigpIGNhbiBn ZXQgdGhlIG1lbW9yeSBjYXBhYmlsaXRpZXMuIFNvDQp3ZSBjYW4gcmVtb3ZlIHRob3NlIGhhcmQt Y29kZWQgb25lcy4gSW4gYWRkaXRpb24sIHNpbmNlIENvcmVBZGRSYW5nZSgpIGRvZXNuJ3QNCnRv dWNoIG1HY2RNZW1vcnlTcGFjZU1hcCwgQ29yZUFjcXVpcmVHY2RNZW1vcnlMb2NrIGFuZA0KQ29y ZVJlbGVhc2VHY2RNZW1vcnlMb2NrIGFyZSBub3QgbmVjZXNzYXJ5IHRvIHByb3RlY3QgQ29yZUFk ZFJhbmdlKCkuIEknbGwNCmRyb3AgdGhlbSBhcyB3ZWxsLg0KDQpSZWdhcmRzLA0KSmlhbg0KDQoN Cj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWmVuZywgU3Rhcg0KPiBTZW50 OiBUaHVyc2RheSwgT2N0b2JlciAyNSwgMjAxOCAxMTozNyBBTQ0KPiBUbzogV2FuZywgSmlhbiBK IDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzog S2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgTmksIFJ1aXl1 DQo+IDxydWl5dS5uaUBpbnRlbC5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5j b20+OyBMYXN6bG8gRXJzZWsNCj4gPGxlcnNla0ByZWRoYXQuY29tPjsgWmVuZywgU3RhciA8c3Rh ci56ZW5nQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggdjMgNi82XSBN ZGVNb2R1bGVQa2cvQ29yZTogYWRkIGZyZWVkLW1lbW9yeQ0KPiBndWFyZCBmZWF0dXJlDQo+IA0K PiBPbiAyMDE4LzEwLzI0IDEzOjI2LCBKaWFuIEogV2FuZyB3cm90ZToNCj4gPj4gdjMgY2hhbmdl czoNCj4gPj4gYS4gTWVyZ2UgZnJvbSAjNCBhbmQgIzUgb2YgdjIgcGF0Y2gNCj4gPj4gYi4gQ29k aW5nIHN0eWxlIGNsZWFudXANCj4gPg0KPiA+IEZyZWVkLW1lbW9yeSBndWFyZCBpcyB1c2VkIHRv IGRldGVjdCBVQUYgKFVzZS1BZnRlci1GcmVlKSBtZW1vcnkgaXNzdWUNCj4gPiB3aGljaCBpcyBp bGxlZ2FsIGFjY2VzcyB0byBtZW1vcnkgd2hpY2ggaGFzIGJlZW4gZnJlZWQuIFRoZSBwcmluY2lw bGUNCj4gPiBiZWhpbmQgaXMgc2ltaWxhciB0byBoZWFwIGd1YXJkIGZlYXR1cmUsIHRoYXQgaXMg d2UnbGwgdHVybiBhbGwgcG9vbA0KPiANCj4gU2luY2Ugd2UgYWxzbyByZWdhcmQgVUFGIHBhcnQg b2YgaGVhcCBndWFyZCBmZWF0dXJlLCBiZXR0ZXIgdG8gdXNlDQo+ICJwb29sL3BhZ2UgaGVhcCBn dWFyZCBmZWF0dXJlIiBpbnN0ZWFkIG9mICJoZWFwIGd1YXJkIGZlYXR1cmUiIGhlcmUuDQo+IA0K PiBJIHF1b3RlZCBhIHBpZWNlIG9mIGNvZGUgYXQgYmVsb3cgYW5kIGhhdmUgcXVlc3Rpb24gdGhh dCB3aHkgaXQgdXNlcw0KPiBoYXJkIGNvZGUgQXR0cmlidXRlIHBhcmFtZXRlcj8NCj4gDQo+ICsg ICAgICBDb3JlQWRkUmFuZ2UgKA0KPiArICAgICAgICBFZmlDb252ZW50aW9uYWxNZW1vcnksDQo+ ICsgICAgICAgIFN0YXJ0QWRkcmVzcywNCj4gKyAgICAgICAgRW5kQWRkcmVzcywNCj4gKyAgICAg ICAgRUZJX01FTU9SWV9VQyB8IEVGSV9NRU1PUllfV0MgfCBFRklfTUVNT1JZX1dUIHwNCj4gRUZJ X01FTU9SWV9XQg0KPiArICAgICAgICApOw0KPiANCj4gVGhhbmtzLA0KPiBTdGFyDQo+IA0KPiA+ IG1lbW9yeSBhbGxvY2F0aW9uIHRvIHBhZ2UgYWxsb2NhdGlvbiBhbmQgbWFyayB0aGVtIHRvIGJl IG5vdC1wcmVzZW50DQo+ID4gb25jZSB0aGV5IGFyZSBmcmVlZC4gVGhlIGZyZWVkIG1lbW9yeSBi bG9jayB3aWxsIG5vdCBiZSBhZGRlZCBiYWNrIGludG8NCj4gPiBtZW1vcnkgcG9vbC4NCj4gPg0K PiA+IFRoaXMgbWVhbnMgdGhhdCwgb25jZSBhIHBhZ2UgaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCwg aXQgY2Fubm90IGJlDQo+ID4gcmUtYWxsb2NhdGVkLiBUaGlzIHdpbGwgYnJpbmcgYW4gaXNzdWUs IHdoaWNoIGlzIHRoYXQgdGhlcmUncw0KPiA+IHJpc2sgdGhhdCBtZW1vcnkgc3BhY2Ugd2lsbCBi ZSB1c2VkIG91dC4gVG8gYWRkcmVzcyBpdCwgdGhlIG1lbW9yeQ0KPiA+IHNlcnZpY2UgYWRkIGxv Z2ljIHRvIHB1dCBwYXJ0IChhdCBtb3N0IDY0IHBhZ2VzIGEgdGltZSkgb2YgZnJlZWQgcGFnZXMN Cj4gPiBiYWNrIGludG8gcGFnZSBwb29sLCBzbyB0aGF0IHRoZSBtZW1vcnkgc2VydmljZSBjYW4g c3RpbGwgaGF2ZSBtZW1vcnkNCj4gPiB0byBhbGxvY2F0ZSwgd2hlbiBhbGwgbWVtb3J5IHNwYWNl IGhhdmUgYmVlbiBhbGxvY2F0ZWQgb25jZS4gVGhpcyBpcw0KPiA+IGNhbGxlZCBtZW1vcnkgcHJv bW90aW9uLiBUaGUgcHJvbW90ZWQgcGFnZXMgYXJlIGFsd2F5cyBmcm9tIHRoZSBlbGRlc3QNCj4g PiBwYWdlcyB3aGljaCBoYXZlbiBiZWVuIGZyZWVkLg0KPiA+DQo+ID4gVGhpcyBmZWF0dXJlIGJy aW5ncyBhbm90aGVyIHByb2JsZW0gaXMgdGhhdCBtZW1vcnkgbWFwIGRlc2NyaXB0b3JzIHdpbGwN Cj4gPiBiZSBpbmNyZWFzZWQgZW5vcm1vdXNseSAoMjAwKyAtPiAyMDAwKykuIE9uZSBvZiBjaGFu Z2UgaW4gdGhpcyBwYXRjaA0KPiA+IGlzIHRvIHVwZGF0ZSBNZXJnZU1lbW9yeU1hcCgpIGluIGZp bGUgUHJvcGVydGllc1RhYmxlLmMgdG8gYWxsb3cgbWVyZ2UNCj4gPiBmcmVlZCBwYWdlcyBiYWNr IGludG8gdGhlIG1lbW9yeSBtYXAuIE5vdyB0aGUgbnVtYmVyIGNhbiBzdGF5IGF0IGFyb3VuZA0K PiA+IDUxMC4NCj4gPg0KPiA+IENjOiBTdGFyIFplbmcgPHN0YXIuemVuZ0BpbnRlbC5jb20+DQo+ ID4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+ IENjOiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiBDYzogUnVpeXUgTmkg PHJ1aXl1Lm5pQGludGVsLmNvbT4NCj4gPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0 LmNvbT4NCj4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3Jl ZW1lbnQgMS4xDQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhbiBKIFdhbmcgPGppYW4uai53YW5nQGlu dGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1 YXJkLmMgICAgICAgICB8IDQwOQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICAg TWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaCAgICAgICAgIHwgIDY1ICsrKy0N Cj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5jICAgICAgICAgICAgICB8ICA0 MSArKy0NCj4gPiAgIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUG9vbC5jICAgICAgICAgICAg ICB8ICAyMyArLQ0KPiA+ICAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01pc2MvTWVtb3J5UHJvdGVj dGlvbi5jIHwgICAyICstDQo+ID4gICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9Qcm9wZXJ0 aWVzVGFibGUuYyAgfCAgMTggKy0NCj4gPiAgIDYgZmlsZXMgY2hhbmdlZCwgNTI0IGluc2VydGlv bnMoKyksIDM0IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBr Zy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVt L0hlYXBHdWFyZC5jDQo+ID4gaW5kZXggNjYzZjk2OWMwZC4uNDQ5YTAyMjY1OCAxMDA2NDQNCj4g PiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jDQo+ID4gKysrIGIv TWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuYw0KPiA+IEBAIC00NCw2ICs0NCwx MSBAQCBHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBVSU5UTg0KPiBtTGV2ZWxTaGlmdFtH VUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXQ0KPiA+ICAgR0xPQkFMX1JFTU9WRV9JRl9VTlJF RkVSRU5DRUQgVUlOVE4NCj4gbUxldmVsTWFza1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRI XQ0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBHVUFSREVEX0hF QVBfTUFQX1RBQkxFX0RFUFRIX01BU0tTOw0KPiA+DQo+ID4gKy8vDQo+ID4gKy8vIFVzZWQgZm9y IHByb21vdGluZyBmcmVlZCBidXQgbm90IHVzZWQgcGFnZXMuDQo+ID4gKy8vDQo+ID4gK0dMT0JB TF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9QSFlTSUNBTF9BRERSRVNTDQo+IG1MYXN0UHJv bW90ZWRQYWdlID0gQkFTRV80R0I7DQo+ID4gKw0KPiA+ICAgLyoqDQo+ID4gICAgIFNldCBjb3Jy ZXNwb25kaW5nIGJpdHMgaW4gYml0bWFwIHRhYmxlIHRvIDEgYWNjb3JkaW5nIHRvIHRoZSBhZGRy ZXNzLg0KPiA+DQo+ID4gQEAgLTM3OSw3ICszODQsNyBAQCBDbGVhckd1YXJkZWRNZW1vcnlCaXRz ICgNCj4gPg0KPiA+ICAgICBAcmV0dXJuIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgZ3VhcmRl ZCBtZW1vcnkgYml0bWFwLg0KPiA+ICAgKiovDQo+ID4gLVVJTlRODQo+ID4gK1VJTlQ2NA0KPiA+ ICAgR2V0R3VhcmRlZE1lbW9yeUJpdHMgKA0KPiA+ICAgICBJTiBFRklfUEhZU0lDQUxfQUREUkVT UyAgICBBZGRyZXNzLA0KPiA+ICAgICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICBOdW1iZXJP ZlBhZ2VzDQo+ID4gQEAgLTM4Nyw3ICszOTIsNyBAQCBHZXRHdWFyZGVkTWVtb3J5Qml0cyAoDQo+ ID4gICB7DQo+ID4gICAgIFVJTlQ2NCAgICAgICAgICAgICpCaXRNYXA7DQo+ID4gICAgIFVJTlRO ICAgICAgICAgICAgIEJpdHM7DQo+ID4gLSAgVUlOVE4gICAgICAgICAgICAgUmVzdWx0Ow0KPiA+ ICsgIFVJTlQ2NCAgICAgICAgICAgIFJlc3VsdDsNCj4gPiAgICAgVUlOVE4gICAgICAgICAgICAg U2hpZnQ7DQo+ID4gICAgIFVJTlROICAgICAgICAgICAgIEJpdHNUb1VuaXRFbmQ7DQo+ID4NCj4g PiBAQCAtNjYwLDE1ICs2NjUsMTYgQEAgSXNQYWdlVHlwZVRvR3VhcmQgKA0KPiA+ICAgLyoqDQo+ ID4gICAgIENoZWNrIHRvIHNlZSBpZiB0aGUgaGVhcCBndWFyZCBpcyBlbmFibGVkIGZvciBwYWdl IGFuZC9vciBwb29sIGFsbG9jYXRpb24uDQo+ID4NCj4gPiArICBAcGFyYW1baW5dICBHdWFyZFR5 cGUgICBTcGVjaWZ5IHRoZSBzdWItdHlwZShzKSBvZiBIZWFwIEd1YXJkLg0KPiA+ICsNCj4gPiAg ICAgQHJldHVybiBUUlVFL0ZBTFNFLg0KPiA+ICAgKiovDQo+ID4gICBCT09MRUFODQo+ID4gICBJ c0hlYXBHdWFyZEVuYWJsZWQgKA0KPiA+IC0gIFZPSUQNCj4gPiArICBVSU5UOCAgICAgICAgICAg R3VhcmRUeXBlDQo+ID4gICAgICkNCj4gPiAgIHsNCj4gPiAtICByZXR1cm4gSXNNZW1vcnlUeXBl VG9HdWFyZCAoRWZpTWF4TWVtb3J5VHlwZSwgQWxsb2NhdGVBbnlQYWdlcywNCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1VBUkRfSEVBUF9UWVBFX1BPT0x8R1VBUkRfSEVBUF9U WVBFX1BBR0UpOw0KPiA+ICsgIHJldHVybiBJc01lbW9yeVR5cGVUb0d1YXJkIChFZmlNYXhNZW1v cnlUeXBlLCBBbGxvY2F0ZUFueVBhZ2VzLA0KPiBHdWFyZFR5cGUpOw0KPiA+ICAgfQ0KPiA+DQo+ ID4gICAvKioNCj4gPiBAQCAtMTIwMyw2ICsxMjA5LDM4MCBAQCBTZXRBbGxHdWFyZFBhZ2VzICgN Cj4gPiAgICAgfQ0KPiA+ICAgfQ0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgIEZpbmQgdGhlIGFkZHJl c3Mgb2YgdG9wLW1vc3QgZ3VhcmRlZCBmcmVlIHBhZ2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtv dXRdICBBZGRyZXNzICAgIFN0YXJ0IGFkZHJlc3Mgb2YgdG9wLW1vc3QgZ3VhcmRlZCBmcmVlIHBh Z2UuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9JRC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4g PiArR2V0TGFzdEd1YXJkZWRGcmVlUGFnZUFkZHJlc3MgKA0KPiA+ICsgIE9VVCBFRklfUEhZU0lD QUxfQUREUkVTUyAgICAgICpBZGRyZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgQWRkcmVzc0dyYW51bGFyaXR5Ow0KPiA+ICsgIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgIEJhc2VBZGRyZXNzOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg IExldmVsOw0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgIE1hcDsNCj4gPiArICBJTlRO ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArDQo+ID4gKyAgQVNTRVJUIChtTWFwTGV2 ZWwgPj0gMSk7DQo+ID4gKw0KPiA+ICsgIEJhc2VBZGRyZXNzID0gMDsNCj4gPiArICBNYXAgPSBt R3VhcmRlZE1lbW9yeU1hcDsNCj4gPiArICBmb3IgKExldmVsID0gR1VBUkRFRF9IRUFQX01BUF9U QUJMRV9ERVBUSCAtIG1NYXBMZXZlbDsNCj4gPiArICAgICAgIExldmVsIDwgR1VBUkRFRF9IRUFQ X01BUF9UQUJMRV9ERVBUSDsNCj4gPiArICAgICAgICsrTGV2ZWwpIHsNCj4gPiArICAgIEFkZHJl c3NHcmFudWxhcml0eSA9IExTaGlmdFU2NCAoMSwgbUxldmVsU2hpZnRbTGV2ZWxdKTsNCj4gPiAr DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gRmluZCB0aGUgbm9uLU5VTEwgZW50cnkgYXQgbGFy Z2VzdCBpbmRleC4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBmb3IgKEluZGV4ID0gKElOVE4pbUxl dmVsTWFza1tMZXZlbF07IEluZGV4ID49IDAgOyAtLUluZGV4KSB7DQo+ID4gKyAgICAgIGlmICgo KFVJTlQ2NCAqKShVSU5UTilNYXApW0luZGV4XSAhPSAwKSB7DQo+ID4gKyAgICAgICAgQmFzZUFk ZHJlc3MgKz0gTXVsdFU2NHgzMiAoQWRkcmVzc0dyYW51bGFyaXR5LCAoVUlOVDMyKUluZGV4KTsN Cj4gPiArICAgICAgICBNYXAgPSAoKFVJTlQ2NCAqKShVSU5UTilNYXApW0luZGV4XTsNCj4gPiAr ICAgICAgICBicmVhazsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBGaW5kIHRoZSBub24temVybyBNU0IgdGhlbiBnZXQgdGhl IHBhZ2UgYWRkcmVzcy4NCj4gPiArICAvLw0KPiA+ICsgIHdoaWxlIChNYXAgIT0gMCkgew0KPiA+ ICsgICAgTWFwID0gUlNoaWZ0VTY0IChNYXAsIDEpOw0KPiA+ICsgICAgQmFzZUFkZHJlc3MgKz0g RUZJX1BBR0VTX1RPX1NJWkUgKDEpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgKkFkZHJlc3Mg PSBCYXNlQWRkcmVzczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVjb3JkIGZy ZWVkIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBCYXNlQWRkcmVzcyAgIEJhc2Ug YWRkcmVzcyBvZiBqdXN0IGZyZWVkIHBhZ2VzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBhZ2VzICAg ICAgICAgTnVtYmVyIG9mIGZyZWVkIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQu DQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK01hcmtGcmVlZFBhZ2VzICgNCj4gPiArICBJTiBF RklfUEhZU0lDQUxfQUREUkVTUyAgICAgQmFzZUFkZHJlc3MsDQo+ID4gKyAgSU4gVUlOVE4gICAg ICAgICAgICAgICAgICAgIFBhZ2VzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgU2V0R3VhcmRl ZE1lbW9yeUJpdHMgKEJhc2VBZGRyZXNzLCBQYWdlcyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFJlY29yZCBmcmVlZCBwYWdlcyBhcyB3ZWxsIGFzIG1hcmsgdGhlbSBhcyBub3Qt cHJlc2VudC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJlc3MgICBCYXNlIGFk ZHJlc3Mgb2YganVzdCBmcmVlZCBwYWdlcy4NCj4gPiArICBAcGFyYW1baW5dICBQYWdlcyAgICAg ICAgIE51bWJlciBvZiBmcmVlZCBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lELg0K PiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArR3VhcmRGcmVlZFBhZ2VzICgN Cj4gPiArICBJTiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQmFzZUFkZHJlc3MsDQo+ID4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgIFBhZ2VzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBM ZWdhY3kgbWVtb3J5IGxvd2VyIHRoYW4gMU1CIG1pZ2h0IGJlIGFjY2Vzc2VkIHdpdGggbm8gYWxs b2NhdGlvbi4NCj4gTGVhdmUNCj4gPiArICAvLyB0aGVtIGFsb25lLg0KPiA+ICsgIC8vDQo+ID4g KyAgaWYgKEJhc2VBZGRyZXNzIDwgQkFTRV8xTUIpIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIE1hcmtGcmVlZFBhZ2VzIChCYXNlQWRkcmVzcywgUGFnZXMpOw0K PiA+ICsgIGlmIChnQ3B1ICE9IE5VTEwpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBTZXQg ZmxhZyB0byBtYWtlIHN1cmUgYWxsb2NhdGluZyBtZW1vcnkgd2l0aG91dCBHVUFSRCBmb3IgcGFn ZSB0YWJsZQ0KPiA+ICsgICAgLy8gb3BlcmF0aW9uOyBvdGhlcndpc2UgaW5maW5pdGUgbG9vcHMg Y291bGQgYmUgY2F1c2VkLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIG1Pbkd1YXJkaW5nID0gVFJV RTsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBOb3RlOiBUaGlzIG1pZ2h0IG92ZXJ3cml0ZSBv dGhlciBhdHRyaWJ1dGVzIG5lZWRlZCBieSBvdGhlciBmZWF0dXJlcywNCj4gPiArICAgIC8vIHN1 Y2ggYXMgTlggbWVtb3J5IHByb3RlY3Rpb24uDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgU3RhdHVz ID0gZ0NwdS0+U2V0TWVtb3J5QXR0cmlidXRlcyAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGdDcHUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIEJhc2VBZGRyZXNzLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBFRklfUEFHRVNfVE9fU0laRSAoUGFnZXMpLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBFRklfTUVNT1JZX1JQDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICk7 DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTm9ybWFsbHkgd2Ugc2hvdWxkIEFTU0VSVCB0aGUg cmV0dXJuZWQgU3RhdHVzLiBCdXQgdGhlcmUgbWlnaHQgYmUNCj4gbWVtb3J5DQo+ID4gKyAgICAv LyBhbGxvYy9mcmVlIGludm9sdmVkIGluIFNldE1lbW9yeUF0dHJpYnV0ZXMoKSwgd2hpY2ggbWln aHQgZmFpbCB0aGlzDQo+ID4gKyAgICAvLyBjYWxsaW5nLiBJdCdzIHJhcmUgY2FzZSBzbyBpdCdz IE9LIHRvIGxldCBhIGZldyB0aW55IGhvbGVzIGJlIG5vdC1ndWFyZGVkLg0KPiA+ICsgICAgLy8N Cj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgREVCVUcgKChE RUJVR19XQVJOLCAiRmFpbGVkIHRvIGd1YXJkIGZyZWVkIHBhZ2VzOiAlcCAoJWx1KVxuIiwNCj4g QmFzZUFkZHJlc3MsIChVSU5UNjQpUGFnZXMpKTsNCj4gPiArICAgIH0NCj4gPiArICAgIG1Pbkd1 YXJkaW5nID0gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBSZWNvcmQgZnJlZWQgcGFnZXMgYXMgd2VsbCBhcyBtYXJrIHRoZW0gYXMgbm90LXByZXNlbnQs IGlmIGVuYWJsZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNzICAgQmFz ZSBhZGRyZXNzIG9mIGp1c3QgZnJlZWQgcGFnZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAgUGFnZXMg ICAgICAgICBOdW1iZXIgb2YgZnJlZWQgcGFnZXMuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9J RC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0d1YXJkRnJlZWRQYWdl c0NoZWNrZWQgKA0KPiA+ICsgIElOICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBCYXNlQWRkcmVz cywNCj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgUGFnZXMNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBpZiAoSXNIZWFwR3VhcmRFbmFibGVkIChHVUFSRF9IRUFQX1RZUEVfRlJF RUQpKSB7DQo+ID4gKyAgICBHdWFyZEZyZWVkUGFnZXMgKEJhc2VBZGRyZXNzLCBQYWdlcyk7DQo+ ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBNYXJrIGFsbCBwYWdlcyBm cmVlZCBiZWZvcmUgQ1BVIEFyY2ggUHJvdG9jb2wgYXMgbm90LXByZXNlbnQuDQo+ID4gKw0KPiA+ ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtHdWFyZEFsbEZyZWVkUGFnZXMgKA0KPiA+ICsgIFZPSUQN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiAgICAgRW50cmllc1tHVUFSREVEX0hFQVBf TUFQX1RBQkxFX0RFUFRIXTsNCj4gPiArICBVSU5UTiAgICAgU2hpZnRzW0dVQVJERURfSEVBUF9N QVBfVEFCTEVfREVQVEhdOw0KPiA+ICsgIFVJTlROICAgICBJbmRpY2VzW0dVQVJERURfSEVBUF9N QVBfVEFCTEVfREVQVEhdOw0KPiA+ICsgIFVJTlQ2NCAgICBUYWJsZXNbR1VBUkRFRF9IRUFQX01B UF9UQUJMRV9ERVBUSF07DQo+ID4gKyAgVUlOVDY0ICAgIEFkZHJlc3Nlc1tHVUFSREVEX0hFQVBf TUFQX1RBQkxFX0RFUFRIXTsNCj4gPiArICBVSU5UNjQgICAgVGFibGVFbnRyeTsNCj4gPiArICBV SU5UNjQgICAgQWRkcmVzczsNCj4gPiArICBVSU5UNjQgICAgR3VhcmRQYWdlOw0KPiA+ICsgIElO VE4gICAgICBMZXZlbDsNCj4gPiArICBVSU5UTiAgICAgQml0SW5kZXg7DQo+ID4gKyAgVUlOVE4g ICAgIEd1YXJkUGFnZU51bWJlcjsNCj4gPiArDQo+ID4gKyAgaWYgKG1HdWFyZGVkTWVtb3J5TWFw ID09IDAgfHwNCj4gPiArICAgICAgbU1hcExldmVsID09IDAgfHwNCj4gPiArICAgICAgbU1hcExl dmVsID4gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSCkgew0KPiA+ICsgICAgcmV0dXJuOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQ29weU1lbSAoRW50cmllcywgbUxldmVsTWFzaywgc2l6 ZW9mIChFbnRyaWVzKSk7DQo+ID4gKyAgQ29weU1lbSAoU2hpZnRzLCBtTGV2ZWxTaGlmdCwgc2l6 ZW9mIChTaGlmdHMpKTsNCj4gPiArDQo+ID4gKyAgU2V0TWVtIChUYWJsZXMsIHNpemVvZihUYWJs ZXMpLCAwKTsNCj4gPiArICBTZXRNZW0gKEFkZHJlc3Nlcywgc2l6ZW9mKEFkZHJlc3NlcyksIDAp Ow0KPiA+ICsgIFNldE1lbSAoSW5kaWNlcywgc2l6ZW9mKEluZGljZXMpLCAwKTsNCj4gPiArDQo+ ID4gKyAgTGV2ZWwgICAgICAgICAgID0gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSCAtIG1N YXBMZXZlbDsNCj4gPiArICBUYWJsZXNbTGV2ZWxdICAgPSBtR3VhcmRlZE1lbW9yeU1hcDsNCj4g PiArICBBZGRyZXNzICAgICAgICAgPSAwOw0KPiA+ICsgIEd1YXJkUGFnZSAgICAgICA9IChVSU5U NjQpLTE7DQo+ID4gKyAgR3VhcmRQYWdlTnVtYmVyID0gMDsNCj4gPiArDQo+ID4gKyAgd2hpbGUg KFRSVUUpIHsNCj4gPiArICAgIGlmIChJbmRpY2VzW0xldmVsXSA+IEVudHJpZXNbTGV2ZWxdKSB7 DQo+ID4gKyAgICAgIFRhYmxlc1tMZXZlbF0gPSAwOw0KPiA+ICsgICAgICBMZXZlbCAgICAgICAg LT0gMTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIFRhYmxlRW50cnkgID0gKChVSU5U NjQgKikoVUlOVE4pKFRhYmxlc1tMZXZlbF0pKVtJbmRpY2VzW0xldmVsXV07DQo+ID4gKyAgICAg IEFkZHJlc3MgICAgID0gQWRkcmVzc2VzW0xldmVsXTsNCj4gPiArDQo+ID4gKyAgICAgIGlmIChM ZXZlbCA8IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEggLSAxKSB7DQo+ID4gKyAgICAgICAg TGV2ZWwgICAgICAgICAgICArPSAxOw0KPiA+ICsgICAgICAgIFRhYmxlc1tMZXZlbF0gICAgID0g VGFibGVFbnRyeTsNCj4gPiArICAgICAgICBBZGRyZXNzZXNbTGV2ZWxdICA9IEFkZHJlc3M7DQo+ ID4gKyAgICAgICAgSW5kaWNlc1tMZXZlbF0gICAgPSAwOw0KPiA+ICsNCj4gPiArICAgICAgICBj b250aW51ZTsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBCaXRJbmRleCA9IDE7 DQo+ID4gKyAgICAgICAgd2hpbGUgKEJpdEluZGV4ICE9IDApIHsNCj4gPiArICAgICAgICAgIGlm ICgoVGFibGVFbnRyeSAmIEJpdEluZGV4KSAhPSAwKSB7DQo+ID4gKyAgICAgICAgICAgIGlmIChH dWFyZFBhZ2UgPT0gKFVJTlQ2NCktMSkgew0KPiA+ICsgICAgICAgICAgICAgIEd1YXJkUGFnZSA9 IEFkZHJlc3M7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgKytHdWFyZFBh Z2VOdW1iZXI7DQo+ID4gKyAgICAgICAgICB9IGVsc2UgaWYgKEd1YXJkUGFnZU51bWJlciA+IDAp IHsNCj4gPiArICAgICAgICAgICAgR3VhcmRGcmVlZFBhZ2VzIChHdWFyZFBhZ2UsIEd1YXJkUGFn ZU51bWJlcik7DQo+ID4gKyAgICAgICAgICAgIEd1YXJkUGFnZU51bWJlciA9IDA7DQo+ID4gKyAg ICAgICAgICAgIEd1YXJkUGFnZSAgICAgICA9IChVSU5UNjQpLTE7DQo+ID4gKyAgICAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgaWYgKFRhYmxlRW50cnkgPT0gMCkgew0KPiA+ICsgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICBB ZGRyZXNzICs9IEVGSV9QQUdFU19UT19TSVpFICgxKTsNCj4gPiArICAgICAgICAgIEJpdEluZGV4 ID0gTFNoaWZ0VTY0IChCaXRJbmRleCwgMSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKExldmVsIDwgKEdVQVJERURfSEVBUF9N QVBfVEFCTEVfREVQVEggLSAoSU5UTiltTWFwTGV2ZWwpKSB7DQo+ID4gKyAgICAgIGJyZWFrOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIEluZGljZXNbTGV2ZWxdICs9IDE7DQo+ID4gKyAg ICBBZGRyZXNzID0gKExldmVsID09IDApID8gMCA6IEFkZHJlc3Nlc1tMZXZlbCAtIDFdOw0KPiA+ ICsgICAgQWRkcmVzc2VzW0xldmVsXSA9IEFkZHJlc3MgfCBMU2hpZnRVNjQgKEluZGljZXNbTGV2 ZWxdLCBTaGlmdHNbTGV2ZWxdKTsNCj4gPiArDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0K PiA+ICsgIC8vIFVwZGF0ZSB0aGUgbWF4aW11bSBhZGRyZXNzIG9mIGZyZWVkIHBhZ2Ugd2hpY2gg Y2FuIGJlIHVzZWQgZm9yDQo+IG1lbW9yeQ0KPiA+ICsgIC8vIHByb21vdGlvbiB1cG9uIG91dC1v Zi1tZW1vcnktc3BhY2UuDQo+ID4gKyAgLy8NCj4gPiArICBHZXRMYXN0R3VhcmRlZEZyZWVQYWdl QWRkcmVzcyAoJkFkZHJlc3MpOw0KPiA+ICsgIGlmIChBZGRyZXNzICE9IDApIHsNCj4gPiArICAg IG1MYXN0UHJvbW90ZWRQYWdlID0gQWRkcmVzczsNCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4g bWVtb3J5IG1hcCBkZXNjcmlwdG9yIGluIGEgbWVtb3J5DQo+IG1hcA0KPiA+ICsgIGNhbiBiZSBt ZXJnZWQgd2l0aCBhbnkgZ3VhcmRlZCBmcmVlIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0g IE1lbW9yeU1hcEVudHJ5ICAgIEEgcG9pbnRlciB0byBhIGRlc2NyaXB0b3IgaW4gTWVtb3J5TWFw Lg0KPiA+ICsgIEBwYXJhbSAgTWF4QWRkcmVzcyAgICAgICAgTWF4aW11bSBhZGRyZXNzIHRvIHN0 b3AgdGhlIG1lcmdlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQNCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtWT0lEDQo+ID4gK01lcmdlR3VhcmRQYWdlcyAoDQo+ID4gKyAgSU4gRUZJX01FTU9S WV9ERVNDUklQVE9SICAgICAgKk1lbW9yeU1hcEVudHJ5LA0KPiA+ICsgIElOIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgICAgIE1heEFkZHJlc3MNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklf UEhZU0lDQUxfQUREUkVTUyAgICAgICAgRW5kQWRkcmVzczsNCj4gPiArICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgICAgQml0bWFwOw0KPiA+ICsgIElOVE4gICAgICAgICAgICAgICAgICAgICAg ICBQYWdlczsNCj4gPiArDQo+ID4gKyAgaWYgKCFJc0hlYXBHdWFyZEVuYWJsZWQgKEdVQVJEX0hF QVBfVFlQRV9GUkVFRCkgfHwNCj4gPiArICAgICAgTWVtb3J5TWFwRW50cnktPlR5cGUgPj0gRWZp TWVtb3J5TWFwcGVkSU8pIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIEJpdG1hcCA9IDA7DQo+ID4gKyAgUGFnZXMgID0gRUZJX1NJWkVfVE9fUEFHRVMgKE1heEFk ZHJlc3MgLSBNZW1vcnlNYXBFbnRyeS0NCj4gPlBoeXNpY2FsU3RhcnQpOw0KPiA+ICsgIFBhZ2Vz IC09IE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzOw0KPiA+ICsgIHdoaWxlIChQYWdlcyA+ IDApIHsNCj4gPiArICAgIGlmIChCaXRtYXAgPT0gMCkgew0KPiA+ICsgICAgICBFbmRBZGRyZXNz ID0gTWVtb3J5TWFwRW50cnktPlBoeXNpY2FsU3RhcnQgKw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgRUZJX1BBR0VTX1RPX1NJWkUgKE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzKTsNCj4g PiArICAgICAgQml0bWFwID0gR2V0R3VhcmRlZE1lbW9yeUJpdHMgKEVuZEFkZHJlc3MsDQo+IEdV QVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAg aWYgKChCaXRtYXAgJiAxKSA9PSAwKSB7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0K PiA+ICsNCj4gPiArICAgIFBhZ2VzLS07DQo+ID4gKyAgICBNZW1vcnlNYXBFbnRyeS0+TnVtYmVy T2ZQYWdlcysrOw0KPiA+ICsgICAgQml0bWFwID0gUlNoaWZ0VTY0IChCaXRtYXAsIDEpOw0KPiA+ ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUHV0IHBhcnQgKGF0IG1vc3Qg NjQgcGFnZXMgYSB0aW1lKSBndWFyZGVkIGZyZWUgcGFnZXMgYmFjayB0byBmcmVlIHBhZ2UNCj4g cG9vbC4NCj4gPiArDQo+ID4gKyAgRnJlZWQgbWVtb3J5IGd1YXJkIGlzIHVzZWQgdG8gZGV0ZWN0 IFVzZS1BZnRlci1GcmVlIChVQUYpIG1lbW9yeSBpc3N1ZSwNCj4gd2hpY2gNCj4gPiArICBtYWtl cyB1c2Ugb2YgJ1VzZWQgdGhlbiB0aHJvdyBhd2F5JyB3YXkgdG8gZGV0ZWN0IGFueSBpbGxlZ2Fs IGFjY2VzcyB0bw0KPiBmcmVlZA0KPiA+ICsgIG1lbW9yeS4gVGhlIHRocm93bi1hd2F5IG1lbW9y eSB3aWxsIGJlIG1hcmtlZCBhcyBub3QtcHJlc2VudCBzbyB0aGF0DQo+IGFueSBhY2Nlc3MNCj4g PiArICB0byB0aG9zZSBtZW1vcnkgKGFmdGVyIGZyZWUpIHdpbGwgYmUgY2F1Z2h0IGJ5IHBhZ2Ut ZmF1bHQgZXhjZXB0aW9uLg0KPiA+ICsNCj4gPiArICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoaXMg d2lsbCBjb25zdW1lIGxvdHMgb2YgbWVtb3J5IHNwYWNlLiBPbmNlIG5vDQo+IG1lbW9yeQ0KPiA+ ICsgIGxlZnQgaW4gcG9vbCB0byBhbGxvY2F0ZSwgd2UgaGF2ZSB0byByZXN0b3JlIHBhcnQgb2Yg dGhlIGZyZWVkIHBhZ2VzIHRvIHRoZWlyDQo+ID4gKyAgbm9ybWFsIGZ1bmN0aW9uLiBPdGhlcndp c2UgdGhlIHdob2xlIHN5c3RlbSB3aWxsIHN0b3AgZnVuY3Rpb25pbmcuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbSAgU3RhcnRBZGRyZXNzICAgIFN0YXJ0IGFkZHJlc3Mgb2YgcHJvbW90ZWQgbWVtb3J5 Lg0KPiA+ICsgIEBwYXJhbSAgRW5kQWRkcmVzcyAgICAgIEVuZCBhZGRyZXNzIG9mIHByb21vdGVk IG1lbW9yeS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUUlVFICAgIFN1Y2NlZWRlZCB0byBwcm9t b3RlIG1lbW9yeS4NCj4gPiArICBAcmV0dXJuIEZBTFNFICAgTm8gZnJlZSBtZW1vcnkgZm91bmQu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtQcm9tb3RlR3VhcmRlZEZyZWVQ YWdlcyAoDQo+ID4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgKlN0YXJ0QWRkcmVz cywNCj4gPiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAqRW5kQWRkcmVzcw0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4g PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBBdmFpbGFibGVQYWdlczsNCj4gPiArICBVSU5U NjQgICAgICAgICAgICAgICAgICBCaXRtYXA7DQo+ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgU3RhcnQ7DQo+ID4gKw0KPiA+ICsgIGlmICghSXNIZWFwR3VhcmRFbmFibGVkIChHVUFSRF9I RUFQX1RZUEVfRlJFRUQpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFNpbWlsYXIgdG8gbWVtb3J5IGFsbG9jYXRpb24gc2Vy dmljZSwgYWx3YXlzIHNlYXJjaCB0aGUgZnJlZWQgcGFnZXMgaW4NCj4gPiArICAvLyBkZXNjZW5k aW5nIGRpcmVjdGlvbi4NCj4gPiArICAvLw0KPiA+ICsgIFN0YXJ0ICAgICAgICAgICA9IG1MYXN0 UHJvbW90ZWRQYWdlOw0KPiA+ICsgIEF2YWlsYWJsZVBhZ2VzICA9IDA7DQo+ID4gKyAgd2hpbGUg KEF2YWlsYWJsZVBhZ2VzID09IDApIHsNCj4gPiArICAgIFN0YXJ0IC09IEVGSV9QQUdFU19UT19T SVpFIChHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVFMpOw0KPiA+ICsgICAgLy8NCj4gPiArICAg IC8vIElmIHRoZSBhZGRyZXNzIHdyYXBzIGFyb3VuZCwgdHJ5IHRoZSByZWFsbHkgZnJlZWQgcGFn ZXMgYXQgdG9wLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIGlmIChTdGFydCA+IG1MYXN0UHJvbW90 ZWRQYWdlKSB7DQo+ID4gKyAgICAgIEdldExhc3RHdWFyZGVkRnJlZVBhZ2VBZGRyZXNzICgmU3Rh cnQpOw0KPiA+ICsgICAgICBBU1NFUlQgKFN0YXJ0ICE9IDApOw0KPiA+ICsgICAgICBTdGFydCAt PSBFRklfUEFHRVNfVE9fU0laRSAoR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRTKTsNCj4gPiAr ICAgIH0NCj4gPiArDQo+ID4gKyAgICBCaXRtYXAgPSBHZXRHdWFyZGVkTWVtb3J5Qml0cyAoU3Rh cnQsDQo+IEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyk7DQo+ID4gKyAgICB3aGlsZSAoQml0 bWFwID4gMCkgew0KPiA+ICsgICAgICBpZiAoKEJpdG1hcCAmIDEpICE9IDApIHsNCj4gPiArICAg ICAgICArK0F2YWlsYWJsZVBhZ2VzOw0KPiA+ICsgICAgICB9IGVsc2UgaWYgKEF2YWlsYWJsZVBh Z2VzID09IDApIHsNCj4gPiArICAgICAgICBTdGFydCArPSBFRklfUEFHRVNfVE9fU0laRSAoMSk7 DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgIEJpdG1hcCA9IFJTaGlmdFU2NCAoQml0bWFwLCAxKTsNCj4gPiAr ICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChBdmFpbGFibGVQYWdlcykgew0KPiA+ ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUHJvbW90ZWQgcGFnZXM6ICVsWCAoJWx4KVxyXG4i LCBTdGFydCwNCj4gKFVJTlQ2NClBdmFpbGFibGVQYWdlcykpOw0KPiA+ICsgICAgQ2xlYXJHdWFy ZGVkTWVtb3J5Qml0cyAoU3RhcnQsIEF2YWlsYWJsZVBhZ2VzKTsNCj4gPiArDQo+ID4gKyAgICBp ZiAoZ0NwdSAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIFNldCBmbGFn IHRvIG1ha2Ugc3VyZSBhbGxvY2F0aW5nIG1lbW9yeSB3aXRob3V0IEdVQVJEIGZvciBwYWdlIHRh YmxlDQo+ID4gKyAgICAgIC8vIG9wZXJhdGlvbjsgb3RoZXJ3aXNlIGluZmluaXRlIGxvb3BzIGNv dWxkIGJlIGNhdXNlZC4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgbU9uR3VhcmRpbmcgPSBU UlVFOw0KPiA+ICsgICAgICBTdGF0dXMgPSBnQ3B1LT5TZXRNZW1vcnlBdHRyaWJ1dGVzIChnQ3B1 LCBTdGFydCwNCj4gRUZJX1BBR0VTX1RPX1NJWkUoQXZhaWxhYmxlUGFnZXMpLCAwKTsNCj4gPiAr ICAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiArICAgICAgbU9uR3VhcmRpbmcg PSBGQUxTRTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBtTGFzdFByb21vdGVkUGFnZSA9 IFN0YXJ0Ow0KPiA+ICsgICAgKlN0YXJ0QWRkcmVzcyAgICAgPSBTdGFydDsNCj4gPiArICAgICpF bmRBZGRyZXNzICAgICAgID0gU3RhcnQgKyBFRklfUEFHRVNfVE9fU0laRSAoQXZhaWxhYmxlUGFn ZXMpIC0gMTsNCj4gPiArICAgIHJldHVybiBUUlVFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg cmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAgLyoqDQo+ID4gICAgIE5vdGlmeSBm dW5jdGlvbiB1c2VkIHRvIHNldCBhbGwgR3VhcmQgcGFnZXMgYmVmb3JlIENQVSBBcmNoIFByb3Rv Y29sDQo+IGluc3RhbGxlZC4NCj4gPiAgICoqLw0KPiA+IEBAIC0xMjEyLDcgKzE1OTIsMjAgQEAg SGVhcEd1YXJkQ3B1QXJjaFByb3RvY29sTm90aWZ5ICgNCj4gPiAgICAgKQ0KPiA+ICAgew0KPiA+ ICAgICBBU1NFUlQgKGdDcHUgIT0gTlVMTCk7DQo+ID4gLSAgU2V0QWxsR3VhcmRQYWdlcyAoKTsN Cj4gPiArDQo+ID4gKyAgaWYgKElzSGVhcEd1YXJkRW5hYmxlZA0KPiAoR1VBUkRfSEVBUF9UWVBF X1BBR0V8R1VBUkRfSEVBUF9UWVBFX1BPT0wpICYmDQo+ID4gKyAgICAgIElzSGVhcEd1YXJkRW5h YmxlZCAoR1VBUkRfSEVBUF9UWVBFX0ZSRUVEKSkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIkhlYXAgZ3VhcmQgYW5kIGZyZWVkIG1lbW9yeSBndWFyZCBjYW5ub3QgYmUNCj4gZW5h YmxlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIikpOw0KPiA+ICsgICAgQ3B1RGVhZExvb3AgKCk7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSXNIZWFwR3VhcmRFbmFibGVkDQo+IChHVUFSRF9I RUFQX1RZUEVfUEFHRXxHVUFSRF9IRUFQX1RZUEVfUE9PTCkpIHsNCj4gPiArICAgIFNldEFsbEd1 YXJkUGFnZXMgKCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSXNIZWFwR3VhcmRFbmFi bGVkIChHVUFSRF9IRUFQX1RZUEVfRlJFRUQpKSB7DQo+ID4gKyAgICBHdWFyZEFsbEZyZWVkUGFn ZXMgKCk7DQo+ID4gKyAgfQ0KPiA+ICAgfQ0KPiA+DQo+ID4gICAvKioNCj4gPiBAQCAtMTI2NCw2 ICsxNjU3LDEwIEBAIER1bXBHdWFyZGVkTWVtb3J5Qml0bWFwICgNCj4gPiAgICAgQ0hBUjggICAg ICpSdWxlcjE7DQo+ID4gICAgIENIQVI4ICAgICAqUnVsZXIyOw0KPiA+DQo+ID4gKyAgaWYgKCFJ c0hlYXBHdWFyZEVuYWJsZWQgKEdVQVJEX0hFQVBfVFlQRV9BTEwpKSB7DQo+ID4gKyAgICByZXR1 cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAgICAgaWYgKG1HdWFyZGVkTWVtb3J5TWFwID09IDAg fHwNCj4gPiAgICAgICAgIG1NYXBMZXZlbCA9PSAwIHx8DQo+ID4gICAgICAgICBtTWFwTGV2ZWwg PiBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIKSB7DQo+ID4gZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmgNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9E eGUvTWVtL0hlYXBHdWFyZC5oDQo+ID4gaW5kZXggOGMzNDY5MjQzOS4uNTVhOTFlYzA5OCAxMDA2 NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5oDQo+ID4g KysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaA0KPiA+IEBAIC0xLDcg KzEsNyBAQA0KPiA+ICAgLyoqIEBmaWxlDQo+ID4gICAgIERhdGEgdHlwZSwgbWFjcm9zIGFuZCBm dW5jdGlvbiBwcm90b3R5cGVzIG9mIGhlYXAgZ3VhcmQgZmVhdHVyZS4NCj4gPg0KPiA+IC1Db3B5 cmlnaHQgKGMpIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gPiArQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFu eWluZyBtYXRlcmlhbHMNCj4gPiAgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiA+ICAg d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZSBmb3VuZA0KPiBhdA0KPiA+IEBAIC0xNjAsNiArMTYwLDkgQEAgV0lU SE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRg0KPiBBTlkgS0lORCwgRUlUSEVS IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPiAgIC8vDQo+ID4gICAjZGVmaW5lIEdVQVJEX0hFQVBf VFlQRV9QQUdFICAgICAgICBCSVQwDQo+ID4gICAjZGVmaW5lIEdVQVJEX0hFQVBfVFlQRV9QT09M ICAgICAgICBCSVQxDQo+ID4gKyNkZWZpbmUgR1VBUkRfSEVBUF9UWVBFX0ZSRUVEICAgICAgIEJJ VDQNCj4gPiArI2RlZmluZSBHVUFSRF9IRUFQX1RZUEVfQUxMICAgICAgICAgXA0KPiA+ICsNCj4g KEdVQVJEX0hFQVBfVFlQRV9QQUdFfEdVQVJEX0hFQVBfVFlQRV9QT09MfEdVQVJEX0hFQVBfVFlQ RV9GUg0KPiBFRUQpDQo+ID4NCj4gPiAgIC8vDQo+ID4gICAvLyBEZWJ1ZyBtZXNzYWdlIGxldmVs DQo+ID4gQEAgLTM5MiwxMSArMzk1LDEzIEBAIEFkanVzdFBvb2xIZWFkRiAoDQo+ID4gICAvKioN Cj4gPiAgICAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBoZWFwIGd1YXJkIGlzIGVuYWJsZWQgZm9yIHBh Z2UgYW5kL29yIHBvb2wgYWxsb2NhdGlvbi4NCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0gIEd1YXJk VHlwZSAgIFNwZWNpZnkgdGhlIHN1Yi10eXBlKHMpIG9mIEhlYXAgR3VhcmQuDQo+ID4gKw0KPiA+ ICAgICBAcmV0dXJuIFRSVUUvRkFMU0UuDQo+ID4gICAqKi8NCj4gPiAgIEJPT0xFQU4NCj4gPiAg IElzSGVhcEd1YXJkRW5hYmxlZCAoDQo+ID4gLSAgVk9JRA0KPiA+ICsgIFVJTlQ4ICAgICAgICAg ICBHdWFyZFR5cGUNCj4gPiAgICAgKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4gQEAgLTQwNyw2ICs0 MTIsNjIgQEAgSGVhcEd1YXJkQ3B1QXJjaFByb3RvY29sTm90aWZ5ICgNCj4gPiAgICAgVk9JRA0K PiA+ICAgICApOw0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRv IHNlZSBpZiB0aGUgZ2l2ZW4gbWVtb3J5IG1hcCBkZXNjcmlwdG9yIGluIGEgbWVtb3J5DQo+IG1h cA0KPiA+ICsgIGNhbiBiZSBtZXJnZWQgd2l0aCBhbnkgZ3VhcmRlZCBmcmVlIHBhZ2VzLg0KPiA+ ICsNCj4gPiArICBAcGFyYW0gIE1lbW9yeU1hcEVudHJ5ICAgIEEgcG9pbnRlciB0byBhIGRlc2Ny aXB0b3IgaW4gTWVtb3J5TWFwLg0KPiA+ICsgIEBwYXJhbSAgTWF4QWRkcmVzcyAgICAgICAgTWF4 aW11bSBhZGRyZXNzIHRvIHN0b3AgdGhlIG1lcmdlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZP SUQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK01lcmdlR3VhcmRQYWdlcyAoDQo+ ID4gKyAgSU4gRUZJX01FTU9SWV9ERVNDUklQVE9SICAgICAgKk1lbW9yeU1hcEVudHJ5LA0KPiA+ ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgIE1heEFkZHJlc3MNCj4gPiArICApOw0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVjb3JkIGZyZWVkIHBhZ2VzIGFzIHdlbGwgYXMgbWFy ayB0aGVtIGFzIG5vdC1wcmVzZW50LCBpZiBlbmFibGVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBCYXNlQWRkcmVzcyAgIEJhc2UgYWRkcmVzcyBvZiBqdXN0IGZyZWVkIHBhZ2VzLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIFBhZ2VzICAgICAgICAgTnVtYmVyIG9mIGZyZWVkIHBhZ2VzLg0KPiA+ ICsNCj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQ SQ0KPiA+ICtHdWFyZEZyZWVkUGFnZXNDaGVja2VkICgNCj4gPiArICBJTiAgRUZJX1BIWVNJQ0FM X0FERFJFU1MgICAgQmFzZUFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAg ICAgIFBhZ2VzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFB1dCBwYXJ0IChh dCBtb3N0IDY0IHBhZ2VzIGEgdGltZSkgZ3VhcmRlZCBmcmVlIHBhZ2VzIGJhY2sgdG8gZnJlZSBw YWdlDQo+IHBvb2wuDQo+ID4gKw0KPiA+ICsgIEZyZWVkIG1lbW9yeSBndWFyZCBpcyB1c2VkIHRv IGRldGVjdCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBtZW1vcnkgaXNzdWUsDQo+IHdoaWNoDQo+ID4g KyAgbWFrZXMgdXNlIG9mICdVc2VkIHRoZW4gdGhyb3cgYXdheScgd2F5IHRvIGRldGVjdCBhbnkg aWxsZWdhbCBhY2Nlc3MgdG8NCj4gZnJlZWQNCj4gPiArICBtZW1vcnkuIFRoZSB0aHJvd24tYXdh eSBtZW1vcnkgd2lsbCBiZSBtYXJrZWQgYXMgbm90LXByZXNlbnQgc28gdGhhdA0KPiBhbnkgYWNj ZXNzDQo+ID4gKyAgdG8gdGhvc2UgbWVtb3J5IChhZnRlciBmcmVlKSB3aWxsIGJlIGNhdWdodCBi eSBwYWdlLWZhdWx0IGV4Y2VwdGlvbi4NCj4gPiArDQo+ID4gKyAgVGhlIHByb2JsZW0gaXMgdGhh dCB0aGlzIHdpbGwgY29uc3VtZSBsb3RzIG9mIG1lbW9yeSBzcGFjZS4gT25jZSBubw0KPiBtZW1v cnkNCj4gPiArICBsZWZ0IGluIHBvb2wgdG8gYWxsb2NhdGUsIHdlIGhhdmUgdG8gcmVzdG9yZSBw YXJ0IG9mIHRoZSBmcmVlZCBwYWdlcyB0byB0aGVpcg0KPiA+ICsgIG5vcm1hbCBmdW5jdGlvbi4g T3RoZXJ3aXNlIHRoZSB3aG9sZSBzeXN0ZW0gd2lsbCBzdG9wIGZ1bmN0aW9uaW5nLg0KPiA+ICsN Cj4gPiArICBAcGFyYW0gIFN0YXJ0QWRkcmVzcyAgICBTdGFydCBhZGRyZXNzIG9mIHByb21vdGVk IG1lbW9yeS4NCj4gPiArICBAcGFyYW0gIEVuZEFkZHJlc3MgICAgICBFbmQgYWRkcmVzcyBvZiBw cm9tb3RlZCBtZW1vcnkuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVFJVRSAgICBTdWNjZWVkZWQg dG8gcHJvbW90ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHVybiBGQUxTRSAgIE5vIGZyZWUgbWVtb3J5 IGZvdW5kLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArUHJvbW90ZUd1YXJk ZWRGcmVlUGFnZXMgKA0KPiA+ICsgIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICpTdGFy dEFkZHJlc3MsDQo+ID4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgKkVuZEFkZHJl c3MNCj4gPiArICApOw0KPiA+ICsNCj4gPiAgIGV4dGVybiBCT09MRUFOIG1Pbkd1YXJkaW5nOw0K PiA+DQo+ID4gICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhl L01lbS9QYWdlLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1BhZ2UuYw0KPiA+IGlu ZGV4IDNiNGNjMDhlN2MuLjlkOWFiY2Y1NjUgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVt L1BhZ2UuYw0KPiA+IEBAIC00MDEsOSArNDAxLDExIEBAIFByb21vdGVNZW1vcnlSZXNvdXJjZSAo DQo+ID4gICAgIFZPSUQNCj4gPiAgICAgKQ0KPiA+ICAgew0KPiA+IC0gIExJU1RfRU5UUlkgICAg ICAgICAqTGluazsNCj4gPiAtICBFRklfR0NEX01BUF9FTlRSWSAgKkVudHJ5Ow0KPiA+IC0gIEJP T0xFQU4gICAgICAgICAgICBQcm9tb3RlZDsNCj4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAg Kkxpbms7DQo+ID4gKyAgRUZJX0dDRF9NQVBfRU5UUlkgICAgICpFbnRyeTsNCj4gPiArICBCT09M RUFOICAgICAgICAgICAgICAgUHJvbW90ZWQ7DQo+ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg IFN0YXJ0QWRkcmVzczsNCj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgRW5kQWRkcmVzczsN Cj4gPg0KPiA+ICAgICBERUJVRyAoKERFQlVHX1BBR0UsICJQcm9tb3RlIHRoZSBtZW1vcnkgcmVz b3VyY2VcbiIpKTsNCj4gPg0KPiA+IEBAIC00NTEsNiArNDUzLDI0IEBAIFByb21vdGVNZW1vcnlS ZXNvdXJjZSAoDQo+ID4NCj4gPiAgICAgQ29yZVJlbGVhc2VHY2RNZW1vcnlMb2NrICgpOw0KPiA+ DQo+ID4gKyAgaWYgKCFQcm9tb3RlZCkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIElmIGZy ZWVkLW1lbW9yeSBndWFyZCBpcyBlbmFibGVkLCB3ZSBjb3VsZCBwcm9tb3RlIHBhZ2VzIGZyb20N Cj4gPiArICAgIC8vIGd1YXJkZWQgZnJlZSBwYWdlcy4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBQ cm9tb3RlZCA9IFByb21vdGVHdWFyZGVkRnJlZVBhZ2VzICgmU3RhcnRBZGRyZXNzLCAmRW5kQWRk cmVzcyk7DQo+ID4gKyAgICBpZiAoUHJvbW90ZWQpIHsNCj4gPiArICAgICAgQ29yZUFjcXVpcmVH Y2RNZW1vcnlMb2NrICgpOw0KPiA+ICsgICAgICBDb3JlQWRkUmFuZ2UgKA0KPiA+ICsgICAgICAg IEVmaUNvbnZlbnRpb25hbE1lbW9yeSwNCj4gPiArICAgICAgICBTdGFydEFkZHJlc3MsDQo+ID4g KyAgICAgICAgRW5kQWRkcmVzcywNCj4gPiArICAgICAgICBFRklfTUVNT1JZX1VDIHwgRUZJX01F TU9SWV9XQyB8IEVGSV9NRU1PUllfV1QgfA0KPiBFRklfTUVNT1JZX1dCDQo+ID4gKyAgICAgICAg KTsNCj4gPiArICAgICAgQ29yZVJlbGVhc2VHY2RNZW1vcnlMb2NrICgpOw0KPiA+ICsgICAgfQ0K PiA+ICsgIH0NCj4gPiArDQo+ID4gICAgIHJldHVybiBQcm9tb3RlZDsNCj4gPiAgIH0NCj4gPiAg IC8qKg0KPiA+IEBAIC04OTYsOSArOTE2LDE1IEBAIENvcmVDb252ZXJ0UGFnZXNFeCAoDQo+ID4g ICAgICAgfQ0KPiA+DQo+ID4gICAgICAgLy8NCj4gPiAtICAgIC8vIEFkZCBvdXIgbmV3IHJhbmdl IGluDQo+ID4gKyAgICAvLyBBZGQgb3VyIG5ldyByYW5nZSBpbi4gRG9uJ3QgZG8gdGhpcyBmb3Ig ZnJlZWQgcGFnZXMgaWYgZnJlZWQtbWVtb3J5DQo+ID4gKyAgICAvLyBndWFyZCBpcyBlbmFibGVk Lg0KPiA+ICAgICAgIC8vDQo+ID4gLSAgICBDb3JlQWRkUmFuZ2UgKE1lbVR5cGUsIFN0YXJ0LCBS YW5nZUVuZCwgQXR0cmlidXRlKTsNCj4gPiArICAgIGlmICghSXNIZWFwR3VhcmRFbmFibGVkIChH VUFSRF9IRUFQX1RZUEVfRlJFRUQpIHx8DQo+ID4gKyAgICAgICAgIUNoYW5naW5nVHlwZSB8fA0K PiA+ICsgICAgICAgIE1lbVR5cGUgIT0gRWZpQ29udmVudGlvbmFsTWVtb3J5KSB7DQo+ID4gKyAg ICAgIENvcmVBZGRSYW5nZSAoTWVtVHlwZSwgU3RhcnQsIFJhbmdlRW5kLCBBdHRyaWJ1dGUpOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAgICAgICBpZiAoQ2hhbmdpbmdUeXBlICYmIChNZW1UeXBl ID09IEVmaUNvbnZlbnRpb25hbE1lbW9yeSkpIHsNCj4gPiAgICAgICAgIC8vDQo+ID4gICAgICAg ICAvLyBBdm9pZCBjYWxsaW5nIERFQlVHX0NMRUFSX01FTU9SWSgpIGZvciBhbiBhZGRyZXNzIG9m IDAgYmVjYXVzZQ0KPiB0aGlzDQo+ID4gQEAgLTE1MTQsNiArMTU0MCw3IEBAIENvcmVGcmVlUGFn ZXMgKA0KPiA+DQo+ID4gICAgIFN0YXR1cyA9IENvcmVJbnRlcm5hbEZyZWVQYWdlcyAoTWVtb3J5 LCBOdW1iZXJPZlBhZ2VzLCAmTWVtb3J5VHlwZSk7DQo+ID4gICAgIGlmICghRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gKyAgICBHdWFyZEZyZWVkUGFnZXNDaGVja2VkIChNZW1vcnksIE51bWJl ck9mUGFnZXMpOw0KPiA+ICAgICAgIENvcmVVcGRhdGVQcm9maWxlICgNCj4gPiAgICAgICAgIChF RklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBSRVRVUk5fQUREUkVTUyAoMCksDQo+ID4gICAg ICAgICBNZW1vcnlQcm9maWxlQWN0aW9uRnJlZVBhZ2VzLA0KPiA+IEBAIC0xOTA4LDkgKzE5MzUs NyBAQCBEb25lOg0KPiA+ICAgICAqTWVtb3J5TWFwU2l6ZSA9IEJ1ZmZlclNpemU7DQo+ID4NCj4g PiAgICAgREVCVUdfQ09ERSAoDQo+ID4gLSAgICBpZiAoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJv cGVydHlNYXNrKSAmIChCSVQxfEJJVDApKSB7DQo+ID4gLSAgICAgIER1bXBHdWFyZGVkTWVtb3J5 Qml0bWFwICgpOw0KPiA+IC0gICAgfQ0KPiA+ICsgICAgRHVtcEd1YXJkZWRNZW1vcnlCaXRtYXAg KCk7DQo+ID4gICAgICk7DQo+ID4NCj4gPiAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiBkaWZmIC0t Z2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9Qb29sLmMNCj4gYi9NZGVNb2R1bGVQa2cv Q29yZS9EeGUvTWVtL1Bvb2wuYw0KPiA+IGluZGV4IDFmZjIwNjFmN2YuLmI5MTgyZWE4MDcgMTAw NjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9Qb29sLmMNCj4gPiArKysg Yi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYw0KPiA+IEBAIC0xLDcgKzEsNyBAQA0K PiA+ICAgLyoqIEBmaWxlDQo+ID4gICAgIFVFRkkgTWVtb3J5IHBvb2wgbWFuYWdlbWVudCBmdW5j dGlvbnMuDQo+ID4NCj4gPiAtQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxNiwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICtDb3B5cmlnaHQgKGMpIDIwMDYg LSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4g ICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ID4gICBhcmUg bGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgQlNEDQo+IExpY2Vuc2UNCj4gPiAgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQNCj4g YXQNCj4gPiBAQCAtMjYsNyArMjYsOCBAQCB0eXBlZGVmIHN0cnVjdCB7DQo+ID4gICB9IFBPT0xf RlJFRTsNCj4gPg0KPiA+DQo+ID4gLSNkZWZpbmUgUE9PTF9IRUFEX1NJR05BVFVSRSAgIFNJR05B VFVSRV8zMigncCcsJ2gnLCdkJywnMCcpDQo+ID4gKyNkZWZpbmUgUE9PTF9IRUFEX1NJR05BVFVS RSAgICAgICBTSUdOQVRVUkVfMzIoJ3AnLCdoJywnZCcsJzAnKQ0KPiA+ICsjZGVmaW5lIFBPT0xQ QUdFX0hFQURfU0lHTkFUVVJFICAgU0lHTkFUVVJFXzMyKCdwJywnaCcsJ2QnLCcxJykNCj4gPiAg IHR5cGVkZWYgc3RydWN0IHsNCj4gPiAgICAgVUlOVDMyICAgICAgICAgIFNpZ25hdHVyZTsNCj4g PiAgICAgVUlOVDMyICAgICAgICAgIFJlc2VydmVkOw0KPiA+IEBAIC0zNjcsNiArMzY4LDcgQEAg Q29yZUFsbG9jYXRlUG9vbEkgKA0KPiA+ICAgICBVSU5UTiAgICAgICBOb1BhZ2VzOw0KPiA+ICAg ICBVSU5UTiAgICAgICBHcmFudWxhcml0eTsNCj4gPiAgICAgQk9PTEVBTiAgICAgSGFzUG9vbFRh aWw7DQo+ID4gKyAgQk9PTEVBTiAgICAgUGFnZUFzUG9vbDsNCj4gPg0KPiA+ICAgICBBU1NFUlRf TE9DS0VEICgmbVBvb2xNZW1vcnlMb2NrKTsNCj4gPg0KPiA+IEBAIC0zODYsNiArMzg4LDcgQEAg Q29yZUFsbG9jYXRlUG9vbEkgKA0KPiA+DQo+ID4gICAgIEhhc1Bvb2xUYWlsICA9ICEoTmVlZEd1 YXJkICYmDQo+ID4gICAgICAgICAgICAgICAgICAgICAgKChQY2RHZXQ4IChQY2RIZWFwR3VhcmRQ cm9wZXJ0eU1hc2spICYgQklUNykgPT0gMCkpOw0KPiA+ICsgIFBhZ2VBc1Bvb2wgPSAoSXNIZWFw R3VhcmRFbmFibGVkIChHVUFSRF9IRUFQX1RZUEVfRlJFRUQpDQo+ICYmICFtT25HdWFyZGluZyk7 DQo+ID4NCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gQWRqdXN0aW5nIHRoZSBTaXplIHRvIGJlIG9m IHByb3BlciBhbGlnbm1lbnQgc28gdGhhdA0KPiA+IEBAIC00MDYsNyArNDA5LDcgQEAgQ29yZUFs bG9jYXRlUG9vbEkgKA0KPiA+ICAgICAvLyBJZiBhbGxvY2F0aW9uIGlzIG92ZXIgbWF4IHNpemUs IGp1c3QgYWxsb2NhdGUgcGFnZXMgZm9yIHRoZSByZXF1ZXN0DQo+ID4gICAgIC8vIChzbG93KQ0K PiA+ICAgICAvLw0KPiA+IC0gIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdyYW51bGFyaXR5 KSB8fCBOZWVkR3VhcmQpIHsNCj4gPiArICBpZiAoSW5kZXggPj0gU0laRV9UT19MSVNUIChHcmFu dWxhcml0eSkgfHwgTmVlZEd1YXJkIHx8IFBhZ2VBc1Bvb2wpIHsNCj4gPiAgICAgICBpZiAoIUhh c1Bvb2xUYWlsKSB7DQo+ID4gICAgICAgICBTaXplIC09IHNpemVvZiAoUE9PTF9UQUlMKTsNCj4g PiAgICAgICB9DQo+ID4gQEAgLTQ5OCw3ICs1MDEsNyBAQCBEb25lOg0KPiA+ICAgICAgIC8vDQo+ ID4gICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBvb2wgYnVmZmVyLCBmaWxsIGluIHRoZSBoZWFkZXIg JiB0YWlsIGluZm8NCj4gPiAgICAgICAvLw0KPiA+IC0gICAgSGVhZC0+U2lnbmF0dXJlID0gUE9P TF9IRUFEX1NJR05BVFVSRTsNCj4gPiArICAgIEhlYWQtPlNpZ25hdHVyZSA9IChQYWdlQXNQb29s KSA/IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFIDoNCj4gUE9PTF9IRUFEX1NJR05BVFVSRTsNCj4g PiAgICAgICBIZWFkLT5TaXplICAgICAgPSBTaXplOw0KPiA+ICAgICAgIEhlYWQtPlR5cGUgICAg ICA9IChFRklfTUVNT1JZX1RZUEUpIFBvb2xUeXBlOw0KPiA+ICAgICAgIEJ1ZmZlciAgICAgICAg ICA9IEhlYWQtPkRhdGE7DQo+ID4gQEAgLTYxNSw2ICs2MTgsNyBAQCBDb3JlRnJlZVBvb2xQYWdl c0kgKA0KPiA+ICAgICBDb3JlRnJlZVBvb2xQYWdlcyAoTWVtb3J5LCBOb1BhZ2VzKTsNCj4gPiAg ICAgQ29yZVJlbGVhc2VNZW1vcnlMb2NrICgpOw0KPiA+DQo+ID4gKyAgR3VhcmRGcmVlZFBhZ2Vz Q2hlY2tlZCAoTWVtb3J5LCBOb1BhZ2VzKTsNCj4gPiAgICAgQXBwbHlNZW1vcnlQcm90ZWN0aW9u UG9saWN5IChQb29sVHlwZSwgRWZpQ29udmVudGlvbmFsTWVtb3J5LA0KPiA+ICAgICAgIChFRklf UEhZU0lDQUxfQUREUkVTUykoVUlOVE4pTWVtb3J5LCBFRklfUEFHRVNfVE9fU0laRSAoTm9QYWdl cykpOw0KPiA+ICAgfQ0KPiA+IEBAIC02ODUsMTUgKzY4OSwxOSBAQCBDb3JlRnJlZVBvb2xJICgN Cj4gPiAgICAgVUlOVE4gICAgICAgR3JhbnVsYXJpdHk7DQo+ID4gICAgIEJPT0xFQU4gICAgIElz R3VhcmRlZDsNCj4gPiAgICAgQk9PTEVBTiAgICAgSGFzUG9vbFRhaWw7DQo+ID4gKyAgQk9PTEVB TiAgICAgUGFnZUFzUG9vbDsNCj4gPg0KPiA+ICAgICBBU1NFUlQoQnVmZmVyICE9IE5VTEwpOw0K PiA+ICAgICAvLw0KPiA+ICAgICAvLyBHZXQgdGhlIGhlYWQgJiB0YWlsIG9mIHRoZSBwb29sIGVu dHJ5DQo+ID4gICAgIC8vDQo+ID4gLSAgSGVhZCA9IENSIChCdWZmZXIsIFBPT0xfSEVBRCwgRGF0 YSwgUE9PTF9IRUFEX1NJR05BVFVSRSk7DQo+ID4gKyAgSGVhZCA9IEJBU0VfQ1IgKEJ1ZmZlciwg UE9PTF9IRUFELCBEYXRhKTsNCj4gPiAgICAgQVNTRVJUKEhlYWQgIT0gTlVMTCk7DQo+ID4NCj4g PiAtICBpZiAoSGVhZC0+U2lnbmF0dXJlICE9IFBPT0xfSEVBRF9TSUdOQVRVUkUpIHsNCj4gPiAr ICBpZiAoSGVhZC0+U2lnbmF0dXJlICE9IFBPT0xfSEVBRF9TSUdOQVRVUkUgJiYNCj4gPiArICAg ICAgSGVhZC0+U2lnbmF0dXJlICE9IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFKSB7DQo+ID4gKyAg ICBBU1NFUlQgKEhlYWQtPlNpZ25hdHVyZSA9PSBQT09MX0hFQURfU0lHTkFUVVJFIHx8DQo+ID4g KyAgICAgICAgICAgIEhlYWQtPlNpZ25hdHVyZSA9PSBQT09MUEFHRV9IRUFEX1NJR05BVFVSRSk7 DQo+ID4gICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgfQ0KPiA+ DQo+ID4gQEAgLTcwMSw2ICs3MDksNyBAQCBDb3JlRnJlZVBvb2xJICgNCj4gPiAgICAgICAgICAg ICAgICAgICBJc01lbW9yeUd1YXJkZWQgKChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pSGVh ZCk7DQo+ID4gICAgIEhhc1Bvb2xUYWlsID0gIShJc0d1YXJkZWQgJiYNCj4gPiAgICAgICAgICAg ICAgICAgICAgICgoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAmIEJJVDcpID09 IDApKTsNCj4gPiArICBQYWdlQXNQb29sID0gKEhlYWQtPlNpZ25hdHVyZSA9PSBQT09MUEFHRV9I RUFEX1NJR05BVFVSRSk7DQo+ID4NCj4gPiAgICAgaWYgKEhhc1Bvb2xUYWlsKSB7DQo+ID4gICAg ICAgVGFpbCA9IEhFQURfVE9fVEFJTCAoSGVhZCk7DQo+ID4gQEAgLTc1Nyw3ICs3NjYsNyBAQCBD b3JlRnJlZVBvb2xJICgNCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gSWYgaXQncyBub3Qgb24gdGhl IGxpc3QsIGl0IG11c3QgYmUgcG9vbCBwYWdlcw0KPiA+ICAgICAvLw0KPiA+IC0gIGlmIChJbmRl eCA+PSBTSVpFX1RPX0xJU1QgKEdyYW51bGFyaXR5KSB8fCBJc0d1YXJkZWQpIHsNCj4gPiArICBp ZiAoSW5kZXggPj0gU0laRV9UT19MSVNUIChHcmFudWxhcml0eSkgfHwgSXNHdWFyZGVkIHx8IFBh Z2VBc1Bvb2wpIHsNCj4gPg0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8gUmV0dXJuIHRoZSBt ZW1vcnkgcGFnZXMgYmFjayB0byBmcmVlIG1lbW9yeQ0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1 bGVQa2cvQ29yZS9EeGUvTWlzYy9NZW1vcnlQcm90ZWN0aW9uLmMNCj4gYi9NZGVNb2R1bGVQa2cv Q29yZS9EeGUvTWlzYy9NZW1vcnlQcm90ZWN0aW9uLmMNCj4gPiBpbmRleCBmYThmOGZlOTFhLi42 Mjk4YjY3ZGIxIDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL01l bW9yeVByb3RlY3Rpb24uYw0KPiA+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL01l bW9yeVByb3RlY3Rpb24uYw0KPiA+IEBAIC0xMjUwLDcgKzEyNTAsNyBAQCBBcHBseU1lbW9yeVBy b3RlY3Rpb25Qb2xpY3kgKA0KPiA+ICAgICAvLyBEb24ndCBvdmVyd3JpdGUgR3VhcmQgcGFnZXMs IHdoaWNoIHNob3VsZCBiZSB0aGUgZmlyc3QgYW5kL29yIGxhc3QgcGFnZSwNCj4gPiAgICAgLy8g aWYgYW55Lg0KPiA+ICAgICAvLw0KPiA+IC0gIGlmIChJc0hlYXBHdWFyZEVuYWJsZWQgKCkpIHsN Cj4gPiArICBpZiAoSXNIZWFwR3VhcmRFbmFibGVkDQo+IChHVUFSRF9IRUFQX1RZUEVfUEFHRXxH VUFSRF9IRUFQX1RZUEVfUE9PTCkpIHsNCj4gPiAgICAgICBpZiAoSXNHdWFyZFBhZ2UgKE1lbW9y eSkpICB7DQo+ID4gICAgICAgICBNZW1vcnkgKz0gRUZJX1BBR0VfU0laRTsNCj4gPiAgICAgICAg IExlbmd0aCAtPSBFRklfUEFHRV9TSVpFOw0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cv Q29yZS9EeGUvTWlzYy9Qcm9wZXJ0aWVzVGFibGUuYw0KPiBiL01kZU1vZHVsZVBrZy9Db3JlL0R4 ZS9NaXNjL1Byb3BlcnRpZXNUYWJsZS5jDQo+ID4gaW5kZXggMDVlYjRmNDIyYi4uMDRjZmIyZGFi MiAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9Qcm9wZXJ0aWVz VGFibGUuYw0KPiA+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NaXNjL1Byb3BlcnRpZXNU YWJsZS5jDQo+ID4gQEAgLTEsNyArMSw3IEBADQo+ID4gICAvKiogQGZpbGUNCj4gPiAgICAgVUVG SSBQcm9wZXJ0aWVzVGFibGUgc3VwcG9ydA0KPiA+DQo+ID4gLUNvcHlyaWdodCAoYykgMjAxNSAt IDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAr Q29weXJpZ2h0IChjKSAyMDE1IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiA+ICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscw0KPiA+ICAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ID4gICB3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vu c2UgbWF5IGJlIGZvdW5kDQo+IGF0DQo+ID4gQEAgLTMyLDYgKzMyLDcgQEAgV0lUSE9VVCBXQVJS QU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkNCj4gS0lORCwgRUlUSEVSIEVYUFJFU1Mg T1IgSU1QTElFRC4NCj4gPiAgICNpbmNsdWRlIDxHdWlkL1Byb3BlcnRpZXNUYWJsZS5oPg0KPiA+ DQo+ID4gICAjaW5jbHVkZSAiRHhlTWFpbi5oIg0KPiA+ICsjaW5jbHVkZSAiSGVhcEd1YXJkLmgi DQo+ID4NCj4gPiAgICNkZWZpbmUgUFJFVklPVVNfTUVNT1JZX0RFU0NSSVBUT1IoTWVtb3J5RGVz Y3JpcHRvciwgU2l6ZSkgXA0KPiA+ICAgICAoKEVGSV9NRU1PUllfREVTQ1JJUFRPUiAqKSgoVUlO VDggKikoTWVtb3J5RGVzY3JpcHRvcikgLSAoU2l6ZSkpKQ0KPiA+IEBAIC0yMDUsMTYgKzIwNiwx MyBAQCBNZXJnZU1lbW9yeU1hcCAoDQo+ID4gICAgICAgTmV4dE1lbW9yeU1hcEVudHJ5ID0gTkVY VF9NRU1PUllfREVTQ1JJUFRPUiAoTWVtb3J5TWFwRW50cnksDQo+IERlc2NyaXB0b3JTaXplKTsN Cj4gPg0KPiA+ICAgICAgIGRvIHsNCj4gPiAtICAgICAgTWVtb3J5QmxvY2tMZW5ndGggPSAoVUlO VDY0KSAoRWZpUGFnZXNUb1NpemUgKE1lbW9yeU1hcEVudHJ5LQ0KPiA+TnVtYmVyT2ZQYWdlcykp Ow0KPiA+ICsgICAgICBNZXJnZUd1YXJkUGFnZXMgKE5ld01lbW9yeU1hcEVudHJ5LCBOZXh0TWVt b3J5TWFwRW50cnktDQo+ID5QaHlzaWNhbFN0YXJ0KTsNCj4gPiArICAgICAgTWVtb3J5QmxvY2tM ZW5ndGggPSAoVUlOVDY0KSAoRWZpUGFnZXNUb1NpemUgKE5ld01lbW9yeU1hcEVudHJ5LQ0KPiA+ TnVtYmVyT2ZQYWdlcykpOw0KPiA+ICAgICAgICAgaWYgKCgoVUlOVE4pTmV4dE1lbW9yeU1hcEVu dHJ5IDwgKFVJTlROKU1lbW9yeU1hcEVuZCkgJiYNCj4gPiAtICAgICAgICAgIChNZW1vcnlNYXBF bnRyeS0+VHlwZSA9PSBOZXh0TWVtb3J5TWFwRW50cnktPlR5cGUpICYmDQo+ID4gLSAgICAgICAg ICAoTWVtb3J5TWFwRW50cnktPkF0dHJpYnV0ZSA9PSBOZXh0TWVtb3J5TWFwRW50cnktPkF0dHJp YnV0ZSkgJiYNCj4gPiAtICAgICAgICAgICgoTWVtb3J5TWFwRW50cnktPlBoeXNpY2FsU3RhcnQg KyBNZW1vcnlCbG9ja0xlbmd0aCkgPT0NCj4gTmV4dE1lbW9yeU1hcEVudHJ5LT5QaHlzaWNhbFN0 YXJ0KSkgew0KPiA+IC0gICAgICAgIE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBhZ2VzICs9IE5l eHRNZW1vcnlNYXBFbnRyeS0NCj4gPk51bWJlck9mUGFnZXM7DQo+ID4gLSAgICAgICAgaWYgKE5l d01lbW9yeU1hcEVudHJ5ICE9IE1lbW9yeU1hcEVudHJ5KSB7DQo+ID4gLSAgICAgICAgICBOZXdN ZW1vcnlNYXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyArPSBOZXh0TWVtb3J5TWFwRW50cnktDQo+ID5O dW1iZXJPZlBhZ2VzOw0KPiA+IC0gICAgICAgIH0NCj4gPiAtDQo+ID4gKyAgICAgICAgICAoTmV3 TWVtb3J5TWFwRW50cnktPlR5cGUgPT0gTmV4dE1lbW9yeU1hcEVudHJ5LT5UeXBlKSAmJg0KPiA+ ICsgICAgICAgICAgKE5ld01lbW9yeU1hcEVudHJ5LT5BdHRyaWJ1dGUgPT0gTmV4dE1lbW9yeU1h cEVudHJ5LT5BdHRyaWJ1dGUpDQo+ICYmDQo+ID4gKyAgICAgICAgICAoKE5ld01lbW9yeU1hcEVu dHJ5LT5QaHlzaWNhbFN0YXJ0ICsgTWVtb3J5QmxvY2tMZW5ndGgpID09DQo+IE5leHRNZW1vcnlN YXBFbnRyeS0+UGh5c2ljYWxTdGFydCkpIHsNCj4gPiArICAgICAgICBOZXdNZW1vcnlNYXBFbnRy eS0+TnVtYmVyT2ZQYWdlcyArPSBOZXh0TWVtb3J5TWFwRW50cnktDQo+ID5OdW1iZXJPZlBhZ2Vz Ow0KPiA+ICAgICAgICAgICBOZXh0TWVtb3J5TWFwRW50cnkgPSBORVhUX01FTU9SWV9ERVNDUklQ VE9SDQo+IChOZXh0TWVtb3J5TWFwRW50cnksIERlc2NyaXB0b3JTaXplKTsNCj4gPiAgICAgICAg ICAgY29udGludWU7DQo+ID4gICAgICAgICB9IGVsc2Ugew0KPiA+DQoNCg==