From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH] drm/amdgpu: remove old CI DPM implementation Date: Thu, 24 Jan 2019 09:25:20 +0100 Message-ID: <83f475a1-e2b1-6fe6-d0cc-1cd71478f20c@gmail.com> References: <20190123190525.6288-1-alexander.deucher@amd.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Quan, Evan" , Alex Deucher , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Deucher, Alexander" QWNrZWQtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KCkFt IDI0LjAxLjE5IHVtIDA0OjMwIHNjaHJpZWIgUXVhbiwgRXZhbjoKPiBSZXZpZXdlZC1ieTogRXZh biBRdWFuIDxldmFuLnF1YW5AYW1kLmNvbT4KPgo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQo+PiBGcm9tOiBhbWQtZ2Z4IDxhbWQtZ2Z4LWJvdW5jZXNAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn PiBPbiBCZWhhbGYgT2YgQWxleAo+PiBEZXVjaGVyCj4+IFNlbnQ6IDIwMTnlubQx5pyIMjTml6Ug MzowNQo+PiBUbzogYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gQ2M6IERldWNoZXIs IEFsZXhhbmRlciA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbT4KPj4gU3ViamVjdDogW1BBVENI XSBkcm0vYW1kZ3B1OiByZW1vdmUgb2xkIENJIERQTSBpbXBsZW1lbnRhdGlvbgo+Pgo+PiBUaGUg cG93ZXIgc211NyBwb3dlcnBsYXkgY29kZSBpcyBtdWNoIG1vcmUgcm9idXN0IGFuZCBoYXMKPj4g YmVlbiB0aGUgZGVmYXVsdCBmb3IgYSB3aGlsZSBub3cuICBSZW1vdmUgdGhlIG9sZCBjb2RlLgo+ Pgo+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5j b20+Cj4+IC0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICB8ICAg IDIgKy0KPj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaV9kcG0uYyAgfCA2ODQ0IC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv Y2lfZHBtLmggIHwgIDM0OSAtLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2NpX3Nt Yy5jICB8ICAyNzkgLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYyAgICAg fCAgIDEwICstCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrX2RwbS5oIHwgICAg MSAtCj4+ICAgNiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDc0ODIgZGVsZXRpb25z KC0pCj4+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Np X2RwbS5jCj4+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2NpX2RwbS5oCj4+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2NpX3NtYy5jCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9NYWtlZmlsZQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCj4+IGlu ZGV4IGY3NmJjYjljNDVlNC4uNDY2ZGE1OTU0YTY4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9NYWtlZmlsZQo+PiBAQCAtNTcsNyArNTcsNyBAQCBhbWRncHUteSArPSBhbWRncHVfZGV2 aWNlLm8gYW1kZ3B1X2ttcy5vIFwKPj4KPj4gICAjIGFkZCBhc2ljIHNwZWNpZmljIGJsb2NrCj4+ ICAgYW1kZ3B1LSQoQ09ORklHX0RSTV9BTURHUFVfQ0lLKSs9IGNpay5vIGNpa19paC5vIGt2X3Nt Yy5vCj4+IGt2X2RwbS5vIFwKPj4gLQljaV9zbWMubyBjaV9kcG0ubyBkY2VfdjhfMC5vIGdmeF92 N18wLm8gY2lrX3NkbWEubyB1dmRfdjRfMi5vCj4+IHZjZV92Ml8wLm8KPj4gKwlkY2VfdjhfMC5v IGdmeF92N18wLm8gY2lrX3NkbWEubyB1dmRfdjRfMi5vIHZjZV92Ml8wLm8KPj4KPj4gICBhbWRn cHUtJChDT05GSUdfRFJNX0FNREdQVV9TSSkrPSBzaS5vIGdtY192Nl8wLm8gZ2Z4X3Y2XzAubwo+ PiBzaV9paC5vIHNpX2RtYS5vIGRjZV92Nl8wLm8gc2lfZHBtLm8gc2lfc21jLm8KPj4KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2NpX2RwbS5jCj4+IGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvY2lfZHBtLmMKPj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 Cj4+IGluZGV4IDg2ZTE0Yzc1NGRkNC4uMDAwMDAwMDAwMDAwCj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2NpX2RwbS5jCj4+ICsrKyAvZGV2L251bGwKPj4gQEAgLTEsNjg0NCAr MCwwIEBACj4+IC0vKgo+PiAtICogQ29weXJpZ2h0IDIwMTMgQWR2YW5jZWQgTWljcm8gRGV2aWNl cywgSW5jLgo+PiAtICoKPj4gLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4+IC0gKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+PiAtICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+PiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4+IC0g KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKPj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+IC0gKgo+PiAtICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j bHVkZWQgaW4KPj4gLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgo+PiAtICoKPj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+PiBFWFBSRVNTIE9SCj4+IC0gKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+IE1F UkNIQU5UQUJJTElUWSwKPj4gLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTwo+PiBFVkVOVCBTSEFMTAo+PiAtICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+PiBE QU1BR0VTIE9SCj4+IC0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SCj4+IE9USEVSV0lTRSwKPj4gLSAqIEFSSVNJTkcgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKPj4gVEhFIFVTRSBPUgo+ PiAtICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+PiAtICoKPj4gLSAqLwo+PiAt Cj4+IC0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KPj4gLSNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+PiAtI2luY2x1ZGUgImFtZGdwdS5oIgo+PiAtI2luY2x1ZGUgImFtZGdwdV9wbS5oIgo+PiAt I2luY2x1ZGUgImFtZGdwdV91Y29kZS5oIgo+PiAtI2luY2x1ZGUgImNpa2QuaCIKPj4gLSNpbmNs dWRlICJhbWRncHVfZHBtLmgiCj4+IC0jaW5jbHVkZSAiY2lfZHBtLmgiCj4+IC0jaW5jbHVkZSAi Z2Z4X3Y3XzAuaCIKPj4gLSNpbmNsdWRlICJhdG9tLmgiCj4+IC0jaW5jbHVkZSAiYW1kX3BjaWUu aCIKPj4gLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgo+PiAtCj4+IC0jaW5jbHVkZSAic211 L3NtdV83XzBfMV9kLmgiCj4+IC0jaW5jbHVkZSAic211L3NtdV83XzBfMV9zaF9tYXNrLmgiCj4+ IC0KPj4gLSNpbmNsdWRlICJkY2UvZGNlXzhfMF9kLmgiCj4+IC0jaW5jbHVkZSAiZGNlL2RjZV84 XzBfc2hfbWFzay5oIgo+PiAtCj4+IC0jaW5jbHVkZSAiYmlmL2JpZl80XzFfZC5oIgo+PiAtI2lu Y2x1ZGUgImJpZi9iaWZfNF8xX3NoX21hc2suaCIKPj4gLQo+PiAtI2luY2x1ZGUgImdjYS9nZnhf N18yX2QuaCIKPj4gLSNpbmNsdWRlICJnY2EvZ2Z4XzdfMl9zaF9tYXNrLmgiCj4+IC0KPj4gLSNp bmNsdWRlICJnbWMvZ21jXzdfMV9kLmgiCj4+IC0jaW5jbHVkZSAiZ21jL2dtY183XzFfc2hfbWFz ay5oIgo+PiAtCj4+IC1NT0RVTEVfRklSTVdBUkUoImFtZGdwdS9ib25haXJlX3NtYy5iaW4iKTsK Pj4gLU1PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L2JvbmFpcmVfa19zbWMuYmluIik7Cj4+IC1NT0RV TEVfRklSTVdBUkUoImFtZGdwdS9oYXdhaWlfc21jLmJpbiIpOwo+PiAtTU9EVUxFX0ZJUk1XQVJF KCJhbWRncHUvaGF3YWlpX2tfc21jLmJpbiIpOwo+PiAtCj4+IC0jZGVmaW5lIE1DX0NHX0FSQl9G UkVRX0YwICAgICAgICAgICAweDBhCj4+IC0jZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YxICAgICAg ICAgICAweDBiCj4+IC0jZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YyICAgICAgICAgICAweDBjCj4+ IC0jZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YzICAgICAgICAgICAweDBkCj4+IC0KPj4gLSNkZWZp bmUgU01DX1JBTV9FTkQgMHg0MDAwMAo+PiAtCj4+IC0jZGVmaW5lIFZPTFRBR0VfU0NBTEUgICAg ICAgICAgICAgICA0Cj4+IC0jZGVmaW5lIFZPTFRBR0VfVklEX09GRlNFVF9TQ0FMRTEgICAgNjI1 Cj4+IC0jZGVmaW5lIFZPTFRBR0VfVklEX09GRlNFVF9TQ0FMRTIgICAgMTAwCj4+IC0KPj4gLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzIGNpX2RwbV9mdW5jczsKPj4gLQo+PiAtc3Rh dGljIGNvbnN0IHN0cnVjdCBjaV9wdF9kZWZhdWx0cyBkZWZhdWx0c19oYXdhaWlfeHQgPQo+PiAt ewo+PiAtCTEsIDB4RiwgMHhGRCwgMHgxOSwgNSwgMHgxNCwgMCwgMHhCMDAwMCwKPj4gLQl7IDB4 MkUsICAweDAwLCAgMHgwMCwgIDB4ODgsICAweDAwLCAgMHgwMCwgIDB4NzIsICAweDYwLCAgMHg1 MSwgIDB4QTcsICAweDc5LAo+PiAweDZCLCAgMHg5MCwgIDB4QkQsICAweDc5ICB9LAo+PiAtCXsg MHgyMTcsIDB4MjE3LCAweDIxNywgMHgyNDIsIDB4MjQyLCAweDI0MiwgMHgyNjksIDB4MjY5LCAw eDI2OSwKPj4gMHgyQTEsIDB4MkExLCAweDJBMSwgMHgyQzksIDB4MkM5LCAweDJDOSB9Cj4+IC19 Owo+PiAtCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGNpX3B0X2RlZmF1bHRzIGRlZmF1bHRzX2hh d2FpaV9wcm8gPQo+PiAtewo+PiAtCTEsIDB4RiwgMHhGRCwgMHgxOSwgNSwgMHgxNCwgMCwgMHg2 NTA2MiwKPj4gLQl7IDB4MkUsICAweDAwLCAgMHgwMCwgIDB4ODgsICAweDAwLCAgMHgwMCwgIDB4 NzIsICAweDYwLCAgMHg1MSwgIDB4QTcsICAweDc5LAo+PiAweDZCLCAgMHg5MCwgIDB4QkQsICAw eDc5ICB9LAo+PiAtCXsgMHgyMTcsIDB4MjE3LCAweDIxNywgMHgyNDIsIDB4MjQyLCAweDI0Miwg MHgyNjksIDB4MjY5LCAweDI2OSwKPj4gMHgyQTEsIDB4MkExLCAweDJBMSwgMHgyQzksIDB4MkM5 LCAweDJDOSB9Cj4+IC19Owo+PiAtCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGNpX3B0X2RlZmF1 bHRzIGRlZmF1bHRzX2JvbmFpcmVfeHQgPQo+PiAtewo+PiAtCTEsIDB4RiwgMHhGRCwgMHgxOSwg NSwgNDUsIDAsIDB4QjAwMDAsCj4+IC0JeyAweDc5LCAgMHgyNTMsIDB4MjVELCAweEFFLCAgMHg3 MiwgIDB4ODAsICAweDgzLCAgMHg4NiwgIDB4NkYsICAweEM4LAo+PiAweEM5LCAgMHhDOSwgIDB4 MkYsICAweDRELCAgMHg2MSAgfSwKPj4gLQl7IDB4MTdDLCAweDE3MiwgMHgxODAsIDB4MUJDLCAw eDFCMywgMHgxQkQsIDB4MjA2LCAweDIwMCwgMHgyMDMsCj4+IDB4MjVELCAweDI1QSwgMHgyNTUs IDB4MkMzLCAweDJDNSwgMHgyQjQgfQo+PiAtfTsKPj4gLQo+PiAtI2lmIDAKPj4gLXN0YXRpYyBj b25zdCBzdHJ1Y3QgY2lfcHRfZGVmYXVsdHMgZGVmYXVsdHNfYm9uYWlyZV9wcm8gPQo+PiAtewo+ PiAtCTEsIDB4RiwgMHhGRCwgMHgxOSwgNSwgNDUsIDAsIDB4NjUwNjIsCj4+IC0JeyAweDhDLCAg MHgyM0YsIDB4MjQ0LCAweEE2LCAgMHg4MywgIDB4ODUsICAweDg2LCAgMHg4NiwgIDB4ODMsICAw eERCLAo+PiAweERCLCAgMHhEQSwgIDB4NjcsICAweDYwLCAgMHg1RiAgfSwKPj4gLQl7IDB4MTg3 LCAweDE5MywgMHgxOTMsIDB4MUM3LCAweDFEMSwgMHgxRDEsIDB4MjEwLCAweDIxOSwgMHgyMTks Cj4+IDB4MjY2LCAweDI2QywgMHgyNkMsIDB4MkM5LCAweDJDQiwgMHgyQ0IgfQo+PiAtfTsKPj4g LSNlbmRpZgo+PiAtCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGNpX3B0X2RlZmF1bHRzIGRlZmF1 bHRzX3NhdHVybl94dCA9Cj4+IC17Cj4+IC0JMSwgMHhGLCAweEZELCAweDE5LCA1LCA1NSwgMCwg MHg3MDAwMCwKPj4gLQl7IDB4OEMsICAweDI0NywgMHgyNDksIDB4QTYsICAweDgwLCAgMHg4MSwg IDB4OEIsICAweDg5LCAgMHg4NiwgIDB4QzksCj4+IDB4Q0EsICAweEM5LCAgMHg0RCwgIDB4NEQs ICAweDREICB9LAo+PiAtCXsgMHgxODcsIDB4MTg3LCAweDE4NywgMHgxQzcsIDB4MUM3LCAweDFD NywgMHgyMTAsIDB4MjEwLCAweDIxMCwKPj4gMHgyNjYsIDB4MjY2LCAweDI2NiwgMHgyQzksIDB4 MkM5LCAweDJDOSB9Cj4+IC19Owo+PiAtCj4+IC0jaWYgMAo+PiAtc3RhdGljIGNvbnN0IHN0cnVj dCBjaV9wdF9kZWZhdWx0cyBkZWZhdWx0c19zYXR1cm5fcHJvID0KPj4gLXsKPj4gLQkxLCAweEYs IDB4RkQsIDB4MTksIDUsIDU1LCAwLCAweDMwMDAwLAo+PiAtCXsgMHg5NiwgIDB4MjFELCAweDIz QiwgMHhBMSwgIDB4ODUsICAweDg3LCAgMHg4MywgIDB4ODQsICAweDgxLCAgMHhFNiwKPj4gMHhF NiwgIDB4RTYsICAweDcxLCAgMHg2QSwgIDB4NkEgIH0sCj4+IC0JeyAweDE5MywgMHgxOUUsIDB4 MTlFLCAweDFEMiwgMHgxREMsIDB4MURDLCAweDIxQSwgMHgyMjMsIDB4MjIzLAo+PiAweDI2RSwg MHgyN0UsIDB4Mjc0LCAweDJDRiwgMHgyRDIsIDB4MkQyIH0KPj4gLX07Cj4+IC0jZW5kaWYKPj4g LQo+PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBjaV9wdF9jb25maWdfcmVnIGRpZHRfY29uZmlnX2Np W10gPQo+PiAtewo+PiAtCXsgMHgxMCwgMHgwMDAwMDBmZiwgMCwgMHgwLCBDSVNMQU5EU19DT05G SUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MTAsIDB4MDAwMGZmMDAsIDgsIDB4MCwgQ0lTTEFO RFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDEwLCAweDAwZmYwMDAwLCAxNiwgMHgw LCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MTAsIDB4ZmYwMDAwMDAs IDI0LCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHgxMSwgMHgw MDAwMDBmZiwgMCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4 MTEsIDB4MDAwMGZmMDAsIDgsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+ IC0JeyAweDExLCAweDAwZmYwMDAwLCAxNiwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9J TkQgfSwKPj4gLQl7IDB4MTEsIDB4ZmYwMDAwMDAsIDI0LCAweDAsIENJU0xBTkRTX0NPTkZJR1JF R19ESURUX0lORCB9LAo+PiAtCXsgMHgxMiwgMHgwMDAwMDBmZiwgMCwgMHgwLCBDSVNMQU5EU19D T05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MTIsIDB4MDAwMGZmMDAsIDgsIDB4MCwgQ0lT TEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDEyLCAweDAwZmYwMDAwLCAxNiwg MHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MTIsIDB4ZmYwMDAw MDAsIDI0LCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHgyLCAw eDAwMDAzZmZmLCAwLCAweDQsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsg MHgyLCAweDAzZmYwMDAwLCAxNiwgMHg4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0s Cj4+IC0JeyAweDIsIDB4NzgwMDAwMDAsIDI3LCAweDMsIENJU0xBTkRTX0NPTkZJR1JFR19ESURU X0lORCB9LAo+PiAtCXsgMHgxLCAweDAwMDBmZmZmLCAwLCAweDNGRkYsIENJU0xBTkRTX0NPTkZJ R1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHgxLCAweGZmZmYwMDAwLCAxNiwgMHgzRkZGLCBDSVNM QU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MCwgMHgwMDAwMDAwMSwgMCwgMHgw LCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MzAsIDB4MDAwMDAwZmYs IDAsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDMwLCAweDAw MDBmZjAwLCA4LCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHgz MCwgMHgwMGZmMDAwMCwgMTYsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+ IC0JeyAweDMwLCAweGZmMDAwMDAwLCAyNCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9J TkQgfSwKPj4gLQl7IDB4MzEsIDB4MDAwMDAwZmYsIDAsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVH X0RJRFRfSU5EIH0sCj4+IC0JeyAweDMxLCAweDAwMDBmZjAwLCA4LCAweDAsIENJU0xBTkRTX0NP TkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHgzMSwgMHgwMGZmMDAwMCwgMTYsIDB4MCwgQ0lT TEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDMxLCAweGZmMDAwMDAwLCAyNCwg MHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MzIsIDB4MDAwMDAw ZmYsIDAsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDMyLCAw eDAwMDBmZjAwLCA4LCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsg MHgzMiwgMHgwMGZmMDAwMCwgMTYsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0s Cj4+IC0JeyAweDMyLCAweGZmMDAwMDAwLCAyNCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElE VF9JTkQgfSwKPj4gLQl7IDB4MjIsIDB4MDAwMDNmZmYsIDAsIDB4NCwgQ0lTTEFORFNfQ09ORklH UkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDIyLCAweDAzZmYwMDAwLCAxNiwgMHg4MCwgQ0lTTEFO RFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDIyLCAweDc4MDAwMDAwLCAyNywgMHgz LCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4MjEsIDB4MDAwMGZmZmYs IDAsIDB4M0ZGRiwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDIxLCAw eGZmZmYwMDAwLCAxNiwgMHgzRkZGLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4g LQl7IDB4MjAsIDB4MDAwMDAwMDEsIDAsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5E IH0sCj4+IC0JeyAweDUwLCAweDAwMDAwMGZmLCAwLCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19E SURUX0lORCB9LAo+PiAtCXsgMHg1MCwgMHgwMDAwZmYwMCwgOCwgMHgwLCBDSVNMQU5EU19DT05G SUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NTAsIDB4MDBmZjAwMDAsIDE2LCAweDAsIENJU0xB TkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHg1MCwgMHhmZjAwMDAwMCwgMjQsIDB4 MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDUxLCAweDAwMDAwMGZm LCAwLCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHg1MSwgMHgw MDAwZmYwMCwgOCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4 NTEsIDB4MDBmZjAwMDAsIDE2LCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+ PiAtCXsgMHg1MSwgMHhmZjAwMDAwMCwgMjQsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRf SU5EIH0sCj4+IC0JeyAweDUyLCAweDAwMDAwMGZmLCAwLCAweDAsIENJU0xBTkRTX0NPTkZJR1JF R19ESURUX0lORCB9LAo+PiAtCXsgMHg1MiwgMHgwMDAwZmYwMCwgOCwgMHgwLCBDSVNMQU5EU19D T05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NTIsIDB4MDBmZjAwMDAsIDE2LCAweDAsIENJ U0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHg1MiwgMHhmZjAwMDAwMCwgMjQs IDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDQyLCAweDAwMDAz ZmZmLCAwLCAweDQsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHg0Miwg MHgwM2ZmMDAwMCwgMTYsIDB4ODAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAt CXsgMHg0MiwgMHg3ODAwMDAwMCwgMjcsIDB4MywgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5E IH0sCj4+IC0JeyAweDQxLCAweDAwMDBmZmZmLCAwLCAweDNGRkYsIENJU0xBTkRTX0NPTkZJR1JF R19ESURUX0lORCB9LAo+PiAtCXsgMHg0MSwgMHhmZmZmMDAwMCwgMTYsIDB4M0ZGRiwgQ0lTTEFO RFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDQwLCAweDAwMDAwMDAxLCAwLCAweDAs IENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHg3MCwgMHgwMDAwMDBmZiwg MCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NzAsIDB4MDAw MGZmMDAsIDgsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDcw LCAweDAwZmYwMDAwLCAxNiwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4g LQl7IDB4NzAsIDB4ZmYwMDAwMDAsIDI0LCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lO RCB9LAo+PiAtCXsgMHg3MSwgMHgwMDAwMDBmZiwgMCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdf RElEVF9JTkQgfSwKPj4gLQl7IDB4NzEsIDB4MDAwMGZmMDAsIDgsIDB4MCwgQ0lTTEFORFNfQ09O RklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAweDcxLCAweDAwZmYwMDAwLCAxNiwgMHgwLCBDSVNM QU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NzEsIDB4ZmYwMDAwMDAsIDI0LCAw eDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHg3MiwgMHgwMDAwMDBm ZiwgMCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NzIsIDB4 MDAwMGZmMDAsIDgsIDB4MCwgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EIH0sCj4+IC0JeyAw eDcyLCAweDAwZmYwMDAwLCAxNiwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwK Pj4gLQl7IDB4NzIsIDB4ZmYwMDAwMDAsIDI0LCAweDAsIENJU0xBTkRTX0NPTkZJR1JFR19ESURU X0lORCB9LAo+PiAtCXsgMHg2MiwgMHgwMDAwM2ZmZiwgMCwgMHg0LCBDSVNMQU5EU19DT05GSUdS RUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NjIsIDB4MDNmZjAwMDAsIDE2LCAweDgwLCBDSVNMQU5E U19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NjIsIDB4NzgwMDAwMDAsIDI3LCAweDMs IENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAtCXsgMHg2MSwgMHgwMDAwZmZmZiwg MCwgMHgzRkZGLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQgfSwKPj4gLQl7IDB4NjEsIDB4 ZmZmZjAwMDAsIDE2LCAweDNGRkYsIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lORCB9LAo+PiAt CXsgMHg2MCwgMHgwMDAwMDAwMSwgMCwgMHgwLCBDSVNMQU5EU19DT05GSUdSRUdfRElEVF9JTkQg fSwKPj4gLQl7IDB4RkZGRkZGRkYgfQo+PiAtfTsKPj4gLQo+PiAtc3RhdGljIHU4IGNpX2dldF9t ZW1vcnlfbW9kdWxlX2luZGV4KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAt CXJldHVybiAodTgpICgoUlJFRzMyKG1tQklPU19TQ1JBVENIXzQpID4+IDE2KSAmIDB4ZmYpOwo+ PiAtfQo+PiAtCj4+IC0jZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YwICAgICAgICAgICAweDBhCj4+ IC0jZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YxICAgICAgICAgICAweDBiCj4+IC0jZGVmaW5lIE1D X0NHX0FSQl9GUkVRX0YyICAgICAgICAgICAweDBjCj4+IC0jZGVmaW5lIE1DX0NHX0FSQl9GUkVR X0YzICAgICAgICAgICAweDBkCj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfY29weV9hbmRfc3dpdGNo X2FyYl9zZXRzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCSAgICAgICB1MzIg YXJiX2ZyZXFfc3JjLCB1MzIgYXJiX2ZyZXFfZGVzdCkKPj4gLXsKPj4gLQl1MzIgbWNfYXJiX2Ry YW1fdGltaW5nOwo+PiAtCXUzMiBtY19hcmJfZHJhbV90aW1pbmcyOwo+PiAtCXUzMiBidXJzdF90 aW1lOwo+PiAtCXUzMiBtY19jZ19jb25maWc7Cj4+IC0KPj4gLQlzd2l0Y2ggKGFyYl9mcmVxX3Ny Yykgewo+PiAtCWNhc2UgTUNfQ0dfQVJCX0ZSRVFfRjA6Cj4+IC0JCW1jX2FyYl9kcmFtX3RpbWlu ZyAgPQo+PiBSUkVHMzIobW1NQ19BUkJfRFJBTV9USU1JTkcpOwo+PiAtCQltY19hcmJfZHJhbV90 aW1pbmcyID0KPj4gUlJFRzMyKG1tTUNfQVJCX0RSQU1fVElNSU5HMik7Cj4+IC0JCWJ1cnN0X3Rp bWUgPSAoUlJFRzMyKG1tTUNfQVJCX0JVUlNUX1RJTUUpICYKPj4gTUNfQVJCX0JVUlNUX1RJTUVf X1NUQVRFMF9NQVNLKSA+Pgo+PiAtCQkJIE1DX0FSQl9CVVJTVF9USU1FX19TVEFURTBfX1NISUZU Owo+PiAtCQlicmVhazsKPj4gLQljYXNlIE1DX0NHX0FSQl9GUkVRX0YxOgo+PiAtCQltY19hcmJf ZHJhbV90aW1pbmcgID0KPj4gUlJFRzMyKG1tTUNfQVJCX0RSQU1fVElNSU5HXzEpOwo+PiAtCQlt Y19hcmJfZHJhbV90aW1pbmcyID0KPj4gUlJFRzMyKG1tTUNfQVJCX0RSQU1fVElNSU5HMl8xKTsK Pj4gLQkJYnVyc3RfdGltZSA9IChSUkVHMzIobW1NQ19BUkJfQlVSU1RfVElNRSkgJgo+PiBNQ19B UkJfQlVSU1RfVElNRV9fU1RBVEUxX01BU0spID4+Cj4+IC0JCQkgTUNfQVJCX0JVUlNUX1RJTUVf X1NUQVRFMV9fU0hJRlQ7Cj4+IC0JCWJyZWFrOwo+PiAtCWRlZmF1bHQ6Cj4+IC0JCXJldHVybiAt RUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAtCXN3aXRjaCAoYXJiX2ZyZXFfZGVzdCkgewo+PiAtCWNh c2UgTUNfQ0dfQVJCX0ZSRVFfRjA6Cj4+IC0JCVdSRUczMihtbU1DX0FSQl9EUkFNX1RJTUlORywK Pj4gbWNfYXJiX2RyYW1fdGltaW5nKTsKPj4gLQkJV1JFRzMyKG1tTUNfQVJCX0RSQU1fVElNSU5H MiwKPj4gbWNfYXJiX2RyYW1fdGltaW5nMik7Cj4+IC0JCVdSRUczMl9QKG1tTUNfQVJCX0JVUlNU X1RJTUUsIChidXJzdF90aW1lIDw8Cj4+IE1DX0FSQl9CVVJTVF9USU1FX19TVEFURTBfX1NISUZU KSwKPj4gLQkJCX5NQ19BUkJfQlVSU1RfVElNRV9fU1RBVEUwX01BU0spOwo+PiAtCQlicmVhazsK Pj4gLQljYXNlIE1DX0NHX0FSQl9GUkVRX0YxOgo+PiAtCQlXUkVHMzIobW1NQ19BUkJfRFJBTV9U SU1JTkdfMSwKPj4gbWNfYXJiX2RyYW1fdGltaW5nKTsKPj4gLQkJV1JFRzMyKG1tTUNfQVJCX0RS QU1fVElNSU5HMl8xLAo+PiBtY19hcmJfZHJhbV90aW1pbmcyKTsKPj4gLQkJV1JFRzMyX1AobW1N Q19BUkJfQlVSU1RfVElNRSwgKGJ1cnN0X3RpbWUgPDwKPj4gTUNfQVJCX0JVUlNUX1RJTUVfX1NU QVRFMV9fU0hJRlQpLAo+PiAtCQkJfk1DX0FSQl9CVVJTVF9USU1FX19TVEFURTFfTUFTSyk7Cj4+ IC0JCWJyZWFrOwo+PiAtCWRlZmF1bHQ6Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0KPj4g LQo+PiAtCW1jX2NnX2NvbmZpZyA9IFJSRUczMihtbU1DX0NHX0NPTkZJRykgfCAweDAwMDAwMDBG Owo+PiAtCVdSRUczMihtbU1DX0NHX0NPTkZJRywgbWNfY2dfY29uZmlnKTsKPj4gLQlXUkVHMzJf UChtbU1DX0FSQl9DRywgKGFyYl9mcmVxX2Rlc3QpIDw8Cj4+IE1DX0FSQl9DR19fQ0dfQVJCX1JF UV9fU0hJRlQsCj4+IC0JCX5NQ19BUkJfQ0dfX0NHX0FSQl9SRVFfTUFTSyk7Cj4+IC0KPj4gLQly ZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHU4IGNpX2dldF9kZHIzX21jbGtfZnJlcXVl bmN5X3JhdGlvKHUzMiBtZW1vcnlfY2xvY2spCj4+IC17Cj4+IC0JdTggbWNfcGFyYV9pbmRleDsK Pj4gLQo+PiAtCWlmIChtZW1vcnlfY2xvY2sgPCAxMDAwMCkKPj4gLQkJbWNfcGFyYV9pbmRleCA9 IDA7Cj4+IC0JZWxzZSBpZiAobWVtb3J5X2Nsb2NrID49IDgwMDAwKQo+PiAtCQltY19wYXJhX2lu ZGV4ID0gMHgwZjsKPj4gLQllbHNlCj4+IC0JCW1jX3BhcmFfaW5kZXggPSAodTgpKChtZW1vcnlf Y2xvY2sgLSAxMDAwMCkgLyA1MDAwICsgMSk7Cj4+IC0JcmV0dXJuIG1jX3BhcmFfaW5kZXg7Cj4+ IC19Cj4+IC0KPj4gLXN0YXRpYyB1OCBjaV9nZXRfbWNsa19mcmVxdWVuY3lfcmF0aW8odTMyIG1l bW9yeV9jbG9jaywgYm9vbAo+PiBzdHJvYmVfbW9kZSkKPj4gLXsKPj4gLQl1OCBtY19wYXJhX2lu ZGV4Owo+PiAtCj4+IC0JaWYgKHN0cm9iZV9tb2RlKSB7Cj4+IC0JCWlmIChtZW1vcnlfY2xvY2sg PCAxMjUwMCkKPj4gLQkJCW1jX3BhcmFfaW5kZXggPSAweDAwOwo+PiAtCQllbHNlIGlmIChtZW1v cnlfY2xvY2sgPiA0NzUwMCkKPj4gLQkJCW1jX3BhcmFfaW5kZXggPSAweDBmOwo+PiAtCQllbHNl Cj4+IC0JCQltY19wYXJhX2luZGV4ID0gKHU4KSgobWVtb3J5X2Nsb2NrIC0gMTAwMDApIC8KPj4g MjUwMCk7Cj4+IC0JfSBlbHNlIHsKPj4gLQkJaWYgKG1lbW9yeV9jbG9jayA8IDY1MDAwKQo+PiAt CQkJbWNfcGFyYV9pbmRleCA9IDB4MDA7Cj4+IC0JCWVsc2UgaWYgKG1lbW9yeV9jbG9jayA+IDEz NTAwMCkKPj4gLQkJCW1jX3BhcmFfaW5kZXggPSAweDBmOwo+PiAtCQllbHNlCj4+IC0JCQltY19w YXJhX2luZGV4ID0gKHU4KSgobWVtb3J5X2Nsb2NrIC0gNjAwMDApIC8KPj4gNTAwMCk7Cj4+IC0J fQo+PiAtCXJldHVybiBtY19wYXJhX2luZGV4Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBj aV90cmltX3ZvbHRhZ2VfdGFibGVfdG9fZml0X3N0YXRlX3RhYmxlKHN0cnVjdCBhbWRncHVfZGV2 aWNlCj4+ICphZGV2LAo+PiAtCQkJCQkJICAgICB1MzIgbWF4X3ZvbHRhZ2Vfc3RlcHMsCj4+IC0J CQkJCQkgICAgIHN0cnVjdCBhdG9tX3ZvbHRhZ2VfdGFibGUKPj4gKnZvbHRhZ2VfdGFibGUpCj4+ IC17Cj4+IC0JdW5zaWduZWQgaW50IGksIGRpZmY7Cj4+IC0KPj4gLQlpZiAodm9sdGFnZV90YWJs ZS0+Y291bnQgPD0gbWF4X3ZvbHRhZ2Vfc3RlcHMpCj4+IC0JCXJldHVybjsKPj4gLQo+PiAtCWRp ZmYgPSB2b2x0YWdlX3RhYmxlLT5jb3VudCAtIG1heF92b2x0YWdlX3N0ZXBzOwo+PiAtCj4+IC0J Zm9yIChpID0gMDsgaSA8IG1heF92b2x0YWdlX3N0ZXBzOyBpKyspCj4+IC0JCXZvbHRhZ2VfdGFi bGUtPmVudHJpZXNbaV0gPSB2b2x0YWdlX3RhYmxlLT5lbnRyaWVzW2kgKyBkaWZmXTsKPj4gLQo+ PiAtCXZvbHRhZ2VfdGFibGUtPmNvdW50ID0gbWF4X3ZvbHRhZ2Vfc3RlcHM7Cj4+IC19Cj4+IC0K Pj4gLXN0YXRpYyBpbnQgY2lfZ2V0X3N0ZF92b2x0YWdlX3ZhbHVlX3NpZGQoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCSBzdHJ1Y3QgYXRvbV92b2x0YWdlX3RhYmxlX2VudHJ5 Cj4+ICp2b2x0YWdlX3RhYmxlLAo+PiAtCQkJCQkgdTE2ICpzdGRfdm9sdGFnZV9oaV9zaWRkLCB1 MTYKPj4gKnN0ZF92b2x0YWdlX2xvX3NpZGQpOwo+PiAtc3RhdGljIGludCBjaV9zZXRfcG93ZXJf bGltaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHUzMiBuKTsKPj4gLXN0YXRpYyBpbnQg Y2lfc2V0X292ZXJkcml2ZV90YXJnZXRfdGRwKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ PiAtCQkJCSAgICAgICB1MzIgdGFyZ2V0X3RkcCk7Cj4+IC1zdGF0aWMgaW50IGNpX3VwZGF0ZV91 dmRfZHBtKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sIGdhdGUpOwo+PiAtc3RhdGlj IHZvaWQgY2lfZHBtX3NldF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+ PiAtCj4+IC1zdGF0aWMgUFBTTUNfUmVzdWx0Cj4+IGFtZGdwdV9jaV9zZW5kX21zZ190b19zbWNf d2l0aF9wYXJhbWV0ZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UKPj4gKmFkZXYsCj4+IC0JCQkJCQkJ ICAgICBQUFNNQ19Nc2cgbXNnLAo+PiB1MzIgcGFyYW1ldGVyKTsKPj4gLXN0YXRpYyB2b2lkIGNp X3RoZXJtYWxfc3RhcnRfc21jX2Zhbl9jb250cm9sKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KTsKPj4gLXN0YXRpYyB2b2lkIGNpX2Zhbl9jdHJsX3NldF9kZWZhdWx0X21vZGUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpOwo+PiAtCj4+IC1zdGF0aWMgc3RydWN0IGNpX3Bvd2VyX2luZm8g KmNpX2dldF9waShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlzdHJ1Y3Qg Y2lfcG93ZXJfaW5mbyAqcGkgPSBhZGV2LT5wbS5kcG0ucHJpdjsKPj4gLQo+PiAtCXJldHVybiBw aTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHN0cnVjdCBjaV9wcyAqY2lfZ2V0X3BzKHN0cnVjdCBh bWRncHVfcHMgKnJwcykKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnBzID0gcnBzLT5wc19wcml2 Owo+PiAtCj4+IC0JcmV0dXJuIHBzOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9pbml0 aWFsaXplX3Bvd2VydHVuZV9kZWZhdWx0cyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4g LXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0K Pj4gLQlzd2l0Y2ggKGFkZXYtPnBkZXYtPmRldmljZSkgewo+PiAtCWNhc2UgMHg2NjQ5Ogo+PiAt CWNhc2UgMHg2NjUwOgo+PiAtCWNhc2UgMHg2NjUxOgo+PiAtCWNhc2UgMHg2NjU4Ogo+PiAtCWNh c2UgMHg2NjVDOgo+PiAtCWNhc2UgMHg2NjVEOgo+PiAtCWRlZmF1bHQ6Cj4+IC0JCXBpLT5wb3dl cnR1bmVfZGVmYXVsdHMgPSAmZGVmYXVsdHNfYm9uYWlyZV94dDsKPj4gLQkJYnJlYWs7Cj4+IC0J Y2FzZSAweDY2NDA6Cj4+IC0JY2FzZSAweDY2NDE6Cj4+IC0JY2FzZSAweDY2NDY6Cj4+IC0JY2Fz ZSAweDY2NDc6Cj4+IC0JCXBpLT5wb3dlcnR1bmVfZGVmYXVsdHMgPSAmZGVmYXVsdHNfc2F0dXJu X3h0Owo+PiAtCQlicmVhazsKPj4gLQljYXNlIDB4NjdCODoKPj4gLQljYXNlIDB4NjdCMDoKPj4g LQkJcGktPnBvd2VydHVuZV9kZWZhdWx0cyA9ICZkZWZhdWx0c19oYXdhaWlfeHQ7Cj4+IC0JCWJy ZWFrOwo+PiAtCWNhc2UgMHg2N0JBOgo+PiAtCWNhc2UgMHg2N0IxOgo+PiAtCQlwaS0+cG93ZXJ0 dW5lX2RlZmF1bHRzID0gJmRlZmF1bHRzX2hhd2FpaV9wcm87Cj4+IC0JCWJyZWFrOwo+PiAtCWNh c2UgMHg2N0EwOgo+PiAtCWNhc2UgMHg2N0ExOgo+PiAtCWNhc2UgMHg2N0EyOgo+PiAtCWNhc2Ug MHg2N0E4Ogo+PiAtCWNhc2UgMHg2N0E5Ogo+PiAtCWNhc2UgMHg2N0FBOgo+PiAtCWNhc2UgMHg2 N0I5Ogo+PiAtCWNhc2UgMHg2N0JFOgo+PiAtCQlwaS0+cG93ZXJ0dW5lX2RlZmF1bHRzID0gJmRl ZmF1bHRzX2JvbmFpcmVfeHQ7Cj4+IC0JCWJyZWFrOwo+PiAtCX0KPj4gLQo+PiAtCXBpLT5kdGVf dGpfb2Zmc2V0ID0gMDsKPj4gLQo+PiAtCXBpLT5jYXBzX3Bvd2VyX2NvbnRhaW5tZW50ID0gdHJ1 ZTsKPj4gLQlwaS0+Y2Fwc19jYWMgPSBmYWxzZTsKPj4gLQlwaS0+Y2Fwc19zcV9yYW1waW5nID0g ZmFsc2U7Cj4+IC0JcGktPmNhcHNfZGJfcmFtcGluZyA9IGZhbHNlOwo+PiAtCXBpLT5jYXBzX3Rk X3JhbXBpbmcgPSBmYWxzZTsKPj4gLQlwaS0+Y2Fwc190Y3BfcmFtcGluZyA9IGZhbHNlOwo+PiAt Cj4+IC0JaWYgKHBpLT5jYXBzX3Bvd2VyX2NvbnRhaW5tZW50KSB7Cj4+IC0JCXBpLT5jYXBzX2Nh YyA9IHRydWU7Cj4+IC0JCWlmIChhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9IQVdBSUkpCj4+IC0J CQlwaS0+ZW5hYmxlX2JhcG1fZmVhdHVyZSA9IGZhbHNlOwo+PiAtCQllbHNlCj4+IC0JCQlwaS0+ ZW5hYmxlX2JhcG1fZmVhdHVyZSA9IHRydWU7Cj4+IC0JCXBpLT5lbmFibGVfdGRjX2xpbWl0X2Zl YXR1cmUgPSB0cnVlOwo+PiAtCQlwaS0+ZW5hYmxlX3BrZ19wd3JfdHJhY2tpbmdfZmVhdHVyZSA9 IHRydWU7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdTggY2lfY29udmVydF90b192aWQo dTE2IHZkZGMpCj4+IC17Cj4+IC0JcmV0dXJuICg2MjAwIC0gKHZkZGMgKiBWT0xUQUdFX1NDQUxF KSkgLyAyNTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9wb3B1bGF0ZV9iYXBtX3ZkZGNf dmlkX3NpZGQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNp X3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXU4ICpoaV92aWQgPSBwaS0+ c21jX3Bvd2VydHVuZV90YWJsZS5CYXBtVmRkQ1ZpZEhpU2lkZDsKPj4gLQl1OCAqbG9fdmlkID0g cGktPnNtY19wb3dlcnR1bmVfdGFibGUuQmFwbVZkZENWaWRMb1NpZGQ7Cj4+IC0JdTggKmhpMl92 aWQgPSBwaS0+c21jX3Bvd2VydHVuZV90YWJsZS5CYXBtVmRkQ1ZpZEhpU2lkZDI7Cj4+IC0JdTMy IGk7Cj4+IC0KPj4gLQlpZiAoYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJs ZS5lbnRyaWVzID09IE5VTEwpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCWlmIChhZGV2LT5w bS5kcG0uZHluX3N0YXRlLmNhY19sZWFrYWdlX3RhYmxlLmNvdW50ID4gOCkKPj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4+IC0JaWYgKGFkZXYtPnBtLmRwbS5keW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFi bGUuY291bnQgIT0KPj4gLQkgICAgYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVu Y3lfb25fc2Nsay5jb3VudCkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0KPj4gLQlmb3IgKGkg PSAwOyBpIDwgYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5jb3VudDsg aSsrKQo+PiB7Cj4+IC0JCWlmIChhZGV2LT5wbS5kcG0ucGxhdGZvcm1fY2FwcyAmCj4+IEFUT01f UFBfUExBVEZPUk1fQ0FQX0VWVikgewo+PiAtCQkJbG9fdmlkW2ldID0gY2lfY29udmVydF90b192 aWQoYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFibGUuZW50cmllc1tp XS52ZGRjMSk7Cj4+IC0JCQloaV92aWRbaV0gPSBjaV9jb252ZXJ0X3RvX3ZpZChhZGV2LQo+Pj4g cG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5lbnRyaWVzW2ldLnZkZGMyKTsKPj4g LQkJCWhpMl92aWRbaV0gPSBjaV9jb252ZXJ0X3RvX3ZpZChhZGV2LQo+Pj4gcG0uZHBtLmR5bl9z dGF0ZS5jYWNfbGVha2FnZV90YWJsZS5lbnRyaWVzW2ldLnZkZGMzKTsKPj4gLQkJfSBlbHNlIHsK Pj4gLQkJCWxvX3ZpZFtpXSA9IGNpX2NvbnZlcnRfdG9fdmlkKGFkZXYtCj4+PiBwbS5kcG0uZHlu X3N0YXRlLmNhY19sZWFrYWdlX3RhYmxlLmVudHJpZXNbaV0udmRkYyk7Cj4+IC0JCQloaV92aWRb aV0gPSBjaV9jb252ZXJ0X3RvX3ZpZCgodTE2KWFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLmNh Y19sZWFrYWdlX3RhYmxlLmVudHJpZXNbaV0ubGVha2FnZSk7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0J cmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfcG9wdWxhdGVfdmRkY192aWQo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2lu Zm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXU4ICp2aWQgPSBwaS0+c21jX3Bvd2VydHVu ZV90YWJsZS5WZGRDVmlkOwo+PiAtCXUzMiBpOwo+PiAtCj4+IC0JaWYgKHBpLT52ZGRjX3ZvbHRh Z2VfdGFibGUuY291bnQgPiA4KQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCWZvciAo aSA9IDA7IGkgPCBwaS0+dmRkY192b2x0YWdlX3RhYmxlLmNvdW50OyBpKyspCj4+IC0JCXZpZFtp XSA9IGNpX2NvbnZlcnRfdG9fdmlkKHBpLQo+Pj4gdmRkY192b2x0YWdlX3RhYmxlLmVudHJpZXNb aV0udmFsdWUpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQg Y2lfcG9wdWxhdGVfc3ZpX2xvYWRfbGluZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4g LXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0J Y29uc3Qgc3RydWN0IGNpX3B0X2RlZmF1bHRzICpwdF9kZWZhdWx0cyA9IHBpLT5wb3dlcnR1bmVf ZGVmYXVsdHM7Cj4+IC0KPj4gLQlwaS0+c21jX3Bvd2VydHVuZV90YWJsZS5TdmlMb2FkTGluZUVu ID0gcHRfZGVmYXVsdHMtCj4+PiBzdmlfbG9hZF9saW5lX2VuOwo+PiAtCXBpLT5zbWNfcG93ZXJ0 dW5lX3RhYmxlLlN2aUxvYWRMaW5lVmRkQyA9IHB0X2RlZmF1bHRzLQo+Pj4gc3ZpX2xvYWRfbGlu ZV92ZGRjOwo+PiAtCXBpLT5zbWNfcG93ZXJ0dW5lX3RhYmxlLlN2aUxvYWRMaW5lVHJpbVZkZEMg PSAzOwo+PiAtCXBpLT5zbWNfcG93ZXJ0dW5lX3RhYmxlLlN2aUxvYWRMaW5lT2Zmc2V0VmRkQyA9 IDA7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9wb3B1 bGF0ZV90ZGNfbGltaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3Ry dWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCWNvbnN0IHN0cnVj dCBjaV9wdF9kZWZhdWx0cyAqcHRfZGVmYXVsdHMgPSBwaS0+cG93ZXJ0dW5lX2RlZmF1bHRzOwo+ PiAtCXUxNiB0ZGNfbGltaXQ7Cj4+IC0KPj4gLQl0ZGNfbGltaXQgPSBhZGV2LT5wbS5kcG0uZHlu X3N0YXRlLmNhY190ZHBfdGFibGUtPnRkYyAqIDI1NjsKPj4gLQlwaS0+c21jX3Bvd2VydHVuZV90 YWJsZS5URENfVkREQ19Qa2dMaW1pdCA9Cj4+IGNwdV90b19iZTE2KHRkY19saW1pdCk7Cj4+IC0J cGktPnNtY19wb3dlcnR1bmVfdGFibGUuVERDX1ZERENfVGhyb3R0bGVSZWxlYXNlTGltaXRQZXJj ID0KPj4gLQkJcHRfZGVmYXVsdHMtPnRkY192ZGRjX3Rocm90dGxlX3JlbGVhc2VfbGltaXRfcGVy YzsKPj4gLQlwaS0+c21jX3Bvd2VydHVuZV90YWJsZS5URENfTUFXdCA9IHB0X2RlZmF1bHRzLT50 ZGNfbWF3dDsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNp X3BvcHVsYXRlX2R3OChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlzdHJ1 Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JY29uc3Qgc3RydWN0 IGNpX3B0X2RlZmF1bHRzICpwdF9kZWZhdWx0cyA9IHBpLT5wb3dlcnR1bmVfZGVmYXVsdHM7Cj4+ IC0JaW50IHJldDsKPj4gLQo+PiAtCXJldCA9IGFtZGdwdV9jaV9yZWFkX3NtY19zcmFtX2R3b3Jk KGFkZXYsCj4+IC0JCQkJICAgICBTTVU3X0ZJUk1XQVJFX0hFQURFUl9MT0NBVElPTiArCj4+IC0J CQkJICAgICBvZmZzZXRvZihTTVU3X0Zpcm13YXJlX0hlYWRlciwKPj4gUG1GdXNlVGFibGUpICsK Pj4gLQkJCQkgICAgIG9mZnNldG9mKFNNVTdfRGlzY3JldGVfUG1GdXNlcywKPj4gVGRjV2F0ZXJm YWxsQ3RsKSwKPj4gLQkJCQkgICAgICh1MzIgKikmcGktCj4+PiBzbWNfcG93ZXJ0dW5lX3RhYmxl LlRkY1dhdGVyZmFsbEN0bCwKPj4gLQkJCQkgICAgIHBpLT5zcmFtX2VuZCk7Cj4+IC0JaWYgKHJl dCkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JZWxzZQo+PiAtCQlwaS0+c21jX3Bvd2VydHVu ZV90YWJsZS5UZGNXYXRlcmZhbGxDdGwgPSBwdF9kZWZhdWx0cy0KPj4+IHRkY193YXRlcmZhbGxf Y3RsOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfcG9w dWxhdGVfZnV6enlfZmFuKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCXN0 cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQo+PiAtCWlmICgo YWRldi0+cG0uZHBtLmZhbi5mYW5fb3V0cHV0X3NlbnNpdGl2aXR5ICYgKDEgPDwgMTUpKSB8fAo+ PiAtCSAgICAoYWRldi0+cG0uZHBtLmZhbi5mYW5fb3V0cHV0X3NlbnNpdGl2aXR5ID09IDApKQo+ PiAtCQlhZGV2LT5wbS5kcG0uZmFuLmZhbl9vdXRwdXRfc2Vuc2l0aXZpdHkgPQo+PiAtCQkJYWRl di0+cG0uZHBtLmZhbi5kZWZhdWx0X2Zhbl9vdXRwdXRfc2Vuc2l0aXZpdHk7Cj4+IC0KPj4gLQlw aS0+c21jX3Bvd2VydHVuZV90YWJsZS5GdXp6eUZhbl9Qd21TZXREZWx0YSA9Cj4+IC0JCWNwdV90 b19iZTE2KGFkZXYtPnBtLmRwbS5mYW4uZmFuX291dHB1dF9zZW5zaXRpdml0eSk7Cj4+IC0KPj4g LQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9taW5fbWF4X3ZfZ25ibF9w bV9saWRfZnJvbV9iYXBtX3ZkZGMoc3RydWN0Cj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17 Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXU4 ICpoaV92aWQgPSBwaS0+c21jX3Bvd2VydHVuZV90YWJsZS5CYXBtVmRkQ1ZpZEhpU2lkZDsKPj4g LQl1OCAqbG9fdmlkID0gcGktPnNtY19wb3dlcnR1bmVfdGFibGUuQmFwbVZkZENWaWRMb1NpZGQ7 Cj4+IC0JaW50IGksIG1pbiwgbWF4Owo+PiAtCj4+IC0JbWluID0gbWF4ID0gaGlfdmlkWzBdOwo+ PiAtCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKPj4gLQkJaWYgKDAgIT0gaGlfdmlkW2ldKSB7 Cj4+IC0JCQlpZiAobWluID4gaGlfdmlkW2ldKQo+PiAtCQkJCW1pbiA9IGhpX3ZpZFtpXTsKPj4g LQkJCWlmIChtYXggPCBoaV92aWRbaV0pCj4+IC0JCQkJbWF4ID0gaGlfdmlkW2ldOwo+PiAtCQl9 Cj4+IC0KPj4gLQkJaWYgKDAgIT0gbG9fdmlkW2ldKSB7Cj4+IC0JCQlpZiAobWluID4gbG9fdmlk W2ldKQo+PiAtCQkJCW1pbiA9IGxvX3ZpZFtpXTsKPj4gLQkJCWlmIChtYXggPCBsb192aWRbaV0p Cj4+IC0JCQkJbWF4ID0gbG9fdmlkW2ldOwo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKCht aW4gPT0gMCkgfHwgKG1heCA9PSAwKSkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JcGktPnNt Y19wb3dlcnR1bmVfdGFibGUuR25iTFBNTE1heFZpZCA9ICh1OCltYXg7Cj4+IC0JcGktPnNtY19w b3dlcnR1bmVfdGFibGUuR25iTFBNTE1pblZpZCA9ICh1OCltaW47Cj4+IC0KPj4gLQlyZXR1cm4g MDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9wb3B1bGF0ZV9iYXBtX3ZkZGNfYmFzZV9s ZWFrYWdlX3NpZGQoc3RydWN0Cj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3Ry dWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXUxNiBoaV9zaWRk ID0gcGktCj4+PiBzbWNfcG93ZXJ0dW5lX3RhYmxlLkJhcG1WZGRDQmFzZUxlYWthZ2VIaVNpZGQ7 Cj4+IC0JdTE2IGxvX3NpZGQgPSBwaS0KPj4+IHNtY19wb3dlcnR1bmVfdGFibGUuQmFwbVZkZENC YXNlTGVha2FnZUxvU2lkZDsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2NhY190ZHBfdGFibGUgKmNhY190 ZHBfdGFibGUgPQo+PiAtCQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLmNhY190ZHBfdGFibGU7Cj4+ IC0KPj4gLQloaV9zaWRkID0gY2FjX3RkcF90YWJsZS0+aGlnaF9jYWNfbGVha2FnZSAvIDEwMCAq IDI1NjsKPj4gLQlsb19zaWRkID0gY2FjX3RkcF90YWJsZS0+bG93X2NhY19sZWFrYWdlIC8gMTAw ICogMjU2Owo+PiAtCj4+IC0JcGktPnNtY19wb3dlcnR1bmVfdGFibGUuQmFwbVZkZENCYXNlTGVh a2FnZUhpU2lkZCA9Cj4+IGNwdV90b19iZTE2KGhpX3NpZGQpOwo+PiAtCXBpLT5zbWNfcG93ZXJ0 dW5lX3RhYmxlLkJhcG1WZGRDQmFzZUxlYWthZ2VMb1NpZGQgPQo+PiBjcHVfdG9fYmUxNihsb19z aWRkKTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3Bv cHVsYXRlX2JhcG1fcGFyYW1ldGVyc19pbl9kcG1fdGFibGUoc3RydWN0Cj4+IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3Bp KGFkZXYpOwo+PiAtCWNvbnN0IHN0cnVjdCBjaV9wdF9kZWZhdWx0cyAqcHRfZGVmYXVsdHMgPSBw aS0+cG93ZXJ0dW5lX2RlZmF1bHRzOwo+PiAtCVNNVTdfRGlzY3JldGVfRHBtVGFibGUgICpkcG1f dGFibGUgPSAmcGktPnNtY19zdGF0ZV90YWJsZTsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2NhY190ZHBf dGFibGUgKmNhY190ZHBfdGFibGUgPQo+PiAtCQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLmNhY190 ZHBfdGFibGU7Cj4+IC0Jc3RydWN0IGFtZGdwdV9wcG1fdGFibGUgKnBwbSA9IGFkZXYtCj4+PiBw bS5kcG0uZHluX3N0YXRlLnBwbV90YWJsZTsKPj4gLQlpbnQgaSwgaiwgazsKPj4gLQljb25zdCB1 MTYgKmRlZjE7Cj4+IC0JY29uc3QgdTE2ICpkZWYyOwo+PiAtCj4+IC0JZHBtX3RhYmxlLT5EZWZh dWx0VGRwID0gY2FjX3RkcF90YWJsZS0+dGRwICogMjU2Owo+PiAtCWRwbV90YWJsZS0+VGFyZ2V0 VGRwID0gY2FjX3RkcF90YWJsZS0+Y29uZmlndXJhYmxlX3RkcCAqIDI1NjsKPj4gLQo+PiAtCWRw bV90YWJsZS0+RFRFVGpPZmZzZXQgPSAodTgpcGktPmR0ZV90al9vZmZzZXQ7Cj4+IC0JZHBtX3Rh YmxlLT5HcHVUak1heCA9Cj4+IC0JCSh1OCkocGktPnRoZXJtYWxfdGVtcF9zZXR0aW5nLnRlbXBl cmF0dXJlX2hpZ2ggLyAxMDAwKTsKPj4gLQlkcG1fdGFibGUtPkdwdVRqSHlzdCA9IDg7Cj4+IC0K Pj4gLQlkcG1fdGFibGUtPkRURUFtYmllbnRUZW1wQmFzZSA9IHB0X2RlZmF1bHRzLQo+Pj4gZHRl X2FtYmllbnRfdGVtcF9iYXNlOwo+PiAtCj4+IC0JaWYgKHBwbSkgewo+PiAtCQlkcG1fdGFibGUt PlBQTV9Qa2dQd3JMaW1pdCA9IGNwdV90b19iZTE2KCh1MTYpcHBtLQo+Pj4gZGdwdV90ZHAgKiAy NTYgLyAxMDAwKTsKPj4gLQkJZHBtX3RhYmxlLT5QUE1fVGVtcGVyYXR1cmVMaW1pdCA9Cj4+IGNw dV90b19iZTE2KCh1MTYpcHBtLT50al9tYXggKiAyNTYpOwo+PiAtCX0gZWxzZSB7Cj4+IC0JCWRw bV90YWJsZS0+UFBNX1BrZ1B3ckxpbWl0ID0gY3B1X3RvX2JlMTYoMCk7Cj4+IC0JCWRwbV90YWJs ZS0+UFBNX1RlbXBlcmF0dXJlTGltaXQgPSBjcHVfdG9fYmUxNigwKTsKPj4gLQl9Cj4+IC0KPj4g LQlkcG1fdGFibGUtPkJBUE1fVEVNUF9HUkFESUVOVCA9IGNwdV90b19iZTMyKHB0X2RlZmF1bHRz LQo+Pj4gYmFwbV90ZW1wX2dyYWRpZW50KTsKPj4gLQlkZWYxID0gcHRfZGVmYXVsdHMtPmJhcG10 aV9yOwo+PiAtCWRlZjIgPSBwdF9kZWZhdWx0cy0+YmFwbXRpX3JjOwo+PiAtCj4+IC0JZm9yIChp ID0gMDsgaSA8IFNNVTdfRFRFX0lURVJBVElPTlM7IGkrKykgewo+PiAtCQlmb3IgKGogPSAwOyBq IDwgU01VN19EVEVfU09VUkNFUzsgaisrKSB7Cj4+IC0JCQlmb3IgKGsgPSAwOyBrIDwgU01VN19E VEVfU0lOS1M7IGsrKykgewo+PiAtCQkJCWRwbV90YWJsZS0+QkFQTVRJX1JbaV1bal1ba10gPQo+ PiBjcHVfdG9fYmUxNigqZGVmMSk7Cj4+IC0JCQkJZHBtX3RhYmxlLT5CQVBNVElfUkNbaV1bal1b a10gPQo+PiBjcHVfdG9fYmUxNigqZGVmMik7Cj4+IC0JCQkJZGVmMSsrOwo+PiAtCQkJCWRlZjIr KzsKPj4gLQkJCX0KPj4gLQkJfQo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAt Cj4+IC1zdGF0aWMgaW50IGNpX3BvcHVsYXRlX3BtX2Jhc2Uoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFk ZXYpOwo+PiAtCXUzMiBwbV9mdXNlX3RhYmxlX29mZnNldDsKPj4gLQlpbnQgcmV0Owo+PiAtCj4+ IC0JaWYgKHBpLT5jYXBzX3Bvd2VyX2NvbnRhaW5tZW50KSB7Cj4+IC0JCXJldCA9IGFtZGdwdV9j aV9yZWFkX3NtY19zcmFtX2R3b3JkKGFkZXYsCj4+IC0KPj4gU01VN19GSVJNV0FSRV9IRUFERVJf TE9DQVRJT04gKwo+PiAtCQkJCQkgICAgIG9mZnNldG9mKFNNVTdfRmlybXdhcmVfSGVhZGVyLAo+ PiBQbUZ1c2VUYWJsZSksCj4+IC0JCQkJCSAgICAgJnBtX2Z1c2VfdGFibGVfb2Zmc2V0LCBwaS0K Pj4+IHNyYW1fZW5kKTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JCXJl dCA9IGNpX3BvcHVsYXRlX2JhcG1fdmRkY192aWRfc2lkZChhZGV2KTsKPj4gLQkJaWYgKHJldCkK Pj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRlX3ZkZGNfdmlkKGFkZXYp Owo+PiAtCQlpZiAocmV0KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4gLQkJcmV0ID0gY2lfcG9wdWxh dGVfc3ZpX2xvYWRfbGluZShhZGV2KTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7 Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRlX3RkY19saW1pdChhZGV2KTsKPj4gLQkJaWYgKHJldCkK Pj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRlX2R3OChhZGV2KTsKPj4g LQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRlX2Z1 enp5X2ZhbihhZGV2KTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JCXJl dCA9IGNpX21pbl9tYXhfdl9nbmJsX3BtX2xpZF9mcm9tX2JhcG1fdmRkYyhhZGV2KTsKPj4gLQkJ aWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRlX2JhcG1f dmRkY19iYXNlX2xlYWthZ2Vfc2lkZChhZGV2KTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVy biByZXQ7Cj4+IC0JCXJldCA9IGFtZGdwdV9jaV9jb3B5X2J5dGVzX3RvX3NtYyhhZGV2LAo+PiBw bV9mdXNlX3RhYmxlX29mZnNldCwKPj4gLQkJCQkJICAgKHU4ICopJnBpLT5zbWNfcG93ZXJ0dW5l X3RhYmxlLAo+PiAtCQkJCQkgICBzaXplb2YoU01VN19EaXNjcmV0ZV9QbUZ1c2VzKSwKPj4gcGkt PnNyYW1fZW5kKTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAt Cj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX2RvX2VuYWJsZV9k aWR0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBjb25zdCBib29sCj4+IGVuYWJsZSkKPj4g LXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0J dTMyIGRhdGE7Cj4+IC0KPj4gLQlpZiAocGktPmNhcHNfc3FfcmFtcGluZykgewo+PiAtCQlkYXRh ID0gUlJFRzMyX0RJRFQoaXhESURUX1NRX0NUUkwwKTsKPj4gLQkJaWYgKGVuYWJsZSkKPj4gLQkJ CWRhdGEgfD0gRElEVF9TUV9DVFJMMF9fRElEVF9DVFJMX0VOX01BU0s7Cj4+IC0JCWVsc2UKPj4g LQkJCWRhdGEgJj0gfkRJRFRfU1FfQ1RSTDBfX0RJRFRfQ1RSTF9FTl9NQVNLOwo+PiAtCQlXUkVH MzJfRElEVChpeERJRFRfU1FfQ1RSTDAsIGRhdGEpOwo+PiAtCX0KPj4gLQo+PiAtCWlmIChwaS0+ Y2Fwc19kYl9yYW1waW5nKSB7Cj4+IC0JCWRhdGEgPSBSUkVHMzJfRElEVChpeERJRFRfREJfQ1RS TDApOwo+PiAtCQlpZiAoZW5hYmxlKQo+PiAtCQkJZGF0YSB8PSBESURUX0RCX0NUUkwwX19ESURU X0NUUkxfRU5fTUFTSzsKPj4gLQkJZWxzZQo+PiAtCQkJZGF0YSAmPSB+RElEVF9EQl9DVFJMMF9f RElEVF9DVFJMX0VOX01BU0s7Cj4+IC0JCVdSRUczMl9ESURUKGl4RElEVF9EQl9DVFJMMCwgZGF0 YSk7Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKHBpLT5jYXBzX3RkX3JhbXBpbmcpIHsKPj4gLQkJZGF0 YSA9IFJSRUczMl9ESURUKGl4RElEVF9URF9DVFJMMCk7Cj4+IC0JCWlmIChlbmFibGUpCj4+IC0J CQlkYXRhIHw9IERJRFRfVERfQ1RSTDBfX0RJRFRfQ1RSTF9FTl9NQVNLOwo+PiAtCQllbHNlCj4+ IC0JCQlkYXRhICY9IH5ESURUX1REX0NUUkwwX19ESURUX0NUUkxfRU5fTUFTSzsKPj4gLQkJV1JF RzMyX0RJRFQoaXhESURUX1REX0NUUkwwLCBkYXRhKTsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAocGkt PmNhcHNfdGNwX3JhbXBpbmcpIHsKPj4gLQkJZGF0YSA9IFJSRUczMl9ESURUKGl4RElEVF9UQ1Bf Q1RSTDApOwo+PiAtCQlpZiAoZW5hYmxlKQo+PiAtCQkJZGF0YSB8PSBESURUX1RDUF9DVFJMMF9f RElEVF9DVFJMX0VOX01BU0s7Cj4+IC0JCWVsc2UKPj4gLQkJCWRhdGEgJj0gfkRJRFRfVENQX0NU UkwwX19ESURUX0NUUkxfRU5fTUFTSzsKPj4gLQkJV1JFRzMyX0RJRFQoaXhESURUX1RDUF9DVFJM MCwgZGF0YSk7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3Byb2dyYW1fcHRf Y29uZmlnX3JlZ2lzdGVycyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJCQkJICBj b25zdCBzdHJ1Y3QgY2lfcHRfY29uZmlnX3JlZwo+PiAqY2FjX2NvbmZpZ19yZWdzKQo+PiAtewo+ PiAtCWNvbnN0IHN0cnVjdCBjaV9wdF9jb25maWdfcmVnICpjb25maWdfcmVncyA9IGNhY19jb25m aWdfcmVnczsKPj4gLQl1MzIgZGF0YTsKPj4gLQl1MzIgY2FjaGUgPSAwOwo+PiAtCj4+IC0JaWYg KGNvbmZpZ19yZWdzID09IE5VTEwpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCj4+IC0Jd2hp bGUgKGNvbmZpZ19yZWdzLT5vZmZzZXQgIT0gMHhGRkZGRkZGRikgewo+PiAtCQlpZiAoY29uZmln X3JlZ3MtPnR5cGUgPT0gQ0lTTEFORFNfQ09ORklHUkVHX0NBQ0hFKSB7Cj4+IC0JCQljYWNoZSB8 PSAoKGNvbmZpZ19yZWdzLT52YWx1ZSA8PCBjb25maWdfcmVncy0+c2hpZnQpCj4+ICYgY29uZmln X3JlZ3MtPm1hc2spOwo+PiAtCQl9IGVsc2Ugewo+PiAtCQkJc3dpdGNoIChjb25maWdfcmVncy0+ dHlwZSkgewo+PiAtCQkJY2FzZSBDSVNMQU5EU19DT05GSUdSRUdfU01DX0lORDoKPj4gLQkJCQlk YXRhID0gUlJFRzMyX1NNQyhjb25maWdfcmVncy0+b2Zmc2V0KTsKPj4gLQkJCQlicmVhazsKPj4g LQkJCWNhc2UgQ0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5EOgo+PiAtCQkJCWRhdGEgPSBSUkVH MzJfRElEVChjb25maWdfcmVncy0+b2Zmc2V0KTsKPj4gLQkJCQlicmVhazsKPj4gLQkJCWRlZmF1 bHQ6Cj4+IC0JCQkJZGF0YSA9IFJSRUczMihjb25maWdfcmVncy0+b2Zmc2V0KTsKPj4gLQkJCQli cmVhazsKPj4gLQkJCX0KPj4gLQo+PiAtCQkJZGF0YSAmPSB+Y29uZmlnX3JlZ3MtPm1hc2s7Cj4+ IC0JCQlkYXRhIHw9ICgoY29uZmlnX3JlZ3MtPnZhbHVlIDw8IGNvbmZpZ19yZWdzLT5zaGlmdCkg Jgo+PiBjb25maWdfcmVncy0+bWFzayk7Cj4+IC0JCQlkYXRhIHw9IGNhY2hlOwo+PiAtCj4+IC0J CQlzd2l0Y2ggKGNvbmZpZ19yZWdzLT50eXBlKSB7Cj4+IC0JCQljYXNlIENJU0xBTkRTX0NPTkZJ R1JFR19TTUNfSU5EOgo+PiAtCQkJCVdSRUczMl9TTUMoY29uZmlnX3JlZ3MtPm9mZnNldCwgZGF0 YSk7Cj4+IC0JCQkJYnJlYWs7Cj4+IC0JCQljYXNlIENJU0xBTkRTX0NPTkZJR1JFR19ESURUX0lO RDoKPj4gLQkJCQlXUkVHMzJfRElEVChjb25maWdfcmVncy0+b2Zmc2V0LCBkYXRhKTsKPj4gLQkJ CQlicmVhazsKPj4gLQkJCWRlZmF1bHQ6Cj4+IC0JCQkJV1JFRzMyKGNvbmZpZ19yZWdzLT5vZmZz ZXQsIGRhdGEpOwo+PiAtCQkJCWJyZWFrOwo+PiAtCQkJfQo+PiAtCQkJY2FjaGUgPSAwOwo+PiAt CQl9Cj4+IC0JCWNvbmZpZ19yZWdzKys7Cj4+IC0JfQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAt Cj4+IC1zdGF0aWMgaW50IGNpX2VuYWJsZV9kaWR0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCBib29sIGVuYWJsZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9n ZXRfcGkoYWRldik7Cj4+IC0JaW50IHJldDsKPj4gLQo+PiAtCWlmIChwaS0+Y2Fwc19zcV9yYW1w aW5nIHx8IHBpLT5jYXBzX2RiX3JhbXBpbmcgfHwKPj4gLQkgICAgcGktPmNhcHNfdGRfcmFtcGlu ZyB8fCBwaS0+Y2Fwc190Y3BfcmFtcGluZykgewo+PiAtCQlhbWRncHVfZ2Z4X3JsY19lbnRlcl9z YWZlX21vZGUoYWRldik7Cj4+IC0KPj4gLQkJaWYgKGVuYWJsZSkgewo+PiAtCQkJcmV0ID0gY2lf cHJvZ3JhbV9wdF9jb25maWdfcmVnaXN0ZXJzKGFkZXYsCj4+IGRpZHRfY29uZmlnX2NpKTsKPj4g LQkJCWlmIChyZXQpIHsKPj4gLQkJCQlhbWRncHVfZ2Z4X3JsY19leGl0X3NhZmVfbW9kZShhZGV2 KTsKPj4gLQkJCQlyZXR1cm4gcmV0Owo+PiAtCQkJfQo+PiAtCQl9Cj4+IC0KPj4gLQkJY2lfZG9f ZW5hYmxlX2RpZHQoYWRldiwgZW5hYmxlKTsKPj4gLQo+PiAtCQlhbWRncHVfZ2Z4X3JsY19leGl0 X3NhZmVfbW9kZShhZGV2KTsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+ PiAtc3RhdGljIGludCBjaV9lbmFibGVfcG93ZXJfY29udGFpbm1lbnQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIGJvb2wKPj4gZW5hYmxlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9p bmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQlQUFNNQ19SZXN1bHQgc21jX3Jlc3VsdDsK Pj4gLQlpbnQgcmV0ID0gMDsKPj4gLQo+PiAtCWlmIChlbmFibGUpIHsKPj4gLQkJcGktPnBvd2Vy X2NvbnRhaW5tZW50X2ZlYXR1cmVzID0gMDsKPj4gLQkJaWYgKHBpLT5jYXBzX3Bvd2VyX2NvbnRh aW5tZW50KSB7Cj4+IC0JCQlpZiAocGktPmVuYWJsZV9iYXBtX2ZlYXR1cmUpIHsKPj4gLQkJCQlz bWNfcmVzdWx0ID0KPj4gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0df RW5hYmxlRFRFKTsKPj4gLQkJCQlpZiAoc21jX3Jlc3VsdCAhPSBQUFNNQ19SZXN1bHRfT0spCj4+ IC0JCQkJCXJldCA9IC1FSU5WQUw7Cj4+IC0JCQkJZWxzZQo+PiAtCQkJCQlwaS0+cG93ZXJfY29u dGFpbm1lbnRfZmVhdHVyZXMgfD0KPj4gUE9XRVJDT05UQUlOTUVOVF9GRUFUVVJFX0JBUE07Cj4+ IC0JCQl9Cj4+IC0KPj4gLQkJCWlmIChwaS0+ZW5hYmxlX3RkY19saW1pdF9mZWF0dXJlKSB7Cj4+ IC0JCQkJc21jX3Jlc3VsdCA9Cj4+IGFtZGdwdV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwgUFBT TUNfTVNHX1REQ0xpbWl0RW5hYmxlKTsKPj4gLQkJCQlpZiAoc21jX3Jlc3VsdCAhPSBQUFNNQ19S ZXN1bHRfT0spCj4+IC0JCQkJCXJldCA9IC1FSU5WQUw7Cj4+IC0JCQkJZWxzZQo+PiAtCQkJCQlw aS0+cG93ZXJfY29udGFpbm1lbnRfZmVhdHVyZXMgfD0KPj4gUE9XRVJDT05UQUlOTUVOVF9GRUFU VVJFX1REQ0xpbWl0Owo+PiAtCQkJfQo+PiAtCj4+IC0JCQlpZiAocGktPmVuYWJsZV9wa2dfcHdy X3RyYWNraW5nX2ZlYXR1cmUpIHsKPj4gLQkJCQlzbWNfcmVzdWx0ID0KPj4gYW1kZ3B1X2NpX3Nl bmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19NU0dfUGtnUHdyTGltaXRFbmFibGUpOwo+PiAtCQkJ CWlmIChzbWNfcmVzdWx0ICE9IFBQU01DX1Jlc3VsdF9PSykgewo+PiAtCQkJCQlyZXQgPSAtRUlO VkFMOwo+PiAtCQkJCX0gZWxzZSB7Cj4+IC0JCQkJCXN0cnVjdCBhbWRncHVfY2FjX3RkcF90YWJs ZQo+PiAqY2FjX3RkcF90YWJsZSA9Cj4+IC0JCQkJCQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0 ZS5jYWNfdGRwX3RhYmxlOwo+PiAtCQkJCQl1MzIgZGVmYXVsdF9wd3JfbGltaXQgPQo+PiAtCQkJ CQkJKHUzMikoY2FjX3RkcF90YWJsZS0KPj4+IG1heGltdW1fcG93ZXJfZGVsaXZlcnlfbGltaXQg KiAyNTYpOwo+PiAtCj4+IC0JCQkJCXBpLT5wb3dlcl9jb250YWlubWVudF9mZWF0dXJlcyB8PQo+ PiBQT1dFUkNPTlRBSU5NRU5UX0ZFQVRVUkVfUGtnUHdyTGltaXQ7Cj4+IC0KPj4gLQkJCQkJY2lf c2V0X3Bvd2VyX2xpbWl0KGFkZXYsCj4+IGRlZmF1bHRfcHdyX2xpbWl0KTsKPj4gLQkJCQl9Cj4+ IC0JCQl9Cj4+IC0JCX0KPj4gLQl9IGVsc2Ugewo+PiAtCQlpZiAocGktPmNhcHNfcG93ZXJfY29u dGFpbm1lbnQgJiYgcGktCj4+PiBwb3dlcl9jb250YWlubWVudF9mZWF0dXJlcykgewo+PiAtCQkJ aWYgKHBpLT5wb3dlcl9jb250YWlubWVudF9mZWF0dXJlcyAmCj4+IFBPV0VSQ09OVEFJTk1FTlRf RkVBVFVSRV9URENMaW1pdCkKPj4gLQkJCQlhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYs Cj4+IFBQU01DX01TR19URENMaW1pdERpc2FibGUpOwo+PiAtCj4+IC0JCQlpZiAocGktPnBvd2Vy X2NvbnRhaW5tZW50X2ZlYXR1cmVzICYKPj4gUE9XRVJDT05UQUlOTUVOVF9GRUFUVVJFX0JBUE0p Cj4+IC0JCQkJYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0dfRGlz YWJsZURURSk7Cj4+IC0KPj4gLQkJCWlmIChwaS0+cG93ZXJfY29udGFpbm1lbnRfZmVhdHVyZXMg Jgo+PiBQT1dFUkNPTlRBSU5NRU5UX0ZFQVRVUkVfUGtnUHdyTGltaXQpCj4+IC0JCQkJYW1kZ3B1 X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0dfUGtnUHdyTGltaXREaXNhYmxl KTsKPj4gLQkJCXBpLT5wb3dlcl9jb250YWlubWVudF9mZWF0dXJlcyA9IDA7Cj4+IC0JCX0KPj4g LQl9Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2Vu YWJsZV9zbWNfY2FjKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sIGVuYWJsZSkKPj4g LXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0J UFBTTUNfUmVzdWx0IHNtY19yZXN1bHQ7Cj4+IC0JaW50IHJldCA9IDA7Cj4+IC0KPj4gLQlpZiAo cGktPmNhcHNfY2FjKSB7Cj4+IC0JCWlmIChlbmFibGUpIHsKPj4gLQkJCXNtY19yZXN1bHQgPSBh bWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+IFBQU01DX01TR19FbmFibGVDYWMpOwo+ PiAtCQkJaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKSB7Cj4+IC0JCQkJcmV0ID0g LUVJTlZBTDsKPj4gLQkJCQlwaS0+Y2FjX2VuYWJsZWQgPSBmYWxzZTsKPj4gLQkJCX0gZWxzZSB7 Cj4+IC0JCQkJcGktPmNhY19lbmFibGVkID0gdHJ1ZTsKPj4gLQkJCX0KPj4gLQkJfSBlbHNlIGlm IChwaS0+Y2FjX2VuYWJsZWQpIHsKPj4gLQkJCWFtZGdwdV9jaV9zZW5kX21zZ190b19zbWMoYWRl diwKPj4gUFBTTUNfTVNHX0Rpc2FibGVDYWMpOwo+PiAtCQkJcGktPmNhY19lbmFibGVkID0gZmFs c2U7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAtfQo+PiAtCj4+IC1z dGF0aWMgaW50IGNpX2VuYWJsZV90aGVybWFsX2Jhc2VkX3NjbGtfZHBtKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAo+PiAtCQkJCQkgICAgYm9vbCBlbmFibGUpCj4+IC17Cj4+IC0Jc3RydWN0 IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCVBQU01DX1Jlc3VsdCBz bWNfcmVzdWx0ID0gUFBTTUNfUmVzdWx0X09LOwo+PiAtCj4+IC0JaWYgKHBpLT50aGVybWFsX3Nj bGtfZHBtX2VuYWJsZWQpIHsKPj4gLQkJaWYgKGVuYWJsZSkKPj4gLQkJCXNtY19yZXN1bHQgPSBh bWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+IFBQU01DX01TR19FTkFCTEVfVEhFUk1B TF9EUE0pOwo+PiAtCQllbHNlCj4+IC0JCQlzbWNfcmVzdWx0ID0gYW1kZ3B1X2NpX3NlbmRfbXNn X3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0dfRElTQUJMRV9USEVSTUFMX0RQTSk7Cj4+IC0JfQo+ PiAtCj4+IC0JaWYgKHNtY19yZXN1bHQgPT0gUFBTTUNfUmVzdWx0X09LKQo+PiAtCQlyZXR1cm4g MDsKPj4gLQllbHNlCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMg aW50IGNpX3Bvd2VyX2NvbnRyb2xfc2V0X2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsK Pj4gLQlzdHJ1Y3QgYW1kZ3B1X2NhY190ZHBfdGFibGUgKmNhY190ZHBfdGFibGUgPQo+PiAtCQlh ZGV2LT5wbS5kcG0uZHluX3N0YXRlLmNhY190ZHBfdGFibGU7Cj4+IC0JczMyIGFkanVzdF9wZXJj ZW50Owo+PiAtCXMzMiB0YXJnZXRfdGRwOwo+PiAtCWludCByZXQgPSAwOwo+PiAtCWJvb2wgYWRq dXN0X3BvbGFyaXR5ID0gZmFsc2U7IC8qID8/PyAqLwo+PiAtCj4+IC0JaWYgKHBpLT5jYXBzX3Bv d2VyX2NvbnRhaW5tZW50KSB7Cj4+IC0JCWFkanVzdF9wZXJjZW50ID0gYWRqdXN0X3BvbGFyaXR5 ID8KPj4gLQkJCWFkZXYtPnBtLmRwbS50ZHBfYWRqdXN0bWVudCA6ICgtMSAqIGFkZXYtCj4+PiBw bS5kcG0udGRwX2FkanVzdG1lbnQpOwo+PiAtCQl0YXJnZXRfdGRwID0gKCgxMDAgKyBhZGp1c3Rf cGVyY2VudCkgKgo+PiAtCQkJICAgICAgKHMzMiljYWNfdGRwX3RhYmxlLT5jb25maWd1cmFibGVf dGRwKSAvIDEwMDsKPj4gLQo+PiAtCQlyZXQgPSBjaV9zZXRfb3ZlcmRyaXZlX3RhcmdldF90ZHAo YWRldiwgKHUzMil0YXJnZXRfdGRwKTsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9kcG1fcG93ZXJnYXRlX3V2ZCh2b2lkICpoYW5kbGUs IGJvb2wgZ2F0ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkg PSBjaV9nZXRfcGkoYWRldik7Cj4+IC0KPj4gLQlwaS0+dXZkX3Bvd2VyX2dhdGVkID0gZ2F0ZTsK Pj4gLQo+PiAtCWlmIChnYXRlKSB7Cj4+IC0JCS8qIHN0b3AgdGhlIFVWRCBibG9jayAqLwo+PiAt CQlhbWRncHVfZGV2aWNlX2lwX3NldF9wb3dlcmdhdGluZ19zdGF0ZShhZGV2LAo+PiBBTURfSVBf QkxPQ0tfVFlQRV9VVkQsCj4+IC0JCQkJCQkgICAgICAgQU1EX1BHX1NUQVRFX0dBVEUpOwo+PiAt CQljaV91cGRhdGVfdXZkX2RwbShhZGV2LCBnYXRlKTsKPj4gLQl9IGVsc2Ugewo+PiAtCQlhbWRn cHVfZGV2aWNlX2lwX3NldF9wb3dlcmdhdGluZ19zdGF0ZShhZGV2LAo+PiBBTURfSVBfQkxPQ0tf VFlQRV9VVkQsCj4+IC0KPj4gQU1EX1BHX1NUQVRFX1VOR0FURSk7Cj4+IC0JCWNpX3VwZGF0ZV91 dmRfZHBtKGFkZXYsIGdhdGUpOwo+PiAtCX0KPj4gLX0KPj4gLQo+PiAtc3RhdGljIGJvb2wgY2lf ZHBtX3ZibGFua190b29fc2hvcnQodm9pZCAqaGFuZGxlKQo+PiAtewo+PiAtCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwo+PiAtCXUz MiB2YmxhbmtfdGltZSA9IGFtZGdwdV9kcG1fZ2V0X3ZibGFua190aW1lKGFkZXYpOwo+PiAtCXUz MiBzd2l0Y2hfbGltaXQgPSBhZGV2LT5nbWMudnJhbV90eXBlID09Cj4+IEFNREdQVV9WUkFNX1RZ UEVfR0REUjUgPyA0NTAgOiAzMDA7Cj4+IC0KPj4gLQkvKiBkaXNhYmxlIG1jbGsgc3dpdGNoaW5n IGlmIHRoZSByZWZyZXNoIGlzID4xMjBIeiwgZXZlbiBpZiB0aGUKPj4gLQkgKiBibGFua2luZyBw ZXJpb2Qgd291bGQgYWxsb3cgaXQKPj4gLQkgKi8KPj4gLQlpZiAoYW1kZ3B1X2RwbV9nZXRfdnJl ZnJlc2goYWRldikgPiAxMjApCj4+IC0JCXJldHVybiB0cnVlOwo+PiAtCj4+IC0JaWYgKHZibGFu a190aW1lIDwgc3dpdGNoX2xpbWl0KQo+PiAtCQlyZXR1cm4gdHJ1ZTsKPj4gLQllbHNlCj4+IC0J CXJldHVybiBmYWxzZTsKPj4gLQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9hcHBseV9z dGF0ZV9hZGp1c3RfcnVsZXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCXN0 cnVjdCBhbWRncHVfcHMgKnJwcykKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnBzID0gY2lfZ2V0 X3BzKHJwcyk7Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYp Owo+PiAtCXN0cnVjdCBhbWRncHVfY2xvY2tfYW5kX3ZvbHRhZ2VfbGltaXRzICptYXhfbGltaXRz Owo+PiAtCWJvb2wgZGlzYWJsZV9tY2xrX3N3aXRjaGluZzsKPj4gLQl1MzIgc2NsaywgbWNsazsK Pj4gLQlpbnQgaTsKPj4gLQo+PiAtCWlmIChycHMtPnZjZV9hY3RpdmUpIHsKPj4gLQkJcnBzLT5l dmNsayA9IGFkZXYtPnBtLmRwbS52Y2Vfc3RhdGVzW2FkZXYtCj4+PiBwbS5kcG0udmNlX2xldmVs XS5ldmNsazsKPj4gLQkJcnBzLT5lY2NsayA9IGFkZXYtPnBtLmRwbS52Y2Vfc3RhdGVzW2FkZXYt Cj4+PiBwbS5kcG0udmNlX2xldmVsXS5lY2NsazsKPj4gLQl9IGVsc2Ugewo+PiAtCQlycHMtPmV2 Y2xrID0gMDsKPj4gLQkJcnBzLT5lY2NsayA9IDA7Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKChhZGV2 LT5wbS5kcG0ubmV3X2FjdGl2ZV9jcnRjX2NvdW50ID4gMSkgfHwKPj4gLQkgICAgY2lfZHBtX3Zi bGFua190b29fc2hvcnQoYWRldikpCj4+IC0JCWRpc2FibGVfbWNsa19zd2l0Y2hpbmcgPSB0cnVl Owo+PiAtCWVsc2UKPj4gLQkJZGlzYWJsZV9tY2xrX3N3aXRjaGluZyA9IGZhbHNlOwo+PiAtCj4+ IC0JaWYgKChycHMtPmNsYXNzICYgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9NQVNLKSA9 PQo+PiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX0JBVFRFUlkpCj4+IC0JCXBpLT5iYXR0 ZXJ5X3N0YXRlID0gdHJ1ZTsKPj4gLQllbHNlCj4+IC0JCXBpLT5iYXR0ZXJ5X3N0YXRlID0gZmFs c2U7Cj4+IC0KPj4gLQlpZiAoYWRldi0+cG0uYWNfcG93ZXIpCj4+IC0JCW1heF9saW1pdHMgPSAm YWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fYWM7Cj4+IC0J ZWxzZQo+PiAtCQltYXhfbGltaXRzID0gJmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLm1heF9j bG9ja192b2x0YWdlX29uX2RjOwo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmFjX3Bvd2VyID09IGZh bHNlKSB7Cj4+IC0JCWZvciAoaSA9IDA7IGkgPCBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxfY291bnQ7 IGkrKykgewo+PiAtCQkJaWYgKHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0ubWNsayA+IG1heF9s aW1pdHMtCj4+PiBtY2xrKQo+PiAtCQkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0ubWNsayA9 Cj4+IG1heF9saW1pdHMtPm1jbGs7Cj4+IC0JCQlpZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1tp XS5zY2xrID4gbWF4X2xpbWl0cy0+c2NsaykKPj4gLQkJCQlwcy0+cGVyZm9ybWFuY2VfbGV2ZWxz W2ldLnNjbGsgPSBtYXhfbGltaXRzLQo+Pj4gc2NsazsKPj4gLQkJfQo+PiAtCX0KPj4gLQo+PiAt CS8qIFhYWCB2YWxpZGF0ZSB0aGUgbWluIGNsb2NrcyByZXF1aXJlZCBmb3IgZGlzcGxheSAqLwo+ PiAtCj4+IC0JaWYgKGRpc2FibGVfbWNsa19zd2l0Y2hpbmcpIHsKPj4gLQkJbWNsayAgPSBwcy0+ cGVyZm9ybWFuY2VfbGV2ZWxzW3BzLQo+Pj4gcGVyZm9ybWFuY2VfbGV2ZWxfY291bnQgLSAxXS5t Y2xrOwo+PiAtCQlzY2xrID0gcHMtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5zY2xrOwo+PiAtCX0g ZWxzZSB7Cj4+IC0JCW1jbGsgPSBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLm1jbGs7Cj4+IC0J CXNjbGsgPSBwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLnNjbGs7Cj4+IC0JfQo+PiAtCj4+IC0J aWYgKGFkZXYtPnBtLnBtX2Rpc3BsYXlfY2ZnLm1pbl9jb3JlX3NldF9jbG9jayA+IHNjbGspCj4+ IC0JCXNjbGsgPSBhZGV2LT5wbS5wbV9kaXNwbGF5X2NmZy5taW5fY29yZV9zZXRfY2xvY2s7Cj4+ IC0KPj4gLQlpZiAoYWRldi0+cG0ucG1fZGlzcGxheV9jZmcubWluX21lbV9zZXRfY2xvY2sgPiBt Y2xrKQo+PiAtCQltY2xrID0gYWRldi0+cG0ucG1fZGlzcGxheV9jZmcubWluX21lbV9zZXRfY2xv Y2s7Cj4+IC0KPj4gLQlpZiAocnBzLT52Y2VfYWN0aXZlKSB7Cj4+IC0JCWlmIChzY2xrIDwgYWRl di0+cG0uZHBtLnZjZV9zdGF0ZXNbYWRldi0KPj4+IHBtLmRwbS52Y2VfbGV2ZWxdLnNjbGspCj4+ IC0JCQlzY2xrID0gYWRldi0+cG0uZHBtLnZjZV9zdGF0ZXNbYWRldi0KPj4+IHBtLmRwbS52Y2Vf bGV2ZWxdLnNjbGs7Cj4+IC0JCWlmIChtY2xrIDwgYWRldi0+cG0uZHBtLnZjZV9zdGF0ZXNbYWRl di0KPj4+IHBtLmRwbS52Y2VfbGV2ZWxdLm1jbGspCj4+IC0JCQltY2xrID0gYWRldi0+cG0uZHBt LnZjZV9zdGF0ZXNbYWRldi0KPj4+IHBtLmRwbS52Y2VfbGV2ZWxdLm1jbGs7Cj4+IC0JfQo+PiAt Cj4+IC0JcHMtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5zY2xrID0gc2NsazsKPj4gLQlwcy0+cGVy Zm9ybWFuY2VfbGV2ZWxzWzBdLm1jbGsgPSBtY2xrOwo+PiAtCj4+IC0JaWYgKHBzLT5wZXJmb3Jt YW5jZV9sZXZlbHNbMV0uc2NsayA8IHBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0uc2NsaykKPj4g LQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1sxXS5zY2xrID0gcHMtCj4+PiBwZXJmb3JtYW5jZV9s ZXZlbHNbMF0uc2NsazsKPj4gLQo+PiAtCWlmIChkaXNhYmxlX21jbGtfc3dpdGNoaW5nKSB7Cj4+ IC0JCWlmIChwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzWzBdLm1jbGsgPCBwcy0KPj4+IHBlcmZvcm1h bmNlX2xldmVsc1sxXS5tY2xrKQo+PiAtCQkJcHMtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5tY2xr ID0gcHMtCj4+PiBwZXJmb3JtYW5jZV9sZXZlbHNbMV0ubWNsazsKPj4gLQl9IGVsc2Ugewo+PiAt CQlpZiAocHMtPnBlcmZvcm1hbmNlX2xldmVsc1sxXS5tY2xrIDwgcHMtCj4+PiBwZXJmb3JtYW5j ZV9sZXZlbHNbMF0ubWNsaykKPj4gLQkJCXBzLT5wZXJmb3JtYW5jZV9sZXZlbHNbMV0ubWNsayA9 IHBzLQo+Pj4gcGVyZm9ybWFuY2VfbGV2ZWxzWzBdLm1jbGs7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+ IC1zdGF0aWMgaW50IGNpX3RoZXJtYWxfc2V0X3RlbXBlcmF0dXJlX3JhbmdlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCQkgICAgaW50IG1pbl90ZW1wLCBpbnQgbWF4X3RlbXAp Cj4+IC17Cj4+IC0JaW50IGxvd190ZW1wID0gMCAqIDEwMDA7Cj4+IC0JaW50IGhpZ2hfdGVtcCA9 IDI1NSAqIDEwMDA7Cj4+IC0JdTMyIHRtcDsKPj4gLQo+PiAtCWlmIChsb3dfdGVtcCA8IG1pbl90 ZW1wKQo+PiAtCQlsb3dfdGVtcCA9IG1pbl90ZW1wOwo+PiAtCWlmIChoaWdoX3RlbXAgPiBtYXhf dGVtcCkKPj4gLQkJaGlnaF90ZW1wID0gbWF4X3RlbXA7Cj4+IC0JaWYgKGhpZ2hfdGVtcCA8IGxv d190ZW1wKSB7Cj4+IC0JCURSTV9FUlJPUigiaW52YWxpZCB0aGVybWFsIHJhbmdlOiAlZCAtICVk XG4iLCBsb3dfdGVtcCwKPj4gaGlnaF90ZW1wKTsKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0J fQo+PiAtCj4+IC0JdG1wID0gUlJFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5UKTsKPj4gLQl0bXAg Jj0gfihDR19USEVSTUFMX0lOVF9fRElHX1RIRVJNX0lOVEhfTUFTSyB8Cj4+IENHX1RIRVJNQUxf SU5UX19ESUdfVEhFUk1fSU5UTF9NQVNLKTsKPj4gLQl0bXAgfD0gKChoaWdoX3RlbXAgLyAxMDAw KSA8PAo+PiBDR19USEVSTUFMX0lOVF9fRElHX1RIRVJNX0lOVEhfX1NISUZUKSB8Cj4+IC0JCSgo bG93X3RlbXAgLyAxMDAwKSkgPDwKPj4gQ0dfVEhFUk1BTF9JTlRfX0RJR19USEVSTV9JTlRMX19T SElGVDsKPj4gLQlXUkVHMzJfU01DKGl4Q0dfVEhFUk1BTF9JTlQsIHRtcCk7Cj4+IC0KPj4gLSNp ZiAwCj4+IC0JLyogWFhYOiBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGhhbmRsZSB0aGlzIHBy b3Blcmx5ICovCj4+IC0JdG1wID0gUlJFRzMyX1NNQyhpeENHX1RIRVJNQUxfQ1RSTCk7Cj4+IC0J dG1wICY9IERJR19USEVSTV9EUE1fTUFTSzsKPj4gLQl0bXAgfD0gRElHX1RIRVJNX0RQTShoaWdo X3RlbXAgLyAxMDAwKTsKPj4gLQlXUkVHMzJfU01DKGl4Q0dfVEhFUk1BTF9DVFJMLCB0bXApOwo+ PiAtI2VuZGlmCj4+IC0KPj4gLQlhZGV2LT5wbS5kcG0udGhlcm1hbC5taW5fdGVtcCA9IGxvd190 ZW1wOwo+PiAtCWFkZXYtPnBtLmRwbS50aGVybWFsLm1heF90ZW1wID0gaGlnaF90ZW1wOwo+PiAt CXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3RoZXJtYWxfZW5hYmxlX2Fs ZXJ0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCSAgIGJvb2wgZW5hYmxlKQo+ PiAtewo+PiAtCXUzMiB0aGVybWFsX2ludCA9IFJSRUczMl9TTUMoaXhDR19USEVSTUFMX0lOVCk7 Cj4+IC0JUFBTTUNfUmVzdWx0IHJlc3VsdDsKPj4gLQo+PiAtCWlmIChlbmFibGUpIHsKPj4gLQkJ dGhlcm1hbF9pbnQgJj0KPj4gfihDR19USEVSTUFMX0lOVF9DVFJMX19USEVSTV9JTlRIX01BU0tf TUFTSyB8Cj4+IC0KPj4gQ0dfVEhFUk1BTF9JTlRfQ1RSTF9fVEhFUk1fSU5UTF9NQVNLX01BU0sp Owo+PiAtCQlXUkVHMzJfU01DKGl4Q0dfVEhFUk1BTF9JTlQsIHRoZXJtYWxfaW50KTsKPj4gLQkJ cmVzdWx0ID0gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0dfVGhl cm1hbF9DbnRsX0VuYWJsZSk7Cj4+IC0JCWlmIChyZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKSB7 Cj4+IC0JCQlEUk1fREVCVUdfS01TKCJDb3VsZCBub3QgZW5hYmxlIHRoZXJtYWwKPj4gaW50ZXJy dXB0cy5cbiIpOwo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JCX0KPj4gLQl9IGVsc2Ugewo+ PiAtCQl0aGVybWFsX2ludCB8PQo+PiBDR19USEVSTUFMX0lOVF9DVFJMX19USEVSTV9JTlRIX01B U0tfTUFTSyB8Cj4+IC0KPj4gCUNHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVExfTUFTS19N QVNLOwo+PiAtCQlXUkVHMzJfU01DKGl4Q0dfVEhFUk1BTF9JTlQsIHRoZXJtYWxfaW50KTsKPj4g LQkJcmVzdWx0ID0gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0df VGhlcm1hbF9DbnRsX0Rpc2FibGUpOwo+PiAtCQlpZiAocmVzdWx0ICE9IFBQU01DX1Jlc3VsdF9P Sykgewo+PiAtCQkJRFJNX0RFQlVHX0tNUygiQ291bGQgbm90IGRpc2FibGUgdGhlcm1hbAo+PiBp bnRlcnJ1cHRzLlxuIik7Cj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQkJfQo+PiAtCX0KPj4g LQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9mYW5fY3RybF9z ZXRfc3RhdGljX21vZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHUzMgo+PiBtb2RlKQo+ PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4g LQl1MzIgdG1wOwo+PiAtCj4+IC0JaWYgKHBpLT5mYW5fY3RybF9pc19pbl9kZWZhdWx0X21vZGUp IHsKPj4gLQkJdG1wID0gKFJSRUczMl9TTUMoaXhDR19GRE9fQ1RSTDIpICYKPj4gQ0dfRkRPX0NU UkwyX19GRE9fUFdNX01PREVfTUFTSykKPj4gLQkJCT4+IENHX0ZET19DVFJMMl9fRkRPX1BXTV9N T0RFX19TSElGVDsKPj4gLQkJcGktPmZhbl9jdHJsX2RlZmF1bHRfbW9kZSA9IHRtcDsKPj4gLQkJ dG1wID0gKFJSRUczMl9TTUMoaXhDR19GRE9fQ1RSTDIpICYKPj4gQ0dfRkRPX0NUUkwyX19UTUlO X01BU0spCj4+IC0JCQk+PiBDR19GRE9fQ1RSTDJfX1RNSU5fX1NISUZUOwo+PiAtCQlwaS0+dF9t aW4gPSB0bXA7Cj4+IC0JCXBpLT5mYW5fY3RybF9pc19pbl9kZWZhdWx0X21vZGUgPSBmYWxzZTsK Pj4gLQl9Cj4+IC0KPj4gLQl0bXAgPSBSUkVHMzJfU01DKGl4Q0dfRkRPX0NUUkwyKSAmCj4+IH5D R19GRE9fQ1RSTDJfX1RNSU5fTUFTSzsKPj4gLQl0bXAgfD0gMCA8PCBDR19GRE9fQ1RSTDJfX1RN SU5fX1NISUZUOwo+PiAtCVdSRUczMl9TTUMoaXhDR19GRE9fQ1RSTDIsIHRtcCk7Cj4+IC0KPj4g LQl0bXAgPSBSUkVHMzJfU01DKGl4Q0dfRkRPX0NUUkwyKSAmCj4+IH5DR19GRE9fQ1RSTDJfX0ZE T19QV01fTU9ERV9NQVNLOwo+PiAtCXRtcCB8PSBtb2RlIDw8IENHX0ZET19DVFJMMl9fRkRPX1BX TV9NT0RFX19TSElGVDsKPj4gLQlXUkVHMzJfU01DKGl4Q0dfRkRPX0NUUkwyLCB0bXApOwo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3RoZXJtYWxfc2V0dXBfZmFuX3RhYmxlKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9 IGNpX2dldF9waShhZGV2KTsKPj4gLQlTTVU3X0Rpc2NyZXRlX0ZhblRhYmxlIGZhbl90YWJsZSA9 IHsgRkRPX01PREVfSEFSRFdBUkUgfTsKPj4gLQl1MzIgZHV0eTEwMDsKPj4gLQl1MzIgdF9kaWZm MSwgdF9kaWZmMiwgcHdtX2RpZmYxLCBwd21fZGlmZjI7Cj4+IC0JdTE2IGZkb19taW4sIHNsb3Bl MSwgc2xvcGUyOwo+PiAtCXUzMiByZWZlcmVuY2VfY2xvY2ssIHRtcDsKPj4gLQlpbnQgcmV0Owo+ PiAtCXU2NCB0bXA2NDsKPj4gLQo+PiAtCWlmICghcGktPmZhbl90YWJsZV9zdGFydCkgewo+PiAt CQlhZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9jb250cm9sID0gZmFsc2U7Cj4+IC0JCXJldHVy biAwOwo+PiAtCX0KPj4gLQo+PiAtCWR1dHkxMDAgPSAoUlJFRzMyX1NNQyhpeENHX0ZET19DVFJM MSkgJgo+PiBDR19GRE9fQ1RSTDFfX0ZNQVhfRFVUWTEwMF9NQVNLKQo+PiAtCQk+PiBDR19GRE9f Q1RSTDFfX0ZNQVhfRFVUWTEwMF9fU0hJRlQ7Cj4+IC0KPj4gLQlpZiAoZHV0eTEwMCA9PSAwKSB7 Cj4+IC0JCWFkZXYtPnBtLmRwbS5mYW4udWNvZGVfZmFuX2NvbnRyb2wgPSBmYWxzZTsKPj4gLQkJ cmV0dXJuIDA7Cj4+IC0JfQo+PiAtCj4+IC0JdG1wNjQgPSAodTY0KWFkZXYtPnBtLmRwbS5mYW4u cHdtX21pbiAqIGR1dHkxMDA7Cj4+IC0JZG9fZGl2KHRtcDY0LCAxMDAwMCk7Cj4+IC0JZmRvX21p biA9ICh1MTYpdG1wNjQ7Cj4+IC0KPj4gLQl0X2RpZmYxID0gYWRldi0+cG0uZHBtLmZhbi50X21l ZCAtIGFkZXYtPnBtLmRwbS5mYW4udF9taW47Cj4+IC0JdF9kaWZmMiA9IGFkZXYtPnBtLmRwbS5m YW4udF9oaWdoIC0gYWRldi0+cG0uZHBtLmZhbi50X21lZDsKPj4gLQo+PiAtCXB3bV9kaWZmMSA9 IGFkZXYtPnBtLmRwbS5mYW4ucHdtX21lZCAtIGFkZXYtCj4+PiBwbS5kcG0uZmFuLnB3bV9taW47 Cj4+IC0JcHdtX2RpZmYyID0gYWRldi0+cG0uZHBtLmZhbi5wd21faGlnaCAtIGFkZXYtCj4+PiBw bS5kcG0uZmFuLnB3bV9tZWQ7Cj4+IC0KPj4gLQlzbG9wZTEgPSAodTE2KSgoNTAgKyAoKDE2ICog ZHV0eTEwMCAqIHB3bV9kaWZmMSkgLyB0X2RpZmYxKSkgLyAxMDApOwo+PiAtCXNsb3BlMiA9ICh1 MTYpKCg1MCArICgoMTYgKiBkdXR5MTAwICogcHdtX2RpZmYyKSAvIHRfZGlmZjIpKSAvIDEwMCk7 Cj4+IC0KPj4gLQlmYW5fdGFibGUuVGVtcE1pbiA9IGNwdV90b19iZTE2KCg1MCArIGFkZXYtPnBt LmRwbS5mYW4udF9taW4pCj4+IC8gMTAwKTsKPj4gLQlmYW5fdGFibGUuVGVtcE1lZCA9IGNwdV90 b19iZTE2KCg1MCArIGFkZXYtCj4+PiBwbS5kcG0uZmFuLnRfbWVkKSAvIDEwMCk7Cj4+IC0JZmFu X3RhYmxlLlRlbXBNYXggPSBjcHVfdG9fYmUxNigoNTAgKyBhZGV2LT5wbS5kcG0uZmFuLnRfbWF4 KQo+PiAvIDEwMCk7Cj4+IC0KPj4gLQlmYW5fdGFibGUuU2xvcGUxID0gY3B1X3RvX2JlMTYoc2xv cGUxKTsKPj4gLQlmYW5fdGFibGUuU2xvcGUyID0gY3B1X3RvX2JlMTYoc2xvcGUyKTsKPj4gLQo+ PiAtCWZhbl90YWJsZS5GZG9NaW4gPSBjcHVfdG9fYmUxNihmZG9fbWluKTsKPj4gLQo+PiAtCWZh bl90YWJsZS5IeXN0RG93biA9IGNwdV90b19iZTE2KGFkZXYtPnBtLmRwbS5mYW4udF9oeXN0KTsK Pj4gLQo+PiAtCWZhbl90YWJsZS5IeXN0VXAgPSBjcHVfdG9fYmUxNigxKTsKPj4gLQo+PiAtCWZh bl90YWJsZS5IeXN0U2xvcGUgPSBjcHVfdG9fYmUxNigxKTsKPj4gLQo+PiAtCWZhbl90YWJsZS5U ZW1wUmVzcExpbSA9IGNwdV90b19iZTE2KDUpOwo+PiAtCj4+IC0JcmVmZXJlbmNlX2Nsb2NrID0g YW1kZ3B1X2FzaWNfZ2V0X3hjbGsoYWRldik7Cj4+IC0KPj4gLQlmYW5fdGFibGUuUmVmcmVzaFBl cmlvZCA9IGNwdV90b19iZTMyKChhZGV2LQo+Pj4gcG0uZHBtLmZhbi5jeWNsZV9kZWxheSAqCj4+ IC0JCQkJCSAgICAgICByZWZlcmVuY2VfY2xvY2spIC8gMTYwMCk7Cj4+IC0KPj4gLQlmYW5fdGFi bGUuRmRvTWF4ID0gY3B1X3RvX2JlMTYoKHUxNilkdXR5MTAwKTsKPj4gLQo+PiAtCXRtcCA9IChS UkVHMzJfU01DKGl4Q0dfTVVMVF9USEVSTUFMX0NUUkwpICYKPj4gQ0dfTVVMVF9USEVSTUFMX0NU UkxfX1RFTVBfU0VMX01BU0spCj4+IC0JCT4+IENHX01VTFRfVEhFUk1BTF9DVFJMX19URU1QX1NF TF9fU0hJRlQ7Cj4+IC0JZmFuX3RhYmxlLlRlbXBTcmMgPSAodWludDhfdCl0bXA7Cj4+IC0KPj4g LQlyZXQgPSBhbWRncHVfY2lfY29weV9ieXRlc190b19zbWMoYWRldiwKPj4gLQkJCQkJICBwaS0+ ZmFuX3RhYmxlX3N0YXJ0LAo+PiAtCQkJCQkgICh1OCAqKSgmZmFuX3RhYmxlKSwKPj4gLQkJCQkJ ICBzaXplb2YoZmFuX3RhYmxlKSwKPj4gLQkJCQkJICBwaS0+c3JhbV9lbmQpOwo+PiAtCj4+IC0J aWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2FkIGZhbiB0YWJsZSB0byB0 aGUgU01DLiIpOwo+PiAtCQlhZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9jb250cm9sID0gZmFs c2U7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQg Y2lfZmFuX2N0cmxfc3RhcnRfc21jX2Zhbl9jb250cm9sKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2 KTsKPj4gLQlQUFNNQ19SZXN1bHQgcmV0Owo+PiAtCj4+IC0JaWYgKHBpLT5jYXBzX29kX2Z1enp5 X2Zhbl9jb250cm9sX3N1cHBvcnQpIHsKPj4gLQkJcmV0ID0gYW1kZ3B1X2NpX3NlbmRfbXNnX3Rv X3NtY193aXRoX3BhcmFtZXRlcihhZGV2LAo+PiAtCj4+IFBQU01DX1N0YXJ0RmFuQ29udHJvbCwK Pj4gLQo+PiBGQU5fQ09OVFJPTF9GVVpaWSk7Cj4+IC0JCWlmIChyZXQgIT0gUFBTTUNfUmVzdWx0 X09LKQo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JCXJldCA9IGFtZGdwdV9jaV9zZW5kX21z Z190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwKPj4gLQo+PiBQUFNNQ19NU0dfU2V0RmFuUHdt TWF4LAo+PiAtCQkJCQkJCSAgICAgICBhZGV2LQo+Pj4gcG0uZHBtLmZhbi5kZWZhdWx0X21heF9m YW5fcHdtKTsKPj4gLQkJaWYgKHJldCAhPSBQUFNNQ19SZXN1bHRfT0spCj4+IC0JCQlyZXR1cm4g LUVJTlZBTDsKPj4gLQl9IGVsc2Ugewo+PiAtCQlyZXQgPSBhbWRncHVfY2lfc2VuZF9tc2dfdG9f c21jX3dpdGhfcGFyYW1ldGVyKGFkZXYsCj4+IC0KPj4gUFBTTUNfU3RhcnRGYW5Db250cm9sLAo+ PiAtCj4+IEZBTl9DT05UUk9MX1RBQkxFKTsKPj4gLQkJaWYgKHJldCAhPSBQUFNNQ19SZXN1bHRf T0spCj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlwaS0+ZmFuX2lzX2Nv bnRyb2xsZWRfYnlfc21jID0gdHJ1ZTsKPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtCj4+ IC1zdGF0aWMgaW50IGNpX2Zhbl9jdHJsX3N0b3Bfc21jX2Zhbl9jb250cm9sKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCVBQU01DX1Jlc3VsdCByZXQ7Cj4+IC0Jc3RydWN0 IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCj4+IC0JcmV0ID0gYW1k Z3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBQUFNNQ19TdG9wRmFuQ29udHJvbCk7Cj4+IC0J aWYgKHJldCA9PSBQUFNNQ19SZXN1bHRfT0spIHsKPj4gLQkJcGktPmZhbl9pc19jb250cm9sbGVk X2J5X3NtYyA9IGZhbHNlOwo+PiAtCQlyZXR1cm4gMDsKPj4gLQl9IGVsc2Ugewo+PiAtCQlyZXR1 cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZHBtX2dldF9m YW5fc3BlZWRfcGVyY2VudCh2b2lkICpoYW5kbGUsCj4+IC0JCQkJCXUzMiAqc3BlZWQpCj4+IC17 Cj4+IC0JdTMyIGR1dHksIGR1dHkxMDA7Cj4+IC0JdTY0IHRtcDY0Owo+PiAtCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwo+PiAtCj4+ IC0JaWYgKGFkZXYtPnBtLm5vX2ZhbikKPj4gLQkJcmV0dXJuIC1FTk9FTlQ7Cj4+IC0KPj4gLQlk dXR5MTAwID0gKFJSRUczMl9TTUMoaXhDR19GRE9fQ1RSTDEpICYKPj4gQ0dfRkRPX0NUUkwxX19G TUFYX0RVVFkxMDBfTUFTSykKPj4gLQkJPj4gQ0dfRkRPX0NUUkwxX19GTUFYX0RVVFkxMDBfX1NI SUZUOwo+PiAtCWR1dHkgPSAoUlJFRzMyX1NNQyhpeENHX1RIRVJNQUxfU1RBVFVTKSAmCj4+IENH X1RIRVJNQUxfU1RBVFVTX19GRE9fUFdNX0RVVFlfTUFTSykKPj4gLQkJPj4gQ0dfVEhFUk1BTF9T VEFUVVNfX0ZET19QV01fRFVUWV9fU0hJRlQ7Cj4+IC0KPj4gLQlpZiAoZHV0eTEwMCA9PSAwKQo+ PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCXRtcDY0ID0gKHU2NClkdXR5ICogMTAwOwo+ PiAtCWRvX2Rpdih0bXA2NCwgZHV0eTEwMCk7Cj4+IC0JKnNwZWVkID0gKHUzMil0bXA2NDsKPj4g LQo+PiAtCWlmICgqc3BlZWQgPiAxMDApCj4+IC0JCSpzcGVlZCA9IDEwMDsKPj4gLQo+PiAtCXJl dHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9zZXRfZmFuX3NwZWVkX3Bl cmNlbnQodm9pZCAqaGFuZGxlLAo+PiAtCQkJCQl1MzIgc3BlZWQpCj4+IC17Cj4+IC0JdTMyIHRt cDsKPj4gLQl1MzIgZHV0eSwgZHV0eTEwMDsKPj4gLQl1NjQgdG1wNjQ7Cj4+IC0Jc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0J c3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCj4+IC0JaWYg KGFkZXYtPnBtLm5vX2ZhbikKPj4gLQkJcmV0dXJuIC1FTk9FTlQ7Cj4+IC0KPj4gLQlpZiAocGkt PmZhbl9pc19jb250cm9sbGVkX2J5X3NtYykKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0KPj4g LQlpZiAoc3BlZWQgPiAxMDApCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCj4+IC0JZHV0eTEw MCA9IChSUkVHMzJfU01DKGl4Q0dfRkRPX0NUUkwxKSAmCj4+IENHX0ZET19DVFJMMV9fRk1BWF9E VVRZMTAwX01BU0spCj4+IC0JCT4+IENHX0ZET19DVFJMMV9fRk1BWF9EVVRZMTAwX19TSElGVDsK Pj4gLQo+PiAtCWlmIChkdXR5MTAwID09IDApCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCj4+ IC0JdG1wNjQgPSAodTY0KXNwZWVkICogZHV0eTEwMDsKPj4gLQlkb19kaXYodG1wNjQsIDEwMCk7 Cj4+IC0JZHV0eSA9ICh1MzIpdG1wNjQ7Cj4+IC0KPj4gLQl0bXAgPSBSUkVHMzJfU01DKGl4Q0df RkRPX0NUUkwwKSAmCj4+IH5DR19GRE9fQ1RSTDBfX0ZET19TVEFUSUNfRFVUWV9NQVNLOwo+PiAt CXRtcCB8PSBkdXR5IDw8IENHX0ZET19DVFJMMF9fRkRPX1NUQVRJQ19EVVRZX19TSElGVDsKPj4g LQlXUkVHMzJfU01DKGl4Q0dfRkRPX0NUUkwwLCB0bXApOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+ IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX2RwbV9zZXRfZmFuX2NvbnRyb2xfbW9kZSh2b2lk ICpoYW5kbGUsIHUzMiBtb2RlKQo+PiAtewo+PiAtCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwo+PiAtCj4+IC0Jc3dpdGNoIChtb2Rl KSB7Cj4+IC0JY2FzZSBBTURfRkFOX0NUUkxfTk9ORToKPj4gLQkJaWYgKGFkZXYtPnBtLmRwbS5m YW4udWNvZGVfZmFuX2NvbnRyb2wpCj4+IC0JCQljaV9mYW5fY3RybF9zdG9wX3NtY19mYW5fY29u dHJvbChhZGV2KTsKPj4gLQkJY2lfZHBtX3NldF9mYW5fc3BlZWRfcGVyY2VudChhZGV2LCAxMDAp Owo+PiAtCQlicmVhazsKPj4gLQljYXNlIEFNRF9GQU5fQ1RSTF9NQU5VQUw6Cj4+IC0JCWlmIChh ZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9jb250cm9sKQo+PiAtCQkJY2lfZmFuX2N0cmxfc3Rv cF9zbWNfZmFuX2NvbnRyb2woYWRldik7Cj4+IC0JCWJyZWFrOwo+PiAtCWNhc2UgQU1EX0ZBTl9D VFJMX0FVVE86Cj4+IC0JCWlmIChhZGV2LT5wbS5kcG0uZmFuLnVjb2RlX2Zhbl9jb250cm9sKQo+ PiAtCQkJY2lfdGhlcm1hbF9zdGFydF9zbWNfZmFuX2NvbnRyb2woYWRldik7Cj4+IC0JCWJyZWFr Owo+PiAtCWRlZmF1bHQ6Cj4+IC0JCWJyZWFrOwo+PiAtCX0KPj4gLX0KPj4gLQo+PiAtc3RhdGlj IHUzMiBjaV9kcG1fZ2V0X2Zhbl9jb250cm9sX21vZGUodm9pZCAqaGFuZGxlKQo+PiAtewo+PiAt CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFu ZGxlOwo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4g LQo+PiAtCWlmIChwaS0+ZmFuX2lzX2NvbnRyb2xsZWRfYnlfc21jKQo+PiAtCQlyZXR1cm4gQU1E X0ZBTl9DVFJMX0FVVE87Cj4+IC0JZWxzZQo+PiAtCQlyZXR1cm4gQU1EX0ZBTl9DVFJMX01BTlVB TDsKPj4gLX0KPj4gLQo+PiAtI2lmIDAKPj4gLXN0YXRpYyBpbnQgY2lfZmFuX2N0cmxfZ2V0X2Zh bl9zcGVlZF9ycG0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCSB1MzIgKnNw ZWVkKQo+PiAtewo+PiAtCXUzMiB0YWNoX3BlcmlvZDsKPj4gLQl1MzIgeGNsayA9IGFtZGdwdV9h c2ljX2dldF94Y2xrKGFkZXYpOwo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLm5vX2ZhbikKPj4gLQkJ cmV0dXJuIC1FTk9FTlQ7Cj4+IC0KPj4gLQlpZiAoYWRldi0+cG0uZmFuX3B1bHNlc19wZXJfcmV2 b2x1dGlvbiA9PSAwKQo+PiAtCQlyZXR1cm4gLUVOT0VOVDsKPj4gLQo+PiAtCXRhY2hfcGVyaW9k ID0gKFJSRUczMl9TTUMoaXhDR19UQUNIX1NUQVRVUykgJgo+PiBDR19UQUNIX1NUQVRVU19fVEFD SF9QRVJJT0RfTUFTSykKPj4gLQkJPj4gQ0dfVEFDSF9TVEFUVVNfX1RBQ0hfUEVSSU9EX19TSElG VDsKPj4gLQlpZiAodGFjaF9wZXJpb2QgPT0gMCkKPj4gLQkJcmV0dXJuIC1FTk9FTlQ7Cj4+IC0K Pj4gLQkqc3BlZWQgPSA2MCAqIHhjbGsgKiAxMDAwMCAvIHRhY2hfcGVyaW9kOwo+PiAtCj4+IC0J cmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZmFuX2N0cmxfc2V0X2Zhbl9z cGVlZF9ycG0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCSB1MzIgc3BlZWQp Cj4+IC17Cj4+IC0JdTMyIHRhY2hfcGVyaW9kLCB0bXA7Cj4+IC0JdTMyIHhjbGsgPSBhbWRncHVf YXNpY19nZXRfeGNsayhhZGV2KTsKPj4gLQo+PiAtCWlmIChhZGV2LT5wbS5ub19mYW4pCj4+IC0J CXJldHVybiAtRU5PRU5UOwo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmZhbl9wdWxzZXNfcGVyX3Jl dm9sdXRpb24gPT0gMCkKPj4gLQkJcmV0dXJuIC1FTk9FTlQ7Cj4+IC0KPj4gLQlpZiAoKHNwZWVk IDwgYWRldi0+cG0uZmFuX21pbl9ycG0pIHx8Cj4+IC0JICAgIChzcGVlZCA+IGFkZXYtPnBtLmZh bl9tYXhfcnBtKSkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0KPj4gLQlpZiAoYWRldi0+cG0u ZHBtLmZhbi51Y29kZV9mYW5fY29udHJvbCkKPj4gLQkJY2lfZmFuX2N0cmxfc3RvcF9zbWNfZmFu X2NvbnRyb2woYWRldik7Cj4+IC0KPj4gLQl0YWNoX3BlcmlvZCA9IDYwICogeGNsayAqIDEwMDAw IC8gKDggKiBzcGVlZCk7Cj4+IC0JdG1wID0gUlJFRzMyX1NNQyhpeENHX1RBQ0hfQ1RSTCkgJgo+ PiB+Q0dfVEFDSF9DVFJMX19UQVJHRVRfUEVSSU9EX01BU0s7Cj4+IC0JdG1wIHw9IHRhY2hfcGVy aW9kIDw8IENHX1RBQ0hfQ1RSTF9fVEFSR0VUX1BFUklPRF9fU0hJRlQ7Cj4+IC0JV1JFRzMyX1NN QyhDR19UQUNIX0NUUkwsIHRtcCk7Cj4+IC0KPj4gLQljaV9mYW5fY3RybF9zZXRfc3RhdGljX21v ZGUoYWRldiwKPj4gRkRPX1BXTV9NT0RFX1NUQVRJQ19SUE0pOwo+PiAtCj4+IC0JcmV0dXJuIDA7 Cj4+IC19Cj4+IC0jZW5kaWYKPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfZmFuX2N0cmxfc2V0X2Rl ZmF1bHRfbW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlzdHJ1Y3Qg Y2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JdTMyIHRtcDsKPj4gLQo+ PiAtCWlmICghcGktPmZhbl9jdHJsX2lzX2luX2RlZmF1bHRfbW9kZSkgewo+PiAtCQl0bXAgPSBS UkVHMzJfU01DKGl4Q0dfRkRPX0NUUkwyKSAmCj4+IH5DR19GRE9fQ1RSTDJfX0ZET19QV01fTU9E RV9NQVNLOwo+PiAtCQl0bXAgfD0gcGktPmZhbl9jdHJsX2RlZmF1bHRfbW9kZSA8PAo+PiBDR19G RE9fQ1RSTDJfX0ZET19QV01fTU9ERV9fU0hJRlQ7Cj4+IC0JCVdSRUczMl9TTUMoaXhDR19GRE9f Q1RSTDIsIHRtcCk7Cj4+IC0KPj4gLQkJdG1wID0gUlJFRzMyX1NNQyhpeENHX0ZET19DVFJMMikg Jgo+PiB+Q0dfRkRPX0NUUkwyX19UTUlOX01BU0s7Cj4+IC0JCXRtcCB8PSBwaS0+dF9taW4gPDwg Q0dfRkRPX0NUUkwyX19UTUlOX19TSElGVDsKPj4gLQkJV1JFRzMyX1NNQyhpeENHX0ZET19DVFJM MiwgdG1wKTsKPj4gLQkJcGktPmZhbl9jdHJsX2lzX2luX2RlZmF1bHRfbW9kZSA9IHRydWU7Cj4+ IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV90aGVybWFsX3N0YXJ0X3NtY19mYW5f Y29udHJvbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlpZiAoYWRldi0+ cG0uZHBtLmZhbi51Y29kZV9mYW5fY29udHJvbCkgewo+PiAtCQljaV9mYW5fY3RybF9zdGFydF9z bWNfZmFuX2NvbnRyb2woYWRldik7Cj4+IC0JCWNpX2Zhbl9jdHJsX3NldF9zdGF0aWNfbW9kZShh ZGV2LAo+PiBGRE9fUFdNX01PREVfU1RBVElDKTsKPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRp YyB2b2lkIGNpX3RoZXJtYWxfaW5pdGlhbGl6ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK Pj4gLXsKPj4gLQl1MzIgdG1wOwo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmZhbl9wdWxzZXNfcGVy X3Jldm9sdXRpb24pIHsKPj4gLQkJdG1wID0gUlJFRzMyX1NNQyhpeENHX1RBQ0hfQ1RSTCkgJgo+ PiB+Q0dfVEFDSF9DVFJMX19FREdFX1BFUl9SRVZfTUFTSzsKPj4gLQkJdG1wIHw9IChhZGV2LT5w bS5mYW5fcHVsc2VzX3Blcl9yZXZvbHV0aW9uIC0gMSkKPj4gLQkJCTw8IENHX1RBQ0hfQ1RSTF9f RURHRV9QRVJfUkVWX19TSElGVDsKPj4gLQkJV1JFRzMyX1NNQyhpeENHX1RBQ0hfQ1RSTCwgdG1w KTsKPj4gLQl9Cj4+IC0KPj4gLQl0bXAgPSBSUkVHMzJfU01DKGl4Q0dfRkRPX0NUUkwyKSAmCj4+ IH5DR19GRE9fQ1RSTDJfX1RBQ0hfUFdNX1JFU1BfUkFURV9NQVNLOwo+PiAtCXRtcCB8PSAweDI4 IDw8IENHX0ZET19DVFJMMl9fVEFDSF9QV01fUkVTUF9SQVRFX19TSElGVDsKPj4gLQlXUkVHMzJf U01DKGl4Q0dfRkRPX0NUUkwyLCB0bXApOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3Ro ZXJtYWxfc3RhcnRfdGhlcm1hbF9jb250cm9sbGVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+PiAtewo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQljaV90aGVybWFsX2luaXRpYWxpemUoYWRl dik7Cj4+IC0JcmV0ID0gY2lfdGhlcm1hbF9zZXRfdGVtcGVyYXR1cmVfcmFuZ2UoYWRldiwKPj4g Q0lTTEFORFNfVEVNUF9SQU5HRV9NSU4sIENJU0xBTkRTX1RFTVBfUkFOR0VfTUFYKTsKPj4gLQlp ZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCXJldCA9IGNpX3RoZXJtYWxfZW5hYmxlX2Fs ZXJ0KGFkZXYsIHRydWUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0JaWYg KGFkZXYtPnBtLmRwbS5mYW4udWNvZGVfZmFuX2NvbnRyb2wpIHsKPj4gLQkJcmV0ID0gY2lfdGhl cm1hbF9zZXR1cF9mYW5fdGFibGUoYWRldik7Cj4+IC0JCWlmIChyZXQpCj4+IC0JCQlyZXR1cm4g cmV0Owo+PiAtCQljaV90aGVybWFsX3N0YXJ0X3NtY19mYW5fY29udHJvbChhZGV2KTsKPj4gLQl9 Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfdGhlcm1h bF9zdG9wX3RoZXJtYWxfY29udHJvbGxlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZQo+PiAqYWRldikK Pj4gLXsKPj4gLQlpZiAoIWFkZXYtPnBtLm5vX2ZhbikKPj4gLQkJY2lfZmFuX2N0cmxfc2V0X2Rl ZmF1bHRfbW9kZShhZGV2KTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9yZWFkX3NtY19z b2Z0X3JlZ2lzdGVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCSAgICAgdTE2 IHJlZ19vZmZzZXQsIHUzMiAqdmFsdWUpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8g KnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCj4+IC0JcmV0dXJuIGFtZGdwdV9jaV9yZWFkX3Nt Y19zcmFtX2R3b3JkKGFkZXYsCj4+IC0JCQkJICAgICAgcGktPnNvZnRfcmVnc19zdGFydCArIHJl Z19vZmZzZXQsCj4+IC0JCQkJICAgICAgdmFsdWUsIHBpLT5zcmFtX2VuZCk7Cj4+IC19Cj4+IC0K Pj4gLXN0YXRpYyBpbnQgY2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4+IC0JCQkJICAgICAgdTE2IHJlZ19vZmZzZXQsIHUzMiB2YWx1ZSkKPj4g LXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0K Pj4gLQlyZXR1cm4gYW1kZ3B1X2NpX3dyaXRlX3NtY19zcmFtX2R3b3JkKGFkZXYsCj4+IC0JCQkJ ICAgICAgIHBpLT5zb2Z0X3JlZ3Nfc3RhcnQgKyByZWdfb2Zmc2V0LAo+PiAtCQkJCSAgICAgICB2 YWx1ZSwgcGktPnNyYW1fZW5kKTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfaW5pdF9m cHNfbGltaXRzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCXN0cnVjdCBj aV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQlTTVU3X0Rpc2NyZXRlX0Rw bVRhYmxlICp0YWJsZSA9ICZwaS0+c21jX3N0YXRlX3RhYmxlOwo+PiAtCj4+IC0JaWYgKHBpLT5j YXBzX2Zwcykgewo+PiAtCQl1MTYgdG1wOwo+PiAtCj4+IC0JCXRtcCA9IDQ1Owo+PiAtCQl0YWJs ZS0+RnBzSGlnaFQgPSBjcHVfdG9fYmUxNih0bXApOwo+PiAtCj4+IC0JCXRtcCA9IDMwOwo+PiAt CQl0YWJsZS0+RnBzTG93VCA9IGNwdV90b19iZTE2KHRtcCk7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+ IC1zdGF0aWMgaW50IGNpX3VwZGF0ZV9zY2xrX3Qoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+ PiAtCWludCByZXQgPSAwOwo+PiAtCXUzMiBsb3dfc2Nsa19pbnRlcnJ1cHRfdCA9IDA7Cj4+IC0K Pj4gLQlpZiAocGktPmNhcHNfc2Nsa190aHJvdHRsZV9sb3dfbm90aWZpY2F0aW9uKSB7Cj4+IC0J CWxvd19zY2xrX2ludGVycnVwdF90ID0gY3B1X3RvX2JlMzIocGktCj4+PiBsb3dfc2Nsa19pbnRl cnJ1cHRfdCk7Cj4+IC0KPj4gLQkJcmV0ID0gYW1kZ3B1X2NpX2NvcHlfYnl0ZXNfdG9fc21jKGFk ZXYsCj4+IC0JCQkJCSAgIHBpLT5kcG1fdGFibGVfc3RhcnQgKwo+PiAtCQkJCQkgICBvZmZzZXRv ZihTTVU3X0Rpc2NyZXRlX0RwbVRhYmxlLAo+PiBMb3dTY2xrSW50ZXJydXB0VCksCj4+IC0JCQkJ CSAgICh1OCAqKSZsb3dfc2Nsa19pbnRlcnJ1cHRfdCwKPj4gLQkJCQkJICAgc2l6ZW9mKHUzMiks IHBpLT5zcmFtX2VuZCk7Cj4+IC0KPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAtfQo+ PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9nZXRfbGVha2FnZV92b2x0YWdlcyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9n ZXRfcGkoYWRldik7Cj4+IC0JdTE2IGxlYWthZ2VfaWQsIHZpcnR1YWxfdm9sdGFnZV9pZDsKPj4g LQl1MTYgdmRkYywgdmRkY2k7Cj4+IC0JaW50IGk7Cj4+IC0KPj4gLQlwaS0+dmRkY19sZWFrYWdl LmNvdW50ID0gMDsKPj4gLQlwaS0+dmRkY2lfbGVha2FnZS5jb3VudCA9IDA7Cj4+IC0KPj4gLQlp ZiAoYWRldi0+cG0uZHBtLnBsYXRmb3JtX2NhcHMgJgo+PiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9F VlYpIHsKPj4gLQkJZm9yIChpID0gMDsgaSA8IENJU0xBTkRTX01BWF9MRUFLQUdFX0NPVU5UOyBp KyspIHsKPj4gLQkJCXZpcnR1YWxfdm9sdGFnZV9pZCA9IEFUT01fVklSVFVBTF9WT0xUQUdFX0lE MAo+PiArIGk7Cj4+IC0JCQlpZiAoYW1kZ3B1X2F0b21iaW9zX2dldF92b2x0YWdlX2V2dihhZGV2 LAo+PiB2aXJ0dWFsX3ZvbHRhZ2VfaWQsICZ2ZGRjKSAhPSAwKQo+PiAtCQkJCWNvbnRpbnVlOwo+ PiAtCQkJaWYgKHZkZGMgIT0gMCAmJiB2ZGRjICE9IHZpcnR1YWxfdm9sdGFnZV9pZCkgewo+PiAt CQkJCXBpLT52ZGRjX2xlYWthZ2UuYWN0dWFsX3ZvbHRhZ2VbcGktCj4+PiB2ZGRjX2xlYWthZ2Uu Y291bnRdID0gdmRkYzsKPj4gLQkJCQlwaS0+dmRkY19sZWFrYWdlLmxlYWthZ2VfaWRbcGktCj4+ PiB2ZGRjX2xlYWthZ2UuY291bnRdID0gdmlydHVhbF92b2x0YWdlX2lkOwo+PiAtCQkJCXBpLT52 ZGRjX2xlYWthZ2UuY291bnQrKzsKPj4gLQkJCX0KPj4gLQkJfQo+PiAtCX0gZWxzZSBpZiAoYW1k Z3B1X2F0b21iaW9zX2dldF9sZWFrYWdlX2lkX2Zyb21fdmJpb3MoYWRldiwKPj4gJmxlYWthZ2Vf aWQpID09IDApIHsKPj4gLQkJZm9yIChpID0gMDsgaSA8IENJU0xBTkRTX01BWF9MRUFLQUdFX0NP VU5UOyBpKyspIHsKPj4gLQkJCXZpcnR1YWxfdm9sdGFnZV9pZCA9IEFUT01fVklSVFVBTF9WT0xU QUdFX0lEMAo+PiArIGk7Cj4+IC0JCQlpZgo+PiAoYW1kZ3B1X2F0b21iaW9zX2dldF9sZWFrYWdl X3ZkZGNfYmFzZWRfb25fbGVha2FnZV9wYXJhbXMoYWRldiwKPj4gJnZkZGMsICZ2ZGRjaSwKPj4g LQo+PiAJICAgICB2aXJ0dWFsX3ZvbHRhZ2VfaWQsCj4+IC0KPj4gCSAgICAgbGVha2FnZV9pZCkg PT0gMCkgewo+PiAtCQkJCWlmICh2ZGRjICE9IDAgJiYgdmRkYyAhPSB2aXJ0dWFsX3ZvbHRhZ2Vf aWQpIHsKPj4gLQkJCQkJcGktPnZkZGNfbGVha2FnZS5hY3R1YWxfdm9sdGFnZVtwaS0KPj4+IHZk ZGNfbGVha2FnZS5jb3VudF0gPSB2ZGRjOwo+PiAtCQkJCQlwaS0+dmRkY19sZWFrYWdlLmxlYWth Z2VfaWRbcGktCj4+PiB2ZGRjX2xlYWthZ2UuY291bnRdID0gdmlydHVhbF92b2x0YWdlX2lkOwo+ PiAtCQkJCQlwaS0+dmRkY19sZWFrYWdlLmNvdW50Kys7Cj4+IC0JCQkJfQo+PiAtCQkJCWlmICh2 ZGRjaSAhPSAwICYmIHZkZGNpICE9IHZpcnR1YWxfdm9sdGFnZV9pZCkgewo+PiAtCQkJCQlwaS0+ dmRkY2lfbGVha2FnZS5hY3R1YWxfdm9sdGFnZVtwaS0KPj4+IHZkZGNpX2xlYWthZ2UuY291bnRd ID0gdmRkY2k7Cj4+IC0JCQkJCXBpLT52ZGRjaV9sZWFrYWdlLmxlYWthZ2VfaWRbcGktCj4+PiB2 ZGRjaV9sZWFrYWdlLmNvdW50XSA9IHZpcnR1YWxfdm9sdGFnZV9pZDsKPj4gLQkJCQkJcGktPnZk ZGNpX2xlYWthZ2UuY291bnQrKzsKPj4gLQkJCQl9Cj4+IC0JCQl9Cj4+IC0JCX0KPj4gLQl9Cj4+ IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX3NldF9kcG1fZXZlbnRfc291cmNlcyhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwgdTMyCj4+IHNvdXJjZXMpCj4+IC17Cj4+IC0Jc3RydWN0IGNp X3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCWJvb2wgd2FudF90aGVybWFs X3Byb3RlY3Rpb247Cj4+IC0JZW51bSBhbWRncHVfZHBtX2V2ZW50X3NyYyBkcG1fZXZlbnRfc3Jj Owo+PiAtCXUzMiB0bXA7Cj4+IC0KPj4gLQlzd2l0Y2ggKHNvdXJjZXMpIHsKPj4gLQljYXNlIDA6 Cj4+IC0JZGVmYXVsdDoKPj4gLQkJd2FudF90aGVybWFsX3Byb3RlY3Rpb24gPSBmYWxzZTsKPj4g LQkJYnJlYWs7Cj4+IC0JY2FzZSAoMSA8PCBBTURHUFVfRFBNX0FVVE9fVEhST1RUTEVfU1JDX1RI RVJNQUwpOgo+PiAtCQl3YW50X3RoZXJtYWxfcHJvdGVjdGlvbiA9IHRydWU7Cj4+IC0JCWRwbV9l dmVudF9zcmMgPSBBTURHUFVfRFBNX0VWRU5UX1NSQ19ESUdJVEFMOwo+PiAtCQlicmVhazsKPj4g LQljYXNlICgxIDw8IEFNREdQVV9EUE1fQVVUT19USFJPVFRMRV9TUkNfRVhURVJOQUwpOgo+PiAt CQl3YW50X3RoZXJtYWxfcHJvdGVjdGlvbiA9IHRydWU7Cj4+IC0JCWRwbV9ldmVudF9zcmMgPSBB TURHUFVfRFBNX0VWRU5UX1NSQ19FWFRFUk5BTDsKPj4gLQkJYnJlYWs7Cj4+IC0JY2FzZSAoKDEg PDwgQU1ER1BVX0RQTV9BVVRPX1RIUk9UVExFX1NSQ19FWFRFUk5BTCkgfAo+PiAtCSAgICAgICgx IDw8IEFNREdQVV9EUE1fQVVUT19USFJPVFRMRV9TUkNfVEhFUk1BTCkpOgo+PiAtCQl3YW50X3Ro ZXJtYWxfcHJvdGVjdGlvbiA9IHRydWU7Cj4+IC0JCWRwbV9ldmVudF9zcmMgPQo+PiBBTURHUFVf RFBNX0VWRU5UX1NSQ19ESUdJQUxfT1JfRVhURVJOQUw7Cj4+IC0JCWJyZWFrOwo+PiAtCX0KPj4g LQo+PiAtCWlmICh3YW50X3RoZXJtYWxfcHJvdGVjdGlvbikgewo+PiAtI2lmIDAKPj4gLQkJLyog WFhYOiBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGhhbmRsZSB0aGlzIHByb3Blcmx5ICovCj4+ IC0JCXRtcCA9IFJSRUczMl9TTUMoaXhDR19USEVSTUFMX0NUUkwpOwo+PiAtCQl0bXAgJj0gRFBN X0VWRU5UX1NSQ19NQVNLOwo+PiAtCQl0bXAgfD0gRFBNX0VWRU5UX1NSQyhkcG1fZXZlbnRfc3Jj KTsKPj4gLQkJV1JFRzMyX1NNQyhpeENHX1RIRVJNQUxfQ1RSTCwgdG1wKTsKPj4gLSNlbmRpZgo+ PiAtCj4+IC0JCXRtcCA9IFJSRUczMl9TTUMoaXhHRU5FUkFMX1BXUk1HVCk7Cj4+IC0JCWlmIChw aS0+dGhlcm1hbF9wcm90ZWN0aW9uKQo+PiAtCQkJdG1wICY9Cj4+IH5HRU5FUkFMX1BXUk1HVF9f VEhFUk1BTF9QUk9URUNUSU9OX0RJU19NQVNLOwo+PiAtCQllbHNlCj4+IC0JCQl0bXAgfD0KPj4g R0VORVJBTF9QV1JNR1RfX1RIRVJNQUxfUFJPVEVDVElPTl9ESVNfTUFTSzsKPj4gLQkJV1JFRzMy X1NNQyhpeEdFTkVSQUxfUFdSTUdULCB0bXApOwo+PiAtCX0gZWxzZSB7Cj4+IC0JCXRtcCA9IFJS RUczMl9TTUMoaXhHRU5FUkFMX1BXUk1HVCk7Cj4+IC0JCXRtcCB8PQo+PiBHRU5FUkFMX1BXUk1H VF9fVEhFUk1BTF9QUk9URUNUSU9OX0RJU19NQVNLOwo+PiAtCQlXUkVHMzJfU01DKGl4R0VORVJB TF9QV1JNR1QsIHRtcCk7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9lbmFi bGVfYXV0b190aHJvdHRsZV9zb3VyY2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0J CQkJCSAgIGVudW0KPj4gYW1kZ3B1X2RwbV9hdXRvX3Rocm90dGxlX3NyYyBzb3VyY2UsCj4+IC0J CQkJCSAgIGJvb2wgZW5hYmxlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9 IGNpX2dldF9waShhZGV2KTsKPj4gLQo+PiAtCWlmIChlbmFibGUpIHsKPj4gLQkJaWYgKCEocGkt PmFjdGl2ZV9hdXRvX3Rocm90dGxlX3NvdXJjZXMgJiAoMSA8PCBzb3VyY2UpKSkgewo+PiAtCQkJ cGktPmFjdGl2ZV9hdXRvX3Rocm90dGxlX3NvdXJjZXMgfD0gMSA8PCBzb3VyY2U7Cj4+IC0JCQlj aV9zZXRfZHBtX2V2ZW50X3NvdXJjZXMoYWRldiwgcGktCj4+PiBhY3RpdmVfYXV0b190aHJvdHRs ZV9zb3VyY2VzKTsKPj4gLQkJfQo+PiAtCX0gZWxzZSB7Cj4+IC0JCWlmIChwaS0+YWN0aXZlX2F1 dG9fdGhyb3R0bGVfc291cmNlcyAmICgxIDw8IHNvdXJjZSkpIHsKPj4gLQkJCXBpLT5hY3RpdmVf YXV0b190aHJvdHRsZV9zb3VyY2VzICY9IH4oMSA8PCBzb3VyY2UpOwo+PiAtCQkJY2lfc2V0X2Rw bV9ldmVudF9zb3VyY2VzKGFkZXYsIHBpLQo+Pj4gYWN0aXZlX2F1dG9fdGhyb3R0bGVfc291cmNl cyk7Cj4+IC0JCX0KPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX2VuYWJsZV92 cl9ob3RfZ3Bpb19pbnRlcnJ1cHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+ IC0JaWYgKGFkZXYtPnBtLmRwbS5wbGF0Zm9ybV9jYXBzICYKPj4gQVRPTV9QUF9QTEFURk9STV9D QVBfUkVHVUxBVE9SX0hPVCkKPj4gLQkJYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+ PiBQUFNNQ19NU0dfRW5hYmxlVlJIb3RHUElPSW50ZXJydXB0KTsKPj4gLX0KPj4gLQo+PiAtc3Rh dGljIGludCBjaV91bmZyZWV6ZV9zY2xrX21jbGtfZHBtKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2 KTsKPj4gLQlQUFNNQ19SZXN1bHQgc21jX3Jlc3VsdDsKPj4gLQo+PiAtCWlmICghcGktPm5lZWRf dXBkYXRlX3NtdTdfZHBtX3RhYmxlKQo+PiAtCQlyZXR1cm4gMDsKPj4gLQo+PiAtCWlmICgoIXBp LT5zY2xrX2RwbV9rZXlfZGlzYWJsZWQpICYmCj4+IC0JICAgIChwaS0+bmVlZF91cGRhdGVfc211 N19kcG1fdGFibGUgJgo+PiAoRFBNVEFCTEVfT0RfVVBEQVRFX1NDTEsgfCBEUE1UQUJMRV9VUERB VEVfU0NMSykpKSB7Cj4+IC0JCXNtY19yZXN1bHQgPSBhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21j KGFkZXYsCj4+IFBQU01DX01TR19TQ0xLRFBNX1VuZnJlZXplTGV2ZWwpOwo+PiAtCQlpZiAoc21j X3Jlc3VsdCAhPSBQUFNNQ19SZXN1bHRfT0spCj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9 Cj4+IC0KPj4gLQlpZiAoKCFwaS0+bWNsa19kcG1fa2V5X2Rpc2FibGVkKSAmJgo+PiAtCSAgICAo cGktPm5lZWRfdXBkYXRlX3NtdTdfZHBtX3RhYmxlICYKPj4gRFBNVEFCTEVfT0RfVVBEQVRFX01D TEspKSB7Cj4+IC0JCXNtY19yZXN1bHQgPSBhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYs Cj4+IFBQU01DX01TR19NQ0xLRFBNX1VuZnJlZXplTGV2ZWwpOwo+PiAtCQlpZiAoc21jX3Jlc3Vs dCAhPSBQUFNNQ19SZXN1bHRfT0spCj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0K Pj4gLQlwaS0+bmVlZF91cGRhdGVfc211N19kcG1fdGFibGUgPSAwOwo+PiAtCXJldHVybiAwOwo+ PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2VuYWJsZV9zY2xrX21jbGtfZHBtKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LCBib29sCj4+IGVuYWJsZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lf cG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JUFBTTUNfUmVzdWx0IHNtY19y ZXN1bHQ7Cj4+IC0KPj4gLQlpZiAoZW5hYmxlKSB7Cj4+IC0JCWlmICghcGktPnNjbGtfZHBtX2tl eV9kaXNhYmxlZCkgewo+PiAtCQkJc21jX3Jlc3VsdCA9IGFtZGdwdV9jaV9zZW5kX21zZ190b19z bWMoYWRldiwKPj4gUFBTTUNfTVNHX0RQTV9FbmFibGUpOwo+PiAtCQkJaWYgKHNtY19yZXN1bHQg IT0gUFBTTUNfUmVzdWx0X09LKQo+PiAtCQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCQl9Cj4+IC0K Pj4gLQkJaWYgKCFwaS0+bWNsa19kcG1fa2V5X2Rpc2FibGVkKSB7Cj4+IC0JCQlzbWNfcmVzdWx0 ID0gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0dfTUNMS0RQTV9F bmFibGUpOwo+PiAtCQkJaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQo+PiAtCQkJ CXJldHVybiAtRUlOVkFMOwo+PiAtCj4+IC0JCQlXUkVHMzJfUChtbU1DX1NFUV9DTlRMXzMsCj4+ IE1DX1NFUV9DTlRMXzNfX0NBQ19FTl9NQVNLLAo+PiAtCj4+IAl+TUNfU0VRX0NOVExfM19fQ0FD X0VOX01BU0spOwo+PiAtCj4+IC0JCQlXUkVHMzJfU01DKGl4TENBQ19NQzBfQ05UTCwgMHgwNSk7 Cj4+IC0JCQlXUkVHMzJfU01DKGl4TENBQ19NQzFfQ05UTCwgMHgwNSk7Cj4+IC0JCQlXUkVHMzJf U01DKGl4TENBQ19DUExfQ05UTCwgMHgxMDAwMDUpOwo+PiAtCj4+IC0JCQl1ZGVsYXkoMTApOwo+ PiAtCj4+IC0JCQlXUkVHMzJfU01DKGl4TENBQ19NQzBfQ05UTCwgMHg0MDAwMDUpOwo+PiAtCQkJ V1JFRzMyX1NNQyhpeExDQUNfTUMxX0NOVEwsIDB4NDAwMDA1KTsKPj4gLQkJCVdSRUczMl9TTUMo aXhMQ0FDX0NQTF9DTlRMLCAweDUwMDAwNSk7Cj4+IC0JCX0KPj4gLQl9IGVsc2Ugewo+PiAtCQlp ZiAoIXBpLT5zY2xrX2RwbV9rZXlfZGlzYWJsZWQpIHsKPj4gLQkJCXNtY19yZXN1bHQgPSBhbWRn cHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+IFBQU01DX01TR19EUE1fRGlzYWJsZSk7Cj4+ IC0JCQlpZiAoc21jX3Jlc3VsdCAhPSBQUFNNQ19SZXN1bHRfT0spCj4+IC0JCQkJcmV0dXJuIC1F SU5WQUw7Cj4+IC0JCX0KPj4gLQo+PiAtCQlpZiAoIXBpLT5tY2xrX2RwbV9rZXlfZGlzYWJsZWQp IHsKPj4gLQkJCXNtY19yZXN1bHQgPSBhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+ IFBQU01DX01TR19NQ0xLRFBNX0Rpc2FibGUpOwo+PiAtCQkJaWYgKHNtY19yZXN1bHQgIT0gUFBT TUNfUmVzdWx0X09LKQo+PiAtCQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCQl9Cj4+IC0JfQo+PiAt Cj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfc3RhcnRfZHBtKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZv ICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQlQUFNNQ19SZXN1bHQgc21jX3Jlc3VsdDsKPj4g LQlpbnQgcmV0Owo+PiAtCXUzMiB0bXA7Cj4+IC0KPj4gLQl0bXAgPSBSUkVHMzJfU01DKGl4R0VO RVJBTF9QV1JNR1QpOwo+PiAtCXRtcCB8PSBHRU5FUkFMX1BXUk1HVF9fR0xPQkFMX1BXUk1HVF9F Tl9NQVNLOwo+PiAtCVdSRUczMl9TTUMoaXhHRU5FUkFMX1BXUk1HVCwgdG1wKTsKPj4gLQo+PiAt CXRtcCA9IFJSRUczMl9TTUMoaXhTQ0xLX1BXUk1HVF9DTlRMKTsKPj4gLQl0bXAgfD0gU0NMS19Q V1JNR1RfQ05UTF9fRFlOQU1JQ19QTV9FTl9NQVNLOwo+PiAtCVdSRUczMl9TTUMoaXhTQ0xLX1BX Uk1HVF9DTlRMLCB0bXApOwo+PiAtCj4+IC0JY2lfd3JpdGVfc21jX3NvZnRfcmVnaXN0ZXIoYWRl diwgb2Zmc2V0b2YoU01VN19Tb2Z0UmVnaXN0ZXJzLAo+PiBWb2x0YWdlQ2hhbmdlVGltZW91dCks IDB4MTAwMCk7Cj4+IC0KPj4gLQlXUkVHMzJfUChtbUJJRl9MTkNOVF9SRVNFVCwgMCwKPj4gfkJJ Rl9MTkNOVF9SRVNFVF9fUkVTRVRfTE5DTlRfRU5fTUFTSyk7Cj4+IC0KPj4gLQlzbWNfcmVzdWx0 ID0gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0dfVm9sdGFnZV9D bnRsX0VuYWJsZSk7Cj4+IC0JaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQo+PiAt CQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCXJldCA9IGNpX2VuYWJsZV9zY2xrX21jbGtfZHBt KGFkZXYsIHRydWUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQlp ZiAoIXBpLT5wY2llX2RwbV9rZXlfZGlzYWJsZWQpIHsKPj4gLQkJc21jX3Jlc3VsdCA9IGFtZGdw dV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwKPj4gUFBTTUNfTVNHX1BDSWVEUE1fRW5hYmxlKTsK Pj4gLQkJaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQo+PiAtCQkJcmV0dXJuIC1F SU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBp bnQgY2lfZnJlZXplX3NjbGtfbWNsa19kcG0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAt CVBQU01DX1Jlc3VsdCBzbWNfcmVzdWx0Owo+PiAtCj4+IC0JaWYgKCFwaS0+bmVlZF91cGRhdGVf c211N19kcG1fdGFibGUpCj4+IC0JCXJldHVybiAwOwo+PiAtCj4+IC0JaWYgKCghcGktPnNjbGtf ZHBtX2tleV9kaXNhYmxlZCkgJiYKPj4gLQkgICAgKHBpLT5uZWVkX3VwZGF0ZV9zbXU3X2RwbV90 YWJsZSAmCj4+IChEUE1UQUJMRV9PRF9VUERBVEVfU0NMSyB8IERQTVRBQkxFX1VQREFURV9TQ0xL KSkpIHsKPj4gLQkJc21jX3Jlc3VsdCA9IGFtZGdwdV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwK Pj4gUFBTTUNfTVNHX1NDTEtEUE1fRnJlZXplTGV2ZWwpOwo+PiAtCQlpZiAoc21jX3Jlc3VsdCAh PSBQUFNNQ19SZXN1bHRfT0spCj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4g LQlpZiAoKCFwaS0+bWNsa19kcG1fa2V5X2Rpc2FibGVkKSAmJgo+PiAtCSAgICAocGktPm5lZWRf dXBkYXRlX3NtdTdfZHBtX3RhYmxlICYKPj4gRFBNVEFCTEVfT0RfVVBEQVRFX01DTEspKSB7Cj4+ IC0JCXNtY19yZXN1bHQgPSBhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+IFBQU01D X01TR19NQ0xLRFBNX0ZyZWV6ZUxldmVsKTsKPj4gLQkJaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNf UmVzdWx0X09LKQo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJu IDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfc3RvcF9kcG0oc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0 X3BpKGFkZXYpOwo+PiAtCVBQU01DX1Jlc3VsdCBzbWNfcmVzdWx0Owo+PiAtCWludCByZXQ7Cj4+ IC0JdTMyIHRtcDsKPj4gLQo+PiAtCXRtcCA9IFJSRUczMl9TTUMoaXhHRU5FUkFMX1BXUk1HVCk7 Cj4+IC0JdG1wICY9IH5HRU5FUkFMX1BXUk1HVF9fR0xPQkFMX1BXUk1HVF9FTl9NQVNLOwo+PiAt CVdSRUczMl9TTUMoaXhHRU5FUkFMX1BXUk1HVCwgdG1wKTsKPj4gLQo+PiAtCXRtcCA9IFJSRUcz Ml9TTUMoaXhTQ0xLX1BXUk1HVF9DTlRMKTsKPj4gLQl0bXAgJj0gflNDTEtfUFdSTUdUX0NOVExf X0RZTkFNSUNfUE1fRU5fTUFTSzsKPj4gLQlXUkVHMzJfU01DKGl4U0NMS19QV1JNR1RfQ05UTCwg dG1wKTsKPj4gLQo+PiAtCWlmICghcGktPnBjaWVfZHBtX2tleV9kaXNhYmxlZCkgewo+PiAtCQlz bWNfcmVzdWx0ID0gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0df UENJZURQTV9EaXNhYmxlKTsKPj4gLQkJaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09L KQo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0ID0gY2lfZW5hYmxl X3NjbGtfbWNsa19kcG0oYWRldiwgZmFsc2UpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiBy ZXQ7Cj4+IC0KPj4gLQlzbWNfcmVzdWx0ID0gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2 LAo+PiBQUFNNQ19NU0dfVm9sdGFnZV9DbnRsX0Rpc2FibGUpOwo+PiAtCWlmIChzbWNfcmVzdWx0 ICE9IFBQU01DX1Jlc3VsdF9PSykKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0KPj4gLQlyZXR1 cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfZW5hYmxlX3NjbGtfY29udHJvbChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpCj4+IC17Cj4+IC0JdTMyIHRt cCA9IFJSRUczMl9TTUMoaXhTQ0xLX1BXUk1HVF9DTlRMKTsKPj4gLQo+PiAtCWlmIChlbmFibGUp Cj4+IC0JCXRtcCAmPQo+PiB+U0NMS19QV1JNR1RfQ05UTF9fU0NMS19QV1JNR1RfT0ZGX01BU0s7 Cj4+IC0JZWxzZQo+PiAtCQl0bXAgfD0gU0NMS19QV1JNR1RfQ05UTF9fU0NMS19QV1JNR1RfT0ZG X01BU0s7Cj4+IC0JV1JFRzMyX1NNQyhpeFNDTEtfUFdSTUdUX0NOVEwsIHRtcCk7Cj4+IC19Cj4+ IC0KPj4gLSNpZiAwCj4+IC1zdGF0aWMgaW50IGNpX25vdGlmeV9od19vZl9wb3dlcl9zb3VyY2Uo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCWJvb2wgYWNfcG93ZXIpCj4+IC17 Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXN0 cnVjdCBhbWRncHVfY2FjX3RkcF90YWJsZSAqY2FjX3RkcF90YWJsZSA9Cj4+IC0JCWFkZXYtPnBt LmRwbS5keW5fc3RhdGUuY2FjX3RkcF90YWJsZTsKPj4gLQl1MzIgcG93ZXJfbGltaXQ7Cj4+IC0K Pj4gLQlpZiAoYWNfcG93ZXIpCj4+IC0JCXBvd2VyX2xpbWl0ID0gKHUzMikoY2FjX3RkcF90YWJs ZS0KPj4+IG1heGltdW1fcG93ZXJfZGVsaXZlcnlfbGltaXQgKiAyNTYpOwo+PiAtCWVsc2UKPj4g LQkJcG93ZXJfbGltaXQgPSAodTMyKShjYWNfdGRwX3RhYmxlLT5iYXR0ZXJ5X3Bvd2VyX2xpbWl0 ICoKPj4gMjU2KTsKPj4gLQo+PiAtCWNpX3NldF9wb3dlcl9saW1pdChhZGV2LCBwb3dlcl9saW1p dCk7Cj4+IC0KPj4gLQlpZiAocGktPmNhcHNfYXV0b21hdGljX2RjX3RyYW5zaXRpb24pIHsKPj4g LQkJaWYgKGFjX3Bvd2VyKQo+PiAtCQkJYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+ PiBQUFNNQ19NU0dfUnVubmluZ09uQUMpOwo+PiAtCQllbHNlCj4+IC0JCQlhbWRncHVfY2lfc2Vu ZF9tc2dfdG9fc21jKGFkZXYsCj4+IFBQU01DX01TR19SZW1vdmVfRENfQ2xhbXApOwo+PiAtCX0K Pj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtI2VuZGlmCj4+IC0KPj4gLXN0YXRpYyBQUFNN Q19SZXN1bHQKPj4gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihzdHJ1 Y3QgYW1kZ3B1X2RldmljZQo+PiAqYWRldiwKPj4gLQkJCQkJCSAgICAgIFBQU01DX01zZyBtc2cs IHUzMgo+PiBwYXJhbWV0ZXIpCj4+IC17Cj4+IC0JV1JFRzMyKG1tU01DX01TR19BUkdfMCwgcGFy YW1ldGVyKTsKPj4gLQlyZXR1cm4gYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LCBtc2cp Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgUFBTTUNfUmVzdWx0Cj4+IGFtZGdwdV9jaV9zZW5kX21z Z190b19zbWNfcmV0dXJuX3BhcmFtZXRlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZQo+PiAqYWRldiwK Pj4gLQkJCQkJCQlQUFNNQ19Nc2cgbXNnLAo+PiB1MzIgKnBhcmFtZXRlcikKPj4gLXsKPj4gLQlQ UFNNQ19SZXN1bHQgc21jX3Jlc3VsdDsKPj4gLQo+PiAtCXNtY19yZXN1bHQgPSBhbWRncHVfY2lf c2VuZF9tc2dfdG9fc21jKGFkZXYsIG1zZyk7Cj4+IC0KPj4gLQlpZiAoKHNtY19yZXN1bHQgPT0g UFBTTUNfUmVzdWx0X09LKSAmJiBwYXJhbWV0ZXIpCj4+IC0JCSpwYXJhbWV0ZXIgPSBSUkVHMzIo bW1TTUNfTVNHX0FSR18wKTsKPj4gLQo+PiAtCXJldHVybiBzbWNfcmVzdWx0Owo+PiAtfQo+PiAt Cj4+IC1zdGF0aWMgaW50IGNpX2RwbV9mb3JjZV9zdGF0ZV9zY2xrKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LCB1MzIgbikKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBj aV9nZXRfcGkoYWRldik7Cj4+IC0KPj4gLQlpZiAoIXBpLT5zY2xrX2RwbV9rZXlfZGlzYWJsZWQp IHsKPj4gLQkJUFBTTUNfUmVzdWx0IHNtY19yZXN1bHQgPQo+PiAtCj4+IAlhbWRncHVfY2lfc2Vu ZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGFkZXYsCj4+IFBQU01DX01TR19TQ0xLRFBNX1Nl dEVuYWJsZWRNYXNrLCAxIDw8IG4pOwo+PiAtCQlpZiAoc21jX3Jlc3VsdCAhPSBQUFNNQ19SZXN1 bHRfT0spCj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsK Pj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9kcG1fZm9yY2Vfc3RhdGVfbWNsayhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIG4pCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2lu Zm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCj4+IC0JaWYgKCFwaS0+bWNsa19kcG1fa2V5 X2Rpc2FibGVkKSB7Cj4+IC0JCVBQU01DX1Jlc3VsdCBzbWNfcmVzdWx0ID0KPj4gLQo+PiAJYW1k Z3B1X2NpX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihhZGV2LAo+PiBQUFNNQ19NU0df TUNMS0RQTV9TZXRFbmFibGVkTWFzaywgMSA8PCBuKTsKPj4gLQkJaWYgKHNtY19yZXN1bHQgIT0g UFBTTUNfUmVzdWx0X09LKQo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0J cmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZHBtX2ZvcmNlX3N0YXRlX3Bj aWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHUzMiBuKQo+PiAtewo+PiAtCXN0cnVjdCBj aV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQo+PiAtCWlmICghcGktPnBj aWVfZHBtX2tleV9kaXNhYmxlZCkgewo+PiAtCQlQUFNNQ19SZXN1bHQgc21jX3Jlc3VsdCA9Cj4+ IC0KPj4gCWFtZGdwdV9jaV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwKPj4g UFBTTUNfTVNHX1BDSWVEUE1fRm9yY2VMZXZlbCwgbik7Cj4+IC0JCWlmIChzbWNfcmVzdWx0ICE9 IFBQU01DX1Jlc3VsdF9PSykKPj4gLQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAt CXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3NldF9wb3dlcl9saW1pdChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIG4pCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bv d2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCj4+IC0JaWYgKHBpLT5wb3dlcl9j b250YWlubWVudF9mZWF0dXJlcyAmCj4+IFBPV0VSQ09OVEFJTk1FTlRfRkVBVFVSRV9Qa2dQd3JM aW1pdCkgewo+PiAtCQlQUFNNQ19SZXN1bHQgc21jX3Jlc3VsdCA9Cj4+IC0KPj4gCWFtZGdwdV9j aV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwKPj4gUFBTTUNfTVNHX1BrZ1B3 clNldExpbWl0LCBuKTsKPj4gLQkJaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQo+ PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+ IC0KPj4gLXN0YXRpYyBpbnQgY2lfc2V0X292ZXJkcml2ZV90YXJnZXRfdGRwKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCSAgICAgICB1MzIgdGFyZ2V0X3RkcCkKPj4gLXsKPj4g LQlQUFNNQ19SZXN1bHQgc21jX3Jlc3VsdCA9Cj4+IC0JCWFtZGdwdV9jaV9zZW5kX21zZ190b19z bWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwKPj4gUFBTTUNfTVNHX092ZXJEcml2ZVNldFRhcmdldFRk cCwgdGFyZ2V0X3RkcCk7Cj4+IC0JaWYgKHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQo+ PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtI2lmIDAK Pj4gLXN0YXRpYyBpbnQgY2lfc2V0X2Jvb3Rfc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4+IC17Cj4+IC0JcmV0dXJuIGNpX2VuYWJsZV9zY2xrX21jbGtfZHBtKGFkZXYsIGZhbHNl KTsKPj4gLX0KPj4gLSNlbmRpZgo+PiAtCj4+IC1zdGF0aWMgdTMyIGNpX2dldF9hdmVyYWdlX3Nj bGtfZnJlcShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQl1MzIgc2Nsa19m cmVxOwo+PiAtCVBQU01DX1Jlc3VsdCBzbWNfcmVzdWx0ID0KPj4gLQkJYW1kZ3B1X2NpX3NlbmRf bXNnX3RvX3NtY19yZXR1cm5fcGFyYW1ldGVyKGFkZXYsCj4+IC0KPj4gUFBTTUNfTVNHX0FQSV9H ZXRTY2xrRnJlcXVlbmN5LAo+PiAtCQkJCQkJICAgICZzY2xrX2ZyZXEpOwo+PiAtCWlmIChzbWNf cmVzdWx0ICE9IFBQU01DX1Jlc3VsdF9PSykKPj4gLQkJc2Nsa19mcmVxID0gMDsKPj4gLQo+PiAt CXJldHVybiBzY2xrX2ZyZXE7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB1MzIgY2lfZ2V0X2F2ZXJh Z2VfbWNsa19mcmVxKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCXUzMiBt Y2xrX2ZyZXE7Cj4+IC0JUFBTTUNfUmVzdWx0IHNtY19yZXN1bHQgPQo+PiAtCQlhbWRncHVfY2lf c2VuZF9tc2dfdG9fc21jX3JldHVybl9wYXJhbWV0ZXIoYWRldiwKPj4gLQo+PiBQUFNNQ19NU0df QVBJX0dldE1jbGtGcmVxdWVuY3ksCj4+IC0JCQkJCQkgICAgJm1jbGtfZnJlcSk7Cj4+IC0JaWYg KHNtY19yZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQo+PiAtCQltY2xrX2ZyZXEgPSAwOwo+PiAt Cj4+IC0JcmV0dXJuIG1jbGtfZnJlcTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfZHBt X3N0YXJ0X3NtYyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlpbnQgaTsK Pj4gLQo+PiAtCWFtZGdwdV9jaV9wcm9ncmFtX2p1bXBfb25fc3RhcnQoYWRldik7Cj4+IC0JYW1k Z3B1X2NpX3N0YXJ0X3NtY19jbG9jayhhZGV2KTsKPj4gLQlhbWRncHVfY2lfc3RhcnRfc21jKGFk ZXYpOwo+PiAtCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewo+PiAt CQlpZiAoUlJFRzMyX1NNQyhpeEZJUk1XQVJFX0ZMQUdTKSAmCj4+IEZJUk1XQVJFX0ZMQUdTX19J TlRFUlJVUFRTX0VOQUJMRURfTUFTSykKPj4gLQkJCWJyZWFrOwo+PiAtCX0KPj4gLX0KPj4gLQo+ PiAtc3RhdGljIHZvaWQgY2lfZHBtX3N0b3Bfc21jKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+PiAtewo+PiAtCWFtZGdwdV9jaV9yZXNldF9zbWMoYWRldik7Cj4+IC0JYW1kZ3B1X2NpX3N0 b3Bfc21jX2Nsb2NrKGFkZXYpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3Byb2Nlc3Nf ZmlybXdhcmVfaGVhZGVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCXN0 cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQl1MzIgdG1wOwo+ PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBhbWRncHVfY2lfcmVhZF9zbWNfc3JhbV9kd29y ZChhZGV2LAo+PiAtCQkJCSAgICAgU01VN19GSVJNV0FSRV9IRUFERVJfTE9DQVRJT04gKwo+PiAt CQkJCSAgICAgb2Zmc2V0b2YoU01VN19GaXJtd2FyZV9IZWFkZXIsCj4+IERwbVRhYmxlKSwKPj4g LQkJCQkgICAgICZ0bXAsIHBpLT5zcmFtX2VuZCk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJu IHJldDsKPj4gLQo+PiAtCXBpLT5kcG1fdGFibGVfc3RhcnQgPSB0bXA7Cj4+IC0KPj4gLQlyZXQg PSBhbWRncHVfY2lfcmVhZF9zbWNfc3JhbV9kd29yZChhZGV2LAo+PiAtCQkJCSAgICAgU01VN19G SVJNV0FSRV9IRUFERVJfTE9DQVRJT04gKwo+PiAtCQkJCSAgICAgb2Zmc2V0b2YoU01VN19GaXJt d2FyZV9IZWFkZXIsCj4+IFNvZnRSZWdpc3RlcnMpLAo+PiAtCQkJCSAgICAgJnRtcCwgcGktPnNy YW1fZW5kKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcGktPnNv ZnRfcmVnc19zdGFydCA9IHRtcDsKPj4gLQo+PiAtCXJldCA9IGFtZGdwdV9jaV9yZWFkX3NtY19z cmFtX2R3b3JkKGFkZXYsCj4+IC0JCQkJICAgICBTTVU3X0ZJUk1XQVJFX0hFQURFUl9MT0NBVElP TiArCj4+IC0JCQkJICAgICBvZmZzZXRvZihTTVU3X0Zpcm13YXJlX0hlYWRlciwKPj4gbWNSZWdp c3RlclRhYmxlKSwKPj4gLQkJCQkgICAgICZ0bXAsIHBpLT5zcmFtX2VuZCk7Cj4+IC0JaWYgKHJl dCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXBpLT5tY19yZWdfdGFibGVfc3RhcnQgPSB0 bXA7Cj4+IC0KPj4gLQlyZXQgPSBhbWRncHVfY2lfcmVhZF9zbWNfc3JhbV9kd29yZChhZGV2LAo+ PiAtCQkJCSAgICAgU01VN19GSVJNV0FSRV9IRUFERVJfTE9DQVRJT04gKwo+PiAtCQkJCSAgICAg b2Zmc2V0b2YoU01VN19GaXJtd2FyZV9IZWFkZXIsCj4+IEZhblRhYmxlKSwKPj4gLQkJCQkgICAg ICZ0bXAsIHBpLT5zcmFtX2VuZCk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4g LQo+PiAtCXBpLT5mYW5fdGFibGVfc3RhcnQgPSB0bXA7Cj4+IC0KPj4gLQlyZXQgPSBhbWRncHVf Y2lfcmVhZF9zbWNfc3JhbV9kd29yZChhZGV2LAo+PiAtCQkJCSAgICAgU01VN19GSVJNV0FSRV9I RUFERVJfTE9DQVRJT04gKwo+PiAtCQkJCSAgICAgb2Zmc2V0b2YoU01VN19GaXJtd2FyZV9IZWFk ZXIsCj4+IG1jQXJiRHJhbVRpbWluZ1RhYmxlKSwKPj4gLQkJCQkgICAgICZ0bXAsIHBpLT5zcmFt X2VuZCk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXBpLT5hcmJf dGFibGVfc3RhcnQgPSB0bXA7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3Rh dGljIHZvaWQgY2lfcmVhZF9jbG9ja19yZWdpc3RlcnMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYp Owo+PiAtCj4+IC0JcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX2Z1bmNfY250bCA9Cj4+IC0J CVJSRUczMl9TTUMoaXhDR19TUExMX0ZVTkNfQ05UTCk7Cj4+IC0JcGktPmNsb2NrX3JlZ2lzdGVy cy5jZ19zcGxsX2Z1bmNfY250bF8yID0KPj4gLQkJUlJFRzMyX1NNQyhpeENHX1NQTExfRlVOQ19D TlRMXzIpOwo+PiAtCXBpLT5jbG9ja19yZWdpc3RlcnMuY2dfc3BsbF9mdW5jX2NudGxfMyA9Cj4+ IC0JCVJSRUczMl9TTUMoaXhDR19TUExMX0ZVTkNfQ05UTF8zKTsKPj4gLQlwaS0+Y2xvY2tfcmVn aXN0ZXJzLmNnX3NwbGxfZnVuY19jbnRsXzQgPQo+PiAtCQlSUkVHMzJfU01DKGl4Q0dfU1BMTF9G VU5DX0NOVExfNCk7Cj4+IC0JcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX3NwcmVhZF9zcGVj dHJ1bSA9Cj4+IC0JCVJSRUczMl9TTUMoaXhDR19TUExMX1NQUkVBRF9TUEVDVFJVTSk7Cj4+IC0J cGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bV8yID0KPj4gLQkJUlJF RzMyX1NNQyhpeENHX1NQTExfU1BSRUFEX1NQRUNUUlVNXzIpOwo+PiAtCXBpLT5jbG9ja19yZWdp c3RlcnMuZGxsX2NudGwgPSBSUkVHMzIobW1ETExfQ05UTCk7Cj4+IC0JcGktPmNsb2NrX3JlZ2lz dGVycy5tY2xrX3B3cm1ndF9jbnRsID0KPj4gUlJFRzMyKG1tTUNMS19QV1JNR1RfQ05UTCk7Cj4+ IC0JcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX2FkX2Z1bmNfY250bCA9Cj4+IFJSRUczMihtbU1Q TExfQURfRlVOQ19DTlRMKTsKPj4gLQlwaS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfZHFfZnVuY19j bnRsID0KPj4gUlJFRzMyKG1tTVBMTF9EUV9GVU5DX0NOVEwpOwo+PiAtCXBpLT5jbG9ja19yZWdp c3RlcnMubXBsbF9mdW5jX2NudGwgPSBSUkVHMzIobW1NUExMX0ZVTkNfQ05UTCk7Cj4+IC0JcGkt PmNsb2NrX3JlZ2lzdGVycy5tcGxsX2Z1bmNfY250bF8xID0KPj4gUlJFRzMyKG1tTVBMTF9GVU5D X0NOVExfMSk7Cj4+IC0JcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX2Z1bmNfY250bF8yID0KPj4g UlJFRzMyKG1tTVBMTF9GVU5DX0NOVExfMik7Cj4+IC0JcGktPmNsb2NrX3JlZ2lzdGVycy5tcGxs X3NzMSA9IFJSRUczMihtbU1QTExfU1MxKTsKPj4gLQlwaS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxf c3MyID0gUlJFRzMyKG1tTVBMTF9TUzIpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9p bml0X3NjbGtfdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlzdHJ1Y3Qg Y2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0KPj4gLQlwaS0+bG93X3Nj bGtfaW50ZXJydXB0X3QgPSAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9lbmFibGVf dGhlcm1hbF9wcm90ZWN0aW9uKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCQkg Ym9vbCBlbmFibGUpCj4+IC17Cj4+IC0JdTMyIHRtcCA9IFJSRUczMl9TTUMoaXhHRU5FUkFMX1BX Uk1HVCk7Cj4+IC0KPj4gLQlpZiAoZW5hYmxlKQo+PiAtCQl0bXAgJj0KPj4gfkdFTkVSQUxfUFdS TUdUX19USEVSTUFMX1BST1RFQ1RJT05fRElTX01BU0s7Cj4+IC0JZWxzZQo+PiAtCQl0bXAgfD0K Pj4gR0VORVJBTF9QV1JNR1RfX1RIRVJNQUxfUFJPVEVDVElPTl9ESVNfTUFTSzsKPj4gLQlXUkVH MzJfU01DKGl4R0VORVJBTF9QV1JNR1QsIHRtcCk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lk IGNpX2VuYWJsZV9hY3BpX3Bvd2VyX21hbmFnZW1lbnQoc3RydWN0IGFtZGdwdV9kZXZpY2UKPj4g KmFkZXYpCj4+IC17Cj4+IC0JdTMyIHRtcCA9IFJSRUczMl9TTUMoaXhHRU5FUkFMX1BXUk1HVCk7 Cj4+IC0KPj4gLQl0bXAgfD0gR0VORVJBTF9QV1JNR1RfX1NUQVRJQ19QTV9FTl9NQVNLOwo+PiAt Cj4+IC0JV1JFRzMyX1NNQyhpeEdFTkVSQUxfUFdSTUdULCB0bXApOwo+PiAtfQo+PiAtCj4+IC0j aWYgMAo+PiAtc3RhdGljIGludCBjaV9lbnRlcl91bHBfc3RhdGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4+IC17Cj4+IC0KPj4gLQlXUkVHMzIobW1TTUNfTUVTU0FHRV8wLAo+PiBQUFNN Q19NU0dfU3dpdGNoVG9NaW5pbXVtUG93ZXIpOwo+PiAtCj4+IC0JdWRlbGF5KDI1MDAwKTsKPj4g LQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2V4aXRfdWxwX3N0 YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCWludCBpOwo+PiAtCj4+ IC0JV1JFRzMyKG1tU01DX01FU1NBR0VfMCwKPj4gUFBTTUNfTVNHX1Jlc3VtZUZyb21NaW5pbXVt UG93ZXIpOwo+PiAtCj4+IC0JdWRlbGF5KDcwMDApOwo+PiAtCj4+IC0JZm9yIChpID0gMDsgaSA8 IGFkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7Cj4+IC0JCWlmIChSUkVHMzIobW1TTUNfUkVTUF8w KSA9PSAxKQo+PiAtCQkJYnJlYWs7Cj4+IC0JCXVkZWxheSgxMDAwKTsKPj4gLQl9Cj4+IC0KPj4g LQlyZXR1cm4gMDsKPj4gLX0KPj4gLSNlbmRpZgo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX25vdGlm eV9zbWNfZGlzcGxheV9jaGFuZ2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJ CWJvb2wgaGFzX2Rpc3BsYXkpCj4+IC17Cj4+IC0JUFBTTUNfTXNnIG1zZyA9IGhhc19kaXNwbGF5 ID8gUFBTTUNfTVNHX0hhc0Rpc3BsYXkgOgo+PiBQUFNNQ19NU0dfTm9EaXNwbGF5Owo+PiAtCj4+ IC0JcmV0dXJuIChhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsIG1zZykgPT0KPj4gUFBT TUNfUmVzdWx0X09LKSA/ICAwIDogLUVJTlZBTDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBj aV9lbmFibGVfZHNfbWFzdGVyX3N3aXRjaChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4g LQkJCQkgICAgICBib29sIGVuYWJsZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAq cGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0KPj4gLQlpZiAoZW5hYmxlKSB7Cj4+IC0JCWlmIChw aS0+Y2Fwc19zY2xrX2RzKSB7Cj4+IC0JCQlpZiAoYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhh ZGV2LAo+PiBQUFNNQ19NU0dfTUFTVEVSX0RlZXBTbGVlcF9PTikgIT0gUFBTTUNfUmVzdWx0X09L KQo+PiAtCQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCQl9IGVsc2Ugewo+PiAtCQkJaWYgKGFtZGdw dV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwKPj4gUFBTTUNfTVNHX01BU1RFUl9EZWVwU2xlZXBf T0ZGKSAhPSBQUFNNQ19SZXN1bHRfT0spCj4+IC0JCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JCX0K Pj4gLQl9IGVsc2Ugewo+PiAtCQlpZiAocGktPmNhcHNfc2Nsa19kcykgewo+PiAtCQkJaWYgKGFt ZGdwdV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwKPj4gUFBTTUNfTVNHX01BU1RFUl9EZWVwU2xl ZXBfT0ZGKSAhPSBQUFNNQ19SZXN1bHRfT0spCj4+IC0JCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0J CX0KPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQg Y2lfcHJvZ3JhbV9kaXNwbGF5X2dhcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsK Pj4gLQl1MzIgdG1wID0gUlJFRzMyX1NNQyhpeENHX0RJU1BMQVlfR0FQX0NOVEwpOwo+PiAtCXUz MiBwcmVfdmJpX3RpbWVfaW5fdXM7Cj4+IC0JdTMyIGZyYW1lX3RpbWVfaW5fdXM7Cj4+IC0JdTMy IHJlZl9jbG9jayA9IGFkZXYtPmNsb2NrLnNwbGwucmVmZXJlbmNlX2ZyZXE7Cj4+IC0JdTMyIHJl ZnJlc2hfcmF0ZSA9IGFtZGdwdV9kcG1fZ2V0X3ZyZWZyZXNoKGFkZXYpOwo+PiAtCXUzMiB2Ymxh bmtfdGltZSA9IGFtZGdwdV9kcG1fZ2V0X3ZibGFua190aW1lKGFkZXYpOwo+PiAtCj4+IC0JdG1w ICY9IH5DR19ESVNQTEFZX0dBUF9DTlRMX19ESVNQX0dBUF9NQVNLOwo+PiAtCWlmIChhZGV2LT5w bS5kcG0ubmV3X2FjdGl2ZV9jcnRjX2NvdW50ID4gMCkKPj4gLQkJdG1wIHw9IChBTURHUFVfUE1f RElTUExBWV9HQVBfVkJMQU5LX09SX1dNIDw8Cj4+IENHX0RJU1BMQVlfR0FQX0NOVExfX0RJU1Bf R0FQX19TSElGVCk7Cj4+IC0JZWxzZQo+PiAtCQl0bXAgfD0gKEFNREdQVV9QTV9ESVNQTEFZX0dB UF9JR05PUkUgPDwKPj4gQ0dfRElTUExBWV9HQVBfQ05UTF9fRElTUF9HQVBfX1NISUZUKTsKPj4g LQlXUkVHMzJfU01DKGl4Q0dfRElTUExBWV9HQVBfQ05UTCwgdG1wKTsKPj4gLQo+PiAtCWlmIChy ZWZyZXNoX3JhdGUgPT0gMCkKPj4gLQkJcmVmcmVzaF9yYXRlID0gNjA7Cj4+IC0JaWYgKHZibGFu a190aW1lID09IDB4ZmZmZmZmZmYpCj4+IC0JCXZibGFua190aW1lID0gNTAwOwo+PiAtCWZyYW1l X3RpbWVfaW5fdXMgPSAxMDAwMDAwIC8gcmVmcmVzaF9yYXRlOwo+PiAtCXByZV92YmlfdGltZV9p bl91cyA9Cj4+IC0JCWZyYW1lX3RpbWVfaW5fdXMgLSAyMDAgLSB2YmxhbmtfdGltZTsKPj4gLQl0 bXAgPSBwcmVfdmJpX3RpbWVfaW5fdXMgKiAocmVmX2Nsb2NrIC8gMTAwKTsKPj4gLQo+PiAtCVdS RUczMl9TTUMoaXhDR19ESVNQTEFZX0dBUF9DTlRMMiwgdG1wKTsKPj4gLQljaV93cml0ZV9zbWNf c29mdF9yZWdpc3RlcihhZGV2LCBvZmZzZXRvZihTTVU3X1NvZnRSZWdpc3RlcnMsCj4+IFByZVZC bGFua0dhcCksIDB4NjQpOwo+PiAtCWNpX3dyaXRlX3NtY19zb2Z0X3JlZ2lzdGVyKGFkZXYsIG9m ZnNldG9mKFNNVTdfU29mdFJlZ2lzdGVycywKPj4gVkJsYW5rVGltZW91dCksIChmcmFtZV90aW1l X2luX3VzIC0gcHJlX3ZiaV90aW1lX2luX3VzKSk7Cj4+IC0KPj4gLQo+PiAtCWNpX25vdGlmeV9z bWNfZGlzcGxheV9jaGFuZ2UoYWRldiwgKGFkZXYtCj4+PiBwbS5kcG0ubmV3X2FjdGl2ZV9jcnRj X2NvdW50ID09IDEpKTsKPj4gLQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9lbmFibGVf c3ByZWFkX3NwZWN0cnVtKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sCj4+IGVuYWJs ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7 Cj4+IC0JdTMyIHRtcDsKPj4gLQo+PiAtCWlmIChlbmFibGUpIHsKPj4gLQkJaWYgKHBpLT5jYXBz X3NjbGtfc3Nfc3VwcG9ydCkgewo+PiAtCQkJdG1wID0gUlJFRzMyX1NNQyhpeEdFTkVSQUxfUFdS TUdUKTsKPj4gLQkJCXRtcCB8PQo+PiBHRU5FUkFMX1BXUk1HVF9fRFlOX1NQUkVBRF9TUEVDVFJV TV9FTl9NQVNLOwo+PiAtCQkJV1JFRzMyX1NNQyhpeEdFTkVSQUxfUFdSTUdULCB0bXApOwo+PiAt CQl9Cj4+IC0JfSBlbHNlIHsKPj4gLQkJdG1wID0gUlJFRzMyX1NNQyhpeENHX1NQTExfU1BSRUFE X1NQRUNUUlVNKTsKPj4gLQkJdG1wICY9IH5DR19TUExMX1NQUkVBRF9TUEVDVFJVTV9fU1NFTl9N QVNLOwo+PiAtCQlXUkVHMzJfU01DKGl4Q0dfU1BMTF9TUFJFQURfU1BFQ1RSVU0sIHRtcCk7Cj4+ IC0KPj4gLQkJdG1wID0gUlJFRzMyX1NNQyhpeEdFTkVSQUxfUFdSTUdUKTsKPj4gLQkJdG1wICY9 Cj4+IH5HRU5FUkFMX1BXUk1HVF9fRFlOX1NQUkVBRF9TUEVDVFJVTV9FTl9NQVNLOwo+PiAtCQlX UkVHMzJfU01DKGl4R0VORVJBTF9QV1JNR1QsIHRtcCk7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1z dGF0aWMgdm9pZCBjaV9wcm9ncmFtX3NzdHAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ IC17Cj4+IC0JV1JFRzMyX1NNQyhpeENHX1NUQVRJQ19TQ1JFRU5fUEFSQU1FVEVSLAo+PiAtCSgo Q0lTTEFORFNfU1NUVV9ERkxUIDw8Cj4+IENHX1NUQVRJQ19TQ1JFRU5fUEFSQU1FVEVSX19TVEFU SUNfU0NSRUVOX1RIUkVTSE9MRF9VTklUX19TCj4+IEhJRlQpIHwKPj4gLQkgKENJU0xBTkRTX1NT VF9ERkxUIDw8Cj4+IENHX1NUQVRJQ19TQ1JFRU5fUEFSQU1FVEVSX19TVEFUSUNfU0NSRUVOX1RI UkVTSE9MRF9fU0hJRlQpKSk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX2VuYWJsZV9k aXNwbGF5X2dhcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQl1MzIgdG1w ID0gUlJFRzMyX1NNQyhpeENHX0RJU1BMQVlfR0FQX0NOVEwpOwo+PiAtCj4+IC0JdG1wICY9IH4o Q0dfRElTUExBWV9HQVBfQ05UTF9fRElTUF9HQVBfTUFTSyB8Cj4+IC0KPj4gCUNHX0RJU1BMQVlf R0FQX0NOVExfX0RJU1BfR0FQX01DSEdfTUFTSyk7Cj4+IC0JdG1wIHw9ICgoQU1ER1BVX1BNX0RJ U1BMQVlfR0FQX0lHTk9SRSA8PAo+PiBDR19ESVNQTEFZX0dBUF9DTlRMX19ESVNQX0dBUF9fU0hJ RlQpIHwKPj4gLQkJKEFNREdQVV9QTV9ESVNQTEFZX0dBUF9WQkxBTksgPDwKPj4gQ0dfRElTUExB WV9HQVBfQ05UTF9fRElTUF9HQVBfTUNIR19fU0hJRlQpKTsKPj4gLQo+PiAtCVdSRUczMl9TTUMo aXhDR19ESVNQTEFZX0dBUF9DTlRMLCB0bXApOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBj aV9wcm9ncmFtX3ZjKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCXUzMiB0 bXA7Cj4+IC0KPj4gLQl0bXAgPSBSUkVHMzJfU01DKGl4U0NMS19QV1JNR1RfQ05UTCk7Cj4+IC0J dG1wICY9IH4oU0NMS19QV1JNR1RfQ05UTF9fUkVTRVRfU0NMS19DTlRfTUFTSyB8Cj4+IFNDTEtf UFdSTUdUX0NOVExfX1JFU0VUX0JVU1lfQ05UX01BU0spOwo+PiAtCVdSRUczMl9TTUMoaXhTQ0xL X1BXUk1HVF9DTlRMLCB0bXApOwo+PiAtCj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9W T1RJTkdfMCwKPj4gQ0lTTEFORFNfVlJDX0RGTFQwKTsKPj4gLQlXUkVHMzJfU01DKGl4Q0dfRlJF UV9UUkFOX1ZPVElOR18xLAo+PiBDSVNMQU5EU19WUkNfREZMVDEpOwo+PiAtCVdSRUczMl9TTUMo aXhDR19GUkVRX1RSQU5fVk9USU5HXzIsCj4+IENJU0xBTkRTX1ZSQ19ERkxUMik7Cj4+IC0JV1JF RzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJTkdfMywKPj4gQ0lTTEFORFNfVlJDX0RGTFQzKTsK Pj4gLQlXUkVHMzJfU01DKGl4Q0dfRlJFUV9UUkFOX1ZPVElOR180LAo+PiBDSVNMQU5EU19WUkNf REZMVDQpOwo+PiAtCVdSRUczMl9TTUMoaXhDR19GUkVRX1RSQU5fVk9USU5HXzUsCj4+IENJU0xB TkRTX1ZSQ19ERkxUNSk7Cj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJTkdfNiwK Pj4gQ0lTTEFORFNfVlJDX0RGTFQ2KTsKPj4gLQlXUkVHMzJfU01DKGl4Q0dfRlJFUV9UUkFOX1ZP VElOR183LAo+PiBDSVNMQU5EU19WUkNfREZMVDcpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9p ZCBjaV9jbGVhcl92YyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQl1MzIg dG1wOwo+PiAtCj4+IC0JdG1wID0gUlJFRzMyX1NNQyhpeFNDTEtfUFdSTUdUX0NOVEwpOwo+PiAt CXRtcCB8PSAoU0NMS19QV1JNR1RfQ05UTF9fUkVTRVRfU0NMS19DTlRfTUFTSyB8Cj4+IFNDTEtf UFdSTUdUX0NOVExfX1JFU0VUX0JVU1lfQ05UX01BU0spOwo+PiAtCVdSRUczMl9TTUMoaXhTQ0xL X1BXUk1HVF9DTlRMLCB0bXApOwo+PiAtCj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9W T1RJTkdfMCwgMCk7Cj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJTkdfMSwgMCk7 Cj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJTkdfMiwgMCk7Cj4+IC0JV1JFRzMy X1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJTkdfMywgMCk7Cj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZS RVFfVFJBTl9WT1RJTkdfNCwgMCk7Cj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJ TkdfNSwgMCk7Cj4+IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJTkdfNiwgMCk7Cj4+ IC0JV1JFRzMyX1NNQyhpeENHX0ZSRVFfVFJBTl9WT1RJTkdfNywgMCk7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyBpbnQgY2lfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+PiAtewo+PiAtCWludCBpLCByZXQ7Cj4+IC0KPj4gLQlpZiAoYW1kZ3B1X2NpX2lzX3NtY19y dW5uaW5nKGFkZXYpKSB7Cj4+IC0JCURSTV9JTkZPKCJzbWMgaXMgcnVubmluZywgbm8gbmVlZCB0 byBsb2FkIHNtYwo+PiBmaXJtd2FyZVxuIik7Cj4+IC0JCXJldHVybiAwOwo+PiAtCX0KPj4gLQo+ PiAtCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewo+PiAtCQlpZiAo UlJFRzMyX1NNQyhpeFJDVV9VQ19FVkVOVFMpICYKPj4gUkNVX1VDX0VWRU5UU19fYm9vdF9zZXFf ZG9uZV9NQVNLKQo+PiAtCQkJYnJlYWs7Cj4+IC0JfQo+PiAtCVdSRUczMl9TTUMoaXhTTUNfU1lT Q09OX01JU0NfQ05UTCwgMSk7Cj4+IC0KPj4gLQlhbWRncHVfY2lfc3RvcF9zbWNfY2xvY2soYWRl dik7Cj4+IC0JYW1kZ3B1X2NpX3Jlc2V0X3NtYyhhZGV2KTsKPj4gLQo+PiAtCXJldCA9IGFtZGdw dV9jaV9sb2FkX3NtY191Y29kZShhZGV2LCBTTUNfUkFNX0VORCk7Cj4+IC0KPj4gLQlyZXR1cm4g cmV0Owo+PiAtCj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZ2V0X3N2aTJfdm9sdGFnZV90 YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJCQkgICAgIHN0cnVjdAo+PiBh bWRncHVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICp2b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUsCj4+IC0JCQkJICAgICBzdHJ1Y3QgYXRvbV92b2x0YWdlX3RhYmxlICp2b2x0YWdlX3Rh YmxlKQo+PiAtewo+PiAtCXUzMiBpOwo+PiAtCj4+IC0JaWYgKHZvbHRhZ2VfZGVwZW5kZW5jeV90 YWJsZSA9PSBOVUxMKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCXZvbHRhZ2VfdGFi bGUtPm1hc2tfbG93ID0gMDsKPj4gLQl2b2x0YWdlX3RhYmxlLT5waGFzZV9kZWxheSA9IDA7Cj4+ IC0KPj4gLQl2b2x0YWdlX3RhYmxlLT5jb3VudCA9IHZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZS0+ Y291bnQ7Cj4+IC0JZm9yIChpID0gMDsgaSA8IHZvbHRhZ2VfdGFibGUtPmNvdW50OyBpKyspIHsK Pj4gLQkJdm9sdGFnZV90YWJsZS0+ZW50cmllc1tpXS52YWx1ZSA9Cj4+IHZvbHRhZ2VfZGVwZW5k ZW5jeV90YWJsZS0+ZW50cmllc1tpXS52Owo+PiAtCQl2b2x0YWdlX3RhYmxlLT5lbnRyaWVzW2ld LnNtaW9fbG93ID0gMDsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAt c3RhdGljIGludCBjaV9jb25zdHJ1Y3Rfdm9sdGFnZV90YWJsZXMoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3Bp KGFkZXYpOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlpZiAocGktPnZvbHRhZ2VfY29udHJvbCA9 PSBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xfQllfR1BJTykKPj4gewo+PiAtCQlyZXQgPSBhbWRn cHVfYXRvbWJpb3NfZ2V0X3ZvbHRhZ2VfdGFibGUoYWRldiwKPj4gVk9MVEFHRV9UWVBFX1ZEREMs Cj4+IC0KPj4gCVZPTFRBR0VfT0JKX0dQSU9fTFVULAo+PiAtCQkJCQkJCSZwaS0KPj4+IHZkZGNf dm9sdGFnZV90YWJsZSk7Cj4+IC0JCWlmIChyZXQpCj4+IC0JCQlyZXR1cm4gcmV0Owo+PiAtCX0g ZWxzZSBpZiAocGktPnZvbHRhZ2VfY29udHJvbCA9PQo+PiBDSVNMQU5EU19WT0xUQUdFX0NPTlRS T0xfQllfU1ZJRDIpIHsKPj4gLQkJcmV0ID0gY2lfZ2V0X3N2aTJfdm9sdGFnZV90YWJsZShhZGV2 LAo+PiAtCQkJCQkJJmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9v bl9tY2xrLAo+PiAtCQkJCQkJJnBpLT52ZGRjX3ZvbHRhZ2VfdGFibGUpOwo+PiAtCQlpZiAocmV0 KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAocGktPnZkZGNfdm9sdGFn ZV90YWJsZS5jb3VudCA+IFNNVTdfTUFYX0xFVkVMU19WRERDKQo+PiAtCQljaV90cmltX3ZvbHRh Z2VfdGFibGVfdG9fZml0X3N0YXRlX3RhYmxlKGFkZXYsCj4+IFNNVTdfTUFYX0xFVkVMU19WRERD LAo+PiAtCQkJCQkJCSAmcGktCj4+PiB2ZGRjX3ZvbHRhZ2VfdGFibGUpOwo+PiAtCj4+IC0JaWYg KHBpLT52ZGRjaV9jb250cm9sID09IENJU0xBTkRTX1ZPTFRBR0VfQ09OVFJPTF9CWV9HUElPKSB7 Cj4+IC0JCXJldCA9IGFtZGdwdV9hdG9tYmlvc19nZXRfdm9sdGFnZV90YWJsZShhZGV2LAo+PiBW T0xUQUdFX1RZUEVfVkREQ0ksCj4+IC0KPj4gCVZPTFRBR0VfT0JKX0dQSU9fTFVULAo+PiAtCQkJ CQkJCSZwaS0KPj4+IHZkZGNpX3ZvbHRhZ2VfdGFibGUpOwo+PiAtCQlpZiAocmV0KQo+PiAtCQkJ cmV0dXJuIHJldDsKPj4gLQl9IGVsc2UgaWYgKHBpLT52ZGRjaV9jb250cm9sID09Cj4+IENJU0xB TkRTX1ZPTFRBR0VfQ09OVFJPTF9CWV9TVklEMikgewo+PiAtCQlyZXQgPSBjaV9nZXRfc3ZpMl92 b2x0YWdlX3RhYmxlKGFkZXYsCj4+IC0JCQkJCQkmYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUu dmRkY2lfZGVwZW5kZW5jeV9vbl9tY2xrLAo+PiAtCQkJCQkJJnBpLT52ZGRjaV92b2x0YWdlX3Rh YmxlKTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCj4+IC0J aWYgKHBpLT52ZGRjaV92b2x0YWdlX3RhYmxlLmNvdW50ID4gU01VN19NQVhfTEVWRUxTX1ZERENJ KQo+PiAtCQljaV90cmltX3ZvbHRhZ2VfdGFibGVfdG9fZml0X3N0YXRlX3RhYmxlKGFkZXYsCj4+ IFNNVTdfTUFYX0xFVkVMU19WRERDSSwKPj4gLQkJCQkJCQkgJnBpLQo+Pj4gdmRkY2lfdm9sdGFn ZV90YWJsZSk7Cj4+IC0KPj4gLQlpZiAocGktPm12ZGRfY29udHJvbCA9PSBDSVNMQU5EU19WT0xU QUdFX0NPTlRST0xfQllfR1BJTykgewo+PiAtCQlyZXQgPSBhbWRncHVfYXRvbWJpb3NfZ2V0X3Zv bHRhZ2VfdGFibGUoYWRldiwKPj4gVk9MVEFHRV9UWVBFX01WRERDLAo+PiAtCj4+IAlWT0xUQUdF X09CSl9HUElPX0xVVCwKPj4gLQkJCQkJCQkmcGktCj4+PiBtdmRkX3ZvbHRhZ2VfdGFibGUpOwo+ PiAtCQlpZiAocmV0KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4gLQl9IGVsc2UgaWYgKHBpLT5tdmRk X2NvbnRyb2wgPT0KPj4gQ0lTTEFORFNfVk9MVEFHRV9DT05UUk9MX0JZX1NWSUQyKSB7Cj4+IC0J CXJldCA9IGNpX2dldF9zdmkyX3ZvbHRhZ2VfdGFibGUoYWRldiwKPj4gLQkJCQkJCSZhZGV2LQo+ Pj4gcG0uZHBtLmR5bl9zdGF0ZS5tdmRkX2RlcGVuZGVuY3lfb25fbWNsaywKPj4gLQkJCQkJCSZw aS0+bXZkZF92b2x0YWdlX3RhYmxlKTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7 Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKHBpLT5tdmRkX3ZvbHRhZ2VfdGFibGUuY291bnQgPiBTTVU3 X01BWF9MRVZFTFNfTVZERCkKPj4gLQkJY2lfdHJpbV92b2x0YWdlX3RhYmxlX3RvX2ZpdF9zdGF0 ZV90YWJsZShhZGV2LAo+PiBTTVU3X01BWF9MRVZFTFNfTVZERCwKPj4gLQkJCQkJCQkgJnBpLQo+ Pj4gbXZkZF92b2x0YWdlX3RhYmxlKTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+ IC1zdGF0aWMgdm9pZCBjaV9wb3B1bGF0ZV9zbWNfdm9sdGFnZV90YWJsZShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKPj4gLQkJCQkJICBzdHJ1Y3QgYXRvbV92b2x0YWdlX3RhYmxlX2VudHJ5 Cj4+ICp2b2x0YWdlX3RhYmxlLAo+PiAtCQkJCQkgIFNNVTdfRGlzY3JldGVfVm9sdGFnZUxldmVs Cj4+ICpzbWNfdm9sdGFnZV90YWJsZSkKPj4gLXsKPj4gLQlpbnQgcmV0Owo+PiAtCj4+IC0JcmV0 ID0gY2lfZ2V0X3N0ZF92b2x0YWdlX3ZhbHVlX3NpZGQoYWRldiwgdm9sdGFnZV90YWJsZSwKPj4g LQkJCQkJICAgICZzbWNfdm9sdGFnZV90YWJsZS0KPj4+IFN0ZFZvbHRhZ2VIaVNpZGQsCj4+IC0J CQkJCSAgICAmc21jX3ZvbHRhZ2VfdGFibGUtCj4+PiBTdGRWb2x0YWdlTG9TaWRkKTsKPj4gLQo+ PiAtCWlmIChyZXQpIHsKPj4gLQkJc21jX3ZvbHRhZ2VfdGFibGUtPlN0ZFZvbHRhZ2VIaVNpZGQg PSB2b2x0YWdlX3RhYmxlLQo+Pj4gdmFsdWUgKiBWT0xUQUdFX1NDQUxFOwo+PiAtCQlzbWNfdm9s dGFnZV90YWJsZS0+U3RkVm9sdGFnZUxvU2lkZCA9IHZvbHRhZ2VfdGFibGUtCj4+PiB2YWx1ZSAq IFZPTFRBR0VfU0NBTEU7Cj4+IC0JfQo+PiAtCj4+IC0Jc21jX3ZvbHRhZ2VfdGFibGUtPlZvbHRh Z2UgPSBjcHVfdG9fYmUxNih2b2x0YWdlX3RhYmxlLT52YWx1ZSAqCj4+IFZPTFRBR0VfU0NBTEUp Owo+PiAtCXNtY192b2x0YWdlX3RhYmxlLT5TdGRWb2x0YWdlSGlTaWRkID0KPj4gLQkJY3B1X3Rv X2JlMTYoc21jX3ZvbHRhZ2VfdGFibGUtPlN0ZFZvbHRhZ2VIaVNpZGQpOwo+PiAtCXNtY192b2x0 YWdlX3RhYmxlLT5TdGRWb2x0YWdlTG9TaWRkID0KPj4gLQkJY3B1X3RvX2JlMTYoc21jX3ZvbHRh Z2VfdGFibGUtPlN0ZFZvbHRhZ2VMb1NpZGQpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNp X3BvcHVsYXRlX3NtY192ZGRjX3RhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAt CQkJCSAgICAgIFNNVTdfRGlzY3JldGVfRHBtVGFibGUgKnRhYmxlKQo+PiAtewo+PiAtCXN0cnVj dCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQl1bnNpZ25lZCBpbnQg Y291bnQ7Cj4+IC0KPj4gLQl0YWJsZS0+VmRkY0xldmVsQ291bnQgPSBwaS0+dmRkY192b2x0YWdl X3RhYmxlLmNvdW50Owo+PiAtCWZvciAoY291bnQgPSAwOyBjb3VudCA8IHRhYmxlLT5WZGRjTGV2 ZWxDb3VudDsgY291bnQrKykgewo+PiAtCQljaV9wb3B1bGF0ZV9zbWNfdm9sdGFnZV90YWJsZShh ZGV2LAo+PiAtCQkJCQkgICAgICAmcGktCj4+PiB2ZGRjX3ZvbHRhZ2VfdGFibGUuZW50cmllc1tj b3VudF0sCj4+IC0JCQkJCSAgICAgICZ0YWJsZS0+VmRkY0xldmVsW2NvdW50XSk7Cj4+IC0KPj4g LQkJaWYgKHBpLT52b2x0YWdlX2NvbnRyb2wgPT0KPj4gQ0lTTEFORFNfVk9MVEFHRV9DT05UUk9M X0JZX0dQSU8pCj4+IC0JCQl0YWJsZS0+VmRkY0xldmVsW2NvdW50XS5TbWlvIHw9Cj4+IC0JCQkJ cGktCj4+PiB2ZGRjX3ZvbHRhZ2VfdGFibGUuZW50cmllc1tjb3VudF0uc21pb19sb3c7Cj4+IC0J CWVsc2UKPj4gLQkJCXRhYmxlLT5WZGRjTGV2ZWxbY291bnRdLlNtaW8gPSAwOwo+PiAtCX0KPj4g LQl0YWJsZS0+VmRkY0xldmVsQ291bnQgPSBjcHVfdG9fYmUzMih0YWJsZS0+VmRkY0xldmVsQ291 bnQpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfcG9w dWxhdGVfc21jX3ZkZGNpX3RhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJ CSAgICAgICBTTVU3X0Rpc2NyZXRlX0RwbVRhYmxlICp0YWJsZSkKPj4gLXsKPj4gLQl1bnNpZ25l ZCBpbnQgY291bnQ7Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFk ZXYpOwo+PiAtCj4+IC0JdGFibGUtPlZkZGNpTGV2ZWxDb3VudCA9IHBpLT52ZGRjaV92b2x0YWdl X3RhYmxlLmNvdW50Owo+PiAtCWZvciAoY291bnQgPSAwOyBjb3VudCA8IHRhYmxlLT5WZGRjaUxl dmVsQ291bnQ7IGNvdW50KyspIHsKPj4gLQkJY2lfcG9wdWxhdGVfc21jX3ZvbHRhZ2VfdGFibGUo YWRldiwKPj4gLQkJCQkJICAgICAgJnBpLQo+Pj4gdmRkY2lfdm9sdGFnZV90YWJsZS5lbnRyaWVz W2NvdW50XSwKPj4gLQkJCQkJICAgICAgJnRhYmxlLT5WZGRjaUxldmVsW2NvdW50XSk7Cj4+IC0K Pj4gLQkJaWYgKHBpLT52ZGRjaV9jb250cm9sID09Cj4+IENJU0xBTkRTX1ZPTFRBR0VfQ09OVFJP TF9CWV9HUElPKQo+PiAtCQkJdGFibGUtPlZkZGNpTGV2ZWxbY291bnRdLlNtaW8gfD0KPj4gLQkJ CQlwaS0KPj4+IHZkZGNpX3ZvbHRhZ2VfdGFibGUuZW50cmllc1tjb3VudF0uc21pb19sb3c7Cj4+ IC0JCWVsc2UKPj4gLQkJCXRhYmxlLT5WZGRjaUxldmVsW2NvdW50XS5TbWlvID0gMDsKPj4gLQl9 Cj4+IC0JdGFibGUtPlZkZGNpTGV2ZWxDb3VudCA9IGNwdV90b19iZTMyKHRhYmxlLT5WZGRjaUxl dmVsQ291bnQpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQg Y2lfcG9wdWxhdGVfc21jX212ZGRfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+ IC0JCQkJICAgICAgU01VN19EaXNjcmV0ZV9EcG1UYWJsZSAqdGFibGUpCj4+IC17Cj4+IC0Jc3Ry dWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXVuc2lnbmVkIGlu dCBjb3VudDsKPj4gLQo+PiAtCXRhYmxlLT5NdmRkTGV2ZWxDb3VudCA9IHBpLT5tdmRkX3ZvbHRh Z2VfdGFibGUuY291bnQ7Cj4+IC0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgdGFibGUtPk12ZGRM ZXZlbENvdW50OyBjb3VudCsrKSB7Cj4+IC0JCWNpX3BvcHVsYXRlX3NtY192b2x0YWdlX3RhYmxl KGFkZXYsCj4+IC0JCQkJCSAgICAgICZwaS0KPj4+IG12ZGRfdm9sdGFnZV90YWJsZS5lbnRyaWVz W2NvdW50XSwKPj4gLQkJCQkJICAgICAgJnRhYmxlLT5NdmRkTGV2ZWxbY291bnRdKTsKPj4gLQo+ PiAtCQlpZiAocGktPm12ZGRfY29udHJvbCA9PQo+PiBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xf QllfR1BJTykKPj4gLQkJCXRhYmxlLT5NdmRkTGV2ZWxbY291bnRdLlNtaW8gfD0KPj4gLQkJCQlw aS0KPj4+IG12ZGRfdm9sdGFnZV90YWJsZS5lbnRyaWVzW2NvdW50XS5zbWlvX2xvdzsKPj4gLQkJ ZWxzZQo+PiAtCQkJdGFibGUtPk12ZGRMZXZlbFtjb3VudF0uU21pbyA9IDA7Cj4+IC0JfQo+PiAt CXRhYmxlLT5NdmRkTGV2ZWxDb3VudCA9IGNwdV90b19iZTMyKHRhYmxlLT5NdmRkTGV2ZWxDb3Vu dCk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9wb3B1 bGF0ZV9zbWNfdm9sdGFnZV90YWJsZXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0J CQkJCSAgU01VN19EaXNjcmV0ZV9EcG1UYWJsZSAqdGFibGUpCj4+IC17Cj4+IC0JaW50IHJldDsK Pj4gLQo+PiAtCXJldCA9IGNpX3BvcHVsYXRlX3NtY192ZGRjX3RhYmxlKGFkZXYsIHRhYmxlKTsK Pj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcmV0ID0gY2lfcG9wdWxh dGVfc21jX3ZkZGNpX3RhYmxlKGFkZXYsIHRhYmxlKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1 cm4gcmV0Owo+PiAtCj4+IC0JcmV0ID0gY2lfcG9wdWxhdGVfc21jX212ZGRfdGFibGUoYWRldiwg dGFibGUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQlyZXR1cm4g MDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9wb3B1bGF0ZV9tdmRkX3ZhbHVlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgbWNsaywKPj4gLQkJCQkgIFNNVTdfRGlzY3JldGVf Vm9sdGFnZUxldmVsICp2b2x0YWdlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpw aSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQl1MzIgaSA9IDA7Cj4+IC0KPj4gLQlpZiAocGktPm12 ZGRfY29udHJvbCAhPSBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xfTk9ORSkgewo+PiAtCQlmb3Ig KGkgPSAwOyBpIDwgYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUubXZkZF9kZXBlbmRlbmN5X29u X21jbGsuY291bnQ7IGkrKykgewo+PiAtCQkJaWYgKG1jbGsgPD0gYWRldi0KPj4+IHBtLmRwbS5k eW5fc3RhdGUubXZkZF9kZXBlbmRlbmN5X29uX21jbGsuZW50cmllc1tpXS5jbGspIHsKPj4gLQkJ CQl2b2x0YWdlLT5Wb2x0YWdlID0gcGktCj4+PiBtdmRkX3ZvbHRhZ2VfdGFibGUuZW50cmllc1tp XS52YWx1ZTsKPj4gLQkJCQlicmVhazsKPj4gLQkJCX0KPj4gLQkJfQo+PiAtCj4+IC0JCWlmIChp ID49IGFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLm12ZGRfZGVwZW5kZW5jeV9vbl9tY2xrLmNv dW50KQo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIC1FSU5W QUw7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZ2V0X3N0ZF92b2x0YWdlX3ZhbHVlX3Np ZGQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCSBzdHJ1Y3QgYXRvbV92b2x0 YWdlX3RhYmxlX2VudHJ5Cj4+ICp2b2x0YWdlX3RhYmxlLAo+PiAtCQkJCQkgdTE2ICpzdGRfdm9s dGFnZV9oaV9zaWRkLCB1MTYKPj4gKnN0ZF92b2x0YWdlX2xvX3NpZGQpCj4+IC17Cj4+IC0JdTE2 IHZfaW5kZXgsIGlkeDsKPj4gLQlib29sIHZvbHRhZ2VfZm91bmQgPSBmYWxzZTsKPj4gLQkqc3Rk X3ZvbHRhZ2VfaGlfc2lkZCA9IHZvbHRhZ2VfdGFibGUtPnZhbHVlICogVk9MVEFHRV9TQ0FMRTsK Pj4gLQkqc3RkX3ZvbHRhZ2VfbG9fc2lkZCA9IHZvbHRhZ2VfdGFibGUtPnZhbHVlICogVk9MVEFH RV9TQ0FMRTsKPj4gLQo+PiAtCWlmIChhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5k ZW5jeV9vbl9zY2xrLmVudHJpZXMgPT0KPj4gTlVMTCkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+ IC0KPj4gLQlpZiAoYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5lbnRy aWVzKSB7Cj4+IC0JCWZvciAodl9pbmRleCA9IDA7ICh1MzIpdl9pbmRleCA8IGFkZXYtCj4+PiBw bS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9zY2xrLmNvdW50OyB2X2luZGV4Kysp IHsKPj4gLQkJCWlmICh2b2x0YWdlX3RhYmxlLT52YWx1ZSA9PQo+PiAtCQkJICAgIGFkZXYtCj4+ PiBwbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9zY2xrLmVudHJpZXNbdl9pbmRl eF0udikgewo+PiAtCQkJCXZvbHRhZ2VfZm91bmQgPSB0cnVlOwo+PiAtCQkJCWlmICgodTMyKXZf aW5kZXggPCBhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJsZS5jb3Vu dCkKPj4gLQkJCQkJaWR4ID0gdl9pbmRleDsKPj4gLQkJCQllbHNlCj4+IC0JCQkJCWlkeCA9IGFk ZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLmNhY19sZWFrYWdlX3RhYmxlLmNvdW50IC0gMTsKPj4g LQkJCQkqc3RkX3ZvbHRhZ2VfbG9fc2lkZCA9Cj4+IC0JCQkJCWFkZXYtCj4+PiBwbS5kcG0uZHlu X3N0YXRlLmNhY19sZWFrYWdlX3RhYmxlLmVudHJpZXNbaWR4XS52ZGRjICogVk9MVEFHRV9TQ0FM RTsKPj4gLQkJCQkqc3RkX3ZvbHRhZ2VfaGlfc2lkZCA9Cj4+IC0JCQkJCWFkZXYtCj4+PiBwbS5k cG0uZHluX3N0YXRlLmNhY19sZWFrYWdlX3RhYmxlLmVudHJpZXNbaWR4XS5sZWFrYWdlICoKPj4g Vk9MVEFHRV9TQ0FMRTsKPj4gLQkJCQlicmVhazsKPj4gLQkJCX0KPj4gLQkJfQo+PiAtCj4+IC0J CWlmICghdm9sdGFnZV9mb3VuZCkgewo+PiAtCQkJZm9yICh2X2luZGV4ID0gMDsgKHUzMil2X2lu ZGV4IDwgYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGsu Y291bnQ7IHZfaW5kZXgrKykgewo+PiAtCQkJCWlmICh2b2x0YWdlX3RhYmxlLT52YWx1ZSA8PQo+ PiAtCQkJCSAgICBhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25f c2Nsay5lbnRyaWVzW3ZfaW5kZXhdLnYpIHsKPj4gLQkJCQkJdm9sdGFnZV9mb3VuZCA9IHRydWU7 Cj4+IC0JCQkJCWlmICgodTMyKXZfaW5kZXggPCBhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS5j YWNfbGVha2FnZV90YWJsZS5jb3VudCkKPj4gLQkJCQkJCWlkeCA9IHZfaW5kZXg7Cj4+IC0JCQkJ CWVsc2UKPj4gLQkJCQkJCWlkeCA9IGFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLmNhY19sZWFr YWdlX3RhYmxlLmNvdW50IC0gMTsKPj4gLQkJCQkJKnN0ZF92b2x0YWdlX2xvX3NpZGQgPQo+PiAt CQkJCQkJYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFibGUuZW50cmll c1tpZHhdLnZkZGMgKiBWT0xUQUdFX1NDQUxFOwo+PiAtCQkJCQkqc3RkX3ZvbHRhZ2VfaGlfc2lk ZCA9Cj4+IC0JCQkJCQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJs ZS5lbnRyaWVzW2lkeF0ubGVha2FnZSAqCj4+IFZPTFRBR0VfU0NBTEU7Cj4+IC0JCQkJCWJyZWFr Owo+PiAtCQkJCX0KPj4gLQkJCX0KPj4gLQkJfQo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiAwOwo+ PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9wb3B1bGF0ZV9waGFzZV92YWx1ZV9iYXNlZF9v bl9zY2xrKHN0cnVjdCBhbWRncHVfZGV2aWNlCj4+ICphZGV2LAo+PiAtCQkJCQkJICBjb25zdCBz dHJ1Y3QKPj4gYW1kZ3B1X3BoYXNlX3NoZWRkaW5nX2xpbWl0c190YWJsZSAqbGltaXRzLAo+PiAt CQkJCQkJICB1MzIgc2NsaywKPj4gLQkJCQkJCSAgdTMyICpwaGFzZV9zaGVkZGluZykKPj4gLXsK Pj4gLQl1bnNpZ25lZCBpbnQgaTsKPj4gLQo+PiAtCSpwaGFzZV9zaGVkZGluZyA9IDE7Cj4+IC0K Pj4gLQlmb3IgKGkgPSAwOyBpIDwgbGltaXRzLT5jb3VudDsgaSsrKSB7Cj4+IC0JCWlmIChzY2xr IDwgbGltaXRzLT5lbnRyaWVzW2ldLnNjbGspIHsKPj4gLQkJCSpwaGFzZV9zaGVkZGluZyA9IGk7 Cj4+IC0JCQlicmVhazsKPj4gLQkJfQo+PiAtCX0KPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQg Y2lfcG9wdWxhdGVfcGhhc2VfdmFsdWVfYmFzZWRfb25fbWNsayhzdHJ1Y3QKPj4gYW1kZ3B1X2Rl dmljZSAqYWRldiwKPj4gLQkJCQkJCSAgY29uc3Qgc3RydWN0Cj4+IGFtZGdwdV9waGFzZV9zaGVk ZGluZ19saW1pdHNfdGFibGUgKmxpbWl0cywKPj4gLQkJCQkJCSAgdTMyIG1jbGssCj4+IC0JCQkJ CQkgIHUzMiAqcGhhc2Vfc2hlZGRpbmcpCj4+IC17Cj4+IC0JdW5zaWduZWQgaW50IGk7Cj4+IC0K Pj4gLQkqcGhhc2Vfc2hlZGRpbmcgPSAxOwo+PiAtCj4+IC0JZm9yIChpID0gMDsgaSA8IGxpbWl0 cy0+Y291bnQ7IGkrKykgewo+PiAtCQlpZiAobWNsayA8IGxpbWl0cy0+ZW50cmllc1tpXS5tY2xr KSB7Cj4+IC0JCQkqcGhhc2Vfc2hlZGRpbmcgPSBpOwo+PiAtCQkJYnJlYWs7Cj4+IC0JCX0KPj4g LQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfaW5pdF9hcmJfdGFibGVfaW5kZXgoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8g KnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXUzMiB0bXA7Cj4+IC0JaW50IHJldDsKPj4gLQo+ PiAtCXJldCA9IGFtZGdwdV9jaV9yZWFkX3NtY19zcmFtX2R3b3JkKGFkZXYsIHBpLT5hcmJfdGFi bGVfc3RhcnQsCj4+IC0JCQkJICAgICAmdG1wLCBwaS0+c3JhbV9lbmQpOwo+PiAtCWlmIChyZXQp Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQl0bXAgJj0gMHgwMEZGRkZGRjsKPj4gLQl0bXAg fD0gTUNfQ0dfQVJCX0ZSRVFfRjEgPDwgMjQ7Cj4+IC0KPj4gLQlyZXR1cm4gYW1kZ3B1X2NpX3dy aXRlX3NtY19zcmFtX2R3b3JkKGFkZXYsIHBpLQo+Pj4gYXJiX3RhYmxlX3N0YXJ0LAo+PiAtCQkJ CSAgICAgICB0bXAsIHBpLT5zcmFtX2VuZCk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lf Z2V0X2RlcGVuZGVuY3lfdm9sdF9ieV9jbGsoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+ IC0JCQkJCSBzdHJ1Y3QKPj4gYW1kZ3B1X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAq YWxsb3dlZF9jbG9ja192b2x0YWdlX3RhYmxlLAo+PiAtCQkJCQkgdTMyIGNsb2NrLCB1MzIgKnZv bHRhZ2UpCj4+IC17Cj4+IC0JdTMyIGkgPSAwOwo+PiAtCj4+IC0JaWYgKGFsbG93ZWRfY2xvY2tf dm9sdGFnZV90YWJsZS0+Y291bnQgPT0gMCkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0KPj4g LQlmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZF9jbG9ja192b2x0YWdlX3RhYmxlLT5jb3VudDsgaSsr KSB7Cj4+IC0JCWlmIChhbGxvd2VkX2Nsb2NrX3ZvbHRhZ2VfdGFibGUtPmVudHJpZXNbaV0uY2xr ID49IGNsb2NrKSB7Cj4+IC0JCQkqdm9sdGFnZSA9IGFsbG93ZWRfY2xvY2tfdm9sdGFnZV90YWJs ZS0+ZW50cmllc1tpXS52Owo+PiAtCQkJcmV0dXJuIDA7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4g LQkqdm9sdGFnZSA9IGFsbG93ZWRfY2xvY2tfdm9sdGFnZV90YWJsZS0+ZW50cmllc1tpLTFdLnY7 Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHU4IGNpX2dldF9zbGVl cF9kaXZpZGVyX2lkX2Zyb21fY2xvY2sodTMyIHNjbGssIHUzMiBtaW5fc2Nsa19pbl9zcikKPj4g LXsKPj4gLQl1MzIgaTsKPj4gLQl1MzIgdG1wOwo+PiAtCXUzMiBtaW4gPSBtYXgobWluX3NjbGtf aW5fc3IsCj4+ICh1MzIpQ0lTTEFORF9NSU5JTVVNX0VOR0lORV9DTE9DSyk7Cj4+IC0KPj4gLQlp ZiAoc2NsayA8IG1pbikKPj4gLQkJcmV0dXJuIDA7Cj4+IC0KPj4gLQlmb3IgKGkgPSBDSVNMQU5E X01BWF9ERUVQU0xFRVBfRElWSURFUl9JRDsgIDsgaS0tKSB7Cj4+IC0JCXRtcCA9IHNjbGsgPj4g aTsKPj4gLQkJaWYgKHRtcCA+PSBtaW4gfHwgaSA9PSAwKQo+PiAtCQkJYnJlYWs7Cj4+IC0JfQo+ PiAtCj4+IC0JcmV0dXJuICh1OClpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2luaXRp YWxfc3dpdGNoX2Zyb21fYXJiX2YwX3RvX2YxKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ PiAtewo+PiAtCXJldHVybiBjaV9jb3B5X2FuZF9zd2l0Y2hfYXJiX3NldHMoYWRldiwgTUNfQ0df QVJCX0ZSRVFfRjAsCj4+IE1DX0NHX0FSQl9GUkVRX0YxKTsKPj4gLX0KPj4gLQo+PiAtc3RhdGlj IGludCBjaV9yZXNldF90b19kZWZhdWx0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAt ewo+PiAtCXJldHVybiAoYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19N U0dfUmVzZXRUb0RlZmF1bHRzKSA9PSBQUFNNQ19SZXN1bHRfT0spID8KPj4gLQkJMCA6IC1FSU5W QUw7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZm9yY2Vfc3dpdGNoX3RvX2FyYl9mMChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQl1MzIgdG1wOwo+PiAtCj4+IC0J dG1wID0gKFJSRUczMl9TTUMoaXhTTUNfU0NSQVRDSDkpICYgMHgwMDAwZmYwMCkgPj4gODsKPj4g LQo+PiAtCWlmICh0bXAgPT0gTUNfQ0dfQVJCX0ZSRVFfRjApCj4+IC0JCXJldHVybiAwOwo+PiAt Cj4+IC0JcmV0dXJuIGNpX2NvcHlfYW5kX3N3aXRjaF9hcmJfc2V0cyhhZGV2LCB0bXAsCj4+IE1D X0NHX0FSQl9GUkVRX0YwKTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfcmVnaXN0ZXJf cGF0Y2hpbmdfbWNfYXJiKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCQljb25z dCB1MzIgZW5naW5lX2Nsb2NrLAo+PiAtCQkJCQljb25zdCB1MzIgbWVtb3J5X2Nsb2NrLAo+PiAt CQkJCQl1MzIgKmRyYW1fdGltaW1nMikKPj4gLXsKPj4gLQlib29sIHBhdGNoOwo+PiAtCXUzMiB0 bXAsIHRtcDI7Cj4+IC0KPj4gLQl0bXAgPSBSUkVHMzIobW1NQ19TRVFfTUlTQzApOwo+PiAtCXBh dGNoID0gKCh0bXAgJiAweDAwMDBmMDApID09IDB4MzAwKSA/IHRydWUgOiBmYWxzZTsKPj4gLQo+ PiAtCWlmIChwYXRjaCAmJgo+PiAtCSAgICAoKGFkZXYtPnBkZXYtPmRldmljZSA9PSAweDY3QjAp IHx8Cj4+IC0JICAgICAoYWRldi0+cGRldi0+ZGV2aWNlID09IDB4NjdCMSkpKSB7Cj4+IC0JCWlm ICgobWVtb3J5X2Nsb2NrID4gMTAwMDAwKSAmJiAobWVtb3J5X2Nsb2NrIDw9IDEyNTAwMCkpCj4+ IHsKPj4gLQkJCXRtcDIgPSAoKCgweDMxICogZW5naW5lX2Nsb2NrKSAvIDEyNTAwMCkgLSAxKSAm IDB4ZmY7Cj4+IC0JCQkqZHJhbV90aW1pbWcyICY9IH4weDAwZmYwMDAwOwo+PiAtCQkJKmRyYW1f dGltaW1nMiB8PSB0bXAyIDw8IDE2Owo+PiAtCQl9IGVsc2UgaWYgKChtZW1vcnlfY2xvY2sgPiAx MjUwMDApICYmIChtZW1vcnlfY2xvY2sgPD0KPj4gMTM3NTAwKSkgewo+PiAtCQkJdG1wMiA9ICgo KDB4MzYgKiBlbmdpbmVfY2xvY2spIC8gMTM3NTAwKSAtIDEpICYgMHhmZjsKPj4gLQkJCSpkcmFt X3RpbWltZzIgJj0gfjB4MDBmZjAwMDA7Cj4+IC0JCQkqZHJhbV90aW1pbWcyIHw9IHRtcDIgPDwg MTY7Cj4+IC0JCX0KPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfcG9wdWxhdGVf bWVtb3J5X3RpbWluZ19wYXJhbWV0ZXJzKHN0cnVjdCBhbWRncHVfZGV2aWNlCj4+ICphZGV2LAo+ PiAtCQkJCQkJdTMyIHNjbGssCj4+IC0JCQkJCQl1MzIgbWNsaywKPj4gLQo+PiAJU01VN19EaXNj cmV0ZV9NQ0FyYkRyYW1UaW1pbmdUYWJsZUVudHJ5ICphcmJfcmVncykKPj4gLXsKPj4gLQl1MzIg ZHJhbV90aW1pbmc7Cj4+IC0JdTMyIGRyYW1fdGltaW5nMjsKPj4gLQl1MzIgYnVyc3RfdGltZTsK Pj4gLQo+PiAtCWFtZGdwdV9hdG9tYmlvc19zZXRfZW5naW5lX2RyYW1fdGltaW5ncyhhZGV2LCBz Y2xrLCBtY2xrKTsKPj4gLQo+PiAtCWRyYW1fdGltaW5nICA9IFJSRUczMihtbU1DX0FSQl9EUkFN X1RJTUlORyk7Cj4+IC0JZHJhbV90aW1pbmcyID0gUlJFRzMyKG1tTUNfQVJCX0RSQU1fVElNSU5H Mik7Cj4+IC0JYnVyc3RfdGltZSA9IFJSRUczMihtbU1DX0FSQl9CVVJTVF9USU1FKSAmCj4+IE1D X0FSQl9CVVJTVF9USU1FX19TVEFURTBfTUFTSzsKPj4gLQo+PiAtCWNpX3JlZ2lzdGVyX3BhdGNo aW5nX21jX2FyYihhZGV2LCBzY2xrLCBtY2xrLCAmZHJhbV90aW1pbmcyKTsKPj4gLQo+PiAtCWFy Yl9yZWdzLT5NY0FyYkRyYW1UaW1pbmcgID0gY3B1X3RvX2JlMzIoZHJhbV90aW1pbmcpOwo+PiAt CWFyYl9yZWdzLT5NY0FyYkRyYW1UaW1pbmcyID0gY3B1X3RvX2JlMzIoZHJhbV90aW1pbmcyKTsK Pj4gLQlhcmJfcmVncy0+TWNBcmJCdXJzdFRpbWUgPSAodTgpYnVyc3RfdGltZTsKPj4gLQo+PiAt CXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RvX3Byb2dyYW1fbWVtb3J5 X3RpbWluZ19wYXJhbWV0ZXJzKHN0cnVjdAo+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+ PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQlTTVU3 X0Rpc2NyZXRlX01DQXJiRHJhbVRpbWluZ1RhYmxlIGFyYl9yZWdzOwo+PiAtCXUzMiBpLCBqOwo+ PiAtCWludCByZXQgPSAgMDsKPj4gLQo+PiAtCW1lbXNldCgmYXJiX3JlZ3MsIDAsCj4+IHNpemVv ZihTTVU3X0Rpc2NyZXRlX01DQXJiRHJhbVRpbWluZ1RhYmxlKSk7Cj4+IC0KPj4gLQlmb3IgKGkg PSAwOyBpIDwgcGktPmRwbV90YWJsZS5zY2xrX3RhYmxlLmNvdW50OyBpKyspIHsKPj4gLQkJZm9y IChqID0gMDsgaiA8IHBpLT5kcG1fdGFibGUubWNsa190YWJsZS5jb3VudDsgaisrKSB7Cj4+IC0J CQlyZXQgPSBjaV9wb3B1bGF0ZV9tZW1vcnlfdGltaW5nX3BhcmFtZXRlcnMoYWRldiwKPj4gLQkJ CQkJCQkJICAgcGktCj4+PiBkcG1fdGFibGUuc2Nsa190YWJsZS5kcG1fbGV2ZWxzW2ldLnZhbHVl LAo+PiAtCQkJCQkJCQkgICBwaS0KPj4+IGRwbV90YWJsZS5tY2xrX3RhYmxlLmRwbV9sZXZlbHNb al0udmFsdWUsCj4+IC0KPj4gJmFyYl9yZWdzLmVudHJpZXNbaV1bal0pOwo+PiAtCQkJaWYgKHJl dCkKPj4gLQkJCQlicmVhazsKPj4gLQkJfQo+PiAtCX0KPj4gLQo+PiAtCWlmIChyZXQgPT0gMCkK Pj4gLQkJcmV0ID0gYW1kZ3B1X2NpX2NvcHlfYnl0ZXNfdG9fc21jKGFkZXYsCj4+IC0JCQkJCSAg IHBpLT5hcmJfdGFibGVfc3RhcnQsCj4+IC0JCQkJCSAgICh1OCAqKSZhcmJfcmVncywKPj4gLQo+ PiBzaXplb2YoU01VN19EaXNjcmV0ZV9NQ0FyYkRyYW1UaW1pbmdUYWJsZSksCj4+IC0JCQkJCSAg IHBpLT5zcmFtX2VuZCk7Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAtfQo+PiAtCj4+IC1zdGF0 aWMgaW50IGNpX3Byb2dyYW1fbWVtb3J5X3RpbWluZ19wYXJhbWV0ZXJzKHN0cnVjdCBhbWRncHVf ZGV2aWNlCj4+ICphZGV2KQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNp X2dldF9waShhZGV2KTsKPj4gLQo+PiAtCWlmIChwaS0+bmVlZF91cGRhdGVfc211N19kcG1fdGFi bGUgPT0gMCkKPj4gLQkJcmV0dXJuIDA7Cj4+IC0KPj4gLQlyZXR1cm4gY2lfZG9fcHJvZ3JhbV9t ZW1vcnlfdGltaW5nX3BhcmFtZXRlcnMoYWRldik7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lk IGNpX3BvcHVsYXRlX3NtY19pbml0aWFsX3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAo+PiAtCQkJCQkgIHN0cnVjdCBhbWRncHVfcHMKPj4gKmFtZGdwdV9ib290X3N0YXRlKQo+PiAt ewo+PiAtCXN0cnVjdCBjaV9wcyAqYm9vdF9zdGF0ZSA9IGNpX2dldF9wcyhhbWRncHVfYm9vdF9z dGF0ZSk7Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+ PiAtCXUzMiBsZXZlbCA9IDA7Cj4+IC0KPj4gLQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBhZGV2 LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2Nsay5jb3VudDsgbGV2 ZWwrKykgewo+PiAtCQlpZiAoYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRl bmN5X29uX3NjbGsuZW50cmllc1tsZXZlbF0uY2xrID49Cj4+IC0JCSAgICBib290X3N0YXRlLT5w ZXJmb3JtYW5jZV9sZXZlbHNbMF0uc2Nsaykgewo+PiAtCQkJcGktPnNtY19zdGF0ZV90YWJsZS5H cmFwaGljc0Jvb3RMZXZlbCA9IGxldmVsOwo+PiAtCQkJYnJlYWs7Cj4+IC0JCX0KPj4gLQl9Cj4+ IC0KPj4gLQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0 ZS52ZGRjX2RlcGVuZGVuY3lfb25fbWNsay5jb3VudDsgbGV2ZWwrKykgewo+PiAtCQlpZiAoYWRl di0KPj4+IHBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX21jbGsuZW50cmllc1ts ZXZlbF0uY2xrID49Cj4+IC0JCSAgICBib290X3N0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0u bWNsaykgewo+PiAtCQkJcGktPnNtY19zdGF0ZV90YWJsZS5NZW1vcnlCb290TGV2ZWwgPSBsZXZl bDsKPj4gLQkJCWJyZWFrOwo+PiAtCQl9Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdTMy IGNpX2dldF9kcG1fbGV2ZWxfZW5hYmxlX21hc2tfdmFsdWUoc3RydWN0Cj4+IGNpX3NpbmdsZV9k cG1fdGFibGUgKmRwbV90YWJsZSkKPj4gLXsKPj4gLQl1MzIgaTsKPj4gLQl1MzIgbWFza192YWx1 ZSA9IDA7Cj4+IC0KPj4gLQlmb3IgKGkgPSBkcG1fdGFibGUtPmNvdW50OyBpID4gMDsgaS0tKSB7 Cj4+IC0JCW1hc2tfdmFsdWUgPSBtYXNrX3ZhbHVlIDw8IDE7Cj4+IC0JCWlmIChkcG1fdGFibGUt PmRwbV9sZXZlbHNbaS0xXS5lbmFibGVkKQo+PiAtCQkJbWFza192YWx1ZSB8PSAweDE7Cj4+IC0J CWVsc2UKPj4gLQkJCW1hc2tfdmFsdWUgJj0gMHhGRkZGRkZGRTsKPj4gLQl9Cj4+IC0KPj4gLQly ZXR1cm4gbWFza192YWx1ZTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfcG9wdWxhdGVf c21jX2xpbmtfbGV2ZWwoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJICAgICAg IFNNVTdfRGlzY3JldGVfRHBtVGFibGUgKnRhYmxlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dl cl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQlzdHJ1Y3QgY2lfZHBtX3RhYmxlICpk cG1fdGFibGUgPSAmcGktPmRwbV90YWJsZTsKPj4gLQl1MzIgaTsKPj4gLQo+PiAtCWZvciAoaSA9 IDA7IGkgPCBkcG1fdGFibGUtPnBjaWVfc3BlZWRfdGFibGUuY291bnQ7IGkrKykgewo+PiAtCQl0 YWJsZS0+TGlua0xldmVsW2ldLlBjaWVHZW5TcGVlZCA9Cj4+IC0JCQkodTgpZHBtX3RhYmxlLQo+ Pj4gcGNpZV9zcGVlZF90YWJsZS5kcG1fbGV2ZWxzW2ldLnZhbHVlOwo+PiAtCQl0YWJsZS0+TGlu a0xldmVsW2ldLlBjaWVMYW5lQ291bnQgPQo+PiAtCQkJYW1kZ3B1X2VuY29kZV9wY2lfbGFuZV93 aWR0aChkcG1fdGFibGUtCj4+PiBwY2llX3NwZWVkX3RhYmxlLmRwbV9sZXZlbHNbaV0ucGFyYW0x KTsKPj4gLQkJdGFibGUtPkxpbmtMZXZlbFtpXS5FbmFibGVkRm9yQWN0aXZpdHkgPSAxOwo+PiAt CQl0YWJsZS0+TGlua0xldmVsW2ldLkRvd25UID0gY3B1X3RvX2JlMzIoNSk7Cj4+IC0JCXRhYmxl LT5MaW5rTGV2ZWxbaV0uVXBUID0gY3B1X3RvX2JlMzIoMzApOwo+PiAtCX0KPj4gLQo+PiAtCXBp LT5zbWNfc3RhdGVfdGFibGUuTGlua0xldmVsQ291bnQgPSAodTgpZHBtX3RhYmxlLQo+Pj4gcGNp ZV9zcGVlZF90YWJsZS5jb3VudDsKPj4gLQlwaS0+ZHBtX2xldmVsX2VuYWJsZV9tYXNrLnBjaWVf ZHBtX2VuYWJsZV9tYXNrID0KPj4gLQkJY2lfZ2V0X2RwbV9sZXZlbF9lbmFibGVfbWFza192YWx1 ZSgmZHBtX3RhYmxlLQo+Pj4gcGNpZV9zcGVlZF90YWJsZSk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRp YyBpbnQgY2lfcG9wdWxhdGVfc21jX3V2ZF9sZXZlbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwKPj4gLQkJCQkgICAgIFNNVTdfRGlzY3JldGVfRHBtVGFibGUgKnRhYmxlKQo+PiAtewo+PiAt CXUzMiBjb3VudDsKPj4gLQlzdHJ1Y3QgYXRvbV9jbG9ja19kaXZpZGVycyBkaXZpZGVyczsKPj4g LQlpbnQgcmV0ID0gLUVJTlZBTDsKPj4gLQo+PiAtCXRhYmxlLT5VdmRMZXZlbENvdW50ID0KPj4g LQkJYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUudXZkX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5j eV90YWJsZS5jb3VudDsKPj4gLQo+PiAtCWZvciAoY291bnQgPSAwOyBjb3VudCA8IHRhYmxlLT5V dmRMZXZlbENvdW50OyBjb3VudCsrKSB7Cj4+IC0JCXRhYmxlLT5VdmRMZXZlbFtjb3VudF0uVmNs a0ZyZXF1ZW5jeSA9Cj4+IC0JCQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS51dmRfY2xvY2tf dm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlLmVudHJpZXNbY291bnRdLgo+PiB2Y2xrOwo+PiAtCQl0 YWJsZS0+VXZkTGV2ZWxbY291bnRdLkRjbGtGcmVxdWVuY3kgPQo+PiAtCQkJYWRldi0KPj4+IHBt LmRwbS5keW5fc3RhdGUudXZkX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZS5lbnRyaWVz W2NvdW50XS4KPj4gZGNsazsKPj4gLQkJdGFibGUtPlV2ZExldmVsW2NvdW50XS5NaW5WZGRjID0K Pj4gLQkJCWFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnV2ZF9jbG9ja192b2x0YWdlX2RlcGVu ZGVuY3lfdGFibGUuZW50cmllc1tjb3VudF0uCj4+IHYgKiBWT0xUQUdFX1NDQUxFOwo+PiAtCQl0 YWJsZS0+VXZkTGV2ZWxbY291bnRdLk1pblZkZGNQaGFzZXMgPSAxOwo+PiAtCj4+IC0JCXJldCA9 IGFtZGdwdV9hdG9tYmlvc19nZXRfY2xvY2tfZGl2aWRlcnMoYWRldiwKPj4gLQo+PiBDT01QVVRF X0dQVUNMS19JTlBVVF9GTEFHX0RFRkFVTFRfR1BVQ0xLLAo+PiAtCQkJCQkJCSB0YWJsZS0KPj4+ IFV2ZExldmVsW2NvdW50XS5WY2xrRnJlcXVlbmN5LCBmYWxzZSwgJmRpdmlkZXJzKTsKPj4gLQkJ aWYgKHJldCkKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0KPj4gLQkJdGFibGUtPlV2ZExldmVsW2Nv dW50XS5WY2xrRGl2aWRlciA9Cj4+ICh1OClkaXZpZGVycy5wb3N0X2RpdmlkZXI7Cj4+IC0KPj4g LQkJcmV0ID0gYW1kZ3B1X2F0b21iaW9zX2dldF9jbG9ja19kaXZpZGVycyhhZGV2LAo+PiAtCj4+ IENPTVBVVEVfR1BVQ0xLX0lOUFVUX0ZMQUdfREVGQVVMVF9HUFVDTEssCj4+IC0JCQkJCQkJIHRh YmxlLQo+Pj4gVXZkTGV2ZWxbY291bnRdLkRjbGtGcmVxdWVuY3ksIGZhbHNlLCAmZGl2aWRlcnMp Owo+PiAtCQlpZiAocmV0KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCQl0YWJsZS0+VXZk TGV2ZWxbY291bnRdLkRjbGtEaXZpZGVyID0KPj4gKHU4KWRpdmlkZXJzLnBvc3RfZGl2aWRlcjsK Pj4gLQo+PiAtCQl0YWJsZS0+VXZkTGV2ZWxbY291bnRdLlZjbGtGcmVxdWVuY3kgPQo+PiBjcHVf dG9fYmUzMih0YWJsZS0+VXZkTGV2ZWxbY291bnRdLlZjbGtGcmVxdWVuY3kpOwo+PiAtCQl0YWJs ZS0+VXZkTGV2ZWxbY291bnRdLkRjbGtGcmVxdWVuY3kgPQo+PiBjcHVfdG9fYmUzMih0YWJsZS0+ VXZkTGV2ZWxbY291bnRdLkRjbGtGcmVxdWVuY3kpOwo+PiAtCQl0YWJsZS0+VXZkTGV2ZWxbY291 bnRdLk1pblZkZGMgPSBjcHVfdG9fYmUxNih0YWJsZS0KPj4+IFV2ZExldmVsW2NvdW50XS5NaW5W ZGRjKTsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMg aW50IGNpX3BvcHVsYXRlX3NtY192Y2VfbGV2ZWwoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4+IC0JCQkJICAgICBTTVU3X0Rpc2NyZXRlX0RwbVRhYmxlICp0YWJsZSkKPj4gLXsKPj4gLQl1 MzIgY291bnQ7Cj4+IC0Jc3RydWN0IGF0b21fY2xvY2tfZGl2aWRlcnMgZGl2aWRlcnM7Cj4+IC0J aW50IHJldCA9IC1FSU5WQUw7Cj4+IC0KPj4gLQl0YWJsZS0+VmNlTGV2ZWxDb3VudCA9Cj4+IC0J CWFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnZjZV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUuY291bnQ7Cj4+IC0KPj4gLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCB0YWJsZS0+VmNl TGV2ZWxDb3VudDsgY291bnQrKykgewo+PiAtCQl0YWJsZS0+VmNlTGV2ZWxbY291bnRdLkZyZXF1 ZW5jeSA9Cj4+IC0JCQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52Y2VfY2xvY2tfdm9sdGFn ZV9kZXBlbmRlbmN5X3RhYmxlLmVudHJpZXNbY291bnRdLmUKPj4gdmNsazsKPj4gLQkJdGFibGUt PlZjZUxldmVsW2NvdW50XS5NaW5Wb2x0YWdlID0KPj4gLQkJCSh1MTYpYWRldi0KPj4+IHBtLmRw bS5keW5fc3RhdGUudmNlX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZS5lbnRyaWVzW2Nv dW50XS52Cj4+ICogVk9MVEFHRV9TQ0FMRTsKPj4gLQkJdGFibGUtPlZjZUxldmVsW2NvdW50XS5N aW5QaGFzZXMgPSAxOwo+PiAtCj4+IC0JCXJldCA9IGFtZGdwdV9hdG9tYmlvc19nZXRfY2xvY2tf ZGl2aWRlcnMoYWRldiwKPj4gLQo+PiBDT01QVVRFX0dQVUNMS19JTlBVVF9GTEFHX0RFRkFVTFRf R1BVQ0xLLAo+PiAtCQkJCQkJCSB0YWJsZS0KPj4+IFZjZUxldmVsW2NvdW50XS5GcmVxdWVuY3ks IGZhbHNlLCAmZGl2aWRlcnMpOwo+PiAtCQlpZiAocmV0KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4g LQo+PiAtCQl0YWJsZS0+VmNlTGV2ZWxbY291bnRdLkRpdmlkZXIgPSAodTgpZGl2aWRlcnMucG9z dF9kaXZpZGVyOwo+PiAtCj4+IC0JCXRhYmxlLT5WY2VMZXZlbFtjb3VudF0uRnJlcXVlbmN5ID0g Y3B1X3RvX2JlMzIodGFibGUtCj4+PiBWY2VMZXZlbFtjb3VudF0uRnJlcXVlbmN5KTsKPj4gLQkJ dGFibGUtPlZjZUxldmVsW2NvdW50XS5NaW5Wb2x0YWdlID0gY3B1X3RvX2JlMTYodGFibGUtCj4+ PiBWY2VMZXZlbFtjb3VudF0uTWluVm9sdGFnZSk7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIHJl dDsKPj4gLQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3BvcHVsYXRlX3NtY19hY3BfbGV2 ZWwoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJICAgICBTTVU3X0Rpc2NyZXRl X0RwbVRhYmxlICp0YWJsZSkKPj4gLXsKPj4gLQl1MzIgY291bnQ7Cj4+IC0Jc3RydWN0IGF0b21f Y2xvY2tfZGl2aWRlcnMgZGl2aWRlcnM7Cj4+IC0JaW50IHJldCA9IC1FSU5WQUw7Cj4+IC0KPj4g LQl0YWJsZS0+QWNwTGV2ZWxDb3VudCA9ICh1OCkKPj4gLQkJKGFkZXYtCj4+PiBwbS5kcG0uZHlu X3N0YXRlLmFjcF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUuY291bnQpOwo+PiAtCj4+ IC0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgdGFibGUtPkFjcExldmVsQ291bnQ7IGNvdW50Kysp IHsKPj4gLQkJdGFibGUtPkFjcExldmVsW2NvdW50XS5GcmVxdWVuY3kgPQo+PiAtCQkJYWRldi0K Pj4+IHBtLmRwbS5keW5fc3RhdGUuYWNwX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZS5l bnRyaWVzW2NvdW50XS5jCj4+IGxrOwo+PiAtCQl0YWJsZS0+QWNwTGV2ZWxbY291bnRdLk1pblZv bHRhZ2UgPQo+PiAtCQkJYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUuYWNwX2Nsb2NrX3ZvbHRh Z2VfZGVwZW5kZW5jeV90YWJsZS5lbnRyaWVzW2NvdW50XS52Owo+PiAtCQl0YWJsZS0+QWNwTGV2 ZWxbY291bnRdLk1pblBoYXNlcyA9IDE7Cj4+IC0KPj4gLQkJcmV0ID0gYW1kZ3B1X2F0b21iaW9z X2dldF9jbG9ja19kaXZpZGVycyhhZGV2LAo+PiAtCj4+IENPTVBVVEVfR1BVQ0xLX0lOUFVUX0ZM QUdfREVGQVVMVF9HUFVDTEssCj4+IC0JCQkJCQkJIHRhYmxlLQo+Pj4gQWNwTGV2ZWxbY291bnRd LkZyZXF1ZW5jeSwgZmFsc2UsICZkaXZpZGVycyk7Cj4+IC0JCWlmIChyZXQpCj4+IC0JCQlyZXR1 cm4gcmV0Owo+PiAtCj4+IC0JCXRhYmxlLT5BY3BMZXZlbFtjb3VudF0uRGl2aWRlciA9ICh1OClk aXZpZGVycy5wb3N0X2RpdmlkZXI7Cj4+IC0KPj4gLQkJdGFibGUtPkFjcExldmVsW2NvdW50XS5G cmVxdWVuY3kgPSBjcHVfdG9fYmUzMih0YWJsZS0KPj4+IEFjcExldmVsW2NvdW50XS5GcmVxdWVu Y3kpOwo+PiAtCQl0YWJsZS0+QWNwTGV2ZWxbY291bnRdLk1pblZvbHRhZ2UgPSBjcHVfdG9fYmUx Nih0YWJsZS0KPj4+IEFjcExldmVsW2NvdW50XS5NaW5Wb2x0YWdlKTsKPj4gLQl9Cj4+IC0KPj4g LQlyZXR1cm4gcmV0Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3BvcHVsYXRlX3NtY19z YW11X2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCSAgICAgIFNNVTdf RGlzY3JldGVfRHBtVGFibGUgKnRhYmxlKQo+PiAtewo+PiAtCXUzMiBjb3VudDsKPj4gLQlzdHJ1 Y3QgYXRvbV9jbG9ja19kaXZpZGVycyBkaXZpZGVyczsKPj4gLQlpbnQgcmV0ID0gLUVJTlZBTDsK Pj4gLQo+PiAtCXRhYmxlLT5TYW11TGV2ZWxDb3VudCA9Cj4+IC0JCWFkZXYtCj4+PiBwbS5kcG0u ZHluX3N0YXRlLnNhbXVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlLmNvdW50Owo+PiAt Cj4+IC0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgdGFibGUtPlNhbXVMZXZlbENvdW50OyBjb3Vu dCsrKSB7Cj4+IC0JCXRhYmxlLT5TYW11TGV2ZWxbY291bnRdLkZyZXF1ZW5jeSA9Cj4+IC0JCQlh ZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS5zYW11X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90 YWJsZS5lbnRyaWVzW2NvdW50XQo+PiAuY2xrOwo+PiAtCQl0YWJsZS0+U2FtdUxldmVsW2NvdW50 XS5NaW5Wb2x0YWdlID0KPj4gLQkJCWFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnNhbXVfY2xv Y2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlLmVudHJpZXNbY291bnRdCj4+IC52ICogVk9MVEFH RV9TQ0FMRTsKPj4gLQkJdGFibGUtPlNhbXVMZXZlbFtjb3VudF0uTWluUGhhc2VzID0gMTsKPj4g LQo+PiAtCQlyZXQgPSBhbWRncHVfYXRvbWJpb3NfZ2V0X2Nsb2NrX2RpdmlkZXJzKGFkZXYsCj4+ IC0KPj4gQ09NUFVURV9HUFVDTEtfSU5QVVRfRkxBR19ERUZBVUxUX0dQVUNMSywKPj4gLQkJCQkJ CQkgdGFibGUtCj4+PiBTYW11TGV2ZWxbY291bnRdLkZyZXF1ZW5jeSwgZmFsc2UsICZkaXZpZGVy cyk7Cj4+IC0JCWlmIChyZXQpCj4+IC0JCQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JCXRhYmxlLT5T YW11TGV2ZWxbY291bnRdLkRpdmlkZXIgPSAodTgpZGl2aWRlcnMucG9zdF9kaXZpZGVyOwo+PiAt Cj4+IC0JCXRhYmxlLT5TYW11TGV2ZWxbY291bnRdLkZyZXF1ZW5jeSA9IGNwdV90b19iZTMyKHRh YmxlLQo+Pj4gU2FtdUxldmVsW2NvdW50XS5GcmVxdWVuY3kpOwo+PiAtCQl0YWJsZS0+U2FtdUxl dmVsW2NvdW50XS5NaW5Wb2x0YWdlID0gY3B1X3RvX2JlMTYodGFibGUtCj4+PiBTYW11TGV2ZWxb Y291bnRdLk1pblZvbHRhZ2UpOwo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiByZXQ7Cj4+IC19Cj4+ IC0KPj4gLXN0YXRpYyBpbnQgY2lfY2FsY3VsYXRlX21jbGtfcGFyYW1zKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAo+PiAtCQkJCSAgICB1MzIgbWVtb3J5X2Nsb2NrLAo+PiAtCQkJCSAgICBT TVU3X0Rpc2NyZXRlX01lbW9yeUxldmVsICptY2xrLAo+PiAtCQkJCSAgICBib29sIHN0cm9iZV9t b2RlLAo+PiAtCQkJCSAgICBib29sIGRsbF9zdGF0ZV9vbikKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lf cG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JdTMyICBkbGxfY250bCA9IHBp LT5jbG9ja19yZWdpc3RlcnMuZGxsX2NudGw7Cj4+IC0JdTMyICBtY2xrX3B3cm1ndF9jbnRsID0g cGktPmNsb2NrX3JlZ2lzdGVycy5tY2xrX3B3cm1ndF9jbnRsOwo+PiAtCXUzMiAgbXBsbF9hZF9m dW5jX2NudGwgPSBwaS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfYWRfZnVuY19jbnRsOwo+PiAtCXUz MiAgbXBsbF9kcV9mdW5jX2NudGwgPSBwaS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfZHFfZnVuY19j bnRsOwo+PiAtCXUzMiAgbXBsbF9mdW5jX2NudGwgPSBwaS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxf ZnVuY19jbnRsOwo+PiAtCXUzMiAgbXBsbF9mdW5jX2NudGxfMSA9IHBpLT5jbG9ja19yZWdpc3Rl cnMubXBsbF9mdW5jX2NudGxfMTsKPj4gLQl1MzIgIG1wbGxfZnVuY19jbnRsXzIgPSBwaS0+Y2xv Y2tfcmVnaXN0ZXJzLm1wbGxfZnVuY19jbnRsXzI7Cj4+IC0JdTMyICBtcGxsX3NzMSA9IHBpLT5j bG9ja19yZWdpc3RlcnMubXBsbF9zczE7Cj4+IC0JdTMyICBtcGxsX3NzMiA9IHBpLT5jbG9ja19y ZWdpc3RlcnMubXBsbF9zczI7Cj4+IC0Jc3RydWN0IGF0b21fbXBsbF9wYXJhbSBtcGxsX3BhcmFt Owo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBhbWRncHVfYXRvbWJpb3NfZ2V0X21lbW9y eV9wbGxfZGl2aWRlcnMoYWRldiwKPj4gbWVtb3J5X2Nsb2NrLCBzdHJvYmVfbW9kZSwgJm1wbGxf cGFyYW0pOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQltcGxsX2Z1 bmNfY250bCAmPSB+TVBMTF9GVU5DX0NOVExfX0JXQ1RSTF9NQVNLOwo+PiAtCW1wbGxfZnVuY19j bnRsIHw9IChtcGxsX3BhcmFtLmJ3Y250bCA8PAo+PiBNUExMX0ZVTkNfQ05UTF9fQldDVFJMX19T SElGVCk7Cj4+IC0KPj4gLQltcGxsX2Z1bmNfY250bF8xICY9IH4oTVBMTF9GVU5DX0NOVExfMV9f Q0xLRl9NQVNLIHwKPj4gTVBMTF9GVU5DX0NOVExfMV9fQ0xLRlJBQ19NQVNLIHwKPj4gLQkJCU1Q TExfRlVOQ19DTlRMXzFfX1ZDT19NT0RFX01BU0spOwo+PiAtCW1wbGxfZnVuY19jbnRsXzEgfD0g KG1wbGxfcGFyYW0uY2xrZikgPDwKPj4gTVBMTF9GVU5DX0NOVExfMV9fQ0xLRl9fU0hJRlQgfAo+ PiAtCQkobXBsbF9wYXJhbS5jbGtmcmFjIDw8Cj4+IE1QTExfRlVOQ19DTlRMXzFfX0NMS0ZSQUNf X1NISUZUKSB8Cj4+IC0JCShtcGxsX3BhcmFtLnZjb19tb2RlIDw8Cj4+IE1QTExfRlVOQ19DTlRM XzFfX1ZDT19NT0RFX19TSElGVCk7Cj4+IC0KPj4gLQltcGxsX2FkX2Z1bmNfY250bCAmPQo+PiB+ TVBMTF9BRF9GVU5DX0NOVExfX1lDTEtfUE9TVF9ESVZfTUFTSzsKPj4gLQltcGxsX2FkX2Z1bmNf Y250bCB8PSAobXBsbF9wYXJhbS5wb3N0X2RpdiA8PAo+PiBNUExMX0FEX0ZVTkNfQ05UTF9fWUNM S19QT1NUX0RJVl9fU0hJRlQpOwo+PiAtCj4+IC0JaWYgKGFkZXYtPmdtYy52cmFtX3R5cGUgPT0g QU1ER1BVX1ZSQU1fVFlQRV9HRERSNSkgewo+PiAtCQltcGxsX2RxX2Z1bmNfY250bCAmPQo+PiB+ KE1QTExfRFFfRlVOQ19DTlRMX19ZQ0xLX1NFTF9NQVNLIHwKPj4gLQo+PiAJTVBMTF9BRF9GVU5D X0NOVExfX1lDTEtfUE9TVF9ESVZfTUFTSyk7Cj4+IC0JCW1wbGxfZHFfZnVuY19jbnRsIHw9ICht cGxsX3BhcmFtLnljbGtfc2VsIDw8Cj4+IE1QTExfRFFfRlVOQ19DTlRMX19ZQ0xLX1NFTF9fU0hJ RlQpIHwKPj4gLQkJCQkobXBsbF9wYXJhbS5wb3N0X2RpdiA8PAo+PiBNUExMX0FEX0ZVTkNfQ05U TF9fWUNMS19QT1NUX0RJVl9fU0hJRlQpOwo+PiAtCX0KPj4gLQo+PiAtCWlmIChwaS0+Y2Fwc19t Y2xrX3NzX3N1cHBvcnQpIHsKPj4gLQkJc3RydWN0IGFtZGdwdV9hdG9tX3NzIHNzOwo+PiAtCQl1 MzIgZnJlcV9ub207Cj4+IC0JCXUzMiB0bXA7Cj4+IC0JCXUzMiByZWZlcmVuY2VfY2xvY2sgPSBh ZGV2LT5jbG9jay5tcGxsLnJlZmVyZW5jZV9mcmVxOwo+PiAtCj4+IC0JCWlmIChtcGxsX3BhcmFt LnFkciA9PSAxKQo+PiAtCQkJZnJlcV9ub20gPSBtZW1vcnlfY2xvY2sgKiA0ICogKDEgPDwKPj4g bXBsbF9wYXJhbS5wb3N0X2Rpdik7Cj4+IC0JCWVsc2UKPj4gLQkJCWZyZXFfbm9tID0gbWVtb3J5 X2Nsb2NrICogMiAqICgxIDw8Cj4+IG1wbGxfcGFyYW0ucG9zdF9kaXYpOwo+PiAtCj4+IC0JCXRt cCA9IChmcmVxX25vbSAvIHJlZmVyZW5jZV9jbG9jayk7Cj4+IC0JCXRtcCA9IHRtcCAqIHRtcDsK Pj4gLQkJaWYgKGFtZGdwdV9hdG9tYmlvc19nZXRfYXNpY19zc19pbmZvKGFkZXYsICZzcywKPj4g LQo+PiBBU0lDX0lOVEVSTkFMX01FTU9SWV9TUywgZnJlcV9ub20pKSB7Cj4+IC0JCQl1MzIgY2xr cyA9IHJlZmVyZW5jZV9jbG9jayAqIDUgLyBzcy5yYXRlOwo+PiAtCQkJdTMyIGNsa3YgPSAodTMy KSgoKCgxMzEgKiBzcy5wZXJjZW50YWdlICogc3MucmF0ZSkgLwo+PiAxMDApICogdG1wKSAvIGZy ZXFfbm9tKTsKPj4gLQo+PiAtCQkJbXBsbF9zczEgJj0gfk1QTExfU1MxX19DTEtWX01BU0s7Cj4+ IC0JCQltcGxsX3NzMSB8PSAoY2xrdiA8PCBNUExMX1NTMV9fQ0xLVl9fU0hJRlQpOwo+PiAtCj4+ IC0JCQltcGxsX3NzMiAmPSB+TVBMTF9TUzJfX0NMS1NfTUFTSzsKPj4gLQkJCW1wbGxfc3MyIHw9 IChjbGtzIDw8IE1QTExfU1MyX19DTEtTX19TSElGVCk7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4g LQltY2xrX3B3cm1ndF9jbnRsICY9IH5NQ0xLX1BXUk1HVF9DTlRMX19ETExfU1BFRURfTUFTSzsK Pj4gLQltY2xrX3B3cm1ndF9jbnRsIHw9IChtcGxsX3BhcmFtLmRsbF9zcGVlZCA8PAo+PiBNQ0xL X1BXUk1HVF9DTlRMX19ETExfU1BFRURfX1NISUZUKTsKPj4gLQo+PiAtCWlmIChkbGxfc3RhdGVf b24pCj4+IC0JCW1jbGtfcHdybWd0X2NudGwgfD0KPj4gTUNMS19QV1JNR1RfQ05UTF9fTVJEQ0sw X1BETkJfTUFTSyB8Cj4+IC0JCQlNQ0xLX1BXUk1HVF9DTlRMX19NUkRDSzFfUEROQl9NQVNLOwo+ PiAtCWVsc2UKPj4gLQkJbWNsa19wd3JtZ3RfY250bCAmPQo+PiB+KE1DTEtfUFdSTUdUX0NOVExf X01SRENLMF9QRE5CX01BU0sgfAo+PiAtCQkJTUNMS19QV1JNR1RfQ05UTF9fTVJEQ0sxX1BETkJf TUFTSyk7Cj4+IC0KPj4gLQltY2xrLT5NY2xrRnJlcXVlbmN5ID0gbWVtb3J5X2Nsb2NrOwo+PiAt CW1jbGstPk1wbGxGdW5jQ250bCA9IG1wbGxfZnVuY19jbnRsOwo+PiAtCW1jbGstPk1wbGxGdW5j Q250bF8xID0gbXBsbF9mdW5jX2NudGxfMTsKPj4gLQltY2xrLT5NcGxsRnVuY0NudGxfMiA9IG1w bGxfZnVuY19jbnRsXzI7Cj4+IC0JbWNsay0+TXBsbEFkRnVuY0NudGwgPSBtcGxsX2FkX2Z1bmNf Y250bDsKPj4gLQltY2xrLT5NcGxsRHFGdW5jQ250bCA9IG1wbGxfZHFfZnVuY19jbnRsOwo+PiAt CW1jbGstPk1jbGtQd3JtZ3RDbnRsID0gbWNsa19wd3JtZ3RfY250bDsKPj4gLQltY2xrLT5EbGxD bnRsID0gZGxsX2NudGw7Cj4+IC0JbWNsay0+TXBsbFNzMSA9IG1wbGxfc3MxOwo+PiAtCW1jbGst Pk1wbGxTczIgPSBtcGxsX3NzMjsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1z dGF0aWMgaW50IGNpX3BvcHVsYXRlX3NpbmdsZV9tZW1vcnlfbGV2ZWwoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4+IC0JCQkJCSAgIHUzMiBtZW1vcnlfY2xvY2ssCj4+IC0JCQkJCSAgIFNN VTdfRGlzY3JldGVfTWVtb3J5TGV2ZWwKPj4gKm1lbW9yeV9sZXZlbCkKPj4gLXsKPj4gLQlzdHJ1 Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JaW50IHJldDsKPj4g LQlib29sIGRsbF9zdGF0ZV9vbjsKPj4gLQo+PiAtCWlmIChhZGV2LT5wbS5kcG0uZHluX3N0YXRl LnZkZGNfZGVwZW5kZW5jeV9vbl9tY2xrLmVudHJpZXMpIHsKPj4gLQkJcmV0ID0gY2lfZ2V0X2Rl cGVuZGVuY3lfdm9sdF9ieV9jbGsoYWRldiwKPj4gLQkJCQkJCSAgICAmYWRldi0KPj4+IHBtLmRw bS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX21jbGssCj4+IC0JCQkJCQkgICAgbWVtb3J5 X2Nsb2NrLAo+PiAmbWVtb3J5X2xldmVsLT5NaW5WZGRjKTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJ CXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmRwbS5keW5fc3RhdGUu dmRkY2lfZGVwZW5kZW5jeV9vbl9tY2xrLmVudHJpZXMpIHsKPj4gLQkJcmV0ID0gY2lfZ2V0X2Rl cGVuZGVuY3lfdm9sdF9ieV9jbGsoYWRldiwKPj4gLQkJCQkJCSAgICAmYWRldi0KPj4+IHBtLmRw bS5keW5fc3RhdGUudmRkY2lfZGVwZW5kZW5jeV9vbl9tY2xrLAo+PiAtCQkJCQkJICAgIG1lbW9y eV9jbG9jaywKPj4gJm1lbW9yeV9sZXZlbC0+TWluVmRkY2kpOwo+PiAtCQlpZiAocmV0KQo+PiAt CQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAoYWRldi0+cG0uZHBtLmR5bl9zdGF0 ZS5tdmRkX2RlcGVuZGVuY3lfb25fbWNsay5lbnRyaWVzKSB7Cj4+IC0JCXJldCA9IGNpX2dldF9k ZXBlbmRlbmN5X3ZvbHRfYnlfY2xrKGFkZXYsCj4+IC0JCQkJCQkgICAgJmFkZXYtCj4+PiBwbS5k cG0uZHluX3N0YXRlLm12ZGRfZGVwZW5kZW5jeV9vbl9tY2xrLAo+PiAtCQkJCQkJICAgIG1lbW9y eV9jbG9jaywKPj4gJm1lbW9yeV9sZXZlbC0+TWluTXZkZCk7Cj4+IC0JCWlmIChyZXQpCj4+IC0J CQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQo+PiAtCW1lbW9yeV9sZXZlbC0+TWluVmRkY1BoYXNl cyA9IDE7Cj4+IC0KPj4gLQlpZiAocGktPnZkZGNfcGhhc2Vfc2hlZF9jb250cm9sKQo+PiAtCQlj aV9wb3B1bGF0ZV9waGFzZV92YWx1ZV9iYXNlZF9vbl9tY2xrKGFkZXYsCj4+IC0JCQkJCQkgICAg ICAmYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUucGhhc2Vfc2hlZGRpbmdfbGltaXRzX3RhYmxl LAo+PiAtCQkJCQkJICAgICAgbWVtb3J5X2Nsb2NrLAo+PiAtCQkJCQkJICAgICAgJm1lbW9yeV9s ZXZlbC0KPj4+IE1pblZkZGNQaGFzZXMpOwo+PiAtCj4+IC0JbWVtb3J5X2xldmVsLT5FbmFibGVk Rm9yQWN0aXZpdHkgPSAxOwo+PiAtCW1lbW9yeV9sZXZlbC0+RW5hYmxlZEZvclRocm90dGxlID0g MTsKPj4gLQltZW1vcnlfbGV2ZWwtPlVwSCA9IDA7Cj4+IC0JbWVtb3J5X2xldmVsLT5Eb3duSCA9 IDEwMDsKPj4gLQltZW1vcnlfbGV2ZWwtPlZvbHRhZ2VEb3duSCA9IDA7Cj4+IC0JbWVtb3J5X2xl dmVsLT5BY3Rpdml0eUxldmVsID0gKHUxNilwaS0+bWNsa19hY3Rpdml0eV90YXJnZXQ7Cj4+IC0K Pj4gLQltZW1vcnlfbGV2ZWwtPlN0dXR0ZXJFbmFibGUgPSBmYWxzZTsKPj4gLQltZW1vcnlfbGV2 ZWwtPlN0cm9iZUVuYWJsZSA9IGZhbHNlOwo+PiAtCW1lbW9yeV9sZXZlbC0+RWRjUmVhZEVuYWJs ZSA9IGZhbHNlOwo+PiAtCW1lbW9yeV9sZXZlbC0+RWRjV3JpdGVFbmFibGUgPSBmYWxzZTsKPj4g LQltZW1vcnlfbGV2ZWwtPlJ0dEVuYWJsZSA9IGZhbHNlOwo+PiAtCj4+IC0JbWVtb3J5X2xldmVs LT5EaXNwbGF5V2F0ZXJtYXJrID0KPj4gUFBTTUNfRElTUExBWV9XQVRFUk1BUktfTE9XOwo+PiAt Cj4+IC0JaWYgKHBpLT5tY2xrX3N0dXR0ZXJfbW9kZV90aHJlc2hvbGQgJiYKPj4gLQkgICAgKG1l bW9yeV9jbG9jayA8PSBwaS0+bWNsa19zdHV0dGVyX21vZGVfdGhyZXNob2xkKSAmJgo+PiAtCSAg ICAoIXBpLT51dmRfZW5hYmxlZCkgJiYKPj4gLQkgICAgKFJSRUczMihtbURQR19QSVBFX1NUVVRU RVJfQ09OVFJPTCkgJgo+PiBEUEdfUElQRV9TVFVUVEVSX0NPTlRST0xfX1NUVVRURVJfRU5BQkxF X01BU0spICYmCj4+IC0JICAgIChhZGV2LT5wbS5kcG0ubmV3X2FjdGl2ZV9jcnRjX2NvdW50IDw9 IDIpKQo+PiAtCQltZW1vcnlfbGV2ZWwtPlN0dXR0ZXJFbmFibGUgPSB0cnVlOwo+PiAtCj4+IC0J aWYgKHBpLT5tY2xrX3N0cm9iZV9tb2RlX3RocmVzaG9sZCAmJgo+PiAtCSAgICAobWVtb3J5X2Ns b2NrIDw9IHBpLT5tY2xrX3N0cm9iZV9tb2RlX3RocmVzaG9sZCkpCj4+IC0JCW1lbW9yeV9sZXZl bC0+U3Ryb2JlRW5hYmxlID0gMTsKPj4gLQo+PiAtCWlmIChhZGV2LT5nbWMudnJhbV90eXBlID09 IEFNREdQVV9WUkFNX1RZUEVfR0REUjUpIHsKPj4gLQkJbWVtb3J5X2xldmVsLT5TdHJvYmVSYXRp byA9Cj4+IC0JCQljaV9nZXRfbWNsa19mcmVxdWVuY3lfcmF0aW8obWVtb3J5X2Nsb2NrLAo+PiBt ZW1vcnlfbGV2ZWwtPlN0cm9iZUVuYWJsZSk7Cj4+IC0JCWlmIChwaS0+bWNsa19lZGNfZW5hYmxl X3RocmVzaG9sZCAmJgo+PiAtCQkgICAgKG1lbW9yeV9jbG9jayA+IHBpLT5tY2xrX2VkY19lbmFi bGVfdGhyZXNob2xkKSkKPj4gLQkJCW1lbW9yeV9sZXZlbC0+RWRjUmVhZEVuYWJsZSA9IHRydWU7 Cj4+IC0KPj4gLQkJaWYgKHBpLT5tY2xrX2VkY193cl9lbmFibGVfdGhyZXNob2xkICYmCj4+IC0J CSAgICAobWVtb3J5X2Nsb2NrID4gcGktPm1jbGtfZWRjX3dyX2VuYWJsZV90aHJlc2hvbGQpKQo+ PiAtCQkJbWVtb3J5X2xldmVsLT5FZGNXcml0ZUVuYWJsZSA9IHRydWU7Cj4+IC0KPj4gLQkJaWYg KG1lbW9yeV9sZXZlbC0+U3Ryb2JlRW5hYmxlKSB7Cj4+IC0JCQlpZiAoY2lfZ2V0X21jbGtfZnJl cXVlbmN5X3JhdGlvKG1lbW9yeV9jbG9jaywKPj4gdHJ1ZSkgPj0KPj4gLQkJCSAgICAoKFJSRUcz MihtbU1DX1NFUV9NSVNDNykgPj4gMTYpICYgMHhmKSkKPj4gLQkJCQlkbGxfc3RhdGVfb24gPQo+ PiAoKFJSRUczMihtbU1DX1NFUV9NSVNDNSkgPj4gMSkgJiAweDEpID8gdHJ1ZSA6IGZhbHNlOwo+ PiAtCQkJZWxzZQo+PiAtCQkJCWRsbF9zdGF0ZV9vbiA9Cj4+ICgoUlJFRzMyKG1tTUNfU0VRX01J U0M2KSA+PiAxKSAmIDB4MSkgPyB0cnVlIDogZmFsc2U7Cj4+IC0JCX0gZWxzZSB7Cj4+IC0JCQlk bGxfc3RhdGVfb24gPSBwaS0+ZGxsX2RlZmF1bHRfb247Cj4+IC0JCX0KPj4gLQl9IGVsc2Ugewo+ PiAtCQltZW1vcnlfbGV2ZWwtPlN0cm9iZVJhdGlvID0KPj4gY2lfZ2V0X2RkcjNfbWNsa19mcmVx dWVuY3lfcmF0aW8obWVtb3J5X2Nsb2NrKTsKPj4gLQkJZGxsX3N0YXRlX29uID0gKChSUkVHMzIo bW1NQ19TRVFfTUlTQzUpID4+IDEpICYgMHgxKSA/Cj4+IHRydWUgOiBmYWxzZTsKPj4gLQl9Cj4+ IC0KPj4gLQlyZXQgPSBjaV9jYWxjdWxhdGVfbWNsa19wYXJhbXMoYWRldiwgbWVtb3J5X2Nsb2Nr LCBtZW1vcnlfbGV2ZWwsCj4+IG1lbW9yeV9sZXZlbC0+U3Ryb2JlRW5hYmxlLCBkbGxfc3RhdGVf b24pOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQltZW1vcnlfbGV2 ZWwtPk1pblZkZGMgPSBjcHVfdG9fYmUzMihtZW1vcnlfbGV2ZWwtPk1pblZkZGMKPj4gKiBWT0xU QUdFX1NDQUxFKTsKPj4gLQltZW1vcnlfbGV2ZWwtPk1pblZkZGNQaGFzZXMgPSBjcHVfdG9fYmUz MihtZW1vcnlfbGV2ZWwtCj4+PiBNaW5WZGRjUGhhc2VzKTsKPj4gLQltZW1vcnlfbGV2ZWwtPk1p blZkZGNpID0gY3B1X3RvX2JlMzIobWVtb3J5X2xldmVsLT5NaW5WZGRjaQo+PiAqIFZPTFRBR0Vf U0NBTEUpOwo+PiAtCW1lbW9yeV9sZXZlbC0+TWluTXZkZCA9IGNwdV90b19iZTMyKG1lbW9yeV9s ZXZlbC0KPj4+IE1pbk12ZGQgKiBWT0xUQUdFX1NDQUxFKTsKPj4gLQo+PiAtCW1lbW9yeV9sZXZl bC0+TWNsa0ZyZXF1ZW5jeSA9IGNwdV90b19iZTMyKG1lbW9yeV9sZXZlbC0KPj4+IE1jbGtGcmVx dWVuY3kpOwo+PiAtCW1lbW9yeV9sZXZlbC0+QWN0aXZpdHlMZXZlbCA9IGNwdV90b19iZTE2KG1l bW9yeV9sZXZlbC0KPj4+IEFjdGl2aXR5TGV2ZWwpOwo+PiAtCW1lbW9yeV9sZXZlbC0+TXBsbEZ1 bmNDbnRsID0gY3B1X3RvX2JlMzIobWVtb3J5X2xldmVsLQo+Pj4gTXBsbEZ1bmNDbnRsKTsKPj4g LQltZW1vcnlfbGV2ZWwtPk1wbGxGdW5jQ250bF8xID0gY3B1X3RvX2JlMzIobWVtb3J5X2xldmVs LQo+Pj4gTXBsbEZ1bmNDbnRsXzEpOwo+PiAtCW1lbW9yeV9sZXZlbC0+TXBsbEZ1bmNDbnRsXzIg PSBjcHVfdG9fYmUzMihtZW1vcnlfbGV2ZWwtCj4+PiBNcGxsRnVuY0NudGxfMik7Cj4+IC0JbWVt b3J5X2xldmVsLT5NcGxsQWRGdW5jQ250bCA9IGNwdV90b19iZTMyKG1lbW9yeV9sZXZlbC0KPj4+ IE1wbGxBZEZ1bmNDbnRsKTsKPj4gLQltZW1vcnlfbGV2ZWwtPk1wbGxEcUZ1bmNDbnRsID0gY3B1 X3RvX2JlMzIobWVtb3J5X2xldmVsLQo+Pj4gTXBsbERxRnVuY0NudGwpOwo+PiAtCW1lbW9yeV9s ZXZlbC0+TWNsa1B3cm1ndENudGwgPSBjcHVfdG9fYmUzMihtZW1vcnlfbGV2ZWwtCj4+PiBNY2xr UHdybWd0Q250bCk7Cj4+IC0JbWVtb3J5X2xldmVsLT5EbGxDbnRsID0gY3B1X3RvX2JlMzIobWVt b3J5X2xldmVsLT5EbGxDbnRsKTsKPj4gLQltZW1vcnlfbGV2ZWwtPk1wbGxTczEgPSBjcHVfdG9f YmUzMihtZW1vcnlfbGV2ZWwtPk1wbGxTczEpOwo+PiAtCW1lbW9yeV9sZXZlbC0+TXBsbFNzMiA9 IGNwdV90b19iZTMyKG1lbW9yeV9sZXZlbC0+TXBsbFNzMik7Cj4+IC0KPj4gLQlyZXR1cm4gMDsK Pj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9wb3B1bGF0ZV9zbWNfYWNwaV9sZXZlbChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJCQkgICAgICBTTVU3X0Rpc2NyZXRlX0RwbVRh YmxlICp0YWJsZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRf cGkoYWRldik7Cj4+IC0Jc3RydWN0IGF0b21fY2xvY2tfZGl2aWRlcnMgZGl2aWRlcnM7Cj4+IC0J U01VN19EaXNjcmV0ZV9Wb2x0YWdlTGV2ZWwgdm9sdGFnZV9sZXZlbDsKPj4gLQl1MzIgc3BsbF9m dW5jX2NudGwgPSBwaS0+Y2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19jbnRsOwo+PiAtCXUz MiBzcGxsX2Z1bmNfY250bF8yID0gcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX2Z1bmNfY250 bF8yOwo+PiAtCXUzMiBkbGxfY250bCA9IHBpLT5jbG9ja19yZWdpc3RlcnMuZGxsX2NudGw7Cj4+ IC0JdTMyIG1jbGtfcHdybWd0X2NudGwgPSBwaS0+Y2xvY2tfcmVnaXN0ZXJzLm1jbGtfcHdybWd0 X2NudGw7Cj4+IC0JaW50IHJldDsKPj4gLQo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuRmxhZ3MgJj0g flBQU01DX1NXU1RBVEVfRkxBR19EQzsKPj4gLQo+PiAtCWlmIChwaS0+YWNwaV92ZGRjKQo+PiAt CQl0YWJsZS0+QUNQSUxldmVsLk1pblZkZGMgPSBjcHVfdG9fYmUzMihwaS0+YWNwaV92ZGRjICoK Pj4gVk9MVEFHRV9TQ0FMRSk7Cj4+IC0JZWxzZQo+PiAtCQl0YWJsZS0+QUNQSUxldmVsLk1pblZk ZGMgPSBjcHVfdG9fYmUzMihwaS0KPj4+IG1pbl92ZGRjX2luX3BwX3RhYmxlICogVk9MVEFHRV9T Q0FMRSk7Cj4+IC0KPj4gLQl0YWJsZS0+QUNQSUxldmVsLk1pblZkZGNQaGFzZXMgPSBwaS0+dmRk Y19waGFzZV9zaGVkX2NvbnRyb2wgPwo+PiAwIDogMTsKPj4gLQo+PiAtCXRhYmxlLT5BQ1BJTGV2 ZWwuU2Nsa0ZyZXF1ZW5jeSA9IGFkZXYtPmNsb2NrLnNwbGwucmVmZXJlbmNlX2ZyZXE7Cj4+IC0K Pj4gLQlyZXQgPSBhbWRncHVfYXRvbWJpb3NfZ2V0X2Nsb2NrX2RpdmlkZXJzKGFkZXYsCj4+IC0K Pj4gQ09NUFVURV9HUFVDTEtfSU5QVVRfRkxBR19TQ0xLLAo+PiAtCQkJCQkJIHRhYmxlLQo+Pj4g QUNQSUxldmVsLlNjbGtGcmVxdWVuY3ksIGZhbHNlLCAmZGl2aWRlcnMpOwo+PiAtCWlmIChyZXQp Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQl0YWJsZS0+QUNQSUxldmVsLlNjbGtEaWQgPSAo dTgpZGl2aWRlcnMucG9zdF9kaXZpZGVyOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuRGlzcGxheVdh dGVybWFyayA9Cj4+IFBQU01DX0RJU1BMQVlfV0FURVJNQVJLX0xPVzsKPj4gLQl0YWJsZS0+QUNQ SUxldmVsLkRlZXBTbGVlcERpdklkID0gMDsKPj4gLQo+PiAtCXNwbGxfZnVuY19jbnRsICY9IH5D R19TUExMX0ZVTkNfQ05UTF9fU1BMTF9QV1JPTl9NQVNLOwo+PiAtCXNwbGxfZnVuY19jbnRsIHw9 IENHX1NQTExfRlVOQ19DTlRMX19TUExMX1JFU0VUX01BU0s7Cj4+IC0KPj4gLQlzcGxsX2Z1bmNf Y250bF8yICY9Cj4+IH5DR19TUExMX0ZVTkNfQ05UTF8yX19TQ0xLX01VWF9TRUxfTUFTSzsKPj4g LQlzcGxsX2Z1bmNfY250bF8yIHw9ICg0IDw8Cj4+IENHX1NQTExfRlVOQ19DTlRMXzJfX1NDTEtf TVVYX1NFTF9fU0hJRlQpOwo+PiAtCj4+IC0JdGFibGUtPkFDUElMZXZlbC5DZ1NwbGxGdW5jQ250 bCA9IHNwbGxfZnVuY19jbnRsOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuQ2dTcGxsRnVuY0NudGwy ID0gc3BsbF9mdW5jX2NudGxfMjsKPj4gLQl0YWJsZS0+QUNQSUxldmVsLkNnU3BsbEZ1bmNDbnRs MyA9IHBpLQo+Pj4gY2xvY2tfcmVnaXN0ZXJzLmNnX3NwbGxfZnVuY19jbnRsXzM7Cj4+IC0JdGFi bGUtPkFDUElMZXZlbC5DZ1NwbGxGdW5jQ250bDQgPSBwaS0KPj4+IGNsb2NrX3JlZ2lzdGVycy5j Z19zcGxsX2Z1bmNfY250bF80Owo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuU3BsbFNwcmVhZFNwZWN0 cnVtID0gcGktCj4+PiBjbG9ja19yZWdpc3RlcnMuY2dfc3BsbF9zcHJlYWRfc3BlY3RydW07Cj4+ IC0JdGFibGUtPkFDUElMZXZlbC5TcGxsU3ByZWFkU3BlY3RydW0yID0gcGktCj4+PiBjbG9ja19y ZWdpc3RlcnMuY2dfc3BsbF9zcHJlYWRfc3BlY3RydW1fMjsKPj4gLQl0YWJsZS0+QUNQSUxldmVs LkNjUHdyRHluUm0gPSAwOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuQ2NQd3JEeW5SbTEgPSAwOwo+ PiAtCj4+IC0JdGFibGUtPkFDUElMZXZlbC5GbGFncyA9IGNwdV90b19iZTMyKHRhYmxlLT5BQ1BJ TGV2ZWwuRmxhZ3MpOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuTWluVmRkY1BoYXNlcyA9IGNwdV90 b19iZTMyKHRhYmxlLQo+Pj4gQUNQSUxldmVsLk1pblZkZGNQaGFzZXMpOwo+PiAtCXRhYmxlLT5B Q1BJTGV2ZWwuU2Nsa0ZyZXF1ZW5jeSA9IGNwdV90b19iZTMyKHRhYmxlLQo+Pj4gQUNQSUxldmVs LlNjbGtGcmVxdWVuY3kpOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuQ2dTcGxsRnVuY0NudGwgPSBj cHVfdG9fYmUzMih0YWJsZS0KPj4+IEFDUElMZXZlbC5DZ1NwbGxGdW5jQ250bCk7Cj4+IC0JdGFi bGUtPkFDUElMZXZlbC5DZ1NwbGxGdW5jQ250bDIgPSBjcHVfdG9fYmUzMih0YWJsZS0KPj4+IEFD UElMZXZlbC5DZ1NwbGxGdW5jQ250bDIpOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuQ2dTcGxsRnVu Y0NudGwzID0gY3B1X3RvX2JlMzIodGFibGUtCj4+PiBBQ1BJTGV2ZWwuQ2dTcGxsRnVuY0NudGwz KTsKPj4gLQl0YWJsZS0+QUNQSUxldmVsLkNnU3BsbEZ1bmNDbnRsNCA9IGNwdV90b19iZTMyKHRh YmxlLQo+Pj4gQUNQSUxldmVsLkNnU3BsbEZ1bmNDbnRsNCk7Cj4+IC0JdGFibGUtPkFDUElMZXZl bC5TcGxsU3ByZWFkU3BlY3RydW0gPSBjcHVfdG9fYmUzMih0YWJsZS0KPj4+IEFDUElMZXZlbC5T cGxsU3ByZWFkU3BlY3RydW0pOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuU3BsbFNwcmVhZFNwZWN0 cnVtMiA9IGNwdV90b19iZTMyKHRhYmxlLQo+Pj4gQUNQSUxldmVsLlNwbGxTcHJlYWRTcGVjdHJ1 bTIpOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuQ2NQd3JEeW5SbSA9IGNwdV90b19iZTMyKHRhYmxl LQo+Pj4gQUNQSUxldmVsLkNjUHdyRHluUm0pOwo+PiAtCXRhYmxlLT5BQ1BJTGV2ZWwuQ2NQd3JE eW5SbTEgPSBjcHVfdG9fYmUzMih0YWJsZS0KPj4+IEFDUElMZXZlbC5DY1B3ckR5blJtMSk7Cj4+ IC0KPj4gLQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLk1pblZkZGMgPSB0YWJsZS0+QUNQSUxldmVs Lk1pblZkZGM7Cj4+IC0JdGFibGUtPk1lbW9yeUFDUElMZXZlbC5NaW5WZGRjUGhhc2VzID0gdGFi bGUtCj4+PiBBQ1BJTGV2ZWwuTWluVmRkY1BoYXNlczsKPj4gLQo+PiAtCWlmIChwaS0+dmRkY2lf Y29udHJvbCAhPSBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xfTk9ORSkgewo+PiAtCQlpZiAocGkt PmFjcGlfdmRkY2kpCj4+IC0JCQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLk1pblZkZGNpID0KPj4g LQkJCQljcHVfdG9fYmUzMihwaS0+YWNwaV92ZGRjaSAqCj4+IFZPTFRBR0VfU0NBTEUpOwo+PiAt CQllbHNlCj4+IC0JCQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLk1pblZkZGNpID0KPj4gLQkJCQlj cHVfdG9fYmUzMihwaS0+bWluX3ZkZGNpX2luX3BwX3RhYmxlICoKPj4gVk9MVEFHRV9TQ0FMRSk7 Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKGNpX3BvcHVsYXRlX212ZGRfdmFsdWUoYWRldiwgMCwgJnZv bHRhZ2VfbGV2ZWwpKQo+PiAtCQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLk1pbk12ZGQgPSAwOwo+ PiAtCWVsc2UKPj4gLQkJdGFibGUtPk1lbW9yeUFDUElMZXZlbC5NaW5NdmRkID0KPj4gLQkJCWNw dV90b19iZTMyKHZvbHRhZ2VfbGV2ZWwuVm9sdGFnZSAqCj4+IFZPTFRBR0VfU0NBTEUpOwo+PiAt Cj4+IC0JbWNsa19wd3JtZ3RfY250bCB8PQo+PiBNQ0xLX1BXUk1HVF9DTlRMX19NUkRDSzBfUkVT RVRfTUFTSyB8Cj4+IC0JCU1DTEtfUFdSTUdUX0NOVExfX01SRENLMV9SRVNFVF9NQVNLOwo+PiAt CW1jbGtfcHdybWd0X2NudGwgJj0KPj4gfihNQ0xLX1BXUk1HVF9DTlRMX19NUkRDSzBfUEROQl9N QVNLIHwKPj4gLQkJCU1DTEtfUFdSTUdUX0NOVExfX01SRENLMV9QRE5CX01BU0spOwo+PiAtCj4+ IC0JZGxsX2NudGwgJj0gfihETExfQ05UTF9fTVJEQ0swX0JZUEFTU19NQVNLIHwKPj4gRExMX0NO VExfX01SRENLMV9CWVBBU1NfTUFTSyk7Cj4+IC0KPj4gLQl0YWJsZS0+TWVtb3J5QUNQSUxldmVs LkRsbENudGwgPSBjcHVfdG9fYmUzMihkbGxfY250bCk7Cj4+IC0JdGFibGUtPk1lbW9yeUFDUElM ZXZlbC5NY2xrUHdybWd0Q250bCA9Cj4+IGNwdV90b19iZTMyKG1jbGtfcHdybWd0X2NudGwpOwo+ PiAtCXRhYmxlLT5NZW1vcnlBQ1BJTGV2ZWwuTXBsbEFkRnVuY0NudGwgPQo+PiAtCQljcHVfdG9f YmUzMihwaS0+Y2xvY2tfcmVnaXN0ZXJzLm1wbGxfYWRfZnVuY19jbnRsKTsKPj4gLQl0YWJsZS0+ TWVtb3J5QUNQSUxldmVsLk1wbGxEcUZ1bmNDbnRsID0KPj4gLQkJY3B1X3RvX2JlMzIocGktPmNs b2NrX3JlZ2lzdGVycy5tcGxsX2RxX2Z1bmNfY250bCk7Cj4+IC0JdGFibGUtPk1lbW9yeUFDUElM ZXZlbC5NcGxsRnVuY0NudGwgPQo+PiAtCQljcHVfdG9fYmUzMihwaS0+Y2xvY2tfcmVnaXN0ZXJz Lm1wbGxfZnVuY19jbnRsKTsKPj4gLQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLk1wbGxGdW5jQ250 bF8xID0KPj4gLQkJY3B1X3RvX2JlMzIocGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX2Z1bmNfY250 bF8xKTsKPj4gLQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLk1wbGxGdW5jQ250bF8yID0KPj4gLQkJ Y3B1X3RvX2JlMzIocGktPmNsb2NrX3JlZ2lzdGVycy5tcGxsX2Z1bmNfY250bF8yKTsKPj4gLQl0 YWJsZS0+TWVtb3J5QUNQSUxldmVsLk1wbGxTczEgPSBjcHVfdG9fYmUzMihwaS0KPj4+IGNsb2Nr X3JlZ2lzdGVycy5tcGxsX3NzMSk7Cj4+IC0JdGFibGUtPk1lbW9yeUFDUElMZXZlbC5NcGxsU3My ID0gY3B1X3RvX2JlMzIocGktCj4+PiBjbG9ja19yZWdpc3RlcnMubXBsbF9zczIpOwo+PiAtCj4+ IC0JdGFibGUtPk1lbW9yeUFDUElMZXZlbC5FbmFibGVkRm9yVGhyb3R0bGUgPSAwOwo+PiAtCXRh YmxlLT5NZW1vcnlBQ1BJTGV2ZWwuRW5hYmxlZEZvckFjdGl2aXR5ID0gMDsKPj4gLQl0YWJsZS0+ TWVtb3J5QUNQSUxldmVsLlVwSCA9IDA7Cj4+IC0JdGFibGUtPk1lbW9yeUFDUElMZXZlbC5Eb3du SCA9IDEwMDsKPj4gLQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLlZvbHRhZ2VEb3duSCA9IDA7Cj4+ IC0JdGFibGUtPk1lbW9yeUFDUElMZXZlbC5BY3Rpdml0eUxldmVsID0KPj4gLQkJY3B1X3RvX2Jl MTYoKHUxNilwaS0+bWNsa19hY3Rpdml0eV90YXJnZXQpOwo+PiAtCj4+IC0JdGFibGUtPk1lbW9y eUFDUElMZXZlbC5TdHV0dGVyRW5hYmxlID0gZmFsc2U7Cj4+IC0JdGFibGUtPk1lbW9yeUFDUElM ZXZlbC5TdHJvYmVFbmFibGUgPSBmYWxzZTsKPj4gLQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLkVk Y1JlYWRFbmFibGUgPSBmYWxzZTsKPj4gLQl0YWJsZS0+TWVtb3J5QUNQSUxldmVsLkVkY1dyaXRl RW5hYmxlID0gZmFsc2U7Cj4+IC0JdGFibGUtPk1lbW9yeUFDUElMZXZlbC5SdHRFbmFibGUgPSBm YWxzZTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC0KPj4gLXN0YXRpYyBpbnQg Y2lfZW5hYmxlX3VsdihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpCj4+ IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAt CXN0cnVjdCBjaV91bHZfcGFybSAqdWx2ID0gJnBpLT51bHY7Cj4+IC0KPj4gLQlpZiAodWx2LT5z dXBwb3J0ZWQpIHsKPj4gLQkJaWYgKGVuYWJsZSkKPj4gLQkJCXJldHVybiAoYW1kZ3B1X2NpX3Nl bmRfbXNnX3RvX3NtYyhhZGV2LAo+PiBQUFNNQ19NU0dfRW5hYmxlVUxWKSA9PSBQUFNNQ19SZXN1 bHRfT0spID8KPj4gLQkJCQkwIDogLUVJTlZBTDsKPj4gLQkJZWxzZQo+PiAtCQkJcmV0dXJuIChh bWRncHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+IFBQU01DX01TR19EaXNhYmxlVUxWKSA9 PSBQUFNNQ19SZXN1bHRfT0spID8KPj4gLQkJCQkwIDogLUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4g LQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9wb3B1bGF0ZV91bHZfbGV2 ZWwoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJIFNNVTdfRGlzY3JldGVfVWx2 ICpzdGF0ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGko YWRldik7Cj4+IC0JdTE2IHVsdl92b2x0YWdlID0gYWRldi0+cG0uZHBtLmJhY2tiaWFzX3Jlc3Bv bnNlX3RpbWU7Cj4+IC0KPj4gLQlzdGF0ZS0+Q2NQd3JEeW5SbSA9IDA7Cj4+IC0Jc3RhdGUtPkNj UHdyRHluUm0xID0gMDsKPj4gLQo+PiAtCWlmICh1bHZfdm9sdGFnZSA9PSAwKSB7Cj4+IC0JCXBp LT51bHYuc3VwcG9ydGVkID0gZmFsc2U7Cj4+IC0JCXJldHVybiAwOwo+PiAtCX0KPj4gLQo+PiAt CWlmIChwaS0+dm9sdGFnZV9jb250cm9sICE9IENJU0xBTkRTX1ZPTFRBR0VfQ09OVFJPTF9CWV9T VklEMikKPj4gewo+PiAtCQlpZiAodWx2X3ZvbHRhZ2UgPiBhZGV2LQo+Pj4gcG0uZHBtLmR5bl9z dGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2Nsay5lbnRyaWVzWzBdLnYpCj4+IC0JCQlzdGF0ZS0+ VmRkY09mZnNldCA9IDA7Cj4+IC0JCWVsc2UKPj4gLQkJCXN0YXRlLT5WZGRjT2Zmc2V0ID0KPj4g LQkJCQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2Nsay5l bnRyaWVzWzBdLnYgLSB1bHZfdm9sdGFnZTsKPj4gLQl9IGVsc2Ugewo+PiAtCQlpZiAodWx2X3Zv bHRhZ2UgPiBhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2Ns ay5lbnRyaWVzWzBdLnYpCj4+IC0JCQlzdGF0ZS0+VmRkY09mZnNldFZpZCA9IDA7Cj4+IC0JCWVs c2UKPj4gLQkJCXN0YXRlLT5WZGRjT2Zmc2V0VmlkID0gKHU4KQo+PiAtCQkJCSgoYWRldi0KPj4+ IHBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGsuZW50cmllc1swXS52IC0g dWx2X3ZvbHRhZ2UpCj4+ICoKPj4gLQkJCQkgVk9MVEFHRV9WSURfT0ZGU0VUX1NDQUxFMiAvCj4+ IFZPTFRBR0VfVklEX09GRlNFVF9TQ0FMRTEpOwo+PiAtCX0KPj4gLQlzdGF0ZS0+VmRkY1BoYXNl ID0gcGktPnZkZGNfcGhhc2Vfc2hlZF9jb250cm9sID8gMCA6IDE7Cj4+IC0KPj4gLQlzdGF0ZS0+ Q2NQd3JEeW5SbSA9IGNwdV90b19iZTMyKHN0YXRlLT5DY1B3ckR5blJtKTsKPj4gLQlzdGF0ZS0+ Q2NQd3JEeW5SbTEgPSBjcHVfdG9fYmUzMihzdGF0ZS0+Q2NQd3JEeW5SbTEpOwo+PiAtCXN0YXRl LT5WZGRjT2Zmc2V0ID0gY3B1X3RvX2JlMTYoc3RhdGUtPlZkZGNPZmZzZXQpOwo+PiAtCj4+IC0J cmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfY2FsY3VsYXRlX3NjbGtfcGFy YW1zKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCSAgICB1MzIgZW5naW5lX2Ns b2NrLAo+PiAtCQkJCSAgICBTTVU3X0Rpc2NyZXRlX0dyYXBoaWNzTGV2ZWwgKnNjbGspCj4+IC17 Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXN0 cnVjdCBhdG9tX2Nsb2NrX2RpdmlkZXJzIGRpdmlkZXJzOwo+PiAtCXUzMiBzcGxsX2Z1bmNfY250 bF8zID0gcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX2Z1bmNfY250bF8zOwo+PiAtCXUzMiBz cGxsX2Z1bmNfY250bF80ID0gcGktPmNsb2NrX3JlZ2lzdGVycy5jZ19zcGxsX2Z1bmNfY250bF80 Owo+PiAtCXUzMiBjZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bSA9IHBpLQo+Pj4gY2xvY2tfcmVnaXN0 ZXJzLmNnX3NwbGxfc3ByZWFkX3NwZWN0cnVtOwo+PiAtCXUzMiBjZ19zcGxsX3NwcmVhZF9zcGVj dHJ1bV8yID0gcGktCj4+PiBjbG9ja19yZWdpc3RlcnMuY2dfc3BsbF9zcHJlYWRfc3BlY3RydW1f MjsKPj4gLQl1MzIgcmVmZXJlbmNlX2Nsb2NrID0gYWRldi0+Y2xvY2suc3BsbC5yZWZlcmVuY2Vf ZnJlcTsKPj4gLQl1MzIgcmVmZXJlbmNlX2RpdmlkZXI7Cj4+IC0JdTMyIGZiZGl2Owo+PiAtCWlu dCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBhbWRncHVfYXRvbWJpb3NfZ2V0X2Nsb2NrX2RpdmlkZXJz KGFkZXYsCj4+IC0KPj4gQ09NUFVURV9HUFVDTEtfSU5QVVRfRkxBR19TQ0xLLAo+PiAtCQkJCQkJ IGVuZ2luZV9jbG9jaywgZmFsc2UsCj4+ICZkaXZpZGVycyk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJ cmV0dXJuIHJldDsKPj4gLQo+PiAtCXJlZmVyZW5jZV9kaXZpZGVyID0gMSArIGRpdmlkZXJzLnJl Zl9kaXY7Cj4+IC0JZmJkaXYgPSBkaXZpZGVycy5mYl9kaXYgJiAweDNGRkZGRkY7Cj4+IC0KPj4g LQlzcGxsX2Z1bmNfY250bF8zICY9Cj4+IH5DR19TUExMX0ZVTkNfQ05UTF8zX19TUExMX0ZCX0RJ Vl9NQVNLOwo+PiAtCXNwbGxfZnVuY19jbnRsXzMgfD0gKGZiZGl2IDw8Cj4+IENHX1NQTExfRlVO Q19DTlRMXzNfX1NQTExfRkJfRElWX19TSElGVCk7Cj4+IC0Jc3BsbF9mdW5jX2NudGxfMyB8PSBD R19TUExMX0ZVTkNfQ05UTF8zX19TUExMX0RJVEhFTl9NQVNLOwo+PiAtCj4+IC0JaWYgKHBpLT5j YXBzX3NjbGtfc3Nfc3VwcG9ydCkgewo+PiAtCQlzdHJ1Y3QgYW1kZ3B1X2F0b21fc3Mgc3M7Cj4+ IC0JCXUzMiB2Y29fZnJlcSA9IGVuZ2luZV9jbG9jayAqIGRpdmlkZXJzLnBvc3RfZGl2Owo+PiAt Cj4+IC0JCWlmIChhbWRncHVfYXRvbWJpb3NfZ2V0X2FzaWNfc3NfaW5mbyhhZGV2LCAmc3MsCj4+ IC0KPj4gQVNJQ19JTlRFUk5BTF9FTkdJTkVfU1MsIHZjb19mcmVxKSkgewo+PiAtCQkJdTMyIGNs a19zID0gcmVmZXJlbmNlX2Nsb2NrICogNSAvIChyZWZlcmVuY2VfZGl2aWRlcgo+PiAqIHNzLnJh dGUpOwo+PiAtCQkJdTMyIGNsa192ID0gNCAqIHNzLnBlcmNlbnRhZ2UgKiBmYmRpdiAvIChjbGtf cyAqIDEwMDAwKTsKPj4gLQo+PiAtCQkJY2dfc3BsbF9zcHJlYWRfc3BlY3RydW0gJj0KPj4gfihD R19TUExMX1NQUkVBRF9TUEVDVFJVTV9fQ0xLU19NQVNLIHwKPj4gQ0dfU1BMTF9TUFJFQURfU1BF Q1RSVU1fX1NTRU5fTUFTSyk7Cj4+IC0JCQljZ19zcGxsX3NwcmVhZF9zcGVjdHJ1bSB8PSAoY2xr X3MgPDwKPj4gQ0dfU1BMTF9TUFJFQURfU1BFQ1RSVU1fX0NMS1NfX1NISUZUKTsKPj4gLQkJCWNn X3NwbGxfc3ByZWFkX3NwZWN0cnVtIHw9ICgxIDw8Cj4+IENHX1NQTExfU1BSRUFEX1NQRUNUUlVN X19TU0VOX19TSElGVCk7Cj4+IC0KPj4gLQkJCWNnX3NwbGxfc3ByZWFkX3NwZWN0cnVtXzIgJj0K Pj4gfkNHX1NQTExfU1BSRUFEX1NQRUNUUlVNXzJfX0NMS1ZfTUFTSzsKPj4gLQkJCWNnX3NwbGxf c3ByZWFkX3NwZWN0cnVtXzIgfD0gKGNsa192IDw8Cj4+IENHX1NQTExfU1BSRUFEX1NQRUNUUlVN XzJfX0NMS1ZfX1NISUZUKTsKPj4gLQkJfQo+PiAtCX0KPj4gLQo+PiAtCXNjbGstPlNjbGtGcmVx dWVuY3kgPSBlbmdpbmVfY2xvY2s7Cj4+IC0Jc2Nsay0+Q2dTcGxsRnVuY0NudGwzID0gc3BsbF9m dW5jX2NudGxfMzsKPj4gLQlzY2xrLT5DZ1NwbGxGdW5jQ250bDQgPSBzcGxsX2Z1bmNfY250bF80 Owo+PiAtCXNjbGstPlNwbGxTcHJlYWRTcGVjdHJ1bSA9IGNnX3NwbGxfc3ByZWFkX3NwZWN0cnVt Owo+PiAtCXNjbGstPlNwbGxTcHJlYWRTcGVjdHJ1bTIgID0gY2dfc3BsbF9zcHJlYWRfc3BlY3Ry dW1fMjsKPj4gLQlzY2xrLT5TY2xrRGlkID0gKHU4KWRpdmlkZXJzLnBvc3RfZGl2aWRlcjsKPj4g LQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3BvcHVsYXRlX3Np bmdsZV9ncmFwaGljX2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCQkg ICAgdTMyIGVuZ2luZV9jbG9jaywKPj4gLQkJCQkJICAgIHUxNiBzY2xrX2FjdGl2aXR5X2xldmVs X3QsCj4+IC0JCQkJCSAgICBTTVU3X0Rpc2NyZXRlX0dyYXBoaWNzTGV2ZWwKPj4gKmdyYXBoaWNf bGV2ZWwpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFk ZXYpOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBjaV9jYWxjdWxhdGVfc2Nsa19wYXJh bXMoYWRldiwgZW5naW5lX2Nsb2NrLCBncmFwaGljX2xldmVsKTsKPj4gLQlpZiAocmV0KQo+PiAt CQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcmV0ID0gY2lfZ2V0X2RlcGVuZGVuY3lfdm9sdF9ieV9j bGsoYWRldiwKPj4gLQkJCQkJICAgICZhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2Rl cGVuZGVuY3lfb25fc2NsaywKPj4gLQkJCQkJICAgIGVuZ2luZV9jbG9jaywgJmdyYXBoaWNfbGV2 ZWwtCj4+PiBNaW5WZGRjKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+ IC0JZ3JhcGhpY19sZXZlbC0+U2Nsa0ZyZXF1ZW5jeSA9IGVuZ2luZV9jbG9jazsKPj4gLQo+PiAt CWdyYXBoaWNfbGV2ZWwtPkZsYWdzID0gIDA7Cj4+IC0JZ3JhcGhpY19sZXZlbC0+TWluVmRkY1Bo YXNlcyA9IDE7Cj4+IC0KPj4gLQlpZiAocGktPnZkZGNfcGhhc2Vfc2hlZF9jb250cm9sKQo+PiAt CQljaV9wb3B1bGF0ZV9waGFzZV92YWx1ZV9iYXNlZF9vbl9zY2xrKGFkZXYsCj4+IC0JCQkJCQkg ICAgICAmYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUucGhhc2Vfc2hlZGRpbmdfbGltaXRzX3Rh YmxlLAo+PiAtCQkJCQkJICAgICAgZW5naW5lX2Nsb2NrLAo+PiAtCQkJCQkJICAgICAgJmdyYXBo aWNfbGV2ZWwtCj4+PiBNaW5WZGRjUGhhc2VzKTsKPj4gLQo+PiAtCWdyYXBoaWNfbGV2ZWwtPkFj dGl2aXR5TGV2ZWwgPSBzY2xrX2FjdGl2aXR5X2xldmVsX3Q7Cj4+IC0KPj4gLQlncmFwaGljX2xl dmVsLT5DY1B3ckR5blJtID0gMDsKPj4gLQlncmFwaGljX2xldmVsLT5DY1B3ckR5blJtMSA9IDA7 Cj4+IC0JZ3JhcGhpY19sZXZlbC0+RW5hYmxlZEZvclRocm90dGxlID0gMTsKPj4gLQlncmFwaGlj X2xldmVsLT5VcEggPSAwOwo+PiAtCWdyYXBoaWNfbGV2ZWwtPkRvd25IID0gMDsKPj4gLQlncmFw aGljX2xldmVsLT5Wb2x0YWdlRG93bkggPSAwOwo+PiAtCWdyYXBoaWNfbGV2ZWwtPlBvd2VyVGhy b3R0bGUgPSAwOwo+PiAtCj4+IC0JaWYgKHBpLT5jYXBzX3NjbGtfZHMpCj4+IC0JCWdyYXBoaWNf bGV2ZWwtPkRlZXBTbGVlcERpdklkID0KPj4gY2lfZ2V0X3NsZWVwX2RpdmlkZXJfaWRfZnJvbV9j bG9jayhlbmdpbmVfY2xvY2ssCj4+IC0KPj4gCSAgIENJU0xBTkRfTUlOSU1VTV9FTkdJTkVfQ0xP Q0spOwo+PiAtCj4+IC0JZ3JhcGhpY19sZXZlbC0+RGlzcGxheVdhdGVybWFyayA9Cj4+IFBQU01D X0RJU1BMQVlfV0FURVJNQVJLX0xPVzsKPj4gLQo+PiAtCWdyYXBoaWNfbGV2ZWwtPkZsYWdzID0g Y3B1X3RvX2JlMzIoZ3JhcGhpY19sZXZlbC0+RmxhZ3MpOwo+PiAtCWdyYXBoaWNfbGV2ZWwtPk1p blZkZGMgPSBjcHVfdG9fYmUzMihncmFwaGljX2xldmVsLT5NaW5WZGRjICoKPj4gVk9MVEFHRV9T Q0FMRSk7Cj4+IC0JZ3JhcGhpY19sZXZlbC0+TWluVmRkY1BoYXNlcyA9IGNwdV90b19iZTMyKGdy YXBoaWNfbGV2ZWwtCj4+PiBNaW5WZGRjUGhhc2VzKTsKPj4gLQlncmFwaGljX2xldmVsLT5TY2xr RnJlcXVlbmN5ID0gY3B1X3RvX2JlMzIoZ3JhcGhpY19sZXZlbC0KPj4+IFNjbGtGcmVxdWVuY3kp Owo+PiAtCWdyYXBoaWNfbGV2ZWwtPkFjdGl2aXR5TGV2ZWwgPSBjcHVfdG9fYmUxNihncmFwaGlj X2xldmVsLQo+Pj4gQWN0aXZpdHlMZXZlbCk7Cj4+IC0JZ3JhcGhpY19sZXZlbC0+Q2dTcGxsRnVu Y0NudGwzID0gY3B1X3RvX2JlMzIoZ3JhcGhpY19sZXZlbC0KPj4+IENnU3BsbEZ1bmNDbnRsMyk7 Cj4+IC0JZ3JhcGhpY19sZXZlbC0+Q2dTcGxsRnVuY0NudGw0ID0gY3B1X3RvX2JlMzIoZ3JhcGhp Y19sZXZlbC0KPj4+IENnU3BsbEZ1bmNDbnRsNCk7Cj4+IC0JZ3JhcGhpY19sZXZlbC0+U3BsbFNw cmVhZFNwZWN0cnVtID0gY3B1X3RvX2JlMzIoZ3JhcGhpY19sZXZlbC0KPj4+IFNwbGxTcHJlYWRT cGVjdHJ1bSk7Cj4+IC0JZ3JhcGhpY19sZXZlbC0+U3BsbFNwcmVhZFNwZWN0cnVtMiA9IGNwdV90 b19iZTMyKGdyYXBoaWNfbGV2ZWwtCj4+PiBTcGxsU3ByZWFkU3BlY3RydW0yKTsKPj4gLQlncmFw aGljX2xldmVsLT5DY1B3ckR5blJtID0gY3B1X3RvX2JlMzIoZ3JhcGhpY19sZXZlbC0KPj4+IENj UHdyRHluUm0pOwo+PiAtCWdyYXBoaWNfbGV2ZWwtPkNjUHdyRHluUm0xID0gY3B1X3RvX2JlMzIo Z3JhcGhpY19sZXZlbC0KPj4+IENjUHdyRHluUm0xKTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3BvcHVsYXRlX2FsbF9ncmFwaGljX2xldmVscyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAq cGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0Jc3RydWN0IGNpX2RwbV90YWJsZSAqZHBtX3RhYmxl ID0gJnBpLT5kcG1fdGFibGU7Cj4+IC0JdTMyIGxldmVsX2FycmF5X2FkZHJlc3MgPSBwaS0+ZHBt X3RhYmxlX3N0YXJ0ICsKPj4gLQkJb2Zmc2V0b2YoU01VN19EaXNjcmV0ZV9EcG1UYWJsZSwgR3Jh cGhpY3NMZXZlbCk7Cj4+IC0JdTMyIGxldmVsX2FycmF5X3NpemUgPSBzaXplb2YoU01VN19EaXNj cmV0ZV9HcmFwaGljc0xldmVsKSAqCj4+IC0JCVNNVTdfTUFYX0xFVkVMU19HUkFQSElDUzsKPj4g LQlTTVU3X0Rpc2NyZXRlX0dyYXBoaWNzTGV2ZWwgKmxldmVscyA9IHBpLQo+Pj4gc21jX3N0YXRl X3RhYmxlLkdyYXBoaWNzTGV2ZWw7Cj4+IC0JdTMyIGksIHJldDsKPj4gLQo+PiAtCW1lbXNldChs ZXZlbHMsIDAsIGxldmVsX2FycmF5X3NpemUpOwo+PiAtCj4+IC0JZm9yIChpID0gMDsgaSA8IGRw bV90YWJsZS0+c2Nsa190YWJsZS5jb3VudDsgaSsrKSB7Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRl X3NpbmdsZV9ncmFwaGljX2xldmVsKGFkZXYsCj4+IC0JCQkJCQkgICAgICAgZHBtX3RhYmxlLQo+ Pj4gc2Nsa190YWJsZS5kcG1fbGV2ZWxzW2ldLnZhbHVlLAo+PiAtCQkJCQkJICAgICAgICh1MTYp cGktPmFjdGl2aXR5X3RhcmdldFtpXSwKPj4gLQkJCQkJCSAgICAgICAmcGktCj4+PiBzbWNfc3Rh dGVfdGFibGUuR3JhcGhpY3NMZXZlbFtpXSk7Cj4+IC0JCWlmIChyZXQpCj4+IC0JCQlyZXR1cm4g cmV0Owo+PiAtCQlpZiAoaSA+IDEpCj4+IC0JCQlwaS0KPj4+IHNtY19zdGF0ZV90YWJsZS5HcmFw aGljc0xldmVsW2ldLkRlZXBTbGVlcERpdklkID0gMDsKPj4gLQkJaWYgKGkgPT0gKGRwbV90YWJs ZS0+c2Nsa190YWJsZS5jb3VudCAtIDEpKQo+PiAtCQkJcGktCj4+PiBzbWNfc3RhdGVfdGFibGUu R3JhcGhpY3NMZXZlbFtpXS5EaXNwbGF5V2F0ZXJtYXJrID0KPj4gLQkJCQlQUFNNQ19ESVNQTEFZ X1dBVEVSTUFSS19ISUdIOwo+PiAtCX0KPj4gLQlwaS0+c21jX3N0YXRlX3RhYmxlLkdyYXBoaWNz TGV2ZWxbMF0uRW5hYmxlZEZvckFjdGl2aXR5ID0gMTsKPj4gLQo+PiAtCXBpLT5zbWNfc3RhdGVf dGFibGUuR3JhcGhpY3NEcG1MZXZlbENvdW50ID0gKHU4KWRwbV90YWJsZS0KPj4+IHNjbGtfdGFi bGUuY291bnQ7Cj4+IC0JcGktPmRwbV9sZXZlbF9lbmFibGVfbWFzay5zY2xrX2RwbV9lbmFibGVf bWFzayA9Cj4+IC0JCWNpX2dldF9kcG1fbGV2ZWxfZW5hYmxlX21hc2tfdmFsdWUoJmRwbV90YWJs ZS0KPj4+IHNjbGtfdGFibGUpOwo+PiAtCj4+IC0JcmV0ID0gYW1kZ3B1X2NpX2NvcHlfYnl0ZXNf dG9fc21jKGFkZXYsIGxldmVsX2FycmF5X2FkZHJlc3MsCj4+IC0JCQkJICAgKHU4ICopbGV2ZWxz LCBsZXZlbF9hcnJheV9zaXplLAo+PiAtCQkJCSAgIHBpLT5zcmFtX2VuZCk7Cj4+IC0JaWYgKHJl dCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1z dGF0aWMgaW50IGNpX3BvcHVsYXRlX3Vsdl9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwKPj4gLQkJCQkgU01VN19EaXNjcmV0ZV9VbHYgKnVsdl9sZXZlbCkKPj4gLXsKPj4gLQlyZXR1 cm4gY2lfcG9wdWxhdGVfdWx2X2xldmVsKGFkZXYsIHVsdl9sZXZlbCk7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyBpbnQgY2lfcG9wdWxhdGVfYWxsX21lbW9yeV9sZXZlbHMoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0 X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBjaV9kcG1fdGFibGUgKmRwbV90YWJsZSA9ICZwaS0+ZHBt X3RhYmxlOwo+PiAtCXUzMiBsZXZlbF9hcnJheV9hZGRyZXNzID0gcGktPmRwbV90YWJsZV9zdGFy dCArCj4+IC0JCW9mZnNldG9mKFNNVTdfRGlzY3JldGVfRHBtVGFibGUsIE1lbW9yeUxldmVsKTsK Pj4gLQl1MzIgbGV2ZWxfYXJyYXlfc2l6ZSA9IHNpemVvZihTTVU3X0Rpc2NyZXRlX01lbW9yeUxl dmVsKSAqCj4+IC0JCVNNVTdfTUFYX0xFVkVMU19NRU1PUlk7Cj4+IC0JU01VN19EaXNjcmV0ZV9N ZW1vcnlMZXZlbCAqbGV2ZWxzID0gcGktCj4+PiBzbWNfc3RhdGVfdGFibGUuTWVtb3J5TGV2ZWw7 Cj4+IC0JdTMyIGksIHJldDsKPj4gLQo+PiAtCW1lbXNldChsZXZlbHMsIDAsIGxldmVsX2FycmF5 X3NpemUpOwo+PiAtCj4+IC0JZm9yIChpID0gMDsgaSA8IGRwbV90YWJsZS0+bWNsa190YWJsZS5j b3VudDsgaSsrKSB7Cj4+IC0JCWlmIChkcG1fdGFibGUtPm1jbGtfdGFibGUuZHBtX2xldmVsc1tp XS52YWx1ZSA9PSAwKQo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JCXJldCA9IGNpX3BvcHVs YXRlX3NpbmdsZV9tZW1vcnlfbGV2ZWwoYWRldiwKPj4gLQkJCQkJCSAgICAgIGRwbV90YWJsZS0K Pj4+IG1jbGtfdGFibGUuZHBtX2xldmVsc1tpXS52YWx1ZSwKPj4gLQkJCQkJCSAgICAgICZwaS0K Pj4+IHNtY19zdGF0ZV90YWJsZS5NZW1vcnlMZXZlbFtpXSk7Cj4+IC0JCWlmIChyZXQpCj4+IC0J CQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQo+PiAtCWlmICgoZHBtX3RhYmxlLT5tY2xrX3RhYmxl LmNvdW50ID49IDIpICYmCj4+IC0JICAgICgoYWRldi0+cGRldi0+ZGV2aWNlID09IDB4NjdCMCkg fHwgKGFkZXYtPnBkZXYtPmRldmljZSA9PQo+PiAweDY3QjEpKSkgewo+PiAtCQlwaS0+c21jX3N0 YXRlX3RhYmxlLk1lbW9yeUxldmVsWzFdLk1pblZkZGMgPQo+PiAtCQkJcGktPnNtY19zdGF0ZV90 YWJsZS5NZW1vcnlMZXZlbFswXS5NaW5WZGRjOwo+PiAtCQlwaS0+c21jX3N0YXRlX3RhYmxlLk1l bW9yeUxldmVsWzFdLk1pblZkZGNQaGFzZXMgPQo+PiAtCQkJcGktCj4+PiBzbWNfc3RhdGVfdGFi bGUuTWVtb3J5TGV2ZWxbMF0uTWluVmRkY1BoYXNlczsKPj4gLQl9Cj4+IC0KPj4gLQlwaS0+c21j X3N0YXRlX3RhYmxlLk1lbW9yeUxldmVsWzBdLkFjdGl2aXR5TGV2ZWwgPQo+PiBjcHVfdG9fYmUx NigweDFGKTsKPj4gLQo+PiAtCXBpLT5zbWNfc3RhdGVfdGFibGUuTWVtb3J5RHBtTGV2ZWxDb3Vu dCA9ICh1OClkcG1fdGFibGUtCj4+PiBtY2xrX3RhYmxlLmNvdW50Owo+PiAtCXBpLT5kcG1fbGV2 ZWxfZW5hYmxlX21hc2subWNsa19kcG1fZW5hYmxlX21hc2sgPQo+PiAtCQljaV9nZXRfZHBtX2xl dmVsX2VuYWJsZV9tYXNrX3ZhbHVlKCZkcG1fdGFibGUtCj4+PiBtY2xrX3RhYmxlKTsKPj4gLQo+ PiAtCXBpLT5zbWNfc3RhdGVfdGFibGUuTWVtb3J5TGV2ZWxbZHBtX3RhYmxlLT5tY2xrX3RhYmxl LmNvdW50IC0KPj4gMV0uRGlzcGxheVdhdGVybWFyayA9Cj4+IC0JCVBQU01DX0RJU1BMQVlfV0FU RVJNQVJLX0hJR0g7Cj4+IC0KPj4gLQlyZXQgPSBhbWRncHVfY2lfY29weV9ieXRlc190b19zbWMo YWRldiwgbGV2ZWxfYXJyYXlfYWRkcmVzcywKPj4gLQkJCQkgICAodTggKilsZXZlbHMsIGxldmVs X2FycmF5X3NpemUsCj4+IC0JCQkJICAgcGktPnNyYW1fZW5kKTsKPj4gLQlpZiAocmV0KQo+PiAt CQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2 b2lkIGNpX3Jlc2V0X3NpbmdsZV9kcG1fdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4+IC0JCQkJICAgICAgc3RydWN0IGNpX3NpbmdsZV9kcG1fdGFibGUqIGRwbV90YWJsZSwKPj4g LQkJCQkgICAgICB1MzIgY291bnQpCj4+IC17Cj4+IC0JdTMyIGk7Cj4+IC0KPj4gLQlkcG1fdGFi bGUtPmNvdW50ID0gY291bnQ7Cj4+IC0JZm9yIChpID0gMDsgaSA8IE1BWF9SRUdVTEFSX0RQTV9O VU1CRVI7IGkrKykKPj4gLQkJZHBtX3RhYmxlLT5kcG1fbGV2ZWxzW2ldLmVuYWJsZWQgPSBmYWxz ZTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfc2V0dXBfcGNpZV90YWJsZV9lbnRyeShz dHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSoKPj4gZHBtX3RhYmxlLAo+PiAtCQkJCSAgICAgIHUz MiBpbmRleCwgdTMyIHBjaWVfZ2VuLCB1MzIgcGNpZV9sYW5lcykKPj4gLXsKPj4gLQlkcG1fdGFi bGUtPmRwbV9sZXZlbHNbaW5kZXhdLnZhbHVlID0gcGNpZV9nZW47Cj4+IC0JZHBtX3RhYmxlLT5k cG1fbGV2ZWxzW2luZGV4XS5wYXJhbTEgPSBwY2llX2xhbmVzOwo+PiAtCWRwbV90YWJsZS0+ZHBt X2xldmVsc1tpbmRleF0uZW5hYmxlZCA9IHRydWU7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQg Y2lfc2V0dXBfZGVmYXVsdF9wY2llX3RhYmxlcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK Pj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+ IC0KPj4gLQlpZiAoIXBpLT51c2VfcGNpZV9wZXJmb3JtYW5jZV9sZXZlbHMgJiYgIXBpLQo+Pj4g dXNlX3BjaWVfcG93ZXJzYXZpbmdfbGV2ZWxzKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+ PiAtCWlmIChwaS0+dXNlX3BjaWVfcGVyZm9ybWFuY2VfbGV2ZWxzICYmICFwaS0KPj4+IHVzZV9w Y2llX3Bvd2Vyc2F2aW5nX2xldmVscykgewo+PiAtCQlwaS0+cGNpZV9nZW5fcG93ZXJzYXZpbmcg PSBwaS0+cGNpZV9nZW5fcGVyZm9ybWFuY2U7Cj4+IC0JCXBpLT5wY2llX2xhbmVfcG93ZXJzYXZp bmcgPSBwaS0+cGNpZV9sYW5lX3BlcmZvcm1hbmNlOwo+PiAtCX0gZWxzZSBpZiAoIXBpLT51c2Vf cGNpZV9wZXJmb3JtYW5jZV9sZXZlbHMgJiYgcGktCj4+PiB1c2VfcGNpZV9wb3dlcnNhdmluZ19s ZXZlbHMpIHsKPj4gLQkJcGktPnBjaWVfZ2VuX3BlcmZvcm1hbmNlID0gcGktPnBjaWVfZ2VuX3Bv d2Vyc2F2aW5nOwo+PiAtCQlwaS0+cGNpZV9sYW5lX3BlcmZvcm1hbmNlID0gcGktPnBjaWVfbGFu ZV9wb3dlcnNhdmluZzsKPj4gLQl9Cj4+IC0KPj4gLQljaV9yZXNldF9zaW5nbGVfZHBtX3RhYmxl KGFkZXYsCj4+IC0JCQkJICAmcGktPmRwbV90YWJsZS5wY2llX3NwZWVkX3RhYmxlLAo+PiAtCQkJ CSAgU01VN19NQVhfTEVWRUxTX0xJTkspOwo+PiAtCj4+IC0JaWYgKGFkZXYtPmFzaWNfdHlwZSA9 PSBDSElQX0JPTkFJUkUpCj4+IC0JCWNpX3NldHVwX3BjaWVfdGFibGVfZW50cnkoJnBpLQo+Pj4g ZHBtX3RhYmxlLnBjaWVfc3BlZWRfdGFibGUsIDAsCj4+IC0JCQkJCSAgcGktPnBjaWVfZ2VuX3Bv d2Vyc2F2aW5nLm1pbiwKPj4gLQkJCQkJICBwaS0+cGNpZV9sYW5lX3Bvd2Vyc2F2aW5nLm1heCk7 Cj4+IC0JZWxzZQo+PiAtCQljaV9zZXR1cF9wY2llX3RhYmxlX2VudHJ5KCZwaS0KPj4+IGRwbV90 YWJsZS5wY2llX3NwZWVkX3RhYmxlLCAwLAo+PiAtCQkJCQkgIHBpLT5wY2llX2dlbl9wb3dlcnNh dmluZy5taW4sCj4+IC0JCQkJCSAgcGktPnBjaWVfbGFuZV9wb3dlcnNhdmluZy5taW4pOwo+PiAt CWNpX3NldHVwX3BjaWVfdGFibGVfZW50cnkoJnBpLT5kcG1fdGFibGUucGNpZV9zcGVlZF90YWJs ZSwgMSwKPj4gLQkJCQkgIHBpLT5wY2llX2dlbl9wZXJmb3JtYW5jZS5taW4sCj4+IC0JCQkJICBw aS0+cGNpZV9sYW5lX3BlcmZvcm1hbmNlLm1pbik7Cj4+IC0JY2lfc2V0dXBfcGNpZV90YWJsZV9l bnRyeSgmcGktPmRwbV90YWJsZS5wY2llX3NwZWVkX3RhYmxlLCAyLAo+PiAtCQkJCSAgcGktPnBj aWVfZ2VuX3Bvd2Vyc2F2aW5nLm1pbiwKPj4gLQkJCQkgIHBpLT5wY2llX2xhbmVfcG93ZXJzYXZp bmcubWF4KTsKPj4gLQljaV9zZXR1cF9wY2llX3RhYmxlX2VudHJ5KCZwaS0+ZHBtX3RhYmxlLnBj aWVfc3BlZWRfdGFibGUsIDMsCj4+IC0JCQkJICBwaS0+cGNpZV9nZW5fcGVyZm9ybWFuY2UubWlu LAo+PiAtCQkJCSAgcGktPnBjaWVfbGFuZV9wZXJmb3JtYW5jZS5tYXgpOwo+PiAtCWNpX3NldHVw X3BjaWVfdGFibGVfZW50cnkoJnBpLT5kcG1fdGFibGUucGNpZV9zcGVlZF90YWJsZSwgNCwKPj4g LQkJCQkgIHBpLT5wY2llX2dlbl9wb3dlcnNhdmluZy5tYXgsCj4+IC0JCQkJICBwaS0+cGNpZV9s YW5lX3Bvd2Vyc2F2aW5nLm1heCk7Cj4+IC0JY2lfc2V0dXBfcGNpZV90YWJsZV9lbnRyeSgmcGkt PmRwbV90YWJsZS5wY2llX3NwZWVkX3RhYmxlLCA1LAo+PiAtCQkJCSAgcGktPnBjaWVfZ2VuX3Bl cmZvcm1hbmNlLm1heCwKPj4gLQkJCQkgIHBpLT5wY2llX2xhbmVfcGVyZm9ybWFuY2UubWF4KTsK Pj4gLQo+PiAtCXBpLT5kcG1fdGFibGUucGNpZV9zcGVlZF90YWJsZS5jb3VudCA9IDY7Cj4+IC0K Pj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9zZXR1cF9kZWZhdWx0 X2RwbV90YWJsZXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0 IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBhbWRncHVf Y2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlCj4+ICphbGxvd2VkX3NjbGtfdmRkY190YWJs ZSA9Cj4+IC0JCSZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9zY2xr Owo+PiAtCXN0cnVjdCBhbWRncHVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlCj4+ICph bGxvd2VkX21jbGtfdGFibGUgPQo+PiAtCQkmYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2Rl cGVuZGVuY3lfb25fbWNsazsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2NhY19sZWFrYWdlX3RhYmxlICpz dGRfdm9sdGFnZV90YWJsZSA9Cj4+IC0JCSZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLmNhY19sZWFr YWdlX3RhYmxlOwo+PiAtCXUzMiBpOwo+PiAtCj4+IC0JaWYgKGFsbG93ZWRfc2Nsa192ZGRjX3Rh YmxlID09IE5VTEwpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCWlmIChhbGxvd2VkX3NjbGtf dmRkY190YWJsZS0+Y291bnQgPCAxKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQlpZiAoYWxs b3dlZF9tY2xrX3RhYmxlID09IE5VTEwpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCWlmIChh bGxvd2VkX21jbGtfdGFibGUtPmNvdW50IDwgMSkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0K Pj4gLQltZW1zZXQoJnBpLT5kcG1fdGFibGUsIDAsIHNpemVvZihzdHJ1Y3QgY2lfZHBtX3RhYmxl KSk7Cj4+IC0KPj4gLQljaV9yZXNldF9zaW5nbGVfZHBtX3RhYmxlKGFkZXYsCj4+IC0JCQkJICAm cGktPmRwbV90YWJsZS5zY2xrX3RhYmxlLAo+PiAtCQkJCSAgU01VN19NQVhfTEVWRUxTX0dSQVBI SUNTKTsKPj4gLQljaV9yZXNldF9zaW5nbGVfZHBtX3RhYmxlKGFkZXYsCj4+IC0JCQkJICAmcGkt PmRwbV90YWJsZS5tY2xrX3RhYmxlLAo+PiAtCQkJCSAgU01VN19NQVhfTEVWRUxTX01FTU9SWSk7 Cj4+IC0JY2lfcmVzZXRfc2luZ2xlX2RwbV90YWJsZShhZGV2LAo+PiAtCQkJCSAgJnBpLT5kcG1f dGFibGUudmRkY190YWJsZSwKPj4gLQkJCQkgIFNNVTdfTUFYX0xFVkVMU19WRERDKTsKPj4gLQlj aV9yZXNldF9zaW5nbGVfZHBtX3RhYmxlKGFkZXYsCj4+IC0JCQkJICAmcGktPmRwbV90YWJsZS52 ZGRjaV90YWJsZSwKPj4gLQkJCQkgIFNNVTdfTUFYX0xFVkVMU19WRERDSSk7Cj4+IC0JY2lfcmVz ZXRfc2luZ2xlX2RwbV90YWJsZShhZGV2LAo+PiAtCQkJCSAgJnBpLT5kcG1fdGFibGUubXZkZF90 YWJsZSwKPj4gLQkJCQkgIFNNVTdfTUFYX0xFVkVMU19NVkREKTsKPj4gLQo+PiAtCXBpLT5kcG1f dGFibGUuc2Nsa190YWJsZS5jb3VudCA9IDA7Cj4+IC0JZm9yIChpID0gMDsgaSA8IGFsbG93ZWRf c2Nsa192ZGRjX3RhYmxlLT5jb3VudDsgaSsrKSB7Cj4+IC0JCWlmICgoaSA9PSAwKSB8fAo+PiAt CQkgICAgKHBpLT5kcG1fdGFibGUuc2Nsa190YWJsZS5kcG1fbGV2ZWxzW3BpLQo+Pj4gZHBtX3Rh YmxlLnNjbGtfdGFibGUuY291bnQtMV0udmFsdWUgIT0KPj4gLQkJICAgICBhbGxvd2VkX3NjbGtf dmRkY190YWJsZS0+ZW50cmllc1tpXS5jbGspKSB7Cj4+IC0JCQlwaS0+ZHBtX3RhYmxlLnNjbGtf dGFibGUuZHBtX2xldmVsc1twaS0KPj4+IGRwbV90YWJsZS5zY2xrX3RhYmxlLmNvdW50XS52YWx1 ZSA9Cj4+IC0JCQkJYWxsb3dlZF9zY2xrX3ZkZGNfdGFibGUtPmVudHJpZXNbaV0uY2xrOwo+PiAt CQkJcGktPmRwbV90YWJsZS5zY2xrX3RhYmxlLmRwbV9sZXZlbHNbcGktCj4+PiBkcG1fdGFibGUu c2Nsa190YWJsZS5jb3VudF0uZW5hYmxlZCA9Cj4+IC0JCQkJKGkgPT0gMCkgPyB0cnVlIDogZmFs c2U7Cj4+IC0JCQlwaS0+ZHBtX3RhYmxlLnNjbGtfdGFibGUuY291bnQrKzsKPj4gLQkJfQo+PiAt CX0KPj4gLQo+PiAtCXBpLT5kcG1fdGFibGUubWNsa190YWJsZS5jb3VudCA9IDA7Cj4+IC0JZm9y IChpID0gMDsgaSA8IGFsbG93ZWRfbWNsa190YWJsZS0+Y291bnQ7IGkrKykgewo+PiAtCQlpZiAo KGkgPT0gMCkgfHwKPj4gLQkJICAgIChwaS0+ZHBtX3RhYmxlLm1jbGtfdGFibGUuZHBtX2xldmVs c1twaS0KPj4+IGRwbV90YWJsZS5tY2xrX3RhYmxlLmNvdW50LTFdLnZhbHVlICE9Cj4+IC0JCSAg ICAgYWxsb3dlZF9tY2xrX3RhYmxlLT5lbnRyaWVzW2ldLmNsaykpIHsKPj4gLQkJCXBpLT5kcG1f dGFibGUubWNsa190YWJsZS5kcG1fbGV2ZWxzW3BpLQo+Pj4gZHBtX3RhYmxlLm1jbGtfdGFibGUu Y291bnRdLnZhbHVlID0KPj4gLQkJCQlhbGxvd2VkX21jbGtfdGFibGUtPmVudHJpZXNbaV0uY2xr Owo+PiAtCQkJcGktPmRwbV90YWJsZS5tY2xrX3RhYmxlLmRwbV9sZXZlbHNbcGktCj4+PiBkcG1f dGFibGUubWNsa190YWJsZS5jb3VudF0uZW5hYmxlZCA9Cj4+IC0JCQkJKGkgPT0gMCkgPyB0cnVl IDogZmFsc2U7Cj4+IC0JCQlwaS0+ZHBtX3RhYmxlLm1jbGtfdGFibGUuY291bnQrKzsKPj4gLQkJ fQo+PiAtCX0KPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBhbGxvd2VkX3NjbGtfdmRkY190YWJs ZS0+Y291bnQ7IGkrKykgewo+PiAtCQlwaS0+ZHBtX3RhYmxlLnZkZGNfdGFibGUuZHBtX2xldmVs c1tpXS52YWx1ZSA9Cj4+IC0JCQlhbGxvd2VkX3NjbGtfdmRkY190YWJsZS0+ZW50cmllc1tpXS52 Owo+PiAtCQlwaS0+ZHBtX3RhYmxlLnZkZGNfdGFibGUuZHBtX2xldmVsc1tpXS5wYXJhbTEgPQo+ PiAtCQkJc3RkX3ZvbHRhZ2VfdGFibGUtPmVudHJpZXNbaV0ubGVha2FnZTsKPj4gLQkJcGktPmRw bV90YWJsZS52ZGRjX3RhYmxlLmRwbV9sZXZlbHNbaV0uZW5hYmxlZCA9IHRydWU7Cj4+IC0JfQo+ PiAtCXBpLT5kcG1fdGFibGUudmRkY190YWJsZS5jb3VudCA9IGFsbG93ZWRfc2Nsa192ZGRjX3Rh YmxlLT5jb3VudDsKPj4gLQo+PiAtCWFsbG93ZWRfbWNsa190YWJsZSA9ICZhZGV2LQo+Pj4gcG0u ZHBtLmR5bl9zdGF0ZS52ZGRjaV9kZXBlbmRlbmN5X29uX21jbGs7Cj4+IC0JaWYgKGFsbG93ZWRf bWNsa190YWJsZSkgewo+PiAtCQlmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZF9tY2xrX3RhYmxlLT5j b3VudDsgaSsrKSB7Cj4+IC0JCQlwaS0+ZHBtX3RhYmxlLnZkZGNpX3RhYmxlLmRwbV9sZXZlbHNb aV0udmFsdWUgPQo+PiAtCQkJCWFsbG93ZWRfbWNsa190YWJsZS0+ZW50cmllc1tpXS52Owo+PiAt CQkJcGktPmRwbV90YWJsZS52ZGRjaV90YWJsZS5kcG1fbGV2ZWxzW2ldLmVuYWJsZWQgPQo+PiB0 cnVlOwo+PiAtCQl9Cj4+IC0JCXBpLT5kcG1fdGFibGUudmRkY2lfdGFibGUuY291bnQgPSBhbGxv d2VkX21jbGtfdGFibGUtCj4+PiBjb3VudDsKPj4gLQl9Cj4+IC0KPj4gLQlhbGxvd2VkX21jbGtf dGFibGUgPSAmYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUubXZkZF9kZXBlbmRlbmN5X29uX21j bGs7Cj4+IC0JaWYgKGFsbG93ZWRfbWNsa190YWJsZSkgewo+PiAtCQlmb3IgKGkgPSAwOyBpIDwg YWxsb3dlZF9tY2xrX3RhYmxlLT5jb3VudDsgaSsrKSB7Cj4+IC0JCQlwaS0+ZHBtX3RhYmxlLm12 ZGRfdGFibGUuZHBtX2xldmVsc1tpXS52YWx1ZSA9Cj4+IC0JCQkJYWxsb3dlZF9tY2xrX3RhYmxl LT5lbnRyaWVzW2ldLnY7Cj4+IC0JCQlwaS0+ZHBtX3RhYmxlLm12ZGRfdGFibGUuZHBtX2xldmVs c1tpXS5lbmFibGVkID0KPj4gdHJ1ZTsKPj4gLQkJfQo+PiAtCQlwaS0+ZHBtX3RhYmxlLm12ZGRf dGFibGUuY291bnQgPSBhbGxvd2VkX21jbGtfdGFibGUtCj4+PiBjb3VudDsKPj4gLQl9Cj4+IC0K Pj4gLQljaV9zZXR1cF9kZWZhdWx0X3BjaWVfdGFibGVzKGFkZXYpOwo+PiAtCj4+IC0JLyogc2F2 ZSBhIGNvcHkgb2YgdGhlIGRlZmF1bHQgRFBNIHRhYmxlICovCj4+IC0JbWVtY3B5KCYocGktPmdv bGRlbl9kcG1fdGFibGUpLCAmKHBpLT5kcG1fdGFibGUpLAo+PiAtCQkJc2l6ZW9mKHN0cnVjdCBj aV9kcG1fdGFibGUpKTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMg aW50IGNpX2ZpbmRfYm9vdF9sZXZlbChzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSAqdGFibGUs Cj4+IC0JCQkgICAgICB1MzIgdmFsdWUsIHUzMiAqYm9vdF9sZXZlbCkKPj4gLXsKPj4gLQl1MzIg aTsKPj4gLQlpbnQgcmV0ID0gLUVJTlZBTDsKPj4gLQo+PiAtCWZvcihpID0gMDsgaSA8IHRhYmxl LT5jb3VudDsgaSsrKSB7Cj4+IC0JCWlmICh2YWx1ZSA9PSB0YWJsZS0+ZHBtX2xldmVsc1tpXS52 YWx1ZSkgewo+PiAtCQkJKmJvb3RfbGV2ZWwgPSBpOwo+PiAtCQkJcmV0ID0gMDsKPj4gLQkJfQo+ PiAtCX0KPj4gLQo+PiAtCXJldHVybiByZXQ7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lf aW5pdF9zbWNfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3Ry dWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBjaV91 bHZfcGFybSAqdWx2ID0gJnBpLT51bHY7Cj4+IC0Jc3RydWN0IGFtZGdwdV9wcyAqYW1kZ3B1X2Jv b3Rfc3RhdGUgPSBhZGV2LT5wbS5kcG0uYm9vdF9wczsKPj4gLQlTTVU3X0Rpc2NyZXRlX0RwbVRh YmxlICp0YWJsZSA9ICZwaS0+c21jX3N0YXRlX3RhYmxlOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4g LQlyZXQgPSBjaV9zZXR1cF9kZWZhdWx0X2RwbV90YWJsZXMoYWRldik7Cj4+IC0JaWYgKHJldCkK Pj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCWlmIChwaS0+dm9sdGFnZV9jb250cm9sICE9IENJ U0xBTkRTX1ZPTFRBR0VfQ09OVFJPTF9OT05FKQo+PiAtCQljaV9wb3B1bGF0ZV9zbWNfdm9sdGFn ZV90YWJsZXMoYWRldiwgdGFibGUpOwo+PiAtCj4+IC0JY2lfaW5pdF9mcHNfbGltaXRzKGFkZXYp Owo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmRwbS5wbGF0Zm9ybV9jYXBzICYKPj4gQVRPTV9QUF9Q TEFURk9STV9DQVBfSEFSRFdBUkVEQykKPj4gLQkJdGFibGUtPlN5c3RlbUZsYWdzIHw9IFBQU01D X1NZU1RFTUZMQUdfR1BJT19EQzsKPj4gLQo+PiAtCWlmIChhZGV2LT5wbS5kcG0ucGxhdGZvcm1f Y2FwcyAmCj4+IEFUT01fUFBfUExBVEZPUk1fQ0FQX1NURVBWRERDKQo+PiAtCQl0YWJsZS0+U3lz dGVtRmxhZ3MgfD0gUFBTTUNfU1lTVEVNRkxBR19TVEVQVkREQzsKPj4gLQo+PiAtCWlmIChhZGV2 LT5nbWMudnJhbV90eXBlID09IEFNREdQVV9WUkFNX1RZUEVfR0REUjUpCj4+IC0JCXRhYmxlLT5T eXN0ZW1GbGFncyB8PSBQUFNNQ19TWVNURU1GTEFHX0dERFI1Owo+PiAtCj4+IC0JaWYgKHVsdi0+ c3VwcG9ydGVkKSB7Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRlX3Vsdl9zdGF0ZShhZGV2LCAmcGkt Cj4+PiBzbWNfc3RhdGVfdGFibGUuVWx2KTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiBy ZXQ7Cj4+IC0JCVdSRUczMl9TTUMoaXhDR19VTFZfUEFSQU1FVEVSLCB1bHYtCj4+PiBjZ191bHZf cGFyYW1ldGVyKTsKPj4gLQl9Cj4+IC0KPj4gLQlyZXQgPSBjaV9wb3B1bGF0ZV9hbGxfZ3JhcGhp Y19sZXZlbHMoYWRldik7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAt CXJldCA9IGNpX3BvcHVsYXRlX2FsbF9tZW1vcnlfbGV2ZWxzKGFkZXYpOwo+PiAtCWlmIChyZXQp Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQljaV9wb3B1bGF0ZV9zbWNfbGlua19sZXZlbChh ZGV2LCB0YWJsZSk7Cj4+IC0KPj4gLQlyZXQgPSBjaV9wb3B1bGF0ZV9zbWNfYWNwaV9sZXZlbChh ZGV2LCB0YWJsZSk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXJl dCA9IGNpX3BvcHVsYXRlX3NtY192Y2VfbGV2ZWwoYWRldiwgdGFibGUpOwo+PiAtCWlmIChyZXQp Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBjaV9wb3B1bGF0ZV9zbWNfYWNwX2xl dmVsKGFkZXYsIHRhYmxlKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+ IC0JcmV0ID0gY2lfcG9wdWxhdGVfc21jX3NhbXVfbGV2ZWwoYWRldiwgdGFibGUpOwo+PiAtCWlm IChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBjaV9kb19wcm9ncmFtX21l bW9yeV90aW1pbmdfcGFyYW1ldGVycyhhZGV2KTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4g cmV0Owo+PiAtCj4+IC0JcmV0ID0gY2lfcG9wdWxhdGVfc21jX3V2ZF9sZXZlbChhZGV2LCB0YWJs ZSk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXRhYmxlLT5VdmRC b290TGV2ZWwgID0gMDsKPj4gLQl0YWJsZS0+VmNlQm9vdExldmVsICA9IDA7Cj4+IC0JdGFibGUt PkFjcEJvb3RMZXZlbCAgPSAwOwo+PiAtCXRhYmxlLT5TYW11Qm9vdExldmVsICA9IDA7Cj4+IC0J dGFibGUtPkdyYXBoaWNzQm9vdExldmVsICA9IDA7Cj4+IC0JdGFibGUtPk1lbW9yeUJvb3RMZXZl bCAgPSAwOwo+PiAtCj4+IC0JcmV0ID0gY2lfZmluZF9ib290X2xldmVsKCZwaS0+ZHBtX3RhYmxl LnNjbGtfdGFibGUsCj4+IC0JCQkJIHBpLT52Ymlvc19ib290X3N0YXRlLnNjbGtfYm9vdHVwX3Zh bHVlLAo+PiAtCQkJCSAodTMyICopJnBpLQo+Pj4gc21jX3N0YXRlX3RhYmxlLkdyYXBoaWNzQm9v dExldmVsKTsKPj4gLQo+PiAtCXJldCA9IGNpX2ZpbmRfYm9vdF9sZXZlbCgmcGktPmRwbV90YWJs ZS5tY2xrX3RhYmxlLAo+PiAtCQkJCSBwaS0+dmJpb3NfYm9vdF9zdGF0ZS5tY2xrX2Jvb3R1cF92 YWx1ZSwKPj4gLQkJCQkgKHUzMiAqKSZwaS0KPj4+IHNtY19zdGF0ZV90YWJsZS5NZW1vcnlCb290 TGV2ZWwpOwo+PiAtCj4+IC0JdGFibGUtPkJvb3RWZGRjID0gcGktPnZiaW9zX2Jvb3Rfc3RhdGUu dmRkY19ib290dXBfdmFsdWU7Cj4+IC0JdGFibGUtPkJvb3RWZGRjaSA9IHBpLT52Ymlvc19ib290 X3N0YXRlLnZkZGNpX2Jvb3R1cF92YWx1ZTsKPj4gLQl0YWJsZS0+Qm9vdE1WZGQgPSBwaS0+dmJp b3NfYm9vdF9zdGF0ZS5tdmRkX2Jvb3R1cF92YWx1ZTsKPj4gLQo+PiAtCWNpX3BvcHVsYXRlX3Nt Y19pbml0aWFsX3N0YXRlKGFkZXYsIGFtZGdwdV9ib290X3N0YXRlKTsKPj4gLQo+PiAtCXJldCA9 IGNpX3BvcHVsYXRlX2JhcG1fcGFyYW1ldGVyc19pbl9kcG1fdGFibGUoYWRldik7Cj4+IC0JaWYg KHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXRhYmxlLT5VVkRJbnRlcnZhbCA9IDE7 Cj4+IC0JdGFibGUtPlZDRUludGVydmFsID0gMTsKPj4gLQl0YWJsZS0+QUNQSW50ZXJ2YWwgPSAx Owo+PiAtCXRhYmxlLT5TQU1VSW50ZXJ2YWwgPSAxOwo+PiAtCXRhYmxlLT5HcmFwaGljc1ZvbHRh Z2VDaGFuZ2VFbmFibGUgPSAxOwo+PiAtCXRhYmxlLT5HcmFwaGljc1RoZXJtVGhyb3R0bGVFbmFi bGUgPSAxOwo+PiAtCXRhYmxlLT5HcmFwaGljc0ludGVydmFsID0gMTsKPj4gLQl0YWJsZS0+Vm9s dGFnZUludGVydmFsID0gMTsKPj4gLQl0YWJsZS0+VGhlcm1hbEludGVydmFsID0gMTsKPj4gLQl0 YWJsZS0+VGVtcGVyYXR1cmVMaW1pdEhpZ2ggPSAodTE2KSgocGktCj4+PiB0aGVybWFsX3RlbXBf c2V0dGluZy50ZW1wZXJhdHVyZV9oaWdoICoKPj4gLQo+PiBDSVNMQU5EU19RODhfRk9STUFUX0NP TlZFUlNJT05fVU5JVCkgLyAxMDAwKTsKPj4gLQl0YWJsZS0+VGVtcGVyYXR1cmVMaW1pdExvdyA9 ICh1MTYpKChwaS0KPj4+IHRoZXJtYWxfdGVtcF9zZXR0aW5nLnRlbXBlcmF0dXJlX2xvdyAqCj4+ IC0KPj4gQ0lTTEFORFNfUTg4X0ZPUk1BVF9DT05WRVJTSU9OX1VOSVQpIC8gMTAwMCk7Cj4+IC0J dGFibGUtPk1lbW9yeVZvbHRhZ2VDaGFuZ2VFbmFibGUgPSAxOwo+PiAtCXRhYmxlLT5NZW1vcnlJ bnRlcnZhbCA9IDE7Cj4+IC0JdGFibGUtPlZvbHRhZ2VSZXNwb25zZVRpbWUgPSAwOwo+PiAtCXRh YmxlLT5WZGRjVmRkY2lEZWx0YSA9IDQwMDA7Cj4+IC0JdGFibGUtPlBoYXNlUmVzcG9uc2VUaW1l ID0gMDsKPj4gLQl0YWJsZS0+TWVtb3J5VGhlcm1UaHJvdHRsZUVuYWJsZSA9IDE7Cj4+IC0JdGFi bGUtPlBDSWVCb290TGlua0xldmVsID0gcGktPmRwbV90YWJsZS5wY2llX3NwZWVkX3RhYmxlLmNv dW50Cj4+IC0gMTsKPj4gLQl0YWJsZS0+UENJZUdlbkludGVydmFsID0gMTsKPj4gLQlpZiAocGkt PnZvbHRhZ2VfY29udHJvbCA9PSBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xfQllfU1ZJRDIpCj4+ IC0JCXRhYmxlLT5TVkkyRW5hYmxlICA9IDE7Cj4+IC0JZWxzZQo+PiAtCQl0YWJsZS0+U1ZJMkVu YWJsZSAgPSAwOwo+PiAtCj4+IC0JdGFibGUtPlRoZXJtR3BpbyA9IDE3Owo+PiAtCXRhYmxlLT5T Y2xrU3RlcFNpemUgPSAweDQwMDA7Cj4+IC0KPj4gLQl0YWJsZS0+U3lzdGVtRmxhZ3MgPSBjcHVf dG9fYmUzMih0YWJsZS0+U3lzdGVtRmxhZ3MpOwo+PiAtCXRhYmxlLT5TbWlvTWFza1ZkZGNWaWQg PSBjcHVfdG9fYmUzMih0YWJsZS0+U21pb01hc2tWZGRjVmlkKTsKPj4gLQl0YWJsZS0+U21pb01h c2tWZGRjUGhhc2UgPSBjcHVfdG9fYmUzMih0YWJsZS0KPj4+IFNtaW9NYXNrVmRkY1BoYXNlKTsK Pj4gLQl0YWJsZS0+U21pb01hc2tWZGRjaVZpZCA9IGNwdV90b19iZTMyKHRhYmxlLQo+Pj4gU21p b01hc2tWZGRjaVZpZCk7Cj4+IC0JdGFibGUtPlNtaW9NYXNrTXZkZFZpZCA9IGNwdV90b19iZTMy KHRhYmxlLQo+Pj4gU21pb01hc2tNdmRkVmlkKTsKPj4gLQl0YWJsZS0+U2Nsa1N0ZXBTaXplID0g Y3B1X3RvX2JlMzIodGFibGUtPlNjbGtTdGVwU2l6ZSk7Cj4+IC0JdGFibGUtPlRlbXBlcmF0dXJl TGltaXRIaWdoID0gY3B1X3RvX2JlMTYodGFibGUtCj4+PiBUZW1wZXJhdHVyZUxpbWl0SGlnaCk7 Cj4+IC0JdGFibGUtPlRlbXBlcmF0dXJlTGltaXRMb3cgPSBjcHVfdG9fYmUxNih0YWJsZS0KPj4+ IFRlbXBlcmF0dXJlTGltaXRMb3cpOwo+PiAtCXRhYmxlLT5WZGRjVmRkY2lEZWx0YSA9IGNwdV90 b19iZTE2KHRhYmxlLT5WZGRjVmRkY2lEZWx0YSk7Cj4+IC0JdGFibGUtPlZvbHRhZ2VSZXNwb25z ZVRpbWUgPSBjcHVfdG9fYmUxNih0YWJsZS0KPj4+IFZvbHRhZ2VSZXNwb25zZVRpbWUpOwo+PiAt CXRhYmxlLT5QaGFzZVJlc3BvbnNlVGltZSA9IGNwdV90b19iZTE2KHRhYmxlLQo+Pj4gUGhhc2VS ZXNwb25zZVRpbWUpOwo+PiAtCXRhYmxlLT5Cb290VmRkYyA9IGNwdV90b19iZTE2KHRhYmxlLT5C b290VmRkYyAqCj4+IFZPTFRBR0VfU0NBTEUpOwo+PiAtCXRhYmxlLT5Cb290VmRkY2kgPSBjcHVf dG9fYmUxNih0YWJsZS0+Qm9vdFZkZGNpICoKPj4gVk9MVEFHRV9TQ0FMRSk7Cj4+IC0JdGFibGUt PkJvb3RNVmRkID0gY3B1X3RvX2JlMTYodGFibGUtPkJvb3RNVmRkICoKPj4gVk9MVEFHRV9TQ0FM RSk7Cj4+IC0KPj4gLQlyZXQgPSBhbWRncHVfY2lfY29weV9ieXRlc190b19zbWMoYWRldiwKPj4g LQkJCQkgICBwaS0+ZHBtX3RhYmxlX3N0YXJ0ICsKPj4gLQkJCQkgICBvZmZzZXRvZihTTVU3X0Rp c2NyZXRlX0RwbVRhYmxlLAo+PiBTeXN0ZW1GbGFncyksCj4+IC0JCQkJICAgKHU4ICopJnRhYmxl LT5TeXN0ZW1GbGFncywKPj4gLQkJCQkgICBzaXplb2YoU01VN19EaXNjcmV0ZV9EcG1UYWJsZSkg LSAzICoKPj4gc2l6ZW9mKFNNVTdfUElEQ29udHJvbGxlciksCj4+IC0JCQkJICAgcGktPnNyYW1f ZW5kKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcmV0dXJuIDA7 Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX3RyaW1fc2luZ2xlX2RwbV9zdGF0ZXMoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJICAgICAgc3RydWN0IGNpX3NpbmdsZV9k cG1fdGFibGUgKmRwbV90YWJsZSwKPj4gLQkJCQkgICAgICB1MzIgbG93X2xpbWl0LCB1MzIgaGln aF9saW1pdCkKPj4gLXsKPj4gLQl1MzIgaTsKPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBkcG1f dGFibGUtPmNvdW50OyBpKyspIHsKPj4gLQkJaWYgKChkcG1fdGFibGUtPmRwbV9sZXZlbHNbaV0u dmFsdWUgPCBsb3dfbGltaXQpIHx8Cj4+IC0JCSAgICAoZHBtX3RhYmxlLT5kcG1fbGV2ZWxzW2ld LnZhbHVlID4gaGlnaF9saW1pdCkpCj4+IC0JCQlkcG1fdGFibGUtPmRwbV9sZXZlbHNbaV0uZW5h YmxlZCA9IGZhbHNlOwo+PiAtCQllbHNlCj4+IC0JCQlkcG1fdGFibGUtPmRwbV9sZXZlbHNbaV0u ZW5hYmxlZCA9IHRydWU7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV90cmlt X3BjaWVfZHBtX3N0YXRlcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJCQkgICAg dTMyIHNwZWVkX2xvdywgdTMyIGxhbmVzX2xvdywKPj4gLQkJCQkgICAgdTMyIHNwZWVkX2hpZ2gs IHUzMiBsYW5lc19oaWdoKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNp X2dldF9waShhZGV2KTsKPj4gLQlzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSAqcGNpZV90YWJs ZSA9ICZwaS0KPj4+IGRwbV90YWJsZS5wY2llX3NwZWVkX3RhYmxlOwo+PiAtCXUzMiBpLCBqOwo+ PiAtCj4+IC0JZm9yIChpID0gMDsgaSA8IHBjaWVfdGFibGUtPmNvdW50OyBpKyspIHsKPj4gLQkJ aWYgKChwY2llX3RhYmxlLT5kcG1fbGV2ZWxzW2ldLnZhbHVlIDwgc3BlZWRfbG93KSB8fAo+PiAt CQkgICAgKHBjaWVfdGFibGUtPmRwbV9sZXZlbHNbaV0ucGFyYW0xIDwgbGFuZXNfbG93KSB8fAo+ PiAtCQkgICAgKHBjaWVfdGFibGUtPmRwbV9sZXZlbHNbaV0udmFsdWUgPiBzcGVlZF9oaWdoKSB8 fAo+PiAtCQkgICAgKHBjaWVfdGFibGUtPmRwbV9sZXZlbHNbaV0ucGFyYW0xID4gbGFuZXNfaGln aCkpCj4+IC0JCQlwY2llX3RhYmxlLT5kcG1fbGV2ZWxzW2ldLmVuYWJsZWQgPSBmYWxzZTsKPj4g LQkJZWxzZQo+PiAtCQkJcGNpZV90YWJsZS0+ZHBtX2xldmVsc1tpXS5lbmFibGVkID0gdHJ1ZTsK Pj4gLQl9Cj4+IC0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgcGNpZV90YWJsZS0+Y291bnQ7IGkrKykg ewo+PiAtCQlpZiAocGNpZV90YWJsZS0+ZHBtX2xldmVsc1tpXS5lbmFibGVkKSB7Cj4+IC0JCQlm b3IgKGogPSBpICsgMTsgaiA8IHBjaWVfdGFibGUtPmNvdW50OyBqKyspIHsKPj4gLQkJCQlpZiAo cGNpZV90YWJsZS0+ZHBtX2xldmVsc1tqXS5lbmFibGVkKSB7Cj4+IC0JCQkJCWlmICgocGNpZV90 YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZQo+PiA9PSBwY2llX3RhYmxlLT5kcG1fbGV2ZWxzW2pd LnZhbHVlKSAmJgo+PiAtCQkJCQkgICAgKHBjaWVfdGFibGUtPmRwbV9sZXZlbHNbaV0ucGFyYW0x Cj4+ID09IHBjaWVfdGFibGUtPmRwbV9sZXZlbHNbal0ucGFyYW0xKSkKPj4gLQkJCQkJCXBjaWVf dGFibGUtCj4+PiBkcG1fbGV2ZWxzW2pdLmVuYWJsZWQgPSBmYWxzZTsKPj4gLQkJCQl9Cj4+IC0J CQl9Cj4+IC0JCX0KPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfdHJpbV9kcG1f c3RhdGVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJICAgICAgc3RydWN0IGFt ZGdwdV9wcyAqYW1kZ3B1X3N0YXRlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wcyAqc3RhdGUgPSBj aV9nZXRfcHMoYW1kZ3B1X3N0YXRlKTsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBj aV9nZXRfcGkoYWRldik7Cj4+IC0JdTMyIGhpZ2hfbGltaXRfY291bnQ7Cj4+IC0KPj4gLQlpZiAo c3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50IDwgMSkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4+IC0KPj4gLQlpZiAoc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50ID09IDEpCj4+IC0J CWhpZ2hfbGltaXRfY291bnQgPSAwOwo+PiAtCWVsc2UKPj4gLQkJaGlnaF9saW1pdF9jb3VudCA9 IDE7Cj4+IC0KPj4gLQljaV90cmltX3NpbmdsZV9kcG1fc3RhdGVzKGFkZXYsCj4+IC0JCQkJICAm cGktPmRwbV90YWJsZS5zY2xrX3RhYmxlLAo+PiAtCQkJCSAgc3RhdGUtPnBlcmZvcm1hbmNlX2xl dmVsc1swXS5zY2xrLAo+PiAtCQkJCSAgc3RhdGUtCj4+PiBwZXJmb3JtYW5jZV9sZXZlbHNbaGln aF9saW1pdF9jb3VudF0uc2Nsayk7Cj4+IC0KPj4gLQljaV90cmltX3NpbmdsZV9kcG1fc3RhdGVz KGFkZXYsCj4+IC0JCQkJICAmcGktPmRwbV90YWJsZS5tY2xrX3RhYmxlLAo+PiAtCQkJCSAgc3Rh dGUtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5tY2xrLAo+PiAtCQkJCSAgc3RhdGUtCj4+PiBwZXJm b3JtYW5jZV9sZXZlbHNbaGlnaF9saW1pdF9jb3VudF0ubWNsayk7Cj4+IC0KPj4gLQljaV90cmlt X3BjaWVfZHBtX3N0YXRlcyhhZGV2LAo+PiAtCQkJCXN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNb MF0ucGNpZV9nZW4sCj4+IC0JCQkJc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsc1swXS5wY2llX2xh bmUsCj4+IC0JCQkJc3RhdGUtCj4+PiBwZXJmb3JtYW5jZV9sZXZlbHNbaGlnaF9saW1pdF9jb3Vu dF0ucGNpZV9nZW4sCj4+IC0JCQkJc3RhdGUtCj4+PiBwZXJmb3JtYW5jZV9sZXZlbHNbaGlnaF9s aW1pdF9jb3VudF0ucGNpZV9sYW5lKTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+ IC1zdGF0aWMgaW50IGNpX2FwcGx5X2Rpc3BfbWluaW11bV92b2x0YWdlX3JlcXVlc3Qoc3RydWN0 IGFtZGdwdV9kZXZpY2UKPj4gKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdwdV9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUKPj4gKmRpc3Bfdm9sdGFnZV90YWJsZSA9Cj4+IC0JCSZh ZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNwY2xrOwo+PiAtCXN0 cnVjdCBhbWRncHVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICp2ZGRjX3RhYmxlID0K Pj4gLQkJJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGs7Cj4+ IC0JdTMyIHJlcXVlc3RlZF92b2x0YWdlID0gMDsKPj4gLQl1MzIgaTsKPj4gLQo+PiAtCWlmIChk aXNwX3ZvbHRhZ2VfdGFibGUgPT0gTlVMTCkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JaWYg KCFkaXNwX3ZvbHRhZ2VfdGFibGUtPmNvdW50KQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+ PiAtCWZvciAoaSA9IDA7IGkgPCBkaXNwX3ZvbHRhZ2VfdGFibGUtPmNvdW50OyBpKyspIHsKPj4g LQkJaWYgKGFkZXYtPmNsb2NrLmN1cnJlbnRfZGlzcGNsayA9PSBkaXNwX3ZvbHRhZ2VfdGFibGUt Cj4+PiBlbnRyaWVzW2ldLmNsaykKPj4gLQkJCXJlcXVlc3RlZF92b2x0YWdlID0gZGlzcF92b2x0 YWdlX3RhYmxlLQo+Pj4gZW50cmllc1tpXS52Owo+PiAtCX0KPj4gLQo+PiAtCWZvciAoaSA9IDA7 IGkgPCB2ZGRjX3RhYmxlLT5jb3VudDsgaSsrKSB7Cj4+IC0JCWlmIChyZXF1ZXN0ZWRfdm9sdGFn ZSA8PSB2ZGRjX3RhYmxlLT5lbnRyaWVzW2ldLnYpIHsKPj4gLQkJCXJlcXVlc3RlZF92b2x0YWdl ID0gdmRkY190YWJsZS0+ZW50cmllc1tpXS52Owo+PiAtCQkJcmV0dXJuCj4+IChhbWRncHVfY2lf c2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGFkZXYsCj4+IC0KPj4gUFBTTUNfTVNHX1Zk ZENfUmVxdWVzdCwKPj4gLQo+PiByZXF1ZXN0ZWRfdm9sdGFnZSAqIFZPTFRBR0VfU0NBTEUpID09 IFBQU01DX1Jlc3VsdF9PSykgPwo+PiAtCQkJCTAgOiAtRUlOVkFMOwo+PiAtCQl9Cj4+IC0JfQo+ PiAtCj4+IC0JcmV0dXJuIC1FSU5WQUw7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfdXBs b2FkX2RwbV9sZXZlbF9lbmFibGVfbWFzayhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4g LXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0J UFBTTUNfUmVzdWx0IHJlc3VsdDsKPj4gLQo+PiAtCWNpX2FwcGx5X2Rpc3BfbWluaW11bV92b2x0 YWdlX3JlcXVlc3QoYWRldik7Cj4+IC0KPj4gLQlpZiAoIXBpLT5zY2xrX2RwbV9rZXlfZGlzYWJs ZWQpIHsKPj4gLQkJaWYgKHBpLT5kcG1fbGV2ZWxfZW5hYmxlX21hc2suc2Nsa19kcG1fZW5hYmxl X21hc2spIHsKPj4gLQkJCXJlc3VsdCA9Cj4+IGFtZGdwdV9jaV9zZW5kX21zZ190b19zbWNfd2l0 aF9wYXJhbWV0ZXIoYWRldiwKPj4gLQo+PiBQUFNNQ19NU0dfU0NMS0RQTV9TZXRFbmFibGVkTWFz aywKPj4gLQkJCQkJCQkJICAgcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21hc2suc2Nsa19kcG1f ZW5hYmxlX21hc2spOwo+PiAtCQkJaWYgKHJlc3VsdCAhPSBQUFNNQ19SZXN1bHRfT0spCj4+IC0J CQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4gLQlpZiAoIXBpLT5tY2xr X2RwbV9rZXlfZGlzYWJsZWQpIHsKPj4gLQkJaWYgKHBpLT5kcG1fbGV2ZWxfZW5hYmxlX21hc2su bWNsa19kcG1fZW5hYmxlX21hc2spIHsKPj4gLQkJCXJlc3VsdCA9Cj4+IGFtZGdwdV9jaV9zZW5k X21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwKPj4gLQo+PiBQUFNNQ19NU0dfTUNMS0RQ TV9TZXRFbmFibGVkTWFzaywKPj4gLQkJCQkJCQkJICAgcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxl X21hc2subWNsa19kcG1fZW5hYmxlX21hc2spOwo+PiAtCQkJaWYgKHJlc3VsdCAhPSBQUFNNQ19S ZXN1bHRfT0spCj4+IC0JCQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4g LSNpZiAwCj4+IC0JaWYgKCFwaS0+cGNpZV9kcG1fa2V5X2Rpc2FibGVkKSB7Cj4+IC0JCWlmIChw aS0+ZHBtX2xldmVsX2VuYWJsZV9tYXNrLnBjaWVfZHBtX2VuYWJsZV9tYXNrKSB7Cj4+IC0JCQly ZXN1bHQgPQo+PiBhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGFkZXYs Cj4+IC0KPj4gUFBTTUNfTVNHX1BDSWVEUE1fU2V0RW5hYmxlZE1hc2ssCj4+IC0JCQkJCQkJCSAg IHBpLQo+Pj4gZHBtX2xldmVsX2VuYWJsZV9tYXNrLnBjaWVfZHBtX2VuYWJsZV9tYXNrKTsKPj4g LQkJCWlmIChyZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQo+PiAtCQkJCXJldHVybiAtRUlOVkFM Owo+PiAtCQl9Cj4+IC0JfQo+PiAtI2VuZGlmCj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4g LQo+PiAtc3RhdGljIHZvaWQgY2lfZmluZF9kcG1fc3RhdGVzX2Nsb2Nrc19pbl9kcG1fdGFibGUo c3RydWN0IGFtZGdwdV9kZXZpY2UKPj4gKmFkZXYsCj4+IC0JCQkJCQkgICBzdHJ1Y3QgYW1kZ3B1 X3BzCj4+ICphbWRncHVfc3RhdGUpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBp ID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBjaV9wcyAqc3RhdGUgPSBjaV9nZXRfcHMo YW1kZ3B1X3N0YXRlKTsKPj4gLQlzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSAqc2Nsa190YWJs ZSA9ICZwaS0+ZHBtX3RhYmxlLnNjbGtfdGFibGU7Cj4+IC0JdTMyIHNjbGsgPSBzdGF0ZS0+cGVy Zm9ybWFuY2VfbGV2ZWxzW3N0YXRlLQo+Pj4gcGVyZm9ybWFuY2VfbGV2ZWxfY291bnQtMV0uc2Ns azsKPj4gLQlzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSAqbWNsa190YWJsZSA9ICZwaS0KPj4+ IGRwbV90YWJsZS5tY2xrX3RhYmxlOwo+PiAtCXUzMiBtY2xrID0gc3RhdGUtPnBlcmZvcm1hbmNl X2xldmVsc1tzdGF0ZS0KPj4+IHBlcmZvcm1hbmNlX2xldmVsX2NvdW50LTFdLm1jbGs7Cj4+IC0J dTMyIGk7Cj4+IC0KPj4gLQlwaS0+bmVlZF91cGRhdGVfc211N19kcG1fdGFibGUgPSAwOwo+PiAt Cj4+IC0JZm9yIChpID0gMDsgaSA8IHNjbGtfdGFibGUtPmNvdW50OyBpKyspIHsKPj4gLQkJaWYg KHNjbGsgPT0gc2Nsa190YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSkKPj4gLQkJCWJyZWFrOwo+ PiAtCX0KPj4gLQo+PiAtCWlmIChpID49IHNjbGtfdGFibGUtPmNvdW50KSB7Cj4+IC0JCXBpLT5u ZWVkX3VwZGF0ZV9zbXU3X2RwbV90YWJsZSB8PQo+PiBEUE1UQUJMRV9PRF9VUERBVEVfU0NMSzsK Pj4gLQl9IGVsc2Ugewo+PiAtCQkvKiBYWFggY2hlY2sgZGlzcGxheSBtaW4gY2xvY2sgcmVxdWly ZW1lbnRzICovCj4+IC0JCWlmIChDSVNMQU5EX01JTklNVU1fRU5HSU5FX0NMT0NLICE9Cj4+IENJ U0xBTkRfTUlOSU1VTV9FTkdJTkVfQ0xPQ0spCj4+IC0JCQlwaS0+bmVlZF91cGRhdGVfc211N19k cG1fdGFibGUgfD0KPj4gRFBNVEFCTEVfVVBEQVRFX1NDTEs7Cj4+IC0JfQo+PiAtCj4+IC0JZm9y IChpID0gMDsgaSA8IG1jbGtfdGFibGUtPmNvdW50OyBpKyspIHsKPj4gLQkJaWYgKG1jbGsgPT0g bWNsa190YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSkKPj4gLQkJCWJyZWFrOwo+PiAtCX0KPj4g LQo+PiAtCWlmIChpID49IG1jbGtfdGFibGUtPmNvdW50KQo+PiAtCQlwaS0+bmVlZF91cGRhdGVf c211N19kcG1fdGFibGUgfD0KPj4gRFBNVEFCTEVfT0RfVVBEQVRFX01DTEs7Cj4+IC0KPj4gLQlp ZiAoYWRldi0+cG0uZHBtLmN1cnJlbnRfYWN0aXZlX2NydGNfY291bnQgIT0KPj4gLQkgICAgYWRl di0+cG0uZHBtLm5ld19hY3RpdmVfY3J0Y19jb3VudCkKPj4gLQkJcGktPm5lZWRfdXBkYXRlX3Nt dTdfZHBtX3RhYmxlIHw9Cj4+IERQTVRBQkxFX1VQREFURV9NQ0xLOwo+PiAtfQo+PiAtCj4+IC1z dGF0aWMgaW50IGNpX3BvcHVsYXRlX2FuZF91cGxvYWRfc2Nsa19tY2xrX2RwbV9sZXZlbHMoc3Ry dWN0Cj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCQkgICAgICAgc3RydWN0IGFtZGdw dV9wcwo+PiAqYW1kZ3B1X3N0YXRlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpw aSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnN0YXRlID0gY2lfZ2V0X3Bz KGFtZGdwdV9zdGF0ZSk7Cj4+IC0JdTMyIHNjbGsgPSBzdGF0ZS0+cGVyZm9ybWFuY2VfbGV2ZWxz W3N0YXRlLQo+Pj4gcGVyZm9ybWFuY2VfbGV2ZWxfY291bnQtMV0uc2NsazsKPj4gLQl1MzIgbWNs ayA9IHN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbc3RhdGUtCj4+PiBwZXJmb3JtYW5jZV9sZXZl bF9jb3VudC0xXS5tY2xrOwo+PiAtCXN0cnVjdCBjaV9kcG1fdGFibGUgKmRwbV90YWJsZSA9ICZw aS0+ZHBtX3RhYmxlOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlpZiAoIXBpLT5uZWVkX3VwZGF0 ZV9zbXU3X2RwbV90YWJsZSkKPj4gLQkJcmV0dXJuIDA7Cj4+IC0KPj4gLQlpZiAocGktPm5lZWRf dXBkYXRlX3NtdTdfZHBtX3RhYmxlICYKPj4gRFBNVEFCTEVfT0RfVVBEQVRFX1NDTEspCj4+IC0J CWRwbV90YWJsZS0+c2Nsa190YWJsZS5kcG1fbGV2ZWxzW2RwbV90YWJsZS0KPj4+IHNjbGtfdGFi bGUuY291bnQtMV0udmFsdWUgPSBzY2xrOwo+PiAtCj4+IC0JaWYgKHBpLT5uZWVkX3VwZGF0ZV9z bXU3X2RwbV90YWJsZSAmCj4+IERQTVRBQkxFX09EX1VQREFURV9NQ0xLKQo+PiAtCQlkcG1fdGFi bGUtPm1jbGtfdGFibGUuZHBtX2xldmVsc1tkcG1fdGFibGUtCj4+PiBtY2xrX3RhYmxlLmNvdW50 LTFdLnZhbHVlID0gbWNsazsKPj4gLQo+PiAtCWlmIChwaS0+bmVlZF91cGRhdGVfc211N19kcG1f dGFibGUgJgo+PiAoRFBNVEFCTEVfT0RfVVBEQVRFX1NDTEsgfCBEUE1UQUJMRV9VUERBVEVfU0NM SykpIHsKPj4gLQkJcmV0ID0gY2lfcG9wdWxhdGVfYWxsX2dyYXBoaWNfbGV2ZWxzKGFkZXYpOwo+ PiAtCQlpZiAocmV0KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAocGkt Pm5lZWRfdXBkYXRlX3NtdTdfZHBtX3RhYmxlICYKPj4gKERQTVRBQkxFX09EX1VQREFURV9NQ0xL IHwgRFBNVEFCTEVfVVBEQVRFX01DTEspKSB7Cj4+IC0JCXJldCA9IGNpX3BvcHVsYXRlX2FsbF9t ZW1vcnlfbGV2ZWxzKGFkZXYpOwo+PiAtCQlpZiAocmV0KQo+PiAtCQkJcmV0dXJuIHJldDsKPj4g LQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9lbmFi bGVfdXZkX2RwbShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpCj4+IC17 Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCWNv bnN0IHN0cnVjdCBhbWRncHVfY2xvY2tfYW5kX3ZvbHRhZ2VfbGltaXRzICptYXhfbGltaXRzOwo+ PiAtCWludCBpOwo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmFjX3Bvd2VyKQo+PiAtCQltYXhfbGlt aXRzID0gJmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2Fj Owo+PiAtCWVsc2UKPj4gLQkJbWF4X2xpbWl0cyA9ICZhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0 ZS5tYXhfY2xvY2tfdm9sdGFnZV9vbl9kYzsKPj4gLQo+PiAtCWlmIChlbmFibGUpIHsKPj4gLQkJ cGktPmRwbV9sZXZlbF9lbmFibGVfbWFzay51dmRfZHBtX2VuYWJsZV9tYXNrID0gMDsKPj4gLQo+ PiAtCQlmb3IgKGkgPSBhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS51dmRfY2xvY2tfdm9sdGFn ZV9kZXBlbmRlbmN5X3RhYmxlLmNvdW50IC0gMTsgaSA+PSAwOwo+PiBpLS0pIHsKPj4gLQkJCWlm IChhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS51dmRfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5 X3RhYmxlLmVudHJpZXNbaV0udiA8PQo+PiBtYXhfbGltaXRzLT52ZGRjKSB7Cj4+IC0JCQkJcGkt Cj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21hc2sudXZkX2RwbV9lbmFibGVfbWFzayB8PSAxIDw8IGk7 Cj4+IC0KPj4gLQkJCQlpZiAoIXBpLT5jYXBzX3V2ZF9kcG0pCj4+IC0JCQkJCWJyZWFrOwo+PiAt CQkJfQo+PiAtCQl9Cj4+IC0KPj4gLQkJYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtY193aXRoX3Bh cmFtZXRlcihhZGV2LAo+PiAtCj4+IFBQU01DX01TR19VVkREUE1fU2V0RW5hYmxlZE1hc2ssCj4+ IC0JCQkJCQkgIHBpLQo+Pj4gZHBtX2xldmVsX2VuYWJsZV9tYXNrLnV2ZF9kcG1fZW5hYmxlX21h c2spOwo+PiAtCj4+IC0JCWlmIChwaS0+bGFzdF9tY2xrX2RwbV9lbmFibGVfbWFzayAmIDB4MSkg ewo+PiAtCQkJcGktPnV2ZF9lbmFibGVkID0gdHJ1ZTsKPj4gLQkJCXBpLQo+Pj4gZHBtX2xldmVs X2VuYWJsZV9tYXNrLm1jbGtfZHBtX2VuYWJsZV9tYXNrICY9IDB4RkZGRkZGRkU7Cj4+IC0KPj4g CWFtZGdwdV9jaV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwKPj4gLQo+PiBQ UFNNQ19NU0dfTUNMS0RQTV9TZXRFbmFibGVkTWFzaywKPj4gLQkJCQkJCQkgIHBpLQo+Pj4gZHBt X2xldmVsX2VuYWJsZV9tYXNrLm1jbGtfZHBtX2VuYWJsZV9tYXNrKTsKPj4gLQkJfQo+PiAtCX0g ZWxzZSB7Cj4+IC0JCWlmIChwaS0+dXZkX2VuYWJsZWQpIHsKPj4gLQkJCXBpLT51dmRfZW5hYmxl ZCA9IGZhbHNlOwo+PiAtCQkJcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21hc2subWNsa19kcG1f ZW5hYmxlX21hc2sgfD0gMTsKPj4gLQo+PiAJYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtY193aXRo X3BhcmFtZXRlcihhZGV2LAo+PiAtCj4+IFBQU01DX01TR19NQ0xLRFBNX1NldEVuYWJsZWRNYXNr LAo+PiAtCQkJCQkJCSAgcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21hc2subWNsa19kcG1fZW5h YmxlX21hc2spOwo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIChhbWRncHVfY2lfc2Vu ZF9tc2dfdG9fc21jKGFkZXYsIGVuYWJsZSA/Cj4+IC0JCQkJICAgUFBTTUNfTVNHX1VWRERQTV9F bmFibGUgOgo+PiBQUFNNQ19NU0dfVVZERFBNX0Rpc2FibGUpID09IFBQU01DX1Jlc3VsdF9PSykg Pwo+PiAtCQkwIDogLUVJTlZBTDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9lbmFibGVf dmNlX2RwbShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpCj4+IC17Cj4+ IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCWNvbnN0 IHN0cnVjdCBhbWRncHVfY2xvY2tfYW5kX3ZvbHRhZ2VfbGltaXRzICptYXhfbGltaXRzOwo+PiAt CWludCBpOwo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmFjX3Bvd2VyKQo+PiAtCQltYXhfbGltaXRz ID0gJmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2FjOwo+ PiAtCWVsc2UKPj4gLQkJbWF4X2xpbWl0cyA9ICZhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS5t YXhfY2xvY2tfdm9sdGFnZV9vbl9kYzsKPj4gLQo+PiAtCWlmIChlbmFibGUpIHsKPj4gLQkJcGkt PmRwbV9sZXZlbF9lbmFibGVfbWFzay52Y2VfZHBtX2VuYWJsZV9tYXNrID0gMDsKPj4gLQkJZm9y IChpID0gYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUudmNlX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5k ZW5jeV90YWJsZS5jb3VudCAtIDE7IGkgPj0gMDsKPj4gaS0tKSB7Cj4+IC0JCQlpZiAoYWRldi0K Pj4+IHBtLmRwbS5keW5fc3RhdGUudmNlX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZS5l bnRyaWVzW2ldLnYgPD0KPj4gbWF4X2xpbWl0cy0+dmRkYykgewo+PiAtCQkJCXBpLQo+Pj4gZHBt X2xldmVsX2VuYWJsZV9tYXNrLnZjZV9kcG1fZW5hYmxlX21hc2sgfD0gMSA8PCBpOwo+PiAtCj4+ IC0JCQkJaWYgKCFwaS0+Y2Fwc192Y2VfZHBtKQo+PiAtCQkJCQlicmVhazsKPj4gLQkJCX0KPj4g LQkJfQo+PiAtCj4+IC0JCWFtZGdwdV9jaV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIo YWRldiwKPj4gLQo+PiBQUFNNQ19NU0dfVkNFRFBNX1NldEVuYWJsZWRNYXNrLAo+PiAtCQkJCQkJ ICBwaS0KPj4+IGRwbV9sZXZlbF9lbmFibGVfbWFzay52Y2VfZHBtX2VuYWJsZV9tYXNrKTsKPj4g LQl9Cj4+IC0KPj4gLQlyZXR1cm4gKGFtZGdwdV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwgZW5h YmxlID8KPj4gLQkJCQkgICBQUFNNQ19NU0dfVkNFRFBNX0VuYWJsZSA6Cj4+IFBQU01DX01TR19W Q0VEUE1fRGlzYWJsZSkgPT0gUFBTTUNfUmVzdWx0X09LKSA/Cj4+IC0JCTAgOiAtRUlOVkFMOwo+ PiAtfQo+PiAtCj4+IC0jaWYgMAo+PiAtc3RhdGljIGludCBjaV9lbmFibGVfc2FtdV9kcG0oc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQo+PiAtewo+PiAtCXN0cnVjdCBj aV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQljb25zdCBzdHJ1Y3QgYW1k Z3B1X2Nsb2NrX2FuZF92b2x0YWdlX2xpbWl0cyAqbWF4X2xpbWl0czsKPj4gLQlpbnQgaTsKPj4g LQo+PiAtCWlmIChhZGV2LT5wbS5hY19wb3dlcikKPj4gLQkJbWF4X2xpbWl0cyA9ICZhZGV2LQo+ Pj4gcG0uZHBtLmR5bl9zdGF0ZS5tYXhfY2xvY2tfdm9sdGFnZV9vbl9hYzsKPj4gLQllbHNlCj4+ IC0JCW1heF9saW1pdHMgPSAmYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUubWF4X2Nsb2NrX3Zv bHRhZ2Vfb25fZGM7Cj4+IC0KPj4gLQlpZiAoZW5hYmxlKSB7Cj4+IC0JCXBpLT5kcG1fbGV2ZWxf ZW5hYmxlX21hc2suc2FtdV9kcG1fZW5hYmxlX21hc2sgPSAwOwo+PiAtCQlmb3IgKGkgPSBhZGV2 LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS5zYW11X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJs ZS5jb3VudCAtIDE7IGkgPj0KPj4gMDsgaS0tKSB7Cj4+IC0JCQlpZiAoYWRldi0KPj4+IHBtLmRw bS5keW5fc3RhdGUuc2FtdV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUuZW50cmllc1tp XS52IDw9Cj4+IG1heF9saW1pdHMtPnZkZGMpIHsKPj4gLQkJCQlwaS0KPj4+IGRwbV9sZXZlbF9l bmFibGVfbWFzay5zYW11X2RwbV9lbmFibGVfbWFzayB8PSAxIDw8IGk7Cj4+IC0KPj4gLQkJCQlp ZiAoIXBpLT5jYXBzX3NhbXVfZHBtKQo+PiAtCQkJCQlicmVhazsKPj4gLQkJCX0KPj4gLQkJfQo+ PiAtCj4+IC0JCWFtZGdwdV9jaV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoYWRldiwK Pj4gLQo+PiBQUFNNQ19NU0dfU0FNVURQTV9TZXRFbmFibGVkTWFzaywKPj4gLQkJCQkJCSAgcGkt Cj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21hc2suc2FtdV9kcG1fZW5hYmxlX21hc2spOwo+PiAtCX0K Pj4gLQlyZXR1cm4gKGFtZGdwdV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwgZW5hYmxlID8KPj4g LQkJCQkgICBQUFNNQ19NU0dfU0FNVURQTV9FbmFibGUgOgo+PiBQUFNNQ19NU0dfU0FNVURQTV9E aXNhYmxlKSA9PSBQUFNNQ19SZXN1bHRfT0spID8KPj4gLQkJMCA6IC1FSU5WQUw7Cj4+IC19Cj4+ IC0KPj4gLXN0YXRpYyBpbnQgY2lfZW5hYmxlX2FjcF9kcG0oc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIGJvb2wgZW5hYmxlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9 IGNpX2dldF9waShhZGV2KTsKPj4gLQljb25zdCBzdHJ1Y3QgYW1kZ3B1X2Nsb2NrX2FuZF92b2x0 YWdlX2xpbWl0cyAqbWF4X2xpbWl0czsKPj4gLQlpbnQgaTsKPj4gLQo+PiAtCWlmIChhZGV2LT5w bS5hY19wb3dlcikKPj4gLQkJbWF4X2xpbWl0cyA9ICZhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0 ZS5tYXhfY2xvY2tfdm9sdGFnZV9vbl9hYzsKPj4gLQllbHNlCj4+IC0JCW1heF9saW1pdHMgPSAm YWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fZGM7Cj4+IC0K Pj4gLQlpZiAoZW5hYmxlKSB7Cj4+IC0JCXBpLT5kcG1fbGV2ZWxfZW5hYmxlX21hc2suYWNwX2Rw bV9lbmFibGVfbWFzayA9IDA7Cj4+IC0JCWZvciAoaSA9IGFkZXYtCj4+PiBwbS5kcG0uZHluX3N0 YXRlLmFjcF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUuY291bnQgLSAxOyBpID49IDA7 Cj4+IGktLSkgewo+PiAtCQkJaWYgKGFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLmFjcF9jbG9j a192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUuZW50cmllc1tpXS52IDw9Cj4+IG1heF9saW1pdHMt PnZkZGMpIHsKPj4gLQkJCQlwaS0KPj4+IGRwbV9sZXZlbF9lbmFibGVfbWFzay5hY3BfZHBtX2Vu YWJsZV9tYXNrIHw9IDEgPDwgaTsKPj4gLQo+PiAtCQkJCWlmICghcGktPmNhcHNfYWNwX2RwbSkK Pj4gLQkJCQkJYnJlYWs7Cj4+IC0JCQl9Cj4+IC0JCX0KPj4gLQo+PiAtCQlhbWRncHVfY2lfc2Vu ZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGFkZXYsCj4+IC0KPj4gUFBTTUNfTVNHX0FDUERQ TV9TZXRFbmFibGVkTWFzaywKPj4gLQkJCQkJCSAgcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21h c2suYWNwX2RwbV9lbmFibGVfbWFzayk7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIChhbWRncHVf Y2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsIGVuYWJsZSA/Cj4+IC0JCQkJICAgUFBTTUNfTVNHX0FD UERQTV9FbmFibGUgOgo+PiBQUFNNQ19NU0dfQUNQRFBNX0Rpc2FibGUpID09IFBQU01DX1Jlc3Vs dF9PSykgPwo+PiAtCQkwIDogLUVJTlZBTDsKPj4gLX0KPj4gLSNlbmRpZgo+PiAtCj4+IC1zdGF0 aWMgaW50IGNpX3VwZGF0ZV91dmRfZHBtKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29s IGdhdGUpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFk ZXYpOwo+PiAtCXUzMiB0bXA7Cj4+IC0JaW50IHJldCA9IDA7Cj4+IC0KPj4gLQlpZiAoIWdhdGUp IHsKPj4gLQkJLyogdHVybiB0aGUgY2xvY2tzIG9uIHdoZW4gZGVjb2RpbmcgKi8KPj4gLQkJaWYg KHBpLT5jYXBzX3V2ZF9kcG0gfHwKPj4gLQkJICAgIChhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0 ZS51dmRfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlLmNvdW50IDw9IDApKQo+PiAtCQkJ cGktPnNtY19zdGF0ZV90YWJsZS5VdmRCb290TGV2ZWwgPSAwOwo+PiAtCQllbHNlCj4+IC0JCQlw aS0+c21jX3N0YXRlX3RhYmxlLlV2ZEJvb3RMZXZlbCA9Cj4+IC0JCQkJYWRldi0KPj4+IHBtLmRw bS5keW5fc3RhdGUudXZkX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZS5jb3VudCAtIDE7 Cj4+IC0KPj4gLQkJdG1wID0gUlJFRzMyX1NNQyhpeERQTV9UQUJMRV80NzUpOwo+PiAtCQl0bXAg Jj0gfkRQTV9UQUJMRV80NzVfX1V2ZEJvb3RMZXZlbF9NQVNLOwo+PiAtCQl0bXAgfD0gKHBpLT5z bWNfc3RhdGVfdGFibGUuVXZkQm9vdExldmVsIDw8Cj4+IERQTV9UQUJMRV80NzVfX1V2ZEJvb3RM ZXZlbF9fU0hJRlQpOwo+PiAtCQlXUkVHMzJfU01DKGl4RFBNX1RBQkxFXzQ3NSwgdG1wKTsKPj4g LQkJcmV0ID0gY2lfZW5hYmxlX3V2ZF9kcG0oYWRldiwgdHJ1ZSk7Cj4+IC0JfSBlbHNlIHsKPj4g LQkJcmV0ID0gY2lfZW5hYmxlX3V2ZF9kcG0oYWRldiwgZmFsc2UpOwo+PiAtCQlpZiAocmV0KQo+ PiAtCQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAtfQo+PiAt Cj4+IC1zdGF0aWMgdTggY2lfZ2V0X3ZjZV9ib290X2xldmVsKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2KQo+PiAtewo+PiAtCXU4IGk7Cj4+IC0JdTMyIG1pbl9ldmNsayA9IDMwMDAwOyAvKiA/ Pz8gKi8KPj4gLQlzdHJ1Y3QgYW1kZ3B1X3ZjZV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFi bGUgKnRhYmxlID0KPj4gLQkJJmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnZjZV9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfdGFibGU7Cj4+IC0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgdGFibGUt PmNvdW50OyBpKyspIHsKPj4gLQkJaWYgKHRhYmxlLT5lbnRyaWVzW2ldLmV2Y2xrID49IG1pbl9l dmNsaykKPj4gLQkJCXJldHVybiBpOwo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiB0YWJsZS0+Y291 bnQgLSAxOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3VwZGF0ZV92Y2VfZHBtKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJICAgICBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRn cHVfbmV3X3N0YXRlLAo+PiAtCQkJICAgICBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRncHVfY3VycmVu dF9zdGF0ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGko YWRldik7Cj4+IC0JaW50IHJldCA9IDA7Cj4+IC0JdTMyIHRtcDsKPj4gLQo+PiAtCWlmIChhbWRn cHVfY3VycmVudF9zdGF0ZS0+ZXZjbGsgIT0gYW1kZ3B1X25ld19zdGF0ZS0+ZXZjbGspIHsKPj4g LQkJaWYgKGFtZGdwdV9uZXdfc3RhdGUtPmV2Y2xrKSB7Cj4+IC0JCQlwaS0+c21jX3N0YXRlX3Rh YmxlLlZjZUJvb3RMZXZlbCA9Cj4+IGNpX2dldF92Y2VfYm9vdF9sZXZlbChhZGV2KTsKPj4gLQkJ CXRtcCA9IFJSRUczMl9TTUMoaXhEUE1fVEFCTEVfNDc1KTsKPj4gLQkJCXRtcCAmPSB+RFBNX1RB QkxFXzQ3NV9fVmNlQm9vdExldmVsX01BU0s7Cj4+IC0JCQl0bXAgfD0gKHBpLT5zbWNfc3RhdGVf dGFibGUuVmNlQm9vdExldmVsIDw8Cj4+IERQTV9UQUJMRV80NzVfX1ZjZUJvb3RMZXZlbF9fU0hJ RlQpOwo+PiAtCQkJV1JFRzMyX1NNQyhpeERQTV9UQUJMRV80NzUsIHRtcCk7Cj4+IC0KPj4gLQkJ CXJldCA9IGNpX2VuYWJsZV92Y2VfZHBtKGFkZXYsIHRydWUpOwo+PiAtCQl9IGVsc2Ugewo+PiAt CQkJcmV0ID0gY2lfZW5hYmxlX3ZjZV9kcG0oYWRldiwgZmFsc2UpOwo+PiAtCQkJaWYgKHJldCkK Pj4gLQkJCQlyZXR1cm4gcmV0Owo+PiAtCQl9Cj4+IC0JfQo+PiAtCXJldHVybiByZXQ7Cj4+IC19 Cj4+IC0KPj4gLSNpZiAwCj4+IC1zdGF0aWMgaW50IGNpX3VwZGF0ZV9zYW11X2RwbShzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBnYXRlKQo+PiAtewo+PiAtCXJldHVybiBjaV9lbmFi bGVfc2FtdV9kcG0oYWRldiwgZ2F0ZSk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfdXBk YXRlX2FjcF9kcG0oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZ2F0ZSkKPj4gLXsK Pj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JdTMy IHRtcDsKPj4gLQo+PiAtCWlmICghZ2F0ZSkgewo+PiAtCQlwaS0+c21jX3N0YXRlX3RhYmxlLkFj cEJvb3RMZXZlbCA9IDA7Cj4+IC0KPj4gLQkJdG1wID0gUlJFRzMyX1NNQyhpeERQTV9UQUJMRV80 NzUpOwo+PiAtCQl0bXAgJj0gfkFjcEJvb3RMZXZlbF9NQVNLOwo+PiAtCQl0bXAgfD0gQWNwQm9v dExldmVsKHBpLT5zbWNfc3RhdGVfdGFibGUuQWNwQm9vdExldmVsKTsKPj4gLQkJV1JFRzMyX1NN QyhpeERQTV9UQUJMRV80NzUsIHRtcCk7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIGNpX2VuYWJs ZV9hY3BfZHBtKGFkZXYsICFnYXRlKTsKPj4gLX0KPj4gLSNlbmRpZgo+PiAtCj4+IC1zdGF0aWMg aW50IGNpX2dlbmVyYXRlX2RwbV9sZXZlbF9lbmFibGVfbWFzayhzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZQo+PiAqYWRldiwKPj4gLQkJCQkJICAgICBzdHJ1Y3QgYW1kZ3B1X3BzICphbWRncHVfc3RhdGUp Cj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+ PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBjaV90cmltX2RwbV9zdGF0ZXMoYWRldiwgYW1k Z3B1X3N0YXRlKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcGkt PmRwbV9sZXZlbF9lbmFibGVfbWFzay5zY2xrX2RwbV9lbmFibGVfbWFzayA9Cj4+IC0JCWNpX2dl dF9kcG1fbGV2ZWxfZW5hYmxlX21hc2tfdmFsdWUoJnBpLQo+Pj4gZHBtX3RhYmxlLnNjbGtfdGFi bGUpOwo+PiAtCXBpLT5kcG1fbGV2ZWxfZW5hYmxlX21hc2subWNsa19kcG1fZW5hYmxlX21hc2sg PQo+PiAtCQljaV9nZXRfZHBtX2xldmVsX2VuYWJsZV9tYXNrX3ZhbHVlKCZwaS0KPj4+IGRwbV90 YWJsZS5tY2xrX3RhYmxlKTsKPj4gLQlwaS0+bGFzdF9tY2xrX2RwbV9lbmFibGVfbWFzayA9Cj4+ IC0JCXBpLT5kcG1fbGV2ZWxfZW5hYmxlX21hc2subWNsa19kcG1fZW5hYmxlX21hc2s7Cj4+IC0J aWYgKHBpLT51dmRfZW5hYmxlZCkgewo+PiAtCQlpZiAocGktPmRwbV9sZXZlbF9lbmFibGVfbWFz ay5tY2xrX2RwbV9lbmFibGVfbWFzayAmCj4+IDEpCj4+IC0JCQlwaS0KPj4+IGRwbV9sZXZlbF9l bmFibGVfbWFzay5tY2xrX2RwbV9lbmFibGVfbWFzayAmPSAweEZGRkZGRkZFOwo+PiAtCX0KPj4g LQlwaS0+ZHBtX2xldmVsX2VuYWJsZV9tYXNrLnBjaWVfZHBtX2VuYWJsZV9tYXNrID0KPj4gLQkJ Y2lfZ2V0X2RwbV9sZXZlbF9lbmFibGVfbWFza192YWx1ZSgmcGktCj4+PiBkcG1fdGFibGUucGNp ZV9zcGVlZF90YWJsZSk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGlj IHUzMiBjaV9nZXRfbG93ZXN0X2VuYWJsZWRfbGV2ZWwoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4+IC0JCQkJICAgICAgIHUzMiBsZXZlbF9tYXNrKQo+PiAtewo+PiAtCXUzMiBsZXZlbCA9 IDA7Cj4+IC0KPj4gLQl3aGlsZSAoKGxldmVsX21hc2sgJiAoMSA8PCBsZXZlbCkpID09IDApCj4+ IC0JCWxldmVsKys7Cj4+IC0KPj4gLQlyZXR1cm4gbGV2ZWw7Cj4+IC19Cj4+IC0KPj4gLQo+PiAt c3RhdGljIGludCBjaV9kcG1fZm9yY2VfcGVyZm9ybWFuY2VfbGV2ZWwodm9pZCAqaGFuZGxlLAo+ PiAtCQkJCQkgIGVudW0gYW1kX2RwbV9mb3JjZWRfbGV2ZWwgbGV2ZWwpCj4+IC17Cj4+IC0Jc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7 Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXUz MiB0bXAsIGxldmVscywgaTsKPj4gLQlpbnQgcmV0Owo+PiAtCj4+IC0JaWYgKGxldmVsID09IEFN RF9EUE1fRk9SQ0VEX0xFVkVMX0hJR0gpIHsKPj4gLQkJaWYgKCghcGktPnBjaWVfZHBtX2tleV9k aXNhYmxlZCkgJiYKPj4gLQkJICAgIHBpLT5kcG1fbGV2ZWxfZW5hYmxlX21hc2sucGNpZV9kcG1f ZW5hYmxlX21hc2spIHsKPj4gLQkJCWxldmVscyA9IDA7Cj4+IC0JCQl0bXAgPSBwaS0KPj4+IGRw bV9sZXZlbF9lbmFibGVfbWFzay5wY2llX2RwbV9lbmFibGVfbWFzazsKPj4gLQkJCXdoaWxlICh0 bXAgPj49IDEpCj4+IC0JCQkJbGV2ZWxzKys7Cj4+IC0JCQlpZiAobGV2ZWxzKSB7Cj4+IC0JCQkJ cmV0ID0gY2lfZHBtX2ZvcmNlX3N0YXRlX3BjaWUoYWRldiwgbGV2ZWwpOwo+PiAtCQkJCWlmIChy ZXQpCj4+IC0JCQkJCXJldHVybiByZXQ7Cj4+IC0JCQkJZm9yIChpID0gMDsgaSA8IGFkZXYtPnVz ZWNfdGltZW91dDsgaSsrKSB7Cj4+IC0JCQkJCXRtcCA9Cj4+IChSUkVHMzJfU01DKGl4VEFSR0VU X0FORF9DVVJSRU5UX1BST0ZJTEVfSU5ERVhfMSkgJgo+PiAtCj4+IAlUQVJHRVRfQU5EX0NVUlJF TlRfUFJPRklMRV9JTkRFWF8xX19DVVJSX1BDSUVfSU5ERVhfTQo+PiBBU0spID4+Cj4+IC0KPj4g CVRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYXzFfX0NVUlJfUENJRV9JTkRFWF9fCj4+ IFNISUZUOwo+PiAtCQkJCQlpZiAodG1wID09IGxldmVscykKPj4gLQkJCQkJCWJyZWFrOwo+PiAt CQkJCQl1ZGVsYXkoMSk7Cj4+IC0JCQkJfQo+PiAtCQkJfQo+PiAtCQl9Cj4+IC0JCWlmICgoIXBp LT5zY2xrX2RwbV9rZXlfZGlzYWJsZWQpICYmCj4+IC0JCSAgICBwaS0+ZHBtX2xldmVsX2VuYWJs ZV9tYXNrLnNjbGtfZHBtX2VuYWJsZV9tYXNrKSB7Cj4+IC0JCQlsZXZlbHMgPSAwOwo+PiAtCQkJ dG1wID0gcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21hc2suc2Nsa19kcG1fZW5hYmxlX21hc2s7 Cj4+IC0JCQl3aGlsZSAodG1wID4+PSAxKQo+PiAtCQkJCWxldmVscysrOwo+PiAtCQkJaWYgKGxl dmVscykgewo+PiAtCQkJCXJldCA9IGNpX2RwbV9mb3JjZV9zdGF0ZV9zY2xrKGFkZXYsIGxldmVs cyk7Cj4+IC0JCQkJaWYgKHJldCkKPj4gLQkJCQkJcmV0dXJuIHJldDsKPj4gLQkJCQlmb3IgKGkg PSAwOyBpIDwgYWRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKPj4gLQkJCQkJdG1wID0KPj4gKFJS RUczMl9TTUMoaXhUQVJHRVRfQU5EX0NVUlJFTlRfUFJPRklMRV9JTkRFWCkgJgo+PiAtCj4+IAlU QVJHRVRfQU5EX0NVUlJFTlRfUFJPRklMRV9JTkRFWF9fQ1VSUl9TQ0xLX0lOREVYX01BCj4+IFNL KSA+Pgo+PiAtCj4+IAlUQVJHRVRfQU5EX0NVUlJFTlRfUFJPRklMRV9JTkRFWF9fQ1VSUl9TQ0xL X0lOREVYX19TSAo+PiBJRlQ7Cj4+IC0JCQkJCWlmICh0bXAgPT0gbGV2ZWxzKQo+PiAtCQkJCQkJ YnJlYWs7Cj4+IC0JCQkJCXVkZWxheSgxKTsKPj4gLQkJCQl9Cj4+IC0JCQl9Cj4+IC0JCX0KPj4g LQkJaWYgKCghcGktPm1jbGtfZHBtX2tleV9kaXNhYmxlZCkgJiYKPj4gLQkJICAgIHBpLT5kcG1f bGV2ZWxfZW5hYmxlX21hc2subWNsa19kcG1fZW5hYmxlX21hc2spIHsKPj4gLQkJCWxldmVscyA9 IDA7Cj4+IC0JCQl0bXAgPSBwaS0KPj4+IGRwbV9sZXZlbF9lbmFibGVfbWFzay5tY2xrX2RwbV9l bmFibGVfbWFzazsKPj4gLQkJCXdoaWxlICh0bXAgPj49IDEpCj4+IC0JCQkJbGV2ZWxzKys7Cj4+ IC0JCQlpZiAobGV2ZWxzKSB7Cj4+IC0JCQkJcmV0ID0gY2lfZHBtX2ZvcmNlX3N0YXRlX21jbGso YWRldiwgbGV2ZWxzKTsKPj4gLQkJCQlpZiAocmV0KQo+PiAtCQkJCQlyZXR1cm4gcmV0Owo+PiAt CQkJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewo+PiAtCQkJCQl0 bXAgPQo+PiAoUlJFRzMyX1NNQyhpeFRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYKSAm Cj4+IC0KPj4gCVRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYX19DVVJSX01DTEtfSU5E RVhfTQo+PiBBU0spID4+Cj4+IC0KPj4gCVRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVY X19DVVJSX01DTEtfSU5ERVhfX1MKPj4gSElGVDsKPj4gLQkJCQkJaWYgKHRtcCA9PSBsZXZlbHMp Cj4+IC0JCQkJCQlicmVhazsKPj4gLQkJCQkJdWRlbGF5KDEpOwo+PiAtCQkJCX0KPj4gLQkJCX0K Pj4gLQkJfQo+PiAtCX0gZWxzZSBpZiAobGV2ZWwgPT0gQU1EX0RQTV9GT1JDRURfTEVWRUxfTE9X KSB7Cj4+IC0JCWlmICgoIXBpLT5zY2xrX2RwbV9rZXlfZGlzYWJsZWQpICYmCj4+IC0JCSAgICBw aS0+ZHBtX2xldmVsX2VuYWJsZV9tYXNrLnNjbGtfZHBtX2VuYWJsZV9tYXNrKSB7Cj4+IC0JCQls ZXZlbHMgPSBjaV9nZXRfbG93ZXN0X2VuYWJsZWRfbGV2ZWwoYWRldiwKPj4gLQkJCQkJCQkgICAg IHBpLQo+Pj4gZHBtX2xldmVsX2VuYWJsZV9tYXNrLnNjbGtfZHBtX2VuYWJsZV9tYXNrKTsKPj4g LQkJCXJldCA9IGNpX2RwbV9mb3JjZV9zdGF0ZV9zY2xrKGFkZXYsIGxldmVscyk7Cj4+IC0JCQlp ZiAocmV0KQo+PiAtCQkJCXJldHVybiByZXQ7Cj4+IC0JCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+ dXNlY190aW1lb3V0OyBpKyspIHsKPj4gLQkJCQl0bXAgPQo+PiAoUlJFRzMyX1NNQyhpeFRBUkdF VF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYKSAmCj4+IC0KPj4gCVRBUkdFVF9BTkRfQ1VSUkVO VF9QUk9GSUxFX0lOREVYX19DVVJSX1NDTEtfSU5ERVhfTUEKPj4gU0spID4+Cj4+IC0KPj4gCVRB UkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYX19DVVJSX1NDTEtfSU5ERVhfX1NICj4+IElG VDsKPj4gLQkJCQlpZiAodG1wID09IGxldmVscykKPj4gLQkJCQkJYnJlYWs7Cj4+IC0JCQkJdWRl bGF5KDEpOwo+PiAtCQkJfQo+PiAtCQl9Cj4+IC0JCWlmICgoIXBpLT5tY2xrX2RwbV9rZXlfZGlz YWJsZWQpICYmCj4+IC0JCSAgICBwaS0+ZHBtX2xldmVsX2VuYWJsZV9tYXNrLm1jbGtfZHBtX2Vu YWJsZV9tYXNrKSB7Cj4+IC0JCQlsZXZlbHMgPSBjaV9nZXRfbG93ZXN0X2VuYWJsZWRfbGV2ZWwo YWRldiwKPj4gLQkJCQkJCQkgICAgIHBpLQo+Pj4gZHBtX2xldmVsX2VuYWJsZV9tYXNrLm1jbGtf ZHBtX2VuYWJsZV9tYXNrKTsKPj4gLQkJCXJldCA9IGNpX2RwbV9mb3JjZV9zdGF0ZV9tY2xrKGFk ZXYsIGxldmVscyk7Cj4+IC0JCQlpZiAocmV0KQo+PiAtCQkJCXJldHVybiByZXQ7Cj4+IC0JCQlm b3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKPj4gLQkJCQl0bXAgPQo+ PiAoUlJFRzMyX1NNQyhpeFRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYKSAmCj4+IC0K Pj4gCVRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYX19DVVJSX01DTEtfSU5ERVhfTQo+ PiBBU0spID4+Cj4+IC0KPj4gCVRBUkdFVF9BTkRfQ1VSUkVOVF9QUk9GSUxFX0lOREVYX19DVVJS X01DTEtfSU5ERVhfX1MKPj4gSElGVDsKPj4gLQkJCQlpZiAodG1wID09IGxldmVscykKPj4gLQkJ CQkJYnJlYWs7Cj4+IC0JCQkJdWRlbGF5KDEpOwo+PiAtCQkJfQo+PiAtCQl9Cj4+IC0JCWlmICgo IXBpLT5wY2llX2RwbV9rZXlfZGlzYWJsZWQpICYmCj4+IC0JCSAgICBwaS0+ZHBtX2xldmVsX2Vu YWJsZV9tYXNrLnBjaWVfZHBtX2VuYWJsZV9tYXNrKSB7Cj4+IC0JCQlsZXZlbHMgPSBjaV9nZXRf bG93ZXN0X2VuYWJsZWRfbGV2ZWwoYWRldiwKPj4gLQkJCQkJCQkgICAgIHBpLQo+Pj4gZHBtX2xl dmVsX2VuYWJsZV9tYXNrLnBjaWVfZHBtX2VuYWJsZV9tYXNrKTsKPj4gLQkJCXJldCA9IGNpX2Rw bV9mb3JjZV9zdGF0ZV9wY2llKGFkZXYsIGxldmVscyk7Cj4+IC0JCQlpZiAocmV0KQo+PiAtCQkJ CXJldHVybiByZXQ7Cj4+IC0JCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190aW1lb3V0OyBp KyspIHsKPj4gLQkJCQl0bXAgPQo+PiAoUlJFRzMyX1NNQyhpeFRBUkdFVF9BTkRfQ1VSUkVOVF9Q Uk9GSUxFX0lOREVYXzEpICYKPj4gLQo+PiAJVEFSR0VUX0FORF9DVVJSRU5UX1BST0ZJTEVfSU5E RVhfMV9fQ1VSUl9QQ0lFX0lOREVYX00KPj4gQVNLKSA+Pgo+PiAtCj4+IAlUQVJHRVRfQU5EX0NV UlJFTlRfUFJPRklMRV9JTkRFWF8xX19DVVJSX1BDSUVfSU5ERVhfXwo+PiBTSElGVDsKPj4gLQkJ CQlpZiAodG1wID09IGxldmVscykKPj4gLQkJCQkJYnJlYWs7Cj4+IC0JCQkJdWRlbGF5KDEpOwo+ PiAtCQkJfQo+PiAtCQl9Cj4+IC0JfSBlbHNlIGlmIChsZXZlbCA9PSBBTURfRFBNX0ZPUkNFRF9M RVZFTF9BVVRPKSB7Cj4+IC0JCWlmICghcGktPnBjaWVfZHBtX2tleV9kaXNhYmxlZCkgewo+PiAt CQkJUFBTTUNfUmVzdWx0IHNtY19yZXN1bHQ7Cj4+IC0KPj4gLQkJCXNtY19yZXN1bHQgPSBhbWRn cHVfY2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+IC0KPj4gUFBTTUNfTVNHX1BDSWVEUE1fVW5G b3JjZUxldmVsKTsKPj4gLQkJCWlmIChzbWNfcmVzdWx0ICE9IFBQU01DX1Jlc3VsdF9PSykKPj4g LQkJCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQkJfQo+PiAtCQlyZXQgPSBjaV91cGxvYWRfZHBtX2xl dmVsX2VuYWJsZV9tYXNrKGFkZXYpOwo+PiAtCQlpZiAocmV0KQo+PiAtCQkJcmV0dXJuIHJldDsK Pj4gLQl9Cj4+IC0KPj4gLQlhZGV2LT5wbS5kcG0uZm9yY2VkX2xldmVsID0gbGV2ZWw7Cj4+IC0K Pj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9zZXRfbWNfc3BlY2lh bF9yZWdpc3RlcnMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJICAgICAgIHN0 cnVjdCBjaV9tY19yZWdfdGFibGUgKnRhYmxlKQo+PiAtewo+PiAtCXU4IGksIGosIGs7Cj4+IC0J dTMyIHRlbXBfcmVnOwo+PiAtCj4+IC0JZm9yIChpID0gMCwgaiA9IHRhYmxlLT5sYXN0OyBpIDwg dGFibGUtPmxhc3Q7IGkrKykgewo+PiAtCQlpZiAoaiA+PSBTTVU3X0RJU0NSRVRFX01DX1JFR0lT VEVSX0FSUkFZX1NJWkUpCj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQkJc3dpdGNoKHRhYmxl LT5tY19yZWdfYWRkcmVzc1tpXS5zMSkgewo+PiAtCQljYXNlIG1tTUNfU0VRX01JU0MxOgo+PiAt CQkJdGVtcF9yZWcgPSBSUkVHMzIobW1NQ19QTUdfQ01EX0VNUlMpOwo+PiAtCQkJdGFibGUtPm1j X3JlZ19hZGRyZXNzW2pdLnMxID0KPj4gbW1NQ19QTUdfQ01EX0VNUlM7Cj4+IC0JCQl0YWJsZS0+ bWNfcmVnX2FkZHJlc3Nbal0uczAgPQo+PiBtbU1DX1NFUV9QTUdfQ01EX0VNUlNfTFA7Cj4+IC0J CQlmb3IgKGsgPSAwOyBrIDwgdGFibGUtPm51bV9lbnRyaWVzOyBrKyspIHsKPj4gLQkJCQl0YWJs ZS0+bWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbal0gPQo+PiAtCQkJCQkoKHRlbXBfcmVn ICYgMHhmZmZmMDAwMCkpIHwgKCh0YWJsZS0KPj4+IG1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19k YXRhW2ldICYgMHhmZmZmMDAwMCkgPj4gMTYpOwo+PiAtCQkJfQo+PiAtCQkJaisrOwo+PiAtCj4+ IC0JCQlpZiAoaiA+PSBTTVU3X0RJU0NSRVRFX01DX1JFR0lTVEVSX0FSUkFZX1NJWkUpCj4+IC0J CQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JCQl0ZW1wX3JlZyA9IFJSRUczMihtbU1DX1BNR19DTURf TVJTKTsKPj4gLQkJCXRhYmxlLT5tY19yZWdfYWRkcmVzc1tqXS5zMSA9Cj4+IG1tTUNfUE1HX0NN RF9NUlM7Cj4+IC0JCQl0YWJsZS0+bWNfcmVnX2FkZHJlc3Nbal0uczAgPQo+PiBtbU1DX1NFUV9Q TUdfQ01EX01SU19MUDsKPj4gLQkJCWZvciAoayA9IDA7IGsgPCB0YWJsZS0+bnVtX2VudHJpZXM7 IGsrKykgewo+PiAtCQkJCXRhYmxlLT5tY19yZWdfdGFibGVfZW50cnlba10ubWNfZGF0YVtqXSA9 Cj4+IC0JCQkJCSh0ZW1wX3JlZyAmIDB4ZmZmZjAwMDApIHwgKHRhYmxlLQo+Pj4gbWNfcmVnX3Rh YmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gJiAweDAwMDBmZmZmKTsKPj4gLQkJCQlpZiAoYWRldi0+ Z21jLnZyYW1fdHlwZSAhPQo+PiBBTURHUFVfVlJBTV9UWVBFX0dERFI1KQo+PiAtCQkJCQl0YWJs ZS0KPj4+IG1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19kYXRhW2pdIHw9IDB4MTAwOwo+PiAtCQkJ fQo+PiAtCQkJaisrOwo+PiAtCj4+IC0JCQlpZiAoYWRldi0+Z21jLnZyYW1fdHlwZSAhPQo+PiBB TURHUFVfVlJBTV9UWVBFX0dERFI1KSB7Cj4+IC0JCQkJaWYgKGogPj0KPj4gU01VN19ESVNDUkVU RV9NQ19SRUdJU1RFUl9BUlJBWV9TSVpFKQo+PiAtCQkJCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQkJ CQl0YWJsZS0+bWNfcmVnX2FkZHJlc3Nbal0uczEgPQo+PiBtbU1DX1BNR19BVVRPX0NNRDsKPj4g LQkJCQl0YWJsZS0+bWNfcmVnX2FkZHJlc3Nbal0uczAgPQo+PiBtbU1DX1BNR19BVVRPX0NNRDsK Pj4gLQkJCQlmb3IgKGsgPSAwOyBrIDwgdGFibGUtPm51bV9lbnRyaWVzOyBrKyspIHsKPj4gLQkJ CQkJdGFibGUtCj4+PiBtY19yZWdfdGFibGVfZW50cnlba10ubWNfZGF0YVtqXSA9Cj4+IC0JCQkJ CQkodGFibGUtCj4+PiBtY19yZWdfdGFibGVfZW50cnlba10ubWNfZGF0YVtpXSAmIDB4ZmZmZjAw MDApID4+IDE2Owo+PiAtCQkJCX0KPj4gLQkJCQlqKys7Cj4+IC0JCQl9Cj4+IC0JCQlicmVhazsK Pj4gLQkJY2FzZSBtbU1DX1NFUV9SRVNFUlZFX006Cj4+IC0JCQl0ZW1wX3JlZyA9IFJSRUczMiht bU1DX1BNR19DTURfTVJTMSk7Cj4+IC0JCQl0YWJsZS0+bWNfcmVnX2FkZHJlc3Nbal0uczEgPQo+ PiBtbU1DX1BNR19DTURfTVJTMTsKPj4gLQkJCXRhYmxlLT5tY19yZWdfYWRkcmVzc1tqXS5zMCA9 Cj4+IG1tTUNfU0VRX1BNR19DTURfTVJTMV9MUDsKPj4gLQkJCWZvciAoayA9IDA7IGsgPCB0YWJs ZS0+bnVtX2VudHJpZXM7IGsrKykgewo+PiAtCQkJCXRhYmxlLT5tY19yZWdfdGFibGVfZW50cnlb a10ubWNfZGF0YVtqXSA9Cj4+IC0JCQkJCSh0ZW1wX3JlZyAmIDB4ZmZmZjAwMDApIHwgKHRhYmxl LQo+Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gJiAweDAwMDBmZmZmKTsKPj4g LQkJCX0KPj4gLQkJCWorKzsKPj4gLQkJCWJyZWFrOwo+PiAtCQlkZWZhdWx0Ogo+PiAtCQkJYnJl YWs7Cj4+IC0JCX0KPj4gLQo+PiAtCX0KPj4gLQo+PiAtCXRhYmxlLT5sYXN0ID0gajsKPj4gLQo+ PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgYm9vbCBjaV9jaGVja19zMF9tY19y ZWdfaW5kZXgodTE2IGluX3JlZywgdTE2ICpvdXRfcmVnKQo+PiAtewo+PiAtCWJvb2wgcmVzdWx0 ID0gdHJ1ZTsKPj4gLQo+PiAtCXN3aXRjaChpbl9yZWcpIHsKPj4gLQljYXNlIG1tTUNfU0VRX1JB U19USU1JTkc6Cj4+IC0JCSpvdXRfcmVnID0gbW1NQ19TRVFfUkFTX1RJTUlOR19MUDsKPj4gLQkJ YnJlYWs7Cj4+IC0JY2FzZSBtbU1DX1NFUV9ETExfU1RCWToKPj4gLQkJKm91dF9yZWcgPSBtbU1D X1NFUV9ETExfU1RCWV9MUDsKPj4gLQkJYnJlYWs7Cj4+IC0JY2FzZSBtbU1DX1NFUV9HNVBEWF9D TUQwOgo+PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VRX0c1UERYX0NNRDBfTFA7Cj4+IC0JCWJyZWFr Owo+PiAtCWNhc2UgbW1NQ19TRVFfRzVQRFhfQ01EMToKPj4gLQkJKm91dF9yZWcgPSBtbU1DX1NF UV9HNVBEWF9DTUQxX0xQOwo+PiAtCQlicmVhazsKPj4gLQljYXNlIG1tTUNfU0VRX0c1UERYX0NU Ukw6Cj4+IC0JCSpvdXRfcmVnID0gbW1NQ19TRVFfRzVQRFhfQ1RSTF9MUDsKPj4gLQkJYnJlYWs7 Cj4+IC0JY2FzZSBtbU1DX1NFUV9DQVNfVElNSU5HOgo+PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VR X0NBU19USU1JTkdfTFA7Cj4+IC0JICAgIGJyZWFrOwo+PiAtCWNhc2UgbW1NQ19TRVFfTUlTQ19U SU1JTkc6Cj4+IC0JCSpvdXRfcmVnID0gbW1NQ19TRVFfTUlTQ19USU1JTkdfTFA7Cj4+IC0JCWJy ZWFrOwo+PiAtCWNhc2UgbW1NQ19TRVFfTUlTQ19USU1JTkcyOgo+PiAtCQkqb3V0X3JlZyA9IG1t TUNfU0VRX01JU0NfVElNSU5HMl9MUDsKPj4gLQkJYnJlYWs7Cj4+IC0JY2FzZSBtbU1DX1NFUV9Q TUdfRFZTX0NNRDoKPj4gLQkJKm91dF9yZWcgPSBtbU1DX1NFUV9QTUdfRFZTX0NNRF9MUDsKPj4g LQkJYnJlYWs7Cj4+IC0JY2FzZSBtbU1DX1NFUV9QTUdfRFZTX0NUTDoKPj4gLQkJKm91dF9yZWcg PSBtbU1DX1NFUV9QTUdfRFZTX0NUTF9MUDsKPj4gLQkJYnJlYWs7Cj4+IC0JY2FzZSBtbU1DX1NF UV9SRF9DVExfRDA6Cj4+IC0JCSpvdXRfcmVnID0gbW1NQ19TRVFfUkRfQ1RMX0QwX0xQOwo+PiAt CQlicmVhazsKPj4gLQljYXNlIG1tTUNfU0VRX1JEX0NUTF9EMToKPj4gLQkJKm91dF9yZWcgPSBt bU1DX1NFUV9SRF9DVExfRDFfTFA7Cj4+IC0JCWJyZWFrOwo+PiAtCWNhc2UgbW1NQ19TRVFfV1Jf Q1RMX0QwOgo+PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VRX1dSX0NUTF9EMF9MUDsKPj4gLQkJYnJl YWs7Cj4+IC0JY2FzZSBtbU1DX1NFUV9XUl9DVExfRDE6Cj4+IC0JCSpvdXRfcmVnID0gbW1NQ19T RVFfV1JfQ1RMX0QxX0xQOwo+PiAtCQlicmVhazsKPj4gLQljYXNlIG1tTUNfUE1HX0NNRF9FTVJT Ogo+PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VRX1BNR19DTURfRU1SU19MUDsKPj4gLQkJYnJlYWs7 Cj4+IC0JY2FzZSBtbU1DX1BNR19DTURfTVJTOgo+PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VRX1BN R19DTURfTVJTX0xQOwo+PiAtCQlicmVhazsKPj4gLQljYXNlIG1tTUNfUE1HX0NNRF9NUlMxOgo+ PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VRX1BNR19DTURfTVJTMV9MUDsKPj4gLQkJYnJlYWs7Cj4+ IC0JY2FzZSBtbU1DX1NFUV9QTUdfVElNSU5HOgo+PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VRX1BN R19USU1JTkdfTFA7Cj4+IC0JCWJyZWFrOwo+PiAtCWNhc2UgbW1NQ19QTUdfQ01EX01SUzI6Cj4+ IC0JCSpvdXRfcmVnID0gbW1NQ19TRVFfUE1HX0NNRF9NUlMyX0xQOwo+PiAtCQlicmVhazsKPj4g LQljYXNlIG1tTUNfU0VRX1dSX0NUTF8yOgo+PiAtCQkqb3V0X3JlZyA9IG1tTUNfU0VRX1dSX0NU TF8yX0xQOwo+PiAtCQlicmVhazsKPj4gLQlkZWZhdWx0Ogo+PiAtCQlyZXN1bHQgPSBmYWxzZTsK Pj4gLQkJYnJlYWs7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIHJlc3VsdDsKPj4gLX0KPj4gLQo+ PiAtc3RhdGljIHZvaWQgY2lfc2V0X3ZhbGlkX2ZsYWcoc3RydWN0IGNpX21jX3JlZ190YWJsZSAq dGFibGUpCj4+IC17Cj4+IC0JdTggaSwgajsKPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCB0YWJs ZS0+bGFzdDsgaSsrKSB7Cj4+IC0JCWZvciAoaiA9IDE7IGogPCB0YWJsZS0+bnVtX2VudHJpZXM7 IGorKykgewo+PiAtCQkJaWYgKHRhYmxlLT5tY19yZWdfdGFibGVfZW50cnlbai0xXS5tY19kYXRh W2ldICE9Cj4+IC0JCQkgICAgdGFibGUtPm1jX3JlZ190YWJsZV9lbnRyeVtqXS5tY19kYXRhW2ld KSB7Cj4+IC0JCQkJdGFibGUtPnZhbGlkX2ZsYWcgfD0gMSA8PCBpOwo+PiAtCQkJCWJyZWFrOwo+ PiAtCQkJfQo+PiAtCQl9Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9zZXRf czBfbWNfcmVnX2luZGV4KHN0cnVjdCBjaV9tY19yZWdfdGFibGUgKnRhYmxlKQo+PiAtewo+PiAt CXUzMiBpOwo+PiAtCXUxNiBhZGRyZXNzOwo+PiAtCj4+IC0JZm9yIChpID0gMDsgaSA8IHRhYmxl LT5sYXN0OyBpKyspIHsKPj4gLQkJdGFibGUtPm1jX3JlZ19hZGRyZXNzW2ldLnMwID0KPj4gLQkJ CWNpX2NoZWNrX3MwX21jX3JlZ19pbmRleCh0YWJsZS0KPj4+IG1jX3JlZ19hZGRyZXNzW2ldLnMx LCAmYWRkcmVzcykgPwo+PiAtCQkJYWRkcmVzcyA6IHRhYmxlLT5tY19yZWdfYWRkcmVzc1tpXS5z MTsKPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfY29weV92Ymlvc19tY19yZWdf dGFibGUoY29uc3Qgc3RydWN0IGF0b21fbWNfcmVnX3RhYmxlCj4+ICp0YWJsZSwKPj4gLQkJCQkg ICAgICBzdHJ1Y3QgY2lfbWNfcmVnX3RhYmxlICpjaV90YWJsZSkKPj4gLXsKPj4gLQl1OCBpLCBq Owo+PiAtCj4+IC0JaWYgKHRhYmxlLT5sYXN0ID4gU01VN19ESVNDUkVURV9NQ19SRUdJU1RFUl9B UlJBWV9TSVpFKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQlpZiAodGFibGUtPm51bV9lbnRy aWVzID4gTUFYX0FDX1RJTUlOR19FTlRSSUVTKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+ PiAtCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+bGFzdDsgaSsrKQo+PiAtCQljaV90YWJsZS0+bWNf cmVnX2FkZHJlc3NbaV0uczEgPSB0YWJsZS0KPj4+IG1jX3JlZ19hZGRyZXNzW2ldLnMxOwo+PiAt Cj4+IC0JY2lfdGFibGUtPmxhc3QgPSB0YWJsZS0+bGFzdDsKPj4gLQo+PiAtCWZvciAoaSA9IDA7 IGkgPCB0YWJsZS0+bnVtX2VudHJpZXM7IGkrKykgewo+PiAtCQljaV90YWJsZS0+bWNfcmVnX3Rh YmxlX2VudHJ5W2ldLm1jbGtfbWF4ID0KPj4gLQkJCXRhYmxlLT5tY19yZWdfdGFibGVfZW50cnlb aV0ubWNsa19tYXg7Cj4+IC0JCWZvciAoaiA9IDA7IGogPCB0YWJsZS0+bGFzdDsgaisrKQo+PiAt CQkJY2lfdGFibGUtPm1jX3JlZ190YWJsZV9lbnRyeVtpXS5tY19kYXRhW2pdID0KPj4gLQkJCQl0 YWJsZS0+bWNfcmVnX3RhYmxlX2VudHJ5W2ldLm1jX2RhdGFbal07Cj4+IC0JfQo+PiAtCWNpX3Rh YmxlLT5udW1fZW50cmllcyA9IHRhYmxlLT5udW1fZW50cmllczsKPj4gLQo+PiAtCXJldHVybiAw Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3JlZ2lzdGVyX3BhdGNoaW5nX21jX3NlcShz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJCQkgICAgICAgc3RydWN0IGNpX21jX3Jl Z190YWJsZSAqdGFibGUpCj4+IC17Cj4+IC0JdTggaSwgazsKPj4gLQl1MzIgdG1wOwo+PiAtCWJv b2wgcGF0Y2g7Cj4+IC0KPj4gLQl0bXAgPSBSUkVHMzIobW1NQ19TRVFfTUlTQzApOwo+PiAtCXBh dGNoID0gKCh0bXAgJiAweDAwMDBmMDApID09IDB4MzAwKSA/IHRydWUgOiBmYWxzZTsKPj4gLQo+ PiAtCWlmIChwYXRjaCAmJgo+PiAtCSAgICAoKGFkZXYtPnBkZXYtPmRldmljZSA9PSAweDY3QjAp IHx8Cj4+IC0JICAgICAoYWRldi0+cGRldi0+ZGV2aWNlID09IDB4NjdCMSkpKSB7Cj4+IC0JCWZv ciAoaSA9IDA7IGkgPCB0YWJsZS0+bGFzdDsgaSsrKSB7Cj4+IC0JCQlpZiAodGFibGUtPmxhc3Qg Pj0KPj4gU01VN19ESVNDUkVURV9NQ19SRUdJU1RFUl9BUlJBWV9TSVpFKQo+PiAtCQkJCXJldHVy biAtRUlOVkFMOwo+PiAtCQkJc3dpdGNoICh0YWJsZS0+bWNfcmVnX2FkZHJlc3NbaV0uczEpIHsK Pj4gLQkJCWNhc2UgbW1NQ19TRVFfTUlTQzE6Cj4+IC0JCQkJZm9yIChrID0gMDsgayA8IHRhYmxl LT5udW1fZW50cmllczsgaysrKSB7Cj4+IC0JCQkJCWlmICgodGFibGUtCj4+PiBtY19yZWdfdGFi bGVfZW50cnlba10ubWNsa19tYXggPT0gMTI1MDAwKSB8fAo+PiAtCQkJCQkgICAgKHRhYmxlLQo+ Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jbGtfbWF4ID09IDEzNzUwMCkpCj4+IC0JCQkJCQl0 YWJsZS0KPj4+IG1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19kYXRhW2ldID0KPj4gLQkJCQkJCQko dGFibGUtCj4+PiBtY19yZWdfdGFibGVfZW50cnlba10ubWNfZGF0YVtpXSAmIDB4RkZGRkZGRjgp IHwKPj4gLQkJCQkJCQkweDAwMDAwMDA3Owo+PiAtCQkJCX0KPj4gLQkJCQlicmVhazsKPj4gLQkJ CWNhc2UgbW1NQ19TRVFfV1JfQ1RMX0QwOgo+PiAtCQkJCWZvciAoayA9IDA7IGsgPCB0YWJsZS0+ bnVtX2VudHJpZXM7IGsrKykgewo+PiAtCQkJCQlpZiAoKHRhYmxlLQo+Pj4gbWNfcmVnX3RhYmxl X2VudHJ5W2tdLm1jbGtfbWF4ID09IDEyNTAwMCkgfHwKPj4gLQkJCQkJICAgICh0YWJsZS0KPj4+ IG1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY2xrX21heCA9PSAxMzc1MDApKQo+PiAtCQkJCQkJdGFi bGUtCj4+PiBtY19yZWdfdGFibGVfZW50cnlba10ubWNfZGF0YVtpXSA9Cj4+IC0JCQkJCQkJKHRh YmxlLQo+Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gJiAweEZGRkYwRjAwKSB8 Cj4+IC0JCQkJCQkJMHgwMDAwRDBERDsKPj4gLQkJCQl9Cj4+IC0JCQkJYnJlYWs7Cj4+IC0JCQlj YXNlIG1tTUNfU0VRX1dSX0NUTF9EMToKPj4gLQkJCQlmb3IgKGsgPSAwOyBrIDwgdGFibGUtPm51 bV9lbnRyaWVzOyBrKyspIHsKPj4gLQkJCQkJaWYgKCh0YWJsZS0KPj4+IG1jX3JlZ190YWJsZV9l bnRyeVtrXS5tY2xrX21heCA9PSAxMjUwMDApIHx8Cj4+IC0JCQkJCSAgICAodGFibGUtCj4+PiBt Y19yZWdfdGFibGVfZW50cnlba10ubWNsa19tYXggPT0gMTM3NTAwKSkKPj4gLQkJCQkJCXRhYmxl LQo+Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gPQo+PiAtCQkJCQkJCSh0YWJs ZS0KPj4+IG1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19kYXRhW2ldICYgMHhGRkZGMEYwMCkgfAo+ PiAtCQkJCQkJCTB4MDAwMEQwREQ7Cj4+IC0JCQkJfQo+PiAtCQkJCWJyZWFrOwo+PiAtCQkJY2Fz ZSBtbU1DX1NFUV9XUl9DVExfMjoKPj4gLQkJCQlmb3IgKGsgPSAwOyBrIDwgdGFibGUtPm51bV9l bnRyaWVzOyBrKyspIHsKPj4gLQkJCQkJaWYgKCh0YWJsZS0KPj4+IG1jX3JlZ190YWJsZV9lbnRy eVtrXS5tY2xrX21heCA9PSAxMjUwMDApIHx8Cj4+IC0JCQkJCSAgICAodGFibGUtCj4+PiBtY19y ZWdfdGFibGVfZW50cnlba10ubWNsa19tYXggPT0gMTM3NTAwKSkKPj4gLQkJCQkJCXRhYmxlLQo+ Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gPSAwOwo+PiAtCQkJCX0KPj4gLQkJ CQlicmVhazsKPj4gLQkJCWNhc2UgbW1NQ19TRVFfQ0FTX1RJTUlORzoKPj4gLQkJCQlmb3IgKGsg PSAwOyBrIDwgdGFibGUtPm51bV9lbnRyaWVzOyBrKyspIHsKPj4gLQkJCQkJaWYgKHRhYmxlLQo+ Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jbGtfbWF4ID09IDEyNTAwMCkKPj4gLQkJCQkJCXRh YmxlLQo+Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gPQo+PiAtCQkJCQkJCSh0 YWJsZS0KPj4+IG1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19kYXRhW2ldICYgMHhGRkUwRkUwRikg fAo+PiAtCQkJCQkJCTB4MDAwQzAxNDA7Cj4+IC0JCQkJCWVsc2UgaWYgKHRhYmxlLQo+Pj4gbWNf cmVnX3RhYmxlX2VudHJ5W2tdLm1jbGtfbWF4ID09IDEzNzUwMCkKPj4gLQkJCQkJCXRhYmxlLQo+ Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1jX2RhdGFbaV0gPQo+PiAtCQkJCQkJCSh0YWJsZS0K Pj4+IG1jX3JlZ190YWJsZV9lbnRyeVtrXS5tY19kYXRhW2ldICYgMHhGRkUwRkUwRikgfAo+PiAt CQkJCQkJCTB4MDAwQzAxNTA7Cj4+IC0JCQkJfQo+PiAtCQkJCWJyZWFrOwo+PiAtCQkJY2FzZSBt bU1DX1NFUV9NSVNDX1RJTUlORzoKPj4gLQkJCQlmb3IgKGsgPSAwOyBrIDwgdGFibGUtPm51bV9l bnRyaWVzOyBrKyspIHsKPj4gLQkJCQkJaWYgKHRhYmxlLQo+Pj4gbWNfcmVnX3RhYmxlX2VudHJ5 W2tdLm1jbGtfbWF4ID09IDEyNTAwMCkKPj4gLQkJCQkJCXRhYmxlLQo+Pj4gbWNfcmVnX3RhYmxl X2VudHJ5W2tdLm1jX2RhdGFbaV0gPQo+PiAtCQkJCQkJCSh0YWJsZS0KPj4+IG1jX3JlZ190YWJs ZV9lbnRyeVtrXS5tY19kYXRhW2ldICYgMHhGRkZGRkZFMCkgfAo+PiAtCQkJCQkJCTB4MDAwMDAw MzA7Cj4+IC0JCQkJCWVsc2UgaWYgKHRhYmxlLQo+Pj4gbWNfcmVnX3RhYmxlX2VudHJ5W2tdLm1j bGtfbWF4ID09IDEzNzUwMCkKPj4gLQkJCQkJCXRhYmxlLQo+Pj4gbWNfcmVnX3RhYmxlX2VudHJ5 W2tdLm1jX2RhdGFbaV0gPQo+PiAtCQkJCQkJCSh0YWJsZS0KPj4+IG1jX3JlZ190YWJsZV9lbnRy eVtrXS5tY19kYXRhW2ldICYgMHhGRkZGRkZFMCkgfAo+PiAtCQkJCQkJCTB4MDAwMDAwMzU7Cj4+ IC0JCQkJfQo+PiAtCQkJCWJyZWFrOwo+PiAtCQkJZGVmYXVsdDoKPj4gLQkJCQlicmVhazsKPj4g LQkJCX0KPj4gLQkJfQo+PiAtCj4+IC0JCVdSRUczMihtbU1DX1NFUV9JT19ERUJVR19JTkRFWCwg Myk7Cj4+IC0JCXRtcCA9IFJSRUczMihtbU1DX1NFUV9JT19ERUJVR19EQVRBKTsKPj4gLQkJdG1w ID0gKHRtcCAmIDB4RkZGOEZGRkYpIHwgKDEgPDwgMTYpOwo+PiAtCQlXUkVHMzIobW1NQ19TRVFf SU9fREVCVUdfSU5ERVgsIDMpOwo+PiAtCQlXUkVHMzIobW1NQ19TRVFfSU9fREVCVUdfREFUQSwg dG1wKTsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGlu dCBjaV9pbml0aWFsaXplX21jX3JlZ190YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK Pj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+ IC0Jc3RydWN0IGF0b21fbWNfcmVnX3RhYmxlICp0YWJsZTsKPj4gLQlzdHJ1Y3QgY2lfbWNfcmVn X3RhYmxlICpjaV90YWJsZSA9ICZwaS0+bWNfcmVnX3RhYmxlOwo+PiAtCXU4IG1vZHVsZV9pbmRl eCA9IGNpX2dldF9tZW1vcnlfbW9kdWxlX2luZGV4KGFkZXYpOwo+PiAtCWludCByZXQ7Cj4+IC0K Pj4gLQl0YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdG9tX21jX3JlZ190YWJsZSksIEdG UF9LRVJORUwpOwo+PiAtCWlmICghdGFibGUpCj4+IC0JCXJldHVybiAtRU5PTUVNOwo+PiAtCj4+ IC0JV1JFRzMyKG1tTUNfU0VRX1JBU19USU1JTkdfTFAsCj4+IFJSRUczMihtbU1DX1NFUV9SQVNf VElNSU5HKSk7Cj4+IC0JV1JFRzMyKG1tTUNfU0VRX0NBU19USU1JTkdfTFAsCj4+IFJSRUczMiht bU1DX1NFUV9DQVNfVElNSU5HKSk7Cj4+IC0JV1JFRzMyKG1tTUNfU0VRX0RMTF9TVEJZX0xQLAo+ PiBSUkVHMzIobW1NQ19TRVFfRExMX1NUQlkpKTsKPj4gLQlXUkVHMzIobW1NQ19TRVFfRzVQRFhf Q01EMF9MUCwKPj4gUlJFRzMyKG1tTUNfU0VRX0c1UERYX0NNRDApKTsKPj4gLQlXUkVHMzIobW1N Q19TRVFfRzVQRFhfQ01EMV9MUCwKPj4gUlJFRzMyKG1tTUNfU0VRX0c1UERYX0NNRDEpKTsKPj4g LQlXUkVHMzIobW1NQ19TRVFfRzVQRFhfQ1RSTF9MUCwKPj4gUlJFRzMyKG1tTUNfU0VRX0c1UERY X0NUUkwpKTsKPj4gLQlXUkVHMzIobW1NQ19TRVFfUE1HX0RWU19DTURfTFAsCj4+IFJSRUczMiht bU1DX1NFUV9QTUdfRFZTX0NNRCkpOwo+PiAtCVdSRUczMihtbU1DX1NFUV9QTUdfRFZTX0NUTF9M UCwKPj4gUlJFRzMyKG1tTUNfU0VRX1BNR19EVlNfQ1RMKSk7Cj4+IC0JV1JFRzMyKG1tTUNfU0VR X01JU0NfVElNSU5HX0xQLAo+PiBSUkVHMzIobW1NQ19TRVFfTUlTQ19USU1JTkcpKTsKPj4gLQlX UkVHMzIobW1NQ19TRVFfTUlTQ19USU1JTkcyX0xQLAo+PiBSUkVHMzIobW1NQ19TRVFfTUlTQ19U SU1JTkcyKSk7Cj4+IC0JV1JFRzMyKG1tTUNfU0VRX1BNR19DTURfRU1SU19MUCwKPj4gUlJFRzMy KG1tTUNfUE1HX0NNRF9FTVJTKSk7Cj4+IC0JV1JFRzMyKG1tTUNfU0VRX1BNR19DTURfTVJTX0xQ LAo+PiBSUkVHMzIobW1NQ19QTUdfQ01EX01SUykpOwo+PiAtCVdSRUczMihtbU1DX1NFUV9QTUdf Q01EX01SUzFfTFAsCj4+IFJSRUczMihtbU1DX1BNR19DTURfTVJTMSkpOwo+PiAtCVdSRUczMiht bU1DX1NFUV9XUl9DVExfRDBfTFAsCj4+IFJSRUczMihtbU1DX1NFUV9XUl9DVExfRDApKTsKPj4g LQlXUkVHMzIobW1NQ19TRVFfV1JfQ1RMX0QxX0xQLAo+PiBSUkVHMzIobW1NQ19TRVFfV1JfQ1RM X0QxKSk7Cj4+IC0JV1JFRzMyKG1tTUNfU0VRX1JEX0NUTF9EMF9MUCwKPj4gUlJFRzMyKG1tTUNf U0VRX1JEX0NUTF9EMCkpOwo+PiAtCVdSRUczMihtbU1DX1NFUV9SRF9DVExfRDFfTFAsCj4+IFJS RUczMihtbU1DX1NFUV9SRF9DVExfRDEpKTsKPj4gLQlXUkVHMzIobW1NQ19TRVFfUE1HX1RJTUlO R19MUCwKPj4gUlJFRzMyKG1tTUNfU0VRX1BNR19USU1JTkcpKTsKPj4gLQlXUkVHMzIobW1NQ19T RVFfUE1HX0NNRF9NUlMyX0xQLAo+PiBSUkVHMzIobW1NQ19QTUdfQ01EX01SUzIpKTsKPj4gLQlX UkVHMzIobW1NQ19TRVFfV1JfQ1RMXzJfTFAsCj4+IFJSRUczMihtbU1DX1NFUV9XUl9DVExfMikp Owo+PiAtCj4+IC0JcmV0ID0gYW1kZ3B1X2F0b21iaW9zX2luaXRfbWNfcmVnX3RhYmxlKGFkZXYs IG1vZHVsZV9pbmRleCwKPj4gdGFibGUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCWdvdG8gaW5pdF9t Y19kb25lOwo+PiAtCj4+IC0JcmV0ID0gY2lfY29weV92Ymlvc19tY19yZWdfdGFibGUodGFibGUs IGNpX3RhYmxlKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlnb3RvIGluaXRfbWNfZG9uZTsKPj4gLQo+ PiAtCWNpX3NldF9zMF9tY19yZWdfaW5kZXgoY2lfdGFibGUpOwo+PiAtCj4+IC0JcmV0ID0gY2lf cmVnaXN0ZXJfcGF0Y2hpbmdfbWNfc2VxKGFkZXYsIGNpX3RhYmxlKTsKPj4gLQlpZiAocmV0KQo+ PiAtCQlnb3RvIGluaXRfbWNfZG9uZTsKPj4gLQo+PiAtCXJldCA9IGNpX3NldF9tY19zcGVjaWFs X3JlZ2lzdGVycyhhZGV2LCBjaV90YWJsZSk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJZ290byBpbml0 X21jX2RvbmU7Cj4+IC0KPj4gLQljaV9zZXRfdmFsaWRfZmxhZyhjaV90YWJsZSk7Cj4+IC0KPj4g LWluaXRfbWNfZG9uZToKPj4gLQlrZnJlZSh0YWJsZSk7Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+ PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX3BvcHVsYXRlX21jX3JlZ19hZGRyZXNzZXMoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCVNNVTdfRGlzY3JldGVfTUNSZWdpc3Rl cnMKPj4gKm1jX3JlZ190YWJsZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkg PSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JdTMyIGksIGo7Cj4+IC0KPj4gLQlmb3IgKGkgPSAwLCBq ID0gMDsgaiA8IHBpLT5tY19yZWdfdGFibGUubGFzdDsgaisrKSB7Cj4+IC0JCWlmIChwaS0+bWNf cmVnX3RhYmxlLnZhbGlkX2ZsYWcgJiAoMSA8PCBqKSkgewo+PiAtCQkJaWYgKGkgPj0gU01VN19E SVNDUkVURV9NQ19SRUdJU1RFUl9BUlJBWV9TSVpFKQo+PiAtCQkJCXJldHVybiAtRUlOVkFMOwo+ PiAtCQkJbWNfcmVnX3RhYmxlLT5hZGRyZXNzW2ldLnMwID0gY3B1X3RvX2JlMTYocGktCj4+PiBt Y19yZWdfdGFibGUubWNfcmVnX2FkZHJlc3Nbal0uczApOwo+PiAtCQkJbWNfcmVnX3RhYmxlLT5h ZGRyZXNzW2ldLnMxID0gY3B1X3RvX2JlMTYocGktCj4+PiBtY19yZWdfdGFibGUubWNfcmVnX2Fk ZHJlc3Nbal0uczEpOwo+PiAtCQkJaSsrOwo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JbWNfcmVn X3RhYmxlLT5sYXN0ID0gKHU4KWk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAt c3RhdGljIHZvaWQgY2lfY29udmVydF9tY19yZWdpc3RlcnMoY29uc3Qgc3RydWN0IGNpX21jX3Jl Z19lbnRyeSAqZW50cnksCj4+IC0JCQkJICAgIFNNVTdfRGlzY3JldGVfTUNSZWdpc3RlclNldCAq ZGF0YSwKPj4gLQkJCQkgICAgdTMyIG51bV9lbnRyaWVzLCB1MzIgdmFsaWRfZmxhZykKPj4gLXsK Pj4gLQl1MzIgaSwgajsKPj4gLQo+PiAtCWZvciAoaSA9IDAsIGogPSAwOyBqIDwgbnVtX2VudHJp ZXM7IGorKykgewo+PiAtCQlpZiAodmFsaWRfZmxhZyAmICgxIDw8IGopKSB7Cj4+IC0JCQlkYXRh LT52YWx1ZVtpXSA9IGNwdV90b19iZTMyKGVudHJ5LT5tY19kYXRhW2pdKTsKPj4gLQkJCWkrKzsK Pj4gLQkJfQo+PiAtCX0KPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfY29udmVydF9tY19y ZWdfdGFibGVfZW50cnlfdG9fc21jKHN0cnVjdCBhbWRncHVfZGV2aWNlCj4+ICphZGV2LAo+PiAt CQkJCQkJIGNvbnN0IHUzMiBtZW1vcnlfY2xvY2ssCj4+IC0KPj4gU01VN19EaXNjcmV0ZV9NQ1Jl Z2lzdGVyU2V0ICptY19yZWdfdGFibGVfZGF0YSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJf aW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0JdTMyIGkgPSAwOwo+PiAtCj4+IC0JZm9y KGkgPSAwOyBpIDwgcGktPm1jX3JlZ190YWJsZS5udW1fZW50cmllczsgaSsrKSB7Cj4+IC0JCWlm IChtZW1vcnlfY2xvY2sgPD0gcGktCj4+PiBtY19yZWdfdGFibGUubWNfcmVnX3RhYmxlX2VudHJ5 W2ldLm1jbGtfbWF4KQo+PiAtCQkJYnJlYWs7Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKChpID09IHBp LT5tY19yZWdfdGFibGUubnVtX2VudHJpZXMpICYmIChpID4gMCkpCj4+IC0JCS0taTsKPj4gLQo+ PiAtCWNpX2NvbnZlcnRfbWNfcmVnaXN0ZXJzKCZwaS0+bWNfcmVnX3RhYmxlLm1jX3JlZ190YWJs ZV9lbnRyeVtpXSwKPj4gLQkJCQltY19yZWdfdGFibGVfZGF0YSwgcGktPm1jX3JlZ190YWJsZS5s YXN0LAo+PiAtCQkJCXBpLT5tY19yZWdfdGFibGUudmFsaWRfZmxhZyk7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyB2b2lkIGNpX2NvbnZlcnRfbWNfcmVnX3RhYmxlX3RvX3NtYyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKPj4gLQkJCQkJICAgU01VN19EaXNjcmV0ZV9NQ1JlZ2lzdGVycwo+PiAq bWNfcmVnX3RhYmxlKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dl dF9waShhZGV2KTsKPj4gLQl1MzIgaTsKPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBwaS0+ZHBt X3RhYmxlLm1jbGtfdGFibGUuY291bnQ7IGkrKykKPj4gLQkJY2lfY29udmVydF9tY19yZWdfdGFi bGVfZW50cnlfdG9fc21jKGFkZXYsCj4+IC0JCQkJCQkgICAgIHBpLQo+Pj4gZHBtX3RhYmxlLm1j bGtfdGFibGUuZHBtX2xldmVsc1tpXS52YWx1ZSwKPj4gLQkJCQkJCSAgICAgJm1jX3JlZ190YWJs ZS0+ZGF0YVtpXSk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfcG9wdWxhdGVfaW5pdGlh bF9tY19yZWdfdGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3Ry dWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCWludCByZXQ7Cj4+ IC0KPj4gLQltZW1zZXQoJnBpLT5zbWNfbWNfcmVnX3RhYmxlLCAwLAo+PiBzaXplb2YoU01VN19E aXNjcmV0ZV9NQ1JlZ2lzdGVycykpOwo+PiAtCj4+IC0JcmV0ID0gY2lfcG9wdWxhdGVfbWNfcmVn X2FkZHJlc3NlcyhhZGV2LCAmcGktCj4+PiBzbWNfbWNfcmVnX3RhYmxlKTsKPj4gLQlpZiAocmV0 KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCWNpX2NvbnZlcnRfbWNfcmVnX3RhYmxlX3RvX3NtYyhh ZGV2LCAmcGktPnNtY19tY19yZWdfdGFibGUpOwo+PiAtCj4+IC0JcmV0dXJuIGFtZGdwdV9jaV9j b3B5X2J5dGVzX3RvX3NtYyhhZGV2LAo+PiAtCQkJCSAgICBwaS0+bWNfcmVnX3RhYmxlX3N0YXJ0 LAo+PiAtCQkJCSAgICAodTggKikmcGktPnNtY19tY19yZWdfdGFibGUsCj4+IC0JCQkJICAgIHNp emVvZihTTVU3X0Rpc2NyZXRlX01DUmVnaXN0ZXJzKSwKPj4gLQkJCQkgICAgcGktPnNyYW1fZW5k KTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV91cGRhdGVfYW5kX3VwbG9hZF9tY19yZWdf dGFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UKPj4gKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNp X3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCj4+IC0JaWYgKCEocGktPm5l ZWRfdXBkYXRlX3NtdTdfZHBtX3RhYmxlICYKPj4gRFBNVEFCTEVfT0RfVVBEQVRFX01DTEspKQo+ PiAtCQlyZXR1cm4gMDsKPj4gLQo+PiAtCW1lbXNldCgmcGktPnNtY19tY19yZWdfdGFibGUsIDAs Cj4+IHNpemVvZihTTVU3X0Rpc2NyZXRlX01DUmVnaXN0ZXJzKSk7Cj4+IC0KPj4gLQljaV9jb252 ZXJ0X21jX3JlZ190YWJsZV90b19zbWMoYWRldiwgJnBpLT5zbWNfbWNfcmVnX3RhYmxlKTsKPj4g LQo+PiAtCXJldHVybiBhbWRncHVfY2lfY29weV9ieXRlc190b19zbWMoYWRldiwKPj4gLQkJCQkg ICAgcGktPm1jX3JlZ190YWJsZV9zdGFydCArCj4+IC0JCQkJICAgIG9mZnNldG9mKFNNVTdfRGlz Y3JldGVfTUNSZWdpc3RlcnMsCj4+IGRhdGFbMF0pLAo+PiAtCQkJCSAgICAodTggKikmcGktPnNt Y19tY19yZWdfdGFibGUuZGF0YVswXSwKPj4gLQkJCQkgICAgc2l6ZW9mKFNNVTdfRGlzY3JldGVf TUNSZWdpc3RlclNldCkgKgo+PiAtCQkJCSAgICBwaS0+ZHBtX3RhYmxlLm1jbGtfdGFibGUuY291 bnQsCj4+IC0JCQkJICAgIHBpLT5zcmFtX2VuZCk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lk IGNpX2VuYWJsZV92b2x0YWdlX2NvbnRyb2woc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ IC17Cj4+IC0JdTMyIHRtcCA9IFJSRUczMl9TTUMoaXhHRU5FUkFMX1BXUk1HVCk7Cj4+IC0KPj4g LQl0bXAgfD0gR0VORVJBTF9QV1JNR1RfX1ZPTFRfUFdSTUdUX0VOX01BU0s7Cj4+IC0JV1JFRzMy X1NNQyhpeEdFTkVSQUxfUFdSTUdULCB0bXApOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgZW51bSBh bWRncHVfcGNpZV9nZW4gY2lfZ2V0X21heGltdW1fbGlua19zcGVlZChzdHJ1Y3QKPj4gYW1kZ3B1 X2RldmljZSAqYWRldiwKPj4gLQkJCQkJCSAgICAgIHN0cnVjdCBhbWRncHVfcHMKPj4gKmFtZGdw dV9zdGF0ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnN0YXRlID0gY2lfZ2V0X3BzKGFtZGdw dV9zdGF0ZSk7Cj4+IC0JaW50IGk7Cj4+IC0JdTE2IHBjaWVfc3BlZWQsIG1heF9zcGVlZCA9IDA7 Cj4+IC0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50 OyBpKyspIHsKPj4gLQkJcGNpZV9zcGVlZCA9IHN0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0u cGNpZV9nZW47Cj4+IC0JCWlmIChtYXhfc3BlZWQgPCBwY2llX3NwZWVkKQo+PiAtCQkJbWF4X3Nw ZWVkID0gcGNpZV9zcGVlZDsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gbWF4X3NwZWVkOwo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgdTE2IGNpX2dldF9jdXJyZW50X3BjaWVfc3BlZWQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0JdTMyIHNwZWVkX2NudGwgPSAwOwo+PiAtCj4+ IC0Jc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFKGl4UENJRV9MQ19TUEVFRF9DTlRMKSAmCj4+IC0J CVBDSUVfTENfU1BFRURfQ05UTF9fTENfQ1VSUkVOVF9EQVRBX1JBVEVfTUFTSzsKPj4gLQlzcGVl ZF9jbnRsID4+PQo+PiBQQ0lFX0xDX1NQRUVEX0NOVExfX0xDX0NVUlJFTlRfREFUQV9SQVRFX19T SElGVDsKPj4gLQo+PiAtCXJldHVybiAodTE2KXNwZWVkX2NudGw7Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyBpbnQgY2lfZ2V0X2N1cnJlbnRfcGNpZV9sYW5lX251bWJlcihzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldikKPj4gLXsKPj4gLQl1MzIgbGlua193aWR0aCA9IDA7Cj4+IC0KPj4gLQlsaW5r X3dpZHRoID0gUlJFRzMyX1BDSUUoaXhQQ0lFX0xDX0xJTktfV0lEVEhfQ05UTCkgJgo+PiAtCQlQ Q0lFX0xDX0xJTktfV0lEVEhfQ05UTF9fTENfTElOS19XSURUSF9SRF9NQVNLOwo+PiAtCWxpbmtf d2lkdGggPj49Cj4+IFBDSUVfTENfTElOS19XSURUSF9DTlRMX19MQ19MSU5LX1dJRFRIX1JEX19T SElGVDsKPj4gLQo+PiAtCXN3aXRjaCAobGlua193aWR0aCkgewo+PiAtCWNhc2UgMToKPj4gLQkJ cmV0dXJuIDE7Cj4+IC0JY2FzZSAyOgo+PiAtCQlyZXR1cm4gMjsKPj4gLQljYXNlIDM6Cj4+IC0J CXJldHVybiA0Owo+PiAtCWNhc2UgNDoKPj4gLQkJcmV0dXJuIDg7Cj4+IC0JY2FzZSAwOgo+PiAt CWNhc2UgNjoKPj4gLQlkZWZhdWx0Ogo+PiAtCQlyZXR1cm4gMTY7Cj4+IC0JfQo+PiAtfQo+PiAt Cj4+IC1zdGF0aWMgdm9pZCBjaV9yZXF1ZXN0X2xpbmtfc3BlZWRfY2hhbmdlX2JlZm9yZV9zdGF0 ZV9jaGFuZ2Uoc3RydWN0Cj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCQkJICAgICBz dHJ1Y3QgYW1kZ3B1X3BzCj4+ICphbWRncHVfbmV3X3N0YXRlLAo+PiAtCQkJCQkJCSAgICAgc3Ry dWN0IGFtZGdwdV9wcwo+PiAqYW1kZ3B1X2N1cnJlbnRfc3RhdGUpCj4+IC17Cj4+IC0Jc3RydWN0 IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCWVudW0gYW1kZ3B1X3Bj aWVfZ2VuIHRhcmdldF9saW5rX3NwZWVkID0KPj4gLQkJY2lfZ2V0X21heGltdW1fbGlua19zcGVl ZChhZGV2LCBhbWRncHVfbmV3X3N0YXRlKTsKPj4gLQllbnVtIGFtZGdwdV9wY2llX2dlbiBjdXJy ZW50X2xpbmtfc3BlZWQ7Cj4+IC0KPj4gLQlpZiAocGktPmZvcmNlX3BjaWVfZ2VuID09IEFNREdQ VV9QQ0lFX0dFTl9JTlZBTElEKQo+PiAtCQljdXJyZW50X2xpbmtfc3BlZWQgPSBjaV9nZXRfbWF4 aW11bV9saW5rX3NwZWVkKGFkZXYsCj4+IGFtZGdwdV9jdXJyZW50X3N0YXRlKTsKPj4gLQllbHNl Cj4+IC0JCWN1cnJlbnRfbGlua19zcGVlZCA9IHBpLT5mb3JjZV9wY2llX2dlbjsKPj4gLQo+PiAt CXBpLT5mb3JjZV9wY2llX2dlbiA9IEFNREdQVV9QQ0lFX0dFTl9JTlZBTElEOwo+PiAtCXBpLT5w c3BwX25vdGlmeV9yZXF1aXJlZCA9IGZhbHNlOwo+PiAtCWlmICh0YXJnZXRfbGlua19zcGVlZCA+ IGN1cnJlbnRfbGlua19zcGVlZCkgewo+PiAtCQlzd2l0Y2ggKHRhcmdldF9saW5rX3NwZWVkKSB7 Cj4+IC0jaWZkZWYgQ09ORklHX0FDUEkKPj4gLQkJY2FzZSBBTURHUFVfUENJRV9HRU4zOgo+PiAt CQkJaWYgKGFtZGdwdV9hY3BpX3BjaWVfcGVyZm9ybWFuY2VfcmVxdWVzdChhZGV2LAo+PiBQQ0lF X1BFUkZfUkVRX1BFQ0lfR0VOMywgZmFsc2UpID09IDApCj4+IC0JCQkJYnJlYWs7Cj4+IC0JCQlw aS0+Zm9yY2VfcGNpZV9nZW4gPSBBTURHUFVfUENJRV9HRU4yOwo+PiAtCQkJaWYgKGN1cnJlbnRf bGlua19zcGVlZCA9PSBBTURHUFVfUENJRV9HRU4yKQo+PiAtCQkJCWJyZWFrOwo+PiAtCQljYXNl IEFNREdQVV9QQ0lFX0dFTjI6Cj4+IC0JCQlpZiAoYW1kZ3B1X2FjcGlfcGNpZV9wZXJmb3JtYW5j ZV9yZXF1ZXN0KGFkZXYsCj4+IFBDSUVfUEVSRl9SRVFfUEVDSV9HRU4yLCBmYWxzZSkgPT0gMCkK Pj4gLQkJCQlicmVhazsKPj4gLSNlbmRpZgo+PiAtCQlkZWZhdWx0Ogo+PiAtCQkJcGktPmZvcmNl X3BjaWVfZ2VuID0KPj4gY2lfZ2V0X2N1cnJlbnRfcGNpZV9zcGVlZChhZGV2KTsKPj4gLQkJCWJy ZWFrOwo+PiAtCQl9Cj4+IC0JfSBlbHNlIHsKPj4gLQkJaWYgKHRhcmdldF9saW5rX3NwZWVkIDwg Y3VycmVudF9saW5rX3NwZWVkKQo+PiAtCQkJcGktPnBzcHBfbm90aWZ5X3JlcXVpcmVkID0gdHJ1 ZTsKPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX25vdGlmeV9saW5rX3NwZWVk X2NoYW5nZV9hZnRlcl9zdGF0ZV9jaGFuZ2Uoc3RydWN0Cj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYs Cj4+IC0JCQkJCQkJICAgc3RydWN0IGFtZGdwdV9wcwo+PiAqYW1kZ3B1X25ld19zdGF0ZSwKPj4g LQkJCQkJCQkgICBzdHJ1Y3QgYW1kZ3B1X3BzCj4+ICphbWRncHVfY3VycmVudF9zdGF0ZSkKPj4g LXsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0J ZW51bSBhbWRncHVfcGNpZV9nZW4gdGFyZ2V0X2xpbmtfc3BlZWQgPQo+PiAtCQljaV9nZXRfbWF4 aW11bV9saW5rX3NwZWVkKGFkZXYsIGFtZGdwdV9uZXdfc3RhdGUpOwo+PiAtCXU4IHJlcXVlc3Q7 Cj4+IC0KPj4gLQlpZiAocGktPnBzcHBfbm90aWZ5X3JlcXVpcmVkKSB7Cj4+IC0JCWlmICh0YXJn ZXRfbGlua19zcGVlZCA9PSBBTURHUFVfUENJRV9HRU4zKQo+PiAtCQkJcmVxdWVzdCA9IFBDSUVf UEVSRl9SRVFfUEVDSV9HRU4zOwo+PiAtCQllbHNlIGlmICh0YXJnZXRfbGlua19zcGVlZCA9PSBB TURHUFVfUENJRV9HRU4yKQo+PiAtCQkJcmVxdWVzdCA9IFBDSUVfUEVSRl9SRVFfUEVDSV9HRU4y Owo+PiAtCQllbHNlCj4+IC0JCQlyZXF1ZXN0ID0gUENJRV9QRVJGX1JFUV9QRUNJX0dFTjE7Cj4+ IC0KPj4gLQkJaWYgKChyZXF1ZXN0ID09IFBDSUVfUEVSRl9SRVFfUEVDSV9HRU4xKSAmJgo+PiAt CQkgICAgKGNpX2dldF9jdXJyZW50X3BjaWVfc3BlZWQoYWRldikgPiAwKSkKPj4gLQkJCXJldHVy bjsKPj4gLQo+PiAtI2lmZGVmIENPTkZJR19BQ1BJCj4+IC0JCWFtZGdwdV9hY3BpX3BjaWVfcGVy Zm9ybWFuY2VfcmVxdWVzdChhZGV2LCByZXF1ZXN0LAo+PiBmYWxzZSk7Cj4+IC0jZW5kaWYKPj4g LQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfc2V0X3ByaXZhdGVfZGF0YV92YXJpYWJs ZXNfYmFzZWRfb25fcHB0YWJsZShzdHJ1Y3QKPj4gYW1kZ3B1X2RldmljZSAqYWRldikKPj4gLXsK Pj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0Jc3Ry dWN0IGFtZGdwdV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUKPj4gKmFsbG93ZWRfc2Ns a192ZGRjX3RhYmxlID0KPj4gLQkJJmFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY19kZXBlbmRl bmN5X29uX3NjbGs7Cj4+IC0Jc3RydWN0IGFtZGdwdV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUKPj4gKmFsbG93ZWRfbWNsa192ZGRjX3RhYmxlID0KPj4gLQkJJmFkZXYtPnBtLmRwbS5k eW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX21jbGs7Cj4+IC0Jc3RydWN0IGFtZGdwdV9jbG9j a192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUKPj4gKmFsbG93ZWRfbWNsa192ZGRjaV90YWJsZSA9 Cj4+IC0JCSZhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNpX2RlcGVuZGVuY3lfb25fbWNsazsK Pj4gLQo+PiAtCWlmIChhbGxvd2VkX3NjbGtfdmRkY190YWJsZSA9PSBOVUxMKQo+PiAtCQlyZXR1 cm4gLUVJTlZBTDsKPj4gLQlpZiAoYWxsb3dlZF9zY2xrX3ZkZGNfdGFibGUtPmNvdW50IDwgMSkK Pj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JaWYgKGFsbG93ZWRfbWNsa192ZGRjX3RhYmxlID09 IE5VTEwpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCWlmIChhbGxvd2VkX21jbGtfdmRkY190 YWJsZS0+Y291bnQgPCAxKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQlpZiAoYWxsb3dlZF9t Y2xrX3ZkZGNpX3RhYmxlID09IE5VTEwpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCWlmIChh bGxvd2VkX21jbGtfdmRkY2lfdGFibGUtPmNvdW50IDwgMSkKPj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4+IC0KPj4gLQlwaS0+bWluX3ZkZGNfaW5fcHBfdGFibGUgPSBhbGxvd2VkX3NjbGtfdmRkY190 YWJsZS0+ZW50cmllc1swXS52Owo+PiAtCXBpLT5tYXhfdmRkY19pbl9wcF90YWJsZSA9Cj4+IC0J CWFsbG93ZWRfc2Nsa192ZGRjX3RhYmxlLT5lbnRyaWVzW2FsbG93ZWRfc2Nsa192ZGRjX3RhYmxl LQo+Pj4gY291bnQgLSAxXS52Owo+PiAtCj4+IC0JcGktPm1pbl92ZGRjaV9pbl9wcF90YWJsZSA9 IGFsbG93ZWRfbWNsa192ZGRjaV90YWJsZS0KPj4+IGVudHJpZXNbMF0udjsKPj4gLQlwaS0+bWF4 X3ZkZGNpX2luX3BwX3RhYmxlID0KPj4gLQkJYWxsb3dlZF9tY2xrX3ZkZGNpX3RhYmxlLQo+Pj4g ZW50cmllc1thbGxvd2VkX21jbGtfdmRkY2lfdGFibGUtPmNvdW50IC0gMV0udjsKPj4gLQo+PiAt CWFkZXYtPnBtLmRwbS5keW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fYWMuc2NsayA9Cj4+ IC0JCWFsbG93ZWRfc2Nsa192ZGRjX3RhYmxlLT5lbnRyaWVzW2FsbG93ZWRfc2Nsa192ZGRjX3Rh YmxlLQo+Pj4gY291bnQgLSAxXS5jbGs7Cj4+IC0JYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5tYXhf Y2xvY2tfdm9sdGFnZV9vbl9hYy5tY2xrID0KPj4gLQkJYWxsb3dlZF9tY2xrX3ZkZGNfdGFibGUt Cj4+PiBlbnRyaWVzW2FsbG93ZWRfc2Nsa192ZGRjX3RhYmxlLT5jb3VudCAtIDFdLmNsazsKPj4g LQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2FjLnZkZGMgPQo+ PiAtCQlhbGxvd2VkX3NjbGtfdmRkY190YWJsZS0+ZW50cmllc1thbGxvd2VkX3NjbGtfdmRkY190 YWJsZS0KPj4+IGNvdW50IC0gMV0udjsKPj4gLQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLm1heF9j bG9ja192b2x0YWdlX29uX2FjLnZkZGNpID0KPj4gLQkJYWxsb3dlZF9tY2xrX3ZkZGNpX3RhYmxl LQo+Pj4gZW50cmllc1thbGxvd2VkX21jbGtfdmRkY2lfdGFibGUtPmNvdW50IC0gMV0udjsKPj4g LQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9wYXRjaF93aXRo X3ZkZGNfbGVha2FnZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTE2Cj4+ICp2ZGRjKQo+ PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4g LQlzdHJ1Y3QgY2lfbGVha2FnZV92b2x0YWdlICpsZWFrYWdlX3RhYmxlID0gJnBpLT52ZGRjX2xl YWthZ2U7Cj4+IC0JdTMyIGxlYWthZ2VfaW5kZXg7Cj4+IC0KPj4gLQlmb3IgKGxlYWthZ2VfaW5k ZXggPSAwOyBsZWFrYWdlX2luZGV4IDwgbGVha2FnZV90YWJsZS0+Y291bnQ7Cj4+IGxlYWthZ2Vf aW5kZXgrKykgewo+PiAtCQlpZiAobGVha2FnZV90YWJsZS0+bGVha2FnZV9pZFtsZWFrYWdlX2lu ZGV4XSA9PSAqdmRkYykgewo+PiAtCQkJKnZkZGMgPSBsZWFrYWdlX3RhYmxlLQo+Pj4gYWN0dWFs X3ZvbHRhZ2VbbGVha2FnZV9pbmRleF07Cj4+IC0JCQlicmVhazsKPj4gLQkJfQo+PiAtCX0KPj4g LX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfcGF0Y2hfd2l0aF92ZGRjaV9sZWFrYWdlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LCB1MTYKPj4gKnZkZGNpKQo+PiAtewo+PiAtCXN0cnVjdCBj aV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4gLQlzdHJ1Y3QgY2lfbGVha2Fn ZV92b2x0YWdlICpsZWFrYWdlX3RhYmxlID0gJnBpLT52ZGRjaV9sZWFrYWdlOwo+PiAtCXUzMiBs ZWFrYWdlX2luZGV4Owo+PiAtCj4+IC0JZm9yIChsZWFrYWdlX2luZGV4ID0gMDsgbGVha2FnZV9p bmRleCA8IGxlYWthZ2VfdGFibGUtPmNvdW50Owo+PiBsZWFrYWdlX2luZGV4KyspIHsKPj4gLQkJ aWYgKGxlYWthZ2VfdGFibGUtPmxlYWthZ2VfaWRbbGVha2FnZV9pbmRleF0gPT0gKnZkZGNpKSB7 Cj4+IC0JCQkqdmRkY2kgPSBsZWFrYWdlX3RhYmxlLQo+Pj4gYWN0dWFsX3ZvbHRhZ2VbbGVha2Fn ZV9pbmRleF07Cj4+IC0JCQlicmVhazsKPj4gLQkJfQo+PiAtCX0KPj4gLX0KPj4gLQo+PiAtc3Rh dGljIHZvaWQKPj4gY2lfcGF0Y2hfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlX3dpdGhf dmRkY19sZWFrYWdlKHN0cnVjdAo+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+PiAtCQkJCQkJCQkg ICAgICBzdHJ1Y3QKPj4gYW1kZ3B1X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdGFi bGUpCj4+IC17Cj4+IC0JdTMyIGk7Cj4+IC0KPj4gLQlpZiAodGFibGUpIHsKPj4gLQkJZm9yIChp ID0gMDsgaSA8IHRhYmxlLT5jb3VudDsgaSsrKQo+PiAtCQkJY2lfcGF0Y2hfd2l0aF92ZGRjX2xl YWthZ2UoYWRldiwgJnRhYmxlLQo+Pj4gZW50cmllc1tpXS52KTsKPj4gLQl9Cj4+IC19Cj4+IC0K Pj4gLXN0YXRpYyB2b2lkCj4+IGNpX3BhdGNoX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJs ZV93aXRoX3ZkZGNpX2xlYWthZ2Uoc3RydWN0Cj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0J CQkJCQkJCSAgICAgICBzdHJ1Y3QKPj4gYW1kZ3B1X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90 YWJsZSAqdGFibGUpCj4+IC17Cj4+IC0JdTMyIGk7Cj4+IC0KPj4gLQlpZiAodGFibGUpIHsKPj4g LQkJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5jb3VudDsgaSsrKQo+PiAtCQkJY2lfcGF0Y2hfd2l0 aF92ZGRjaV9sZWFrYWdlKGFkZXYsICZ0YWJsZS0KPj4+IGVudHJpZXNbaV0udik7Cj4+IC0JfQo+ PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZAo+PiBjaV9wYXRjaF92Y2VfY2xvY2tfdm9sdGFnZV9k ZXBlbmRlbmN5X3RhYmxlX3dpdGhfdmRkY19sZWFrYWdlKHN0cnVjdAo+PiBhbWRncHVfZGV2aWNl ICphZGV2LAo+PiAtCj4+IHN0cnVjdCBhbWRncHVfdmNlX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5j eV90YWJsZSAqdGFibGUpCj4+IC17Cj4+IC0JdTMyIGk7Cj4+IC0KPj4gLQlpZiAodGFibGUpIHsK Pj4gLQkJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5jb3VudDsgaSsrKQo+PiAtCQkJY2lfcGF0Y2hf d2l0aF92ZGRjX2xlYWthZ2UoYWRldiwgJnRhYmxlLQo+Pj4gZW50cmllc1tpXS52KTsKPj4gLQl9 Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkCj4+IGNpX3BhdGNoX3V2ZF9jbG9ja192b2x0YWdl X2RlcGVuZGVuY3lfdGFibGVfd2l0aF92ZGRjX2xlYWthZ2Uoc3RydWN0Cj4+IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4+IC0KPj4gc3RydWN0IGFtZGdwdV91dmRfY2xvY2tfdm9sdGFnZV9kZXBlbmRl bmN5X3RhYmxlICp0YWJsZSkKPj4gLXsKPj4gLQl1MzIgaTsKPj4gLQo+PiAtCWlmICh0YWJsZSkg ewo+PiAtCQlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPmNvdW50OyBpKyspCj4+IC0JCQljaV9wYXRj aF93aXRoX3ZkZGNfbGVha2FnZShhZGV2LCAmdGFibGUtCj4+PiBlbnRyaWVzW2ldLnYpOwo+PiAt CX0KPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQKPj4gY2lfcGF0Y2hfdmRkY19waGFzZV9zaGVk X2xpbWl0X3RhYmxlX3dpdGhfdmRkY19sZWFrYWdlKHN0cnVjdAo+PiBhbWRncHVfZGV2aWNlICph ZGV2LAo+PiAtCQkJCQkJCQkgICBzdHJ1Y3QKPj4gYW1kZ3B1X3BoYXNlX3NoZWRkaW5nX2xpbWl0 c190YWJsZSAqdGFibGUpCj4+IC17Cj4+IC0JdTMyIGk7Cj4+IC0KPj4gLQlpZiAodGFibGUpIHsK Pj4gLQkJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5jb3VudDsgaSsrKQo+PiAtCQkJY2lfcGF0Y2hf d2l0aF92ZGRjX2xlYWthZ2UoYWRldiwgJnRhYmxlLQo+Pj4gZW50cmllc1tpXS52b2x0YWdlKTsK Pj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX3BhdGNoX2Nsb2NrX3ZvbHRhZ2Vf bGltaXRzX3dpdGhfdmRkY19sZWFrYWdlKHN0cnVjdAo+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+ PiAtCQkJCQkJCSAgICBzdHJ1Y3QKPj4gYW1kZ3B1X2Nsb2NrX2FuZF92b2x0YWdlX2xpbWl0cyAq dGFibGUpCj4+IC17Cj4+IC0JaWYgKHRhYmxlKSB7Cj4+IC0JCWNpX3BhdGNoX3dpdGhfdmRkY19s ZWFrYWdlKGFkZXYsICh1MTYgKikmdGFibGUtPnZkZGMpOwo+PiAtCQljaV9wYXRjaF93aXRoX3Zk ZGNpX2xlYWthZ2UoYWRldiwgKHUxNiAqKSZ0YWJsZS0+dmRkY2kpOwo+PiAtCX0KPj4gLX0KPj4g LQo+PiAtc3RhdGljIHZvaWQgY2lfcGF0Y2hfY2FjX2xlYWthZ2VfdGFibGVfd2l0aF92ZGRjX2xl YWthZ2Uoc3RydWN0Cj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJCQkJIHN0cnVjdAo+ PiBhbWRncHVfY2FjX2xlYWthZ2VfdGFibGUgKnRhYmxlKQo+PiAtewo+PiAtCXUzMiBpOwo+PiAt Cj4+IC0JaWYgKHRhYmxlKSB7Cj4+IC0JCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+Y291bnQ7IGkr KykKPj4gLQkJCWNpX3BhdGNoX3dpdGhfdmRkY19sZWFrYWdlKGFkZXYsICZ0YWJsZS0KPj4+IGVu dHJpZXNbaV0udmRkYyk7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9wYXRj aF9kZXBlbmRlbmN5X3RhYmxlc193aXRoX2xlYWthZ2Uoc3RydWN0Cj4+IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCj4+IC17Cj4+IC0KPj4gLQo+PiAJY2lfcGF0Y2hfY2xvY2tfdm9sdGFnZV9kZXBlbmRl bmN5X3RhYmxlX3dpdGhfdmRkY19sZWFrYWdlKGFkZQo+PiB2LAo+PiAtCQkJCQkJCQkgICZhZGV2 LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2Nsayk7Cj4+IC0KPj4g CWNpX3BhdGNoX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZV93aXRoX3ZkZGNfbGVha2Fn ZShhZGUKPj4gdiwKPj4gLQkJCQkJCQkJICAmYWRldi0KPj4+IHBtLmRwbS5keW5fc3RhdGUudmRk Y19kZXBlbmRlbmN5X29uX21jbGspOwo+PiAtCj4+IAljaV9wYXRjaF9jbG9ja192b2x0YWdlX2Rl cGVuZGVuY3lfdGFibGVfd2l0aF92ZGRjX2xlYWthZ2UoYWRlCj4+IHYsCj4+IC0JCQkJCQkJCSAg JmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNwY2xrKTsK Pj4gLQo+PiAJY2lfcGF0Y2hfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlX3dpdGhfdmRk Y2lfbGVha2FnZShhZAo+PiBldiwKPj4gLQkJCQkJCQkJICAgJmFkZXYtCj4+PiBwbS5kcG0uZHlu X3N0YXRlLnZkZGNpX2RlcGVuZGVuY3lfb25fbWNsayk7Cj4+IC0KPj4gCWNpX3BhdGNoX3ZjZV9j bG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGVfd2l0aF92ZGRjX2xlYWthZ2UKPj4gKGFkZXYs Cj4+IC0JCQkJCQkJCSAgICAgICZhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52Y2VfY2xvY2tf dm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKTsKPj4gLQo+PiAJY2lfcGF0Y2hfdXZkX2Nsb2NrX3Zv bHRhZ2VfZGVwZW5kZW5jeV90YWJsZV93aXRoX3ZkZGNfbGVha2FnCj4+IGUoYWRldiwKPj4gLQkJ CQkJCQkJICAgICAgJmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnV2ZF9jbG9ja192b2x0YWdl X2RlcGVuZGVuY3lfdGFibGUpOwo+PiAtCj4+IAljaV9wYXRjaF9jbG9ja192b2x0YWdlX2RlcGVu ZGVuY3lfdGFibGVfd2l0aF92ZGRjX2xlYWthZ2UoYWRlCj4+IHYsCj4+IC0JCQkJCQkJCSAgJmFk ZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnNhbXVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3Rh YmxlKTsKPj4gLQo+PiAJY2lfcGF0Y2hfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlX3dp dGhfdmRkY19sZWFrYWdlKGFkZQo+PiB2LAo+PiAtCQkJCQkJCQkgICZhZGV2LQo+Pj4gcG0uZHBt LmR5bl9zdGF0ZS5hY3BfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKTsKPj4gLQljaV9w YXRjaF92ZGRjX3BoYXNlX3NoZWRfbGltaXRfdGFibGVfd2l0aF92ZGRjX2xlYWthZ2UoYWRldiwK Pj4gLQkJCQkJCQkgICAgICAgJmFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnBoYXNlX3NoZWRk aW5nX2xpbWl0c190YWJsZSk7Cj4+IC0JY2lfcGF0Y2hfY2xvY2tfdm9sdGFnZV9saW1pdHNfd2l0 aF92ZGRjX2xlYWthZ2UoYWRldiwKPj4gLQkJCQkJCQkmYWRldi0KPj4+IHBtLmRwbS5keW5fc3Rh dGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fYWMpOwo+PiAtCWNpX3BhdGNoX2Nsb2NrX3ZvbHRhZ2Vf bGltaXRzX3dpdGhfdmRkY19sZWFrYWdlKGFkZXYsCj4+IC0JCQkJCQkJJmFkZXYtCj4+PiBwbS5k cG0uZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2RjKTsKPj4gLQljaV9wYXRjaF9jYWNf bGVha2FnZV90YWJsZV93aXRoX3ZkZGNfbGVha2FnZShhZGV2LAo+PiAtCQkJCQkJICAgICAmYWRl di0KPj4+IHBtLmRwbS5keW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFibGUpOwo+PiAtCj4+IC19Cj4+ IC0KPj4gLXN0YXRpYyB2b2lkIGNpX3VwZGF0ZV9jdXJyZW50X3BzKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+PiAtCQkJCSBzdHJ1Y3QgYW1kZ3B1X3BzICpycHMpCj4+IC17Cj4+IC0Jc3Ry dWN0IGNpX3BzICpuZXdfcHMgPSBjaV9nZXRfcHMocnBzKTsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJf aW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0KPj4gLQlwaS0+Y3VycmVudF9ycHMgPSAq cnBzOwo+PiAtCXBpLT5jdXJyZW50X3BzID0gKm5ld19wczsKPj4gLQlwaS0+Y3VycmVudF9ycHMu cHNfcHJpdiA9ICZwaS0+Y3VycmVudF9wczsKPj4gLQlhZGV2LT5wbS5kcG0uY3VycmVudF9wcyA9 ICZwaS0+Y3VycmVudF9ycHM7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX3VwZGF0ZV9y ZXF1ZXN0ZWRfcHMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJICAgc3RydWN0 IGFtZGdwdV9wcyAqcnBzKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wcyAqbmV3X3BzID0gY2lfZ2V0 X3BzKHJwcyk7Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYp Owo+PiAtCj4+IC0JcGktPnJlcXVlc3RlZF9ycHMgPSAqcnBzOwo+PiAtCXBpLT5yZXF1ZXN0ZWRf cHMgPSAqbmV3X3BzOwo+PiAtCXBpLT5yZXF1ZXN0ZWRfcnBzLnBzX3ByaXYgPSAmcGktPnJlcXVl c3RlZF9wczsKPj4gLQlhZGV2LT5wbS5kcG0ucmVxdWVzdGVkX3BzID0gJnBpLT5yZXF1ZXN0ZWRf cnBzOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9wcmVfc2V0X3Bvd2VyX3N0YXRl KHZvaWQgKmhhbmRsZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAq cGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0Jc3RydWN0IGFtZGdwdV9wcyByZXF1ZXN0ZWRfcHMg PSAqYWRldi0+cG0uZHBtLnJlcXVlc3RlZF9wczsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X3BzICpuZXdf cHMgPSAmcmVxdWVzdGVkX3BzOwo+PiAtCj4+IC0JY2lfdXBkYXRlX3JlcXVlc3RlZF9wcyhhZGV2 LCBuZXdfcHMpOwo+PiAtCj4+IC0JY2lfYXBwbHlfc3RhdGVfYWRqdXN0X3J1bGVzKGFkZXYsICZw aS0+cmVxdWVzdGVkX3Jwcyk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3Rh dGljIHZvaWQgY2lfZHBtX3Bvc3Rfc2V0X3Bvd2VyX3N0YXRlKHZvaWQgKmhhbmRsZSkKPj4gLXsK Pj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq KWhhbmRsZTsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7 Cj4+IC0Jc3RydWN0IGFtZGdwdV9wcyAqbmV3X3BzID0gJnBpLT5yZXF1ZXN0ZWRfcnBzOwo+PiAt Cj4+IC0JY2lfdXBkYXRlX2N1cnJlbnRfcHMoYWRldiwgbmV3X3BzKTsKPj4gLX0KPj4gLQo+PiAt Cj4+IC1zdGF0aWMgdm9pZCBjaV9kcG1fc2V0dXBfYXNpYyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKPj4gLXsKPj4gLQljaV9yZWFkX2Nsb2NrX3JlZ2lzdGVycyhhZGV2KTsKPj4gLQljaV9l bmFibGVfYWNwaV9wb3dlcl9tYW5hZ2VtZW50KGFkZXYpOwo+PiAtCWNpX2luaXRfc2Nsa190KGFk ZXYpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9lbmFibGUoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lf Z2V0X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBhbWRncHVfcHMgKmJvb3RfcHMgPSBhZGV2LT5wbS5k cG0uYm9vdF9wczsKPj4gLQlpbnQgcmV0Owo+PiAtCj4+IC0JaWYgKHBpLT52b2x0YWdlX2NvbnRy b2wgIT0gQ0lTTEFORFNfVk9MVEFHRV9DT05UUk9MX05PTkUpIHsKPj4gLQkJY2lfZW5hYmxlX3Zv bHRhZ2VfY29udHJvbChhZGV2KTsKPj4gLQkJcmV0ID0gY2lfY29uc3RydWN0X3ZvbHRhZ2VfdGFi bGVzKGFkZXYpOwo+PiAtCQlpZiAocmV0KSB7Cj4+IC0JCQlEUk1fRVJST1IoImNpX2NvbnN0cnVj dF92b2x0YWdlX3RhYmxlcyBmYWlsZWRcbiIpOwo+PiAtCQkJcmV0dXJuIHJldDsKPj4gLQkJfQo+ PiAtCX0KPj4gLQlpZiAocGktPmNhcHNfZHluYW1pY19hY190aW1pbmcpIHsKPj4gLQkJcmV0ID0g Y2lfaW5pdGlhbGl6ZV9tY19yZWdfdGFibGUoYWRldik7Cj4+IC0JCWlmIChyZXQpCj4+IC0JCQlw aS0+Y2Fwc19keW5hbWljX2FjX3RpbWluZyA9IGZhbHNlOwo+PiAtCX0KPj4gLQlpZiAocGktPmR5 bmFtaWNfc3MpCj4+IC0JCWNpX2VuYWJsZV9zcHJlYWRfc3BlY3RydW0oYWRldiwgdHJ1ZSk7Cj4+ IC0JaWYgKHBpLT50aGVybWFsX3Byb3RlY3Rpb24pCj4+IC0JCWNpX2VuYWJsZV90aGVybWFsX3By b3RlY3Rpb24oYWRldiwgdHJ1ZSk7Cj4+IC0JY2lfcHJvZ3JhbV9zc3RwKGFkZXYpOwo+PiAtCWNp X2VuYWJsZV9kaXNwbGF5X2dhcChhZGV2KTsKPj4gLQljaV9wcm9ncmFtX3ZjKGFkZXYpOwo+PiAt CXJldCA9IGNpX3VwbG9hZF9maXJtd2FyZShhZGV2KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCURS TV9FUlJPUigiY2lfdXBsb2FkX2Zpcm13YXJlIGZhaWxlZFxuIik7Cj4+IC0JCXJldHVybiByZXQ7 Cj4+IC0JfQo+PiAtCXJldCA9IGNpX3Byb2Nlc3NfZmlybXdhcmVfaGVhZGVyKGFkZXYpOwo+PiAt CWlmIChyZXQpIHsKPj4gLQkJRFJNX0VSUk9SKCJjaV9wcm9jZXNzX2Zpcm13YXJlX2hlYWRlciBm YWlsZWRcbiIpOwo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQlyZXQgPSBjaV9pbml0aWFs X3N3aXRjaF9mcm9tX2FyYl9mMF90b19mMShhZGV2KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCURS TV9FUlJPUigiY2lfaW5pdGlhbF9zd2l0Y2hfZnJvbV9hcmJfZjBfdG9fZjEKPj4gZmFpbGVkXG4i KTsKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0JcmV0ID0gY2lfaW5pdF9zbWNfdGFibGUo YWRldik7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX2luaXRfc21jX3RhYmxl IGZhaWxlZFxuIik7Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCXJldCA9IGNpX2luaXRf YXJiX3RhYmxlX2luZGV4KGFkZXYpOwo+PiAtCWlmIChyZXQpIHsKPj4gLQkJRFJNX0VSUk9SKCJj aV9pbml0X2FyYl90YWJsZV9pbmRleCBmYWlsZWRcbiIpOwo+PiAtCQlyZXR1cm4gcmV0Owo+PiAt CX0KPj4gLQlpZiAocGktPmNhcHNfZHluYW1pY19hY190aW1pbmcpIHsKPj4gLQkJcmV0ID0gY2lf cG9wdWxhdGVfaW5pdGlhbF9tY19yZWdfdGFibGUoYWRldik7Cj4+IC0JCWlmIChyZXQpIHsKPj4g LQkJCURSTV9FUlJPUigiY2lfcG9wdWxhdGVfaW5pdGlhbF9tY19yZWdfdGFibGUKPj4gZmFpbGVk XG4iKTsKPj4gLQkJCXJldHVybiByZXQ7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0JcmV0ID0gY2lfcG9w dWxhdGVfcG1fYmFzZShhZGV2KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCURSTV9FUlJPUigiY2lf cG9wdWxhdGVfcG1fYmFzZSBmYWlsZWRcbiIpOwo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4g LQljaV9kcG1fc3RhcnRfc21jKGFkZXYpOwo+PiAtCWNpX2VuYWJsZV92cl9ob3RfZ3Bpb19pbnRl cnJ1cHQoYWRldik7Cj4+IC0JcmV0ID0gY2lfbm90aWZ5X3NtY19kaXNwbGF5X2NoYW5nZShhZGV2 LCBmYWxzZSk7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX25vdGlmeV9zbWNf ZGlzcGxheV9jaGFuZ2UgZmFpbGVkXG4iKTsKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0J Y2lfZW5hYmxlX3NjbGtfY29udHJvbChhZGV2LCB0cnVlKTsKPj4gLQlyZXQgPSBjaV9lbmFibGVf dWx2KGFkZXYsIHRydWUpOwo+PiAtCWlmIChyZXQpIHsKPj4gLQkJRFJNX0VSUk9SKCJjaV9lbmFi bGVfdWx2IGZhaWxlZFxuIik7Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCXJldCA9IGNp X2VuYWJsZV9kc19tYXN0ZXJfc3dpdGNoKGFkZXYsIHRydWUpOwo+PiAtCWlmIChyZXQpIHsKPj4g LQkJRFJNX0VSUk9SKCJjaV9lbmFibGVfZHNfbWFzdGVyX3N3aXRjaCBmYWlsZWRcbiIpOwo+PiAt CQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQlyZXQgPSBjaV9zdGFydF9kcG0oYWRldik7Cj4+IC0J aWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX3N0YXJ0X2RwbSBmYWlsZWRcbiIpOwo+PiAt CQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQlyZXQgPSBjaV9lbmFibGVfZGlkdChhZGV2LCB0cnVl KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCURSTV9FUlJPUigiY2lfZW5hYmxlX2RpZHQgZmFpbGVk XG4iKTsKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0JcmV0ID0gY2lfZW5hYmxlX3NtY19j YWMoYWRldiwgdHJ1ZSk7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX2VuYWJs ZV9zbWNfY2FjIGZhaWxlZFxuIik7Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCXJldCA9 IGNpX2VuYWJsZV9wb3dlcl9jb250YWlubWVudChhZGV2LCB0cnVlKTsKPj4gLQlpZiAocmV0KSB7 Cj4+IC0JCURSTV9FUlJPUigiY2lfZW5hYmxlX3Bvd2VyX2NvbnRhaW5tZW50IGZhaWxlZFxuIik7 Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0ID0gY2lfcG93ZXJfY29udHJv bF9zZXRfbGV2ZWwoYWRldik7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX3Bv d2VyX2NvbnRyb2xfc2V0X2xldmVsIGZhaWxlZFxuIik7Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0J fQo+PiAtCj4+IC0JY2lfZW5hYmxlX2F1dG9fdGhyb3R0bGVfc291cmNlKGFkZXYsCj4+IEFNREdQ VV9EUE1fQVVUT19USFJPVFRMRV9TUkNfVEhFUk1BTCwgdHJ1ZSk7Cj4+IC0KPj4gLQlyZXQgPSBj aV9lbmFibGVfdGhlcm1hbF9iYXNlZF9zY2xrX2RwbShhZGV2LCB0cnVlKTsKPj4gLQlpZiAocmV0 KSB7Cj4+IC0JCURSTV9FUlJPUigiY2lfZW5hYmxlX3RoZXJtYWxfYmFzZWRfc2Nsa19kcG0KPj4g ZmFpbGVkXG4iKTsKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0KPj4gLQljaV90aGVybWFs X3N0YXJ0X3RoZXJtYWxfY29udHJvbGxlcihhZGV2KTsKPj4gLQo+PiAtCWNpX3VwZGF0ZV9jdXJy ZW50X3BzKGFkZXYsIGJvb3RfcHMpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyB2b2lkIGNpX2RwbV9kaXNhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2KTsKPj4g LQlzdHJ1Y3QgYW1kZ3B1X3BzICpib290X3BzID0gYWRldi0+cG0uZHBtLmJvb3RfcHM7Cj4+IC0K Pj4gLQlhbWRncHVfaXJxX3B1dChhZGV2LCAmYWRldi0+cG0uZHBtLnRoZXJtYWwuaXJxLAo+PiAt CQkgICAgICAgQU1ER1BVX1RIRVJNQUxfSVJRX0xPV19UT19ISUdIKTsKPj4gLQlhbWRncHVfaXJx X3B1dChhZGV2LCAmYWRldi0+cG0uZHBtLnRoZXJtYWwuaXJxLAo+PiAtCQkgICAgICAgQU1ER1BV X1RIRVJNQUxfSVJRX0hJR0hfVE9fTE9XKTsKPj4gLQo+PiAtCWNpX2RwbV9wb3dlcmdhdGVfdXZk KGFkZXYsIHRydWUpOwo+PiAtCj4+IC0JaWYgKCFhbWRncHVfY2lfaXNfc21jX3J1bm5pbmcoYWRl dikpCj4+IC0JCXJldHVybjsKPj4gLQo+PiAtCWNpX3RoZXJtYWxfc3RvcF90aGVybWFsX2NvbnRy b2xsZXIoYWRldik7Cj4+IC0KPj4gLQlpZiAocGktPnRoZXJtYWxfcHJvdGVjdGlvbikKPj4gLQkJ Y2lfZW5hYmxlX3RoZXJtYWxfcHJvdGVjdGlvbihhZGV2LCBmYWxzZSk7Cj4+IC0JY2lfZW5hYmxl X3Bvd2VyX2NvbnRhaW5tZW50KGFkZXYsIGZhbHNlKTsKPj4gLQljaV9lbmFibGVfc21jX2NhYyhh ZGV2LCBmYWxzZSk7Cj4+IC0JY2lfZW5hYmxlX2RpZHQoYWRldiwgZmFsc2UpOwo+PiAtCWNpX2Vu YWJsZV9zcHJlYWRfc3BlY3RydW0oYWRldiwgZmFsc2UpOwo+PiAtCWNpX2VuYWJsZV9hdXRvX3Ro cm90dGxlX3NvdXJjZShhZGV2LAo+PiBBTURHUFVfRFBNX0FVVE9fVEhST1RUTEVfU1JDX1RIRVJN QUwsIGZhbHNlKTsKPj4gLQljaV9zdG9wX2RwbShhZGV2KTsKPj4gLQljaV9lbmFibGVfZHNfbWFz dGVyX3N3aXRjaChhZGV2LCBmYWxzZSk7Cj4+IC0JY2lfZW5hYmxlX3VsdihhZGV2LCBmYWxzZSk7 Cj4+IC0JY2lfY2xlYXJfdmMoYWRldik7Cj4+IC0JY2lfcmVzZXRfdG9fZGVmYXVsdChhZGV2KTsK Pj4gLQljaV9kcG1fc3RvcF9zbWMoYWRldik7Cj4+IC0JY2lfZm9yY2Vfc3dpdGNoX3RvX2FyYl9m MChhZGV2KTsKPj4gLQljaV9lbmFibGVfdGhlcm1hbF9iYXNlZF9zY2xrX2RwbShhZGV2LCBmYWxz ZSk7Cj4+IC0KPj4gLQljaV91cGRhdGVfY3VycmVudF9wcyhhZGV2LCBib290X3BzKTsKPj4gLX0K Pj4gLQo+PiAtc3RhdGljIGludCBjaV9kcG1fc2V0X3Bvd2VyX3N0YXRlKHZvaWQgKmhhbmRsZSkK Pj4gLXsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqKWhhbmRsZTsKPj4gLQlzdHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGko YWRldik7Cj4+IC0Jc3RydWN0IGFtZGdwdV9wcyAqbmV3X3BzID0gJnBpLT5yZXF1ZXN0ZWRfcnBz Owo+PiAtCXN0cnVjdCBhbWRncHVfcHMgKm9sZF9wcyA9ICZwaS0+Y3VycmVudF9ycHM7Cj4+IC0J aW50IHJldDsKPj4gLQo+PiAtCWNpX2ZpbmRfZHBtX3N0YXRlc19jbG9ja3NfaW5fZHBtX3RhYmxl KGFkZXYsIG5ld19wcyk7Cj4+IC0JaWYgKHBpLT5wY2llX3BlcmZvcm1hbmNlX3JlcXVlc3QpCj4+ IC0JCWNpX3JlcXVlc3RfbGlua19zcGVlZF9jaGFuZ2VfYmVmb3JlX3N0YXRlX2NoYW5nZShhZGV2 LAo+PiBuZXdfcHMsIG9sZF9wcyk7Cj4+IC0JcmV0ID0gY2lfZnJlZXplX3NjbGtfbWNsa19kcG0o YWRldik7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX2ZyZWV6ZV9zY2xrX21j bGtfZHBtIGZhaWxlZFxuIik7Cj4+IC0JCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCXJldCA9IGNp X3BvcHVsYXRlX2FuZF91cGxvYWRfc2Nsa19tY2xrX2RwbV9sZXZlbHMoYWRldiwKPj4gbmV3X3Bz KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0KPj4gCURSTV9FUlJPUigiY2lfcG9wdWxhdGVfYW5kX3Vw bG9hZF9zY2xrX21jbGtfZHBtX2xldmVscwo+PiBmYWlsZWRcbiIpOwo+PiAtCQlyZXR1cm4gcmV0 Owo+PiAtCX0KPj4gLQlyZXQgPSBjaV9nZW5lcmF0ZV9kcG1fbGV2ZWxfZW5hYmxlX21hc2soYWRl diwgbmV3X3BzKTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCURSTV9FUlJPUigiY2lfZ2VuZXJhdGVf ZHBtX2xldmVsX2VuYWJsZV9tYXNrCj4+IGZhaWxlZFxuIik7Cj4+IC0JCXJldHVybiByZXQ7Cj4+ IC0JfQo+PiAtCj4+IC0JcmV0ID0gY2lfdXBkYXRlX3ZjZV9kcG0oYWRldiwgbmV3X3BzLCBvbGRf cHMpOwo+PiAtCWlmIChyZXQpIHsKPj4gLQkJRFJNX0VSUk9SKCJjaV91cGRhdGVfdmNlX2RwbSBm YWlsZWRcbiIpOwo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQo+PiAtCXJldCA9IGNpX3Vw ZGF0ZV9zY2xrX3QoYWRldik7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX3Vw ZGF0ZV9zY2xrX3QgZmFpbGVkXG4iKTsKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0JaWYg KHBpLT5jYXBzX2R5bmFtaWNfYWNfdGltaW5nKSB7Cj4+IC0JCXJldCA9IGNpX3VwZGF0ZV9hbmRf dXBsb2FkX21jX3JlZ190YWJsZShhZGV2KTsKPj4gLQkJaWYgKHJldCkgewo+PiAtCQkJRFJNX0VS Uk9SKCJjaV91cGRhdGVfYW5kX3VwbG9hZF9tY19yZWdfdGFibGUKPj4gZmFpbGVkXG4iKTsKPj4g LQkJCXJldHVybiByZXQ7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0JcmV0ID0gY2lfcHJvZ3JhbV9tZW1v cnlfdGltaW5nX3BhcmFtZXRlcnMoYWRldik7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJS T1IoImNpX3Byb2dyYW1fbWVtb3J5X3RpbWluZ19wYXJhbWV0ZXJzCj4+IGZhaWxlZFxuIik7Cj4+ IC0JCXJldHVybiByZXQ7Cj4+IC0JfQo+PiAtCXJldCA9IGNpX3VuZnJlZXplX3NjbGtfbWNsa19k cG0oYWRldik7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlEUk1fRVJST1IoImNpX3VuZnJlZXplX3Nj bGtfbWNsa19kcG0gZmFpbGVkXG4iKTsKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQl9Cj4+IC0JcmV0 ID0gY2lfdXBsb2FkX2RwbV9sZXZlbF9lbmFibGVfbWFzayhhZGV2KTsKPj4gLQlpZiAocmV0KSB7 Cj4+IC0JCURSTV9FUlJPUigiY2lfdXBsb2FkX2RwbV9sZXZlbF9lbmFibGVfbWFzayBmYWlsZWRc biIpOwo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQlpZiAocGktPnBjaWVfcGVyZm9ybWFu Y2VfcmVxdWVzdCkKPj4gLQkJY2lfbm90aWZ5X2xpbmtfc3BlZWRfY2hhbmdlX2FmdGVyX3N0YXRl X2NoYW5nZShhZGV2LAo+PiBuZXdfcHMsIG9sZF9wcyk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4g LX0KPj4gLQo+PiAtI2lmIDAKPj4gLXN0YXRpYyB2b2lkIGNpX2RwbV9yZXNldF9hc2ljKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCWNpX3NldF9ib290X3N0YXRlKGFkZXYp Owo+PiAtfQo+PiAtI2VuZGlmCj4+IC0KPj4gLXN0YXRpYyB2b2lkIGNpX2RwbV9kaXNwbGF5X2Nv bmZpZ3VyYXRpb25fY2hhbmdlZCh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0KPj4g LQljaV9wcm9ncmFtX2Rpc3BsYXlfZ2FwKGFkZXYpOwo+PiAtfQo+PiAtCj4+IC11bmlvbiBwb3dl cl9pbmZvIHsKPj4gLQlzdHJ1Y3QgX0FUT01fUE9XRVJQTEFZX0lORk8gaW5mbzsKPj4gLQlzdHJ1 Y3QgX0FUT01fUE9XRVJQTEFZX0lORk9fVjIgaW5mb18yOwo+PiAtCXN0cnVjdCBfQVRPTV9QT1dF UlBMQVlfSU5GT19WMyBpbmZvXzM7Cj4+IC0Jc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRB QkxFIHBwbGliOwo+PiAtCXN0cnVjdCBfQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTIgcHBsaWIy Owo+PiAtCXN0cnVjdCBfQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgcHBsaWIzOwo+PiAtfTsK Pj4gLQo+PiAtdW5pb24gcHBsaWJfY2xvY2tfaW5mbyB7Cj4+IC0Jc3RydWN0IF9BVE9NX1BQTElC X1I2MDBfQ0xPQ0tfSU5GTyByNjAwOwo+PiAtCXN0cnVjdCBfQVRPTV9QUExJQl9SUzc4MF9DTE9D S19JTkZPIHJzNzgwOwo+PiAtCXN0cnVjdCBfQVRPTV9QUExJQl9FVkVSR1JFRU5fQ0xPQ0tfSU5G TyBldmVyZ3JlZW47Cj4+IC0Jc3RydWN0IF9BVE9NX1BQTElCX1NVTU9fQ0xPQ0tfSU5GTyBzdW1v Owo+PiAtCXN0cnVjdCBfQVRPTV9QUExJQl9TSV9DTE9DS19JTkZPIHNpOwo+PiAtCXN0cnVjdCBf QVRPTV9QUExJQl9DSV9DTE9DS19JTkZPIGNpOwo+PiAtfTsKPj4gLQo+PiAtdW5pb24gcHBsaWJf cG93ZXJfc3RhdGUgewo+PiAtCXN0cnVjdCBfQVRPTV9QUExJQl9TVEFURSB2MTsKPj4gLQlzdHJ1 Y3QgX0FUT01fUFBMSUJfU1RBVEVfVjIgdjI7Cj4+IC19Owo+PiAtCj4+IC1zdGF0aWMgdm9pZCBj aV9wYXJzZV9wcGxpYl9ub25fY2xvY2tfaW5mbyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwK Pj4gLQkJCQkJICBzdHJ1Y3QgYW1kZ3B1X3BzICpycHMsCj4+IC0JCQkJCSAgc3RydWN0Cj4+IF9B VE9NX1BQTElCX05PTkNMT0NLX0lORk8gKm5vbl9jbG9ja19pbmZvLAo+PiAtCQkJCQkgIHU4IHRh YmxlX3JldikKPj4gLXsKPj4gLQlycHMtPmNhcHMgPSBsZTMyX3RvX2NwdShub25fY2xvY2tfaW5m by0+dWxDYXBzQW5kU2V0dGluZ3MpOwo+PiAtCXJwcy0+Y2xhc3MgPSBsZTE2X3RvX2NwdShub25f Y2xvY2tfaW5mby0+dXNDbGFzc2lmaWNhdGlvbik7Cj4+IC0JcnBzLT5jbGFzczIgPSBsZTE2X3Rv X2NwdShub25fY2xvY2tfaW5mby0+dXNDbGFzc2lmaWNhdGlvbjIpOwo+PiAtCj4+IC0JaWYgKEFU T01fUFBMSUJfTk9OQ0xPQ0tJTkZPX1ZFUjEgPCB0YWJsZV9yZXYpIHsKPj4gLQkJcnBzLT52Y2xr ID0gbGUzMl90b19jcHUobm9uX2Nsb2NrX2luZm8tPnVsVkNMSyk7Cj4+IC0JCXJwcy0+ZGNsayA9 IGxlMzJfdG9fY3B1KG5vbl9jbG9ja19pbmZvLT51bERDTEspOwo+PiAtCX0gZWxzZSB7Cj4+IC0J CXJwcy0+dmNsayA9IDA7Cj4+IC0JCXJwcy0+ZGNsayA9IDA7Cj4+IC0JfQo+PiAtCj4+IC0JaWYg KHJwcy0+Y2xhc3MgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0JPT1QpCj4+IC0JCWFkZXYt PnBtLmRwbS5ib290X3BzID0gcnBzOwo+PiAtCWlmIChycHMtPmNsYXNzICYgQVRPTV9QUExJQl9D TEFTU0lGSUNBVElPTl9VVkRTVEFURSkKPj4gLQkJYWRldi0+cG0uZHBtLnV2ZF9wcyA9IHJwczsK Pj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfcGFyc2VfcHBsaWJfY2xvY2tfaW5mbyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJCQkgICAgICBzdHJ1Y3QgYW1kZ3B1X3BzICpy cHMsIGludCBpbmRleCwKPj4gLQkJCQkgICAgICB1bmlvbiBwcGxpYl9jbG9ja19pbmZvICpjbG9j a19pbmZvKQo+PiAtewo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShh ZGV2KTsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnBzID0gY2lfZ2V0X3BzKHJwcyk7Cj4+IC0Jc3RydWN0 IGNpX3BsICpwbCA9ICZwcy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2luZGV4XTsKPj4gLQo+PiAtCXBz LT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCA9IGluZGV4ICsgMTsKPj4gLQo+PiAtCXBsLT5zY2xr ID0gbGUxNl90b19jcHUoY2xvY2tfaW5mby0+Y2kudXNFbmdpbmVDbG9ja0xvdyk7Cj4+IC0JcGwt PnNjbGsgfD0gY2xvY2tfaW5mby0+Y2kudWNFbmdpbmVDbG9ja0hpZ2ggPDwgMTY7Cj4+IC0JcGwt Pm1jbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5jaS51c01lbW9yeUNsb2NrTG93KTsKPj4g LQlwbC0+bWNsayB8PSBjbG9ja19pbmZvLT5jaS51Y01lbW9yeUNsb2NrSGlnaCA8PCAxNjsKPj4g LQo+PiAtCXBsLT5wY2llX2dlbiA9IGFtZGdwdV9nZXRfcGNpZV9nZW5fc3VwcG9ydChhZGV2LAo+ PiAtCQkJCQkJICAgcGktPnN5c19wY2llX21hc2ssCj4+IC0JCQkJCQkgICBwaS0KPj4+IHZiaW9z X2Jvb3Rfc3RhdGUucGNpZV9nZW5fYm9vdHVwX3ZhbHVlLAo+PiAtCQkJCQkJICAgY2xvY2tfaW5m by0+Y2kudWNQQ0lFR2VuKTsKPj4gLQlwbC0+cGNpZV9sYW5lID0gYW1kZ3B1X2dldF9wY2llX2xh bmVfc3VwcG9ydChhZGV2LAo+PiAtCQkJCQkJICAgICBwaS0KPj4+IHZiaW9zX2Jvb3Rfc3RhdGUu cGNpZV9sYW5lX2Jvb3R1cF92YWx1ZSwKPj4gLQkJCQkJCSAgICAgbGUxNl90b19jcHUoY2xvY2tf aW5mby0KPj4+IGNpLnVzUENJRUxhbmUpKTsKPj4gLQo+PiAtCWlmIChycHMtPmNsYXNzICYgQVRP TV9QUExJQl9DTEFTU0lGSUNBVElPTl9BQ1BJKSB7Cj4+IC0JCXBpLT5hY3BpX3BjaWVfZ2VuID0g cGwtPnBjaWVfZ2VuOwo+PiAtCX0KPj4gLQo+PiAtCWlmIChycHMtPmNsYXNzMiAmIEFUT01fUFBM SUJfQ0xBU1NJRklDQVRJT04yX1VMVikgewo+PiAtCQlwaS0+dWx2LnN1cHBvcnRlZCA9IHRydWU7 Cj4+IC0JCXBpLT51bHYucGwgPSAqcGw7Cj4+IC0JCXBpLT51bHYuY2dfdWx2X3BhcmFtZXRlciA9 Cj4+IENJU0xBTkRTX0NHVUxWUEFSQU1FVEVSX0RGTFQ7Cj4+IC0JfQo+PiAtCj4+IC0JLyogcGF0 Y2ggdXAgYm9vdCBzdGF0ZSAqLwo+PiAtCWlmIChycHMtPmNsYXNzICYgQVRPTV9QUExJQl9DTEFT U0lGSUNBVElPTl9CT09UKSB7Cj4+IC0JCXBsLT5tY2xrID0gcGktPnZiaW9zX2Jvb3Rfc3RhdGUu bWNsa19ib290dXBfdmFsdWU7Cj4+IC0JCXBsLT5zY2xrID0gcGktPnZiaW9zX2Jvb3Rfc3RhdGUu c2Nsa19ib290dXBfdmFsdWU7Cj4+IC0JCXBsLT5wY2llX2dlbiA9IHBpLQo+Pj4gdmJpb3NfYm9v dF9zdGF0ZS5wY2llX2dlbl9ib290dXBfdmFsdWU7Cj4+IC0JCXBsLT5wY2llX2xhbmUgPSBwaS0K Pj4+IHZiaW9zX2Jvb3Rfc3RhdGUucGNpZV9sYW5lX2Jvb3R1cF92YWx1ZTsKPj4gLQl9Cj4+IC0K Pj4gLQlzd2l0Y2ggKHJwcy0+Y2xhc3MgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX01B U0spIHsKPj4gLQljYXNlIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfQkFUVEVSWToKPj4g LQkJcGktPnVzZV9wY2llX3Bvd2Vyc2F2aW5nX2xldmVscyA9IHRydWU7Cj4+IC0JCWlmIChwaS0+ cGNpZV9nZW5fcG93ZXJzYXZpbmcubWF4IDwgcGwtPnBjaWVfZ2VuKQo+PiAtCQkJcGktPnBjaWVf Z2VuX3Bvd2Vyc2F2aW5nLm1heCA9IHBsLT5wY2llX2dlbjsKPj4gLQkJaWYgKHBpLT5wY2llX2dl bl9wb3dlcnNhdmluZy5taW4gPiBwbC0+cGNpZV9nZW4pCj4+IC0JCQlwaS0+cGNpZV9nZW5fcG93 ZXJzYXZpbmcubWluID0gcGwtPnBjaWVfZ2VuOwo+PiAtCQlpZiAocGktPnBjaWVfbGFuZV9wb3dl cnNhdmluZy5tYXggPCBwbC0+cGNpZV9sYW5lKQo+PiAtCQkJcGktPnBjaWVfbGFuZV9wb3dlcnNh dmluZy5tYXggPSBwbC0+cGNpZV9sYW5lOwo+PiAtCQlpZiAocGktPnBjaWVfbGFuZV9wb3dlcnNh dmluZy5taW4gPiBwbC0+cGNpZV9sYW5lKQo+PiAtCQkJcGktPnBjaWVfbGFuZV9wb3dlcnNhdmlu Zy5taW4gPSBwbC0+cGNpZV9sYW5lOwo+PiAtCQlicmVhazsKPj4gLQljYXNlIEFUT01fUFBMSUJf Q0xBU1NJRklDQVRJT05fVUlfUEVSRk9STUFOQ0U6Cj4+IC0JCXBpLT51c2VfcGNpZV9wZXJmb3Jt YW5jZV9sZXZlbHMgPSB0cnVlOwo+PiAtCQlpZiAocGktPnBjaWVfZ2VuX3BlcmZvcm1hbmNlLm1h eCA8IHBsLT5wY2llX2dlbikKPj4gLQkJCXBpLT5wY2llX2dlbl9wZXJmb3JtYW5jZS5tYXggPSBw bC0+cGNpZV9nZW47Cj4+IC0JCWlmIChwaS0+cGNpZV9nZW5fcGVyZm9ybWFuY2UubWluID4gcGwt PnBjaWVfZ2VuKQo+PiAtCQkJcGktPnBjaWVfZ2VuX3BlcmZvcm1hbmNlLm1pbiA9IHBsLT5wY2ll X2dlbjsKPj4gLQkJaWYgKHBpLT5wY2llX2xhbmVfcGVyZm9ybWFuY2UubWF4IDwgcGwtPnBjaWVf bGFuZSkKPj4gLQkJCXBpLT5wY2llX2xhbmVfcGVyZm9ybWFuY2UubWF4ID0gcGwtPnBjaWVfbGFu ZTsKPj4gLQkJaWYgKHBpLT5wY2llX2xhbmVfcGVyZm9ybWFuY2UubWluID4gcGwtPnBjaWVfbGFu ZSkKPj4gLQkJCXBpLT5wY2llX2xhbmVfcGVyZm9ybWFuY2UubWluID0gcGwtPnBjaWVfbGFuZTsK Pj4gLQkJYnJlYWs7Cj4+IC0JZGVmYXVsdDoKPj4gLQkJYnJlYWs7Cj4+IC0JfQo+PiAtfQo+PiAt Cj4+IC1zdGF0aWMgaW50IGNpX3BhcnNlX3Bvd2VyX3RhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2KQo+PiAtewo+PiAtCXN0cnVjdCBhbWRncHVfbW9kZV9pbmZvICptb2RlX2luZm8gPSAm YWRldi0+bW9kZV9pbmZvOwo+PiAtCXN0cnVjdCBfQVRPTV9QUExJQl9OT05DTE9DS19JTkZPICpu b25fY2xvY2tfaW5mbzsKPj4gLQl1bmlvbiBwcGxpYl9wb3dlcl9zdGF0ZSAqcG93ZXJfc3RhdGU7 Cj4+IC0JaW50IGksIGosIGssIG5vbl9jbG9ja19hcnJheV9pbmRleCwgY2xvY2tfYXJyYXlfaW5k ZXg7Cj4+IC0JdW5pb24gcHBsaWJfY2xvY2tfaW5mbyAqY2xvY2tfaW5mbzsKPj4gLQlzdHJ1Y3Qg X1N0YXRlQXJyYXkgKnN0YXRlX2FycmF5Owo+PiAtCXN0cnVjdCBfQ2xvY2tJbmZvQXJyYXkgKmNs b2NrX2luZm9fYXJyYXk7Cj4+IC0Jc3RydWN0IF9Ob25DbG9ja0luZm9BcnJheSAqbm9uX2Nsb2Nr X2luZm9fYXJyYXk7Cj4+IC0JdW5pb24gcG93ZXJfaW5mbyAqcG93ZXJfaW5mbzsKPj4gLQlpbnQg aW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBQb3dlclBsYXlJbmZvKTsKPj4g LQl1MTYgZGF0YV9vZmZzZXQ7Cj4+IC0JdTggZnJldiwgY3JldjsKPj4gLQl1OCAqcG93ZXJfc3Rh dGVfb2Zmc2V0Owo+PiAtCXN0cnVjdCBjaV9wcyAqcHM7Cj4+IC0KPj4gLQlpZiAoIWFtZGdwdV9h dG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LAo+PiBpbmRleCwg TlVMTCwKPj4gLQkJCQkgICAmZnJldiwgJmNyZXYsICZkYXRhX29mZnNldCkpCj4+IC0JCXJldHVy biAtRUlOVkFMOwo+PiAtCXBvd2VyX2luZm8gPSAodW5pb24gcG93ZXJfaW5mbyAqKShtb2RlX2lu Zm8tPmF0b21fY29udGV4dC0KPj4+IGJpb3MgKyBkYXRhX29mZnNldCk7Cj4+IC0KPj4gLQlhbWRn cHVfYWRkX3RoZXJtYWxfY29udHJvbGxlcihhZGV2KTsKPj4gLQo+PiAtCXN0YXRlX2FycmF5ID0g KHN0cnVjdCBfU3RhdGVBcnJheSAqKQo+PiAtCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJp b3MgKyBkYXRhX29mZnNldCArCj4+IC0JCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5wcGxpYi51 c1N0YXRlQXJyYXlPZmZzZXQpKTsKPj4gLQljbG9ja19pbmZvX2FycmF5ID0gKHN0cnVjdCBfQ2xv Y2tJbmZvQXJyYXkgKikKPj4gLQkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0 YV9vZmZzZXQgKwo+PiAtCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+cHBsaWIudXNDbG9ja0lu Zm9BcnJheU9mZnNldCkpOwo+PiAtCW5vbl9jbG9ja19pbmZvX2FycmF5ID0gKHN0cnVjdCBfTm9u Q2xvY2tJbmZvQXJyYXkgKikKPj4gLQkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsg ZGF0YV9vZmZzZXQgKwo+PiAtCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0KPj4+IHBwbGliLnVz Tm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQpKTsKPj4gLQo+PiAtCWFkZXYtPnBtLmRwbS5wcyA9IGtj YWxsb2Moc3RhdGVfYXJyYXktPnVjTnVtRW50cmllcywKPj4gLQkJCQkgIHNpemVvZihzdHJ1Y3Qg YW1kZ3B1X3BzKSwKPj4gLQkJCQkgIEdGUF9LRVJORUwpOwo+PiAtCWlmICghYWRldi0+cG0uZHBt LnBzKQo+PiAtCQlyZXR1cm4gLUVOT01FTTsKPj4gLQlwb3dlcl9zdGF0ZV9vZmZzZXQgPSAodTgg KilzdGF0ZV9hcnJheS0+c3RhdGVzOwo+PiAtCWZvciAoaSA9IDA7IGkgPCBzdGF0ZV9hcnJheS0+ dWNOdW1FbnRyaWVzOyBpKyspIHsKPj4gLQkJdTggKmlkeDsKPj4gLQkJcG93ZXJfc3RhdGUgPSAo dW5pb24gcHBsaWJfcG93ZXJfc3RhdGUKPj4gKilwb3dlcl9zdGF0ZV9vZmZzZXQ7Cj4+IC0JCW5v bl9jbG9ja19hcnJheV9pbmRleCA9IHBvd2VyX3N0YXRlLQo+Pj4gdjIubm9uQ2xvY2tJbmZvSW5k ZXg7Cj4+IC0JCW5vbl9jbG9ja19pbmZvID0gKHN0cnVjdCBfQVRPTV9QUExJQl9OT05DTE9DS19J TkZPICopCj4+IC0JCQkmbm9uX2Nsb2NrX2luZm9fYXJyYXktCj4+PiBub25DbG9ja0luZm9bbm9u X2Nsb2NrX2FycmF5X2luZGV4XTsKPj4gLQkJcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2lf cHMpLCBHRlBfS0VSTkVMKTsKPj4gLQkJaWYgKHBzID09IE5VTEwpIHsKPj4gLQkJCWtmcmVlKGFk ZXYtPnBtLmRwbS5wcyk7Cj4+IC0JCQlyZXR1cm4gLUVOT01FTTsKPj4gLQkJfQo+PiAtCQlhZGV2 LT5wbS5kcG0ucHNbaV0ucHNfcHJpdiA9IHBzOwo+PiAtCQljaV9wYXJzZV9wcGxpYl9ub25fY2xv Y2tfaW5mbyhhZGV2LCAmYWRldi0+cG0uZHBtLnBzW2ldLAo+PiAtCQkJCQkgICAgICBub25fY2xv Y2tfaW5mbywKPj4gLQkJCQkJICAgICAgbm9uX2Nsb2NrX2luZm9fYXJyYXktCj4+PiB1Y0VudHJ5 U2l6ZSk7Cj4+IC0JCWsgPSAwOwo+PiAtCQlpZHggPSAodTggKikmcG93ZXJfc3RhdGUtPnYyLmNs b2NrSW5mb0luZGV4WzBdOwo+PiAtCQlmb3IgKGogPSAwOyBqIDwgcG93ZXJfc3RhdGUtPnYyLnVj TnVtRFBNTGV2ZWxzOyBqKyspIHsKPj4gLQkJCWNsb2NrX2FycmF5X2luZGV4ID0gaWR4W2pdOwo+ PiAtCQkJaWYgKGNsb2NrX2FycmF5X2luZGV4ID49IGNsb2NrX2luZm9fYXJyYXktCj4+PiB1Y051 bUVudHJpZXMpCj4+IC0JCQkJY29udGludWU7Cj4+IC0JCQlpZiAoayA+PSBDSVNMQU5EU19NQVhf SEFSRFdBUkVfUE9XRVJMRVZFTFMpCj4+IC0JCQkJYnJlYWs7Cj4+IC0JCQljbG9ja19pbmZvID0g KHVuaW9uIHBwbGliX2Nsb2NrX2luZm8gKikKPj4gLQkJCQkoKHU4ICopJmNsb2NrX2luZm9fYXJy YXktPmNsb2NrSW5mb1swXSArCj4+IC0JCQkJIChjbG9ja19hcnJheV9pbmRleCAqIGNsb2NrX2lu Zm9fYXJyYXktCj4+PiB1Y0VudHJ5U2l6ZSkpOwo+PiAtCQkJY2lfcGFyc2VfcHBsaWJfY2xvY2tf aW5mbyhhZGV2LAo+PiAtCQkJCQkJICAmYWRldi0+cG0uZHBtLnBzW2ldLCBrLAo+PiAtCQkJCQkJ ICBjbG9ja19pbmZvKTsKPj4gLQkJCWsrKzsKPj4gLQkJfQo+PiAtCQlwb3dlcl9zdGF0ZV9vZmZz ZXQgKz0gMiArIHBvd2VyX3N0YXRlLQo+Pj4gdjIudWNOdW1EUE1MZXZlbHM7Cj4+IC0JfQo+PiAt CWFkZXYtPnBtLmRwbS5udW1fcHMgPSBzdGF0ZV9hcnJheS0+dWNOdW1FbnRyaWVzOwo+PiAtCj4+ IC0JLyogZmlsbCBpbiB0aGUgdmNlIHBvd2VyIHN0YXRlcyAqLwo+PiAtCWZvciAoaSA9IDA7IGkg PCBhZGV2LT5wbS5kcG0ubnVtX29mX3ZjZV9zdGF0ZXM7IGkrKykgewo+PiAtCQl1MzIgc2Nsaywg bWNsazsKPj4gLQkJY2xvY2tfYXJyYXlfaW5kZXggPSBhZGV2LT5wbS5kcG0udmNlX3N0YXRlc1tp XS5jbGtfaWR4Owo+PiAtCQljbG9ja19pbmZvID0gKHVuaW9uIHBwbGliX2Nsb2NrX2luZm8gKikK Pj4gLQkJCSZjbG9ja19pbmZvX2FycmF5LT5jbG9ja0luZm9bY2xvY2tfYXJyYXlfaW5kZXggKgo+ PiBjbG9ja19pbmZvX2FycmF5LT51Y0VudHJ5U2l6ZV07Cj4+IC0JCXNjbGsgPSBsZTE2X3RvX2Nw dShjbG9ja19pbmZvLT5jaS51c0VuZ2luZUNsb2NrTG93KTsKPj4gLQkJc2NsayB8PSBjbG9ja19p bmZvLT5jaS51Y0VuZ2luZUNsb2NrSGlnaCA8PCAxNjsKPj4gLQkJbWNsayA9IGxlMTZfdG9fY3B1 KGNsb2NrX2luZm8tPmNpLnVzTWVtb3J5Q2xvY2tMb3cpOwo+PiAtCQltY2xrIHw9IGNsb2NrX2lu Zm8tPmNpLnVjTWVtb3J5Q2xvY2tIaWdoIDw8IDE2Owo+PiAtCQlhZGV2LT5wbS5kcG0udmNlX3N0 YXRlc1tpXS5zY2xrID0gc2NsazsKPj4gLQkJYWRldi0+cG0uZHBtLnZjZV9zdGF0ZXNbaV0ubWNs ayA9IG1jbGs7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRp YyBpbnQgY2lfZ2V0X3ZiaW9zX2Jvb3RfdmFsdWVzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAo+PiAtCQkJCSAgICBzdHJ1Y3QgY2lfdmJpb3NfYm9vdF9zdGF0ZSAqYm9vdF9zdGF0ZSkKPj4g LXsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJmFkZXYtPm1vZGVf aW5mbzsKPj4gLQlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBGaXJt d2FyZUluZm8pOwo+PiAtCUFUT01fRklSTVdBUkVfSU5GT19WMl8yICpmaXJtd2FyZV9pbmZvOwo+ PiAtCXU4IGZyZXYsIGNyZXY7Cj4+IC0JdTE2IGRhdGFfb2Zmc2V0Owo+PiAtCj4+IC0JaWYgKGFt ZGdwdV9hdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LAo+PiBp bmRleCwgTlVMTCwKPj4gLQkJCQkgICAmZnJldiwgJmNyZXYsICZkYXRhX29mZnNldCkpIHsKPj4g LQkJZmlybXdhcmVfaW5mbyA9Cj4+IC0JCQkoQVRPTV9GSVJNV0FSRV9JTkZPX1YyXzIgKikobW9k ZV9pbmZvLQo+Pj4gYXRvbV9jb250ZXh0LT5iaW9zICsKPj4gLQkJCQkJCSAgICBkYXRhX29mZnNl dCk7Cj4+IC0JCWJvb3Rfc3RhdGUtPm12ZGRfYm9vdHVwX3ZhbHVlID0KPj4gbGUxNl90b19jcHUo ZmlybXdhcmVfaW5mby0+dXNCb290VXBNVkREQ1ZvbHRhZ2UpOwo+PiAtCQlib290X3N0YXRlLT52 ZGRjX2Jvb3R1cF92YWx1ZSA9Cj4+IGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPnVzQm9vdFVw VkREQ1ZvbHRhZ2UpOwo+PiAtCQlib290X3N0YXRlLT52ZGRjaV9ib290dXBfdmFsdWUgPQo+PiBs ZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT51c0Jvb3RVcFZERENJVm9sdGFnZSk7Cj4+IC0JCWJv b3Rfc3RhdGUtPnBjaWVfZ2VuX2Jvb3R1cF92YWx1ZSA9Cj4+IGNpX2dldF9jdXJyZW50X3BjaWVf c3BlZWQoYWRldik7Cj4+IC0JCWJvb3Rfc3RhdGUtPnBjaWVfbGFuZV9ib290dXBfdmFsdWUgPQo+ PiBjaV9nZXRfY3VycmVudF9wY2llX2xhbmVfbnVtYmVyKGFkZXYpOwo+PiAtCQlib290X3N0YXRl LT5zY2xrX2Jvb3R1cF92YWx1ZSA9Cj4+IGxlMzJfdG9fY3B1KGZpcm13YXJlX2luZm8tPnVsRGVm YXVsdEVuZ2luZUNsb2NrKTsKPj4gLQkJYm9vdF9zdGF0ZS0+bWNsa19ib290dXBfdmFsdWUgPQo+ PiBsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT51bERlZmF1bHRNZW1vcnlDbG9jayk7Cj4+IC0K Pj4gLQkJcmV0dXJuIDA7Cj4+IC0JfQo+PiAtCXJldHVybiAtRUlOVkFMOwo+PiAtfQo+PiAtCj4+ IC1zdGF0aWMgdm9pZCBjaV9kcG1fZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4g LXsKPj4gLQlpbnQgaTsKPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5wbS5kcG0ubnVt X3BzOyBpKyspIHsKPj4gLQkJa2ZyZWUoYWRldi0+cG0uZHBtLnBzW2ldLnBzX3ByaXYpOwo+PiAt CX0KPj4gLQlrZnJlZShhZGV2LT5wbS5kcG0ucHMpOwo+PiAtCWtmcmVlKGFkZXYtPnBtLmRwbS5w cml2KTsKPj4gLQlrZnJlZShhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVu Y3lfb25fZGlzcGNsay5lbnRyaWVzKTsKPj4gLQlhbWRncHVfZnJlZV9leHRlbmRlZF9wb3dlcl90 YWJsZShhZGV2KTsKPj4gLX0KPj4gLQo+PiAtLyoqCj4+IC0gKiBjaV9kcG1faW5pdF9taWNyb2Nv ZGUgLSBsb2FkIHVjb2RlIGltYWdlcyBmcm9tIGRpc2sKPj4gLSAqCj4+IC0gKiBAYWRldjogYW1k Z3B1X2RldmljZSBwb2ludGVyCj4+IC0gKgo+PiAtICogVXNlIHRoZSBmaXJtd2FyZSBpbnRlcmZh Y2UgdG8gbG9hZCB0aGUgdWNvZGUgaW1hZ2VzIGludG8KPj4gLSAqIHRoZSBkcml2ZXIgKG5vdCBs b2FkZWQgaW50byBodykuCj4+IC0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFp bHVyZS4KPj4gLSAqLwo+PiAtc3RhdGljIGludCBjaV9kcG1faW5pdF9taWNyb2NvZGUoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0JY29uc3QgY2hhciAqY2hpcF9uYW1lOwo+ PiAtCWNoYXIgZndfbmFtZVszMF07Cj4+IC0JaW50IGVycjsKPj4gLQo+PiAtCURSTV9ERUJVRygi XG4iKTsKPj4gLQo+PiAtCXN3aXRjaCAoYWRldi0+YXNpY190eXBlKSB7Cj4+IC0JY2FzZSBDSElQ X0JPTkFJUkU6Cj4+IC0JCWlmICgoYWRldi0+cGRldi0+cmV2aXNpb24gPT0gMHg4MCkgfHwKPj4g LQkJICAgIChhZGV2LT5wZGV2LT5yZXZpc2lvbiA9PSAweDgxKSB8fAo+PiAtCQkgICAgKGFkZXYt PnBkZXYtPmRldmljZSA9PSAweDY2NWYpKQo+PiAtCQkJY2hpcF9uYW1lID0gImJvbmFpcmVfayI7 Cj4+IC0JCWVsc2UKPj4gLQkJCWNoaXBfbmFtZSA9ICJib25haXJlIjsKPj4gLQkJYnJlYWs7Cj4+ IC0JY2FzZSBDSElQX0hBV0FJSToKPj4gLQkJaWYgKGFkZXYtPnBkZXYtPnJldmlzaW9uID09IDB4 ODApCj4+IC0JCQljaGlwX25hbWUgPSAiaGF3YWlpX2siOwo+PiAtCQllbHNlCj4+IC0JCQljaGlw X25hbWUgPSAiaGF3YWlpIjsKPj4gLQkJYnJlYWs7Cj4+IC0JY2FzZSBDSElQX0tBVkVSSToKPj4g LQljYXNlIENISVBfS0FCSU5JOgo+PiAtCWNhc2UgQ0hJUF9NVUxMSU5TOgo+PiAtCWRlZmF1bHQ6 IEJVRygpOwo+PiAtCX0KPj4gLQo+PiAtCXNucHJpbnRmKGZ3X25hbWUsIHNpemVvZihmd19uYW1l KSwgImFtZGdwdS8lc19zbWMuYmluIiwKPj4gY2hpcF9uYW1lKTsKPj4gLQllcnIgPSByZXF1ZXN0 X2Zpcm13YXJlKCZhZGV2LT5wbS5mdywgZndfbmFtZSwgYWRldi0+ZGV2KTsKPj4gLQlpZiAoZXJy KQo+PiAtCQlnb3RvIG91dDsKPj4gLQllcnIgPSBhbWRncHVfdWNvZGVfdmFsaWRhdGUoYWRldi0+ cG0uZncpOwo+PiAtCj4+IC1vdXQ6Cj4+IC0JaWYgKGVycikgewo+PiAtCQlwcl9lcnIoImNpa19z bWM6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKPj4gZndfbmFtZSk7Cj4+IC0J CXJlbGVhc2VfZmlybXdhcmUoYWRldi0+cG0uZncpOwo+PiAtCQlhZGV2LT5wbS5mdyA9IE5VTEw7 Cj4+IC0JfQo+PiAtCXJldHVybiBlcnI7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZHBt X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0JaW50IGluZGV4ID0g R2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgQVNJQ19JbnRlcm5hbFNTX0luZm8pOwo+PiAt CVNNVTdfRGlzY3JldGVfRHBtVGFibGUgKmRwbV90YWJsZTsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2dw aW9fcmVjIGdwaW87Cj4+IC0JdTE2IGRhdGFfb2Zmc2V0LCBzaXplOwo+PiAtCXU4IGZyZXYsIGNy ZXY7Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4g LQlwaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaV9wb3dlcl9pbmZvKSwgR0ZQX0tFUk5FTCk7 Cj4+IC0JaWYgKHBpID09IE5VTEwpCj4+IC0JCXJldHVybiAtRU5PTUVNOwo+PiAtCWFkZXYtPnBt LmRwbS5wcml2ID0gcGk7Cj4+IC0KPj4gLQlwaS0+c3lzX3BjaWVfbWFzayA9Cj4+IC0JCWFkZXYt PnBtLnBjaWVfZ2VuX21hc2sgJgo+PiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX01BU0s7 Cj4+IC0KPj4gLQlwaS0+Zm9yY2VfcGNpZV9nZW4gPSBBTURHUFVfUENJRV9HRU5fSU5WQUxJRDsK Pj4gLQo+PiAtCXBpLT5wY2llX2dlbl9wZXJmb3JtYW5jZS5tYXggPSBBTURHUFVfUENJRV9HRU4x Owo+PiAtCXBpLT5wY2llX2dlbl9wZXJmb3JtYW5jZS5taW4gPSBBTURHUFVfUENJRV9HRU4zOwo+ PiAtCXBpLT5wY2llX2dlbl9wb3dlcnNhdmluZy5tYXggPSBBTURHUFVfUENJRV9HRU4xOwo+PiAt CXBpLT5wY2llX2dlbl9wb3dlcnNhdmluZy5taW4gPSBBTURHUFVfUENJRV9HRU4zOwo+PiAtCj4+ IC0JcGktPnBjaWVfbGFuZV9wZXJmb3JtYW5jZS5tYXggPSAwOwo+PiAtCXBpLT5wY2llX2xhbmVf cGVyZm9ybWFuY2UubWluID0gMTY7Cj4+IC0JcGktPnBjaWVfbGFuZV9wb3dlcnNhdmluZy5tYXgg PSAwOwo+PiAtCXBpLT5wY2llX2xhbmVfcG93ZXJzYXZpbmcubWluID0gMTY7Cj4+IC0KPj4gLQly ZXQgPSBjaV9nZXRfdmJpb3NfYm9vdF92YWx1ZXMoYWRldiwgJnBpLT52Ymlvc19ib290X3N0YXRl KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCWNpX2RwbV9maW5pKGFkZXYpOwo+PiAtCQlyZXR1cm4g cmV0Owo+PiAtCX0KPj4gLQo+PiAtCXJldCA9IGFtZGdwdV9nZXRfcGxhdGZvcm1fY2FwcyhhZGV2 KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCWNpX2RwbV9maW5pKGFkZXYpOwo+PiAtCQlyZXR1cm4g cmV0Owo+PiAtCX0KPj4gLQo+PiAtCXJldCA9IGFtZGdwdV9wYXJzZV9leHRlbmRlZF9wb3dlcl90 YWJsZShhZGV2KTsKPj4gLQlpZiAocmV0KSB7Cj4+IC0JCWNpX2RwbV9maW5pKGFkZXYpOwo+PiAt CQlyZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQo+PiAtCXJldCA9IGNpX3BhcnNlX3Bvd2VyX3RhYmxl KGFkZXYpOwo+PiAtCWlmIChyZXQpIHsKPj4gLQkJY2lfZHBtX2ZpbmkoYWRldik7Cj4+IC0JCXJl dHVybiByZXQ7Cj4+IC0JfQo+PiAtCj4+IC0JcGktPmRsbF9kZWZhdWx0X29uID0gZmFsc2U7Cj4+ IC0JcGktPnNyYW1fZW5kID0gU01DX1JBTV9FTkQ7Cj4+IC0KPj4gLQlwaS0+YWN0aXZpdHlfdGFy Z2V0WzBdID0gQ0lTTEFORF9UQVJHRVRBQ1RJVklUWV9ERkxUOwo+PiAtCXBpLT5hY3Rpdml0eV90 YXJnZXRbMV0gPSBDSVNMQU5EX1RBUkdFVEFDVElWSVRZX0RGTFQ7Cj4+IC0JcGktPmFjdGl2aXR5 X3RhcmdldFsyXSA9IENJU0xBTkRfVEFSR0VUQUNUSVZJVFlfREZMVDsKPj4gLQlwaS0+YWN0aXZp dHlfdGFyZ2V0WzNdID0gQ0lTTEFORF9UQVJHRVRBQ1RJVklUWV9ERkxUOwo+PiAtCXBpLT5hY3Rp dml0eV90YXJnZXRbNF0gPSBDSVNMQU5EX1RBUkdFVEFDVElWSVRZX0RGTFQ7Cj4+IC0JcGktPmFj dGl2aXR5X3RhcmdldFs1XSA9IENJU0xBTkRfVEFSR0VUQUNUSVZJVFlfREZMVDsKPj4gLQlwaS0+ YWN0aXZpdHlfdGFyZ2V0WzZdID0gQ0lTTEFORF9UQVJHRVRBQ1RJVklUWV9ERkxUOwo+PiAtCXBp LT5hY3Rpdml0eV90YXJnZXRbN10gPSBDSVNMQU5EX1RBUkdFVEFDVElWSVRZX0RGTFQ7Cj4+IC0K Pj4gLQlwaS0+bWNsa19hY3Rpdml0eV90YXJnZXQgPSBDSVNMQU5EX01DTEtfVEFSR0VUQUNUSVZJ VFlfREZMVDsKPj4gLQo+PiAtCXBpLT5zY2xrX2RwbV9rZXlfZGlzYWJsZWQgPSAwOwo+PiAtCXBp LT5tY2xrX2RwbV9rZXlfZGlzYWJsZWQgPSAwOwo+PiAtCXBpLT5wY2llX2RwbV9rZXlfZGlzYWJs ZWQgPSAwOwo+PiAtCXBpLT50aGVybWFsX3NjbGtfZHBtX2VuYWJsZWQgPSAwOwo+PiAtCj4+IC0J aWYgKGFkZXYtPnBvd2VycGxheS5wcF9mZWF0dXJlICYgUFBfU0NMS19ERUVQX1NMRUVQX01BU0sp Cj4+IC0JCXBpLT5jYXBzX3NjbGtfZHMgPSB0cnVlOwo+PiAtCWVsc2UKPj4gLQkJcGktPmNhcHNf c2Nsa19kcyA9IGZhbHNlOwo+PiAtCj4+IC0JcGktPm1jbGtfc3Ryb2JlX21vZGVfdGhyZXNob2xk ID0gNDAwMDA7Cj4+IC0JcGktPm1jbGtfc3R1dHRlcl9tb2RlX3RocmVzaG9sZCA9IDQwMDAwOwo+ PiAtCXBpLT5tY2xrX2VkY19lbmFibGVfdGhyZXNob2xkID0gNDAwMDA7Cj4+IC0JcGktPm1jbGtf ZWRjX3dyX2VuYWJsZV90aHJlc2hvbGQgPSA0MDAwMDsKPj4gLQo+PiAtCWNpX2luaXRpYWxpemVf cG93ZXJ0dW5lX2RlZmF1bHRzKGFkZXYpOwo+PiAtCj4+IC0JcGktPmNhcHNfZnBzID0gZmFsc2U7 Cj4+IC0KPj4gLQlwaS0+Y2Fwc19zY2xrX3Rocm90dGxlX2xvd19ub3RpZmljYXRpb24gPSBmYWxz ZTsKPj4gLQo+PiAtCXBpLT5jYXBzX3V2ZF9kcG0gPSB0cnVlOwo+PiAtCXBpLT5jYXBzX3ZjZV9k cG0gPSB0cnVlOwo+PiAtCj4+IC0JY2lfZ2V0X2xlYWthZ2Vfdm9sdGFnZXMoYWRldik7Cj4+IC0J Y2lfcGF0Y2hfZGVwZW5kZW5jeV90YWJsZXNfd2l0aF9sZWFrYWdlKGFkZXYpOwo+PiAtCWNpX3Nl dF9wcml2YXRlX2RhdGFfdmFyaWFibGVzX2Jhc2VkX29uX3BwdGFibGUoYWRldik7Cj4+IC0KPj4g LQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNwY2xrLmVudHJp ZXMgPQo+PiAtCQlrY2FsbG9jKDQsCj4+IC0JCQlzaXplb2Yoc3RydWN0Cj4+IGFtZGdwdV9jbG9j a192b2x0YWdlX2RlcGVuZGVuY3lfZW50cnkpLAo+PiAtCQkJR0ZQX0tFUk5FTCk7Cj4+IC0JaWYg KCFhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNwY2xrLmVudHJp ZXMpCj4+IHsKPj4gLQkJY2lfZHBtX2ZpbmkoYWRldik7Cj4+IC0JCXJldHVybiAtRU5PTUVNOwo+ PiAtCX0KPj4gLQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNw Y2xrLmNvdW50ID0gNDsKPj4gLQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVu ZGVuY3lfb25fZGlzcGNsay5lbnRyaWVzWzBdLmNsayA9IDA7Cj4+IC0JYWRldi0KPj4+IHBtLmRw bS5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX2Rpc3BjbGsuZW50cmllc1swXS52ID0gMDsK Pj4gLQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNs ay5lbnRyaWVzWzFdLmNsayA9IDM2MDAwOwo+PiAtCWFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRl LnZkZGNfZGVwZW5kZW5jeV9vbl9kaXNwY2xrLmVudHJpZXNbMV0udiA9IDcyMDsKPj4gLQlhZGV2 LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5lbnRyaWVz WzJdLmNsayA9IDU0MDAwOwo+PiAtCWFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVw ZW5kZW5jeV9vbl9kaXNwY2xrLmVudHJpZXNbMl0udiA9IDgxMDsKPj4gLQlhZGV2LQo+Pj4gcG0u ZHBtLmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fZGlzcGNsay5lbnRyaWVzWzNdLmNsayA9 IDcyMDAwOwo+PiAtCWFkZXYtCj4+PiBwbS5kcG0uZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9v bl9kaXNwY2xrLmVudHJpZXNbM10udiA9IDkwMDsKPj4gLQo+PiAtCWFkZXYtPnBtLmRwbS5keW5f c3RhdGUubWNsa19zY2xrX3JhdGlvID0gNDsKPj4gLQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnNj bGtfbWNsa19kZWx0YSA9IDE1MDAwOwo+PiAtCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmRkY192 ZGRjaV9kZWx0YSA9IDIwMDsKPj4gLQo+PiAtCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmFsaWRf c2Nsa192YWx1ZXMuY291bnQgPSAwOwo+PiAtCWFkZXYtPnBtLmRwbS5keW5fc3RhdGUudmFsaWRf c2Nsa192YWx1ZXMudmFsdWVzID0gTlVMTDsKPj4gLQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZh bGlkX21jbGtfdmFsdWVzLmNvdW50ID0gMDsKPj4gLQlhZGV2LT5wbS5kcG0uZHluX3N0YXRlLnZh bGlkX21jbGtfdmFsdWVzLnZhbHVlcyA9IE5VTEw7Cj4+IC0KPj4gLQlpZiAoYWRldi0+YXNpY190 eXBlID09IENISVBfSEFXQUlJKSB7Cj4+IC0JCXBpLT50aGVybWFsX3RlbXBfc2V0dGluZy50ZW1w ZXJhdHVyZV9sb3cgPSA5NDUwMDsKPj4gLQkJcGktPnRoZXJtYWxfdGVtcF9zZXR0aW5nLnRlbXBl cmF0dXJlX2hpZ2ggPSA5NTAwMDsKPj4gLQkJcGktPnRoZXJtYWxfdGVtcF9zZXR0aW5nLnRlbXBl cmF0dXJlX3NodXRkb3duID0gMTA0MDAwOwo+PiAtCX0gZWxzZSB7Cj4+IC0JCXBpLT50aGVybWFs X3RlbXBfc2V0dGluZy50ZW1wZXJhdHVyZV9sb3cgPSA5OTUwMDsKPj4gLQkJcGktPnRoZXJtYWxf dGVtcF9zZXR0aW5nLnRlbXBlcmF0dXJlX2hpZ2ggPSAxMDAwMDA7Cj4+IC0JCXBpLT50aGVybWFs X3RlbXBfc2V0dGluZy50ZW1wZXJhdHVyZV9zaHV0ZG93biA9IDEwNDAwMDsKPj4gLQl9Cj4+IC0K Pj4gLQlwaS0+dXZkX2VuYWJsZWQgPSBmYWxzZTsKPj4gLQo+PiAtCWRwbV90YWJsZSA9ICZwaS0+ c21jX3N0YXRlX3RhYmxlOwo+PiAtCj4+IC0JZ3BpbyA9IGFtZGdwdV9hdG9tYmlvc19sb29rdXBf Z3BpbyhhZGV2LAo+PiBWRERDX1ZSSE9UX0dQSU9fUElOSUQpOwo+PiAtCWlmIChncGlvLnZhbGlk KSB7Cj4+IC0JCWRwbV90YWJsZS0+VlJIb3RHcGlvID0gZ3Bpby5zaGlmdDsKPj4gLQkJYWRldi0+ cG0uZHBtLnBsYXRmb3JtX2NhcHMgfD0KPj4gQVRPTV9QUF9QTEFURk9STV9DQVBfUkVHVUxBVE9S X0hPVDsKPj4gLQl9IGVsc2Ugewo+PiAtCQlkcG1fdGFibGUtPlZSSG90R3BpbyA9IENJU0xBTkRT X1VOVVNFRF9HUElPX1BJTjsKPj4gLQkJYWRldi0+cG0uZHBtLnBsYXRmb3JtX2NhcHMgJj0KPj4g fkFUT01fUFBfUExBVEZPUk1fQ0FQX1JFR1VMQVRPUl9IT1Q7Cj4+IC0JfQo+PiAtCj4+IC0JZ3Bp byA9IGFtZGdwdV9hdG9tYmlvc19sb29rdXBfZ3BpbyhhZGV2LAo+PiBQUF9BQ19EQ19TV0lUQ0hf R1BJT19QSU5JRCk7Cj4+IC0JaWYgKGdwaW8udmFsaWQpIHsKPj4gLQkJZHBtX3RhYmxlLT5BY0Rj R3BpbyA9IGdwaW8uc2hpZnQ7Cj4+IC0JCWFkZXYtPnBtLmRwbS5wbGF0Zm9ybV9jYXBzIHw9Cj4+ IEFUT01fUFBfUExBVEZPUk1fQ0FQX0hBUkRXQVJFREM7Cj4+IC0JfSBlbHNlIHsKPj4gLQkJZHBt X3RhYmxlLT5BY0RjR3BpbyA9IENJU0xBTkRTX1VOVVNFRF9HUElPX1BJTjsKPj4gLQkJYWRldi0+ cG0uZHBtLnBsYXRmb3JtX2NhcHMgJj0KPj4gfkFUT01fUFBfUExBVEZPUk1fQ0FQX0hBUkRXQVJF REM7Cj4+IC0JfQo+PiAtCj4+IC0JZ3BpbyA9IGFtZGdwdV9hdG9tYmlvc19sb29rdXBfZ3Bpbyhh ZGV2LAo+PiBWRERDX1BDQ19HUElPX1BJTklEKTsKPj4gLQlpZiAoZ3Bpby52YWxpZCkgewo+PiAt CQl1MzIgdG1wID0gUlJFRzMyX1NNQyhpeENOQl9QV1JNR1RfQ05UTCk7Cj4+IC0KPj4gLQkJc3dp dGNoIChncGlvLnNoaWZ0KSB7Cj4+IC0JCWNhc2UgMDoKPj4gLQkJCXRtcCAmPQo+PiB+Q05CX1BX Uk1HVF9DTlRMX19HTkJfU0xPV19NT0RFX01BU0s7Cj4+IC0JCQl0bXAgfD0gMSA8PAo+PiBDTkJf UFdSTUdUX0NOVExfX0dOQl9TTE9XX01PREVfX1NISUZUOwo+PiAtCQkJYnJlYWs7Cj4+IC0JCWNh c2UgMToKPj4gLQkJCXRtcCAmPQo+PiB+Q05CX1BXUk1HVF9DTlRMX19HTkJfU0xPV19NT0RFX01B U0s7Cj4+IC0JCQl0bXAgfD0gMiA8PAo+PiBDTkJfUFdSTUdUX0NOVExfX0dOQl9TTE9XX01PREVf X1NISUZUOwo+PiAtCQkJYnJlYWs7Cj4+IC0JCWNhc2UgMjoKPj4gLQkJCXRtcCB8PSBDTkJfUFdS TUdUX0NOVExfX0dOQl9TTE9XX01BU0s7Cj4+IC0JCQlicmVhazsKPj4gLQkJY2FzZSAzOgo+PiAt CQkJdG1wIHw9Cj4+IENOQl9QV1JNR1RfQ05UTF9fRk9SQ0VfTkJfUFMxX01BU0s7Cj4+IC0JCQli cmVhazsKPj4gLQkJY2FzZSA0Ogo+PiAtCQkJdG1wIHw9Cj4+IENOQl9QV1JNR1RfQ05UTF9fRFBN X0VOQUJMRURfTUFTSzsKPj4gLQkJCWJyZWFrOwo+PiAtCQlkZWZhdWx0Ogo+PiAtCQkJRFJNX0lO Rk8oIkludmFsaWQgUENDIEdQSU86ICV1IVxuIiwgZ3Bpby5zaGlmdCk7Cj4+IC0JCQlicmVhazsK Pj4gLQkJfQo+PiAtCQlXUkVHMzJfU01DKGl4Q05CX1BXUk1HVF9DTlRMLCB0bXApOwo+PiAtCX0K Pj4gLQo+PiAtCXBpLT52b2x0YWdlX2NvbnRyb2wgPSBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xf Tk9ORTsKPj4gLQlwaS0+dmRkY2lfY29udHJvbCA9IENJU0xBTkRTX1ZPTFRBR0VfQ09OVFJPTF9O T05FOwo+PiAtCXBpLT5tdmRkX2NvbnRyb2wgPSBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xfTk9O RTsKPj4gLQlpZiAoYW1kZ3B1X2F0b21iaW9zX2lzX3ZvbHRhZ2VfZ3BpbyhhZGV2LCBWT0xUQUdF X1RZUEVfVkREQywKPj4gVk9MVEFHRV9PQkpfR1BJT19MVVQpKQo+PiAtCQlwaS0+dm9sdGFnZV9j b250cm9sID0KPj4gQ0lTTEFORFNfVk9MVEFHRV9DT05UUk9MX0JZX0dQSU87Cj4+IC0JZWxzZSBp ZiAoYW1kZ3B1X2F0b21iaW9zX2lzX3ZvbHRhZ2VfZ3BpbyhhZGV2LAo+PiBWT0xUQUdFX1RZUEVf VkREQywgVk9MVEFHRV9PQkpfU1ZJRDIpKQo+PiAtCQlwaS0+dm9sdGFnZV9jb250cm9sID0KPj4g Q0lTTEFORFNfVk9MVEFHRV9DT05UUk9MX0JZX1NWSUQyOwo+PiAtCj4+IC0JaWYgKGFkZXYtPnBt LmRwbS5wbGF0Zm9ybV9jYXBzICYKPj4gQVRPTV9QUF9QTEFURk9STV9DQVBfVkREQ0lfQ09OVFJP TCkgewo+PiAtCQlpZiAoYW1kZ3B1X2F0b21iaW9zX2lzX3ZvbHRhZ2VfZ3BpbyhhZGV2LAo+PiBW T0xUQUdFX1RZUEVfVkREQ0ksIFZPTFRBR0VfT0JKX0dQSU9fTFVUKSkKPj4gLQkJCXBpLT52ZGRj aV9jb250cm9sID0KPj4gQ0lTTEFORFNfVk9MVEFHRV9DT05UUk9MX0JZX0dQSU87Cj4+IC0JCWVs c2UgaWYgKGFtZGdwdV9hdG9tYmlvc19pc192b2x0YWdlX2dwaW8oYWRldiwKPj4gVk9MVEFHRV9U WVBFX1ZERENJLCBWT0xUQUdFX09CSl9TVklEMikpCj4+IC0JCQlwaS0+dmRkY2lfY29udHJvbCA9 Cj4+IENJU0xBTkRTX1ZPTFRBR0VfQ09OVFJPTF9CWV9TVklEMjsKPj4gLQkJZWxzZQo+PiAtCQkJ YWRldi0+cG0uZHBtLnBsYXRmb3JtX2NhcHMgJj0KPj4gfkFUT01fUFBfUExBVEZPUk1fQ0FQX1ZE RENJX0NPTlRST0w7Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKGFkZXYtPnBtLmRwbS5wbGF0Zm9ybV9j YXBzICYKPj4gQVRPTV9QUF9QTEFURk9STV9DQVBfTVZERENPTlRST0wpIHsKPj4gLQkJaWYgKGFt ZGdwdV9hdG9tYmlvc19pc192b2x0YWdlX2dwaW8oYWRldiwKPj4gVk9MVEFHRV9UWVBFX01WRERD LCBWT0xUQUdFX09CSl9HUElPX0xVVCkpCj4+IC0JCQlwaS0+bXZkZF9jb250cm9sID0KPj4gQ0lT TEFORFNfVk9MVEFHRV9DT05UUk9MX0JZX0dQSU87Cj4+IC0JCWVsc2UgaWYgKGFtZGdwdV9hdG9t Ymlvc19pc192b2x0YWdlX2dwaW8oYWRldiwKPj4gVk9MVEFHRV9UWVBFX01WRERDLCBWT0xUQUdF X09CSl9TVklEMikpCj4+IC0JCQlwaS0+bXZkZF9jb250cm9sID0KPj4gQ0lTTEFORFNfVk9MVEFH RV9DT05UUk9MX0JZX1NWSUQyOwo+PiAtCQllbHNlCj4+IC0JCQlhZGV2LT5wbS5kcG0ucGxhdGZv cm1fY2FwcyAmPQo+PiB+QVRPTV9QUF9QTEFURk9STV9DQVBfTVZERENPTlRST0w7Cj4+IC0JfQo+ PiAtCj4+IC0JcGktPnZkZGNfcGhhc2Vfc2hlZF9jb250cm9sID0gdHJ1ZTsKPj4gLQo+PiAtI2lm IGRlZmluZWQoQ09ORklHX0FDUEkpCj4+IC0JcGktPnBjaWVfcGVyZm9ybWFuY2VfcmVxdWVzdCA9 Cj4+IC0KPj4gCWFtZGdwdV9hY3BpX2lzX3BjaWVfcGVyZm9ybWFuY2VfcmVxdWVzdF9zdXBwb3J0 ZWQoYWRldik7Cj4+IC0jZWxzZQo+PiAtCXBpLT5wY2llX3BlcmZvcm1hbmNlX3JlcXVlc3QgPSBm YWxzZTsKPj4gLSNlbmRpZgo+PiAtCj4+IC0JaWYgKGFtZGdwdV9hdG9tX3BhcnNlX2RhdGFfaGVh ZGVyKGFkZXYtCj4+PiBtb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgJnNpemUsCj4+IC0J CQkJICAgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpKSB7Cj4+IC0JCXBpLT5jYXBzX3NjbGtf c3Nfc3VwcG9ydCA9IHRydWU7Cj4+IC0JCXBpLT5jYXBzX21jbGtfc3Nfc3VwcG9ydCA9IHRydWU7 Cj4+IC0JCXBpLT5keW5hbWljX3NzID0gdHJ1ZTsKPj4gLQl9IGVsc2Ugewo+PiAtCQlwaS0+Y2Fw c19zY2xrX3NzX3N1cHBvcnQgPSBmYWxzZTsKPj4gLQkJcGktPmNhcHNfbWNsa19zc19zdXBwb3J0 ID0gZmFsc2U7Cj4+IC0JCXBpLT5keW5hbWljX3NzID0gdHJ1ZTsKPj4gLQl9Cj4+IC0KPj4gLQlp ZiAoYWRldi0+cG0uaW50X3RoZXJtYWxfdHlwZSAhPSBUSEVSTUFMX1RZUEVfTk9ORSkKPj4gLQkJ cGktPnRoZXJtYWxfcHJvdGVjdGlvbiA9IHRydWU7Cj4+IC0JZWxzZQo+PiAtCQlwaS0+dGhlcm1h bF9wcm90ZWN0aW9uID0gZmFsc2U7Cj4+IC0KPj4gLQlwaS0+Y2Fwc19keW5hbWljX2FjX3RpbWlu ZyA9IHRydWU7Cj4+IC0KPj4gLQlwaS0+dXZkX3Bvd2VyX2dhdGVkID0gdHJ1ZTsKPj4gLQo+PiAt CS8qIG1ha2Ugc3VyZSBkYyBsaW1pdHMgYXJlIHZhbGlkICovCj4+IC0JaWYgKChhZGV2LT5wbS5k cG0uZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2RjLnNjbGsgPT0gMCkKPj4gfHwKPj4g LQkgICAgKGFkZXYtPnBtLmRwbS5keW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fZGMubWNs ayA9PSAwKSkKPj4gLQkJYWRldi0+cG0uZHBtLmR5bl9zdGF0ZS5tYXhfY2xvY2tfdm9sdGFnZV9v bl9kYyA9Cj4+IC0JCQlhZGV2LQo+Pj4gcG0uZHBtLmR5bl9zdGF0ZS5tYXhfY2xvY2tfdm9sdGFn ZV9vbl9hYzsKPj4gLQo+PiAtCXBpLT5mYW5fY3RybF9pc19pbl9kZWZhdWx0X21vZGUgPSB0cnVl Owo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkCj4+IC1jaV9k cG1fZGVidWdmc19wcmludF9jdXJyZW50X3BlcmZvcm1hbmNlX2xldmVsKHZvaWQgKmhhbmRsZSwK Pj4gLQkJCQkJICAgICAgIHN0cnVjdCBzZXFfZmlsZSAqbSkKPj4gLXsKPj4gLQlzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQlz dHJ1Y3QgY2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0Jc3RydWN0IGFt ZGdwdV9wcyAqcnBzID0gJnBpLT5jdXJyZW50X3JwczsKPj4gLQl1MzIgc2NsayA9IGNpX2dldF9h dmVyYWdlX3NjbGtfZnJlcShhZGV2KTsKPj4gLQl1MzIgbWNsayA9IGNpX2dldF9hdmVyYWdlX21j bGtfZnJlcShhZGV2KTsKPj4gLQl1MzIgYWN0aXZpdHlfcGVyY2VudCA9IDUwOwo+PiAtCWludCBy ZXQ7Cj4+IC0KPj4gLQlyZXQgPSBjaV9yZWFkX3NtY19zb2Z0X3JlZ2lzdGVyKGFkZXYsIG9mZnNl dG9mKFNNVTdfU29mdFJlZ2lzdGVycywKPj4gQXZlcmFnZUdyYXBoaWNzQSksCj4+IC0JCQkJCSZh Y3Rpdml0eV9wZXJjZW50KTsKPj4gLQo+PiAtCWlmIChyZXQgPT0gMCkgewo+PiAtCQlhY3Rpdml0 eV9wZXJjZW50ICs9IDB4ODA7Cj4+IC0JCWFjdGl2aXR5X3BlcmNlbnQgPj49IDg7Cj4+IC0JCWFj dGl2aXR5X3BlcmNlbnQgPSBhY3Rpdml0eV9wZXJjZW50ID4gMTAwID8gMTAwIDoKPj4gYWN0aXZp dHlfcGVyY2VudDsKPj4gLQl9Cj4+IC0KPj4gLQlzZXFfcHJpbnRmKG0sICJ1dmQgJXNhYmxlZFxu IiwgcGktPnV2ZF9wb3dlcl9nYXRlZCA/ICJkaXMiIDogImVuIik7Cj4+IC0Jc2VxX3ByaW50Ziht LCAidmNlICVzYWJsZWRcbiIsIHJwcy0+dmNlX2FjdGl2ZSA/ICJlbiIgOiAiZGlzIik7Cj4+IC0J c2VxX3ByaW50ZihtLCAicG93ZXIgbGV2ZWwgYXZnICAgIHNjbGs6ICV1IG1jbGs6ICV1XG4iLAo+ PiAtCQkgICBzY2xrLCBtY2xrKTsKPj4gLQlzZXFfcHJpbnRmKG0sICJHUFUgbG9hZDogJXUgJSVc biIsIGFjdGl2aXR5X3BlcmNlbnQpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBjaV9kcG1f cHJpbnRfcG93ZXJfc3RhdGUodm9pZCAqaGFuZGxlLCB2b2lkICpjdXJyZW50X3BzKQo+PiAtewo+ PiAtCXN0cnVjdCBhbWRncHVfcHMgKnJwcyA9IChzdHJ1Y3QgYW1kZ3B1X3BzICopY3VycmVudF9w czsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnBzID0gY2lfZ2V0X3BzKHJwcyk7Cj4+IC0Jc3RydWN0IGNp X3BsICpwbDsKPj4gLQlpbnQgaTsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQo+PiAtCWFtZGdwdV9kcG1fcHJpbnRf Y2xhc3NfaW5mbyhycHMtPmNsYXNzLCBycHMtPmNsYXNzMik7Cj4+IC0JYW1kZ3B1X2RwbV9wcmlu dF9jYXBfaW5mbyhycHMtPmNhcHMpOwo+PiAtCXByaW50aygiXHR1dmQgICAgdmNsazogJWQgZGNs azogJWRcbiIsIHJwcy0+dmNsaywgcnBzLT5kY2xrKTsKPj4gLQlmb3IgKGkgPSAwOyBpIDwgcHMt PnBlcmZvcm1hbmNlX2xldmVsX2NvdW50OyBpKyspIHsKPj4gLQkJcGwgPSAmcHMtPnBlcmZvcm1h bmNlX2xldmVsc1tpXTsKPj4gLQkJcHJpbnRrKCJcdFx0cG93ZXIgbGV2ZWwgJWQgICAgc2Nsazog JXUgbWNsazogJXUgcGNpZSBnZW46ICV1Cj4+IHBjaWUgbGFuZXM6ICV1XG4iLAo+PiAtCQkgICAg ICAgaSwgcGwtPnNjbGssIHBsLT5tY2xrLCBwbC0+cGNpZV9nZW4gKyAxLCBwbC0+cGNpZV9sYW5l KTsKPj4gLQl9Cj4+IC0JYW1kZ3B1X2RwbV9wcmludF9wc19zdGF0dXMoYWRldiwgcnBzKTsKPj4g LX0KPj4gLQo+PiAtc3RhdGljIGlubGluZSBib29sIGNpX2FyZV9wb3dlcl9sZXZlbHNfZXF1YWwo Y29uc3Qgc3RydWN0IGNpX3BsICpjaV9jcGwxLAo+PiAtCQkJCQkJY29uc3Qgc3RydWN0IGNpX3Bs ICpjaV9jcGwyKQo+PiAtewo+PiAtCXJldHVybiAoKGNpX2NwbDEtPm1jbGsgPT0gY2lfY3BsMi0+ bWNsaykgJiYKPj4gLQkJICAoY2lfY3BsMS0+c2NsayA9PSBjaV9jcGwyLT5zY2xrKSAmJgo+PiAt CQkgIChjaV9jcGwxLT5wY2llX2dlbiA9PSBjaV9jcGwyLT5wY2llX2dlbikgJiYKPj4gLQkJICAo Y2lfY3BsMS0+cGNpZV9sYW5lID09IGNpX2NwbDItPnBjaWVfbGFuZSkpOwo+PiAtfQo+PiAtCj4+ IC1zdGF0aWMgaW50IGNpX2NoZWNrX3N0YXRlX2VxdWFsKHZvaWQgKmhhbmRsZSwKPj4gLQkJCQl2 b2lkICpjdXJyZW50X3BzLAo+PiAtCQkJCXZvaWQgKnJlcXVlc3RfcHMsCj4+IC0JCQkJYm9vbCAq ZXF1YWwpCj4+IC17Cj4+IC0Jc3RydWN0IGNpX3BzICpjaV9jcHM7Cj4+IC0Jc3RydWN0IGNpX3Bz ICpjaV9ycHM7Cj4+IC0JaW50IGk7Cj4+IC0Jc3RydWN0IGFtZGdwdV9wcyAqY3BzID0gKHN0cnVj dCBhbWRncHVfcHMgKiljdXJyZW50X3BzOwo+PiAtCXN0cnVjdCBhbWRncHVfcHMgKnJwcyA9IChz dHJ1Y3QgYW1kZ3B1X3BzICopcmVxdWVzdF9wczsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQo+PiAtCWlmIChhZGV2 ID09IE5VTEwgfHwgY3BzID09IE5VTEwgfHwgcnBzID09IE5VTEwgfHwgZXF1YWwgPT0gTlVMTCkK Pj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0KPj4gLQljaV9jcHMgPSBjaV9nZXRfcHMoKHN0cnVj dCBhbWRncHVfcHMgKiljcHMpOwo+PiAtCWNpX3JwcyA9IGNpX2dldF9wcygoc3RydWN0IGFtZGdw dV9wcyAqKXJwcyk7Cj4+IC0KPj4gLQlpZiAoY2lfY3BzID09IE5VTEwpIHsKPj4gLQkJKmVxdWFs ID0gZmFsc2U7Cj4+IC0JCXJldHVybiAwOwo+PiAtCX0KPj4gLQo+PiAtCWlmIChjaV9jcHMtPnBl cmZvcm1hbmNlX2xldmVsX2NvdW50ICE9IGNpX3Jwcy0KPj4+IHBlcmZvcm1hbmNlX2xldmVsX2Nv dW50KSB7Cj4+IC0KPj4gLQkJKmVxdWFsID0gZmFsc2U7Cj4+IC0JCXJldHVybiAwOwo+PiAtCX0K Pj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBjaV9jcHMtPnBlcmZvcm1hbmNlX2xldmVsX2NvdW50 OyBpKyspIHsKPj4gLQkJaWYgKCFjaV9hcmVfcG93ZXJfbGV2ZWxzX2VxdWFsKCYoY2lfY3BzLQo+ Pj4gcGVyZm9ybWFuY2VfbGV2ZWxzW2ldKSwKPj4gLQkJCQkJJihjaV9ycHMtPnBlcmZvcm1hbmNl X2xldmVsc1tpXSkpKSB7Cj4+IC0JCQkqZXF1YWwgPSBmYWxzZTsKPj4gLQkJCXJldHVybiAwOwo+ PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JLyogSWYgYWxsIHBlcmZvcm1hbmNlIGxldmVscyBhcmUg dGhlIHNhbWUgdHJ5IHRvIHVzZSB0aGUgVVZEIGNsb2NrcyB0bwo+PiBicmVhayB0aGUgdGllLiov Cj4+IC0JKmVxdWFsID0gKChjcHMtPnZjbGsgPT0gcnBzLT52Y2xrKSAmJiAoY3BzLT5kY2xrID09 IHJwcy0+ZGNsaykpOwo+PiAtCSplcXVhbCAmPSAoKGNwcy0+ZXZjbGsgPT0gcnBzLT5ldmNsaykg JiYgKGNwcy0+ZWNjbGsgPT0gcnBzLT5lY2NsaykpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19 Cj4+IC0KPj4gLXN0YXRpYyB1MzIgY2lfZHBtX2dldF9zY2xrKHZvaWQgKmhhbmRsZSwgYm9vbCBs b3cpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdw dV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0 X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBjaV9wcyAqcmVxdWVzdGVkX3N0YXRlID0gY2lfZ2V0X3Bz KCZwaS0+cmVxdWVzdGVkX3Jwcyk7Cj4+IC0KPj4gLQlpZiAobG93KQo+PiAtCQlyZXR1cm4gcmVx dWVzdGVkX3N0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0uc2NsazsKPj4gLQllbHNlCj4+IC0J CXJldHVybiByZXF1ZXN0ZWRfc3RhdGUtCj4+PiBwZXJmb3JtYW5jZV9sZXZlbHNbcmVxdWVzdGVk X3N0YXRlLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCAtIDFdLnNjbGs7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyB1MzIgY2lfZHBtX2dldF9tY2xrKHZvaWQgKmhhbmRsZSwgYm9vbCBsb3cpCj4+IC17 Cj4+IC0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KiloYW5kbGU7Cj4+IC0Jc3RydWN0IGNpX3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYp Owo+PiAtCXN0cnVjdCBjaV9wcyAqcmVxdWVzdGVkX3N0YXRlID0gY2lfZ2V0X3BzKCZwaS0+cmVx dWVzdGVkX3Jwcyk7Cj4+IC0KPj4gLQlpZiAobG93KQo+PiAtCQlyZXR1cm4gcmVxdWVzdGVkX3N0 YXRlLT5wZXJmb3JtYW5jZV9sZXZlbHNbMF0ubWNsazsKPj4gLQllbHNlCj4+IC0JCXJldHVybiBy ZXF1ZXN0ZWRfc3RhdGUtCj4+PiBwZXJmb3JtYW5jZV9sZXZlbHNbcmVxdWVzdGVkX3N0YXRlLT5w ZXJmb3JtYW5jZV9sZXZlbF9jb3VudCAtIDFdLm1jbGs7Cj4+IC19Cj4+IC0KPj4gLS8qIGdldCB0 ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KPj4gLXN0YXRpYyBpbnQgY2lfZHBtX2dldF90 ZW1wKHZvaWQgKmhhbmRsZSkKPj4gLXsKPj4gLQl1MzIgdGVtcDsKPj4gLQlpbnQgYWN0dWFsX3Rl bXAgPSAwOwo+PiAtCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVf ZGV2aWNlICopaGFuZGxlOwo+PiAtCj4+IC0JdGVtcCA9IChSUkVHMzJfU01DKGl4Q0dfTVVMVF9U SEVSTUFMX1NUQVRVUykgJgo+PiBDR19NVUxUX1RIRVJNQUxfU1RBVFVTX19DVEZfVEVNUF9NQVNL KSA+Pgo+PiAtCQlDR19NVUxUX1RIRVJNQUxfU1RBVFVTX19DVEZfVEVNUF9fU0hJRlQ7Cj4+IC0K Pj4gLQlpZiAodGVtcCAmIDB4MjAwKQo+PiAtCQlhY3R1YWxfdGVtcCA9IDI1NTsKPj4gLQllbHNl Cj4+IC0JCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4MWZmOwo+PiAtCj4+IC0JYWN0dWFsX3RlbXAg PSBhY3R1YWxfdGVtcCAqIDEwMDA7Cj4+IC0KPj4gLQlyZXR1cm4gYWN0dWFsX3RlbXA7Cj4+IC19 Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfc2V0X3RlbXBlcmF0dXJlX3JhbmdlKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+PiAtewo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBjaV90 aGVybWFsX2VuYWJsZV9hbGVydChhZGV2LCBmYWxzZSk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0 dXJuIHJldDsKPj4gLQlyZXQgPSBjaV90aGVybWFsX3NldF90ZW1wZXJhdHVyZV9yYW5nZShhZGV2 LAo+PiBDSVNMQU5EU19URU1QX1JBTkdFX01JTiwKPj4gLQkJCQkJICAgICAgIENJU0xBTkRTX1RF TVBfUkFOR0VfTUFYKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCXJldCA9 IGNpX3RoZXJtYWxfZW5hYmxlX2FsZXJ0KGFkZXYsIHRydWUpOwo+PiAtCWlmIChyZXQpCj4+IC0J CXJldHVybiByZXQ7Cj4+IC0JcmV0dXJuIHJldDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBj aV9kcG1fZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0KPj4gLQlh ZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MgPSAmY2lfZHBtX2Z1bmNzOwo+PiAtCWFkZXYtPnBvd2Vy cGxheS5wcF9oYW5kbGUgPSBhZGV2Owo+PiAtCWNpX2RwbV9zZXRfaXJxX2Z1bmNzKGFkZXYpOwo+ PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZHBtX2xhdGVf aW5pdCh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0JaW50IHJldDsKPj4gLQlzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQo+PiAt CWlmICghYWRldi0+cG0uZHBtX2VuYWJsZWQpCj4+IC0JCXJldHVybiAwOwo+PiAtCj4+IC0JLyog aW5pdCB0aGUgc3lzZnMgYW5kIGRlYnVnZnMgZmlsZXMgbGF0ZSAqLwo+PiAtCXJldCA9IGFtZGdw dV9wbV9zeXNmc19pbml0KGFkZXYpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+ IC0KPj4gLQlyZXQgPSBjaV9zZXRfdGVtcGVyYXR1cmVfcmFuZ2UoYWRldik7Cj4+IC0JaWYgKHJl dCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1z dGF0aWMgaW50IGNpX2RwbV9zd19pbml0KHZvaWQgKmhhbmRsZSkKPj4gLXsKPj4gLQlpbnQgcmV0 Owo+PiAtCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNl ICopaGFuZGxlOwo+PiAtCj4+IC0JcmV0ID0gYW1kZ3B1X2lycV9hZGRfaWQoYWRldiwgQU1ER1BV X0lSUV9DTElFTlRJRF9MRUdBQ1ksCj4+IDIzMCwKPj4gLQkJCQkmYWRldi0+cG0uZHBtLnRoZXJt YWwuaXJxKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcmV0ID0g YW1kZ3B1X2lycV9hZGRfaWQoYWRldiwgQU1ER1BVX0lSUV9DTElFTlRJRF9MRUdBQ1ksCj4+IDIz MSwKPj4gLQkJCQkmYWRldi0+cG0uZHBtLnRoZXJtYWwuaXJxKTsKPj4gLQlpZiAocmV0KQo+PiAt CQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JLyogZGVmYXVsdCB0byBiYWxhbmNlZCBzdGF0ZSAqLwo+ PiAtCWFkZXYtPnBtLmRwbS5zdGF0ZSA9IFBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ7Cj4+IC0J YWRldi0+cG0uZHBtLnVzZXJfc3RhdGUgPSBQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOwo+PiAt CWFkZXYtPnBtLmRwbS5mb3JjZWRfbGV2ZWwgPSBBTURfRFBNX0ZPUkNFRF9MRVZFTF9BVVRPOwo+ PiAtCWFkZXYtPnBtLmRlZmF1bHRfc2NsayA9IGFkZXYtPmNsb2NrLmRlZmF1bHRfc2NsazsKPj4g LQlhZGV2LT5wbS5kZWZhdWx0X21jbGsgPSBhZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7Cj4+IC0J YWRldi0+cG0uY3VycmVudF9zY2xrID0gYWRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOwo+PiAtCWFk ZXYtPnBtLmN1cnJlbnRfbWNsayA9IGFkZXYtPmNsb2NrLmRlZmF1bHRfbWNsazsKPj4gLQlhZGV2 LT5wbS5pbnRfdGhlcm1hbF90eXBlID0gVEhFUk1BTF9UWVBFX05PTkU7Cj4+IC0KPj4gLQlyZXQg PSBjaV9kcG1faW5pdF9taWNyb2NvZGUoYWRldik7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJu IHJldDsKPj4gLQo+PiAtCWlmIChhbWRncHVfZHBtID09IDApCj4+IC0JCXJldHVybiAwOwo+PiAt Cj4+IC0JSU5JVF9XT1JLKCZhZGV2LT5wbS5kcG0udGhlcm1hbC53b3JrLAo+PiBhbWRncHVfZHBt X3RoZXJtYWxfd29ya19oYW5kbGVyKTsKPj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7 Cj4+IC0JcmV0ID0gY2lfZHBtX2luaXQoYWRldik7Cj4+IC0JaWYgKHJldCkKPj4gLQkJZ290byBk cG1fZmFpbGVkOwo+PiAtCWFkZXYtPnBtLmRwbS5jdXJyZW50X3BzID0gYWRldi0+cG0uZHBtLnJl cXVlc3RlZF9wcyA9IGFkZXYtCj4+PiBwbS5kcG0uYm9vdF9wczsKPj4gLQlpZiAoYW1kZ3B1X2Rw bSA9PSAxKQo+PiAtCQlhbWRncHVfcG1fcHJpbnRfcG93ZXJfc3RhdGVzKGFkZXYpOwo+PiAtCW11 dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+PiAtCURSTV9JTkZPKCJhbWRncHU6IGRwbSBp bml0aWFsaXplZFxuIik7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLQo+PiAtZHBtX2ZhaWxlZDoK Pj4gLQljaV9kcG1fZmluaShhZGV2KTsKPj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4 KTsKPj4gLQlEUk1fRVJST1IoImFtZGdwdTogZHBtIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7 Cj4+IC0JcmV0dXJuIHJldDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9kcG1fc3dfZmlu aSh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAo c3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0KPj4gLQlmbHVzaF93b3JrKCZhZGV2 LT5wbS5kcG0udGhlcm1hbC53b3JrKTsKPj4gLQo+PiAtCW11dGV4X2xvY2soJmFkZXYtPnBtLm11 dGV4KTsKPj4gLQljaV9kcG1fZmluaShhZGV2KTsKPj4gLQltdXRleF91bmxvY2soJmFkZXYtPnBt Lm11dGV4KTsKPj4gLQo+PiAtCXJlbGVhc2VfZmlybXdhcmUoYWRldi0+cG0uZncpOwo+PiAtCWFk ZXYtPnBtLmZ3ID0gTlVMTDsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0 aWMgaW50IGNpX2RwbV9od19pbml0KHZvaWQgKmhhbmRsZSkKPj4gLXsKPj4gLQlpbnQgcmV0Owo+ PiAtCj4+IC0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKiloYW5kbGU7Cj4+IC0KPj4gLQlpZiAoIWFtZGdwdV9kcG0pIHsKPj4gLQkJcmV0ID0gY2lf dXBsb2FkX2Zpcm13YXJlKGFkZXYpOwo+PiAtCQlpZiAocmV0KSB7Cj4+IC0JCQlEUk1fRVJST1Io ImNpX3VwbG9hZF9maXJtd2FyZSBmYWlsZWRcbiIpOwo+PiAtCQkJcmV0dXJuIHJldDsKPj4gLQkJ fQo+PiAtCQljaV9kcG1fc3RhcnRfc21jKGFkZXYpOwo+PiAtCQlyZXR1cm4gMDsKPj4gLQl9Cj4+ IC0KPj4gLQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4+IC0JY2lfZHBtX3NldHVwX2Fz aWMoYWRldik7Cj4+IC0JcmV0ID0gY2lfZHBtX2VuYWJsZShhZGV2KTsKPj4gLQlpZiAocmV0KQo+ PiAtCQlhZGV2LT5wbS5kcG1fZW5hYmxlZCA9IGZhbHNlOwo+PiAtCWVsc2UKPj4gLQkJYWRldi0+ cG0uZHBtX2VuYWJsZWQgPSB0cnVlOwo+PiAtCW11dGV4X3VubG9jaygmYWRldi0+cG0ubXV0ZXgp Owo+PiAtCj4+IC0JcmV0dXJuIHJldDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBjaV9kcG1f aHdfZmluaSh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0KPj4gLQlpZiAoYWRldi0+ cG0uZHBtX2VuYWJsZWQpIHsKPj4gLQkJbXV0ZXhfbG9jaygmYWRldi0+cG0ubXV0ZXgpOwo+PiAt CQljaV9kcG1fZGlzYWJsZShhZGV2KTsKPj4gLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5wbS5tdXRl eCk7Cj4+IC0JfSBlbHNlIHsKPj4gLQkJY2lfZHBtX3N0b3Bfc21jKGFkZXYpOwo+PiAtCX0KPj4g LQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9zdXNwZW5k KHZvaWQgKmhhbmRsZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQo+PiAtCWlmIChhZGV2LT5wbS5kcG1f ZW5hYmxlZCkgewo+PiAtCQltdXRleF9sb2NrKCZhZGV2LT5wbS5tdXRleCk7Cj4+IC0JCWFtZGdw dV9pcnFfcHV0KGFkZXYsICZhZGV2LT5wbS5kcG0udGhlcm1hbC5pcnEsCj4+IC0JCQkgICAgICAg QU1ER1BVX1RIRVJNQUxfSVJRX0xPV19UT19ISUdIKTsKPj4gLQkJYW1kZ3B1X2lycV9wdXQoYWRl diwgJmFkZXYtPnBtLmRwbS50aGVybWFsLmlycSwKPj4gLQkJCSAgICAgICBBTURHUFVfVEhFUk1B TF9JUlFfSElHSF9UT19MT1cpOwo+PiAtCQlhZGV2LT5wbS5kcG0ubGFzdF91c2VyX3N0YXRlID0g YWRldi0+cG0uZHBtLnVzZXJfc3RhdGU7Cj4+IC0JCWFkZXYtPnBtLmRwbS5sYXN0X3N0YXRlID0g YWRldi0+cG0uZHBtLnN0YXRlOwo+PiAtCQlhZGV2LT5wbS5kcG0udXNlcl9zdGF0ZSA9Cj4+IFBP V0VSX1NUQVRFX1RZUEVfSU5URVJOQUxfQk9PVDsKPj4gLQkJYWRldi0+cG0uZHBtLnN0YXRlID0K Pj4gUE9XRVJfU1RBVEVfVFlQRV9JTlRFUk5BTF9CT09UOwo+PiAtCQltdXRleF91bmxvY2soJmFk ZXYtPnBtLm11dGV4KTsKPj4gLQkJYW1kZ3B1X3BtX2NvbXB1dGVfY2xvY2tzKGFkZXYpOwo+PiAt Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lf ZHBtX3Jlc3VtZSh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0JaW50IHJldDsKPj4gLQlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4g LQo+PiAtCWlmIChhZGV2LT5wbS5kcG1fZW5hYmxlZCkgewo+PiAtCQkvKiBhc2ljIGluaXQgd2ls bCByZXNldCB0byB0aGUgYm9vdCBzdGF0ZSAqLwo+PiAtCQltdXRleF9sb2NrKCZhZGV2LT5wbS5t dXRleCk7Cj4+IC0JCWNpX2RwbV9zZXR1cF9hc2ljKGFkZXYpOwo+PiAtCQlyZXQgPSBjaV9kcG1f ZW5hYmxlKGFkZXYpOwo+PiAtCQlpZiAocmV0KQo+PiAtCQkJYWRldi0+cG0uZHBtX2VuYWJsZWQg PSBmYWxzZTsKPj4gLQkJZWxzZQo+PiAtCQkJYWRldi0+cG0uZHBtX2VuYWJsZWQgPSB0cnVlOwo+ PiAtCQlhZGV2LT5wbS5kcG0udXNlcl9zdGF0ZSA9IGFkZXYtPnBtLmRwbS5sYXN0X3VzZXJfc3Rh dGU7Cj4+IC0JCWFkZXYtPnBtLmRwbS5zdGF0ZSA9IGFkZXYtPnBtLmRwbS5sYXN0X3N0YXRlOwo+ PiAtCQltdXRleF91bmxvY2soJmFkZXYtPnBtLm11dGV4KTsKPj4gLQkJaWYgKGFkZXYtPnBtLmRw bV9lbmFibGVkKQo+PiAtCQkJYW1kZ3B1X3BtX2NvbXB1dGVfY2xvY2tzKGFkZXYpOwo+PiAtCX0K Pj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGJvb2wgY2lfZHBtX2lzX2lkbGUo dm9pZCAqaGFuZGxlKQo+PiAtewo+PiAtCS8qIFhYWCAqLwo+PiAtCXJldHVybiB0cnVlOwo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV93YWl0X2Zvcl9pZGxlKHZvaWQgKmhhbmRsZSkK Pj4gLXsKPj4gLQkvKiBYWFggKi8KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGlj IGludCBjaV9kcG1fc29mdF9yZXNldCh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0JcmV0dXJuIDA7 Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgY2lfZHBtX3NldF9pbnRlcnJ1cHRfc3RhdGUoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkJICAgICAgc3RydWN0IGFtZGdwdV9pcnFf c3JjICpzb3VyY2UsCj4+IC0JCQkJICAgICAgdW5zaWduZWQgdHlwZSwKPj4gLQkJCQkgICAgICBl bnVtIGFtZGdwdV9pbnRlcnJ1cHRfc3RhdGUgc3RhdGUpCj4+IC17Cj4+IC0JdTMyIGNnX3RoZXJt YWxfaW50Owo+PiAtCj4+IC0Jc3dpdGNoICh0eXBlKSB7Cj4+IC0JY2FzZSBBTURHUFVfVEhFUk1B TF9JUlFfTE9XX1RPX0hJR0g6Cj4+IC0JCXN3aXRjaCAoc3RhdGUpIHsKPj4gLQkJY2FzZSBBTURH UFVfSVJRX1NUQVRFX0RJU0FCTEU6Cj4+IC0JCQljZ190aGVybWFsX2ludCA9IFJSRUczMl9TTUMo aXhDR19USEVSTUFMX0lOVCk7Cj4+IC0JCQljZ190aGVybWFsX2ludCB8PQo+PiBDR19USEVSTUFM X0lOVF9DVFJMX19USEVSTV9JTlRIX01BU0tfTUFTSzsKPj4gLQkJCVdSRUczMl9TTUMoaXhDR19U SEVSTUFMX0lOVCwgY2dfdGhlcm1hbF9pbnQpOwo+PiAtCQkJYnJlYWs7Cj4+IC0JCWNhc2UgQU1E R1BVX0lSUV9TVEFURV9FTkFCTEU6Cj4+IC0JCQljZ190aGVybWFsX2ludCA9IFJSRUczMl9TTUMo aXhDR19USEVSTUFMX0lOVCk7Cj4+IC0JCQljZ190aGVybWFsX2ludCAmPQo+PiB+Q0dfVEhFUk1B TF9JTlRfQ1RSTF9fVEhFUk1fSU5USF9NQVNLX01BU0s7Cj4+IC0JCQlXUkVHMzJfU01DKGl4Q0df VEhFUk1BTF9JTlQsIGNnX3RoZXJtYWxfaW50KTsKPj4gLQkJCWJyZWFrOwo+PiAtCQlkZWZhdWx0 Ogo+PiAtCQkJYnJlYWs7Cj4+IC0JCX0KPj4gLQkJYnJlYWs7Cj4+IC0KPj4gLQljYXNlIEFNREdQ VV9USEVSTUFMX0lSUV9ISUdIX1RPX0xPVzoKPj4gLQkJc3dpdGNoIChzdGF0ZSkgewo+PiAtCQlj YXNlIEFNREdQVV9JUlFfU1RBVEVfRElTQUJMRToKPj4gLQkJCWNnX3RoZXJtYWxfaW50ID0gUlJF RzMyX1NNQyhpeENHX1RIRVJNQUxfSU5UKTsKPj4gLQkJCWNnX3RoZXJtYWxfaW50IHw9Cj4+IENH X1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVExfTUFTS19NQVNLOwo+PiAtCQkJV1JFRzMyX1NN QyhpeENHX1RIRVJNQUxfSU5ULCBjZ190aGVybWFsX2ludCk7Cj4+IC0JCQlicmVhazsKPj4gLQkJ Y2FzZSBBTURHUFVfSVJRX1NUQVRFX0VOQUJMRToKPj4gLQkJCWNnX3RoZXJtYWxfaW50ID0gUlJF RzMyX1NNQyhpeENHX1RIRVJNQUxfSU5UKTsKPj4gLQkJCWNnX3RoZXJtYWxfaW50ICY9Cj4+IH5D R19USEVSTUFMX0lOVF9DVFJMX19USEVSTV9JTlRMX01BU0tfTUFTSzsKPj4gLQkJCVdSRUczMl9T TUMoaXhDR19USEVSTUFMX0lOVCwgY2dfdGhlcm1hbF9pbnQpOwo+PiAtCQkJYnJlYWs7Cj4+IC0J CWRlZmF1bHQ6Cj4+IC0JCQlicmVhazsKPj4gLQkJfQo+PiAtCQlicmVhazsKPj4gLQo+PiAtCWRl ZmF1bHQ6Cj4+IC0JCWJyZWFrOwo+PiAtCX0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAt c3RhdGljIGludCBjaV9kcG1fcHJvY2Vzc19pbnRlcnJ1cHQoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCj4+IC0JCQkJICAgIHN0cnVjdCBhbWRncHVfaXJxX3NyYyAqc291cmNlLAo+PiAtCQkJ CSAgICBzdHJ1Y3QgYW1kZ3B1X2l2X2VudHJ5ICplbnRyeSkKPj4gLXsKPj4gLQlib29sIHF1ZXVl X3RoZXJtYWwgPSBmYWxzZTsKPj4gLQo+PiAtCWlmIChlbnRyeSA9PSBOVUxMKQo+PiAtCQlyZXR1 cm4gLUVJTlZBTDsKPj4gLQo+PiAtCXN3aXRjaCAoZW50cnktPnNyY19pZCkgewo+PiAtCWNhc2Ug MjMwOiAvKiB0aGVybWFsIGxvdyB0byBoaWdoICovCj4+IC0JCURSTV9ERUJVRygiSUg6IHRoZXJt YWwgbG93IHRvIGhpZ2hcbiIpOwo+PiAtCQlhZGV2LT5wbS5kcG0udGhlcm1hbC5oaWdoX3RvX2xv dyA9IGZhbHNlOwo+PiAtCQlxdWV1ZV90aGVybWFsID0gdHJ1ZTsKPj4gLQkJYnJlYWs7Cj4+IC0J Y2FzZSAyMzE6IC8qIHRoZXJtYWwgaGlnaCB0byBsb3cgKi8KPj4gLQkJRFJNX0RFQlVHKCJJSDog dGhlcm1hbCBoaWdoIHRvIGxvd1xuIik7Cj4+IC0JCWFkZXYtPnBtLmRwbS50aGVybWFsLmhpZ2hf dG9fbG93ID0gdHJ1ZTsKPj4gLQkJcXVldWVfdGhlcm1hbCA9IHRydWU7Cj4+IC0JCWJyZWFrOwo+ PiAtCWRlZmF1bHQ6Cj4+IC0JCWJyZWFrOwo+PiAtCX0KPj4gLQo+PiAtCWlmIChxdWV1ZV90aGVy bWFsKQo+PiAtCQlzY2hlZHVsZV93b3JrKCZhZGV2LT5wbS5kcG0udGhlcm1hbC53b3JrKTsKPj4g LQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9zZXRfY2xv Y2tnYXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAo+PiAtCQkJCQkgIGVudW0gYW1kX2Nsb2NrZ2F0 aW5nX3N0YXRlIHN0YXRlKQo+PiAtewo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0 aWMgaW50IGNpX2RwbV9zZXRfcG93ZXJnYXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAo+PiAtCQkJ CQkgIGVudW0gYW1kX3Bvd2VyZ2F0aW5nX3N0YXRlIHN0YXRlKQo+PiAtewo+PiAtCXJldHVybiAw Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9wcmludF9jbG9ja19sZXZlbHModm9p ZCAqaGFuZGxlLAo+PiAtCQllbnVtIHBwX2Nsb2NrX3R5cGUgdHlwZSwgY2hhciAqYnVmKQo+PiAt ewo+PiAtCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNl ICopaGFuZGxlOwo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2 KTsKPj4gLQlzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSAqc2Nsa190YWJsZSA9ICZwaS0+ZHBt X3RhYmxlLnNjbGtfdGFibGU7Cj4+IC0Jc3RydWN0IGNpX3NpbmdsZV9kcG1fdGFibGUgKm1jbGtf dGFibGUgPSAmcGktCj4+PiBkcG1fdGFibGUubWNsa190YWJsZTsKPj4gLQlzdHJ1Y3QgY2lfc2lu Z2xlX2RwbV90YWJsZSAqcGNpZV90YWJsZSA9ICZwaS0KPj4+IGRwbV90YWJsZS5wY2llX3NwZWVk X3RhYmxlOwo+PiAtCj4+IC0JaW50IGksIG5vdywgc2l6ZSA9IDA7Cj4+IC0JdWludDMyX3QgY2xv Y2ssIHBjaWVfc3BlZWQ7Cj4+IC0KPj4gLQlzd2l0Y2ggKHR5cGUpIHsKPj4gLQljYXNlIFBQX1ND TEs6Cj4+IC0JCWFtZGdwdV9jaV9zZW5kX21zZ190b19zbWMoYWRldiwKPj4gUFBTTUNfTVNHX0FQ SV9HZXRTY2xrRnJlcXVlbmN5KTsKPj4gLQkJY2xvY2sgPSBSUkVHMzIobW1TTUNfTVNHX0FSR18w KTsKPj4gLQo+PiAtCQlmb3IgKGkgPSAwOyBpIDwgc2Nsa190YWJsZS0+Y291bnQ7IGkrKykgewo+ PiAtCQkJaWYgKGNsb2NrID4gc2Nsa190YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSkKPj4gLQkJ CQljb250aW51ZTsKPj4gLQkJCWJyZWFrOwo+PiAtCQl9Cj4+IC0JCW5vdyA9IGk7Cj4+IC0KPj4g LQkJZm9yIChpID0gMDsgaSA8IHNjbGtfdGFibGUtPmNvdW50OyBpKyspCj4+IC0JCQlzaXplICs9 IHNwcmludGYoYnVmICsgc2l6ZSwgIiVkOiAldU1oeiAlc1xuIiwKPj4gLQkJCQkJaSwgc2Nsa190 YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSAvCj4+IDEwMCwKPj4gLQkJCQkJKGkgPT0gbm93KSA/ ICIqIiA6ICIiKTsKPj4gLQkJYnJlYWs7Cj4+IC0JY2FzZSBQUF9NQ0xLOgo+PiAtCQlhbWRncHVf Y2lfc2VuZF9tc2dfdG9fc21jKGFkZXYsCj4+IFBQU01DX01TR19BUElfR2V0TWNsa0ZyZXF1ZW5j eSk7Cj4+IC0JCWNsb2NrID0gUlJFRzMyKG1tU01DX01TR19BUkdfMCk7Cj4+IC0KPj4gLQkJZm9y IChpID0gMDsgaSA8IG1jbGtfdGFibGUtPmNvdW50OyBpKyspIHsKPj4gLQkJCWlmIChjbG9jayA+ IG1jbGtfdGFibGUtPmRwbV9sZXZlbHNbaV0udmFsdWUpCj4+IC0JCQkJY29udGludWU7Cj4+IC0J CQlicmVhazsKPj4gLQkJfQo+PiAtCQlub3cgPSBpOwo+PiAtCj4+IC0JCWZvciAoaSA9IDA7IGkg PCBtY2xrX3RhYmxlLT5jb3VudDsgaSsrKQo+PiAtCQkJc2l6ZSArPSBzcHJpbnRmKGJ1ZiArIHNp emUsICIlZDogJXVNaHogJXNcbiIsCj4+IC0JCQkJCWksIG1jbGtfdGFibGUtPmRwbV9sZXZlbHNb aV0udmFsdWUgLwo+PiAxMDAsCj4+IC0JCQkJCShpID09IG5vdykgPyAiKiIgOiAiIik7Cj4+IC0J CWJyZWFrOwo+PiAtCWNhc2UgUFBfUENJRToKPj4gLQkJcGNpZV9zcGVlZCA9IGNpX2dldF9jdXJy ZW50X3BjaWVfc3BlZWQoYWRldik7Cj4+IC0JCWZvciAoaSA9IDA7IGkgPCBwY2llX3RhYmxlLT5j b3VudDsgaSsrKSB7Cj4+IC0JCQlpZiAocGNpZV9zcGVlZCAhPSBwY2llX3RhYmxlLT5kcG1fbGV2 ZWxzW2ldLnZhbHVlKQo+PiAtCQkJCWNvbnRpbnVlOwo+PiAtCQkJYnJlYWs7Cj4+IC0JCX0KPj4g LQkJbm93ID0gaTsKPj4gLQo+PiAtCQlmb3IgKGkgPSAwOyBpIDwgcGNpZV90YWJsZS0+Y291bnQ7 IGkrKykKPj4gLQkJCXNpemUgKz0gc3ByaW50ZihidWYgKyBzaXplLCAiJWQ6ICVzICVzXG4iLCBp LAo+PiAtCQkJCQkocGNpZV90YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSA9PQo+PiAwKSA/ICIy LjVHVC9zLCB4MSIgOgo+PiAtCQkJCQkocGNpZV90YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSA9 PQo+PiAxKSA/ICI1LjBHVC9zLCB4MTYiIDoKPj4gLQkJCQkJKHBjaWVfdGFibGUtPmRwbV9sZXZl bHNbaV0udmFsdWUgPT0KPj4gMikgPyAiOC4wR1QvcywgeDE2IiA6ICIiLAo+PiAtCQkJCQkoaSA9 PSBub3cpID8gIioiIDogIiIpOwo+PiAtCQlicmVhazsKPj4gLQlkZWZhdWx0Ogo+PiAtCQlicmVh azsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gc2l6ZTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGlu dCBjaV9kcG1fZm9yY2VfY2xvY2tfbGV2ZWwodm9pZCAqaGFuZGxlLAo+PiAtCQllbnVtIHBwX2Ns b2NrX3R5cGUgdHlwZSwgdWludDMyX3QgbWFzaykKPj4gLXsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKPj4gLQlzdHJ1Y3Qg Y2lfcG93ZXJfaW5mbyAqcGkgPSBjaV9nZXRfcGkoYWRldik7Cj4+IC0KPj4gLQlpZiAoYWRldi0+ cG0uZHBtLmZvcmNlZF9sZXZlbCAhPQo+PiBBTURfRFBNX0ZPUkNFRF9MRVZFTF9NQU5VQUwpCj4+ IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCj4+IC0JaWYgKG1hc2sgPT0gMCkKPj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4+IC0KPj4gLQlzd2l0Y2ggKHR5cGUpIHsKPj4gLQljYXNlIFBQX1NDTEs6Cj4+ IC0JCWlmICghcGktPnNjbGtfZHBtX2tleV9kaXNhYmxlZCkKPj4gLQo+PiAJYW1kZ3B1X2NpX3Nl bmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihhZGV2LAo+PiAtCj4+IAlQUFNNQ19NU0dfU0NM S0RQTV9TZXRFbmFibGVkTWFzaywKPj4gLQkJCQkJcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21h c2suc2Nsa19kcG1fZW5hYmxlX21hc2sgJiBtYXNrKTsKPj4gLQkJYnJlYWs7Cj4+IC0KPj4gLQlj YXNlIFBQX01DTEs6Cj4+IC0JCWlmICghcGktPm1jbGtfZHBtX2tleV9kaXNhYmxlZCkKPj4gLQo+ PiAJYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihhZGV2LAo+PiAtCj4+ IAlQUFNNQ19NU0dfTUNMS0RQTV9TZXRFbmFibGVkTWFzaywKPj4gLQkJCQkJcGktCj4+PiBkcG1f bGV2ZWxfZW5hYmxlX21hc2subWNsa19kcG1fZW5hYmxlX21hc2sgJiBtYXNrKTsKPj4gLQkJYnJl YWs7Cj4+IC0KPj4gLQljYXNlIFBQX1BDSUU6Cj4+IC0Jewo+PiAtCQl1aW50MzJfdCB0bXAgPSBt YXNrICYgcGktCj4+PiBkcG1fbGV2ZWxfZW5hYmxlX21hc2sucGNpZV9kcG1fZW5hYmxlX21hc2s7 Cj4+IC0KPj4gLQkJaWYgKCFwaS0+cGNpZV9kcG1fa2V5X2Rpc2FibGVkKSB7Cj4+IC0JCQlpZiAo ZmxzKHRtcCkgIT0gZmZzKHRtcCkpCj4+IC0JCQkJYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhh ZGV2LAo+PiBQUFNNQ19NU0dfUENJZURQTV9VbkZvcmNlTGV2ZWwpOwo+PiAtCQkJZWxzZQo+PiAt Cj4+IAlhbWRncHVfY2lfc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGFkZXYsCj4+IC0J CQkJCVBQU01DX01TR19QQ0llRFBNX0ZvcmNlTGV2ZWwsCj4+IC0JCQkJCWZscyh0bXApIC0gMSk7 Cj4+IC0JCX0KPj4gLQkJYnJlYWs7Cj4+IC0JfQo+PiAtCWRlZmF1bHQ6Cj4+IC0JCWJyZWFrOwo+ PiAtCX0KPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2Rw bV9nZXRfc2Nsa19vZCh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0Jc3RydWN0IGNp X3Bvd2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBjaV9zaW5nbGVf ZHBtX3RhYmxlICpzY2xrX3RhYmxlID0gJihwaS0KPj4+IGRwbV90YWJsZS5zY2xrX3RhYmxlKTsK Pj4gLQlzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSAqZ29sZGVuX3NjbGtfdGFibGUgPQo+PiAt CQkJJihwaS0+Z29sZGVuX2RwbV90YWJsZS5zY2xrX3RhYmxlKTsKPj4gLQlpbnQgdmFsdWU7Cj4+ IC0KPj4gLQl2YWx1ZSA9IChzY2xrX3RhYmxlLT5kcG1fbGV2ZWxzW3NjbGtfdGFibGUtPmNvdW50 IC0gMV0udmFsdWUgLQo+PiAtCQkJZ29sZGVuX3NjbGtfdGFibGUtPmRwbV9sZXZlbHNbZ29sZGVu X3NjbGtfdGFibGUtCj4+PiBjb3VudCAtIDFdLnZhbHVlKSAqCj4+IC0JCQkxMDAgLwo+PiAtCQkJ Z29sZGVuX3NjbGtfdGFibGUtPmRwbV9sZXZlbHNbZ29sZGVuX3NjbGtfdGFibGUtCj4+PiBjb3Vu dCAtIDFdLnZhbHVlOwo+PiAtCj4+IC0JcmV0dXJuIHZhbHVlOwo+PiAtfQo+PiAtCj4+IC1zdGF0 aWMgaW50IGNpX2RwbV9zZXRfc2Nsa19vZCh2b2lkICpoYW5kbGUsIHVpbnQzMl90IHZhbHVlKQo+ PiAtewo+PiAtCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2 aWNlICopaGFuZGxlOwo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShh ZGV2KTsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnBzID0gY2lfZ2V0X3BzKGFkZXYtPnBtLmRwbS5yZXF1 ZXN0ZWRfcHMpOwo+PiAtCXN0cnVjdCBjaV9zaW5nbGVfZHBtX3RhYmxlICpnb2xkZW5fc2Nsa190 YWJsZSA9Cj4+IC0JCQkmKHBpLT5nb2xkZW5fZHBtX3RhYmxlLnNjbGtfdGFibGUpOwo+PiAtCj4+ IC0JaWYgKHZhbHVlID4gMjApCj4+IC0JCXZhbHVlID0gMjA7Cj4+IC0KPj4gLQlwcy0+cGVyZm9y bWFuY2VfbGV2ZWxzW3BzLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCAtIDFdLnNjbGsgPQo+PiAt CQkJZ29sZGVuX3NjbGtfdGFibGUtPmRwbV9sZXZlbHNbZ29sZGVuX3NjbGtfdGFibGUtCj4+PiBj b3VudCAtIDFdLnZhbHVlICoKPj4gLQkJCXZhbHVlIC8gMTAwICsKPj4gLQkJCWdvbGRlbl9zY2xr X3RhYmxlLT5kcG1fbGV2ZWxzW2dvbGRlbl9zY2xrX3RhYmxlLQo+Pj4gY291bnQgLSAxXS52YWx1 ZTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9n ZXRfbWNsa19vZCh2b2lkICpoYW5kbGUpCj4+IC17Cj4+IC0Jc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+IC0Jc3RydWN0IGNpX3Bv d2VyX2luZm8gKnBpID0gY2lfZ2V0X3BpKGFkZXYpOwo+PiAtCXN0cnVjdCBjaV9zaW5nbGVfZHBt X3RhYmxlICptY2xrX3RhYmxlID0gJihwaS0KPj4+IGRwbV90YWJsZS5tY2xrX3RhYmxlKTsKPj4g LQlzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSAqZ29sZGVuX21jbGtfdGFibGUgPQo+PiAtCQkJ JihwaS0+Z29sZGVuX2RwbV90YWJsZS5tY2xrX3RhYmxlKTsKPj4gLQlpbnQgdmFsdWU7Cj4+IC0K Pj4gLQl2YWx1ZSA9IChtY2xrX3RhYmxlLT5kcG1fbGV2ZWxzW21jbGtfdGFibGUtPmNvdW50IC0g MV0udmFsdWUgLQo+PiAtCQkJZ29sZGVuX21jbGtfdGFibGUtCj4+PiBkcG1fbGV2ZWxzW2dvbGRl bl9tY2xrX3RhYmxlLT5jb3VudCAtIDFdLnZhbHVlKSAqCj4+IC0JCQkxMDAgLwo+PiAtCQkJZ29s ZGVuX21jbGtfdGFibGUtCj4+PiBkcG1fbGV2ZWxzW2dvbGRlbl9tY2xrX3RhYmxlLT5jb3VudCAt IDFdLnZhbHVlOwo+PiAtCj4+IC0JcmV0dXJuIHZhbHVlOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMg aW50IGNpX2RwbV9zZXRfbWNsa19vZCh2b2lkICpoYW5kbGUsIHVpbnQzMl90IHZhbHVlKQo+PiAt ewo+PiAtCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNl ICopaGFuZGxlOwo+PiAtCXN0cnVjdCBjaV9wb3dlcl9pbmZvICpwaSA9IGNpX2dldF9waShhZGV2 KTsKPj4gLQlzdHJ1Y3QgY2lfcHMgKnBzID0gY2lfZ2V0X3BzKGFkZXYtPnBtLmRwbS5yZXF1ZXN0 ZWRfcHMpOwo+PiAtCXN0cnVjdCBjaV9zaW5nbGVfZHBtX3RhYmxlICpnb2xkZW5fbWNsa190YWJs ZSA9Cj4+IC0JCQkmKHBpLT5nb2xkZW5fZHBtX3RhYmxlLm1jbGtfdGFibGUpOwo+PiAtCj4+IC0J aWYgKHZhbHVlID4gMjApCj4+IC0JCXZhbHVlID0gMjA7Cj4+IC0KPj4gLQlwcy0+cGVyZm9ybWFu Y2VfbGV2ZWxzW3BzLT5wZXJmb3JtYW5jZV9sZXZlbF9jb3VudCAtIDFdLm1jbGsgPQo+PiAtCQkJ Z29sZGVuX21jbGtfdGFibGUtCj4+PiBkcG1fbGV2ZWxzW2dvbGRlbl9tY2xrX3RhYmxlLT5jb3Vu dCAtIDFdLnZhbHVlICoKPj4gLQkJCXZhbHVlIC8gMTAwICsKPj4gLQkJCWdvbGRlbl9tY2xrX3Rh YmxlLQo+Pj4gZHBtX2xldmVsc1tnb2xkZW5fbWNsa190YWJsZS0+Y291bnQgLSAxXS52YWx1ZTsK Pj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGNpX2RwbV9yZWFk X3NlbnNvcih2b2lkICpoYW5kbGUsIGludCBpZHgsCj4+IC0JCQkgICAgICB2b2lkICp2YWx1ZSwg aW50ICpzaXplKQo+PiAtewo+PiAtCXUzMiBhY3Rpdml0eV9wZXJjZW50ID0gNTA7Cj4+IC0JaW50 IHJldDsKPj4gLQlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqKWhhbmRsZTsKPj4gLQo+PiAtCS8qIHNpemUgbXVzdCBiZSBhdCBsZWFzdCA0IGJ5dGVz IGZvciBhbGwgc2Vuc29ycyAqLwo+PiAtCWlmICgqc2l6ZSA8IDQpCj4+IC0JCXJldHVybiAtRUlO VkFMOwo+PiAtCj4+IC0Jc3dpdGNoIChpZHgpIHsKPj4gLQljYXNlIEFNREdQVV9QUF9TRU5TT1Jf R0ZYX1NDTEs6Cj4+IC0JCSooKHVpbnQzMl90ICopdmFsdWUpID0gY2lfZ2V0X2F2ZXJhZ2Vfc2Ns a19mcmVxKGFkZXYpOwo+PiAtCQkqc2l6ZSA9IDQ7Cj4+IC0JCXJldHVybiAwOwo+PiAtCWNhc2Ug QU1ER1BVX1BQX1NFTlNPUl9HRlhfTUNMSzoKPj4gLQkJKigodWludDMyX3QgKil2YWx1ZSkgPSBj aV9nZXRfYXZlcmFnZV9tY2xrX2ZyZXEoYWRldik7Cj4+IC0JCSpzaXplID0gNDsKPj4gLQkJcmV0 dXJuIDA7Cj4+IC0JY2FzZSBBTURHUFVfUFBfU0VOU09SX0dQVV9URU1QOgo+PiAtCQkqKCh1aW50 MzJfdCAqKXZhbHVlKSA9IGNpX2RwbV9nZXRfdGVtcChhZGV2KTsKPj4gLQkJKnNpemUgPSA0Owo+ PiAtCQlyZXR1cm4gMDsKPj4gLQljYXNlIEFNREdQVV9QUF9TRU5TT1JfR1BVX0xPQUQ6Cj4+IC0J CXJldCA9IGNpX3JlYWRfc21jX3NvZnRfcmVnaXN0ZXIoYWRldiwKPj4gLQkJCQkJCW9mZnNldG9m KFNNVTdfU29mdFJlZ2lzdGVycywKPj4gLQkJCQkJCQkgQXZlcmFnZUdyYXBoaWNzQSksCj4+IC0J CQkJCQkmYWN0aXZpdHlfcGVyY2VudCk7Cj4+IC0JCWlmIChyZXQgPT0gMCkgewo+PiAtCQkJYWN0 aXZpdHlfcGVyY2VudCArPSAweDgwOwo+PiAtCQkJYWN0aXZpdHlfcGVyY2VudCA+Pj0gODsKPj4g LQkJCWFjdGl2aXR5X3BlcmNlbnQgPQo+PiAtCQkJCWFjdGl2aXR5X3BlcmNlbnQgPiAxMDAgPyAx MDAgOiBhY3Rpdml0eV9wZXJjZW50Owo+PiAtCQl9Cj4+IC0JCSooKHVpbnQzMl90ICopdmFsdWUp ID0gYWN0aXZpdHlfcGVyY2VudDsKPj4gLQkJKnNpemUgPSA0Owo+PiAtCQlyZXR1cm4gMDsKPj4g LQlkZWZhdWx0Ogo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyBpbnQgY2lfc2V0X3Bvd2VyZ2F0aW5nX2J5X3NtdSh2b2lkICpoYW5kbGUsCj4+IC0JCQkJ dWludDMyX3QgYmxvY2tfdHlwZSwgYm9vbCBnYXRlKQo+PiAtewo+PiAtCXN3aXRjaCAoYmxvY2tf dHlwZSkgewo+PiAtCWNhc2UgQU1EX0lQX0JMT0NLX1RZUEVfVVZEOgo+PiAtCQljaV9kcG1fcG93 ZXJnYXRlX3V2ZChoYW5kbGUsIGdhdGUpOwo+PiAtCQlicmVhazsKPj4gLQlkZWZhdWx0Ogo+PiAt CQlicmVhazsKPj4gLQl9Cj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBjb25z dCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIGNpX2RwbV9pcF9mdW5jcyA9IHsKPj4gLQkubmFtZSA9ICJj aV9kcG0iLAo+PiAtCS5lYXJseV9pbml0ID0gY2lfZHBtX2Vhcmx5X2luaXQsCj4+IC0JLmxhdGVf aW5pdCA9IGNpX2RwbV9sYXRlX2luaXQsCj4+IC0JLnN3X2luaXQgPSBjaV9kcG1fc3dfaW5pdCwK Pj4gLQkuc3dfZmluaSA9IGNpX2RwbV9zd19maW5pLAo+PiAtCS5od19pbml0ID0gY2lfZHBtX2h3 X2luaXQsCj4+IC0JLmh3X2ZpbmkgPSBjaV9kcG1faHdfZmluaSwKPj4gLQkuc3VzcGVuZCA9IGNp X2RwbV9zdXNwZW5kLAo+PiAtCS5yZXN1bWUgPSBjaV9kcG1fcmVzdW1lLAo+PiAtCS5pc19pZGxl ID0gY2lfZHBtX2lzX2lkbGUsCj4+IC0JLndhaXRfZm9yX2lkbGUgPSBjaV9kcG1fd2FpdF9mb3Jf aWRsZSwKPj4gLQkuc29mdF9yZXNldCA9IGNpX2RwbV9zb2Z0X3Jlc2V0LAo+PiAtCS5zZXRfY2xv Y2tnYXRpbmdfc3RhdGUgPSBjaV9kcG1fc2V0X2Nsb2NrZ2F0aW5nX3N0YXRlLAo+PiAtCS5zZXRf cG93ZXJnYXRpbmdfc3RhdGUgPSBjaV9kcG1fc2V0X3Bvd2VyZ2F0aW5nX3N0YXRlLAo+PiAtfTsK Pj4gLQo+PiAtY29uc3Qgc3RydWN0IGFtZGdwdV9pcF9ibG9ja192ZXJzaW9uIGNpX3NtdV9pcF9i bG9jayA9Cj4+IC17Cj4+IC0JLnR5cGUgPSBBTURfSVBfQkxPQ0tfVFlQRV9TTUMsCj4+IC0JLm1h am9yID0gNywKPj4gLQkubWlub3IgPSAwLAo+PiAtCS5yZXYgPSAwLAo+PiAtCS5mdW5jcyA9ICZj aV9kcG1faXBfZnVuY3MsCj4+IC19Owo+PiAtCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGFtZF9w bV9mdW5jcyBjaV9kcG1fZnVuY3MgPSB7Cj4+IC0JLnByZV9zZXRfcG93ZXJfc3RhdGUgPSAmY2lf ZHBtX3ByZV9zZXRfcG93ZXJfc3RhdGUsCj4+IC0JLnNldF9wb3dlcl9zdGF0ZSA9ICZjaV9kcG1f c2V0X3Bvd2VyX3N0YXRlLAo+PiAtCS5wb3N0X3NldF9wb3dlcl9zdGF0ZSA9ICZjaV9kcG1fcG9z dF9zZXRfcG93ZXJfc3RhdGUsCj4+IC0JLmRpc3BsYXlfY29uZmlndXJhdGlvbl9jaGFuZ2VkID0K Pj4gJmNpX2RwbV9kaXNwbGF5X2NvbmZpZ3VyYXRpb25fY2hhbmdlZCwKPj4gLQkuZ2V0X3NjbGsg PSAmY2lfZHBtX2dldF9zY2xrLAo+PiAtCS5nZXRfbWNsayA9ICZjaV9kcG1fZ2V0X21jbGssCj4+ IC0JLnByaW50X3Bvd2VyX3N0YXRlID0gJmNpX2RwbV9wcmludF9wb3dlcl9zdGF0ZSwKPj4gLQku ZGVidWdmc19wcmludF9jdXJyZW50X3BlcmZvcm1hbmNlX2xldmVsID0KPj4gJmNpX2RwbV9kZWJ1 Z2ZzX3ByaW50X2N1cnJlbnRfcGVyZm9ybWFuY2VfbGV2ZWwsCj4+IC0JLmZvcmNlX3BlcmZvcm1h bmNlX2xldmVsID0gJmNpX2RwbV9mb3JjZV9wZXJmb3JtYW5jZV9sZXZlbCwKPj4gLQkudmJsYW5r X3Rvb19zaG9ydCA9ICZjaV9kcG1fdmJsYW5rX3Rvb19zaG9ydCwKPj4gLQkuc2V0X3Bvd2VyZ2F0 aW5nX2J5X3NtdSA9ICZjaV9zZXRfcG93ZXJnYXRpbmdfYnlfc211LAo+PiAtCS5zZXRfZmFuX2Nv bnRyb2xfbW9kZSA9ICZjaV9kcG1fc2V0X2Zhbl9jb250cm9sX21vZGUsCj4+IC0JLmdldF9mYW5f Y29udHJvbF9tb2RlID0gJmNpX2RwbV9nZXRfZmFuX2NvbnRyb2xfbW9kZSwKPj4gLQkuc2V0X2Zh bl9zcGVlZF9wZXJjZW50ID0gJmNpX2RwbV9zZXRfZmFuX3NwZWVkX3BlcmNlbnQsCj4+IC0JLmdl dF9mYW5fc3BlZWRfcGVyY2VudCA9ICZjaV9kcG1fZ2V0X2Zhbl9zcGVlZF9wZXJjZW50LAo+PiAt CS5wcmludF9jbG9ja19sZXZlbHMgPSBjaV9kcG1fcHJpbnRfY2xvY2tfbGV2ZWxzLAo+PiAtCS5m b3JjZV9jbG9ja19sZXZlbCA9IGNpX2RwbV9mb3JjZV9jbG9ja19sZXZlbCwKPj4gLQkuZ2V0X3Nj bGtfb2QgPSBjaV9kcG1fZ2V0X3NjbGtfb2QsCj4+IC0JLnNldF9zY2xrX29kID0gY2lfZHBtX3Nl dF9zY2xrX29kLAo+PiAtCS5nZXRfbWNsa19vZCA9IGNpX2RwbV9nZXRfbWNsa19vZCwKPj4gLQku c2V0X21jbGtfb2QgPSBjaV9kcG1fc2V0X21jbGtfb2QsCj4+IC0JLmNoZWNrX3N0YXRlX2VxdWFs ID0gY2lfY2hlY2tfc3RhdGVfZXF1YWwsCj4+IC0JLmdldF92Y2VfY2xvY2tfc3RhdGUgPSBhbWRn cHVfZ2V0X3ZjZV9jbG9ja19zdGF0ZSwKPj4gLQkucmVhZF9zZW5zb3IgPSBjaV9kcG1fcmVhZF9z ZW5zb3IsCj4+IC19Owo+PiAtCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9pcnFfc3Jj X2Z1bmNzIGNpX2RwbV9pcnFfZnVuY3MgPSB7Cj4+IC0JLnNldCA9IGNpX2RwbV9zZXRfaW50ZXJy dXB0X3N0YXRlLAo+PiAtCS5wcm9jZXNzID0gY2lfZHBtX3Byb2Nlc3NfaW50ZXJydXB0LAo+PiAt fTsKPj4gLQo+PiAtc3RhdGljIHZvaWQgY2lfZHBtX3NldF9pcnFfZnVuY3Moc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0JYWRldi0+cG0uZHBtLnRoZXJtYWwuaXJxLm51bV90 eXBlcyA9Cj4+IEFNREdQVV9USEVSTUFMX0lSUV9MQVNUOwo+PiAtCWFkZXYtPnBtLmRwbS50aGVy bWFsLmlycS5mdW5jcyA9ICZjaV9kcG1faXJxX2Z1bmNzOwo+PiAtfQo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lfZHBtLmgKPj4gYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9jaV9kcG0uaAo+PiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXgg OTFiZTI5OTZhZTdjLi4wMDAwMDAwMDAwMDAKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvY2lfZHBtLmgKPj4gKysrIC9kZXYvbnVsbAo+PiBAQCAtMSwzNDkgKzAsMCBAQAo+PiAt LyoKPj4gLSAqIENvcHlyaWdodCAyMDEzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KPj4g LSAqCj4+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+PiAtICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gLSAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+PiAtICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiAtICoKPj4gLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4+ IC0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K Pj4gLSAqCj4+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwKPj4gRVhQUkVTUyBPUgo+PiAtICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+PiBNRVJDSEFOVEFCSUxJ VFksCj4+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8KPj4gRVZFTlQgU0hBTEwKPj4gLSAqIFRIRSBDT1BZUklHSFQgSE9MREVS KFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPj4gREFNQUdFUyBPUgo+ PiAtICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUgo+PiBPVEhFUldJU0UsCj4+IC0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCj4+IFRIRSBVU0UgT1IKPj4gLSAqIE9USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPj4gLSAqCj4+IC0gKi8KPj4gLSNpZm5kZWYgX19D SV9EUE1fSF9fCj4+IC0jZGVmaW5lIF9fQ0lfRFBNX0hfXwo+PiAtCj4+IC0jaW5jbHVkZSAiYW1k Z3B1X2F0b21iaW9zLmgiCj4+IC0jaW5jbHVkZSAicHBzbWMuaCIKPj4gLQo+PiAtI2RlZmluZSBT TVVfX05VTV9TQ0xLX0RQTV9TVEFURSAgOAo+PiAtI2RlZmluZSBTTVVfX05VTV9NQ0xLX0RQTV9M RVZFTFMgNgo+PiAtI2RlZmluZSBTTVVfX05VTV9MQ0xLX0RQTV9MRVZFTFMgOAo+PiAtI2RlZmlu ZSBTTVVfX05VTV9QQ0lFX0RQTV9MRVZFTFMgOAo+PiAtI2luY2x1ZGUgInNtdTdfZGlzY3JldGUu aCIKPj4gLQo+PiAtI2RlZmluZSBDSVNMQU5EU19NQVhfSEFSRFdBUkVfUE9XRVJMRVZFTFMgMgo+ PiAtCj4+IC0jZGVmaW5lIENJU0xBTkRTX1VOVVNFRF9HUElPX1BJTiAweDdGCj4+IC0KPj4gLXN0 cnVjdCBjaV9wbCB7Cj4+IC0JdTMyIG1jbGs7Cj4+IC0JdTMyIHNjbGs7Cj4+IC0JZW51bSBhbWRn cHVfcGNpZV9nZW4gcGNpZV9nZW47Cj4+IC0JdTE2IHBjaWVfbGFuZTsKPj4gLX07Cj4+IC0KPj4g LXN0cnVjdCBjaV9wcyB7Cj4+IC0JdTE2IHBlcmZvcm1hbmNlX2xldmVsX2NvdW50Owo+PiAtCWJv b2wgZGNfY29tcGF0aWJsZTsKPj4gLQl1MzIgc2Nsa190Owo+PiAtCXN0cnVjdCBjaV9wbAo+PiBw ZXJmb3JtYW5jZV9sZXZlbHNbQ0lTTEFORFNfTUFYX0hBUkRXQVJFX1BPV0VSTEVWRUxTXTsKPj4g LX07Cj4+IC0KPj4gLXN0cnVjdCBjaV9kcG1fbGV2ZWwgewo+PiAtCWJvb2wgZW5hYmxlZDsKPj4g LQl1MzIgdmFsdWU7Cj4+IC0JdTMyIHBhcmFtMTsKPj4gLX07Cj4+IC0KPj4gLSNkZWZpbmUgQ0lT TEFORF9NQVhfREVFUFNMRUVQX0RJVklERVJfSUQgNQo+PiAtI2RlZmluZSBNQVhfUkVHVUxBUl9E UE1fTlVNQkVSIDgKPj4gLSNkZWZpbmUgQ0lTTEFORF9NSU5JTVVNX0VOR0lORV9DTE9DSyA4MDAK Pj4gLQo+PiAtc3RydWN0IGNpX3NpbmdsZV9kcG1fdGFibGUgewo+PiAtCXUzMiBjb3VudDsKPj4g LQlzdHJ1Y3QgY2lfZHBtX2xldmVsIGRwbV9sZXZlbHNbTUFYX1JFR1VMQVJfRFBNX05VTUJFUl07 Cj4+IC19Owo+PiAtCj4+IC1zdHJ1Y3QgY2lfZHBtX3RhYmxlIHsKPj4gLQlzdHJ1Y3QgY2lfc2lu Z2xlX2RwbV90YWJsZSBzY2xrX3RhYmxlOwo+PiAtCXN0cnVjdCBjaV9zaW5nbGVfZHBtX3RhYmxl IG1jbGtfdGFibGU7Cj4+IC0Jc3RydWN0IGNpX3NpbmdsZV9kcG1fdGFibGUgcGNpZV9zcGVlZF90 YWJsZTsKPj4gLQlzdHJ1Y3QgY2lfc2luZ2xlX2RwbV90YWJsZSB2ZGRjX3RhYmxlOwo+PiAtCXN0 cnVjdCBjaV9zaW5nbGVfZHBtX3RhYmxlIHZkZGNpX3RhYmxlOwo+PiAtCXN0cnVjdCBjaV9zaW5n bGVfZHBtX3RhYmxlIG12ZGRfdGFibGU7Cj4+IC19Owo+PiAtCj4+IC1zdHJ1Y3QgY2lfbWNfcmVn X2VudHJ5IHsKPj4gLQl1MzIgbWNsa19tYXg7Cj4+IC0JdTMyIG1jX2RhdGFbU01VN19ESVNDUkVU RV9NQ19SRUdJU1RFUl9BUlJBWV9TSVpFXTsKPj4gLX07Cj4+IC0KPj4gLXN0cnVjdCBjaV9tY19y ZWdfdGFibGUgewo+PiAtCXU4IGxhc3Q7Cj4+IC0JdTggbnVtX2VudHJpZXM7Cj4+IC0JdTE2IHZh bGlkX2ZsYWc7Cj4+IC0Jc3RydWN0IGNpX21jX3JlZ19lbnRyeQo+PiBtY19yZWdfdGFibGVfZW50 cnlbTUFYX0FDX1RJTUlOR19FTlRSSUVTXTsKPj4gLQlTTVU3X0Rpc2NyZXRlX01DUmVnaXN0ZXJB ZGRyZXNzCj4+IG1jX3JlZ19hZGRyZXNzW1NNVTdfRElTQ1JFVEVfTUNfUkVHSVNURVJfQVJSQVlf U0laRV07Cj4+IC19Owo+PiAtCj4+IC1zdHJ1Y3QgY2lfdWx2X3Bhcm0KPj4gLXsKPj4gLQlib29s IHN1cHBvcnRlZDsKPj4gLQl1MzIgY2dfdWx2X3BhcmFtZXRlcjsKPj4gLQl1MzIgdm9sdF9jaGFu Z2VfZGVsYXk7Cj4+IC0Jc3RydWN0IGNpX3BsIHBsOwo+PiAtfTsKPj4gLQo+PiAtI2RlZmluZSBD SVNMQU5EU19NQVhfTEVBS0FHRV9DT1VOVCAgOAo+PiAtCj4+IC1zdHJ1Y3QgY2lfbGVha2FnZV92 b2x0YWdlIHsKPj4gLQl1MTYgY291bnQ7Cj4+IC0JdTE2IGxlYWthZ2VfaWRbQ0lTTEFORFNfTUFY X0xFQUtBR0VfQ09VTlRdOwo+PiAtCXUxNiBhY3R1YWxfdm9sdGFnZVtDSVNMQU5EU19NQVhfTEVB S0FHRV9DT1VOVF07Cj4+IC19Owo+PiAtCj4+IC1zdHJ1Y3QgY2lfZHBtX2xldmVsX2VuYWJsZV9t YXNrIHsKPj4gLQl1MzIgdXZkX2RwbV9lbmFibGVfbWFzazsKPj4gLQl1MzIgdmNlX2RwbV9lbmFi bGVfbWFzazsKPj4gLQl1MzIgYWNwX2RwbV9lbmFibGVfbWFzazsKPj4gLQl1MzIgc2FtdV9kcG1f ZW5hYmxlX21hc2s7Cj4+IC0JdTMyIHNjbGtfZHBtX2VuYWJsZV9tYXNrOwo+PiAtCXUzMiBtY2xr X2RwbV9lbmFibGVfbWFzazsKPj4gLQl1MzIgcGNpZV9kcG1fZW5hYmxlX21hc2s7Cj4+IC19Owo+ PiAtCj4+IC1zdHJ1Y3QgY2lfdmJpb3NfYm9vdF9zdGF0ZQo+PiAtewo+PiAtCXUxNiBtdmRkX2Jv b3R1cF92YWx1ZTsKPj4gLQl1MTYgdmRkY19ib290dXBfdmFsdWU7Cj4+IC0JdTE2IHZkZGNpX2Jv b3R1cF92YWx1ZTsKPj4gLQl1MzIgc2Nsa19ib290dXBfdmFsdWU7Cj4+IC0JdTMyIG1jbGtfYm9v dHVwX3ZhbHVlOwo+PiAtCXUxNiBwY2llX2dlbl9ib290dXBfdmFsdWU7Cj4+IC0JdTE2IHBjaWVf bGFuZV9ib290dXBfdmFsdWU7Cj4+IC19Owo+PiAtCj4+IC1zdHJ1Y3QgY2lfY2xvY2tfcmVnaXN0 ZXJzIHsKPj4gLQl1MzIgY2dfc3BsbF9mdW5jX2NudGw7Cj4+IC0JdTMyIGNnX3NwbGxfZnVuY19j bnRsXzI7Cj4+IC0JdTMyIGNnX3NwbGxfZnVuY19jbnRsXzM7Cj4+IC0JdTMyIGNnX3NwbGxfZnVu Y19jbnRsXzQ7Cj4+IC0JdTMyIGNnX3NwbGxfc3ByZWFkX3NwZWN0cnVtOwo+PiAtCXUzMiBjZ19z cGxsX3NwcmVhZF9zcGVjdHJ1bV8yOwo+PiAtCXUzMiBkbGxfY250bDsKPj4gLQl1MzIgbWNsa19w d3JtZ3RfY250bDsKPj4gLQl1MzIgbXBsbF9hZF9mdW5jX2NudGw7Cj4+IC0JdTMyIG1wbGxfZHFf ZnVuY19jbnRsOwo+PiAtCXUzMiBtcGxsX2Z1bmNfY250bDsKPj4gLQl1MzIgbXBsbF9mdW5jX2Nu dGxfMTsKPj4gLQl1MzIgbXBsbF9mdW5jX2NudGxfMjsKPj4gLQl1MzIgbXBsbF9zczE7Cj4+IC0J dTMyIG1wbGxfc3MyOwo+PiAtfTsKPj4gLQo+PiAtc3RydWN0IGNpX3RoZXJtYWxfdGVtcGVyYXR1 cmVfc2V0dGluZyB7Cj4+IC0JczMyIHRlbXBlcmF0dXJlX2xvdzsKPj4gLQlzMzIgdGVtcGVyYXR1 cmVfaGlnaDsKPj4gLQlzMzIgdGVtcGVyYXR1cmVfc2h1dGRvd247Cj4+IC19Owo+PiAtCj4+IC1z dHJ1Y3QgY2lfcGNpZV9wZXJmX3JhbmdlIHsKPj4gLQl1MTYgbWF4Owo+PiAtCXUxNiBtaW47Cj4+ IC19Owo+PiAtCj4+IC1lbnVtIGNpX3B0X2NvbmZpZ19yZWdfdHlwZSB7Cj4+IC0JQ0lTTEFORFNf Q09ORklHUkVHX01NUiA9IDAsCj4+IC0JQ0lTTEFORFNfQ09ORklHUkVHX1NNQ19JTkQsCj4+IC0J Q0lTTEFORFNfQ09ORklHUkVHX0RJRFRfSU5ELAo+PiAtCUNJU0xBTkRTX0NPTkZJR1JFR19DQUNI RSwKPj4gLQlDSVNMQU5EU19DT05GSUdSRUdfTUFYCj4+IC19Owo+PiAtCj4+IC0jZGVmaW5lIFBP V0VSQ09OVEFJTk1FTlRfRkVBVFVSRV9CQVBNICAgICAgICAgICAgMHgwMDAwMDAwMQo+PiAtI2Rl ZmluZSBQT1dFUkNPTlRBSU5NRU5UX0ZFQVRVUkVfVERDTGltaXQgICAgICAgIDB4MDAwMDAwMDIK Pj4gLSNkZWZpbmUgUE9XRVJDT05UQUlOTUVOVF9GRUFUVVJFX1BrZ1B3ckxpbWl0ICAgICAweDAw MDAwMDA0Cj4+IC0KPj4gLXN0cnVjdCBjaV9wdF9jb25maWdfcmVnIHsKPj4gLQl1MzIgb2Zmc2V0 Owo+PiAtCXUzMiBtYXNrOwo+PiAtCXUzMiBzaGlmdDsKPj4gLQl1MzIgdmFsdWU7Cj4+IC0JZW51 bSBjaV9wdF9jb25maWdfcmVnX3R5cGUgdHlwZTsKPj4gLX07Cj4+IC0KPj4gLXN0cnVjdCBjaV9w dF9kZWZhdWx0cyB7Cj4+IC0JdTggc3ZpX2xvYWRfbGluZV9lbjsKPj4gLQl1OCBzdmlfbG9hZF9s aW5lX3ZkZGM7Cj4+IC0JdTggdGRjX3ZkZGNfdGhyb3R0bGVfcmVsZWFzZV9saW1pdF9wZXJjOwo+ PiAtCXU4IHRkY19tYXd0Owo+PiAtCXU4IHRkY193YXRlcmZhbGxfY3RsOwo+PiAtCXU4IGR0ZV9h bWJpZW50X3RlbXBfYmFzZTsKPj4gLQl1MzIgZGlzcGxheV9jYWM7Cj4+IC0JdTMyIGJhcG1fdGVt cF9ncmFkaWVudDsKPj4gLQl1MTYgYmFwbXRpX3JbU01VN19EVEVfSVRFUkFUSU9OUyAqIFNNVTdf RFRFX1NPVVJDRVMgKgo+PiBTTVU3X0RURV9TSU5LU107Cj4+IC0JdTE2IGJhcG10aV9yY1tTTVU3 X0RURV9JVEVSQVRJT05TICogU01VN19EVEVfU09VUkNFUyAqCj4+IFNNVTdfRFRFX1NJTktTXTsK Pj4gLX07Cj4+IC0KPj4gLSNkZWZpbmUgRFBNVEFCTEVfT0RfVVBEQVRFX1NDTEsgICAgIDB4MDAw MDAwMDEKPj4gLSNkZWZpbmUgRFBNVEFCTEVfT0RfVVBEQVRFX01DTEsgICAgIDB4MDAwMDAwMDIK Pj4gLSNkZWZpbmUgRFBNVEFCTEVfVVBEQVRFX1NDTEsgICAgICAgIDB4MDAwMDAwMDQKPj4gLSNk ZWZpbmUgRFBNVEFCTEVfVVBEQVRFX01DTEsgICAgICAgIDB4MDAwMDAwMDgKPj4gLQo+PiAtc3Ry dWN0IGNpX3Bvd2VyX2luZm8gewo+PiAtCXN0cnVjdCBjaV9kcG1fdGFibGUgZHBtX3RhYmxlOwo+ PiAtCXN0cnVjdCBjaV9kcG1fdGFibGUgZ29sZGVuX2RwbV90YWJsZTsKPj4gLQl1MzIgdm9sdGFn ZV9jb250cm9sOwo+PiAtCXUzMiBtdmRkX2NvbnRyb2w7Cj4+IC0JdTMyIHZkZGNpX2NvbnRyb2w7 Cj4+IC0JdTMyIGFjdGl2ZV9hdXRvX3Rocm90dGxlX3NvdXJjZXM7Cj4+IC0Jc3RydWN0IGNpX2Ns b2NrX3JlZ2lzdGVycyBjbG9ja19yZWdpc3RlcnM7Cj4+IC0JdTE2IGFjcGlfdmRkYzsKPj4gLQl1 MTYgYWNwaV92ZGRjaTsKPj4gLQllbnVtIGFtZGdwdV9wY2llX2dlbiBmb3JjZV9wY2llX2dlbjsK Pj4gLQllbnVtIGFtZGdwdV9wY2llX2dlbiBhY3BpX3BjaWVfZ2VuOwo+PiAtCXN0cnVjdCBjaV9s ZWFrYWdlX3ZvbHRhZ2UgdmRkY19sZWFrYWdlOwo+PiAtCXN0cnVjdCBjaV9sZWFrYWdlX3ZvbHRh Z2UgdmRkY2lfbGVha2FnZTsKPj4gLQl1MTYgbWF4X3ZkZGNfaW5fcHBfdGFibGU7Cj4+IC0JdTE2 IG1pbl92ZGRjX2luX3BwX3RhYmxlOwo+PiAtCXUxNiBtYXhfdmRkY2lfaW5fcHBfdGFibGU7Cj4+ IC0JdTE2IG1pbl92ZGRjaV9pbl9wcF90YWJsZTsKPj4gLQl1MzIgbWNsa19zdHJvYmVfbW9kZV90 aHJlc2hvbGQ7Cj4+IC0JdTMyIG1jbGtfc3R1dHRlcl9tb2RlX3RocmVzaG9sZDsKPj4gLQl1MzIg bWNsa19lZGNfZW5hYmxlX3RocmVzaG9sZDsKPj4gLQl1MzIgbWNsa19lZGNfd3JfZW5hYmxlX3Ro cmVzaG9sZDsKPj4gLQlzdHJ1Y3QgY2lfdmJpb3NfYm9vdF9zdGF0ZSB2Ymlvc19ib290X3N0YXRl Owo+PiAtCS8qIHNtYyBvZmZzZXRzICovCj4+IC0JdTMyIHNyYW1fZW5kOwo+PiAtCXUzMiBkcG1f dGFibGVfc3RhcnQ7Cj4+IC0JdTMyIHNvZnRfcmVnc19zdGFydDsKPj4gLQl1MzIgbWNfcmVnX3Rh YmxlX3N0YXJ0Owo+PiAtCXUzMiBmYW5fdGFibGVfc3RhcnQ7Cj4+IC0JdTMyIGFyYl90YWJsZV9z dGFydDsKPj4gLQkvKiBzbWMgdGFibGVzICovCj4+IC0JU01VN19EaXNjcmV0ZV9EcG1UYWJsZSBz bWNfc3RhdGVfdGFibGU7Cj4+IC0JU01VN19EaXNjcmV0ZV9NQ1JlZ2lzdGVycyBzbWNfbWNfcmVn X3RhYmxlOwo+PiAtCVNNVTdfRGlzY3JldGVfUG1GdXNlcyBzbWNfcG93ZXJ0dW5lX3RhYmxlOwo+ PiAtCS8qIG90aGVyIHN0dWZmICovCj4+IC0Jc3RydWN0IGNpX21jX3JlZ190YWJsZSBtY19yZWdf dGFibGU7Cj4+IC0Jc3RydWN0IGF0b21fdm9sdGFnZV90YWJsZSB2ZGRjX3ZvbHRhZ2VfdGFibGU7 Cj4+IC0Jc3RydWN0IGF0b21fdm9sdGFnZV90YWJsZSB2ZGRjaV92b2x0YWdlX3RhYmxlOwo+PiAt CXN0cnVjdCBhdG9tX3ZvbHRhZ2VfdGFibGUgbXZkZF92b2x0YWdlX3RhYmxlOwo+PiAtCXN0cnVj dCBjaV91bHZfcGFybSB1bHY7Cj4+IC0JdTMyIHBvd2VyX2NvbnRhaW5tZW50X2ZlYXR1cmVzOwo+ PiAtCWNvbnN0IHN0cnVjdCBjaV9wdF9kZWZhdWx0cyAqcG93ZXJ0dW5lX2RlZmF1bHRzOwo+PiAt CXUzMiBkdGVfdGpfb2Zmc2V0Owo+PiAtCWJvb2wgdmRkY19waGFzZV9zaGVkX2NvbnRyb2w7Cj4+ IC0Jc3RydWN0IGNpX3RoZXJtYWxfdGVtcGVyYXR1cmVfc2V0dGluZyB0aGVybWFsX3RlbXBfc2V0 dGluZzsKPj4gLQlzdHJ1Y3QgY2lfZHBtX2xldmVsX2VuYWJsZV9tYXNrIGRwbV9sZXZlbF9lbmFi bGVfbWFzazsKPj4gLQl1MzIgbmVlZF91cGRhdGVfc211N19kcG1fdGFibGU7Cj4+IC0JdTMyIHNj bGtfZHBtX2tleV9kaXNhYmxlZDsKPj4gLQl1MzIgbWNsa19kcG1fa2V5X2Rpc2FibGVkOwo+PiAt CXUzMiBwY2llX2RwbV9rZXlfZGlzYWJsZWQ7Cj4+IC0JdTMyIHRoZXJtYWxfc2Nsa19kcG1fZW5h YmxlZDsKPj4gLQlzdHJ1Y3QgY2lfcGNpZV9wZXJmX3JhbmdlIHBjaWVfZ2VuX3BlcmZvcm1hbmNl Owo+PiAtCXN0cnVjdCBjaV9wY2llX3BlcmZfcmFuZ2UgcGNpZV9sYW5lX3BlcmZvcm1hbmNlOwo+ PiAtCXN0cnVjdCBjaV9wY2llX3BlcmZfcmFuZ2UgcGNpZV9nZW5fcG93ZXJzYXZpbmc7Cj4+IC0J c3RydWN0IGNpX3BjaWVfcGVyZl9yYW5nZSBwY2llX2xhbmVfcG93ZXJzYXZpbmc7Cj4+IC0JdTMy IGFjdGl2aXR5X3RhcmdldFtTTVU3X01BWF9MRVZFTFNfR1JBUEhJQ1NdOwo+PiAtCXUzMiBtY2xr X2FjdGl2aXR5X3RhcmdldDsKPj4gLQl1MzIgbG93X3NjbGtfaW50ZXJydXB0X3Q7Cj4+IC0JdTMy IGxhc3RfbWNsa19kcG1fZW5hYmxlX21hc2s7Cj4+IC0JdTMyIHN5c19wY2llX21hc2s7Cj4+IC0J LyogY2FwcyAqLwo+PiAtCWJvb2wgY2Fwc19wb3dlcl9jb250YWlubWVudDsKPj4gLQlib29sIGNh cHNfY2FjOwo+PiAtCWJvb2wgY2Fwc19zcV9yYW1waW5nOwo+PiAtCWJvb2wgY2Fwc19kYl9yYW1w aW5nOwo+PiAtCWJvb2wgY2Fwc190ZF9yYW1waW5nOwo+PiAtCWJvb2wgY2Fwc190Y3BfcmFtcGlu ZzsKPj4gLQlib29sIGNhcHNfZnBzOwo+PiAtCWJvb2wgY2Fwc19zY2xrX2RzOwo+PiAtCWJvb2wg Y2Fwc19zY2xrX3NzX3N1cHBvcnQ7Cj4+IC0JYm9vbCBjYXBzX21jbGtfc3Nfc3VwcG9ydDsKPj4g LQlib29sIGNhcHNfdXZkX2RwbTsKPj4gLQlib29sIGNhcHNfdmNlX2RwbTsKPj4gLQlib29sIGNh cHNfc2FtdV9kcG07Cj4+IC0JYm9vbCBjYXBzX2FjcF9kcG07Cj4+IC0JYm9vbCBjYXBzX2F1dG9t YXRpY19kY190cmFuc2l0aW9uOwo+PiAtCWJvb2wgY2Fwc19zY2xrX3Rocm90dGxlX2xvd19ub3Rp ZmljYXRpb247Cj4+IC0JYm9vbCBjYXBzX2R5bmFtaWNfYWNfdGltaW5nOwo+PiAtCWJvb2wgY2Fw c19vZF9mdXp6eV9mYW5fY29udHJvbF9zdXBwb3J0Owo+PiAtCS8qIGZsYWdzICovCj4+IC0JYm9v bCB0aGVybWFsX3Byb3RlY3Rpb247Cj4+IC0JYm9vbCBwY2llX3BlcmZvcm1hbmNlX3JlcXVlc3Q7 Cj4+IC0JYm9vbCBkeW5hbWljX3NzOwo+PiAtCWJvb2wgZGxsX2RlZmF1bHRfb247Cj4+IC0JYm9v bCBjYWNfZW5hYmxlZDsKPj4gLQlib29sIHV2ZF9lbmFibGVkOwo+PiAtCWJvb2wgYmF0dGVyeV9z dGF0ZTsKPj4gLQlib29sIHBzcHBfbm90aWZ5X3JlcXVpcmVkOwo+PiAtCWJvb2wgZW5hYmxlX2Jh cG1fZmVhdHVyZTsKPj4gLQlib29sIGVuYWJsZV90ZGNfbGltaXRfZmVhdHVyZTsKPj4gLQlib29s IGVuYWJsZV9wa2dfcHdyX3RyYWNraW5nX2ZlYXR1cmU7Cj4+IC0JYm9vbCB1c2VfcGNpZV9wZXJm b3JtYW5jZV9sZXZlbHM7Cj4+IC0JYm9vbCB1c2VfcGNpZV9wb3dlcnNhdmluZ19sZXZlbHM7Cj4+ IC0JYm9vbCB1dmRfcG93ZXJfZ2F0ZWQ7Cj4+IC0JLyogZHJpdmVyIHN0YXRlcyAqLwo+PiAtCXN0 cnVjdCBhbWRncHVfcHMgY3VycmVudF9ycHM7Cj4+IC0Jc3RydWN0IGNpX3BzIGN1cnJlbnRfcHM7 Cj4+IC0Jc3RydWN0IGFtZGdwdV9wcyByZXF1ZXN0ZWRfcnBzOwo+PiAtCXN0cnVjdCBjaV9wcyBy ZXF1ZXN0ZWRfcHM7Cj4+IC0JLyogZmFuIGNvbnRyb2wgKi8KPj4gLQlib29sIGZhbl9jdHJsX2lz X2luX2RlZmF1bHRfbW9kZTsKPj4gLQlib29sIGZhbl9pc19jb250cm9sbGVkX2J5X3NtYzsKPj4g LQl1MzIgdF9taW47Cj4+IC0JdTMyIGZhbl9jdHJsX2RlZmF1bHRfbW9kZTsKPj4gLX07Cj4+IC0K Pj4gLSNkZWZpbmUgQ0lTTEFORFNfVk9MVEFHRV9DT05UUk9MX05PTkUgICAgICAgICAgICAgICAg ICAgMHgwCj4+IC0jZGVmaW5lIENJU0xBTkRTX1ZPTFRBR0VfQ09OVFJPTF9CWV9HUElPICAgICAg ICAgICAgICAgIDB4MQo+PiAtI2RlZmluZSBDSVNMQU5EU19WT0xUQUdFX0NPTlRST0xfQllfU1ZJ RDIgICAgICAgICAgICAgICAweDIKPj4gLQo+PiAtI2RlZmluZSBDSVNMQU5EU19RODhfRk9STUFU X0NPTlZFUlNJT05fVU5JVCAgICAgICAgICAgICAyNTYKPj4gLQo+PiAtI2RlZmluZSBDSVNMQU5E U19WUkNfREZMVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGRkZDMDAwCj4+IC0j ZGVmaW5lIENJU0xBTkRTX1ZSQ19ERkxUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwNDAwCj4+IC0jZGVmaW5lIENJU0xBTkRTX1ZSQ19ERkxUMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4QzAwMDgwCj4+IC0jZGVmaW5lIENJU0xBTkRTX1ZSQ19ERkxUMyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMjAwCj4+IC0jZGVmaW5lIENJU0xBTkRTX1ZSQ19E RkxUNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAxNjgwCj4+IC0jZGVmaW5lIENJ U0xBTkRTX1ZSQ19ERkxUNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDMzCj4+ IC0jZGVmaW5lIENJU0xBTkRTX1ZSQ19ERkxUNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4QzAwMDMzCj4+IC0jZGVmaW5lIENJU0xBTkRTX1ZSQ19ERkxUNyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4M0ZGRkMwMDAKPj4gLQo+PiAtI2RlZmluZSBDSVNMQU5EU19DR1VMVlBB UkFNRVRFUl9ERkxUICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDM1Cj4+IC0jZGVmaW5lIENJ U0xBTkRfVEFSR0VUQUNUSVZJVFlfREZMVCAgICAgICAgICAgICAgICAgICAgIDMwCj4+IC0jZGVm aW5lIENJU0xBTkRfTUNMS19UQVJHRVRBQ1RJVklUWV9ERkxUICAgICAgICAgICAgICAgIDEwCj4+ IC0KPj4gLSNkZWZpbmUgUENJRV9QRVJGX1JFUV9SRU1PVkVfUkVHSVNUUlkgICAwCj4+IC0jZGVm aW5lIFBDSUVfUEVSRl9SRVFfRk9SQ0VfTE9XUE9XRVIgICAgMQo+PiAtI2RlZmluZSBQQ0lFX1BF UkZfUkVRX1BFQ0lfR0VOMSAgICAgICAgIDIKPj4gLSNkZWZpbmUgUENJRV9QRVJGX1JFUV9QRUNJ X0dFTjIgICAgICAgICAzCj4+IC0jZGVmaW5lIFBDSUVfUEVSRl9SRVFfUEVDSV9HRU4zICAgICAg ICAgNAo+PiAtCj4+IC0jZGVmaW5lIENJU0xBTkRTX1NTVFVfREZMVCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwCj4+IC0jZGVmaW5lIENJU0xBTkRTX1NTVF9ERkxUICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwQzgKPj4gLQo+PiAtLyogWFhYIGFyZSB0aGVzZSBvaz8g Ki8KPj4gLSNkZWZpbmUgQ0lTTEFORFNfVEVNUF9SQU5HRV9NSU4gKDkwICogMTAwMCkKPj4gLSNk ZWZpbmUgQ0lTTEFORFNfVEVNUF9SQU5HRV9NQVggKDEyMCAqIDEwMDApCj4+IC0KPj4gLWludCBh bWRncHVfY2lfY29weV9ieXRlc190b19zbWMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+ IC0JCQkgdTMyIHNtY19zdGFydF9hZGRyZXNzLAo+PiAtCQkJIGNvbnN0IHU4ICpzcmMsIHUzMiBi eXRlX2NvdW50LCB1MzIgbGltaXQpOwo+PiAtdm9pZCBhbWRncHVfY2lfc3RhcnRfc21jKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KTsKPj4gLXZvaWQgYW1kZ3B1X2NpX3Jlc2V0X3NtYyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Cj4+IC1pbnQgYW1kZ3B1X2NpX3Byb2dyYW1fanVtcF9v bl9zdGFydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Cj4+IC12b2lkIGFtZGdwdV9jaV9z dG9wX3NtY19jbG9jayhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Cj4+IC12b2lkIGFtZGdw dV9jaV9zdGFydF9zbWNfY2xvY2soc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+PiAtYm9v bCBhbWRncHVfY2lfaXNfc21jX3J1bm5pbmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+ PiAtUFBTTUNfUmVzdWx0IGFtZGdwdV9jaV9zZW5kX21zZ190b19zbWMoc3RydWN0IGFtZGdwdV9k ZXZpY2UKPj4gKmFkZXYsIFBQU01DX01zZyBtc2cpOwo+PiAtUFBTTUNfUmVzdWx0IGFtZGdwdV9j aV93YWl0X2Zvcl9zbWNfaW5hY3RpdmUoc3RydWN0IGFtZGdwdV9kZXZpY2UKPj4gKmFkZXYpOwo+ PiAtaW50IGFtZGdwdV9jaV9sb2FkX3NtY191Y29kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwgdTMyIGxpbWl0KTsKPj4gLWludCBhbWRncHVfY2lfcmVhZF9zbWNfc3JhbV9kd29yZChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJCSAgIHUzMiBzbWNfYWRkcmVzcywgdTMyICp2 YWx1ZSwgdTMyIGxpbWl0KTsKPj4gLWludCBhbWRncHVfY2lfd3JpdGVfc21jX3NyYW1fZHdvcmQo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkgICAgdTMyIHNtY19hZGRyZXNzLCB1 MzIgdmFsdWUsIHUzMiBsaW1pdCk7Cj4+IC0KPj4gLSNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lfc21jLmMKPj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9jaV9zbWMuYwo+PiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggYjhi YTUxZTA0NWI1Li4wMDAwMDAwMDAwMDAKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvY2lfc21jLmMKPj4gKysrIC9kZXYvbnVsbAo+PiBAQCAtMSwyNzkgKzAsMCBAQAo+PiAtLyoK Pj4gLSAqIENvcHlyaWdodCAyMDExIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KPj4gLSAq Cj4+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+PiAtICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gLSAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KPj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+PiAtICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+PiAtICoKPj4gLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4+IC0g KiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPj4g LSAqCj4+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwKPj4gRVhQUkVTUyBPUgo+PiAtICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+PiBNRVJDSEFOVEFCSUxJVFks Cj4+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8KPj4gRVZFTlQgU0hBTEwKPj4gLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMp IE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPj4gREFNQUdFUyBPUgo+PiAt ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUgo+PiBPVEhFUldJU0UsCj4+IC0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCj4+IFRIRSBVU0UgT1IKPj4gLSAqIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPj4gLSAqCj4+IC0gKiBBdXRob3JzOiBBbGV4IERldWNo ZXIKPj4gLSAqLwo+PiAtCj4+IC0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KPj4gLSNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+PiAtI2luY2x1ZGUgImFtZGdwdS5oIgo+PiAtI2luY2x1ZGUgImNp a2QuaCIKPj4gLSNpbmNsdWRlICJwcHNtYy5oIgo+PiAtI2luY2x1ZGUgImFtZGdwdV91Y29kZS5o Igo+PiAtI2luY2x1ZGUgImNpX2RwbS5oIgo+PiAtCj4+IC0jaW5jbHVkZSAic211L3NtdV83XzBf MV9kLmgiCj4+IC0jaW5jbHVkZSAic211L3NtdV83XzBfMV9zaF9tYXNrLmgiCj4+IC0KPj4gLXN0 YXRpYyBpbnQgY2lfc2V0X3NtY19zcmFtX2FkZHJlc3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCj4+IC0JCQkJICAgdTMyIHNtY19hZGRyZXNzLCB1MzIgbGltaXQpCj4+IC17Cj4+IC0JaWYg KHNtY19hZGRyZXNzICYgMykKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JaWYgKChzbWNfYWRk cmVzcyArIDMpID4gbGltaXQpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCj4+IC0JV1JFRzMy KG1tU01DX0lORF9JTkRFWF8wLCBzbWNfYWRkcmVzcyk7Cj4+IC0JV1JFRzMyX1AobW1TTUNfSU5E X0FDQ0VTU19DTlRMLCAwLAo+PiB+U01DX0lORF9BQ0NFU1NfQ05UTF9fQVVUT19JTkNSRU1FTlRf SU5EXzBfTUFTSyk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtaW50IGFtZGdw dV9jaV9jb3B5X2J5dGVzX3RvX3NtYyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4gLQkJ CSB1MzIgc21jX3N0YXJ0X2FkZHJlc3MsCj4+IC0JCQkgY29uc3QgdTggKnNyYywgdTMyIGJ5dGVf Y291bnQsIHUzMiBsaW1pdCkKPj4gLXsKPj4gLQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiAtCXUz MiBkYXRhLCBvcmlnaW5hbF9kYXRhOwo+PiAtCXUzMiBhZGRyOwo+PiAtCXUzMiBleHRyYV9zaGlm dDsKPj4gLQlpbnQgcmV0ID0gMDsKPj4gLQo+PiAtCWlmIChzbWNfc3RhcnRfYWRkcmVzcyAmIDMp Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCWlmICgoc21jX3N0YXJ0X2FkZHJlc3MgKyBieXRl X2NvdW50KSA+IGxpbWl0KQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCWFkZHIgPSBz bWNfc3RhcnRfYWRkcmVzczsKPj4gLQo+PiAtCXNwaW5fbG9ja19pcnFzYXZlKCZhZGV2LT5zbWNf aWR4X2xvY2ssIGZsYWdzKTsKPj4gLQl3aGlsZSAoYnl0ZV9jb3VudCA+PSA0KSB7Cj4+IC0JCS8q IFNNQyBhZGRyZXNzIHNwYWNlIGlzIEJFICovCj4+IC0JCWRhdGEgPSAoc3JjWzBdIDw8IDI0KSB8 IChzcmNbMV0gPDwgMTYpIHwgKHNyY1syXSA8PCA4KSB8IHNyY1szXTsKPj4gLQo+PiAtCQlyZXQg PSBjaV9zZXRfc21jX3NyYW1fYWRkcmVzcyhhZGV2LCBhZGRyLCBsaW1pdCk7Cj4+IC0JCWlmIChy ZXQpCj4+IC0JCQlnb3RvIGRvbmU7Cj4+IC0KPj4gLQkJV1JFRzMyKG1tU01DX0lORF9EQVRBXzAs IGRhdGEpOwo+PiAtCj4+IC0JCXNyYyArPSA0Owo+PiAtCQlieXRlX2NvdW50IC09IDQ7Cj4+IC0J CWFkZHIgKz0gNDsKPj4gLQl9Cj4+IC0KPj4gLQkvKiBSTVcgZm9yIHRoZSBmaW5hbCBieXRlcyAq Lwo+PiAtCWlmIChieXRlX2NvdW50ID4gMCkgewo+PiAtCQlkYXRhID0gMDsKPj4gLQo+PiAtCQly ZXQgPSBjaV9zZXRfc21jX3NyYW1fYWRkcmVzcyhhZGV2LCBhZGRyLCBsaW1pdCk7Cj4+IC0JCWlm IChyZXQpCj4+IC0JCQlnb3RvIGRvbmU7Cj4+IC0KPj4gLQkJb3JpZ2luYWxfZGF0YSA9IFJSRUcz MihtbVNNQ19JTkRfREFUQV8wKTsKPj4gLQo+PiAtCQlleHRyYV9zaGlmdCA9IDggKiAoNCAtIGJ5 dGVfY291bnQpOwo+PiAtCj4+IC0JCXdoaWxlIChieXRlX2NvdW50ID4gMCkgewo+PiAtCQkJZGF0 YSA9IChkYXRhIDw8IDgpICsgKnNyYysrOwo+PiAtCQkJYnl0ZV9jb3VudC0tOwo+PiAtCQl9Cj4+ IC0KPj4gLQkJZGF0YSA8PD0gZXh0cmFfc2hpZnQ7Cj4+IC0KPj4gLQkJZGF0YSB8PSAob3JpZ2lu YWxfZGF0YSAmIH4oKH4wVUwpIDw8IGV4dHJhX3NoaWZ0KSk7Cj4+IC0KPj4gLQkJcmV0ID0gY2lf c2V0X3NtY19zcmFtX2FkZHJlc3MoYWRldiwgYWRkciwgbGltaXQpOwo+PiAtCQlpZiAocmV0KQo+ PiAtCQkJZ290byBkb25lOwo+PiAtCj4+IC0JCVdSRUczMihtbVNNQ19JTkRfREFUQV8wLCBkYXRh KTsKPj4gLQl9Cj4+IC0KPj4gLWRvbmU6Cj4+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRl di0+c21jX2lkeF9sb2NrLCBmbGFncyk7Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAtfQo+PiAt Cj4+IC12b2lkIGFtZGdwdV9jaV9zdGFydF9zbWMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cj4+IC17Cj4+IC0JdTMyIHRtcCA9IFJSRUczMl9TTUMoaXhTTUNfU1lTQ09OX1JFU0VUX0NOVEwp Owo+PiAtCj4+IC0JdG1wICY9IH5TTUNfU1lTQ09OX1JFU0VUX0NOVExfX3JzdF9yZWdfTUFTSzsK Pj4gLQlXUkVHMzJfU01DKGl4U01DX1NZU0NPTl9SRVNFVF9DTlRMLCB0bXApOwo+PiAtfQo+PiAt Cj4+IC12b2lkIGFtZGdwdV9jaV9yZXNldF9zbWMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cj4+IC17Cj4+IC0JdTMyIHRtcCA9IFJSRUczMl9TTUMoaXhTTUNfU1lTQ09OX1JFU0VUX0NOVEwp Owo+PiAtCj4+IC0JdG1wIHw9IFNNQ19TWVNDT05fUkVTRVRfQ05UTF9fcnN0X3JlZ19NQVNLOwo+ PiAtCVdSRUczMl9TTUMoaXhTTUNfU1lTQ09OX1JFU0VUX0NOVEwsIHRtcCk7Cj4+IC19Cj4+IC0K Pj4gLWludCBhbWRncHVfY2lfcHJvZ3JhbV9qdW1wX29uX3N0YXJ0KHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQo+PiAtewo+PiAtCXN0YXRpYyB1OCBkYXRhW10gPSB7IDB4RTAsIDB4MDAsIDB4 ODAsIDB4NDAgfTsKPj4gLQo+PiAtCXJldHVybiBhbWRncHVfY2lfY29weV9ieXRlc190b19zbWMo YWRldiwgMHgwLCBkYXRhLCA0LAo+PiBzaXplb2YoZGF0YSkrMSk7Cj4+IC19Cj4+IC0KPj4gLXZv aWQgYW1kZ3B1X2NpX3N0b3Bfc21jX2Nsb2NrKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ PiAtewo+PiAtCXUzMiB0bXAgPSBSUkVHMzJfU01DKGl4U01DX1NZU0NPTl9DTE9DS19DTlRMXzAp Owo+PiAtCj4+IC0JdG1wIHw9IFNNQ19TWVNDT05fQ0xPQ0tfQ05UTF8wX19ja19kaXNhYmxlX01B U0s7Cj4+IC0KPj4gLQlXUkVHMzJfU01DKGl4U01DX1NZU0NPTl9DTE9DS19DTlRMXzAsIHRtcCk7 Cj4+IC19Cj4+IC0KPj4gLXZvaWQgYW1kZ3B1X2NpX3N0YXJ0X3NtY19jbG9jayhzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKPj4gLXsKPj4gLQl1MzIgdG1wID0gUlJFRzMyX1NNQyhpeFNNQ19T WVNDT05fQ0xPQ0tfQ05UTF8wKTsKPj4gLQo+PiAtCXRtcCAmPSB+U01DX1NZU0NPTl9DTE9DS19D TlRMXzBfX2NrX2Rpc2FibGVfTUFTSzsKPj4gLQo+PiAtCVdSRUczMl9TTUMoaXhTTUNfU1lTQ09O X0NMT0NLX0NOVExfMCwgdG1wKTsKPj4gLX0KPj4gLQo+PiAtYm9vbCBhbWRncHVfY2lfaXNfc21j X3J1bm5pbmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+IC17Cj4+IC0JdTMyIGNsayA9 IFJSRUczMl9TTUMoaXhTTUNfU1lTQ09OX0NMT0NLX0NOVExfMCk7Cj4+IC0JdTMyIHBjX2MgPSBS UkVHMzJfU01DKGl4U01DX1BDX0MpOwo+PiAtCj4+IC0JaWYgKCEoY2xrICYgU01DX1NZU0NPTl9D TE9DS19DTlRMXzBfX2NrX2Rpc2FibGVfTUFTSykgJiYKPj4gKDB4MjAxMDAgPD0gcGNfYykpCj4+ IC0JCXJldHVybiB0cnVlOwo+PiAtCj4+IC0JcmV0dXJuIGZhbHNlOwo+PiAtfQo+PiAtCj4+IC1Q UFNNQ19SZXN1bHQgYW1kZ3B1X2NpX3NlbmRfbXNnX3RvX3NtYyhzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZQo+PiAqYWRldiwgUFBTTUNfTXNnIG1zZykKPj4gLXsKPj4gLQl1MzIgdG1wOwo+PiAtCWludCBp Owo+PiAtCj4+IC0JaWYgKCFhbWRncHVfY2lfaXNfc21jX3J1bm5pbmcoYWRldikpCj4+IC0JCXJl dHVybiBQUFNNQ19SZXN1bHRfRmFpbGVkOwo+PiAtCj4+IC0JV1JFRzMyKG1tU01DX01FU1NBR0Vf MCwgbXNnKTsKPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkr Kykgewo+PiAtCQl0bXAgPSBSUkVHMzIobW1TTUNfUkVTUF8wKTsKPj4gLQkJaWYgKHRtcCAhPSAw KQo+PiAtCQkJYnJlYWs7Cj4+IC0JCXVkZWxheSgxKTsKPj4gLQl9Cj4+IC0JdG1wID0gUlJFRzMy KG1tU01DX1JFU1BfMCk7Cj4+IC0KPj4gLQlyZXR1cm4gKFBQU01DX1Jlc3VsdCl0bXA7Cj4+IC19 Cj4+IC0KPj4gLVBQU01DX1Jlc3VsdCBhbWRncHVfY2lfd2FpdF9mb3Jfc21jX2luYWN0aXZlKHN0 cnVjdCBhbWRncHVfZGV2aWNlCj4+ICphZGV2KQo+PiAtewo+PiAtCXUzMiB0bXA7Cj4+IC0JaW50 IGk7Cj4+IC0KPj4gLQlpZiAoIWFtZGdwdV9jaV9pc19zbWNfcnVubmluZyhhZGV2KSkKPj4gLQkJ cmV0dXJuIFBQU01DX1Jlc3VsdF9PSzsKPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51 c2VjX3RpbWVvdXQ7IGkrKykgewo+PiAtCQl0bXAgPSBSUkVHMzJfU01DKGl4U01DX1NZU0NPTl9D TE9DS19DTlRMXzApOwo+PiAtCQlpZiAoKHRtcCAmIFNNQ19TWVNDT05fQ0xPQ0tfQ05UTF8wX19j a2VuX01BU0spID09IDApCj4+IC0JCQlicmVhazsKPj4gLQkJdWRlbGF5KDEpOwo+PiAtCX0KPj4g LQo+PiAtCXJldHVybiBQUFNNQ19SZXN1bHRfT0s7Cj4+IC19Cj4+IC0KPj4gLWludCBhbWRncHVf Y2lfbG9hZF9zbWNfdWNvZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHUzMiBsaW1pdCkK Pj4gLXsKPj4gLQljb25zdCBzdHJ1Y3Qgc21jX2Zpcm13YXJlX2hlYWRlcl92MV8wICpoZHI7Cj4+ IC0JdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gLQl1MzIgdWNvZGVfc3RhcnRfYWRkcmVzczsKPj4g LQl1MzIgdWNvZGVfc2l6ZTsKPj4gLQljb25zdCB1OCAqc3JjOwo+PiAtCXUzMiBkYXRhOwo+PiAt Cj4+IC0JaWYgKCFhZGV2LT5wbS5mdykKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0KPj4gLQlo ZHIgPSAoY29uc3Qgc3RydWN0IHNtY19maXJtd2FyZV9oZWFkZXJfdjFfMCAqKWFkZXYtPnBtLmZ3 LQo+Pj4gZGF0YTsKPj4gLQlhbWRncHVfdWNvZGVfcHJpbnRfc21jX2hkcigmaGRyLT5oZWFkZXIp Owo+PiAtCj4+IC0JYWRldi0+cG0uZndfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KGhkci0+aGVhZGVy LnVjb2RlX3ZlcnNpb24pOwo+PiAtCXVjb2RlX3N0YXJ0X2FkZHJlc3MgPSBsZTMyX3RvX2NwdSho ZHItPnVjb2RlX3N0YXJ0X2FkZHIpOwo+PiAtCXVjb2RlX3NpemUgPSBsZTMyX3RvX2NwdShoZHIt PmhlYWRlci51Y29kZV9zaXplX2J5dGVzKTsKPj4gLQlzcmMgPSAoY29uc3QgdTggKikKPj4gLQkJ KGFkZXYtPnBtLmZ3LT5kYXRhICsgbGUzMl90b19jcHUoaGRyLQo+Pj4gaGVhZGVyLnVjb2RlX2Fy cmF5X29mZnNldF9ieXRlcykpOwo+PiAtCj4+IC0JaWYgKHVjb2RlX3NpemUgJiAzKQo+PiAtCQly ZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCXNwaW5fbG9ja19pcnFzYXZlKCZhZGV2LT5zbWNfaWR4 X2xvY2ssIGZsYWdzKTsKPj4gLQlXUkVHMzIobW1TTUNfSU5EX0lOREVYXzAsIHVjb2RlX3N0YXJ0 X2FkZHJlc3MpOwo+PiAtCVdSRUczMl9QKG1tU01DX0lORF9BQ0NFU1NfQ05UTCwKPj4gU01DX0lO RF9BQ0NFU1NfQ05UTF9fQVVUT19JTkNSRU1FTlRfSU5EXzBfTUFTSywKPj4gLQo+PiAJflNNQ19J TkRfQUNDRVNTX0NOVExfX0FVVE9fSU5DUkVNRU5UX0lORF8wX01BU0spOwo+PiAtCXdoaWxlICh1 Y29kZV9zaXplID49IDQpIHsKPj4gLQkJLyogU01DIGFkZHJlc3Mgc3BhY2UgaXMgQkUgKi8KPj4g LQkJZGF0YSA9IChzcmNbMF0gPDwgMjQpIHwgKHNyY1sxXSA8PCAxNikgfCAoc3JjWzJdIDw8IDgp IHwgc3JjWzNdOwo+PiAtCj4+IC0JCVdSRUczMihtbVNNQ19JTkRfREFUQV8wLCBkYXRhKTsKPj4g LQo+PiAtCQlzcmMgKz0gNDsKPj4gLQkJdWNvZGVfc2l6ZSAtPSA0Owo+PiAtCX0KPj4gLQlXUkVH MzJfUChtbVNNQ19JTkRfQUNDRVNTX0NOVEwsIDAsCj4+IH5TTUNfSU5EX0FDQ0VTU19DTlRMX19B VVRPX0lOQ1JFTUVOVF9JTkRfMF9NQVNLKTsKPj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZh ZGV2LT5zbWNfaWR4X2xvY2ssIGZsYWdzKTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAt Cj4+IC1pbnQgYW1kZ3B1X2NpX3JlYWRfc21jX3NyYW1fZHdvcmQoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4+IC0JCQkgICB1MzIgc21jX2FkZHJlc3MsIHUzMiAqdmFsdWUsIHUzMiBsaW1p dCkKPj4gLXsKPj4gLQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4g LQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRldi0+c21jX2lkeF9sb2NrLCBmbGFncyk7Cj4+IC0JcmV0 ID0gY2lfc2V0X3NtY19zcmFtX2FkZHJlc3MoYWRldiwgc21jX2FkZHJlc3MsIGxpbWl0KTsKPj4g LQlpZiAocmV0ID09IDApCj4+IC0JCSp2YWx1ZSA9IFJSRUczMihtbVNNQ19JTkRfREFUQV8wKTsK Pj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGV2LT5zbWNfaWR4X2xvY2ssIGZsYWdzKTsK Pj4gLQo+PiAtCXJldHVybiByZXQ7Cj4+IC19Cj4+IC0KPj4gLWludCBhbWRncHVfY2lfd3JpdGVf c21jX3NyYW1fZHdvcmQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+IC0JCQkgICAgdTMy IHNtY19hZGRyZXNzLCB1MzIgdmFsdWUsIHUzMiBsaW1pdCkKPj4gLXsKPj4gLQl1bnNpZ25lZCBs b25nIGZsYWdzOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRl di0+c21jX2lkeF9sb2NrLCBmbGFncyk7Cj4+IC0JcmV0ID0gY2lfc2V0X3NtY19zcmFtX2FkZHJl c3MoYWRldiwgc21jX2FkZHJlc3MsIGxpbWl0KTsKPj4gLQlpZiAocmV0ID09IDApCj4+IC0JCVdS RUczMihtbVNNQ19JTkRfREFUQV8wLCB2YWx1ZSk7Cj4+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmYWRldi0+c21jX2lkeF9sb2NrLCBmbGFncyk7Cj4+IC0KPj4gLQlyZXR1cm4gcmV0Owo+PiAt fQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrLmMKPj4gYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwo+PiBpbmRleCBiMWI3YWJlZDdkYWIuLjA3 YzFmMjM5ZTljMyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lr LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lrLmMKPj4gQEAgLTIwNzAs MTAgKzIwNzAsNyBAQCBpbnQgY2lrX3NldF9pcF9ibG9ja3Moc3RydWN0IGFtZGdwdV9kZXZpY2UK Pj4gKmFkZXYpCj4+ICAgCQlhbWRncHVfZGV2aWNlX2lwX2Jsb2NrX2FkZChhZGV2LCAmY2lrX2lo X2lwX2Jsb2NrKTsKPj4gICAJCWFtZGdwdV9kZXZpY2VfaXBfYmxvY2tfYWRkKGFkZXYsICZnZnhf djdfMl9pcF9ibG9jayk7Cj4+ICAgCQlhbWRncHVfZGV2aWNlX2lwX2Jsb2NrX2FkZChhZGV2LCAm Y2lrX3NkbWFfaXBfYmxvY2spOwo+PiAtCQlpZiAoYW1kZ3B1X2RwbSA9PSAtMSkKPj4gLQkJCWFt ZGdwdV9kZXZpY2VfaXBfYmxvY2tfYWRkKGFkZXYsCj4+ICZwcF9zbXVfaXBfYmxvY2spOwo+PiAt CQllbHNlCj4+IC0JCQlhbWRncHVfZGV2aWNlX2lwX2Jsb2NrX2FkZChhZGV2LAo+PiAmY2lfc211 X2lwX2Jsb2NrKTsKPj4gKwkJYW1kZ3B1X2RldmljZV9pcF9ibG9ja19hZGQoYWRldiwgJnBwX3Nt dV9pcF9ibG9jayk7Cj4+ICAgCQlpZiAoYWRldi0+ZW5hYmxlX3ZpcnR1YWxfZGlzcGxheSkKPj4g ICAJCQlhbWRncHVfZGV2aWNlX2lwX2Jsb2NrX2FkZChhZGV2LAo+PiAmZGNlX3ZpcnR1YWxfaXBf YmxvY2spOwo+PiAgICNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDKQo+PiBAQCAtMjA5MSwx MCArMjA4OCw3IEBAIGludCBjaWtfc2V0X2lwX2Jsb2NrcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZQo+ PiAqYWRldikKPj4gICAJCWFtZGdwdV9kZXZpY2VfaXBfYmxvY2tfYWRkKGFkZXYsICZjaWtfaWhf aXBfYmxvY2spOwo+PiAgIAkJYW1kZ3B1X2RldmljZV9pcF9ibG9ja19hZGQoYWRldiwgJmdmeF92 N18zX2lwX2Jsb2NrKTsKPj4gICAJCWFtZGdwdV9kZXZpY2VfaXBfYmxvY2tfYWRkKGFkZXYsICZj aWtfc2RtYV9pcF9ibG9jayk7Cj4+IC0JCWlmIChhbWRncHVfZHBtID09IC0xKQo+PiAtCQkJYW1k Z3B1X2RldmljZV9pcF9ibG9ja19hZGQoYWRldiwKPj4gJnBwX3NtdV9pcF9ibG9jayk7Cj4+IC0J CWVsc2UKPj4gLQkJCWFtZGdwdV9kZXZpY2VfaXBfYmxvY2tfYWRkKGFkZXYsCj4+ICZjaV9zbXVf aXBfYmxvY2spOwo+PiArCQlhbWRncHVfZGV2aWNlX2lwX2Jsb2NrX2FkZChhZGV2LCAmcHBfc211 X2lwX2Jsb2NrKTsKPj4gICAJCWlmIChhZGV2LT5lbmFibGVfdmlydHVhbF9kaXNwbGF5KQo+PiAg IAkJCWFtZGdwdV9kZXZpY2VfaXBfYmxvY2tfYWRkKGFkZXYsCj4+ICZkY2VfdmlydHVhbF9pcF9i bG9jayk7Cj4+ICAgI2lmIGRlZmluZWQoQ09ORklHX0RSTV9BTURfREMpCj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWtfZHBtLmgKPj4gYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9jaWtfZHBtLmgKPj4gaW5kZXggMmEwODY2MTBmNzRkLi4yZmNjNGI2MDE1 M2MgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Npa19kcG0uaAo+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWtfZHBtLmgKPj4gQEAgLTI0LDcg KzI0LDYgQEAKPj4gICAjaWZuZGVmIF9fQ0lLX0RQTV9IX18KPj4gICAjZGVmaW5lIF9fQ0lLX0RQ TV9IX18KPj4KPj4gLWV4dGVybiBjb25zdCBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrX3ZlcnNpb24g Y2lfc211X2lwX2Jsb2NrOwo+PiAgIGV4dGVybiBjb25zdCBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2Nr X3ZlcnNpb24ga3Zfc211X2lwX2Jsb2NrOwo+Pgo+PiAgICNlbmRpZgo+PiAtLQo+PiAyLjIwLjEK Pj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4g YW1kLWdmeCBtYWlsaW5nIGxpc3QKPj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4 IG1haWxpbmcgbGlzdAo+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlz dAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK