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 BBAEE20356893 for ; Sun, 12 Nov 2017 19:04:33 -0800 (PST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Nov 2017 19:08:39 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.44,387,1505804400"; d="scan'208";a="1243302537" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga002.fm.intel.com with ESMTP; 12 Nov 2017 19:08:38 -0800 Received: from fmsmsx115.amr.corp.intel.com (10.18.116.19) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 12 Nov 2017 19:08:38 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx115.amr.corp.intel.com (10.18.116.19) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 12 Nov 2017 19:08:37 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.213]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.159]) with mapi id 14.03.0319.002; Mon, 13 Nov 2017 11:08:35 +0800 From: "Wang, Jian J" To: Ard Biesheuvel CC: "edk2-devel@lists.01.org" , "Kinney, Michael D" , "Yao, Jiewen" , "Dong, Eric" , "Zeng, Star" Thread-Topic: [edk2] [PATCH v5 5/7] MdeModulePkg/DxeCore: Implement heap guard feature for UEFI Thread-Index: AQHTWzcotr3Nmov+2k+RaW9xuI8WlKMRonLA Date: Mon, 13 Nov 2017 03:08:35 +0000 Message-ID: References: <20171110051924.14064-1-jian.j.wang@intel.com> <20171110051924.14064-6-jian.j.wang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYTcwY2ExNGYtOTBhYi00YjFhLTk0NWItNzY0NzhkZTcxYjAyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiI1ZjFxRWUxYSsyaVAzXC90bnZZY1hGQmtKVndNelBqdjBKXC9QSmZlbWQ1OVdEa2NZYXVITGVKRVdDcStUQjZpaGwifQ== x-ctpclassification: CTP_IC dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v5 5/7] MdeModulePkg/DxeCore: Implement heap guard feature for UEFI X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Nov 2017 03:04:34 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIGZvciB0aGUgZmVlZGJhY2suIEknbGwgYWRkIGNvbW1lbnQgdG8gZXhwbGFpbiBtb3Jl Lg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFyZCBCaWVzaGV1dmVs IFttYWlsdG86YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZ10NCj4gU2VudDogU3VuZGF5LCBOb3Zl bWJlciAxMiwgMjAxNyA1OjUxIEFNDQo+IFRvOiBXYW5nLCBKaWFuIEogPGppYW4uai53YW5nQGlu dGVsLmNvbT4NCj4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBLaW5uZXksIE1pY2hhZWwg RCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Ow0KPiBZYW8sIEppZXdlbiA8amlld2VuLnlh b0BpbnRlbC5jb20+OyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgWmVuZywNCj4g U3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0gg djUgNS83XSBNZGVNb2R1bGVQa2cvRHhlQ29yZTogSW1wbGVtZW50IGhlYXANCj4gZ3VhcmQgZmVh dHVyZSBmb3IgVUVGSQ0KPiANCj4gT24gMTAgTm92ZW1iZXIgMjAxNyBhdCAwNToxOSwgSmlhbiBK IFdhbmcgPGppYW4uai53YW5nQGludGVsLmNvbT4gd3JvdGU6DQo+ID4+IHY0DQo+ID4+IENvZGlu ZyBzdHlsZSBjbGVhbnVwDQo+ID4NCj4gPj4gdjMNCj4gPj4gRml4IGJ1aWxkIGVycm9yIHdpdGgg R0NDIHRvb2xjaGFpbg0KPiA+DQo+ID4+IHYyDQo+ID4+IEFjY29yZGluZyB0byBFcmljJ3MgZmVl ZGJhY2s6DQo+ID4+IGEuIFJlbW92ZSBsb2NhbCB2YXJpYWJsZSBpbml0aWFsaXplciB3aXRoIG1l bW9yeSBjb3B5IGZyb20gZ2xvYmFscw0KPiA+PiBiLiBBZGQgY29tbWVudCBmb3IgdGhlIHVzZSBv ZiBtT25HdWFyZGluZw0KPiA+PiBjLiBDaGFuZ2UgbWFwIHRhYmxlIGR1bXAgY29kZSB0byB1c2Ug REVCVUdfUEFHRXxERUJVR19QT09MIGxldmVsDQo+ID4+ICAgIG1lc3NhZ2UNCj4gPj4NCj4gPj4g T3RoZXIgY2hhbmdlczoNCj4gPj4gZC4gRml4IGlzc3VlcyBpbiAzMi1iaXQgYm9vdCBtb2RlDQo+ ID4+IGUuIFJlbW92ZSBwcm90b3R5cGUgb2YgZW1wdHkgZnVuY3Rpb25zDQo+ID4+DQo+ID4NCj4g PiBUaGlzIGZlYXR1cmUgbWFrZXMgdXNlIG9mIHBhZ2luZyBtZWNoYW5pc20gdG8gYWRkIGEgaGlk ZGVuIChub3QgcHJlc2VudCkNCj4gPiBwYWdlIGp1c3QgYmVmb3JlIGFuZCBhZnRlciB0aGUgYWxs b2NhdGVkIG1lbW9yeSBibG9jay4gSWYgdGhlIGNvZGUgdHJpZXMNCj4gPiB0byBhY2Nlc3MgbWVt b3J5IG91dHNpZGUgb2YgdGhlIGFsbG9jYXRlZCBwYXJ0LCBwYWdlIGZhdWx0IGV4Y2VwdGlvbiB3 aWxsDQo+ID4gYmUgdHJpZ2dlcmVkLg0KPiA+DQo+ID4gVGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xs ZWQgYnkgdGhyZWUgUENEczoNCj4gPg0KPiA+ICAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrDQo+ID4gICAgIGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2RIZWFwR3VhcmRQb29sVHlwZQ0KPiA+ICAgICBnRWZpTWRlTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkSGVhcEd1YXJkUGFnZVR5cGUNCj4gPg0KPiA+IEJJVDAgYW5k IEJJVDEgb2YgUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBv ciBkaXNhYmxlDQo+ID4gbWVtb3J5IGd1YXJkIGZvciBwYWdlIGFuZCBwb29sIHJlc3BlY3RpdmVs eS4gUGNkSGVhcEd1YXJkUG9vbFR5cGUgYW5kL29yDQo+ID4gUGNkSGVhcEd1YXJkUGFnZVR5cGUg YXJlIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgZ3VhcmQgZm9yIHNwZWNpZmljIHR5cGUNCj4g PiBvZiBtZW1vcnkuIEZvciBleGFtcGxlLCB3ZSBjYW4gdHVybiBvbiBndWFyZCBvbmx5IGZvciBF ZmlCb290U2VydmljZXNEYXRhDQo+ID4gYW5kIEVmaVJ1bnRpbWVTZXJ2aWNlc0RhdGEgYnkgc2V0 dGluZyB0aGUgUENEIHdpdGggdmFsdWUgMHg1MC4NCj4gPg0KPiA+IFBvb2wgbWVtb3J5IGlzIG5v dCB1c3VzYWxseSBpbnRlZ2VyIG11bHRpcGxlIG9mIG9uZSBwYWdlLCBhbmQgaXMgbW9yZSBsaWtl bHkNCj4gPiBsZXNzIHRoYW4gYSBwYWdlLiBUaGVyZSdzIG5vIHdheSB0byBtb25pdG9yIHRoZSBv dmVyZmxvdyBhdCBib3RoIHRvcCBhbmQNCj4gPiBib3R0b20gb2YgcG9vbCBtZW1vcnkuIEJJVDcg b2YgUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrIGlzIHVzZWQgdG8NCj4gY29udHJvbA0KPiA+IGhv dyB0byBwb3NpdGlvbiB0aGUgaGVhZCBvZiBwb29sIG1lbW9yeSBzbyB0aGF0IGl0J3MgZWFzaWVy IHRvIGNhdGNoIG1lbW9yeQ0KPiA+IG92ZXJmbG93IGluIG1lbW9yeSBncm93aW5nIGRpcmVjdGlv biBvciBpbiBkZWNyZWFzaW5nIGRpcmVjdGlvbi4NCj4gPg0KPiA+IE5vdGUxOiBUdXJuaW5nIG9u IGhlYXAgZ3VhcmQsIGVzcGVjaWFsbHkgcG9vbCBndWFyZCwgd2lsbCBpbnRyb2R1Y2UgdG9vIG1h bnkNCj4gPiBtZW1vcnkgZnJhZ21lbnRzLiBXaW5kb3dzIDEwIGhhcyBhIGxpbWl0YXRpb24gaW4g aXRzIGJvb3QgbG9hZGVyLCB3aGljaA0KPiA+IGFjY2VwdHMgYXQgbW9zdCA1MTIgbWVtb3J5IGRl c2NyaXB0b3JzIHBhc3NlZCBmcm9tIEJJT1MuIFRoaXMgd2lsbCBwcmV2ZW50DQo+ID4gV2luZG93 cyAxMCBmcm9tIGJvb3RpbmcgaWYgaGVhcCBndWFyZCBpcyBlbmFibGVkLiBUaGUgbGF0ZXN0IExp bnV4DQo+ID4gZGlzdHJpYnV0aW9uIHdpdGggZ3J1YiBib290IGxvYWRlciBoYXMgbm8gc3VjaCBp c3N1ZS4gTm9ybWFsbHkgaXQncyBub3QNCj4gPiByZWNvbW1lbmRlZCB0byBlbmFibGUgdGhpcyBm ZWF0dXJlIGluIHByb2R1Y3Rpb24gYnVpbGQgb2YgQklPUy4NCj4gPg0KPiA+IE5vdGUyOiBEb24n dCBlbmFibGUgdGhpcyBmZWF0dXJlIGZvciBOVDMyIGVtdWxhdGlvbiBwbGF0Zm9ybSB3aGljaCBk b2Vzbid0DQo+ID4gc3VwcG9ydCBwYWdpbmcuDQo+ID4NCj4gPiBDYzogU3RhciBaZW5nIDxzdGFy LnplbmdAaW50ZWwuY29tPg0KPiA+IENjOiBFcmljIERvbmcgPGVyaWMuZG9uZ0BpbnRlbC5jb20+ DQo+ID4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+IENjOiBNaWNo YWVsIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gU3VnZ2VzdGVkLWJ5 OiBBeWVsbGV0IFdvbG1hbiA8YXllbGxldC53b2xtYW5AaW50ZWwuY29tPg0KPiA+IENvbnRyaWJ1 dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBKaWFuIEogV2FuZyA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0KPiA+IFJldmll d2VkLWJ5OiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiBSZWdyZXNzaW9u LXRlc3RlZC1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPiAtLS0NCj4g PiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaW5mICAgICB8ICAgIDQgKw0KPiA+ICBN ZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jIHwgMTE4Mg0KPiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9I ZWFwR3VhcmQuaCB8ICAzOTQgKysrKysrKysrKysNCj4gPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhl L01lbS9JbWVtLmggICAgICB8ICAgMzggKy0NCj4gPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01l bS9QYWdlLmMgICAgICB8ICAxMzAgKysrLQ0KPiA+ICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVt L1Bvb2wuYyAgICAgIHwgIDE1NCArKysrLQ0KPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDE4MzggaW5z ZXJ0aW9ucygrKSwgNjQgZGVsZXRpb25zKC0pDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNZGVN b2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5oDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaW5mDQo+IGIvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL0R4ZU1haW4uaW5mDQo+ID4gaW5kZXggMTVmNGIwM2QzYy4uZjIxNTVmY2FiMSAx MDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5pbmYNCj4gPiAr KysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5pbmYNCj4gPiBAQCAtNTYsNiArNTYs NyBAQA0KPiA+ICAgIE1lbS9NZW1EYXRhLmMNCj4gPiAgICBNZW0vSW1lbS5oDQo+ID4gICAgTWVt L01lbW9yeVByb2ZpbGVSZWNvcmQuYw0KPiA+ICsgIE1lbS9IZWFwR3VhcmQuYw0KPiA+ICAgIEZ3 Vm9sQmxvY2svRndWb2xCbG9jay5jDQo+ID4gICAgRndWb2xCbG9jay9Gd1ZvbEJsb2NrLmgNCj4g PiAgICBGd1ZvbC9Gd1ZvbFdyaXRlLmMNCj4gPiBAQCAtMTkzLDYgKzE5NCw5IEBADQo+ID4gICAg Z0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEltYWdlUHJvdGVjdGlvblBvbGljeSAg ICAgICAgICAgICAgICAgICAjIw0KPiBDT05TVU1FUw0KPiA+ICAgIGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2REeGVOeE1lbW9yeVByb3RlY3Rpb25Qb2xpY3kNCj4gIyMgQ09OU1VN RVMNCj4gPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTnVsbFBvaW50ZXJE ZXRlY3Rpb25Qcm9wZXJ0eU1hc2sNCj4gIyMgQ09OU1VNRVMNCj4gPiArICBnRWZpTWRlTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkSGVhcEd1YXJkUGFnZVR5cGUgICAgICAgICAgICAgICAgICAg ICAgICMjDQo+IENPTlNVTUVTDQo+ID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZEhlYXBHdWFyZFBvb2xUeXBlICAgICAgICAgICAgICAgICAgICAgICAjIw0KPiBDT05TVU1F Uw0KPiA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RIZWFwR3VhcmRQcm9w ZXJ0eU1hc2sNCj4gIyMgQ09OU1VNRVMNCj4gPg0KPiA+ICAjIFtIb2JdDQo+ID4gICMgUkVTT1VS Q0VfREVTQ1JJUFRPUiAgICMjIENPTlNVTUVTDQo+ID4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBr Zy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVt L0hlYXBHdWFyZC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAwLi41NWUyOWY0ZGVkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL01kZU1vZHVsZVBr Zy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmMNCj4gPiBAQCAtMCwwICsxLDExODIgQEANCj4gPiAr LyoqIEBmaWxlDQo+ID4gKyAgVUVGSSBIZWFwIEd1YXJkIGZ1bmN0aW9ucy4NCj4gPiArDQo+ID4g K0NvcHlyaWdodCAoYykgMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPiA+ICtUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxz DQo+ID4gK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBCU0QNCj4gTGljZW5zZQ0KPiA+ICt3aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl IGZvdW5kDQo+IGF0DQo+ID4gK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGlj ZW5zZS5waHANCj4gPiArDQo+ID4gK1RIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRI RSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiA+ICtXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4gRVhQUkVTUyBP UiBJTVBMSUVELg0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiRHhlTWFp bi5oIg0KPiA+ICsjaW5jbHVkZSAiSW1lbS5oIg0KPiA+ICsjaW5jbHVkZSAiSGVhcEd1YXJkLmgi DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBHbG9iYWwgdG8gYXZvaWQgaW5maW5pdGUgcmVlbnRy YW5jZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIHVwZGF0aW5nDQo+ID4gKy8vIHBhZ2UgdGFi bGUgYXR0cmlidXRlcywgd2hpY2ggbWF5IG5lZWQgYWxsb2NhdGUgcGFnZXMgZm9yIG5ldyBQREUv UFRFLg0KPiA+ICsvLw0KPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBCT09MRUFO IG1Pbkd1YXJkaW5nID0gRkFMU0U7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBQb2ludGVyIHRv IHRhYmxlIHRyYWNraW5nIHRoZSBHdWFyZGVkIG1lbW9yeSB3aXRoIGJpdG1hcCwgaW4gd2hpY2gg ICcxJw0KPiA+ICsvLyBpcyB1c2VkIHRvIGluZGljYXRlIG1lbW9yeSBndWFyZGVkLiAnMCcgbWln aHQgYmUgZnJlZSBtZW1vcnkgb3IgR3VhcmQNCj4gPiArLy8gcGFnZSBpdHNlbGYsIGRlcGVuZGlu ZyBvbiBzdGF0dXMgb2YgbWVtb3J5IGFkamFjZW50IHRvIGl0Lg0KPiA+ICsvLw0KPiA+ICtHTE9C QUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBVSU5UNjQgbUd1YXJkZWRNZW1vcnlNYXAgPSAwOw0K PiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQ3VycmVudCBkZXB0aCBsZXZlbCBvZiBtYXAgdGFibGUg cG9pbnRlZCBieSBtR3VhcmRlZE1lbW9yeU1hcC4NCj4gPiArLy8gbU1hcExldmVsIG11c3QgYmUg aW5pdGlhbGl6ZWQgYXQgbGVhc3QgYnkgMS4gSXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5DQo+ID4g Ky8vIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBhZGRyZXNzIG9mIG1lbW9yeSBqdXN0IHRyYWNr ZWQuDQo+ID4gKy8vDQo+ID4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIFVJTlROIG1N YXBMZXZlbCA9IDE7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBTaGlmdCBhbmQgbWFzayBmb3Ig ZWFjaCBsZXZlbCBvZiBtYXAgdGFibGUNCj4gPiArLy8NCj4gPiArR0xPQkFMX1JFTU9WRV9JRl9V TlJFRkVSRU5DRUQgVUlOVE4NCj4gbUxldmVsU2hpZnRbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9E RVBUSF0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBHVUFSREVE X0hFQVBfTUFQX1RBQkxFX0RFUFRIX1NISUZUUzsNCj4gPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJF RkVSRU5DRUQgVUlOVE4NCj4gbUxldmVsTWFza1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRI XQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEdVQVJERURfSEVB UF9NQVBfVEFCTEVfREVQVEhfTUFTS1M7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTZXQgY29y cmVzcG9uZGluZyBiaXRzIGluIGJpdG1hcCB0YWJsZSB0byAxIGFjY29yZGluZyB0byB0aGUgYWRk cmVzcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgICAgU3RhcnQgYWRkcmVz cyB0byBzZXQgZm9yLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJpdE51bWJlciAgIE51bWJlciBvZiBi aXRzIHRvIHNldC4NCj4gPiArICBAcGFyYW1baW5dICBCaXRNYXAgICAgICBQb2ludGVyIHRvIGJp dG1hcCB3aGljaCBjb3ZlcnMgdGhlIEFkZHJlc3MuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9J RC4NCj4gPiArKiovDQo+ID4gK1NUQVRJQw0KPiA+ICtWT0lEDQo+ID4gK1NldEJpdHMgKA0KPiA+ ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgQml0TnVtYmVyLA0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICpCaXRNYXANCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiAgICAgICAgICAg THNiczsNCj4gPiArICBVSU5UTiAgICAgICAgICAgUXdvcmRzOw0KPiA+ICsgIFVJTlROICAgICAg ICAgICBNc2JzOw0KPiA+ICsgIFVJTlROICAgICAgICAgICBTdGFydEJpdDsNCj4gPiArICBVSU5U TiAgICAgICAgICAgRW5kQml0Ow0KPiA+ICsNCj4gPiArICBTdGFydEJpdCAgPSAoVUlOVE4pR1VB UkRFRF9IRUFQX01BUF9FTlRSWV9CSVRfSU5ERVggKEFkZHJlc3MpOw0KPiA+ICsgIEVuZEJpdCAg ICA9IChTdGFydEJpdCArIEJpdE51bWJlciAtIDEpICUgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9C SVRTOw0KPiA+ICsNCj4gPiArICBpZiAoKFN0YXJ0Qml0ICsgQml0TnVtYmVyKSA+IEdVQVJERURf SEVBUF9NQVBfRU5UUllfQklUUykgew0KPiA+ICsgICAgTXNicyAgICA9IChHVUFSREVEX0hFQVBf TUFQX0VOVFJZX0JJVFMgLSBTdGFydEJpdCkgJQ0KPiA+ICsgICAgICAgICAgICAgIEdVQVJERURf SEVBUF9NQVBfRU5UUllfQklUUzsNCj4gPiArICAgIExzYnMgICAgPSAoRW5kQml0ICsgMSkgJSBH VUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVFM7DQo+ID4gKyAgICBRd29yZHMgID0gKEJpdE51bWJl ciAtIE1zYnMpIC8gR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRTOw0KPiA+ICsgIH0gZWxzZSB7 DQo+ID4gKyAgICBNc2JzICAgID0gQml0TnVtYmVyOw0KPiA+ICsgICAgTHNicyAgICA9IDA7DQo+ ID4gKyAgICBRd29yZHMgID0gMDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChNc2JzID4g MCkgew0KPiA+ICsgICAgKkJpdE1hcCB8PSBMU2hpZnRVNjQgKExTaGlmdFU2NCAoMSwgTXNicykg LSAxLCBTdGFydEJpdCk7DQo+ID4gKyAgICBCaXRNYXAgICs9IDE7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBpZiAoUXdvcmRzID4gMCkgew0KPiA+ICsgICAgU2V0TWVtNjQgKChWT0lEICopQml0 TWFwLCBRd29yZHMgKg0KPiBHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JZVEVTLA0KPiA+ICsgICAg ICAgICAgICAgIChVSU5UNjQpLTEpOw0KPiA+ICsgICAgQml0TWFwICs9IFF3b3JkczsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmIChMc2JzID4gMCkgew0KPiA+ICsgICAgKkJpdE1hcCB8PSAo TFNoaWZ0VTY0ICgxLCBMc2JzKSAtIDEpOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgU2V0IGNvcnJlc3BvbmRpbmcgYml0cyBpbiBiaXRtYXAgdGFibGUgdG8gMCBh Y2NvcmRpbmcgdG8gdGhlIGFkZHJlc3MuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJl c3MgICAgIFN0YXJ0IGFkZHJlc3MgdG8gc2V0IGZvci4NCj4gPiArICBAcGFyYW1baW5dICBCaXRO dW1iZXIgICBOdW1iZXIgb2YgYml0cyB0byBzZXQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQml0TWFw ICAgICAgUG9pbnRlciB0byBiaXRtYXAgd2hpY2ggY292ZXJzIHRoZSBBZGRyZXNzLg0KPiA+ICsN Cj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtTVEFUSUMNCj4gPiArVk9JRA0K PiA+ICtDbGVhckJpdHMgKA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEFkZHJl c3MsDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgQml0TnVtYmVyLA0KPiA+ICsg IElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICpCaXRNYXANCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBVSU5UTiAgICAgICAgICAgTHNiczsNCj4gPiArICBVSU5UTiAgICAgICAgICAgUXdvcmRz Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICBNc2JzOw0KPiA+ICsgIFVJTlROICAgICAgICAgICBT dGFydEJpdDsNCj4gPiArICBVSU5UTiAgICAgICAgICAgRW5kQml0Ow0KPiA+ICsNCj4gPiArICBT dGFydEJpdCAgPSAoVUlOVE4pR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRfSU5ERVggKEFkZHJl c3MpOw0KPiA+ICsgIEVuZEJpdCAgICA9IChTdGFydEJpdCArIEJpdE51bWJlciAtIDEpICUgR1VB UkRFRF9IRUFQX01BUF9FTlRSWV9CSVRTOw0KPiA+ICsNCj4gPiArICBpZiAoKFN0YXJ0Qml0ICsg Qml0TnVtYmVyKSA+IEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUykgew0KPiA+ICsgICAgTXNi cyAgICA9IChHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVFMgLSBTdGFydEJpdCkgJQ0KPiA+ICsg ICAgICAgICAgICAgIEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUzsNCj4gPiArICAgIExzYnMg ICAgPSAoRW5kQml0ICsgMSkgJSBHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVFM7DQo+ID4gKyAg ICBRd29yZHMgID0gKEJpdE51bWJlciAtIE1zYnMpIC8gR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9C SVRTOw0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBNc2JzICAgID0gQml0TnVtYmVyOw0KPiA+ ICsgICAgTHNicyAgICA9IDA7DQo+ID4gKyAgICBRd29yZHMgID0gMDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIGlmIChNc2JzID4gMCkgew0KPiA+ICsgICAgKkJpdE1hcCAmPSB+TFNoaWZ0VTY0 IChMU2hpZnRVNjQgKDEsIE1zYnMpIC0gMSwgU3RhcnRCaXQpOw0KPiA+ICsgICAgQml0TWFwICAr PSAxOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKFF3b3JkcyA+IDApIHsNCj4gPiArICAg IFNldE1lbTY0ICgoVk9JRCAqKUJpdE1hcCwgUXdvcmRzICoNCj4gR1VBUkRFRF9IRUFQX01BUF9F TlRSWV9CWVRFUywgMCk7DQo+ID4gKyAgICBCaXRNYXAgKz0gUXdvcmRzOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgaWYgKExzYnMgPiAwKSB7DQo+ID4gKyAgICAqQml0TWFwICY9IH4oTFNoaWZ0 VTY0ICgxLCBMc2JzKSAtIDEpOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgR2V0IGNvcnJlc3BvbmRpbmcgYml0cyBpbiBiaXRtYXAgdGFibGUgYWNjb3JkaW5nIHRv IHRoZSBhZGRyZXNzLg0KPiA+ICsNCj4gPiArICBUaGUgdmFsdWUgb2YgYml0IDAgY29ycmVzcG9u ZHMgdG8gdGhlIHN0YXR1cyBvZiBtZW1vcnkgYXQgZ2l2ZW4gQWRkcmVzcy4NCj4gPiArICBObyBt b3JlIHRoYW4gNjQgYml0cyBjYW4gYmUgcmV0cmlldmVkIGluIG9uZSBjYWxsLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgICBTdGFydCBhZGRyZXNzIHRvIHJldHJpZXZlIGJp dHMgZm9yLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJpdE51bWJlciAgIE51bWJlciBvZiBiaXRzIHRv IGdldC4NCj4gPiArICBAcGFyYW1baW5dICBCaXRNYXAgICAgICBQb2ludGVyIHRvIGJpdG1hcCB3 aGljaCBjb3ZlcnMgdGhlIEFkZHJlc3MuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gQW4gaW50ZWdl ciBjb250YWluaW5nIHRoZSBiaXRzIGluZm9ybWF0aW9uLg0KPiA+ICsqKi8NCj4gPiArU1RBVElD DQo+ID4gK1VJTlQ2NA0KPiA+ICtHZXRCaXRzICgNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQURE UkVTUyAgICBBZGRyZXNzLA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgIEJpdE51 bWJlciwNCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAqQml0TWFwDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgIFN0YXJ0Qml0Ow0KPiA+ICsgIFVJTlRO ICAgICAgICAgICBFbmRCaXQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgIExzYnM7DQo+ID4gKyAg VUlOVE4gICAgICAgICAgIE1zYnM7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgIFJlc3VsdDsNCj4g PiArDQo+ID4gKyAgQVNTRVJUIChCaXROdW1iZXIgPD0gR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9C SVRTKTsNCj4gPiArDQo+ID4gKyAgU3RhcnRCaXQgID0gKFVJTlROKUdVQVJERURfSEVBUF9NQVBf RU5UUllfQklUX0lOREVYIChBZGRyZXNzKTsNCj4gPiArICBFbmRCaXQgICAgPSAoU3RhcnRCaXQg KyBCaXROdW1iZXIgLSAxKSAlIEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUzsNCj4gPiArDQo+ ID4gKyAgaWYgKChTdGFydEJpdCArIEJpdE51bWJlcikgPiBHVUFSREVEX0hFQVBfTUFQX0VOVFJZ X0JJVFMpIHsNCj4gPiArICAgIE1zYnMgPSBHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVFMgLSBT dGFydEJpdDsNCj4gPiArICAgIExzYnMgPSAoRW5kQml0ICsgMSkgJSBHVUFSREVEX0hFQVBfTUFQ X0VOVFJZX0JJVFM7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIE1zYnMgPSBCaXROdW1iZXI7 DQo+ID4gKyAgICBMc2JzID0gMDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFJlc3VsdCAgICA9 IFJTaGlmdFU2NCAoKCpCaXRNYXApLCBTdGFydEJpdCkgJiAoTFNoaWZ0VTY0ICgxLCBNc2JzKSAt IDEpOw0KPiA+ICsgIGlmIChMc2JzID4gMCkgew0KPiA+ICsgICAgQml0TWFwICArPSAxOw0KPiA+ ICsgICAgUmVzdWx0ICB8PSBMU2hpZnRVNjQgKCgqQml0TWFwKSAmIChMU2hpZnRVNjQgKDEsIExz YnMpIC0gMSksIE1zYnMpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIFJlc3VsdDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTG9jYXRlIHRoZSBwb2ludGVyIG9mIGJp dG1hcCBmcm9tIHRoZSBndWFyZGVkIG1lbW9yeSBiaXRtYXAgdGFibGVzLA0KPiB3aGljaA0KPiA+ ICsgIGNvdmVycyB0aGUgZ2l2ZW4gQWRkcmVzcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg QWRkcmVzcyAgICAgICBTdGFydCBhZGRyZXNzIHRvIHNlYXJjaCB0aGUgYml0bWFwIGZvci4NCj4g PiArICBAcGFyYW1baW5dICBBbGxvY01hcFVuaXQgIEZsYWcgdG8gaW5kaWNhdGUgbWVtb3J5IGFs bG9jYXRpb24gZm9yIHRoZSB0YWJsZS4NCj4gPiArICBAcGFyYW1bb3V0XSBCaXRNYXAgICAgICAg IFBvaW50ZXIgdG8gYml0bWFwIHdoaWNoIGNvdmVycyB0aGUgQWRkcmVzcy4NCj4gPiArDQo+ID4g KyAgQHJldHVybiBUaGUgYml0IG51bWJlciBmcm9tIGdpdmVuIEFkZHJlc3MgdG8gdGhlIGVuZCBv ZiBjdXJyZW50IG1hcCB0YWJsZS4NCj4gPiArKiovDQo+ID4gK1VJTlRODQo+ID4gK0ZpbmRHdWFy ZGVkTWVtb3J5TWFwICgNCj4gPiArICBJTiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQWRkcmVz cywNCj4gPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQWxsb2NNYXBVbml0LA0KPiA+ ICsgIE9VVCBVSU5UNjQgICAgICAgICAgICAgICAgICAqKkJpdE1hcA0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIExldmVsOw0KPiA+ICsgIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICpHdWFyZE1hcDsNCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICBNYXBNZW1vcnk7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgU2l6ZTsNCj4gPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICBCaXRzVG9Vbml0RW5kOw0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0 YXR1czsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBBZGp1c3QgY3VycmVudCBtYXAgdGFi bGUgZGVwdGggYWNjb3JkaW5nIHRvIHRoZSBhZGRyZXNzIHRvIGFjY2Vzcw0KPiA+ICsgIC8vDQo+ ID4gKyAgd2hpbGUgKG1NYXBMZXZlbCA8IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEgNCj4g PiArICAgICAgICAgJiYNCj4gPiArICAgICAgICAgUlNoaWZ0VTY0ICgNCj4gPiArICAgICAgICAg ICBBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgIG1MZXZlbFNoaWZ0W0dVQVJERURfSEVBUF9NQVBf VEFCTEVfREVQVEggLSBtTWFwTGV2ZWwgLSAxXQ0KPiA+ICsgICAgICAgICAgICkgIT0gMCkgew0K PiA+ICsNCj4gPiArICAgIGlmIChtR3VhcmRlZE1lbW9yeU1hcCAhPSAwKSB7DQo+ID4gKyAgICAg IFNpemUgPSAobUxldmVsTWFza1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIIC0gbU1hcExl dmVsIC0NCj4gMV0gKyAxKQ0KPiA+ICsgICAgICAgICAgICAgKiBHVUFSREVEX0hFQVBfTUFQX0VO VFJZX0JZVEVTOw0KPiA+ICsgICAgICBTdGF0dXMgPSBDb3JlSW50ZXJuYWxBbGxvY2F0ZVBhZ2Vz ICgNCj4gPiArICAgICAgICAgICAgICAgICAgQWxsb2NhdGVBbnlQYWdlcywNCj4gPiArICAgICAg ICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gPiArICAgICAgICAgICAgICAgICAg RUZJX1NJWkVfVE9fUEFHRVMgKFNpemUpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAmTWFwTWVt b3J5LA0KPiA+ICsgICAgICAgICAgICAgICAgICBGQUxTRQ0KPiA+ICsgICAgICAgICAgICAgICAg ICApOw0KPiA+ICsgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICsgICAgICBB U1NFUlQgKE1hcE1lbW9yeSAhPSAwKTsNCj4gPiArDQo+ID4gKyAgICAgIFNldE1lbSAoKFZPSUQg KikoVUlOVE4pTWFwTWVtb3J5LCBTaXplLCAwKTsNCj4gPiArDQo+ID4gKyAgICAgICooVUlOVDY0 ICopKFVJTlROKU1hcE1lbW9yeSA9IG1HdWFyZGVkTWVtb3J5TWFwOw0KPiA+ICsgICAgICBtR3Vh cmRlZE1lbW9yeU1hcCA9IE1hcE1lbW9yeTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBt TWFwTGV2ZWwrKzsNCj4gPiArDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBHdWFyZE1hcCA9ICZt R3VhcmRlZE1lbW9yeU1hcDsNCj4gPiArICBmb3IgKExldmVsID0gR1VBUkRFRF9IRUFQX01BUF9U QUJMRV9ERVBUSCAtIG1NYXBMZXZlbDsNCj4gPiArICAgICAgIExldmVsIDwgR1VBUkRFRF9IRUFQ X01BUF9UQUJMRV9ERVBUSDsNCj4gPiArICAgICAgICsrTGV2ZWwpIHsNCj4gPiArDQo+ID4gKyAg ICBpZiAoKkd1YXJkTWFwID09IDApIHsNCj4gPiArICAgICAgaWYgKCFBbGxvY01hcFVuaXQpIHsN Cj4gPiArICAgICAgICBHdWFyZE1hcCA9IE5VTEw7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4g KyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIFNpemUgPSAobUxldmVsTWFza1tMZXZlbF0gKyAx KSAqIEdVQVJERURfSEVBUF9NQVBfRU5UUllfQllURVM7DQo+ID4gKyAgICAgIFN0YXR1cyA9IENv cmVJbnRlcm5hbEFsbG9jYXRlUGFnZXMgKA0KPiA+ICsgICAgICAgICAgICAgICAgICBBbGxvY2F0 ZUFueVBhZ2VzLA0KPiA+ICsgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0K PiA+ICsgICAgICAgICAgICAgICAgICBFRklfU0laRV9UT19QQUdFUyAoU2l6ZSksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICZNYXBNZW1vcnksDQo+ID4gKyAgICAgICAgICAgICAgICAgIEZBTFNF DQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQo+ID4gKyAgICAgIEFTU0VSVCAoTWFwTWVtb3J5ICE9IDApOw0KPiA+ICsNCj4g PiArICAgICAgU2V0TWVtICgoVk9JRCAqKShVSU5UTilNYXBNZW1vcnksIFNpemUsIDApOw0KPiA+ ICsgICAgICAqR3VhcmRNYXAgPSBNYXBNZW1vcnk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsg ICAgSW5kZXggICAgID0gKFVJTlROKVJTaGlmdFU2NCAoQWRkcmVzcywgbUxldmVsU2hpZnRbTGV2 ZWxdKTsNCj4gPiArICAgIEluZGV4ICAgICAmPSBtTGV2ZWxNYXNrW0xldmVsXTsNCj4gPiArICAg IEd1YXJkTWFwICA9IChVSU5UNjQgKikoVUlOVE4pKCgqR3VhcmRNYXApICsgSW5kZXggKiBzaXpl b2YgKFVJTlQ2NCkpOw0KPiA+ICsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEJpdHNUb1VuaXRF bmQgPSBHVUFSREVEX0hFQVBfTUFQX0JJVFMgLQ0KPiBHVUFSREVEX0hFQVBfTUFQX0JJVF9JTkRF WCAoQWRkcmVzcyk7DQo+ID4gKyAgKkJpdE1hcCAgICAgICA9IEd1YXJkTWFwOw0KPiA+ICsNCj4g PiArICByZXR1cm4gQml0c1RvVW5pdEVuZDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgU2V0IGNvcnJlc3BvbmRpbmcgYml0cyBpbiBiaXRtYXAgdGFibGUgdG8gMSBhY2NvcmRpbmcg dG8gZ2l2ZW4gbWVtb3J5IHJhbmdlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNz ICAgICAgIE1lbW9yeSBhZGRyZXNzIHRvIGd1YXJkIGZyb20uDQo+ID4gKyAgQHBhcmFtW2luXSAg TnVtYmVyT2ZQYWdlcyBOdW1iZXIgb2YgcGFnZXMgdG8gZ3VhcmQuDQo+ID4gKw0KPiA+ICsgIEBy ZXR1cm4gVk9JRC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK1NldEd1 YXJkZWRNZW1vcnlCaXRzICgNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBBZGRy ZXNzLA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgIE51bWJlck9mUGFnZXMNCj4g PiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UNjQgICAgICAgICAgICAqQml0TWFwOw0KPiA+ICsg IFVJTlROICAgICAgICAgICAgIEJpdHM7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgQml0c1Rv VW5pdEVuZDsNCj4gPiArDQo+ID4gKyAgd2hpbGUgKE51bWJlck9mUGFnZXMgPiAwKSB7DQo+ID4g KyAgICBCaXRzVG9Vbml0RW5kID0gRmluZEd1YXJkZWRNZW1vcnlNYXAgKEFkZHJlc3MsIFRSVUUs ICZCaXRNYXApOw0KPiA+ICsgICAgQVNTRVJUIChCaXRNYXAgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ ICsgICAgaWYgKE51bWJlck9mUGFnZXMgPiBCaXRzVG9Vbml0RW5kKSB7DQo+ID4gKyAgICAgIC8v IENyb3NzIG1hcCB1bml0DQo+ID4gKyAgICAgIEJpdHMgPSBCaXRzVG9Vbml0RW5kOw0KPiA+ICsg ICAgfSBlbHNlIHsNCj4gPiArICAgICAgQml0cyAgPSBOdW1iZXJPZlBhZ2VzOw0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiArICAgIFNldEJpdHMgKEFkZHJlc3MsIEJpdHMsIEJpdE1hcCk7DQo+ID4g Kw0KPiA+ICsgICAgTnVtYmVyT2ZQYWdlcyAtPSBCaXRzOw0KPiA+ICsgICAgQWRkcmVzcyAgICAg ICArPSBFRklfUEFHRVNfVE9fU0laRSAoQml0cyk7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBDbGVhciBjb3JyZXNwb25kaW5nIGJpdHMgaW4gYml0bWFwIHRhYmxl IGFjY29yZGluZyB0byBnaXZlbiBtZW1vcnkgcmFuZ2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIEFkZHJlc3MgICAgICAgTWVtb3J5IGFkZHJlc3MgdG8gdW5zZXQgZnJvbS4NCj4gPiArICBA cGFyYW1baW5dICBOdW1iZXJPZlBhZ2VzIE51bWJlciBvZiBwYWdlcyB0byB1bnNldCBndWFyZC4N Cj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lELg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtF RklBUEkNCj4gPiArQ2xlYXJHdWFyZGVkTWVtb3J5Qml0cyAoDQo+ID4gKyAgSU4gRUZJX1BIWVNJ Q0FMX0FERFJFU1MgICAgQWRkcmVzcywNCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg ICBOdW1iZXJPZlBhZ2VzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAg ICAgKkJpdE1hcDsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICBCaXRzOw0KPiA+ICsgIFVJTlRO ICAgICAgICAgICAgIEJpdHNUb1VuaXRFbmQ7DQo+ID4gKw0KPiA+ICsgIHdoaWxlIChOdW1iZXJP ZlBhZ2VzID4gMCkgew0KPiA+ICsgICAgQml0c1RvVW5pdEVuZCA9IEZpbmRHdWFyZGVkTWVtb3J5 TWFwIChBZGRyZXNzLCBUUlVFLCAmQml0TWFwKTsNCj4gPiArICAgIEFTU0VSVCAoQml0TWFwICE9 IE5VTEwpOw0KPiA+ICsNCj4gPiArICAgIGlmIChOdW1iZXJPZlBhZ2VzID4gQml0c1RvVW5pdEVu ZCkgew0KPiA+ICsgICAgICAvLyBDcm9zcyBtYXAgdW5pdA0KPiA+ICsgICAgICBCaXRzID0gQml0 c1RvVW5pdEVuZDsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIEJpdHMgID0gTnVtYmVy T2ZQYWdlczsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBDbGVhckJpdHMgKEFkZHJlc3Ms IEJpdHMsIEJpdE1hcCk7DQo+ID4gKw0KPiA+ICsgICAgTnVtYmVyT2ZQYWdlcyAtPSBCaXRzOw0K PiA+ICsgICAgQWRkcmVzcyAgICAgICArPSBFRklfUEFHRVNfVE9fU0laRSAoQml0cyk7DQo+ID4g KyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXRyaWV2ZSBjb3JyZXNwb25k aW5nIGJpdHMgaW4gYml0bWFwIHRhYmxlIGFjY29yZGluZyB0byBnaXZlbiBtZW1vcnkNCj4gcmFu Z2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICAgICAgTWVtb3J5IGFkZHJl c3MgdG8gcmV0cmlldmUgZnJvbS4NCj4gPiArICBAcGFyYW1baW5dICBOdW1iZXJPZlBhZ2VzIE51 bWJlciBvZiBwYWdlcyB0byByZXRyaWV2ZS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lELg0K PiA+ICsqKi8NCj4gPiArVUlOVE4NCj4gPiArR2V0R3VhcmRlZE1lbW9yeUJpdHMgKA0KPiA+ICsg IElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gVUlOVE4gICAg ICAgICAgICAgICAgICAgTnVtYmVyT2ZQYWdlcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJ TlQ2NCAgICAgICAgICAgICpCaXRNYXA7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgQml0czsN Cj4gPiArICBVSU5UTiAgICAgICAgICAgICBSZXN1bHQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAg ICAgU2hpZnQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgQml0c1RvVW5pdEVuZDsNCj4gPiAr DQo+ID4gKyAgQVNTRVJUIChOdW1iZXJPZlBhZ2VzIDw9IEdVQVJERURfSEVBUF9NQVBfRU5UUllf QklUUyk7DQo+ID4gKw0KPiA+ICsgIFJlc3VsdCA9IDA7DQo+ID4gKyAgU2hpZnQgID0gMDsNCj4g PiArICB3aGlsZSAoTnVtYmVyT2ZQYWdlcyA+IDApIHsNCj4gPiArICAgIEJpdHNUb1VuaXRFbmQg PSBGaW5kR3VhcmRlZE1lbW9yeU1hcCAoQWRkcmVzcywgRkFMU0UsICZCaXRNYXApOw0KPiA+ICsN Cj4gPiArICAgIGlmIChOdW1iZXJPZlBhZ2VzID4gQml0c1RvVW5pdEVuZCkgew0KPiA+ICsgICAg ICAvLyBDcm9zcyBtYXAgdW5pdA0KPiA+ICsgICAgICBCaXRzICA9IEJpdHNUb1VuaXRFbmQ7DQo+ ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBCaXRzICA9IE51bWJlck9mUGFnZXM7DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKEJpdE1hcCAhPSBOVUxMKSB7DQo+ID4gKyAgICAg IFJlc3VsdCB8PSBMU2hpZnRVNjQgKEdldEJpdHMgKEFkZHJlc3MsIEJpdHMsIEJpdE1hcCksIFNo aWZ0KTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBTaGlmdCAgICAgICAgICs9IEJpdHM7 DQo+ID4gKyAgICBOdW1iZXJPZlBhZ2VzIC09IEJpdHM7DQo+ID4gKyAgICBBZGRyZXNzICAgICAg ICs9IEVGSV9QQUdFU19UT19TSVpFIChCaXRzKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJl dHVybiBSZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBiaXQgdmFs dWUgaW4gYml0bWFwIHRhYmxlIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcy4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgQWRkcmVzcyAgICAgVGhlIGFkZHJlc3MgdG8gcmV0cmlldmUgZm9yLg0KPiA+ ICsNCj4gPiArICBAcmV0dXJuIDEgb3IgMC4NCj4gPiArKiovDQo+ID4gK1VJTlRODQo+ID4gK0VG SUFQSQ0KPiA+ICtHZXRHdWFyZE1hcEJpdCAoDQo+ID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJF U1MgICAgQWRkcmVzcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlQ2NCAgICAgICAgKkd1 YXJkTWFwOw0KPiA+ICsNCj4gPiArICBGaW5kR3VhcmRlZE1lbW9yeU1hcCAoQWRkcmVzcywgRkFM U0UsICZHdWFyZE1hcCk7DQo+ID4gKyAgaWYgKEd1YXJkTWFwICE9IE5VTEwpIHsNCj4gPiArICAg IGlmIChSU2hpZnRVNjQgKCpHdWFyZE1hcCwNCj4gPiArICAgICAgICAgICAgICAgICAgIEdVQVJE RURfSEVBUF9NQVBfRU5UUllfQklUX0lOREVYIChBZGRyZXNzKSkgJiAxKSB7DQo+ID4gKyAgICAg IHJldHVybiAxOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNldCB0aGUgYml0IGluIGJpdG1hcCB0 YWJsZSBmb3IgdGhlIGdpdmVuIGFkZHJlc3MuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEFk ZHJlc3MgICAgIFRoZSBhZGRyZXNzIHRvIHNldCBmb3IuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4g Vk9JRC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK1NldEd1YXJkTWFw Qml0ICgNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBBZGRyZXNzDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAqR3VhcmRNYXA7DQo+ID4gKyAgVUlOVDY0 ICAgICAgICBCaXRNYXNrOw0KPiA+ICsNCj4gPiArICBGaW5kR3VhcmRlZE1lbW9yeU1hcCAoQWRk cmVzcywgVFJVRSwgJkd1YXJkTWFwKTsNCj4gPiArICBpZiAoR3VhcmRNYXAgIT0gTlVMTCkgew0K PiA+ICsgICAgQml0TWFzayA9IExTaGlmdFU2NCAoMSwgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9C SVRfSU5ERVgNCj4gKEFkZHJlc3MpKTsNCj4gPiArICAgICpHdWFyZE1hcCB8PSBCaXRNYXNrOw0K PiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2xlYXIgdGhlIGJpdCBp biBiaXRtYXAgdGFibGUgZm9yIHRoZSBnaXZlbiBhZGRyZXNzLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICBBZGRyZXNzICAgICBUaGUgYWRkcmVzcyB0byBjbGVhciBmb3IuDQo+ID4gKw0KPiA+ ICsgIEByZXR1cm4gVk9JRC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4g K0NsZWFyR3VhcmRNYXBCaXQgKA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEFk ZHJlc3MNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UNjQgICAgICAgICpHdWFyZE1hcDsN Cj4gPiArICBVSU5UNjQgICAgICAgIEJpdE1hc2s7DQo+ID4gKw0KPiA+ICsgIEZpbmRHdWFyZGVk TWVtb3J5TWFwIChBZGRyZXNzLCBUUlVFLCAmR3VhcmRNYXApOw0KPiA+ICsgIGlmIChHdWFyZE1h cCAhPSBOVUxMKSB7DQo+ID4gKyAgICBCaXRNYXNrID0gTFNoaWZ0VTY0ICgxLCBHVUFSREVEX0hF QVBfTUFQX0VOVFJZX0JJVF9JTkRFWA0KPiAoQWRkcmVzcykpOw0KPiA+ICsgICAgKkd1YXJkTWFw ICY9IH5CaXRNYXNrOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg Q2hlY2sgdG8gc2VlIGlmIHRoZSBwYWdlIGF0IHRoZSBnaXZlbiBhZGRyZXNzIGlzIGEgR3VhcmQg cGFnZSBvciBub3QuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICAgIFRoZSBh ZGRyZXNzIHRvIGNoZWNrIGZvci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUUlVFICBUaGUgcGFn ZSBhdCBBZGRyZXNzIGlzIGEgR3VhcmQgcGFnZS4NCj4gPiArICBAcmV0dXJuIEZBTFNFIFRoZSBw YWdlIGF0IEFkZHJlc3MgaXMgbm90IGEgR3VhcmQgcGFnZS4NCj4gPiArKiovDQo+ID4gK0JPT0xF QU4NCj4gPiArRUZJQVBJDQo+ID4gK0lzR3VhcmRQYWdlICgNCj4gPiArICBJTiBFRklfUEhZU0lD QUxfQUREUkVTUyAgICBBZGRyZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gICAg ICAgQml0TWFwOw0KPiA+ICsNCj4gPiArICBCaXRNYXAgPSBHZXRHdWFyZGVkTWVtb3J5Qml0cyAo QWRkcmVzcyAtIEVGSV9QQUdFX1NJWkUsIDMpOw0KPiA+ICsgIHJldHVybiAoKEJpdE1hcCA9PSAw YjAwMSkgfHwgKEJpdE1hcCA9PSAwYjEwMCkgfHwgKEJpdE1hcCA9PSAwYjEwMSkpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayB0byBzZWUgaWYgdGhlIHBhZ2UgYXQgdGhl IGdpdmVuIGFkZHJlc3MgaXMgYSBoZWFkIEd1YXJkIHBhZ2Ugb3Igbm90Lg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICBBZGRyZXNzICAgICBUaGUgYWRkcmVzcyB0byBjaGVjayBmb3INCj4gPiAr DQo+ID4gKyAgQHJldHVybiBUUlVFICBUaGUgcGFnZSBhdCBBZGRyZXNzIGlzIGEgaGVhZCBHdWFy ZCBwYWdlDQo+ID4gKyAgQHJldHVybiBGQUxTRSBUaGUgcGFnZSBhdCBBZGRyZXNzIGlzIG5vdCBh IGhlYWQgR3VhcmQgcGFnZQ0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4g PiArSXNIZWFkR3VhcmQgKA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEFkZHJl c3MNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKEdldEd1YXJkZWRNZW1vcnlCaXRz IChBZGRyZXNzLCAyKSA9PSAwYjEwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg Q2hlY2sgdG8gc2VlIGlmIHRoZSBwYWdlIGF0IHRoZSBnaXZlbiBhZGRyZXNzIGlzIGEgdGFpbCBH dWFyZCBwYWdlIG9yIG5vdC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgICAg VGhlIGFkZHJlc3MgdG8gY2hlY2sgZm9yLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRSVUUgIFRo ZSBwYWdlIGF0IEFkZHJlc3MgaXMgYSB0YWlsIEd1YXJkIHBhZ2UuDQo+ID4gKyAgQHJldHVybiBG QUxTRSBUaGUgcGFnZSBhdCBBZGRyZXNzIGlzIG5vdCBhIHRhaWwgR3VhcmQgcGFnZS4NCj4gPiAr KiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0lzVGFpbEd1YXJkICgNCj4gPiAr ICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBBZGRyZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgcmV0dXJuIChHZXRHdWFyZGVkTWVtb3J5Qml0cyAoQWRkcmVzcyAtIEVGSV9QQUdFX1NJ WkUsIDIpID09IDBiMDEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayB0 byBzZWUgaWYgdGhlIHBhZ2UgYXQgdGhlIGdpdmVuIGFkZHJlc3MgaXMgZ3VhcmRlZCBvciBub3Qu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICAgIFRoZSBhZGRyZXNzIHRvIGNo ZWNrIGZvci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUUlVFICBUaGUgcGFnZSBhdCBBZGRyZXNz IGlzIGd1YXJkZWQuDQo+ID4gKyAgQHJldHVybiBGQUxTRSBUaGUgcGFnZSBhdCBBZGRyZXNzIGlz IG5vdCBndWFyZGVkLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiAr SXNNZW1vcnlHdWFyZGVkICgNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBBZGRy ZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIChHZXRHdWFyZE1hcEJpdCAoQWRk cmVzcykgPT0gMSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNldCB0aGUgcGFn ZSBhdCB0aGUgZ2l2ZW4gYWRkcmVzcyB0byBiZSBhIEd1YXJkIHBhZ2UuDQo+ID4gKw0KPiA+ICsg IFRoaXMgaXMgZG9uZSBieSBjaGFuZ2luZyB0aGUgcGFnZSB0YWJsZSBhdHRyaWJ1dGUgdG8gYmUg Tk9UIFBSU0VOVC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJlc3MgICAgIFBh Z2UgYWRkcmVzcyB0byBHdWFyZCBhdA0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQNCj4gPiAr KiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK1NldEd1YXJkUGFnZSAoDQo+ID4gKyAg SU4gIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgQmFzZUFkZHJlc3MNCj4gPiArICApDQo+ID4g K3sNCj4gPiArICAvLw0KPiA+ICsgIC8vIFNldCBmbGFnIHRvIG1ha2Ugc3VyZSBhbGxvY2F0aW5n IG1lbW9yeSB3aXRob3V0IEdVQVJEIGZvciBwYWdlIHRhYmxlDQo+ID4gKyAgLy8gb3BlcmF0aW9u OyBvdGhlcndpc2UgaW5maW5pdGUgbG9vcHMgY291bGQgYmUgY2F1c2VkLg0KPiA+ICsgIC8vDQo+ ID4gKyAgbU9uR3VhcmRpbmcgPSBUUlVFOw0KPiA+ICsgIGdDcHUtPlNldE1lbW9yeUF0dHJpYnV0 ZXMgKGdDcHUsIEJhc2VBZGRyZXNzLCBFRklfUEFHRV9TSVpFLA0KPiBFRklfTUVNT1JZX1JQKTsN Cj4gDQo+IFRoaXMgYnJlYWtzIER4ZU54TWVtb3J5UHJvdGVjdGlvblBvbGljeTogdGhpcyBjYWxs IHdpbGwgcmVtb3ZlIHRoZSBYUA0KPiBhdHRyaWJ1dGUgZnJvbSByZWdpb25zIHRoYXQgaGF2ZSBp dCBzZXQsIGFuZCBVbnNldEd1YXJkUGFnZSgpIHdpbGwgbm90DQo+IHJlc3RvcmUgaXQuIFRoZSBy ZXN1bHQgaXMgdGhhdCB0aGUgcGFnZSB3aWxsIGhhdmUgcmVhZC13cml0ZS1leGVjdXRlDQo+IHBl cm1pc3Npb25zIGFmdGVyIGZyZWVpbmcgaXQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YN Cj4gUGNkRHhlTnhNZW1vcnlQcm90ZWN0aW9uUG9saWN5Lg0KPiANCj4gR2l2ZW4gdGhhdCBoZWFw IGd1YXJkIGlzIGEgZGVidWcgZmVhdHVyZSwgdGhpcyBtYXkgYmUgYWNjZXB0YWJsZSwgYnV0DQo+ IGl0IGRvZXMgZGVzZXJ2ZSB0byBiZSBtZW50aW9uZWQgZXhwbGljaXRseS4NCj4gDQo+IA0KPiAN Cj4gDQo+ID4gKyAgbU9uR3VhcmRpbmcgPSBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgVW5zZXQgdGhlIEd1YXJkIHBhZ2UgYXQgdGhlIGdpdmVuIGFkZHJlc3MgdG8gdGhl IG5vcm1hbCBtZW1vcnkuDQo+ID4gKw0KPiA+ICsgIFRoaXMgaXMgZG9uZSBieSBjaGFuZ2luZyB0 aGUgcGFnZSB0YWJsZSBhdHRyaWJ1dGUgdG8gYmUgUFJTRU5ULg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICBCYXNlQWRkcmVzcyAgICAgUGFnZSBhZGRyZXNzIHRvIEd1YXJkIGF0Lg0KPiA+ICsN Cj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0K PiA+ICtVbnNldEd1YXJkUGFnZSAoDQo+ID4gKyAgSU4gIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg ICAgQmFzZUFkZHJlc3MNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICAvLw0KPiA+ICsgIC8vIFNl dCBmbGFnIHRvIG1ha2Ugc3VyZSBhbGxvY2F0aW5nIG1lbW9yeSB3aXRob3V0IEdVQVJEIGZvciBw YWdlIHRhYmxlDQo+ID4gKyAgLy8gb3BlcmF0aW9uOyBvdGhlcndpc2UgaW5maW5pdGUgbG9vcHMg Y291bGQgYmUgY2F1c2VkLg0KPiA+ICsgIC8vDQo+ID4gKyAgbU9uR3VhcmRpbmcgPSBUUlVFOw0K PiA+ICsgIGdDcHUtPlNldE1lbW9yeUF0dHJpYnV0ZXMgKGdDcHUsIEJhc2VBZGRyZXNzLCBFRklf UEFHRV9TSVpFLCAwKTsNCj4gPiArICBtT25HdWFyZGluZyA9IEZBTFNFOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBDaGVjayB0byBzZWUgaWYgdGhlIG1lbW9yeSBhdCB0aGUgZ2l2 ZW4gYWRkcmVzcyBzaG91bGQgYmUgZ3VhcmRlZCBvciBub3QuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gIE1lbW9yeVR5cGUgICAgICBNZW1vcnkgdHlwZSB0byBjaGVjay4NCj4gPiArICBAcGFy YW1baW5dICBBbGxvY2F0ZVR5cGUgICAgQWxsb2NhdGlvbiB0eXBlIHRvIGNoZWNrLg0KPiA+ICsg IEBwYXJhbVtpbl0gIFBhZ2VPclBvb2wgICAgICBJbmRpY2F0ZSBhIHBhZ2UgYWxsb2NhdGlvbiBv ciBwb29sIGFsbG9jYXRpb24uDQo+ID4gKw0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRSVUUgIFRo ZSBnaXZlbiB0eXBlIG9mIG1lbW9yeSBzaG91bGQgYmUgZ3VhcmRlZC4NCj4gPiArICBAcmV0dXJu IEZBTFNFIFRoZSBnaXZlbiB0eXBlIG9mIG1lbW9yeSBzaG91bGQgbm90IGJlIGd1YXJkZWQuDQo+ ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0lzTWVtb3J5VHlwZVRvR3VhcmQgKA0KPiA+ICsg IElOIEVGSV9NRU1PUllfVFlQRSAgICAgICAgTWVtb3J5VHlwZSwNCj4gPiArICBJTiBFRklfQUxM T0NBVEVfVFlQRSAgICAgIEFsbG9jYXRlVHlwZSwNCj4gPiArICBJTiBVSU5UOCAgICAgICAgICAg ICAgICAgIFBhZ2VPclBvb2wNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UNjQgVGVzdEJp dDsNCj4gPiArICBVSU5UNjQgQ29uZmlnQml0Ow0KPiA+ICsgIEJPT0xFQU4gICAgIEluU21tOw0K PiA+ICsNCj4gPiArICBpZiAoZ0NwdSA9PSBOVUxMIHx8IEFsbG9jYXRlVHlwZSA9PSBBbGxvY2F0 ZUFkZHJlc3MpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIEluU21tID0gRkFMU0U7DQo+ID4gKyAgaWYgKGdTbW1CYXNlMiAhPSBOVUxMKSB7DQo+ID4g KyAgICBnU21tQmFzZTItPkluU21tIChnU21tQmFzZTIsICZJblNtbSk7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICBpZiAoSW5TbW0pIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmICgoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAm IFBhZ2VPclBvb2wpID09IDApIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIGlmIChQYWdlT3JQb29sID09IEdVQVJEX0hFQVBfVFlQRV9QT09MKSB7DQo+ ID4gKyAgICBDb25maWdCaXQgPSBQY2RHZXQ2NCAoUGNkSGVhcEd1YXJkUG9vbFR5cGUpOw0KPiA+ ICsgIH0gZWxzZSBpZiAoUGFnZU9yUG9vbCA9PSBHVUFSRF9IRUFQX1RZUEVfUEFHRSkgew0KPiA+ ICsgICAgQ29uZmlnQml0ID0gUGNkR2V0NjQgKFBjZEhlYXBHdWFyZFBhZ2VUeXBlKTsNCj4gPiAr ICB9IGVsc2Ugew0KPiA+ICsgICAgQ29uZmlnQml0ID0gKFVJTlQ2NCktMTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIGlmICgoVUlOVDMyKU1lbW9yeVR5cGUgPj0gTUVNT1JZX1RZUEVfT1NfUkVT RVJWRURfTUlOKSB7DQo+ID4gKyAgICBUZXN0Qml0ID0gQklUNjM7DQo+ID4gKyAgfSBlbHNlIGlm ICgoVUlOVDMyKSBNZW1vcnlUeXBlID49IE1FTU9SWV9UWVBFX09FTV9SRVNFUlZFRF9NSU4pIHsN Cj4gPiArICAgIFRlc3RCaXQgPSBCSVQ2MjsNCj4gPiArICB9IGVsc2UgaWYgKE1lbW9yeVR5cGUg PCBFZmlNYXhNZW1vcnlUeXBlKSB7DQo+ID4gKyAgICBUZXN0Qml0ID0gTFNoaWZ0VTY0ICgxLCBN ZW1vcnlUeXBlKTsNCj4gPiArICB9IGVsc2UgaWYgKE1lbW9yeVR5cGUgPT0gRWZpTWF4TWVtb3J5 VHlwZSkgew0KPiA+ICsgICAgVGVzdEJpdCA9IChVSU5UNjQpLTE7DQo+ID4gKyAgfSBlbHNlIHsN Cj4gPiArICAgIFRlc3RCaXQgPSAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuICgo Q29uZmlnQml0ICYgVGVzdEJpdCkgIT0gMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIENoZWNrIHRvIHNlZSBpZiB0aGUgcG9vbCBhdCB0aGUgZ2l2ZW4gYWRkcmVzcyBzaG91bGQg YmUgZ3VhcmRlZCBvciBub3QuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1lbW9yeVR5cGUg ICAgICBQb29sIHR5cGUgdG8gY2hlY2suDQo+ID4gKw0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRS VUUgIFRoZSBnaXZlbiB0eXBlIG9mIHBvb2wgc2hvdWxkIGJlIGd1YXJkZWQuDQo+ID4gKyAgQHJl dHVybiBGQUxTRSBUaGUgZ2l2ZW4gdHlwZSBvZiBwb29sIHNob3VsZCBub3QgYmUgZ3VhcmRlZC4N Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArSXNQb29sVHlwZVRvR3VhcmQgKA0KPiA+ICsg IElOIEVGSV9NRU1PUllfVFlQRSAgICAgICAgTWVtb3J5VHlwZQ0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIHJldHVybiBJc01lbW9yeVR5cGVUb0d1YXJkIChNZW1vcnlUeXBlLCBBbGxvY2F0ZUFu eVBhZ2VzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVUFSRF9IRUFQX1RZ UEVfUE9PTCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIHRvIHNlZSBp ZiB0aGUgcGFnZSBhdCB0aGUgZ2l2ZW4gYWRkcmVzcyBzaG91bGQgYmUgZ3VhcmRlZCBvciBub3Qu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1lbW9yeVR5cGUgICAgICBQYWdlIHR5cGUgdG8g Y2hlY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgQWxsb2NhdGVUeXBlICAgIEFsbG9jYXRpb24gdHlw ZSB0byBjaGVjay4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUUlVFICBUaGUgZ2l2ZW4gdHlwZSBv ZiBwYWdlIHNob3VsZCBiZSBndWFyZGVkLg0KPiA+ICsgIEByZXR1cm4gRkFMU0UgVGhlIGdpdmVu IHR5cGUgb2YgcGFnZSBzaG91bGQgbm90IGJlIGd1YXJkZWQuDQo+ID4gKyoqLw0KPiA+ICtCT09M RUFODQo+ID4gK0lzUGFnZVR5cGVUb0d1YXJkICgNCj4gPiArICBJTiBFRklfTUVNT1JZX1RZUEUg ICAgICAgIE1lbW9yeVR5cGUsDQo+ID4gKyAgSU4gRUZJX0FMTE9DQVRFX1RZUEUgICAgICBBbGxv Y2F0ZVR5cGUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gSXNNZW1vcnlUeXBlVG9H dWFyZCAoTWVtb3J5VHlwZSwgQWxsb2NhdGVUeXBlLA0KPiBHVUFSRF9IRUFQX1RZUEVfUEFHRSk7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNldCBoZWFkIEd1YXJkIGFuZCB0YWls IEd1YXJkIGZvciB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBNZW1vcnkgICAgICAgICAgQmFzZSBhZGRyZXNzIG9mIG1lbW9yeSB0byBzZXQgZ3VhcmQg Zm9yLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mUGFnZXMgICBNZW1vcnkgc2l6ZSBpbiBw YWdlcy4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lEDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ ID4gK1NldEd1YXJkRm9yTWVtb3J5ICgNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAg IE1lbW9yeSwNCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIE51bWJlck9mUGFnZXMN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBHdWFyZFBh Z2U7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gU2V0IHRhaWwgR3VhcmQNCj4gPiArICAv Lw0KPiA+ICsgIEd1YXJkUGFnZSA9IE1lbW9yeSArIEVGSV9QQUdFU19UT19TSVpFIChOdW1iZXJP ZlBhZ2VzKTsNCj4gPiArICBpZiAoIUlzR3VhcmRQYWdlIChHdWFyZFBhZ2UpKSB7DQo+ID4gKyAg ICBTZXRHdWFyZFBhZ2UgKEd1YXJkUGFnZSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBT ZXQgaGVhZCBHdWFyZA0KPiA+ICsgIEd1YXJkUGFnZSA9IE1lbW9yeSAtIEVGSV9QQUdFU19UT19T SVpFICgxKTsNCj4gPiArICBpZiAoIUlzR3VhcmRQYWdlIChHdWFyZFBhZ2UpKSB7DQo+ID4gKyAg ICBTZXRHdWFyZFBhZ2UgKEd1YXJkUGFnZSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0K PiA+ICsgIC8vIE1hcmsgdGhlIG1lbW9yeSByYW5nZSBhcyBHdWFyZGVkDQo+ID4gKyAgLy8NCj4g PiArICBTZXRHdWFyZGVkTWVtb3J5Qml0cyAoTWVtb3J5LCBOdW1iZXJPZlBhZ2VzKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVW5zZXQgaGVhZCBHdWFyZCBhbmQgdGFpbCBHdWFy ZCBmb3IgdGhlIGdpdmVuIG1lbW9yeSByYW5nZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg TWVtb3J5ICAgICAgICAgIEJhc2UgYWRkcmVzcyBvZiBtZW1vcnkgdG8gdW5zZXQgZ3VhcmQgZm9y Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mUGFnZXMgICBNZW1vcnkgc2l6ZSBpbiBwYWdl cy4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lEDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4g K1Vuc2V0R3VhcmRGb3JNZW1vcnkgKA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg TWVtb3J5LA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQYWdlcw0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICBHdWFyZFBhZ2U7 DQo+ID4gKw0KPiA+ICsgIGlmIChOdW1iZXJPZlBhZ2VzID09IDApIHsNCj4gPiArICAgIHJldHVy bjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gSGVhZCBHdWFyZCBtdXN0 IGJlIG9uZSBwYWdlIGJlZm9yZSwgaWYgYW55Lg0KPiA+ICsgIC8vDQo+ID4gKyAgR3VhcmRQYWdl ID0gTWVtb3J5IC0gRUZJX1BBR0VTX1RPX1NJWkUgKDEpOw0KPiA+ICsgIGlmIChJc0hlYWRHdWFy ZCAoR3VhcmRQYWdlKSkgew0KPiA+ICsgICAgaWYgKCFJc01lbW9yeUd1YXJkZWQgKEd1YXJkUGFn ZSAtIEVGSV9QQUdFU19UT19TSVpFICgxKSkpIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAg Ly8gSWYgdGhlIGhlYWQgR3VhcmQgaXMgbm90IGEgdGFpbCBHdWFyZCBvZiBhZGphY2VudCBtZW1v cnkgYmxvY2ssDQo+ID4gKyAgICAgIC8vIHVuc2V0IGl0Lg0KPiA+ICsgICAgICAvLw0KPiA+ICsg ICAgICBVbnNldEd1YXJkUGFnZSAoR3VhcmRQYWdlKTsNCj4gPiArICAgIH0NCj4gPiArICB9IGVs c2UgaWYgKElzTWVtb3J5R3VhcmRlZCAoR3VhcmRQYWdlKSkgew0KPiA+ICsgICAgLy8NCj4gPiAr ICAgIC8vIFBhZ2VzIGJlZm9yZSBtZW1vcnkgdG8gZnJlZSBhcmUgc3RpbGwgaW4gR3VhcmQuIEl0 J3MgYSBwYXJ0aWFsIGZyZWUNCj4gPiArICAgIC8vIGNhc2UuIFR1cm4gZmlyc3QgcGFnZSBvZiBt ZW1vcnkgYmxvY2sgdG8gZnJlZSBpbnRvIGEgbmV3IEd1YXJkLg0KPiA+ICsgICAgLy8NCj4gPiAr ICAgIFNldEd1YXJkUGFnZSAoTWVtb3J5KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gVGFpbCBHdWFyZCBtdXN0IGJlIHRoZSBwYWdlIGFmdGVyIHRoaXMgbWVtb3J5IGJs b2NrIHRvIGZyZWUsIGlmIGFueS4NCj4gPiArICAvLw0KPiA+ICsgIEd1YXJkUGFnZSA9IE1lbW9y eSArIEVGSV9QQUdFU19UT19TSVpFIChOdW1iZXJPZlBhZ2VzKTsNCj4gPiArICBpZiAoSXNUYWls R3VhcmQgKEd1YXJkUGFnZSkpIHsNCj4gPiArICAgIGlmICghSXNNZW1vcnlHdWFyZGVkIChHdWFy ZFBhZ2UgKyBFRklfUEFHRVNfVE9fU0laRSAoMSkpKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAg ICAgIC8vIElmIHRoZSB0YWlsIEd1YXJkIGlzIG5vdCBhIGhlYWQgR3VhcmQgb2YgYWRqYWNlbnQg bWVtb3J5IGJsb2NrLA0KPiA+ICsgICAgICAvLyBmcmVlIGl0OyBvdGhlcndpc2UsIGtlZXAgaXQu DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFVuc2V0R3VhcmRQYWdlIChHdWFyZFBhZ2UpOw0K PiA+ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSBpZiAoSXNNZW1vcnlHdWFyZGVkIChHdWFyZFBhZ2Up KSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gUGFnZXMgYWZ0ZXIgbWVtb3J5IHRvIGZyZWUg YXJlIHN0aWxsIGluIEd1YXJkLiBJdCdzIGEgcGFydGlhbCBmcmVlDQo+ID4gKyAgICAvLyBjYXNl LiBXZSBuZWVkIHRvIGtlZXAgb25lIHBhZ2UgdG8gYmUgYSBoZWFkIEd1YXJkLg0KPiA+ICsgICAg Ly8NCj4gPiArICAgIFNldEd1YXJkUGFnZSAoR3VhcmRQYWdlIC0gRUZJX1BBR0VTX1RPX1NJWkUg KDEpKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gTm8gbWF0dGVyIHdo YXQsIHdlIGp1c3QgY2xlYXIgdGhlIG1hcmsgb2YgdGhlIEd1YXJkZWQgbWVtb3J5Lg0KPiA+ICsg IC8vDQo+ID4gKyAgQ2xlYXJHdWFyZGVkTWVtb3J5Qml0cyhNZW1vcnksIE51bWJlck9mUGFnZXMp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBBZGp1c3QgYWRkcmVzcyBvZiBmcmVl IG1lbW9yeSBhY2NvcmRpbmcgdG8gZXhpc3RpbmcgYW5kL29yIHJlcXVpcmVkIEd1YXJkLg0KPiA+ ICsNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgdGhlcmUncmUgZXhpc3Rpbmcg R3VhcmQgcGFnZXMgb2YgYWRqYWNlbnQNCj4gPiArICBtZW1vcnkgYmxvY2tzLCBhbmQgdHJ5IHRv IHVzZSBpdCBhcyB0aGUgR3VhcmQgcGFnZSBvZiB0aGUgbWVtb3J5IHRvIGJlDQo+ID4gKyAgYWxs b2NhdGVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBTdGFydCAgICAgICAgICAgU3RhcnQg YWRkcmVzcyBvZiBmcmVlIG1lbW9yeSBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBTaXplICAg ICAgICAgICAgU2l6ZSBvZiBmcmVlIG1lbW9yeSBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBT aXplUmVxdWVzdGVkICAgU2l6ZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUuDQo+ID4gKw0KPiA+ICsg IEByZXR1cm4gVGhlIGVuZCBhZGRyZXNzIG9mIG1lbW9yeSBibG9jayBmb3VuZC4NCj4gPiArICBA cmV0dXJuIDAgaWYgbm8gZW5vdWdoIHNwYWNlIGZvciB0aGUgcmVxdWlyZWQgc2l6ZSBvZiBtZW1v cnkgYW5kIGl0cyBHdWFyZC4NCj4gPiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ICtBZGp1c3RNZW1v cnlTICgNCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICBTdGFydCwNCj4gPiArICBJ TiBVSU5UNjQgICAgICAgICAgICAgICAgICBTaXplLA0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAg ICAgICAgICAgIFNpemVSZXF1ZXN0ZWQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UNjQg IFRhcmdldDsNCj4gPiArDQo+ID4gKyAgVGFyZ2V0ID0gU3RhcnQgKyBTaXplIC0gU2l6ZVJlcXVl c3RlZDsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBBdCBsZWFzdCBvbmUgbW9yZSBwYWdl IG5lZWRlZCBmb3IgR3VhcmQgcGFnZS4NCj4gPiArICAvLw0KPiA+ICsgIGlmIChTaXplIDwgKFNp emVSZXF1ZXN0ZWQgKyBFRklfUEFHRVNfVE9fU0laRSAoMSkpKSB7DQo+ID4gKyAgICByZXR1cm4g MDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICghSXNHdWFyZFBhZ2UgKFN0YXJ0ICsgU2l6 ZSkpIHsNCj4gPiArICAgIC8vIE5vIEd1YXJkIGF0IHRhaWwgdG8gc2hhcmUuIE9uZSBtb3JlIHBh Z2UgaXMgbmVlZGVkLg0KPiA+ICsgICAgVGFyZ2V0IC09IEVGSV9QQUdFU19UT19TSVpFICgxKTsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIE91dCBvZiByYW5nZT8NCj4gPiArICBpZiAoVGFy Z2V0IDwgU3RhcnQpIHsNCj4gPiArICAgIHJldHVybiAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgLy8gQXQgdGhlIGVkZ2U/DQo+ID4gKyAgaWYgKFRhcmdldCA9PSBTdGFydCkgew0KPiA+ICsg ICAgaWYgKCFJc0d1YXJkUGFnZSAoVGFyZ2V0IC0gRUZJX1BBR0VTX1RPX1NJWkUgKDEpKSkgew0K PiA+ICsgICAgICAvLyBObyBlbm91Z2ggc3BhY2UgZm9yIGEgbmV3IGhlYWQgR3VhcmQgaWYgbm8g R3VhcmQgYXQgaGVhZCB0byBzaGFyZS4NCj4gPiArICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICB9 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBPSywgd2UgaGF2ZSBlbm91Z2ggcGFnZXMgZm9y IG1lbW9yeSBhbmQgaXRzIEd1YXJkcy4gUmV0dXJuIHRoZSBFbmQgb2YNCj4gdGhlDQo+ID4gKyAg Ly8gZnJlZSBzcGFjZS4NCj4gPiArICByZXR1cm4gVGFyZ2V0ICsgU2l6ZVJlcXVlc3RlZCAtIDE7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEFkanVzdCB0aGUgc3RhcnQgYWRkcmVz cyBhbmQgbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgYWNjb3JkaW5nIHRvIEd1YXJkLg0KPiA+ICsN Cj4gPiArICBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGtlZXAgdGhlIHNoYXJl ZCBHdWFyZCBwYWdlIHdpdGggYWRqYWNlbnQNCj4gPiArICBtZW1vcnkgYmxvY2sgaWYgaXQncyBz dGlsbCBpbiBndWFyZCwgb3IgZnJlZSBpdCBpZiBubyBtb3JlIHNoYXJpbmcuIEFub3RoZXINCj4g PiArICBpcyB0byByZXNlcnZlIHBhZ2VzIGFzIEd1YXJkIHBhZ2VzIGluIHBhcnRpYWwgcGFnZSBm cmVlIHNpdHVhdGlvbi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gIE1lbW9yeSAgICAg ICAgICBCYXNlIGFkZHJlc3Mgb2YgbWVtb3J5IHRvIGZyZWUuDQo+ID4gKyAgQHBhcmFtW2luLG91 dF0gIE51bWJlck9mUGFnZXMgICBTaXplIG9mIG1lbW9yeSB0byBmcmVlLg0KPiA+ICsNCj4gPiAr ICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0FkanVzdE1lbW9yeUYg KA0KPiA+ICsgIElOIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAqTWVtb3J5LA0KPiA+ICsg IElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAqTnVtYmVyT2ZQYWdlcw0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICBTdGFydDsNCj4gPiArICBFRklf UEhZU0lDQUxfQUREUkVTUyAgTWVtb3J5VG9UZXN0Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICBQYWdlc1RvRnJlZTsNCj4gPiArDQo+ID4gKyAgaWYgKE1lbW9yeSA9PSBOVUxMIHx8IE51 bWJlck9mUGFnZXMgPT0gTlVMTCB8fCAqTnVtYmVyT2ZQYWdlcyA9PSAwKQ0KPiB7DQo+ID4gKyAg ICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGFydCA9ICpNZW1vcnk7DQo+ID4g KyAgUGFnZXNUb0ZyZWUgPSAqTnVtYmVyT2ZQYWdlczsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiAr ICAvLyBIZWFkIEd1YXJkIG11c3QgYmUgb25lIHBhZ2UgYmVmb3JlLCBpZiBhbnkuDQo+ID4gKyAg Ly8NCj4gPiArICBNZW1vcnlUb1Rlc3QgPSBTdGFydCAtIEVGSV9QQUdFU19UT19TSVpFICgxKTsN Cj4gPiArICBpZiAoSXNIZWFkR3VhcmQgKE1lbW9yeVRvVGVzdCkpIHsNCj4gPiArICAgIGlmICgh SXNNZW1vcnlHdWFyZGVkIChNZW1vcnlUb1Rlc3QgLSBFRklfUEFHRVNfVE9fU0laRSAoMSkpKSB7 DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIElmIHRoZSBoZWFkIEd1YXJkIGlzIG5vdCBh IHRhaWwgR3VhcmQgb2YgYWRqYWNlbnQgbWVtb3J5IGJsb2NrLA0KPiA+ICsgICAgICAvLyBmcmVl IGl0OyBvdGhlcndpc2UsIGtlZXAgaXQuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFN0YXJ0 ICAgICAgIC09IEVGSV9QQUdFU19UT19TSVpFICgxKTsNCj4gPiArICAgICAgUGFnZXNUb0ZyZWUg Kz0gMTsNCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2UgaWYgKElzTWVtb3J5R3VhcmRlZCAoTWVt b3J5VG9UZXN0KSkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFBhZ2VzIGJlZm9yZSBtZW1v cnkgdG8gZnJlZSBhcmUgc3RpbGwgaW4gR3VhcmQuIEl0J3MgYSBwYXJ0aWFsIGZyZWUNCj4gPiAr ICAgIC8vIGNhc2UuIFdlIG5lZWQgdG8ga2VlcCBvbmUgcGFnZSB0byBiZSBhIHRhaWwgR3VhcmQu DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgU3RhcnQgICAgICAgKz0gRUZJX1BBR0VTX1RPX1NJWkUg KDEpOw0KPiA+ICsgICAgUGFnZXNUb0ZyZWUgLT0gMTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IC8vDQo+ID4gKyAgLy8gVGFpbCBHdWFyZCBtdXN0IGJlIHRoZSBwYWdlIGFmdGVyIHRoaXMgbWVt b3J5IGJsb2NrIHRvIGZyZWUsIGlmIGFueS4NCj4gPiArICAvLw0KPiA+ICsgIE1lbW9yeVRvVGVz dCA9IFN0YXJ0ICsgRUZJX1BBR0VTX1RPX1NJWkUgKFBhZ2VzVG9GcmVlKTsNCj4gPiArICBpZiAo SXNUYWlsR3VhcmQgKE1lbW9yeVRvVGVzdCkpIHsNCj4gPiArICAgIGlmICghSXNNZW1vcnlHdWFy ZGVkIChNZW1vcnlUb1Rlc3QgKyBFRklfUEFHRVNfVE9fU0laRSAoMSkpKSB7DQo+ID4gKyAgICAg IC8vDQo+ID4gKyAgICAgIC8vIElmIHRoZSB0YWlsIEd1YXJkIGlzIG5vdCBhIGhlYWQgR3VhcmQg b2YgYWRqYWNlbnQgbWVtb3J5IGJsb2NrLA0KPiA+ICsgICAgICAvLyBmcmVlIGl0OyBvdGhlcndp c2UsIGtlZXAgaXQuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFBhZ2VzVG9GcmVlICs9IDE7 DQo+ID4gKyAgICB9DQo+ID4gKyAgfSBlbHNlIGlmIChJc01lbW9yeUd1YXJkZWQgKE1lbW9yeVRv VGVzdCkpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBQYWdlcyBhZnRlciBtZW1vcnkgdG8g ZnJlZSBhcmUgc3RpbGwgaW4gR3VhcmQuIEl0J3MgYSBwYXJ0aWFsIGZyZWUNCj4gPiArICAgIC8v IGNhc2UuIFdlIG5lZWQgdG8ga2VlcCBvbmUgcGFnZSB0byBiZSBhIGhlYWQgR3VhcmQuDQo+ID4g KyAgICAvLw0KPiA+ICsgICAgUGFnZXNUb0ZyZWUgLT0gMTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgICpNZW1vcnkgICAgICAgICA9IFN0YXJ0Ow0KPiA+ICsgICpOdW1iZXJPZlBhZ2VzICA9IFBh Z2VzVG9GcmVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBBZGp1c3QgdGhlIGJh c2UgYW5kIG51bWJlciBvZiBwYWdlcyB0byByZWFsbHkgYWxsb2NhdGUgYWNjb3JkaW5nIHRvIEd1 YXJkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW4sb3V0XSAgTWVtb3J5ICAgICAgICAgIEJhc2Ug YWRkcmVzcyBvZiBmcmVlIG1lbW9yeS4NCj4gPiArICBAcGFyYW1baW4sb3V0XSAgTnVtYmVyT2ZQ YWdlcyAgIFNpemUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJu IFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0FkanVzdE1lbW9yeUEgKA0KPiA+ICsg IElOIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAqTWVtb3J5LA0KPiA+ICsgIElOIE9VVCBV SU5UTiAgICAgICAgICAgICAgICAgICAqTnVtYmVyT2ZQYWdlcw0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIC8vDQo+ID4gKyAgLy8gRmluZEZyZWVQYWdlcygpIGhhcyBhbHJlYWR5IHRha2VuIHRo ZSBHdWFyZCBpbnRvIGFjY291bnQuIEl0J3Mgc2FmZSB0bw0KPiA+ICsgIC8vIGFkanVzdCB0aGUg c3RhcnQgYWRkcmVzcyBhbmQvb3IgbnVtYmVyIG9mIHBhZ2VzIGhlcmUsIHRvIG1ha2Ugc3VyZSB0 aGF0DQo+ID4gKyAgLy8gdGhlIEd1YXJkcyBhcmUgYWxzbyAiYWxsb2NhdGVkIi4NCj4gPiArICAv Lw0KPiA+ICsgIGlmICghSXNHdWFyZFBhZ2UgKCpNZW1vcnkgKyBFRklfUEFHRVNfVE9fU0laRSAo Kk51bWJlck9mUGFnZXMpKSkgew0KPiA+ICsgICAgLy8gTm8gdGFpbCBHdWFyZCwgYWRkIG9uZS4N Cj4gPiArICAgICpOdW1iZXJPZlBhZ2VzICs9IDE7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBp ZiAoIUlzR3VhcmRQYWdlICgqTWVtb3J5IC0gRUZJX1BBR0VfU0laRSkpIHsNCj4gPiArICAgIC8v IE5vIGhlYWQgR3VhcmQsIGFkZCBvbmUuDQo+ID4gKyAgICAqTWVtb3J5ICAgICAgICAtPSBFRklf UEFHRV9TSVpFOw0KPiA+ICsgICAgKk51bWJlck9mUGFnZXMgKz0gMTsNCj4gPiArICB9DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEFkanVzdCB0aGUgcG9vbCBoZWFkIHBvc2l0aW9u IHRvIG1ha2Ugc3VyZSB0aGUgR3VhcmQgcGFnZSBpcyBhZGphdmVudCB0bw0KPiA+ICsgIHBvb2wg dGFpbCBvciBwb29sIGhlYWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1lbW9yeSAgICBC YXNlIGFkZHJlc3Mgb2YgbWVtb3J5IGFsbG9jYXRlZC4NCj4gPiArICBAcGFyYW1baW5dICBOb1Bh Z2VzICAgTnVtYmVyIG9mIHBhZ2VzIGFjdHVhbGx5IGFsbG9jYXRlZC4NCj4gPiArICBAcGFyYW1b aW5dICBTaXplICAgICAgU2l6ZSBvZiBtZW1vcnkgcmVxdWVzdGVkLg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAocGx1cyBwb29sIGhlYWQvdGFpbCBvdmVyaGVhZCkNCj4gPiArDQo+ID4g KyAgQHJldHVybiBBZGRyZXNzIG9mIHBvb2wgaGVhZC4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0K PiA+ICtBZGp1c3RQb29sSGVhZEEgKA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg IE1lbW9yeSwNCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICBOb1BhZ2VzLA0KPiA+ ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgIFNpemUNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBpZiAoKFBjZEdldDggKFBjZEhlYXBHdWFyZFByb3BlcnR5TWFzaykgJiBCSVQ3KSAhPSAw KSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gUG9vbCBoZWFkIGlzIHB1dCBuZWFyIHRoZSBo ZWFkIEd1YXJkDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgcmV0dXJuIChWT0lEICopKFVJTlROKU1l bW9yeTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUG9vbCBoZWFkIGlz IHB1dCBuZWFyIHRoZSB0YWlsIEd1YXJkDQo+ID4gKyAgLy8NCj4gPiArICByZXR1cm4gKFZPSUQg KikoVUlOVE4pKE1lbW9yeSArIEVGSV9QQUdFU19UT19TSVpFIChOb1BhZ2VzKSAtIFNpemUpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXQgdGhlIHBhZ2UgYmFzZSBhZGRyZXNz IGFjY29yZGluZyB0byBwb29sIGhlYWQgYWRkcmVzcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgTWVtb3J5ICAgIEhlYWQgYWRkcmVzcyBvZiBwb29sIHRvIGZyZWUuDQo+ID4gKw0KPiA+ICsg IEByZXR1cm4gQWRkcmVzcyBvZiBwb29sIGhlYWQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4g PiArQWRqdXN0UG9vbEhlYWRGICgNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBN ZW1vcnkNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBpZiAoKFBjZEdldDggKFBjZEhlYXBHdWFy ZFByb3BlcnR5TWFzaykgJiBCSVQ3KSAhPSAwKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8g UG9vbCBoZWFkIGlzIHB1dCBuZWFyIHRoZSBoZWFkIEd1YXJkDQo+ID4gKyAgICAvLw0KPiA+ICsg ICAgcmV0dXJuIChWT0lEICopKFVJTlROKU1lbW9yeTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IC8vDQo+ID4gKyAgLy8gUG9vbCBoZWFkIGlzIHB1dCBuZWFyIHRoZSB0YWlsIEd1YXJkDQo+ID4g KyAgLy8NCj4gPiArICByZXR1cm4gKFZPSUQgKikoVUlOVE4pKE1lbW9yeSAmIH5FRklfUEFHRV9N QVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQWxsb2NhdGUgb3IgZnJlZSBn dWFyZGVkIG1lbW9yeS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgU3RhcnQgICAgICAgICAg IFN0YXJ0IGFkZHJlc3Mgb2YgbWVtb3J5IHRvIGFsbG9jYXRlIG9yIGZyZWUuDQo+ID4gKyAgQHBh cmFtW2luXSAgTnVtYmVyT2ZQYWdlcyAgIE1lbW9yeSBzaXplIGluIHBhZ2VzLg0KPiA+ICsgIEBw YXJhbVtpbl0gIE5ld1R5cGUgICAgICAgICBNZW1vcnkgdHlwZSB0byBjb252ZXJ0IHRvLg0KPiA+ ICsNCj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0NvcmVDb252ZXJ0UGFnZXNXaXRoR3VhcmQgKA0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAg U3RhcnQsDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICBOdW1iZXJPZlBhZ2VzLA0KPiA+ICsg IElOIEVGSV9NRU1PUllfVFlQRSAgTmV3VHlwZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlm IChOZXdUeXBlID09IEVmaUNvbnZlbnRpb25hbE1lbW9yeSkgew0KPiA+ICsgICAgQWRqdXN0TWVt b3J5RiAoJlN0YXJ0LCAmTnVtYmVyT2ZQYWdlcyk7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAg IEFkanVzdE1lbW9yeUEgKCZTdGFydCwgJk51bWJlck9mUGFnZXMpOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgcmV0dXJuIENvcmVDb252ZXJ0UGFnZXMoU3RhcnQsIE51bWJlck9mUGFnZXMsIE5l d1R5cGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBIZWxwZXIgZnVuY3Rpb24g dG8gY29udmVydCBhIFVJTlQ2NCB2YWx1ZSBpbiBiaW5hcnkgdG8gYSBzdHJpbmcuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgIFZhbHVlIG9mIGEgVUlOVDY0IGludGVnZXIu DQo+ID4gKyAgQHBhcmFtW291dF0gIEJpblN0cmluZyAgIFN0cmluZyBidWZmZXIgdG8gY29udGFp biB0aGUgY29udmVyc2lvbiByZXN1bHQuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9JRC4NCj4g PiArKiovDQo+ID4gK1ZPSUQNCj4gPiArVWludDY0VG9CaW5TdHJpbmcgKA0KPiA+ICsgIElOICBV SU5UNjQgICAgICBWYWx1ZSwNCj4gPiArICBPVVQgQ0hBUjggICAgICAgKkJpblN0cmluZw0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlROIEluZGV4Ow0KPiA+ICsNCj4gPiArICBpZiAoQmlu U3RyaW5nID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIGZvciAoSW5kZXggPSA2NDsgSW5kZXggPiAwOyAtLUluZGV4KSB7DQo+ID4gKyAgICBCaW5T dHJpbmdbSW5kZXggLSAxXSA9ICcwJyArIChWYWx1ZSAmIDEpOw0KPiA+ICsgICAgVmFsdWUgPSBS U2hpZnRVNjQgKFZhbHVlLCAxKTsNCj4gPiArICB9DQo+ID4gKyAgQmluU3RyaW5nWzY0XSA9ICdc MCc7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIER1bXAgdGhlIGd1YXJkZWQgbWVt b3J5IGJpdCBtYXAuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ICtEdW1w R3VhcmRlZE1lbW9yeUJpdG1hcCAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIFVJTlROICAgICBFbnRyaWVzW0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+ ICsgIFVJTlROICAgICBTaGlmdHNbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF07DQo+ID4g KyAgVUlOVE4gICAgIEluZGljZXNbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF07DQo+ID4g KyAgVUlOVDY0ICAgIFRhYmxlc1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsNCj4gPiAr ICBVSU5UNjQgICAgQWRkcmVzc2VzW0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+ ICsgIFVJTlQ2NCAgICBUYWJsZUVudHJ5Ow0KPiA+ICsgIFVJTlQ2NCAgICBBZGRyZXNzOw0KPiA+ ICsgIElOVE4gICAgICBMZXZlbDsNCj4gPiArICBVSU5UTiAgICAgUmVwZWF0WmVybzsNCj4gPiAr ICBDSEFSOCAgICAgU3RyaW5nW0dVQVJERURfSEVBUF9NQVBfRU5UUllfQklUUyArIDFdOw0KPiA+ ICsgIENIQVI4ICAgICAqUnVsZXIxOw0KPiA+ICsgIENIQVI4ICAgICAqUnVsZXIyOw0KPiA+ICsN Cj4gPiArICBpZiAobUd1YXJkZWRNZW1vcnlNYXAgPT0gMCkgew0KPiA+ICsgICAgcmV0dXJuOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUnVsZXIxID0gIiAgICAgICAgICAgICAgIDMgICAgICAg ICAgICAgICAyICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIDAiOw0KPiA+ICsgIFJ1bGVy MiA9DQo+ICJGRURDQkE5ODc2NTQzMjEwRkVEQ0JBOTg3NjU0MzIxMEZFRENCQTk4NzY1NDMyMTBG RURDQkE5ODc2NTQzMg0KPiAxMCI7DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoSEVBUF9HVUFSRF9E RUJVR19MRVZFTCwNCj4gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ig0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBHdWFyZGVkIE1lbW9yeSBCaXRtYXAgIg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PVxyXG4iKSk7DQo+ID4gKyAgREVCVUcgKChIRUFQX0dVQVJEX0RFQlVHX0xF VkVMLCAiICAgICAgICAgICAgICAgICAgJWFcclxuIiwgUnVsZXIxKSk7DQo+ID4gKyAgREVCVUcg KChIRUFQX0dVQVJEX0RFQlVHX0xFVkVMLCAiICAgICAgICAgICAgICAgICAgJWFcclxuIiwgUnVs ZXIyKSk7DQo+ID4gKw0KPiA+ICsgIENvcHlNZW0gKEVudHJpZXMsIG1MZXZlbE1hc2ssIHNpemVv ZiAoRW50cmllcykpOw0KPiA+ICsgIENvcHlNZW0gKFNoaWZ0cywgbUxldmVsU2hpZnQsIHNpemVv ZiAoU2hpZnRzKSk7DQo+ID4gKw0KPiA+ICsgIFNldE1lbSAoSW5kaWNlcywgc2l6ZW9mKEluZGlj ZXMpLCAwKTsNCj4gPiArICBTZXRNZW0gKFRhYmxlcywgc2l6ZW9mKFRhYmxlcyksIDApOw0KPiA+ ICsgIFNldE1lbSAoQWRkcmVzc2VzLCBzaXplb2YoQWRkcmVzc2VzKSwgMCk7DQo+ID4gKw0KPiA+ ICsgIExldmVsICAgICAgICAgPSBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIIC0gbU1hcExl dmVsOw0KPiA+ICsgIFRhYmxlc1tMZXZlbF0gPSBtR3VhcmRlZE1lbW9yeU1hcDsNCj4gPiArICBB ZGRyZXNzICAgICAgID0gMDsNCj4gPiArICBSZXBlYXRaZXJvICAgID0gMDsNCj4gPiArDQo+ID4g KyAgd2hpbGUgKFRSVUUpIHsNCj4gPiArICAgIGlmIChJbmRpY2VzW0xldmVsXSA+IEVudHJpZXNb TGV2ZWxdKSB7DQo+ID4gKw0KPiA+ICsgICAgICBUYWJsZXNbTGV2ZWxdID0gMDsNCj4gPiArICAg ICAgTGV2ZWwgICAgICAgIC09IDE7DQo+ID4gKyAgICAgIFJlcGVhdFplcm8gICAgPSAwOw0KPiA+ ICsNCj4gPiArICAgICAgREVCVUcgKCgNCj4gPiArICAgICAgICBIRUFQX0dVQVJEX0RFQlVHX0xF VkVMLA0KPiA+ICsgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSINCj4gPiArICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT1cclxuIg0KPiA+ICsgICAgICAgICkpOw0KPiA+ICsNCj4gPiArICAgIH0gZWxzZSB7DQo+ ID4gKw0KPiA+ICsgICAgICBUYWJsZUVudHJ5ICA9ICgoVUlOVDY0ICopKFVJTlROKVRhYmxlc1tM ZXZlbF0pW0luZGljZXNbTGV2ZWxdXTsNCj4gPiArICAgICAgQWRkcmVzcyAgICAgPSBBZGRyZXNz ZXNbTGV2ZWxdOw0KPiA+ICsNCj4gPiArICAgICAgaWYgKFRhYmxlRW50cnkgPT0gMCkgew0KPiA+ ICsNCj4gPiArICAgICAgICBpZiAoTGV2ZWwgPT0gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBU SCAtIDEpIHsNCj4gPiArICAgICAgICAgIGlmIChSZXBlYXRaZXJvID09IDApIHsNCj4gPiArICAg ICAgICAgICAgVWludDY0VG9CaW5TdHJpbmcoVGFibGVFbnRyeSwgU3RyaW5nKTsNCj4gPiArICAg ICAgICAgICAgREVCVUcgKChIRUFQX0dVQVJEX0RFQlVHX0xFVkVMLCAiJTAxNmx4OiAlYVxyXG4i LCBBZGRyZXNzLA0KPiBTdHJpbmcpKTsNCj4gPiArICAgICAgICAgIH0gZWxzZSBpZiAoUmVwZWF0 WmVybyA9PSAxKSB7DQo+ID4gKyAgICAgICAgICAgIERFQlVHICgoSEVBUF9HVUFSRF9ERUJVR19M RVZFTCwgIi4uLiAgICAgICAgICAgICA6IC4uLlxyXG4iKSk7DQo+ID4gKyAgICAgICAgICB9DQo+ ID4gKyAgICAgICAgICBSZXBlYXRaZXJvICs9IDE7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgfSBlbHNlIGlmIChMZXZlbCA8IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEgg LSAxKSB7DQo+ID4gKw0KPiA+ICsgICAgICAgIExldmVsICAgICAgICAgICAgKz0gMTsNCj4gPiAr ICAgICAgICBUYWJsZXNbTGV2ZWxdICAgICA9IFRhYmxlRW50cnk7DQo+ID4gKyAgICAgICAgQWRk cmVzc2VzW0xldmVsXSAgPSBBZGRyZXNzOw0KPiA+ICsgICAgICAgIEluZGljZXNbTGV2ZWxdICAg ID0gMDsNCj4gPiArICAgICAgICBSZXBlYXRaZXJvICAgICAgICA9IDA7DQo+ID4gKw0KPiA+ICsg ICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArDQo+ID4g KyAgICAgICAgUmVwZWF0WmVybyA9IDA7DQo+ID4gKyAgICAgICAgVWludDY0VG9CaW5TdHJpbmco VGFibGVFbnRyeSwgU3RyaW5nKTsNCj4gPiArICAgICAgICBERUJVRyAoKEhFQVBfR1VBUkRfREVC VUdfTEVWRUwsICIlMDE2bHg6ICVhXHJcbiIsIEFkZHJlc3MsDQo+IFN0cmluZykpOw0KPiA+ICsN Cj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChMZXZlbCA8IChH VUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIIC0gKElOVE4pbU1hcExldmVsKSkgew0KPiA+ICsg ICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBJbmRpY2VzW0xldmVsXSAr PSAxOw0KPiA+ICsgICAgQWRkcmVzcyA9IChMZXZlbCA9PSAwKSA/IDAgOiBBZGRyZXNzZXNbTGV2 ZWwgLSAxXTsNCj4gPiArICAgIEFkZHJlc3Nlc1tMZXZlbF0gPSBBZGRyZXNzIHwgTFNoaWZ0VTY0 KEluZGljZXNbTGV2ZWxdLCBTaGlmdHNbTGV2ZWxdKTsNCj4gPiArDQo+ID4gKyAgfQ0KPiA+ICt9 DQo+ID4gKw0KPiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBH dWFyZC5oDQo+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFwR3VhcmQuaA0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uYmQ3YWJkN2M1Mw0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBH dWFyZC5oDQo+ID4gQEAgLTAsMCArMSwzOTQgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgRGF0 YSB0eXBlLCBtYWNyb3MgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgb2YgaGVhcCBndWFyZCBmZWF0 dXJlLg0KPiA+ICsNCj4gPiArQ29weXJpZ2h0IChjKSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4gPiArYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ID4g K3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0 aGUgbGljZW5zZSBtYXkgYmUgZm91bmQNCj4gYXQNCj4gPiAraHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiA+ICsNCj4gPiArVEhFIFBST0dSQU0gSVMgRElT VFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ ID4gK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJ VEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4g KyNpZm5kZWYgX0hFQVBHVUFSRF9IXw0KPiA+ICsjZGVmaW5lIF9IRUFQR1VBUkRfSF8NCj4gPiAr DQo+ID4gKy8vDQo+ID4gKy8vIEZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gZGVmaW5lIGFu ZCBhY2Nlc3MgdGhlIGd1YXJkZWQgbWVtb3J5DQo+IGJpdG1hcA0KPiA+ICsvLyB0YWJsZS4NCj4g PiArLy8NCj4gPiArLy8gVG8gc2ltcGxpZnkgdGhlIGFjY2VzcyBhbmQgcmVkdWNlIHRoZSBtZW1v cnkgdXNlZCBmb3IgdGhpcyB0YWJsZSwgdGhlDQo+ID4gKy8vIHRhYmxlIGlzIGNvbnN0cnVjdGVk IGluIHRoZSBzaW1pbGFyIHdheSBhcyBwYWdlIHRhYmxlIHN0cnVjdHVyZSBidXQgaW4NCj4gPiAr Ly8gcmV2ZXJzZSBkaXJlY3Rpb24sIGkuZS4gZnJvbSBib3R0b20gZ3Jvd2luZyB1cCB0byB0b3Au DQo+ID4gKy8vDQo+ID4gKy8vICAgIC0gMS1iaXQgdHJhY2tzIDEgcGFnZSAoNEtCKQ0KPiA+ICsv LyAgICAtIDEtVUlOVDY0IG1hcCBlbnRyeSB0cmFja3MgMjU2S0IgbWVtb3J5DQo+ID4gKy8vICAg IC0gMUstVUlOVDY0IG1hcCB0YWJsZSB0cmFja3MgMjU2TUIgbWVtb3J5DQo+ID4gKy8vICAgIC0g Rml2ZSBsZXZlbHMgb2YgdGFibGVzIGNhbiB0cmFjayBhbnkgYWRkcmVzcyBvZiBtZW1vcnkgb2Yg NjQtYml0DQo+ID4gKy8vICAgICAgc3lzdGVtLCBsaWtlIGJlbG93Lg0KPiA+ICsvLw0KPiA+ICsv LyAgICAgICA1MTIgICAqICAgNTEyICAgKiAgIDUxMiAgICogICA1MTIgICAgKiAgICAxSyAgICog IDY0YiAqICAgICA0Sw0KPiA+ICsvLyAgICAxMTExMTExMTEgMTExMTExMTExIDExMTExMTExMSAx MTExMTExMTEgMTExMTExMTExMSAxMTExMTENCj4gMTExMTExMTExMTExDQo+ID4gKy8vICAgIDYz ICAgICAgICA1NCAgICAgICAgNDUgICAgICAgIDM2ICAgICAgICAyNyAgICAgICAgIDE3ICAgICAx MSAgICAgICAgIDANCj4gPiArLy8gICAgICAgOWIgICAgICAgIDliICAgICAgICA5YiAgICAgICAg OWIgICAgICAgICAxMGIgICAgICA2YiAgICAgICAxMmINCj4gPiArLy8gICAgICAgTDAgICAtPiAg IEwxICAgLT4gICBMMiAgIC0+ICAgTDMgICAtPiAgICBMNCAgIC0+IGJpdHMgIC0+ICBwYWdlDQo+ ID4gKy8vICAgICAgMUZGICAgICAgIDFGRiAgICAgICAxRkYgICAgICAgMUZGICAgICAgICAgM0ZG ICAgICAgM0YgICAgICAgRkZGDQo+ID4gKy8vDQo+ID4gKy8vIEw0IHRhYmxlIGhhcyAxSyAqIHNp emVvZihVSU5UNjQpID0gOEsgKDItcGFnZSksIHdoaWNoIGNhbiB0cmFjayAyNTZNQg0KPiA+ICsv LyBtZW1vcnkuIEVhY2ggdGFibGUgb2YgTDAtTDMgd2lsbCBiZSBhbGxvY2F0ZWQgd2hlbiBpdHMg bWVtb3J5IGFkZHJlc3MNCj4gPiArLy8gcmFuZ2UgaXMgdG8gYmUgdHJhY2tlZC4gT25seSAxLXBh Z2Ugd2lsbCBiZSBhbGxvY2F0ZWQgZWFjaCB0aW1lLiBUaGlzDQo+ID4gKy8vIGNhbiBzYXZlIG1l bW9yaWVzIHVzZWQgdG8gZXN0YWJsaXNoIHRoaXMgbWFwIHRhYmxlLg0KPiA+ICsvLw0KPiA+ICsv LyBGb3IgYSBub3JtYWwgY29uZmlndXJhdGlvbiBvZiBzeXN0ZW0gd2l0aCA0RyBtZW1vcnksIHR3 byBsZXZlbHMgb2YgdGFibGVzDQo+ID4gKy8vIGNhbiB0cmFjayB0aGUgd2hvbGUgbWVtb3J5LCBi ZWNhdXNlIHR3byBsZXZlbHMgKEwzK0w0KSBvZiBtYXAgdGFibGVzDQo+IGhhdmUNCj4gPiArLy8g YWxyZWFkeSBjb3ZlcnJlZCAzNy1iaXQgb2YgbWVtb3J5IGFkZHJlc3MuIEFuZCBmb3IgYSBub3Jt YWwgVUVGSSBCSU9TLA0KPiA+ICsvLyBsZXNzIHRoYW4gMTI4TSBtZW1vcnkgd291bGQgYmUgY29u c3VtZWQgZHVyaW5nIGJvb3QuIFRoYXQgbWVhbnMgd2UNCj4ganVzdA0KPiA+ICsvLyBuZWVkDQo+ ID4gKy8vDQo+ID4gKy8vICAgICAgICAgIDEtcGFnZSAoTDMpICsgMi1wYWdlIChMNCkNCj4gPiAr Ly8NCj4gPiArLy8gbWVtb3J5ICgzIHBhZ2VzKSB0byB0cmFjayB0aGUgbWVtb3J5IGFsbG9jYXRp b24gd29ya3MuIEluIHRoaXMgY2FzZSwNCj4gPiArLy8gdGhlcmUncyBubyBuZWVkIHRvIHNldHVw IEwwLUwyIHRhYmxlcy4NCj4gPiArLy8NCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIEVhY2ggZW50 cnkgb2NjdXBpZXMgOEIvNjRiLiAxLXBhZ2UgY2FuIGhvbGQgNTEyIGVudHJpZXMsIHdoaWNoIHNw YW5zIDkNCj4gPiArLy8gYml0cyBpbiBhZGRyZXNzLiAoNTEyID0gMSA8PCA5KQ0KPiA+ICsvLw0K PiA+ICsjZGVmaW5lIEJZVEVfTEVOR1RIX1NISUZUICAgICAgICAgICAgICAgICAgIDMgICAgICAg ICAgICAgLy8gKDggPSAxIDw8IDMpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEdVQVJERURfSEVBUF9N QVBfVEFCTEVfRU5UUllfU0hJRlQgIFwNCj4gPiArICAgICAgICAoRUZJX1BBR0VfU0hJRlQgLSBC WVRFX0xFTkdUSF9TSElGVCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgR1VBUkRFRF9IRUFQX01BUF9U QUJMRV9ERVBUSCAgICAgICAgNQ0KPiA+ICsNCj4gPiArLy8gVXNlIFVJTlQ2NF9pbmRleCArIGJp dF9pbmRleF9vZl9VSU5UNjQgdG8gbG9jYXRlIHRoZSBiaXQgaW4gbWF5DQo+ID4gKyNkZWZpbmUg R1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRfU0hJRlQgICAgNiAgICAgICAgICAgICAvLyAoNjQg PSAxIDw8IDYpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklU UyAgICAgICAgIFwNCj4gPiArICAgICAgICAoMSA8PCBHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJ VF9TSElGVCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CWVRF UyAgICAgICAgXA0KPiA+ICsgICAgICAgIChHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVFMgLyA4 KQ0KPiA+ICsNCj4gPiArLy8gTDQgdGFibGUgYWRkcmVzcyB3aWR0aDogNjQgLSA5ICogNCAtIDYg LSAxMiA9IDEwYg0KPiA+ICsjZGVmaW5lIEdVQVJERURfSEVBUF9NQVBfRU5UUllfU0hJRlQgICAg ICAgICAgICAgIFwNCj4gPiArICAgICAgICAoR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRTICAg ICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgIC0gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9FTlRS WV9TSElGVCAqIDQgXA0KPiA+ICsgICAgICAgICAtIEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklU X1NISUZUICAgICAgIFwNCj4gPiArICAgICAgICAgLSBFRklfUEFHRV9TSElGVCkNCj4gPiArDQo+ ID4gKy8vIEw0IHRhYmxlIGFkZHJlc3MgbWFzazogKDEgPDwgMTAgLSAxKSA9IDB4M0ZGDQo+ID4g KyNkZWZpbmUgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9NQVNLICAgICAgICAgICAgICAgXA0KPiA+ ICsgICAgICAgICgoMSA8PCBHVUFSREVEX0hFQVBfTUFQX0VOVFJZX1NISUZUKSAtIDEpDQo+ID4g Kw0KPiA+ICsvLyBTaXplIG9mIGVhY2ggTDQgdGFibGU6ICgxIDw8IDEwKSAqIDggPSA4S0IgPSAy LXBhZ2UNCj4gPiArI2RlZmluZSBHVUFSREVEX0hFQVBfTUFQX1NJWkUgICAgICAgICAgICAgICAg ICAgICBcDQo+ID4gKyAgICAgICAgKCgxIDw8IEdVQVJERURfSEVBUF9NQVBfRU5UUllfU0hJRlQp ICoNCj4gR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CWVRFUykNCj4gPiArDQo+ID4gKy8vIE1lbW9y eSBzaXplIHRyYWNrZWQgYnkgb25lIEw0IHRhYmxlOiA4S0IgKiA4ICogNEtCID0gMjU2TUINCj4g PiArI2RlZmluZSBHVUFSREVEX0hFQVBfTUFQX1VOSVRfU0laRSAgICAgICAgICAgICAgICBcDQo+ ID4gKyAgICAgICAgKEdVQVJERURfSEVBUF9NQVBfU0laRSAqIDggKiBFRklfUEFHRV9TSVpFKQ0K PiA+ICsNCj4gPiArLy8gTDQgdGFibGUgZW50cnkgbnVtYmVyOiA4S0IgLyA4ID0gMTAyNA0KPiA+ ICsjZGVmaW5lIEdVQVJERURfSEVBUF9NQVBfRU5UUklFU19QRVJfVU5JVCAgICAgICAgIFwNCj4g PiArICAgICAgICAoR1VBUkRFRF9IRUFQX01BUF9TSVpFIC8gR1VBUkRFRF9IRUFQX01BUF9FTlRS WV9CWVRFUykNCj4gPiArDQo+ID4gKy8vIEw0IHRhYmxlIGVudHJ5IGluZGV4aW5nDQo+ID4gKyNk ZWZpbmUgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9JTkRFWChBZGRyZXNzKSAgICAgICAgICAgICAg ICAgICAgICAgXA0KPiA+ICsgICAgICAgIChSU2hpZnRVNjQgKEFkZHJlc3MsIEVGSV9QQUdFX1NI SUZUICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArIEdVQVJERURfSEVBUF9NQVBfRU5UUllfQklUX1NISUZUKSAgICBcDQo+ID4gKyAg ICAgICAgICYgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9NQVNLKQ0KPiA+ICsNCj4gPiArLy8gTDQg dGFibGUgZW50cnkgYml0IGluZGV4aW5nDQo+ID4gKyNkZWZpbmUgR1VBUkRFRF9IRUFQX01BUF9F TlRSWV9CSVRfSU5ERVgoQWRkcmVzcykgICAgICAgXA0KPiA+ICsgICAgICAgIChSU2hpZnRVNjQg KEFkZHJlc3MsIEVGSV9QQUdFX1NISUZUKSAgICAgICAgICAgIFwNCj4gPiArICAgICAgICAgJiAo KDEgPDwgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRfU0hJRlQpIC0gMSkpDQo+ID4gKw0KPiA+ ICsvLw0KPiA+ICsvLyBUb3RhbCBiaXRzIChwYWdlcykgdHJhY2tlZCBieSBvbmUgTDQgdGFibGUg KDY1NTM2LWJpdCkNCj4gPiArLy8NCj4gPiArI2RlZmluZSBHVUFSREVEX0hFQVBfTUFQX0JJVFMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiA+ICsgICAgICAgICgxIDw8IChHVUFS REVEX0hFQVBfTUFQX0VOVFJZX1NISUZUICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgICAgICAg ICAgICAgICsgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRfU0hJRlQpKQ0KPiA+ICsNCj4gPiAr Ly8NCj4gPiArLy8gQml0IGluZGV4aW5nIGluc2lkZSB0aGUgd2hvbGUgTDQgdGFibGUgKDAgLSA2 NTUzNSkNCj4gPiArLy8NCj4gPiArI2RlZmluZSBHVUFSREVEX0hFQVBfTUFQX0JJVF9JTkRFWChB ZGRyZXNzKSAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAgICAgICAoUlNoaWZ0VTY0IChB ZGRyZXNzLCBFRklfUEFHRV9TSElGVCkgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAgICAg ICAgJiAoKDEgPDwgKEdVQVJERURfSEVBUF9NQVBfRU5UUllfU0hJRlQgICAgICAgICAgICAgICAg IFwNCj4gPiArICAgICAgICAgICAgICAgICAgICsgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRf U0hJRlQpKSAtIDEpKQ0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gTWVtb3J5IGFkZHJlc3MgYml0 IHdpZHRoIHRyYWNrZWQgYnkgTDQgdGFibGU6IDEwICsgNiArIDEyID0gMjgNCj4gPiArLy8NCj4g PiArI2RlZmluZSBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX1NISUZUICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgKEdVQVJERURfSEVBUF9NQVBfRU5U UllfU0hJRlQgKw0KPiBHVUFSREVEX0hFQVBfTUFQX0VOVFJZX0JJVF9TSElGVCAgXA0KPiA+ICsg ICAgICAgICArIEVGSV9QQUdFX1NISUZUKQ0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gTWFjcm8g dXNlZCB0byBpbml0aWFsaXplIHRoZSBsb2NhbCBhcnJheSB2YXJpYWJsZSBmb3IgbWFwIHRhYmxl IHRyYXZlcnNpbmcNCj4gPiArLy8gezU1LCA0NiwgMzcsIDI4LCAxOH0NCj4gPiArLy8NCj4gPiAr I2RlZmluZSBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIX1NISUZUUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAg IEdVQVJERURfSEVBUF9NQVBfVEFCTEVfU0hJRlQgKw0KPiBHVUFSREVEX0hFQVBfTUFQX1RBQkxF X0VOVFJZX1NISUZUICogMywgIFwNCj4gPiArICAgIEdVQVJERURfSEVBUF9NQVBfVEFCTEVfU0hJ RlQgKw0KPiBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0VOVFJZX1NISUZUICogMiwgIFwNCj4gPiAr ICAgIEdVQVJERURfSEVBUF9NQVBfVEFCTEVfU0hJRlQgKw0KPiBHVUFSREVEX0hFQVBfTUFQX1RB QkxFX0VOVFJZX1NISUZULCAgICAgIFwNCj4gPiArICAgIEdVQVJERURfSEVBUF9NQVBfVEFCTEVf U0hJRlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiAr ICAgIEVGSV9QQUdFX1NISUZUICsgR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRfU0hJRlQgICAg ICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBN YXNrcyB1c2VkIHRvIGV4dHJhY3QgYWRkcmVzcyByYW5nZSBvZiBlYWNoIGxldmVsIG9mIHRhYmxl DQo+ID4gKy8vIHsweDFGRiwgMHgxRkYsIDB4MUZGLCAweDFGRiwgMHgzRkZ9DQo+ID4gKy8vDQo+ ID4gKyNkZWZpbmUgR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF9NQVNLUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4g KyAgICAoMSA8PCBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0VOVFJZX1NISUZUKSAtIDEsICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgICAoMSA8PCBHVUFSREVEX0hFQVBfTUFQX1RB QkxFX0VOVFJZX1NISUZUKSAtIDEsICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAg ICAoMSA8PCBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0VOVFJZX1NISUZUKSAtIDEsICAgICAgICAg ICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgICAoMSA8PCBHVUFSREVEX0hFQVBfTUFQX1RBQkxF X0VOVFJZX1NISUZUKSAtIDEsICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgICAo MSA8PCBHVUFSREVEX0hFQVBfTUFQX0VOVFJZX1NISUZUKSAtIDEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gTWVtb3J5 IHR5cGUgdG8gZ3VhcmQgKG1hdGNoaW5nIHRoZSByZWxhdGVkIFBDRCBkZWZpbml0aW9uKQ0KPiA+ ICsvLw0KPiA+ICsjZGVmaW5lIEdVQVJEX0hFQVBfVFlQRV9QT09MICAgICAgICBCSVQwDQo+ID4g KyNkZWZpbmUgR1VBUkRfSEVBUF9UWVBFX1BBR0UgICAgICAgIEJJVDENCj4gPiArDQo+ID4gKy8v DQo+ID4gKy8vIERlYnVnIG1lc3NhZ2UgbGV2ZWwNCj4gPiArLy8NCj4gPiArI2RlZmluZSBIRUFQ X0dVQVJEX0RFQlVHX0xFVkVMICAoREVCVUdfUE9PTHxERUJVR19QQUdFKQ0KPiA+ICsNCj4gPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICBUYWlsTWFyazsN Cj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgSGVhZE1hcms7DQo+ID4gKyAgRUZJX1BIWVNJ Q0FMX0FERFJFU1MgIEFkZHJlc3M7DQo+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgIExpbms7 DQo+ID4gK30gSEVBUF9HVUFSRF9OT0RFOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW50ZXJu YWwgZnVuY3Rpb24uICBDb252ZXJ0cyBhIG1lbW9yeSByYW5nZSB0byB0aGUgc3BlY2lmaWVkIHR5 cGUuDQo+ID4gKyAgVGhlIHJhbmdlIG11c3QgZXhpc3QgaW4gdGhlIG1lbW9yeSBtYXAuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbSAgU3RhcnQgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgYWRkcmVz cyBvZiB0aGUgcmFuZ2UgTXVzdCBiZSBwYWdlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFsaWduZWQuDQo+ID4gKyAgQHBhcmFtICBOdW1iZXJPZlBhZ2VzICAgICAgICAg IFRoZSBudW1iZXIgb2YgcGFnZXMgdG8gY29udmVydC4NCj4gPiArICBAcGFyYW0gIE5ld1R5cGUg ICAgICAgICAgICAgICAgVGhlIG5ldyB0eXBlIGZvciB0aGUgbWVtb3J5IHJhbmdlLg0KPiA+ICsN Cj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSW52YWxpZCBwYXJhbWV0ZXIu DQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIENvdWxkIG5vdCBmaW5kIGEg ZGVzY3JpcHRvciBjb3ZlciB0aGUNCj4gc3BlY2lmaWVkDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJhbmdlIG9yIGNvbnZlcnRpb24gbm90IGFsbG93ZWQuDQo+ID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBjb252ZXJ0cyB0aGUg bWVtb3J5IHJhbmdlIHRvIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzcGVjaWZpZWQgdHlwZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0NvcmVDb252ZXJ0UGFnZXMgKA0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgU3RhcnQsDQo+ ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICBOdW1iZXJPZlBhZ2VzLA0KPiA+ICsgIElOIEVGSV9N RU1PUllfVFlQRSAgTmV3VHlwZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBB bGxvY2F0ZSBvciBmcmVlIGd1YXJkZWQgbWVtb3J5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICBTdGFydCAgICAgICAgICAgU3RhcnQgYWRkcmVzcyBvZiBtZW1vcnkgdG8gYWxsb2NhdGUgb3Ig ZnJlZS4NCj4gPiArICBAcGFyYW1baW5dICBOdW1iZXJPZlBhZ2VzICAgTWVtb3J5IHNpemUgaW4g cGFnZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAgTmV3VHlwZSAgICAgICAgIE1lbW9yeSB0eXBlIHRv IGNvbnZlcnQgdG8uDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9JRC4NCj4gPiArKiovDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArQ29yZUNvbnZlcnRQYWdlc1dpdGhHdWFyZCAoDQo+ID4gKyAgSU4g VUlOVDY0ICAgICAgICAgICBTdGFydCwNCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgIE51bWJl ck9mUGFnZXMsDQo+ID4gKyAgSU4gRUZJX01FTU9SWV9UWVBFICBOZXdUeXBlDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNldCBoZWFkIEd1YXJkIGFuZCB0YWlsIEd1YXJkIGZv ciB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBNZW1v cnkgICAgICAgICAgQmFzZSBhZGRyZXNzIG9mIG1lbW9yeSB0byBzZXQgZ3VhcmQgZm9yLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mUGFnZXMgICBNZW1vcnkgc2l6ZSBpbiBwYWdlcy4NCj4g PiArDQo+ID4gKyAgQHJldHVybiBWT0lELg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtTZXRH dWFyZEZvck1lbW9yeSAoDQo+ID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICBNZW1vcnks DQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICBOdW1iZXJPZlBhZ2VzDQo+ID4gKyAg KTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVuc2V0IGhlYWQgR3VhcmQgYW5kIHRhaWwgR3Vh cmQgZm9yIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g IE1lbW9yeSAgICAgICAgICBCYXNlIGFkZHJlc3Mgb2YgbWVtb3J5IHRvIHVuc2V0IGd1YXJkIGZv ci4NCj4gPiArICBAcGFyYW1baW5dICBOdW1iZXJPZlBhZ2VzICAgTWVtb3J5IHNpemUgaW4gcGFn ZXMuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9JRC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4g PiArVW5zZXRHdWFyZEZvck1lbW9yeSAoDQo+ID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICBNZW1vcnksDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICBOdW1iZXJPZlBhZ2Vz DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEFkanVzdCB0aGUgYmFzZSBhbmQg bnVtYmVyIG9mIHBhZ2VzIHRvIHJlYWxseSBhbGxvY2F0ZSBhY2NvcmRpbmcgdG8gR3VhcmQuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbixvdXRdICBNZW1vcnkgICAgICAgICAgQmFzZSBhZGRyZXNz IG9mIGZyZWUgbWVtb3J5Lg0KPiA+ICsgIEBwYXJhbVtpbixvdXRdICBOdW1iZXJPZlBhZ2VzICAg U2l6ZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9JRC4N Cj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArQWRqdXN0TWVtb3J5QSAoDQo+ID4gKyAgSU4gT1VU IEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICpNZW1vcnksDQo+ID4gKyAgSU4gT1VUIFVJTlROICAg ICAgICAgICAgICAgICAgICpOdW1iZXJPZlBhZ2VzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIEFkanVzdCB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgbnVtYmVyIG9mIHBhZ2VzIHRv IGZyZWUgYWNjb3JkaW5nIHRvIEd1YXJkLg0KPiA+ICsNCj4gPiArICBUaGUgcHVycG9zZSBvZiB0 aGlzIGZ1bmN0aW9uIGlzIHRvIGtlZXAgdGhlIHNoYXJlZCBHdWFyZCBwYWdlIHdpdGggYWRqYWNl bnQNCj4gPiArICBtZW1vcnkgYmxvY2sgaWYgaXQncyBzdGlsbCBpbiBndWFyZCwgb3IgZnJlZSBp dCBpZiBubyBtb3JlIHNoYXJpbmcuIEFub3RoZXINCj4gPiArICBpcyB0byByZXNlcnZlIHBhZ2Vz IGFzIEd1YXJkIHBhZ2VzIGluIHBhcnRpYWwgcGFnZSBmcmVlIHNpdHVhdGlvbi4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luLG91dF0gIE1lbW9yeSAgICAgICAgICBCYXNlIGFkZHJlc3Mgb2YgbWVt b3J5IHRvIGZyZWUuDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gIE51bWJlck9mUGFnZXMgICBTaXpl IG9mIG1lbW9yeSB0byBmcmVlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoq Lw0KPiA+ICtWT0lEDQo+ID4gK0FkanVzdE1lbW9yeUYgKA0KPiA+ICsgIElOIE9VVCBFRklfUEhZ U0lDQUxfQUREUkVTUyAgICAqTWVtb3J5LA0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAg ICAgICAgICAqTnVtYmVyT2ZQYWdlcw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBBZGp1c3QgYWRkcmVzcyBvZiBmcmVlIG1lbW9yeSBhY2NvcmRpbmcgdG8gZXhpc3RpbmcgYW5k L29yIHJlcXVpcmVkIEd1YXJkLg0KPiA+ICsNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hl Y2sgaWYgdGhlcmUncmUgZXhpc3RpbmcgR3VhcmQgcGFnZXMgb2YgYWRqYWNlbnQNCj4gPiArICBt ZW1vcnkgYmxvY2tzLCBhbmQgdHJ5IHRvIHVzZSBpdCBhcyB0aGUgR3VhcmQgcGFnZSBvZiB0aGUg bWVtb3J5IHRvIGJlDQo+ID4gKyAgYWxsb2NhdGVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICBTdGFydCAgICAgICAgICAgU3RhcnQgYWRkcmVzcyBvZiBmcmVlIG1lbW9yeSBibG9jay4NCj4g PiArICBAcGFyYW1baW5dICBTaXplICAgICAgICAgICAgU2l6ZSBvZiBmcmVlIG1lbW9yeSBibG9j ay4NCj4gPiArICBAcGFyYW1baW5dICBTaXplUmVxdWVzdGVkICAgU2l6ZSBvZiBtZW1vcnkgdG8g YWxsb2NhdGUuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIGVuZCBhZGRyZXNzIG9mIG1lbW9y eSBibG9jayBmb3VuZC4NCj4gPiArICBAcmV0dXJuIDAgaWYgbm8gZW5vdWdoIHNwYWNlIGZvciB0 aGUgcmVxdWlyZWQgc2l6ZSBvZiBtZW1vcnkgYW5kIGl0cyBHdWFyZC4NCj4gPiArKiovDQo+ID4g K1VJTlQ2NA0KPiA+ICtBZGp1c3RNZW1vcnlTICgNCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAg ICAgICAgICBTdGFydCwNCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICBTaXplLA0K PiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgIFNpemVSZXF1ZXN0ZWQNCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwb29sIGF0IHRo ZSBnaXZlbiBhZGRyZXNzIHNob3VsZCBiZSBndWFyZGVkIG9yIG5vdC4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgTWVtb3J5VHlwZSAgICAgIFBvb2wgdHlwZSB0byBjaGVjay4NCj4gPiArDQo+ ID4gKw0KPiA+ICsgIEByZXR1cm4gVFJVRSAgVGhlIGdpdmVuIHR5cGUgb2YgcG9vbCBzaG91bGQg YmUgZ3VhcmRlZC4NCj4gPiArICBAcmV0dXJuIEZBTFNFIFRoZSBnaXZlbiB0eXBlIG9mIHBvb2wg c2hvdWxkIG5vdCBiZSBndWFyZGVkLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtJc1Bv b2xUeXBlVG9HdWFyZCAoDQo+ID4gKyAgSU4gRUZJX01FTU9SWV9UWVBFICAgICAgICBNZW1vcnlU eXBlDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIHRvIHNlZSBpZiB0 aGUgcGFnZSBhdCB0aGUgZ2l2ZW4gYWRkcmVzcyBzaG91bGQgYmUgZ3VhcmRlZCBvciBub3QuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1lbW9yeVR5cGUgICAgICBQYWdlIHR5cGUgdG8gY2hl Y2suDQo+ID4gKyAgQHBhcmFtW2luXSAgQWxsb2NhdGVUeXBlICAgIEFsbG9jYXRpb24gdHlwZSB0 byBjaGVjay4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUUlVFICBUaGUgZ2l2ZW4gdHlwZSBvZiBw YWdlIHNob3VsZCBiZSBndWFyZGVkLg0KPiA+ICsgIEByZXR1cm4gRkFMU0UgVGhlIGdpdmVuIHR5 cGUgb2YgcGFnZSBzaG91bGQgbm90IGJlIGd1YXJkZWQuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFO DQo+ID4gK0lzUGFnZVR5cGVUb0d1YXJkICgNCj4gPiArICBJTiBFRklfTUVNT1JZX1RZUEUgICAg ICAgIE1lbW9yeVR5cGUsDQo+ID4gKyAgSU4gRUZJX0FMTE9DQVRFX1RZUEUgICAgICBBbGxvY2F0 ZVR5cGUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgdG8gc2VlIGlm IHRoZSBwYWdlIGF0IHRoZSBnaXZlbiBhZGRyZXNzIGlzIGd1YXJkZWQgb3Igbm90Lg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgICBUaGUgYWRkcmVzcyB0byBjaGVjayBmb3Iu DQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVFJVRSAgVGhlIHBhZ2UgYXQgQWRkcmVzcyBpcyBndWFy ZGVkLg0KPiA+ICsgIEByZXR1cm4gRkFMU0UgVGhlIHBhZ2UgYXQgQWRkcmVzcyBpcyBub3QgZ3Vh cmRlZC4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0lzTWVtb3J5 R3VhcmRlZCAoDQo+ID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgQWRkcmVzcw0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayB0byBzZWUgaWYgdGhlIHBhZ2Ug YXQgdGhlIGdpdmVuIGFkZHJlc3MgaXMgYSBHdWFyZCBwYWdlIG9yIG5vdC4NCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgICAgVGhlIGFkZHJlc3MgdG8gY2hlY2sgZm9yLg0KPiA+ ICsNCj4gPiArICBAcmV0dXJuIFRSVUUgIFRoZSBwYWdlIGF0IEFkZHJlc3MgaXMgYSBHdWFyZCBw YWdlLg0KPiA+ICsgIEByZXR1cm4gRkFMU0UgVGhlIHBhZ2UgYXQgQWRkcmVzcyBpcyBub3QgYSBH dWFyZCBwYWdlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArSXNH dWFyZFBhZ2UgKA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEFkZHJlc3MNCj4g PiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRHVtcCB0aGUgZ3VhcmRlZCBtZW1vcnkg Yml0IG1hcC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0R1bXBHdWFy ZGVkTWVtb3J5Qml0bWFwICgNCj4gPiArICBWT0lEDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIEFkanVzdCB0aGUgcG9vbCBoZWFkIHBvc2l0aW9uIHRvIG1ha2Ugc3VyZSB0aGUg R3VhcmQgcGFnZSBpcyBhZGphdmVudCB0bw0KPiA+ICsgIHBvb2wgdGFpbCBvciBwb29sIGhlYWQu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1lbW9yeSAgICBCYXNlIGFkZHJlc3Mgb2YgbWVt b3J5IGFsbG9jYXRlZC4NCj4gPiArICBAcGFyYW1baW5dICBOb1BhZ2VzICAgTnVtYmVyIG9mIHBh Z2VzIGFjdHVhbGx5IGFsbG9jYXRlZC4NCj4gPiArICBAcGFyYW1baW5dICBTaXplICAgICAgU2l6 ZSBvZiBtZW1vcnkgcmVxdWVzdGVkLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAocGx1 cyBwb29sIGhlYWQvdGFpbCBvdmVyaGVhZCkNCj4gPiArDQo+ID4gKyAgQHJldHVybiBBZGRyZXNz IG9mIHBvb2wgaGVhZC4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtBZGp1c3RQb29sSGVh ZEEgKA0KPiA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIE1lbW9yeSwNCj4gPiArICBJ TiBVSU5UTiAgICAgICAgICAgICAgICAgICBOb1BhZ2VzLA0KPiA+ICsgIElOIFVJTlROICAgICAg ICAgICAgICAgICAgIFNpemUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0 IHRoZSBwYWdlIGJhc2UgYWRkcmVzcyBhY2NvcmRpbmcgdG8gcG9vbCBoZWFkIGFkZHJlc3MuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1lbW9yeSAgICBIZWFkIGFkZHJlc3Mgb2YgcG9vbCB0 byBmcmVlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIEFkZHJlc3Mgb2YgcG9vbCBoZWFkLg0KPiA+ ICsqKi8NCj4gPiArVk9JRCAqDQo+ID4gK0FkanVzdFBvb2xIZWFkRiAoDQo+ID4gKyAgSU4gRUZJ X1BIWVNJQ0FMX0FERFJFU1MgICAgTWVtb3J5DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK2V4dGVy biBCT09MRUFOIG1Pbkd1YXJkaW5nOw0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdp dCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSW1lbS5oDQo+IGIvTWRlTW9kdWxlUGtnL0Nv cmUvRHhlL01lbS9JbWVtLmgNCj4gPiBpbmRleCBmYjUzZjk1NTc1Li5lNThhNWQ2MmJhIDEwMDY0 NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSW1lbS5oDQo+ID4gKysrIGIv TWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9JbWVtLmgNCj4gPiBAQCAtMSw3ICsxLDcgQEANCj4g PiAgLyoqIEBmaWxlDQo+ID4gICAgRGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucyB0byBhbGxv Y2F0ZSBhbmQgZnJlZSBtZW1vcnkgc3BhY2UuDQo+ID4NCj4gPiAtQ29weXJpZ2h0IChjKSAyMDA2 IC0gMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ ICtDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ID4gIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCj4gPiAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ID4gIHdoaWNoIGFj Y29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5z ZSBtYXkgYmUgZm91bmQNCj4gYXQNCj4gPiBAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVmIHN0cnVj dCB7DQo+ID4gICAgQHBhcmFtICBQb29sVHlwZSAgICAgICAgICAgICAgIFRoZSB0eXBlIG9mIG1l bW9yeSBmb3IgdGhlIG5ldyBwb29sIHBhZ2VzDQo+ID4gICAgQHBhcmFtICBOdW1iZXJPZlBhZ2Vz ICAgICAgICAgIE5vIG9mIHBhZ2VzIHRvIGFsbG9jYXRlDQo+ID4gICAgQHBhcmFtICBBbGlnbm1l bnQgICAgICAgICAgICAgIEJpdHMgdG8gYWxpZ24uDQo+ID4gKyAgQHBhcmFtICBOZWVkR3VhcmQg ICAgICAgICAgICAgIEZsYWcgdG8gaW5kaWNhdGUgR3VhcmQgcGFnZSBpcyBuZWVkZWQgb3Igbm90 DQo+ID4NCj4gPiAgICBAcmV0dXJuIFRoZSBhbGxvY2F0ZWQgbWVtb3J5LCBvciBOVUxMDQo+ID4N Cj4gPiBAQCAtNjksNyArNzAsOCBAQCBWT0lEICoNCj4gPiAgQ29yZUFsbG9jYXRlUG9vbFBhZ2Vz ICgNCj4gPiAgICBJTiBFRklfTUVNT1JZX1RZUEUgICAgUG9vbFR5cGUsDQo+ID4gICAgSU4gVUlO VE4gICAgICAgICAgICAgIE51bWJlck9mUGFnZXMsDQo+ID4gLSAgSU4gVUlOVE4gICAgICAgICAg ICAgIEFsaWdubWVudA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICBBbGlnbm1lbnQsDQo+ ID4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgIE5lZWRHdWFyZA0KPiA+ICAgICk7DQo+ID4NCj4g Pg0KPiA+IEBAIC05NSw2ICs5Nyw3IEBAIENvcmVGcmVlUG9vbFBhZ2VzICgNCj4gPg0KPiA+ICAg IEBwYXJhbSAgUG9vbFR5cGUgICAgICAgICAgICAgICBUeXBlIG9mIHBvb2wgdG8gYWxsb2NhdGUN Cj4gPiAgICBAcGFyYW0gIFNpemUgICAgICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBwb29s IHRvIGFsbG9jYXRlDQo+ID4gKyAgQHBhcmFtICBOZWVkR3VhcmQgICAgICAgICAgICAgIEZsYWcg dG8gaW5kaWNhdGUgR3VhcmQgcGFnZSBpcyBuZWVkZWQgb3Igbm90DQo+ID4NCj4gPiAgICBAcmV0 dXJuIFRoZSBhbGxvY2F0ZSBwb29sLCBvciBOVUxMDQo+ID4NCj4gPiBAQCAtMTAyLDcgKzEwNSw4 IEBAIENvcmVGcmVlUG9vbFBhZ2VzICgNCj4gPiAgVk9JRCAqDQo+ID4gIENvcmVBbGxvY2F0ZVBv b2xJICgNCj4gPiAgICBJTiBFRklfTUVNT1JZX1RZUEUgIFBvb2xUeXBlLA0KPiA+IC0gIElOIFVJ TlROICAgICAgICAgICAgU2l6ZQ0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgU2l6ZSwNCj4g PiArICBJTiBCT09MRUFOICAgICAgICAgIE5lZWRHdWFyZA0KPiA+ICAgICk7DQo+ID4NCj4gPg0K PiA+IEBAIC0xNDUsNiArMTQ5LDM0IEBAIENvcmVSZWxlYXNlTWVtb3J5TG9jayAoDQo+ID4gICAg Vk9JRA0KPiA+ICAgICk7DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAgQWxsb2NhdGVzIHBhZ2VzIGZy b20gdGhlIG1lbW9yeSBtYXAuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgVHlwZSAgICAgICAgICAg ICAgICAgICBUaGUgdHlwZSBvZiBhbGxvY2F0aW9uIHRvIHBlcmZvcm0NCj4gPiArICBAcGFyYW0g IE1lbW9yeVR5cGUgICAgICAgICAgICAgVGhlIHR5cGUgb2YgbWVtb3J5IHRvIHR1cm4gdGhlIGFs bG9jYXRlZA0KPiBwYWdlcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnRvDQo+ID4gKyAgQHBhcmFtICBOdW1iZXJPZlBhZ2VzICAgICAgICAgIFRoZSBudW1iZXIgb2Yg cGFnZXMgdG8gYWxsb2NhdGUNCj4gPiArICBAcGFyYW0gIE1lbW9yeSAgICAgICAgICAgICAgICAg QSBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIGJhc2UgYWxsb2NhdGVkIG1lbW9yeQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzDQo+ID4gKyAgQHBhcmFtICBOZWVk R3VhcmQgICAgICAgICAgICAgIEZsYWcgdG8gaW5kaWNhdGUgR3VhcmQgcGFnZSBpcyBuZWVkZWQg b3Igbm90DQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gU3RhdHVzLiBPbiBzdWNjZXNzLCBNZW1vcnkg aXMgZmlsbGVkIGluIHdpdGggdGhlIGJhc2UgYWRkcmVzcw0KPiBhbGxvY2F0ZWQNCj4gPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgUGFyYW1ldGVycyB2aW9sYXRlIGNoZWNraW5n IHJ1bGVzDQo+IGRlZmluZWQgaW4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3BlYy4NCj4gPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgQ291bGQgbm90 IGFsbG9jYXRlIHBhZ2VzIG1hdGNoIHRoZQ0KPiByZXF1aXJlbWVudC4NCj4gPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm8gZW5vdWdoIHBhZ2VzIHRvIGFsbG9jYXRlLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBQYWdlcyBzdWNjZXNzZnVsbHkgYWxs b2NhdGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ ID4gK0NvcmVJbnRlcm5hbEFsbG9jYXRlUGFnZXMgKA0KPiA+ICsgIElOIEVGSV9BTExPQ0FURV9U WVBFICAgICAgVHlwZSwNCj4gPiArICBJTiBFRklfTUVNT1JZX1RZUEUgICAgICAgIE1lbW9yeVR5 cGUsDQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICBOdW1iZXJPZlBhZ2VzLA0KPiA+ ICsgIElOIE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgKk1lbW9yeSwNCj4gPiArICBJTiBCT09M RUFOICAgICAgICAgICAgICAgIE5lZWRHdWFyZA0KPiA+ICsgICk7DQo+ID4NCj4gPiAgLy8NCj4g PiAgLy8gSW50ZXJuYWwgR2xvYmFsIGRhdGENCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1BhZ2Uu Yw0KPiA+IGluZGV4IGM5MjE5Y2MwNjguLjIwMzRiNjRjZDcgMTAwNjQ0DQo+ID4gLS0tIGEvTWRl TW9kdWxlUGtnL0NvcmUvRHhlL01lbS9QYWdlLmMNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cvQ29y ZS9EeGUvTWVtL1BhZ2UuYw0KPiA+IEBAIC0xNCw2ICsxNCw3IEBAIFdJVEhPVVQgV0FSUkFOVElF UyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZDQo+IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElN UExJRUQuDQo+ID4NCj4gPiAgI2luY2x1ZGUgIkR4ZU1haW4uaCINCj4gPiAgI2luY2x1ZGUgIklt ZW0uaCINCj4gPiArI2luY2x1ZGUgIkhlYXBHdWFyZC5oIg0KPiA+DQo+ID4gIC8vDQo+ID4gIC8v IEVudHJ5IGZvciB0cmFja2luZyB0aGUgbWVtb3J5IHJlZ2lvbnMgZm9yIGVhY2ggbWVtb3J5IHR5 cGUgdG8gY29hbGVzY2UNCj4gc2ltaWxhciBtZW1vcnkgdHlwZXMNCj4gPiBAQCAtMjg3LDkgKzI4 OCwxMiBAQCBBbGxvY2F0ZU1lbW9yeU1hcEVudHJ5ICgNCj4gPiAgICAgIC8vDQo+ID4gICAgICAv LyBUaGUgbGlzdCBpcyBlbXB0eSwgdG8gYWxsb2NhdGUgb25lIHBhZ2UgdG8gcmVmdWVsIHRoZSBs aXN0DQo+ID4gICAgICAvLw0KPiA+IC0gICAgRnJlZURlc2NyaXB0b3JFbnRyaWVzID0gQ29yZUFs bG9jYXRlUG9vbFBhZ2VzIChFZmlCb290U2VydmljZXNEYXRhLA0KPiA+ICsgICAgRnJlZURlc2Ny aXB0b3JFbnRyaWVzID0gQ29yZUFsbG9jYXRlUG9vbFBhZ2VzICgNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMNCj4gKERFRkFVTFRfUEFHRV9BTExP Q0FUSU9OX0dSQU5VTEFSSVRZKSwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg REVGQVVMVF9QQUdFX0FMTE9DQVRJT05fR1JBTlVMQVJJVFkpOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBERUZBVUxUX1BBR0VfQUxMT0NBVElPTl9HUkFOVUxBUklUWSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgIGlmIChGcmVlRGVzY3JpcHRvckVudHJpZXMg IT0gTlVMTCkgew0KPiA+ICAgICAgICAvLw0KPiA+ICAgICAgICAvLyBFbnF1ZSB0aGUgZnJlZSBt ZW1tb3J5IG1hcCBlbnRyaWVzIGludG8gdGhlIGxpc3QNCj4gPiBAQCAtODk2LDE3ICs5MDAsNDEg QEAgQ29yZUNvbnZlcnRQYWdlc0V4ICgNCj4gPiAgICAgIC8vDQo+ID4gICAgICBDb3JlQWRkUmFu Z2UgKE1lbVR5cGUsIFN0YXJ0LCBSYW5nZUVuZCwgQXR0cmlidXRlKTsNCj4gPiAgICAgIGlmIChD aGFuZ2luZ1R5cGUgJiYgKE1lbVR5cGUgPT0gRWZpQ29udmVudGlvbmFsTWVtb3J5KSkgew0KPiA+ IC0gICAgICAvLw0KPiA+IC0gICAgICAvLyBBdm9pZCBjYWxsaW5nIERFQlVHX0NMRUFSX01FTU9S WSgpIGZvciBhbiBhZGRyZXNzIG9mIDAgYmVjYXVzZQ0KPiB0aGlzDQo+ID4gLSAgICAgIC8vIG1h Y3JvIHdpbGwgQVNTRVJUKCkgaWYgYWRkcmVzcyBpcyAwLiAgSW5zdGVhZCwgQ29yZUFkZFJhbmdl KCkgZ3VhcmFudGVlcw0KPiA+IC0gICAgICAvLyB0aGF0IHRoZSBwYWdlIHN0YXJ0aW5nIGF0IGFk ZHJlc3MgMCBpcyBhbHdheXMgZmlsbGVkIHdpdGggemVyb3MuDQo+ID4gLSAgICAgIC8vDQo+ID4g ICAgICAgIGlmIChTdGFydCA9PSAwKSB7DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAv LyBBdm9pZCBjYWxsaW5nIERFQlVHX0NMRUFSX01FTU9SWSgpIGZvciBhbiBhZGRyZXNzIG9mIDAg YmVjYXVzZQ0KPiB0aGlzDQo+ID4gKyAgICAgICAgLy8gbWFjcm8gd2lsbCBBU1NFUlQoKSBpZiBh ZGRyZXNzIGlzIDAuICBJbnN0ZWFkLCBDb3JlQWRkUmFuZ2UoKQ0KPiA+ICsgICAgICAgIC8vIGd1 YXJhbnRlZXMgdGhhdCB0aGUgcGFnZSBzdGFydGluZyBhdCBhZGRyZXNzIDAgaXMgYWx3YXlzIGZp bGxlZA0KPiA+ICsgICAgICAgIC8vIHdpdGggemVyb3MuDQo+ID4gKyAgICAgICAgLy8NCj4gPiAg ICAgICAgICBpZiAoUmFuZ2VFbmQgPiBFRklfUEFHRV9TSVpFKSB7DQo+ID4gICAgICAgICAgICBE RUJVR19DTEVBUl9NRU1PUlkgKChWT0lEICopKFVJTlROKSBFRklfUEFHRV9TSVpFLCAoVUlOVE4p DQo+IChSYW5nZUVuZCAtIEVGSV9QQUdFX1NJWkUgKyAxKSk7DQo+ID4gICAgICAgICAgfQ0KPiA+ ICAgICAgICB9IGVsc2Ugew0KPiA+IC0gICAgICAgIERFQlVHX0NMRUFSX01FTU9SWSAoKFZPSUQg KikoVUlOVE4pIFN0YXJ0LCAoVUlOVE4pIChSYW5nZUVuZCAtDQo+IFN0YXJ0ICsgMSkpOw0KPiA+ ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgLy8gSWYgSGVhcCBHdWFyZCBpcyBlbmFibGVkLCB0 aGUgcGFnZSBhdCB0aGUgdG9wIGFuZC9vciBib3R0b20gb2YNCj4gPiArICAgICAgICAvLyB0aGlz IG1lbW9yeSBibG9jayB0byBmcmVlIG1pZ2h0IGJlIGluYWNjZXNzaWJsZS4gU2tpcHBpbmcgdGhl bQ0KPiA+ICsgICAgICAgIC8vIHRvIGF2b2lkIHBhZ2UgZmF1bHQgZXhjZXB0aW9uLg0KPiA+ICsg ICAgICAgIC8vDQo+ID4gKyAgICAgICAgVUlOVDY0ICBTdGFydFRvQ2xlYXI7DQo+ID4gKyAgICAg ICAgVUlOVDY0ICBFbmRUb0NsZWFyOw0KPiA+ICsNCj4gPiArICAgICAgICBTdGFydFRvQ2xlYXIg PSBTdGFydDsNCj4gPiArICAgICAgICBFbmRUb0NsZWFyICAgPSBSYW5nZUVuZDsNCj4gPiArICAg ICAgICBpZiAoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAmIChCSVQxfEJJVDAp KSB7DQo+ID4gKyAgICAgICAgICBpZiAoSXNHdWFyZFBhZ2UoU3RhcnRUb0NsZWFyKSkgew0KPiA+ ICsgICAgICAgICAgICBTdGFydFRvQ2xlYXIgKz0gRUZJX1BBR0VfU0laRTsNCj4gPiArICAgICAg ICAgIH0NCj4gPiArICAgICAgICAgIGlmIChJc0d1YXJkUGFnZSAoRW5kVG9DbGVhcikpIHsNCj4g PiArICAgICAgICAgICAgRW5kVG9DbGVhciAtPSBFRklfUEFHRV9TSVpFOw0KPiA+ICsgICAgICAg ICAgfQ0KPiA+ICsgICAgICAgICAgQVNTRVJUIChFbmRUb0NsZWFyID4gU3RhcnRUb0NsZWFyKTsN Cj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIERFQlVHX0NMRUFSX01FTU9SWSgN Cj4gPiArICAgICAgICAgIChWT0lEICopKFVJTlROKVN0YXJ0VG9DbGVhciwNCj4gPiArICAgICAg ICAgIChVSU5UTikoRW5kVG9DbGVhciAtIFN0YXJ0VG9DbGVhciArIDEpDQo+ID4gKyAgICAgICAg ICApOw0KPiA+ICAgICAgICB9DQo+ID4gICAgICB9DQo+ID4NCj4gPiBAQCAtOTkzLDYgKzEwMjEs NyBAQCBDb3JlVXBkYXRlTWVtb3J5QXR0cmlidXRlcyAoDQo+ID4gICAgQHBhcmFtICBOZXdUeXBl ICAgICAgICAgICAgICAgIFRoZSB0eXBlIG9mIG1lbW9yeSB0aGUgcmFuZ2UgaXMgZ29pbmcgdG8g YmUNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVybmVkIGludG8NCj4g PiAgICBAcGFyYW0gIEFsaWdubWVudCAgICAgICAgICAgICAgQml0cyB0byBhbGlnbiB3aXRoDQo+ ID4gKyAgQHBhcmFtICBOZWVkR3VhcmQgICAgICAgICAgICAgIEZsYWcgdG8gaW5kaWNhdGUgR3Vh cmQgcGFnZSBpcyBuZWVkZWQgb3Igbm90DQo+ID4NCj4gPiAgICBAcmV0dXJuIFRoZSBiYXNlIGFk ZHJlc3Mgb2YgdGhlIHJhbmdlLCBvciAwIGlmIHRoZSByYW5nZSB3YXMgbm90IGZvdW5kDQo+ID4N Cj4gPiBAQCAtMTAwMyw3ICsxMDMyLDggQEAgQ29yZUZpbmRGcmVlUGFnZXNJICgNCj4gPiAgICBJ TiBVSU5UNjQgICAgICAgICAgIE1pbkFkZHJlc3MsDQo+ID4gICAgSU4gVUlOVDY0ICAgICAgICAg ICBOdW1iZXJPZlBhZ2VzLA0KPiA+ICAgIElOIEVGSV9NRU1PUllfVFlQRSAgTmV3VHlwZSwNCj4g PiAtICBJTiBVSU5UTiAgICAgICAgICAgIEFsaWdubWVudA0KPiA+ICsgIElOIFVJTlROICAgICAg ICAgICAgQWxpZ25tZW50LA0KPiA+ICsgIElOIEJPT0xFQU4gICAgICAgICAgTmVlZEd1YXJkDQo+ ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgVUlOVDY0ICAgICAgICAgIE51bWJlck9mQnl0ZXM7DQo+ ID4gQEAgLTEwOTUsNiArMTEyNSwxNyBAQCBDb3JlRmluZEZyZWVQYWdlc0kgKA0KPiA+ICAgICAg ICAvLyBJZiB0aGlzIGlzIHRoZSBiZXN0IG1hdGNoIHNvIGZhciByZW1lbWJlciBpdA0KPiA+ICAg ICAgICAvLw0KPiA+ICAgICAgICBpZiAoRGVzY0VuZCA+IFRhcmdldCkgew0KPiA+ICsgICAgICAg IGlmIChOZWVkR3VhcmQpIHsNCj4gPiArICAgICAgICAgIERlc2NFbmQgPSBBZGp1c3RNZW1vcnlT ICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIERlc2NFbmQgKyAxIC0gRGVzY051bWJlck9m Qnl0ZXMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBEZXNjTnVtYmVyT2ZCeXRlcywNCj4g PiArICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQnl0ZXMNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgICBpZiAoRGVzY0VuZCA9PSAwKSB7DQo+ID4gKyAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0NCj4g PiArDQo+ID4gICAgICAgICAgVGFyZ2V0ID0gRGVzY0VuZDsNCj4gPiAgICAgICAgfQ0KPiA+ICAg ICAgfQ0KPiA+IEBAIC0xMTI1LDYgKzExNjYsNyBAQCBDb3JlRmluZEZyZWVQYWdlc0kgKA0KPiA+ ICAgIEBwYXJhbSAgTmV3VHlwZSAgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiBtZW1vcnkgdGhl IHJhbmdlIGlzIGdvaW5nIHRvIGJlDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHR1cm5lZCBpbnRvDQo+ID4gICAgQHBhcmFtICBBbGlnbm1lbnQgICAgICAgICAgICAgIEJp dHMgdG8gYWxpZ24gd2l0aA0KPiA+ICsgIEBwYXJhbSAgTmVlZEd1YXJkICAgICAgICAgICAgICBG bGFnIHRvIGluZGljYXRlIEd1YXJkIHBhZ2UgaXMgbmVlZGVkIG9yIG5vdA0KPiA+DQo+ID4gICAg QHJldHVybiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByYW5nZSwgb3IgMCBpZiB0aGUgcmFuZ2Ug d2FzIG5vdCBmb3VuZC4NCj4gPg0KPiA+IEBAIC0xMTM0LDcgKzExNzYsOCBAQCBGaW5kRnJlZVBh Z2VzICgNCj4gPiAgICAgIElOIFVJTlQ2NCAgICAgICAgICAgTWF4QWRkcmVzcywNCj4gPiAgICAg IElOIFVJTlQ2NCAgICAgICAgICAgTm9QYWdlcywNCj4gPiAgICAgIElOIEVGSV9NRU1PUllfVFlQ RSAgTmV3VHlwZSwNCj4gPiAtICAgIElOIFVJTlROICAgICAgICAgICAgQWxpZ25tZW50DQo+ID4g KyAgICBJTiBVSU5UTiAgICAgICAgICAgIEFsaWdubWVudCwNCj4gPiArICAgIElOIEJPT0xFQU4g ICAgICAgICAgTmVlZEd1YXJkDQo+ID4gICAgICApDQo+ID4gIHsNCj4gPiAgICBVSU5UNjQgICBT dGFydDsNCj4gPiBAQCAtMTE0OCw3ICsxMTkxLDggQEAgRmluZEZyZWVQYWdlcyAoDQo+ID4gICAg ICAgICAgICAgICAgbU1lbW9yeVR5cGVTdGF0aXN0aWNzW05ld1R5cGVdLkJhc2VBZGRyZXNzLA0K PiA+ICAgICAgICAgICAgICAgIE5vUGFnZXMsDQo+ID4gICAgICAgICAgICAgICAgTmV3VHlwZSwN Cj4gPiAtICAgICAgICAgICAgICBBbGlnbm1lbnQNCj4gPiArICAgICAgICAgICAgICBBbGlnbm1l bnQsDQo+ID4gKyAgICAgICAgICAgICAgTmVlZEd1YXJkDQo+ID4gICAgICAgICAgICAgICAgKTsN Cj4gPiAgICAgIGlmIChTdGFydCAhPSAwKSB7DQo+ID4gICAgICAgIHJldHVybiBTdGFydDsNCj4g PiBAQCAtMTE1OSw3ICsxMjAzLDggQEAgRmluZEZyZWVQYWdlcyAoDQo+ID4gICAgLy8gQXR0ZW1w dCB0byBmaW5kIGZyZWUgcGFnZXMgaW4gdGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBiaW4NCj4gPiAg ICAvLw0KPiA+ICAgIGlmIChNYXhBZGRyZXNzID49IG1EZWZhdWx0TWF4aW11bUFkZHJlc3MpIHsN Cj4gPiAtICAgIFN0YXJ0ID0gQ29yZUZpbmRGcmVlUGFnZXNJIChtRGVmYXVsdE1heGltdW1BZGRy ZXNzLCAwLCBOb1BhZ2VzLA0KPiBOZXdUeXBlLCBBbGlnbm1lbnQpOw0KPiA+ICsgICAgU3RhcnQg PSBDb3JlRmluZEZyZWVQYWdlc0kgKG1EZWZhdWx0TWF4aW11bUFkZHJlc3MsIDAsIE5vUGFnZXMs DQo+IE5ld1R5cGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxpZ25t ZW50LCBOZWVkR3VhcmQpOw0KPiA+ICAgICAgaWYgKFN0YXJ0ICE9IDApIHsNCj4gPiAgICAgICAg aWYgKFN0YXJ0IDwgbURlZmF1bHRCYXNlQWRkcmVzcykgew0KPiA+ICAgICAgICAgIG1EZWZhdWx0 QmFzZUFkZHJlc3MgPSBTdGFydDsNCj4gPiBAQCAtMTE3NCw3ICsxMjE5LDggQEAgRmluZEZyZWVQ YWdlcyAoDQo+ID4gICAgLy8gYWRkcmVzcyByYW5nZS4gIElmIHRoaXMgYWxsb2NhdGlvbiBmYWls cywgdGhlbiB0aGVyZSBhcmUgbm90IGVub3VnaA0KPiA+ICAgIC8vIHJlc291cmNlcyBhbnl3aGVy ZSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0Lg0KPiA+ICAgIC8vDQo+ID4gLSAgU3RhcnQgPSBDb3Jl RmluZEZyZWVQYWdlc0kgKE1heEFkZHJlc3MsIDAsIE5vUGFnZXMsIE5ld1R5cGUsIEFsaWdubWVu dCk7DQo+ID4gKyAgU3RhcnQgPSBDb3JlRmluZEZyZWVQYWdlc0kgKE1heEFkZHJlc3MsIDAsIE5v UGFnZXMsIE5ld1R5cGUsIEFsaWdubWVudCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTmVlZEd1YXJkKTsNCj4gPiAgICBpZiAoU3RhcnQgIT0gMCkgew0KPiA+ICAgICAgcmV0 dXJuIFN0YXJ0Ow0KPiA+ICAgIH0NCj4gPiBAQCAtMTE4OSw3ICsxMjM1LDcgQEAgRmluZEZyZWVQ YWdlcyAoDQo+ID4gICAgLy8NCj4gPiAgICAvLyBJZiBhbnkgbWVtb3J5IHJlc291cmNlcyB3ZXJl IHByb21vdGVkLCB0aGVuIHJlLWF0dGVtcHQgdGhlIGFsbG9jYXRpb24NCj4gPiAgICAvLw0KPiA+ IC0gIHJldHVybiBGaW5kRnJlZVBhZ2VzIChNYXhBZGRyZXNzLCBOb1BhZ2VzLCBOZXdUeXBlLCBB bGlnbm1lbnQpOw0KPiA+ICsgIHJldHVybiBGaW5kRnJlZVBhZ2VzIChNYXhBZGRyZXNzLCBOb1Bh Z2VzLCBOZXdUeXBlLCBBbGlnbm1lbnQsDQo+IE5lZWRHdWFyZCk7DQo+ID4gIH0NCj4gPg0KPiA+ DQo+ID4gQEAgLTEyMDIsNiArMTI0OCw3IEBAIEZpbmRGcmVlUGFnZXMgKA0KPiA+ICAgIEBwYXJh bSAgTnVtYmVyT2ZQYWdlcyAgICAgICAgICBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRl DQo+ID4gICAgQHBhcmFtICBNZW1vcnkgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byByZWNl aXZlIHRoZSBiYXNlIGFsbG9jYXRlZCBtZW1vcnkNCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWRkcmVzcw0KPiA+ICsgIEBwYXJhbSAgTmVlZEd1YXJkICAgICAgICAgICAg ICBGbGFnIHRvIGluZGljYXRlIEd1YXJkIHBhZ2UgaXMgbmVlZGVkIG9yIG5vdA0KPiA+DQo+ID4g ICAgQHJldHVybiBTdGF0dXMuIE9uIHN1Y2Nlc3MsIE1lbW9yeSBpcyBmaWxsZWQgaW4gd2l0aCB0 aGUgYmFzZSBhZGRyZXNzDQo+IGFsbG9jYXRlZA0KPiA+ICAgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBQYXJhbWV0ZXJzIHZpb2xhdGUgY2hlY2tpbmcgcnVsZXMNCj4gZGVmaW5lZCBp bg0KPiA+IEBAIC0xMjE3LDcgKzEyNjQsOCBAQCBDb3JlSW50ZXJuYWxBbGxvY2F0ZVBhZ2VzICgN Cj4gPiAgICBJTiBFRklfQUxMT0NBVEVfVFlQRSAgICAgIFR5cGUsDQo+ID4gICAgSU4gRUZJX01F TU9SWV9UWVBFICAgICAgICBNZW1vcnlUeXBlLA0KPiA+ICAgIElOIFVJTlROICAgICAgICAgICAg ICAgICAgTnVtYmVyT2ZQYWdlcywNCj4gPiAtICBJTiBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICpNZW1vcnkNCj4gPiArICBJTiBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICpNZW1vcnksDQo+ ID4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICBOZWVkR3VhcmQNCj4gPiAgICApDQo+ID4g IHsNCj4gPiAgICBFRklfU1RBVFVTICAgICAgU3RhdHVzOw0KPiA+IEBAIC0xMzAzLDcgKzEzNTEs OCBAQCBDb3JlSW50ZXJuYWxBbGxvY2F0ZVBhZ2VzICgNCj4gPiAgICAvLyBJZiBub3QgYSBzcGVj aWZpYyBhZGRyZXNzLCB0aGVuIGZpbmQgYW4gYWRkcmVzcyB0byBhbGxvY2F0ZQ0KPiA+ICAgIC8v DQo+ID4gICAgaWYgKFR5cGUgIT0gQWxsb2NhdGVBZGRyZXNzKSB7DQo+ID4gLSAgICBTdGFydCA9 IEZpbmRGcmVlUGFnZXMgKE1heEFkZHJlc3MsIE51bWJlck9mUGFnZXMsIE1lbW9yeVR5cGUsDQo+ IEFsaWdubWVudCk7DQo+ID4gKyAgICBTdGFydCA9IEZpbmRGcmVlUGFnZXMgKE1heEFkZHJlc3Ms IE51bWJlck9mUGFnZXMsIE1lbW9yeVR5cGUsDQo+IEFsaWdubWVudCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgTmVlZEd1YXJkKTsNCj4gPiAgICAgIGlmIChTdGFydCA9PSAwKSB7 DQo+ID4gICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICAgICAgICBn b3RvIERvbmU7DQo+ID4gQEAgLTEzMTMsMTIgKzEzNjIsMTkgQEAgQ29yZUludGVybmFsQWxsb2Nh dGVQYWdlcyAoDQo+ID4gICAgLy8NCj4gPiAgICAvLyBDb252ZXJ0IHBhZ2VzIGZyb20gRnJlZU1l bW9yeSB0byB0aGUgcmVxdWVzdGVkIHR5cGUNCj4gPiAgICAvLw0KPiA+IC0gIFN0YXR1cyA9IENv cmVDb252ZXJ0UGFnZXMgKFN0YXJ0LCBOdW1iZXJPZlBhZ2VzLCBNZW1vcnlUeXBlKTsNCj4gPiAr ICBpZiAoTmVlZEd1YXJkKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBDb3JlQ29udmVydFBhZ2VzV2l0 aEd1YXJkKFN0YXJ0LCBOdW1iZXJPZlBhZ2VzLA0KPiBNZW1vcnlUeXBlKTsNCj4gPiArICB9IGVs c2Ugew0KPiA+ICsgICAgU3RhdHVzID0gQ29yZUNvbnZlcnRQYWdlcyhTdGFydCwgTnVtYmVyT2ZQ YWdlcywgTWVtb3J5VHlwZSk7DQo+ID4gKyAgfQ0KPiA+DQo+ID4gIERvbmU6DQo+ID4gICAgQ29y ZVJlbGVhc2VNZW1vcnlMb2NrICgpOw0KPiA+DQo+ID4gICAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiArICAgIGlmIChOZWVkR3VhcmQpIHsNCj4gPiArICAgICAgU2V0R3VhcmRGb3JN ZW1vcnkgKFN0YXJ0LCBOdW1iZXJPZlBhZ2VzKTsNCj4gPiArICAgIH0NCj4gPiAgICAgICpNZW1v cnkgPSBTdGFydDsNCj4gPiAgICB9DQo+ID4NCj4gPiBAQCAtMTM1Myw4ICsxNDA5LDExIEBAIENv cmVBbGxvY2F0ZVBhZ2VzICgNCj4gPiAgICApDQo+ID4gIHsNCj4gPiAgICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ID4gKyAgQk9PTEVBTiAgICAgTmVlZEd1YXJkOw0KPiA+DQo+ID4gLSAgU3RhdHVz ID0gQ29yZUludGVybmFsQWxsb2NhdGVQYWdlcyAoVHlwZSwgTWVtb3J5VHlwZSwgTnVtYmVyT2ZQ YWdlcywNCj4gTWVtb3J5KTsNCj4gPiArICBOZWVkR3VhcmQgPSBJc1BhZ2VUeXBlVG9HdWFyZCAo TWVtb3J5VHlwZSwgVHlwZSkgJiYgIW1Pbkd1YXJkaW5nOw0KPiA+ICsgIFN0YXR1cyA9IENvcmVJ bnRlcm5hbEFsbG9jYXRlUGFnZXMgKFR5cGUsIE1lbW9yeVR5cGUsIE51bWJlck9mUGFnZXMsDQo+ IE1lbW9yeSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZWVk R3VhcmQpOw0KPiA+ICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgICBDb3Jl VXBkYXRlUHJvZmlsZSAoDQo+ID4gICAgICAgIChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlRO KSBSRVRVUk5fQUREUkVTUyAoMCksDQo+ID4gQEAgLTEzOTUsNiArMTQ1NCw3IEBAIENvcmVJbnRl cm5hbEZyZWVQYWdlcyAoDQo+ID4gICAgTElTVF9FTlRSWSAgICAgICpMaW5rOw0KPiA+ICAgIE1F TU9SWV9NQVAgICAgICAqRW50cnk7DQo+ID4gICAgVUlOVE4gICAgICAgICAgIEFsaWdubWVudDsN Cj4gPiArICBCT09MRUFOICAgICAgICAgSXNHdWFyZGVkOw0KPiA+DQo+ID4gICAgLy8NCj4gPiAg ICAvLyBGcmVlIHRoZSByYW5nZQ0KPiA+IEBAIC0xNDA0LDYgKzE0NjQsNyBAQCBDb3JlSW50ZXJu YWxGcmVlUGFnZXMgKA0KPiA+ICAgIC8vDQo+ID4gICAgLy8gRmluZCB0aGUgZW50cnkgdGhhdCB0 aGUgY292ZXJzIHRoZSByYW5nZQ0KPiA+ICAgIC8vDQo+ID4gKyAgSXNHdWFyZGVkID0gRkFMU0U7 DQo+ID4gICAgRW50cnkgPSBOVUxMOw0KPiA+ICAgIGZvciAoTGluayA9IGdNZW1vcnlNYXAuRm9y d2FyZExpbms7IExpbmsgIT0gJmdNZW1vcnlNYXA7IExpbmsgPSBMaW5rLQ0KPiA+Rm9yd2FyZExp bmspIHsNCj4gPiAgICAgIEVudHJ5ID0gQ1IoTGluaywgTUVNT1JZX01BUCwgTGluaywgTUVNT1JZ X01BUF9TSUdOQVRVUkUpOw0KPiA+IEBAIC0xNDQwLDE0ICsxNTAxLDIwIEBAIENvcmVJbnRlcm5h bEZyZWVQYWdlcyAoDQo+ID4gICAgICAqTWVtb3J5VHlwZSA9IEVudHJ5LT5UeXBlOw0KPiA+ICAg IH0NCj4gPg0KPiA+IC0gIFN0YXR1cyA9IENvcmVDb252ZXJ0UGFnZXMgKE1lbW9yeSwgTnVtYmVy T2ZQYWdlcywNCj4gRWZpQ29udmVudGlvbmFsTWVtb3J5KTsNCj4gPiAtDQo+ID4gLSAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+IC0gICAgZ290byBEb25lOw0KPiA+ICsgIElzR3VhcmRl ZCA9IElzUGFnZVR5cGVUb0d1YXJkIChFbnRyeS0+VHlwZSwgQWxsb2NhdGVBbnlQYWdlcykgJiYN Cj4gPiArICAgICAgICAgICAgICBJc01lbW9yeUd1YXJkZWQgKE1lbW9yeSk7DQo+ID4gKyAgaWYg KElzR3VhcmRlZCkgew0KPiA+ICsgICAgU3RhdHVzID0gQ29yZUNvbnZlcnRQYWdlc1dpdGhHdWFy ZCAoTWVtb3J5LCBOdW1iZXJPZlBhZ2VzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRWZpQ29udmVudGlvbmFsTWVtb3J5KTsNCj4gPiArICB9IGVsc2Ugew0K PiA+ICsgICAgU3RhdHVzID0gQ29yZUNvbnZlcnRQYWdlcyAoTWVtb3J5LCBOdW1iZXJPZlBhZ2Vz LA0KPiBFZmlDb252ZW50aW9uYWxNZW1vcnkpOw0KPiA+ICAgIH0NCj4gPg0KPiA+ICBEb25lOg0K PiA+ICAgIENvcmVSZWxlYXNlTWVtb3J5TG9jayAoKTsNCj4gPiArICBpZiAoSXNHdWFyZGVkKSB7 DQo+ID4gKyAgICBVbnNldEd1YXJkRm9yTWVtb3J5KE1lbW9yeSwgTnVtYmVyT2ZQYWdlcyk7DQo+ ID4gKyAgfQ0KPiA+ICAgIHJldHVybiBTdGF0dXM7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC0xODQ1 LDYgKzE5MTIsMTIgQEAgRG9uZToNCj4gPg0KPiA+ICAgICpNZW1vcnlNYXBTaXplID0gQnVmZmVy U2l6ZTsNCj4gPg0KPiA+ICsgIERFQlVHX0NPREUgKA0KPiA+ICsgICAgaWYgKFBjZEdldDggKFBj ZEhlYXBHdWFyZFByb3BlcnR5TWFzaykgJiAoQklUMXxCSVQwKSkgew0KPiA+ICsgICAgICBEdW1w R3VhcmRlZE1lbW9yeUJpdG1hcCAoKTsNCj4gPiArICAgIH0NCj4gPiArICApOw0KPiA+ICsNCj4g PiAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICB9DQo+ID4NCj4gPiBAQCAtMTg1Niw2ICsxOTI5LDcg QEAgRG9uZToNCj4gPiAgICBAcGFyYW0gIFBvb2xUeXBlICAgICAgICAgICAgICAgVGhlIHR5cGUg b2YgbWVtb3J5IGZvciB0aGUgbmV3IHBvb2wgcGFnZXMNCj4gPiAgICBAcGFyYW0gIE51bWJlck9m UGFnZXMgICAgICAgICAgTm8gb2YgcGFnZXMgdG8gYWxsb2NhdGUNCj4gPiAgICBAcGFyYW0gIEFs aWdubWVudCAgICAgICAgICAgICAgQml0cyB0byBhbGlnbi4NCj4gPiArICBAcGFyYW0gIE5lZWRH dWFyZCAgICAgICAgICAgICAgRmxhZyB0byBpbmRpY2F0ZSBHdWFyZCBwYWdlIGlzIG5lZWRlZCBv ciBub3QNCj4gPg0KPiA+ICAgIEByZXR1cm4gVGhlIGFsbG9jYXRlZCBtZW1vcnksIG9yIE5VTEwN Cj4gPg0KPiA+IEBAIC0xODY0LDcgKzE5MzgsOCBAQCBWT0lEICoNCj4gPiAgQ29yZUFsbG9jYXRl UG9vbFBhZ2VzICgNCj4gPiAgICBJTiBFRklfTUVNT1JZX1RZUEUgICAgUG9vbFR5cGUsDQo+ID4g ICAgSU4gVUlOVE4gICAgICAgICAgICAgIE51bWJlck9mUGFnZXMsDQo+ID4gLSAgSU4gVUlOVE4g ICAgICAgICAgICAgIEFsaWdubWVudA0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICBBbGln bm1lbnQsDQo+ID4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgIE5lZWRHdWFyZA0KPiA+ICAgICkN Cj4gPiAgew0KPiA+ICAgIFVJTlQ2NCAgICAgICAgICAgIFN0YXJ0Ow0KPiA+IEBAIC0xODcyLDcg KzE5NDcsOCBAQCBDb3JlQWxsb2NhdGVQb29sUGFnZXMgKA0KPiA+ICAgIC8vDQo+ID4gICAgLy8g RmluZCB0aGUgcGFnZXMgdG8gY29udmVydA0KPiA+ICAgIC8vDQo+ID4gLSAgU3RhcnQgPSBGaW5k RnJlZVBhZ2VzIChNQVhfQUREUkVTUywgTnVtYmVyT2ZQYWdlcywgUG9vbFR5cGUsDQo+IEFsaWdu bWVudCk7DQo+ID4gKyAgU3RhcnQgPSBGaW5kRnJlZVBhZ2VzIChNQVhfQUREUkVTUywgTnVtYmVy T2ZQYWdlcywgUG9vbFR5cGUsDQo+IEFsaWdubWVudCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgIE5lZWRHdWFyZCk7DQo+ID4NCj4gPiAgICAvLw0KPiA+ICAgIC8vIENvbnZlcnQgaXQg dG8gYm9vdCBzZXJ2aWNlcyBkYXRhDQo+ID4gQEAgLTE4ODAsNyArMTk1NiwxMSBAQCBDb3JlQWxs b2NhdGVQb29sUGFnZXMgKA0KPiA+ICAgIGlmIChTdGFydCA9PSAwKSB7DQo+ID4gICAgICBERUJV RyAoKERFQlVHX0VSUk9SIHwgREVCVUdfUEFHRSwgIkFsbG9jYXRlUG9vbFBhZ2VzOiBmYWlsZWQg dG8NCj4gYWxsb2NhdGUgJWQgcGFnZXNcbiIsIChVSU5UMzIpTnVtYmVyT2ZQYWdlcykpOw0KPiA+ ICAgIH0gZWxzZSB7DQo+ID4gLSAgICBDb3JlQ29udmVydFBhZ2VzIChTdGFydCwgTnVtYmVyT2ZQ YWdlcywgUG9vbFR5cGUpOw0KPiA+ICsgICAgaWYgKE5lZWRHdWFyZCkgew0KPiA+ICsgICAgICBD b3JlQ29udmVydFBhZ2VzV2l0aEd1YXJkIChTdGFydCwgTnVtYmVyT2ZQYWdlcywgUG9vbFR5cGUp Ow0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgQ29yZUNvbnZlcnRQYWdlcyAoU3RhcnQs IE51bWJlck9mUGFnZXMsIFBvb2xUeXBlKTsNCj4gPiArICAgIH0NCj4gPiAgICB9DQo+ID4NCj4g PiAgICByZXR1cm4gKFZPSUQgKikoVUlOVE4pIFN0YXJ0Ow0KPiA+IGRpZmYgLS1naXQgYS9NZGVN b2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYw0KPiBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9N ZW0vUG9vbC5jDQo+ID4gaW5kZXggZGQxNjVmZWE3NS4uYjgyYjUxNTk1YyAxMDA2NDQNCj4gPiAt LS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1Bvb2wuYw0KPiA+ICsrKyBiL01kZU1vZHVs ZVBrZy9Db3JlL0R4ZS9NZW0vUG9vbC5jDQo+ID4gQEAgLTE0LDYgKzE0LDcgQEAgV0lUSE9VVCBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkNCj4gS0lORCwgRUlUSEVSIEVYUFJF U1MgT1IgSU1QTElFRC4NCj4gPg0KPiA+ICAjaW5jbHVkZSAiRHhlTWFpbi5oIg0KPiA+ICAjaW5j bHVkZSAiSW1lbS5oIg0KPiA+ICsjaW5jbHVkZSAiSGVhcEd1YXJkLmgiDQo+ID4NCj4gPiAgU1RB VElDIEVGSV9MT0NLIG1Qb29sTWVtb3J5TG9jayA9IEVGSV9JTklUSUFMSVpFX0xPQ0tfVkFSSUFC TEUNCj4gKFRQTF9OT1RJRlkpOw0KPiA+DQo+ID4gQEAgLTE2OSw3ICsxNzAsNyBAQCBMb29rdXBQ b29sSGVhZCAoDQo+ID4gICAgICAgIH0NCj4gPiAgICAgIH0NCj4gPg0KPiA+IC0gICAgUG9vbCA9 IENvcmVBbGxvY2F0ZVBvb2xJIChFZmlCb290U2VydmljZXNEYXRhLCBzaXplb2YgKFBPT0wpKTsN Cj4gPiArICAgIFBvb2wgPSBDb3JlQWxsb2NhdGVQb29sSSAoRWZpQm9vdFNlcnZpY2VzRGF0YSwg c2l6ZW9mIChQT09MKSwgRkFMU0UpOw0KPiA+ICAgICAgaWYgKFBvb2wgPT0gTlVMTCkgew0KPiA+ ICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAgICAgIH0NCj4gPiBAQCAtMjE0LDcgKzIxNSw4IEBA IENvcmVJbnRlcm5hbEFsbG9jYXRlUG9vbCAoDQo+ID4gICAgT1VUIFZPSUQgICAgICAgICAgICAq KkJ1ZmZlcg0KPiA+ICAgICkNCj4gPiAgew0KPiA+IC0gIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0K PiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgQk9PTEVBTiAgICAg ICAgICAgICAgIE5lZWRHdWFyZDsNCj4gPg0KPiA+ICAgIC8vDQo+ID4gICAgLy8gSWYgaXQncyBu b3QgYSB2YWxpZCB0eXBlLCBmYWlsIGl0DQo+ID4gQEAgLTIzOCw2ICsyNDAsOCBAQCBDb3JlSW50 ZXJuYWxBbGxvY2F0ZVBvb2wgKA0KPiA+ICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiA+ICAgIH0NCj4gPg0KPiA+ICsgIE5lZWRHdWFyZCA9IElzUG9vbFR5cGVUb0d1YXJkIChQ b29sVHlwZSkgJiYgIW1Pbkd1YXJkaW5nOw0KPiA+ICsNCj4gPiAgICAvLw0KPiA+ICAgIC8vIEFj cXVpcmUgdGhlIG1lbW9yeSBsb2NrIGFuZCBtYWtlIHRoZSBhbGxvY2F0aW9uDQo+ID4gICAgLy8N Cj4gPiBAQCAtMjQ2LDcgKzI1MCw3IEBAIENvcmVJbnRlcm5hbEFsbG9jYXRlUG9vbCAoDQo+ID4g ICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgfQ0KPiA+DQo+ID4gLSAg KkJ1ZmZlciA9IENvcmVBbGxvY2F0ZVBvb2xJIChQb29sVHlwZSwgU2l6ZSk7DQo+ID4gKyAgKkJ1 ZmZlciA9IENvcmVBbGxvY2F0ZVBvb2xJIChQb29sVHlwZSwgU2l6ZSwgTmVlZEd1YXJkKTsNCj4g PiAgICBDb3JlUmVsZWFzZUxvY2sgKCZtUG9vbE1lbW9yeUxvY2spOw0KPiA+ICAgIHJldHVybiAo KkJ1ZmZlciAhPSBOVUxMKSA/IEVGSV9TVUNDRVNTIDogRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ID4gIH0NCj4gPiBAQCAtMjk4LDYgKzMwMiw3IEBAIENvcmVBbGxvY2F0ZVBvb2wgKA0KPiA+ICAg IEBwYXJhbSAgUG9vbFR5cGUgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiBtZW1vcnkgZm9yIHRo ZSBuZXcgcG9vbCBwYWdlcw0KPiA+ICAgIEBwYXJhbSAgTm9QYWdlcyAgICAgICAgICAgICAgICBO byBvZiBwYWdlcyB0byBhbGxvY2F0ZQ0KPiA+ICAgIEBwYXJhbSAgR3JhbnVsYXJpdHkgICAgICAg ICAgICBCaXRzIHRvIGFsaWduLg0KPiA+ICsgIEBwYXJhbSAgTmVlZEd1YXJkICAgICAgICAgICAg ICBGbGFnIHRvIGluZGljYXRlIEd1YXJkIHBhZ2UgaXMgbmVlZGVkIG9yIG5vdA0KPiA+DQo+ID4g ICAgQHJldHVybiBUaGUgYWxsb2NhdGVkIG1lbW9yeSwgb3IgTlVMTA0KPiA+DQo+ID4gQEAgLTMw Nyw3ICszMTIsOCBAQCBWT0lEICoNCj4gPiAgQ29yZUFsbG9jYXRlUG9vbFBhZ2VzSSAoDQo+ID4g ICAgSU4gRUZJX01FTU9SWV9UWVBFICAgIFBvb2xUeXBlLA0KPiA+ICAgIElOIFVJTlROICAgICAg ICAgICAgICBOb1BhZ2VzLA0KPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgICBHcmFudWxhcml0 eQ0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICBHcmFudWxhcml0eSwNCj4gPiArICBJTiBC T09MRUFOICAgICAgICAgICAgTmVlZEd1YXJkDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgVk9J RCAgICAgICAgKkJ1ZmZlcjsNCj4gPiBAQCAtMzE4LDExICszMjQsMTQgQEAgQ29yZUFsbG9jYXRl UG9vbFBhZ2VzSSAoDQo+ID4gICAgICByZXR1cm4gTlVMTDsNCj4gPiAgICB9DQo+ID4NCj4gPiAt ICBCdWZmZXIgPSBDb3JlQWxsb2NhdGVQb29sUGFnZXMgKFBvb2xUeXBlLCBOb1BhZ2VzLCBHcmFu dWxhcml0eSk7DQo+ID4gKyAgQnVmZmVyID0gQ29yZUFsbG9jYXRlUG9vbFBhZ2VzIChQb29sVHlw ZSwgTm9QYWdlcywgR3JhbnVsYXJpdHksDQo+IE5lZWRHdWFyZCk7DQo+ID4gICAgQ29yZVJlbGVh c2VNZW1vcnlMb2NrICgpOw0KPiA+DQo+ID4gICAgaWYgKEJ1ZmZlciAhPSBOVUxMKSB7DQo+ID4g LSAgICBBcHBseU1lbW9yeVByb3RlY3Rpb25Qb2xpY3kgKEVmaUNvbnZlbnRpb25hbE1lbW9yeSwg UG9vbFR5cGUsDQo+ID4gKyAgICBpZiAoTmVlZEd1YXJkKSB7DQo+ID4gKyAgICAgIFNldEd1YXJk Rm9yTWVtb3J5ICgoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKUJ1ZmZlciwgTm9QYWdlcyk7 DQo+ID4gKyAgICB9DQo+ID4gKyAgICBBcHBseU1lbW9yeVByb3RlY3Rpb25Qb2xpY3koRWZpQ29u dmVudGlvbmFsTWVtb3J5LCBQb29sVHlwZSwNCj4gPiAgICAgICAgKEVGSV9QSFlTSUNBTF9BRERS RVNTKShVSU5UTilCdWZmZXIsIEVGSV9QQUdFU19UT19TSVpFIChOb1BhZ2VzKSk7DQo+ID4gICAg fQ0KPiA+ICAgIHJldHVybiBCdWZmZXI7DQo+ID4gQEAgLTMzNCw2ICszNDMsNyBAQCBDb3JlQWxs b2NhdGVQb29sUGFnZXNJICgNCj4gPg0KPiA+ICAgIEBwYXJhbSAgUG9vbFR5cGUgICAgICAgICAg ICAgICBUeXBlIG9mIHBvb2wgdG8gYWxsb2NhdGUNCj4gPiAgICBAcGFyYW0gIFNpemUgICAgICAg ICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBwb29sIHRvIGFsbG9jYXRlDQo+ID4gKyAgQHBhcmFt ICBOZWVkR3VhcmQgICAgICAgICAgICAgIEZsYWcgdG8gaW5kaWNhdGUgR3VhcmQgcGFnZSBpcyBu ZWVkZWQgb3Igbm90DQo+ID4NCj4gPiAgICBAcmV0dXJuIFRoZSBhbGxvY2F0ZSBwb29sLCBvciBO VUxMDQo+ID4NCj4gPiBAQCAtMzQxLDcgKzM1MSw4IEBAIENvcmVBbGxvY2F0ZVBvb2xQYWdlc0kg KA0KPiA+ICBWT0lEICoNCj4gPiAgQ29yZUFsbG9jYXRlUG9vbEkgKA0KPiA+ICAgIElOIEVGSV9N RU1PUllfVFlQRSAgUG9vbFR5cGUsDQo+ID4gLSAgSU4gVUlOVE4gICAgICAgICAgICBTaXplDQo+ ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICBTaXplLA0KPiA+ICsgIElOIEJPT0xFQU4gICAgICAg ICAgTmVlZEd1YXJkDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgUE9PTCAgICAgICAgKlBvb2w7 DQo+ID4gQEAgLTM1NSw2ICszNjYsNyBAQCBDb3JlQWxsb2NhdGVQb29sSSAoDQo+ID4gICAgVUlO VE4gICAgICAgT2Zmc2V0LCBNYXhPZmZzZXQ7DQo+ID4gICAgVUlOVE4gICAgICAgTm9QYWdlczsN Cj4gPiAgICBVSU5UTiAgICAgICBHcmFudWxhcml0eTsNCj4gPiArICBCT09MRUFOICAgICBIYXNQ b29sVGFpbDsNCj4gPg0KPiA+ICAgIEFTU0VSVF9MT0NLRUQgKCZtUG9vbE1lbW9yeUxvY2spOw0K PiA+DQo+ID4gQEAgLTM3Miw2ICszODQsOSBAQCBDb3JlQWxsb2NhdGVQb29sSSAoDQo+ID4gICAg Ly8gQWRqdXN0IHRoZSBzaXplIGJ5IHRoZSBwb29sIGhlYWRlciAmIHRhaWwgb3ZlcmhlYWQNCj4g PiAgICAvLw0KPiA+DQo+ID4gKyAgSGFzUG9vbFRhaWwgID0gIShOZWVkR3VhcmQgJiYNCj4gPiAr ICAgICAgICAgICAgICAgICAgICgoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAm IEJJVDcpID09IDApKTsNCj4gPiArDQo+ID4gICAgLy8NCj4gPiAgICAvLyBBZGp1c3RpbmcgdGhl IFNpemUgdG8gYmUgb2YgcHJvcGVyIGFsaWdubWVudCBzbyB0aGF0DQo+ID4gICAgLy8gd2UgZG9u J3QgZ2V0IGFuIHVuYWxpZ25lZCBhY2Nlc3MgZmF1bHQgbGF0ZXIgd2hlbg0KPiA+IEBAIC0zOTEs MTAgKzQwNiwxNiBAQCBDb3JlQWxsb2NhdGVQb29sSSAoDQo+ID4gICAgLy8gSWYgYWxsb2NhdGlv biBpcyBvdmVyIG1heCBzaXplLCBqdXN0IGFsbG9jYXRlIHBhZ2VzIGZvciB0aGUgcmVxdWVzdA0K PiA+ICAgIC8vIChzbG93KQ0KPiA+ICAgIC8vDQo+ID4gLSAgaWYgKEluZGV4ID49IFNJWkVfVE9f TElTVCAoR3JhbnVsYXJpdHkpKSB7DQo+ID4gLSAgICBOb1BhZ2VzID0gRUZJX1NJWkVfVE9fUEFH RVMoU2l6ZSkgKyBFRklfU0laRV9UT19QQUdFUyAoR3JhbnVsYXJpdHkpIC0gMTsNCj4gPiArICBp ZiAoSW5kZXggPj0gU0laRV9UT19MSVNUIChHcmFudWxhcml0eSkgfHwgTmVlZEd1YXJkKSB7DQo+ ID4gKyAgICBpZiAoIUhhc1Bvb2xUYWlsKSB7DQo+ID4gKyAgICAgIFNpemUgLT0gc2l6ZW9mIChQ T09MX1RBSUwpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgTm9QYWdlcyA9IEVGSV9TSVpFX1RPX1BB R0VTIChTaXplKSArIEVGSV9TSVpFX1RPX1BBR0VTIChHcmFudWxhcml0eSkgLQ0KPiAxOw0KPiA+ ICAgICAgTm9QYWdlcyAmPSB+KFVJTlROKShFRklfU0laRV9UT19QQUdFUyAoR3JhbnVsYXJpdHkp IC0gMSk7DQo+ID4gLSAgICBIZWFkID0gQ29yZUFsbG9jYXRlUG9vbFBhZ2VzSSAoUG9vbFR5cGUs IE5vUGFnZXMsIEdyYW51bGFyaXR5KTsNCj4gPiArICAgIEhlYWQgPSBDb3JlQWxsb2NhdGVQb29s UGFnZXNJIChQb29sVHlwZSwgTm9QYWdlcywgR3JhbnVsYXJpdHksDQo+IE5lZWRHdWFyZCk7DQo+ ID4gKyAgICBpZiAoTmVlZEd1YXJkKSB7DQo+ID4gKyAgICAgIEhlYWQgPSBBZGp1c3RQb29sSGVh ZEEgKChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pSGVhZCwNCj4gTm9QYWdlcywgU2l6ZSk7 DQo+ID4gKyAgICB9DQo+ID4gICAgICBnb3RvIERvbmU7DQo+ID4gICAgfQ0KPiA+DQo+ID4gQEAg LTQyMiw3ICs0NDMsOCBAQCBDb3JlQWxsb2NhdGVQb29sSSAoDQo+ID4gICAgICAvLw0KPiA+ICAg ICAgLy8gR2V0IGFub3RoZXIgcGFnZQ0KPiA+ICAgICAgLy8NCj4gPiAtICAgIE5ld1BhZ2UgPSBD b3JlQWxsb2NhdGVQb29sUGFnZXNJIChQb29sVHlwZSwgRUZJX1NJWkVfVE9fUEFHRVMNCj4gKEdy YW51bGFyaXR5KSwgR3JhbnVsYXJpdHkpOw0KPiA+ICsgICAgTmV3UGFnZSA9IENvcmVBbGxvY2F0 ZVBvb2xQYWdlc0kgKFBvb2xUeXBlLCBFRklfU0laRV9UT19QQUdFUw0KPiAoR3JhbnVsYXJpdHkp LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYW51bGFyaXR5 LCBOZWVkR3VhcmQpOw0KPiA+ICAgICAgaWYgKE5ld1BhZ2UgPT0gTlVMTCkgew0KPiA+ICAgICAg ICBnb3RvIERvbmU7DQo+ID4gICAgICB9DQo+ID4gQEAgLTQ2OCwzMCArNDkwLDM5IEBAIERvbmU6 DQo+ID4NCj4gPiAgICBpZiAoSGVhZCAhPSBOVUxMKSB7DQo+ID4NCj4gPiArICAgIC8vDQo+ID4g KyAgICAvLyBBY2NvdW50IHRoZSBhbGxvY2F0aW9uDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgUG9v bC0+VXNlZCArPSBTaXplOw0KPiA+ICsNCj4gPiAgICAgIC8vDQo+ID4gICAgICAvLyBJZiB3ZSBo YXZlIGEgcG9vbCBidWZmZXIsIGZpbGwgaW4gdGhlIGhlYWRlciAmIHRhaWwgaW5mbw0KPiA+ICAg ICAgLy8NCj4gPiAgICAgIEhlYWQtPlNpZ25hdHVyZSA9IFBPT0xfSEVBRF9TSUdOQVRVUkU7DQo+ ID4gICAgICBIZWFkLT5TaXplICAgICAgPSBTaXplOw0KPiA+ICAgICAgSGVhZC0+VHlwZSAgICAg ID0gKEVGSV9NRU1PUllfVFlQRSkgUG9vbFR5cGU7DQo+ID4gLSAgICBUYWlsICAgICAgICAgICAg PSBIRUFEX1RPX1RBSUwgKEhlYWQpOw0KPiA+IC0gICAgVGFpbC0+U2lnbmF0dXJlID0gUE9PTF9U QUlMX1NJR05BVFVSRTsNCj4gPiAtICAgIFRhaWwtPlNpemUgICAgICA9IFNpemU7DQo+ID4gICAg ICBCdWZmZXIgICAgICAgICAgPSBIZWFkLT5EYXRhOw0KPiA+IC0gICAgREVCVUdfQ0xFQVJfTUVN T1JZIChCdWZmZXIsIFNpemUgLSBQT09MX09WRVJIRUFEKTsNCj4gPiArDQo+ID4gKyAgICBpZiAo SGFzUG9vbFRhaWwpIHsNCj4gPiArICAgICAgVGFpbCAgICAgICAgICAgID0gSEVBRF9UT19UQUlM IChIZWFkKTsNCj4gPiArICAgICAgVGFpbC0+U2lnbmF0dXJlID0gUE9PTF9UQUlMX1NJR05BVFVS RTsNCj4gPiArICAgICAgVGFpbC0+U2l6ZSAgICAgID0gU2l6ZTsNCj4gPiArDQo+ID4gKyAgICAg IFNpemUgLT0gUE9PTF9PVkVSSEVBRDsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIFNp emUgLT0gU0laRV9PRl9QT09MX0hFQUQ7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgREVC VUdfQ0xFQVJfTUVNT1JZIChCdWZmZXIsIFNpemUpOw0KPiA+DQo+ID4gICAgICBERUJVRyAoKA0K PiA+ICAgICAgICBERUJVR19QT09MLA0KPiA+ICAgICAgICAiQWxsb2NhdGVQb29sSTogVHlwZSAl eCwgQWRkciAlcCAobGVuICVseCkgJSxsZFxuIiwgUG9vbFR5cGUsDQo+ID4gICAgICAgIEJ1ZmZl ciwNCj4gPiAtICAgICAgKFVJTlQ2NCkoU2l6ZSAtIFBPT0xfT1ZFUkhFQUQpLA0KPiA+ICsgICAg ICAoVUlOVDY0KVNpemUsDQo+ID4gICAgICAgIChVSU5UNjQpIFBvb2wtPlVzZWQNCj4gPiAgICAg ICAgKSk7DQo+ID4NCj4gPiAtICAgIC8vDQo+ID4gLSAgICAvLyBBY2NvdW50IHRoZSBhbGxvY2F0 aW9uDQo+ID4gLSAgICAvLw0KPiA+IC0gICAgUG9vbC0+VXNlZCArPSBTaXplOw0KPiA+DQo+ID4g ICAgfSBlbHNlIHsNCj4gPiAgICAgIERFQlVHICgoREVCVUdfRVJST1IgfCBERUJVR19QT09MLCAi QWxsb2NhdGVQb29sOiBmYWlsZWQgdG8NCj4gYWxsb2NhdGUgJWxkIGJ5dGVzXG4iLCAoVUlOVDY0 KSBTaXplKSk7DQo+ID4gQEAgLTU4OCw2ICs2MTksMzQgQEAgQ29yZUZyZWVQb29sUGFnZXNJICgN Cj4gPiAgICAgIChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pTWVtb3J5LCBFRklfUEFHRVNf VE9fU0laRSAoTm9QYWdlcykpOw0KPiA+ICB9DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAgSW50ZXJu YWwgZnVuY3Rpb24uICBGcmVlcyBndWFyZGVkIHBvb2wgcGFnZXMuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbSAgUG9vbFR5cGUgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiBtZW1vcnkgZm9yIHRoZSBw b29sIHBhZ2VzDQo+ID4gKyAgQHBhcmFtICBNZW1vcnkgICAgICAgICAgICAgICAgIFRoZSBiYXNl IGFkZHJlc3MgdG8gZnJlZQ0KPiA+ICsgIEBwYXJhbSAgTm9QYWdlcyAgICAgICAgICAgICAgICBU aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtTVEFUSUMN Cj4gPiArVk9JRA0KPiA+ICtDb3JlRnJlZVBvb2xQYWdlc1dpdGhHdWFyZCAoDQo+ID4gKyAgSU4g RUZJX01FTU9SWV9UWVBFICAgICAgICBQb29sVHlwZSwNCj4gPiArICBJTiBFRklfUEhZU0lDQUxf QUREUkVTUyAgIE1lbW9yeSwNCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIE5vUGFn ZXMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBNZW1v cnlHdWFyZGVkOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIE5vUGFnZXNHdWFyZGVk Ow0KPiA+ICsNCj4gPiArICBNZW1vcnlHdWFyZGVkICA9IE1lbW9yeTsNCj4gPiArICBOb1BhZ2Vz R3VhcmRlZCA9IE5vUGFnZXM7DQo+ID4gKw0KPiA+ICsgIEFkanVzdE1lbW9yeUYgKCZNZW1vcnks ICZOb1BhZ2VzKTsNCj4gPiArICBDb3JlRnJlZVBvb2xQYWdlc0kgKFBvb2xUeXBlLCBNZW1vcnks IE5vUGFnZXMpOw0KPiA+ICsNCj4gPiArICBVbnNldEd1YXJkRm9yTWVtb3J5IChNZW1vcnlHdWFy ZGVkLCBOb1BhZ2VzR3VhcmRlZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gIC8qKg0KPiA+ICAgIElu dGVybmFsIGZ1bmN0aW9uIHRvIGZyZWUgYSBwb29sIGVudHJ5Lg0KPiA+ICAgIENhbGxlciBtdXN0 IGhhdmUgdGhlIG1lbW9yeSBsb2NrIGhlbGQNCj4gPiBAQCAtNjE2LDYgKzY3NSw4IEBAIENvcmVG cmVlUG9vbEkgKA0KPiA+ICAgIFVJTlROICAgICAgIE9mZnNldDsNCj4gPiAgICBCT09MRUFOICAg ICBBbGxGcmVlOw0KPiA+ICAgIFVJTlROICAgICAgIEdyYW51bGFyaXR5Ow0KPiA+ICsgIEJPT0xF QU4gICAgIElzR3VhcmRlZDsNCj4gPiArICBCT09MRUFOICAgICBIYXNQb29sVGFpbDsNCj4gPg0K PiA+ICAgIEFTU0VSVChCdWZmZXIgIT0gTlVMTCk7DQo+ID4gICAgLy8NCj4gPiBAQCAtNjI4LDI0 ICs2ODksMzIgQEAgQ29yZUZyZWVQb29sSSAoDQo+ID4gICAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICAgIH0NCj4gPg0KPiA+IC0gIFRhaWwgPSBIRUFEX1RPX1RBSUwgKEhl YWQpOw0KPiA+IC0gIEFTU0VSVChUYWlsICE9IE5VTEwpOw0KPiA+ICsgIElzR3VhcmRlZCAgID0g SXNQb29sVHlwZVRvR3VhcmQgKEhlYWQtPlR5cGUpICYmDQo+ID4gKyAgICAgICAgICAgICAgICBJ c01lbW9yeUd1YXJkZWQgKChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pSGVhZCk7DQo+ID4g KyAgSGFzUG9vbFRhaWwgPSAhKElzR3VhcmRlZCAmJg0KPiA+ICsgICAgICAgICAgICAgICAgICAo KFBjZEdldDggKFBjZEhlYXBHdWFyZFByb3BlcnR5TWFzaykgJiBCSVQ3KSA9PSAwKSk7DQo+ID4N Cj4gPiAtICAvLw0KPiA+IC0gIC8vIERlYnVnDQo+ID4gLSAgLy8NCj4gPiAtICBBU1NFUlQgKFRh aWwtPlNpZ25hdHVyZSA9PSBQT09MX1RBSUxfU0lHTkFUVVJFKTsNCj4gPiAtICBBU1NFUlQgKEhl YWQtPlNpemUgPT0gVGFpbC0+U2l6ZSk7DQo+ID4gLSAgQVNTRVJUX0xPQ0tFRCAoJm1Qb29sTWVt b3J5TG9jayk7DQo+ID4gKyAgaWYgKEhhc1Bvb2xUYWlsKSB7DQo+ID4gKyAgICBUYWlsID0gSEVB RF9UT19UQUlMIChIZWFkKTsNCj4gPiArICAgIEFTU0VSVCAoVGFpbCAhPSBOVUxMKTsNCj4gPg0K PiA+IC0gIGlmIChUYWlsLT5TaWduYXR1cmUgIT0gUE9PTF9UQUlMX1NJR05BVFVSRSkgew0KPiA+ IC0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAtICB9DQo+ID4gKyAgICAv Lw0KPiA+ICsgICAgLy8gRGVidWcNCj4gPiArICAgIC8vDQo+ID4gKyAgICBBU1NFUlQgKFRhaWwt PlNpZ25hdHVyZSA9PSBQT09MX1RBSUxfU0lHTkFUVVJFKTsNCj4gPiArICAgIEFTU0VSVCAoSGVh ZC0+U2l6ZSA9PSBUYWlsLT5TaXplKTsNCj4gPg0KPiA+IC0gIGlmIChIZWFkLT5TaXplICE9IFRh aWwtPlNpemUpIHsNCj4gPiAtICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g KyAgICBpZiAoVGFpbC0+U2lnbmF0dXJlICE9IFBPT0xfVEFJTF9TSUdOQVRVUkUpIHsNCj4gPiAr ICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgIH0NCj4gPiArDQo+ ID4gKyAgICBpZiAoSGVhZC0+U2l6ZSAhPSBUYWlsLT5TaXplKSB7DQo+ID4gKyAgICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICB9DQo+ID4gICAgfQ0KPiA+DQo+ID4g KyAgQVNTRVJUX0xPQ0tFRCAoJm1Qb29sTWVtb3J5TG9jayk7DQo+ID4gKw0KPiA+ICAgIC8vDQo+ ID4gICAgLy8gRGV0ZXJtaW5lIHRoZSBwb29sIHR5cGUgYW5kIGFjY291bnQgZm9yIGl0DQo+ID4g ICAgLy8NCj4gPiBAQCAtNjgwLDE0ICs3NDksMjcgQEAgQ29yZUZyZWVQb29sSSAoDQo+ID4gICAg Ly8NCj4gPiAgICAvLyBJZiBpdCdzIG5vdCBvbiB0aGUgbGlzdCwgaXQgbXVzdCBiZSBwb29sIHBh Z2VzDQo+ID4gICAgLy8NCj4gPiAtICBpZiAoSW5kZXggPj0gU0laRV9UT19MSVNUIChHcmFudWxh cml0eSkpIHsNCj4gPiArICBpZiAoSW5kZXggPj0gU0laRV9UT19MSVNUIChHcmFudWxhcml0eSkg fHwgSXNHdWFyZGVkKSB7DQo+ID4NCj4gPiAgICAgIC8vDQo+ID4gICAgICAvLyBSZXR1cm4gdGhl IG1lbW9yeSBwYWdlcyBiYWNrIHRvIGZyZWUgbWVtb3J5DQo+ID4gICAgICAvLw0KPiA+IC0gICAg Tm9QYWdlcyA9IEVGSV9TSVpFX1RPX1BBR0VTKFNpemUpICsgRUZJX1NJWkVfVE9fUEFHRVMgKEdy YW51bGFyaXR5KSAtIDE7DQo+ID4gKyAgICBOb1BhZ2VzID0gRUZJX1NJWkVfVE9fUEFHRVMgKFNp emUpICsgRUZJX1NJWkVfVE9fUEFHRVMgKEdyYW51bGFyaXR5KSAtDQo+IDE7DQo+ID4gICAgICBO b1BhZ2VzICY9IH4oVUlOVE4pKEVGSV9TSVpFX1RPX1BBR0VTIChHcmFudWxhcml0eSkgLSAxKTsN Cj4gPiAtICAgIENvcmVGcmVlUG9vbFBhZ2VzSSAoUG9vbC0+TWVtb3J5VHlwZSwgKEVGSV9QSFlT SUNBTF9BRERSRVNTKQ0KPiAoVUlOVE4pIEhlYWQsIE5vUGFnZXMpOw0KPiA+ICsgICAgaWYgKElz R3VhcmRlZCkgew0KPiA+ICsgICAgICBIZWFkID0gQWRqdXN0UG9vbEhlYWRGICgoRUZJX1BIWVNJ Q0FMX0FERFJFU1MpKFVJTlROKUhlYWQpOw0KPiA+ICsgICAgICBDb3JlRnJlZVBvb2xQYWdlc1dp dGhHdWFyZCAoDQo+ID4gKyAgICAgICAgUG9vbC0+TWVtb3J5VHlwZSwNCj4gPiArICAgICAgICAo RUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKUhlYWQsDQo+ID4gKyAgICAgICAgTm9QYWdlcw0K PiA+ICsgICAgICAgICk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBDb3JlRnJlZVBv b2xQYWdlc0kgKA0KPiA+ICsgICAgICAgIFBvb2wtPk1lbW9yeVR5cGUsDQo+ID4gKyAgICAgICAg KEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilIZWFkLA0KPiA+ICsgICAgICAgIE5vUGFnZXMN Cj4gPiArICAgICAgICApOw0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gICAgfSBlbHNlIHsNCj4gPg0K PiA+IC0tDQo+ID4gMi4xNC4xLndpbmRvd3MuMQ0KPiA+DQo+ID4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBlZGsyLWRldmVsIG1haWxpbmcgbGlz dA0KPiA+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gaHR0cHM6Ly9saXN0cy4wMS5vcmcv bWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo=