From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [RFC PATCHv2 4/9] drm/tidss: add new driver for TI Keystone platforms Date: Mon, 30 Jul 2018 17:12:15 +0300 Message-ID: <5639385.hcqW4L2iP8@avalon> References: <20180618132242.8673-1-tomi.valkeinen@ti.com> <20180618132242.8673-5-tomi.valkeinen@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180618132242.8673-5-tomi.valkeinen@ti.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tomi Valkeinen Cc: Jacopo Mondi , Jyri Sarha , Peter Ujfalusi , dri-devel@lists.freedesktop.org, linux-omap@vger.kernel.org List-Id: linux-omap@vger.kernel.org SGkgVG9taSwKCihDQydpbmcgSmFjb3BvIE1vbmRpIGZvciBhIGNvbW1lbnQgYWJvdXQgYnVzX2Zv cm1hdHMgaW4gYnJpZGdlIGRyaXZlcnMpCgpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KCk9uIE1v bmRheSwgMTggSnVuZSAyMDE4IDE2OjIyOjM3IEVFU1QgVG9taSBWYWxrZWluZW4gd3JvdGU6Cj4g VGhpcyBwYXRjaCBhZGRzIGEgbmV3IERSTSBkcml2ZXIgZm9yIFRleGFzIEluc3RydW1lbnRzIERT UzYgSVAgdXNlZCBvbgo+IFRleGFzIEluc3RydW1lbnRzIEtleXN0b25lIEsyRyBTb0MuIFRoZSBE U1M2IElQIGlzIGEgbWFqb3IgY2hhbmdlIHRvIHRoZQo+IG9sZGVyIERTUyBJUCB2ZXJzaW9ucywg d2hpY2ggYXJlIHN1cHBvcnRlZCBieSB0aGUgb21hcGRybSBkcml2ZXIsIGFuZAo+IHdoaWxlIG9u IGhpZ2hlciBsZXZlbCB0aGUgRFNTNiByZXNlbWJsZXMgdGhlIG9sZGVyIERTUyB2ZXJzaW9ucywg dGhlCj4gcmVnaXN0ZXJzIGFuZCB0aGUgaW50ZXJuYWwgcGlwZWxpbmVzIGRpZmZlciBhIGxvdC4K PiAKPiBEU1M2IElQIG9uIEsyRyBpcyBhICJ1bHRyYS1saWdodCIgdmVyc2lvbiwgYW5kIGhhcyBv bmx5IGEgc2luZ2xlIHBsYW5lCj4gYW5kIGEgc2luZ2xlIG91dHB1dC4gVGhlIGRyaXZlciB3aWxs IGFsc28gc3VwcG9ydCBmdXR1cmUgRFNTIHZlcnNpb25zLAo+IHdoaWNoIHN1cHBvcnQgbXVsdGlw bGUgcGxhbmVzIGFuZCBvdXRwdXRzLCBzbyB0aGUgZHJpdmVyIGFscmVhZHkgaGFzCj4gc3VwcG9y dCBmb3IgdGhvc2UuCj4gCj4gU2lnbmVkLW9mZi1ieTogVG9taSBWYWxrZWluZW4gPHRvbWkudmFs a2VpbmVuQHRpLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAg ICAgICB8ICAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgIHwg ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS90aWRzcy9LY29uZmlnICAgICAgICAgfCAgIDEwICsK PiAgZHJpdmVycy9ncHUvZHJtL3RpZHNzL01ha2VmaWxlICAgICAgICB8ICAgMTEgKwo+ICBkcml2 ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfY3J0Yy5jICAgIHwgIDM5MCArKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS90aWRzcy90aWRzc19jcnRjLmggICAgfCAgIDQ5ICsKPiAgZHJpdmVycy9ncHUv ZHJtL3RpZHNzL3RpZHNzX2Rpc3BjLmggICB8ICAxNDUgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS90 aWRzcy90aWRzc19kaXNwYzYuYyAgfCAxNDUwICsrKysrKysrKysrKysrKysrKysrKysrKysKPiAg ZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3BjNi5oICB8ICAxMDkgKysKPiAgZHJpdmVy cy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rydi5jICAgICB8ICAzMzMgKysrKysrCj4gIGRyaXZlcnMv Z3B1L2RybS90aWRzcy90aWRzc19kcnYuaCAgICAgfCAgIDQxICsKPiAgZHJpdmVycy9ncHUvZHJt L3RpZHNzL3RpZHNzX2VuY29kZXIuYyB8ICAxMDEgKysKPiAgZHJpdmVycy9ncHUvZHJtL3RpZHNz L3RpZHNzX2VuY29kZXIuaCB8ICAgMjIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf aXJxLmMgICAgIHwgIDE5MyArKysrCj4gIGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEu aCAgICAgfCAgIDI1ICsKPiAgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2ttcy5jICAgICB8 ICAgODUgKysKPiAgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2ttcy5oICAgICB8ICAgMTQg Kwo+ICBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfcGxhbmUuYyAgIHwgIDE4NiArKysrCj4g IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5oICAgfCAgIDI1ICsKPiAgMTkgZmls ZXMgY2hhbmdlZCwgMzE5MiBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vdGlkc3MvS2NvbmZpZwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3RpZHNzL01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vdGlkc3MvdGlkc3NfY3J0Yy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vdGlkc3MvdGlkc3NfY3J0Yy5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vdGlkc3MvdGlkc3NfZGlzcGMuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3RpZHNzL3RpZHNzX2Rpc3BjNi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vdGlkc3MvdGlkc3NfZGlzcGM2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS90aWRzcy90aWRzc19kcnYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3RpZHNzL3RpZHNzX2Rydi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vdGlkc3MvdGlkc3NfZW5jb2Rlci5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3NfZW5jb2Rlci5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3RpZHNzL3RpZHNzX2ttcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3NfcGxhbmUuaAoKW3NuaXBdCgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdGlkc3MvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy9LY29uZmln Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjgxODY2NmRiMDhh NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvS2NvbmZpZwo+ IEBAIC0wLDAgKzEsMTAgQEAKPiArY29uZmlnIERSTV9USURTUwoKSXNuJ3QgdGhlIG5hbWUgVElE U1MgYSBiaXQgdG9vIGdlbmVyaWMgPyBQcmV2aW91cyBwbGF0Zm9ybXMgYWxzbyBoYWQgYSBEU1Mu Cgo+ICsJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBUSSBLZXlzdG9uZSIKPiArCWRlcGVuZHMg b24gRFJNICYmIE9GCj4gKwlkZXBlbmRzIG9uIEFSTSB8fCBBUk02NCB8fCBDT01QSUxFX1RFU1QK PiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgo+ ICsJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgo+ICsJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJT Cj4gKwloZWxwCj4gKwkgIFRJIEtleXN0b25lCgpUaGlzIGlzIGEgYml0IHNob3J0IDopCgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vdGlkc3MvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uZWU2YjI0ZGIwNDQxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90aWRzcy9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMTEgQEAKPiArIyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMAo+ICsKPiArdGlkc3MteSA6PSB0aWRzc19kcnYubyBcCj4gKwl0aWRz c19rbXMubyBcCj4gKwl0aWRzc19jcnRjLm8gXAo+ICsJdGlkc3NfcGxhbmUubyBcCj4gKwl0aWRz c19lbmNvZGVyLm8gXAo+ICsJdGlkc3NfZGlzcGM2Lm8gXAo+ICsJdGlkc3NfaXJxLm8KCkhvdyBh Ym91dCBrZWVwaW5nIHRoZXNlIGFscGhhYmV0aWNhbGx5IHNvcnRlZD8KCj4gK29iai0kKENPTkZJ R19EUk1fVElEU1MpICs9IHRpZHNzLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rp ZHNzL3RpZHNzX2NydGMuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2NydGMuYyBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjJjMTFmMWUzMzE4Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19jcnRjLmMK PiBAQCAtMCwwICsxLDM5MCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jw b3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCj4gKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVy Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8dWFwaS9saW51eC9tZWRpYS1idXMt Zm9ybWF0Lmg+CgpDYW4ndCB5b3UgaW5jbHVkZSA8bGludXgvbWVkaWEtYnVzLWZvcm1hdC5oPiA/ IEkgdGhpbmsgdGhlIHVhcGkvIHByZWZpeCBpc24ndCAKbWVhbnQgdG8gYmUgdXNlZCB3aXRoaW4g dGhlIGtlcm5lbC4KCj4gKwo+ICsjaW5jbHVkZSAidGlkc3NfY3J0Yy5oIgo+ICsjaW5jbHVkZSAi dGlkc3NfZGlzcGMuaCIKPiArI2luY2x1ZGUgInRpZHNzX2Rydi5oIgo+ICsjaW5jbHVkZSAidGlk c3NfaXJxLmgiCj4gKwo+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICogUGFnZSBGbGlwCj4gKyAq Lwo+ICsKPiArc3RhdGljIHZvaWQgdGlkc3NfY3J0Y19maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCB0 aWRzc19jcnRjICp0Y3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSB0Y3J0 Yy0+Y3J0Yy5kZXY7Cj4gKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9w cml2YXRlOwo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7Cj4gKwl1 bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJYm9vbCBidXN5Owo+ICsKPiArCS8qCj4gKwkgKiBOZXcg c2V0dGluZ3MgYXJlIHRha2VuIGludG8gdXNlIGF0IFZGUCwgYW5kIEdPIGJpdCBpcyBjbGVhcmVk IGF0Cj4gKwkgKiB0aGUgc2FtZSB0aW1lLiBUaGlzIGhhcHBlbnMgYmVmb3JlIHRoZSB2ZXJ0aWNh bCBibGFuayBpbnRlcnJ1cHQuCj4gKwkgKiBTbyB0aGVyZSBpcyBhIHNtYWxsIGNoYW5nZSB0aGF0 IHRoZSBkcml2ZXIgc2V0cyBHTyBiaXQgYWZ0ZXIgVkZQLCBidXQKPiArCSAqIGJlZm9yZSB2Ymxh bmssIGFuZCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0IGNhc2UgaGVyZS4KPiArCSAqLwo+ICsJ YnVzeSA9IHRpZHNzLT5kaXNwY19vcHMtPnZwX2dvX2J1c3kodGlkc3MtPmRpc3BjLCB0Y3J0Yy0+ aHdfdmlkZW9wb3J0KTsKPiArCWlmIChidXN5KQo+ICsJCXJldHVybjsKPiArCj4gKwlzcGluX2xv Y2tfaXJxc2F2ZSgmZGRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICsKPiArCWV2ZW50ID0gdGNy dGMtPmV2ZW50Owo+ICsJdGNydGMtPmV2ZW50ID0gTlVMTDsKPiArCj4gKwlpZiAoIWV2ZW50KSB7 Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1 bmNfXyk7CgpEZWJ1Z2dpbmcgbGVmdG92ZXIgPwoKPiArCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2 ZW50KCZ0Y3J0Yy0+Y3J0YywgZXZlbnQpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCj4gKwlkcm1fY3J0Y192YmxhbmtfcHV0KCZ0 Y3J0Yy0+Y3J0Yyk7Cj4gK30KPiArCj4gK3ZvaWQgdGlkc3NfY3J0Y192YmxhbmtfaXJxKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9f dGlkc3NfY3J0YyhjcnRjKTsKPiArCj4gKwlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKGNydGMpOwo+ ICsKPiArCXRpZHNzX2NydGNfZmluaXNoX3BhZ2VfZmxpcCh0Y3J0Yyk7CgpTaG91bGRuJ3QgcGFn ZSBmbGlwIGJlIGNvbXBsZXRlZCBhdCBmcmFtZSBkb25lIHRpbWUgPyBXaGF0J3MgdGhlIHJlbGF0 aW9uc2hpcCAKYmV0d2VlbiB0aGUgdmJsYW5rIGFuZCBmcmFtZSBkb25lIElSUXMgPwoKPiArfQo+ ICsKPiArdm9pZCB0aWRzc19jcnRjX2ZyYW1lZG9uZV9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ICt7Cj4gKwlzdHJ1Y3QgdGlkc3NfY3J0YyAqdGNydGMgPSB0b190aWRzc19jcnRjKGNydGMp Owo+ICsKPiArCWNvbXBsZXRlKCZ0Y3J0Yy0+ZnJhbWVkb25lX2NvbXBsZXRpb24pOwo+ICt9Cj4g Kwo+ICt2b2lkIHRpZHNzX2NydGNfZXJyb3JfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTY0 IGlycXN0YXR1cykKPiArewo+ICsJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3Nf Y3J0YyhjcnRjKTsKPiArCj4gKwlkZXZfZXJyX3JhdGVsaW1pdGVkKGNydGMtPmRldi0+ZGV2LCAi Q1JUQyV1IFNZTkMgTE9TVDogKGlycSAlbGx4KVxuIiwKPiArCQkJICAgIHRjcnRjLT5od192aWRl b3BvcnQsIGlycXN0YXR1cyk7Cj4gK30KPiArCj4gKwoKRXh0cmEgYmxhbmsgbGluZS4KCj4gKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+ICsgKiBDUlRDIEZ1bmN0aW9ucwo+ICsgKi8KPiArCj4gK3N0YXRp YyBpbnQgdGlkc3NfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJ CQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IHRpZHNz X2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0g JnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ICsJc3RydWN0IHRpZHNzX2NydGNfc3RhdGUgKnRjcnRj X3N0YXRlID0gdG9fdGlkc3NfY3J0Y19zdGF0ZShzdGF0ZSk7Cj4gKwlpbnQgcjsKPiArCj4gKwlk ZXZfZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJaWYgKCFzdGF0ZS0+ ZW5hYmxlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXIgPSB0aWRzcy0+ZGlzcGNfb3BzLT52cF9j aGVja19jb25maWcodGlkc3MtPmRpc3BjLCB0Y3J0Yy0+aHdfdmlkZW9wb3J0LAo+ICsJCQkJCSAg ICAgIG1vZGUsCj4gKwkJCQkJICAgICAgdGNydGNfc3RhdGUtPmJ1c19mb3JtYXQsCj4gKwkJCQkJ ICAgICAgdGNydGNfc3RhdGUtPmJ1c19mbGFncyk7Cj4gKwo+ICsJaWYgKHIgPT0gMCkKPiArCQly ZXR1cm4gMDsKPiArCj4gKwlkZXZfZXJyKGRkZXYtPmRldiwgIiVzOiBmYWlsZWQgKCV1eCV1IHBj bGsgJXUga0h6KVxuIiwKPiArCQlfX2Z1bmNfXywgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw bGF5LCBtb2RlLT5jbG9jayk7CgpJIHRoaW5rIHdlIHNob3VsZG4ndCBnaXZlIHVzZXJzcGFjZSB5 ZXQgYW5vdGhlciB3YXkgdG8gc3BhbSB0aGUga2VybmVsIGxvZy4gClRoaXMgc2hvdWxkIGJlIGEg ZGVidWdnaW5nIG1lc3NhZ2UgYXQgbW9zdCwgYnV0IEkgYmVsaWV2ZSB3ZSBzaG91bGQganVzdCAK cmVtb3ZlIGl0LCBhcyBpdCBkb2Vzbid0IGdpdmUgbXVjaCBpbmZvcm1hdGlvbi4gSWYgeW91IHdh bnQgdG8gYWRkIGRlYnVnZ2luZyAKbWVzc2FnZXMgdG8gaGVscCB1c2Vyc3BhY2UgZmluZCBvdXQg d2hhdCBnb2VzIHdyb25nLCBsZXQncyBwdXNoIHRoZW0gZG93biB0byAKdGhlIGRpc3BjIG9wcyB3 aGVyZSB5b3UgY291bGQgcHJpbnQgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4KCj4gKwlyZXR1cm4g cjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlkc3NfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0Yy0+ZGV2Owo+ ICsKPiArCWRldl9kYmcoZGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKCklzIHRoaXMgdXNl ZnVsPyBTYW1lIGNvbW1lbnQgZm9yIHRoZSBvdGhlciBkZWJ1Z2dpbmcgbWVzc2FnZXMgYmVsb3cg dGhhdCBzZXJ2ZSAKYXMgZnVuY3Rpb24gdHJhY2Vycy4KCklmIHRoZSBmdW5jdGlvbiBiZWNvbWVz IGVtcHR5IHlvdSBjb3VsZCBqdXN0IGRyb3AgaXQuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0 aWRzc19jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAg c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKPiArewo+ICsJc3RydWN0IHRp ZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBk ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVzLCBjcnRjIGVu YWJsZWQgJWQsIGV2ZW50ICVwXG4iLAo+ICsJCV9fZnVuY19fLCB0Y3J0Yy0+ZW5hYmxlZCwgY3J0 Yy0+c3RhdGUtPmV2ZW50KTsKPiArCj4gKwkvKiBPbmx5IGZsdXNoIHRoZSBDUlRDIGlmIGl0IGlz IGN1cnJlbnRseSBlbmFibGVkLiAqLwo+ICsJaWYgKCF0Y3J0Yy0+ZW5hYmxlZCkKCkluIGF0b21p YyBkcml2ZXJzIHN0YXRlIHNob3VsZCBiZSBzdG9yZWQgaW4gc3RhdGUgc3RydWN0dXJlcy4gWW91 IGNvdWxkIGNoZWNrIApvbGRfY3J0Y19zdGF0ZSBmb3IgdGhpcyBhbmQgcmVtb3ZlIHRoZSBlbmFi bGVkIGZpZWxkIGluIHN0cnVjdCB0aWRzc19jcnRjLgoKPiArCQlyZXR1cm47Cj4gKwo+ICsJV0FS Tl9PTih0aWRzcy0+ZGlzcGNfb3BzLT52cF9nb19idXN5KHRpZHNzLT5kaXNwYywKPiArCQkJCQkg ICAgIHRjcnRjLT5od192aWRlb3BvcnQpKTsKCldoYXQgd2lsbCB0aGVuIGhhcHBlbiA/Cgo+ICsJ Ly8gSSB0aGluayB3ZSBhbHdheXMgbmVlZCB0aGUgZXZlbnQgdG8gc2lnbmFsIGZsaXAgZG9uZQo+ ICsJV0FSTl9PTighY3J0Yy0+c3RhdGUtPmV2ZW50KTsKCldoZW4gdXNpbmcgZHJtX2F0b21pY19o ZWxwZXJfY29tbWl0KCkgdGhlIGhlbHBlciBhbGxvY2F0ZXMgYW4gZXZlbnQgaW50ZXJuYWwgCmlm IG5vbmUgaXMgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSwgZXhjZXB0IGZvciBsZWdhY3kgY3Vyc29y IHVwZGF0ZXMgaWYgdGhlIApkcml2ZXIgaW1wbGVtZW50cyBhdG9taWNfwrBhc3luY19jaGVjayBh bmQgYXRvbWljX2FzeW5jX2NvbW1pdC4gWW91IHdpbGwgdGhpcyAKYWx3YXlzIGhhdmUgYW4gZXZl bnQuIEkgdGhpbmsgeW91IGNhbiBkcm9wIHRoaXMgV0FSTl9PTigpLCB0aGUgZHJpdmVyIHdpbGwg CmNyYXNoIGxhdGVyIHdoZW4gZGVyZWZlcmVuY2luZyB0aGUgZXZlbnQgYW55d2F5LgoKPiArCWlm IChjcnRjLT5zdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkKSB7Cj4gKwkJc3RydWN0IGRybV9jb2xv cl9sdXQgKmx1dCA9IE5VTEw7Cj4gKwkJdWludCBsZW5ndGggPSAwOwoKdW5zaWduZWQgaW50ID8g dWludCBkb2Vzbid0IHNlZW0gdG8gYmUgYSBjb21tb24gdHlwZSBpbiB0aGUga2VybmVsLgoKPiAr Cj4gKwkJaWYgKGNydGMtPnN0YXRlLT5nYW1tYV9sdXQpIHsKPiArCQkJbHV0ID0gKHN0cnVjdCBk cm1fY29sb3JfbHV0ICopCj4gKwkJCSAgICAgIGNydGMtPnN0YXRlLT5nYW1tYV9sdXQtPmRhdGE7 Cj4gKwkJCWxlbmd0aCA9IGNydGMtPnN0YXRlLT5nYW1tYV9sdXQtPmxlbmd0aCAvCj4gKwkJCQkg c2l6ZW9mKCpsdXQpOwo+ICsJCX0KPiArCQl0aWRzcy0+ZGlzcGNfb3BzLT52cF9zZXRfZ2FtbWEo dGlkc3MtPmRpc3BjLAo+ICsJCQkJCSAgICAgICB0Y3J0Yy0+aHdfdmlkZW9wb3J0LAo+ICsJCQkJ CSAgICAgICBsdXQsIGxlbmd0aCk7Cj4gKwl9Cj4gKwo+ICsJV0FSTl9PTihkcm1fY3J0Y192Ymxh bmtfZ2V0KGNydGMpICE9IDApOwoKV2hlbiBjYW4gdGhpcyBmYWlsID8KCj4gKwlzcGluX2xvY2tf aXJxKCZkZGV2LT5ldmVudF9sb2NrKTsKPiArCXRpZHNzLT5kaXNwY19vcHMtPnZwX2dvKHRpZHNz LT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCk7Cj4gKwo+ICsJaWYgKGNydGMtPnN0YXRlLT5l dmVudCkgewo+ICsJCXRjcnRjLT5ldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKPiArCQljcnRj LT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ICsJfQo+ICsKPiArCXNwaW5fdW5sb2NrX2lycSgmZGRl di0+ZXZlbnRfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRpZHNzX2NydGNfYXRvbWlj X2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlkc3NfY3J0YyAqdGNydGMgPSB0 b190aWRzc19jcnRjKGNydGMpOwo+ICsJc3RydWN0IHRpZHNzX2NydGNfc3RhdGUgKnRjcnRjX3N0 YXRlID0gdG9fdGlkc3NfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldiA9IGNydGMtPmRldjsKPiArCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0g ZGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSA9ICZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiArCWludCByOwo+ICsKPiArCWRldl9k YmcoZGRldi0+ZGV2LCAiJXMsIGV2ZW50ICVwXG4iLCBfX2Z1bmNfXywgY3J0Yy0+c3RhdGUtPmV2 ZW50KTsKPiArCj4gKwl0aWRzcy0+ZGlzcGNfb3BzLT5ydW50aW1lX2dldCh0aWRzcy0+ZGlzcGMp Owo+ICsKPiArCXIgPSB0aWRzcy0+ZGlzcGNfb3BzLT52cF9zZXRfY2xrX3JhdGUodGlkc3MtPmRp c3BjLCB0Y3J0Yy0+aHdfdmlkZW9wb3J0LAo+ICsJCQkJCSAgICAgIG1vZGUtPmNsb2NrICogMTAw MCk7Cj4gKwlXQVJOX09OKHIpOwo+ICsKPiArCXIgPSB0aWRzcy0+ZGlzcGNfb3BzLT52cF9lbmFi bGVfY2xrKHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCk7Cj4gKwlXQVJOX09OKHIp OwoKVGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgZ29vZCBlcnJvciBoYW5kbGluZyA6LS8KCj4gKwo+ ICsJLyogVHVybiB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnJ1cHQgcmVwb3J0aW5nIG9uLiAqLwo+ ICsJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOwo+ICsKPiArCXRjcnRjLT5lbmFibGVkID0gdHJ1 ZTsKPiArCj4gKwl0aWRzcy0+ZGlzcGNfb3BzLT52cF9lbmFibGUodGlkc3MtPmRpc3BjLCB0Y3J0 Yy0+aHdfdmlkZW9wb3J0LAo+ICsJCQkJICAgIG1vZGUsCj4gKwkJCQkgICAgdGNydGNfc3RhdGUt PmJ1c19mb3JtYXQsCj4gKwkJCQkgICAgdGNydGNfc3RhdGUtPmJ1c19mbGFncyk7Cj4gKwo+ICsJ c3Bpbl9sb2NrX2lycSgmZGRldi0+ZXZlbnRfbG9jayk7Cj4gKwo+ICsJaWYgKGNydGMtPnN0YXRl LT5ldmVudCkgewo+ICsJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0 YXRlLT5ldmVudCk7Cj4gKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCX0KCldoeSBk byB5b3UgcmVwb3J0IHZibGFuayB3aGVuIGVuYWJsaW5nIHRoZSBDUlRDID8KCj4gKwlzcGluX3Vu bG9ja19pcnEoJmRkZXYtPmV2ZW50X2xvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aWRz c19jcnRjX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAg IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlkc3Nf Y3J0YyAqdGNydGMgPSB0b190aWRzc19jcnRjKGNydGMpOwo+ICsJc3RydWN0IGRybV9kZXZpY2Ug KmRkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYt PmRldl9wcml2YXRlOwo+ICsKPiArCWRldl9kYmcoZGRldi0+ZGV2LCAiJXMsIGV2ZW50ICVwXG4i LCBfX2Z1bmNfXywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKPiArCj4gKwlyZWluaXRfY29tcGxldGlv bigmdGNydGMtPmZyYW1lZG9uZV9jb21wbGV0aW9uKTsKPiArCj4gKwl0aWRzcy0+ZGlzcGNfb3Bz LT52cF9kaXNhYmxlKHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCk7Cj4gKwo+ICsJ aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnRjcnRjLT5mcmFtZWRvbmVfY29tcGxl dGlvbiwKPiArCQkJCQkgbXNlY3NfdG9famlmZmllcyg1MDApKSkKPiArCQlkZXZfZXJyKHRpZHNz LT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIGZyYW1lZG9uZSBvbiBjcnRjICVkIiwKPiArCQkJ dGNydGMtPmh3X3ZpZGVvcG9ydCk7CgpXaXRob3V0IGRldGFpbGVkIGtub3dsZWRnZSBvZiB0aGUg aGFyZHdhcmUgSSBjYW4ndCB0ZWxsIGZvciBzdXJlLCBidXQgY291bGRuJ3QgCnRoaXMgYmUgcmFj eSA/IENvdWxkIGEgdmJsYW5rIGV2ZW50IGJlIHJlcG9ydGVkIHJpZ2h0IGJlZm9yZSB0aGUgCnJl aW5pdF9jb21wbGV0aW9uKCkgY2FsbCwgYW5kIC0+dnBfZGlzYWJsZSgpIGNhbGxlZCBiZWZvcmUg dGhlIHN0YXJ0IG9mIHRoZSAKbmV4dCBmcmFtZSwgcmVzdWx0aW5nIGluIG5vIGZ1cnRoZXIgdmJs YW5rIGV2ZW50IGJlaW5nIGdlbmVyYXRlZCA/IEEgCndha2VfdXAoKS93YWl0X2Zvcl9ldmVudCgp IHdpdGggYW4gZXhwbGljaXQgdGVzdCBvbiB3aGV0aGVyIGEgcGFnZSBmbGlwIGlzIApwZW5kaW5n IChpZiBwb3NzaWJsZSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwgPykgbWlnaHQgYmUgYmV0dGVyLgoK PiArCXNwaW5fbG9ja19pcnEoJmRkZXYtPmV2ZW50X2xvY2spOwo+ICsJaWYgKGNydGMtPnN0YXRl LT5ldmVudCkgewo+ICsJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0 YXRlLT5ldmVudCk7CgpJcyB0aGlzIG5lZWRlZCBvbmx5IHdoZW4gd2FpdGluZyBmb3IgY29tcGxl dGlvbiB0aW1lcyBvdXQsIG9yIGlzIGl0IG5lZWRlZCBpbiAKdGhlIGdlbmVyYWwgY2FzZSA/IEkg d291bGQgYXNzdW1lIHRoZSBldmVudCB0byBiZSBzaWduYWxlZCBieSB0aGUgaW50ZXJydXB0IApo YW5kbGVyLgoKPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ICsJfQo+ICsJc3Bpbl91 bmxvY2tfaXJxKCZkZGV2LT5ldmVudF9sb2NrKTsKPiArCj4gKwl0Y3J0Yy0+ZW5hYmxlZCA9IGZh bHNlOwo+ICsKPiArCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7Cj4gKwo+ICsJdGlkc3MtPmRp c3BjX29wcy0+dnBfZGlzYWJsZV9jbGsodGlkc3MtPmRpc3BjLCB0Y3J0Yy0+aHdfdmlkZW9wb3J0 KTsKPiArCj4gKwl0aWRzcy0+ZGlzcGNfb3BzLT5ydW50aW1lX3B1dCh0aWRzcy0+ZGlzcGMpOwo+ ICsKPiArCXNwaW5fbG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7Cj4gKwlpZiAoY3J0 Yy0+c3RhdGUtPmV2ZW50KSB7Cj4gKwkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0Yywg Y3J0Yy0+c3RhdGUtPmV2ZW50KTsKPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwoKQSBz ZWNvbmQgb25lID8gCgo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50 X2xvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMKPiArZW51bSBkcm1fbW9kZV9zdGF0dXMgdGlkc3Nf Y3J0Y19tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCQkgICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJc3RydWN0IHRpZHNzX2NydGMg KnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2 ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZf cHJpdmF0ZTsKPiArCj4gKwlyZXR1cm4gdGlkc3MtPmRpc3BjX29wcy0+dnBfY2hlY2tfbW9kZSh0 aWRzcy0+ZGlzcGMsCj4gKwkJCQkJICAgICAgIHRjcnRjLT5od192aWRlb3BvcnQsCj4gKwkJCQkJ ICAgICAgIG1vZGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hl bHBlcl9mdW5jcyBjcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5hdG9taWNfY2hlY2sgPSB0aWRz c19jcnRjX2F0b21pY19jaGVjaywKPiArCS5hdG9taWNfYmVnaW4gPSB0aWRzc19jcnRjX2F0b21p Y19iZWdpbiwKPiArCS5hdG9taWNfZmx1c2ggPSB0aWRzc19jcnRjX2F0b21pY19mbHVzaCwKPiAr CS5hdG9taWNfZW5hYmxlID0gdGlkc3NfY3J0Y19hdG9taWNfZW5hYmxlLAo+ICsJLmF0b21pY19k aXNhYmxlID0gdGlkc3NfY3J0Y19hdG9taWNfZGlzYWJsZSwKPiArCj4gKwkubW9kZV92YWxpZCA9 IHRpZHNzX2NydGNfbW9kZV92YWxpZCwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHRpZHNzX2Ny dGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlpZiAoY3J0Yy0+c3RhdGUp Cj4gKwkJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yy0+c3RhdGUp Owo+ICsKPiArCWtmcmVlKGNydGMtPnN0YXRlKTsKCkFzIHlvdSdyZSB0ZXN0aW5nIGZvciBjcnRj LT5zdGF0ZSBhYm92ZSB5b3UgY291bGQgcHV0IHRoaXMgaW4gdGhlIHNhbWUgY29kZSAKYmxvY2su IEl0IHdvdWxkIGF2b2lkIGEgZG91YmxlIGNoZWNrIGluIHRoZSBjYXNlIHdoZXJlIGNydGMtPnN0 YXRlIGlzIE5VTEwuCgo+ICsJY3J0Yy0+c3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGlk c3NfY3J0Y19zdGF0ZSksIEdGUF9LRVJORUwpOwoKUGxlYXNlIGRvbid0IHJlbHkgb24gZHJtX2Ny dGNfc3RhdGUgYmVpbmcgdGhlIGZpcnN0IGZpZWxkIG9mIHRpZHNzX2NydGNfc3RhdGUsIAppdCdz IG5vdCB2ZXJ5IGVycm9yLXByb29mLgoKQWxzbywgc2l6ZW9mKHN0cnVjdCBuYW1lKSBpc24ndCBm YXZvdXJlZC4gSWYgeW91IHN0b3AgcmVseWluZyBvbiB0aGUgZmllbGQgCm9yZGVyIHlvdSB3aWxs IG5lZWQgdG8gYWRkIGEgdmFyaWFibGUgZm9yIHRoZSBjdXN0b20gc3RhdGUgcG9pbnRlciwgc28g eW91IAp3aWxsIGJlIGFibGUgdG8gdXNlIHNpemVvZigqdmFyKS4KCj4gKwlpZiAoY3J0Yy0+c3Rh dGUpCj4gKwkJY3J0Yy0+c3RhdGUtPmNydGMgPSBjcnRjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICoKPiArdGlkc3NfY3J0Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSAqc3RhdGUs ICpjdXJyZW50X3N0YXRlOwo+ICsKPiArCWlmIChXQVJOX09OKCFjcnRjLT5zdGF0ZSkpCj4gKwkJ cmV0dXJuIE5VTEw7CgpDYW4gdGhpcyBoYXBwZW4gPwoKPiArCWN1cnJlbnRfc3RhdGUgPSB0b190 aWRzc19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKPiArCj4gKwlzdGF0ZSA9IGttYWxsb2Moc2l6 ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFzdGF0ZSkKPiArCQlyZXR1cm4gTlVM TDsKPiArCj4gKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMs ICZzdGF0ZS0+YmFzZSk7Cj4gKwo+ICsJc3RhdGUtPmJ1c19mb3JtYXQgPSBjdXJyZW50X3N0YXRl LT5idXNfZm9ybWF0Owo+ICsJc3RhdGUtPmJ1c19mbGFncyA9IGN1cnJlbnRfc3RhdGUtPmJ1c19m bGFnczsKPiArCj4gKwlyZXR1cm4gJnN0YXRlLT5iYXNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHRpZHNzX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IHRpZHNzX2Rl dmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlkZXZfZGJnKGRkZXYtPmRl diwgIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJdGlkc3MtPmRpc3BjX29wcy0+cnVudGltZV9n ZXQodGlkc3MtPmRpc3BjKTsKPiArCj4gKwl0aWRzc19pcnFfZW5hYmxlX3ZibGFuayhjcnRjKTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlkc3NfY3J0Y19kaXNh YmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBk ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1 bmNfXyk7Cj4gKwo+ICsJdGlkc3NfaXJxX2Rpc2FibGVfdmJsYW5rKGNydGMpOwo+ICsKPiArCXRp ZHNzLT5kaXNwY19vcHMtPnJ1bnRpbWVfcHV0KHRpZHNzLT5kaXNwYyk7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgY3J0Y19mdW5jcyA9IHsKPiArCS5yZXNl dCA9IHRpZHNzX2NydGNfcmVzZXQsCj4gKwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAsCj4g Kwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCj4gKwkucGFnZV9m bGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAo+ICsJLmF0b21pY19kdXBsaWNhdGVf c3RhdGUgPSB0aWRzc19jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwKPiArCS5lbmFibGVf dmJsYW5rID0gdGlkc3NfY3J0Y19lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0g dGlkc3NfY3J0Y19kaXNhYmxlX3ZibGFuaywKPiArfTsKPiArCj4gK3N0cnVjdCB0aWRzc19jcnRj ICp0aWRzc19jcnRjX2NyZWF0ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcywgdTMyCj4gaHdf dmlkZW9wb3J0LAo+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5LCBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmVwbm9kZSkKCmVwbm9kZSBpc24ndCB1c2VkLldoYXQgZG8geW91IG5lZWQg dGhlIGVwbm9kZSBmb3IgPwoKPiArewo+ICsJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjOwo+ICsJ c3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJaW50IHJldDsKPiArCj4gKwl0Y3J0YyA9IGRldm1f a3phbGxvYyh0aWRzcy0+ZGV2LCBzaXplb2YoKnRjcnRjKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAo IXRjcnRjKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXRjcnRjLT5od192 aWRlb3BvcnQgPSBod192aWRlb3BvcnQ7Cj4gKwlpbml0X2NvbXBsZXRpb24oJnRjcnRjLT5mcmFt ZWRvbmVfY29tcGxldGlvbik7Cj4gKwo+ICsJY3J0YyA9ICAmdGNydGMtPmNydGM7Cj4gKwo+ICsJ cmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyh0aWRzcy0+ZGRldiwgY3J0YywgcHJpbWFy eSwKPiArCQkJCQlOVUxMLCAmY3J0Y19mdW5jcywgTlVMTCk7Cj4gKwlpZiAocmV0IDwgMCkKPiAr CQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0Yywg JmNydGNfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwkvKiBUaGUgZGlzcGMgQVBJIGFkYXB0cyB0byB3 aGF0IGV2ZXIgc2l6ZSB3ZSBhc2sgZnJvbSBpbiBubwoKRm9yIG11bHRpbGluZSBjb21tZW50cyB0 aGUgZmlyc3QgbGluZSB1c3VhbGx5IGNvbnRhaW5zIGp1c3QgLyoKCnMvZnJvbSBpbi9mb3JtIGl0 LyA/Cgo+ICsJICogbWF0dGVyIHdoYXQgSFcgc3VwcG9ydHMuIFgtc2VydmVyIGFzc3VtZXMgMjU2 IGVsZW1lbnQgZ2FtbWEKPiArCSAqIHRhYmxlcyBzbyBsZXRzIHVzZSB0aGF0LiBTaXplIG9mIEhX IGdhbW1hIHRhYmxlIGNhbiBiZQo+ICsJICogZXh0cmFjdGVkIHdpdGggZGlzcGNfdnBfZ2FtbWFf c2l6ZSgpLiBJZiBpdCByZXR1cm5zIDAKPiArCSAqIGdhbW1hIHRhYmxlIGlzIG5vdCBzdXBwcnRl ZC4KPiArCSAqLwo+ICsJaWYgKHRpZHNzLT5kaXNwY19vcHMtPnZwX2dhbW1hX3NpemUodGlkc3Mt PmRpc3BjLCBod192aWRlb3BvcnQpKSB7Cj4gKwkJdWludCBnYW1tYV9sdXRfc2l6ZSA9IDI1NjsK CnVuc2lnbmVkIGludCA/IFNhbWUgZm9yIG90aGVyIGxvY2F0aW9ucyBiZWxvdywgaWYgYW55LgoK PiArCj4gKwkJZHJtX2NydGNfZW5hYmxlX2NvbG9yX21nbXQoY3J0YywgMCwgZmFsc2UsIGdhbW1h X2x1dF9zaXplKTsKPiArCQlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKGNydGMsIGdhbW1h X2x1dF9zaXplKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gdGNydGM7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2NydGMuaAo+IGIvZHJpdmVycy9ncHUvZHJt L3RpZHNzL3RpZHNzX2NydGMuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uOWYzMmQ4MWU1NWQ5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90aWRzcy90aWRzc19jcnRjLmgKPiBAQCAtMCwwICsxLDQ5IEBACj4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBU ZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KPiArICog QXV0aG9yOiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgo+ICsgKi8KPiAr Cj4gKyNpZm5kZWYgX19USURTU19DUlRDX0hfXwo+ICsjZGVmaW5lIF9fVElEU1NfQ1JUQ19IX18K PiArCj4gKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0 aW9uLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KCkxldCdzIHRyeSB0byBrZWVwIGhl YWRlcnMgYWxwaGFiZXRpY2FsbHkgc29ydGVkID8KCj4gKyNpbmNsdWRlICJ0aWRzc19kaXNwYy5o Igo+ICsKPiArI2RlZmluZSB0b190aWRzc19jcnRjKGMpIGNvbnRhaW5lcl9vZigoYyksIHN0cnVj dCB0aWRzc19jcnRjLCBjcnRjKQo+ICsKPiArc3RydWN0IHRpZHNzX2NydGMgewo+ICsJc3RydWN0 IGRybV9jcnRjIGNydGM7Cj4gKwo+ICsJdTMyIGh3X3ZpZGVvcG9ydDsKPiArCj4gKwlzdHJ1Y3Qg ZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKPiArCj4gKwkvKiBoYXMgY3J0Y19hdG9t aWNfZW5hYmxlIGJlZW4gY2FsbGVkPyAqLwo+ICsJYm9vbCBlbmFibGVkOwo+ICsKPiArCXN0cnVj dCBjb21wbGV0aW9uIGZyYW1lZG9uZV9jb21wbGV0aW9uOwo+ICt9Owo+ICsKPiArI2RlZmluZSB0 b190aWRzc19jcnRjX3N0YXRlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdGlkc3NfY3J0Y19z dGF0ZSwKPiBiYXNlKSAKPiArCj4gK3N0cnVjdCB0aWRzc19jcnRjX3N0YXRlIHsKPiArCS8qIE11 c3QgYmUgZmlyc3QuICovCj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgYmFzZTsKPiArCj4gKwl1 MzIgYnVzX2Zvcm1hdDsKPiArCXUzMiBidXNfZmxhZ3M7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdGlk c3NfY3J0YyAqdGlkc3NfY3J0Y19jcmVhdGUoc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MsIHUz Mgo+IGh3X3ZpZGVvcG9ydCwKPiArCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwg c3RydWN0IGRldmljZV9ub2RlICplcG5vZGUpOwo+ICsKPiArCj4gK3ZvaWQgdGlkc3NfY3J0Y192 YmxhbmtfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gK3ZvaWQgdGlkc3NfY3J0Y19mcmFt ZWRvbmVfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gK3ZvaWQgdGlkc3NfY3J0Y19lcnJv cl9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1NjQgaXJxc3RhdHVzKTsKPiArCj4gKyNlbmRp Zgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMuaAo+IGIv ZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3BjLmggbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjM4ZWUzZDc1NDA0ZQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMuaAo+IEBAIC0wLDAgKzEsMTQ1IEBA Cj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8qCj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8v d3d3LnRpLmNvbS8KPiArICogQXV0aG9yOiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5A dGkuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19USURTU19ESVNQQ19IX18KPiArI2RlZmlu ZSBfX1RJRFNTX0RJU1BDX0hfXwo+ICsKPiArc3RydWN0IHRpZHNzX2RldmljZTsKPiArc3RydWN0 IGRpc3BjX2RldmljZTsKPiArc3RydWN0IGRybV9jb2xvcl9sdXQ7Cj4gKwoKWW91IGNvdWxkIHRy eSB0byBrZWVwIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgc29ydGVkIHRvby4KCj4gKyNkZWZpbmUg RFNTX01BWF9DSEFOTkVMUyA4Cj4gKyNkZWZpbmUgRFNTX01BWF9QTEFORVMgOAo+ICsKPiArLyoK PiArICogQmFzZWQgb24gdGhlIGFib3ZlIDIgZGVmaW5lcyB0aGUgYmVsbG93IGRlZmluZXMgZGVz Y3JpYmUgZm9sbG93aW5nCj4gKyAqIHU2NCBJUlEgYml0czoKPiArICoKPiArICogYml0IGdyb3Vw IHxkZXYgfG1yZzB8bXJnMXxtcmcyfG1yZzN8bXJnNHxtcmc1fG1yZzZ8bXJnN3xwbGFuZQo+IDAt N3w8dW51c2VkPiB8Cj4gKyAqIGJpdCB1c2UgICB8RGZvdXxGRU9MfEZFT0x8RkVPTHxGRU9MfEZF T0x8RkVPTHxGRU9MfEZFT0x8VVVVVXxVVVVVfCB8IHwgfAo+IHwgfAo+ICsgKiBiaXQgbnVtYmVy fDAtMyB8NC03IHw4LTExfCAgICAgICAgICAgIDEyLTM1ICAgICAgICAgICAgfCAgMzYtNDMgIHwg Cj4gNDQtNjMgIHwKPiArICoKPiArICogZGV2aWNlIGJpdHM6CUQgPSBPQ1AgZXJyb3IKPiArICog V0IgYml0czoJZiA9IGZyYW1lIGRvbmUgd2IsIG8gPSB3YiBidWZmZXIgb3ZlcmZsb3csCj4gKyAq CQl1ID0gd2IgYnVmZmVyIHVuY29tcGxldGUKPiArICogdnAgYml0czoJRiA9IGZyYW1lIGRvbmUs IEUgPSB2c3luYyBldmVuLCBPID0gdnN5bmMgb2RkLCBMID0gc3luYyBsb3N0Cj4gKyAqIHBsYW5l IGJpdHM6CVUgPSBmaWZvIHVuZGVyZmxvdwo+ICsgKi8KPiArCj4gKyNkZWZpbmUgRFNTX0lSUV9E RVZJQ0VfT0NQX0VSUgkJCUJJVF9VTEwoMCkKPiArCj4gKyNkZWZpbmUgRFNTX0lSUV9ERVZJQ0Vf RlJBTUVET05FV0IJCUJJVF9VTEwoMSkKPiArI2RlZmluZSBEU1NfSVJRX0RFVklDRV9XQkJVRkZF Uk9WRVJGTE9XCQlCSVRfVUxMKDIpCj4gKyNkZWZpbmUgRFNTX0lSUV9ERVZJQ0VfV0JVTkNPTVBM RVRFRVJST1IJQklUX1VMTCgzKQo+ICsjZGVmaW5lIERTU19JUlFfREVWSUNFX1dCX01BU0sJCQlH RU5NQVNLX1VMTCgzLCAxKQo+ICsKPiArI2RlZmluZSBEU1NfSVJRX1ZQX0JJVF9OKGNoLCBiaXQp CSg0ICsgNCAqIGNoICsgYml0KQoKUGxlYXNlIGVuY2xvc2UgbWFjcm8gYXJndW1lbnRzIGluIHBh cmVudGhlc2VzLiBEb2Vzbid0IGNoZWNrcGF0Y2ggd2FybiBhYm91dCAKdGhhdCA/Cgo+ICsjZGVm aW5lIERTU19JUlFfUExBTkVfQklUX04ocGxhbmUsIGJpdCkgXAo+ICsJKERTU19JUlFfVlBfQklU X04oRFNTX01BWF9DSEFOTkVMUywgMCkgKyAxICogcGxhbmUgKyBiaXQpCj4gKwo+ICsjZGVmaW5l IERTU19JUlFfVlBfQklUKGNoLCBiaXQpCUJJVF9VTEwoRFNTX0lSUV9WUF9CSVRfTihjaCwgYml0 KSkKPiArI2RlZmluZSBEU1NfSVJRX1BMQU5FX0JJVChwbGFuZSwgYml0KQlCSVRfVUxMKERTU19J UlFfUExBTkVfQklUX04ocGxhbmUsCj4gYml0KSkgKwo+ICsjZGVmaW5lIERTU19JUlFfVlBfTUFT SyhjaCkgXAo+ICsJR0VOTUFTS19VTEwoRFNTX0lSUV9WUF9CSVRfTihjaCwgMyksIERTU19JUlFf VlBfQklUX04oY2gsIDApKQo+ICsjZGVmaW5lIERTU19JUlFfUExBTkVfTUFTSyhwbGFuZSkgXAo+ ICsJR0VOTUFTS19VTEwoRFNTX0lSUV9QTEFORV9CSVRfTihwbGFuZSwgMCksIERTU19JUlFfUExB TkVfQklUX04ocGxhbmUsIDApKQo+ICsKPiArI2RlZmluZSBEU1NfSVJRX1ZQX0ZSQU1FX0RPTkUo Y2gpCURTU19JUlFfVlBfQklUKGNoLCAwKQo+ICsjZGVmaW5lIERTU19JUlFfVlBfVlNZTkNfRVZF TihjaCkJRFNTX0lSUV9WUF9CSVQoY2gsIDEpCj4gKyNkZWZpbmUgRFNTX0lSUV9WUF9WU1lOQ19P REQoY2gpCURTU19JUlFfVlBfQklUKGNoLCAyKQo+ICsjZGVmaW5lIERTU19JUlFfVlBfU1lOQ19M T1NUKGNoKQlEU1NfSVJRX1ZQX0JJVChjaCwgMykKPiArCj4gKyNkZWZpbmUgRFNTX0lSUV9QTEFO RV9GSUZPX1VOREVSRkxPVyhwbGFuZSkJRFNTX0lSUV9QTEFORV9CSVQocGxhbmUsIDApCj4gKwo+ ICtzdHJ1Y3QgdGlkc3NfdnBfaW5mbyB7Cj4gKwl1MzIgZGVmYXVsdF9jb2xvcjsKPiArfTsKPiAr Cj4gK3N0cnVjdCB0aWRzc19wbGFuZV9pbmZvIHsKClRoaXMgc3RydWN0dXJlIHdvdWxkIGJlIHdv cnRoIGRvY3VtZW50aW5nLgoKPiArCWRtYV9hZGRyX3QgcGFkZHI7Cj4gKwlkbWFfYWRkcl90IHBf dXZfYWRkcjsgIC8qIGZvciBOVjEyIGZvcm1hdCAqLwo+ICsJdTE2IGZiX3dpZHRoOwo+ICsJdTE2 IHdpZHRoOwo+ICsJdTE2IGhlaWdodDsKPiArCXUzMiBmb3VyY2M7Cj4gKwo+ICsJdTE2IHBvc194 Owo+ICsJdTE2IHBvc195Owo+ICsJdTE2IG91dF93aWR0aDsJLyogaWYgMCwgb3V0X3dpZHRoID09 IHdpZHRoICovCj4gKwl1MTYgb3V0X2hlaWdodDsJLyogaWYgMCwgb3V0X2hlaWdodCA9PSBoZWln aHQgKi8KPiArCXU4IGdsb2JhbF9hbHBoYTsKPiArCXU4IHByZV9tdWx0X2FscGhhOwo+ICsJdTgg em9yZGVyOwo+ICt9Owo+ICsKPiArc3RydWN0IGRpc3BjX29wcyB7Cgp0aWRzc19kaXNwY19vcHMg PwoKPiArCXU2NCAoKnJlYWRfYW5kX2NsZWFyX2lycXN0YXR1cykoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMpOwo+ICsJdm9pZCAoKndyaXRlX2lycWVuYWJsZSkoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsIHU2NCBlbmFibGUpOwo+ICsKPiArCWludCAoKnJ1bnRpbWVfZ2V0KShzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYyk7Cj4gKwl2b2lkICgqcnVudGltZV9wdXQpKHN0cnVjdCBkaXNw Y19kZXZpY2UgKmRpc3BjKTsKPiArCj4gKwlpbnQgKCpnZXRfbnVtX3BsYW5lcykoc3RydWN0IGRp c3BjX2RldmljZSAqZGlzcGMpOwo+ICsJaW50ICgqZ2V0X251bV92cHMpKHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjKTsKPiArCj4gKwljb25zdCBjaGFyICooKnBsYW5lX25hbWUpKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjLAo+ICsJCQkJICB1MzIgaHdfcGxhbmUpOwo+ICsJY29uc3QgY2hh ciAqKCp2cF9uYW1lKShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKPiArCQkJICAgICAgIHUz MiBod192aWRlb3BvcnQpOwoKRG8gdGhlIGhhcmR3YXJlIElEcyBuZWVkIHRvIGJlIGV4YWN0bHkg YW5kIGV4cGxpY2l0bHkgMzItYml0IHdpZGUgPyBDYW4ndCB3ZSAKdXNlIHVuc2lnbmVkIGludCBp bnN0ZWFkID8KCj4gKwo+ICsJdTMyICgqZ2V0X21lbW9yeV9iYW5kd2lkdGhfbGltaXQpKHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjKTsKPiArCj4gKwl2b2lkICgqdnBfZW5hYmxlKShzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVvcG9ydCwKPiArCQkJICBjb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJICB1MzIgYnVzX2ZtdCwgdTMyIGJ1c19m bGFncyk7Cj4gKwo+ICsJdm9pZCAoKnZwX2Rpc2FibGUpKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRp c3BjLCB1MzIgaHdfdmlkZW9wb3J0KTsKPiArCj4gKwlib29sICgqdnBfZ29fYnVzeSkoc3RydWN0 IGRpc3BjX2RldmljZSAqZGlzcGMsCj4gKwkJCSAgIHUzMiBod192aWRlb3BvcnQpOwo+ICsJdm9p ZCAoKnZwX2dvKShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVvcG9ydCk7 Cj4gKwo+ICsJdm9pZCAoKnZwX3NldHVwKShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMy IGh3X3ZpZGVvcG9ydCwKPiArCQkJIGNvbnN0IHN0cnVjdCB0aWRzc192cF9pbmZvICppbmZvKTsK PiArCj4gKwllbnVtIGRybV9tb2RlX3N0YXR1cyAoKnZwX2NoZWNrX21vZGUpKHN0cnVjdCBkaXNw Y19kZXZpY2UgKmRpc3BjLAo+ICsJCQkJCSAgICAgIHUzMiBod192aWRlb3BvcnQsCj4gKwkJCQkJ ICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwoKSG93IGFib3V0IGNh bGxpbmcgdGhpcyB2cF9tb2RlX1ZhbGlkIHRvIHVzZSB0aGUgRFJNIHRlcm1pbm9sb2d5ID8KCj4g KwlpbnQgKCp2cF9jaGVja19jb25maWcpKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIg aHdfdmlkZW9wb3J0LAo+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUsCj4gKwkJCSAgICAgICB1MzIgYnVzX2ZtdCwgdTMyIGJ1c19mbGFncyk7Cj4gKwo+ICsJ dTMyICgqdnBfZ2FtbWFfc2l6ZSkoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCj4gKwkJCSAg ICAgdTMyIGh3X3ZpZGVvcG9ydCk7Cj4gKwl2b2lkICgqdnBfc2V0X2dhbW1hKShzdHJ1Y3QgZGlz cGNfZGV2aWNlICpkaXNwYywKPiArCQkJICAgICB1MzIgaHdfdmlkZW9wb3J0LAo+ICsJCQkgICAg IGNvbnN0IHN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQsCj4gKwkJCSAgICAgdW5zaWduZWQgaW50 IGxlbmd0aCk7Cj4gKwo+ICsJaW50ICgqcGxhbmVfZW5hYmxlKShzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywgdTMyIGh3X3BsYW5lLAo+ICsJCQkgICAgYm9vbCBlbmFibGUpOwo+ICsJaW50ICgq cGxhbmVfc2V0dXApKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsCj4g KwkJCSAgIGNvbnN0IHN0cnVjdCB0aWRzc19wbGFuZV9pbmZvICpvaSwKPiArCQkJICAgdTMyIGh3 X3ZpZGVvcG9ydCk7Cj4gKwo+ICsJaW50ICgqdnBfc2V0X2Nsa19yYXRlKShzdHJ1Y3QgZGlzcGNf ZGV2aWNlICpkaXNwYywKPiArCQkJICAgICAgIHUzMiBod192aWRlb3BvcnQsIHVuc2lnbmVkIGxv bmcgcmF0ZSk7Cj4gKwlpbnQgKCp2cF9lbmFibGVfY2xrKShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpk aXNwYywgdTMyIGh3X3ZpZGVvcG9ydCk7Cj4gKwl2b2lkICgqdnBfZGlzYWJsZV9jbGspKHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KTsKPiArCj4gKwlpbnQgKCpy dW50aW1lX3N1c3BlbmQpKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKTsKPiArCWludCAoKnJ1 bnRpbWVfcmVzdW1lKShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYyk7Cj4gKwo+ICsJdm9pZCAo KnJlbW92ZSkoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpOwo+ICsKPiArCWludCAoKm1vZGVz ZXRfaW5pdCkoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpOwo+ICt9OwoKSSB0aGluayBJIHdv dWxkIHNvcnQgdGhlIGZ1bmN0aW9ucyBieSBjYXRlZ29yeTogZGlzcGMsIHZwLCBwbGFuZXMsIC4u LgoKPiArCj4gK2ludCBkaXNwYzZfaW5pdChzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyk7Cj4g Kwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rp c3BjNi5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGM2LmMgbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc3NzJkNDQ4NGE2ZQo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGM2LmMKCltzbmlw XQoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3BjNi5oCj4g Yi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGM2LmggbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjgwMTk3YzgxMmFjZAo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGM2LmgKCkknbGwgcmV2aWV3IHRo ZSBkaXNwYzYgY29kZSBzZXBhcmF0ZWx5LgoKW3NuaXBdCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmMKPiBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19kcnYuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODAwMjc2 NmM0NjQwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19kcnYuYwo+IEBAIC0wLDAgKzEsMzMzIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50 cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KPiArICogQXV0aG9yOiBUb21pIFZh bGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxs aW51eC9jb25zb2xlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl bHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9j bWFfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAidGlkc3NfZGlzcGMuaCIKPiArI2luY2x1ZGUg InRpZHNzX2Rydi5oIgo+ICsjaW5jbHVkZSAidGlkc3NfaXJxLmgiCj4gKyNpbmNsdWRlICJ0aWRz c19rbXMuaCIKPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsgKiBEZXZpY2UgSW5mb3JtYXRp b24KPiArICovCj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX2ZlYXR1cmVzIHRpZHNz X2syZ19mZWF0cyA9IHsKPiArCS5kaXNwY19pbml0ID0gZGlzcGM2X2luaXQsCj4gK307Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0aWRzc19vZl90YWJsZVtdID0gewo+ ICsJeyAuY29tcGF0aWJsZSA9ICJ0aSxrMmctZHNzIiwgLmRhdGEgPSAmdGlkc3NfazJnX2ZlYXRz IH0sCj4gKwl7IH0KPiArfTsKPiArCgpIb3cgYWJvdXQgbW92aW5nIHRoaXMgYSBiaXQgY2xvc2Vy IHRvIHdoZXJlIHRpZHNzX29mX3RhYmxlIGlzIHVzZWQgPyBKdXN0IApiZWZvcmUgdGhlIHByb2Jl IGZ1bmN0aW9uIHBvc3NpYmx5ID8KCkFzIHlvdSB1c2UgYmxvY2sgY29tbWVudHMgdG8gbWFyayBz ZWN0aW9ucywgYSBzZWN0aW9uIG5hbWVkICJEUk0gRHJpdmVyIiB3b3VsZCAKYmUgdXNlZnVsIGhl cmUuCgo+ICtERUZJTkVfRFJNX0dFTV9DTUFfRk9QUyh0aWRzc19mb3BzKTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2RyaXZlciB0aWRzc19kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyX2ZlYXR1cmVz CT0gRFJJVkVSX0dFTSB8IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX1BSSU1FCj4gKwkJCQl8IERS SVZFUl9BVE9NSUMgfCBEUklWRVJfSEFWRV9JUlEsCj4gKwkuZ2VtX2ZyZWVfb2JqZWN0X3VubG9j a2VkID0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCj4gKwkuZ2VtX3ZtX29wcwkJPSAmZHJtX2dl bV9jbWFfdm1fb3BzLAo+ICsJLnByaW1lX2hhbmRsZV90b19mZAk9IGRybV9nZW1fcHJpbWVfaGFu ZGxlX3RvX2ZkLAo+ICsJLnByaW1lX2ZkX3RvX2hhbmRsZQk9IGRybV9nZW1fcHJpbWVfZmRfdG9f aGFuZGxlLAo+ICsJLmdlbV9wcmltZV9pbXBvcnQJPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiAr CS5nZW1fcHJpbWVfZXhwb3J0CT0gZHJtX2dlbV9wcmltZV9leHBvcnQsCj4gKwkuZ2VtX3ByaW1l X2dldF9zZ190YWJsZQk9IGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJsZSwKPiArCS5nZW1f cHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxl LAo+ICsJLmdlbV9wcmltZV92bWFwCQk9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2Vt X3ByaW1lX3Z1bm1hcAk9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVf bW1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAo+ICsJLmR1bWJfY3JlYXRlCQk9IGRybV9n ZW1fY21hX2R1bWJfY3JlYXRlLAo+ICsJLmZvcHMJCQk9ICZ0aWRzc19mb3BzLAo+ICsJLm5hbWUJ CQk9ICJ0aWRzcyIsCj4gKwkuZGVzYwkJCT0gIlRJIEtleXN0b25lIERTUyIsCj4gKwkuZGF0ZQkJ CT0gIjIwMTgwMjE1IiwKClNvIHRoaXMgZGF0ZSB3aWxsIGJlIHJlbWVtYmVycyBmb3JldmVyIGFz IHRoZSBiaXJ0aGRheSBvZiB0aGUgZHJpdmVyIDotKQoKPiArCS5tYWpvcgkJCT0gMSwKPiArCS5t aW5vcgkJCT0gMCwKPiArCj4gKwkuaXJxX3ByZWluc3RhbGwJCT0gdGlkc3NfaXJxX3ByZWluc3Rh bGwsCj4gKwkuaXJxX3Bvc3RpbnN0YWxsCT0gdGlkc3NfaXJxX3Bvc3RpbnN0YWxsLAo+ICsJLmly cV9oYW5kbGVyCQk9IHRpZHNzX2lycV9oYW5kbGVyLAo+ICsJLmlycV91bmluc3RhbGwJCT0gdGlk c3NfaXJxX3VuaW5zdGFsbCwKCkkgcGVyc29uYWxseSBmaW5kIHRoZSB3YXkgdGhlIERSTSBmcmFt ZXdvcmsgbWFuYWdlcyBJUlEgdG8gbGVhZCB0byBtb3JlIApjb21wbGV4IGNvZGUgdGhhbiBkb2lu ZyBpdCBtYW51YWxseS4gVXAgdG8geW91LgoKPiArfTsKPiArCj4gKyNpZmRlZiBDT05GSUdfUE0K PiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAqIFBvd2VyIG1hbmFnZW1lbnQKPiArICovCj4gKwo+ ICtzdGF0aWMgaW50IHRpZHNzX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gK3sKPiArCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGV2X2dldF9kcnZkYXRhKGRl dik7Cj4gKwo+ICsJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOwo+ICsKPiArCXJldHVy biB0aWRzcy0+ZGlzcGNfb3BzLT5ydW50aW1lX3N1c3BlbmQodGlkc3MtPmRpc3BjKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCB0aWRzc19wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gK3sKPiArCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGV2X2dldF9kcnZkYXRh KGRldik7Cj4gKwlpbnQgcjsKPiArCj4gKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7 Cj4gKwo+ICsJciA9IHRpZHNzLT5kaXNwY19vcHMtPnJ1bnRpbWVfcmVzdW1lKHRpZHNzLT5kaXNw Yyk7Cj4gKwlpZiAocikKPiArCQlyZXR1cm4gcjsKPiArCj4gKwl0aWRzc19pcnFfcmVzdW1lKHRp ZHNzLT5kZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArI2lmZGVmIENPTkZJR19Q TV9TTEVFUAo+ICtzdGF0aWMgaW50IHRpZHNzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ICsKPiArCWRybV9rbXNfaGVs cGVyX3BvbGxfZGlzYWJsZSh0aWRzcy0+ZGRldik7Cj4gKwo+ICsJY29uc29sZV9sb2NrKCk7Cj4g Kwlkcm1fZmJkZXZfY21hX3NldF9zdXNwZW5kKHRpZHNzLT5mYmRldiwgMSk7Cj4gKwljb25zb2xl X3VubG9jaygpOwo+ICsKPiArCXN0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZCh0aWRz cy0+ZGRldik7Cj4gKwo+ICsJaWYgKElTX0VSUihzdGF0ZSkpIHsKPiArCQljb25zb2xlX2xvY2so KTsKPiArCQlkcm1fZmJkZXZfY21hX3NldF9zdXNwZW5kKHRpZHNzLT5mYmRldiwgMCk7Cj4gKwkJ Y29uc29sZV91bmxvY2soKTsKPiArCj4gKwkJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUodGlk c3MtPmRkZXYpOwo+ICsKPiArCQlyZXR1cm4gUFRSX0VSUihzdGF0ZSk7Cj4gKwl9Cj4gKwo+ICsJ dGlkc3MtPnNhdmVkX3N0YXRlID0gc3RhdGU7CgpXZSBoYXZlIGRybV9tb2RlX2NvbmZpZ19oZWxw ZXJfc3VzcGVuZCgpIGFuZCBkcm1fbW9kZV9jb25maWdfaGVscGVyX3Jlc3VtZSgpLCAKY291bGQg dGhleSBiZSB1c2VkID8KCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aWRz c19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdGlkc3NfZGV2aWNl ICp0aWRzcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJ aWYgKHRpZHNzLT5zYXZlZF9zdGF0ZSkKPiArCQlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9yZXN1 bWUodGlkc3MtPmRkZXYsIHRpZHNzLT5zYXZlZF9zdGF0ZSk7Cj4gKwo+ICsJY29uc29sZV9sb2Nr KCk7Cj4gKwlkcm1fZmJkZXZfY21hX3NldF9zdXNwZW5kKHRpZHNzLT5mYmRldiwgMCk7Cj4gKwlj b25zb2xlX3VubG9jaygpOwo+ICsKPiArCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKHRpZHNz LT5kZGV2KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKyNlbmRpZiAvKiBDT05GSUdfUE1f U0xFRVAgKi8KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0aWRzc19wbV9v cHMgPSB7Cj4gKwkucnVudGltZV9zdXNwZW5kID0gdGlkc3NfcG1fcnVudGltZV9zdXNwZW5kLAo+ ICsJLnJ1bnRpbWVfcmVzdW1lID0gdGlkc3NfcG1fcnVudGltZV9yZXN1bWUsCj4gKwlTRVRfU1lT VEVNX1NMRUVQX1BNX09QUyh0aWRzc19zdXNwZW5kLCB0aWRzc19yZXN1bWUpCj4gK307Cj4gKwo+ ICsjZW5kaWYgLyogQ09ORklHX1BNICovCj4gKwo+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICog UGxhdGZvcm0gZHJpdmVyCj4gKyAqLwo+ICsKPiArc3RhdGljIGludCB0aWRzc19wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2Owo+ICsJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3M7Cj4gKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGRldjsKPiArCWludCByZXQ7Cj4gKwlpbnQgaXJxOwo+ICsKPiArCWRldl9kYmco ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKPiArCj4gKwl0aWRzcyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqdGlkc3MpLCBHRlBfS0VSTkVMKTsKPiArCWlmICh0aWRzcyA9PSBOVUxMKQo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXRpZHNzLT5wZGV2ID0gcGRldjsKPiArCXRpZHNzLT5k ZXYgPSBkZXY7Cj4gKwl0aWRzcy0+ZmVhdCA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYp OwoKSSdkIHNwZWxsIGl0IGZlYXR1cmVzIGluc3RlYWQgb2YgZmVhdCBpZiB0aGF0J3Mgbm90IHRv byBsb25nLgoKPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0aWRzcyk7Cj4gKwo+ ICsJZGRldiA9IGRybV9kZXZfYWxsb2MoJnRpZHNzX2RyaXZlciwgZGV2KTsKPiArCWlmIChJU19F UlIoZGRldikpCj4gKwkJcmV0dXJuIFBUUl9FUlIoZGRldik7Cj4gKwo+ICsJdGlkc3MtPmRkZXYg PSBkZGV2Owo+ICsJZGRldi0+ZGV2X3ByaXZhdGUgPSB0aWRzczsKPiArCj4gKwlwbV9ydW50aW1l X2VuYWJsZShkZXYpOwo+ICsKPiArCXJldCA9IHRpZHNzLT5mZWF0LT5kaXNwY19pbml0KHRpZHNz KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXpl IGRpc3BjOiAlZFxuIiwgcmV0KTsKPiArCQlnb3RvIGVycl9kaXNhYmxlX3BtOwo+ICsJfQo+ICsK PiArI2lmbmRlZiBDT05GSUdfUE1fU0xFRVAKPiArCS8qIG5vIFBNLCBzbyBmb3JjZSBlbmFibGUg RElTUEMgKi8KPiArCXRpZHNzLT5kaXNwY19vcHMtPnJ1bnRpbWVfcmVzdW1lKHRpZHNzLT5kaXNw Yyk7Cj4gKyNlbmRpZgoKVGhpcyBzaG91bGQgcmVhbGx5IGJlIGhpZGRlbiBzb21ld2hlcmUgaW4g dGhlIFBNIGZyYW1ld29yaywgaXQncyBwcmV0dHkgdWdseSAKb3RoZXJ3aXNlIDooIE9yIHNob3Vs ZCB3ZSBkZXBlbmQgb24gQ09ORklHX1BNX1NMRUVQID8KCj4gKwlyZXQgPSB0aWRzc19tb2Rlc2V0 X2luaXQodGlkc3MpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlpZiAocmV0ICE9IC1FUFJPQkVf REVGRVIpCj4gKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgRFJNL0tNUyAoJWQpXG4i LCByZXQpOwo+ICsJCWdvdG8gZXJyX3J1bnRpbWVfc3VzcGVuZDsKPiArCX0KPiArCj4gKwlpcnEg PSBwbGF0Zm9ybV9nZXRfaXJxKHRpZHNzLT5wZGV2LCAwKTsKPiArCWlmIChpcnEgPCAwKSB7Cj4g KwkJcmV0ID0gaXJxOwo+ICsJCWRldl9lcnIoZGV2LCAicGxhdGZvcm1fZ2V0X2lycSBmYWlsZWQ6 ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyX21vZGVzZXRfY2xlYW51cDsKPiArCX0KPiArCj4g KwlyZXQgPSBkcm1faXJxX2luc3RhbGwoZGRldiwgaXJxKTsKPiArCWlmIChyZXQpIHsKPiArCQlk ZXZfZXJyKGRldiwgImRybV9pcnFfaW5zdGFsbCBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsJCWdv dG8gZXJyX21vZGVzZXRfY2xlYW51cDsKPiArCX0KPiArCj4gKyNpZmRlZiBDT05GSUdfRFJNX0ZC REVWX0VNVUxBVElPTgo+ICsJaWYgKGRkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpIHsK PiArCQlzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXY7Cj4gKwo+ICsJCWZiZGV2ID0gZHJtX2Zi ZGV2X2NtYV9pbml0KGRkZXYsIDMyLAo+ICsJCQkJCSAgIGRkZXYtPm1vZGVfY29uZmlnLm51bV9j b25uZWN0b3IpOwo+ICsJCWlmIChJU19FUlIoZmJkZXYpKSB7Cj4gKwkJCWRldl9lcnIodGlkc3Mt PmRldiwgImZiZGV2IGluaXQgZmFpbGVkXG4iKTsKPiArCQkJcmV0ID0gIFBUUl9FUlIoZmJkZXYp Owo+ICsJCQlnb3RvIGVycl9pcnFfdW5pbnN0YWxsOwo+ICsJCX0KClNob3VsZCB0aGlzIGJlIGEg bm9uLWZhdGFsIGVycm9yID8gV2UgY2FuIHN0aWxsIHVzZSB0aGUgZGlzcGxheSBldmVuIGlmIHRo ZSAKZmJkZXYgZW11bGF0aW9uIGlzbid0IGF2YWlsYWJsZS4KCj4gKwkJdGlkc3MtPmZiZGV2ID0g ZmJkZXY7Cj4gKwl9Cj4gKyNlbmRpZgo+ICsKPiArCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChk ZGV2KTsKPiArCj4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRkZXYsIDApOwo+ICsJaWYgKHJl dCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERSTSBkZXZpY2VcbiIp Owo+ICsJCWdvdG8gZXJyX3BvbGxfZmluaTsKPiArCX0KPiArCj4gKwlkZXZfZGJnKGRldiwgIiVz IGRvbmVcbiIsIF9fZnVuY19fKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9wb2xsX2Zp bmk6Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZGRldik7Cj4gKwo+ICsJaWYgKHRpZHNz LT5mYmRldikKPiArCQlkcm1fZmJkZXZfY21hX2ZpbmkodGlkc3MtPmZiZGV2KTsKPiArCj4gKwlk cm1fYXRvbWljX2hlbHBlcl9zaHV0ZG93bihkZGV2KTsKPiArCj4gKyNpZmRlZiBDT05GSUdfRFJN X0ZCREVWX0VNVUxBVElPTgo+ICtlcnJfaXJxX3VuaW5zdGFsbDoKPiArI2VuZGlmCj4gKwlkcm1f aXJxX3VuaW5zdGFsbChkZGV2KTsKPiArCj4gK2Vycl9tb2Rlc2V0X2NsZWFudXA6Cj4gKwlkcm1f bW9kZV9jb25maWdfY2xlYW51cChkZGV2KTsKPiArCj4gK2Vycl9ydW50aW1lX3N1c3BlbmQ6Cj4g KyNpZm5kZWYgQ09ORklHX1BNX1NMRUVQCj4gKwkvKiBubyBQTSwgc28gZm9yY2UgZGlzYWJsZSBE SVNQQyAqLwo+ICsJdGlkc3MtPmRpc3BjX29wcy0+cnVudGltZV9zdXNwZW5kKHRpZHNzLT5kaXNw Yyk7Cj4gKyNlbmRpZgo+ICsKPiArCXRpZHNzLT5kaXNwY19vcHMtPnJlbW92ZSh0aWRzcy0+ZGlz cGMpOwo+ICsKPiArZXJyX2Rpc2FibGVfcG06Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsK PiArCj4gKwlkcm1fZGV2X3B1dChkZGV2KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHRpZHNzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IHRpZHNz X2RldmljZSAqdGlkc3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZGV2ID0gdGlkc3MtPmRkZXY7Cj4gKwo+ICsJZGV2X2RiZyhkZXYsICIlc1xu IiwgX19mdW5jX18pOwo+ICsKPiArCWRybV9kZXZfdW5yZWdpc3RlcihkZGV2KTsKPiArCj4gKwlk cm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZGRldik7Cj4gKwo+ICsJaWYgKHRpZHNzLT5mYmRldikK PiArCQlkcm1fZmJkZXZfY21hX2ZpbmkodGlkc3MtPmZiZGV2KTsKPiArCj4gKwlkcm1fYXRvbWlj X2hlbHBlcl9zaHV0ZG93bihkZGV2KTsKPiArCj4gKwlkcm1faXJxX3VuaW5zdGFsbChkZGV2KTsK PiArCj4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZGV2KTsKPiArCj4gKyNpZm5kZWYgQ09O RklHX1BNX1NMRUVQCj4gKwkvKiBubyBQTSwgc28gZm9yY2UgZGlzYWJsZSBESVNQQyAqLwo+ICsJ dGlkc3MtPmRpc3BjX29wcy0+cnVudGltZV9zdXNwZW5kKHRpZHNzLT5kaXNwYyk7Cj4gKyNlbmRp Zgo+ICsKPiArCXRpZHNzLT5kaXNwY19vcHMtPnJlbW92ZSh0aWRzcy0+ZGlzcGMpOwo+ICsKPiAr CXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwo+ICsKPiArCWRybV9kZXZfcHV0KGRkZXYpOwo+ICsK PiArCWRldl9kYmcoZGV2LCAiJXMgZG9uZVxuIiwgX19mdW5jX18pOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aWRzc19vZl90YWJsZSk7Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aWRzc19wbGF0Zm9ybV9kcml2ZXIg PSB7Cj4gKwkucHJvYmUJCT0gdGlkc3NfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IHRpZHNzX3JlbW92 ZSwKPiArCS5kcml2ZXIJCT0gewo+ICsJCS5uYW1lCT0gInRpZHNzIiwKPiArI2lmZGVmIENPTkZJ R19QTQo+ICsJCS5wbQk9ICZ0aWRzc19wbV9vcHMsCj4gKyNlbmRpZgo+ICsJCS5vZl9tYXRjaF90 YWJsZSA9IHRpZHNzX29mX3RhYmxlLAo+ICsJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwK PiArCX0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHRpZHNzX3BsYXRmb3Jt X2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJUb21pIFZhbGtlaW5lbiA8dG9taS52YWxr ZWluZW5AdGkuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlRJIEtleXN0b25lIERTUyBE cml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmgKPiBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90 aWRzc19kcnYuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZmQx ZTc2N2U5MzA4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90 aWRzc19kcnYuaAo+IEBAIC0wLDAgKzEsNDEgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIEluc3Ry dW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwo+ICsgKiBBdXRob3I6IFRv bWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRl ZiBfX1RJRFNTX0RSVl9IX18KPiArI2RlZmluZSBfX1RJRFNTX0RSVl9IX18KPiArCj4gKyNpbmNs dWRlIDxsaW51eC9zcGlubG9jay5oPgo+ICsKPiArc3RydWN0IHRpZHNzX2RldmljZSB7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXY7CQkvKiBVbmRlcmx5aW5nIERTUyBkZXZpY2UgKi8KPiArCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CS8qIFVuZGVybHlpbmcgRFNTIHBsYXRmb3JtIGRldmlj ZSAqLwoKRG8gd2UgbmVlZCB0byBzdG9yZSBib3RoID8gQ2FuJ3Qgd2Ugc3RvcmUgZGV2IG9ubHks IGFuZCBjYXN0IGl0IHRvIApwbGF0Zm9ybV9kZXZpY2UgaW4gdGhlIG9ubHkgbG9jYXRpb24gdGhh dCBuZWVkcyBpdCA/Cgo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7CS8qIERSTSBkZXZpY2Ug Zm9yIERTUyAqLwo+ICsKPiArCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKPiArCj4gKwlz dHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYzsKPiArCWNvbnN0IHN0cnVjdCBkaXNwY19vcHMgKmRp c3BjX29wczsKPiArCj4gKwljb25zdCBzdHJ1Y3QgdGlkc3NfZmVhdHVyZXMgKmZlYXQ7Cj4gKwo+ ICsJdTMyIG51bV9jcnRjczsKCkkgdGhpbmsgdW5zaWduZWRfaW50IHNob3VsZCBiZSBtb3JlIHRo YW4gZW5vdWdoLgoKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y3NbOF07CgpEbyB5b3UgcGxhbiB0 byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIDggQ1JUQ3MgPwoKPiArCj4gKwl1MzIgbnVtX3BsYW5l czsKPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lc1s4XTsKPiArCj4gKwlzcGlubG9ja190IHdh aXRfbG9jazsJLyogcHJvdGVjdHMgdGhlIGlycSBtYXNrcyAqLwo+ICsJdTY0IGlycV9tYXNrOwkJ LyogZW5hYmxlZCBpcnFzIGluIGFkZGl0aW9uIHRvIHdhaXRfbGlzdCAqLwo+ICsJdTY0IGlycV91 Zl9tYXNrOwkvKiB1bmRlcmZsb3cgaXJxIGJpdHMgZm9yIGFsbCBwbGFuZXMgKi8KPiArCj4gKwlz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc2F2ZWRfc3RhdGU7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg dGlkc3NfZmVhdHVyZXMgewo+ICsJaW50ICgqZGlzcGNfaW5pdCkoc3RydWN0IHRpZHNzX2Rldmlj ZSAqdGlkc3MpOwo+ICt9Owo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS90aWRzcy90aWRzc19lbmNvZGVyLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19lbmNvZGVyLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmZi N2JjM2ZjMGZlOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3Mv dGlkc3NfZW5jb2Rlci5jCj4gQEAgLTAsMCArMSwxMDEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIElu c3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwo+ICsgKiBBdXRob3I6 IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+Cj4gKyAqLwo+ICsKPiArI2lu Y2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2Yu aD4KPiArCj4gKyNpbmNsdWRlICJ0aWRzc19kcnYuaCIKPiArI2luY2x1ZGUgInRpZHNzX2VuY29k ZXIuaCIKPiArI2luY2x1ZGUgInRpZHNzX2NydGMuaCIKPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+ICsgKiBFbmNvZGVyCj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgdGlkc3NfZW5jb2Rlcl9k aXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRkZXYgPSBlbmNvZGVyLT5kZXY7Cj4gKwo+ICsJZGV2X2RiZyhkZGV2LT5kZXYsICIl c1xuIiwgX19mdW5jX18pOwo+ICsKCkV4dHJhIGJsYW5rIGxpbmUuCgo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB0aWRzc19lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gZW5jb2Rlci0+ZGV2Owo+ICsKPiAr CWRldl9kYmcoZGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKPiArCgpIZXJlIHRvby4KCj4g K30KClRoZSBlbmNvZGVyIGVuYWJsZSBhbmQgZGlzYWJsZSBmdW5jdGlvbnMgYXJlIG9wdGlvbmFs LgoKPiArc3RhdGljIGludCB0aWRzc19lbmNvZGVyX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsCj4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCj4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0 ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBlbmNvZGVyLT5kZXY7Cj4gKwlz dHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSAqdGNydGNfc3RhdGUgPSB0b190aWRzc19jcnRjX3N0YXRl KGNydGNfc3RhdGUpOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRpID0gJmNvbm5fc3Rh dGUtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOwo+ICsKPiArCWRldl9kYmcoZGRldi0+ZGV2LCAi JXNcbiIsIF9fZnVuY19fKTsKPiArCj4gKwkvLyBYWFggYW55IGNsZWFuZXIgd2F5IHRvIHNldCBi dXMgZm9ybWF0IGFuZCBmbGFncz8KCk5vdCB0aGF0IEkga25vdyBvZiA6LS8gSmFjb3BvIChDQydl ZCkgc3RhcnRlZCB3b3JraW5nIG9uIHN1cHBvcnQgZm9yIGJ1cyAKZm9ybWF0cyBpbiBicmlkZ2Ug ZHJpdmVycywgd2hpY2ggeW91IG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCgpUaGlzIGJlaW5nIHNh aWQsIHdoeSBkbyB5b3UgbmVlZCB0byBzdG9yZSB0aGVtIGluIHRoZSBDUlRDIHN0YXRlLCBjYW4n dCB5b3UgCmFjY2VzcyB0aGVtIGRpcmVjdGx5IGluIHRoZSB0d28gbG9jYXRpb25zIHdoZXJlIHRo ZXkncmUgdXNlZCA/Cgo+ICsJdGNydGNfc3RhdGUtPmJ1c19mb3JtYXQgPSBkaS0+YnVzX2Zvcm1h dHNbMF07Cj4gKwl0Y3J0Y19zdGF0ZS0+YnVzX2ZsYWdzID0gZGktPmJ1c19mbGFnczsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlkc3NfZW5jb2Rlcl9tb2RlX3Nl dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq Y29ubl9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBlbmNvZGVyLT5k ZXY7Cj4gKwo+ICsJZGV2X2RiZyhkZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwo+ICsKCkV4 dHJhIGJsYW5rIGxpbmUuCj4gK30KClRoaXMgZnVuY3Rpb24gaXMgb3B0aW9uYWwgdG9vLgoKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGVuY29kZXJf aGVscGVyX2Z1bmNzID0gewo+ICsJLmF0b21pY19tb2RlX3NldCA9IHRpZHNzX2VuY29kZXJfbW9k ZV9zZXQsCj4gKwkuZGlzYWJsZSA9IHRpZHNzX2VuY29kZXJfZGlzYWJsZSwKPiArCS5lbmFibGUg PSB0aWRzc19lbmNvZGVyX2VuYWJsZSwKPiArCS5hdG9taWNfY2hlY2sgPSB0aWRzc19lbmNvZGVy X2F0b21pY19jaGVjaywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29k ZXJfZnVuY3MgZW5jb2Rlcl9mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xl YW51cCwKPiArfTsKPiArCj4gK3N0cnVjdCB0aWRzc19lbmNvZGVyICp0aWRzc19lbmNvZGVyX2Ny ZWF0ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcywKPiArCQkJCQkgICB1MzIgZW5jb2Rlcl90 eXBlLCB1MzIgcG9zc2libGVfY3J0Y3MpCj4gK3sKPiArCXN0cnVjdCB0aWRzc19lbmNvZGVyICp0 ZW5jOwo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXRl bmMgPSBkZXZtX2t6YWxsb2ModGlkc3MtPmRldiwgc2l6ZW9mKCp0ZW5jKSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIXRlbmMpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJZW5j ID0gJnRlbmMtPmVuY29kZXI7Cj4gKwllbmMtPnBvc3NpYmxlX2NydGNzID0gcG9zc2libGVfY3J0 Y3M7Cj4gKwo+ICsJcmV0ID0gZHJtX2VuY29kZXJfaW5pdCh0aWRzcy0+ZGRldiwgZW5jLCAmZW5j b2Rlcl9mdW5jcywKPiArCQkJICAgICAgIGVuY29kZXJfdHlwZSwgTlVMTCk7Cj4gKwlpZiAocmV0 IDwgMCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArCWRybV9lbmNvZGVyX2hlbHBl cl9hZGQoZW5jLCAmZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCWRldl9kYmcodGlkc3Mt PmRldiwgIkVuY29kZXIgY3JlYXRlIGRvbmVcbiIpOwo+ICsKPiArCXJldHVybiB0ZW5jOwo+ICt9 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19lbmNvZGVyLmgKPiBi L2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19lbmNvZGVyLmggbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmYxYmQwNWEzZjYxMQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZW5jb2Rlci5oCj4gQEAgLTAsMCArMSwy MiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0 cDovL3d3dy50aS5jb20vCj4gKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2Vp bmVuQHRpLmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fVElEU1NfRU5DT0RFUl9IX18KPiAr I2RlZmluZSBfX1RJRFNTX0VOQ09ERVJfSF9fCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9lbmNv ZGVyLmg+Cj4gKwo+ICtzdHJ1Y3QgdGlkc3NfZGV2aWNlOwo+ICtzdHJ1Y3QgdGlkc3NfY3J0YzsK PiArCj4gK3N0cnVjdCB0aWRzc19lbmNvZGVyIHsKPiArCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNv ZGVyOwo+ICt9Owo+ICsKCkRvIHlvdSBuZWVkIGEgdGlkc3NfZW5jb2RlciBzdHJ1Y3R1cmUgYXQg YWxsID8KCj4gK3N0cnVjdCB0aWRzc19lbmNvZGVyICp0aWRzc19lbmNvZGVyX2NyZWF0ZShzdHJ1 Y3QgdGlkc3NfZGV2aWNlICp0aWRzcywKPiArCQkJCQkgICB1MzIgZW5jb2Rlcl90eXBlLCB1MzIg cG9zc2libGVfY3J0Y3MpOwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS90aWRzcy90aWRzc19pcnEuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2ly cS5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wN2M0ZTFmMDky NGUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2ly cS5jCj4gQEAgLTAsMCArMSwxOTMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIEluc3RydW1lbnRzIElu Y29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwo+ICsgKiBBdXRob3I6IFRvbWkgVmFsa2Vp bmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSAidGlkc3NfaXJxLmgiCj4gKyNpbmNsdWRlICJ0aWRzc19k cnYuaCIKPiArI2luY2x1ZGUgInRpZHNzX2Rpc3BjLmgiCj4gKyNpbmNsdWRlICJ0aWRzc19jcnRj LmgiCj4gKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgo+ICsKPiArLyogY2FsbCB3aXRoIHdhaXRf bG9jayBhbmQgZGlzcGMgcnVudGltZSBoZWxkICovCj4gK3N0YXRpYyB2b2lkIHRpZHNzX2lycV91 cGRhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCj4gK3sKPiArCXN0cnVjdCB0aWRzc19kZXZp Y2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJYXNzZXJ0X3NwaW5fbG9ja2Vk KCZ0aWRzcy0+d2FpdF9sb2NrKTsKPiArCj4gKwl0aWRzcy0+ZGlzcGNfb3BzLT53cml0ZV9pcnFl bmFibGUodGlkc3MtPmRpc3BjLCB0aWRzcy0+aXJxX21hc2spOwo+ICt9Cj4gKwo+ICt2b2lkIHRp ZHNzX2lycV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3Ry dWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgdGlkc3NfZGV2aWNl ICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRj ID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKPiArCXUzMiBod192aWRlb3BvcnQgPSB0Y3J0Yy0+aHdf dmlkZW9wb3J0Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmdGlkc3MtPndhaXRfbG9jaywgZmxhZ3MpOwo+ICsJdGlkc3MtPmlycV9tYXNrIHw9IERT U19JUlFfVlBfVlNZTkNfRVZFTihod192aWRlb3BvcnQpIHwKPiArCQkJICAgRFNTX0lSUV9WUF9W U1lOQ19PREQoaHdfdmlkZW9wb3J0KTsKPiArCXRpZHNzX2lycV91cGRhdGUoZGRldik7Cj4gKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7Cj4gK30KPiAr Cj4gK3ZvaWQgdGlkc3NfaXJxX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3Qg dGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHRpZHNz X2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKPiArCXUzMiBod192aWRlb3BvcnQg PSB0Y3J0Yy0+aHdfdmlkZW9wb3J0Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlz cGluX2xvY2tfaXJxc2F2ZSgmdGlkc3MtPndhaXRfbG9jaywgZmxhZ3MpOwo+ICsJdGlkc3MtPmly cV9tYXNrICY9IH4oRFNTX0lSUV9WUF9WU1lOQ19FVkVOKGh3X3ZpZGVvcG9ydCkgfAo+ICsJCQkg ICAgIERTU19JUlFfVlBfVlNZTkNfT0REKGh3X3ZpZGVvcG9ydCkpOwo+ICsJdGlkc3NfaXJxX3Vw ZGF0ZShkZGV2KTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpZHNzLT53YWl0X2xvY2ss IGZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlkc3NfaXJxX2ZpZm9fdW5kZXJmbG93 KHN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzLAo+ICsJCQkJICAgICB1NjQgaXJxc3RhdHVzKQo+ ICt7Cj4gKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShfcnMsIERFRkFVTFRfUkFURUxJ TUlUX0lOVEVSVkFMLAo+ICsJCQkJICAgICAgREVGQVVMVF9SQVRFTElNSVRfQlVSU1QpOwo+ICsJ dW5zaWduZWQgaW50IGk7Cj4gKwl1NjQgbWFza2VkOwo+ICsKPiArCXNwaW5fbG9jaygmdGlkc3Mt PndhaXRfbG9jayk7Cj4gKwltYXNrZWQgPSBpcnFzdGF0dXMgJiB0aWRzcy0+aXJxX3VmX21hc2sg JiB0aWRzcy0+aXJxX21hc2s7CgpDYW4geW91IGhhdmUgaXJxX3VmX21hc2sgYml0cyB0aGF0IGFy ZSBub3Qgc2V0IGluIGlycV9tYXNrID8KCj4gKwlzcGluX3VubG9jaygmdGlkc3MtPndhaXRfbG9j ayk7Cj4gKwo+ICsJaWYgKCFtYXNrZWQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghX19yYXRl bGltaXQoJl9ycykpCj4gKwkJcmV0dXJuOwo+ICsKPiArCURSTV9FUlJPUigiRklGTyB1bmRlcmZs b3cgb24gIik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IERTU19NQVhfUExBTkVTOyArK2kpIHsK PiArCQlpZiAobWFza2VkICYgRFNTX0lSUV9QTEFORV9GSUZPX1VOREVSRkxPVyhpKSkKPiArCQkJ cHJfY29udCgiJXU6JXMgIiwgaSwKPiArCQkJCXRpZHNzLT5kaXNwY19vcHMtPnBsYW5lX25hbWUo dGlkc3MtPmRpc3BjLCBpKSk7Cj4gKwl9Cj4gKwo+ICsJcHJfY29udCgiKCUwMTZsbHgpXG4iLCBp cnFzdGF0dXMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aWRzc19pcnFfb2NwX2Vycm9yX2hh bmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsCj4gKwkJCQkJdTY0IGlycXN0YXR1cykKPiAr ewo+ICsJaWYgKGlycXN0YXR1cyAmIERTU19JUlFfREVWSUNFX09DUF9FUlIpCj4gKwkJZGV2X2Vy cl9yYXRlbGltaXRlZChkZGV2LT5kZXYsICJPQ1AgZXJyb3JcbiIpOwo+ICt9Cj4gKwo+ICtpcnFy ZXR1cm5fdCB0aWRzc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKPiArCXN0 cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwl1bnNpZ25l ZCBpbnQgaWQ7Cj4gKwl1NjQgaXJxc3RhdHVzOwo+ICsKPiArCWlmIChXQVJOX09OKCFkZGV2LT5p cnFfZW5hYmxlZCkpCj4gKwkJcmV0dXJuIElSUV9OT05FOwo+ICsKPiArCWlycXN0YXR1cyA9IHRp ZHNzLT5kaXNwY19vcHMtPnJlYWRfYW5kX2NsZWFyX2lycXN0YXR1cyh0aWRzcy0+ZGlzcGMpOwo+ ICsKPiArCWZvciAoaWQgPSAwOyBpZCA8IHRpZHNzLT5udW1fY3J0Y3M7IGlkKyspIHsKPiArCQlz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSB0aWRzcy0+Y3J0Y3NbaWRdOwo+ICsJCXN0cnVjdCB0aWRz c19jcnRjICp0Y3J0YyA9IHRvX3RpZHNzX2NydGMoY3J0Yyk7Cj4gKwkJdTMyIGh3X3ZpZGVvcG9y dCA9IHRjcnRjLT5od192aWRlb3BvcnQ7Cj4gKwo+ICsJCWlmIChpcnFzdGF0dXMgJiAoRFNTX0lS UV9WUF9WU1lOQ19FVkVOKGh3X3ZpZGVvcG9ydCkgfAo+ICsJCQkJIERTU19JUlFfVlBfVlNZTkNf T0REKGh3X3ZpZGVvcG9ydCkpKQo+ICsJCQl0aWRzc19jcnRjX3ZibGFua19pcnEoY3J0Yyk7Cj4g Kwo+ICsJCWlmIChpcnFzdGF0dXMgJiAoRFNTX0lSUV9WUF9GUkFNRV9ET05FKGh3X3ZpZGVvcG9y dCkpKQo+ICsJCQl0aWRzc19jcnRjX2ZyYW1lZG9uZV9pcnEoY3J0Yyk7Cj4gKwo+ICsJCWlmIChp cnFzdGF0dXMgJiBEU1NfSVJRX1ZQX1NZTkNfTE9TVChod192aWRlb3BvcnQpKQo+ICsJCQl0aWRz c19jcnRjX2Vycm9yX2lycShjcnRjLCBpcnFzdGF0dXMpOwo+ICsJfQo+ICsKPiArCXRpZHNzX2ly cV9vY3BfZXJyb3JfaGFuZGxlcihkZGV2LCBpcnFzdGF0dXMpOwo+ICsJdGlkc3NfaXJxX2ZpZm9f dW5kZXJmbG93KHRpZHNzLCBpcnFzdGF0dXMpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsK PiArfQo+ICsKPiArdm9pZCB0aWRzc19pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAq ZGRldikKPiArewo+ICsJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJp dmF0ZTsKPiArCj4gKwlzcGluX2xvY2tfaW5pdCgmdGlkc3MtPndhaXRfbG9jayk7Cj4gKwo+ICsJ dGlkc3MtPmRpc3BjX29wcy0+cnVudGltZV9nZXQodGlkc3MtPmRpc3BjKTsKPiArCj4gKwl0aWRz cy0+ZGlzcGNfb3BzLT53cml0ZV9pcnFlbmFibGUodGlkc3MtPmRpc3BjLCAwKTsKPiArCXRpZHNz LT5kaXNwY19vcHMtPnJlYWRfYW5kX2NsZWFyX2lycXN0YXR1cyh0aWRzcy0+ZGlzcGMpOwo+ICsK PiArCXRpZHNzLT5kaXNwY19vcHMtPnJ1bnRpbWVfcHV0KHRpZHNzLT5kaXNwYyk7Cj4gK30KPiAr Cj4gK2ludCB0aWRzc19pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCj4g K3sKPiArCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7Cj4g Kwl1bnNpZ25lZCBpbnQgaTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJdGlkc3Mt PmRpc3BjX29wcy0+cnVudGltZV9nZXQodGlkc3MtPmRpc3BjKTsKPiArCj4gKwlzcGluX2xvY2tf aXJxc2F2ZSgmdGlkc3MtPndhaXRfbG9jaywgZmxhZ3MpOwo+ICsKPiArCXRpZHNzLT5pcnFfbWFz ayA9IERTU19JUlFfREVWSUNFX09DUF9FUlI7Cj4gKwo+ICsJdGlkc3MtPmlycV91Zl9tYXNrID0g MDsKPiArCWZvciAoaSA9IDA7IGkgPCB0aWRzcy0+bnVtX3BsYW5lczsgKytpKSB7Cj4gKwkJc3Ry dWN0IHRpZHNzX3BsYW5lICp0cGxhbmUgPSB0b190aWRzc19wbGFuZSh0aWRzcy0+cGxhbmVzW2ld KTsKPiArCj4gKwkJdGlkc3MtPmlycV91Zl9tYXNrIHw9IERTU19JUlFfUExBTkVfRklGT19VTkRF UkZMT1codHBsYW5lLT5od19wbGFuZV9pZCk7Cj4gKwl9Cj4gKwl0aWRzcy0+aXJxX21hc2sgfD0g dGlkc3MtPmlycV91Zl9tYXNrOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB0aWRzcy0+bnVtX2Ny dGNzOyArK2kpIHsKPiArCQlzdHJ1Y3QgdGlkc3NfY3J0YyAqdGNydGMgPSB0b190aWRzc19jcnRj KHRpZHNzLT5jcnRjc1tpXSk7Cj4gKwo+ICsJCXRpZHNzLT5pcnFfbWFzayB8PSBEU1NfSVJRX1ZQ X1NZTkNfTE9TVCh0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKPiArCj4gKwkJdGlkc3MtPmlycV9tYXNr IHw9IERTU19JUlFfVlBfRlJBTUVfRE9ORSh0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKPiArCX0KPiAr Cj4gKwl0aWRzc19pcnFfdXBkYXRlKGRkZXYpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnRpZHNzLT53YWl0X2xvY2ssIGZsYWdzKTsKPiArCj4gKwl0aWRzcy0+ZGlzcGNfb3BzLT5y dW50aW1lX3B1dCh0aWRzcy0+ZGlzcGMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2 b2lkIHRpZHNzX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCj4gK3sKPiAr CXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJ dGlkc3MtPmRpc3BjX29wcy0+cnVudGltZV9nZXQodGlkc3MtPmRpc3BjKTsKPiArCXRpZHNzLT5k aXNwY19vcHMtPndyaXRlX2lycWVuYWJsZSh0aWRzcy0+ZGlzcGMsIDApOwo+ICsJdGlkc3MtPmRp c3BjX29wcy0+cnVudGltZV9wdXQodGlkc3MtPmRpc3BjKTsKPiArfQo+ICsKPiArdm9pZCB0aWRz c19pcnFfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdGlk c3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOwo+ICsJdW5zaWduZWQgbG9uZyBm bGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGlkc3MtPndhaXRfbG9jaywgZmxhZ3Mp Owo+ICsJdGlkc3NfaXJxX3VwZGF0ZShkZGV2KTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnRpZHNzLT53YWl0X2xvY2ssIGZsYWdzKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdGlkc3MvdGlkc3NfaXJxLmgKPiBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19p cnEuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTE1MDcyOThj OWQ4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19p cnEuaAo+IEBAIC0wLDAgKzEsMjUgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIEluc3RydW1lbnRz IEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwo+ICsgKiBBdXRob3I6IFRvbWkgVmFs a2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1RJ RFNTX0lSUV9IX18KPiArI2RlZmluZSBfX1RJRFNTX0lSUV9IX18KPiArCj4gKyNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgo+ICsKPiArc3RydWN0IGRybV9jcnRjOwo+ICtzdHJ1Y3QgZHJtX2Rldmlj ZTsKPiArCj4gK3ZvaWQgdGlkc3NfaXJxX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpj cnRjKTsKPiArdm9pZCB0aWRzc19pcnFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpj cnRjKTsKPiArCj4gK3ZvaWQgdGlkc3NfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2Ug KmRkZXYpOwo+ICtpbnQgdGlkc3NfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2KTsKPiArdm9pZCB0aWRzc19pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2 KTsKPiAraXJxcmV0dXJuX3QgdGlkc3NfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKTsK PiArCj4gK3ZvaWQgdGlkc3NfaXJxX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldik7Cj4g Kwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2tt cy5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmMgbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNkMDAzZjE1NjljZAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmMKPiBAQCAtMCwwICsxLDg1 IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8v d3d3LnRpLmNvbS8KPiArICogQXV0aG9yOiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5A dGkuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CgpUaGlzIGlzIG5lYXJseSBhbHBoYWJldGljYWxseSBv cmRlcmVkIDotKQoKPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5o Pgo+ICsKPiArI2luY2x1ZGUgInRpZHNzX2NydGMuaCIKPiArI2luY2x1ZGUgInRpZHNzX2Rydi5o Igo+ICsjaW5jbHVkZSAidGlkc3NfZW5jb2Rlci5oIgo+ICsjaW5jbHVkZSAidGlkc3Nfa21zLmgi Cj4gKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgo+ICsKPiArc3RhdGljIHZvaWQgdGlkc3NfYXRv bWljX2NvbW1pdF90YWlsKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4gK3sK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gb2xkX3N0YXRlLT5kZXY7Cj4gKwlzdHJ1Y3Qg dGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWRldl9kYmco ZGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKPiArCj4gKwl0aWRzcy0+ZGlzcGNfb3BzLT5y dW50aW1lX2dldCh0aWRzcy0+ZGlzcGMpOwo+ICsKPiArCWRybV9hdG9taWNfaGVscGVyX2NvbW1p dF9tb2Rlc2V0X2Rpc2FibGVzKGRkZXYsIG9sZF9zdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfcGxhbmVzKGRkZXYsIG9sZF9zdGF0ZSwgMCk7Cj4gKwlkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRkZXYsIG9sZF9zdGF0ZSk7Cj4gKwo+ICsJZHJtX2F0 b21pY19oZWxwZXJfY29tbWl0X2h3X2RvbmUob2xkX3N0YXRlKTsKPiArCWRybV9hdG9taWNfaGVs cGVyX3dhaXRfZm9yX2ZsaXBfZG9uZShkZGV2LCBvbGRfc3RhdGUpOwo+ICsKPiArCWRybV9hdG9t aWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRkZXYsIG9sZF9zdGF0ZSk7Cj4gKwo+ICsJdGlkc3Mt PmRpc3BjX29wcy0+cnVudGltZV9wdXQodGlkc3MtPmRpc3BjKTsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzIG1vZGVfY29uZmlnX2hl bHBlcl9mdW5jcyA9Cj4geyArCS5hdG9taWNfY29tbWl0X3RhaWwgPSB0aWRzc19hdG9taWNfY29t bWl0X3RhaWwsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZp Z19mdW5jcyBtb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiArCS5mYl9jcmVhdGUgPSBkcm1fZ2VtX2Zi X2NyZWF0ZSwKPiArCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiAr CS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAo+ICt9Owo+ICsKPiAr aW50IHRpZHNzX21vZGVzZXRfaW5pdChzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcykKPiArewo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSB0aWRzcy0+ZGRldjsKPiArCWludCByZXQ7Cj4g KwlpbnQgaTsKCmkgbmV2ZXIgdGFrZXMgbmVnYXRpdmUgdmFsdWVzLCB5b3UgY2FuIG1ha2UgaXQg YW4gdW5zaWduZWQgaW50LgoKPiArCj4gKwlkZXZfZGJnKHRpZHNzLT5kZXYsICIlc1xuIiwgX19m dW5jX18pOwo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRkZXYpOwo+ICsKPiArCWRkZXYt Pm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDg7Cj4gKwlkZGV2LT5tb2RlX2NvbmZpZy5taW5faGVp Z2h0ID0gODsKPiArCWRkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDgwOTY7Cj4gKwlkZGV2 LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gODA5NjsKPiArCWRkZXYtPm1vZGVfY29uZmlnLmZ1 bmNzID0gJm1vZGVfY29uZmlnX2Z1bmNzOwo+ICsJZGRldi0+bW9kZV9jb25maWcuaGVscGVyX3By aXZhdGUgPSAmbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzOwo+ICsKPiArCXJldCA9IHRpZHNzLT5k aXNwY19vcHMtPm1vZGVzZXRfaW5pdCh0aWRzcy0+ZGlzcGMpOwoKSSdtIG5vdCB0b28gZm9uZCBv ZiBoaWRpbmcgdGhlIERSTSBlbmNvZGVyIGFuZCBEUk0gYnJpZGdlIGluc3RhbnRpYXRpb24gY29k ZSAKaW4gdGhlIGRpc3BjIGxheWVyLiBXb3VsZCB0aGVyZSBiZSBhIHdheSB0byBtb3ZlIGl0IGhl cmUgPwoKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBkcm1fdmJs YW5rX2luaXQoZGRldiwgdGlkc3MtPm51bV9jcnRjcyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVy biByZXQ7Cj4gKwo+ICsJLyogU3RhcnQgd2l0aCB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnJ1cHQg cmVwb3J0aW5nIGRpc2FibGVkLiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IHRpZHNzLT5udW1fY3J0 Y3M7ICsraSkKPiArCQlkcm1fY3J0Y192YmxhbmtfcmVzZXQodGlkc3MtPmNydGNzW2ldKTsKPiAr Cj4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGRldik7Cj4gKwo+ICsJZGV2X2RiZyh0aWRzcy0+ ZGV2LCAiJXMgZG9uZVxuIiwgX19mdW5jX18pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19rbXMuaAo+IGIvZHJpdmVycy9n cHUvZHJtL3RpZHNzL3RpZHNzX2ttcy5oIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi45MjdiNTdiMDU4MjcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3RpZHNzL3RpZHNzX2ttcy5oCj4gQEAgLTAsMCArMSwxNCBAQAo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCj4g KyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KPiArICov Cj4gKwo+ICsjaWZuZGVmIF9fVElEU1NfS01TX0hfXwo+ICsjZGVmaW5lIF9fVElEU1NfS01TX0hf Xwo+ICsKPiArc3RydWN0IHRpZHNzX2RldmljZTsKPiArCj4gK2ludCB0aWRzc19tb2Rlc2V0X2lu aXQoc3RydWN0IHRpZHNzX2RldmljZSAqcmNkdSk7CgpOb3cgSSB3b25kZXIgd2hpY2ggZHJpdmVy IHlvdSB1c2VkIGFzIGEgbW9kZWwgdG8gZGV2ZWxvcCB0aGlzIG9uZSA7LSkKCj4gKwo+ICsjZW5k aWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX3BsYW5lLmMKPiBi L2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi41MzljM2FlNzA2ZGUKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX3BsYW5lLmMKPiBAQCAtMCwwICsxLDE4NiBA QAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3 dy50aS5jb20vCj4gKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRp LmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBl ci5oPgo+ICsKPiArI2luY2x1ZGUgInRpZHNzX2NydGMuaCIKPiArI2luY2x1ZGUgInRpZHNzX2Ry di5oIgo+ICsjaW5jbHVkZSAidGlkc3NfcGxhbmUuaCIKPiArCj4gK3N0YXRpYyBpbnQgdGlkc3Nf cGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJCQkJICAgIHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGRldiA9IHBsYW5lLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRldl9kYmcoZGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19f KTsKPiArCj4gKwlpZiAoIXN0YXRlLT5jcnRjKSB7Cj4gKwkJLyoKPiArCQkgKiBUaGUgdmlzaWJs ZSBmaWVsZCBpcyBub3QgcmVzZXQgYnkgdGhlIERSTSBjb3JlIGJ1dCBvbmx5Cj4gKwkJICogdXBk YXRlZCBieSBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3N0YXRlKCksIHNldCBpdCBtYW51YWxseS4K PiArCQkgKi8KClNvIGl0J3MgYXQgbGVhc3QgdHdvIGRyaXZlcnMgc3VmZmVyaW5nIGZyb20gdGhp cy4gQ291bGQgd2UgZml4IGl0IGluIHRoZSBEUk0gCmNvcmUgPwoKPiArCQlzdGF0ZS0+dmlzaWJs ZSA9IGZhbHNlOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWNydGNfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOwo+ICsJaWYg KElTX0VSUihjcnRjX3N0YXRlKSkKPiArCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiAr Cj4gKwkvKiBYWFggVE9ETzogY2hlY2sgc2NhbGluZyB2aWEgZGlzcGNfb3BzICovCj4gKwo+ICsJ cmV0ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGNfc3Rh dGUsCj4gKwkJCQkJCSAgMCwKPiArCQkJCQkJICBJTlRfTUFYLAo+ICsJCQkJCQkgIHRydWUsIHRy dWUpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAoIXN0YXRl LT52aXNpYmxlKQo+ICsJCXJldHVybiAwOwo+ICsKClRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIG5l ZWRlZC4gWW91IGNvdWxkIHRoZW4ganVzdCByZXR1cm4gCmRybV9hdG9taWNfaGVscGVyX2NoZWNr X3BsYW5lX3N0YXRlKC4uLik7LgoKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCB0aWRzc19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJ CQkJICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGRldiA9IHBsYW5lLT5kZXY7Cj4gKwlzdHJ1Y3QgdGlkc3NfZGV2aWNl ICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHRpZHNzX3BsYW5lICp0cGxh bmUgPSB0b190aWRzc19wbGFuZShwbGFuZSk7Cj4gKwlzdHJ1Y3QgdGlkc3NfcGxhbmVfaW5mbyBp bmZvOwo+ICsJaW50IHJldDsKPiArCXUzMiBod192aWRlb3BvcnQ7CgpIb3cgYWJvdXQgbW92aW5n IHRoZXNlIHR3byBkb3duIGFmdGVyIHRoZSBzdHJ1Y3QgdmFyaWFibGVzID8KCj4gKwlzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKPiArCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOwo+ICsJdWludDMyX3QgeCwgeTsKCnUzMiA/Cgo+ICsJ c3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqZ2VtOwo+ICsKPiArCWRldl9kYmcoZGRldi0+ZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsKPiArCj4gKwlpZiAoIXN0YXRlLT52aXNpYmxlKSB7Cj4gKwkJ dGlkc3MtPmRpc3BjX29wcy0+cGxhbmVfZW5hYmxlKHRpZHNzLT5kaXNwYywgdHBsYW5lLT5od19w bGFuZV9pZCwKPiArCQkJCQkgICAgICAgZmFsc2UpOwo+ICsJCXJldHVybjsKPiArCX0KClRoaXMg dG9vIG1pZ2h0IGJlIGEgY2FuZGlkYXRlIGZvciBoYW5kbGluZyBpbiB0aGUgRFJNIGNvcmUuCgo+ ICsJaHdfdmlkZW9wb3J0ID0gdG9fdGlkc3NfY3J0YyhzdGF0ZS0+Y3J0YyktPmh3X3ZpZGVvcG9y dDsKPiArCj4gKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CgpZb3UgY2FuIGdldCBy aWQgb2YgdGhpcyBieSB6ZXJvaW5nIHRoZSB2YXJpYWJsZSB3aGVuIGRlY2xhcmluZyBpdC4KCj4g Kwo+ICsJaW5mby5mb3VyY2MJPSBmYi0+Zm9ybWF0LT5mb3JtYXQ7Cj4gKwlpbmZvLnBvc194ICAg ICAgPSBzdGF0ZS0+Y3J0Y194Owo+ICsJaW5mby5wb3NfeSAgICAgID0gc3RhdGUtPmNydGNfeTsK PiArCWluZm8ub3V0X3dpZHRoICA9IHN0YXRlLT5jcnRjX3c7Cj4gKwlpbmZvLm91dF9oZWlnaHQg PSBzdGF0ZS0+Y3J0Y19oOwo+ICsJaW5mby53aWR0aCAgICAgID0gc3RhdGUtPnNyY193ID4+IDE2 Owo+ICsJaW5mby5oZWlnaHQgICAgID0gc3RhdGUtPnNyY19oID4+IDE2Owo+ICsJaW5mby56b3Jk ZXIJPSBzdGF0ZS0+enBvczsKPiArCj4gKwl4ID0gc3RhdGUtPnNyY194ID4+IDE2Owo+ICsJeSA9 IHN0YXRlLT5zcmNfeSA+PiAxNjsKPiArCj4gKwlnZW0gPSBkcm1fZmJfY21hX2dldF9nZW1fb2Jq KGZiLCAwKTsKPiArCj4gKwlpbmZvLnBhZGRyID0gZ2VtLT5wYWRkciArIGZiLT5vZmZzZXRzWzBd ICsgeCAqIGZiLT5mb3JtYXQtPmNwcFswXSArCj4gKwkJICAgICB5ICogZmItPnBpdGNoZXNbMF07 Cj4gKwo+ICsJaW5mby5mYl93aWR0aCAgPSBmYi0+cGl0Y2hlc1swXSAvIGZiLT5mb3JtYXQtPmNw cFswXTsKPiArCj4gKwlpZiAoZmItPmZvcm1hdC0+bnVtX3BsYW5lcyA9PSAyKSB7Cj4gKwkJZ2Vt ID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMSk7Cj4gKwo+ICsJCWluZm8ucF91dl9hZGRy ID0gZ2VtLT5wYWRkciArCj4gKwkJCQkgZmItPm9mZnNldHNbMF0gKwoKU2hvdWxkbid0IHRoaXMg YmUgb2Zmc2V0c1sxXSA/Cgo+ICsJCQkJICh4ICogZmItPmZvcm1hdC0+Y3BwWzBdIC8gZmItPmZv cm1hdC0+aHN1YikgKwo+ICsJCQkJICh5ICogZmItPnBpdGNoZXNbMF0gLyBmYi0+Zm9ybWF0LT52 c3ViKTsKCkFuZCBpZiB5b3UgdXNlIGNwcFsxXSBhbmQgcGl0Y2hlc1sxXSwgY2FuJ3QgeW91IGdl dCByaWQgb2YgdGhlIGRpdmlzaW9ucyBieSAKaHN1YiBhbmQgdnN1YiA/Cgo+ICsJfQo+ICsKPiAr CXJldCA9IHRpZHNzLT5kaXNwY19vcHMtPnBsYW5lX3NldHVwKHRpZHNzLT5kaXNwYywgdHBsYW5l LT5od19wbGFuZV9pZCwKPiArCQkJCQkgICAgJmluZm8sIGh3X3ZpZGVvcG9ydCk7Cj4gKwo+ICsJ aWYgKHJldCkgewo+ICsJCWRldl9lcnIocGxhbmUtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldHVw IHBsYW5lICVkXG4iLAo+ICsJCQl0cGxhbmUtPmh3X3BsYW5lX2lkKTsKCldlIHNob3VsZCByZWFs bHkgbWFrZSBzdXJlIHRoaXMgbmV2ZXIgaGFwcGVucyBieSB2YWxpZGF0aW5nIHBhcmFtZXRlcnMg YXQgCmF0b21pYyBjaGVjayB0aW1lLgoKPiArCQl0aWRzcy0+ZGlzcGNfb3BzLT5wbGFuZV9lbmFi bGUodGlkc3MtPmRpc3BjLCB0cGxhbmUtPmh3X3BsYW5lX2lkLAo+ICsJCQkJCSAgICAgICBmYWxz ZSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXRpZHNzLT5kaXNwY19vcHMtPnBsYW5lX2Vu YWJsZSh0aWRzcy0+ZGlzcGMsIHRwbGFuZS0+aHdfcGxhbmVfaWQsIHRydWUpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB0aWRzc19wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gcGxhbmUtPmRldjsKPiArCXN0cnVj dCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgdGlk c3NfcGxhbmUgKnRwbGFuZSA9IHRvX3RpZHNzX3BsYW5lKHBsYW5lKTsKPiArCj4gKwlkZXZfZGJn KGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJdGlkc3MtPmRpc3BjX29wcy0+ cGxhbmVfZW5hYmxlKHRpZHNzLT5kaXNwYywgdHBsYW5lLT5od19wbGFuZV9pZCwgZmFsc2UpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgdGlk c3NfcGxhbmVfaGVscGVyX2Z1bmNzID0gewo+ICsJLmF0b21pY19jaGVjayA9IHRpZHNzX3BsYW5l X2F0b21pY19jaGVjaywKPiArCS5hdG9taWNfdXBkYXRlID0gdGlkc3NfcGxhbmVfYXRvbWljX3Vw ZGF0ZSwKPiArCS5hdG9taWNfZGlzYWJsZSA9IHRpZHNzX3BsYW5lX2F0b21pY19kaXNhYmxlLAo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgdGlkc3NfcGxh bmVfZnVuY3MgPSB7Cj4gKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRl X3BsYW5lLAo+ICsJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3Bs YW5lLAo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCj4gKwkuZGVz dHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ ICsKPiArc3RydWN0IHRpZHNzX3BsYW5lICp0aWRzc19wbGFuZV9jcmVhdGUoc3RydWN0IHRpZHNz X2RldmljZSAqdGlkc3MsCj4gKwkJCQkgICAgICAgdTMyIGh3X3BsYW5lX2lkLAl1MzIgcGxhbmVf dHlwZSwKPiArCQkJCSAgICAgICB1MzIgY3J0Y19tYXNrLCBjb25zdCB1MzIgKmZvcm1hdHMsCj4g KwkJCQkgICAgICAgdTMyIG51bV9mb3JtYXRzKQo+ICt7Cj4gKwllbnVtIGRybV9wbGFuZV90eXBl IHR5cGU7Cj4gKwl1aW50MzJfdCBwb3NzaWJsZV9jcnRjczsKPiArCXVpbnQgbnVtX3BsYW5lcyA9 IHRpZHNzLT5kaXNwY19vcHMtPmdldF9udW1fcGxhbmVzKHRpZHNzLT5kaXNwYyk7Cgp1bnNpZ25l ZCBpbnQgPwoKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZTsKPiAr Cj4gKwl0cGxhbmUgPSBkZXZtX2t6YWxsb2ModGlkc3MtPmRldiwgc2l6ZW9mKCp0cGxhbmUpLCBH RlBfS0VSTkVMKTsKPiArCWlmICghdHBsYW5lKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p Owo+ICsKPiArCXRwbGFuZS0+aHdfcGxhbmVfaWQgPSBod19wbGFuZV9pZDsKPiArCj4gKwlwb3Nz aWJsZV9jcnRjcyA9IGNydGNfbWFzazsKPiArCXR5cGUgPSBwbGFuZV90eXBlOwoKWW91IGNhbiB1 c2UgY3J0Y19tYXNrIGFuZCBwbGFuZV90eXBlIGRpcmVjdGx5IGJlbG93LCBubyBuZWVkIGZvciBs b2NhbCAKdmFyaWFibGVzLgoKPiArCj4gKwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQo dGlkc3MtPmRkZXYsICZ0cGxhbmUtPnBsYW5lLAo+ICsJCQkJICAgICAgIHBvc3NpYmxlX2NydGNz LAo+ICsJCQkJICAgICAgICZ0aWRzc19wbGFuZV9mdW5jcywKPiArCQkJCSAgICAgICBmb3JtYXRz LCBudW1fZm9ybWF0cywKPiArCQkJCSAgICAgICBOVUxMLCB0eXBlLCBOVUxMKTsKPiArCWlmIChy ZXQgPCAwKQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsJZHJtX3BsYW5lX2hlbHBl cl9hZGQoJnRwbGFuZS0+cGxhbmUsICZ0aWRzc19wbGFuZV9oZWxwZXJfZnVuY3MpOwo+ICsJaWYg KG51bV9wbGFuZXMgPiAxKQo+ICsJCWRybV9wbGFuZV9jcmVhdGVfenBvc19wcm9wZXJ0eSgmdHBs YW5lLT5wbGFuZSwgaHdfcGxhbmVfaWQsIDAsCj4gKwkJCQkJICAgICAgIG51bV9wbGFuZXMgLSAx KTsKPiArCj4gKwlyZXR1cm4gdHBsYW5lOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS90aWRzcy90aWRzc19wbGFuZS5oCj4gYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf cGxhbmUuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDg2NWUx NGNiNWY5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19wbGFuZS5oCj4gQEAgLTAsMCArMSwyNSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1 bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCj4gKyAqIEF1dGhvcjogVG9t aSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVm IF9fVElEU1NfUExBTkVfSF9fCj4gKyNkZWZpbmUgX19USURTU19QTEFORV9IX18KPiArCj4gKyNp bmNsdWRlICJ0aWRzc19kaXNwYy5oIgoKWW91IGRvbid0IG5lZWQgdG8gcHVsbCB0aGUgd2hvbGUg ZGlzcGMgaGVhZGVyIGluIGhlcmUsIHlvdSBjYW4ganVzdCBpbmNsdWRlIAp0aGUgaGVhZGVyIGZv ciBkcm1fcGxhbmUgYW5kIGZvcndhcmQtZGVjbGFyZSBzdHJ1Y3QgdGlkc3NfZGV2aWNlLgoKPiAr Cj4gKyNkZWZpbmUgdG9fdGlkc3NfcGxhbmUocCkgY29udGFpbmVyX29mKChwKSwgc3RydWN0IHRp ZHNzX3BsYW5lLCBwbGFuZSkKPiArCj4gK3N0cnVjdCB0aWRzc19wbGFuZSB7Cj4gKwlzdHJ1Y3Qg ZHJtX3BsYW5lIHBsYW5lOwo+ICsKPiArCXUzMiBod19wbGFuZV9pZDsKPiArCgpFeHRyYSBibGFu ayBsaW5lIGhlcmUuCgo+ICt9Owo+ICsKPiArc3RydWN0IHRpZHNzX3BsYW5lICp0aWRzc19wbGFu ZV9jcmVhdGUoc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MsCj4gKwkJCQkgICAgICAgdTMyIGh3 X3BsYW5lX2lkLAl1MzIgcGxhbmVfdHlwZSwKPiArCQkJCSAgICAgICB1MzIgY3J0Y19tYXNrLCBj b25zdCB1MzIgKmZvcm1hdHMsCj4gKwkJCQkgICAgICAgdTMyIG51bV9mb3JtYXRzKTsKPiArI2Vu ZGlmCgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==