From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id DD12E6E20E for ; Mon, 20 Aug 2018 13:01:56 +0000 (UTC) From: Chris Wilson Date: Mon, 20 Aug 2018 14:01:47 +0100 Message-Id: <20180820130149.30566-5-chris@chris-wilson.co.uk> In-Reply-To: <20180820130149.30566-1-chris@chris-wilson.co.uk> References: <20180820130149.30566-1-chris@chris-wilson.co.uk> Subject: [igt-dev] [PATCH i-g-t 4/6] igt/shell: Primitive drm device/drivers builtin List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: VGhlIGRybSBtb2R1bGUgKGJ1aWx0aW4pIHByb3ZpZGVzIGFjY2VzcyB0byBkZXZpY2VzIChmZCkg YW5kIHRoZWlyCmFzc29jaWF0ZWQgZHJpdmVycy4gQnkgaXRzZWxmLCBpdCBwcm92aWRlcyB0aGUg Y29tbW9uIEtNUy9HRU0KYWJzdHJhY3Rpb25zIGFuZCBpb2N0bHMuCgpTaWduZWQtb2ZmLWJ5OiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBzaGVsbC9kcm0vZHJt LWNvbnN0YW50cy5jICAgfCAxNzMgKysrKysrKysrKysrKysrCiBzaGVsbC9kcm0vZHJtLWNvbnN0 YW50cy5oICAgfCAgIDYgKwogc2hlbGwvZHJtL2RybS1kZXZpY2UuYyAgICAgIHwgNDE3ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc2hlbGwvZHJtL2RybS1kZXZpY2UuaCAg ICAgIHwgICA5ICsKIHNoZWxsL2RybS9kcm0tZ2VtLmMgICAgICAgICB8ICAyMyArKwogc2hlbGwv ZHJtL2RybS1rbW9kLmMgICAgICAgIHwgMTI1ICsrKysrKysrKysrCiBzaGVsbC9kcm0vZHJtLWtt b2QuaCAgICAgICAgfCAgIDkgKwogc2hlbGwvZHJtL2RybS1tb2R1bGUuYyAgICAgIHwgMTMwICsr KysrKysrKysrCiBzaGVsbC9leGFtcGxlcy9kcm0vYXV0aC5qcyAgfCAgNjIgKysrKysrCiBzaGVs bC9pbmNsdWRlL2RybS1idWlsdGluLmggfCAgMTQgKysKIHNoZWxsL2luY2x1ZGUvZHJtLWdlbS5o ICAgICB8ICAgOCArCiBzaGVsbC9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDYgKwogMTIgZmls ZXMgY2hhbmdlZCwgOTgyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzaGVsbC9k cm0vZHJtLWNvbnN0YW50cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hlbGwvZHJtL2RybS1jb25z dGFudHMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNoZWxsL2RybS9kcm0tZGV2aWNlLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzaGVsbC9kcm0vZHJtLWRldmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg c2hlbGwvZHJtL2RybS1nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNoZWxsL2RybS9kcm0ta21v ZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hlbGwvZHJtL2RybS1rbW9kLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzaGVsbC9kcm0vZHJtLW1vZHVsZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hlbGwv ZXhhbXBsZXMvZHJtL2F1dGguanMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzaGVsbC9pbmNsdWRlL2Ry bS1idWlsdGluLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzaGVsbC9pbmNsdWRlL2RybS1nZW0uaAoK ZGlmZiAtLWdpdCBhL3NoZWxsL2RybS9kcm0tY29uc3RhbnRzLmMgYi9zaGVsbC9kcm0vZHJtLWNv bnN0YW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMTU5MGVmODc2 Ci0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwvZHJtL2RybS1jb25zdGFudHMuYwpAQCAtMCwwICsx LDE3MyBAQAorI2luY2x1ZGUgImRybS11YXBpL2RybS5oIgorI2luY2x1ZGUgImR1a3RhcGUuaCIK KworI2luY2x1ZGUgImRybS1jb25zdGFudHMuaCIKKworI2RlZmluZSBDKHgpIHsgI3gsIHggfQor CitzdGF0aWMgY29uc3QgZHVrX251bWJlcl9saXN0X2VudHJ5IGRybV9pb2N0bHNbXSA9IHsKKwlD KERSTV9JT0NUTF9WRVJTSU9OKSwKKwlDKERSTV9JT0NUTF9HRVRfVU5JUVVFKSwKKwlDKERSTV9J T0NUTF9HRVRfTUFHSUMpLAorCUMoRFJNX0lPQ1RMX0lSUV9CVVNJRCksCisJQyhEUk1fSU9DVExf R0VUX01BUCksCisJQyhEUk1fSU9DVExfR0VUX0NMSUVOVCksCisJQyhEUk1fSU9DVExfR0VUX1NU QVRTKSwKKwlDKERSTV9JT0NUTF9TRVRfVkVSU0lPTiksCisJQyhEUk1fSU9DVExfTU9ERVNFVF9D VEwpLAorCUMoRFJNX0lPQ1RMX0dFTV9DTE9TRSksCisJQyhEUk1fSU9DVExfR0VNX0ZMSU5LKSwK KwlDKERSTV9JT0NUTF9HRU1fT1BFTiksCisJQyhEUk1fSU9DVExfR0VUX0NBUCksCisJQyhEUk1f SU9DVExfU0VUX0NMSUVOVF9DQVApLAorCisJQyhEUk1fSU9DVExfU0VUX1VOSVFVRSksCisJQyhE Uk1fSU9DVExfQVVUSF9NQUdJQyksCisJQyhEUk1fSU9DVExfQkxPQ0spLAorCUMoRFJNX0lPQ1RM X1VOQkxPQ0spLAorCUMoRFJNX0lPQ1RMX0NPTlRST0wpLAorCUMoRFJNX0lPQ1RMX0FERF9NQVAp LAorCUMoRFJNX0lPQ1RMX0FERF9CVUZTKSwKKwlDKERSTV9JT0NUTF9NQVJLX0JVRlMpLAorCUMo RFJNX0lPQ1RMX0lORk9fQlVGUyksCisJQyhEUk1fSU9DVExfTUFQX0JVRlMpLAorCUMoRFJNX0lP Q1RMX0ZSRUVfQlVGUyksCisKKwlDKERSTV9JT0NUTF9STV9NQVApLAorCisJQyhEUk1fSU9DVExf U0VUX1NBUkVBX0NUWCksCisJQyhEUk1fSU9DVExfR0VUX1NBUkVBX0NUWCksCisKKwlDKERSTV9J T0NUTF9TRVRfTUFTVEVSKSwKKwlDKERSTV9JT0NUTF9EUk9QX01BU1RFUiksCisKKwlDKERSTV9J T0NUTF9BRERfQ1RYKSwKKwlDKERSTV9JT0NUTF9STV9DVFgpLAorCUMoRFJNX0lPQ1RMX01PRF9D VFgpLAorCUMoRFJNX0lPQ1RMX0dFVF9DVFgpLAorCUMoRFJNX0lPQ1RMX1NXSVRDSF9DVFgpLAor CUMoRFJNX0lPQ1RMX05FV19DVFgpLAorCUMoRFJNX0lPQ1RMX1JFU19DVFgpLAorCUMoRFJNX0lP Q1RMX0FERF9EUkFXKSwKKwlDKERSTV9JT0NUTF9STV9EUkFXKSwKKwlDKERSTV9JT0NUTF9ETUEp LAorCUMoRFJNX0lPQ1RMX0xPQ0spLAorCUMoRFJNX0lPQ1RMX1VOTE9DSyksCisJQyhEUk1fSU9D VExfRklOSVNIKSwKKworCUMoRFJNX0lPQ1RMX1BSSU1FX0hBTkRMRV9UT19GRCksCisJQyhEUk1f SU9DVExfUFJJTUVfRkRfVE9fSEFORExFKSwKKworCUMoRFJNX0lPQ1RMX0FHUF9BQ1FVSVJFKSwK KwlDKERSTV9JT0NUTF9BR1BfUkVMRUFTRSksCisJQyhEUk1fSU9DVExfQUdQX0VOQUJMRSksCisJ QyhEUk1fSU9DVExfQUdQX0lORk8pLAorCUMoRFJNX0lPQ1RMX0FHUF9BTExPQyksCisJQyhEUk1f SU9DVExfQUdQX0ZSRUUpLAorCUMoRFJNX0lPQ1RMX0FHUF9CSU5EKSwKKwlDKERSTV9JT0NUTF9B R1BfVU5CSU5EKSwKKworCUMoRFJNX0lPQ1RMX1NHX0FMTE9DKSwKKwlDKERSTV9JT0NUTF9TR19G UkVFKSwKKworCUMoRFJNX0lPQ1RMX1dBSVRfVkJMQU5LKSwKKworCUMoRFJNX0lPQ1RMX0NSVENf R0VUX1NFUVVFTkNFKSwKKwlDKERSTV9JT0NUTF9DUlRDX1FVRVVFX1NFUVVFTkNFKSwKKworCUMo RFJNX0lPQ1RMX1VQREFURV9EUkFXKSwKKworCUMoRFJNX0lPQ1RMX01PREVfR0VUUkVTT1VSQ0VT KSwKKwlDKERSTV9JT0NUTF9NT0RFX0dFVENSVEMpLAorCUMoRFJNX0lPQ1RMX01PREVfU0VUQ1JU QyksCisJQyhEUk1fSU9DVExfTU9ERV9DVVJTT1IpLAorCUMoRFJNX0lPQ1RMX01PREVfR0VUR0FN TUEpLAorCUMoRFJNX0lPQ1RMX01PREVfU0VUR0FNTUEpLAorCUMoRFJNX0lPQ1RMX01PREVfR0VU RU5DT0RFUiksCisJQyhEUk1fSU9DVExfTU9ERV9HRVRDT05ORUNUT1IpLAorCUMoRFJNX0lPQ1RM X01PREVfQVRUQUNITU9ERSksCisJQyhEUk1fSU9DVExfTU9ERV9ERVRBQ0hNT0RFKSwKKworCUMo RFJNX0lPQ1RMX01PREVfR0VUUFJPUEVSVFkpLAorCUMoRFJNX0lPQ1RMX01PREVfU0VUUFJPUEVS VFkpLAorCUMoRFJNX0lPQ1RMX01PREVfR0VUUFJPUEJMT0IpLAorCUMoRFJNX0lPQ1RMX01PREVf R0VURkIpLAorCUMoRFJNX0lPQ1RMX01PREVfQURERkIpLAorCUMoRFJNX0lPQ1RMX01PREVfUk1G QiksCisJQyhEUk1fSU9DVExfTU9ERV9QQUdFX0ZMSVApLAorCUMoRFJNX0lPQ1RMX01PREVfRElS VFlGQiksCisKKwlDKERSTV9JT0NUTF9NT0RFX0NSRUFURV9EVU1CKSwKKwlDKERSTV9JT0NUTF9N T0RFX01BUF9EVU1CKSwKKwlDKERSTV9JT0NUTF9NT0RFX0RFU1RST1lfRFVNQiksCisJQyhEUk1f SU9DVExfTU9ERV9HRVRQTEFORVJFU09VUkNFUyksCisJQyhEUk1fSU9DVExfTU9ERV9HRVRQTEFO RSksCisJQyhEUk1fSU9DVExfTU9ERV9TRVRQTEFORSksCisJQyhEUk1fSU9DVExfTU9ERV9BRERG QjIpLAorCUMoRFJNX0lPQ1RMX01PREVfT0JKX0dFVFBST1BFUlRJRVMpLAorCUMoRFJNX0lPQ1RM X01PREVfT0JKX1NFVFBST1BFUlRZKSwKKwlDKERSTV9JT0NUTF9NT0RFX0NVUlNPUjIpLAorCUMo RFJNX0lPQ1RMX01PREVfQVRPTUlDKSwKKwlDKERSTV9JT0NUTF9NT0RFX0NSRUFURVBST1BCTE9C KSwKKwlDKERSTV9JT0NUTF9NT0RFX0RFU1RST1lQUk9QQkxPQiksCisKKwlDKERSTV9JT0NUTF9T WU5DT0JKX0NSRUFURSksCisJQyhEUk1fSU9DVExfU1lOQ09CSl9ERVNUUk9ZKSwKKwlDKERSTV9J T0NUTF9TWU5DT0JKX0hBTkRMRV9UT19GRCksCisJQyhEUk1fSU9DVExfU1lOQ09CSl9GRF9UT19I QU5ETEUpLAorCUMoRFJNX0lPQ1RMX1NZTkNPQkpfV0FJVCksCisJQyhEUk1fSU9DVExfU1lOQ09C Sl9SRVNFVCksCisJQyhEUk1fSU9DVExfU1lOQ09CSl9TSUdOQUwpLAorCisJQyhEUk1fSU9DVExf TU9ERV9DUkVBVEVfTEVBU0UpLAorCUMoRFJNX0lPQ1RMX01PREVfTElTVF9MRVNTRUVTKSwKKwlD KERSTV9JT0NUTF9NT0RFX0dFVF9MRUFTRSksCisJQyhEUk1fSU9DVExfTU9ERV9SRVZPS0VfTEVB U0UpLAorCisJeyB9LAorfTsKKworc3RhdGljIGNvbnN0IGR1a19udW1iZXJfbGlzdF9lbnRyeSBk cm1fY2Fwc1tdID0geworCUMoRFJNX0NBUF9EVU1CX0JVRkZFUiksCisJQyhEUk1fQ0FQX1ZCTEFO S19ISUdIX0NSVEMpLAorCUMoRFJNX0NBUF9EVU1CX1BSRUZFUlJFRF9ERVBUSCksCisJQyhEUk1f Q0FQX0RVTUJfUFJFRkVSX1NIQURPVyksCisJQyhEUk1fQ0FQX1BSSU1FKSwKKwlDKERSTV9DQVBf VElNRVNUQU1QX01PTk9UT05JQyksCisJQyhEUk1fQ0FQX0FTWU5DX1BBR0VfRkxJUCksCisJQyhE Uk1fQ0FQX0NVUlNPUl9XSURUSCksCisJQyhEUk1fQ0FQX0NVUlNPUl9IRUlHSFQpLAorCUMoRFJN X0NBUF9BRERGQjJfTU9ESUZJRVJTKSwKKwlDKERSTV9DQVBfUEFHRV9GTElQX1RBUkdFVCksCisJ QyhEUk1fQ0FQX0NSVENfSU5fVkJMQU5LX0VWRU5UKSwKKwlDKERSTV9DQVBfU1lOQ09CSiksCisK Kwl7IH0sCit9OworCitzdGF0aWMgY29uc3QgZHVrX251bWJlcl9saXN0X2VudHJ5IGRybV9jbGll bnRjYXBzW10gPSB7CisJQyhEUk1fQ0xJRU5UX0NBUF9TVEVSRU9fM0QpLAorCUMoRFJNX0NMSUVO VF9DQVBfVU5JVkVSU0FMX1BMQU5FUyksCisJQyhEUk1fQ0xJRU5UX0NBUF9BVE9NSUMpLAorCS8v QyhEUk1fQ0xJRU5UX0NBUF9BU1BFQ1RfUkFUSU8pLAorCS8vQyhEUk1fQ0xJRU5UX0NBUF9XUklU RUJBQ0tfQ09OTkVDVE9SUyksCisKKwl7IH0sCit9OworCit2b2lkIGRybV9jb25zdGFudHMoZHVr X2NvbnRleHQgKmN0eCkKK3sKKwlkdWtfcHVzaF9vYmplY3QoY3R4KTsKKwlkdWtfcHV0X251bWJl cl9saXN0KGN0eCwgLTEsIGRybV9pb2N0bHMpOworCWR1a19wdXRfcHJvcF9zdHJpbmcoY3R4LCAt MiwgImlvY3RsIik7CisKKwlkdWtfcHVzaF9vYmplY3QoY3R4KTsKKwlkdWtfcHV0X251bWJlcl9s aXN0KGN0eCwgLTEsIGRybV9jYXBzKTsKKwlkdWtfcHV0X3Byb3Bfc3RyaW5nKGN0eCwgLTIsICJj YXAiKTsKKworCWR1a19wdXNoX29iamVjdChjdHgpOworCWR1a19wdXRfbnVtYmVyX2xpc3QoY3R4 LCAtMSwgZHJtX2NsaWVudGNhcHMpOworCWR1a19wdXRfcHJvcF9zdHJpbmcoY3R4LCAtMiwgImNs aWVudGNhcCIpOworfQorCisjdW5kZWYgQwpkaWZmIC0tZ2l0IGEvc2hlbGwvZHJtL2RybS1jb25z dGFudHMuaCBiL3NoZWxsL2RybS9kcm0tY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi4wYjA0NjI0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGVsbC9kcm0v ZHJtLWNvbnN0YW50cy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBEUk1fQ09OU1RBTlRTX0gK KyNkZWZpbmUgRFJNX0NPTlNUQU5UU19ICisKK3ZvaWQgZHJtX2NvbnN0YW50cyhkdWtfY29udGV4 dCAqY3R4KTsKKworI2VuZGlmIC8qIERSTV9DT05TVEFOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvc2hl bGwvZHJtL2RybS1kZXZpY2UuYyBiL3NoZWxsL2RybS9kcm0tZGV2aWNlLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5lNTExNTI2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9z aGVsbC9kcm0vZHJtLWRldmljZS5jCkBAIC0wLDAgKzEsNDE3IEBACisjaW5jbHVkZSA8ZXJybm8u aD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisK KyNpbmNsdWRlICJkcm0tdWFwaS9kcm0uaCIKKyNpbmNsdWRlICJkdWt0YXBlLmgiCisjaW5jbHVk ZSAiaWd0LWJ1aWx0aW5zLmgiCisjaW5jbHVkZSAib3MtYnVpbHRpbi5oIgorCisjaW5jbHVkZSAi ZHJtLWRldmljZS5oIgorI2luY2x1ZGUgImRybS1rbW9kLmgiCisKK3N0YXRpYyBkdWtfcmV0X3Qg ZHJtX2RldmljZShkdWtfY29udGV4dCAqY3R4LCBpbnQgZmQpOworCitzdGF0aWMgZHVrX3JldF90 IGRybV9pb2N0bChkdWtfY29udGV4dCAqY3R4KQoreworCXVuc2lnbmVkIGxvbmcgY21kID0gZHVr X3JlcXVpcmVfdWludChjdHgsIC0yKTsKKwlkdWtfc2l6ZV90IHN6OworCWludCBlcnIsIGZkOwor CXZvaWQgKnB0cjsKKworCXB0ciA9IGR1a19nZXRfYnVmZmVyX2RhdGEoY3R4LCAtMSwgJnN6KTsK KwlpZiAoc3ogPiBfSU9DX1NJWkVNQVNLKQorCQlyZXR1cm4gLTE7CisKKwlkdWtfcHVzaF90aGlz KGN0eCk7CisJZHVrX2dldF9wcm9wX3N0cmluZyhjdHgsIC0xLCAiZmQiKTsKKwlmZCA9IGR1a19n ZXRfaW50KGN0eCwgLTEpOworCisJY21kICY9IH4oX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVT SElGVCk7CisJY21kIHw9IHN6IDw8IF9JT0NfU0laRVNISUZUOworCisJZG8geworCQllcnIgPSBp b2N0bChmZCwgY21kLCBwdHIpOworCX0gd2hpbGUgKGVyciA9PSAtMSAmJiAoZXJybm8gPT0gRUFH QUlOIHx8IGVycm5vID09IEVJTlRSKSk7CisKKwlpZiAoZXJyID09IC0xKQorCQlvc190aHJvd19l cnJubyhjdHgsIC1lcnJubyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGR1a19yZXRfdCBk cm1fZXhwZWN0X2lvY3RsKGR1a19jb250ZXh0ICpjdHgpCit7CisJdW5zaWduZWQgbG9uZyBjbWQg PSBkdWtfcmVxdWlyZV91aW50KGN0eCwgLTMpOworCWludCBleHBlY3QgPSBkdWtfcmVxdWlyZV9p bnQoY3R4LCAtMSk7CisJZHVrX3NpemVfdCBzejsKKwlpbnQgZXJyLCBmZDsKKwl2b2lkICpwdHI7 CisKKwlwdHIgPSBkdWtfZ2V0X2J1ZmZlcl9kYXRhKGN0eCwgLTIsICZzeik7CisJaWYgKHN6ID4g X0lPQ19TSVpFTUFTSykKKwkJcmV0dXJuIC0xOworCisJZHVrX3B1c2hfdGhpcyhjdHgpOworCWR1 a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgImZkIik7CisJZmQgPSBkdWtfZ2V0X2ludChjdHgs IC0xKTsKKworCWNtZCAmPSB+KF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpOworCWNt ZCB8PSBzeiA8PCBfSU9DX1NJWkVTSElGVDsKKworCWVyciA9IDA7CisJaWYgKGlvY3RsKGZkLCBj bWQsIHB0cikpCisJCWVyciA9IC1lcnJubzsKKwlpZiAoZXJyICE9IGV4cGVjdCkKKwkJb3NfdGhy b3dfZXJybm8oY3R4LCBlcnIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9k ZXZpY2UoZHVrX2NvbnRleHQgKmN0eCwgaW50IGZkKQoreworCXN0cnVjdCBzdGF0IHRtcGwsIHN0 OworCWNoYXIgcGF0aFs2NF07CisJaW50IGlkeDsKKworCWlmIChmc3RhdChmZCwgJnRtcGwpIDwg MCkKKwkJb3NfdGhyb3dfZXJybm8oY3R4LCAtZXJybm8pOworCisJaWR4ID0gdG1wbC5zdF9yZGV2 ICYgMHhmZjsKKwlpZiAoaWR4ICYgMHg4MCkKKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgp LCAiL2Rldi9kcmkvcmVuZGVyRCVkIiwgaWR4KTsKKwllbHNlIGlmIChpZHggJiAweDQwKQorCQlz bnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIvZGV2L2RyaS9jb250cm9sRCVkIiwgaWR4KTsK KwllbHNlCisJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9kZXYvZHJpL2NhcmQlZCIs IGlkeCk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRFdSIHwgT19DTE9FWEVDKTsKKwlpZiAoZmQg PCAwKQorCQlvc190aHJvd19lcnJubyhjdHgsIC1lcnJubyk7CisKKwlpZiAoZnN0YXQoZmQsICZz dCkgPCAwKSB7CisJCWludCBlcnIgPSAtZXJybm87CisKKwkJY2xvc2UoZmQpOworCQlvc190aHJv d19lcnJubyhjdHgsIGVycik7CisJfQorCisJaWYgKHN0LnN0X3JkZXYgIT0gdG1wbC5zdF9yZGV2 KSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBmZDsKK30KKwor c3RhdGljIGR1a19yZXRfdCBkcm1fcmVvcGVuKGR1a19jb250ZXh0ICpjdHgpCit7CisJY2hhciBw YXRoWzI1Nl07CisJaW50IGZkOworCisJZHVrX3B1c2hfdGhpcyhjdHgpOworCWR1a19nZXRfcHJv cF9zdHJpbmcoY3R4LCAtMSwgImZkIik7CisJZmQgPSBkdWtfZ2V0X2ludChjdHgsIC0xKTsKKwor ICAgICAgICBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIvcHJvYy9zZWxmL2ZkLyVkIiwg ZmQpOworICAgICAgICBmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKKwlpZiAoZmQgPCAwKQorCQlm ZCA9IGZpbmRfZGV2aWNlKGN0eCwgZHVrX2dldF9pbnQoY3R4LCAtMSkpOworCisJcmV0dXJuIGRy bV9kZXZpY2UoY3R4LCBmZCk7Cit9CisKK3N0YXRpYyBkdWtfcmV0X3QgZHJtX1NldE1hc3Rlcihk dWtfY29udGV4dCAqY3R4KQoreworCWludCBmZDsKKworCWR1a19wdXNoX3RoaXMoY3R4KTsKKwlk dWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJmZCIpOworCWZkID0gZHVrX2dldF9pbnQoY3R4 LCAtMSk7CisKKwlpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9TRVRfTUFTVEVSKSA8IDApCisJCW9z X3Rocm93X2Vycm5vKGN0eCwgLWVycm5vKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZHVr X3JldF90IGRybV9Ecm9wTWFzdGVyKGR1a19jb250ZXh0ICpjdHgpCit7CisJaW50IGZkOworCisJ ZHVrX3B1c2hfdGhpcyhjdHgpOworCWR1a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgImZkIik7 CisJZmQgPSBkdWtfZ2V0X2ludChjdHgsIC0xKTsKKworCWlmIChpb2N0bChmZCwgRFJNX0lPQ1RM X1NFVF9NQVNURVIpIDwgMCkKKwkJb3NfdGhyb3dfZXJybm8oY3R4LCAtZXJybm8pOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBkdWtfcmV0X3QgZHJtX0dldE1hZ2ljKGR1a19jb250ZXh0ICpj dHgpCit7CisJZHJtX21hZ2ljX3QgbWFnaWM7CisJaW50IGZkOworCisJZHVrX3B1c2hfdGhpcyhj dHgpOworCWR1a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgImZkIik7CisJZmQgPSBkdWtfZ2V0 X2ludChjdHgsIC0xKTsKKworCWlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0dFVF9NQUdJQywgJm1h Z2ljKSA8IDApCisJCW9zX3Rocm93X2Vycm5vKGN0eCwgLWVycm5vKTsKKworCWR1a19wdXNoX3Vp bnQoY3R4LCBtYWdpYyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBkdWtfcmV0X3QgZHJtX0F1 dGhNYWdpYyhkdWtfY29udGV4dCAqY3R4KQoreworCWRybV9tYWdpY190IG1hZ2ljID0gZHVrX2dl dF91aW50KGN0eCwgLTEpOworCWludCBmZDsKKworCWR1a19wdXNoX3RoaXMoY3R4KTsKKwlkdWtf Z2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJmZCIpOworCWZkID0gZHVrX2dldF9pbnQoY3R4LCAt MSk7CisKKwlpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9BVVRIX01BR0lDLCAmbWFnaWMpIDwgMCkK KwkJb3NfdGhyb3dfZXJybm8oY3R4LCAtZXJybm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBkdWtfZnVuY3Rpb25fbGlzdF9lbnRyeSBmdW5jc1tdID0geworCXsgInJlb3BlbiIs IGRybV9yZW9wZW4sIDAgfSwKKworCXsgImlvY3RsIiwgZHJtX2lvY3RsLCAyIH0sCisJeyAiZXhw ZWN0X2lvY3RsIiwgZHJtX2V4cGVjdF9pb2N0bCwgMyB9LAorCisJeyAiU2V0TWFzdGVyIiwgZHJt X1NldE1hc3RlciwgMCB9LAorCXsgIkRyb3BNYXN0ZXIiLCBkcm1fRHJvcE1hc3RlciwgMCB9LAor CisJeyAiR2V0TWFnaWMiLCBkcm1fR2V0TWFnaWMsIDAgfSwKKwl7ICJBdXRoTWFnaWMiLCBkcm1f QXV0aE1hZ2ljLCAxIH0sCisKKwl7fQorfTsKKworc3RhdGljIGR1a19yZXRfdCBkcm1fZGV2aWNl X2Nsb3NlKGR1a19jb250ZXh0ICpjdHgpCit7CisJaW50IGZkOworCisJZHVrX2dldF9wcm9wX3N0 cmluZyhjdHgsIDAsICJmZCIpOworCWZkID0gZHVrX2dldF9pbnQoY3R4LCAtMSk7CisJY2xvc2Uo ZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBkdWtfcmV0X3QgZHJtX2RldmljZShkdWtf Y29udGV4dCAqY3R4LCBpbnQgZmQpCit7CisJY2hhciBuYW1lWzE2XSA9IHt9OworCWRybV92ZXJz aW9uX3QgdmVyc2lvbiA9IHsKKwkJLm5hbWVfbGVuID0gc2l6ZW9mKG5hbWUpLAorCQkubmFtZSA9 IG5hbWUsCisJfTsKKworCWlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX1ZFUlNJT04sICZ2ZXJzaW9u KSA8IDApCisJCXJldHVybiAtMTsKKworCWR1a19wdXNoX29iamVjdChjdHgpOworCisJZHVrX3B1 c2hfdGhpcyhjdHgpOworCWR1a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgImRyaXZlcnMiKTsK KwlpZiAoZHVrX2dldF9wcm9wX3N0cmluZyhjdHgsIC0xLCBuYW1lKSkgeworCQlkdWtfZHVwX3Rv cChjdHgpOworCQlkdWtfc2V0X3Byb3RvdHlwZShjdHgsIC01KTsKKwkJZHVrX3B1dF9wcm9wX3N0 cmluZyhjdHgsIC00LCAiZHJpdmVyIik7CisJCWR1a19wb3AoY3R4KTsKKwl9IGVsc2UgeworCQlk dWtfcG9wKGN0eCk7CisJCS8vZHVrX2R1cF90b3AoY3R4KTsKKwkJLy9kdWtfc2V0X3Byb3RvdHlw ZShjdHgsIC0yKTsKKwkJZHVrX3B1dF9wcm9wX3N0cmluZyhjdHgsIC0xLCAiZHJpdmVyIik7CisJ fQorCWR1a19wb3AoY3R4KTsKKworCWR1a19wdXNoX2ludChjdHgsIGZkKTsKKwlkdWtfcHV0X3By b3Bfc3RyaW5nKGN0eCwgLTIsICJmZCIpOworCisJZHVrX3B1dF9mdW5jdGlvbl9saXN0KGN0eCwg LTEsIGZ1bmNzKTsKKworCWR1a19wdXNoX2NfZnVuY3Rpb24oY3R4LCBkcm1fZGV2aWNlX2Nsb3Nl LCAxKTsKKwlkdWtfc2V0X2ZpbmFsaXplcihjdHgsIC0yKTsKKworCXJldHVybiAxOworfQorCitk dWtfcmV0X3QgZHJtX2RldmljZV9jYXJkcyhkdWtfY29udGV4dCAqY3R4KQoreworCWR1a191YXJy aWR4X3QgaWR4OworCWNvbnN0IGNoYXIgKmZpbHRlciA9IE5VTEw7CisJaW50IGJhc2U7CisKKwlk dWtfcHVzaF90aGlzKGN0eCk7CisJaWYgKGR1a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgIm5h bWUiKSkKKwkJZmlsdGVyID0gZHVrX2dldF9zdHJpbmcoY3R4LCAtMSk7CisKKwlpZiAoZmlsdGVy KQorCQlkcm1fa21vZF9sb2FkKGZpbHRlciwgTlVMTCk7CisKKwlkdWtfcHVzaF9hcnJheShjdHgp OworCisJYmFzZSA9IG9wZW4oIi9kZXYvZHJpLyIsIE9fUkRPTkxZKTsKKwlpZiAoYmFzZSA8IDAp CisJCXJldHVybiAtMTsKKworCWlkeCA9IDA7CisJZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsr KSB7CisJCWNoYXIgYnVmWzMyXTsKKwkJaW50IGZkOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9m KGJ1ZiksICJjYXJkJWQiLCBpKTsKKwkJZmQgPSBvcGVuYXQoYmFzZSwgYnVmLCBPX1JEV1IgfCBP X0NMT0VYRUMpOworCQlpZiAoZmQgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKGZpbHRlcikgewor CQkJY2hhciBuYW1lWzE2XSA9IHt9OworCQkJZHJtX3ZlcnNpb25fdCB2ZXJzaW9uID0geworCQkJ CS5uYW1lX2xlbiA9IHNpemVvZihuYW1lKSwKKwkJCQkubmFtZSA9IG5hbWUsCisJCQl9OworCisJ CQlpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9WRVJTSU9OLCAmdmVyc2lvbikgPCAwKSB7CisJCQkJ Y2xvc2UoZmQpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJaWYgKHN0cmNtcChmaWx0ZXIs IHZlcnNpb24ubmFtZSkpIHsKKwkJCQljbG9zZShmZCk7CisJCQkJY29udGludWU7CisJCQl9CisJ CX0KKworCQlpZiAoZHJtX2RldmljZShjdHgsIGZkKSA8IDApIHsKKwkJCWNsb3NlKGZkKTsKKwkJ CWNsb3NlKGJhc2UpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJZHVrX3B1dF9wcm9wX2luZGV4 KGN0eCwgLTIsIGlkeCsrKTsKKwl9CisKKwljbG9zZShiYXNlKTsKKwlyZXR1cm4gMTsKK30KKwor ZHVrX3JldF90IGRybV9kZXZpY2VfY2FyZChkdWtfY29udGV4dCAqY3R4KQoreworCWR1a19pbnRf dCBpZHggPSBkdWtfb3B0X2ludChjdHgsIC0xLCAtMSk7CisJY29uc3QgY2hhciAqZmlsdGVyID0g TlVMTDsKKwljaGFyIGJ1ZlszMl07CisJaW50IGZkLCB4OworCisJZHVrX3B1c2hfdGhpcyhjdHgp OworCWlmIChkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJuYW1lIikpCisJCWZpbHRlciA9 IGR1a19nZXRfc3RyaW5nKGN0eCwgLTEpOworCisJaWYgKGZpbHRlcikKKwkJZHJtX2ttb2RfbG9h ZChmaWx0ZXIsIE5VTEwpOworCisJZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKwkJc25wcmlu dGYoYnVmLCBzaXplb2YoYnVmKSwgIi9kZXYvZHJpL2NhcmQlZCIsIHgpOworCQlmZCA9IG9wZW4o YnVmLCBPX1JEV1IgfCBPX0NMT0VYRUMpOworCQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIC0xOwor CisJCWlmIChmaWx0ZXIpIHsKKwkJCWNoYXIgbmFtZVsxNl0gPSB7fTsKKwkJCWRybV92ZXJzaW9u X3QgdmVyc2lvbiA9IHsKKwkJCQkubmFtZV9sZW4gPSBzaXplb2YobmFtZSksCisJCQkJLm5hbWUg PSBuYW1lLAorCQkJfTsKKworCQkJaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfVkVSU0lPTiwgJnZl cnNpb24pIDwgMCkgeworCQkJCWNsb3NlKGZkKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJ CWlmIChzdHJjbXAoZmlsdGVyLCB2ZXJzaW9uLm5hbWUpKSB7CisJCQkJY2xvc2UoZmQpOworCQkJ CWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGlkeCAhPSAtMSAmJiBpZHgtLSkgeworCQkJ Y2xvc2UoZmQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZHJtX2RldmljZShjdHgsIGZk KSA8IDApIHsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWJyZWFrOwor CX0KKworCXJldHVybiAxOworfQorCitkdWtfcmV0X3QgZHJtX2RldmljZV9yZW5kZXIoZHVrX2Nv bnRleHQgKmN0eCkKK3sKKwlkdWtfdWludF90IGlkeCA9IGR1a19vcHRfaW50KGN0eCwgLTEsIC0x KTsKKwljb25zdCBjaGFyICpmaWx0ZXIgPSBOVUxMOworCWNoYXIgYnVmWzMyXTsKKwlpbnQgZmQs IHg7CisKKwlkdWtfcHVzaF90aGlzKGN0eCk7CisJaWYgKGR1a19nZXRfcHJvcF9zdHJpbmcoY3R4 LCAtMSwgIm5hbWUiKSkKKwkJZmlsdGVyID0gZHVrX2dldF9zdHJpbmcoY3R4LCAtMSk7CisKKwlp ZiAoZmlsdGVyKQorCQlkcm1fa21vZF9sb2FkKGZpbHRlciwgTlVMTCk7CisKKwlmb3IgKHggPSAw OyB4IDwgMTY7IHgrKykgeworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL2Rldi9kcmkv cmVuZGVyRCVkIiwgeCArIDEyOCk7CisJCWZkID0gb3BlbihidWYsIE9fUkRXUiB8IE9fQ0xPRVhF Qyk7CisJCWlmIChmZCA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKGZpbHRlcikgeworCQkJ Y2hhciBuYW1lWzE2XSA9IHt9OworCQkJZHJtX3ZlcnNpb25fdCB2ZXJzaW9uID0geworCQkJCS5u YW1lX2xlbiA9IHNpemVvZihuYW1lKSwKKwkJCQkubmFtZSA9IG5hbWUsCisJCQl9OworCisJCQlp ZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9WRVJTSU9OLCAmdmVyc2lvbikgPCAwKSB7CisJCQkJY2xv c2UoZmQpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJaWYgKHN0cmNtcChmaWx0ZXIsIHZl cnNpb24ubmFtZSkpIHsKKwkJCQljbG9zZShmZCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0K KworCQlpZiAoaWR4ICE9IC0xICYmIGlkeC0tKSB7CisJCQljbG9zZShmZCk7CisJCQljb250aW51 ZTsKKwkJfQorCisJCWlmIChkcm1fZGV2aWNlKGN0eCwgZmQpIDwgMCkgeworCQkJY2xvc2UoZmQp OworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDE7Cit9CmRp ZmYgLS1naXQgYS9zaGVsbC9kcm0vZHJtLWRldmljZS5oIGIvc2hlbGwvZHJtL2RybS1kZXZpY2Uu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjA4MDYyYWQzNQotLS0gL2Rl di9udWxsCisrKyBiL3NoZWxsL2RybS9kcm0tZGV2aWNlLmgKQEAgLTAsMCArMSw5IEBACisjaWZu ZGVmIERSTV9ERVZJQ0VfSAorI2RlZmluZSBEUk1fREVWSUNFX0gKKworaW50IGRybV9kZXZpY2Vf Y2FyZHMoZHVrX2NvbnRleHQgKmN0eCk7CisKK2ludCBkcm1fZGV2aWNlX2NhcmQoZHVrX2NvbnRl eHQgKmN0eCk7CitpbnQgZHJtX2RldmljZV9yZW5kZXIoZHVrX2NvbnRleHQgKmN0eCk7CisKKyNl bmRpZiAvKiBEUk1fREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL3NoZWxsL2RybS9kcm0tZ2VtLmMg Yi9zaGVsbC9kcm0vZHJtLWdlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MC4uN2I0MTE2ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwvZHJtL2RybS1nZW0uYwpAQCAt MCwwICsxLDIzIEBACisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNpbmNsdWRlICJkdWt0YXBl LmgiCisjaW5jbHVkZSAiZHJtLWdlbS5oIgorCisjaW5jbHVkZSAiZHJtLXVhcGkvZHJtLmgiCisK K2R1a19yZXRfdCBkcm1fZ2VtX29iamVjdF9kdG9yKGR1a19jb250ZXh0ICpjdHgpCit7CisJdWlu dDMyX3QgaGFuZGxlOworCWludCBmZDsKKworCWR1a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAwLCAi aGFuZGxlIik7CisJaGFuZGxlID0gZHVrX2dldF91aW50KGN0eCwgLTEpOworCisJZHVrX2dldF9w cm9wX3N0cmluZyhjdHgsIDAsICJkcml2ZXIiKTsKKwlkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwg LTEsICJmZCIpOworCWZkID0gZHVrX2dldF9pbnQoY3R4LCAtMSk7CisKKwlpb2N0bChmZCwgRFJN X0lPQ1RMX0dFTV9DTE9TRSwgJmhhbmRsZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBh L3NoZWxsL2RybS9kcm0ta21vZC5jIGIvc2hlbGwvZHJtL2RybS1rbW9kLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4xOWVkZmQ0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9z aGVsbC9kcm0vZHJtLWttb2QuYwpAQCAtMCwwICsxLDEyNSBAQAorI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0 cmluZy5oPgorCisjaW5jbHVkZSA8bGlia21vZC5oPgorCisjaW5jbHVkZSAiZHJtLWttb2QuaCIK Kworc3RhdGljIHZvaWQgc3F1ZWxjaCh2b2lkICpkYXRhLCBpbnQgcHJpb3JpdHksCisJCSAgICBj b25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm4sCisJCSAgICBjb25zdCBj aGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKK30KKworc3RhdGljIHN0cnVjdCBrbW9kX2N0 eCAqa21vZF9jdHgodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IGttb2RfY3R4ICpjdHg7CisJY29u c3QgY2hhciAqKmNvbmZpZ19wYXRocyA9IE5VTEw7CisJY2hhciAqY29uZmlnX3BhdGhzX3N0cjsK KwljaGFyICpkaXJuYW1lOworCisJaWYgKGN0eCkKKwkJZ290byBvdXQ7CisKKwlkaXJuYW1lID0g Z2V0ZW52KCJJR1RfS01PRF9ESVJOQU1FIik7CisJY29uZmlnX3BhdGhzX3N0ciA9IGdldGVudigi SUdUX0tNT0RfQ09ORklHX1BBVEhTIik7CisKKwlpZiAoY29uZmlnX3BhdGhzX3N0cikgeworCQl1 bnNpZ25lZCBjb3VudCA9ICEhc3RybGVuKGNvbmZpZ19wYXRoc19zdHIpOworCQl1bnNpZ25lZCBp OworCQljaGFyKiBwOworCisJCXAgPSBjb25maWdfcGF0aHNfc3RyOworCQl3aGlsZSAoKHAgPSBz dHJjaHIocCwgJzonKSkpCisJCQlwKyssIGNvdW50Kys7CisKKwkJY29uZmlnX3BhdGhzID0gbWFs bG9jKHNpemVvZigqY29uZmlnX3BhdGhzKSAqIChjb3VudCArIDEpKTsKKworCQlwID0gY29uZmln X3BhdGhzX3N0cjsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJCWNvbmZpZ19w YXRoc1tpXSA9IHA7CisKKwkJCWlmICgocCA9IHN0cmNocihwLCAnOicpKSkKKwkJCQkqcCsrID0g J1wwJzsKKwkJfQorCQljb25maWdfcGF0aHNbaV0gPSBOVUxMOworCX0KKworCWN0eCA9IGttb2Rf bmV3KGRpcm5hbWUsIGNvbmZpZ19wYXRocyk7CisJZnJlZShjb25maWdfcGF0aHMpOworCisJa21v ZF9zZXRfbG9nX2ZuKGN0eCwgc3F1ZWxjaCwgTlVMTCk7CitvdXQ6CisJcmV0dXJuIGN0eDsKK30K KworaW50IGRybV9rbW9kX2lzX2xvYWRlZChjb25zdCBjaGFyICptb2RfbmFtZSkKK3sKKwlzdHJ1 Y3Qga21vZF9jdHggKmN0eCA9IGttb2RfY3R4KCk7CisJc3RydWN0IGttb2RfbGlzdCAqbW9kLCAq bGlzdDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChrbW9kX21vZHVsZV9uZXdfZnJvbV9sb2FkZWQo Y3R4LCAmbGlzdCkgPCAwKQorCQlnb3RvIG91dDsKKworCWttb2RfbGlzdF9mb3JlYWNoKG1vZCwg bGlzdCkgeworCQlzdHJ1Y3Qga21vZF9tb2R1bGUgKmttb2QgPSBrbW9kX21vZHVsZV9nZXRfbW9k dWxlKG1vZCk7CisJCWNvbnN0IGNoYXIgKmttb2RfbmFtZSA9IGttb2RfbW9kdWxlX2dldF9uYW1l KGttb2QpOworCisJCWlmICghc3RyY21wKGttb2RfbmFtZSwgbW9kX25hbWUpKSB7CisJCQlrbW9k X21vZHVsZV91bnJlZihrbW9kKTsKKwkJCXJldCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlrbW9k X21vZHVsZV91bnJlZihrbW9kKTsKKwl9CisJa21vZF9tb2R1bGVfdW5yZWZfbGlzdChsaXN0KTsK K291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1vZHByb2JlKHN0cnVjdCBrbW9k X21vZHVsZSAqa21vZCwgY29uc3QgY2hhciAqb3B0aW9ucykKK3sKKwl1bnNpZ25lZCBpbnQgZmxh Z3M7CisKKwlmbGFncyA9IDA7CisJaWYgKG9wdGlvbnMpIC8qIGZvcmNlIGEgZnJlc2ggbG9hZCB0 byBzZXQgdGhlIG5ldyBvcHRpb25zICovCisJCWZsYWdzIHw9IEtNT0RfUFJPQkVfRkFJTF9PTl9M T0FERUQ7CisKKwlyZXR1cm4ga21vZF9tb2R1bGVfcHJvYmVfaW5zZXJ0X21vZHVsZShrbW9kLCBm bGFncywgb3B0aW9ucywKKwkJCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitpbnQg ZHJtX2ttb2RfbG9hZChjb25zdCBjaGFyICptb2RfbmFtZSwgY29uc3QgY2hhciAqb3B0cykKK3sK KwlzdHJ1Y3Qga21vZF9jdHggKmN0eCA9IGttb2RfY3R4KCk7CisJc3RydWN0IGttb2RfbW9kdWxl ICprbW9kOworCWludCBlcnI7CisKKwllcnIgPSBrbW9kX21vZHVsZV9uZXdfZnJvbV9uYW1lKGN0 eCwgbW9kX25hbWUsICZrbW9kKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIg PSBtb2Rwcm9iZShrbW9kLCBvcHRzKTsKK291dDoKKwlrbW9kX21vZHVsZV91bnJlZihrbW9kKTsK KwlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IDA7Cit9CisKK2ludCBkcm1fa21vZF91bmxvYWQoY29u c3QgY2hhciAqbW9kX25hbWUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qga21vZF9j dHggKmN0eCA9IGttb2RfY3R4KCk7CisJc3RydWN0IGttb2RfbW9kdWxlICprbW9kOworCWludCBl cnI7CisKKwllcnIgPSBrbW9kX21vZHVsZV9uZXdfZnJvbV9uYW1lKGN0eCwgbW9kX25hbWUsICZr bW9kKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBrbW9kX21vZHVsZV9y ZW1vdmVfbW9kdWxlKGttb2QsIGZsYWdzKTsKK291dDoKKwlrbW9kX21vZHVsZV91bnJlZihrbW9k KTsKKwlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IDA7Cit9CmRpZmYgLS1naXQgYS9zaGVsbC9kcm0v ZHJtLWttb2QuaCBiL3NoZWxsL2RybS9kcm0ta21vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uOGJmYWE3ZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwvZHJtL2Ry bS1rbW9kLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIERSTV9LTU9EX0gKKyNkZWZpbmUgRFJN X0tNT0RfSAorCitpbnQgZHJtX2ttb2RfbG9hZChjb25zdCBjaGFyICptb2RfbmFtZSwgY29uc3Qg Y2hhciAqb3B0cyk7CitpbnQgZHJtX2ttb2RfdW5sb2FkKGNvbnN0IGNoYXIgKm1vZF9uYW1lLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpOworCitpbnQgZHJtX2ttb2RfaXNfbG9hZGVkKGNvbnN0IGNoYXIg Km1vZF9uYW1lKTsKKworI2VuZGlmIC8qIERSTV9LTU9EX0ggKi8KZGlmZiAtLWdpdCBhL3NoZWxs L2RybS9kcm0tbW9kdWxlLmMgYi9zaGVsbC9kcm0vZHJtLW1vZHVsZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMDVlMDc4OWY4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hl bGwvZHJtL2RybS1tb2R1bGUuYwpAQCAtMCwwICsxLDEzMCBAQAorI2luY2x1ZGUgImRybS1idWls dGluLmgiCisjaW5jbHVkZSAiZHVrdGFwZS5oIgorI2luY2x1ZGUgImlndC1idWlsdGlucy5oIgor I2luY2x1ZGUgIm9zLWJ1aWx0aW4uaCIKKworI2luY2x1ZGUgImRybS1jb25zdGFudHMuaCIKKyNp bmNsdWRlICJkcm0tZGV2aWNlLmgiCisjaW5jbHVkZSAiZHJtLWttb2QuaCIKKworc3RhdGljIHN0 cnVjdCBkcm1fZHJpdmVyICpkcml2ZXJzOworCitzdGF0aWMgZHVrX3JldF90IGRybV9tb2R1bGVf bG9hZChkdWtfY29udGV4dCAqY3R4KQoreworCWNvbnN0IGNoYXIgKm9wdGlvbnMgPSBkdWtfZ2V0 X3N0cmluZyhjdHgsIC0xKTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKwlpbnQgZXJyOwor CisJZHVrX3B1c2hfdGhpcyhjdHgpOworCWlmIChkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEs ICJuYW1lIikpIHsKKwkJbmFtZSA9IGR1a19nZXRfc3RyaW5nKGN0eCwgLTEpOworCQlkdWtfcG9w KGN0eCk7CisJfQorCWR1a19wb3AoY3R4KTsKKworCWVyciA9IDA7CisJaWYgKG5hbWUpCisJCWVy ciA9IGRybV9rbW9kX2xvYWQobmFtZSwgb3B0aW9ucyk7CisJaWYgKGVycikKKwkJb3NfdGhyb3df ZXJybm8oY3R4LCBlcnIpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGR1a19yZXRfdCBk cm1fbW9kdWxlX2xvYWRlZChkdWtfY29udGV4dCAqY3R4KQoreworCWNvbnN0IGNoYXIgKm5hbWUg PSBOVUxMOworCisJZHVrX3B1c2hfdGhpcyhjdHgpOworCWlmIChkdWtfZ2V0X3Byb3Bfc3RyaW5n KGN0eCwgLTEsICJuYW1lIikpIHsKKwkJbmFtZSA9IGR1a19nZXRfc3RyaW5nKGN0eCwgLTEpOwor CX0KKwlpZiAoIW5hbWUpCisJCXJldHVybiAtMTsKKworCWR1a19wdXNoX2Jvb2xlYW4oY3R4LCBk cm1fa21vZF9pc19sb2FkZWQobmFtZSkpOworCXJldHVybiAxOworfQorCitzdGF0aWMgZHVrX3Jl dF90IGRybV9tb2R1bGVfdW5sb2FkKGR1a19jb250ZXh0ICpjdHgpCit7CisJdW5zaWduZWQgaW50 IGZsYWdzID0gZHVrX2dldF9pbnQoY3R4LCAtMSk7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7 CisJaW50IGVycjsKKworCWR1a19wdXNoX3RoaXMoY3R4KTsKKwlpZiAoZHVrX2dldF9wcm9wX3N0 cmluZyhjdHgsIC0xLCAibmFtZSIpKSB7CisJCW5hbWUgPSBkdWtfZ2V0X3N0cmluZyhjdHgsIC0x KTsKKwkJZHVrX3BvcChjdHgpOworCX0KKwlkdWtfcG9wKGN0eCk7CisKKwllcnIgPSAwOworCWlm IChuYW1lKQorCQllcnIgPSBkcm1fa21vZF91bmxvYWQobmFtZSwgZmxhZ3MpOworCWlmIChlcnIp CisJCW9zX3Rocm93X2Vycm5vKGN0eCwgZXJyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg ZHVrX3JldF90IGRybV9tb2R1bGVfc2V0dXBfZHJpdmVycyhkdWtfY29udGV4dCAqY3R4KQorewor CWR1a19wdXNoX29iamVjdChjdHgpOworCisJZm9yIChzdHJ1Y3QgZHJtX2RyaXZlciAqZCA9IGRy aXZlcnM7IGQ7IGQgPSBkLT5uZXh0KSB7CisJCWlmIChkcm1fa21vZF9sb2FkKGQtPm5hbWUsIE5V TEwpIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkLT5jdG9yKGN0eCkgPiAwKQorCQkJZHVr X3B1dF9wcm9wX3N0cmluZyhjdHgsIC0yLCBkLT5uYW1lKTsKKwl9CisKKwlkdWtfcHV0X3Byb3Bf c3RyaW5nKGN0eCwgLTIsICJkcml2ZXJzIik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHJtX21v ZHVsZV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGRybV9kcml2ZXIgKmQpCit7CisJZC0+bmV4dCA9 IGRyaXZlcnM7CisJZHJpdmVycyA9IGQ7Cit9CisKK3N0YXRpYyBjb25zdCBkdWtfZnVuY3Rpb25f bGlzdF9lbnRyeSBmdW5jc1tdID0geworCXsgImNhcmRzIiwgZHJtX2RldmljZV9jYXJkcywgMCB9 LAorCisJeyAiY2FyZCIsIGRybV9kZXZpY2VfY2FyZCwgMSB9LAorCXsgInJlbmRlciIsIGRybV9k ZXZpY2VfcmVuZGVyLCAxIH0sCisKKwl7ICJsb2FkIiwgZHJtX21vZHVsZV9sb2FkLCAxIH0sCisJ eyAibG9hZGVkIiwgZHJtX21vZHVsZV9sb2FkZWQsIDAgfSwKKwl7ICJ1bmxvYWQiLCBkcm1fbW9k dWxlX3VubG9hZCwgMSB9LAorCisJe30KK307CisKK3N0YXRpYyBkdWtfcmV0X3QgZHJtX2J1aWx0 aW5fY3RvcihkdWtfY29udGV4dCAqY3R4KQoreworCWR1a19wdXNoX29iamVjdChjdHgpOworCWR1 a19kdXBfdG9wKGN0eCk7CisJZHVrX3B1dF9nbG9iYWxfc3RyaW5nKGN0eCwgImRybSIpOworCisJ ZHJtX21vZHVsZV9zZXR1cF9kcml2ZXJzKGN0eCk7CisKKwlkcm1fY29uc3RhbnRzKGN0eCk7CisJ ZHVrX3B1dF9mdW5jdGlvbl9saXN0KGN0eCwgLTEsIGZ1bmNzKTsKKwlkdWtfcG9wKGN0eCk7CisK KwlyZXR1cm4gMDsKK30KKworX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKQorc3RhdGljIHZv aWQgX19kcm1fcmVnaXN0ZXJfYnVpbHRpbl9fKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBpZ3Rf YnVpbHRpbiBidWlsdGluID0geworCQkubmFtZSA9ICJkcm0iLAorCQkuY3RvciA9IGRybV9idWls dGluX2N0b3IKKwl9OworCWlndF9yZWdpc3Rlcl9nbG9iYWwoJmJ1aWx0aW4pOworfQpkaWZmIC0t Z2l0IGEvc2hlbGwvZXhhbXBsZXMvZHJtL2F1dGguanMgYi9zaGVsbC9leGFtcGxlcy9kcm0vYXV0 aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjhhZjc3MGRmMAotLS0g L2Rldi9udWxsCisrKyBiL3NoZWxsL2V4YW1wbGVzL2RybS9hdXRoLmpzCkBAIC0wLDAgKzEsNjIg QEAKK2NvbnN0IG5vcF9pb2N0bCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmlvY3RsKGRybS5pb2N0bC5E Uk1fSU9DVExfRklOSVNIKSB9CisKK2lndC5mb3JrKGRybS5jYXJkcygpLCBmdW5jdGlvbihtYXN0 ZXIpIHsKKwl2YXIgc2xhdmUsIG1hZ2ljLCByb290LCBhdXRob3JpemVkOworCisJLy8gQ29uZmly bSB3ZSBhcmUgYSBtYXN0ZXIgYW5kIG9wZW4gYSBzZWNvbmQgZmQgdG8gdGhlIHNhbWUgZGV2aWNl CisJcm9vdCA9IHRydWU7CisJdHJ5IHsKKwkJbWFzdGVyLlNldE1hc3RlcigpOworCX0gY2F0Y2go ZSkgeworCQkvLyBBbGFzIG5vdCBzdGFydGluZyBhcyByb290LCB3ZSdsbCBqdXN0IGhhdmUgdG8g aG9wZS4KKwkJaWd0LmFzc2VydChvcy51aWQoKSk7CisJCWlndC5hc3NlcnQoZS5lcnJubyA9PT0g LW9zLkVBQ0NFUyk7CisJCXJvb3QgPSBmYWxzZTsKKwl9CisJc2xhdmUgPSBtYXN0ZXIucmVvcGVu KCk7CisJYXV0aG9yaXplZCA9IHJvb3Q7CisKKwlmb3IgKHZhciBkZXB0aCA9IDA7IGRlcHRoIDwg MzsgZGVwdGgrKykgeworCQlpZiAoIWF1dGhvcml6ZWQpIHsKKwkJCS8vIElmICFhdXRob3JpemVk IChhbmQgIXJvb3QpIGF1dGgtb25seSBpb2N0bHMgd2lsbCBmYWlsCisJCQlpZ3QuZXhwZWN0KGZ1 bmN0aW9uKCl7IG5vcF9pb2N0bC5jYWxsKHNsYXZlKSB9LAorCQkJCSAgIC1vcy5FQUNDRVMpOwor CQl9CisKKwkJLy8gR3JhYiB0aGUgbWFnaWMsIGFuZCBjaGVjayBpdCBpcyBjb25zdGFudAorCQlt YWdpYyA9IHNsYXZlLkdldE1hZ2ljKCk7CisJCWlndC5hc3NlcnQoc2xhdmUuR2V0TWFnaWMoKSA9 PT0gbWFnaWMpOworCisJCS8vIEEgc2xhdmUgY2Fubm90IHNpbXBseSBhdXRob3JpemUgdGhlaXIg b3duIG1hZ2ljCisJCWlndC5leHBlY3QoZnVuY3Rpb24oKXsgc2xhdmUuQXV0aE1hZ2ljKG1hZ2lj KSB9LCAtb3MuRUFDQ0VTKTsKKworCQkvLyBNYWdpYyB3b3JrcyBmaXJzdCB0aW1lCisJCW1hc3Rl ci5BdXRoTWFnaWMobWFnaWMpOworCisJCS8vIEJ1dCBpdCBjYW4gb25seSBiZSBhdXRob3JpemVk IG9uY2UKKwkJaWd0LmV4cGVjdChmdW5jdGlvbigpeyBtYXN0ZXIuQXV0aE1hZ2ljKG1hZ2ljKSB9 LCAtb3MuRUlOVkFMKTsKKworCQkvLyBWZXJpZnkgdGhlIG1hZ2ljIGRpZCBub3QgY2hhbmdlCisJ CWlndC5hc3NlcnQoc2xhdmUuR2V0TWFnaWMoKSA9PT0gbWFnaWMpOworCisJCS8vIEFuZCB0aGUg Y29uc3VtZWQgbWFnaWMgc3RpbGwgZmFpbHMgaWYgdXNlZCBhZ2FpbiBieSB0aGUgc2xhdmUKKwkJ aWd0LmV4cGVjdChmdW5jdGlvbigpeyBzbGF2ZS5BdXRoTWFnaWMobWFnaWMpIH0sIC1vcy5FQUND RVMpOworCisJCS8vIEFuZCBjb25maXJtIHRoZSBzbGF2ZSBpcyBub3cgYXV0aG9yaXplZAorCQlu b3BfaW9jdGwuY2FsbChzbGF2ZSk7CisKKwkJLy8gQnV0IG5vdCBhIG1hc3RlcgorCQlpZiAocm9v dCkKKwkJCWlndC5leHBlY3QoZnVuY3Rpb24oKXsgc2xhdmUuU2V0TWFzdGVyKCkgfSwgLW9zLkVJ TlZBTCk7CisKKwkJLy8gQSBzZWNvbmQgc2xhdmUgaXMgbm90IGF1dGhvcml6ZWQgdXNpbmcgdGhl IG9sZCBtYWdpYworCQlzbGF2ZSA9IHNsYXZlLnJlb3BlbigpOworCQlpZ3QuZXhwZWN0KGZ1bmN0 aW9uKCl7IHNsYXZlLkF1dGhNYWdpYyhtYWdpYykgfSwgLW9zLkVBQ0NFUyk7CisJCWF1dGhvcml6 ZWQgPSByb290OworCisJCWlmIChyb290KSB7CisJCQlvcy5kcm9wX3Jvb3QoKTsKKwkJCXJvb3Qg PSBmYWxzZTsKKwkJfQorCX0KK30pCmRpZmYgLS1naXQgYS9zaGVsbC9pbmNsdWRlL2RybS1idWls dGluLmggYi9zaGVsbC9pbmNsdWRlL2RybS1idWlsdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi5hNGJhNGVlYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGVsbC9pbmNs dWRlL2RybS1idWlsdGluLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBEUk1fTU9EVUxFX0gK KyNkZWZpbmUgRFJNX01PRFVMRV9ICisKKyNpbmNsdWRlICJkdWt0YXBlLmgiCisKK3N0cnVjdCBk cm1fZHJpdmVyIHsKKwlzdHJ1Y3QgZHJtX2RyaXZlciAqbmV4dDsKKwljb25zdCBjaGFyICpuYW1l OworCWR1a19yZXRfdCAoKmN0b3IpKGR1a19jb250ZXh0ICpjdHgpOworfTsKKwordm9pZCBkcm1f bW9kdWxlX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZHJtX2RyaXZlciAqYik7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvc2hlbGwvaW5jbHVkZS9kcm0tZ2VtLmggYi9zaGVsbC9pbmNsdWRlL2RybS1n ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmFiMjk5NjQyZAotLS0g L2Rldi9udWxsCisrKyBiL3NoZWxsL2luY2x1ZGUvZHJtLWdlbS5oCkBAIC0wLDAgKzEsOCBAQAor I2lmbmRlZiBEUk1fR0VNX0gKKyNkZWZpbmUgRFJNX0dFTV9ICisKKyNpbmNsdWRlICJkdWt0YXBl LmgiCisKK2R1a19yZXRfdCBkcm1fZ2VtX29iamVjdF9kdG9yKGR1a19jb250ZXh0ICpjdHgpOwor CisjZW5kaWYgLyogRFJNX0dFTV9IICovCmRpZmYgLS1naXQgYS9zaGVsbC9tZXNvbi5idWlsZCBi L3NoZWxsL21lc29uLmJ1aWxkCmluZGV4IGIyNDUwYjE2Mi4uZWE4NzE5MjVlIDEwMDY0NAotLS0g YS9zaGVsbC9tZXNvbi5idWlsZAorKysgYi9zaGVsbC9tZXNvbi5idWlsZApAQCAtMSw1ICsxLDEx IEBACiBleGVjdXRhYmxlKCdpZ3QnLCBbCiAJICAgICAnZHVrdGFwZS9kdWt0YXBlLmMnLAorCSAg ICAgJ2RybS9kcm0tY29uc3RhbnRzLmMnLAorCSAgICAgJ2RybS9kcm0tZGV2aWNlLmMnLAorCSAg ICAgJ2RybS9kcm0tZ2VtLmMnLAorCSAgICAgJ2RybS9kcm0ta21vZC5jJywKKwkgICAgICdkcm0v ZHJtLW1vZHVsZS5jJywKKwkgICAgICdpZ3QtYnVpbHRpbnMuYycsCiAJICAgICAnaWd0LWJ1aWx0 aW5zLmMnLAogCSAgICAgJ2lndC1tYXRoLmMnLAogCSAgICAgJ2lndC1zaGVsbC5jJywKLS0gCjIu MTguMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0 LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==