From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm: Add Grain Media GM12U320 driver v2 Date: Tue, 23 Jul 2019 09:33:32 +0200 Message-ID: <20190723073332.GT15868@phenom.ffwll.local> References: <20190721132525.10396-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2E3D26E17C for ; Tue, 23 Jul 2019 07:33:37 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id m10so42862094edv.6 for ; Tue, 23 Jul 2019 00:33:37 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190721132525.10396-1-hdegoede@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hans de Goede Cc: Maxime Ripard , dri-devel@lists.freedesktop.org, David Airlie , Sean Paul , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gU3VuLCBKdWwgMjEsIDIwMTkgYXQgMDM6MjU6MjVQTSArMDIwMCwgSGFucyBkZSBHb2VkZSB3 cm90ZToKPiBBZGQgYSBtb2Rlc2V0dGluZyBkcml2ZXIgZm9yIEdyYWluIE1lZGlhIEdNMTJVMzIw IGJhc2VkIGRldmljZXMKPiAocHJpbWFyaWx5IEFjZXIgQzEyMCBwcm9qZWN0b3IsIGJ1dCB0aGVy ZSBtYXkgYmUgY29tcGF0aWJsZSBkZXZpY2VzKS4KPiAKPiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBm YiBkcml2ZXIgZnJvbSBWaWFjaGVzbGF2IE51cm1la2hhbWl0b3Y6Cj4gaHR0cHM6Ly9naXRodWIu Y29tL3NsYXZybi9nbTEydTMyMAo+IAo+IFRoaXMgZHJpdmVyIHVzZXMgZHJtX3NpbXBsZV9kaXNw bGF5X3BpcGUgdG8gZGVhbCB3aXRoIGFsbCB0aGUgYXRvbWljCj4gc3R1ZmYsIGdlbV9zaG1lbV9o ZWxwZXIgZnVuY3Rpb25zIGZvciBidWZmZXIgbWFuYWdlbWVudCBhbmQKPiBkcm1fZmJkZXZfZ2Vu ZXJpY19zZXR1cCBmb3IgZmJkZXYgZW11bGF0aW9uLCBzbyB0aGF0IGxlYXZlcyB0aGUgZHJpdmVy Cj4gaXRzZWxmIHdpdGggb25seSB0aGUgYWN0dWFsIGNvZGUgZm9yIHRhbGtpbmcgdG8gdGhlIGdt MTN1MzIwIGNoaXAsCj4gbGVhZGluZyB0byBhIG5pY2Ugc2ltcGxlIGFuZCBjbGVhbiBkcml2ZXIu Cj4gCj4gQ2hhbmdlcyBpbiB2MjoKPiAtQWRkIGRybS1taXNjIHRyZWUgdG8gTUFJTlRBSU5FUlMK PiAtRHJvcCBtb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGggPSAyNCAvIGZpeCBmYmRldiBzdXBw b3J0Cj4gCj4gUmV2aWV3ZWQtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3Jn Pgo+IFNpZ25lZC1vZmYtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Cj4g LS0tCj4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsKPiAgZHJp dmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9nbTEydTMy MC9LY29uZmlnICAgIHwgICA5ICsKPiAgZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxl ICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjAuYyB8IDgxNSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrCgpIbSBJIHRob3VnaHQgTm9yYWxmJ3MgcGxhbiB3 YXMgdG8gY29sbGVjdCBhbGwgc3VjaCB0aW55IGRyaXZlcnMgaW50bwpkcm0vdGlueWRybSAob3Ig ZHJtL3RpbnkpLiBJIGtpbmRhIGxpa2UgdGhhdCBpZGVhLCBpbnN0ZWFkIG9mIGxpdGVyaW5nIHRo ZQp0b3AgbGV2ZWwgd2l0aCB0b25zIG9mIGRpcmVjdG9yaWVzIGFuZCBmb3JjaW5nIGV2ZXJ5b25l IHRvIGNyZWF0ZSBhIG5ldwpNYWtlZmlsZS9LY29uZmlnLgoKTWF5YmUgd2UgY291bGQgbW92ZSB0 aGlzIGFzIHBhcnQgb2YgdGhlIHRpbnlkcm0tPnRpbnkvIHJlbmFtZT8KLURhbmllbAoKPiAgNiBm aWxlcyBjaGFuZ2VkLCA4MzUgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9nbTEydTMyMC9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1MzIwLmMKPiAKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5F UlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4IGUyZGIwZDQ2Nzk2Ni4uMzI5MGJjZmU2N2IyIDEwMDY0 NAo+IC0tLSBhL01BSU5UQUlORVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtNTAyNSw2ICs1 MDI1LDEyIEBAIFM6CU1haW50YWluZWQKPiAgRjoJZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVs LWZlaXlhbmctZnkwNzAyNGRpMjZhMzBkLmMKPiAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvZmVpeWFuZyxmeTA3MDI0ZGkyNmEzMGQudHh0Cj4gIAo+ ICtEUk0gRFJJVkVSIEZPUiBHUkFJTiBNRURJQSBHTTEyVTMyMCBQUk9KRUNUT1JTCj4gK006CUhh bnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Cj4gK1Q6CWdpdCBnaXQ6Ly9hbm9uZ2l0 LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJtLW1pc2MKPiArUzoJTWFpbnRhaW5lZAo+ICtGOglkcml2 ZXJzL2dwdS9kcm0vZ20xMnUzMjAvCj4gKwo+ICBEUk0gRFJJVkVSIEZPUiBJTElURUsgSUxJOTIy NSBQQU5FTFMKPiAgTToJRGF2aWQgTGVjaG5lciA8ZGF2aWRAbGVjaG5vbG9neS5jb20+Cj4gIFM6 CU1haW50YWluZWQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IDM2ZjkwMGQ2Mzk3OS4uYWY4MjAwMjgyNWVkIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKPiBAQCAtMzQzLDYgKzM0Myw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L0tjb25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hc3BlZWQv S2NvbmZpZyIKPiAgCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWci Cj4gKwo+ICAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAo+ICAKPiAgbWVudWNvbmZpZyBEUk1f TEVHQUNZCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZQo+IGluZGV4IDcyZjUwMzZkOWJmYS4uOGE0Zjg1MWY1NGEyIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQo+IEBAIC0xMTMsMyArMTEzLDQgQEAgb2JqLSQoQ09ORklHX0RSTV9WQk9YVklE RU8pICs9IHZib3h2aWRlby8KPiAgb2JqLSQoQ09ORklHX0RSTV9MSU1BKSAgKz0gbGltYS8KPiAg b2JqLSQoQ09ORklHX0RSTV9QQU5GUk9TVCkgKz0gcGFuZnJvc3QvCj4gIG9iai0kKENPTkZJR19E Uk1fQVNQRUVEX0dGWCkgKz0gYXNwZWVkLwo+ICtvYmotJChDT05GSUdfRFJNX0dNMTJVMzIwKSAr PSBnbTEydTMyMC8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wODgyYTYxYzA0ZDUKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL0tjb25maWcKPiBAQCAtMCwwICsxLDkgQEAK PiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArY29uZmlnIERSTV9HTTEy VTMyMAo+ICsJdHJpc3RhdGUgIkdNMTJVMzIwIGRyaXZlciBmb3IgVVNCIHByb2plY3RvcnMiCj4g KwlkZXBlbmRzIG9uIERSTSAmJiBVU0IKPiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2Vs ZWN0IERSTV9HRU1fU0hNRU1fSEVMUEVSCj4gKwloZWxwCj4gKwkgVGhpcyBpcyBhIEtNUyBkcml2 ZXIgZm9yIHByb2plY3RvcnMgd2hpY2ggdXNlIHRoZSBHTTEyVTMyMCBjaGlwc2V0Cj4gKwkgZm9y IHZpZGVvIHRyYW5zZmVyIG92ZXIgVVNCMi8zLCBzdWNoIGFzIHRoZSBBY2VyIEMxMjAgbWluaSBw cm9qZWN0b3IuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9nbTEydTMyMC9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lYTUxNDM4MmYwMGQKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL01ha2VmaWxlCj4gQEAgLTAsMCArMSwyIEBA Cj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4gK29iai0kKENPTkZJR19E Uk1fR00xMlUzMjApICs9IGdtMTJ1MzIwLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2dtMTJ1MzIwL2dtMTJ1MzIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ20xMnUzMjAvZ20xMnUzMjAu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zZGZlODZkZWZl ZmMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtMTJ1MzIwL2dtMTJ1 MzIwLmMKPiBAQCAtMCwwICsxLDgxNSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCsKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTkgSGFucyBkZSBHb2VkZSA8aGRlZ29l ZGVAcmVkaGF0LmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KPiAr Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX3N0YXRlX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3Iu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZGFtYWdlX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9kcnYuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX2ZpbGUuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZm9ybWF0X2hlbHBlci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX3No bWVtX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVy Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21v ZGVzZXRfaGVscGVyX3Z0YWJsZXMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVy Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX3ZibGFuay5oPgo+ICsKPiArc3RhdGljIGJvb2wgZWNvX21vZGU7Cj4gK21vZHVs ZV9wYXJhbShlY29fbW9kZSwgYm9vbCwgMDY0NCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MoZWNvX21v ZGUsICJUdXJuIG9uIEVjbyBtb2RlIChsZXNzIGJyaWdodCwgbW9yZSBzaWxlbnQpIik7Cj4gKwo+ ICsjZGVmaW5lIERSSVZFUl9OQU1FCQkiZ20xMnUzMjAiCj4gKyNkZWZpbmUgRFJJVkVSX0RFU0MJ CSJHcmFpbiBNZWRpYSBHTTEyVTMyMCBVU0IgcHJvamVjdG9yIGRpc3BsYXkiCj4gKyNkZWZpbmUg RFJJVkVSX0RBVEUJCSIyMDE5Igo+ICsjZGVmaW5lIERSSVZFUl9NQUpPUgkJMQo+ICsjZGVmaW5l IERSSVZFUl9NSU5PUgkJMAo+ICsjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTEKPiArCj4gKy8q Cj4gKyAqIFRoZSBETFAgaGFzIGFuIGFjdHVhbCB3aWR0aCBvZiA4NTQgcGl4ZWxzLCBidXQgdGhh dCBpcyBub3QgYSBtdWx0aXBsZQo+ICsgKiBvZiA4LCBicmVha2luZyB0aGluZ3MgbGVmdCBhbmQg cmlnaHQsIHNvIHdlIGV4cG9ydCBhIHdpZHRoIG9mIDg0OC4KPiArICovCj4gKyNkZWZpbmUgR00x MlUzMjBfVVNFUl9XSURUSAkJODQ4Cj4gKyNkZWZpbmUgR00xMlUzMjBfUkVBTF9XSURUSAkJODU0 Cj4gKyNkZWZpbmUgR00xMlUzMjBfSEVJR0hUCQkJNDgwCj4gKwo+ICsjZGVmaW5lIEdNMTJVMzIw X0JMT0NLX0NPVU5UCQkyMAo+ICsKPiArI2RlZmluZSBNSVNDX1JDVl9FUFQJCQkxCj4gKyNkZWZp bmUgREFUQV9SQ1ZfRVBUCQkJMgo+ICsjZGVmaW5lIERBVEFfU05EX0VQVAkJCTMKPiArI2RlZmlu ZSBNSVNDX1NORF9FUFQJCQk0Cj4gKwo+ICsjZGVmaW5lIERBVEFfQkxPQ0tfSEVBREVSX1NJWkUJ CTg0Cj4gKyNkZWZpbmUgREFUQV9CTE9DS19DT05URU5UX1NJWkUJCTY0NTEyCj4gKyNkZWZpbmUg REFUQV9CTE9DS19GT09URVJfU0laRQkJMjAKPiArI2RlZmluZSBEQVRBX0JMT0NLX1NJWkUJCQko REFUQV9CTE9DS19IRUFERVJfU0laRSArIFwKPiArCQkJCQkgREFUQV9CTE9DS19DT05URU5UX1NJ WkUgKyBcCj4gKwkJCQkJIERBVEFfQkxPQ0tfRk9PVEVSX1NJWkUpCj4gKyNkZWZpbmUgREFUQV9M QVNUX0JMT0NLX0NPTlRFTlRfU0laRQk0MDMyCj4gKyNkZWZpbmUgREFUQV9MQVNUX0JMT0NLX1NJ WkUJCShEQVRBX0JMT0NLX0hFQURFUl9TSVpFICsgXAo+ICsJCQkJCSBEQVRBX0xBU1RfQkxPQ0tf Q09OVEVOVF9TSVpFICsgXAo+ICsJCQkJCSBEQVRBX0JMT0NLX0ZPT1RFUl9TSVpFKQo+ICsKPiAr I2RlZmluZSBDTURfU0laRQkJCTMxCj4gKyNkZWZpbmUgUkVBRF9TVEFUVVNfU0laRQkJMTMKPiAr I2RlZmluZSBNSVNDX1ZBTFVFX1NJWkUJCQk0Cj4gKwo+ICsjZGVmaW5lIENNRF9USU1FT1VUCQkJ bXNlY3NfdG9famlmZmllcygyMDApCj4gKyNkZWZpbmUgREFUQV9USU1FT1VUCQkJbXNlY3NfdG9f amlmZmllcygxMDAwKQo+ICsjZGVmaW5lIElETEVfVElNRU9VVAkJCW1zZWNzX3RvX2ppZmZpZXMo MjAwMCkKPiArI2RlZmluZSBGSVJTVF9GUkFNRV9USU1FT1VUCQltc2Vjc190b19qaWZmaWVzKDIw MDApCj4gKwo+ICsjZGVmaW5lIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0EJCTB4ZmYKPiArI2RlZmlu ZSBNSVNDX1JFUV9HRVRfU0VUX0VDT19CCQkweDM1Cj4gKy8qIFdpbmRvd3MgZHJpdmVyIGRvZXMg b25jZSBldmVyeSBzZWNvbmQsIHdpdGggYXJnIGQgPSAxLCBvdGhlciBhcmdzIDAgKi8KPiArI2Rl ZmluZSBNSVNDX1JFUV9VTktOT1dOMV9BCQkweGZmCj4gKyNkZWZpbmUgTUlTQ19SRVFfVU5LTk9X TjFfQgkJMHgzOAo+ICsvKiBXaW5kb3dzIGRyaXZlciBkb2VzIHRoaXMgb24gaW5pdCwgd2l0aCBh cmcgYSwgYiA9IDAsIGMgPSAweGEwLCBkID0gNCAqLwo+ICsjZGVmaW5lIE1JU0NfUkVRX1VOS05P V04yX0EJCTB4YTUKPiArI2RlZmluZSBNSVNDX1JFUV9VTktOT1dOMl9CCQkweDAwCj4gKwo+ICtz dHJ1Y3QgZ20xMnUzMjBfZGV2aWNlIHsKPiArCXN0cnVjdCBkcm1fZGV2aWNlCSAgICAgICAgIGRl djsKPiArCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAgIHBpcGU7Cj4gKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvcgkgICAgICAgICBjb25uOwo+ICsJc3RydWN0IHVzYl9kZXZpY2UgICAgICAg ICAgICAgICAqdWRldjsKPiArCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgKmNtZF9i dWY7Cj4gKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgICpkYXRhX2J1ZltHTTEyVTMy MF9CTE9DS19DT1VOVF07Cj4gKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBl X2VuYWJsZWQ7Cj4gKwlzdHJ1Y3Qgewo+ICsJCWJvb2wgICAgICAgICAgICAgICAgICAgICBydW47 Cj4gKwkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxOwo+ICsJCXN0cnVjdCB3b3JrX3N0 cnVjdCAgICAgICB3b3JrOwo+ICsJCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICB3YWl0cTsKPiAr CQlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgbG9jazsKPiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICAqZmI7Cj4gKwkJc3RydWN0IGRybV9yZWN0ICAgICAgICAgIHJlY3Q7Cj4gKwl9IGZiX3Vw ZGF0ZTsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGNtZF9kYXRhW0NNRF9TSVpFXSA9 IHsKPiArCTB4NTUsIDB4NTMsIDB4NDIsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4g KwkweDY4LCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGZmLAo+ICsJMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHg4MCwgMHgwMCwKPiArCTB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBjaGFyIGNtZF9kcmF3W0NNRF9TSVpFXSA9IHsKPiArCTB4NTUsIDB4NTMsIDB4NDIsIDB4NDMs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDEwLCAweGZlLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhkMSwgMHgw NSwgMHgwMCwgMHg0MCwKPiArCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGNtZF9taXNjW0NNRF9TSVpFXSA9IHsK PiArCTB4NTUsIDB4NTMsIDB4NDIsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkw eDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDEwLCAweGZkLAo+ICsJMHgwMCwg MHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBj aGFyIGRhdGFfYmxvY2tfaGVhZGVyW0RBVEFfQkxPQ0tfSEVBREVSX1NJWkVdID0gewo+ICsJMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsCj4gKwkweGZiLCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLAo+ICsJMHgwMCwgMHgwNCwgMHgxNSwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwK PiArCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZGIKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFy IGRhdGFfbGFzdF9ibG9ja19oZWFkZXJbREFUQV9CTE9DS19IRUFERVJfU0laRV0gPSB7Cj4gKwkw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsCj4gKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwKPiArCTB4ZmIsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsCj4gKwkweDJhLCAweDAwLCAweDIwLCAweDAwLCAweGMwLCAweDBmLCAweDAwLCAweDAw LAo+ICsJMHgwMSwgMHgwMCwgMHgwMCwgMHhkNwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNo YXIgZGF0YV9ibG9ja19mb290ZXJbREFUQV9CTE9DS19GT09URVJfU0laRV0gPSB7Cj4gKwkweGZi LCAweDE0LCAweDAyLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAo+ICsJMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKPiArCTB4ODAsIDB4MDAsIDB4 MDAsIDB4NGYKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZ20xMnUzMjBfdXNiX2FsbG9jKHN0cnVj dCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICt7Cj4gKwlpbnQgaSwgYmxvY2tfc2l6ZTsK PiArCWNvbnN0IGNoYXIgKmhkcjsKPiArCj4gKwlnbTEydTMyMC0+Y21kX2J1ZiA9IGttYWxsb2Mo Q01EX1NJWkUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFnbTEydTMyMC0+Y21kX2J1ZikKPiArCQly ZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgR00xMlUzMjBfQkxPQ0tfQ09V TlQ7IGkrKykgewo+ICsJCWlmIChpID09IEdNMTJVMzIwX0JMT0NLX0NPVU5UIC0gMSkgewo+ICsJ CQlibG9ja19zaXplID0gREFUQV9MQVNUX0JMT0NLX1NJWkU7Cj4gKwkJCWhkciA9IGRhdGFfbGFz dF9ibG9ja19oZWFkZXI7Cj4gKwkJfSBlbHNlIHsKPiArCQkJYmxvY2tfc2l6ZSA9IERBVEFfQkxP Q0tfU0laRTsKPiArCQkJaGRyID0gZGF0YV9ibG9ja19oZWFkZXI7Cj4gKwkJfQo+ICsKPiArCQln bTEydTMyMC0+ZGF0YV9idWZbaV0gPSBremFsbG9jKGJsb2NrX3NpemUsIEdGUF9LRVJORUwpOwo+ ICsJCWlmICghZ20xMnUzMjAtPmRhdGFfYnVmW2ldKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwkJbWVtY3B5KGdtMTJ1MzIwLT5kYXRhX2J1ZltpXSwgaGRyLCBEQVRBX0JMT0NLX0hFQURF Ul9TSVpFKTsKPiArCQltZW1jcHkoZ20xMnUzMjAtPmRhdGFfYnVmW2ldICsKPiArCQkJCShibG9j a19zaXplIC0gREFUQV9CTE9DS19GT09URVJfU0laRSksCj4gKwkJICAgICAgIGRhdGFfYmxvY2tf Zm9vdGVyLCBEQVRBX0JMT0NLX0ZPT1RFUl9TSVpFKTsKPiArCX0KPiArCj4gKwlnbTEydTMyMC0+ ZmJfdXBkYXRlLndvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoRFJJVkVSX05B TUUpOwo+ICsJaWYgKCFnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmtxKQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEydTMyMF91 c2JfZnJlZShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKPiArewo+ICsJaW50IGk7 Cj4gKwo+ICsJaWYgKGdtMTJ1MzIwLT5mYl91cGRhdGUud29ya3EpCj4gKwkJZGVzdHJveV93b3Jr cXVldWUoZ20xMnUzMjAtPmZiX3VwZGF0ZS53b3JrcSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IEdNMTJVMzIwX0JMT0NLX0NPVU5UOyBpKyspCj4gKwkJa2ZyZWUoZ20xMnUzMjAtPmRhdGFfYnVm W2ldKTsKPiArCj4gKwlrZnJlZShnbTEydTMyMC0+Y21kX2J1Zik7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZ20xMnUzMjBfbWlzY19yZXF1ZXN0KHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1 MzIwLAo+ICsJCQkJIHU4IHJlcV9hLCB1OCByZXFfYiwKPiArCQkJCSB1OCBhcmdfYSwgdTggYXJn X2IsIHU4IGFyZ19jLCB1OCBhcmdfZCkKPiArewo+ICsJaW50IHJldCwgbGVuOwo+ICsKPiArCW1l bWNweShnbTEydTMyMC0+Y21kX2J1ZiwgJmNtZF9taXNjLCBDTURfU0laRSk7Cj4gKwlnbTEydTMy MC0+Y21kX2J1ZlsyMF0gPSByZXFfYTsKPiArCWdtMTJ1MzIwLT5jbWRfYnVmWzIxXSA9IHJlcV9i Owo+ICsJZ20xMnUzMjAtPmNtZF9idWZbMjJdID0gYXJnX2E7Cj4gKwlnbTEydTMyMC0+Y21kX2J1 ZlsyM10gPSBhcmdfYjsKPiArCWdtMTJ1MzIwLT5jbWRfYnVmWzI0XSA9IGFyZ19jOwo+ICsJZ20x MnUzMjAtPmNtZF9idWZbMjVdID0gYXJnX2Q7Cj4gKwo+ICsJLyogU2VuZCByZXF1ZXN0ICovCj4g KwlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCj4gKwkJCSAgIHVzYl9zbmRidWxr cGlwZShnbTEydTMyMC0+dWRldiwgTUlTQ19TTkRfRVBUKSwKPiArCQkJICAgZ20xMnUzMjAtPmNt ZF9idWYsIENNRF9TSVpFLCAmbGVuLCBDTURfVElNRU9VVCk7Cj4gKwlpZiAocmV0IHx8IGxlbiAh PSBDTURfU0laRSkgewo+ICsJCWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2LT5kZXYsICJNaXNjLiBy ZXEuIGVycm9yICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsKPiArCS8q IFJlYWQgdmFsdWUgKi8KPiArCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+dWRldiwKPiAr CQkJICAgdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIwLT51ZGV2LCBNSVNDX1JDVl9FUFQpLAo+ICsJ CQkgICBnbTEydTMyMC0+Y21kX2J1ZiwgTUlTQ19WQUxVRV9TSVpFLCAmbGVuLAo+ICsJCQkgICBE QVRBX1RJTUVPVVQpOwo+ICsJaWYgKHJldCB8fCBsZW4gIT0gTUlTQ19WQUxVRV9TSVpFKSB7Cj4g KwkJZGV2X2VycigmZ20xMnUzMjAtPnVkZXYtPmRldiwgIk1pc2MuIHZhbHVlIGVycm9yICVkXG4i LCByZXQpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsJLyogY21kX2J1ZlswXSBub3cgY29u dGFpbnMgdGhlIHJlYWQgdmFsdWUsIHdoaWNoIHdlIGRvbid0IHVzZSAqLwo+ICsKPiArCS8qIFJl YWQgc3RhdHVzICovCj4gKwlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVkZXYsCj4gKwkJ CSAgIHVzYl9yY3ZidWxrcGlwZShnbTEydTMyMC0+dWRldiwgTUlTQ19SQ1ZfRVBUKSwKPiArCQkJ ICAgZ20xMnUzMjAtPmNtZF9idWYsIFJFQURfU1RBVFVTX1NJWkUsICZsZW4sCj4gKwkJCSAgIENN RF9USU1FT1VUKTsKPiArCWlmIChyZXQgfHwgbGVuICE9IFJFQURfU1RBVFVTX1NJWkUpIHsKPiAr CQlkZXZfZXJyKCZnbTEydTMyMC0+dWRldi0+ZGV2LCAiTWlzYy4gc3RhdHVzIGVycm9yICVkXG4i LCByZXQpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBnbTEydTMyMF8zMmJwcF90b18yNGJwcF9wYWNrZWQodTggKmRzdCwg dTggKnNyYywgaW50IGxlbikKPiArewo+ICsJd2hpbGUgKGxlbi0tKSB7Cj4gKwkJKmRzdCsrID0g KnNyYysrOwo+ICsJCSpkc3QrKyA9ICpzcmMrKzsKPiArCQkqZHN0KysgPSAqc3JjKys7Cj4gKwkJ c3JjKys7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdtMTJ1MzIwX2NvcHlfZmJfdG9f YmxvY2tzKHN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwKQo+ICt7Cj4gKwlpbnQgYmxv Y2ssIGRzdF9vZmZzZXQsIGxlbiwgcmVtYWluLCByZXQsIHgxLCB4MiwgeTEsIHkyOwo+ICsJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwl2b2lkICp2YWRkcjsKPiArCXU4ICpzcmM7Cj4g Kwo+ICsJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKPiArCj4gKwlpZiAo IWdtMTJ1MzIwLT5mYl91cGRhdGUuZmIpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJZmIgPSBn bTEydTMyMC0+ZmJfdXBkYXRlLmZiOwo+ICsJeDEgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3Qu eDE7Cj4gKwl4MiA9IGdtMTJ1MzIwLT5mYl91cGRhdGUucmVjdC54MjsKPiArCXkxID0gZ20xMnUz MjAtPmZiX3VwZGF0ZS5yZWN0LnkxOwo+ICsJeTIgPSBnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3Qu eTI7Cj4gKwo+ICsJdmFkZHIgPSBkcm1fZ2VtX3NobWVtX3ZtYXAoZmItPm9ialswXSk7Cj4gKwlp ZiAoSVNfRVJSKHZhZGRyKSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHZtYXAgZmI6ICVs ZFxuIiwgUFRSX0VSUih2YWRkcikpOwo+ICsJCWdvdG8gcHV0X2ZiOwo+ICsJfQo+ICsKPiArCWlm IChmYi0+b2JqWzBdLT5pbXBvcnRfYXR0YWNoKSB7Cj4gKwkJcmV0ID0gZG1hX2J1Zl9iZWdpbl9j cHVfYWNjZXNzKAo+ICsJCQlmYi0+b2JqWzBdLT5pbXBvcnRfYXR0YWNoLT5kbWFidWYsIERNQV9G Uk9NX0RFVklDRSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fRVJST1IoImRtYV9idWZfYmVn aW5fY3B1X2FjY2VzcyBlcnI6ICVkXG4iLCByZXQpOwo+ICsJCQlnb3RvIHZ1bm1hcDsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJc3JjID0gdmFkZHIgKyB5MSAqIGZiLT5waXRjaGVzWzBdICsgeDEgKiA0 Owo+ICsKPiArCXgxICs9IChHTTEyVTMyMF9SRUFMX1dJRFRIIC0gR00xMlUzMjBfVVNFUl9XSURU SCkgLyAyOwo+ICsJeDIgKz0gKEdNMTJVMzIwX1JFQUxfV0lEVEggLSBHTTEyVTMyMF9VU0VSX1dJ RFRIKSAvIDI7Cj4gKwo+ICsJZm9yICg7IHkxIDwgeTI7IHkxKyspIHsKPiArCQlyZW1haW4gPSAw Owo+ICsJCWxlbiA9ICh4MiAtIHgxKSAqIDM7Cj4gKwkJZHN0X29mZnNldCA9ICh5MSAqIEdNMTJV MzIwX1JFQUxfV0lEVEggKyB4MSkgKiAzOwo+ICsJCWJsb2NrID0gZHN0X29mZnNldCAvIERBVEFf QkxPQ0tfQ09OVEVOVF9TSVpFOwo+ICsJCWRzdF9vZmZzZXQgJT0gREFUQV9CTE9DS19DT05URU5U X1NJWkU7Cj4gKwo+ICsJCWlmICgoZHN0X29mZnNldCArIGxlbikgPiBEQVRBX0JMT0NLX0NPTlRF TlRfU0laRSkgewo+ICsJCQlyZW1haW4gPSBkc3Rfb2Zmc2V0ICsgbGVuIC0gREFUQV9CTE9DS19D T05URU5UX1NJWkU7Cj4gKwkJCWxlbiA9IERBVEFfQkxPQ0tfQ09OVEVOVF9TSVpFIC0gZHN0X29m ZnNldDsKPiArCQl9Cj4gKwo+ICsJCWRzdF9vZmZzZXQgKz0gREFUQV9CTE9DS19IRUFERVJfU0la RTsKPiArCQlsZW4gLz0gMzsKPiArCj4gKwkJZ20xMnUzMjBfMzJicHBfdG9fMjRicHBfcGFja2Vk KAo+ICsJCQlnbTEydTMyMC0+ZGF0YV9idWZbYmxvY2tdICsgZHN0X29mZnNldCwKPiArCQkJc3Jj LCBsZW4pOwo+ICsKPiArCQlpZiAocmVtYWluKSB7Cj4gKwkJCWJsb2NrKys7Cj4gKwkJCWRzdF9v ZmZzZXQgPSBEQVRBX0JMT0NLX0hFQURFUl9TSVpFOwo+ICsJCQlnbTEydTMyMF8zMmJwcF90b18y NGJwcF9wYWNrZWQoCj4gKwkJCQlnbTEydTMyMC0+ZGF0YV9idWZbYmxvY2tdICsgZHN0X29mZnNl dCwKPiArCQkJCXNyYyArIGxlbiAqIDQsIHJlbWFpbiAvIDMpOwo+ICsJCX0KPiArCQlzcmMgKz0g ZmItPnBpdGNoZXNbMF07Cj4gKwl9Cj4gKwo+ICsJaWYgKGZiLT5vYmpbMF0tPmltcG9ydF9hdHRh Y2gpIHsKPiArCQlyZXQgPSBkbWFfYnVmX2VuZF9jcHVfYWNjZXNzKGZiLT5vYmpbMF0tPmltcG9y dF9hdHRhY2gtPmRtYWJ1ZiwKPiArCQkJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7Cj4gKwkJaWYg KHJldCkKPiArCQkJRFJNX0VSUk9SKCJkbWFfYnVmX2VuZF9jcHVfYWNjZXNzIGVycjogJWRcbiIs IHJldCk7Cj4gKwl9Cj4gK3Z1bm1hcDoKPiArCWRybV9nZW1fc2htZW1fdnVubWFwKGZiLT5vYmpb MF0sIHZhZGRyKTsKPiArcHV0X2ZiOgo+ICsJZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7Cj4gKwln bTEydTMyMC0+ZmJfdXBkYXRlLmZiID0gTlVMTDsKPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2Nr KCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdtMTJ1 MzIwX2ZiX3VwZGF0ZV9yZWFkeShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkKPiAr ewo+ICsJaW50IHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxv Y2spOwo+ICsJcmV0ID0gIWdtMTJ1MzIwLT5mYl91cGRhdGUucnVuIHx8IGdtMTJ1MzIwLT5mYl91 cGRhdGUuZmIgIT0gTlVMTDsKPiArCW11dGV4X3VubG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5s b2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEydTMy MF9mYl91cGRhdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVj dCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0KPiArCQljb250YWluZXJfb2Yod29yaywgc3Ry dWN0IGdtMTJ1MzIwX2RldmljZSwgZmJfdXBkYXRlLndvcmspOwo+ICsJaW50IGRyYXdfc3RhdHVz X3RpbWVvdXQgPSBGSVJTVF9GUkFNRV9USU1FT1VUOwo+ICsJaW50IGJsb2NrLCBibG9ja19zaXpl LCBsZW47Cj4gKwlpbnQgZnJhbWUgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJd2hpbGUg KGdtMTJ1MzIwLT5mYl91cGRhdGUucnVuKSB7Cj4gKwkJZ20xMnUzMjBfY29weV9mYl90b19ibG9j a3MoZ20xMnUzMjApOwo+ICsKPiArCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBHTTEyVTMyMF9C TE9DS19DT1VOVDsgYmxvY2srKykgewo+ICsJCQlpZiAoYmxvY2sgPT0gR00xMlUzMjBfQkxPQ0tf Q09VTlQgLSAxKQo+ICsJCQkJYmxvY2tfc2l6ZSA9IERBVEFfTEFTVF9CTE9DS19TSVpFOwo+ICsJ CQllbHNlCj4gKwkJCQlibG9ja19zaXplID0gREFUQV9CTE9DS19TSVpFOwo+ICsKPiArCQkJLyog U2VuZCBkYXRhIGNvbW1hbmQgdG8gZGV2aWNlICovCj4gKwkJCW1lbWNweShnbTEydTMyMC0+Y21k X2J1ZiwgY21kX2RhdGEsIENNRF9TSVpFKTsKPiArCQkJZ20xMnUzMjAtPmNtZF9idWZbOF0gPSBi bG9ja19zaXplICYgMHhmZjsKPiArCQkJZ20xMnUzMjAtPmNtZF9idWZbOV0gPSBibG9ja19zaXpl ID4+IDg7Cj4gKwkJCWdtMTJ1MzIwLT5jbWRfYnVmWzIwXSA9IDB4ZmMgLSBibG9jayAqIDQ7Cj4g KwkJCWdtMTJ1MzIwLT5jbWRfYnVmWzIxXSA9IGJsb2NrIHwgKGZyYW1lIDw8IDcpOwo+ICsKPiAr CQkJcmV0ID0gdXNiX2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2LAo+ICsJCQkJdXNiX3NuZGJ1bGtw aXBlKGdtMTJ1MzIwLT51ZGV2LCBEQVRBX1NORF9FUFQpLAo+ICsJCQkJZ20xMnUzMjAtPmNtZF9i dWYsIENNRF9TSVpFLCAmbGVuLAo+ICsJCQkJQ01EX1RJTUVPVVQpOwo+ICsJCQlpZiAocmV0IHx8 IGxlbiAhPSBDTURfU0laRSkKPiArCQkJCWdvdG8gZXJyOwo+ICsKPiArCQkJLyogU2VuZCBkYXRh IGJsb2NrIHRvIGRldmljZSAqLwo+ICsJCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUzMjAtPnVk ZXYsCj4gKwkJCQl1c2Jfc25kYnVsa3BpcGUoZ20xMnUzMjAtPnVkZXYsIERBVEFfU05EX0VQVCks Cj4gKwkJCQlnbTEydTMyMC0+ZGF0YV9idWZbYmxvY2tdLCBibG9ja19zaXplLAo+ICsJCQkJJmxl biwgREFUQV9USU1FT1VUKTsKPiArCQkJaWYgKHJldCB8fCBsZW4gIT0gYmxvY2tfc2l6ZSkKPiAr CQkJCWdvdG8gZXJyOwo+ICsKPiArCQkJLyogUmVhZCBzdGF0dXMgKi8KPiArCQkJcmV0ID0gdXNi X2J1bGtfbXNnKGdtMTJ1MzIwLT51ZGV2LAo+ICsJCQkJdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIw LT51ZGV2LCBEQVRBX1JDVl9FUFQpLAo+ICsJCQkJZ20xMnUzMjAtPmNtZF9idWYsIFJFQURfU1RB VFVTX1NJWkUsICZsZW4sCj4gKwkJCQlDTURfVElNRU9VVCk7Cj4gKwkJCWlmIChyZXQgfHwgbGVu ICE9IFJFQURfU1RBVFVTX1NJWkUpCj4gKwkJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwo+ICsJCS8q IFNlbmQgZHJhdyBjb21tYW5kIHRvIGRldmljZSAqLwo+ICsJCW1lbWNweShnbTEydTMyMC0+Y21k X2J1ZiwgY21kX2RyYXcsIENNRF9TSVpFKTsKPiArCQlyZXQgPSB1c2JfYnVsa19tc2coZ20xMnUz MjAtPnVkZXYsCj4gKwkJCXVzYl9zbmRidWxrcGlwZShnbTEydTMyMC0+dWRldiwgREFUQV9TTkRf RVBUKSwKPiArCQkJZ20xMnUzMjAtPmNtZF9idWYsIENNRF9TSVpFLCAmbGVuLCBDTURfVElNRU9V VCk7Cj4gKwkJaWYgKHJldCB8fCBsZW4gIT0gQ01EX1NJWkUpCj4gKwkJCWdvdG8gZXJyOwo+ICsK PiArCQkvKiBSZWFkIHN0YXR1cyAqLwo+ICsJCXJldCA9IHVzYl9idWxrX21zZyhnbTEydTMyMC0+ dWRldiwKPiArCQkJdXNiX3JjdmJ1bGtwaXBlKGdtMTJ1MzIwLT51ZGV2LCBEQVRBX1JDVl9FUFQp LAo+ICsJCQlnbTEydTMyMC0+Y21kX2J1ZiwgUkVBRF9TVEFUVVNfU0laRSwgJmxlbiwKPiArCQkJ ZHJhd19zdGF0dXNfdGltZW91dCk7Cj4gKwkJaWYgKHJldCB8fCBsZW4gIT0gUkVBRF9TVEFUVVNf U0laRSkKPiArCQkJZ290byBlcnI7Cj4gKwo+ICsJCWRyYXdfc3RhdHVzX3RpbWVvdXQgPSBDTURf VElNRU9VVDsKPiArCQlmcmFtZSA9ICFmcmFtZTsKPiArCj4gKwkJLyoKPiArCQkgKiBXZSBtdXN0 IGRyYXcgYSBmcmFtZSBldmVyeSAycyBvdGhlcndpc2UgdGhlIHByb2plY3Rvcgo+ICsJCSAqIHN3 aXRjaGVzIGJhY2sgdG8gc2hvd2luZyBpdHMgbG9nby4KPiArCQkgKi8KPiArCQl3YWl0X2V2ZW50 X3RpbWVvdXQoZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSwKPiArCQkJCSAgIGdtMTJ1MzIwX2Zi X3VwZGF0ZV9yZWFkeShnbTEydTMyMCksCj4gKwkJCQkgICBJRExFX1RJTUVPVVQpOwo+ICsJfQo+ ICsJcmV0dXJuOwo+ICtlcnI6Cj4gKwkvKiBEbyBub3QgbG9nIGVycm9ycyBjYXVzZWQgYnkgbW9k dWxlIHVubG9hZCBvciBkZXZpY2UgdW5wbHVnICovCj4gKwlpZiAocmV0ICE9IC1FQ09OTlJFU0VU ICYmIHJldCAhPSAtRVNIVVRET1dOKQo+ICsJCWRldl9lcnIoJmdtMTJ1MzIwLT51ZGV2LT5kZXYs ICJGcmFtZSB1cGRhdGUgZXJyb3I6ICVkXG4iLCByZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBnbTEydTMyMF9mYl9tYXJrX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICsJ CQkJICAgc3RydWN0IGRybV9yZWN0ICpkaXJ0eSkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2Rl dmljZSAqZ20xMnUzMjAgPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKm9sZF9mYiA9IE5VTEw7Cj4gKwlib29sIHdha2V1cCA9IGZhbHNlOwo+ICsKPiAr CW11dGV4X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gKwo+ICsJaWYgKGdtMTJ1 MzIwLT5mYl91cGRhdGUuZmIgIT0gZmIpIHsKPiArCQlvbGRfZmIgPSBnbTEydTMyMC0+ZmJfdXBk YXRlLmZiOwo+ICsJCWRybV9mcmFtZWJ1ZmZlcl9nZXQoZmIpOwo+ICsJCWdtMTJ1MzIwLT5mYl91 cGRhdGUuZmIgPSBmYjsKPiArCQlnbTEydTMyMC0+ZmJfdXBkYXRlLnJlY3QgPSAqZGlydHk7Cj4g KwkJd2FrZXVwID0gdHJ1ZTsKPiArCX0gZWxzZSB7Cj4gKwkJc3RydWN0IGRybV9yZWN0ICpyZWN0 ID0gJmdtMTJ1MzIwLT5mYl91cGRhdGUucmVjdDsKPiArCj4gKwkJcmVjdC0+eDEgPSBtaW4ocmVj dC0+eDEsIGRpcnR5LT54MSk7Cj4gKwkJcmVjdC0+eTEgPSBtaW4ocmVjdC0+eTEsIGRpcnR5LT55 MSk7Cj4gKwkJcmVjdC0+eDIgPSBtYXgocmVjdC0+eDIsIGRpcnR5LT54Mik7Cj4gKwkJcmVjdC0+ eTIgPSBtYXgocmVjdC0+eTIsIGRpcnR5LT55Mik7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2Nr KCZnbTEydTMyMC0+ZmJfdXBkYXRlLmxvY2spOwo+ICsKPiArCWlmICh3YWtldXApCj4gKwkJd2Fr ZV91cCgmZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0cSk7Cj4gKwo+ICsJaWYgKG9sZF9mYikKPiAr CQlkcm1fZnJhbWVidWZmZXJfcHV0KG9sZF9mYik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdt MTJ1MzIwX3N0YXJ0X2ZiX3VwZGF0ZShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkK PiArewo+ICsJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKPiArCWdtMTJ1 MzIwLT5mYl91cGRhdGUucnVuID0gdHJ1ZTsKPiArCW11dGV4X3VubG9jaygmZ20xMnUzMjAtPmZi X3VwZGF0ZS5sb2NrKTsKPiArCj4gKwlxdWV1ZV93b3JrKGdtMTJ1MzIwLT5mYl91cGRhdGUud29y a3EsICZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmspOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBn bTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShzdHJ1Y3QgZ20xMnUzMjBfZGV2aWNlICpnbTEydTMyMCkK PiArewo+ICsJbXV0ZXhfbG9jaygmZ20xMnUzMjAtPmZiX3VwZGF0ZS5sb2NrKTsKPiArCWdtMTJ1 MzIwLT5mYl91cGRhdGUucnVuID0gZmFsc2U7Cj4gKwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5m Yl91cGRhdGUubG9jayk7Cj4gKwo+ICsJd2FrZV91cCgmZ20xMnUzMjAtPmZiX3VwZGF0ZS53YWl0 cSk7Cj4gKwljYW5jZWxfd29ya19zeW5jKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmspOwo+ICsK PiArCW11dGV4X2xvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gKwlpZiAoZ20xMnUz MjAtPmZiX3VwZGF0ZS5mYikgewo+ICsJCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZ20xMnUzMjAtPmZi X3VwZGF0ZS5mYik7Cj4gKwkJZ20xMnUzMjAtPmZiX3VwZGF0ZS5mYiA9IE5VTEw7Cj4gKwl9Cj4g KwltdXRleF91bmxvY2soJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZ20xMnUzMjBfc2V0X2Vjb21vZGUoc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20x MnUzMjApCj4gK3sKPiArCXJldHVybiBnbTEydTMyMF9taXNjX3JlcXVlc3QoZ20xMnUzMjAsIE1J U0NfUkVRX0dFVF9TRVRfRUNPX0EsCj4gKwkJCQkgICAgIE1JU0NfUkVRX0dFVF9TRVRfRUNPX0Is IDB4MDEgLyogc2V0ICovLAo+ICsJCQkJICAgICBlY29fbW9kZSA/IDB4MDEgOiAweDAwLCAweDAw LCAweDAxKTsKPiArfQo+ICsKPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKy8qIGdtMTJ1MzIwIGNvbm5l Y3RvcgkJCQkJCSAgICAgICovCj4gKwo+ICsvKgo+ICsgKsKgV2UgdXNlIGZha2UgRURJRCBpbmZv IHNvIHRoYXQgdXNlcnNwYWNlIGtub3cgdGhhdCBpdCBpcyBkZWFsaW5nIHdpdGgKPiArICogYW4g QWNlciBwcm9qZWN0b3IsIHJhdGhlciB0aGVuIGxpc3RpbmcgdGhpcyBhcyBhbiAidW5rbm93biIg bW9uaXRvci4KPiArICogTm90ZSB0aGlzIGFzc3VtZXMgdGhpcyBkcml2ZXIgaXMgb25seSBldmVy IHVzZWQgd2l0aCB0aGUgQWNlciBDMTIwLCBpZiB3ZQo+ICsgKiBhZGQgc3VwcG9ydCBmb3Igb3Ro ZXIgZGV2aWNlcyB0aGUgdmVuZG9yIGFuZCBtb2RlbCBzaG91bGQgYmUgcGFyYW1ldGVyaXplZC4K PiArICovCj4gK3N0YXRpYyBzdHJ1Y3QgZWRpZCBnbTEydTMyMF9lZGlkID0gewo+ICsJLmhlYWRl cgkJPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAgfSwK PiArCS5tZmdfaWQJCT0geyAweDA0LCAweDcyIH0sCS8qICJBQ1IiICovCj4gKwkucHJvZF9jb2Rl CT0geyAweDIwLCAweGMxIH0sCS8qIEMxMjBoICovCj4gKwkuc2VyaWFsCQk9IDB4YWE1NWFhNTUs Cj4gKwkubWZnX3dlZWsJPSAxLAo+ICsJLm1mZ195ZWFyCT0gMTYsCj4gKwkudmVyc2lvbgk9IDEs CQkJLyogRURJRCAxLjMgKi8KPiArCS5yZXZpc2lvbgk9IDMsCQkJLyogRURJRCAxLjMgKi8KPiAr CS5pbnB1dAkJPSAweDA4LAkJCS8qIEFuYWxvZyBpbnB1dCAqLwo+ICsJLmZlYXR1cmVzCT0gMHgw YSwJCQkvKiBQcmVmIHRpbWluZyBpbiBEVEQgMSAqLwo+ICsJLnN0YW5kYXJkX3RpbWluZ3MgPSB7 IHsgMSwgMSB9LCB7IDEsIDEgfSwgeyAxLCAxIH0sIHsgMSwgMSB9LAo+ICsJCQkgICAgICB7IDEs IDEgfSwgeyAxLCAxIH0sIHsgMSwgMSB9LCB7IDEsIDEgfSB9LAo+ICsJLmRldGFpbGVkX3RpbWlu Z3MgPSB7IHsKPiArCQkucGl4ZWxfY2xvY2sgPSAzMzgzLAo+ICsJCS8qIGhhY3RpdmUgPSA4NDgs IGhibGFuayA9IDI1NiAqLwo+ICsJCS5kYXRhLnBpeGVsX2RhdGEuaGFjdGl2ZV9sbyA9IDB4NTAs Cj4gKwkJLmRhdGEucGl4ZWxfZGF0YS5oYmxhbmtfbG8gPSAweDAwLAo+ICsJCS5kYXRhLnBpeGVs X2RhdGEuaGFjdGl2ZV9oYmxhbmtfaGkgPSAweDMxLAo+ICsJCS8qIHZhY3RpdmUgPSA0ODAsIHZi bGFuayA9IDI4ICovCj4gKwkJLmRhdGEucGl4ZWxfZGF0YS52YWN0aXZlX2xvID0gMHhlMCwKPiAr CQkuZGF0YS5waXhlbF9kYXRhLnZibGFua19sbyA9IDB4MWMsCj4gKwkJLmRhdGEucGl4ZWxfZGF0 YS52YWN0aXZlX3ZibGFua19oaSA9IDB4MTAsCj4gKwkJLyogaHN5bmMgb2Zmc2V0IDQwIHB3IDEy OCwgdnN5bmMgb2Zmc2V0IDEgcHcgNCAqLwo+ICsJCS5kYXRhLnBpeGVsX2RhdGEuaHN5bmNfb2Zm c2V0X2xvID0gMHgyOCwKPiArCQkuZGF0YS5waXhlbF9kYXRhLmhzeW5jX3B1bHNlX3dpZHRoX2xv ID0gMHg4MCwKPiArCQkuZGF0YS5waXhlbF9kYXRhLnZzeW5jX29mZnNldF9wdWxzZV93aWR0aF9s byA9IDB4MTQsCj4gKwkJLmRhdGEucGl4ZWxfZGF0YS5oc3luY192c3luY19vZmZzZXRfcHVsc2Vf d2lkdGhfaGkgPSAweDAwLAo+ICsJCS8qIERpZ2l0YWwgc2VwYXJhdGUgc3luY3MsIGhzeW5jKywg dnN5bmMrICovCj4gKwkJLmRhdGEucGl4ZWxfZGF0YS5taXNjID0gMHgxZSwKPiArCX0sIHsKPiAr CQkucGl4ZWxfY2xvY2sgPSAwLAo+ICsJCS5kYXRhLm90aGVyX2RhdGEudHlwZSA9IDB4ZmQsIC8q IE1vbml0b3IgcmFuZ2VzICovCj4gKwkJLmRhdGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLm1pbl92 ZnJlcSA9IDU5LAo+ICsJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5tYXhfdmZyZXEgPSA2 MSwKPiArCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEucmFuZ2UubWluX2hmcmVxX2toeiA9IDI5LAo+ ICsJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5tYXhfaGZyZXFfa2h6ID0gMzIsCj4gKwkJ LmRhdGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLnBpeGVsX2Nsb2NrX21oeiA9IDQsIC8qIDQwIE1I eiAqLwo+ICsJCS5kYXRhLm90aGVyX2RhdGEuZGF0YS5yYW5nZS5mbGFncyA9IDAsCj4gKwkJLmRh dGEub3RoZXJfZGF0YS5kYXRhLnJhbmdlLmZvcm11bGEuY3Z0ID0gewo+ICsJCQkweGEwLCAweDIw LCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwIH0sCj4gKwl9LCB7Cj4gKwkJLnBpeGVsX2Ns b2NrID0gMCwKPiArCQkuZGF0YS5vdGhlcl9kYXRhLnR5cGUgPSAweGZjLCAvKiBNb2RlbCBzdHJp bmcgKi8KPiArCQkuZGF0YS5vdGhlcl9kYXRhLmRhdGEuc3RyLnN0ciA9IHsKPiArCQkJJ1AnLCAn cicsICdvJywgJ2onLCAnZScsICdjJywgJ3QnLCAnbycsICdyJywgJ1xuJywKPiArCQkJJyAnLCAn ICcsICAnICcgfSwKPiArCX0sIHsKPiArCQkucGl4ZWxfY2xvY2sgPSAwLAo+ICsJCS5kYXRhLm90 aGVyX2RhdGEudHlwZSA9IDB4ZmUsIC8qIFVuc3BlY2lmaWVkIHRleHQgLyBwYWRkaW5nICovCj4g KwkJLmRhdGEub3RoZXJfZGF0YS5kYXRhLnN0ci5zdHIgPSB7Cj4gKwkJCSdcbicsICcgJywgJyAn LCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsCj4gKwkJCScgJywgJyAnLCAgJyAn IH0sCj4gKwl9IH0sCj4gKwkuY2hlY2tzdW0gPSAweDEzLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBnbTEydTMyMF9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQo+ICt7Cj4gKwlkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rvciwg JmdtMTJ1MzIwX2VkaWQpOwo+ICsJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3Is ICZnbTEydTMyMF9lZGlkKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX2hlbHBlcl9mdW5jcyBnbTEydTMyMF9jb25uX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5n ZXRfbW9kZXMgPSBnbTEydTMyMF9jb25uX2dldF9tb2RlcywKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBnbTEydTMyMF9jb25uX2Z1bmNzID0gewo+ ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMs Cj4gKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKPiArCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9t aWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0 YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBnbTEydTMyMF9jb25uX2luaXQoc3RydWN0IGdt MTJ1MzIwX2RldmljZSAqZ20xMnUzMjApCj4gK3sKPiArCWRybV9jb25uZWN0b3JfaGVscGVyX2Fk ZCgmZ20xMnUzMjAtPmNvbm4sICZnbTEydTMyMF9jb25uX2hlbHBlcl9mdW5jcyk7Cj4gKwlyZXR1 cm4gZHJtX2Nvbm5lY3Rvcl9pbml0KCZnbTEydTMyMC0+ZGV2LCAmZ20xMnUzMjAtPmNvbm4sCj4g KwkJCQkgICZnbTEydTMyMF9jb25uX2Z1bmNzLCBEUk1fTU9ERV9DT05ORUNUT1JfVkdBKTsKPiAr fQo+ICsKPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKy8qIGdtMTJ1MzIwIChzaW1wbGUpIGRpc3BsYXkg cGlwZQkJCQkgICAgICAqLwo+ICsKPiArc3RhdGljIHZvaWQgZ20xMnUzMjBfcGlwZV9lbmFibGUo c3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAo+ICsJCQkJIHN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJCSBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBw aXBlLT5jcnRjLmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgcmVjdCA9IHsg MCwgMCwgR00xMlUzMjBfVVNFUl9XSURUSCwgR00xMlUzMjBfSEVJR0hUIH07Cj4gKwo+ICsJZ20x MnUzMjBfZmJfbWFya19kaXJ0eShwbGFuZV9zdGF0ZS0+ZmIsICZyZWN0KTsKPiArCWdtMTJ1MzIw X3N0YXJ0X2ZiX3VwZGF0ZShnbTEydTMyMCk7Cj4gKwlnbTEydTMyMC0+cGlwZV9lbmFibGVkID0g dHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ20xMnUzMjBfcGlwZV9kaXNhYmxlKHN0cnVj dCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIw X2RldmljZSAqZ20xMnUzMjAgPSBwaXBlLT5jcnRjLmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJ Z20xMnUzMjBfc3RvcF9mYl91cGRhdGUoZ20xMnUzMjApOwo+ICsJZ20xMnUzMjAtPnBpcGVfZW5h YmxlZCA9IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBnbTEydTMyMF9waXBlX3VwZGF0 ZShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCj4gKwkJCQkgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSA9IHBpcGUtPnBsYW5lLnN0YXRlOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0g JnBpcGUtPmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgcmVjdDsKPiArCj4gKwlpZiAoZHJtX2F0 b21pY19oZWxwZXJfZGFtYWdlX21lcmdlZChvbGRfc3RhdGUsIHN0YXRlLCAmcmVjdCkpCj4gKwkJ Z20xMnUzMjBfZmJfbWFya19kaXJ0eShwaXBlLT5wbGFuZS5zdGF0ZS0+ZmIsICZyZWN0KTsKPiAr Cj4gKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7Cj4gKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ ZGV2LT5ldmVudF9sb2NrKTsKPiArCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBj cnRjLT5zdGF0ZS0+ZXZlbnQpOwo+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7Cj4gKwkJ c3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOwo+ICsJfQo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzIGdtMTJ1 MzIwX3BpcGVfZnVuY3MgPSB7Cj4gKwkuZW5hYmxlCSAgICA9IGdtMTJ1MzIwX3BpcGVfZW5hYmxl LAo+ICsJLmRpc2FibGUgICAgPSBnbTEydTMyMF9waXBlX2Rpc2FibGUsCj4gKwkudXBkYXRlCSAg ICA9IGdtMTJ1MzIwX3BpcGVfdXBkYXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHVpbnQz Ml90IGdtMTJ1MzIwX3BpcGVfZm9ybWF0c1tdID0gewo+ICsJRFJNX0ZPUk1BVF9YUkdCODg4OCwK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1aW50NjRfdCBnbTEydTMyMF9waXBlX21vZGlmaWVy c1tdID0gewo+ICsJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+ICsJRFJNX0ZPUk1BVF9NT0RfSU5W QUxJRAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgZ20xMnUzMjBfZHJpdmVyX3JlbGVhc2Uoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20x MnUzMjAgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWdtMTJ1MzIwX3VzYl9mcmVlKGdtMTJ1 MzIwKTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7Cj4gKwlkcm1fZGV2X2Zpbmko ZGV2KTsKPiArCWtmcmVlKGdtMTJ1MzIwKTsKPiArfQo+ICsKPiArREVGSU5FX0RSTV9HRU1fU0hN RU1fRk9QUyhnbTEydTMyMF9mb3BzKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBn bTEydTMyMF9kcm1fZHJpdmVyID0gewo+ICsJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RF U0VUIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9BVE9NSUMgfAo+ICsJCQkgICBEUklWRVJfUFJJTUUs Cj4gKwo+ICsJLm5hbWUJCSA9IERSSVZFUl9OQU1FLAo+ICsJLmRlc2MJCSA9IERSSVZFUl9ERVND LAo+ICsJLmRhdGUJCSA9IERSSVZFUl9EQVRFLAo+ICsJLm1ham9yCQkgPSBEUklWRVJfTUFKT1Is Cj4gKwkubWlub3IJCSA9IERSSVZFUl9NSU5PUiwKPiArCj4gKwkucmVsZWFzZQkgPSBnbTEydTMy MF9kcml2ZXJfcmVsZWFzZSwKPiArCS5mb3BzCQkgPSAmZ20xMnUzMjBfZm9wcywKPiArCURSTV9H RU1fU0hNRU1fRFJJVkVSX09QUywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X21vZGVfY29uZmlnX2Z1bmNzIGdtMTJ1MzIwX21vZGVfY29uZmlnX2Z1bmNzID0gewo+ICsJLmZi X2NyZWF0ZSA9IGRybV9nZW1fZmJfY3JlYXRlX3dpdGhfZGlydHksCj4gKwkuYXRvbWljX2NoZWNr ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9t aWNfaGVscGVyX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZ20xMnUzMjBfdXNiX3By b2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCj4gKwkJCSAgICAgIGNvbnN0IHN0 cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKPiArewo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAq Z20xMnUzMjA7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ICsJaW50IHJldDsKPiArCj4g KwkvKgo+ICsJICogVGhlIGdtMTJ1MzIwIHByZXNlbnRzIGl0c2VsZiB0byB0aGUgc3lzdGVtIGFz IDIgdXNiIG1hc3Mtc3RvcmFnZQo+ICsJICogaW50ZXJmYWNlcywgd2Ugb25seSBjYXJlIGFib3V0 IC8gbmVlZCB0aGUgZmlyc3Qgb25lLgo+ICsJICovCj4gKwlpZiAoaW50ZXJmYWNlLT5jdXJfYWx0 c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDApCj4gKwkJcmV0dXJuIC1FTk9ERVY7 Cj4gKwo+ICsJZ20xMnUzMjAgPSBremFsbG9jKHNpemVvZigqZ20xMnUzMjApLCBHRlBfS0VSTkVM KTsKPiArCWlmIChnbTEydTMyMCA9PSBOVUxMKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiAr CWdtMTJ1MzIwLT51ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwo+ICsJSU5J VF9XT1JLKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndvcmssIGdtMTJ1MzIwX2ZiX3VwZGF0ZV93b3Jr KTsKPiArCW11dGV4X2luaXQoJmdtMTJ1MzIwLT5mYl91cGRhdGUubG9jayk7Cj4gKwlpbml0X3dh aXRxdWV1ZV9oZWFkKCZnbTEydTMyMC0+ZmJfdXBkYXRlLndhaXRxKTsKPiArCj4gKwlkZXYgPSAm Z20xMnUzMjAtPmRldjsKPiArCXJldCA9IGRybV9kZXZfaW5pdChkZXYsICZnbTEydTMyMF9kcm1f ZHJpdmVyLCAmaW50ZXJmYWNlLT5kZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCWtmcmVlKGdtMTJ1 MzIwKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJZGV2LT5kZXZfcHJpdmF0ZSA9IGdtMTJ1 MzIwOwo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7Cj4gKwlkZXYtPm1vZGVfY29u ZmlnLm1pbl93aWR0aCA9IEdNMTJVMzIwX1VTRVJfV0lEVEg7Cj4gKwlkZXYtPm1vZGVfY29uZmln Lm1heF93aWR0aCA9IEdNMTJVMzIwX1VTRVJfV0lEVEg7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1p bl9oZWlnaHQgPSBHTTEyVTMyMF9IRUlHSFQ7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWln aHQgPSBHTTEyVTMyMF9IRUlHSFQ7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJmdtMTJ1 MzIwX21vZGVfY29uZmlnX2Z1bmNzOwo+ICsKPiArCXJldCA9IGdtMTJ1MzIwX3VzYl9hbGxvYyhn bTEydTMyMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3B1dDsKPiArCj4gKwlyZXQgPSBn bTEydTMyMF9zZXRfZWNvbW9kZShnbTEydTMyMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJy X3B1dDsKPiArCj4gKwlyZXQgPSBnbTEydTMyMF9jb25uX2luaXQoZ20xMnUzMjApOwo+ICsJaWYg KHJldCkKPiArCQlnb3RvIGVycl9wdXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX3NpbXBsZV9kaXNwbGF5 X3BpcGVfaW5pdCgmZ20xMnUzMjAtPmRldiwKPiArCQkJCQkgICAmZ20xMnUzMjAtPnBpcGUsCj4g KwkJCQkJICAgJmdtMTJ1MzIwX3BpcGVfZnVuY3MsCj4gKwkJCQkJICAgZ20xMnUzMjBfcGlwZV9m b3JtYXRzLAo+ICsJCQkJCSAgIEFSUkFZX1NJWkUoZ20xMnUzMjBfcGlwZV9mb3JtYXRzKSwKPiAr CQkJCQkgICBnbTEydTMyMF9waXBlX21vZGlmaWVycywKPiArCQkJCQkgICAmZ20xMnUzMjAtPmNv bm4pOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9wdXQ7Cj4gKwo+ICsJZHJtX21vZGVfY29u ZmlnX3Jlc2V0KGRldik7Cj4gKwo+ICsJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7 Cj4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRldiwgMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdv dG8gZXJyX3B1dDsKPiArCj4gKwlkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cChkZXYsIGRldi0+bW9k ZV9jb25maWcucHJlZmVycmVkX2RlcHRoKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9w dXQ6Cj4gKwlkcm1fZGV2X3B1dChkZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgZ20xMnUzMjBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlu dGVyZmFjZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRh dGEoaW50ZXJmYWNlKTsKPiArCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlnbTEydTMyMF9zdG9wX2ZiX3VwZGF0ZShnbTEydTMyMCk7 Cj4gKwlkcm1fZGV2X3VucGx1ZyhkZXYpOwo+ICsJZHJtX2Rldl9wdXQoZGV2KTsKPiArfQo+ICsK PiArI2lmZGVmIENPTkZJR19QTQo+ICtzdGF0aWMgaW50IGdtMTJ1MzIwX3N1c3BlbmQoc3RydWN0 IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKPiArCQkJICAgIHBtX21lc3NhZ2VfdCBtZXNzYWdl KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRl cmZhY2UpOwo+ICsJc3RydWN0IGdtMTJ1MzIwX2RldmljZSAqZ20xMnUzMjAgPSBkZXYtPmRldl9w cml2YXRlOwo+ICsKPiArCWlmIChnbTEydTMyMC0+cGlwZV9lbmFibGVkKQo+ICsJCWdtMTJ1MzIw X3N0b3BfZmJfdXBkYXRlKGdtMTJ1MzIwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBnbTEydTMyMF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFj ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50 ZXJmYWNlKTsKPiArCXN0cnVjdCBnbTEydTMyMF9kZXZpY2UgKmdtMTJ1MzIwID0gZGV2LT5kZXZf cHJpdmF0ZTsKPiArCj4gKwlnbTEydTMyMF9zZXRfZWNvbW9kZShnbTEydTMyMCk7Cj4gKwlpZiAo Z20xMnUzMjAtPnBpcGVfZW5hYmxlZCkKPiArCQlnbTEydTMyMF9zdGFydF9mYl91cGRhdGUoZ20x MnUzMjApOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Cj4gKwl7IFVTQl9ERVZJQ0Uo MHgxZGUxLCAweGMxMDIpIH0sCj4gKwl7fSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRSh1 c2IsIGlkX3RhYmxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnbTEydTMyMF91 c2JfZHJpdmVyID0gewo+ICsJLm5hbWUgPSAiZ20xMnUzMjAiLAo+ICsJLnByb2JlID0gZ20xMnUz MjBfdXNiX3Byb2JlLAo+ICsJLmRpc2Nvbm5lY3QgPSBnbTEydTMyMF91c2JfZGlzY29ubmVjdCwK PiArCS5pZF90YWJsZSA9IGlkX3RhYmxlLAo+ICsjaWZkZWYgQ09ORklHX1BNCj4gKwkuc3VzcGVu ZCA9IGdtMTJ1MzIwX3N1c3BlbmQsCj4gKwkucmVzdW1lID0gZ20xMnUzMjBfcmVzdW1lLAo+ICsJ LnJlc2V0X3Jlc3VtZSA9IGdtMTJ1MzIwX3Jlc3VtZSwKPiArI2VuZGlmCj4gK307Cj4gKwo+ICtt b2R1bGVfdXNiX2RyaXZlcihnbTEydTMyMF91c2JfZHJpdmVyKTsKPiArTU9EVUxFX0FVVEhPUigi SGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4iKTsKPiArTU9EVUxFX0xJQ0VOU0Uo IkdQTCIpOwo+IC0tIAo+IDIuMjEuMAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==