From mboxrd@z Thu Jan 1 00:00:00 1970 From: abhinavk@codeaurora.org Subject: Re: [DPU PATCH 1/2] drm/panel: Add Truly Dual DSI video mode panel Date: Mon, 09 Apr 2018 19:30:13 -0700 Message-ID: <1a3f888e591713a258834cd6d55b9465@codeaurora.org> 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Archit Taneja Cc: linux-arm-msm@vger.kernel.org, manojavm@codeaurora.org, dri-devel@lists.freedesktop.org, hoegsberg@google.com, freedreno@lists.freedesktop.org, linux-arm-msm-owner@vger.kernel.org, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org T24gMjAxOC0wNC0wOCAwOTozNiwgQXJjaGl0IFRhbmVqYSB3cm90ZToKPiBIaSBBYmhpbmF2LAo+ IAo+IFRoYW5rcyBmb3IgcG9zdGluZyB0aGlzIGRyaXZlci4gU29tZSBjb21tZW50cyBiZWxvdy4K PiAKPiBPbiBTYXR1cmRheSAwNyBBcHJpbCAyMDE4IDEyOjM2IFBNLCBBYmhpbmF2IEt1bWFyIHdy b3RlOgo+PiBGcm9tOiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgo+PiAK Pj4gQWRkIHN1cHBvcnQgZm9yIHRydWx5IGR1YWwgRFNJIHZpZGVvIG1vZGUgcGFuZWwKPj4gcGFu ZWwgdXNlZCBpbiBNU00gcmVmZXJlbmNlIHBsYXRmb3JtcyA+Cj4+IFNpZ25lZC1vZmYtYnk6IEFy Y2hpdCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+Cj4+IFNpZ25lZC1vZmYtYnk6IEFi aGluYXYgS3VtYXIgPGFiaGluYXZrQGNvZGVhdXJvcmEub3JnPgo+PiAtLS0KPj4gICAuLi4vYmlu ZGluZ3MvZGlzcGxheS90cnVseSxkdWFsX3dxeGdhLnR4dCAgICAgICAgICB8ICA0NyArKwo+PiAg IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgICA3 ICsKPj4gICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCj4+ICAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LWR1YWwtZHNp LmMgICAgICAgfCA1MzAgCj4+ICsrKysrKysrKysrKysrKysrKysrKwo+PiAgIDQgZmlsZXMgY2hh bmdlZCwgNTg1IGluc2VydGlvbnMoKykKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgCj4+IERvY3Vt ZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RydWx5LGR1YWxfd3F4Z2EudHh0 Cj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVs eS1kdWFsLWRzaS5jCj4+IAo+PiBkaWZmIC0tZ2l0IAo+PiBhL0RvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RydWx5LGR1YWxfd3F4Z2EudHh0IAo+PiBiL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RydWx5LGR1YWxfd3F4Z2EudHh0Cj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmExYjI0YzEKPj4gLS0tIC9k ZXYvbnVsbAo+PiArKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxh eS90cnVseSxkdWFsX3dxeGdhLnR4dAo+PiBAQCAtMCwwICsxLDQ3IEBACj4+ICtUcnVseSBtb2Rl bCBOVDM1NTk3IDE0NDB4MjU2MCBEU0kgUGFuZWwKPj4gKwo+PiArUmVxdWlyZWQgcHJvcGVydGll czoKPj4gKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJ0cnVseSxkdWFsX3dxeGdhIgo+IAo+IFRo ZSBjb21wYXRpYmxlIHN0cmluZywga2VybmVsIGNvbmZpZyBhbmQgdGhlIGRyaXZlciBmaWxlIHNo b3VsZCBiZSAKPiBiYXNlZAo+IG9uIHRoZSBwYW5lbCBtb2RlbCBuby4gVGhlcmUgY2FuIGJlIG1h bnkgdHJ1bHkgYmFzZWQgcGFuZWxzIHRoYXQKPiBzdXBwb3J0IHdxeGdhLiBTb21ldGhpbmcgbGlr ZSAidHJ1bHksbnQzNTU5NyIgd291bGQgYmUgYmV0dGVyLgo+IApbQWJoaW5hdl0gWWVzLCB3aWxs IGNoYW5nZSBpdCBpbiB2Mi4KCj4+ICstIHZkZGEtc3VwcGx5OiBwaGFuZGxlIG9mIHRoZSByZWd1 bGF0b3IgdGhhdCBwcm92aWRlcyB0aGUgc3VwcGx5IAo+PiB2b2x0YWdlCj4+ICsgIFBvd2VyIElD IHN1cHBseQo+PiArLSBsYWItc3VwcGx5OiBwaGFuZGxlIG9mIHRoZSByZWd1bGF0b3IgdGhhdCBw cm92aWRlcyB0aGUgc3VwcGx5IAo+PiB2b2x0YWdlCj4+ICsgIGZvciBMQ0QgYmlhcwo+PiArLSBp YmItc3VwcGx5OiBwaGFuZGxlIG9mIHRoZSByZWd1bGF0b3IgdGhhdCBwcm92aWRlcyB0aGUgc3Vw cGx5IAo+PiB2b2x0YWdlCj4+ICsgIGZvciBMQ0QgYmlhcwo+IAo+IEJvdGggc2VlbSB0byBoYXZl IHRoZSBzYW1lIGRlc2NyaXB0aW9uLiBBcmVuJ3QgbGFiIGFuZCBpYmIgcXVhbGNvbW0KPiBzcGVj aWZpYyB0ZXJtcz8gQ291bGQgd2UgdXNlIHRoZSBwaW4gbmFtZXMgc3BlY2lmaWVkIGluIHRoZSBw YW5lbCdzCj4gZGF0YSBzaGVldD8KPiAKW0FiaGluYXZdIFRoZXJlIGlzbnQgYSBudW1iZXIgc3Bl Y2lmaWVkIG9uIHRoZSBkYXRhIHNoZWV0LiBJIHdpbGwgdXNlIAp2ZGlzcHAtc3VwcGx5IGFuZAp2 ZGlzcG4tc3VwcGx5IC4gRG9lcyB0aGF0IHdvcms/CgoKPj4gKy0gcmVzZXQtZ3Bpb3M6IHBoYW5k bGUgb2YgZ3BpbyBmb3IgcmVzZXQgbGluZQo+PiArICBUaGlzIHNob3VsZCBiZSA4bUEsIGdwaW8g Y2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgbXV4LCBwaW5jdHJsLCAKPj4gcGluY3RybC1uYW1lcwo+ PiArLSBtb2RlLWdwaW9zOiBwaGFuZGxlIG9mIHRoZSBncGlvIGZvciBjaG9vc2luZyB0aGUgbW9k ZSBvZiB0aGUgCj4+IGRpc3BsYXkKPj4gKyAgZm9yIHNpbmdsZSBEU0kgb3IgRHVhbCBEU0kKPiAK PiBDb3VsZCB3ZSBkZXNjcmliZSBoZXJlIGhvdyB0byB1c2UgdGhpcyBncGlvPyBJLmUsIHdoZXRo ZXIgd2UgbmVlZCB0byAKPiBzZXQKPiBpdCB0byBsb3cgZm9yIGR1YWwgRFNJLCBldGM/Cj4gCltB YmhpbmF2XSBZZXMsIHdpbGwgZG8gdGhpcyBpbiB2Mi4KPj4gKy0gZGlzcGxheS10aW1pbmdzOiBO b2RlIGZvciB0aGUgUGFuZWwgdGltaW5ncwo+PiArLSBsaW5rMjogcGhhbmRsZSB0byB0aGUgc2Vj b25kYXJ5IG5vZGUgb2YgdGhlIHBhbmVsCj4gCj4gVGhlIGxpbmsyIGJpbmRpbmcgd2FzIGEgdGVt cG9yYXJ5IGhhY2sgd2UgdXNlZC4gV2Ugc2hvdWxkIHVzZSB0aGUKPiBvZi1ncmFwaCBiaW5kaW5n cyB0byByZXByZXNlbnQgdGhlIHR3byBEU0kgaW5wdXQgcG9ydHMgb2YgdGhlIHBhbmVsLgo+IApb QWJoaW5hdl0gQWxyaWdodCB3aWxsIHN0YXJ0IHVzaW5nIG9mLWdyYXBoIGluIHRoZSBuZXh0IHBh dGNoc2V0Lgo+PiArCj4+ICtFeGFtcGxlOgo+PiArCj4+ICsJZHNpQGFlOTQwMDAgewo+PiArCQlw YW5lbEAwIHsKPj4gKwkJCWNvbXBhdGlibGUgPSAidHJ1bHksZHVhbF93cXhnYSI7Cj4+ICsJCQly ZWcgPSA8MD47Cj4+ICsJCQlsaW5rMiA9IDwmbGluazI+Owo+PiArCQkJdmRkYS1zdXBwbHkgPSA8 JnBtODk5OF9sMTQ+Owo+PiArCj4+ICsJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic3Vz cGVuZCI7Cj4+ICsJCQlwaW5jdHJsLTAgPSA8JnNkZV9kc2lfYWN0aXZlPjsKPj4gKwkJCXBpbmN0 cmwtMSA9IDwmc2RlX2RzaV9zdXNwZW5kPjsKPj4gKwo+PiArCQkJcmVzZXQtZ3Bpb3MgPSA8JnRs bW0gNiAwPjsKPj4gKwkJCW1vZGUtZ3Bpb3MgPSA8JnRsbW0gNTIgMD47Cj4+ICsJCQlkaXNwbGF5 LXRpbWluZ3Mgewo+PiArCQkJCXRpbWluZzA6IHRpbWluZy0wIHsKPj4gKwkJCQkJY2xvY2stZnJl cXVlbmN5ID0gPDI2ODMxNjEzOD47Cj4+ICsJCQkJCWhhY3RpdmUgPSA8MTQ0MD47Cj4+ICsJCQkJ CXZhY3RpdmUgPSA8MjU2MD47Cj4+ICsJCQkJCWhmcm9udC1wb3JjaCA9IDwyMDA+Owo+PiArCQkJ CQloYmFjay1wb3JjaCA9IDw2ND47Cj4+ICsJCQkJCWhzeW5jLWxlbiA9IDwzMj47Cj4+ICsJCQkJ CXZmcm9udC1wb3JjaCA9IDw4PjsKPj4gKwkJCQkJdmJhY2stcG9yY2ggPSA8Nz47Cj4+ICsJCQkJ CXZzeW5jLWxlbiA9IDwxPjsKPj4gKwkJCQl9Owo+PiArCQkJfTsKPj4gKwkJfTsKPj4gKwl9Owo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgCj4+IGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPj4gaW5kZXggOTg4MDQ4ZS4uYTYzYzNmNyAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcKPj4gQEAgLTE2OCw0ICsxNjgsMTEgQEAgY29uZmlnIERSTV9Q QU5FTF9TSVRST05JWF9TVDc3ODlWCj4+ICAgCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBl bmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4Cj4+ICAgCSAgU1Q3Nzg5ViBjb250cm9sbGVy IGZvciAyNDB4MzIwIExDRCBwYW5lbHMKPj4gICArY29uZmlnIERSTV9QQU5FTF9UUlVMWV9XUVhH QQo+PiArCXRyaXN0YXRlICJUcnVseSBXUVhHQSIKPj4gKwlkZXBlbmRzIG9uIE9GCj4+ICsJZGVw ZW5kcyBvbiBEUk1fTUlQSV9EU0kKPj4gKwloZWxwCj4+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSB3 YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBUcnVseSBXUVhHQSBEdWFsIERTSQo+PiArCSAgVmlk ZW8gTW9kZSBwYW5lbAo+PiAgIGVuZG1lbnUKW0FiaGluYXZdIFRoZXNlIGNvbmZpZ3Mgd2lsbCBi ZSB1cGRhdGVkIHRvbwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2Vm aWxlIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+PiBpbmRleCAzZDJhODhk Li42NDg5MWY2IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUK Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4+IEBAIC0xNywzICsxNyw0 IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNXVkYxRykgKz0gCj4+IHBhbmVsLXNl aWtvLTQzd3ZmMWcubwo+PiAgIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNY MDEpICs9IAo+PiBwYW5lbC1zaGFycC1scTEwMXIxc3gwMS5vCj4+ICAgb2JqLSQoQ09ORklHX0RS TV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSkgKz0gCj4+IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAx Lm8KPj4gICBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVs LXNpdHJvbml4LXN0Nzc4OXYubwo+PiArb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9UUlVMWV9XUVhH QSkgKz0gcGFuZWwtdHJ1bHktZHVhbC1kc2kubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3BhbmVsL3BhbmVsLXRydWx5LWR1YWwtZHNpLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLXRydWx5LWR1YWwtZHNpLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5k ZXggMDAwMDAwMC4uNDc4OTFlZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9wYW5lbC10cnVseS1kdWFsLWRzaS5jCj4+IEBAIC0wLDAgKzEsNTMwIEBACj4+ ICsvKiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgo+IAo+IFdlIHNob3VsZCB1c2UgdGhlIFNQRFggbGljZW5zZSBoZWFkZXJzIGhl cmUuCj4gCltBYmhpbmF2XSBJcyB0aGVyZSBhIHJlZmVyZW5jZSBJIGNhbiB1c2U/IE5lZWQgdG8g bWFrZSBzdXJlIG9mIHRoaXMuCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhbmQKPj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4g KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKPj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVy Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgo+PiArCj4+ICsjaW5jbHVkZSA8dmlkZW8vbWlw aV9kaXNwbGF5Lmg+Cj4+ICsjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+Cj4+ICsjaW5j bHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ PiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlf ZHNpLmg+Cj4+ICsKPj4gK3N0cnVjdCB0cnVseV93cXhnYSB7Cj4+ICsJc3RydWN0IGRldmljZSAq ZGV2Owo+PiArCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7Cj4+ICsKPj4gKwlzdHJ1Y3QgcmVndWxh dG9yX2J1bGtfZGF0YSBzdXBwbGllc1s0XTsKPj4gKwo+PiArCXN0cnVjdCBncGlvX2Rlc2MgKnJl c2V0X2dwaW87Cj4+ICsJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvOwo+PiArCj4+ICsJc3Ry dWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKPj4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZt Owo+PiArCj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpWzJdOwo+PiArCj4+ICsJYm9v bCBwcmVwYXJlZDsKPj4gKwlib29sIGVuYWJsZWQ7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW5s aW5lIHN0cnVjdCB0cnVseV93cXhnYSAqcGFuZWxfdG9fdHJ1bHlfd3F4Z2Eoc3RydWN0IAo+PiBk cm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0 cnVjdCB0cnVseV93cXhnYSwgcGFuZWwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5 X3dxeGdhX3Bvd2VyX29uKHN0cnVjdCB0cnVseV93cXhnYSAqY3R4KQo+PiArewo+PiArCWludCBy ZXQ7Cj4+ICsKPj4gKwlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1sxXS5j b25zdW1lciwgNjIwMDApOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4g KwlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1syXS5jb25zdW1lciwgMTAw MDAwKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0ID0gcmVn dWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbM10uY29uc3VtZXIsIDEwMDAwMCk7Cj4+ICsJ aWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsKPiAKPiBXZSBjb3VsZCBtYWtlIGEgY29uc3Qgc3Rh dGljIHN0cnVjdCBhcnJheSBzcGVjaWZ5aW5nIHRoZSByZWd1bGF0b3IKPiBuYW1lcyAodG8gYmUg dXNlZCBkdXJpbmcgcHJvYmUpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHBvd2VyIG9uIGFuZAo+ IHBvd2VyIG9mZiBsb2Fkcy4gVGhhdCBzaG91bGQgbWFrZSB0aGluZ3MgYSBiaXQgY2xlYW5lci4K PiAKW0FiaGluYXZdIFllcywgd2lsbCBkbyBpdCBpbiB0aGUgbmV4dCBwYXRjaHNldC4KPj4gKwo+ PiArCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMp LCAKPj4gY3R4LT5zdXBwbGllcyk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7 Cj4+ICsKPj4gKwltc2xlZXAoMjApOwo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dw aW8sIDEpOwo+PiArCXVzbGVlcF9yYW5nZSgyMDAwMCwgMjAxMDApOwo+PiArCWdwaW9kX3NldF92 YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOwo+PiArCXVzbGVlcF9yYW5nZSgyMDAwMCwgMjAxMDAp Owo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOwo+PiArCXVzbGVlcF9y YW5nZSg1MDAwMCwgNTAxMDApOwo+PiArCj4+ICsJLyogZHVhbCBwb3J0ICovCj4+ICsJZ3Bpb2Rf c2V0X3ZhbHVlKGN0eC0+bW9kZV9ncGlvLCAwKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Bvd2VyX29mZihzdHJ1Y3QgdHJ1bHlfd3F4 Z2EgKmN0eCkKPj4gK3sKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0 eC0+cmVzZXRfZ3BpbywgMCk7Cj4+ICsJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3Vw cGxpZXNbMV0uY29uc3VtZXIsIDYyMDAwKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0 Owo+PiArCj4+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShjdHgt PnN1cHBsaWVzKSwgCj4+IGN0eC0+c3VwcGxpZXMpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IHRydWx5X3dxeGdhX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+ICt7Cj4+ICsJ c3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7Cj4+ ICsKPj4gKwlpZiAoIWN0eC0+ZW5hYmxlZCkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlpZiAo Y3R4LT5iYWNrbGlnaHQpIHsKPj4gKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0gRkJf QkxBTktfUE9XRVJET1dOOwo+PiArCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhjdHgtPmJhY2ts aWdodCk7Cj4+ICsJfQo+PiArCj4+ICsJY3R4LT5lbmFibGVkID0gZmFsc2U7Cj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfdW5wcmVwYXJlKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0g cGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOwo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug Kipkc2lzID0gY3R4LT5kc2k7Cj4+ICsJaW50IHJldCA9IDAsIGk7Cj4+ICsKPj4gKwlpZiAoIWN0 eC0+cHJlcGFyZWQpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJZHNpc1swXS0+bW9kZV9mbGFn cyA9IDA7Cj4+ICsJZHNpc1sxXS0+bW9kZV9mbGFncyA9IDA7Cj4+ICsKPj4gKwlmb3IgKGkgPSAw OyBpIDwgMjsgaSsrKQo+PiArCQlpZiAobWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihkc2lz W2ldKSA8IDApCj4+ICsJCQlyZXQgPSAtRUNPTU07Cj4+ICsJbXNsZWVwKDc4KTsKPj4gKwo+PiAr CWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCj4+ICsJCWlmIChtaXBpX2RzaV9kY3NfZW50ZXJfc2xl ZXBfbW9kZShkc2lzW2ldKSA8IDApCj4+ICsJCQlyZXQgPSAtRUNPTU07Cj4+ICsJbXNsZWVwKDc4 KTsKPj4gKwo+PiArCXRydWx5X3dxeGdhX3Bvd2VyX29mZihjdHgpOwo+PiArCj4+ICsJY3R4LT5w cmVwYXJlZCA9IGZhbHNlOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUg TUFYX0xFTgk1Cj4+ICtzdHJ1Y3Qgewo+PiArCXU4IGNvbW1hbmRzW01BWF9MRU5dOwo+PiArCWlu dCBzaXplOwo+PiArfSBwYW5lbF9jbWRzW10gPSB7IC8qIENNRDJfUDAgKi8KPj4gKwkJICAgeyB7 IDB4ZmYsIDB4MjAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhmYiwgMHgwMSB9LCAyIH0sCj4+ICsJ CSAgIHsgeyAweDAwLCAweDAxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDEsIDB4NTUgfSwgMiB9 LAo+PiArCQkgICB7IHsgMHgwMiwgMHg0NSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDA1LCAweDQw IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDYsIDB4MTkgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgw NywgMHgxZSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDBiLCAweDczIH0sIDIgfSwKPj4gKwkJICAg eyB7IDB4MGMsIDB4NzMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwZSwgMHhiMCB9LCAyIH0sCj4+ ICsJCSAgIHsgeyAweDBmLCAweGFlIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MTEsIDB4YjggfSwg MiB9LAo+PiArCQkgICB7IHsgMHgxMywgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDU4LCAw eDgwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTksIDB4MDEgfSwgMiB9LAo+PiArCQkgICB7IHsg MHg1YSwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDViLCAweDAxIH0sIDIgfSwKPj4gKwkJ ICAgeyB7IDB4NWMsIDB4ODAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1ZCwgMHg4MSB9LCAyIH0s Cj4+ICsJCSAgIHsgeyAweDVlLCAweDAwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NWYsIDB4MDEg fSwgMiB9LAo+PiArCQkgICB7IHsgMHg3MiwgMHgxMSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDY4 LCAweDAzIH0sIDIgfSwKPj4gKwkJICAgLyogQ01EMl9QNCAqLwo+PiArCQkgICB7IHsgMHhGRiwg MHgyNCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweEZCLCAweDAxIH0sIDIgfSwKPj4gKwkJICAgeyB7 IDB4MDAsIDB4MUMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwMSwgMHgwQiB9LCAyIH0sCj4+ICsJ CSAgIHsgeyAweDAyLCAweDBDIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDMsIDB4MDEgfSwgMiB9 LAo+PiArCQkgICB7IHsgMHgwNCwgMHgwRiB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDA1LCAweDEw IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDYsIDB4MTAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgw NywgMHgxMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDA4LCAweDg5IH0sIDIgfSwKPj4gKwkJICAg eyB7IDB4MDksIDB4OEEgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwQSwgMHgxMyB9LCAyIH0sCj4+ ICsJCSAgIHsgeyAweDBCLCAweDEzIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MEMsIDB4MTUgfSwg MiB9LAo+PiArCQkgICB7IHsgMHgwRCwgMHgxNSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDBFLCAw eDE3IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MEYsIDB4MTcgfSwgMiB9LAo+PiArCQkgICB7IHsg MHgxMCwgMHgxQyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDExLCAweDBCIH0sIDIgfSwKPj4gKwkJ ICAgeyB7IDB4MTIsIDB4MEMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxMywgMHgwMSB9LCAyIH0s Cj4+ICsJCSAgIHsgeyAweDE0LCAweDBGIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MTUsIDB4MTAg fSwgMiB9LAo+PiArCQkgICB7IHsgMHgxNiwgMHgxMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDE3 LCAweDEwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MTgsIDB4ODkgfSwgMiB9LAo+PiArCQkgICB7 IHsgMHgxOSwgMHg4QSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDFBLCAweDEzIH0sIDIgfSwKPj4g KwkJICAgeyB7IDB4MUIsIDB4MTMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxQywgMHgxNSB9LCAy IH0sCj4+ICsJCSAgIHsgeyAweDFELCAweDE1IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MUUsIDB4 MTcgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxRiwgMHgxNyB9LCAyIH0sCj4+ICsJCSAgIC8qIFNU ViAqLwo+PiArCQkgICB7IHsgMHgyMCwgMHg0MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDIxLCAw eDAxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MjIsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsg MHgyMywgMHg0MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDI0LCAweDQwIH0sIDIgfSwKPj4gKwkJ ICAgeyB7IDB4MjUsIDB4NkQgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgyNiwgMHg0MCB9LCAyIH0s Cj4+ICsJCSAgIHsgeyAweDI3LCAweDQwIH0sIDIgfSwKPj4gKwkJICAgLyogVmVuZCAqLwo+PiAr CQkgICB7IHsgMHhFMCwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweERDLCAweDIxIH0sIDIg fSwKPj4gKwkJICAgeyB7IDB4REQsIDB4MjIgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhERSwgMHgw NyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweERGLCAweDA3IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4 RTMsIDB4NkQgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhFMSwgMHgwNyB9LCAyIH0sCj4+ICsJCSAg IHsgeyAweEUyLCAweDA3IH0sIDIgfSwKPj4gKwkJICAgLyogVUQgKi8KPj4gKwkJICAgeyB7IDB4 MjksIDB4RDggfSwgMiB9LAo+PiArCQkgICB7IHsgMHgyQSwgMHgyQSB9LCAyIH0sCj4+ICsJCSAg IC8qIENMSyAqLwo+PiArCQkgICB7IHsgMHg0QiwgMHgwMyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAw eDRDLCAweDExIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NEQsIDB4MTAgfSwgMiB9LAo+PiArCQkg ICB7IHsgMHg0RSwgMHgwMSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDRGLCAweDAxIH0sIDIgfSwK Pj4gKwkJICAgeyB7IDB4NTAsIDB4MTAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1MSwgMHgwMCB9 LCAyIH0sCj4+ICsJCSAgIHsgeyAweDUyLCAweDgwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTMs IDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1NiwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsg eyAweDU0LCAweDA3IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTgsIDB4MDcgfSwgMiB9LAo+PiAr CQkgICB7IHsgMHg1NSwgMHgyNSB9LCAyIH0sCj4+ICsJCSAgIC8qIFJlc2V0IFhET05CICovCj4+ ICsJCSAgIHsgeyAweDVCLCAweDQzIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NUMsIDB4MDAgfSwg MiB9LAo+PiArCQkgICB7IHsgMHg1RiwgMHg3MyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDYwLCAw eDczIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NjMsIDB4MjIgfSwgMiB9LAo+PiArCQkgICB7IHsg MHg2NCwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDY3LCAweDA4IH0sIDIgfSwKPj4gKwkJ ICAgeyB7IDB4NjgsIDB4MDQgfSwgMiB9LAo+PiArCQkgICAvKiBSZXNvbHV0aW9uOjE0NDB4MjU2 MCAqLwo+PiArCQkgICB7IHsgMHg3MiwgMHgwMiB9LCAyIH0sCj4+ICsJCSAgIC8qIG11eCAqLwo+ PiArCQkgICB7IHsgMHg3QSwgMHg4MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDdCLCAweDkxIH0s IDIgfSwKPj4gKwkJICAgeyB7IDB4N0MsIDB4RDggfSwgMiB9LAo+PiArCQkgICB7IHsgMHg3RCwg MHg2MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDdGLCAweDE1IH0sIDIgfSwKPj4gKwkJICAgeyB7 IDB4NzUsIDB4MTUgfSwgMiB9LAo+PiArCQkgICAvKiBBQk9GRiAqLwo+PiArCQkgICB7IHsgMHhC MywgMHhDMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweEI0LCAweDAwIH0sIDIgfSwKPj4gKwkJICAg eyB7IDB4QjUsIDB4MDAgfSwgMiB9LAo+PiArCQkgICAvKiBTb3VyY2UgRVEgKi8KPj4gKwkJICAg eyB7IDB4NzgsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg3OSwgMHgwMCB9LCAyIH0sCj4+ ICsJCSAgIHsgeyAweDgwLCAweDAwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4ODMsIDB4MDAgfSwg MiB9LAo+PiArCQkgICAvKiBGUCBCUCAqLwo+PiArCQkgICB7IHsgMHg5MywgMHgwQSB9LCAyIH0s Cj4+ICsJCSAgIHsgeyAweDk0LCAweDBBIH0sIDIgfSwKPj4gKwkJICAgLyogSW52ZXJzaW9uIFR5 cGUgKi8KPj4gKwkJICAgeyB7IDB4OEEsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg5Qiwg MHhGRiB9LCAyIH0sCj4+ICsJCSAgIC8qIElNR1NXQVAgPTEgQFBvcnRTd2FwPTEgKi8KPj4gKwkJ ICAgeyB7IDB4OUQsIDB4QjAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg5RiwgMHg2MyB9LCAyIH0s Cj4+ICsJCSAgIHsgeyAweDk4LCAweDEwIH0sIDIgfSwKPj4gKwkJICAgLyogRlJNICovCj4+ICsJ CSAgIHsgeyAweEVDLCAweDAwIH0sIDIgfSwKPj4gKwkJICAgLyogQ01EMSAqLwo+PiArCQkgICB7 IHsgMHhGRiwgMHgxMCB9LCAyIH0sCj4+ICsJCSAgICAvKiBWQlArVlNBPSxWRlAgPSAxMEggKi8K Pj4gKwkJICAgeyB7IDB4M0IsIDB4MDMsIDB4MEEsIDB4MEEsIH0sIDQgfSwKPj4gKwkJICAgLyog RlRFIG9uICovCj4+ICsJCSAgIHsgeyAweDM1LCAweDAwIH0sIDIgfSwKPj4gKwkJICAgLyogRU5f QksgPTEoYXV0byBibGFjaykgKi8KPj4gKwkJICAgeyB7IDB4RTUsIDB4MDEgfSwgMiB9LAo+PiAr CQkgICAvKiBDTUQgbW9kZSgxMCkgVkRPIG1vZGUoMDMpICovCj4+ICsJCSAgIHsgeyAweEJCLCAw eDAzIH0sIDIgfSwKPj4gKwkJICAgLyogTm9uIFJlbG9hZCBNVFAgKi8KPj4gKwkJICAgeyB7IDB4 RkIsIDB4MDEgfSwgMiB9LAo+PiArCQkgICAvKiBTbHBPdXQgKyBEaXNwT24gKi8KPj4gKwkJICAg Ly8wNSAwMSAwMCAwMCA3OCAwMCAwMiAxMSAwMAo+PiArCQkgICAvLzA1IDAxIDAwIDAwIDc4IDAw IDAyIDI5IDAwCj4gCj4gV2UgY2FuIGRyb3AgdGhlIGNvbW1lbnRlZCBsaW5lcy4gSWYgcG9zc2li bGUsIGl0IHdvdWxkIGJlIG5pY2UKPiB0byBoYXZlIHNvbWUgbW9yZSBkZXNjcmlwdGlvbiBhYm91 dCB0aGUgcmVnaXN0ZXJzLCBidXQgSSBjYW4gaW1hZ2luZQo+IHRoYXQgaW5mbyBiZWluZyBoYXJk IHRvIHJldHJpZXZlLgpbQWJoaW5hdl0gWWVzLCB3aWxsIHJlbW92ZSB0aGUgY29tbWVudGVkIGxp bmVzLiBZZXMgd2lsbCBiZSBoYXJkIHRvIGdpdmUKbW9yZSBpbmZvIG9uIHRoZSByZWdzLgo+IAo+ PiArfTsKPj4gKwo+PiArc3RhdGljIGludCB0cnVseV93cXhnYV9wcmVwYXJlKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxf dG9fdHJ1bHlfd3F4Z2EocGFuZWwpOwo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKipkc2lz ID0gY3R4LT5kc2k7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZDsKPj4gKwlpbnQgcmV0 LCBpLCBqOwo+PiArCj4+ICsJaWYgKGN0eC0+cHJlcGFyZWQpCj4+ICsJCXJldHVybiAwOwo+PiAr Cj4+ICsJcmV0ID0gdHJ1bHlfd3F4Z2FfcG93ZXJfb24oY3R4KTsKPj4gKwlpZiAocmV0IDwgMCkK Pj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCWRzaXNbMF0tPm1vZGVfZmxhZ3MgfD0gTUlQSV9E U0lfTU9ERV9MUE07Cj4+ICsJZHNpc1sxXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQ TTsKPj4gKwo+PiArCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHBhbmVsX2NtZHMpOyBqKysp IHsKPj4gKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewo+PiArCQkJZCA9IGRzaXNbaV07Cj4+ ICsJCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGVfYnVmZmVyKGRzaXNbaV0sCj4+ICsJCQkJCXBh bmVsX2NtZHNbal0uY29tbWFuZHMsCj4+ICsJCQkJCXBhbmVsX2NtZHNbal0uc2l6ZSk7Cj4+ICsJ CQlpZiAocmV0IDwgMCkgewo+PiArCQkJCS8qIGNvbnRpbnVlIGFueXdheSAqLwo+PiArCQkJCWRl dl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gY21kIG5vICVkLCBlcnI6ICVkXG4iLAo+PiArCQkJ CQkJaiwgcmV0KTsKPiAKPiBUaGlzIG1heSBoYXZlIGJlZW4gZG9uZSBmb3IgZGVidWcgcHVycG9z ZXMuIEl0IHdvdWxkIGJlIHByb2JhYmx5IGJldHRlcgo+IHRvIGJhaWwgb3V0LgpbQWJoaW5hdl0g T2ssIHdpbGwgYmFpbCBvdXQgaGVyZS4KPiAKPj4gKwkJCX0KPj4gKwkJfQo+PiArCX0KPj4gKwo+ PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKPj4gKwkJaWYgKG1pcGlfZHNpX2Rjc19l eGl0X3NsZWVwX21vZGUoZHNpc1tpXSkgPCAwKSB7Cj4+ICsJCQlkZXZfZXJyKGN0eC0+ZGV2LCAi ZmFpbGVkIHRvIGV4aXQgc2xlZXAgbW9kZVxuIik7Cj4+ICsJCQlyZXR1cm4gLUVDT01NOwo+PiAr CQl9Cj4+ICsJbXNsZWVwKDc4KTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCj4+ ICsJCWlmIChtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpc1tpXSkgPCAwKSB7Cj4+ICsJ CQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIHNlbmQgZGlzcGxheSBvblxuIik7Cj4+ICsJ CQlyZXR1cm4gLUVDT01NOwo+PiArCQl9Cj4+ICsJbXNsZWVwKDc4KTsKPj4gKwo+PiArCWN0eC0+ cHJlcGFyZWQgPSB0cnVlOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgdHJ1bHlfd3F4Z2FfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+ PiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwp Owo+PiArCj4+ICsJaWYgKGN0eC0+ZW5hYmxlZCkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlp ZiAoY3R4LT5iYWNrbGlnaHQpIHsKPj4gKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0g RkJfQkxBTktfVU5CTEFOSzsKPj4gKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoY3R4LT5iYWNr bGlnaHQpOwo+PiArCX0KPj4gKwljdHgtPmVuYWJsZWQgPSB0cnVlOwo+PiArCj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfZ2V0X21vZGVzKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IgPSBwYW5lbC0+Y29ubmVjdG9yOwo+PiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0g cGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOwo+PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlOwo+PiArCj4+ICsJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7 Cj4+ICsJaWYgKCFtb2RlKSB7Cj4+ICsJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gY3Jl YXRlIGEgbmV3IGRpc3BsYXkgbW9kZVxuIik7Cj4+ICsJCXJldHVybiAwOwo+PiArCX0KPj4gKwo+ PiArCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJmN0eC0+dm0sIG1vZGUpOwo+PiAr CWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gNzQ7Cj4+ICsJY29ubmVjdG9yLT5k aXNwbGF5X2luZm8uaGVpZ2h0X21tID0gMTMxOwo+PiArCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9U WVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwo+PiArCWRybV9tb2RlX3Byb2Jl ZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKPj4gKwo+PiArCXJldHVybiAxOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyB0cnVseV93cXhnYV9kcm1fZnVu Y3MgPSB7Cj4+ICsJLmRpc2FibGUgPSB0cnVseV93cXhnYV9kaXNhYmxlLAo+PiArCS51bnByZXBh cmUgPSB0cnVseV93cXhnYV91bnByZXBhcmUsCj4+ICsJLnByZXBhcmUgPSB0cnVseV93cXhnYV9w cmVwYXJlLAo+PiArCS5lbmFibGUgPSB0cnVseV93cXhnYV9lbmFibGUsCj4+ICsJLmdldF9tb2Rl cyA9IHRydWx5X3dxeGdhX2dldF9tb2RlcywKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1 bHlfd3F4Z2FfcGFuZWxfYWRkKHN0cnVjdCB0cnVseV93cXhnYSAqY3R4KQo+PiArewo+PiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGN0eC0+ZGV2Owo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwljdHgt PnN1cHBsaWVzWzBdLnN1cHBseSA9ICJ2ZGRpbyI7Cj4+ICsJY3R4LT5zdXBwbGllc1sxXS5zdXBw bHkgPSAidmRkYSI7Cj4+ICsJY3R4LT5zdXBwbGllc1syXS5zdXBwbHkgPSAibGFiIjsKPj4gKwlj dHgtPnN1cHBsaWVzWzNdLnN1cHBseSA9ICJpYmIiOwo+PiArCXJldCA9IGRldm1fcmVndWxhdG9y X2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKPj4gKwkJCQkgICAgICBj dHgtPnN1cHBsaWVzKTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+ PiArCWN0eC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0Rf T1VUX0hJR0gpOwo+PiArCWlmIChJU19FUlIoY3R4LT5yZXNldF9ncGlvKSkgewo+PiArCQlkZXZf ZXJyKGRldiwgImNhbm5vdCBnZXQgcmVzZXQtZ3Bpb3MgJWxkXG4iLAo+PiArCQkJUFRSX0VSUihj dHgtPnJlc2V0X2dwaW8pKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKTsK Pj4gKwl9Cj4+ICsKPj4gKwljdHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgIm1v ZGUiLCBHUElPRF9PVVRfTE9XKTsKPj4gKwlpZiAoSVNfRVJSKGN0eC0+bW9kZV9ncGlvKSkgewo+ PiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgbW9kZSBncGlvICVsZFxuIiwKPj4gKwkJCVBU Ul9FUlIoY3R4LT5tb2RlX2dwaW8pKTsKPj4gKwkJY3R4LT5tb2RlX2dwaW8gPSBOVUxMOwo+PiAr CQlyZXR1cm4gUFRSX0VSUihjdHgtPm1vZGVfZ3Bpbyk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0g cGluY3RybF9wbV9zZWxlY3RfZGVmYXVsdF9zdGF0ZShkZXYpOwo+PiArCWlmIChyZXQpIHsKPj4g KwkJZGV2X2VycihkZXYsICIlczogZmFpbGVkIHRvIHNldCBwaW5jdHJsIGRlZmF1bHQgc3RhdGUs ICVkXG4iLAo+PiArCQkJX19mdW5jX18sIHJldCk7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+ PiArCj4+ICsJcmV0ID0gb2ZfZ2V0X3ZpZGVvbW9kZShkZXYtPm9mX25vZGUsICZjdHgtPnZtLCAw KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCWRybV9wYW5l bF9pbml0KCZjdHgtPnBhbmVsKTsKPj4gKwljdHgtPnBhbmVsLmRldiA9IGRldjsKPj4gKwljdHgt PnBhbmVsLmZ1bmNzID0gJnRydWx5X3dxeGdhX2RybV9mdW5jczsKPj4gKwlkcm1fcGFuZWxfYWRk KCZjdHgtPnBhbmVsKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCB0cnVseV93cXhnYV9wYW5lbF9kZWwoc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCj4+ICt7 Cj4+ICsJaWYgKGN0eC0+cGFuZWwuZGV2KQo+PiArCQlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBh bmVsKTsKPj4gKwo+PiArCWlmIChjdHgtPmJhY2tsaWdodCkKPj4gKwkJcHV0X2RldmljZSgmY3R4 LT5iYWNrbGlnaHQtPmRldik7Cj4+ICsKPj4gKwlpZiAoY3R4LT5kc2lbMV0pCj4+ICsJCXB1dF9k ZXZpY2UoJmN0eC0+ZHNpWzFdLT5kZXYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5 X3dxeGdhX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPj4gK3sKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7Cj4+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHg7 Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqc2Vjb25kYXJ5ID0gTlVMTDsKPj4gKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlkc2ktPmxhbmVzID0g NDsKPj4gKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4+ICsJZHNpLT5tb2Rl X2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IAo+PiBNSVBJX0RTSV9DTE9DS19OT05fQ09O VElOVU9VUyB8Cj4+ICsJCQkgIE1JUElfRFNJX01PREVfTFBNOwo+PiArCj4+ICsJLyogT25seSBE U0ktTElOSzEgbm9kZSBoYXMgImxpbmsyIiBlbnRyeS4gKi8KPj4gKwlucCA9IG9mX3BhcnNlX3Bo YW5kbGUoZHNpLT5kZXYub2Zfbm9kZSwgImxpbmsyIiwgMCk7Cj4+ICsJaWYgKG5wKSB7Cj4+ICsJ CXNlY29uZGFyeSA9IG9mX2ZpbmRfbWlwaV9kc2lfZGV2aWNlX2J5X25vZGUobnApOwo+PiArCQlv Zl9ub2RlX3B1dChucCk7Cj4+ICsKPj4gKwkJaWYgKCFzZWNvbmRhcnkpCj4+ICsJCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsKPj4gKwo+PiArCQljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KmN0eCksIEdGUF9LRVJORUwpOwo+PiArCQlpZiAoIWN0eCkgewo+PiArCQkJcHV0X2RldmljZSgm c2Vjb25kYXJ5LT5kZXYpOwo+PiArCQkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJCX0KPj4gKwkJbWlw aV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgpOwo+PiArCj4+ICsJCWN0eC0+ZGV2ID0gZGV2Owo+ PiArCQljdHgtPmRzaVswXSA9IGRzaTsKPj4gKwkJY3R4LT5kc2lbMV0gPSBzZWNvbmRhcnk7Cj4+ ICsKPj4gKwkJcmV0ID0gdHJ1bHlfd3F4Z2FfcGFuZWxfYWRkKGN0eCk7Cj4+ICsJCWlmIChyZXQp IHsKPj4gKwkJCXB1dF9kZXZpY2UoJnNlY29uZGFyeS0+ZGV2KTsKPj4gKwkJCXJldHVybiByZXQ7 Cj4+ICsJCX0KPj4gKwl9Cj4gCj4gVGhpcyBzaG91bGQgZ28gd2hlbiB3ZSB1c2UgdGhlIG9mLWdy YXBoIGJpbmRpbmdzLiBUaGUgc2Vjb25kCj4gbWlwaV9kc2lfZGV2aWNlIG5lZWRzIHRvIGJlIGNy ZWF0ZWQgbWFudWFsbHkgaW4gdGhlIGRyaXZlcgo+IHVzaW5nIG1pcGlfZHNpX2RldmljZV9yZWdp c3Rlcl9mdWxsKCkuIFlvdSBjb3VsZCBsb29rIGF0IHRoZQo+IEFEVjc1MTEgYnJpZGdlIGRyaXZl ciBhcyBhbiBleGFtcGxlLiBXZSB3b3VsZCBldmVudHVhbGx5IG5lZWQKPiB0byBjYWxsIG1pcGlf ZHNpX2F0dGFjaCgpIG9uIHRoZSBzZWNvbmQgZGV2aWNlIHRvby4KPiAKPiBUaGFua3MsCj4gQXJj aGl0Cj4gCltBYmhpbmF2XSBJIGRvbnQgdGhpbmsgd2Ugc2hvdWxkIGZvbGxvdyBicmlkZ2UncyBl eGFtcGxlLgpJbiBvdXIgRFQsIHRoZSBwYW5lbCBub2RlcyBhcmUgbGlzdGVkIGFzIGNoaWxkIG5v ZGVzLgpUaGUgbWlwaV9kc2lfaG9zdF9yZWdpc3RlciBBUEkgYWRkcyBhbGwgdGhlIGNoaWxkcmVu IG9mIHVzaW5nCm9mX21pcGlfZHNpX2RldmljZV9hZGQuIFRoaXMgY2FsbHMgYSBtaXBpX2RzaV9k ZXZpY2VfcmVnaXN0ZXJfZnVsbCgpLgp0d2ljZSBiZWNhdXNlIHRoZSBwYW5lbCBpcyBsaXN0ZWQg YXMgYSBjaGlsZCBvbiBib3RoIHRoZSBEU0lzLgoKSW4gYnJpZGdlLCB0aGUgYnJpZGdlIGRyaXZl ciBpcyBub3QgbGlzdGVkIGFzIGEgY2hpbGQKb2YgdGhlIERTSSBub2RlLCBhbmQgaGVuY2UgYW4g ZXhwbGljaXQgY2FsbCB0byAKbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoKQppcyByZXF1 aXJlZC4KCkhlbmNlLCB5ZXMgSSB3aWxsIHVzZSBvZi1ncmFwaCBiaW5kaW5ncyBhbmQgZ2V0IHJp ZCBvZiAibGluazIiIGJ1dCB0aGUgCnBhcnQKdG8gcmVnaXN0ZXIgdGhlIHBhbmVsIG9ubHkgZm9y IHRoZSBtYXN0ZXIgY29udHJvbGxlciBhbmQgYWxsb2NhdGUgY3R4IApvbmx5IHRoZW4Kc2VlbXMg cmVxdWlyZWQgdG8gbWUuCgpBbHNvLCBhbiBleHBsaWNpdCBjYWxsIHRvIG1pcGlfZHNpX2Rldmlj ZV9yZWdpc3Rlcl9mdWxsKCkgZG9lc250IHNlZW0gCm5lY2Vzc2FyeS4KCkNhbiB5b3UgcGxlYXNl IGNvbW1lbnQgd2hldGhlciBvdXIgdW5kZXJzdGFuZGluZyBpcyBhbGlnbmVkIHdpdGggeW91cnMg CmhlcmU/Cgo+PiArCj4+ICsJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7Cj4+ICsJaWYgKHJl dCA8IDApIHsKPj4gKwkJaWYgKHNlY29uZGFyeSkKPj4gKwkJCXRydWx5X3dxeGdhX3BhbmVsX2Rl bChjdHgpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcmVtb3ZlKHN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKmRzaSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IG1pcGlf ZHNpX2dldF9kcnZkYXRhKGRzaSk7Cj4+ICsKPj4gKwltaXBpX2RzaV9kZXRhY2goZHNpKTsKPj4g Kwo+PiArCS8qIGRlbGV0ZSBwYW5lbCBvbmx5IGZvciB0aGUgRFNJMSBpbnRlcmZhY2UgKi8KPj4g KwlpZiAoY3R4KQo+PiArCQl0cnVseV93cXhnYV9wYW5lbF9kZWwoY3R4KTsKPj4gKwo+PiArCXJl dHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0 cnVseV93cXhnYV9vZl9tYXRjaFtdID0gewo+PiArCXsgLmNvbXBhdGlibGUgPSAidHJ1bHksZHVh bF93cXhnYSIsIH0sCj4+ICsJeyB9Cj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg dHJ1bHlfd3F4Z2Ffb2ZfbWF0Y2gpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2Ry aXZlciB0cnVseV93cXhnYV9kcml2ZXIgPSB7Cj4+ICsJLmRyaXZlciA9IHsKPj4gKwkJLm5hbWUg PSAicGFuZWxfdHJ1bHlfd3F4Z2EiLAo+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0cnVseV93cXhn YV9vZl9tYXRjaCwKPj4gKwl9LAo+PiArCS5wcm9iZSA9IHRydWx5X3dxeGdhX3Byb2JlLAo+PiAr CS5yZW1vdmUgPSB0cnVseV93cXhnYV9yZW1vdmUsCj4+ICt9Owo+PiArbW9kdWxlX21pcGlfZHNp X2RyaXZlcih0cnVseV93cXhnYV9kcml2ZXIpOwo+PiArCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04o InRydWx5IHdxeGdhIERTSSBQYW5lbCBEcml2ZXIiKTsKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsKPj4gCj4gLS0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUg bGluZSAidW5zdWJzY3JpYmUgCj4gbGludXgtYXJtLW1zbSIgaW4KPiB0aGUgYm9keSBvZiBhIG1l c3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwo+IE1vcmUgbWFqb3Jkb21vIGluZm8g YXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK