From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 1/2] drm/amdgpu: Moved fault hash table to amdgpu vm Date: Mon, 10 Sep 2018 11:42:32 +0200 Message-ID: <143b57c2-12d1-8cb1-ddea-a8fe7226e1c4@gmail.com> References: <1536290910-6476-1-git-send-email-Oak.Zeng@amd.com> <12913b70-925d-2e17-2dc2-491ed8592610@amd.com> <546c9911-b7af-03c8-b5e2-f2bb07932c0b@gmail.com> <89e7515f-53f1-9f10-aeb6-7fc1b8df2702@amd.com> <9b6b78aa-c98a-a741-7ce2-0e7811e1f806@amd.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <9b6b78aa-c98a-a741-7ce2-0e7811e1f806-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: =?UTF-8?Q?Christian_K=c3=b6nig?= , Felix Kuehling , "Zeng, Oak" , Oak Zeng , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "Yang, Philip" SGkgRmVsaXggJiBPYWssCgpvdmVyIHRoZSB3ZWVrZW5kIEkgaGFkIHRoZSBpZGVhIHRoYXQgd2Ug Y291bGQganVzdCB1c2UgdGhlIHNoYWRvdyBCT3MgdG8gCmhhdmUgdGhlIGN1cnJlbnQgc3RhdGUg aW4gYSBwYWdlIGZhdWx0LiBUaGV5IGFyZSBHVFQgQk9zIGFuZCBDUFUgCmFjY2Vzc2libGUgYW55 d2F5LgoKUmVnYXJkcywKQ2hyaXN0aWFuLgoKQW0gMDguMDkuMjAxOCB1bSAwOTozNCBzY2hyaWVi IENocmlzdGlhbiBLw7ZuaWc6Cj4gSGkgRmVsaXgsCj4KPj4gQnV0IHdoeSBkbyB5b3Ugd2FudCB0 byB1cGRhdGUgcGFnZSB0YWJsZXMgd2hlbiB0aGVyZSBpcyBubyBtb3JlIHVzZXIKPj4gbW9kZSBj b250ZXh0IHRoYXQgY2FyZXMgYWJvdXQgdGhlbT8gSXMgdGhpcyBqdXN0IHRvIGFsbG93IHBlbmRp bmcgd29yawo+PiB0byBjb21wbGV0ZSBhZnRlciB0aGUgdXNlciBtb2RlIGNvbnRleHQgaXMgZ29u ZT8gVG8gcHJldmVudCBoYW5ncz8KPgo+IFRoZSBwcm9ibGVtIEknbSBzZWUgaXMgdGhhdCB3ZSBz dGlsbCBkb24ndCBoYXZlIGEgcmVsaWFibGUgd2F5IG9mIAo+IGtpbGxpbmcgYSBjb21tYW5kIHN1 Ym1pc3Npb24gd2hpbGUgbWFraW5nIHN1cmUgdGhhdCBubyBtb3JlIGZhdWx0cyBvZiAKPiBpdCBh cmUgaW4gdGhlIGZsaWdodC4KPgo+IEUuZy4gdGhlIEhXUyBoYXMgYSBmdW5jdGlvbiB0byBraWxs IGEgcnVubmluZyBqb2Igb24gdGhlIGhhcmR3YXJlLCBidXQgCj4gdGhhdCBvbmx5IHdvcmtzIGZv ciBjb21wdXRlIGFuZCB0aGVyZSBpcyBubyB3YXkgb2YgdGVsbGluZyB3aGVuIHRoYXQgCj4gb3Bl cmF0aW9uIGhhcyBmaW5pc2hlZC4KPgo+IEJ1dCBPYWsgaGFzIGFscmVhZHkgY29udmluY2VkIG1l IHRoYXQgd2Ugc2hvdWxkIHByb2JhYmx5IHdvcmsgb24gdGhhdCAKPiBpbnN0ZWFkIG9mIHRyeWlu ZyB0byBrZWVwIHRoZSBWTSBhbGl2ZSBhcyBsb25nIGFzIHBvc3NpYmxlLgo+Cj4gUmVnYXJkcywK PiBDaHJpc3RpYW4uCj4KPiBBbSAwOC4wOS4yMDE4IHVtIDAyOjI3IHNjaHJpZWIgRmVsaXggS3Vl aGxpbmc6Cj4+IEhpIENocmlzdGlhbiwKPj4KPj4gSSdtIG5vdCBzdXJlIEkgZ2V0IHlvdXIgcG9p bnQgaGVyZS4KPj4KPj4gQXMgSSB1bmRlcnN0YW5kIGl0LCB0aGUgYW1kZ3B1X3ZtIHN0cnVjdHVy ZSByZXByZXNlbnRzIHRoZSB1c2VyIG1vZGUgVk0KPj4gY29udGV4dC4gSXQgaGFzIHRoZSBwb2lu dGVycyB0byB0aGUgcm9vdCBwYWdlIGRpcmVjdG9yeSBhbmQgdGhlIHJlc3Qgb2YKPj4gdGhlIHBh Z2UgdGFibGUgaGllcmFyY2h5LiBJZiB0aGVyZSBpcyBubyBhbWRncHVfdm0sIHRoZXJlIGlzIG5v IHVzZXIKPj4gbW9kZSBjb250ZXh0IHRoYXQgY2FyZXMgYWJvdXQgdGhlIHBhZ2UgdGFibGVzLgo+ Pgo+PiBJZiB3ZSBsZWF2ZSB0aGUgcGFnZSB0YWJsZSBwb2ludGVycyBpbiB0aGUgYW1kZ3B1X3Zt LCB0aGVuIGhhbmRsaW5nCj4+IGZhdWx0cyBhZnRlciB0aGUgVk0gaXMgZGVzdHJveWVkIGlzIHBv aW50bGVzcy4gV2UgY2FuJ3QgZmluZCB0aGUgcGFnZQo+PiB0YWJsZXMgYW5kIHdlIGNhbid0IHVw ZGF0ZSB0aGVtLCBzbyB0aGVyZSBpcyBub3RoaW5nIHdlIGNhbiBkbyBpbgo+PiByZXNwb25zZSB0 byBWTSBmYXVsdHMuCj4+Cj4+IFNvIEknbSBndWVzc2luZyB0aGF0IHlvdSB3YW50IHRvIG1vdmUg dGhlIHBhZ2UgdGFibGUgcG9pbnRlcnMgaW50byBhCj4+IGRpZmZlcmVudCBzdHJ1Y3R1cmUgdGhh dCBleGlzdHMgaGFsZi1pbmRlcGVuZGVudGx5IG9mIHRoZSBWTS4gSXQgd291bGQKPj4gYmUgY3Jl YXRlZCB3aGVuIHRoZSBWTSBpcyBjcmVhdGVkICh0aGF0J3Mgd2hlcmUgd2UgY3VycmVudGx5IGFs bG9jYXRlCj4+IHRoZSBQQVNJRCkgYnV0IGNhbiBiZSBkZXN0cm95ZWQgc2xpZ2h0bHkgbGF0ZXIu Cj4+Cj4+IEJ1dCB3aHkgZG8geW91IHdhbnQgdG8gdXBkYXRlIHBhZ2UgdGFibGVzIHdoZW4gdGhl cmUgaXMgbm8gbW9yZSB1c2VyCj4+IG1vZGUgY29udGV4dCB0aGF0IGNhcmVzIGFib3V0IHRoZW0/ IElzIHRoaXMganVzdCB0byBhbGxvdyBwZW5kaW5nIHdvcmsKPj4gdG8gY29tcGxldGUgYWZ0ZXIg dGhlIHVzZXIgbW9kZSBjb250ZXh0IGlzIGdvbmU/IFRvIHByZXZlbnQgaGFuZ3M/Cj4+Cj4+IFJl Z2FyZHMsCj4+IMKgwqAgRmVsaXgKPj4KPj4gT24gMjAxOC0wOS0xMCAwNzoyMCBBTSwgQ2hyaXN0 aWFuIEvDtm5pZyB3cm90ZToKPj4+PiBBbSBJIHJpZ2h0IHRoYXQgdGhlIGhhbmRsaW5nIG9mIHBh Z2UgZmF1bHQgbmVlZCBhIHZhbGlkIFZNPwo+Pj4gTm8sIGV4YWN0bHkgdGhhdCB2aWV3IGlzIGlu Y29ycmVjdC4KPj4+Cj4+PiBUaGUgVk0gaXMgbWVhbnQgdG8gYmUgYSBtZW1vcnkgbWFuYWdlbWVu dCBzdHJ1Y3R1cmUgb2YgcGFnZSB0YWJsZXMgYW5kCj4+PiBpcyBjb21wbGV0ZWx5IHBvaW50bGVz cyBmYXVsdCBwcm9jZXNzaW5nIGJlY2F1c2UgaXQgcmVwcmVzZW50IHRoZQo+Pj4gZnV0dXJlIHN0 YXRlIG9mIHRoZSBwYWdlIHRhYmxlcyBhbmQgbm90IHRoZSBjdXJyZW50IG9uZS4KPj4+Cj4+PiBX aGF0IHdlIG5lZWQgZm9yIGZhdWx0IHByb2Nlc3NpbmcgaXMgYSBuZXcgc3RydWN0dXJlIGJ1aWxk IGFyb3VuZAo+Pj4gUEFTSURzIHdoaWNoIGlzIGZlZWQgYnkgdGhlIHdpdGggYWRkcmVzc2VzIHdo ZW4gcGFnZSB0YWJsZXMgYXJlIG1vdmVkCj4+PiBhcm91bmQuCj4+Pgo+Pj4gQWx0ZXJuYXRpdmVs eSBJIGhvcGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSBTRE1BIHRvIHdhbGsgdGhlIHBhZ2UgdGFibGVz Cj4+PiBhbmQgdXBkYXRlIHRoZSByZXF1aXJlZCBlbnRyaWVzIGJ5IGp1c3QgdXNpbmcgdGhlIGFk ZHJlc3MuCj4+Pgo+Pj4gUmVnYXJkcywKPj4+IENocmlzdGlhbi4KPj4+Cj4+PiBBbSAwNy4wOS4y MDE4IHVtIDE2OjU1IHNjaHJpZWIgWmVuZywgT2FrOgo+Pj4+IEhpIENocmlzdGlhbiwKPj4+Pgo+ Pj4+Cj4+Pj4gV2hhdCBpcyB0aGUgdmFsdWUgb2YgZGVsYXkgdGhlIGRlc3Ryb3kgb2YgaGFzaCB0 byBhZnRlciB2bSBpcwo+Pj4+IGRlc3Ryb3llZD8gU2luY2Ugdm0gaXMgZGVzdHJveWVkLCB5b3Ug YmFzaWNhbGx5IGRvbuKAmXQgaGF2ZSBlbm91Z2gKPj4+PiBpbmZvcm1hdGlvbiB0byBwYWdpbmcg aW4gdGhlIGNvcnJlY3QgcGFnZSB0byBncHV2bS4gQW0gSSByaWdodCB0aGF0Cj4+Pj4gdGhlIGhh bmRsaW5nIG9mIHBhZ2UgZmF1bHQgbmVlZCBhIHZhbGlkIFZNPyBGb3IgZXhhbXBsZSwgeW91IG5l ZWQgdGhlCj4+Pj4gVk0gdG8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIGFkZHJlc3Mg b2YgdGhlIGZhdWx0eSBwYWdlLgo+Pj4+Cj4+Pj4KPj4+PiBBZnRlciB2bSBpcyBkZXN0cm95ZWQs IHRoZSByZXRyeSBpbnRlcnJ1cHQgY2FuIGJlIGRpcmVjdGx5IGRpc2NhcmQgYXMKPj4+PiB5b3Ug Y2Fu4oCZdCBmaW5kIHZtIHRocm91Z2ggcGFzaWQuIFlvdSBjYW4gdGhpbmsgdGhpcyBpcyBhbHNv IG9uZSBraW5kCj4+Pj4gb2YgcHJlc2NyZWVuLgo+Pj4+Cj4+Pj4KPj4+PiBTbyBJIGFtIHN0YW5k IGZvciB0aGUgcG9pbnQgdGhhdCwgdGhlcmUgaXMgbm8gbmVlZCB0byBkZWxheSB0aGUKPj4+PiBk ZXN0cm95IG9mIGhhc2ggdG8gYWZ0ZXIgdm0gaXMgZGVzdHJveWVkLiBQcmVzY3JlZW5pbmcgaGFz aCBjYW4gYmUKPj4+PiBkZXN0cm95ZWQgYXQgdGhlIHRpbWUgb2Ygdm1fZmluaS4KPj4+Pgo+Pj4+ Cj4+Pj4gVGhhbmtzLAo+Pj4+Cj4+Pj4gT2FrCj4+Pj4KPj4+Pgo+Pj4+ICpGcm9tOipDaHJpc3Rp YW4gS8O2bmlnIDxja29lbmlnLmxlaWNodHp1bWVya2VuQGdtYWlsLmNvbT4KPj4+PiAqU2VudDoq IEZyaWRheSwgU2VwdGVtYmVyIDA3LCAyMDE4IDQ6MzkgQU0KPj4+PiAqVG86KiBaZW5nLCBPYWsg PE9hay5aZW5nQGFtZC5jb20+OyBPYWsgWmVuZyA8emVuZ3NoYW5qdW5AZ21haWwuY29tPjsKPj4+ PiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4+ICpDYzoqIFplbmcsIE9hayA8T2Fr LlplbmdAYW1kLmNvbT4KPj4+PiAqU3ViamVjdDoqIFJlOiBbUEFUQ0ggMS8yXSBkcm0vYW1kZ3B1 OiBNb3ZlZCBmYXVsdCBoYXNoIHRhYmxlIHRvCj4+Pj4gYW1kZ3B1IHZtCj4+Pj4KPj4+Pgo+Pj4+ IEhpIE9haywKPj4+Pgo+Pj4+IHllYWgsIGJ1dCB0aGlzIGlzIHN0aWxsIGEgTkFLLiBNYWtpbmcg dGhlIGhhc2ggcGVyIFBBU0lEIHdhcyBub3QgYQo+Pj4+IHN1Z2dlc3Rpb24gYnV0IHJhdGhlciBh IG11c3QgaGF2ZS4KPj4+Pgo+Pj4+IFRoZSBWTSBzdHJ1Y3R1cmVzIG11c3QgYmUgZGVzdHJveWVk IHdoaWxlIHRoZSBwcm9jZXNzaW5nIGlzIHN0aWxsCj4+Pj4gb25nb2luZywgb3Igb3RoZXJ3aXNl IHdlIHdvdWxkIG5vdCBoYXZlIGEgY2xlYW4gT09NIGhhbmRsaW5nLgo+Pj4+Cj4+Pj4gVGhlIElE UiBmb3IgUEFTSUQgbG9ja3VwIGNhbiBiZSBwdXQgaW50byBhbWRncHVfaWRzLmMsIHlvdSBjYW4g anVzdAo+Pj4+IHJlcGxhY2UgdGhlIElEQSBhbHJlYWR5IHVzZWQgdGhlcmUgd2l0aCBhbiBJRFIu Cj4+Pj4KPj4+PiBTaW5jZSB0aGUgUEFTSUQgaXMgYWxyZWFkeSBmcmVlZCB1cCBkZWxheWVkIHdl IHNob3VsZCBoYXZlIHRoZSBncmFjZQo+Pj4+IHBlcmlvZCBmb3IgaW50ZXJydXB0IHByb2Nlc3Np bmcgaW5jbHVkZWQuIElmIHRoYXQgc3RpbGwgaXNuJ3QKPj4+PiBzdWZmaWNpZW50IHdlIGNhbiBz dGlsbCBhZGQgc29tZSBkZWxheWVkIHdvcmsgZm9yIHRoaXMuCj4+Pj4KPj4+PiBSZWdhcmRzLAo+ Pj4+IENocmlzdGlhbi4KPj4+Pgo+Pj4+IEFtIDA3LjA5LjIwMTggdW0gMDY6MTYgc2NocmllYiBv emVuZzoKPj4+Pgo+Pj4+IMKgwqDCoMKgIEhpIENocmlzdGlhbiwKPj4+Pgo+Pj4+IMKgwqDCoMKg IEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGZhdWx0IGhhc2ggaXMgbWFkZSBwZXIgdm0sIG5vdCBw ZXIgcGFzaWQKPj4+PiDCoMKgwqDCoCBhcyBzdWdnZXN0ZWQsIGJhc2VkIG9uIGJlbG93IGNvbnNp ZGVyYXRpb25zOgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgICogRGVsYXkgdGhlIGRlc3Ryb3kgb2Yg aGFzaCBpbnRyb2R1Y2VzIG1vcmUgZWZmb3J0IGxpa2UgaG93IHRvCj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCBzZXQgdGhlIHByb3BlciBncmFjZSBwZXJpb2QgYWZ0ZXIgd2hpY2ggbm8gcmV0cnkgaW50 ZXJydXB0Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCB3aWxsIGJlIGdlbmVyYXRlZC4gV2Ugd2FudCB0 byBhdm9pZCB0aG9zZSBjb21wbGljYXRpb24gaWYgd2UKPj4+PiDCoMKgwqDCoMKgwqDCoMKgIGNh bi4KPj4+PiDCoMKgwqDCoMKgwqAgKiBUaGXCoCBwcm9ibGVtIG9mIHRoZSBwZXIgdm0gaW1wbGVt ZW50YXRpb24gaXMgdGhhdCBpdCBpcyBoYXJkCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCB0byBkZWxh eSB0aGUgZGVzdHJveSBvZiBmYXVsdCBoYXNoLCBiZWNhdXNlIHdoZW4gdm0gaXMKPj4+PiDCoMKg wqDCoMKgwqDCoMKgIGRlc3Ryb3llZCwgcHJlc2NyZWVuIGZ1bmN0aW9uIHdvbid0IGJlIGFibGUg dG8gcmV0cmlldmUgdGhlCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBmYXVsdCBoYXNoLiBCdXQgaW4g dGhpcyBjYXNlLCB0aGUgcHJlc2NyZWVuIGZ1bmN0aW9uIGNhbgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgZWl0aGVyIGxldCB0aGUgaW50ZXJydXB0IGdvIHRocm91Z2ggKHRvIGdtYykgb3IgaWdub3Jl IGl0Lgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgRnJvbSB0aGlzIHBlcnNwZWN0aXZlLCBpdCBpcyBu b3QgdmVyeSBuZWNlc3NhcnkgdG8gZGVsYXkgdGhlCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBkZXN0 cm95IG9mIGhhc2ggdGFibGUuCj4+Pj4gwqDCoMKgwqDCoMKgICogT24gdGhlIG90aGVyIGhhbmQs IHNpbmNlIEFTSUNzIGFmdGVyIHZlZ2ExMCBoYXZlIHRoZSBIVyBDQU0KPj4+PiDCoMKgwqDCoMKg wqDCoMKgIGZlYXR1cmUuIFNvIHRoZSBTVyBJViBwcmVzY3JlZW4gaXMgb25seSB1c2VmdWwgZm9y IHZlZ2ExMC4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIEZvciBhbGwgdGhlIEhXIGltcGxlbWVudGVk IENBTSwgd2UgY2FuIGNvbnNpZGVyIHRoZSBkZWxheWVkCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBD QU0gYWNrbm93bGVkZ21lbnQuCj4+Pj4gwqDCoMKgwqDCoMKgICogTWFraW5nIGl0IHBlciBwYXNp ZCBuZWVkIHRvIGludHJvZHVjZSBhbm90aGVyIGlkciB0bwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg Y29ycmVsYXRlIHBhc2lkIGFuZCBoYXNoIHRhYmxlIC0gd2hlcmUgdG8gcHV0IHRoZSBpZHI/IFlv dQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgd2lsbCBoYXZlIHRvIG1ha2UgaXQgYSBnbG9iYWwgdmFy aWFibGUgd2hpY2ggaXMgbm90IHZlcnkKPj4+PiDCoMKgwqDCoMKgwqDCoMKgIGRlc2lyYWJsZS4K Pj4+Pgo+Pj4+IMKgwqDCoMKgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaCBpcyB0byBz b2x2ZSB0aGUgaW50ZXItcHJvY2VzcyBsb2NrCj4+Pj4gwqDCoMKgwqAgaXNzdWUgKHdoZW4gaGFz aCB0YWJsZSBpcyBmdWxsKSwgd2hpbGUgc3RpbGwga2VlcCBjb2RlcyBzaW1wbGUuCj4+Pj4KPj4+ PiDCoMKgwqDCoCBBbHNvIHdpdGggdGhpcyBwYXRjaCwgdGhlIGZhdWx0cyBrZmlmbyBpcyBub3Qg bmVjZXNzYXJ5IGFueSBtb3JlLgo+Pj4+IMKgwqDCoMKgIFNlZSBwYXRjaCAyLgo+Pj4+Cj4+Pj4g wqDCoMKgwqAgUmVnYXJkcywKPj4+Pgo+Pj4+IMKgwqDCoMKgIE9hawo+Pj4+Cj4+Pj4KPj4+PiDC oMKgwqDCoCBPbiAwOS8wNi8yMDE4IDExOjI4IFBNLCBPYWsgWmVuZyB3cm90ZToKPj4+Pgo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqAgSW4gc3RlYWQgb2Ygc2hhcmUgb25lIGZhdWx0IGhhc2ggdGFibGUg cGVyIGRldmljZSwgbWFrZSBpdAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBwZXIgdm0uIFRo aXMgY2FuIGF2b2lkIGludGVyLXByb2Nlc3MgbG9jayBpc3N1ZSB3aGVuIGZhdWx0Cj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgIGhhc2ggdGFibGUgaXMgZnVsbC4KPj4+Pgo+Pj4+Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCBDaGFuZ2UtSWQ6IEk1ZDEyODFiN2M0MWVkZGM4ZTI2MTEzZTAxMDUxNjU1 NzU4OGQzNzA4Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIFNpZ25lZC1vZmYtYnk6IE9hayBa ZW5nIDxPYWsuWmVuZ0BhbWQuY29tPiAKPj4+PiA8bWFpbHRvOk9hay5aZW5nQGFtZC5jb20+Cj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIFN1Z2dlc3RlZC1ieTogQ2hyaXN0aWFuIEtvbmlnIDxD aHJpc3RpYW4uS29lbmlnQGFtZC5jb20+IAo+Pj4+IDxtYWlsdG86Q2hyaXN0aWFuLktvZW5pZ0Bh bWQuY29tPgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBTdWdnZXN0ZWQtYnk6IEZlbGl4IEt1 ZWhsaW5nIDxGZWxpeC5LdWVobGluZ0BhbWQuY29tPiAKPj4+PiA8bWFpbHRvOkZlbGl4Lkt1ZWhs aW5nQGFtZC5jb20+Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0tLQo+Pj4+Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9paC5jIHzC oCA3NSAKPj4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWguaCB8wqAgMTAgLS0t LQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV92bS5jIHwgMTAyIAo+Pj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV92bS5oIHzCoCAxMiArKysrCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmVnYTEwX2loLmMgfMKgIDM4ICsrKysrLS0tLS0tLQo+ Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIDUgZmlsZXMgY2hhbmdlZCwgMTI3IGluc2VydGlv bnMoKyksIDExMCBkZWxldGlvbnMoLSkKPj4+Pgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2loLmMgCj4+Pj4g Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWguYwo+Pj4+Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCBpbmRleCAwNjM3M2Q0Li40ZWQ4NjIxIDEwMDY0NAo+Pj4+Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWguYwo+ Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfaWguYwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBAQCAtMTk3LDc4ICsxOTcs MyBAQCBpbnQgYW1kZ3B1X2loX3Byb2Nlc3Moc3RydWN0IAo+Pj4+IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgcmV0dXJuIElSUV9IQU5ETEVEOwo+ Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+Pgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCAtLyoqCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBhbWRncHVfaWhfYWRkX2Zh dWx0IC0gQWRkIGEgcGFnZSBmYXVsdCByZWNvcmQKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg LSAqCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBAYWRldjogYW1kZ3B1IGRldmljZSBw b2ludGVyCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBAa2V5OiA2NC1iaXQgZW5jb2Rp bmcgb2YgUEFTSUQgYW5kIGFkZHJlc3MKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqCj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBh IHJldHJ5IHBhZ2UgZmF1bHQgCj4+Pj4gaW50ZXJydXB0IGlzCj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgIC0gKiByZWNlaXZlZC4gSWYgdGhpcyBpcyBhIG5ldyBwYWdlIGZhdWx0LCBpdCB3aWxs IGJlIAo+Pj4+IGFkZGVkIHRvIGEgaGFzaAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtICog dGFibGUuIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIAo+Pj4+ IG5ldyBmYXVsdCwgb3IKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIGEgZmF1bHQgdGhh dCB3YXMgYWxyZWFkeSBrbm93biBhbmQgaXMgYWxyZWFkeSBiZWluZyAKPj4+PiBoYW5kbGVkLgo+ Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtICoKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg LSAqIElmIHRoZXJlIGFyZSB0b28gbWFueSBwZW5kaW5nIHBhZ2UgZmF1bHRzLCB0aGlzIHdpbGwg Cj4+Pj4gZmFpbC4gUmV0cnkKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIGludGVycnVw dHMgc2hvdWxkIGJlIGlnbm9yZWQgaW4gdGhpcyBjYXNlIHVudGlsIHRoZXJlIAo+Pj4+IGlzIGVu b3VnaAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtICogZnJlZSBzcGFjZS4KPj4+Pgo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqAgLSAqCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBSZXR1 cm5zIDAgaWYgdGhlIGZhdWx0IHdhcyBhZGRlZCwgMSBpZiB0aGUgZmF1bHQgd2FzIAo+Pj4+IGFs cmVhZHkga25vd24sCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiAtRU5PU1BDIGlmIHRo ZXJlIGFyZSB0b28gbWFueSBwZW5kaW5nIGZhdWx0cy4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgLSAqLwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtaW50IGFtZGdwdV9paF9hZGRfZmF1 bHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHU2NCBrZXkpCj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgIC17Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCB1bnNpZ25lZCBsb25n IGZsYWdzOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgaW50IHIgPSAtRU5PU1BDOwo+ Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3C oCBpZiAoV0FSTl9PTl9PTkNFKCFhZGV2LT5pcnEuaWguZmF1bHRzKSkKPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgLcKgwqDCoMKgwqDCoMKgwqDCoCAvKiBTaG91bGQgYmUgYWxsb2NhdGVkIGlu IDxJUD5faWhfc3dfaW5pdCBvbiAKPj4+PiBHUFVzIHRoYXQKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKgICogc3VwcG9ydCByZXRyeSBmYXVsdHMgYW5kIHJl cXVpcmUgcmV0cnkgCj4+Pj4gZmlsdGVyaW5nLgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAt wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLQo+Pj4+ Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtIHNwaW5fbG9ja19pcnFzYXZlKCZhZGV2LT5pcnEuaWgu ZmF1bHRzLT5sb2NrLCBmbGFncyk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0KPj4+Pgo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIC8qIE9ubHkgbGV0IHRoZSBoYXNoIHRhYmxlIGZpbGwg dXAgdG8gNTAlIGZvciBiZXN0IAo+Pj4+IHBlcmZvcm1hbmNlICovCj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgIC3CoCBpZiAoYWRldi0+aXJxLmloLmZhdWx0cy0+Y291bnQgPj0gKDEgPDwgCj4+ Pj4gKEFNREdQVV9QQUdFRkFVTFRfSEFTSF9CSVRTLTEpKSkKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgLcKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIHVubG9ja19vdXQ7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgIC0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIHIgPSBjaGFzaF90 YWJsZV9jb3B5X2luKCZhZGV2LT5pcnEuaWguZmF1bHRzLT5oYXNoLCAKPj4+PiBrZXksIE5VTEwp Owo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgaWYgKCFyKQo+Pj4+Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCAtwqDCoMKgwqDCoMKgwqDCoMKgIGFkZXYtPmlycS5paC5mYXVsdHMtPmNvdW50 Kys7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgLcKgIC8qIGNoYXNoX3RhYmxlX2NvcHlfaW4gc2hvdWxkIG5ldmVyIGZhaWwgdW5sZXNzIHdl J3JlIAo+Pj4+IGxvc2luZyBjb3VudCAqLwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAg V0FSTl9PTl9PTkNFKHIgPCAwKTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLQo+Pj4+Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCAtdW5sb2NrX291dDoKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgLSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGV2LT5pcnEuaWguZmF1bHRzLT5sb2NrLCBm bGFncyk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCByZXR1cm4gcjsKPj4+Pgo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqAgLX0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLQo+Pj4+Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCAtLyoqCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBh bWRncHVfaWhfY2xlYXJfZmF1bHQgLSBSZW1vdmUgYSBwYWdlIGZhdWx0IHJlY29yZAo+Pj4+Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCAtICoKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIEBh ZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAq IEBrZXk6IDY0LWJpdCBlbmNvZGluZyBvZiBQQVNJRCBhbmQgYWRkcmVzcwo+Pj4+Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCAtICoKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIFRoaXMgc2hv dWxkIGJlIGNhbGxlZCB3aGVuIGEgcGFnZSBmYXVsdCBoYXMgYmVlbiAKPj4+PiBoYW5kbGVkLiBB bnkKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIGZ1dHVyZSBpbnRlcnJ1cHQgd2l0aCB0 aGlzIGtleSB3aWxsIGJlIHByb2Nlc3NlZCBhcyBhIG5ldwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCAtICogcGFnZSBmYXVsdC4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqLwo+Pj4+ Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtdm9pZCBhbWRncHVfaWhfY2xlYXJfZmF1bHQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsIAo+Pj4+IHU2NCBrZXkpCj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgIC17Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCB1bnNpZ25lZCBsb25nIGZs YWdzOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgaW50IHI7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgIC0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIGlmICghYWRldi0+ aXJxLmloLmZhdWx0cykKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm47Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0KPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgLSBzcGluX2xvY2tfaXJxc2F2ZSgmYWRldi0+aXJxLmloLmZhdWx0cy0+bG9j aywgZmxhZ3MpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtCj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgIC3CoCByID0gY2hhc2hfdGFibGVfcmVtb3ZlKCZhZGV2LT5pcnEuaWguZmF1bHRz LT5oYXNoLCBrZXksIAo+Pj4+IE5VTEwpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAg aWYgKCFXQVJOX09OX09OQ0UociA8IDApKSB7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3C oMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+aXJxLmloLmZhdWx0cy0+Y291bnQtLTsKPj4+Pgo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqAgLSBXQVJOX09OX09OQ0UoYWRldi0+aXJxLmloLmZhdWx0cy0+Y291 bnQgPCAwKTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIH0KPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgLQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtIHNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmFkZXYtPmlycS5paC5mYXVsdHMtPmxvY2ssIGZsYWdzKTsKPj4+Pgo+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgLX0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9paC5oIAo+Pj4+IGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2loLmgKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg aW5kZXggYTIzZTFjMC4uZjQxMWZmYiAxMDA2NDQKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2loLmgKPj4+Pgo+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2lo LmgKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTMyLDEzICszMiw2IEBAIHN0cnVjdCBh bWRncHVfZGV2aWNlOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICNkZWZpbmUgQU1ER1BV X0lIX0NMSUVOVElEX0xFR0FDWSAwCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgI2RlZmlu ZSBBTURHUFVfSUhfQ0xJRU5USURfTUFYIFNPQzE1X0lIX0NMSUVOVElEX01BWAo+Pj4+Cj4+Pj4K Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0jZGVmaW5lIEFNREdQVV9QQUdFRkFVTFRfSEFTSF9CSVRT IDgKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLXN0cnVjdCBhbWRncHVfcmV0cnlmYXVsdF9o YXNodGFibGUgewo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgREVDTEFSRV9DSEFTSF9U QUJMRShoYXNoLCBBTURHUFVfUEFHRUZBVUxUX0hBU0hfQklUUywgCj4+Pj4gOCwgMCk7Cj4+Pj4K Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCBzcGlubG9ja190wqDCoMKgwqAgbG9jazsKPj4+Pgo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY291bnQ7 Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC19Owo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCAtCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLyoKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgwqAgKiBSNnh4KyBJSCByaW5nCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIMKgICov Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIEBAIC01Nyw3ICs1MCw2IEBAIHN0cnVjdCBhbWRn cHVfaWhfcmluZyB7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgYm9vbMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1c2VfZG9vcmJlbGw7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgwqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1c2VfYnVzX2FkZHI7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgZG1hX2FkZHJf dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYl9kbWFfYWRkcjsgLyogb25seSB1c2VkIHdoZW4g Cj4+Pj4gdXNlX2J1c19hZGRyID0gdHJ1ZSAqLwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAt wqAgc3RydWN0IGFtZGdwdV9yZXRyeWZhdWx0X2hhc2h0YWJsZSAqZmF1bHRzOwo+Pj4+Cj4+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgIH07Cj4+Pj4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgwqAj ZGVmaW5lIEFNREdQVV9JSF9TUkNfREFUQV9NQVhfU0laRV9EVyA0Cj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgIEBAIC05NSw3ICs4Nyw1IEBAIGludCBhbWRncHVfaWhfcmluZ19pbml0KHN0cnVj dCAKPj4+PiBhbWRncHVfZGV2aWNlICphZGV2LCB1bnNpZ25lZCByaW5nX3NpemUsCj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi b29sIHVzZV9idXNfYWRkcik7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdm9pZCBhbWRn cHVfaWhfcmluZ19maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPj4+Pgo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBpbnQgYW1kZ3B1X2loX3Byb2Nlc3Moc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtaW50IGFtZGdwdV9paF9hZGRf ZmF1bHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHU2NCAKPj4+PiBrZXkpOwo+Pj4+Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCAtdm9pZCBhbWRncHVfaWhfY2xlYXJfZmF1bHQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsIAo+Pj4+IHU2NCBrZXkpOwo+Pj4+Cj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgIMKgI2VuZGlmCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAKPj4+PiBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKg IGluZGV4IDFkN2UzYzEuLjhiMjIwZTkgMTAwNjQ0Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKg IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4KPj4+PiDC oMKgwqDCoMKgwqDCoMKgICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92 bS5jCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIEBAIC0yNjkyLDYgKzI2OTIsMjIgQEAgdm9p ZCBhbWRncHVfdm1fYWRqdXN0X3NpemUoc3RydWN0IAo+Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYs IHVpbnQzMl90IG1pbl92bV9zaXplLAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDC oMKgwqDCoMKgwqDCoCDCoGFkZXYtPnZtX21hbmFnZXIuZnJhZ21lbnRfc2l6ZSk7Cj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICtz dGF0aWMgc3RydWN0IGFtZGdwdV9yZXRyeWZhdWx0X2hhc2h0YWJsZSAKPj4+PiAqaW5pdF9mYXVs dF9oYXNoKHZvaWQpCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICt7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgICvCoCBzdHJ1Y3QgYW1kZ3B1X3JldHJ5ZmF1bHRfaGFzaHRhYmxlICpmYXVs dF9oYXNoOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgICvCoCBmYXVsdF9oYXNoID0ga21hbGxvYyhzaXplb2YoKmZhdWx0X2hhc2gpLCBHRlBf S0VSTkVMKTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIGlmICghZmF1bHRfaGFzaCkK Pj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmF1 bHRfaGFzaDsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Cj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArwqAgSU5JVF9DSEFTSF9UQUJMRShmYXVsdF9oYXNoLT5oYXNoLAo+Pj4+Cj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBTURH UFVfUEFHRUZBVUxUX0hBU0hfQklUUywgOCwgMCk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKg ICvCoCBzcGluX2xvY2tfaW5pdCgmZmF1bHRfaGFzaC0+bG9jayk7Cj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgICvCoCBmYXVsdF9oYXNoLT5jb3VudCA9IDA7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgICsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIHJldHVybiBmYXVsdF9oYXNo Owo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArfQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCArCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLyoqCj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgIMKgICogYW1kZ3B1X3ZtX2luaXQgLSBpbml0aWFsaXplIGEgdm0gaW5zdGFuY2UKPj4+ Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgwqAgKgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBA QCAtMjc4MCw2ICsyNzk2LDEyIEBAIGludCBhbWRncHVfdm1faW5pdChzdHJ1Y3QgCj4+Pj4gYW1k Z3B1X2RldmljZSAqYWRldiwgc3RydWN0IGFtZGdwdV92bSAqdm0sCj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHZtLT5wYXNpZCA9IHBhc2lkOwo+Pj4+Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIH0KPj4+Pgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCArwqAgdm0tPmZhdWx0X2hhc2ggPSBpbml0X2ZhdWx0X2hhc2goKTsKPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgK8KgIGlmICghdm0tPmZhdWx0X2hhc2gpIHsKPj4+Pgo+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCByID0gLUVOT01FTTsKPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycm9yX2ZyZWVfcm9vdDsKPj4+ Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIH0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg Kwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIElOSVRfS0ZJRk8odm0tPmZhdWx0cyk7 Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgdm0tPmZhdWx0X2NyZWRpdCA9IDE2Owo+ Pj4+Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIEBAIC0yOTczLDcgKzI5OTUsNyBAQCB2b2lk IGFtZGdwdV92bV9maW5pKHN0cnVjdCAKPj4+PiBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3Qg YW1kZ3B1X3ZtICp2bSkKPj4+Pgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCDCoMKgIC8qIENs ZWFyIHBlbmRpbmcgcGFnZSBmYXVsdHMgZnJvbSBJSCB3aGVuIHRoZSBWTSBpcyAKPj4+PiBkZXN0 cm95ZWQgKi8KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCB3aGlsZSAoa2ZpZm9fZ2V0 KCZ2bS0+ZmF1bHRzLCAmZmF1bHQpKQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqDCoMKg wqDCoMKgwqDCoMKgIGFtZGdwdV9paF9jbGVhcl9mYXVsdChhZGV2LCBmYXVsdCk7Cj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X3ZtX2NsZWFyX2Zh dWx0KHZtLT5mYXVsdF9oYXNoLCBmYXVsdCk7Cj4+Pj4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgwqDCoCBpZiAodm0tPnBhc2lkKSB7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqDC oMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgIEBAIC0yOTgzLDYgKzMwMDUsOSBAQCB2b2lkIGFtZGdwdV92bV9maW5pKHN0cnVjdCAK Pj4+PiBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSkKPj4+Pgo+Pj4+ IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZXYtPnZtX21hbmFnZXIucGFzaWRfbG9jaywgZmxh Z3MpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIH0KPj4+Pgo+Pj4+Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCArwqAga2ZyZWUodm0tPmZhdWx0X2hhc2gpOwo+Pj4+Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCArwqAgdm0tPmZhdWx0X2hhc2ggPSBOVUxMOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgZHJtX3NjaGVkX2VudGl0 eV9kZXN0cm95KCZ2bS0+ZW50aXR5KTsKPj4+Pgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCDC oMKgIGlmICghUkJfRU1QVFlfUk9PVCgmdm0tPnZhLnJiX3Jvb3QpKSB7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgIEBAIC0zMTgzLDMgKzMyMDgsNzggQEAgdm9pZCBhbWRncHVfdm1fc2V0X3Rh c2tfaW5mbyhzdHJ1Y3QgCj4+Pj4gYW1kZ3B1X3ZtICp2bSkKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IMKgIH0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgICsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKy8qKgo+Pj4+Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCArICogYW1kZ3B1X3ZtX2FkZF9mYXVsdCAtIEFkZCBhIHBhZ2UgZmF1bHQgcmVj b3JkIHRvIGZhdWx0IAo+Pj4+IGhhc2ggdGFibGUKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg KyAqCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKiBAZmF1bHRfaGFzaDogZmF1bHQgaGFz aCB0YWJsZQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogQGtleTogNjQtYml0IGVuY29k aW5nIG9mIFBBU0lEIGFuZCBhZGRyZXNzCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKgo+ Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4g YSByZXRyeSBwYWdlIGZhdWx0IAo+Pj4+IGludGVycnVwdCBpcwo+Pj4+Cj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArICogcmVjZWl2ZWQuIElmIHRoaXMgaXMgYSBuZXcgcGFnZSBmYXVsdCwgaXQgd2ls bCBiZSAKPj4+PiBhZGRlZCB0byBhIGhhc2gKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyAq IHRhYmxlLiBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSAKPj4+ PiBuZXcgZmF1bHQsIG9yCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKiBhIGZhdWx0IHRo YXQgd2FzIGFscmVhZHkga25vd24gYW5kIGlzIGFscmVhZHkgYmVpbmcgCj4+Pj4gaGFuZGxlZC4K Pj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyAqCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKg ICsgKiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGVuZGluZyBwYWdlIGZhdWx0cywgdGhpcyB3aWxs IAo+Pj4+IGZhaWwuIFJldHJ5Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKiBpbnRlcnJ1 cHRzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoaXMgY2FzZSB1bnRpbCB0aGVyZSAKPj4+PiBpcyBl bm91Z2gKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyAqIGZyZWUgc3BhY2UuCj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgICsgKgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogUmV0 dXJucyAwIGlmIHRoZSBmYXVsdCB3YXMgYWRkZWQsIDEgaWYgdGhlIGZhdWx0IHdhcyAKPj4+PiBh bHJlYWR5IGtub3duLAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogLUVOT1NQQyBpZiB0 aGVyZSBhcmUgdG9vIG1hbnkgcGVuZGluZyBmYXVsdHMuCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDC oMKgICsgKi8KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK2ludCBhbWRncHVfdm1fYWRkX2Zh dWx0KHN0cnVjdCAKPj4+PiBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFibGUgKmZhdWx0X2hhc2gs IHU2NCBrZXkpCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICt7Cj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgICvCoCB1bnNpZ25lZCBsb25nIGZsYWdzOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCArwqAgaW50IHIgPSAtRU5PU1BDOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBpZiAoV0FSTl9PTl9PTkNFKCFmYXVsdF9oYXNo KSkKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCAvKiBTaG91 bGQgYmUgYWxsb2NhdGVkIGluIGFtZGdwdV92bV9pbml0Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDC oMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAr wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAr Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBzcGluX2xvY2tfaXJxc2F2ZSgmZmF1bHRf aGFzaC0+bG9jaywgZmxhZ3MpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgICvCoCAvKiBPbmx5IGxldCB0aGUgaGFzaCB0YWJsZSBmaWxsIHVw IHRvIDUwJSBmb3IgYmVzdCAKPj4+PiBwZXJmb3JtYW5jZSAqLwo+Pj4+Cj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArwqAgaWYgKGZhdWx0X2hhc2gtPmNvdW50ID49ICgxIDw8IAo+Pj4+IChBTURHUFVf UEFHRUZBVUxUX0hBU0hfQklUUy0xKSkpCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoMKg wqDCoMKgwqDCoMKgwqAgZ290byB1bmxvY2tfb3V0Owo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCArCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCByID0gY2hhc2hfdGFibGVfY29weV9p bigmZmF1bHRfaGFzaC0+aGFzaCwga2V5LCBOVUxMKTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgK8KgIGlmICghcikKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKg wqDCoCBmYXVsdF9oYXNoLT5jb3VudCsrOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCAvKiBjaGFzaF90YWJsZV9jb3B5X2luIHNob3Vs ZCBuZXZlciBmYWlsIHVubGVzcyB3ZSdyZSAKPj4+PiBsb3NpbmcgY291bnQgKi8KPj4+Pgo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqAgK8KgIFdBUk5fT05fT05DRShyIDwgMCk7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgICsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK3VubG9ja19vdXQ6Cj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYXVs dF9oYXNoLT5sb2NrLCBmbGFncyk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCByZXR1 cm4gcjsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK30KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgKwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArLyoqCj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgICsgKiBhbWRncHVfdm1fY2xlYXJfZmF1bHQgLSBSZW1vdmUgYSBwYWdlIGZhdWx0 IHJlY29yZAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICoKPj4+Pgo+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgKyAqIEBmYXVsdF9oYXNoOiBmYXVsdCBoYXNoIHRhYmxlCj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgICsgKiBAa2V5OiA2NC1iaXQgZW5jb2Rpbmcgb2YgUEFTSUQgYW5kIGFkZHJl c3MKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyAqCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDC oMKgICsgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHBhZ2UgZmF1bHQgaGFzIGJlZW4g Cj4+Pj4gaGFuZGxlZC4gQW55Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKiBmdXR1cmUg aW50ZXJydXB0IHdpdGggdGhpcyBrZXkgd2lsbCBiZSBwcm9jZXNzZWQgYXMgYSBuZXcKPj4+Pgo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyAqIHBhZ2UgZmF1bHQuCj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgICsgKi8KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK3ZvaWQgYW1kZ3B1X3ZtX2Ns ZWFyX2ZhdWx0KHN0cnVjdCAKPj4+PiBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFibGUgKmZhdWx0 X2hhc2gsIHU2NCBrZXkpCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICt7Cj4+Pj4KPj4+PiDC oMKgwqDCoMKgwqDCoMKgICvCoCB1bnNpZ25lZCBsb25nIGZsYWdzOwo+Pj4+Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCArwqAgaW50IHI7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pgo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIGlmICghZmF1bHRfaGFzaCkKPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgICsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIHNwaW5fbG9ja19pcnFz YXZlKCZmYXVsdF9oYXNoLT5sb2NrLCBmbGFncyk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKg ICsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIHIgPSBjaGFzaF90YWJsZV9yZW1vdmUo JmZhdWx0X2hhc2gtPmhhc2gsIGtleSwgTlVMTCk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKg ICvCoCBpZiAoIVdBUk5fT05fT05DRShyIDwgMCkpIHsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgK8KgwqDCoMKgwqDCoMKgwqDCoCBmYXVsdF9oYXNoLT5jb3VudC0tOwo+Pj4+Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgIFdBUk5fT05fT05DRShmYXVsdF9oYXNo LT5jb3VudCA8IDApOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAgfQo+Pj4+Cj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCArCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZmYXVsdF9oYXNoLT5sb2NrLCBmbGFncyk7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgICt9Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaCAKPj4+PiBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIGlu ZGV4IGUyNzVlZTcuLjZlYjFkYTEgMTAwNjQ0Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oCj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5o Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIEBAIC0xNzgsNiArMTc4LDEzIEBAIHN0cnVjdCBh bWRncHVfdGFza19pbmZvIHsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCBwaWRfdMKg wqAgdGdpZDsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Owo+Pj4+Cj4+Pj4KPj4+PiDC oMKgwqDCoMKgwqDCoMKgICsjZGVmaW5lIEFNREdQVV9QQUdFRkFVTFRfSEFTSF9CSVRTIDgKPj4+ Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK3N0cnVjdCBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFi bGUgewo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAgREVDTEFSRV9DSEFTSF9UQUJMRSho YXNoLCBBTURHUFVfUEFHRUZBVUxUX0hBU0hfQklUUywgCj4+Pj4gOCwgMCk7Cj4+Pj4KPj4+PiDC oMKgwqDCoMKgwqDCoMKgICvCoCBzcGlubG9ja190wqDCoMKgwqAgbG9jazsKPj4+Pgo+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgK8KgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY291bnQ7Cj4+Pj4K Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICt9Owo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV92bSB7Cj4+Pj4KPj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgwqAgLyogdHJlZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcyBtYXBwZWQg Ki8KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWTC oCB2YTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTI0MCw2ICsyNDcsNyBAQCBzdHJ1 Y3QgYW1kZ3B1X3ZtIHsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCBzdHJ1Y3QgdHRt X2xydV9idWxrX21vdmUgbHJ1X2J1bGtfbW92ZTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oCDCoCAvKiBtYXJrIHdoZXRoZXIgY2FuIGRvIHRoZSBidWxrIG1vdmUgKi8KPj4+Pgo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJ1bGtfbW92ZWFibGU7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBzdHJ1Y3Qg YW1kZ3B1X3JldHJ5ZmF1bHRfaGFzaHRhYmxlICpmYXVsdF9oYXNoOwo+Pj4+Cj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIH07Cj4+Pj4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgwqBzdHJ1Y3Qg YW1kZ3B1X3ZtX21hbmFnZXIgewo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBAQCAtMzU1LDQg KzM2Myw4IEBAIHZvaWQgYW1kZ3B1X3ZtX3NldF90YXNrX2luZm8oc3RydWN0IAo+Pj4+IGFtZGdw dV92bSAqdm0pOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHZvaWQgYW1kZ3B1X3ZtX21v dmVfdG9fbHJ1X3RhaWwoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBhbWRncHVfdm0gKnZtKTsKPj4+Pgo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCAraW50IGFtZGdwdV92bV9hZGRfZmF1bHQoc3RydWN0IAo+Pj4+IGFtZGdwdV9yZXRyeWZh dWx0X2hhc2h0YWJsZSAqZmF1bHRfaGFzaCwgdTY0IGtleSk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKg wqDCoMKgICsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK3ZvaWQgYW1kZ3B1X3ZtX2NsZWFy X2ZhdWx0KHN0cnVjdCAKPj4+PiBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFibGUgKmZhdWx0X2hh c2gsIHU2NCBrZXkpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgI2VuZGlmCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92ZWdhMTBfaWguYyAKPj4+PiBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZlZ2ExMF9paC5jCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDC oMKgIGluZGV4IDVhZTVlZDIuLmFjYmU1YTcgMTAwNjQ0Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDC oMKgIC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZlZ2ExMF9paC5jCj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZlZ2Ex MF9paC5jCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIEBAIC0yNjUsMzUgKzI2NSwzNiBAQCBz dGF0aWMgYm9vbCAKPj4+PiB2ZWdhMTBfaWhfcHJlc2NyZWVuX2l2KHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gdHJ1ZTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCB9Cj4+Pj4KPj4+ Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIGFkZHIgPSAoKHU2NCkoZHc1ICYgMHhmKSA8PCA0 NCkgfCAoKHU2NClkdzQgPDwgMTIpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAga2V5 ID0gQU1ER1BVX1ZNX0ZBVUxUKHBhc2lkLCBhZGRyKTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgLcKgIHIgPSBhbWRncHVfaWhfYWRkX2ZhdWx0KGFkZXYsIGtleSk7Cj4+Pj4KPj4+PiDCoMKg wqDCoMKgwqDCoMKgIC0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIC8qIEhhc2ggdGFi bGUgaXMgZnVsbCBvciB0aGUgZmF1bHQgaXMgYWxyZWFkeSBiZWluZyAKPj4+PiBwcm9jZXNzZWQs Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoMKgICogaWdub3JlIGZ1cnRoZXIgcGFnZSBm YXVsdHMKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqAgKi8KPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgLcKgIGlmIChyICE9IDApCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3C oMKgwqDCoMKgwqDCoMKgwqAgZ290byBpZ25vcmVfaXY7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDC oMKgIC0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCAvKiBUcmFjayByZXRyeSBmYXVs dHMgaW4gcGVyLVZNIGZhdWx0IEZJRk8uICovCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg wqAgc3Bpbl9sb2NrKCZhZGV2LT52bV9tYW5hZ2VyLnBhc2lkX2xvY2spOwo+Pj4+Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIMKgIHZtID0gaWRyX2ZpbmQoJmFkZXYtPnZtX21hbmFnZXIucGFzaWRf aWRyLCBwYXNpZCk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBhZGRyID0gKCh1NjQp KGR3NSAmIDB4ZikgPDwgNDQpIHwgKCh1NjQpZHc0IDw8IDEyKTsKPj4+Pgo+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgK8KgIGtleSA9IEFNREdQVV9WTV9GQVVMVChwYXNpZCwgYWRkcik7Cj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgaWYgKCF2bSkgewo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBWTSBub3QgZm91bmQsIHByb2Nlc3MgaXQgbm9y bWFsbHkgKi8KPj4+Pgo+Pj4+IHNwaW5fdW5sb2NrKCZhZGV2LT52bV9tYW5hZ2VyLnBhc2lkX2xv Y2spOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdw dV9paF9jbGVhcl9mYXVsdChhZGV2LCBrZXkpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgK8KgIH0gZWxzZSB7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoMKgwqDCoMKgwqDC oMKgwqAgciA9IGFtZGdwdV92bV9hZGRfZmF1bHQodm0tPmZhdWx0X2hhc2gsIGtleSk7Cj4+Pj4K Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDC oMKgwqDCoMKgwqDCoCAvKiBIYXNoIHRhYmxlIGlzIGZ1bGwgb3IgdGhlIGZhdWx0IGlzIGFscmVh ZHkgCj4+Pj4gYmVpbmcgcHJvY2Vzc2VkLAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBpZ25vcmUgZnVydGhlciBwYWdlIGZhdWx0cwo+Pj4+Cj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCBpZiAociAhPSAwKSB7Cj4+Pj4KPj4+PiDC oMKgwqDCoMKgwqDCoMKgICsgc3Bpbl91bmxvY2soJmFkZXYtPnZtX21hbmFnZXIucGFzaWRfbG9j ayk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gaWdub3JlX2l2Owo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCB9Cj4+Pj4K Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgLyogTm8gbG9ja2luZyByZXF1aXJlZCB3aXRoIHNp bmdsZSB3cml0ZXIgYW5kIHNpbmdsZSAKPj4+PiByZWFkZXIgKi8KPj4+Pgo+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoCDCoCByID0ga2ZpZm9fcHV0KCZ2bS0+ZmF1bHRzLCBrZXkpOwo+Pj4+Cj4+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgIMKgIGlmICghcikgewo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBGSUZPIGlzIGZ1bGwuIElnbm9yZSBpdCB1bnRpbCB0 aGVyZSBpcyBzcGFjZSAqLwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKg wqDCoMKgIGFtZGdwdV92bV9jbGVhcl9mYXVsdCh2bS0+ZmF1bHRfaGFzaCwga2V5KTsKPj4+Pgo+ Pj4+IHNwaW5fdW5sb2NrKCZhZGV2LT52bV9tYW5hZ2VyLnBhc2lkX2xvY2spOwo+Pj4+Cj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCAtwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9paF9jbGVhcl9mYXVs dChhZGV2LCBrZXkpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKg wqDCoCBnb3RvIGlnbm9yZV9pdjsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCB9Cj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gc3Bpbl91bmxvY2soJmFkZXYtPnZtX21hbmFnZXIu cGFzaWRfbG9jayk7Cj4+Pj4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyBzcGluX3VubG9j aygmYWRldi0+dm1fbWFuYWdlci5wYXNpZF9sb2NrKTsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoCDCoCAvKiBJdCdzIHRoZSBmaXJzdCBmYXVsdCBmb3IgdGhpcyBhZGRyZXNzLCBwcm9jZXNz IGl0IAo+Pj4+IG5vcm1hbGx5ICovCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgcmV0 dXJuIHRydWU7Cj4+Pj4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTM4NiwxNCArMzg3 LDYgQEAgc3RhdGljIGludCB2ZWdhMTBfaWhfc3dfaW5pdCh2b2lkIAo+Pj4+ICpoYW5kbGUpCj4+ Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgYWRldi0+aXJxLmloLnVzZV9kb29yYmVsbCA9 IHRydWU7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgYWRldi0+aXJxLmloLmRvb3Ji ZWxsX2luZGV4ID0gQU1ER1BVX0RPT1JCRUxMNjRfSUggPDwgMTsKPj4+Pgo+Pj4+Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCAtwqAgYWRldi0+aXJxLmloLmZhdWx0cyA9IAo+Pj4+IGttYWxsb2Moc2l6 ZW9mKCphZGV2LT5pcnEuaWguZmF1bHRzKSwgR0ZQX0tFUk5FTCk7Cj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgIC3CoCBpZiAoIWFkZXYtPmlycS5paC5mYXVsdHMpCj4+Pj4KPj4+PiDCoMKgwqDC oMKgwqDCoMKgIC3CoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4KPj4+PiDC oMKgwqDCoMKgwqDCoMKgIC0gSU5JVF9DSEFTSF9UQUJMRShhZGV2LT5pcnEuaWguZmF1bHRzLT5o YXNoLAo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEFNREdQVV9QQUdFRkFVTFRfSEFTSF9CSVRTLCA4LCAwKTsKPj4+Pgo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqAgLSBzcGluX2xvY2tfaW5pdCgmYWRldi0+aXJxLmloLmZhdWx0cy0+ bG9jayk7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCBhZGV2LT5pcnEuaWguZmF1bHRz LT5jb3VudCA9IDA7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0KPj4+Pgo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCDCoCByID0gYW1kZ3B1X2lycV9pbml0KGFkZXYpOwo+Pj4+Cj4+Pj4KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgIMKgwqAgcmV0dXJuIHI7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDC oMKgIEBAIC00MDYsOSArMzk5LDYgQEAgc3RhdGljIGludCB2ZWdhMTBfaWhfc3dfZmluaSh2b2lk IAo+Pj4+ICpoYW5kbGUpCj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgYW1kZ3B1X2ly cV9maW5pKGFkZXYpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIGFtZGdwdV9paF9y aW5nX2ZpbmkoYWRldik7Cj4+Pj4KPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIGtmcmVl KGFkZXYtPmlycS5paC5mYXVsdHMpOwo+Pj4+Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgYWRl di0+aXJxLmloLmZhdWx0cyA9IE5VTEw7Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0KPj4+ Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCByZXR1cm4gMDsKPj4+Pgo+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4+Pj4KPj4+Pgo+Pj4+Cj4+Pj4KPj4+Pgo+Pj4+Cj4+Pj4gwqDCoMKgwqAg X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+Pgo+Pj4+ IMKgwqDCoMKgIGFtZC1nZnggbWFpbGluZyBsaXN0Cj4+Pj4KPj4+PiDCoMKgwqDCoCBhbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZyAKPj4+PiA8bWFpbHRvOmFtZC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnPgo+Pj4+Cj4+Pj4gwqDCoMKgwqAgaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cj4+Pj4KPj4+Pgo+Pj4KPj4+Cj4+PiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+Pj4gYW1kLWdmeCBtYWls aW5nIGxpc3QKPj4+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+PiBodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKPgo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gYW1kLWdmeCBtYWlsaW5n IGxpc3QKPiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==