From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: Re: [PATCH 5/7] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Fri, 11 May 2018 14:54:02 -0600 Message-ID: <5d5b543b-ba05-eb52-b99e-a868a9eeb01a@linaro.org> References: <20180209031055.21926-1-sameer.goel@linaro.org> <20180209031055.21926-6-sameer.goel@linaro.org> <266a9e65-fbe0-94b6-b52c-3170079d64f3@caviumnetworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fHF3K-00061K-A5 for xen-devel@lists.xenproject.org; Fri, 11 May 2018 20:54:10 +0000 Received: by mail-pf0-x242.google.com with SMTP id a22-v6so3242519pfn.6 for ; Fri, 11 May 2018 13:54:06 -0700 (PDT) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall , Manish Jaggi , xen-devel@lists.xenproject.org Cc: nd@arm.com, sstabellini@kernel.org, shankerd@codeaurora.org List-Id: xen-devel@lists.xenproject.org CgpPbiA1LzkvMjAxOCAyOjU4IEFNLCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4KPgo+IE9uIDA5LzA1 LzIwMTggMDk6MzAsIE1hbmlzaCBKYWdnaSB3cm90ZToKPj4KPj4KPj4gT24gMDQvMTkvMjAxOCAw NDoyNCBQTSwgTWFuaXNoIEphZ2dpIHdyb3RlOgo+Pj4gU29ycnkgZm9yIHRvcCBwb3N0aW5nLAo+ Pj4KPj4+IGlzIHNvbWVvbmUgd29ya2luZyBvbiB0aGUgY29tbWVudHMgb24gdGhpcyBwYXRjaD8K Pj4+Cj4+PiAtTWFuaXNoCj4+Pgo+PiBJZiBubyBvbmUgaXMgd29ya2luZyB0aGlzIGNvZGUgYW55 bW9yZSwgSSB3b3VsZCBsaWtlIHRvIHBpY2sgaXQgdXAgYW5kIGNvbnRpbnVlIG1haW50YWluaW5n IGl0Lgo+PiBJcyBpdCBmaW5lIHdpdGggYWxsPwo+Cj4gTGFzdCB0aW1lIEkgc3Bva2Ugd2l0aCBT YW1lZXIgaGUgd2FzIHBsYW5uaW5nIHRvIHJlc2VuZCBhIHNlcmllcy4gQW5kIEkgd291bGQgcHJl ZmVyIGlmIGhlIGNvbnRpbnVlIHRvIGxlYWQgdGhlIHNlcmllcyB1bmxlc3Mgc3RhdGVkIG90aGVy d2lzZS4KSSBhbSB3b3JraW5nIG9uIGFkZHJlc3NpbmcgdGhlIGNvbW1lbnRzIGluIHRoaXMgcGF0 Y2ggc2V0LiBQbGVhc2UgZXhwZWN0IHNvbWV0aGluZyBieSBlbmQgb2YgbmV4dCB3ZWVrLgo+Cj4g Q2hlZXJzLAo+Cj4+Cj4+IC1SZWdhcmRzCj4+IE1hbmlzaAo+Pj4KPj4+IE9uIDAzLzEwLzIwMTgg MTE6MjMgUE0sIE1hbmlzaCBKYWdnaSB3cm90ZToKPj4+PiBIaSBTYW1lZXIsCj4+Pj4KPj4+Pgo+ Pj4+IE9uIDAyLzA5LzIwMTggMDg6NDAgQU0sIFNhbWVlciBHb2VsIHdyb3RlOgo+Pj4+PiBUaGlz IGRyaXZlciBmb2xsb3dzIGFuIGFwcHJvYWNoIHNpbWlsYXIgdG8gc21tdSBkcml2ZXIuIFRoZSBp bnRlbnQgaGVyZQo+Pj4+PiBpcyB0byByZXVzZSBhcyBtdWNoIExpbnV4IGNvZGUgYXMgcG9zc2li bGUuCj4+Pj4+IC0gR2x1ZSBjb2RlIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYnJpZGdlIHRoZSBB UEkgY2FsbHMuCj4+Pj4+IC0gQ2FsbGVkIExpbnV4IGZ1bmN0aW9ucyBmcm9tIHRoZSBYZW4gSU9N TVUgZnVuY3Rpb24gY2FsbHMuCj4+Pj4+IC0gWGVuIG1vZGlmaWNhdGlvbnMgYXJlIHByZWNlZGVk IGJ5IC8qWGVuOiBjb21tZW50ICovCj4+Pj4+IC0geGVuL2xpbnV4X2NvbXBhdDogQWRkIGEgTGlu dXggY29tcGF0IGhlYWRlcgo+Pj4+PiDCoMKgIEZvciBwb3J0aW5nIGZpbGVzIGRpcmVjdGx5IGZy b20gTGludXggaXQgaXMgdXNlZnVsIHRvIGhhdmUgYSBmdW5jdGlvbiBtYXBwaW5nCj4+Pj4+IMKg wqAgZGVmaW5pdGlvbnMgZnJvbSBMaW51eCB0byBYZW4uIFRoaXMgZmlsZSBhZGRzIGNvbW1vbiBB UEkgZnVuY3Rpb25zIGFuZAo+Pj4+PiDCoMKgIG90aGVyIGRlZmluZXMgdGhhdCBhcmUgbmVlZGVk IGZvciBwb3J0aW5nIGFybSBTTU1VIGRyaXZlcnMuCj4+Pj4+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6 IFNhbWVlciBHb2VsIDxzYW1lZXIuZ29lbEBsaW5hcm8ub3JnPgo+Pj4+PiAtLS0KPj4+Pj4gwqAg eGVuL2FyY2gvYXJtL3AybS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgMSArCj4+Pj4+IMKgIHhlbi9kcml2ZXJzL0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArCj4+Pj4+IMKgIHhlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL2FybS9LY29uZmlnwqDCoCB8wqDCoCA4ICsKPj4+Pj4gwqAgeGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvYXJtL01ha2VmaWxlwqAgfMKgwqAgMSArCj4+Pj4+IMKgIHhlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL2FybS9zbW11LXYzLmMgfCA4OTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLQo+Pj4+PiDCoCB4ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmjCoMKgwqDCoMKgwqDC oCB8wqAgODQgKysrKwo+Pj4+PiDCoCA2IGZpbGVzIGNoYW5nZWQsIDk1OSBpbnNlcnRpb25zKCsp LCAyOSBkZWxldGlvbnMoLSkKPj4+Pj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCj4+Pj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4v aW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9h cmNoL2FybS9wMm0uYyBiL3hlbi9hcmNoL2FybS9wMm0uYwo+Pj4+PiBpbmRleCA2NWU4YjljNmVh Li5mZWY3NjA1ZmQ2IDEwMDY0NAo+Pj4+PiAtLS0gYS94ZW4vYXJjaC9hcm0vcDJtLmMKPj4+Pj4g KysrIGIveGVuL2FyY2gvYXJtL3AybS5jCj4+Pj4+IEBAIC0xNDYwLDYgKzE0NjAsNyBAQCBlcnI6 Cj4+Pj4+IMKgIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF92aXJ0X3BhZ2luZ19vbmUodm9pZCAq ZGF0YSkKPj4+Pj4gwqAgewo+Pj4+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgdmFsID0gKHVu c2lnbmVkIGxvbmcpZGF0YTsKPj4+Pj4gK8KgwqDCoCAvKiBTTU1VdjMgUzIgY2ZnIHZ0Y3IgcmV1 c2VzIHRoZSBmb2xsb3dpbmcgdmFsdWUgKi8KPj4+Pj4gwqDCoMKgwqDCoCBXUklURV9TWVNSRUcz Mih2YWwsIFZUQ1JfRUwyKTsKPj4+Pj4gwqDCoMKgwqDCoCBpc2IoKTsKPj4+Pj4gwqAgfQo+Pj4+ PiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvS2NvbmZpZyBiL3hlbi9kcml2ZXJzL0tjb25maWcK Pj4+Pj4gaW5kZXggYmMzYTU0ZjBlYS4uNjEyNjU1Mzg2ZCAxMDA2NDQKPj4+Pj4gLS0tIGEveGVu L2RyaXZlcnMvS2NvbmZpZwo+Pj4+PiArKysgYi94ZW4vZHJpdmVycy9LY29uZmlnCj4+Pj4+IEBA IC0xMiw0ICsxMiw2IEBAIHNvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKPj4+Pj4gwqAgwqAg c291cmNlICJkcml2ZXJzL3ZpZGVvL0tjb25maWciCj4+Pj4+IMKgICtzb3VyY2UgImRyaXZlcnMv cGFzc3Rocm91Z2gvYXJtL0tjb25maWciCj4+Pj4+ICsKPj4+Pj4gwqAgZW5kbWVudQo+Pj4+PiBk aWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcgYi94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZwo+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ Pj4+PiBpbmRleCAwMDAwMDAwMDAwLi5jZGE4OTlmNjA4Cj4+Pj4+IC0tLSAvZGV2L251bGwKPj4+ Pj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcKPj4+Pj4gQEAgLTAs MCArMSw4IEBACj4+Pj4+ICsKPj4+Pj4gK2NvbmZpZyBBUk1fU01NVV92Mwo+Pj4+PiArwqDCoMKg IGJvb2wgIkFSTSBTTU1VdjMgU3VwcG9ydCIKPj4+Pj4gK8KgwqDCoCBkZXBlbmRzIG9uIEFSTV82 NAo+Pj4+PiArwqDCoMKgIGhlbHAKPj4+Pj4gK8KgwqDCoMKgIFN1cHBvcnQgZm9yIGltcGxlbWVu dGF0aW9ucyBvZiB0aGUgQVJNIFN5c3RlbSBNTVUgYXJjaGl0ZWN0dXJlCj4+Pj4+ICvCoMKgwqDC oCB2ZXJzaW9uIDMuCj4+Pj4+ICsKPj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL2FybS9NYWtlZmlsZSBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmls ZQo+Pj4+PiBpbmRleCBmNGNkMjZlMTVkLi5lMTQ3MzJiNTVjIDEwMDY0NAo+Pj4+PiAtLS0gYS94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKPj4+Pj4gKysrIGIveGVuL2RyaXZl cnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCj4+Pj4+IEBAIC0xLDIgKzEsMyBAQAo+Pj4+PiDC oCBvYmoteSArPSBpb21tdS5vCj4+Pj4+IMKgIG9iai15ICs9IHNtbXUubwo+Pj4+PiArb2JqLSQo Q09ORklHX0FSTV9TTU1VX3YzKSArPSBzbW11LXYzLm8KPj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9k cml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC9hcm0vc21tdS12My5jCj4+Pj4+IGluZGV4IGU2N2JhNmM0MGYuLmY0MzQ4NWZlNmUgMTAwNjQ0 Cj4+Pj4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMKPj4+Pj4g KysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwo+Pj4+PiBAQCAtMTgs MjggKzE4LDQxNCBAQAo+Pj4+PiDCoMKgICogQXV0aG9yOiBXaWxsIERlYWNvbiA8d2lsbC5kZWFj b25AYXJtLmNvbT4KPj4+Pj4gwqDCoCAqCj4+Pj4+IMKgwqAgKiBUaGlzIGRyaXZlciBpcyBwb3dl cmVkIGJ5IGJhZCBjb2ZmZWUgYW5kIGJvbWJheSBtaXguCj4+Pj4+ICsgKgo+Pj4+PiArICoKPj4+ Pj4gKyAqIEJhc2VkIG9uIExpbnV4IGRyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMuYwo+Pj4+PiAr ICogPT4gY29tbWl0IDdhYTg2MTlhNjZhZWE1MmIxNDVlMDRjYmFiNGY4ZDZhNGU1ZjNmM2IKPj4+ Pj4gKyAqCj4+Pj4+ICsgKiBYZW4gbW9kaWZpY2F0aW9uczoKPj4+Pj4gKyAqIFNhbWVlciBHb2Vs IDxzYW1lZXIuZ29lbEBsaW5hcm8ub3JnPgo+Pj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE3LCBU aGUgTGludXggRm91bmRhdGlvbiwgQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4+Pj4gKyAqCj4+Pj4+ ICsgKi8KPj4+Pj4gKwo+Pj4+PiArI2luY2x1ZGUgPHhlbi9hY3BpLmg+Cj4+Pj4+ICsjaW5jbHVk ZSA8eGVuL2NvbmZpZy5oPgo+Pj4+PiArI2luY2x1ZGUgPHhlbi9kZWxheS5oPgo+Pj4+PiArI2lu Y2x1ZGUgPHhlbi9lcnJuby5oPgo+Pj4+PiArI2luY2x1ZGUgPHhlbi9lcnIuaD4KPj4+Pj4gKyNp bmNsdWRlIDx4ZW4vaXJxLmg+Cj4+Pj4+ICsjaW5jbHVkZSA8eGVuL2xpYi5oPgo+Pj4+PiArI2lu Y2x1ZGUgPHhlbi9saW51eF9jb21wYXQuaD4KPj4+Pj4gKyNpbmNsdWRlIDx4ZW4vbGlzdC5oPgo+ Pj4+PiArI2luY2x1ZGUgPHhlbi9tbS5oPgo+Pj4+PiArI2luY2x1ZGUgPHhlbi9yYnRyZWUuaD4K Pj4+Pj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPj4+Pj4gKyNpbmNsdWRlIDx4ZW4vc2l6ZXMu aD4KPj4+Pj4gKyNpbmNsdWRlIDx4ZW4vdm1hcC5oPgo+Pj4+PiArI2luY2x1ZGUgPGFjcGkvYWNw aV9pb3J0Lmg+Cj4+Pj4+ICsjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgo+Pj4+PiArI2luY2x1ZGUg PGFzbS9kZXZpY2UuaD4KPj4+Pj4gKyNpbmNsdWRlIDxhc20vaW8uaD4KPj4+Pj4gKyNpbmNsdWRl IDxhc20vcGxhdGZvcm0uaD4KPj4+Pj4gKwo+Pj4+PiArLyogQWxpYXMgdG8gWGVuIGRldmljZSB0 cmVlIGhlbHBlcnMgKi8KPj4+Pj4gKyNkZWZpbmUgZGV2aWNlX25vZGUgZHRfZGV2aWNlX25vZGUK Pj4+Pj4gKyNkZWZpbmUgb2ZfcGhhbmRsZV9hcmdzIGR0X3BoYW5kbGVfYXJncwo+Pj4+PiArI2Rl ZmluZSBvZl9kZXZpY2VfaWQgZHRfZGV2aWNlX21hdGNoCj4+Pj4+ICsjZGVmaW5lIG9mX21hdGNo X25vZGUgZHRfbWF0Y2hfbm9kZQo+Pj4+PiArI2RlZmluZSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihu cCwgcG5hbWUsIG91dCkgKCFkdF9wcm9wZXJ0eV9yZWFkX3UzMihucCwgcG5hbWUsIG91dCkpCj4+ Pj4+ICsjZGVmaW5lIG9mX3Byb3BlcnR5X3JlYWRfYm9vbCBkdF9wcm9wZXJ0eV9yZWFkX2Jvb2wK Pj4+Pj4gKyNkZWZpbmUgb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MgZHRfcGFyc2VfcGhhbmRs ZV93aXRoX2FyZ3MKPj4+Pj4gKwo+Pj4+PiArLyogWGVuOiBIZWxwZXJzIHRvIGdldCBkZXZpY2Ug TU1JTyBhbmQgSVJRcyAqLwo+Pj4+PiArc3RydWN0IHJlc291cmNlIHsKPj4+Pj4gK8KgwqDCoCB1 NjQgYWRkcjsKPj4+Pj4gK8KgwqDCoCB1NjQgc2l6ZTsKPj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBp bnQgdHlwZTsKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKyNkZWZpbmUgcmVzb3VyY2Vfc2l6ZShy ZXMpICgocmVzKS0+c2l6ZSkKPj4+Pj4gKwo+Pj4+PiArI2RlZmluZSBwbGF0Zm9ybV9kZXZpY2Ug ZGV2aWNlCj4+Pj4+ICsKPj4+Pj4gKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU0gMAo+Pj4+PiArI2Rl ZmluZSBJT1JFU09VUkNFX0lSUSAxCj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgcmVzb3Vy Y2UgKnBsYXRmb3JtX2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dW5zaWduZWQgaW50IHR5cGUsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbnVtKQo+Pj4+PiArewo+Pj4+PiArwqDC oMKgIC8qCj4+Pj4+ICvCoMKgwqDCoCAqIFRoZSByZXNvdXJjZSBpcyBvbmx5IHVzZWQgYmV0d2Vl biAyIGNhbGxzIG9mIHBsYXRmb3JtX2dldF9yZXNvdXJjZS4KPj4+Pj4gK8KgwqDCoMKgICogSXQn cyBxdWl0ZSB1Z2x5IGJ1dCBpdCdzIGF2b2lkIHRvIGFkZCB0b28gbXVjaCBjb2RlIGluIHRoZSBw YXJ0Cj4+Pj4+ICvCoMKgwqDCoCAqIGltcG9ydGVkIGZyb20gTGludXgKPj4+Pj4gK8KgwqDCoMKg ICovCj4+Pj4+ICvCoMKgwqAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXM7Cj4+Pj4+ICvCoMKg wqAgc3RydWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X25vZGU7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0 IGFjcGlfaW9ydF9zbW11X3YzICpub2RlX3NtbXVfZGF0YTsKPj4+Pj4gK8KgwqDCoCBpbnQgcmV0 ID0gMDsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHJlcy50eXBlID0gdHlwZTsKPj4+Pj4gKwo+Pj4+ PiArwqDCoMKgIHN3aXRjaCAodHlwZSkgewo+Pj4+PiArwqDCoMKgIGNhc2UgSU9SRVNPVVJDRV9N RU06Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocGRldi0+dHlwZSA9PSBERVZfQUNQSSkgewo+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAxOwo+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpb3J0X25vZGUgPSBwZGV2LT5hY3BpX25vZGU7Cj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG5vZGVfc21tdV9kYXRhID0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAoc3RydWN0IGFjcGlfaW9ydF9zbW11X3YzICopaW9ydF9ub2RlLT5ub2RlX2Rh dGE7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG5vZGVfc21tdV9k YXRhICE9IE5VTEwpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXMu YWRkciA9IG5vZGVfc21tdV9kYXRhLT5iYXNlX2FkZHJlc3M7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmVzLnNpemUgPSBTWl8xMjhLOwo+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IDA7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldCA9IGR0X2RldmljZV9nZXRfYWRkcmVzcyhkZXZfdG9fZHQocGRldiksIG51bSwK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmcmVzLmFkZHIsICZyZXMuc2l6ZSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAoKHJldCkgPyBOVUxMIDogJnJlcyk7Cj4+ Pj4+ICsKPj4+Pj4gK8KgwqDCoCBjYXNlIElPUkVTT1VSQ0VfSVJROgo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgLyogQUNQSSBjYXNlIG5vdCBpbXBsZW1lbnRlZCBhcyB0aGVyZSBpcyBubyB1c2UgY2Fz ZSBmb3IgaXQgKi8KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHBsYXRmb3JtX2dldF9pcnEo ZGV2X3RvX2R0KHBkZXYpLCBudW0pOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAo cmV0IDwgMCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+ ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJlcy5hZGRyID0gcmV0Owo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgcmVzLnNpemUgPSAxOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g JnJlczsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gTlVMTDsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gK3N0 YXRpYyBpbnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiwgY29uc3QgY2hhciAqbmFtZSkKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBjb25zdCBzdHJ1 Y3QgZHRfcHJvcGVydHkgKmR0cHJvcDsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X25v ZGUgKmlvcnRfbm9kZTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKm5v ZGVfc21tdV9kYXRhOwo+Pj4+PiArwqDCoMKgIGludCByZXQgPSAwOwo+Pj4+PiArCj4+Pj4+ICvC oMKgwqAgaWYgKHBkZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGlvcnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG5vZGVf c21tdV9kYXRhID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKWlvcnRfbm9kZS0+bm9kZV9k YXRhOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAobm9kZV9zbW11X2RhdGEgIT0g TlVMTCkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXN0cmNtcChuYW1lLCAi ZXZlbnRxIikpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gbm9k ZV9zbW11X2RhdGEtPmV2ZW50X2dzaXY7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVs c2UgaWYgKCFzdHJjbXAobmFtZSwgInByaXEiKSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSBub2RlX3NtbXVfZGF0YS0+cHJpX2dzaXY7Cj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNtZHEtc3luYyIpKQo+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IG5vZGVfc21tdV9kYXRhLT5z eW5jX2dzaXY7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKCFzdHJjbXAo bmFtZSwgImdlcnJvciIpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dCA9IG5vZGVfc21tdV9kYXRhLT5nZXJyX2dzaXY7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVsc2UKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlO VkFMOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiArwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBkdHByb3AgPSBkdF9maW5kX3Byb3BlcnR5KGRldl90b19kdChwZGV2 KSwgImludGVycnVwdC1uYW1lcyIsIE5VTEwpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFk dHByb3ApCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+ PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWR0cHJvcC0+dmFsdWUpCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREFUQTsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ ICsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICsvKgo+ Pj4+PiArICogWGVuOiBIZWxwZXJzIGZvciBETUEgYWxsb2NhdGlvbi4gSnVzdCB0aGUgZnVuY3Rp b24gbmFtZSBpcyByZXVzZWQgZm9yCj4+Pj4+ICsgKiBwb3J0aW5nIGNvZGUgdGhlc2UgYWxsb2Nh dGlvbiBhcmUgbm90IG1hbmFnZWQgYWxsb2NhdGlvbnMKPj4+Pj4gwqDCoCAqLwo+Pj4+PiDCoCAt I2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KPj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9hY3BpX2lvcnQu aD4KPj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+Pj4+PiAtI2luY2x1ZGUgPGxpbnV4 L2RtYS1pb21tdS5oPgo+Pj4+PiAtI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+Pj4+PiAtI2luY2x1 ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+Pj4+PiAtI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Cj4+ Pj4+IC0jaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4+Pj4+IC0jaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4+Pj4+IC0jaW5jbHVkZSA8bGludXgvbXNpLmg+Cj4+Pj4+IC0jaW5jbHVkZSA8bGlu dXgvb2YuaD4KPj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4+Pj4+IC0jaW5j bHVkZSA8bGludXgvb2ZfaW9tbXUuaD4KPj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y bS5oPgo+Pj4+PiAtI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+Pj4+PiAtI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgo+Pj4+PiAtCj4+Pj4+IC0jaW5jbHVkZSA8bGludXgvYW1iYS9i dXMuaD4KPj4+Pj4gLQo+Pj4+PiAtI2luY2x1ZGUgImlvLXBndGFibGUuaCIKPj4+Pj4gK3N0YXRp YyB2b2lkICpkbWFtX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNp emUsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9hZGRyX3QgKmRtYV9o YW5kbGUsIGdmcF90IGdmcCkKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCB2b2lkICp2YWRkcjsKPj4+ Pj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGFsaWdubWVudCA9IHNpemU7Cj4+Pj4+ICsKPj4+Pj4g K8KgwqDCoCAvKgo+Pj4+PiArwqDCoMKgwqAgKiBfeHphbGxvYyByZXF1aXJlcyB0aGF0IHRoZSAo YWxpZ24gJiAoYWxpZ24gLTEpKSA9IDAuIE1vc3Qgb2YgdGhlCj4+Pj4+ICvCoMKgwqDCoCAqIGFs bG9jYXRpb25zIGluIFNNTVUgY29kZSBzaG91bGQgc2VuZCB0aGUgcmlnaHQgdmFsdWUgZm9yIHNp emUuIEluCj4+Pj4+ICvCoMKgwqDCoCAqIGNhc2UgdGhpcyBpcyBub3QgdHJ1ZSBwcmludCBhIHdh cm5pbmcgYW5kIGFsaWduIHRvIHRoZSBzaXplIG9mIGEKPj4+Pj4gK8KgwqDCoMKgICogKHZvaWQg KikKPj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4+ICvCoMKgwqAgaWYgKHNpemUgJiAoc2l6ZSAtIDEp KSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfd2FybihkZXYsICJGaXhpbmcgYWxpZ25tZW50 IGZvciB0aGUgRE1BIGJ1ZmZlclxuIik7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBhbGlnbm1lbnQg PSBzaXplb2Yodm9pZCAqKTsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCB2 YWRkciA9IF94emFsbG9jKHNpemUsIGFsaWdubWVudCk7Cj4+Pj4+ICvCoMKgwqAgaWYgKCF2YWRk cikgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJETUEgYWxsb2NhdGlvbiBm YWlsZWRcbiIpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+ICvCoMKg wqAgfQo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX21hZGRyKHZh ZGRyKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHJldHVybiB2YWRkcjsKPj4+Pj4gK30KPj4+Pj4g Kwo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgdm9pZCBkbWFtX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRl dmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCB4 ZnJlZSh2YWRkcik7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gKy8qIFhlbjogU3R1YiBvdXQgRE1B IGRvbWFpbiByZWxhdGVkIGZ1bmN0aW9ucyAqLwo+Pj4+PiArI2RlZmluZSBpb21tdV9nZXRfZG1h X2Nvb2tpZShkb20pIDAKPj4+Pj4gKyNkZWZpbmUgaW9tbXVfcHV0X2RtYV9jb29raWUoZG9tKQo+ Pj4+PiArCj4+Pj4+ICsvKiBYZW46IFN0dWIgb3V0IG1vZHVsZSBwYXJhbSByZWxhdGVkIGZ1bmN0 aW9uICovCj4+Pj4+ICsjZGVmaW5lIG1vZHVsZV9wYXJhbV9uYW1lZChhLCBiLCBjLCBkKQo+Pj4+ PiArI2RlZmluZSBNT0RVTEVfUEFSTV9ERVNDKGEsIGIpCj4+Pj4+ICsKPj4+Pj4gKyNkZWZpbmUg ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkLCBiKSAwCj4+Pj4+ICsKPj4+Pj4gKyNkZWZpbmUg b2ZfZG1hX2lzX2NvaGVyZW50KG4pIDAKPj4+Pj4gKwo+Pj4+PiArI2RlZmluZSBNT0RVTEVfREVW SUNFX1RBQkxFKHR5cGUsIG5hbWUpCj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyB2b2lkIF9faW9tZW0g KmRldm1faW9yZW1hcF9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcmVzb3VyY2UgKnJl cykKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCB2b2lkIF9faW9tZW0gKnB0cjsKPj4+Pj4gKwo+Pj4+ PiArwqDCoMKgIGlmICghcmVzIHx8IHJlcy0+dHlwZSAhPSBJT1JFU09VUkNFX01FTSkgewo+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJJbnZhbGlkIHJlc291cmNlXG4iKTsKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+Pj4+PiArwqDCoMKg IH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHB0ciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPmFkZHIs IHJlcy0+c2l6ZSk7Cj4+Pj4+ICvCoMKgwqAgaWYgKCFwdHIpIHsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGRldl9lcnIoZGV2LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaW9yZW1hcCBm YWlsZWQgKGFkZHIgMHglIlBSSXg2NCIgc2l6ZSAweCUiUFJJeDY0IilcbiIsCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJlcy0+YWRkciwgcmVzLT5zaXplKTsKPj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gKwo+ Pj4+PiArwqDCoMKgIHJldHVybiBwdHI7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gKy8qIFhlbjog Q29tcGF0aWJpbGl0eSBkZWZpbmUgZm9yIGlvbW11X2RvbWFpbl9nZW9tZXRyeS4qLwo+Pj4+PiAr c3RydWN0IGlvbW11X2RvbWFpbl9nZW9tZXRyeSB7Cj4+Pj4+ICvCoMKgwqAgZG1hX2FkZHJfdCBh cGVydHVyZV9zdGFydDsgLyogRmlyc3QgYWRkcmVzcyB0aGF0IGNhbiBiZSBtYXBwZWTCoMKgwqAg Ki8KPj4+Pj4gK8KgwqDCoCBkbWFfYWRkcl90IGFwZXJ0dXJlX2VuZDvCoMKgIC8qIExhc3QgYWRk cmVzcyB0aGF0IGNhbiBiZSBtYXBwZWTCoMKgwqDCoCAqLwo+Pj4+PiArwqDCoMKgIGJvb2wgZm9y Y2VfYXBlcnR1cmU7wqDCoMKgwqDCoMKgIC8qIERNQSBvbmx5IGFsbG93ZWQgaW4gbWFwcGFibGUg cmFuZ2U/ICovCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICsKPj4+Pj4gKy8qIFhlbjogVHlwZSBk ZWZpbml0aW9ucyBmb3IgaW9tbXVfZG9tYWluICovCj4+Pj4+ICsjZGVmaW5lIElPTU1VX0RPTUFJ Tl9VTk1BTkFHRUQgMAo+Pj4+PiArI2RlZmluZSBJT01NVV9ET01BSU5fRE1BIDEKPj4+Pj4gKyNk ZWZpbmUgSU9NTVVfRE9NQUlOX0lERU5USVRZIDIKPj4+Pj4gKwo+Pj4+PiArLyogWGVuOiBEdW1t eSBpb21tdV9kb21haW4gKi8KPj4+Pj4gK3N0cnVjdCBpb21tdV9kb21haW4gewo+Pj4+PiArwqDC oMKgIC8qIFJ1bnRpbWUgU01NVSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGlvbW11X2RvbWFpbiAq Lwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW7CoMKgwqDCoMKgwqDCoCAqcHJp djsKPj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgdHlwZTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKg IC8qIER1bW15IGNvbXBhdGliaWxpdHkgZGVmaW5lcyAqLwo+Pj4+PiArwqDCoMKgIHVuc2lnbmVk IGxvbmcgcGdzaXplX2JpdG1hcDsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluX2dl b21ldHJ5IGdlb21ldHJ5Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgYXRvbWljX3QgcmVmOwo+Pj4+ PiArwqDCoMKgIC8qCj4+Pj4+ICvCoMKgwqDCoCAqIFVzZWQgdG8gbGluayBpb21tdV9kb21haW4g Y29udGV4dHMgZm9yIGEgc2FtZSBkb21haW4uCj4+Pj4+ICvCoMKgwqDCoCAqIFRoZXJlIGlzIGF0 IGxlYXN0IG9uZSBwZXItU01NVSB0byB1c2VkIGJ5IHRoZSBkb21haW4uCj4+Pj4+ICvCoMKgwqDC oCAqLwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWTCoMKgwqDCoMKgwqDCoCBsaXN0Owo+ Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiArLyogWGVuOiBEZXNjcmliZXMgaW5mb3JtYXRpb24gcmVx dWlyZWQgZm9yIGEgWGVuIGRvbWFpbiAqLwo+Pj4+PiArc3RydWN0IGFybV9zbW11X3hlbl9kb21h aW4gewo+Pj4+PiArwqDCoMKgIHNwaW5sb2NrX3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvY2s7 Cj4+Pj4+ICvCoMKgwqAgLyogTGlzdCBvZiBpb21tdSBkb21haW5zIGFzc29jaWF0ZWQgdG8gdGhp cyBkb21haW4gKi8KPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKgwqDCoMKgwqAg Y29udGV4dHM7Cj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICsvKgo+Pj4+PiArICogWGVuOiBJbmZv cm1hdGlvbiBhYm91dCBlYWNoIGRldmljZSBzdG9yZWQgaW4gZGV2LT5hcmNoZGF0YS5pb21tdQo+ Pj4+PiArICoKPj4+Pj4gKyAqIFRoZSBkZXYtPmFyY2hkYXRhLmlvbW11IHN0b3JlcyB0aGUgaW9t bXVfZG9tYWluIChydW50aW1lIGNvbmZpZ3VyYXRpb24gb2YKPj4+Pj4gKyAqIHRoZSBTTU1VKS4K Pj4+Pj4gKyAqLwo+Pj4+PiArc3RydWN0IGFybV9zbW11X3hlbl9kZXZpY2Ugewo+Pj4+PiArwqDC oMKgIHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4g Ky8qCj4+Pj4+ICsgKiBYZW46IGlvX3BndGFibGUgY29tcGF0aWJpbGl0eSBkZWZpbmVzLgo+Pj4+ PiArICogTW9zdCBvZiB0aGVzZSBhcmUgdG8gcG9ydCBpbiB0aGUgUzEgdHJhbnNsYXRpb24gY29k ZSBhcyBpcy4KPj4+Pj4gKyAqLwo+Pj4+PiArc3RydWN0IGlvX3BndGFibGVfb3BzIHsKPj4+Pj4g K307Cj4+Pj4+ICsKPj4+Pj4gK3N0cnVjdCBpb21tdV9nYXRoZXJfb3BzIHsKPj4+Pj4gK8KgwqDC oCB2b2lkICgqdGxiX2ZsdXNoX2FsbCkodm9pZCAqY29va2llKTsKPj4+Pj4gK8KgwqDCoCB2b2lk ICgqdGxiX2FkZF9mbHVzaCkodW5zaWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90 IGdyYW51bGUsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wg bGVhZiwgdm9pZCAqY29va2llKTsKPj4+Pj4gK8KgwqDCoCB2b2lkICgqdGxiX3N5bmMpKHZvaWQg KmNvb2tpZSk7Cj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcg ewo+Pj4+PiArwqDCoMKgIC8qCj4+Pj4+ICvCoMKgwqDCoCAqIElPX1BHVEFCTEVfUVVJUktfQVJN X05TOiAoQVJNIGZvcm1hdHMpIFNldCBOUyBhbmQgTlNUQUJMRSBiaXRzIGluCj4+Pj4+ICvCoMKg wqDCoCAqwqDCoMKgIHN0YWdlIDEgUFRFcywgZm9yIGhhcmR3YXJlIHdoaWNoIGluc2lzdHMgb24g dmFsaWRhdGluZyB0aGVtCj4+Pj4+ICvCoMKgwqDCoCAqwqDCoMKgIGV2ZW4gaW7CoMKgwqAgbm9u LXNlY3VyZSBzdGF0ZSB3aGVyZSB0aGV5IHNob3VsZCBub3JtYWxseSBiZSBpZ25vcmVkLgo+Pj4+ PiArwqDCoMKgwqAgKgo+Pj4+PiArwqDCoMKgwqAgKiBJT19QR1RBQkxFX1FVSVJLX05PX1BFUk1T OiBJZ25vcmUgdGhlIElPTU1VX1JFQUQsIElPTU1VX1dSSVRFIGFuZAo+Pj4+PiArwqDCoMKgwqAg KsKgwqDCoCBJT01NVV9OT0VYRUMgZmxhZ3MgYW5kIG1hcCBldmVyeXRoaW5nIHdpdGggZnVsbCBh Y2Nlc3MsIGZvcgo+Pj4+PiArwqDCoMKgwqAgKsKgwqDCoCBoYXJkd2FyZSB3aGljaCBkb2VzIG5v dCBpbXBsZW1lbnQgdGhlIHBlcm1pc3Npb25zIG9mIGEgZ2l2ZW4KPj4+Pj4gK8KgwqDCoMKgICrC oMKgwqAgZm9ybWF0LCBhbmQvb3IgcmVxdWlyZXMgc29tZSBmb3JtYXQtc3BlY2lmaWMgZGVmYXVs dCB2YWx1ZS4KPj4+Pj4gK8KgwqDCoMKgICoKPj4+Pj4gK8KgwqDCoMKgICogSU9fUEdUQUJMRV9R VUlSS19UTEJJX09OX01BUDogSWYgdGhlIGZvcm1hdCBmb3JiaWRzIGNhY2hpbmcgaW52YWxpZAo+ Pj4+PiArwqDCoMKgwqAgKsKgwqDCoCAodW5tYXBwZWQpIGVudHJpZXMgYnV0IHRoZSBoYXJkd2Fy ZSBtaWdodCBkbyBzbyBhbnl3YXksIHBlcmZvcm0KPj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgVExC IG1haW50ZW5hbmNlIHdoZW4gbWFwcGluZyBhcyB3ZWxsIGFzIHdoZW4gdW5tYXBwaW5nLgo+Pj4+ PiArwqDCoMKgwqAgKgo+Pj4+PiArwqDCoMKgwqAgKiBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtf NEdCOiAoQVJNIHY3cyBmb3JtYXQpIFNldCBiaXQgOSBpbiBhbGwKPj4+Pj4gK8KgwqDCoMKgICrC oMKgwqAgUFRFcywgZm9yIE1lZGlhdGVrIElPTU1VcyB3aGljaCB0cmVhdCBpdCBhcyBhIDMzcmQg YWRkcmVzcyBiaXQKPj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgd2hlbiB0aGUgU29DIGlzIGluICI0 R0IgbW9kZSIgYW5kIHRoZXkgY2FuIG9ubHkgYWNjZXNzIHRoZSBoaWdoCj4+Pj4+ICvCoMKgwqDC oCAqwqDCoMKgIHJlbWFwIG9mIERSQU0gKDB4MV8wMDAwMDAwMCB0byAweDFfZmZmZmZmZmYpLgo+ Pj4+PiArwqDCoMKgwqAgKgo+Pj4+PiArwqDCoMKgwqAgKiBJT19QR1RBQkxFX1FVSVJLX05PX0RN QTogR3VhcmFudGVlcyB0aGF0IHRoZSB0YWJsZXMgd2lsbCBvbmx5IGV2ZXIKPj4+Pj4gK8KgwqDC oMKgICrCoMKgwqAgYmUgYWNjZXNzZWQgYnkgYSBmdWxseSBjYWNoZS1jb2hlcmVudCBJT01NVSBv ciBDUFUgKGUuZy4gZm9yIGEKPj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgc29mdHdhcmUtZW11bGF0 ZWQgSU9NTVUpLCBzdWNoIHRoYXQgcGFnZXRhYmxlIHVwZGF0ZXMgbmVlZCBub3QKPj4+Pj4gK8Kg wqDCoMKgICrCoMKgwqAgYmUgdHJlYXRlZCBhcyBleHBsaWNpdCBETUEgZGF0YS4KPj4+Pj4gK8Kg wqDCoMKgICovCj4+Pj4+ICvCoMKgwqAgI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9OU8Kg wqDCoMKgwqDCoMKgIEJJVCgwKQo+Pj4+PiArwqDCoMKgICNkZWZpbmUgSU9fUEdUQUJMRV9RVUlS S19OT19QRVJNU8KgwqDCoCBCSVQoMSkKPj4+Pj4gK8KgwqDCoCAjZGVmaW5lIElPX1BHVEFCTEVf UVVJUktfVExCSV9PTl9NQVDCoMKgwqAgQklUKDIpCj4+Pj4+ICvCoMKgwqAgI2RlZmluZSBJT19Q R1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdCwqDCoMKgIEJJVCgzKQo+Pj4+PiArwqDCoMKgICNkZWZp bmUgSU9fUEdUQUJMRV9RVUlSS19OT19ETUHCoMKgwqDCoMKgwqDCoCBCSVQoNCkKPj4+Pj4gK8Kg wqDCoCB1bnNpZ25lZCBsb25nwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBxdWlya3M7Cj4+Pj4+ICvC oMKgwqAgdW5zaWduZWQgbG9uZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGdzaXplX2JpdG1hcDsK Pj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlhczsKPj4+ Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9hczsKPj4+Pj4g K8KgwqDCoCBjb25zdCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wc8KgwqDCoCAqdGxiOwo+Pj4+PiAr wqDCoMKgIHN0cnVjdCBkZXZpY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICppb21tdV9kZXY7Cj4+ Pj4+ICsKPj4+Pj4gK8KgwqDCoCAvKiBMb3ctbGV2ZWwgZGF0YSBzcGVjaWZpYyB0byB0aGUgdGFi bGUgZm9ybWF0ICovCj4+Pj4+ICvCoMKgwqAgdW5pb24gewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0wqDCoMKgIHR0YnJbMl07 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NMKgwqDCoCB0Y3I7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHU2NMKgwqDCoCBtYWlyWzJdOwo+Pj4+PiArwqDCoMKgwqDCoMKg wqAgfSBhcm1fbHBhZV9zMV9jZmc7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVj dCB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NMKgwqDCoCB2dHRicjsKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0wqDCoMKgIHZ0Y3I7Cj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCB9IGFybV9scGFlX3MyX2NmZzsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMywqDCoMKgIHR0YnJbMl07Cj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMsKgwqDCoCB0Y3I7Cj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHUzMsKgwqDCoCBubXJyOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1MzLCoMKgwqAgcHJycjsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gYXJtX3Y3c19jZmc7 Cj4+Pj4+ICvCoMKgwqAgfTsKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK2VudW0gaW9fcGd0YWJs ZV9mbXQgewo+Pj4+PiArwqDCoMKgIEFSTV8zMl9MUEFFX1MxLAo+Pj4+PiArwqDCoMKgIEFSTV8z Ml9MUEFFX1MyLAo+Pj4+PiArwqDCoMKgIEFSTV82NF9MUEFFX1MxLAo+Pj4+PiArwqDCoMKgIEFS TV82NF9MUEFFX1MyLAo+Pj4+PiArwqDCoMKgIEFSTV9WN1MsCj4+Pj4+ICvCoMKgwqAgSU9fUEdU QUJMRV9OVU1fRk1UUywKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gKy8qCj4+Pj4+ICsgKiBYZW46 IFRoZSBwZ3RhYmxlX29wcyBhcmUgdXNlZCBieSB0aGUgUzEgdHJhbnNsYXRpb25zLCBzbyByZXR1 cm4gdGhlIGR1bW15Cj4+Pj4+ICsgKiBhZGRyZXNzLgo+Pj4+PiArICovCj4+Pj4+ICsjZGVmaW5l IGFsbG9jX2lvX3BndGFibGVfb3BzKGYsIGMsIG8pICgoc3RydWN0IGlvX3BndGFibGVfb3BzICop MHgwKQo+Pj4+IElzIHRoaXMgY29ycmVjdD8gaXQgd2lsbCBtYWtlIHRoZSBjYWxsZXIgbnVsbCBj aGVjayBmYWlsCj4+Pj4+ICsjZGVmaW5lIGZyZWVfaW9fcGd0YWJsZV9vcHMobykKPj4+Pj4gKwo+ Pj4+PiArLyogWGVuOiBEZWZpbmUgd3JhcHBlciBmb3IgcmVxdWVzdGluZyBJUlFzICovCj4+Pj4+ ICsjZGVmaW5lIElSUUZfT05FU0hPVCAwCj4+Pj4+ICsKPj4+Pj4gK3R5cGVkZWYgdm9pZCAoKmly cV9oYW5kbGVyX3QpKGludCwgdm9pZCAqLCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKPj4+Pj4g Kwo+Pj4+PiArc3RhdGljIGlubGluZSBpbnQgZGV2bV9yZXF1ZXN0X2lycShzdHJ1Y3QgZGV2aWNl ICpkZXYsIHVuc2lnbmVkIGludCBpcnEsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB1bnNpZ25lZCBsb25nIGlycWZsYWdz LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIg KmRldm5hbWUsIHZvaWQgKmRldl9pZCkKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCAvKgo+Pj4+PiAr wqDCoMKgwqAgKiBTTU1VdjMgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQgd2lyZWQgaW50ZXJy dXB0IG91dHB1dHMgdGhhdCBhcmUKPj4+Pj4gK8KgwqDCoMKgICogZWRnZS10cmlnZ2VyZWQuIFNl dCB0aGUgaXJxIHR5cGUgYXMgcGVyIHRoZSBzcGVjLgo+Pj4+PiArwqDCoMKgwqAgKi8KPj4+Pj4g K8KgwqDCoCBpcnFfc2V0X3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOwo+Pj4+PiArwqDC oMKgIHJldHVybiByZXF1ZXN0X2lycShpcnEsIGlycWZsYWdzLCBoYW5kbGVyLCBkZXZuYW1lLCBk ZXZfaWQpOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICsvKgo+Pj4+PiArICogWGVuIGRvZXMgbm90 IGhhdmUgYSBjb25jZXB0IG9mIHRocmVhZGVkIGlycSwgYnV0IGV2ZW50dWFsbHkgd2UgY2FuIHVz ZQo+Pj4+PiArICogdGFza2xldHMgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4K Pj4+Pj4gKyAqLwo+Pj4+PiAraW50IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc3RydWN0IGRl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBpcnFfaGFuZGxlcl90IGhhbmRsZXIsCj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycV9oYW5kbGVyX3QgdGhyZWFk X2ZuLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCj4+Pj4+ICt7 Cj4+Pj4+ICvCoMKgwqAgcmV0dXJuIGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHRocmVhZF9m biwgaXJxZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gKy8q IFhlbjogVGhlIG11dGV4IGlzIHVzZWQgb25seSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gc28gdGhl IHR5cGVjYXN0IGlzIHNhZmUgKi8KPj4+Pj4gKyNkZWZpbmUgbXV0ZXggc3BpbmxvY2sKPj4+Pj4g KyNkZWZpbmUgbXV0ZXhfaW5pdCBzcGluX2xvY2tfaW5pdAo+Pj4+PiArI2RlZmluZSBtdXRleF9s b2NrIHNwaW5fbG9jawo+Pj4+PiArI2RlZmluZSBtdXRleF91bmxvY2sgc3Bpbl91bmxvY2sKPj4+ Pj4gKwo+Pj4+PiArI2RlZmluZSByZWFkeF9wb2xsX3RpbWVvdXQob3AsIGFkZHIsIHZhbCwgY29u ZCwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpIFwKPj4+Pj4gKyh7IFwKPj4+Pj4gK8KgwqDCoCBzX3Rp bWVfdCBkZWFkbGluZSA9IE5PVygpICsgTUlDUk9TRUNTKHRpbWVvdXRfdXMpOyBcCj4+Pj4+ICvC oMKgwqAgZm9yICg7OykgeyBcCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAodmFsKSA9IG9wKGFkZHIp OyBcCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY29uZCkgXAo+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBicmVhazsgXAo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKE5PVygpID4gZGVh ZGxpbmUpIHsgXAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodmFsKSA9IG9wKGFkZHIp OyBcCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOyBcCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCB9IFwKPj4+Pj4gK8KgwqDCoCB1ZGVsYXkoc2xlZXBfdXMpOyBcCj4+Pj4+ICvCoMKg wqAgfSBcCj4+Pj4+ICvCoMKgwqAgKGNvbmQpID8gMCA6IC1FVElNRURPVVQ7IFwKPj4+Pj4gK30p Cj4+Pj4+ICsKPj4+Pj4gKyNkZWZpbmUgcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoYWRkciwg dmFsLCBjb25kLCBkZWxheV91cywgdGltZW91dF91cykgXAo+Pj4+PiArwqDCoMKgIHJlYWR4X3Bv bGxfdGltZW91dChyZWFkbF9yZWxheGVkLCBhZGRyLCB2YWwsIGNvbmQsIGRlbGF5X3VzLCB0aW1l b3V0X3VzKQo+Pj4+PiArCj4+Pj4+ICsjZGVmaW5lIFZBX0JJVFMgMCAvKiBPbmx5IG5lZWRlZCBm b3IgUzEgdHJhbnNsYXRpb25zICovCj4+Pj4+IMKgIMKgIC8qIE1NSU8gcmVnaXN0ZXJzICovCj4+ Pj4+IMKgICNkZWZpbmUgQVJNX1NNTVVfSURSMMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwCj4+ Pj4+IEBAIC00MzMsNiArODE5LDcgQEAgZW51bSBwcmlfcmVzcCB7Cj4+Pj4+IMKgwqDCoMKgwqAg UFJJX1JFU1BfU1VDQywKPj4+Pj4gwqAgfTsKPj4+Pj4gwqAgKyNpZiAwIC8qIFhlbjogTm8gTVNJ IHN1cHBvcnQgaW4gdGhpcyBpdGVyYXRpb24gKi8KPj4+Pj4gwqAgZW51bSBhcm1fc21tdV9tc2lf aW5kZXggewo+Pj4+PiDCoMKgwqDCoMKgIEVWVFFfTVNJX0lOREVYLAo+Pj4+PiDCoMKgwqDCoMKg IEdFUlJPUl9NU0lfSU5ERVgsCj4+Pj4+IEBAIC00NTcsNiArODQ0LDcgQEAgc3RhdGljIHBoeXNf YWRkcl90IGFybV9zbW11X21zaV9jZmdbQVJNX1NNTVVfTUFYX01TSVNdWzNdID0gewo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgQVJNX1NNTVVfUFJJUV9JUlFfQ0ZHMiwKPj4+Pj4gwqDCoMKgwqDC oCB9LAo+Pj4+PiDCoCB9Owo+Pj4+PiArI2VuZGlmCj4+Pj4+IMKgIMKgIHN0cnVjdCBhcm1fc21t dV9jbWRxX2VudCB7Cj4+Pj4+IMKgwqDCoMKgwqAgLyogQ29tbW9uIGZpZWxkcyAqLwo+Pj4+PiBA QCAtNTYxLDYgKzk0OSw4IEBAIHN0cnVjdCBhcm1fc21tdV9zMl9jZmcgewo+Pj4+PiDCoMKgwqDC oMKgIHUxNsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bWlkOwo+Pj4+PiDCoMKgwqDC oMKgIHU2NMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dHRicjsKPj4+Pj4gwqDCoMKg wqDCoCB1NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnRjcjsKPj4+Pj4gK8KgwqDC oCAvKiBYZW46IERvbWFpbiBhc3NvY2lhdGVkIHRvIHRoaXMgY29uZmlndXJhdGlvbiAqLwo+Pj4+ PiArwqDCoMKgIHN0cnVjdCBkb21haW7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpkb21haW47Cj4+ Pj4+IMKgIH07Cj4+Pj4+IMKgIMKgIHN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfZW50IHsKPj4+Pj4g QEAgLTYzNSw5ICsxMDI1LDIxIEBAIHN0cnVjdCBhcm1fc21tdV9kZXZpY2Ugewo+Pj4+PiDCoMKg wqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnwqDCoMKgIHN0cnRhYl9jZmc7Cj4+Pj4+ IMKgIMKgwqDCoMKgwqAgLyogSU9NTVUgY29yZSBjb2RlIGhhbmRsZSAqLwo+Pj4+PiArI2lmIDAg LypYZW46IEdlbmVyaWMgaW9tbXVfZGV2aWNlIHJlZiBub3QgbmVlZGVkIGhlcmUgKi8KPj4+Pj4g wqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZGV2aWNlwqDCoMKgwqDCoMKgwqAgaW9tbXU7Cj4+Pj4+ ICsjZW5kaWYKPj4+Pj4gK8KgwqDCoCAvKiBYZW46IE5lZWQgdG8ga2VlcCBhIGxpc3Qgb2YgU01N VSBkZXZpY2VzICovCj4+Pj4+ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkZXZpY2VzOwo+Pj4+PiDCoCB9Owo+Pj4+PiDCoCArLyogWGVuOiBL ZWVwIGEgbGlzdCBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciAqLwo+Pj4+ PiArc3RhdGljIERFRklORV9TUElOTE9DSyhhcm1fc21tdV9kZXZpY2VzX2xvY2spOwo+Pj4+PiAr c3RhdGljIExJU1RfSEVBRChhcm1fc21tdV9kZXZpY2VzKTsKPj4+Pj4gKy8qIFhlbjogSGVscGVy IGZvciBmaW5kaW5nIGEgZGV2aWNlIHVzaW5nIGZ3bm9kZSAqLwo+Pj4+PiArc3RhdGljCj4+Pj4+ ICtzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVjdCBm d25vZGVfaGFuZGxlICpmd25vZGUpOwo+Pj4+PiArCj4+Pj4+ICsKPj4+Pj4gwqAgLyogU01NVSBw cml2YXRlIGRhdGEgZm9yIGVhY2ggbWFzdGVyICovCj4+Pj4+IMKgIHN0cnVjdCBhcm1fc21tdV9t YXN0ZXJfZGF0YSB7Cj4+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZcKgwqDC oMKgwqDCoMKgICpzbW11Owo+Pj4+PiBAQCAtMTIzMiw3ICsxNjM0LDcgQEAgc3RhdGljIHZvaWQg YXJtX3NtbXVfaGFuZGxlX3BwcihzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1NjQgKmV2 dCkKPj4+Pj4gwqAgwqDCoMKgwqDCoCBkZXZfaW5mbyhzbW11LT5kZXYsICJ1bmV4cGVjdGVkIFBS SSByZXF1ZXN0IHJlY2VpdmVkOlxuIik7Cj4+Pj4+IMKgwqDCoMKgwqAgZGV2X2luZm8oc21tdS0+ ZGV2LAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoCAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNd ICVzcHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNzIGF0IGlvdmEgMHglMDE2bGx4XG4iLAo+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoCAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNdICVzcHJpdmlsZWdl ZCAlcyVzJXMgYWNjZXNzIGF0IGlvdmEgJSMiIFBSSXg2NCAiXG4iLAo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzaWQsIHNzaWQsIGdycGlkLCBsYXN0ID8gIkwiIDogIiIsCj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgIGV2dFswXSAmIFBSSVFfMF9QRVJNX1BSSVYgPyAiIiA6ICJ1biIsCj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV2dFswXSAmIFBSSVFfMF9QRVJNX1JFQUQgPyAiUiIg OiAiIiwKPj4+Pj4gQEAgLTEzNDYsNiArMTc0OCw4IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhcm1f c21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCj4+Pj4+IMKgIHsK Pj4+Pj4gwqDCoMKgwqDCoCBhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihpcnEsIGRldik7Cj4+Pj4+ IMKgwqDCoMKgwqAgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIoaXJxLCBkZXYpOwo+Pj4+PiAr wqDCoMKgIC8qWGVuOiBObyB0aHJlYWRlZCBpcnEuIFNvIGNhbGwgdGhlIHJlcXVpcmVkIGZ1bmN0 aW9uIGZyb20gaGVyZSAqLwo+Pj4+PiArwqDCoMKgIGFybV9zbW11X2NvbWJpbmVkX2lycV90aHJl YWQoaXJxLCBkZXYpOwo+Pj4+PiDCoMKgwqDCoMKgIHJldHVybiBJUlFfV0FLRV9USFJFQUQ7Cj4+ Pj4+IMKgIH0KPj4+Pj4gwqAgQEAgLTEzNTgsNiArMTc2Miw0NiBAQCBzdGF0aWMgdm9pZCBfX2Fy bV9zbW11X3RsYl9zeW5jKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4+Pj4+IMKgwqDC oMKgwqAgYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWQoc21tdSwgJmNtZCk7Cj4+Pj4+IMKgIH0KPj4+ Pj4gwqAgKy8qCj4+Pj4+ICsgKiBYZW46IERlZmluZSB0aGUgSVJRIGhhbmRsZXJzIGZvciB4ZW4u IFRoZSBsaW51eCBmdW5jdGlvbnMgd291bGQgYmUKPj4+Pj4gKyAqIG1vZGlmaWVkIHRvIHVzZSB0 aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlLgo+Pj4+PiArICovCj4+ Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9ldnRxX3RocmVhZF94ZW4oaW50IGlycSwgdm9pZCAq ZGV2LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgYXJtX3Nt bXVfZXZ0cV90aHJlYWQoaXJxLCBkZXYpOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMg dm9pZCBhcm1fc21tdV9wcmlxX3RocmVhZF94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgYXJtX3NtbXVfcHJpcV90aHJl YWQoaXJxLCBkZXYpOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21t dV9jbWRxX3N5bmNfaGFuZGxlcl94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGNwdV91c2VyX3Jl Z3MgKnJlZ3MpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRs ZXIoaXJxLCBkZXYpOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21t dV9nZXJyb3JfaGFuZGxlcl94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIoaXJx LCBkZXYpOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9jb21i aW5lZF9pcnFfaGFuZGxlcl94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRs ZXIoaXJxLCBkZXYpOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICsjZGVmaW5lIGFybV9zbW11X2V2 dHFfdGhyZWFkIGFybV9zbW11X2V2dHFfdGhyZWFkX3hlbgo+Pj4+PiArI2RlZmluZSBhcm1fc21t dV9wcmlxX3RocmVhZCBhcm1fc21tdV9wcmlxX3RocmVhZF94ZW4KPj4+Pj4gKyNkZWZpbmUgYXJt X3NtbXVfY21kcV9zeW5jX2hhbmRsZXIgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXJfeGVuCj4+ Pj4+ICsjZGVmaW5lIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyIGFybV9zbW11X2dlcnJvcl9oYW5k bGVyX3hlbgo+Pj4+PiArI2RlZmluZSBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlciBhcm1f c21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcl94ZW4KPj4+Pj4gKwo+Pj4+PiDCoCBzdGF0aWMgdm9p ZCBhcm1fc21tdV90bGJfc3luYyh2b2lkICpjb29raWUpCj4+Pj4+IMKgIHsKPj4+Pj4gwqDCoMKg wqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiA9IGNvb2tpZTsKPj4+Pj4g QEAgLTE0MTUsNiArMTg1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29w cyBhcm1fc21tdV9nYXRoZXJfb3BzID0gewo+Pj4+PiDCoMKgwqDCoMKgIC50bGJfc3luY8KgwqDC oCA9IGFybV9zbW11X3RsYl9zeW5jLAo+Pj4+PiDCoCB9Owo+Pj4+PiDCoCArI2lmIDAgLypYZW46 IFVudXNlZCBmdW5jdGlvbmFsaXR5ICovCj4+Pj4+IMKgIC8qIElPTU1VIEFQSSAqLwo+Pj4+PiDC oCBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNhcCkKPj4+Pj4g wqAgewo+Pj4+PiBAQCAtMTQyNyw2ICsxODcyLDcgQEAgc3RhdGljIGJvb2wgYXJtX3NtbXVfY2Fw YWJsZShlbnVtIGlvbW11X2NhcCBjYXApCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g ZmFsc2U7Cj4+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+PiDCoCB9Cj4+Pj4+ICsjZW5kaWYKPj4+Pj4g wqAgwqAgc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2RvbWFpbl9hbGxvYyh1 bnNpZ25lZCB0eXBlKQo+Pj4+PiDCoCB7Cj4+Pj4+IEBAIC0xNTQ2LDkgKzE5OTIsMTYgQEAgc3Rh dGljIGludCBhcm1fc21tdV9kb21haW5fZmluYWxpc2VfczIoc3RydWN0IGFybV9zbW11X2RvbWFp biAqc21tdV9kb21haW4sCj4+Pj4+IMKgwqDCoMKgwqAgaWYgKHZtaWQgPCAwKQo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHZtaWQ7Cj4+Pj4+IMKgIC3CoMKgwqAgY2ZnLT52bWlkwqDC oMKgID0gKHUxNil2bWlkOwo+Pj4+PiAtwqDCoMKgIGNmZy0+dnR0YnLCoMKgwqAgPSBwZ3RibF9j ZmctPmFybV9scGFlX3MyX2NmZy52dHRicjsKPj4+Pj4gLcKgwqDCoCBjZmctPnZ0Y3LCoMKgwqAg PSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52dGNyOwo+Pj4+PiArwqDCoMKgIC8qCj4+Pj4+ ICvCoMKgwqDCoCAqIFhlbjogR2V0IHRoZSB0dGJyIGFuZCB2dGNyIHZhbHVlcwo+Pj4+PiArwqDC oMKgwqAgKiB2dHRicjogVGhpcyBpcyBhIHNoYXJlZCB2YWx1ZSB3aXRoIHRoZSBkb21haW4gcGFn ZSB0YWJsZQo+Pj4+PiArwqDCoMKgwqAgKiB2dGNyOiBUaGUgVENSIHNldHRpbmdzIGFyZSB0aGUg c2FtZSBhcyBDUFUgc2luY2UgdGhlIHBhZ2UKPj4+Pj4gK8KgwqDCoMKgICogdGFibGVzIGFyZSBz aGFyZWQKPj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBjZmctPnZtaWTC oMKgwqAgPSB2bWlkOwo+Pj4+PiArwqDCoMKgIGNmZy0+dnR0YnLCoMKgwqAgPSBwYWdlX3RvX21h ZGRyKGNmZy0+ZG9tYWluLT5hcmNoLnAybS5yb290KTsKPj4+Pj4gK8KgwqDCoCBjZmctPnZ0Y3LC oMKgwqAgPSBSRUFEX1NZU1JFRzMyKFZUQ1JfRUwyKSAmIFNUUlRBQl9TVEVfMl9WVENSX01BU0s7 Cj4+Pj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+IMKgIH0KPj4+Pj4gwqAgQEAgLTE2MDQs NiArMjA1Nyw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNlKHN0cnVjdCBp b21tdV9kb21haW4gKmRvbWFpbikKPj4+Pj4gwqDCoMKgwqDCoCBpZiAoc21tdS0+ZmVhdHVyZXMg JiBBUk1fU01NVV9GRUFUX0NPSEVSRU5DWSkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHBndGJs X2NmZy5xdWlya3MgPSBJT19QR1RBQkxFX1FVSVJLX05PX0RNQTsKPj4+Pj4gwqAgK8KgwqDCoCAv KiBYZW46IHBndGJsX29wcyBnZXRzIGFuIGludmFsaWQgYWRkcmVzcyAqLwo+Pj4+PiDCoMKgwqDC oMKgIHBndGJsX29wcyA9IGFsbG9jX2lvX3BndGFibGVfb3BzKGZtdCwgJnBndGJsX2NmZywgc21t dV9kb21haW4pOwo+Pj4+PiDCoMKgwqDCoMKgIGlmICghcGd0Ymxfb3BzKQo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4gV2lsbCB0aGlzIG5vdCBmYWlsID8KPj4+ Pj4gQEAgLTE3MjEsNiArMjE3NSw3IEBAIG91dF91bmxvY2s6Cj4+Pj4+IMKgwqDCoMKgwqAgcmV0 dXJuIHJldDsKPj4+Pj4gwqAgfQo+Pj4+PiDCoCArI2lmIDAgLyogWGVuOiBVbnVzZWQgZnVuY3Rp b25hbGl0eSAqLwo+Pj4+PiDCoCBzdGF0aWMgaW50IGFybV9zbW11X21hcChzdHJ1Y3QgaW9tbXVf ZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCkKPj4+ Pj4gwqAgewo+Pj4+PiBAQCAtMTc3Miw2ICsyMjI3LDcgQEAgc3RydWN0IGFybV9zbW11X2Rldmlj ZSAqYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQo+ Pj4+PiDCoMKgwqDCoMKgIHB1dF9kZXZpY2UoZGV2KTsKPj4+Pj4gwqDCoMKgwqDCoCByZXR1cm4g ZGV2ID8gZGV2X2dldF9kcnZkYXRhKGRldikgOiBOVUxMOwo+Pj4+PiDCoCB9Cj4+Pj4+ICsjZW5k aWYKPj4+Pj4gwqAgwqAgc3RhdGljIGJvb2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCBh cm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQpCj4+Pj4+IMKgIHsKPj4+Pj4gQEAgLTE3ODMs NyArMjIzOSwxNCBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9zaWRfaW5fcmFuZ2Uoc3RydWN0IGFy bV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKPj4+Pj4gwqDCoMKgwqDCoCByZXR1cm4gc2lk IDwgbGltaXQ7Cj4+Pj4+IMKgIH0KPj4+Pj4gwqAgKy8qIFhlbjogVW51c2VkICovCj4+Pj4+ICsj aWYgMAo+Pj4+PiDCoCBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9vcHM7Cj4+Pj4+ ICsjZW5kaWYKPj4+Pj4gKwo+Pj4+PiArLyogWGVuOiBSZWRlZmluZSBhcm1fc21tdV9vcHMgdG8g d2hhdCBmd3NwZWMgc2hvdWxkIGV2YWx1YXRlICovCj4+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGlvbW11X29wcyBhcm1fc21tdV9pb21tdV9vcHM7Cj4+Pj4+ICsjZGVmaW5lIGFybV9zbW11X29w cyBhcm1fc21tdV9pb21tdV9vcHMKPj4+Pj4gwqAgwqAgc3RhdGljIGludCBhcm1fc21tdV9hZGRf ZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+Pj4gwqAgewo+Pj4+PiBAQCAtMTc5MSw4ICsy MjU0LDExIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4+Pj4g wqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgKm1hc3RlcjsKPj4+Pj4gwqDC oMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsK Pj4+Pj4gKyNpZiAwIC8qWGVuOiBpb21tdV9ncm91cCBpcyBub3QgbmVlZGVkICovCj4+Pj4+IMKg wqDCoMKgwqAgc3RydWN0IGlvbW11X2dyb3VwICpncm91cDsKPj4+Pj4gKyNlbmRpZgo+Pj4+PiDC oCArwqDCoMKgIC8qIFhlbjogZndzcGVjLT5vcHMgYXJlIG5vdCBuZWVkZWQgKi8KPj4+Pj4gwqDC oMKgwqDCoCBpZiAoIWZ3c3BlYyB8fCBmd3NwZWMtPm9wcyAhPSAmYXJtX3NtbXVfb3BzKQo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+Pj4+IMKgwqDCoMKgwqAgLyoK Pj4+Pj4gQEAgLTE4MzAsNiArMjI5NiwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZp Y2Uoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiDC oMKgwqDCoMKgIH0KPj4+Pj4gwqAgKy8qCj4+Pj4+ICsgKiBYZW46IERvIG5vdCBuZWVkIGFuIGlv bW11IGdyb3VwIGFzIHRoZSBzdHJlYW0gZGF0YSBpcyBjYXJyaWVkIGJ5IHRoZSBTTU1VCj4+Pj4+ ICsgKiBtYXN0ZXIgZGV2aWNlIG9iamVjdAo+Pj4+PiArICovCj4+Pj4+ICsjaWYgMAo+Pj4+PiDC oMKgwqDCoMKgIGdyb3VwID0gaW9tbXVfZ3JvdXBfZ2V0X2Zvcl9kZXYoZGV2KTsKPj4+Pj4gwqDC oMKgwqDCoCBpZiAoIUlTX0VSUihncm91cCkpIHsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlv bW11X2dyb3VwX3B1dChncm91cCk7Cj4+Pj4+IEBAIC0xODM3LDggKzIzMDgsMTYgQEAgc3RhdGlj IGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+Pj4gwqDCoMKg wqDCoCB9Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhncm91cCk7 Cj4+Pj4+ICsjZW5kaWYKPj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+Pj4gwqAgfQo+Pj4+PiDC oCArLyoKPj4+Pj4gKyAqIFhlbjogV2UgY2FuIHBvdGVudGlhbGx5IHN1cHBvcnQgdGhpcyBmdW5j dGlvbiBhbmQgZGVzdHJveSBhIGRldmljZS4gVGhpcwo+Pj4+PiArICogd2lsbCBiZSByZWxldmFu dCBmb3IgUENJIGhvdHBsdWcuIFNvLCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIG5lZWRlZCBhZnRl cgo+Pj4+PiArICogcGFzc3Rocm91Z2ggc3VwcG9ydCBpcyBhdmFpbGFibGUuCj4+Pj4+ICsgKi8K Pj4+Pj4gKyNpZiAwCj4+Pj4+IMKgIHN0YXRpYyB2b2lkIGFybV9zbW11X3JlbW92ZV9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KQo+Pj4+PiDCoCB7Cj4+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGlv bW11X2Z3c3BlYyAqZndzcGVjID0gZGV2LT5pb21tdV9md3NwZWM7Cj4+Pj4+IEBAIC0xOTc0LDYg KzI0NTMsNyBAQCBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9vcHMgPSB7Cj4+Pj4+ IMKgwqDCoMKgwqAgLnB1dF9yZXN2X3JlZ2lvbnPCoMKgwqAgPSBhcm1fc21tdV9wdXRfcmVzdl9y ZWdpb25zLAo+Pj4+PiDCoMKgwqDCoMKgIC5wZ3NpemVfYml0bWFwwqDCoMKgwqDCoMKgwqAgPSAt MVVMLCAvKiBSZXN0cmljdGVkIGR1cmluZyBkZXZpY2UgYXR0YWNoICovCj4+Pj4+IMKgIH07Cj4+ Pj4+ICsjZW5kaWYKPj4+Pj4gwqAgwqAgLyogUHJvYmluZyBhbmQgaW5pdGlhbGlzYXRpb24gZnVu Y3Rpb25zICovCj4+Pj4+IMKgIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9vbmVfcXVldWUoc3Ry dWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKPj4+Pj4gQEAgLTIxODIsNiArMjY2Miw3IEBAIHN0 YXRpYyBpbnQgYXJtX3NtbXVfdXBkYXRlX2dicGEoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dSwgdTMyIHNldCwgdTMyIGNscikKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAxLCBBUk1fU01NVV9QT0xMX1RJTUVPVVRfVVMpOwo+Pj4+PiDCoCB9 Cj4+Pj4+IMKgICsjaWYgMCAvKiBYZW46IFRoZXJlIGlzIG5vIE1TSSBzdXBwb3J0IGFzIHlldCAq Lwo+Pj4+PiDCoCBzdGF0aWMgdm9pZCBhcm1fc21tdV9mcmVlX21zaXModm9pZCAqZGF0YSkKPj4+ Pj4gwqAgewo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7Cj4+Pj4+ IEBAIC0yMjQ3LDEyICsyNzI4LDE1IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3NldHVwX21zaXMo c3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4+Pj4gwqDCoMKgwqDCoCAvKiBBZGQgY2Fs bGJhY2sgdG8gZnJlZSBNU0lzIG9uIHRlYXJkb3duICovCj4+Pj4+IMKgwqDCoMKgwqAgZGV2bV9h ZGRfYWN0aW9uKGRldiwgYXJtX3NtbXVfZnJlZV9tc2lzLCBkZXYpOwo+Pj4+PiDCoCB9Cj4+Pj4+ ICsjZW5kaWYKPj4+Pj4gwqAgwqAgc3RhdGljIHZvaWQgYXJtX3NtbXVfc2V0dXBfdW5pcXVlX2ly cXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4+Pj4gwqAgewo+Pj4+PiDCoMKgwqDC oMKgIGludCBpcnEsIHJldDsKPj4+Pj4gwqAgKyNpZiAwIC8qWGVuOiBDYW5ub3Qgc2V0dXAgbXNp cyBmb3Igbm93ICovCj4+Pj4+IMKgwqDCoMKgwqAgYXJtX3NtbXVfc2V0dXBfbXNpcyhzbW11KTsK Pj4+Pj4gKyNlbmRpZgo+Pj4+PiDCoCDCoMKgwqDCoMKgIC8qIFJlcXVlc3QgaW50ZXJydXB0IGxp bmVzICovCj4+Pj4+IMKgwqDCoMKgwqAgaXJxID0gc21tdS0+ZXZ0cS5xLmlycTsKPj4+Pj4gQEAg LTIzMTYsOSArMjgwMCwxMyBAQCBzdGF0aWMgaW50IGFybV9zbW11X3NldHVwX2lycXMoc3RydWN0 IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBDYXZp dW0gVGh1bmRlclgyIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgbm90IHN1cHBvcnQgdW5pcXVlCj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICogaXJxIGxpbmVzLiBVc2Ugc2luZ2xlIGlycSBsaW5l IGZvciBhbGwgdGhlIFNNTVV2MyBpbnRlcnJ1cHRzLgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqLwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2ly cShzbW11LT5kZXYsIGlycSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgICogWGVuOiBEb2VzIG5vdCBzdXBwb3J0IHRocmVhZGVkIGlycXMsIHNvIHNlcmlh bGlzZSB0aGUgc2V0dXAuCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgICogVGhpcyBpcyB0aGUgc2Ft ZSBmb3IgcHJpcyBhbmQgZXZlbnQgaW50ZXJydXB0IGxpbmVzIG9uIG90aGVyCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgICogc3lzdGVtcwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShzbW11LT5kZXYsIGlycSwKPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFybV9zbW11X2Nv bWJpbmVkX2lycV9oYW5kbGVyLAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYXJtX3NtbXVfY29tYmluZWRfaXJxX3RocmVhZCwKPj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElSUUZfT05FU0hPVCwKPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJhcm0tc21tdS12My1jb21iaW5l ZC1pcnEiLCBzbW11KTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+Pj4+ PiBAQCAtMjU0Miw4ICszMDMwLDE0IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3By b2JlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1NUQUxMUzsKPj4+Pj4gwqDCoMKgwqDC oCB9Cj4+Pj4+IMKgICsvKgo+Pj4+PiArICogWGVuOiBCbG9jayBzdGFnZSAxIHRyYW5zbGF0aW9u cy4gQnkgZG9pbmcgdGhpcyBoZXJlIHdlIGRvIG5vdCBuZWVkIHRvIHNldCB0aGUKPj4+Pj4gKyAq IGRvbWFpbi0+c3RhZ2UgZXhwbGljaXRseS4KPj4+Pj4gKyAqLwo+Pj4+PiArI2lmIDAKPj4+Pj4g wqDCoMKgwqDCoCBpZiAocmVnICYgSURSMF9TMVApCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBz bW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MxOwo+Pj4+PiArI2VuZGlmCj4+ Pj4+IMKgIMKgwqDCoMKgwqAgaWYgKHJlZyAmIElEUjBfUzJQKQo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9UUkFOU19TMjsKPj4+Pj4gQEAg LTI2MTYsMTAgKzMxMTAsMTIgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfaHdfcHJvYmUo c3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4+Pj4gwqDCoMKgwqDCoCBpZiAocmVnICYg SURSNV9HUkFONEspCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzbW11LT5wZ3NpemVfYml0bWFw IHw9IFNaXzRLIHwgU1pfMk0gfCBTWl8xRzsKPj4+Pj4gwqAgKyNpZiAwIC8qIFhlbjogU01NVSBv cHMgZG8gbm90IGhhdmUgYSBwZ3NpemVfYml0bWFwIG1lbWJlciBmb3IgWGVuICovCj4+Pj4+IMKg wqDCoMKgwqAgaWYgKGFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwID09IC0xVUwpCj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCA9IHNtbXUtPnBnc2l6 ZV9iaXRtYXA7Cj4+Pj4+IMKgwqDCoMKgwqAgZWxzZQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg YXJtX3NtbXVfb3BzLnBnc2l6ZV9iaXRtYXAgfD0gc21tdS0+cGdzaXplX2JpdG1hcDsKPj4+Pj4g KyNlbmRpZgo+Pj4+PiDCoCDCoMKgwqDCoMKgIC8qIE91dHB1dCBhZGRyZXNzIHNpemUgKi8KPj4+ Pj4gwqDCoMKgwqDCoCBzd2l0Y2ggKHJlZyAmIElEUjVfT0FTX01BU0sgPDwgSURSNV9PQVNfU0hJ RlQpIHsKPj4+Pj4gQEAgLTI2ODAsNyArMzE3Niw4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2 aWNlX2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+Pj4gwqDCoMKg wqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzbW11LT5kZXY7Cj4+Pj4+IMKgwqDCoMKgwqAgc3Ry dWN0IGFjcGlfaW9ydF9ub2RlICpub2RlOwo+Pj4+PiDCoCAtwqDCoMKgIG5vZGUgPSAqKHN0cnVj dCBhY3BpX2lvcnRfbm9kZSAqKilkZXZfZ2V0X3BsYXRkYXRhKGRldik7Cj4+Pj4+ICvCoMKgwqAg LyogWGVuOiBNb2RpZmljYXRpb24gdG8gZ2V0IGlvcnRfbm9kZSAqLwo+Pj4+PiArwqDCoMKgIG5v ZGUgPSAoc3RydWN0IGFjcGlfaW9ydF9ub2RlICopZGV2LT5hY3BpX25vZGU7Cj4+Pj4+IMKgIMKg wqDCoMKgwqAgLyogUmV0cmlldmUgU01NVXYzIHNwZWNpZmljIGRhdGEgKi8KPj4+Pj4gwqDCoMKg wqDCoCBpb3J0X3NtbXUgPSAoc3RydWN0IGFjcGlfaW9ydF9zbW11X3YzICopbm9kZS0+bm9kZV9k YXRhOwo+Pj4+PiBAQCAtMjcwMyw3ICszMjAwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXJtX3Nt bXVfZGV2aWNlX2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+Pj4g wqAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4+Pj4+IMKgIHsKPj4+Pj4gLcKgwqDC oCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+Pj4+PiArwqDCoMKgIHN0cnVjdCBk ZXZpY2UgKmRldiA9IHBkZXY7Cj4+Pj4+IMKgwqDCoMKgwqAgdTMyIGNlbGxzOwo+Pj4+PiDCoMKg wqDCoMKgIGludCByZXQgPSAtRUlOVkFMOwo+Pj4+PiDCoCBAQCAtMjcxNiw2ICszMjEzLDcgQEAg c3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKPj4+Pj4gwqAgwqDCoMKgwqDCoCBwYXJzZV9kcml2ZXJfb3B0aW9ucyhzbW11KTsK Pj4+Pj4gwqAgK8KgwqDCoCAvKiBYZW46IG9mX2RtYV9pc19jb2hlcmVudCBpcyBhIHN0dWIgdGls bCBkdCBzdXBwb3J0IGlzIGludHJvZHVjZWQgKi8KPj4+Pj4gwqDCoMKgwqDCoCBpZiAob2ZfZG1h X2lzX2NvaGVyZW50KGRldi0+b2Zfbm9kZSkpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzbW11 LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX0NPSEVSRU5DWTsKPj4+Pj4gwqAgQEAgLTI3MzQs OSArMzIzMiwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+PiDCoCB7Cj4+Pj4+IMKgwqDCoMKgwqAgaW50IGlycSwg cmV0Owo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCByZXNvdXJjZSAqcmVzOwo+Pj4+PiArI2lmIDAg LypYZW46IERvIG5vdCBuZWVkIHRvIHNldHVwIHN5c2ZzICovCj4+Pj4+IMKgwqDCoMKgwqAgcmVz b3VyY2Vfc2l6ZV90IGlvYWRkcjsKPj4+Pj4gKyNlbmRpZgo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKnNtbXU7Cj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRldmljZSAqZGV2 ID0gJnBkZXYtPmRldjsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZGV2Oy8q IFhlbjogZGV2IGlzIGlnbm9yZWQgKi8KPj4+Pj4gwqDCoMKgwqDCoCBib29sIGJ5cGFzczsKPj4+ Pj4gwqAgwqDCoMKgwqDCoCBzbW11ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzbW11KSwg R0ZQX0tFUk5FTCk7Cj4+Pj4+IEBAIC0yNzYzLDcgKzMyNjMsOSBAQCBzdGF0aWMgaW50IGFybV9z bW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJNTUlPIHJlZ2lvbiB0b28gc21hbGwgKCVwcilc biIsIHJlcyk7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4g wqDCoMKgwqDCoCB9Cj4+Pj4+ICsjaWYgMCAvKlhlbjogRG8gbm90IG5lZWQgdG8gc2V0dXAgc3lz ZnMgKi8KPj4+Pj4gwqDCoMKgwqDCoCBpb2FkZHIgPSByZXMtPnN0YXJ0Owo+Pj4+PiArI2VuZGlm Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgc21tdS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlcyk7Cj4+Pj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihzbW11LT5iYXNlKSkKPj4+Pj4g QEAgLTI4MDIsMTMgKzMzMDQsMTggQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgLyogUmVjb3JkIG91ciBwcml2YXRlIGRldmlj ZSBzdHJ1Y3R1cmUgKi8KPj4+Pj4gK8KgwqDCoCAvKiBYZW46IFNNTVUgaXMgbm90IHRyZWF0ZWQg YSBhIHBsYXRmb3JtIGRldmljZSovCj4+Pj4+ICsjaWYgMAo+Pj4+PiDCoMKgwqDCoMKgIHBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHNtbXUpOwo+Pj4+PiArI2VuZGlmCj4+Pj4+IMKgIMKgwqDC oMKgwqAgLyogUmVzZXQgdGhlIGRldmljZSAqLwo+Pj4+PiDCoMKgwqDCoMKgIHJldCA9IGFybV9z bW11X2RldmljZV9yZXNldChzbW11LCBieXBhc3MpOwo+Pj4+PiDCoMKgwqDCoMKgIGlmIChyZXQp Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiDCoCArLyogWGVuOiBO b3QgY3JlYXRpbmcgYW4gSU9NTVUgZGV2aWNlIGxpc3QgZm9yIFhlbiAqLwo+Pj4+PiArI2lmIDAK Pj4+Pj4gwqDCoMKgwqDCoCAvKiBBbmQgd2UncmUgdXAuIEdvIGdvIGdvISAqLwo+Pj4+PiDCoMKg wqDCoMKgIHJldCA9IGlvbW11X2RldmljZV9zeXNmc19hZGQoJnNtbXUtPmlvbW11LCBkZXYsIE5V TEwsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJz bW11My4lcGEiLCAmaW9hZGRyKTsKPj4+Pj4gQEAgLTI4NDQsOSArMzM1MSwyMCBAQCBzdGF0aWMg aW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4+ICsjZW5kaWYKPj4+ Pj4gK8KgwqDCoCAvKgo+Pj4+PiArwqDCoMKgwqAgKiBYZW46IEtlZXAgYSBsaXN0IG9mIGFsbCBw cm9iZWQgZGV2aWNlcy4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcXVlcnkKPj4+Pj4gK8KgwqDCoMKg ICogdGhlIHNtbXUgZGV2aWNlcyBiYXNlZCBvbiB0aGUgZndub2RlLgo+Pj4+PiArwqDCoMKgwqAg Ki8KPj4+Pj4gK8KgwqDCoCBJTklUX0xJU1RfSEVBRCgmc21tdS0+ZGV2aWNlcyk7Cj4+Pj4+ICvC oMKgwqAgc3Bpbl9sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOwo+Pj4+PiArwqDCoMKgIGxp c3RfYWRkKCZzbW11LT5kZXZpY2VzLCAmYXJtX3NtbXVfZGV2aWNlcyk7Cj4+Pj4+ICvCoMKgwqAg c3Bpbl91bmxvY2soJmFybV9zbW11X2RldmljZXNfbG9jayk7Cj4+Pj4+IMKgwqDCoMKgwqAgcmV0 dXJuIDA7Cj4+Pj4+IMKgIH0KPj4+Pj4gwqAgKy8qIFhlbjogVW51c2VkIGZ1bmN0aW9uICovCj4+ Pj4+ICsjaWYgMAo+Pj4+PiDCoCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+Pj4gwqAgewo+Pj4+PiDCoMKgwqDCoMKgIHN0 cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK Pj4+Pj4gQEAgLTI4NjAsNiArMzM3OCw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2RldmljZV9z aHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+PiDCoCB7Cj4+Pj4+IMKg wqDCoMKgwqAgYXJtX3NtbXVfZGV2aWNlX3JlbW92ZShwZGV2KTsKPj4+Pj4gwqAgfQo+Pj4+PiAr I2VuZGlmCj4+Pj4+ICsKPj4+Pj4gwqAgwqAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPj4+Pj4gwqDCoMKgwqDCoCB7IC5jb21wYXRpYmxl ID0gImFybSxzbW11LXYzIiwgfSwKPj4+Pj4gQEAgLTI4NjcsNiArMzM4Nyw3IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV9zbW11X29mX21hdGNoW10gPSB7Cj4+Pj4+IMKg IH07Cj4+Pj4+IMKgIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFybV9zbW11X29mX21hdGNoKTsK Pj4+Pj4gwqAgKyNpZiAwCj4+Pj4+IMKgIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFy bV9zbW11X2RyaXZlciA9IHsKPj4+Pj4gwqDCoMKgwqDCoCAuZHJpdmVywqDCoMKgID0gewo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgLm5hbWXCoMKgwqDCoMKgwqDCoCA9ICJhcm0tc21tdS12MyIs Cj4+Pj4+IEBAIC0yODgzLDMgKzM0MDQsMzE2IEBAIElPTU1VX09GX0RFQ0xBUkUoYXJtX3NtbXV2 MywgImFybSxzbW11LXYzIiwgTlVMTCk7Cj4+Pj4+IMKgIE1PRFVMRV9ERVNDUklQVElPTigiSU9N TVUgQVBJIGZvciBBUk0gYXJjaGl0ZWN0ZWQgU01NVXYzIGltcGxlbWVudGF0aW9ucyIpOwo+Pj4+ PiDCoCBNT0RVTEVfQVVUSE9SKCJXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4iKTsK Pj4+Pj4gwqAgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+Pj4+PiArI2VuZGlmCj4+Pj4+ICsK Pj4+Pj4gKy8qKioqKiBTdGFydCBvZiBYZW4gc3BlY2lmaWMgY29kZSAqKioqKi8KPj4+Pj4gKwo+ Pj4+PiArc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKHN0 cnVjdCBkb21haW4gKmQpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X3hl bl9kb21haW4gKnNtbXVfZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4+Pj4+ICvC oMKgwqAgc3RydWN0IGlvbW11X2RvbWFpbiAqY2ZnOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgc3Bp bl9sb2NrKCZzbW11X2RvbWFpbi0+bG9jayk7Cj4+Pj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9l bnRyeShjZmcsICZzbW11X2RvbWFpbi0+Y29udGV4dHMsIGxpc3QpIHsKPj4+Pj4gK8KgwqDCoMKg wqDCoMKgIC8qCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgICogT25seSBpbnZhbGlkYXRlIHRoZSBj b250ZXh0IHdoZW4gU01NVSBpcyBwcmVzZW50Lgo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIFRo aXMgaXMgYmVjYXVzZSB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbiBpcyBkZWxheWVkCj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgICogdW50aWwgYSBtYXN0ZXIgaGFzIGJlZW4gYWRkZWQuCj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHko IUFDQ0VTU19PTkNFKGNmZy0+cHJpdi0+c21tdSkpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb250aW51ZTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGFybV9zbW11X3RsYl9pbnZfY29u dGV4dChjZmctPnByaXYpOwo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gK8KgwqDCoCBzcGluX3VubG9j aygmc21tdV9kb21haW4tPmxvY2spOwo+Pj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+PiArfQo+ Pj4+PiArCj4+Pj4+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9pb3RsYl9mbHVz aChzdHJ1Y3QgZG9tYWluICpkLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZ2ZuLAo+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBwYWdlX2Nv dW50KQo+Pj4+PiArewo+Pj4+PiArwqDCoMKgIHJldHVybiBhcm1fc21tdV9pb3RsYl9mbHVzaF9h bGwoZCk7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgaW9tbXVfZG9tYWlu ICphcm1fc21tdV9nZXRfZG9tYWluKHN0cnVjdCBkb21haW4gKmQsCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldikK Pj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47Cj4+Pj4+ ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4+Pj4+ICvC oMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qg YXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbjsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHhlbl9k b21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHNt bXUgPSBhcm1fc21tdV9nZXRfYnlfZndub2RlKGRldi0+aW9tbXVfZndzcGVjLT5pb21tdV9md25v ZGUpOwo+Pj4+PiArwqDCoMKgIGlmICghc21tdSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biBOVUxMOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgLyoKPj4+Pj4gK8KgwqDCoMKgICogTG9vcCB0 aHJvdWdoIHRoZSAmeGVuX2RvbWFpbi0+Y29udGV4dHMgdG8gbG9jYXRlIGEgY29udGV4dAo+Pj4+ PiArwqDCoMKgwqAgKiBhc3NpZ25lZCB0byB0aGlzIFNNTVUKPj4+Pj4gK8KgwqDCoMKgICovCj4+ Pj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ4ZW5fZG9tYWluLT5jb250 ZXh0cywgbGlzdCkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgc21tdV9kb21haW4gPSB0b19zbW11 X2RvbWFpbihkb21haW4pOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHNtbXVfZG9tYWluLT5z bW11ID09IHNtbXUpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBkb21haW47 Cj4+Pj4+ICvCoMKgwqAgfQo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+ ICt9Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9t YWluKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBs aXN0X2RlbCgmZG9tYWluLT5saXN0KTsKPj4+Pj4gK8KgwqDCoCBhcm1fc21tdV9kb21haW5fZnJl ZShkb21haW4pOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgaW50IGFybV9zbW11X2Fz c2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqZCwgdTggZGV2Zm4sCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2LCB1MzIgZmxhZykKPj4+ Pj4gK3sKPj4+Pj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW9t bXVfZG9tYWluICpkb21haW47Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21h aW4gKnhlbl9kb21haW47Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X2RvbWFpbiAqYXJt X3NtbXU7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCB4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5h cmNoLnByaXY7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBpZiAoIWRldi0+YXJjaGRhdGEuaW9tbXUp IHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldi0+YXJjaGRhdGEuaW9tbXUgPSB4emFsbG9jKHN0 cnVjdCBhcm1fc21tdV94ZW5fZGV2aWNlKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZGV2 LT5hcmNoZGF0YS5pb21tdSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F Tk9NRU07Cj4+Pj4+ICvCoMKgwqAgfQo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgcmV0ID0gYXJtX3Nt bXVfYWRkX2RldmljZShkZXYpOwo+Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZ4ZW5f ZG9tYWluLT5sb2NrKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIC8qCj4+Pj4+ICvCoMKgwqDCoCAq IENoZWNrIHRvIHNlZSBpZiBhbiBpb21tdV9kb21haW4gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMg eGVuIGRvbWFpbgo+Pj4+PiArwqDCoMKgwqAgKiB1bmRlciB0aGUgc2FtZSBTTU1VCj4+Pj4+ICvC oMKgwqDCoCAqLwo+Pj4+PiArwqDCoMKgIGRvbWFpbiA9IGFybV9zbW11X2dldF9kb21haW4oZCwg ZGV2KTsKPj4+Pj4gK8KgwqDCoCBpZiAoIWRvbWFpbikgewo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBkb21haW4gPSBhcm1fc21tdV9kb21haW5fYWxsb2MoSU9NTVVfRE9NQUlOX0RNQSk7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWRvbWFpbikgewo+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSAtRU5PTUVNOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIG91dDsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgYXJtX3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4pOwo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgYXJtX3NtbXUtPnMyX2NmZy5kb21haW4gPSBkOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCAvKiBDaGFpbiB0aGUgbmV3IGNvbnRleHQgdG8gdGhlIGRvbWFpbiAqLwo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgbGlzdF9hZGQoJmRvbWFpbi0+bGlzdCwgJnhlbl9kb21haW4tPmNvbnRl eHRzKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHJldCA9 IGFybV9zbW11X2F0dGFjaF9kZXYoZG9tYWluLCBkZXYpOwo+Pj4+PiArwqDCoMKgIGlmIChyZXQp IHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkb21haW4tPnJlZi5jb3VudGVyID09IDApCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWlu KGRvbWFpbik7Cj4+Pj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGF0 b21pY19pbmMoJmRvbWFpbi0+cmVmKTsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICsKPj4+Pj4gK291 dDoKPj4+Pj4gK8KgwqDCoCBzcGluX3VubG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4+Pj4+ICvC oMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiArc3RhdGljIGludCBhcm1f c21tdV9kZWFzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGRldmljZSAqZGV2KQo+ Pj4+PiArewo+Pj4+PiArwqDCoMKgIHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiA9IGFybV9z bW11X2dldF9kb21haW4oZCwgZGV2KTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfeGVu X2RvbWFpbiAqeGVuX2RvbWFpbjsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9tYWlu ICphcm1fc21tdSA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDC oCB4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4+Pj4+ICsKPj4+Pj4gK8Kg wqDCoCBpZiAoIWFybV9zbW11IHx8IGFybV9zbW11LT5zMl9jZmcuZG9tYWluICE9IGQpIHsKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiIG5vdCBhdHRhY2hlZCB0byBkb21haW4g JWRcbiIsIGQtPmRvbWFpbl9pZCk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVTUkNI Owo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHNwaW5fbG9jaygmeGVuX2Rv bWFpbi0+bG9jayk7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBhcm1fc21tdV9kZXRhY2hfZGV2KGRl dik7Cj4+Pj4+ICvCoMKgwqAgYXRvbWljX2RlYygmZG9tYWluLT5yZWYpOwo+Pj4+PiArCj4+Pj4+ ICvCoMKgwqAgaWYgKGRvbWFpbi0+cmVmLmNvdW50ZXIgPT0gMCkKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWluKGRvbWFpbik7Cj4+Pj4+ICsKPj4+Pj4g K8KgwqDCoCBzcGluX3VubG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4+Pj4+ICsKPj4+Pj4gK8Kg wqDCoCByZXR1cm4gMDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiArc3RhdGljIGludCBhcm1fc21t dV9yZWFzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqcywgc3RydWN0IGRvbWFpbiAqdCwKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4IGRldmZuLMKgIHN0cnVjdCBkZXZp Y2UgKmRldikKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsKPj4+Pj4gKwo+Pj4+ PiArwqDCoMKgIC8qIERvbid0IGFsbG93IHJlbWFwcGluZyBvbiBvdGhlciBkb21haW4gdGhhbiBo d2RvbSAqLwo+Pj4+PiArwqDCoMKgIGlmICh0ICYmIHQgIT0gaGFyZHdhcmVfZG9tYWluKQo+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FUEVSTTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGlm ICh0ID09IHMpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4gKwo+Pj4+PiAr wqDCoMKgIHJldCA9IGFybV9zbW11X2RlYXNzaWduX2RldihzLCBkZXYpOwo+Pj4+PiArwqDCoMKg IGlmIChyZXQpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiArCj4+Pj4+ ICvCoMKgwqAgaWYgKHQpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qIE5vIGZsYWdzIGFyZSBk ZWZpbmVkIGZvciBBUk0uICovCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBhcm1fc21tdV9h c3NpZ25fZGV2KHQsIGRldmZuLCBkZXYsIDApOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJl dCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4gK8KgwqDC oCB9Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+ PiArc3RhdGljIGludCBhcm1fc21tdV9pb21tdV9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpk KQo+Pj4+PiArewo+Pj4+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5f ZG9tYWluOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgeGVuX2RvbWFpbiA9IHh6YWxsb2Moc3RydWN0 IGFybV9zbW11X3hlbl9kb21haW4pOwo+Pj4+PiArwqDCoMKgIGlmICgheGVuX2RvbWFpbikKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAg c3Bpbl9sb2NrX2luaXQoJnhlbl9kb21haW4tPmxvY2spOwo+Pj4+PiArwqDCoMKgIElOSVRfTElT VF9IRUFEKCZ4ZW5fZG9tYWluLT5jb250ZXh0cyk7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBkb21f aW9tbXUoZCktPmFyY2gucHJpdiA9IHhlbl9kb21haW47Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBy ZXR1cm4gMDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHZvaWQgX19od2RvbV9pbml0 IGFybV9zbW11X2lvbW11X2h3ZG9tX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKPj4+Pj4gK3sKPj4+ Pj4gK30KPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfaW9tbXVfZG9tYWluX3Rl YXJkb3duKHN0cnVjdCBkb21haW4gKmQpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGFy bV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsK Pj4+Pj4gKwo+Pj4+PiArwqDCoMKgIEFTU0VSVChsaXN0X2VtcHR5KCZ4ZW5fZG9tYWluLT5jb250 ZXh0cykpOwo+Pj4+PiArwqDCoMKgIHhmcmVlKHhlbl9kb21haW4pOwo+Pj4+PiArfQo+Pj4+PiAr Cj4+Pj4+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9tYXBfcGFnZShzdHJ1Y3Qg ZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBtZm4sIHVuc2lnbmVkIGludCBmbGFncykKPj4+Pj4gK3sKPj4+Pj4g K8KgwqDCoCBwMm1fdHlwZV90IHQ7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCAvKgo+Pj4+PiArwqDC oMKgwqAgKiBHcmFudCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgRE1BIHJlcXVlc3RzLiBUaGUg ZGV2X2J1c19hZGRyCj4+Pj4+ICvCoMKgwqDCoCAqIHJldHVybmVkIGJ5IHRoZSBoeXBlcmNhbGwg aXMgdGhlIE1GTiAobm90IHRoZSBJUEEpLiBGb3IgZGV2aWNlCj4+Pj4+ICvCoMKgwqDCoCAqIHBy b3RlY3RlZCBieSBhbiBJT01NVSwgWGVuIG5lZWRzIHRvIGFkZCBhIDE6MSBtYXBwaW5nIGluIHRo ZSBkb21haW4KPj4+Pj4gK8KgwqDCoMKgICogcDJtIHRvIGFsbG93IERNQSByZXF1ZXN0IHRvIHdv cmsuCj4+Pj4+ICvCoMKgwqDCoCAqIFRoaXMgaXMgb25seSB2YWxpZCB3aGVuIHRoZSBkb21haW4g aXMgZGlyZWN0ZWQgbWFwcGVkLiBIZW5jZSB0aGlzCj4+Pj4+ICvCoMKgwqDCoCAqIGZ1bmN0aW9u IHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZ250dGFiIGNvZGUgd2l0aCBnZm4gPT0gbWZuLgo+Pj4+ PiArwqDCoMKgwqAgKi8KPj4+Pj4gK8KgwqDCoCBCVUdfT04oIWlzX2RvbWFpbl9kaXJlY3RfbWFw cGVkKGQpKTsKPj4+Pj4gK8KgwqDCoCBCVUdfT04obWZuICE9IGdmbik7Cj4+Pj4+ICsKPj4+Pj4g K8KgwqDCoCAvKiBXZSBvbmx5IHN1cHBvcnQgcmVhZGFibGUgYW5kIHdyaXRhYmxlIGZsYWdzICov Cj4+Pj4+ICvCoMKgwqAgaWYgKCEoZmxhZ3MgJiAoSU9NTVVGX3JlYWRhYmxlIHwgSU9NTVVGX3dy aXRhYmxlKSkpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4gKwo+ Pj4+PiArwqDCoMKgIHQgPSAoZmxhZ3MgJiBJT01NVUZfd3JpdGFibGUpID8gcDJtX2lvbW11X21h cF9ydyA6IHAybV9pb21tdV9tYXBfcm87Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCAvKgo+Pj4+PiAr wqDCoMKgwqAgKiBUaGUgZnVuY3Rpb24gZ3Vlc3RfcGh5c21hcF9hZGRfZW50cnkgcmVwbGFjZXMg dGhlIGN1cnJlbnQgbWFwcGluZwo+Pj4+PiArwqDCoMKgwqAgKiBpZiB0aGVyZSBpcyBhbHJlYWR5 IG9uZS4uLgo+Pj4+PiArwqDCoMKgwqAgKi8KPj4+Pj4gK8KgwqDCoCByZXR1cm4gZ3Vlc3RfcGh5 c21hcF9hZGRfZW50cnkoZCwgX2dmbihnZm4pLCBfbWZuKG1mbiksIDAsIHQpOwo+Pj4+PiArfQo+ Pj4+PiArCj4+Pj4+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV91bm1hcF9wYWdl KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuKQo+Pj4+PiArewo+Pj4+PiArwqDC oMKgIC8qCj4+Pj4+ICvCoMKgwqDCoCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNl ZCBieSBnbnR0YWIgY29kZSB3aGVuIHRoZSBkb21haW4KPj4+Pj4gK8KgwqDCoMKgICogaXMgZGly ZWN0IG1hcHBlZAo+Pj4+PiArwqDCoMKgwqAgKi8KPj4+Pj4gK8KgwqDCoCBpZiAoIWlzX2RvbWFp bl9kaXJlY3RfbWFwcGVkKGQpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7 Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gZ3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShk LCBfZ2ZuKGdmbiksIF9tZm4oZ2ZuKSwgMCk7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11X29wcyA9IHsKPj4+Pj4gK8Kg wqDCoCAuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAo+Pj4+PiArwqDCoMKgIC5o d2RvbV9pbml0ID0gYXJtX3NtbXVfaW9tbXVfaHdkb21faW5pdCwKPj4+Pj4gK8KgwqDCoCAudGVh cmRvd24gPSBhcm1fc21tdV9pb21tdV9kb21haW5fdGVhcmRvd24sCj4+Pj4+ICvCoMKgwqAgLmlv dGxiX2ZsdXNoID0gYXJtX3NtbXVfaW90bGJfZmx1c2gsCj4+Pj4+ICvCoMKgwqAgLmlvdGxiX2Zs dXNoX2FsbCA9IGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbCwKPj4+Pj4gK8KgwqDCoCAuYXNzaWdu X2RldmljZSA9IGFybV9zbW11X2Fzc2lnbl9kZXYsCj4+Pj4+ICvCoMKgwqAgLnJlYXNzaWduX2Rl dmljZSA9IGFybV9zbW11X3JlYXNzaWduX2RldiwKPj4+Pj4gK8KgwqDCoCAubWFwX3BhZ2UgPSBh cm1fc21tdV9tYXBfcGFnZSwKPj4+Pj4gK8KgwqDCoCAudW5tYXBfcGFnZSA9IGFybV9zbW11X3Vu bWFwX3BhZ2UsCj4+Pj4+ICt9Owo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMKPj4+Pj4gK3N0cnVjdCBh cm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5k bGUgKmZ3bm9kZSkKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11ID0gTlVMTDsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIHNwaW5fbG9jaygmYXJtX3NtbXVf ZGV2aWNlc19sb2NrKTsKPj4+Pj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KHNtbXUsICZh cm1fc21tdV9kZXZpY2VzLCBkZXZpY2VzKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc21t dS0+ZGV2LT5md25vZGUgPT0gZndub2RlKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmFybV9zbW11 X2RldmljZXNfbG9jayk7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gc21tdTsKPj4+Pj4g K30KPj4+Pj4gKwo+Pj4+PiArc3RhdGljIF9faW5pdCBpbnQgYXJtX3NtbXVfZHRfaW5pdChzdHJ1 Y3QgZHRfZGV2aWNlX25vZGUgKmRldiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb25zdCB2b2lkICpkYXRhKQo+Pj4+PiArewo+Pj4+PiArwqDCoMKgIGludCBy YzsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIC8qCj4+Pj4+ICvCoMKgwqDCoCAqIEV2ZW4gaWYgdGhl IGRldmljZSBjYW4ndCBiZSBpbml0aWFsaXplZCwgd2UgZG9uJ3Qgd2FudCB0bwo+Pj4+PiArwqDC oMKgwqAgKiBnaXZlIHRoZSBTTU1VIGRldmljZSB0byBkb20wLgo+Pj4+PiArwqDCoMKgwqAgKi8K Pj4+Pj4gK8KgwqDCoCBkdF9kZXZpY2Vfc2V0X3VzZWRfYnkoZGV2LCBET01JRF9YRU4pOwo+Pj4+ PiArCj4+Pj4+ICvCoMKgwqAgcmMgPSBhcm1fc21tdV9kZXZpY2VfcHJvYmUoZHRfdG9fZGV2KGRl dikpOwo+Pj4+PiArwqDCoMKgIGlmIChyYykKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBy YzsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29w cyk7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+ PiArRFRfREVWSUNFX1NUQVJUKHNtbXV2MywgIkFSTSBTTU1VIFYzIiwgREVWSUNFX0lPTU1VKQo+ Pj4+PiArwqDCoMKgIC5kdF9tYXRjaCA9IGFybV9zbW11X29mX21hdGNoLAo+Pj4+PiArwqDCoMKg IC5pbml0ID0gYXJtX3NtbXVfZHRfaW5pdCwKPj4+Pj4gK0RUX0RFVklDRV9FTkQKPj4+Pj4gKwo+ Pj4+PiArI2lmZGVmIENPTkZJR19BQ1BJCj4+Pj4+ICsvKiBTZXQgdXAgdGhlIElPTU1VICovCj4+ Pj4+ICtzdGF0aWMgaW50IF9faW5pdCBhcm1fc21tdV9hY3BpX2luaXQoY29uc3Qgdm9pZCAqZGF0 YSkKPj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBpbnQgcmM7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBy YyA9IGFybV9zbW11X2RldmljZV9wcm9iZSgoc3RydWN0IGRldmljZSAqKWRhdGEpOwo+Pj4+PiAr wqDCoMKgIGlmIChyYykKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByYzsKPj4+Pj4gKwo+ Pj4+PiArwqDCoMKgIGlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7Cj4+Pj4+ICvC oMKgwqAgcmV0dXJuIDA7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gK0FDUElfREVWSUNFX1NUQVJU KGFzbW11djMsICJBUk0gU01NVSBWMyIsIERFVklDRV9JT01NVSkKPj4+Pj4gK8KgwqDCoCAuY2xh c3NfdHlwZSA9IEFDUElfSU9SVF9OT0RFX1NNTVVfVjMsCj4+Pj4+ICvCoMKgwqAgLmluaXQgPSBh cm1fc21tdV9hY3BpX2luaXQsCj4+Pj4+ICtBQ1BJX0RFVklDRV9FTkQKPj4+Pj4gKwo+Pj4+PiAr I2VuZGlmCj4+Pj4+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0Lmgg Yi94ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgKPj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPj4+Pj4gaW5kZXggMDAwMDAwMDAwMC4uODAzN2JlMGEzZQo+Pj4+PiAtLS0gL2Rldi9udWxs Cj4+Pj4+ICsrKyBiL3hlbi9pbmNsdWRlL3hlbi9saW51eF9jb21wYXQuaAo+Pj4+PiBAQCAtMCww ICsxLDg0IEBACj4+Pj4+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4+Pj4+ICsgKiBpbmNsdWRl L3hlbi9saW51eF9jb21wYXQuaAo+Pj4+PiArICoKPj4+Pj4gKyAqIENvbXBhdGliaWxpdHkgZGVm aW5lcyBmb3IgcG9ydGluZyBjb2RlIGZyb20gTGludXggdG8gWGVuCj4+Pj4+ICsgKgo+Pj4+PiAr ICogQ29weXJpZ2h0IChjKSAyMDE3IExpbmFybyBMaW1pdGVkCj4+Pj4+ICsgKgo+Pj4+PiArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKPj4+Pj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+Pj4+ICsgKiB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+Pj4+ PiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4+Pj4gKyAqCj4+Pj4+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPj4+Pj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+Pj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZQo+Pj4+PiArICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4+Pj4gKyAqCj4+Pj4+ ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQo+Pj4+PiArICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPj4+Pj4gKyAqLwo+Pj4+PiArCj4+ Pj4+ICsjaWZuZGVmIF9fWEVOX0xJTlVYX0NPTVBBVF9IX18KPj4+Pj4gKyNkZWZpbmUgX19YRU5f TElOVVhfQ09NUEFUX0hfXwo+Pj4+PiArCj4+Pj4+ICsjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Cj4+ Pj4+ICsKPj4+Pj4gK3R5cGVkZWYgcGFkZHJfdCBwaHlzX2FkZHJfdDsKPj4+Pj4gK3R5cGVkZWYg cGFkZHJfdCBkbWFfYWRkcl90Owo+Pj4+PiArCj4+Pj4+ICt0eXBlZGVmIHVuc2lnbmVkIGludCBn ZnBfdDsKPj4+Pj4gKyNkZWZpbmUgR0ZQX0tFUk5FTCAwCj4+Pj4+ICsjZGVmaW5lIF9fR0ZQX1pF Uk8gMHgwMVUKPj4+Pj4gKwo+Pj4+PiArLyogSGVscGVycyBmb3IgSVJRIGZ1bmN0aW9ucyAqLwo+ Pj4+PiArI2RlZmluZSBmcmVlX2lycSByZWxlYXNlX2lycQo+Pj4+PiArCj4+Pj4+ICtlbnVtIGly cXJldHVybiB7Cj4+Pj4+ICvCoMKgwqAgSVJRX05PTkUsCj4+Pj4+ICvCoMKgwqAgSVJRX0hBTkRM RUQsCj4+Pj4+ICvCoMKgwqAgSVJRX1dBS0VfVEhSRUFELAo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+ PiArdHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsKPj4+Pj4gKwo+Pj4+PiArLyog RGV2aWNlIGxvZ2dlciBmdW5jdGlvbnMgKi8KPj4+Pj4gKyNkZWZpbmUgZGV2X2RiZyhkZXYsIGZt dCwgLi4uKSBwcmludGsoWEVOTE9HX0RFQlVHIGZtdCwgIyMgX19WQV9BUkdTX18pCj4+Pj4+ICsj ZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19JTkZPIGZtdCwg IyMgX19WQV9BUkdTX18pCj4+Pj4+ICsjZGVmaW5lIGRldl93YXJuKGRldiwgZm10LCAuLi4pIHBy aW50ayhYRU5MT0dfV0FSTklORyBmbXQsICMjIF9fVkFfQVJHU19fKQo+Pj4+PiArI2RlZmluZSBk ZXZfZXJyKGRldiwgZm10LCAuLi4pIHByaW50ayhYRU5MT0dfRVJSIGZtdCwgIyMgX19WQV9BUkdT X18pCj4+Pj4+ICsjZGVmaW5lIGRldl9pbmZvKGRldiwgZm10LCAuLi4pIHByaW50ayhYRU5MT0df SU5GTyBmbXQsICMjIF9fVkFfQVJHU19fKQo+Pj4+PiArCj4+Pj4+ICsjZGVmaW5lIGRldl9lcnJf cmF0ZWxpbWl0ZWQoZGV2LCBmbXQsIC4uLinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFwKPj4+Pj4gK8KgwqDCoMKgIHByaW50ayhYRU5MT0dfRVJSIGZtdCwgIyMgX19WQV9BUkdT X18pCj4+Pj4+ICsKPj4+Pj4gKyNkZWZpbmUgZGV2X25hbWUoZGV2KSBkdF9ub2RlX2Z1bGxfbmFt ZShkZXZfdG9fZHQoZGV2KSkKPj4+Pj4gKwo+Pj4+PiArLyogQWxpYXMgdG8gWGVuIGFsbG9jYXRp b24gaGVscGVycyAqLwo+Pj4+PiArI2RlZmluZSBrZnJlZSB4ZnJlZQo+Pj4+PiArI2RlZmluZSBr bWFsbG9jKHNpemUsIGZsYWdzKSAoe1wKPj4+Pj4gK8KgwqDCoCB2b2lkICpfX3JldF9hbGxvYyA9 IE5VTEw7IFwKPj4+Pj4gK8KgwqDCoCBpZiAoZmxhZ3MgJiBfX0dGUF9aRVJPKSBcCj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBfX3JldF9hbGxvYyA9IF94emFsbG9jKHNpemUsIHNpemVvZih2b2lkICop KTsgXAo+Pj4+PiArwqDCoMKgIGVsc2UgXAo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgX19yZXRfYWxs b2MgPSBfeG1hbGxvYyhzaXplLCBzaXplb2Yodm9pZCAqKSk7IFwKPj4+Pj4gK8KgwqDCoCBfX3Jl dF9hbGxvYzsgXAo+Pj4+PiArfSkKPj4+Pj4gKyNkZWZpbmUga3phbGxvYyhzaXplLCBmbGFncynC oMKgwqDCoMKgwqDCoCBfeHphbGxvYyhzaXplLCBzaXplb2Yodm9pZCAqKSkKPj4+Pj4gKyNkZWZp bmUgZGV2bV9remFsbG9jKGRldiwgc2l6ZSwgZmxhZ3MpwqAgX3h6YWxsb2Moc2l6ZSwgc2l6ZW9m KHZvaWQgKikpCj4+Pj4+ICsjZGVmaW5lIGttYWxsb2NfYXJyYXkoc2l6ZSwgbiwgZmxhZ3MpICh7 XAo+Pj4+PiArwqDCoMKgIHZvaWQgKl9fcmV0X2FsbG9jID0gTlVMTDsgXAo+Pj4+PiArwqDCoMKg IGlmIChmbGFncyAmIF9fR0ZQX1pFUk8pIFwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fcmV0X2Fs bG9jID0gX3h6YWxsb2NfYXJyYXkoc2l6ZSwgc2l6ZW9mKHZvaWQgKiksIG4pOyBcCj4+Pj4+ICvC oMKgwqAgZWxzZSBcCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX3JldF9hbGxvYyA9IF94bWFsbG9j X2FycmF5KHNpemUsIHNpemVvZih2b2lkICopLCBuKTsgXAo+Pj4+PiArwqDCoMKgIF9fcmV0X2Fs bG9jOyBcCj4+Pj4+ICt9KQo+Pj4+PiArCj4+Pj4+ICsvKiBBbGlhcyB0byBYZW4gdGltZSBmdW5j dGlvbnMgKi8KPj4+Pj4gKyNkZWZpbmUga3RpbWVfdCBzX3RpbWVfdAo+Pj4+PiArI2RlZmluZSBr dGltZV9nZXQoKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoTk9XKCkpCj4+Pj4+ICsjZGVmaW5l IGt0aW1lX2FkZF91cyh0LGkpwqDCoMKgwqDCoMKgICh0ICsgTUlDUk9TRUNTKGkpKQo+Pj4+PiAr I2RlZmluZSBrdGltZV9jb21wYXJlKHQsaSnCoMKgwqDCoMKgICh0ID4gKGkpKQo+Pj4+PiArCj4+ Pj4+ICsjZW5kaWYgLyogX19YRU5fTElOVVhfQ09NUEFUX0hfXyAqLwo+Pj4+Cj4+Pj4KPj4+PiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+Pj4+IFhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKPj4+PiBYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPj4+ PiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs Cj4+Pgo+Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwo+PiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IFhlbi1kZXZlbEBsaXN0cy54ZW5wcm9q ZWN0Lm9yZwo+PiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v eGVuLWRldmVsCj4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs