From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: Re: [PATCH] drm: Add Grain Media GM12U320 driver v2 Date: Sun, 21 Jul 2019 23:12:55 +0200 Message-ID: References: <20190721132525.10396-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by gabe.freedesktop.org (Postfix) with ESMTPS id A294C89B03 for ; Sun, 21 Jul 2019 21:12:59 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id f9so37237617wre.12 for ; Sun, 21 Jul 2019 14:12:59 -0700 (PDT) In-Reply-To: <20190721132525.10396-1-hdegoede@redhat.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= , Maarten Lankhorst , Maxime Ripard , Sean Paul , Daniel Vetter , David Airlie Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgYWxsLAoKT24gMjEtMDctMTkgMTU6MjUsIEhhbnMgZGUgR29lZGUgd3JvdGU6Cj4gQWRkIGEg bW9kZXNldHRpbmcgZHJpdmVyIGZvciBHcmFpbiBNZWRpYSBHTTEyVTMyMCBiYXNlZCBkZXZpY2Vz Cj4gKHByaW1hcmlseSBBY2VyIEMxMjAgcHJvamVjdG9yLCBidXQgdGhlcmUgbWF5IGJlIGNvbXBh dGlibGUgZGV2aWNlcykuCj4gCj4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgZmIgZHJpdmVyIGZyb20g VmlhY2hlc2xhdiBOdXJtZWtoYW1pdG92Ogo+IGh0dHBzOi8vZ2l0aHViLmNvbS9zbGF2cm4vZ20x MnUzMjAKPiAKPiBUaGlzIGRyaXZlciB1c2VzIGRybV9zaW1wbGVfZGlzcGxheV9waXBlIHRvIGRl YWwgd2l0aCBhbGwgdGhlIGF0b21pYwo+IHN0dWZmLCBnZW1fc2htZW1faGVscGVyIGZ1bmN0aW9u cyBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgYW5kCj4gZHJtX2ZiZGV2X2dlbmVyaWNfc2V0dXAgZm9y IGZiZGV2IGVtdWxhdGlvbiwgc28gdGhhdCBsZWF2ZXMgdGhlIGRyaXZlcgo+IGl0c2VsZiB3aXRo IG9ubHkgdGhlIGFjdHVhbCBjb2RlIGZvciB0YWxraW5nIHRvIHRoZSBnbTEzdTMyMCBjaGlwLAo+ IGxlYWRpbmcgdG8gYSBuaWNlIHNpbXBsZSBhbmQgY2xlYW4gZHJpdmVyLgo+IAo+IENoYW5nZXMg aW4gdjI6Cj4gLUFkZCBkcm0tbWlzYyB0cmVlIHRvIE1BSU5UQUlORVJTCj4gLURyb3AgbW9kZV9j b25maWcucHJlZmVycmVkX2RlcHRoID0gMjQgLyBmaXggZmJkZXYgc3VwcG9ydAo+IAo+IFJldmll d2VkLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KPiBTaWduZWQtb2Zm LWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgoKSSd2ZSBwdXNoZWQgdGhp cyB0byBkcm0tbWlzYy1uZXh0IG5vdywgd2l0aCB0aGUgRFJJVkVSX1BSSU1FIGZsYWcKZHJvcHBl ZCwgYXMgdGhhdCBpcyBnb25lIGluIG5leHQuCgpSZWdhcmRzLAoKSGFucwoKCgo+IC0tLQo+ICAg TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ICAgZHJpdmVycy9n cHUvZHJtL0tjb25maWcgICAgICAgICAgICAgfCAgIDIgKwo+ICAgZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlICAgICAgICAgICAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tj b25maWcgICAgfCAgIDkgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlICAg fCAgIDIgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwLmMgfCA4MTUgKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgNiBmaWxlcyBjaGFuZ2VkLCA4MzUgaW5zZXJ0 aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9L Y29uZmlnCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01h a2VmaWxlCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dt MTJ1MzIwLmMKPiAKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+IGlu ZGV4IGUyZGIwZDQ2Nzk2Ni4uMzI5MGJjZmU2N2IyIDEwMDY0NAo+IC0tLSBhL01BSU5UQUlORVJT Cj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtNTAyNSw2ICs1MDI1LDEyIEBAIFM6CU1haW50YWlu ZWQKPiAgIEY6CWRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1mZWl5YW5nLWZ5MDcwMjRkaTI2 YTMwZC5jCj4gICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9w YW5lbC9mZWl5YW5nLGZ5MDcwMjRkaTI2YTMwZC50eHQKPiAgIAo+ICtEUk0gRFJJVkVSIEZPUiBH UkFJTiBNRURJQSBHTTEyVTMyMCBQUk9KRUNUT1JTCj4gK006CUhhbnMgZGUgR29lZGUgPGhkZWdv ZWRlQHJlZGhhdC5jb20+Cj4gK1Q6CWdpdCBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9k cm0vZHJtLW1pc2MKPiArUzoJTWFpbnRhaW5lZAo+ICtGOglkcml2ZXJzL2dwdS9kcm0vZ20xMnUz MjAvCj4gKwo+ICAgRFJNIERSSVZFUiBGT1IgSUxJVEVLIElMSTkyMjUgUEFORUxTCj4gICBNOglE YXZpZCBMZWNobmVyIDxkYXZpZEBsZWNobm9sb2d5LmNvbT4KPiAgIFM6CU1haW50YWluZWQKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZwo+IGluZGV4IDM2ZjkwMGQ2Mzk3OS4uYWY4MjAwMjgyNWVkIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBA QCAtMzQzLDYgKzM0Myw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L0tjb25m aWciCj4gICAKPiAgIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FzcGVlZC9LY29uZmlnIgo+ICAg Cj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWciCj4gKwo+ICAgIyBL ZWVwIGxlZ2FjeSBkcml2ZXJzIGxhc3QKPiAgIAo+ICAgbWVudWNvbmZpZyBEUk1fTEVHQUNZCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQo+IGluZGV4IDcyZjUwMzZkOWJmYS4uOGE0Zjg1MWY1NGEyIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+IEBAIC0xMTMsMyArMTEzLDQgQEAgb2JqLSQoQ09ORklHX0RSTV9WQk9YVklERU8pICs9IHZi b3h2aWRlby8KPiAgIG9iai0kKENPTkZJR19EUk1fTElNQSkgICs9IGxpbWEvCj4gICBvYmotJChD T05GSUdfRFJNX1BBTkZST1NUKSArPSBwYW5mcm9zdC8KPiAgIG9iai0kKENPTkZJR19EUk1fQVNQ RUVEX0dGWCkgKz0gYXNwZWVkLwo+ICtvYmotJChDT05GSUdfRFJNX0dNMTJVMzIwKSArPSBnbTEy dTMyMC8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi4wODgyYTYxYzA0ZDUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcKPiBAQCAtMCwwICsxLDkgQEAKPiArIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArY29uZmlnIERSTV9HTTEyVTMyMAo+ ICsJdHJpc3RhdGUgIkdNMTJVMzIwIGRyaXZlciBmb3IgVVNCIHByb2plY3RvcnMiCj4gKwlkZXBl bmRzIG9uIERSTSAmJiBVU0IKPiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IERS TV9HRU1fU0hNRU1fSEVMUEVSCj4gKwloZWxwCj4gKwkgVGhpcyBpcyBhIEtNUyBkcml2ZXIgZm9y IHByb2plY3RvcnMgd2hpY2ggdXNlIHRoZSBHTTEyVTMyMCBjaGlwc2V0Cj4gKwkgZm9yIHZpZGVv IHRyYW5zZmVyIG92ZXIgVVNCMi8zLCBzdWNoIGFzIHRoZSBBY2VyIEMxMjAgbWluaSBwcm9qZWN0 b3IuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9nbTEydTMyMC9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi5lYTUxNDM4MmYwMGQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlCj4gQEAgLTAsMCArMSwyIEBACj4gKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4gK29iai0kKENPTkZJR19EUk1fR00x MlUzMjApICs9IGdtMTJ1MzIwLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1 MzIwL2dtMTJ1MzIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjAuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zZGZlODZkZWZlZmMKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwLmMK PiBAQCAtMCwwICsxLDgxNSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCsKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTkgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVk aGF0LmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICsjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KPiArCj4gKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX3N0YXRlX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fZGFtYWdlX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9k cnYuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2ZpbGUuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZm9ybWF0X2hlbHBlci5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX3NobWVtX2hl bHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRf aGVscGVyX3Z0YWJsZXMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX3ZibGFuay5oPgo+ICsKPiArc3RhdGljIGJvb2wgZWNvX21vZGU7Cj4gK21vZHVsZV9wYXJh bShlY29fbW9kZSwgYm9vbCwgMDY0NCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MoZWNvX21vZGUsICJU dXJuIG9uIEVjbyBtb2RlIChsZXNzIGJyaWdodCwgbW9yZSBzaWxlbnQpIik7Cj4gKwo+ICsjZGVm aW5lIERSSVZFUl9OQU1FCQkiZ20xMnUzMjAiCj4gKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJHcmFp biBNZWRpYSBHTTEyVTMyMCBVU0IgcHJvamVjdG9yIGRpc3BsYXkiCj4gKyNkZWZpbmUgRFJJVkVS X0RBVEUJCSIyMDE5Igo+ICsjZGVmaW5lIERSSVZFUl9NQUpPUgkJMQo+ICsjZGVmaW5lIERSSVZF Ul9NSU5PUgkJMAo+ICsjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTEKPiArCj4gKy8qCj4gKyAq IFRoZSBETFAgaGFzIGFuIGFjdHVhbCB3aWR0aCBvZiA4NTQgcGl4ZWxzLCBidXQgdGhhdCBpcyBu b3QgYSBtdWx0aXBsZQo+ICsgKiBvZiA4LCBicmVha2luZyB0aGluZ3MgbGVmdCBhbmQgcmlnaHQs IHNvIHdlIGV4cG9ydCBhIHdpZHRoIG9mIDg0OC4KPiArICovCj4gKyNkZWZpbmUgR00xMlUzMjBf VVNFUl9XSURUSAkJODQ4Cj4gKyNkZWZpbmUgR00xMlUzMjBfUkVBTF9XSURUSAkJODU0Cj4gKyNk ZWZpbmUgR00xMlUzMjBfSEVJR0hUCQkJNDgwCj4gKwo+ICsjZGVmaW5lIEdNMTJVMzIwX0JMT0NL X0NPVU5UCQkyMAo+ICsKPiArI2RlZmluZSBNSVNDX1JDVl9FUFQJCQkxCj4gKyNkZWZpbmUgREFU QV9SQ1ZfRVBUCQkJMgo+ICsjZGVmaW5lIERBVEFfU05EX0VQVAkJCTMKPiArI2RlZmluZSBNSVND X1NORF9FUFQJCQk0Cj4gKwo+ICsjZGVmaW5lIERBVEFfQkxPQ0tfSEVBREVSX1NJWkUJCTg0Cj4g KyNkZWZpbmUgREFUQV9CTE9DS19DT05URU5UX1NJWkUJCTY0NTEyCj4gKyNkZWZpbmUgREFUQV9C TE9DS19GT09URVJfU0laRQkJMjAKPiArI2RlZmluZSBEQVRBX0JMT0NLX1NJWkUJCQkoREFUQV9C TE9DS19IRUFERVJfU0laRSArIFwKPiArCQkJCQkgREFUQV9CTE9DS19DT05URU5UX1NJWkUgKyBc Cj4gKwkJCQkJIERBVEFfQkxPQ0tfRk9PVEVSX1NJWkUpCj4gKyNkZWZpbmUgREFUQV9MQVNUX0JM T0NLX0NPTlRFTlRfU0laRQk0MDMyCj4gKyNkZWZpbmUgREFUQV9MQVNUX0JMT0NLX1NJWkUJCShE QVRBX0JMT0NLX0hFQURFUl9TSVpFICsgXAo+ICsJCQkJCSBEQVRBX0xBU1RfQkxPQ0tfQ09OVEVO VF9TSVpFICsgXAo+ICsJCQkJCSBEQVRBX0JMT0NLX0ZPT1RFUl9TSVpFKQo+ICsKPiArI2RlZmlu ZSBDTURfU0laRQkJCTMxCj4gKyNkZWZpbmUgUkVBRF9TVEFUVVNfU0laRQkJMTMKPiArI2RlZmlu ZSBNSVNDX1ZBTFVFX1NJWkUJCQk0Cj4gKwo+ICsjZGVmaW5lIENNRF9USU1FT1VUCQkJbXNlY3Nf dG9famlmZmllcygyMDApCj4gKyNkZWZpbmUgREFUQV9USU1FT1VUCQkJbXNlY3NfdG9famlmZmll cygxMDAwKQo+ICsjZGVmaW5lIElETEVfVElNRU9VVAkJCW1zZWNzX3RvX2ppZmZpZXMoMjAwMCkK PiArI2RlZmluZSBGSVJTVF9GUkFNRV9USU1FT1VUCQltc2Vjc190b19qaWZmaWVzKDIwMDApCj4g Kwo+ICsjZGVmaW5lIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0EJCTB4ZmYKPiArI2RlZmluZSBNSVND X1JFUV9HRVRfU0VUX0VDT19CCQkweDM1Cj4gKy8qIFdpbmRvd3MgZHJpdmVyIGRvZXMgb25jZSBl dmVyeSBzZWNvbmQsIHdpdGggYXJnIGQgPSAxLCBvdGhlciBhcmdzIDAgKi8KPiArI2RlZmluZSBN SVNDX1JFUV9VTktOT1dOMV9BCQkweGZmCj4gKyNkZWZpbmUgTUlTQ19SRVFfVU5LTk9XTjFfQgkJ MHgzOAo+ICsvKiBXaW5kb3dzIGRyaXZlciBkb2VzIHRoaXMgb24gaW5pdCwgd2l0aCBhcmcgYSwg YiA9IDAsIGMgPSAweGEwLCBkID0gNCAqLwo+ICsjZGVmaW5lIE1JU0NfUkVRX1VOS05PV04yX0EJ CTB4YTUKPiArI2RlZmluZSBNSVNDX1JFUV9VTktOT1dOMl9CCQkweDAwCj4gKwo+ICtzdHJ1Y3Qg Z20xMnUzMjBfZGV2aWNlIHsKPiArCXN0cnVjdCBkcm1fZGV2aWNlCSAgICAgICAgIGRldjsKPiAr CXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAgIHBpcGU7Cj4gKwlzdHJ1Y3QgZHJtX2Nv bm5lY3RvcgkgICAgICAgICBjb25uOwo+ICsJc3RydWN0IHVzYl9kZXZpY2UgICAgICAgICAgICAg ICAqdWRldjsKPiArCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgKmNtZF9idWY7Cj4g Kwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgICpkYXRhX2J1ZltHTTEyVTMyMF9CTE9D S19DT1VOVF07Cj4gKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2VuYWJs ZWQ7Cj4gKwlzdHJ1Y3Qgewo+ICsJCWJvb2wgICAgICAgICAgICAgICAgICAgICBydW47Cj4gKwkJ c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxOwo+ICsJCXN0cnVjdCB3b3JrX3N0cnVjdCAg ICAgICB3b3JrOwo+ICsJCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICB3YWl0cTsKPiArCQlzdHJ1 Y3QgbXV0ZXggICAgICAgICAgICAgbG9jazsKPiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICAq ZmI7Cj4gKwkJc3RydWN0IGRybV9yZWN0ICAgICAgICAgIHJlY3Q7Cj4gKwl9IGZiX3VwZGF0ZTsK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGNtZF9kYXRhW0NNRF9TSVpFXSA9IHsKPiAr CTB4NTUsIDB4NTMsIDB4NDIsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDY4 LCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGZmLAo+ICsJMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHg4MCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFy IGNtZF9kcmF3W0NNRF9TSVpFXSA9IHsKPiArCTB4NTUsIDB4NTMsIDB4NDIsIDB4NDMsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDEwLCAweGZlLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhkMSwgMHgwNSwgMHgw MCwgMHg0MCwKPiArCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGNtZF9taXNjW0NNRF9TSVpFXSA9IHsKPiArCTB4 NTUsIDB4NTMsIDB4NDIsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDA0LCAw eDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDEwLCAweGZkLAo+ICsJMHgwMCwgMHgwMCwg MHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGRh dGFfYmxvY2tfaGVhZGVyW0RBVEFfQkxPQ0tfSEVBREVSX1NJWkVdID0gewo+ICsJMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsCj4gKwkweGZiLCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ ICsJMHgwMCwgMHgwNCwgMHgxNSwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwKPiArCTB4 MDEsIDB4MDAsIDB4MDAsIDB4ZGIKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGRhdGFf bGFzdF9ibG9ja19oZWFkZXJbREFUQV9CTE9DS19IRUFERVJfU0laRV0gPSB7Cj4gKwkweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwKPiArCTB4ZmIsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs Cj4gKwkweDJhLCAweDAwLCAweDIwLCAweDAwLCAweGMwLCAweDBmLCAweDAwLCAweDAwLAo+ICsJ MHgwMSwgMHgwMCwgMHgwMCwgMHhkNwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgZGF0 YV9ibG9ja19mb290ZXJbREFUQV9CTE9DS19GT09URVJfU0laRV0gPSB7Cj4gKwkweGZiLCAweDE0 LCAweDAyLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4ODAsIDB4MDAsIDB4MDAsIDB4 NGYKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZ20xMnUzMjBfdXNiX2FsbG9jKHN0cnVjdCBnbTEy dTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICt7Cj4gKwlpbnQgaSwgYmxvY2tfc2l6ZTsKPiArCWNv bnN0IGNoYXIgKmhkcjsKPiArCj4gKwlnbTEydTMyMC0+Y21kX2J1ZiA9IGttYWxsb2MoQ01EX1NJ WkUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFnbTEydTMyMC0+Y21kX2J1ZikKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgR00xMlUzMjBfQkxPQ0tfQ09VTlQ7IGkr Kykgewo+ICsJCWlmIChpID09IEdNMTJVMzIwX0JMT0NLX0NPVU5UIC0gMSkgewo+ICsJCQlibG9j a19zaXplID0gREFUQV9MQVNUX0JMT0NLX1NJWkU7Cj4gKwkJCWhkciA9IGRhdGFfbGFzdF9ibG9j a19oZWFkZXI7Cj4gKwkJfSBlbHNlIHsKPiArCQkJYmxvY2tfc2l6ZSA9IERBVEFfQkxPQ0tfU0la RTsKPiArCQkJaGRyID0gZGF0YV9ibG9ja19oZWFkZXI7Cj4gKwkJfQo+ICsKPiArCQlnbTEydTMy MC0+ZGF0YV9idWZbaV0gPSBremFsbG9jKGJsb2NrX3NpemUsIEdGUF9LRVJORUwpOwo+ICsJCWlm ICghZ20xMnUzMjAtPmRhdGFfYnVmW2ldKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkJ bWVtY3B5KGdtMTJ1MzIwLT5kYXRhX2J1ZltpXSwgaGRyLCBEQVRBX0JMT0NLX0hFQURFUl9TSVpF KTsKPiArCQltZW1jcHkoZ20xMnUzMjAtPmRhdGFfYnVmW2ldICsKPiArCQkJCShibG9ja19zaXpl IC0gREFUQV9CTE9DS19GT09URVJfU0laRSksCj4gKwkJICAgICAgIGRhdGFfYmxvY2tfZm9vdGVy LCBEQVRBX0JMT0NLX0ZPT1RFUl9TSVpFKTsKPiArCX0KPiArCj4gKwlnbTEydTMyMC0+ZmJfdXBk YXRlLndvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoRFJJVkVSX05BTUUpOwo+ ICsJaWYgKCFnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmtxKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEydTMyMF91c2JfZnJl ZShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKPiArewo+ICsJaW50IGk7Cj4gKwo+ ICsJaWYgKGdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EpCj4gKwkJZGVzdHJveV93b3JrcXVldWUo Z20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrcSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEdNMTJV MzIwX0JMT0NLX0NPVU5UOyBpKyspCj4gKwkJa2ZyZWUoZ20xMnUzMjAtPmRhdGFfYnVmW2ldKTsK PiArCj4gKwlrZnJlZShnbTEydTMyMC0+Y21kX2J1Zik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Z20xMnUzMjBfbWlzY19yZXF1ZXN0KHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwLAo+ ICsJCQkJIHU4IHJlcV9hLCB1OCByZXFfYiwKPiArCQkJCSB1OCBhcmdfYSwgdTggYXJnX2IsIHU4 IGFyZ19jLCB1OCBhcmdfZCkKPiArewo+ICsJaW50IHJldCwgbGVuOwo+ICsKPiArCW1lbWNweShn bTEydTMyMC0+Y21kX2J1ZiwgJmNtZF9taXNjLCBDTURfU0laRSk7Cj4gKwlnbTEydTMyMC0+Y21k X2J1ZlsyMF0gPSByZXFfYTsKPiArCWdtMTJ1MzIwLT5jbWRfYnVmWzIxXSA9IHJlcV9iOwo+ICsJ Z20xMnUzMjAtPmNtZF9idWZbMjJdID0gYXJnX2E7Cj4gKwlnbTEydTMyMC0+Y21kX2J1ZlsyM10g PSBhcmdfYjsKPiArCWdtMTJ1MzIwLT5jbWRfYnVmWzI0XSA9IGFyZ19jOwo+ICsJZ20xMnUzMjAt PmNtZF9idWZbMjVdID0gYXJnX2Q7Cj4gKwo+ICsJLyogU2VuZCByZXF1ZXN0ICovCj4gKwlyZXQg PSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCj4gKwkJCSAgIHVzYl9zbmRidWxrcGlwZShn bTEydTMyMC0+dWRldiwgTUlTQ19TTkRfRVBUKSwKPiArCQkJICAgZ20xMnUzMjAtPmNtZF9idWYs IENNRF9TSVpFLCAmbGVuLCBDTURfVElNRU9VVCk7Cj4gKwlpZiAocmV0IHx8IGxlbiAhPSBDTURf U0laRSkgewo+ICsJCWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2LT5kZXYsICJNaXNjLiByZXEuIGVy cm9yICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsKPiArCS8qIFJlYWQg dmFsdWUgKi8KPiArCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKPiArCQkJICAg dXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIwLT51ZGV2LCBNSVNDX1JDVl9FUFQpLAo+ICsJCQkgICBn bTEydTMyMC0+Y21kX2J1ZiwgTUlTQ19WQUxVRV9TSVpFLCAmbGVuLAo+ICsJCQkgICBEQVRBX1RJ TUVPVVQpOwo+ICsJaWYgKHJldCB8fCBsZW4gIT0gTUlTQ19WQUxVRV9TSVpFKSB7Cj4gKwkJZGV2 X2VycigmZ20xMnUzMjAtPnVkZXYtPmRldiwgIk1pc2MuIHZhbHVlIGVycm9yICVkXG4iLCByZXQp Owo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsJLyogY21kX2J1ZlswXSBub3cgY29udGFpbnMg dGhlIHJlYWQgdmFsdWUsIHdoaWNoIHdlIGRvbid0IHVzZSAqLwo+ICsKPiArCS8qIFJlYWQgc3Rh dHVzICovCj4gKwlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCj4gKwkJCSAgIHVz Yl9yY3ZidWxrcGlwZShnbTEydTMyMC0+dWRldiwgTUlTQ19SQ1ZfRVBUKSwKPiArCQkJICAgZ20x MnUzMjAtPmNtZF9idWYsIFJFQURfU1RBVFVTX1NJWkUsICZsZW4sCj4gKwkJCSAgIENNRF9USU1F T1VUKTsKPiArCWlmIChyZXQgfHwgbGVuICE9IFJFQURfU1RBVFVTX1NJWkUpIHsKPiArCQlkZXZf ZXJyKCZnbTEydTMyMC0+dWRldi0+ZGV2LCAiTWlzYy4gc3RhdHVzIGVycm9yICVkXG4iLCByZXQp Owo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBnbTEydTMyMF8zMmJwcF90b18yNGJwcF9wYWNrZWQodTggKmRzdCwgdTggKnNy YywgaW50IGxlbikKPiArewo+ICsJd2hpbGUgKGxlbi0tKSB7Cj4gKwkJKmRzdCsrID0gKnNyYysr Owo+ICsJCSpkc3QrKyA9ICpzcmMrKzsKPiArCQkqZHN0KysgPSAqc3JjKys7Cj4gKwkJc3JjKys7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NvcHlfZmJfdG9fYmxvY2tz KHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICt7Cj4gKwlpbnQgYmxvY2ssIGRz dF9vZmZzZXQsIGxlbiwgcmVtYWluLCByZXQsIHgxLCB4MiwgeTEsIHkyOwo+ICsJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwl2b2lkICp2YWRkcjsKPiArCXU4ICpzcmM7Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKPiArCj4gKwlpZiAoIWdtMTJ1 MzIwLT5mYl91cGRhdGUuZmIpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJZmIgPSBnbTEydTMy MC0+ZmJfdXBkYXRlLmZiOwo+ICsJeDEgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QueDE7Cj4g Kwl4MiA9IGdtMTJ1MzIwLT5mYl91cGRhdGUucmVjdC54MjsKPiArCXkxID0gZ20xMnUzMjAtPmZi X3VwZGF0ZS5yZWN0LnkxOwo+ICsJeTIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QueTI7Cj4g Kwo+ICsJdmFkZHIgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSk7Cj4gKwlpZiAoSVNf RVJSKHZhZGRyKSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHZtYXAgZmI6ICVsZFxuIiwg UFRSX0VSUih2YWRkcikpOwo+ICsJCWdvdG8gcHV0X2ZiOwo+ICsJfQo+ICsKPiArCWlmIChmYi0+ b2JqWzBdLT5pbXBvcnRfYXR0YWNoKSB7Cj4gKwkJcmV0ID0gZG1hX2J1Zl9iZWdpbl9jcHVfYWNj ZXNzKAo+ICsJCQlmYi0+b2JqWzBdLT5pbXBvcnRfYXR0YWNoLT5kbWFidWYsIERNQV9GUk9NX0RF VklDRSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fRVJST1IoImRtYV9idWZfYmVnaW5fY3B1 X2FjY2VzcyBlcnI6ICVkXG4iLCByZXQpOwo+ICsJCQlnb3RvIHZ1bm1hcDsKPiArCQl9Cj4gKwl9 Cj4gKwo+ICsJc3JjID0gdmFkZHIgKyB5MSAqIGZiLT5waXRjaGVzWzBdICsgeDEgKiA0Owo+ICsK PiArCXgxICs9IChHTTEyVTMyMF9SRUFMX1dJRFRIIC0gR00xMlUzMjBfVVNFUl9XSURUSCkgLyAy Owo+ICsJeDIgKz0gKEdNMTJVMzIwX1JFQUxfV0lEVEggLSBHTTEyVTMyMF9VU0VSX1dJRFRIKSAv IDI7Cj4gKwo+ICsJZm9yICg7IHkxIDwgeTI7IHkxKyspIHsKPiArCQlyZW1haW4gPSAwOwo+ICsJ CWxlbiA9ICh4MiAtIHgxKSAqIDM7Cj4gKwkJZHN0X29mZnNldCA9ICh5MSAqIEdNMTJVMzIwX1JF QUxfV0lEVEggKyB4MSkgKiAzOwo+ICsJCWJsb2NrID0gZHN0X29mZnNldCAvIERBVEFfQkxPQ0tf Q09OVEVOVF9TSVpFOwo+ICsJCWRzdF9vZmZzZXQgJT0gREFUQV9CTE9DS19DT05URU5UX1NJWkU7 Cj4gKwo+ICsJCWlmICgoZHN0X29mZnNldCArIGxlbikgPiBEQVRBX0JMT0NLX0NPTlRFTlRfU0la RSkgewo+ICsJCQlyZW1haW4gPSBkc3Rfb2Zmc2V0ICsgbGVuIC0gREFUQV9CTE9DS19DT05URU5U X1NJWkU7Cj4gKwkJCWxlbiA9IERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpFIC0gZHN0X29mZnNldDsK PiArCQl9Cj4gKwo+ICsJCWRzdF9vZmZzZXQgKz0gREFUQV9CTE9DS19IRUFERVJfU0laRTsKPiAr CQlsZW4gLz0gMzsKPiArCj4gKwkJZ20xMnUzMjBfMzJicHBfdG9fMjRicHBfcGFja2VkKAo+ICsJ CQlnbTEydTMyMC0+ZGF0YV9idWZbYmxvY2tdICsgZHN0X29mZnNldCwKPiArCQkJc3JjLCBsZW4p Owo+ICsKPiArCQlpZiAocmVtYWluKSB7Cj4gKwkJCWJsb2NrKys7Cj4gKwkJCWRzdF9vZmZzZXQg PSBEQVRBX0JMT0NLX0hFQURFUl9TSVpFOwo+ICsJCQlnbTEydTMyMF8zMmJwcF90b18yNGJwcF9w YWNrZWQoCj4gKwkJCQlnbTEydTMyMC0+ZGF0YV9idWZbYmxvY2tdICsgZHN0X29mZnNldCwKPiAr CQkJCXNyYyArIGxlbiAqIDQsIHJlbWFpbiAvIDMpOwo+ICsJCX0KPiArCQlzcmMgKz0gZmItPnBp dGNoZXNbMF07Cj4gKwl9Cj4gKwo+ICsJaWYgKGZiLT5vYmpbMF0tPmltcG9ydF9hdHRhY2gpIHsK PiArCQlyZXQgPSBkbWFfYnVmX2VuZF9jcHVfYWNjZXNzKGZiLT5vYmpbMF0tPmltcG9ydF9hdHRh Y2gtPmRtYWJ1ZiwKPiArCQkJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7Cj4gKwkJaWYgKHJldCkK PiArCQkJRFJNX0VSUk9SKCJkbWFfYnVmX2VuZF9jcHVfYWNjZXNzIGVycjogJWRcbiIsIHJldCk7 Cj4gKwl9Cj4gK3Z1bm1hcDoKPiArCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpbMF0sIHZh ZGRyKTsKPiArcHV0X2ZiOgo+ICsJZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7Cj4gKwlnbTEydTMy MC0+ZmJfdXBkYXRlLmZiID0gTlVMTDsKPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZnbTEy dTMyMC0+ZmJfdXBkYXRlLmxvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtMTJ1MzIwX2Zi X3VwZGF0ZV9yZWFkeShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKPiArewo+ICsJ aW50IHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOwo+ ICsJcmV0ID0gIWdtMTJ1MzIwLT5mYl91cGRhdGUucnVuIHx8IGdtMTJ1MzIwLT5mYl91cGRhdGUu ZmIgIT0gTlVMTDsKPiArCW11dGV4X3VubG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEydTMyMF9mYl91 cGRhdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBnbTEy dTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0KPiArCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGdt MTJ1MzIwX2RldmljZSwgZmJfdXBkYXRlLndvcmspOwo+ICsJaW50IGRyYXdfc3RhdHVzX3RpbWVv dXQgPSBGSVJTVF9GUkFNRV9USU1FT1VUOwo+ICsJaW50IGJsb2NrLCBibG9ja19zaXplLCBsZW47 Cj4gKwlpbnQgZnJhbWUgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJd2hpbGUgKGdtMTJ1 MzIwLT5mYl91cGRhdGUucnVuKSB7Cj4gKwkJZ20xMnUzMjBfY29weV9mYl90b19ibG9ja3MoZ20x MnUzMjApOwo+ICsKPiArCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBHTTEyVTMyMF9CTE9DS19D T1VOVDsgYmxvY2srKykgewo+ICsJCQlpZiAoYmxvY2sgPT0gR00xMlUzMjBfQkxPQ0tfQ09VTlQg LSAxKQo+ICsJCQkJYmxvY2tfc2l6ZSA9IERBVEFfTEFTVF9CTE9DS19TSVpFOwo+ICsJCQllbHNl Cj4gKwkJCQlibG9ja19zaXplID0gREFUQV9CTE9DS19TSVpFOwo+ICsKPiArCQkJLyogU2VuZCBk YXRhIGNvbW1hbmQgdG8gZGV2aWNlICovCj4gKwkJCW1lbWNweShnbTEydTMyMC0+Y21kX2J1Ziwg Y21kX2RhdGEsIENNRF9TSVpFKTsKPiArCQkJZ20xMnUzMjAtPmNtZF9idWZbOF0gPSBibG9ja19z aXplICYgMHhmZjsKPiArCQkJZ20xMnUzMjAtPmNtZF9idWZbOV0gPSBibG9ja19zaXplID4+IDg7 Cj4gKwkJCWdtMTJ1MzIwLT5jbWRfYnVmWzIwXSA9IDB4ZmMgLSBibG9jayAqIDQ7Cj4gKwkJCWdt MTJ1MzIwLT5jbWRfYnVmWzIxXSA9IGJsb2NrIHwgKGZyYW1lIDw8IDcpOwo+ICsKPiArCQkJcmV0 ID0gdXNiX2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2LAo+ICsJCQkJdXNiX3NuZGJ1bGtwaXBlKGdt MTJ1MzIwLT51ZGV2LCBEQVRBX1NORF9FUFQpLAo+ICsJCQkJZ20xMnUzMjAtPmNtZF9idWYsIENN RF9TSVpFLCAmbGVuLAo+ICsJCQkJQ01EX1RJTUVPVVQpOwo+ICsJCQlpZiAocmV0IHx8IGxlbiAh PSBDTURfU0laRSkKPiArCQkJCWdvdG8gZXJyOwo+ICsKPiArCQkJLyogU2VuZCBkYXRhIGJsb2Nr IHRvIGRldmljZSAqLwo+ICsJCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCj4g KwkJCQl1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfU05EX0VQVCksCj4gKwkJ CQlnbTEydTMyMC0+ZGF0YV9idWZbYmxvY2tdLCBibG9ja19zaXplLAo+ICsJCQkJJmxlbiwgREFU QV9USU1FT1VUKTsKPiArCQkJaWYgKHJldCB8fCBsZW4gIT0gYmxvY2tfc2l6ZSkKPiArCQkJCWdv dG8gZXJyOwo+ICsKPiArCQkJLyogUmVhZCBzdGF0dXMgKi8KPiArCQkJcmV0ID0gdXNiX2J1bGtf bXNnKGdtMTJ1MzIwLT51ZGV2LAo+ICsJCQkJdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIwLT51ZGV2 LCBEQVRBX1JDVl9FUFQpLAo+ICsJCQkJZ20xMnUzMjAtPmNtZF9idWYsIFJFQURfU1RBVFVTX1NJ WkUsICZsZW4sCj4gKwkJCQlDTURfVElNRU9VVCk7Cj4gKwkJCWlmIChyZXQgfHwgbGVuICE9IFJF QURfU1RBVFVTX1NJWkUpCj4gKwkJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwo+ICsJCS8qIFNlbmQg ZHJhdyBjb21tYW5kIHRvIGRldmljZSAqLwo+ICsJCW1lbWNweShnbTEydTMyMC0+Y21kX2J1Ziwg Y21kX2RyYXcsIENNRF9TSVpFKTsKPiArCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVk ZXYsCj4gKwkJCXVzYl9zbmRidWxrcGlwZShnbTEydTMyMC0+dWRldiwgREFUQV9TTkRfRVBUKSwK PiArCQkJZ20xMnUzMjAtPmNtZF9idWYsIENNRF9TSVpFLCAmbGVuLCBDTURfVElNRU9VVCk7Cj4g KwkJaWYgKHJldCB8fCBsZW4gIT0gQ01EX1NJWkUpCj4gKwkJCWdvdG8gZXJyOwo+ICsKPiArCQkv KiBSZWFkIHN0YXR1cyAqLwo+ICsJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwK PiArCQkJdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIwLT51ZGV2LCBEQVRBX1JDVl9FUFQpLAo+ICsJ CQlnbTEydTMyMC0+Y21kX2J1ZiwgUkVBRF9TVEFUVVNfU0laRSwgJmxlbiwKPiArCQkJZHJhd19z dGF0dXNfdGltZW91dCk7Cj4gKwkJaWYgKHJldCB8fCBsZW4gIT0gUkVBRF9TVEFUVVNfU0laRSkK PiArCQkJZ290byBlcnI7Cj4gKwo+ICsJCWRyYXdfc3RhdHVzX3RpbWVvdXQgPSBDTURfVElNRU9V VDsKPiArCQlmcmFtZSA9ICFmcmFtZTsKPiArCj4gKwkJLyoKPiArCQkgKiBXZSBtdXN0IGRyYXcg YSBmcmFtZSBldmVyeSAycyBvdGhlcndpc2UgdGhlIHByb2plY3Rvcgo+ICsJCSAqIHN3aXRjaGVz IGJhY2sgdG8gc2hvd2luZyBpdHMgbG9nby4KPiArCQkgKi8KPiArCQl3YWl0X2V2ZW50X3RpbWVv dXQoZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSwKPiArCQkJCSAgIGdtMTJ1MzIwX2ZiX3VwZGF0 ZV9yZWFkeShnbTEydTMyMCksCj4gKwkJCQkgICBJRExFX1RJTUVPVVQpOwo+ICsJfQo+ICsJcmV0 dXJuOwo+ICtlcnI6Cj4gKwkvKiBEbyBub3QgbG9nIGVycm9ycyBjYXVzZWQgYnkgbW9kdWxlIHVu bG9hZCBvciBkZXZpY2UgdW5wbHVnICovCj4gKwlpZiAocmV0ICE9IC1FQ09OTlJFU0VUICYmIHJl dCAhPSAtRVNIVVRET1dOKQo+ICsJCWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2LT5kZXYsICJGcmFt ZSB1cGRhdGUgZXJyb3I6ICVkXG4iLCByZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEy dTMyMF9mYl9tYXJrX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICsJCQkJICAg c3RydWN0IGRybV9yZWN0ICpkaXJ0eSkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAq Z20xMnUzMjAgPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKm9sZF9mYiA9IE5VTEw7Cj4gKwlib29sIHdha2V1cCA9IGZhbHNlOwo+ICsKPiArCW11dGV4 X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gKwo+ICsJaWYgKGdtMTJ1MzIwLT5m Yl91cGRhdGUuZmIgIT0gZmIpIHsKPiArCQlvbGRfZmIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLmZi Owo+ICsJCWRybV9mcmFtZWJ1ZmZlcl9nZXQoZmIpOwo+ICsJCWdtMTJ1MzIwLT5mYl91cGRhdGUu ZmIgPSBmYjsKPiArCQlnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QgPSAqZGlydHk7Cj4gKwkJd2Fr ZXVwID0gdHJ1ZTsKPiArCX0gZWxzZSB7Cj4gKwkJc3RydWN0IGRybV9yZWN0ICpyZWN0ID0gJmdt MTJ1MzIwLT5mYl91cGRhdGUucmVjdDsKPiArCj4gKwkJcmVjdC0+eDEgPSBtaW4ocmVjdC0+eDEs IGRpcnR5LT54MSk7Cj4gKwkJcmVjdC0+eTEgPSBtaW4ocmVjdC0+eTEsIGRpcnR5LT55MSk7Cj4g KwkJcmVjdC0+eDIgPSBtYXgocmVjdC0+eDIsIGRpcnR5LT54Mik7Cj4gKwkJcmVjdC0+eTIgPSBt YXgocmVjdC0+eTIsIGRpcnR5LT55Mik7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZnbTEy dTMyMC0+ZmJfdXBkYXRlLmxvY2spOwo+ICsKPiArCWlmICh3YWtldXApCj4gKwkJd2FrZV91cCgm Z20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSk7Cj4gKwo+ICsJaWYgKG9sZF9mYikKPiArCQlkcm1f ZnJhbWVidWZmZXJfcHV0KG9sZF9mYik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdtMTJ1MzIw X3N0YXJ0X2ZiX3VwZGF0ZShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKPiArewo+ ICsJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKPiArCWdtMTJ1MzIwLT5m Yl91cGRhdGUucnVuID0gdHJ1ZTsKPiArCW11dGV4X3VubG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0 ZS5sb2NrKTsKPiArCj4gKwlxdWV1ZV93b3JrKGdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EsICZn bTEydTMyMC0+ZmJfdXBkYXRlLndvcmspOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEydTMy MF9zdG9wX2ZiX3VwZGF0ZShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKPiArewo+ ICsJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKPiArCWdtMTJ1MzIwLT5m Yl91cGRhdGUucnVuID0gZmFsc2U7Cj4gKwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRh dGUubG9jayk7Cj4gKwo+ICsJd2FrZV91cCgmZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSk7Cj4g KwljYW5jZWxfd29ya19zeW5jKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmspOwo+ICsKPiArCW11 dGV4X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gKwlpZiAoZ20xMnUzMjAtPmZi X3VwZGF0ZS5mYikgewo+ICsJCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZ20xMnUzMjAtPmZiX3VwZGF0 ZS5mYik7Cj4gKwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYiA9IE5VTEw7Cj4gKwl9Cj4gKwltdXRl eF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZ20xMnUzMjBfc2V0X2Vjb21vZGUoc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAp Cj4gK3sKPiArCXJldHVybiBnbTEydTMyMF9taXNjX3JlcXVlc3QoZ20xMnUzMjAsIE1JU0NfUkVR X0dFVF9TRVRfRUNPX0EsCj4gKwkJCQkgICAgIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0IsIDB4MDEg Lyogc2V0ICovLAo+ICsJCQkJICAgICBlY29fbW9kZSA/IDB4MDEgOiAweDAwLCAweDAwLCAweDAx KTsKPiArfQo+ICsKPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKy8qIGdtMTJ1MzIwIGNvbm5lY3RvcgkJ CQkJCSAgICAgICovCj4gKwo+ICsvKgo+ICsgKsKgV2UgdXNlIGZha2UgRURJRCBpbmZvIHNvIHRo YXQgdXNlcnNwYWNlIGtub3cgdGhhdCBpdCBpcyBkZWFsaW5nIHdpdGgKPiArICogYW4gQWNlciBw cm9qZWN0b3IsIHJhdGhlciB0aGVuIGxpc3RpbmcgdGhpcyBhcyBhbiAidW5rbm93biIgbW9uaXRv ci4KPiArICogTm90ZSB0aGlzIGFzc3VtZXMgdGhpcyBkcml2ZXIgaXMgb25seSBldmVyIHVzZWQg d2l0aCB0aGUgQWNlciBDMTIwLCBpZiB3ZQo+ICsgKiBhZGQgc3VwcG9ydCBmb3Igb3RoZXIgZGV2 aWNlcyB0aGUgdmVuZG9yIGFuZCBtb2RlbCBzaG91bGQgYmUgcGFyYW1ldGVyaXplZC4KPiArICov Cj4gK3N0YXRpYyBzdHJ1Y3QgZWRpZCBnbTEydTMyMF9lZGlkID0gewo+ICsJLmhlYWRlcgkJPSB7 IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAgfSwKPiArCS5t ZmdfaWQJCT0geyAweDA0LCAweDcyIH0sCS8qICJBQ1IiICovCj4gKwkucHJvZF9jb2RlCT0geyAw eDIwLCAweGMxIH0sCS8qIEMxMjBoICovCj4gKwkuc2VyaWFsCQk9IDB4YWE1NWFhNTUsCj4gKwku bWZnX3dlZWsJPSAxLAo+ICsJLm1mZ195ZWFyCT0gMTYsCj4gKwkudmVyc2lvbgk9IDEsCQkJLyog RURJRCAxLjMgKi8KPiArCS5yZXZpc2lvbgk9IDMsCQkJLyogRURJRCAxLjMgKi8KPiArCS5pbnB1 dAkJPSAweDA4LAkJCS8qIEFuYWxvZyBpbnB1dCAqLwo+ICsJLmZlYXR1cmVzCT0gMHgwYSwJCQkv KiBQcmVmIHRpbWluZyBpbiBEVEQgMSAqLwo+ICsJLnN0YW5kYXJkX3RpbWluZ3MgPSB7IHsgMSwg MSB9LCB7IDEsIDEgfSwgeyAxLCAxIH0sIHsgMSwgMSB9LAo+ICsJCQkgICAgICB7IDEsIDEgfSwg eyAxLCAxIH0sIHsgMSwgMSB9LCB7IDEsIDEgfSB9LAo+ICsJLmRldGFpbGVkX3RpbWluZ3MgPSB7 IHsKPiArCQkucGl4ZWxfY2xvY2sgPSAzMzgzLAo+ICsJCS8qIGhhY3RpdmUgPSA4NDgsIGhibGFu ayA9IDI1NiAqLwo+ICsJCS5kYXRhLnBpeGVsX2RhdGEuaGFjdGl2ZV9sbyA9IDB4NTAsCj4gKwkJ LmRhdGEucGl4ZWxfZGF0YS5oYmxhbmtfbG8gPSAweDAwLAo+ICsJCS5kYXRhLnBpeGVsX2RhdGEu aGFjdGl2ZV9oYmxhbmtfaGkgPSAweDMxLAo+ICsJCS8qIHZhY3RpdmUgPSA0ODAsIHZibGFuayA9 IDI4ICovCj4gKwkJLmRhdGEucGl4ZWxfZGF0YS52YWN0aXZlX2xvID0gMHhlMCwKPiArCQkuZGF0 YS5waXhlbF9kYXRhLnZibGFua19sbyA9IDB4MWMsCj4gKwkJLmRhdGEucGl4ZWxfZGF0YS52YWN0 aXZlX3ZibGFua19oaSA9IDB4MTAsCj4gKwkJLyogaHN5bmMgb2Zmc2V0IDQwIHB3IDEyOCwgdnN5 bmMgb2Zmc2V0IDEgcHcgNCAqLwo+ICsJCS5kYXRhLnBpeGVsX2RhdGEuaHN5bmNfb2Zmc2V0X2xv ID0gMHgyOCwKPiArCQkuZGF0YS5waXhlbF9kYXRhLmhzeW5jX3B1bHNlX3dpZHRoX2xvID0gMHg4 MCwKPiArCQkuZGF0YS5waXhlbF9kYXRhLnZzeW5jX29mZnNldF9wdWxzZV93aWR0aF9sbyA9IDB4 MTQsCj4gKwkJLmRhdGEucGl4ZWxfZGF0YS5oc3luY192c3luY19vZmZzZXRfcHVsc2Vfd2lkdGhf aGkgPSAweDAwLAo+ICsJCS8qIERpZ2l0YWwgc2VwYXJhdGUgc3luY3MsIGhzeW5jKywgdnN5bmMr ICovCj4gKwkJLmRhdGEucGl4ZWxfZGF0YS5taXNjID0gMHgxZSwKPiArCX0sIHsKPiArCQkucGl4 ZWxfY2xvY2sgPSAwLAo+ICsJCS5kYXRhLm90aGVyX2RhdGEudHlwZSA9IDB4ZmQsIC8qIE1vbml0 b3IgcmFuZ2VzICovCj4gKwkJLmRhdGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLm1pbl92ZnJlcSA9 IDU5LAo+ICsJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5tYXhfdmZyZXEgPSA2MSwKPiAr CQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEucmFuZ2UubWluX2hmcmVxX2toeiA9IDI5LAo+ICsJCS5k YXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5tYXhfaGZyZXFfa2h6ID0gMzIsCj4gKwkJLmRhdGEu b3RoZXJfZGF0YS5kYXRhLnJhbmdlLnBpeGVsX2Nsb2NrX21oeiA9IDQsIC8qIDQwIE1IeiAqLwo+ ICsJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5mbGFncyA9IDAsCj4gKwkJLmRhdGEub3Ro ZXJfZGF0YS5kYXRhLnJhbmdlLmZvcm11bGEuY3Z0ID0gewo+ICsJCQkweGEwLCAweDIwLCAweDIw LCAweDIwLCAweDIwLCAweDIwLCAweDIwIH0sCj4gKwl9LCB7Cj4gKwkJLnBpeGVsX2Nsb2NrID0g MCwKPiArCQkuZGF0YS5vdGhlcl9kYXRhLnR5cGUgPSAweGZjLCAvKiBNb2RlbCBzdHJpbmcgKi8K PiArCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEuc3RyLnN0ciA9IHsKPiArCQkJJ1AnLCAncicsICdv JywgJ2onLCAnZScsICdjJywgJ3QnLCAnbycsICdyJywgJ1xuJywKPiArCQkJJyAnLCAnICcsICAn ICcgfSwKPiArCX0sIHsKPiArCQkucGl4ZWxfY2xvY2sgPSAwLAo+ICsJCS5kYXRhLm90aGVyX2Rh dGEudHlwZSA9IDB4ZmUsIC8qIFVuc3BlY2lmaWVkIHRleHQgLyBwYWRkaW5nICovCj4gKwkJLmRh dGEub3RoZXJfZGF0YS5kYXRhLnN0ci5zdHIgPSB7Cj4gKwkJCSdcbicsICcgJywgJyAnLCAnICcs ICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsCj4gKwkJCScgJywgJyAnLCAgJyAnIH0sCj4g Kwl9IH0sCj4gKwkuY2hlY2tzdW0gPSAweDEzLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBnbTEy dTMyMF9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7 Cj4gKwlkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgJmdtMTJ1 MzIwX2VkaWQpOwo+ICsJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsICZnbTEy dTMyMF9lZGlkKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y X2hlbHBlcl9mdW5jcyBnbTEydTMyMF9jb25uX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5nZXRfbW9k ZXMgPSBnbTEydTMyMF9jb25uX2dldF9tb2RlcywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBnbTEydTMyMF9jb25uX2Z1bmNzID0gewo+ICsJLmZp bGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCj4gKwku ZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKPiArCS5yZXNldCA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVz dHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ ICt9Owo+ICsKPiArc3RhdGljIGludCBnbTEydTMyMF9jb25uX2luaXQoc3RydWN0IGdtMTJ1MzIw X2RldmljZSAqZ20xMnUzMjApCj4gK3sKPiArCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmZ20x MnUzMjAtPmNvbm4sICZnbTEydTMyMF9jb25uX2hlbHBlcl9mdW5jcyk7Cj4gKwlyZXR1cm4gZHJt X2Nvbm5lY3Rvcl9pbml0KCZnbTEydTMyMC0+ZGV2LCAmZ20xMnUzMjAtPmNvbm4sCj4gKwkJCQkg ICZnbTEydTMyMF9jb25uX2Z1bmNzLCBEUk1fTU9ERV9DT05ORUNUT1JfVkdBKTsKPiArfQo+ICsK PiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCj4gKy8qIGdtMTJ1MzIwIChzaW1wbGUpIGRpc3BsYXkgcGlwZQkJ CQkgICAgICAqLwo+ICsKPiArc3RhdGljIHZvaWQgZ20xMnUzMjBfcGlwZV9lbmFibGUoc3RydWN0 IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAo+ICsJCQkJIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJCSBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBwaXBlLT5j cnRjLmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgcmVjdCA9IHsgMCwgMCwg R00xMlUzMjBfVVNFUl9XSURUSCwgR00xMlUzMjBfSEVJR0hUIH07Cj4gKwo+ICsJZ20xMnUzMjBf ZmJfbWFya19kaXJ0eShwbGFuZV9zdGF0ZS0+ZmIsICZyZWN0KTsKPiArCWdtMTJ1MzIwX3N0YXJ0 X2ZiX3VwZGF0ZShnbTEydTMyMCk7Cj4gKwlnbTEydTMyMC0+cGlwZV9lbmFibGVkID0gdHJ1ZTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ20xMnUzMjBfcGlwZV9kaXNhYmxlKHN0cnVjdCBkcm1f c2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2Rldmlj ZSAqZ20xMnUzMjAgPSBwaXBlLT5jcnRjLmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJZ20xMnUz MjBfc3RvcF9mYl91cGRhdGUoZ20xMnUzMjApOwo+ICsJZ20xMnUzMjAtPnBpcGVfZW5hYmxlZCA9 IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEydTMyMF9waXBlX3VwZGF0ZShzdHJ1 Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCj4gKwkJCQkgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSA9IHBpcGUtPnBsYW5lLnN0YXRlOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJnBpcGUt PmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgcmVjdDsKPiArCj4gKwlpZiAoZHJtX2F0b21pY19o ZWxwZXJfZGFtYWdlX21lcmdlZChvbGRfc3RhdGUsIHN0YXRlLCAmcmVjdCkpCj4gKwkJZ20xMnUz MjBfZmJfbWFya19kaXJ0eShwaXBlLT5wbGFuZS5zdGF0ZS0+ZmIsICZyZWN0KTsKPiArCj4gKwlp ZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7Cj4gKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5l dmVudF9sb2NrKTsKPiArCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBjcnRjLT5z dGF0ZS0+ZXZlbnQpOwo+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7Cj4gKwkJc3Bpbl91 bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzIGdtMTJ1MzIwX3Bp cGVfZnVuY3MgPSB7Cj4gKwkuZW5hYmxlCSAgICA9IGdtMTJ1MzIwX3BpcGVfZW5hYmxlLAo+ICsJ LmRpc2FibGUgICAgPSBnbTEydTMyMF9waXBlX2Rpc2FibGUsCj4gKwkudXBkYXRlCSAgICA9IGdt MTJ1MzIwX3BpcGVfdXBkYXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHVpbnQzMl90IGdt MTJ1MzIwX3BpcGVfZm9ybWF0c1tdID0gewo+ICsJRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCB1aW50NjRfdCBnbTEydTMyMF9waXBlX21vZGlmaWVyc1tdID0g ewo+ICsJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+ICsJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+ ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgZ20xMnUzMjBfZHJpdmVyX3JlbGVhc2Uoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAg PSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWdtMTJ1MzIwX3VzYl9mcmVlKGdtMTJ1MzIwKTsK PiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7Cj4gKwlkcm1fZGV2X2ZpbmkoZGV2KTsK PiArCWtmcmVlKGdtMTJ1MzIwKTsKPiArfQo+ICsKPiArREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9Q UyhnbTEydTMyMF9mb3BzKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBnbTEydTMy MF9kcm1fZHJpdmVyID0gewo+ICsJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwg RFJJVkVSX0dFTSB8IERSSVZFUl9BVE9NSUMgfAo+ICsJCQkgICBEUklWRVJfUFJJTUUsCj4gKwo+ ICsJLm5hbWUJCSA9IERSSVZFUl9OQU1FLAo+ICsJLmRlc2MJCSA9IERSSVZFUl9ERVNDLAo+ICsJ LmRhdGUJCSA9IERSSVZFUl9EQVRFLAo+ICsJLm1ham9yCQkgPSBEUklWRVJfTUFKT1IsCj4gKwku bWlub3IJCSA9IERSSVZFUl9NSU5PUiwKPiArCj4gKwkucmVsZWFzZQkgPSBnbTEydTMyMF9kcml2 ZXJfcmVsZWFzZSwKPiArCS5mb3BzCQkgPSAmZ20xMnUzMjBfZm9wcywKPiArCURSTV9HRU1fU0hN RU1fRFJJVkVSX09QUywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnX2Z1bmNzIGdtMTJ1MzIwX21vZGVfY29uZmlnX2Z1bmNzID0gewo+ICsJLmZiX2NyZWF0 ZSA9IGRybV9nZW1fZmJfY3JlYXRlX3dpdGhfZGlydHksCj4gKwkuYXRvbWljX2NoZWNrID0gZHJt X2F0b21pY19oZWxwZXJfY2hlY2ssCj4gKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVs cGVyX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZ20xMnUzMjBfdXNiX3Byb2JlKHN0 cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1 c2JfZGV2aWNlX2lkICppZCkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUz MjA7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwkvKgo+ ICsJICogVGhlIGdtMTJ1MzIwIHByZXNlbnRzIGl0c2VsZiB0byB0aGUgc3lzdGVtIGFzIDIgdXNi IG1hc3Mtc3RvcmFnZQo+ICsJICogaW50ZXJmYWNlcywgd2Ugb25seSBjYXJlIGFib3V0IC8gbmVl ZCB0aGUgZmlyc3Qgb25lLgo+ICsJICovCj4gKwlpZiAoaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGlu Zy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDApCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ ICsJZ20xMnUzMjAgPSBremFsbG9jKHNpemVvZigqZ20xMnUzMjApLCBHRlBfS0VSTkVMKTsKPiAr CWlmIChnbTEydTMyMCA9PSBOVUxMKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWdtMTJ1 MzIwLT51ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwo+ICsJSU5JVF9XT1JL KCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmssIGdtMTJ1MzIwX2ZiX3VwZGF0ZV93b3JrKTsKPiAr CW11dGV4X2luaXQoJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gKwlpbml0X3dhaXRxdWV1 ZV9oZWFkKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndhaXRxKTsKPiArCj4gKwlkZXYgPSAmZ20xMnUz MjAtPmRldjsKPiArCXJldCA9IGRybV9kZXZfaW5pdChkZXYsICZnbTEydTMyMF9kcm1fZHJpdmVy LCAmaW50ZXJmYWNlLT5kZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCWtmcmVlKGdtMTJ1MzIwKTsK PiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJZGV2LT5kZXZfcHJpdmF0ZSA9IGdtMTJ1MzIwOwo+ ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1p bl93aWR0aCA9IEdNMTJVMzIwX1VTRVJfV0lEVEg7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF93 aWR0aCA9IEdNMTJVMzIwX1VTRVJfV0lEVEg7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWln aHQgPSBHTTEyVTMyMF9IRUlHSFQ7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBH TTEyVTMyMF9IRUlHSFQ7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJmdtMTJ1MzIwX21v ZGVfY29uZmlnX2Z1bmNzOwo+ICsKPiArCXJldCA9IGdtMTJ1MzIwX3VzYl9hbGxvYyhnbTEydTMy MCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3B1dDsKPiArCj4gKwlyZXQgPSBnbTEydTMy MF9zZXRfZWNvbW9kZShnbTEydTMyMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3B1dDsK PiArCj4gKwlyZXQgPSBnbTEydTMyMF9jb25uX2luaXQoZ20xMnUzMjApOwo+ICsJaWYgKHJldCkK PiArCQlnb3RvIGVycl9wdXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVf aW5pdCgmZ20xMnUzMjAtPmRldiwKPiArCQkJCQkgICAmZ20xMnUzMjAtPnBpcGUsCj4gKwkJCQkJ ICAgJmdtMTJ1MzIwX3BpcGVfZnVuY3MsCj4gKwkJCQkJICAgZ20xMnUzMjBfcGlwZV9mb3JtYXRz LAo+ICsJCQkJCSAgIEFSUkFZX1NJWkUoZ20xMnUzMjBfcGlwZV9mb3JtYXRzKSwKPiArCQkJCQkg ICBnbTEydTMyMF9waXBlX21vZGlmaWVycywKPiArCQkJCQkgICAmZ20xMnUzMjAtPmNvbm4pOwo+ ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9wdXQ7Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX3Jl c2V0KGRldik7Cj4gKwo+ICsJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7Cj4gKwly ZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRldiwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJy X3B1dDsKPiArCj4gKwlkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cChkZXYsIGRldi0+bW9kZV9jb25m aWcucHJlZmVycmVkX2RlcHRoKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9wdXQ6Cj4g Kwlkcm1fZGV2X3B1dChkZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgZ20xMnUzMjBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFj ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50 ZXJmYWNlKTsKPiArCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZf cHJpdmF0ZTsKPiArCj4gKwlnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShnbTEydTMyMCk7Cj4gKwlk cm1fZGV2X3VucGx1ZyhkZXYpOwo+ICsJZHJtX2Rldl9wdXQoZGV2KTsKPiArfQo+ICsKPiArI2lm ZGVmIENPTkZJR19QTQo+ICtzdGF0aWMgaW50IGdtMTJ1MzIwX3N1c3BlbmQoc3RydWN0IHVzYl9p bnRlcmZhY2UgKmludGVyZmFjZSwKPiArCQkJICAgIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2Up Owo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBkZXYtPmRldl9wcml2YXRl Owo+ICsKPiArCWlmIChnbTEydTMyMC0+cGlwZV9lbmFibGVkKQo+ICsJCWdtMTJ1MzIwX3N0b3Bf ZmJfdXBkYXRlKGdtMTJ1MzIwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBnbTEydTMyMF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNl KTsKPiArCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiArCj4gKwlnbTEydTMyMF9zZXRfZWNvbW9kZShnbTEydTMyMCk7Cj4gKwlpZiAoZ20xMnUz MjAtPnBpcGVfZW5hYmxlZCkKPiArCQlnbTEydTMyMF9zdGFydF9mYl91cGRhdGUoZ20xMnUzMjAp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Cj4gKwl7IFVTQl9ERVZJQ0UoMHgxZGUx LCAweGMxMDIpIH0sCj4gKwl7fSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlk X3RhYmxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnbTEydTMyMF91c2JfZHJp dmVyID0gewo+ICsJLm5hbWUgPSAiZ20xMnUzMjAiLAo+ICsJLnByb2JlID0gZ20xMnUzMjBfdXNi X3Byb2JlLAo+ICsJLmRpc2Nvbm5lY3QgPSBnbTEydTMyMF91c2JfZGlzY29ubmVjdCwKPiArCS5p ZF90YWJsZSA9IGlkX3RhYmxlLAo+ICsjaWZkZWYgQ09ORklHX1BNCj4gKwkuc3VzcGVuZCA9IGdt MTJ1MzIwX3N1c3BlbmQsCj4gKwkucmVzdW1lID0gZ20xMnUzMjBfcmVzdW1lLAo+ICsJLnJlc2V0 X3Jlc3VtZSA9IGdtMTJ1MzIwX3Jlc3VtZSwKPiArI2VuZGlmCj4gK307Cj4gKwo+ICttb2R1bGVf dXNiX2RyaXZlcihnbTEydTMyMF91c2JfZHJpdmVyKTsKPiArTU9EVUxFX0FVVEhPUigiSGFucyBk ZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4iKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIp Owo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=