From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC v4 02/11] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Mon, 19 Oct 2015 10:56:44 +0200 Message-ID: <20151019085644.GO13786@phenom.ffwll.local> References: <1445026333-17013-1-git-send-email-p.zabel@pengutronix.de> <1445026333-17013-3-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1445026333-17013-3-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philipp Zabel Cc: Mark Rutland , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , dri-devel@lists.freedesktop.org, Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de List-Id: linux-mediatek@lists.infradead.org T24gRnJpLCBPY3QgMTYsIDIwMTUgYXQgMTA6MTI6MDRQTSArMDIwMCwgUGhpbGlwcCBaYWJlbCB3 cm90ZToKPiBGcm9tOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgo+IAo+IFRoaXMgcGF0Y2gg YWRkcyBhbiBpbml0aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUAo+ IHN1YnN5c3RlbS4gSXQgY3VycmVudGx5IHN1cHBvcnRzIHR3byBmaXhlZCBvdXRwdXQgc3RyZWFt cyBmcm9tIHRoZQo+IE9WTDAvT1ZMMSBzb3VyY2VzIHRvIHRoZSBEU0kwL0RQSTAgc2lua3MsIHJl c3BlY3RpdmVseS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29t Pgo+IFNpZ25lZC1vZmYtYnk6IFlUIFNoZW4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgo+IFNpZ25l ZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+CgpCdW5jaCBv ZiBkcml2ZS1ieSBjb21tZW50cyBiZWxvdyB0byBwb2ludCBvdXQgZGVwcmVjYXRlZCBmdW5jdGlv bnMgYW5kCm1vcmUgY29tbW9uIGFwcHJvYWNoZXMgdXNlZCBieSBvdGhlciBkcml2ZXJzLiBEb24n dCBjb25zaWRlciB0aGlzIGEgZnVsbApyZXZpZXcgOy0pCgpDaGVlcnMsIERhbmllbAoKPiAtLS0K PiBDaGFuZ2VzIHNpbmNlIHYzOgo+ICAtIFJlbW92ZWQgY3J0YyBlbmFibGluZy9kaXNhYmxpbmcg b24gYmluZC91bmJpbmQsIHRoZSBlbmFibGUvZGlzYWJsZQo+ICAgIGNhbGxiYWNrcyBzaG91bGQg c3VmZmljZS4KPiAgLSBGaW5kIHNpYmxpbmcgY29tcG9uZW50cyBpbiB0aGUgZGV2aWNlIHRyZWUg dmlhIGNvbXBhdGlibGUgdmFsdWUKCmJ0dyBmb3IgRFQgY29tcG9uZW50cyBzdHVmZiB0aGVyZSdz IHBpbGVzIG9mIFJGQ3MgZmxvYXRpbmcgYXJvdW5kIHRvCmV4dHJhY3QgdGhpcyBpbnRvIGhlbHBl ciBsaWJyYXJpZXMuIFdvdWxkIGJlIGdyZWF0IHdlIGNvdWxkIHB1c2ggb25lIG9mCnRoZW0gZm9y d2FyZC4KCj4gIC0gU3BsaXQgY29tcG9uZW50IHR5cGUgYW5kIGluc3RhbmNlIGlkIGVudW1zCj4g IC0gRGV0ZXJtaW5lIGNvbXBvbmVudCB0eXBlIGZyb20gY29tcGF0aWJsZSwgY29tcG9uZW50IGlu c3RhbmNlIGlkIGZyb20KPiAgICB0eXBlIGFuZCBvZiBhbGlhcwo+ICAtIEFkZGVkIHJlbWFpbmlu ZyBEU0ksIFJETUEgYW5kIFdETUEgaWRzCj4gIC0gTW92ZWQgcmVnaXN0ZXIgbWFwcGluZyBhbmQg bXV0ZXggbm9kZSBzZWFyY2ggaW50byBwcm9iZSBmdW5jdGlvbgo+ICAtIEJpbmQgZHJtIGRyaXZl ciB0byBtZWRpYXRlayxtdDgxNzMtbW1zeXMgY29tcGF0aWJsZSBub2RlCj4gIC0gRG8gbm90IHRy eSB0byBjYWxsIGRtYV9mcmVlX2F0dHJzIGlmIGRtYV9hbGxvY19hdHRycyBmYWlsZWQuCj4gLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPiAg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICB8ICAxNiArCj4gIGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICAgICAgfCAgMTAgKwo+ICBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwgNTI0ICsrKysrKysrKysr KysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMu aCAgICAgfCAgODQgKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw LmMgICAgICB8IDIxOCArKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHAuaCAgICAgIHwgIDM5ICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2RkcF9jb21wLmMgfCA0MDkgKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaCB8ICA4NiArKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyAgICAgIHwgNTU2ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggICAg ICB8ICA2MSArKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYyAgICAg ICB8IDE1MSArKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5o ICAgICAgIHwgIDI5ICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5j ICAgICAgfCAyMDggKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZ2VtLmggICAgICB8ICA1NiArKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fcGxhbmUuYyAgICB8IDE3NSArKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fcGxhbmUuaCAgICB8ICAzOCArKwo+ICAxOCBmaWxlcyBjaGFuZ2VkLCAyNjYzIGlu c2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9LY29uZmlnCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv TWFrZWZpbGUKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2NydGMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fY3J0Yy5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHAuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaAo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIu aAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f Z2VtLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2dlbS5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9wbGFuZS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9wbGFuZS5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9L Y29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBpbmRleCAxYTBhOGRmLi45ZTk5ODdi IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKPiBAQCAtMjY0LDMgKzI2NCw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUv ZHJtL3N0aS9LY29uZmlnIgo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tj b25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKPiArCj4g K3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWciCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IGlu ZGV4IDQ1ZTc3MTkuLmFmNmI1OTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTY3LDYgKzY3LDcgQEAg b2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KPiAgb2JqLSQoQ09ORklHX0RSTV9URUdSQSkg Kz0gdGVncmEvCj4gIG9iai0kKENPTkZJR19EUk1fU1RJKSArPSBzdGkvCj4gIG9iai0kKENPTkZJ R19EUk1fSU1YKSArPSBpbXgvCj4gK29iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlh dGVrLwo+ICBvYmoteQkJCSs9IGkyYy8KPiAgb2JqLXkJCQkrPSBwYW5lbC8KPiAgb2JqLXkJCQkr PSBicmlkZ2UvCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLjUzNDNjZjEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKPiBAQCAtMCwwICsxLDE2IEBACj4gK2NvbmZpZyBE Uk1fTUVESUFURUsKPiArCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIK PiArCWRlcGVuZHMgb24gRFJNCj4gKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgKEFSTSAm JiBDT01QSUxFX1RFU1QpCj4gKwlzZWxlY3QgTVRLX1NNSQo+ICsJc2VsZWN0IERSTV9QQU5FTAo+ ICsJc2VsZWN0IERSTV9NSVBJX0RTSQo+ICsJc2VsZWN0IERSTV9QQU5FTF9TSU1QTEUKPiArCXNl bGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IElPTU1VX0RNQQo+ICsJaGVscAo+ICsJICBD aG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBNZWRpYXRlayBTb0NzLgo+ICsJICBUaGUg bW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1lZGlhdGVrLWRybQo+ICsJICBUaGlzIGRyaXZlciBwcm92 aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAo+ICsJICBidWZmZXIgbWFuYWdlbWVudCB0byB1 c2Vyc3BhY2UuCj4gKwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmJhNmQzZmMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCj4gQEAgLTAsMCArMSwxMCBAQAo+ICtt ZWRpYXRlay1kcm0teSA6PSBtdGtfZHJtX2Rydi5vIFwKPiArCQkgIG10a19kcm1fY3J0Yy5vIFwK PiArCQkgIG10a19kcm1fZGRwLm8gXAo+ICsJCSAgbXRrX2RybV9kZHBfY29tcC5vIFwKPiArCQkg IG10a19kcm1fZmIubyBcCj4gKwkJICBtdGtfZHJtX2dlbS5vIFwKPiArCQkgIG10a19kcm1fcGxh bmUubwo+ICsKPiArb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8K PiArCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMTU4Y2E4NAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKPiBAQCAtMCwwICsxLDUy NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKgo+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9k bWEtYnVmLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxp bnV4L29mX2lycS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlv bi5oPgo+ICsKPiArI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCj4gKyNpbmNsdWRlICJtdGtfZHJt X2NydGMuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJt X2RkcF9jb21wLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgo+ICsjaW5jbHVkZSAibXRr X2RybV9wbGFuZS5oIgo+ICsKPiArdm9pZCBtdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChz dHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IG10a19jcnRjLT5iYXNlLmRldjsKPiArCj4gKwlkcm1fc2VuZF92YmxhbmtfZXZlbnQo ZGV2LCBtdGtfY3J0Yy0+ZXZlbnQtPnBpcGUsIG10a19jcnRjLT5ldmVudCk7Cj4gKwlkcm1fY3J0 Y192YmxhbmtfcHV0KCZtdGtfY3J0Yy0+YmFzZSk7Cj4gKwltdGtfY3J0Yy0+ZXZlbnQgPSBOVUxM Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gK3sKPiArCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cj4gK30KPiArCj4g K3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiArCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPiArewo+ICsJLyogZHJtIGZyYW1ld29y ayBkb2Vzbid0IGNoZWNrIE5VTEwgKi8KPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBtdGtfZHJtX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0 Yyk7Cj4gKwlzdHJ1Y3QgbXRrX2NydGNfZGRwX2NvbnRleHQgKmN0eCA9IG10a19jcnRjLT5jdHg7 Cj4gKwo+ICsJaWYgKFdBUk5fT04oIWNydGMtPnN0YXRlKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ Y3R4LT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKPiArCWN0eC0+cGVuZGlu Z19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5Owo+ICsJY3R4LT5wZW5kaW5nX2NvbmZpZyA9 IHRydWU7Cj4gK30KPiArCj4gK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLCBpbnQgcGlwZSkKPiArewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0 ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf Y3J0YyA9IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOwo+ICsJc3RydWN0IG10a19jcnRj X2RkcF9jb250ZXh0ICpjdHggPSBtdGtfY3J0Yy0+Y3R4Owo+ICsJc3RydWN0IG10a19kZHBfY29t cCAqb3ZsID0gJmN0eC0+ZGRwX2NvbXBbMF07Cj4gKwo+ICsJaWYgKG92bC0+ZnVuY3MtPmNvbXBf ZW5hYmxlX3ZibGFuaykKPiArCQlvdmwtPmZ1bmNzLT5jb21wX2VuYWJsZV92Ymxhbmsob3ZsLT5y ZWdzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBtdGtfZHJtX2NydGNfZGlz YWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHBpcGUpCj4gK3sKPiArCXN0 cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0 IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsK PiArCXN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4ID0gbXRrX2NydGMtPmN0eDsKPiAr CXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9ICZjdHgtPmRkcF9jb21wWzBdOwo+ICsKPiArCWlm IChvdmwtPmZ1bmNzLT5jb21wX2Rpc2FibGVfdmJsYW5rKQo+ICsJCW92bC0+ZnVuY3MtPmNvbXBf ZGlzYWJsZV92Ymxhbmsob3ZsLT5yZWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2Ny dGNfZGRwX3Bvd2VyX29uKHN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4KQo+ICt7Cj4g KwlpbnQgcmV0Owo+ICsJaW50IGk7Cj4gKwo+ICsJRFJNX0lORk8oIm10a19jcnRjX2RkcF9wb3dl cl9vblxuIik7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5kZHBfY29tcF9ucjsgaSsrKSB7Cj4g KwkJcmV0ID0gY2xrX2VuYWJsZShjdHgtPmRkcF9jb21wW2ldLmNsayk7Cj4gKwkJaWYgKHJldCkK PiArCQkJRFJNX0VSUk9SKCJjbGtfZW5hYmxlKGN0eC0+ZGRwX2NvbXBfY2xrWyVkXSlcbiIsIGkp Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfcG93ZXJfb2ZmKHN0 cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4KQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlE Uk1fSU5GTygibXRrX2NydGNfZGRwX3Bvd2VyX29mZlxuIik7Cj4gKwlmb3IgKGkgPSAwOyBpIDwg Y3R4LT5kZHBfY29tcF9ucjsgaSsrKQo+ICsJCWNsa19kaXNhYmxlKGN0eC0+ZGRwX2NvbXBbaV0u Y2xrKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0 IG10a19kcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IG10a19jcnRjX2RkcF9jb250ZXh0 ICpjdHggPSBjcnRjLT5jdHg7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gY3J0Yy0+YmFz ZS5kZXY7Cj4gKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKPiArCWludCByZXQ7Cj4gKwlp bnQgaTsKPiArCj4gKwlpZiAoY3R4LT5jcnRjLT5iYXNlLnN0YXRlKSB7Cj4gKwkJd2lkdGggPSBj cnRjLT5iYXNlLnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5Owo+ICsJCWhlaWdodCA9IGNy dGMtPmJhc2Uuc3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7Cj4gKwl9IGVsc2Ugewo+ICsJ CXdpZHRoID0gMTkyMDsKPiArCQloZWlnaHQgPSAxMDgwOwo+ICsJfQo+ICsKPiArCURSTV9JTkZP KCJtdGtfY3J0Y19kZHBfaHdfaW5pdFxuIik7Cj4gKwo+ICsJLyogZGlzcF9tdGNtb3MgKi8KPiAr CXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZHJtLT5kZXYpOwo+ICsJaWYgKHJldCA8IDApCj4g KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIHBvd2VyIGRvbWFpbjogJWRcbiIsIHJldCk7 Cj4gKwo+ICsJbXRrX2RkcF9jbG9ja19vbihjdHgtPm11dGV4X2Rldik7Cj4gKwltdGtfY3J0Y19k ZHBfcG93ZXJfb24oY3R4KTsKPiArCj4gKwlEUk1fSU5GTygibWVkaWF0ZWtfZGRwX2RkcF9wYXRo X3NldHVwXG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCAoY3R4LT5kZHBfY29tcF9uciAtIDEpOyBp KyspIHsKPiArCQltdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgoY3R4LT5jb25maWdfcmVncywgY3R4 LT5waXBlLAo+ICsJCQkJCSBjdHgtPmRkcF9jb21wW2ldLmZ1bmNzLT5jb21wX2lkLAo+ICsJCQkJ CSBjdHgtPmRkcF9jb21wW2krMV0uZnVuY3MtPmNvbXBfaWQpOwo+ICsJCW10a19kZHBfYWRkX2Nv bXBfdG9fbXV0ZXgoY3R4LT5tdXRleF9kZXYsIGN0eC0+cGlwZSwKPiArCQkJCQkgIGN0eC0+ZGRw X2NvbXBbaV0uZnVuY3MtPmNvbXBfaWQsCj4gKwkJCQkJICBjdHgtPmRkcF9jb21wW2krMV0uZnVu Y3MtPmNvbXBfaWQpOwo+ICsJfQo+ICsKPiArCURSTV9JTkZPKCJkZHBfZGlzcF9wYXRoX3Bvd2Vy X29uICVkeCVkXG4iLCB3aWR0aCwgaGVpZ2h0KTsKPiArCWZvciAoaSA9IDA7IGkgPCBjdHgtPmRk cF9jb21wX25yOyBpKyspIHsKPiArCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wID0gJmN0eC0+ ZGRwX2NvbXBbaV07Cj4gKwo+ICsJCWlmIChjb21wLT5mdW5jcy0+Y29tcF9jb25maWcpCj4gKwkJ CWNvbXAtPmZ1bmNzLT5jb21wX2NvbmZpZyhjb21wLT5yZWdzLCB3aWR0aCwgaGVpZ2h0KTsKPiAr Cj4gKwkJaWYgKGNvbXAtPmZ1bmNzLT5jb21wX3Bvd2VyX29uKQo+ICsJCQljb21wLT5mdW5jcy0+ Y29tcF9wb3dlcl9vbihjb21wLT5yZWdzKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg bXRrX2NydGNfZGRwX2h3X2Zpbmkoc3RydWN0IG10a19kcm1fY3J0YyAqY3J0YykKPiArewo+ICsJ c3RydWN0IG10a19jcnRjX2RkcF9jb250ZXh0ICpjdHggPSBjcnRjLT5jdHg7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKwlzdHJ1Y3QgbXRrX2RkcF9jb21w ICpvdmwgPSAmY3R4LT5kZHBfY29tcFswXTsKPiArCWludCBpOwo+ICsKPiArCURSTV9JTkZPKCJt dGtfY3J0Y19kZHBfaHdfZmluaVxuIik7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05S OyBpKyspIHsKPiArCQljdHgtPnBlbmRpbmdfb3ZsX2VuYWJsZVtpXSA9IGZhbHNlOwo+ICsJCW92 bC0+ZnVuY3MtPmNvbXBfbGF5ZXJfb2ZmKG92bC0+cmVncywgaSk7Cj4gKwl9Cj4gKwltdGtfY3J0 Y19kZHBfcG93ZXJfb2ZmKGN0eCk7Cj4gKwltdGtfZGRwX2Nsb2NrX29mZihjdHgtPm11dGV4X2Rl dik7Cj4gKwo+ICsJLyogZGlzcF9tdGNtb3MgKi8KPiArCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJt LT5kZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5hYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMg PSB0b19tdGtfY3J0YyhjcnRjKTsKPiArCj4gKwlpZiAoV0FSTl9PTihtdGtfY3J0Yy0+ZW5hYmxl ZCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW10a19jcnRjX2RkcF9od19pbml0KG10a19jcnRjKTsK PiArCj4gKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gKwlXQVJOX09OKGRybV9jcnRjX3Zi bGFua19nZXQoY3J0YykgIT0gMCk7Cj4gKwo+ICsJbXRrX2NydGMtPmVuYWJsZWQgPSB0cnVlOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRr X2NydGMoY3J0Yyk7Cj4gKwo+ICsJRFJNX0lORk8oIm10a19kcm1fY3J0Y19kaXNhYmxlICVkXG4i LCBjcnRjLT5iYXNlLmlkKTsKPiArCWlmIChXQVJOX09OKCFtdGtfY3J0Yy0+ZW5hYmxlZCkpCj4g KwkJcmV0dXJuOwo+ICsKPiArCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7Cj4gKwlkcm1fY3J0 Y192Ymxhbmtfb2ZmKGNydGMpOwo+ICsKPiArCW10a19jcnRjX2RkcF9od19maW5pKG10a19jcnRj KTsKPiArCj4gKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAr CQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCj4gK3sKPiAr CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUgPSBjcnRjLT5zdGF0ZTsKPiArCXN0cnVjdCBt dGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7Cj4gKwo+ICsJaWYgKHN0 YXRlLT5ldmVudCkgewo+ICsJCXN0YXRlLT5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNy dGMpOwo+ICsJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsKPiArCQlt dGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+ZXZlbnQ7Cj4gKwkJc3RhdGUtPmV2ZW50ID0gTlVMTDsK PiArCX0KPiArfQo+ICsKPiArdm9pZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBtdGtfZHJt X2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4ID0g Y3J0Yy0+Y3R4Owo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IE9W TF9MQVlFUl9OUjsgaSsrKQo+ICsJCWlmIChjdHgtPnBlbmRpbmdfb3ZsX2RpcnR5W2ldKSB7Cj4g KwkJCWN0eC0+cGVuZGluZ19vdmxfY29uZmlnW2ldID0gdHJ1ZTsKPiArCQkJY3R4LT5wZW5kaW5n X292bF9kaXJ0eVtpXSA9IGZhbHNlOwo+ICsJCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRr X2RybV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAg ICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qg bXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwo+ICsKPiArCW10a19k cm1fY3J0Y19jb21taXQobXRrX2NydGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2Z1bmNzIG10a19jcnRjX2Z1bmNzID0gewo+ICsJLnNldF9jb25maWcJCT0gZHJt X2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiArCS5wYWdlX2ZsaXAJCT0gZHJtX2F0b21pY19o ZWxwZXJfcGFnZV9mbGlwLAo+ICsJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCj4g KwkucmVzZXQJCQk9IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCj4gKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlLAo+ ICsJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJf ZnVuY3MgbXRrX2NydGNfaGVscGVyX2Z1bmNzID0gewo+ICsJLm1vZGVfZml4dXAJPSBtdGtfZHJt X2NydGNfbW9kZV9maXh1cCwKPiArCS5tb2RlX3NldF9ub2ZiCT0gbXRrX2RybV9jcnRjX21vZGVf c2V0X25vZmIsCj4gKwkuZW5hYmxlCQk9IG10a19kcm1fY3J0Y19lbmFibGUsCj4gKwkuZGlzYWJs ZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAo+ICsJLmF0b21pY19iZWdpbgk9IG10a19kcm1fY3J0 Y19hdG9taWNfYmVnaW4sCj4gKwkuYXRvbWljX2ZsdXNoCT0gbXRrX2RybV9jcnRjX2F0b21pY19m bHVzaCwKPiArfTsKPiArCj4gK3N0cnVjdCBtdGtfZHJtX2NydGMgKm10a19kcm1fY3J0Y19jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5 LCBzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IsIGludCBwaXBlLAo+ICsJCXZvaWQgKmN0eCkKPiAr ewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4g KwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXRr X2NydGMgPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghbXRrX2NydGMpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4g Kwo+ICsJbXRrX2NydGMtPnBpcGUgPSBwaXBlOwo+ICsJbXRrX2NydGMtPmN0eCA9IGN0eDsKPiAr CW10a19jcnRjLT5lbmFibGVkID0gZmFsc2U7Cj4gKwo+ICsJcHJpdi0+Y3J0Y1twaXBlXSA9ICZt dGtfY3J0Yy0+YmFzZTsKPiArCj4gKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRy bSwgJm10a19jcnRjLT5iYXNlLCBwcmltYXJ5LCBjdXJzb3IsCj4gKwkJCSZtdGtfY3J0Y19mdW5j cyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NsZWFudXBfY3J0YzsKPiArCj4gKwlkcm1f Y3J0Y19oZWxwZXJfYWRkKCZtdGtfY3J0Yy0+YmFzZSwgJm10a19jcnRjX2hlbHBlcl9mdW5jcyk7 Cj4gKwo+ICsJcmV0dXJuIG10a19jcnRjOwo+ICsKPiArZXJyX2NsZWFudXBfY3J0YzoKPiArCWRy bV9jcnRjX2NsZWFudXAoJm10a19jcnRjLT5iYXNlKTsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2RybV9jcnRjX3BsYW5lX2NvbmZpZyhzdHJ1Y3QgbXRrX2Ry bV9jcnRjICpjcnRjLCB1bnNpZ25lZCBpbnQgaWR4LAo+ICsJCQkgICAgICAgYm9vbCBlbmFibGUs IGRtYV9hZGRyX3QgYWRkcikKPiArewo+ICsJc3RydWN0IG10a19jcnRjX2RkcF9jb250ZXh0ICpj dHggPSBjcnRjLT5jdHg7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZjdHgtPnBsYW5l c1tpZHhdLmJhc2U7Cj4gKwl1bnNpZ25lZCBpbnQgcGl0Y2gsIGZvcm1hdDsKPiArCWludCB4LCB5 Owo+ICsKPiArCWlmICghcGxhbmUtPmZiIHx8ICFwbGFuZS0+c3RhdGUpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCXBpdGNoID0gcGxhbmUtPmZiLT5waXRjaGVzWzBdOwo+ICsJZm9ybWF0ID0gcGxhbmUt PmZiLT5waXhlbF9mb3JtYXQ7Cj4gKwo+ICsJeCA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y194Owo+ICsJ eSA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y195Owo+ICsKPiArCWlmICh4IDwgMCkgewo+ICsJCWFkZHIg LT0geCAqIDQ7Cj4gKwkJeCA9IDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKHkgPCAwKSB7Cj4gKwkJYWRk ciAtPSB5ICogcGl0Y2g7Cj4gKwkJeSA9IDA7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5wZW5kaW5nX292 bF9lbmFibGVbaWR4XSA9IGVuYWJsZTsKPiArCWN0eC0+cGVuZGluZ19vdmxfYWRkcltpZHhdID0g YWRkcjsKPiArCWN0eC0+cGVuZGluZ19vdmxfcGl0Y2hbaWR4XSA9IHBpdGNoOwo+ICsJY3R4LT5w ZW5kaW5nX292bF9mb3JtYXRbaWR4XSA9IGZvcm1hdDsKPiArCWN0eC0+cGVuZGluZ19vdmxfeFtp ZHhdID0geDsKPiArCWN0eC0+cGVuZGluZ19vdmxfeVtpZHhdID0geTsKPiArCWN0eC0+cGVuZGlu Z19vdmxfc2l6ZVtpZHhdID0gY3R4LT5wbGFuZXNbaWR4XS5kaXNwX3NpemU7Cj4gKwljdHgtPnBl bmRpbmdfb3ZsX2RpcnR5W2lkeF0gPSB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtf Y3J0Y19kZHBfaXJxKHN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4KQo+ICt7Cj4gKwlz dHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSAmY3R4LT5kZHBfY29tcFswXTsKPiArCXVuc2lnbmVk IGludCBpOwo+ICsKPiArCWlmIChjdHgtPnBlbmRpbmdfY29uZmlnKSB7Cj4gKwkJY3R4LT5wZW5k aW5nX2NvbmZpZyA9IGZhbHNlOwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05S OyBpKyspCj4gKwkJCW92bC0+ZnVuY3MtPmNvbXBfbGF5ZXJfb2ZmKG92bC0+cmVncywgaSk7Cj4g KwkJb3ZsLT5mdW5jcy0+Y29tcF9jb25maWcob3ZsLT5yZWdzLCBjdHgtPnBlbmRpbmdfd2lkdGgs Cj4gKwkJCQkJCSAgIGN0eC0+cGVuZGluZ19oZWlnaHQpOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgewo+ICsJCWlmIChjdHgtPnBlbmRpbmdfb3ZsX2Nv bmZpZ1tpXSkgewo+ICsJCQlpZiAoIWN0eC0+cGVuZGluZ19vdmxfZW5hYmxlW2ldKQo+ICsJCQkJ b3ZsLT5mdW5jcy0+Y29tcF9sYXllcl9vZmYob3ZsLT5yZWdzLCBpKTsKPiArCj4gKwkJCW92bC0+ ZnVuY3MtPmNvbXBfbGF5ZXJfY29uZmlnKG92bC0+cmVncywgaSwKPiArCQkJCQljdHgtPnBlbmRp bmdfb3ZsX2FkZHJbaV0sCj4gKwkJCQkJY3R4LT5wZW5kaW5nX292bF9waXRjaFtpXSwKPiArCQkJ CQljdHgtPnBlbmRpbmdfb3ZsX2Zvcm1hdFtpXSwKPiArCQkJCQljdHgtPnBlbmRpbmdfb3ZsX3hb aV0sCj4gKwkJCQkJY3R4LT5wZW5kaW5nX292bF95W2ldLAo+ICsJCQkJCWN0eC0+cGVuZGluZ19v dmxfc2l6ZVtpXSk7Cj4gKwo+ICsJCQlpZiAoY3R4LT5wZW5kaW5nX292bF9lbmFibGVbaV0pCj4g KwkJCQlvdmwtPmZ1bmNzLT5jb21wX2xheWVyX29uKG92bC0+cmVncywgaSk7Cj4gKwkJfQo+ICsK PiArCQljdHgtPnBlbmRpbmdfb3ZsX2NvbmZpZ1tpXSA9IGZhbHNlOwo+ICsJfQo+ICsKPiArCWRy bV9oYW5kbGVfdmJsYW5rKGN0eC0+ZHJtX2RldiwgY3R4LT5waXBlKTsKPiArfQo+ICsKPiArc3Rh dGljIGlycXJldHVybl90IG10a19jcnRjX2RkcF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpk ZXZfaWQpCj4gK3sKPiArCXN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4ID0gZGV2X2lk Owo+ICsJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJmN0eC0+ZGRwX2NvbXBbMF07Cj4gKwo+ ICsJaWYgKG92bC0+ZnVuY3MtPmNvbXBfY2xlYXJfdmJsYW5rKQo+ICsJCW92bC0+ZnVuY3MtPmNv bXBfY2xlYXJfdmJsYW5rKG92bC0+cmVncyk7Cj4gKwo+ICsJaWYgKGN0eC0+cGlwZSA+PSAwICYm IGN0eC0+ZHJtX2RldikKPiArCQltdGtfY3J0Y19kZHBfaXJxKGN0eCk7Cj4gKwo+ICsJcmV0dXJu IElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19jcnRjX2RkcF9iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCXZvaWQgKmRhdGEp Cj4gK3sKPiArCXN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4ID0gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7Cj4gKwlzdHJ1 Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5vZGU7Cj4gKwllbnVtIGRybV9wbGFuZV90eXBlIHR5cGU7Cj4gKwl1 bnNpZ25lZCBpbnQgenBvczsKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwljdHgtPmRy bV9kZXYgPSBkcm1fZGV2Owo+ICsJY3R4LT5waXBlID0gcHJpdi0+cGlwZSsrOwo+ICsJY3R4LT5j b25maWdfcmVncyA9IHByaXYtPmNvbmZpZ19yZWdzOwo+ICsJY3R4LT5tdXRleF9kZXYgPSBwcml2 LT5tdXRleF9kZXY7Cj4gKwljdHgtPmRkcF9jb21wX25yID0gcHJpdi0+cGF0aF9sZW5bY3R4LT5w aXBlXTsKPiArCWN0eC0+ZGRwX2NvbXAgPQlkZXZtX2ttYWxsb2NfYXJyYXkoZGV2LCBjdHgtPmRk cF9jb21wX25yLAo+ICsJCQkJCSAgIHNpemVvZigqY3R4LT5kZHBfY29tcCksIEdGUF9LRVJORUwp Owo+ICsKPiArCS8qIHByaXYtPnBhdGhbY3R4LT5waXBlXSBzdGFydHMgd2l0aCB0aGlzIE9WTCBu b2RlICovCj4gKwlwcml2LT5jb21wX25vZGVbcHJpdi0+cGF0aFtjdHgtPnBpcGVdWzBdXSA9IGRl di0+b2Zfbm9kZTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5kZHBfY29tcF9ucjsgaSsr KSB7Cj4gKwkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcCA9ICZjdHgtPmRkcF9jb21wW2ldOwo+ ICsJCWVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQgPSBwcml2LT5wYXRoW2N0eC0+cGlwZV1b aV07Cj4gKwo+ICsJCXJldCA9IG10a19kZHBfY29tcF9pbml0KHByaXYtPmNvbXBfbm9kZVtjb21w X2lkXSwgY29tcCwKPiArCQkJCQljb21wX2lkKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50ICVpXG4iLCBpKTsKPiArCQkJ Z290byB1bnByZXBhcmU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoY29tcC0+Y2xrKSB7Cj4gKwkJCXJl dCA9IGNsa19wcmVwYXJlKGNvbXAtPmNsayk7Cj4gKwkJCWlmIChyZXQpIHsKPiArCQkJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgJWRcbiIsIGkpOwo+ICsJCQkJcmV0ID0g LUVJTlZBTDsKPiArCQkJCWdvdG8gdW5wcmVwYXJlOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsK PiArCWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgewo+ICsJCXR5 cGUgPSAoenBvcyA9PSAwKSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgo+ICsJCQkJKHpwb3Mg PT0gMSkgPyBEUk1fUExBTkVfVFlQRV9DVVJTT1IgOgo+ICsJCQkJCQlEUk1fUExBTkVfVFlQRV9P VkVSTEFZOwo+ICsJCXJldCA9IG10a19wbGFuZV9pbml0KGRybV9kZXYsICZjdHgtPnBsYW5lc1t6 cG9zXSwKPiArCQkJCTEgPDwgY3R4LT5waXBlLCB0eXBlLCB6cG9zLCBPVkxfTEFZRVJfTlIpOwo+ ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gdW5wcmVwYXJlOwo+ICsJfQo+ICsKPiArCWN0eC0+Y3J0 YyA9IG10a19kcm1fY3J0Y19jcmVhdGUoZHJtX2RldiwgJmN0eC0+cGxhbmVzWzBdLmJhc2UsCj4g KwkJCSZjdHgtPnBsYW5lc1sxXS5iYXNlLCBjdHgtPnBpcGUsIGN0eCk7Cj4gKwo+ICsJaWYgKElT X0VSUihjdHgtPmNydGMpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihjdHgtPmNydGMpOwo+ICsJCWdv dG8gdW5wcmVwYXJlOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArdW5wcmVwYXJlOgo+ ICsJd2hpbGUgKC0taSA+PSAwKQo+ICsJCWNsa191bnByZXBhcmUoY3R4LT5kZHBfY29tcFtpXS5j bGspOwo+ICsJb2Zfbm9kZV9wdXQobm9kZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQl2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRr X2NydGNfZGRwX2NvbnRleHQgKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJaW50IGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGN0eC0+ZGRwX2NvbXBfbnI7IGkrKykKPiArCQljbGtf dW5wcmVwYXJlKGN0eC0+ZGRwX2NvbXBbaV0uY2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19jcnRjX2RkcF9jb21wb25lbnRfb3BzID0gewo+ICsJ LmJpbmQJPSBtdGtfY3J0Y19kZHBfYmluZCwKPiArCS51bmJpbmQgPSBtdGtfY3J0Y19kZHBfdW5i aW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtdGtfY3J0Y19kZHBfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKPiArCXN0cnVjdCBtdGtfY3J0Y19kZHBfY29udGV4dCAqY3R4Owo+ICsJaW50IGlycTsK PiArCWludCByZXQ7Cj4gKwo+ICsJY3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgp LCBHRlBfS0VSTkVMKTsKPiArCWlmICghY3R4KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiAr CWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlpZiAoaXJxIDwgMCkKPiArCQly ZXR1cm4gaXJxOwo+ICsKPiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19j cnRjX2RkcF9pcnFfaGFuZGxlciwKPiArCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZf bmFtZShkZXYpLCBjdHgpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byByZXF1ZXN0IGlycSAlZDogJWRcbiIsIGlycSwgcmV0KTsKPiArCQlyZXR1cm4gLUVO WElPOwo+ICsJfQo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGN0eCk7Cj4gKwo+ ICsJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfY3J0Y19kZHBfY29tcG9uZW50X29wcyk7 Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBjb21wb25lbnQ6 ICVkXG4iLCByZXQpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bXRrX2NydGNfZGRwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4g Kwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfY3J0Y19kZHBfY29tcG9uZW50X29wcyk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGli bGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atb3ZsIiwgfSwKPiArCXt9LAo+ICt9Owo+ICtNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoKTsKPiArCj4g K3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlciA9IHsKPiArCS5wcm9i ZQkJPSBtdGtfY3J0Y19kZHBfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IG10a19jcnRjX2RkcF9yZW1v dmUsCj4gKwkuZHJpdmVyCQk9IHsKPiArCQkubmFtZQk9ICJtZWRpYXRlay1kaXNwLW92bCIsCj4g KwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3Bf b3ZsX2RyaXZlcl9kdF9tYXRjaCwKPiArCX0sCj4gK307Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2NydGMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u NjMxM2Y5Mgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9jcnRjLmgKPiBAQCAtMCwwICsxLDg0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAo YykgMjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgTVRL X0RSTV9DUlRDX0gKPiArI2RlZmluZSBNVEtfRFJNX0NSVENfSAo+ICsKPiArI2luY2x1ZGUgIm10 a19kcm1fcGxhbmUuaCIKPiArCj4gKyNkZWZpbmUgT1ZMX0xBWUVSX05SCTQKPiArCj4gK3N0cnVj dCBtdGtfY3J0Y19kZHBfY29udGV4dDsKPiArCj4gKy8qCj4gKyAqIE1lZGlhVGVrIHNwZWNpZmlj IGNydGMgc3RydWN0dXJlLgo+ICsgKgo+ICsgKiBAYmFzZTogY3J0YyBvYmplY3QuCj4gKyAqIEBw aXBlOiBhIGNydGMgaW5kZXggY3JlYXRlZCBhdCBsb2FkKCkgd2l0aCBhIG5ldyBjcnRjIG9iamVj dCBjcmVhdGlvbgo+ICsgKglhbmQgdGhlIGNydGMgb2JqZWN0IHdvdWxkIGJlIHNldCB0byBwcml2 YXRlLT5jcnRjIGFycmF5Cj4gKyAqCXRvIGdldCBhIGNydGMgb2JqZWN0IGNvcnJlc3BvbmRpbmcg dG8gdGhpcyBwaXBlIGZyb20gcHJpdmF0ZS0+Y3J0Ywo+ICsgKglhcnJheSB3aGVuIGlycSBpbnRl cnJ1cHQgb2NjdXJyZWQuIHRoZSByZWFzb24gb2YgdXNpbmcgdGhpcyBwaXBlIGlzIHRoYXQKPiAr ICoJZHJtIGZyYW1ld29yayBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgaXJxIHlldC4KPiArICoJ d2UgY2FuIHJlZmVyIHRvIHRoZSBjcnRjIHRvIGN1cnJlbnQgaGFyZHdhcmUgaW50ZXJydXB0IG9j Y3VycmVkIHRocm91Z2gKPiArICoJdGhpcyBwaXBlIHZhbHVlLgo+ICsgKiBAZW5hYmxlZDogY3J0 YyBlbmFibGVkCj4gKyAqIEBjdHg6IG10ayBjcnRjIGNvbnRleHQgb2JqZWN0Cj4gKyAqIEBldmVu dDogZHJtIHBlbmRpbmcgdmJsYW5rIGV2ZW50Cj4gKyAqIEBwZW5kaW5nX25lZWRzX3ZibGFuazog TmVlZCB0byBzZW5kIGV2ZW50IGluIHZibGFuay4KPiArICovCj4gK3N0cnVjdCBtdGtfZHJtX2Ny dGMgewo+ICsJc3RydWN0IGRybV9jcnRjCQkJCWJhc2U7Cj4gKwl1bnNpZ25lZCBpbnQJCQkJcGlw ZTsKPiArCWJvb2wJCQkJCWVuYWJsZWQ7Cj4gKwlzdHJ1Y3QgbXRrX2NydGNfZGRwX2NvbnRleHQJ CSpjdHg7Cj4gKwo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkJKmV2ZW50Owo+ ICsJYm9vbAkJCQkJcGVuZGluZ19uZWVkc192Ymxhbms7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbXRr X2NydGNfZGRwX2NvbnRleHQgewo+ICsJc3RydWN0IGRldmljZQkJCSpkZXY7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZQkJKmRybV9kZXY7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9jcnRjCQkqY3J0YzsKPiAr CXN0cnVjdCBtdGtfZHJtX3BsYW5lCQlwbGFuZXNbT1ZMX0xBWUVSX05SXTsKPiArCWludAkJCQlw aXBlOwo+ICsKPiArCXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKPiArCXN0cnVjdCBkZXZp Y2UJCQkqbXV0ZXhfZGV2Owo+ICsJdTMyCQkJCWRkcF9jb21wX25yOwo+ICsJc3RydWN0IG10a19k ZHBfY29tcAkJKmRkcF9jb21wOwoKQWxsIHRoZSBhYm92ZSBwcm9iYWJseSBzaG91bGQganVzdCBi ZSBtb3ZlZCBpbnRvIG10a19kcm1fY3J0Yy4gQXQgbGVhc3QgSQpkb24ndCB1bmRlcnN0YW5kIHdo eSB5b3UgbmVlZCB0aGlzIGluZGlyZWN0aW9uLgo+ICsKPiArCWJvb2wJCQkJcGVuZGluZ19jb25m aWc7Cj4gKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3dpZHRoOwo+ICsJdW5zaWduZWQgaW50CQkJ cGVuZGluZ19oZWlnaHQ7Cj4gKwo+ICsJYm9vbAkJCQlwZW5kaW5nX292bF9jb25maWdbT1ZMX0xB WUVSX05SXTsKPiArCWJvb2wJCQkJcGVuZGluZ19vdmxfZW5hYmxlW09WTF9MQVlFUl9OUl07Cj4g Kwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX292bF9hZGRyW09WTF9MQVlFUl9OUl07Cj4gKwl1bnNp Z25lZCBpbnQJCQlwZW5kaW5nX292bF9waXRjaFtPVkxfTEFZRVJfTlJdOwo+ICsJdW5zaWduZWQg aW50CQkJcGVuZGluZ19vdmxfZm9ybWF0W09WTF9MQVlFUl9OUl07Cj4gKwlpbnQJCQkJcGVuZGlu Z19vdmxfeFtPVkxfTEFZRVJfTlJdOwo+ICsJaW50CQkJCXBlbmRpbmdfb3ZsX3lbT1ZMX0xBWUVS X05SXTsKPiArCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfb3ZsX3NpemVbT1ZMX0xBWUVSX05SXTsK PiArCWJvb2wJCQkJcGVuZGluZ19vdmxfZGlydHlbT1ZMX0xBWUVSX05SXTsKClRoaXMgd29ya3Mg c2luY2UgeW91IG9ubHkgdG91Y2ggdGhlc2UgaW4gdGhlIGF0b21pY19jb21taXQgcGhhc2UsIGJ1 dCB0aGUKcmVjb21tZW5kIHdheSB0byBkbyB0aGlzIHdpdGggYXRvbWljIGlzIHRvIHN1YmNsYXNz IGRybV9jcnRjX3N0YXRlOgoKc3RydWN0IG10a19jcnRjX3N0YXRlIHsKCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSBiYXNlOwoKCS8qIGFsbCB0aGUgcGVuZGluZ18gc3R1ZmYgYWJvdmUgKi8KfTsKClRo ZW4geW91IGp1c3QgcGFzcyB0aGUgbXRrIHRvIHlvdXIgaXJxIGhhbmRsZXIgdG8gZG8gdGhlIHVw ZGF0ZS4KCgo+ICt9Owo+ICsKPiArI2RlZmluZSB0b19tdGtfY3J0Yyh4KSBjb250YWluZXJfb2Yo eCwgc3RydWN0IG10a19kcm1fY3J0YywgYmFzZSkKPiArCj4gK2ludCBtdGtfZHJtX2NydGNfZW5h YmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgcGlwZSk7Cj4gK3ZvaWQgbXRr X2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBwaXBl KTsKPiArdm9pZCBtdGtfZHJtX2NydGNfcGxhbmVfY29uZmlnKHN0cnVjdCBtdGtfZHJtX2NydGMg KmNydGMsIHVuc2lnbmVkIGludCBpZHgsCj4gKwkJCQkgIGJvb2wgZW5hYmxlLCBkbWFfYWRkcl90 IGFkZHIpOwo+ICt2b2lkIG10a19kcm1fY3J0Y19jb21taXQoc3RydWN0IG10a19kcm1fY3J0YyAq Y3J0Yyk7Cj4gKwo+ICsjZW5kaWYgLyogTVRLX0RSTV9DUlRDX0ggKi8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uOWVjMjk2MAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kZHAuYwo+IEBAIC0wLDAgKzEsMjE4IEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u Lgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAu aD4KPiArCj4gKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKPiArI2luY2x1ZGUgIm10a19kcm1f ZGRwLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gKwo+ICsjZGVmaW5lIERJ U1BfUkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTgkweDA0MAo+ICsjZGVmaW5lIERJU1BfUkVH X0NPTkZJR19ESVNQX09WTDFfTU9VVF9FTgkweDA0NAo+ICsjZGVmaW5lIERJU1BfUkVHX0NPTkZJ R19ESVNQX09EX01PVVRfRU4JCTB4MDQ4Cj4gKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1Bf R0FNTUFfTU9VVF9FTgkweDA0Ywo+ICsjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX1VGT0Vf TU9VVF9FTgkweDA1MAo+ICsjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxf SU4JMHgwODQKPiArI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOCTB4 MDg4Cj4gKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU4JCTB4MGFjCj4gKyNkZWZp bmUgRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTgkweDBjOAo+ICsjZGVmaW5lIERJ U1BfUkVHX0NPTkZJR19NTVNZU19DR19DT04wCQkweDEwMAo+ICsKPiArI2RlZmluZSBESVNQX1JF R19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAgKiBuKQo+ICsjZGVmaW5lIERJU1BfUkVHX01VVEVY X1JTVChuKQkoMHgyOCArIDB4MjAgKiBuKQo+ICsjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChu KQkoMHgyYyArIDB4MjAgKiBuKQo+ICsjZGVmaW5lIERJU1BfUkVHX01VVEVYX1NPRihuKQkoMHgz MCArIDB4MjAgKiBuKQo+ICsKPiArI2RlZmluZSBNVVRFWF9NT0RfT1ZMMAkJMTEKPiArI2RlZmlu ZSBNVVRFWF9NT0RfT1ZMMQkJMTIKPiArI2RlZmluZSBNVVRFWF9NT0RfUkRNQTAJCTEzCj4gKyNk ZWZpbmUgTVVURVhfTU9EX1JETUExCQkxNAo+ICsjZGVmaW5lIE1VVEVYX01PRF9DT0xPUjAJMTgK PiArI2RlZmluZSBNVVRFWF9NT0RfQ09MT1IxCTE5Cj4gKyNkZWZpbmUgTVVURVhfTU9EX0FBTAkJ MjAKPiArI2RlZmluZSBNVVRFWF9NT0RfR0FNTUEJCTIxCj4gKyNkZWZpbmUgTVVURVhfTU9EX1VG T0UJCTIyCj4gKyNkZWZpbmUgTVVURVhfTU9EX1BXTTAJCTIzCj4gKyNkZWZpbmUgTVVURVhfTU9E X09ECQkyNQo+ICsKPiArI2RlZmluZSBNVVRFWF9TT0ZfRFNJMAkJMQo+ICsjZGVmaW5lIE1VVEVY X1NPRl9EUEkwCQkzCj4gKwo+ICsjZGVmaW5lIE9WTDBfTU9VVF9FTl9DT0xPUjAJMHgxCj4gKyNk ZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkweDEKPiArI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkw eDEKPiArI2RlZmluZSBDT0xPUjBfU0VMX0lOX09WTDAJMHgxCj4gKyNkZWZpbmUgT1ZMMV9NT1VU X0VOX0NPTE9SMQkweDEKPiArI2RlZmluZSBHQU1NQV9NT1VUX0VOX1JETUExCTB4MQo+ICsjZGVm aW5lIFJETUExX01PVVRfRFBJMAkJMHgyCj4gKyNkZWZpbmUgRFBJMF9TRUxfSU5fUkRNQTEJMHgx Cj4gKyNkZWZpbmUgQ09MT1IxX1NFTF9JTl9PVkwxCTB4MQo+ICsKPiArc3RhdGljIGNvbnN0IHVu c2lnbmVkIGludCBtdXRleF9tb2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0gewo+ICsJW0REUF9D T01QT05FTlRfQUFMXSA9IE1VVEVYX01PRF9BQUwsCj4gKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBd ID0gTVVURVhfTU9EX0NPTE9SMCwKPiArCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBNVVRFWF9N T0RfQ09MT1IxLAo+ICsJW0REUF9DT01QT05FTlRfR0FNTUFdID0gTVVURVhfTU9EX0dBTU1BLAo+ ICsJW0REUF9DT01QT05FTlRfT0RdID0gTVVURVhfTU9EX09ELAo+ICsJW0REUF9DT01QT05FTlRf T1ZMMF0gPSBNVVRFWF9NT0RfT1ZMMCwKPiArCVtERFBfQ09NUE9ORU5UX09WTDFdID0gTVVURVhf TU9EX09WTDEsCj4gKwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01PRF9QV00wLAo+ICsJ W0REUF9DT01QT05FTlRfUkRNQTBdID0gTVVURVhfTU9EX1JETUEwLAo+ICsJW0REUF9DT01QT05F TlRfUkRNQTFdID0gTVVURVhfTU9EX1JETUExLAo+ICsJW0REUF9DT01QT05FTlRfVUZPRV0gPSBN VVRFWF9NT0RfVUZPRSwKPiArfTsKPiArCj4gK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRo KHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsIHVuc2lnbmVkIGludCBwaXBlLAo+ICsJCQkgICAg ICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21w X2lkIG5leHQpCj4gK3sKPiArCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZTsKPiArCj4gKwlpZiAo Y3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1Iw KSB7Cj4gKwkJYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTjsKPiArCQl2 YWx1ZSA9IE9WTDBfTU9VVF9FTl9DT0xPUjA7Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09N UE9ORU5UX09EICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgewo+ICsJCWFkZHIgPSBE SVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOOwo+ICsJCXZhbHVlID0gT0RfTU9VVF9FTl9S RE1BMDsKPiArCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfVUZPRSAmJiBuZXh0ID09 IEREUF9DT01QT05FTlRfRFNJMCkgewo+ICsJCWFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9V Rk9FX01PVVRfRU47Cj4gKwkJdmFsdWUgPSBVRk9FX01PVVRfRU5fRFNJMDsKPiArCX0gZWxzZSBp ZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09M T1IxKSB7Cj4gKwkJYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDFfTU9VVF9FTjsKPiAr CQl2YWx1ZSA9IE9WTDFfTU9VVF9FTl9DT0xPUjE7Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBf Q09NUE9ORU5UX0dBTU1BICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSkgewo+ICsJCWFk ZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOwo+ICsJCXZhbHVlID0gR0FN TUFfTU9VVF9FTl9SRE1BMTsKPiArCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRN QTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKPiArCQlhZGRyID0gRElTUF9SRUdf Q09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTjsKPiArCQl2YWx1ZSA9IFJETUExX01PVVRfRFBJMDsK PiArCX0gZWxzZSB7Cj4gKwkJdmFsdWUgPSAwOwo+ICsJfQo+ICsJaWYgKHZhbHVlKSB7Cj4gKwkJ dW5zaWduZWQgaW50IHJlZyA9IHJlYWRsKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKPiAr Cj4gKwkJd3JpdGVsKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKPiArCX0KPiArCj4gKwlpZiAo Y3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1Iw KSB7Cj4gKwkJYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU47Cj4gKwkJ dmFsdWUgPSBDT0xPUjBfU0VMX0lOX09WTDA7Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09N UE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7Cj4gKwkJYWRkciA9 IERJU1BfUkVHX0NPTkZJR19EUElfU0VMX0lOOwo+ICsJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRN QTE7Cj4gKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBE RFBfQ09NUE9ORU5UX0NPTE9SMSkgewo+ICsJCWFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9D T0xPUjFfU0VMX0lOOwo+ICsJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwxOwo+ICsJfSBlbHNl IHsKPiArCQl2YWx1ZSA9IDA7Cj4gKwl9Cj4gKwlpZiAodmFsdWUpIHsKPiArCQl1bnNpZ25lZCBp bnQgcmVnID0gcmVhZGwoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOwo+ICsKPiArCQl3cml0 ZWwocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIG10a19k ZHBfYWRkX2NvbXBfdG9fbXV0ZXgoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlw ZSwKPiArCQkJICAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiArCQkJICAgICAgIGVu dW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXVuc2lnbmVkIGludCByZWc7Cj4gKwo+ICsJcmVnID0g cmVhZGwoZGRwLT5tdXRleF9yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKHBpcGUpKTsKPiArCXJl ZyB8PSBCSVQobXV0ZXhfbW9kW2N1cl0pIHwgQklUKG11dGV4X21vZFtuZXh0XSk7Cj4gKwl3cml0 ZWwocmVnLCBkZHAtPm11dGV4X3JlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QocGlwZSkpOwo+ICsK PiArCWlmIChuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkKPiArCQlyZWcgPSBNVVRFWF9TT0Zf RFBJMDsKPiArCWVsc2UKPiArCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKPiArCj4gKwl3cml0ZWwo cmVnLCBkZHAtPm11dGV4X3JlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YocGlwZSkpOwo+ICsJd3Jp dGVsKDEsIGRkcC0+bXV0ZXhfcmVncyArIERJU1BfUkVHX01VVEVYX0VOKHBpcGUpKTsKPiArfQo+ ICsKPiArdm9pZCBtdGtfZGRwX2Nsb2NrX29uKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJ c3RydWN0IG10a19kZHAgKmRkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJaW50IHJldDsK PiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5tdXRleF9kaXNwX2Nsayk7Cj4g KwlpZiAocmV0ICE9IDApCj4gKwkJRFJNX0VSUk9SKCJjbGtfcHJlcGFyZV9lbmFibGUobXV0ZXhf ZGlzcF9jbGspIGVycm9yIVxuIik7Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2RkcF9jbG9ja19vZmYo c3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2X2dl dF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkcC0+bXV0ZXhf ZGlzcF9jbGspOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kZHBfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKPiArCXN0cnVjdCBtdGtfZGRwICpkZHA7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7 Cj4gKwo+ICsJZGRwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZHApLCBHRlBfS0VSTkVM KTsKPiArCWlmICghZGRwKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRkcC0+bXV0ZXhf ZGlzcF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKPiArCWlmIChJU19FUlIoZGRwLT5t dXRleF9kaXNwX2NsaykpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tc biIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGRkcC0+bXV0ZXhfZGlzcF9jbGspOwo+ICsJfQo+ICsK PiArCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDAp Owo+ICsJZGRwLT5tdXRleF9yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7 Cj4gKwlpZiAoSVNfRVJSKGRkcC0+bXV0ZXhfcmVncykpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihkZHAt Pm11dGV4X3JlZ3MpOwo+ICsJfQo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRk cCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRkcF9kcml2ZXJfZHRfbWF0 Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgi IH0sCj4gKwl7fSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZGRwX2RyaXZlcl9k dF9tYXRjaCk7Cj4gKwo+ICtzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBfZHJpdmVyID0g ewo+ICsJLnByb2JlCQk9IG10a19kZHBfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IG10a19kZHBfcmVt b3ZlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSAibWVkaWF0ZWstZGRwIiwKPiArCQku b3duZXIJPSBUSElTX01PRFVMRSwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBkZHBfZHJpdmVyX2R0 X21hdGNoLAo+ICsJfSwKPiArfTsKPiArCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXRrX2Rk cF9kcml2ZXIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41NWMyZGIzCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCj4gQEAgLTAsMCAr MSwzOSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KPiArICovCj4gKwo+ICsjaWZuZGVmIE1US19EUk1fRERQX0gKPiArI2RlZmluZSBNVEtf RFJNX0REUF9ICj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgo+ICsKPiArc3Ry dWN0IHJlZ21hcDsKPiArc3RydWN0IGRldmljZTsKPiArCj4gK3N0cnVjdCBtdGtfZGRwIHsKPiAr CXN0cnVjdCBkZXZpY2UJCQkqZGV2Owo+ICsJc3RydWN0IGRybV9kZXZpY2UJCSpkcm1fZGV2Owo+ ICsKPiArCXN0cnVjdCBjbGsJCQkqbXV0ZXhfZGlzcF9jbGs7Cj4gKwl2b2lkIF9faW9tZW0JCQkq bXV0ZXhfcmVnczsKPiArfTsKPiArCj4gK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKHZv aWQgX19pb21lbSAqY29uZmlnX3JlZ3MsIHVuc2lnbmVkIGludCBwaXBlLAo+ICsJCQkgICAgICBl bnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lk IG5leHQpOwo+ICt2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fbXV0ZXgoc3RydWN0IGRldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKPiArCQkJICAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lk IGN1ciwKPiArCQkJICAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwo+ICt2b2lkIG10 a19kZHBfY2xvY2tfb24oc3RydWN0IGRldmljZSAqZGV2KTsKPiArdm9pZCBtdGtfZGRwX2Nsb2Nr X29mZihzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICsKPiArI2VuZGlmIC8qIE1US19EUk1fRERQX0gg Ki8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv bXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjk3YTg0YjAKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwo+IEBA IC0wLDAgKzEsNDA5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCj4gKyAqIEF1dGhvcnM6Cj4gKyAqCVlUIFNoZW4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgo+ ICsgKglDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsj aW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNp bmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gKwo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9J TlRFTgkJCTB4MDAwNAo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9JTlRTVEEJCQkweDAwMDgKPiAr I2RlZmluZSBESVNQX1JFR19PVkxfRU4JCQkJMHgwMDBjCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZM X1JTVAkJCTB4MDAxNAo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfU0laRQkJCTB4MDAyMAo+ ICsjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfQkdDTFIJCQkweDAwMjgKPiArI2RlZmluZSBESVNQ X1JFR19PVkxfU1JDX0NPTgkJCTB4MDAyYwo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9DT04obikJ CQkoMHgwMDMwICsgMHgyMCAqIG4pCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKG4p CQkoMHgwMDM4ICsgMHgyMCAqIG4pCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX09GRlNFVChuKQkJ CSgweDAwM2MgKyAweDIwICogbikKPiArI2RlZmluZSBESVNQX1JFR19PVkxfUElUQ0gobikJCQko MHgwMDQ0ICsgMHgyMCAqIG4pCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChuKQkJ KDB4MDBjMCArIDB4MjAgKiBuKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0dNQyhuKQkJ KDB4MDBjOCArIDB4MjAgKiBuKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9BRERSKG4pCQkJKDB4 MGY0MCArIDB4MjAgKiBuKQo+ICsKPiArI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUJ CTB4MDAwMAo+ICsjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0Cj4gKyNk ZWZpbmUgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OCQkweDAwMTAKPiArI2RlZmluZSBESVNQX1JF R19SRE1BX1NJWkVfQ09OXzAJCTB4MDAxNAo+ICsjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9D T05fMQkJMHgwMDE4Cj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9GSUZPX0NPTgkJCTB4MDA0MAo+ ICsKPiArI2RlZmluZSBESVNQX09EX0VOCQkJCTB4MDAwMAo+ICsjZGVmaW5lIERJU1BfT0RfSU5U RU4JCQkJMHgwMDA4Cj4gKyNkZWZpbmUgRElTUF9PRF9JTlRTVEEJCQkJMHgwMDBjCj4gKyNkZWZp bmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCj4gKyNkZWZpbmUgRElTUF9PRF9TSVpFCQkJCTB4MDAz MAo+ICsKPiArI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkweDAwMDAKPiArCj4gKyNkZWZp bmUgRElTUF9DT0xPUl9DRkdfTUFJTgkJCTB4MDQwMAo+ICsjZGVmaW5lIERJU1BfQ09MT1JfU1RB UlQJCQkweDBjMDAKPiArCj4gK2VudW0gT1ZMX0lOUFVUX0ZPUk1BVCB7Cj4gKwlPVkxfSU5GTVRf UkdCNTY1ID0gMCwKPiArCU9WTF9JTkZNVF9SR0I4ODggPSAxLAo+ICsJT1ZMX0lORk1UX1JHQkE4 ODg4ID0gMiwKPiArCU9WTF9JTkZNVF9BUkdCODg4OCA9IDMsCj4gK307Cj4gKwo+ICsjZGVmaW5l CU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAyMAo+ICsjZGVmaW5lCU9WTF9BRU4JCQlCSVQoOCkK PiArI2RlZmluZQlPVkxfQUxQSEEJCTB4ZmYKPiArCj4gKyNkZWZpbmUJT0RfUkVMQVlfTU9ERQkJ QklUKDApCj4gKwo+ICsjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQo+ICsKPiArI2RlZmluZQlD T0xPUl9CWVBBU1NfQUxMCUJJVCg3KQo+ICsjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykK PiArCj4gK3N0YXRpYyB2b2lkIG10a19jb2xvcl9zdGFydCh2b2lkIF9faW9tZW0gKmNvbG9yX2Jh c2UpCj4gK3sKPiArCXdyaXRlbChDT0xPUl9CWVBBU1NfQUxMIHwgQ09MT1JfU0VRX1NFTCwKPiAr CQljb2xvcl9iYXNlICsgRElTUF9DT0xPUl9DRkdfTUFJTik7Cj4gKwl3cml0ZWwoMHgxLCBjb2xv cl9iYXNlICsgRElTUF9DT0xPUl9TVEFSVCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19v ZF9jb25maWcodm9pZCBfX2lvbWVtICpvZF9iYXNlLCB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQg aW50IGgpCj4gK3sKPiArCXdyaXRlbCh3IDw8IDE2IHwgaCwgb2RfYmFzZSArIERJU1BfT0RfU0la RSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19vZF9zdGFydCh2b2lkIF9faW9tZW0gKm9k X2Jhc2UpCj4gK3sKPiArCXdyaXRlbChPRF9SRUxBWV9NT0RFLCBvZF9iYXNlICsgRElTUF9PRF9D RkcpOwo+ICsJd3JpdGVsKDEsIG9kX2Jhc2UgKyBESVNQX09EX0VOKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgbXRrX292bF9lbmFibGVfdmJsYW5rKHZvaWQgX19pb21lbSAqZGlzcF9iYXNlKQo+ ICt7Cj4gKwl3cml0ZWwoMHgyLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxfSU5URU4pOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfb3ZsX2Rpc2FibGVfdmJsYW5rKHZvaWQgX19pb21lbSAq ZGlzcF9iYXNlKQo+ICt7Cj4gKwl3cml0ZWwoMHgwLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxf SU5URU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfb3ZsX2NsZWFyX3ZibGFuayh2b2lk IF9faW9tZW0gKmRpc3BfYmFzZSkKPiArewo+ICsJd3JpdGVsKDB4MCwgZGlzcF9iYXNlICsgRElT UF9SRUdfT1ZMX0lOVFNUQSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19vdmxfc3RhcnQo dm9pZCBfX2lvbWVtICpvdmxfYmFzZSkKPiArewo+ICsJd3JpdGVsKDB4MSwgb3ZsX2Jhc2UgKyBE SVNQX1JFR19PVkxfRU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfb3ZsX2NvbmZpZyh2 b2lkIF9faW9tZW0gKm92bF9iYXNlLAo+ICsJCXVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQg aCkKPiArewo+ICsJaWYgKHcgIT0gMCAmJiBoICE9IDApCj4gKwkJd3JpdGVsKGggPDwgMTYgfCB3 LCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9ST0lfU0laRSk7Cj4gKwl3cml0ZWwoMHgwLCBvdmxf YmFzZSArIERJU1BfUkVHX09WTF9ST0lfQkdDTFIpOwo+ICsKPiArCXdyaXRlbCgweDEsIG92bF9i YXNlICsgRElTUF9SRUdfT1ZMX1JTVCk7Cj4gKwl3cml0ZWwoMHgwLCBvdmxfYmFzZSArIERJU1Bf UkVHX09WTF9SU1QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYXNfcmJfc3dhcHBlZCh1bnNp Z25lZCBpbnQgZm10KQo+ICt7Cj4gKwlzd2l0Y2ggKGZtdCkgewo+ICsJY2FzZSBEUk1fRk9STUFU X0JHUjg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6Cj4gKwljYXNlIERSTV9GT1JNQVRf QUJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JN QVRfQkdSQTg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6Cj4gKwkJcmV0dXJuIHRy dWU7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArc3Rh dGljIHVuc2lnbmVkIGludCBvdmxfZm10X2NvbnZlcnQodW5zaWduZWQgaW50IGZtdCkKPiArewo+ ICsJc3dpdGNoIChmbXQpIHsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6Cj4gKwljYXNlIERS TV9GT1JNQVRfQkdSODg4Ogo+ICsJCXJldHVybiBPVkxfSU5GTVRfUkdCODg4Owo+ICsJY2FzZSBE Uk1fRk9STUFUX1JHQjU2NToKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6Cj4gKwkJcmV0dXJu IE9WTF9JTkZNVF9SR0I1NjU7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4gKwljYXNl IERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6Cj4gKwlj YXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6Cj4gKwkJcmV0dXJuIE9WTF9JTkZNVF9BUkdCODg4ODsK PiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdS ODg4ODoKPiArCQlyZXR1cm4gT1ZMX0lORk1UX1JHQkE4ODg4Owo+ICsJZGVmYXVsdDoKPiArCQlE Uk1fRVJST1IoInVuc3VwcG9ydCBmb3JtYXRbJTA4eF1cbiIsIGZtdCk7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb24odm9p ZCBfX2lvbWVtICpvdmxfYmFzZSwgdW5zaWduZWQgaW50IGlkeCkKPiArewo+ICsJdW5zaWduZWQg aW50IHJlZzsKPiArCj4gKwl3cml0ZWwoMHgxLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9SRE1B X0NUUkwoaWR4KSk7Cj4gKwl3cml0ZWwoT1ZMX1JETUFfTUVNX0dNQywgb3ZsX2Jhc2UgKyBESVNQ X1JFR19PVkxfUkRNQV9HTUMoaWR4KSk7Cj4gKwo+ICsJcmVnID0gcmVhZGwob3ZsX2Jhc2UgKyBE SVNQX1JFR19PVkxfU1JDX0NPTik7Cj4gKwlyZWcgPSByZWcgfCAoMSA8PCBpZHgpOwo+ICsJd3Jp dGVsKHJlZywgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb2ZmKHZvaWQgX19pb21lbSAqb3ZsX2Jhc2UsIHVuc2ln bmVkIGludCBpZHgpCj4gK3sKPiArCXVuc2lnbmVkIGludCByZWc7Cj4gKwo+ICsJcmVnID0gcmVh ZGwob3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cj4gKwlyZWcgPSByZWcgJiB+KDEg PDwgaWR4KTsKPiArCXdyaXRlbChyZWcsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1NSQ19DT04p Owo+ICsKPiArCXdyaXRlbCgweDAsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChp ZHgpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9jb25maWcodm9pZCBf X2lvbWVtICpvdmxfYmFzZSwgdW5zaWduZWQgaW50IGlkeCwKPiArCQl1bnNpZ25lZCBpbnQgYWRk ciwgdW5zaWduZWQgaW50IHBpdGNoLCB1bnNpZ25lZCBpbnQgZm10LAo+ICsJCWludCB4LCBpbnQg eSwgdW5zaWduZWQgaW50IHNpemUpCj4gK3sKPiArCXVuc2lnbmVkIGludCByZWc7Cj4gKwo+ICsJ cmVnID0gaGFzX3JiX3N3YXBwZWQoZm10KSA8PCAyNCB8IG92bF9mbXRfY29udmVydChmbXQpIDw8 IDEyOwo+ICsJaWYgKGlkeCAhPSAwKQo+ICsJCXJlZyB8PSBPVkxfQUVOIHwgT1ZMX0FMUEhBOwo+ ICsKPiArCXdyaXRlbChyZWcsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX0NPTihpZHgpKTsKPiAr CXdyaXRlbChwaXRjaCAmIDB4RkZGRiwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUElUQ0goaWR4 KSk7Cj4gKwl3cml0ZWwoc2l6ZSwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfU1JDX1NJWkUoaWR4 KSk7Cj4gKwl3cml0ZWwoeSA8PCAxNiB8IHgsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX09GRlNF VChpZHgpKTsKPiArCXdyaXRlbChhZGRyLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9BRERSKGlk eCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfcmRtYV9zdGFydCh2b2lkIF9faW9tZW0g KnJkbWFfYmFzZSkKPiArewo+ICsJdW5zaWduZWQgaW50IHJlZzsKPiArCj4gKwl3cml0ZWwoMHg0 LCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUpOwo+ICsJcmVnID0gcmVhZGwo cmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OKTsKPiArCXJlZyB8PSAxOwo+ICsJ d3JpdGVsKHJlZywgcmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbXRrX3JkbWFfY29uZmlnKHZvaWQgX19pb21lbSAqcmRtYV9iYXNl LAo+ICsJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCj4gK3sKPiArCXVuc2lnbmVk IGludCByZWc7Cj4gKwo+ICsJcmVnID0gcmVhZGwocmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9T SVpFX0NPTl8wKTsKPiArCXJlZyA9IChyZWcgJiB+KDB4RkZGKSkgfCAod2lkdGggJiAweEZGRik7 Cj4gKwl3cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzApOwo+ ICsKPiArCXJlZyA9IHJlYWRsKHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7 Cj4gKwlyZWcgPSAocmVnICYgfigweEZGRkZGKSkgfCAoaGVpZ2h0ICYgMHhGRkZGRik7Cj4gKwl3 cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEpOwo+ICsKPiAr CXdyaXRlbCgweDgwRjAwMDA4LCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX0ZJRk9fQ09OKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQodm9pZCBfX2lvbWVtICp1Zm9l X2Jhc2UpCj4gK3sKPiArCXdyaXRlbChVRk9fQllQQVNTLCB1Zm9lX2Jhc2UgKyBESVNQX1JFR19V Rk9fU1RBUlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyBkZHBfYWFsID0gewo+ICsJLmNvbXBfaWQgPSBERFBfQ09NUE9ORU5UX0FBTCwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvcjAg PSB7Cj4gKwkuY29tcF9pZCA9IEREUF9DT01QT05FTlRfQ09MT1IwLAo+ICsJLmNvbXBfcG93ZXJf b24gPSBtdGtfY29sb3Jfc3RhcnQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10 a19kZHBfY29tcF9mdW5jcyBkZHBfY29sb3IxID0gewo+ICsJLmNvbXBfaWQgPSBERFBfQ09NUE9O RU5UX0NPTE9SMSwKPiArCS5jb21wX3Bvd2VyX29uID0gbXRrX2NvbG9yX3N0YXJ0LAo+ICt9Owo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2RwaTAgPSB7 Cj4gKwkuY29tcF9pZCA9IEREUF9DT01QT05FTlRfRFBJMCwKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9kc2kwID0gewo+ICsJLmNvbXBfaWQg PSBERFBfQ09NUE9ORU5UX0RTSTAsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10 a19kZHBfY29tcF9mdW5jcyBkZHBfZHNpMSA9IHsKPiArCS5jb21wX2lkID0gRERQX0NPTVBPTkVO VF9EU0kxLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVu Y3MgZGRwX2dhbW1hID0gewo+ICsJLmNvbXBfaWQgPSBERFBfQ09NUE9ORU5UX0dBTU1BLAo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX29kID0g ewo+ICsJLmNvbXBfaWQgPSBERFBfQ09NUE9ORU5UX09ELAo+ICsJLmNvbXBfY29uZmlnID0gbXRr X29kX2NvbmZpZywKPiArCS5jb21wX3Bvd2VyX29uID0gbXRrX29kX3N0YXJ0LAo+ICt9Owo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX292bDAgPSB7Cj4g KwkuY29tcF9pZCA9IEREUF9DT01QT05FTlRfT1ZMMCwKPiArCS5jb21wX2NvbmZpZyA9IG10a19v dmxfY29uZmlnLAo+ICsJLmNvbXBfcG93ZXJfb24gPSBtdGtfb3ZsX3N0YXJ0LAo+ICsJLmNvbXBf ZW5hYmxlX3ZibGFuayA9IG10a19vdmxfZW5hYmxlX3ZibGFuaywKPiArCS5jb21wX2Rpc2FibGVf dmJsYW5rID0gbXRrX292bF9kaXNhYmxlX3ZibGFuaywKPiArCS5jb21wX2NsZWFyX3ZibGFuayA9 IG10a19vdmxfY2xlYXJfdmJsYW5rLAo+ICsJLmNvbXBfbGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVy X29uLAo+ICsJLmNvbXBfbGF5ZXJfb2ZmID0gbXRrX292bF9sYXllcl9vZmYsCj4gKwkuY29tcF9s YXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2NvbmZpZywKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vdmwxID0gewo+ICsJLmNvbXBfaWQg PSBERFBfQ09NUE9ORU5UX09WTDEsCj4gKwkuY29tcF9jb25maWcgPSBtdGtfb3ZsX2NvbmZpZywK PiArCS5jb21wX3Bvd2VyX29uID0gbXRrX292bF9zdGFydCwKPiArCS5jb21wX2VuYWJsZV92Ymxh bmsgPSBtdGtfb3ZsX2VuYWJsZV92YmxhbmssCj4gKwkuY29tcF9kaXNhYmxlX3ZibGFuayA9IG10 a19vdmxfZGlzYWJsZV92YmxhbmssCj4gKwkuY29tcF9jbGVhcl92YmxhbmsgPSBtdGtfb3ZsX2Ns ZWFyX3ZibGFuaywKPiArCS5jb21wX2xheWVyX29uID0gbXRrX292bF9sYXllcl9vbiwKPiArCS5j b21wX2xheWVyX29mZiA9IG10a19vdmxfbGF5ZXJfb2ZmLAo+ICsJLmNvbXBfbGF5ZXJfY29uZmln ID0gbXRrX292bF9sYXllcl9jb25maWcsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG10a19kZHBfY29tcF9mdW5jcyBkZHBfcHdtMCA9IHsKPiArCS5jb21wX2lkID0gRERQX0NPTVBP TkVOVF9QV00wLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBf ZnVuY3MgZGRwX3JkbWEwID0gewo+ICsJLmNvbXBfaWQgPSBERFBfQ09NUE9ORU5UX1JETUEwLAo+ ICsJLmNvbXBfY29uZmlnID0gbXRrX3JkbWFfY29uZmlnLAo+ICsJLmNvbXBfcG93ZXJfb24gPSBt dGtfcmRtYV9zdGFydCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9j b21wX2Z1bmNzIGRkcF9yZG1hMSA9IHsKPiArCS5jb21wX2lkID0gRERQX0NPTVBPTkVOVF9SRE1B MSwKPiArCS5jb21wX2NvbmZpZyA9IG10a19yZG1hX2NvbmZpZywKPiArCS5jb21wX3Bvd2VyX29u ID0gbXRrX3JkbWFfc3RhcnQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a19k ZHBfY29tcF9mdW5jcyBkZHBfcmRtYTIgPSB7Cj4gKwkuY29tcF9pZCA9IEREUF9DT01QT05FTlRf UkRNQTIsCj4gKwkuY29tcF9jb25maWcgPSBtdGtfcmRtYV9jb25maWcsCj4gKwkuY29tcF9wb3dl cl9vbiA9IG10a19yZG1hX3N0YXJ0LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBt dGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7Cj4gKwkuY29tcF9pZCA9IEREUF9DT01QT05F TlRfVUZPRSwKPiArCS5jb21wX3Bvd2VyX29uID0gbXRrX3Vmb2Vfc3RhcnQsCj4gK307Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfd2RtYTAgPSB7Cj4g KwkuY29tcF9pZCA9IEREUF9DT01QT05FTlRfV0RNQTAsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfd2RtYTEgPSB7Cj4gKwkuY29tcF9pZCA9 IEREUF9DT01QT05FTlRfV0RNQTEsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNv bnN0IG10a19kZHBfY29tcF9zdGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7Cj4gKwlbTVRL X0RJU1BfT1ZMXSA9ICJvdmwiLAo+ICsJW01US19ESVNQX1JETUFdID0gInJkbWEiLAo+ICsJW01U S19ESVNQX1dETUFdID0gIndkbWEiLAo+ICsJW01US19ESVNQX0NPTE9SXSA9ICJjb2xvciIsCj4g KwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAo+ICsJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIs Cj4gKwlbTVRLX0RJU1BfVUZPRV0gPSAidWZvZSIsCj4gKwlbTVRLX0RTSV0gPSAiZHNpIiwKPiAr CVtNVEtfRFBJXSA9ICJkcGkiLAo+ICsJW01US19ESVNQX1BXTV0gPSAicHdtIiwKPiArCVtNVEtf RElTUF9NVVRFWF0gPSAibXV0ZXgiLAo+ICsJW01US19ESVNQX09EXSA9ICJvZCIsCj4gK307Cj4g Kwo+ICtzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKPiArCWVudW0gbXRrX2RkcF9jb21wX3R5 cGUgdHlwZTsKPiArCWludCBhbGlhc19pZDsKPiArCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBf ZnVuY3MgKmZ1bmNzOwo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBtdGtfZGRwX2NvbXBfbWF0 Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKPiArCVtERFBfQ09N UE9ORU5UX0FBTF0JPSB7IE1US19ESVNQX0FBTCwJMCwgJmRkcF9hYWwgfSwKPiArCVtERFBfQ09N UE9ORU5UX0NPTE9SMF0JPSB7IE1US19ESVNQX0NPTE9SLAkwLCAmZGRwX2NvbG9yMCB9LAo+ICsJ W0REUF9DT01QT05FTlRfQ09MT1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBfY29sb3Ix IH0sCj4gKwlbRERQX0NPTVBPTkVOVF9EUEkwXQk9IHsgTVRLX0RQSSwJCTAsICZkZHBfZHBpMCB9 LAo+ICsJW0REUF9DT01QT05FTlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCAmZGRwX2RzaTAgfSwK PiArCVtERFBfQ09NUE9ORU5UX0RTSTFdCT0geyBNVEtfRFNJLAkJMSwgJmRkcF9kc2kxIH0sCj4g KwlbRERQX0NPTVBPTkVOVF9HQU1NQV0JPSB7IE1US19ESVNQX0dBTU1BLAkwLCAmZGRwX2dhbW1h IH0sCj4gKwlbRERQX0NPTVBPTkVOVF9PRF0JPSB7IE1US19ESVNQX09ELAkwLCAmZGRwX29kIH0s Cj4gKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZMLAkwLCAmZGRwX292bDAg fSwKPiArCVtERFBfQ09NUE9ORU5UX09WTDFdCT0geyBNVEtfRElTUF9PVkwsCTEsICZkZHBfb3Zs MSB9LAo+ICsJW0REUF9DT01QT05FTlRfUFdNMF0JPSB7IE1US19ESVNQX1BXTSwJMCwgJmRkcF9w d20wIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsICZk ZHBfcmRtYTAgfSwKPiArCVtERFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJ MSwgJmRkcF9yZG1hMSB9LAo+ICsJW0REUF9DT01QT05FTlRfUkRNQTJdCT0geyBNVEtfRElTUF9S RE1BLAkyLCAmZGRwX3JkbWEyIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJ U1BfVUZPRSwJMCwgJmRkcF91Zm9lIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0JPSB7IE1U S19ESVNQX1dETUEsCTAsICZkZHBfd2RtYTAgfSwKPiArCVtERFBfQ09NUE9ORU5UX1dETUExXQk9 IHsgTVRLX0RJU1BfV0RNQSwJMSwgJmRkcF93ZG1hMSB9LAo+ICt9Owo+ICsKPiAraW50IG10a19k ZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAo+ICsJCQllbnVtIG10a19k ZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKPiArewo+ICsJaW50IGlkID0gb2ZfYWxpYXNfZ2V0X2lk KG5vZGUsIG10a19kZHBfY29tcF9zdGVtW2NvbXBfdHlwZV0pOwo+ICsJaW50IGk7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2RkcF9tYXRjaGVzKTsgaSsrKSB7Cj4gKwkJ aWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgo+ICsJCSAgICAoaWQg PCAwIHx8IGlkID09IG10a19kZHBfbWF0Y2hlc1tpXS5hbGlhc19pZCkpCj4gKwkJCXJldHVybiBp Owo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtpbnQgbXRrX2RkcF9j b21wX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpj b21wLAo+ICsJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQpCj4gK3sKPiArCWlm IChjb21wX2lkIDwgMCB8fCBjb21wX2lkID49IEREUF9DT01QT05FTlRfSURfTUFYKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsKPiArCWNvbXAtPmZ1bmNzID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBf aWRdLmZ1bmNzOwo+ICsKPiArCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8fAo+ ICsJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EU0kwIHx8Cj4gKwkgICAgY29tcF9pZCA9 PSBERFBfQ09NUE9ORU5UX1BXTTApIHsKPiArCQljb21wLT5yZWdzID0gTlVMTDsKPiArCQljb21w LT5jbGsgPSBOVUxMOwo+ICsJCWNvbXAtPmlycSA9IDA7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4g Kwo+ICsJY29tcC0+cmVncyA9IG9mX2lvbWFwKG5vZGUsIDApOwo+ICsJY29tcC0+aXJxID0gb2Zf aXJxX2dldChub2RlLCAwKTsKPiArCWNvbXAtPmNsayA9IG9mX2Nsa19nZXQobm9kZSwgMCk7Cj4g KwlpZiAoSVNfRVJSKGNvbXAtPmNsaykpCj4gKwkJY29tcC0+Y2xrID0gTlVMTDsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHBfY29tcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv bXAuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZTJkMGMzOQo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBf Y29tcC5oCj4gQEAgLTAsMCArMSw4NiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUg TWVkaWFUZWsgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaWZuZGVmIE1US19EUk1fRERQ X0NPTVBfSAo+ICsjZGVmaW5lIE1US19EUk1fRERQX0NPTVBfSAo+ICsKPiArI2luY2x1ZGUgPGxp bnV4L2lvLmg+Cj4gKwo+ICtzdHJ1Y3QgZGV2aWNlX25vZGU7Cj4gKwo+ICtlbnVtIG10a19kZHBf Y29tcF90eXBlIHsKPiArCU1US19ESVNQX09WTCwKPiArCU1US19ESVNQX1JETUEsCj4gKwlNVEtf RElTUF9XRE1BLAo+ICsJTVRLX0RJU1BfQ09MT1IsCj4gKwlNVEtfRElTUF9BQUwsCj4gKwlNVEtf RElTUF9HQU1NQSwKPiArCU1US19ESVNQX1VGT0UsCj4gKwlNVEtfRFNJLAo+ICsJTVRLX0RQSSwK PiArCU1US19ESVNQX1BXTSwKPiArCU1US19ESVNQX01VVEVYLAo+ICsJTVRLX0RJU1BfT0QsCj4g KwlNVEtfRERQX0NPTVBfVFlQRV9NQVgsCj4gK307Cj4gKwo+ICtlbnVtIG10a19kZHBfY29tcF9p ZCB7Cj4gKwlERFBfQ09NUE9ORU5UX0FBTCwKPiArCUREUF9DT01QT05FTlRfQ09MT1IwLAo+ICsJ RERQX0NPTVBPTkVOVF9DT0xPUjEsCj4gKwlERFBfQ09NUE9ORU5UX0RQSTAsCj4gKwlERFBfQ09N UE9ORU5UX0RTSTAsCj4gKwlERFBfQ09NUE9ORU5UX0RTSTEsCj4gKwlERFBfQ09NUE9ORU5UX0dB TU1BLAo+ICsJRERQX0NPTVBPTkVOVF9PRCwKPiArCUREUF9DT01QT05FTlRfT1ZMMCwKPiArCURE UF9DT01QT05FTlRfT1ZMMSwKPiArCUREUF9DT01QT05FTlRfUFdNMCwKPiArCUREUF9DT01QT05F TlRfUkRNQTAsCj4gKwlERFBfQ09NUE9ORU5UX1JETUExLAo+ICsJRERQX0NPTVBPTkVOVF9SRE1B MiwKPiArCUREUF9DT01QT05FTlRfVUZPRSwKPiArCUREUF9DT01QT05FTlRfV0RNQTAsCj4gKwlE RFBfQ09NUE9ORU5UX1dETUExLAo+ICsJRERQX0NPTVBPTkVOVF9JRF9NQVgsCj4gK307Cj4gKwo+ ICtzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKPiArCWVudW0gbXRrX2RkcF9jb21wX2lkIGNv bXBfaWQ7Cj4gKwl2b2lkICgqY29tcF9jb25maWcpKHZvaWQgX19pb21lbSAqb3ZsX2Jhc2UsCj4g KwkJCXVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCk7Cj4gKwl2b2lkICgqY29tcF9wb3dl cl9vbikodm9pZCBfX2lvbWVtICpvdmxfYmFzZSk7Cj4gKwl2b2lkICgqY29tcF9wb3dlcl9vZmYp KHZvaWQgX19pb21lbSAqb3ZsX2Jhc2UpOwo+ICsJdm9pZCAoKmNvbXBfZW5hYmxlX3ZibGFuayko dm9pZCBfX2lvbWVtICpvdmxfYmFzZSk7Cj4gKwl2b2lkICgqY29tcF9kaXNhYmxlX3ZibGFuayko dm9pZCBfX2lvbWVtICpvdmxfYmFzZSk7Cj4gKwl2b2lkICgqY29tcF9jbGVhcl92YmxhbmspKHZv aWQgX19pb21lbSAqb3ZsX2Jhc2UpOwo+ICsJdm9pZCAoKmNvbXBfbGF5ZXJfb24pKHZvaWQgX19p b21lbSAqb3ZsX2Jhc2UsIHVuc2lnbmVkIGludCBpZHgpOwo+ICsJdm9pZCAoKmNvbXBfbGF5ZXJf b2ZmKSh2b2lkIF9faW9tZW0gKm92bF9iYXNlLCB1bnNpZ25lZCBpbnQgaWR4KTsKPiArCXZvaWQg KCpjb21wX2xheWVyX2NvbmZpZykodm9pZCBfX2lvbWVtICpvdmxfYmFzZSwgdW5zaWduZWQgaW50 IGlkeCwKPiArCQkJdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBwaXRjaCwgdW5zaWdu ZWQgaW50IGZtdCwKPiArCQkJaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgc2l6ZSk7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgbXRrX2RkcF9jb21wIHsKPiArCXN0cnVjdCBjbGsgKmNsazsKPiArCXZv aWQgX19pb21lbSAqcmVnczsKPiArCWludCBpcnE7Cj4gKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9j b21wX2Z1bmNzICpmdW5jczsKPiArfTsKPiArCj4gK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKPiArCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21w X3R5cGUpOwo+ICtpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2Rl LCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAo+ICsJCSAgICAgIGVudW0gbXRrX2RkcF9jb21w X2lkIGNvbXBfaWQpOwo+ICsKPiArI2VuZGlmIC8qIE1US19EUk1fRERQX0NPTVBfSCAqLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi5iYjAzYjRhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCj4gQEAgLTAsMCArMSw1NTYgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KPiArICogQXV0aG9yOiBZVCBT SEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29t cG9uZW50Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KPiArI2luY2x1ZGUgPGxp bnV4L29mX2FkZHJlc3MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gKyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21p Lmg+Cj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJt X2RkcF9jb21wLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgo+ICsjaW5jbHVkZSAibXRr X2RybV9mYi5oIgo+ICsjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKPiArCj4gKyNkZWZpbmUgRFJJ VkVSX05BTUUgIm1lZGlhdGVrIgo+ICsjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBTb0Mg RFJNIgo+ICsjZGVmaW5lIERSSVZFUl9EQVRFICIyMDE1MDUxMyIKPiArI2RlZmluZSBEUklWRVJf TUFKT1IgMQo+ICsjZGVmaW5lIERSSVZFUl9NSU5PUiAwCj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtf YXRvbWljX3NjaGVkdWxlKHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUsCj4gKwkJCQlz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXByaXZhdGUtPmNvbW1pdC5z dGF0ZSA9IHN0YXRlOwo+ICsJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfYXRvbWljX2NvbXBsZXRlKHN0cnVjdCBtdGtfZHJt X3ByaXZhdGUgKnByaXZhdGUsCj4gKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07Cj4gKwo+ICsJ ZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7Cj4g Kwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKGRybSwgc3RhdGUpOwo+ICsJZHJtX2F0 b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKPiArCWRybV9h dG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoZHJtLCBzdGF0ZSk7Cj4gKwlkcm1fYXRvbWlj X2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkcm0sIHN0YXRlKTsKPiArCWRybV9hdG9taWNfc3RhdGVf ZnJlZShzdGF0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy aXZhdGUgPSBjb250YWluZXJfb2Yod29yaywKPiArCQkJc3RydWN0IG10a19kcm1fcHJpdmF0ZSwg Y29tbWl0LndvcmspOwo+ICsKPiArCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgcHJpdmF0 ZS0+Y29tbWl0LnN0YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfYXRvbWljX2NvbW1p dChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKPiArCQkJICAgICBib29sIGFzeW5jKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2Ry bV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCWludCByZXQ7Cj4gKwo+ ICsJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7Cj4g KwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmcHJpdmF0ZS0+ Y29tbWl0LmxvY2spOwo+ICsJZmx1c2hfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOwo+ICsK PiArCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBzdGF0ZSk7Cj4gKwo+ICsJaWYg KGFzeW5jKQo+ICsJCW10a19hdG9taWNfc2NoZWR1bGUocHJpdmF0ZSwgc3RhdGUpOwo+ICsJZWxz ZQo+ICsJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOwo+ICsKPiArCW11dGV4 X3VubG9jaygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtdGtfZHJtX21v ZGVfY29uZmlnX2Z1bmNzID0gewo+ICsJLmZiX2NyZWF0ZSA9IG10a19kcm1fbW9kZV9mYl9jcmVh dGUsCj4gKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gKwkuYXRv bWljX2NvbW1pdCA9IG10a19hdG9taWNfY29tbWl0LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfbWFpbltdID0gewo+ICsJRERQX0NPTVBPTkVO VF9PVkwwLAo+ICsJRERQX0NPTVBPTkVOVF9DT0xPUjAsCj4gKwlERFBfQ09NUE9ORU5UX0FBTCwK PiArCUREUF9DT01QT05FTlRfT0QsCj4gKwlERFBfQ09NUE9ORU5UX1JETUEwLAo+ICsJRERQX0NP TVBPTkVOVF9VRk9FLAo+ICsJRERQX0NPTVBPTkVOVF9EU0kwLAo+ICsJRERQX0NPTVBPTkVOVF9Q V00wLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19k ZHBfZXh0W10gPSB7Cj4gKwlERFBfQ09NUE9ORU5UX09WTDEsCj4gKwlERFBfQ09NUE9ORU5UX0NP TE9SMSwKPiArCUREUF9DT01QT05FTlRfR0FNTUEsCj4gKwlERFBfQ09NUE9ORU5UX1JETUExLAo+ ICsJRERQX0NPTVBPTkVOVF9EUEkwLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtdGtfZHJtX2tt c19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX3By aXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldjsKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlwZGV2ID0gb2ZfZmlu ZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2RlKTsKPiArCWlmICghcGRldikgewo+ ICsJCWRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZvciBkaXNwLW11dGV4IGRldmljZSAlc1xu IiwKPiArCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKPiArCQlvZl9ub2RlX3B1 dChwcml2YXRlLT5tdXRleF9ub2RlKTsKPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0K PiArCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IE1BWF9DUlRDOyBpKyspIHsKPiArCQlpZiAoIXByaXZhdGUtPmxhcmJfbm9kZVtpXSkKPiAr CQkJYnJlYWs7Cj4gKwo+ICsJCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUt PmxhcmJfbm9kZVtpXSk7Cj4gKwkJaWYgKCFwZGV2KSB7Cj4gKwkJCWRldl9lcnIoZHJtLT5kZXYs ICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKPiArCQkJCXByaXZhdGUtPmxhcmJfbm9k ZVtpXS0+ZnVsbF9uYW1lKTsKPiArCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4gKwkJfQo+ICsJ CXByaXZhdGUtPmxhcmJfZGV2W2ldID0gJnBkZXYtPmRldjsKPiArCX0KPiArCj4gKwlkcm1fbW9k ZV9jb25maWdfaW5pdChkcm0pOwo+ICsKPiArCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0g NjQ7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKPiArCj4gKwkvKgo+ICsJ ICogc2V0IG1heCB3aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4K PiArCSAqIHRoaXMgdmFsdWUgd291bGQgYmUgdXNlZCB0byBjaGVjayBmcmFtZWJ1ZmZlciBzaXpl IGxpbWl0YXRpb24KPiArCSAqIGF0IGRybV9tb2RlX2FkZGZiKCkuCj4gKwkgKi8KPiArCWRybS0+ bW9kZV9jb25maWcubWF4X3dpZHRoID0gNDA5NjsKPiArCWRybS0+bW9kZV9jb25maWcubWF4X2hl aWdodCA9IDQwOTY7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9j b25maWdfZnVuY3M7Cj4gKwo+ICsJLyoKPiArCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBm aXhlZCBkYXRhIHN0cmVhbXMsCj4gKwkgKiBPVkwwIC0+IENPTE9SMCAtPiBBQUwgLT4gT0QgLT4g UkRNQTAgLT4gVUZPRSAtPiBEU0kwCj4gKwkgKiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEg LT4gUkRNQTEgLT4gRFBJMC4KPiArCSAqLwo+ICsJcHJpdmF0ZS0+cGF0aF9sZW5bMF0gPSBBUlJB WV9TSVpFKG10a19kZHBfbWFpbik7Cj4gKwlwcml2YXRlLT5wYXRoWzBdID0gbXRrX2RkcF9tYWlu Owo+ICsJcHJpdmF0ZS0+cGF0aF9sZW5bMV0gPSBBUlJBWV9TSVpFKG10a19kZHBfZXh0KTsKPiAr CXByaXZhdGUtPnBhdGhbMV0gPSBtdGtfZGRwX2V4dDsKPiArCj4gKwlyZXQgPSBjb21wb25lbnRf YmluZF9hbGwoZHJtLT5kZXYsIGRybSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NydGM7 Cj4gKwo+ICsJLyoKPiArCSAqIFdlIGRvbid0IHVzZSB0aGUgZHJtX2lycV9pbnN0YWxsKCkgaGVs cGVycyBwcm92aWRlZCBieSB0aGUgRFJNCj4gKwkgKiBjb3JlLCBzbyB3ZSBuZWVkIHRvIHNldCB0 aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQo+ICsJICogRFJNX0lPQ1RMX1dBSVRf VkJMQU5LIHRvIG9wZXJhdGUgY29ycmVjdGx5Lgo+ICsJICovCj4gKwlkcm0tPmlycV9lbmFibGVk ID0gdHJ1ZTsKPiArCXJldCA9IGRybV92YmxhbmtfaW5pdChkcm0sIE1BWF9DUlRDKTsKPiArCWlm IChyZXQgPCAwKQo+ICsJCWdvdG8gZXJyX3VuYmluZDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg TUFYX0NSVEM7IGkrKykgewo+ICsJCWlmICghcHJpdmF0ZS0+bGFyYl9kZXZbaV0pCj4gKwkJCWJy ZWFrOwo+ICsKPiArCQlyZXQgPSBtdGtfc21pX2xhcmJfZ2V0KHByaXZhdGUtPmxhcmJfZGV2W2ld KTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJiOiAl ZFxuIiwgcmV0KTsKPiArCQkJZ290byBlcnJfbGFyYl9nZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0 KGRybSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfbGFyYl9nZXQ6Cj4gKwlmb3IgKGkg PSBpIC0gMTsgaSA+PSAwOyBpLS0pCj4gKwkJbXRrX3NtaV9sYXJiX3B1dChwcml2YXRlLT5sYXJi X2RldltpXSk7Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiArCWRybV92Ymxh bmtfY2xlYW51cChkcm0pOwo+ICtlcnJfdW5iaW5kOgo+ICsJY29tcG9uZW50X3VuYmluZF9hbGwo ZHJtLT5kZXYsIGRybSk7Cj4gK2Vycl9jcnRjOgo+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAo ZHJtKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJt X2ttc19kZWluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJZHJtX2ttc19oZWxw ZXJfcG9sbF9maW5pKGRybSk7Cj4gKwo+ICsJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gKwlk cm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19k cm1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICt7 Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkcm0tPmRldjsKPiArCXN0cnVjdCBtdGtfZHJtX3By aXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlkcm0tPmRldl9w cml2YXRlID0gcHJpdmF0ZTsKPiArCXByaXZhdGUtPmRybSA9IGRybTsKPiArCj4gKwlyZXR1cm4g bXRrX2RybV9rbXNfaW5pdChkcm0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kcm1fdW5s b2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCW10a19kcm1fa21zX2RlaW5pdChk cm0pOwo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXRrX2RybV9n ZW1fdm1fb3BzID0gewo+ICsJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCj4gKwkuY2xvc2UgPSBk cm1fZ2VtX3ZtX2Nsb3NlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgbXRrX2RybV9mb3BzID0gewo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsCj4gKwku b3BlbiA9IGRybV9vcGVuLAo+ICsJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKPiArCS51bmxvY2tl ZF9pb2N0bCA9IGRybV9pb2N0bCwKPiArCS5tbWFwID0gbXRrX2RybV9nZW1fbW1hcCwKPiArCS5w b2xsID0gZHJtX3BvbGwsCj4gKwkucmVhZCA9IGRybV9yZWFkLAo+ICsjaWZkZWYgQ09ORklHX0NP TVBBVAo+ICsJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCj4gKyNlbmRpZgo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVyID0gewo+ICsJ LmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSwKPiArCS5sb2Fk ID0gbXRrX2RybV9sb2FkLAo+ICsJLnVubG9hZCA9IG10a19kcm1fdW5sb2FkLAo+ICsJLnNldF9i dXNpZCA9IGRybV9wbGF0Zm9ybV9zZXRfYnVzaWQsCj4gKwo+ICsJLmdldF92YmxhbmtfY291bnRl ciA9IGRybV92YmxhbmtfY291bnQsCj4gKwkuZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19l bmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rpc2FibGVf dmJsYW5rLAo+ICsKPiArCS5nZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dlbV9mcmVlX29iamVj dCwKPiArCS5nZW1fdm1fb3BzID0gJm10a19kcm1fZ2VtX3ZtX29wcywKPiArCS5kdW1iX2NyZWF0 ZSA9IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlLAo+ICsJLmR1bWJfbWFwX29mZnNldCA9IG10a19k cm1fZ2VtX2R1bWJfbWFwX29mZnNldCwKPiArCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJf ZGVzdHJveSwKPiArCj4gKwkuZm9wcyA9ICZtdGtfZHJtX2ZvcHMsCj4gKwo+ICsJLnNldF9idXNp ZCA9IGRybV9wbGF0Zm9ybV9zZXRfYnVzaWQsCj4gKwo+ICsJLm5hbWUgPSBEUklWRVJfTkFNRSwK PiArCS5kZXNjID0gRFJJVkVSX0RFU0MsCj4gKwkuZGF0ZSA9IERSSVZFUl9EQVRFLAo+ICsJLm1h am9yID0gRFJJVkVSX01BSk9SLAo+ICsJLm1pbm9yID0gRFJJVkVSX01JTk9SLAo+ICt9Owo+ICsK PiArc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkK PiArewo+ICsJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IG10a19kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiBkcm1f cGxhdGZvcm1faW5pdCgmbXRrX2RybV9kcml2ZXIsIHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsK ClRoaXMgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBkcm1fZGV2X2FsbG9jL2RybV9kZXZfcmVn aXN0ZXIgaW5zdGVhZCBhbmQKcmVtb3ZlIHlvdXIgLT5sb2FkIGRyaXZlciBjYWxsYmFjay4KCj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1fdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikK PiArewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOwo+ICsKPiArCWRybV9wdXRfZGV2KHByaXZhdGUtPmRybSk7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgbXRrX2RybV9vcHMgPSB7Cj4g KwkuYmluZAkJPSBtdGtfZHJtX2JpbmQsCj4gKwkudW5iaW5kCQk9IG10a19kcm1fdW5iaW5kLAo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RkcF9jb21w X2R0X2lkc1tdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1v dmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwgfSwKPiArCXsgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1Bf UkRNQSB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC13ZG1hIiwg IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9XRE1BIH0sCj4gKwl7IC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0NPTE9S IH0sCj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWFhbCIsICAgLmRh dGEgPSAodm9pZCAqKU1US19ESVNQX0FBTH0sCj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10ODE3My1kaXNwLWdhbW1hIiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0dBTU1BLCB9LAo+ ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwgIC5kYXRhID0g KHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10 ODE3My1kc2kiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKPiArCXsgLmNvbXBh dGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRwaSIsICAgICAgICAuZGF0YSA9ICh2b2lkICopTVRL X0RQSSB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIs IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJt ZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PRCB9 LAo+ICsJeyB9Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kcm1fcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKPiArCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7Cj4gKwlzdHJ1Y3QgcmVz b3VyY2UgKm1lbTsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKPiArCXN0cnVjdCBjb21w b25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKPiArCWludCByZXQ7Cj4gKwlpbnQgbnVtX2xhcmJz ID0gMDsKPiArCj4gKwlwcml2YXRlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2YXRl KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXByaXZhdGUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Kwo+ICsJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOwo+ICsJSU5JVF9XT1JLKCZw cml2YXRlLT5jb21taXQud29yaywgbXRrX2F0b21pY193b3JrKTsKPiArCj4gKwltZW0gPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsJcHJpdmF0ZS0+ Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOwo+ICsJaWYgKElT X0VSUihwcml2YXRlLT5jb25maWdfcmVncykpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHByaXZhdGUt PmNvbmZpZ19yZWdzKTsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1tc3lz LWNvbmZpZyByZXNvdXJjZTogJWRcbiIsCj4gKwkJCXJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9uIGJsb2NrcyAq Lwo+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVudCwgbm9kZSkg ewo+ICsJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOwo+ICsJCWVudW0gbXRrX2Rk cF9jb21wX3R5cGUgY29tcF90eXBlOwo+ICsJCWludCBjb21wX2lkOwo+ICsKPiArCQlvZl9pZCA9 IG9mX21hdGNoX25vZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7Cj4gKwkJaWYgKCFvZl9p ZCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWNvbXBfdHlwZSA9IChlbnVtIG10a19kZHBfY29t cF90eXBlKW9mX2lkLT5kYXRhOwo+ICsKPiArCQlpZiAoY29tcF90eXBlID09IE1US19ESVNQX01V VEVYKSB7Cj4gKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsKPiAr CQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUo bm9kZSkpIHsKPiArCQkJZGV2X2RiZyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQg JXNcbiIsCj4gKwkJCQlub2RlLT5mdWxsX25hbWUpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4g Kwo+ICsJCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lkKG5vZGUsIGNvbXBfdHlwZSk7Cj4g KwkJaWYgKGNvbXBfaWQgPCAwKSB7Cj4gKwkJCWRldl9pbmZvKGRldiwgIlNraXBwaW5nIHVua25v d24gY29tcG9uZW50ICVzXG4iLAo+ICsJCQkJIG5vZGUtPmZ1bGxfbmFtZSk7Cj4gKwkJCWNvbnRp bnVlOwo+ICsJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZMLCBE U0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUgc2VwYXJhdGUKPiArCQkgKiBjb21wb25lbnQgcGxhdGZv cm0gZHJpdmVycy4KPiArCQkgKi8KPiArCQlpZiAoY29tcF90eXBlID09IE1US19ESVNQX09WTCB8 fAo+ICsJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAo+ICsJCSAgICBjb21wX3R5cGUgPT0g TVRLX0RQSSkgewo+ICsJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1hdGNoIGZv ciAlc1xuIiwKPiArCQkJCSBub2RlLT5mdWxsX25hbWUpOwo+ICsJCQljb21wb25lbnRfbWF0Y2hf YWRkKGRldiwgJm1hdGNoLCBjb21wYXJlX29mLCBub2RlKTsKPiArCQl9Cj4gKwo+ICsJCXByaXZh dGUtPmNvbXBfbm9kZVtjb21wX2lkXSA9IG9mX25vZGVfZ2V0KG5vZGUpOwo+ICsKPiArCQlpZiAo Y29tcF90eXBlID09IE1US19ESVNQX09WTCkgewo+ICsJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxh cmJfbm9kZTsKPiArCj4gKwkJCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgIm1l ZGlhdGVrLGxhcmIiLCAwKTsKPiArCQkJaWYgKGxhcmJfbm9kZSAmJiBudW1fbGFyYnMgPCBNQVhf Q1JUQykKPiArCQkJCXByaXZhdGUtPmxhcmJfbm9kZVtudW1fbGFyYnMrK10gPSBsYXJiX25vZGU7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9kZSkgewo+ICsJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgZGlzcC1tdXRleCBub2RlXG4iKTsKPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+ICsKPiAr CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOwo+ICsKPiArCXJldHVybiBjb21w b25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKGRldiwgJm10a19kcm1fb3BzLCBtYXRjaCk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPiArewo+ICsJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10a19k cm1fb3BzKTsKPiArCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArI2lmZGVmIENPTkZJR19QTV9TTEVFUAo+ICtzdGF0aWMgaW50IG10 a19kcm1fc3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRr X2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm47Cj4gKwlpbnQgaTsKPiArCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZHJt KTsKPiArCj4gKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOwo+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeShjb25uLCAmZHJtLT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewo+ICsJ CWludCBvbGRfZHBtcyA9IGNvbm4tPmRwbXM7Cj4gKwo+ICsJCWlmIChjb25uLT5mdW5jcy0+ZHBt cykKPiArCQkJY29ubi0+ZnVuY3MtPmRwbXMoY29ubiwgRFJNX01PREVfRFBNU19PRkYpOwo+ICsK PiArCQkvKiBTZXQgdGhlIG9sZCBtb2RlIGJhY2sgdG8gdGhlIGNvbm5lY3RvciBmb3IgcmVzdW1l ICovCj4gKwkJY29ubi0+ZHBtcyA9IG9sZF9kcG1zOwo+ICsJfQo+ICsJZHJtX21vZGVzZXRfdW5s b2NrX2FsbChkcm0pOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBNQVhfQ1JUQzsgaSsrKSB7Cj4g KwkJaWYgKCFwcml2YXRlLT5sYXJiX2RldltpXSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCW10a19z bWlfbGFyYl9wdXQocHJpdmF0ZS0+bGFyYl9kZXZbaV0pOwo+ICsJfQo+ICsKPiArCURSTV9JTkZP KCJtdGtfZHJtX3N5c19zdXNwZW5kXG4iKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0 cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07Cj4gKwlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubjsKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgTUFYX0NSVEM7IGkrKykgewo+ICsJCWlmICghcHJpdmF0ZS0+bGFyYl9kZXZbaV0pCj4g KwkJCWJyZWFrOwo+ICsKPiArCQlyZXQgPSBtdGtfc21pX2xhcmJfZ2V0KHByaXZhdGUtPmxhcmJf ZGV2W2ldKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURSTV9FUlJPUigibXRrX3NtaV9sYXJiX2dl dCBmYWlsICVkXG4iLCByZXQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiArCj4g Kwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25u LCAmZHJtLT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewo+ICsJCWludCBkZXNp cmVkX21vZGUgPSBjb25uLT5kcG1zOwo+ICsKPiArCQkvKgo+ICsJCSAqIGF0IHN1c3BlbmQgdGlt ZSwgd2Ugc2F2ZSBkcG1zIHRvIGNvbm5lY3Rvci0+ZHBtcywKPiArCQkgKiByZXN0b3JlIHRoZSBv bGRfZHBtcywgYW5kIGF0IGN1cnJlbnQgdGltZSwgdGhlIGNvbm5lY3Rvcgo+ICsJCSAqIGRwbXMg c3RhdHVzIG11c3QgYmUgRFJNX01PREVfRFBNU19PRkYuCj4gKwkJICovCj4gKwkJY29ubi0+ZHBt cyA9IERSTV9NT0RFX0RQTVNfT0ZGOwo+ICsKPiArCQkvKgo+ICsJCSAqIElmIHRoZSBjb25uZWN0 b3IgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGR1cmluZyBzdXNwZW5kLAo+ICsJCSAqIGRpc2Nvbm5l Y3QgaXQgZnJvbSB0aGUgZW5jb2RlciBhbmQgbGVhdmUgaXQgb2ZmLiBXZSdsbCBub3RpZnkKPiAr CQkgKiB1c2Vyc3BhY2UgYXQgdGhlIGVuZC4KPiArCQkgKi8KPiArCQlpZiAoY29ubi0+ZnVuY3Mt PmRwbXMpCj4gKwkJCWNvbm4tPmZ1bmNzLT5kcG1zKGNvbm4sIGRlc2lyZWRfbW9kZSk7Cj4gKwl9 Cj4gKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7Cj4gKwo+ICsJZHJtX2ttc19oZWxwZXJf cG9sbF9lbmFibGUoZHJtKTsKPiArCj4gKwlEUk1fSU5GTygibXRrX2RybV9zeXNfcmVzdW1lXG4i KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtTSU1QTEVfREVWX1BNX09QUyhtdGtfZHJtX3Bt X29wcywgbXRrX2RybV9zeXNfc3VzcGVuZCwgbXRrX2RybV9zeXNfcmVzdW1lKTsKPiArI2VuZGlm Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJtX29mX2lkc1td ID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbW1zeXMiLCB9LAo+ICsJ eyB9Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJtX3Bs YXRmb3JtX2RyaXZlciA9IHsKPiArCS5wcm9iZQk9IG10a19kcm1fcHJvYmUsCj4gKwkucmVtb3Zl CT0gbXRrX2RybV9yZW1vdmUsCj4gKwkuZHJpdmVyCT0gewo+ICsJCS5uYW1lCT0gIm1lZGlhdGVr LWRybSIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCj4gKyNpZmRlZiBD T05GSUdfUE1fU0xFRVAKPiArCQkucG0gICAgID0gJm10a19kcm1fcG1fb3BzLAo+ICsjZW5kaWYK PiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQodm9pZCkK PiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIo Jm10a19kcm1fcGxhdGZvcm1fZHJpdmVyKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJcHJfZXJy KCJGYWlsZWQgdG8gcmVnaXN0ZXIgRFJNIHBsYXRmb3JtIGRyaXZlcjogJWRcbiIsIHJldCk7Cj4g KwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVy KCZtdGtfZGlzcF9vdmxfZHJpdmVyKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJcHJfZXJyKCJG YWlsZWQgdG8gcmVnaXN0ZXIgT1ZMIHBsYXRmb3JtIGRyaXZlcjogJWRcbiIsIHJldCk7Cj4gKwkJ Z290byBkcm1fZXJyOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZHJtX2VycjoKPiAr CXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlcik7Cj4g K2VycjoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtf ZHJtX2V4aXQodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm10a19k aXNwX292bF9kcml2ZXIpOwo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm10a19kcm1f cGxhdGZvcm1fZHJpdmVyKTsKPiArfQo+ICsKPiArbW9kdWxlX2luaXQobXRrX2RybV9pbml0KTsK PiArbW9kdWxlX2V4aXQobXRrX2RybV9leGl0KTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIllUIFNI RU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlh dGVrIFNvQyBEUk0gZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uNWU1MTI4ZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaAo+IEBAIC0wLDAgKzEsNjEgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsK PiArI2lmbmRlZiBNVEtfRFJNX0RSVl9ICj4gKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAo+ICsKPiAr I2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4g Kwo+ICsjZGVmaW5lIE1BWF9DUlRDCTIKPiArI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKPiArCj4g K3N0cnVjdCBkZXZpY2U7Cj4gK3N0cnVjdCBkZXZpY2Vfbm9kZTsKPiArc3RydWN0IGRybV9jcnRj Owo+ICtzdHJ1Y3QgZHJtX2RldmljZTsKPiArc3RydWN0IGRybV9mYl9oZWxwZXI7Cj4gK3N0cnVj dCBkcm1fcHJvcGVydHk7Cj4gK3N0cnVjdCByZWdtYXA7Cj4gKwo+ICtzdHJ1Y3QgbXRrX2RybV9w cml2YXRlIHsKPiArCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXI7Cj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtOwo+ICsKPiArCS8qCj4gKwkgKiBjcmVhdGVkIGNydGMgb2JqZWN0IHdv dWxkIGJlIGNvbnRhaW5lZCBhdCB0aGlzIGFycmF5IGFuZAo+ICsJICogdGhpcyBhcnJheSBpcyB1 c2VkIHRvIGJlIGF3YXJlIG9mIHdoaWNoIGNydGMgZGlkIGl0IHJlcXVlc3QgdmJsYW5rLgo+ICsJ ICovCj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOwo+ICsJc3RydWN0IGRybV9w cm9wZXJ0eSAqcGxhbmVfenBvc19wcm9wZXJ0eTsKPiArCXVuc2lnbmVkIGludCBwaXBlOwo+ICsK PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlW01BWF9DUlRDXTsKPiArCXN0cnVjdCBk ZXZpY2UgKmxhcmJfZGV2W01BWF9DUlRDXTsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhf bm9kZTsKPiArCXN0cnVjdCBkZXZpY2UgKm11dGV4X2RldjsKPiArCXZvaWQgX19pb21lbSAqY29u ZmlnX3JlZ3M7Cj4gKwl1bnNpZ25lZCBpbnQgcGF0aF9sZW5bTUFYX0NSVENdOwo+ICsJY29uc3Qg ZW51bSBtdGtfZGRwX2NvbXBfaWQgKnBhdGhbTUFYX0NSVENdOwo+ICsJc3RydWN0IGRldmljZV9u b2RlICpjb21wX25vZGVbRERQX0NPTVBPTkVOVF9JRF9NQVhdOwo+ICsKPiArCXN0cnVjdCB7Cj4g KwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ICsJCXN0cnVjdCB3b3JrX3N0cnVj dCB3b3JrOwo+ICsJCXN0cnVjdCBtdXRleCBsb2NrOwo+ICsJfSBjb21taXQ7Cj4gK307Cj4gKwo+ ICtleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOwo+ICsK PiArI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2ZiLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmRmYTkzMWIK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZmIuYwo+IEBAIC0wLDAgKzEsMTUxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBN ZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9mYl9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Cj4gKwo+ICsjaW5jbHVk ZSAibXRrX2RybV9kcnYuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKPiArI2luY2x1ZGUg Im10a19kcm1fZ2VtLmgiCj4gKwo+ICsvKgo+ICsgKiBtdGsgc3BlY2lmaWMgZnJhbWVidWZmZXIg c3RydWN0dXJlLgo+ICsgKgo+ICsgKiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCj4gKyAq IEBnZW1fb2JqOiBhcnJheSBvZiBnZW0gb2JqZWN0cy4KPiArICovCj4gK3N0cnVjdCBtdGtfZHJt X2ZiIHsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIJYmFzZTsKPiArCXN0cnVjdCBkcm1fZ2Vt X29iamVjdAkqZ2VtX29ialtNQVhfRkJfT0JKXTsKPiArfTsKPiArCj4gKyNkZWZpbmUgdG9fbXRr X2ZiKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9mYiwgYmFzZSkKPiArCj4gK3N0 cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAo+ICsJCQkJCSAgdW5zaWduZWQgaW50IHBsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3Qg bXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKPiArCj4gKwlpZiAocGxhbmUgPj0g TUFYX0ZCX09CSikKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gbXRrX2ZiLT5nZW1f b2JqW3BsYW5lXTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5k bGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gKwkJCQkgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCj4gKwkJCQkgICAgdW5zaWduZWQgaW50ICpoYW5kbGUpCj4gK3sKPiArCXN0 cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOwo+ICsKPiArCXJldHVybiBk cm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmpbMF0sIGhhbmRs ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYikKPiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwlzdHJ1Y3QgbXRr X2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqZ2VtOwo+ICsJaW50IG5yID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZiLT5waXhlbF9mb3Jt YXQpOwo+ICsKPiArCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgbnI7IGkrKykgewo+ICsJCWdlbSA9IG10a19mYi0+Z2VtX29ialtpXTsKPiArCQlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW0pOwo+ICsJfQo+ICsKPiArCWtm cmVlKG10a19mYik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyX2Z1bmNzIG10a19kcm1fZmJfZnVuY3MgPSB7Cj4gKwkuY3JlYXRlX2hhbmRsZSA9IG10a19k cm1fZmJfY3JlYXRlX2hhbmRsZSwKPiArCS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0cm95LAo+ ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVmZmVy X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkJICAgc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIgKm1vZGUsCj4gKwkJCQkJCSAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iaikK PiArewo+ICsJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKPiArCXVuc2lnbmVkIGludCBpOwo+ ICsJaW50IHJldDsKPiArCj4gKwltdGtfZmIgPSBremFsbG9jKHNpemVvZigqbXRrX2ZiKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIW10a19mYikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiArCj4gKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9k ZSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhtb2RlLT5w aXhlbF9mb3JtYXQpOyBpKyspCj4gKwkJbXRrX2ZiLT5nZW1fb2JqW2ldID0gb2JqW2ldOwo+ICsK PiArCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJm10a19mYi0+YmFzZSwgJm10a19k cm1fZmJfZnVuY3MpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGlu aXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOwo+ICsJCWtmcmVlKG10a19mYik7Cj4gKwkJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gbXRrX2ZiOwo+ICt9Cj4gKwo+ICtz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICptdGtfZHJtX21vZGVfZmJfY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiArCQkJ CQkgICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKPiArewo+ICsJdW5zaWduZWQg aW50IGhzdWIsIHZzdWIsIGk7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiOwo+ICsJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnZW1bTUFYX0ZCX09CSl07Cj4gKwlpbnQgZXJyOwo+ICsKPiAr CWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKGNtZC0+cGl4ZWxfZm9y bWF0KTsKPiArCXZzdWIgPSBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGNtZC0+ cGl4ZWxfZm9ybWF0KTsKPiArCWZvciAoaSA9IDA7IGkgPCBkcm1fZm9ybWF0X251bV9wbGFuZXMo Y21kLT5waXhlbF9mb3JtYXQpOyBpKyspIHsKPiArCQl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQt PndpZHRoIC8gKGkgPyBoc3ViIDogMSk7Cj4gKwkJdW5zaWduZWQgaW50IGhlaWdodCA9IGNtZC0+ aGVpZ2h0IC8gKGkgPyB2c3ViIDogMSk7Cj4gKwkJdW5zaWduZWQgaW50IHNpemUsIGJwcDsKPiAr Cj4gKwkJZ2VtW2ldID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgY21kLT5oYW5k bGVzW2ldKTsKPiArCQlpZiAoIWdlbVtpXSkgewo+ICsJCQllcnIgPSAtRU5PRU5UOwo+ICsJCQln b3RvIHVucmVmZXJlbmNlOwo+ICsJCX0KPiArCj4gKwkJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9j cHAoY21kLT5waXhlbF9mb3JtYXQsIGkpOwo+ICsJCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQt PnBpdGNoZXNbaV0gKyB3aWR0aCAqIGJwcDsKPiArCQlzaXplICs9IGNtZC0+b2Zmc2V0c1tpXTsK PiArCj4gKwkJaWYgKGdlbVtpXS0+c2l6ZSA8IHNpemUpIHsKPiArCQkJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtW2ldKTsKPiArCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJ Z290byB1bnJlZmVyZW5jZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJbXRrX2ZiID0gbXRrX2RybV9m cmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOwo+ICsJaWYgKElTX0VSUihtdGtfZmIpKSB7 Cj4gKwkJZXJyID0gUFRSX0VSUihtdGtfZmIpOwo+ICsJCWdvdG8gdW5yZWZlcmVuY2U7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuICZtdGtfZmItPmJhc2U7Cj4gKwo+ICt1bnJlZmVyZW5jZToKPiArCXdo aWxlIChpLS0pCj4gKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtW2ld KTsKPiArCj4gKwlyZXR1cm4gRVJSX1BUUihlcnIpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9mYi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45 Y2U3MzA3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2ZiLmgKPiBAQCAtMCwwICsxLDI5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykg MjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz Cj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgTVRLX0RS TV9GQl9ICj4gKyNkZWZpbmUgTVRLX0RSTV9GQl9ICj4gKwo+ICsjZGVmaW5lIE1BWF9GQl9PQkoJ Mwo+ICsKPiArc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxhbmUpOwo+ICtz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICptdGtfZHJtX21vZGVfZmJfY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiArCQkJ CQkgICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCk7Cj4gKwo+ICt2b2lkIG10a19k cm1fbW9kZV9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICtp bnQgbXRrX2ZiZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArdm9pZCBtdGtf ZmJkZXZfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArCj4gKyNlbmRpZiAvKiBN VEtfRFJNX0ZCX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZmVkYzg5Ngo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwo+IEBAIC0w LDAgKzEsMjA4IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9nZW0uaD4KPiArCj4gKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgo+ICsKPiAr c3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICsJCQkJCSB1bnNpZ25lZCBsb25nIHNpemUpCj4gK3sKPiArCXN0cnVjdCBtdGtf ZHJtX2dlbV9vYmogKm10a19nZW1fb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlzaXplID0gcm91 bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKPiArCj4gKwltdGtfZ2VtX29iaiA9IGt6YWxsb2Moc2l6 ZW9mKCptdGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtdGtfZ2VtX29iaikKPiAr CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9p bml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4g KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsKPiArCQlr ZnJlZShtdGtfZ2VtX29iaik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCX0KPiArCj4g KwlyZXR1cm4gbXRrX2dlbV9vYmo7Cj4gK30KPiArCj4gK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmog Km10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCSAgIHVu c2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCBhbGxvY19rbWFwKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2Ry bV9nZW1fb2JqICptdGtfZ2VtOwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCW10a19nZW0gPSBtdGtfZHJtX2dlbV9pbml0KGRldiwgc2l6ZSk7Cj4g KwlpZiAoSVNfRVJSKG10a19nZW0pKQo+ICsJCXJldHVybiBFUlJfQ0FTVChtdGtfZ2VtKTsKPiAr Cj4gKwlvYmogPSAmbXRrX2dlbS0+YmFzZTsKPiArCj4gKwlpbml0X2RtYV9hdHRycygmbXRrX2dl bS0+ZG1hX2F0dHJzKTsKPiArCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklURV9DT01CSU5FLCAm bXRrX2dlbS0+ZG1hX2F0dHJzKTsKPiArCj4gKwlpZiAoIWFsbG9jX2ttYXApCj4gKwkJZG1hX3Nl dF9hdHRyKERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsK PiArCj4gKwltdGtfZ2VtLT5jb29raWUgPSBkbWFfYWxsb2NfYXR0cnMoZGV2LT5kZXYsIG9iai0+ c2l6ZSwKPiArCQkJCShkbWFfYWRkcl90ICopJm10a19nZW0tPmRtYV9hZGRyLCBHRlBfS0VSTkVM LAo+ICsJCQkJJm10a19nZW0tPmRtYV9hdHRycyk7Cj4gKwlpZiAoIW10a19nZW0tPmNvb2tpZSkg ewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlICV6eCBieXRlIGRtYSBidWZmZXIi LCBvYmotPnNpemUpOwo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfZ2VtX2ZyZWU7 Cj4gKwl9Cj4gKwo+ICsJaWYgKGFsbG9jX2ttYXApCj4gKwkJbXRrX2dlbS0+a3ZhZGRyID0gbXRr X2dlbS0+Y29va2llOwo+ICsKPiArCURSTV9JTkZPKCJjb29raWUgPSAlcCBkbWFfYWRkciA9ICVs bHhcbiIsCj4gKwkJCW10a19nZW0tPmNvb2tpZSwgbXRrX2dlbS0+ZG1hX2FkZHIpOwo+ICsKPiAr CXJldHVybiBtdGtfZ2VtOwo+ICsKPiArZXJyX2dlbV9mcmVlOgo+ICsJZHJtX2dlbV9vYmplY3Rf cmVsZWFzZShvYmopOwo+ICsJa2ZyZWUobXRrX2dlbSk7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQp Owo+ICt9Cj4gKwo+ICt2b2lkIG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0g dG9fbXRrX2dlbV9vYmoob2JqKTsKPiArCj4gKwlkcm1fZ2VtX2ZyZWVfbW1hcF9vZmZzZXQob2Jq KTsKPiArCj4gKwkvKiByZWxlYXNlIGZpbGUgcG9pbnRlciB0byBnZW0gb2JqZWN0LiAqLwo+ICsJ ZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOwo+ICsKPiArCWRtYV9mcmVlX2F0dHJzKG9iai0+ ZGV2LT5kZXYsIG9iai0+c2l6ZSwgbXRrX2dlbS0+Y29va2llLAo+ICsJCSAgICAgICBtdGtfZ2Vt LT5kbWFfYWRkciwgJm10a19nZW0tPmRtYV9hdHRycyk7Cj4gKwo+ICsJa2ZyZWUobXRrX2dlbSk7 Cj4gK30KPiArCj4gK2ludCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJICAgIHN0cnVjdCBkcm1f bW9kZV9jcmVhdGVfZHVtYiAqYXJncykKPiArewo+ICsJc3RydWN0IG10a19kcm1fZ2VtX29iaiAq bXRrX2dlbTsKPiArCWludCByZXQ7Cj4gKwo+ICsJYXJncy0+cGl0Y2ggPSBhcmdzLT53aWR0aCAq IERJVl9ST1VORF9VUChhcmdzLT5icHAsIDgpOwo+ICsJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNo ICogYXJncy0+aGVpZ2h0Owo+ICsKPiArCW10a19nZW0gPSBtdGtfZHJtX2dlbV9jcmVhdGUoZGV2 LCBhcmdzLT5zaXplLCBmYWxzZSk7Cj4gKwlpZiAoSVNfRVJSKG10a19nZW0pKQo+ICsJCXJldHVy biBQVFJfRVJSKG10a19nZW0pOwo+ICsKPiArCS8qCj4gKwkgKiBhbGxvY2F0ZSBhIGlkIG9mIGlk ciB0YWJsZSB3aGVyZSB0aGUgb2JqIGlzIHJlZ2lzdGVyZWQKPiArCSAqIGFuZCBoYW5kbGUgaGFz IHRoZSBpZCB3aGF0IHVzZXIgY2FuIHNlZS4KPiArCSAqLwo+ICsJcmV0ID0gZHJtX2dlbV9oYW5k bGVfY3JlYXRlKGZpbGVfcHJpdiwgJm10a19nZW0tPmJhc2UsICZhcmdzLT5oYW5kbGUpOwo+ICsJ aWYgKHJldCkKPiArCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOwo+ICsKPiArCS8qIGRyb3AgcmVm ZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93LiAqLwo+ICsJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOwo+ICsKPiArCXJl dHVybiAwOwo+ICsKPiArZXJyX2hhbmRsZV9jcmVhdGU6Cj4gKwltdGtfZHJtX2dlbV9mcmVlX29i amVjdCgmbXRrX2dlbS0+YmFzZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgbXRr X2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsJ CQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxlLAo+ICsJCQkJdWludDY0 X3QgKm9mZnNldCkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKCnN0cnVjdF9tdXRl eCBpc24ndCBuZWVkZWQgaGVyZSAoZ2VtIG9iamVjdCBsb29rdXAgYW5kIHRoZSB2bWEgc3R1ZmYg YXJlCmFsbCBwcm90ZWN0ZWQgYnkgbG9va3MgYWxyZWFkeSkuIFBsZWFzZSBkcm9wIGl0LgoKPiAr Cj4gKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7 Cj4gKwlpZiAoIW9iaikgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGxvb2t1cCBnZW0gb2Jq ZWN0LlxuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIHVubG9jazsKPiArCX0KPiAr Cj4gKwlyZXQgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOwo+ICsJaWYgKHJldCkK PiArCQlnb3RvIG91dDsKPiArCj4gKwkqb2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRy KCZvYmotPnZtYV9ub2RlKTsKPiArCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwg Km9mZnNldCk7Cj4gKwo+ICtvdXQ6Cj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmop OwoKQnV0IHRoZW4geW91IG5lZWQgdW5yZWZlcmVuY2VfdW5sb2NrZWQgaGVyZS4KCj4gK3VubG9j azoKPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ ICsKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0g PSB0b19tdGtfZ2VtX29iaihvYmopOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG9iai0+ ZGV2Owo+ICsKPiArCS8qCj4gKwkgKiBkbWFfYWxsb2NfYXR0cnMoKSBhbGxvY2F0ZWQgYSBzdHJ1 Y3QgcGFnZSB0YWJsZSBmb3Igcmtfb2JqLCBzbyBjbGVhcgo+ICsJICogVk1fUEZOTUFQIGZsYWcg dGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9kcm1fZ2VtX21tYXAoKS4KPiArCSAq Lwo+ICsJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOwo+ICsJdm1hLT52bV9wZ29mZiA9IDA7 Cj4gKwo+ICsJcmV0ID0gZG1hX21tYXBfYXR0cnMoZHJtLT5kZXYsIHZtYSwgbXRrX2dlbS0+Y29v a2llLCBtdGtfZ2VtLT5kbWFfYWRkciwKPiArCQkJICAgICBvYmotPnNpemUsICZtdGtfZ2VtLT5k bWFfYXR0cnMpOwo+ICsJaWYgKHJldCkKPiArCQlkcm1fZ2VtX3ZtX2Nsb3NlKHZtYSk7Cj4gKwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IG10a19kcm1fZ2VtX21tYXBfYnVmKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKClRoaXMg ZnVuY3Rpb24gc2VlbXMgdW51c2VkLgo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g b2JqLT5kZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW11dGV4X2xvY2soJmRybS0+c3RydWN0X211 dGV4KTsKPiArCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7Cj4g KwltdXRleF91bmxvY2soJmRybS0+c3RydWN0X211dGV4KTsKClRoaXMgbG9ja2luZyBpc24ndCBy ZXF1aXJlZCB3aXRoIGxhdGVzdCBkcm0tbWlzYyBhbnltb3JlLCBwbGVhc2UgcmViYXNlCm9udG8g bGF0ZXN0IGxpbnV4LW5leHQgYW5kIGRyb3Agc3RydWN0X211dGV4LgoKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gbXRrX2RybV9nZW1fb2JqZWN0X21tYXAob2Jq LCB2bWEpOwo+ICt9Cj4gKwo+ICtpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmls cCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwg dm1hKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlvYmogPSB2bWEtPnZt X3ByaXZhdGVfZGF0YTsKPiArCj4gKwlyZXR1cm4gbXRrX2RybV9nZW1fb2JqZWN0X21tYXAob2Jq LCB2bWEpOwoKQXNpZGU6IFdoeSBjYW4ndCB5b3UganVzdCB1c2UgY21hIGhlbHBlcnMgZm9yIGdl bSBvYmplY3RzPyBDTUEganVzdAplc3NlbnRpYWxseSBtZWFucyBiYWNrZWQgYnkgZG1hX2FsbG9j IG1lbW9yeS4gV291bGQgYXZvaWQgYSBsb3Qgb2YKZHVwbGljYXRlZCBjb2RlIEkgdGhpbmsuCgo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5o IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmZiNzk1M2UKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKPiBAQCAtMCwwICsxLDU2IEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgX01US19EUk1fR0VNX0hfCj4gKyNkZWZpbmUgX01US19EUk1f R0VNX0hfCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArCj4gKy8qCj4gKyAqIG10 ayBkcm0gYnVmZmVyIHN0cnVjdHVyZS4KPiArICoKPiArICogQGJhc2U6IGEgZ2VtIG9iamVjdC4K PiArICoJLSBhIG5ldyBoYW5kbGUgdG8gdGhpcyBnZW0gb2JqZWN0IHdvdWxkIGJlIGNyZWF0ZWQK PiArICoJYnkgZHJtX2dlbV9oYW5kbGVfY3JlYXRlKCkuCj4gKyAqIEBjb29raWU6IHRoZSByZXR1 cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJz KCkKPiArICogQGt2YWRkcjoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiBnZW0gYnVmZmVyLgo+ ICsgKiBAZG1hX2FkZHI6IGRtYSBhZGRyZXNzIG9mIGdlbSBidWZmZXIuCj4gKyAqIEBkbWFfYXR0 cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZmZXIuCj4gKyAqCj4gKyAqIFAuUy4gdGhpcyBv YmplY3Qgd291bGQgYmUgdHJhbnNmZXJyZWQgdG8gdXNlciBhcyBrbXNfYm8uaGFuZGxlIHNvCj4g KyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91Z2gga21zX2JvLmhhbmRsZS4KPiAr ICovCj4gK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0 CWJhc2U7Cj4gKwl2b2lkIF9faW9tZW0JCSpjb29raWU7Cj4gKwl2b2lkIF9faW9tZW0JCSprdmFk ZHI7Cj4gKwlkbWFfYWRkcl90CQlkbWFfYWRkcjsKPiArCXN0cnVjdCBkbWFfYXR0cnMJZG1hX2F0 dHJzOwo+ICt9Owo+ICsKPiArI2RlZmluZSB0b19tdGtfZ2VtX29iaih4KQljb250YWluZXJfb2Yo eCwgc3RydWN0IG10a19kcm1fZ2VtX29iaiwgYmFzZSkKPiArCj4gK3N0cnVjdCBtdGtfZHJtX2dl bV9vYmogKm10a19kcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQl1bnNp Z25lZCBsb25nIHNpemUpOwo+ICt2b2lkIG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqZ2VtKTsKPiArc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9n ZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJdW5zaWduZWQgbG9uZyBzaXpl LCBib29sIGFsbG9jX2ttYXApOwo+ICtpbnQgbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUoc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKwkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKPiAraW50IG10a19kcm1fZ2VtX2R1bWJfbWFw X29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiArCQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQpOwo+ICtpbnQgbXRrX2Ry bV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Owo+ICtpbnQgbXRrX2RybV9nZW1fbW1hcF9idWYoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos Cj4gKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ICsKPiArI2VuZGlmCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi43MDRhNjVjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKPiBAQCAtMCwwICsxLDE3NSBAQAo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IENL IEh1IDxjay5odUBtZWRpYXRlay5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxw ZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Jl c2VydmF0aW9uLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCj4gKyNpbmNsdWRl ICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgo+ICsjaW5j bHVkZSAibXRrX2RybV9mYi5oIgo+ICsjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKPiArI2luY2x1 ZGUgIm10a19kcm1fcGxhbmUuaCIKPiArCj4gK3N0YXRpYyBjb25zdCB1aW50MzJfdCBmb3JtYXRz W10gPSB7Cj4gKwlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJRFJNX0ZPUk1BVF9BUkdCODg4OCwK PiArCURSTV9GT1JNQVRfUkdCNTY1LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3MgbXRrX3BsYW5lX2Z1bmNzID0gewo+ICsJLnVwZGF0ZV9wbGFuZSA9IGRy bV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKPiArCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0 b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiArCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFu dXAsCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCwKPiArCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0 YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf ZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRrX3BsYW5lX2F0b21pY19j aGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCSAgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUt PmZiOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJYm9vbCB2aXNp YmxlOwo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0gewo+ICsJCS54MSA9 IHN0YXRlLT5jcnRjX3gsCj4gKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKPiArCQkueDIgPSBzdGF0 ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdywKPiArCQkueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3Rh dGUtPmNydGNfaCwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0gewo+ICsJCS8qIDE2 LjE2IGZpeGVkIHBvaW50ICovCj4gKwkJLngxID0gc3RhdGUtPnNyY194LAo+ICsJCS55MSA9IHN0 YXRlLT5zcmNfeSwKPiArCQkueDIgPSBzdGF0ZS0+c3JjX3ggKyBzdGF0ZS0+c3JjX3csCj4gKwkJ LnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUtPnNyY19oLAo+ICsJfTsKPiArCXN0cnVjdCBkcm1f cmVjdCBjbGlwID0geyAwLCB9Owo+ICsKPiArCWlmICghZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJaWYgKCFtdGtfZmJfZ2V0X2dlbV9vYmooZmIsIDApKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygi YnVmZmVyIGlzIG51bGxcbiIpOwo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsJfQo+ICsKPiArCWlm ICghc3RhdGUtPmNydGMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJY3J0Y19zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7Cj4gKwlpZiAo SVNfRVJSKGNydGNfc3RhdGUpKQo+ICsJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsK PiArCWNsaXAueDIgPSBjcnRjX3N0YXRlLT5tb2RlLmhkaXNwbGF5Owo+ICsJY2xpcC55MiA9IGNy dGNfc3RhdGUtPm1vZGUudmRpc3BsYXk7Cj4gKwo+ICsJcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9j aGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5jcnRjLCBmYiwKPiArCQkJCQkgICAgJnNyYywgJmRl c3QsICZjbGlwLAo+ICsJCQkJCSAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKwkJ CQkJICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKPiArCQkJCQkgICAgdHJ1ZSwgdHJ1 ZSwgJnZpc2libGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpv bGRfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlID0gcGxhbmUt PnN0YXRlOwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOwo+ICsJc3RydWN0IG10 a19kcm1fY3J0YyAqbXRrX2NydGM7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5l ID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKPiArCXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0gewo+ICsJ CS54MSA9IHN0YXRlLT5jcnRjX3gsCj4gKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKPiArCQkueDIg PSBzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdywKPiArCQkueTIgPSBzdGF0ZS0+Y3J0Y195 ICsgc3RhdGUtPmNydGNfaCwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwg fTsKPiArCj4gKwlpZiAoIXN0YXRlLT5jcnRjKQo+ICsJCXJldHVybjsKPiArCj4gKwljbGlwLngy ID0gc3RhdGUtPmNydGMtPnN0YXRlLT5tb2RlLmhkaXNwbGF5Owo+ICsJY2xpcC55MiA9IHN0YXRl LT5jcnRjLT5zdGF0ZS0+bW9kZS52ZGlzcGxheTsKPiArCWRybV9yZWN0X2ludGVyc2VjdCgmZGVz dCwgJmNsaXApOwo+ICsJbXRrX3BsYW5lLT5kaXNwX3NpemUgPSAoZGVzdC55MiAtIGRlc3QueTEp IDw8IDE2IHwgKGRlc3QueDIgLSBkZXN0LngxKTsKPiArCj4gKwltdGtfY3J0YyA9IHRvX210a19j cnRjKHN0YXRlLT5jcnRjKTsKPiArCj4gKwlpZiAocGxhbmUtPmZiKQo+ICsJCWRybV9mcmFtZWJ1 ZmZlcl91bnJlZmVyZW5jZShwbGFuZS0+ZmIpOwo+ICsJaWYgKHN0YXRlLT5mYikKPiArCQlkcm1f ZnJhbWVidWZmZXJfcmVmZXJlbmNlKHN0YXRlLT5mYik7Cj4gKwlwbGFuZS0+ZmIgPSBzdGF0ZS0+ ZmI7CgpUaGVyZSBzaG91bGRuJ3QgYmUgYW55IG5lZWQgdG8gcmVmY291bnQgZnJhbWVidWZmZXJz IHlvdXJzZWxmLiBJZiB0aGF0J3MKdGhlIGNhc2UgdGhlbiB0aGVyZSdzIGEgYnVnIGluIHRoZSBk cm0gY29yZS9oZWxwZXJzLgoKPiArCj4gKwlnZW1fb2JqID0gbXRrX2ZiX2dldF9nZW1fb2JqKHN0 YXRlLT5mYiwgMCk7Cj4gKwltdGtfcGxhbmUtPmZsaXBfb2JqID0gdG9fbXRrX2dlbV9vYmooZ2Vt X29iaik7Cj4gKwltdGtfcGxhbmUtPm10a19jcnRjID0gbXRrX2NydGM7Cj4gKwo+ICsJaWYgKG10 a19wbGFuZS0+ZmxpcF9vYmopCj4gKwkJbXRrX2RybV9jcnRjX3BsYW5lX2NvbmZpZyhtdGtfY3J0 YywgbXRrX3BsYW5lLT5pZHgsIHRydWUsCj4gKwkJCQltdGtfcGxhbmUtPmZsaXBfb2JqLT5kbWFf YWRkcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfZGlzYWJsZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0g dG9fbXRrX3BsYW5lKHBsYW5lKTsKPiArCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOwo+ ICsKPiArCWlmICghb2xkX3N0YXRlLT5jcnRjKQo+ICsJCXJldHVybjsKPiArCj4gKwltdGtfY3J0 YyA9IHRvX210a19jcnRjKG9sZF9zdGF0ZS0+Y3J0Yyk7Cj4gKwo+ICsJbXRrX2RybV9jcnRjX3Bs YW5lX2NvbmZpZyhtdGtfY3J0YywgbXRrX3BsYW5lLT5pZHgsIGZhbHNlLCAwKTsKPiArCj4gKwlt dGtfZHJtX2NydGNfY29tbWl0KG10a19jcnRjKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7Cj4g KwkuYXRvbWljX2NoZWNrID0gbXRrX3BsYW5lX2F0b21pY19jaGVjaywKPiArCS5hdG9taWNfdXBk YXRlID0gbXRrX3BsYW5lX2F0b21pY191cGRhdGUsCj4gKwkuYXRvbWljX2Rpc2FibGUgPSBtdGtf cGxhbmVfYXRvbWljX2Rpc2FibGUsCj4gK307Cj4gKwo+ICtpbnQgbXRrX3BsYW5lX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKPiAr CQkgICB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVtIGRybV9wbGFuZV90eXBlIHR5 cGUsCj4gKwkJICAgdW5zaWduZWQgaW50IHpwb3MsIHVuc2lnbmVkIGludCBtYXhfcGxhbmUpCj4g K3sKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRl diwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCj4gKwkJCSZtdGtfcGxhbmVfZnVu Y3MsIGZvcm1hdHMsIEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5cGUpOwo+ICsKPiArCWlmIChlcnIp IHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIHBsYW5lXG4iKTsKPiArCQly ZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZtdGtfcGxhbmUt PmJhc2UsICZtdGtfcGxhbmVfaGVscGVyX2Z1bmNzKTsKPiArCW10a19wbGFuZS0+aWR4ID0genBv czsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fcGxhbmUuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uODAwNzVk NDkzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX3BsYW5lLmgKPiBAQCAtMCwwICsxLDM4IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykg MjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNv bT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfTVRLX0RSTV9QTEFORV9IXwo+ICsj ZGVmaW5lIF9NVEtfRFJNX1BMQU5FX0hfCj4gKwo+ICtzdHJ1Y3QgZmVuY2U7Cj4gK3N0cnVjdCBt dGtfY3J0YzsKPiArc3RydWN0IG10a19kcm1fZ2VtX29iajsKPiArCj4gKyNkZWZpbmUgdG9fbXRr X3BsYW5lKHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSwgYmFzZSkKPiAr Cj4gK3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKPiArCXN0cnVjdCBkcm1fcGxhbmUJCWJhc2U7Cj4g KwlzdHJ1Y3QgbXRrX2RybV9jcnRjCQkqbXRrX2NydGM7Cj4gKwl1bnNpZ25lZCBpbnQJCQlpZHg7 Cj4gKwl1bnNpZ25lZCBpbnQJCQlkaXNwX3NpemU7Cj4gKwo+ICsJc3RydWN0IG10a19kcm1fZ2Vt X29iagkJKmZsaXBfb2JqOwo+ICt9Owo+ICsKPiArdm9pZCBtdGtfcGxhbmVfZmluaXNoX3BhZ2Vf ZmxpcChzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lKTsKPiAraW50IG10a19wbGFuZV9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxh bmUsCj4gKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVf dHlwZSB0eXBlLAo+ICsJCSAgIHVuc2lnbmVkIGludCB6cG9zLCB1bnNpZ25lZCBpbnQgbWF4X3Bs YW5lKTsKPiArCj4gKyNlbmRpZgo+IC0tIAo+IDIuNi4xCj4gCgotLSAKRGFuaWVsIFZldHRlcgpT b2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK