From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH 11/11] drm/msm/dpu: move dpu_power_handle to dpu folder Date: Thu, 10 May 2018 13:59:45 +0530 Message-ID: <1525940985-30428-12-git-send-email-ryadav@codeaurora.org> References: <1525940985-30428-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1525940985-30428-1-git-send-email-ryadav@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org Cc: Rajesh Yadav , hoegsberg@chromium.org List-Id: linux-arm-msm@vger.kernel.org Tm93LCBzaW5jZSBkcHVfcG93ZXJfaGFuZGxlIG1hbmFnZXMgb25seSBidXMgc2NhbGluZwphbmQg cG93ZXIgZW5hYmxlL2Rpc2FibGUgbm90aWZpY2F0aW9ucyB3aGljaCBhcmUgcmVzdHJpY3RlZAp0 byBkcHUgZHJpdmVyLCBtb3ZlIGRwdV9wb3dlcl9oYW5kbGUgdG8gZHB1IGZvbGRlci4KClNpZ25l ZC1vZmYtYnk6IFJhamVzaCBZYWRhdiA8cnlhZGF2QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMgICAgIHwgICAxIC0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYyAgICB8ICAgNSArLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgICAgIHwgICA3ICst CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oICAgICAgICAgfCAgIDIg KwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICAgIHwgICAx IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyAgICAgICAgICB8ICAz OSArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuYyB8 IDY5NCArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3Bvd2VyX2hhbmRsZS5oIHwgMjg4ICsrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t c20vZHB1X3Bvd2VyX2hhbmRsZS5jICAgICAgICAgICB8IDY5NCAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmggICAgICAgICAgIHwg Mjg4IC0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jICAgICAgICAgICAg ICAgICAgICB8ICAgOSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAg ICAgICAgICAgfCAgIDQgLQogMTQgZmlsZXMgY2hhbmdlZCwgMTAxNCBpbnNlcnRpb25zKCspLCAx MDIxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuaAogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5jCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtl ZmlsZQppbmRleCBkOTgyNmMxLi5mNTc4ZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKQEAgLTgyLDEw ICs4MiwxMCBAQCBtc20teSA6PSBcCiAJZGlzcC9kcHUxL2RwdV9ybS5vIFwKIAlkaXNwL2RwdTEv ZHB1X3ZiaWYubyBcCiAJZGlzcC9kcHUxL2RwdV9tZHNzLm8gXAorCWRpc3AvZHB1MS9kcHVfcG93 ZXJfaGFuZGxlLm8gXAogCWRwdV9kYmcubyBcCiAJZHB1X2lvX3V0aWwubyBcCiAJZHB1X2RiZ19l dnRsb2cubyBcCi0JZHB1X3Bvd2VyX2hhbmRsZS5vIFwKIAltc21fcHJvcC5vIFwKIAltc21fYXRv bWljLm8gXAogCW1zbV9kZWJ1Z2ZzLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY29yZV9pcnEuYwppbmRleCA1YzVjYzU2Li4zM2FiMmFjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEuYwpAQCAtMTgsNyArMTgsNiBAQAogI2lu Y2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgImRwdV9jb3JlX2lycS5oIgotI2lu Y2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKIAogLyoqCiAgKiBkcHVfY29yZV9pcnFfY2FsbGJh Y2tfaGFuZGxlciAtIGRpc3BhdGNoIGNvcmUgaW50ZXJydXB0cwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCmluZGV4IGUyZTdjMDYuLjE4ZGExNjkgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKQEAgLTI1 Nyw3ICsyNTcsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZV9idXMo c3RydWN0IGRwdV9rbXMgKmttcywKIAkJCQkJPSBkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUoY3J0 Yyk7CiAJc3RydWN0IGRybV9jcnRjICp0bXBfY3J0YzsKIAlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUg KmRwdV9jc3RhdGU7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGttcy0+ZGV2LT5k ZXZfcHJpdmF0ZTsKIAogCWRybV9mb3JfZWFjaF9jcnRjKHRtcF9jcnRjLCBjcnRjLT5kZXYpIHsK IAkJaWYgKF9kcHVfY29yZV9wZXJmX2NydGNfaXNfcG93ZXJfb24odG1wX2NydGMpICYmCkBAIC0y ODcsNyArMjg2LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jb3JlX3BlcmZfY3J0Y191cGRhdGVfYnVz KHN0cnVjdCBkcHVfa21zICprbXMsCiAKIAlzd2l0Y2ggKGN1cnJfY2xpZW50X3R5cGUpIHsKIAlj YXNlIE5SVF9DTElFTlQ6Ci0JCWRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoJnByaXYtPnBo YW5kbGUsIGttcy0+Y29yZV9jbGllbnQsCisJCWRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEo Jmttcy0+cGhhbmRsZSwga21zLT5jb3JlX2NsaWVudCwKIAkJCQlEUFVfUE9XRVJfSEFORExFX0RB VEFfQlVTX0NMSUVOVF9OUlQsCiAJCQkJYnVzX2lkLCBidXNfYWJfcXVvdGEsIGJ1c19pYl9xdW90 YSk7CiAJCURQVV9ERUJVRygiY2xpZW50OiVzIGJ1c19pZD0lZCBhYj0lbGx1IGliPSVsbHVcbiIs ICJucnQiLApAQCAtMjk1LDcgKzI5NCw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2Ny dGNfdXBkYXRlX2J1cyhzdHJ1Y3QgZHB1X2ttcyAqa21zLAogCQlicmVhazsKIAogCWNhc2UgUlRf Q0xJRU5UOgotCQlkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKCZwcml2LT5waGFuZGxlLCBr bXMtPmNvcmVfY2xpZW50LAorCQlkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKCZrbXMtPnBo YW5kbGUsIGttcy0+Y29yZV9jbGllbnQsCiAJCQkJRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19D TElFTlRfUlQsCiAJCQkJYnVzX2lkLCBidXNfYWJfcXVvdGEsIGJ1c19pYl9xdW90YSk7CiAJCURQ VV9ERUJVRygiY2xpZW50OiVzIGJ1c19pZD0lZCBhYj0lbGx1IGliPSVsbHVcbiIsICJydCIsCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwppbmRleCBlMmQyZTMyLi45OWM1 ZTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKQEAgLTU5OCw2 ICs1OTgsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKIAlfZHB1X2NydGNfZGVzdHJveV9kZXN0X3NjYWxlcihkcHVfY3J0Yyk7CiAKIAlfZHB1 X2NydGNfZGVpbml0X2V2ZW50cyhkcHVfY3J0Yyk7CisJZHB1X2NydGMtPnBoYW5kbGUgPSBOVUxM OwogCiAJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKIAltdXRleF9kZXN0cm95KCZkcHVfY3J0Yy0+ Y3J0Y19sb2NrKTsKQEAgLTI1NzIsNyArMjU3Myw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rp c2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCX0KIAogCWlmIChkcHVfY3J0Yy0+cG93ZXJf ZXZlbnQpCi0JCWRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudCgmcHJpdi0+cGhhbmRs ZSwKKwkJZHB1X3Bvd2VyX2hhbmRsZV91bnJlZ2lzdGVyX2V2ZW50KGRwdV9jcnRjLT5waGFuZGxl LAogCQkJCWRwdV9jcnRjLT5wb3dlcl9ldmVudCk7CiAKIApAQCAtMjY0Myw3ICsyNjQ0LDcgQEAg c3RhdGljIHZvaWQgZHB1X2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAltdXRl eF91bmxvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOwogCiAJZHB1X2NydGMtPnBvd2VyX2V2ZW50 ID0gZHB1X3Bvd2VyX2hhbmRsZV9yZWdpc3Rlcl9ldmVudCgKLQkJJnByaXYtPnBoYW5kbGUsCisJ CWRwdV9jcnRjLT5waGFuZGxlLAogCQlEUFVfUE9XRVJfRVZFTlRfUE9TVF9FTkFCTEUgfCBEUFVf UE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFIHwKIAkJRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxF LAogCQlkcHVfY3J0Y19oYW5kbGVfcG93ZXJfZXZlbnQsIGNydGMsIGRwdV9jcnRjLT5uYW1lKTsK QEAgLTM5MzgsNiArMzkzOSw4IEBAIHN0cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAlkcHVfY3BfY3J0 Y19pbml0KGNydGMpOwogCWRwdV9jcF9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhjcnRjKTsKIAor CWRwdV9jcnRjLT5waGFuZGxlID0gJmttcy0+cGhhbmRsZTsKKwogCURQVV9ERUJVRygiJXM6IHN1 Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBjcnRjXG4iLCBkcHVfY3J0Yy0+bmFtZSk7CiAJcmV0dXJu IGNydGM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAppbmRleCA5 MzA0MDU4Li42NzFkOTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY3J0Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRj LmgKQEAgLTE4NCw2ICsxODQsNyBAQCBzdHJ1Y3QgZHB1X2NydGNfZXZlbnQgewogICogQG1pc3Jf ZW5hYmxlICAgOiBib29sZWFuIGVudHJ5IGluZGljYXRlcyBtaXNyIGVuYWJsZS9kaXNhYmxlIHN0 YXR1cy4KICAqIEBtaXNyX2ZyYW1lX2NvdW50ICA6IG1pc3IgZnJhbWUgY291bnQgcHJvdmlkZWQg YnkgY2xpZW50CiAgKiBAbWlzcl9kYXRhICAgICA6IHN0b3JlIG1pc3IgZGF0YSBiZWZvcmUgdHVy bmluZyBvZmYgdGhlIGNsb2Nrcy4KKyAqIEBwaGFuZGxlOiBQb2ludGVyIHRvIHBvd2VyIGhhbmRs ZXIKICAqIEBwb3dlcl9ldmVudCAgIDogcmVnaXN0ZXJlZCBwb3dlciBldmVudCBoYW5kbGUKICAq IEBjdXJfcGVyZiAgICAgIDogY3VycmVudCBwZXJmb3JtYW5jZSBjb21taXR0ZWQgdG8gY2xvY2sv YmFuZHdpZHRoIGRyaXZlcgogICogQHJwX2xvY2sgICAgICAgOiBzZXJpYWxpemF0aW9uIGxvY2sg Zm9yIHJlc291cmNlIHBvb2wKQEAgLTI0MCw2ICsyNDEsNyBAQCBzdHJ1Y3QgZHB1X2NydGMgewog CXUzMiBtaXNyX2ZyYW1lX2NvdW50OwogCXUzMiBtaXNyX2RhdGFbQ1JUQ19EVUFMX01JWEVSU107 CiAKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZTsKIAlzdHJ1Y3QgZHB1X3Bvd2Vy X2V2ZW50ICpwb3dlcl9ldmVudDsKIAogCXN0cnVjdCBkcHVfY29yZV9wZXJmX3BhcmFtcyBjdXJf cGVyZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCmluZGV4 IDI5OGE2ZWYuLjExYWU2Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXIuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImRwdV9od19jdGwuaCIKICNp bmNsdWRlICJkcHVfZm9ybWF0cy5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyX3BoeXMuaCIKLSNp bmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCiAjaW5jbHVkZSAiZHB1X2NydGMuaCIKICNpbmNs dWRlICJkcHVfdHJhY2UuaCIKICNpbmNsdWRlICJkcHVfY29yZV9pcnEuaCIKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwppbmRleCA2N2JlZjMyLi45MTRmOTgzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCkBAIC0xMDE3LDcgKzEwMTcsNiBAQCBz dGF0aWMgbG9uZyBkcHVfa21zX3JvdW5kX3BpeGNsayhzdHJ1Y3QgbXNtX2ttcyAqa21zLCB1bnNp Z25lZCBsb25nIHJhdGUsCiBzdGF0aWMgdm9pZCBfZHB1X2ttc19od19kZXN0cm95KHN0cnVjdCBk cHVfa21zICpkcHVfa21zKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG1z bV9kcm1fcHJpdmF0ZSAqcHJpdjsKIAlpbnQgaTsKIAogCWlmICghZHB1X2ttcykKQEAgLTEwMjcs MTcgKzEwMjYsMTMgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfaHdfZGVzdHJveShzdHJ1Y3QgZHB1 X2ttcyAqZHB1X2ttcykKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCi0JcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Ci0JaWYgKCFwcml2KQotCQlyZXR1cm47Ci0KIAlpZiAoZHB1X2ttcy0+aHdfaW50 cikKIAkJZHB1X2h3X2ludHJfZGVzdHJveShkcHVfa21zLT5od19pbnRyKTsKIAlkcHVfa21zLT5o d19pbnRyID0gTlVMTDsKIAogCWlmIChkcHVfa21zLT5wb3dlcl9ldmVudCkKIAkJZHB1X3Bvd2Vy X2hhbmRsZV91bnJlZ2lzdGVyX2V2ZW50KAotCQkJCSZwcml2LT5waGFuZGxlLCBkcHVfa21zLT5w b3dlcl9ldmVudCk7CisJCQkJJmRwdV9rbXMtPnBoYW5kbGUsIGRwdV9rbXMtPnBvd2VyX2V2ZW50 KTsKIAogCS8qIHNhZmUgdG8gY2FsbCB0aGVzZSBtb3JlIHRoYW4gb25jZSBkdXJpbmcgc2h1dGRv d24gKi8KIAlfZHB1X2RlYnVnZnNfZGVzdHJveShkcHVfa21zKTsKQEAgLTEwNzAsNyArMTA2NSw4 IEBAIHN0YXRpYyB2b2lkIF9kcHVfa21zX2h3X2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9r bXMpCiAJZHB1X2ttcy0+Y2F0YWxvZyA9IE5VTEw7CiAKIAlpZiAoZHB1X2ttcy0+Y29yZV9jbGll bnQpCi0JCWRwdV9wb3dlcl9jbGllbnRfZGVzdHJveSgmcHJpdi0+cGhhbmRsZSwgZHB1X2ttcy0+ Y29yZV9jbGllbnQpOworCQlkcHVfcG93ZXJfY2xpZW50X2Rlc3Ryb3koJmRwdV9rbXMtPnBoYW5k bGUsCisJCQlkcHVfa21zLT5jb3JlX2NsaWVudCk7CiAJZHB1X2ttcy0+Y29yZV9jbGllbnQgPSBO VUxMOwogCiAJaWYgKGRwdV9rbXMtPnZiaWZbVkJJRl9OUlRdKQpAQCAtMTYzMSw3ICsxNjI3LDgg QEAgc3RhdGljIGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAl9CiAj ZW5kaWYKIAotCWRwdV9rbXMtPmNvcmVfY2xpZW50ID0gZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUo JnByaXYtPnBoYW5kbGUsICJjb3JlIik7CisJZHB1X2ttcy0+Y29yZV9jbGllbnQgPSBkcHVfcG93 ZXJfY2xpZW50X2NyZWF0ZSgmZHB1X2ttcy0+cGhhbmRsZSwKKwkJCQkJImNvcmUiKTsKIAlpZiAo SVNfRVJSX09SX05VTEwoZHB1X2ttcy0+Y29yZV9jbGllbnQpKSB7CiAJCXJjID0gUFRSX0VSUihk cHVfa21zLT5jb3JlX2NsaWVudCk7CiAJCWlmICghZHB1X2ttcy0+Y29yZV9jbGllbnQpCkBAIC0x NzI4LDcgKzE3MjUsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2tt cyAqa21zKQogI2VuZGlmCiAKIAlyYyA9IGRwdV9jb3JlX3BlcmZfaW5pdCgmZHB1X2ttcy0+cGVy ZiwgZGV2LCBkcHVfa21zLT5jYXRhbG9nLAotCQkJJnByaXYtPnBoYW5kbGUsIF9kcHVfa21zX2dl dF9jbGsoZHB1X2ttcywgImNvcmVfY2xrIikpOworCQkJJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlf ZHB1X2ttc19nZXRfY2xrKGRwdV9rbXMsICJjb3JlX2NsayIpKTsKIAlpZiAocmMpIHsKIAkJRFBV X0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBwZXJmICVkXG4iLCByYyk7CiAJCWdvdG8gcGVyZl9lcnI7 CkBAIC0xNzcyLDcgKzE3NzAsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3Qg bXNtX2ttcyAqa21zKQogCSAqIEhhbmRsZSAocmUpaW5pdGlhbGl6YXRpb25zIGR1cmluZyBwb3dl ciBlbmFibGUKIAkgKi8KIAlkcHVfa21zX2hhbmRsZV9wb3dlcl9ldmVudChEUFVfUE9XRVJfRVZF TlRfUE9TVF9FTkFCTEUsIGRwdV9rbXMpOwotCWRwdV9rbXMtPnBvd2VyX2V2ZW50ID0gZHB1X3Bv d2VyX2hhbmRsZV9yZWdpc3Rlcl9ldmVudCgmcHJpdi0+cGhhbmRsZSwKKwlkcHVfa21zLT5wb3dl cl9ldmVudCA9IGRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCisJCQkmZHB1X2ttcy0+ cGhhbmRsZSwKIAkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRSwKIAkJCWRwdV9rbXNfaGFu ZGxlX3Bvd2VyX2V2ZW50LCBkcHVfa21zLCAia21zIik7CiAKQEAgLTE4MjEsNiArMTgyMCw3IEBA IHN0YXRpYyB2b2lkIGRwdV9kZXN0cm95KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJ c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlz dHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmZHB1X2ttcy0+bXA7CiAKKwlkcHVfcG93ZXJf cmVzb3VyY2VfZGVpbml0KHBkZXYsICZkcHVfa21zLT5waGFuZGxlKTsKIAltc21fZHNzX3B1dF9j bGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrKTsKIAlkZXZtX2tmcmVlKCZwZGV2LT5kZXYs IG1wLT5jbGtfY29uZmlnKTsKIAltcC0+bnVtX2NsayA9IDA7CkBAIC0xODYzLDYgKzE4NjMsMTIg QEAgc3RhdGljIGludCBkcHVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQogCQlnb3RvIGNsa19yYXRlX2Vycm9yOwogCX0KIAorCXJldCA9 IGRwdV9wb3dlcl9yZXNvdXJjZV9pbml0KHBkZXYsICZkcHVfa21zLT5waGFuZGxlKTsKKwlpZiAo cmV0KSB7CisJCXByX2VycigiZHB1IHBvd2VyIHJlc291cmNlIGluaXQgZmFpbGVkXG4iKTsKKwkJ Z290byBwb3dlcl9pbml0X2ZhaWw7CisJfQorCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg ZHB1X2ttcyk7CiAKIAltc21fa21zX2luaXQoJmRwdV9rbXMtPmJhc2UsICZrbXNfZnVuY3MpOwpA QCAtMTg3Niw2ICsxODgyLDcgQEAgc3RhdGljIGludCBkcHVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJcmV0dXJuIHJldDsKIAor cG93ZXJfaW5pdF9mYWlsOgogY2xrX3JhdGVfZXJyb3I6CiAJbXNtX2Rzc19wdXRfY2xrKG1wLT5j bGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7CiBjbGtfZ2V0X2Vycm9yOgpAQCAtMTkyNCw3ICsxOTMx LDYgQEAgc3RhdGljIGludCBkcHVfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK IAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7 CiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 OwogCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZkcHVfa21zLT5tcDsKIAogCWRkZXYg PSBkcHVfa21zLT5kZXY7CkBAIC0xOTMyLDEwICsxOTM4LDkgQEAgc3RhdGljIGludCBkcHVfcnVu dGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGRy bV9kZXZpY2VcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQotCXByaXYgPSBkZGV2LT5kZXZfcHJpdmF0 ZTsKIAotCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZSgmcHJpdi0+cGhhbmRsZSwKLQkJ ZHB1X2ttcy0+Y29yZV9jbGllbnQsIGZhbHNlKTsKKwlyYyA9IGRwdV9wb3dlcl9yZXNvdXJjZV9l bmFibGUoJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlkcHVfa21zLT5jb3JlX2NsaWVudCwgZmFsc2Up OwogCWlmIChyYykKIAkJRFBVX0VSUk9SKCJyZXNvdXJjZSBkaXNhYmxlIGZhaWxlZDogJWRcbiIs IHJjKTsKIApAQCAtMTk1Myw3ICsxOTU4LDYgQEAgc3RhdGljIGludCBkcHVfcnVudGltZV9yZXN1 bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0 b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcyA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2OwotCXN0cnVj dCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0g JmRwdV9rbXMtPm1wOwogCiAJZGRldiA9IGRwdV9rbXMtPmRldjsKQEAgLTE5NjEsNyArMTk2NSw2 IEBAIHN0YXRpYyBpbnQgZHB1X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJ RFBVX0VSUk9SKCJpbnZhbGlkIGRybV9kZXZpY2VcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQotCXBy aXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKIAogCXJjID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5j bGtfY29uZmlnLCBtcC0+bnVtX2NsaywgdHJ1ZSk7CiAJaWYgKHJjKSB7CkBAIC0xOTY5LDggKzE5 NzIsOCBAQCBzdGF0aWMgaW50IGRwdV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYp CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlyYyA9IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnBy aXYtPnBoYW5kbGUsIGRwdV9rbXMtPmNvcmVfY2xpZW50LAotCQl0cnVlKTsKKwlyYyA9IGRwdV9w b3dlcl9yZXNvdXJjZV9lbmFibGUoJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlkcHVfa21zLT5jb3Jl X2NsaWVudCwgdHJ1ZSk7CiAJaWYgKHJjKQogCQlEUFVfRVJST1IoInJlc291cmNlIGVuYWJsZSBm YWlsZWQ6ICVkXG4iLCByYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMu aAppbmRleCBhODI1NWZlLi5jNDhlZDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2ttcy5oCkBAIC0xNjQsNiArMTY0LDcgQEAgc3RydWN0IGRwdV9rbXMgewogCXN0cnVjdCBk cHVfbWRzc19jZmcgKmNhdGFsb2c7CiAKIAlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICph c3BhY2VbTVNNX1NNTVVfRE9NQUlOX01BWF07CisJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgcGhh bmRsZTsKIAlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY29yZV9jbGllbnQ7CiAjaWZkZWYgQ09O RklHX0lPTgogCXN0cnVjdCBpb25fY2xpZW50ICppY2xpZW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjkwOWZiYjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcG93ZXJfaGFuZGxlLmMKQEAgLTAsMCArMSw2OTQgQEAKKy8q IENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJb ZHJtOiVzOiVkXTogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXworCisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5o PgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u aD4KKyNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORworI2luY2x1ZGUgPGxpbnV4L21zbS1i dXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tc20tYnVzLWJvYXJkLmg+CisjZW5kaWYKKyNpbmNsdWRl IDxsaW51eC9kcHVfaW9fdXRpbC5oPgorCisjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgor I2luY2x1ZGUgImRwdV90cmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZGF0YV9idXNfbmFt ZVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYXSA9IHsKKwlbRFBVX1BPV0VSX0hBTkRMRV9E QlVTX0lEX01OT0NdID0gInFjb20sZHB1LWRhdGEtYnVzIiwKKwlbRFBVX1BPV0VSX0hBTkRMRV9E QlVTX0lEX0xMQ0NdID0gInFjb20sZHB1LWxsY2MtYnVzIiwKKwlbRFBVX1BPV0VSX0hBTkRMRV9E QlVTX0lEX0VCSV0gPSAicWNvbSxkcHUtZWJpLWJ1cyIsCit9OworCitjb25zdCBjaGFyICpkcHVf cG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUodTMyIGJ1c19pZCkKK3sKKwlpZiAoYnVzX2lkIDwg RFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWCkKKwkJcmV0dXJuIGRhdGFfYnVzX25hbWVbYnVz X2lkXTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkcHVfcG93ZXJfZXZlbnRf dHJpZ2dlcl9sb2NrZWQoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJCXUzMiBl dmVudF90eXBlKQoreworCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50OworCisJbGlzdF9m b3JfZWFjaF9lbnRyeShldmVudCwgJnBoYW5kbGUtPmV2ZW50X2xpc3QsIGxpc3QpIHsKKwkJaWYg KGV2ZW50LT5ldmVudF90eXBlICYgZXZlbnRfdHlwZSkKKwkJCWV2ZW50LT5jYl9mbmMoZXZlbnRf dHlwZSwgZXZlbnQtPnVzcik7CisJfQorfQorCitzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqZHB1 X3Bvd2VyX2NsaWVudF9jcmVhdGUoCisJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUs IGNoYXIgKmNsaWVudF9uYW1lKQoreworCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQ7 CisJc3RhdGljIHUzMiBpZDsKKworCWlmICghY2xpZW50X25hbWUgfHwgIXBoYW5kbGUpIHsKKwkJ cHJfZXJyKCJjbGllbnQgbmFtZSBpcyBudWxsIG9yIGludmFsaWQgcG93ZXIgZGF0YVxuIik7CisJ CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBkcHVfcG93ZXJfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGllbnQpCisJ CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbXV0ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRs ZV9sb2NrKTsKKwlzdHJsY3B5KGNsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIE1BWF9DTElFTlRf TkFNRV9MRU4pOworCWNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0RJU0FCTEU7CisJ Y2xpZW50LT5pZCA9IGlkOworCWNsaWVudC0+YWN0aXZlID0gdHJ1ZTsKKwlwcl9kZWJ1ZygiY2xp ZW50ICVzIGNyZWF0ZWQ6JXBLIGlkIDolZFxuIiwgY2xpZW50X25hbWUsCisJCWNsaWVudCwgaWQp OworCWlkKys7CisJbGlzdF9hZGQoJmNsaWVudC0+bGlzdCwgJnBoYW5kbGUtPnBvd2VyX2NsaWVu dF9jbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCisJcmV0 dXJuIGNsaWVudDsKK30KKwordm9pZCBkcHVfcG93ZXJfY2xpZW50X2Rlc3Ryb3koc3RydWN0IGRw dV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVu dCkKK3sKKwlpZiAoIWNsaWVudCAgfHwgIXBoYW5kbGUpIHsKKwkJcHJfZXJyKCJyZWcgYnVzIHZv dGU6IGludmFsaWQgY2xpZW50IGhhbmRsZVxuIik7CisJfSBlbHNlIGlmICghY2xpZW50LT5hY3Rp dmUpIHsKKwkJcHJfZXJyKCJkcHUgcG93ZXIgZGVpbml0IGFscmVhZHkgZG9uZVxuIik7CisJCWtm cmVlKGNsaWVudCk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImJ1cyB2b3RlIGNsaWVudCAlcyBk ZXN0cm95ZWQ6JXBLIGlkOiV1XG4iLAorCQkJY2xpZW50LT5uYW1lLCBjbGllbnQsIGNsaWVudC0+ aWQpOworCQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCQlsaXN0X2RlbF9p bml0KCZjbGllbnQtPmxpc3QpOworCQltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9j ayk7CisJCWtmcmVlKGNsaWVudCk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1FDT01fQlVTX1ND QUxJTkcKKworI2RlZmluZSBNQVhfQVhJX1BPUlRfQ09VTlQgMworCitzdGF0aWMgaW50IF9kcHVf cG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hh bmRsZSAqcGRidXMsCisJCXU2NCBhYl9xdW90YV9ydCwgdTY0IGFiX3F1b3RhX25ydCwKKwkJdTY0 IGliX3F1b3RhX3J0LCB1NjQgaWJfcXVvdGFfbnJ0KQoreworCWludCBuZXdfdWNfaWR4OworCXU2 NCBhYl9xdW90YVtNQVhfQVhJX1BPUlRfQ09VTlRdID0gezAsIDB9OworCXU2NCBpYl9xdW90YVtN QVhfQVhJX1BPUlRfQ09VTlRdID0gezAsIDB9OworCWludCByYzsKKworCWlmIChwZGJ1cy0+ZGF0 YV9idXNfaGRsIDwgMSkgeworCQlwcl9lcnIoImludmFsaWQgYnVzIGhhbmRsZSAlZFxuIiwgcGRi dXMtPmRhdGFfYnVzX2hkbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBkYnVzLT5hYl9y dCA9IGFiX3F1b3RhX3J0OworCXBkYnVzLT5pYl9ydCA9IGliX3F1b3RhX3J0OworCXBkYnVzLT5h Yl9ucnQgPSBhYl9xdW90YV9ucnQ7CisJcGRidXMtPmliX25ydCA9IGliX3F1b3RhX25ydDsKKwor CWlmIChwZGJ1cy0+ZW5hYmxlKSB7CisJCWFiX3F1b3RhX3J0ID0gbWF4X3QodTY0LCBhYl9xdW90 YV9ydCwKKwkJCQlEUFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfQUJfUVVPVEEpOworCQlpYl9x dW90YV9ydCA9IG1heF90KHU2NCwgaWJfcXVvdGFfcnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9F TkFCTEVfQlVTX0lCX1FVT1RBKTsKKwkJYWJfcXVvdGFfbnJ0ID0gbWF4X3QodTY0LCBhYl9xdW90 YV9ucnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVTX0FCX1FVT1RBKTsKKwkJaWJf cXVvdGFfbnJ0ID0gbWF4X3QodTY0LCBpYl9xdW90YV9ucnQsCisJCQkJRFBVX1BPV0VSX0hBTkRM RV9FTkFCTEVfQlVTX0lCX1FVT1RBKTsKKwl9IGVsc2UgeworCQlhYl9xdW90YV9ydCA9IG1pbl90 KHU2NCwgYWJfcXVvdGFfcnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19BQl9R VU9UQSk7CisJCWliX3F1b3RhX3J0ID0gbWluX3QodTY0LCBpYl9xdW90YV9ydCwKKwkJCQlEUFVf UE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0lCX1FVT1RBKTsKKwkJYWJfcXVvdGFfbnJ0ID0gbWlu X3QodTY0LCBhYl9xdW90YV9ucnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19B Ql9RVU9UQSk7CisJCWliX3F1b3RhX25ydCA9IG1pbl90KHU2NCwgaWJfcXVvdGFfbnJ0LAorCQkJ CURQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfSUJfUVVPVEEpOworCX0KKworCWlmICghYWJf cXVvdGFfcnQgJiYgIWFiX3F1b3RhX25ydCAmJiAhaWJfcXVvdGFfcnQgJiYgIWliX3F1b3RhX25y dCkgIHsKKwkJbmV3X3VjX2lkeCA9IDA7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBt c21fYnVzX3ZlY3RvcnMgKnZlY3QgPSBOVUxMOworCQlzdHJ1Y3QgbXNtX2J1c19zY2FsZV9wZGF0 YSAqYndfdGFibGUgPQorCQkJcGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlOworCQl1MzIgbnJ0 X2F4aV9wb3J0X2NudCA9IHBkYnVzLT5ucnRfYXhpX3BvcnRfY250OworCQl1MzIgdG90YWxfYXhp X3BvcnRfY250ID0gcGRidXMtPmF4aV9wb3J0X2NudDsKKwkJdTMyIHJ0X2F4aV9wb3J0X2NudCA9 IHRvdGFsX2F4aV9wb3J0X2NudCAtIG5ydF9heGlfcG9ydF9jbnQ7CisKKwkJaWYgKCFid190YWJs ZSB8fCAhdG90YWxfYXhpX3BvcnRfY250IHx8CisJCSAgICB0b3RhbF9heGlfcG9ydF9jbnQgPiBN QVhfQVhJX1BPUlRfQ09VTlQpIHsKKwkJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7CisJCQly ZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChwZGJ1cy0+YnVzX2NoYW5uZWxzKSB7CisJCQlp Yl9xdW90YV9ydCA9IGRpdl91NjQoaWJfcXVvdGFfcnQsCisJCQkJCQlwZGJ1cy0+YnVzX2NoYW5u ZWxzKTsKKwkJCWliX3F1b3RhX25ydCA9IGRpdl91NjQoaWJfcXVvdGFfbnJ0LAorCQkJCQkJcGRi dXMtPmJ1c19jaGFubmVscyk7CisJCX0KKworCQlpZiAobnJ0X2F4aV9wb3J0X2NudCkgeworCisJ CQlhYl9xdW90YV9ydCA9IGRpdl91NjQoYWJfcXVvdGFfcnQsIHJ0X2F4aV9wb3J0X2NudCk7CisJ CQlhYl9xdW90YV9ucnQgPSBkaXZfdTY0KGFiX3F1b3RhX25ydCwgbnJ0X2F4aV9wb3J0X2NudCk7 CisKKwkJCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9heGlfcG9ydF9jbnQ7IGkrKykgeworCQkJCWlm IChpIDwgcnRfYXhpX3BvcnRfY250KSB7CisJCQkJCWFiX3F1b3RhW2ldID0gYWJfcXVvdGFfcnQ7 CisJCQkJCWliX3F1b3RhW2ldID0gaWJfcXVvdGFfcnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJYWJf cXVvdGFbaV0gPSBhYl9xdW90YV9ucnQ7CisJCQkJCWliX3F1b3RhW2ldID0gaWJfcXVvdGFfbnJ0 OworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFiX3F1b3RhWzBdID0gZGl2X3U2NChhYl9x dW90YV9ydCArIGFiX3F1b3RhX25ydCwKKwkJCQkJdG90YWxfYXhpX3BvcnRfY250KTsKKwkJCWli X3F1b3RhWzBdID0gaWJfcXVvdGFfcnQgKyBpYl9xdW90YV9ucnQ7CisKKwkJCWZvciAoaSA9IDE7 IGkgPCB0b3RhbF9heGlfcG9ydF9jbnQ7IGkrKykgeworCQkJCWFiX3F1b3RhW2ldID0gYWJfcXVv dGFbMF07CisJCQkJaWJfcXVvdGFbaV0gPSBpYl9xdW90YVswXTsKKwkJCX0KKwkJfQorCisJCW5l d191Y19pZHggPSAocGRidXMtPmN1cnJfYndfdWNfaWR4ICUKKwkJCShid190YWJsZS0+bnVtX3Vz ZWNhc2VzIC0gMSkpICsgMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdG90YWxfYXhpX3BvcnRfY250 OyBpKyspIHsKKwkJCXZlY3QgPSAmYndfdGFibGUtPnVzZWNhc2VbbmV3X3VjX2lkeF0udmVjdG9y c1tpXTsKKwkJCXZlY3QtPmFiID0gYWJfcXVvdGFbaV07CisJCQl2ZWN0LT5pYiA9IGliX3F1b3Rh W2ldOworCisJCQlwcl9kZWJ1ZygKKwkJCQkiJXMgdWNfaWR4PSVkICVzIHBhdGggaWR4PSVkIGFi PSVsbHUgaWI9JWxsdVxuIiwKKwkJCQlid190YWJsZS0+bmFtZSwKKwkJCQluZXdfdWNfaWR4LCAo aSA8IHJ0X2F4aV9wb3J0X2NudCkgPyAicnQiIDogIm5ydCIKKwkJCQksIGksIHZlY3QtPmFiLCB2 ZWN0LT5pYik7CisJCX0KKwl9CisJcGRidXMtPmN1cnJfYndfdWNfaWR4ID0gbmV3X3VjX2lkeDsK KwlwZGJ1cy0+YW9fYndfdWNfaWR4ID0gbmV3X3VjX2lkeDsKKworCURQVV9BVFJBQ0VfQkVHSU4o Im1zbV9idXNfc2NhbGVfcmVxIik7CisJcmMgPSBtc21fYnVzX3NjYWxlX2NsaWVudF91cGRhdGVf cmVxdWVzdChwZGJ1cy0+ZGF0YV9idXNfaGRsLAorCQkJbmV3X3VjX2lkeCk7CisJRFBVX0FUUkFD RV9FTkQoIm1zbV9idXNfc2NhbGVfcmVxIik7CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkcHVf cG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxl LAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwKKwkJaW50IGJ1c19jbGllbnQs IHUzMiBidXNfaWQsCisJCXU2NCBhYl9xdW90YSwgdTY0IGliX3F1b3RhKQoreworCWludCByYyA9 IDA7CisJaW50IGk7CisJdTY0IHRvdGFsX2FiX3J0ID0gMCwgdG90YWxfaWJfcnQgPSAwOworCXU2 NCB0b3RhbF9hYl9ucnQgPSAwLCB0b3RhbF9pYl9ucnQgPSAwOworCXN0cnVjdCBkcHVfcG93ZXJf Y2xpZW50ICpjbGllbnQ7CisKKwlpZiAoIXBoYW5kbGUgfHwgIXBjbGllbnQgfHwKKwkJCWJ1c19j bGllbnQgPj0gRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYIHx8CisJCQlidXNf aWQgPj0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWCkgeworCQlwcl9lcnIoImludmFsaWQg cGFyYW1ldGVyc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnBo YW5kbGUtPnBoYW5kbGVfbG9jayk7CisKKwlwY2xpZW50LT5hYltidXNfY2xpZW50XSA9IGFiX3F1 b3RhOworCXBjbGllbnQtPmliW2J1c19jbGllbnRdID0gaWJfcXVvdGE7CisJdHJhY2VfZHB1X3Bl cmZfdXBkYXRlX2J1cyhidXNfY2xpZW50LCBhYl9xdW90YSwgaWJfcXVvdGEpOworCisJbGlzdF9m b3JfZWFjaF9lbnRyeShjbGllbnQsICZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QsIGxpc3Qp IHsKKwkJZm9yIChpID0gMDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01B WDsgaSsrKSB7CisJCQlpZiAoaSA9PSBEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9O UlQpIHsKKwkJCQl0b3RhbF9hYl9ucnQgKz0gY2xpZW50LT5hYltpXTsKKwkJCQl0b3RhbF9pYl9u cnQgKz0gY2xpZW50LT5pYltpXTsKKwkJCX0gZWxzZSB7CisJCQkJdG90YWxfYWJfcnQgKz0gY2xp ZW50LT5hYltpXTsKKwkJCQl0b3RhbF9pYl9ydCA9IG1heCh0b3RhbF9pYl9ydCwgY2xpZW50LT5p YltpXSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2J1 c19pZF0uZGF0YV9idXNfaGRsKQorCQlyYyA9IF9kcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3Rh KAorCQkJJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtidXNfaWRdLAorCQkJdG90YWxfYWJfcnQs IHRvdGFsX2FiX25ydCwKKwkJCXRvdGFsX2liX3J0LCB0b3RhbF9pYl9ucnQpOworCisJbXV0ZXhf dW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0 aWMgdm9pZCBkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdpc3RlcigKKwkJc3RydWN0IGRwdV9wb3dl cl9kYXRhX2J1c19oYW5kbGUgKnBkYnVzKQoreworCWlmIChwZGJ1cy0+ZGF0YV9idXNfaGRsKSB7 CisJCW1zbV9idXNfc2NhbGVfdW5yZWdpc3Rlcl9jbGllbnQocGRidXMtPmRhdGFfYnVzX2hkbCk7 CisJCXBkYnVzLT5kYXRhX2J1c19oZGwgPSAwOworCX0KK30KKworc3RhdGljIGludCBkcHVfcG93 ZXJfZGF0YV9idXNfcGFyc2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1Y3Qg ZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJ c3RydWN0IGRldmljZV9ub2RlICpub2RlOworCWludCByYyA9IDA7CisJaW50IHBhdGhzOworCisJ cGRidXMtPmJ1c19jaGFubmVscyA9IDE7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2 LT5kZXYub2Zfbm9kZSwKKwkJInFjb20sZHB1LWRyYW0tY2hhbm5lbHMiLCAmcGRidXMtPmJ1c19j aGFubmVscyk7CisJaWYgKHJjKSB7CisJCXByX2RlYnVnKCJudW1iZXIgb2YgY2hhbm5lbHMgcHJv cGVydHkgbm90IHNwZWNpZmllZFxuIik7CisJCXJjID0gMDsKKwl9CisKKwlwZGJ1cy0+bnJ0X2F4 aV9wb3J0X2NudCA9IDA7CisJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zf bm9kZSwKKwkJCSJxY29tLGRwdS1udW0tbnJ0LXBhdGhzIiwKKwkJCSZwZGJ1cy0+bnJ0X2F4aV9w b3J0X2NudCk7CisJaWYgKHJjKSB7CisJCXByX2RlYnVnKCJudW1iZXIgb2YgYXhpIHBvcnQgcHJv cGVydHkgbm90IHNwZWNpZmllZFxuIik7CisJCXJjID0gMDsKKwl9CisKKwlub2RlID0gb2ZfZ2V0 X2NoaWxkX2J5X25hbWUocGRldi0+ZGV2Lm9mX25vZGUsIG5hbWUpOworCWlmIChub2RlKSB7CisJ CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwKKwkJCQkicWNvbSxtc20tYnVzLG51bS1w YXRocyIsICZwYXRocyk7CisJCWlmIChyYykgeworCQkJcHJfZXJyKCJFcnJvci4gcWNvbSxtc20t YnVzLG51bS1wYXRocyBub3QgZm91bmRcbiIpOworCQkJcmV0dXJuIHJjOworCQl9CisJCXBkYnVz LT5heGlfcG9ydF9jbnQgPSBwYXRoczsKKworCQlwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUg PQorCQkJCW1zbV9idXNfcGRhdGFfZnJvbV9ub2RlKHBkZXYsIG5vZGUpOworCQlpZiAoSVNfRVJS X09SX05VTEwocGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlKSkgeworCQkJcHJfZXJyKCJyZWcg YnVzIGhhbmRsZSBwYXJzaW5nIGZhaWxlZFxuIik7CisJCQlyYyA9IFBUUl9FUlIocGRidXMtPmRh dGFfYnVzX3NjYWxlX3RhYmxlKTsKKwkJCWlmICghcGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxl KQorCQkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZW5kOworCQl9CisJCXBkYnVzLT5kYXRhX2J1 c19oZGwgPSBtc21fYnVzX3NjYWxlX3JlZ2lzdGVyX2NsaWVudCgKKwkJCQlwZGJ1cy0+ZGF0YV9i dXNfc2NhbGVfdGFibGUpOworCQlpZiAoIXBkYnVzLT5kYXRhX2J1c19oZGwpIHsKKwkJCXByX2Vy cigiZGF0YV9idXNfY2xpZW50IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCQlyYyA9IC1FSU5WQUw7 CisJCQlnb3RvIGVuZDsKKwkJfQorCQlwcl9kZWJ1ZygicmVnaXN0ZXIgJXMgZGF0YV9idXNfaGRs PSV4XG4iLCBuYW1lLAorCQkJCXBkYnVzLT5kYXRhX2J1c19oZGwpOworCX0KKworZW5kOgorCXJl dHVybiByYzsKK30KKworc3RhdGljIGludCBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxl KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbXNtX2J1c19zY2FsZV9w ZGF0YSAqYnVzX3NjYWxlX3RhYmxlOworCWludCByYyA9IDA7CisKKwlub2RlID0gb2ZfZ2V0X2No aWxkX2J5X25hbWUocGRldi0+ZGV2Lm9mX25vZGUsICJxY29tLGRwdS1yZWctYnVzIik7CisJaWYg KG5vZGUpIHsKKwkJYnVzX3NjYWxlX3RhYmxlID0gbXNtX2J1c19wZGF0YV9mcm9tX25vZGUocGRl diwgbm9kZSk7CisJCWlmIChJU19FUlJfT1JfTlVMTChidXNfc2NhbGVfdGFibGUpKSB7CisJCQlw cl9lcnIoInJlZyBidXMgaGFuZGxlIHBhcnNpbmcgZmFpbGVkXG4iKTsKKwkJCXJjID0gUFRSX0VS UihidXNfc2NhbGVfdGFibGUpOworCQkJaWYgKCFidXNfc2NhbGVfdGFibGUpCisJCQkJcmMgPSAt RUlOVkFMOworCQkJZ290byBlbmQ7CisJCX0KKwkJcGhhbmRsZS0+cmVnX2J1c19oZGwgPSBtc21f YnVzX3NjYWxlX3JlZ2lzdGVyX2NsaWVudCgKKwkJCSAgICAgIGJ1c19zY2FsZV90YWJsZSk7CisJ CWlmICghcGhhbmRsZS0+cmVnX2J1c19oZGwpIHsKKwkJCXByX2VycigicmVnX2J1c19jbGllbnQg cmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZW5kOworCQl9 CisJCXByX2RlYnVnKCJyZWdpc3RlciByZWdfYnVzX2hkbD0leFxuIiwgcGhhbmRsZS0+cmVnX2J1 c19oZGwpOworCX0KKworZW5kOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHB1X3Bv d2VyX3JlZ19idXNfdW5yZWdpc3Rlcih1MzIgcmVnX2J1c19oZGwpCit7CisJaWYgKHJlZ19idXNf aGRsKQorCQltc21fYnVzX3NjYWxlX3VucmVnaXN0ZXJfY2xpZW50KHJlZ19idXNfaGRsKTsKK30K KworaW50IGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9o YW5kbGUgKnBoYW5kbGUsCisJCQkJCQkJYm9vbCBlbmFibGUpCit7CisJaW50IGk7CisKKwlpZiAo IXBoYW5kbGUpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJZm9yIChpID0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0M7CisJCQlp IDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKQorCQlwaGFuZGxlLT5kYXRhX2J1 c19oYW5kbGVbaV0uZW5hYmxlID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hh bmRsZSAqcGRidXMsCisJCQkJCQkJYm9vbCBlbmFibGUpCit7CisJaW50IHJjID0gMDsKKworCXBk YnVzLT5lbmFibGUgPSBlbmFibGU7CisKKwlpZiAocGRidXMtPmRhdGFfYnVzX2hkbCkKKwkJcmMg PSBfZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YShwZGJ1cywgcGRidXMtPmFiX3J0LAorCQkJ CXBkYnVzLT5hYl9ucnQsIHBkYnVzLT5pYl9ydCwgcGRidXMtPmliX25ydCk7CisKKwlpZiAocmMp CisJCXByX2VycigiZmFpbGVkIHRvIHNldCBkYXRhIGJ1cyB2b3RlIHJjPSVkIGVuYWJsZTolZFxu IiwKKwkJCQkJCQlyYywgZW5hYmxlKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBk cHVfcG93ZXJfcmVnX2J1c191cGRhdGUodTMyIHJlZ19idXNfaGRsLCB1MzIgdXNlY2FzZV9uZHgp Cit7CisJaW50IHJjID0gMDsKKworCWlmIChyZWdfYnVzX2hkbCkKKwkJcmMgPSBtc21fYnVzX3Nj YWxlX2NsaWVudF91cGRhdGVfcmVxdWVzdChyZWdfYnVzX2hkbCwKKwkJCQkJCQkJdXNlY2FzZV9u ZHgpOworCWlmIChyYykKKwkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IHJlZyBidXMgdm90ZSByYz0l ZFxuIiwgcmMpOworCisJcmV0dXJuIHJjOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgZHB1X3Bvd2Vy X2RhdGFfYnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBk cHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2RhdGFfYnVzX3VucmVnaXN0ZXIo CisJCXN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cykKK3sKK30KKworaW50 IGRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBo YW5kbGUsCisJCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LAorCQlpbnQgYnVzX2Ns aWVudCwgdTMyIGJ1c19pZCwKKwkJdTY0IGFiX3F1b3RhLCB1NjQgaWJfcXVvdGEpCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19idXNfcGFyc2Uoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkK K3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHB1X3Bvd2VyX3JlZ19idXNfdW5yZWdp c3Rlcih1MzIgcmVnX2J1c19oZGwpCit7Cit9CisKK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19i dXNfdXBkYXRlKHUzMiByZWdfYnVzX2hkbCwgdTMyIHVzZWNhc2VfbmR4KQoreworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGRwdV9wb3dlcl9kYXRhX2J1c191cGRhdGUoc3RydWN0IGRwdV9w b3dlcl9kYXRhX2J1c19oYW5kbGUgKnBkYnVzLAorCQkJCQkJCWJvb2wgZW5hYmxlKQoreworCXJl dHVybiAwOworfQorCitpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRlX3VwZGF0ZShzdHJ1Y3Qg ZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJCQkJCQlib29sIGVuYWJsZSkKK3sKKwlyZXR1 cm4gMDsKK30KKyNlbmRpZgorCitpbnQgZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkK K3sKKwlpbnQgcmMgPSAwLCBpOworCisJaWYgKCFwaGFuZGxlIHx8ICFwZGV2KSB7CisJCXByX2Vy cigiaW52YWxpZCBpbnB1dCBwYXJhbVxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBlbmQ7 CisJfQorCXBoYW5kbGUtPmRldiA9ICZwZGV2LT5kZXY7CisKKwlyYyA9IGRwdV9wb3dlcl9yZWdf YnVzX3BhcnNlKHBkZXYsIHBoYW5kbGUpOworCWlmIChyYykgeworCQlwcl9lcnIoInJlZ2lzdGVy IGJ1cyBwYXJzZSBmYWlsZWQgcmM9JWRcbiIsIHJjKTsKKwkJZ290byBlbmQ7CisJfQorCisJZm9y IChpID0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0M7CisJCQlpIDwgRFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEX01BWDsgaSsrKSB7CisJCXJjID0gZHB1X3Bvd2VyX2RhdGFfYnVzX3BhcnNl KHBkZXYsCisJCQkJJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwKKwkJCQlkYXRhX2J1c19u YW1lW2ldKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoInJlZ2lzdGVyIGRhdGEgYnVzIHBhcnNl IGZhaWxlZCBpZD0lZCByYz0lZFxuIiwKKwkJCQkJaSwgcmMpOworCQkJZ290byBkYXRhX2J1c19l cnI7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2Ns aXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGhhbmRsZS0+ZXZlbnRfbGlzdCk7CisKKwltdXRleF9p bml0KCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCisJcmV0dXJuIHJjOworCitkYXRhX2J1c19l cnI6CisJZm9yIChpLS07IGkgPj0gMDsgaS0tKQorCQlkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdp c3RlcigmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldKTsKKwlkcHVfcG93ZXJfcmVnX2J1c191 bnJlZ2lzdGVyKHBoYW5kbGUtPnJlZ19idXNfaGRsKTsKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisK K3ZvaWQgZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAorCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQoreworCXN0cnVjdCBkcHVf cG93ZXJfY2xpZW50ICpjdXJyX2NsaWVudCwgKm5leHRfY2xpZW50OworCXN0cnVjdCBkcHVfcG93 ZXJfZXZlbnQgKmN1cnJfZXZlbnQsICpuZXh0X2V2ZW50OworCWludCBpOworCisJaWYgKCFwaGFu ZGxlIHx8ICFwZGV2KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1dCBwYXJhbVxuIik7CisJCXJl dHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShjdXJyX2NsaWVudCwgbmV4dF9jbGllbnQsCisJCQkmcGhhbmRs ZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7CisJCXByX2VycigiY2xpZW5kOiVzLSVkIHN0 aWxsIHJlZ2lzdGVyZWQgd2l0aCByZWZjb3VudDolZFxuIiwKKwkJCQljdXJyX2NsaWVudC0+bmFt ZSwgY3Vycl9jbGllbnQtPmlkLAorCQkJCWN1cnJfY2xpZW50LT5yZWZjb3VudCk7CisJCWN1cnJf Y2xpZW50LT5hY3RpdmUgPSBmYWxzZTsKKwkJbGlzdF9kZWwoJmN1cnJfY2xpZW50LT5saXN0KTsK Kwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Vycl9ldmVudCwgbmV4dF9ldmVudCwK KwkJCSZwaGFuZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7CisJCXByX2VycigiZXZlbnQ6JWQsIGNs aWVudDolcyBzdGlsbCByZWdpc3RlcmVkXG4iLAorCQkJCWN1cnJfZXZlbnQtPmV2ZW50X3R5cGUs CisJCQkJY3Vycl9ldmVudC0+Y2xpZW50X25hbWUpOworCQljdXJyX2V2ZW50LT5hY3RpdmUgPSBm YWxzZTsKKwkJbGlzdF9kZWwoJmN1cnJfZXZlbnQtPmxpc3QpOworCX0KKwltdXRleF91bmxvY2so JnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEX01BWDsgaSsrKQorCQlkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdpc3Rlcigm cGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldKTsKKworCWRwdV9wb3dlcl9yZWdfYnVzX3VucmVn aXN0ZXIocGhhbmRsZS0+cmVnX2J1c19oZGwpOworfQorCitpbnQgZHB1X3Bvd2VyX3Jlc291cmNl X2VuYWJsZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwlzdHJ1Y3QgZHB1X3Bv d2VyX2NsaWVudCAqcGNsaWVudCwgYm9vbCBlbmFibGUpCit7CisJaW50IHJjID0gMCwgaTsKKwli b29sIGNoYW5nZWQgPSBmYWxzZTsKKwl1MzIgbWF4X3VzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9E SVNBQkxFLCBwcmV2X3VzZWNhc2VfbmR4OworCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGll bnQ7CisKKwlpZiAoIXBoYW5kbGUgfHwgIXBjbGllbnQpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0IGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygm cGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlpZiAoZW5hYmxlKQorCQlwY2xpZW50LT5yZWZjb3Vu dCsrOworCWVsc2UgaWYgKHBjbGllbnQtPnJlZmNvdW50KQorCQlwY2xpZW50LT5yZWZjb3VudC0t OworCisJaWYgKHBjbGllbnQtPnJlZmNvdW50KQorCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZP VEVfSU5ERVhfTE9XOworCWVsc2UKKwkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVY X0RJU0FCTEU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnBoYW5kbGUtPnBvd2Vy X2NsaWVudF9jbGlzdCwgbGlzdCkgeworCQlpZiAoY2xpZW50LT51c2VjYXNlX25keCA8IFZPVEVf SU5ERVhfTUFYICYmCisJCSAgICBjbGllbnQtPnVzZWNhc2VfbmR4ID4gbWF4X3VzZWNhc2VfbmR4 KQorCQkJbWF4X3VzZWNhc2VfbmR4ID0gY2xpZW50LT51c2VjYXNlX25keDsKKwl9CisKKwlpZiAo cGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCAhPSBtYXhfdXNlY2FzZV9uZHgpIHsKKwkJY2hh bmdlZCA9IHRydWU7CisJCXByZXZfdXNlY2FzZV9uZHggPSBwaGFuZGxlLT5jdXJyZW50X3VzZWNh c2VfbmR4OworCQlwaGFuZGxlLT5jdXJyZW50X3VzZWNhc2VfbmR4ID0gbWF4X3VzZWNhc2VfbmR4 OworCX0KKworCXByX2RlYnVnKCIlcFM6IGNoYW5nZWQ9JWQgY3VycmVudCBpZHg9JWQgcmVxdWVz dCBjbGllbnQgJXMgaWQ6JXUgZW5hYmxlOiVkIHJlZmNvdW50OiVkXG4iLAorCQlfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoMCksIGNoYW5nZWQsIG1heF91c2VjYXNlX25keCwKKwkJcGNsaWVudC0+ bmFtZSwgcGNsaWVudC0+aWQsIGVuYWJsZSwgcGNsaWVudC0+cmVmY291bnQpOworCisJaWYgKCFj aGFuZ2VkKQorCQlnb3RvIGVuZDsKKworCWlmIChlbmFibGUpIHsKKwkJZHB1X3Bvd2VyX2V2ZW50 X3RyaWdnZXJfbG9ja2VkKHBoYW5kbGUsCisJCQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9FTkFCTEUp OworCisJCWZvciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKysp IHsKKwkJCXJjID0gZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgKKwkJCQkJJnBoYW5kbGUtPmRh dGFfYnVzX2hhbmRsZVtpXSwgZW5hYmxlKTsKKwkJCWlmIChyYykgeworCQkJCXByX2VycigiZmFp bGVkIHRvIHNldCBkYXRhIGJ1cyB2b3RlIGlkPSVkIHJjPSVkXG4iLAorCQkJCQkJaSwgcmMpOwor CQkJCWdvdG8gZGF0YV9idXNfaGRsX2VycjsKKwkJCX0KKwkJfQorCisJCXJjID0gZHB1X3Bvd2Vy X3JlZ19idXNfdXBkYXRlKHBoYW5kbGUtPnJlZ19idXNfaGRsLAorCQkJCQkJCW1heF91c2VjYXNl X25keCk7CisJCWlmIChyYykgeworCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IHJlZyBidXMgdm90 ZSByYz0lZFxuIiwgcmMpOworCQkJZ290byByZWdfYnVzX2hkbF9lcnI7CisJCX0KKworCQlkcHVf cG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwKKwkJCQlEUFVfUE9XRVJfRVZFTlRf UE9TVF9FTkFCTEUpOworCisJfSBlbHNlIHsKKwkJZHB1X3Bvd2VyX2V2ZW50X3RyaWdnZXJfbG9j a2VkKHBoYW5kbGUsCisJCQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxFKTsKKworCQlkcHVf cG93ZXJfcmVnX2J1c191cGRhdGUocGhhbmRsZS0+cmVnX2J1c19oZGwsCisJCQkJCQkJbWF4X3Vz ZWNhc2VfbmR4KTsKKworCQlmb3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NQVg7IGkrKykKKwkJCWRwdV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFf YnVzX2hhbmRsZVtpXSwKKwkJCQkJZW5hYmxlKTsKKworCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dl cl9sb2NrZWQocGhhbmRsZSwKKwkJCQlEUFVfUE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFKTsKKwl9 CisKK2VuZDoKKwltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisJcmV0dXJu IHJjOworCityZWdfYnVzX2hkbF9lcnI6CisJZm9yIChpID0gMCA7IGkgPCBEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfTUFYOyBpKyspCisJCWRwdV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5k bGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwgMCk7CitkYXRhX2J1c19oZGxfZXJyOgorCXBoYW5kbGUt PmN1cnJlbnRfdXNlY2FzZV9uZHggPSBwcmV2X3VzZWNhc2VfbmR4OworCW11dGV4X3VubG9jaygm cGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBkcHVfcG93 ZXJfZXZlbnQgKmRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCisJCXN0cnVjdCBkcHVf cG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQl1MzIgZXZlbnRfdHlwZSwgdm9pZCAoKmNiX2ZuYyko dTMyIGV2ZW50X3R5cGUsIHZvaWQgKnVzciksCisJCXZvaWQgKnVzciwgY2hhciAqY2xpZW50X25h bWUpCit7CisJc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIXBoYW5kbGUp IHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGhhbmRsZVxuIik7CisJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOworCX0gZWxzZSBpZiAoIWNiX2ZuYyB8fCAhZXZlbnRfdHlwZSkgeworCQlwcl9l cnIoIm5vIGNhbGxiYWNrIGZuYyBvciBldmVudCB0eXBlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7CisJfQorCisJZXZlbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X3Bvd2Vy X2V2ZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisKKwlldmVudC0+ZXZlbnRfdHlwZSA9IGV2ZW50X3R5cGU7CisJZXZlbnQtPmNiX2Zu YyA9IGNiX2ZuYzsKKwlldmVudC0+dXNyID0gdXNyOworCXN0cmxjcHkoZXZlbnQtPmNsaWVudF9u YW1lLCBjbGllbnRfbmFtZSwgTUFYX0NMSUVOVF9OQU1FX0xFTik7CisJZXZlbnQtPmFjdGl2ZSA9 IHRydWU7CisKKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCWxpc3RfYWRk KCZldmVudC0+bGlzdCwgJnBoYW5kbGUtPmV2ZW50X2xpc3QpOworCW11dGV4X3VubG9jaygmcGhh bmRsZS0+cGhhbmRsZV9sb2NrKTsKKworCXJldHVybiBldmVudDsKK30KKwordm9pZCBkcHVfcG93 ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoCisJCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpw aGFuZGxlLAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoIXBoYW5k bGUgfHwgIWV2ZW50KSB7CisJCXByX2VycigiaW52YWxpZCBwaGFuZGxlIG9yIGV2ZW50XG4iKTsK Kwl9IGVsc2UgaWYgKCFldmVudC0+YWN0aXZlKSB7CisJCXByX2VycigicG93ZXIgaGFuZGxlIGRl aW5pdCBhbHJlYWR5IGRvbmVcbiIpOworCQlrZnJlZShldmVudCk7CisJfSBlbHNlIHsKKwkJbXV0 ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmZXZlbnQt Pmxpc3QpOworCQltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisJCWtmcmVl KGV2ZW50KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcG93ZXJfaGFuZGxlLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf cG93ZXJfaGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZDRi OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9w b3dlcl9oYW5kbGUuaApAQCAtMCwwICsxLDI4OCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICovCisKKyNpZm5kZWYgX0RQVV9QT1dFUl9IQU5ETEVfSF8KKyNkZWZpbmUgX0RQVV9Q T1dFUl9IQU5ETEVfSF8KKworI2RlZmluZSBNQVhfQ0xJRU5UX05BTUVfTEVOIDEyOAorCisjZGVm aW5lIERQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19BQl9RVU9UQQkwCisjZGVmaW5lIERQVV9Q T1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEJMAorI2RlZmluZSBEUFVfUE9XRVJfSEFO RExFX0VOQUJMRV9CVVNfSUJfUVVPVEEJMTYwMDAwMDAwMAorI2RlZmluZSBEUFVfUE9XRVJfSEFO RExFX0RJU0FCTEVfQlVTX0lCX1FVT1RBCTAKKworI2luY2x1ZGUgPGxpbnV4L2RwdV9pb191dGls Lmg+CisKKy8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSBwb3dlciBoYW5kbGVyIGRp c2FibGUgKi8KKyNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxFCTB4MQorCisvKiBl dmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGRpc2FibGUgKi8KKyNk ZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRQkweDIKKworLyogZXZlbnQgd2lsbCBi ZSB0cmlnZ2VyZWQgYmVmb3JlIHBvd2VyIGhhbmRsZXIgZW5hYmxlICovCisjZGVmaW5lIERQVV9Q T1dFUl9FVkVOVF9QUkVfRU5BQkxFCTB4NAorCisvKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBh ZnRlciBwb3dlciBoYW5kbGVyIGVuYWJsZSAqLworI2RlZmluZSBEUFVfUE9XRVJfRVZFTlRfUE9T VF9FTkFCTEUJMHg4CisKKy8qKgorICogbWRzc19idXNfdm90ZV90eXBlOiByZWdpc3RlciBidXMg dm90ZSB0eXBlCisgKiBWT1RFX0lOREVYX0RJU0FCTEU6IHJlbW92ZXMgdGhlIGNsaWVudCB2b3Rl CisgKiBWT1RFX0lOREVYX0xPVzoga2VlcHMgdGhlIGxvd2VzdCB2b3RlIGZvciByZWdpc3RlciBi dXMKKyAqIFZPVEVfSU5ERVhfTUFYOiBpbnZhbGlkCisgKi8KK2VudW0gbWRzc19idXNfdm90ZV90 eXBlIHsKKwlWT1RFX0lOREVYX0RJU0FCTEUsCisJVk9URV9JTkRFWF9MT1csCisJVk9URV9JTkRF WF9NQVgsCit9OworCisvKioKKyAqIGVudW0gZHB1X3Bvd2VyX2hhbmRsZV9kYXRhX2J1c19jbGll bnQgLSB0eXBlIG9mIGF4aSBidXMgY2xpZW50cworICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9C VVNfQ0xJRU5UX1JUOiBjb3JlIHJlYWwtdGltZSBidXMgY2xpZW50CisgKiBARFBVX1BPV0VSX0hB TkRMRV9EQVRBX0JVU19DTElFTlRfTlJUOiBjb3JlIG5vbi1yZWFsLXRpbWUgYnVzIGNsaWVudAor ICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWDogbWF4aW11bSBudW1iZXIg b2YgYnVzIGNsaWVudCB0eXBlCisgKi8KK2VudW0gZHB1X3Bvd2VyX2hhbmRsZV9kYXRhX2J1c19j bGllbnQgeworCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JULAorCURQVV9QT1dF Ul9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCwKKwlEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVT X0NMSUVOVF9NQVgKK307CisKKy8qKgorICogZW51bSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSUQg LSBkYXRhIGJ1cyBpZGVudGlmaWVyCisgKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0M6 IERQVS9NTk9DIGRhdGEgYnVzCisgKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0M6IE1O T0MvTExDQyBkYXRhIGJ1cworICogQERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkk6IExMQ0Mv RUJJIGRhdGEgYnVzCisgKi8KK2VudW0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEIHsKKwlEUFVf UE9XRVJfSEFORExFX0RCVVNfSURfTU5PQywKKwlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExD QywKKwlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJLAorCURQVV9QT1dFUl9IQU5ETEVfREJV U19JRF9NQVgsCit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfcG93ZXJfY2xpZW50OiBzdG9yZXMg dGhlIHBvd2VyIGNsaWVudCBmb3IgZHB1IGRyaXZlcgorICogQG5hbWU6CW5hbWUgb2YgdGhlIGNs aWVudAorICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHJlZ3MgYnVzIHZvdGUgdHlwZQorICogQHJl ZmNvdW50OgljdXJyZW50IHJlZmNvdW50IGlmIG11bHRpcGxlIG1vZHVsZXMgYXJlIHVzaW5nIHNh bWUKKyAqICAgICAgICAgICAgICBzYW1lIGNsaWVudCBmb3IgZW5hYmxlL2Rpc2FibGUuIFBvd2Vy IG1vZHVsZSB3aWxsCisgKiAgICAgICAgICAgICAgYWdncmVnYXRlIHRoZSByZWZjb3VudCBhbmQg dm90ZSBhY2NvcmRpbmdseSBmb3IgdGhpcworICogICAgICAgICAgICAgIGNsaWVudC4KKyAqIEBp ZDoJCWFzc2lnbmVkIGR1cmluZyBjcmVhdGUuIGhlbHBzIGZvciBkZWJ1Z2dpbmcuCisgKiBAbGlz dDoJbGlzdCB0byBhdHRhY2ggcG93ZXIgaGFuZGxlIG1hc3RlciBsaXN0CisgKiBAYWI6ICAgICAg ICAgYXJiaXRyYXRlZCBiYW5kd2lkdGggZm9yIGVhY2ggYnVzIGNsaWVudAorICogQGliOiAgICAg ICAgIGluc3RhbnRhbmVvdXMgYmFuZHdpZHRoIGZvciBlYWNoIGJ1cyBjbGllbnQKKyAqIEBhY3Rp dmU6CWluaWRjYXRlcyB0aGUgc3RhdGUgb2YgZHB1IHBvd2VyIGhhbmRsZQorICovCitzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCB7CisJY2hhciBuYW1lW01BWF9DTElFTlRfTkFNRV9MRU5dOworCXNo b3J0IHVzZWNhc2VfbmR4OworCXNob3J0IHJlZmNvdW50OworCXUzMiBpZDsKKwlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7CisJdTY0IGFiW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01B WF07CisJdTY0IGliW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWF07CisJYm9v bCBhY3RpdmU7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfcG93ZXJfZGF0YV9oYW5kbGU6IHBv d2VyIGhhbmRsZSBzdHJ1Y3QgZm9yIGRhdGEgYnVzCisgKiBAZGF0YV9idXNfc2NhbGVfdGFibGU6 IHBvaW50ZXIgdG8gYnVzIHNjYWxpbmcgdGFibGUKKyAqIEBkYXRhX2J1c19oZGw6IGN1cnJlbnQg ZGF0YSBidXMgaGFuZGxlCisgKiBAYXhpX3BvcnRfY250OiBudW1iZXIgb2YgcnQgYXhpIHBvcnRz CisgKiBAbnJ0X2F4aV9wb3J0X2NudDogbnVtYmVyIG9mIG5ydCBheGkgcG9ydHMKKyAqIEBidXNf Y2hhbm5lbHM6IG51bWJlciBvZiBtZW1vcnkgYnVzIGNoYW5uZWxzCisgKiBAY3Vycl9id191Y19p ZHg6IGN1cnJlbnQgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBidXMKKyAqIEBhb19id191Y19pZHg6 IGFjdGl2ZSBvbmx5IHVzZSBjYXNlIGluZGV4IG9mIGRhdGEgYnVzCisgKiBAYWJfcnQ6IHJlYWx0 aW1lIGFiIHF1b3RhCisgKiBAaWJfcnQ6IHJlYWx0aW1lIGliIHF1b3RhCisgKiBAYWJfbnJ0OiBu b24tcmVhbHRpbWUgYWIgcXVvdGEKKyAqIEBpYl9ucnQ6IG5vbi1yZWFsdGltZSBpYiBxdW90YQor ICogQGVuYWJsZTogdHJ1ZSBpZiBidXMgaXMgZW5hYmxlZAorICovCitzdHJ1Y3QgZHB1X3Bvd2Vy X2RhdGFfYnVzX2hhbmRsZSB7CisJc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEgKmRhdGFfYnVz X3NjYWxlX3RhYmxlOworCXUzMiBkYXRhX2J1c19oZGw7CisJdTMyIGF4aV9wb3J0X2NudDsKKwl1 MzIgbnJ0X2F4aV9wb3J0X2NudDsKKwl1MzIgYnVzX2NoYW5uZWxzOworCXUzMiBjdXJyX2J3X3Vj X2lkeDsKKwl1MzIgYW9fYndfdWNfaWR4OworCXU2NCBhYl9ydDsKKwl1NjQgaWJfcnQ7CisJdTY0 IGFiX25ydDsKKwl1NjQgaWJfbnJ0OworCWJvb2wgZW5hYmxlOworfTsKKworLyoKKyAqIHN0cnVj dCBkcHVfcG93ZXJfZXZlbnQgLSBsb2NhbCBldmVudCByZWdpc3RyYXRpb24gc3RydWN0dXJlCisg KiBAY2xpZW50X25hbWU6IG5hbWUgb2YgdGhlIGNsaWVudCByZWdpc3RlcmluZworICogQGNiX2Zu YzogcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNyOiB1c2VyIHBv aW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBldmVudCB0cmlnZ2VyCisgKiBAZXZlbnQ6IHJlZmVy IHRvIERQVV9QT1dFUl9IQU5ETEVfRVZFTlRfKgorICogQGxpc3Q6IGxpc3QgdG8gYXR0YWNoIGV2 ZW50IG1hc3RlciBsaXN0CisgKiBAYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIHN0YXRlIG9mIGRwdSBw b3dlciBoYW5kbGUKKyAqLworc3RydWN0IGRwdV9wb3dlcl9ldmVudCB7CisJY2hhciBjbGllbnRf bmFtZVtNQVhfQ0xJRU5UX05BTUVfTEVOXTsKKwl2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlw ZSwgdm9pZCAqdXNyKTsKKwl2b2lkICp1c3I7CisJdTMyIGV2ZW50X3R5cGU7CisJc3RydWN0IGxp c3RfaGVhZCBsaXN0OworCWJvb2wgYWN0aXZlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3Bv d2VyX2hhbmRsZTogcG93ZXIgaGFuZGxlIG1haW4gc3RydWN0CisgKiBAY2xpZW50X2NsaXN0OiBt YXN0ZXIgbGlzdCB0byBzdG9yZSBhbGwgY2xpZW50cworICogQHBoYW5kbGVfbG9jazogbG9jayB0 byBzeW5jaHJvbml6ZSB0aGUgZW5hYmxlL2Rpc2FibGUKKyAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2 aWNlIHN0cnVjdHVyZQorICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHVzZWNhc2UgaW5kZXgKKyAq IEByZWdfYnVzX2hkbDogY3VycmVudCByZWdpc3RlciBidXMgaGFuZGxlCisgKiBAZGF0YV9idXNf aGFuZGxlOiBjb250ZXh0IHN0cnVjdHVyZSBmb3IgZGF0YSBidXMgY29udHJvbAorICogQGV2ZW50 X2xpc3Q6IGN1cnJlbnQgcG93ZXIgaGFuZGxlIGV2ZW50IGxpc3QKKyAqLworc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgeworCXN0cnVjdCBsaXN0X2hlYWQgcG93ZXJfY2xpZW50X2NsaXN0OworCXN0 cnVjdCBtdXRleCBwaGFuZGxlX2xvY2s7CisJc3RydWN0IGRldmljZSAqZGV2OworCXUzMiBjdXJy ZW50X3VzZWNhc2VfbmR4OworCXUzMiByZWdfYnVzX2hkbDsKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2Rh dGFfYnVzX2hhbmRsZSBkYXRhX2J1c19oYW5kbGUKKwkJW0RQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NQVhdOworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKK307CisKKy8qKgorICogZHB1 X3Bvd2VyX3Jlc291cmNlX2luaXQoKSAtIGluaXRpYWxpemVzIHRoZSBkcHUgcG93ZXIgaGFuZGxl CisgKiBAcGRldjogICBwbGF0Zm9ybSBkZXZpY2UgdG8gc2VhcmNoIHRoZSBwb3dlciByZXNvdXJj ZXMKKyAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSB0byBzdG9yZSB0aGUgcG93ZXIgcmVzb3VyY2Vz CisgKgorICogUmV0dXJuOiBlcnJvciBjb2RlLgorICovCitpbnQgZHB1X3Bvd2VyX3Jlc291cmNl X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2hh bmRsZSAqcGRhdGEpOworCisvKioKKyAqIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQoKSAtIHJl bGVhc2UgdGhlIGRwdSBwb3dlciBoYW5kbGUKKyAqIEBwZGV2OiAgIHBsYXRmb3JtIGRldmljZSBm b3IgcG93ZXIgcmVzb3VyY2VzCisgKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29udGFpbmluZyB0 aGUgcmVzb3VyY2VzCisgKgorICogUmV0dXJuOiBlcnJvciBjb2RlLgorICovCit2b2lkIGRwdV9w b3dlcl9yZXNvdXJjZV9kZWluaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwlzdHJ1 Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOworCisvKioKKyAqIGRwdV9wb3dlcl9jbGllbnRf Y3JlYXRlKCkgLSBjcmVhdGUgdGhlIGNsaWVudCBvbiBwb3dlciBoYW5kbGUKKyAqIEBwZGF0YTog IHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqIEBjbGllbnRfbmFtZTog bmV3IGNsaWVudCBuYW1lIGZvciByZWdpc3RyYXRpb24KKyAqCisgKiBSZXR1cm46IGVycm9yIGNv ZGUuCisgKi8KK3N0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpkcHVfcG93ZXJfY2xpZW50X2NyZWF0 ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEsCisJY2hhciAqY2xpZW50X25hbWUpOwor CisvKioKKyAqIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveSgpIC0gZGVzdHJveSB0aGUgY2xpZW50 IG9uIHBvd2VyIGhhbmRsZQorICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhl IHJlc291cmNlcworICogQGNsaWVudF9uYW1lOiBuZXcgY2xpZW50IG5hbWUgZm9yIHJlZ2lzdHJh dGlvbgorICoKKyAqIFJldHVybjogbm9uZQorICovCit2b2lkIGRwdV9wb3dlcl9jbGllbnRfZGVz dHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwlzdHJ1Y3QgZHB1X3Bvd2Vy X2NsaWVudCAqY2xpZW50KTsKKworLyoqCisgKiBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCkg LSBlbmFibGUvZGlzYWJsZSB0aGUgcG93ZXIgcmVzb3VyY2VzCisgKiBAcGRhdGE6ICBwb3dlciBo YW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCisgKiBAY2xpZW50OiBjbGllbnQgaW5mb3Jt YXRpb24gdG8gZW5hYmxlL2Rpc2FibGUgaXRzIHZvdGUKKyAqIEBlbmFibGU6IGJvb2xlYW4gcmVx dWVzdCBmb3IgZW5hYmxlL2Rpc2FibGUKKyAqCisgKiBSZXR1cm46IGVycm9yIGNvZGUuCisgKi8K K2ludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpw ZGF0YSwKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwgYm9vbCBlbmFibGUpOwor CisvKioKKyAqIGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoKSAtIHVwZGF0ZSBkYXRh IGJ1cyBzdGF0ZQorICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291 cmNlcworICogQGVuYWJsZTogdGFrZSBlbmFibGUgdnMgZGlzYWJsZSBwYXRoCisgKgorICogUmV0 dXJuOiBlcnJvciBjb2RlLgorICovCitpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRlX3VwZGF0 ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJCQkJCQlib29sIGVuYWJsZSk7 CisKKy8qKgorICogZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgpIC0gc2V0IGRhdGEgYnVz IHF1b3RhIGZvciBwb3dlciBjbGllbnQKKyAqIEBwaGFuZGxlOiAgcG93ZXIgaGFuZGxlIGNvbnRh aW5pbmcgdGhlIHJlc291cmNlcworICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0aW9uIHRvIHNl dCBxdW90YQorICogQGJ1c19jbGllbnQ6IHJlYWwtdGltZSBvciBub24tcmVhbC10aW1lIGJ1cyBj bGllbnQKKyAqIEBidXNfaWQ6IGlkZW50aWZpZXIgb2YgZGF0YSBidXMsIHNlZSBEUFVfUE9XRVJf SEFORExFX0RCVVNfSUQKKyAqIEBhYl9xdW90YTogYXJiaXRyYXRlZCBidXMgYmFuZHdpZHRoCisg KiBAaWJfcXVvdGE6IGluc3RhbnRhbmVvdXMgYnVzIGJhbmR3aWR0aAorICoKKyAqIFJldHVybjog emVybyBpZiBzdWNjZXNzLCBvciBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgZHB1X3Bv d2VyX2RhdGFfYnVzX3NldF9xdW90YShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwK KwkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsCisJCWludCBidXNfY2xpZW50LCB1 MzIgYnVzX2lkLAorCQl1NjQgYWJfcXVvdGEsIHU2NCBpYl9xdW90YSk7CisKKy8qKgorICogZHB1 X3Bvd2VyX2RhdGFfYnVzX2JhbmR3aWR0aF9jdHJsKCkgLSBjb250cm9sIGRhdGEgYnVzIGJhbmR3 aWR0aCBlbmFibGUKKyAqIEBwaGFuZGxlOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJl c291cmNlcworICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0aW9uIHRvIGJhbmR3aWR0aCBjb250 cm9sCisgKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSBiYW5kd2lkdGggZm9yIGRhdGEgYmFzZQor ICoKKyAqIFJldHVybjogbm9uZQorICovCit2b2lkIGRwdV9wb3dlcl9kYXRhX2J1c19iYW5kd2lk dGhfY3RybChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJc3RydWN0IGRwdV9w b3dlcl9jbGllbnQgKnBjbGllbnQsIGludCBlbmFibGUpOworCisvKioKKyAqIGRwdV9wb3dlcl9o YW5kbGVfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBh biBldmVudC4KKyAqCUNsaWVudHMgY2FuIHJlZ2lzdGVyIGZvciBtdWx0aXBsZSBldmVudHMgd2l0 aCBhIHNpbmdsZSByZWdpc3Rlci4KKyAqCUFueSBibG9jayB3aXRoIGFjY2VzcyB0byBwaGFuZGxl IGNhbiByZWdpc3RlciBmb3IgdGhlIGV2ZW50CisgKglub3RpZmljYXRpb24uCisgKiBAcGhhbmRs ZToJcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcworICogQGV2ZW50X3R5cGU6 CWV2ZW50IHR5cGUgdG8gcmVnaXN0ZXI7IHJlZmVyIERQVV9QT1dFUl9IQU5ETEVfRVZFTlRfKgor ICogQGNiX2ZuYzoJcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNy Ogl1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBvbiBldmVudCB0cmlnZ2VyCisgKgor ICogUmV0dXJuOglldmVudCBwb2ludGVyIGlmIHN1Y2Nlc3MsIG9yIGVycm9yIGNvZGUgb3RoZXJ3 aXNlCisgKi8KK3N0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0 ZXJfZXZlbnQoCisJCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQl1MzIgZXZl bnRfdHlwZSwgdm9pZCAoKmNiX2ZuYykodTMyIGV2ZW50X3R5cGUsIHZvaWQgKnVzciksCisJCXZv aWQgKnVzciwgY2hhciAqY2xpZW50X25hbWUpOworLyoqCisgKiBkcHVfcG93ZXJfaGFuZGxlX3Vu cmVnaXN0ZXJfZXZlbnQgLSB1bnJlZ2lzdGVyIGNhbGxiYWNrIGZvciBldmVudChzKQorICogQHBo YW5kbGU6CXBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqIEBldmVudDoJ ZXZlbnQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBwb3dlciBoYW5kbGUgcmVnaXN0ZXIKKyAqLwor dm9pZCBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0IGRwdV9wb3dlcl9o YW5kbGUgKnBoYW5kbGUsCisJCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50KTsKKworLyoq CisgKiBkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUgLSBnZXQgbmFtZSBvZiBnaXZlbiBk YXRhIGJ1cyBpZGVudGlmaWVyCisgKiBAYnVzX2lkOglkYXRhIGJ1cyBpZGVudGlmaWVyCisgKiBS ZXR1cm46CVBvaW50ZXIgdG8gbmFtZSBzdHJpbmcgaWYgc3VjY2VzczsgTlVMTCBvdGhlcndpc2UK KyAqLworY29uc3QgY2hhciAqZHB1X3Bvd2VyX2hhbmRsZV9nZXRfZGJ1c19uYW1lKHUzMiBidXNf aWQpOworCisjZW5kaWYgLyogX0RQVV9QT1dFUl9IQU5ETEVfSF8gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcHVfcG93ZXJfaGFuZGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOWZi YjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMK KysrIC9kZXYvbnVsbApAQCAtMSw2OTQgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE0LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdOiAiIGZtdCwgX19m dW5jX18sIF9fTElORV9fCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxs aW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L29m X2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0 ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2lmZGVmIENPTkZJR19RQ09N X0JVU19TQ0FMSU5HCi0jaW5jbHVkZSA8bGludXgvbXNtLWJ1cy5oPgotI2luY2x1ZGUgPGxpbnV4 L21zbS1idXMtYm9hcmQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L2RwdV9pb191dGlsLmg+ Ci0KLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCi0jaW5jbHVkZSAiZHB1X3RyYWNlLmgi Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkYXRhX2J1c19uYW1lW0RQVV9QT1dFUl9IQU5ETEVfREJV U19JRF9NQVhdID0gewotCVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQ10gPSAicWNvbSxk cHUtZGF0YS1idXMiLAotCVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExDQ10gPSAicWNvbSxk cHUtbGxjYy1idXMiLAotCVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJXSA9ICJxY29tLGRw dS1lYmktYnVzIiwKLX07Ci0KLWNvbnN0IGNoYXIgKmRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNf bmFtZSh1MzIgYnVzX2lkKQotewotCWlmIChidXNfaWQgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNf SURfTUFYKQotCQlyZXR1cm4gZGF0YV9idXNfbmFtZVtidXNfaWRdOwotCi0JcmV0dXJuIE5VTEw7 Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChzdHJ1Y3Qg ZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJdTMyIGV2ZW50X3R5cGUpCi17Ci0Jc3RydWN0 IGRwdV9wb3dlcl9ldmVudCAqZXZlbnQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAm cGhhbmRsZS0+ZXZlbnRfbGlzdCwgbGlzdCkgewotCQlpZiAoZXZlbnQtPmV2ZW50X3R5cGUgJiBl dmVudF90eXBlKQotCQkJZXZlbnQtPmNiX2ZuYyhldmVudF90eXBlLCBldmVudC0+dXNyKTsKLQl9 Ci19Ci0KLXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpkcHVfcG93ZXJfY2xpZW50X2NyZWF0ZSgK LQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwgY2hhciAqY2xpZW50X25hbWUpCi17 Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudDsKLQlzdGF0aWMgdTMyIGlkOwotCi0J aWYgKCFjbGllbnRfbmFtZSB8fCAhcGhhbmRsZSkgewotCQlwcl9lcnIoImNsaWVudCBuYW1lIGlz IG51bGwgb3IgaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7Ci0JfQotCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9wb3dlcl9jbGll bnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Ci0KLQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwotCXN0cmxjcHkoY2xp ZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgTUFYX0NMSUVOVF9OQU1FX0xFTik7Ci0JY2xpZW50LT51 c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKLQljbGllbnQtPmlkID0gaWQ7Ci0JY2xp ZW50LT5hY3RpdmUgPSB0cnVlOwotCXByX2RlYnVnKCJjbGllbnQgJXMgY3JlYXRlZDolcEsgaWQg OiVkXG4iLCBjbGllbnRfbmFtZSwKLQkJY2xpZW50LCBpZCk7Ci0JaWQrKzsKLQlsaXN0X2FkZCgm Y2xpZW50LT5saXN0LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0KTsKLQltdXRleF91bmxv Y2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0KLQlyZXR1cm4gY2xpZW50OwotfQotCi12b2lk IGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRs ZSwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50KQotewotCWlmICghY2xpZW50ICB8 fCAhcGhhbmRsZSkgewotCQlwcl9lcnIoInJlZyBidXMgdm90ZTogaW52YWxpZCBjbGllbnQgaGFu ZGxlXG4iKTsKLQl9IGVsc2UgaWYgKCFjbGllbnQtPmFjdGl2ZSkgewotCQlwcl9lcnIoImRwdSBw b3dlciBkZWluaXQgYWxyZWFkeSBkb25lXG4iKTsKLQkJa2ZyZWUoY2xpZW50KTsKLQl9IGVsc2Ug ewotCQlwcl9kZWJ1ZygiYnVzIHZvdGUgY2xpZW50ICVzIGRlc3Ryb3llZDolcEsgaWQ6JXVcbiIs Ci0JCQljbGllbnQtPm5hbWUsIGNsaWVudCwgY2xpZW50LT5pZCk7Ci0JCW11dGV4X2xvY2soJnBo YW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JCWxpc3RfZGVsX2luaXQoJmNsaWVudC0+bGlzdCk7Ci0J CW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQkJa2ZyZWUoY2xpZW50KTsK LQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORwotCi0jZGVmaW5lIE1BWF9B WElfUE9SVF9DT1VOVCAzCi0KLXN0YXRpYyBpbnQgX2RwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVv dGEoCi0JCXN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cywKLQkJdTY0IGFi X3F1b3RhX3J0LCB1NjQgYWJfcXVvdGFfbnJ0LAotCQl1NjQgaWJfcXVvdGFfcnQsIHU2NCBpYl9x dW90YV9ucnQpCi17Ci0JaW50IG5ld191Y19pZHg7Ci0JdTY0IGFiX3F1b3RhW01BWF9BWElfUE9S VF9DT1VOVF0gPSB7MCwgMH07Ci0JdTY0IGliX3F1b3RhW01BWF9BWElfUE9SVF9DT1VOVF0gPSB7 MCwgMH07Ci0JaW50IHJjOwotCi0JaWYgKHBkYnVzLT5kYXRhX2J1c19oZGwgPCAxKSB7Ci0JCXBy X2VycigiaW52YWxpZCBidXMgaGFuZGxlICVkXG4iLCBwZGJ1cy0+ZGF0YV9idXNfaGRsKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGRidXMtPmFiX3J0ID0gYWJfcXVvdGFfcnQ7Ci0JcGRi dXMtPmliX3J0ID0gaWJfcXVvdGFfcnQ7Ci0JcGRidXMtPmFiX25ydCA9IGFiX3F1b3RhX25ydDsK LQlwZGJ1cy0+aWJfbnJ0ID0gaWJfcXVvdGFfbnJ0OwotCi0JaWYgKHBkYnVzLT5lbmFibGUpIHsK LQkJYWJfcXVvdGFfcnQgPSBtYXhfdCh1NjQsIGFiX3F1b3RhX3J0LAotCQkJCURQVV9QT1dFUl9I QU5ETEVfRU5BQkxFX0JVU19BQl9RVU9UQSk7Ci0JCWliX3F1b3RhX3J0ID0gbWF4X3QodTY0LCBp Yl9xdW90YV9ydCwKLQkJCQlEUFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVPVEEpOwot CQlhYl9xdW90YV9ucnQgPSBtYXhfdCh1NjQsIGFiX3F1b3RhX25ydCwKLQkJCQlEUFVfUE9XRVJf SEFORExFX0VOQUJMRV9CVVNfQUJfUVVPVEEpOwotCQlpYl9xdW90YV9ucnQgPSBtYXhfdCh1NjQs IGliX3F1b3RhX25ydCwKLQkJCQlEUFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVPVEEp OwotCX0gZWxzZSB7Ci0JCWFiX3F1b3RhX3J0ID0gbWluX3QodTY0LCBhYl9xdW90YV9ydCwKLQkJ CQlEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0FCX1FVT1RBKTsKLQkJaWJfcXVvdGFfcnQg PSBtaW5fdCh1NjQsIGliX3F1b3RhX3J0LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9C VVNfSUJfUVVPVEEpOwotCQlhYl9xdW90YV9ucnQgPSBtaW5fdCh1NjQsIGFiX3F1b3RhX25ydCwK LQkJCQlEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0FCX1FVT1RBKTsKLQkJaWJfcXVvdGFf bnJ0ID0gbWluX3QodTY0LCBpYl9xdW90YV9ucnQsCi0JCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNB QkxFX0JVU19JQl9RVU9UQSk7Ci0JfQotCi0JaWYgKCFhYl9xdW90YV9ydCAmJiAhYWJfcXVvdGFf bnJ0ICYmICFpYl9xdW90YV9ydCAmJiAhaWJfcXVvdGFfbnJ0KSAgewotCQluZXdfdWNfaWR4ID0g MDsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJc3RydWN0IG1zbV9idXNfdmVjdG9ycyAqdmVjdCA9 IE5VTEw7Ci0JCXN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICpid190YWJsZSA9Ci0JCQlwZGJ1 cy0+ZGF0YV9idXNfc2NhbGVfdGFibGU7Ci0JCXUzMiBucnRfYXhpX3BvcnRfY250ID0gcGRidXMt Pm5ydF9heGlfcG9ydF9jbnQ7Ci0JCXUzMiB0b3RhbF9heGlfcG9ydF9jbnQgPSBwZGJ1cy0+YXhp X3BvcnRfY250OwotCQl1MzIgcnRfYXhpX3BvcnRfY250ID0gdG90YWxfYXhpX3BvcnRfY250IC0g bnJ0X2F4aV9wb3J0X2NudDsKLQotCQlpZiAoIWJ3X3RhYmxlIHx8ICF0b3RhbF9heGlfcG9ydF9j bnQgfHwKLQkJICAgIHRvdGFsX2F4aV9wb3J0X2NudCA+IE1BWF9BWElfUE9SVF9DT1VOVCkgewot CQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0K LQkJaWYgKHBkYnVzLT5idXNfY2hhbm5lbHMpIHsKLQkJCWliX3F1b3RhX3J0ID0gZGl2X3U2NChp Yl9xdW90YV9ydCwKLQkJCQkJCXBkYnVzLT5idXNfY2hhbm5lbHMpOwotCQkJaWJfcXVvdGFfbnJ0 ID0gZGl2X3U2NChpYl9xdW90YV9ucnQsCi0JCQkJCQlwZGJ1cy0+YnVzX2NoYW5uZWxzKTsKLQkJ fQotCi0JCWlmIChucnRfYXhpX3BvcnRfY250KSB7Ci0KLQkJCWFiX3F1b3RhX3J0ID0gZGl2X3U2 NChhYl9xdW90YV9ydCwgcnRfYXhpX3BvcnRfY250KTsKLQkJCWFiX3F1b3RhX25ydCA9IGRpdl91 NjQoYWJfcXVvdGFfbnJ0LCBucnRfYXhpX3BvcnRfY250KTsKLQotCQkJZm9yIChpID0gMDsgaSA8 IHRvdGFsX2F4aV9wb3J0X2NudDsgaSsrKSB7Ci0JCQkJaWYgKGkgPCBydF9heGlfcG9ydF9jbnQp IHsKLQkJCQkJYWJfcXVvdGFbaV0gPSBhYl9xdW90YV9ydDsKLQkJCQkJaWJfcXVvdGFbaV0gPSBp Yl9xdW90YV9ydDsKLQkJCQl9IGVsc2UgewotCQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhX25y dDsKLQkJCQkJaWJfcXVvdGFbaV0gPSBpYl9xdW90YV9ucnQ7Ci0JCQkJfQotCQkJfQotCQl9IGVs c2UgewotCQkJYWJfcXVvdGFbMF0gPSBkaXZfdTY0KGFiX3F1b3RhX3J0ICsgYWJfcXVvdGFfbnJ0 LAotCQkJCQl0b3RhbF9heGlfcG9ydF9jbnQpOwotCQkJaWJfcXVvdGFbMF0gPSBpYl9xdW90YV9y dCArIGliX3F1b3RhX25ydDsKLQotCQkJZm9yIChpID0gMTsgaSA8IHRvdGFsX2F4aV9wb3J0X2Nu dDsgaSsrKSB7Ci0JCQkJYWJfcXVvdGFbaV0gPSBhYl9xdW90YVswXTsKLQkJCQlpYl9xdW90YVtp XSA9IGliX3F1b3RhWzBdOwotCQkJfQotCQl9Ci0KLQkJbmV3X3VjX2lkeCA9IChwZGJ1cy0+Y3Vy cl9id191Y19pZHggJQotCQkJKGJ3X3RhYmxlLT5udW1fdXNlY2FzZXMgLSAxKSkgKyAxOwotCi0J CWZvciAoaSA9IDA7IGkgPCB0b3RhbF9heGlfcG9ydF9jbnQ7IGkrKykgewotCQkJdmVjdCA9ICZi d190YWJsZS0+dXNlY2FzZVtuZXdfdWNfaWR4XS52ZWN0b3JzW2ldOwotCQkJdmVjdC0+YWIgPSBh Yl9xdW90YVtpXTsKLQkJCXZlY3QtPmliID0gaWJfcXVvdGFbaV07Ci0KLQkJCXByX2RlYnVnKAot CQkJCSIlcyB1Y19pZHg9JWQgJXMgcGF0aCBpZHg9JWQgYWI9JWxsdSBpYj0lbGx1XG4iLAotCQkJ CWJ3X3RhYmxlLT5uYW1lLAotCQkJCW5ld191Y19pZHgsIChpIDwgcnRfYXhpX3BvcnRfY250KSA/ ICJydCIgOiAibnJ0IgotCQkJCSwgaSwgdmVjdC0+YWIsIHZlY3QtPmliKTsKLQkJfQotCX0KLQlw ZGJ1cy0+Y3Vycl9id191Y19pZHggPSBuZXdfdWNfaWR4OwotCXBkYnVzLT5hb19id191Y19pZHgg PSBuZXdfdWNfaWR4OwotCi0JRFBVX0FUUkFDRV9CRUdJTigibXNtX2J1c19zY2FsZV9yZXEiKTsK LQlyYyA9IG1zbV9idXNfc2NhbGVfY2xpZW50X3VwZGF0ZV9yZXF1ZXN0KHBkYnVzLT5kYXRhX2J1 c19oZGwsCi0JCQluZXdfdWNfaWR4KTsKLQlEUFVfQVRSQUNFX0VORCgibXNtX2J1c19zY2FsZV9y ZXEiKTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IGRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVv dGEoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCXN0cnVjdCBkcHVfcG93ZXJf Y2xpZW50ICpwY2xpZW50LAotCQlpbnQgYnVzX2NsaWVudCwgdTMyIGJ1c19pZCwKLQkJdTY0IGFi X3F1b3RhLCB1NjQgaWJfcXVvdGEpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQl1NjQgdG90 YWxfYWJfcnQgPSAwLCB0b3RhbF9pYl9ydCA9IDA7Ci0JdTY0IHRvdGFsX2FiX25ydCA9IDAsIHRv dGFsX2liX25ydCA9IDA7Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudDsKLQotCWlm ICghcGhhbmRsZSB8fCAhcGNsaWVudCB8fAotCQkJYnVzX2NsaWVudCA+PSBEUFVfUE9XRVJfSEFO RExFX0RBVEFfQlVTX0NMSUVOVF9NQVggfHwKLQkJCWJ1c19pZCA+PSBEUFVfUE9XRVJfSEFORExF X0RCVVNfSURfTUFYKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsK LQotCXBjbGllbnQtPmFiW2J1c19jbGllbnRdID0gYWJfcXVvdGE7Ci0JcGNsaWVudC0+aWJbYnVz X2NsaWVudF0gPSBpYl9xdW90YTsKLQl0cmFjZV9kcHVfcGVyZl91cGRhdGVfYnVzKGJ1c19jbGll bnQsIGFiX3F1b3RhLCBpYl9xdW90YSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwg JnBoYW5kbGUtPnBvd2VyX2NsaWVudF9jbGlzdCwgbGlzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwg RFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYOyBpKyspIHsKLQkJCWlmIChpID09 IERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCkgewotCQkJCXRvdGFsX2FiX25y dCArPSBjbGllbnQtPmFiW2ldOwotCQkJCXRvdGFsX2liX25ydCArPSBjbGllbnQtPmliW2ldOwot CQkJfSBlbHNlIHsKLQkJCQl0b3RhbF9hYl9ydCArPSBjbGllbnQtPmFiW2ldOwotCQkJCXRvdGFs X2liX3J0ID0gbWF4KHRvdGFsX2liX3J0LCBjbGllbnQtPmliW2ldKTsKLQkJCX0KLQkJfQotCX0K LQotCWlmIChwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbYnVzX2lkXS5kYXRhX2J1c19oZGwpCi0J CXJjID0gX2RwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoCi0JCQkmcGhhbmRsZS0+ZGF0YV9i dXNfaGFuZGxlW2J1c19pZF0sCi0JCQl0b3RhbF9hYl9ydCwgdG90YWxfYWJfbnJ0LAotCQkJdG90 YWxfaWJfcnQsIHRvdGFsX2liX25ydCk7Ci0KLQltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5k bGVfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9kYXRh X2J1c191bnJlZ2lzdGVyKAotCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRi dXMpCi17Ci0JaWYgKHBkYnVzLT5kYXRhX2J1c19oZGwpIHsKLQkJbXNtX2J1c19zY2FsZV91bnJl Z2lzdGVyX2NsaWVudChwZGJ1cy0+ZGF0YV9idXNfaGRsKTsKLQkJcGRidXMtPmRhdGFfYnVzX2hk bCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRwdV9wb3dlcl9kYXRhX2J1c19wYXJzZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCXN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFu ZGxlICpwZGJ1cywgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGU7Ci0JaW50IHJjID0gMDsKLQlpbnQgcGF0aHM7Ci0KLQlwZGJ1cy0+YnVzX2NoYW5uZWxzID0g MTsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLAotCQkicWNv bSxkcHUtZHJhbS1jaGFubmVscyIsICZwZGJ1cy0+YnVzX2NoYW5uZWxzKTsKLQlpZiAocmMpIHsK LQkJcHJfZGVidWcoIm51bWJlciBvZiBjaGFubmVscyBwcm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4i KTsKLQkJcmMgPSAwOwotCX0KLQotCXBkYnVzLT5ucnRfYXhpX3BvcnRfY250ID0gMDsKLQlyYyA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLAotCQkJInFjb20sZHB1LW51 bS1ucnQtcGF0aHMiLAotCQkJJnBkYnVzLT5ucnRfYXhpX3BvcnRfY250KTsKLQlpZiAocmMpIHsK LQkJcHJfZGVidWcoIm51bWJlciBvZiBheGkgcG9ydCBwcm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4i KTsKLQkJcmMgPSAwOwotCX0KLQotCW5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwZGV2LT5k ZXYub2Zfbm9kZSwgbmFtZSk7Ci0JaWYgKG5vZGUpIHsKLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihub2RlLAotCQkJCSJxY29tLG1zbS1idXMsbnVtLXBhdGhzIiwgJnBhdGhzKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIkVycm9yLiBxY29tLG1zbS1idXMsbnVtLXBhdGhzIG5vdCBmb3Vu ZFxuIik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQkJcGRidXMtPmF4aV9wb3J0X2NudCA9IHBhdGhz OwotCi0JCXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSA9Ci0JCQkJbXNtX2J1c19wZGF0YV9m cm9tX25vZGUocGRldiwgbm9kZSk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChwZGJ1cy0+ZGF0YV9i dXNfc2NhbGVfdGFibGUpKSB7Ci0JCQlwcl9lcnIoInJlZyBidXMgaGFuZGxlIHBhcnNpbmcgZmFp bGVkXG4iKTsKLQkJCXJjID0gUFRSX0VSUihwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUpOwot CQkJaWYgKCFwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUpCi0JCQkJcmMgPSAtRUlOVkFMOwot CQkJZ290byBlbmQ7Ci0JCX0KLQkJcGRidXMtPmRhdGFfYnVzX2hkbCA9IG1zbV9idXNfc2NhbGVf cmVnaXN0ZXJfY2xpZW50KAotCQkJCXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSk7Ci0JCWlm ICghcGRidXMtPmRhdGFfYnVzX2hkbCkgewotCQkJcHJfZXJyKCJkYXRhX2J1c19jbGllbnQgcmVn aXN0ZXIgZmFpbGVkXG4iKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0J CXByX2RlYnVnKCJyZWdpc3RlciAlcyBkYXRhX2J1c19oZGw9JXhcbiIsIG5hbWUsCi0JCQkJcGRi dXMtPmRhdGFfYnVzX2hkbCk7Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRwdV9wb3dlcl9yZWdfYnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs Ci0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9u b2RlICpub2RlOwotCXN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICpidXNfc2NhbGVfdGFibGU7 Ci0JaW50IHJjID0gMDsKLQotCW5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwZGV2LT5kZXYu b2Zfbm9kZSwgInFjb20sZHB1LXJlZy1idXMiKTsKLQlpZiAobm9kZSkgewotCQlidXNfc2NhbGVf dGFibGUgPSBtc21fYnVzX3BkYXRhX2Zyb21fbm9kZShwZGV2LCBub2RlKTsKLQkJaWYgKElTX0VS Ul9PUl9OVUxMKGJ1c19zY2FsZV90YWJsZSkpIHsKLQkJCXByX2VycigicmVnIGJ1cyBoYW5kbGUg cGFyc2luZyBmYWlsZWRcbiIpOwotCQkJcmMgPSBQVFJfRVJSKGJ1c19zY2FsZV90YWJsZSk7Ci0J CQlpZiAoIWJ1c19zY2FsZV90YWJsZSkKLQkJCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVuZDsK LQkJfQotCQlwaGFuZGxlLT5yZWdfYnVzX2hkbCA9IG1zbV9idXNfc2NhbGVfcmVnaXN0ZXJfY2xp ZW50KAotCQkJICAgICAgYnVzX3NjYWxlX3RhYmxlKTsKLQkJaWYgKCFwaGFuZGxlLT5yZWdfYnVz X2hkbCkgewotCQkJcHJfZXJyKCJyZWdfYnVzX2NsaWVudCByZWdpc3RlciBmYWlsZWRcbiIpOwot CQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJcHJfZGVidWcoInJlZ2lzdGVy IHJlZ19idXNfaGRsPSV4XG4iLCBwaGFuZGxlLT5yZWdfYnVzX2hkbCk7Ci0JfQotCi1lbmQ6Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfcG93ZXJfcmVnX2J1c191bnJlZ2lzdGVy KHUzMiByZWdfYnVzX2hkbCkKLXsKLQlpZiAocmVnX2J1c19oZGwpCi0JCW1zbV9idXNfc2NhbGVf dW5yZWdpc3Rlcl9jbGllbnQocmVnX2J1c19oZGwpOwotfQotCi1pbnQgZHB1X3Bvd2VyX2RhdGFf YnVzX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJCQkJ CQlib29sIGVuYWJsZSkKLXsKLQlpbnQgaTsKLQotCWlmICghcGhhbmRsZSkgewotCQlwcl9lcnIo ImludmFsaWQgcGFyYW1cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmb3IgKGkgPSBE UFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQzsKLQkJCWkgPCBEUFVfUE9XRVJfSEFORExFX0RC VVNfSURfTUFYOyBpKyspCi0JCXBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXS5lbmFibGUgPSBl bmFibGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNf dXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cywKLQkJCQkJCQli b29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JcGRidXMtPmVuYWJsZSA9IGVuYWJsZTsK LQotCWlmIChwZGJ1cy0+ZGF0YV9idXNfaGRsKQotCQlyYyA9IF9kcHVfcG93ZXJfZGF0YV9idXNf c2V0X3F1b3RhKHBkYnVzLCBwZGJ1cy0+YWJfcnQsCi0JCQkJcGRidXMtPmFiX25ydCwgcGRidXMt PmliX3J0LCBwZGJ1cy0+aWJfbnJ0KTsKLQotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8g c2V0IGRhdGEgYnVzIHZvdGUgcmM9JWQgZW5hYmxlOiVkXG4iLAotCQkJCQkJCXJjLCBlbmFibGUp OwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9wb3dlcl9yZWdfYnVzX3VwZGF0 ZSh1MzIgcmVnX2J1c19oZGwsIHUzMiB1c2VjYXNlX25keCkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKHJlZ19idXNfaGRsKQotCQlyYyA9IG1zbV9idXNfc2NhbGVfY2xpZW50X3VwZGF0ZV9yZXF1 ZXN0KHJlZ19idXNfaGRsLAotCQkJCQkJCQl1c2VjYXNlX25keCk7Ci0JaWYgKHJjKQotCQlwcl9l cnIoImZhaWxlZCB0byBzZXQgcmVnIGJ1cyB2b3RlIHJjPSVkXG4iLCByYyk7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0jZWxzZQotc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNfcGFyc2Uoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5k bGUgKnBkYnVzLCBjb25zdCBjaGFyICpuYW1lKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMg dm9pZCBkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdpc3RlcigKLQkJc3RydWN0IGRwdV9wb3dlcl9k YXRhX2J1c19oYW5kbGUgKnBkYnVzKQotewotfQotCi1pbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3Nl dF9xdW90YShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJc3RydWN0IGRwdV9w b3dlcl9jbGllbnQgKnBjbGllbnQsCi0JCWludCBidXNfY2xpZW50LCB1MzIgYnVzX2lkLAotCQl1 NjQgYWJfcXVvdGEsIHU2NCBpYl9xdW90YSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAot CXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQotewotCXJldHVybiAwOwotfQotCi1z dGF0aWMgdm9pZCBkcHVfcG93ZXJfcmVnX2J1c191bnJlZ2lzdGVyKHUzMiByZWdfYnVzX2hkbCkK LXsKLX0KLQotc3RhdGljIGludCBkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUodTMyIHJlZ19idXNf aGRsLCB1MzIgdXNlY2FzZV9uZHgpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1 X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAq cGRidXMsCi0JCQkJCQkJYm9vbCBlbmFibGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkcHVf cG93ZXJfZGF0YV9idXNfc3RhdGVfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFu ZGxlLAotCQkJCQkJCWJvb2wgZW5hYmxlKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLWlu dCBkcHVfcG93ZXJfcmVzb3VyY2VfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAot CXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQotewotCWludCByYyA9IDAsIGk7Ci0K LQlpZiAoIXBoYW5kbGUgfHwgIXBkZXYpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0IHBhcmFt XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0JcGhhbmRsZS0+ZGV2ID0g JnBkZXYtPmRldjsKLQotCXJjID0gZHB1X3Bvd2VyX3JlZ19idXNfcGFyc2UocGRldiwgcGhhbmRs ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigicmVnaXN0ZXIgYnVzIHBhcnNlIGZhaWxlZCByYz0l ZFxuIiwgcmMpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlmb3IgKGkgPSBEUFVfUE9XRVJfSEFORExF X0RCVVNfSURfTU5PQzsKLQkJCWkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKysp IHsKLQkJcmMgPSBkcHVfcG93ZXJfZGF0YV9idXNfcGFyc2UocGRldiwKLQkJCQkmcGhhbmRsZS0+ ZGF0YV9idXNfaGFuZGxlW2ldLAotCQkJCWRhdGFfYnVzX25hbWVbaV0pOwotCQlpZiAocmMpIHsK LQkJCXByX2VycigicmVnaXN0ZXIgZGF0YSBidXMgcGFyc2UgZmFpbGVkIGlkPSVkIHJjPSVkXG4i LAotCQkJCQlpLCByYyk7Ci0JCQlnb3RvIGRhdGFfYnVzX2VycjsKLQkJfQotCX0KLQotCUlOSVRf TElTVF9IRUFEKCZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QpOwotCUlOSVRfTElTVF9IRUFE KCZwaGFuZGxlLT5ldmVudF9saXN0KTsKLQotCW11dGV4X2luaXQoJnBoYW5kbGUtPnBoYW5kbGVf bG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci0KLWRhdGFfYnVzX2VycjoKLQlmb3IgKGktLTsgaSA+PSAw OyBpLS0pCi0JCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZwaGFuZGxlLT5kYXRhX2J1 c19oYW5kbGVbaV0pOwotCWRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIocGhhbmRsZS0+cmVn X2J1c19oZGwpOwotZW5kOgotCXJldHVybiByYzsKLX0KLQotdm9pZCBkcHVfcG93ZXJfcmVzb3Vy Y2VfZGVpbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0Jc3RydWN0IGRwdV9wb3dl cl9oYW5kbGUgKnBoYW5kbGUpCi17Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmN1cnJfY2xp ZW50LCAqbmV4dF9jbGllbnQ7Ci0Jc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqY3Vycl9ldmVudCwg Km5leHRfZXZlbnQ7Ci0JaW50IGk7Ci0KLQlpZiAoIXBoYW5kbGUgfHwgIXBkZXYpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0IHBhcmFtXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW11dGV4X2xv Y2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1 cnJfY2xpZW50LCBuZXh0X2NsaWVudCwKLQkJCSZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3Qs IGxpc3QpIHsKLQkJcHJfZXJyKCJjbGllbmQ6JXMtJWQgc3RpbGwgcmVnaXN0ZXJlZCB3aXRoIHJl ZmNvdW50OiVkXG4iLAotCQkJCWN1cnJfY2xpZW50LT5uYW1lLCBjdXJyX2NsaWVudC0+aWQsCi0J CQkJY3Vycl9jbGllbnQtPnJlZmNvdW50KTsKLQkJY3Vycl9jbGllbnQtPmFjdGl2ZSA9IGZhbHNl OwotCQlsaXN0X2RlbCgmY3Vycl9jbGllbnQtPmxpc3QpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShjdXJyX2V2ZW50LCBuZXh0X2V2ZW50LAotCQkJJnBoYW5kbGUtPmV2ZW50X2xp c3QsIGxpc3QpIHsKLQkJcHJfZXJyKCJldmVudDolZCwgY2xpZW50OiVzIHN0aWxsIHJlZ2lzdGVy ZWRcbiIsCi0JCQkJY3Vycl9ldmVudC0+ZXZlbnRfdHlwZSwKLQkJCQljdXJyX2V2ZW50LT5jbGll bnRfbmFtZSk7Ci0JCWN1cnJfZXZlbnQtPmFjdGl2ZSA9IGZhbHNlOwotCQlsaXN0X2RlbCgmY3Vy cl9ldmVudC0+bGlzdCk7Ci0JfQotCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2Nr KTsKLQotCWZvciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKysp Ci0JCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZwaGFuZGxlLT5kYXRhX2J1c19oYW5k bGVbaV0pOwotCi0JZHB1X3Bvd2VyX3JlZ19idXNfdW5yZWdpc3RlcihwaGFuZGxlLT5yZWdfYnVz X2hkbCk7Ci19Ci0KLWludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93 ZXJfaGFuZGxlICpwaGFuZGxlLAotCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LCBi b29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwLCBpOwotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwot CXUzMiBtYXhfdXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0RJU0FCTEUsIHByZXZfdXNlY2FzZV9u ZHg7Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudDsKLQotCWlmICghcGhhbmRsZSB8 fCAhcGNsaWVudCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXQgYXJndW1lbnRcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2sp OwotCWlmIChlbmFibGUpCi0JCXBjbGllbnQtPnJlZmNvdW50Kys7Ci0JZWxzZSBpZiAocGNsaWVu dC0+cmVmY291bnQpCi0JCXBjbGllbnQtPnJlZmNvdW50LS07Ci0KLQlpZiAocGNsaWVudC0+cmVm Y291bnQpCi0JCXBjbGllbnQtPnVzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9MT1c7Ci0JZWxzZQot CQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKLQotCWxpc3RfZm9y X2VhY2hfZW50cnkoY2xpZW50LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7 Ci0JCWlmIChjbGllbnQtPnVzZWNhc2VfbmR4IDwgVk9URV9JTkRFWF9NQVggJiYKLQkJICAgIGNs aWVudC0+dXNlY2FzZV9uZHggPiBtYXhfdXNlY2FzZV9uZHgpCi0JCQltYXhfdXNlY2FzZV9uZHgg PSBjbGllbnQtPnVzZWNhc2VfbmR4OwotCX0KLQotCWlmIChwaGFuZGxlLT5jdXJyZW50X3VzZWNh c2VfbmR4ICE9IG1heF91c2VjYXNlX25keCkgewotCQljaGFuZ2VkID0gdHJ1ZTsKLQkJcHJldl91 c2VjYXNlX25keCA9IHBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHg7Ci0JCXBoYW5kbGUtPmN1 cnJlbnRfdXNlY2FzZV9uZHggPSBtYXhfdXNlY2FzZV9uZHg7Ci0JfQotCi0JcHJfZGVidWcoIiVw UzogY2hhbmdlZD0lZCBjdXJyZW50IGlkeD0lZCByZXF1ZXN0IGNsaWVudCAlcyBpZDoldSBlbmFi bGU6JWQgcmVmY291bnQ6JWRcbiIsCi0JCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgY2hh bmdlZCwgbWF4X3VzZWNhc2VfbmR4LAotCQlwY2xpZW50LT5uYW1lLCBwY2xpZW50LT5pZCwgZW5h YmxlLCBwY2xpZW50LT5yZWZjb3VudCk7Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCWdvdG8gZW5kOwot Ci0JaWYgKGVuYWJsZSkgewotCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRs ZSwKLQkJCQlEUFVfUE9XRVJfRVZFTlRfUFJFX0VOQUJMRSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8 IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykgewotCQkJcmMgPSBkcHVfcG93ZXJf ZGF0YV9idXNfdXBkYXRlKAotCQkJCQkmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLCBlbmFi bGUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGRhdGEgYnVzIHZv dGUgaWQ9JWQgcmM9JWRcbiIsCi0JCQkJCQlpLCByYyk7Ci0JCQkJZ290byBkYXRhX2J1c19oZGxf ZXJyOwotCQkJfQotCQl9Ci0KLQkJcmMgPSBkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUocGhhbmRs ZS0+cmVnX2J1c19oZGwsCi0JCQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoImZhaWxlZCB0byBzZXQgcmVnIGJ1cyB2b3RlIHJjPSVkXG4iLCByYyk7Ci0JCQln b3RvIHJlZ19idXNfaGRsX2VycjsKLQkJfQotCi0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xv Y2tlZChwaGFuZGxlLAotCQkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRSk7Ci0KLQl9IGVs c2UgewotCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwKLQkJCQlEUFVf UE9XRVJfRVZFTlRfUFJFX0RJU0FCTEUpOwotCi0JCWRwdV9wb3dlcl9yZWdfYnVzX3VwZGF0ZShw aGFuZGxlLT5yZWdfYnVzX2hkbCwKLQkJCQkJCQltYXhfdXNlY2FzZV9uZHgpOwotCi0JCWZvciAo aSA9IDAgOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKQotCQkJZHB1X3Bv d2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLAotCQkJCQll bmFibGUpOwotCi0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAotCQkJ CURQVV9QT1dFUl9FVkVOVF9QT1NUX0RJU0FCTEUpOwotCX0KLQotZW5kOgotCW11dGV4X3VubG9j aygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci0KLXJlZ19idXNfaGRsX2Vy cjoKLQlmb3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykK LQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ld LCAwKTsKLWRhdGFfYnVzX2hkbF9lcnI6Ci0JcGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCA9 IHByZXZfdXNlY2FzZV9uZHg7Ci0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2sp OwotCXJldHVybiByYzsKLX0KLQotc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZHB1X3Bvd2VyX2hh bmRsZV9yZWdpc3Rlcl9ldmVudCgKLQkJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUs Ci0JCXUzMiBldmVudF90eXBlLCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwgdm9pZCAq dXNyKSwKLQkJdm9pZCAqdXNyLCBjaGFyICpjbGllbnRfbmFtZSkKLXsKLQlzdHJ1Y3QgZHB1X3Bv d2VyX2V2ZW50ICpldmVudDsKLQotCWlmICghcGhhbmRsZSkgewotCQlwcl9lcnIoImludmFsaWQg cG93ZXIgaGFuZGxlXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfSBlbHNlIGlm ICghY2JfZm5jIHx8ICFldmVudF90eXBlKSB7Ci0JCXByX2Vycigibm8gY2FsbGJhY2sgZm5jIG9y IGV2ZW50IHR5cGVcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlldmVu dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfcG93ZXJfZXZlbnQpLCBHRlBfS0VSTkVMKTsK LQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWV2ZW50LT5ldmVu dF90eXBlID0gZXZlbnRfdHlwZTsKLQlldmVudC0+Y2JfZm5jID0gY2JfZm5jOwotCWV2ZW50LT51 c3IgPSB1c3I7Ci0Jc3RybGNweShldmVudC0+Y2xpZW50X25hbWUsIGNsaWVudF9uYW1lLCBNQVhf Q0xJRU5UX05BTUVfTEVOKTsKLQlldmVudC0+YWN0aXZlID0gdHJ1ZTsKLQotCW11dGV4X2xvY2so JnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmcGhhbmRs ZS0+ZXZlbnRfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwot Ci0JcmV0dXJuIGV2ZW50OwotfQotCi12b2lkIGRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9l dmVudCgKLQkJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCXN0cnVjdCBkcHVf cG93ZXJfZXZlbnQgKmV2ZW50KQotewotCWlmICghcGhhbmRsZSB8fCAhZXZlbnQpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIHBoYW5kbGUgb3IgZXZlbnRcbiIpOwotCX0gZWxzZSBpZiAoIWV2ZW50LT5h Y3RpdmUpIHsKLQkJcHJfZXJyKCJwb3dlciBoYW5kbGUgZGVpbml0IGFscmVhZHkgZG9uZVxuIik7 Ci0JCWtmcmVlKGV2ZW50KTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFu ZGxlX2xvY2spOwotCQlsaXN0X2RlbF9pbml0KCZldmVudC0+bGlzdCk7Ci0JCW11dGV4X3VubG9j aygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQkJa2ZyZWUoZXZlbnQpOwotCX0KLX0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDlhNmQ0YjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJf aGFuZGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQVV9QT1dFUl9IQU5ETEVfSF8KLSNkZWZp bmUgX0RQVV9QT1dFUl9IQU5ETEVfSF8KLQotI2RlZmluZSBNQVhfQ0xJRU5UX05BTUVfTEVOIDEy OAotCi0jZGVmaW5lIERQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19BQl9RVU9UQQkwCi0jZGVm aW5lIERQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEJMAotI2RlZmluZSBEUFVf UE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVPVEEJMTYwMDAwMDAwMAotI2RlZmluZSBEUFVf UE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0lCX1FVT1RBCTAKLQotI2luY2x1ZGUgPGxpbnV4L2Rw dV9pb191dGlsLmg+Ci0KLS8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSBwb3dlciBo YW5kbGVyIGRpc2FibGUgKi8KLSNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxFCTB4 MQotCi0vKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGRpc2Fi bGUgKi8KLSNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRQkweDIKLQotLyogZXZl bnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlIHBvd2VyIGhhbmRsZXIgZW5hYmxlICovCi0jZGVm aW5lIERQVV9QT1dFUl9FVkVOVF9QUkVfRU5BQkxFCTB4NAotCi0vKiBldmVudCB3aWxsIGJlIHRy aWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGVuYWJsZSAqLwotI2RlZmluZSBEUFVfUE9XRVJf RVZFTlRfUE9TVF9FTkFCTEUJMHg4Ci0KLS8qKgotICogbWRzc19idXNfdm90ZV90eXBlOiByZWdp c3RlciBidXMgdm90ZSB0eXBlCi0gKiBWT1RFX0lOREVYX0RJU0FCTEU6IHJlbW92ZXMgdGhlIGNs aWVudCB2b3RlCi0gKiBWT1RFX0lOREVYX0xPVzoga2VlcHMgdGhlIGxvd2VzdCB2b3RlIGZvciBy ZWdpc3RlciBidXMKLSAqIFZPVEVfSU5ERVhfTUFYOiBpbnZhbGlkCi0gKi8KLWVudW0gbWRzc19i dXNfdm90ZV90eXBlIHsKLQlWT1RFX0lOREVYX0RJU0FCTEUsCi0JVk9URV9JTkRFWF9MT1csCi0J Vk9URV9JTkRFWF9NQVgsCi19OwotCi0vKioKLSAqIGVudW0gZHB1X3Bvd2VyX2hhbmRsZV9kYXRh X2J1c19jbGllbnQgLSB0eXBlIG9mIGF4aSBidXMgY2xpZW50cwotICogQERQVV9QT1dFUl9IQU5E TEVfREFUQV9CVVNfQ0xJRU5UX1JUOiBjb3JlIHJlYWwtdGltZSBidXMgY2xpZW50Ci0gKiBARFBV X1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJUOiBjb3JlIG5vbi1yZWFsLXRpbWUgYnVz IGNsaWVudAotICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWDogbWF4aW11 bSBudW1iZXIgb2YgYnVzIGNsaWVudCB0eXBlCi0gKi8KLWVudW0gZHB1X3Bvd2VyX2hhbmRsZV9k YXRhX2J1c19jbGllbnQgewotCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JULAot CURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCwKLQlEUFVfUE9XRVJfSEFORExF X0RBVEFfQlVTX0NMSUVOVF9NQVgKLX07Ci0KLS8qKgotICogZW51bSBEUFVfUE9XRVJfSEFORExF X0RCVVNfSUQgLSBkYXRhIGJ1cyBpZGVudGlmaWVyCi0gKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVT X0lEX01OT0M6IERQVS9NTk9DIGRhdGEgYnVzCi0gKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lE X0xMQ0M6IE1OT0MvTExDQyBkYXRhIGJ1cwotICogQERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9F Qkk6IExMQ0MvRUJJIGRhdGEgYnVzCi0gKi8KLWVudW0gRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lE IHsKLQlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQywKLQlEUFVfUE9XRVJfSEFORExFX0RC VVNfSURfTExDQywKLQlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJLAotCURQVV9QT1dFUl9I QU5ETEVfREJVU19JRF9NQVgsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcG93ZXJfY2xpZW50 OiBzdG9yZXMgdGhlIHBvd2VyIGNsaWVudCBmb3IgZHB1IGRyaXZlcgotICogQG5hbWU6CW5hbWUg b2YgdGhlIGNsaWVudAotICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHJlZ3MgYnVzIHZvdGUgdHlw ZQotICogQHJlZmNvdW50OgljdXJyZW50IHJlZmNvdW50IGlmIG11bHRpcGxlIG1vZHVsZXMgYXJl IHVzaW5nIHNhbWUKLSAqICAgICAgICAgICAgICBzYW1lIGNsaWVudCBmb3IgZW5hYmxlL2Rpc2Fi bGUuIFBvd2VyIG1vZHVsZSB3aWxsCi0gKiAgICAgICAgICAgICAgYWdncmVnYXRlIHRoZSByZWZj b3VudCBhbmQgdm90ZSBhY2NvcmRpbmdseSBmb3IgdGhpcwotICogICAgICAgICAgICAgIGNsaWVu dC4KLSAqIEBpZDoJCWFzc2lnbmVkIGR1cmluZyBjcmVhdGUuIGhlbHBzIGZvciBkZWJ1Z2dpbmcu Ci0gKiBAbGlzdDoJbGlzdCB0byBhdHRhY2ggcG93ZXIgaGFuZGxlIG1hc3RlciBsaXN0Ci0gKiBA YWI6ICAgICAgICAgYXJiaXRyYXRlZCBiYW5kd2lkdGggZm9yIGVhY2ggYnVzIGNsaWVudAotICog QGliOiAgICAgICAgIGluc3RhbnRhbmVvdXMgYmFuZHdpZHRoIGZvciBlYWNoIGJ1cyBjbGllbnQK LSAqIEBhY3RpdmU6CWluaWRjYXRlcyB0aGUgc3RhdGUgb2YgZHB1IHBvd2VyIGhhbmRsZQotICov Ci1zdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCB7Ci0JY2hhciBuYW1lW01BWF9DTElFTlRfTkFNRV9M RU5dOwotCXNob3J0IHVzZWNhc2VfbmR4OwotCXNob3J0IHJlZmNvdW50OwotCXUzMiBpZDsKLQlz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdTY0IGFiW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNf Q0xJRU5UX01BWF07Ci0JdTY0IGliW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01B WF07Ci0JYm9vbCBhY3RpdmU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcG93ZXJfZGF0YV9o YW5kbGU6IHBvd2VyIGhhbmRsZSBzdHJ1Y3QgZm9yIGRhdGEgYnVzCi0gKiBAZGF0YV9idXNfc2Nh bGVfdGFibGU6IHBvaW50ZXIgdG8gYnVzIHNjYWxpbmcgdGFibGUKLSAqIEBkYXRhX2J1c19oZGw6 IGN1cnJlbnQgZGF0YSBidXMgaGFuZGxlCi0gKiBAYXhpX3BvcnRfY250OiBudW1iZXIgb2YgcnQg YXhpIHBvcnRzCi0gKiBAbnJ0X2F4aV9wb3J0X2NudDogbnVtYmVyIG9mIG5ydCBheGkgcG9ydHMK LSAqIEBidXNfY2hhbm5lbHM6IG51bWJlciBvZiBtZW1vcnkgYnVzIGNoYW5uZWxzCi0gKiBAY3Vy cl9id191Y19pZHg6IGN1cnJlbnQgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBidXMKLSAqIEBhb19i d191Y19pZHg6IGFjdGl2ZSBvbmx5IHVzZSBjYXNlIGluZGV4IG9mIGRhdGEgYnVzCi0gKiBAYWJf cnQ6IHJlYWx0aW1lIGFiIHF1b3RhCi0gKiBAaWJfcnQ6IHJlYWx0aW1lIGliIHF1b3RhCi0gKiBA YWJfbnJ0OiBub24tcmVhbHRpbWUgYWIgcXVvdGEKLSAqIEBpYl9ucnQ6IG5vbi1yZWFsdGltZSBp YiBxdW90YQotICogQGVuYWJsZTogdHJ1ZSBpZiBidXMgaXMgZW5hYmxlZAotICovCi1zdHJ1Y3Qg ZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSB7Ci0Jc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEg KmRhdGFfYnVzX3NjYWxlX3RhYmxlOwotCXUzMiBkYXRhX2J1c19oZGw7Ci0JdTMyIGF4aV9wb3J0 X2NudDsKLQl1MzIgbnJ0X2F4aV9wb3J0X2NudDsKLQl1MzIgYnVzX2NoYW5uZWxzOwotCXUzMiBj dXJyX2J3X3VjX2lkeDsKLQl1MzIgYW9fYndfdWNfaWR4OwotCXU2NCBhYl9ydDsKLQl1NjQgaWJf cnQ7Ci0JdTY0IGFiX25ydDsKLQl1NjQgaWJfbnJ0OwotCWJvb2wgZW5hYmxlOwotfTsKLQotLyoK LSAqIHN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgLSBsb2NhbCBldmVudCByZWdpc3RyYXRpb24gc3Ry dWN0dXJlCi0gKiBAY2xpZW50X25hbWU6IG5hbWUgb2YgdGhlIGNsaWVudCByZWdpc3RlcmluZwot ICogQGNiX2ZuYzogcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAdXNy OiB1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBldmVudCB0cmlnZ2VyCi0gKiBAZXZl bnQ6IHJlZmVyIHRvIERQVV9QT1dFUl9IQU5ETEVfRVZFTlRfKgotICogQGxpc3Q6IGxpc3QgdG8g YXR0YWNoIGV2ZW50IG1hc3RlciBsaXN0Ci0gKiBAYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIHN0YXRl IG9mIGRwdSBwb3dlciBoYW5kbGUKLSAqLwotc3RydWN0IGRwdV9wb3dlcl9ldmVudCB7Ci0JY2hh ciBjbGllbnRfbmFtZVtNQVhfQ0xJRU5UX05BTUVfTEVOXTsKLQl2b2lkICgqY2JfZm5jKSh1MzIg ZXZlbnRfdHlwZSwgdm9pZCAqdXNyKTsKLQl2b2lkICp1c3I7Ci0JdTMyIGV2ZW50X3R5cGU7Ci0J c3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWJvb2wgYWN0aXZlOwotfTsKLQotLyoqCi0gKiBzdHJ1 Y3QgZHB1X3Bvd2VyX2hhbmRsZTogcG93ZXIgaGFuZGxlIG1haW4gc3RydWN0Ci0gKiBAY2xpZW50 X2NsaXN0OiBtYXN0ZXIgbGlzdCB0byBzdG9yZSBhbGwgY2xpZW50cwotICogQHBoYW5kbGVfbG9j azogbG9jayB0byBzeW5jaHJvbml6ZSB0aGUgZW5hYmxlL2Rpc2FibGUKLSAqIEBkZXY6IHBvaW50 ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQotICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHVzZWNhc2Ug aW5kZXgKLSAqIEByZWdfYnVzX2hkbDogY3VycmVudCByZWdpc3RlciBidXMgaGFuZGxlCi0gKiBA ZGF0YV9idXNfaGFuZGxlOiBjb250ZXh0IHN0cnVjdHVyZSBmb3IgZGF0YSBidXMgY29udHJvbAot ICogQGV2ZW50X2xpc3Q6IGN1cnJlbnQgcG93ZXIgaGFuZGxlIGV2ZW50IGxpc3QKLSAqLwotc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgewotCXN0cnVjdCBsaXN0X2hlYWQgcG93ZXJfY2xpZW50X2Ns aXN0OwotCXN0cnVjdCBtdXRleCBwaGFuZGxlX2xvY2s7Ci0Jc3RydWN0IGRldmljZSAqZGV2Owot CXUzMiBjdXJyZW50X3VzZWNhc2VfbmR4OwotCXUzMiByZWdfYnVzX2hkbDsKLQlzdHJ1Y3QgZHB1 X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSBkYXRhX2J1c19oYW5kbGUKLQkJW0RQVV9QT1dFUl9IQU5E TEVfREJVU19JRF9NQVhdOwotCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKLX07Ci0KLS8q KgotICogZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoKSAtIGluaXRpYWxpemVzIHRoZSBkcHUgcG93 ZXIgaGFuZGxlCi0gKiBAcGRldjogICBwbGF0Zm9ybSBkZXZpY2UgdG8gc2VhcmNoIHRoZSBwb3dl ciByZXNvdXJjZXMKLSAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSB0byBzdG9yZSB0aGUgcG93ZXIg cmVzb3VyY2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3Bvd2Vy X3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQlzdHJ1Y3QgZHB1 X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWlu aXQoKSAtIHJlbGVhc2UgdGhlIGRwdSBwb3dlciBoYW5kbGUKLSAqIEBwZGV2OiAgIHBsYXRmb3Jt IGRldmljZSBmb3IgcG93ZXIgcmVzb3VyY2VzCi0gKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29u dGFpbmluZyB0aGUgcmVzb3VyY2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi12 b2lkIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOwotCi0vKioKLSAqIGRwdV9wb3dl cl9jbGllbnRfY3JlYXRlKCkgLSBjcmVhdGUgdGhlIGNsaWVudCBvbiBwb3dlciBoYW5kbGUKLSAq IEBwZGF0YTogIHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKLSAqIEBjbGll bnRfbmFtZTogbmV3IGNsaWVudCBuYW1lIGZvciByZWdpc3RyYXRpb24KLSAqCi0gKiBSZXR1cm46 IGVycm9yIGNvZGUuCi0gKi8KLXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpkcHVfcG93ZXJfY2xp ZW50X2NyZWF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEsCi0JY2hhciAqY2xpZW50 X25hbWUpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveSgpIC0gZGVzdHJveSB0 aGUgY2xpZW50IG9uIHBvd2VyIGhhbmRsZQotICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRh aW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudF9uYW1lOiBuZXcgY2xpZW50IG5hbWUgZm9y IHJlZ2lzdHJhdGlvbgotICoKLSAqIFJldHVybjogbm9uZQotICovCi12b2lkIGRwdV9wb3dlcl9j bGllbnRfZGVzdHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50KTsKLQotLyoqCi0gKiBkcHVfcG93ZXJfcmVzb3VyY2Vf ZW5hYmxlKCkgLSBlbmFibGUvZGlzYWJsZSB0aGUgcG93ZXIgcmVzb3VyY2VzCi0gKiBAcGRhdGE6 ICBwb3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCi0gKiBAY2xpZW50OiBjbGll bnQgaW5mb3JtYXRpb24gdG8gZW5hYmxlL2Rpc2FibGUgaXRzIHZvdGUKLSAqIEBlbmFibGU6IGJv b2xlYW4gcmVxdWVzdCBmb3IgZW5hYmxlL2Rpc2FibGUKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJf aGFuZGxlICpwZGF0YSwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwgYm9vbCBl bmFibGUpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoKSAtIHVw ZGF0ZSBkYXRhIGJ1cyBzdGF0ZQotICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcg dGhlIHJlc291cmNlcwotICogQGVuYWJsZTogdGFrZSBlbmFibGUgdnMgZGlzYWJsZSBwYXRoCi0g KgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0 YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJCQkJCQlib29s IGVuYWJsZSk7Ci0KLS8qKgotICogZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgpIC0gc2V0 IGRhdGEgYnVzIHF1b3RhIGZvciBwb3dlciBjbGllbnQKLSAqIEBwaGFuZGxlOiAgcG93ZXIgaGFu ZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0 aW9uIHRvIHNldCBxdW90YQotICogQGJ1c19jbGllbnQ6IHJlYWwtdGltZSBvciBub24tcmVhbC10 aW1lIGJ1cyBjbGllbnQKLSAqIEBidXNfaWQ6IGlkZW50aWZpZXIgb2YgZGF0YSBidXMsIHNlZSBE UFVfUE9XRVJfSEFORExFX0RCVVNfSUQKLSAqIEBhYl9xdW90YTogYXJiaXRyYXRlZCBidXMgYmFu ZHdpZHRoCi0gKiBAaWJfcXVvdGE6IGluc3RhbnRhbmVvdXMgYnVzIGJhbmR3aWR0aAotICoKLSAq IFJldHVybjogemVybyBpZiBzdWNjZXNzLCBvciBlcnJvciBjb2RlIG90aGVyd2lzZQotICovCi1p bnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAq cGhhbmRsZSwKLQkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsCi0JCWludCBidXNf Y2xpZW50LCB1MzIgYnVzX2lkLAotCQl1NjQgYWJfcXVvdGEsIHU2NCBpYl9xdW90YSk7Ci0KLS8q KgotICogZHB1X3Bvd2VyX2RhdGFfYnVzX2JhbmR3aWR0aF9jdHJsKCkgLSBjb250cm9sIGRhdGEg YnVzIGJhbmR3aWR0aCBlbmFibGUKLSAqIEBwaGFuZGxlOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5p bmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0aW9uIHRvIGJhbmR3 aWR0aCBjb250cm9sCi0gKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSBiYW5kd2lkdGggZm9yIGRh dGEgYmFzZQotICoKLSAqIFJldHVybjogbm9uZQotICovCi12b2lkIGRwdV9wb3dlcl9kYXRhX2J1 c19iYW5kd2lkdGhfY3RybChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJc3Ry dWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsIGludCBlbmFibGUpOwotCi0vKioKLSAqIGRw dV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0 aW9uIGZvciBhbiBldmVudC4KLSAqCUNsaWVudHMgY2FuIHJlZ2lzdGVyIGZvciBtdWx0aXBsZSBl dmVudHMgd2l0aCBhIHNpbmdsZSByZWdpc3Rlci4KLSAqCUFueSBibG9jayB3aXRoIGFjY2VzcyB0 byBwaGFuZGxlIGNhbiByZWdpc3RlciBmb3IgdGhlIGV2ZW50Ci0gKglub3RpZmljYXRpb24uCi0g KiBAcGhhbmRsZToJcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGV2 ZW50X3R5cGU6CWV2ZW50IHR5cGUgdG8gcmVnaXN0ZXI7IHJlZmVyIERQVV9QT1dFUl9IQU5ETEVf RVZFTlRfKgotICogQGNiX2ZuYzoJcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9u Ci0gKiBAdXNyOgl1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBvbiBldmVudCB0cmln Z2VyCi0gKgotICogUmV0dXJuOglldmVudCBwb2ludGVyIGlmIHN1Y2Nlc3MsIG9yIGVycm9yIGNv ZGUgb3RoZXJ3aXNlCi0gKi8KLXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmRwdV9wb3dlcl9oYW5k bGVfcmVnaXN0ZXJfZXZlbnQoCi0JCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAot CQl1MzIgZXZlbnRfdHlwZSwgdm9pZCAoKmNiX2ZuYykodTMyIGV2ZW50X3R5cGUsIHZvaWQgKnVz ciksCi0JCXZvaWQgKnVzciwgY2hhciAqY2xpZW50X25hbWUpOwotLyoqCi0gKiBkcHVfcG93ZXJf aGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQgLSB1bnJlZ2lzdGVyIGNhbGxiYWNrIGZvciBldmVudChz KQotICogQHBoYW5kbGU6CXBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKLSAq IEBldmVudDoJZXZlbnQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBwb3dlciBoYW5kbGUgcmVnaXN0 ZXIKLSAqLwotdm9pZCBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0IGRw dV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50 KTsKLQotLyoqCi0gKiBkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUgLSBnZXQgbmFtZSBv ZiBnaXZlbiBkYXRhIGJ1cyBpZGVudGlmaWVyCi0gKiBAYnVzX2lkOglkYXRhIGJ1cyBpZGVudGlm aWVyCi0gKiBSZXR1cm46CVBvaW50ZXIgdG8gbmFtZSBzdHJpbmcgaWYgc3VjY2VzczsgTlVMTCBv dGhlcndpc2UKLSAqLwotY29uc3QgY2hhciAqZHB1X3Bvd2VyX2hhbmRsZV9nZXRfZGJ1c19uYW1l KHUzMiBidXNfaWQpOwotCi0jZW5kaWYgLyogX0RQVV9QT1dFUl9IQU5ETEVfSF8gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmMKaW5kZXggNWMyNjdjZC4uNjBiNjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMK QEAgLTM0MCw3ICszNDAsNiBAQCBzdGF0aWMgaW50IG1zbV9kcm1fdW5pbml0KHN0cnVjdCBkZXZp Y2UgKmRldikKIAljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRkZXYpOwogCiAjaWZkZWYgQ09O RklHX0RSTV9NU01fRFBVCi0JZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChwZGV2LCAmcHJpdi0+ cGhhbmRsZSk7CiAJZHB1X2RiZ19kZXN0cm95KCk7CiAjZW5kaWYKIApAQCAtNTE5LDEyICs1MTgs NiBAQCBzdGF0aWMgaW50IG1zbV9kcm1faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fZHJpdmVyICpkcnYpCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGRldik7CiAKICNpZmRlZiBD T05GSUdfRFJNX01TTV9EUFUKLQlyZXQgPSBkcHVfcG93ZXJfcmVzb3VyY2VfaW5pdChwZGV2LCAm cHJpdi0+cGhhbmRsZSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImRwdSBwb3dlciByZXNvdXJj ZSBpbml0IGZhaWxlZFxuIik7Ci0JCWdvdG8gcG93ZXJfaW5pdF9mYWlsOwotCX0KLQogCXJldCA9 IGRwdV9kYmdfaW5pdCgmcGRldi0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGluaXQgZHB1IGRiZzogJWRcbiIsIHJldCk7CkBAIC03MzMsOCArNzI2LDYgQEAg c3RhdGljIGludCBtc21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2Ry aXZlciAqZHJ2KQogI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQVQogCWRwdV9kYmdfZGVzdHJveSgp OwogZGJnX2luaXRfZmFpbDoKLQlkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHBkZXYsICZwcml2 LT5waGFuZGxlKTsKLXBvd2VyX2luaXRfZmFpbDoKICNlbmRpZgogCWlmIChtZHNzICYmIG1kc3Mt PmZ1bmNzKQogCQltZHNzLT5mdW5jcy0+ZGVzdHJveShkZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgK aW5kZXggZjlhZTk2Zi4uMjdhNzNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTQ2LDggKzQ2 LDYgQEAKICNpbmNsdWRlIDxkcm0vbXNtX2RybS5oPgogI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+ CiAKLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCi0KICNkZWZpbmUgR0VUX01BSk9SX1JF VihyZXYpCQkoKHJldikgPj4gMjgpCiAjZGVmaW5lIEdFVF9NSU5PUl9SRVYocmV2KQkJKCgocmV2 KSA+PiAxNikgJiAweEZGRikKICNkZWZpbmUgR0VUX1NURVBfUkVWKHJldikJCSgocmV2KSAmIDB4 RkZGRikKQEAgLTM3NSw4ICszNzMsNiBAQCBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKIAogCXN0 cnVjdCBtc21fa21zICprbXM7CiAKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSBwaGFuZGxlOwot CiAJLyogc3Vib3JkaW5hdGUgZGV2aWNlcywgaWYgcHJlc2VudDogKi8KIAlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpncHVfcGRldjsKIAotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVy LCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3Vu ZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==