From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 5/5] drm/amdgpu: Refactor GPU reset for XGMI hive case. Date: Thu, 22 Nov 2018 20:03:24 +0100 Message-ID: <0f048ac9-1247-8d87-d8c8-5a249e24cdcb@gmail.com> References: <1542823821-15631-1-git-send-email-andrey.grodzovsky@amd.com> <1542823821-15631-6-git-send-email-andrey.grodzovsky@amd.com> <5f257299-4833-82b7-83ec-75bf02c4e441@amd.com> <8e9f51a4-7f0a-c435-c507-34eea96e0b08@gmail.com> <9e016b33-6c94-b1cb-cdcd-b68b91436e90@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: <9e016b33-6c94-b1cb-cdcd-b68b91436e90-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: "Grodzovsky, Andrey" , "Koenig, Christian" , "Liu, Shaoyun" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Deucher, Alexander" , "Liu, Monk" QW0gMjIuMTEuMTggdW0gMTY6NDQgc2NocmllYiBHcm9kem92c2t5LCBBbmRyZXk6Cj4KPiBPbiAx MS8yMi8yMDE4IDA2OjE2IEFNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+PiBIb3cgYWJvdXQg dXNpbmcgYSBsb2NrIHBlciBoaXZlIGFuZCB0aGVuIGFjcXVpcmluZyB0aGF0IHdpdGggdHJ5bG9j aygpCj4+IGluc3RlYWQ/Cj4+Cj4+IFRoaXMgd2F5IHlvdSBzaG91bGQgYXQgbGVhc3QgY2F0Y2gg Y2FzZXMgd2hlcmUgbXVsdGlwbGUgY2F1c2VzIHRyeSB0bwo+PiByZXNldCB0aGUgc2FtZSBoaXZl IGF0IHRoZSBzYW1lIHRpbWUuIFRydWUgdGhhdCB0aGVyZSBpcyBzdGlsbCBzb21lCj4+IHJhY2lu ZyBpbnZvbHZlZCwgYnV0IGl0J3MgYXQgbGVhc3QgYSBnb29kIHN0YXJ0Lgo+IFdoYXQgYWJvdXQg dXNpbmcgcGVyIGhpdmUgd29ya19zdHJ1Y3Qgd2hpY2ggd2hlbiBzY2hlZHVsZWQgd2lsbCBleGVj dXRlCj4gYW1kZ3B1X2RldmljZV9ncHVfcmVjb3ZlciA/IFNpbmNlIHdvcmsgcXVldWUgcmVqZWN0 cyBkdXBsaWNhdGVzIHdlIHdpbGwKPiBnZXQgcGVyIGhpdmUgc2VyaWFsaXphdGlvbiBhdXRvbWF0 aWNhbGx5IGZyb20gdGhhdCB3aXRob3V0IG5lZWQgb2YgdXNpbmcKPiBhbnkgbmV3IG11dGV4LiBB bHNvIHRoaXMgbWlnaHQgYmUgbmVjZXNzYXJ5IGFueXdheSBmb3IgUkFTIGFzIEkgYmVsaWV2ZQo+ IFJBUyB3aWxsIHRyaWdnZXIgaW50ZXJydXB0IHdoZW4gZXJyb3JzIGFyZSBkZXRlY3RlZCBhbmQg bWlnaHQgdGhlbgo+IGRlY2lkZSB0byByZXNldCB0aGUgR1BVIHNvIHdlIHdpbGwgaGF2ZSB0byBz d2l0Y2ggdG8gYnV0dG9uIGhhbGYgY29udGV4dAo+IGFueXdheS4gQW5kIEkgZG9uJ3QgdGhpbmsg aXQncyBhIHByb2JsZW0gdG8gc2NoZWR1bGUgdGhpcyB3b3JrIGZyb20gam9iCj4gdGltZW91dCBo YW5kbGVyIGlmIG5lZWRlZC4KCk1obSwgd2hhdCBpcyB0aGUgYWR2YW50YWdlIHRvIHRoZSB0cnls b2NrIHZhcmlhbnQ/IFRoZSBrZXkgcHJvYmxlbSB3aXRoIAp0aGF0IGlzIGhvdyB0byBnZXQgdGhl IG9mZmVuZGluZyBqb2IgaW50byB0aGUgYmFja2dyb3VuZCB3b3JrZXIuCgpFLmcuIHdlIGhhdmUg dHJvdWJsZSBndWFyYW50ZWVpbmcgdGhhdCB0aGUgam9iIGlzbid0IGRlc3Ryb3llZCB3aGVuIHRo aXMgCmlzIGluIGEgYmFja2dyb3VuZCB3b3JrZXIuCgo+Pgo+Pgo+PiBBZGRpdGlvbmFsIHRvIHRo YXQgSSB3b3VsZCB0cnkgaW1wcm92ZSB0aGUgcHJlLCBtaWRkbGUsIHBvc3QgaGFuZGxpbmcKPj4g dG93YXJkcyBjaGVja2luZyBpZiB3ZSBtYWRlIHNvbWUgcHJvZ3Jlc3MgaW4gYmV0d2Vlbi4KPj4K Pj4gSW4gb3RoZXIgd29yZHMgd2Ugc3RvcCBhbGwgc2NoZWR1bGVycyBpbiB0aGUgcHJlIGhhbmRs aW5nIGFuZAo+PiBkaXNjb25uZWN0IHRoZSBzY2hlZHVsZXIgZmVuY2VzIGZyb20gdGhlIGhhcmR3 YXJlIGZlbmNlIGxpa2UgSSBkaWQgaW4KPj4gcGF0Y2ggImRybS9zY2hlZDogZml4IHRpbWVvdXQg aGFuZGxpbmcgdjIiLgo+Pgo+PiBUaGVuIGJlZm9yZSB3ZSBkbyB0aGUgYWN0dWFsIHJlc2V0IGlu IHRoZSBtaWRkbGUgaGFuZGxpbmcgd2UgY2hlY2sgaWYKPj4gdGhlIG9mZmVuZGluZyBqb2IgaGFz IGNvbXBsZXRlZCBvciBhdCBsZWFzdCBtYWRlIHNvbWUgcHJvZ3Jlc3MgaW4gdGhlCj4+IG1lYW50 aW1lLgo+IEkgdW5kZXJzdGFuZCBob3cgdG8gY2hlY2sgaWYgdGhlIGpvYiBjb21wbGV0ZWQgLSBp ZiBpdCdzIGZlbmNlIGFscmVhZHkKPiBzaWduYWxlZCwgYnV0IGhvdyBkbyBJIHRlc3QgaWYgdGhl IGpvYiBtYWRlICdhdCBsZWFzdCBzb21lIHByb2dyZXNzJyA/CgpHb29kIHF1ZXN0aW9uLiBNYXli ZSB3ZSBjYW4gc29tZWhvdyBxdWVyeSBmcm9tIHRoZSBoYXJkd2FyZSB0aGUgbnVtYmVyIApvZiBw cmltaXRpdmVzIG9yIHBpeGVscyBwcm9jZXNzZWQgc28gZmFyIGFuZCB0aGVuIGNvbXBhcmUgYWZ0 ZXIgYSBtb21lbnQ/Cgo+IEFub3RoZXIgcXVlc3Rpb24gLSB3aGF0J3MgdGhlIHB1cnBvc2Ugb2Yg dGhpcyBwcm9ncmVzcyBjaGVjayAtIGlmIEkndmUKPiBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgcHJl IGhhbmRsaW5nIHNlcXVlbmNlwqAgSSBjYW4ndCBiYWlsIG91dCBldmVuIGlmCj4gdGhlIGd1aWx0 eSBqb2IgaXMgaXMgc2lnbmFsZWQgYnkgdGhlIHRpbWUgSSBkbyB0aGUgcHJvZ3Jlc3MgY2hlY2ss IEkKPiBoYXZlIHRvIGNvbXBsZXRlIGF0IGxlYXN0IHRoZSBwb3N0IGhhbmRsaW5nIHRvLiBEbyB5 b3UgbWVhbiBJIGNhbiBhdAo+IGxlYXN0IHNraXAgdGhlIEFTSUMgcmVzZXQgcGhhc2UgaW4gdGhh dCBjYXNlID8KClllcyBleGFjdGx5LiBXZSBoYXZlIGEgcmF0aGVyIGJpZyByYWNlIHByb2JsZW0g aW4gdGhlIGN1cnJlbnQgcmVzZXQgCmxvZ2ljIGJldHdlZW4gY29tcGxldGluZyB0aGUgam9iIGFu ZCByZXNldHRpbmcgdGhlIGhhcmR3YXJlLgoKSW4gb3RoZXIgd29yZHMgd2hlbiB0aGUgam9iIGNv bXBsZXRlcyBleGFjdGx5IGluIHRoZSBtb21lbnQgd2UgcmVzZXQgdGhlIApHUFUgd2UgdHJ5IHRv IHNpZ25hbCBpdCB0d2ljZSBldGMgZXRjLi4uIFRoZSB3aG9sZSBoYW5kbGluZyBoZXJlIGlzIG5v dCAKcmVhbGx5IHRob3VnaHQgdGhyb3VnaC4KCkNocmlzdGlhbi4KCj4KPiBBbmRyZXkKPgo+PiBJ biB0aGUgY2FzZSBvZiBhIG1hbnVhbCByZXNldCB3ZSBza2lwIHRoYXQgYmVjYXVzZSB3ZSBkb24n dCBoYXZlIGFuCj4+IG9mZmVuZGluZyBqb2IgdG8gY2hlY2suCj4+Cj4+IEluIHRoZSBwb3N0IGhh bmRsaW5nIHdlIHN0aXRjaCBldmVyeXRoaW5nIHRvZ2V0aGVyIGFnYWluIGFuZCBzdGFydCB0aGUK Pj4gc2NoZWR1bGVyIHRvIGdvIG9uIHdpdGggam9iIHN1Ym1pc3Npb24uCj4+Cj4+IENocmlzdGlh bi4KPj4KPj4gQW0gMjEuMTEuMTggdW0gMjM6MDIgc2NocmllYiBHcm9kem92c2t5LCBBbmRyZXk6 Cj4+PiBEZXBlbmRzIHdoYXQgd2FzIHRoZSByZWFzb24gZm9yIHRyaWdnZXJpbmcgdGhlIHJlc2V0 IGZvciB0aGF0IG5vZGUgaG93Cj4+PiBkbyB3ZSBrbm93ID8KPj4+IElmIHRoZSByZWFzb24gd2Fz IFJBUyBlcnJvciB0aGF0IHByb2JhYmx5IG5vdCBoYXJkIHRvIGNoZWNrIGFsbCBlcnJvcnMKPj4+ IGFyZSBjbGVhcmVkLCBidXQKPj4+IGlmIHRoZSByZWFzb24gd2FzIGpvYiB0aW1lb3V0IG9uIHRo YXQgc3BlY2lmaWMgbm9kZSBJIHdpbGwgbmVlZCB0bwo+Pj4gcmVjaGVjayB0aGF0IG5vIGpvYnMg YXJlIGxlZnQgaW4gaW5jb21wbGV0ZSBzdGF0ZQo+Pj4gc3RhdGUuIEFuZCBpZiB0aGUgcmVhc29u IGlzIG1hbnVhbCBncHUgcmVzZXQgdHJpZ2dlciBmcm9tIHN5c2ZzLCB0aGVuCj4+PiB3aGF0J3Mg dGhlIHBvbGljeSA/Cj4+PiBTb3VuZHMgdG8gbWUgaXQncyBqdXN0IGVhc2llciB0byBnbyBhaGVh ZCBhbmQgYWxsb3cgYWxsIHRoZSBwZW5kaW5nCj4+PiByZXNldHMgdG8gcHJvY2VlZCB1bmxlc3Mg dGhlcmUgaXMKPj4+IGEgY2xlYXIgYW5kIHF1aWNrIGNyaXRlcmlhIHlvdSBjYW4gY2hlY2sgYWZ0 ZXIgeW91IGdyYWIgdGhlIG11dGV4IHRoZW4KPj4+IHN1cmUgLSBidXQgSSBkb24ndCBrbm93IHdo YXQgaXQgd291bGQgYmUuCj4+Pgo+Pj4gQW5kcmV5Cj4+Pgo+Pj4gT24gMTEvMjEvMjAxOCAwMzo0 OSBQTSwgTGl1LCBTaGFveXVuIHdyb3RlOgo+Pj4+IEkgc2F3IHlvdSB1c2UgdGhlwqAgZ2xvYmFs IHhnbWlfbXV0ZXggdG8gcHJldmVudCBjb25jdXJyZW50IHJlc2V0IHRvIGJlCj4+Pj4gdHJpZ2dl cmVkIGJ5IGRpZmZlcmVudCBub2RlcyAswqAgYnV0IGFmdGVyIHRoZcKgIG11dGV4IGJlZW4gcmVs ZWFzZWQgLAo+Pj4+IGN1cnJlbnQgbm9kZSBtYXkgZ3JhcCB0aGUgbXV0ZXggYW5kIGNvbnRpbnVl IHRvIGRvIGFub3RoZXIgcmVzZXQgLgo+Pj4+IE1heWJlwqAgd2Ugc2hvdWxkIGNoZWNrIHRoZSBH UFUgc3RhdHVzIGFuZMKgIHNraXAgdGhlwqAgcmVzZXQgaW4gdGhpcyBjYXNlCj4+Pj4gc2luY2Ug dGhlwqAgR1BVIG1heSBhbHJlYWR5IGJlIGluIGdvb2Qgc3RhdGUgLgo+Pj4+Cj4+Pj4gUmVnYXJk cwo+Pj4+Cj4+Pj4gc2hhb3l1bi5saXUKPj4+Pgo+Pj4+IE9uIDIwMTgtMTEtMjEgMToxMCBwLm0u LCBBbmRyZXkgR3JvZHpvdnNreSB3cm90ZToKPj4+Pj4gRm9yIFhHTUkgaGl2ZSBjYXNlIGRvIHJl c2V0IGluIHN0ZXBzIHdoZXJlIGVhY2ggc3RlcCBpdGVyYXRlcyBvdmVyCj4+Pj4+IGFsbCBkZXZz IGluIGhpdmUuIFRoaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGFzaWMgcmVzZXQKPj4+Pj4g c2luY2UgYWxsIFBTUCBGVyBpbiBoaXZlIG11c3QgY29tZSB1cCB3aXRoaW4gYSBsaW1pdGVkIHRp bWUKPj4+Pj4gKGFyb3VuZCAxIHNlYykgdG8gcHJvcGVycGx5IG5lZ290aWF0ZSB0aGUgbGluay4K Pj4+Pj4gRG8gdGhpcyBiecKgIHJlZmFjdG9yaW5nwqAgYW1kZ3B1X2RldmljZV9ncHVfcmVjb3Zl ciBhbmQKPj4+Pj4gYW1kZ3B1X2RldmljZV9yZXNldAo+Pj4+PiBpbnRvIHByZV9hc2ljX3Jlc2V0 LCBhc2ljX3Jlc2V0IGFuZCBwb3N0X2FzaWNfcmVzZXQgZnVuY3Rpb25zIHdoZXJlCj4+Pj4+IGlz IHBhcnQKPj4+Pj4gaXMgZXhlY3R1ZWQgZm9yIGFsbCB0aGUgR1BVcyBpbiB0aGUgaGl2ZSBiZWZv cmUgZ29pbmcgdG8gdGhlIG5leHQKPj4+Pj4gc3RlcC4KPj4+Pj4KPj4+Pj4gU2lnbmVkLW9mZi1i eTogQW5kcmV5IEdyb2R6b3Zza3kgPGFuZHJleS5ncm9kem92c2t5QGFtZC5jb20+Cj4+Pj4+IC0t LQo+Pj4+PiAgwqDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5owqDCoMKg wqDCoMKgwqAgfMKgwqAgNSArLQo+Pj4+PiAgwqDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9kZXZpY2UuYyB8IDM3NQo+Pj4+PiArKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tLQo+Pj4+PiAgwqDCoMKgIDIgZmlsZXMgY2hhbmdlZCwgMjY0IGluc2VydGlvbnMoKyksIDEx NiBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdS5oCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1LmgKPj4+Pj4gaW5kZXggNGVmNWY3YS4uYmQwNmQ0NSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKPj4+Pj4gQEAgLTEwMjYsNiArMTAyNiw5IEBAIHN0cnVj dCBhbWRncHVfZGV2aWNlIHsKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgbGFz dF9tbV9pbmRleDsKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW5fZ3B1X3Jlc2V0Owo+Pj4+PiAg wqDCoMKgwqDCoMKgwqAgc3RydWN0IG11dGV4wqAgbG9ja19yZXNldDsKPj4+Pj4gKwo+Pj4+PiAr wqDCoMKgIGludCBhc2ljX3Jlc2V0X3JlczsKPj4+Pj4gK8KgwqDCoCBpbnQgcmVzY2hlZDsKPj4+ Pj4gIMKgwqDCoCB9Owo+Pj4+PiAgwqDCoMKgIMKgwqDCoCBzdGF0aWMgaW5saW5lIHN0cnVjdCBh bWRncHVfZGV2aWNlICphbWRncHVfdHRtX2FkZXYoc3RydWN0Cj4+Pj4+IHR0bV9ib19kZXZpY2Ug KmJkZXYpCj4+Pj4+IEBAIC0xMjMyLDcgKzEyMzUsNyBAQCBzdHJ1Y3QgYW1kZ3B1X2hpdmVfaW5m bzsKPj4+Pj4gIMKgwqDCoCDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCAqYW1kZ3B1X3hnbWlfZ2V0 X2FkZXZfbGlzdF9oYW5kbGUoc3RydWN0Cj4+Pj4+IGFtZGdwdV9oaXZlX2luZm8gKmhpdmUpOwo+ Pj4+PiAgwqDCoMKgIHN0cnVjdCBhbWRncHVfaGl2ZV9pbmZvICphbWRncHVfZ2V0X3hnbWlfaGl2 ZShzdHJ1Y3QKPj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldik7Cj4+Pj4+IC1pbnQgYW1kZ3B1X3hn bWlfdXBkYXRlX3RvcG9sb2d5KHN0cnVjdCBhbWRncHVfaGl2ZV9pbmZvICpoaXZlKTsKPj4+Pj4g K2ludCBhbWRncHVfeGdtaV91cGRhdGVfdG9wb2xvZ3koc3RydWN0IGFtZGdwdV9oaXZlX2luZm8g KmhpdmUsCj4+Pj4+IHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPj4+Pj4gIMKgwqDCoCBp bnQgYW1kZ3B1X3hnbWlfYWRkX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Cj4+ Pj4+ICDCoMKgwqAgwqDCoMKgIC8qCj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZGV2aWNlLmMKPj4+Pj4gaW5kZXggY2IwNmU2OC4uOGU5NGQ3ZiAxMDA2NDQK Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4+ Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwo+Pj4+ PiBAQCAtMzE1Nyw4NiArMzE1Nyw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2RldmljZV9yZWNvdmVy X3ZyYW0oc3RydWN0Cj4+Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+Pj4+ICDCoMKgwqDCoMKg wqDCoCByZXR1cm4gMDsKPj4+Pj4gIMKgwqDCoCB9Cj4+Pj4+ICDCoMKgwqAgLS8qKgo+Pj4+PiAt ICogYW1kZ3B1X2RldmljZV9yZXNldCAtIHJlc2V0IEFTSUMvR1BVIGZvciBiYXJlLW1ldGFsIG9y IHBhc3N0aHJvdWdoCj4+Pj4+IC0gKgo+Pj4+PiAtICogQGFkZXY6IGFtZGdwdSBkZXZpY2UgcG9p bnRlcgo+Pj4+PiAtICoKPj4+Pj4gLSAqIGF0dGVtcHQgdG8gZG8gc29mdC1yZXNldCBvciBmdWxs LXJlc2V0IGFuZCByZWluaXRpYWxpemUgQXNpYwo+Pj4+PiAtICogcmV0dXJuIDAgbWVhbnMgc3Vj Y2VlZGVkIG90aGVyd2lzZSBmYWlsZWQKPj4+Pj4gLSAqLwo+Pj4+PiAtc3RhdGljIGludCBhbWRn cHVfZGV2aWNlX3Jlc2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4+PiAtewo+Pj4+ PiAtwqDCoMKgIGJvb2wgbmVlZF9mdWxsX3Jlc2V0LCB2cmFtX2xvc3QgPSAwOwo+Pj4+PiAtwqDC oMKgIGludCByOwo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgbmVlZF9mdWxsX3Jlc2V0ID0gYW1kZ3B1 X2RldmljZV9pcF9uZWVkX2Z1bGxfcmVzZXQoYWRldik7Cj4+Pj4+IC0KPj4+Pj4gLcKgwqDCoCBp ZiAoIW5lZWRfZnVsbF9yZXNldCkgewo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2Rldmlj ZV9pcF9wcmVfc29mdF9yZXNldChhZGV2KTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRn cHVfZGV2aWNlX2lwX3NvZnRfcmVzZXQoYWRldik7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBhbWRn cHVfZGV2aWNlX2lwX3Bvc3Rfc29mdF9yZXNldChhZGV2KTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKg IGlmIChyIHx8IGFtZGdwdV9kZXZpY2VfaXBfY2hlY2tfc29mdF9yZXNldChhZGV2KSkgewo+Pj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fSU5GTygic29mdCByZXNldCBmYWlsZWQsIHdp bGwgZmFsbGJhY2sgdG8gZnVsbAo+Pj4+PiByZXNldCFcbiIpOwo+Pj4+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBuZWVkX2Z1bGxfcmVzZXQgPSB0cnVlOwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAg fQo+Pj4+PiAtwqDCoMKgIH0KPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIGlmIChuZWVkX2Z1bGxfcmVz ZXQpIHsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfZGV2aWNlX2lwX3N1c3BlbmQo YWRldik7Cj4+Pj4+IC0KPj4+Pj4gLXJldHJ5Ogo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgciA9IGFt ZGdwdV9hc2ljX3Jlc2V0KGFkZXYpOwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgLyogcG9zdCBjYXJk ICovCj4+Pj4+IC0gYW1kZ3B1X2F0b21fYXNpY19pbml0KGFkZXYtPm1vZGVfaW5mby5hdG9tX2Nv bnRleHQpOwo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoIXIpIHsKPj4+Pj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2luZm8oYWRldi0+ZGV2LCAiR1BVIHJlc2V0IHN1Y2Nl ZWRlZCwgdHJ5aW5nIHRvCj4+Pj4+IHJlc3VtZVxuIik7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHIgPSBhbWRncHVfZGV2aWNlX2lwX3Jlc3VtZV9waGFzZTEoYWRldik7Cj4+Pj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyKQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gb3V0Owo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHZyYW1fbG9zdCA9IGFtZGdwdV9kZXZpY2VfY2hlY2tfdnJhbV9sb3N0KGFkZXYpOwo+Pj4+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAodnJhbV9sb3N0KSB7Cj4+Pj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJWUkFNIGlzIGxvc3QhXG4iKTsKPj4+Pj4g LSBhdG9taWNfaW5jKCZhZGV2LT52cmFtX2xvc3RfY291bnRlcik7Cj4+Pj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0g YW1kZ3B1X2d0dF9tZ3JfcmVjb3ZlcigKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmYWRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVFRdKTsKPj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKHIpCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z290byBvdXQ7Cj4+Pj4+IC0KPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdw dV9kZXZpY2VfZndfbG9hZGluZyhhZGV2KTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHIpCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHI7Cj4+ Pj4+IC0KPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfaXBf cmVzdW1lX3BoYXNlMihhZGV2KTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIp Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+Pj4+IC0K Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHZyYW1fbG9zdCkKPj4+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWRncHVfZGV2aWNlX2ZpbGxfcmVzZXRfbWFnaWMo YWRldik7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+IC3CoMKgwqAgfQo+Pj4+PiAtCj4+ Pj4+IC1vdXQ6Cj4+Pj4+IC3CoMKgwqAgaWYgKCFyKSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBh bWRncHVfaXJxX2dwdV9yZXNldF9yZXN1bWVfaGVscGVyKGFkZXYpOwo+Pj4+PiAtwqDCoMKgwqDC oMKgwqAgciA9IGFtZGdwdV9pYl9yaW5nX3Rlc3RzKGFkZXYpOwo+Pj4+PiAtwqDCoMKgwqDCoMKg wqAgaWYgKHIpIHsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihhZGV2LT5k ZXYsICJpYiByaW5nIHRlc3QgZmFpbGVkICglZCkuXG4iLCByKTsKPj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfaXBfc3VzcGVuZChhZGV2KTsKPj4+Pj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbmVlZF9mdWxsX3Jlc2V0ID0gdHJ1ZTsKPj4+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byByZXRyeTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIH0KPj4+ Pj4gLcKgwqDCoCB9Cj4+Pj4+IC0KPj4+Pj4gLcKgwqDCoCBpZiAoIXIpCj4+Pj4+IC3CoMKgwqDC oMKgwqDCoCByID0gYW1kZ3B1X2RldmljZV9yZWNvdmVyX3ZyYW0oYWRldik7Cj4+Pj4+IC0KPj4+ Pj4gLcKgwqDCoCByZXR1cm4gcjsKPj4+Pj4gLX0KPj4+Pj4gIMKgwqDCoCDCoMKgwqAgLyoqCj4+ Pj4+ICDCoMKgwqDCoCAqIGFtZGdwdV9kZXZpY2VfcmVzZXRfc3Jpb3YgLSByZXNldCBBU0lDIGZv ciBTUi1JT1YgdmYKPj4+Pj4gQEAgLTMzMzUsMzEgKzMyNTUsMTYgQEAgYm9vbAo+Pj4+PiBhbWRn cHVfZGV2aWNlX3Nob3VsZF9yZWNvdmVyX2dwdShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4+PiAgwqDCoMKg IH0KPj4+Pj4gIMKgwqDCoCAtLyoqCj4+Pj4+IC0gKiBhbWRncHVfZGV2aWNlX2dwdV9yZWNvdmVy IC0gcmVzZXQgdGhlIGFzaWMgYW5kIHJlY292ZXIgc2NoZWR1bGVyCj4+Pj4+IC0gKgo+Pj4+PiAt ICogQGFkZXY6IGFtZGdwdSBkZXZpY2UgcG9pbnRlcgo+Pj4+PiAtICogQGpvYjogd2hpY2ggam9i IHRyaWdnZXIgaGFuZwo+Pj4+PiAtICoKPj4+Pj4gLSAqIEF0dGVtcHQgdG8gcmVzZXQgdGhlIEdQ VSBpZiBpdCBoYXMgaHVuZyAoYWxsIGFzaWNzKS4KPj4+Pj4gLSAqIFJldHVybnMgMCBmb3Igc3Vj Y2VzcyBvciBhbiBlcnJvciBvbiBmYWlsdXJlLgo+Pj4+PiAtICovCj4+Pj4+IC1pbnQgYW1kZ3B1 X2RldmljZV9ncHVfcmVjb3ZlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+Pj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9qb2IgKmpvYikK Pj4+Pj4gLXsKPj4+Pj4gLcKgwqDCoCBpbnQgaSwgciwgcmVzY2hlZDsKPj4+Pj4gLQo+Pj4+PiAt wqDCoMKgIGRldl9pbmZvKGFkZXYtPmRldiwgIkdQVSByZXNldCBiZWdpbiFcbiIpOwo+Pj4+PiAt Cj4+Pj4+IC3CoMKgwqAgbXV0ZXhfbG9jaygmYWRldi0+bG9ja19yZXNldCk7Cj4+Pj4+IC3CoMKg wqAgYXRvbWljX2luYygmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIpOwo+Pj4+PiAtwqDCoMKgIGFk ZXYtPmluX2dwdV9yZXNldCA9IDE7Cj4+Pj4+ICDCoMKgwqAgLcKgwqDCoCAvKiBCbG9jayBrZmQg Ki8KPj4+Pj4gLcKgwqDCoCBhbWRncHVfYW1ka2ZkX3ByZV9yZXNldChhZGV2KTsKPj4+Pj4gK3N0 YXRpYyBpbnQgYW1kZ3B1X2RldmljZV9wcmVfYXNpY19yZXNldChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBhbWRncHVfam9iICpqb2IsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBib29sICpuZWVkX2Z1bGxfcmVzZXRfYXJnKQo+Pj4+PiArewo+Pj4+PiArwqDC oMKgIGludCBpLCByID0gMDsKPj4+Pj4gK8KgwqDCoCBib29sIG5lZWRfZnVsbF9yZXNldMKgID0g Km5lZWRfZnVsbF9yZXNldF9hcmc7Cj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqAgLyogYmxv Y2sgVFRNICovCj4+Pj4+IC3CoMKgwqAgcmVzY2hlZCA9IHR0bV9ib19sb2NrX2RlbGF5ZWRfd29y a3F1ZXVlKCZhZGV2LT5tbWFuLmJkZXYpOwo+Pj4+PiArwqDCoMKgIGFkZXYtPnJlc2NoZWQgPSB0 dG1fYm9fbG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmYWRldi0+bW1hbi5iZGV2KTsKPj4+Pj4gIMKg wqDCoCDCoMKgwqDCoMKgwqDCoCAvKiBibG9jayBhbGwgc2NoZWR1bGVycyBhbmQgcmVzZXQgZ2l2 ZW4gam9iJ3MgcmluZyAqLwo+Pj4+PiAgwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFN REdQVV9NQVhfUklOR1M7ICsraSkgewo+Pj4+PiBAQCAtMzM3OSwxMCArMzI4NCwxMjEgQEAgaW50 IGFtZGdwdV9kZXZpY2VfZ3B1X3JlY292ZXIoc3RydWN0Cj4+Pj4+IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9mZW5jZV9kcml2ZXJfZm9y Y2VfY29tcGxldGlvbihyaW5nKTsKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gIMKgwqDC oCAtwqDCoMKgIGlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikpCj4+Pj4+IC3CoMKgwqDCoMKgwqDC oCByID0gYW1kZ3B1X2RldmljZV9yZXNldF9zcmlvdihhZGV2LCBqb2IgPyBmYWxzZSA6IHRydWUp Owo+Pj4+PiAtwqDCoMKgIGVsc2UKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfZGV2 aWNlX3Jlc2V0KGFkZXYpOwo+Pj4+PiArwqDCoMKgIGlmICghYW1kZ3B1X3NyaW92X3ZmKGFkZXYp KSB7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghbmVlZF9mdWxsX3Jlc2V0KQo+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZWVkX2Z1bGxfcmVzZXQgPSBhbWRncHVfZGV2 aWNlX2lwX25lZWRfZnVsbF9yZXNldChhZGV2KTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKCFuZWVkX2Z1bGxfcmVzZXQpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YW1kZ3B1X2RldmljZV9pcF9wcmVfc29mdF9yZXNldChhZGV2KTsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfaXBfc29mdF9yZXNldChhZGV2KTsKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2RldmljZV9pcF9wb3N0X3NvZnRfcmVzZXQo YWRldik7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyIHx8IGFtZGdwdV9kZXZp Y2VfaXBfY2hlY2tfc29mdF9yZXNldChhZGV2KSkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIERSTV9JTkZPKCJzb2Z0IHJlc2V0IGZhaWxlZCwgd2lsbCBmYWxsYmFjayB0 byBmdWxsCj4+Pj4+IHJlc2V0IVxuIik7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbmVlZF9mdWxsX3Jlc2V0ID0gdHJ1ZTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAobmVlZF9mdWxsX3Jlc2V0KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0g YW1kZ3B1X2RldmljZV9pcF9zdXNwZW5kKGFkZXYpOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCAqbmVlZF9mdWxsX3Jlc2V0X2FyZyA9IG5lZWRfZnVsbF9yZXNldDsKPj4+Pj4gK8KgwqDC oCB9Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gcjsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+ PiArc3RhdGljIGludCBhbWRncHVfZG9fYXNpY19yZXNldChzdHJ1Y3QgYW1kZ3B1X2hpdmVfaW5m byAqaGl2ZSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgbGlzdF9oZWFkICpkZXZpY2VfbGlzdF9oYW5kbGUsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCAqbmVlZF9mdWxsX3Jlc2V0X2FyZykKPj4+Pj4gK3sK Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqdG1wX2FkZXYgPSBOVUxMOwo+Pj4+ PiArwqDCoMKgIGJvb2wgbmVlZF9mdWxsX3Jlc2V0ID0gKm5lZWRfZnVsbF9yZXNldF9hcmcsIHZy YW1fbG9zdCA9IGZhbHNlOwo+Pj4+PiArwqDCoMKgIGludCByID0gMDsKPj4+Pj4gKwo+Pj4+PiAr wqDCoMKgIC8qCj4+Pj4+ICvCoMKgwqDCoCAqIEFTSUMgcmVzZXQgaGFzIHRvIGJlIGRvbmUgb24g YWxsIEhHTUkgaGl2ZSBub2RlcyBBU0FQCj4+Pj4+ICvCoMKgwqDCoCAqIHRvIGFsbG93IHByb3Bl ciBsaW5rcyBuZWdvdGlhdGlvbiBpbiBGVyAod2l0aGluIDEgc2VjKQo+Pj4+PiArwqDCoMKgwqAg Ki8KPj4+Pj4gK8KgwqDCoCBpZiAobmVlZF9mdWxsX3Jlc2V0KSB7Cj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9hZGV2LCBkZXZpY2VfbGlzdF9oYW5kbGUsCj4+ Pj4+IGdtYy54Z21pLmhlYWQpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGFt ZGdwdV9hc2ljX3Jlc2V0KHRtcF9hZGV2KTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHIpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX1dBUk4oIkFT SUMgcmVzZXQgZmFpbGVkIHdpdGggZXJyIHIsICVkIGZvciBkcm0KPj4+Pj4gZGV2LCAlcyIsCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIsIHRtcF9hZGV2 LT5kZGV2LT51bmlxdWUpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiArwqDCoMKgIH0K Pj4+Pj4gKwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfYWRl diwgZGV2aWNlX2xpc3RfaGFuZGxlLAo+Pj4+PiBnbWMueGdtaS5oZWFkKSB7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAobmVlZF9mdWxsX3Jlc2V0KSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIHBvc3QgY2FyZCAqLwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZgo+ Pj4+PiAoYW1kZ3B1X2F0b21fYXNpY19pbml0KHRtcF9hZGV2LT5tb2RlX2luZm8uYXRvbV9jb250 ZXh0KSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fV0FSTigiYXNp YyBhdG9tIGluaXQgZmFpbGVkISIpOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmICghcikgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9p bmZvKHRtcF9hZGV2LT5kZXYsICJHUFUgcmVzZXQgc3VjY2VlZGVkLAo+Pj4+PiB0cnlpbmcgdG8g cmVzdW1lXG4iKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0gYW1k Z3B1X2RldmljZV9pcF9yZXN1bWVfcGhhc2UxKHRtcF9hZGV2KTsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocikKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdnJhbV9sb3N0ID0gYW1kZ3B1X2RldmljZV9jaGVja192cmFtX2xvc3Qo dG1wX2FkZXYpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh2cmFt X2xvc3QpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERS TV9FUlJPUigiVlJBTSBpcyBsb3N0IVxuIik7Cj4+Pj4+ICsgYXRvbWljX2luYygmdG1wX2FkZXYt PnZyYW1fbG9zdF9jb3VudGVyKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0gYW1k Z3B1X2d0dF9tZ3JfcmVjb3ZlcigKPj4+Pj4gKyAmdG1wX2FkZXYtPm1tYW4uYmRldi5tYW5bVFRN X1BMX1RUXSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIpCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4+ Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfZGV2 aWNlX2Z3X2xvYWRpbmcodG1wX2FkZXYpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChyKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHI7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByID0gYW1kZ3B1X2RldmljZV9pcF9yZXN1bWVfcGhhc2UyKHRtcF9hZGV2KTsKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocikKPj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHZyYW1fbG9zdCkKPj4+Pj4gKyBhbWRncHVfZGV2 aWNlX2ZpbGxfcmVzZXRfbWFnaWModG1wX2FkZXYpOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogVXBkYXRlIFBTUCBGVyB0b3BvbG9neSBhZnRlciByZXNl dCAqLwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0bXBfYWRldi0+ Z21jLnhnbWkubnVtX3BoeXNpY2FsX25vZGVzID4gMSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfeGdtaV91cGRhdGVfdG9wb2xvZ3koaGl2 ZSwgdG1wX2FkZXYpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCB9Cj4+Pj4+ICsKPj4+Pj4gKwo+Pj4+PiArb3V0Ogo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKCFyKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9pcnFf Z3B1X3Jlc2V0X3Jlc3VtZV9oZWxwZXIodG1wX2FkZXYpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByID0gYW1kZ3B1X2liX3JpbmdfdGVzdHModG1wX2FkZXYpOwo+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAocikgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRldl9lcnIodG1wX2FkZXYtPmRldiwgImliIHJpbmcgdGVzdCBmYWlsZWQKPj4+Pj4g KCVkKS5cbiIsIHIpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBh bWRncHVfZGV2aWNlX2lwX3N1c3BlbmQodG1wX2FkZXYpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG5lZWRfZnVsbF9yZXNldCA9IHRydWU7Cj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IC1FQUdBSU47Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byBlbmQ7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KCFyKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1X2RldmljZV9yZWNv dmVyX3ZyYW0odG1wX2FkZXYpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB0bXBfYWRldi0+YXNpY19yZXNldF9yZXMgPSByOwo+Pj4+PiAr wqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArZW5kOgo+Pj4+PiArwqDCoMKgICpuZWVkX2Z1bGxfcmVz ZXRfYXJnID0gbmVlZF9mdWxsX3Jlc2V0Owo+Pj4+PiArwqDCoMKgIHJldHVybiByOwo+Pj4+PiAr fQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgdm9pZCBhbWRncHVfZGV2aWNlX3Bvc3RfYXNpY19yZXNl dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iKQo+Pj4+PiArewo+ Pj4+PiArwqDCoMKgIGludCBpOwo+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqDCoMKgIGZvciAoaSA9 IDA7IGkgPCBBTURHUFVfTUFYX1JJTkdTOyArK2kpIHsKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gYWRldi0+cmluZ3NbaV07Cj4+Pj4+IEBA IC0zMzk0LDcgKzM0MTAsNyBAQCBpbnQgYW1kZ3B1X2RldmljZV9ncHVfcmVjb3ZlcihzdHJ1Y3QK Pj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIG9yIGFsbCByaW5ncyAoaW4gdGhlIGNhc2UgQGpvYiBpcyBOVUxMKQo+Pj4+PiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogYWZ0ZXIgYWJvdmUgYW1kZ3B1X3Jlc2V0IGFjY29tcGxpc2hl ZAo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+IC3CoMKgwqDCoMKgwqDC oCBpZiAoKCFqb2IgfHwgam9iLT5iYXNlLnNjaGVkID09ICZyaW5nLT5zY2hlZCkgJiYgIXIpCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoKCFqb2IgfHwgam9iLT5iYXNlLnNjaGVkID09ICZyaW5n LT5zY2hlZCkgJiYKPj4+Pj4gIWFkZXYtPmFzaWNfcmVzZXRfcmVzKQo+Pj4+PiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9qb2JfcmVjb3ZlcnkoJnJpbmctPnNjaGVk KTsKPj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGt0aHJlYWRfdW5wYXJrKHJp bmctPnNjaGVkLnRocmVhZCk7Cj4+Pj4+IEBAIC0zNDA0LDIxICszNDIwLDE1MCBAQCBpbnQgYW1k Z3B1X2RldmljZV9ncHVfcmVjb3ZlcihzdHJ1Y3QKPj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwK Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9k ZShhZGV2LT5kZGV2KTsKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gIMKgwqDCoCAtIHR0 bV9ib191bmxvY2tfZGVsYXllZF93b3JrcXVldWUoJmFkZXYtPm1tYW4uYmRldiwgcmVzY2hlZCk7 Cj4+Pj4+ICsgdHRtX2JvX3VubG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmYWRldi0+bW1hbi5iZGV2 LCBhZGV2LT5yZXNjaGVkKTsKPj4+Pj4gIMKgwqDCoCAtwqDCoMKgIGlmIChyKSB7Cj4+Pj4+IC3C oMKgwqDCoMKgwqDCoCAvKiBiYWQgbmV3cywgaG93IHRvIHRlbGwgaXQgdG8gdXNlcnNwYWNlID8g Ki8KPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGRldl9pbmZvKGFkZXYtPmRldiwgIkdQVSByZXNldCgl ZCkgZmFpbGVkXG4iLAo+Pj4+PiBhdG9taWNfcmVhZCgmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIp KTsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGFtZGdwdV92Zl9lcnJvcl9wdXQoYWRldiwgQU1ER0lN X0VSUk9SX1ZGX0dQVV9SRVNFVF9GQUlMLAo+Pj4+PiAwLCByKTsKPj4+Pj4gLcKgwqDCoCB9IGVs c2Ugewo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZGV2X2luZm8oYWRldi0+ZGV2LCAiR1BVIHJlc2V0 KCVkKQo+Pj4+PiBzdWNjZWVkZWQhXG4iLGF0b21pY19yZWFkKCZhZGV2LT5ncHVfcmVzZXRfY291 bnRlcikpOwo+Pj4+PiAtwqDCoMKgIH0KPj4+Pj4gK8KgwqDCoCBhZGV2LT5hc2ljX3Jlc2V0X3Jl cyA9IGFkZXYtPnJlc2NoZWQgPSAwOwo+Pj4+PiArCj4+Pj4+ICt9Cj4+Pj4+ICDCoMKgwqAgK3N0 YXRpYyB2b2lkIGFtZGdwdV9sb2NrX2FkZXYoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgbXV0ZXhfbG9jaygmYWRldi0+bG9ja19yZXNldCk7Cj4+Pj4+ ICvCoMKgwqAgYXRvbWljX2luYygmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIpOwo+Pj4+PiArwqDC oMKgIGFkZXYtPmluX2dwdV9yZXNldCA9IDE7Cj4+Pj4+ICvCoMKgwqAgLyogQmxvY2sga2ZkICov Cj4+Pj4+ICvCoMKgwqAgYW1kZ3B1X2FtZGtmZF9wcmVfcmVzZXQoYWRldik7Cj4+Pj4+ICt9Cj4+ Pj4+ICsKPj4+Pj4gK3N0YXRpYyB2b2lkIGFtZGdwdV91bmxvY2tfYWRldihzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKPj4+Pj4gK3sKPj4+Pj4gIMKgwqDCoMKgwqDCoMKgIC8qdW5sb2NrIGtm ZCAqLwo+Pj4+PiAgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2FtZGtmZF9wb3N0X3Jlc2V0KGFkZXYp Owo+Pj4+PiAgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X3ZmX2Vycm9yX3RyYW5zX2FsbChhZGV2KTsK Pj4+Pj4gIMKgwqDCoMKgwqDCoMKgIGFkZXYtPmluX2dwdV9yZXNldCA9IDA7Cj4+Pj4+ICDCoMKg wqDCoMKgwqDCoCBtdXRleF91bmxvY2soJmFkZXYtPmxvY2tfcmVzZXQpOwo+Pj4+PiArfQo+Pj4+ PiArCj4+Pj4+ICsKPj4+Pj4gKy8qKgo+Pj4+PiArICogYW1kZ3B1X2RldmljZV9ncHVfcmVjb3Zl ciAtIHJlc2V0IHRoZSBhc2ljIGFuZCByZWNvdmVyIHNjaGVkdWxlcgo+Pj4+PiArICoKPj4+Pj4g KyAqIEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKPj4+Pj4gKyAqIEBqb2I6IHdoaWNoIGpv YiB0cmlnZ2VyIGhhbmcKPj4+Pj4gKyAqCj4+Pj4+ICsgKiBBdHRlbXB0IHRvIHJlc2V0IHRoZSBH UFUgaWYgaXQgaGFzIGh1bmcgKGFsbCBhc2ljcykuCj4+Pj4+ICsgKiBBdHRlbXB0IHRvIGRvIHNv ZnQtcmVzZXQgb3IgZnVsbC1yZXNldCBhbmQgcmVpbml0aWFsaXplIEFzaWMKPj4+Pj4gKyAqIFJl dHVybnMgMCBmb3Igc3VjY2VzcyBvciBhbiBlcnJvciBvbiBmYWlsdXJlLgo+Pj4+PiArICovCj4+ Pj4+ICsKPj4+Pj4gK2ludCBhbWRncHVfZGV2aWNlX2dwdV9yZWNvdmVyKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgYW1kZ3B1X2pvYiAqam9iKQo+Pj4+PiArewo+Pj4+PiArwqDCoMKgIGludCByOwo+Pj4+ PiArwqDCoMKgIHN0cnVjdCBhbWRncHVfaGl2ZV9pbmZvICpoaXZlID0gTlVMTDsKPj4+Pj4gK8Kg wqDCoCBib29sIG5lZWRfZnVsbF9yZXNldCA9IGZhbHNlOwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBh bWRncHVfZGV2aWNlICp0bXBfYWRldiA9IE5VTEw7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGxpc3Rf aGVhZCBkZXZpY2VfbGlzdCwgKmRldmljZV9saXN0X2hhbmRsZSA9IE5VTEw7Cj4+Pj4+ICsKPj4+ Pj4gK8KgwqDCoCBJTklUX0xJU1RfSEVBRCgmZGV2aWNlX2xpc3QpOwo+Pj4+PiArCj4+Pj4+ICvC oMKgwqAgZGV2X2luZm8oYWRldi0+ZGV2LCAiR1BVIHJlc2V0IGJlZ2luIVxuIik7Cj4+Pj4+ICsK Pj4+Pj4gK8KgwqDCoCAvKgo+Pj4+PiArwqDCoMKgwqAgKiBJbiBjYXNlIG9mIFhHTUkgaGl2ZSBk aXNhbGxvdyBjb25jdXJyZW50IHJlc2V0cyB0byBiZQo+Pj4+PiB0cmlnZ2VyZWQKPj4+Pj4gK8Kg wqDCoMKgICogYnkgZGlmZmVyZW50IG5vZGVzLgo+Pj4+PiArwqDCoMKgwqAgKi8KPj4+Pj4gK8Kg wqDCoCBpZiAoYWRldi0+Z21jLnhnbWkubnVtX3BoeXNpY2FsX25vZGVzID4gMSkKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIG11dGV4X2xvY2soJnhnbWlfbXV0ZXgpOwo+Pj4+PiArCj4+Pj4+ICvCoMKg wqAgLyogU3RhcnQgd2l0aCBhZGV2IHByZSBhc2ljIHJlc2V0IGZpcnN0IGZvciBzb2Z0IHJlc2V0 IGNoZWNrLiovCj4+Pj4+ICvCoMKgwqAgYW1kZ3B1X2xvY2tfYWRldihhZGV2KTsKPj4+Pj4gK8Kg wqDCoCByID0gYW1kZ3B1X2RldmljZV9wcmVfYXNpY19yZXNldChhZGV2LAo+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBqb2IsCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZuZWVkX2Z1bGxfcmVzZXQpOwo+Pj4+PiAr wqDCoMKgIGlmIChyKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAvKlRPRE8gU2hvdWxkIHdlIHN0 b3AgPyovCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkdQVSBwcmUgYXNpYyByZXNl dCBmYWlsZWQgd2l0aCBlcnIsICVkIGZvciBkcm0KPj4+Pj4gZGV2LCAlcyAiLAo+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciwgYWRldi0+ZGRldi0+dW5pcXVlKTsKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIGFkZXYtPmFzaWNfcmVzZXRfcmVzID0gcjsKPj4+Pj4gK8KgwqDCoCB9Cj4+ Pj4+ICsKPj4+Pj4gK8KgwqDCoCAvKiBCdWlsZCBsaXN0IG9mIGRldmljZXMgdG8gcmVzZXQgKi8K Pj4+Pj4gK8KgwqDCoCBpZsKgIChuZWVkX2Z1bGxfcmVzZXQgJiYgYWRldi0+Z21jLnhnbWkubnVt X3BoeXNpY2FsX25vZGVzID4gMSkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaGl2ZSA9IGFtZGdw dV9nZXRfeGdtaV9oaXZlKGFkZXYpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFoaXZlKSB7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSAtRU5PREVWOwo+Pj4+PiArCj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV91bmxvY2tfYWRldihhZGV2KTsKPj4+Pj4g Kwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYWRldi0+Z21jLnhnbWkubnVtX3Bo eXNpY2FsX25vZGVzID4gMSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBt dXRleF91bmxvY2soJnhnbWlfbXV0ZXgpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcjsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgLyoKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBJbiBjYXNlIHdlIGFyZSBpbiBYR01J IGhpdmUgbW9kZSBkZXZpY2UgcmVzZXQgaXMgZG9uZQo+Pj4+PiBmb3IgYWxsIHRoZQo+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoCAqIG5vZGVzIGluIHRoZSBoaXZlIHRvIHJldHJhaW4gYWxsIFhHTUkg bGlua3MgYW5kIGhlbmNlCj4+Pj4+IHRoZSByZXNldAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoCAq IHNlcXVlbmNlIGlzIGV4ZWN1dGVkIGluIGxvb3Agb24gYWxsIG5vZGVzLgo+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoCAqLwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2aWNlX2xpc3RfaGFuZGxlID0g YW1kZ3B1X3hnbWlfZ2V0X2FkZXZfbGlzdF9oYW5kbGUoaGl2ZSk7Cj4+Pj4+ICvCoMKgwqAgfSBl bHNlIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfYWRkX3RhaWwoJmFkZXYtPmdtYy54Z21p LmhlYWQsICZkZXZpY2VfbGlzdCk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZpY2VfbGlzdF9o YW5kbGUgPSAmZGV2aWNlX2xpc3Q7Cj4+Pj4+ICvCoMKgwqAgfQo+Pj4+PiArCj4+Pj4+ICtyZXRy eTrCoMKgwqAgLyogUmVzdCBvZiBhZGV2cyBwcmUgYXNpYyByZXNldCBmcm9tIFhHTUkgaGl2ZS4g Ki8KPj4+Pj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9hZGV2LCBkZXZpY2VfbGlz dF9oYW5kbGUsCj4+Pj4+IGdtYy54Z21pLmhlYWQpIHsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKHRtcF9hZGV2ID09IGFkZXYpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnRpbnVlOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbyh0bXBfYWRl di0+ZGV2LCAiR1BVIHJlc2V0IGJlZ2luIGZvciBkcm0gZGV2Cj4+Pj4+ICVzIVxuIiwgYWRldi0+ ZGRldi0+dW5pcXVlKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2xvY2tf YWRldih0bXBfYWRldik7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1X2RldmljZV9w cmVfYXNpY19yZXNldCh0bXBfYWRldiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZuZWVkX2Z1bGxfcmVzZXQpOwo+Pj4+PiArwqDC oMKgwqDCoMKgwqAgLypUT0RPIFNob3VsZCB3ZSBzdG9wID8qLwo+Pj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKHIpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJHUFUg cHJlIGFzaWMgcmVzZXQgZmFpbGVkIHdpdGggZXJyLCAlZCBmb3IKPj4+Pj4gZHJtIGRldiwgJXMg IiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciwgdG1wX2FkZXYt PmRkZXYtPnVuaXF1ZSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRtcF9hZGV2LT5h c2ljX3Jlc2V0X3JlcyA9IHI7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ICvCoMKgwqAg fQo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgLyogQWN0dWFsIEFTSUMgcmVzZXRzIGlmIG5lZWRlZC4q Lwo+Pj4+PiArwqDCoMKgIC8qIFRPRE8gSW1wbGVtZW50IFhHTUkgaGl2ZSByZXNldCBsb2dpYyBm b3IgU1JJT1YgKi8KPj4+Pj4gK8KgwqDCoCBpZiAoYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKSB7Cj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1X2RldmljZV9yZXNldF9zcmlvdihhZGV2LCBq b2IgPyBmYWxzZSA6IHRydWUpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHIpCj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZXYtPmFzaWNfcmVzZXRfcmVzID0gcjsKPj4+Pj4gK8Kg wqDCoCB9IGVsc2Ugewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcsKgID0gYW1kZ3B1X2RvX2FzaWNf cmVzZXQoaGl2ZSwgZGV2aWNlX2xpc3RfaGFuZGxlLAo+Pj4+PiAmbmVlZF9mdWxsX3Jlc2V0KTsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyICYmIHIgPT0gLUVBR0FJTikKPj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byByZXRyeTsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICsKPj4+ Pj4gK8KgwqDCoCAvKiBQb3N0IEFTSUMgcmVzZXQgZm9yIGFsbCBkZXZzIC4qLwo+Pj4+PiArwqDC oMKgIGxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2FkZXYsIGRldmljZV9saXN0X2hhbmRsZSwKPj4+ Pj4gZ21jLnhnbWkuaGVhZCkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2RldmljZV9w b3N0X2FzaWNfcmVzZXQodG1wX2FkZXYsIHRtcF9hZGV2ID09IGFkZXYgPwo+Pj4+PiBqb2IgOiBO VUxMKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHIpIHsKPj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLyogYmFkIG5ld3MsIGhvdyB0byB0ZWxsIGl0IHRvIHVzZXJzcGFj ZSA/ICovCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9pbmZvKHRtcF9hZGV2LT5k ZXYsICJHUFUgcmVzZXQoJWQpIGZhaWxlZFxuIiwKPj4+Pj4gYXRvbWljX3JlYWQoJmFkZXYtPmdw dV9yZXNldF9jb3VudGVyKSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV92 Zl9lcnJvcl9wdXQodG1wX2FkZXYsCj4+Pj4+IEFNREdJTV9FUlJPUl9WRl9HUFVfUkVTRVRfRkFJ TCwgMCwgcik7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkZXZfaW5mbyh0bXBfYWRldi0+ZGV2LCAiR1BVIHJlc2V0KCVkKSBzdWNj ZWVkZWQhXG4iLAo+Pj4+PiBhdG9taWNfcmVhZCgmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIpKTsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgYW1k Z3B1X3VubG9ja19hZGV2KHRtcF9hZGV2KTsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICsKPj4+Pj4g K8KgwqDCoCBpZiAoYWRldi0+Z21jLnhnbWkubnVtX3BoeXNpY2FsX25vZGVzID4gMSkKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgIG11dGV4X3VubG9jaygmeGdtaV9tdXRleCk7Cj4+Pj4+ICsKPj4+Pj4g K8KgwqDCoCBpZiAocikKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9pbmZvKGFkZXYtPmRldiwg IkdQVSByZXNldCBlbmQgd2l0aCByZXQgPSAlZFxuIiwgcik7Cj4+Pj4+ICDCoMKgwqDCoMKgwqDC oCByZXR1cm4gcjsKPj4+Pj4gIMKgwqDCoCB9Cj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+Pj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPj4+IGFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2FtZC1nZngKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdm eAo=