From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 2/2] drm: zte: add initial vou drm driver Date: Sun, 25 Sep 2016 22:58:09 +0200 Message-ID: <20160925205809.GR20761@phenom.ffwll.local> References: <1474727185-24180-1-git-send-email-shawn.guo@linaro.org> <1474727185-24180-3-git-send-email-shawn.guo@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1474727185-24180-3-git-send-email-shawn.guo@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Shawn Guo Cc: Mark Rutland , devicetree@vger.kernel.org, Daniel Vetter , Baoyou Xie , dri-devel@lists.freedesktop.org, Rob Herring , Jun Nie , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gU2F0LCBTZXAgMjQsIDIwMTYgYXQgMTA6MjY6MjVQTSArMDgwMCwgU2hhd24gR3VvIHdyb3Rl Ogo+IEl0IGFkZHMgdGhlIGluaXRpYWwgWlRFIFZPVSBkaXNwbGF5IGNvbnRyb2xsZXIgRFJNIGRy aXZlci4gIFRoZXJlIGFyZQo+IHN0aWxsIHNvbWUgZmVhdHVyZXMgdG8gYmUgYWRkZWQsIGxpa2Ug b3ZlcmxheSBwbGFuZSwgc2NhbGluZywgYW5kIG1vcmUKPiBvdXRwdXQgZGV2aWNlcyBzdXBwb3J0 LiAgQnV0IGl0J3MgYWxyZWFkeSB1c2VmdWwgd2l0aCBkdWFsIENSVENzIGFuZAo+IEhETUkgbW9u aXRvciB3b3JraW5nLgo+IAo+IEl0J3MgYmVlbiB0ZXN0ZWQgb24gRGViaWFuIEplc3NpZSBMWERF IGRlc2t0b3Agd2l0aCBtb2Rlc2V0dGluZyBkcml2ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogU2hh d24gR3VvIDxzaGF3bi5ndW9AbGluYXJvLm9yZz4KCkkndmUgZG9uZSBhIHZlcnkgcXVpY2sgcmVh ZC10aHJvdWdoLCBsb29rcyByZWFsIHByZXR0eS4gQSBmZXcgY29tbWVudHMKYmVsb3cgYW5kIGlu LWxpbmUuCgpGb3IgdGVzdGluZywgaGF2ZSB5b3UgdHJpZWQgdG8gcnVuIGktZy10IHZhbGlkYXRp b24gdGVzdHMgcGVyIG91cgpkb2N1bWVudGF0aW9uPyBTZWUgaHR0cHM6Ly9kcmkuZnJlZWRlc2t0 b3Aub3JnL2RvY3MvZHJtL2dwdS9kcm0tdWFwaS5odG1sI3ZhbGlkYXRpbmctY2hhbmdlcy13aXRo LWlndAoKQ2hlZXJzLCBEYW5pZWwKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAg ICAgICAgIHwgICAyICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgfCAgIDEg Kwo+ICBkcml2ZXJzL2dwdS9kcm0venRlL0tjb25maWcgICAgICB8ICAgOCArCj4gIGRyaXZlcnMv Z3B1L2RybS96dGUvTWFrZWZpbGUgICAgIHwgICA4ICsKPiAgZHJpdmVycy9ncHUvZHJtL3p0ZS96 eF9jcnRjLmMgICAgfCA2OTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIGRyaXZlcnMvZ3B1L2RybS96dGUvenhfY3J0Yy5oICAgIHwgIDQ3ICsrKwo+ICBkcml2ZXJz L2dwdS9kcm0venRlL3p4X2RybV9kcnYuYyB8IDI1OCArKysrKysrKysrKysrKysKPiAgZHJpdmVy cy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmggfCAgMjIgKysKPiAgZHJpdmVycy9ncHUvZHJtL3p0 ZS96eF9oZG1pLmMgICAgfCA1NDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuYyAgIHwgMzYyICsrKysrKysrKysrKysrKysrKysr Cj4gIGRyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuaCAgIHwgIDI2ICsrCj4gIDExIGZpbGVz IGNoYW5nZWQsIDE5NjUgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3p0ZS9LY29uZmlnCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0venRlL01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0venRl L3p4X2NydGMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9j cnRjLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Ry di5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYu aAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9oZG1pLmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuYwo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oCgpOZXcgZW50cnkg aW4gTUFJTlRBSU5FUlMgbGlzdGVuaW5nIHlvdSAoYW5kIHByb2JhYmx5IGRyaS1kZXZlbCBhcyB0 aGUgbS1sKQppcyBtaXNzaW5nLgoKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IDQ4MzA1OWEyMmIxYi4uYTkx ZjhjZWNiZTBmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBAQCAtMjIzLDYgKzIyMyw4IEBAIHNvdXJjZSAiZHJp dmVycy9ncHUvZHJtL2hpc2lsaWNvbi9LY29uZmlnIgo+ICAKPiAgc291cmNlICJkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyIKPiAgCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3p0 ZS9LY29uZmlnIgo+ICsKPiAgIyBLZWVwIGxlZ2FjeSBkcml2ZXJzIGxhc3QKPiAgCj4gIG1lbnVj b25maWcgRFJNX0xFR0FDWQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCA0MzlkODliMjVhZTAuLmZlNDYxYzk0 ZDI2NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtODUsMyArODUsNCBAQCBvYmotJChDT05GSUdfRFJN X0ZTTF9EQ1UpICs9IGZzbC1kY3UvCj4gIG9iai0kKENPTkZJR19EUk1fRVROQVZJVikgKz0gZXRu YXZpdi8KPiAgb2JqLSQoQ09ORklHX0RSTV9BUkNQR1UpKz0gYXJjLwo+ICBvYmoteQkJCSs9IGhp c2lsaWNvbi8KPiArb2JqLSQoQ09ORklHX0RSTV9aVEUpCSs9IHp0ZS8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3p0ZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS9LY29uZmln Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQwNjViMjg0MGYx Ywo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL0tjb25maWcKPiBA QCAtMCwwICsxLDggQEAKPiArY29uZmlnIERSTV9aVEUKPiArCXRyaXN0YXRlICJEUk0gU3VwcG9y dCBmb3IgWlRFIFNvQ3MiCj4gKwlkZXBlbmRzIG9uIERSTSAmJiBBUkNIX1pYCj4gKwlzZWxlY3Qg RFJNX0tNU19DTUFfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX0tNU19GQl9IRUxQRVIKPiArCXNlbGVj dCBEUk1fS01TX0hFTFBFUgo+ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5h YmxlIERSTSBvbiBaVEUgWlggU29Dcy4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0 ZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjQwOTY4ZGM3NDlmCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDggQEAK PiArenhkcm0teSA6PSBcCj4gKwl6eF9kcm1fZHJ2Lm8gXAo+ICsJenhfY3J0Yy5vIFwKPiArCXp4 X3BsYW5lLm8gXAo+ICsJenhfaGRtaS5vCj4gKwo+ICtvYmotJChDT05GSUdfRFJNX1pURSkgKz0g enhkcm0ubwo+ICsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9jcnRjLmMg Yi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2NydGMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi44MThiZjkwNzI1NzMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9jcnRjLmMKPiBAQCAtMCwwICsxLDY5MSBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBaVEUg Q29ycG9yYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf aGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2Vt X2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gKwo+ICsjaW5jbHVkZSAienhfZHJtX2Ry di5oIgo+ICsjaW5jbHVkZSAienhfY3J0Yy5oIgo+ICsjaW5jbHVkZSAienhfcGxhbmUuaCIKPiAr Cj4gKy8qIE9TRCAoR1BDX0dMT0JBTCkgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgT1NEX0lOVF9T VEEJCQkweDA0Cj4gKyNkZWZpbmUgT1NEX0lOVF9DTFJTVEEJCQkweDA4Cj4gKyNkZWZpbmUgT1NE X0lOVF9NU0sJCQkweDBjCj4gKyNkZWZpbmUgT1NEX0lOVF9BVVhfVVBUCQkJQklUKDE0KQo+ICsj ZGVmaW5lIE9TRF9JTlRfTUFJTl9VUFQJCUJJVCgxMykKPiArI2RlZmluZSBPU0RfSU5UX0dMMV9M QlcJCQlCSVQoMTApCj4gKyNkZWZpbmUgT1NEX0lOVF9HTDBfTEJXCQkJQklUKDkpCj4gKyNkZWZp bmUgT1NEX0lOVF9WTDJfTEJXCQkJQklUKDgpCj4gKyNkZWZpbmUgT1NEX0lOVF9WTDFfTEJXCQkJ QklUKDcpCj4gKyNkZWZpbmUgT1NEX0lOVF9WTDBfTEJXCQkJQklUKDYpCj4gKyNkZWZpbmUgT1NE X0lOVF9CVVNfRVJSCQkJQklUKDMpCj4gKyNkZWZpbmUgT1NEX0lOVF9DRkdfRVJSCQkJQklUKDIp Cj4gKyNkZWZpbmUgT1NEX0lOVF9FUlJPUiAoXAo+ICsJT1NEX0lOVF9HTDFfTEJXIHwgT1NEX0lO VF9HTDBfTEJXIHwgXAo+ICsJT1NEX0lOVF9WTDJfTEJXIHwgT1NEX0lOVF9WTDFfTEJXIHwgT1NE X0lOVF9WTDBfTEJXIHwgXAo+ICsJT1NEX0lOVF9CVVNfRVJSIHwgT1NEX0lOVF9DRkdfRVJSIFwK PiArKQo+ICsjZGVmaW5lIE9TRF9JTlRfRU5BQkxFIChPU0RfSU5UX0VSUk9SIHwgT1NEX0lOVF9B VVhfVVBUIHwgT1NEX0lOVF9NQUlOX1VQVCkKPiArI2RlZmluZSBPU0RfQ1RSTDAJCQkweDEwCj4g KyNkZWZpbmUgT1NEX0NUUkwwX0dMMF9FTgkJQklUKDcpCj4gKyNkZWZpbmUgT1NEX0NUUkwwX0dM MF9TRUwJCUJJVCg2KQo+ICsjZGVmaW5lIE9TRF9DVFJMMF9HTDFfRU4JCUJJVCg1KQo+ICsjZGVm aW5lIE9TRF9DVFJMMF9HTDFfU0VMCQlCSVQoNCkKPiArI2RlZmluZSBPU0RfUlNUX0NMUgkJCTB4 MWMKPiArI2RlZmluZSBSU1RfUEVSX0ZSQU1FCQkJQklUKDE5KQo+ICsKPiArLyogTWFpbi9BdXgg Y2hhbm5lbCByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBPU0RfTUFJTl9DSE4JCQkweDQ3MAo+ICsj ZGVmaW5lIE9TRF9BVVhfQ0hOCQkJMHg0ZDAKPiArI2RlZmluZSBDSE5fQ1RSTDAJCQkweDAwCj4g KyNkZWZpbmUgQ0hOX0VOQUJMRQkJCUJJVCgwKQo+ICsjZGVmaW5lIENITl9DVFJMMQkJCTB4MDQK PiArI2RlZmluZSBDSE5fU0NSRUVOX1dfU0hJRlQJCTE4Cj4gKyNkZWZpbmUgQ0hOX1NDUkVFTl9X X01BU0sJCSgweDFmZmYgPDwgQ0hOX1NDUkVFTl9XX1NISUZUKQo+ICsjZGVmaW5lIENITl9TQ1JF RU5fSF9TSElGVAkJNQo+ICsjZGVmaW5lIENITl9TQ1JFRU5fSF9NQVNLCQkoMHgxZmZmIDw8IENI Tl9TQ1JFRU5fSF9TSElGVCkKPiArI2RlZmluZSBDSE5fVVBEQVRFCQkJMHgwOAo+ICsKPiArLyog VElNSU5HX0NUUkwgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgVElNSU5HX1RDX0VOQUJMRQkJMHgw NAo+ICsjZGVmaW5lIEFVWF9UQ19FTgkJCUJJVCgxKQo+ICsjZGVmaW5lIE1BSU5fVENfRU4JCQlC SVQoMCkKPiArI2RlZmluZSBGSVJfTUFJTl9BQ1RJVkUJCQkweDA4Cj4gKyNkZWZpbmUgRklSX0FV WF9BQ1RJVkUJCQkweDBjCj4gKyNkZWZpbmUgRklSX01BSU5fSF9USU1JTkcJCTB4MTAKPiArI2Rl ZmluZSBGSVJfTUFJTl9WX1RJTUlORwkJMHgxNAo+ICsjZGVmaW5lIEZJUl9BVVhfSF9USU1JTkcJ CTB4MTgKPiArI2RlZmluZSBGSVJfQVVYX1ZfVElNSU5HCQkweDFjCj4gKyNkZWZpbmUgU1lOQ19X SURFX1NISUZUCQkJMjIKPiArI2RlZmluZSBTWU5DX1dJREVfTUFTSwkJCSgweDNmZiA8PCBTWU5D X1dJREVfU0hJRlQpCj4gKyNkZWZpbmUgQkFDS19QT1JDSF9TSElGVAkJMTEKPiArI2RlZmluZSBC QUNLX1BPUkNIX01BU0sJCQkoMHg3ZmYgPDwgQkFDS19QT1JDSF9TSElGVCkKPiArI2RlZmluZSBG Uk9OVF9QT1JDSF9TSElGVAkJMAo+ICsjZGVmaW5lIEZST05UX1BPUkNIX01BU0sJCSgweDdmZiA8 PCBGUk9OVF9QT1JDSF9TSElGVCkKPiArI2RlZmluZSBUSU1JTkdfQ1RSTAkJCTB4MjAKPiArI2Rl ZmluZSBBVVhfUE9MX1NISUZUCQkJMwo+ICsjZGVmaW5lIEFVWF9QT0xfTUFTSwkJCSgweDcgPDwg QVVYX1BPTF9TSElGVCkKPiArI2RlZmluZSBNQUlOX1BPTF9TSElGVAkJCTAKPiArI2RlZmluZSBN QUlOX1BPTF9NQVNLCQkJKDB4NyA8PCBNQUlOX1BPTF9TSElGVCkKPiArI2RlZmluZSBQT0xfREVf U0hJRlQJCQkyCj4gKyNkZWZpbmUgUE9MX1ZTWU5DX1NISUZUCQkJMQo+ICsjZGVmaW5lIFBPTF9I U1lOQ19TSElGVAkJCTAKPiArI2RlZmluZSBUSU1JTkdfSU5UX0NUUkwJCQkweDI0Cj4gKyNkZWZp bmUgVElNSU5HX0lOVF9TVEFURQkJMHgyOAo+ICsjZGVmaW5lIFRJTUlOR19JTlRfQVVYX0ZSQU1F CQlCSVQoMykKPiArI2RlZmluZSBUSU1JTkdfSU5UX01BSU5fRlJBTUUJCUJJVCgxKQo+ICsjZGVm aW5lIFRJTUlOR19JTlRfQVVYX0ZSQU1FX1NFTF9WU1cJKDB4MiA8PCAxMCkKPiArI2RlZmluZSBU SU1JTkdfSU5UX01BSU5fRlJBTUVfU0VMX1ZTVwkoMHgyIDw8IDYpCj4gKyNkZWZpbmUgVElNSU5H X0lOVF9FTkFCTEUgKFwKPiArCVRJTUlOR19JTlRfTUFJTl9GUkFNRV9TRUxfVlNXIHwgVElNSU5H X0lOVF9BVVhfRlJBTUVfU0VMX1ZTVyB8IFwKPiArCVRJTUlOR19JTlRfTUFJTl9GUkFNRSB8IFRJ TUlOR19JTlRfQVVYX0ZSQU1FIFwKPiArKQo+ICsjZGVmaW5lIFRJTUlOR19NQUlOX1NISUZUCQkw eDJjCj4gKyNkZWZpbmUgVElNSU5HX0FVWF9TSElGVAkJMHgzMAo+ICsjZGVmaW5lIEhfU0hJRlRf VkFMCQkJMHgwMDQ4Cj4gKyNkZWZpbmUgVElNSU5HX01BSU5fUElfU0hJRlQJCTB4NjgKPiArI2Rl ZmluZSBUSU1JTkdfQVVYX1BJX1NISUZUCQkweDZjCj4gKyNkZWZpbmUgSF9QSV9TSElGVF9WQUwJ CQkweDAwMGYKPiArCj4gKy8qIERUUkMgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgRFRSQ19GMF9D VFJMCQkJMHgyYwo+ICsjZGVmaW5lIERUUkNfRjFfQ1RSTAkJCTB4NWMKPiArI2RlZmluZSBEVFJD X0RFQ09NUFJFU1NfQllQQVNTCQlCSVQoMTcpCj4gKyNkZWZpbmUgRFRSQ19ERVRJTEVfQ1RSTAkJ MHg2OAo+ICsjZGVmaW5lIFRJTEUyUkFTVEVTQ0FOX0JZUEFTU19NT0RFCUJJVCgzMCkKPiArI2Rl ZmluZSBERVRJTEVfQVJJRFJfTU9ERV9NQVNLCQkoMHgzIDw8IDApCj4gKyNkZWZpbmUgREVUSUxF X0FSSURfQUxMCQkJMAo+ICsjZGVmaW5lIERFVElMRV9BUklEX0lOX0FSSURSCQkxCj4gKyNkZWZp bmUgREVUSUxFX0FSSURfQllQX0JVVF9BUklEUgkyCj4gKyNkZWZpbmUgREVUSUxFX0FSSURfSU5f QVJJRFIyCQkzCj4gKyNkZWZpbmUgRFRSQ19BUklECQkJMHg2Ywo+ICsjZGVmaW5lIERUUkNfREVD MkREUl9BUklECQkweDcwCj4gKwo+ICsvKiBWT1VfQ1RSTCByZWdpc3RlcnMgKi8KPiArI2RlZmlu ZSBWT1VfSU5GX0VOCQkJMHgwMAo+ICsjZGVmaW5lIFZPVV9JTkZfQ0hfU0VMCQkJMHgwNAo+ICsj ZGVmaW5lIFZPVV9JTkZfREFUQV9TRUwJCTB4MDgKPiArI2RlZmluZSBWT1VfU09GVF9SU1QJCQkw eDE0Cj4gKyNkZWZpbmUgVk9VX0NMS19TRUwJCQkweDE4Cj4gKyNkZWZpbmUgVk9VX0NMS19HTDFf U0VMCQkJQklUKDUpCj4gKyNkZWZpbmUgVk9VX0NMS19HTDBfU0VMCQkJQklUKDQpCj4gKyNkZWZp bmUgVk9VX0NMS19SRVFFTgkJCTB4MjAKPiArI2RlZmluZSBWT1VfQ0xLX0VOCQkJMHgyNAo+ICsK PiArLyogT1RGUFBVX0NUUkwgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgT1RGUFBVX1JTWl9EQVRB X1NPVVJDRQkJMHgwNAo+ICsKPiArI2RlZmluZSBHTF9OVU0JCQkJMgo+ICsjZGVmaW5lIFZMX05V TQkJCQkzCj4gKwo+ICtlbnVtIHZvdV9jaG5fdHlwZSB7Cj4gKwlWT1VfQ0hOX01BSU4sCj4gKwlW T1VfQ0hOX0FVWCwKPiArfTsKPiArCj4gK3N0cnVjdCB6eF9jcnRjIHsKPiArCXN0cnVjdCBkcm1f Y3J0YyBjcnRjOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeTsKPiArCXN0cnVjdCBkZXZp Y2UgKmRldjsKPiArCXZvaWQgX19pb21lbSAqY2hucmVnOwo+ICsJZW51bSB2b3VfY2huX3R5cGUg Y2huX3R5cGU7Cj4gKwlzdHJ1Y3QgY2xrICpwaXhjbGs7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIHRv X3p4X2NydGMoeCkJY29udGFpbmVyX29mKGNydGMsIHN0cnVjdCB6eF9jcnRjLCBjcnRjKQo+ICsK PiArc3RydWN0IHp4X3ZvdV9odyB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwl2b2lkIF9f aW9tZW0gKm9zZDsKPiArCXZvaWQgX19pb21lbSAqdGltaW5nOwo+ICsJdm9pZCBfX2lvbWVtICp2 b3VjdGw7Cj4gKwl2b2lkIF9faW9tZW0gKm90ZnBwdTsKPiArCXZvaWQgX19pb21lbSAqZHRyYzsK PiArCXN0cnVjdCBjbGsgKmF4aV9jbGs7Cj4gKwlzdHJ1Y3QgY2xrICpwcHVfY2xrOwo+ICsJc3Ry dWN0IGNsayAqbWFpbl9jbGs7Cj4gKwlzdHJ1Y3QgY2xrICphdXhfY2xrOwo+ICsJc3RydWN0IHp4 X2NydGMgKm1haW5fY3J0YzsKPiArCXN0cnVjdCB6eF9jcnRjICphdXhfY3J0YzsKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19tYWluX2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ICt7Cj4gKwlzdHJ1Y3QgenhfY3J0YyAqemNydGMgPSB0b196eF9jcnRjKGNydGMpOwo+ICsK PiArCXJldHVybiB6Y3J0Yy0+Y2huX3R5cGUgPT0gVk9VX0NITl9NQUlOOwo+ICt9Cj4gKwo+ICt2 b2lkIHZvdV9pbmZfZW5hYmxlKHN0cnVjdCB2b3VfaW5mICppbmYpCj4gK3sKPiArCXN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlciA9IGluZi0+ZW5jb2RlcjsKPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSBlbmNvZGVyLT5kZXY7Cj4gKwlzdHJ1Y3QgenhfZHJtX3ByaXZhdGUgKnByaXYgPSBk cm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHp4X3ZvdV9odyAqdm91ID0gcHJpdi0+dm91Owo+ ICsJYm9vbCBpc19tYWluID0gaXNfbWFpbl9jcnRjKGVuY29kZXItPmNydGMpOwo+ICsJdTMyIGRh dGFfc2VsX3NoaWZ0ID0gaW5mLT5pZCA8PCAxOwo+ICsJdTMyIHZhbDsKPiArCj4gKwkvKiBTZWxl Y3QgZGF0YSBmb3JtYXQgKi8KPiArCXZhbCA9IHJlYWRsKHZvdS0+dm91Y3RsICsgVk9VX0lORl9E QVRBX1NFTCk7Cj4gKwl2YWwgJj0gfigweDMgPDwgZGF0YV9zZWxfc2hpZnQpOwo+ICsJdmFsIHw9 IGluZi0+ZGF0YV9zZWwgPDwgZGF0YV9zZWxfc2hpZnQ7Cj4gKwl3cml0ZWwodmFsLCB2b3UtPnZv dWN0bCArIFZPVV9JTkZfREFUQV9TRUwpOwo+ICsKPiArCS8qIFNlbGVjdCBjaGFubmVsICovCj4g Kwl2YWwgPSByZWFkbCh2b3UtPnZvdWN0bCArIFZPVV9JTkZfQ0hfU0VMKTsKPiArCWlmIChpc19t YWluKQo+ICsJCXZhbCAmPSB+KDEgPDwgaW5mLT5pZCk7Cj4gKwllbHNlCj4gKwkJdmFsIHw9IDEg PDwgaW5mLT5pZDsKPiArCXdyaXRlbCh2YWwsIHZvdS0+dm91Y3RsICsgVk9VX0lORl9DSF9TRUwp Owo+ICsKPiArCS8qIFNlbGVjdCBpbnRlcmZhY2UgY2xvY2tzICovCj4gKwl2YWwgPSByZWFkbCh2 b3UtPnZvdWN0bCArIFZPVV9DTEtfU0VMKTsKPiArCWlmIChpc19tYWluKQo+ICsJCXZhbCAmPSB+ aW5mLT5jbG9ja3Nfc2VsX2JpdHM7Cj4gKwllbHNlCj4gKwkJdmFsIHw9IGluZi0+Y2xvY2tzX3Nl bF9iaXRzOwo+ICsJd3JpdGVsKHZhbCwgdm91LT52b3VjdGwgKyBWT1VfQ0xLX1NFTCk7Cj4gKwo+ ICsJLyogRW5hYmxlIGludGVyZmFjZSBjbG9ja3MgKi8KPiArCXZhbCA9IHJlYWRsKHZvdS0+dm91 Y3RsICsgVk9VX0NMS19FTik7Cj4gKwl2YWwgfD0gaW5mLT5jbG9ja3NfZW5fYml0czsKPiArCXdy aXRlbCh2YWwsIHZvdS0+dm91Y3RsICsgVk9VX0NMS19FTik7Cj4gKwo+ICsJLyogRW5hYmxlIHRo ZSBkZXZpY2UgKi8KPiArCXZhbCA9IHJlYWRsKHZvdS0+dm91Y3RsICsgVk9VX0lORl9FTik7Cj4g Kwl2YWwgfD0gMSA8PCBpbmYtPmlkOwo+ICsJd3JpdGVsKHZhbCwgdm91LT52b3VjdGwgKyBWT1Vf SU5GX0VOKTsKPiArfQo+ICsKPiArdm9pZCB2b3VfaW5mX2Rpc2FibGUoc3RydWN0IHZvdV9pbmYg KmluZikKPiArewo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gaW5mLT5lbmNvZGVy Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGVuY29kZXItPmRldjsKPiArCXN0cnVjdCB6 eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3Qgenhfdm91 X2h3ICp2b3UgPSBwcml2LT52b3U7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCS8qIERpc2FibGUgdGhl IGRldmljZSAqLwo+ICsJdmFsID0gcmVhZGwodm91LT52b3VjdGwgKyBWT1VfSU5GX0VOKTsKPiAr CXZhbCAmPSB+KDEgPDwgaW5mLT5pZCk7Cj4gKwl3cml0ZWwodmFsLCB2b3UtPnZvdWN0bCArIFZP VV9JTkZfRU4pOwo+ICsKPiArCS8qIERpc2FibGUgaW50ZXJmYWNlIGNsb2NrcyAqLwo+ICsJdmFs ID0gcmVhZGwodm91LT52b3VjdGwgKyBWT1VfQ0xLX0VOKTsKPiArCXZhbCAmPSB+aW5mLT5jbG9j a3NfZW5fYml0czsKPiArCXdyaXRlbCh2YWwsIHZvdS0+dm91Y3RsICsgVk9VX0NMS19FTik7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB2b3VfY2huX3NldF91cGRhdGUoc3RydWN0IHp4 X2NydGMgKnpjcnRjKQo+ICt7Cj4gKwl3cml0ZWwoMSwgemNydGMtPmNobnJlZyArIENITl9VUERB VEUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGMt PnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ICsJc3RydWN0IHp4X2NydGMgKnpjcnRjID0gdG9fenhf Y3J0YyhjcnRjKTsKPiArCXN0cnVjdCB6eF92b3VfaHcgKnZvdSA9IGRldl9nZXRfZHJ2ZGF0YSh6 Y3J0Yy0+ZGV2KTsKPiArCWJvb2wgaXNfbWFpbiA9IGlzX21haW5fY3J0YyhjcnRjKTsKPiArCXN0 cnVjdCB2aWRlb21vZGUgdm07Cj4gKwl1MzIgcG9sID0gMDsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJ ZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUobW9kZSwgJnZtKTsKPiArCj4gKwkvKiBTZXQg dXAgdGltaW5nIHBhcmFtZXRlcnMgKi8KPiArCXZhbCA9ICh2bS52YWN0aXZlIC0gMSkgPDwgMTY7 Cj4gKwl2YWwgfD0gKHZtLmhhY3RpdmUgLSAxKSAmIDB4ZmZmZjsKPiArCXdyaXRlbCh2YWwsIHZv dS0+dGltaW5nICsgKGlzX21haW4gPyBGSVJfTUFJTl9BQ1RJVkUgOiBGSVJfQVVYX0FDVElWRSkp Owo+ICsKPiArCXZhbCA9ICgodm0uaHN5bmNfbGVuIC0gMSkgPDwgU1lOQ19XSURFX1NISUZUKSAm IFNZTkNfV0lERV9NQVNLOwo+ICsJdmFsIHw9ICgodm0uaGJhY2tfcG9yY2ggLSAxKSA8PCBCQUNL X1BPUkNIX1NISUZUKSAmIEJBQ0tfUE9SQ0hfTUFTSzsKPiArCXZhbCB8PSAoKHZtLmhmcm9udF9w b3JjaCAtIDEpIDw8IEZST05UX1BPUkNIX1NISUZUKSAmIEZST05UX1BPUkNIX01BU0s7Cj4gKwl3 cml0ZWwodmFsLCB2b3UtPnRpbWluZyArIChpc19tYWluID8gRklSX01BSU5fSF9USU1JTkcgOgo+ ICsJCQkJCSAgICAgRklSX0FVWF9IX1RJTUlORykpOwo+ICsKPiArCXZhbCA9ICgodm0udnN5bmNf bGVuIC0gMSkgPDwgU1lOQ19XSURFX1NISUZUKSAmIFNZTkNfV0lERV9NQVNLOwo+ICsJdmFsIHw9 ICgodm0udmJhY2tfcG9yY2ggLSAxKSA8PCBCQUNLX1BPUkNIX1NISUZUKSAmIEJBQ0tfUE9SQ0hf TUFTSzsKPiArCXZhbCB8PSAoKHZtLnZmcm9udF9wb3JjaCAtIDEpIDw8IEZST05UX1BPUkNIX1NI SUZUKSAmIEZST05UX1BPUkNIX01BU0s7Cj4gKwl3cml0ZWwodmFsLCB2b3UtPnRpbWluZyArIChp c19tYWluID8gRklSX01BSU5fVl9USU1JTkcgOgo+ICsJCQkJCSAgICAgRklSX0FVWF9WX1RJTUlO RykpOwo+ICsKPiArCS8qIFNldCB1cCBwb2xhcml0aWVzICovCj4gKwlpZiAodm0uZmxhZ3MgJiBE SVNQTEFZX0ZMQUdTX1ZTWU5DX0xPVykKPiArCQlwb2wgfD0gMSA8PCBQT0xfVlNZTkNfU0hJRlQ7 Cj4gKwlpZiAodm0uZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0hTWU5DX0xPVykKPiArCQlwb2wgfD0g MSA8PCBQT0xfSFNZTkNfU0hJRlQ7Cj4gKwo+ICsJdmFsID0gcmVhZGwodm91LT50aW1pbmcgKyBU SU1JTkdfQ1RSTCk7Cj4gKwl2YWwgJj0gfihpc19tYWluID8gTUFJTl9QT0xfTUFTSyA6IEFVWF9Q T0xfTUFTSyk7Cj4gKwl2YWwgfD0gcG9sIDw8IChpc19tYWluID8gTUFJTl9QT0xfU0hJRlQgOiBB VVhfUE9MX1NISUZUKTsKPiArCXdyaXRlbCh2YWwsIHZvdS0+dGltaW5nICsgVElNSU5HX0NUUkwp Owo+ICsKPiArCS8qIFNldHVwIFNISUZUIHJlZ2lzdGVyIGJ5IGZvbGxvd2luZyB3aGF0IFpURSBC U1AgZG9lcyAqLwo+ICsJd3JpdGVsKEhfU0hJRlRfVkFMLCB2b3UtPnRpbWluZyArIChpc19tYWlu ID8gVElNSU5HX01BSU5fU0hJRlQgOgo+ICsJCQkJCQkgICAgIFRJTUlOR19BVVhfU0hJRlQpKTsK PiArCXdyaXRlbChIX1BJX1NISUZUX1ZBTCwgdm91LT50aW1pbmcgKyAoaXNfbWFpbiA/IFRJTUlO R19NQUlOX1BJX1NISUZUIDoKPiArCQkJCQkJCVRJTUlOR19BVVhfUElfU0hJRlQpKTsKPiArCj4g KwkvKiBFbmFibGUgVElNSU5HX0NUUkwgKi8KPiArCXZhbCA9IHJlYWRsKHZvdS0+dGltaW5nICsg VElNSU5HX1RDX0VOQUJMRSk7Cj4gKwl2YWwgfD0gaXNfbWFpbiA/IE1BSU5fVENfRU4gOiBBVVhf VENfRU47Cj4gKwl3cml0ZWwodmFsLCB2b3UtPnRpbWluZyArIFRJTUlOR19UQ19FTkFCTEUpOwo+ ICsKPiArCS8qIENvbmZpZ3VyZSBjaGFubmVsIHNjcmVlbiBzaXplICovCj4gKwl2YWwgPSByZWFk bCh6Y3J0Yy0+Y2hucmVnICsgQ0hOX0NUUkwxKTsKPiArCXZhbCAmPSB+KENITl9TQ1JFRU5fV19N QVNLIHwgQ0hOX1NDUkVFTl9IX01BU0spOwo+ICsJdmFsIHw9ICh2bS5oYWN0aXZlIDw8IENITl9T Q1JFRU5fV19TSElGVCkgJiBDSE5fU0NSRUVOX1dfTUFTSzsKPiArCXZhbCB8PSAodm0udmFjdGl2 ZSA8PCBDSE5fU0NSRUVOX0hfU0hJRlQpICYgQ0hOX1NDUkVFTl9IX01BU0s7Cj4gKwl3cml0ZWwo dmFsLCB6Y3J0Yy0+Y2hucmVnICsgQ0hOX0NUUkwxKTsKPiArCj4gKwkvKiBVcGRhdGUgY2hhbm5l bCAqLwo+ICsJdm91X2Nobl9zZXRfdXBkYXRlKHpjcnRjKTsKPiArCj4gKwkvKiBFbmFibGUgY2hh bm5lbCAqLwo+ICsJdmFsID0gcmVhZGwoemNydGMtPmNobnJlZyArIENITl9DVFJMMCk7Cj4gKwl2 YWwgfD0gQ0hOX0VOQUJMRTsKPiArCXdyaXRlbCh2YWwsIHpjcnRjLT5jaG5yZWcgKyBDSE5fQ1RS TDApOwo+ICsKPiArCS8qIEVuYWJsZSBHcmFwaGljIExheWVyICovCj4gKwl2YWwgPSByZWFkbCh2 b3UtPm9zZCArIE9TRF9DVFJMMCk7Cj4gKwl2YWwgfD0gaXNfbWFpbiA/IE9TRF9DVFJMMF9HTDBf RU4gOiBPU0RfQ1RSTDBfR0wxX0VOOwo+ICsJd3JpdGVsKHZhbCwgdm91LT5vc2QgKyBPU0RfQ1RS TDApOwo+ICsKPiArCWRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKPiArCj4gKwkvKiBFbmFibGUg cGl4ZWwgY2xvY2sgKi8KPiArCWNsa19zZXRfcmF0ZSh6Y3J0Yy0+cGl4Y2xrLCBtb2RlLT5jbG9j ayAqIDEwMDApOwo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKHpjcnRjLT5waXhjbGspOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB6eF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ ICt7Cj4gKwlzdHJ1Y3QgenhfY3J0YyAqemNydGMgPSB0b196eF9jcnRjKGNydGMpOwo+ICsJc3Ry dWN0IHp4X3ZvdV9odyAqdm91ID0gZGV2X2dldF9kcnZkYXRhKHpjcnRjLT5kZXYpOwo+ICsJYm9v bCBpc19tYWluID0gaXNfbWFpbl9jcnRjKGNydGMpOwo+ICsJdTMyIHZhbDsKPiArCj4gKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoemNydGMtPnBpeGNsayk7Cj4gKwo+ICsJZHJtX2NydGNfdmJsYW5r X29mZihjcnRjKTsKPiArCj4gKwkvKiBEaXNhYmxlIEdyYXBoaWMgTGF5ZXIgKi8KPiArCXZhbCA9 IHJlYWRsKHZvdS0+b3NkICsgT1NEX0NUUkwwKTsKPiArCXZhbCAmPSB+KGlzX21haW4gPyBPU0Rf Q1RSTDBfR0wwX0VOIDogT1NEX0NUUkwwX0dMMV9FTik7Cj4gKwl3cml0ZWwodmFsLCB2b3UtPm9z ZCArIE9TRF9DVFJMMCk7Cj4gKwo+ICsJLyogRGlzYWJsZSBjaGFubmVsICovCj4gKwl2YWwgPSBy ZWFkbCh6Y3J0Yy0+Y2hucmVnICsgQ0hOX0NUUkwwKTsKPiArCXZhbCAmPSB+Q0hOX0VOQUJMRTsK PiArCXdyaXRlbCh2YWwsIHpjcnRjLT5jaG5yZWcgKyBDSE5fQ1RSTDApOwo+ICsKPiArCS8qIERp c2FibGUgVElNSU5HX0NUUkwgKi8KPiArCXZhbCA9IHJlYWRsKHZvdS0+dGltaW5nICsgVElNSU5H X1RDX0VOQUJMRSk7Cj4gKwl2YWwgJj0gfihpc19tYWluID8gTUFJTl9UQ19FTiA6IEFVWF9UQ19F Tik7Cj4gKwl3cml0ZWwodmFsLCB2b3UtPnRpbWluZyArIFRJTUlOR19UQ19FTkFCTEUpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gKwkJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3Ry dWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7 Cj4gKwo+ICsJaWYgKGV2ZW50KSB7Cj4gKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiAr Cj4gKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKPiArCQlpZiAoZHJt X2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKQo+ICsJCQlkcm1fY3J0Y19hcm1fdmJsYW5rX2V2 ZW50KGNydGMsIGV2ZW50KTsKPiArCQllbHNlCj4gKwkJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2 ZW50KGNydGMsIGV2ZW50KTsKPiArCQlzcGluX3VubG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRf bG9jayk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVs cGVyX2Z1bmNzIHp4X2NydGNfaGVscGVyX2Z1bmNzID0gewo+ICsJLmVuYWJsZSA9IHp4X2NydGNf ZW5hYmxlLAo+ICsJLmRpc2FibGUgPSB6eF9jcnRjX2Rpc2FibGUsCj4gKwkuYXRvbWljX2JlZ2lu ID0genhfY3J0Y19hdG9taWNfYmVnaW4sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2Z1bmNzIHp4X2NydGNfZnVuY3MgPSB7Cj4gKwkuZGVzdHJveSA9IGRybV9jcnRj X2NsZWFudXAsCj4gKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcs Cj4gKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAo+ICsJLnJlc2V0 ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCj4g K307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHp4X2NydGMgKnp4X2NydGNfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLAo+ICsJCQkJICAgIGVudW0gdm91X2Nobl90eXBlIGNobl90eXBlKQo+ICt7 Cj4gKwlzdHJ1Y3QgenhfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJ c3RydWN0IHp4X3ZvdV9odyAqdm91ID0gcHJpdi0+dm91Owo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gdm91LT5kZXY7Cj4gKwlzdHJ1Y3QgenhfbGF5ZXJfZGF0YSBkYXRhOwo+ICsJc3RydWN0IHp4 X2NydGMgKnpjcnRjOwo+ICsJaW50IHJldDsKPiArCj4gKwl6Y3J0YyA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqemNydGMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghemNydGMpCj4gKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJemNydGMtPmRldiA9IGRldjsKPiArCXpjcnRj LT5jaG5fdHlwZSA9IGNobl90eXBlOwo+ICsKPiArCWlmIChjaG5fdHlwZSA9PSBWT1VfQ0hOX01B SU4pIHsKPiArCQlkYXRhLmxheWVyID0gdm91LT5vc2QgKyAweDEzMDsKPiArCQlkYXRhLmNzYyA9 IHZvdS0+b3NkICsgMHg1ODA7Cj4gKwkJZGF0YS5oYnNjID0gdm91LT5vc2QgKyAweDgyMDsKPiAr CQlkYXRhLnJzeiA9IHZvdS0+b3RmcHB1ICsgMHg2MDA7Cj4gKwkJemNydGMtPmNobnJlZyA9IHZv dS0+b3NkICsgT1NEX01BSU5fQ0hOOwo+ICsJfSBlbHNlIHsKPiArCQlkYXRhLmxheWVyID0gdm91 LT5vc2QgKyAweDIwMDsKPiArCQlkYXRhLmNzYyA9IHZvdS0+b3NkICsgMHg1ZDA7Cj4gKwkJZGF0 YS5oYnNjID0gdm91LT5vc2QgKyAweDg2MDsKPiArCQlkYXRhLnJzeiA9IHZvdS0+b3RmcHB1ICsg MHg4MDA7Cj4gKwkJemNydGMtPmNobnJlZyA9IHZvdS0+b3NkICsgT1NEX0FVWF9DSE47Cj4gKwl9 Cj4gKwo+ICsJemNydGMtPnBpeGNsayA9IGRldm1fY2xrX2dldChkZXYsIChjaG5fdHlwZSA9PSBW T1VfQ0hOX01BSU4pID8KPiArCQkJCQkgICJtYWluX3djbGsiIDogImF1eF93Y2xrIik7Cj4gKwlp ZiAoSVNfRVJSKHpjcnRjLT5waXhjbGspKQo+ICsJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoemNy dGMtPnBpeGNsaykpOwo+ICsKPiArCXpjcnRjLT5wcmltYXJ5ID0genhfcGxhbmVfaW5pdChkcm0s IGRldiwgJmRhdGEsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ICsJaWYgKElTX0VSUih6Y3J0 Yy0+cHJpbWFyeSkpCj4gKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUih6Y3J0Yy0+cHJpbWFyeSkp Owo+ICsKPiArCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmemNydGMtPmNy dGMsIHpjcnRjLT5wcmltYXJ5LCBOVUxMLAo+ICsJCQkJCSZ6eF9jcnRjX2Z1bmNzLCBOVUxMKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gKwlkcm1fY3J0Y19o ZWxwZXJfYWRkKCZ6Y3J0Yy0+Y3J0YywgJnp4X2NydGNfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwly ZXR1cm4gemNydGM7Cj4gK30KPiArCj4gK2ludCB6eF9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCj4gK3sKPiArCXN0cnVjdCB6eF9k cm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3Qgenhfdm91X2h3 ICp2b3UgPSBwcml2LT52b3U7Cj4gKwl1MzIgaW50Y3RsOwo+ICsKPiArCWludGN0bCA9IHJlYWRs KHZvdS0+dGltaW5nICsgVElNSU5HX0lOVF9DVFJMKTsKPiArCWlmIChwaXBlID09IDApCj4gKwkJ aW50Y3RsIHw9IFRJTUlOR19JTlRfTUFJTl9GUkFNRTsKPiArCWVsc2UKPiArCQlpbnRjdGwgfD0g VElNSU5HX0lOVF9BVVhfRlJBTUU7Cj4gKwl3cml0ZWwoaW50Y3RsLCB2b3UtPnRpbWluZyArIFRJ TUlOR19JTlRfQ1RSTCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgenhfY3J0 Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlw ZSkKPiArewo+ICsJc3RydWN0IHp4X2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0 ZTsKPiArCXN0cnVjdCB6eF92b3VfaHcgKnZvdSA9IHByaXYtPnZvdTsKPiArCXUzMiBpbnRjdGw7 Cj4gKwo+ICsJaW50Y3RsID0gcmVhZGwodm91LT50aW1pbmcgKyBUSU1JTkdfSU5UX0NUUkwpOwo+ ICsJaWYgKHBpcGUgPT0gMCkKPiArCQlpbnRjdGwgJj0gflRJTUlOR19JTlRfTUFJTl9GUkFNRTsK PiArCWVsc2UKPiArCQlpbnRjdGwgJj0gflRJTUlOR19JTlRfQVVYX0ZSQU1FOwo+ICsJd3JpdGVs KGludGN0bCwgdm91LT50aW1pbmcgKyBUSU1JTkdfSU5UX0NUUkwpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaXJxcmV0dXJuX3Qgdm91X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPiAr ewo+ICsJc3RydWN0IHp4X3ZvdV9odyAqdm91ID0gZGV2X2lkOwo+ICsJdTMyIHN0YXRlOwo+ICsK PiArCS8qIEhhbmRsZSBUSU1JTkdfQ1RSTCBmcmFtZSBpbnRlcnJ1cHRzICovCj4gKwlzdGF0ZSA9 IHJlYWRsKHZvdS0+dGltaW5nICsgVElNSU5HX0lOVF9TVEFURSk7Cj4gKwl3cml0ZWwoc3RhdGUs IHZvdS0+dGltaW5nICsgVElNSU5HX0lOVF9TVEFURSk7Cj4gKwo+ICsJaWYgKHN0YXRlICYgVElN SU5HX0lOVF9NQUlOX0ZSQU1FKQo+ICsJCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoJnZvdS0+bWFp bl9jcnRjLT5jcnRjKTsKPiArCj4gKwlpZiAoc3RhdGUgJiBUSU1JTkdfSU5UX0FVWF9GUkFNRSkK PiArCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZ2b3UtPmF1eF9jcnRjLT5jcnRjKTsKPiArCj4g KwkvKiBIYW5kbGUgT1NEIGludGVycnVwdHMgKi8KPiArCXN0YXRlID0gcmVhZGwodm91LT5vc2Qg KyBPU0RfSU5UX1NUQSk7Cj4gKwl3cml0ZWwoc3RhdGUsIHZvdS0+b3NkICsgT1NEX0lOVF9DTFJT VEEpOwo+ICsKPiArCWlmIChzdGF0ZSAmIE9TRF9JTlRfTUFJTl9VUFQpIHsKPiArCQl2b3VfY2hu X3NldF91cGRhdGUodm91LT5tYWluX2NydGMpOwo+ICsJCXp4X3BsYW5lX3NldF91cGRhdGUodm91 LT5tYWluX2NydGMtPnByaW1hcnkpOwo+ICsJfQo+ICsKPiArCWlmIChzdGF0ZSAmIE9TRF9JTlRf QVVYX1VQVCkgewo+ICsJCXZvdV9jaG5fc2V0X3VwZGF0ZSh2b3UtPmF1eF9jcnRjKTsKPiArCQl6 eF9wbGFuZV9zZXRfdXBkYXRlKHZvdS0+YXV4X2NydGMtPnByaW1hcnkpOwo+ICsJfQo+ICsKPiAr CWlmIChzdGF0ZSAmIE9TRF9JTlRfRVJST1IpCj4gKwkJZGV2X2Vycih2b3UtPmRldiwgIk9TRCBF UlJPUjogMHglMDh4IVxuIiwgc3RhdGUpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdm91X2R0cmNfaW5pdChzdHJ1Y3Qgenhfdm91X2h3ICp2b3Up Cj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gcmVhZGwodm91LT5kdHJjICsgRFRSQ19E RVRJTEVfQ1RSTCk7Cj4gKwkvKiBDbGVhciBiaXQgZm9yIGJ5cGFzcyBieSBJRCAqLwo+ICsJdmFs ICY9IH5USUxFMlJBU1RFU0NBTl9CWVBBU1NfTU9ERTsKPiArCS8qIFNlbGVjdCBBUklEUiBtb2Rl ICovCj4gKwl2YWwgJj0gfkRFVElMRV9BUklEUl9NT0RFX01BU0s7Cj4gKwl2YWwgfD0gREVUSUxF X0FSSURfSU5fQVJJRFI7Cj4gKwl3cml0ZWwodmFsLCB2b3UtPmR0cmMgKyBEVFJDX0RFVElMRV9D VFJMKTsKPiArCj4gKwkvKiBCeXBhc3MgZGVjb21wcmVzc2lvbiBmb3IgYm90aCBmcmFtZXMgKi8K PiArCXZhbCA9IHJlYWRsKHZvdS0+ZHRyYyArIERUUkNfRjBfQ1RSTCk7Cj4gKwl2YWwgfD0gRFRS Q19ERUNPTVBSRVNTX0JZUEFTUzsKPiArCXdyaXRlbCh2YWwsIHZvdS0+ZHRyYyArIERUUkNfRjBf Q1RSTCk7Cj4gKwo+ICsJdmFsID0gcmVhZGwodm91LT5kdHJjICsgRFRSQ19GMV9DVFJMKTsKPiAr CXZhbCB8PSBEVFJDX0RFQ09NUFJFU1NfQllQQVNTOwo+ICsJd3JpdGVsKHZhbCwgdm91LT5kdHJj ICsgRFRSQ19GMV9DVFJMKTsKPiArCj4gKwkvKiBTZXQgdXAgQVJJRCByZWdpc3RlciAqLwo+ICsJ dmFsID0gMHgwZTsKPiArCXZhbCB8PSAweDBmIDw8IDg7Cj4gKwl2YWwgfD0gMHgwZSA8PCAxNjsK PiArCXZhbCB8PSAweDBmIDw8IDI0Owo+ICsJd3JpdGVsKHZhbCwgdm91LT5kdHJjICsgRFRSQ19B UklEKTsKPiArCj4gKwkvKiBTZXQgdXAgREVDMkREUl9BUklEIHJlZ2lzdGVyICovCj4gKwl2YWwg PSAweDBlOwo+ICsJdmFsIHw9IDB4MGYgPDwgODsKPiArCXdyaXRlbCh2YWwsIHZvdS0+ZHRyYyAr IERUUkNfREVDMkREUl9BUklEKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdm91X2h3X2luaXQo c3RydWN0IHp4X3ZvdV9odyAqdm91KQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCS8qIFNldCBH TDAgdG8gbWFpbiBjaGFubmVsIGFuZCBHTDEgdG8gYXV4IGNoYW5uZWwgKi8KPiArCXZhbCA9IHJl YWRsKHZvdS0+b3NkICsgT1NEX0NUUkwwKTsKPiArCXZhbCAmPSB+T1NEX0NUUkwwX0dMMF9TRUw7 Cj4gKwl2YWwgfD0gT1NEX0NUUkwwX0dMMV9TRUw7Cj4gKwl3cml0ZWwodmFsLCB2b3UtPm9zZCAr IE9TRF9DVFJMMCk7Cj4gKwo+ICsJLyogUmVsZWFzZSByZXNldCBmb3IgYWxsIFZPVSBtb2R1bGVz ICovCj4gKwl3cml0ZWwofjAsIHZvdS0+dm91Y3RsICsgVk9VX1NPRlRfUlNUKTsKPiArCj4gKwkv KiBTZWxlY3QgbWFpbiBjbG9jayBmb3IgR0wwIGFuZCBhdXggY2xvY2sgZm9yIEdMMSBtb2R1bGUg Ki8KPiArCXZhbCA9IHJlYWRsKHZvdS0+dm91Y3RsICsgVk9VX0NMS19TRUwpOwo+ICsJdmFsICY9 IH5WT1VfQ0xLX0dMMF9TRUw7Cj4gKwl2YWwgfD0gVk9VX0NMS19HTDFfU0VMOwo+ICsJd3JpdGVs KHZhbCwgdm91LT52b3VjdGwgKyBWT1VfQ0xLX1NFTCk7Cj4gKwo+ICsJLyogRW5hYmxlIGNsb2Nr IGF1dG8tZ2F0aW5nIGZvciBhbGwgVk9VIG1vZHVsZXMgKi8KPiArCXdyaXRlbCh+MCwgdm91LT52 b3VjdGwgKyBWT1VfQ0xLX1JFUUVOKTsKPiArCj4gKwkvKiBFbmFibGUgYWxsIFZPVSBtb2R1bGUg Y2xvY2tzICovCj4gKwl3cml0ZWwofjAsIHZvdS0+dm91Y3RsICsgVk9VX0NMS19FTik7Cj4gKwo+ ICsJLyogQ2xlYXIgYm90aCBPU0QgYW5kIFRJTUlOR19DVFJMIGludGVycnVwdCBzdGF0ZSAqLwo+ ICsJd3JpdGVsKH4wLCB2b3UtPm9zZCArIE9TRF9JTlRfQ0xSU1RBKTsKPiArCXdyaXRlbCh+MCwg dm91LT50aW1pbmcgKyBUSU1JTkdfSU5UX1NUQVRFKTsKPiArCj4gKwkvKiBFbmFibGUgT1NEIGFu ZCBUSU1JTkdfQ1RSTCBpbnRlcnJydXB0cyAqLwo+ICsJd3JpdGVsKE9TRF9JTlRfRU5BQkxFLCB2 b3UtPm9zZCArIE9TRF9JTlRfTVNLKTsKPiArCXdyaXRlbChUSU1JTkdfSU5UX0VOQUJMRSwgdm91 LT50aW1pbmcgKyBUSU1JTkdfSU5UX0NUUkwpOwo+ICsKPiArCS8qIFNlbGVjdCBHUEMgYXMgaW5w dXQgdG8gZ2wvdmwgc2NhbGVyIGFzIGEgc2FuZSBkZWZhdWx0IHNldHRpbmcgKi8KPiArCXdyaXRl bCgweDJhLCB2b3UtPm90ZnBwdSArIE9URlBQVV9SU1pfREFUQV9TT1VSQ0UpOwo+ICsKPiArCS8q Cj4gKwkgKiBOZWVkcyB0byByZXNldCBjaGFubmVsIGFuZCBsYXllciBsb2dpYyBwZXIgZnJhbWUg d2hlbiBmcmFtZSBzdGFydHMKPiArCSAqIHRvIGdldCBWT1Ugd29yayBwcm9wZXJseS4KPiArCSAq Lwo+ICsJdmFsID0gcmVhZGwodm91LT5vc2QgKyBPU0RfUlNUX0NMUik7Cj4gKwl2YWwgfD0gUlNU X1BFUl9GUkFNRTsKPiArCXdyaXRlbCh2YWwsIHZvdS0+b3NkICsgT1NEX1JTVF9DTFIpOwo+ICsK PiArCXZvdV9kdHJjX2luaXQodm91KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB6eF9jcnRjX2Jp bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEp Cj4gK3sKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZp Y2UoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOwo+ICsJc3RydWN0IHp4 X2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCByZXNvdXJj ZSAqcmVzOwo+ICsJc3RydWN0IHp4X3ZvdV9odyAqdm91Owo+ICsJaW50IGlycTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJdm91ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp2b3UpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghdm91KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXJlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJvc2QiKTsK PiArCXZvdS0+b3NkID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiArCWlmIChJ U19FUlIodm91LT5vc2QpKQo+ICsJCXJldHVybiBQVFJfRVJSKHZvdS0+b3NkKTsKPiArCj4gKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAi dGltaW5nX2N0cmwiKTsKPiArCXZvdS0+dGltaW5nID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVzKTsKPiArCWlmIChJU19FUlIodm91LT50aW1pbmcpKQo+ICsJCXJldHVybiBQVFJfRVJS KHZvdS0+dGltaW5nKTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1l KHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZHRyYyIpOwo+ICsJdm91LT5kdHJjID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiArCWlmIChJU19FUlIodm91LT5kdHJjKSkKPiArCQly ZXR1cm4gUFRSX0VSUih2b3UtPmR0cmMpOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJ2b3VfY3RybCIpOwo+ICsJdm91LT52 b3VjdGwgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUih2 b3UtPnZvdWN0bCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIodm91LT52b3VjdGwpOwo+ICsKPiArCXJl cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJv dGZwcHUiKTsKPiArCXZvdS0+b3RmcHB1ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVz KTsKPiArCWlmIChJU19FUlIodm91LT5vdGZwcHUpKQo+ICsJCXJldHVybiBQVFJfRVJSKHZvdS0+ b3RmcHB1KTsKPiArCj4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+ICsJaWYg KGlycSA8IDApCj4gKwkJcmV0dXJuIGlycTsKPiArCj4gKwl2b3UtPmF4aV9jbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAiYWNsayIpOwo+ICsJaWYgKElTX0VSUih2b3UtPmF4aV9jbGspKQo+ICsJCXJl dHVybiBQVFJfRVJSKHZvdS0+YXhpX2Nsayk7Cj4gKwo+ICsJdm91LT5wcHVfY2xrID0gZGV2bV9j bGtfZ2V0KGRldiwgInBwdV93Y2xrIik7Cj4gKwlpZiAoSVNfRVJSKHZvdS0+cHB1X2NsaykpCj4g KwkJcmV0dXJuIFBUUl9FUlIodm91LT5wcHVfY2xrKTsKPiArCj4gKwljbGtfcHJlcGFyZV9lbmFi bGUodm91LT5heGlfY2xrKTsKPiArCWNsa19wcmVwYXJlX2VuYWJsZSh2b3UtPnBwdV9jbGspOwo+ ICsKPiArCXZvdS0+ZGV2ID0gZGV2Owo+ICsJcHJpdi0+dm91ID0gdm91Owo+ICsJZGV2X3NldF9k cnZkYXRhKGRldiwgdm91KTsKPiArCj4gKwl2b3VfaHdfaW5pdCh2b3UpOwo+ICsKPiArCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHZvdV9pcnFfaGFuZGxlciwgMCwgInp4X3ZvdSIs IHZvdSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXZvdS0+bWFp bl9jcnRjID0genhfY3J0Y19pbml0KGRybSwgVk9VX0NITl9NQUlOKTsKPiArCWlmIChJU19FUlIo dm91LT5tYWluX2NydGMpKQo+ICsJCXJldHVybiBQVFJfRVJSKHZvdS0+bWFpbl9jcnRjKTsKPiAr Cj4gKwl2b3UtPmF1eF9jcnRjID0genhfY3J0Y19pbml0KGRybSwgVk9VX0NITl9BVVgpOwo+ICsJ aWYgKElTX0VSUih2b3UtPmF1eF9jcnRjKSkKPiArCQlyZXR1cm4gUFRSX0VSUih2b3UtPmF1eF9j cnRjKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgenhfY3J0Y191 bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gKwkJCSAg IHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCB6eF92b3VfaHcgKnZvdSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh2b3UtPmF4aV9jbGspOwo+ ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHZvdS0+cHB1X2Nsayk7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyB6eF9jcnRjX2NvbXBvbmVudF9vcHMgPSB7Cj4g KwkuYmluZCA9IHp4X2NydGNfYmluZCwKPiArCS51bmJpbmQgPSB6eF9jcnRjX3VuYmluZCwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgenhfY3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICt7Cj4gKwlyZXR1cm4gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmenhfY3J0 Y19jb21wb25lbnRfb3BzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB6eF9jcnRjX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwljb21wb25lbnRfZGVsKCZwZGV2 LT5kZXYsICZ6eF9jcnRjX2NvbXBvbmVudF9vcHMpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHp4X2NydGNfb2ZfbWF0Y2hbXSA9IHsK PiArCXsgLmNvbXBhdGlibGUgPSAienRlLHp4Mjk2NzE4LWRwYyIsIH0sCj4gKwl7IC8qIGVuZCAq LyB9LAo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6eF9jcnRjX29mX21hdGNoKTsK PiArCj4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenhfY3J0Y19kcml2ZXIgPSB7Cj4gKwkucHJv YmUgPSB6eF9jcnRjX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHp4X2NydGNfcmVtb3ZlLAo+ICsJLmRy aXZlcgk9IHsKPiArCQkubmFtZSA9ICJ6eC1jcnRjIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUJPSB6 eF9jcnRjX29mX21hdGNoLAo+ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3p0ZS96eF9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2NydGMuaAo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mODg5MjA4MDU0Y2UKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9jcnRjLmgKPiBAQCAtMCww ICsxLDQ3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCj4gKyAqIENv cHlyaWdodCAyMDE2IFpURSBDb3Jwb3JhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1pYX0NSVENfSF9fCj4gKyNkZWZpbmUg X19aWF9DUlRDX0hfXwo+ICsKPiArI2RlZmluZSBWT1VfQ1JUQ19NQVNLCQkweDMKPiArCj4gKy8q IFZPVSBvdXRwdXQgaW50ZXJmYWNlcyAqLwo+ICtlbnVtIHZvdV9pbmZfaWQgewo+ICsJVk9VX0hE TUkJPSAwLAo+ICsJVk9VX1JHQl9MQ0QJPSAxLAo+ICsJVk9VX1RWX0VOQwk9IDIsCj4gKwlWT1Vf TUlQSV9EU0kJPSAzLAo+ICsJVk9VX0xWRFMJPSA0LAo+ICsJVk9VX1ZHQQkJPSA1LAo+ICt9Owo+ ICsKPiArZW51bSB2b3VfaW5mX2RhdGFfc2VsIHsKPiArCVZPVV9ZVVY0NDQJPSAwLAo+ICsJVk9V X1JHQl8xMDEwMTAJPSAxLAo+ICsJVk9VX1JHQl84ODgJPSAyLAo+ICsJVk9VX1JHQl82NjYJPSAz LAo+ICt9Owo+ICsKPiArc3RydWN0IHZvdV9pbmYgewo+ICsJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyOwo+ICsJZW51bSB2b3VfaW5mX2lkIGlkOwo+ICsJZW51bSB2b3VfaW5mX2RhdGFfc2Vs IGRhdGFfc2VsOwo+ICsJdTMyIGNsb2Nrc19lbl9iaXRzOwo+ICsJdTMyIGNsb2Nrc19zZWxfYml0 czsKPiArfTsKPiArCj4gK3ZvaWQgdm91X2luZl9lbmFibGUoc3RydWN0IHZvdV9pbmYgKmluZik7 Cj4gK3ZvaWQgdm91X2luZl9kaXNhYmxlKHN0cnVjdCB2b3VfaW5mICppbmYpOwo+ICsKPiAraW50 IHp4X2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBp bnQgcGlwZSk7Cj4gK3ZvaWQgenhfY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cj4gKwo+ICsjZW5kaWYgLyogX19aWF9DUlRDX0hf XyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLjUxZmFmYjhlNWY0Mwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuYwo+IEBAIC0wLDAgKzEsMjU4IEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCj4gKyAqIENvcHlyaWdodCAyMDE2IFpU RSBDb3Jwb3JhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiAr ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3Bp bmxvY2suaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29t cG9uZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9v Zl9ncmFwaC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiArCj4gKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxw ZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArCj4gKyNpbmNsdWRlICJ6eF9kcm1fZHJ2 LmgiCj4gKyNpbmNsdWRlICJ6eF9jcnRjLmgiCj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9kcm1fZmJf b3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1 Y3QgenhfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCWRybV9m YmRldl9jbWFfaG90cGx1Z19ldmVudChwcml2LT5mYmRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHp4X2RybV9tb2RlX2NvbmZpZ19mdW5j cyA9IHsKPiArCS5mYl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKPiArCS5vdXRwdXRfcG9s bF9jaGFuZ2VkID0genhfZHJtX2ZiX291dHB1dF9wb2xsX2NoYW5nZWQsCj4gKwkuYXRvbWljX2No ZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gKwkuYXRvbWljX2NvbW1pdCA9IGRybV9h dG9taWNfaGVscGVyX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHp4X2RybV9sYXN0 Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IHp4X2RybV9wcml2 YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlkcm1fZmJkZXZfY21hX3Jlc3Rv cmVfbW9kZShwcml2LT5mYmRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIHp4X2RybV9mb3BzID0gewo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsCj4g Kwkub3BlbiA9IGRybV9vcGVuLAo+ICsJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKPiArCS51bmxv Y2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKPiArI2lmZGVmIENPTkZJR19DT01QQVQKPiArCS5jb21w YXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAo+ICsjZW5kaWYKPiArCS5wb2xsID0gZHJtX3Bv bGwsCj4gKwkucmVhZCA9IGRybV9yZWFkLAo+ICsJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAo+ICsJ Lm1tYXAgPSBkcm1fZ2VtX2NtYV9tbWFwLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1f ZHJpdmVyIHp4X2RybV9kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX0dF TSB8IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX1BSSU1FIHwKPiArCQkJICAgRFJJVkVSX0FUT01J QywKPiArCS5sYXN0Y2xvc2UgPSB6eF9kcm1fbGFzdGNsb3NlLAo+ICsJLmdldF92YmxhbmtfY291 bnRlciA9IGRybV92Ymxhbmtfbm9faHdfY291bnRlciwKPiArCS5lbmFibGVfdmJsYW5rID0genhf Y3J0Y19lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0genhfY3J0Y19kaXNhYmxl X3ZibGFuaywKPiArCS5nZW1fZnJlZV9vYmplY3QgPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwK PiArCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKPiArCS5kdW1iX2NyZWF0ZSA9 IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlLAo+ICsJLmR1bWJfbWFwX29mZnNldCA9IGRybV9nZW1f Y21hX2R1bWJfbWFwX29mZnNldCwKPiArCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVz dHJveSwKPiArCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19m ZCwKPiArCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwK PiArCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCj4gKwkuZ2VtX3By aW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmltZV9nZXRfc2df dGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1lX2lt cG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKPiArCS5n ZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2VtX3ByaW1lX3Z1 bm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVfbW1hcCA9IGRy bV9nZW1fY21hX3ByaW1lX21tYXAsCj4gKwkuZm9wcyA9ICZ6eF9kcm1fZm9wcywKPiArCS5uYW1l ID0gInp4LXZvdSIsCj4gKwkuZGVzYyA9ICJaVEUgVk9VIENvbnRyb2xsZXIgRFJNIiwKPiArCS5k YXRlID0gIjIwMTYwODExIiwKPiArCS5tYWpvciA9IDEsCj4gKwkubWlub3IgPSAwLAo+ICt9Owo+ ICsKPiArc3RhdGljIGludCB6eF9kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gKwlzdHJ1Y3QgenhfZHJtX3ByaXZhdGUgKnByaXY7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBy aXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHJpdikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZ6eF9kcm1fZHJpdmVyLCBkZXYpOwo+ICsJaWYgKCFk cm0pCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXY7 Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcm0pOwo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19p bml0KGRybSk7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDE2Owo+ICsJZHJtLT5t b2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gMTY7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0 aCA9IDQwOTY7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2Owo+ICsJZHJt LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZ6eF9kcm1fbW9kZV9jb25maWdfZnVuY3M7Cj4gKwo+ICsJ cmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOwoKZHJtX2Rldl9yZWdpc3RlciBzaG91bGQg YmUgdGhlIGxhc3QgZnVuY3Rpb24gY2FsbCBpbiB5b3VyIGJpbmQgZnVuY3Rpb24uClNpbWlsYXIg Zm9yIHVuYmluZCwgZHJtX2Rldl9yZWdpc3RlciBzaG91bGQgYmUgY2FsbGVkIGZpcnN0LgoKQXMg YSBjb25zZXF1ZW5jZSBvZiB0aGF0IHlvdSBjYW4gcmVtb3ZlIHRoZSBkcm1fY29ubmVjdG9yXyh1 bilyZWdpc3RlcgpjYWxscywgdGhvc2UgYXJlIG9ubHkgbmVlZGVkIGZvciBob3RwbHVnZ2VkIGNv bm5lY3RvcnMgbGlrZSBkcCBtc3QuIEJ1dAp3aXRoIGNvcnJlY3Qgb3JkZXJpbmcgb2YgZHJtX2Rl dl8odW4pcmVnaXN0ZXIgdGhhdCBmdW5jdGlvbiB3aWxsIGFsc28gdGFrZQpjYXJlIG9mIGNvbm5l Y3RvciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLgoKPiArCWlmIChyZXQpCj4gKwkJ Z290byBvdXRfZnJlZTsKPiArCj4gKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0p Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGJpbmQgYWxsIGNvbXBv bmVudHNcbiIpOwo+ICsJCWdvdG8gb3V0X3VucmVnaXN0ZXI7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g ZHJtX3ZibGFua19pbml0KGRybSwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7Cj4gKwlpZiAo cmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpc2UgdmJsYW5rXG4i KTsKPiArCQlnb3RvIG91dF91bmJpbmQ7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFdlIHdpbGwg bWFuYWdlIGlycSBoYW5kbGVyIG9uIG91ciBvd24uICBJbiB0aGlzIGNhc2UsIGlycV9lbmFibGVk Cj4gKwkgKiBuZWVkIHRvIGJlIHRydWUgZm9yIHVzaW5nIHZibGFuayBjb3JlIHN1cHBvcnQuCj4g KwkgKi8KPiArCWRybS0+aXJxX2VuYWJsZWQgPSB0cnVlOwo+ICsKPiArCWRybV9tb2RlX2NvbmZp Z19yZXNldChkcm0pOwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7Cj4gKwo+ICsJ cHJpdi0+ZmJkZXYgPSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLCAzMiwgZHJtLT5tb2RlX2NvbmZp Zy5udW1fY3J0YywKPiArCQkJCQkgZHJtLT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yKTsKPiAr CWlmIChJU19FUlIocHJpdi0+ZmJkZXYpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihwcml2LT5mYmRl dik7Cj4gKwkJcHJpdi0+ZmJkZXYgPSBOVUxMOwo+ICsJCWdvdG8gb3V0X2Zpbmk7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfZmluaToKPiArCWRybV9rbXNfaGVscGVyX3BvbGxf ZmluaShkcm0pOwo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArCWRybV92Ymxh bmtfY2xlYW51cChkcm0pOwo+ICtvdXRfdW5iaW5kOgo+ICsJY29tcG9uZW50X3VuYmluZF9hbGwo ZGV2LCBkcm0pOwo+ICtvdXRfdW5yZWdpc3RlcjoKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0p Owo+ICtvdXRfZnJlZToKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwo+ICsJZHJtX2Rl dl91bnJlZihkcm0pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgenhf ZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCB6eF9kcm1fcHJpdmF0ZSAq cHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYgKHByaXYtPmZiZGV2KSB7Cj4gKwkJ ZHJtX2ZiZGV2X2NtYV9maW5pKHByaXYtPmZiZGV2KTsKPiArCQlwcml2LT5mYmRldiA9IE5VTEw7 Cj4gKwl9Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiArCWNvbXBvbmVudF91 bmJpbmRfYWxsKGRldiwgZHJtKTsKPiArCWRybV92YmxhbmtfY2xlYW51cChkcm0pOwo+ICsJZHJt X21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ ICsJZHJtX2Rldl91bnJlZihkcm0pOwo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gKwlk ZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfbWFzdGVyX29wcyB6eF9kcm1fbWFzdGVyX29wcyA9IHsKPiArCS5iaW5kID0g enhfZHJtX2JpbmQsCj4gKwkudW5iaW5kID0genhfZHJtX3VuYmluZCwKPiArfTsKPiArCj4gK3N0 YXRpYyBpbnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gK3sK PiArCXJldHVybiBkZXYtPm9mX25vZGUgPT0gZGF0YTsKPiArfQo+ICsKPiArc3RhdGljIGludCB6 eF9kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50 ID0gZGV2LT5vZl9ub2RlOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKPiArCXN0cnVj dCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0 ID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUocGFyZW50LCBOVUxMLCBOVUxMLCBkZXYpOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9v Zl9ub2RlKHBhcmVudCwgY2hpbGQpIHsKPiArCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgJm1h dGNoLCBjb21wYXJlX29mLCBjaGlsZCk7Cj4gKwkJb2Zfbm9kZV9wdXQoY2hpbGQpOwo+ICsJfQo+ ICsKPiArCXJldHVybiBjb21wb25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKGRldiwgJnp4X2Ry bV9tYXN0ZXJfb3BzLCBtYXRjaCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgenhfZHJtX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwljb21wb25lbnRfbWFzdGVy X2RlbCgmcGRldi0+ZGV2LCAmenhfZHJtX21hc3Rlcl9vcHMpOwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHp4X2RybV9vZl9tYXRjaFtd ID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJ6dGUsengyOTY3MTgtdm91IiwgfSwKPiArCXsgLyog ZW5kICovIH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHp4X2RybV9vZl9tYXRj aCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eF9kcm1fcGxhdGZvcm1f ZHJpdmVyID0gewo+ICsJLnByb2JlID0genhfZHJtX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHp4X2Ry bV9yZW1vdmUsCj4gKwkuZHJpdmVyCT0gewo+ICsJCS5uYW1lID0gInp4LWRybSIsCj4gKwkJLm9m X21hdGNoX3RhYmxlCT0genhfZHJtX29mX21hdGNoLAo+ICsJfSwKPiArfTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcml2ZXJzW10gPSB7Cj4gKwkmenhfY3J0Y19kcml2 ZXIsCj4gKwkmenhfaGRtaV9kcml2ZXIsCj4gKwkmenhfZHJtX3BsYXRmb3JtX2RyaXZlciwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgenhfZHJtX2luaXQodm9pZCkKPiArewo+ICsJcmV0dXJuIHBs YXRmb3JtX3JlZ2lzdGVyX2RyaXZlcnMoZHJpdmVycywgQVJSQVlfU0laRShkcml2ZXJzKSk7Cj4g K30KPiArbW9kdWxlX2luaXQoenhfZHJtX2luaXQpOwo+ICsKPiArc3RhdGljIHZvaWQgenhfZHJt X2V4aXQodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fdW5yZWdpc3Rlcl9kcml2ZXJzKGRyaXZlcnMs IEFSUkFZX1NJWkUoZHJpdmVycykpOwo+ICt9Cj4gK21vZHVsZV9leGl0KHp4X2RybV9leGl0KTsK PiArCj4gK01PRFVMRV9BVVRIT1IoIlNoYXduIEd1byA8c2hhd24uZ3VvQGxpbmFyby5vcmc+Iik7 Cj4gK01PRFVMRV9ERVNDUklQVElPTigiWlRFIFpYIFZPVSBEUk0gZHJpdmVyIik7Cj4gK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96 eF9kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuaAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xNGM3NDk5NDkxNTEKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmgKPiBAQCAtMCww ICsxLDIyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCj4gKyAqIENv cHlyaWdodCAyMDE2IFpURSBDb3Jwb3JhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1pYX0RSTV9EUlZfSF9fCj4gKyNkZWZp bmUgX19aWF9EUk1fRFJWX0hfXwo+ICsKPiArc3RydWN0IHp4X2RybV9wcml2YXRlIHsKPiArCXN0 cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKPiArCXN0cnVjdCB6eF92b3VfaHcgKnZvdTsKPiAr fTsKPiArCj4gK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHp4X2NydGNfZHJpdmVyOwo+ ICtleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eF9oZG1pX2RyaXZlcjsKPiArCj4gKyNl bmRpZiAvKiBfX1pYX0RSTV9EUlZfSF9fICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS96dGUvenhfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9oZG1pLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNWFhYWI4NDkzYjFiCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfaGRtaS5jCj4gQEAgLTAsMCAr MSw1NDAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTYgTGluYXJvIEx0ZC4KPiArICogQ29w eXJpZ2h0IDIwMTYgWlRFIENvcnBvcmF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9lZGlk Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsj aW5jbHVkZSA8bGludXgvaGRtaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+ ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KPiArCj4gKyNpbmNsdWRlICJ6eF9jcnRjLmgiCj4gKwo+ICsjZGVmaW5lIEZVTkNfU0VM CQkJMHgwMDBiCj4gKyNkZWZpbmUgRlVOQ19IRE1JX0VOCQkJQklUKDApCj4gKyNkZWZpbmUgQ0xL UFdECQkJCTB4MDAwZAo+ICsjZGVmaW5lIENMS1BXRF9QRElEQ0sJCQlCSVQoMikKPiArI2RlZmlu ZSBQV0RfU1JTVAkJCTB4MDAxMAo+ICsjZGVmaW5lIFAyVF9DVFJMCQkJMHgwMDY2Cj4gKyNkZWZp bmUgUDJUX0RDX1BLVF9FTgkJCUJJVCg3KQo+ICsjZGVmaW5lIEwxX0lOVFJfU1RBVAkJCTB4MDA3 ZQo+ICsjZGVmaW5lIEwxX0lOVFJfU1RBVF9JTlRSMQkJQklUKDApCj4gKyNkZWZpbmUgSU5UUjFf U1RBVAkJCTB4MDA4Zgo+ICsjZGVmaW5lIElOVFIxX01BU0sJCQkweDAwOTUKPiArI2RlZmluZSBJ TlRSMV9NT05JVE9SX0RFVEVDVAkJKEJJVCg1KSB8IEJJVCg2KSkKPiArI2RlZmluZSBaWF9ERENf QUREUgkJCTB4MDBlZAo+ICsjZGVmaW5lIFpYX0REQ19TRUdNCQkJMHgwMGVlCj4gKyNkZWZpbmUg WlhfRERDX09GRlNFVAkJCTB4MDBlZgo+ICsjZGVmaW5lIFpYX0REQ19ESU5fQ05UMQkJCTB4MDBm MAo+ICsjZGVmaW5lIFpYX0REQ19ESU5fQ05UMgkJCTB4MDBmMQo+ICsjZGVmaW5lIFpYX0REQ19D TUQJCQkweDAwZjMKPiArI2RlZmluZSBERENfQ01EX01BU0sJCQkweGYKPiArI2RlZmluZSBERENf Q01EX0NMRUFSX0ZJRk8JCTB4OQo+ICsjZGVmaW5lIEREQ19DTURfU0VRVUVOVElBTF9SRUFECQkw eDIKPiArI2RlZmluZSBaWF9ERENfREFUQQkJCTB4MDBmNAo+ICsjZGVmaW5lIFpYX0REQ19ET1VU X0NOVAkJCTB4MDBmNQo+ICsjZGVmaW5lIEREQ19ET1VUX0NOVF9NQVNLCQkweDFmCj4gKyNkZWZp bmUgVEVTVF9UWENUUkwJCQkweDAwZjcKPiArI2RlZmluZSBURVNUX1RYQ1RSTF9IRE1JX01PREUJ CUJJVCgxKQo+ICsjZGVmaW5lIEhETUlDVEw0CQkJMHgwMjM1Cj4gKyNkZWZpbmUgVFBJX0hQRF9S U0VOCQkJMHgwNjNiCj4gKyNkZWZpbmUgVFBJX0hQRF9DT05ORUNUSU9OCQkoQklUKDEpIHwgQklU KDIpKQo+ICsjZGVmaW5lIFRQSV9JTkZPX0ZTRUwJCQkweDA2YmYKPiArI2RlZmluZSBGU0VMX0FW SQkJCTAKPiArI2RlZmluZSBGU0VMX0dCRAkJCTEKPiArI2RlZmluZSBGU0VMX0FVRElPCQkJMgo+ ICsjZGVmaW5lIEZTRUxfU1BECQkJMwo+ICsjZGVmaW5lIEZTRUxfTVBFRwkJCTQKPiArI2RlZmlu ZSBGU0VMX1ZTSUYJCQk1Cj4gKyNkZWZpbmUgVFBJX0lORk9fQjAJCQkweDA2YzAKPiArI2RlZmlu ZSBUUElfSU5GT19FTgkJCTB4MDZkZgo+ICsjZGVmaW5lIFRQSV9JTkZPX1RSQU5TX0VOCQlCSVQo NykKPiArI2RlZmluZSBUUElfSU5GT19UUkFOU19SUFQJCUJJVCg2KQo+ICsjZGVmaW5lIFRQSV9E RENfTUFTVEVSX0VOCQkweDA2ZjgKPiArI2RlZmluZSBIV19ERENfTUFTVEVSCQkJQklUKDcpCj4g Kwo+ICsjZGVmaW5lIFpYX0hETUlfSU5GT0ZSQU1FX1NJWkUJCTMxCj4gKwo+ICtzdHJ1Y3Qgenhf aGRtaSB7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7Cj4gKwlzdHJ1Y3QgZHJt X2VuY29kZXIgZW5jb2RlcjsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm07Cj4gKwl2b2lkIF9faW9tZW0gKm1taW87Cj4gKwlzdHJ1Y3QgY2xrICpjZWNf Y2xrOwo+ICsJc3RydWN0IGNsayAqb3NjX2NsazsKPiArCXN0cnVjdCBjbGsgKnhjbGs7Cj4gKwli b29sIHNpbmtfaXNfaGRtaTsKPiArCWJvb2wgc2lua19oYXNfYXVkaW87Cj4gKwlzdHJ1Y3Qgdm91 X2luZiAqaW5mOwo+ICt9Owo+ICsKPiArI2RlZmluZSB0b196eF9oZG1pKHgpCWNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3QgenhfaGRtaSwgeCkKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgdm91X2luZiB2b3Vf aW5mX2hkbWkgPSB7Cj4gKwkuaWQgPSBWT1VfSERNSSwKPiArCS5kYXRhX3NlbCA9IFZPVV9ZVVY0 NDQsCj4gKwkuY2xvY2tzX2VuX2JpdHMgPSBCSVQoMjQpIHwgQklUKDE4KSB8IEJJVCg2KSwKPiAr CS5jbG9ja3Nfc2VsX2JpdHMgPSBCSVQoMTMpIHwgQklUKDIpLAo+ICt9Owo+ICsKPiArc3RhdGlj IGlubGluZSB1OCBoZG1pX3JlYWRiKHN0cnVjdCB6eF9oZG1pICpoZG1pLCB1MTYgb2Zmc2V0KQo+ ICt7Cj4gKwlyZXR1cm4gcmVhZGxfcmVsYXhlZChoZG1pLT5tbWlvICsgb2Zmc2V0ICogNCk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBoZG1pX3dyaXRlYihzdHJ1Y3QgenhfaGRtaSAq aGRtaSwgdTE2IG9mZnNldCwgdTggdmFsKQo+ICt7Cj4gKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGhk bWktPm1taW8gKyBvZmZzZXQgKiA0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB6eF9oZG1pX2lu Zm9mcmFtZV90cmFucyhzdHJ1Y3QgenhfaGRtaSAqaGRtaSwKPiArCQkJCSAgIHVuaW9uIGhkbWlf aW5mb2ZyYW1lICpmcmFtZSwgdTggZnNlbCkKPiArewo+ICsJdTggYnVmZmVyW1pYX0hETUlfSU5G T0ZSQU1FX1NJWkVdOwo+ICsJdTggdmFsOwo+ICsJc3NpemVfdCBudW07Cj4gKwlpbnQgaTsKPiAr Cj4gKwloZG1pX3dyaXRlYihoZG1pLCBUUElfSU5GT19GU0VMLCBmc2VsKTsKPiArCj4gKwludW0g PSBoZG1pX2luZm9mcmFtZV9wYWNrKGZyYW1lLCBidWZmZXIsIFpYX0hETUlfSU5GT0ZSQU1FX1NJ WkUpOwo+ICsJaWYgKG51bSA8IDApCj4gKwkJcmV0dXJuIG51bTsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtOyBpKyspCj4gKwkJaGRtaV93cml0ZWIoaGRtaSwgVFBJX0lORk9fQjAgKyBpLCBi dWZmZXJbaV0pOwo+ICsKPiArCXZhbCA9IGhkbWlfcmVhZGIoaGRtaSwgVFBJX0lORk9fRU4pOwo+ ICsJdmFsIHw9IFRQSV9JTkZPX1RSQU5TX0VOIHwgVFBJX0lORk9fVFJBTlNfUlBUOwo+ICsJaGRt aV93cml0ZWIoaGRtaSwgVFBJX0lORk9fRU4sIHZhbCk7Cj4gKwo+ICsJcmV0dXJuIG51bTsKPiAr fQo+ICsKPiArc3RhdGljIGludCB6eF9oZG1pX2NvbmZpZ192aWRlb192c2koc3RydWN0IHp4X2hk bWkgKmhkbWksCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sK PiArCXVuaW9uIGhkbWlfaW5mb2ZyYW1lIGZyYW1lOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSBkcm1faGRtaV92ZW5kb3JfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZS52ZW5k b3IuaGRtaSwKPiArCQkJCQkJCSAgbW9kZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJcmV0dXJuIHp4X2hkbWlfaW5mb2ZyYW1lX3RyYW5zKGhkbWksICZmcmFtZSwgRlNF TF9WU0lGKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB6eF9oZG1pX2NvbmZpZ192aWRlb19hdmko c3RydWN0IHp4X2hkbWkgKmhkbWksCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpCj4gK3sKPiArCXVuaW9uIGhkbWlfaW5mb2ZyYW1lIGZyYW1lOwo+ICsJaW50IHJldDsK PiArCj4gKwlyZXQgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZm cmFtZS5hdmksIG1vZGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8q IFdlIGFsd2F5cyB1c2UgWVVWNDQ0IGZvciBIRE1JIG91dHB1dC4gKi8KPiArCWZyYW1lLmF2aS5j b2xvcnNwYWNlID0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NDsKPiArCj4gKwlyZXR1cm4genhfaGRt aV9pbmZvZnJhbWVfdHJhbnMoaGRtaSwgJmZyYW1lLCBGU0VMX0FWSSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHp4X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIsCj4gKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCQkJ ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCj4gK3sKPiArCXN0cnVjdCB6 eF9oZG1pICpoZG1pID0gdG9fenhfaGRtaShlbmNvZGVyKTsKPiArCj4gKwlpZiAoaGRtaS0+c2lu a19pc19oZG1pKSB7Cj4gKwkJenhfaGRtaV9jb25maWdfdmlkZW9fYXZpKGhkbWksIG1vZGUpOwo+ ICsJCXp4X2hkbWlfY29uZmlnX3ZpZGVvX3ZzaShoZG1pLCBtb2RlKTsKPiArCX0KPiArfQo+ICsK PiArc3RhdGljIHZvaWQgenhfaGRtaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIpCj4gK3sKPiArCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gdG9fenhfaGRtaShlbmNv ZGVyKTsKPiArCj4gKwl2b3VfaW5mX2VuYWJsZShoZG1pLT5pbmYpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB6eF9oZG1pX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCj4gK3sKPiArCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gdG9fenhfaGRtaShlbmNvZGVyKTsK PiArCj4gKwl2b3VfaW5mX2Rpc2FibGUoaGRtaS0+aW5mKTsKPiArfQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgenhfaGRtaV9lbmNvZGVyX2hlbHBl cl9mdW5jcyA9IHsKPiArCS5lbmFibGUJPSB6eF9oZG1pX2VuY29kZXJfZW5hYmxlLAo+ICsJLmRp c2FibGUgPSB6eF9oZG1pX2VuY29kZXJfZGlzYWJsZSwKPiArCS5tb2RlX3NldCA9IHp4X2hkbWlf ZW5jb2Rlcl9tb2RlX3NldCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Vu Y29kZXJfZnVuY3MgenhfaGRtaV9lbmNvZGVyX2Z1bmNzID0gewo+ICsJLmRlc3Ryb3kgPSBkcm1f ZW5jb2Rlcl9jbGVhbnVwLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB6eF9oZG1pX2dldF9lZGlk X2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICpidWYsIHVuc2lnbmVkIGludCBibG9jaywKPiArCQkJCSAg c2l6ZV90IGxlbikKPiArewo+ICsJc3RydWN0IHp4X2hkbWkgKmhkbWkgPSBkYXRhOwo+ICsJaW50 IHJldHJ5ID0gMDsKPiArCWludCByZXQgPSAwOwo+ICsJaW50IGkgPSAwOwo+ICsJdTggdmFsOwo+ ICsKPiArCS8qIEVuYWJsZSBEREMgbWFzdGVyIGFjY2VzcyAqLwo+ICsJdmFsID0gaGRtaV9yZWFk YihoZG1pLCBUUElfRERDX01BU1RFUl9FTik7Cj4gKwl2YWwgfD0gSFdfRERDX01BU1RFUjsKPiAr CWhkbWlfd3JpdGViKGhkbWksIFRQSV9ERENfTUFTVEVSX0VOLCB2YWwpOwo+ICsKPiArCWhkbWlf d3JpdGViKGhkbWksIFpYX0REQ19BRERSLCAweGEwKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIFpY X0REQ19PRkZTRVQsIGJsb2NrICogRURJRF9MRU5HVEgpOwo+ICsJLyogQml0cyBbOTo4XSBvZiBi eXRlcyAqLwo+ICsJaGRtaV93cml0ZWIoaGRtaSwgWlhfRERDX0RJTl9DTlQyLCAobGVuID4+IDgp ICYgMHhmZik7Cj4gKwkvKiBCaXRzIFs3OjBdIG9mIGJ5dGVzICovCj4gKwloZG1pX3dyaXRlYiho ZG1pLCBaWF9ERENfRElOX0NOVDEsIGxlbiAmIDB4ZmYpOwo+ICsKPiArCS8qIENsZWFyIEZJRk8g Ki8KPiArCXZhbCA9IGhkbWlfcmVhZGIoaGRtaSwgWlhfRERDX0NNRCk7Cj4gKwl2YWwgJj0gfkRE Q19DTURfTUFTSzsKPiArCXZhbCB8PSBERENfQ01EX0NMRUFSX0ZJRk87Cj4gKwloZG1pX3dyaXRl YihoZG1pLCBaWF9ERENfQ01ELCB2YWwpOwo+ICsKPiArCS8qIEtpY2sgb2ZmIHRoZSByZWFkICov Cj4gKwl2YWwgPSBoZG1pX3JlYWRiKGhkbWksIFpYX0REQ19DTUQpOwo+ICsJdmFsICY9IH5ERENf Q01EX01BU0s7Cj4gKwl2YWwgfD0gRERDX0NNRF9TRVFVRU5USUFMX1JFQUQ7Cj4gKwloZG1pX3dy aXRlYihoZG1pLCBaWF9ERENfQ01ELCB2YWwpOwoKSXQgbG9va3MgbGlrZSB0aGUgWlhfRERDIHJl Z2lzdGVyIHJhbmdlIGltcGxlbWVudHMgYSBodyBpMmMgZW5naW5lIChzaW5jZQp5b3Ugc3BlY2lm aXkgcG9ydCBhbmQgb2Zmc2V0cyBhbmQgZXZlcnl0aGluZykuIFBsZWFzZSBpbXBsZW1lbnQgaXQg YXMgYW4KaTJjX2FkYXB0ZXIgZHJpdmVyIGFuZCB1c2UgdGhlIG5vcm1hbCBkcm1fZ2V0X2VkaWQg ZnVuY3Rpb24uCgo+ICsKPiArCXdoaWxlIChsZW4gPiAwKSB7Cj4gKwkJaW50IGNudCwgajsKPiAr Cj4gKwkJLyogRklGTyBuZWVkcyBzb21lIHRpbWUgdG8gZ2V0IHJlYWR5ICovCj4gKwkJdXNsZWVw X3JhbmdlKDUwMCwgMTAwMCk7Cj4gKwo+ICsJCWNudCA9IGhkbWlfcmVhZGIoaGRtaSwgWlhfRERD X0RPVVRfQ05UKSAmIEREQ19ET1VUX0NOVF9NQVNLOwo+ICsJCWlmIChjbnQgPT0gMCkgewo+ICsJ CQlpZiAoKytyZXRyeSA+IDUpIHsKPiArCQkJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRERDIHJlYWQg dGltZWQgb3V0ISIpOwo+ICsJCQkJcmV0ID0gLUVUSU1FRE9VVDsKPiArCQkJCWJyZWFrOwo+ICsJ CQl9Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IGNudDsg aisrKQo+ICsJCQlidWZbaSsrXSA9IGhkbWlfcmVhZGIoaGRtaSwgWlhfRERDX0RBVEEpOwo+ICsJ CWxlbiAtPSBjbnQ7Cj4gKwl9Cj4gKwo+ICsJLyogRGlzYWJsZSBEREMgbWFzdGVyIGFjY2VzcyAq Lwo+ICsJdmFsID0gaGRtaV9yZWFkYihoZG1pLCBUUElfRERDX01BU1RFUl9FTik7Cj4gKwl2YWwg Jj0gfkhXX0REQ19NQVNURVI7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCBUUElfRERDX01BU1RFUl9F TiwgdmFsKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHp4X2hk bWlfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ ICt7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAqaGRtaSA9IHRvX3p4X2hkbWkoY29ubmVjdG9yKTsKPiAr CXN0cnVjdCBlZGlkICplZGlkOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZWRpZCA9IGRybV9k b19nZXRfZWRpZChjb25uZWN0b3IsIHp4X2hkbWlfZ2V0X2VkaWRfYmxvY2ssIGhkbWkpOwo+ICsJ aWYgKGVkaWQpIHsKPiArCQloZG1pLT5zaW5rX2lzX2hkbWkgPSBkcm1fZGV0ZWN0X2hkbWlfbW9u aXRvcihlZGlkKTsKPiArCQloZG1pLT5zaW5rX2hhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRv cl9hdWRpbyhlZGlkKTsKPiArCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVy dHkoY29ubmVjdG9yLCBlZGlkKTsKPiArCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVj dG9yLCBlZGlkKTsKPiArCQlrZnJlZShlZGlkKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKPiArenhfaGRtaV9jb25uZWN0 b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkgICAg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlyZXR1cm4gTU9ERV9PSzsK PiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyB6eF9o ZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZ2V0X21vZGVzID0genhfaGRtaV9j b25uZWN0b3JfZ2V0X21vZGVzLAo+ICsJLm1vZGVfdmFsaWQgPSB6eF9oZG1pX2Nvbm5lY3Rvcl9t b2RlX3ZhbGlkLAo+ICt9Owo+ICsKPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMK PiArenhfaGRtaV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsIGJvb2wgZm9yY2UpCj4gK3sKPiArCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gdG9fenhfaGRt aShjb25uZWN0b3IpOwo+ICsKPiArCXJldHVybiAoaGRtaV9yZWFkYihoZG1pLCBUUElfSFBEX1JT RU4pICYgVFBJX0hQRF9DT05ORUNUSU9OKSA/Cj4gKwkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0 ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgenhfaGRtaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQo+ICt7Cj4gKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKPiArCWRy bV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgenhfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7Cj4g KwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAo+ICsJLmZpbGxfbW9k ZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCj4gKwkuZGV0ZWN0 ID0genhfaGRtaV9jb25uZWN0b3JfZGV0ZWN0LAo+ICsJLmRlc3Ryb3kgPSB6eF9oZG1pX2Nvbm5l Y3Rvcl9kZXN0cm95LAo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jl c2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IHp4X2hkbWlfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHp4X2hk bWkgKmhkbWkpCj4gK3sKPiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZoZG1pLT5l bmNvZGVyOwo+ICsKPiArCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gVk9VX0NSVENfTUFTSzsK PiArCj4gKwlkcm1fZW5jb2Rlcl9pbml0KGRybSwgZW5jb2RlciwgJnp4X2hkbWlfZW5jb2Rlcl9m dW5jcywKPiArCQkJIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7Cj4gKwlkcm1fZW5jb2Rl cl9oZWxwZXJfYWRkKGVuY29kZXIsICZ6eF9oZG1pX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKPiAr Cj4gKwloZG1pLT5jb25uZWN0b3IucG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKPiAr Cj4gKwlkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmaGRtaS0+Y29ubmVjdG9yLCAmenhfaGRtaV9j b25uZWN0b3JfZnVuY3MsCj4gKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7Cj4gKwlk cm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmhkbWktPmNvbm5lY3RvciwKPiArCQkJCSAmenhfaGRt aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0 YWNoX2VuY29kZXIoJmhkbWktPmNvbm5lY3RvciwgZW5jb2Rlcik7Cj4gKwlkcm1fY29ubmVjdG9y X3JlZ2lzdGVyKCZoZG1pLT5jb25uZWN0b3IpOwoKQXMgbWVudGlvbmVkLCB0aGVzZSBkcm1fY29u bmVjdG9yX3JlZ2lzdGVyL3VucmVnaXN0ZXIgY2FsbHMgYXJlbid0IG5lZWRlZAp3aXRoIGNvcnJl Y3Qgb3JkZXJpbmcgaW4gYmluZC91bmJpbmQuCgo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaXJxcmV0dXJuX3QgenhfaGRtaV9pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRl dl9pZCkKPiArewo+ICsJc3RydWN0IHp4X2hkbWkgKmhkbWkgPSBkZXZfaWQ7Cj4gKwo+ICsJZHJt X2hlbHBlcl9ocGRfaXJxX2V2ZW50KGhkbWktPmNvbm5lY3Rvci5kZXYpOwo+ICsKPiArCXJldHVy biBJUlFfSEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IHp4X2hkbWlfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAq aGRtaSA9IGRldl9pZDsKPiArCXU4IGxzdGF0Owo+ICsKPiArCWxzdGF0ID0gaGRtaV9yZWFkYiho ZG1pLCBMMV9JTlRSX1NUQVQpOwo+ICsKPiArCS8qIE1vbml0b3IgZGV0ZWN0L0hQRCBpbnRlcnJ1 cHQgKi8KPiArCWlmIChsc3RhdCAmIEwxX0lOVFJfU1RBVF9JTlRSMSkgewo+ICsJCXU4IHN0YXQg PSBoZG1pX3JlYWRiKGhkbWksIElOVFIxX1NUQVQpOwo+ICsKPiArCQloZG1pX3dyaXRlYihoZG1p LCBJTlRSMV9TVEFULCBzdGF0KTsKPiArCQlpZiAoc3RhdCAmIElOVFIxX01PTklUT1JfREVURUNU KQo+ICsJCQlyZXR1cm4gSVJRX1dBS0VfVEhSRUFEOwo+ICsJfQo+ICsKPiArCXJldHVybiBJUlFf Tk9ORTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgenhfaGRtaV9waHlfc3RhcnQoc3RydWN0IHp4 X2hkbWkgKmhkbWkpCj4gK3sKPiArCS8qIENvcHkgZnJvbSBaVEUgQlNQIGNvZGUgKi8KPiArCWhk bWlfd3JpdGViKGhkbWksIDB4MjIyLCAweDApOwo+ICsJaGRtaV93cml0ZWIoaGRtaSwgMHgyMjQs IDB4NCk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDkwOSwgMHgwKTsKPiArCWhkbWlfd3JpdGVi KGhkbWksIDB4N2IwLCAweDkwKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2IxLCAweDAwKTsK PiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2IyLCAweGE3KTsKPiArCWhkbWlfd3JpdGViKGhkbWks IDB4N2I4LCAweGFhKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2IyLCAweGE3KTsKPiArCWhk bWlfd3JpdGViKGhkbWksIDB4N2IzLCAweDBmKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2I0 LCAweDBmKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2I1LCAweDU1KTsKPiArCWhkbWlfd3Jp dGViKGhkbWksIDB4N2I3LCAweDAzKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2I5LCAweDEy KTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2JhLCAweDMyKTsKPiArCWhkbWlfd3JpdGViKGhk bWksIDB4N2JjLCAweDY4KTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2JlLCAweDQwKTsKPiAr CWhkbWlfd3JpdGViKGhkbWksIDB4N2JmLCAweDg0KTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4 N2MxLCAweDBmKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2M4LCAweDAyKTsKPiArCWhkbWlf d3JpdGViKGhkbWksIDB4N2M5LCAweDAzKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2NhLCAw eDQwKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2RjLCAweDMxKTsKPiArCWhkbWlfd3JpdGVi KGhkbWksIDB4N2UyLCAweDA0KTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2UwLCAweDA2KTsK PiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2NiLCAweDY4KTsKPiArCWhkbWlfd3JpdGViKGhkbWks IDB4N2Y5LCAweDAyKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIDB4N2I2LCAweDAyKTsKPiArCWhk bWlfd3JpdGViKGhkbWksIDB4N2YzLCAweDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9o ZG1pX2h3X2luaXQoc3RydWN0IHp4X2hkbWkgKmhkbWkpCj4gK3sKPiArCXU4IHZhbDsKPiArCj4g KwkvKiBTb2Z0d2FyZSByZXNldCAqLwo+ICsJaGRtaV93cml0ZWIoaGRtaSwgUFdEX1NSU1QsIDEp Owo+ICsKPiArCS8qIEVuYWJsZSBwY2xrICovCj4gKwl2YWwgPSBoZG1pX3JlYWRiKGhkbWksIENM S1BXRCk7Cj4gKwl2YWwgfD0gQ0xLUFdEX1BESURDSzsKPiArCWhkbWlfd3JpdGViKGhkbWksIENM S1BXRCwgdmFsKTsKPiArCj4gKwkvKiBFbmFibGUgSERNSSBmb3IgVFggKi8KPiArCXZhbCA9IGhk bWlfcmVhZGIoaGRtaSwgRlVOQ19TRUwpOwo+ICsJdmFsIHw9IEZVTkNfSERNSV9FTjsKPiArCWhk bWlfd3JpdGViKGhkbWksIEZVTkNfU0VMLCB2YWwpOwo+ICsKPiArCS8qIEVuYWJsZSBkZWVwIGNv bG9yIHBhY2tldCAqLwo+ICsJdmFsID0gaGRtaV9yZWFkYihoZG1pLCBQMlRfQ1RSTCk7Cj4gKwl2 YWwgfD0gUDJUX0RDX1BLVF9FTjsKPiArCWhkbWlfd3JpdGViKGhkbWksIFAyVF9DVFJMLCB2YWwp Owo+ICsKPiArCS8qIEVuYWJsZSBIRE1JL01ITCBtb2RlIGZvciBvdXRwdXQgKi8KPiArCXZhbCA9 IGhkbWlfcmVhZGIoaGRtaSwgVEVTVF9UWENUUkwpOwo+ICsJdmFsIHw9IFRFU1RfVFhDVFJMX0hE TUlfTU9ERTsKPiArCWhkbWlfd3JpdGViKGhkbWksIFRFU1RfVFhDVFJMLCB2YWwpOwo+ICsKPiAr CS8qIENvbmZpZ3VyZSByZWdfcWNfc2VsICovCj4gKwloZG1pX3dyaXRlYihoZG1pLCBIRE1JQ1RM NCwgMHgzKTsKPiArCj4gKwkvKiBFbmFibGUgaW50ZXJydXB0ICovCj4gKwl2YWwgPSBoZG1pX3Jl YWRiKGhkbWksIElOVFIxX01BU0spOwo+ICsJdmFsIHw9IElOVFIxX01PTklUT1JfREVURUNUOwo+ ICsJaGRtaV93cml0ZWIoaGRtaSwgSU5UUjFfTUFTSywgdmFsKTsKPiArCj4gKwkvKiBDbGVhciBy ZXNldCBmb3Igbm9ybWFsIG9wZXJhdGlvbiAqLwo+ICsJaGRtaV93cml0ZWIoaGRtaSwgUFdEX1NS U1QsIDApOwo+ICsKPiArCS8qIFN0YXJ0IHVwIHBoeSAqLwo+ICsJenhfaGRtaV9waHlfc3RhcnQo aGRtaSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgenhfaGRtaV9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0YTsKPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ICsJ c3RydWN0IHp4X2hkbWkgKmhkbWk7Cj4gKwlzdHJ1Y3Qgdm91X2luZiAqaW5mOwo+ICsJaW50IGly cTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaGRtaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq aGRtaSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFoZG1pKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCWhkbWktPmRldiA9IGRldjsKPiArCWhkbWktPmRybSA9IGRybTsKPiArCj4gKwlpbmYg PSAmdm91X2luZl9oZG1pOwo+ICsJaW5mLT5lbmNvZGVyID0gJmhkbWktPmVuY29kZXI7Cj4gKwlo ZG1pLT5pbmYgPSBpbmY7Cj4gKwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgaGRtaSk7Cj4gKwo+ ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsK PiArCWhkbWktPm1taW8gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ICsJaWYg KElTX0VSUihoZG1pLT5tbWlvKSkKPiArCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5tbWlvKTsKPiAr Cj4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+ICsJaWYgKGlycSA8IDApCj4g KwkJcmV0dXJuIGlycTsKPiArCj4gKwloZG1pLT5jZWNfY2xrID0gZGV2bV9jbGtfZ2V0KGhkbWkt PmRldiwgIm9zY19jZWMiKTsKPiArCWlmIChJU19FUlIoaGRtaS0+Y2VjX2NsaykpCj4gKwkJcmV0 dXJuIFBUUl9FUlIoaGRtaS0+Y2VjX2Nsayk7Cj4gKwo+ICsJaGRtaS0+b3NjX2NsayA9IGRldm1f Y2xrX2dldChoZG1pLT5kZXYsICJvc2NfY2xrIik7Cj4gKwlpZiAoSVNfRVJSKGhkbWktPm9zY19j bGspKQo+ICsJCXJldHVybiBQVFJfRVJSKGhkbWktPm9zY19jbGspOwo+ICsKPiArCWhkbWktPnhj bGsgPSBkZXZtX2Nsa19nZXQoaGRtaS0+ZGV2LCAieGNsayIpOwo+ICsJaWYgKElTX0VSUihoZG1p LT54Y2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihoZG1pLT54Y2xrKTsKPiArCj4gKwl6eF9oZG1p X2h3X2luaXQoaGRtaSk7Cj4gKwo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNlY19jbGsp Owo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPm9zY19jbGspOwo+ICsJY2xrX3ByZXBhcmVf ZW5hYmxlKGhkbWktPnhjbGspOwo+ICsKPiArCXJldCA9IHp4X2hkbWlfcmVnaXN0ZXIoZHJtLCBo ZG1pKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBkZXZtX3Jl cXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaXJxLCB6eF9oZG1pX2lycV9oYW5kbGVyLAo+ICsJCQkJ CXp4X2hkbWlfaXJxX3RocmVhZCwgSVJRRl9TSEFSRUQsCj4gKwkJCQkJZGV2X25hbWUoZGV2KSwg aGRtaSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHp4X2hkbWlf dW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkg ICB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jZWNfY2xrKTsK PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5vc2NfY2xrKTsKPiArCWNsa19kaXNhYmxl X3VucHJlcGFyZShoZG1pLT54Y2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBj b21wb25lbnRfb3BzIHp4X2hkbWlfY29tcG9uZW50X29wcyA9IHsKPiArCS5iaW5kID0genhfaGRt aV9iaW5kLAo+ICsJLnVuYmluZCA9IHp4X2hkbWlfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCB6eF9oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiAr CXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ6eF9oZG1pX2NvbXBvbmVudF9vcHMp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHp4X2hkbWlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJnp4X2hkbWlf Y29tcG9uZW50X29wcyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgenhfaGRtaV9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJs ZSA9ICJ6dGUsengyOTY3MTgtaGRtaSIsIH0sCj4gKwl7IC8qIGVuZCAqLyB9LAo+ICt9Owo+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6eF9oZG1pX29mX21hdGNoKTsKPiArCj4gK3N0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgenhfaGRtaV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSB6eF9oZG1pX3By b2JlLAo+ICsJLnJlbW92ZSA9IHp4X2hkbWlfcmVtb3ZlLAo+ICsJLmRyaXZlcgk9IHsKPiArCQku bmFtZSA9ICJ6eC1oZG1pIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUJPSB6eF9oZG1pX29mX21hdGNo LAo+ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFu ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjMyNmNjMWZmNzk1MAo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMKPiBAQCAtMCwwICsxLDM2MiBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgo+ICsgKiBDb3B5cmlnaHQgMjAx NiBaVEUgQ29ycG9yYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz Cj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1f bW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxw ZXIuaD4KPiArCj4gKyNpbmNsdWRlICJ6eF9jcnRjLmgiCj4gKyNpbmNsdWRlICJ6eF9wbGFuZS5o Igo+ICsKPiArLyogR0wgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgR0xfQ1RSTDAJCQkweDAwCj4g KyNkZWZpbmUgR0xfVVBEQVRFCQkJQklUKDUpCj4gKyNkZWZpbmUgR0xfQ1RSTDEJCQkweDA0Cj4g KyNkZWZpbmUgR0xfREFUQV9GTVRfU0hJRlQJCTAKPiArI2RlZmluZSBHTF9EQVRBX0ZNVF9NQVNL CQkoMHhmIDw8IEdMX0RBVEFfRk1UX1NISUZUKQo+ICsjZGVmaW5lIEdMX0ZNVF9BUkdCODg4OAkJ CTAKPiArI2RlZmluZSBHTF9GTVRfUkdCODg4CQkJMQo+ICsjZGVmaW5lIEdMX0ZNVF9SR0I1NjUJ CQkyCj4gKyNkZWZpbmUgR0xfRk1UX0FSR0IxNTU1CQkJMwo+ICsjZGVmaW5lIEdMX0ZNVF9BUkdC NDQ0NAkJCTQKPiArI2RlZmluZSBHTF9DVFJMMgkJCTB4MDgKPiArI2RlZmluZSBHTF9HTE9CQUxf QUxQSEFfU0hJRlQJCTgKPiArI2RlZmluZSBHTF9HTE9CQUxfQUxQSEFfTUFTSwkJKDB4ZmYgPDwg R0xfR0xPQkFMX0FMUEhBX1NISUZUKQo+ICsjZGVmaW5lIEdMX0NUUkwzCQkJMHgwYwo+ICsjZGVm aW5lIEdMX1NDQUxFUl9CWVBBU1NfTU9ERQkJQklUKDApCj4gKyNkZWZpbmUgR0xfU1RSSURFCQkJ MHgxOAo+ICsjZGVmaW5lIEdMX0FERFIJCQkJMHgxYwo+ICsjZGVmaW5lIEdMX1NSQ19TSVpFCQkJ MHgzOAo+ICsjZGVmaW5lIEdMX1NSQ19XX1NISUZUCQkJMTYKPiArI2RlZmluZSBHTF9TUkNfV19N QVNLCQkJKDB4M2ZmZiA8PCBHTF9TUkNfV19TSElGVCkKPiArI2RlZmluZSBHTF9TUkNfSF9TSElG VAkJCTAKPiArI2RlZmluZSBHTF9TUkNfSF9NQVNLCQkJKDB4M2ZmZiA8PCBHTF9TUkNfSF9TSElG VCkKPiArI2RlZmluZSBHTF9QT1NfU1RBUlQJCQkweDljCj4gKyNkZWZpbmUgR0xfUE9TX0VORAkJ CTB4YTAKPiArI2RlZmluZSBHTF9QT1NfWF9TSElGVAkJCTE2Cj4gKyNkZWZpbmUgR0xfUE9TX1hf TUFTSwkJCSgweDFmZmYgPDwgR0xfUE9TX1hfU0hJRlQpCj4gKyNkZWZpbmUgR0xfUE9TX1lfU0hJ RlQJCQkwCj4gKyNkZWZpbmUgR0xfUE9TX1lfTUFTSwkJCSgweDFmZmYgPDwgR0xfUE9TX1lfU0hJ RlQpCj4gKwo+ICsvKiBDU0MgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgQ1NDX0NUUkwwCQkJMHgz MAo+ICsjZGVmaW5lIENTQ19DT1ZfTU9ERV9TSElGVAkJMTYKPiArI2RlZmluZSBDU0NfQ09WX01P REVfTUFTSwkJKDB4ZmZmZiA8PCBDU0NfQ09WX01PREVfU0hJRlQpCj4gKyNkZWZpbmUgQ1NDX0JU NjAxX0lNQUdFX1JHQjJZQ0JDUgkwCj4gKyNkZWZpbmUgQ1NDX0JUNjAxX0lNQUdFX1lDQkNSMlJH QgkxCj4gKyNkZWZpbmUgQ1NDX0JUNjAxX1ZJREVPX1JHQjJZQ0JDUgkyCj4gKyNkZWZpbmUgQ1ND X0JUNjAxX1ZJREVPX1lDQkNSMlJHQgkzCj4gKyNkZWZpbmUgQ1NDX0JUNzA5X0lNQUdFX1JHQjJZ Q0JDUgk0Cj4gKyNkZWZpbmUgQ1NDX0JUNzA5X0lNQUdFX1lDQkNSMlJHQgk1Cj4gKyNkZWZpbmUg Q1NDX0JUNzA5X1ZJREVPX1JHQjJZQ0JDUgk2Cj4gKyNkZWZpbmUgQ1NDX0JUNzA5X1ZJREVPX1lD QkNSMlJHQgk3Cj4gKyNkZWZpbmUgQ1NDX0JUMjAyMF9JTUFHRV9SR0IyWUNCQ1IJOAo+ICsjZGVm aW5lIENTQ19CVDIwMjBfSU1BR0VfWUNCQ1IyUkdCCTkKPiArI2RlZmluZSBDU0NfQlQyMDIwX1ZJ REVPX1JHQjJZQ0JDUgkxMAo+ICsjZGVmaW5lIENTQ19CVDIwMjBfVklERU9fWUNCQ1IyUkdCCTEx Cj4gKyNkZWZpbmUgQ1NDX1dPUktfRU5BQkxFCQkJQklUKDApCj4gKwo+ICsvKiBSU1ogcmVnaXN0 ZXJzICovCj4gKyNkZWZpbmUgUlNaX1NSQ19DRkcJCQkweDAwCj4gKyNkZWZpbmUgUlNaX0RFU1Rf Q0ZHCQkJMHgwNAo+ICsjZGVmaW5lIFJTWl9FTkFCTEVfQ0ZHCQkJMHgxNAo+ICsKPiArLyogSEJT QyByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBIQlNDX1NBVFVSQVRJT04JCQkweDAwCj4gKyNkZWZp bmUgSEJTQ19IVUUJCQkweDA0Cj4gKyNkZWZpbmUgSEJTQ19CUklHSFQJCQkweDA4Cj4gKyNkZWZp bmUgSEJTQ19DT05UUkFTVAkJCTB4MGMKPiArI2RlZmluZSBIQlNDX1RIUkVTSE9MRF9DT0wxCQkw eDEwCj4gKyNkZWZpbmUgSEJTQ19USFJFU0hPTERfQ09MMgkJMHgxNAo+ICsjZGVmaW5lIEhCU0Nf VEhSRVNIT0xEX0NPTDMJCTB4MTgKPiArI2RlZmluZSBIQlNDX0NUUkwwCQkJMHgyOAo+ICsjZGVm aW5lIEhCU0NfQ1RSTF9FTgkJCUJJVCgyKQo+ICsKPiArc3RydWN0IHp4X3BsYW5lIHsKPiArCXN0 cnVjdCBkcm1fcGxhbmUgcGxhbmU7Cj4gKwl2b2lkIF9faW9tZW0gKmxheWVyOwo+ICsJdm9pZCBf X2lvbWVtICpjc2M7Cj4gKwl2b2lkIF9faW9tZW0gKmhic2M7Cj4gKwl2b2lkIF9faW9tZW0gKnJz ejsKPiArfTsKPiArCj4gKyNkZWZpbmUgdG9fenhfcGxhbmUocGxhbmUpCWNvbnRhaW5lcl9vZihw bGFuZSwgc3RydWN0IHp4X3BsYW5lLCBwbGFuZSkKPiArCj4gK3N0YXRpYyBjb25zdCB1aW50MzJf dCBnbF9mb3JtYXRzW10gPSB7Cj4gKwlEUk1fRk9STUFUX0FSR0I4ODg4LAo+ICsJRFJNX0ZPUk1B VF9YUkdCODg4OCwKPiArCURSTV9GT1JNQVRfUkdCODg4LAo+ICsJRFJNX0ZPUk1BVF9SR0I1NjUs Cj4gKwlEUk1fRk9STUFUX0FSR0IxNTU1LAo+ICsJRFJNX0ZPUk1BVF9BUkdCNDQ0NCwKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgenhfZ2xfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7 Cj4gKwl1MzIgc3JjX3csIHNyY19oOwo+ICsKPiArCXNyY193ID0gc3RhdGUtPnNyY193ID4+IDE2 Owo+ICsJc3JjX2ggPSBzdGF0ZS0+c3JjX2ggPj4gMTY7Cj4gKwo+ICsJLyogVE9ETzogc3VwcG9y dCBzY2FsaW5nIG9mIHRoZSBwbGFuZSBzb3VyY2UgKi8KPiArCWlmICgoc3JjX3cgIT0gc3RhdGUt PmNydGNfdykgfHwgKHNyY19oICE9IHN0YXRlLT5jcnRjX2gpKQo+ICsJCXJldHVybiAtRUlOVkFM OwoKVGhpcyBpcyBnZW5lcmFsbHkgbm90IGVub3VnaCBjaGVja2luZy4gWW91IHByb2JhYmx5IG5l ZWQgYSBjYWxsIHRvCmRybV9wbGFuZV9oZWxwZXJfY2hlY2tfc3RhdGUuCgo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHp4X2dsX2dldF9mbXQodWludDMyX3QgZm9ybWF0 KQo+ICt7Cj4gKwlzd2l0Y2ggKGZvcm1hdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4 Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ICsJCXJldHVybiBHTF9GTVRfQVJHQjg4 ODg7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICsJCXJldHVybiBHTF9GTVRfUkdCODg4 Owo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCQlyZXR1cm4gR0xfRk1UX1JHQjU2NTsK PiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKPiArCQlyZXR1cm4gR0xfRk1UX0FSR0IxNTU1 Owo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0Ogo+ICsJCXJldHVybiBHTF9GTVRfQVJHQjQ0 NDQ7Cj4gKwlkZWZhdWx0Ogo+ICsJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBwaXhlbCBmb3JtYXQg JWRcbiIsIGZvcm1hdCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCB6eF9nbF9zZXRfdXBkYXRlKHN0cnVjdCB6eF9wbGFuZSAqenBsYW5l KQo+ICt7Cj4gKwl2b2lkIF9faW9tZW0gKmxheWVyID0genBsYW5lLT5sYXllcjsKPiArCXUzMiB2 YWw7Cj4gKwo+ICsJdmFsID0gcmVhZGwobGF5ZXIgKyBHTF9DVFJMMCk7Cj4gKwl2YWwgfD0gR0xf VVBEQVRFOwo+ICsJd3JpdGVsKHZhbCwgbGF5ZXIgKyBHTF9DVFJMMCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCB6eF9nbF9yc3pfc2V0X3VwZGF0ZShzdHJ1Y3QgenhfcGxhbmUgKnpw bGFuZSkKPiArewo+ICsJd3JpdGVsKDEsIHpwbGFuZS0+cnN6ICsgUlNaX0VOQUJMRV9DRkcpOwo+ ICt9Cj4gKwo+ICt2b2lkIHp4X3BsYW5lX3NldF91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUpCj4gK3sKPiArCXN0cnVjdCB6eF9wbGFuZSAqenBsYW5lID0gdG9fenhfcGxhbmUocGxhbmUp Owo+ICsKPiArCXp4X2dsX3Jzel9zZXRfdXBkYXRlKHpwbGFuZSk7Cj4gKwl6eF9nbF9zZXRfdXBk YXRlKHpwbGFuZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHp4X2dsX3Jzel9zZXR1cChzdHJ1 Y3QgenhfcGxhbmUgKnpwbGFuZSwgdTMyIHNyY193LCB1MzIgc3JjX2gsCj4gKwkJCSAgICB1MzIg ZHN0X3csIHUzMiBkc3RfaCkKPiArewo+ICsJdm9pZCBfX2lvbWVtICpyc3ogPSB6cGxhbmUtPnJz ejsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gKChzcmNfaCAtIDEpICYgMHhmZmZmKSA8PCAx NjsKPiArCXZhbCB8PSAoc3JjX3cgLSAxKSAmIDB4ZmZmZjsKPiArCXdyaXRlbCh2YWwsIHJzeiAr IFJTWl9TUkNfQ0ZHKTsKPiArCj4gKwl2YWwgPSAoKGRzdF9oIC0gMSkgJiAweGZmZmYpIDw8IDE2 Owo+ICsJdmFsIHw9IChkc3RfdyAtIDEpICYgMHhmZmZmOwo+ICsJd3JpdGVsKHZhbCwgcnN6ICsg UlNaX0RFU1RfQ0ZHKTsKPiArCj4gKwl6eF9nbF9yc3pfc2V0X3VwZGF0ZSh6cGxhbmUpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9nbF9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAo+ICsJCQkJICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0 YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfcGxhbmUgKnpwbGFuZSA9IHRvX3p4X3BsYW5lKHBsYW5l KTsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmUtPnN0YXRlLT5mYjsKPiAr CXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7Cj4gKwl2b2lkIF9faW9tZW0gKmxh eWVyID0genBsYW5lLT5sYXllcjsKPiArCXZvaWQgX19pb21lbSAqY3NjID0genBsYW5lLT5jc2M7 Cj4gKwl2b2lkIF9faW9tZW0gKmhic2MgPSB6cGxhbmUtPmhic2M7Cj4gKwl1MzIgc3JjX3gsIHNy Y195LCBzcmNfdywgc3JjX2g7Cj4gKwl1MzIgZHN0X3gsIGRzdF95LCBkc3RfdywgZHN0X2g7Cj4g Kwl1bnNpZ25lZCBpbnQgZGVwdGgsIGJwcDsKPiArCXVpbnQzMl90IGZvcm1hdDsKPiArCWRtYV9h ZGRyX3QgcGFkZHI7Cj4gKwl1MzIgc3RyaWRlOwo+ICsJaW50IGZtdDsKPiArCXUzMiB2YWw7Cj4g Kwo+ICsJaWYgKCFmYikKPiArCQlyZXR1cm47Cj4gKwo+ICsJZm9ybWF0ID0gZmItPnBpeGVsX2Zv cm1hdDsKPiArCXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdOwo+ICsKPiArCXNyY194ID0gcGxhbmUt PnN0YXRlLT5zcmNfeCA+PiAxNjsKPiArCXNyY195ID0gcGxhbmUtPnN0YXRlLT5zcmNfeSA+PiAx NjsKPiArCXNyY193ID0gcGxhbmUtPnN0YXRlLT5zcmNfdyA+PiAxNjsKPiArCXNyY19oID0gcGxh bmUtPnN0YXRlLT5zcmNfaCA+PiAxNjsKPiArCj4gKwlkc3RfeCA9IHBsYW5lLT5zdGF0ZS0+Y3J0 Y194Owo+ICsJZHN0X3kgPSBwbGFuZS0+c3RhdGUtPmNydGNfeTsKPiArCWRzdF93ID0gcGxhbmUt PnN0YXRlLT5jcnRjX3c7Cj4gKwlkc3RfaCA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y19oOwo+ICsKPiAr CWRybV9mYl9nZXRfYnBwX2RlcHRoKGZvcm1hdCwgJmRlcHRoLCAmYnBwKTsKPiArCj4gKwljbWFf b2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7Cj4gKwlwYWRkciA9IGNtYV9vYmot PnBhZGRyICsgZmItPm9mZnNldHNbMF07Cj4gKwlwYWRkciArPSBzcmNfeSAqIHN0cmlkZSArIHNy Y194ICogYnBwIC8gODsKPiArCXdyaXRlbChwYWRkciwgbGF5ZXIgKyBHTF9BRERSKTsKPiArCj4g KwkvKiBTZXQgdXAgc291cmNlIGhlaWdodC93aWR0aCByZWdpc3RlciAqLwo+ICsJdmFsID0gKHNy Y193IDw8IEdMX1NSQ19XX1NISUZUKSAmIEdMX1NSQ19XX01BU0s7Cj4gKwl2YWwgfD0gKHNyY19o IDw8IEdMX1NSQ19IX1NISUZUKSAmIEdMX1NSQ19IX01BU0s7Cj4gKwl3cml0ZWwodmFsLCBsYXll ciArIEdMX1NSQ19TSVpFKTsKPiArCj4gKwkvKiBTZXQgdXAgc3RhcnQgcG9zaXRpb24gcmVnaXN0 ZXIgKi8KPiArCXZhbCA9IChkc3RfeCA8PCBHTF9QT1NfWF9TSElGVCkgJiBHTF9QT1NfWF9NQVNL Owo+ICsJdmFsIHw9IChkc3RfeSA8PCBHTF9QT1NfWV9TSElGVCkgJiBHTF9QT1NfWV9NQVNLOwo+ ICsJd3JpdGVsKHZhbCwgbGF5ZXIgKyBHTF9QT1NfU1RBUlQpOwo+ICsKPiArCS8qIFNldCB1cCBl bmQgcG9zaXRpb24gcmVnaXN0ZXIgKi8KPiArCXZhbCA9ICgoZHN0X3ggKyBkc3RfdykgPDwgR0xf UE9TX1hfU0hJRlQpICYgR0xfUE9TX1hfTUFTSzsKPiArCXZhbCB8PSAoKGRzdF95ICsgZHN0X2gp IDw8IEdMX1BPU19ZX1NISUZUKSAmIEdMX1BPU19ZX01BU0s7Cj4gKwl3cml0ZWwodmFsLCBsYXll ciArIEdMX1BPU19FTkQpOwo+ICsKPiArCS8qIFNldCB1cCBzdHJpZGUgcmVnaXN0ZXIgKi8KPiAr CXdyaXRlbChzdHJpZGUgJiAweGZmZmYsIGxheWVyICsgR0xfU1RSSURFKTsKPiArCj4gKwkvKiBT ZXQgdXAgZ3JhcGhpYyBsYXllciBkYXRhIGZvcm1hdCAqLwo+ICsJZm10ID0genhfZ2xfZ2V0X2Zt dChmb3JtYXQpOwo+ICsJaWYgKGZtdCA+PSAwKSB7Cj4gKwkJdmFsID0gcmVhZGwobGF5ZXIgKyBH TF9DVFJMMSk7Cj4gKwkJdmFsICY9IH5HTF9EQVRBX0ZNVF9NQVNLOwo+ICsJCXZhbCB8PSBmbXQg PDwgR0xfREFUQV9GTVRfU0hJRlQ7Cj4gKwkJd3JpdGVsKHZhbCwgbGF5ZXIgKyBHTF9DVFJMMSk7 Cj4gKwl9Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBnbG9iYWwgYWxwaGEgd2l0aCBhIHNhbmUgdmFs dWUgKi8KPiArCXZhbCA9IHJlYWRsKGxheWVyICsgR0xfQ1RSTDIpOwo+ICsJdmFsICY9IH5HTF9H TE9CQUxfQUxQSEFfTUFTSzsKPiArCXZhbCB8PSAweGZmIDw8IEdMX0dMT0JBTF9BTFBIQV9TSElG VDsKPiArCXdyaXRlbCh2YWwsIGxheWVyICsgR0xfQ1RSTDIpOwo+ICsKPiArCS8qIFNldHVwIENT QyBmb3IgdGhlIEdMICovCj4gKwl2YWwgPSByZWFkbChjc2MgKyBDU0NfQ1RSTDApOwo+ICsJdmFs ICY9IH5DU0NfQ09WX01PREVfTUFTSzsKPiArCWlmIChkc3RfaCA+IDcyMCkKPiArCQl2YWwgfD0g Q1NDX0JUNzA5X0lNQUdFX1JHQjJZQ0JDUiA8PCBDU0NfQ09WX01PREVfU0hJRlQ7Cj4gKwllbHNl Cj4gKwkJdmFsIHw9IENTQ19CVDYwMV9JTUFHRV9SR0IyWUNCQ1IgPDwgQ1NDX0NPVl9NT0RFX1NI SUZUOwo+ICsJdmFsIHw9IENTQ19XT1JLX0VOQUJMRTsKPiArCXdyaXRlbCh2YWwsIGNzYyArIENT Q19DVFJMMCk7Cj4gKwo+ICsJLyogQWx3YXlzIHVzZSBzY2FsZXIgc2luY2UgaXQgZXhpc3RzICov Cj4gKwl2YWwgPSByZWFkbChsYXllciArIEdMX0NUUkwzKTsKPiArCXZhbCB8PSBHTF9TQ0FMRVJf QllQQVNTX01PREU7CS8qIHNldCBmb3Igbm90IGJ5cGFzcyAqLwo+ICsJd3JpdGVsKHZhbCwgbGF5 ZXIgKyBHTF9DVFJMMyk7Cj4gKwo+ICsJenhfZ2xfcnN6X3NldHVwKHpwbGFuZSwgc3JjX3csIHNy Y19oLCBkc3RfdywgZHN0X2gpOwo+ICsKPiArCS8qIEVuYWJsZSBIQlNDIGJsb2NrICovCj4gKwl2 YWwgPSByZWFkbChoYnNjICsgSEJTQ19DVFJMMCk7Cj4gKwl2YWwgfD0gSEJTQ19DVFJMX0VOOwo+ ICsJd3JpdGVsKHZhbCwgaGJzYyArIEhCU0NfQ1RSTDApOwo+ICsKPiArCXp4X2dsX3NldF91cGRh dGUoenBsYW5lKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVs cGVyX2Z1bmNzIHp4X2dsX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5hdG9taWNfY2hlY2sg PSB6eF9nbF9wbGFuZV9hdG9taWNfY2hlY2ssCj4gKwkuYXRvbWljX3VwZGF0ZSA9IHp4X2dsX3Bs YW5lX2F0b21pY191cGRhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9wbGFuZV9kZXN0 cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlkcm1fcGxhbmVfaGVscGVyX2Rp c2FibGUocGxhbmUpOwo+ICsJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyB6eF9wbGFuZV9mdW5jcyA9IHsKPiAr CS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCj4gKwkuZGlz YWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCj4gKwkuZGVzdHJv eSA9IHp4X3BsYW5lX2Rlc3Ryb3ksCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFu ZV9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lk IHp4X3BsYW5lX2hic2NfaW5pdChzdHJ1Y3QgenhfcGxhbmUgKnpwbGFuZSkKPiArewo+ICsJdm9p ZCBfX2lvbWVtICpoYnNjID0genBsYW5lLT5oYnNjOwo+ICsKPiArCS8qCj4gKwkgKiAgSW5pdGlh bGl6ZSBIQlNDIGJsb2NrIHdpdGggYSBzYW5lIGNvbmZpZ3VyYXRpb24gcGVyIHJlY29tbWVkYXRp b24KPiArCSAqICBmcm9tIFpURSBCU1AgY29kZS4KPiArCSAqLwo+ICsJd3JpdGVsKDB4MjAwLCBo YnNjICsgSEJTQ19TQVRVUkFUSU9OKTsKPiArCXdyaXRlbCgweDAsIGhic2MgKyBIQlNDX0hVRSk7 Cj4gKwl3cml0ZWwoMHgwLCBoYnNjICsgSEJTQ19CUklHSFQpOwo+ICsJd3JpdGVsKDB4MjAwLCBo YnNjICsgSEJTQ19DT05UUkFTVCk7Cj4gKwo+ICsJd3JpdGVsKCgweDNhYyA8PCAxNikgfCAweDQw LCBoYnNjICsgSEJTQ19USFJFU0hPTERfQ09MMSk7Cj4gKwl3cml0ZWwoKDB4M2MwIDw8IDE2KSB8 IDB4NDAsIGhic2MgKyBIQlNDX1RIUkVTSE9MRF9DT0wyKTsKPiArCXdyaXRlbCgoMHgzYzAgPDwg MTYpIHwgMHg0MCwgaGJzYyArIEhCU0NfVEhSRVNIT0xEX0NPTDMpOwo+ICt9Cj4gKwo+ICtzdHJ1 Y3QgZHJtX3BsYW5lICp6eF9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVj dCBkZXZpY2UgKmRldiwKPiArCQkJCXN0cnVjdCB6eF9sYXllcl9kYXRhICpkYXRhLAo+ICsJCQkJ ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyAqaGVscGVyOwo+ICsJc3RydWN0IHp4X3BsYW5lICp6cGxhbmU7Cj4gKwlz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCWNvbnN0IHVpbnQzMl90ICpmb3JtYXRzOwo+ICsJ dW5zaWduZWQgaW50IGZvcm1hdF9jb3VudDsKPiArCWludCByZXQ7Cj4gKwo+ICsJenBsYW5lID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp6cGxhbmUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh enBsYW5lKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCXBsYW5lID0gJnpw bGFuZS0+cGxhbmU7Cj4gKwo+ICsJenBsYW5lLT5sYXllciA9IGRhdGEtPmxheWVyOwo+ICsJenBs YW5lLT5oYnNjID0gZGF0YS0+aGJzYzsKPiArCXpwbGFuZS0+Y3NjID0gZGF0YS0+Y3NjOwo+ICsJ enBsYW5lLT5yc3ogPSBkYXRhLT5yc3o7Cj4gKwo+ICsJenhfcGxhbmVfaGJzY19pbml0KHpwbGFu ZSk7Cj4gKwo+ICsJc3dpdGNoICh0eXBlKSB7Cj4gKwljYXNlIERSTV9QTEFORV9UWVBFX1BSSU1B Ulk6Cj4gKwkJaGVscGVyID0gJnp4X2dsX3BsYW5lX2hlbHBlcl9mdW5jczsKPiArCQlmb3JtYXRz ID0gZ2xfZm9ybWF0czsKPiArCQlmb3JtYXRfY291bnQgPSBBUlJBWV9TSVpFKGdsX2Zvcm1hdHMp Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgo+ICsJCS8qIFRP RE86IGFkZCB2aWRlbyBsYXllciAodmwpIHN1cHBvcnQgKi8KPiArCQlicmVhazsKPiArCWRlZmF1 bHQ6Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJt X3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgcGxhbmUsIFZPVV9DUlRDX01BU0ssCj4gKwkJCQkg ICAgICAgJnp4X3BsYW5lX2Z1bmNzLCBmb3JtYXRzLCBmb3JtYXRfY291bnQsCj4gKwkJCQkgICAg ICAgdHlwZSwgTlVMTCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4g Kwo+ICsJZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsIGhlbHBlcik7Cj4gKwo+ICsJcmV0dXJu IHBsYW5lOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUu aCBiL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfcGxhbmUuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yYjgyY2Q1NThkOWQKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oCj4gQEAgLTAsMCArMSwyNiBAQAo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBa VEUgQ29ycG9yYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4g KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgX19aWF9QTEFORV9IX18KPiArI2RlZmluZSBfX1pYX1BMQU5FX0hf Xwo+ICsKPiArc3RydWN0IHp4X2xheWVyX2RhdGEgewo+ICsJdm9pZCBfX2lvbWVtICpsYXllcjsK PiArCXZvaWQgX19pb21lbSAqY3NjOwo+ICsJdm9pZCBfX2lvbWVtICpoYnNjOwo+ICsJdm9pZCBf X2lvbWVtICpyc3o7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX3BsYW5lICp6eF9wbGFuZV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJCXN0cnVj dCB6eF9sYXllcl9kYXRhICpkYXRhLAo+ICsJCQkJZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKTsK PiArdm9pZCB6eF9wbGFuZV9zZXRfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKPiAr Cj4gKyNlbmRpZiAvKiBfX1pYX1BMQU5FX0hfXyAqLwo+IC0tIAo+IDEuOS4xCj4gCgotLSAKRGFu aWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Js b2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==