From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 318C7C64ED6 for ; Wed, 1 Mar 2023 14:29:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=O1v/qltY+J563N/u19ndWZvRde+sHfFRk8RWum7mVvI=; b=vxr/vL2o67u/SN VvnKkMNqm++v0aNfz2NWgUq/GWj/hcCv0PIFF2RUxE1eumGIE1VQmU7ZT+gM2hemPU6wQFcP2ko/h XXDCHNK/YnP/hTm0q/DniObaxgrAv3luRabkDGjtkslTsE/gsAquA5Z3ez8Yl51QStEieM8qiF0sa mTG6/rl9XgNi5pi99tZUsDwjg3dYqsCqlhbMGzkxh4ihOFkTca5Dcx8ee1OE4caTKJp8LRpMiTAni xc2Q/PFsY7bFxjaIsTxeZ3TVBNotltssIJjLl4IeR0MTtN5q0EhwXb5+qaGZnQUS2sBGouTPXZT4w 2l4BRdpeJipLMfnFSwFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pXNR4-00GRpm-14; Wed, 01 Mar 2023 14:28:02 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pXNQz-00GRoa-6U; Wed, 01 Mar 2023 14:28:00 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 627A3CE1D27; Wed, 1 Mar 2023 14:27:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9CCEBC433EF; Wed, 1 Mar 2023 14:27:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1677680870; bh=ttkMVI2PgJT17F1GCf+MRcAKRGAwKJrx7jI40ihN05o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=d2Eh3J6sfKwwi+WAWoVaAFhsN38gHZH07XDoPgXzPsuGEwqEg14yOzgvna30/tEC4 6/QfYCilKghH7PGoL8ICi716UfLENTfBsfDJ2x9psBEf3q9hVpCuoAfaiD9IWPI44+ vzQGI+ef+EqBhWcWkwnH10yhXzPscC3PZEUO73q2u7J55MH6ZaZmSpd625ZqQ6hKX5 Q/4Wssrw9ER2RbZ9axhRhW2bdea7xHbFHFpxhuKMG/GN6cncW1w16en99vtiShaV7r TGhDA7Qi43oH3toVKY6dMYXeorpfhd2RDZOAnc4m9eOJKDHdi9YPp2ch3/0PBQaRPS P3A38sdKFtwhg== Date: Wed, 1 Mar 2023 14:27:43 +0000 From: Lee Jones To: Samuel Holland Cc: Pavel Machek , linux-leds@vger.kernel.org, Chen-Yu Tsai , Jernej Skrabec , Albert Ou , Conor Dooley , Guo Ren , Heiko Stuebner , Heiko Stuebner , Jisheng Zhang , Krzysztof Kozlowski , Palmer Dabbelt , Paul Walmsley , Philipp Zabel , Rob Herring , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-sunxi@lists.linux.dev Subject: Re: [RESEND PATCH v7 2/5] leds: sun50i-a100: New driver for the A100 LED controller Message-ID: References: <20221231235541.13568-1-samuel@sholland.org> <20221231235541.13568-3-samuel@sholland.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230301_062757_643694_7B4C4551 X-CRM114-Status: GOOD ( 40.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org UGF2ZWwsCgpJIHNlZSB0aGF0IHlvdSBhcmUgYWN0aXZlIG5vdyAtIGNvdWxkIHlvdSBwbGVhc2Ug cHJpb3JpdGlzZSB0aGlzIG9uZS4KCk9uIE1vbiwgMDkgSmFuIDIwMjMsIExlZSBKb25lcyB3cm90 ZToKCj4gT25lIG1vcmUgZm9yIFBhdmVsIHVudGlsIEkgY2FuIGJ1aWxkIG15IExFRHMgc3BlY2lm aWMga25vd2xlZGdlIHN1ZmZpY2llbnRseS4KPiAKPiBPbiBTYXQsIDMxIERlYyAyMDIyLCBTYW11 ZWwgSG9sbGFuZCB3cm90ZToKPiAKPiA+IFNvbWUgQWxsd2lubmVyIHN1bnhpIFNvQ3MsIHN0YXJ0 aW5nIHdpdGggdGhlIEExMDAsIGNvbnRhaW4gYW4gTEVECj4gPiBjb250cm9sbGVyIGRlc2lnbmVk IHRvIGRyaXZlIFJHQiBMRUQgcGl4ZWxzLiBBZGQgYSBkcml2ZXIgZm9yIGl0IHVzaW5nCj4gPiB0 aGUgbXVsdGljb2xvciBMRUQgZnJhbWV3b3JrLCBhbmQgd2l0aCBMRURzIGRlZmluZWQgaW4gdGhl IGRldmljZSB0cmVlLgo+ID4gCj4gPiBBY2tlZC1ieTogSmVybmVqIFNrcmFiZWMgPGplcm5lai5z a3JhYmVjQGdtYWlsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFNhbXVlbCBIb2xsYW5kIDxzYW11 ZWxAc2hvbGxhbmQub3JnPgo+ID4gLS0tCj4gPiAKPiA+IENoYW5nZXMgaW4gdjc6Cj4gPiAgLSBV c2UgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTCj4gPiAKPiA+IENoYW5nZXMgaW4gdjU6Cj4gPiAg LSBSZW5hbWUgdGhlIGRyaXZlciBSMzI5IC0+IEExMDAsIHNpbmNlIHRoYXQgaXMgdGhlIGFjdHVh bCBvcmlnaW5hbAo+ID4gICAgaW1wbGVtZW50YXRpb24KPiA+IAo+ID4gQ2hhbmdlcyBpbiB2NDoK PiA+ICAtIERlcGVuZCBvbiBMRURTX0NMQVNTX01VTFRJQ09MT1IKPiA+IAo+ID4gQ2hhbmdlcyBp biB2MzoKPiA+ICAtIEFkZGVkIHZlbmRvciBwcmVmaXggdG8gdGltaW5nL2Zvcm1hdCBwcm9wZXJ0 aWVzCj4gPiAgLSBSZW5hbWVkICJmb3JtYXQiIHByb3BlcnR5IHRvICJwaXhlbC1mb3JtYXQiIGZv ciBjbGFyaXR5Cj4gPiAgLSBEcm9wcGVkICJ2bGVkLXN1cHBseSIgYXMgaXQgaXMgdW5yZWxhdGVk IHRvIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlCj4gPiAgLSBDaGFuZ2VkICJ3cml0ZXNsIiB0byAi aW93cml0ZTMyX3JlcCIgc28gdGhlIGRyaXZlciBidWlsZHMgb24gaHBwYQo+ID4gCj4gPiBDaGFu Z2VzIGluIHYyOgo+ID4gIC0gUmVuYW1lZCBmcm9tIHN1bnhpLWxlZGMgdG8gc3VuNTBpLXIzMjkt bGVkYwo+ID4gIC0gQWRkZWQgbWlzc2luZyAic3RhdGljIiB0byBmdW5jdGlvbnMvZ2xvYmFscyBh cyByZXBvcnRlZCBieSAwZGF5IGJvdAo+ID4gCj4gPiAgZHJpdmVycy9sZWRzL0tjb25maWcgICAg ICAgICAgICB8ICAgOSArCj4gPiAgZHJpdmVycy9sZWRzL01ha2VmaWxlICAgICAgICAgICB8ICAg MSArCj4gPiAgZHJpdmVycy9sZWRzL2xlZHMtc3VuNTBpLWExMDAuYyB8IDU1NSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgNTY1IGluc2VydGlv bnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9sZWRzL2xlZHMtc3VuNTBpLWEx MDAuYwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJz L2xlZHMvS2NvbmZpZwo+ID4gaW5kZXggNDk5ZDBmMjE1YThiLi40ZjRjNTE1ZWQ3ZDcgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZwo+ID4gKysrIGIvZHJpdmVycy9sZWRzL0tj b25maWcKPiA+IEBAIC0yODEsNiArMjgxLDE1IEBAIGNvbmZpZyBMRURTX0NPQkFMVF9SQVEKPiA+ ICAJaGVscAo+ID4gIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIENvYmFs dCBSYXEgc2VyaWVzIExFRHMuCj4gPiAgCj4gPiArY29uZmlnIExFRFNfU1VONTBJX0ExMDAKPiA+ ICsJdHJpc3RhdGUgIkxFRCBzdXBwb3J0IGZvciBBbGx3aW5uZXIgQTEwMCBSR0IgTEVEIGNvbnRy b2xsZXIiCj4gPiArCWRlcGVuZHMgb24gTEVEU19DTEFTU19NVUxUSUNPTE9SICYmIE9GCj4gPiAr CWRlcGVuZHMgb24gQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QKPiA+ICsJaGVscAo+ID4gKwkg IFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFJHQiBMRUQgY29udHJvbGxlciBm b3VuZAo+ID4gKwkgIGluIHNvbWUgQWxsd2lubmVyIHN1bnhpIFNvQ3MsIGluY2x1ZGVpbmcgQTEw MCwgUjMyOSwgYW5kIEQxLgo+ID4gKwkgIEl0IHVzZXMgYSBvbmUtd2lyZSBpbnRlcmZhY2UgdG8g Y29udHJvbCB1cCB0byAxMDI0IExFRHMuCj4gPiArCj4gPiAgY29uZmlnIExFRFNfU1VORklSRQo+ ID4gIAl0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIFN1bkZpcmUgc2VydmVycy4iCj4gPiAgCWRl cGVuZHMgb24gTEVEU19DTEFTUwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmls ZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQo+ID4gaW5kZXggNGZkMmY5MmNkMTk4Li5hNmVlM2Y1 Y2Y3YmUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKPiA+ICsrKyBiL2Ry aXZlcnMvbGVkcy9NYWtlZmlsZQo+ID4gQEAgLTc2LDYgKzc2LDcgQEAgb2JqLSQoQ09ORklHX0xF RFNfUFdNKQkJCSs9IGxlZHMtcHdtLm8KPiA+ICBvYmotJChDT05GSUdfTEVEU19SRUdVTEFUT1Ip CQkrPSBsZWRzLXJlZ3VsYXRvci5vCj4gPiAgb2JqLSQoQ09ORklHX0xFRFNfUzNDMjRYWCkJCSs9 IGxlZHMtczNjMjR4eC5vCj4gPiAgb2JqLSQoQ09ORklHX0xFRFNfU0MyN1hYX0JMVEMpCQkrPSBs ZWRzLXNjMjd4eC1ibHRjLm8KPiA+ICtvYmotJChDT05GSUdfTEVEU19TVU41MElfQTEwMCkJCSs9 IGxlZHMtc3VuNTBpLWExMDAubwo+ID4gIG9iai0kKENPTkZJR19MRURTX1NVTkZJUkUpCQkrPSBs ZWRzLXN1bmZpcmUubwo+ID4gIG9iai0kKENPTkZJR19MRURTX1NZU0NPTikJCSs9IGxlZHMtc3lz Y29uLm8KPiA+ICBvYmotJChDT05GSUdfTEVEU19UQ0E2NTA3KQkJKz0gbGVkcy10Y2E2NTA3Lm8K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1zdW41MGktYTEwMC5jIGIvZHJpdmVy cy9sZWRzL2xlZHMtc3VuNTBpLWExMDAuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uMzBmYTliZTJjZjJkCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysg Yi9kcml2ZXJzL2xlZHMvbGVkcy1zdW41MGktYTEwMC5jCj4gPiBAQCAtMCwwICsxLDU1NSBAQAo+ ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiArLy8KPiA+ICsvLyBD b3B5cmlnaHQgKGMpIDIwMjEtMjAyMiBTYW11ZWwgSG9sbGFuZCA8c2FtdWVsQHNob2xsYW5kLm9y Zz4KPiA+ICsvLwo+ID4gKy8vIFBhcnRseSBiYXNlZCBvbiBkcml2ZXJzL2xlZHMvbGVkcy10dXJy aXMtb21uaWEuYywgd2hpY2ggaXM6Cj4gPiArLy8gICAgIENvcHlyaWdodCAoYykgMjAyMCBieSBN YXJlayBCZWjDum4gPGthYmVsQGtlcm5lbC5vcmc+Cj4gPiArLy8KPiA+ICsKPiA+ICsjaW5jbHVk ZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1 cHQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbGVk LWNsYXNzLW11bHRpY29sb3IuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbGVkcy5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Bt Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Nw aW5sb2NrLmg+Cj4gPiArCj4gPiArI2RlZmluZSBMRURDX0NUUkxfUkVHCQkJMHgwMDAwCj4gPiAr I2RlZmluZSBMRURDX0NUUkxfUkVHX0RBVEFfTEVOR1RICQkoMHgxZmZmIDw8IDE2KQo+ID4gKyNk ZWZpbmUgTEVEQ19DVFJMX1JFR19SR0JfTU9ERQkJCSgweDcgPDwgNikKPiA+ICsjZGVmaW5lIExF RENfQ1RSTF9SRUdfTEVEQ19FTgkJCUJJVCgwKQo+ID4gKyNkZWZpbmUgTEVEQ19UMDFfVElNSU5H X0NUUkxfUkVHCTB4MDAwNAo+ID4gKyNkZWZpbmUgTEVEQ19UMDFfVElNSU5HX0NUUkxfUkVHX1Qx SAkJKDB4M2YgPDwgMjEpCj4gPiArI2RlZmluZSBMRURDX1QwMV9USU1JTkdfQ1RSTF9SRUdfVDFM CQkoMHgxZiA8PCAxNikKPiA+ICsjZGVmaW5lIExFRENfVDAxX1RJTUlOR19DVFJMX1JFR19UMEgJ CSgweDFmIDw8IDYpCj4gPiArI2RlZmluZSBMRURDX1QwMV9USU1JTkdfQ1RSTF9SRUdfVDBMCQko MHgzZiA8PCAwKQo+ID4gKyNkZWZpbmUgTEVEQ19SRVNFVF9USU1JTkdfQ1RSTF9SRUcJMHgwMDBj Cj4gPiArI2RlZmluZSBMRURDX1JFU0VUX1RJTUlOR19DVFJMX1JFR19MRURfTlVNCSgweDNmZiA8 PCAwKQo+ID4gKyNkZWZpbmUgTEVEQ19EQVRBX1JFRwkJCTB4MDAxNAo+ID4gKyNkZWZpbmUgTEVE Q19ETUFfQ1RSTF9SRUcJCTB4MDAxOAo+ID4gKyNkZWZpbmUgTEVEQ19ETUFfQ1RSTF9SRUdfRklG T19UUklHX0xFVkVMCSgweDFmIDw8IDApCj4gPiArI2RlZmluZSBMRURDX0lOVF9DVFJMX1JFRwkJ MHgwMDFjCj4gPiArI2RlZmluZSBMRURDX0lOVF9DVFJMX1JFR19HTE9CQUxfSU5UX0VOCQlCSVQo NSkKPiA+ICsjZGVmaW5lIExFRENfSU5UX0NUUkxfUkVHX0ZJRk9fQ1BVUkVRX0lOVF9FTglCSVQo MSkKPiA+ICsjZGVmaW5lIExFRENfSU5UX0NUUkxfUkVHX1RSQU5TX0ZJTklTSF9JTlRfRU4JQklU KDApCj4gPiArI2RlZmluZSBMRURDX0lOVF9TVFNfUkVHCQkweDAwMjAKPiA+ICsjZGVmaW5lIExF RENfSU5UX1NUU19SRUdfRklGT19DUFVSRVFfSU5UCUJJVCgxKQo+ID4gKyNkZWZpbmUgTEVEQ19J TlRfU1RTX1JFR19UUkFOU19GSU5JU0hfSU5UCUJJVCgwKQo+ID4gKwo+ID4gKyNkZWZpbmUgTEVE Q19GSUZPX0RFUFRICQkJMzIKPiA+ICsjZGVmaW5lIExFRENfTUFYX0xFRFMJCQkxMDI0Cj4gPiAr Cj4gPiArI2RlZmluZSBMRURTX1RPX0JZVEVTKG4pCQkoKG4pICogc2l6ZW9mKHUzMikpCj4gPiAr Cj4gPiArc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfbGVkIHsKPiA+ICsJc3RydWN0IGxlZF9jbGFz c2Rldl9tYyBtY19jZGV2Owo+ID4gKwlzdHJ1Y3QgbWNfc3VibGVkIHN1YmxlZF9pbmZvWzNdOwo+ ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSB0b19sZWRjX2xlZChtYykgY29udGFpbmVyX29mKG1j LCBzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkY19sZWQsIG1jX2NkZXYpCj4gPiArCj4gPiArc3RydWN0 IHN1bjUwaV9hMTAwX2xlZGNfdGltaW5nIHsKPiA+ICsJdTMyIHQwaF9uczsKPiA+ICsJdTMyIHQw bF9uczsKPiA+ICsJdTMyIHQxaF9uczsKPiA+ICsJdTMyIHQxbF9uczsKPiA+ICsJdTMyIHRyZXNl dF9uczsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBzdW41MGlfYTEwMF9sZWRjIHsKPiA+ICsJ c3RydWN0IGRldmljZSAqZGV2Owo+ID4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPiArCXN0cnVj dCBjbGsgKmJ1c19jbGs7Cj4gPiArCXN0cnVjdCBjbGsgKm1vZF9jbGs7Cj4gPiArCXN0cnVjdCBy ZXNldF9jb250cm9sICpyZXNldDsKPiA+ICsKPiA+ICsJdTMyICpidWZmZXI7Cj4gPiArCXN0cnVj dCBkbWFfY2hhbiAqZG1hX2NoYW47Cj4gPiArCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKPiA+ICsJ aW50IHBpb19sZW5ndGg7Cj4gPiArCWludCBwaW9fb2Zmc2V0Owo+ID4gKwo+ID4gKwlzcGlubG9j a190IGxvY2s7Cj4gPiArCWludCBuZXh0X2xlbmd0aDsKPiA+ICsJYm9vbCB4ZmVyX2FjdGl2ZTsK PiA+ICsKPiA+ICsJdTMyIGZvcm1hdDsKPiA+ICsJc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfdGlt aW5nIHRpbWluZzsKPiA+ICsKPiA+ICsJaW50IG51bV9sZWRzOwo+ID4gKwlzdHJ1Y3Qgc3VuNTBp X2ExMDBfbGVkY19sZWQgbGVkc1tdOwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBzdW41 MGlfYTEwMF9sZWRjX2RtYV94ZmVyKHN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2LCBpbnQg bGVuZ3RoKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNj Owo+ID4gKwlkbWFfY29va2llX3QgY29va2llOwo+ID4gKwo+ID4gKwlkZXNjID0gZG1hZW5naW5l X3ByZXBfc2xhdmVfc2luZ2xlKHByaXYtPmRtYV9jaGFuLCBwcml2LT5kbWFfaGFuZGxlLAo+ID4g KwkJCQkJICAgTEVEU19UT19CWVRFUyhsZW5ndGgpLAo+ID4gKwkJCQkJICAgRE1BX01FTV9UT19E RVYsIDApOwo+ID4gKwlpZiAoIWRlc2MpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ ICsJY29va2llID0gZG1hZW5naW5lX3N1Ym1pdChkZXNjKTsKPiA+ICsJaWYgKGRtYV9zdWJtaXRf ZXJyb3IoY29va2llKSkKPiA+ICsJCXJldHVybiAtRUlPOwo+ID4gKwo+ID4gKwlkbWFfYXN5bmNf aXNzdWVfcGVuZGluZyhwcml2LT5kbWFfY2hhbik7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBzdW41MGlfYTEwMF9sZWRjX3Bpb194ZmVyKHN0cnVj dCBzdW41MGlfYTEwMF9sZWRjICpwcml2LCBpbnQgbGVuZ3RoKQo+ID4gK3sKPiA+ICsJdTMyIGJ1 cnN0LCBvZmZzZXQsIHZhbDsKPiA+ICsKPiA+ICsJaWYgKGxlbmd0aCkgewo+ID4gKwkJLyogTmV3 IHRyYW5zZmVyIChGSUZPIGlzIGVtcHR5KS4gKi8KPiA+ICsJCW9mZnNldCA9IDA7Cj4gPiArCQli dXJzdCAgPSBtaW4obGVuZ3RoLCBMRURDX0ZJRk9fREVQVEgpOwo+ID4gKwl9IGVsc2Ugewo+ID4g KwkJLyogRXhpc3RpbmcgdHJhbnNmZXIgKEZJRk8gaXMgaGFsZi1mdWxsKS4gKi8KPiA+ICsJCWxl bmd0aCA9IHByaXYtPnBpb19sZW5ndGg7Cj4gPiArCQlvZmZzZXQgPSBwcml2LT5waW9fb2Zmc2V0 Owo+ID4gKwkJYnVyc3QgID0gbWluKGxlbmd0aCwgTEVEQ19GSUZPX0RFUFRIIC8gMik7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJaW93cml0ZTMyX3JlcChwcml2LT5iYXNlICsgTEVEQ19EQVRBX1JFRywg cHJpdi0+YnVmZmVyICsgb2Zmc2V0LCBidXJzdCk7Cj4gPiArCj4gPiArCWlmIChidXJzdCA8IGxl bmd0aCkgewo+ID4gKwkJcHJpdi0+cGlvX2xlbmd0aCA9IGxlbmd0aCAtIGJ1cnN0Owo+ID4gKwkJ cHJpdi0+cGlvX29mZnNldCA9IG9mZnNldCArIGJ1cnN0Owo+ID4gKwo+ID4gKwkJaWYgKCFvZmZz ZXQpIHsKPiA+ICsJCQl2YWwgPSByZWFkbChwcml2LT5iYXNlICsgTEVEQ19JTlRfQ1RSTF9SRUcp Owo+ID4gKwkJCXZhbCB8PSBMRURDX0lOVF9DVFJMX1JFR19GSUZPX0NQVVJFUV9JTlRfRU47Cj4g PiArCQkJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfSU5UX0NUUkxfUkVHKTsKPiA+ICsJ CX0KPiA+ICsJfSBlbHNlIHsKPiA+ICsJCS8qIERpc2FibGUgdGhlIHJlcXVlc3QgSVJRIG9uY2Ug YWxsIGRhdGEgaXMgd3JpdHRlbi4gKi8KPiA+ICsJCXZhbCA9IHJlYWRsKHByaXYtPmJhc2UgKyBM RURDX0lOVF9DVFJMX1JFRyk7Cj4gPiArCQl2YWwgJj0gfkxFRENfSU5UX0NUUkxfUkVHX0ZJRk9f Q1BVUkVRX0lOVF9FTjsKPiA+ICsJCXdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBMRURDX0lOVF9D VFJMX1JFRyk7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc3VuNTBpX2Ex MDBfbGVkY19zdGFydF94ZmVyKHN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2LAo+ID4gKwkJ CQkJaW50IGxlbmd0aCkKPiA+ICt7Cj4gPiArCXUzMiB2YWw7Cj4gPiArCj4gPiArCWRldl9kYmco cHJpdi0+ZGV2LCAiVXBkYXRpbmcgJWQgTEVEc1xuIiwgbGVuZ3RoKTsKPiA+ICsKPiA+ICsJdmFs ID0gcmVhZGwocHJpdi0+YmFzZSArIExFRENfQ1RSTF9SRUcpOwo+ID4gKwl2YWwgJj0gfkxFRENf Q1RSTF9SRUdfREFUQV9MRU5HVEg7Cj4gPiArCXZhbCB8PSBsZW5ndGggPDwgMTYgfCBMRURDX0NU UkxfUkVHX0xFRENfRU47Cj4gPiArCXdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBMRURDX0NUUkxf UkVHKTsKPiA+ICsKPiA+ICsJaWYgKGxlbmd0aCA+IExFRENfRklGT19ERVBUSCkgewo+ID4gKwkJ aW50IHJldCA9IHN1bjUwaV9hMTAwX2xlZGNfZG1hX3hmZXIocHJpdiwgbGVuZ3RoKTsKPiA+ICsK PiA+ICsJCWlmICghcmV0KQo+ID4gKwkJCXJldHVybjsKPiA+ICsKPiA+ICsJCWRldl93YXJuKHBy aXYtPmRldiwgIkZhaWxlZCB0byBzZXQgdXAgRE1BOiAlZFxuIiwgcmV0KTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlzdW41MGlfYTEwMF9sZWRjX3Bpb194ZmVyKHByaXYsIGxlbmd0aCk7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBzdW41MGlfYTEwMF9sZWRjX2lycShpbnQgaXJx LCB2b2lkICpkZXZfaWQpCj4gPiArewo+ID4gKwlzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkYyAqcHJp diA9IGRldl9pZDsKPiA+ICsJdTMyIHZhbDsKPiA+ICsKPiA+ICsJdmFsID0gcmVhZGwocHJpdi0+ YmFzZSArIExFRENfSU5UX1NUU19SRUcpOwo+ID4gKwo+ID4gKwlpZiAodmFsICYgTEVEQ19JTlRf U1RTX1JFR19UUkFOU19GSU5JU0hfSU5UKSB7Cj4gPiArCQlpbnQgbmV4dF9sZW5ndGg7Cj4gPiAr Cj4gPiArCQkvKiBTdGFydCB0aGUgbmV4dCB0cmFuc2ZlciBpZiBuZWVkZWQuICovCj4gPiArCQlz cGluX2xvY2soJnByaXYtPmxvY2spOwo+ID4gKwkJbmV4dF9sZW5ndGggPSBwcml2LT5uZXh0X2xl bmd0aDsKPiA+ICsJCWlmIChuZXh0X2xlbmd0aCkKPiA+ICsJCQlwcml2LT5uZXh0X2xlbmd0aCA9 IDA7Cj4gPiArCQllbHNlCj4gPiArCQkJcHJpdi0+eGZlcl9hY3RpdmUgPSBmYWxzZTsKPiA+ICsJ CXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKPiA+ICsKPiA+ICsJCWlmIChuZXh0X2xlbmd0aCkK PiA+ICsJCQlzdW41MGlfYTEwMF9sZWRjX3N0YXJ0X3hmZXIocHJpdiwgbmV4dF9sZW5ndGgpOwo+ ID4gKwl9IGVsc2UgaWYgKHZhbCAmIExFRENfSU5UX1NUU19SRUdfRklGT19DUFVSRVFfSU5UKSB7 Cj4gPiArCQkvKiBDb250aW51ZSB0aGUgY3VycmVudCB0cmFuc2Zlci4gKi8KPiA+ICsJCXN1bjUw aV9hMTAwX2xlZGNfcGlvX3hmZXIocHJpdiwgMCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJd3JpdGVs KHZhbCwgcHJpdi0+YmFzZSArIExFRENfSU5UX1NUU19SRUcpOwo+ID4gKwo+ID4gKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHN1bjUwaV9hMTAwX2xl ZGNfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldiwKPiA+ICsJCQkJCSAg ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCj4gPiArewo+ID4gKwlzdHJ1Y3Qgc3Vu NTBpX2ExMDBfbGVkYyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShjZGV2LT5kZXYtPnBhcmVudCk7 Cj4gPiArCXN0cnVjdCBsZWRfY2xhc3NkZXZfbWMgKm1jX2NkZXYgPSBsY2Rldl90b19tY2NkZXYo Y2Rldik7Cj4gPiArCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRjX2xlZCAqbGVkID0gdG9fbGVkY19s ZWQobWNfY2Rldik7Cj4gPiArCWludCBhZGRyID0gbGVkIC0gcHJpdi0+bGVkczsKPiA+ICsJdW5z aWduZWQgbG9uZyBmbGFnczsKPiA+ICsJYm9vbCB4ZmVyX2FjdGl2ZTsKPiA+ICsJaW50IG5leHRf bGVuZ3RoOwo+ID4gKwo+ID4gKwlsZWRfbWNfY2FsY19jb2xvcl9jb21wb25lbnRzKG1jX2NkZXYs IGJyaWdodG5lc3MpOwo+ID4gKwo+ID4gKwlwcml2LT5idWZmZXJbYWRkcl0gPSBsZWQtPnN1Ymxl ZF9pbmZvWzBdLmJyaWdodG5lc3MgPDwgMTYgfAo+ID4gKwkJCSAgICAgbGVkLT5zdWJsZWRfaW5m b1sxXS5icmlnaHRuZXNzIDw8ICA4IHwKPiA+ICsJCQkgICAgIGxlZC0+c3VibGVkX2luZm9bMl0u YnJpZ2h0bmVzczsKPiA+ICsKPiA+ICsJZGV2X2RiZyhwcml2LT5kZXYsICJMRUQgJWQgLT4gIyUw NnhcbiIsIGFkZHIsIHByaXYtPmJ1ZmZlclthZGRyXSk7Cj4gPiArCj4gPiArCXNwaW5fbG9ja19p cnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Cj4gPiArCW5leHRfbGVuZ3RoID0gbWF4KHByaXYt Pm5leHRfbGVuZ3RoLCBhZGRyICsgMSk7Cj4gPiArCXhmZXJfYWN0aXZlID0gcHJpdi0+eGZlcl9h Y3RpdmU7Cj4gPiArCWlmICh4ZmVyX2FjdGl2ZSkKPiA+ICsJCXByaXYtPm5leHRfbGVuZ3RoID0g bmV4dF9sZW5ndGg7Cj4gPiArCWVsc2UKPiA+ICsJCXByaXYtPnhmZXJfYWN0aXZlID0gdHJ1ZTsK PiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwo+ID4gKwo+ ID4gKwlpZiAoIXhmZXJfYWN0aXZlKQo+ID4gKwkJc3VuNTBpX2ExMDBfbGVkY19zdGFydF94ZmVy KHByaXYsIG5leHRfbGVuZ3RoKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IGNoYXIg KmNvbnN0IHN1bjUwaV9hMTAwX2xlZGNfZm9ybWF0c1tdID0gewo+ID4gKwkicmdiIiwKPiA+ICsJ InJiZyIsCj4gPiArCSJncmIiLAo+ID4gKwkiZ2JyIiwKPiA+ICsJImJyZyIsCj4gPiArCSJiZ3Ii LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBzdW41MGlfYTEwMF9sZWRjX3BhcnNlX2Zv cm1hdChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+ID4gKwkJCQkJIHN0cnVjdCBzdW41 MGlfYTEwMF9sZWRjICpwcml2KQo+ID4gK3sKPiA+ICsJY29uc3QgY2hhciAqZm9ybWF0ID0gImdy YiI7Cj4gPiArCXUzMiBpOwo+ID4gKwo+ID4gKwlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwg ImFsbHdpbm5lcixwaXhlbC1mb3JtYXQiLCAmZm9ybWF0KTsKPiA+ICsKPiA+ICsJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoc3VuNTBpX2ExMDBfbGVkY19mb3JtYXRzKTsgKytpKSB7Cj4gPiAr CQlpZiAoIXN0cmNtcChmb3JtYXQsIHN1bjUwaV9hMTAwX2xlZGNfZm9ybWF0c1tpXSkpIHsKPiA+ ICsJCQlwcml2LT5mb3JtYXQgPSBpOwo+ID4gKwkJCXJldHVybiAwOwo+ID4gKwkJfQo+ID4gKwl9 Cj4gPiArCj4gPiArCWRldl9lcnIocHJpdi0+ZGV2LCAiQmFkIHBpeGVsIGZvcm1hdCAnJXMnXG4i LCBmb3JtYXQpOwo+ID4gKwo+ID4gKwlyZXR1cm4gLUVJTlZBTDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgc3VuNTBpX2ExMDBfbGVkY19zZXRfZm9ybWF0KHN0cnVjdCBzdW41MGlfYTEw MF9sZWRjICpwcml2KQo+ID4gK3sKPiA+ICsJdTMyIHZhbDsKPiA+ICsKPiA+ICsJdmFsID0gcmVh ZGwocHJpdi0+YmFzZSArIExFRENfQ1RSTF9SRUcpOwo+ID4gKwl2YWwgJj0gfkxFRENfQ1RSTF9S RUdfUkdCX01PREU7Cj4gPiArCXZhbCB8PSBwcml2LT5mb3JtYXQgPDwgNjsKPiA+ICsJd3JpdGVs KHZhbCwgcHJpdi0+YmFzZSArIExFRENfQ1RSTF9SRUcpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfdGltaW5nIHN1bjUwaV9hMTAwX2xlZGNf ZGVmYXVsdF90aW1pbmcgPSB7Cj4gPiArCS50MGhfbnMgPSAzMzYsCj4gPiArCS50MGxfbnMgPSA4 NDAsCj4gPiArCS50MWhfbnMgPSA4ODIsCj4gPiArCS50MWxfbnMgPSAyOTQsCj4gPiArCS50cmVz ZXRfbnMgPSAzMDAwMDAsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHN1bjUwaV9hMTAw X2xlZGNfcGFyc2VfdGltaW5nKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gPiArCQkJ CQkgc3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYpCj4gPiArewo+ID4gKwlzdHJ1Y3Qgc3Vu NTBpX2ExMDBfbGVkY190aW1pbmcgKnRpbWluZyA9ICZwcml2LT50aW1pbmc7Cj4gPiArCj4gPiAr CSp0aW1pbmcgPSBzdW41MGlfYTEwMF9sZWRjX2RlZmF1bHRfdGltaW5nOwo+ID4gKwo+ID4gKwlv Zl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFsbHdpbm5lcix0MGgtbnMiLCAmdGltaW5nLT50MGhf bnMpOwo+ID4gKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFsbHdpbm5lcix0MGwtbnMiLCAm dGltaW5nLT50MGxfbnMpOwo+ID4gKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFsbHdpbm5l cix0MWgtbnMiLCAmdGltaW5nLT50MWhfbnMpOwo+ID4gKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihu cCwgImFsbHdpbm5lcix0MWwtbnMiLCAmdGltaW5nLT50MWxfbnMpOwo+ID4gKwlvZl9wcm9wZXJ0 eV9yZWFkX3UzMihucCwgImFsbHdpbm5lcix0cmVzZXQtbnMiLCAmdGltaW5nLT50cmVzZXRfbnMp Owo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc3Vu NTBpX2ExMDBfbGVkY19zZXRfdGltaW5nKHN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2KQo+ ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IHN1bjUwaV9hMTAwX2xlZGNfdGltaW5nICp0aW1pbmcg PSAmcHJpdi0+dGltaW5nOwo+ID4gKwl1bnNpZ25lZCBsb25nIG1vZF9mcmVxID0gY2xrX2dldF9y YXRlKHByaXYtPm1vZF9jbGspOwo+ID4gKwl1MzIgY3ljbGVfbnMgPSBOU0VDX1BFUl9TRUMgLyBt b2RfZnJlcTsKPiA+ICsJdTMyIHZhbDsKPiA+ICsKPiA+ICsJdmFsID0gKHRpbWluZy0+dDFoX25z IC8gY3ljbGVfbnMpIDw8IDIxIHwKPiA+ICsJICAgICAgKHRpbWluZy0+dDFsX25zIC8gY3ljbGVf bnMpIDw8IDE2IHwKPiA+ICsJICAgICAgKHRpbWluZy0+dDBoX25zIC8gY3ljbGVfbnMpIDw8ICA2 IHwKPiA+ICsJICAgICAgKHRpbWluZy0+dDBsX25zIC8gY3ljbGVfbnMpOwo+ID4gKwl3cml0ZWwo dmFsLCBwcml2LT5iYXNlICsgTEVEQ19UMDFfVElNSU5HX0NUUkxfUkVHKTsKPiA+ICsKPiA+ICsJ dmFsID0gKHRpbWluZy0+dHJlc2V0X25zIC8gY3ljbGVfbnMpIDw8IDE2IHwKPiA+ICsJICAgICAg KHByaXYtPm51bV9sZWRzIC0gMSk7Cj4gPiArCXdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBMRURD X1JFU0VUX1RJTUlOR19DVFJMX1JFRyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc3Vu NTBpX2ExMDBfbGVkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3Ry dWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsJ dTMyIHZhbDsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gcmVzZXRfY29udHJvbF9k ZWFzc2VydChwcml2LT5yZXNldCk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ ID4gKwo+ID4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+YnVzX2Nsayk7Cj4gPiAr CWlmIChyZXQpCj4gPiArCQlnb3RvIGVycl9hc3NlcnRfcmVzZXQ7Cj4gPiArCj4gPiArCXJldCA9 IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5tb2RfY2xrKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJ CWdvdG8gZXJyX2Rpc2FibGVfYnVzX2NsazsKPiA+ICsKPiA+ICsJc3VuNTBpX2ExMDBfbGVkY19z ZXRfZm9ybWF0KHByaXYpOwo+ID4gKwlzdW41MGlfYTEwMF9sZWRjX3NldF90aW1pbmcocHJpdik7 Cj4gPiArCj4gPiArCS8qIFRoZSB0cmlnZ2VyIGxldmVsIG11c3QgYmUgYXQgbGVhc3QgdGhlIGJ1 cnN0IGxlbmd0aC4gKi8KPiA+ICsJdmFsID0gcmVhZGwocHJpdi0+YmFzZSArIExFRENfRE1BX0NU UkxfUkVHKTsKPiA+ICsJdmFsICY9IH5MRURDX0RNQV9DVFJMX1JFR19GSUZPX1RSSUdfTEVWRUw7 Cj4gPiArCXZhbCB8PSBMRURDX0ZJRk9fREVQVEggLyAyOwo+ID4gKwl3cml0ZWwodmFsLCBwcml2 LT5iYXNlICsgTEVEQ19ETUFfQ1RSTF9SRUcpOwo+ID4gKwo+ID4gKwl2YWwgPSBMRURDX0lOVF9D VFJMX1JFR19HTE9CQUxfSU5UX0VOIHwKPiA+ICsJICAgICAgTEVEQ19JTlRfQ1RSTF9SRUdfVFJB TlNfRklOSVNIX0lOVF9FTjsKPiA+ICsJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfSU5U X0NUUkxfUkVHKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArZXJyX2Rpc2FibGVf YnVzX2NsazoKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmJ1c19jbGspOwo+ID4g K2Vycl9hc3NlcnRfcmVzZXQ6Cj4gPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtPnJlc2V0 KTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBz dW41MGlfYTEwMF9sZWRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJ c3RydWN0IHN1bjUwaV9hMTAwX2xlZGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ ICsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPm1vZF9jbGspOwo+ID4gKwljbGtf ZGlzYWJsZV91bnByZXBhcmUocHJpdi0+YnVzX2Nsayk7Cj4gPiArCXJlc2V0X2NvbnRyb2xfYXNz ZXJ0KHByaXYtPnJlc2V0KTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIHN1bjUwaV9hMTAwX2xlZGNfZG1hX2NsZWFudXAodm9pZCAqZGF0YSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBzdW41MGlfYTEwMF9sZWRjICpwcml2ID0gZGF0YTsKPiA+ICsJc3Ry dWN0IGRldmljZSAqZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShwcml2LT5kbWFf Y2hhbik7Cj4gPiArCj4gPiArCWlmIChwcml2LT5idWZmZXIpCj4gPiArCQlkbWFfZnJlZV93Yyhk bWFfZGV2LCBMRURTX1RPX0JZVEVTKHByaXYtPm51bV9sZWRzKSwKPiA+ICsJCQkgICAgcHJpdi0+ YnVmZmVyLCBwcml2LT5kbWFfaGFuZGxlKTsKPiA+ICsJZG1hX3JlbGVhc2VfY2hhbm5lbChwcml2 LT5kbWFfY2hhbik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc3VuNTBpX2ExMDBfbGVk Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsJY29uc3Qg c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwo+ID4gKwlzdHJ1Y3Qg ZG1hX3NsYXZlX2NvbmZpZyBkbWFfY2ZnID0ge307Cj4gPiArCXN0cnVjdCBsZWRfaW5pdF9kYXRh IGluaXRfZGF0YSA9IHt9Owo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwo+ID4gKwlzdHJ1Y3Qgc3VuNTBpX2ExMDBf bGVkYyAqcHJpdjsKPiA+ICsJc3RydWN0IHJlc291cmNlICptZW07Cj4gPiArCWludCBjb3VudCwg aXJxLCByZXQ7Cj4gPiArCj4gPiArCWNvdW50ID0gb2ZfZ2V0X2F2YWlsYWJsZV9jaGlsZF9jb3Vu dChucCk7Cj4gPiArCWlmICghY291bnQpCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ICsJaWYg KGNvdW50ID4gTEVEQ19NQVhfTEVEUykgewo+ID4gKwkJZGV2X2VycihkZXYsICJUb28gbWFueSBM RURzISAobWF4IGlzICVkKVxuIiwgTEVEQ19NQVhfTEVEUyk7Cj4gPiArCQlyZXR1cm4gLUVJTlZB TDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc3RydWN0X3Np emUocHJpdiwgbGVkcywgY291bnQpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFwcml2KQo+ID4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCXByaXYtPmRldiA9IGRldjsKPiA+ICsJcHJp di0+bnVtX2xlZHMgPSBjb3VudDsKPiA+ICsJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwo+ ID4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKPiA+ICsKPiA+ICsJcmV0ID0gc3VuNTBp X2ExMDBfbGVkY19wYXJzZV9mb3JtYXQobnAsIHByaXYpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJ cmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gc3VuNTBpX2ExMDBfbGVkY19wYXJzZV90aW1p bmcobnAsIHByaXYpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ ICsJcHJpdi0+YmFzZSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBk ZXYsIDAsICZtZW0pOwo+ID4gKwlpZiAoSVNfRVJSKHByaXYtPmJhc2UpKQo+ID4gKwkJcmV0dXJu IFBUUl9FUlIocHJpdi0+YmFzZSk7Cj4gPiArCj4gPiArCXByaXYtPmJ1c19jbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAiYnVzIik7Cj4gPiArCWlmIChJU19FUlIocHJpdi0+YnVzX2NsaykpCj4gPiAr CQlyZXR1cm4gUFRSX0VSUihwcml2LT5idXNfY2xrKTsKPiA+ICsKPiA+ICsJcHJpdi0+bW9kX2Ns ayA9IGRldm1fY2xrX2dldChkZXYsICJtb2QiKTsKPiA+ICsJaWYgKElTX0VSUihwcml2LT5tb2Rf Y2xrKSkKPiA+ICsJCXJldHVybiBQVFJfRVJSKHByaXYtPm1vZF9jbGspOwo+ID4gKwo+ID4gKwlw cml2LT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgTlVMTCk7 Cj4gPiArCWlmIChJU19FUlIocHJpdi0+cmVzZXQpKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIocHJp di0+cmVzZXQpOwo+ID4gKwo+ID4gKwlwcml2LT5kbWFfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW4o ZGV2LCAidHgiKTsKPiA+ICsJaWYgKElTX0VSUihwcml2LT5kbWFfY2hhbikpCj4gPiArCQlyZXR1 cm4gUFRSX0VSUihwcml2LT5kbWFfY2hhbik7Cj4gPiArCj4gPiArCXJldCA9IGRldm1fYWRkX2Fj dGlvbl9vcl9yZXNldChkZXYsIHN1bjUwaV9hMTAwX2xlZGNfZG1hX2NsZWFudXAsIHByaXYpOwo+ ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJZG1hX2NmZy5kc3Rf YWRkcgk9IG1lbS0+c3RhcnQgKyBMRURDX0RBVEFfUkVHOwo+ID4gKwlkbWFfY2ZnLmRzdF9hZGRy X3dpZHRoCT0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7Cj4gPiArCWRtYV9jZmcuZHN0X21h eGJ1cnN0CT0gTEVEQ19GSUZPX0RFUFRIIC8gMjsKPiA+ICsJcmV0ID0gZG1hZW5naW5lX3NsYXZl X2NvbmZpZyhwcml2LT5kbWFfY2hhbiwgJmRtYV9jZmcpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJ cmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcHJpdi0+YnVmZmVyID0gZG1hX2FsbG9jX3djKGRtYWVu Z2luZV9nZXRfZG1hX2RldmljZShwcml2LT5kbWFfY2hhbiksCj4gPiArCQkJCSAgICBMRURTX1RP X0JZVEVTKHByaXYtPm51bV9sZWRzKSwKPiA+ICsJCQkJICAgICZwcml2LT5kbWFfaGFuZGxlLCBH RlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFwcml2LT5idWZmZXIpCj4gPiArCQlyZXR1cm4gLUVOT01F TTsKPiA+ICsKPiA+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPiA+ICsJaWYg KGlycSA8IDApCj4gPiArCQlyZXR1cm4gaXJxOwo+ID4gKwo+ID4gKwlyZXQgPSBkZXZtX3JlcXVl c3RfaXJxKGRldiwgaXJxLCBzdW41MGlfYTEwMF9sZWRjX2lycSwKPiA+ICsJCQkgICAgICAgMCwg ZGV2X25hbWUoZGV2KSwgcHJpdik7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ ID4gKwo+ID4gKwlyZXQgPSBzdW41MGlfYTEwMF9sZWRjX3Jlc3VtZShkZXYpOwo+ID4gKwlpZiAo cmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJZm9yX2VhY2hfYXZhaWxhYmxlX2No aWxkX29mX25vZGUobnAsIGNoaWxkKSB7Cj4gPiArCQlzdHJ1Y3Qgc3VuNTBpX2ExMDBfbGVkY19s ZWQgKmxlZDsKPiA+ICsJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXY7Cj4gPiArCQl1MzIgYWRk ciwgY29sb3I7Cj4gPiArCj4gPiArCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwg InJlZyIsICZhZGRyKTsKPiA+ICsJCWlmIChyZXQgfHwgYWRkciA+PSBjb3VudCkgewo+ID4gKwkJ CWRldl9lcnIoZGV2LCAiTEVEICdyZWcnIHZhbHVlcyBtdXN0IGJlIGZyb20gMCB0byAlZFxuIiwK PiA+ICsJCQkJcHJpdi0+bnVtX2xlZHMgLSAxKTsKPiA+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ID4g KwkJCWdvdG8gZXJyX3B1dF9jaGlsZDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXJldCA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiY29sb3IiLCAmY29sb3IpOwo+ID4gKwkJaWYgKHJldCB8 fCBjb2xvciAhPSBMRURfQ09MT1JfSURfUkdCKSB7Cj4gPiArCQkJZGV2X2VycihkZXYsICJMRUQg J2NvbG9yJyBtdXN0IGJlIExFRF9DT0xPUl9JRF9SR0JcbiIpOwo+ID4gKwkJCXJldCA9IC1FSU5W QUw7Cj4gPiArCQkJZ290byBlcnJfcHV0X2NoaWxkOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJbGVk ID0gJnByaXYtPmxlZHNbYWRkcl07Cj4gPiArCj4gPiArCQlsZWQtPnN1YmxlZF9pbmZvWzBdLmNv bG9yX2luZGV4ID0gTEVEX0NPTE9SX0lEX1JFRDsKPiA+ICsJCWxlZC0+c3VibGVkX2luZm9bMF0u Y2hhbm5lbCA9IDA7Cj4gPiArCQlsZWQtPnN1YmxlZF9pbmZvWzFdLmNvbG9yX2luZGV4ID0gTEVE X0NPTE9SX0lEX0dSRUVOOwo+ID4gKwkJbGVkLT5zdWJsZWRfaW5mb1sxXS5jaGFubmVsID0gMTsK PiA+ICsJCWxlZC0+c3VibGVkX2luZm9bMl0uY29sb3JfaW5kZXggPSBMRURfQ09MT1JfSURfQkxV RTsKPiA+ICsJCWxlZC0+c3VibGVkX2luZm9bMl0uY2hhbm5lbCA9IDI7Cj4gPiArCj4gPiArCQls ZWQtPm1jX2NkZXYubnVtX2NvbG9ycyA9IEFSUkFZX1NJWkUobGVkLT5zdWJsZWRfaW5mbyk7Cj4g PiArCQlsZWQtPm1jX2NkZXYuc3VibGVkX2luZm8gPSBsZWQtPnN1YmxlZF9pbmZvOwo+ID4gKwo+ ID4gKwkJY2RldiA9ICZsZWQtPm1jX2NkZXYubGVkX2NkZXY7Cj4gPiArCQljZGV2LT5tYXhfYnJp Z2h0bmVzcyA9IFU4X01BWDsKPiA+ICsJCWNkZXYtPmJyaWdodG5lc3Nfc2V0ID0gc3VuNTBpX2Ex MDBfbGVkY19icmlnaHRuZXNzX3NldDsKPiA+ICsKPiA+ICsJCWluaXRfZGF0YS5md25vZGUgPSBv Zl9md25vZGVfaGFuZGxlKGNoaWxkKTsKPiA+ICsKPiA+ICsJCXJldCA9IGRldm1fbGVkX2NsYXNz ZGV2X211bHRpY29sb3JfcmVnaXN0ZXJfZXh0KGRldiwKPiA+ICsJCQkJCQkJCSZsZWQtPm1jX2Nk ZXYsCj4gPiArCQkJCQkJCQkmaW5pdF9kYXRhKTsKPiA+ICsJCWlmIChyZXQpIHsKPiA+ICsJCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBMRUQgJXU6ICVkXG4iLAo+ID4gKwkJCQlh ZGRyLCByZXQpOwo+ID4gKwkJCWdvdG8gZXJyX3B1dF9jaGlsZDsKPiA+ICsJCX0KPiA+ICsJfQo+ ID4gKwo+ID4gKwlkZXZfaW5mbyhkZXYsICJSZWdpc3RlcmVkICVkIExFRHNcbiIsIHByaXYtPm51 bV9sZWRzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArZXJyX3B1dF9jaGlsZDoK PiA+ICsJb2Zfbm9kZV9wdXQoY2hpbGQpOwo+ID4gKwlzdW41MGlfYTEwMF9sZWRjX3N1c3BlbmQo JnBkZXYtPmRldik7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgc3VuNTBpX2ExMDBfbGVkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiA+ICt7Cj4gPiArCXN1bjUwaV9hMTAwX2xlZGNfc3VzcGVuZCgmcGRldi0+ZGV2KTsK PiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHN1bjUw aV9hMTAwX2xlZGNfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7 Cj4gPiArCXN1bjUwaV9hMTAwX2xlZGNfc3VzcGVuZCgmcGRldi0+ZGV2KTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuNTBpX2ExMDBfbGVkY19v Zl9tYXRjaFtdID0gewo+ID4gKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW41MGktYTEw MC1sZWRjIiB9LAo+ID4gKwl7fQo+ID4gK307Cj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg c3VuNTBpX2ExMDBfbGVkY19vZl9tYXRjaCk7Cj4gPiArCj4gPiArc3RhdGljIERFRklORV9TSU1Q TEVfREVWX1BNX09QUyhzdW41MGlfYTEwMF9sZWRjX3BtLAo+ID4gKwkJCQlzdW41MGlfYTEwMF9s ZWRjX3N1c3BlbmQsCj4gPiArCQkJCXN1bjUwaV9hMTAwX2xlZGNfcmVzdW1lKTsKPiA+ICsKPiA+ ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW41MGlfYTEwMF9sZWRjX2RyaXZlciA9 IHsKPiA+ICsJLnByb2JlCQk9IHN1bjUwaV9hMTAwX2xlZGNfcHJvYmUsCj4gPiArCS5yZW1vdmUJ CT0gc3VuNTBpX2ExMDBfbGVkY19yZW1vdmUsCj4gPiArCS5zaHV0ZG93bgk9IHN1bjUwaV9hMTAw X2xlZGNfc2h1dGRvd24sCj4gPiArCS5kcml2ZXIJCT0gewo+ID4gKwkJLm5hbWUJCT0gInN1bjUw aS1hMTAwLWxlZGMiLAo+ID4gKwkJLm9mX21hdGNoX3RhYmxlCT0gc3VuNTBpX2ExMDBfbGVkY19v Zl9tYXRjaCwKPiA+ICsJCS5wbQkJPSBwbV9wdHIoJnN1bjUwaV9hMTAwX2xlZGNfcG0pLAo+ID4g Kwl9LAo+ID4gK307Cj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzdW41MGlfYTEwMF9sZWRj X2RyaXZlcik7Cj4gPiArCj4gPiArTU9EVUxFX0FVVEhPUigiU2FtdWVsIEhvbGxhbmQgPHNhbXVl bEBzaG9sbGFuZC5vcmc+Iik7Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBbGx3aW5uZXIgQTEw MCBMRUQgY29udHJvbGxlciBkcml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4g PiAtLSAKPiA+IDIuMzcuNAo+ID4gCj4gCj4gLS0gCj4gTGVlIEpvbmVzIFvmnY7nkLzmlq9dCgot LSAKTGVlIEpvbmVzIFvmnY7nkLzmlq9dCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==