From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [DPU PATCH 1/2] drm/panel: Add Truly Dual DSI video mode panel Date: Sun, 8 Apr 2018 22:06:33 +0530 Message-ID: References: <1523084813-858-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1523084813-858-1-git-send-email-abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Abhinav Kumar , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: manojavm-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: dri-devel@lists.freedesktop.org SGkgQWJoaW5hdiwKClRoYW5rcyBmb3IgcG9zdGluZyB0aGlzIGRyaXZlci4gU29tZSBjb21tZW50 cyBiZWxvdy4KCk9uIFNhdHVyZGF5IDA3IEFwcmlsIDIwMTggMTI6MzYgUE0sIEFiaGluYXYgS3Vt YXIgd3JvdGU6Cj4gRnJvbTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4K PiAKPiBBZGQgc3VwcG9ydCBmb3IgdHJ1bHkgZHVhbCBEU0kgdmlkZW8gbW9kZSBwYW5lbAo+IHBh bmVsIHVzZWQgaW4gTVNNIHJlZmVyZW5jZSBwbGF0Zm9ybXMgPgo+IFNpZ25lZC1vZmYtYnk6IEFy Y2hpdCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQWJo aW5hdiBLdW1hciA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+Cj4gLS0tCj4gICAuLi4vYmluZGlu Z3MvZGlzcGxheS90cnVseSxkdWFsX3dxeGdhLnR4dCAgICAgICAgICB8ICA0NyArKwo+ICAgZHJp dmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwo+ ICAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LWR1YWwtZHNpLmMgICAg ICAgfCA1MzAgKysrKysrKysrKysrKysrKysrKysrCj4gICA0IGZpbGVzIGNoYW5nZWQsIDU4NSBp bnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL2Rpc3BsYXkvdHJ1bHksZHVhbF93cXhnYS50eHQKPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktZHVhbC1kc2kuYwo+IAo+ IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90 cnVseSxkdWFsX3dxeGdhLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9k aXNwbGF5L3RydWx5LGR1YWxfd3F4Z2EudHh0Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi5hMWIyNGMxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24v ZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RydWx5LGR1YWxfd3F4Z2EudHh0Cj4gQEAgLTAs MCArMSw0NyBAQAo+ICtUcnVseSBtb2RlbCBOVDM1NTk3IDE0NDB4MjU2MCBEU0kgUGFuZWwKPiAr Cj4gK1JlcXVpcmVkIHByb3BlcnRpZXM6Cj4gKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJ0cnVs eSxkdWFsX3dxeGdhIgoKVGhlIGNvbXBhdGlibGUgc3RyaW5nLCBrZXJuZWwgY29uZmlnIGFuZCB0 aGUgZHJpdmVyIGZpbGUgc2hvdWxkIGJlIGJhc2VkCm9uIHRoZSBwYW5lbCBtb2RlbCBuby4gVGhl cmUgY2FuIGJlIG1hbnkgdHJ1bHkgYmFzZWQgcGFuZWxzIHRoYXQKc3VwcG9ydCB3cXhnYS4gU29t ZXRoaW5nIGxpa2UgInRydWx5LG50MzU1OTciIHdvdWxkIGJlIGJldHRlci4KCj4gKy0gdmRkYS1z dXBwbHk6IHBoYW5kbGUgb2YgdGhlIHJlZ3VsYXRvciB0aGF0IHByb3ZpZGVzIHRoZSBzdXBwbHkg dm9sdGFnZQo+ICsgIFBvd2VyIElDIHN1cHBseQo+ICstIGxhYi1zdXBwbHk6IHBoYW5kbGUgb2Yg dGhlIHJlZ3VsYXRvciB0aGF0IHByb3ZpZGVzIHRoZSBzdXBwbHkgdm9sdGFnZQo+ICsgIGZvciBM Q0QgYmlhcwo+ICstIGliYi1zdXBwbHk6IHBoYW5kbGUgb2YgdGhlIHJlZ3VsYXRvciB0aGF0IHBy b3ZpZGVzIHRoZSBzdXBwbHkgdm9sdGFnZQo+ICsgIGZvciBMQ0QgYmlhcwoKQm90aCBzZWVtIHRv IGhhdmUgdGhlIHNhbWUgZGVzY3JpcHRpb24uIEFyZW4ndCBsYWIgYW5kIGliYiBxdWFsY29tbQpz cGVjaWZpYyB0ZXJtcz8gQ291bGQgd2UgdXNlIHRoZSBwaW4gbmFtZXMgc3BlY2lmaWVkIGluIHRo ZSBwYW5lbCdzCmRhdGEgc2hlZXQ/Cgo+ICstIHJlc2V0LWdwaW9zOiBwaGFuZGxlIG9mIGdwaW8g Zm9yIHJlc2V0IGxpbmUKPiArICBUaGlzIHNob3VsZCBiZSA4bUEsIGdwaW8gY2FuIGJlIGNvbmZp Z3VyZWQgdXNpbmcgbXV4LCBwaW5jdHJsLCBwaW5jdHJsLW5hbWVzCj4gKy0gbW9kZS1ncGlvczog cGhhbmRsZSBvZiB0aGUgZ3BpbyBmb3IgY2hvb3NpbmcgdGhlIG1vZGUgb2YgdGhlIGRpc3BsYXkK PiArICBmb3Igc2luZ2xlIERTSSBvciBEdWFsIERTSQoKQ291bGQgd2UgZGVzY3JpYmUgaGVyZSBo b3cgdG8gdXNlIHRoaXMgZ3Bpbz8gSS5lLCB3aGV0aGVyIHdlIG5lZWQgdG8gc2V0Cml0IHRvIGxv dyBmb3IgZHVhbCBEU0ksIGV0Yz8KCj4gKy0gZGlzcGxheS10aW1pbmdzOiBOb2RlIGZvciB0aGUg UGFuZWwgdGltaW5ncwo+ICstIGxpbmsyOiBwaGFuZGxlIHRvIHRoZSBzZWNvbmRhcnkgbm9kZSBv ZiB0aGUgcGFuZWwKClRoZSBsaW5rMiBiaW5kaW5nIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHdlIHVz ZWQuIFdlIHNob3VsZCB1c2UgdGhlCm9mLWdyYXBoIGJpbmRpbmdzIHRvIHJlcHJlc2VudCB0aGUg dHdvIERTSSBpbnB1dCBwb3J0cyBvZiB0aGUgcGFuZWwuCgo+ICsKPiArRXhhbXBsZToKPiArCj4g Kwlkc2lAYWU5NDAwMCB7Cj4gKwkJcGFuZWxAMCB7Cj4gKwkJCWNvbXBhdGlibGUgPSAidHJ1bHks ZHVhbF93cXhnYSI7Cj4gKwkJCXJlZyA9IDwwPjsKPiArCQkJbGluazIgPSA8JmxpbmsyPjsKPiAr CQkJdmRkYS1zdXBwbHkgPSA8JnBtODk5OF9sMTQ+Owo+ICsKPiArCQkJcGluY3RybC1uYW1lcyA9 ICJkZWZhdWx0IiwgInN1c3BlbmQiOwo+ICsJCQlwaW5jdHJsLTAgPSA8JnNkZV9kc2lfYWN0aXZl PjsKPiArCQkJcGluY3RybC0xID0gPCZzZGVfZHNpX3N1c3BlbmQ+Owo+ICsKPiArCQkJcmVzZXQt Z3Bpb3MgPSA8JnRsbW0gNiAwPjsKPiArCQkJbW9kZS1ncGlvcyA9IDwmdGxtbSA1MiAwPjsKPiAr CQkJZGlzcGxheS10aW1pbmdzIHsKPiArCQkJCXRpbWluZzA6IHRpbWluZy0wIHsKPiArCQkJCQlj bG9jay1mcmVxdWVuY3kgPSA8MjY4MzE2MTM4PjsKPiArCQkJCQloYWN0aXZlID0gPDE0NDA+Owo+ ICsJCQkJCXZhY3RpdmUgPSA8MjU2MD47Cj4gKwkJCQkJaGZyb250LXBvcmNoID0gPDIwMD47Cj4g KwkJCQkJaGJhY2stcG9yY2ggPSA8NjQ+Owo+ICsJCQkJCWhzeW5jLWxlbiA9IDwzMj47Cj4gKwkJ CQkJdmZyb250LXBvcmNoID0gPDg+Owo+ICsJCQkJCXZiYWNrLXBvcmNoID0gPDc+Owo+ICsJCQkJ CXZzeW5jLWxlbiA9IDwxPjsKPiArCQkJCX07Cj4gKwkJCX07Cj4gKwkJfTsKPiArCX07Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcKPiBpbmRleCA5ODgwNDhlLi5hNjNjM2Y3IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVs L0tjb25maWcKPiBAQCAtMTY4LDQgKzE2OCwxMSBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklY X1NUNzc4OVYKPiAgIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQg Zm9yIHRoZSBTaXRyb25peAo+ICAgCSAgU1Q3Nzg5ViBjb250cm9sbGVyIGZvciAyNDB4MzIwIExD RCBwYW5lbHMKPiAgIAo+ICtjb25maWcgRFJNX1BBTkVMX1RSVUxZX1dRWEdBCj4gKwl0cmlzdGF0 ZSAiVHJ1bHkgV1FYR0EiCj4gKwlkZXBlbmRzIG9uIE9GCj4gKwlkZXBlbmRzIG9uIERSTV9NSVBJ X0RTSQo+ICsJaGVscAo+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBw b3J0IGZvciBUcnVseSBXUVhHQSBEdWFsIERTSQo+ICsJICBWaWRlbyBNb2RlIHBhbmVsCj4gICBl bmRtZW51Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+IGluZGV4IDNkMmE4OGQuLjY0ODkxZjYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4gQEAgLTE3LDMgKzE3LDQgQEAgb2JqLSQoQ09ORklH X0RSTV9QQU5FTF9TRUlLT180M1dWRjFHKSArPSBwYW5lbC1zZWlrby00M3d2ZjFnLm8KPiAgIG9i ai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEpICs9IHBhbmVsLXNoYXJwLWxx MTAxcjFzeDAxLm8KPiAgIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFMwNDNUMUxFMDEp ICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KPiAgIG9iai0kKENPTkZJR19EUk1fUEFORUxf U0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5di5vCj4gK29iai0kKENP TkZJR19EUk1fUEFORUxfVFJVTFlfV1FYR0EpICs9IHBhbmVsLXRydWx5LWR1YWwtZHNpLm8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LWR1YWwtZHNpLmMg Yi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktZHVhbC1kc2kuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNDc4OTFlZQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktZHVhbC1kc2kuYwo+IEBAIC0w LDAgKzEsNTMwIEBACj4gKy8qIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpXZSBzaG91bGQgdXNlIHRoZSBTUERYIGxpY2Vuc2Ug aGVhZGVycyBoZXJlLgoKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4g KyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3Vt ZXIuaD4KPiArCj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KPiArI2luY2x1ZGUg PHZpZGVvL29mX3ZpZGVvbW9kZS5oPgo+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4g Kwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArCj4gK3N0cnVjdCB0cnVseV93cXhn YSB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOwo+ ICsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzWzRdOwo+ICsKPiArCXN0 cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICptb2RlX2dw aW87Cj4gKwo+ICsJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKPiArCXN0cnVj dCB2aWRlb21vZGUgdm07Cj4gKwo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpWzJdOwo+ ICsKPiArCWJvb2wgcHJlcGFyZWQ7Cj4gKwlib29sIGVuYWJsZWQ7Cj4gK307Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHN0cnVjdCB0cnVseV93cXhnYSAqcGFuZWxfdG9fdHJ1bHlfd3F4Z2Eoc3RydWN0 IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0 cnVjdCB0cnVseV93cXhnYSwgcGFuZWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X3dx eGdhX3Bvd2VyX29uKHN0cnVjdCB0cnVseV93cXhnYSAqY3R4KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXJldCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzWzFdLmNvbnN1bWVy LCA2MjAwMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVn dWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbMl0uY29uc3VtZXIsIDEwMDAwMCk7Cj4gKwlp ZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVndWxhdG9yX3NldF9sb2Fk KGN0eC0+c3VwcGxpZXNbM10uY29uc3VtZXIsIDEwMDAwMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7CgpXZSBjb3VsZCBtYWtlIGEgY29uc3Qgc3RhdGljIHN0cnVjdCBhcnJheSBzcGVj aWZ5aW5nIHRoZSByZWd1bGF0b3IKbmFtZXMgKHRvIGJlIHVzZWQgZHVyaW5nIHByb2JlKSBhbmQg dGhlaXIgY29ycmVzcG9uZGluZyBwb3dlciBvbiBhbmQKcG93ZXIgb2ZmIGxvYWRzLiBUaGF0IHNo b3VsZCBtYWtlIHRoaW5ncyBhIGJpdCBjbGVhbmVyLgoKPiArCj4gKwlyZXQgPSByZWd1bGF0b3Jf YnVsa19lbmFibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBwbGllcyk7Cj4g KwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1zbGVlcCgyMCk7Cj4gKwln cGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKPiArCXVzbGVlcF9yYW5nZSgyMDAw MCwgMjAxMDApOwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7Cj4gKwl1 c2xlZXBfcmFuZ2UoMjAwMDAsIDIwMTAwKTsKPiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0 X2dwaW8sIDEpOwo+ICsJdXNsZWVwX3JhbmdlKDUwMDAwLCA1MDEwMCk7Cj4gKwo+ICsJLyogZHVh bCBwb3J0ICovCj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8sIDApOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Bvd2VyX29mZihz dHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlncGlvZF9z ZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKPiArCXJldCA9IHJlZ3VsYXRvcl9zZXRfbG9h ZChjdHgtPnN1cHBsaWVzWzFdLmNvbnN1bWVyLCA2MjAwMCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0la RShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBwbGllcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dHJ1bHlfd3F4Z2FfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3Ry dWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7Cj4gKwo+ ICsJaWYgKCFjdHgtPmVuYWJsZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGN0eC0+YmFj a2xpZ2h0KSB7Cj4gKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfUE9X RVJET1dOOwo+ICsJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGN0eC0+YmFja2xpZ2h0KTsKPiAr CX0KPiArCj4gKwljdHgtPmVuYWJsZWQgPSBmYWxzZTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3VucHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCkKPiArewo+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhn YShwYW5lbCk7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICoqZHNpcyA9IGN0eC0+ZHNpOwo+ ICsJaW50IHJldCA9IDAsIGk7Cj4gKwo+ICsJaWYgKCFjdHgtPnByZXBhcmVkKQo+ICsJCXJldHVy biAwOwo+ICsKPiArCWRzaXNbMF0tPm1vZGVfZmxhZ3MgPSAwOwo+ICsJZHNpc1sxXS0+bW9kZV9m bGFncyA9IDA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKPiArCQlpZiAobWlwaV9k c2lfZGNzX3NldF9kaXNwbGF5X29mZihkc2lzW2ldKSA8IDApCj4gKwkJCXJldCA9IC1FQ09NTTsK PiArCW1zbGVlcCg3OCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKPiArCQlpZiAo bWlwaV9kc2lfZGNzX2VudGVyX3NsZWVwX21vZGUoZHNpc1tpXSkgPCAwKQo+ICsJCQlyZXQgPSAt RUNPTU07Cj4gKwltc2xlZXAoNzgpOwo+ICsKPiArCXRydWx5X3dxeGdhX3Bvd2VyX29mZihjdHgp Owo+ICsKPiArCWN0eC0+cHJlcGFyZWQgPSBmYWxzZTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gKyNkZWZpbmUgTUFYX0xFTgk1Cj4gK3N0cnVjdCB7Cj4gKwl1OCBjb21tYW5kc1tNQVhfTEVO XTsKPiArCWludCBzaXplOwo+ICt9IHBhbmVsX2NtZHNbXSA9IHsgLyogQ01EMl9QMCAqLwo+ICsJ CSAgIHsgeyAweGZmLCAweDIwIH0sIDIgfSwKPiArCQkgICB7IHsgMHhmYiwgMHgwMSB9LCAyIH0s Cj4gKwkJICAgeyB7IDB4MDAsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDAxLCAweDU1IH0s IDIgfSwKPiArCQkgICB7IHsgMHgwMiwgMHg0NSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDUsIDB4 NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDA2LCAweDE5IH0sIDIgfSwKPiArCQkgICB7IHsgMHgw NywgMHgxZSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MGIsIDB4NzMgfSwgMiB9LAo+ICsJCSAgIHsg eyAweDBjLCAweDczIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwZSwgMHhiMCB9LCAyIH0sCj4gKwkJ ICAgeyB7IDB4MGYsIDB4YWUgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDExLCAweGI4IH0sIDIgfSwK PiArCQkgICB7IHsgMHgxMywgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTgsIDB4ODAgfSwg MiB9LAo+ICsJCSAgIHsgeyAweDU5LCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1YSwgMHgw MCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NWIsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDVj LCAweDgwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1ZCwgMHg4MSB9LCAyIH0sCj4gKwkJICAgeyB7 IDB4NWUsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDVmLCAweDAxIH0sIDIgfSwKPiArCQkg ICB7IHsgMHg3MiwgMHgxMSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NjgsIDB4MDMgfSwgMiB9LAo+ ICsJCSAgIC8qIENNRDJfUDQgKi8KPiArCQkgICB7IHsgMHhGRiwgMHgyNCB9LCAyIH0sCj4gKwkJ ICAgeyB7IDB4RkIsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDAwLCAweDFDIH0sIDIgfSwK PiArCQkgICB7IHsgMHgwMSwgMHgwQiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDIsIDB4MEMgfSwg MiB9LAo+ICsJCSAgIHsgeyAweDAzLCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwNCwgMHgw RiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDUsIDB4MTAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDA2 LCAweDEwIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwNywgMHgxMCB9LCAyIH0sCj4gKwkJICAgeyB7 IDB4MDgsIDB4ODkgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDA5LCAweDhBIH0sIDIgfSwKPiArCQkg ICB7IHsgMHgwQSwgMHgxMyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MEIsIDB4MTMgfSwgMiB9LAo+ ICsJCSAgIHsgeyAweDBDLCAweDE1IH0sIDIgfSwKPiArCQkgICB7IHsgMHgwRCwgMHgxNSB9LCAy IH0sCj4gKwkJICAgeyB7IDB4MEUsIDB4MTcgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDBGLCAweDE3 IH0sIDIgfSwKPiArCQkgICB7IHsgMHgxMCwgMHgxQyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MTEs IDB4MEIgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDEyLCAweDBDIH0sIDIgfSwKPiArCQkgICB7IHsg MHgxMywgMHgwMSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MTQsIDB4MEYgfSwgMiB9LAo+ICsJCSAg IHsgeyAweDE1LCAweDEwIH0sIDIgfSwKPiArCQkgICB7IHsgMHgxNiwgMHgxMCB9LCAyIH0sCj4g KwkJICAgeyB7IDB4MTcsIDB4MTAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDE4LCAweDg5IH0sIDIg fSwKPiArCQkgICB7IHsgMHgxOSwgMHg4QSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MUEsIDB4MTMg fSwgMiB9LAo+ICsJCSAgIHsgeyAweDFCLCAweDEzIH0sIDIgfSwKPiArCQkgICB7IHsgMHgxQywg MHgxNSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MUQsIDB4MTUgfSwgMiB9LAo+ICsJCSAgIHsgeyAw eDFFLCAweDE3IH0sIDIgfSwKPiArCQkgICB7IHsgMHgxRiwgMHgxNyB9LCAyIH0sCj4gKwkJICAg LyogU1RWICovCj4gKwkJICAgeyB7IDB4MjAsIDB4NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDIx LCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHgyMiwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7 IDB4MjMsIDB4NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDI0LCAweDQwIH0sIDIgfSwKPiArCQkg ICB7IHsgMHgyNSwgMHg2RCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MjYsIDB4NDAgfSwgMiB9LAo+ ICsJCSAgIHsgeyAweDI3LCAweDQwIH0sIDIgfSwKPiArCQkgICAvKiBWZW5kICovCj4gKwkJICAg eyB7IDB4RTAsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweERDLCAweDIxIH0sIDIgfSwKPiAr CQkgICB7IHsgMHhERCwgMHgyMiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4REUsIDB4MDcgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweERGLCAweDA3IH0sIDIgfSwKPiArCQkgICB7IHsgMHhFMywgMHg2RCB9 LCAyIH0sCj4gKwkJICAgeyB7IDB4RTEsIDB4MDcgfSwgMiB9LAo+ICsJCSAgIHsgeyAweEUyLCAw eDA3IH0sIDIgfSwKPiArCQkgICAvKiBVRCAqLwo+ICsJCSAgIHsgeyAweDI5LCAweEQ4IH0sIDIg fSwKPiArCQkgICB7IHsgMHgyQSwgMHgyQSB9LCAyIH0sCj4gKwkJICAgLyogQ0xLICovCj4gKwkJ ICAgeyB7IDB4NEIsIDB4MDMgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDRDLCAweDExIH0sIDIgfSwK PiArCQkgICB7IHsgMHg0RCwgMHgxMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NEUsIDB4MDEgfSwg MiB9LAo+ICsJCSAgIHsgeyAweDRGLCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1MCwgMHgx MCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTEsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDUy LCAweDgwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1MywgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7 IDB4NTYsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDU0LCAweDA3IH0sIDIgfSwKPiArCQkg ICB7IHsgMHg1OCwgMHgwNyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTUsIDB4MjUgfSwgMiB9LAo+ ICsJCSAgIC8qIFJlc2V0IFhET05CICovCj4gKwkJICAgeyB7IDB4NUIsIDB4NDMgfSwgMiB9LAo+ ICsJCSAgIHsgeyAweDVDLCAweDAwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1RiwgMHg3MyB9LCAy IH0sCj4gKwkJICAgeyB7IDB4NjAsIDB4NzMgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDYzLCAweDIy IH0sIDIgfSwKPiArCQkgICB7IHsgMHg2NCwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4Njcs IDB4MDggfSwgMiB9LAo+ICsJCSAgIHsgeyAweDY4LCAweDA0IH0sIDIgfSwKPiArCQkgICAvKiBS ZXNvbHV0aW9uOjE0NDB4MjU2MCAqLwo+ICsJCSAgIHsgeyAweDcyLCAweDAyIH0sIDIgfSwKPiAr CQkgICAvKiBtdXggKi8KPiArCQkgICB7IHsgMHg3QSwgMHg4MCB9LCAyIH0sCj4gKwkJICAgeyB7 IDB4N0IsIDB4OTEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDdDLCAweEQ4IH0sIDIgfSwKPiArCQkg ICB7IHsgMHg3RCwgMHg2MCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4N0YsIDB4MTUgfSwgMiB9LAo+ ICsJCSAgIHsgeyAweDc1LCAweDE1IH0sIDIgfSwKPiArCQkgICAvKiBBQk9GRiAqLwo+ICsJCSAg IHsgeyAweEIzLCAweEMwIH0sIDIgfSwKPiArCQkgICB7IHsgMHhCNCwgMHgwMCB9LCAyIH0sCj4g KwkJICAgeyB7IDB4QjUsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIC8qIFNvdXJjZSBFUSAqLwo+ICsJ CSAgIHsgeyAweDc4LCAweDAwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg3OSwgMHgwMCB9LCAyIH0s Cj4gKwkJICAgeyB7IDB4ODAsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDgzLCAweDAwIH0s IDIgfSwKPiArCQkgICAvKiBGUCBCUCAqLwo+ICsJCSAgIHsgeyAweDkzLCAweDBBIH0sIDIgfSwK PiArCQkgICB7IHsgMHg5NCwgMHgwQSB9LCAyIH0sCj4gKwkJICAgLyogSW52ZXJzaW9uIFR5cGUg Ki8KPiArCQkgICB7IHsgMHg4QSwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4OUIsIDB4RkYg fSwgMiB9LAo+ICsJCSAgIC8qIElNR1NXQVAgPTEgQFBvcnRTd2FwPTEgKi8KPiArCQkgICB7IHsg MHg5RCwgMHhCMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4OUYsIDB4NjMgfSwgMiB9LAo+ICsJCSAg IHsgeyAweDk4LCAweDEwIH0sIDIgfSwKPiArCQkgICAvKiBGUk0gKi8KPiArCQkgICB7IHsgMHhF QywgMHgwMCB9LCAyIH0sCj4gKwkJICAgLyogQ01EMSAqLwo+ICsJCSAgIHsgeyAweEZGLCAweDEw IH0sIDIgfSwKPiArCQkgICAgLyogVkJQK1ZTQT0sVkZQID0gMTBIICovCj4gKwkJICAgeyB7IDB4 M0IsIDB4MDMsIDB4MEEsIDB4MEEsIH0sIDQgfSwKPiArCQkgICAvKiBGVEUgb24gKi8KPiArCQkg ICB7IHsgMHgzNSwgMHgwMCB9LCAyIH0sCj4gKwkJICAgLyogRU5fQksgPTEoYXV0byBibGFjaykg Ki8KPiArCQkgICB7IHsgMHhFNSwgMHgwMSB9LCAyIH0sCj4gKwkJICAgLyogQ01EIG1vZGUoMTAp IFZETyBtb2RlKDAzKSAqLwo+ICsJCSAgIHsgeyAweEJCLCAweDAzIH0sIDIgfSwKPiArCQkgICAv KiBOb24gUmVsb2FkIE1UUCAqLwo+ICsJCSAgIHsgeyAweEZCLCAweDAxIH0sIDIgfSwKPiArCQkg ICAvKiBTbHBPdXQgKyBEaXNwT24gKi8KPiArCQkgICAvLzA1IDAxIDAwIDAwIDc4IDAwIDAyIDEx IDAwCj4gKwkJICAgLy8wNSAwMSAwMCAwMCA3OCAwMCAwMiAyOSAwMAoKV2UgY2FuIGRyb3AgdGhl IGNvbW1lbnRlZCBsaW5lcy4gSWYgcG9zc2libGUsIGl0IHdvdWxkIGJlIG5pY2UKdG8gaGF2ZSBz b21lIG1vcmUgZGVzY3JpcHRpb24gYWJvdXQgdGhlIHJlZ2lzdGVycywgYnV0IEkgY2FuIGltYWdp bmUKdGhhdCBpbmZvIGJlaW5nIGhhcmQgdG8gcmV0cmlldmUuCgo+ICt9Owo+ICsKPiArc3RhdGlj IGludCB0cnVseV93cXhnYV9wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4g KwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsK PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKipkc2lzID0gY3R4LT5kc2k7Cj4gKwlzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkOwo+ICsJaW50IHJldCwgaSwgajsKPiArCj4gKwlpZiAoY3R4LT5w cmVwYXJlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXQgPSB0cnVseV93cXhnYV9wb3dlcl9v bihjdHgpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlkc2lzWzBd LT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOwo+ICsJZHNpc1sxXS0+bW9kZV9mbGFn cyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKPiArCj4gKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0la RShwYW5lbF9jbWRzKTsgaisrKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewo+ICsJ CQlkID0gZHNpc1tpXTsKPiArCQkJcmV0ID0gbWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihkc2lz W2ldLAo+ICsJCQkJCXBhbmVsX2NtZHNbal0uY29tbWFuZHMsCj4gKwkJCQkJcGFuZWxfY21kc1tq XS5zaXplKTsKPiArCQkJaWYgKHJldCA8IDApIHsKPiArCQkJCS8qIGNvbnRpbnVlIGFueXdheSAq Lwo+ICsJCQkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBjbWQgbm8gJWQsIGVycjogJWRc biIsCj4gKwkJCQkJCWosIHJldCk7CgpUaGlzIG1heSBoYXZlIGJlZW4gZG9uZSBmb3IgZGVidWcg cHVycG9zZXMuIEl0IHdvdWxkIGJlIHByb2JhYmx5IGJldHRlcgp0byBiYWlsIG91dC4KCj4gKwkJ CX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCj4gKwkJ aWYgKG1pcGlfZHNpX2Rjc19leGl0X3NsZWVwX21vZGUoZHNpc1tpXSkgPCAwKSB7Cj4gKwkJCWRl dl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gZXhpdCBzbGVlcCBtb2RlXG4iKTsKPiArCQkJcmV0 dXJuIC1FQ09NTTsKPiArCQl9Cj4gKwltc2xlZXAoNzgpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCAyOyBpKyspCj4gKwkJaWYgKG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9vbihkc2lzW2ldKSA8 IDApIHsKPiArCQkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBzZW5kIGRpc3BsYXkgb25c biIpOwo+ICsJCQlyZXR1cm4gLUVDT01NOwo+ICsJCX0KPiArCW1zbGVlcCg3OCk7Cj4gKwo+ICsJ Y3R4LT5wcmVwYXJlZCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdHJ1bHlfd3F4Z2FfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4g KwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsK PiArCj4gKwlpZiAoY3R4LT5lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChjdHgt PmJhY2tsaWdodCkgewo+ICsJCWN0eC0+YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5L X1VOQkxBTks7Cj4gKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoY3R4LT5iYWNrbGlnaHQpOwo+ ICsJfQo+ICsJY3R4LT5lbmFibGVkID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCB0cnVseV93cXhnYV9nZXRfbW9kZXMoc3RydWN0IGRybV9wYW5lbCAqcGFu ZWwpCj4gK3sKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29u bmVjdG9yOwo+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhn YShwYW5lbCk7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiArCj4gKwltb2Rl ID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKPiArCWlmICghbW9kZSkgewo+ICsJ CWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRpc3BsYXkgbW9kZVxu Iik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3Zp ZGVvbW9kZSgmY3R4LT52bSwgbW9kZSk7Cj4gKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0 aF9tbSA9IDc0Owo+ICsJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gMTMxOwo+ ICsJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVG RVJSRUQ7Cj4gKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4gKwo+ICsJ cmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNz IHRydWx5X3dxeGdhX2RybV9mdW5jcyA9IHsKPiArCS5kaXNhYmxlID0gdHJ1bHlfd3F4Z2FfZGlz YWJsZSwKPiArCS51bnByZXBhcmUgPSB0cnVseV93cXhnYV91bnByZXBhcmUsCj4gKwkucHJlcGFy ZSA9IHRydWx5X3dxeGdhX3ByZXBhcmUsCj4gKwkuZW5hYmxlID0gdHJ1bHlfd3F4Z2FfZW5hYmxl LAo+ICsJLmdldF9tb2RlcyA9IHRydWx5X3dxeGdhX2dldF9tb2RlcywKPiArfTsKPiArCj4gK3N0 YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcGFuZWxfYWRkKHN0cnVjdCB0cnVseV93cXhnYSAqY3R4KQo+ ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ ICsJY3R4LT5zdXBwbGllc1swXS5zdXBwbHkgPSAidmRkaW8iOwo+ICsJY3R4LT5zdXBwbGllc1sx XS5zdXBwbHkgPSAidmRkYSI7Cj4gKwljdHgtPnN1cHBsaWVzWzJdLnN1cHBseSA9ICJsYWIiOwo+ ICsJY3R4LT5zdXBwbGllc1szXS5zdXBwbHkgPSAiaWJiIjsKPiArCXJldCA9IGRldm1fcmVndWxh dG9yX2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKPiArCQkJCSAgICAg IGN0eC0+c3VwcGxpZXMpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09V VF9ISUdIKTsKPiArCWlmIChJU19FUlIoY3R4LT5yZXNldF9ncGlvKSkgewo+ICsJCWRldl9lcnIo ZGV2LCAiY2Fubm90IGdldCByZXNldC1ncGlvcyAlbGRcbiIsCj4gKwkJCVBUUl9FUlIoY3R4LT5y ZXNldF9ncGlvKSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKTsKPiArCX0K PiArCj4gKwljdHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgIm1vZGUiLCBHUElP RF9PVVRfTE9XKTsKPiArCWlmIChJU19FUlIoY3R4LT5tb2RlX2dwaW8pKSB7Cj4gKwkJZGV2X2Vy cihkZXYsICJjYW5ub3QgZ2V0IG1vZGUgZ3BpbyAlbGRcbiIsCj4gKwkJCVBUUl9FUlIoY3R4LT5t b2RlX2dwaW8pKTsKPiArCQljdHgtPm1vZGVfZ3BpbyA9IE5VTEw7Cj4gKwkJcmV0dXJuIFBUUl9F UlIoY3R4LT5tb2RlX2dwaW8pOwo+ICsJfQo+ICsKPiArCXJldCA9IHBpbmN0cmxfcG1fc2VsZWN0 X2RlZmF1bHRfc3RhdGUoZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgIiVz OiBmYWlsZWQgdG8gc2V0IHBpbmN0cmwgZGVmYXVsdCBzdGF0ZSwgJWRcbiIsCj4gKwkJCV9fZnVu Y19fLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gb2ZfZ2V0X3Zp ZGVvbW9kZShkZXYtPm9mX25vZGUsICZjdHgtPnZtLCAwKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJZHJtX3BhbmVsX2luaXQoJmN0eC0+cGFuZWwpOwo+ICsJY3R4 LT5wYW5lbC5kZXYgPSBkZXY7Cj4gKwljdHgtPnBhbmVsLmZ1bmNzID0gJnRydWx5X3dxeGdhX2Ry bV9mdW5jczsKPiArCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwpOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0cnVseV93cXhnYV9wYW5lbF9kZWwoc3RydWN0IHRy dWx5X3dxeGdhICpjdHgpCj4gK3sKPiArCWlmIChjdHgtPnBhbmVsLmRldikKPiArCQlkcm1fcGFu ZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKPiArCj4gKwlpZiAoY3R4LT5iYWNrbGlnaHQpCj4gKwkJ cHV0X2RldmljZSgmY3R4LT5iYWNrbGlnaHQtPmRldik7Cj4gKwo+ICsJaWYgKGN0eC0+ZHNpWzFd KQo+ICsJCXB1dF9kZXZpY2UoJmN0eC0+ZHNpWzFdLT5kZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHRydWx5X3dxeGdhX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2Owo+ICsJc3RydWN0IHRydWx5X3dxeGdh ICpjdHg7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpzZWNvbmRhcnkgPSBOVUxMOwo+ICsJ c3RydWN0IGRldmljZV9ub2RlICpucDsKPiArCWludCByZXQ7Cj4gKwo+ICsJZHNpLT5sYW5lcyA9 IDQ7Cj4gKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4gKwlkc2ktPm1vZGVf ZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVP VVMgfAo+ICsJCQkgIE1JUElfRFNJX01PREVfTFBNOwo+ICsKPiArCS8qIE9ubHkgRFNJLUxJTksx IG5vZGUgaGFzICJsaW5rMiIgZW50cnkuICovCj4gKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUoZHNp LT5kZXYub2Zfbm9kZSwgImxpbmsyIiwgMCk7Cj4gKwlpZiAobnApIHsKPiArCQlzZWNvbmRhcnkg PSBvZl9maW5kX21pcGlfZHNpX2RldmljZV9ieV9ub2RlKG5wKTsKPiArCQlvZl9ub2RlX3B1dChu cCk7Cj4gKwo+ICsJCWlmICghc2Vjb25kYXJ5KQo+ICsJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsK PiArCj4gKwkJY3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVM KTsKPiArCQlpZiAoIWN0eCkgewo+ICsJCQlwdXRfZGV2aWNlKCZzZWNvbmRhcnktPmRldik7Cj4g KwkJCXJldHVybiAtRU5PTUVNOwo+ICsJCX0KPiArCQltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ks IGN0eCk7Cj4gKwo+ICsJCWN0eC0+ZGV2ID0gZGV2Owo+ICsJCWN0eC0+ZHNpWzBdID0gZHNpOwo+ ICsJCWN0eC0+ZHNpWzFdID0gc2Vjb25kYXJ5Owo+ICsKPiArCQlyZXQgPSB0cnVseV93cXhnYV9w YW5lbF9hZGQoY3R4KTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCXB1dF9kZXZpY2UoJnNlY29uZGFy eS0+ZGV2KTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9CgpUaGlzIHNob3VsZCBnbyB3 aGVuIHdlIHVzZSB0aGUgb2YtZ3JhcGggYmluZGluZ3MuIFRoZSBzZWNvbmQKbWlwaV9kc2lfZGV2 aWNlIG5lZWRzIHRvIGJlIGNyZWF0ZWQgbWFudWFsbHkgaW4gdGhlIGRyaXZlcgp1c2luZyBtaXBp X2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbCgpLiBZb3UgY291bGQgbG9vayBhdCB0aGUKQURWNzUx MSBicmlkZ2UgZHJpdmVyIGFzIGFuIGV4YW1wbGUuIFdlIHdvdWxkIGV2ZW50dWFsbHkgbmVlZAp0 byBjYWxsIG1pcGlfZHNpX2F0dGFjaCgpIG9uIHRoZSBzZWNvbmQgZGV2aWNlIHRvby4KClRoYW5r cywKQXJjaGl0Cgo+ICsKPiArCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlpZiAoc2Vjb25kYXJ5KQo+ICsJCQl0cnVseV93cXhnYV9wYW5lbF9kZWwo Y3R4KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRzaSkKPiArewo+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2 ZGF0YShkc2kpOwo+ICsKPiArCW1pcGlfZHNpX2RldGFjaChkc2kpOwo+ICsKPiArCS8qIGRlbGV0 ZSBwYW5lbCBvbmx5IGZvciB0aGUgRFNJMSBpbnRlcmZhY2UgKi8KPiArCWlmIChjdHgpCj4gKwkJ dHJ1bHlfd3F4Z2FfcGFuZWxfZGVsKGN0eCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRydWx5X3dxeGdhX29mX21hdGNoW10g PSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gInRydWx5LGR1YWxfd3F4Z2EiLCB9LAo+ICsJeyB9Cj4g K307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRydWx5X3dxeGdhX29mX21hdGNoKTsKPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIHRydWx5X3dxeGdhX2RyaXZlciA9IHsK PiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAicGFuZWxfdHJ1bHlfd3F4Z2EiLAo+ICsJCS5v Zl9tYXRjaF90YWJsZSA9IHRydWx5X3dxeGdhX29mX21hdGNoLAo+ICsJfSwKPiArCS5wcm9iZSA9 IHRydWx5X3dxeGdhX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHRydWx5X3dxeGdhX3JlbW92ZSwKPiAr fTsKPiArbW9kdWxlX21pcGlfZHNpX2RyaXZlcih0cnVseV93cXhnYV9kcml2ZXIpOwo+ICsKPiAr TU9EVUxFX0RFU0NSSVBUSU9OKCJ0cnVseSB3cXhnYSBEU0kgUGFuZWwgRHJpdmVyIik7Cj4gK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZnJlZWRyZW5vCg==