From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v7,1/2] dmaengine: 8250_mtk_dma: add MediaTek uart DMA support From: Long Cheng Message-Id: <1545806121.28871.88.camel@mhfsdcap03> Date: Wed, 26 Dec 2018 14:35:21 +0800 To: Nicolas Boichat Cc: Vinod Koul , Randy Dunlap , Rob Herring , Mark Rutland , Ryder Lee , Sean Wang , Matthias Brugger , Dan Williams , Greg Kroah-Hartman , Jiri Slaby , Sean Wang , dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm Mailing List , linux-mediatek@lists.infradead.org, lkml , linux-serial@vger.kernel.org, srv_heupstream@mediatek.com, Yingjoe Chen , YT Shen , Zhenbao Liu , Long Cheng List-ID: T24gV2VkLCAyMDE4LTEyLTI2IGF0IDA4OjA1ICswODAwLCBOaWNvbGFzIEJvaWNoYXQgd3JvdGU6 Cgp0aGFua3MuIAoKPiBPbiBUdWUsIERlYyAyNSwgMjAxOCBhdCA4OjA2IFBNIExvbmcgQ2hlbmcg PGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29tPiB3cm90ZToKPiA+Cj4gPiBUaGFua3MgZm9yIHlvdXIg Y29tbWVudHMuCj4gPgo+ID4gT24gVHVlLCAyMDE4LTEyLTI1IGF0IDE1OjE2ICswODAwLCBOaWNv bGFzIEJvaWNoYXQgd3JvdGU6Cj4gPiA+IE5vdCBhIGZ1bGwgcmV2aWV3LCBhIGZldyBjb21tZW50 cyBiZWxvdy4KPiA+ID4KPiA+ID4gVGhhbmtzLAo+ID4gPgo+ID4KPiA+IHdvdWxkIHlvdSBsaWtl IGhlbHAgdG8gZnVsbCByZXZpZXcgYXQgdGhpcyB2ZXJzaW9uIHBhdGNoPyAgYW5kIHRoZW4gaQo+ ID4gY2FuIG1vZGlmeSB0aGVzZSBhdCBuZXh0IHZlcnNpb24gcGF0Y2guIHRoYW5rcy4KPiAKPiBB ZGRlZCBhIGZldyBtb3JlIGNvbW1lbnRzICwtKQo+IAo+ID4gPiBPbiBUdWUsIERlYyAyNSwgMjAx OCBhdCA5OjI3IEFNIExvbmcgQ2hlbmcgPGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29tPiB3cm90ZToK PiA+ID4gPgo+ID4gPiA+IEluIERNQSBlbmdpbmUgZnJhbWV3b3JrLCBhZGQgODI1MCB1YXJ0IGRt YSB0byBzdXBwb3J0IE1lZGlhVGVrIHVhcnQuCj4gPiA+ID4gSWYgTWVkaWFUZWsgdWFydCBlbmFi bGVkKFNFUklBTF84MjUwX01UNjU3NyksIGFuZCB3YW50IHRvIGltcHJvdmUKPiA+ID4gPiB0aGUg cGVyZm9ybWFuY2UsIGNhbiBlbmFibGUgdGhlIGZ1bmN0aW9uLgo+ID4gPiA+Cj4gPiA+ID4gU2ln bmVkLW9mZi1ieTogTG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5jb20+Cj4gPiA+ID4g LS0tCj4gPiA+ID4gIGRyaXZlcnMvZG1hL21lZGlhdGVrLzgyNTBfbXRrX2RtYS5jIHwgIDY5NCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiA+ICBkcml2ZXJzL2RtYS9t ZWRpYXRlay9LY29uZmlnICAgICAgICB8ICAgMTEgKwo+ID4gPiA+ICBkcml2ZXJzL2RtYS9tZWRp YXRlay9NYWtlZmlsZSAgICAgICB8ICAgIDEgKwo+ID4gPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDcw NiBpbnNlcnRpb25zKCspCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9t ZWRpYXRlay84MjUwX210a19kbWEuYwo+ID4gPiA+Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZG1hL21lZGlhdGVrLzgyNTBfbXRrX2RtYS5jIGIvZHJpdmVycy9kbWEvbWVkaWF0ZWsvODI1 MF9tdGtfZG1hLmMKPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiA+IGluZGV4IDAw MDAwMDAuLmM0MDkwZjIKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4gKysrIGIvZHJpdmVy cy9kbWEvbWVkaWF0ZWsvODI1MF9tdGtfZG1hLmMKPiA+ID4gPiBAQCAtMCwwICsxLDY5NCBAQAo+ ID4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gPiA+ICsvKgo+ ID4gPiA+ICsgKiBNZWRpYVRlayA4MjUwIERNQSBkcml2ZXIuCj4gPiA+ID4gKyAqCj4gPiA+ID4g KyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCj4gPiA+ID4gKyAqIEF1dGhvcjog TG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5jb20+Cj4gPiA+ID4gKyAqLwo+ID4gPiA+ ICsKPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8bGlu dXgvZG1hZW5naW5lLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiA+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51 eC9vZl9kbWEuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ID4gPiA+ ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+ID4gPiA+ ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgv aW9wb2xsLmg+Cj4gPiA+Cj4gPiA+IEFscGhhYmV0aWNhbCBvcmRlci4KPiA+Cj4gPiBvaywgaSB3 aWxsIG9yZGVyLgo+ID4KPiA+ID4KPiA+ID4gPiArCj4gPiA+ID4gKyNpbmNsdWRlICIuLi92aXJ0 LWRtYS5oIgo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSBNVEtfVUFSVF9BUERNQV9DSEFOTkVM UyAgICAgICAgICAgICAgICAoQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTICogMikKPiA+ID4g PiArCj4gPiA+ID4gKyNkZWZpbmUgVkZGX0VOX0IgICAgICAgICAgICAgICBCSVQoMCkKPiA+ID4g PiArI2RlZmluZSBWRkZfU1RPUF9CICAgICAgICAgICAgIEJJVCgwKQo+ID4gPiA+ICsjZGVmaW5l IFZGRl9GTFVTSF9CICAgICAgICAgICAgQklUKDApCj4gPiA+ID4gKyNkZWZpbmUgVkZGXzRHX1NV UFBPUlRfQiAgICAgICBCSVQoMCkKPiA+ID4gPiArI2RlZmluZSBWRkZfUlhfSU5UX0VOMF9CICAg ICAgIEJJVCgwKSAgLypyeCB2YWxpZCBzaXplID49ICB2ZmYgdGhyZSovCj4gPiA+ID4gKyNkZWZp bmUgVkZGX1JYX0lOVF9FTjFfQiAgICAgICBCSVQoMSkKPiA+ID4gPiArI2RlZmluZSBWRkZfVFhf SU5UX0VOX0IgICAgICAgICAgICAgICAgQklUKDApICAvKnR4IGxlZnQgc2l6ZSA+PSB2ZmYgdGhy ZSovCj4gPiA+ID4gKyNkZWZpbmUgVkZGX1dBUk1fUlNUX0IgICAgICAgICBCSVQoMCkKPiA+ID4g PiArI2RlZmluZSBWRkZfUlhfSU5UX0ZMQUdfQ0xSX0IgIChCSVQoMCkgfCBCSVQoMSkpCj4gPiA+ ID4gKyNkZWZpbmUgVkZGX1RYX0lOVF9GTEFHX0NMUl9CICAwCj4gPiA+ID4gKyNkZWZpbmUgVkZG X1NUT1BfQ0xSX0IgICAgICAgICAwCj4gPiA+ID4gKyNkZWZpbmUgVkZGX0ZMVVNIX0NMUl9CICAg ICAgICAgICAgICAgIDAKPiA+ID4gPiArI2RlZmluZSBWRkZfSU5UX0VOX0NMUl9CICAgICAgIDAK PiA+ID4gPiArI2RlZmluZSBWRkZfNEdfU1VQUE9SVF9DTFJfQiAgIDAKPiA+ID4gPiArCj4gPiA+ ID4gKy8qIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIGZvciB0eCAqLwo+ID4gPiA+ICsjZGVmaW5l IFZGRl9UWF9USFJFKG4pICAgICAgICAgKChuKSAqIDcgLyA4KQo+ID4gPiA+ICsvKiBpbnRlcnJ1 cHQgdHJpZ2dlciBsZXZlbCBmb3IgcnggKi8KPiA+ID4gPiArI2RlZmluZSBWRkZfUlhfVEhSRShu KSAgICAgICAgICgobikgKiAzIC8gNCkKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgTVRLX1VB UlRfQVBETUFfUklOR19TSVpFICAgICAgIDB4ZmZmZlUKPiA+ID4gPiArLyogaW52ZXJ0IHRoaXMg Yml0IHdoZW4gd3JhcCByaW5nIGhlYWQgYWdhaW4qLwo+ID4gPiA+ICsjZGVmaW5lIE1US19VQVJU X0FQRE1BX1JJTkdfV1JBUCAgICAgICAweDEwMDAwVQo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmlu ZSBWRkZfSU5UX0ZMQUcgICAgICAgICAgIDB4MDAKPiA+ID4gPiArI2RlZmluZSBWRkZfSU5UX0VO ICAgICAgICAgICAgIDB4MDQKPiA+ID4gPiArI2RlZmluZSBWRkZfRU4gICAgICAgICAgICAgICAg IDB4MDgKPiA+ID4gPiArI2RlZmluZSBWRkZfUlNUICAgICAgICAgICAgICAgICAgICAgICAgMHgw Ywo+ID4gPiA+ICsjZGVmaW5lIFZGRl9TVE9QICAgICAgICAgICAgICAgMHgxMAo+ID4gPiA+ICsj ZGVmaW5lIFZGRl9GTFVTSCAgICAgICAgICAgICAgMHgxNAo+ID4gPiA+ICsjZGVmaW5lIFZGRl9B RERSICAgICAgICAgICAgICAgMHgxYwo+ID4gPiA+ICsjZGVmaW5lIFZGRl9MRU4gICAgICAgICAg ICAgICAgICAgICAgICAweDI0Cj4gPiA+ID4gKyNkZWZpbmUgVkZGX1RIUkUgICAgICAgICAgICAg ICAweDI4Cj4gPiA+ID4gKyNkZWZpbmUgVkZGX1dQVCAgICAgICAgICAgICAgICAgICAgICAgIDB4 MmMKPiA+ID4gPiArI2RlZmluZSBWRkZfUlBUICAgICAgICAgICAgICAgICAgICAgICAgMHgzMAo+ ID4gPiA+ICsvKlRYOiB0aGUgYnVmZmVyIHNpemUgSFcgY2FuIHJlYWQuIFJYOiB0aGUgYnVmZmVy IHNpemUgU1cgY2FuIHJlYWQuKi8KPiA+ID4gPiArI2RlZmluZSBWRkZfVkFMSURfU0laRSAgICAg ICAgIDB4M2MKPiA+ID4gPiArLypUWDogdGhlIGJ1ZmZlciBzaXplIFNXIGNhbiB3cml0ZS4gUlg6 IHRoZSBidWZmZXIgc2l6ZSBIVyBjYW4gd3JpdGUuKi8KPiA+ID4gPiArI2RlZmluZSBWRkZfTEVG VF9TSVpFICAgICAgICAgIDB4NDAKPiA+ID4gPiArI2RlZmluZSBWRkZfREVCVUdfU1RBVFVTICAg ICAgIDB4NTAKPiA+ID4gPiArI2RlZmluZSBWRkZfNEdfU1VQUE9SVCAgICAgICAgIDB4NTQKPiA+ ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBtdGtfdWFydF9hcGRtYWRldiB7Cj4gPiA+ID4gKyAgICAg ICBzdHJ1Y3QgZG1hX2RldmljZSBkZGV2Owo+ID4gPiA+ICsgICAgICAgc3RydWN0IGNsayAqY2xr Owo+ID4gPiA+ICsgICAgICAgYm9vbCBzdXBwb3J0XzMzYml0czsKPiA+ID4gPiArICAgICAgIHVu c2lnbmVkIGludCBkbWFfaXJxW01US19VQVJUX0FQRE1BX0NIQU5ORUxTXTsKPiA+ID4gPiArfTsK PiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBtdGtfdWFydF9hcGRtYV9kZXNjIHsKPiA+ID4gPiAr ICAgICAgIHN0cnVjdCB2aXJ0X2RtYV9kZXNjIHZkOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAg IHVuc2lnbmVkIGludCBhdmFpbF9sZW47Cj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ICtz dHJ1Y3QgbXRrX2NoYW4gewo+ID4gPiA+ICsgICAgICAgc3RydWN0IHZpcnRfZG1hX2NoYW4gdmM7 Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBjZmc7Cj4gPiA+ID4gKyAg ICAgICB2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3VhcnRf YXBkbWFfZGVzYyAqZGVzYzsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBib29sIHJlcXVlc3Rl ZDsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgcnhfc3RhdHVzOwo+ID4g PiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX3VhcnRf YXBkbWFkZXYgKgo+ID4gPiA+ICt0b19tdGtfdWFydF9hcGRtYV9kZXYoc3RydWN0IGRtYV9kZXZp Y2UgKmQpCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIHJldHVybiBjb250YWluZXJfb2YoZCwg c3RydWN0IG10a191YXJ0X2FwZG1hZGV2LCBkZGV2KTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ ID4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NoYW4gKnRvX210a191YXJ0X2FwZG1hX2No YW4oc3RydWN0IGRtYV9jaGFuICpjKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICByZXR1cm4g Y29udGFpbmVyX29mKGMsIHN0cnVjdCBtdGtfY2hhbiwgdmMuY2hhbik7Cj4gPiA+ID4gK30KPiA+ ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a191YXJ0X2FwZG1hX2Rlc2Mg KnRvX210a191YXJ0X2FwZG1hX2Rlc2MKPiA+ID4gPiArICAgICAgIChzdHJ1Y3QgZG1hX2FzeW5j X3R4X2Rlc2NyaXB0b3IgKnQpCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIHJldHVybiBjb250 YWluZXJfb2YodCwgc3RydWN0IG10a191YXJ0X2FwZG1hX2Rlc2MsIHZkLnR4KTsKPiA+ID4gPiAr fQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0 ZShzdHJ1Y3QgbXRrX2NoYW4gKmMsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCj4gPiA+ID4gK3sKPiA+ID4g PiArICAgICAgIHdyaXRlbCh2YWwsIGMtPmJhc2UgKyByZWcpOwo+ID4gPiA+ICt9Cj4gPiA+ID4g Kwo+ID4gPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50Cj4gPiA+ID4gK210a191YXJ0X2FwZG1hX2No YW5fcmVhZChzdHJ1Y3QgbXRrX2NoYW4gKmMsIHVuc2lnbmVkIGludCByZWcpCj4gPiA+ID4gK3sK PiA+ID4gPiArICAgICAgIHJldHVybiByZWFkbChjLT5iYXNlICsgcmVnKTsKPiA+ID4gPiArfQo+ ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgbXRrX3VhcnRfYXBkbWFfZGVzY19mcmVlKHN0 cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgc3RydWN0 IGRtYV9jaGFuICpjaGFuID0gdmQtPnR4LmNoYW47Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbXRr X2NoYW4gKmMgPSB0b19tdGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOwo+ID4gPiA+ICsKPiA+ID4g PiArICAgICAgIGtmcmVlKGMtPmRlc2MpOwo+ID4gPiA+ICsgICAgICAgYy0+ZGVzYyA9IE5VTEw7 Cj4gPiA+Cj4gPiA+IFdoeT8gSSdtIGFmcmFpZCB0aGlzIG1heSBtYXNrIGRvdWJsZS1mcmVlLgo+ ID4gPgo+ID4KPiA+IGkgd2lsbCByZW1vdmUgaXQuCj4gPgo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ ID4gPiA+ICtzdGF0aWMgdm9pZCBtdGtfdWFydF9hcGRtYV9zdGFydF90eChzdHJ1Y3QgbXRrX2No YW4gKmMpCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIHVuc2lnbmVkIGludCB0eGNvdW50ID0g Yy0+ZGVzYy0+YXZhaWxfbGVuOwo+ID4gPgo+ID4gPiBWYXJpYWJsZSBuYW1lIGlzIGNvbmZ1c2lu Zy4uLiBJJ2QgcmF0aGVyIGhhdmUgYSBib29sZWFuIGB0cmFuc21pdHRlZGAKPiA+ID4gKG9yIHNv bWV0aGluZyksIHNldCB0byAwIGhlcmUsIGFuZCBzZXQgdG8gMSBpbiB0aGUgbG9vcCAoYnV0IGFn YWluLAo+ID4gPiBtYXliZSB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYXQgYWxsLCBzZWUgYmVsb3cp Lgo+ID4KPiA+IG9rLCBpIG1vZGlmeSB0aGUgZnVuY3Rpb24gYW5kIHJlbW92ZSBpdC4KPiA+Cj4g PiA+Cj4gPiA+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBzZW5kLCBsZWZ0LCB3cHQsIHdy YXA7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKG10a191YXJ0X2FwZG1hX2NoYW5fcmVh ZChjLCBWRkZfTEVGVF9TSVpFKSA9PSAwVSkgewo+ID4gPiA+ICsgICAgICAgICAgICAgICBtdGtf dWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9JTlRfRU4sIFZGRl9UWF9JTlRfRU5fQik7Cj4g PiA+Cj4gPiA+IEknZCBhZGQgYSAicmV0dXJuOyIgaGVyZSBhbmQgZGUtaW5kZW50IHRoZSByZXN0 IG9mIHRoZSBmdW5jdGlvbiAodGhhdAo+ID4gPiBzaG91bGQgaGVscCB0byBtYWtlIGl0IG1vcmUg cmVhZGFibGUpLgo+ID4KPiA+IGFkZAo+ID4KPiA+ID4KPiA+ID4gPiArICAgICAgIH0gZWxzZSB7 Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGxlbiA9IG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChj LCBWRkZfTEVOKTsKPiA+ID4KPiA+ID4gWW91IG1ha2UgYW4gYXNzdW1wdGlvbiBiZWxvdyB0aGF0 IGxlbiBpcyBhbHdheXMgYSBwb3dlciBvZiAyLiBJIHdvbmRlcgo+ID4gPiBpZiB3ZSB3YW50IHRv IHZhbGlkYXRlIHRoYXQgd2l0aCBzb21lIEJVRy9XQVJOIGNhbGwuCj4gPiA+Cj4gPiA+IEFsc28s IEkgYXNzdW1lIFZGRl9MRU4gaXMgY29uc3RhbnQ/IE1heWJlIHdlIGNhbiByZWFkIGl0IG9uY2Ug b25seSBpbgo+ID4gPiB0aGUgcHJvYmUgZnVuY3Rpb24/Cj4gPiA+Cj4gPgo+ID4gbm8sIHRoZSB2 YWx1ZSBvZiBWRkZfTEVOIGlzbid0IGNvbnN0YW50Lgo+ID4KPiA+ID4gPiArCj4gPiA+ID4gKyAg ICAgICAgICAgICAgIHdoaWxlICgoKGxlZnQgPSBtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywK PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkZGX0xFRlRf U0laRSkpID4gMFUpCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAo Yy0+ZGVzYy0+YXZhaWxfbGVuICE9IDBVKSkgewo+ID4gPgo+ID4gPiBXaHkgZG8gd2UgbmVlZCBh IHdoaWxlIGxvb3AgaGVyZT8gTEVGVF9TSVpFIHdpbGwgYWx3YXlzIGJlIHNtYWxsZXIKPiA+ID4g dGhhbiBMRU4sIHJpZ2h0PyBTaG91bGRuJ3Qgd2UgbG9hZCBhcyBtdWNoIGFzIHdlIGNhbiwgdGhl biBsZXQgYW4KPiA+ID4gaW50ZXJydXB0IGhhcHBlbiBhbmQgcmVsb2FkIHRoZSBGSUZPIGF0IHRo YXQgc3RhZ2U/IE9yIGRvZXMgdGhpcyBoZWxwCj4gPiA+IGdhaW4gYSBiaXQgb2YgZXh0cmEgcGVy Zm9ybWFuY2U/Cj4gPgo+ID4gaSB3aWxsIHJlbW92ZSB3aGlsZSwgdXNlICdpZicgaW5zdGVhZCBv Zi4KPiA+ID4KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBzZW5kID0gbWluX3QodW5z aWduZWQgaW50LCBsZWZ0LCBjLT5kZXNjLT5hdmFpbF9sZW4pOwo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHdwdCA9IG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChjLCBWRkZfV1BUKTsK PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB3cmFwID0gd3B0ICYgTVRLX1VBUlRfQVBE TUFfUklOR19XUkFQID8KPiA+ID4KPiA+ID4gd3JhcCA9IHdycCBeIE1US19VQVJUX0FQRE1BX1JJ TkdfV1JBUCA/Cj4gPiA+Cj4gPgo+ID4gd3JhcCA9IHdwdCAmIE1US19VQVJUX0FQRE1BX1JJTkdf V1JBUCA/Cj4gPiBpIGhhZCB0ZXN0IGl0Lgo+IAo+IFNvcnJ5LCBJIGdvdCBpdCB3cm9uZyAoYW5k IG15IHF1ZXN0aW9uIG1hcmsgaXMgY29uZnVzaW5nKSwgd2hhdCBJIG1lYW4gaXMgdGhpczoKPiAK PiB3cmFwID0gKHdycCBeIE1US19VQVJUX0FQRE1BX1JJTkdfV1JBUCkgJiBNVEtfVUFSVF9BUERN QV9SSU5HX1dSQVA7Cj4gCj4gQnV0IHRoZW4gaXQncyBtYXJnaW5hbGx5IHNob3J0ZXIgdGhhbiB5 b3VyIHNvbHV0aW9uLCBzbyBtYXliZSBrZWVwCj4geW91cnMsIGl0J3MgYSBsaXR0bGUgc2ltcGxl ciB0byB1bmRlcnN0YW5kLgo+IAoKaSB3aWxsIHJlbmFtZSAnTVRLX1VBUlRfQVBETUFfUklOR19X UkFQJyB0byAnVkZGX1JJTkdfV1JBUCcuIGxldCBjb2RlCnNob3J0ZXIuIGkgd2lsbCBrZWVwIHRo ZSBjb2RlLgoKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MFUgOiBNVEtfVUFSVF9BUERNQV9SSU5HX1dSQVA7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGlmICgod3B0ICYgKGxlbiAtIDFVKSkgKyBzZW5kIDwgbGVuKQo+IAo+ IElzIGl0IHBvc3NpYmxlIGZvciB3cHQgPiBsZW4/IElmIG5vdCwgdGhlbiB3cHQgKyBzZW5kIDwg bGVuIHNob3VsZCBiZSBlbm91Z2guCj4gCj4gQWxzbywgd3B0ICsgc2VuZCBpcyB1c2VkIGEgZmV3 IHRpbWVzIG5vdywgc28gbWF5YmUgaGF2ZSBpdCBhIHNlcGFyYXRlIHZhcmlhYmxlPwo+IAo+IFNv bWV0aGluZyBsaWtlIHRoaXMgbWlnaHQgYmUgbmljZXI6Cj4gCj4gbmV4dF93cHQgPSB3cHQgKyBz ZW5kOwo+IGlmICgod3B0ICYgKGxlbiAtIDFVKSkgKyBzZW5kID49IGxlbikgewo+ICAgIG5leHRf d3B0ID0gbmV4dF93cHQgJiAobGVuIC0gMVUpOwo+ICAgIGlmICghKHdwdCAmIE1US19VQVJUX0FQ RE1BX1JJTkdfV1JBUCkpCj4gICAgICAgbmV4dF93cHQgfD0gTVRLX1VBUlRfQVBETUFfUklOR19X UkFQOwo+IH0KPiBtdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9XUFQsIG5leHRfd3B0 KTsKPiAKPiBPciBpZiB0aGUgYXNzdW1wdGlvbiB0aGFuIHdwdCA8IGxlbiBob2xkczoKPiBpZiAo bmV4dF93cHQgPj0gbGVuKSB7Cj4gICAgbmV4dF93cHQgPSBuZXh0X3dwdCAtIGxlbjsKPiAuLi4K PiAKCmkgd2lsbCBtb2RpZnkgaXQgbGlrZSB5b3VyIGNvbW1lbnRzLApuZXh0X3dwdCA9IHdwdCAr IHNlbmQ7Cj4gaWYgKCh3cHQgJiAobGVuIC0gMVUpKSArIHNlbmQgPj0gbGVuKSB7Cj4gICAgbmV4 dF93cHQgPSBuZXh0X3dwdCAmIChsZW4gLSAxVSk7Cj4gICAgaWYgKCEod3B0ICYgTVRLX1VBUlRf QVBETUFfUklOR19XUkFQKSkKPiAgICAgICBuZXh0X3dwdCB8PSBNVEtfVUFSVF9BUERNQV9SSU5H X1dSQVA7Cj4gCmkgdGhpbmsgdGhhdCBpdCdzIGJldHRlci4KCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsCj4gPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkZGX1dQVCwg d3B0ICsgc2VuZCk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZQo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0 ZShjLCBWRkZfV1BULAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgod3B0ICsgc2VuZCkgJiAobGVuIC0gMVUpKQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3JhcCk7Cj4g PiA+ID4gKwo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGMtPmRlc2MtPmF2YWlsX2xl biAtPSBzZW5kOwo+ID4gPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiA+ID4gKwo+ID4gPiA+ICsg ICAgICAgICAgICAgICBpZiAodHhjb3VudCAhPSBjLT5kZXNjLT5hdmFpbF9sZW4pIHsKPiA+ID4K PiA+ID4gV2Uga25vdyBtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywgVkZGX0xFRlRfU0laRSkg PiAwIGF0IGxlYXN0IG9uY2UsCj4gPiA+IHNvIHRoaXMgdGVzdCBzaG91bGQgYWx3YXlzIGJlIHRy dWUuCj4gPiA+Cj4gPiA+IFVubGVzcyB3ZSBoYXZlIGMtPmRlc2MtPmF2YWlsX2xlbiA9PSAwLCBi dXQgdGhlbiB3ZSB3b24ndCBldmVuIGNhbGwKPiA+ID4gdGhpcyBmdW5jdGlvbi4uLiBTbyB0aGlz IGlzIGFsd2F5cyB0cnVlLgo+ID4gPgo+ID4KPiA+IHllcy4geW91IGFyZSByaWdodC4gaSB3aWxs IHJlbW92ZSBpdC4KPiA+Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX3VhcnRf YXBkbWFfY2hhbl93cml0ZShjLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWRkZfSU5UX0VOLCBWRkZfVFhfSU5UX0VOX0IpOwo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGlmIChtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywKPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRkZfRkxVU0gp ID09IDBVKQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRrX3VhcnRf YXBkbWFfY2hhbl93cml0ZShjLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZGRl9GTFVTSCwgVkZGX0ZMVVNIX0IpOwo+ID4gPiA+ICsgICAg ICAgICAgICAgICB9Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ ID4gK3N0YXRpYyB2b2lkIG10a191YXJ0X2FwZG1hX3N0YXJ0X3J4KHN0cnVjdCBtdGtfY2hhbiAq YykKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgc3RydWN0IG10a191YXJ0X2FwZG1hX2Rlc2Mg KmQgPSBjLT5kZXNjOwo+ID4gPiA+ICsgICAgICAgdW5zaWduZWQgaW50IHJ4X2xlbiwgd2csIHJn LCBjb3VudDsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBpZiAobXRrX3VhcnRfYXBkbWFfY2hh bl9yZWFkKGMsIFZGRl9WQUxJRF9TSVpFKSA9PSAwVSkKPiA+ID4gPiArICAgICAgICAgICAgICAg cmV0dXJuOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmIChkICYmIHZjaGFuX25leHRfZGVz YygmYy0+dmMpKSB7Cj4gCj4gSSdkIG5lZ2F0ZSB0aGUgdGVzdCB0byBkZS1pbmRlbnQgdGhlIHJl c3Qgb2YgdGhlIGNvZGU6Cj4gaWYgKCFkIHx8ICF2Y2hhbl9uZXh0X2Rlc2MoJmMtPnZjKSkKPiAg ICByZXR1cm47Cj4gCgpvay4gaSB3aWxsIG1vZGlmeSBpdCBsaWtlIAppZiAoKG10a191YXJ0X2Fw ZG1hX2NoYW5fcmVhZChjLCBWRkZfVkFMSURfU0laRSkgPT0gMFUpIHx8CiAgICAhZCB8fCAhdmNo YW5fbmV4dF9kZXNjKCZjLT52YykpCiAgICByZXR1cm47Cgo+ID4gPiA+ICsgICAgICAgICAgICAg ICByeF9sZW4gPSBtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywgVkZGX0xFTik7Cj4gPiA+ID4g KyAgICAgICAgICAgICAgIHJnID0gbXRrX3VhcnRfYXBkbWFfY2hhbl9yZWFkKGMsIFZGRl9SUFQp Owo+ID4gPiA+ICsgICAgICAgICAgICAgICB3ZyA9IG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChj LCBWRkZfV1BUKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgY291bnQgPSAoKHJnIF4gd2cpICYg TVRLX1VBUlRfQVBETUFfUklOR19XUkFQKSA/Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKHdnICYgTVRLX1VBUlRfQVBETUFfUklOR19TSVpFKSArCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9sZW4gLSAocmcgJiBNVEtfVUFSVF9BUERN QV9SSU5HX1NJWkUpKSA6Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KHdnICYgTVRLX1VBUlRfQVBETUFfUklOR19TSVpFKSAtCj4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmcgJiBNVEtfVUFSVF9BUERNQV9SSU5HX1NJWkUpKTsKPiA+ID4K PiA+ID4gVGhpcyBpcyBoYXJkIHRvIHJlYWQsIHBsZWFzZSB1c2UgYSBpZi9lbHNlLgo+ID4gPgo+ ID4KPiA+IG9rLgo+ID4KPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICAgICAgICAgIGMtPnJ4X3N0 YXR1cyA9IGNvdW50Owo+ID4gPiA+ICsgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFu X3dyaXRlKGMsIFZGRl9SUFQsIHdnKTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICAgICAgICAg IGxpc3RfZGVsKCZkLT52ZC5ub2RlKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgdmNoYW5fY29v a2llX2NvbXBsZXRlKCZkLT52ZCk7Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4gK30KPiA+ID4g PiArCj4gPiA+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfdWFydF9hcGRtYV9pcnFfaGFuZGxl cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIHN0cnVj dCBkbWFfY2hhbiAqY2hhbiA9IChzdHJ1Y3QgZG1hX2NoYW4gKilkZXZfaWQ7Cj4gPiA+ID4gKyAg ICAgICBzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOwo+ ID4gPiA+ICsgICAgICAgc3RydWN0IG10a191YXJ0X2FwZG1hX2Rlc2MgKmQ7Cj4gPiA+ID4gKyAg ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHNwaW5f bG9ja19pcnFzYXZlKCZjLT52Yy5sb2NrLCBmbGFncyk7Cj4gPiA+ID4gKyAgICAgICBzd2l0Y2gg KGMtPmNmZy5kaXJlY3Rpb24pIHsKPiA+ID4gPiArICAgICAgIGNhc2UgRE1BX0RFVl9UT19NRU06 Cj4gPiA+Cj4gPiA+IFlvdSB1c2UgYW4gaWYvZWxzZSBiZWxvdyBpbiBhIHNpbWlsYXIgY2FzZSwg cGxlYXNlIGJlIGNvbnNpc3RlbnQgKElNSE8KPiA+ID4gaWYvZWxzZSBpcyBhIGJpdCBtb3JlIGNv bXBhY3QsIHNvIEknZCB1c2UgdGhhdCBoZXJlKS4KPiA+ID4KPiA+IHNlYW4gd2FuZyBoYWQgcmV2 aWV3IGl0LiB0aGUgbGluawo+ID4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvcGlwZXJtYWls L2xpbnV4LW1lZGlhdGVrLzIwMTgtRGVjZW1iZXIvMDE2MjkyLmh0bWwKPiA+CgpvaywgaSB3aWxs IHVzZSBpZi9lbHNlCgo+ID4gPiA+ICsgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFu X3dyaXRlKGMsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRkZfSU5U X0ZMQUcsIFZGRl9SWF9JTlRfRkxBR19DTFJfQik7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIG10 a191YXJ0X2FwZG1hX3N0YXJ0X3J4KGMpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBicmVhazsK PiA+ID4gPiArICAgICAgIGNhc2UgRE1BX01FTV9UT19ERVY6Cj4gPiA+ID4gKyAgICAgICAgICAg ICAgIGQgPSBjLT5kZXNjOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgICAgICAgICAgbXRrX3Vh cnRfYXBkbWFfY2hhbl93cml0ZShjLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVkZGX0lOVF9GTEFHLCBWRkZfVFhfSU5UX0ZMQUdfQ0xSX0IpOwo+ID4gPiA+ICsKPiA+ ID4gPiArICAgICAgICAgICAgICAgaWYgKGQtPmF2YWlsX2xlbiAhPSAwVSkgewo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX3N0YXJ0X3R4KGMpOwo+ID4gPiA+ ICsgICAgICAgICAgICAgICB9IGVsc2Ugewo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGxpc3RfZGVsKCZkLT52ZC5ub2RlKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB2 Y2hhbl9jb29raWVfY29tcGxldGUoJmQtPnZkKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgfQo+ ID4gPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gPiArICAgICAgIGRlZmF1bHQ6Cj4g PiA+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsg ICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gPiA+ ICsKPiA+ID4gPiArICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKPiA+ID4gPiArfQo+ID4gPiA+ ICsKPiA+ID4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9hbGxvY19jaGFuX3Jlc291cmNl cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIHN0cnVj dCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZCA9IHRvX210a191YXJ0X2FwZG1hX2RldihjaGFuLT5k ZXZpY2UpOwo+ID4gPiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRf YXBkbWFfY2hhbihjaGFuKTsKPiA+ID4gPiArICAgICAgIHUzMiBzdGF0dXM7Cj4gPiA+ID4gKyAg ICAgICBpbnQgcmV0ID0gLUVCVVNZOwo+IAo+IE5vIG5lZWQgdG8gaW5pdCByZXQuCj4gCgpvay4K Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgcG1fcnVudGltZV9nZXRfc3luYyhtdGtkLT5kZGV2 LmRldik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0 ZShjLCBWRkZfQUREUiwgMCk7Cj4gPiA+ID4gKyAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFuX3dy aXRlKGMsIFZGRl9USFJFLCAwKTsKPiA+ID4gPiArICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5f d3JpdGUoYywgVkZGX0xFTiwgMCk7Cj4gPiA+ID4gKyAgICAgICBtdGtfdWFydF9hcGRtYV9jaGFu X3dyaXRlKGMsIFZGRl9SU1QsIFZGRl9XQVJNX1JTVF9CKTsKPiA+ID4gPiArCj4gPiA+ID4gKyAg ICAgICByZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYy0+YmFzZSArIFZGRl9FTiwKPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHN0YXR1cyA9PSAwLCAxMCwgMTAwKTsKPiA+ ID4gPiArICAgICAgIGlmIChyZXQpIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgZGV2X2Vycihj LT52Yy5jaGFuLmRldmljZS0+ZGV2LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImRtYSByZXNldDogZmFpbCwgdGltZW91dFxuIik7Cj4gPiA+ID4gKyAgICAgICAgICAg ICAgIGdvdG8gZXhpdDsKPiAKPiBKdXN0IHJldHVybiByZXQsIHNpbmNlIHlvdSBkb24ndCBkbyBh bnkgY2xlYW51cCBpbiBleGl0Oi4KPiAKCm9rLgoKPiA+ID4gPiArICAgICAgIH0KPiA+ID4gPiAr Cj4gPiA+ID4gKyAgICAgICBpZiAoIWMtPnJlcXVlc3RlZCkgewo+ID4gPiA+ICsgICAgICAgICAg ICAgICBjLT5yZXF1ZXN0ZWQgPSB0cnVlOwo+ID4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSBy ZXF1ZXN0X2lycShtdGtkLT5kbWFfaXJxW2NoYW4tPmNoYW5faWRdLAo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9pcnFfaGFuZGxlciwKPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRRl9UUklHR0VSX05PTkUs Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtCVUlMRF9NT0ROQU1F LCBjaGFuKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiQ2FuJ3Qg cmVxdWVzdCBkbWEgSVJRXG4iKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKPiA+ID4gPiArICAgICAgICAgICAgICAgfQo+ID4gPiA+ICsgICAgICAgfQo+ ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmIChtdGtkLT5zdXBwb3J0XzMzYml0cykKPiA+ID4g PiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLAo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkZGXzRHX1NVUFBPUlQsIFZGRl80R19TVVBQ T1JUX0NMUl9CKTsKPiA+ID4gPiArCj4gPiA+ID4gK2V4aXQ6Cj4gPiA+ID4gKyAgICAgICByZXR1 cm4gcmV0Owo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9pZCBtdGtfdWFy dF9hcGRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKPiA+ID4g PiArewo+ID4gPiA+ICsgICAgICAgc3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkID0gdG9f bXRrX3VhcnRfYXBkbWFfZGV2KGNoYW4tPmRldmljZSk7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qg bXRrX2NoYW4gKmMgPSB0b19tdGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOwo+ID4gPiA+ICsKPiA+ ID4gPiArICAgICAgIGlmIChjLT5yZXF1ZXN0ZWQpIHsKPiA+ID4gPiArICAgICAgICAgICAgICAg Yy0+cmVxdWVzdGVkID0gZmFsc2U7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGZyZWVfaXJxKG10 a2QtPmRtYV9pcnFbY2hhbi0+Y2hhbl9pZF0sIGNoYW4pOwo+ID4gPiA+ICsgICAgICAgfQo+ID4g PiA+ICsKPiA+ID4gPiArICAgICAgIHRhc2tsZXRfa2lsbCgmYy0+dmMudGFzayk7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsgICAgICAgdmNoYW5fZnJlZV9jaGFuX3Jlc291cmNlcygmYy0+dmMpOwo+ID4g PiA+ICsKPiA+ID4gPiArICAgICAgIHBtX3J1bnRpbWVfcHV0X3N5bmMobXRrZC0+ZGRldi5kZXYp Owo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgZW51bSBkbWFfc3RhdHVzIG10 a191YXJ0X2FwZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfY29va2llX3QgY29va2ll LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgc3RydWN0 IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihjaGFuKTsKPiA+ID4gPiArICAg ICAgIGVudW0gZG1hX3N0YXR1cyByZXQ7Cj4gPiA+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmICghdHhzdGF0ZSkKPiA+ID4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIERNQV9FUlJPUjsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBy ZXQgPSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3RhdGUpOwo+ID4gPiA+ICsg ICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKPiA+ID4gPiArICAg ICAgIGlmIChyZXQgPT0gRE1BX0lOX1BST0dSRVNTKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAg IGMtPnJ4X3N0YXR1cyA9IG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChjLCBWRkZfUlBUKQo+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNVEtfVUFSVF9BUERNQV9SSU5HX1NJ WkU7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGRtYV9zZXRfcmVzaWR1ZSh0eHN0YXRlLCBjLT5y eF9zdGF0dXMpOwo+ID4gPiA+ICsgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gRE1BX0NPTVBMRVRF ICYmIGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pIHsKPiA+ID4gPiArICAgICAg ICAgICAgICAgZG1hX3NldF9yZXNpZHVlKHR4c3RhdGUsIGMtPnJ4X3N0YXR1cyk7Cj4gPiA+ID4g KyAgICAgICB9IGVsc2Ugewo+ID4gPiA+ICsgICAgICAgICAgICAgICBkbWFfc2V0X3Jlc2lkdWUo dHhzdGF0ZSwgMCk7Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4gKyAgICAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZjLT52Yy5sb2NrLCBmbGFncyk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAg ICAgcmV0dXJuIHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArLyoKPiA+ID4gPiAr ICogZG1hZW5naW5lX3ByZXBfc2xhdmVfc2luZ2xlIHdpbGwgY2FsbCB0aGUgZnVuY3Rpb24uIGFu ZCBzZ2xlbiBpcyAxLgo+ID4gPiA+ICsgKiA4MjUwIHVhcnQgdXNpbmcgb25lIHJpbmcgYnVmZmVy LCBhbmQgZGVhbCB3aXRoIG9uZSBzZy4KPiA+ID4gPiArICovCj4gPiA+ID4gK3N0YXRpYyBzdHJ1 Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKm10a191YXJ0X2FwZG1hX3ByZXBfc2xhdmVfc2cK PiA+ID4gPiArICAgICAgIChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlz dCAqc2dsLAo+ID4gPiA+ICsgICAgICAgdW5zaWduZWQgaW50IHNnbGVuLCAgICAgZW51bSBkbWFf dHJhbnNmZXJfZGlyZWN0aW9uIGRpciwKPiAKPiBUb28gbWFueSBzcGFjZXMgKG9yIGEgdGFiPykg YmV0d2VlbiBgc2dsZW4sYCBhbmQgYGVudW1gCj4gCgpvay4gaSB3aWxsIG1vZGlmeSBpdAoKPiA+ ID4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgdHhfZmxhZ3MsIHZvaWQgKmNvbnRleHQpCj4gPiA+ ID4gK3sKPiA+ID4gPiArICAgICAgIHN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a191YXJ0X2Fw ZG1hX2NoYW4oY2hhbik7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFfZGVz YyAqZDsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBpZiAoKGRpciAhPSBETUFfREVWX1RPX01F TSkgJiYKPiA+ID4gPiArICAgICAgICAgICAgICAgKGRpciAhPSBETUFfTUVNX1RPX0RFVikpIHsK PiA+ID4gPiArICAgICAgICAgICAgICAgZGV2X2VycihjaGFuLT5kZXZpY2UtPmRldiwgImJhZCBk aXJlY3Rpb25cbiIpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiA+ID4g PiArICAgICAgIH0KPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICAvKiBOb3cgYWxsb2NhdGUgYW5k IHNldHVwIHRoZSBkZXNjcmlwdG9yICovCj4gPiA+ID4gKyAgICAgICBkID0ga3phbGxvYyhzaXpl b2YoKmQpLCBHRlBfQVRPTUlDKTsKPiA+ID4gPiArICAgICAgIGlmICghZCkKPiA+ID4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgLyogc2ds ZW4gaXMgMSAqLwo+ID4gPiA+ICsgICAgICAgZC0+YXZhaWxfbGVuID0gc2dfZG1hX2xlbihzZ2wp Owo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHJldHVybiB2Y2hhbl90eF9wcmVwKCZjLT52Yywg JmQtPnZkLCB0eF9mbGFncyk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2 b2lkIG10a191YXJ0X2FwZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQo+ ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfdWFy dF9hcGRtYV9jaGFuKGNoYW4pOwo+ID4gPiA+ICsgICAgICAgc3RydWN0IHZpcnRfZG1hX2Rlc2Mg KnZkOwo+ID4gPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ID4gPiArCj4gPiA+ ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gPiA+ ICsgICAgICAgaWYgKGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pIHsKPiA+ID4g PiArICAgICAgICAgICAgICAgaWYgKHZjaGFuX2lzc3VlX3BlbmRpbmcoJmMtPnZjKSAmJiAhYy0+ ZGVzYykgewo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHZkID0gdmNoYW5fbmV4dF9k ZXNjKCZjLT52Yyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYy0+ZGVzYyA9IHRv X210a191YXJ0X2FwZG1hX2Rlc2MoJnZkLT50eCk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgbXRrX3VhcnRfYXBkbWFfc3RhcnRfcngoYyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAg IH0KPiA+ID4gPiArICAgICAgIH0gZWxzZSBpZiAoYy0+Y2ZnLmRpcmVjdGlvbiA9PSBETUFfTUVN X1RPX0RFVikgewo+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAodmNoYW5faXNzdWVfcGVuZGlu ZygmYy0+dmMpICYmICFjLT5kZXNjKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg dmQgPSB2Y2hhbl9uZXh0X2Rlc2MoJmMtPnZjKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICBjLT5kZXNjID0gdG9fbXRrX3VhcnRfYXBkbWFfZGVzYygmdmQtPnR4KTsKPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBtdGtfdWFydF9hcGRtYV9zdGFydF90eChjKTsKPiA+ID4g PiArICAgICAgICAgICAgICAgfQo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsgICAgICAgc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gPiA+ICt9Cj4gPiA+ ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IG10a191YXJ0X2FwZG1hX3NsYXZlX2NvbmZpZyhzdHJ1 Y3QgZG1hX2NoYW4gKmNoYW4sCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY2ZnKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAg ICBzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOwo+ID4g PiA+ICsgICAgICAgc3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkID0KPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX210a191YXJ0X2FwZG1hX2RldihjLT52Yy5j aGFuLmRldmljZSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgYy0+Y2ZnID0gKmNmZzsKPiA+ ID4gPiArCj4gPiA+ID4gKyAgICAgICBpZiAoY2ZnLT5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19N RU0pIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJ4X2xlbiA9IGNmZy0+ c3JjX2FkZHJfd2lkdGggKiAxMDI0Owo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgICAgICAgICAg bXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgY2ZnLT5zcmNfYWRkcik7Cj4g PiA+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0xF TiwgcnhfbGVuKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93 cml0ZShjLCBWRkZfVEhSRSwgVkZGX1JYX1RIUkUocnhfbGVuKSk7Cj4gPiA+ID4gKyAgICAgICAg ICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywKPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZGRl9JTlRfRU4sIFZGRl9SWF9JTlRfRU4wX0IKPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVkZGX1JYX0lOVF9FTjFfQik7Cj4gPiA+ ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX1JQVCwg MCk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywK PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZGRl9JTlRfRkxBRywgVkZG X1JYX0lOVF9GTEFHX0NMUl9CKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBk bWFfY2hhbl93cml0ZShjLCBWRkZfRU4sIFZGRl9FTl9CKTsKPiA+ID4gPiArICAgICAgIH0gZWxz ZSBpZiAoY2ZnLT5kaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpICAgIHsKPiA+ID4gPiArICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHR4X2xlbiA9IGNmZy0+ZHN0X2FkZHJfd2lkdGggKiAx MDI0Owo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hh bl93cml0ZShjLCBWRkZfQUREUiwgY2ZnLT5kc3RfYWRkcik7Cj4gPiA+ID4gKyAgICAgICAgICAg ICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0xFTiwgdHhfbGVuKTsKPiA+ID4g PiArICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfVEhSRSwg VkZGX1RYX1RIUkUodHhfbGVuKSk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2Fw ZG1hX2NoYW5fd3JpdGUoYywgVkZGX1dQVCwgMCk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIG10 a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZGRl9JTlRfRkxBRywgVkZGX1RYX0lOVF9GTEFHX0NMUl9CKTsKPiA+ID4gPiAr ICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfRU4sIFZGRl9F Tl9CKTsKPiA+ID4gPiArICAgICAgIH0KPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBpZiAobXRr ZC0+c3VwcG9ydF8zM2JpdHMpCj4gPiA+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1h X2NoYW5fd3JpdGUoYywgVkZGXzRHX1NVUFBPUlQsIFZGRl80R19TVVBQT1JUX0IpOwo+ID4gPiA+ ICsKPiA+ID4gPiArICAgICAgIGlmIChtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywgVkZGX0VO KSAhPSBWRkZfRU5fQikgewo+ID4gPiA+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGNoYW4tPmRl dmljZS0+ZGV2LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICJjb25maWcgZG1hIGRp clslZF0gZmFpbFxuIiwgY2ZnLT5kaXJlY3Rpb24pOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArICAgICAgIH0KPiA+ID4gPiArCj4gPiA+ID4gKyAgICAg ICByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBtdGtf dWFydF9hcGRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKPiA+ID4gPiAr ewo+ID4gPiA+ICsgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFf Y2hhbihjaGFuKTsKPiA+ID4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiA+ID4g KyAgICAgICB1MzIgc3RhdHVzOwo+ID4gPiA+ICsgICAgICAgaW50IHJldDsKPiA+ID4gPiArCj4g PiA+ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4g PiA+ICsKPiA+ID4gPiArICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0ZM VVNILCBWRkZfRkxVU0hfQ0xSX0IpOwo+ID4gPiA+ICsgICAgICAgLyogV2FpdCBmb3IgZmx1c2gg Ki8KPiA+ID4gPiArICAgICAgIHJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwKPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5iYXNlICsgVkZGX0ZMVVNILAo+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywKPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdHVzICYgVkZGX0ZMVVNIX0IpICE9 IFZGRl9GTFVTSF9CLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw LCAxMDApOwo+ID4gPiA+ICsgICAgICAgaWYgKHJldCkKPiA+ID4gPiArICAgICAgICAgICAgICAg ZGV2X2VycihjLT52Yy5jaGFuLmRldmljZS0+ZGV2LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICJkbWEgc3RvcDogcG9sbGluZyBGTFVTSCBmYWlsLCBERUJVRz0weCV4XG4iLAo+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChjLCBW RkZfREVCVUdfU1RBVFVTKSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgLypzZXQgc3RvcCBh cyAxIC0+IHdhaXQgdW50aWwgZW4gaXMgMCAtPiBzZXQgc3RvcCBhcyAwKi8KPiA+ID4gPiArICAg ICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX1NUT1AsIFZGRl9TVE9QX0IpOwo+ ID4gPiA+ICsgICAgICAgcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLAo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmJhc2UgKyBWRkZfRU4sCj4gPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzdGF0dXMgPT0gMCwgMTAs IDEwMCk7Cj4gPiA+ID4gKyAgICAgICBpZiAocmV0KQo+ID4gPiA+ICsgICAgICAgICAgICAgICBk ZXZfZXJyKGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgImRtYSBzdG9wOiBwb2xsaW5nIFZGRl9FTiBmYWlsLCBERUJVRz0weCV4XG4iLAo+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChjLCBW RkZfREVCVUdfU1RBVFVTKSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgbXRrX3VhcnRfYXBk bWFfY2hhbl93cml0ZShjLCBWRkZfU1RPUCwgVkZGX1NUT1BfQ0xSX0IpOwo+ID4gPiA+ICsgICAg ICAgbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfSU5UX0VOLCBWRkZfSU5UX0VOX0NM Ul9CKTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBzd2l0Y2ggKGMtPmNmZy5kaXJlY3Rpb24p IHsKPiA+ID4gPiArICAgICAgIGNhc2UgRE1BX0RFVl9UT19NRU06Cj4gPiA+Cj4gPiA+IERpdHRv LCBpZi9lbHNlPwo+ID4gPgo+ID4gZGl0dG8uCj4gPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9waXBlcm1haWwvbGludXgtbWVkaWF0ZWsvMjAxOC1EZWNlbWJlci8wMTYyOTIuaHRtbAo+IAo+ IFdlbGwsIEkgZGlzYWdyZWUsIGVzcGVjaWFsbHkgaW4gdGhpcyBjYXNlOiBXZSB0dXJuIDQgbGlu ZXMgb2YgY29kZSBpbnRvIDEwLi4uCj4gCgppIHNlZSwgaSB3aWxsIHVzaW5nIGlmL2Vsc2UKCj4g PiA+ID4gKyAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywKPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZGRl9JTlRfRkxBRywgVkZGX1JYX0lO VF9GTEFHX0NMUl9CKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiA+ID4gKyAg ICAgICBjYXNlIERNQV9NRU1fVE9fREVWOgo+ID4gPiA+ICsgICAgICAgICAgICAgICBtdGtfdWFy dF9hcGRtYV9jaGFuX3dyaXRlKGMsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWRkZfSU5UX0ZMQUcsIFZGRl9UWF9JTlRfRkxBR19DTFJfQik7Cj4gPiA+ID4gKyAgICAg ICAgICAgICAgIGJyZWFrOwo+ID4gPiA+ICsgICAgICAgZGVmYXVsdDoKPiA+ID4gPiArICAgICAg ICAgICAgICAgYnJlYWs7Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAg ICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9jaywgZmxhZ3MpOwo+ID4gPiA+ICsK PiA+ID4gPiArICAgICAgIHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtz dGF0aWMgaW50IG10a191YXJ0X2FwZG1hX2RldmljZV9wYXVzZShzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4pCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIC8qIGp1c3QgZm9yIGNoZWNrIGNhcHMgcGFz cyAqLwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ ID4gK3N0YXRpYyBpbnQgbXRrX3VhcnRfYXBkbWFfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgZG1hX2No YW4gKmNoYW4pCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIC8qIGp1c3QgZm9yIGNoZWNrIGNh cHMgcGFzcyAqLwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiAKPiBXaHkg ZG8geW91IG5lZWQgdGhlc2U/IFNlZW1zIHdyb25nIHRvIGFkdmVydGlzZSBkZXZpY2VfcGF1c2Uv cmVzdW1lCj4gKGFuZCB0aGUgY2FwcykgaWYgd2UgZG9uJ3QgYWN0dWFsbHkgc3VwcG9ydCB0aGF0 Pwo+IAoKaW4gc2VyaWFsIDgyNTBfZG1hLmMgZmlsZSwgd2hlbiByZXF1ZXN0IERNQSwgd2lsbCBj YWxsbAonZG1hX2dldF9zbGF2ZV9jYXBzJyB0byBnZXQgdGhlIGNhcHMuIGFuZCB0aGUgd2lsbCBj aGVjayBjYXBzLmNtZF9wYXVzZS4KdGhlIHBhdXNlIGlzIGRldmljZV9wYXVzZS4gIG91ciBkZXZp Y2UgY2FuJ3Qgc3VwcG9ydCB0aGUgZnVuY3Rpb25zLiBidXQKdG8gY2hlY2sgcGFzcywgbmVlZCBh ZGQgdGhlIGZha2UgZnVuY3Rpb24uIG9yIHlvdSBjYW4gZ2l2ZSBiZXR0ZXIKY29tbWVudHMuIHRo YW5rcy4KCj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgdm9pZCBtdGtfdWFydF9hcGRtYV9mcmVl KHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZCkKPiA+ID4gPiArewo+ID4gPiA+ICsgICAg ICAgd2hpbGUgKGxpc3RfZW1wdHkoJm10a2QtPmRkZXYuY2hhbm5lbHMpID09IDApIHsKPiA+ID4g PiArICAgICAgICAgICAgICAgc3RydWN0IG10a19jaGFuICpjID0gbGlzdF9maXJzdF9lbnRyeSgm bXRrZC0+ZGRldi5jaGFubmVscywKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgbXRrX2NoYW4sIHZjLmNoYW4uZGV2aWNlX25vZGUpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAg ICAgICAgICAgICAgbGlzdF9kZWwoJmMtPnZjLmNoYW4uZGV2aWNlX25vZGUpOwo+ID4gPiA+ICsg ICAgICAgICAgICAgICB0YXNrbGV0X2tpbGwoJmMtPnZjLnRhc2spOwo+ID4gPiA+ICsgICAgICAg fQo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBtdGtfdWFydF9hcGRtYV9tYXRjaFtdID0gewo+ID4gPiA+ICsgICAgICAgeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1NzctdWFydC1kbWEiLCB9LAo+ID4gPiA+ICsgICAgICAg eyAvKiBzZW50aW5lbCAqLyB9LAo+ID4gPiA+ICt9Owo+ID4gPiA+ICtNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBtdGtfdWFydF9hcGRtYV9tYXRjaCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMg aW50IG10a191YXJ0X2FwZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g PiA+ID4gK3sKPiA+ID4gPiArICAgICAgIHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZDsK PiA+ID4gPiArICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ID4gPiA+ICsgICAgICAgc3Ry dWN0IG10a19jaGFuICpjOwo+ID4gPiA+ICsgICAgICAgdW5zaWduZWQgaW50IGk7Cj4gPiA+ID4g KyAgICAgICBpbnQgcmM7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgbXRrZCA9IGRldm1fa3ph bGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm10a2QpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiArICAg ICAgIGlmICghbXRrZCkKPiA+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4g PiA+ID4gKwo+ID4gPiA+ICsgICAgICAgbXRrZC0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5k ZXYsIE5VTEwpOwo+ID4gPiA+ICsgICAgICAgaWYgKElTX0VSUihtdGtkLT5jbGspKSB7Cj4gPiA+ ID4gKyAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIk5vIGNsb2NrIHNwZWNpZmll ZFxuIik7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJjID0gUFRSX0VSUihtdGtkLT5jbGspOwo+ ID4gPiA+ICsgICAgICAgICAgICAgICBnb3RvIGVycl9ub19kbWE7Cj4gPiA+ID4gKyAgICAgICB9 Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwZGV2 LT5kZXYub2Zfbm9kZSwgImRtYS0zM2JpdHMiKSkgewo+ID4gPiA+ICsgICAgICAgICAgICAgICBk ZXZfaW5mbygmcGRldi0+ZGV2LCAiU3VwcG9ydCBkbWEgMzNiaXRzXG4iKTsKPiA+ID4KPiA+ID4g RHJvcCB0aGlzLCBhIGJpdCB2ZXJib3NlLgo+ID4gPgo+ID4gPiA+ICsgICAgICAgICAgICAgICBt dGtkLT5zdXBwb3J0XzMzYml0cyA9IHRydWU7Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4gKwo+ ID4gPiA+ICsgICAgICAgcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYs Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfQklUX01BU0soMzIg fCBtdGtkLT5zdXBwb3J0XzMzYml0cykpOwo+ID4gPiA+ICsgICAgICAgaWYgKHJjKQo+ID4gPiA+ ICsgICAgICAgICAgICAgICBnb3RvIGVycl9ub19kbWE7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAg ICAgZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtdGtkLT5kZGV2LmNhcF9tYXNrKTsKPiA+ID4gPiAr ICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0KPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10a191YXJ0X2FwZG1hX2FsbG9jX2NoYW5f cmVzb3VyY2VzOwo+ID4gPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfZnJlZV9jaGFuX3Jl c291cmNlcyA9Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGtfdWFy dF9hcGRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOwo+ID4gPiA+ICsgICAgICAgbXRrZC0+ZGRldi5k ZXZpY2VfdHhfc3RhdHVzID0gbXRrX3VhcnRfYXBkbWFfdHhfc3RhdHVzOwo+ID4gPiA+ICsgICAg ICAgbXRrZC0+ZGRldi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IG10a191YXJ0X2FwZG1hX2lzc3Vl X3BlbmRpbmc7Cj4gPiA+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRldmljZV9wcmVwX3NsYXZlX3Nn ID0gbXRrX3VhcnRfYXBkbWFfcHJlcF9zbGF2ZV9zZzsKPiA+ID4gPiArICAgICAgIG10a2QtPmRk ZXYuZGV2aWNlX2NvbmZpZyA9IG10a191YXJ0X2FwZG1hX3NsYXZlX2NvbmZpZzsKPiA+ID4gPiAr ICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX3BhdXNlID0gbXRrX3VhcnRfYXBkbWFfZGV2aWNlX3Bh dXNlOwo+ID4gPiA+ICsgICAgICAgbXRrZC0+ZGRldi5kZXZpY2VfcmVzdW1lID0gbXRrX3VhcnRf YXBkbWFfZGV2aWNlX3Jlc3VtZTsKPiA+ID4gPiArICAgICAgIG10a2QtPmRkZXYuZGV2aWNlX3Rl cm1pbmF0ZV9hbGwgPSBtdGtfdWFydF9hcGRtYV90ZXJtaW5hdGVfYWxsOwo+ID4gPiA+ICsgICAg ICAgbXRrZC0+ZGRldi5zcmNfYWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFf QllURSk7Cj4gPiA+ID4gKyAgICAgICBtdGtkLT5kZGV2LmRzdF9hZGRyX3dpZHRocyA9IEJJVChE TUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKTsKPiA+ID4gPiArICAgICAgIG10a2QtPmRkZXYuZGly ZWN0aW9ucyA9IEJJVChETUFfREVWX1RPX01FTSkgfCBCSVQoRE1BX01FTV9UT19ERVYpOwo+ID4g PiA+ICsgICAgICAgbXRrZC0+ZGRldi5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1BX1JFU0lEVUVf R1JBTlVMQVJJVFlfU0VHTUVOVDsKPiA+ID4gPiArICAgICAgIG10a2QtPmRkZXYuZGV2ID0gJnBk ZXYtPmRldjsKPiA+ID4gPiArICAgICAgIElOSVRfTElTVF9IRUFEKCZtdGtkLT5kZGV2LmNoYW5u ZWxzKTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTVRLX1VBUlRf QVBETUFfQ0hBTk5FTFM7IGkrKykgewo+ID4gPiA+ICsgICAgICAgICAgICAgICBjID0gZGV2bV9r emFsbG9jKG10a2QtPmRkZXYuZGV2LCBzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiAr ICAgICAgICAgICAgICAgaWYgKCFjKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg cmMgPSAtRU5PREVWOwo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX25v X2RtYTsKPiA+ID4gPiArICAgICAgICAgICAgICAgfQo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAg ICAgICAgICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVN LCBpKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKCFyZXMpIHsKPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICByYyA9IC1FTk9ERVY7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgZ290byBlcnJfbm9fZG1hOwo+ID4gPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiA+ID4g Kwo+ID4gPiA+ICsgICAgICAgICAgICAgICBjLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl KCZwZGV2LT5kZXYsIHJlcyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChJU19FUlIoYy0+ YmFzZSkpIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByYyA9IFBUUl9FUlIoYy0+ YmFzZSk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfbm9fZG1hOwo+ ID4gPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGMtPnJlcXVl c3RlZCA9IGZhbHNlOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBjLT52Yy5kZXNjX2ZyZWUgPSBt dGtfdWFydF9hcGRtYV9kZXNjX2ZyZWU7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHZjaGFuX2lu aXQoJmMtPnZjLCAmbXRrZC0+ZGRldik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgICAgICAg ICBtdGtkLT5kbWFfaXJxW2ldID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKPiA+ID4gPiAr ICAgICAgICAgICAgICAgaWYgKChpbnQpbXRrZC0+ZG1hX2lycVtpXSA8IDApIHsKPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0 IElSUVslZF1cbiIsIGkpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVJ TlZBTDsKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9ub19kbWE7Cj4g PiA+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ID4gPiArICAgICAgIH0KPiA+ID4gPiArCj4gPiA+ ID4gKyAgICAgICBwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKPiA+ID4gPiArICAgICAg IHBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKPiA+ID4gPiArCj4gPiA+ID4gKyAg ICAgICByYyA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm10a2QtPmRkZXYpOwo+ID4gPiA+ ICsgICAgICAgaWYgKHJjKQo+ID4gPiA+ICsgICAgICAgICAgICAgICBnb3RvIHJwbV9kaXNhYmxl Owo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG10 a2QpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmIChwZGV2LT5kZXYub2Zfbm9kZSkgewo+ ID4gPiA+ICsgICAgICAgICAgICAgICAvKiBEZXZpY2UtdHJlZSBETUEgY29udHJvbGxlciByZWdp c3RyYXRpb24gKi8KPiA+ID4gPiArICAgICAgICAgICAgICAgcmMgPSBvZl9kbWFfY29udHJvbGxl cl9yZWdpc3RlcihwZGV2LT5kZXYub2Zfbm9kZSwKPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZl9kbWFfeGxhdGVfYnlfY2hhbl9pZCwKPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGtk KTsKPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJjKQo+ID4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZG1hX3JlbW92ZTsKPiA+ID4gPiArICAgICAgIH0KPiA+ID4gPiArCj4g PiA+ID4gKyAgICAgICByZXR1cm4gcmM7Cj4gPiA+ID4gKwo+ID4gPiA+ICtkbWFfcmVtb3ZlOgo+ ID4gPiA+ICsgICAgICAgZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZtdGtkLT5kZGV2KTsK PiA+ID4gPiArcnBtX2Rpc2FibGU6Cj4gPiA+ID4gKyAgICAgICBwbV9ydW50aW1lX2Rpc2FibGUo JnBkZXYtPmRldik7Cj4gPiA+ID4gK2Vycl9ub19kbWE6Cj4gPiA+ID4gKyAgICAgICBtdGtfdWFy dF9hcGRtYV9mcmVlKG10a2QpOwo+IAo+IEl0J3Mgbm90IHZlcnkgY29ycmVjdCB0byBjYWxsIHRo aXMgYmVmb3JlCj4gSU5JVF9MSVNUX0hFQUQoJm10a2QtPmRkZXYuY2hhbm5lbHMpOwo+IAo+IEkn ZCBqdXN0IGNhbGwgYHJldHVybiByYztgIGRpcmVjdGx5IGZvciBhbGwgaW5zdGFuY2VzIGJlZm9y ZSB0aGF0IGxpbmUuCj4gCgpvaywgaSB3aWxsIG1vZGlmeSBpdC4KCj4gPiA+ID4gKyAgICAgICBy ZXR1cm4gcmM7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgbXRrX3Vh cnRfYXBkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ID4gK3sK PiA+ID4gPiArICAgICAgIHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZCA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmIChwZGV2LT5k ZXYub2Zfbm9kZSkKPiA+ID4gPiArICAgICAgICAgICAgICAgb2ZfZG1hX2NvbnRyb2xsZXJfZnJl ZShwZGV2LT5kZXYub2Zfbm9kZSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgcG1fcnVudGlt ZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwo+ID4gPiA+ICsgICAgICAgcG1fcnVudGltZV9wdXRfbm9p ZGxlKCZwZGV2LT5kZXYpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGRtYV9hc3luY19kZXZp Y2VfdW5yZWdpc3RlcigmbXRrZC0+ZGRldik7Cj4gPiA+ID4gKyAgICAgICBtdGtfdWFydF9hcGRt YV9mcmVlKG10a2QpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHJldHVybiAwOwo+ID4gPiA+ ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCj4gPiA+ID4gK3N0 YXRpYyBpbnQgbXRrX3VhcnRfYXBkbWFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiA+ ID4gK3sKPiA+ID4gPiArICAgICAgIHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmICghcG1fcnVu dGltZV9zdXNwZW5kZWQoZGV2KSkKPiA+ID4gPiArICAgICAgICAgICAgICAgY2xrX2Rpc2FibGVf dW5wcmVwYXJlKG10a2QtPmNsayk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7 Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgbXRrX3VhcnRfYXBkbWFf cmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ID4gPiArewo+ID4gPiA+ICsgICAgICAgaW50 IHJldDsKPiA+ID4gPiArICAgICAgIHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmICghcG1fcnVu dGltZV9zdXNwZW5kZWQoZGV2KSkgewo+ID4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSBjbGtf cHJlcGFyZV9lbmFibGUobXRrZC0+Y2xrKTsKPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJl dCkKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gPiA+ICsg ICAgICAgfQo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHJldHVybiAwOwo+ID4gPiA+ICt9Cj4g PiA+ID4gKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KPiA+ID4gPiArCj4gPiA+ID4gKyNp ZmRlZiBDT05GSUdfUE0KPiA+ID4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9ydW50aW1l X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBz dHJ1Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKm10a2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ ID4gPiArCj4gPiA+ID4gKyAgICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUobXRrZC0+Y2xrKTsK PiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ICsK PiA+ID4gPiArc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCj4gPiA+ID4gK3sKPiA+ID4gPiArICAgICAgIGludCByZXQ7Cj4gPiA+ID4g KyAgICAgICBzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKm10a2QgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo bXRrZC0+Y2xrKTsKPiA+ID4gPiArICAgICAgIGlmIChyZXQpCj4gPiA+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ ID4gK30KPiA+ID4gPiArI2VuZGlmIC8qIENPTkZJR19QTSAqLwo+ID4gPiA+ICsKPiA+ID4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG10a191YXJ0X2FwZG1hX3BtX29wcyA9IHsK PiA+ID4gPiArICAgICAgIFNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKG10a191YXJ0X2FwZG1hX3N1 c3BlbmQsIG10a191YXJ0X2FwZG1hX3Jlc3VtZSkKPiA+ID4gPiArICAgICAgIFNFVF9SVU5USU1F X1BNX09QUyhtdGtfdWFydF9hcGRtYV9ydW50aW1lX3N1c3BlbmQsCj4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgbXRrX3VhcnRfYXBkbWFfcnVudGltZV9yZXN1bWUsIE5VTEwpCj4g PiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBtdGtfdWFydF9hcGRtYV9kcml2ZXIgPSB7Cj4gPiA+ID4gKyAgICAgICAucHJvYmUgID0gbXRr X3VhcnRfYXBkbWFfcHJvYmUsCj4gPiA+ID4gKyAgICAgICAucmVtb3ZlID0gbXRrX3VhcnRfYXBk bWFfcmVtb3ZlLAo+ID4gPiA+ICsgICAgICAgLmRyaXZlciA9IHsKPiA+ID4gPiArICAgICAgICAg ICAgICAgLm5hbWUgICAgICAgICAgID0gS0JVSUxEX01PRE5BTUUsCj4gPiA+ID4gKyAgICAgICAg ICAgICAgIC5wbSAgICAgICAgICAgICA9ICZtdGtfdWFydF9hcGRtYV9wbV9vcHMsCj4gPiA+ID4g KyAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihtdGtfdWFydF9h cGRtYV9tYXRjaCksCj4gPiA+ID4gKyAgICAgICB9LAo+ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ ID4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfdWFydF9hcGRtYV9kcml2ZXIpOwo+ID4g PiA+ICsKPiA+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRlayBVQVJUIEFQRE1BIENv bnRyb2xsZXIgRHJpdmVyIik7Cj4gPiA+ID4gK01PRFVMRV9BVVRIT1IoIkxvbmcgQ2hlbmcgPGxv bmcuY2hlbmdAbWVkaWF0ZWsuY29tPiIpOwo+ID4gPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7Cj4gPiA+ID4gKwo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tZWRpYXRlay9L Y29uZmlnIGIvZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZwo+ID4gPiA+IGluZGV4IDI3YmFj MGIuLjFhNTIzYzg3IDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL0tj b25maWcKPiA+ID4gPiArKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnCj4gPiA+ID4g QEAgLTEsNCArMSwxNSBAQAo+ID4gPiA+Cj4gPiA+ID4gK2NvbmZpZyBETUFfTVRLX1VBUlQKPiA+ ID4gPiArICAgICAgIHRyaXN0YXRlICJNZWRpYVRlayBTb0NzIEFQRE1BIHN1cHBvcnQgZm9yIFVB UlQiCj4gPiA+ID4gKyAgICAgICBkZXBlbmRzIG9uIE9GICYmIFNFUklBTF84MjUwX01UNjU3Nwo+ ID4gPiA+ICsgICAgICAgc2VsZWN0IERNQV9FTkdJTkUKPiA+ID4gPiArICAgICAgIHNlbGVjdCBE TUFfVklSVFVBTF9DSEFOTkVMUwo+ID4gPiA+ICsgICAgICAgaGVscAo+ID4gPiA+ICsgICAgICAg ICBTdXBwb3J0IGZvciB0aGUgVUFSVCBETUEgZW5naW5lIGZvdW5kIG9uIE1lZGlhVGVrIE1USyBT b0NzLgo+ID4gPiA+ICsgICAgICAgICB3aGVuIFNFUklBTF84MjUwX01UNjU3NyBpcyBlbmFibGVk LCBhbmQgaWYgeW91IHdhbnQgdG8gdXNlIERNQSwKPiA+ID4gPiArICAgICAgICAgeW91IGNhbiBl bmFibGUgdGhlIGNvbmZpZy4gdGhlIERNQSBlbmdpbmUgY2FuIG9ubHkgYmUgdXNlZAo+ID4gPiA+ ICsgICAgICAgICB3aXRoIE1lZGlhVGVrIFNvQ3MuCj4gPiA+ID4gKwo+ID4gPiA+ICBjb25maWcg TVRLX0hTRE1BCj4gPiA+ID4gICAgICAgICB0cmlzdGF0ZSAiTWVkaWFUZWsgSGlnaC1TcGVlZCBE TUEgY29udHJvbGxlciBzdXBwb3J0Igo+ID4gPiA+ICAgICAgICAgZGVwZW5kcyBvbiBBUkNIX01F RElBVEVLIHx8IENPTVBJTEVfVEVTVAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9t ZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlCj4gPiA+ID4g aW5kZXggNmU3NzhmOC4uMmYyZWZkOSAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2RtYS9t ZWRpYXRlay9NYWtlZmlsZQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2Vm aWxlCj4gPiA+ID4gQEAgLTEgKzEsMiBAQAo+ID4gPiA+ICtvYmotJChDT05GSUdfRE1BX01US19V QVJUKSArPSA4MjUwX210a19kbWEubwo+ID4gPiA+ICBvYmotJChDT05GSUdfTVRLX0hTRE1BKSAr PSBtdGstaHNkbWEubwo+ID4gPiA+IC0tCj4gPiA+ID4gMS43LjkuNQo+ID4gPiA+Cj4gPgo+ID4K