From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v5 1/5] drm: xlnx: Xilinx DRM KMS module Date: Thu, 22 Feb 2018 01:17:25 +0200 Message-ID: <1602665.SZ6qsW1oli@avalon> References: <1517967400-16993-1-git-send-email-hyun.kwon@xilinx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1517967400-16993-1-git-send-email-hyun.kwon@xilinx.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hyun Kwon Cc: devicetree@vger.kernel.org, Rob Herring , Michal Simek , dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: devicetree@vger.kernel.org SGkgSHl1biwKClRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgoKT24gV2VkbmVzZGF5LCA3IEZlYnJ1 YXJ5IDIwMTggMDM6MzY6MzYgRUVUIEh5dW4gS3dvbiB3cm90ZToKPiBYaWxpbnggaGFzIHZhcmlv dXMgcGxhdGZvcm1zIGZvciBkaXNwbGF5LCB3aGVyZSB1c2VycyBjYW4gY3JlYXRlCj4gdXNpbmcg bXVsdGlwbGUgSVBzIGluIHRoZSBwcm9ncmFtbWFibGUgRlBHQSBmYWJyaWMsIG9yIHdoZXJlCj4g c29tZSBoYXJkZW5lZCBwaWVwbGluZSBpcyBhdmFpbGFibGUgb24gdGhlIGNoaXAuIEZ1cnRoZXJt b3JlLAoKcy9waWVwbGluZS9waXBlbGluZS8KCj4gaGFyZGVuZWQgcGlwZWxpbmUgY2FuIGFsc28g aW50ZXJhY3Qgd2l0aCBzb2Z0IGxvZ2ljcyBpbiBGUEdBLgo+IAo+IFRoZSBYaWxpbnggRFJNIEtN UyBtb2R1bGUgaXMgdG8gaW50ZWdyYXRlIG11bHRpcGxlIHN1YmRldmljZXMgYW5kCj4gdG8gcmVw cmVzZW50IHRoZSBlbnRpcmUgcGlwZWxpbmUgYXMgYSBzaW5nbGUgRFJNIGRldmljZS4gVGhlIG1v ZHVsZQo+IGluY2x1ZGVzIGhlbHBlciAoZXgsIGZyYW1lYnVmZmVyIGFuZCBnZW0gaGVscGVycykg YW5kCj4gZ2x1ZSBsb2dpYyAoZXgsIGNydGMgaW50ZXJmYWNlKSBmdW5jdGlvbnMuCj4gCj4gU2ln bmVkLW9mZi1ieTogSHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiBBY2tlZC1ieTog RGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiAtLS0KPiB2NQo+IC0gUmVk ZWZpbmUgeGxueF9waXBlbGluZV9pbml0KCkKPiB2NAo+IC0gRml4IGEgYnVnIGluIG9mIGdyYXBo IGJpbmRpbmcgaGFuZGxpbmcKPiAtIFJlbW92ZSB2YmxhbmsgY2FsbGJhY2tzIGZyb20geGxueF9j cnRjCj4gLSBSZW1vdmUgdGhlIGR0IGJpbmRpbmcuIFRoaXMgbW9kdWxlIGJlY29tZXMgbW9yZSBs aWtlIGEgbGlicmFyeS4KPiAtIFJlcGhyYXNlIHRoZSBjb21taXQgbWVzc2FnZQo+IHYzCj4gLSBB ZGQgTGF1cmVudCBhcyBhIG1haW50YWluZXIKPiAtIEZpeCBtdWx0aXBsZS1yZWZlcmVuY2Ugb24g Z2VtIG9iamVjdHMKPiB2Mgo+IC0gQ2hhbmdlIHRoZSBTUERYIGlkZW50aWZpZXIgZm9ybWF0Cj4g LSBNZXJnZSBwYXRjaGVzKGNydGMsIGdlbSwgZmIpIGludG8gc2luZ2xlIG9uZQo+IHYyIG9mIHhs bnhfZHJ2Cj4gLSBSZW5hbWUga21zIHRvIGRpc3BsYXkgaW4geGxueF9kcnYKPiAtIFJlcGxhY2Ug c29tZSB4bG54IHNwZWNpZmljIGZiIGhlbHBlciB3aXRoIGNvbW1vbiBoZWxwZXJzIGluIHhsbnhf ZHJ2Cj4gLSBEb24ndCBzZXQgdGhlIGNvbW1pdCB0YWlsIGNhbGxiYWNrIGluIHhsbnhfZHJ2Cj4g LSBTdXBwb3J0ICdwb3J0cycgZ3JhcGggYmluZGluZyBpbiB4bG54X2Rydgo+IHYyIG9mIHhsbnhf ZmIKPiAtIFJlbW92ZSB3cmFwcGVycyBpbiB4bG54X2ZiCj4gLSBSZXBsYWNlIHNvbWUgZnVuY3Rp b25zIHdpdGggZHJtIGNvcmUgaGVscGVycyBpbiB4bG54X2ZiCj4gLS0tCj4gLS0tCj4gIE1BSU5U QUlORVJTICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKPiAgZHJpdmVycy9ncHUvZHJtL0tj b25maWcgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAg ICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcgICAgIHwgIDEyICsKPiAg ZHJpdmVycy9ncHUvZHJtL3hsbngvTWFrZWZpbGUgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9k cm0veGxueC94bG54X2NydGMuYyB8IDE3NyArKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9k cm0veGxueC94bG54X2NydGMuaCB8ICA3MCArKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9kcnYuYyAgfCA1MDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmggIHwgIDMzICsrKwo+ICBkcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2ZiLmMgICB8IDI5OCArKysrKysrKysrKysrKysrKysrKysrKwo+ICBk cml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmggICB8ICAzMyArKysKPiAgZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9nZW0uYyAgfCAgNDcgKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94 bG54X2dlbS5oICB8ICAyNiArKwo+ICAxMyBmaWxlcyBjaGFuZ2VkLCAxMjExIGluc2VydGlvbnMo KykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuYwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmgKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0veGxueC94bG54X2dlbS5oCj4gCj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIv TUFJTlRBSU5FUlMKPiBpbmRleCA1YmMwODhmLi4wN2MwZTczIDEwMDY0NAo+IC0tLSBhL01BSU5U QUlORVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtNDc4OSw2ICs0Nzg5LDE1IEBAIEY6CWRy aXZlcnMvZ3B1L2RybS9ldG5hdml2Lwo+ICBGOglpbmNsdWRlL3VhcGkvZHJtL2V0bmF2aXZfZHJt LmgKPiAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvZXRuYXZp di8KPiAKPiArRFJNIERSSVZFUlMgRk9SIFhJTElOWAo+ICtNOglIeXVuIEt3b24gPGh5dW4ua3dv bkB4aWxpbnguY29tPgo+ICtNOglMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlk ZWFzb25ib2FyZC5jb20+Cj4gK0w6CWRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiAr UzoJTWFpbnRhaW5lZAo+ICtGOglkcml2ZXJzL2dwdS9kcm0veGxueC8KPiArRjoJRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkveGxueC8KPiArVDoJZ2l0IGdpdDovL2Fu b25naXQuZnJlZWRlc2t0b3Aub3JnL2RybS9kcm0tbWlzYwo+ICsKPiAgRFJNIERSSVZFUlMgRk9S IFpURSBaWAo+ICBNOglTaGF3biBHdW8gPHNoYXduZ3VvQGtlcm5lbC5vcmc+Cj4gIEw6CWRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IGRlZWVmYTcuLjVhM2Vj NjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0yODksNiArMjg5LDggQEAgc291cmNlICJkcml2ZXJzL2dw dS9kcm0vcGwxMTEvS2NvbmZpZyIKPiAKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdHZlMjAw L0tjb25maWciCj4gCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZyIKCkkg d291bGQgaGF2ZSBzcGVsbGVkIHRoYXQgb3V0IGNvbXBsZXRlbHkgYXMgSSB0aGluayBpdCB3aWxs IGJlIGVhc2llciB0byAKdW5kZXJzdGFuZCwgYnV0IGl0J3MgdXAgdG8geW91LgoKPiAgIyBLZWVw IGxlZ2FjeSBkcml2ZXJzIGxhc3QKPiAKPiAgbWVudWNvbmZpZyBEUk1fTEVHQUNZCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+IGluZGV4IDUwMDkzZmYuLmY5MzU1N2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTEwMywzICsx MDMsNCBAQCBvYmotJChDT05GSUdfRFJNX01YU0ZCKQkrPSBteHNmYi8KPiAgb2JqLSQoQ09ORklH X0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLwo+ICBvYmotJChDT05GSUdfRFJNX1BMMTExKSArPSBw bDExMS8KPiAgb2JqLSQoQ09ORklHX0RSTV9UVkUyMDApICs9IHR2ZTIwMC8KPiArb2JqLSQoQ09O RklHX0RSTV9YTE5YKQkrPSB4bG54Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxu eC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMTlmZDdjZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnCj4gQEAgLTAsMCArMSwxMiBAQAo+ICtjb25maWcg RFJNX1hMTlgKPiArCXRyaXN0YXRlICJYaWxpbnggRFJNIEtNUyBEcml2ZXIiCj4gKwlkZXBlbmRz IG9uIERSTSAmJiBPRgo+ICsJc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX0tN U19DTUFfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCj4gKwloZWxwCj4gKwkg IFhpbGlueCBEUk0gS01TIGRyaXZlci4gQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlCj4g KwkgIGEgWGlsaW54IFNvQ3Mgd2l0aCBoYXJkZW5lZCBkaXNwbGF5IHBpcGVsaW5lIG9yIHNvZnQK PiArCSAgZGlzcGxheSBwaXBlbGluZSB1c2luZyBYaWxpbnggSVBzIGluIEZQR0EuIFRoaXMgbW9k dWxlCj4gKwkgIHByb3ZpZGVzIHRoZSBrZXJuZWwgbW9kZSBzZXR0aW5nIGZ1bmN0aW9uYWxpdGll cwo+ICsJICBmb3IgWGlsaW54IGRpc3BsYXkgZHJpdmVycy4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3hsbngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0veGxueC9NYWtlZmlsZQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYzYwYTI4MQo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC9NYWtlZmlsZQo+IEBAIC0wLDAgKzEs MiBAQAo+ICt4bG54X2RybS1vYmpzICs9IHhsbnhfY3J0Yy5vIHhsbnhfZHJ2Lm8geGxueF9mYi5v IHhsbnhfZ2VtLm8KPiArb2JqLSQoQ09ORklHX0RSTV9YTE5YKSArPSB4bG54X2RybS5vCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0Yy5jCj4gYi9kcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2NydGMuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLmRlODM5MDUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9jcnRjLmMKPiBAQCAtMCwwICsxLDE3NyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIGNydGMgZHJpdmVyCj4gKyAqCj4g KyAqICBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE4IFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiAg QXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiArICoKPiArICog VGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmli dXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgoKWW91IGNhbiBkcm9wIHRob3NlIHR3byBwYXJhZ3JhcGhzIGFzIHlv dSBub3cgaGF2ZSBhbiBTUERYIGxpY2Vuc2UgaGVhZGVyLgoKPiArICovCj4gKwo+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gKwo+ICsjaW5j bHVkZSAieGxueF9jcnRjLmgiCj4gKyNpbmNsdWRlICJ4bG54X2Rydi5oIgo+ICsKPiArLyoKPiAr ICogT3ZlcnZpZXcKPiArICogLS0tLS0tLS0KPiArICoKPiArICogVGhlIFhpbGlueCBDUlRDIGxh eWVyIGlzIHRvIGVuYWJsZSB0aGUgY3VzdG9tIGludGVyZmFjZSB0byBDUlRDIGRyaXZlcnMuCj4g KyAqIFRoZSBpbnRlcmZhY2UgaXMgdXNlZCBieSBYaWxpbnggRFJNIGRyaXZlciB3aGVyZSBpdCBu ZWVkcyBDUlRDCj4gKyAqIGZ1bmN0aW9uYWlsdHkuIENSVEMgZHJpdmVycyBzaG91bGQgYXR0YWNo IHRoZSBkZXNpcmVkIGNhbGxiYWNrcwoKcy9mdW5jdGlvbmFpbHR5L2Z1bmN0aW9uYWxpdHkvCgo+ ICsgKiB0byBzdHJ1Y3QgeGxueF9jcnRjIGFuZCByZWdpc3RlciB0aGUgeGxueF9jcnRjIHdpdGgg Y29ycmVjc3BvbmRpbmcKCnMvY29ycmVjc3BvbmRpbmcvY29ycmVzcG9uZGluZy8KCj4gKyAqIGRy bV9kZXZpY2UuIEl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIENSVEMgZHJpdmVycyByZWdpc3RlciBh bGwgY2FsbGJhY2tzCj4gKyAqIGV2ZW4gdGhvdWdoIG1hbnkgb2YgdGhlbSBhcmUgb3B0aW9uYWwu Cj4gKyAqIFRoZSBDUlRDIGhlbHBlciBzaW1wbHkgd2Fsa3MgdGhyb3VnaCB0aGUgcmVnaXN0ZXJl ZCBDUlRDIGRldmljZSwKPiArICogYW5kIGNhbGwgdGhlIGNhbGxiYWNrcy4KCnMvY2FsbC9jYWxs cy8KCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB4bG54X2NydGNfaGVscGVyIC0gWGls aW54IENSVEMgaGVscGVyCj4gKyAqIEB4bG54X2NydGNzOiBsaXN0IG9mIFhpbGlueCBDUlRDIGRl dmljZXMKPiArICogQGxvY2s6IGxvY2sgdG8gcHJvdGVjdCBAeGxueF9jcnRjcwo+ICsgKiBAZHJt OiBiYWNrIHBvaW50ZXIgdG8gRFJNIGNvcmUKPiArICovCj4gK3N0cnVjdCB4bG54X2NydGNfaGVs cGVyIHsKPiArCXN0cnVjdCBsaXN0X2hlYWQgeGxueF9jcnRjczsKPiArCXN0cnVjdCBtdXRleCBs b2NrOyAvKiBsb2NrIGZvciBAeGxueF9jcnRjcyAqLwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRy bTsKPiArfTsKPiArCj4gKyNkZWZpbmUgWExOWF9DUlRDX01BWF9IRUlHSFRfV0lEVEgJVUlOVF9N QVgKPiArCj4gK3Vuc2lnbmVkIGludCB4bG54X2NydGNfaGVscGVyX2dldF9hbGlnbihzdHJ1Y3Qg eGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQoKV291bGRuJ3QgeGxueF9jcnRjX2hlbHBlcl9nZXRf YWxpZ25tZW50KCkgYmUgY2xlYXJlciA/ICdhbGlnbicgc291bmRzIGxpa2UgYSAKdmVyYi4KCj4g K3sKPiArCXN0cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gKwl1bnNpZ25lZCBpbnQgYWxpZ24gPSAx LCB0bXA7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmaGVscGVyLT54bG54X2Ny dGNzLCBsaXN0KSB7CgpZb3UgZG9jdW1lbnQgYWJvdmUgdGhhdCB4bG54X2NydGNzIGlzIHByb3Rl Y3RlZCBieSB0aGUgbG9jayBtdXRleCwgYnV0IHlvdSAKZG9uJ3QgdGFrZSBpdCBoZXJlLiBJc24n dCB0aGF0IGFuIGlzc3VlID8KCj4gKwkJaWYgKGNydGMtPmdldF9hbGlnbikgewoKWW91IGNhbiBk ZWNsYXJlIHRoZSB0bXAgdmFyaWFibGUgaGVyZS4gQW5kICd0bXAnIGlzIHVzdWFsbHkgZnJvd25l ZCB1cG9uIGFzIGEgCnZhcmlhYmxlIG5hbWUuIE9uZSBvcHRpb24gd291bGQgYmUgdG8gd3JpdGUg aXQgYWxsIGluIG9uZSBsaW5lCgoJCQlhbGlnbiA9IEFMSUdOKGFsaWduLCBjcnRjLT5nZXRfYWxp Z24oY3J0YykpOwoKPiArCQkJdG1wID0gY3J0Yy0+Z2V0X2FsaWduKGNydGMpOwo+ICsJCQlhbGln biA9IEFMSUdOKGFsaWduLCB0bXApOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gYWxpZ247 Cj4gK30KPiArCj4gK3U2NCB4bG54X2NydGNfaGVscGVyX2dldF9kbWFfbWFzayhzdHJ1Y3QgeGxu eF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ ICsJdTY0IG1hc2sgPSBETUFfQklUX01BU0soc2l6ZW9mKGRtYV9hZGRyX3QpICogOCksIHRtcDsK PiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxp c3QpIHsKPiArCQlpZiAoY3J0Yy0+Z2V0X2RtYV9tYXNrKSB7Cj4gKwkJCXRtcCA9IGNydGMtPmdl dF9kbWFfbWFzayhjcnRjKTsKPiArCQkJbWFzayA9IG1pbihtYXNrLCB0bXApOwoKU2FtZSBjb21t ZW50cyBoZXJlLgoKQXMgdGhlIERNQSBtYXNrIGlzIGEgYml0bWFzayBvZiB0aGUgYml0cyB0aGF0 IGNhbiBiZSBkcml2ZW4gYnkgdGhlIERNQSBlbmdpbmUsIAp3b3VsZG4ndCBhIGxvZ2ljIGFuZCBi ZSBtb3JlIGFwcHJvcHJpYXRlIHRoYW4gYSBtaW4oKSA/CgoJCQltYXNrICY9IGNydGMtPmdldF9k bWFfbWFzayhjcnRjKTsKCj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBtYXNrOwo+ICt9Cj4g Kwo+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X3dpZHRoKHN0cnVjdCB4bG54X2NydGNf aGVscGVyICpoZWxwZXIpCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gKwl1bnNp Z25lZCBpbnQgd2lkdGggPSBYTE5YX0NSVENfTUFYX0hFSUdIVF9XSURUSCwgdG1wOwo+ICsKPiAr CWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ ICsJCWlmIChjcnRjLT5nZXRfbWF4X3dpZHRoKSB7Cj4gKwkJCXRtcCA9IGNydGMtPmdldF9tYXhf d2lkdGgoY3J0Yyk7Cj4gKwkJCXdpZHRoID0gbWluKHdpZHRoLCB0bXApOwoKU2FtZSBjb21tZW50 cyByZWdhcmRpbmcgdGhlIHRtcCB2YXJpYWJsZSBhbmQgdGhlIGxpc3QgbG9ja2luZyBpc3N1ZS4K Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiB3aWR0aDsKPiArfQo+ICsKPiAraW50IHhsbnhf Y3J0Y19oZWxwZXJfZ2V0X21heF9oZWlnaHQoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBl cikKPiArewo+ICsJc3RydWN0IHhsbnhfY3J0YyAqY3J0YzsKPiArCXVuc2lnbmVkIGludCBoZWln aHQgPSBYTE5YX0NSVENfTUFYX0hFSUdIVF9XSURUSCwgdG1wOwo+ICsKPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ICsJCWlmIChjcnRj LT5nZXRfbWF4X2hlaWdodCkgewo+ICsJCQl0bXAgPSBjcnRjLT5nZXRfbWF4X2hlaWdodChjcnRj KTsKPiArCQkJaGVpZ2h0ID0gbWluKGhlaWdodCwgdG1wKTsKClNhbWUgY29tbWVudHMgcmVnYXJk aW5nIHRoZSB0bXAgdmFyaWFibGUgYW5kIHRoZSBsaXN0IGxvY2tpbmcgaXNzdWUuCgo+ICsJCX0K PiArCX0KPiArCj4gKwlyZXR1cm4gaGVpZ2h0Owo+ICt9Cj4gKwo+ICt1aW50MzJfdCB4bG54X2Ny dGNfaGVscGVyX2dldF9mb3JtYXQoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKCllv dSBjYW4gdXNlIHRoZSB1MzIgdHlwZSB3aXRoaW4gdGhlIGtlcm5lbC4KCj4gK3sKPiArCXN0cnVj dCB4bG54X2NydGMgKmNydGM7Cj4gKwl1MzIgZm9ybWF0ID0gMCwgdG1wOwo+ICsKPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ICsJCWlm IChjcnRjLT5nZXRfZm9ybWF0KSB7Cj4gKwkJCXRtcCA9IGNydGMtPmdldF9mb3JtYXQoY3J0Yyk7 Cj4gKwkJCWlmIChmb3JtYXQgJiYgZm9ybWF0ICE9IHRtcCkKPiArCQkJCXJldHVybiAwOwo+ICsJ CQlmb3JtYXQgPSB0bXA7CgpTYW1lIGNvbW1lbnRzIHJlZ2FyZGluZyB0aGUgdG1wIHZhcmlhYmxl IGFuZCB0aGUgbGlzdCBsb2NraW5nIGlzc3VlLgoKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IGZvcm1hdDsKCkRvZXMgdGhpcyBtZWFuIHRoYXQgeW91ciBDUlRDcyBzdXBwb3J0IGEgc2luZ2xl IGZvcm1hdCBlYWNoIG9ubHkgPwoKPiArfQo+ICsKPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIg KnhsbnhfY3J0Y19oZWxwZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlz dHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyOwo+ICsKPiArCWhlbHBlciA9IGRldm1fa3ph bGxvYyhkcm0tPmRldiwgc2l6ZW9mKCpoZWxwZXIpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghaGVs cGVyKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwoKRG8geW91IG5lZWQgdG8gYWxsb2Nh dGUgdGhlIHhsbnhfY3J0Y19oZWxwZXIgc3RydWN0dXJlIHNlcGFyYXRlbHkgZnJvbSB0aGUgCnhs bnhfZHJtIHN0cnVjdHVyZSwgY291bGRuJ3QgeW91IGVtYmVkIGl0IGluc3RlYWQgb2Ygc3Rvcmlu ZyBhIHBvaW50ZXIgPyBZZXMsIAp0aGF0IHdvdWxkIG1lYW4gZXhwb3NpbmcgdGhlIHN0cnVjdHVy ZSBpbiBhIGhlYWRlciBmaWxlLCBidXQgSSBkb24ndCB0aGluayBpdCAKd291bGQgYmUgbXVjaCBv ZiBhIHByb2JsZW0uCgo+ICsJSU5JVF9MSVNUX0hFQUQoJmhlbHBlci0+eGxueF9jcnRjcyk7Cj4g KwltdXRleF9pbml0KCZoZWxwZXItPmxvY2spOwo+ICsJaGVscGVyLT5kcm0gPSBkcm07Cj4gKwo+ ICsJcmV0dXJuIGhlbHBlcjsKPiArfQo+ICsKPiArdm9pZCB4bG54X2NydGNfaGVscGVyX2Zpbmko c3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiArCQkJICAgc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIg KmhlbHBlcikKPiArewo+ICsJaWYgKFdBUk5fT04oaGVscGVyLT5kcm0gIT0gZHJtKSkKPiArCQly ZXR1cm47CgpVbmxlc3MgSSdtIG1pc3Rha2VuIHRoZSBoZWxwZXItPmRybSBmaWVsZCBpcyBvbmx5 IHVzZWQgaGVyZSwgYW5kIEkgZG9uJ3Qgc2VlIApob3cgdGhpcyBjb25kaXRpb24gY291bGQgYmUg dHJ1ZS4gSSdkIGRyb3AgYm90aCB0aGUgY29uZGl0aW9uIGFuZCB0aGUgZmllbGQuCgo+ICsJaWYg KFdBUk5fT04oIWxpc3RfZW1wdHkoJmhlbHBlci0+eGxueF9jcnRjcykpKQo+ICsJCXJldHVybjsK CkNhbiB0aGlzIGhhcHBlbiA/Cgo+ICsJbXV0ZXhfZGVzdHJveSgmaGVscGVyLT5sb2NrKTsKPiAr CWRldm1fa2ZyZWUoZHJtLT5kZXYsIGhlbHBlcik7CgpJZiB5b3UgZnJlZSB0aGUgbWVtb3J5IGV4 cGxpY2l0bHkgeW91IHNob3VsZG4ndCB1c2UgZGV2bV9remFsbG9jKCkgaW4gdGhlIApmaXJzdCBw bGFjZSwgeW91IGNhbiB1c2UgdGhlIHBsYWluIGt6YWxsb2MoKSBmdW5jdGlvbiBpbnN0ZWFkLgoK PiArfQo+ICsKPiArdm9pZCB4bG54X2NydGNfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IHhsbnhfY3J0Y19oZWxw ZXIgKmhlbHBlciA9IHhsbnhfZ2V0X2NydGNfaGVscGVyKGRybSk7Cj4gKwo+ICsJbXV0ZXhfbG9j aygmaGVscGVyLT5sb2NrKTsKPiArCWxpc3RfYWRkX3RhaWwoJmNydGMtPmxpc3QsICZoZWxwZXIt PnhsbnhfY3J0Y3MpOwo+ICsJbXV0ZXhfdW5sb2NrKCZoZWxwZXItPmxvY2spOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0xfR1BMKHhsbnhfY3J0Y19yZWdpc3Rlcik7Cj4gKwo+ICt2b2lkIHhsbnhfY3J0 Y191bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB4bG54X2NydGMgKmNy dGMpCj4gK3sKPiArCXN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIgPSB4bG54X2dldF9j cnRjX2hlbHBlcihkcm0pOwo+ICsKPiArCW11dGV4X2xvY2soJmhlbHBlci0+bG9jayk7Cj4gKwls aXN0X2RlbCgmY3J0Yy0+bGlzdCk7Cj4gKwltdXRleF91bmxvY2soJmhlbHBlci0+bG9jayk7Cj4g K30KPiArRVhQT1JUX1NZTUJPTF9HUEwoeGxueF9jcnRjX3VucmVnaXN0ZXIpOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuaAo+IGIvZHJpdmVycy9ncHUvZHJt L3hsbngveGxueF9jcnRjLmggbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5i ZmY1ZTNkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhf Y3J0Yy5oCj4gQEAgLTAsMCArMSw3MCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIGNydGMgaGVhZGVyCj4gKyAqCj4gKyAqICBD b3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE4IFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0aG9y OiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiArICoKPiArICogVGhpcyBz b2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYwo+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwg YW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgoKWW91IGNhbiBkcm9wIHRoZXNlIHR3byBwYXJhZ3JhcGhzIGhlcmUgdG9vLgoK PiArICovCj4gKwo+ICsjaWZuZGVmIF9YTE5YX0NSVENfSF8KPiArI2RlZmluZSBfWExOWF9DUlRD X0hfCj4gKwo+ICsvKioKPiArICogc3RydWN0IHhsbnhfY3J0YyAtIFhpbGlueCBDUlRDIGRldmlj ZQo+ICsgKiBAY3J0YzogRFJNIENSVEMgZGV2aWNlCj4gKyAqIEBsaXN0OiBsaXN0IG5vZGUgZm9y IFhpbGlueCBDUlRDIGRldmljZSBsaXN0Cj4gKyAqIEBnZXRfYWxpZ246IEdldCB0aGUgYWxpZ25t ZW50IHJlcXVpcmVtZW50IG9mIENSVEMgZGV2aWNlCj4gKyAqIEBnZXRfZG1hX21hc2s6IEdldCB0 aGUgZG1hIG1hc2sgb2YgQ1JUQyBkZXZpY2UKPiArICogQGdldF9tYXhfd2lkdGg6IEdldCB0aGUg bWF4aW11bSBzdXBwb3J0ZWQgd2lkdGgKPiArICogQGdldF9tYXhfaGVpZ2h0OiBHZXQgdGhlIG1h eGltdW0gc3VwcG9ydGVkIGhlaWdodAo+ICsgKiBAZ2V0X2Zvcm1hdDogR2V0IHRoZSBjdXJyZW50 IGZvcm1hdCBvZiBDUlRDIGRldmljZQo+ICsgKi8KPiArc3RydWN0IHhsbnhfY3J0YyB7Cj4gKwlz dHJ1Y3QgZHJtX2NydGMgY3J0YzsKPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArCXVuc2ln bmVkIGludCAoKmdldF9hbGlnbikoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwl1NjQgKCpn ZXRfZG1hX21hc2spKHN0cnVjdCB4bG54X2NydGMgKmNydGMpOwo+ICsJaW50ICgqZ2V0X21heF93 aWR0aCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwlpbnQgKCpnZXRfbWF4X2hlaWdodCko c3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gKwl1aW50MzJfdCAoKmdldF9mb3JtYXQpKHN0cnVj dCB4bG54X2NydGMgKmNydGMpOwoKUGxlYXNlIG1vdmUgYWxsIGZ1bmN0aW9uIHBvaW50ZXJzIHRv IGEgc2VwYXJhdGUgb3BzIHN0cnVjdHVyZSB0aGF0IGNhbiBiZSAKZGVjbGFyZWQgY29uc3QuIE5v bi1jb25zdCBmdW5jdGlvbiBwb2ludGVycyBtYWtlIGl0IGVhc2llciB0byBleHBsb2l0IHRoZSAK a2VybmVsIGlmIGEgYnVnIGVuZHMgdXAgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIG92ZXJyaWRlIHRo ZSB2YWx1ZSBvZiB0aGUgCnBvaW50ZXJzLiBUaGV5IGFyZSB0aHVzIGNvbnNpZGVyZWQgYXMgYSBz ZWN1cml0eSBpc3N1ZS4KCnN0cnVjdCB4bG54X2NydGNfb3BzIHsKCXU2NCAoKmdldF9kbWFfbWFz aykoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7CglpbnQgKCpnZXRfbWF4X3dpZHRoKShzdHJ1Y3Qg eGxueF9jcnRjICpjcnRjKTsKCWludCAoKmdldF9tYXhfaGVpZ2h0KShzdHJ1Y3QgeGxueF9jcnRj ICpjcnRjKTsKCXVpbnQzMl90ICgqZ2V0X2Zvcm1hdCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7 Cn07CgpzdHJ1Y3QgeGxueF9jcnRjIHsKCXN0cnVjdCBkcm1fY3J0YyBjcnRjOwoJc3RydWN0IGxp c3RfaGVhZCBsaXN0OwoJY29uc3Qgc3RydWN0IHhsbnhfY3J0Y19vcHMgKm9wczsKfTsKCj4gK307 Cj4gKwo+ICsvKgo+ICsgKiBIZWxwZXIgZnVuY3Rpb25zOiB1c2VkIHdpdGhpbiBYbG54IERSTQo+ ICsgKi8KPiArCj4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyOwo+ICsKPiArdW5zaWduZWQgaW50 IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxw ZXIpOwo+ICt1NjQgeGxueF9jcnRjX2hlbHBlcl9nZXRfZG1hX21hc2soc3RydWN0IHhsbnhfY3J0 Y19oZWxwZXIgKmhlbHBlcik7Cj4gK2ludCB4bG54X2NydGNfaGVscGVyX2dldF9tYXhfd2lkdGgo c3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gK2ludCB4bG54X2NydGNfaGVscGVy X2dldF9tYXhfaGVpZ2h0KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ICt1aW50 MzJfdCB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIg KmhlbHBlcik7Cj4gKwo+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9jcnRjX2hlbHBl cl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICt2b2lkIHhsbnhfY3J0Y19oZWxwZXJf ZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsJCQkgICBzdHJ1Y3QgeGxueF9jcnRjX2hl bHBlciAqaGVscGVyKTsKPiArCj4gKy8qCj4gKyAqIENSVEMgcmVnaXN0cmF0aW9uOiB1c2VkIGJ5 IG90aGVyIHN1Yi1kcml2ZXIgbW9kdWxlcwo+ICsgKi8KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHhsbnhfY3J0YyAqdG9feGxueF9jcnRjKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1Y3QgeGxueF9jcnRjLCBjcnRjKTsKPiAr fQoKSSdkIGRlY2xhcmUgdGhpcyBmdW5jdGlvbiByaWdodCBhZnRlciB0aGUgeGxueF9jcnRjIHN0 cnVjdHVyZSwgSSBmaW5kIGl0IG1vcmUgCmV4cGxpY2l0IGlmIHRoZSBzdHJ1Y3R1cmUgYW5kIHRo ZSBjYXN0IGhlbHBlciBhcmUgZ3JvdXBlZCB0b2dldGhlci4KCj4gK3ZvaWQgeGxueF9jcnRjX3Jl Z2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB4bG54X2NydGMgKmNydGMpOwo+ ICt2b2lkIHhsbnhfY3J0Y191bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVj dCB4bG54X2NydGMgKmNydGMpOwo+ICsKPiArI2VuZGlmIC8qIF9YTE5YX0NSVENfSF8gKi8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuYwo+IGIvZHJpdmVycy9n cHUvZHJtL3hsbngveGxueF9kcnYuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLjhmMGUzNTcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9kcnYuYwo+IEBAIC0wLDAgKzEsNTAxIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIFhpbGlueCBEUk0gS01TIERyaXZlcgo+ICsgKgo+ICsg KiAgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1 dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqCj4gKyAqIFRo aXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKPiArICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0 ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KClNhbWUgY29tbWVudCBhcyBhYm92ZSBmb3IgdGhvc2UgdHdvIHBhcmFn cmFwaHMuCgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9m Yl9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5o Pgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFw aC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9yZXNlcnZhdGlvbi5oPgoKWW91IGRvbid0IHNlZW0gdG8gdXNlIHJlc2VydmF0aW9uIG9i amVjdHMsIGRvIHlvdSBuZWVkIHRoaXMgaGVhZGVyID8KCj4gKyNpbmNsdWRlICJ4bG54X2NydGMu aCIKPiArI2luY2x1ZGUgInhsbnhfZmIuaCIKPiArI2luY2x1ZGUgInhsbnhfZ2VtLmgiCj4gKwo+ ICsjZGVmaW5lIERSSVZFUl9OQU1FCSJ4bG54Igo+ICsjZGVmaW5lIERSSVZFUl9ERVNDCSJYaWxp bnggRFJNIEtNUyBEcml2ZXIiCj4gKyNkZWZpbmUgRFJJVkVSX0RBVEUJIjIwMTMwNTA5IgoKQW5k IHRoaXMgc2hvd3MgaG93IHVzZWxlc3MgYSBkYXRlIGZpZWxkIGlzIGluIHN1Y2ggYSB1c2Vyc3Bh Y2UgQVBJIDotKQoKPiArI2RlZmluZSBEUklWRVJfTUFKT1IJMQo+ICsjZGVmaW5lIERSSVZFUl9N SU5PUgkwCj4gKwo+ICtzdGF0aWMgdWludCB4bG54X2ZiZGV2X3ZyZXMgPSAyOwoKcy91aW50L3Vu c2lnbmVkIGludC8KCj4gK21vZHVsZV9wYXJhbV9uYW1lZChmYmRldl92cmVzLCB4bG54X2ZiZGV2 X3ZyZXMsIHVpbnQsIDA0NDQpOwo+ICtNT0RVTEVfUEFSTV9ERVNDKGZiZGV2X3ZyZXMsCj4gKwkJ ICJmYmRldiB2aXJ0dWFsIHJlc29sdXRpb24gbXVsdGlwbGllciBmb3IgZmIgKGRlZmF1bHQ6IDIp Iik7CgpUaGVyZSdzIGEgc2ltaWxhciBtZWNoYW5pc20gaW4gdGhlIGtlcm5lbCBhbHJlYWR5IGlu IHRoZSBmb3JtIG9mIApDT05GSUdfRFJNX0ZCREVWX09WRVJBTExPQyBhbmQgdGhlIGRybV9mYmRl dl9vdmVyYWxsb2MgbW9kdWxlIHBhcmFtZXRlci4gCkNvdWxkbid0IHlvdSB1c2UgdGhhdCBpbnN0 ZWFkIG9mIGltcGxlbWVudGluZyBhIGN1c3RvbSBvbmUgPwoKPiArLyoqCj4gKyAqIHN0cnVjdCB4 bG54X2RybSAtIFhpbGlueCBEUk0gcHJpdmF0ZSBkYXRhCj4gKyAqIEBkcm06IERSTSBjb3JlCgpz L2NvcmUvZGV2aWNlLwoKPiArICogQGNydGM6IFhpbGlueCBEUk0gQ1JUQyBoZWxwZXIKCkknbSB0 ZW1wdGVkIHRvIHJlbmFtZSB0aGlzIGZpZWxkIHRvIGNydGNzLCBvdGhlcndpc2Ugd2hlbiByZWFk aW5nIHRoZSBjb2RlIGl0IApsb29rcyBsaWtlIGl0IHBvaW50cyB0byBhIHNpbmdsZSBDUlRDLgoK PiArICogQGZiOiBEUk0gZmIgaGVscGVyCj4gKyAqIEBtYXN0ZXI6IGxvZ2ljYWwgbWFzdGVyIGRl dmljZSBmb3IgcGlwZWxpbmUKPiArICogQHN1c3BlbmRfc3RhdGU6IGF0b21pYyBzdGF0ZSBmb3Ig c3VzcGVuZCAvIHJlc3VtZQo+ICsgKi8KPiArc3RydWN0IHhsbnhfZHJtIHsKPiArCXN0cnVjdCBk cm1fZGV2aWNlICpkcm07Cj4gKwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqY3J0YzsKPiArCXN0 cnVjdCBkcm1fZmJfaGVscGVyICpmYjsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hc3Rl cjsKCkknZCBzdG9yZSB0aGlzIGFzIGEgc3RydWN0IGRldmljZSBpbnN0ZWFkIGFzIHlvdSBuZXZl ciBtYWtlIHVzZSBvZiB0aGUgCnBsYXRmb3JtIGRldmljZSBpdHNlbGYgKHRoZSBvbmx5IGxvY2F0 aW9uIHdoZXJlIHlvdSB1c2UgdGhpcyBmaWVsZCBpcyB0byAKYWNjZXNzIG1hc3Rlci0+ZGV2KS4K Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3VzcGVuZF9zdGF0ZTsKPiArfTsKPiArCj4g Ky8qKgo+ICsgKiB4bG54X2dldF9jcnRjX2hlbHBlciAtIFJldHVybiB0aGUgY3J0YyBoZWxwZXIg aW5zdGFuY2UKPiArICogQGRybTogRFJNIGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm46IHRoZSBj cnRjIGhlbHBlciBpbnN0YW5jZQo+ICsgKi8KPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKnhs bnhfZ2V0X2NydGNfaGVscGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVj dCB4bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCXJldHVybiB4 bG54X2RybS0+Y3J0YzsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZ2V0X2FsaWduIC0gUmV0 dXJuIHRoZSBhbGlnbiByZXF1aXJlbWVudCB0aHJvdWdoIENSVEMgaGVscGVyCj4gKyAqIEBkcm06 IERSTSBkZXZpY2UKPiArICoKPiArICogUmV0dXJuOiB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50 Cj4gKyAqLwo+ICt1bnNpZ25lZCBpbnQgeGxueF9nZXRfYWxpZ24oc3RydWN0IGRybV9kZXZpY2Ug KmRybSkKPiArewo+ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZh dGU7Cj4gKwo+ICsJcmV0dXJuIHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHhsbnhfZHJtLT5j cnRjKTsKPiArfQoKSSdtIHRlbXB0ZWQgdG8gZXhwb3NlIHRoZSB4bG54X2RybSBzdHJ1Y3R1cmUg aW4gYSBoZWFkZXIgYW5kIG1ha2UgdGhlc2UgdHdvIApoZWxwZXIgZnVuY3Rpb25zIGlubGluZSwg YnV0IHRoYXQncyB1cCB0byB5b3UuCgo+ICsvKioKPiArICogeGxueF9nZXRfZm9ybWF0IC0gUmV0 dXJuIHRoZSBjdXJyZW50IGZvcm1hdCBvZiBDUlRDCj4gKyAqIEBkcm06IERSTSBkZXZpY2UKPiAr ICoKPiArICogUmV0dXJuOiB0aGUgY3VycmVudCBDUlRDIGZvcm1hdAo+ICsgKi8KPiArdWludDMy X3QgeGxueF9nZXRfZm9ybWF0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVj dCB4bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCXJldHVybiB4 bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoeGxueF9kcm0tPmNydGMpOwo+ICt9CgpBcyBmYXIg YXMgSSBjYW4gdGVsbCB0aGlzIGZ1bmN0aW9uIGlzIG5ldmVyIHVzZWQuCgo+ICtzdGF0aWMgdm9p ZCB4bG54X291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJ aWYgKHhsbnhfZHJtLT5mYikKPiArCQlkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoeGxueF9k cm0tPmZiKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdf ZnVuY3MgeGxueF9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiArCS5mYl9jcmVhdGUJCT0geGxueF9m Yl9jcmVhdGUsCj4gKwkub3V0cHV0X3BvbGxfY2hhbmdlZAk9IHhsbnhfb3V0cHV0X3BvbGxfY2hh bmdlZCwKPiArCS5hdG9taWNfY2hlY2sJCT0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gKwku YXRvbWljX2NvbW1pdAkJPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCj4gK307Cj4gKwo+ICtz dGF0aWMgdm9pZCB4bG54X21vZGVfY29uZmlnX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkK PiArewo+ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4g KwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqY3J0YyA9IHhsbnhfZHJtLT5jcnRjOwo+ICsKPiAr CWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gMDsKPiArCWRybS0+bW9kZV9jb25maWcubWlu X2hlaWdodCA9IDA7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IHhsbnhfY3J0Y19o ZWxwZXJfZ2V0X21heF93aWR0aChjcnRjKTsKPiArCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdo dCA9IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X21heF9oZWlnaHQoY3J0Yyk7CgpUaGlzIGlzIGludGVy ZXN0aW5nLiBZb3VyIHR3byBoZWxwZXIgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIHRoZSBtaW5pbXVt IG9mIHRoZSAKc2l6ZXMgc3VwcG9ydGVkIGJ5IHRoZSBDUlRDcywgZW5zdXJpbmcgdGhhdCB1c2Vy c3BhY2Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhIApEUk0gZGV2aWNlIHRoYXQgY2FuJ3QgZXhj ZWVkIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIENSVENzLiBIb3dldmVyLCB0aGF0IHdpbGwgCmFs c28gYXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBkZXZpY2UsIGFzIGZyb20gYSBLTVMgcG9pbnQgb2Yg dmlldyB0aGVyZSdzIG5vIAppc3N1ZSB3aXRoIHNldHRpbmcgZGlmZmVyZW50IHJlc29sdXRpb25z IG9uIGRpZmZlcmVudCBDUlRDcy4KClRoZSBtb2RlX2NvbmZpZyBtYXhfd2lkdGggYW5kIG1heF9o ZWlnaHQgdmFsdWVzIGFyZSB1c2VkIGZvciBhIGZldyBkaWZmZXJlbnQgCnB1cnBvc2VzLiBPbmUg b2YgdGhlbSBpcyB0byByZWplY3QgZnJhbWVidWZmZXIgY3JlYXRpb24gd2l0aCByZXNvbHV0aW9u cyB0aGF0IAphcmUgdG9vIGxhcmdlIGZvciB0aGUgaGFyZHdhcmUuIEFub3RoZXIgb25lIGlzIHRv IHJlamVjdCBtb2RlcyBsYXJnZXIgdGhhbiAKd2hhdCB0aGUgaGFyZHdhcmUgc3VwcG9ydHMuIEEg dGhpcmQgb25lIGlzIHRvIGV4cG9zZSB0aG9zZSB2YWx1ZXMgdG8gCnVzZXJzcGFjZS4KCkRhbmll bCwgaG93IHNob3VsZCB0aGlzIGJlIGhhbmRsZWQgd2hlbiBDUlRDcyBkb24ndCBoYXZlIHRoZSBz YW1lIGNhcGFiaWxpdGllcyAKPwoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeGxueF9sYXN0Y2xv c2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IHhsbnhfZHJtICp4bG54 X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYgKHhsbnhfZHJtLT5mYikKPiArCQlk cm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxvY2tlZCh4bG54X2RybS0+ZmIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4bG54X2ZvcHMg PSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkub3BlbgkJPSBkcm1fb3BlbiwKPiAr CS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsCj4gKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1faW9jdGws Cj4gKwkubW1hcAkJPSBkcm1fZ2VtX2NtYV9tbWFwLAo+ICsJLnBvbGwJCT0gZHJtX3BvbGwsCj4g KwkucmVhZAkJPSBkcm1fcmVhZCwKPiArI2lmZGVmIENPTkZJR19DT01QQVQKPiArCS5jb21wYXRf aW9jdGwJPSBkcm1fY29tcGF0X2lvY3RsLAo+ICsjZW5kaWYKPiArCS5sbHNlZWsJCT0gbm9vcF9s bHNlZWssCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgeGxueF9kcm1fZHJp dmVyID0gewo+ICsJLmRyaXZlcl9mZWF0dXJlcwkJPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9H RU0gfAo+ICsJCQkJCSAgRFJJVkVSX0FUT01JQyB8IERSSVZFUl9QUklNRSwKPiArCS5sYXN0Y2xv c2UJCQk9IHhsbnhfbGFzdGNsb3NlLAo+ICsKPiArCS5wcmltZV9oYW5kbGVfdG9fZmQJCT0gZHJt X2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCj4gKwkucHJpbWVfZmRfdG9faGFuZGxlCQk9IGRybV9n ZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ICsJLmdlbV9wcmltZV9leHBvcnQJCT0gZHJtX2dlbV9w cmltZV9leHBvcnQsCj4gKwkuZ2VtX3ByaW1lX2ltcG9ydAkJPSBkcm1fZ2VtX3ByaW1lX2ltcG9y dCwKPiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCQk9IGRybV9nZW1fY21hX3ByaW1lX2dldF9z Z190YWJsZSwKPiArCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFfcHJp bWVfaW1wb3J0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV92bWFwCQkJPSBkcm1fZ2VtX2NtYV9w cmltZV92bWFwLAo+ICsJLmdlbV9wcmltZV92dW5tYXAJCT0gZHJtX2dlbV9jbWFfcHJpbWVfdnVu bWFwLAo+ICsJLmdlbV9wcmltZV9tbWFwCQkJPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAo+ICsJ LmdlbV9mcmVlX29iamVjdAkJPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKPiArCS5nZW1fdm1f b3BzCQkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAo+ICsJLmR1bWJfY3JlYXRlCQkJPSB4bG54X2dl bV9jbWFfZHVtYl9jcmVhdGUsCj4gKwkuZHVtYl9kZXN0cm95CQkJPSBkcm1fZ2VtX2R1bWJfZGVz dHJveSwKPiArCj4gKwkuZm9wcwkJCQk9ICZ4bG54X2ZvcHMsCj4gKwo+ICsJLm5hbWUJCQkJPSBE UklWRVJfTkFNRSwKPiArCS5kZXNjCQkJCT0gRFJJVkVSX0RFU0MsCj4gKwkuZGF0ZQkJCQk9IERS SVZFUl9EQVRFLAo+ICsJLm1ham9yCQkJCT0gRFJJVkVSX01BSk9SLAo+ICsJLm1pbm9yCQkJCT0g RFJJVkVSX01JTk9SLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB4bG54X2JpbmQoc3RydWN0IGRl dmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtOwo+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRybTsKPiArCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm87 Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYXN0ZXIgPSB0b19wbGF0Zm9ybV9kZXZpY2Uo ZGV2KTsKClRoZXJlJ3Mgbm8gbmVlZCB0byBjYXN0IHRvIGEgcGxhdGZvcm1fZGV2aWNlLCBzZWUg YmVsb3cuCgo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2Rl dmljZShkZXYtPnBhcmVudCk7CgpUaGVyZSdzIG5vIG5lZWQgZm9yIGEgY2FzdCBlaXRoZXIsIGp1 c3QgcmVwbGFjZSAmcGRldi0+ZGV2IHdpdGggZGV2LT5wYXJlbnQgCnRocm91Z2hvdXQgdGhlIGZ1 bmN0aW9uLgoKPiArCWludCByZXQ7Cj4gKwl1MzIgZm9ybWF0Owo+ICsKPiArCWRybSA9IGRybV9k ZXZfYWxsb2MoJnhsbnhfZHJtX2RyaXZlciwgJnBkZXYtPmRldik7Cj4gKwlpZiAoSVNfRVJSKGRy bSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoZHJtKTsKCllvdSBjYW4gYWxzbyBlbWJlZCBzdHJ1Y3Qg ZHJtX2RldmljZSBpbiBzdHJ1Y3QgeGxueF9kcm0gaW5zdGVhZCBvZiB1c2luZyBhIApwb2ludGVy LCBhbmQgcmVwbGFjZSBkcm1fZGV2X2FsbG9jKCkgd2l0aCBkcm1fZGV2X2luaXQoKS4KCj4gKwl4 bG54X2RybSA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCp4bG54X2RybSksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCF4bG54X2RybSkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290 byBlcnJfZHJtOwo+ICsJfQo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRybSk7Cj4gKwlk cm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJnhsbnhfbW9kZV9jb25maWdfZnVuY3M7Cj4gKwo+ICsJ cmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgMSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdmJsYW5rXG4iKTsKPiArCQlnb3Rv IGVycl94bG54X2RybTsKPiArCX0KPiArCj4gKwlkcm0tPmlycV9lbmFibGVkID0gMTsKPiArCWRy bS0+ZGV2X3ByaXZhdGUgPSB4bG54X2RybTsKPiArCXhsbnhfZHJtLT5kcm0gPSBkcm07Cj4gKwl4 bG54X2RybS0+bWFzdGVyID0gbWFzdGVyOwoKWW91IGNhbiBzdG9yZSBkZXYgaW4gdGhlIG1hc3Rl ciBmaWVsZC4KCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKPiArCXBsYXRmb3Jt X3NldF9kcnZkYXRhKG1hc3RlciwgeGxueF9kcm0pOwoKVXNlIGRldmljZV9zZXRfZHJ2ZGF0YShk ZXYpLgoKPiArCj4gKwl4bG54X2RybS0+Y3J0YyA9IHhsbnhfY3J0Y19oZWxwZXJfaW5pdChkcm0p Owo+ICsJaWYgKElTX0VSUih4bG54X2RybS0+Y3J0YykpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHhs bnhfZHJtLT5jcnRjKTsKPiArCQlnb3RvIGVycl94bG54X2RybTsKPiArCX0KPiArCj4gKwlyZXQg PSBjb21wb25lbnRfYmluZF9hbGwoJm1hc3Rlci0+ZGV2LCBkcm0pOwoKVXNlIGRldiBkaXJlY3Rs eS4KCj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NydGM7Cj4gKwo+ICsJeGxueF9tb2RlX2Nv bmZpZ19pbml0KGRybSk7Cj4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKPiArCWRtYV9z ZXRfbWFzayhkcm0tPmRldiwgeGxueF9jcnRjX2hlbHBlcl9nZXRfZG1hX21hc2soeGxueF9kcm0t PmNydGMpKTsKPiArCj4gKwlmb3JtYXQgPSB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoeGxu eF9kcm0tPmNydGMpOwo+ICsJaW5mbyA9IGRybV9mb3JtYXRfaW5mbyhmb3JtYXQpOwo+ICsJaWYg KGluZm8gJiYgaW5mby0+ZGVwdGggJiYgaW5mby0+Y3BwWzBdKSB7Cj4gKwkJdW5zaWduZWQgaW50 IGFsaWduOwo+ICsKPiArCQlhbGlnbiA9IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHhsbnhf ZHJtLT5jcnRjKTsKPiArCQl4bG54X2RybS0+ZmIgPSB4bG54X2ZiX2luaXQoZHJtLCBpbmZvLT5j cHBbMF0gKiA4LCAxLCBhbGlnbiwKPiArCQkJCQkgICAgeGxueF9mYmRldl92cmVzKTsKPiArCQlp ZiAoSVNfRVJSKHhsbnhfZHJtLT5mYikpIHsKPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LAo+ICsJ CQkJImZhaWxlZCB0byBpbml0aWFsaXplIGRybSBmYlxuIik7Cj4gKwkJCXhsbnhfZHJtLT5mYiA9 IE5VTEw7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQkvKiBmYmRldiBlbXVsYXRpb24gaXMgb3B0 aW9uYWwgKi8KPiArCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmJkZXYgaXMgbm90IGluaXRpYWxp emVkXG4iKTsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4g KwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9mYjsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4g K2Vycl9mYjoKPiArCWlmICh4bG54X2RybS0+ZmIpCj4gKwkJeGxueF9mYl9maW5pKHhsbnhfZHJt LT5mYik7Cj4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKPiArZXJyX2Ny dGM6Cj4gKwl4bG54X2NydGNfaGVscGVyX2ZpbmkoZHJtLCB4bG54X2RybS0+Y3J0Yyk7Cj4gK2Vy cl94bG54X2RybToKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gK2Vycl9kcm06 Cj4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB4bG54X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB4 bG54X2RybSAqeGxueF9kcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSB4bG54X2RybS0+ZHJtOwo+ICsKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihk cm0pOwo+ICsJaWYgKHhsbnhfZHJtLT5mYikKPiArCQl4bG54X2ZiX2ZpbmkoeGxueF9kcm0tPmZi KTsKPiArCWNvbXBvbmVudF91bmJpbmRfYWxsKCZ4bG54X2RybS0+bWFzdGVyLT5kZXYsIGRybSk7 Cj4gKwl4bG54X2NydGNfaGVscGVyX2ZpbmkoZHJtLCB4bG54X2RybS0+Y3J0Yyk7Cj4gKwlkcm1f a21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRy bSk7Cj4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgeGxueF9tYXN0ZXJfb3BzID0gewo+ICsJLmJpbmQJPSB4 bG54X2JpbmQsCj4gKwkudW5iaW5kCT0geGxueF91bmJpbmQsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IHhsbnhfb2ZfY29tcG9uZW50X3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1hc3Rlcl9kZXYsCj4g KwkJCQkgICBpbnQgKCpjb21wYXJlX29mKShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKiksCj4gKwkJ CQkgICBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgKm1fb3BzKQoKQXMgdGhlcmUn cyBhIHNpbmdsZSB1c2VyIG9mIHRoaXMgZnVuY3Rpb24sIGRvIHlvdSBuZWVkIHRvIHBhc3MgY29t cGFyZV9vZiBhcyBhIApwYXJhbWV0ZXIgPyBDb3VsZG4ndCB5b3UgbW92ZSB4bG54X2NvbXBhcmVf b2YoKSBhYm92ZSBhbmQgdXNlIGl0IGRpcmVjdGx5ID8KCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9IG1hc3Rlcl9kZXYtPnBhcmVudDsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXAsICpw b3J0LCAqcmVtb3RlLCAqcGFyZW50Owo+ICsJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2gg PSBOVUxMOwo+ICsJaW50IGk7CgppIGlzIG5ldmVyIG5lZ2F0aXZlLCB5b3UgY2FuIG1ha2UgaXQg dW5zaWduZWQuCgo+ICsJaWYgKCFkZXYtPm9mX25vZGUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJY29tcG9uZW50X21hdGNoX2FkZChtYXN0ZXJfZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2Ys IGRldi0+b2Zfbm9kZSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgOyBpKyspIHsKPiArCQlwb3J0ID0g b2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJwb3J0cyIsIGkpOwoKSSBkb24ndCBzZWUg dGhlIHBvcnRzIHByb3BlcnR5IGRvY3VtZW50ZWQgaW4gdGhlIERUIGJpbmRpbmdzIGluIHBhdGNo IDIvNS4gSSAKYXNzdW1lIHRoYXQncyBiZWNhdXNlIGl0IGhhcyBiZWVuIHJlbW92ZWQgaW4gdjQg YXMgc3RhdGVkIGluIHRoZSBjaGFuZ2Vsb2cgOi0pIApZb3Ugc2hvdWxkbid0IG1ha2UgdXNlIG9m IGl0IHRoZW4uIEkndmUgc2tpcHBlZCByZXZpZXdpbmcgdGhlIGxvZ2ljIGZvciB0aGUgCnJlc3Qg b2YgdGhpcyBmdW5jdGlvbiBhcyBJIG5lZWQgdG8gc2VlIHRoZSBjb3JyZXNwb25kaW5nIERUIGJp bmRpbmdzLgoKPiArCQlpZiAoIXBvcnQpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlwYXJlbnQgPSBw b3J0LT5wYXJlbnQ7Cj4gKwkJaWYgKCFvZl9ub2RlX2NtcChwYXJlbnQtPm5hbWUsICJwb3J0cyIp KQo+ICsJCQlwYXJlbnQgPSBwYXJlbnQtPnBhcmVudDsKPiArCQlwYXJlbnQgPSBvZl9ub2RlX2dl dChwYXJlbnQpOwoKSSd2ZSByZWNlbnRseSBmb3VuZCBvdXQgdGhhdCBkZXJlZmVyZW5jaW5nIGEg ZGV2aWNlX25vZGUgcGFyZW50IGRpcmVjdGx5IGlzIApwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMu IFlvdSBzaG91bGQgdXNlIG9mX2dldF9wYXJlbnQoKSBpbnN0ZWFkIChvciAKb2ZfZ2V0X25leHRf cGFyZW50KCkgYXMgYXBwcm9wcmlhdGUgdG8gbWFrZSBkZXZpY2Vfbm9kZSByZWZlcmVuY2UgaGFu ZGxpbmcgCmVhc2llcikuCgo+ICsKPiArCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGFy ZW50KSkgewo+ICsJCQlvZl9ub2RlX3B1dChwYXJlbnQpOwo+ICsJCQlvZl9ub2RlX3B1dChwb3J0 KTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQljb21wb25lbnRfbWF0Y2hfYWRkKG1h c3Rlcl9kZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgcGFyZW50KTsKPiArCQlvZl9ub2RlX3B1dChw YXJlbnQpOwo+ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ICsJfQo+ICsKPiArCXBhcmVudCA9IGRl di0+b2Zfbm9kZTsKPiArCWZvciAoaSA9IDA7IDsgaSsrKSB7Cj4gKwkJcGFyZW50ID0gb2Zfbm9k ZV9nZXQocGFyZW50KTsKPiArCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGFyZW50KSkg ewo+ICsJCQlvZl9ub2RlX3B1dChwYXJlbnQpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ ICsJCWZvcl9lYWNoX2VuZHBvaW50X29mX25vZGUocGFyZW50LCBlcCkgewo+ICsJCQlyZW1vdGUg PSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwKTsKPiArCQkJaWYgKCFyZW1vdGUg fHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUocmVtb3RlKSB8fAo+ICsJCQkgICAgcmVtb3RlID09 IGRldi0+b2Zfbm9kZSkgewo+ICsJCQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKPiArCQkJCWNvbnRp bnVlOwo+ICsJCQl9IGVsc2UgaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHJlbW90ZS0+cGFy ZW50KSkgewo+ICsJCQkJZGV2X3dhcm4oZGV2LCAicGFyZW50IGRldiBvZiAlcyB1bmF2YWlsYWJs ZVxuIiwKPiArCQkJCQkgcmVtb3RlLT5mdWxsX25hbWUpOwo+ICsJCQkJb2Zfbm9kZV9wdXQocmVt b3RlKTsKPiArCQkJCWNvbnRpbnVlOwo+ICsJCQl9Cj4gKwkJCWNvbXBvbmVudF9tYXRjaF9hZGQo bWFzdGVyX2RldiwgJm1hdGNoLCBjb21wYXJlX29mLAo+ICsJCQkJCSAgICByZW1vdGUpOwo+ICsJ CQlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ICsJCX0KPiArCQlvZl9ub2RlX3B1dChwYXJlbnQpOwo+ ICsKPiArCQlwb3J0ID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJwb3J0cyIsIGkp Owo+ICsJCWlmICghcG9ydCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXBhcmVudCA9IHBvcnQtPnBh cmVudDsKPiArCQlpZiAoIW9mX25vZGVfY21wKHBhcmVudC0+bmFtZSwgInBvcnRzIikpCj4gKwkJ CXBhcmVudCA9IHBhcmVudC0+cGFyZW50Owo+ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ICsJfQo+ ICsKPiArCXJldHVybiBjb21wb25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKG1hc3Rlcl9kZXYs IG1fb3BzLCBtYXRjaCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeGxueF9jb21wYXJlX29mKHN0 cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKPiArewo+ICsJcmV0dXJuIGRldi0+b2Zfbm9k ZSA9PSBkYXRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhsbnhfcGxhdGZvcm1fcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJcmV0dXJuIHhsbnhfb2ZfY29tcG9u ZW50X3Byb2JlKCZwZGV2LT5kZXYsIHhsbnhfY29tcGFyZV9vZiwKPiArCQkJCSAgICAgICAmeGxu eF9tYXN0ZXJfb3BzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB4bG54X3BsYXRmb3JtX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwljb21wb25lbnRfbWFzdGVy X2RlbCgmcGRldi0+ZGV2LCAmeGxueF9tYXN0ZXJfb3BzKTsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB4bG54X3BsYXRmb3JtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwlkcm1fcHV0X2Rldih4bG54X2RybS0+ZHJtKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB4bG54X3BtX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0geGxueF9kcm0t PmRybTsKPiArCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZHJtKTsKPiArCj4gKwl4 bG54X2RybS0+c3VzcGVuZF9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsK PiArCWlmIChJU19FUlIoeGxueF9kcm0tPnN1c3BlbmRfc3RhdGUpKSB7Cj4gKwkJZHJtX2ttc19o ZWxwZXJfcG9sbF9lbmFibGUoZHJtKTsKPiArCQlyZXR1cm4gUFRSX0VSUih4bG54X2RybS0+c3Vz cGVuZF9zdGF0ZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgeGxueF9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0geGxueF9kcm0tPmRybTsKPiArCj4gKwlkcm1fYXRv bWljX2hlbHBlcl9yZXN1bWUoZHJtLCB4bG54X2RybS0+c3VzcGVuZF9zdGF0ZSk7Cj4gKwlkcm1f a21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgeGxueF9wbV9vcHMgPSB7Cj4gKwlTRVRf U1lTVEVNX1NMRUVQX1BNX09QUyh4bG54X3BtX3N1c3BlbmQsIHhsbnhfcG1fcmVzdW1lKQo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGxueF9kcml2ZXIgPSB7Cj4g KwkucHJvYmUJCQk9IHhsbnhfcGxhdGZvcm1fcHJvYmUsCj4gKwkucmVtb3ZlCQkJPSB4bG54X3Bs YXRmb3JtX3JlbW92ZSwKPiArCS5zaHV0ZG93bgkJPSB4bG54X3BsYXRmb3JtX3NodXRkb3duLAo+ ICsJLmRyaXZlcgkJCT0gewo+ICsJCS5uYW1lCQk9ICJ4bG54LWRybSIsCj4gKwkJLnBtCQk9ICZ4 bG54X3BtX29wcywKPiArCX0sCj4gK307Cj4gKwo+ICsvKiBiaXRtYXAgZm9yIG1hc3RlciBpZCAq Lwo+ICtzdGF0aWMgdTMyIHhsbnhfbWFzdGVyX2lkcyA9IEdFTk1BU0soMzEsIDApOwo+ICsKPiAr LyoqCj4gKyAqIHhpbGlueF9kcm1fcGlwZWxpbmVfaW5pdCAtIEluaXRpYWxpemUgdGhlIGRybSBw aXBlbGluZSBmb3IgdGhlIGRldmljZQo+ICsgKiBAcGRldjogVGhlIHBsYXRmb3JtIGRldmljZSB0 byBpbml0aWFsaXplIHRoZSBkcm0gcGlwZWxpbmUgZGV2aWNlCj4gKyAqCj4gKyAqIFRoaXMgZnVu Y3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGRybSBwaXBlbGluZSBkZXZpY2UsIHN0cnVjdCBkcm1fZGV2 aWNlLAo+ICsgKiBvbiBAcGRldiBieSBjcmVhdGluZyBhIGxvZ2ljYWwgbWFzdGVyIHBsYXRmb3Jt IGRldmljZS4gVGhlIGxvZ2ljYWwKPiBwbGF0Zm9ybQo+ICsgKiBkZXZpY2UgYWN0cyBhcyBhIG1h c3RlciBkZXZpY2UgdG8gYmluZCBzbGF2ZSBkZXZpY2VzIGFuZCByZXByZXNlbnRzCj4gKyAqIHRo ZSBlbnRpcmUgcGlwZWxpbmUuCgpJJ20gc29ycnkgdG8gYXNrIHRoaXMgcXVlc3Rpb24gc28gbGF0 ZSwgYnV0IGNvdWxkbid0IHlvdSBkbyB3aXRob3V0IHRoYXQgCnBsYXRmb3JtIGRldmljZSA/IEkg ZG9uJ3QgcmVhbGx5IHNlZSB3aGF0IGl0IGJyaW5ncyB5b3UuCgo+ICsgKiBUaGUgbG9naWNhbCBt YXN0ZXIgdXNlcyB0aGUgcG9ydCBiaW5kaW5ncyBvZiB0aGUgY2FsbGluZyBkZXZpY2UgdG8KPiAr ICogZmlndXJlIG91dCB0aGUgcGlwZWxpbmUgdG9wb2xvZ3kuCj4gKyAqCj4gKyAqIFJldHVybjog dGhlIGxvZ2ljYWwgbWFzdGVyIHBsYXRmb3JtIGRldmljZSBpZiB0aGUgZHJtIGRldmljZSBpcwo+ IGluaXRpYWxpemVkCj4gKyAqIG9uIEBwZGV2LiBFcnJvciBjb2RlIG90aGVyd2lzZS4KPiArICov Cj4gK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnhsbnhfZHJtX3BpcGVsaW5lX2luaXQoc3RydWN0 IHBsYXRmb3JtX2RldmljZQo+ICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICptYXN0ZXI7Cj4gKwlpbnQgaWQsIHJldDsKPiArCgpJcyB0aGVyZSBhbnkgcmlzayBvZiBhIHJh Y2UgYmV0d2VlbiBjb25jdXJyZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24sIG9yIHRvIAp0aGlz IGZ1bmN0aW9uIGFuZCB4bG54X2RybV9waXBlbGluZV9leGl0KCkgPwoKPiArCWlkID0gZmZzKHhs bnhfbWFzdGVyX2lkcyk7Cj4gKwlpZiAoIWlkKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMp Owo+ICsKPiArCW1hc3RlciA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygieGxueC1kcm0iLCBpZCAt IDEpOwo+ICsJaWYgKCFtYXN0ZXIpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ ICsJbWFzdGVyLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKPiArCXJldCA9IHBsYXRmb3JtX2Rl dmljZV9hZGQobWFzdGVyKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfb3V0OwoKQXMgdGhp cyBpcyB0aGUgb25seSBsb2NhdGlvbiB3aGVyZSB5b3UganVtcCB0byB0aGUgZXJyb3IgcGF0aCBJ IHdvdWxkIGlubGluZSAKaXQuCgo+ICsKPiArCVdBUk5fT04obWFzdGVyLT5pZCAhPSBpZCAtIDEp Owo+ICsJeGxueF9tYXN0ZXJfaWRzICY9IH5CSVQobWFzdGVyLT5pZCk7Cj4gKwlyZXR1cm4gbWFz dGVyOwo+ICsKPiArZXJyX291dDoKPiArCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1hc3Rl cik7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhs bnhfZHJtX3BpcGVsaW5lX2luaXQpOwo+ICsKPiArLyoqCj4gKyAqIHhpbGlueF9kcm1fcGlwZWxp bmVfZXhpdCAtIFJlbGVhc2UgdGhlIGRybSBwaXBlbGluZSBmb3IgdGhlIGRldmljZQo+ICsgKiBA bWFzdGVyOiBUaGUgbWFzdGVyIHBpcGVsaW5lIGRldmljZSB0byByZWxlYXNlCj4gKyAqCj4gKyAq IFJlbGVhc2UgdGhlIGxvZ2ljYWwgcGlwZWxpbmUgZGV2aWNlIHJldHVybmVkIGJ5Cj4geGxueF9k cm1fcGlwZWxpbmVfaW5pdCgpLgo+ICsgKi8KPiArdm9pZCB4bG54X2RybV9waXBlbGluZV9leGl0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hc3RlcikKPiArewo+ICsJeGxueF9tYXN0ZXJfaWRz IHw9IEJJVChtYXN0ZXItPmlkKTsKPiArCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1hc3Rl cik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoeGxueF9kcm1fcGlwZWxpbmVfZXhpdCk7Cj4g Kwo+ICtzdGF0aWMgaW50IF9faW5pdCB4bG54X2RybV9kcnZfaW5pdCh2b2lkKQo+ICt7Cj4gKwlw bGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhsbnhfZHJpdmVyKTsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgeGxueF9kcm1fZHJ2X2V4aXQodm9pZCkKPiArewo+ ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnhsbnhfZHJpdmVyKTsKPiArfQo+ICsKPiAr bW9kdWxlX2luaXQoeGxueF9kcm1fZHJ2X2luaXQpOwo+ICttb2R1bGVfZXhpdCh4bG54X2RybV9k cnZfZXhpdCk7CgpZb3UgY2FuIHVzZSB0aGUgbW9kdWxlX3BsYXRmb3JtX2RyaXZlcigpIG1hY3Jv LgoKPiArCj4gK01PRFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOwo+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIlhpbGlueCBEUk0gS01TIERyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmgKPiBiL2Ry aXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmggbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi4wZjY1OTVmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS94bG54L3hsbnhfZHJ2LmgKPiBAQCAtMCwwICsxLDMzIEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIFhpbGlueCBEUk0gS01TIEhlYWRlciBmb3Ig WGlsaW54Cj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4IFhpbGlueCwgSW5j Lgo+ICsgKgo+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVua0B4aWxpbnguY29tPgo+ ICsgKgo+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gKyAqIG1heSBiZSBjb3Bp ZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gKyAqCj4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgpTYW1lIGNvbW1lbnQgYXMgYmVmb3JlLgoKPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9YTE5YX0RSVl9IXwo+ICsjZGVmaW5lIF9YTE5YX0RSVl9IXwo+ ICsKPiArc3RydWN0IGRybV9kZXZpY2U7Cj4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyOwoKQXMg YSBnZW5lcmFsIHJ1bGUgcGxlYXNlIGVpdGhlciBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZXMgY29y cmVzcG9uZGluZyB0byB0aGUgCnN0cnVjdHVyZXMgeW91IHVzZSwgb3IgYWRkIHN0cnVjdHVyZSBk ZWNsYXJhdGlvbnMgd2hlbiB0aGUgZGVmaW5pdGlvbiBpc24ndCAKbmVlZGVkIChhcyBpbiB0aGlz IGNhc2UpLiBJdCBoZWxwcyBhdm9pZGluZyBjb21waWxhdGlvbiBlcnJvcnMgZHVlIHRvICNpbmNs dWRlIApvcmRlcmluZyBvciBuZXN0ZWQgI2luY2x1ZGUgbW9kaWZpY2F0aW9ucy4gWW91J3JlIGRv aW5nIHNvIGZvciB0d28gc3RydWN0dXJlcyAKYWxyZWFkeSBidXQgbm90IGZvciBhbGwgb2YgdGhl bS4gVGhpcyBjb21tZW50IGFwcGxpZXMgdG8gYWxsIGhlYWRlciBmaWxlcyBpbiAKdGhpcyBwYXRj aCBzZXJpZXMuCgo+ICtzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp4bG54X2RybV9waXBlbGluZV9p bml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UKPiAqcGFyZW50KTsKPiArdm9pZCB4bG54X2RybV9w aXBlbGluZV9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBpcGVsaW5lKTsKPiArCj4gK3Vp bnQzMl90IHhsbnhfZ2V0X2Zvcm1hdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiArdW5zaWdu ZWQgaW50IHhsbnhfZ2V0X2FsaWduKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICtzdHJ1Y3Qg eGxueF9jcnRjX2hlbHBlciAqeGxueF9nZXRfY3J0Y19oZWxwZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRybSk7Cj4gK3N0cnVjdCB4bG54X2JyaWRnZV9oZWxwZXIgKnhsbnhfZ2V0X2JyaWRnZV9oZWxw ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7CgpUaGlzIGZ1bmN0aW9uIGlzbid0IGRlZmluZWQg YW55d2hlcmUuCgo+ICsKPiArI2VuZGlmIC8qIF9YTE5YX0RSVl9IXyAqLwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94 bG54X2ZiLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmU3MjA4N2QK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5jCj4g QEAgLTAsMCArMSwyOTggQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArLyoKPiArICogWGlsaW54IERSTSBLTVMgRnJhbWVidWZmZXIgaGVscGVyCj4gKyAqCj4gKyAq ICBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE4IFhpbGlueCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0 aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiArICoKPiArICogQmFz ZWQgb24gZHJtX2ZiX2NtYV9oZWxwZXIuYwo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDEy IEFuYWxvZyBEZXZpY2UgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2Ug dmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg YW5kCj4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIg dGhvc2UgdGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4g KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgpJIHRoaW5r IHlvdSBrbm93IHRoZSBkcmlsbCBieSBub3cgOi0pCgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9n ZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGxueF9kcnYuaCIKPiAr I2luY2x1ZGUgInhsbnhfZmIuaCIKPiArCj4gKyNkZWZpbmUgWExOWF9NQVhfUExBTkVTCTQKPiAr Cj4gK3N0cnVjdCB4bG54X2ZiZGV2IHsKPiArCXN0cnVjdCBkcm1fZmJfaGVscGVyIGZiX2hlbHBl cjsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsJdW5zaWduZWQgaW50IGFsaWdu Owo+ICsJdW5zaWduZWQgaW50IHZyZXNfbXVsdDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUg c3RydWN0IHhsbnhfZmJkZXYgKnRvX2ZiZGV2KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxw ZXIpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoZmJfaGVscGVyLCBzdHJ1Y3QgeGxueF9m YmRldiwgZmJfaGVscGVyKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZm ZXJfZnVuY3MgeGxueF9mYl9mdW5jcyA9IHsKCnN0YXRpYyBjb25zdCBmb3IgYWxsIG9wcyBzdHJ1 Y3R1cmVzIHBsZWFzZS4KCj4gKwkuZGVzdHJveQk9IGRybV9nZW1fZmJfZGVzdHJveSwKPiArCS5j cmVhdGVfaGFuZGxlCT0gZHJtX2dlbV9mYl9jcmVhdGVfaGFuZGxlLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludAo+ICt4bG54X2ZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBp bnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKPiArewo+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIg KmZiX2hlbHBlciA9IGluZm8tPnBhcjsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJaW50IHJldCA9 IDA7Cj4gKwo+ICsJc3dpdGNoIChjbWQpIHsKPiArCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6Cj4g KwkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gKwkJCXN0 cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0Owo+ICsJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7 Cj4gKwo+ICsJCQltb2RlX3NldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsK PiArCQkJY3J0YyA9IG1vZGVfc2V0LT5jcnRjOwo+ICsJCQlyZXQgPSBkcm1fY3J0Y192Ymxhbmtf Z2V0KGNydGMpOwo+ICsJCQlpZiAoIXJldCkgewo+ICsJCQkJZHJtX2NydGNfd2FpdF9vbmVfdmJs YW5rKGNydGMpOwo+ICsJCQkJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKPiArCQkJfQo+ICsJ CX0KCllvdSdyZSBnb2luZyB0byB3YWl0IGZvciBvbmUgdnN5bmMgZm9yIGVhY2ggQ1JUQyBpbiBz ZXF1ZW5jZS4gSWYgeW91IGhhdmUgdHdvIApDUlRDcywgdGhhdCB3aWxsIGJlIGF0IGxlYXN0IHR3 byB2c3luY3MuIEkgYmVsaWV2ZSB0aGF0IHdpbGwgcmVuZGVyIHRoaXMgaW9jdGwgCnF1aXRlIHVz ZWxlc3MgZm9yIHVzZXJzcGFjZS4gSSB3b3VsZCBlaXRoZXIgdXNlIHRoZSBkZWZhdWx0IGltcGxl bWVudGF0aW9uIAp0aGF0IGhhbmRsZXMgdGhlIGZpcnN0IENSVEMgb25seSAoZHJtX2ZiX2hlbHBl cl9pb2N0bCgpKSBvciBkcm9wIGl0IApjb21wbGV0ZWx5LiBXZSBjYW4ndCBpbXBsZW1lbnQgRkJE RVYgZW11bGF0aW9uIHBlcmZlY3RseSBhcyB3ZSBleHBvc2UgYSBzaW5nbGUgCkZCREVWIGRldmlj ZSB0aGF0IGNvdmVycyBhbGwgQ1JUQ3MuCgo+ICsJCXJldHVybiByZXQ7Cj4gKwlkZWZhdWx0Ogo+ ICsJCXJldHVybiAtRU5PVFRZOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc3RydWN0IGZiX29wcyB4bG54X2ZiZGV2X29wcyA9IHsKCnN0YXRpYyBjb25zdCB0b28u Cgo+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ICsJLmZiX2ZpbGxyZWN0CT0gc3lzX2ZpbGxy ZWN0LAo+ICsJLmZiX2NvcHlhcmVhCT0gc3lzX2NvcHlhcmVhLAo+ICsJLmZiX2ltYWdlYmxpdAk9 IHN5c19pbWFnZWJsaXQsCj4gKwkuZmJfY2hlY2tfdmFyCT0gZHJtX2ZiX2hlbHBlcl9jaGVja192 YXIsCj4gKwkuZmJfc2V0X3Bhcgk9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKPiArCS5mYl9ibGFu awk9IGRybV9mYl9oZWxwZXJfYmxhbmssCj4gKwkuZmJfcGFuX2Rpc3BsYXkJPSBkcm1fZmJfaGVs cGVyX3Bhbl9kaXNwbGF5LAo+ICsJLmZiX3NldGNtYXAJPSBkcm1fZmJfaGVscGVyX3NldGNtYXAs Cj4gKwkuZmJfaW9jdGwJPSB4bG54X2ZiX2lvY3RsLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHhs bnhfZmJkZXZfY3JlYXRlIC0gQ3JlYXRlIHRoZSBmYmRldiB3aXRoIGEgZnJhbWVidWZmZXIKPiAr ICogQGZiX2hlbHBlcjogZmIgaGVscGVyIHN0cnVjdHVyZQo+ICsgKiBAc2l6ZTogZnJhbWVidWZm ZXIgc2l6ZSBpbmZvCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2Zi ZGV2X2NtYV9jcmVhdGUoKS4KPiArICoKPiArICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwsIG9y IHRoZSBlcnJvciBjb2RlLgo+ICsgKi8KCkknbGwgc2tpcCByZXZpZXdpbmcgdGhlIHJlc3Qgb2Yg dGhlIGZpbGUgYXMgdGhlcmUncyBhIGNoYW5jZSBtb3N0IG9mIHRoZSBjb2RlIApjb3VsZCBiZSBk cm9wcGVkIGlmIHlvdSB1c2VkIHRoZSBDT05GSUdfRFJNX0ZCREVWX09WRVJBTExPQyBtZWNoYW5p c20uCgo+ICtzdGF0aWMgaW50IHhsbnhfZmJkZXZfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpmYl9oZWxwZXIsCj4gKwkJCSAgICAgc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXpl ICpzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgeGxueF9mYmRldiAqZmJkZXYgPSB0b19mYmRldihmYl9o ZWxwZXIpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGZiX2hlbHBlci0+ZGV2Owo+ICsJ c3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqb2JqOwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmI7Cj4gKwl1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3BpeGVsOwo+ICsJdW5zaWduZWQgbG9u ZyBvZmZzZXQ7Cj4gKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpOwo+ICsJc2l6ZV90IGJ5dGVzOwo+ICsJ aW50IHJldDsKPiArCj4gKwlkZXZfZGJnKGRybS0+ZGV2LCAic3VyZmFjZSB3aWR0aCglZCksIGhl aWdodCglZCkgYW5kIGJwcCglZClcbiIsCj4gKwkJc2l6ZS0+c3VyZmFjZV93aWR0aCwgc2l6ZS0+ c3VyZmFjZV9oZWlnaHQsIHNpemUtPnN1cmZhY2VfYnBwKTsKPiArCj4gKwlzaXplLT5zdXJmYWNl X2hlaWdodCAqPSBmYmRldi0+dnJlc19tdWx0Owo+ICsJYnl0ZXNfcGVyX3BpeGVsID0gRElWX1JP VU5EX1VQKHNpemUtPnN1cmZhY2VfYnBwLCA4KTsKPiArCWJ5dGVzID0gQUxJR04oc2l6ZS0+c3Vy ZmFjZV93aWR0aCAqIGJ5dGVzX3Blcl9waXhlbCwgZmJkZXYtPmFsaWduKTsKPiArCWJ5dGVzICo9 IHNpemUtPnN1cmZhY2VfaGVpZ2h0Owo+ICsKPiArCW9iaiA9IGRybV9nZW1fY21hX2NyZWF0ZShk cm0sIGJ5dGVzKTsKPiArCWlmIChJU19FUlIob2JqKSkKPiArCQlyZXR1cm4gUFRSX0VSUihvYmop Owo+ICsKPiArCWZiaSA9IGZyYW1lYnVmZmVyX2FsbG9jKDAsIGRybS0+ZGV2KTsKPiArCWlmICgh ZmJpKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1 ZmZlciBpbmZvLlxuIik7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9kcm1fZ2Vt X2NtYV9mcmVlX29iamVjdDsKPiArCX0KPiArCj4gKwlmYmRldi0+ZmIgPSBkcm1fZ2VtX2ZiZGV2 X2ZiX2NyZWF0ZShkcm0sIHNpemUsIGZiZGV2LT5hbGlnbiwgJm9iai0+YmFzZSwKPiArCQkJCQkg ICAgJnhsbnhfZmJfZnVuY3MpOwo+ICsJaWYgKElTX0VSUihmYmRldi0+ZmIpKSB7Cj4gKwkJZGV2 X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBEUk0gZnJhbWVidWZmZXIuXG4iKTsK PiArCQlyZXQgPSBQVFJfRVJSKGZiZGV2LT5mYik7Cj4gKwkJZ290byBlcnJfZnJhbWVidWZmZXJf cmVsZWFzZTsKPiArCX0KPiArCj4gKwlmYiA9IGZiZGV2LT5mYjsKPiArCWZiX2hlbHBlci0+ZmIg PSBmYjsKPiArCWZiX2hlbHBlci0+ZmJkZXYgPSBmYmk7Cj4gKwlmYmktPnBhciA9IGZiX2hlbHBl cjsKPiArCWZiaS0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwo+ICsJZmJpLT5mYm9wcyA9 ICZ4bG54X2ZiZGV2X29wczsKPiArCj4gKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZmYmktPmNtYXAs IDI1NiwgMCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0 byBhbGxvY2F0ZSBjb2xvciBtYXAuXG4iKTsKPiArCQlnb3RvIGVycl9mYl9kZXN0cm95Owo+ICsJ fQo+ICsKPiArCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoZmJpLCBmYi0+cGl0Y2hlc1swXSwgZmIt PmZvcm1hdC0+ZGVwdGgpOwo+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihmYmksIGZiX2hlbHBl ciwgZmItPndpZHRoLCBmYi0+aGVpZ2h0KTsKPiArCWZiaS0+dmFyLnlyZXMgPSBmYi0+aGVpZ2h0 IC8gZmJkZXYtPnZyZXNfbXVsdDsKPiArCj4gKwlvZmZzZXQgPSBmYmktPnZhci54b2Zmc2V0ICog Ynl0ZXNfcGVyX3BpeGVsOwo+ICsJb2Zmc2V0ICs9IGZiaS0+dmFyLnlvZmZzZXQgKiBmYi0+cGl0 Y2hlc1swXTsKPiArCj4gKwlkcm0tPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSAocmVzb3VyY2Vfc2l6 ZV90KW9iai0+cGFkZHI7Cj4gKwlmYmktPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKShv YmotPnZhZGRyICsgb2Zmc2V0KTsKPiArCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQg bG9uZykob2JqLT5wYWRkciArIG9mZnNldCk7Cj4gKwlmYmktPnNjcmVlbl9zaXplID0gYnl0ZXM7 Cj4gKwlmYmktPmZpeC5zbWVtX2xlbiA9IGJ5dGVzOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiAr ZXJyX2ZiX2Rlc3Ryb3k6Cj4gKwlkcm1fZnJhbWVidWZmZXJfdW5yZWdpc3Rlcl9wcml2YXRlKGZi KTsKPiArCWRybV9nZW1fZmJfZGVzdHJveShmYik7Cj4gK2Vycl9mcmFtZWJ1ZmZlcl9yZWxlYXNl Ogo+ICsJZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOwo+ICtlcnJfZHJtX2dlbV9jbWFfZnJlZV9v YmplY3Q6Cj4gKwlkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCgmb2JqLT5iYXNlKTsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB4bG54 X2ZiX2hlbHBlcl9mdW5jcyA9IHsKCnN0YXRpYyBjb25zdC4KCj4gKwkuZmJfcHJvYmUgPSB4bG54 X2ZiZGV2X2NyZWF0ZSwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiB4bG54X2ZiX2luaXQgLSBBbGxv Y2F0ZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIFhpbGlueCBmcmFtZWJ1ZmZlcgo+ICsgKiBAZHJtOiBE Uk0gZGV2aWNlCj4gKyAqIEBwcmVmZXJyZWRfYnBwOiBwcmVmZXJyZWQgYml0cyBwZXIgcGl4ZWwg Zm9yIHRoZSBkZXZpY2UKPiArICogQG1heF9jb25uX2NvdW50OiBtYXhpbXVtIG51bWJlciBvZiBj b25uZWN0b3JzCj4gKyAqIEBhbGlnbjogYWxpZ25tZW50IHZhbHVlIGZvciBwaXRjaAo+ICsgKiBA dnJlc19tdWx0OiBtdWx0aXBsaWVyIGZvciB2aXJ0dWFsIHJlc29sdXRpb24KPiArICoKPiArICog VGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX2luaXQoKS4KPiArICoKPiAr ICogUmV0dXJuOiBhIG5ld2x5IGFsbG9jYXRlZCBkcm1fZmJfaGVscGVyIHN0cnVjdCBvciBhIEVS Ul9QVFIuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqCj4gK3hsbnhfZmJfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgcHJlZmVycmVkX2JwcCwKPiArCSAgICAgdW5zaWdu ZWQgaW50IG1heF9jb25uX2NvdW50LCB1bnNpZ25lZCBpbnQgYWxpZ24sCj4gKwkgICAgIHVuc2ln bmVkIGludCB2cmVzX211bHQpCj4gK3sKPiArCXN0cnVjdCB4bG54X2ZiZGV2ICpmYmRldjsKPiAr CXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWZi ZGV2ID0ga3phbGxvYyhzaXplb2YoKmZiZGV2KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZiZGV2 KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCWZiZGV2LT52cmVzX211bHQg PSB2cmVzX211bHQ7Cj4gKwlmYmRldi0+YWxpZ24gPSBhbGlnbjsKPiArCWZiX2hlbHBlciA9ICZm YmRldi0+ZmJfaGVscGVyOwo+ICsJZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKGRybSwgZmJfaGVscGVy LCAmeGxueF9mYl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCXJldCA9IGRybV9mYl9oZWxwZXJfaW5p dChkcm0sIGZiX2hlbHBlciwgbWF4X2Nvbm5fY291bnQpOwo+ICsJaWYgKHJldCA8IDApIHsKPiAr CQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGZiIGhlbHBlci5c biIpOwo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBl cl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKGZiX2hlbHBlcik7Cj4gKwlpZiAocmV0IDwgMCkg ewo+ICsJCWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gYWRkIGNvbm5lY3RvcnMuXG4iKTsK PiArCQlnb3RvIGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJt X2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhmYl9oZWxwZXIsIHByZWZlcnJlZF9icHApOwo+ICsJ aWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIHNldCBpbml0 aWFsIGh3IGNvbmZpZ3VyYXRpb24uXG4iKTsKPiArCQlnb3RvIGVycl9kcm1fZmJfaGVscGVyX2Zp bmk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZiX2hlbHBlcjsKPiArCj4gK2Vycl9kcm1fZmJfaGVs cGVyX2Zpbmk6Cj4gKwlkcm1fZmJfaGVscGVyX2ZpbmkoZmJfaGVscGVyKTsKPiArZXJyX2ZyZWU6 Cj4gKwlrZnJlZShmYmRldik7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICsv KioKPiArICogeGxueF9mYmRldl9kZWZpb19maW5pIC0gRnJlZSB0aGUgZGVmaW8gZmIKPiArICog QGZiaTogZmJfaW5mbyBzdHJ1Y3QKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBv biBkcm1fZmJkZXZfY21hX2RlZmlvX2ZpbmkoKS4KPiArICovCj4gK3N0YXRpYyB2b2lkIHhsbnhf ZmJkZXZfZGVmaW9fZmluaShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQo+ICt7Cj4gKwlpZiAoIWZiaS0+ ZmJkZWZpbykKPiArCQlyZXR1cm47Cj4gKwo+ICsJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChmYmkp Owo+ICsJa2ZyZWUoZmJpLT5mYmRlZmlvKTsKPiArCWtmcmVlKGZiaS0+ZmJvcHMpOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogeGxueF9mYmRldl9maW5pIC0gRnJlZSB0aGUgWGlsaW54IGZyYW1lYnVm ZmVyCj4gKyAqIEBmYl9oZWxwZXI6IGRybV9mYl9oZWxwZXIgc3RydWN0Cj4gKyAqCj4gKyAqIFRo aXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2ZiZGV2X2NtYV9maW5pKCkuCj4gKyAqLwo+ICt2 b2lkIHhsbnhfZmJfZmluaShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQo+ICt7Cj4g KwlzdHJ1Y3QgeGxueF9mYmRldiAqZmJkZXYgPSB0b19mYmRldihmYl9oZWxwZXIpOwo+ICsKPiAr CWRybV9mYl9oZWxwZXJfdW5yZWdpc3Rlcl9mYmkoJmZiZGV2LT5mYl9oZWxwZXIpOwo+ICsJaWYg KGZiZGV2LT5mYl9oZWxwZXIuZmJkZXYpCj4gKwkJeGxueF9mYmRldl9kZWZpb19maW5pKGZiZGV2 LT5mYl9oZWxwZXIuZmJkZXYpOwo+ICsKPiArCWlmIChmYmRldi0+ZmJfaGVscGVyLmZiKQo+ICsJ CWRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoZmJkZXYtPmZiX2hlbHBlci5mYik7Cj4gKwo+ICsJZHJt X2ZiX2hlbHBlcl9maW5pKCZmYmRldi0+ZmJfaGVscGVyKTsKPiArCWtmcmVlKGZiZGV2KTsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZmJfY3JlYXRlIC0gKHN0cnVjdCBkcm1fbW9kZV9jb25m aWdfZnVuY3MgKiktPmZiX2NyZWF0ZSBjYWxsYmFjawo+ICsgKiBAZHJtOiBEUk0gZGV2aWNlCj4g KyAqIEBmaWxlX3ByaXY6IGRybSBmaWxlIHByaXZhdGUgZGF0YQo+ICsgKiBAbW9kZV9jbWQ6IG1v ZGUgY29tbWFuZCBmb3IgZmIgY3JlYXRpb24KPiArICoKPiArICogVGhpcyBmdW5jdGlvbnMgY3Jl YXRlcyBhIGRybV9mcmFtZWJ1ZmZlciB3aXRoIHhsbnhfZmJfZnVuY3MgZm9yIGdpdmVuCj4gbW9k ZQo+ICsgKiBAbW9kZV9jbWQuIFRoaXMgZnVuY3Rpb25zIGlzIGludGVuZGVkIHRvIGJlIHVzZWQg Zm9yIHRoZSBmYl9jcmVhdGUKPiBjYWxsYmFjawo+ICsgKiBmdW5jdGlvbiBvZiBkcm1fbW9kZV9j b25maWdfZnVuY3MuCj4gKyAqCj4gKyAqIFJldHVybjogYSBkcm1fZnJhbWVidWZmZXIgb2JqZWN0 IGlmIHN1Y2Nlc3NmdWwsIG9yCj4gKyAqIEVSUl9QVFIgZnJvbSBkcm1fZ2VtX2ZiX2NyZWF0ZV93 aXRoX2Z1bmNzKCkuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiAreGxueF9m Yl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYsCj4gKwkgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQo+ ICt7Cj4gKwlyZXR1cm4gZHJtX2dlbV9mYl9jcmVhdGVfd2l0aF9mdW5jcyhkcm0sIGZpbGVfcHJp diwgbW9kZV9jbWQsCj4gKwkJCQkJICAgICZ4bG54X2ZiX2Z1bmNzKTsKPiArfQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2ZiLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjZlZmM5 ODUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5o Cj4gQEAgLTAsMCArMSwzMyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIEtNUyBGcmFtZWJ1ZmZlciBoZWxwZXIgaGVhZGVyCj4g KyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE4IFhpbGlueCwgSW5jLgo+ICsgKgo+ ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiArICoK PiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBk aXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKTm8gY29tbWVudCBhbnltb3JlLgoKPiArICovCj4gKwo+ ICsjaWZuZGVmIF9YTE5YX0ZCX0hfCj4gKyNkZWZpbmUgX1hMTlhfRkJfSF8KPiArCj4gK3N0cnVj dCBkcm1fZmJfaGVscGVyOwo+ICsKPiArc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4gK3hsbnhf ZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAo+ICsJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7 Cj4gK3N0cnVjdCBkcm1fZmJfaGVscGVyICoKPiAreGxueF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0sIGludCBwcmVmZXJyZWRfYnBwLAo+ICsJICAgICB1bnNpZ25lZCBpbnQgbWF4X2Nv bm5fY291bnQsIHVuc2lnbmVkIGludCBhbGlnbiwKPiArCSAgICAgdW5zaWduZWQgaW50IHZyZXNf bXVsdCk7Cj4gK3ZvaWQgeGxueF9mYl9maW5pKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxw ZXIpOwo+ICsKPiArI2VuZGlmIC8qIF9YTE5YX0ZCX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhf Z2VtLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40YTVkNTMzCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMKPiBAQCAt MCwwICsxLDQ3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8q Cj4gKyAqIFhpbGlueCBEUk0gS01TIEdFTSBoZWxwZXIKPiArICoKPiArICogIENvcHlyaWdodCAo QykgMjAxNSAtIDIwMTggWGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5dW4gV29v IEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBUaGlzIHNvZnR3YXJlIGlz IGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gKyAq IExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgYW5kCj4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZp ZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CgouLi4gOy0pCgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ICsKPiArI2luY2x1ZGUgInhsbnhfZHJ2Lmgi Cj4gKyNpbmNsdWRlICJ4bG54X2dlbS5oIgo+ICsKPiArLyoKPiArICogeGxueF9nZW1fY21hX2R1 bWJfY3JlYXRlIC0gKHN0cnVjdCBkcm1fZHJpdmVyKS0+ZHVtYl9jcmVhdGUgY2FsbGJhY2sKPiAr ICogQGZpbGVfcHJpdjogZHJtX2ZpbGUgb2JqZWN0Cj4gKyAqIEBkcm06IERSTSBvYmplY3QKPiAr ICogQGFyZ3M6IGluZm8gZm9yIGR1bWIgc2Nhbm91dCBidWZmZXIgY3JlYXRpb24KPiArICoKPiAr ICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZHVtYl9jcmVhdGUgY2FsbGJhY2sgb2YgZHJtX2RyaXZl ciBzdHJ1Y3QuIFNpbXBseQo+ICsgKiBpdCB3cmFwcyBhcm91bmQgZHJtX2dlbV9jbWFfZHVtYl9j cmVhdGUoKSBhbmQgc2V0cyB0aGUgcGl0Y2ggdmFsdWUKPiArICogYnkgcmV0cmlldmluZyB0aGUg dmFsdWUgZnJvbSB0aGUgZGV2aWNlLgo+ICsgKgo+ICsgKiBSZXR1cm46IFRoZSByZXR1cm4gdmFs dWUgZnJvbSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSgpCj4gKyAqLwo+ICtpbnQgeGxueF9nZW1f Y21hX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2Rl dmljZQo+ICpkcm0sCj4gKwkJCSAgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdz KQo+ICt7Cj4gKwlpbnQgcGl0Y2ggPSBESVZfUk9VTkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5i cHAsIDgpOwoKcGl0Y2ggaXMgbmV2ZXIgbmVnYXRpdmUsIHlvdSBjYW4gbWFrZSBpdCBhbiB1bnNp Z25lZCBpbnQuCgo+ICsJdW5zaWduZWQgaW50IGFsaWduID0geGxueF9nZXRfYWxpZ24oZHJtKTsK PiArCj4gKwlpZiAoIWFyZ3MtPnBpdGNoIHx8ICFJU19BTElHTkVEKGFyZ3MtPnBpdGNoLCBhbGln bikpCj4gKwkJYXJncy0+cGl0Y2ggPSBBTElHTihwaXRjaCwgYWxpZ24pOwoKSWYgdGhlIHBpdGNo IGlzIGFsaWduZWQgeW91J2xsIGtlZXAgdGhlIGN1cnJlbnQgdmFsdWUgKHdoaWNoIGNvdWxkIGJl IGxhcmdlciAKdGhhbiB0aGUgbWluaW11bSBwaXRjaCksIGJ1dCBvdGhlcndpc2UgeW91IHdpbGwg b3ZlcndyaXRlIGl0IHdpdGggdGhlIGFsaWduZWQgCm1pbmltdW0gcGl0Y2guIEl0IGNyZWF0ZXMg dHdvIHZlcnkgZGlmZmVyZW50IGJlaGF2aW91cnMgYnkgYWxsb3dpbmcgdXNlcnNwYWNlIAp0byBz cGVjaWZ5IHRoZSBwaXRjaCB3aGVuIGl0IGlzIGFsaWduZWQsIGJ1dCBnb2luZyBmb3IgdGhlIG1p bmltdW0gcGl0Y2ggCnVuY29uZGl0aW9uYWxseSBvdGhlcndpc2UuIElzIHRoYXQgb24gcHVycG9z ZSA/Cgo+ICsJcmV0dXJuIGRybV9nZW1fY21hX2R1bWJfY3JlYXRlX2ludGVybmFsKGZpbGVfcHJp diwgZHJtLCBhcmdzKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94 bG54X2dlbS5oCj4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oIG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZjM4MGRlOQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oCj4gQEAgLTAsMCArMSwyNiBAQAo+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJN IEtNUyBHRU0gaGVscGVyIGhlYWRlcgo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0g MjAxOCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1 bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBh bmQKPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0 aG9zZSB0ZXJtcy4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KClRoZSBsYXN0 IG9uZSAhIDotKQoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9YTE5YX0dFTV9IXwo+ICsjZGVmaW5l IF9YTE5YX0dFTV9IXwo+ICsKPiAraW50IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ ICsJCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7Cj4gKwo+ICsjZW5k aWYgLyogX1hMTlhfR0VNX0hfICovCgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=