From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan De Oliveira Subject: Re: [PATCH i-g-t] Add a link training test Date: Tue, 08 Sep 2015 16:26:56 +0300 Message-ID: <1441718816.2719.6.camel@gmail.com> References: <1441715280-11623-1-git-send-email-ander.conselvan.de.oliveira@intel.com> <1441715280-11623-10-git-send-email-ander.conselvan.de.oliveira@intel.com> <20150908131146.GF29811@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f48.google.com (mail-pa0-f48.google.com [209.85.220.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A7376E917 for ; Tue, 8 Sep 2015 06:27:02 -0700 (PDT) Received: by padhy16 with SMTP id hy16so122266939pad.1 for ; Tue, 08 Sep 2015 06:27:02 -0700 (PDT) In-Reply-To: <20150908131146.GF29811@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= Cc: jani.nikula@intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAyMDE1LTA5LTA4IGF0IDE2OjExICswMzAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6 Cj4gT24gVHVlLCBTZXAgMDgsIDIwMTUgYXQgMDM6Mjg6MDBQTSArMDMwMCwgQW5kZXIgQ29uc2Vs dmFuIGRlIE9saXZlaXJhIHdyb3RlOgo+ID4gVGhpcyBhZGRzIGEgdGVzdCB0aGF0IGNvbXBpbGVz IHRoZSBsaW5rIHRyYWluaW5nIGNvZGUgZnJvbSBpOTE1IGludG8gYQo+ID4gc2VwYXJhdGUgZXhl Y3V0YWJsZSBhbmQgdXNlcyBpdCB0byB0cmFpbiBhIGZha2Ugc2luayBkZXZpY2UuIFRoZSB0ZXN0 Cj4gPiBhbHNvIHVzZXMgZGV2aWNlIGluZm9ybWF0aW9uIGZyb20gaTkxNSB0byBleGVyY2lzZSB0 aGUgZGlmZmVyZW50IGNvZGUKPiA+IHBhdGhzIGZvciBkaWZmZXJlbnQgaGFyZHdkYXJlIGdlbmVy YXRpb25zLgo+ID4gCj4gPiBJbiBvcmRlciB0byBnZXQgdGhlIGNvZGUgdG8gY29tcGlsZSBhIGxv dCBvZiBzdHViYmluZyB3YXMgbmVjZXNzYXJ5LiBJdAo+ID4gd2FzIGFsc28gZWFzaWVyIHRvIGNv cHkgYSBmZXcgZnVuY3Rpb25zIGZyb20gdGhlIGRybV9kcF9oZWxwZXJzIGluc3RlYWQKPiA+IG9m IGdldHRpbmcgdGhlIHdob2xlIHRoaW5nIHRvIGNvbXBpbGUgYXMgcGFydCBvZiB0aGUgdGVzdC4K PiAKPiBIbW0uIFNvIHRoZSBvbmx5IGRldmljZSBzcGVmaWMgaW5mb3JtYXRpb24geW91IHJlYWxs eSBuZWVkIGlzOgo+IC0gc3VwcG9ydGVkIGxpbmsgcmF0ZXMKPiAtIG1heCB2c3dpbmcvcHJlLWVt cGggc2V0dGluZ3MKPiAtIERESSB2cy4gbm90Cj4gCj4gQ29va2luZyB1cCBhIGZldyBjb25maWd1 cmF0aW9ucyB3aXRoIHZhcnlpbmcgb3B0aW9ucyB3b3VsZCBzZWVtIGZhaXJseQo+IGVhc3kgd2l0 aG91dCBoYXZpbmcgdG8gcHVsbCBpbiB0aGUgd2hvbGUgZGV2aWNlIGluZm8sIGFuZCB0aGUgaHcK PiBzcGVjaWZpYyBtYXggdnN3aW5nL3ByZS1lbXBoYXNpcyBzdHVmZi4KClllYWguIEkgYWN0dWFs bHkgaW1wbGVtZW50ZWQgaXQgZmlyc3Qgd2l0aCBhIGN1c3RvbSBwYWlyIG9mIGludGVsX2RwX3t2 b2x0YWdlLHByZV9lbXBoYXNpc31fbWF4LiBUaGUKZGV2aWNlIGluZm8gd2FzIGFuIGV4ZXJjaXNl IHRvIHNlZSBpZiBpdCB3YXMgZG9hYmxlIHRvIHB1bGwgdGhhdCBpbmZvIGZyb20gdGhlIGRyaXZl ciBpbnN0ZWFkIG9mCmR1cGxpY2F0aW5nIGl0IGxvY2FsbHksIGJ1dCBpdCBpcyBjZXJ0YWlubHkg bm90IHdvcnRoIGl0IGZvciB0aGlzIGNhc2UuCgpBbmRlcgoKPiAKPiA+IC0tLQo+ID4gIGxpbmst dHJhaW5pbmctdGVzdC9NYWtlZmlsZSAgICAgICAgICAgICB8ICA0MCArKysKPiA+ICBsaW5rLXRy YWluaW5nLXRlc3QvZHJtX2RwX2hlbHBlci5jICAgICAgfCAxMTUgKysrKysrKysrCj4gPiAgbGlu ay10cmFpbmluZy10ZXN0L2ludGVsX2Rydi5oICAgICAgICAgIHwgMTQ4ICsrKysrKysrKysrKwo+ ID4gIGxpbmstdHJhaW5pbmctdGVzdC9saW5rX3RyYWluaW5nX3Rlc3QuYyB8IDQxNCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDQgZmlsZXMgY2hhbmdlZCwgNzE3IGluc2Vy dGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGluay10cmFpbmluZy10ZXN0L01ha2Vm aWxlCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpbmstdHJhaW5pbmctdGVzdC9kcm1fZHBfaGVs cGVyLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGluay10cmFpbmluZy10ZXN0L2ludGVsX2Ry di5oCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpbmstdHJhaW5pbmctdGVzdC9saW5rX3RyYWlu aW5nX3Rlc3QuYwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvbGluay10cmFpbmluZy10ZXN0L01ha2Vm aWxlIGIvbGluay10cmFpbmluZy10ZXN0L01ha2VmaWxlCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gaW5kZXggMDAwMDAwMC4uMDdhOTkxNAo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIv bGluay10cmFpbmluZy10ZXN0L01ha2VmaWxlCj4gPiBAQCAtMCwwICsxLDQwIEBACj4gPiArS0VS TkVMX1NSQ19ESVI9L2hvbWUvYWNvbnNlbHYvbGludXgKPiA+ICsKPiA+ICsjIEZpbGVzIGNvcGll ZCBmcm9tIGk5MTUgc291cmNlIHRyZWUKPiA+ICtDT1BJRURfU09VUkNFUyA9IFwKPiA+ICsJaW50 ZWxfZHBfbGlua190cmFpbmluZy5jIFwKPiA+ICsJaW50ZWxfZGV2X2luZm8uYyBcCj4gPiArCWlu dGVsX2Rldl9pbmZvLmggXAo+ID4gKwlpOTE1X3JlZy5oCj4gPiArCj4gPiArSU5URUxfRFBfTElO S19UUkFJTklOR19DID0gJChLRVJORUxfU1JDX0RJUikvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHBfbGlua190cmFpbmluZy5jCj4gPiArCj4gPiArSU5DTFVERURJUiA9IFwKPiA+ICsJLUkk KEtFUk5FTF9TUkNfRElSKS9pbmNsdWRlL2RybSBcCj4gPiArCS1JJChLRVJORUxfU1JDX0RJUikv IFwKPiA+ICsJLUkuCj4gPiArCj4gPiArREVGSU5FUyA9IFwKPiA+ICsJLURfX0tFUk5FTF9fCj4g PiArCj4gPiArSEVBREVSX0ZJTEVTID0gXAo+ID4gKwlpbnRlbF9kcnYuaAo+ID4gKwo+ID4gK1NP VVJDRV9GSUxFUyA9IFwKPiA+ICsJaW50ZWxfZHBfbGlua190cmFpbmluZy5jIFwKPiA+ICsJbGlu a190cmFpbmluZ190ZXN0LmMgXAo+ID4gKwlkcm1fZHBfaGVscGVyLmMKPiA+ICsKPiA+ICthbGw6 IGxpbmtfdHJhaW5pbmdfdGVzdAo+ID4gKwo+ID4gKyNpbnRlbF9kcF9saW5rX3RyYWluaW5nLmM6 ICQoSU5URUxfRFBfTElOS19UUkFJTklOR19DKQo+ID4gKyMJY3AgJChJTlRFTF9EUF9MSU5LX1RS QUlOSU5HX0MpIC4KPiA+ICsKPiA+ICskKENPUElFRF9TT1VSQ0VTKTogJTogJChLRVJORUxfU1JD X0RJUikvZHJpdmVycy9ncHUvZHJtL2k5MTUvJQo+ID4gKwljcCAkPCAkQAo+ID4gKwo+ID4gK2xp bmtfdHJhaW5pbmdfdGVzdDogJChDT1BJRURfU09VUkNFUykgJChTT1VSQ0VfRklMRVMpICQoSEVB REVSX0ZJTEVTKQo+ID4gKwlnY2MgLWczIC1PMCAtc3RkPWdudTk5IC1vIGxpbmtfdHJhaW5pbmdf dGVzdCAkKFNPVVJDRV9GSUxFUykgJChJTkNMVURFRElSKSAkKERFRklORVMpCj4gPiArCj4gPiAr Y2xlYW46Cj4gPiArCXJtIGxpbmtfdHJhaW5pbmdfdGVzdCAkKENPUElFRF9TT1VSQ0VTKQo+ID4g ZGlmZiAtLWdpdCBhL2xpbmstdHJhaW5pbmctdGVzdC9kcm1fZHBfaGVscGVyLmMgYi9saW5rLXRy YWluaW5nLXRlc3QvZHJtX2RwX2hlbHBlci5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g aW5kZXggMDAwMDAwMC4uYThkYjdmOQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvbGluay10 cmFpbmluZy10ZXN0L2RybV9kcF9oZWxwZXIuYwo+ID4gQEAgLTAsMCArMSwxMTUgQEAKPiA+ICsv Kgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDA5IEtlaXRoIFBhY2thcmQKPiA+ICsgKgo+ID4gKyAq IFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRo aXMgc29mdHdhcmUgYW5kIGl0cwo+ID4gKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3Nl IGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0Cj4gPiArICogdGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90 aCB0aGF0IGNvcHlyaWdodAo+ID4gKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKPiA+ICsgKiB0aGF0IHRo ZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2lu ZyBvcgo+ID4gKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKPiA+ICsgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Np b24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKPiA+ICsg KiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Uu ICBJdCBpcyBwcm92aWRlZCAiYXMKPiA+ICsgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxp ZWQgd2FycmFudHkuCj4gPiArICoKPiA+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xB SU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKPiA+ICsgKiBJ TkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MsIElOIE5PCj4gPiArICogRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCj4gPiArICogQ09OU0VRVUVOVElB TCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP RiBVU0UsCj4gPiArICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgo+ID4gKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJ U0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UK PiA+ICsgKiBPRiBUSElTIFNPRlRXQVJFLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlICJp bnRlbF9kcnYuaCIKPiA+ICsKPiA+ICsvKiBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29weSBvZiBk cm1fZHBfaGVscGVyIGZ1bmN0aW9ucy4gKi8KPiA+ICsKPiA+ICtzdGF0aWMgdTggZHBfbGlua19z dGF0dXMoY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sIGludCByKQo+ ID4gK3sKPiA+ICsgICAgICAgIHJldHVybiBsaW5rX3N0YXR1c1tyIC0gRFBfTEFORTBfMV9TVEFU VVNdOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdTggZHBfZ2V0X2xhbmVfc3RhdHVzKGNvbnN0 IHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGxhbmUpCj4gPiArewo+ID4gKyAgICAgICAgaW50IGkgPSBEUF9M QU5FMF8xX1NUQVRVUyArIChsYW5lID4+IDEpOwo+ID4gKyAgICAgICAgaW50IHMgPSAobGFuZSAm IDEpICogNDsKPiA+ICsgICAgICAgIHU4IGwgPSBkcF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1cywg aSk7Cj4gPiArICAgICAgICByZXR1cm4gKGwgPj4gcykgJiAweGY7Cj4gPiArfQo+ID4gKwo+ID4g K2Jvb2wgZHJtX2RwX2NoYW5uZWxfZXFfb2soY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV0sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFuZV9jb3Vu dCkKPiA+ICt7Cj4gPiArICAgICAgICB1OCBsYW5lX2FsaWduOwo+ID4gKyAgICAgICAgdTggbGFu ZV9zdGF0dXM7Cj4gPiArICAgICAgICBpbnQgbGFuZTsKPiA+ICsKPiA+ICsgICAgICAgIGxhbmVf YWxpZ24gPSBkcF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1cywKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEUF9MQU5FX0FMSUdOX1NUQVRVU19VUERBVEVEKTsKPiA+ICsg ICAgICAgIGlmICgobGFuZV9hbGlnbiAmIERQX0lOVEVSTEFORV9BTElHTl9ET05FKSA9PSAwKQo+ ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IAo+ID4gKyAgICAgICAgZm9yIChsYW5l ID0gMDsgbGFuZSA8IGxhbmVfY291bnQ7IGxhbmUrKykgewo+ID4gKyAgICAgICAgICAgICAgICBs YW5lX3N0YXR1cyA9IGRwX2dldF9sYW5lX3N0YXR1cyhsaW5rX3N0YXR1cywgbGFuZSk7Cj4gPiAr ICAgICAgICAgICAgICAgIGlmICgobGFuZV9zdGF0dXMgJiBEUF9DSEFOTkVMX0VRX0JJVFMpICE9 IERQX0NIQU5ORUxfRVFfQklUUykKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7Cj4gPiArICAgICAgICB9Cj4gPiArICAgICAgICByZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4g PiArCj4gPiArYm9vbCBkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2soY29uc3QgdTggbGlua19zdGF0 dXNbRFBfTElOS19TVEFUVVNfU0laRV0sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGxhbmVfY291bnQpCj4gPiArewo+ID4gKyAgICAgICAgaW50IGxhbmU7Cj4gPiArICAg ICAgICB1OCBsYW5lX3N0YXR1czsKPiA+ICsKPiA+ICsgICAgICAgIGZvciAobGFuZSA9IDA7IGxh bmUgPCBsYW5lX2NvdW50OyBsYW5lKyspIHsKPiA+ICsgICAgICAgICAgICAgICAgbGFuZV9zdGF0 dXMgPSBkcF9nZXRfbGFuZV9zdGF0dXMobGlua19zdGF0dXMsIGxhbmUpOwo+ID4gKyAgICAgICAg ICAgICAgICBpZiAoKGxhbmVfc3RhdHVzICYgRFBfTEFORV9DUl9ET05FKSA9PSAwKQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+ICsgICAgICAgIH0KPiA+ICsg ICAgICAgIHJldHVybiB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICt1OCBkcm1fZHBfZ2V0X2FkanVz dF9yZXF1ZXN0X3ZvbHRhZ2UoY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0la RV0sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYW5lKQo+ ID4gK3sKPiA+ICsgICAgICAgIGludCBpID0gRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSArIChs YW5lID4+IDEpOwo+ID4gKyAgICAgICAgaW50IHMgPSAoKGxhbmUgJiAxKSA/Cj4gPiArICAgICAg ICAgICAgICAgICBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMV9TSElGVCA6Cj4gPiArICAg ICAgICAgICAgICAgICBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMF9TSElGVCk7Cj4gPiAr ICAgICAgICB1OCBsID0gZHBfbGlua19zdGF0dXMobGlua19zdGF0dXMsIGkpOwo+ID4gKwo+ID4g KyAgICAgICAgcmV0dXJuICgobCA+PiBzKSAmIDB4MykgPDwgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19TSElGVDsKPiA+ICt9Cj4gPiArCj4gPiArdTggZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9w cmVfZW1waGFzaXMoY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhbmUpCj4g PiArewo+ID4gKyAgICAgICAgaW50IGkgPSBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxh bmUgPj4gMSk7Cj4gPiArICAgICAgICBpbnQgcyA9ICgobGFuZSAmIDEpID8KPiA+ICsgICAgICAg ICAgICAgICAgIERQX0FESlVTVF9QUkVfRU1QSEFTSVNfTEFORTFfU0hJRlQgOgo+ID4gKyAgICAg ICAgICAgICAgICAgRFBfQURKVVNUX1BSRV9FTVBIQVNJU19MQU5FMF9TSElGVCk7Cj4gPiArICAg ICAgICB1OCBsID0gZHBfbGlua19zdGF0dXMobGlua19zdGF0dXMsIGkpOwo+ID4gKwo+ID4gKyAg ICAgICAgcmV0dXJuICgobCA+PiBzKSAmIDB4MykgPDwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NI SUZUOwo+ID4gK30KPiA+ICsKPiA+ICsvKiBGSVhNRTogKi8KPiA+ICtzdGF0aWMgdm9pZCB1ZGVs YXkoKSB7fQo+ID4gK3N0YXRpYyB2b2lkIG1kZWxheSgpIHt9Cj4gPiArCj4gPiArdm9pZCBkcm1f ZHBfbGlua190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShjb25zdCB1OCBkcGNkW0RQX1JFQ0VJ VkVSX0NBUF9TSVpFXSkgewo+ID4gKyAgICAgICAgaWYgKGRwY2RbRFBfVFJBSU5JTkdfQVVYX1JE X0lOVEVSVkFMXSA9PSAwKQo+ID4gKyAgICAgICAgICAgICAgICB1ZGVsYXkoMTAwKTsKPiA+ICsg ICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgICAgbWRlbGF5KGRwY2RbRFBfVFJBSU5JTkdf QVVYX1JEX0lOVEVSVkFMXSAqIDQpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGRybV9kcF9saW5r X3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoY29uc3QgdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0la RV0pIHsKPiA+ICsgICAgICAgIGlmIChkcGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0g PT0gMCkKPiA+ICsgICAgICAgICAgICAgICAgdWRlbGF5KDQwMCk7Cj4gPiArICAgICAgICBlbHNl Cj4gPiArICAgICAgICAgICAgICAgIG1kZWxheShkcGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRF UlZBTF0gKiA0KTsKPiA+ICt9Cj4gPiArCj4gPiBkaWZmIC0tZ2l0IGEvbGluay10cmFpbmluZy10 ZXN0L2ludGVsX2Rydi5oIGIvbGluay10cmFpbmluZy10ZXN0L2ludGVsX2Rydi5oCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uZjdhNmE2Ywo+ID4gLS0tIC9kZXYv bnVsbAo+ID4gKysrIGIvbGluay10cmFpbmluZy10ZXN0L2ludGVsX2Rydi5oCj4gPiBAQCAtMCww ICsxLDE0OCBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDA2IERhdmUgQWlybGll IDxhaXJsaWVkQGxpbnV4LmllPgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDE1IEludGVs IENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ID4gKyAqIFNv ZnR3YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4g KyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIEZBS0VfSU5U RUxfRFJWX0gKPiA+ICsjZGVmaW5lIEZBS0VfSU5URUxfRFJWX0gKPiA+ICsKPiA+ICsjaW5jbHVk ZSA8c3RkaW8uaD4KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gPiArI2luY2x1ZGUgPHN0ZGJv b2wuaD4KPiA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gPiArI2luY2x1ZGUgPHRvb2xzL2luY2x1 ZGUvbGludXgvY29tcGlsZXIuaD4KPiA+ICsKPiA+ICt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7 Cj4gPiArdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cj4gPiArdHlwZWRlZiB1bnNpZ25lZCBp bnQgdTMyOwo+ID4gK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaXplX3Q7Cj4gPiArdHlwZWRlZiBs b25nIHNzaXplX3Q7Cj4gPiArCj4gPiArc3RydWN0IGRybV9kZXZpY2Ugewo+ID4gKwl2b2lkICpk ZXZfcHJpdmF0ZTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKnRvX2k5MTUoY29uc3Qgc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICt7 Cj4gPiArCXJldHVybiBkZXYtPmRldl9wcml2YXRlOwo+ID4gK30KPiA+ICsKPiA+ICsjZGVmaW5l IEJVSUxEX0JVRygpCj4gPiArCj4gPiArI2luY2x1ZGUgImludGVsX2Rldl9pbmZvLmgiCj4gPiAr Cj4gPiArc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ID4gKwlzdHJ1Y3QgaW50ZWxfZGV2aWNl X2luZm8gaW5mbzsKPiA+ICsJYm9vbCBlZHBfbG93X3Zzd2luZzsKPiA+ICsJZW51bSBpbnRlbF9w Y2ggcGNoX3R5cGU7Cj4gPiArfTsKPiA+ICsKPiA+ICsKPiA+ICtzdHJ1Y3QgaTJjX2FkYXB0ZXIg ewo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IG11dGV4IHsKPiA+ICt9Owo+ID4gKwo+ID4gKyNp bmNsdWRlIDxkcm1fZHBfaGVscGVyLmg+Cj4gPiArCj4gPiArI2RlZmluZSBEUk1fRVJST1IgcHJp bnRmCj4gPiArI2RlZmluZSBEUk1fREVCVUdfS01TIHByaW50Zgo+ID4gKwo+ID4gK2VudW0gcG9y dCB7Cj4gPiArICAgICAgICBQT1JUX0EgPSAwLAo+ID4gKyAgICAgICAgUE9SVF9CLAo+ID4gKyAg ICAgICAgUE9SVF9DLAo+ID4gKyAgICAgICAgUE9SVF9ELAo+ID4gKyAgICAgICAgUE9SVF9FLAo+ ID4gKyAgICAgICAgSTkxNV9NQVhfUE9SVFMKPiA+ICt9Owo+ID4gKyNkZWZpbmUgcG9ydF9uYW1l KHApICgocCkgKyAnQScpCj4gPiArCj4gPiArc3RydWN0IGRybV9lbmNvZGVyIHsKPiA+ICsJdm9p ZCAqZGV2Owo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGludGVsX2VuY29kZXIgewo+ID4gKwlz dHJ1Y3QgZHJtX2VuY29kZXIgYmFzZTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBpbnRlbF9k cCB7Cj4gPiArCWludCBsaW5rX3JhdGU7Cj4gPiArCWludCBsYW5lX2NvdW50Owo+ID4gKwl1aW50 OF90IGxpbmtfYnc7Cj4gPiArCXVpbnQ4X3QgbnVtX3NpbmtfcmF0ZXM7Cj4gPiArCXVpbnQ4X3Qg dHJhaW5fc2V0WzRdOwo+ID4gKwlib29sIHRyYWluX3NldF92YWxpZDsKPiA+ICsJc3RydWN0IGRy bV9kcF9hdXggYXV4Owo+ID4gKwl1aW50OF90IGRwY2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVdOwo+ ID4gKwl1aW50MzJfdCBEUDsKPiA+ICsJYm9vbCB1c2VfdHBzMzsKPiA+ICsKPiA+ICsJLyogSG9s ZCB0ZXN0IHByaXZhdGUgZGF0YSAqLwo+ID4gKwl2b2lkICpwcml2Owo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCB7Cj4gPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVy IGJhc2U7Cj4gPiArCXN0cnVjdCBpbnRlbF9kcCBkcDsKPiA+ICsJZW51bSBwb3J0IHBvcnQ7Cj4g PiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIG9mZnNldG9mKHR5cGUsIG1lbWJlcikgIF9fYnVpbHRp bl9vZmZzZXRvZiAodHlwZSwgbWVtYmVyKQo+ID4gKyNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwg dHlwZSwgbWVtYmVyKSAoewkJCVwKPiA+ICsJY29uc3QgdHlwZW9mKCAoKHR5cGUgKikwKS0+bWVt YmVyICkgKl9fbXB0ciA9IChwdHIpOwlcCj4gPiArCSh0eXBlICopKCAoY2hhciAqKV9fbXB0ciAt IG9mZnNldG9mKHR5cGUsbWVtYmVyKSApO30pCj4gPiArCj4gPiArc3RhdGljIGlubGluZSBzdHJ1 Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICoKPiA+ICtkcF90b19kaWdfcG9ydChzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihpbnRlbF9kcCwg c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCwgZHApOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkCj4g PiAraW50ZWxfZHBfcHJvZ3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgZHBfdHJhaW5fcGF0KTsKPiA+ICt2b2lkCj4gPiAraW50ZWxfZHBfdXBkYXRlX3NpZ25h bF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gPiArdm9pZCBpbnRlbF9kcF9z ZXRfaWRsZV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ID4gK3ZvaWQg aW50ZWxfZHBfY29tcHV0ZV9yYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBwb3J0 X2Nsb2NrLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqbGlua19idywg dWludDhfdCAqcmF0ZV9zZWxlY3QpOwo+ID4gK2Jvb2wKPiA+ICtpbnRlbF9kcF9nZXRfbGlua19z dGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9M SU5LX1NUQVRVU19TSVpFXSk7Cj4gPiArdm9pZCBpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJh aW4oc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKPiA+ICt2b2lkCj4gPiAraW50ZWxfZHBf c3RhcnRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiA+ICt2b2lkCj4g PiAraW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ ID4gK2Jvb2wgaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjIoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2RldmljZSAqaW50ZWxf ZHBfdG9fZGV2KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiArewo+ID4gKwlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKTsKPiA+ICsKPiA+ICsJcmV0dXJuIGludGVsX2RpZ19wb3J0LT5iYXNlLmJhc2UuZGV2Owo+ ID4gK30KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaTkxNV9yZWcuaCIKPiA+ICsKPiA+ICsjZW5kaWYg LyogRkFLRV9JTlRFTF9EUlZfSCAqLwo+ID4gZGlmZiAtLWdpdCBhL2xpbmstdHJhaW5pbmctdGVz dC9saW5rX3RyYWluaW5nX3Rlc3QuYyBiL2xpbmstdHJhaW5pbmctdGVzdC9saW5rX3RyYWluaW5n X3Rlc3QuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmFhNzNi OWUKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpbmstdHJhaW5pbmctdGVzdC9saW5rX3Ry YWluaW5nX3Rlc3QuYwo+ID4gQEAgLTAsMCArMSw0MTQgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHly aWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQo+ID4gKyAqIFNvZnR3YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ICsg KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPiArICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKgo+ID4gKyAqIEF1 dGhvcnM6Cj4gPiArICogICAgQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxhbmRlci5jb25z ZWx2YW4uZGUub2xpdmVpcmFAaW50ZWwuY29tPgo+ID4gKyAqCj4gPiArICovCj4gPiArCj4gPiAr I2luY2x1ZGUgPHN0ZGxpYi5oPgo+ID4gKyNpbmNsdWRlIDxhc3NlcnQuaD4KPiA+ICsKPiA+ICsj aW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gPiArI2luY2x1ZGUgImk5MTVfcmVnLmgiCj4gPiArCj4g PiArc3RydWN0IHNpbmtfZGV2aWNlIHsKPiA+ICsJc3NpemVfdCAoKmRwY2Rfd3JpdGUpKHN0cnVj dCBzaW5rX2RldmljZSAqc2luaywgdW5zaWduZWQgaW50IG9mZnNldCwKPiA+ICsJCQkgICAgICB2 b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKPiA+ICsJYm9vbCAoKmdldF9saW5rX3N0YXR1cyko c3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLAo+ID4gKwkJCQl1aW50OF90IGxpbmtfc3RhdHVzW0RQ X0xJTktfU1RBVFVTX1NJWkVdKTsKPiA+ICsKPiA+ICsJc3RydWN0IHsKPiA+ICsJCWJvb2wgbGFu ZV9jb3VudF9hbmRfYndfc2V0Owo+ID4gKwkJYm9vbCB0cmFpbmluZ19wYXR0ZXJuXzFfc2V0Owo+ ID4gKwkJYm9vbCBzdGFydGVkX3dpdGhfbm9uX3plcm9fbGV2ZWxzOwo+ID4gKwkJYm9vbCBjcl9k b25lOwo+ID4gKwkJYm9vbCBjaGFubmVsX2VxX2RvbmU7Cj4gPiArCj4gPiArCQl1aW50OF90IGRw Y2RbMHgzMDAwXTsKPiA+ICsJfSBkYXRhOwo+ID4gK307Cj4gPiArCj4gPiArLyogRmFrZSBzaW5r IGRldmljZSBpbXBsZW1lbnRhdGlvbiAqLwo+ID4gKwo+ID4gK3N0YXRpYyB1aW50OF90Cj4gPiAr c2lua19kZXZpY2VfbGFuZV9jb3VudChzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4gPiArewo+ ID4gKwlyZXR1cm4gc2luay0+ZGF0YS5kcGNkW0RQX0xBTkVfQ09VTlRfU0VUXTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHVpbnQ4X3QKPiA+ICtzaW5rX2RldmljZV9nZXRfdHJhaW5pbmdfcGF0 dGVybihzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4gPiArewo+ID4gKwlyZXR1cm4gc2luay0+ ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUXSAmIERQX1RSQUlOSU5HX1BBVFRFUk5f TUFTSzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVpbnQ4X3QKPiA+ICtzaW5rX2RldmljZV9n ZXRfdm9sdGFnZV9zd2luZyhzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBsYW5lKQo+ID4g K3sKPiA+ICsJcmV0dXJuIHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBs YW5lXSAmCj4gPiArCQlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0s7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB1aW50OF90Cj4gPiArc2lua19kZXZpY2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZl bChzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBsYW5lKQo+ID4gK3sKPiA+ICsJcmV0dXJu IHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmCj4gPiArCQkg RFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0s7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk Cj4gPiArc2lua19kZXZpY2VfY2hlY2tfbGFuZV9jb3VudF9hbmRfYncoc3RydWN0IHNpbmtfZGV2 aWNlICpzaW5rKQo+ID4gK3sKPiA+ICsJaWYgKHNpbmstPmRhdGEubGFuZV9jb3VudF9hbmRfYndf c2V0KQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlhc3NlcnQoc2luay0+ZGF0YS5kcGNkW0RQ X1RSQUlOSU5HX1BBVFRFUk5fU0VUXSA9PSAwKTsKPiA+ICsKPiA+ICsJaWYgKHNpbmstPmRhdGEu ZHBjZFtEUF9MSU5LX0JXX1NFVF0gIT0gMCAmJgo+ID4gKwkgICAgc2luay0+ZGF0YS5kcGNkW0RQ X0xBTkVfQ09VTlRfU0VUXSAhPSAwKQo+ID4gKwkJc2luay0+ZGF0YS5sYW5lX2NvdW50X2FuZF9i d19zZXQgPSB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3NpbmtfZGV2 aWNlX2NoZWNrX3BhdHRlcm5fMV9zZXQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ID4gK3sK PiA+ICsJaWYgKCFzaW5rLT5kYXRhLmxhbmVfY291bnRfYW5kX2J3X3NldCB8fAo+ID4gKwkgICAg c2luay0+ZGF0YS50cmFpbmluZ19wYXR0ZXJuXzFfc2V0KQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ ID4gKwlhc3NlcnQoc2lua19kZXZpY2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4oc2luaykgPD0gRFBf VFJBSU5JTkdfUEFUVEVSTl8xKTsKPiA+ICsKPiA+ICsJaWYgKHNpbmtfZGV2aWNlX2dldF90cmFp bmluZ19wYXR0ZXJuKHNpbmspICE9IERQX1RSQUlOSU5HX1BBVFRFUk5fMSkKPiA+ICsJCXJldHVy bjsKPiA+ICsKPiA+ICsJYXNzZXJ0KHNpbmstPmRhdGEuZHBjZFtEUF9MSU5LX0JXX1NFVF0gPT0g RFBfTElOS19CV18xXzYyIHx8Cj4gPiArCSAgICAgICBzaW5rLT5kYXRhLmRwY2RbRFBfTElOS19C V19TRVRdID09IERQX0xJTktfQldfMl83KTsKPiA+ICsKPiA+ICsJYXNzZXJ0KHNpbmstPmRhdGEu ZHBjZFtEUF9MQU5FX0NPVU5UX1NFVF0gPT0gMSB8fAo+ID4gKwkgICAgICAgc2luay0+ZGF0YS5k cGNkW0RQX0xBTkVfQ09VTlRfU0VUXSA9PSAyIHx8Cj4gPiArCSAgICAgICBzaW5rLT5kYXRhLmRw Y2RbRFBfTEFORV9DT1VOVF9TRVRdID09IDQpOwo+ID4gKwo+ID4gKwlmb3IgKGludCBsYW5lID0g MDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykgewo+ID4gKwkJ aWYgKHNpbmtfZGV2aWNlX2dldF92b2x0YWdlX3N3aW5nKHNpbmssIGxhbmUpICE9IERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCAKPiA+IHx8Cj4gPiArCQkgICAgc2lua19kZXZpY2VfZ2V0 X3ByZV9lbXBoYXNpc19sZXZlbChzaW5rLCBsYW5lKSAhPSAKPiA+IERQX1RSQUlOX1BSRV9FTVBI X0xFVkVMXzApCj4gPiArCQkJc2luay0+ZGF0YS5zdGFydGVkX3dpdGhfbm9uX3plcm9fbGV2ZWxz ID0gdHJ1ZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlzaW5rLT5kYXRhLnRyYWluaW5nX3BhdHRlcm5f MV9zZXQgPSB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3NpbmtfZGV2 aWNlX2NoZWNrX3BhdHRlcm5fMl9zZXQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ID4gK3sK PiA+ICsJaWYgKCFzaW5rLT5kYXRhLmNyX2RvbmUpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAr CWFzc2VydChzaW5rX2RldmljZV9nZXRfdHJhaW5pbmdfcGF0dGVybihzaW5rKSA9PSBEUF9UUkFJ TklOR19QQVRURVJOXzIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3Npbmtf ZGV2aWNlX2NoZWNrX3BhdHRlcm5fZGlzYWJsZShzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4g PiArewo+ID4gKwlpZiAoIXNpbmstPmRhdGEuY3JfZG9uZSB8fCAhIHNpbmstPmRhdGEuY2hhbm5l bF9lcV9kb25lKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlhc3NlcnQoc2lua19kZXZpY2Vf Z2V0X3RyYWluaW5nX3BhdHRlcm4oc2luaykgPT0gRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxF KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXplX3QKPiA+ICtzaW5rX2RldmljZV9kcGNk X3dyaXRlKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgdW5zaWduZWQgaW50IG9mZnNldCwKPiA+ ICsJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQo+ID4gK3sKPiA+ICsJbWVtY3B5 KHNpbmstPmRhdGEuZHBjZCArIG9mZnNldCwgYnVmZmVyLCBzaXplKTsKPiA+ICsKPiA+ICsJc2lu a19kZXZpY2VfY2hlY2tfbGFuZV9jb3VudF9hbmRfYncoc2luayk7Cj4gPiArCj4gPiArCWlmICgh c2luay0+ZGF0YS5jcl9kb25lKQo+ID4gKwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl8xX3Nl dChzaW5rKTsKPiA+ICsJZWxzZSBpZiAoIXNpbmstPmRhdGEuY2hhbm5lbF9lcV9kb25lKQo+ID4g KwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl8yX3NldChzaW5rKTsKPiA+ICsJZWxzZQo+ID4g KwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl9kaXNhYmxlKHNpbmspOwo+ID4gKwo+ID4gKwly ZXR1cm4gc2l6ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wKPiA+ICtzaW5rX2Rldmlj ZV9tYXhfdm9sdGFnZV9yZWFjaGVkKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50IGxhbmUp Cj4gPiArewo+ID4gKwlyZXR1cm4gKHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9T RVQgKyBsYW5lXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEKSA9PQo+ID4gKwkJRFBfVFJB SU5fTUFYX1NXSU5HX1JFQUNIRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sCj4gPiAr c2lua19kZXZpY2VfbWF4X3ByZV9lbXBoYXNpc19yZWFjaGVkKHN0cnVjdCBzaW5rX2RldmljZSAq c2luaywgaW50IGxhbmUpCj4gPiArewo+ID4gKwlyZXR1cm4gKHNpbmstPmRhdGEuZHBjZFtEUF9U UkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmIAo+ID4gRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJ U19SRUFDSEVEKSA9PQo+ID4gKwkJRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbAo+ID4gK3NpbmtfZGV2aWNlX3JlcXVlc3RfaGln aGVyX3ZvbHRhZ2Vfc3dpbmcoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ID4gK3sKPiA+ICsJ Ym9vbCBtYXhfcmVhY2hlZDsKPiA+ICsKPiA+ICsJZm9yIChpbnQgbGFuZSA9IDA7IGxhbmUgPCBz aW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsKPiA+ICsJCWlmIChzaW5rX2Rl dmljZV9tYXhfdm9sdGFnZV9yZWFjaGVkKHNpbmssIGxhbmUpKSB7Cj4gPiArCQkJbWF4X3JlYWNo ZWQgPSB0cnVlOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlm IChtYXhfcmVhY2hlZCkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJZm9yIChpbnQg bGFuZSA9IDA7IGxhbmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsK PiA+ICsJCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxhbmUg Pj4gMSldIHw9Cj4gPiArCQkJKHNpbmtfZGV2aWNlX2dldF92b2x0YWdlX3N3aW5nKHNpbmssIGxh bmUpICsgMSkgPDwKPiA+ICsJCQkJKERQX0FESlVTVF9WT0xUQUdFX1NXSU5HX0xBTkUxX1NISUZU ICogKGxhbmUgJiAxKSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBib29sCj4gPiArc2lua19kZXZpY2VfcmVxdWVzdF9oaWdoZXJfcHJl X2VtcGhhc2lzKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKPiA+ICt7Cj4gPiArCWJvb2wgbWF4 X3JlYWNoZWQ7Cj4gPiArCj4gPiArCWZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZp Y2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7Cj4gPiArCQlpZiAoc2lua19kZXZpY2VfbWF4 X3ByZV9lbXBoYXNpc19yZWFjaGVkKHNpbmssIGxhbmUpKSB7Cj4gPiArCQkJbWF4X3JlYWNoZWQg PSB0cnVlOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICht YXhfcmVhY2hlZCkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJZm9yIChpbnQgbGFu ZSA9IDA7IGxhbmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsKPiA+ ICsJCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxhbmUgPj4g MSldIHw9Cj4gPiArCQkJKHNpbmtfZGV2aWNlX2dldF9wcmVfZW1waGFzaXNfbGV2ZWwoc2luaywg bGFuZSkgKyAxKSA8PAo+ID4gKwkJCQkoRFBfQURKVVNUX1BSRV9FTVBIQVNJU19MQU5FMF9TSElG VCArCj4gPiArCQkJCSAoRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTFfU0hJRlQgKiAobGFu ZSAmIDEpKSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkCj4gPiArc2lua19kZXZpY2VfbWFya19jcl9kb25lKHN0cnVjdCBzaW5r X2RldmljZSAqc2luaykKPiA+ICt7Cj4gPiArCWZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgc2lu a19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKQo+ID4gKwkJc2luay0+ZGF0YS5kcGNk W0RQX0xBTkUwXzFfU1RBVFVTICsgKGxhbmUgPj4gMSldIHw9Cj4gPiArCQkJRFBfTEFORV9DUl9E T05FIDw8ICg0ICogKGxhbmUgJiAxKSk7Cj4gPiArCj4gPiArCXNpbmstPmRhdGEuY3JfZG9uZSA9 IHRydWU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArc2lua19kZXZpY2VfbWFy a19jaGFubmVsX2VxX2RvbmUoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ID4gK3sKPiA+ICsJ Zm9yIChpbnQgbGFuZSA9IDA7IGxhbmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBs YW5lKyspIHsKPiA+ICsJCXVpbnQ4X3QgbWFzayA9IChEUF9MQU5FX0NIQU5ORUxfRVFfRE9ORSB8 IERQX0xBTkVfU1lNQk9MX0xPQ0tFRCk7Cj4gPiArCQlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORTBf MV9TVEFUVVMgKyAobGFuZSA+PiAxKV0gfD0KPiA+ICsJCQltYXNrIDw8ICg0ICogKGxhbmUgJiAx KSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJc2luay0+ZGF0YS5kcGNkW0RQX0xBTkVfQUxJR05fU1RB VFVTX1VQREFURURdIHw9IERQX0lOVEVSTEFORV9BTElHTl9ET05FOwo+ID4gKwo+ID4gKwlzaW5r LT5kYXRhLmNoYW5uZWxfZXFfZG9uZSA9IHRydWU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBi b29sCj4gPiArc2lua19kZXZpY2VfZ2V0X2xpbmtfc3RhdHVzKHN0cnVjdCBzaW5rX2RldmljZSAq c2luaywKPiA+ICsJCQkgICAgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpF XSkKPiA+ICt7Cj4gPiArCWlmICghc2luay0+ZGF0YS5jcl9kb25lKSB7Cj4gPiArCQlpZiAoIXNp bmtfZGV2aWNlX3JlcXVlc3RfaGlnaGVyX3ZvbHRhZ2Vfc3dpbmcoc2luaykpCj4gPiArCQkJc2lu a19kZXZpY2VfbWFya19jcl9kb25lKHNpbmspOwo+ID4gKwl9IGVsc2UgaWYgKCFzaW5rLT5kYXRh LmNoYW5uZWxfZXFfZG9uZSkgewo+ID4gKwkJaWYgKCFzaW5rX2RldmljZV9yZXF1ZXN0X2hpZ2hl cl9wcmVfZW1waGFzaXMoc2luaykpCj4gPiArCQkJc2lua19kZXZpY2VfbWFya19jaGFubmVsX2Vx X2RvbmUoc2luayk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbWVtY3B5KGxpbmtfc3RhdHVzLCBzaW5r LT5kYXRhLmRwY2QgKyBEUF9MQU5FMF8xX1NUQVRVUywKPiA+ICsJICAgICAgIERQX0xJTktfU1RB VFVTX1NJWkUpOwo+ID4gKwo+ID4gKwlyZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHN0cnVjdCBzaW5rX2RldmljZSBzaW1wbGVfc2luayA9IHsKPiA+ICsJLmdldF9saW5rX3N0 YXR1cyA9IHNpbmtfZGV2aWNlX2dldF9saW5rX3N0YXR1cywKPiA+ICsJLmRwY2Rfd3JpdGUgPSBz aW5rX2RldmljZV9kcGNkX3dyaXRlLAo+ID4gK307Cj4gPiArCj4gPiArLyogR2x1ZSBjb2RlICov Cj4gPiArCj4gPiArdm9pZCBpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJhaW4oc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQo+ID4gK3sKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBpbnRlbF9k cF9zZXRfaWRsZV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiArewo+ ID4gK30KPiA+ICsKPiA+ICtib29sIGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlyZXR1cm4gZmFsc2U7Cj4gPiArfQo+ID4g Kwo+ID4gK2Jvb2wKPiA+ICtpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBzaW5rX2RldmljZSAqc2luayA9IGludGVsX2RwLT5wcml2Owo+ID4g KwlyZXR1cm4gc2luay0+Z2V0X2xpbmtfc3RhdHVzKHNpbmssIGxpbmtfc3RhdHVzKTsKPiA+ICt9 Cj4gPiArCj4gPiArdm9pZAo+ID4gK2ludGVsX2RwX3VwZGF0ZV9zaWduYWxfbGV2ZWxzKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiArewo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGludGVs X2RwX2NvbXB1dGVfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcG9ydF9jbG9j aywKPiA+ICsJCQkgICB1aW50OF90ICpsaW5rX2J3LCB1aW50OF90ICpyYXRlX3NlbGVjdCkKPiA+ ICt7Cj4gPiArCSpsaW5rX2J3ID0gaW50ZWxfZHAtPmxpbmtfYnc7Cj4gPiArCSpyYXRlX3NlbGVj dCA9IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQKPiA+ICtpbnRlbF9kcF9wcm9ncmFtX2xpbmtf dHJhaW5pbmdfcGF0dGVybihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4gKwkJCQkgICAg ICAgdWludDhfdCBkcF90cmFpbl9wYXQpCj4gPiArewo+ID4gK30KPiA+ICsKPiA+ICtzc2l6ZV90 IGRybV9kcF9kcGNkX3dyaXRlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHVuc2lnbmVkIGludCBv ZmZzZXQsCj4gPiArCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQo+ID4gK3sKPiA+ICsJ c3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9Cj4gPiArCQljb250YWluZXJfb2YoYXV4LCBzdHJ1 Y3QgaW50ZWxfZHAsIGF1eCk7Cj4gPiArCXN0cnVjdCBzaW5rX2RldmljZSAqc2luayA9IGludGVs X2RwLT5wcml2Owo+ID4gKwo+ID4gKwlyZXR1cm4gc2luay0+ZHBjZF93cml0ZShzaW5rLCBvZmZz ZXQsIGJ1ZmZlciwgc2l6ZSk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIC0tLSAqLwo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZHAgKgo+ID4gK2ludGVsX2RwX2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBpbnQgbGFuZXMsIHVpbnQ4X3QgbGlua19idykKPiA+ICt7Cj4gPiArCXN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0Owo+ID4gKwo+ID4gKwlkaWdfcG9ydCA9 IGNhbGxvYygxLCBzaXplb2YgKmRpZ19wb3J0KTsKPiA+ICsJZGlnX3BvcnQtPmJhc2UuYmFzZS5k ZXYgPSBkZXY7Cj4gPiArCWRpZ19wb3J0LT5kcC5sYW5lX2NvdW50ID0gbGFuZXM7Cj4gPiArCWRp Z19wb3J0LT5kcC5saW5rX2J3ID0gbGlua19idzsKPiA+ICsKPiA+ICsJcmV0dXJuICZkaWdfcG9y dC0+ZHA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiAraW50ZWxfZHBfZGVzdHJv eShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ID4gK3sKPiA+ICsJc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gPiArCWZy ZWUoZGlnX3BvcnQpOwo+ID4gK30KPiA+ICsKPiA+ICsvKiBGSVhNRTogWWlrZXMhICovCj4gPiAr I2RlZmluZSBCSVRTX1BFUl9MT05HIDY0Cj4gPiArI2luY2x1ZGUgPGluY2x1ZGUvbGludXgvbW9k X2RldmljZXRhYmxlLmg+Cj4gPiArI2luY2x1ZGUgPGk5MTVfcGNpaWRzLmg+Cj4gPiArI2luY2x1 ZGUgImludGVsX2Rldl9pbmZvLmMiCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lf ZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewo+ID4gKwlJTlRFTF9QQ0lfSURTLAo+ID4gKwl7MCwg MCwgMH0KPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fZGV2aWNlICoKPiA+ICtkcm1fZGV2 aWNlX2Zvcl9wY2lfaWQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2Owo+ID4gKwo+ID4gKwlkZXYgPSBjYWxsb2MoMSwgc2l6ZW9mICpkZXYpOwo+ID4g KwlkZXZfcHJpdiA9IGNhbGxvYygxLCBzaXplb2YgKmRldl9wcml2KTsKPiA+ICsJYXNzZXJ0KGRl diAmJiBkZXZfcHJpdik7Cj4gPiArCj4gPiArCWRldi0+ZGV2X3ByaXZhdGUgPSBkZXZfcHJpdjsK PiA+ICsKPiA+ICsJbWVtY3B5KCZkZXZfcHJpdi0+aW5mbywgKHZvaWQgKikgaWQtPmRyaXZlcl9k YXRhLCBzaXplb2YgZGV2X3ByaXYtPmluZm8pOwo+ID4gKwlkZXZfcHJpdi0+aW5mby5kZXZpY2Vf aWQgPSBpZC0+ZGV2aWNlOwo+ID4gKwo+ID4gKwkvKiBUT0RPOiBzZXQgZGV2X3ByaXYtPnBjaF90 eXBlIHdpdGggYW4gYXBwcm9wcmlhdGUgdmFsdWUgKi8KPiA+ICsJZGV2X3ByaXYtPnBjaF90eXBl ID0gUENIX05PTkU7Cj4gPiArCj4gPiArCXJldHVybiBkZXY7Cj4gPiArfQo+ID4gKwo+ID4gK3Zv aWQKPiA+ICtkcm1fZGV2aWNlX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICt7 Cj4gPiArCWZyZWUoZGV2LT5kZXZfcHJpdmF0ZSk7Cj4gPiArCWZyZWUoZGV2KTsKPiA+ICt9Cj4g PiArCj4gPiAraW50Cj4gPiArbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ID4gK3sKPiA+ ICsJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOwo+ID4gKwo+ID4gKwlmb3IgKGlkID0g JnBjaWlkbGlzdFswXTsKPiA+ICsJICAgICBpZC0+dmVuZG9yICE9IDAgJiYgaWQtPmRldmljZSAh PSAwOwo+ID4gKwkgICAgIGlkKyspIHsKPiA+ICsJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBk cm1fZGV2aWNlX2Zvcl9wY2lfaWQoaWQpOwo+ID4gKwkJc3RydWN0IGludGVsX2RwICppbnRlbF9k cCA9Cj4gPiArCQkJaW50ZWxfZHBfY3JlYXRlKGRldiwgNCwgRFBfTElOS19CV18yXzcpOwo+ID4g Kwo+ID4gKwkJaWYgKElTX0dFTjIoZGV2KSB8fCBJU19QSU5FVklFVyhkZXYpKQo+ID4gKwkJCWNv bnRpbnVlOwo+ID4gKwo+ID4gKwkJcHJpbnRmKCJUZXN0aW5nIHdpdGggZGV2aWNlIGlkICUwNHgs IGdlbiAlZFxuIiwKPiA+ICsJCSAgICAgICBJTlRFTF9ERVZJRChkZXYpLCBJTlRFTF9JTkZPKGRl diktPmdlbik7Cj4gPiArCj4gPiArCQlpbnRlbF9kcC0+cHJpdiA9ICZzaW1wbGVfc2luazsKPiA+ ICsJCW1lbXNldCgmc2ltcGxlX3NpbmsuZGF0YSwgMCwgc2l6ZW9mIHNpbXBsZV9zaW5rLmRhdGEp Owo+ID4gKwkJc2ltcGxlX3NpbmsuZGF0YS5kcGNkW0RQX01BWF9MSU5LX1JBVEVdID0gMHgwQTsK PiA+ICsJCXNpbXBsZV9zaW5rLmRhdGEuZHBjZFtEUF9NQVhfTEFORV9DT1VOVF0gPSAweDA0Owo+ ID4gKwo+ID4gKwkJaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gPiArCQlp bnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oaW50ZWxfZHApOwo+ID4gKwo+ID4gKwkJZm9yIChpbnQg bGFuZSA9IDA7IGxhbmUgPCBpbnRlbF9kcC0+bGFuZV9jb3VudDsgbGFuZSsrKQo+ID4gKwkJCXBy aW50ZigibGFuZSAlaTogdnN3aW5nOiAlZCwgcHJlLWVtcGg6ICVkXG4iLCBsYW5lLAo+ID4gKwkJ CSAgICAgICBzaW5rX2RldmljZV9nZXRfdm9sdGFnZV9zd2luZygmc2ltcGxlX3NpbmssIGxhbmUp LAo+ID4gKwkJCSAgICAgICBzaW5rX2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKCZzaW1w bGVfc2luaywgbGFuZSkpOwo+ID4gKwkJcHJpbnRmKCJcbiIpOwo+ID4gKwo+ID4gKwkJaW50ZWxf ZHBfZGVzdHJveShpbnRlbF9kcCk7Cj4gPiArCQlkcm1fZGV2aWNlX2Rlc3Ryb3koZGV2KTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiAtLSAKPiA+IDIuNC4zCj4gCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==