From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 09/11] drm/i915: Merge i915_dma.c into i915_drv.c Date: Mon, 30 May 2016 09:30:12 +0300 Message-ID: <1464589812.4825.0.camel@linux.intel.com> References: <1464357644-16775-1-git-send-email-chris@chris-wilson.co.uk> <1464357644-16775-10-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 209C36E12F for ; Mon, 30 May 2016 06:40:26 +0000 (UTC) In-Reply-To: <1464357644-16775-10-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gcGUsIDIwMTYtMDUtMjcgYXQgMTU6MDAgKzAxMDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBp OTE1X2RtYS5jIHVzZWQgdG8gY29udGFpbiB0aGUgRFJJMS9VTVMgaG9ycm9yIHNob3csIGJ1dCBu b3cgYWxsIHRoYXQKPiByZW1haW5zIGFyZSB0aGUgb3V0LW9mLXBsYWNlIGRyaXZlciBsZXZlbCBp bnRlcmZhY2VzIChzdWNoIGFzCj4gYWxsb2NhdGluZywgaW5pdGlhbGlzaW5nIGFuZCByZWdpc3Rl cmluZyB0aGUgZHJpdmVyKS4gVGhlc2Ugc2hvdWxkIGJlIGluCj4gaTkxNV9kcnYuYyBhbG9uZ3Np ZGUgc2ltaWxhciByb3V0aW5lcyBmb3Igc3VzcGVuZC9yZXN1bWUuCj4gCj4gU2lnbmVkLW9mZi1i eTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpBc3N1bWluZyB0aGlz IHdhcyBOT1AgY2hhbmdlLAoKUmV2aWV3ZWQtYnk6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxh aHRpbmVuQGxpbnV4LmludGVsLmNvbT4KCj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0 ZXJAZmZ3bGwuY2g+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZcKgwqDC oHzCoMKgwqDCoDMgLQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyB8IDE2ODAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmMgfCAyMDE0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCB8wqDCoMKgMTYgKy0KPiDCoDQg ZmlsZXMgY2hhbmdlZCwgMTgyNSBpbnNlcnRpb25zKCspLCAxODg4IGRlbGV0aW9ucygtKQo+IMKg ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDdlMjk0NDQwNmI4Zi4uMmVhN2MyNDU5MjNlIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMTAxLDkgKzEwMSw2IEBAIGk5MTUteSArPSBkdm9f Y2g3MDE3Lm8gXAo+IMKgIyB2aXJ0dWFsIGdwdSBjb2RlCj4gwqBpOTE1LXkgKz0gaTkxNV92Z3B1 Lm8KPiDCoAo+IC0jIGxlZ2FjeSBob3Jyb3JzCj4gLWk5MTUteSArPSBpOTE1X2RtYS5vCj4gLQo+ IMKgb2JqLSQoQ09ORklHX0RSTV9JOTE1KcKgwqArPSBpOTE1Lm8KPiDCoAo+IMKgQ0ZMQUdTX2k5 MTVfdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiBk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwZWM3ODVkNDUwNWUuLjAwMDAwMDAwMDAw MAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiArKysgL2Rldi9udWxs Cj4gQEAgLTEsMTY4MCArMCwwIEBACj4gLS8qIGk5MTVfZG1hLmMgLS0gRE1BIHN1cHBvcnQgZm9y IHRoZSBJOTE1IC0qLSBsaW51eC1jIC0qLQo+IC0gKi8KPiAtLyoKPiAtICogQ29weXJpZ2h0IDIw MDMgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgo+IC0gKiBBbGwg UmlnaHRzIFJlc2VydmVkLgo+IC0gKgo+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+IC0gKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4g LSAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcKPiAtICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAo+IC0gKiBkaXN0cmlidXRlLCBzdWIgbGlj ZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCj4gLSAqIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0bwo+IC0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gLSAqCj4gLSAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlCj4gLSAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCj4gLSAqIG9mIHRoZSBTb2Z0d2FyZS4KPiAt ICoKPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKPiAtICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+IC0gKiBNRVJDSEFOVEFCSUxJVFksIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgo+IC0g KiBJTiBOTyBFVkVOVCBTSEFMTCBUVU5HU1RFTiBHUkFQSElDUyBBTkQvT1IgSVRTIFNVUFBMSUVS UyBCRSBMSUFCTEUgRk9SCj4gLSAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAo+IC0gKiBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQo+IC0g KiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K PiAtICoKPiAtICovCj4gLQo+IC0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6 ICIgZm10Cj4gLQo+IC0jaW5jbHVkZSAKPiAtI2luY2x1ZGUgCj4gLSNpbmNsdWRlIAo+IC0jaW5j bHVkZSAKPiAtI2luY2x1ZGUgImludGVsX2Rydi5oIgo+IC0jaW5jbHVkZSAKPiAtI2luY2x1ZGUg Imk5MTVfZHJ2LmgiCj4gLSNpbmNsdWRlICJpOTE1X3ZncHUuaCIKPiAtI2luY2x1ZGUgImk5MTVf dHJhY2UuaCIKPiAtI2luY2x1ZGUgCj4gLSNpbmNsdWRlIAo+IC0jaW5jbHVkZSAKPiAtI2luY2x1 ZGUgCj4gLSNpbmNsdWRlIAo+IC0jaW5jbHVkZSAKPiAtI2luY2x1ZGUgCj4gLSNpbmNsdWRlIAo+ IC0jaW5jbHVkZSAKPiAtI2luY2x1ZGUgCj4gLSNpbmNsdWRlIAo+IC0jaW5jbHVkZSAKPiAtCj4g LXN0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9sb2FkX2ZhaWxfY291bnQ7Cj4gLQo+IC1ib29sIF9f aTkxNV9pbmplY3RfbG9hZF9mYWlsdXJlKGNvbnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lKQo+IC17 Cj4gLQlpZiAoaTkxNV9sb2FkX2ZhaWxfY291bnQgPj0gaTkxNS5pbmplY3RfbG9hZF9mYWlsdXJl KQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQlpZiAoKytpOTE1X2xvYWRfZmFpbF9jb3VudCA9 PSBpOTE1LmluamVjdF9sb2FkX2ZhaWx1cmUpIHsKPiAtCQlEUk1fSU5GTygiSW5qZWN0aW5nIGZh aWx1cmUgYXQgY2hlY2twb2ludCAldSBbJXM6JWRdXG4iLAo+IC0JCQnCoGk5MTUuaW5qZWN0X2xv YWRfZmFpbHVyZSwgZnVuYywgbGluZSk7Cj4gLQkJcmV0dXJuIHRydWU7Cj4gLQl9Cj4gLQo+IC0J cmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC0jZGVmaW5lIEZET19CVUdfVVJMICJodHRwczovL2J1 Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1EUkkiCj4gLSNkZWZpbmUg RkRPX0JVR19NU0cgIlBsZWFzZSBmaWxlIGEgYnVnIGF0ICIgRkRPX0JVR19VUkwgIiBhZ2FpbnN0 IERSTS9JbnRlbCAiIFwKPiAtCQnCoMKgwqDCoCJwcm92aWRpbmcgdGhlIGRtZXNnIGxvZyBieSBi b290aW5nIHdpdGggZHJtLmRlYnVnPTB4ZiIKPiAtCj4gLXZvaWQKPiAtX19pOTE1X3ByaW50ayhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGNvbnN0IGNoYXIgKmxldmVsLAo+IC0J wqDCoMKgwqDCoMKgY29uc3QgY2hhciAqZm10LCAuLi4pCj4gLXsKPiAtCXN0YXRpYyBib29sIHNo b3duX2J1Z19vbmNlOwo+IC0Jc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldi0+ZGV2 Owo+IC0JYm9vbCBpc19lcnJvciA9IGxldmVsWzFdIDw9IEtFUk5fRVJSWzFdOwo+IC0JYm9vbCBp c19kZWJ1ZyA9IGxldmVsWzFdID09IEtFUk5fREVCVUdbMV07Cj4gLQlzdHJ1Y3QgdmFfZm9ybWF0 IHZhZjsKPiAtCXZhX2xpc3QgYXJnczsKPiAtCj4gLQlpZiAoaXNfZGVidWcgJiYgIShkcm1fZGVi dWcgJiBEUk1fVVRfRFJJVkVSKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JdmFfc3RhcnQoYXJncywg Zm10KTsKPiAtCj4gLQl2YWYuZm10ID0gZm10Owo+IC0JdmFmLnZhID0gJmFyZ3M7Cj4gLQo+IC0J ZGV2X3ByaW50ayhsZXZlbCwgZGV2LCAiWyIgRFJNX05BTUUgIjolcHNdICVwViIsCj4gLQkJwqDC oMKgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCAmdmFmKTsKPiAtCj4gLQlpZiAoaXNfZXJy b3IgJiYgIXNob3duX2J1Z19vbmNlKSB7Cj4gLQkJZGV2X25vdGljZShkZXYsICIlcyIsIEZET19C VUdfTVNHKTsKPiAtCQlzaG93bl9idWdfb25jZSA9IHRydWU7Cj4gLQl9Cj4gLQo+IC0JdmFfZW5k KGFyZ3MpOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBpOTE1X2Vycm9yX2luamVjdGVkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JcmV0dXJuIGk5MTUuaW5qZWN0 X2xvYWRfZmFpbHVyZSAmJgo+IC0JwqDCoMKgwqDCoMKgwqBpOTE1X2xvYWRfZmFpbF9jb3VudCA9 PSBpOTE1LmluamVjdF9sb2FkX2ZhaWx1cmU7Cj4gLX0KPiAtCj4gLSNkZWZpbmUgaTkxNV9sb2Fk X2Vycm9yKGRldl9wcml2LCBmbXQsIC4uLikJCQkJwqDCoMKgwqDCoFwKPiAtCV9faTkxNV9wcmlu dGsoZGV2X3ByaXYsCQkJCQkJwqDCoMKgwqDCoFwKPiAtCQnCoMKgwqDCoMKgwqBpOTE1X2Vycm9y X2luamVjdGVkKGRldl9wcml2KSA/IEtFUk5fREVCVUcgOiBLRVJOX0VSUiwgXAo+IC0JCcKgwqDC oMKgwqDCoGZtdCwgIyNfX1ZBX0FSR1NfXykKPiAtCj4gLXN0YXRpYyBpbnQgaTkxNV9nZXRwYXJh bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+IC0JCQnCoHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JZHJtX2k5MTVfZ2V0cGFyYW1fdCAqcGFyYW0gPSBk YXRhOwo+IC0JaW50IHZhbHVlOwo+IC0KPiAtCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7Cj4gLQlj YXNlIEk5MTVfUEFSQU1fSVJRX0FDVElWRToKPiAtCWNhc2UgSTkxNV9QQVJBTV9BTExPV19CQVRD SEJVRkZFUjoKPiAtCWNhc2UgSTkxNV9QQVJBTV9MQVNUX0RJU1BBVENIOgo+IC0JCS8qIFJlamVj dCBhbGwgb2xkIHVtcy9kcmkgcGFyYW1zLiAqLwo+IC0JCXJldHVybiAtRU5PREVWOwo+IC0JY2Fz ZSBJOTE1X1BBUkFNX0NISVBTRVRfSUQ6Cj4gLQkJdmFsdWUgPSBkZXYtPnBkZXYtPmRldmljZTsK PiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9QQVJBTV9SRVZJU0lPTjoKPiAtCQl2YWx1ZSA9IGRl di0+cGRldi0+cmV2aXNpb247Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fSEFTX0dF TToKPiAtCQl2YWx1ZSA9IDE7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fTlVNX0ZF TkNFU19BVkFJTDoKPiAtCQl2YWx1ZSA9IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsKPiAtCQli cmVhazsKPiAtCWNhc2UgSTkxNV9QQVJBTV9IQVNfT1ZFUkxBWToKPiAtCQl2YWx1ZSA9IGRldl9w cml2LT5vdmVybGF5ID8gMSA6IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fSEFT X1BBR0VGTElQUElORzoKPiAtCQl2YWx1ZSA9IDE7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVf UEFSQU1fSEFTX0VYRUNCVUYyOgo+IC0JCS8qIGRlcGVuZHMgb24gR0VNICovCj4gLQkJdmFsdWUg PSAxOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJOTE1X1BBUkFNX0hBU19CU0Q6Cj4gLQkJdmFsdWUg PSBpbnRlbF9lbmdpbmVfaW5pdGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbVkNTXSk7Cj4gLQkJ YnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fSEFTX0JMVDoKPiAtCQl2YWx1ZSA9IGludGVsX2Vu Z2luZV9pbml0aWFsaXplZCgmZGV2X3ByaXYtPmVuZ2luZVtCQ1NdKTsKPiAtCQlicmVhazsKPiAt CWNhc2UgSTkxNV9QQVJBTV9IQVNfVkVCT1g6Cj4gLQkJdmFsdWUgPSBpbnRlbF9lbmdpbmVfaW5p dGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbVkVDU10pOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJ OTE1X1BBUkFNX0hBU19CU0QyOgo+IC0JCXZhbHVlID0gaW50ZWxfZW5naW5lX2luaXRpYWxpemVk KCZkZXZfcHJpdi0+ZW5naW5lW1ZDUzJdKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9QQVJB TV9IQVNfUkVMQVhFRF9GRU5DSU5HOgo+IC0JCXZhbHVlID0gMTsKPiAtCQlicmVhazsKPiAtCWNh c2UgSTkxNV9QQVJBTV9IQVNfQ09IRVJFTlRfUklOR1M6Cj4gLQkJdmFsdWUgPSAxOwo+IC0JCWJy ZWFrOwo+IC0JY2FzZSBJOTE1X1BBUkFNX0hBU19FWEVDX0NPTlNUQU5UUzoKPiAtCQl2YWx1ZSA9 IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQ7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFS QU1fSEFTX1JFTEFYRURfREVMVEE6Cj4gLQkJdmFsdWUgPSAxOwo+IC0JCWJyZWFrOwo+IC0JY2Fz ZSBJOTE1X1BBUkFNX0hBU19HRU43X1NPTF9SRVNFVDoKPiAtCQl2YWx1ZSA9IDE7Cj4gLQkJYnJl YWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fSEFTX0xMQzoKPiAtCQl2YWx1ZSA9IEhBU19MTEMoZGV2 KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9QQVJBTV9IQVNfV1Q6Cj4gLQkJdmFsdWUgPSBI QVNfV1QoZGV2KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9QQVJBTV9IQVNfQUxJQVNJTkdf UFBHVFQ6Cj4gLQkJdmFsdWUgPSBVU0VTX1BQR1RUKGRldik7Cj4gLQkJYnJlYWs7Cj4gLQljYXNl IEk5MTVfUEFSQU1fSEFTX1dBSVRfVElNRU9VVDoKPiAtCQl2YWx1ZSA9IDE7Cj4gLQkJYnJlYWs7 Cj4gLQljYXNlIEk5MTVfUEFSQU1fSEFTX1NFTUFQSE9SRVM6Cj4gLQkJdmFsdWUgPSBpOTE1X3Nl bWFwaG9yZV9pc19lbmFibGVkKGRldl9wcml2KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9Q QVJBTV9IQVNfUFJJTUVfVk1BUF9GTFVTSDoKPiAtCQl2YWx1ZSA9IDE7Cj4gLQkJYnJlYWs7Cj4g LQljYXNlIEk5MTVfUEFSQU1fSEFTX1NFQ1VSRV9CQVRDSEVTOgo+IC0JCXZhbHVlID0gY2FwYWJs ZShDQVBfU1lTX0FETUlOKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9QQVJBTV9IQVNfUElO TkVEX0JBVENIRVM6Cj4gLQkJdmFsdWUgPSAxOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJOTE1X1BB UkFNX0hBU19FWEVDX05PX1JFTE9DOgo+IC0JCXZhbHVlID0gMTsKPiAtCQlicmVhazsKPiAtCWNh c2UgSTkxNV9QQVJBTV9IQVNfRVhFQ19IQU5ETEVfTFVUOgo+IC0JCXZhbHVlID0gMTsKPiAtCQli cmVhazsKPiAtCWNhc2UgSTkxNV9QQVJBTV9DTURfUEFSU0VSX1ZFUlNJT046Cj4gLQkJdmFsdWUg PSBpOTE1X2NtZF9wYXJzZXJfZ2V0X3ZlcnNpb24oZGV2X3ByaXYpOwo+IC0JCWJyZWFrOwo+IC0J Y2FzZSBJOTE1X1BBUkFNX0hBU19DT0hFUkVOVF9QSFlTX0dUVDoKPiAtCQl2YWx1ZSA9IDE7Cj4g LQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fTU1BUF9WRVJTSU9OOgo+IC0JCXZhbHVlID0g MTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9QQVJBTV9TVUJTTElDRV9UT1RBTDoKPiAtCQl2 YWx1ZSA9IElOVEVMX0lORk8oZGV2KS0+c3Vic2xpY2VfdG90YWw7Cj4gLQkJaWYgKCF2YWx1ZSkK PiAtCQkJcmV0dXJuIC1FTk9ERVY7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fRVVf VE9UQUw6Cj4gLQkJdmFsdWUgPSBJTlRFTF9JTkZPKGRldiktPmV1X3RvdGFsOwo+IC0JCWlmICgh dmFsdWUpCj4gLQkJCXJldHVybiAtRU5PREVWOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJOTE1X1BB UkFNX0hBU19HUFVfUkVTRVQ6Cj4gLQkJdmFsdWUgPSBpOTE1LmVuYWJsZV9oYW5nY2hlY2sgJiYg aW50ZWxfaGFzX2dwdV9yZXNldChkZXZfcHJpdik7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVf UEFSQU1fSEFTX1JFU09VUkNFX1NUUkVBTUVSOgo+IC0JCXZhbHVlID0gSEFTX1JFU09VUkNFX1NU UkVBTUVSKGRldik7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk5MTVfUEFSQU1fSEFTX0VYRUNfU09G VFBJTjoKPiAtCQl2YWx1ZSA9IDE7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURSTV9E RUJVRygiVW5rbm93biBwYXJhbWV0ZXIgJWRcbiIsIHBhcmFtLT5wYXJhbSk7Cj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JaWYgKGNvcHlfdG9fdXNlcihwYXJhbS0+dmFsdWUsICZ2 YWx1ZSwgc2l6ZW9mKGludCkpKSB7Cj4gLQkJRFJNX0VSUk9SKCJjb3B5X3RvX3VzZXIgZmFpbGVk XG4iKTsKPiAtCQlyZXR1cm4gLUVGQVVMVDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCBpOTE1X2dldF9icmlkZ2VfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gLQo+IC0JZGV2X3ByaXYtPmJyaWRnZV9kZXYgPSBwY2lfZ2V0X2J1c19hbmRf c2xvdCgwLCBQQ0lfREVWRk4oMCwgMCkpOwo+IC0JaWYgKCFkZXZfcHJpdi0+YnJpZGdlX2Rldikg ewo+IC0JCURSTV9FUlJPUigiYnJpZGdlIGRldmljZSBub3QgZm91bmRcbiIpOwo+IC0JCXJldHVy biAtMTsKPiAtCX0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0vKiBBbGxvY2F0ZSBzcGFjZSBm b3IgdGhlIE1DSCByZWdzIGlmIG5lZWRlZCwgcmV0dXJuIG5vbnplcm8gb24gZXJyb3IgKi8KPiAt c3RhdGljIGludAo+IC1pbnRlbF9hbGxvY19tY2hiYXJfcmVzb3VyY2Uoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiAtCWludCByZWcgPSBJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0ID8g TUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKPiAtCXUzMiB0ZW1wX2xvLCB0ZW1wX2hpID0gMDsK PiAtCXU2NCBtY2hiYXJfYWRkcjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKElOVEVMX0lORk8o ZGV2KS0+Z2VuID49IDQpCj4gLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlk Z2VfZGV2LCByZWcgKyA0LCAmdGVtcF9oaSk7Cj4gLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2 X3ByaXYtPmJyaWRnZV9kZXYsIHJlZywgJnRlbXBfbG8pOwo+IC0JbWNoYmFyX2FkZHIgPSAoKHU2 NCl0ZW1wX2hpIDw8IDMyKSB8IHRlbXBfbG87Cj4gLQo+IC0JLyogSWYgQUNQSSBkb2Vzbid0IGhh dmUgaXQsIGFzc3VtZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGl0IG91cnNlbHZlcyAqLwo+IC0jaWZk ZWYgQ09ORklHX1BOUAo+IC0JaWYgKG1jaGJhcl9hZGRyICYmCj4gLQnCoMKgwqDCoHBucF9yYW5n ZV9yZXNlcnZlZChtY2hiYXJfYWRkciwgbWNoYmFyX2FkZHIgKyBNQ0hCQVJfU0laRSkpCj4gLQkJ cmV0dXJuIDA7Cj4gLSNlbmRpZgo+IC0KPiAtCS8qIEdldCBzb21lIHNwYWNlIGZvciBpdCAqLwo+ IC0JZGV2X3ByaXYtPm1jaF9yZXMubmFtZSA9ICJpOTE1IE1DSEJBUiI7Cj4gLQlkZXZfcHJpdi0+ bWNoX3Jlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwo+IC0JcmV0ID0gcGNpX2J1c19hbGxvY19y ZXNvdXJjZShkZXZfcHJpdi0+YnJpZGdlX2Rldi0+YnVzLAo+IC0JCQkJwqDCoMKgwqDCoCZkZXZf cHJpdi0+bWNoX3JlcywKPiAtCQkJCcKgwqDCoMKgwqBNQ0hCQVJfU0laRSwgTUNIQkFSX1NJWkUs Cj4gLQkJCQnCoMKgwqDCoMKgUENJQklPU19NSU5fTUVNLAo+IC0JCQkJwqDCoMKgwqDCoDAsIHBj aWJpb3NfYWxpZ25fcmVzb3VyY2UsCj4gLQkJCQnCoMKgwqDCoMKgZGV2X3ByaXYtPmJyaWRnZV9k ZXYpOwo+IC0JaWYgKHJldCkgewo+IC0JCURSTV9ERUJVR19EUklWRVIoImZhaWxlZCBidXMgYWxs b2M6ICVkXG4iLCByZXQpOwo+IC0JCWRldl9wcml2LT5tY2hfcmVzLnN0YXJ0ID0gMDsKPiAtCQly ZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQo+ IC0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIHJlZyArIDQs Cj4gLQkJCQnCoMKgwqDCoMKgwqDCoHVwcGVyXzMyX2JpdHMoZGV2X3ByaXYtPm1jaF9yZXMuc3Rh cnQpKTsKPiAtCj4gLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2 LCByZWcsCj4gLQkJCcKgwqDCoMKgwqDCoMKgbG93ZXJfMzJfYml0cyhkZXZfcHJpdi0+bWNoX3Jl cy5zdGFydCkpOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qIFNldHVwIE1DSEJBUiBpZiBw b3NzaWJsZSwgcmV0dXJuIHRydWUgaWYgd2Ugc2hvdWxkIGRpc2FibGUgaXQgYWdhaW4gKi8KPiAt c3RhdGljIHZvaWQKPiAtaW50ZWxfc2V0dXBfbWNoYmFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gLQlpbnQgbWNoYmFyX3JlZyA9IElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgPyBN Q0hCQVJfSTk2NSA6IE1DSEJBUl9JOTE1Owo+IC0JdTMyIHRlbXA7Cj4gLQlib29sIGVuYWJsZWQ7 Cj4gLQo+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2KSB8fCBJU19DSEVSUllWSUVXKGRldikpCj4g LQkJcmV0dXJuOwo+IC0KPiAtCWRldl9wcml2LT5tY2hiYXJfbmVlZF9kaXNhYmxlID0gZmFsc2U7 Cj4gLQo+IC0JaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikpIHsKPiAtCQlwY2lf cmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOLCAmdGVtcCk7Cj4g LQkJZW5hYmxlZCA9ICEhKHRlbXAgJiBERVZFTl9NQ0hCQVJfRU4pOwo+IC0JfSBlbHNlIHsKPiAt CQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcs ICZ0ZW1wKTsKPiAtCQllbmFibGVkID0gdGVtcCAmIDE7Cj4gLQl9Cj4gLQo+IC0JLyogSWYgaXQn cyBhbHJlYWR5IGVuYWJsZWQsIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgKi8KPiAtCWlmIChl bmFibGVkKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoaW50ZWxfYWxsb2NfbWNoYmFyX3Jlc291 cmNlKGRldikpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRldl9wcml2LT5tY2hiYXJfbmVlZF9kaXNh YmxlID0gdHJ1ZTsKPiAtCj4gLQkvKiBTcGFjZSBpcyBhbGxvY2F0ZWQgb3IgcmVzZXJ2ZWQsIHNv IGVuYWJsZSBpdC4gKi8KPiAtCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7 Cj4gLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU4s Cj4gLQkJCQnCoMKgwqDCoMKgwqDCoHRlbXAgfCBERVZFTl9NQ0hCQVJfRU4pOwo+IC0JfSBlbHNl IHsKPiAtCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJh cl9yZWcsICZ0ZW1wKTsKPiAtCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlk Z2VfZGV2LCBtY2hiYXJfcmVnLCB0ZW1wIHwgMSk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2 b2lkCj4gLWludGVsX3RlYXJkb3duX21jaGJhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+IC0JaW50IG1jaGJhcl9yZWcgPSBJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0ID8gTUNIQkFS X0k5NjUgOiBNQ0hCQVJfSTkxNTsKPiAtCj4gLQlpZiAoZGV2X3ByaXYtPm1jaGJhcl9uZWVkX2Rp c2FibGUpIHsKPiAtCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgewo+IC0J CQl1MzIgZGV2ZW5fdmFsOwo+IC0KPiAtCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2 LT5icmlkZ2VfZGV2LCBERVZFTiwKPiAtCQkJCQnCoMKgwqDCoMKgwqAmZGV2ZW5fdmFsKTsKPiAt CQkJZGV2ZW5fdmFsICY9IH5ERVZFTl9NQ0hCQVJfRU47Cj4gLQkJCXBjaV93cml0ZV9jb25maWdf ZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOLAo+IC0JCQkJCcKgwqDCoMKgwqDCoMKg ZGV2ZW5fdmFsKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQl1MzIgbWNoYmFyX3ZhbDsKPiAtCj4gLQkJ CXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywK PiAtCQkJCQnCoMKgwqDCoMKgwqAmbWNoYmFyX3ZhbCk7Cj4gLQkJCW1jaGJhcl92YWwgJj0gfjE7 Cj4gLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJh cl9yZWcsCj4gLQkJCQkJwqDCoMKgwqDCoMKgwqBtY2hiYXJfdmFsKTsKPiAtCQl9Cj4gLQl9Cj4g LQo+IC0JaWYgKGRldl9wcml2LT5tY2hfcmVzLnN0YXJ0KQo+IC0JCXJlbGVhc2VfcmVzb3VyY2Uo JmRldl9wcml2LT5tY2hfcmVzKTsKPiAtfQo+IC0KPiAtLyogdHJ1ZSA9IGVuYWJsZSBkZWNvZGUs IGZhbHNlID0gZGlzYWJsZSBkZWNvZGVyICovCj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV92 Z2Ffc2V0X2RlY29kZSh2b2lkICpjb29raWUsIGJvb2wgc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjb29raWU7Cj4gLQo+IC0JaW50ZWxfbW9kZXNldF92Z2Ffc2V0X3N0 YXRlKGRldiwgc3RhdGUpOwo+IC0JaWYgKHN0YXRlKQo+IC0JCXJldHVybiBWR0FfUlNSQ19MRUdB Q1lfSU8gfCBWR0FfUlNSQ19MRUdBQ1lfTUVNIHwKPiAtCQnCoMKgwqDCoMKgwqDCoFZHQV9SU1JD X05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07Cj4gLQllbHNlCj4gLQkJcmV0dXJuIFZH QV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIGk5MTVfc3dpdGNoZXJvb19zZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVu dW0gdmdhX3N3aXRjaGVyb29fc3RhdGUgc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Cj4gLQlwbV9tZXNzYWdlX3QgcG1tID0geyAu ZXZlbnQgPSBQTV9FVkVOVF9TVVNQRU5EIH07Cj4gLQo+IC0JaWYgKHN0YXRlID09IFZHQV9TV0lU Q0hFUk9PX09OKSB7Cj4gLQkJcHJfaW5mbygic3dpdGNoZWQgb25cbiIpOwo+IC0JCWRldi0+c3dp dGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9DSEFOR0lORzsKPiAtCQkvKiBpOTE1 IHJlc3VtZSBoYW5kbGVyIGRvZXNuJ3Qgc2V0IHRvIEQwICovCj4gLQkJcGNpX3NldF9wb3dlcl9z dGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7Cj4gLQkJaTkxNV9yZXN1bWVfc3dpdGNoZXJvbyhkZXYp Owo+IC0JCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0gRFJNX1NXSVRDSF9QT1dFUl9PTjsKPiAt CX0gZWxzZSB7Cj4gLQkJcHJfaW5mbygic3dpdGNoZWQgb2ZmXG4iKTsKPiAtCQlkZXYtPnN3aXRj aF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfQ0hBTkdJTkc7Cj4gLQkJaTkxNV9zdXNw ZW5kX3N3aXRjaGVyb28oZGV2LCBwbW0pOwo+IC0JCWRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID0g RFJNX1NXSVRDSF9QT1dFUl9PRkY7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIGk5MTVf c3dpdGNoZXJvb19jYW5fc3dpdGNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwo+IC0KPiAtCS8qCj4g LQnCoCogRklYTUU6IG9wZW5fY291bnQgaXMgcHJvdGVjdGVkIGJ5IGRybV9nbG9iYWxfbXV0ZXgg YnV0IHRoYXQgd291bGQgbGVhZCB0bwo+IC0JwqAqIGxvY2tpbmcgaW52ZXJzaW9uIHdpdGggdGhl IGRyaXZlciBsb2FkIHBhdGguIEFuZCB0aGUgYWNjZXNzIGhlcmUgaXMKPiAtCcKgKiBjb21wbGV0 ZWx5IHJhY3kgYW55d2F5LiBTbyBkb24ndCBib3RoZXIgd2l0aCBsb2NraW5nIGZvciBub3cuCj4g LQnCoCovCj4gLQlyZXR1cm4gZGV2LT5vcGVuX2NvdW50ID09IDA7Cj4gLX0KPiAtCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3QgdmdhX3N3aXRjaGVyb29fY2xpZW50X29wcyBpOTE1X3N3aXRjaGVyb29f b3BzID0gewo+IC0JLnNldF9ncHVfc3RhdGUgPSBpOTE1X3N3aXRjaGVyb29fc2V0X3N0YXRlLAo+ IC0JLnJlcHJvYmUgPSBOVUxMLAo+IC0JLmNhbl9zd2l0Y2ggPSBpOTE1X3N3aXRjaGVyb29fY2Fu X3N3aXRjaCwKPiAtfTsKPiAtCj4gLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2Zpbmkoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkZXYpOwo+IC0KPiAtCS8qCj4gLQnCoCogTmVpdGhlciB0aGUgQklPUywgb3Vy c2VsdmVzIG9yIGFueSBvdGhlciBrZXJuZWwKPiAtCcKgKiBleHBlY3RzIHRoZSBzeXN0ZW0gdG8g YmUgaW4gZXhlY2xpc3RzIG1vZGUgb24gc3RhcnR1cCwKPiAtCcKgKiBzbyB3ZSBuZWVkIHRvIHJl c2V0IHRoZSBHUFUgYmFjayB0byBsZWdhY3kgbW9kZS4gQW5kIHRoZSBvbmx5Cj4gLQnCoCoga25v d24gd2F5IHRvIGRpc2FibGUgbG9naWNhbCBjb250ZXh0cyBpcyB0aHJvdWdoIGEgR1BVIHJlc2V0 Lgo+IC0JwqAqCj4gLQnCoCogU28gaW4gb3JkZXIgdG8gbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGtu b3duIGRlZmF1bHQgY29uZmlndXJhdGlvbiwKPiAtCcKgKiBhbHdheXMgcmVzZXQgdGhlIEdQVSB1 cG9uIHVubG9hZC4gQWZ0ZXJ3YXJkcyB3ZSB0aGVuIGNsZWFuIHVwIHRoZQo+IC0JwqAqIEdFTSBz dGF0ZSB0cmFja2luZywgZmx1c2hpbmcgb2ZmIHRoZSByZXF1ZXN0cyBhbmQgbGVhdmluZyB0aGUK PiAtCcKgKiBzeXN0ZW0gaW4gYSBrbm93biBpZGxlIHN0YXRlLgo+IC0JwqAqCj4gLQnCoCogTm90 ZSB0aGF0IGlzIG9mIHRoZSB1cG1vc3QgaW1wb3J0YW5jZSB0aGF0IHRoZSBHUFUgaXMgaWRsZSBh bmQKPiAtCcKgKiBhbGwgc3RyYXkgd3JpdGVzIGFyZSBmbHVzaGVkICpiZWZvcmUqIHdlIGRpc21h bnRsZSB0aGUgYmFja2luZwo+IC0JwqAqIHN0b3JhZ2UgZm9yIHRoZSBwaW5uZWQgb2JqZWN0cy4K PiAtCcKgKgo+IC0JwqAqIEhvd2V2ZXIsIHNpbmNlIHdlIGFyZSB1bmNlcnRhaW4gdGhhdCByZXNl dGluZyB0aGUgR1BVIG9uIG9sZGVyCj4gLQnCoCogbWFjaGluZXMgaXMgYSBnb29kIGlkZWEsIHdl IGRvbid0IC0ganVzdCBpbiBjYXNlIGl0IGxlYXZlcyB0aGUKPiAtCcKgKiBtYWNoaW5lIGluIGFu IHVudXNhYmxlIGNvbmRpdGlvbi4KPiAtCcKgKi8KPiAtCWlmIChIQVNfSFdfQ09OVEVYVFMoZGV2 KSkgewo+IC0JCWludCByZXNldCA9IGludGVsX2dwdV9yZXNldChkZXZfcHJpdiwgQUxMX0VOR0lO RVMpOwo+IC0JCVdBUk5fT04ocmVzZXQgJiYgcmVzZXQgIT0gLUVOT0RFVik7Cj4gLQl9Cj4gLQo+ IC0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaTkxNV9nZW1fcmVzZXQoZGV2 KTsKPiAtCWk5MTVfZ2VtX2NsZWFudXBfZW5naW5lcyhkZXYpOwo+IC0JaTkxNV9nZW1fY29udGV4 dF9maW5pKGRldik7Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4g LQlXQVJOX09OKCFsaXN0X2VtcHR5KCZ0b19pOTE1KGRldiktPmNvbnRleHRfbGlzdCkpOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IGk5MTVfbG9hZF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKGk5MTVfaW5qZWN0X2xvYWRf ZmFpbHVyZSgpKQo+IC0JCXJldHVybiAtRU5PREVWOwo+IC0KPiAtCXJldCA9IGludGVsX2Jpb3Nf aW5pdChkZXZfcHJpdik7Cj4gLQlpZiAocmV0KQo+IC0JCURSTV9JTkZPKCJmYWlsZWQgdG8gZmlu ZCBWQklPUyB0YWJsZXNcbiIpOwo+IC0KPiAtCS8qIElmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywg dGhlbiB3ZSBuZWVkIHRvIGFyYml0cmF0ZSBhY2Nlc3MKPiAtCcKgKiB0byB0aGUgY29tbW9uIFZH QSByZXNvdXJjZXMuCj4gLQnCoCoKPiAtCcKgKiBJZiB3ZSBhcmUgYSBzZWNvbmRhcnkgZGlzcGxh eSBjb250cm9sbGVyICghUENJX0RJU1BMQVlfQ0xBU1NfVkdBKSwKPiAtCcKgKiB0aGVuIHdlIGRv IG5vdCB0YWtlIHBhcnQgaW4gVkdBIGFyYml0cmF0aW9uIGFuZCB0aGUKPiAtCcKgKiB2Z2FfY2xp ZW50X3JlZ2lzdGVyKCkgZmFpbHMgd2l0aCAtRU5PREVWLgo+IC0JwqAqLwo+IC0JcmV0ID0gdmdh X2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIGRldiwgTlVMTCwgaTkxNV92Z2Ffc2V0X2RlY29k ZSk7Cj4gLQlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAt CWludGVsX3JlZ2lzdGVyX2RzbV9oYW5kbGVyKCk7Cj4gLQo+IC0JcmV0ID0gdmdhX3N3aXRjaGVy b29fcmVnaXN0ZXJfY2xpZW50KGRldi0+cGRldiwgJmk5MTVfc3dpdGNoZXJvb19vcHMsIGZhbHNl KTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBjbGVhbnVwX3ZnYV9jbGllbnQ7Cj4gLQo+IC0JLyog bXVzdCBoYXBwZW4gYmVmb3JlIGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdF9odygpIG9uIFZMVi9D SFYgKi8KPiAtCWludGVsX3VwZGF0ZV9yYXdjbGsoZGV2X3ByaXYpOwo+IC0KPiAtCWludGVsX3Bv d2VyX2RvbWFpbnNfaW5pdF9odyhkZXZfcHJpdiwgZmFsc2UpOwo+IC0KPiAtCWludGVsX2Nzcl91 Y29kZV9pbml0KGRldl9wcml2KTsKPiAtCj4gLQlyZXQgPSBpbnRlbF9pcnFfaW5zdGFsbChkZXZf cHJpdik7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gY2xlYW51cF9jc3I7Cj4gLQo+IC0JaW50ZWxf c2V0dXBfZ21idXMoZGV2KTsKPiAtCj4gLQkvKiBJbXBvcnRhbnQ6IFRoZSBvdXRwdXQgc2V0dXAg ZnVuY3Rpb25zIGNhbGxlZCBieSBtb2Rlc2V0X2luaXQgbmVlZAo+IC0JwqAqIHdvcmtpbmcgaXJx cyBmb3IgZS5nLiBnbWJ1cyBhbmQgZHAgYXV4IHRyYW5zZmVycy4gKi8KPiAtCWludGVsX21vZGVz ZXRfaW5pdChkZXYpOwo+IC0KPiAtCWludGVsX2d1Y19pbml0KGRldik7Cj4gLQo+IC0JcmV0ID0g aTkxNV9nZW1faW5pdChkZXYpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGNsZWFudXBfaXJxOwo+ IC0KPiAtCWludGVsX21vZGVzZXRfZ2VtX2luaXQoZGV2KTsKPiAtCj4gLQlpZiAoSU5URUxfSU5G TyhkZXYpLT5udW1fcGlwZXMgPT0gMCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlyZXQgPSBpbnRl bF9mYmRldl9pbml0KGRldik7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gY2xlYW51cF9nZW07Cj4g LQo+IC0JLyogT25seSBlbmFibGUgaG90cGx1ZyBoYW5kbGluZyBvbmNlIHRoZSBmYmRldiBpcyBm dWxseSBzZXQgdXAuICovCj4gLQlpbnRlbF9ocGRfaW5pdChkZXZfcHJpdik7Cj4gLQo+IC0JZHJt X2ttc19oZWxwZXJfcG9sbF9pbml0KGRldik7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1jbGVh bnVwX2dlbToKPiAtCWk5MTVfZ2VtX2ZpbmkoZGV2KTsKPiAtY2xlYW51cF9pcnE6Cj4gLQlpbnRl bF9ndWNfZmluaShkZXYpOwo+IC0JZHJtX2lycV91bmluc3RhbGwoZGV2KTsKPiAtCWludGVsX3Rl YXJkb3duX2dtYnVzKGRldik7Cj4gLWNsZWFudXBfY3NyOgo+IC0JaW50ZWxfY3NyX3Vjb2RlX2Zp bmkoZGV2X3ByaXYpOwo+IC0JaW50ZWxfcG93ZXJfZG9tYWluc19maW5pKGRldl9wcml2KTsKPiAt CXZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KGRldi0+cGRldik7Cj4gLWNsZWFudXBf dmdhX2NsaWVudDoKPiAtCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxM LCBOVUxMKTsKPiAtb3V0Ogo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtI2lmIElTX0VOQUJM RUQoQ09ORklHX0ZCKQo+IC1zdGF0aWMgaW50IGk5MTVfa2lja19vdXRfZmlybXdhcmVfZmIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgYXBlcnR1cmVz X3N0cnVjdCAqYXA7Cj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldl9wcml2LT5kZXYtPnBk ZXY7Cj4gLQlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRldl9wcml2LT5nZ3R0Owo+IC0JYm9v bCBwcmltYXJ5Owo+IC0JaW50IHJldDsKPiAtCj4gLQlhcCA9IGFsbG9jX2FwZXJ0dXJlcygxKTsK PiAtCWlmICghYXApCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JYXAtPnJhbmdlc1swXS5i YXNlID0gZ2d0dC0+bWFwcGFibGVfYmFzZTsKPiAtCWFwLT5yYW5nZXNbMF0uc2l6ZSA9IGdndHQt Pm1hcHBhYmxlX2VuZDsKPiAtCj4gLQlwcmltYXJ5ID0KPiAtCQlwZGV2LT5yZXNvdXJjZVtQQ0lf Uk9NX1JFU09VUkNFXS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVzsKPiAtCj4gLQlyZXQg PSByZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKGFwLCAiaW50ZWxkcm1mYiIsIHByaW1h cnkpOwo+IC0KPiAtCWtmcmVlKGFwKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLSNlbHNl Cj4gLXN0YXRpYyBpbnQgaTkxNV9raWNrX291dF9maXJtd2FyZV9mYihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXJldHVybiAwOwo+IC19Cj4gLSNlbmRpZgo+IC0K PiAtI2lmICFkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkKPiAtc3RhdGljIGludCBpOTE1X2tp Y2tfb3V0X3ZnYWNvbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAt CXJldHVybiAwOwo+IC19Cj4gLSNlbGlmICFkZWZpbmVkKENPTkZJR19EVU1NWV9DT05TT0xFKQo+ IC1zdGF0aWMgaW50IGk5MTVfa2lja19vdXRfdmdhY29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiAtewo+IC0JcmV0dXJuIC1FTk9ERVY7Cj4gLX0KPiAtI2Vsc2UKPiAtc3Rh dGljIGludCBpOTE1X2tpY2tfb3V0X3ZnYWNvbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gLXsKPiAtCWludCByZXQgPSAwOwo+IC0KPiAtCURSTV9JTkZPKCJSZXBsYWNpbmcg VkdBIGNvbnNvbGUgZHJpdmVyXG4iKTsKPiAtCj4gLQljb25zb2xlX2xvY2soKTsKPiAtCWlmIChj b25faXNfYm91bmQoJnZnYV9jb24pKQo+IC0JCXJldCA9IGRvX3Rha2Vfb3Zlcl9jb25zb2xlKCZk dW1teV9jb24sIDAsIE1BWF9OUl9DT05TT0xFUyAtIDEsIDEpOwo+IC0JaWYgKHJldCA9PSAwKSB7 Cj4gLQkJcmV0ID0gZG9fdW5yZWdpc3Rlcl9jb25fZHJpdmVyKCZ2Z2FfY29uKTsKPiAtCj4gLQkJ LyogSWdub3JlICJhbHJlYWR5IHVucmVnaXN0ZXJlZCIuICovCj4gLQkJaWYgKHJldCA9PSAtRU5P REVWKQo+IC0JCQlyZXQgPSAwOwo+IC0JfQo+IC0JY29uc29sZV91bmxvY2soKTsKPiAtCj4gLQly ZXR1cm4gcmV0Owo+IC19Cj4gLSNlbmRpZgo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9kdW1wX2Rl dmljZV9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JY29u c3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvICppbmZvID0gJmRldl9wcml2LT5pbmZvOwo+IC0K PiAtI2RlZmluZSBQUklOVF9TKG5hbWUpICIlcyIKPiAtI2RlZmluZSBTRVBfRU1QVFkKPiAtI2Rl ZmluZSBQUklOVF9GTEFHKG5hbWUpIGluZm8tPm5hbWUgPyAjbmFtZSAiLCIgOiAiIgo+IC0jZGVm aW5lIFNFUF9DT01NQSAsCj4gLQlEUk1fREVCVUdfRFJJVkVSKCJpOTE1IGRldmljZSBpbmZvOiBn ZW49JWksIHBjaWlkPTB4JTA0eCByZXY9MHglMDJ4IGZsYWdzPSIKPiAtCQkJwqBERVZfSU5GT19G T1JfRUFDSF9GTEFHKFBSSU5UX1MsIFNFUF9FTVBUWSksCj4gLQkJCcKgaW5mby0+Z2VuLAo+IC0J CQnCoGRldl9wcml2LT5kZXYtPnBkZXYtPmRldmljZSwKPiAtCQkJwqBkZXZfcHJpdi0+ZGV2LT5w ZGV2LT5yZXZpc2lvbiwKPiAtCQkJwqBERVZfSU5GT19GT1JfRUFDSF9GTEFHKFBSSU5UX0ZMQUcs IFNFUF9DT01NQSkpOwo+IC0jdW5kZWYgUFJJTlRfUwo+IC0jdW5kZWYgU0VQX0VNUFRZCj4gLSN1 bmRlZiBQUklOVF9GTEFHCj4gLSN1bmRlZiBTRVBfQ09NTUEKPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQgY2hlcnJ5dmlld19zc2V1X2luZm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+IC0Jc3RydWN0IGludGVsX2RldmljZV9pbmZvICppbmZvOwo+IC0JdTMyIGZ1c2UsIGV1X2Rp czsKPiAtCj4gLQlpbmZvID0gKHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqKSZkZXZfcHJpdi0+ aW5mbzsKPiAtCWZ1c2UgPSBJOTE1X1JFQUQoQ0hWX0ZVU0VfR1QpOwo+IC0KPiAtCWluZm8tPnNs aWNlX3RvdGFsID0gMTsKPiAtCj4gLQlpZiAoIShmdXNlICYgQ0hWX0ZHVF9ESVNBQkxFX1NTMCkp IHsKPiAtCQlpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2UrKzsKPiAtCQlldV9kaXMgPSBmdXNlICYg KENIVl9GR1RfRVVfRElTX1NTMF9SMF9NQVNLIHwKPiAtCQkJCcKgQ0hWX0ZHVF9FVV9ESVNfU1Mw X1IxX01BU0spOwo+IC0JCWluZm8tPmV1X3RvdGFsICs9IDggLSBod2VpZ2h0MzIoZXVfZGlzKTsK PiAtCX0KPiAtCj4gLQlpZiAoIShmdXNlICYgQ0hWX0ZHVF9ESVNBQkxFX1NTMSkpIHsKPiAtCQlp bmZvLT5zdWJzbGljZV9wZXJfc2xpY2UrKzsKPiAtCQlldV9kaXMgPSBmdXNlICYgKENIVl9GR1Rf RVVfRElTX1NTMV9SMF9NQVNLIHwKPiAtCQkJCcKgQ0hWX0ZHVF9FVV9ESVNfU1MxX1IxX01BU0sp Owo+IC0JCWluZm8tPmV1X3RvdGFsICs9IDggLSBod2VpZ2h0MzIoZXVfZGlzKTsKPiAtCX0KPiAt Cj4gLQlpbmZvLT5zdWJzbGljZV90b3RhbCA9IGluZm8tPnN1YnNsaWNlX3Blcl9zbGljZTsKPiAt CS8qCj4gLQnCoCogQ0hWIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmli dXRpb24gb2YgRVUKPiAtCcKgKiBhY3Jvc3Mgc3Vic2xpY2VzLgo+IC0JKi8KPiAtCWluZm8tPmV1 X3Blcl9zdWJzbGljZSA9IGluZm8tPnN1YnNsaWNlX3RvdGFsID8KPiAtCQkJCWluZm8tPmV1X3Rv dGFsIC8gaW5mby0+c3Vic2xpY2VfdG90YWwgOgo+IC0JCQkJMDsKPiAtCS8qCj4gLQnCoCogQ0hW IHN1cHBvcnRzIHN1YnNsaWNlIHBvd2VyIGdhdGluZyBvbiBkZXZpY2VzIHdpdGggbW9yZSB0aGFu Cj4gLQnCoCogb25lIHN1YnNsaWNlLCBhbmQgc3VwcG9ydHMgRVUgcG93ZXIgZ2F0aW5nIG9uIGRl dmljZXMgd2l0aAo+IC0JwqAqIG1vcmUgdGhhbiBvbmUgRVUgcGFpciBwZXIgc3Vic2xpY2UuCj4g LQkqLwo+IC0JaW5mby0+aGFzX3NsaWNlX3BnID0gMDsKPiAtCWluZm8tPmhhc19zdWJzbGljZV9w ZyA9IChpbmZvLT5zdWJzbGljZV90b3RhbCA+IDEpOwo+IC0JaW5mby0+aGFzX2V1X3BnID0gKGlu Zm8tPmV1X3Blcl9zdWJzbGljZSA+IDIpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBnZW45X3Nz ZXVfaW5mb19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50 ZWxfZGV2aWNlX2luZm8gKmluZm87Cj4gLQlpbnQgc19tYXggPSAzLCBzc19tYXggPSA0LCBldV9t YXggPSA4Owo+IC0JaW50IHMsIHNzOwo+IC0JdTMyIGZ1c2UyLCBzX2VuYWJsZSwgc3NfZGlzYWJs ZSwgZXVfZGlzYWJsZTsKPiAtCXU4IGV1X21hc2sgPSAweGZmOwo+IC0KPiAtCWluZm8gPSAoc3Ry dWN0IGludGVsX2RldmljZV9pbmZvICopJmRldl9wcml2LT5pbmZvOwo+IC0JZnVzZTIgPSBJOTE1 X1JFQUQoR0VOOF9GVVNFMik7Cj4gLQlzX2VuYWJsZSA9IChmdXNlMiAmIEdFTjhfRjJfU19FTkFf TUFTSykgPj4KPiAtCQnCoMKgwqBHRU44X0YyX1NfRU5BX1NISUZUOwo+IC0Jc3NfZGlzYWJsZSA9 IChmdXNlMiAmIEdFTjlfRjJfU1NfRElTX01BU0spID4+Cj4gLQkJwqDCoMKgwqDCoEdFTjlfRjJf U1NfRElTX1NISUZUOwo+IC0KPiAtCWluZm8tPnNsaWNlX3RvdGFsID0gaHdlaWdodDMyKHNfZW5h YmxlKTsKPiAtCS8qCj4gLQnCoCogVGhlIHN1YnNsaWNlIGRpc2FibGUgZmllbGQgaXMgZ2xvYmFs LCBpLmUuIGl0IGFwcGxpZXMKPiAtCcKgKiB0byBlYWNoIG9mIHRoZSBlbmFibGVkIHNsaWNlcy4K PiAtCSovCj4gLQlpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2UgPSBzc19tYXggLSBod2VpZ2h0MzIo c3NfZGlzYWJsZSk7Cj4gLQlpbmZvLT5zdWJzbGljZV90b3RhbCA9IGluZm8tPnNsaWNlX3RvdGFs ICoKPiAtCQkJwqDCoMKgwqDCoMKgwqBpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2U7Cj4gLQo+IC0J LyoKPiAtCcKgKiBJdGVyYXRlIHRocm91Z2ggZW5hYmxlZCBzbGljZXMgYW5kIHN1YnNsaWNlcyB0 bwo+IC0JwqAqIGNvdW50IHRoZSB0b3RhbCBlbmFibGVkIEVVLgo+IC0JKi8KPiAtCWZvciAocyA9 IDA7IHMgPCBzX21heDsgcysrKSB7Cj4gLQkJaWYgKCEoc19lbmFibGUgJiAoMHgxIDw8IHMpKSkK PiAtCQkJLyogc2tpcCBkaXNhYmxlZCBzbGljZSAqLwo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJ ZXVfZGlzYWJsZSA9IEk5MTVfUkVBRChHRU45X0VVX0RJU0FCTEUocykpOwo+IC0JCWZvciAoc3Mg PSAwOyBzcyA8IHNzX21heDsgc3MrKykgewo+IC0JCQlpbnQgZXVfcGVyX3NzOwo+IC0KPiAtCQkJ aWYgKHNzX2Rpc2FibGUgJiAoMHgxIDw8IHNzKSkKPiAtCQkJCS8qIHNraXAgZGlzYWJsZWQgc3Vi c2xpY2UgKi8KPiAtCQkJCWNvbnRpbnVlOwo+IC0KPiAtCQkJZXVfcGVyX3NzID0gZXVfbWF4IC0g aHdlaWdodDgoKGV1X2Rpc2FibGUgPj4gKHNzKjgpKSAmCj4gLQkJCQkJCcKgwqDCoMKgwqDCoGV1 X21hc2spOwo+IC0KPiAtCQkJLyoKPiAtCQkJwqAqIFJlY29yZCB3aGljaCBzdWJzbGljZShzKSBo YXMoaGF2ZSkgNyBFVXMuIHdlCj4gLQkJCcKgKiBjYW4gdHVuZSB0aGUgaGFzaCB1c2VkIHRvIHNw cmVhZCB3b3JrIGFtb25nCj4gLQkJCcKgKiBzdWJzbGljZXMgaWYgdGhleSBhcmUgdW5iYWxhbmNl ZC4KPiAtCQkJwqAqLwo+IC0JCQlpZiAoZXVfcGVyX3NzID09IDcpCj4gLQkJCQlpbmZvLT5zdWJz bGljZV83ZXVbc10gfD0gMSA8PCBzczsKPiAtCj4gLQkJCWluZm8tPmV1X3RvdGFsICs9IGV1X3Bl cl9zczsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCcKgKiBTS0wgaXMgZXhwZWN0ZWQgdG8g YWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbgo+IC0JwqAqIG9mIEVVIGFjcm9zcyBz dWJzbGljZXMgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgYW55IG9uZQo+IC0JwqAqIEVVIGluIGFu eSBvbmUgc3Vic2xpY2UgbWF5IGJlIGZ1c2VkIG9mZiBmb3IgZGllCj4gLQnCoCogcmVjb3Zlcnku IEJYVCBpcyBleHBlY3RlZCB0byBiZSBwZXJmZWN0bHkgdW5pZm9ybSBpbiBFVQo+IC0JwqAqIGRp c3RyaWJ1dGlvbi4KPiAtCSovCj4gLQlpbmZvLT5ldV9wZXJfc3Vic2xpY2UgPSBpbmZvLT5zdWJz bGljZV90b3RhbCA/Cj4gLQkJCQlESVZfUk9VTkRfVVAoaW5mby0+ZXVfdG90YWwsCj4gLQkJCQkJ wqDCoMKgwqDCoGluZm8tPnN1YnNsaWNlX3RvdGFsKSA6IDA7Cj4gLQkvKgo+IC0JwqAqIFNLTCBz dXBwb3J0cyBzbGljZSBwb3dlciBnYXRpbmcgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbgo+IC0J wqAqIG9uZSBzbGljZSwgYW5kIHN1cHBvcnRzIEVVIHBvd2VyIGdhdGluZyBvbiBkZXZpY2VzIHdp dGgKPiAtCcKgKiBtb3JlIHRoYW4gb25lIEVVIHBhaXIgcGVyIHN1YnNsaWNlLiBCWFQgc3VwcG9y dHMgc3Vic2xpY2UKPiAtCcKgKiBwb3dlciBnYXRpbmcgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhh biBvbmUgc3Vic2xpY2UsIGFuZAo+IC0JwqAqIHN1cHBvcnRzIEVVIHBvd2VyIGdhdGluZyBvbiBk ZXZpY2VzIHdpdGggbW9yZSB0aGFuIG9uZSBFVQo+IC0JwqAqIHBhaXIgcGVyIHN1YnNsaWNlLgo+ IC0JKi8KPiAtCWluZm8tPmhhc19zbGljZV9wZyA9ICgoSVNfU0tZTEFLRShkZXYpIHx8IElTX0tB QllMQUtFKGRldikpICYmCj4gLQkJCcKgwqDCoMKgwqDCoMKgKGluZm8tPnNsaWNlX3RvdGFsID4g MSkpOwo+IC0JaW5mby0+aGFzX3N1YnNsaWNlX3BnID0gKElTX0JST1hUT04oZGV2KSAmJiAoaW5m by0+c3Vic2xpY2VfdG90YWwgPiAxKSk7Cj4gLQlpbmZvLT5oYXNfZXVfcGcgPSAoaW5mby0+ZXVf cGVyX3N1YnNsaWNlID4gMik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGJyb2Fkd2VsbF9zc2V1 X2luZm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVs X2RldmljZV9pbmZvICppbmZvOwo+IC0JY29uc3QgaW50IHNfbWF4ID0gMywgc3NfbWF4ID0gMywg ZXVfbWF4ID0gODsKPiAtCWludCBzLCBzczsKPiAtCXUzMiBmdXNlMiwgZXVfZGlzYWJsZVtzX21h eF0sIHNfZW5hYmxlLCBzc19kaXNhYmxlOwo+IC0KPiAtCWZ1c2UyID0gSTkxNV9SRUFEKEdFTjhf RlVTRTIpOwo+IC0Jc19lbmFibGUgPSAoZnVzZTIgJiBHRU44X0YyX1NfRU5BX01BU0spID4+IEdF TjhfRjJfU19FTkFfU0hJRlQ7Cj4gLQlzc19kaXNhYmxlID0gKGZ1c2UyICYgR0VOOF9GMl9TU19E SVNfTUFTSykgPj4gR0VOOF9GMl9TU19ESVNfU0hJRlQ7Cj4gLQo+IC0JZXVfZGlzYWJsZVswXSA9 IEk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUwKSAmIEdFTjhfRVVfRElTMF9TMF9NQVNLOwo+IC0J ZXVfZGlzYWJsZVsxXSA9IChJOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMCkgPj4gR0VOOF9FVV9E SVMwX1MxX1NISUZUKSB8Cj4gLQkJCSgoSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTEpICYgR0VO OF9FVV9ESVMxX1MxX01BU0spIDw8Cj4gLQkJCcKgKDMyIC0gR0VOOF9FVV9ESVMwX1MxX1NISUZU KSk7Cj4gLQlldV9kaXNhYmxlWzJdID0gKEk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUxKSA+PiBH RU44X0VVX0RJUzFfUzJfU0hJRlQpIHwKPiAtCQkJKChJOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxF MikgJiBHRU44X0VVX0RJUzJfUzJfTUFTSykgPDwKPiAtCQkJwqAoMzIgLSBHRU44X0VVX0RJUzFf UzJfU0hJRlQpKTsKPiAtCj4gLQo+IC0JaW5mbyA9IChzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8g KikmZGV2X3ByaXYtPmluZm87Cj4gLQlpbmZvLT5zbGljZV90b3RhbCA9IGh3ZWlnaHQzMihzX2Vu YWJsZSk7Cj4gLQo+IC0JLyoKPiAtCcKgKiBUaGUgc3Vic2xpY2UgZGlzYWJsZSBmaWVsZCBpcyBn bG9iYWwsIGkuZS4gaXQgYXBwbGllcwo+IC0JwqAqIHRvIGVhY2ggb2YgdGhlIGVuYWJsZWQgc2xp Y2VzLgo+IC0JwqAqLwo+IC0JaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNlID0gc3NfbWF4IC0gaHdl aWdodDMyKHNzX2Rpc2FibGUpOwo+IC0JaW5mby0+c3Vic2xpY2VfdG90YWwgPSBpbmZvLT5zbGlj ZV90b3RhbCAqIGluZm8tPnN1YnNsaWNlX3Blcl9zbGljZTsKPiAtCj4gLQkvKgo+IC0JwqAqIEl0 ZXJhdGUgdGhyb3VnaCBlbmFibGVkIHNsaWNlcyBhbmQgc3Vic2xpY2VzIHRvCj4gLQnCoCogY291 bnQgdGhlIHRvdGFsIGVuYWJsZWQgRVUuCj4gLQnCoCovCj4gLQlmb3IgKHMgPSAwOyBzIDwgc19t YXg7IHMrKykgewo+IC0JCWlmICghKHNfZW5hYmxlICYgKDB4MSA8PCBzKSkpCj4gLQkJCS8qIHNr aXAgZGlzYWJsZWQgc2xpY2UgKi8KPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWZvciAoc3MgPSAw OyBzcyA8IHNzX21heDsgc3MrKykgewo+IC0JCQl1MzIgbl9kaXNhYmxlZDsKPiAtCj4gLQkJCWlm IChzc19kaXNhYmxlICYgKDB4MSA8PCBzcykpCj4gLQkJCQkvKiBza2lwIGRpc2FibGVkIHN1YnNs aWNlICovCj4gLQkJCQljb250aW51ZTsKPiAtCj4gLQkJCW5fZGlzYWJsZWQgPSBod2VpZ2h0OChl dV9kaXNhYmxlW3NdID4+IChzcyAqIGV1X21heCkpOwo+IC0KPiAtCQkJLyoKPiAtCQkJwqAqIFJl Y29yZCB3aGljaCBzdWJzbGljZXMgaGF2ZSA3IEVVcy4KPiAtCQkJwqAqLwo+IC0JCQlpZiAoZXVf bWF4IC0gbl9kaXNhYmxlZCA9PSA3KQo+IC0JCQkJaW5mby0+c3Vic2xpY2VfN2V1W3NdIHw9IDEg PDwgc3M7Cj4gLQo+IC0JCQlpbmZvLT5ldV90b3RhbCArPSBldV9tYXggLSBuX2Rpc2FibGVkOwo+ IC0JCX0KPiAtCX0KPiAtCj4gLQkvKgo+IC0JwqAqIEJEVyBpcyBleHBlY3RlZCB0byBhbHdheXMg aGF2ZSBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIEVVIGFjcm9zcwo+IC0JwqAqIHN1YnNsaWNl cyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBhbnkgb25lIEVVIGluIGFueSBvbmUgc3Vic2xpY2Ug bWF5Cj4gLQnCoCogYmUgZnVzZWQgb2ZmIGZvciBkaWUgcmVjb3ZlcnkuCj4gLQnCoCovCj4gLQlp bmZvLT5ldV9wZXJfc3Vic2xpY2UgPSBpbmZvLT5zdWJzbGljZV90b3RhbCA/Cj4gLQkJRElWX1JP VU5EX1VQKGluZm8tPmV1X3RvdGFsLCBpbmZvLT5zdWJzbGljZV90b3RhbCkgOiAwOwo+IC0KPiAt CS8qCj4gLQnCoCogQkRXIHN1cHBvcnRzIHNsaWNlIHBvd2VyIGdhdGluZyBvbiBkZXZpY2VzIHdp dGggbW9yZSB0aGFuCj4gLQnCoCogb25lIHNsaWNlLgo+IC0JwqAqLwo+IC0JaW5mby0+aGFzX3Ns aWNlX3BnID0gKGluZm8tPnNsaWNlX3RvdGFsID4gMSk7Cj4gLQlpbmZvLT5oYXNfc3Vic2xpY2Vf cGcgPSAwOwo+IC0JaW5mby0+aGFzX2V1X3BnID0gMDsKPiAtfQo+IC0KPiAtLyoKPiAtICogRGV0 ZXJtaW5lIHZhcmlvdXMgaW50ZWxfZGV2aWNlX2luZm8gZmllbGRzIGF0IHJ1bnRpbWUuCj4gLSAq Cj4gLSAqIFVzZSBpdCB3aGVuIGVpdGhlcjoKPiAtICrCoMKgwqAtIGl0J3MganVkZ2VkIHRvbyBs YWJvcmlvdXMgdG8gZmlsbCBuIHN0YXRpYyBzdHJ1Y3R1cmVzIHdpdGggdGhlIGxpbWl0Cj4gLSAq wqDCoMKgwqDCoHdoZW4gYSBzaW1wbGUgaWYgc3RhdGVtZW50IGRvZXMgdGhlIGpvYiwKPiAtICrC oMKgwqAtIHJ1bi10aW1lIGNoZWNrcyAoZWcgcmVhZCBmdXNlL3N0cmFwIHJlZ2lzdGVycykgYXJl IG5lZWRlZC4KPiAtICoKPiAtICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQ6Cj4g LSAqwqDCoMKgLSBhZnRlciB0aGUgTU1JTyBoYXMgYmVlbiBzZXR1cCBhcyB3ZSBhcmUgcmVhZGlu ZyByZWdpc3RlcnMsCj4gLSAqwqDCoMKgLSBhZnRlciB0aGUgUENIIGhhcyBiZWVuIGRldGVjdGVk LAo+IC0gKsKgwqDCoC0gYmVmb3JlIHRoZSBmaXJzdCB1c2FnZSBvZiB0aGUgZmllbGRzIGl0IGNh biB0d2Vhay4KPiAtICovCj4gLXN0YXRpYyB2b2lkIGludGVsX2RldmljZV9pbmZvX3J1bnRpbWVf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0Jc3RydWN0IGludGVsX2Rldmlj ZV9pbmZvICppbmZvOwo+IC0JZW51bSBwaXBlIHBpcGU7Cj4gLQo+IC0JaW5mbyA9IChzdHJ1Y3Qg aW50ZWxfZGV2aWNlX2luZm8gKikmZGV2X3ByaXYtPmluZm87Cj4gLQo+IC0JLyoKPiAtCcKgKiBT a3lsYWtlIGFuZCBCcm94dG9uIGN1cnJlbnRseSBkb24ndCBleHBvc2UgdGhlIHRvcG1vc3QgcGxh bmUgYXMgaXRzCj4gLQnCoCogdXNlIGlzIGV4Y2x1c2l2ZSB3aXRoIHRoZSBsZWdhY3kgY3Vyc29y IGFuZCB3ZSBvbmx5IHdhbnQgdG8gZXhwb3NlCj4gLQnCoCogb25lIG9mIHRob3NlLCBub3QgYm90 aC4gVW50aWwgd2UgY2FuIHNhZmVseSBleHBvc2UgdGhlIHRvcG1vc3QgcGxhbmUKPiAtCcKgKiBh cyBhIERSTV9QTEFORV9UWVBFX0NVUlNPUiB3aXRoIGFsbCB0aGUgZmVhdHVyZXMgZXhwb3NlZC9z dXBwb3J0ZWQsCj4gLQnCoCogd2UgZG9uJ3QgZXhwb3NlIHRoZSB0b3Btb3N0IHBsYW5lIGF0IGFs bCB0byBwcmV2ZW50IEFCSSBicmVha2FnZQo+IC0JwqAqIGRvd24gdGhlIGxpbmUuCj4gLQnCoCov Cj4gLQlpZiAoSVNfQlJPWFRPTihkZXYpKSB7Cj4gLQkJaW5mby0+bnVtX3Nwcml0ZXNbUElQRV9B XSA9IDI7Cj4gLQkJaW5mby0+bnVtX3Nwcml0ZXNbUElQRV9CXSA9IDI7Cj4gLQkJaW5mby0+bnVt X3Nwcml0ZXNbUElQRV9DXSA9IDE7Cj4gLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2KSB8 fCBJU19DSEVSUllWSUVXKGRldikpCj4gLQkJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkK PiAtCQkJaW5mby0+bnVtX3Nwcml0ZXNbcGlwZV0gPSAyOwo+IC0JZWxzZQo+IC0JCWZvcl9lYWNo X3BpcGUoZGV2X3ByaXYsIHBpcGUpCj4gLQkJCWluZm8tPm51bV9zcHJpdGVzW3BpcGVdID0gMTsK PiAtCj4gLQlpZiAoaTkxNS5kaXNhYmxlX2Rpc3BsYXkpIHsKPiAtCQlEUk1fSU5GTygiRGlzcGxh eSBkaXNhYmxlZCAobW9kdWxlIHBhcmFtZXRlcilcbiIpOwo+IC0JCWluZm8tPm51bV9waXBlcyA9 IDA7Cj4gLQl9IGVsc2UgaWYgKGluZm8tPm51bV9waXBlcyA+IDAgJiYKPiAtCQnCoMKgwqAoSVNf R0VONyhkZXZfcHJpdikgfHwgSVNfR0VOOChkZXZfcHJpdikpICYmCj4gLQkJwqDCoMKgSEFTX1BD SF9TUExJVChkZXYpKSB7Cj4gLQkJdTMyIGZ1c2Vfc3RyYXAgPSBJOTE1X1JFQUQoRlVTRV9TVFJB UCk7Cj4gLQkJdTMyIHNmdXNlX3N0cmFwID0gSTkxNV9SRUFEKFNGVVNFX1NUUkFQKTsKPiAtCj4g LQkJLyoKPiAtCQnCoCogU0ZVU0VfU1RSQVAgaXMgc3VwcG9zZWQgdG8gaGF2ZSBhIGJpdCBzaWdu YWxsaW5nIHRoZSBkaXNwbGF5Cj4gLQkJwqAqIGlzIGZ1c2VkIG9mZi4gVW5mb3J0dW5hdGVseSBp dCBzZWVtcyB0aGF0LCBhdCBsZWFzdCBpbgo+IC0JCcKgKiBjZXJ0YWluIGNhc2VzLCBmdXNlZCBv ZmYgZGlzcGxheSBtZWFucyB0aGF0IFBDSCBkaXNwbGF5Cj4gLQkJwqAqIHJlYWRzIGRvbid0IGxh bmQgYW55d2hlcmUuIEluIHRoYXQgY2FzZSwgd2UgcmVhZCAwcy4KPiAtCQnCoCoKPiAtCQnCoCog T24gQ1BUL1BQVCwgd2UgY2FuIGRldGVjdCB0aGlzIGNhc2UgYXMgU0ZVU0VfU1RSQVBfRlVTRV9M T0NLCj4gLQkJwqAqIHNob3VsZCBiZSBzZXQgd2hlbiB0YWtpbmcgb3ZlciBhZnRlciB0aGUgZmly bXdhcmUuCj4gLQkJwqAqLwo+IC0JCWlmIChmdXNlX3N0cmFwICYgSUxLX0lOVEVSTkFMX0RJU1BM QVlfRElTQUJMRSB8fAo+IC0JCcKgwqDCoMKgc2Z1c2Vfc3RyYXAgJiBTRlVTRV9TVFJBUF9ESVNQ TEFZX0RJU0FCTEVEIHx8Cj4gLQkJwqDCoMKgwqAoZGV2X3ByaXYtPnBjaF90eXBlID09IFBDSF9D UFQgJiYKPiAtCQnCoMKgwqDCoMKgIShzZnVzZV9zdHJhcCAmIFNGVVNFX1NUUkFQX0ZVU0VfTE9D SykpKSB7Cj4gLQkJCURSTV9JTkZPKCJEaXNwbGF5IGZ1c2VkIG9mZiwgZGlzYWJsaW5nXG4iKTsK PiAtCQkJaW5mby0+bnVtX3BpcGVzID0gMDsKPiAtCQl9IGVsc2UgaWYgKGZ1c2Vfc3RyYXAgJiBJ VkJfUElQRV9DX0RJU0FCTEUpIHsKPiAtCQkJRFJNX0lORk8oIlBpcGVDIGZ1c2VkIG9mZlxuIik7 Cj4gLQkJCWluZm8tPm51bV9waXBlcyAtPSAxOwo+IC0JCX0KPiAtCX0gZWxzZSBpZiAoaW5mby0+ bnVtX3BpcGVzID4gMCAmJiBJU19HRU45KGRldl9wcml2KSkgewo+IC0JCXUzMiBkZnNtID0gSTkx NV9SRUFEKFNLTF9ERlNNKTsKPiAtCQl1OCBkaXNhYmxlZF9tYXNrID0gMDsKPiAtCQlib29sIGlu dmFsaWQ7Cj4gLQkJaW50IG51bV9iaXRzOwo+IC0KPiAtCQlpZiAoZGZzbSAmIFNLTF9ERlNNX1BJ UEVfQV9ESVNBQkxFKQo+IC0JCQlkaXNhYmxlZF9tYXNrIHw9IEJJVChQSVBFX0EpOwo+IC0JCWlm IChkZnNtICYgU0tMX0RGU01fUElQRV9CX0RJU0FCTEUpCj4gLQkJCWRpc2FibGVkX21hc2sgfD0g QklUKFBJUEVfQik7Cj4gLQkJaWYgKGRmc20gJiBTS0xfREZTTV9QSVBFX0NfRElTQUJMRSkKPiAt CQkJZGlzYWJsZWRfbWFzayB8PSBCSVQoUElQRV9DKTsKPiAtCj4gLQkJbnVtX2JpdHMgPSBod2Vp Z2h0OChkaXNhYmxlZF9tYXNrKTsKPiAtCj4gLQkJc3dpdGNoIChkaXNhYmxlZF9tYXNrKSB7Cj4g LQkJY2FzZSBCSVQoUElQRV9BKToKPiAtCQljYXNlIEJJVChQSVBFX0IpOgo+IC0JCWNhc2UgQklU KFBJUEVfQSkgfCBCSVQoUElQRV9CKToKPiAtCQljYXNlIEJJVChQSVBFX0EpIHwgQklUKFBJUEVf Qyk6Cj4gLQkJCWludmFsaWQgPSB0cnVlOwo+IC0JCQlicmVhazsKPiAtCQlkZWZhdWx0Ogo+IC0J CQlpbnZhbGlkID0gZmFsc2U7Cj4gLQkJfQo+IC0KPiAtCQlpZiAobnVtX2JpdHMgPiBpbmZvLT5u dW1fcGlwZXMgfHwgaW52YWxpZCkKPiAtCQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBpcGUgZnVzZSBj b25maWd1cmF0aW9uOiAweCV4XG4iLAo+IC0JCQkJwqDCoGRpc2FibGVkX21hc2spOwo+IC0JCWVs c2UKPiAtCQkJaW5mby0+bnVtX3BpcGVzIC09IG51bV9iaXRzOwo+IC0JfQo+IC0KPiAtCS8qIElu aXRpYWxpemUgc2xpY2Uvc3Vic2xpY2UvRVUgaW5mbyAqLwo+IC0JaWYgKElTX0NIRVJSWVZJRVco ZGV2KSkKPiAtCQljaGVycnl2aWV3X3NzZXVfaW5mb19pbml0KGRldik7Cj4gLQllbHNlIGlmIChJ U19CUk9BRFdFTEwoZGV2KSkKPiAtCQlicm9hZHdlbGxfc3NldV9pbmZvX2luaXQoZGV2KTsKPiAt CWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkpCj4gLQkJZ2VuOV9zc2V1X2luZm9f aW5pdChkZXYpOwo+IC0KPiAtCWluZm8tPmhhc19zbm9vcCA9ICFpbmZvLT5oYXNfbGxjOwo+IC0K PiAtCS8qIFNub29waW5nIGlzIGJyb2tlbiBvbiBCWFQgQSBzdGVwcGluZy4gKi8KPiAtCWlmIChJ U19CWFRfUkVWSUQoZGV2LCAwLCBCWFRfUkVWSURfQTEpKQo+IC0JCWluZm8tPmhhc19zbm9vcCA9 IGZhbHNlOwo+IC0KPiAtCURSTV9ERUJVR19EUklWRVIoInNsaWNlIHRvdGFsOiAldVxuIiwgaW5m by0+c2xpY2VfdG90YWwpOwo+IC0JRFJNX0RFQlVHX0RSSVZFUigic3Vic2xpY2UgdG90YWw6ICV1 XG4iLCBpbmZvLT5zdWJzbGljZV90b3RhbCk7Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJzdWJzbGlj ZSBwZXIgc2xpY2U6ICV1XG4iLCBpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2UpOwo+IC0JRFJNX0RF QlVHX0RSSVZFUigiRVUgdG90YWw6ICV1XG4iLCBpbmZvLT5ldV90b3RhbCk7Cj4gLQlEUk1fREVC VUdfRFJJVkVSKCJFVSBwZXIgc3Vic2xpY2U6ICV1XG4iLCBpbmZvLT5ldV9wZXJfc3Vic2xpY2Up Owo+IC0JRFJNX0RFQlVHX0RSSVZFUigiaGFzIHNsaWNlIHBvd2VyIGdhdGluZzogJXNcbiIsCj4g LQkJCcKgaW5mby0+aGFzX3NsaWNlX3BnID8gInkiIDogIm4iKTsKPiAtCURSTV9ERUJVR19EUklW RVIoImhhcyBzdWJzbGljZSBwb3dlciBnYXRpbmc6ICVzXG4iLAo+IC0JCQnCoGluZm8tPmhhc19z dWJzbGljZV9wZyA/ICJ5IiA6ICJuIik7Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJoYXMgRVUgcG93 ZXIgZ2F0aW5nOiAlc1xuIiwKPiAtCQkJwqBpbmZvLT5oYXNfZXVfcGcgPyAieSIgOiAibiIpOwo+ IC0KPiAtCWk5MTUuZW5hYmxlX2V4ZWNsaXN0cyA9Cj4gLQkJaW50ZWxfc2FuaXRpemVfZW5hYmxl X2V4ZWNsaXN0cyhkZXZfcHJpdiwKPiAtCQkJCQnCoMKgwqDCoMKgwqDCoAlpOTE1LmVuYWJsZV9l eGVjbGlzdHMpOwo+IC0KPiAtCS8qCj4gLQnCoCogaTkxNS5lbmFibGVfcHBndHQgaXMgcmVhZC1v bmx5LCBzbyBkbyBhbiBlYXJseSBwYXNzIHRvIHZhbGlkYXRlIHRoZQo+IC0JwqAqIHVzZXIncyBy ZXF1ZXN0ZWQgc3RhdGUgYWdhaW5zdCB0aGUgaGFyZHdhcmUvZHJpdmVyIGNhcGFiaWxpdGllcy7C oMKgV2UKPiAtCcKgKiBkbyB0aGlzIG5vdyBzbyB0aGF0IHdlIGNhbiBwcmludCBvdXQgYW55IGxv ZyBtZXNzYWdlcyBvbmNlIHJhdGhlcgo+IC0JwqAqIHRoYW4gZXZlcnkgdGltZSB3ZSBjaGVjayBp bnRlbF9lbmFibGVfcHBndHQoKS4KPiAtCcKgKi8KPiAtCWk5MTUuZW5hYmxlX3BwZ3R0ID0KPiAt CQlpbnRlbF9zYW5pdGl6ZV9lbmFibGVfcHBndHQoZGV2X3ByaXYsIGk5MTUuZW5hYmxlX3BwZ3R0 KTsKPiAtCURSTV9ERUJVR19EUklWRVIoInBwZ3R0IG1vZGU6ICVpXG4iLCBpOTE1LmVuYWJsZV9w cGd0dCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGludGVsX2luaXRfZHBpbyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCS8qCj4gLQnCoCogSU9TRl9QT1JUX0RQ SU8gaXMgdXNlZCBmb3IgVkxWIHgyIFBIWSAoRFAvSERNSSBCIGFuZCBDKSwKPiAtCcKgKiBDSFYg eDEgUEhZIChEUC9IRE1JIEQpCj4gLQnCoCogSU9TRl9QT1JUX0RQSU9fMiBpcyB1c2VkIGZvciBD SFYgeDIgUEhZIChEUC9IRE1JIEIgYW5kIEMpCj4gLQnCoCovCj4gLQlpZiAoSVNfQ0hFUlJZVklF VyhkZXZfcHJpdikpIHsKPiAtCQlEUElPX1BIWV9JT1NGX1BPUlQoRFBJT19QSFkwKSA9IElPU0Zf UE9SVF9EUElPXzI7Cj4gLQkJRFBJT19QSFlfSU9TRl9QT1JUKERQSU9fUEhZMSkgPSBJT1NGX1BP UlRfRFBJTzsKPiAtCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpIHsKPiAtCQlE UElPX1BIWV9JT1NGX1BPUlQoRFBJT19QSFkwKSA9IElPU0ZfUE9SVF9EUElPOwo+IC0JfQo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IGk5MTVfd29ya3F1ZXVlc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JLyoKPiAtCcKgKiBUaGUgaTkxNSB3b3JrcXVldWUg aXMgcHJpbWFyaWx5IHVzZWQgZm9yIGJhdGNoZWQgcmV0aXJlbWVudCBvZgo+IC0JwqAqIHJlcXVl c3RzIChhbmQgdGh1cyBtYW5hZ2luZyBibykgb25jZSB0aGUgdGFzayBoYXMgYmVlbiBjb21wbGV0 ZWQKPiAtCcKgKiBieSB0aGUgR1BVLiBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoKSBpcyBjYWxs ZWQgZGlyZWN0bHkgd2hlbiB3ZQo+IC0JwqAqIG5lZWQgaGlnaC1wcmlvcml0eSByZXRpcmVtZW50 LCBzdWNoIGFzIHdhaXRpbmcgZm9yIGFuIGV4cGxpY2l0Cj4gLQnCoCogYm8uCj4gLQnCoCoKPiAt CcKgKiBJdCBpcyBhbHNvIHVzZWQgZm9yIHBlcmlvZGljIGxvdy1wcmlvcml0eSBldmVudHMsIHN1 Y2ggYXMKPiAtCcKgKiBpZGxlLXRpbWVycyBhbmQgcmVjb3JkaW5nIGVycm9yIHN0YXRlLgo+IC0J wqAqCj4gLQnCoCogQWxsIHRhc2tzIG9uIHRoZSB3b3JrcXVldWUgYXJlIGV4cGVjdGVkIHRvIGFj cXVpcmUgdGhlIGRldiBtdXRleAo+IC0JwqAqIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5p bmcgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiB0aGUKPiAtCcKgKiB3b3JrcXVldWUgYXQgYW55 IHRpbWUuwqDCoFVzZSBhbiBvcmRlcmVkIG9uZS4KPiAtCcKgKi8KPiAtCWRldl9wcml2LT53cSA9 IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJpOTE1IiwgMCk7Cj4gLQlpZiAoZGV2X3ByaXYtPndx ID09IE5VTEwpCj4gLQkJZ290byBvdXRfZXJyOwo+IC0KPiAtCWRldl9wcml2LT5ob3RwbHVnLmRw X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoImk5MTUtZHAiLCAwKTsKPiAtCWlmIChkZXZf cHJpdi0+aG90cGx1Zy5kcF93cSA9PSBOVUxMKQo+IC0JCWdvdG8gb3V0X2ZyZWVfd3E7Cj4gLQo+ IC0JZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfd3EgPQo+IC0JCWFsbG9jX29yZGVyZWRf d29ya3F1ZXVlKCJpOTE1LWhhbmdjaGVjayIsIDApOwo+IC0JaWYgKGRldl9wcml2LT5ncHVfZXJy b3IuaGFuZ2NoZWNrX3dxID09IE5VTEwpCj4gLQkJZ290byBvdXRfZnJlZV9kcF93cTsKPiAtCj4g LQlyZXR1cm4gMDsKPiAtCj4gLW91dF9mcmVlX2RwX3dxOgo+IC0JZGVzdHJveV93b3JrcXVldWUo ZGV2X3ByaXYtPmhvdHBsdWcuZHBfd3EpOwo+IC1vdXRfZnJlZV93cToKPiAtCWRlc3Ryb3lfd29y a3F1ZXVlKGRldl9wcml2LT53cSk7Cj4gLW91dF9lcnI6Cj4gLQlEUk1fRVJST1IoIkZhaWxlZCB0 byBhbGxvY2F0ZSB3b3JrcXVldWVzLlxuIik7Cj4gLQo+IC0JcmV0dXJuIC1FTk9NRU07Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIGk5MTVfd29ya3F1ZXVlc19jbGVhbnVwKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYt PmdwdV9lcnJvci5oYW5nY2hlY2tfd3EpOwo+IC0JZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYt PmhvdHBsdWcuZHBfd3EpOwo+IC0JZGVzdHJveV93b3JrcXVldWUoZGV2X3ByaXYtPndxKTsKPiAt fQo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfZHJpdmVyX2luaXRfZWFybHkgLSBzZXR1cCBzdGF0ZSBu b3QgcmVxdWlyaW5nIGRldmljZSBhY2Nlc3MKPiAtICogQGRldl9wcml2OiBkZXZpY2UgcHJpdmF0 ZQo+IC0gKgo+IC0gKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgdGhhdCBpcyBhICJTVy1vbmx5IiBz dGF0ZSwgdGhhdCBpcyBzdGF0ZSBub3QKPiAtICogcmVxdWlyaW5nIGFjY2Vzc2luZyB0aGUgZGV2 aWNlIG9yIGV4cG9zaW5nIHRoZSBkcml2ZXIgdmlhIGtlcm5lbCBpbnRlcm5hbAo+IC0gKiBvciB1 c2Vyc3BhY2UgaW50ZXJmYWNlcy4gRXhhbXBsZSBzdGVwcyBiZWxvbmdpbmcgaGVyZTogbG9jayBp bml0aWFsaXphdGlvbiwKPiAtICogc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uLCBzZXR0aW5nIHVw IGRldmljZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZAo+IC0gKiBmdW5jdGlvbiBob29rcyBub3Qg cmVxdWlyaW5nIGFjY2Vzc2luZyB0aGUgZGV2aWNlLgo+IC0gKi8KPiAtc3RhdGljIGludCBpOTE1 X2RyaXZlcl9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAt CQkJCcKgwqBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQo+IC17Cj4gLQljb25zdCBz dHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKm1hdGNoX2luZm8gPQo+IC0JCShzdHJ1Y3QgaW50ZWxf ZGV2aWNlX2luZm8gKillbnQtPmRyaXZlcl9kYXRhOwo+IC0Jc3RydWN0IGludGVsX2RldmljZV9p bmZvICpkZXZpY2VfaW5mbzsKPiAtCWludCByZXQgPSAwOwo+IC0KPiAtCWlmIChpOTE1X2luamVj dF9sb2FkX2ZhaWx1cmUoKSkKPiAtCQlyZXR1cm4gLUVOT0RFVjsKPiAtCj4gLQkvKiBTZXR1cCB0 aGUgd3JpdGUtb25jZSAiY29uc3RhbnQiIGRldmljZSBpbmZvICovCj4gLQlkZXZpY2VfaW5mbyA9 IChzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKikmZGV2X3ByaXYtPmluZm87Cj4gLQltZW1jcHko ZGV2aWNlX2luZm8sIG1hdGNoX2luZm8sIHNpemVvZigqZGV2aWNlX2luZm8pKTsKPiAtCWRldmlj ZV9pbmZvLT5kZXZpY2VfaWQgPSBkZXZfcHJpdi0+ZHJtLnBkZXYtPmRldmljZTsKPiAtCj4gLQlC VUdfT04oZGV2aWNlX2luZm8tPmdlbiA+IHNpemVvZihkZXZpY2VfaW5mby0+Z2VuX21hc2spICog QklUU19QRVJfQllURSk7Cj4gLQlkZXZpY2VfaW5mby0+Z2VuX21hc2sgPSBCSVQoZGV2aWNlX2lu Zm8tPmdlbiAtIDEpOwo+IC0KPiAtCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aXJxX2xvY2sp Owo+IC0Jc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5ncHVfZXJyb3IubG9jayk7Cj4gLQltdXRl eF9pbml0KCZkZXZfcHJpdi0+YmFja2xpZ2h0X2xvY2spOwo+IC0Jc3Bpbl9sb2NrX2luaXQoJmRl dl9wcml2LT51bmNvcmUubG9jayk7Cj4gLQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPm1tLm9i amVjdF9zdGF0X2xvY2spOwo+IC0Jc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5tbWlvX2ZsaXBf bG9jayk7Cj4gLQltdXRleF9pbml0KCZkZXZfcHJpdi0+c2JfbG9jayk7Cj4gLQltdXRleF9pbml0 KCZkZXZfcHJpdi0+bW9kZXNldF9yZXN0b3JlX2xvY2spOwo+IC0JbXV0ZXhfaW5pdCgmZGV2X3By aXYtPmF2X211dGV4KTsKPiAtCW11dGV4X2luaXQoJmRldl9wcml2LT53bS53bV9tdXRleCk7Cj4g LQltdXRleF9pbml0KCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAtCj4gLQlyZXQgPSBpOTE1X3dv cmtxdWV1ZXNfaW5pdChkZXZfcHJpdik7Cj4gLQlpZiAocmV0IDwgMCkKPiAtCQlyZXR1cm4gcmV0 Owo+IC0KPiAtCS8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBjYWxscyB0byBIQVNf UENIXyogKi8KPiAtCWludGVsX2RldGVjdF9wY2goJmRldl9wcml2LT5kcm0pOwo+IC0KPiAtCWlu dGVsX3BtX3NldHVwKCZkZXZfcHJpdi0+ZHJtKTsKPiAtCWludGVsX2luaXRfZHBpbyhkZXZfcHJp dik7Cj4gLQlpbnRlbF9wb3dlcl9kb21haW5zX2luaXQoZGV2X3ByaXYpOwo+IC0JaW50ZWxfaXJx X2luaXQoZGV2X3ByaXYpOwo+IC0JaW50ZWxfaW5pdF9kaXNwbGF5X2hvb2tzKGRldl9wcml2KTsK PiAtCWludGVsX2luaXRfY2xvY2tfZ2F0aW5nX2hvb2tzKGRldl9wcml2KTsKPiAtCWludGVsX2lu aXRfYXVkaW9faG9va3MoZGV2X3ByaXYpOwo+IC0JaTkxNV9nZW1fbG9hZF9pbml0KCZkZXZfcHJp di0+ZHJtKTsKPiAtCj4gLQlpbnRlbF9kaXNwbGF5X2NyY19pbml0KCZkZXZfcHJpdi0+ZHJtKTsK PiAtCj4gLQlpOTE1X2R1bXBfZGV2aWNlX2luZm8oZGV2X3ByaXYpOwo+IC0KPiAtCS8qIE5vdCBh bGwgcHJlLXByb2R1Y3Rpb24gbWFjaGluZXMgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnksIG9ubHkg dGhlCj4gLQnCoCogdmVyeSBmaXJzdCBvbmVzLiBBbG1vc3QgZXZlcnl0aGluZyBzaG91bGQgd29y aywgZXhjZXB0IGZvciBtYXliZQo+IC0JwqAqIHN1c3BlbmQvcmVzdW1lLiBBbmQgd2UgZG9uJ3Qg aW1wbGVtZW50IHdvcmthcm91bmRzIHRoYXQgYWZmZWN0IG9ubHkKPiAtCcKgKiBwcmUtcHJvZHVj dGlvbiBtYWNoaW5lcy4gKi8KPiAtCWlmIChJU19IU1dfRUFSTFlfU0RWKGRldl9wcml2KSkKPiAt CQlEUk1fSU5GTygiVGhpcyBpcyBhbiBlYXJseSBwcmUtcHJvZHVjdGlvbiBIYXN3ZWxsIG1hY2hp bmUuICIKPiAtCQkJwqAiSXQgbWF5IG5vdCBiZSBmdWxseSBmdW5jdGlvbmFsLlxuIik7Cj4gLQo+ IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBpOTE1X2RyaXZlcl9jbGVhbnVwX2Vh cmx5IC0gY2xlYW51cCB0aGUgc2V0dXAgZG9uZSBpbiBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5KCkK PiAtICogQGRldl9wcml2OiBkZXZpY2UgcHJpdmF0ZQo+IC0gKi8KPiAtc3RhdGljIHZvaWQgaTkx NV9kcml2ZXJfY2xlYW51cF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gLXsKPiAtCWk5MTVfZ2VtX2xvYWRfY2xlYW51cChkZXZfcHJpdi0+ZGV2KTsKPiAtCWk5MTVf d29ya3F1ZXVlc19jbGVhbnVwKGRldl9wcml2KTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpOTE1 X21taW9fc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0JaW50IG1taW9fYmFyOwo+ IC0JaW50IG1taW9fc2l6ZTsKPiAtCj4gLQltbWlvX2JhciA9IElTX0dFTjIoZGV2KSA/IDEgOiAw Owo+IC0JLyoKPiAtCcKgKiBCZWZvcmUgZ2VuNCwgdGhlIHJlZ2lzdGVycyBhbmQgdGhlIEdUVCBh cmUgYmVoaW5kIGRpZmZlcmVudCBCQVJzLgo+IC0JwqAqIEhvd2V2ZXIsIGZyb20gZ2VuNCBvbndh cmRzLCB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgR1RUIGFyZSBzaGFyZWQKPiAtCcKgKiBpbiB0aGUg c2FtZSBCQVIsIHNvIHdlIHdhbnQgdG8gcmVzdHJpY3QgdGhpcyBpb3JlbWFwIGZyb20KPiAtCcKg KiBjbG9iYmVyaW5nIHRoZSBHVFQgd2hpY2ggd2Ugd2FudCBpb3JlbWFwX3djIGluc3RlYWQuIEZv cnR1bmF0ZWx5LAo+IC0JwqAqIHRoZSByZWdpc3RlciBCQVIgcmVtYWlucyB0aGUgc2FtZSBzaXpl IGZvciBhbGwgdGhlIGVhcmxpZXIKPiAtCcKgKiBnZW5lcmF0aW9ucyB1cCB0byBJcm9ubGFrZS4K PiAtCcKgKi8KPiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDUpCj4gLQkJbW1pb19zaXpl ID0gNTEyICogMTAyNDsKPiAtCWVsc2UKPiAtCQltbWlvX3NpemUgPSAyICogMTAyNCAqIDEwMjQ7 Cj4gLQlkZXZfcHJpdi0+cmVncyA9IHBjaV9pb21hcChkZXYtPnBkZXYsIG1taW9fYmFyLCBtbWlv X3NpemUpOwo+IC0JaWYgKGRldl9wcml2LT5yZWdzID09IE5VTEwpIHsKPiAtCQlEUk1fRVJST1Io ImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKPiAtCj4gLQkJcmV0dXJuIC1FSU87Cj4gLQl9 Cj4gLQo+IC0JLyogVHJ5IHRvIG1ha2Ugc3VyZSBNQ0hCQVIgaXMgZW5hYmxlZCBiZWZvcmUgcG9r aW5nIGF0IGl0ICovCj4gLQlpbnRlbF9zZXR1cF9tY2hiYXIoZGV2KTsKPiAtCj4gLQlyZXR1cm4g MDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9tbWlvX2NsZWFudXAoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOwo+IC0KPiAtCWludGVsX3RlYXJkb3duX21jaGJhcihkZXYpOwo+IC0JcGNp X2lvdW5tYXAoZGV2LT5wZGV2LCBkZXZfcHJpdi0+cmVncyk7Cj4gLX0KPiAtCj4gLS8qKgo+IC0g KiBpOTE1X2RyaXZlcl9pbml0X21taW8gLSBzZXR1cCBkZXZpY2UgTU1JTwo+IC0gKiBAZGV2X3By aXY6IGRldmljZSBwcml2YXRlCj4gLSAqCj4gLSAqIFNldHVwIG1pbmltYWwgZGV2aWNlIHN0YXRl IG5lY2Vzc2FyeSBmb3IgTU1JTyBhY2Nlc3NlcyBsYXRlciBpbiB0aGUKPiAtICogaW5pdGlhbGl6 YXRpb24gc2VxdWVuY2UuIFRoZSBzZXR1cCBoZXJlIHNob3VsZCBhdm9pZCBhbnkgb3RoZXIgZGV2 aWNlLXdpZGUKPiAtICogc2lkZSBlZmZlY3RzIG9yIGV4cG9zaW5nIHRoZSBkcml2ZXIgdmlhIGtl cm5lbCBpbnRlcm5hbCBvciB1c2VyIHNwYWNlCj4gLSAqIGludGVyZmFjZXMuCj4gLSAqLwo+IC1z dGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfbW1pbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2 Owo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAoaTkxNV9pbmplY3RfbG9hZF9mYWlsdXJlKCkpCj4g LQkJcmV0dXJuIC1FTk9ERVY7Cj4gLQo+IC0JaWYgKGk5MTVfZ2V0X2JyaWRnZV9kZXYoZGV2KSkK PiAtCQlyZXR1cm4gLUVJTzsKPiAtCj4gLQlyZXQgPSBpOTE1X21taW9fc2V0dXAoZGV2KTsKPiAt CWlmIChyZXQgPCAwKQo+IC0JCWdvdG8gcHV0X2JyaWRnZTsKPiAtCj4gLQlpbnRlbF91bmNvcmVf aW5pdChkZXZfcHJpdik7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1wdXRfYnJpZGdlOgo+IC0J cGNpX2Rldl9wdXQoZGV2X3ByaXYtPmJyaWRnZV9kZXYpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4g LX0KPiAtCj4gLS8qKgo+IC0gKiBpOTE1X2RyaXZlcl9jbGVhbnVwX21taW8gLSBjbGVhbnVwIHRo ZSBzZXR1cCBkb25lIGluIGk5MTVfZHJpdmVyX2luaXRfbW1pbygpCj4gLSAqIEBkZXZfcHJpdjog ZGV2aWNlIHByaXZhdGUKPiAtICovCj4gLXN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX2NsZWFudXBf bW1pbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2Owo+IC0KPiAtCWludGVsX3VuY29yZV9maW5p KGRldl9wcml2KTsKPiAtCWk5MTVfbW1pb19jbGVhbnVwKGRldik7Cj4gLQlwY2lfZGV2X3B1dChk ZXZfcHJpdi0+YnJpZGdlX2Rldik7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBpOTE1X2RyaXZlcl9p bml0X2h3IC0gc2V0dXAgc3RhdGUgcmVxdWlyaW5nIGRldmljZSBhY2Nlc3MKPiAtICogQGRldl9w cml2OiBkZXZpY2UgcHJpdmF0ZQo+IC0gKgo+IC0gKiBTZXR1cCBzdGF0ZSB0aGF0IHJlcXVpcmVz IGFjY2Vzc2luZyB0aGUgZGV2aWNlLCBidXQgZG9lc24ndCByZXF1aXJlCj4gLSAqIGV4cG9zaW5n IHRoZSBkcml2ZXIgdmlhIGtlcm5lbCBpbnRlcm5hbCBvciB1c2Vyc3BhY2UgaW50ZXJmYWNlcy4K PiAtICovCj4gLXN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZf cHJpdi0+ZGV2Owo+IC0Jc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZkZXZfcHJpdi0+Z2d0dDsK PiAtCXVpbnQzMl90IGFwZXJ0dXJlX3NpemU7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlmIChpOTE1 X2luamVjdF9sb2FkX2ZhaWx1cmUoKSkKPiAtCQlyZXR1cm4gLUVOT0RFVjsKPiAtCj4gLQlpbnRl bF9kZXZpY2VfaW5mb19ydW50aW1lX2luaXQoZGV2KTsKPiAtCj4gLQlyZXQgPSBpOTE1X2dndHRf aW5pdF9odyhkZXYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCXJldCA9 IGk5MTVfZ2d0dF9lbmFibGVfaHcoZGV2KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1Io ImZhaWxlZCB0byBlbmFibGUgR0dUVFxuIik7Cj4gLQkJZ290byBvdXRfZ2d0dDsKPiAtCX0KPiAt Cj4gLQkvKiBXQVJOSU5HOiBBcHBhcmVudGx5IHdlIG11c3Qga2ljayBmYmRldiBkcml2ZXJzIGJl Zm9yZSB2Z2Fjb24sCj4gLQnCoCogb3RoZXJ3aXNlIHRoZSB2Z2EgZmJkZXYgZHJpdmVyIGZhbGxz IG92ZXIuICovCj4gLQlyZXQgPSBpOTE1X2tpY2tfb3V0X2Zpcm13YXJlX2ZiKGRldl9wcml2KTsK PiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1IoImZhaWxlZCB0byByZW1vdmUgY29uZmxpY3Rp bmcgZnJhbWVidWZmZXIgZHJpdmVyc1xuIik7Cj4gLQkJZ290byBvdXRfZ2d0dDsKPiAtCX0KPiAt Cj4gLQlyZXQgPSBpOTE1X2tpY2tfb3V0X3ZnYWNvbihkZXZfcHJpdik7Cj4gLQlpZiAocmV0KSB7 Cj4gLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVtb3ZlIGNvbmZsaWN0aW5nIFZHQSBjb25zb2xl XG4iKTsKPiAtCQlnb3RvIG91dF9nZ3R0Owo+IC0JfQo+IC0KPiAtCXBjaV9zZXRfbWFzdGVyKGRl di0+cGRldik7Cj4gLQo+IC0JLyogb3ZlcmxheSBvbiBnZW4yIGlzIGJyb2tlbiBhbmQgY2FuJ3Qg YWRkcmVzcyBhYm92ZSAxRyAqLwo+IC0JaWYgKElTX0dFTjIoZGV2KSkgewo+IC0JCXJldCA9IGRt YV9zZXRfY29oZXJlbnRfbWFzaygmZGV2LT5wZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMCkpOwo+ IC0JCWlmIChyZXQpIHsKPiAtCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IERNQSBtYXNrXG4i KTsKPiAtCj4gLQkJCWdvdG8gb3V0X2dndHQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCj4gLQkvKiA5 NjVHTSBzb21ldGltZXMgaW5jb3JyZWN0bHkgd3JpdGVzIHRvIGhhcmR3YXJlIHN0YXR1cyBwYWdl IChIV1MpCj4gLQnCoCogdXNpbmcgMzJiaXQgYWRkcmVzc2luZywgb3ZlcndyaXRpbmcgbWVtb3J5 IGlmIEhXUyBpcyBsb2NhdGVkCj4gLQnCoCogYWJvdmUgNEdCLgo+IC0JwqAqCj4gLQnCoCogVGhl IGRvY3VtZW50YXRpb24gYWxzbyBtZW50aW9ucyBhbiBpc3N1ZSB3aXRoIHVuZGVmaW5lZAo+IC0J wqAqIGJlaGF2aW91ciBpZiBhbnkgZ2VuZXJhbCBzdGF0ZSBpcyBhY2Nlc3NlZCB3aXRoaW4gYSBw YWdlIGFib3ZlIDRHQiwKPiAtCcKgKiB3aGljaCBhbHNvIG5lZWRzIHRvIGJlIGhhbmRsZWQgY2Fy ZWZ1bGx5Lgo+IC0JwqAqLwo+IC0JaWYgKElTX0JST0FEV0FURVIoZGV2KSB8fCBJU19DUkVTVExJ TkUoZGV2KSkgewo+IC0JCXJldCA9IGRtYV9zZXRfY29oZXJlbnRfbWFzaygmZGV2LT5wZGV2LT5k ZXYsIERNQV9CSVRfTUFTSygzMikpOwo+IC0KPiAtCQlpZiAocmV0KSB7Cj4gLQkJCURSTV9FUlJP UigiZmFpbGVkIHRvIHNldCBETUEgbWFza1xuIik7Cj4gLQo+IC0JCQlnb3RvIG91dF9nZ3R0Owo+ IC0JCX0KPiAtCX0KPiAtCj4gLQlhcGVydHVyZV9zaXplID0gZ2d0dC0+bWFwcGFibGVfZW5kOwo+ IC0KPiAtCWdndHQtPm1hcHBhYmxlID0KPiAtCQlpb19tYXBwaW5nX2NyZWF0ZV93YyhnZ3R0LT5t YXBwYWJsZV9iYXNlLAo+IC0JCQkJwqDCoMKgwqDCoGFwZXJ0dXJlX3NpemUpOwo+IC0JaWYgKCFn Z3R0LT5tYXBwYWJsZSkgewo+IC0JCXJldCA9IC1FSU87Cj4gLQkJZ290byBvdXRfZ2d0dDsKPiAt CX0KPiAtCj4gLQlnZ3R0LT5tdHJyID0gYXJjaF9waHlzX3djX2FkZChnZ3R0LT5tYXBwYWJsZV9i YXNlLAo+IC0JCQkJCcKgwqDCoMKgwqDCoGFwZXJ0dXJlX3NpemUpOwo+IC0KPiAtCXBtX3Fvc19h ZGRfcmVxdWVzdCgmZGV2X3ByaXYtPnBtX3FvcywgUE1fUU9TX0NQVV9ETUFfTEFURU5DWSwKPiAt CQkJwqDCoMKgUE1fUU9TX0RFRkFVTFRfVkFMVUUpOwo+IC0KPiAtCWludGVsX3VuY29yZV9zYW5p dGl6ZShkZXZfcHJpdik7Cj4gLQo+IC0JaW50ZWxfb3ByZWdpb25fc2V0dXAoZGV2X3ByaXYpOwo+ IC0KPiAtCWk5MTVfZ2VtX2xvYWRfaW5pdF9mZW5jZXMoZGV2X3ByaXYpOwo+IC0KPiAtCS8qIE9u IHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJpbGl0eSBvbiB0 aGUKPiAtCcKgKiBpbnRlZ3JhdGVkIGdyYXBoaWNzIGV2ZW4gdGhvdWdoIHRoZSBzdXBwb3J0IGlz bid0IGFjdHVhbGx5IHRoZXJlCj4gLQnCoCogYWNjb3JkaW5nIHRvIHRoZSBwdWJsaXNoZWQgc3Bl Y3MuwqDCoEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGZ1bmN0aW9uCj4gLQnCoCogY29ycmVjdGx5IGlu IHRlc3Rpbmcgb24gOTQ1Ry4KPiAtCcKgKiBUaGlzIG1heSBiZSBhIHNpZGUgZWZmZWN0IG9mIE1T SSBoYXZpbmcgYmVlbiBtYWRlIGF2YWlsYWJsZSBmb3IgUEVHCj4gLQnCoCogYW5kIHRoZSByZWdp c3RlcnMgYmVpbmcgY2xvc2VseSBhc3NvY2lhdGVkLgo+IC0JwqAqCj4gLQnCoCogQWNjb3JkaW5n IHRvIGNoaXBzZXQgZXJyYXRhLCBvbiB0aGUgOTY1R00sIE1TSSBpbnRlcnJ1cHRzIG1heQo+IC0J wqAqIGJlIGxvc3Qgb3IgZGVsYXllZCwgYnV0IHdlIHVzZSB0aGVtIGFueXdheXMgdG8gYXZvaWQK PiAtCcKgKiBzdHVjayBpbnRlcnJ1cHRzIG9uIHNvbWUgbWFjaGluZXMuCj4gLQnCoCovCj4gLQlp ZiAoIUlTX0k5NDVHKGRldikgJiYgIUlTX0k5NDVHTShkZXYpKSB7Cj4gLQkJaWYgKHBjaV9lbmFi bGVfbXNpKGRldi0+cGRldikgPCAwKQo+IC0JCQlEUk1fREVCVUdfRFJJVkVSKCJjYW4ndCBlbmFi bGUgTVNJIik7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1vdXRfZ2d0dDoKPiAtCWk5 MTVfZ2d0dF9jbGVhbnVwX2h3KGRldik7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAt LyoqCj4gLSAqIGk5MTVfZHJpdmVyX2NsZWFudXBfaHcgLSBjbGVhbnVwIHRoZSBzZXR1cCBkb25l IGluIGk5MTVfZHJpdmVyX2luaXRfaHcoKQo+IC0gKiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRl Cj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9jbGVhbnVwX2h3KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGRldl9wcml2LT5kZXY7Cj4gLQlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRldl9wcml2LT5n Z3R0Owo+IC0KPiAtCWlmIChkZXYtPnBkZXYtPm1zaV9lbmFibGVkKQo+IC0JCXBjaV9kaXNhYmxl X21zaShkZXYtPnBkZXYpOwo+IC0KPiAtCXBtX3Fvc19yZW1vdmVfcmVxdWVzdCgmZGV2X3ByaXYt PnBtX3Fvcyk7Cj4gLQlhcmNoX3BoeXNfd2NfZGVsKGdndHQtPm10cnIpOwo+IC0JaW9fbWFwcGlu Z19mcmVlKGdndHQtPm1hcHBhYmxlKTsKPiAtCWk5MTVfZ2d0dF9jbGVhbnVwX2h3KGRldik7Cj4g LX0KPiAtCj4gLS8qKgo+IC0gKiBpOTE1X2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBk cml2ZXIgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCj4gLSAqIEBkZXZfcHJpdjogZGV2aWNl IHByaXZhdGUKPiAtICoKPiAtICogUGVyZm9ybSBhbnkgc3RlcHMgbmVjZXNzYXJ5IHRvIG1ha2Ug dGhlIGRyaXZlciBhdmFpbGFibGUgdmlhIGtlcm5lbAo+IC0gKiBpbnRlcm5hbCBvciB1c2Vyc3Bh Y2UgaW50ZXJmYWNlcy4KPiAtICovCj4gLXN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3JlZ2lzdGVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7Cj4gLQo+IC0JaTkxNV9nZW1fc2hyaW5rZXJfaW5p dChkZXZfcHJpdik7Cj4gLQo+IC0JLyoKPiAtCcKgKiBOb3RpZnkgYSB2YWxpZCBzdXJmYWNlIGFm dGVyIG1vZGVzZXR0aW5nLAo+IC0JwqAqIHdoZW4gcnVubmluZyBpbnNpZGUgYSBWTS4KPiAtCcKg Ki8KPiAtCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCj4gLQkJSTkxNV9XUklURSh2 Z3RpZl9yZWcoZGlzcGxheV9yZWFkeSksIFZHVF9EUlZfRElTUExBWV9SRUFEWSk7Cj4gLQo+IC0J LyogUmV2ZWFsIG91ciBwcmVzZW5jZSB0byB1c2Vyc3BhY2UgKi8KPiAtCWlmIChkcm1fZGV2X3Jl Z2lzdGVyKGRldiwgMCkgPT0gMCkgewo+IC0JCWk5MTVfZGVidWdmc19yZWdpc3RlcihkZXZfcHJp dik7Cj4gLQkJaTkxNV9zZXR1cF9zeXNmcyhkZXYpOwo+IC0JCWludGVsX21vZGVzZXRfcmVnaXN0 ZXIoZGV2X3ByaXYpOwo+IC0JfSBlbHNlCj4gLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0 ZXIgZHJpdmVyIGZvciB1c2Vyc3BhY2UgYWNjZXNzIVxuIik7Cj4gLQo+IC0JaWYgKElOVEVMX0lO Rk8oZGV2X3ByaXYpLT5udW1fcGlwZXMpIHsKPiAtCQkvKiBNdXN0IGJlIGRvbmUgYWZ0ZXIgcHJv YmluZyBvdXRwdXRzICovCj4gLQkJaW50ZWxfb3ByZWdpb25fcmVnaXN0ZXIoZGV2X3ByaXYpOwo+ IC0JCWFjcGlfdmlkZW9fcmVnaXN0ZXIoKTsKPiAtCX0KPiAtCj4gLQlpZiAoSVNfR0VONShkZXZf cHJpdikpCj4gLQkJaW50ZWxfZ3B1X2lwc19pbml0KGRldl9wcml2KTsKPiAtCj4gLQlpOTE1X2F1 ZGlvX2NvbXBvbmVudF9pbml0KGRldl9wcml2KTsKPiAtCj4gLQkvKgo+IC0JwqAqIFNvbWUgcG9y dHMgcmVxdWlyZSBjb3JyZWN0bHkgc2V0LXVwIGhwZCByZWdpc3RlcnMgZm9yIGRldGVjdGlvbiB0 bwo+IC0JwqAqIHdvcmsgcHJvcGVybHkgKGxlYWRpbmcgdG8gZ2hvc3QgY29ubmVjdGVkIGNvbm5l Y3RvciBzdGF0dXMpLCBlLmcuIFZHQQo+IC0JwqAqIG9uIGdtNDUuwqDCoEhlbmNlIHdlIGNhbiBv bmx5IHNldCB1cCB0aGUgaW5pdGlhbCBmYmRldiBjb25maWcgYWZ0ZXIgaHBkCj4gLQnCoCogaXJx cyBhcmUgZnVsbHkgZW5hYmxlZC4gTm93IHdlIHNob3VsZCBzY2FuIGZvciB0aGUgaW5pdGlhbCBj b25maWcKPiAtCcKgKiBvbmx5IG9uY2UgaG90cGx1ZyBoYW5kbGluZyBpcyBlbmFibGVkLCBidXQg ZHVlIHRvIHNjcmV3ZWQtdXAgbG9ja2luZwo+IC0JwqAqIGFyb3VuZCBrbXMvZmJkZXYgaW5pdCB3 ZSBjYW4ndCBwcm90ZWN0IHRoZSBmZGJldiBpbml0aWFsIGNvbmZpZwo+IC0JwqAqIHNjYW5uaW5n IGFnYWluc3QgaG90cGx1ZyBldmVudHMuIEhlbmNlIGRvIHRoaXMgZmlyc3QgYW5kIGlnbm9yZSB0 aGUKPiAtCcKgKiB0aW55IHdpbmRvdyB3aGVyZSB3ZSB3aWxsIGxvb3NlIGhvdHBsdWcgbm90aWZh Y3Rpb25zLgo+IC0JwqAqLwo+IC0JaW50ZWxfZmJkZXZfaW5pdGlhbF9jb25maWdfYXN5bmMoZGV2 KTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIgLSBjbGVhbnVw IHRoZSByZWdpc3RyYXRpb24gZG9uZSBpbiBpOTE1X2RyaXZlcl9yZWdpc2VyKCkKPiAtICogQGRl dl9wcml2OiBkZXZpY2UgcHJpdmF0ZQo+IC0gKi8KPiAtc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJf dW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCWk5 MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoZGV2X3ByaXYpOwo+IC0KPiAtCWludGVsX2dwdV9p cHNfdGVhcmRvd24oKTsKPiAtCWFjcGlfdmlkZW9fdW5yZWdpc3RlcigpOwo+IC0JaW50ZWxfb3By ZWdpb25fdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4gLQo+IC0JaW50ZWxfbW9kZXNldF91bnJlZ2lz dGVyKGRldl9wcml2KTsKPiAtCWk5MTVfdGVhcmRvd25fc3lzZnMoZGV2X3ByaXYtPmRldik7Cj4g LQlpOTE1X2RlYnVnZnNfdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4gLQlkcm1fZGV2X3VucmVnaXN0 ZXIoZGV2X3ByaXYtPmRldik7Cj4gLQo+IC0JaTkxNV9nZW1fc2hyaW5rZXJfY2xlYW51cChkZXZf cHJpdik7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBpOTE1X2RyaXZlcl9sb2FkIC0gc2V0dXAgY2hp cCBhbmQgY3JlYXRlIGFuIGluaXRpYWwgY29uZmlnCj4gLSAqIEBkZXY6IERSTSBkZXZpY2UKPiAt ICogQGZsYWdzOiBzdGFydHVwIGZsYWdzCj4gLSAqCj4gLSAqIFRoZSBkcml2ZXIgbG9hZCByb3V0 aW5lIGhhcyB0byBkbyBzZXZlcmFsIHRoaW5nczoKPiAtICrCoMKgwqAtIGRyaXZlIG91dHB1dCBk aXNjb3ZlcnkgdmlhIGludGVsX21vZGVzZXRfaW5pdCgpCj4gLSAqwqDCoMKgLSBpbml0aWFsaXpl IHRoZSBtZW1vcnkgbWFuYWdlcgo+IC0gKsKgwqDCoC0gYWxsb2NhdGUgaW5pdGlhbCBjb25maWcg bWVtb3J5Cj4gLSAqwqDCoMKgLSBzZXR1cCB0aGUgRFJNIGZyYW1lYnVmZmVyIHdpdGggdGhlIGFs bG9jYXRlZCBtZW1vcnkKPiAtICovCj4gLWludCBpOTE1X2RyaXZlcl9sb2FkKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LAo+IC0JCcKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50 LAo+IC0JCcKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWRldl9w cml2ID0ga3phbGxvYyhzaXplb2YoKmRldl9wcml2KSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoZGV2 X3ByaXYgPT0gTlVMTCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlyZXQgPSBkcm1fZGV2 X2luaXQoJmRldl9wcml2LT5kcm0sIGRyaXZlciwgJnBkZXYtPmRldik7Cj4gLQlpZiAocmV0KQo+ IC0JCWdvdG8gb3V0X2ZyZWVfcHJpdjsKPiAtCj4gLQkvKiBNdXN0IGJlIHNldCBiZWZvcmUgY2Fs bGluZyBfX2k5MTVfcHJpbnRrICovCj4gLQlkZXZfcHJpdi0+ZHJtLnBkZXYgPSBwZGV2Owo+IC0J ZGV2X3ByaXYtPmRybS5kZXZfcHJpdmF0ZSA9IGRldl9wcml2Owo+IC0JZGV2X3ByaXYtPmRldiA9 ICZkZXZfcHJpdi0+ZHJtOwo+IC0KPiAtCXJldCA9IGk5MTVfZHJpdmVyX2luaXRfZWFybHkoZGV2 X3ByaXYsIGVudCk7Cj4gLQlpZiAocmV0IDwgMCkKPiAtCQlnb3RvIG91dF9mcmVlX3ByaXY7Cj4g LQo+IC0JcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Cj4gLQlpZiAocmV0KQo+IC0JCWdv dG8gb3V0X2NsZWFudXBfZWFybHk7Cj4gLQo+IC0JcGNpX3NldF9kcnZkYXRhKHBkZXYsICZkZXZf cHJpdi0+ZHJtKTsKPiAtCj4gLQlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gLQo+ IC0JcmV0ID0gaTkxNV9kcml2ZXJfaW5pdF9tbWlvKGRldl9wcml2KTsKPiAtCWlmIChyZXQgPCAw KQo+IC0JCWdvdG8gb3V0X3J1bnRpbWVfcG1fcHV0Owo+IC0KPiAtCXJldCA9IGk5MTVfZHJpdmVy X2luaXRfaHcoZGV2X3ByaXYpOwo+IC0JaWYgKHJldCA8IDApCj4gLQkJZ290byBvdXRfY2xlYW51 cF9tbWlvOwo+IC0KPiAtCS8qCj4gLQnCoCogVE9ETzogbW92ZSB0aGUgdmJsYW5rIGluaXQgYW5k IHBhcnRzIG9mIG1vZGVzZXQgaW5pdCBzdGVwcyBpbnRvIG9uZQo+IC0JwqAqIG9mIHRoZSBpOTE1 X2RyaXZlcl9pbml0Xy9pOTE1X2RyaXZlcl9yZWdpc3RlciBmdW5jdGlvbnMgYWNjb3JkaW5nCj4g LQnCoCogdG8gdGhlIHJvbGUvZWZmZWN0IG9mIHRoZSBnaXZlbiBpbml0IHN0ZXAuCj4gLQnCoCov Cj4gLQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPm51bV9waXBlcykgewo+IC0JCXJldCA9IGRy bV92YmxhbmtfaW5pdChkZXZfcHJpdi0+ZGV2LAo+IC0JCQkJwqDCoMKgwqDCoMKgSU5URUxfSU5G TyhkZXZfcHJpdiktPm51bV9waXBlcyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBvdXRfY2xl YW51cF9odzsKPiAtCX0KPiAtCj4gLQlyZXQgPSBpOTE1X2xvYWRfbW9kZXNldF9pbml0KGRldl9w cml2LT5kZXYpOwo+IC0JaWYgKHJldCA8IDApCj4gLQkJZ290byBvdXRfY2xlYW51cF92Ymxhbms7 Cj4gLQo+IC0JaTkxNV9kcml2ZXJfcmVnaXN0ZXIoZGV2X3ByaXYpOwo+IC0KPiAtCWludGVsX3J1 bnRpbWVfcG1fZW5hYmxlKGRldl9wcml2KTsKPiAtCj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChk ZXZfcHJpdik7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1vdXRfY2xlYW51cF92Ymxhbms6Cj4g LQlkcm1fdmJsYW5rX2NsZWFudXAoZGV2X3ByaXYtPmRldik7Cj4gLW91dF9jbGVhbnVwX2h3Ogo+ IC0JaTkxNV9kcml2ZXJfY2xlYW51cF9odyhkZXZfcHJpdik7Cj4gLW91dF9jbGVhbnVwX21taW86 Cj4gLQlpOTE1X2RyaXZlcl9jbGVhbnVwX21taW8oZGV2X3ByaXYpOwo+IC1vdXRfcnVudGltZV9w bV9wdXQ6Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gLQlwY2lfZGlzYWJs ZV9kZXZpY2UocGRldik7Cj4gLW91dF9jbGVhbnVwX2Vhcmx5Ogo+IC0JaTkxNV9kcml2ZXJfY2xl YW51cF9lYXJseShkZXZfcHJpdik7Cj4gLW91dF9mcmVlX3ByaXY6Cj4gLQlpOTE1X2xvYWRfZXJy b3IoZGV2X3ByaXYsICJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkICglZClcbiIsIHJldCk7 Cj4gLQo+IC0Ja2ZyZWUoZGV2X3ByaXYpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4g LWludCBpOTE1X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAt CWludCByZXQ7Cj4gLQo+IC0JaW50ZWxfZmJkZXZfZmluaShkZXYpOwo+IC0KPiAtCXJldCA9IGk5 MTVfZ2VtX3N1c3BlbmQoZGV2KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1IoImZhaWxl ZCB0byBpZGxlIGhhcmR3YXJlOiAlZFxuIiwgcmV0KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+ IC0KPiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fSU5J VCk7Cj4gLQo+IC0JaTkxNV9kcml2ZXJfdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4gLQo+IC0JZHJt X3ZibGFua19jbGVhbnVwKGRldik7Cj4gLQo+IC0JaW50ZWxfbW9kZXNldF9jbGVhbnVwKGRldik7 Cj4gLQo+IC0JLyoKPiAtCcKgKiBmcmVlIHRoZSBtZW1vcnkgc3BhY2UgYWxsb2NhdGVkIGZvciB0 aGUgY2hpbGQgZGV2aWNlCj4gLQnCoCogY29uZmlnIHBhcnNlZCBmcm9tIFZCVAo+IC0JwqAqLwo+ IC0JaWYgKGRldl9wcml2LT52YnQuY2hpbGRfZGV2ICYmIGRldl9wcml2LT52YnQuY2hpbGRfZGV2 X251bSkgewo+IC0JCWtmcmVlKGRldl9wcml2LT52YnQuY2hpbGRfZGV2KTsKPiAtCQlkZXZfcHJp di0+dmJ0LmNoaWxkX2RldiA9IE5VTEw7Cj4gLQkJZGV2X3ByaXYtPnZidC5jaGlsZF9kZXZfbnVt ID0gMDsKPiAtCX0KPiAtCWtmcmVlKGRldl9wcml2LT52YnQuc2R2b19sdmRzX3ZidF9tb2RlKTsK PiAtCWRldl9wcml2LT52YnQuc2R2b19sdmRzX3ZidF9tb2RlID0gTlVMTDsKPiAtCWtmcmVlKGRl dl9wcml2LT52YnQubGZwX2x2ZHNfdmJ0X21vZGUpOwo+IC0JZGV2X3ByaXYtPnZidC5sZnBfbHZk c192YnRfbW9kZSA9IE5VTEw7Cj4gLQo+IC0JdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9jbGll bnQoZGV2LT5wZGV2KTsKPiAtCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBO VUxMLCBOVUxMKTsKPiAtCj4gLQlpbnRlbF9jc3JfdWNvZGVfZmluaShkZXZfcHJpdik7Cj4gLQo+ IC0JLyogRnJlZSBlcnJvciBzdGF0ZSBhZnRlciBpbnRlcnJ1cHRzIGFyZSBmdWxseSBkaXNhYmxl ZC4gKi8KPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPmdwdV9lcnJvci5o YW5nY2hlY2tfd29yayk7Cj4gLQlpOTE1X2Rlc3Ryb3lfZXJyb3Jfc3RhdGUoZGV2KTsKPiAtCj4g LQkvKiBGbHVzaCBhbnkgb3V0c3RhbmRpbmcgdW5waW5fd29yay4gKi8KPiAtCWZsdXNoX3dvcmtx dWV1ZShkZXZfcHJpdi0+d3EpOwo+IC0KPiAtCWludGVsX2d1Y19maW5pKGRldik7Cj4gLQlpOTE1 X2dlbV9maW5pKGRldik7Cj4gLQlpbnRlbF9mYmNfY2xlYW51cF9jZmIoZGV2X3ByaXYpOwo+IC0K PiAtCWludGVsX3Bvd2VyX2RvbWFpbnNfZmluaShkZXZfcHJpdik7Cj4gLQo+IC0JaTkxNV9kcml2 ZXJfY2xlYW51cF9odyhkZXZfcHJpdik7Cj4gLQlpOTE1X2RyaXZlcl9jbGVhbnVwX21taW8oZGV2 X3ByaXYpOwo+IC0KPiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9E T01BSU5fSU5JVCk7Cj4gLQo+IC0JaTkxNV9kcml2ZXJfY2xlYW51cF9lYXJseShkZXZfcHJpdik7 Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLWludCBpOTE1X2RyaXZlcl9vcGVuKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAtewo+IC0JaW50IHJl dDsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9vcGVuKGRldiwgZmlsZSk7Cj4gLQlpZiAocmV0KQo+ IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBp OTE1X2RyaXZlcl9sYXN0Y2xvc2UgLSBjbGVhbiB1cCBhZnRlciBhbGwgRFJNIGNsaWVudHMgaGF2 ZSBleGl0ZWQKPiAtICogQGRldjogRFJNIGRldmljZQo+IC0gKgo+IC0gKiBUYWtlIGNhcmUgb2Yg Y2xlYW5pbmcgdXAgYWZ0ZXIgYWxsIERSTSBjbGllbnRzIGhhdmUgZXhpdGVkLsKgwqBJbiB0aGUK PiAtICogbW9kZSBzZXR0aW5nIGNhc2UsIHdlIHdhbnQgdG8gcmVzdG9yZSB0aGUga2VybmVsJ3Mg aW5pdGlhbCBtb2RlIChqdXN0Cj4gLSAqIGluIGNhc2UgdGhlIGxhc3QgY2xpZW50IGxlZnQgdXMg aW4gYSBiYWQgc3RhdGUpLgo+IC0gKgo+IC0gKiBBZGRpdGlvbmFsbHksIGluIHRoZSBub24tbW9k ZSBzZXR0aW5nIGNhc2UsIHdlJ2xsIHRlYXIgZG93biB0aGUgR1RUCj4gLSAqIGFuZCBETUEgc3Ry dWN0dXJlcywgc2luY2UgdGhlIGtlcm5lbCB3b24ndCBiZSB1c2luZyB0aGVtLCBhbmQgY2xlYQo+ IC0gKiB1cCBhbnkgR0VNIHN0YXRlLgo+IC0gKi8KPiAtdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xv c2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAtewo+IC0JaW50ZWxfZmJkZXZfcmVzdG9yZV9t b2RlKGRldik7Cj4gLQl2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKCk7Cj4g LX0KPiAtCj4gLXZvaWQgaTkxNV9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IC17Cj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7Cj4gLQlpOTE1X2dlbV9jb250ZXh0X2Nsb3NlKGRldiwgZmlsZSk7Cj4gLQlpOTE1 X2dlbV9yZWxlYXNlKGRldiwgZmlsZSk7Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211 dGV4KTsKPiAtfQo+IC0KPiAtdm9pZCBpOTE1X2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAtCj4gLQlr ZnJlZShmaWxlX3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWk5MTVfZ2VtX3JlamVj dF9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAtCQkJwqDC oHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAtewo+IC0JcmV0dXJuIC1FTk9ERVY7Cj4gLX0KPiAt Cj4gLWNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rsc1tdID0gewo+IC0JRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9JTklULCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxE Uk1fUk9PVF9PTkxZKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfRkxVU0gsIGRybV9ub29w LCBEUk1fQVVUSCksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0ZMSVAsIGRybV9ub29wLCBE Uk1fQVVUSCksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0JBVENIQlVGRkVSLCBkcm1fbm9v cCwgRFJNX0FVVEgpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9JUlFfRU1JVCwgZHJtX25v b3AsIERSTV9BVVRIKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfSVJRX1dBSVQsIGRybV9u b29wLCBEUk1fQVVUSCksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFVFBBUkFNLCBpOTE1 X2dldHBhcmFtLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9ERUZf RFJWKEk5MTVfU0VUUEFSQU0sIGRybV9ub29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09U X09OTFkpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9BTExPQywgZHJtX25vb3AsIERSTV9B VVRIKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfRlJFRSwgZHJtX25vb3AsIERSTV9BVVRI KSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfSU5JVF9IRUFQLCBkcm1fbm9vcCwgRFJNX0FV VEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVf Q01EQlVGRkVSLCBkcm1fbm9vcCwgRFJNX0FVVEgpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkx NV9ERVNUUk9ZX0hFQVAswqDCoGRybV9ub29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09U X09OTFkpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9TRVRfVkJMQU5LX1BJUEUswqDCoGRy bV9ub29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAo+IC0JRFJNX0lPQ1RM X0RFRl9EUlYoSTkxNV9HRVRfVkJMQU5LX1BJUEUswqDCoGRybV9ub29wLCBEUk1fQVVUSCksCj4g LQlEUk1fSU9DVExfREVGX0RSVihJOTE1X1ZCTEFOS19TV0FQLCBkcm1fbm9vcCwgRFJNX0FVVEgp LAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9IV1NfQUREUiwgZHJtX25vb3AsIERSTV9BVVRI fERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dF TV9JTklULCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKPiAt CURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0VYRUNCVUZGRVIsIGk5MTVfZ2VtX2V4ZWNidWZm ZXIsIERSTV9BVVRIKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0VYRUNCVUZGRVIy LCBpOTE1X2dlbV9leGVjYnVmZmVyMiwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCj4gLQlE Uk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9QSU4sIGk5MTVfZ2VtX3JlamVjdF9waW5faW9jdGws IERSTV9BVVRIfERSTV9ST09UX09OTFkpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1f VU5QSU4sIGk5MTVfZ2VtX3JlamVjdF9waW5faW9jdGwsIERSTV9BVVRIfERSTV9ST09UX09OTFkp LAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQlVTWSwgaTkxNV9nZW1fYnVzeV9pb2N0 bCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1 X0dFTV9TRVRfQ0FDSElORywgaTkxNV9nZW1fc2V0X2NhY2hpbmdfaW9jdGwsIERSTV9SRU5ERVJf QUxMT1cpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fR0VUX0NBQ0hJTkcsIGk5MTVf Z2VtX2dldF9jYWNoaW5nX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9E RUZfRFJWKEk5MTVfR0VNX1RIUk9UVExFLCBpOTE1X2dlbV90aHJvdHRsZV9pb2N0bCwgRFJNX0FV VEh8RFJNX1JFTkRFUl9BTExPVyksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9FTlRF UlZULCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKPiAtCURS TV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0xFQVZFVlQsIGRybV9ub29wLCBEUk1fQVVUSHxEUk1f TUFTVEVSfERSTV9ST09UX09OTFkpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ1JF QVRFLCBpOTE1X2dlbV9jcmVhdGVfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+IC0JRFJNX0lP Q1RMX0RFRl9EUlYoSTkxNV9HRU1fUFJFQUQsIGk5MTVfZ2VtX3ByZWFkX2lvY3RsLCBEUk1fUkVO REVSX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1BXUklURSwgaTkxNV9n ZW1fcHdyaXRlX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJW KEk5MTVfR0VNX01NQVAsIGk5MTVfZ2VtX21tYXBfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fTU1BUF9HVFQsIGk5MTVfZ2VtX21tYXBfZ3R0 X2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VN X1NFVF9ET01BSU4sIGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwsIERSTV9SRU5ERVJfQUxMT1cp LAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fU1dfRklOSVNILCBpOTE1X2dlbV9zd19m aW5pc2hfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkx NV9HRU1fU0VUX1RJTElORywgaTkxNV9nZW1fc2V0X3RpbGluZywgRFJNX1JFTkRFUl9BTExPVyks Cj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9HRVRfVElMSU5HLCBpOTE1X2dlbV9nZXRf dGlsaW5nLCBEUk1fUkVOREVSX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VN X0dFVF9BUEVSVFVSRSwgaTkxNV9nZW1fZ2V0X2FwZXJ0dXJlX2lvY3RsLCBEUk1fUkVOREVSX0FM TE9XKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VUX1BJUEVfRlJPTV9DUlRDX0lELCBp bnRlbF9nZXRfcGlwZV9mcm9tX2NydGNfaWQsIDApLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkx NV9HRU1fTUFEVklTRSwgaTkxNV9nZW1fbWFkdmlzZV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyks Cj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X09WRVJMQVlfUFVUX0lNQUdFLCBpbnRlbF9vdmVy bGF5X3B1dF9pbWFnZV9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCj4gLQlE Uk1fSU9DVExfREVGX0RSVihJOTE1X09WRVJMQVlfQVRUUlMsIGludGVsX292ZXJsYXlfYXR0cnNf aW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAo+IC0JRFJNX0lPQ1RMX0RFRl9E UlYoSTkxNV9TRVRfU1BSSVRFX0NPTE9SS0VZLCBpbnRlbF9zcHJpdGVfc2V0X2NvbG9ya2V5LCBE Uk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVf R0VUX1NQUklURV9DT0xPUktFWSwgZHJtX25vb3AsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxM T1cpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fV0FJVCwgaTkxNV9nZW1fd2FpdF9p b2N0bCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJ OTE1X0dFTV9DT05URVhUX0NSRUFURSwgaTkxNV9nZW1fY29udGV4dF9jcmVhdGVfaW9jdGwsIERS TV9SRU5ERVJfQUxMT1cpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ09OVEVYVF9E RVNUUk9ZLCBpOTE1X2dlbV9jb250ZXh0X2Rlc3Ryb3lfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cp LAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9SRUdfUkVBRCwgaTkxNV9yZWdfcmVhZF9pb2N0 bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFVF9SRVNF VF9TVEFUUywgaTkxNV9nZW1fY29udGV4dF9yZXNldF9zdGF0c19pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCj4gLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9VU0VSUFRSLCBpOTE1X2dlbV91 c2VycHRyX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk5 MTVfR0VNX0NPTlRFWFRfR0VUUEFSQU0sIGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1faW9jdGws IERSTV9SRU5ERVJfQUxMT1cpLAo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ09OVEVY VF9TRVRQQVJBTSwgaTkxNV9nZW1fY29udGV4dF9zZXRwYXJhbV9pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCj4gLX07Cj4gLQo+IC1pbnQgaTkxNV9tYXhfaW9jdGwgPSBBUlJBWV9TSVpFKGk5MTVf aW9jdGxzKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCBiMTNkNjc1MWViZTQuLmUy MGY2M2FjNzNkMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0yNywyMSArMjcs MzAgQEAKPiDCoCAqCj4gwqAgKi8KPiDCoAo+IC0jaW5jbHVkZSAKPiDCoCNpbmNsdWRlIAo+IC0j aW5jbHVkZSAKPiAtI2luY2x1ZGUgCj4gLSNpbmNsdWRlICJpOTE1X2Rydi5oIgo+IC0jaW5jbHVk ZSAiaTkxNV90cmFjZS5oIgo+IC0jaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gLQo+IMKgI2luY2x1 ZGUgCj4gwqAjaW5jbHVkZSAKPiArI2luY2x1ZGUgCj4gKyNpbmNsdWRlIAo+IMKgI2luY2x1ZGUg Cj4gKyNpbmNsdWRlIAo+ICsjaW5jbHVkZSAKPiDCoCNpbmNsdWRlIAo+ICsjaW5jbHVkZSAKPiAr I2luY2x1ZGUgCj4gwqAjaW5jbHVkZSAKPiDCoCNpbmNsdWRlIAo+ICsjaW5jbHVkZSAKPiArI2lu Y2x1ZGUgCj4gKwo+ICsjaW5jbHVkZSAKPiDCoCNpbmNsdWRlIAo+ICsjaW5jbHVkZSAKPiArCj4g KyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+ICsjaW5j bHVkZSAiaTkxNV92Z3B1LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiDCoAo+IMKgc3Rh dGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKPiDCoAo+IEBAIC0zNDAsMjE5ICszNDksMTc4 MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX3NreWxha2Vf aW5mbyA9IHsKPiDCoAkuZ2VuID0gOSwKPiDCoH07Cj4gwqAKPiAtc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9za3lsYWtlX2d0M19pbmZvID0gewo+IC0JQkRXX0ZF QVRVUkVTLAo+IC0JLmlzX3NreWxha2UgPSAxLAo+IC0JLmdlbiA9IDksCj4gLQkucmluZ19tYXNr ID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORyB8IEJTRDJf UklORywKPiAtfTsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRl bF9za3lsYWtlX2d0M19pbmZvID0gewo+ICsJQkRXX0ZFQVRVUkVTLAo+ICsJLmlzX3NreWxha2Ug PSAxLAo+ICsJLmdlbiA9IDksCj4gKwkucmluZ19tYXNrID0gUkVOREVSX1JJTkcgfCBCU0RfUklO RyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklORywKPiArfTsKPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfYnJveHRvbl9pbmZvID0gewo+ ICsJLmlzX3ByZWxpbWluYXJ5ID0gMSwKPiArCS5pc19icm94dG9uID0gMSwKPiArCS5nZW4gPSA5 LAo+ICsJLm5lZWRfZ2Z4X2h3cyA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCj4gKwkucmluZ19tYXNr ID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORywKPiArCS5u dW1fcGlwZXMgPSAzLAo+ICsJLmhhc19kZGkgPSAxLAo+ICsJLmhhc19mcGdhX2RiZyA9IDEsCj4g KwkuaGFzX2ZiYyA9IDEsCj4gKwlHRU5fREVGQVVMVF9QSVBFT0ZGU0VUUywKPiArCUlWQl9DVVJT T1JfT0ZGU0VUUywKPiArCUJEV19DT0xPUlMsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2thYnlsYWtlX2luZm8gPSB7Cj4gKwlCRFdfRkVB VFVSRVMsCj4gKwkuaXNfa2FieWxha2UgPSAxLAo+ICsJLmdlbiA9IDksCj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2thYnlsYWtlX2d0M19p bmZvID0gewo+ICsJQkRXX0ZFQVRVUkVTLAo+ICsJLmlzX2thYnlsYWtlID0gMSwKPiArCS5nZW4g PSA5LAo+ICsJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwgQlNEX1JJTkcgfCBCTFRfUklORyB8 IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBNYWtlIHN1cmUg YW55IGRldmljZSBtYXRjaGVzIGhlcmUgYXJlIGZyb20gbW9zdCBzcGVjaWZpYyB0byBtb3N0Cj4g KyAqIGdlbmVyYWwuwqDCoEZvciBleGFtcGxlLCBzaW5jZSB0aGUgUXVhbnRhIG1hdGNoIGlzIGJh c2VkIG9uIHRoZSBzdWJzeXN0ZW0KPiArICogYW5kIHN1YnZlbmRvciBJRHMsIHdlIG5lZWQgaXQg dG8gY29tZSBiZWZvcmUgdGhlIG1vcmUgZ2VuZXJhbCBJVkIKPiArICogUENJIElEIG1hdGNoZXMs IG90aGVyd2lzZSB3ZSdsbCB1c2UgdGhlIHdyb25nIGluZm8gc3RydWN0IGFib3ZlLgo+ICsgKi8K PiArc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewo+ICsJ SU5URUxfSTgzMF9JRFMoJmludGVsX2k4MzBfaW5mbyksCj4gKwlJTlRFTF9JODQ1R19JRFMoJmlu dGVsXzg0NWdfaW5mbyksCj4gKwlJTlRFTF9JODVYX0lEUygmaW50ZWxfaTg1eF9pbmZvKSwKPiAr CUlOVEVMX0k4NjVHX0lEUygmaW50ZWxfaTg2NWdfaW5mbyksCj4gKwlJTlRFTF9JOTE1R19JRFMo JmludGVsX2k5MTVnX2luZm8pLAo+ICsJSU5URUxfSTkxNUdNX0lEUygmaW50ZWxfaTkxNWdtX2lu Zm8pLAo+ICsJSU5URUxfSTk0NUdfSURTKCZpbnRlbF9pOTQ1Z19pbmZvKSwKPiArCUlOVEVMX0k5 NDVHTV9JRFMoJmludGVsX2k5NDVnbV9pbmZvKSwKPiArCUlOVEVMX0k5NjVHX0lEUygmaW50ZWxf aTk2NWdfaW5mbyksCj4gKwlJTlRFTF9HMzNfSURTKCZpbnRlbF9nMzNfaW5mbyksCj4gKwlJTlRF TF9JOTY1R01fSURTKCZpbnRlbF9pOTY1Z21faW5mbyksCj4gKwlJTlRFTF9HTTQ1X0lEUygmaW50 ZWxfZ200NV9pbmZvKSwKPiArCUlOVEVMX0c0NV9JRFMoJmludGVsX2c0NV9pbmZvKSwKPiArCUlO VEVMX1BJTkVWSUVXX0lEUygmaW50ZWxfcGluZXZpZXdfaW5mbyksCj4gKwlJTlRFTF9JUk9OTEFL RV9EX0lEUygmaW50ZWxfaXJvbmxha2VfZF9pbmZvKSwKPiArCUlOVEVMX0lST05MQUtFX01fSURT KCZpbnRlbF9pcm9ubGFrZV9tX2luZm8pLAo+ICsJSU5URUxfU05CX0RfSURTKCZpbnRlbF9zYW5k eWJyaWRnZV9kX2luZm8pLAo+ICsJSU5URUxfU05CX01fSURTKCZpbnRlbF9zYW5keWJyaWRnZV9t X2luZm8pLAo+ICsJSU5URUxfSVZCX1FfSURTKCZpbnRlbF9pdnlicmlkZ2VfcV9pbmZvKSwgLyog bXVzdCBiZSBmaXJzdCBJVkIgKi8KPiArCUlOVEVMX0lWQl9NX0lEUygmaW50ZWxfaXZ5YnJpZGdl X21faW5mbyksCj4gKwlJTlRFTF9JVkJfRF9JRFMoJmludGVsX2l2eWJyaWRnZV9kX2luZm8pLAo+ ICsJSU5URUxfSFNXX0RfSURTKCZpbnRlbF9oYXN3ZWxsX2RfaW5mbyksCj4gKwlJTlRFTF9IU1df TV9JRFMoJmludGVsX2hhc3dlbGxfbV9pbmZvKSwKPiArCUlOVEVMX1ZMVl9NX0lEUygmaW50ZWxf dmFsbGV5dmlld19tX2luZm8pLAo+ICsJSU5URUxfVkxWX0RfSURTKCZpbnRlbF92YWxsZXl2aWV3 X2RfaW5mbyksCj4gKwlJTlRFTF9CRFdfR1QxMk1fSURTKCZpbnRlbF9icm9hZHdlbGxfbV9pbmZv KSwKPiArCUlOVEVMX0JEV19HVDEyRF9JRFMoJmludGVsX2Jyb2Fkd2VsbF9kX2luZm8pLAo+ICsJ SU5URUxfQkRXX0dUM01fSURTKCZpbnRlbF9icm9hZHdlbGxfZ3QzbV9pbmZvKSwKPiArCUlOVEVM X0JEV19HVDNEX0lEUygmaW50ZWxfYnJvYWR3ZWxsX2d0M2RfaW5mbyksCj4gKwlJTlRFTF9DSFZf SURTKCZpbnRlbF9jaGVycnl2aWV3X2luZm8pLAo+ICsJSU5URUxfU0tMX0dUMV9JRFMoJmludGVs X3NreWxha2VfaW5mbyksCj4gKwlJTlRFTF9TS0xfR1QyX0lEUygmaW50ZWxfc2t5bGFrZV9pbmZv KSwKPiArCUlOVEVMX1NLTF9HVDNfSURTKCZpbnRlbF9za3lsYWtlX2d0M19pbmZvKSwKPiArCUlO VEVMX1NLTF9HVDRfSURTKCZpbnRlbF9za3lsYWtlX2d0M19pbmZvKSwKPiArCUlOVEVMX0JYVF9J RFMoJmludGVsX2Jyb3h0b25faW5mbyksCj4gKwlJTlRFTF9LQkxfR1QxX0lEUygmaW50ZWxfa2Fi eWxha2VfaW5mbyksCj4gKwlJTlRFTF9LQkxfR1QyX0lEUygmaW50ZWxfa2FieWxha2VfaW5mbyks Cj4gKwlJTlRFTF9LQkxfR1QzX0lEUygmaW50ZWxfa2FieWxha2VfZ3QzX2luZm8pLAo+ICsJSU5U RUxfS0JMX0dUNF9JRFMoJmludGVsX2thYnlsYWtlX2d0M19pbmZvKSwKPiArCXswLCAwLCAwfQo+ ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpaWRsaXN0KTsKPiArCj4gK3N0YXRp YyB1bnNpZ25lZCBpbnQgaTkxNV9sb2FkX2ZhaWxfY291bnQ7Cj4gKwo+ICtib29sIF9faTkxNV9p bmplY3RfbG9hZF9mYWlsdXJlKGNvbnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lKQo+ICt7Cj4gKwlp ZiAoaTkxNV9sb2FkX2ZhaWxfY291bnQgPj0gaTkxNS5pbmplY3RfbG9hZF9mYWlsdXJlKQo+ICsJ CXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoKytpOTE1X2xvYWRfZmFpbF9jb3VudCA9PSBpOTE1 LmluamVjdF9sb2FkX2ZhaWx1cmUpIHsKPiArCQlEUk1fSU5GTygiSW5qZWN0aW5nIGZhaWx1cmUg YXQgY2hlY2twb2ludCAldSBbJXM6JWRdXG4iLAo+ICsJCQnCoGk5MTUuaW5qZWN0X2xvYWRfZmFp bHVyZSwgZnVuYywgbGluZSk7Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IGZhbHNlOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIEZET19CVUdfVVJMICJodHRwczovL2J1Z3MuZnJl ZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1EUkkiCj4gKyNkZWZpbmUgRkRPX0JV R19NU0cgIlBsZWFzZSBmaWxlIGEgYnVnIGF0ICIgRkRPX0JVR19VUkwgIiBhZ2FpbnN0IERSTS9J bnRlbCAiIFwKPiArCQnCoMKgwqDCoCJwcm92aWRpbmcgdGhlIGRtZXNnIGxvZyBieSBib290aW5n IHdpdGggZHJtLmRlYnVnPTB4ZiIKPiArCj4gK3ZvaWQKPiArX19pOTE1X3ByaW50ayhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGNvbnN0IGNoYXIgKmxldmVsLAo+ICsJwqDCoMKg wqDCoMKgY29uc3QgY2hhciAqZm10LCAuLi4pCj4gK3sKPiArCXN0YXRpYyBib29sIHNob3duX2J1 Z19vbmNlOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldi0+ZGV2Owo+ICsJ Ym9vbCBpc19lcnJvciA9IGxldmVsWzFdIDw9IEtFUk5fRVJSWzFdOwo+ICsJYm9vbCBpc19kZWJ1 ZyA9IGxldmVsWzFdID09IEtFUk5fREVCVUdbMV07Cj4gKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsK PiArCXZhX2xpc3QgYXJnczsKPiArCj4gKwlpZiAoaXNfZGVidWcgJiYgIShkcm1fZGVidWcgJiBE Uk1fVVRfRFJJVkVSKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJdmFfc3RhcnQoYXJncywgZm10KTsK PiArCj4gKwl2YWYuZm10ID0gZm10Owo+ICsJdmFmLnZhID0gJmFyZ3M7Cj4gKwo+ICsJZGV2X3By aW50ayhsZXZlbCwgZGV2LCAiWyIgRFJNX05BTUUgIjolcHNdICVwViIsCj4gKwkJwqDCoMKgX19i dWlsdGluX3JldHVybl9hZGRyZXNzKDApLCAmdmFmKTsKPiArCj4gKwlpZiAoaXNfZXJyb3IgJiYg IXNob3duX2J1Z19vbmNlKSB7Cj4gKwkJZGV2X25vdGljZShkZXYsICIlcyIsIEZET19CVUdfTVNH KTsKPiArCQlzaG93bl9idWdfb25jZSA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJdmFfZW5kKGFyZ3Mp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpOTE1X2Vycm9yX2luamVjdGVkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJcmV0dXJuIGk5MTUuaW5qZWN0X2xvYWRf ZmFpbHVyZSAmJgo+ICsJwqDCoMKgwqDCoMKgwqBpOTE1X2xvYWRfZmFpbF9jb3VudCA9PSBpOTE1 LmluamVjdF9sb2FkX2ZhaWx1cmU7Cj4gK30KPiArCj4gKyNkZWZpbmUgaTkxNV9sb2FkX2Vycm9y KGRldl9wcml2LCBmbXQsIC4uLikJCQkJwqDCoMKgwqDCoFwKPiArCV9faTkxNV9wcmludGsoZGV2 X3ByaXYsCQkJCQkJwqDCoMKgwqDCoFwKPiArCQnCoMKgwqDCoMKgwqBpOTE1X2Vycm9yX2luamVj dGVkKGRldl9wcml2KSA/IEtFUk5fREVCVUcgOiBLRVJOX0VSUiwgXAo+ICsJCcKgwqDCoMKgwqDC oGZtdCwgIyNfX1ZBX0FSR1NfXykKPiArCj4gKwo+ICtzdGF0aWMgZW51bSBpbnRlbF9wY2ggaW50 ZWxfdmlydF9kZXRlY3RfcGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCWVudW0g aW50ZWxfcGNoIHJldCA9IFBDSF9OT1A7Cj4gKwo+ICsJLyoKPiArCcKgKiBJbiBhIHZpcnR1YWxp emVkIHBhc3N0aHJvdWdoIGVudmlyb25tZW50IHdlIGNhbiBiZSBpbiBhCj4gKwnCoCogc2V0dXAg d2hlcmUgdGhlIElTQSBicmlkZ2UgaXMgbm90IGFibGUgdG8gYmUgcGFzc2VkIHRocm91Z2guCj4g KwnCoCogSW4gdGhpcyBjYXNlLCBhIHNvdXRoIGJyaWRnZSBjYW4gYmUgZW11bGF0ZWQgYW5kIHdl IGhhdmUgdG8KPiArCcKgKiBtYWtlIGFuIGVkdWNhdGVkIGd1ZXNzIGFzIHRvIHdoaWNoIFBDSCBp cyByZWFsbHkgdGhlcmUuCj4gKwnCoCovCj4gKwo+ICsJaWYgKElTX0dFTjUoZGV2KSkgewo+ICsJ CXJldCA9IFBDSF9JQlg7Cj4gKwkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgSWJleCBQZWFrIFBD SFxuIik7Cj4gKwl9IGVsc2UgaWYgKElTX0dFTjYoZGV2KSB8fCBJU19JVllCUklER0UoZGV2KSkg ewo+ICsJCXJldCA9IFBDSF9DUFQ7Cj4gKwkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgQ291YXJQ b2ludCBQQ0hcbiIpOwo+ICsJfSBlbHNlIGlmIChJU19IQVNXRUxMKGRldikgfHwgSVNfQlJPQURX RUxMKGRldikpIHsKPiArCQlyZXQgPSBQQ0hfTFBUOwo+ICsJCURSTV9ERUJVR19LTVMoIkFzc3Vt aW5nIEx5bnhQb2ludCBQQ0hcbiIpOwo+ICsJfSBlbHNlIGlmIChJU19TS1lMQUtFKGRldikgfHwg SVNfS0FCWUxBS0UoZGV2KSkgewo+ICsJCXJldCA9IFBDSF9TUFQ7Cj4gKwkJRFJNX0RFQlVHX0tN UygiQXNzdW1pbmcgU3VucmlzZVBvaW50IFBDSFxuIik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW50ZWxfZGV0ZWN0X3BjaChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IHBjaV9kZXYgKnBjaCA9IE5VTEw7Cj4gKwo+ICsJ LyogSW4gYWxsIGN1cnJlbnQgY2FzZXMsIG51bV9waXBlcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQ Q0hfTk9QIHNldHRpbmcKPiArCcKgKiAod2hpY2ggcmVhbGx5IGFtb3VudHMgdG8gYSBQQ0ggYnV0 IG5vIFNvdXRoIERpc3BsYXkpLgo+ICsJwqAqLwo+ICsJaWYgKElOVEVMX0lORk8oZGV2KS0+bnVt X3BpcGVzID09IDApIHsKPiArCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfTk9QOwo+ICsJCXJl dHVybjsKPiArCX0KPiArCj4gKwkvKgo+ICsJwqAqIFRoZSByZWFzb24gdG8gcHJvYmUgSVNBIGJy aWRnZSBpbnN0ZWFkIG9mIERldjMxOkZ1bjAgaXMgdG8KPiArCcKgKiBtYWtlIGdyYXBoaWNzIGRl dmljZSBwYXNzdGhyb3VnaCB3b3JrIGVhc3kgZm9yIFZNTSwgdGhhdCBvbmx5Cj4gKwnCoCogbmVl ZCB0byBleHBvc2UgSVNBIGJyaWRnZSB0byBsZXQgZHJpdmVyIGtub3cgdGhlIHJlYWwgaGFyZHdh cmUKPiArCcKgKiB1bmRlcm5lYXRoLiBUaGlzIGlzIGEgcmVxdWlyZW1lbnQgZnJvbSB2aXJ0dWFs aXphdGlvbiB0ZWFtLgo+ICsJwqAqCj4gKwnCoCogSW4gc29tZSB2aXJ0dWFsaXplZCBlbnZpcm9u bWVudHMgKGUuZy4gWEVOKSwgdGhlcmUgaXMgaXJyZWxldmFudAo+ICsJwqAqIElTQSBicmlkZ2Ug aW4gdGhlIHN5c3RlbS4gVG8gd29yayByZWxpYWJseSwgd2Ugc2hvdWxkIHNjYW4gdHJob3VnaAo+ ICsJwqAqIGFsbCB0aGUgSVNBIGJyaWRnZSBkZXZpY2VzIGFuZCBjaGVjayBmb3IgdGhlIGZpcnN0 IG1hdGNoLCBpbnN0ZWFkCj4gKwnCoCogb2Ygb25seSBjaGVja2luZyB0aGUgZmlyc3Qgb25lLgo+ ICsJwqAqLwo+ICsJd2hpbGUgKChwY2ggPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19CUklER0Vf SVNBIDw8IDgsIHBjaCkpKSB7Cj4gKwkJaWYgKHBjaC0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURf SU5URUwpIHsKPiArCQkJdW5zaWduZWQgc2hvcnQgaWQgPSBwY2gtPmRldmljZSAmIElOVEVMX1BD SF9ERVZJQ0VfSURfTUFTSzsKPiArCQkJZGV2X3ByaXYtPnBjaF9pZCA9IGlkOwo+ICsKPiArCQkJ aWYgKGlkID09IElOVEVMX1BDSF9JQlhfREVWSUNFX0lEX1RZUEUpIHsKPiArCQkJCWRldl9wcml2 LT5wY2hfdHlwZSA9IFBDSF9JQlg7Cj4gKwkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBJYmV4IFBl YWsgUENIXG4iKTsKPiArCQkJCVdBUk5fT04oIUlTX0dFTjUoZGV2KSk7Cj4gKwkJCX0gZWxzZSBp ZiAoaWQgPT0gSU5URUxfUENIX0NQVF9ERVZJQ0VfSURfVFlQRSkgewo+ICsJCQkJZGV2X3ByaXYt PnBjaF90eXBlID0gUENIX0NQVDsKPiArCQkJCURSTV9ERUJVR19LTVMoIkZvdW5kIENvdWdhclBv aW50IFBDSFxuIik7Cj4gKwkJCQlXQVJOX09OKCEoSVNfR0VONihkZXYpIHx8IElTX0lWWUJSSURH RShkZXYpKSk7Cj4gKwkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX1BQVF9ERVZJQ0VfSURf VFlQRSkgewo+ICsJCQkJLyogUGFudGhlclBvaW50IGlzIENQVCBjb21wYXRpYmxlICovCj4gKwkJ CQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfQ1BUOwo+ICsJCQkJRFJNX0RFQlVHX0tNUygiRm91 bmQgUGFudGhlclBvaW50IFBDSFxuIik7Cj4gKwkJCQlXQVJOX09OKCEoSVNfR0VONihkZXYpIHx8 IElTX0lWWUJSSURHRShkZXYpKSk7Cj4gKwkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX0xQ VF9ERVZJQ0VfSURfVFlQRSkgewo+ICsJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX0xQVDsK PiArCQkJCURSTV9ERUJVR19LTVMoIkZvdW5kIEx5bnhQb2ludCBQQ0hcbiIpOwo+ICsJCQkJV0FS Tl9PTighSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSk7Cj4gKwkJCQlXQVJO X09OKElTX0hTV19VTFQoZGV2KSB8fCBJU19CRFdfVUxUKGRldikpOwo+ICsJCQl9IGVsc2UgaWYg KGlkID09IElOVEVMX1BDSF9MUFRfTFBfREVWSUNFX0lEX1RZUEUpIHsKPiArCQkJCWRldl9wcml2 LT5wY2hfdHlwZSA9IFBDSF9MUFQ7Cj4gKwkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBMeW54UG9p bnQgTFAgUENIXG4iKTsKPiArCQkJCVdBUk5fT04oIUlTX0hBU1dFTEwoZGV2KSAmJiAhSVNfQlJP QURXRUxMKGRldikpOwo+ICsJCQkJV0FSTl9PTighSVNfSFNXX1VMVChkZXYpICYmICFJU19CRFdf VUxUKGRldikpOwo+ICsJCQl9IGVsc2UgaWYgKGlkID09IElOVEVMX1BDSF9TUFRfREVWSUNFX0lE X1RZUEUpIHsKPiArCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IFBDSF9TUFQ7Cj4gKwkJCQlEUk1f REVCVUdfS01TKCJGb3VuZCBTdW5yaXNlUG9pbnQgUENIXG4iKTsKPiArCQkJCVdBUk5fT04oIUlT X1NLWUxBS0UoZGV2KSAmJgo+ICsJCQkJCSFJU19LQUJZTEFLRShkZXYpKTsKPiArCQkJfSBlbHNl IGlmIChpZCA9PSBJTlRFTF9QQ0hfU1BUX0xQX0RFVklDRV9JRF9UWVBFKSB7Cj4gKwkJCQlkZXZf cHJpdi0+cGNoX3R5cGUgPSBQQ0hfU1BUOwo+ICsJCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgU3Vu cmlzZVBvaW50IExQIFBDSFxuIik7Cj4gKwkJCQlXQVJOX09OKCFJU19TS1lMQUtFKGRldikgJiYK PiArCQkJCQkhSVNfS0FCWUxBS0UoZGV2KSk7Cj4gKwkJCX0gZWxzZSBpZiAoKGlkID09IElOVEVM X1BDSF9QMlhfREVWSUNFX0lEX1RZUEUpIHx8Cj4gKwkJCQnCoMKgwqAoaWQgPT0gSU5URUxfUENI X1AzWF9ERVZJQ0VfSURfVFlQRSkgfHwKPiArCQkJCcKgwqDCoCgoaWQgPT0gSU5URUxfUENIX1FF TVVfREVWSUNFX0lEX1RZUEUpICYmCj4gKwkJCQnCoMKgwqDCoHBjaC0+c3Vic3lzdGVtX3ZlbmRv ciA9PSAweDFhZjQgJiYKPiArCQkJCcKgwqDCoMKgcGNoLT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4 MTEwMCkpIHsKPiArCQkJCWRldl9wcml2LT5wY2hfdHlwZSA9IGludGVsX3ZpcnRfZGV0ZWN0X3Bj aChkZXYpOwo+ICsJCQl9IGVsc2UKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJYnJlYWs7Cj4g KwkJfQo+ICsJfQo+ICsJaWYgKCFwY2gpCj4gKwkJRFJNX0RFQlVHX0tNUygiTm8gUENIIGZvdW5k LlxuIik7Cj4gKwo+ICsJcGNpX2Rldl9wdXQocGNoKTsKPiArfQo+ICsKPiArYm9vbCBpOTE1X3Nl bWFwaG9yZV9pc19lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA2KQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwlpZiAoaTkxNS5zZW1hcGhvcmVzID49IDApCj4gKwkJcmV0dXJuIGk5MTUuc2VtYXBob3Jl czsKPiArCj4gKwkvKiBUT0RPOiBtYWtlIHNlbWFwaG9yZXMgYW5kIEV4ZWNsaXN0cyBwbGF5IG5p Y2VseSB0b2dldGhlciAqLwo+ICsJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0lOVEVMX0lPTU1VCj4gKwkvKiBFbmFibGUg c2VtYXBob3JlcyBvbiBTTkIgd2hlbiBJTyByZW1hcHBpbmcgaXMgb2ZmICovCj4gKwlpZiAoSVNf R0VONihkZXZfcHJpdikgJiYgaW50ZWxfaW9tbXVfZ2Z4X21hcHBlZCkKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKyNlbmRpZgo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGk5MTVfZ2V0cGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiArCQkJ wqBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWRybV9pOTE1X2dldHBhcmFt X3QgKnBhcmFtID0gZGF0YTsKPiArCWludCB2YWx1ZTsKPiArCj4gKwlzd2l0Y2ggKHBhcmFtLT5w YXJhbSkgewo+ICsJY2FzZSBJOTE1X1BBUkFNX0lSUV9BQ1RJVkU6Cj4gKwljYXNlIEk5MTVfUEFS QU1fQUxMT1dfQkFUQ0hCVUZGRVI6Cj4gKwljYXNlIEk5MTVfUEFSQU1fTEFTVF9ESVNQQVRDSDoK PiArCQkvKiBSZWplY3QgYWxsIG9sZCB1bXMvZHJpIHBhcmFtcy4gKi8KPiArCQlyZXR1cm4gLUVO T0RFVjsKPiArCWNhc2UgSTkxNV9QQVJBTV9DSElQU0VUX0lEOgo+ICsJCXZhbHVlID0gZGV2LT5w ZGV2LT5kZXZpY2U7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fUkVWSVNJT046Cj4g KwkJdmFsdWUgPSBkZXYtPnBkZXYtPnJldmlzaW9uOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1 X1BBUkFNX0hBU19HRU06Cj4gKwkJdmFsdWUgPSAxOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1 X1BBUkFNX05VTV9GRU5DRVNfQVZBSUw6Cj4gKwkJdmFsdWUgPSBkZXZfcHJpdi0+bnVtX2ZlbmNl X3JlZ3M7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fSEFTX09WRVJMQVk6Cj4gKwkJ dmFsdWUgPSBkZXZfcHJpdi0+b3ZlcmxheSA/IDEgOiAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJ OTE1X1BBUkFNX0hBU19QQUdFRkxJUFBJTkc6Cj4gKwkJdmFsdWUgPSAxOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBJOTE1X1BBUkFNX0hBU19FWEVDQlVGMjoKPiArCQkvKiBkZXBlbmRzIG9uIEdFTSAq Lwo+ICsJCXZhbHVlID0gMTsKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9QQVJBTV9IQVNfQlNE Ogo+ICsJCXZhbHVlID0gaW50ZWxfZW5naW5lX2luaXRpYWxpemVkKCZkZXZfcHJpdi0+ZW5naW5l W1ZDU10pOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1BBUkFNX0hBU19CTFQ6Cj4gKwkJdmFs dWUgPSBpbnRlbF9lbmdpbmVfaW5pdGlhbGl6ZWQoJmRldl9wcml2LT5lbmdpbmVbQkNTXSk7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fSEFTX1ZFQk9YOgo+ICsJCXZhbHVlID0gaW50 ZWxfZW5naW5lX2luaXRpYWxpemVkKCZkZXZfcHJpdi0+ZW5naW5lW1ZFQ1NdKTsKPiArCQlicmVh azsKPiArCWNhc2UgSTkxNV9QQVJBTV9IQVNfQlNEMjoKPiArCQl2YWx1ZSA9IGludGVsX2VuZ2lu ZV9pbml0aWFsaXplZCgmZGV2X3ByaXYtPmVuZ2luZVtWQ1MyXSk7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIEk5MTVfUEFSQU1fSEFTX1JFTEFYRURfRkVOQ0lORzoKPiArCQl2YWx1ZSA9IDE7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fSEFTX0NPSEVSRU5UX1JJTkdTOgo+ICsJCXZhbHVl ID0gMTsKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhFQ19DT05TVEFOVFM6 Cj4gKwkJdmFsdWUgPSBJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0Owo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBJOTE1X1BBUkFNX0hBU19SRUxBWEVEX0RFTFRBOgo+ICsJCXZhbHVlID0gMTsKPiArCQli cmVhazsKPiArCWNhc2UgSTkxNV9QQVJBTV9IQVNfR0VON19TT0xfUkVTRVQ6Cj4gKwkJdmFsdWUg PSAxOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1BBUkFNX0hBU19MTEM6Cj4gKwkJdmFsdWUg PSBIQVNfTExDKGRldik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fSEFTX1dUOgo+ ICsJCXZhbHVlID0gSEFTX1dUKGRldik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1f SEFTX0FMSUFTSU5HX1BQR1RUOgo+ICsJCXZhbHVlID0gVVNFU19QUEdUVChkZXYpOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBJOTE1X1BBUkFNX0hBU19XQUlUX1RJTUVPVVQ6Cj4gKwkJdmFsdWUgPSAx Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1BBUkFNX0hBU19TRU1BUEhPUkVTOgo+ICsJCXZh bHVlID0gaTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChkZXZfcHJpdik7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIEk5MTVfUEFSQU1fSEFTX1BSSU1FX1ZNQVBfRkxVU0g6Cj4gKwkJdmFsdWUgPSAxOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1BBUkFNX0hBU19TRUNVUkVfQkFUQ0hFUzoKPiArCQl2 YWx1ZSA9IGNhcGFibGUoQ0FQX1NZU19BRE1JTik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVf UEFSQU1fSEFTX1BJTk5FRF9CQVRDSEVTOgo+ICsJCXZhbHVlID0gMTsKPiArCQlicmVhazsKPiAr CWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhFQ19OT19SRUxPQzoKPiArCQl2YWx1ZSA9IDE7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fSEFTX0VYRUNfSEFORExFX0xVVDoKPiArCQl2YWx1 ZSA9IDE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fQ01EX1BBUlNFUl9WRVJTSU9O Ogo+ICsJCXZhbHVlID0gaTkxNV9jbWRfcGFyc2VyX2dldF92ZXJzaW9uKGRldl9wcml2KTsKPiAr CQlicmVhazsKPiArCWNhc2UgSTkxNV9QQVJBTV9IQVNfQ09IRVJFTlRfUEhZU19HVFQ6Cj4gKwkJ dmFsdWUgPSAxOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1BBUkFNX01NQVBfVkVSU0lPTjoK PiArCQl2YWx1ZSA9IDE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfUEFSQU1fU1VCU0xJQ0Vf VE9UQUw6Cj4gKwkJdmFsdWUgPSBJTlRFTF9JTkZPKGRldiktPnN1YnNsaWNlX3RvdGFsOwo+ICsJ CWlmICghdmFsdWUpCj4gKwkJCXJldHVybiAtRU5PREVWOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJ OTE1X1BBUkFNX0VVX1RPVEFMOgo+ICsJCXZhbHVlID0gSU5URUxfSU5GTyhkZXYpLT5ldV90b3Rh bDsKPiArCQlpZiAoIXZhbHVlKQo+ICsJCQlyZXR1cm4gLUVOT0RFVjsKPiArCQlicmVhazsKPiAr CWNhc2UgSTkxNV9QQVJBTV9IQVNfR1BVX1JFU0VUOgo+ICsJCXZhbHVlID0gaTkxNS5lbmFibGVf aGFuZ2NoZWNrICYmIGludGVsX2hhc19ncHVfcmVzZXQoZGV2X3ByaXYpOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBJOTE1X1BBUkFNX0hBU19SRVNPVVJDRV9TVFJFQU1FUjoKPiArCQl2YWx1ZSA9IEhB U19SRVNPVVJDRV9TVFJFQU1FUihkZXYpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1BBUkFN X0hBU19FWEVDX1NPRlRQSU46Cj4gKwkJdmFsdWUgPSAxOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVs dDoKPiArCQlEUk1fREVCVUcoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLCBwYXJhbS0+cGFyYW0p Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlmIChjb3B5X3RvX3VzZXIocGFy YW0tPnZhbHVlLCAmdmFsdWUsIHNpemVvZihpbnQpKSkgewo+ICsJCURSTV9FUlJPUigiY29weV90 b191c2VyIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9nZXRfYnJpZGdlX2RldihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWRldl9wcml2LT5icmlkZ2VfZGV2ID0gcGNp X2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsIDApKTsKPiArCWlmICghZGV2X3ByaXYt PmJyaWRnZV9kZXYpIHsKPiArCQlEUk1fRVJST1IoImJyaWRnZSBkZXZpY2Ugbm90IGZvdW5kXG4i KTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyogQWxs b2NhdGUgc3BhY2UgZm9yIHRoZSBNQ0ggcmVncyBpZiBuZWVkZWQsIHJldHVybiBub256ZXJvIG9u IGVycm9yICovCj4gK3N0YXRpYyBpbnQKPiAraW50ZWxfYWxsb2NfbWNoYmFyX3Jlc291cmNlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgcmVnID0gSU5URUxfSU5GTyhkZXYp LT5nZW4gPj0gNCA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7Cj4gKwl1MzIgdGVtcF9sbywg dGVtcF9oaSA9IDA7Cj4gKwl1NjQgbWNoYmFyX2FkZHI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlm IChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQo+ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChk ZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnICsgNCwgJnRlbXBfaGkpOwo+ICsJcGNpX3JlYWRfY29u ZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCByZWcsICZ0ZW1wX2xvKTsKPiArCW1jaGJh cl9hZGRyID0gKCh1NjQpdGVtcF9oaSA8PCAzMikgfCB0ZW1wX2xvOwo+ICsKPiArCS8qIElmIEFD UEkgZG9lc24ndCBoYXZlIGl0LCBhc3N1bWUgd2UgbmVlZCB0byBhbGxvY2F0ZSBpdCBvdXJzZWx2 ZXMgKi8KPiArI2lmZGVmIENPTkZJR19QTlAKPiArCWlmIChtY2hiYXJfYWRkciAmJgo+ICsJwqDC oMKgwqBwbnBfcmFuZ2VfcmVzZXJ2ZWQobWNoYmFyX2FkZHIsIG1jaGJhcl9hZGRyICsgTUNIQkFS X1NJWkUpKQo+ICsJCXJldHVybiAwOwo+ICsjZW5kaWYKPiArCj4gKwkvKiBHZXQgc29tZSBzcGFj ZSBmb3IgaXQgKi8KPiArCWRldl9wcml2LT5tY2hfcmVzLm5hbWUgPSAiaTkxNSBNQ0hCQVIiOwo+ ICsJZGV2X3ByaXYtPm1jaF9yZXMuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKPiArCXJldCA9IHBj aV9idXNfYWxsb2NfcmVzb3VyY2UoZGV2X3ByaXYtPmJyaWRnZV9kZXYtPmJ1cywKPiArCQkJCcKg wqDCoMKgwqAmZGV2X3ByaXYtPm1jaF9yZXMsCj4gKwkJCQnCoMKgwqDCoMKgTUNIQkFSX1NJWkUs IE1DSEJBUl9TSVpFLAo+ICsJCQkJwqDCoMKgwqDCoFBDSUJJT1NfTUlOX01FTSwKPiArCQkJCcKg wqDCoMKgwqAwLCBwY2liaW9zX2FsaWduX3Jlc291cmNlLAo+ICsJCQkJwqDCoMKgwqDCoGRldl9w cml2LT5icmlkZ2VfZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJm YWlsZWQgYnVzIGFsbG9jOiAlZFxuIiwgcmV0KTsKPiArCQlkZXZfcHJpdi0+bWNoX3Jlcy5zdGFy dCA9IDA7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlpZiAoSU5URUxfSU5GTyhkZXYp LT5nZW4gPj0gNCkKPiArCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2Vf ZGV2LCByZWcgKyA0LAo+ICsJCQkJwqDCoMKgwqDCoMKgwqB1cHBlcl8zMl9iaXRzKGRldl9wcml2 LT5tY2hfcmVzLnN0YXJ0KSk7Cj4gKwo+ICsJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJp di0+YnJpZGdlX2RldiwgcmVnLAo+ICsJCQnCoMKgwqDCoMKgwqDCoGxvd2VyXzMyX2JpdHMoZGV2 X3ByaXYtPm1jaF9yZXMuc3RhcnQpKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBTZXR1 cCBNQ0hCQVIgaWYgcG9zc2libGUsIHJldHVybiB0cnVlIGlmIHdlIHNob3VsZCBkaXNhYmxlIGl0 IGFnYWluICovCj4gK3N0YXRpYyB2b2lkCj4gK2ludGVsX3NldHVwX21jaGJhcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+ICsJaW50IG1jaGJhcl9yZWcgPSBJTlRFTF9JTkZPKGRldikt PmdlbiA+PSA0ID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKPiArCXUzMiB0ZW1wOwo+ICsJ Ym9vbCBlbmFibGVkOwo+ICsKPiArCWlmIChJU19WQUxMRVlWSUVXKGRldikgfHwgSVNfQ0hFUlJZ VklFVyhkZXYpKQo+ICsJCXJldHVybjsKPiArCj4gKwlkZXZfcHJpdi0+bWNoYmFyX25lZWRfZGlz YWJsZSA9IGZhbHNlOwo+ICsKPiArCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYp KSB7Cj4gKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZF TiwgJnRlbXApOwo+ICsJCWVuYWJsZWQgPSAhISh0ZW1wICYgREVWRU5fTUNIQkFSX0VOKTsKPiAr CX0gZWxzZSB7Cj4gKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2 LCBtY2hiYXJfcmVnLCAmdGVtcCk7Cj4gKwkJZW5hYmxlZCA9IHRlbXAgJiAxOwo+ICsJfQo+ICsK PiArCS8qIElmIGl0J3MgYWxyZWFkeSBlbmFibGVkLCBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5n ICovCj4gKwlpZiAoZW5hYmxlZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGludGVsX2FsbG9j X21jaGJhcl9yZXNvdXJjZShkZXYpKQo+ICsJCXJldHVybjsKPiArCj4gKwlkZXZfcHJpdi0+bWNo YmFyX25lZWRfZGlzYWJsZSA9IHRydWU7Cj4gKwo+ICsJLyogU3BhY2UgaXMgYWxsb2NhdGVkIG9y IHJlc2VydmVkLCBzbyBlbmFibGUgaXQuICovCj4gKwlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19J OTE1R00oZGV2KSkgewo+ICsJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRn ZV9kZXYsIERFVkVOLAo+ICsJCQkJwqDCoMKgwqDCoMKgwqB0ZW1wIHwgREVWRU5fTUNIQkFSX0VO KTsKPiArCX0gZWxzZSB7Cj4gKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlk Z2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7Cj4gKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChk ZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgdGVtcCB8IDEpOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZAo+ICtpbnRlbF90ZWFyZG93bl9tY2hiYXIoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCWludCBtY2hiYXJfcmVnID0gSU5URUxfSU5GTyhkZXYpLT5nZW4g Pj0gNCA/IE1DSEJBUl9JOTY1IDogTUNIQkFSX0k5MTU7Cj4gKwo+ICsJaWYgKGRldl9wcml2LT5t Y2hiYXJfbmVlZF9kaXNhYmxlKSB7Cj4gKwkJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdN KGRldikpIHsKPiArCQkJdTMyIGRldmVuX3ZhbDsKPiArCj4gKwkJCXBjaV9yZWFkX2NvbmZpZ19k d29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU4sCj4gKwkJCQkJwqDCoMKgwqDCoMKgJmRl dmVuX3ZhbCk7Cj4gKwkJCWRldmVuX3ZhbCAmPSB+REVWRU5fTUNIQkFSX0VOOwo+ICsJCQlwY2lf d3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTiwKPiArCQkJCQnC oMKgwqDCoMKgwqDCoGRldmVuX3ZhbCk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJdTMyIG1jaGJhcl92 YWw7Cj4gKwo+ICsJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYs IG1jaGJhcl9yZWcsCj4gKwkJCQkJwqDCoMKgwqDCoMKgJm1jaGJhcl92YWwpOwo+ICsJCQltY2hi YXJfdmFsICY9IH4xOwo+ICsJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlk Z2VfZGV2LCBtY2hiYXJfcmVnLAo+ICsJCQkJCcKgwqDCoMKgwqDCoMKgbWNoYmFyX3ZhbCk7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCWlmIChkZXZfcHJpdi0+bWNoX3Jlcy5zdGFydCkKPiArCQlyZWxl YXNlX3Jlc291cmNlKCZkZXZfcHJpdi0+bWNoX3Jlcyk7Cj4gK30KPiArCj4gKy8qIHRydWUgPSBl bmFibGUgZGVjb2RlLCBmYWxzZSA9IGRpc2FibGUgZGVjb2RlciAqLwo+ICtzdGF0aWMgdW5zaWdu ZWQgaW50IGk5MTVfdmdhX3NldF9kZWNvZGUodm9pZCAqY29va2llLCBib29sIHN0YXRlKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29va2llOwo+ICsKPiArCWludGVsX21vZGVz ZXRfdmdhX3NldF9zdGF0ZShkZXYsIHN0YXRlKTsKPiArCWlmIChzdGF0ZSkKPiArCQlyZXR1cm4g VkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JTUkNfTEVHQUNZX01FTSB8Cj4gKwkJwqDCoMKgwqDC oMKgwqBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwo+ICsJZWxzZQo+ ICsJCXJldHVybiBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X3N3aXRjaGVyb29fc2V0X3N0YXRlKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJcG1fbWVzc2Fn ZV90IHBtbSA9IHsgLmV2ZW50ID0gUE1fRVZFTlRfU1VTUEVORCB9Owo+ICsKPiArCWlmIChzdGF0 ZSA9PSBWR0FfU1dJVENIRVJPT19PTikgewo+ICsJCXByX2luZm8oInN3aXRjaGVkIG9uXG4iKTsK PiArCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfQ0hBTkdJTkc7 Cj4gKwkJLyogaTkxNSByZXN1bWUgaGFuZGxlciBkb2Vzbid0IHNldCB0byBEMCAqLwo+ICsJCXBj aV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOwo+ICsJCWk5MTVfcmVzdW1lX3N3 aXRjaGVyb28oZGV2KTsKPiArCQlkZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hf UE9XRVJfT047Cj4gKwl9IGVsc2Ugewo+ICsJCXByX2luZm8oInN3aXRjaGVkIG9mZlxuIik7Cj4g KwkJZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPSBEUk1fU1dJVENIX1BPV0VSX0NIQU5HSU5HOwo+ ICsJCWk5MTVfc3VzcGVuZF9zd2l0Y2hlcm9vKGRldiwgcG1tKTsKPiArCQlkZXYtPnN3aXRjaF9w b3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfT0ZGOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCBpOTE1X3N3aXRjaGVyb29fY2FuX3N3aXRjaChzdHJ1Y3QgcGNpX2RldiAqcGRldikK PiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsK PiArCj4gKwkvKgo+ICsJwqAqIEZJWE1FOiBvcGVuX2NvdW50IGlzIHByb3RlY3RlZCBieSBkcm1f Z2xvYmFsX211dGV4IGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8KPiArCcKgKiBsb2NraW5nIGludmVy c2lvbiB3aXRoIHRoZSBkcml2ZXIgbG9hZCBwYXRoLiBBbmQgdGhlIGFjY2VzcyBoZXJlIGlzCj4g KwnCoCogY29tcGxldGVseSByYWN5IGFueXdheS4gU28gZG9uJ3QgYm90aGVyIHdpdGggbG9ja2lu ZyBmb3Igbm93Lgo+ICsJwqAqLwo+ICsJcmV0dXJuIGRldi0+b3Blbl9jb3VudCA9PSAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9vcHMgaTkx NV9zd2l0Y2hlcm9vX29wcyA9IHsKPiArCS5zZXRfZ3B1X3N0YXRlID0gaTkxNV9zd2l0Y2hlcm9v X3NldF9zdGF0ZSwKPiArCS5yZXByb2JlID0gTlVMTCwKPiArCS5jYW5fc3dpdGNoID0gaTkxNV9z d2l0Y2hlcm9vX2Nhbl9zd2l0Y2gsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X2dlbV9m aW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCj4gKwkvKgo+ICsJwqAqIE5laXRoZXIg dGhlIEJJT1MsIG91cnNlbHZlcyBvciBhbnkgb3RoZXIga2VybmVsCj4gKwnCoCogZXhwZWN0cyB0 aGUgc3lzdGVtIHRvIGJlIGluIGV4ZWNsaXN0cyBtb2RlIG9uIHN0YXJ0dXAsCj4gKwnCoCogc28g d2UgbmVlZCB0byByZXNldCB0aGUgR1BVIGJhY2sgdG8gbGVnYWN5IG1vZGUuIEFuZCB0aGUgb25s eQo+ICsJwqAqIGtub3duIHdheSB0byBkaXNhYmxlIGxvZ2ljYWwgY29udGV4dHMgaXMgdGhyb3Vn aCBhIEdQVSByZXNldC4KPiArCcKgKgo+ICsJwqAqIFNvIGluIG9yZGVyIHRvIGxlYXZlIHRoZSBz eXN0ZW0gaW4gYSBrbm93biBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sCj4gKwnCoCogYWx3YXlzIHJl c2V0IHRoZSBHUFUgdXBvbiB1bmxvYWQuIEFmdGVyd2FyZHMgd2UgdGhlbiBjbGVhbiB1cCB0aGUK PiArCcKgKiBHRU0gc3RhdGUgdHJhY2tpbmcsIGZsdXNoaW5nIG9mZiB0aGUgcmVxdWVzdHMgYW5k IGxlYXZpbmcgdGhlCj4gKwnCoCogc3lzdGVtIGluIGEga25vd24gaWRsZSBzdGF0ZS4KPiArCcKg Kgo+ICsJwqAqIE5vdGUgdGhhdCBpcyBvZiB0aGUgdXBtb3N0IGltcG9ydGFuY2UgdGhhdCB0aGUg R1BVIGlzIGlkbGUgYW5kCj4gKwnCoCogYWxsIHN0cmF5IHdyaXRlcyBhcmUgZmx1c2hlZCAqYmVm b3JlKiB3ZSBkaXNtYW50bGUgdGhlIGJhY2tpbmcKPiArCcKgKiBzdG9yYWdlIGZvciB0aGUgcGlu bmVkIG9iamVjdHMuCj4gKwnCoCoKPiArCcKgKiBIb3dldmVyLCBzaW5jZSB3ZSBhcmUgdW5jZXJ0 YWluIHRoYXQgcmVzZXRpbmcgdGhlIEdQVSBvbiBvbGRlcgo+ICsJwqAqIG1hY2hpbmVzIGlzIGEg Z29vZCBpZGVhLCB3ZSBkb24ndCAtIGp1c3QgaW4gY2FzZSBpdCBsZWF2ZXMgdGhlCj4gKwnCoCog bWFjaGluZSBpbiBhbiB1bnVzYWJsZSBjb25kaXRpb24uCj4gKwnCoCovCj4gKwlpZiAoSEFTX0hX X0NPTlRFWFRTKGRldikpIHsKPiArCQlpbnQgcmVzZXQgPSBpbnRlbF9ncHVfcmVzZXQoZGV2X3By aXYsIEFMTF9FTkdJTkVTKTsKPiArCQlXQVJOX09OKHJlc2V0ICYmIHJlc2V0ICE9IC1FTk9ERVYp Owo+ICsJfQo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCWk5MTVf Z2VtX3Jlc2V0KGRldik7Cj4gKwlpOTE1X2dlbV9jbGVhbnVwX2VuZ2luZXMoZGV2KTsKPiArCWk5 MTVfZ2VtX2NvbnRleHRfZmluaShkZXYpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7Cj4gKwo+ICsJV0FSTl9PTighbGlzdF9lbXB0eSgmdG9faTkxNShkZXYpLT5jb250ZXh0 X2xpc3QpKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChpOTE1 X2luamVjdF9sb2FkX2ZhaWx1cmUoKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlyZXQg PSBpbnRlbF9iaW9zX2luaXQoZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlEUk1fSU5GTygi ZmFpbGVkIHRvIGZpbmQgVkJJT1MgdGFibGVzXG4iKTsKPiArCj4gKwkvKiBJZiB3ZSBoYXZlID4g MSBWR0EgY2FyZHMsIHRoZW4gd2UgbmVlZCB0byBhcmJpdHJhdGUgYWNjZXNzCj4gKwnCoCogdG8g dGhlIGNvbW1vbiBWR0EgcmVzb3VyY2VzLgo+ICsJwqAqCj4gKwnCoCogSWYgd2UgYXJlIGEgc2Vj b25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAoIVBDSV9ESVNQTEFZX0NMQVNTX1ZHQSksCj4gKwnC oCogdGhlbiB3ZSBkbyBub3QgdGFrZSBwYXJ0IGluIFZHQSBhcmJpdHJhdGlvbiBhbmQgdGhlCj4g KwnCoCogdmdhX2NsaWVudF9yZWdpc3RlcigpIGZhaWxzIHdpdGggLUVOT0RFVi4KPiArCcKgKi8K PiArCXJldCA9IHZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBkZXYsIE5VTEwsIGk5MTVf dmdhX3NldF9kZWNvZGUpOwo+ICsJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RFVikKPiArCQlnb3Rv IG91dDsKPiArCj4gKwlpbnRlbF9yZWdpc3Rlcl9kc21faGFuZGxlcigpOwo+ICsKPiArCXJldCA9 IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2NsaWVudChkZXYtPnBkZXYsICZpOTE1X3N3aXRjaGVy b29fb3BzLCBmYWxzZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gY2xlYW51cF92Z2FfY2xpZW50 Owo+ICsKPiArCS8qIG11c3QgaGFwcGVuIGJlZm9yZSBpbnRlbF9wb3dlcl9kb21haW5zX2luaXRf aHcoKSBvbiBWTFYvQ0hWICovCj4gKwlpbnRlbF91cGRhdGVfcmF3Y2xrKGRldl9wcml2KTsKPiAr Cj4gKwlpbnRlbF9wb3dlcl9kb21haW5zX2luaXRfaHcoZGV2X3ByaXYsIGZhbHNlKTsKPiArCj4g KwlpbnRlbF9jc3JfdWNvZGVfaW5pdChkZXZfcHJpdik7Cj4gKwo+ICsJcmV0ID0gaW50ZWxfaXJx X2luc3RhbGwoZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGNsZWFudXBfY3NyOwo+ ICsKPiArCWludGVsX3NldHVwX2dtYnVzKGRldik7Cj4gKwo+ICsJLyogSW1wb3J0YW50OiBUaGUg b3V0cHV0IHNldHVwIGZ1bmN0aW9ucyBjYWxsZWQgYnkgbW9kZXNldF9pbml0IG5lZWQKPiArCcKg KiB3b3JraW5nIGlycXMgZm9yIGUuZy4gZ21idXMgYW5kIGRwIGF1eCB0cmFuc2ZlcnMuICovCj4g KwlpbnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKPiArCj4gKwlpbnRlbF9ndWNfaW5pdChkZXYpOwo+ ICsKPiArCXJldCA9IGk5MTVfZ2VtX2luaXQoZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBj bGVhbnVwX2lycTsKPiArCj4gKwlpbnRlbF9tb2Rlc2V0X2dlbV9pbml0KGRldik7Cj4gKwo+ICsJ aWYgKElOVEVMX0lORk8oZGV2KS0+bnVtX3BpcGVzID09IDApCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJcmV0ID0gaW50ZWxfZmJkZXZfaW5pdChkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGNs ZWFudXBfZ2VtOwo+ICsKPiArCS8qIE9ubHkgZW5hYmxlIGhvdHBsdWcgaGFuZGxpbmcgb25jZSB0 aGUgZmJkZXYgaXMgZnVsbHkgc2V0IHVwLiAqLwo+ICsJaW50ZWxfaHBkX2luaXQoZGV2X3ByaXYp Owo+ICsKPiArCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZXYpOwo+ICsKPiArCXJldHVybiAw Owo+ICsKPiArY2xlYW51cF9nZW06Cj4gKwlpOTE1X2dlbV9maW5pKGRldik7Cj4gK2NsZWFudXBf aXJxOgo+ICsJaW50ZWxfZ3VjX2ZpbmkoZGV2KTsKPiArCWRybV9pcnFfdW5pbnN0YWxsKGRldik7 Cj4gKwlpbnRlbF90ZWFyZG93bl9nbWJ1cyhkZXYpOwo+ICtjbGVhbnVwX2NzcjoKPiArCWludGVs X2Nzcl91Y29kZV9maW5pKGRldl9wcml2KTsKPiArCWludGVsX3Bvd2VyX2RvbWFpbnNfZmluaShk ZXZfcHJpdik7Cj4gKwl2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudChkZXYtPnBkZXYp Owo+ICtjbGVhbnVwX3ZnYV9jbGllbnQ6Cj4gKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRl diwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4gK291dDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g KyNpZiBJU19FTkFCTEVEKENPTkZJR19GQikKPiArc3RhdGljIGludCBpOTE1X2tpY2tfb3V0X2Zp cm13YXJlX2ZiKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3Ry dWN0IGFwZXJ0dXJlc19zdHJ1Y3QgKmFwOwo+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZf cHJpdi0+ZGV2LT5wZGV2Owo+ICsJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZkZXZfcHJpdi0+ Z2d0dDsKPiArCWJvb2wgcHJpbWFyeTsKPiArCWludCByZXQ7Cj4gKwo+ICsJYXAgPSBhbGxvY19h cGVydHVyZXMoMSk7Cj4gKwlpZiAoIWFwKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWFw LT5yYW5nZXNbMF0uYmFzZSA9IGdndHQtPm1hcHBhYmxlX2Jhc2U7Cj4gKwlhcC0+cmFuZ2VzWzBd LnNpemUgPSBnZ3R0LT5tYXBwYWJsZV9lbmQ7Cj4gKwo+ICsJcHJpbWFyeSA9Cj4gKwkJcGRldi0+ cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9TSEFET1c7 Cj4gKwo+ICsJcmV0ID0gcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhhcCwgImludGVs ZHJtZmIiLCBwcmltYXJ5KTsKPiArCj4gKwlrZnJlZShhcCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsjZWxzZQo+ICtzdGF0aWMgaW50IGk5MTVfa2lja19vdXRfZmlybXdhcmVfZmIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsjZW5kaWYKPiArCj4gKyNpZiAhZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpCj4gK3N0YXRp YyBpbnQgaTkxNV9raWNrX291dF92Z2Fjb24oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsjZWxpZiAhZGVmaW5lZChDT05GSUdfRFVN TVlfQ09OU09MRSkKPiArc3RhdGljIGludCBpOTE1X2tpY2tfb3V0X3ZnYWNvbihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXJldHVybiAtRU5PREVWOwo+ICt9Cj4g KyNlbHNlCj4gK3N0YXRpYyBpbnQgaTkxNV9raWNrX291dF92Z2Fjb24oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlEUk1fSU5G TygiUmVwbGFjaW5nIFZHQSBjb25zb2xlIGRyaXZlclxuIik7Cj4gKwo+ICsJY29uc29sZV9sb2Nr KCk7Cj4gKwlpZiAoY29uX2lzX2JvdW5kKCZ2Z2FfY29uKSkKPiArCQlyZXQgPSBkb190YWtlX292 ZXJfY29uc29sZSgmZHVtbXlfY29uLCAwLCBNQVhfTlJfQ09OU09MRVMgLSAxLCAxKTsKPiArCWlm IChyZXQgPT0gMCkgewo+ICsJCXJldCA9IGRvX3VucmVnaXN0ZXJfY29uX2RyaXZlcigmdmdhX2Nv bik7Cj4gKwo+ICsJCS8qIElnbm9yZSAiYWxyZWFkeSB1bnJlZ2lzdGVyZWQiLiAqLwo+ICsJCWlm IChyZXQgPT0gLUVOT0RFVikKPiArCQkJcmV0ID0gMDsKPiArCX0KPiArCWNvbnNvbGVfdW5sb2Nr KCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyB2b2lk IGk5MTVfZHVtcF9kZXZpY2VfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gK3sKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZkZXZfcHJp di0+aW5mbzsKPiArCj4gKyNkZWZpbmUgUFJJTlRfUyhuYW1lKSAiJXMiCj4gKyNkZWZpbmUgU0VQ X0VNUFRZCj4gKyNkZWZpbmUgUFJJTlRfRkxBRyhuYW1lKSBpbmZvLT5uYW1lID8gI25hbWUgIiwi IDogIiIKPiArI2RlZmluZSBTRVBfQ09NTUEgLAo+ICsJRFJNX0RFQlVHX0RSSVZFUigiaTkxNSBk ZXZpY2UgaW5mbzogZ2VuPSVpLCBwY2lpZD0weCUwNHggcmV2PTB4JTAyeCBmbGFncz0iCj4gKwkJ CcKgREVWX0lORk9fRk9SX0VBQ0hfRkxBRyhQUklOVF9TLCBTRVBfRU1QVFkpLAo+ICsJCQnCoGlu Zm8tPmdlbiwKPiArCQkJwqBkZXZfcHJpdi0+ZGV2LT5wZGV2LT5kZXZpY2UsCj4gKwkJCcKgZGV2 X3ByaXYtPmRldi0+cGRldi0+cmV2aXNpb24sCj4gKwkJCcKgREVWX0lORk9fRk9SX0VBQ0hfRkxB RyhQUklOVF9GTEFHLCBTRVBfQ09NTUEpKTsKPiArI3VuZGVmIFBSSU5UX1MKPiArI3VuZGVmIFNF UF9FTVBUWQo+ICsjdW5kZWYgUFJJTlRfRkxBRwo+ICsjdW5kZWYgU0VQX0NPTU1BCj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGNoZXJyeXZpZXdfc3NldV9pbmZvX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbzsKPiArCXUz MiBmdXNlLCBldV9kaXM7Cj4gKwo+ICsJaW5mbyA9IChzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8g KikmZGV2X3ByaXYtPmluZm87Cj4gKwlmdXNlID0gSTkxNV9SRUFEKENIVl9GVVNFX0dUKTsKPiAr Cj4gKwlpbmZvLT5zbGljZV90b3RhbCA9IDE7Cj4gKwo+ICsJaWYgKCEoZnVzZSAmIENIVl9GR1Rf RElTQUJMRV9TUzApKSB7Cj4gKwkJaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNlKys7Cj4gKwkJZXVf ZGlzID0gZnVzZSAmIChDSFZfRkdUX0VVX0RJU19TUzBfUjBfTUFTSyB8Cj4gKwkJCQnCoENIVl9G R1RfRVVfRElTX1NTMF9SMV9NQVNLKTsKPiArCQlpbmZvLT5ldV90b3RhbCArPSA4IC0gaHdlaWdo dDMyKGV1X2Rpcyk7Cj4gKwl9Cj4gKwo+ICsJaWYgKCEoZnVzZSAmIENIVl9GR1RfRElTQUJMRV9T UzEpKSB7Cj4gKwkJaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNlKys7Cj4gKwkJZXVfZGlzID0gZnVz ZSAmIChDSFZfRkdUX0VVX0RJU19TUzFfUjBfTUFTSyB8Cj4gKwkJCQnCoENIVl9GR1RfRVVfRElT X1NTMV9SMV9NQVNLKTsKPiArCQlpbmZvLT5ldV90b3RhbCArPSA4IC0gaHdlaWdodDMyKGV1X2Rp cyk7Cj4gKwl9Cj4gKwo+ICsJaW5mby0+c3Vic2xpY2VfdG90YWwgPSBpbmZvLT5zdWJzbGljZV9w ZXJfc2xpY2U7Cj4gKwkvKgo+ICsJwqAqIENIViBleHBlY3RlZCB0byBhbHdheXMgaGF2ZSBhIHVu aWZvcm0gZGlzdHJpYnV0aW9uIG9mIEVVCj4gKwnCoCogYWNyb3NzIHN1YnNsaWNlcy4KPiArCSov Cj4gKwlpbmZvLT5ldV9wZXJfc3Vic2xpY2UgPSBpbmZvLT5zdWJzbGljZV90b3RhbCA/Cj4gKwkJ CQlpbmZvLT5ldV90b3RhbCAvIGluZm8tPnN1YnNsaWNlX3RvdGFsIDoKPiArCQkJCTA7Cj4gKwkv Kgo+ICsJwqAqIENIViBzdXBwb3J0cyBzdWJzbGljZSBwb3dlciBnYXRpbmcgb24gZGV2aWNlcyB3 aXRoIG1vcmUgdGhhbgo+ICsJwqAqIG9uZSBzdWJzbGljZSwgYW5kIHN1cHBvcnRzIEVVIHBvd2Vy IGdhdGluZyBvbiBkZXZpY2VzIHdpdGgKPiArCcKgKiBtb3JlIHRoYW4gb25lIEVVIHBhaXIgcGVy IHN1YnNsaWNlLgo+ICsJKi8KPiArCWluZm8tPmhhc19zbGljZV9wZyA9IDA7Cj4gKwlpbmZvLT5o YXNfc3Vic2xpY2VfcGcgPSAoaW5mby0+c3Vic2xpY2VfdG90YWwgPiAxKTsKPiArCWluZm8tPmhh c19ldV9wZyA9IChpbmZvLT5ldV9wZXJfc3Vic2xpY2UgPiAyKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgZ2VuOV9zc2V1X2luZm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ ICsJc3RydWN0IGludGVsX2RldmljZV9pbmZvICppbmZvOwo+ICsJaW50IHNfbWF4ID0gMywgc3Nf bWF4ID0gNCwgZXVfbWF4ID0gODsKPiArCWludCBzLCBzczsKPiArCXUzMiBmdXNlMiwgc19lbmFi bGUsIHNzX2Rpc2FibGUsIGV1X2Rpc2FibGU7Cj4gKwl1OCBldV9tYXNrID0gMHhmZjsKPiArCj4g KwlpbmZvID0gKHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqKSZkZXZfcHJpdi0+aW5mbzsKPiAr CWZ1c2UyID0gSTkxNV9SRUFEKEdFTjhfRlVTRTIpOwo+ICsJc19lbmFibGUgPSAoZnVzZTIgJiBH RU44X0YyX1NfRU5BX01BU0spID4+Cj4gKwkJwqDCoMKgR0VOOF9GMl9TX0VOQV9TSElGVDsKPiAr CXNzX2Rpc2FibGUgPSAoZnVzZTIgJiBHRU45X0YyX1NTX0RJU19NQVNLKSA+Pgo+ICsJCcKgwqDC oMKgwqBHRU45X0YyX1NTX0RJU19TSElGVDsKPiArCj4gKwlpbmZvLT5zbGljZV90b3RhbCA9IGh3 ZWlnaHQzMihzX2VuYWJsZSk7Cj4gKwkvKgo+ICsJwqAqIFRoZSBzdWJzbGljZSBkaXNhYmxlIGZp ZWxkIGlzIGdsb2JhbCwgaS5lLiBpdCBhcHBsaWVzCj4gKwnCoCogdG8gZWFjaCBvZiB0aGUgZW5h YmxlZCBzbGljZXMuCj4gKwkqLwo+ICsJaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNlID0gc3NfbWF4 IC0gaHdlaWdodDMyKHNzX2Rpc2FibGUpOwo+ICsJaW5mby0+c3Vic2xpY2VfdG90YWwgPSBpbmZv LT5zbGljZV90b3RhbCAqCj4gKwkJCcKgwqDCoMKgwqDCoMKgaW5mby0+c3Vic2xpY2VfcGVyX3Ns aWNlOwo+ICsKPiArCS8qCj4gKwnCoCogSXRlcmF0ZSB0aHJvdWdoIGVuYWJsZWQgc2xpY2VzIGFu ZCBzdWJzbGljZXMgdG8KPiArCcKgKiBjb3VudCB0aGUgdG90YWwgZW5hYmxlZCBFVS4KPiArCSov Cj4gKwlmb3IgKHMgPSAwOyBzIDwgc19tYXg7IHMrKykgewo+ICsJCWlmICghKHNfZW5hYmxlICYg KDB4MSA8PCBzKSkpCj4gKwkJCS8qIHNraXAgZGlzYWJsZWQgc2xpY2UgKi8KPiArCQkJY29udGlu dWU7Cj4gKwo+ICsJCWV1X2Rpc2FibGUgPSBJOTE1X1JFQUQoR0VOOV9FVV9ESVNBQkxFKHMpKTsK PiArCQlmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPiArCQkJaW50IGV1X3Blcl9z czsKPiArCj4gKwkJCWlmIChzc19kaXNhYmxlICYgKDB4MSA8PCBzcykpCj4gKwkJCQkvKiBza2lw IGRpc2FibGVkIHN1YnNsaWNlICovCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCWV1X3Blcl9z cyA9IGV1X21heCAtIGh3ZWlnaHQ4KChldV9kaXNhYmxlID4+IChzcyo4KSkgJgo+ICsJCQkJCQnC oMKgwqDCoMKgwqBldV9tYXNrKTsKPiArCj4gKwkJCS8qCj4gKwkJCcKgKiBSZWNvcmQgd2hpY2gg c3Vic2xpY2UocykgaGFzKGhhdmUpIDcgRVVzLiB3ZQo+ICsJCQnCoCogY2FuIHR1bmUgdGhlIGhh c2ggdXNlZCB0byBzcHJlYWQgd29yayBhbW9uZwo+ICsJCQnCoCogc3Vic2xpY2VzIGlmIHRoZXkg YXJlIHVuYmFsYW5jZWQuCj4gKwkJCcKgKi8KPiArCQkJaWYgKGV1X3Blcl9zcyA9PSA3KQo+ICsJ CQkJaW5mby0+c3Vic2xpY2VfN2V1W3NdIHw9IDEgPDwgc3M7Cj4gKwo+ICsJCQlpbmZvLT5ldV90 b3RhbCArPSBldV9wZXJfc3M7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qCj4gKwnCoCogU0tMIGlz IGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmlidXRpb24KPiArCcKgKiBv ZiBFVSBhY3Jvc3Mgc3Vic2xpY2VzIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGFueSBvbmUKPiAr CcKgKiBFVSBpbiBhbnkgb25lIHN1YnNsaWNlIG1heSBiZSBmdXNlZCBvZmYgZm9yIGRpZQo+ICsJ wqAqIHJlY292ZXJ5LiBCWFQgaXMgZXhwZWN0ZWQgdG8gYmUgcGVyZmVjdGx5IHVuaWZvcm0gaW4g RVUKPiArCcKgKiBkaXN0cmlidXRpb24uCj4gKwkqLwo+ICsJaW5mby0+ZXVfcGVyX3N1YnNsaWNl ID0gaW5mby0+c3Vic2xpY2VfdG90YWwgPwo+ICsJCQkJRElWX1JPVU5EX1VQKGluZm8tPmV1X3Rv dGFsLAo+ICsJCQkJCcKgwqDCoMKgwqBpbmZvLT5zdWJzbGljZV90b3RhbCkgOiAwOwo+ICsJLyoK PiArCcKgKiBTS0wgc3VwcG9ydHMgc2xpY2UgcG93ZXIgZ2F0aW5nIG9uIGRldmljZXMgd2l0aCBt b3JlIHRoYW4KPiArCcKgKiBvbmUgc2xpY2UsIGFuZCBzdXBwb3J0cyBFVSBwb3dlciBnYXRpbmcg b24gZGV2aWNlcyB3aXRoCj4gKwnCoCogbW9yZSB0aGFuIG9uZSBFVSBwYWlyIHBlciBzdWJzbGlj ZS4gQlhUIHN1cHBvcnRzIHN1YnNsaWNlCj4gKwnCoCogcG93ZXIgZ2F0aW5nIG9uIGRldmljZXMg d2l0aCBtb3JlIHRoYW4gb25lIHN1YnNsaWNlLCBhbmQKPiArCcKgKiBzdXBwb3J0cyBFVSBwb3dl ciBnYXRpbmcgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiBvbmUgRVUKPiArCcKgKiBwYWlyIHBl ciBzdWJzbGljZS4KPiArCSovCj4gKwlpbmZvLT5oYXNfc2xpY2VfcGcgPSAoKElTX1NLWUxBS0Uo ZGV2KSB8fCBJU19LQUJZTEFLRShkZXYpKSAmJgo+ICsJCQnCoMKgwqDCoMKgwqDCoChpbmZvLT5z bGljZV90b3RhbCA+IDEpKTsKPiArCWluZm8tPmhhc19zdWJzbGljZV9wZyA9IChJU19CUk9YVE9O KGRldikgJiYgKGluZm8tPnN1YnNsaWNlX3RvdGFsID4gMSkpOwo+ICsJaW5mby0+aGFzX2V1X3Bn ID0gKGluZm8tPmV1X3Blcl9zdWJzbGljZSA+IDIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBi cm9hZHdlbGxfc3NldV9pbmZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAr CXN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbzsKPiArCWNvbnN0IGludCBzX21heCA9IDMs IHNzX21heCA9IDMsIGV1X21heCA9IDg7Cj4gKwlpbnQgcywgc3M7Cj4gKwl1MzIgZnVzZTIsIGV1 X2Rpc2FibGVbc19tYXhdLCBzX2VuYWJsZSwgc3NfZGlzYWJsZTsKPiArCj4gKwlmdXNlMiA9IEk5 MTVfUkVBRChHRU44X0ZVU0UyKTsKPiArCXNfZW5hYmxlID0gKGZ1c2UyICYgR0VOOF9GMl9TX0VO QV9NQVNLKSA+PiBHRU44X0YyX1NfRU5BX1NISUZUOwo+ICsJc3NfZGlzYWJsZSA9IChmdXNlMiAm IEdFTjhfRjJfU1NfRElTX01BU0spID4+IEdFTjhfRjJfU1NfRElTX1NISUZUOwo+ICsKPiArCWV1 X2Rpc2FibGVbMF0gPSBJOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMCkgJiBHRU44X0VVX0RJUzBf UzBfTUFTSzsKPiArCWV1X2Rpc2FibGVbMV0gPSAoSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTAp ID4+IEdFTjhfRVVfRElTMF9TMV9TSElGVCkgfAo+ICsJCQkoKEk5MTVfUkVBRChHRU44X0VVX0RJ U0FCTEUxKSAmIEdFTjhfRVVfRElTMV9TMV9NQVNLKSA8PAo+ICsJCQnCoCgzMiAtIEdFTjhfRVVf RElTMF9TMV9TSElGVCkpOwo+ICsJZXVfZGlzYWJsZVsyXSA9IChJOTE1X1JFQUQoR0VOOF9FVV9E SVNBQkxFMSkgPj4gR0VOOF9FVV9ESVMxX1MyX1NISUZUKSB8Cj4gKwkJCSgoSTkxNV9SRUFEKEdF TjhfRVVfRElTQUJMRTIpICYgR0VOOF9FVV9ESVMyX1MyX01BU0spIDw8Cj4gKwkJCcKgKDMyIC0g R0VOOF9FVV9ESVMxX1MyX1NISUZUKSk7Cj4gKwo+ICsKPiArCWluZm8gPSAoc3RydWN0IGludGVs X2RldmljZV9pbmZvICopJmRldl9wcml2LT5pbmZvOwo+ICsJaW5mby0+c2xpY2VfdG90YWwgPSBo d2VpZ2h0MzIoc19lbmFibGUpOwo+ICsKPiArCS8qCj4gKwnCoCogVGhlIHN1YnNsaWNlIGRpc2Fi bGUgZmllbGQgaXMgZ2xvYmFsLCBpLmUuIGl0IGFwcGxpZXMKPiArCcKgKiB0byBlYWNoIG9mIHRo ZSBlbmFibGVkIHNsaWNlcy4KPiArCcKgKi8KPiArCWluZm8tPnN1YnNsaWNlX3Blcl9zbGljZSA9 IHNzX21heCAtIGh3ZWlnaHQzMihzc19kaXNhYmxlKTsKPiArCWluZm8tPnN1YnNsaWNlX3RvdGFs ID0gaW5mby0+c2xpY2VfdG90YWwgKiBpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2U7Cj4gKwo+ICsJ LyoKPiArCcKgKiBJdGVyYXRlIHRocm91Z2ggZW5hYmxlZCBzbGljZXMgYW5kIHN1YnNsaWNlcyB0 bwo+ICsJwqAqIGNvdW50IHRoZSB0b3RhbCBlbmFibGVkIEVVLgo+ICsJwqAqLwo+ICsJZm9yIChz ID0gMDsgcyA8IHNfbWF4OyBzKyspIHsKPiArCQlpZiAoIShzX2VuYWJsZSAmICgweDEgPDwgcykp KQo+ICsJCQkvKiBza2lwIGRpc2FibGVkIHNsaWNlICovCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiAr CQlmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPiArCQkJdTMyIG5fZGlzYWJsZWQ7 Cj4gKwo+ICsJCQlpZiAoc3NfZGlzYWJsZSAmICgweDEgPDwgc3MpKQo+ICsJCQkJLyogc2tpcCBk aXNhYmxlZCBzdWJzbGljZSAqLwo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQluX2Rpc2FibGVk ID0gaHdlaWdodDgoZXVfZGlzYWJsZVtzXSA+PiAoc3MgKiBldV9tYXgpKTsKPiArCj4gKwkJCS8q Cj4gKwkJCcKgKiBSZWNvcmQgd2hpY2ggc3Vic2xpY2VzIGhhdmUgNyBFVXMuCj4gKwkJCcKgKi8K PiArCQkJaWYgKGV1X21heCAtIG5fZGlzYWJsZWQgPT0gNykKPiArCQkJCWluZm8tPnN1YnNsaWNl XzdldVtzXSB8PSAxIDw8IHNzOwo+ICsKPiArCQkJaW5mby0+ZXVfdG90YWwgKz0gZXVfbWF4IC0g bl9kaXNhYmxlZDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCcKgKiBCRFcgaXMgZXhwZWN0 ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiBFVSBhY3Jvc3MKPiAr CcKgKiBzdWJzbGljZXMgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgYW55IG9uZSBFVSBpbiBhbnkg b25lIHN1YnNsaWNlIG1heQo+ICsJwqAqIGJlIGZ1c2VkIG9mZiBmb3IgZGllIHJlY292ZXJ5Lgo+ ICsJwqAqLwo+ICsJaW5mby0+ZXVfcGVyX3N1YnNsaWNlID0gaW5mby0+c3Vic2xpY2VfdG90YWwg Pwo+ICsJCURJVl9ST1VORF9VUChpbmZvLT5ldV90b3RhbCwgaW5mby0+c3Vic2xpY2VfdG90YWwp IDogMDsKPiArCj4gKwkvKgo+ICsJwqAqIEJEVyBzdXBwb3J0cyBzbGljZSBwb3dlciBnYXRpbmcg b24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbgo+ICsJwqAqIG9uZSBzbGljZS4KPiArCcKgKi8KPiAr CWluZm8tPmhhc19zbGljZV9wZyA9IChpbmZvLT5zbGljZV90b3RhbCA+IDEpOwo+ICsJaW5mby0+ aGFzX3N1YnNsaWNlX3BnID0gMDsKPiArCWluZm8tPmhhc19ldV9wZyA9IDA7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIERldGVybWluZSB2YXJpb3VzIGludGVsX2RldmljZV9pbmZvIGZpZWxkcyBhdCBy dW50aW1lLgo+ICsgKgo+ICsgKiBVc2UgaXQgd2hlbiBlaXRoZXI6Cj4gKyAqwqDCoMKgLSBpdCdz IGp1ZGdlZCB0b28gbGFib3Jpb3VzIHRvIGZpbGwgbiBzdGF0aWMgc3RydWN0dXJlcyB3aXRoIHRo ZSBsaW1pdAo+ICsgKsKgwqDCoMKgwqB3aGVuIGEgc2ltcGxlIGlmIHN0YXRlbWVudCBkb2VzIHRo ZSBqb2IsCj4gKyAqwqDCoMKgLSBydW4tdGltZSBjaGVja3MgKGVnIHJlYWQgZnVzZS9zdHJhcCBy ZWdpc3RlcnMpIGFyZSBuZWVkZWQuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8g YmUgY2FsbGVkOgo+ICsgKsKgwqDCoC0gYWZ0ZXIgdGhlIE1NSU8gaGFzIGJlZW4gc2V0dXAgYXMg d2UgYXJlIHJlYWRpbmcgcmVnaXN0ZXJzLAo+ICsgKsKgwqDCoC0gYWZ0ZXIgdGhlIFBDSCBoYXMg YmVlbiBkZXRlY3RlZCwKPiArICrCoMKgwqAtIGJlZm9yZSB0aGUgZmlyc3QgdXNhZ2Ugb2YgdGhl IGZpZWxkcyBpdCBjYW4gdHdlYWsuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpbnRlbF9kZXZpY2Vf aW5mb19ydW50aW1lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVj dCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbzsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsKPiArCWlu Zm8gPSAoc3RydWN0IGludGVsX2RldmljZV9pbmZvICopJmRldl9wcml2LT5pbmZvOwo+ICsKPiAr CS8qCj4gKwnCoCogU2t5bGFrZSBhbmQgQnJveHRvbiBjdXJyZW50bHkgZG9uJ3QgZXhwb3NlIHRo ZSB0b3Btb3N0IHBsYW5lIGFzIGl0cwo+ICsJwqAqIHVzZSBpcyBleGNsdXNpdmUgd2l0aCB0aGUg bGVnYWN5IGN1cnNvciBhbmQgd2Ugb25seSB3YW50IHRvIGV4cG9zZQo+ICsJwqAqIG9uZSBvZiB0 aG9zZSwgbm90IGJvdGguIFVudGlsIHdlIGNhbiBzYWZlbHkgZXhwb3NlIHRoZSB0b3Btb3N0IHBs YW5lCj4gKwnCoCogYXMgYSBEUk1fUExBTkVfVFlQRV9DVVJTT1Igd2l0aCBhbGwgdGhlIGZlYXR1 cmVzIGV4cG9zZWQvc3VwcG9ydGVkLAo+ICsJwqAqIHdlIGRvbid0IGV4cG9zZSB0aGUgdG9wbW9z dCBwbGFuZSBhdCBhbGwgdG8gcHJldmVudCBBQkkgYnJlYWthZ2UKPiArCcKgKiBkb3duIHRoZSBs aW5lLgo+ICsJwqAqLwo+ICsJaWYgKElTX0JST1hUT04oZGV2KSkgewo+ICsJCWluZm8tPm51bV9z cHJpdGVzW1BJUEVfQV0gPSAyOwo+ICsJCWluZm8tPm51bV9zcHJpdGVzW1BJUEVfQl0gPSAyOwo+ ICsJCWluZm8tPm51bV9zcHJpdGVzW1BJUEVfQ10gPSAxOwo+ICsJfSBlbHNlIGlmIChJU19WQUxM RVlWSUVXKGRldikgfHwgSVNfQ0hFUlJZVklFVyhkZXYpKQo+ICsJCWZvcl9lYWNoX3BpcGUoZGV2 X3ByaXYsIHBpcGUpCj4gKwkJCWluZm8tPm51bV9zcHJpdGVzW3BpcGVdID0gMjsKPiArCWVsc2UK PiArCQlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+ICsJCQlpbmZvLT5udW1fc3ByaXRl c1twaXBlXSA9IDE7Cj4gKwo+ICsJaWYgKGk5MTUuZGlzYWJsZV9kaXNwbGF5KSB7Cj4gKwkJRFJN X0lORk8oIkRpc3BsYXkgZGlzYWJsZWQgKG1vZHVsZSBwYXJhbWV0ZXIpXG4iKTsKPiArCQlpbmZv LT5udW1fcGlwZXMgPSAwOwo+ICsJfSBlbHNlIGlmIChpbmZvLT5udW1fcGlwZXMgPiAwICYmCj4g KwkJwqDCoMKgKElTX0dFTjcoZGV2X3ByaXYpIHx8IElTX0dFTjgoZGV2X3ByaXYpKSAmJgo+ICsJ CcKgwqDCoEhBU19QQ0hfU1BMSVQoZGV2KSkgewo+ICsJCXUzMiBmdXNlX3N0cmFwID0gSTkxNV9S RUFEKEZVU0VfU1RSQVApOwo+ICsJCXUzMiBzZnVzZV9zdHJhcCA9IEk5MTVfUkVBRChTRlVTRV9T VFJBUCk7Cj4gKwo+ICsJCS8qCj4gKwkJwqAqIFNGVVNFX1NUUkFQIGlzIHN1cHBvc2VkIHRvIGhh dmUgYSBiaXQgc2lnbmFsbGluZyB0aGUgZGlzcGxheQo+ICsJCcKgKiBpcyBmdXNlZCBvZmYuIFVu Zm9ydHVuYXRlbHkgaXQgc2VlbXMgdGhhdCwgYXQgbGVhc3QgaW4KPiArCQnCoCogY2VydGFpbiBj YXNlcywgZnVzZWQgb2ZmIGRpc3BsYXkgbWVhbnMgdGhhdCBQQ0ggZGlzcGxheQo+ICsJCcKgKiBy ZWFkcyBkb24ndCBsYW5kIGFueXdoZXJlLiBJbiB0aGF0IGNhc2UsIHdlIHJlYWQgMHMuCj4gKwkJ wqAqCj4gKwkJwqAqIE9uIENQVC9QUFQsIHdlIGNhbiBkZXRlY3QgdGhpcyBjYXNlIGFzIFNGVVNF X1NUUkFQX0ZVU0VfTE9DSwo+ICsJCcKgKiBzaG91bGQgYmUgc2V0IHdoZW4gdGFraW5nIG92ZXIg YWZ0ZXIgdGhlIGZpcm13YXJlLgo+ICsJCcKgKi8KPiArCQlpZiAoZnVzZV9zdHJhcCAmIElMS19J TlRFUk5BTF9ESVNQTEFZX0RJU0FCTEUgfHwKPiArCQnCoMKgwqDCoHNmdXNlX3N0cmFwICYgU0ZV U0VfU1RSQVBfRElTUExBWV9ESVNBQkxFRCB8fAo+ICsJCcKgwqDCoMKgKGRldl9wcml2LT5wY2hf dHlwZSA9PSBQQ0hfQ1BUICYmCj4gKwkJwqDCoMKgwqDCoCEoc2Z1c2Vfc3RyYXAgJiBTRlVTRV9T VFJBUF9GVVNFX0xPQ0spKSkgewo+ICsJCQlEUk1fSU5GTygiRGlzcGxheSBmdXNlZCBvZmYsIGRp c2FibGluZ1xuIik7Cj4gKwkJCWluZm8tPm51bV9waXBlcyA9IDA7Cj4gKwkJfSBlbHNlIGlmIChm dXNlX3N0cmFwICYgSVZCX1BJUEVfQ19ESVNBQkxFKSB7Cj4gKwkJCURSTV9JTkZPKCJQaXBlQyBm dXNlZCBvZmZcbiIpOwo+ICsJCQlpbmZvLT5udW1fcGlwZXMgLT0gMTsKPiArCQl9Cj4gKwl9IGVs c2UgaWYgKGluZm8tPm51bV9waXBlcyA+IDAgJiYgSVNfR0VOOShkZXZfcHJpdikpIHsKPiArCQl1 MzIgZGZzbSA9IEk5MTVfUkVBRChTS0xfREZTTSk7Cj4gKwkJdTggZGlzYWJsZWRfbWFzayA9IDA7 Cj4gKwkJYm9vbCBpbnZhbGlkOwo+ICsJCWludCBudW1fYml0czsKPiArCj4gKwkJaWYgKGRmc20g JiBTS0xfREZTTV9QSVBFX0FfRElTQUJMRSkKPiArCQkJZGlzYWJsZWRfbWFzayB8PSBCSVQoUElQ RV9BKTsKPiArCQlpZiAoZGZzbSAmIFNLTF9ERlNNX1BJUEVfQl9ESVNBQkxFKQo+ICsJCQlkaXNh YmxlZF9tYXNrIHw9IEJJVChQSVBFX0IpOwo+ICsJCWlmIChkZnNtICYgU0tMX0RGU01fUElQRV9D X0RJU0FCTEUpCj4gKwkJCWRpc2FibGVkX21hc2sgfD0gQklUKFBJUEVfQyk7Cj4gKwo+ICsJCW51 bV9iaXRzID0gaHdlaWdodDgoZGlzYWJsZWRfbWFzayk7Cj4gKwo+ICsJCXN3aXRjaCAoZGlzYWJs ZWRfbWFzaykgewo+ICsJCWNhc2UgQklUKFBJUEVfQSk6Cj4gKwkJY2FzZSBCSVQoUElQRV9CKToK PiArCQljYXNlIEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQik6Cj4gKwkJY2FzZSBCSVQoUElQRV9B KSB8IEJJVChQSVBFX0MpOgo+ICsJCQlpbnZhbGlkID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJ ZGVmYXVsdDoKPiArCQkJaW52YWxpZCA9IGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJaWYgKG51bV9i aXRzID4gaW5mby0+bnVtX3BpcGVzIHx8IGludmFsaWQpCj4gKwkJCURSTV9FUlJPUigiaW52YWxp ZCBwaXBlIGZ1c2UgY29uZmlndXJhdGlvbjogMHgleFxuIiwKPiArCQkJCcKgwqBkaXNhYmxlZF9t YXNrKTsKPiArCQllbHNlCj4gKwkJCWluZm8tPm51bV9waXBlcyAtPSBudW1fYml0czsKPiArCX0K PiArCj4gKwkvKiBJbml0aWFsaXplIHNsaWNlL3N1YnNsaWNlL0VVIGluZm8gKi8KPiArCWlmIChJ U19DSEVSUllWSUVXKGRldikpCj4gKwkJY2hlcnJ5dmlld19zc2V1X2luZm9faW5pdChkZXYpOwo+ ICsJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikpCj4gKwkJYnJvYWR3ZWxsX3NzZXVfaW5mb19p bml0KGRldik7Cj4gKwllbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KQo+ICsJCWdl bjlfc3NldV9pbmZvX2luaXQoZGV2KTsKPiArCj4gKwlpbmZvLT5oYXNfc25vb3AgPSAhaW5mby0+ aGFzX2xsYzsKPiArCj4gKwkvKiBTbm9vcGluZyBpcyBicm9rZW4gb24gQlhUIEEgc3RlcHBpbmcu ICovCj4gKwlpZiAoSVNfQlhUX1JFVklEKGRldiwgMCwgQlhUX1JFVklEX0ExKSkKPiArCQlpbmZv LT5oYXNfc25vb3AgPSBmYWxzZTsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJzbGljZSB0b3Rh bDogJXVcbiIsIGluZm8tPnNsaWNlX3RvdGFsKTsKPiArCURSTV9ERUJVR19EUklWRVIoInN1YnNs aWNlIHRvdGFsOiAldVxuIiwgaW5mby0+c3Vic2xpY2VfdG90YWwpOwo+ICsJRFJNX0RFQlVHX0RS SVZFUigic3Vic2xpY2UgcGVyIHNsaWNlOiAldVxuIiwgaW5mby0+c3Vic2xpY2VfcGVyX3NsaWNl KTsKPiArCURSTV9ERUJVR19EUklWRVIoIkVVIHRvdGFsOiAldVxuIiwgaW5mby0+ZXVfdG90YWwp Owo+ICsJRFJNX0RFQlVHX0RSSVZFUigiRVUgcGVyIHN1YnNsaWNlOiAldVxuIiwgaW5mby0+ZXVf cGVyX3N1YnNsaWNlKTsKPiArCURSTV9ERUJVR19EUklWRVIoImhhcyBzbGljZSBwb3dlciBnYXRp bmc6ICVzXG4iLAo+ICsJCQnCoGluZm8tPmhhc19zbGljZV9wZyA/ICJ5IiA6ICJuIik7Cj4gKwlE Uk1fREVCVUdfRFJJVkVSKCJoYXMgc3Vic2xpY2UgcG93ZXIgZ2F0aW5nOiAlc1xuIiwKPiArCQkJ wqBpbmZvLT5oYXNfc3Vic2xpY2VfcGcgPyAieSIgOiAibiIpOwo+ICsJRFJNX0RFQlVHX0RSSVZF UigiaGFzIEVVIHBvd2VyIGdhdGluZzogJXNcbiIsCj4gKwkJCcKgaW5mby0+aGFzX2V1X3BnID8g InkiIDogIm4iKTsKPiArCj4gKwlpOTE1LmVuYWJsZV9leGVjbGlzdHMgPQo+ICsJCWludGVsX3Nh bml0aXplX2VuYWJsZV9leGVjbGlzdHMoZGV2X3ByaXYsCj4gKwkJCQkJwqDCoMKgwqDCoMKgwqAJ aTkxNS5lbmFibGVfZXhlY2xpc3RzKTsKPiArCj4gKwkvKgo+ICsJwqAqIGk5MTUuZW5hYmxlX3Bw Z3R0IGlzIHJlYWQtb25seSwgc28gZG8gYW4gZWFybHkgcGFzcyB0byB2YWxpZGF0ZSB0aGUKPiAr CcKgKiB1c2VyJ3MgcmVxdWVzdGVkIHN0YXRlIGFnYWluc3QgdGhlIGhhcmR3YXJlL2RyaXZlciBj YXBhYmlsaXRpZXMuwqDCoFdlCj4gKwnCoCogZG8gdGhpcyBub3cgc28gdGhhdCB3ZSBjYW4gcHJp bnQgb3V0IGFueSBsb2cgbWVzc2FnZXMgb25jZSByYXRoZXIKPiArCcKgKiB0aGFuIGV2ZXJ5IHRp bWUgd2UgY2hlY2sgaW50ZWxfZW5hYmxlX3BwZ3R0KCkuCj4gKwnCoCovCj4gKwlpOTE1LmVuYWJs ZV9wcGd0dCA9Cj4gKwkJaW50ZWxfc2FuaXRpemVfZW5hYmxlX3BwZ3R0KGRldl9wcml2LCBpOTE1 LmVuYWJsZV9wcGd0dCk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJwcGd0dCBtb2RlOiAlaVxuIiwg aTkxNS5lbmFibGVfcHBndHQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbnRlbF9pbml0X2Rw aW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwkvKgo+ICsJwqAq IElPU0ZfUE9SVF9EUElPIGlzIHVzZWQgZm9yIFZMViB4MiBQSFkgKERQL0hETUkgQiBhbmQgQyks Cj4gKwnCoCogQ0hWIHgxIFBIWSAoRFAvSERNSSBEKQo+ICsJwqAqIElPU0ZfUE9SVF9EUElPXzIg aXMgdXNlZCBmb3IgQ0hWIHgyIFBIWSAoRFAvSERNSSBCIGFuZCBDKQo+ICsJwqAqLwo+ICsJaWYg KElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gKwkJRFBJT19QSFlfSU9TRl9QT1JUKERQSU9f UEhZMCkgPSBJT1NGX1BPUlRfRFBJT18yOwo+ICsJCURQSU9fUEhZX0lPU0ZfUE9SVChEUElPX1BI WTEpID0gSU9TRl9QT1JUX0RQSU87Cj4gKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3By aXYpKSB7Cj4gKwkJRFBJT19QSFlfSU9TRl9QT1JUKERQSU9fUEhZMCkgPSBJT1NGX1BPUlRfRFBJ TzsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X3dvcmtxdWV1ZXNfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCS8qCj4gKwnCoCogVGhlIGk5 MTUgd29ya3F1ZXVlIGlzIHByaW1hcmlseSB1c2VkIGZvciBiYXRjaGVkIHJldGlyZW1lbnQgb2YK PiArCcKgKiByZXF1ZXN0cyAoYW5kIHRodXMgbWFuYWdpbmcgYm8pIG9uY2UgdGhlIHRhc2sgaGFz IGJlZW4gY29tcGxldGVkCj4gKwnCoCogYnkgdGhlIEdQVS4gaTkxNV9nZW1fcmV0aXJlX3JlcXVl c3RzKCkgaXMgY2FsbGVkIGRpcmVjdGx5IHdoZW4gd2UKPiArCcKgKiBuZWVkIGhpZ2gtcHJpb3Jp dHkgcmV0aXJlbWVudCwgc3VjaCBhcyB3YWl0aW5nIGZvciBhbiBleHBsaWNpdAo+ICsJwqAqIGJv Lgo+ICsJwqAqCj4gKwnCoCogSXQgaXMgYWxzbyB1c2VkIGZvciBwZXJpb2RpYyBsb3ctcHJpb3Jp dHkgZXZlbnRzLCBzdWNoIGFzCj4gKwnCoCogaWRsZS10aW1lcnMgYW5kIHJlY29yZGluZyBlcnJv ciBzdGF0ZS4KPiArCcKgKgo+ICsJwqAqIEFsbCB0YXNrcyBvbiB0aGUgd29ya3F1ZXVlIGFyZSBl eHBlY3RlZCB0byBhY3F1aXJlIHRoZSBkZXYgbXV0ZXgKPiArCcKgKiBzbyB0aGVyZSBpcyBubyBw b2ludCBpbiBydW5uaW5nIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YgdGhlCj4gKwnCoCogd29y a3F1ZXVlIGF0IGFueSB0aW1lLsKgwqBVc2UgYW4gb3JkZXJlZCBvbmUuCj4gKwnCoCovCj4gKwlk ZXZfcHJpdi0+d3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgiaTkxNSIsIDApOwo+ICsJaWYg KGRldl9wcml2LT53cSA9PSBOVUxMKQo+ICsJCWdvdG8gb3V0X2VycjsKPiArCj4gKwlkZXZfcHJp di0+aG90cGx1Zy5kcF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJpOTE1LWRwIiwgMCk7 Cj4gKwlpZiAoZGV2X3ByaXYtPmhvdHBsdWcuZHBfd3EgPT0gTlVMTCkKPiArCQlnb3RvIG91dF9m cmVlX3dxOwo+ICsKPiArCWRldl9wcml2LT5ncHVfZXJyb3IuaGFuZ2NoZWNrX3dxID0KPiArCQlh bGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgiaTkxNS1oYW5nY2hlY2siLCAwKTsKPiArCWlmIChkZXZf cHJpdi0+Z3B1X2Vycm9yLmhhbmdjaGVja193cSA9PSBOVUxMKQo+ICsJCWdvdG8gb3V0X2ZyZWVf ZHBfd3E7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfZnJlZV9kcF93cToKPiArCWRlc3Ry b3lfd29ya3F1ZXVlKGRldl9wcml2LT5ob3RwbHVnLmRwX3dxKTsKPiArb3V0X2ZyZWVfd3E6Cj4g KwlkZXN0cm95X3dvcmtxdWV1ZShkZXZfcHJpdi0+d3EpOwo+ICtvdXRfZXJyOgo+ICsJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlcy5cbiIpOwo+ICsKPiArCXJldHVybiAt RU5PTUVNOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X3dvcmtxdWV1ZXNfY2xlYW51cChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWRlc3Ryb3lfd29ya3F1 ZXVlKGRldl9wcml2LT5ncHVfZXJyb3IuaGFuZ2NoZWNrX3dxKTsKPiArCWRlc3Ryb3lfd29ya3F1 ZXVlKGRldl9wcml2LT5ob3RwbHVnLmRwX3dxKTsKPiArCWRlc3Ryb3lfd29ya3F1ZXVlKGRldl9w cml2LT53cSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5IC0g c2V0dXAgc3RhdGUgbm90IHJlcXVpcmluZyBkZXZpY2UgYWNjZXNzCj4gKyAqIEBkZXZfcHJpdjog ZGV2aWNlIHByaXZhdGUKPiArICoKPiArICogSW5pdGlhbGl6ZSBldmVyeXRoaW5nIHRoYXQgaXMg YSAiU1ctb25seSIgc3RhdGUsIHRoYXQgaXMgc3RhdGUgbm90Cj4gKyAqIHJlcXVpcmluZyBhY2Nl c3NpbmcgdGhlIGRldmljZSBvciBleHBvc2luZyB0aGUgZHJpdmVyIHZpYSBrZXJuZWwgaW50ZXJu YWwKPiArICogb3IgdXNlcnNwYWNlIGludGVyZmFjZXMuIEV4YW1wbGUgc3RlcHMgYmVsb25naW5n IGhlcmU6IGxvY2sgaW5pdGlhbGl6YXRpb24sCj4gKyAqIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlv biwgc2V0dGluZyB1cCBkZXZpY2Ugc3BlY2lmaWMgYXR0cmlidXRlcyBhbmQKPiArICogZnVuY3Rp b24gaG9va3Mgbm90IHJlcXVpcmluZyBhY2Nlc3NpbmcgdGhlIGRldmljZS4KPiArICovCj4gK3N0 YXRpYyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gKwkJCQnCoMKgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKPiAr ewo+ICsJY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvICptYXRjaF9pbmZvID0KPiArCQko c3RydWN0IGludGVsX2RldmljZV9pbmZvICopZW50LT5kcml2ZXJfZGF0YTsKPiArCXN0cnVjdCBp bnRlbF9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm87Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlp ZiAoaTkxNV9pbmplY3RfbG9hZF9mYWlsdXJlKCkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ ICsJLyogU2V0dXAgdGhlIHdyaXRlLW9uY2UgImNvbnN0YW50IiBkZXZpY2UgaW5mbyAqLwo+ICsJ ZGV2aWNlX2luZm8gPSAoc3RydWN0IGludGVsX2RldmljZV9pbmZvICopJmRldl9wcml2LT5pbmZv Owo+ICsJbWVtY3B5KGRldmljZV9pbmZvLCBtYXRjaF9pbmZvLCBzaXplb2YoKmRldmljZV9pbmZv KSk7Cj4gKwlkZXZpY2VfaW5mby0+ZGV2aWNlX2lkID0gZGV2X3ByaXYtPmRybS5wZGV2LT5kZXZp Y2U7Cj4gKwo+ICsJQlVHX09OKGRldmljZV9pbmZvLT5nZW4gPiBzaXplb2YoZGV2aWNlX2luZm8t Pmdlbl9tYXNrKSAqIEJJVFNfUEVSX0JZVEUpOwo+ICsJZGV2aWNlX2luZm8tPmdlbl9tYXNrID0g QklUKGRldmljZV9pbmZvLT5nZW4gLSAxKTsKPiArCj4gKwlzcGluX2xvY2tfaW5pdCgmZGV2X3By aXYtPmlycV9sb2NrKTsKPiArCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Z3B1X2Vycm9yLmxv Y2spOwo+ICsJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmJhY2tsaWdodF9sb2NrKTsKPiArCXNwaW5f bG9ja19pbml0KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+ICsJc3Bpbl9sb2NrX2luaXQoJmRl dl9wcml2LT5tbS5vYmplY3Rfc3RhdF9sb2NrKTsKPiArCXNwaW5fbG9ja19pbml0KCZkZXZfcHJp di0+bW1pb19mbGlwX2xvY2spOwo+ICsJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnNiX2xvY2spOwo+ ICsJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPm1vZGVzZXRfcmVzdG9yZV9sb2NrKTsKPiArCW11dGV4 X2luaXQoJmRldl9wcml2LT5hdl9tdXRleCk7Cj4gKwltdXRleF9pbml0KCZkZXZfcHJpdi0+d20u d21fbXV0ZXgpOwo+ICsJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gKwo+ICsJ cmV0ID0gaTkxNV93b3JrcXVldWVzX2luaXQoZGV2X3ByaXYpOwo+ICsJaWYgKHJldCA8IDApCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkg Y2FsbHMgdG8gSEFTX1BDSF8qICovCj4gKwlpbnRlbF9kZXRlY3RfcGNoKCZkZXZfcHJpdi0+ZHJt KTsKPiArCj4gKwlpbnRlbF9wbV9zZXR1cCgmZGV2X3ByaXYtPmRybSk7Cj4gKwlpbnRlbF9pbml0 X2RwaW8oZGV2X3ByaXYpOwo+ICsJaW50ZWxfcG93ZXJfZG9tYWluc19pbml0KGRldl9wcml2KTsK PiArCWludGVsX2lycV9pbml0KGRldl9wcml2KTsKPiArCWludGVsX2luaXRfZGlzcGxheV9ob29r cyhkZXZfcHJpdik7Cj4gKwlpbnRlbF9pbml0X2Nsb2NrX2dhdGluZ19ob29rcyhkZXZfcHJpdik7 Cj4gKwlpbnRlbF9pbml0X2F1ZGlvX2hvb2tzKGRldl9wcml2KTsKPiArCWk5MTVfZ2VtX2xvYWRf aW5pdCgmZGV2X3ByaXYtPmRybSk7Cj4gKwo+ICsJaW50ZWxfZGlzcGxheV9jcmNfaW5pdCgmZGV2 X3ByaXYtPmRybSk7Cj4gKwo+ICsJaTkxNV9kdW1wX2RldmljZV9pbmZvKGRldl9wcml2KTsKPiAr Cj4gKwkvKiBOb3QgYWxsIHByZS1wcm9kdWN0aW9uIG1hY2hpbmVzIGZhbGwgaW50byB0aGlzIGNh dGVnb3J5LCBvbmx5IHRoZQo+ICsJwqAqIHZlcnkgZmlyc3Qgb25lcy4gQWxtb3N0IGV2ZXJ5dGhp bmcgc2hvdWxkIHdvcmssIGV4Y2VwdCBmb3IgbWF5YmUKPiArCcKgKiBzdXNwZW5kL3Jlc3VtZS4g QW5kIHdlIGRvbid0IGltcGxlbWVudCB3b3JrYXJvdW5kcyB0aGF0IGFmZmVjdCBvbmx5Cj4gKwnC oCogcHJlLXByb2R1Y3Rpb24gbWFjaGluZXMuICovCj4gKwlpZiAoSVNfSFNXX0VBUkxZX1NEVihk ZXZfcHJpdikpCj4gKwkJRFJNX0lORk8oIlRoaXMgaXMgYW4gZWFybHkgcHJlLXByb2R1Y3Rpb24g SGFzd2VsbCBtYWNoaW5lLiAiCj4gKwkJCcKgIkl0IG1heSBub3QgYmUgZnVsbHkgZnVuY3Rpb25h bC5cbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTkxNV9kcml2 ZXJfY2xlYW51cF9lYXJseSAtIGNsZWFudXAgdGhlIHNldHVwIGRvbmUgaW4gaTkxNV9kcml2ZXJf aW5pdF9lYXJseSgpCj4gKyAqIEBkZXZfcHJpdjogZGV2aWNlIHByaXZhdGUKPiArICovCj4gK3N0 YXRpYyB2b2lkIGk5MTVfZHJpdmVyX2NsZWFudXBfZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpOTE1X2dlbV9sb2FkX2NsZWFudXAoZGV2X3ByaXYtPmRl dik7Cj4gKwlpOTE1X3dvcmtxdWV1ZXNfY2xlYW51cChkZXZfcHJpdik7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgaTkxNV9tbWlvX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCWlu dCBtbWlvX2JhcjsKPiArCWludCBtbWlvX3NpemU7Cj4gKwo+ICsJbW1pb19iYXIgPSBJU19HRU4y KGRldikgPyAxIDogMDsKPiArCS8qCj4gKwnCoCogQmVmb3JlIGdlbjQsIHRoZSByZWdpc3RlcnMg YW5kIHRoZSBHVFQgYXJlIGJlaGluZCBkaWZmZXJlbnQgQkFScy4KPiArCcKgKiBIb3dldmVyLCBm cm9tIGdlbjQgb253YXJkcywgdGhlIHJlZ2lzdGVycyBhbmQgdGhlIEdUVCBhcmUgc2hhcmVkCj4g KwnCoCogaW4gdGhlIHNhbWUgQkFSLCBzbyB3ZSB3YW50IHRvIHJlc3RyaWN0IHRoaXMgaW9yZW1h cCBmcm9tCj4gKwnCoCogY2xvYmJlcmluZyB0aGUgR1RUIHdoaWNoIHdlIHdhbnQgaW9yZW1hcF93 YyBpbnN0ZWFkLiBGb3J0dW5hdGVseSwKPiArCcKgKiB0aGUgcmVnaXN0ZXIgQkFSIHJlbWFpbnMg dGhlIHNhbWUgc2l6ZSBmb3IgYWxsIHRoZSBlYXJsaWVyCj4gKwnCoCogZ2VuZXJhdGlvbnMgdXAg dG8gSXJvbmxha2UuCj4gKwnCoCovCj4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA1KQo+ ICsJCW1taW9fc2l6ZSA9IDUxMiAqIDEwMjQ7Cj4gKwllbHNlCj4gKwkJbW1pb19zaXplID0gMiAq IDEwMjQgKiAxMDI0Owo+ICsJZGV2X3ByaXYtPnJlZ3MgPSBwY2lfaW9tYXAoZGV2LT5wZGV2LCBt bWlvX2JhciwgbW1pb19zaXplKTsKPiArCWlmIChkZXZfcHJpdi0+cmVncyA9PSBOVUxMKSB7Cj4g KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIHJlZ2lzdGVyc1xuIik7Cj4gKwo+ICsJCXJldHVy biAtRUlPOwo+ICsJfQo+ICsKPiArCS8qIFRyeSB0byBtYWtlIHN1cmUgTUNIQkFSIGlzIGVuYWJs ZWQgYmVmb3JlIHBva2luZyBhdCBpdCAqLwo+ICsJaW50ZWxfc2V0dXBfbWNoYmFyKGRldik7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5MTVfbW1pb19jbGVhbnVw KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCj4gKwlpbnRlbF90ZWFyZG93bl9tY2hiYXIo ZGV2KTsKPiArCXBjaV9pb3VubWFwKGRldi0+cGRldiwgZGV2X3ByaXYtPnJlZ3MpOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogaTkxNV9kcml2ZXJfaW5pdF9tbWlvIC0gc2V0dXAgZGV2aWNlIE1NSU8K PiArICogQGRldl9wcml2OiBkZXZpY2UgcHJpdmF0ZQo+ICsgKgo+ICsgKiBTZXR1cCBtaW5pbWFs IGRldmljZSBzdGF0ZSBuZWNlc3NhcnkgZm9yIE1NSU8gYWNjZXNzZXMgbGF0ZXIgaW4gdGhlCj4g KyAqIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBUaGUgc2V0dXAgaGVyZSBzaG91bGQgYXZvaWQg YW55IG90aGVyIGRldmljZS13aWRlCj4gKyAqIHNpZGUgZWZmZWN0cyBvciBleHBvc2luZyB0aGUg ZHJpdmVyIHZpYSBrZXJuZWwgaW50ZXJuYWwgb3IgdXNlciBzcGFjZQo+ICsgKiBpbnRlcmZhY2Vz Lgo+ICsgKi8KPiArc3RhdGljIGludCBpOTE1X2RyaXZlcl9pbml0X21taW8oc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g ZGV2X3ByaXYtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGk5MTVfaW5qZWN0X2xvYWRf ZmFpbHVyZSgpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmIChpOTE1X2dldF9icmlk Z2VfZGV2KGRldikpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJcmV0ID0gaTkxNV9tbWlvX3Nl dHVwKGRldik7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIHB1dF9icmlkZ2U7Cj4gKwo+ICsJ aW50ZWxfdW5jb3JlX2luaXQoZGV2X3ByaXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArcHV0 X2JyaWRnZToKPiArCXBjaV9kZXZfcHV0KGRldl9wcml2LT5icmlkZ2VfZGV2KTsKPiArCj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogaTkxNV9kcml2ZXJfY2xlYW51cF9tbWlv IC0gY2xlYW51cCB0aGUgc2V0dXAgZG9uZSBpbiBpOTE1X2RyaXZlcl9pbml0X21taW8oKQo+ICsg KiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRlCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpOTE1X2Ry aXZlcl9jbGVhbnVwX21taW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKPiArCj4gKwlpbnRl bF91bmNvcmVfZmluaShkZXZfcHJpdik7Cj4gKwlpOTE1X21taW9fY2xlYW51cChkZXYpOwo+ICsJ cGNpX2Rldl9wdXQoZGV2X3ByaXYtPmJyaWRnZV9kZXYpOwo+ICt9Cj4gKwo+ICsvKioKPiArICog aTkxNV9kcml2ZXJfaW5pdF9odyAtIHNldHVwIHN0YXRlIHJlcXVpcmluZyBkZXZpY2UgYWNjZXNz Cj4gKyAqIEBkZXZfcHJpdjogZGV2aWNlIHByaXZhdGUKPiArICoKPiArICogU2V0dXAgc3RhdGUg dGhhdCByZXF1aXJlcyBhY2Nlc3NpbmcgdGhlIGRldmljZSwgYnV0IGRvZXNuJ3QgcmVxdWlyZQo+ ICsgKiBleHBvc2luZyB0aGUgZHJpdmVyIHZpYSBrZXJuZWwgaW50ZXJuYWwgb3IgdXNlcnNwYWNl IGludGVyZmFjZXMuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKPiArCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmZGV2 X3ByaXYtPmdndHQ7Cj4gKwl1aW50MzJfdCBhcGVydHVyZV9zaXplOwo+ICsJaW50IHJldDsKPiAr Cj4gKwlpZiAoaTkxNV9pbmplY3RfbG9hZF9mYWlsdXJlKCkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7 Cj4gKwo+ICsJaW50ZWxfZGV2aWNlX2luZm9fcnVudGltZV9pbml0KGRldik7Cj4gKwo+ICsJcmV0 ID0gaTkxNV9nZ3R0X2luaXRfaHcoZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsK PiArCj4gKwlyZXQgPSBpOTE1X2dndHRfZW5hYmxlX2h3KGRldik7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIEdHVFRcbiIpOwo+ICsJCWdvdG8gb3V0X2dn dHQ7Cj4gKwl9Cj4gKwo+ICsJLyogV0FSTklORzogQXBwYXJlbnRseSB3ZSBtdXN0IGtpY2sgZmJk ZXYgZHJpdmVycyBiZWZvcmUgdmdhY29uLAo+ICsJwqAqIG90aGVyd2lzZSB0aGUgdmdhIGZiZGV2 IGRyaXZlciBmYWxscyBvdmVyLiAqLwo+ICsJcmV0ID0gaTkxNV9raWNrX291dF9maXJtd2FyZV9m YihkZXZfcHJpdik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVt b3ZlIGNvbmZsaWN0aW5nIGZyYW1lYnVmZmVyIGRyaXZlcnNcbiIpOwo+ICsJCWdvdG8gb3V0X2dn dHQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaTkxNV9raWNrX291dF92Z2Fjb24oZGV2X3ByaXYpOwo+ ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlbW92ZSBjb25mbGljdGlu ZyBWR0EgY29uc29sZVxuIik7Cj4gKwkJZ290byBvdXRfZ2d0dDsKPiArCX0KPiArCj4gKwlwY2lf c2V0X21hc3RlcihkZXYtPnBkZXYpOwo+ICsKPiArCS8qIG92ZXJsYXkgb24gZ2VuMiBpcyBicm9r ZW4gYW5kIGNhbid0IGFkZHJlc3MgYWJvdmUgMUcgKi8KPiArCWlmIChJU19HRU4yKGRldikpIHsK PiArCQlyZXQgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soJmRldi0+cGRldi0+ZGV2LCBETUFfQklU X01BU0soMzApKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNl dCBETUEgbWFza1xuIik7Cj4gKwo+ICsJCQlnb3RvIG91dF9nZ3R0Owo+ICsJCX0KPiArCX0KPiAr Cj4gKwo+ICsJLyogOTY1R00gc29tZXRpbWVzIGluY29ycmVjdGx5IHdyaXRlcyB0byBoYXJkd2Fy ZSBzdGF0dXMgcGFnZSAoSFdTKQo+ICsJwqAqIHVzaW5nIDMyYml0IGFkZHJlc3NpbmcsIG92ZXJ3 cml0aW5nIG1lbW9yeSBpZiBIV1MgaXMgbG9jYXRlZAo+ICsJwqAqIGFib3ZlIDRHQi4KPiArCcKg Kgo+ICsJwqAqIFRoZSBkb2N1bWVudGF0aW9uIGFsc28gbWVudGlvbnMgYW4gaXNzdWUgd2l0aCB1 bmRlZmluZWQKPiArCcKgKiBiZWhhdmlvdXIgaWYgYW55IGdlbmVyYWwgc3RhdGUgaXMgYWNjZXNz ZWQgd2l0aGluIGEgcGFnZSBhYm92ZSA0R0IsCj4gKwnCoCogd2hpY2ggYWxzbyBuZWVkcyB0byBi ZSBoYW5kbGVkIGNhcmVmdWxseS4KPiArCcKgKi8KPiArCWlmIChJU19CUk9BRFdBVEVSKGRldikg fHwgSVNfQ1JFU1RMSU5FKGRldikpIHsKPiArCQlyZXQgPSBkbWFfc2V0X2NvaGVyZW50X21hc2so JmRldi0+cGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKPiArCj4gKwkJaWYgKHJldCkgewo+ ICsJCQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQgRE1BIG1hc2tcbiIpOwo+ICsKPiArCQkJZ290 byBvdXRfZ2d0dDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJYXBlcnR1cmVfc2l6ZSA9IGdndHQtPm1h cHBhYmxlX2VuZDsKPiArCj4gKwlnZ3R0LT5tYXBwYWJsZSA9Cj4gKwkJaW9fbWFwcGluZ19jcmVh dGVfd2MoZ2d0dC0+bWFwcGFibGVfYmFzZSwKPiArCQkJCcKgwqDCoMKgwqBhcGVydHVyZV9zaXpl KTsKPiArCWlmICghZ2d0dC0+bWFwcGFibGUpIHsKPiArCQlyZXQgPSAtRUlPOwo+ICsJCWdvdG8g b3V0X2dndHQ7Cj4gKwl9Cj4gKwo+ICsJZ2d0dC0+bXRyciA9IGFyY2hfcGh5c193Y19hZGQoZ2d0 dC0+bWFwcGFibGVfYmFzZSwKPiArCQkJCQnCoMKgwqDCoMKgwqBhcGVydHVyZV9zaXplKTsKPiAr Cj4gKwlwbV9xb3NfYWRkX3JlcXVlc3QoJmRldl9wcml2LT5wbV9xb3MsIFBNX1FPU19DUFVfRE1B X0xBVEVOQ1ksCj4gKwkJCcKgwqDCoFBNX1FPU19ERUZBVUxUX1ZBTFVFKTsKPiArCj4gKwlpbnRl bF91bmNvcmVfc2FuaXRpemUoZGV2X3ByaXYpOwo+ICsKPiArCWludGVsX29wcmVnaW9uX3NldHVw KGRldl9wcml2KTsKPiArCj4gKwlpOTE1X2dlbV9sb2FkX2luaXRfZmVuY2VzKGRldl9wcml2KTsK PiArCj4gKwkvKiBPbiB0aGUgOTQ1Ry9HTSwgdGhlIGNoaXBzZXQgcmVwb3J0cyB0aGUgTVNJIGNh cGFiaWxpdHkgb24gdGhlCj4gKwnCoCogaW50ZWdyYXRlZCBncmFwaGljcyBldmVuIHRob3VnaCB0 aGUgc3VwcG9ydCBpc24ndCBhY3R1YWxseSB0aGVyZQo+ICsJwqAqIGFjY29yZGluZyB0byB0aGUg cHVibGlzaGVkIHNwZWNzLsKgwqBJdCBkb2Vzbid0IGFwcGVhciB0byBmdW5jdGlvbgo+ICsJwqAq IGNvcnJlY3RseSBpbiB0ZXN0aW5nIG9uIDk0NUcuCj4gKwnCoCogVGhpcyBtYXkgYmUgYSBzaWRl IGVmZmVjdCBvZiBNU0kgaGF2aW5nIGJlZW4gbWFkZSBhdmFpbGFibGUgZm9yIFBFRwo+ICsJwqAq IGFuZCB0aGUgcmVnaXN0ZXJzIGJlaW5nIGNsb3NlbHkgYXNzb2NpYXRlZC4KPiArCcKgKgo+ICsJ wqAqIEFjY29yZGluZyB0byBjaGlwc2V0IGVycmF0YSwgb24gdGhlIDk2NUdNLCBNU0kgaW50ZXJy dXB0cyBtYXkKPiArCcKgKiBiZSBsb3N0IG9yIGRlbGF5ZWQsIGJ1dCB3ZSB1c2UgdGhlbSBhbnl3 YXlzIHRvIGF2b2lkCj4gKwnCoCogc3R1Y2sgaW50ZXJydXB0cyBvbiBzb21lIG1hY2hpbmVzLgo+ ICsJwqAqLwo+ICsJaWYgKCFJU19JOTQ1RyhkZXYpICYmICFJU19JOTQ1R00oZGV2KSkgewo+ICsJ CWlmIChwY2lfZW5hYmxlX21zaShkZXYtPnBkZXYpIDwgMCkKPiArCQkJRFJNX0RFQlVHX0RSSVZF UigiY2FuJ3QgZW5hYmxlIE1TSSIpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArb3V0 X2dndHQ6Cj4gKwlpOTE1X2dndHRfY2xlYW51cF9odyhkZXYpOwo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpOTE1X2RyaXZlcl9jbGVhbnVwX2h3IC0gY2xlYW51cCB0 aGUgc2V0dXAgZG9uZSBpbiBpOTE1X2RyaXZlcl9pbml0X2h3KCkKPiArICogQGRldl9wcml2OiBk ZXZpY2UgcHJpdmF0ZQo+ICsgKi8KPiArc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfY2xlYW51cF9o dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2Owo+ICsJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9 ICZkZXZfcHJpdi0+Z2d0dDsKPiArCj4gKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKPiAr CQlwY2lfZGlzYWJsZV9tc2koZGV2LT5wZGV2KTsKPiArCj4gKwlwbV9xb3NfcmVtb3ZlX3JlcXVl c3QoJmRldl9wcml2LT5wbV9xb3MpOwo+ICsJYXJjaF9waHlzX3djX2RlbChnZ3R0LT5tdHJyKTsK PiArCWlvX21hcHBpbmdfZnJlZShnZ3R0LT5tYXBwYWJsZSk7Cj4gKwlpOTE1X2dndHRfY2xlYW51 cF9odyhkZXYpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTkxNV9kcml2ZXJfcmVnaXN0ZXIgLSBy ZWdpc3RlciB0aGUgZHJpdmVyIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbQo+ICsgKiBAZGV2 X3ByaXY6IGRldmljZSBwcml2YXRlCj4gKyAqCj4gKyAqIFBlcmZvcm0gYW55IHN0ZXBzIG5lY2Vz c2FyeSB0byBtYWtlIHRoZSBkcml2ZXIgYXZhaWxhYmxlIHZpYSBrZXJuZWwKPiArICogaW50ZXJu YWwgb3IgdXNlcnNwYWNlIGludGVyZmFjZXMuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpOTE1X2Ry aXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2Owo+ICsKPiArCWk5MTVfZ2Vt X3Nocmlua2VyX2luaXQoZGV2X3ByaXYpOwo+IMKgCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50 ZWxfZGV2aWNlX2luZm8gaW50ZWxfYnJveHRvbl9pbmZvID0gewo+IC0JLmlzX3ByZWxpbWluYXJ5 ID0gMSwKPiAtCS5pc19icm94dG9uID0gMSwKPiAtCS5nZW4gPSA5LAo+IC0JLm5lZWRfZ2Z4X2h3 cyA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCj4gLQkucmluZ19tYXNrID0gUkVOREVSX1JJTkcgfCBC U0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORywKPiAtCS5udW1fcGlwZXMgPSAzLAo+IC0J Lmhhc19kZGkgPSAxLAo+IC0JLmhhc19mcGdhX2RiZyA9IDEsCj4gLQkuaGFzX2ZiYyA9IDEsCj4g LQlHRU5fREVGQVVMVF9QSVBFT0ZGU0VUUywKPiAtCUlWQl9DVVJTT1JfT0ZGU0VUUywKPiAtCUJE V19DT0xPUlMsCj4gLX07Cj4gKwkvKgo+ICsJwqAqIE5vdGlmeSBhIHZhbGlkIHN1cmZhY2UgYWZ0 ZXIgbW9kZXNldHRpbmcsCj4gKwnCoCogd2hlbiBydW5uaW5nIGluc2lkZSBhIFZNLgo+ICsJwqAq Lwo+ICsJaWYgKGludGVsX3ZncHVfYWN0aXZlKGRldl9wcml2KSkKPiArCQlJOTE1X1dSSVRFKHZn dGlmX3JlZyhkaXNwbGF5X3JlYWR5KSwgVkdUX0RSVl9ESVNQTEFZX1JFQURZKTsKPiArCj4gKwkv KiBSZXZlYWwgb3VyIHByZXNlbmNlIHRvIHVzZXJzcGFjZSAqLwo+ICsJaWYgKGRybV9kZXZfcmVn aXN0ZXIoZGV2LCAwKSA9PSAwKSB7Cj4gKwkJaTkxNV9kZWJ1Z2ZzX3JlZ2lzdGVyKGRldl9wcml2 KTsKPiArCQlpOTE1X3NldHVwX3N5c2ZzKGRldik7Cj4gKwkJaW50ZWxfbW9kZXNldF9yZWdpc3Rl cihkZXZfcHJpdik7Cj4gKwl9IGVsc2UKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3Rl ciBkcml2ZXIgZm9yIHVzZXJzcGFjZSBhY2Nlc3MhXG4iKTsKPiArCj4gKwlpZiAoSU5URUxfSU5G TyhkZXZfcHJpdiktPm51bV9waXBlcykgewo+ICsJCS8qIE11c3QgYmUgZG9uZSBhZnRlciBwcm9i aW5nIG91dHB1dHMgKi8KPiArCQlpbnRlbF9vcHJlZ2lvbl9yZWdpc3RlcihkZXZfcHJpdik7Cj4g KwkJYWNwaV92aWRlb19yZWdpc3RlcigpOwo+ICsJfQo+IMKgCj4gLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxha2VfaW5mbyA9IHsKPiAtCUJEV19GRUFU VVJFUywKPiAtCS5pc19rYWJ5bGFrZSA9IDEsCj4gLQkuZ2VuID0gOSwKPiAtfTsKPiArCWlmIChJ U19HRU41KGRldl9wcml2KSkKPiArCQlpbnRlbF9ncHVfaXBzX2luaXQoZGV2X3ByaXYpOwo+IMKg Cj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxha2Vf Z3QzX2luZm8gPSB7Cj4gLQlCRFdfRkVBVFVSRVMsCj4gLQkuaXNfa2FieWxha2UgPSAxLAo+IC0J LmdlbiA9IDksCj4gLQkucmluZ19tYXNrID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9S SU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklORywKPiAtfTsKPiArCWk5MTVfYXVkaW9fY29tcG9u ZW50X2luaXQoZGV2X3ByaXYpOwo+IMKgCj4gLS8qCj4gLSAqIE1ha2Ugc3VyZSBhbnkgZGV2aWNl IG1hdGNoZXMgaGVyZSBhcmUgZnJvbSBtb3N0IHNwZWNpZmljIHRvIG1vc3QKPiAtICogZ2VuZXJh bC7CoMKgRm9yIGV4YW1wbGUsIHNpbmNlIHRoZSBRdWFudGEgbWF0Y2ggaXMgYmFzZWQgb24gdGhl IHN1YnN5c3RlbQo+IC0gKiBhbmQgc3VidmVuZG9yIElEcywgd2UgbmVlZCBpdCB0byBjb21lIGJl Zm9yZSB0aGUgbW9yZSBnZW5lcmFsIElWQgo+IC0gKiBQQ0kgSUQgbWF0Y2hlcywgb3RoZXJ3aXNl IHdlJ2xsIHVzZSB0aGUgd3JvbmcgaW5mbyBzdHJ1Y3QgYWJvdmUuCj4gKwkvKgo+ICsJwqAqIFNv bWUgcG9ydHMgcmVxdWlyZSBjb3JyZWN0bHkgc2V0LXVwIGhwZCByZWdpc3RlcnMgZm9yIGRldGVj dGlvbiB0bwo+ICsJwqAqIHdvcmsgcHJvcGVybHkgKGxlYWRpbmcgdG8gZ2hvc3QgY29ubmVjdGVk IGNvbm5lY3RvciBzdGF0dXMpLCBlLmcuIFZHQQo+ICsJwqAqIG9uIGdtNDUuwqDCoEhlbmNlIHdl IGNhbiBvbmx5IHNldCB1cCB0aGUgaW5pdGlhbCBmYmRldiBjb25maWcgYWZ0ZXIgaHBkCj4gKwnC oCogaXJxcyBhcmUgZnVsbHkgZW5hYmxlZC4gTm93IHdlIHNob3VsZCBzY2FuIGZvciB0aGUgaW5p dGlhbCBjb25maWcKPiArCcKgKiBvbmx5IG9uY2UgaG90cGx1ZyBoYW5kbGluZyBpcyBlbmFibGVk LCBidXQgZHVlIHRvIHNjcmV3ZWQtdXAgbG9ja2luZwo+ICsJwqAqIGFyb3VuZCBrbXMvZmJkZXYg aW5pdCB3ZSBjYW4ndCBwcm90ZWN0IHRoZSBmZGJldiBpbml0aWFsIGNvbmZpZwo+ICsJwqAqIHNj YW5uaW5nIGFnYWluc3QgaG90cGx1ZyBldmVudHMuIEhlbmNlIGRvIHRoaXMgZmlyc3QgYW5kIGln bm9yZSB0aGUKPiArCcKgKiB0aW55IHdpbmRvdyB3aGVyZSB3ZSB3aWxsIGxvb3NlIGhvdHBsdWcg bm90aWZhY3Rpb25zLgo+ICsJwqAqLwo+ICsJaW50ZWxfZmJkZXZfaW5pdGlhbF9jb25maWdfYXN5 bmMoZGV2KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIgLSBj bGVhbnVwIHRoZSByZWdpc3RyYXRpb24gZG9uZSBpbiBpOTE1X2RyaXZlcl9yZWdpc2VyKCkKPiAr ICogQGRldl9wcml2OiBkZXZpY2UgcHJpdmF0ZQo+IMKgICovCj4gLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKPiAtCUlOVEVMX0k4MzBfSURTKCZpbnRl bF9pODMwX2luZm8pLAo+IC0JSU5URUxfSTg0NUdfSURTKCZpbnRlbF84NDVnX2luZm8pLAo+IC0J SU5URUxfSTg1WF9JRFMoJmludGVsX2k4NXhfaW5mbyksCj4gLQlJTlRFTF9JODY1R19JRFMoJmlu dGVsX2k4NjVnX2luZm8pLAo+IC0JSU5URUxfSTkxNUdfSURTKCZpbnRlbF9pOTE1Z19pbmZvKSwK PiAtCUlOVEVMX0k5MTVHTV9JRFMoJmludGVsX2k5MTVnbV9pbmZvKSwKPiAtCUlOVEVMX0k5NDVH X0lEUygmaW50ZWxfaTk0NWdfaW5mbyksCj4gLQlJTlRFTF9JOTQ1R01fSURTKCZpbnRlbF9pOTQ1 Z21faW5mbyksCj4gLQlJTlRFTF9JOTY1R19JRFMoJmludGVsX2k5NjVnX2luZm8pLAo+IC0JSU5U RUxfRzMzX0lEUygmaW50ZWxfZzMzX2luZm8pLAo+IC0JSU5URUxfSTk2NUdNX0lEUygmaW50ZWxf aTk2NWdtX2luZm8pLAo+IC0JSU5URUxfR000NV9JRFMoJmludGVsX2dtNDVfaW5mbyksCj4gLQlJ TlRFTF9HNDVfSURTKCZpbnRlbF9nNDVfaW5mbyksCj4gLQlJTlRFTF9QSU5FVklFV19JRFMoJmlu dGVsX3BpbmV2aWV3X2luZm8pLAo+IC0JSU5URUxfSVJPTkxBS0VfRF9JRFMoJmludGVsX2lyb25s YWtlX2RfaW5mbyksCj4gLQlJTlRFTF9JUk9OTEFLRV9NX0lEUygmaW50ZWxfaXJvbmxha2VfbV9p bmZvKSwKPiAtCUlOVEVMX1NOQl9EX0lEUygmaW50ZWxfc2FuZHlicmlkZ2VfZF9pbmZvKSwKPiAt CUlOVEVMX1NOQl9NX0lEUygmaW50ZWxfc2FuZHlicmlkZ2VfbV9pbmZvKSwKPiAtCUlOVEVMX0lW Ql9RX0lEUygmaW50ZWxfaXZ5YnJpZGdlX3FfaW5mbyksIC8qIG11c3QgYmUgZmlyc3QgSVZCICov Cj4gLQlJTlRFTF9JVkJfTV9JRFMoJmludGVsX2l2eWJyaWRnZV9tX2luZm8pLAo+IC0JSU5URUxf SVZCX0RfSURTKCZpbnRlbF9pdnlicmlkZ2VfZF9pbmZvKSwKPiAtCUlOVEVMX0hTV19EX0lEUygm aW50ZWxfaGFzd2VsbF9kX2luZm8pLAo+IC0JSU5URUxfSFNXX01fSURTKCZpbnRlbF9oYXN3ZWxs X21faW5mbyksCj4gLQlJTlRFTF9WTFZfTV9JRFMoJmludGVsX3ZhbGxleXZpZXdfbV9pbmZvKSwK PiAtCUlOVEVMX1ZMVl9EX0lEUygmaW50ZWxfdmFsbGV5dmlld19kX2luZm8pLAo+IC0JSU5URUxf QkRXX0dUMTJNX0lEUygmaW50ZWxfYnJvYWR3ZWxsX21faW5mbyksCj4gLQlJTlRFTF9CRFdfR1Qx MkRfSURTKCZpbnRlbF9icm9hZHdlbGxfZF9pbmZvKSwKPiAtCUlOVEVMX0JEV19HVDNNX0lEUygm aW50ZWxfYnJvYWR3ZWxsX2d0M21faW5mbyksCj4gLQlJTlRFTF9CRFdfR1QzRF9JRFMoJmludGVs X2Jyb2Fkd2VsbF9ndDNkX2luZm8pLAo+IC0JSU5URUxfQ0hWX0lEUygmaW50ZWxfY2hlcnJ5dmll d19pbmZvKSwKPiAtCUlOVEVMX1NLTF9HVDFfSURTKCZpbnRlbF9za3lsYWtlX2luZm8pLAo+IC0J SU5URUxfU0tMX0dUMl9JRFMoJmludGVsX3NreWxha2VfaW5mbyksCj4gLQlJTlRFTF9TS0xfR1Qz X0lEUygmaW50ZWxfc2t5bGFrZV9ndDNfaW5mbyksCj4gLQlJTlRFTF9TS0xfR1Q0X0lEUygmaW50 ZWxfc2t5bGFrZV9ndDNfaW5mbyksCj4gLQlJTlRFTF9CWFRfSURTKCZpbnRlbF9icm94dG9uX2lu Zm8pLAo+IC0JSU5URUxfS0JMX0dUMV9JRFMoJmludGVsX2thYnlsYWtlX2luZm8pLAo+IC0JSU5U RUxfS0JMX0dUMl9JRFMoJmludGVsX2thYnlsYWtlX2luZm8pLAo+IC0JSU5URUxfS0JMX0dUM19J RFMoJmludGVsX2thYnlsYWtlX2d0M19pbmZvKSwKPiAtCUlOVEVMX0tCTF9HVDRfSURTKCZpbnRl bF9rYWJ5bGFrZV9ndDNfaW5mbyksCj4gLQl7MCwgMCwgMH0KPiAtfTsKPiArc3RhdGljIHZvaWQg aTkxNV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gK3sKPiArCWk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoZGV2X3ByaXYpOwo+IMKgCj4g LU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lpZGxpc3QpOwo+ICsJaW50ZWxfZ3B1X2lwc190 ZWFyZG93bigpOwo+ICsJYWNwaV92aWRlb191bnJlZ2lzdGVyKCk7Cj4gKwlpbnRlbF9vcHJlZ2lv bl91bnJlZ2lzdGVyKGRldl9wcml2KTsKPiDCoAo+IC1zdGF0aWMgZW51bSBpbnRlbF9wY2ggaW50 ZWxfdmlydF9kZXRlY3RfcGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gKwlpbnRlbF9tb2Rl c2V0X3VucmVnaXN0ZXIoZGV2X3ByaXYpOwo+ICsJaTkxNV90ZWFyZG93bl9zeXNmcyhkZXZfcHJp di0+ZGV2KTsKPiArCWk5MTVfZGVidWdmc191bnJlZ2lzdGVyKGRldl9wcml2KTsKPiArCWRybV9k ZXZfdW5yZWdpc3RlcihkZXZfcHJpdi0+ZGV2KTsKPiArCj4gKwlpOTE1X2dlbV9zaHJpbmtlcl9j bGVhbnVwKGRldl9wcml2KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfZHJpdmVyX2xvYWQg LSBzZXR1cCBjaGlwIGFuZCBjcmVhdGUgYW4gaW5pdGlhbCBjb25maWcKPiArICogQGRldjogRFJN IGRldmljZQo+ICsgKiBAZmxhZ3M6IHN0YXJ0dXAgZmxhZ3MKPiArICoKPiArICogVGhlIGRyaXZl ciBsb2FkIHJvdXRpbmUgaGFzIHRvIGRvIHNldmVyYWwgdGhpbmdzOgo+ICsgKsKgwqDCoC0gZHJp dmUgb3V0cHV0IGRpc2NvdmVyeSB2aWEgaW50ZWxfbW9kZXNldF9pbml0KCkKPiArICrCoMKgwqAt IGluaXRpYWxpemUgdGhlIG1lbW9yeSBtYW5hZ2VyCj4gKyAqwqDCoMKgLSBhbGxvY2F0ZSBpbml0 aWFsIGNvbmZpZyBtZW1vcnkKPiArICrCoMKgwqAtIHNldHVwIHRoZSBEUk0gZnJhbWVidWZmZXIg d2l0aCB0aGUgYWxsb2NhdGVkIG1lbW9yeQo+ICsgKi8KPiArc3RhdGljIGludCBpOTE1X2RyaXZl cl9sb2FkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAo+ICsJCQnCoMKgwqDCoGNvbnN0IHN0cnVjdCBw Y2lfZGV2aWNlX2lkICplbnQpCj4gwqB7Cj4gLQllbnVtIGludGVsX3BjaCByZXQgPSBQQ0hfTk9Q Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Owo+ICsJaW50IHJldDsKPiAr Cj4gKwlkZXZfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXZfcHJpdiksIEdGUF9LRVJORUwpOwo+ ICsJaWYgKGRldl9wcml2ID09IE5VTEwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0 ID0gZHJtX2Rldl9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmZHJpdmVyLCAmcGRldi0+ZGV2KTsKPiAr CWlmIChyZXQpCj4gKwkJZ290byBvdXRfZnJlZV9wcml2Owo+ICsKPiArCS8qIE11c3QgYmUgc2V0 IGJlZm9yZSBjYWxsaW5nIF9faTkxNV9wcmludGsgKi8KPiArCWRldl9wcml2LT5kcm0ucGRldiA9 IHBkZXY7Cj4gKwlkZXZfcHJpdi0+ZHJtLmRldl9wcml2YXRlID0gZGV2X3ByaXY7Cj4gKwlkZXZf cHJpdi0+ZGV2ID0gJmRldl9wcml2LT5kcm07Cj4gKwo+ICsJcmV0ID0gaTkxNV9kcml2ZXJfaW5p dF9lYXJseShkZXZfcHJpdiwgZW50KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gb3V0X2Zy ZWVfcHJpdjsKPiArCj4gKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKPiArCWlmIChy ZXQpCj4gKwkJZ290byBvdXRfY2xlYW51cF9lYXJseTsKPiArCj4gKwlwY2lfc2V0X2RydmRhdGEo cGRldiwgJmRldl9wcml2LT5kcm0pOwo+ICsKPiArCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9w cml2KTsKPiArCj4gKwlyZXQgPSBpOTE1X2RyaXZlcl9pbml0X21taW8oZGV2X3ByaXYpOwo+ICsJ aWYgKHJldCA8IDApCj4gKwkJZ290byBvdXRfcnVudGltZV9wbV9wdXQ7Cj4gKwo+ICsJcmV0ID0g aTkxNV9kcml2ZXJfaW5pdF9odyhkZXZfcHJpdik7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3Rv IG91dF9jbGVhbnVwX21taW87Cj4gwqAKPiDCoAkvKgo+IC0JwqAqIEluIGEgdmlydHVhbGl6ZWQg cGFzc3Rocm91Z2ggZW52aXJvbm1lbnQgd2UgY2FuIGJlIGluIGEKPiAtCcKgKiBzZXR1cCB3aGVy ZSB0aGUgSVNBIGJyaWRnZSBpcyBub3QgYWJsZSB0byBiZSBwYXNzZWQgdGhyb3VnaC4KPiAtCcKg KiBJbiB0aGlzIGNhc2UsIGEgc291dGggYnJpZGdlIGNhbiBiZSBlbXVsYXRlZCBhbmQgd2UgaGF2 ZSB0bwo+IC0JwqAqIG1ha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MgYXMgdG8gd2hpY2ggUENIIGlzIHJl YWxseSB0aGVyZS4KPiArCcKgKiBUT0RPOiBtb3ZlIHRoZSB2YmxhbmsgaW5pdCBhbmQgcGFydHMg b2YgbW9kZXNldCBpbml0IHN0ZXBzIGludG8gb25lCj4gKwnCoCogb2YgdGhlIGk5MTVfZHJpdmVy X2luaXRfL2k5MTVfZHJpdmVyX3JlZ2lzdGVyIGZ1bmN0aW9ucyBhY2NvcmRpbmcKPiArCcKgKiB0 byB0aGUgcm9sZS9lZmZlY3Qgb2YgdGhlIGdpdmVuIGluaXQgc3RlcC4KPiDCoAnCoCovCj4gLQo+ IC0JaWYgKElTX0dFTjUoZGV2KSkgewo+IC0JCXJldCA9IFBDSF9JQlg7Cj4gLQkJRFJNX0RFQlVH X0tNUygiQXNzdW1pbmcgSWJleCBQZWFrIFBDSFxuIik7Cj4gLQl9IGVsc2UgaWYgKElTX0dFTjYo ZGV2KSB8fCBJU19JVllCUklER0UoZGV2KSkgewo+IC0JCXJldCA9IFBDSF9DUFQ7Cj4gLQkJRFJN X0RFQlVHX0tNUygiQXNzdW1pbmcgQ291YXJQb2ludCBQQ0hcbiIpOwo+IC0JfSBlbHNlIGlmIChJ U19IQVNXRUxMKGRldikgfHwgSVNfQlJPQURXRUxMKGRldikpIHsKPiAtCQlyZXQgPSBQQ0hfTFBU Owo+IC0JCURSTV9ERUJVR19LTVMoIkFzc3VtaW5nIEx5bnhQb2ludCBQQ0hcbiIpOwo+IC0JfSBl bHNlIGlmIChJU19TS1lMQUtFKGRldikgfHwgSVNfS0FCWUxBS0UoZGV2KSkgewo+IC0JCXJldCA9 IFBDSF9TUFQ7Cj4gLQkJRFJNX0RFQlVHX0tNUygiQXNzdW1pbmcgU3VucmlzZVBvaW50IFBDSFxu Iik7Cj4gKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPm51bV9waXBlcykgewo+ICsJCXJldCA9 IGRybV92YmxhbmtfaW5pdChkZXZfcHJpdi0+ZGV2LAo+ICsJCQkJwqDCoMKgwqDCoMKgSU5URUxf SU5GTyhkZXZfcHJpdiktPm51bV9waXBlcyk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBvdXRf Y2xlYW51cF9odzsKPiDCoAl9Cj4gwqAKPiArCXJldCA9IGk5MTVfbG9hZF9tb2Rlc2V0X2luaXQo ZGV2X3ByaXYtPmRldik7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIG91dF9jbGVhbnVwX3Zi bGFuazsKPiArCj4gKwlpOTE1X2RyaXZlcl9yZWdpc3RlcihkZXZfcHJpdik7Cj4gKwo+ICsJaW50 ZWxfcnVudGltZV9wbV9lbmFibGUoZGV2X3ByaXYpOwo+ICsKPiArCWludGVsX3J1bnRpbWVfcG1f cHV0KGRldl9wcml2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK291dF9jbGVhbnVwX3ZibGFu azoKPiArCWRybV92YmxhbmtfY2xlYW51cChkZXZfcHJpdi0+ZGV2KTsKPiArb3V0X2NsZWFudXBf aHc6Cj4gKwlpOTE1X2RyaXZlcl9jbGVhbnVwX2h3KGRldl9wcml2KTsKPiArb3V0X2NsZWFudXBf bW1pbzoKPiArCWk5MTVfZHJpdmVyX2NsZWFudXBfbW1pbyhkZXZfcHJpdik7Cj4gK291dF9ydW50 aW1lX3BtX3B1dDoKPiArCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPiArCXBjaV9k aXNhYmxlX2RldmljZShwZGV2KTsKPiArb3V0X2NsZWFudXBfZWFybHk6Cj4gKwlpOTE1X2RyaXZl cl9jbGVhbnVwX2Vhcmx5KGRldl9wcml2KTsKPiArb3V0X2ZyZWVfcHJpdjoKPiArCWk5MTVfbG9h ZF9lcnJvcihkZXZfcHJpdiwgIkRldmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxuIiwg cmV0KTsKPiArCj4gKwlrZnJlZShkZXZfcHJpdik7Cj4gKwo+IMKgCXJldHVybiByZXQ7Cj4gwqB9 Cj4gwqAKPiAtdm9pZCBpbnRlbF9kZXRlY3RfcGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g K3N0YXRpYyBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g wqB7Cj4gwqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiAtCXN0cnVjdCBwY2lfZGV2ICpwY2ggPSBOVUxMOwo+ICsJaW50IHJldDsKPiDCoAo+ IC0JLyogSW4gYWxsIGN1cnJlbnQgY2FzZXMsIG51bV9waXBlcyBpcyBlcXVpdmFsZW50IHRvIHRo ZSBQQ0hfTk9QIHNldHRpbmcKPiAtCcKgKiAod2hpY2ggcmVhbGx5IGFtb3VudHMgdG8gYSBQQ0gg YnV0IG5vIFNvdXRoIERpc3BsYXkpLgo+IC0JwqAqLwo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+ bnVtX3BpcGVzID09IDApIHsKPiAtCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfTk9QOwo+IC0J CXJldHVybjsKPiArCWludGVsX2ZiZGV2X2ZpbmkoZGV2KTsKPiArCj4gKwlyZXQgPSBpOTE1X2dl bV9zdXNwZW5kKGRldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g aWRsZSBoYXJkd2FyZTogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiDCoAl9Cj4gwqAK PiArCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fSU5JVCk7 Cj4gKwo+ICsJaTkxNV9kcml2ZXJfdW5yZWdpc3RlcihkZXZfcHJpdik7Cj4gKwo+ICsJZHJtX3Zi bGFua19jbGVhbnVwKGRldik7Cj4gKwo+ICsJaW50ZWxfbW9kZXNldF9jbGVhbnVwKGRldik7Cj4g Kwo+IMKgCS8qCj4gLQnCoCogVGhlIHJlYXNvbiB0byBwcm9iZSBJU0EgYnJpZGdlIGluc3RlYWQg b2YgRGV2MzE6RnVuMCBpcyB0bwo+IC0JwqAqIG1ha2UgZ3JhcGhpY3MgZGV2aWNlIHBhc3N0aHJv dWdoIHdvcmsgZWFzeSBmb3IgVk1NLCB0aGF0IG9ubHkKPiAtCcKgKiBuZWVkIHRvIGV4cG9zZSBJ U0EgYnJpZGdlIHRvIGxldCBkcml2ZXIga25vdyB0aGUgcmVhbCBoYXJkd2FyZQo+IC0JwqAqIHVu ZGVybmVhdGguIFRoaXMgaXMgYSByZXF1aXJlbWVudCBmcm9tIHZpcnR1YWxpemF0aW9uIHRlYW0u Cj4gLQnCoCoKPiAtCcKgKiBJbiBzb21lIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiBY RU4pLCB0aGVyZSBpcyBpcnJlbGV2YW50Cj4gLQnCoCogSVNBIGJyaWRnZSBpbiB0aGUgc3lzdGVt LiBUbyB3b3JrIHJlbGlhYmx5LCB3ZSBzaG91bGQgc2NhbiB0cmhvdWdoCj4gLQnCoCogYWxsIHRo ZSBJU0EgYnJpZGdlIGRldmljZXMgYW5kIGNoZWNrIGZvciB0aGUgZmlyc3QgbWF0Y2gsIGluc3Rl YWQKPiAtCcKgKiBvZiBvbmx5IGNoZWNraW5nIHRoZSBmaXJzdCBvbmUuCj4gKwnCoCogZnJlZSB0 aGUgbWVtb3J5IHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhlIGNoaWxkIGRldmljZQo+ICsJwqAqIGNv bmZpZyBwYXJzZWQgZnJvbSBWQlQKPiDCoAnCoCovCj4gLQl3aGlsZSAoKHBjaCA9IHBjaV9nZXRf Y2xhc3MoUENJX0NMQVNTX0JSSURHRV9JU0EgPDwgOCwgcGNoKSkpIHsKPiAtCQlpZiAocGNoLT52 ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkgewo+IC0JCQl1bnNpZ25lZCBzaG9ydCBpZCA9 IHBjaC0+ZGV2aWNlICYgSU5URUxfUENIX0RFVklDRV9JRF9NQVNLOwo+IC0JCQlkZXZfcHJpdi0+ cGNoX2lkID0gaWQ7Cj4gKwlpZiAoZGV2X3ByaXYtPnZidC5jaGlsZF9kZXYgJiYgZGV2X3ByaXYt PnZidC5jaGlsZF9kZXZfbnVtKSB7Cj4gKwkJa2ZyZWUoZGV2X3ByaXYtPnZidC5jaGlsZF9kZXYp Owo+ICsJCWRldl9wcml2LT52YnQuY2hpbGRfZGV2ID0gTlVMTDsKPiArCQlkZXZfcHJpdi0+dmJ0 LmNoaWxkX2Rldl9udW0gPSAwOwo+ICsJfQo+ICsJa2ZyZWUoZGV2X3ByaXYtPnZidC5zZHZvX2x2 ZHNfdmJ0X21vZGUpOwo+ICsJZGV2X3ByaXYtPnZidC5zZHZvX2x2ZHNfdmJ0X21vZGUgPSBOVUxM Owo+ICsJa2ZyZWUoZGV2X3ByaXYtPnZidC5sZnBfbHZkc192YnRfbW9kZSk7Cj4gKwlkZXZfcHJp di0+dmJ0LmxmcF9sdmRzX3ZidF9tb2RlID0gTlVMTDsKPiDCoAo+IC0JCQlpZiAoaWQgPT0gSU5U RUxfUENIX0lCWF9ERVZJQ0VfSURfVFlQRSkgewo+IC0JCQkJZGV2X3ByaXYtPnBjaF90eXBlID0g UENIX0lCWDsKPiAtCQkJCURSTV9ERUJVR19LTVMoIkZvdW5kIEliZXggUGVhayBQQ0hcbiIpOwo+ IC0JCQkJV0FSTl9PTighSVNfR0VONShkZXYpKTsKPiAtCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRF TF9QQ0hfQ1BUX0RFVklDRV9JRF9UWVBFKSB7Cj4gLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQ Q0hfQ1BUOwo+IC0JCQkJRFJNX0RFQlVHX0tNUygiRm91bmQgQ291Z2FyUG9pbnQgUENIXG4iKTsK PiAtCQkJCVdBUk5fT04oIShJU19HRU42KGRldikgfHwgSVNfSVZZQlJJREdFKGRldikpKTsKPiAt CQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfUFBUX0RFVklDRV9JRF9UWVBFKSB7Cj4gLQkJ CQkvKiBQYW50aGVyUG9pbnQgaXMgQ1BUIGNvbXBhdGlibGUgKi8KPiAtCQkJCWRldl9wcml2LT5w Y2hfdHlwZSA9IFBDSF9DUFQ7Cj4gLQkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBQYW50aGVyUG9p bnQgUENIXG4iKTsKPiAtCQkJCVdBUk5fT04oIShJU19HRU42KGRldikgfHwgSVNfSVZZQlJJREdF KGRldikpKTsKPiAtCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfTFBUX0RFVklDRV9JRF9U WVBFKSB7Cj4gLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfTFBUOwo+IC0JCQkJRFJNX0RF QlVHX0tNUygiRm91bmQgTHlueFBvaW50IFBDSFxuIik7Cj4gLQkJCQlXQVJOX09OKCFJU19IQVNX RUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKTsKPiAtCQkJCVdBUk5fT04oSVNfSFNXX1VM VChkZXYpIHx8IElTX0JEV19VTFQoZGV2KSk7Cj4gLQkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxf UENIX0xQVF9MUF9ERVZJQ0VfSURfVFlQRSkgewo+IC0JCQkJZGV2X3ByaXYtPnBjaF90eXBlID0g UENIX0xQVDsKPiAtCQkJCURSTV9ERUJVR19LTVMoIkZvdW5kIEx5bnhQb2ludCBMUCBQQ0hcbiIp Owo+IC0JCQkJV0FSTl9PTighSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSk7 Cj4gLQkJCQlXQVJOX09OKCFJU19IU1dfVUxUKGRldikgJiYgIUlTX0JEV19VTFQoZGV2KSk7Cj4g LQkJCX0gZWxzZSBpZiAoaWQgPT0gSU5URUxfUENIX1NQVF9ERVZJQ0VfSURfVFlQRSkgewo+IC0J CQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX1NQVDsKPiAtCQkJCURSTV9ERUJVR19LTVMoIkZv dW5kIFN1bnJpc2VQb2ludCBQQ0hcbiIpOwo+IC0JCQkJV0FSTl9PTighSVNfU0tZTEFLRShkZXYp ICYmCj4gLQkJCQkJIUlTX0tBQllMQUtFKGRldikpOwo+IC0JCQl9IGVsc2UgaWYgKGlkID09IElO VEVMX1BDSF9TUFRfTFBfREVWSUNFX0lEX1RZUEUpIHsKPiAtCQkJCWRldl9wcml2LT5wY2hfdHlw ZSA9IFBDSF9TUFQ7Cj4gLQkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBTdW5yaXNlUG9pbnQgTFAg UENIXG4iKTsKPiAtCQkJCVdBUk5fT04oIUlTX1NLWUxBS0UoZGV2KSAmJgo+IC0JCQkJCSFJU19L QUJZTEFLRShkZXYpKTsKPiAtCQkJfSBlbHNlIGlmICgoaWQgPT0gSU5URUxfUENIX1AyWF9ERVZJ Q0VfSURfVFlQRSkgfHwKPiAtCQkJCcKgwqDCoChpZCA9PSBJTlRFTF9QQ0hfUDNYX0RFVklDRV9J RF9UWVBFKSB8fAo+IC0JCQkJwqDCoMKgKChpZCA9PSBJTlRFTF9QQ0hfUUVNVV9ERVZJQ0VfSURf VFlQRSkgJiYKPiAtCQkJCcKgwqDCoMKgcGNoLT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MWFmNCAm Jgo+IC0JCQkJwqDCoMKgwqBwY2gtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgxMTAwKSkgewo+IC0J CQkJZGV2X3ByaXYtPnBjaF90eXBlID0gaW50ZWxfdmlydF9kZXRlY3RfcGNoKGRldik7Cj4gLQkJ CX0gZWxzZQo+IC0JCQkJY29udGludWU7Cj4gKwl2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2Ns aWVudChkZXYtPnBkZXYpOwo+ICsJdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEws IE5VTEwsIE5VTEwpOwo+IMKgCj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCX0KPiAtCWlmICghcGNo KQo+IC0JCURSTV9ERUJVR19LTVMoIk5vIFBDSCBmb3VuZC5cbiIpOwo+ICsJaW50ZWxfY3NyX3Vj b2RlX2ZpbmkoZGV2X3ByaXYpOwo+IMKgCj4gLQlwY2lfZGV2X3B1dChwY2gpOwo+ICsJLyogRnJl ZSBlcnJvciBzdGF0ZSBhZnRlciBpbnRlcnJ1cHRzIGFyZSBmdWxseSBkaXNhYmxlZC4gKi8KPiAr CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tf d29yayk7Cj4gKwlpOTE1X2Rlc3Ryb3lfZXJyb3Jfc3RhdGUoZGV2KTsKPiArCj4gKwkvKiBGbHVz aCBhbnkgb3V0c3RhbmRpbmcgdW5waW5fd29yay4gKi8KPiArCWZsdXNoX3dvcmtxdWV1ZShkZXZf cHJpdi0+d3EpOwo+ICsKPiArCWludGVsX2d1Y19maW5pKGRldik7Cj4gKwlpOTE1X2dlbV9maW5p KGRldik7Cj4gKwlpbnRlbF9mYmNfY2xlYW51cF9jZmIoZGV2X3ByaXYpOwo+ICsKPiArCWludGVs X3Bvd2VyX2RvbWFpbnNfZmluaShkZXZfcHJpdik7Cj4gKwo+ICsJaTkxNV9kcml2ZXJfY2xlYW51 cF9odyhkZXZfcHJpdik7Cj4gKwlpOTE1X2RyaXZlcl9jbGVhbnVwX21taW8oZGV2X3ByaXYpOwo+ ICsKPiArCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fSU5J VCk7Cj4gKwo+ICsJaTkxNV9kcml2ZXJfY2xlYW51cF9lYXJseShkZXZfcHJpdik7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiAtYm9vbCBpOTE1X3NlbWFwaG9yZV9pc19lbmFibGVkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIGludCBpOTE1X2RyaXZl cl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiDC oHsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNikKPiAtCQlyZXR1cm4gZmFsc2U7Cj4g KwlpbnQgcmV0Owo+IMKgCj4gLQlpZiAoaTkxNS5zZW1hcGhvcmVzID49IDApCj4gLQkJcmV0dXJu IGk5MTUuc2VtYXBob3JlczsKPiArCXJldCA9IGk5MTVfZ2VtX29wZW4oZGV2LCBmaWxlKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiDCoAo+IC0JLyogVE9ETzogbWFrZSBzZW1hcGhv cmVzIGFuZCBFeGVjbGlzdHMgcGxheSBuaWNlbHkgdG9nZXRoZXIgKi8KPiAtCWlmIChpOTE1LmVu YWJsZV9leGVjbGlzdHMpCj4gLQkJcmV0dXJuIGZhbHNlOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiDC oAo+IC0jaWZkZWYgQ09ORklHX0lOVEVMX0lPTU1VCj4gLQkvKiBFbmFibGUgc2VtYXBob3JlcyBv biBTTkIgd2hlbiBJTyByZW1hcHBpbmcgaXMgb2ZmICovCj4gLQlpZiAoSVNfR0VONihkZXZfcHJp dikgJiYgaW50ZWxfaW9tbXVfZ2Z4X21hcHBlZCkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLSNlbmRp Zgo+ICsvKioKPiArICogaTkxNV9kcml2ZXJfbGFzdGNsb3NlIC0gY2xlYW4gdXAgYWZ0ZXIgYWxs IERSTSBjbGllbnRzIGhhdmUgZXhpdGVkCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICoKPiAr ICogVGFrZSBjYXJlIG9mIGNsZWFuaW5nIHVwIGFmdGVyIGFsbCBEUk0gY2xpZW50cyBoYXZlIGV4 aXRlZC7CoMKgSW4gdGhlCj4gKyAqIG1vZGUgc2V0dGluZyBjYXNlLCB3ZSB3YW50IHRvIHJlc3Rv cmUgdGhlIGtlcm5lbCdzIGluaXRpYWwgbW9kZSAoanVzdAo+ICsgKiBpbiBjYXNlIHRoZSBsYXN0 IGNsaWVudCBsZWZ0IHVzIGluIGEgYmFkIHN0YXRlKS4KPiArICoKPiArICogQWRkaXRpb25hbGx5 LCBpbiB0aGUgbm9uLW1vZGUgc2V0dGluZyBjYXNlLCB3ZSdsbCB0ZWFyIGRvd24gdGhlIEdUVAo+ ICsgKiBhbmQgRE1BIHN0cnVjdHVyZXMsIHNpbmNlIHRoZSBrZXJuZWwgd29uJ3QgYmUgdXNpbmcg dGhlbSwgYW5kIGNsZWEKPiArICogdXAgYW55IEdFTSBzdGF0ZS4KPiArICovCj4gK3N0YXRpYyB2 b2lkIGk5MTVfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4g KwlpbnRlbF9mYmRldl9yZXN0b3JlX21vZGUoZGV2KTsKPiArCXZnYV9zd2l0Y2hlcm9vX3Byb2Nl c3NfZGVsYXllZF9zd2l0Y2goKTsKPiArfQo+IMKgCj4gLQlyZXR1cm4gdHJ1ZTsKPiArc3RhdGlj IHZvaWQgaTkxNV9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9maWxlICpmaWxlKQo+ICt7Cj4gKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 Cj4gKwlpOTE1X2dlbV9jb250ZXh0X2Nsb3NlKGRldiwgZmlsZSk7Cj4gKwlpOTE1X2dlbV9yZWxl YXNlKGRldiwgZmlsZSk7Cj4gKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Cj4gKwo+ICsJa2Zy ZWUoZmlsZV9wcml2KTsKPiDCoH0KPiDCoAo+IMKgc3RhdGljIHZvaWQgaW50ZWxfc3VzcGVuZF9l bmNvZGVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gQEAgLTEwMzksNyAr MjYxMiw3IEBAIHN0YXRpYyBpbnQgaTkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYs IGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCj4gwqAJwqDCoMKgwqAhdmdhX3N3aXRj aGVyb29faGFuZGxlcl9mbGFncygpKQo+IMKgCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiDCoAo+ IC0JcmV0dXJuIGk5MTVfZHJpdmVyX2xvYWQocGRldiwgZW50LCAmZHJpdmVyKTsKPiArCXJldHVy biBpOTE1X2RyaXZlcl9sb2FkKHBkZXYsIGVudCk7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lk Cj4gQEAgLTE3NDcsNiArMzMyMCw2OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBpOTE1X2RyaXZlcl9mb3BzID0gewo+IMKgCS5sbHNlZWsgPSBub29wX2xsc2VlaywKPiDC oH07Cj4gwqAKPiArc3RhdGljIGludAo+ICtpOTE1X2dlbV9yZWplY3RfcGluX2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCcKgwqBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCj4gK3sKPiArCXJldHVybiAtRU5PREVWOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVfaW9jdGxzW10gPSB7Cj4gKwlEUk1fSU9DVExfREVG X0RSVihJOTE1X0lOSVQsIGRybV9ub29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09O TFkpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9GTFVTSCwgZHJtX25vb3AsIERSTV9BVVRI KSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfRkxJUCwgZHJtX25vb3AsIERSTV9BVVRIKSwK PiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfQkFUQ0hCVUZGRVIsIGRybV9ub29wLCBEUk1fQVVU SCksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0lSUV9FTUlULCBkcm1fbm9vcCwgRFJNX0FV VEgpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9JUlFfV0FJVCwgZHJtX25vb3AsIERSTV9B VVRIKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VUUEFSQU0sIGk5MTVfZ2V0cGFyYW0s IERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9T RVRQQVJBTSwgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCj4g KwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0FMTE9DLCBkcm1fbm9vcCwgRFJNX0FVVEgpLAo+ICsJ RFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9GUkVFLCBkcm1fbm9vcCwgRFJNX0FVVEgpLAo+ICsJRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9JTklUX0hFQVAsIGRybV9ub29wLCBEUk1fQVVUSHxEUk1fTUFT VEVSfERSTV9ST09UX09OTFkpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9DTURCVUZGRVIs IGRybV9ub29wLCBEUk1fQVVUSCksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0RFU1RST1lf SEVBUCzCoMKgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCj4g KwlEUk1fSU9DVExfREVGX0RSVihJOTE1X1NFVF9WQkxBTktfUElQRSzCoMKgZHJtX25vb3AsIERS TV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJ OTE1X0dFVF9WQkxBTktfUElQRSzCoMKgZHJtX25vb3AsIERSTV9BVVRIKSwKPiArCURSTV9JT0NU TF9ERUZfRFJWKEk5MTVfVkJMQU5LX1NXQVAsIGRybV9ub29wLCBEUk1fQVVUSCksCj4gKwlEUk1f SU9DVExfREVGX0RSVihJOTE1X0hXU19BRERSLCBkcm1fbm9vcCwgRFJNX0FVVEh8RFJNX01BU1RF UnxEUk1fUk9PVF9PTkxZKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0lOSVQsIGRy bV9ub29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAo+ICsJRFJNX0lPQ1RM X0RFRl9EUlYoSTkxNV9HRU1fRVhFQ0JVRkZFUiwgaTkxNV9nZW1fZXhlY2J1ZmZlciwgRFJNX0FV VEgpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fRVhFQ0JVRkZFUjIsIGk5MTVfZ2Vt X2V4ZWNidWZmZXIyLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9E RUZfRFJWKEk5MTVfR0VNX1BJTiwgaTkxNV9nZW1fcmVqZWN0X3Bpbl9pb2N0bCwgRFJNX0FVVEh8 RFJNX1JPT1RfT05MWSksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9VTlBJTiwgaTkx NV9nZW1fcmVqZWN0X3Bpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCj4gKwlEUk1f SU9DVExfREVGX0RSVihJOTE1X0dFTV9CVVNZLCBpOTE1X2dlbV9idXN5X2lvY3RsLCBEUk1fQVVU SHxEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1NFVF9D QUNISU5HLCBpOTE1X2dlbV9zZXRfY2FjaGluZ19pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4g KwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9HRVRfQ0FDSElORywgaTkxNV9nZW1fZ2V0X2Nh Y2hpbmdfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkx NV9HRU1fVEhST1RUTEUsIGk5MTVfZ2VtX3Rocm90dGxlX2lvY3RsLCBEUk1fQVVUSHxEUk1fUkVO REVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0VOVEVSVlQsIGRybV9u b29wLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAo+ICsJRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9HRU1fTEVBVkVWVCwgZHJtX25vb3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJN X1JPT1RfT05MWSksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DUkVBVEUsIGk5MTVf Z2VtX2NyZWF0ZV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gKwlEUk1fSU9DVExfREVGX0RS VihJOTE1X0dFTV9QUkVBRCwgaTkxNV9nZW1fcHJlYWRfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cp LAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fUFdSSVRFLCBpOTE1X2dlbV9wd3JpdGVf aW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1f TU1BUCwgaTkxNV9nZW1fbW1hcF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gKwlEUk1fSU9D VExfREVGX0RSVihJOTE1X0dFTV9NTUFQX0dUVCwgaTkxNV9nZW1fbW1hcF9ndHRfaW9jdGwsIERS TV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fU0VUX0RPTUFJ TiwgaTkxNV9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gKwlEUk1f SU9DVExfREVGX0RSVihJOTE1X0dFTV9TV19GSU5JU0gsIGk5MTVfZ2VtX3N3X2ZpbmlzaF9pb2N0 bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9TRVRf VElMSU5HLCBpOTE1X2dlbV9zZXRfdGlsaW5nLCBEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9J T0NUTF9ERUZfRFJWKEk5MTVfR0VNX0dFVF9USUxJTkcsIGk5MTVfZ2VtX2dldF90aWxpbmcsIERS TV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fR0VUX0FQRVJU VVJFLCBpOTE1X2dlbV9nZXRfYXBlcnR1cmVfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJ RFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRVRfUElQRV9GUk9NX0NSVENfSUQsIGludGVsX2dldF9w aXBlX2Zyb21fY3J0Y19pZCwgMCksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9NQURW SVNFLCBpOTE1X2dlbV9tYWR2aXNlX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9J T0NUTF9ERUZfRFJWKEk5MTVfT1ZFUkxBWV9QVVRfSU1BR0UsIGludGVsX292ZXJsYXlfcHV0X2lt YWdlX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKPiArCURSTV9JT0NUTF9E RUZfRFJWKEk5MTVfT1ZFUkxBWV9BVFRSUywgaW50ZWxfb3ZlcmxheV9hdHRyc19pb2N0bCwgRFJN X01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X1NF VF9TUFJJVEVfQ09MT1JLRVksIGludGVsX3Nwcml0ZV9zZXRfY29sb3JrZXksIERSTV9NQVNURVJ8 RFJNX0NPTlRST0xfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRVRfU1BSSVRF X0NPTE9SS0VZLCBkcm1fbm9vcCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCj4gKwlE Uk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9XQUlULCBpOTE1X2dlbV93YWl0X2lvY3RsLCBEUk1f QVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX0NP TlRFWFRfQ1JFQVRFLCBpOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DT05URVhUX0RFU1RST1ksIGk5 MTVfZ2VtX2NvbnRleHRfZGVzdHJveV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gKwlEUk1f SU9DVExfREVGX0RSVihJOTE1X1JFR19SRUFELCBpOTE1X3JlZ19yZWFkX2lvY3RsLCBEUk1fUkVO REVSX0FMTE9XKSwKPiArCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VUX1JFU0VUX1NUQVRTLCBp OTE1X2dlbV9jb250ZXh0X3Jlc2V0X3N0YXRzX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiAr CURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1VTRVJQVFIsIGk5MTVfZ2VtX3VzZXJwdHJfaW9j dGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fQ09O VEVYVF9HRVRQQVJBTSwgaTkxNV9nZW1fY29udGV4dF9nZXRwYXJhbV9pb2N0bCwgRFJNX1JFTkRF Ul9BTExPVyksCj4gKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9DT05URVhUX1NFVFBBUkFN LCBpOTE1X2dlbV9jb250ZXh0X3NldHBhcmFtX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKPiAr fTsKPiArCj4gwqBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewo+IMKgCS8qIERv bid0IHVzZSBNVFJScyBoZXJlOyB0aGUgWHNlcnZlciBvciB1c2Vyc3BhY2UgYXBwIHNob3VsZAo+ IMKgCcKgKiBkZWFsIHdpdGggdGhlbSBmb3IgSW50ZWwgaGFyZHdhcmUuCj4gQEAgLTE3NzIsNiAr MzQwNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7Cj4gwqAJLmR1bWJf bWFwX29mZnNldCA9IGk5MTVfZ2VtX21tYXBfZ3R0LAo+IMKgCS5kdW1iX2Rlc3Ryb3kgPSBkcm1f Z2VtX2R1bWJfZGVzdHJveSwKPiDCoAkuaW9jdGxzID0gaTkxNV9pb2N0bHMsCj4gKwkubnVtX2lv Y3RscyA9IEFSUkFZX1NJWkUoaTkxNV9pb2N0bHMpLAo+IMKgCS5mb3BzID0gJmk5MTVfZHJpdmVy X2ZvcHMsCj4gwqAJLm5hbWUgPSBEUklWRVJfTkFNRSwKPiDCoAkuZGVzYyA9IERSSVZFUl9ERVND LAo+IEBAIC0xNzkxLDggKzM0MjcsNiBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTkxNV9w Y2lfZHJpdmVyID0gewo+IMKgCj4gwqBzdGF0aWMgaW50IF9faW5pdCBpOTE1X2luaXQodm9pZCkK PiDCoHsKPiAtCWRyaXZlci5udW1faW9jdGxzID0gaTkxNV9tYXhfaW9jdGw7Cj4gLQo+IMKgCS8q Cj4gwqAJwqAqIEVuYWJsZSBLTVMgYnkgZGVmYXVsdCwgdW5sZXNzIGV4cGxpY2l0bHkgb3ZlcnJp ZGVuIGJ5Cj4gwqAJwqAqIGVpdGhlciB0aGUgaTkxNS5tb2Rlc2V0IHByYXJhbWV0ZXIgb3IgYnkg dGhlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggYjk1YTEwZmEwMDJhLi4xZGYxNDFl NGFiNmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMjg1NywxNiArMjg1Nywx MyBAQCBzdHJ1Y3QgZHJtX2k5MTVfY21kX3RhYmxlIHsKPiDCoAo+IMKgI2luY2x1ZGUgImk5MTVf dHJhY2UuaCIKPiDCoAo+IC1leHRlcm4gY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVf aW9jdGxzW107Cj4gLWV4dGVybiBpbnQgaTkxNV9tYXhfaW9jdGw7Cj4gLQo+IMKgZXh0ZXJuIGlu dCBpOTE1X3N1c3BlbmRfc3dpdGNoZXJvbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNz YWdlX3Qgc3RhdGUpOwo+IMKgZXh0ZXJuIGludCBpOTE1X3Jlc3VtZV9zd2l0Y2hlcm9vKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+IMKgCj4gwqBpbnQgaW50ZWxfc2FuaXRpemVfZW5hYmxlX3Bw Z3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJCcKgwqDCoMKgwqDC oMKgCWludCBlbmFibGVfcHBndHQpOwo+IMKgCj4gLS8qIGk5MTVfZG1hLmMgKi8KPiArLyogaTkx NV9kcnYuYyAqLwo+IMKgdm9pZCBfX3ByaW50ZigzLCA0KQo+IMKgX19pOTE1X3ByaW50ayhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGNvbnN0IGNoYXIgKmxldmVsLAo+IMKgCcKg wqDCoMKgwqDCoGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKPiBAQCAtMjg3NCwxNiArMjg3MSw2IEBA IF9faTkxNV9wcmludGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjb25zdCBj aGFyICpsZXZlbCwKPiDCoCNkZWZpbmUgaTkxNV9yZXBvcnRfZXJyb3IoZGV2X3ByaXYsIGZtdCwg Li4uKQkJCQnCoMKgwqBcCj4gwqAJX19pOTE1X3ByaW50ayhkZXZfcHJpdiwgS0VSTl9FUlIsIGZt dCwgIyNfX1ZBX0FSR1NfXykKPiDCoAo+IC1leHRlcm4gaW50IGk5MTVfZHJpdmVyX2xvYWQoc3Ry dWN0IHBjaV9kZXYgKnBkZXYsCj4gLQkJCcKgwqDCoMKgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2Vf aWQgKmVudCwKPiAtCQkJwqDCoMKgwqBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKTsKPiAtZXh0 ZXJuIGludCBpOTE1X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7Cj4gLWV4dGVy biBpbnQgaTkxNV9kcml2ZXJfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUpOwo+IC1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0 IGRybV9kZXZpY2UgKiBkZXYpOwo+IC1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wcmVjbG9zZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0JCQkJwqBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ IC1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiAtCQkJCcKgwqBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+IMKgI2lmZGVmIENPTkZJR19D T01QQVQKPiDCoGV4dGVybiBsb25nIGk5MTVfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxw LCB1bnNpZ25lZCBpbnQgY21kLAo+IMKgCQkJwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBhcmcp Owo+IEBAIC0zNjg5LDcgKzM2NzYsNiBAQCBleHRlcm4gdm9pZCBpbnRlbF9pbml0X3BjaF9yZWZj bGsoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gwqBleHRlcm4gdm9pZCBpbnRlbF9zZXRfcnBz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKTsKPiDCoGV4dGVybiB2 b2lkIGludGVsX3NldF9tZW1vcnlfY3hzcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gwqAJCQkJwqDCoGJvb2wgZW5hYmxlKTsKPiAtZXh0ZXJuIHZvaWQgaW50ZWxfZGV0ZWN0 X3BjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiDCoAo+IMKgZXh0ZXJuIGJvb2wgaTkxNV9z ZW1hcGhvcmVfaXNfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ IMKgaW50IGk5MTVfcmVnX3JlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKLS0gCkpvb25hcyBMYWh0aW5lbgpPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRlcgpJ bnRlbCBDb3Jwb3JhdGlvbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK