From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [[RFC]DPU PATCH 1/2] drm/bridge: add support for sn65dsi86 bridge driver Date: Fri, 13 Apr 2018 15:29:05 -0400 Message-ID: <20180413192905.GG73214@art_vandelay> References: <1523596981-18913-1-git-send-email-spanda@codeaurora.org> <1523596981-18913-2-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1523596981-18913-2-git-send-email-spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sandeep Panda Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org T24gRnJpLCBBcHIgMTMsIDIwMTggYXQgMTA6NTM6MDBBTSArMDUzMCwgU2FuZGVlcCBQYW5kYSB3 cm90ZToKPiBBZGQgc3VwcG9ydCBmb3IgVEkncyBzbjY1ZHNpODYgZHNpMmVkcCBicmlkZ2UgY2hp cC4KPiBUaGUgY2hpcCBjb252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWdu YWwsCj4gd2hpY2ggaXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgo+IAo+IFRoaXMg Y2hpcCBjYW4gYmUgY29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPiBkc2kg aW50ZXJmYWNlLiBDdXJyZW50bHkgaW4gZHJpdmVyIGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMK PiBhcmUgYmVpbmcgYWNjZXNzZWQgdGhyb3VnaCBpMmMgaW50ZXJmYWNlIG9ubHkuCj4gQWxzbyBh cyBvZiBub3cgSFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+IGNoaXAg ZHJpdmVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVy b3JhLm9yZz4KCkhpIFNhbmRlZXAsClRoYW5rIHlvdSBmb3IgeW91ciBwYXRjaCEKCj4gLS0tCj4g IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgfCAxMDE5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwgMTAxOSBpbnNlcnRpb25z KCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVk c2k4Ni5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRz aTg2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45M2FhMWFkCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKPiBAQCAtMCwwICsxLDEw MTkgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArCj4gKyNk ZWZpbmUgcHJfZm10KGZtdCkgIiVzOiAiIGZtdCwgX19mdW5jX18KCkluc3RlYWQgb2YgdXNpbmcg cHJfKiBmb3IgbG9nZ2luZywgcGxlYXNlIHVzZSB0aGUgRFJNXyogdmFyaWFudHMuIFNpbmNlIHRo ZXJlCmlzIHVubGlrZWx5IHRvIGJlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgYnJpZGdlIGRyaXZl cnMgaW4gYSBzeXN0ZW0sIHlvdSB3b24ndApuZWVkIHRvIHVzZSB0aGUgRFJNX0RFVl8qIHZlcnNp b25zLgoKPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2luaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KPiArI2luY2x1 ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybVAu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArCj4gKyNkZWZpbmUgU05fREVWSUNFX1JFVl9S RUcgMHgwOAo+ICsKPiArLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPiAr I2RlZmluZSBTTl9SRUZDTEtfRlJFUV9SRUcgMHgwQQo+ICsjZGVmaW5lIFNOX0RTSV9MQU5FU19S RUcgMHgxMAo+ICsjZGVmaW5lIFNOX0RTSUFfQ0xLX0ZSRVFfUkVHIDB4MTIKPiArI2RlZmluZSBT Tl9FTkhfRlJBTUVfUkVHIDB4NUEKPiArI2RlZmluZSBTTl9TU0NfQ09ORklHX1JFRyAweDkzCj4g KyNkZWZpbmUgU05fREFUQVJBVEVfQ09ORklHX1JFRyAweDk0Cj4gKyNkZWZpbmUgU05fUExMX0VO QUJMRV9SRUcgMHgwRAo+ICsjZGVmaW5lIFNOX1NDUkFNQkxFX0NPTkZJR19SRUcgMHg5NQo+ICsj ZGVmaW5lIFNOX0FVWF9XREFUQTBfUkVHIDB4NjQKPiArI2RlZmluZSBTTl9BVVhfQUREUl8xOV8x Nl9SRUcgMHg3NAo+ICsjZGVmaW5lIFNOX0FVWF9BRERSXzE1XzhfUkVHIDB4NzUKPiArI2RlZmlu ZSBTTl9BVVhfQUREUl83XzBfUkVHIDB4NzYKPiArI2RlZmluZSBTTl9BVVhfTEVOR1RIX1JFRyAw eDc3Cj4gKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcgMHg3OAo+ICsjZGVmaW5lIFNOX01MX1RYX01P REVfUkVHIDB4OTYKPiArI2RlZmluZSBTTl9QQUdFX1NFTEVDVF9SRUcgMHhGRgo+ICsjZGVmaW5l IFNOX0FVWF9SREFUQTBfUkVHIDB4NzkKPiArCj4gKy8qIHZpZGVvIGNvbmZpZyBzcGVjaWZpYyBy ZWdpc3RlcnMgKi8KPiArI2RlZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcg MHgyMAo+ICsjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcgMHgyMQo+ ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRyAweDI0Cj4gKyNk ZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdIX1JFRyAweDI1Cj4gKyNkZWZp bmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcgMHgyQwo+ICsjZGVmaW5lIFNOX0NI QV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRyAweDJECj4gKyNkZWZpbmUgU05fQ0hBX1ZTWU5D X1BVTFNFX1dJRFRIX0xPV19SRUcgMHgzMAo+ICsjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9X SURUSF9ISUdIX1JFRyAweDMxCj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JD SF9SRUcgMHgzNAo+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRyAweDM2 Cj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHIDB4MzgKPiArI2Rl ZmluZSBTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHIDB4M0EKPiArI2RlZmluZSBTTl9E QVRBX0ZPUk1BVF9SRUcgMHg1Qgo+ICsjZGVmaW5lIFNOX0NPTE9SX0JBUl9DT05GSUdfUkVHIDB4 M0MKCkl0J2QgYmUgbmljZSBpZiB5b3UgY291bGQgdGFiLWFsaWduIHRoZSB2YWx1ZXMuCgo+ICsK PiArc3RydWN0IHNuNjVkc2k4Nl9yZWdfY2ZnIHsKPiArCXU4IHJlZzsKPiArCXU4IHZhbDsKPiAr CWludCBzbGVlcF9pbl9tczsKPiArfTsKPiArCj4gK3N0cnVjdCBzbjY1ZHNpODZfdmlkZW9fY2Zn IHsKPiArCXUzMiBoX2FjdGl2ZTsKPiArCXUzMiBoX2Zyb250X3BvcmNoOwo+ICsJdTMyIGhfcHVs c2Vfd2lkdGg7Cj4gKwl1MzIgaF9iYWNrX3BvcmNoOwo+ICsJYm9vbCBoX3BvbGFyaXR5Owo+ICsJ dTMyIHZfYWN0aXZlOwo+ICsJdTMyIHZfZnJvbnRfcG9yY2g7Cj4gKwl1MzIgdl9wdWxzZV93aWR0 aDsKPiArCXUzMiB2X2JhY2tfcG9yY2g7Cj4gKwlib29sIHZfcG9sYXJpdHk7Cj4gKwl1MzIgcGNs a19raHo7Cj4gKwl1MzIgbnVtX29mX2xhbmVzOwo+ICt9OwoKQWxsIG9mIHRoZXNlIGNhbiBiZSBk ZXJpdmVkIGZyb20gZHJtX2Rpc3BsYXlfbW9kZSBleGNlcHQgZm9yIG51bV9vZl9sYW5lcyB3aGlj aAppcyBoYXJkY29kZWQuIFNvIGxldCdzIGp1c3QgdXNlIGRybV9kaXNwbGF5X21vZGUgZGlyZWN0 bHkuCgo+ICsKPiArc3RydWN0IHNuNjVkc2k4Nl9ncGlvcyB7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNj ICppcnFfZ3BpbzsKPiArCXN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvOwo+ICsJc3RydWN0 IGdwaW9fZGVzYyAqYXV4X2kyY19zZGE7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICphdXhfaTJjX3Nj bDsKPiArCXN0cnVjdCBncGlvX2Rlc2MgKmVkcF9iaWFzX2VuOwo+ICsJc3RydWN0IGdwaW9fZGVz YyAqZWRwX2JrbHRfZW47Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICplZHBfYmtsdF9jdHJsOwo+ICt9 OwoKSSBzZWUgSVJRIGFuZCBFTiBpbiB0aGUgZGF0YXNoZWV0LCBidXQgbm90IHRoZSBvdGhlcnMu IEl0IHNlZW1zIGxpa2UgdGhlIGF1eF8qCmFuZCBlZHBfKiBncGlvcyBhcmUgYWx3YXlzIGVxdWFs IHRvIGVuLiBTbyBpZiB5b3UgYWN0dWFsbHkgbmVlZCB0aGVtLCBkb24ndApzcGVjaWZ5IGEgbmV3 IHN0cnVjdCwganVzdCBhZGQgaXJxX2dwaW8gdG8gdGhlIG1haW4gc3RydWN0IGFuZCBhZGQgYW4g YXJyYXkgb2YKZW5fZ3Bpb3MgdG8gaGFuZGxlIHRoZSByZXN0LgoKPiArCj4gK3N0cnVjdCBzbjY1 ZHNpODYgewoKSSB3aWxsIGhhdmUgZml0cyB0cnlpbmcgdG8gdHlwZSB0aGlzIG5hbWUuIENvdWxk IHlvdSBwbGVhc2UgdXNlIHNvbWV0aGluZwpzaW1wbGUsIGxpa2Ugc25fYnJpZGdlPyBTYW1lIGNv bW1lbnQgYXBwbGllcyB0byBhbGwgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzLgoKPiArCXN0cnVjdCBk ZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKPiArCXN0cnVjdCBkcm1f Y29ubmVjdG9yIGNvbm5lY3RvcjsKPiArCj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmhvc3Rfbm9k ZTsKPiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTsKPiArCj4gKwl1OCBpMmNfYWRkcjsK ClVudXNlZAoKPiArCWludCBpcnE7Cj4gKwo+ICsJc3RydWN0IHNuNjVkc2k4Nl9ncGlvcyBncGlv czsKPiArCj4gKwl1bnNpZ25lZCBpbnQgbnVtX3N1cHBsaWVzOwo+ICsJc3RydWN0IHJlZ3VsYXRv cl9idWxrX2RhdGEgKnN1cHBsaWVzOwo+ICsKPiArCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xp ZW50Owo+ICsKPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY29ubmVjdG9yX3N0YXR1czsK CllvdSBuZXZlciB1c2UgdGhlIHZhbHVlIG9mIHRoaXMsIHlvdSBqdXN0IGFzc2lnbiBpdC4gU28g eW91IGNhbiByZW1vdmUgdGhpcy4KCj4gKwlib29sIHBvd2VyX29uOwo+ICsKPiArCWJvb2wgaXNf cGx1Z2dhYmxlOwoKQXMgSSBtZW50aW9uZWQgaW4gdGhlIGR0IHJldmlldywgeW91IGNhbiBkZXRl cm1pbmUgdGhpcyB2aWEgcGFuZWwuIFlvdSBzaG91bGQKYWxzbyB0YWtlIHRoaXMgaW50byBhY2Nv dW50IGluIGRldGVjdCgpLgoKPiArCXUzMiBudW1fb2ZfbW9kZXM7Cj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIG1vZGVfbGlzdDsKPiArCXN0cnVjdCBlZGlkICplZGlkOwo+ICsKPiArCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsKClRoaXMgaXMgbm90IHVzZWQgYW55d2hlcmUKCj4gKwlz dHJ1Y3Qgc242NWRzaTg2X3ZpZGVvX2NmZyB2aWRlb19jZmc7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg c242NWRzaTg2X3JlZ19jZmcgY2ZnX3Byb3RvXzBfaW5pdFtdID0gewo+ICsJe1NOX1JFRkNMS19G UkVRX1JFRywgMHgwMiwgMHgwfSwKPiArCXtTTl9EU0lfTEFORVNfUkVHLCAweDI2LCAweDE0fSwK PiArCXtTTl9EU0lBX0NMS19GUkVRX1JFRywgMHg3QiwgMHgwfSwKPiArCXtTTl9FTkhfRlJBTUVf UkVHLCAweDA1LCAweDB9LAo+ICsJe1NOX1NTQ19DT05GSUdfUkVHLCAweDMwLCAweDB9LAo+ICsJ e1NOX0RBVEFSQVRFX0NPTkZJR19SRUcsIDB4ODAsIDB4MH0sCj4gKwl7U05fUExMX0VOQUJMRV9S RUcsIDB4MDEsIDB4MH0sCj4gKwl7U05fU0NSQU1CTEVfQ09ORklHX1JFRywgMHgwMCwgMHgwfSwK PiArCXtTTl9BVVhfV0RBVEEwX1JFRywgMHgwMSwgMHgwfSwKPiArCXtTTl9BVVhfQUREUl8xOV8x Nl9SRUcsIDB4MDAsIDB4MH0sCj4gKwl7U05fQVVYX0FERFJfMTVfOF9SRUcsIDB4MDEsIDB4MH0s Cj4gKwl7U05fQVVYX0FERFJfN18wX1JFRywgMHgwQSwgMHgwfSwKPiArCXtTTl9BVVhfTEVOR1RI X1JFRywgMHgwMSwgMHgwfSwKPiArCXtTTl9BVVhfQ01EX1JFRywgMHg4MSwgMHgxNH0sCj4gKwl7 U05fTUxfVFhfTU9ERV9SRUcsIDB4MEEsIDB4MTR9LAo+ICsJe1NOX1BBR0VfU0VMRUNUX1JFRywg MHgxNCwgMHgwfSwKPiArCXtTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcsIDB4NzAs IDB4MH0sCj4gKwl7U05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdIX1JFRywgMHgwOCwgMHgw fSwKPiArCXtTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcsIDB4QTAsIDB4MH0s Cj4gKwl7U05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdIX1JFRywgMHgwNSwgMHgwfSwK PiArCXtTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywgMHgyMCwgMHgwfSwKPiArCXtT Tl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsIDB4ODAsIDB4MH0sCj4gKwl7U05fQ0hB X1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsIDB4MEEsIDB4MH0sCj4gKwl7U05fQ0hBX1ZTWU5D X1BVTFNFX1dJRFRIX0hJR0hfUkVHLCAweDgwLCAweDB9LAo+ICsJe1NOX0NIQV9IT1JJWk9OVEFM X0JBQ0tfUE9SQ0hfUkVHLCAweDUwLCAweDB9LAo+ICsJe1NOX0NIQV9WRVJUSUNBTF9CQUNLX1BP UkNIX1JFRywgMHgxQiwgMHgwfSwKPiArCXtTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9S RUcsIDB4MzAsIDB4MH0sCj4gKwl7U05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywgMHgw MywgMHgwfSwKPiArCXtTTl9EQVRBX0ZPUk1BVF9SRUcsIDB4MDAsIDB4MH0sCj4gKwl7U05fQ09M T1JfQkFSX0NPTkZJR19SRUcsIDB4MDAsIDB4MTR9LAo+ICsJe1NOX0VOSF9GUkFNRV9SRUcsIDB4 MEQsIDB4MH0sCj4gK307CgpUaGlzIHNob3VsZCBiZSBwcm9ncmFtbWVkIHVzaW5nIHRoZSBkaXNw bGF5IHBhcmFtZXRlcnMgc2V0IG91dCBieSBtb2RlL3BhbmVsLCBhcwpvcHBvc2VkIHRvIGp1c3Qg ZHVtcGVkIGluIGEgdGFibGUuCgo+ICsKPiArc3RhdGljIGludCBzbjY1ZHNpODZfd3JpdGUoc3Ry dWN0IHNuNjVkc2k4NiAqcGRhdGEsIHU4IHJlZywgdTggdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGllbnQ7Cj4gKwl1OCBidWZbMl0gPSB7cmVn LCB2YWx9Owo+ICsJc3RydWN0IGkyY19tc2cgbXNnID0gewo+ICsJCS5hZGRyID0gY2xpZW50LT5h ZGRyLAo+ICsJCS5mbGFncyA9IDAsCj4gKwkJLmxlbiA9IDIsCj4gKwkJLmJ1ZiA9IGJ1ZiwKPiAr CX07Cj4gKwo+ICsJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2csIDEpIDwg MSkgewo+ICsJCXByX2VycigiaTJjIHdyaXRlIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJuIC1FSU87 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc242NWRzaTg2 X3JlYWQoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsIHU4IHJlZywgY2hhciAqYnVmLCB1MzIgc2l6 ZSkKPiArewo+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBkYXRhLT5pMmNfY2xpZW50 Owo+ICsJc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewo+ICsJCXsKPiArCQkJLmFkZHIgPSBjbGll bnQtPmFkZHIsCj4gKwkJCS5mbGFncyA9IDAsCj4gKwkJCS5sZW4gPSAxLAo+ICsJCQkuYnVmID0g JnJlZywKPiArCQl9LAo+ICsJCXsKPiArCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCj4gKwkJCS5m bGFncyA9IEkyQ19NX1JELAo+ICsJCQkubGVuID0gc2l6ZSwKPiArCQkJLmJ1ZiA9IGJ1ZiwKPiAr CQl9Cj4gKwl9Owo+ICsKPiArCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2cs IDIpICE9IDIpIHsKPiArCQlwcl9lcnIoImkyYyByZWFkIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJu IC1FSU87Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc242 NWRzaTg2X3dyaXRlX2FycmF5KHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLAo+ICsJc3RydWN0IHNu NjVkc2k4Nl9yZWdfY2ZnICpjZmcsIGludCBzaXplKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiAr CWludCBpOwo+ICsKPiArCXNpemUgPSBzaXplIC8gc2l6ZW9mKHN0cnVjdCBzbjY1ZHNpODZfcmVn X2NmZyk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cj4gKwkJcmV0ID0gc242NWRz aTg2X3dyaXRlKHBkYXRhLCBjZmdbaV0ucmVnLCBjZmdbaV0udmFsKTsKPiArCj4gKwkJaWYgKHJl dCAhPSAwKSB7Cj4gKwkJCXByX2VycigicmVnIHdyaXRlcyBmYWlsZWQuIExhc3Qgd3JpdGUgJTAy WCB0byAlMDJYXG4iLAo+ICsJCQkJY2ZnW2ldLnZhbCwgY2ZnW2ldLnJlZyk7Cj4gKwkJCWdvdG8g d19yZWdzX2ZhaWw7Cj4gKwkJfQo+ICsKPiArCQlpZiAoY2ZnW2ldLnNsZWVwX2luX21zKQo+ICsJ CQltc2xlZXAoY2ZnW2ldLnNsZWVwX2luX21zKTsKPiArCX0KPiArCj4gK3dfcmVnc19mYWlsOgo+ ICsJaWYgKHJldCAhPSAwKQo+ICsJCXByX2VycigiZXhpdGluZyB3aXRoIHJldCA9ICVkIGFmdGVy ICVkIHdyaXRlc1xuIiwgcmV0LCBpKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBzbjY1ZHNpODZfZ3Bpb19jb25maWd1cmUoc3RydWN0IHNuNjVkc2k4NiAqcGRh dGEsIGJvb2wgb24pCj4gK3sKPiArCWludCB2YWx1ZTsKPiArCj4gKwl2YWx1ZSA9IG9uID8gMTog MDsKPiArCj4gKwlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9zLmVuYWJsZV9ncGlvLCB2YWx1 ZSk7Cj4gKwlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9zLmF1eF9pMmNfc2RhLCB2YWx1ZSk7 Cj4gKwlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9zLmF1eF9pMmNfc2NsLCB2YWx1ZSk7Cj4g KwlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9zLmVkcF9iaWFzX2VuLCB2YWx1ZSk7Cj4gKwln cGlvZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9zLmVkcF9ia2x0X2VuLCB2YWx1ZSk7Cj4gKwlncGlv ZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9zLmlycV9ncGlvLCB2YWx1ZSk7Cj4gKwlncGlvZF9zZXRf dmFsdWUocGRhdGEtPmdwaW9zLmVkcF9ia2x0X2N0cmwsIHZhbHVlKTsKPiArCj4gKwlwcl9kZWJ1 ZygiY29uZmlnIHRvOiAlZFxuIiwgdmFsdWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzbjY1 ZHNpODZfcG93ZXJfY3RybChzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSwgYm9vbCBlbmFibGUpCj4g K3sKPiArCWlmICghcGRhdGEpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghcGRhdGEtPnBvd2Vy X29uICYmIGVuYWJsZSkgewo+ICsJCXNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgdHJ1 ZSk7Cj4gKwo+ICsJCWlmIChyZWd1bGF0b3JfYnVsa19lbmFibGUocGRhdGEtPm51bV9zdXBwbGll cywKPiArCQkJCQkJcGRhdGEtPnN1cHBsaWVzKSkgewo+ICsJCQlwcl9lcnIoImJyaWRnZSByZWd1 bGF0b3IgZW5hYmxlIGZhaWxlZFxuIik7Cj4gKwkJCXJldHVybjsKPiArCQl9Cj4gKwkJcGRhdGEt PnBvd2VyX29uID0gdHJ1ZTsKPiArCX0gZWxzZSBpZiAocGRhdGEtPnBvd2VyX29uICYmICFlbmFi bGUpIHsKPiArCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKHBkYXRhLT5udW1fc3VwcGxpZXMsIHBk YXRhLT5zdXBwbGllcyk7Cj4gKwo+ICsJCXNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShwZGF0YSwg ZmFsc2UpOwo+ICsJCXBkYXRhLT5wb3dlcl9vbiA9IGZhbHNlOwo+ICsJfSBlbHNlIHsKPiArCQlw cl9kZWJ1ZygidW5uZWNlc3NhcnkgY2FsbCB0byBwb3dlciBjb250cm9sXG4iKTsKPiArCX0KPiAr fQo+ICsKPiArLyogQ29ubmVjdG9yIGZ1bmNzICovCj4gK3N0YXRpYyBzdHJ1Y3Qgc242NWRzaTg2 ICpjb25uZWN0b3JfdG9fc242NWRzaTg2KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3Qgc242NWRzaTg2 LCBjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNuNjVkc2k4Nl9zZW5kX2F1eF9j bWQoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsCj4gKwkJCQkgIHU4IGNtZCwgdTggYWRkciwgdTgg bGVuZ3RoLCBpbnQgd19kYXRhKQo+ICt7Cj4gKwl1OCByZWFkID0gMDsKPiArCWludCByZXRyeV9j bnQgPSAxMDsKPiArCj4gKwlzbjY1ZHNpODZfd3JpdGUocGRhdGEsIFNOX0FVWF9DTURfUkVHLCAo Y21kIDw8IDQpKTsKPiArCXNuNjVkc2k4Nl93cml0ZShwZGF0YSwgU05fQVVYX0FERFJfN18wX1JF RywgYWRkcik7Cj4gKwlzbjY1ZHNpODZfd3JpdGUocGRhdGEsIFNOX0FVWF9MRU5HVEhfUkVHLCBs ZW5ndGgpOwo+ICsJaWYgKHdfZGF0YSA+PSAwKQo+ICsJCXNuNjVkc2k4Nl93cml0ZShwZGF0YSwg U05fQVVYX1dEQVRBMF9SRUcsICh1OCl3X2RhdGEpOwo+ICsKPiArCS8qIHNldCBTRU5EIGJpdCAq Lwo+ICsJc242NWRzaTg2X3JlYWQocGRhdGEsIFNOX0FVWF9DTURfUkVHLCAmcmVhZCwgMSk7Cj4g KwlyZWFkIHw9IEJJVCgwKTsKPiArCXNuNjVkc2k4Nl93cml0ZShwZGF0YSwgU05fQVVYX0NNRF9S RUcsIHJlYWQpOwo+ICsKPiArCS8qIHBvbGwgZm9yIGJyaWRnZSB0byBhY2sgU0VORCBiaXQgKi8K PiArCXdoaWxlIChyZXRyeV9jbnQpIHsKPiArCQlzbjY1ZHNpODZfcmVhZChwZGF0YSwgU05fQVVY X0NNRF9SRUcsICZyZWFkLCAweDEpOwo+ICsJCWlmICghKHJlYWQgJiBCSVQoMCkpKQo+ICsJCQli cmVhazsKPiArCQlyZXRyeV9jbnQtLTsKPiArCQl1ZGVsYXkoMTAwMCk7Cj4gKwl9Cj4gKwo+ICsJ aWYgKCFyZXRyeV9jbnQpIHsKPiArCQlwcl9lcnIoImF1eF9jbWQgdHJhbnNmZXIgZmFpbGVkXG4i KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHNuNjVkc2k4Nl9yZWFkX2VkaWQoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsIHU4 ICpidWYpCj4gK3sKPiArCWludCBpID0gMDsKPiArCXU4IGFkZHIgPSBTTl9BVVhfUkRBVEEwX1JF RzsKPiArCXU4ICpkYXRhID0gYnVmOwo+ICsKPiArCWlmICghZGF0YSkKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwlpZiAoc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHg0LCAweDUw LCAweDAsIC0xKSB8fAo+ICsJCXNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEsIDB4NCwgMHg1 MCwgMHgwMSwgMHgwKSB8fAo+ICsJCXNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEsIDB4NSwg MHg1MCwgMHgwLCAtMSkgfHwKPiArCQlzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAweDUs IDB4NTAsIDB4MTAsIC0xKSkKPiArCQlnb3RvIGVycm9yOwoKSW5zdGVhZCBvZiBoYW5kLWNyYWZ0 aW5nIHRoaXMsIHlvdSBzaG91bGQgaW1wbGVtZW50IGFuIGkyY19hZGFwdGVyLiBZb3UgY2FuIHRo ZW4KdXNlIHRoYXQgaW4gZHJtX2dldF9lZGlkKCkgdG8gcmVhZCB0aGUgZWRpZCB2aWEgdGhlIGNv cmUuCgpTZWUgdGhlIGNvbW1lbnQgYWJvdXQgZHJtX2RvX2dldF9lZGlkKCk6CiAqIGRyaXZlcnMg bXVzdCBtYWtlIGFsbCByZWFzb25hYmxlIGVmZm9ydHMgdG8gZXhwb3NlIGl0IGFzIGFuIEkyQwog KiBhZGFwdGVyIGFuZCB1c2UgZHJtX2dldF9lZGlkKCkgaW5zdGVhZCBvZiBhYnVzaW5nIHRoaXMg ZnVuY3Rpb24uCgo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Cj4gKwkJaWYgKHNu NjVkc2k4Nl9yZWFkKHBkYXRhLCBhZGRyLCBkYXRhLCAweDEpKQo+ICsJCQlnb3RvIGVycm9yOwo+ ICsJCWFkZHIrKzsKPiArCQlkYXRhKys7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2Vycm9y Ogo+ICsJcHJfZXJyKCJlZGlkIHJlYWQgb3ZlciBpMmMgZmFpbGVkXG4iKTsKPiArCXJldHVybiAt RUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNuNjVkc2k4Nl9yZWFkX2VkaWRfYmxvY2so c3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsCj4gKwkJCSAgICAgICB1OCAqYnVmLCB1bnNpZ25lZCBp bnQgYmxvY2spCj4gK3sKPiArCWlmIChibG9jayA9PSAwKSB7Cj4gKwkJaWYgKHNuNjVkc2k4Nl9y ZWFkX2VkaWQocGRhdGEsIGJ1ZikpCj4gKwkJCWdvdG8gZXJyb3I7Cj4gKwl9IGVsc2UgaWYgKGJs b2NrID09IDEpIHsKPiArCQkvKiBtb3ZlIHNlZ21lbnQgcG9pbnRlciAqLwo+ICsJCWlmIChzbjY1 ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAweDQsIDB4MzAsIDB4MCwgLTEpIHx8Cj4gKwkJCXNu NjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEsIDB4NCwgMHgzMCwgMHgwMSwgMHgxKSB8fAo+ICsJ CQlzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAweDAsIDB4MzAsIDB4MDAsIC0xKSkKPiAr CQkJZ290byBlcnJvcjsKPiArCQllbHNlCj4gKwkJCWlmIChzbjY1ZHNpODZfcmVhZF9lZGlkKHBk YXRhLCBidWYpKQo+ICsJCQkJZ290byBlcnJvcjsKPiArCX0gZWxzZSB7Cj4gKwkJcHJfZGVidWco InVuc3VwcG9ydGVkIGVkaWQgYmxvY2tcbiIpOwo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK2Vycm9yOgo+ICsJcHJfZXJyKCJlZGlkIGJsb2NrIHJlYWQgZmFpbGVk XG4iKTsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNuNjVkc2k4 Nl9nZXRfZWRpZF9ibG9jayh2b2lkICpkYXRhLCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYmxvY2ss Cj4gKwkJCQkgIHNpemVfdCBsZW4pCj4gK3sKPiArCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhID0g ZGF0YTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCXByX2RlYnVnKCJnZXQgZWRpZCBibG9jazog YmxvY2s9JWQsIGxlbj0lZFxuIiwgYmxvY2ssIChpbnQpbGVuKTsKPiArCj4gKwlpZiAobGVuID4g MTI4IHx8IGJsb2NrID4gMSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXQgPSBzbjY1 ZHNpODZfcmVhZF9lZGlkX2Jsb2NrKHBkYXRhLCBidWYsIGJsb2NrKTsKPiArCWlmIChyZXQpIHsK PiArCQlwcl9lcnIoImVkaWQgcmVhZCBmYWlsZWQgZm9yIGJsb2NrOiAlZCByZXQ6ICVkXG4iLCBi bG9jaywgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHNuNjVkc2k4Nl9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRh ID0gY29ubmVjdG9yX3RvX3NuNjVkc2k4Nihjb25uZWN0b3IpOwo+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUsICptOwo+ICsKPiArCWlmIChwZGF0YS0+ZWRpZCkKPiArCQlyZXR1cm4g ZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgcGRhdGEtPmVkaWQpOwoKV2hhdCBpZiB0aGUg ZWRpZCBjaGFuZ2VzPyBZb3UnbGwgbmV2ZXIgdXBkYXRlIGl0LgoKPiArCj4gKwlzbjY1ZHNpODZf cG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7Cj4gKwlpZiAocGRhdGEtPmlzX3BsdWdnYWJsZSkgewoK SGVyZSwgY2FsbCB0aGUgcGFuZWwgZnVuYyBpZiBhIHBhbmVsIGlzIGNvbm5lY3RlZCwgb3IgcHJv YmUgdGhlIGVkaWQuCgo+ICsJCXBkYXRhLT5lZGlkID0gZHJtX2RvX2dldF9lZGlkKGNvbm5lY3Rv ciwKPiArCQkJCXNuNjVkc2k4Nl9nZXRfZWRpZF9ibG9jaywgcGRhdGEpOwoKQXJlIHlvdSBsZWFr aW5nIG1lbW9yeSBoZXJlPwoKPiArCj4gKwkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlk X3Byb3BlcnR5KGNvbm5lY3RvciwgcGRhdGEtPmVkaWQpOwo+ICsJCXBkYXRhLT5udW1fb2ZfbW9k ZXMgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLAo+ICsJCQkJCQkJCXBkYXRhLT5lZGlk KTsKCllvdSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgbnVtX29mX21vZGVzIGFuZCBtb2RlX2xp c3Qgb25jZSB5b3UgcmVtb3ZlIHRoZSBkdApjdXN0b20gbW9kZXMuIE1ha2Ugc3VyZSB5b3UgaW5j b3Jwb3JhdGUgYSBjYWxsIHRvIGRybV9wYW5lbF9nZXRfbW9kZXMoKSBoZXJlLgoKPiArCX0KPiAr Cj4gKwlpZiAoIXBkYXRhLT5pc19wbHVnZ2FibGUgfHwgIXBkYXRhLT5udW1fb2ZfbW9kZXMpIHsK PiArCQkvKgo+ICsJCSAqIGlmIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IEhQRCBvciBkdWUgdG8g c29tZSByZWFzb24KPiArCQkgKiBFRElEIHJlYWQgZmFpbGVkIHRoZW4gZmFsbCBiYWNrIHRvIG1v ZGVfbGlzdCB3aGljaCBpcwo+ICsJCSAqIGFscmVhZHkgcGFyc2VkIGZyb20gZHQgaWYgYW55Lgo+ ICsJCSAqLwo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJnBkYXRhLT5tb2RlX2xpc3Qs IGhlYWQpIHsKPiArCQkJbSA9IGRybV9tb2RlX2R1cGxpY2F0ZShjb25uZWN0b3ItPmRldiwgbW9k ZSk7Cj4gKwkJCWlmICghbSkgewo+ICsJCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IG1vZGUgJWR4 JWRcbiIsCj4gKwkJCQkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKPiArCQkJCWJy ZWFrOwo+ICsJCQl9Cj4gKwkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtKTsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJc242NWRzaTg2X3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKCldo YXQgaWYgcG93ZXIgd2FzIGFscmVhZHkgb24/Cgo+ICsJcmV0dXJuIHBkYXRhLT5udW1fb2ZfbW9k ZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ICtzbjY1ZHNpODZf Y29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAr CQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJc3RydWN0IHNu NjVkc2k4NiAqcGRhdGEgPSBjb25uZWN0b3JfdG9fc242NWRzaTg2KGNvbm5lY3Rvcik7Cj4gKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbTsKPiArCj4gKwlpZiAocGRhdGEtPmVkaWQpCj4gKwkJ cmV0dXJuIE1PREVfT0s7CgpDYXJlZnVsIGhlcmUsIHVzZXJzcGFjZSBjb3VsZCBhZGQgYW4gaW52 YWxpZCBtb2RlIGFuZCB0aGlzIHdvdWxkIHNheSBpdCdzCmNvcnJlY3QuIEluc3RlYWQgb2YgZG9p bmcgdGhpcywgYW5kIHRoZSBjaGVjayBiZWxvdywganVzdCBjaGVjayB0aGUgZ2l2ZW4gbW9kZQph Z2FpbnN0IHRoZSBtYXggaGFyZHdhcmUgbGltaXRhdGlvbnMgbGlzdGVkIGluIHRoZSBkYXRhc2hl ZXQgKDRrNjApLiBJIGFzc3VtZQp0aGlzIHdpbGwgYWxzbyBkZXBlbmQgb24gaG93IG1hbnkgZHNp IGNoYW5uZWxzIHdlIGhhdmUgY29taW5nIGluLgoKPiArCj4gKwlpZiAoIXBkYXRhLT5pc19wbHVn Z2FibGUpIHsKPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZwZGF0YS0+bW9kZV9saXN0LCBo ZWFkKSB7Cj4gKwkJCWlmIChtLT5oZGlzcGxheSA9PSBtb2RlLT5oZGlzcGxheSAmJgo+ICsJCQkJ bS0+dmRpc3BsYXkgPT0gbW9kZS0+dmRpc3BsYXkpCj4gKwkJCQlyZXR1cm4gTU9ERV9PSzsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE1PREVfQkFEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHNuNjVkc2k4Nl9jb25uZWN0b3JfaGVscGVy X2Z1bmNzID0gewo+ICsJLmdldF9tb2RlcyA9IHNuNjVkc2k4Nl9jb25uZWN0b3JfZ2V0X21vZGVz LAo+ICsJLm1vZGVfdmFsaWQgPSBzbjY1ZHNpODZfY29ubmVjdG9yX21vZGVfdmFsaWQsCj4gK307 Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwo+ICtzbjY1ZHNpODZfY29u bmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNl KQo+ICt7Cj4gKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGNvbm5lY3Rvcl90b19zbjY1ZHNp ODYoY29ubmVjdG9yKTsKPiArCj4gKwlwZGF0YS0+Y29ubmVjdG9yX3N0YXR1cyA9IHBkYXRhLT5w b3dlcl9vbiA/Cj4gKwkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOiBjb25uZWN0b3Jfc3Rh dHVzX2Rpc2Nvbm5lY3RlZDsKCkl0J3MgcG9zc2libGUgZGV0ZWN0KCkgd2lsbCBiZSBjYWxsZWQg d2hpbGUgdGhlIGRldmljZSBpcyBvZmYsIGluIHRoYXQgY2FzZQp0aGlzIHdpbGwgcmV0dXJuIHRo ZSBpbmNvcnJlY3QgdmFsdWUuIElzIHRoZXJlIHNvbWUgcmVhc29uIHlvdSBjYW4ndCBqdXN0IGRl dGVjdAp3aGV0aGVyIHRoZXJlJ3Mgc29tZXRoaW5nIGNvbm5lY3RlZD8KCj4gKwo+ICsJcmV0dXJu IHBkYXRhLT5jb25uZWN0b3Jfc3RhdHVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jb25uZWN0b3JfZnVuY3Mgc242NWRzaTg2X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKPiArCS5m aWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAo+ICsJ LmRldGVjdCA9IHNuNjVkc2k4Nl9jb25uZWN0b3JfZGV0ZWN0LAo+ICsJLmRlc3Ryb3kgPSBkcm1f Y29ubmVjdG9yX2NsZWFudXAsCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0 YXRpYyBzdHJ1Y3Qgc242NWRzaTg2ICpicmlkZ2VfdG9fc242NWRzaTg2KHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3Qg c242NWRzaTg2LCBicmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNuNjVkc2k4Nl9yZWFk X2RldmljZV9yZXYoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEpCj4gK3sKPiArCXU4IHJldiA9IDA7 Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlyZXQgPSBzbjY1ZHNpODZfcmVhZChwZGF0YSwgU05f REVWSUNFX1JFVl9SRUcsICZyZXYsIDEpOwo+ICsKCmV4dHJhIGxpbmUKCj4gKwlpZiAoIXJldCkg ewoKSW4gdGhpcyBjYXNlLCBmbGlwIHRoZSBjb25kaXRpb24gc28geW91IGNhbiBhdm9pZCBpbmRl bnRpbmcgZXZlcnl0aGluZzoKCiAgICAgICAgaWYgKHJldCkKICAgICAgICAgICAgICAgIHJldHVy biByZXQ7Cgo+ICsJCWlmIChyZXYgPT0gMHgyKSB7CgpXaGF0J3MgMHgyPyBDYW4geW91IHBsZWFz ZSAjZGVmaW5lIHRoaXM/Cgo+ICsJCQlwcl9pbmZvKCJTTjY1RFNJODYgcmV2aXNpb24gaWQ6IDB4 JXhcbiIsIHJldik7CgpXaGlsZSBJIHBlcnNvbmFsbHkgYXBwcmVjaWF0ZSBpbmZvIG1lc3NhZ2Vz LCBvdGhlcnMgbm90IHNvIG11Y2guIFNvIGRvd25ncmFkZQp0aGlzIHRvIERSTV9ERUJVR19LTVMo KQoKPiArCQl9IGVsc2Ugewo+ICsJCQlwcl93YXJuKCJTTjY1RFNJODYgcmV2aXNpb24gaWQgbWlz bWF0Y2hcbiIpOwo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qgc242NWRzaTg2X2lycV90aHJl YWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXJldHVybiBJUlFfSEFO RExFRDsKPiArfQoKV2hhdCdzIHRoZSBwb2ludCBvZiBldmVuIHJlZ2lzdGVyaW5nIHRoaXM/IEp1 c3QgbGVhdmUgaXQgYWxsIG91dCBpZiBpdCdzIHVudXNlZC4KSWYgdGhlcmUncyBhIG5lZWQgaW4g dGhlIGZ1dHVyZSwgaXQgY2FuIGVhc2lseSBiZSBhZGRlZCBiYWNrIGluLgoKPiArCj4gK3N0YXRp YyBjb25zdCBjaGFyICogY29uc3Qgc242NWRzaTg2X3N1cHBseV9uYW1lc1tdID0gewo+ICsJInZj Y2lvIiwKPiArCSJ2Y2NhIiwKPiArCSJ2Y2NzIgo+ICt9Owo+ICsKPiArc3RhdGljIGludCBzbjY1 ZHNpODZfaW5pdF9yZWd1bGF0b3JzKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhKQo+ICt7Cj4gKwlj b25zdCBjaGFyICogY29uc3QgKnN1cHBseV9uYW1lczsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJ aW50IHJldDsKPiArCj4gKwlzdXBwbHlfbmFtZXMgPSBzbjY1ZHNpODZfc3VwcGx5X25hbWVzOwoK VGhpcyBsb2NhbCBpc24ndCBuZWNlc3NhcnkuCgo+ICsJcGRhdGEtPm51bV9zdXBwbGllcyA9IEFS UkFZX1NJWkUoc242NWRzaTg2X3N1cHBseV9uYW1lcyk7Cj4gKwo+ICsJcGRhdGEtPnN1cHBsaWVz ID0gZGV2bV9rY2FsbG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMsCj4gKwkJCQkg ICAgIHNpemVvZigqcGRhdGEtPnN1cHBsaWVzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBkYXRh LT5zdXBwbGllcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg cGRhdGEtPm51bV9zdXBwbGllczsgaSsrKQo+ICsJCXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkg PSBzdXBwbHlfbmFtZXNbaV07Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQo cGRhdGEtPmRldiwKPiArCQkJcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gcmVndWxhdG9yX2J1 bGtfZW5hYmxlKHBkYXRhLT5udW1fc3VwcGxpZXMsIHBkYXRhLT5zdXBwbGllcyk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgc242NWRzaTg2X2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSkKPiArewo+ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7Cj4gKwlzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkc2k7Cj4gKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGJyaWRn ZV90b19zbjY1ZHNpODYoYnJpZGdlKTsKPiArCWludCByZXQ7Cj4gKwljb25zdCBzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsgLnR5cGUgPSAic242NWRzaTg2IiwKPiArCQkJCQkJ ICAgLmNoYW5uZWwgPSAwLAo+ICsJCQkJCQkgICAubm9kZSA9IE5VTEwsCj4gKwkJCQkJCSB9Owo+ ICsKPiArCWlmICghYnJpZGdlLT5lbmNvZGVyKSB7Cj4gKwkJRFJNX0VSUk9SKCJQYXJlbnQgZW5j b2RlciBvYmplY3Qgbm90IGZvdW5kIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ ICsJLyogSFBEIG5vdCBzdXBwb3J0ZWQgKi8KPiArCXBkYXRhLT5jb25uZWN0b3IucG9sbGVkID0g MDsKPiArCgpZb3UnbGwgbmVlZCB0byByZWZhY3RvciB0aGUgYmVsb3cgdG8gYWNjb21tb2RhdGUg cGFuZWxzLiBJZiB5b3UncmUgbm90IHBsYW5uaW5nCm9uIHN1cHBvcnRpbmcgaG90cGx1ZywgeW91 IHNob3VsZCBwcm9iYWJseSByZW1vdmUgYWxsIG9mIHRoZSBjb25uZWN0b3ItcmVsYXRlZApzdHVm ZiBmcm9tIHRoaXMgZHJpdmVyLCBzaW5jZSB5b3Ugd2lsbCBhbHdheXMgYmUgdXNpbmcgYSBwYW5l bCBkcml2ZXIuCgo+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmcGRh dGEtPmNvbm5lY3RvciwKPiArCQkJCSAmc242NWRzaTg2X2Nvbm5lY3Rvcl9mdW5jcywKPiArCQkJ CSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1Io IkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRhLT5jb25u ZWN0b3IsCj4gKwkJCQkgJnNuNjVkc2k4Nl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKPiArCWRy bV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcGRhdGEtPmNvbm5lY3RvciwgYnJpZGdl LT5lbmNvZGVyKTsKPiArCj4gKwlob3N0ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUo cGRhdGEtPmhvc3Rfbm9kZSk7Cj4gKwlpZiAoIWhvc3QpIHsKPiArCQlwcl9lcnIoImZhaWxlZCB0 byBmaW5kIGRzaSBob3N0XG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlk c2kgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChob3N0LCAmaW5mbyk7Cj4gKwlpZiAo SVNfRVJSKGRzaSkpIHsKPiArCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxu Iik7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2kpOwo+ICsJCWdvdG8gZXJyX2RzaV9kZXZpY2U7Cj4g Kwl9Cj4gKwo+ICsJLyogc2V0dGluZyB0byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCj4gKwlk c2ktPmxhbmVzID0gNDsKClBlcmhhcHMgYWRkIGEgVE9ETyBmb3IgdGhpcz8KCj4gKwlkc2ktPmZv cm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4gKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RT SV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKPiArCQkJICBN SVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQgfCBNSVBJX0RTSV9NT0RFX1ZJREVPX0hTRTsKPiArCj4g KwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJcHJf ZXJyKCJmYWlsZWQgdG8gYXR0YWNoIGRzaSB0byBob3N0XG4iKTsKPiArCQlnb3RvIGVycl9kc2lf YXR0YWNoOwo+ICsJfQo+ICsKPiArCXBkYXRhLT5kc2kgPSBkc2k7Cj4gKwo+ICsJcHJfZGVidWco ImJyaWRnZSBhdHRhY2hlZFxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfZHNpX2F0 dGFjaDoKPiArCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGRzaSk7Cj4gK2Vycl9kc2lfZGV2 aWNlOgo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc242NWRzaTg2X3Nl dF92aWRlb19jZmcoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsCj4gKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKPiArCXN0cnVjdCBzbjY1ZHNpODZfdmlkZW9fY2ZnICp2aWRlb19jZmcp Cj4gK3sKPiArCXZpZGVvX2NmZy0+aF9hY3RpdmUgPSBtb2RlLT5oZGlzcGxheTsKPiArCXZpZGVv X2NmZy0+dl9hY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsKPiArCXZpZGVvX2NmZy0+aF9mcm9udF9w b3JjaCA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXk7Cj4gKwl2aWRlb19jZmct PnZfZnJvbnRfcG9yY2ggPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5Owo+ICsJ dmlkZW9fY2ZnLT5oX2JhY2tfcG9yY2ggPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7 Cj4gKwl2aWRlb19jZmctPnZfYmFja19wb3JjaCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5j X2VuZDsKPiArCXZpZGVvX2NmZy0+aF9wdWxzZV93aWR0aCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1v ZGUtPmhzeW5jX3N0YXJ0Owo+ICsJdmlkZW9fY2ZnLT52X3B1bHNlX3dpZHRoID0gbW9kZS0+dnN5 bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Cj4gKwl2aWRlb19jZmctPnBjbGtfa2h6ID0gbW9k ZS0+Y2xvY2s7Cj4gKwo+ICsJdmlkZW9fY2ZnLT5oX3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX1BIU1lOQyk7Cj4gKwl2aWRlb19jZmctPnZfcG9sYXJpdHkgPSAhISht b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKPiArCj4gKwkvKiBzZXR0aW5nIHRv IDQgbGFuZXMgYWx3YXlzIGZvciBub3cgKi8KPiArCXZpZGVvX2NmZy0+bnVtX29mX2xhbmVzID0g NDsKPiArCj4gKwlwcl9kZWJ1ZygidmlkZW89aFslZCwlZCwlZCwlZF0gdlslZCwlZCwlZCwlZF0g cGNsaz0lZCBsYW5lPSVkXG4iLAo+ICsJCXZpZGVvX2NmZy0+aF9hY3RpdmUsIHZpZGVvX2NmZy0+ aF9mcm9udF9wb3JjaCwKPiArCQl2aWRlb19jZmctPmhfcHVsc2Vfd2lkdGgsIHZpZGVvX2NmZy0+ aF9iYWNrX3BvcmNoLAo+ICsJCXZpZGVvX2NmZy0+dl9hY3RpdmUsIHZpZGVvX2NmZy0+dl9mcm9u dF9wb3JjaCwKPiArCQl2aWRlb19jZmctPnZfcHVsc2Vfd2lkdGgsIHZpZGVvX2NmZy0+dl9iYWNr X3BvcmNoLAo+ICsJCXZpZGVvX2NmZy0+cGNsa19raHosIHZpZGVvX2NmZy0+bnVtX29mX2xhbmVz KTsKPiArfQoKQXMgbWVudGlvbmVkIGFib3ZlLCB0aGlzIG5lZWRzIHRvIGJlIHJlbW92ZWQuCgo+ ICsKPiArc3RhdGljIHZvaWQgc242NWRzaTg2X2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ ICsJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKPiArewo+ICsJc3Ry dWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBicmlkZ2VfdG9fc242NWRzaTg2KGJyaWRnZSk7Cj4gKwlz dHJ1Y3Qgc242NWRzaTg2X3ZpZGVvX2NmZyAqdmlkZW9fY2ZnID0gJnBkYXRhLT52aWRlb19jZmc7 Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlwcl9kZWJ1ZygibW9kZV9zZXQ6IGhkaXNwbGF5PSVk LCB2ZGlzcGxheT0lZCwgdnJlZnJlc2g9JWQsIGNsb2NrPSVkXG4iLAo+ICsJCWFkal9tb2RlLT5o ZGlzcGxheSwgYWRqX21vZGUtPnZkaXNwbGF5LAo+ICsJCWFkal9tb2RlLT52cmVmcmVzaCwgYWRq X21vZGUtPmNsb2NrKTsKPiArCj4gKwlkcm1fbW9kZV9jb3B5KCZwZGF0YS0+Y3Vycl9tb2RlLCBh ZGpfbW9kZSk7Cj4gKwo+ICsJbWVtc2V0KHZpZGVvX2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBzbjY1 ZHNpODZfdmlkZW9fY2ZnKSk7Cj4gKwlzbjY1ZHNpODZfc2V0X3ZpZGVvX2NmZyhwZGF0YSwgYWRq X21vZGUsIHZpZGVvX2NmZyk7Cj4gKwo+ICsJaWYgKHZpZGVvX2NmZy0+bnVtX29mX2xhbmVzICE9 IHBkYXRhLT5kc2ktPmxhbmVzKSB7Cj4gKwkJbWlwaV9kc2lfZGV0YWNoKHBkYXRhLT5kc2kpOwo+ ICsJCXBkYXRhLT5kc2ktPmxhbmVzID0gdmlkZW9fY2ZnLT5udW1fb2ZfbGFuZXM7Cj4gKwkJcmV0 ID0gbWlwaV9kc2lfYXR0YWNoKHBkYXRhLT5kc2kpOwoKSG1tLCBpZiB0aGlzIGlzIGNvbmZpZ3Vy YWJsZSBpcyB0aGVyZSBubyBiZXR0ZXIgd2F5IG9mIGRvaW5nIHRoaXMgdGhhbiBkZXRhY2hpbmcK YW5kIGF0dGFjaGluZz8KCj4gKwkJaWYgKHJldCkKPiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gY2hh bmdlIGhvc3QgbGFuZXNcbiIpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzbjY1ZHNp ODZfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3Ry dWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBicmlkZ2VfdG9fc242NWRzaTg2KGJyaWRnZSk7Cj4gKwo+ ICsJc242NWRzaTg2X3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKPiArCXBkYXRhLT5jb25uZWN0 b3Jfc3RhdHVzID0gIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBzbjY1ZHNpODZfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlKQo+ICt7Cj4gKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGJyaWRnZV90b19zbjY1ZHNp ODYoYnJpZGdlKTsKPiArCj4gKwlzbjY1ZHNpODZfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7Cj4g KwlwZGF0YS0+Y29ubmVjdG9yX3N0YXR1cyA9ICBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK PiArCXNuNjVkc2k4Nl93cml0ZV9hcnJheShwZGF0YSwgY2ZnX3Byb3RvXzBfaW5pdCwKPiArCQkJ ICAgICAgc2l6ZW9mKGNmZ19wcm90b18wX2luaXQpKTsKCkFzIG1lbnRpb25lZCBhYm92ZSwgbW9z dCB0aGVzZSBzaG91bGQgbGlrZWx5IGJlIHNldCBpbiBtb2RlX3NldCgpIHVzaW5nIHRoZQp2YWx1 ZXMgc2V0IGluIHRoZSBjdXJyZW50IG1vZGUuCgpTZWFuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgc242NWRzaTg2X2JyaWRnZV9mdW5jcyA9IHsKPiAr CS5hdHRhY2ggPSBzbjY1ZHNpODZfYnJpZGdlX2F0dGFjaCwKPiArCS5lbmFibGUgPSBzbjY1ZHNp ODZfYnJpZGdlX2VuYWJsZSwKPiArCS5kaXNhYmxlID0gc242NWRzaTg2X2JyaWRnZV9kaXNhYmxl LAo+ICsJLm1vZGVfc2V0ID0gc242NWRzaTg2X2JyaWRnZV9tb2RlX3NldCwKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgc242NWRzaTg2X3BhcnNlX2R0X21vZGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAsCj4gKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKPiArCQkJCQl1MzIgKm51bV9vZl9t b2RlcykKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlOwo+ICsJdTMyIG1vZGVfY291bnQgPSAwOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpub2Rl ID0gTlVMTDsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdF9ub2RlID0gTlVMTDsKPiArCXUz MiBoX2Zyb250X3BvcmNoLCBoX3B1bHNlX3dpZHRoLCBoX2JhY2tfcG9yY2g7Cj4gKwl1MzIgdl9m cm9udF9wb3JjaCwgdl9wdWxzZV93aWR0aCwgdl9iYWNrX3BvcmNoOwo+ICsJYm9vbCBoX2FjdGl2 ZV9oaWdoLCB2X2FjdGl2ZV9oaWdoOwo+ICsJdTMyIGZsYWdzID0gMDsKPiArCj4gKwlyb290X25v ZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgInNuLGN1c3RvbS1tb2RlcyIpOwo+ICsJaWYg KCFyb290X25vZGUpIHsKPiArCQlyb290X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAic24s Y3VzdG9tLW1vZGVzIiwgMCk7Cj4gKwkJaWYgKCFyb290X25vZGUpIHsKPiArCQkJcHJfaW5mbygi Tm8gbW9kZXMgcHJlc2VudCBmb3Igc24sY3VzdG9tLW1vZGVzIik7Cj4gKwkJCWdvdG8gZW5kOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHJvb3Rfbm9kZSwgbm9k ZSkgewo+ICsJCXJjID0gMDsKPiArCQltb2RlID0ga3phbGxvYyhzaXplb2YoKm1vZGUpLCBHRlBf S0VSTkVMKTsKPiArCQlpZiAoIW1vZGUpIHsKPiArCQkJcmMgPSAgLUVOT01FTTsKPiArCQkJZ290 byBlbmQ7Cj4gKwkJfQo+ICsKPiArCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAic24sbW9k ZS1oLWFjdGl2ZSIsCj4gKwkJCQkJCSZtb2RlLT5oZGlzcGxheSk7Cj4gKwo+ICsJCW9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLWgtZnJvbnQtcG9yY2giLAo+ICsJCQkJCQkmaF9m cm9udF9wb3JjaCk7Cj4gKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtaC1w dWxzZS13aWR0aCIsCj4gKwkJCQkJCSZoX3B1bHNlX3dpZHRoKTsKPiArCj4gKwkJb2ZfcHJvcGVy dHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtaC1iYWNrLXBvcmNoIiwKPiArCQkJCQkJJmhfYmFj a19wb3JjaCk7Cj4gKwo+ICsJCWhfYWN0aXZlX2hpZ2ggPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wo bm9kZSwKPiArCQkJCQkJInNuLG1vZGUtaC1hY3RpdmUtaGlnaCIpOwo+ICsKPiArCQlvZl9wcm9w ZXJ0eV9yZWFkX3UzMihub2RlLCAic24sbW9kZS12LWFjdGl2ZSIsCj4gKwkJCQkJCSZtb2RlLT52 ZGlzcGxheSk7Cj4gKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtdi1mcm9u dC1wb3JjaCIsCj4gKwkJCQkJCSZ2X2Zyb250X3BvcmNoKTsKPiArCj4gKwkJb2ZfcHJvcGVydHlf cmVhZF91MzIobm9kZSwgInNuLG1vZGUtdi1wdWxzZS13aWR0aCIsCj4gKwkJCQkJCSZ2X3B1bHNl X3dpZHRoKTsKPiArCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAic24sbW9kZS12LWJhY2st cG9yY2giLAo+ICsJCQkJCQkmdl9iYWNrX3BvcmNoKTsKPiArCQl2X2FjdGl2ZV9oaWdoID0gb2Zf cHJvcGVydHlfcmVhZF9ib29sKG5vZGUsCj4gKwkJCQkJCSJzbixtb2RlLXYtYWN0aXZlLWhpZ2gi KTsKPiArCj4gKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtcmVmcmVzaC1y YXRlIiwKPiArCQkJCQkJJm1vZGUtPnZyZWZyZXNoKTsKPiArCj4gKwkJb2ZfcHJvcGVydHlfcmVh ZF91MzIobm9kZSwgInNuLG1vZGUtY2xvY2staW4ta2h6IiwKPiArCQkJCQkJJm1vZGUtPmNsb2Nr KTsKPiArCj4gKwkJbW9kZS0+aHN5bmNfc3RhcnQgPSBtb2RlLT5oZGlzcGxheSArIGhfZnJvbnRf cG9yY2g7Cj4gKwkJbW9kZS0+aHN5bmNfZW5kID0gbW9kZS0+aHN5bmNfc3RhcnQgKyBoX3B1bHNl X3dpZHRoOwo+ICsJCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhzeW5jX2VuZCArIGhfYmFja19wb3Jj aDsKPiArCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZkaXNwbGF5ICsgdl9mcm9udF9wb3Jj aDsKPiArCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArIHZfcHVsc2Vfd2lk dGg7Cj4gKwkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dnN5bmNfZW5kICsgdl9iYWNrX3BvcmNoOwo+ ICsKPiArCQlpZiAoIW1vZGUtPmh0b3RhbCB8fCAhbW9kZS0+dnRvdGFsKSB7Cj4gKwkJCXJjID0g LUVJTlZBTDsKPiArCQkJZ290byBmYWlsOwo+ICsJCX0KPiArCj4gKwkJaWYgKGhfYWN0aXZlX2hp Z2gpCj4gKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUEhTWU5DOwo+ICsJCWVsc2UKPiArCQkJ ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7Cj4gKwkJaWYgKHZfYWN0aXZlX2hpZ2gpCj4g KwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5DOwo+ICsJCWVsc2UKPiArCQkJZmxhZ3Mg fD0gRFJNX01PREVfRkxBR19OVlNZTkM7Cj4gKwkJbW9kZS0+ZmxhZ3MgPSBmbGFnczsKPiArCj4g KwkJaWYgKCFyYykgewo+ICsJCQltb2RlX2NvdW50Kys7Cj4gKwkJCWxpc3RfYWRkX3RhaWwoJm1v ZGUtPmhlYWQsIGhlYWQpOwo+ICsJCX0KPiArCj4gKwkJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7 Cj4gKwo+ICsJCXByX2RlYnVnKCJtb2RlWyVzXSBoWyVkLCVkLCVkLCVkXSB2WyVkLCVkLCVkLCVk XSAlZCAleCAlZGtIWlxuIiwKPiArCQkJbW9kZS0+bmFtZSwgbW9kZS0+aGRpc3BsYXksIG1vZGUt PmhzeW5jX3N0YXJ0LAo+ICsJCQltb2RlLT5oc3luY19lbmQsIG1vZGUtPmh0b3RhbCwgbW9kZS0+ dmRpc3BsYXksCj4gKwkJCW1vZGUtPnZzeW5jX3N0YXJ0LCBtb2RlLT52c3luY19lbmQsIG1vZGUt PnZ0b3RhbCwKPiArCQkJbW9kZS0+dnJlZnJlc2gsIG1vZGUtPmZsYWdzLCBtb2RlLT5jbG9jayk7 Cj4gK2ZhaWw6Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCWtmcmVlKG1vZGUpOwo+ICsJCQljb250aW51 ZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKG51bV9vZl9tb2RlcykKPiArCQkqbnVtX29mX21v ZGVzID0gbW9kZV9jb3VudDsKPiArCj4gK2VuZDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAr c3RhdGljIGludCBzbjY1ZHNpODZfcGFyc2VfZ3Bpb3Moc3RydWN0IGRldmljZV9ub2RlICpucCwK PiArCQkJCQlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSkKPiArewo+ICsJaW50IHJldCA9IDA7Cj4g Kwo+ICsJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmRldikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwlwZGF0YS0+Z3Bpb3MuZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2 LCAiZW5hYmxlIiwKPiArCQkJCQkJICBHUElPRF9PVVRfSElHSCk7Cj4gKwlpZiAoSVNfRVJSKHBk YXRhLT5ncGlvcy5lbmFibGVfZ3BpbykpIHsKPiArCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgZW5h YmxlIGdwaW8gZnJvbSBEVFxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+Z3Bpb3MuZW5h YmxlX2dwaW8pOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlwZGF0YS0+Z3Bpb3MuYXV4 X2kyY19zY2wgPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiYXV4LXNjbCIsCj4gKwkJCQkJ CSAgR1BJT0RfT1VUX0hJR0gpOwo+ICsJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb3MuYXV4X2kyY19z Y2wpKSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGF1eCBzY2wgZ3BpbyBmcm9tIERUXG4i KTsKPiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5ncGlvcy5hdXhfaTJjX3NjbCk7Cj4gKwkJZ290 byBleGl0Owo+ICsJfQo+ICsKPiArCXBkYXRhLT5ncGlvcy5hdXhfaTJjX3NkYSA9IGRldm1fZ3Bp b2RfZ2V0KHBkYXRhLT5kZXYsICJhdXgtc2RhIiwKPiArCQkJCQkJICBHUElPRF9PVVRfSElHSCk7 Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5ncGlvcy5hdXhfaTJjX3NkYSkpIHsKPiArCQlwcl9lcnIo ImZhaWxlZCB0byBnZXQgYXV4IHNkYSBncGlvIGZyb20gRFRcbiIpOwo+ICsJCXJldCA9IFBUUl9F UlIocGRhdGEtPmdwaW9zLmF1eF9pMmNfc2RhKTsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ ICsJcGRhdGEtPmdwaW9zLmVkcF9iaWFzX2VuID0gZGV2bV9ncGlvZF9nZXQocGRhdGEtPmRldiwg ImJpYXMtZW4iLAo+ICsJCQkJCQkgIEdQSU9EX09VVF9ISUdIKTsKPiArCWlmIChJU19FUlIocGRh dGEtPmdwaW9zLmVkcF9iaWFzX2VuKSkgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIGdldCBiaWFz IGVuIGdwaW8gZnJvbSBEVFxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+Z3Bpb3MuZWRw X2JpYXNfZW4pOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlwZGF0YS0+Z3Bpb3MuZWRw X2JrbHRfZW4gPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiYmtsdC1lbiIsCj4gKwkJCQkJ CSAgR1BJT0RfT1VUX0hJR0gpOwo+ICsJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb3MuZWRwX2JrbHRf ZW4pKSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGJrbHQgZW4gZ3BpbyBmcm9tIERUXG4i KTsKPiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5ncGlvcy5lZHBfYmtsdF9lbik7Cj4gKwkJZ290 byBleGl0Owo+ICsJfQo+ICsKPiArCXBkYXRhLT5ncGlvcy5pcnFfZ3BpbyA9IGRldm1fZ3Bpb2Rf Z2V0X29wdGlvbmFsKHBkYXRhLT5kZXYsICJpcnEiLAo+ICsJCQkJCQkgIEdQSU9EX09VVF9ISUdI KTsKPiArCWlmIChJU19FUlIocGRhdGEtPmdwaW9zLmlycV9ncGlvKSkKPiArCQlwcl9lcnIoImZh aWxlZCB0byBnZXQgaXJxIGdwaW8gZnJvbSBEVFxuIik7Cj4gKwo+ICsJcGRhdGEtPmdwaW9zLmVk cF9ia2x0X2N0cmwgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2LAo+ICsJCQkJ CSJia2x0LWN0cmwiLCBHUElPRF9PVVRfSElHSCk7Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5ncGlv cy5lZHBfYmtsdF9jdHJsKSkKPiArCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYmtsdCBjdHJsIGdw aW8gZnJvbSBEVFxuIik7Cj4gKwo+ICtleGl0Ogo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBzbjY1ZHNpODZfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg c242NWRzaTg2ICpwZGF0YSkKPiArewo+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+ b2Zfbm9kZTsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25vZGU7Cj4gKwlpbnQgcmV0ID0g MDsKPiArCj4gKwllbmRfbm9kZSA9IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKG5wLCAw LCAwKTsKPiArCWlmICghZW5kX25vZGUpIHsKPiArCQlwcl9lcnIoInJlbW90ZSBlbmRwb2ludCBu b3QgZm91bmRcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXBkYXRhLT5o b3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZF9ub2RlKTsKPiAr CW9mX25vZGVfcHV0KGVuZF9ub2RlKTsKPiArCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkgewo+ICsJ CXByX2VycigicmVtb3RlIG5vZGUgbm90IGZvdW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsK PiArCX0KPiArCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0X25vZGUpOwo+ICsKPiArCXJldCA9IHNu NjVkc2k4Nl9wYXJzZV9ncGlvcyhucCwgcGRhdGEpOwo+ICsKPiArCXBkYXRhLT5pc19wbHVnZ2Fi bGUgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJzbixpcy1wbHVnZ2FibGUiKTsKPiArCXBy X2RlYnVnKCJpc19wbHVnZ2FibGUgPSAlZFxuIiwgcGRhdGEtPmlzX3BsdWdnYWJsZSk7Cj4gKwlp ZiAoIXBkYXRhLT5pc19wbHVnZ2FibGUpIHsKPiArCQlJTklUX0xJU1RfSEVBRCgmcGRhdGEtPm1v ZGVfbGlzdCk7Cj4gKwkJc242NWRzaTg2X3BhcnNlX2R0X21vZGVzKG5wLAo+ICsJCQkmcGRhdGEt Pm1vZGVfbGlzdCwgJnBkYXRhLT5udW1fb2ZfbW9kZXMpOwo+ICsJfQo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc242NWRzaTg2X3Byb2JlKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQsCj4gKwkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+ICt7Cj4g KwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YTsKPiArCWludCByZXQgPSAwOwo+ICsJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsICpuOwo+ICsKPiArCWlmICghY2xpZW50IHx8ICFjbGllbnQt PmRldi5vZl9ub2RlKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNs aWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewo+ICsJCXByX2VycigiZGV2aWNlIGRvZXNu J3Qgc3VwcG9ydCBJMkNcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXBk YXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwKPiArCQlzaXplb2Yoc3RydWN0IHNuNjVk c2k4NiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwZGF0YSkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlwZGF0YS0+cG93ZXJfb24gPSBmYWxzZTsKPiArCXBkYXRhLT5pc19wbHVnZ2FibGUg PSBmYWxzZTsKPiArCXBkYXRhLT5jb25uZWN0b3Jfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19k aXNjb25uZWN0ZWQ7Cj4gKwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2Owo+ICsJcGRhdGEtPmky Y19jbGllbnQgPSBjbGllbnQ7Cj4gKwlwcl9kZWJ1ZygiSTJDIGFkZHJlc3MgaXMgJXhcbiIsIGNs aWVudC0+YWRkcik7Cj4gKwo+ICsJcmV0ID0gc242NWRzaTg2X3BhcnNlX2R0KCZjbGllbnQtPmRl diwgcGRhdGEpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGRl dmljZSB0cmVlXG4iKTsKPiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPiArCX0KPiArCj4gKwlzbjY1 ZHNpODZfZ3Bpb19jb25maWd1cmUocGRhdGEsIHRydWUpOwo+ICsKPiArCXJldCA9IHNuNjVkc2k4 Nl9pbml0X3JlZ3VsYXRvcnMocGRhdGEpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2VycigiZmFp bGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKPiArCQlnb3RvIGVycl9ncGlvX2NvbmZpZzsK PiArCX0KPiArCj4gKwlyZXQgPSBzbjY1ZHNpODZfcmVhZF9kZXZpY2VfcmV2KHBkYXRhKTsKPiAr CWlmIChyZXQpIHsKPiArCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGNoaXAgcmV2XG4iKTsKPiAr CQlnb3RvIGVycl9ncGlvX2NvbmZpZzsKPiArCX0gZWxzZSB7Cj4gKwkJcHJfZGVidWcoImJyaWRn ZSBjaGlwIGVuYWJsZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKPiArCQlwZGF0YS0+cG93ZXJfb24gPSB0 cnVlOwo+ICsJfQo+ICsKPiArCXBkYXRhLT5pcnEgPSBncGlvZF90b19pcnEocGRhdGEtPmdwaW9z LmlycV9ncGlvKTsKPiArCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBkYXRhLT5pcnEsIE5V TEwsCj4gKwkJCXNuNjVkc2k4Nl9pcnFfdGhyZWFkX2hhbmRsZXIsCj4gKwkJCUlSUUZfVFJJR0dF Ul9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULAo+ICsJCQkic242NWRzaTg2IiwgcGRhdGEpOwo+ICsK PiArCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsKPiArCWRldl9zZXRfZHJ2ZGF0 YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPiArCj4gKwlwZGF0YS0+YnJpZGdlLmZ1bmNzID0gJnNu NjVkc2k4Nl9icmlkZ2VfZnVuY3M7Cj4gKwlwZGF0YS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQt PmRldi5vZl9ub2RlOwo+ICsKPiArCWRybV9icmlkZ2VfYWRkKCZwZGF0YS0+YnJpZGdlKTsKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICsKPiArZXJyX2dwaW9fY29uZmlnOgo+ICsJc242NWRzaTg2X2dw aW9fY29uZmlndXJlKHBkYXRhLCBmYWxzZSk7Cj4gK2Vycl9kdF9wYXJzZToKPiArCWlmICghcGRh dGEtPmlzX3BsdWdnYWJsZSkgewo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCBu LCAmcGRhdGEtPm1vZGVfbGlzdCwgaGVhZCkgewo+ICsJCQlsaXN0X2RlbCgmbW9kZS0+aGVhZCk7 Cj4gKwkJCWtmcmVlKG1vZGUpOwo+ICsJCX0KPiArCQlwZGF0YS0+bnVtX29mX21vZGVzID0gMDsK PiArCX0KPiArCWRldm1fa2ZyZWUoJmNsaWVudC0+ZGV2LCBwZGF0YSk7Cj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNuNjVkc2k4Nl9yZW1vdmUoc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCkKPiArewo+ICsJaW50IHJldCA9IC1FSU5WQUw7Cj4gKwlzdHJ1Y3Qgc242NWRz aTg2ICpwZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+ICsJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsICpuOwo+ICsKPiArCWlmICghcGRhdGEpCj4gKwkJZ290byBlbmQ7 Cj4gKwo+ICsJbWlwaV9kc2lfZGV0YWNoKHBkYXRhLT5kc2kpOwo+ICsJbWlwaV9kc2lfZGV2aWNl X3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7Cj4gKwo+ICsJZHJtX2JyaWRnZV9yZW1vdmUoJnBkYXRh LT5icmlkZ2UpOwo+ICsKPiArCWRpc2FibGVfaXJxKHBkYXRhLT5pcnEpOwo+ICsJZnJlZV9pcnEo cGRhdGEtPmlycSwgcGRhdGEpOwo+ICsKPiArCXNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShwZGF0 YSwgZmFsc2UpOwo+ICsKPiArCWlmICghcGRhdGEtPmlzX3BsdWdnYWJsZSkgewo+ICsJCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCBuLCAmcGRhdGEtPm1vZGVfbGlzdCwgaGVhZCkgewo+ ICsJCQlsaXN0X2RlbCgmbW9kZS0+aGVhZCk7Cj4gKwkJCWtmcmVlKG1vZGUpOwo+ICsJCX0KPiAr CX0KPiArCj4gKwlkZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgcGRhdGEpOwo+ICsKPiArZW5kOgo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNu NjVkc2k4Nl9pZFtdID0gewo+ICsJeyAidGksc242NWRzaTg2IiwgMH0sCj4gKwl7fQo+ICt9Owo+ ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc242NWRzaTg2X2lkKTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNuNjVkc2k4Nl9tYXRjaF90YWJsZVtdID0gewo+ICsJ ey5jb21wYXRpYmxlID0gInRpLHNuNjVkc2k4NiJ9LAo+ICsJe30KPiArfTsKPiArTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgc242NWRzaTg2X21hdGNoX3RhYmxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgaTJjX2RyaXZlciBzbjY1ZHNpODZfZHJpdmVyID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQku bmFtZSA9ICJzbjY1ZHNpODYiLAo+ICsJCS5vd25lciA9IFRISVNfTU9EVUxFLAo+ICsJCS5vZl9t YXRjaF90YWJsZSA9IHNuNjVkc2k4Nl9tYXRjaF90YWJsZSwKPiArCX0sCj4gKwkucHJvYmUgPSBz bjY1ZHNpODZfcHJvYmUsCj4gKwkucmVtb3ZlID0gc242NWRzaTg2X3JlbW92ZSwKPiArCS5pZF90 YWJsZSA9IHNuNjVkc2k4Nl9pZCwKPiArfTsKPiArCj4gK21vZHVsZV9pMmNfZHJpdmVyKHNuNjVk c2k4Nl9kcml2ZXIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlNONjVEU0k4NiBEU0kgdG8gZURQ IGJyaWRnZSBkcml2ZXIiKTsKPiAtLSAKPiBUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIs IEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAo+IGEgTGludXggRm91 bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKPiAKCi0tIApTZWFuIFBhdWwsIFNvZnR3YXJl IEVuZ2luZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0Bs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9mcmVlZHJlbm8K