From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 521A9C352A3 for ; Tue, 11 Feb 2020 16:15:11 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2D5A72070A for ; Tue, 11 Feb 2020 16:15:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2D5A72070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B8CB56EE9D; Tue, 11 Feb 2020 16:15:10 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id C3D546E4FE for ; Tue, 11 Feb 2020 16:15:09 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Feb 2020 08:15:08 -0800 X-IronPort-AV: E=Sophos;i="5.70,428,1574150400"; d="scan'208";a="221978195" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.66.161]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Feb 2020 08:15:02 -0800 From: Jani Nikula To: intel-gfx@lists.freedesktop.org Date: Tue, 11 Feb 2020 18:14:51 +0200 Message-Id: <20200211161451.6867-2-jani.nikula@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200211161451.6867-1-jani.nikula@intel.com> References: <20200211161451.6867-1-jani.nikula@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Subject: [Intel-gfx] [PATCH v2 2/2] drm/i915: split out display debugfs to a separate file X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jani.nikula@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhlIGk5MTVfZGVidWdmcy5jIGhhcyBncm93biBtb3JlIHRoYW4gYSBsaXR0bGUgdW53aWVsZHku IFNwbGl0IG91dCB0aGUKZGlzcGxheSByZWxhdGVkIGRlYnVnZnMgY29kZSB0byBhIGZpbGUgb2Yg aXRzIG93biB1bmRlciBkaXNwbGF5LywKaW5pdGlhbGl6ZWQgd2l0aCBhIHNlcGFyYXRlIGNhbGwu IE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KCnYyOgotIEFsc28gbW92ZWQgaTkxNV9mcm9udGJ1ZmZl cl90cmFja2luZywgaTkxNV9nZW1fZnJhbWVidWZmZXIsCiAgaTkxNV9wb3dlcl9kb21haW5faW5m bywgaTkxNV9kbWNfaW5mbywgaTkxNV9pcGNfc3RhdHVzIChWaWxsZSkKCkNjOiBWaWxsZSBTeXJq w6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBKYW5p IE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDEgKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMgIHwgMjEyMCArKysrKysrKysrKysrKysrCiAuLi4vZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuaCAgfCAgIDIwICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfaGRtaS5jICAgICB8ICAgIDMgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8IDIxNjggKy0tLS0tLS0tLS0t LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5oICAgICAgICAgICB8ICAg IDggKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAg IDIgKwogOCBmaWxlcyBjaGFuZ2VkLCAyMTk3IGluc2VydGlvbnMoKyksIDIxMjggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5X2RlYnVnZnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmlu ZGV4IGEyZmFiM2M0MzU2My4uZWIxMzI5NGNiNDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAt NjgsNiArNjgsNyBAQCBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8KIGk5 MTUtJChDT05GSUdfREVCVUdfRlMpICs9IFwKIAlpOTE1X2RlYnVnZnMubyBcCiAJaTkxNV9kZWJ1 Z2ZzX3BhcmFtcy5vIFwKKwlkaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5vIFwKIAlkaXNw bGF5L2ludGVsX3BpcGVfY3JjLm8KIGk5MTUtJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IGk5MTVf cG11Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41 MGJhYWM3MjZlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5jCkBAIC0wLDAgKzEsMjEyMCBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENv cnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1fZGVidWdmcy5oPgorI2luY2x1ZGUg PGRybS9kcm1fZm91cmNjLmg+CisKKyNpbmNsdWRlICJpOTE1X2RlYnVnZnMuaCIKKyNpbmNsdWRl ICJpbnRlbF9jc3IuaCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X2RlYnVnZnMuaCIKKyNpbmNs dWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfZHAuaCIKKyNpbmNs dWRlICJpbnRlbF9mYmMuaCIKKyNpbmNsdWRlICJpbnRlbF9oZGNwLmgiCisjaW5jbHVkZSAiaW50 ZWxfaGRtaS5oIgorI2luY2x1ZGUgImludGVsX3BtLmgiCisjaW5jbHVkZSAiaW50ZWxfcHNyLmgi CisjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqbm9kZV90b19pOTE1KHN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlKQor eworCXJldHVybiB0b19pOTE1KG5vZGUtPm1pbm9yLT5kZXYpOworfQorCitzdGF0aWMgaW50IGk5 MTVfZnJvbnRidWZmZXJfdHJhY2tpbmcoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0t PnByaXZhdGUpOworCisJc2VxX3ByaW50ZihtLCAiRkIgdHJhY2tpbmcgYnVzeSBiaXRzOiAweCUw OHhcbiIsCisJCSAgIGRldl9wcml2LT5mYl90cmFja2luZy5idXN5X2JpdHMpOworCisJc2VxX3By aW50ZihtLCAiRkIgdHJhY2tpbmcgZmxpcCBiaXRzOiAweCUwOHhcbiIsCisJCSAgIGRldl9wcml2 LT5mYl90cmFja2luZy5mbGlwX2JpdHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg aTkxNV9mYmNfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRl KTsKKwlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2X3ByaXYtPmZiYzsKKwlpbnRlbF93YWtl cmVmX3Qgd2FrZXJlZjsKKworCWlmICghSEFTX0ZCQyhkZXZfcHJpdikpCisJCXJldHVybiAtRU5P REVWOworCisJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGlt ZV9wbSk7CisJbXV0ZXhfbG9jaygmZmJjLT5sb2NrKTsKKworCWlmIChpbnRlbF9mYmNfaXNfYWN0 aXZlKGRldl9wcml2KSkKKwkJc2VxX3B1dHMobSwgIkZCQyBlbmFibGVkXG4iKTsKKwllbHNlCisJ CXNlcV9wcmludGYobSwgIkZCQyBkaXNhYmxlZDogJXNcbiIsIGZiYy0+bm9fZmJjX3JlYXNvbik7 CisKKwlpZiAoaW50ZWxfZmJjX2lzX2FjdGl2ZShkZXZfcHJpdikpIHsKKwkJdTMyIG1hc2s7CisK KwkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKKwkJCW1hc2sgPSBJOTE1X1JFQUQoSVZC X0ZCQ19TVEFUVVMyKSAmIEJEV19GQkNfQ09NUF9TRUdfTUFTSzsKKwkJZWxzZSBpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA3KQorCQkJbWFzayA9IEk5MTVfUkVBRChJVkJfRkJDX1NUQVRVUzIp ICYgSVZCX0ZCQ19DT01QX1NFR19NQVNLOworCQllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDUpCisJCQltYXNrID0gSTkxNV9SRUFEKElMS19EUEZDX1NUQVRVUykgJiBJTEtfRFBGQ19D T01QX1NFR19NQVNLOworCQllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQorCQkJbWFzayA9IEk5 MTVfUkVBRChEUEZDX1NUQVRVUykgJiBEUEZDX0NPTVBfU0VHX01BU0s7CisJCWVsc2UKKwkJCW1h c2sgPSBJOTE1X1JFQUQoRkJDX1NUQVRVUykgJiAoRkJDX1NUQVRfQ09NUFJFU1NJTkcgfAorCQkJ CQkJCUZCQ19TVEFUX0NPTVBSRVNTRUQpOworCisJCXNlcV9wcmludGYobSwgIkNvbXByZXNzaW5n OiAlc1xuIiwgeWVzbm8obWFzaykpOworCX0KKworCW11dGV4X3VubG9jaygmZmJjLT5sb2NrKTsK KwlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9mYmNfZmFsc2VfY29sb3JfZ2V0KHZv aWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRhdGE7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDcgfHwgIUhBU19GQkMoZGV2 X3ByaXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSp2YWwgPSBkZXZfcHJpdi0+ZmJjLmZhbHNl X2NvbG9yOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9mYmNfZmFsc2VfY29s b3Jfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGF0YTsKKwl1MzIgcmVnOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg PCA3IHx8ICFIQVNfRkJDKGRldl9wcml2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9s b2NrKCZkZXZfcHJpdi0+ZmJjLmxvY2spOworCisJcmVnID0gSTkxNV9SRUFEKElMS19EUEZDX0NP TlRST0wpOworCWRldl9wcml2LT5mYmMuZmFsc2VfY29sb3IgPSB2YWw7CisKKwlJOTE1X1dSSVRF KElMS19EUEZDX0NPTlRST0wsIHZhbCA/CisJCSAgIChyZWcgfCBGQkNfQ1RMX0ZBTFNFX0NPTE9S KSA6CisJCSAgIChyZWcgJiB+RkJDX0NUTF9GQUxTRV9DT0xPUikpOworCisJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+ZmJjLmxvY2spOworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FU VFJJQlVURShpOTE1X2ZiY19mYWxzZV9jb2xvcl9mb3BzLAorCQkJaTkxNV9mYmNfZmFsc2VfY29s b3JfZ2V0LCBpOTE1X2ZiY19mYWxzZV9jb2xvcl9zZXQsCisJCQkiJWxsdVxuIik7CisKK3N0YXRp YyBpbnQgaTkxNV9pcHNfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5w cml2YXRlKTsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKworCWlmICghSEFTX0lQUyhkZXZf cHJpdikpCisJCXJldHVybiAtRU5PREVWOworCisJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1f Z2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7CisKKwlzZXFfcHJpbnRmKG0sICJFbmFibGVkIGJ5 IGtlcm5lbCBwYXJhbWV0ZXI6ICVzXG4iLAorCQkgICB5ZXNubyhpOTE1X21vZHBhcmFtcy5lbmFi bGVfaXBzKSk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KSB7CisJCXNlcV9wdXRz KG0sICJDdXJyZW50bHk6IHVua25vd25cbiIpOworCX0gZWxzZSB7CisJCWlmIChJOTE1X1JFQUQo SVBTX0NUTCkgJiBJUFNfRU5BQkxFKQorCQkJc2VxX3B1dHMobSwgIkN1cnJlbnRseTogZW5hYmxl ZFxuIik7CisJCWVsc2UKKwkJCXNlcV9wdXRzKG0sICJDdXJyZW50bHk6IGRpc2FibGVkXG4iKTsK Kwl9CisKKwlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2Vy ZWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9zcl9zdGF0dXMoc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOworCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOworCWJvb2wgc3JfZW5hYmxlZCA9IGZhbHNlOworCisJd2FrZXJlZiA9IGludGVsX2Rp c3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fSU5JVCk7CisKKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA5KQorCQkvKiBubyBnbG9iYWwgU1Igc3RhdHVzOyBpbnNwZWN0 IHBlci1wbGFuZSBXTSAqLzsKKwllbHNlIGlmIChIQVNfUENIX1NQTElUKGRldl9wcml2KSkKKwkJ c3JfZW5hYmxlZCA9IEk5MTVfUkVBRChXTTFfTFBfSUxLKSAmIFdNMV9MUF9TUl9FTjsKKwllbHNl IGlmIChJU19JOTY1R00oZGV2X3ByaXYpIHx8IElTX0c0WChkZXZfcHJpdikgfHwKKwkJIElTX0k5 NDVHKGRldl9wcml2KSB8fCBJU19JOTQ1R00oZGV2X3ByaXYpKQorCQlzcl9lbmFibGVkID0gSTkx NV9SRUFEKEZXX0JMQ19TRUxGKSAmIEZXX0JMQ19TRUxGX0VOOworCWVsc2UgaWYgKElTX0k5MTVH TShkZXZfcHJpdikpCisJCXNyX2VuYWJsZWQgPSBJOTE1X1JFQUQoSU5TVFBNKSAmIElOU1RQTV9T RUxGX0VOOworCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkKKwkJc3JfZW5hYmxlZCA9 IEk5MTVfUkVBRChEU1BGVzMpICYgUElORVZJRVdfU0VMRl9SRUZSRVNIX0VOOworCWVsc2UgaWYg KElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQorCQlz cl9lbmFibGVkID0gSTkxNV9SRUFEKEZXX0JMQ19TRUxGX1ZMVikgJiBGV19DU1BXUkRXTkVOOwor CisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9JTklULCB3 YWtlcmVmKTsKKworCXNlcV9wcmludGYobSwgInNlbGYtcmVmcmVzaDogJXNcbiIsIGVuYWJsZWRk aXNhYmxlZChzcl9lbmFibGVkKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1 X29wcmVnaW9uKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBp bnRlbF9vcHJlZ2lvbiAqb3ByZWdpb24gPSAmbm9kZV90b19pOTE1KG0tPnByaXZhdGUpLT5vcHJl Z2lvbjsKKworCWlmIChvcHJlZ2lvbi0+aGVhZGVyKQorCQlzZXFfd3JpdGUobSwgb3ByZWdpb24t PmhlYWRlciwgT1BSRUdJT05fU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBp OTE1X3ZidChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgaW50 ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJm5vZGVfdG9faTkxNShtLT5wcml2YXRlKS0+b3ByZWdp b247CisKKwlpZiAob3ByZWdpb24tPnZidCkKKwkJc2VxX3dyaXRlKG0sIG9wcmVnaW9uLT52YnQs IG9wcmVnaW9uLT52YnRfc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1 X2dlbV9mcmFtZWJ1ZmZlcl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJp dmF0ZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCXN0cnVj dCBpbnRlbF9mcmFtZWJ1ZmZlciAqZmJkZXZfZmIgPSBOVUxMOworCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmRybV9mYjsKKworI2lmZGVmIENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OCisJaWYg KGRldl9wcml2LT5mYmRldiAmJiBkZXZfcHJpdi0+ZmJkZXYtPmhlbHBlci5mYikgeworCQlmYmRl dl9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGRldl9wcml2LT5mYmRldi0+aGVscGVyLmZiKTsK KworCQlzZXFfcHJpbnRmKG0sICJmYmNvbiBzaXplOiAlZCB4ICVkLCBkZXB0aCAlZCwgJWQgYnBw LCBtb2RpZmllciAweCVsbHgsIHJlZmNvdW50ICVkLCBvYmogIiwKKwkJCSAgIGZiZGV2X2ZiLT5i YXNlLndpZHRoLAorCQkJICAgZmJkZXZfZmItPmJhc2UuaGVpZ2h0LAorCQkJICAgZmJkZXZfZmIt PmJhc2UuZm9ybWF0LT5kZXB0aCwKKwkJCSAgIGZiZGV2X2ZiLT5iYXNlLmZvcm1hdC0+Y3BwWzBd ICogOCwKKwkJCSAgIGZiZGV2X2ZiLT5iYXNlLm1vZGlmaWVyLAorCQkJICAgZHJtX2ZyYW1lYnVm ZmVyX3JlYWRfcmVmY291bnQoJmZiZGV2X2ZiLT5iYXNlKSk7CisJCWk5MTVfZGVidWdmc19kZXNj cmliZV9vYmoobSwgaW50ZWxfZmJfb2JqKCZmYmRldl9mYi0+YmFzZSkpOworCQlzZXFfcHV0Yyht LCAnXG4nKTsKKwl9CisjZW5kaWYKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcuZmJf bG9jayk7CisJZHJtX2Zvcl9lYWNoX2ZiKGRybV9mYiwgZGV2KSB7CisJCXN0cnVjdCBpbnRlbF9m cmFtZWJ1ZmZlciAqZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihkcm1fZmIpOworCQlpZiAoZmIg PT0gZmJkZXZfZmIpCisJCQljb250aW51ZTsKKworCQlzZXFfcHJpbnRmKG0sICJ1c2VyIHNpemU6 ICVkIHggJWQsIGRlcHRoICVkLCAlZCBicHAsIG1vZGlmaWVyIDB4JWxseCwgcmVmY291bnQgJWQs IG9iaiAiLAorCQkJICAgZmItPmJhc2Uud2lkdGgsCisJCQkgICBmYi0+YmFzZS5oZWlnaHQsCisJ CQkgICBmYi0+YmFzZS5mb3JtYXQtPmRlcHRoLAorCQkJICAgZmItPmJhc2UuZm9ybWF0LT5jcHBb MF0gKiA4LAorCQkJICAgZmItPmJhc2UubW9kaWZpZXIsCisJCQkgICBkcm1fZnJhbWVidWZmZXJf cmVhZF9yZWZjb3VudCgmZmItPmJhc2UpKTsKKwkJaTkxNV9kZWJ1Z2ZzX2Rlc2NyaWJlX29iaiht LCBpbnRlbF9mYl9vYmooJmZiLT5iYXNlKSk7CisJCXNlcV9wdXRjKG0sICdcbicpOworCX0KKwlt dXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcuZmJfbG9jayk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBpOTE1X3Bzcl9zaW5rX3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKK3sKKwl1OCB2YWw7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBz aW5rX3N0YXR1c1tdID0geworCQkiaW5hY3RpdmUiLAorCQkidHJhbnNpdGlvbiB0byBhY3RpdmUs IGNhcHR1cmUgYW5kIGRpc3BsYXkiLAorCQkiYWN0aXZlLCBkaXNwbGF5IGZyb20gUkZCIiwKKwkJ ImFjdGl2ZSwgY2FwdHVyZSBhbmQgZGlzcGxheSBvbiBzaW5rIGRldmljZSB0aW1pbmdzIiwKKwkJ InRyYW5zaXRpb24gdG8gaW5hY3RpdmUsIGNhcHR1cmUgYW5kIGRpc3BsYXksIHRpbWluZyByZS1z eW5jIiwKKwkJInJlc2VydmVkIiwKKwkJInJlc2VydmVkIiwKKwkJInNpbmsgaW50ZXJuYWwgZXJy b3IiLAorCX07CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG0tPnByaXZhdGU7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3It PmRldik7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9CisJCWludGVsX2F0dGFjaGVkX2Rw KHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsKKwlpbnQgcmV0OworCisJaWYgKCFDQU5f UFNSKGRldl9wcml2KSkgeworCQlzZXFfcHV0cyhtLCAiUFNSIFVuc3VwcG9ydGVkXG4iKTsKKwkJ cmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rv cl9zdGF0dXNfY29ubmVjdGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGRybV9kcF9k cGNkX3JlYWRiKCZpbnRlbF9kcC0+YXV4LCBEUF9QU1JfU1RBVFVTLCAmdmFsKTsKKworCWlmIChy ZXQgPT0gMSkgeworCQljb25zdCBjaGFyICpzdHIgPSAidW5rbm93biI7CisKKwkJdmFsICY9IERQ X1BTUl9TSU5LX1NUQVRFX01BU0s7CisJCWlmICh2YWwgPCBBUlJBWV9TSVpFKHNpbmtfc3RhdHVz KSkKKwkJCXN0ciA9IHNpbmtfc3RhdHVzW3ZhbF07CisJCXNlcV9wcmludGYobSwgIlNpbmsgUFNS IHN0YXR1czogMHgleCBbJXNdXG4iLCB2YWwsIHN0cik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0RFRklORV9TSE9XX0FUVFJJQlVURShpOTE1X3Bzcl9z aW5rX3N0YXR1cyk7CisKK3N0YXRpYyB2b2lkCitwc3Jfc291cmNlX3N0YXR1cyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwl1MzIgdmFs LCBzdGF0dXNfdmFsOworCWNvbnN0IGNoYXIgKnN0YXR1cyA9ICJ1bmtub3duIjsKKworCWlmIChk ZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgeworCQlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0 IGxpdmVfc3RhdHVzW10gPSB7CisJCQkiSURMRSIsCisJCQkiQ0FQVFVSRSIsCisJCQkiQ0FQVFVS RV9GUyIsCisJCQkiU0xFRVAiLAorCQkJIkJVRk9OX0ZXIiwKKwkJCSJNTF9VUCIsCisJCQkiU1Vf U1RBTkRCWSIsCisJCQkiRkFTVF9TTEVFUCIsCisJCQkiREVFUF9TTEVFUCIsCisJCQkiQlVGX09O IiwKKwkJCSJUR19PTiIKKwkJfTsKKwkJdmFsID0gSTkxNV9SRUFEKEVEUF9QU1IyX1NUQVRVUyhk ZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKKwkJc3RhdHVzX3ZhbCA9ICh2YWwgJiBFRFBfUFNS Ml9TVEFUVVNfU1RBVEVfTUFTSykgPj4KKwkJCSAgICAgIEVEUF9QU1IyX1NUQVRVU19TVEFURV9T SElGVDsKKwkJaWYgKHN0YXR1c192YWwgPCBBUlJBWV9TSVpFKGxpdmVfc3RhdHVzKSkKKwkJCXN0 YXR1cyA9IGxpdmVfc3RhdHVzW3N0YXR1c192YWxdOworCX0gZWxzZSB7CisJCXN0YXRpYyBjb25z dCBjaGFyICogY29uc3QgbGl2ZV9zdGF0dXNbXSA9IHsKKwkJCSJJRExFIiwKKwkJCSJTUkRPTkFD SyIsCisJCQkiU1JERU5UIiwKKwkJCSJCVUZPRkYiLAorCQkJIkJVRk9OIiwKKwkJCSJBVVhBQ0si LAorCQkJIlNSRE9GRkFDSyIsCisJCQkiU1JERU5UX09OIiwKKwkJfTsKKwkJdmFsID0gSTkxNV9S RUFEKEVEUF9QU1JfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOworCQlzdGF0dXNf dmFsID0gKHZhbCAmIEVEUF9QU1JfU1RBVFVTX1NUQVRFX01BU0spID4+CisJCQkgICAgICBFRFBf UFNSX1NUQVRVU19TVEFURV9TSElGVDsKKwkJaWYgKHN0YXR1c192YWwgPCBBUlJBWV9TSVpFKGxp dmVfc3RhdHVzKSkKKwkJCXN0YXR1cyA9IGxpdmVfc3RhdHVzW3N0YXR1c192YWxdOworCX0KKwor CXNlcV9wcmludGYobSwgIlNvdXJjZSBQU1Igc3RhdHVzOiAlcyBbMHglMDh4XVxuIiwgc3RhdHVz LCB2YWwpOworfQorCitzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKKwlzdHJ1Y3QgaTkxNV9wc3IgKnBzciA9ICZk ZXZfcHJpdi0+cHNyOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWNvbnN0IGNoYXIgKnN0 YXR1czsKKwlib29sIGVuYWJsZWQ7CisJdTMyIHZhbDsKKworCWlmICghSEFTX1BTUihkZXZfcHJp dikpCisJCXJldHVybiAtRU5PREVWOworCisJc2VxX3ByaW50ZihtLCAiU2luayBzdXBwb3J0OiAl cyIsIHllc25vKHBzci0+c2lua19zdXBwb3J0KSk7CisJaWYgKHBzci0+ZHApCisJCXNlcV9wcmlu dGYobSwgIiBbMHglMDJ4XSIsIHBzci0+ZHAtPnBzcl9kcGNkWzBdKTsKKwlzZXFfcHV0cyhtLCAi XG4iKTsKKworCWlmICghcHNyLT5zaW5rX3N1cHBvcnQpCisJCXJldHVybiAwOworCisJd2FrZXJl ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7CisJbXV0ZXhf bG9jaygmcHNyLT5sb2NrKTsKKworCWlmIChwc3ItPmVuYWJsZWQpCisJCXN0YXR1cyA9IHBzci0+ cHNyMl9lbmFibGVkID8gIlBTUjIgZW5hYmxlZCIgOiAiUFNSMSBlbmFibGVkIjsKKwllbHNlCisJ CXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJc2VxX3ByaW50ZihtLCAiUFNSIG1vZGU6ICVzXG4iLCBz dGF0dXMpOworCisJaWYgKCFwc3ItPmVuYWJsZWQpIHsKKwkJc2VxX3ByaW50ZihtLCAiUFNSIHNp bmsgbm90IHJlbGlhYmxlOiAlc1xuIiwKKwkJCSAgIHllc25vKHBzci0+c2lua19ub3RfcmVsaWFi bGUpKTsKKworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAocHNyLT5wc3IyX2VuYWJsZWQpIHsK KwkJdmFsID0gSTkxNV9SRUFEKEVEUF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIp KTsKKwkJZW5hYmxlZCA9IHZhbCAmIEVEUF9QU1IyX0VOQUJMRTsKKwl9IGVsc2UgeworCQl2YWwg PSBJOTE1X1JFQUQoRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7CisJCWVu YWJsZWQgPSB2YWwgJiBFRFBfUFNSX0VOQUJMRTsKKwl9CisJc2VxX3ByaW50ZihtLCAiU291cmNl IFBTUiBjdGw6ICVzIFsweCUwOHhdXG4iLAorCQkgICBlbmFibGVkZGlzYWJsZWQoZW5hYmxlZCks IHZhbCk7CisJcHNyX3NvdXJjZV9zdGF0dXMoZGV2X3ByaXYsIG0pOworCXNlcV9wcmludGYobSwg IkJ1c3kgZnJvbnRidWZmZXIgYml0czogMHglMDh4XG4iLAorCQkgICBwc3ItPmJ1c3lfZnJvbnRi dWZmZXJfYml0cyk7CisKKwkvKgorCSAqIFNLTCsgUGVyZiBjb3VudGVyIGlzIHJlc2V0IHRvIDAg ZXZlcnl0aW1lIERDIHN0YXRlIGlzIGVudGVyZWQKKwkgKi8KKwlpZiAoSVNfSEFTV0VMTChkZXZf cHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkgeworCQl2YWwgPSBJOTE1X1JFQUQoRURQ X1BTUl9QRVJGX0NOVChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKKwkJdmFsICY9IEVEUF9Q U1JfUEVSRl9DTlRfTUFTSzsKKwkJc2VxX3ByaW50ZihtLCAiUGVyZm9ybWFuY2UgY291bnRlcjog JXVcbiIsIHZhbCk7CisJfQorCisJaWYgKHBzci0+ZGVidWcgJiBJOTE1X1BTUl9ERUJVR19JUlEp IHsKKwkJc2VxX3ByaW50ZihtLCAiTGFzdCBhdHRlbXB0ZWQgZW50cnkgYXQ6ICVsbGRcbiIsCisJ CQkgICBwc3ItPmxhc3RfZW50cnlfYXR0ZW1wdCk7CisJCXNlcV9wcmludGYobSwgIkxhc3QgZXhp dCBhdDogJWxsZFxuIiwgcHNyLT5sYXN0X2V4aXQpOworCX0KKworCWlmIChwc3ItPnBzcjJfZW5h YmxlZCkgeworCQl1MzIgc3VfZnJhbWVzX3ZhbFszXTsKKwkJaW50IGZyYW1lOworCisJCS8qCisJ CSAqIFJlYWRpbmcgYWxsIDMgcmVnaXN0ZXJzIGJlZm9yZSBoYW5kIHRvIG1pbmltaXplIGNyb3Nz aW5nIGEKKwkJICogZnJhbWUgYm91bmRhcnkgYmV0d2VlbiByZWdpc3RlciByZWFkcworCQkgKi8K KwkJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgUFNSMl9TVV9TVEFUVVNfRlJBTUVTOyBmcmFtZSAr PSAzKSB7CisJCQl2YWwgPSBJOTE1X1JFQUQoUFNSMl9TVV9TVEFUVVMoZGV2X3ByaXYtPnBzci50 cmFuc2NvZGVyLAorCQkJCQkJICAgICAgIGZyYW1lKSk7CisJCQlzdV9mcmFtZXNfdmFsW2ZyYW1l IC8gM10gPSB2YWw7CisJCX0KKworCQlzZXFfcHV0cyhtLCAiRnJhbWU6XHRQU1IyIFNVIGJsb2Nr czpcbiIpOworCisJCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IFBTUjJfU1VfU1RBVFVTX0ZSQU1F UzsgZnJhbWUrKykgeworCQkJdTMyIHN1X2Jsb2NrczsKKworCQkJc3VfYmxvY2tzID0gc3VfZnJh bWVzX3ZhbFtmcmFtZSAvIDNdICYKKwkJCQkgICAgUFNSMl9TVV9TVEFUVVNfTUFTSyhmcmFtZSk7 CisJCQlzdV9ibG9ja3MgPSBzdV9ibG9ja3MgPj4gUFNSMl9TVV9TVEFUVVNfU0hJRlQoZnJhbWUp OworCQkJc2VxX3ByaW50ZihtLCAiJWRcdCVkXG4iLCBmcmFtZSwgc3VfYmxvY2tzKTsKKwkJfQor CX0KKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmcHNyLT5sb2NrKTsKKwlpbnRlbF9ydW50aW1l X3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQKK2k5MTVfZWRwX3Bzcl9kZWJ1Z19zZXQodm9pZCAqZGF0YSwgdTY0IHZh bCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkYXRhOworCWludGVs X3dha2VyZWZfdCB3YWtlcmVmOworCWludCByZXQ7CisKKwlpZiAoIUNBTl9QU1IoZGV2X3ByaXYp KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiU2V0 dGluZyBQU1IgZGVidWcgdG8gJWxseFxuIiwgdmFsKTsKKworCXdha2VyZWYgPSBpbnRlbF9ydW50 aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOworCisJcmV0ID0gaW50ZWxfcHNyX2Rl YnVnX3NldChkZXZfcHJpdiwgdmFsKTsKKworCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJp di0+cnVudGltZV9wbSwgd2FrZXJlZik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 CitpOTE1X2VkcF9wc3JfZGVidWdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRhdGE7CisKKwlpZiAoIUNBTl9QU1IoZGV2 X3ByaXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSp2YWwgPSBSRUFEX09OQ0UoZGV2X3ByaXYt PnBzci5kZWJ1Zyk7CisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGk5 MTVfZWRwX3Bzcl9kZWJ1Z19mb3BzLAorCQkJaTkxNV9lZHBfcHNyX2RlYnVnX2dldCwgaTkxNV9l ZHBfcHNyX2RlYnVnX3NldCwKKwkJCSIlbGx1XG4iKTsKKworc3RhdGljIGludCBpOTE1X3Bvd2Vy X2RvbWFpbl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsK KwlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmRldl9wcml2LT5w b3dlcl9kb21haW5zOworCWludCBpOworCisJbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlucy0+bG9j ayk7CisKKwlzZXFfcHJpbnRmKG0sICIlLTI1cyAlc1xuIiwgIlBvd2VyIHdlbGwvZG9tYWluIiwg IlVzZSBjb3VudCIpOworCWZvciAoaSA9IDA7IGkgPCBwb3dlcl9kb21haW5zLT5wb3dlcl93ZWxs X2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbDsKKwkJ ZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CisKKwkJcG93ZXJf d2VsbCA9ICZwb3dlcl9kb21haW5zLT5wb3dlcl93ZWxsc1tpXTsKKwkJc2VxX3ByaW50ZihtLCAi JS0yNXMgJWRcbiIsIHBvd2VyX3dlbGwtPmRlc2MtPm5hbWUsCisJCQkgICBwb3dlcl93ZWxsLT5j b3VudCk7CisKKwkJZm9yX2VhY2hfcG93ZXJfZG9tYWluKHBvd2VyX2RvbWFpbiwgcG93ZXJfd2Vs bC0+ZGVzYy0+ZG9tYWlucykKKwkJCXNlcV9wcmludGYobSwgIiAgJS0yM3MgJWRcbiIsCisJCQkJ IGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluX3N0cihwb3dlcl9kb21haW4pLAorCQkJCSBwb3dl cl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W3Bvd2VyX2RvbWFpbl0pOworCX0KKworCW11dGV4 X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBpOTE1X2RtY19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2 YXRlKTsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwlzdHJ1Y3QgaW50ZWxfY3NyICpjc3I7 CisJaTkxNV9yZWdfdCBkYzVfcmVnLCBkYzZfcmVnID0ge307CisKKwlpZiAoIUhBU19DU1IoZGV2 X3ByaXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNzciA9ICZkZXZfcHJpdi0+Y3NyOworCisJ d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7CisK KwlzZXFfcHJpbnRmKG0sICJmdyBsb2FkZWQ6ICVzXG4iLCB5ZXNubyhjc3ItPmRtY19wYXlsb2Fk ICE9IE5VTEwpKTsKKwlzZXFfcHJpbnRmKG0sICJwYXRoOiAlc1xuIiwgY3NyLT5md19wYXRoKTsK KworCWlmICghY3NyLT5kbWNfcGF5bG9hZCkKKwkJZ290byBvdXQ7CisKKwlzZXFfcHJpbnRmKG0s ICJ2ZXJzaW9uOiAlZC4lZFxuIiwgQ1NSX1ZFUlNJT05fTUFKT1IoY3NyLT52ZXJzaW9uKSwKKwkJ ICAgQ1NSX1ZFUlNJT05fTUlOT1IoY3NyLT52ZXJzaW9uKSk7CisKKwlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMikgeworCQlkYzVfcmVnID0gVEdMX0RNQ19ERUJVR19EQzVfQ09VTlQ7CisJ CWRjNl9yZWcgPSBUR0xfRE1DX0RFQlVHX0RDNl9DT1VOVDsKKwkJLyoKKwkJICogTk9URTogRE1D X0RFQlVHMyBpcyBhIGdlbmVyYWwgcHVycG9zZSByZWcuCisJCSAqIEFjY29yZGluZyB0byBCLlNw ZWNzOjQ5MTk2IERNQyBmL3cgcmV1c2VzIERDNS82IGNvdW50ZXIKKwkJICogcmVnIGZvciBEQzND TyBkZWJ1Z2dpbmcgYW5kIHZhbGlkYXRpb24sCisJCSAqIGJ1dCBUR0wgRE1DIGYvdyBpcyB1c2lu ZyBETUNfREVCVUczIHJlZyBmb3IgREMzQ08gY291bnRlci4KKwkJICovCisJCXNlcV9wcmludGYo bSwgIkRDM0NPIGNvdW50OiAlZFxuIiwgSTkxNV9SRUFEKERNQ19ERUJVRzMpKTsKKwl9IGVsc2Ug eworCQlkYzVfcmVnID0gSVNfQlJPWFRPTihkZXZfcHJpdikgPyBCWFRfQ1NSX0RDM19EQzVfQ09V TlQgOgorCQkJCQkJIFNLTF9DU1JfREMzX0RDNV9DT1VOVDsKKwkJaWYgKCFJU19HRU45X0xQKGRl dl9wcml2KSkKKwkJCWRjNl9yZWcgPSBTS0xfQ1NSX0RDNV9EQzZfQ09VTlQ7CisJfQorCisJc2Vx X3ByaW50ZihtLCAiREMzIC0+IERDNSBjb3VudDogJWRcbiIsIEk5MTVfUkVBRChkYzVfcmVnKSk7 CisJaWYgKGRjNl9yZWcucmVnKQorCQlzZXFfcHJpbnRmKG0sICJEQzUgLT4gREM2IGNvdW50OiAl ZFxuIiwgSTkxNV9SRUFEKGRjNl9yZWcpKTsKKworb3V0OgorCXNlcV9wcmludGYobSwgInByb2dy YW0gYmFzZTogMHglMDh4XG4iLCBJOTE1X1JFQUQoQ1NSX1BST0dSQU0oMCkpKTsKKwlzZXFfcHJp bnRmKG0sICJzc3AgYmFzZTogMHglMDh4XG4iLCBJOTE1X1JFQUQoQ1NSX1NTUF9CQVNFKSk7CisJ c2VxX3ByaW50ZihtLCAiaHRwOiAweCUwOHhcbiIsIEk5MTVfUkVBRChDU1JfSFRQX1NLTCkpOwor CisJaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9zZXFfcHJpbnRfbW9kZShzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIGludCB0YWJzLAorCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0YWJzOyBpKyspCisJ CXNlcV9wdXRjKG0sICdcdCcpOworCisJc2VxX3ByaW50ZihtLCBEUk1fTU9ERV9GTVQgIlxuIiwg RFJNX01PREVfQVJHKG1vZGUpKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZW5jb2Rlcl9pbmZv KHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywK KwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7CisJc3Ry dWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yOworCisJc2VxX3ByaW50ZihtLCAiXHRbRU5DT0RFUjolZDolc106IGNv bm5lY3RvcnM6XG4iLAorCQkgICBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsIGVuY29kZXItPmJhc2Uu bmFtZSk7CisKKwlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdpbigmZGV2X3ByaXYtPmRybSwg JmNvbm5faXRlcik7CisJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNv bm5faXRlcikgeworCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0 ZSA9CisJCQljb25uZWN0b3ItPnN0YXRlOworCisJCWlmIChjb25uX3N0YXRlLT5iZXN0X2VuY29k ZXIgIT0gJmVuY29kZXItPmJhc2UpCisJCQljb250aW51ZTsKKworCQlzZXFfcHJpbnRmKG0sICJc dFx0W0NPTk5FQ1RPUjolZDolc11cbiIsCisJCQkgICBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5l Y3Rvci0+bmFtZSk7CisJfQorCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVy KTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcGFuZWxfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHN0cnVjdCBpbnRlbF9wYW5lbCAqcGFuZWwpCit7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUgPSBwYW5lbC0+Zml4ZWRfbW9kZTsKKworCXNlcV9wcmludGYobSwgIlx0Zml4 ZWQgbW9kZTogIiBEUk1fTU9ERV9GTVQgIlxuIiwgRFJNX01PREVfQVJHKG1vZGUpKTsKK30KKwor c3RhdGljIHZvaWQgaW50ZWxfaGRjcF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCSAgICBz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IpCit7CisJYm9vbCBoZGNwX2Nh cCwgaGRjcDJfY2FwOworCisJaGRjcF9jYXAgPSBpbnRlbF9oZGNwX2NhcGFibGUoaW50ZWxfY29u bmVjdG9yKTsKKwloZGNwMl9jYXAgPSBpbnRlbF9oZGNwMl9jYXBhYmxlKGludGVsX2Nvbm5lY3Rv cik7CisKKwlpZiAoaGRjcF9jYXApCisJCXNlcV9wdXRzKG0sICJIRENQMS40ICIpOworCWlmICho ZGNwMl9jYXApCisJCXNlcV9wdXRzKG0sICJIRENQMi4yICIpOworCisJaWYgKCFoZGNwX2NhcCAm JiAhaGRjcDJfY2FwKQorCQlzZXFfcHV0cyhtLCAiTm9uZSIpOworCisJc2VxX3B1dHMobSwgIlxu Iik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2RwX2luZm8oc3RydWN0IHNlcV9maWxlICptLAor CQkJICBzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IpCit7CisJc3RydWN0 IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9lbmNvZGVyKGlu dGVsX2Nvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRl bF9kcChpbnRlbF9lbmNvZGVyKTsKKworCXNlcV9wcmludGYobSwgIlx0RFBDRCByZXY6ICV4XG4i LCBpbnRlbF9kcC0+ZHBjZFtEUF9EUENEX1JFVl0pOworCXNlcV9wcmludGYobSwgIlx0YXVkaW8g c3VwcG9ydDogJXNcbiIsIHllc25vKGludGVsX2RwLT5oYXNfYXVkaW8pKTsKKwlpZiAoaW50ZWxf Y29ubmVjdG9yLT5iYXNlLmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAp CisJCWludGVsX3BhbmVsX2luZm8obSwgJmludGVsX2Nvbm5lY3Rvci0+cGFuZWwpOworCisJZHJt X2RwX2Rvd25zdHJlYW1fZGVidWcobSwgaW50ZWxfZHAtPmRwY2QsIGludGVsX2RwLT5kb3duc3Ry ZWFtX3BvcnRzLAorCQkJCSZpbnRlbF9kcC0+YXV4KTsKKwlpZiAoaW50ZWxfY29ubmVjdG9yLT5o ZGNwLnNoaW0pIHsKKwkJc2VxX3B1dHMobSwgIlx0SERDUCB2ZXJzaW9uOiAiKTsKKwkJaW50ZWxf aGRjcF9pbmZvKG0sIGludGVsX2Nvbm5lY3Rvcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRl bF9kcF9tc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCisJCQkgIHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxf ZW5jb2RlciA9IGludGVsX2F0dGFjaGVkX2VuY29kZXIoaW50ZWxfY29ubmVjdG9yKTsKKwlzdHJ1 Y3QgaW50ZWxfZHBfbXN0X2VuY29kZXIgKmludGVsX21zdCA9CisJCWVuY190b19tc3QoaW50ZWxf ZW5jb2Rlcik7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBp bnRlbF9tc3QtPnByaW1hcnk7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9ICZpbnRlbF9k aWdfcG9ydC0+ZHA7CisJYm9vbCBoYXNfYXVkaW8gPSBkcm1fZHBfbXN0X3BvcnRfaGFzX2F1ZGlv KCZpbnRlbF9kcC0+bXN0X21nciwKKwkJCQkJaW50ZWxfY29ubmVjdG9yLT5wb3J0KTsKKworCXNl cV9wcmludGYobSwgIlx0YXVkaW8gc3VwcG9ydDogJXNcbiIsIHllc25vKGhhc19hdWRpbykpOwor fQorCitzdGF0aWMgdm9pZCBpbnRlbF9oZG1pX2luZm8oc3RydWN0IHNlcV9maWxlICptLAorCQkJ ICAgIHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKK3sKKwlzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciA9IGludGVsX2F0dGFjaGVkX2VuY29kZXIoaW50 ZWxfY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfaGRtaSAqaW50ZWxfaGRtaSA9IGVuY190b19p bnRlbF9oZG1pKGludGVsX2VuY29kZXIpOworCisJc2VxX3ByaW50ZihtLCAiXHRhdWRpbyBzdXBw b3J0OiAlc1xuIiwgeWVzbm8oaW50ZWxfaGRtaS0+aGFzX2F1ZGlvKSk7CisJaWYgKGludGVsX2Nv bm5lY3Rvci0+aGRjcC5zaGltKSB7CisJCXNlcV9wdXRzKG0sICJcdEhEQ1AgdmVyc2lvbjogIik7 CisJCWludGVsX2hkY3BfaW5mbyhtLCBpbnRlbF9jb25uZWN0b3IpOworCX0KK30KKworc3RhdGlj IHZvaWQgaW50ZWxfbHZkc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCSAgICBzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IpCit7CisJaW50ZWxfcGFuZWxfaW5mbyht LCAmaW50ZWxfY29ubmVjdG9yLT5wYW5lbCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Nvbm5l Y3Rvcl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3Ig PSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSA9IGNvbm5lY3Rvci0+c3RhdGU7CisJc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIgPQorCQl0b19pbnRlbF9lbmNvZGVyKGNvbm5fc3RhdGUtPmJlc3Rf ZW5jb2Rlcik7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwlzZXFf cHJpbnRmKG0sICJbQ09OTkVDVE9SOiVkOiVzXTogc3RhdHVzOiAlc1xuIiwKKwkJICAgY29ubmVj dG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCisJCSAgIGRybV9nZXRfY29ubmVjdG9yX3N0 YXR1c19uYW1lKGNvbm5lY3Rvci0+c3RhdHVzKSk7CisKKwlpZiAoY29ubmVjdG9yLT5zdGF0dXMg PT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpCisJCXJldHVybjsKKworCXNlcV9wcmlu dGYobSwgIlx0cGh5c2ljYWwgZGltZW5zaW9uczogJWR4JWRtbVxuIiwKKwkJICAgY29ubmVjdG9y LT5kaXNwbGF5X2luZm8ud2lkdGhfbW0sCisJCSAgIGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhl aWdodF9tbSk7CisJc2VxX3ByaW50ZihtLCAiXHRzdWJwaXhlbCBvcmRlcjogJXNcbiIsCisJCSAg IGRybV9nZXRfc3VicGl4ZWxfb3JkZXJfbmFtZShjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJw aXhlbF9vcmRlcikpOworCXNlcV9wcmludGYobSwgIlx0Q0VBIHJldjogJWRcbiIsIGNvbm5lY3Rv ci0+ZGlzcGxheV9pbmZvLmNlYV9yZXYpOworCisJaWYgKCFlbmNvZGVyKQorCQlyZXR1cm47CisK Kwlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKKwljYXNlIERSTV9NT0RFX0NP Tk5FQ1RPUl9EaXNwbGF5UG9ydDoKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA6CisJCWlm IChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1QpCisJCQlpbnRlbF9kcF9tc3Rf aW5mbyhtLCBpbnRlbF9jb25uZWN0b3IpOworCQllbHNlCisJCQlpbnRlbF9kcF9pbmZvKG0sIGlu dGVsX2Nvbm5lY3Rvcik7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6 CisJCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9MVkRTKQorCQkJaW50ZWxfbHZk c19pbmZvKG0sIGludGVsX2Nvbm5lY3Rvcik7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfQ09O TkVDVE9SX0hETUlBOgorCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfSERNSSB8 fAorCQkgICAgZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRERJKQorCQkJaW50ZWxfaGRt aV9pbmZvKG0sIGludGVsX2Nvbm5lY3Rvcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFr OworCX0KKworCXNlcV9wcmludGYobSwgIlx0bW9kZXM6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KG1vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKQorCQlpbnRlbF9zZXFfcHJpbnRfbW9k ZShtLCAyLCBtb2RlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBsYW5lX3R5cGUoZW51bSBk cm1fcGxhbmVfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRFJNX1BMQU5F X1RZUEVfT1ZFUkxBWToKKwkJcmV0dXJuICJPVkwiOworCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWToKKwkJcmV0dXJuICJQUkkiOworCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOgorCQly ZXR1cm4gIkNVUiI7CisJLyoKKwkgKiBEZWxpYmVyYXRlbHkgb21pdHRpbmcgZGVmYXVsdDogdG8g Z2VuZXJhdGUgY29tcGlsZXIgd2FybmluZ3MKKwkgKiB3aGVuIGEgbmV3IGRybV9wbGFuZV90eXBl IGdldHMgYWRkZWQuCisJICovCisJfQorCisJcmV0dXJuICJ1bmtub3duIjsKK30KKworc3RhdGlj IHZvaWQgcGxhbmVfcm90YXRpb24oY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgdW5zaWduZWQg aW50IHJvdGF0aW9uKQoreworCS8qCisJICogQWNjb3JkaW5nIHRvIGRvYyBvbmx5IG9uZSBEUk1f TU9ERV9ST1RBVEVfIGlzIGFsbG93ZWQgYnV0IHRoaXMKKwkgKiB3aWxsIHByaW50IHRoZW0gYWxs IHRvIHZpc3VhbGl6ZSBpZiB0aGUgdmFsdWVzIGFyZSBtaXN1c2VkCisJICovCisJc25wcmludGYo YnVmLCBidWZzaXplLAorCQkgIiVzJXMlcyVzJXMlcygweCUwOHgpIiwKKwkJIChyb3RhdGlvbiAm IERSTV9NT0RFX1JPVEFURV8wKSA/ICIwICIgOiAiIiwKKwkJIChyb3RhdGlvbiAmIERSTV9NT0RF X1JPVEFURV85MCkgPyAiOTAgIiA6ICIiLAorCQkgKHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRF XzE4MCkgPyAiMTgwICIgOiAiIiwKKwkJIChyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8yNzAp ID8gIjI3MCAiIDogIiIsCisJCSAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpID8gIkZM SVBYICIgOiAiIiwKKwkJIChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWSkgPyAiRkxJUFkg IiA6ICIiLAorCQkgcm90YXRpb24pOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbGFuZV91YXBp X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lKQorewor CWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUgPQorCQl0b19pbnRl bF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5zdGF0ZSk7CisJY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+dWFwaS5mYjsKKwlzdHJ1Y3QgZHJtX2Zvcm1hdF9u YW1lX2J1ZiBmb3JtYXRfbmFtZTsKKwlzdHJ1Y3QgZHJtX3JlY3Qgc3JjLCBkc3Q7CisJY2hhciBy b3Rfc3RyWzQ4XTsKKworCXNyYyA9IGRybV9wbGFuZV9zdGF0ZV9zcmMoJnBsYW5lX3N0YXRlLT51 YXBpKTsKKwlkc3QgPSBkcm1fcGxhbmVfc3RhdGVfZGVzdCgmcGxhbmVfc3RhdGUtPnVhcGkpOwor CisJaWYgKGZiKQorCQlkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5mb3JtYXQtPmZvcm1hdCwgJmZv cm1hdF9uYW1lKTsKKworCXBsYW5lX3JvdGF0aW9uKHJvdF9zdHIsIHNpemVvZihyb3Rfc3RyKSwK KwkJICAgICAgIHBsYW5lX3N0YXRlLT51YXBpLnJvdGF0aW9uKTsKKworCXNlcV9wcmludGYobSwg Ilx0XHR1YXBpOiBmYj0lZCwlcywlZHglZCwgc3JjPSIgRFJNX1JFQ1RfRlBfRk1UICIsIGRzdD0i IERSTV9SRUNUX0ZNVCAiLCByb3RhdGlvbj0lc1xuIiwKKwkJICAgZmIgPyBmYi0+YmFzZS5pZCA6 IDAsIGZiID8gZm9ybWF0X25hbWUuc3RyIDogIm4vYSIsCisJCSAgIGZiID8gZmItPndpZHRoIDog MCwgZmIgPyBmYi0+aGVpZ2h0IDogMCwKKwkJICAgRFJNX1JFQ1RfRlBfQVJHKCZzcmMpLAorCQkg ICBEUk1fUkVDVF9BUkcoJmRzdCksCisJCSAgIHJvdF9zdHIpOworfQorCitzdGF0aWMgdm9pZCBp bnRlbF9wbGFuZV9od19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSkKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl ID0KKwkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOworCWNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCXN0cnVjdCBk cm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOworCWNoYXIgcm90X3N0cls0OF07CisKKwlp ZiAoIWZiKQorCQlyZXR1cm47CisKKwlkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5mb3JtYXQtPmZv cm1hdCwgJmZvcm1hdF9uYW1lKTsKKworCXBsYW5lX3JvdGF0aW9uKHJvdF9zdHIsIHNpemVvZihy b3Rfc3RyKSwKKwkJICAgICAgIHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbik7CisKKwlzZXFfcHJp bnRmKG0sICJcdFx0aHc6IGZiPSVkLCVzLCVkeCVkLCB2aXNpYmxlPSVzLCBzcmM9IiBEUk1fUkVD VF9GUF9GTVQgIiwgZHN0PSIgRFJNX1JFQ1RfRk1UICIsIHJvdGF0aW9uPSVzXG4iLAorCQkgICBm Yi0+YmFzZS5pZCwgZm9ybWF0X25hbWUuc3RyLAorCQkgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQs CisJCSAgIHllc25vKHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpLAorCQkgICBEUk1fUkVDVF9G UF9BUkcoJnBsYW5lX3N0YXRlLT51YXBpLnNyYyksCisJCSAgIERSTV9SRUNUX0FSRygmcGxhbmVf c3RhdGUtPnVhcGkuZHN0KSwKKwkJICAgcm90X3N0cik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVs X3BsYW5lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+ cHJpdmF0ZSk7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKKworCWZvcl9lYWNoX2ludGVs X3BsYW5lX29uX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMsIHBsYW5lKSB7CisJCXNlcV9wcmlu dGYobSwgIlx0W1BMQU5FOiVkOiVzXTogdHlwZT0lc1xuIiwKKwkJCSAgIHBsYW5lLT5iYXNlLmJh c2UuaWQsIHBsYW5lLT5iYXNlLm5hbWUsCisJCQkgICBwbGFuZV90eXBlKHBsYW5lLT5iYXNlLnR5 cGUpKTsKKwkJaW50ZWxfcGxhbmVfdWFwaV9pbmZvKG0sIHBsYW5lKTsKKwkJaW50ZWxfcGxhbmVf aHdfaW5mbyhtLCBwbGFuZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRlbF9zY2FsZXJfaW5m byhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCWNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KKwkJdG9faW50ZWxfY3J0Y19z dGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKKwlpbnQgbnVtX3NjYWxlcnMgPSBjcnRjLT5udW1fc2Nh bGVyczsKKwlpbnQgaTsKKworCS8qIE5vdCBhbGwgcGxhdGZvcm1hcyBoYXZlIGEgc2NhbGVyICov CisJaWYgKG51bV9zY2FsZXJzKSB7CisJCXNlcV9wcmludGYobSwgIlx0bnVtX3NjYWxlcnM9JWQs IHNjYWxlcl91c2Vycz0leCBzY2FsZXJfaWQ9JWQiLAorCQkJICAgbnVtX3NjYWxlcnMsCisJCQkg ICBjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGUuc2NhbGVyX3VzZXJzLAorCQkJICAgY3J0Y19zdGF0 ZS0+c2NhbGVyX3N0YXRlLnNjYWxlcl9pZCk7CisKKwkJZm9yIChpID0gMDsgaSA8IG51bV9zY2Fs ZXJzOyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9zY2FsZXIgKnNjID0KKwkJCQkmY3J0 Y19zdGF0ZS0+c2NhbGVyX3N0YXRlLnNjYWxlcnNbaV07CisKKwkJCXNlcV9wcmludGYobSwgIiwg c2NhbGVyc1slZF06IHVzZT0lcywgbW9kZT0leCIsCisJCQkJICAgaSwgeWVzbm8oc2MtPmluX3Vz ZSksIHNjLT5tb2RlKTsKKwkJfQorCQlzZXFfcHV0cyhtLCAiXG4iKTsKKwl9IGVsc2UgeworCQlz ZXFfcHV0cyhtLCAiXHRObyBzY2FsZXJzIGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtXG4iKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9CisJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFz ZS5zdGF0ZSk7CisJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisKKwlzZXFfcHJpbnRm KG0sICJbQ1JUQzolZDolc106XG4iLAorCQkgICBjcnRjLT5iYXNlLmJhc2UuaWQsIGNydGMtPmJh c2UubmFtZSk7CisKKwlzZXFfcHJpbnRmKG0sICJcdHVhcGk6IGVuYWJsZT0lcywgYWN0aXZlPSVz LCBtb2RlPSIgRFJNX01PREVfRk1UICJcbiIsCisJCSAgIHllc25vKGNydGNfc3RhdGUtPnVhcGku ZW5hYmxlKSwKKwkJICAgeWVzbm8oY3J0Y19zdGF0ZS0+dWFwaS5hY3RpdmUpLAorCQkgICBEUk1f TU9ERV9BUkcoJmNydGNfc3RhdGUtPnVhcGkubW9kZSkpOworCisJaWYgKGNydGNfc3RhdGUtPmh3 LmVuYWJsZSkgeworCQlzZXFfcHJpbnRmKG0sICJcdGh3OiBhY3RpdmU9JXMsIGFkanVzdGVkX21v ZGU9IiBEUk1fTU9ERV9GTVQgIlxuIiwKKwkJCSAgIHllc25vKGNydGNfc3RhdGUtPmh3LmFjdGl2 ZSksCisJCQkgICBEUk1fTU9ERV9BUkcoJmNydGNfc3RhdGUtPmh3LmFkanVzdGVkX21vZGUpKTsK KworCQlzZXFfcHJpbnRmKG0sICJcdHBpcGUgc3JjIHNpemU9JWR4JWQsIGRpdGhlcj0lcywgYnBw PSVkXG4iLAorCQkJICAgY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdywgY3J0Y19zdGF0ZS0+cGlwZV9z cmNfaCwKKwkJCSAgIHllc25vKGNydGNfc3RhdGUtPmRpdGhlciksIGNydGNfc3RhdGUtPnBpcGVf YnBwKTsKKworCQlpbnRlbF9zY2FsZXJfaW5mbyhtLCBjcnRjKTsKKwl9CisKKwlmb3JfZWFjaF9p bnRlbF9lbmNvZGVyX21hc2soJmRldl9wcml2LT5kcm0sIGVuY29kZXIsCisJCQkJICAgIGNydGNf c3RhdGUtPnVhcGkuZW5jb2Rlcl9tYXNrKQorCQlpbnRlbF9lbmNvZGVyX2luZm8obSwgY3J0Yywg ZW5jb2Rlcik7CisKKwlpbnRlbF9wbGFuZV9pbmZvKG0sIGNydGMpOworCisJc2VxX3ByaW50Ziht LCAiXHR1bmRlcnJ1biByZXBvcnRpbmc6IGNwdT0lcyBwY2g9JXNcbiIsCisJCSAgIHllc25vKCFj cnRjLT5jcHVfZmlmb191bmRlcnJ1bl9kaXNhYmxlZCksCisJCSAgIHllc25vKCFjcnRjLT5wY2hf Zmlmb191bmRlcnJ1bl9kaXNhYmxlZCkpOworfQorCitzdGF0aWMgaW50IGk5MTVfZGlzcGxheV9p bmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CisJc3RydWN0IGludGVsX2NydGMgKmNy dGM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCisJ d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7CisK Kwlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOworCisJc2VxX3ByaW50ZihtLCAiQ1JUQyBpbmZv XG4iKTsKKwlzZXFfcHJpbnRmKG0sICItLS0tLS0tLS1cbiIpOworCWZvcl9lYWNoX2ludGVsX2Ny dGMoZGV2LCBjcnRjKQorCQlpbnRlbF9jcnRjX2luZm8obSwgY3J0Yyk7CisKKwlzZXFfcHJpbnRm KG0sICJcbiIpOworCXNlcV9wcmludGYobSwgIkNvbm5lY3RvciBpbmZvXG4iKTsKKwlzZXFfcHJp bnRmKG0sICItLS0tLS0tLS0tLS0tLVxuIik7CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVn aW4oZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIoY29ubmVj dG9yLCAmY29ubl9pdGVyKQorCQlpbnRlbF9jb25uZWN0b3JfaW5mbyhtLCBjb25uZWN0b3IpOwor CWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKKworCWRybV9tb2Rlc2V0 X3VubG9ja19hbGwoZGV2KTsKKworCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVu dGltZV9wbSwgd2FrZXJlZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3No YXJlZF9kcGxsc19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRl KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CisJaW50IGk7CisK Kwlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+ bnVtX3NoYXJlZF9kcGxsOyBpKyspIHsKKwkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwg PSAmZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXTsKKworCQlzZXFfcHJpbnRmKG0sICJEUExMJWk6 ICVzLCBpZDogJWlcbiIsIGksIHBsbC0+aW5mby0+bmFtZSwKKwkJCSAgIHBsbC0+aW5mby0+aWQp OworCQlzZXFfcHJpbnRmKG0sICIgY3J0Y19tYXNrOiAweCUwOHgsIGFjdGl2ZTogMHgleCwgb246 ICVzXG4iLAorCQkJICAgcGxsLT5zdGF0ZS5jcnRjX21hc2ssIHBsbC0+YWN0aXZlX21hc2ssIHll c25vKHBsbC0+b24pKTsKKwkJc2VxX3ByaW50ZihtLCAiIHRyYWNrZWQgaGFyZHdhcmUgc3RhdGU6 XG4iKTsKKwkJc2VxX3ByaW50ZihtLCAiIGRwbGw6ICAgIDB4JTA4eFxuIiwgcGxsLT5zdGF0ZS5o d19zdGF0ZS5kcGxsKTsKKwkJc2VxX3ByaW50ZihtLCAiIGRwbGxfbWQ6IDB4JTA4eFxuIiwKKwkJ CSAgIHBsbC0+c3RhdGUuaHdfc3RhdGUuZHBsbF9tZCk7CisJCXNlcV9wcmludGYobSwgIiBmcDA6 ICAgICAweCUwOHhcbiIsIHBsbC0+c3RhdGUuaHdfc3RhdGUuZnAwKTsKKwkJc2VxX3ByaW50Ziht LCAiIGZwMTogICAgIDB4JTA4eFxuIiwgcGxsLT5zdGF0ZS5od19zdGF0ZS5mcDEpOworCQlzZXFf cHJpbnRmKG0sICIgd3JwbGw6ICAgMHglMDh4XG4iLCBwbGwtPnN0YXRlLmh3X3N0YXRlLndycGxs KTsKKwkJc2VxX3ByaW50ZihtLCAiIGNmZ2NyMDogIDB4JTA4eFxuIiwgcGxsLT5zdGF0ZS5od19z dGF0ZS5jZmdjcjApOworCQlzZXFfcHJpbnRmKG0sICIgY2ZnY3IxOiAgMHglMDh4XG4iLCBwbGwt PnN0YXRlLmh3X3N0YXRlLmNmZ2NyMSk7CisJCXNlcV9wcmludGYobSwgIiBtZ19yZWZjbGtpbl9j dGw6ICAgICAgICAweCUwOHhcbiIsCisJCQkgICBwbGwtPnN0YXRlLmh3X3N0YXRlLm1nX3JlZmNs a2luX2N0bCk7CisJCXNlcV9wcmludGYobSwgIiBtZ19jbGt0b3AyX2NvcmVjbGtjdGwxOiAweCUw OHhcbiIsCisJCQkgICBwbGwtPnN0YXRlLmh3X3N0YXRlLm1nX2Nsa3RvcDJfY29yZWNsa2N0bDEp OworCQlzZXFfcHJpbnRmKG0sICIgbWdfY2xrdG9wMl9oc2Nsa2N0bDogICAgMHglMDh4XG4iLAor CQkJICAgcGxsLT5zdGF0ZS5od19zdGF0ZS5tZ19jbGt0b3AyX2hzY2xrY3RsKTsKKwkJc2VxX3By aW50ZihtLCAiIG1nX3BsbF9kaXYwOiAgMHglMDh4XG4iLAorCQkJICAgcGxsLT5zdGF0ZS5od19z dGF0ZS5tZ19wbGxfZGl2MCk7CisJCXNlcV9wcmludGYobSwgIiBtZ19wbGxfZGl2MTogIDB4JTA4 eFxuIiwKKwkJCSAgIHBsbC0+c3RhdGUuaHdfc3RhdGUubWdfcGxsX2RpdjEpOworCQlzZXFfcHJp bnRmKG0sICIgbWdfcGxsX2xmOiAgICAweCUwOHhcbiIsCisJCQkgICBwbGwtPnN0YXRlLmh3X3N0 YXRlLm1nX3BsbF9sZik7CisJCXNlcV9wcmludGYobSwgIiBtZ19wbGxfZnJhY19sb2NrOiAweCUw OHhcbiIsCisJCQkgICBwbGwtPnN0YXRlLmh3X3N0YXRlLm1nX3BsbF9mcmFjX2xvY2spOworCQlz ZXFfcHJpbnRmKG0sICIgbWdfcGxsX3NzYzogICAweCUwOHhcbiIsCisJCQkgICBwbGwtPnN0YXRl Lmh3X3N0YXRlLm1nX3BsbF9zc2MpOworCQlzZXFfcHJpbnRmKG0sICIgbWdfcGxsX2JpYXM6ICAw eCUwOHhcbiIsCisJCQkgICBwbGwtPnN0YXRlLmh3X3N0YXRlLm1nX3BsbF9iaWFzKTsKKwkJc2Vx X3ByaW50ZihtLCAiIG1nX3BsbF90ZGNfY29sZHN0X2JpYXM6IDB4JTA4eFxuIiwKKwkJCSAgIHBs bC0+c3RhdGUuaHdfc3RhdGUubWdfcGxsX3RkY19jb2xkc3RfYmlhcyk7CisJfQorCWRybV9tb2Rl c2V0X3VubG9ja19hbGwoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVf aXBjX3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBtLT5wcml2YXRlOworCisJc2VxX3ByaW50 ZihtLCAiSXNvY2hyb25vdXMgUHJpb3JpdHkgQ29udHJvbDogJXNcbiIsCisJCQl5ZXNubyhkZXZf cHJpdi0+aXBjX2VuYWJsZWQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2lw Y19zdGF0dXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBpbm9kZS0+aV9wcml2YXRlOwor CisJaWYgKCFIQVNfSVBDKGRldl9wcml2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4g c2luZ2xlX29wZW4oZmlsZSwgaTkxNV9pcGNfc3RhdHVzX3Nob3csIGRldl9wcml2KTsKK30KKwor c3RhdGljIHNzaXplX3QgaTkxNV9pcGNfc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBj b25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqb2Zm cCkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKKwlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKKwlib29sIGVuYWJsZTsKKwlpbnQgcmV0OworCisJcmV0ID0ga3N0cnRvYm9v bF9mcm9tX3VzZXIodWJ1ZiwgbGVuLCAmZW5hYmxlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJu IHJldDsKKworCXdpdGhfaW50ZWxfcnVudGltZV9wbSgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdh a2VyZWYpIHsKKwkJaWYgKCFkZXZfcHJpdi0+aXBjX2VuYWJsZWQgJiYgZW5hYmxlKQorCQkJZHJt X2luZm8oJmRldl9wcml2LT5kcm0sCisJCQkJICJFbmFibGluZyBJUEM6IFdNIHdpbGwgYmUgcHJv cGVyIG9ubHkgYWZ0ZXIgbmV4dCBjb21taXRcbiIpOworCQlkZXZfcHJpdi0+d20uZGlzdHJ1c3Rf Ymlvc193bSA9IHRydWU7CisJCWRldl9wcml2LT5pcGNfZW5hYmxlZCA9IGVuYWJsZTsKKwkJaW50 ZWxfZW5hYmxlX2lwYyhkZXZfcHJpdik7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9pcGNfc3RhdHVzX2ZvcHMgPSB7CisJ Lm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBpOTE1X2lwY19zdGF0dXNfb3BlbiwKKwku cmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5n bGVfcmVsZWFzZSwKKwkud3JpdGUgPSBpOTE1X2lwY19zdGF0dXNfd3JpdGUKK307CisKK3N0YXRp YyBpbnQgaTkxNV9kZGJfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJp dmF0ZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCXN0cnVj dCBza2xfZGRiX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKKworCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkcm1fbW9k ZXNldF9sb2NrX2FsbChkZXYpOworCisJc2VxX3ByaW50ZihtLCAiJS0xNXMlOHMlOHMlOHNcbiIs ICIiLCAiU3RhcnQiLCAiRW5kIiwgIlNpemUiKTsKKworCWZvcl9lYWNoX2ludGVsX2NydGMoJmRl dl9wcml2LT5kcm0sIGNydGMpIHsKKwkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUgPQorCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKKwkJZW51bSBw aXBlIHBpcGUgPSBjcnRjLT5waXBlOworCQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkOworCisJCXNl cV9wcmludGYobSwgIlBpcGUgJWNcbiIsIHBpcGVfbmFtZShwaXBlKSk7CisKKwkJZm9yX2VhY2hf cGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9pZCkgeworCQkJZW50cnkgPSAmY3J0Y19zdGF0 ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsKKwkJCXNlcV9wcmludGYobSwgIiAgUGxh bmUlLThkJTh1JTh1JTh1XG4iLCBwbGFuZV9pZCArIDEsCisJCQkJICAgZW50cnktPnN0YXJ0LCBl bnRyeS0+ZW5kLAorCQkJCSAgIHNrbF9kZGJfZW50cnlfc2l6ZShlbnRyeSkpOworCQl9CisKKwkJ ZW50cnkgPSAmY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl07CisJ CXNlcV9wcmludGYobSwgIiAgJS0xM3MlOHUlOHUlOHVcbiIsICJDdXJzb3IiLCBlbnRyeS0+c3Rh cnQsCisJCQkgICBlbnRyeS0+ZW5kLCBza2xfZGRiX2VudHJ5X3NpemUoZW50cnkpKTsKKwl9CisK Kwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgZHJyc19zdGF0dXNfcGVyX2NydGMoc3RydWN0IHNlcV9maWxlICptLAorCQkJCSBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJ c3RydWN0IGk5MTVfZHJycyAqZHJycyA9ICZkZXZfcHJpdi0+ZHJyczsKKwlpbnQgdnJlZnJlc2gg PSAwOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25u ZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKKworCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2Jl Z2luKGRldiwgJmNvbm5faXRlcik7CisJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5l Y3RvciwgJmNvbm5faXRlcikgeworCQlpZiAoY29ubmVjdG9yLT5zdGF0ZS0+Y3J0YyAhPSAmaW50 ZWxfY3J0Yy0+YmFzZSkKKwkJCWNvbnRpbnVlOworCisJCXNlcV9wcmludGYobSwgIiVzOlxuIiwg Y29ubmVjdG9yLT5uYW1lKTsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25u X2l0ZXIpOworCisJc2VxX3B1dHMobSwgIlxuIik7CisKKwlpZiAodG9faW50ZWxfY3J0Y19zdGF0 ZShpbnRlbF9jcnRjLT5iYXNlLnN0YXRlKS0+aGFzX2RycnMpIHsKKwkJc3RydWN0IGludGVsX3Bh bmVsICpwYW5lbDsKKworCQltdXRleF9sb2NrKCZkcnJzLT5tdXRleCk7CisJCS8qIERSUlMgU3Vw cG9ydGVkICovCisJCXNlcV9wdXRzKG0sICJcdERSUlMgU3VwcG9ydGVkOiBZZXNcbiIpOworCisJ CS8qIGRpc2FibGVfZHJycygpIHdpbGwgbWFrZSBkcnJzLT5kcCBOVUxMICovCisJCWlmICghZHJy cy0+ZHApIHsKKwkJCXNlcV9wdXRzKG0sICJJZGxlbmVzcyBEUlJTOiBEaXNhYmxlZFxuIik7CisJ CQlpZiAoZGV2X3ByaXYtPnBzci5lbmFibGVkKQorCQkJCXNlcV9wdXRzKG0sCisJCQkJIlx0QXMg UFNSIGlzIGVuYWJsZWQsIERSUlMgaXMgbm90IGVuYWJsZWRcbiIpOworCQkJbXV0ZXhfdW5sb2Nr KCZkcnJzLT5tdXRleCk7CisJCQlyZXR1cm47CisJCX0KKworCQlwYW5lbCA9ICZkcnJzLT5kcC0+ YXR0YWNoZWRfY29ubmVjdG9yLT5wYW5lbDsKKwkJc2VxX3ByaW50ZihtLCAiXHRcdEJ1c3lfZnJv bnRidWZmZXJfYml0czogMHglWCIsCisJCQkJCWRycnMtPmJ1c3lfZnJvbnRidWZmZXJfYml0cyk7 CisKKwkJc2VxX3B1dHMobSwgIlxuXHRcdCIpOworCQlpZiAoZHJycy0+cmVmcmVzaF9yYXRlX3R5 cGUgPT0gRFJSU19ISUdIX1JSKSB7CisJCQlzZXFfcHV0cyhtLCAiRFJSU19TdGF0ZTogRFJSU19I SUdIX1JSXG4iKTsKKwkJCXZyZWZyZXNoID0gcGFuZWwtPmZpeGVkX21vZGUtPnZyZWZyZXNoOwor CQl9IGVsc2UgaWYgKGRycnMtPnJlZnJlc2hfcmF0ZV90eXBlID09IERSUlNfTE9XX1JSKSB7CisJ CQlzZXFfcHV0cyhtLCAiRFJSU19TdGF0ZTogRFJSU19MT1dfUlJcbiIpOworCQkJdnJlZnJlc2gg PSBwYW5lbC0+ZG93bmNsb2NrX21vZGUtPnZyZWZyZXNoOworCQl9IGVsc2UgeworCQkJc2VxX3By aW50ZihtLCAiRFJSU19TdGF0ZTogVW5rbm93biglZClcbiIsCisJCQkJCQlkcnJzLT5yZWZyZXNo X3JhdGVfdHlwZSk7CisJCQltdXRleF91bmxvY2soJmRycnMtPm11dGV4KTsKKwkJCXJldHVybjsK KwkJfQorCQlzZXFfcHJpbnRmKG0sICJcdFx0VnJlZnJlc2g6ICVkIiwgdnJlZnJlc2gpOworCisJ CXNlcV9wdXRzKG0sICJcblx0XHQiKTsKKwkJbXV0ZXhfdW5sb2NrKCZkcnJzLT5tdXRleCk7CisJ fSBlbHNlIHsKKwkJLyogRFJSUyBub3Qgc3VwcG9ydGVkLiBQcmludCB0aGUgVkJUIHBhcmFtZXRl ciovCisJCXNlcV9wdXRzKG0sICJcdERSUlMgU3VwcG9ydGVkIDogTm8iKTsKKwl9CisJc2VxX3B1 dHMobSwgIlxuIik7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9kcnJzX3N0YXR1cyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9ICZkZXZfcHJpdi0+ZHJtOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOworCWlu dCBhY3RpdmVfY3J0Y19jbnQgPSAwOworCisJZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKKwlm b3JfZWFjaF9pbnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0YykgeworCQlpZiAoaW50ZWxfY3J0Yy0+ YmFzZS5zdGF0ZS0+YWN0aXZlKSB7CisJCQlhY3RpdmVfY3J0Y19jbnQrKzsKKwkJCXNlcV9wcmlu dGYobSwgIlxuQ1JUQyAlZDogICIsIGFjdGl2ZV9jcnRjX2NudCk7CisKKwkJCWRycnNfc3RhdHVz X3Blcl9jcnRjKG0sIGRldiwgaW50ZWxfY3J0Yyk7CisJCX0KKwl9CisJZHJtX21vZGVzZXRfdW5s b2NrX2FsbChkZXYpOworCisJaWYgKCFhY3RpdmVfY3J0Y19jbnQpCisJCXNlcV9wdXRzKG0sICJO byBhY3RpdmUgY3J0YyBmb3VuZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBp OTE1X2RwX21zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRl KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CisJc3RydWN0IGlu dGVsX2VuY29kZXIgKmludGVsX2VuY29kZXI7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq aW50ZWxfZGlnX3BvcnQ7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOworCisJZHJtX2Nvbm5lY3Rvcl9s aXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fZm9yX2VhY2hfY29ubmVjdG9y X2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7CisJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rv cl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKKwkJCWNvbnRpbnVlOwor CisJCWludGVsX2VuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9lbmNvZGVyKHRvX2ludGVsX2Nvbm5l Y3Rvcihjb25uZWN0b3IpKTsKKwkJaWYgKCFpbnRlbF9lbmNvZGVyIHx8IGludGVsX2VuY29kZXIt PnR5cGUgPT0gSU5URUxfT1VUUFVUX0RQX01TVCkKKwkJCWNvbnRpbnVlOworCisJCWludGVsX2Rp Z19wb3J0ID0gZW5jX3RvX2RpZ19wb3J0KGludGVsX2VuY29kZXIpOworCQlpZiAoIWludGVsX2Rp Z19wb3J0LT5kcC5jYW5fbXN0KQorCQkJY29udGludWU7CisKKwkJc2VxX3ByaW50ZihtLCAiTVNU IFNvdXJjZSBQb3J0IFtFTkNPREVSOiVkOiVzXVxuIiwKKwkJCSAgIGludGVsX2RpZ19wb3J0LT5i YXNlLmJhc2UuYmFzZS5pZCwKKwkJCSAgIGludGVsX2RpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7 CisJCWRybV9kcF9tc3RfZHVtcF90b3BvbG9neShtLCAmaW50ZWxfZGlnX3BvcnQtPmRwLm1zdF9t Z3IpOworCX0KKwlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaTkxNV9kaXNwbGF5cG9ydF90ZXN0X2FjdGl2 ZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVi dWYsCisJCQkJCQkgIHNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmcCkKK3sKKwljaGFyICppbnB1dF9i dWZmZXI7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3Rf aXRlciBjb25uX2l0ZXI7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcDsKKwlpbnQgdmFsID0g MDsKKworCWRldiA9ICgoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhKS0+cHJp dmF0ZTsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpbnB1dF9idWZmZXIgPSBt ZW1kdXBfdXNlcl9udWwodWJ1ZiwgbGVuKTsKKwlpZiAoSVNfRVJSKGlucHV0X2J1ZmZlcikpCisJ CXJldHVybiBQVFJfRVJSKGlucHV0X2J1ZmZlcik7CisKKwlkcm1fZGJnKCZ0b19pOTE1KGRldikt PmRybSwKKwkJIkNvcGllZCAlZCBieXRlcyBmcm9tIHVzZXJcbiIsICh1bnNpZ25lZCBpbnQpbGVu KTsKKworCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7CisJ ZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikgeworCQlz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKKworCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0 b3JfdHlwZSAhPQorCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KQorCQkJY29u dGludWU7CisKKwkJZW5jb2RlciA9IHRvX2ludGVsX2VuY29kZXIoY29ubmVjdG9yLT5lbmNvZGVy KTsKKwkJaWYgKGVuY29kZXIgJiYgZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRFBfTVNU KQorCQkJY29udGludWU7CisKKwkJaWYgKGVuY29kZXIgJiYgY29ubmVjdG9yLT5zdGF0dXMgPT0g Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKKwkJCWludGVsX2RwID0gZW5jX3RvX2ludGVs X2RwKGVuY29kZXIpOworCQkJc3RhdHVzID0ga3N0cnRvaW50KGlucHV0X2J1ZmZlciwgMTAsICZ2 YWwpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCQlkcm1fZGJnKCZ0b19pOTE1 KGRldiktPmRybSwKKwkJCQkiR290ICVkIGZvciB0ZXN0IGFjdGl2ZVxuIiwgdmFsKTsKKwkJCS8q IFRvIHByZXZlbnQgZXJyb25lb3VzIGFjdGl2YXRpb24gb2YgdGhlIGNvbXBsaWFuY2UKKwkJCSAq IHRlc3RpbmcgY29kZSwgb25seSBhY2NlcHQgYW4gYWN0dWFsIHZhbHVlIG9mIDEgaGVyZQorCQkJ ICovCisJCQlpZiAodmFsID09IDEpCisJCQkJaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9hY3Rp dmUgPSB0cnVlOworCQkJZWxzZQorCQkJCWludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfYWN0aXZl ID0gZmFsc2U7CisJCX0KKwl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0 ZXIpOworCWtmcmVlKGlucHV0X2J1ZmZlcik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBz dGF0dXM7CisKKwkqb2ZmcCArPSBsZW47CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBp OTE1X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0aXZlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICpkYXRhKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG0tPnByaXZh dGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVy IGNvbm5faXRlcjsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOworCisJZHJtX2Nvbm5lY3Rv cl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fZm9yX2VhY2hfY29ubmVj dG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7CisJCXN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyOworCisJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9CisJCSAgICBE Uk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCisJCQljb250aW51ZTsKKworCQllbmNvZGVy ID0gdG9faW50ZWxfZW5jb2Rlcihjb25uZWN0b3ItPmVuY29kZXIpOworCQlpZiAoZW5jb2RlciAm JiBlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1QpCisJCQljb250aW51ZTsKKwor CQlpZiAoZW5jb2RlciAmJiBjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZCkgeworCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisJCQlp ZiAoaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9hY3RpdmUpCisJCQkJc2VxX3B1dHMobSwgIjEi KTsKKwkJCWVsc2UKKwkJCQlzZXFfcHV0cyhtLCAiMCIpOworCQl9IGVsc2UKKwkJCXNlcV9wdXRz KG0sICIwIik7CisJfQorCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfZGlzcGxheXBvcnRfdGVzdF9hY3Rp dmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxl KQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpOTE1X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0 aXZlX3Nob3csCisJCQkgICBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9kaXNwbGF5cG9ydF90ZXN0X2FjdGl2ZV9mb3BzID0g eworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gaTkxNV9kaXNwbGF5cG9ydF90ZXN0 X2FjdGl2ZV9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywK KwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZSA9IGk5MTVfZGlzcGxheXBvcnRf dGVzdF9hY3RpdmVfd3JpdGUKK307CisKK3N0YXRpYyBpbnQgaTkxNV9kaXNwbGF5cG9ydF90ZXN0 X2RhdGFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOworCXN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHA7CisKKwlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdpbihkZXYs ICZjb25uX2l0ZXIpOworCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZj b25uX2l0ZXIpIHsKKwkJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisKKwkJaWYgKGNv bm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0KKwkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNw bGF5UG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWVuY29kZXIgPSB0b19pbnRlbF9lbmNvZGVyKGNv bm5lY3Rvci0+ZW5jb2Rlcik7CisJCWlmIChlbmNvZGVyICYmIGVuY29kZXItPnR5cGUgPT0gSU5U RUxfT1VUUFVUX0RQX01TVCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlbmNvZGVyICYmIGNvbm5l Y3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7CisJCQlpbnRlbF9k cCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKKwkJCWlmIChpbnRlbF9kcC0+Y29tcGxpYW5j ZS50ZXN0X3R5cGUgPT0KKwkJCSAgICBEUF9URVNUX0xJTktfRURJRF9SRUFEKQorCQkJCXNlcV9w cmludGYobSwgIiVseCIsCisJCQkJCSAgIGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfZGF0YS5l ZGlkKTsKKwkJCWVsc2UgaWYgKGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfdHlwZSA9PQorCQkJ CSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikgeworCQkJCXNlcV9wcmludGYobSwgImhkaXNw bGF5OiAlZFxuIiwKKwkJCQkJICAgaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9kYXRhLmhkaXNw bGF5KTsKKwkJCQlzZXFfcHJpbnRmKG0sICJ2ZGlzcGxheTogJWRcbiIsCisJCQkJCSAgIGludGVs X2RwLT5jb21wbGlhbmNlLnRlc3RfZGF0YS52ZGlzcGxheSk7CisJCQkJc2VxX3ByaW50ZihtLCAi YnBjOiAldVxuIiwKKwkJCQkJICAgaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9kYXRhLmJwYyk7 CisJCQl9CisJCX0gZWxzZQorCQkJc2VxX3B1dHMobSwgIjAiKTsKKwl9CisJZHJtX2Nvbm5lY3Rv cl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOworCisJcmV0dXJuIDA7Cit9CitERUZJTkVfU0hP V19BVFRSSUJVVEUoaTkxNV9kaXNwbGF5cG9ydF90ZXN0X2RhdGEpOworCitzdGF0aWMgaW50IGk5 MTVfZGlzcGxheXBvcnRfdGVzdF90eXBlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpk YXRhKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVyIGNv bm5faXRlcjsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOworCisJZHJtX2Nvbm5lY3Rvcl9s aXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fZm9yX2VhY2hfY29ubmVjdG9y X2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7CisJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyOworCisJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9CisJCSAgICBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCisJCQljb250aW51ZTsKKworCQllbmNvZGVyID0g dG9faW50ZWxfZW5jb2Rlcihjb25uZWN0b3ItPmVuY29kZXIpOworCQlpZiAoZW5jb2RlciAmJiBl bmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1QpCisJCQljb250aW51ZTsKKworCQlp ZiAoZW5jb2RlciAmJiBjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5l Y3RlZCkgeworCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisJCQlzZXFf cHJpbnRmKG0sICIlMDJseCIsIGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfdHlwZSk7CisJCX0g ZWxzZQorCQkJc2VxX3B1dHMobSwgIjAiKTsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJf ZW5kKCZjb25uX2l0ZXIpOworCisJcmV0dXJuIDA7Cit9CitERUZJTkVfU0hPV19BVFRSSUJVVEUo aTkxNV9kaXNwbGF5cG9ydF90ZXN0X3R5cGUpOworCitzdGF0aWMgdm9pZCB3bV9sYXRlbmN5X3No b3coc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1MTYgd21bOF0pCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gJmRldl9wcml2LT5kcm07CisJaW50IGxldmVsOworCWludCBudW1fbGV2ZWxzOworCisJ aWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQorCQludW1fbGV2ZWxzID0gMzsKKwllbHNlIGlm IChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKKwkJbnVtX2xldmVscyA9IDE7CisJZWxzZSBpZiAo SVNfRzRYKGRldl9wcml2KSkKKwkJbnVtX2xldmVscyA9IDM7CisJZWxzZQorCQludW1fbGV2ZWxz ID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdikgKyAxOworCisJZHJtX21vZGVzZXRfbG9ja19h bGwoZGV2KTsKKworCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IG51bV9sZXZlbHM7IGxldmVsKysp IHsKKwkJdW5zaWduZWQgaW50IGxhdGVuY3kgPSB3bVtsZXZlbF07CisKKwkJLyoKKwkJICogLSBX TTErIGxhdGVuY3kgdmFsdWVzIGluIDAuNXVzIHVuaXRzCisJCSAqIC0gbGF0ZW5jaWVzIGFyZSBp biB1cyBvbiBnZW45L3Zsdi9jaHYKKwkJICovCisJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDkgfHwKKwkJICAgIElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8CisJCSAgICBJU19DSEVSUllW SUVXKGRldl9wcml2KSB8fAorCQkgICAgSVNfRzRYKGRldl9wcml2KSkKKwkJCWxhdGVuY3kgKj0g MTA7CisJCWVsc2UgaWYgKGxldmVsID4gMCkKKwkJCWxhdGVuY3kgKj0gNTsKKworCQlzZXFfcHJp bnRmKG0sICJXTSVkICV1ICgldS4ldSB1c2VjKVxuIiwKKwkJCSAgIGxldmVsLCB3bVtsZXZlbF0s IGxhdGVuY3kgLyAxMCwgbGF0ZW5jeSAlIDEwKTsKKwl9CisKKwlkcm1fbW9kZXNldF91bmxvY2tf YWxsKGRldik7Cit9CisKK3N0YXRpYyBpbnQgcHJpX3dtX2xhdGVuY3lfc2hvdyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gbS0+cHJpdmF0ZTsKKwljb25zdCB1MTYgKmxhdGVuY2llczsKKworCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDkpCisJCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5j eTsKKwllbHNlCisJCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeTsKKworCXdt X2xhdGVuY3lfc2hvdyhtLCBsYXRlbmNpZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgc3ByX3dtX2xhdGVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKKwljb25z dCB1MTYgKmxhdGVuY2llczsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCisJCWxh dGVuY2llcyA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeTsKKwllbHNlCisJCWxhdGVuY2llcyA9 IGRldl9wcml2LT53bS5zcHJfbGF0ZW5jeTsKKworCXdtX2xhdGVuY3lfc2hvdyhtLCBsYXRlbmNp ZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3VyX3dtX2xhdGVuY3lfc2hvdyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKKwljb25zdCB1MTYgKmxhdGVuY2llczsKKworCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCisJCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5z a2xfbGF0ZW5jeTsKKwllbHNlCisJCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5jdXJfbGF0ZW5j eTsKKworCXdtX2xhdGVuY3lfc2hvdyhtLCBsYXRlbmNpZXMpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcHJpX3dtX2xhdGVuY3lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBp bm9kZS0+aV9wcml2YXRlOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1ICYmICFJU19H NFgoZGV2X3ByaXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzaW5nbGVfb3Blbihm aWxlLCBwcmlfd21fbGF0ZW5jeV9zaG93LCBkZXZfcHJpdik7Cit9CisKK3N0YXRpYyBpbnQgc3By X3dtX2xhdGVuY3lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBpbm9kZS0+aV9wcml2YXRl OworCisJaWYgKEhBU19HTUNIKGRldl9wcml2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1 cm4gc2luZ2xlX29wZW4oZmlsZSwgc3ByX3dtX2xhdGVuY3lfc2hvdywgZGV2X3ByaXYpOworfQor CitzdGF0aWMgaW50IGN1cl93bV9sYXRlbmN5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g aW5vZGUtPmlfcHJpdmF0ZTsKKworCWlmIChIQVNfR01DSChkZXZfcHJpdikpCisJCXJldHVybiAt RU5PREVWOworCisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGN1cl93bV9sYXRlbmN5X3Nob3cs IGRldl9wcml2KTsKK30KKworc3RhdGljIHNzaXplX3Qgd21fbGF0ZW5jeV93cml0ZShzdHJ1Y3Qg ZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJc2l6ZV90IGxlbiwgbG9m Zl90ICpvZmZwLCB1MTYgd21bOF0pCit7CisJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJp dmF0ZV9kYXRhOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG0tPnByaXZh dGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCXUxNiBuZXdb OF0gPSB7IDAgfTsKKwlpbnQgbnVtX2xldmVsczsKKwlpbnQgbGV2ZWw7CisJaW50IHJldDsKKwlj aGFyIHRtcFszMl07CisKKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCW51bV9sZXZl bHMgPSAzOworCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQorCQludW1fbGV2ZWxz ID0gMTsKKwllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQorCQludW1fbGV2ZWxzID0gMzsKKwll bHNlCisJCW51bV9sZXZlbHMgPSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2KSArIDE7CisKKwlp ZiAobGVuID49IHNpemVvZih0bXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zy b21fdXNlcih0bXAsIHVidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJdG1wW2xlbl0g PSAnXDAnOworCisJcmV0ID0gc3NjYW5mKHRtcCwgIiVodSAlaHUgJWh1ICVodSAlaHUgJWh1ICVo dSAlaHUiLAorCQkgICAgICZuZXdbMF0sICZuZXdbMV0sICZuZXdbMl0sICZuZXdbM10sCisJCSAg ICAgJm5ld1s0XSwgJm5ld1s1XSwgJm5ld1s2XSwgJm5ld1s3XSk7CisJaWYgKHJldCAhPSBudW1f bGV2ZWxzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7 CisKKwlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBudW1fbGV2ZWxzOyBsZXZlbCsrKQorCQl3bVts ZXZlbF0gPSBuZXdbbGV2ZWxdOworCisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOworCisJ cmV0dXJuIGxlbjsKK30KKworCitzdGF0aWMgc3NpemVfdCBwcmlfd21fbGF0ZW5jeV93cml0ZShz dHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJICAgIHNpemVf dCBsZW4sIGxvZmZfdCAqb2ZmcCkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2 YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0 ZTsKKwl1MTYgKmxhdGVuY2llczsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCisJ CWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeTsKKwllbHNlCisJCWxhdGVuY2ll cyA9IGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeTsKKworCXJldHVybiB3bV9sYXRlbmN5X3dyaXRl KGZpbGUsIHVidWYsIGxlbiwgb2ZmcCwgbGF0ZW5jaWVzKTsKK30KKworc3RhdGljIHNzaXplX3Qg c3ByX3dtX2xhdGVuY3lfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2Vy ICp1YnVmLAorCQkJCSAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IHNl cV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7CisJdTE2ICpsYXRlbmNpZXM7CisKKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA5KQorCQlsYXRlbmNpZXMgPSBkZXZfcHJpdi0+d20uc2tsX2xhdGVu Y3k7CisJZWxzZQorCQlsYXRlbmNpZXMgPSBkZXZfcHJpdi0+d20uc3ByX2xhdGVuY3k7CisKKwly ZXR1cm4gd21fbGF0ZW5jeV93cml0ZShmaWxlLCB1YnVmLCBsZW4sIG9mZnAsIGxhdGVuY2llcyk7 Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN1cl93bV9sYXRlbmN5X3dyaXRlKHN0cnVjdCBmaWxlICpm aWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkgICAgc2l6ZV90IGxlbiwgbG9mZl90 ICpvZmZwKQoreworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBtLT5wcml2YXRlOworCXUxNiAqbGF0 ZW5jaWVzOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKKwkJbGF0ZW5jaWVzID0g ZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5OworCWVsc2UKKwkJbGF0ZW5jaWVzID0gZGV2X3ByaXYt PndtLmN1cl9sYXRlbmN5OworCisJcmV0dXJuIHdtX2xhdGVuY3lfd3JpdGUoZmlsZSwgdWJ1Ziwg bGVuLCBvZmZwLCBsYXRlbmNpZXMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBpOTE1X3ByaV93bV9sYXRlbmN5X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RV TEUsCisJLm9wZW4gPSBwcmlfd21fbGF0ZW5jeV9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJ Lmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0 ZSA9IHByaV93bV9sYXRlbmN5X3dyaXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBpOTE1X3Nwcl93bV9sYXRlbmN5X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19N T0RVTEUsCisJLm9wZW4gPSBzcHJfd21fbGF0ZW5jeV9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQs CisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS53 cml0ZSA9IHNwcl93bV9sYXRlbmN5X3dyaXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZp bGVfb3BlcmF0aW9ucyBpOTE1X2N1cl93bV9sYXRlbmN5X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJ U19NT0RVTEUsCisJLm9wZW4gPSBjdXJfd21fbGF0ZW5jeV9vcGVuLAorCS5yZWFkID0gc2VxX3Jl YWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAor CS53cml0ZSA9IGN1cl93bV9sYXRlbmN5X3dyaXRlCit9OworCitzdGF0aWMgaW50IGk5MTVfaHBk X3N0b3JtX2N0bF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBtLT5wcml2YXRlOworCXN0cnVjdCBpOTE1 X2hvdHBsdWcgKmhvdHBsdWcgPSAmZGV2X3ByaXYtPmhvdHBsdWc7CisKKwkvKiBTeW5jaHJvbml6 ZSB3aXRoIGV2ZXJ5dGhpbmcgZmlyc3QgaW4gY2FzZSB0aGVyZSdzIGJlZW4gYW4gSFBECisJICog c3Rvcm0sIGJ1dCB3ZSBoYXZlbid0IGZpbmlzaGVkIGhhbmRsaW5nIGl0IGluIHRoZSBrZXJuZWwg eWV0CisJICovCisJaW50ZWxfc3luY2hyb25pemVfaXJxKGRldl9wcml2KTsKKwlmbHVzaF93b3Jr KCZkZXZfcHJpdi0+aG90cGx1Zy5kaWdfcG9ydF93b3JrKTsKKwlmbHVzaF9kZWxheWVkX3dvcmso JmRldl9wcml2LT5ob3RwbHVnLmhvdHBsdWdfd29yayk7CisKKwlzZXFfcHJpbnRmKG0sICJUaHJl c2hvbGQ6ICVkXG4iLCBob3RwbHVnLT5ocGRfc3Rvcm1fdGhyZXNob2xkKTsKKwlzZXFfcHJpbnRm KG0sICJEZXRlY3RlZDogJXNcbiIsCisJCSAgIHllc25vKGRlbGF5ZWRfd29ya19wZW5kaW5nKCZo b3RwbHVnLT5yZWVuYWJsZV93b3JrKSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6 ZV90IGk5MTVfaHBkX3N0b3JtX2N0bF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY29u c3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW4sCisJCQkJCWxvZmZfdCAqb2ZmcCkKK3sK KwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9ob3RwbHVn ICpob3RwbHVnID0gJmRldl9wcml2LT5ob3RwbHVnOworCXVuc2lnbmVkIGludCBuZXdfdGhyZXNo b2xkOworCWludCBpOworCWNoYXIgKm5ld2xpbmU7CisJY2hhciB0bXBbMTZdOworCisJaWYgKGxl biA+PSBzaXplb2YodG1wKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3Vz ZXIodG1wLCB1YnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXRtcFtsZW5dID0gJ1ww JzsKKworCS8qIFN0cmlwIG5ld2xpbmUsIGlmIGFueSAqLworCW5ld2xpbmUgPSBzdHJjaHIodG1w LCAnXG4nKTsKKwlpZiAobmV3bGluZSkKKwkJKm5ld2xpbmUgPSAnXDAnOworCisJaWYgKHN0cmNt cCh0bXAsICJyZXNldCIpID09IDApCisJCW5ld190aHJlc2hvbGQgPSBIUERfU1RPUk1fREVGQVVM VF9USFJFU0hPTEQ7CisJZWxzZSBpZiAoa3N0cnRvdWludCh0bXAsIDEwLCAmbmV3X3RocmVzaG9s ZCkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV3X3RocmVzaG9sZCA+IDApCisJ CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJTZXR0aW5nIEhQRCBzdG9ybSBk ZXRlY3Rpb24gdGhyZXNob2xkIHRvICVkXG4iLAorCQkJICAgIG5ld190aHJlc2hvbGQpOworCWVs c2UKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJEaXNhYmxpbmcgSFBEIHN0b3JtIGRl dGVjdGlvblxuIik7CisKKwlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOworCWhv dHBsdWctPmhwZF9zdG9ybV90aHJlc2hvbGQgPSBuZXdfdGhyZXNob2xkOworCS8qIFJlc2V0IHRo ZSBIUEQgc3Rvcm0gc3RhdHMgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHRyaWdnZXIgYSBzdG9y bSAqLworCWZvcl9lYWNoX2hwZF9waW4oaSkKKwkJaG90cGx1Zy0+c3RhdHNbaV0uY291bnQgPSAw OworCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKKworCS8qIFJlLWVuYWJs ZSBocGQgaW1tZWRpYXRlbHkgaWYgd2Ugd2VyZSBpbiBhbiBpcnEgc3Rvcm0gKi8KKwlmbHVzaF9k ZWxheWVkX3dvcmsoJmRldl9wcml2LT5ob3RwbHVnLnJlZW5hYmxlX3dvcmspOworCisJcmV0dXJu IGxlbjsKK30KKworc3RhdGljIGludCBpOTE1X2hwZF9zdG9ybV9jdGxfb3BlbihzdHJ1Y3QgaW5v ZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmls ZSwgaTkxNV9ocGRfc3Rvcm1fY3RsX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOTE1X2hwZF9zdG9ybV9jdGxfZm9wcyA9 IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGk5MTVfaHBkX3N0b3JtX2N0bF9v cGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFz ZSA9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZSA9IGk5MTVfaHBkX3N0b3JtX2N0bF93cml0ZQor fTsKKworc3RhdGljIGludCBpOTE1X2hwZF9zaG9ydF9zdG9ybV9jdGxfc2hvdyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gbS0+cHJpdmF0ZTsKKworCXNlcV9wcmludGYobSwgIkVuYWJsZWQ6ICVzXG4iLAorCQkg ICB5ZXNubyhkZXZfcHJpdi0+aG90cGx1Zy5ocGRfc2hvcnRfc3Rvcm1fZW5hYmxlZCkpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfaHBkX3Nob3J0X3N0b3JtX2N0bF9vcGVu KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5n bGVfb3BlbihmaWxlLCBpOTE1X2hwZF9zaG9ydF9zdG9ybV9jdGxfc2hvdywKKwkJCSAgIGlub2Rl LT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgc3NpemVfdCBpOTE1X2hwZF9zaG9ydF9zdG9ybV9j dGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgX191c2Vy ICp1YnVmLAorCQkJCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0 IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7CisJc3RydWN0IGk5MTVfaG90cGx1ZyAqaG90cGx1 ZyA9ICZkZXZfcHJpdi0+aG90cGx1ZzsKKwljaGFyICpuZXdsaW5lOworCWNoYXIgdG1wWzE2XTsK KwlpbnQgaTsKKwlib29sIG5ld19zdGF0ZTsKKworCWlmIChsZW4gPj0gc2l6ZW9mKHRtcCkpCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKHRtcCwgdWJ1ZiwgbGVuKSkK KwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl0bXBbbGVuXSA9ICdcMCc7CisKKwkvKiBTdHJpcCBuZXds aW5lLCBpZiBhbnkgKi8KKwluZXdsaW5lID0gc3RyY2hyKHRtcCwgJ1xuJyk7CisJaWYgKG5ld2xp bmUpCisJCSpuZXdsaW5lID0gJ1wwJzsKKworCS8qIFJlc2V0IHRvIHRoZSAiZGVmYXVsdCIgc3Rh dGUgZm9yIHRoaXMgc3lzdGVtICovCisJaWYgKHN0cmNtcCh0bXAsICJyZXNldCIpID09IDApCisJ CW5ld19zdGF0ZSA9ICFIQVNfRFBfTVNUKGRldl9wcml2KTsKKwllbHNlIGlmIChrc3RydG9ib29s KHRtcCwgJm5ld19zdGF0ZSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwgIiVzYWJsaW5nIEhQRCBzaG9ydCBzdG9ybSBkZXRlY3Rpb25cbiIs CisJCSAgICBuZXdfc3RhdGUgPyAiRW4iIDogIkRpcyIpOworCisJc3Bpbl9sb2NrX2lycSgmZGV2 X3ByaXYtPmlycV9sb2NrKTsKKwlob3RwbHVnLT5ocGRfc2hvcnRfc3Rvcm1fZW5hYmxlZCA9IG5l d19zdGF0ZTsKKwkvKiBSZXNldCB0aGUgSFBEIHN0b3JtIHN0YXRzIHNvIHdlIGRvbid0IGFjY2lk ZW50YWxseSB0cmlnZ2VyIGEgc3Rvcm0gKi8KKwlmb3JfZWFjaF9ocGRfcGluKGkpCisJCWhvdHBs dWctPnN0YXRzW2ldLmNvdW50ID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFf bG9jayk7CisKKwkvKiBSZS1lbmFibGUgaHBkIGltbWVkaWF0ZWx5IGlmIHdlIHdlcmUgaW4gYW4g aXJxIHN0b3JtICovCisJZmx1c2hfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+aG90cGx1Zy5yZWVu YWJsZV93b3JrKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIGk5MTVfaHBkX3Nob3J0X3N0b3JtX2N0bF9mb3BzID0geworCS5vd25lciA9 IFRISVNfTU9EVUxFLAorCS5vcGVuID0gaTkxNV9ocGRfc2hvcnRfc3Rvcm1fY3RsX29wZW4sCisJ LnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2lu Z2xlX3JlbGVhc2UsCisJLndyaXRlID0gaTkxNV9ocGRfc2hvcnRfc3Rvcm1fY3RsX3dyaXRlLAor fTsKKworc3RhdGljIGludCBpOTE1X2RycnNfY3RsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRhdGE7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRj OworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA3KQorCQlyZXR1cm4gLUVOT0RFVjsKKwor CWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7CisJCXN0cnVjdCBkcm1fY29ubmVjdG9y X2xpc3RfaXRlciBjb25uX2l0ZXI7CisJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlOworCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCQlzdHJ1Y3QgZHJtX2Ny dGNfY29tbWl0ICpjb21taXQ7CisJCWludCByZXQ7CisKKwkJcmV0ID0gZHJtX21vZGVzZXRfbG9j a19zaW5nbGVfaW50ZXJydXB0aWJsZSgmY3J0Yy0+YmFzZS5tdXRleCk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCisJCWNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMt PmJhc2Uuc3RhdGUpOworCisJCWlmICghY3J0Y19zdGF0ZS0+aHcuYWN0aXZlIHx8CisJCSAgICAh Y3J0Y19zdGF0ZS0+aGFzX2RycnMpCisJCQlnb3RvIG91dDsKKworCQljb21taXQgPSBjcnRjX3N0 YXRlLT51YXBpLmNvbW1pdDsKKwkJaWYgKGNvbW1pdCkgeworCQkJcmV0ID0gd2FpdF9mb3JfY29t cGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjb21taXQtPmh3X2RvbmUpOworCQkJaWYgKHJldCkKKwkJ CQlnb3RvIG91dDsKKwkJfQorCisJCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRldiwg JmNvbm5faXRlcik7CisJCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZj b25uX2l0ZXIpIHsKKwkJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOworCQkJc3RydWN0 IGludGVsX2RwICppbnRlbF9kcDsKKworCQkJaWYgKCEoY3J0Y19zdGF0ZS0+dWFwaS5jb25uZWN0 b3JfbWFzayAmCisJCQkgICAgICBkcm1fY29ubmVjdG9yX21hc2soY29ubmVjdG9yKSkpCisJCQkJ Y29udGludWU7CisKKwkJCWVuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9lbmNvZGVyKHRvX2ludGVs X2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsKKwkJCWlmIChlbmNvZGVyLT50eXBlICE9IElOVEVMX09V VFBVVF9FRFApCisJCQkJY29udGludWU7CisKKwkJCWRybV9kYmcoJmRldl9wcml2LT5kcm0sCisJ CQkJIk1hbnVhbGx5ICVzYWJsaW5nIERSUlMuICVsbHVcbiIsCisJCQkJdmFsID8gImVuIiA6ICJk aXMiLCB2YWwpOworCisJCQlpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKKwkJ CWlmICh2YWwpCisJCQkJaW50ZWxfZWRwX2RycnNfZW5hYmxlKGludGVsX2RwLAorCQkJCQkJICAg ICAgY3J0Y19zdGF0ZSk7CisJCQllbHNlCisJCQkJaW50ZWxfZWRwX2RycnNfZGlzYWJsZShpbnRl bF9kcCwKKwkJCQkJCSAgICAgICBjcnRjX3N0YXRlKTsKKwkJfQorCQlkcm1fY29ubmVjdG9yX2xp c3RfaXRlcl9lbmQoJmNvbm5faXRlcik7CisKK291dDoKKwkJZHJtX21vZGVzZXRfdW5sb2NrKCZj cnRjLT5iYXNlLm11dGV4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGk5MTVfZHJyc19jdGxfZm9wcywg TlVMTCwgaTkxNV9kcnJzX2N0bF9zZXQsICIlbGx1XG4iKTsKKworc3RhdGljIHNzaXplX3QKK2k5 MTVfZmlmb191bmRlcnJ1bl9yZXNldF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAg ICBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3Qg KnBwb3MpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZmlscC0+cHJp dmF0ZV9kYXRhOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKKwlpbnQgcmV0OworCWJvb2wgcmVzZXQ7CisK KwlyZXQgPSBrc3RydG9ib29sX2Zyb21fdXNlcih1YnVmLCBjbnQsICZyZXNldCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcmVzZXQpCisJCXJldHVybiBjbnQ7CisKKwlmb3Jf ZWFjaF9pbnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0YykgeworCQlzdHJ1Y3QgZHJtX2NydGNfY29t bWl0ICpjb21taXQ7CisJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJ CXJldCA9IGRybV9tb2Rlc2V0X2xvY2tfc2luZ2xlX2ludGVycnVwdGlibGUoJmludGVsX2NydGMt PmJhc2UubXV0ZXgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQljcnRjX3N0YXRl ID0gdG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRjLT5iYXNlLnN0YXRlKTsKKwkJY29tbWl0 ID0gY3J0Y19zdGF0ZS0+dWFwaS5jb21taXQ7CisJCWlmIChjb21taXQpIHsKKwkJCXJldCA9IHdh aXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY29tbWl0LT5od19kb25lKTsKKwkJCWlm ICghcmV0KQorCQkJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY29t bWl0LT5mbGlwX2RvbmUpOworCQl9CisKKwkJaWYgKCFyZXQgJiYgY3J0Y19zdGF0ZS0+aHcuYWN0 aXZlKSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgIlJlLWFybWlu ZyBGSUZPIHVuZGVycnVucyBvbiBwaXBlICVjXG4iLAorCQkJCSAgICBwaXBlX25hbWUoaW50ZWxf Y3J0Yy0+cGlwZSkpOworCisJCQlpbnRlbF9jcnRjX2FybV9maWZvX3VuZGVycnVuKGludGVsX2Ny dGMsIGNydGNfc3RhdGUpOworCQl9CisKKwkJZHJtX21vZGVzZXRfdW5sb2NrKCZpbnRlbF9jcnRj LT5iYXNlLm11dGV4KTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQg PSBpbnRlbF9mYmNfcmVzZXRfdW5kZXJydW4oZGV2X3ByaXYpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBpOTE1X2ZpZm9fdW5kZXJydW5fcmVzZXRfb3BzID0geworCS5vd25lciA9IFRISVNf TU9EVUxFLAorCS5vcGVuID0gc2ltcGxlX29wZW4sCisJLndyaXRlID0gaTkxNV9maWZvX3VuZGVy cnVuX3Jlc2V0X3dyaXRlLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBpbnRlbF9kaXNwbGF5X2RlYnVnZnNfbGlzdFtd ID0geworCXsiaTkxNV9mcm9udGJ1ZmZlcl90cmFja2luZyIsIGk5MTVfZnJvbnRidWZmZXJfdHJh Y2tpbmcsIDB9LAorCXsiaTkxNV9mYmNfc3RhdHVzIiwgaTkxNV9mYmNfc3RhdHVzLCAwfSwKKwl7 Imk5MTVfaXBzX3N0YXR1cyIsIGk5MTVfaXBzX3N0YXR1cywgMH0sCisJeyJpOTE1X3NyX3N0YXR1 cyIsIGk5MTVfc3Jfc3RhdHVzLCAwfSwKKwl7Imk5MTVfb3ByZWdpb24iLCBpOTE1X29wcmVnaW9u LCAwfSwKKwl7Imk5MTVfdmJ0IiwgaTkxNV92YnQsIDB9LAorCXsiaTkxNV9nZW1fZnJhbWVidWZm ZXIiLCBpOTE1X2dlbV9mcmFtZWJ1ZmZlcl9pbmZvLCAwfSwKKwl7Imk5MTVfZWRwX3Bzcl9zdGF0 dXMiLCBpOTE1X2VkcF9wc3Jfc3RhdHVzLCAwfSwKKwl7Imk5MTVfcG93ZXJfZG9tYWluX2luZm8i LCBpOTE1X3Bvd2VyX2RvbWFpbl9pbmZvLCAwfSwKKwl7Imk5MTVfZG1jX2luZm8iLCBpOTE1X2Rt Y19pbmZvLCAwfSwKKwl7Imk5MTVfZGlzcGxheV9pbmZvIiwgaTkxNV9kaXNwbGF5X2luZm8sIDB9 LAorCXsiaTkxNV9zaGFyZWRfZHBsbHNfaW5mbyIsIGk5MTVfc2hhcmVkX2RwbGxzX2luZm8sIDB9 LAorCXsiaTkxNV9kcF9tc3RfaW5mbyIsIGk5MTVfZHBfbXN0X2luZm8sIDB9LAorCXsiaTkxNV9k ZGJfaW5mbyIsIGk5MTVfZGRiX2luZm8sIDB9LAorCXsiaTkxNV9kcnJzX3N0YXR1cyIsIGk5MTVf ZHJyc19zdGF0dXMsIDB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hh ciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOworfSBpbnRlbF9k aXNwbGF5X2RlYnVnZnNfZmlsZXNbXSA9IHsKKwl7Imk5MTVfZmlmb191bmRlcnJ1bl9yZXNldCIs ICZpOTE1X2ZpZm9fdW5kZXJydW5fcmVzZXRfb3BzfSwKKwl7Imk5MTVfcHJpX3dtX2xhdGVuY3ki LCAmaTkxNV9wcmlfd21fbGF0ZW5jeV9mb3BzfSwKKwl7Imk5MTVfc3ByX3dtX2xhdGVuY3kiLCAm aTkxNV9zcHJfd21fbGF0ZW5jeV9mb3BzfSwKKwl7Imk5MTVfY3VyX3dtX2xhdGVuY3kiLCAmaTkx NV9jdXJfd21fbGF0ZW5jeV9mb3BzfSwKKwl7Imk5MTVfZmJjX2ZhbHNlX2NvbG9yIiwgJmk5MTVf ZmJjX2ZhbHNlX2NvbG9yX2ZvcHN9LAorCXsiaTkxNV9kcF90ZXN0X2RhdGEiLCAmaTkxNV9kaXNw bGF5cG9ydF90ZXN0X2RhdGFfZm9wc30sCisJeyJpOTE1X2RwX3Rlc3RfdHlwZSIsICZpOTE1X2Rp c3BsYXlwb3J0X3Rlc3RfdHlwZV9mb3BzfSwKKwl7Imk5MTVfZHBfdGVzdF9hY3RpdmUiLCAmaTkx NV9kaXNwbGF5cG9ydF90ZXN0X2FjdGl2ZV9mb3BzfSwKKwl7Imk5MTVfaHBkX3N0b3JtX2N0bCIs ICZpOTE1X2hwZF9zdG9ybV9jdGxfZm9wc30sCisJeyJpOTE1X2hwZF9zaG9ydF9zdG9ybV9jdGwi LCAmaTkxNV9ocGRfc2hvcnRfc3Rvcm1fY3RsX2ZvcHN9LAorCXsiaTkxNV9pcGNfc3RhdHVzIiwg Jmk5MTVfaXBjX3N0YXR1c19mb3BzfSwKKwl7Imk5MTVfZHJyc19jdGwiLCAmaTkxNV9kcnJzX2N0 bF9mb3BzfSwKKwl7Imk5MTVfZWRwX3Bzcl9kZWJ1ZyIsICZpOTE1X2VkcF9wc3JfZGVidWdfZm9w c30sCit9OworCitpbnQgaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gaTkxNS0+ ZHJtLnByaW1hcnk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnRl bF9kaXNwbGF5X2RlYnVnZnNfZmlsZXMpOyBpKyspIHsKKwkJZGVidWdmc19jcmVhdGVfZmlsZShp bnRlbF9kaXNwbGF5X2RlYnVnZnNfZmlsZXNbaV0ubmFtZSwKKwkJCQkgICAgU19JUlVHTyB8IFNf SVdVU1IsCisJCQkJICAgIG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsCisJCQkJICAgIHRvX2k5MTUobWlu b3ItPmRldiksCisJCQkJICAgIGludGVsX2Rpc3BsYXlfZGVidWdmc19maWxlc1tpXS5mb3BzKTsK Kwl9CisKKwlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKGludGVsX2Rpc3BsYXlfZGVi dWdmc19saXN0LAorCQkJCQlBUlJBWV9TSVpFKGludGVsX2Rpc3BsYXlfZGVidWdmc19saXN0KSwK KwkJCQkJbWlub3ItPmRlYnVnZnNfcm9vdCwgbWlub3IpOworfQorCitzdGF0aWMgaW50IGk5MTVf cGFuZWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG0tPnByaXZhdGU7CisJc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCA9CisJCWludGVsX2F0dGFjaGVkX2RwKHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0 b3IpKTsKKworCWlmIChjb25uZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5l Y3RlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzZXFfcHJpbnRmKG0sICJQYW5lbCBwb3dlciB1 cCBkZWxheTogJWRcbiIsCisJCSAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl91cF9kZWxheSk7CisJ c2VxX3ByaW50ZihtLCAiUGFuZWwgcG93ZXIgZG93biBkZWxheTogJWRcbiIsCisJCSAgIGludGVs X2RwLT5wYW5lbF9wb3dlcl9kb3duX2RlbGF5KTsKKwlzZXFfcHJpbnRmKG0sICJCYWNrbGlnaHQg b24gZGVsYXk6ICVkXG4iLAorCQkgICBpbnRlbF9kcC0+YmFja2xpZ2h0X29uX2RlbGF5KTsKKwlz ZXFfcHJpbnRmKG0sICJCYWNrbGlnaHQgb2ZmIGRlbGF5OiAlZFxuIiwKKwkJICAgaW50ZWxfZHAt PmJhY2tsaWdodF9vZmZfZGVsYXkpOworCisJcmV0dXJuIDA7Cit9CitERUZJTkVfU0hPV19BVFRS SUJVVEUoaTkxNV9wYW5lbCk7CisKK3N0YXRpYyBpbnQgaTkxNV9oZGNwX3NpbmtfY2FwYWJpbGl0 eV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICppbnRlbF9jb25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKworCWlm IChjb25uZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKKwkJcmV0 dXJuIC1FTk9ERVY7CisKKwkvKiBIRENQIGlzIHN1cHBvcnRlZCBieSBjb25uZWN0b3IgKi8KKwlp ZiAoIWludGVsX2Nvbm5lY3Rvci0+aGRjcC5zaGltKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNl cV9wcmludGYobSwgIiVzOiVkIEhEQ1AgdmVyc2lvbjogIiwgY29ubmVjdG9yLT5uYW1lLAorCQkg ICBjb25uZWN0b3ItPmJhc2UuaWQpOworCWludGVsX2hkY3BfaW5mbyhtLCBpbnRlbF9jb25uZWN0 b3IpOworCisJcmV0dXJuIDA7Cit9CitERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9oZGNwX3Np bmtfY2FwYWJpbGl0eSk7CisKK3N0YXRpYyBpbnQgaTkxNV9kc2NfZmVjX3N1cHBvcnRfc2hvdyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciA9IG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5l Y3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwOworCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7CisJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBOVUxMOworCWludCByZXQgPSAwOworCWJvb2wg dHJ5X2FnYWluID0gZmFsc2U7CisKKwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgRFJN X01PREVTRVRfQUNRVUlSRV9JTlRFUlJVUFRJQkxFKTsKKworCWRvIHsKKwkJdHJ5X2FnYWluID0g ZmFsc2U7CisJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmRldi0+bW9kZV9jb25maWcuY29ubmVj dGlvbl9tdXRleCwKKwkJCQkgICAgICAgJmN0eCk7CisJCWlmIChyZXQpIHsKKwkJCWlmIChyZXQg PT0gLUVERUFETEsgJiYgIWRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCkpIHsKKwkJCQl0cnlfYWdh aW4gPSB0cnVlOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJY3J0YyA9 IGNvbm5lY3Rvci0+c3RhdGUtPmNydGM7CisJCWlmIChjb25uZWN0b3ItPnN0YXR1cyAhPSBjb25u ZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCB8fCAhY3J0YykgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJ CWJyZWFrOworCQl9CisJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNydGMtPm11dGV4LCAmY3R4 KTsKKwkJaWYgKHJldCA9PSAtRURFQURMSykgeworCQkJcmV0ID0gZHJtX21vZGVzZXRfYmFja29m ZigmY3R4KTsKKwkJCWlmICghcmV0KSB7CisJCQkJdHJ5X2FnYWluID0gdHJ1ZTsKKwkJCQljb250 aW51ZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHJldCkgeworCQkJYnJlYWs7CisJ CX0KKwkJaW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hlZF9kcCh0b19pbnRlbF9jb25uZWN0b3IoY29u bmVjdG9yKSk7CisJCWNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKKwkJc2VxX3ByaW50ZihtLCAiRFNDX0VuYWJsZWQ6ICVzXG4iLAorCQkJICAgeWVzbm8oY3J0 Y19zdGF0ZS0+ZHNjLmNvbXByZXNzaW9uX2VuYWJsZSkpOworCQlzZXFfcHJpbnRmKG0sICJEU0Nf U2lua19TdXBwb3J0OiAlc1xuIiwKKwkJCSAgIHllc25vKGRybV9kcF9zaW5rX3N1cHBvcnRzX2Rz YyhpbnRlbF9kcC0+ZHNjX2RwY2QpKSk7CisJCXNlcV9wcmludGYobSwgIkZvcmNlX0RTQ19FbmFi bGU6ICVzXG4iLAorCQkJICAgeWVzbm8oaW50ZWxfZHAtPmZvcmNlX2RzY19lbikpOworCQlpZiAo IWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCisJCQlzZXFfcHJpbnRmKG0sICJGRUNfU2lua19T dXBwb3J0OiAlc1xuIiwKKwkJCQkgICB5ZXNubyhkcm1fZHBfc2lua19zdXBwb3J0c19mZWMoaW50 ZWxfZHAtPmZlY19jYXBhYmxlKSkpOworCX0gd2hpbGUgKHRyeV9hZ2Fpbik7CisKKwlkcm1fbW9k ZXNldF9kcm9wX2xvY2tzKCZjdHgpOworCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfZHNjX2ZlY19zdXBwb3J0 X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgIGNvbnN0IGNoYXIgX191c2VyICp1YnVm LAorCQkJCQkgIHNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmcCkKK3sKKwlib29sIGRzY19lbmFibGUg PSBmYWxzZTsKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPQor CQkoKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGU7CisJc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9lbmNvZGVyKHRvX2lu dGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisKKwlpZiAobGVuID09IDApCisJCXJldHVy biAwOworCisJZHJtX2RiZygmaTkxNS0+ZHJtLAorCQkiQ29waWVkICV6dSBieXRlcyBmcm9tIHVz ZXIgdG8gZm9yY2UgRFNDXG4iLCBsZW4pOworCisJcmV0ID0ga3N0cnRvYm9vbF9mcm9tX3VzZXIo dWJ1ZiwgbGVuLCAmZHNjX2VuYWJsZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisK Kwlkcm1fZGJnKCZpOTE1LT5kcm0sICJHb3QgJXMgZm9yIERTQyBFbmFibGVcbiIsCisJCShkc2Nf ZW5hYmxlKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCWludGVsX2RwLT5mb3JjZV9kc2NfZW4gPSBk c2NfZW5hYmxlOworCisJKm9mZnAgKz0gbGVuOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBp bnQgaTkxNV9kc2NfZmVjX3N1cHBvcnRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAg ICAgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGk5MTVf ZHNjX2ZlY19zdXBwb3J0X3Nob3csCisJCQkgICBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9kc2NfZmVjX3N1cHBvcnRfZm9w cyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGk5MTVfZHNjX2ZlY19zdXBw b3J0X29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5y ZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlID0gaTkxNV9kc2NfZmVjX3N1cHBvcnRf d3JpdGUKK307CisKKy8qKgorICogaW50ZWxfY29ubmVjdG9yX2RlYnVnZnNfYWRkIC0gYWRkIGk5 MTUgc3BlY2lmaWMgY29ubmVjdG9yIGRlYnVnZnMgZmlsZXMKKyAqIEBjb25uZWN0b3I6IHBvaW50 ZXIgdG8gYSByZWdpc3RlcmVkIGRybV9jb25uZWN0b3IKKyAqCisgKiBDbGVhbnVwIHdpbGwgYmUg ZG9uZSBieSBkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoKSB0aHJvdWdoIGEgY2FsbCB0bworICog ZHJtX2RlYnVnZnNfY29ubmVjdG9yX3JlbW92ZSgpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlcyBvbiBlcnJvci4KKyAqLworaW50IGludGVsX2Nvbm5l Y3Rvcl9kZWJ1Z2ZzX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0 cnVjdCBkZW50cnkgKnJvb3QgPSBjb25uZWN0b3ItPmRlYnVnZnNfZW50cnk7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmRldik7CisKKwkv KiBUaGUgY29ubmVjdG9yIG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZHMuICov CisJaWYgKCFyb290KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChjb25uZWN0b3ItPmNvbm5l Y3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApIHsKKwkJZGVidWdmc19jcmVhdGVf ZmlsZSgiaTkxNV9wYW5lbF90aW1pbmdzIiwgU19JUlVHTywgcm9vdCwKKwkJCQkgICAgY29ubmVj dG9yLCAmaTkxNV9wYW5lbF9mb3BzKTsKKwkJZGVidWdmc19jcmVhdGVfZmlsZSgiaTkxNV9wc3Jf c2lua19zdGF0dXMiLCBTX0lSVUdPLCByb290LAorCQkJCSAgICBjb25uZWN0b3IsICZpOTE1X3Bz cl9zaW5rX3N0YXR1c19mb3BzKTsKKwl9CisKKwlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlw ZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQgfHwKKwkgICAgY29ubmVjdG9yLT5j b25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEgfHwKKwkgICAgY29ubmVj dG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIpIHsKKwkJZGVi dWdmc19jcmVhdGVfZmlsZSgiaTkxNV9oZGNwX3NpbmtfY2FwYWJpbGl0eSIsIFNfSVJVR08sIHJv b3QsCisJCQkJICAgIGNvbm5lY3RvciwgJmk5MTVfaGRjcF9zaW5rX2NhcGFiaWxpdHlfZm9wcyk7 CisJfQorCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgJiYKKwkgICAgKGNvbm5lY3Rv ci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0IHx8CisJ ICAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAp KQorCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpOTE1X2RzY19mZWNfc3VwcG9ydCIsIFNfSVJVR08s IHJvb3QsCisJCQkJICAgIGNvbm5lY3RvciwgJmk5MTVfZHNjX2ZlY19zdXBwb3J0X2ZvcHMpOwor CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5X2RlYnVnZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmEzYmVhMWNlMDRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmgKQEAgLTAsMCArMSwyMCBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDIw IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0lOVEVMX0RJU1BMQVlfREVCVUdG U19IX18KKyNkZWZpbmUgX19JTlRFTF9ESVNQTEFZX0RFQlVHRlNfSF9fCisKK3N0cnVjdCBkcm1f Y29ubmVjdG9yOworc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7CisKKyNpZmRlZiBDT05GSUdfREVC VUdfRlMKK2ludCBpbnRlbF9kaXNwbGF5X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpOworaW50IGludGVsX2Nvbm5lY3Rvcl9kZWJ1Z2ZzX2FkZChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpbnRl bF9kaXNwbGF5X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp IHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGludGVsX2Nvbm5lY3Rvcl9kZWJ1Z2Zz X2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKSB7IHJldHVybiAwOyB9CisjZW5k aWYKKworI2VuZGlmIC8qIF9fSU5URUxfRElTUExBWV9ERUJVR0ZTX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCmluZGV4IGY0ZGVkZTYyNTNmOC4uOTU0MWFiMTE2 MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCkBAIC00OSw2ICs0 OSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfYXVkaW8uaCIKICNpbmNsdWRlICJpbnRlbF9jb25uZWN0 b3IuaCIKICNpbmNsdWRlICJpbnRlbF9kZGkuaCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X2Rl YnVnZnMuaCIKICNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50 ZWxfZHAuaCIKICNpbmNsdWRlICJpbnRlbF9kcF9saW5rX3RyYWluaW5nLmgiCkBAIC01ODUxLDcg KzU4NTIsNyBAQCBpbnRlbF9kcF9jb25uZWN0b3JfcmVnaXN0ZXIoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaTkxNV9kZWJ1Z2Zz X2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKKwlpbnRlbF9jb25uZWN0b3JfZGVidWdmc19hZGQo Y29ubmVjdG9yKTsKIAogCURSTV9ERUJVR19LTVMoInJlZ2lzdGVyaW5nICVzIGJ1cyBmb3IgJXNc biIsCiAJCSAgICAgIGludGVsX2RwLT5hdXgubmFtZSwgY29ubmVjdG9yLT5rZGV2LT5rb2JqLm5h bWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9oZG1p LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2hkbWkuYwppbmRleCBlNjhi YWZiNzZjYjEuLmEzYTVjZmU0OWFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9oZG1pLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJpbnRlbF9hdWRpby5oIgog I2luY2x1ZGUgImludGVsX2Nvbm5lY3Rvci5oIgogI2luY2x1ZGUgImludGVsX2RkaS5oIgorI2lu Y2x1ZGUgImludGVsX2Rpc3BsYXlfZGVidWdmcy5oIgogI2luY2x1ZGUgImludGVsX2Rpc3BsYXlf dHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF9kcC5oIgogI2luY2x1ZGUgImludGVsX2RwaW9fcGh5 LmgiCkBAIC0yODIzLDcgKzI4MjQsNyBAQCBpbnRlbF9oZG1pX2Nvbm5lY3Rvcl9yZWdpc3Rlcihz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7 CiAKLQlpOTE1X2RlYnVnZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOworCWludGVsX2Nvbm5l Y3Rvcl9kZWJ1Z2ZzX2FkZChjb25uZWN0b3IpOwogCiAJaW50ZWxfaGRtaV9jcmVhdGVfaTJjX3N5 bWxpbmsoY29ubmVjdG9yKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCA4 M2RhZTRkOGFjMGMuLmU1ZWVhOTE1YmQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMKQEAgLTMwLDE1ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogCiAjaW5jbHVk ZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KLQotI2lu Y2x1ZGUgImRpc3BsYXkvaW50ZWxfY3NyLmgiCi0jaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kaXNw bGF5X3R5cGVzLmgiCi0jaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kcC5oIgotI2luY2x1ZGUgImRp c3BsYXkvaW50ZWxfZmJjLmgiCi0jaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9oZGNwLmgiCi0jaW5j bHVkZSAiZGlzcGxheS9pbnRlbF9oZG1pLmgiCi0jaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9wc3Iu aCIKIAogI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9jb250ZXh0LmgiCiAjaW5jbHVkZSAiZ3QvaW50 ZWxfZ3RfcG0uaCIKQEAgLTEyOCw4ICsxMTksOCBAQCBzdHJpbmdpZnlfcGFnZV9zaXplcyh1bnNp Z25lZCBpbnQgcGFnZV9zaXplcywgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCX0KIH0KIAotc3Rh dGljIHZvaWQKLWRlc2NyaWJlX29iaihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCit2b2lkCitpOTE1X2RlYnVnZnNfZGVzY3JpYmVfb2JqKHN0cnVj dCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwog CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKQEAgLTY3NCw3ICs2NjUsNyBAQCBzdGF0 aWMgaW50IGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQg KmRhdGEpCiAJCWlmICghdm1hKQogCQkJc2VxX3B1dHMobSwgInVudXNlZCIpOwogCQllbHNlCi0J CQlkZXNjcmliZV9vYmoobSwgdm1hLT5vYmopOworCQkJaTkxNV9kZWJ1Z2ZzX2Rlc2NyaWJlX29i aihtLCB2bWEtPm9iaik7CiAJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KIAlyY3VfcmVhZF91bmxv Y2soKTsKQEAgLTEyMTksMTUzICsxMjEwLDYgQEAgc3RhdGljIGludCBpOTE1X2RycGNfaW5mbyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0 aWMgaW50IGk5MTVfZnJvbnRidWZmZXJfdHJhY2tpbmcoc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICp1bnVzZWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90 b19pOTE1KG0tPnByaXZhdGUpOwotCi0Jc2VxX3ByaW50ZihtLCAiRkIgdHJhY2tpbmcgYnVzeSBi aXRzOiAweCUwOHhcbiIsCi0JCSAgIGRldl9wcml2LT5mYl90cmFja2luZy5idXN5X2JpdHMpOwot Ci0Jc2VxX3ByaW50ZihtLCAiRkIgdHJhY2tpbmcgZmxpcCBiaXRzOiAweCUwOHhcbiIsCi0JCSAg IGRldl9wcml2LT5mYl90cmFja2luZy5mbGlwX2JpdHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgaTkxNV9mYmNfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2Vk KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNSht LT5wcml2YXRlKTsKLQlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2X3ByaXYtPmZiYzsKLQlp bnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQotCWlmICghSEFTX0ZCQyhkZXZfcHJpdikpCi0JCXJl dHVybiAtRU5PREVWOwotCi0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJp di0+cnVudGltZV9wbSk7Ci0JbXV0ZXhfbG9jaygmZmJjLT5sb2NrKTsKLQotCWlmIChpbnRlbF9m YmNfaXNfYWN0aXZlKGRldl9wcml2KSkKLQkJc2VxX3B1dHMobSwgIkZCQyBlbmFibGVkXG4iKTsK LQllbHNlCi0JCXNlcV9wcmludGYobSwgIkZCQyBkaXNhYmxlZDogJXNcbiIsIGZiYy0+bm9fZmJj X3JlYXNvbik7Ci0KLQlpZiAoaW50ZWxfZmJjX2lzX2FjdGl2ZShkZXZfcHJpdikpIHsKLQkJdTMy IG1hc2s7Ci0KLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKLQkJCW1hc2sgPSBJOTE1 X1JFQUQoSVZCX0ZCQ19TVEFUVVMyKSAmIEJEV19GQkNfQ09NUF9TRUdfTUFTSzsKLQkJZWxzZSBp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA3KQotCQkJbWFzayA9IEk5MTVfUkVBRChJVkJfRkJD X1NUQVRVUzIpICYgSVZCX0ZCQ19DT01QX1NFR19NQVNLOwotCQllbHNlIGlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDUpCi0JCQltYXNrID0gSTkxNV9SRUFEKElMS19EUEZDX1NUQVRVUykgJiBJ TEtfRFBGQ19DT01QX1NFR19NQVNLOwotCQllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQotCQkJ bWFzayA9IEk5MTVfUkVBRChEUEZDX1NUQVRVUykgJiBEUEZDX0NPTVBfU0VHX01BU0s7Ci0JCWVs c2UKLQkJCW1hc2sgPSBJOTE1X1JFQUQoRkJDX1NUQVRVUykgJiAoRkJDX1NUQVRfQ09NUFJFU1NJ TkcgfAotCQkJCQkJCUZCQ19TVEFUX0NPTVBSRVNTRUQpOwotCi0JCXNlcV9wcmludGYobSwgIkNv bXByZXNzaW5nOiAlc1xuIiwgeWVzbm8obWFzaykpOwotCX0KLQotCW11dGV4X3VubG9jaygmZmJj LT5sb2NrKTsKLQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdh a2VyZWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9mYmNfZmFsc2VfY29s b3JfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRhdGE7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDcgfHwgIUhB U19GQkMoZGV2X3ByaXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCSp2YWwgPSBkZXZfcHJpdi0+ ZmJjLmZhbHNlX2NvbG9yOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9mYmNf ZmFsc2VfY29sb3Jfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGF0YTsKLQl1MzIgcmVnOwotCi0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCA3IHx8ICFIQVNfRkJDKGRldl9wcml2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0K LQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZmJjLmxvY2spOwotCi0JcmVnID0gSTkxNV9SRUFEKElM S19EUEZDX0NPTlRST0wpOwotCWRldl9wcml2LT5mYmMuZmFsc2VfY29sb3IgPSB2YWw7Ci0KLQlJ OTE1X1dSSVRFKElMS19EUEZDX0NPTlRST0wsIHZhbCA/Ci0JCSAgIChyZWcgfCBGQkNfQ1RMX0ZB TFNFX0NPTE9SKSA6Ci0JCSAgIChyZWcgJiB+RkJDX0NUTF9GQUxTRV9DT0xPUikpOwotCi0JbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZmJjLmxvY2spOwotCXJldHVybiAwOwotfQotCi1ERUZJTkVf U0lNUExFX0FUVFJJQlVURShpOTE1X2ZiY19mYWxzZV9jb2xvcl9mb3BzLAotCQkJaTkxNV9mYmNf ZmFsc2VfY29sb3JfZ2V0LCBpOTE1X2ZiY19mYWxzZV9jb2xvcl9zZXQsCi0JCQkiJWxsdVxuIik7 Ci0KLXN0YXRpYyBpbnQgaTkxNV9pcHNfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq dW51c2VkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9f aTkxNShtLT5wcml2YXRlKTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQotCWlmICghSEFT X0lQUyhkZXZfcHJpdikpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jd2FrZXJlZiA9IGludGVsX3J1 bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJF bmFibGVkIGJ5IGtlcm5lbCBwYXJhbWV0ZXI6ICVzXG4iLAotCQkgICB5ZXNubyhpOTE1X21vZHBh cmFtcy5lbmFibGVfaXBzKSk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KSB7Ci0J CXNlcV9wdXRzKG0sICJDdXJyZW50bHk6IHVua25vd25cbiIpOwotCX0gZWxzZSB7Ci0JCWlmIChJ OTE1X1JFQUQoSVBTX0NUTCkgJiBJUFNfRU5BQkxFKQotCQkJc2VxX3B1dHMobSwgIkN1cnJlbnRs eTogZW5hYmxlZFxuIik7Ci0JCWVsc2UKLQkJCXNlcV9wdXRzKG0sICJDdXJyZW50bHk6IGRpc2Fi bGVkXG4iKTsKLQl9Ci0KLQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVf cG0sIHdha2VyZWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9zcl9zdGF0 dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwotCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmOwotCWJvb2wgc3JfZW5hYmxlZCA9IGZhbHNlOwotCi0Jd2FrZXJlZiA9 IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fSU5JVCk7Ci0K LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQkvKiBubyBnbG9iYWwgU1Igc3RhdHVz OyBpbnNwZWN0IHBlci1wbGFuZSBXTSAqLzsKLQllbHNlIGlmIChIQVNfUENIX1NQTElUKGRldl9w cml2KSkKLQkJc3JfZW5hYmxlZCA9IEk5MTVfUkVBRChXTTFfTFBfSUxLKSAmIFdNMV9MUF9TUl9F TjsKLQllbHNlIGlmIChJU19JOTY1R00oZGV2X3ByaXYpIHx8IElTX0c0WChkZXZfcHJpdikgfHwK LQkJIElTX0k5NDVHKGRldl9wcml2KSB8fCBJU19JOTQ1R00oZGV2X3ByaXYpKQotCQlzcl9lbmFi bGVkID0gSTkxNV9SRUFEKEZXX0JMQ19TRUxGKSAmIEZXX0JMQ19TRUxGX0VOOwotCWVsc2UgaWYg KElTX0k5MTVHTShkZXZfcHJpdikpCi0JCXNyX2VuYWJsZWQgPSBJOTE1X1JFQUQoSU5TVFBNKSAm IElOU1RQTV9TRUxGX0VOOwotCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkKLQkJc3Jf ZW5hYmxlZCA9IEk5MTVfUkVBRChEU1BGVzMpICYgUElORVZJRVdfU0VMRl9SRUZSRVNIX0VOOwot CWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3By aXYpKQotCQlzcl9lbmFibGVkID0gSTkxNV9SRUFEKEZXX0JMQ19TRUxGX1ZMVikgJiBGV19DU1BX UkRXTkVOOwotCi0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJ Tl9JTklULCB3YWtlcmVmKTsKLQotCXNlcV9wcmludGYobSwgInNlbGYtcmVmcmVzaDogJXNcbiIs IGVuYWJsZWRkaXNhYmxlZChzcl9lbmFibGVkKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGlj IGludCBpOTE1X3JpbmdfZnJlcV90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNl ZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUo bS0+cHJpdmF0ZSk7CkBAIC0xNDA3LDcwICsxMjUxLDYgQEAgc3RhdGljIGludCBpOTE1X3Jpbmdf ZnJlcV90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAlyZXR1cm4gMDsK IH0KIAotc3RhdGljIGludCBpOTE1X29wcmVnaW9uKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq dW51c2VkKQotewotCXN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqb3ByZWdpb24gPSAmbm9kZV90b19p OTE1KG0tPnByaXZhdGUpLT5vcHJlZ2lvbjsKLQotCWlmIChvcHJlZ2lvbi0+aGVhZGVyKQotCQlz ZXFfd3JpdGUobSwgb3ByZWdpb24tPmhlYWRlciwgT1BSRUdJT05fU0laRSk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBpOTE1X3ZidChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVu dXNlZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJm5vZGVfdG9faTkx NShtLT5wcml2YXRlKS0+b3ByZWdpb247Ci0KLQlpZiAob3ByZWdpb24tPnZidCkKLQkJc2VxX3dy aXRlKG0sIG9wcmVnaW9uLT52YnQsIG9wcmVnaW9uLT52YnRfc2l6ZSk7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBpOTE1X2dlbV9mcmFtZWJ1ZmZlcl9pbmZvKHN0cnVjdCBzZXFfZmls ZSAqbSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZk ZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqZmJkZXZfZmIgPSBOVUxM OwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmRybV9mYjsKLQotI2lmZGVmIENPTkZJR19EUk1f RkJERVZfRU1VTEFUSU9OCi0JaWYgKGRldl9wcml2LT5mYmRldiAmJiBkZXZfcHJpdi0+ZmJkZXYt PmhlbHBlci5mYikgewotCQlmYmRldl9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGRldl9wcml2 LT5mYmRldi0+aGVscGVyLmZiKTsKLQotCQlzZXFfcHJpbnRmKG0sICJmYmNvbiBzaXplOiAlZCB4 ICVkLCBkZXB0aCAlZCwgJWQgYnBwLCBtb2RpZmllciAweCVsbHgsIHJlZmNvdW50ICVkLCBvYmog IiwKLQkJCSAgIGZiZGV2X2ZiLT5iYXNlLndpZHRoLAotCQkJICAgZmJkZXZfZmItPmJhc2UuaGVp Z2h0LAotCQkJICAgZmJkZXZfZmItPmJhc2UuZm9ybWF0LT5kZXB0aCwKLQkJCSAgIGZiZGV2X2Zi LT5iYXNlLmZvcm1hdC0+Y3BwWzBdICogOCwKLQkJCSAgIGZiZGV2X2ZiLT5iYXNlLm1vZGlmaWVy LAotCQkJICAgZHJtX2ZyYW1lYnVmZmVyX3JlYWRfcmVmY291bnQoJmZiZGV2X2ZiLT5iYXNlKSk7 Ci0JCWRlc2NyaWJlX29iaihtLCBpbnRlbF9mYl9vYmooJmZiZGV2X2ZiLT5iYXNlKSk7Ci0JCXNl cV9wdXRjKG0sICdcbicpOwotCX0KLSNlbmRpZgotCi0JbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2Nv bmZpZy5mYl9sb2NrKTsKLQlkcm1fZm9yX2VhY2hfZmIoZHJtX2ZiLCBkZXYpIHsKLQkJc3RydWN0 IGludGVsX2ZyYW1lYnVmZmVyICpmYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGRybV9mYik7Ci0J CWlmIChmYiA9PSBmYmRldl9mYikKLQkJCWNvbnRpbnVlOwotCi0JCXNlcV9wcmludGYobSwgInVz ZXIgc2l6ZTogJWQgeCAlZCwgZGVwdGggJWQsICVkIGJwcCwgbW9kaWZpZXIgMHglbGx4LCByZWZj b3VudCAlZCwgb2JqICIsCi0JCQkgICBmYi0+YmFzZS53aWR0aCwKLQkJCSAgIGZiLT5iYXNlLmhl aWdodCwKLQkJCSAgIGZiLT5iYXNlLmZvcm1hdC0+ZGVwdGgsCi0JCQkgICBmYi0+YmFzZS5mb3Jt YXQtPmNwcFswXSAqIDgsCi0JCQkgICBmYi0+YmFzZS5tb2RpZmllciwKLQkJCSAgIGRybV9mcmFt ZWJ1ZmZlcl9yZWFkX3JlZmNvdW50KCZmYi0+YmFzZSkpOwotCQlkZXNjcmliZV9vYmoobSwgaW50 ZWxfZmJfb2JqKCZmYi0+YmFzZSkpOwotCQlzZXFfcHV0YyhtLCAnXG4nKTsKLQl9Ci0JbXV0ZXhf dW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmZiX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0 YXRpYyB2b2lkIGRlc2NyaWJlX2N0eF9yaW5nKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGlu dGVsX3JpbmcgKnJpbmcpCiB7CiAJc2VxX3ByaW50ZihtLCAiIChyaW5nYnVmZmVyLCBzcGFjZTog JWQsIGhlYWQ6ICV1LCB0YWlsOiAldSwgZW1pdDogJXUpIiwKQEAgLTE1MTYsNyArMTI5Niw3IEBA IHN0YXRpYyBpbnQgaTkxNV9jb250ZXh0X3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQg KnVudXNlZCkKIAkJCWlmIChpbnRlbF9jb250ZXh0X3Bpbl9pZl9hY3RpdmUoY2UpKSB7CiAJCQkJ c2VxX3ByaW50ZihtLCAiJXM6ICIsIGNlLT5lbmdpbmUtPm5hbWUpOwogCQkJCWlmIChjZS0+c3Rh dGUpCi0JCQkJCWRlc2NyaWJlX29iaihtLCBjZS0+c3RhdGUtPm9iaik7CisJCQkJCWk5MTVfZGVi dWdmc19kZXNjcmliZV9vYmoobSwgY2UtPnN0YXRlLT5vYmopOwogCQkJCWRlc2NyaWJlX2N0eF9y aW5nKG0sIGNlLT5yaW5nKTsKIAkJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJCQlpbnRlbF9jb250 ZXh0X3VucGluKGNlKTsKQEAgLTE5NjQsMjMwICsxNzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgaTkxNV9ndWNfbG9nX3JlbGF5X2ZvcHMgPSB7CiAJLnJlbGVhc2Ug PSBpOTE1X2d1Y19sb2dfcmVsYXlfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQgaTkxNV9wc3Jf c2lua19zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0JdTgg dmFsOwotCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2lua19zdGF0dXNbXSA9IHsKLQkJImlu YWN0aXZlIiwKLQkJInRyYW5zaXRpb24gdG8gYWN0aXZlLCBjYXB0dXJlIGFuZCBkaXNwbGF5IiwK LQkJImFjdGl2ZSwgZGlzcGxheSBmcm9tIFJGQiIsCi0JCSJhY3RpdmUsIGNhcHR1cmUgYW5kIGRp c3BsYXkgb24gc2luayBkZXZpY2UgdGltaW5ncyIsCi0JCSJ0cmFuc2l0aW9uIHRvIGluYWN0aXZl LCBjYXB0dXJlIGFuZCBkaXNwbGF5LCB0aW1pbmcgcmUtc3luYyIsCi0JCSJyZXNlcnZlZCIsCi0J CSJyZXNlcnZlZCIsCi0JCSJzaW5rIGludGVybmFsIGVycm9yIiwKLQl9OwotCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5kZXYpOwotCXN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPQotCQlpbnRlbF9hdHRhY2hlZF9kcCh0b19pbnRlbF9jb25uZWN0b3IoY29u bmVjdG9yKSk7Ci0JaW50IHJldDsKLQotCWlmICghQ0FOX1BTUihkZXZfcHJpdikpIHsKLQkJc2Vx X3B1dHMobSwgIlBTUiBVbnN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQot CWlmIChjb25uZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKLQkJ cmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmaW50ZWxfZHAtPmF1 eCwgRFBfUFNSX1NUQVRVUywgJnZhbCk7Ci0KLQlpZiAocmV0ID09IDEpIHsKLQkJY29uc3QgY2hh ciAqc3RyID0gInVua25vd24iOwotCi0JCXZhbCAmPSBEUF9QU1JfU0lOS19TVEFURV9NQVNLOwot CQlpZiAodmFsIDwgQVJSQVlfU0laRShzaW5rX3N0YXR1cykpCi0JCQlzdHIgPSBzaW5rX3N0YXR1 c1t2YWxdOwotCQlzZXFfcHJpbnRmKG0sICJTaW5rIFBTUiBzdGF0dXM6IDB4JXggWyVzXVxuIiwg dmFsLCBzdHIpOwotCX0gZWxzZSB7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19 Ci1ERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9wc3Jfc2lua19zdGF0dXMpOwotCi1zdGF0aWMg dm9pZAotcHNyX3NvdXJjZV9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCi17Ci0JdTMyIHZhbCwgc3RhdHVzX3ZhbDsKLQljb25zdCBj aGFyICpzdGF0dXMgPSAidW5rbm93biI7Ci0KLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJs ZWQpIHsKLQkJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsaXZlX3N0YXR1c1tdID0gewotCQkJ IklETEUiLAotCQkJIkNBUFRVUkUiLAotCQkJIkNBUFRVUkVfRlMiLAotCQkJIlNMRUVQIiwKLQkJ CSJCVUZPTl9GVyIsCi0JCQkiTUxfVVAiLAotCQkJIlNVX1NUQU5EQlkiLAotCQkJIkZBU1RfU0xF RVAiLAotCQkJIkRFRVBfU0xFRVAiLAotCQkJIkJVRl9PTiIsCi0JCQkiVEdfT04iCi0JCX07Ci0J CXZhbCA9IEk5MTVfUkVBRChFRFBfUFNSMl9TVEFUVVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVy KSk7Ci0JCXN0YXR1c192YWwgPSAodmFsICYgRURQX1BTUjJfU1RBVFVTX1NUQVRFX01BU0spID4+ Ci0JCQkgICAgICBFRFBfUFNSMl9TVEFUVVNfU1RBVEVfU0hJRlQ7Ci0JCWlmIChzdGF0dXNfdmFs IDwgQVJSQVlfU0laRShsaXZlX3N0YXR1cykpCi0JCQlzdGF0dXMgPSBsaXZlX3N0YXR1c1tzdGF0 dXNfdmFsXTsKLQl9IGVsc2UgewotCQlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxpdmVfc3Rh dHVzW10gPSB7Ci0JCQkiSURMRSIsCi0JCQkiU1JET05BQ0siLAotCQkJIlNSREVOVCIsCi0JCQki QlVGT0ZGIiwKLQkJCSJCVUZPTiIsCi0JCQkiQVVYQUNLIiwKLQkJCSJTUkRPRkZBQ0siLAotCQkJ IlNSREVOVF9PTiIsCi0JCX07Ci0JCXZhbCA9IEk5MTVfUkVBRChFRFBfUFNSX1NUQVRVUyhkZXZf cHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKLQkJc3RhdHVzX3ZhbCA9ICh2YWwgJiBFRFBfUFNSX1NU QVRVU19TVEFURV9NQVNLKSA+PgotCQkJICAgICAgRURQX1BTUl9TVEFUVVNfU1RBVEVfU0hJRlQ7 Ci0JCWlmIChzdGF0dXNfdmFsIDwgQVJSQVlfU0laRShsaXZlX3N0YXR1cykpCi0JCQlzdGF0dXMg PSBsaXZlX3N0YXR1c1tzdGF0dXNfdmFsXTsKLQl9Ci0KLQlzZXFfcHJpbnRmKG0sICJTb3VyY2Ug UFNSIHN0YXR1czogJXMgWzB4JTA4eF1cbiIsIHN0YXR1cywgdmFsKTsKLX0KLQotc3RhdGljIGlu dCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJp dmF0ZSk7Ci0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKLQlpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZjsKLQljb25zdCBjaGFyICpzdGF0dXM7Ci0JYm9vbCBlbmFibGVkOwot CXUzMiB2YWw7Ci0KLQlpZiAoIUhBU19QU1IoZGV2X3ByaXYpKQotCQlyZXR1cm4gLUVOT0RFVjsK LQotCXNlcV9wcmludGYobSwgIlNpbmsgc3VwcG9ydDogJXMiLCB5ZXNubyhwc3ItPnNpbmtfc3Vw cG9ydCkpOwotCWlmIChwc3ItPmRwKQotCQlzZXFfcHJpbnRmKG0sICIgWzB4JTAyeF0iLCBwc3It PmRwLT5wc3JfZHBjZFswXSk7Ci0Jc2VxX3B1dHMobSwgIlxuIik7Ci0KLQlpZiAoIXBzci0+c2lu a19zdXBwb3J0KQotCQlyZXR1cm4gMDsKLQotCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dl dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwotCW11dGV4X2xvY2soJnBzci0+bG9jayk7Ci0KLQlp ZiAocHNyLT5lbmFibGVkKQotCQlzdGF0dXMgPSBwc3ItPnBzcjJfZW5hYmxlZCA/ICJQU1IyIGVu YWJsZWQiIDogIlBTUjEgZW5hYmxlZCI7Ci0JZWxzZQotCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwot CXNlcV9wcmludGYobSwgIlBTUiBtb2RlOiAlc1xuIiwgc3RhdHVzKTsKLQotCWlmICghcHNyLT5l bmFibGVkKSB7Ci0JCXNlcV9wcmludGYobSwgIlBTUiBzaW5rIG5vdCByZWxpYWJsZTogJXNcbiIs Ci0JCQkgICB5ZXNubyhwc3ItPnNpbmtfbm90X3JlbGlhYmxlKSk7Ci0KLQkJZ290byB1bmxvY2s7 Ci0JfQotCi0JaWYgKHBzci0+cHNyMl9lbmFibGVkKSB7Ci0JCXZhbCA9IEk5MTVfUkVBRChFRFBf UFNSMl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7Ci0JCWVuYWJsZWQgPSB2YWwgJiBF RFBfUFNSMl9FTkFCTEU7Ci0JfSBlbHNlIHsKLQkJdmFsID0gSTkxNV9SRUFEKEVEUF9QU1JfQ1RM KGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOwotCQllbmFibGVkID0gdmFsICYgRURQX1BTUl9F TkFCTEU7Ci0JfQotCXNlcV9wcmludGYobSwgIlNvdXJjZSBQU1IgY3RsOiAlcyBbMHglMDh4XVxu IiwKLQkJICAgZW5hYmxlZGRpc2FibGVkKGVuYWJsZWQpLCB2YWwpOwotCXBzcl9zb3VyY2Vfc3Rh dHVzKGRldl9wcml2LCBtKTsKLQlzZXFfcHJpbnRmKG0sICJCdXN5IGZyb250YnVmZmVyIGJpdHM6 IDB4JTA4eFxuIiwKLQkJICAgcHNyLT5idXN5X2Zyb250YnVmZmVyX2JpdHMpOwotCi0JLyoKLQkg KiBTS0wrIFBlcmYgY291bnRlciBpcyByZXNldCB0byAwIGV2ZXJ5dGltZSBEQyBzdGF0ZSBpcyBl bnRlcmVkCi0JICovCi0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChk ZXZfcHJpdikpIHsKLQkJdmFsID0gSTkxNV9SRUFEKEVEUF9QU1JfUEVSRl9DTlQoZGV2X3ByaXYt PnBzci50cmFuc2NvZGVyKSk7Ci0JCXZhbCAmPSBFRFBfUFNSX1BFUkZfQ05UX01BU0s7Ci0JCXNl cV9wcmludGYobSwgIlBlcmZvcm1hbmNlIGNvdW50ZXI6ICV1XG4iLCB2YWwpOwotCX0KLQotCWlm IChwc3ItPmRlYnVnICYgSTkxNV9QU1JfREVCVUdfSVJRKSB7Ci0JCXNlcV9wcmludGYobSwgIkxh c3QgYXR0ZW1wdGVkIGVudHJ5IGF0OiAlbGxkXG4iLAotCQkJICAgcHNyLT5sYXN0X2VudHJ5X2F0 dGVtcHQpOwotCQlzZXFfcHJpbnRmKG0sICJMYXN0IGV4aXQgYXQ6ICVsbGRcbiIsIHBzci0+bGFz dF9leGl0KTsKLQl9Ci0KLQlpZiAocHNyLT5wc3IyX2VuYWJsZWQpIHsKLQkJdTMyIHN1X2ZyYW1l c192YWxbM107Ci0JCWludCBmcmFtZTsKLQotCQkvKgotCQkgKiBSZWFkaW5nIGFsbCAzIHJlZ2lz dGVycyBiZWZvcmUgaGFuZCB0byBtaW5pbWl6ZSBjcm9zc2luZyBhCi0JCSAqIGZyYW1lIGJvdW5k YXJ5IGJldHdlZW4gcmVnaXN0ZXIgcmVhZHMKLQkJICovCi0JCWZvciAoZnJhbWUgPSAwOyBmcmFt ZSA8IFBTUjJfU1VfU1RBVFVTX0ZSQU1FUzsgZnJhbWUgKz0gMykgewotCQkJdmFsID0gSTkxNV9S RUFEKFBTUjJfU1VfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciwKLQkJCQkJCSAgICAg ICBmcmFtZSkpOwotCQkJc3VfZnJhbWVzX3ZhbFtmcmFtZSAvIDNdID0gdmFsOwotCQl9Ci0KLQkJ c2VxX3B1dHMobSwgIkZyYW1lOlx0UFNSMiBTVSBibG9ja3M6XG4iKTsKLQotCQlmb3IgKGZyYW1l ID0gMDsgZnJhbWUgPCBQU1IyX1NVX1NUQVRVU19GUkFNRVM7IGZyYW1lKyspIHsKLQkJCXUzMiBz dV9ibG9ja3M7Ci0KLQkJCXN1X2Jsb2NrcyA9IHN1X2ZyYW1lc192YWxbZnJhbWUgLyAzXSAmCi0J CQkJICAgIFBTUjJfU1VfU1RBVFVTX01BU0soZnJhbWUpOwotCQkJc3VfYmxvY2tzID0gc3VfYmxv Y2tzID4+IFBTUjJfU1VfU1RBVFVTX1NISUZUKGZyYW1lKTsKLQkJCXNlcV9wcmludGYobSwgIiVk XHQlZFxuIiwgZnJhbWUsIHN1X2Jsb2Nrcyk7Ci0JCX0KLQl9Ci0KLXVubG9jazoKLQltdXRleF91 bmxvY2soJnBzci0+bG9jayk7Ci0JaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50 aW1lX3BtLCB3YWtlcmVmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X2Vk cF9wc3JfZGVidWdfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGF0YTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlp bnQgcmV0OwotCi0JaWYgKCFDQU5fUFNSKGRldl9wcml2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0K LQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlNldHRpbmcgUFNSIGRlYnVnIHRvICVsbHhc biIsIHZhbCk7Ci0KLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRldl9wcml2LT5y dW50aW1lX3BtKTsKLQotCXJldCA9IGludGVsX3Bzcl9kZWJ1Z19zZXQoZGV2X3ByaXYsIHZhbCk7 Ci0KLQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYp OwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotaTkxNV9lZHBfcHNyX2RlYnVnX2dl dCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkYXRhOwotCi0JaWYgKCFDQU5fUFNSKGRldl9wcml2KSkKLQkJcmV0dXJuIC1FTk9E RVY7Ci0KLQkqdmFsID0gUkVBRF9PTkNFKGRldl9wcml2LT5wc3IuZGVidWcpOwotCXJldHVybiAw OwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShpOTE1X2VkcF9wc3JfZGVidWdfZm9wcywK LQkJCWk5MTVfZWRwX3Bzcl9kZWJ1Z19nZXQsIGk5MTVfZWRwX3Bzcl9kZWJ1Z19zZXQsCi0JCQki JWxsdVxuIik7Ci0KIHN0YXRpYyBpbnQgaTkxNV9ydW50aW1lX3BtX3N0YXR1cyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7CkBAIC0yMjIxLDEyMDcgKzE3NzcsNzgg QEAgc3RhdGljIGludCBpOTE1X3J1bnRpbWVfcG1fc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqdW51c2VkKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk5MTVfcG93ZXJfZG9t YWluX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IGk5 MTVfZW5naW5lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUp OwotCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYt PnBvd2VyX2RvbWFpbnM7Ci0JaW50IGk7Ci0KLQltdXRleF9sb2NrKCZwb3dlcl9kb21haW5zLT5s b2NrKTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7CisJc3RydWN0IGRybV9wcmludGVyIHA7CiAKLQlzZXFfcHJpbnRmKG0sICIlLTI1 cyAlc1xuIiwgIlBvd2VyIHdlbGwvZG9tYWluIiwgIlVzZSBjb3VudCIpOwotCWZvciAoaSA9IDA7 IGkgPCBwb3dlcl9kb21haW5zLT5wb3dlcl93ZWxsX2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGk5 MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbDsKLQkJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2Rv bWFpbiBwb3dlcl9kb21haW47CisJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZf cHJpdi0+cnVudGltZV9wbSk7CiAKLQkJcG93ZXJfd2VsbCA9ICZwb3dlcl9kb21haW5zLT5wb3dl cl93ZWxsc1tpXTsKLQkJc2VxX3ByaW50ZihtLCAiJS0yNXMgJWRcbiIsIHBvd2VyX3dlbGwtPmRl c2MtPm5hbWUsCi0JCQkgICBwb3dlcl93ZWxsLT5jb3VudCk7CisJc2VxX3ByaW50ZihtLCAiR1Qg YXdha2U/ICVzIFslZF1cbiIsCisJCSAgIHllc25vKGRldl9wcml2LT5ndC5hd2FrZSksCisJCSAg IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+Z3Qud2FrZXJlZi5jb3VudCkpOworCXNlcV9wcmludGYo bSwgIkNTIHRpbWVzdGFtcCBmcmVxdWVuY3k6ICV1IGtIelxuIiwKKwkJICAgUlVOVElNRV9JTkZP KGRldl9wcml2KS0+Y3NfdGltZXN0YW1wX2ZyZXF1ZW5jeV9raHopOwogCi0JCWZvcl9lYWNoX3Bv d2VyX2RvbWFpbihwb3dlcl9kb21haW4sIHBvd2VyX3dlbGwtPmRlc2MtPmRvbWFpbnMpCi0JCQlz ZXFfcHJpbnRmKG0sICIgICUtMjNzICVkXG4iLAotCQkJCSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2Rv bWFpbl9zdHIocG93ZXJfZG9tYWluKSwKLQkJCQkgcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9j b3VudFtwb3dlcl9kb21haW5dKTsKLQl9CisJcCA9IGRybV9zZXFfZmlsZV9wcmludGVyKG0pOwor CWZvcl9lYWNoX3VhYmlfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpCisJCWludGVsX2VuZ2luZV9k dW1wKGVuZ2luZSwgJnAsICIlc1xuIiwgZW5naW5lLT5uYW1lKTsKIAotCW11dGV4X3VubG9jaygm cG93ZXJfZG9tYWlucy0+bG9jayk7CisJaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5y dW50aW1lX3BtLCB3YWtlcmVmKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk5MTVf ZG1jX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IGk5 MTVfcmNzX3RvcG9sb2d5KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewogCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRl KTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlzdHJ1Y3QgaW50ZWxfY3NyICpjc3I7Ci0J aTkxNV9yZWdfdCBkYzVfcmVnLCBkYzZfcmVnID0ge307Ci0KLQlpZiAoIUhBU19DU1IoZGV2X3By aXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWNzciA9ICZkZXZfcHJpdi0+Y3NyOwotCi0Jd2Fr ZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7Ci0KLQlz ZXFfcHJpbnRmKG0sICJmdyBsb2FkZWQ6ICVzXG4iLCB5ZXNubyhjc3ItPmRtY19wYXlsb2FkICE9 IE5VTEwpKTsKLQlzZXFfcHJpbnRmKG0sICJwYXRoOiAlc1xuIiwgY3NyLT5md19wYXRoKTsKLQot CWlmICghY3NyLT5kbWNfcGF5bG9hZCkKLQkJZ290byBvdXQ7Ci0KLQlzZXFfcHJpbnRmKG0sICJ2 ZXJzaW9uOiAlZC4lZFxuIiwgQ1NSX1ZFUlNJT05fTUFKT1IoY3NyLT52ZXJzaW9uKSwKLQkJICAg Q1NSX1ZFUlNJT05fTUlOT1IoY3NyLT52ZXJzaW9uKSk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMikgewotCQlkYzVfcmVnID0gVEdMX0RNQ19ERUJVR19EQzVfQ09VTlQ7Ci0JCWRj Nl9yZWcgPSBUR0xfRE1DX0RFQlVHX0RDNl9DT1VOVDsKLQkJLyoKLQkJICogTk9URTogRE1DX0RF QlVHMyBpcyBhIGdlbmVyYWwgcHVycG9zZSByZWcuCi0JCSAqIEFjY29yZGluZyB0byBCLlNwZWNz OjQ5MTk2IERNQyBmL3cgcmV1c2VzIERDNS82IGNvdW50ZXIKLQkJICogcmVnIGZvciBEQzNDTyBk ZWJ1Z2dpbmcgYW5kIHZhbGlkYXRpb24sCi0JCSAqIGJ1dCBUR0wgRE1DIGYvdyBpcyB1c2luZyBE TUNfREVCVUczIHJlZyBmb3IgREMzQ08gY291bnRlci4KLQkJICovCi0JCXNlcV9wcmludGYobSwg IkRDM0NPIGNvdW50OiAlZFxuIiwgSTkxNV9SRUFEKERNQ19ERUJVRzMpKTsKLQl9IGVsc2Ugewot CQlkYzVfcmVnID0gSVNfQlJPWFRPTihkZXZfcHJpdikgPyBCWFRfQ1NSX0RDM19EQzVfQ09VTlQg OgotCQkJCQkJIFNLTF9DU1JfREMzX0RDNV9DT1VOVDsKLQkJaWYgKCFJU19HRU45X0xQKGRldl9w cml2KSkKLQkJCWRjNl9yZWcgPSBTS0xfQ1NSX0RDNV9EQzZfQ09VTlQ7Ci0JfQotCi0Jc2VxX3By aW50ZihtLCAiREMzIC0+IERDNSBjb3VudDogJWRcbiIsIEk5MTVfUkVBRChkYzVfcmVnKSk7Ci0J aWYgKGRjNl9yZWcucmVnKQotCQlzZXFfcHJpbnRmKG0sICJEQzUgLT4gREM2IGNvdW50OiAlZFxu IiwgSTkxNV9SRUFEKGRjNl9yZWcpKTsKLQotb3V0OgotCXNlcV9wcmludGYobSwgInByb2dyYW0g YmFzZTogMHglMDh4XG4iLCBJOTE1X1JFQUQoQ1NSX1BST0dSQU0oMCkpKTsKLQlzZXFfcHJpbnRm KG0sICJzc3AgYmFzZTogMHglMDh4XG4iLCBJOTE1X1JFQUQoQ1NSX1NTUF9CQVNFKSk7Ci0Jc2Vx X3ByaW50ZihtLCAiaHRwOiAweCUwOHhcbiIsIEk5MTVfUkVBRChDU1JfSFRQX1NLTCkpOworCXN0 cnVjdCBkcm1fcHJpbnRlciBwID0gZHJtX3NlcV9maWxlX3ByaW50ZXIobSk7CiAKLQlpbnRlbF9y dW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOworCWludGVsX2Rl dmljZV9pbmZvX3ByaW50X3RvcG9sb2d5KCZSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5zc2V1LCAm cCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfc2VxX3ByaW50X21vZGUo c3RydWN0IHNlcV9maWxlICptLCBpbnQgdGFicywKLQkJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCitzdGF0aWMgaW50IGk5MTVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKIAotCWZvciAoaSA9IDA7IGkg PCB0YWJzOyBpKyspCi0JCXNlcV9wdXRjKG0sICdcdCcpOworCXNlcV9wcmludGYobSwgInNlZWtz ID0gJWRcbiIsIGk5MTUtPm1tLnNocmlua2VyLnNlZWtzKTsKKwlzZXFfcHJpbnRmKG0sICJiYXRj aCA9ICVsdVxuIiwgaTkxNS0+bW0uc2hyaW5rZXIuYmF0Y2gpOwogCi0Jc2VxX3ByaW50ZihtLCBE Uk1fTU9ERV9GTVQgIlxuIiwgRFJNX01PREVfQVJHKG1vZGUpKTsKKwlyZXR1cm4gMDsKIH0KIAot c3RhdGljIHZvaWQgaW50ZWxfZW5jb2Rlcl9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKLQkJCSAg ICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlcikKK3N0YXRpYyBpbnQgaTkxNV93YV9yZWdpc3RlcnMoc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICp1bnVzZWQpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xp c3RfaXRlciBjb25uX2l0ZXI7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQot CXNlcV9wcmludGYobSwgIlx0W0VOQ09ERVI6JWQ6JXNdOiBjb25uZWN0b3JzOlxuIiwKLQkJICAg ZW5jb2Rlci0+YmFzZS5iYXNlLmlkLCBlbmNvZGVyLT5iYXNlLm5hbWUpOworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOworCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAotCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2lu KCZkZXZfcHJpdi0+ZHJtLCAmY29ubl9pdGVyKTsKLQlkcm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0 ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7Ci0JCWNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uX3N0YXRlID0KLQkJCWNvbm5lY3Rvci0+c3RhdGU7CisJZm9yX2VhY2hfdWFi aV9lbmdpbmUoZW5naW5lLCBpOTE1KSB7CisJCWNvbnN0IHN0cnVjdCBpOTE1X3dhX2xpc3QgKndh bCA9ICZlbmdpbmUtPmN0eF93YV9saXN0OworCQljb25zdCBzdHJ1Y3QgaTkxNV93YSAqd2E7CisJ CXVuc2lnbmVkIGludCBjb3VudDsKIAotCQlpZiAoY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyICE9 ICZlbmNvZGVyLT5iYXNlKQotCQkJY29udGludWU7Ci0KLQkJc2VxX3ByaW50ZihtLCAiXHRcdFtD T05ORUNUT1I6JWQ6JXNdXG4iLAotCQkJICAgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3It Pm5hbWUpOwotCX0KLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Ci19 Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BhbmVsX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1 Y3QgaW50ZWxfcGFuZWwgKnBhbmVsKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlID0gcGFuZWwtPmZpeGVkX21vZGU7Ci0KLQlzZXFfcHJpbnRmKG0sICJcdGZpeGVkIG1v ZGU6ICIgRFJNX01PREVfRk1UICJcbiIsIERSTV9NT0RFX0FSRyhtb2RlKSk7Ci19Ci0KLXN0YXRp YyB2b2lkIGludGVsX2hkY3BfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCi0JCQkgICAgc3RydWN0 IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKQotewotCWJvb2wgaGRjcF9jYXAsIGhk Y3AyX2NhcDsKLQotCWhkY3BfY2FwID0gaW50ZWxfaGRjcF9jYXBhYmxlKGludGVsX2Nvbm5lY3Rv cik7Ci0JaGRjcDJfY2FwID0gaW50ZWxfaGRjcDJfY2FwYWJsZShpbnRlbF9jb25uZWN0b3IpOwot Ci0JaWYgKGhkY3BfY2FwKQotCQlzZXFfcHV0cyhtLCAiSERDUDEuNCAiKTsKLQlpZiAoaGRjcDJf Y2FwKQotCQlzZXFfcHV0cyhtLCAiSERDUDIuMiAiKTsKLQotCWlmICghaGRjcF9jYXAgJiYgIWhk Y3AyX2NhcCkKLQkJc2VxX3B1dHMobSwgIk5vbmUiKTsKLQotCXNlcV9wdXRzKG0sICJcbiIpOwot fQotCi1zdGF0aWMgdm9pZCBpbnRlbF9kcF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKLQkJCSAg c3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKQotewotCXN0cnVjdCBpbnRl bF9lbmNvZGVyICppbnRlbF9lbmNvZGVyID0gaW50ZWxfYXR0YWNoZWRfZW5jb2RlcihpbnRlbF9j b25uZWN0b3IpOwotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAo aW50ZWxfZW5jb2Rlcik7Ci0KLQlzZXFfcHJpbnRmKG0sICJcdERQQ0QgcmV2OiAleFxuIiwgaW50 ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdKTsKLQlzZXFfcHJpbnRmKG0sICJcdGF1ZGlvIHN1cHBv cnQ6ICVzXG4iLCB5ZXNubyhpbnRlbF9kcC0+aGFzX2F1ZGlvKSk7Ci0JaWYgKGludGVsX2Nvbm5l Y3Rvci0+YmFzZS5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKQotCQlp bnRlbF9wYW5lbF9pbmZvKG0sICZpbnRlbF9jb25uZWN0b3ItPnBhbmVsKTsKLQotCWRybV9kcF9k b3duc3RyZWFtX2RlYnVnKG0sIGludGVsX2RwLT5kcGNkLCBpbnRlbF9kcC0+ZG93bnN0cmVhbV9w b3J0cywKLQkJCQkmaW50ZWxfZHAtPmF1eCk7Ci0JaWYgKGludGVsX2Nvbm5lY3Rvci0+aGRjcC5z aGltKSB7Ci0JCXNlcV9wdXRzKG0sICJcdEhEQ1AgdmVyc2lvbjogIik7Ci0JCWludGVsX2hkY3Bf aW5mbyhtLCBpbnRlbF9jb25uZWN0b3IpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZHBf bXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLAotCQkJICBzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICppbnRlbF9jb25uZWN0b3IpCi17Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29k ZXIgPSBpbnRlbF9hdHRhY2hlZF9lbmNvZGVyKGludGVsX2Nvbm5lY3Rvcik7Ci0Jc3RydWN0IGlu dGVsX2RwX21zdF9lbmNvZGVyICppbnRlbF9tc3QgPQotCQllbmNfdG9fbXN0KGludGVsX2VuY29k ZXIpOwotCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gaW50ZWxf bXN0LT5wcmltYXJ5OwotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmaW50ZWxfZGlnX3Bv cnQtPmRwOwotCWJvb2wgaGFzX2F1ZGlvID0gZHJtX2RwX21zdF9wb3J0X2hhc19hdWRpbygmaW50 ZWxfZHAtPm1zdF9tZ3IsCi0JCQkJCWludGVsX2Nvbm5lY3Rvci0+cG9ydCk7Ci0KLQlzZXFfcHJp bnRmKG0sICJcdGF1ZGlvIHN1cHBvcnQ6ICVzXG4iLCB5ZXNubyhoYXNfYXVkaW8pKTsKLX0KLQot c3RhdGljIHZvaWQgaW50ZWxfaGRtaV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKLQkJCSAgICBz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IpCi17Ci0Jc3RydWN0IGludGVs X2VuY29kZXIgKmludGVsX2VuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9lbmNvZGVyKGludGVsX2Nv bm5lY3Rvcik7Ci0Jc3RydWN0IGludGVsX2hkbWkgKmludGVsX2hkbWkgPSBlbmNfdG9faW50ZWxf aGRtaShpbnRlbF9lbmNvZGVyKTsKLQotCXNlcV9wcmludGYobSwgIlx0YXVkaW8gc3VwcG9ydDog JXNcbiIsIHllc25vKGludGVsX2hkbWktPmhhc19hdWRpbykpOwotCWlmIChpbnRlbF9jb25uZWN0 b3ItPmhkY3Auc2hpbSkgewotCQlzZXFfcHV0cyhtLCAiXHRIRENQIHZlcnNpb246ICIpOwotCQlp bnRlbF9oZGNwX2luZm8obSwgaW50ZWxfY29ubmVjdG9yKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk IGludGVsX2x2ZHNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCi0JCQkgICAgc3RydWN0IGludGVs X2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKQotewotCWludGVsX3BhbmVsX2luZm8obSwgJmlu dGVsX2Nvbm5lY3Rvci0+cGFuZWwpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9jb25uZWN0b3Jf aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCi0JCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci0Jc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0gdG9f aW50ZWxfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0JY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGUgPSBjb25uZWN0b3ItPnN0YXRlOwotCXN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyID0KLQkJdG9faW50ZWxfZW5jb2Rlcihjb25uX3N0YXRlLT5iZXN0X2VuY29k ZXIpOwotCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwotCi0Jc2VxX3ByaW50 ZihtLCAiW0NPTk5FQ1RPUjolZDolc106IHN0YXR1czogJXNcbiIsCi0JCSAgIGNvbm5lY3Rvci0+ YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lLAotCQkgICBkcm1fZ2V0X2Nvbm5lY3Rvcl9zdGF0dXNf bmFtZShjb25uZWN0b3ItPnN0YXR1cykpOwotCi0JaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNv bm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKQotCQlyZXR1cm47Ci0KLQlzZXFfcHJpbnRmKG0s ICJcdHBoeXNpY2FsIGRpbWVuc2lvbnM6ICVkeCVkbW1cbiIsCi0JCSAgIGNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLndpZHRoX21tLAotCQkgICBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRf bW0pOwotCXNlcV9wcmludGYobSwgIlx0c3VicGl4ZWwgb3JkZXI6ICVzXG4iLAotCQkgICBkcm1f Z2V0X3N1YnBpeGVsX29yZGVyX25hbWUoY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc3VicGl4ZWxf b3JkZXIpKTsKLQlzZXFfcHJpbnRmKG0sICJcdENFQSByZXY6ICVkXG4iLCBjb25uZWN0b3ItPmRp c3BsYXlfaW5mby5jZWFfcmV2KTsKLQotCWlmICghZW5jb2RlcikKLQkJcmV0dXJuOwotCi0Jc3dp dGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNU T1JfRGlzcGxheVBvcnQ6Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfZURQOgotCQlpZiAoZW5j b2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRFBfTVNUKQotCQkJaW50ZWxfZHBfbXN0X2luZm8o bSwgaW50ZWxfY29ubmVjdG9yKTsKLQkJZWxzZQotCQkJaW50ZWxfZHBfaW5mbyhtLCBpbnRlbF9j b25uZWN0b3IpOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgotCQlp ZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfTFZEUykKLQkJCWludGVsX2x2ZHNfaW5m byhtLCBpbnRlbF9jb25uZWN0b3IpOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RP Ul9IRE1JQToKLQkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0hETUkgfHwKLQkJ ICAgIGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0RESSkKLQkJCWludGVsX2hkbWlfaW5m byhtLCBpbnRlbF9jb25uZWN0b3IpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9 Ci0KLQlzZXFfcHJpbnRmKG0sICJcdG1vZGVzOlxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSht b2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKLQkJaW50ZWxfc2VxX3ByaW50X21vZGUobSwg MiwgbW9kZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpwbGFuZV90eXBlKGVudW0gZHJtX3Bs YW5lX3R5cGUgdHlwZSkKLXsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIERSTV9QTEFORV9UWVBF X09WRVJMQVk6Ci0JCXJldHVybiAiT1ZMIjsKLQljYXNlIERSTV9QTEFORV9UWVBFX1BSSU1BUlk6 Ci0JCXJldHVybiAiUFJJIjsKLQljYXNlIERSTV9QTEFORV9UWVBFX0NVUlNPUjoKLQkJcmV0dXJu ICJDVVIiOwotCS8qCi0JICogRGVsaWJlcmF0ZWx5IG9taXR0aW5nIGRlZmF1bHQ6IHRvIGdlbmVy YXRlIGNvbXBpbGVyIHdhcm5pbmdzCi0JICogd2hlbiBhIG5ldyBkcm1fcGxhbmVfdHlwZSBnZXRz IGFkZGVkLgotCSAqLwotCX0KLQotCXJldHVybiAidW5rbm93biI7Ci19Ci0KLXN0YXRpYyB2b2lk IHBsYW5lX3JvdGF0aW9uKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHVuc2lnbmVkIGludCBy b3RhdGlvbikKLXsKLQkvKgotCSAqIEFjY29yZGluZyB0byBkb2Mgb25seSBvbmUgRFJNX01PREVf Uk9UQVRFXyBpcyBhbGxvd2VkIGJ1dCB0aGlzCi0JICogd2lsbCBwcmludCB0aGVtIGFsbCB0byB2 aXN1YWxpemUgaWYgdGhlIHZhbHVlcyBhcmUgbWlzdXNlZAotCSAqLwotCXNucHJpbnRmKGJ1Ziwg YnVmc2l6ZSwKLQkJICIlcyVzJXMlcyVzJXMoMHglMDh4KSIsCi0JCSAocm90YXRpb24gJiBEUk1f TU9ERV9ST1RBVEVfMCkgPyAiMCAiIDogIiIsCi0JCSAocm90YXRpb24gJiBEUk1fTU9ERV9ST1RB VEVfOTApID8gIjkwICIgOiAiIiwKLQkJIChyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODAp ID8gIjE4MCAiIDogIiIsCi0JCSAocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMjcwKSA/ICIy NzAgIiA6ICIiLAotCQkgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKSA/ICJGTElQWCAi IDogIiIsCi0JCSAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1kpID8gIkZMSVBZICIgOiAi IiwKLQkJIHJvdGF0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcGxhbmVfdWFwaV9pbmZv KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkKLXsKLQljb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KLQkJdG9faW50ZWxfcGxh bmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gcGxhbmVfc3RhdGUtPnVhcGkuZmI7Ci0Jc3RydWN0IGRybV9mb3JtYXRfbmFtZV9i dWYgZm9ybWF0X25hbWU7Ci0Jc3RydWN0IGRybV9yZWN0IHNyYywgZHN0OwotCWNoYXIgcm90X3N0 cls0OF07Ci0KLQlzcmMgPSBkcm1fcGxhbmVfc3RhdGVfc3JjKCZwbGFuZV9zdGF0ZS0+dWFwaSk7 Ci0JZHN0ID0gZHJtX3BsYW5lX3N0YXRlX2Rlc3QoJnBsYW5lX3N0YXRlLT51YXBpKTsKLQotCWlm IChmYikKLQkJZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+Zm9ybWF0LT5mb3JtYXQsICZmb3JtYXRf bmFtZSk7Ci0KLQlwbGFuZV9yb3RhdGlvbihyb3Rfc3RyLCBzaXplb2Yocm90X3N0ciksCi0JCSAg ICAgICBwbGFuZV9zdGF0ZS0+dWFwaS5yb3RhdGlvbik7Ci0KLQlzZXFfcHJpbnRmKG0sICJcdFx0 dWFwaTogZmI9JWQsJXMsJWR4JWQsIHNyYz0iIERSTV9SRUNUX0ZQX0ZNVCAiLCBkc3Q9IiBEUk1f UkVDVF9GTVQgIiwgcm90YXRpb249JXNcbiIsCi0JCSAgIGZiID8gZmItPmJhc2UuaWQgOiAwLCBm YiA/IGZvcm1hdF9uYW1lLnN0ciA6ICJuL2EiLAotCQkgICBmYiA/IGZiLT53aWR0aCA6IDAsIGZi ID8gZmItPmhlaWdodCA6IDAsCi0JCSAgIERSTV9SRUNUX0ZQX0FSRygmc3JjKSwKLQkJICAgRFJN X1JFQ1RfQVJHKCZkc3QpLAotCQkgICByb3Rfc3RyKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxf cGxhbmVfaHdfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUpCi17Ci0JY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Ci0J CXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlzdHJ1Y3QgZHJtX2Zv cm1hdF9uYW1lX2J1ZiBmb3JtYXRfbmFtZTsKLQljaGFyIHJvdF9zdHJbNDhdOwotCi0JaWYgKCFm YikKLQkJcmV0dXJuOwotCi0JZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+Zm9ybWF0LT5mb3JtYXQs ICZmb3JtYXRfbmFtZSk7Ci0KLQlwbGFuZV9yb3RhdGlvbihyb3Rfc3RyLCBzaXplb2Yocm90X3N0 ciksCi0JCSAgICAgICBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24pOwotCi0Jc2VxX3ByaW50Ziht LCAiXHRcdGh3OiBmYj0lZCwlcywlZHglZCwgdmlzaWJsZT0lcywgc3JjPSIgRFJNX1JFQ1RfRlBf Rk1UICIsIGRzdD0iIERSTV9SRUNUX0ZNVCAiLCByb3RhdGlvbj0lc1xuIiwKLQkJICAgZmItPmJh c2UuaWQsIGZvcm1hdF9uYW1lLnN0ciwKLQkJICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAotCQkg ICB5ZXNubyhwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSwKLQkJICAgRFJNX1JFQ1RfRlBfQVJH KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpLAotCQkgICBEUk1fUkVDVF9BUkcoJnBsYW5lX3N0YXRl LT51YXBpLmRzdCksCi0JCSAgIHJvdF9zdHIpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbGFu ZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGludGVsX2NydGMgKmNydGMpCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZh dGUpOwotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Ci0KLQlmb3JfZWFjaF9pbnRlbF9wbGFu ZV9vbl9jcnRjKCZkZXZfcHJpdi0+ZHJtLCBjcnRjLCBwbGFuZSkgewotCQlzZXFfcHJpbnRmKG0s ICJcdFtQTEFORTolZDolc106IHR5cGU9JXNcbiIsCi0JCQkgICBwbGFuZS0+YmFzZS5iYXNlLmlk LCBwbGFuZS0+YmFzZS5uYW1lLAotCQkJICAgcGxhbmVfdHlwZShwbGFuZS0+YmFzZS50eXBlKSk7 Ci0JCWludGVsX3BsYW5lX3VhcGlfaW5mbyhtLCBwbGFuZSk7Ci0JCWludGVsX3BsYW5lX2h3X2lu Zm8obSwgcGxhbmUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfc2NhbGVyX2luZm8oc3Ry dWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKLXsKLQljb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9Ci0JCXRvX2ludGVsX2NydGNfc3RhdGUo Y3J0Yy0+YmFzZS5zdGF0ZSk7Ci0JaW50IG51bV9zY2FsZXJzID0gY3J0Yy0+bnVtX3NjYWxlcnM7 Ci0JaW50IGk7Ci0KLQkvKiBOb3QgYWxsIHBsYXRmb3JtYXMgaGF2ZSBhIHNjYWxlciAqLwotCWlm IChudW1fc2NhbGVycykgewotCQlzZXFfcHJpbnRmKG0sICJcdG51bV9zY2FsZXJzPSVkLCBzY2Fs ZXJfdXNlcnM9JXggc2NhbGVyX2lkPSVkIiwKLQkJCSAgIG51bV9zY2FsZXJzLAotCQkJICAgY3J0 Y19zdGF0ZS0+c2NhbGVyX3N0YXRlLnNjYWxlcl91c2VycywKLQkJCSAgIGNydGNfc3RhdGUtPnNj YWxlcl9zdGF0ZS5zY2FsZXJfaWQpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBudW1fc2NhbGVyczsg aSsrKSB7Ci0JCQljb25zdCBzdHJ1Y3QgaW50ZWxfc2NhbGVyICpzYyA9Ci0JCQkJJmNydGNfc3Rh dGUtPnNjYWxlcl9zdGF0ZS5zY2FsZXJzW2ldOwotCi0JCQlzZXFfcHJpbnRmKG0sICIsIHNjYWxl cnNbJWRdOiB1c2U9JXMsIG1vZGU9JXgiLAotCQkJCSAgIGksIHllc25vKHNjLT5pbl91c2UpLCBz Yy0+bW9kZSk7Ci0JCX0KLQkJc2VxX3B1dHMobSwgIlxuIik7Ci0JfSBlbHNlIHsKLQkJc2VxX3B1 dHMobSwgIlx0Tm8gc2NhbGVycyBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybVxuIik7Ci0JfQot fQotCi1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0JY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUgPQotCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3Rh dGUpOwotCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwotCi0Jc2VxX3ByaW50ZihtLCAi W0NSVEM6JWQ6JXNdOlxuIiwKLQkJICAgY3J0Yy0+YmFzZS5iYXNlLmlkLCBjcnRjLT5iYXNlLm5h bWUpOwotCi0Jc2VxX3ByaW50ZihtLCAiXHR1YXBpOiBlbmFibGU9JXMsIGFjdGl2ZT0lcywgbW9k ZT0iIERSTV9NT0RFX0ZNVCAiXG4iLAotCQkgICB5ZXNubyhjcnRjX3N0YXRlLT51YXBpLmVuYWJs ZSksCi0JCSAgIHllc25vKGNydGNfc3RhdGUtPnVhcGkuYWN0aXZlKSwKLQkJICAgRFJNX01PREVf QVJHKCZjcnRjX3N0YXRlLT51YXBpLm1vZGUpKTsKLQotCWlmIChjcnRjX3N0YXRlLT5ody5lbmFi bGUpIHsKLQkJc2VxX3ByaW50ZihtLCAiXHRodzogYWN0aXZlPSVzLCBhZGp1c3RlZF9tb2RlPSIg RFJNX01PREVfRk1UICJcbiIsCi0JCQkgICB5ZXNubyhjcnRjX3N0YXRlLT5ody5hY3RpdmUpLAot CQkJICAgRFJNX01PREVfQVJHKCZjcnRjX3N0YXRlLT5ody5hZGp1c3RlZF9tb2RlKSk7Ci0KLQkJ c2VxX3ByaW50ZihtLCAiXHRwaXBlIHNyYyBzaXplPSVkeCVkLCBkaXRoZXI9JXMsIGJwcD0lZFxu IiwKLQkJCSAgIGNydGNfc3RhdGUtPnBpcGVfc3JjX3csIGNydGNfc3RhdGUtPnBpcGVfc3JjX2gs Ci0JCQkgICB5ZXNubyhjcnRjX3N0YXRlLT5kaXRoZXIpLCBjcnRjX3N0YXRlLT5waXBlX2JwcCk7 Ci0KLQkJaW50ZWxfc2NhbGVyX2luZm8obSwgY3J0Yyk7Ci0JfQotCi0JZm9yX2VhY2hfaW50ZWxf ZW5jb2Rlcl9tYXNrKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyLAotCQkJCSAgICBjcnRjX3N0YXRl LT51YXBpLmVuY29kZXJfbWFzaykKLQkJaW50ZWxfZW5jb2Rlcl9pbmZvKG0sIGNydGMsIGVuY29k ZXIpOwotCi0JaW50ZWxfcGxhbmVfaW5mbyhtLCBjcnRjKTsKLQotCXNlcV9wcmludGYobSwgIlx0 dW5kZXJydW4gcmVwb3J0aW5nOiBjcHU9JXMgcGNoPSVzXG4iLAotCQkgICB5ZXNubyghY3J0Yy0+ Y3B1X2ZpZm9fdW5kZXJydW5fZGlzYWJsZWQpLAotCQkgICB5ZXNubyghY3J0Yy0+cGNoX2ZpZm9f dW5kZXJydW5fZGlzYWJsZWQpKTsKLX0KLQotc3RhdGljIGludCBpOTE1X2Rpc3BsYXlfaW5mbyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwot CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jf bGlzdF9pdGVyIGNvbm5faXRlcjsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQotCXdha2Vy ZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwotCi0JZHJt X21vZGVzZXRfbG9ja19hbGwoZGV2KTsKLQotCXNlcV9wcmludGYobSwgIkNSVEMgaW5mb1xuIik7 Ci0Jc2VxX3ByaW50ZihtLCAiLS0tLS0tLS0tXG4iKTsKLQlmb3JfZWFjaF9pbnRlbF9jcnRjKGRl diwgY3J0YykKLQkJaW50ZWxfY3J0Y19pbmZvKG0sIGNydGMpOwotCi0Jc2VxX3ByaW50ZihtLCAi XG4iKTsKLQlzZXFfcHJpbnRmKG0sICJDb25uZWN0b3IgaW5mb1xuIik7Ci0Jc2VxX3ByaW50Ziht LCAiLS0tLS0tLS0tLS0tLS1cbiIpOwotCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRl diwgJmNvbm5faXRlcik7Ci0JZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3Rvciwg JmNvbm5faXRlcikKLQkJaW50ZWxfY29ubmVjdG9yX2luZm8obSwgY29ubmVjdG9yKTsKLQlkcm1f Y29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Ci0KLQlkcm1fbW9kZXNldF91bmxv Y2tfYWxsKGRldik7Ci0KLQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVf cG0sIHdha2VyZWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9lbmdpbmVf aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXN0 cnVjdCBkcm1fcHJpbnRlciBwOwotCi0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZk ZXZfcHJpdi0+cnVudGltZV9wbSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJHVCBhd2FrZT8gJXMgWyVk XVxuIiwKLQkJICAgeWVzbm8oZGV2X3ByaXYtPmd0LmF3YWtlKSwKLQkJICAgYXRvbWljX3JlYWQo JmRldl9wcml2LT5ndC53YWtlcmVmLmNvdW50KSk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1MgdGltZXN0 YW1wIGZyZXF1ZW5jeTogJXUga0h6XG4iLAotCQkgICBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5j c190aW1lc3RhbXBfZnJlcXVlbmN5X2toeik7Ci0KLQlwID0gZHJtX3NlcV9maWxlX3ByaW50ZXIo bSk7Ci0JZm9yX2VhY2hfdWFiaV9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdikKLQkJaW50ZWxfZW5n aW5lX2R1bXAoZW5naW5lLCAmcCwgIiVzXG4iLCBlbmdpbmUtPm5hbWUpOwotCi0JaW50ZWxfcnVu dGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgaW50IGk5MTVfcmNzX3RvcG9sb2d5KHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqdW51c2VkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5v ZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlzdHJ1Y3QgZHJtX3ByaW50ZXIgcCA9IGRybV9zZXFf ZmlsZV9wcmludGVyKG0pOwotCi0JaW50ZWxfZGV2aWNlX2luZm9fcHJpbnRfdG9wb2xvZ3koJlJV TlRJTUVfSU5GTyhkZXZfcHJpdiktPnNzZXUsICZwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IGk5MTVfc2hyaW5rZXJfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNl ZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IG5vZGVfdG9faTkxNShtLT5w cml2YXRlKTsKLQotCXNlcV9wcmludGYobSwgInNlZWtzID0gJWRcbiIsIGk5MTUtPm1tLnNocmlu a2VyLnNlZWtzKTsKLQlzZXFfcHJpbnRmKG0sICJiYXRjaCA9ICVsdVxuIiwgaTkxNS0+bW0uc2hy aW5rZXIuYmF0Y2gpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9zaGFyZWRf ZHBsbHNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCWludCBpOwotCi0JZHJt X21vZGVzZXRfbG9ja19hbGwoZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9z aGFyZWRfZHBsbDsgaSsrKSB7Ci0JCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsID0gJmRl dl9wcml2LT5zaGFyZWRfZHBsbHNbaV07Ci0KLQkJc2VxX3ByaW50ZihtLCAiRFBMTCVpOiAlcywg aWQ6ICVpXG4iLCBpLCBwbGwtPmluZm8tPm5hbWUsCi0JCQkgICBwbGwtPmluZm8tPmlkKTsKLQkJ c2VxX3ByaW50ZihtLCAiIGNydGNfbWFzazogMHglMDh4LCBhY3RpdmU6IDB4JXgsIG9uOiAlc1xu IiwKLQkJCSAgIHBsbC0+c3RhdGUuY3J0Y19tYXNrLCBwbGwtPmFjdGl2ZV9tYXNrLCB5ZXNubyhw bGwtPm9uKSk7Ci0JCXNlcV9wcmludGYobSwgIiB0cmFja2VkIGhhcmR3YXJlIHN0YXRlOlxuIik7 Ci0JCXNlcV9wcmludGYobSwgIiBkcGxsOiAgICAweCUwOHhcbiIsIHBsbC0+c3RhdGUuaHdfc3Rh dGUuZHBsbCk7Ci0JCXNlcV9wcmludGYobSwgIiBkcGxsX21kOiAweCUwOHhcbiIsCi0JCQkgICBw bGwtPnN0YXRlLmh3X3N0YXRlLmRwbGxfbWQpOwotCQlzZXFfcHJpbnRmKG0sICIgZnAwOiAgICAg MHglMDh4XG4iLCBwbGwtPnN0YXRlLmh3X3N0YXRlLmZwMCk7Ci0JCXNlcV9wcmludGYobSwgIiBm cDE6ICAgICAweCUwOHhcbiIsIHBsbC0+c3RhdGUuaHdfc3RhdGUuZnAxKTsKLQkJc2VxX3ByaW50 ZihtLCAiIHdycGxsOiAgIDB4JTA4eFxuIiwgcGxsLT5zdGF0ZS5od19zdGF0ZS53cnBsbCk7Ci0J CXNlcV9wcmludGYobSwgIiBjZmdjcjA6ICAweCUwOHhcbiIsIHBsbC0+c3RhdGUuaHdfc3RhdGUu Y2ZnY3IwKTsKLQkJc2VxX3ByaW50ZihtLCAiIGNmZ2NyMTogIDB4JTA4eFxuIiwgcGxsLT5zdGF0 ZS5od19zdGF0ZS5jZmdjcjEpOwotCQlzZXFfcHJpbnRmKG0sICIgbWdfcmVmY2xraW5fY3RsOiAg ICAgICAgMHglMDh4XG4iLAotCQkJICAgcGxsLT5zdGF0ZS5od19zdGF0ZS5tZ19yZWZjbGtpbl9j dGwpOwotCQlzZXFfcHJpbnRmKG0sICIgbWdfY2xrdG9wMl9jb3JlY2xrY3RsMTogMHglMDh4XG4i LAotCQkJICAgcGxsLT5zdGF0ZS5od19zdGF0ZS5tZ19jbGt0b3AyX2NvcmVjbGtjdGwxKTsKLQkJ c2VxX3ByaW50ZihtLCAiIG1nX2Nsa3RvcDJfaHNjbGtjdGw6ICAgIDB4JTA4eFxuIiwKLQkJCSAg IHBsbC0+c3RhdGUuaHdfc3RhdGUubWdfY2xrdG9wMl9oc2Nsa2N0bCk7Ci0JCXNlcV9wcmludGYo bSwgIiBtZ19wbGxfZGl2MDogIDB4JTA4eFxuIiwKLQkJCSAgIHBsbC0+c3RhdGUuaHdfc3RhdGUu bWdfcGxsX2RpdjApOwotCQlzZXFfcHJpbnRmKG0sICIgbWdfcGxsX2RpdjE6ICAweCUwOHhcbiIs Ci0JCQkgICBwbGwtPnN0YXRlLmh3X3N0YXRlLm1nX3BsbF9kaXYxKTsKLQkJc2VxX3ByaW50Ziht LCAiIG1nX3BsbF9sZjogICAgMHglMDh4XG4iLAotCQkJICAgcGxsLT5zdGF0ZS5od19zdGF0ZS5t Z19wbGxfbGYpOwotCQlzZXFfcHJpbnRmKG0sICIgbWdfcGxsX2ZyYWNfbG9jazogMHglMDh4XG4i LAotCQkJICAgcGxsLT5zdGF0ZS5od19zdGF0ZS5tZ19wbGxfZnJhY19sb2NrKTsKLQkJc2VxX3By aW50ZihtLCAiIG1nX3BsbF9zc2M6ICAgMHglMDh4XG4iLAotCQkJICAgcGxsLT5zdGF0ZS5od19z dGF0ZS5tZ19wbGxfc3NjKTsKLQkJc2VxX3ByaW50ZihtLCAiIG1nX3BsbF9iaWFzOiAgMHglMDh4 XG4iLAotCQkJICAgcGxsLT5zdGF0ZS5od19zdGF0ZS5tZ19wbGxfYmlhcyk7Ci0JCXNlcV9wcmlu dGYobSwgIiBtZ19wbGxfdGRjX2NvbGRzdF9iaWFzOiAweCUwOHhcbiIsCi0JCQkgICBwbGwtPnN0 YXRlLmh3X3N0YXRlLm1nX3BsbF90ZGNfY29sZHN0X2JpYXMpOwotCX0KLQlkcm1fbW9kZXNldF91 bmxvY2tfYWxsKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpOTE1X3dhX3Jl Z2lzdGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmU7Ci0KLQlmb3JfZWFjaF91YWJpX2VuZ2luZShlbmdpbmUs IGk5MTUpIHsKLQkJY29uc3Qgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsID0gJmVuZ2luZS0+Y3R4 X3dhX2xpc3Q7Ci0JCWNvbnN0IHN0cnVjdCBpOTE1X3dhICp3YTsKLQkJdW5zaWduZWQgaW50IGNv dW50OwotCi0JCWNvdW50ID0gd2FsLT5jb3VudDsKLQkJaWYgKCFjb3VudCkKLQkJCWNvbnRpbnVl OwotCi0JCXNlcV9wcmludGYobSwgIiVzOiBXb3JrYXJvdW5kcyBhcHBsaWVkOiAldVxuIiwKLQkJ CSAgIGVuZ2luZS0+bmFtZSwgY291bnQpOwotCi0JCWZvciAod2EgPSB3YWwtPmxpc3Q7IGNvdW50 LS07IHdhKyspCi0JCQlzZXFfcHJpbnRmKG0sICIweCVYOiAweCUwOFgsIG1hc2s6IDB4JTA4WFxu IiwKLQkJCQkgICBpOTE1X21taW9fcmVnX29mZnNldCh3YS0+cmVnKSwKLQkJCQkgICB3YS0+c2V0 LCB3YS0+Y2xyKTsKLQotCQlzZXFfcHJpbnRmKG0sICJcbiIpOwotCX0KLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IGk5MTVfaXBjX3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBtLT5w cml2YXRlOwotCi0Jc2VxX3ByaW50ZihtLCAiSXNvY2hyb25vdXMgUHJpb3JpdHkgQ29udHJvbDog JXNcbiIsCi0JCQl5ZXNubyhkZXZfcHJpdi0+aXBjX2VuYWJsZWQpKTsKLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBpOTE1X2lwY19zdGF0dXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBpbm9kZS0+aV9wcml2YXRlOwotCi0JaWYgKCFIQVNfSVBDKGRldl9wcml2KSkKLQkJcmV0dXJu IC1FTk9ERVY7Ci0KLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaTkxNV9pcGNfc3RhdHVzX3No b3csIGRldl9wcml2KTsKLX0KLQotc3RhdGljIHNzaXplX3QgaTkxNV9pcGNfc3RhdHVzX3dyaXRl KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJCQkgICAgIHNp emVfdCBsZW4sIGxvZmZfdCAqb2ZmcCkKLXsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5w cml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJp dmF0ZTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlib29sIGVuYWJsZTsKLQlpbnQgcmV0 OwotCi0JcmV0ID0ga3N0cnRvYm9vbF9mcm9tX3VzZXIodWJ1ZiwgbGVuLCAmZW5hYmxlKTsKLQlp ZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXdpdGhfaW50ZWxfcnVudGltZV9wbSgmZGV2 X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKLQkJaWYgKCFkZXZfcHJpdi0+aXBjX2VuYWJs ZWQgJiYgZW5hYmxlKQotCQkJZHJtX2luZm8oJmRldl9wcml2LT5kcm0sCi0JCQkJICJFbmFibGlu ZyBJUEM6IFdNIHdpbGwgYmUgcHJvcGVyIG9ubHkgYWZ0ZXIgbmV4dCBjb21taXRcbiIpOwotCQlk ZXZfcHJpdi0+d20uZGlzdHJ1c3RfYmlvc193bSA9IHRydWU7Ci0JCWRldl9wcml2LT5pcGNfZW5h YmxlZCA9IGVuYWJsZTsKLQkJaW50ZWxfZW5hYmxlX2lwYyhkZXZfcHJpdik7Ci0JfQotCi0JcmV0 dXJuIGxlbjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9p cGNfc3RhdHVzX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSBpOTE1 X2lwY19zdGF0dXNfb3BlbiwKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNl ZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLQkud3JpdGUgPSBpOTE1X2lwY19zdGF0 dXNfd3JpdGUKLX07Ci0KLXN0YXRpYyBpbnQgaTkxNV9kZGJfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZk ZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBza2xfZGRiX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YzsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkKLQkJcmV0dXJu IC1FTk9ERVY7Ci0KLQlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOwotCi0Jc2VxX3ByaW50Ziht LCAiJS0xNXMlOHMlOHMlOHNcbiIsICIiLCAiU3RhcnQiLCAiRW5kIiwgIlNpemUiKTsKLQotCWZv cl9lYWNoX2ludGVsX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMpIHsKLQkJc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQotCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5i YXNlLnN0YXRlKTsKLQkJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCQllbnVtIHBsYW5l X2lkIHBsYW5lX2lkOwotCi0JCXNlcV9wcmludGYobSwgIlBpcGUgJWNcbiIsIHBpcGVfbmFtZShw aXBlKSk7Ci0KLQkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9pZCkgewot CQkJZW50cnkgPSAmY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lkXTsKLQkJ CXNlcV9wcmludGYobSwgIiAgUGxhbmUlLThkJTh1JTh1JTh1XG4iLCBwbGFuZV9pZCArIDEsCi0J CQkJICAgZW50cnktPnN0YXJ0LCBlbnRyeS0+ZW5kLAotCQkJCSAgIHNrbF9kZGJfZW50cnlfc2l6 ZShlbnRyeSkpOwotCQl9Ci0KLQkJZW50cnkgPSAmY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2Rk Yl95W1BMQU5FX0NVUlNPUl07Ci0JCXNlcV9wcmludGYobSwgIiAgJS0xM3MlOHUlOHUlOHVcbiIs ICJDdXJzb3IiLCBlbnRyeS0+c3RhcnQsCi0JCQkgICBlbnRyeS0+ZW5kLCBza2xfZGRiX2VudHJ5 X3NpemUoZW50cnkpKTsKLQl9Ci0KLQlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHJyc19zdGF0dXNfcGVyX2NydGMoc3RydWN0IHNl cV9maWxlICptLAotCQkJCSBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0IGk5MTVfZHJycyAqZHJycyA9ICZkZXZfcHJpdi0+ ZHJyczsKLQlpbnQgdnJlZnJlc2ggPSAwOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3I7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKLQotCWRybV9j b25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7Ci0JZHJtX2Zvcl9lYWNo X2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikgewotCQlpZiAoY29ubmVjdG9y LT5zdGF0ZS0+Y3J0YyAhPSAmaW50ZWxfY3J0Yy0+YmFzZSkKLQkJCWNvbnRpbnVlOwotCi0JCXNl cV9wcmludGYobSwgIiVzOlxuIiwgY29ubmVjdG9yLT5uYW1lKTsKLQl9Ci0JZHJtX2Nvbm5lY3Rv cl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwotCi0Jc2VxX3B1dHMobSwgIlxuIik7Ci0KLQlp ZiAodG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRjLT5iYXNlLnN0YXRlKS0+aGFzX2RycnMp IHsKLQkJc3RydWN0IGludGVsX3BhbmVsICpwYW5lbDsKLQotCQltdXRleF9sb2NrKCZkcnJzLT5t dXRleCk7Ci0JCS8qIERSUlMgU3VwcG9ydGVkICovCi0JCXNlcV9wdXRzKG0sICJcdERSUlMgU3Vw cG9ydGVkOiBZZXNcbiIpOwotCi0JCS8qIGRpc2FibGVfZHJycygpIHdpbGwgbWFrZSBkcnJzLT5k cCBOVUxMICovCi0JCWlmICghZHJycy0+ZHApIHsKLQkJCXNlcV9wdXRzKG0sICJJZGxlbmVzcyBE UlJTOiBEaXNhYmxlZFxuIik7Ci0JCQlpZiAoZGV2X3ByaXYtPnBzci5lbmFibGVkKQotCQkJCXNl cV9wdXRzKG0sCi0JCQkJIlx0QXMgUFNSIGlzIGVuYWJsZWQsIERSUlMgaXMgbm90IGVuYWJsZWRc biIpOwotCQkJbXV0ZXhfdW5sb2NrKCZkcnJzLT5tdXRleCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQot CQlwYW5lbCA9ICZkcnJzLT5kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5wYW5lbDsKLQkJc2VxX3By aW50ZihtLCAiXHRcdEJ1c3lfZnJvbnRidWZmZXJfYml0czogMHglWCIsCi0JCQkJCWRycnMtPmJ1 c3lfZnJvbnRidWZmZXJfYml0cyk7Ci0KLQkJc2VxX3B1dHMobSwgIlxuXHRcdCIpOwotCQlpZiAo ZHJycy0+cmVmcmVzaF9yYXRlX3R5cGUgPT0gRFJSU19ISUdIX1JSKSB7Ci0JCQlzZXFfcHV0cyht LCAiRFJSU19TdGF0ZTogRFJSU19ISUdIX1JSXG4iKTsKLQkJCXZyZWZyZXNoID0gcGFuZWwtPmZp eGVkX21vZGUtPnZyZWZyZXNoOwotCQl9IGVsc2UgaWYgKGRycnMtPnJlZnJlc2hfcmF0ZV90eXBl ID09IERSUlNfTE9XX1JSKSB7Ci0JCQlzZXFfcHV0cyhtLCAiRFJSU19TdGF0ZTogRFJSU19MT1df UlJcbiIpOwotCQkJdnJlZnJlc2ggPSBwYW5lbC0+ZG93bmNsb2NrX21vZGUtPnZyZWZyZXNoOwot CQl9IGVsc2UgewotCQkJc2VxX3ByaW50ZihtLCAiRFJSU19TdGF0ZTogVW5rbm93biglZClcbiIs Ci0JCQkJCQlkcnJzLT5yZWZyZXNoX3JhdGVfdHlwZSk7Ci0JCQltdXRleF91bmxvY2soJmRycnMt Pm11dGV4KTsKLQkJCXJldHVybjsKLQkJfQotCQlzZXFfcHJpbnRmKG0sICJcdFx0VnJlZnJlc2g6 ICVkIiwgdnJlZnJlc2gpOwotCi0JCXNlcV9wdXRzKG0sICJcblx0XHQiKTsKLQkJbXV0ZXhfdW5s b2NrKCZkcnJzLT5tdXRleCk7Ci0JfSBlbHNlIHsKLQkJLyogRFJSUyBub3Qgc3VwcG9ydGVkLiBQ cmludCB0aGUgVkJUIHBhcmFtZXRlciovCi0JCXNlcV9wdXRzKG0sICJcdERSUlMgU3VwcG9ydGVk IDogTm8iKTsKLQl9Ci0Jc2VxX3B1dHMobSwgIlxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9k cnJzX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjOwotCWludCBhY3RpdmVfY3J0Y19jbnQgPSAwOwotCi0JZHJtX21vZGVz ZXRfbG9ja19hbGwoZGV2KTsKLQlmb3JfZWFjaF9pbnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0Yykg ewotCQlpZiAoaW50ZWxfY3J0Yy0+YmFzZS5zdGF0ZS0+YWN0aXZlKSB7Ci0JCQlhY3RpdmVfY3J0 Y19jbnQrKzsKLQkJCXNlcV9wcmludGYobSwgIlxuQ1JUQyAlZDogICIsIGFjdGl2ZV9jcnRjX2Nu dCk7Ci0KLQkJCWRycnNfc3RhdHVzX3Blcl9jcnRjKG0sIGRldiwgaW50ZWxfY3J0Yyk7Ci0JCX0K LQl9Ci0JZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOwotCi0JaWYgKCFhY3RpdmVfY3J0Y19j bnQpCi0JCXNlcV9wdXRzKG0sICJObyBhY3RpdmUgY3J0YyBmb3VuZFxuIik7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBpOTE1X2RwX21zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqdW51c2VkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5v ZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9w cml2LT5kcm07Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXI7Ci0Jc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQ7Ci0Jc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVy OwotCi0JZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKLQlk cm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7Ci0JCWlm IChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5 UG9ydCkKLQkJCWNvbnRpbnVlOwotCi0JCWludGVsX2VuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9l bmNvZGVyKHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsKLQkJaWYgKCFpbnRlbF9lbmNv ZGVyIHx8IGludGVsX2VuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0RQX01TVCkKLQkJCWNv bnRpbnVlOwotCi0JCWludGVsX2RpZ19wb3J0ID0gZW5jX3RvX2RpZ19wb3J0KGludGVsX2VuY29k ZXIpOwotCQlpZiAoIWludGVsX2RpZ19wb3J0LT5kcC5jYW5fbXN0KQotCQkJY29udGludWU7Ci0K LQkJc2VxX3ByaW50ZihtLCAiTVNUIFNvdXJjZSBQb3J0IFtFTkNPREVSOiVkOiVzXVxuIiwKLQkJ CSAgIGludGVsX2RpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKLQkJCSAgIGludGVsX2RpZ19w b3J0LT5iYXNlLmJhc2UubmFtZSk7Ci0JCWRybV9kcF9tc3RfZHVtcF90b3BvbG9neShtLCAmaW50 ZWxfZGlnX3BvcnQtPmRwLm1zdF9tZ3IpOwotCX0KLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9l bmQoJmNvbm5faXRlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgaTkxNV9k aXNwbGF5cG9ydF90ZXN0X2FjdGl2ZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJCSAg Y29uc3QgY2hhciBfX3VzZXIgKnVidWYsCi0JCQkJCQkgIHNpemVfdCBsZW4sIGxvZmZfdCAqb2Zm cCkKLXsKLQljaGFyICppbnB1dF9idWZmZXI7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVj dCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7Ci0Jc3RydWN0IGludGVsX2RwICpp bnRlbF9kcDsKLQlpbnQgdmFsID0gMDsKLQotCWRldiA9ICgoc3RydWN0IHNlcV9maWxlICopZmls ZS0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKLQotCWlmIChsZW4gPT0gMCkKLQkJcmV0dXJuIDA7 Ci0KLQlpbnB1dF9idWZmZXIgPSBtZW1kdXBfdXNlcl9udWwodWJ1ZiwgbGVuKTsKLQlpZiAoSVNf RVJSKGlucHV0X2J1ZmZlcikpCi0JCXJldHVybiBQVFJfRVJSKGlucHV0X2J1ZmZlcik7Ci0KLQlk cm1fZGJnKCZ0b19pOTE1KGRldiktPmRybSwKLQkJIkNvcGllZCAlZCBieXRlcyBmcm9tIHVzZXJc biIsICh1bnNpZ25lZCBpbnQpbGVuKTsKLQotCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2lu KGRldiwgJmNvbm5faXRlcik7Ci0JZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3Rv ciwgJmNvbm5faXRlcikgewotCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKLQotCQlp ZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPQotCQkgICAgRFJNX01PREVfQ09OTkVDVE9S X0Rpc3BsYXlQb3J0KQotCQkJY29udGludWU7Ci0KLQkJZW5jb2RlciA9IHRvX2ludGVsX2VuY29k ZXIoY29ubmVjdG9yLT5lbmNvZGVyKTsKLQkJaWYgKGVuY29kZXIgJiYgZW5jb2Rlci0+dHlwZSA9 PSBJTlRFTF9PVVRQVVRfRFBfTVNUKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGVuY29kZXIgJiYg Y29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKLQkJCWlu dGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwotCQkJc3RhdHVzID0ga3N0cnRvaW50 KGlucHV0X2J1ZmZlciwgMTAsICZ2YWwpOwotCQkJaWYgKHN0YXR1cyA8IDApCi0JCQkJYnJlYWs7 Ci0JCQlkcm1fZGJnKCZ0b19pOTE1KGRldiktPmRybSwKLQkJCQkiR290ICVkIGZvciB0ZXN0IGFj dGl2ZVxuIiwgdmFsKTsKLQkJCS8qIFRvIHByZXZlbnQgZXJyb25lb3VzIGFjdGl2YXRpb24gb2Yg dGhlIGNvbXBsaWFuY2UKLQkJCSAqIHRlc3RpbmcgY29kZSwgb25seSBhY2NlcHQgYW4gYWN0dWFs IHZhbHVlIG9mIDEgaGVyZQotCQkJICovCi0JCQlpZiAodmFsID09IDEpCi0JCQkJaW50ZWxfZHAt PmNvbXBsaWFuY2UudGVzdF9hY3RpdmUgPSB0cnVlOwotCQkJZWxzZQotCQkJCWludGVsX2RwLT5j b21wbGlhbmNlLnRlc3RfYWN0aXZlID0gZmFsc2U7Ci0JCX0KLQl9Ci0JZHJtX2Nvbm5lY3Rvcl9s aXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwotCWtmcmVlKGlucHV0X2J1ZmZlcik7Ci0JaWYgKHN0 YXR1cyA8IDApCi0JCXJldHVybiBzdGF0dXM7Ci0KLQkqb2ZmcCArPSBsZW47Ci0JcmV0dXJuIGxl bjsKLX0KLQotc3RhdGljIGludCBpOTE1X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0aXZlX3Nob3coc3Ry dWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZf cHJpdi0+ZHJtOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGRy bV9jb25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwOwotCi0JZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsK LQlkcm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7Ci0J CXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwotCi0JCWlmIChjb25uZWN0b3ItPmNvbm5l Y3Rvcl90eXBlICE9Ci0JCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCi0JCQlj b250aW51ZTsKLQotCQllbmNvZGVyID0gdG9faW50ZWxfZW5jb2Rlcihjb25uZWN0b3ItPmVuY29k ZXIpOwotCQlpZiAoZW5jb2RlciAmJiBlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9EUF9N U1QpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZW5jb2RlciAmJiBjb25uZWN0b3ItPnN0YXR1cyA9 PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgewotCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50 ZWxfZHAoZW5jb2Rlcik7Ci0JCQlpZiAoaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9hY3RpdmUp Ci0JCQkJc2VxX3B1dHMobSwgIjEiKTsKLQkJCWVsc2UKLQkJCQlzZXFfcHV0cyhtLCAiMCIpOwot CQl9IGVsc2UKLQkJCXNlcV9wdXRzKG0sICIwIik7Ci0JfQotCWRybV9jb25uZWN0b3JfbGlzdF9p dGVyX2VuZCgmY29ubl9pdGVyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGk5MTVf ZGlzcGxheXBvcnRfdGVzdF9hY3RpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkg ICAgIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpOTE1 X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0aXZlX3Nob3csCi0JCQkgICBpbm9kZS0+aV9wcml2YXRlKTsK LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9kaXNwbGF5cG9y dF90ZXN0X2FjdGl2ZV9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0g aTkxNV9kaXNwbGF5cG9ydF90ZXN0X2FjdGl2ZV9vcGVuLAotCS5yZWFkID0gc2VxX3JlYWQsCi0J Lmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotCS53cml0 ZSA9IGk5MTVfZGlzcGxheXBvcnRfdGVzdF9hY3RpdmVfd3JpdGUKLX07Ci0KLXN0YXRpYyBpbnQg aTkxNV9kaXNwbGF5cG9ydF90ZXN0X2RhdGFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQg KmRhdGEpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0 ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Ci0Jc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIg Y29ubl9pdGVyOwotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHA7Ci0KLQlkcm1fY29ubmVjdG9y X2xpc3RfaXRlcl9iZWdpbihkZXYsICZjb25uX2l0ZXIpOwotCWRybV9mb3JfZWFjaF9jb25uZWN0 b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKLQkJc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXI7Ci0KLQkJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0KLQkJICAgIERS TV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKLQkJCWNvbnRpbnVlOwotCi0JCWVuY29kZXIg PSB0b19pbnRlbF9lbmNvZGVyKGNvbm5lY3Rvci0+ZW5jb2Rlcik7Ci0JCWlmIChlbmNvZGVyICYm IGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0RQX01TVCkKLQkJCWNvbnRpbnVlOwotCi0J CWlmIChlbmNvZGVyICYmIGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkKSB7Ci0JCQlpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKLQkJCWlm IChpbnRlbF9kcC0+Y29tcGxpYW5jZS50ZXN0X3R5cGUgPT0KLQkJCSAgICBEUF9URVNUX0xJTktf RURJRF9SRUFEKQotCQkJCXNlcV9wcmludGYobSwgIiVseCIsCi0JCQkJCSAgIGludGVsX2RwLT5j b21wbGlhbmNlLnRlc3RfZGF0YS5lZGlkKTsKLQkJCWVsc2UgaWYgKGludGVsX2RwLT5jb21wbGlh bmNlLnRlc3RfdHlwZSA9PQotCQkJCSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikgewotCQkJ CXNlcV9wcmludGYobSwgImhkaXNwbGF5OiAlZFxuIiwKLQkJCQkJICAgaW50ZWxfZHAtPmNvbXBs aWFuY2UudGVzdF9kYXRhLmhkaXNwbGF5KTsKLQkJCQlzZXFfcHJpbnRmKG0sICJ2ZGlzcGxheTog JWRcbiIsCi0JCQkJCSAgIGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfZGF0YS52ZGlzcGxheSk7 Ci0JCQkJc2VxX3ByaW50ZihtLCAiYnBjOiAldVxuIiwKLQkJCQkJICAgaW50ZWxfZHAtPmNvbXBs aWFuY2UudGVzdF9kYXRhLmJwYyk7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJc2VxX3B1dHMobSwgIjAi KTsKLQl9Ci0JZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwotCi0JcmV0 dXJuIDA7Ci19Ci1ERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9kaXNwbGF5cG9ydF90ZXN0X2Rh dGEpOwotCi1zdGF0aWMgaW50IGk5MTVfZGlzcGxheXBvcnRfdGVzdF90eXBlX3Nob3coc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJp di0+ZHJtOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGRybV9j b25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw OwotCi0JZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKLQlk cm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7Ci0JCXN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwotCi0JCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rv cl90eXBlICE9Ci0JCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCi0JCQljb250 aW51ZTsKLQotCQllbmNvZGVyID0gdG9faW50ZWxfZW5jb2Rlcihjb25uZWN0b3ItPmVuY29kZXIp OwotCQlpZiAoZW5jb2RlciAmJiBlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9EUF9NU1Qp Ci0JCQljb250aW51ZTsKLQotCQlpZiAoZW5jb2RlciAmJiBjb25uZWN0b3ItPnN0YXR1cyA9PSBj b25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkgewotCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxf ZHAoZW5jb2Rlcik7Ci0JCQlzZXFfcHJpbnRmKG0sICIlMDJseCIsIGludGVsX2RwLT5jb21wbGlh bmNlLnRlc3RfdHlwZSk7Ci0JCX0gZWxzZQotCQkJc2VxX3B1dHMobSwgIjAiKTsKLQl9Ci0JZHJt X2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci1E RUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9kaXNwbGF5cG9ydF90ZXN0X3R5cGUpOwotCi1zdGF0 aWMgdm9pZCB3bV9sYXRlbmN5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1MTYgd21b OF0pCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Ci0JaW50IGxldmVsOwot CWludCBudW1fbGV2ZWxzOwotCi0JaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQludW1f bGV2ZWxzID0gMzsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJbnVtX2xl dmVscyA9IDE7Ci0JZWxzZSBpZiAoSVNfRzRYKGRldl9wcml2KSkKLQkJbnVtX2xldmVscyA9IDM7 Ci0JZWxzZQotCQludW1fbGV2ZWxzID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdikgKyAxOwot Ci0JZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKLQotCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8 IG51bV9sZXZlbHM7IGxldmVsKyspIHsKLQkJdW5zaWduZWQgaW50IGxhdGVuY3kgPSB3bVtsZXZl bF07Ci0KLQkJLyoKLQkJICogLSBXTTErIGxhdGVuY3kgdmFsdWVzIGluIDAuNXVzIHVuaXRzCi0J CSAqIC0gbGF0ZW5jaWVzIGFyZSBpbiB1cyBvbiBnZW45L3Zsdi9jaHYKLQkJICovCi0JCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkgfHwKLQkJICAgIElTX1ZBTExFWVZJRVcoZGV2X3ByaXYp IHx8Ci0JCSAgICBJU19DSEVSUllWSUVXKGRldl9wcml2KSB8fAotCQkgICAgSVNfRzRYKGRldl9w cml2KSkKLQkJCWxhdGVuY3kgKj0gMTA7Ci0JCWVsc2UgaWYgKGxldmVsID4gMCkKLQkJCWxhdGVu Y3kgKj0gNTsKLQotCQlzZXFfcHJpbnRmKG0sICJXTSVkICV1ICgldS4ldSB1c2VjKVxuIiwKLQkJ CSAgIGxldmVsLCB3bVtsZXZlbF0sIGxhdGVuY3kgLyAxMCwgbGF0ZW5jeSAlIDEwKTsKLQl9Ci0K LQlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpX3dtX2xh dGVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKLQljb25zdCB1MTYgKmxhdGVu Y2llczsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCWxhdGVuY2llcyA9IGRl dl9wcml2LT53bS5za2xfbGF0ZW5jeTsKLQllbHNlCi0JCWxhdGVuY2llcyA9IGRldl9wcml2LT53 bS5wcmlfbGF0ZW5jeTsKLQotCXdtX2xhdGVuY3lfc2hvdyhtLCBsYXRlbmNpZXMpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3ByX3dtX2xhdGVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gbS0+cHJpdmF0ZTsKLQljb25zdCB1MTYgKmxhdGVuY2llczsKLQotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDkpCi0JCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeTsK LQllbHNlCi0JCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5zcHJfbGF0ZW5jeTsKLQotCXdtX2xh dGVuY3lfc2hvdyhtLCBsYXRlbmNpZXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg Y3VyX3dtX2xhdGVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKLQljb25zdCB1 MTYgKmxhdGVuY2llczsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCWxhdGVu Y2llcyA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeTsKLQllbHNlCi0JCWxhdGVuY2llcyA9IGRl dl9wcml2LT53bS5jdXJfbGF0ZW5jeTsKLQotCXdtX2xhdGVuY3lfc2hvdyhtLCBsYXRlbmNpZXMp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpX3dtX2xhdGVuY3lfb3BlbihzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBpbm9kZS0+aV9wcml2YXRlOwotCi0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCA1ICYmICFJU19HNFgoZGV2X3ByaXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQot CXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcmlfd21fbGF0ZW5jeV9zaG93LCBkZXZfcHJpdik7 Ci19Ci0KLXN0YXRpYyBpbnQgc3ByX3dtX2xhdGVuY3lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBpbm9kZS0+aV9wcml2YXRlOwotCi0JaWYgKEhBU19HTUNIKGRldl9wcml2KSkKLQkJcmV0 dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3ByX3dtX2xhdGVuY3lf c2hvdywgZGV2X3ByaXYpOwotfQotCi1zdGF0aWMgaW50IGN1cl93bV9sYXRlbmN5X29wZW4oc3Ry dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQotCWlmIChIQVNfR01DSChk ZXZfcHJpdikpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUs IGN1cl93bV9sYXRlbmN5X3Nob3csIGRldl9wcml2KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgd21f bGF0ZW5jeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYs Ci0JCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZwLCB1MTYgd21bOF0pCi17Ci0Jc3RydWN0IHNl cV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZf cHJpdi0+ZHJtOwotCXUxNiBuZXdbOF0gPSB7IDAgfTsKLQlpbnQgbnVtX2xldmVsczsKLQlpbnQg bGV2ZWw7Ci0JaW50IHJldDsKLQljaGFyIHRtcFszMl07Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpCi0JCW51bV9sZXZlbHMgPSAzOwotCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2 X3ByaXYpKQotCQludW1fbGV2ZWxzID0gMTsKLQllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQot CQludW1fbGV2ZWxzID0gMzsKLQllbHNlCi0JCW51bV9sZXZlbHMgPSBpbGtfd21fbWF4X2xldmVs KGRldl9wcml2KSArIDE7Ci0KLQlpZiAobGVuID49IHNpemVvZih0bXApKQotCQlyZXR1cm4gLUVJ TlZBTDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcih0bXAsIHVidWYsIGxlbikpCi0JCXJldHVybiAt RUZBVUxUOwotCi0JdG1wW2xlbl0gPSAnXDAnOwotCi0JcmV0ID0gc3NjYW5mKHRtcCwgIiVodSAl aHUgJWh1ICVodSAlaHUgJWh1ICVodSAlaHUiLAotCQkgICAgICZuZXdbMF0sICZuZXdbMV0sICZu ZXdbMl0sICZuZXdbM10sCi0JCSAgICAgJm5ld1s0XSwgJm5ld1s1XSwgJm5ld1s2XSwgJm5ld1s3 XSk7Ci0JaWYgKHJldCAhPSBudW1fbGV2ZWxzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRybV9t b2Rlc2V0X2xvY2tfYWxsKGRldik7Ci0KLQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBudW1fbGV2 ZWxzOyBsZXZlbCsrKQotCQl3bVtsZXZlbF0gPSBuZXdbbGV2ZWxdOwotCi0JZHJtX21vZGVzZXRf dW5sb2NrX2FsbChkZXYpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBw cmlfd21fbGF0ZW5jeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIg KnVidWYsCi0JCQkJICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmcCkKLXsKLQlzdHJ1Y3Qgc2Vx X2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKLQl1MTYgKmxhdGVuY2llczsKLQotCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDkpCi0JCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5j eTsKLQllbHNlCi0JCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeTsKLQotCXJl dHVybiB3bV9sYXRlbmN5X3dyaXRlKGZpbGUsIHVidWYsIGxlbiwgb2ZmcCwgbGF0ZW5jaWVzKTsK LX0KLQotc3RhdGljIHNzaXplX3Qgc3ByX3dtX2xhdGVuY3lfd3JpdGUoc3RydWN0IGZpbGUgKmZp bGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAotCQkJCSAgICBzaXplX3QgbGVuLCBsb2ZmX3Qg Km9mZnApCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7Ci0JdTE2ICpsYXRl bmNpZXM7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlsYXRlbmNpZXMgPSBk ZXZfcHJpdi0+d20uc2tsX2xhdGVuY3k7Ci0JZWxzZQotCQlsYXRlbmNpZXMgPSBkZXZfcHJpdi0+ d20uc3ByX2xhdGVuY3k7CisJCWNvdW50ID0gd2FsLT5jb3VudDsKKwkJaWYgKCFjb3VudCkKKwkJ CWNvbnRpbnVlOwogCi0JcmV0dXJuIHdtX2xhdGVuY3lfd3JpdGUoZmlsZSwgdWJ1ZiwgbGVuLCBv ZmZwLCBsYXRlbmNpZXMpOwotfQorCQlzZXFfcHJpbnRmKG0sICIlczogV29ya2Fyb3VuZHMgYXBw bGllZDogJXVcbiIsCisJCQkgICBlbmdpbmUtPm5hbWUsIGNvdW50KTsKIAotc3RhdGljIHNzaXpl X3QgY3VyX3dtX2xhdGVuY3lfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191 c2VyICp1YnVmLAotCQkJCSAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCi17Ci0Jc3RydWN0 IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7Ci0JdTE2ICpsYXRlbmNpZXM7CisJCWZvciAod2Eg PSB3YWwtPmxpc3Q7IGNvdW50LS07IHdhKyspCisJCQlzZXFfcHJpbnRmKG0sICIweCVYOiAweCUw OFgsIG1hc2s6IDB4JTA4WFxuIiwKKwkJCQkgICBpOTE1X21taW9fcmVnX29mZnNldCh3YS0+cmVn KSwKKwkJCQkgICB3YS0+c2V0LCB3YS0+Y2xyKTsKIAotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDkpCi0JCWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeTsKLQllbHNlCi0J CWxhdGVuY2llcyA9IGRldl9wcml2LT53bS5jdXJfbGF0ZW5jeTsKKwkJc2VxX3ByaW50ZihtLCAi XG4iKTsKKwl9CiAKLQlyZXR1cm4gd21fbGF0ZW5jeV93cml0ZShmaWxlLCB1YnVmLCBsZW4sIG9m ZnAsIGxhdGVuY2llcyk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIGk5MTVfcHJpX3dtX2xhdGVuY3lfZm9wcyA9IHsKLQkub3duZXIgPSBUSElT X01PRFVMRSwKLQkub3BlbiA9IHByaV93bV9sYXRlbmN5X29wZW4sCi0JLnJlYWQgPSBzZXFfcmVh ZCwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi0J LndyaXRlID0gcHJpX3dtX2xhdGVuY3lfd3JpdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIGk5MTVfc3ByX3dtX2xhdGVuY3lfZm9wcyA9IHsKLQkub3duZXIgPSBU SElTX01PRFVMRSwKLQkub3BlbiA9IHNwcl93bV9sYXRlbmN5X29wZW4sCi0JLnJlYWQgPSBzZXFf cmVhZCwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2Us Ci0JLndyaXRlID0gc3ByX3dtX2xhdGVuY3lfd3JpdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZmlsZV9vcGVyYXRpb25zIGk5MTVfY3VyX3dtX2xhdGVuY3lfZm9wcyA9IHsKLQkub3duZXIg PSBUSElTX01PRFVMRSwKLQkub3BlbiA9IGN1cl93bV9sYXRlbmN5X29wZW4sCi0JLnJlYWQgPSBz ZXFfcmVhZCwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVh c2UsCi0JLndyaXRlID0gY3VyX3dtX2xhdGVuY3lfd3JpdGUKLX07Ci0KIHN0YXRpYyBpbnQKIGk5 MTVfd2VkZ2VkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKIHsKQEAgLTM5MjAsMjk1ICsyMzQ3 LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9mb3JjZXdha2Vf Zm9wcyA9IHsKIAkucmVsZWFzZSA9IGk5MTVfZm9yY2V3YWtlX3JlbGVhc2UsCiB9OwogCi1zdGF0 aWMgaW50IGk5MTVfaHBkX3N0b3JtX2N0bF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq ZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBtLT5wcml2YXRl OwotCXN0cnVjdCBpOTE1X2hvdHBsdWcgKmhvdHBsdWcgPSAmZGV2X3ByaXYtPmhvdHBsdWc7Ci0K LQkvKiBTeW5jaHJvbml6ZSB3aXRoIGV2ZXJ5dGhpbmcgZmlyc3QgaW4gY2FzZSB0aGVyZSdzIGJl ZW4gYW4gSFBECi0JICogc3Rvcm0sIGJ1dCB3ZSBoYXZlbid0IGZpbmlzaGVkIGhhbmRsaW5nIGl0 IGluIHRoZSBrZXJuZWwgeWV0Ci0JICovCi0JaW50ZWxfc3luY2hyb25pemVfaXJxKGRldl9wcml2 KTsKLQlmbHVzaF93b3JrKCZkZXZfcHJpdi0+aG90cGx1Zy5kaWdfcG9ydF93b3JrKTsKLQlmbHVz aF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5ob3RwbHVnLmhvdHBsdWdfd29yayk7Ci0KLQlzZXFf cHJpbnRmKG0sICJUaHJlc2hvbGQ6ICVkXG4iLCBob3RwbHVnLT5ocGRfc3Rvcm1fdGhyZXNob2xk KTsKLQlzZXFfcHJpbnRmKG0sICJEZXRlY3RlZDogJXNcbiIsCi0JCSAgIHllc25vKGRlbGF5ZWRf d29ya19wZW5kaW5nKCZob3RwbHVnLT5yZWVuYWJsZV93b3JrKSkpOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBzc2l6ZV90IGk5MTVfaHBkX3N0b3JtX2N0bF93cml0ZShzdHJ1Y3QgZmlsZSAq ZmlsZSwKLQkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW4sCi0JCQkJCWxv ZmZfdCAqb2ZmcCkKLXsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKLQlzdHJ1 Y3QgaTkxNV9ob3RwbHVnICpob3RwbHVnID0gJmRldl9wcml2LT5ob3RwbHVnOwotCXVuc2lnbmVk IGludCBuZXdfdGhyZXNob2xkOwotCWludCBpOwotCWNoYXIgKm5ld2xpbmU7Ci0JY2hhciB0bXBb MTZdOwotCi0JaWYgKGxlbiA+PSBzaXplb2YodG1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlp ZiAoY29weV9mcm9tX3VzZXIodG1wLCB1YnVmLCBsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQot CXRtcFtsZW5dID0gJ1wwJzsKLQotCS8qIFN0cmlwIG5ld2xpbmUsIGlmIGFueSAqLwotCW5ld2xp bmUgPSBzdHJjaHIodG1wLCAnXG4nKTsKLQlpZiAobmV3bGluZSkKLQkJKm5ld2xpbmUgPSAnXDAn OwotCi0JaWYgKHN0cmNtcCh0bXAsICJyZXNldCIpID09IDApCi0JCW5ld190aHJlc2hvbGQgPSBI UERfU1RPUk1fREVGQVVMVF9USFJFU0hPTEQ7Ci0JZWxzZSBpZiAoa3N0cnRvdWludCh0bXAsIDEw LCAmbmV3X3RocmVzaG9sZCkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobmV3X3Ro cmVzaG9sZCA+IDApCi0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJTZXR0 aW5nIEhQRCBzdG9ybSBkZXRlY3Rpb24gdGhyZXNob2xkIHRvICVkXG4iLAotCQkJICAgIG5ld190 aHJlc2hvbGQpOwotCWVsc2UKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJEaXNhYmxp bmcgSFBEIHN0b3JtIGRldGVjdGlvblxuIik7Ci0KLQlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+ aXJxX2xvY2spOwotCWhvdHBsdWctPmhwZF9zdG9ybV90aHJlc2hvbGQgPSBuZXdfdGhyZXNob2xk OwotCS8qIFJlc2V0IHRoZSBIUEQgc3Rvcm0gc3RhdHMgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5 IHRyaWdnZXIgYSBzdG9ybSAqLwotCWZvcl9lYWNoX2hwZF9waW4oaSkKLQkJaG90cGx1Zy0+c3Rh dHNbaV0uY291bnQgPSAwOwotCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsK LQotCS8qIFJlLWVuYWJsZSBocGQgaW1tZWRpYXRlbHkgaWYgd2Ugd2VyZSBpbiBhbiBpcnEgc3Rv cm0gKi8KLQlmbHVzaF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5ob3RwbHVnLnJlZW5hYmxlX3dv cmspOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBpOTE1X2hwZF9zdG9ybV9jdGxf b3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4g c2luZ2xlX29wZW4oZmlsZSwgaTkxNV9ocGRfc3Rvcm1fY3RsX3Nob3csIGlub2RlLT5pX3ByaXZh dGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOTE1X2hwZF9z dG9ybV9jdGxfZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IGk5MTVf aHBkX3N0b3JtX2N0bF9vcGVuLAotCS5yZWFkID0gc2VxX3JlYWQsCi0JLmxsc2VlayA9IHNlcV9s c2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotCS53cml0ZSA9IGk5MTVfaHBkX3N0 b3JtX2N0bF93cml0ZQotfTsKLQotc3RhdGljIGludCBpOTE1X2hwZF9zaG9ydF9zdG9ybV9jdGxf c2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gbS0+cHJpdmF0ZTsKLQotCXNlcV9wcmludGYobSwgIkVuYWJs ZWQ6ICVzXG4iLAotCQkgICB5ZXNubyhkZXZfcHJpdi0+aG90cGx1Zy5ocGRfc2hvcnRfc3Rvcm1f ZW5hYmxlZCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfaHBkX3Nob3J0 X3N0b3JtX2N0bF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQot ewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpOTE1X2hwZF9zaG9ydF9zdG9ybV9jdGxfc2hv dywKLQkJCSAgIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBpOTE1X2hw ZF9zaG9ydF9zdG9ybV9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCSAgICAgIGNv bnN0IGNoYXIgX191c2VyICp1YnVmLAotCQkJCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9m ZnApCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IGk5MTVf aG90cGx1ZyAqaG90cGx1ZyA9ICZkZXZfcHJpdi0+aG90cGx1ZzsKLQljaGFyICpuZXdsaW5lOwot CWNoYXIgdG1wWzE2XTsKLQlpbnQgaTsKLQlib29sIG5ld19zdGF0ZTsKLQotCWlmIChsZW4gPj0g c2l6ZW9mKHRtcCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKHRt cCwgdWJ1ZiwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQl0bXBbbGVuXSA9ICdcMCc7Ci0K LQkvKiBTdHJpcCBuZXdsaW5lLCBpZiBhbnkgKi8KLQluZXdsaW5lID0gc3RyY2hyKHRtcCwgJ1xu Jyk7Ci0JaWYgKG5ld2xpbmUpCi0JCSpuZXdsaW5lID0gJ1wwJzsKLQotCS8qIFJlc2V0IHRvIHRo ZSAiZGVmYXVsdCIgc3RhdGUgZm9yIHRoaXMgc3lzdGVtICovCi0JaWYgKHN0cmNtcCh0bXAsICJy ZXNldCIpID09IDApCi0JCW5ld19zdGF0ZSA9ICFIQVNfRFBfTVNUKGRldl9wcml2KTsKLQllbHNl IGlmIChrc3RydG9ib29sKHRtcCwgJm5ld19zdGF0ZSkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIiVzYWJsaW5nIEhQRCBzaG9ydCBzdG9y bSBkZXRlY3Rpb25cbiIsCi0JCSAgICBuZXdfc3RhdGUgPyAiRW4iIDogIkRpcyIpOwotCi0Jc3Bp bl9sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKLQlob3RwbHVnLT5ocGRfc2hvcnRfc3Rv cm1fZW5hYmxlZCA9IG5ld19zdGF0ZTsKLQkvKiBSZXNldCB0aGUgSFBEIHN0b3JtIHN0YXRzIHNv IHdlIGRvbid0IGFjY2lkZW50YWxseSB0cmlnZ2VyIGEgc3Rvcm0gKi8KLQlmb3JfZWFjaF9ocGRf cGluKGkpCi0JCWhvdHBsdWctPnN0YXRzW2ldLmNvdW50ID0gMDsKLQlzcGluX3VubG9ja19pcnEo JmRldl9wcml2LT5pcnFfbG9jayk7Ci0KLQkvKiBSZS1lbmFibGUgaHBkIGltbWVkaWF0ZWx5IGlm IHdlIHdlcmUgaW4gYW4gaXJxIHN0b3JtICovCi0JZmx1c2hfZGVsYXllZF93b3JrKCZkZXZfcHJp di0+aG90cGx1Zy5yZWVuYWJsZV93b3JrKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk5MTVfaHBkX3Nob3J0X3N0b3JtX2N0bF9mb3Bz ID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gaTkxNV9ocGRfc2hvcnRfc3Rv cm1fY3RsX29wZW4sCi0JLnJlYWQgPSBzZXFfcmVhZCwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAot CS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi0JLndyaXRlID0gaTkxNV9ocGRfc2hvcnRfc3Rv cm1fY3RsX3dyaXRlLAotfTsKLQotc3RhdGljIGludCBpOTE1X2RycnNfY3RsX3NldCh2b2lkICpk YXRhLCB1NjQgdmFsKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRh dGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBp bnRlbF9jcnRjICpjcnRjOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA3KQotCQlyZXR1 cm4gLUVOT0RFVjsKLQotCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7Ci0JCXN0cnVj dCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7Ci0JCXN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlOwotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwot CQlzdHJ1Y3QgZHJtX2NydGNfY29tbWl0ICpjb21taXQ7Ci0JCWludCByZXQ7Ci0KLQkJcmV0ID0g ZHJtX21vZGVzZXRfbG9ja19zaW5nbGVfaW50ZXJydXB0aWJsZSgmY3J0Yy0+YmFzZS5tdXRleCk7 Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCWNydGNfc3RhdGUgPSB0b19pbnRlbF9j cnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwotCi0JCWlmICghY3J0Y19zdGF0ZS0+aHcuYWN0 aXZlIHx8Ci0JCSAgICAhY3J0Y19zdGF0ZS0+aGFzX2RycnMpCi0JCQlnb3RvIG91dDsKLQotCQlj b21taXQgPSBjcnRjX3N0YXRlLT51YXBpLmNvbW1pdDsKLQkJaWYgKGNvbW1pdCkgewotCQkJcmV0 ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjb21taXQtPmh3X2RvbmUpOwot CQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCi0JCWRybV9jb25uZWN0b3JfbGlzdF9p dGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7Ci0JCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRl cihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKLQkJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyOwotCQkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcDsKLQotCQkJaWYgKCEoY3J0Y19zdGF0 ZS0+dWFwaS5jb25uZWN0b3JfbWFzayAmCi0JCQkgICAgICBkcm1fY29ubmVjdG9yX21hc2soY29u bmVjdG9yKSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWVuY29kZXIgPSBpbnRlbF9hdHRhY2hlZF9l bmNvZGVyKHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsKLQkJCWlmIChlbmNvZGVyLT50 eXBlICE9IElOVEVMX09VVFBVVF9FRFApCi0JCQkJY29udGludWU7Ci0KLQkJCWRybV9kYmcoJmRl dl9wcml2LT5kcm0sCi0JCQkJIk1hbnVhbGx5ICVzYWJsaW5nIERSUlMuICVsbHVcbiIsCi0JCQkJ dmFsID8gImVuIiA6ICJkaXMiLCB2YWwpOwotCi0JCQlpbnRlbF9kcCA9IGVuY190b19pbnRlbF9k cChlbmNvZGVyKTsKLQkJCWlmICh2YWwpCi0JCQkJaW50ZWxfZWRwX2RycnNfZW5hYmxlKGludGVs X2RwLAotCQkJCQkJICAgICAgY3J0Y19zdGF0ZSk7Ci0JCQllbHNlCi0JCQkJaW50ZWxfZWRwX2Ry cnNfZGlzYWJsZShpbnRlbF9kcCwKLQkJCQkJCSAgICAgICBjcnRjX3N0YXRlKTsKLQkJfQotCQlk cm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Ci0KLW91dDoKLQkJZHJtX21v ZGVzZXRfdW5sb2NrKCZjcnRjLT5iYXNlLm11dGV4KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiBy ZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLURFRklORV9TSU1QTEVfQVRUUklCVVRFKGk5MTVf ZHJyc19jdGxfZm9wcywgTlVMTCwgaTkxNV9kcnJzX2N0bF9zZXQsICIlbGx1XG4iKTsKLQotc3Rh dGljIHNzaXplX3QKLWk5MTVfZmlmb191bmRlcnJ1bl9yZXNldF93cml0ZShzdHJ1Y3QgZmlsZSAq ZmlscCwKLQkJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJCSAgICAgICBzaXpl X3QgY250LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRj OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKLQlpbnQgcmV0Owot CWJvb2wgcmVzZXQ7Ci0KLQlyZXQgPSBrc3RydG9ib29sX2Zyb21fdXNlcih1YnVmLCBjbnQsICZy ZXNldCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghcmVzZXQpCi0JCXJldHVy biBjbnQ7Ci0KLQlmb3JfZWFjaF9pbnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0YykgewotCQlzdHJ1 Y3QgZHJtX2NydGNfY29tbWl0ICpjb21taXQ7Ci0JCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwotCi0JCXJldCA9IGRybV9tb2Rlc2V0X2xvY2tfc2luZ2xlX2ludGVycnVwdGli bGUoJmludGVsX2NydGMtPmJhc2UubXV0ZXgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsK LQotCQljcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRjLT5iYXNlLnN0 YXRlKTsKLQkJY29tbWl0ID0gY3J0Y19zdGF0ZS0+dWFwaS5jb21taXQ7Ci0JCWlmIChjb21taXQp IHsKLQkJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY29tbWl0LT5o d19kb25lKTsKLQkJCWlmICghcmV0KQotCQkJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50 ZXJydXB0aWJsZSgmY29tbWl0LT5mbGlwX2RvbmUpOwotCQl9Ci0KLQkJaWYgKCFyZXQgJiYgY3J0 Y19zdGF0ZS0+aHcuYWN0aXZlKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJ CQkgICAgIlJlLWFybWluZyBGSUZPIHVuZGVycnVucyBvbiBwaXBlICVjXG4iLAotCQkJCSAgICBw aXBlX25hbWUoaW50ZWxfY3J0Yy0+cGlwZSkpOwotCi0JCQlpbnRlbF9jcnRjX2FybV9maWZvX3Vu ZGVycnVuKGludGVsX2NydGMsIGNydGNfc3RhdGUpOwotCQl9Ci0KLQkJZHJtX21vZGVzZXRfdW5s b2NrKCZpbnRlbF9jcnRjLT5iYXNlLm11dGV4KTsKLQotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJl dDsKLQl9Ci0KLQlyZXQgPSBpbnRlbF9mYmNfcmVzZXRfdW5kZXJydW4oZGV2X3ByaXYpOwotCWlm IChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gY250OwotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOTE1X2ZpZm9fdW5kZXJydW5fcmVzZXRfb3BzID0gewot CS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLndyaXRlID0g aTkxNV9maWZvX3VuZGVycnVuX3Jlc2V0X3dyaXRlLAotCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2Vl aywKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBpOTE1X2RlYnVnZnNf bGlzdFtdID0gewogCXsiaTkxNV9jYXBhYmlsaXRpZXMiLCBpOTE1X2NhcGFiaWxpdGllcywgMH0s CiAJeyJpOTE1X2dlbV9vYmplY3RzIiwgaTkxNV9nZW1fb2JqZWN0X2luZm8sIDB9LApAQCAtNDIy MywzMSArMjM2MSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pbmZvX2xpc3QgaTkxNV9k ZWJ1Z2ZzX2xpc3RbXSA9IHsKIAl7Imk5MTVfZnJlcXVlbmN5X2luZm8iLCBpOTE1X2ZyZXF1ZW5j eV9pbmZvLCAwfSwKIAl7Imk5MTVfZHJwY19pbmZvIiwgaTkxNV9kcnBjX2luZm8sIDB9LAogCXsi aTkxNV9yaW5nX2ZyZXFfdGFibGUiLCBpOTE1X3JpbmdfZnJlcV90YWJsZSwgMH0sCi0JeyJpOTE1 X2Zyb250YnVmZmVyX3RyYWNraW5nIiwgaTkxNV9mcm9udGJ1ZmZlcl90cmFja2luZywgMH0sCi0J eyJpOTE1X2ZiY19zdGF0dXMiLCBpOTE1X2ZiY19zdGF0dXMsIDB9LAotCXsiaTkxNV9pcHNfc3Rh dHVzIiwgaTkxNV9pcHNfc3RhdHVzLCAwfSwKLQl7Imk5MTVfc3Jfc3RhdHVzIiwgaTkxNV9zcl9z dGF0dXMsIDB9LAotCXsiaTkxNV9vcHJlZ2lvbiIsIGk5MTVfb3ByZWdpb24sIDB9LAotCXsiaTkx NV92YnQiLCBpOTE1X3ZidCwgMH0sCi0JeyJpOTE1X2dlbV9mcmFtZWJ1ZmZlciIsIGk5MTVfZ2Vt X2ZyYW1lYnVmZmVyX2luZm8sIDB9LAogCXsiaTkxNV9jb250ZXh0X3N0YXR1cyIsIGk5MTVfY29u dGV4dF9zdGF0dXMsIDB9LAogCXsiaTkxNV9mb3JjZXdha2VfZG9tYWlucyIsIGk5MTVfZm9yY2V3 YWtlX2RvbWFpbnMsIDB9LAogCXsiaTkxNV9zd2l6emxlX2luZm8iLCBpOTE1X3N3aXp6bGVfaW5m bywgMH0sCiAJeyJpOTE1X2xsYyIsIGk5MTVfbGxjLCAwfSwKLQl7Imk5MTVfZWRwX3Bzcl9zdGF0 dXMiLCBpOTE1X2VkcF9wc3Jfc3RhdHVzLCAwfSwKIAl7Imk5MTVfcnVudGltZV9wbV9zdGF0dXMi LCBpOTE1X3J1bnRpbWVfcG1fc3RhdHVzLCAwfSwKLQl7Imk5MTVfcG93ZXJfZG9tYWluX2luZm8i LCBpOTE1X3Bvd2VyX2RvbWFpbl9pbmZvLCAwfSwKLQl7Imk5MTVfZG1jX2luZm8iLCBpOTE1X2Rt Y19pbmZvLCAwfSwKLQl7Imk5MTVfZGlzcGxheV9pbmZvIiwgaTkxNV9kaXNwbGF5X2luZm8sIDB9 LAogCXsiaTkxNV9lbmdpbmVfaW5mbyIsIGk5MTVfZW5naW5lX2luZm8sIDB9LAogCXsiaTkxNV9y Y3NfdG9wb2xvZ3kiLCBpOTE1X3Jjc190b3BvbG9neSwgMH0sCiAJeyJpOTE1X3Nocmlua2VyX2lu Zm8iLCBpOTE1X3Nocmlua2VyX2luZm8sIDB9LAotCXsiaTkxNV9zaGFyZWRfZHBsbHNfaW5mbyIs IGk5MTVfc2hhcmVkX2RwbGxzX2luZm8sIDB9LAotCXsiaTkxNV9kcF9tc3RfaW5mbyIsIGk5MTVf ZHBfbXN0X2luZm8sIDB9LAogCXsiaTkxNV93YV9yZWdpc3RlcnMiLCBpOTE1X3dhX3JlZ2lzdGVy cywgMH0sCi0JeyJpOTE1X2RkYl9pbmZvIiwgaTkxNV9kZGJfaW5mbywgMH0sCiAJeyJpOTE1X3Nz ZXVfc3RhdHVzIiwgaTkxNV9zc2V1X3N0YXR1cywgMH0sCi0JeyJpOTE1X2RycnNfc3RhdHVzIiwg aTkxNV9kcnJzX3N0YXR1cywgMH0sCiAJeyJpOTE1X3Jwc19ib29zdF9pbmZvIiwgaTkxNV9ycHNf Ym9vc3RfaW5mbywgMH0sCiB9OwogI2RlZmluZSBJOTE1X0RFQlVHRlNfRU5UUklFUyBBUlJBWV9T SVpFKGk5MTVfZGVidWdmc19saXN0KQpAQCAtNDI2NCwyMSArMjM4Nyw4IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgaTkxNV9kZWJ1Z2ZzX2ZpbGVzIHsKIAl7Imk5MTVfZXJyb3Jfc3RhdGUiLCAmaTkx NV9lcnJvcl9zdGF0ZV9mb3BzfSwKIAl7Imk5MTVfZ3B1X2luZm8iLCAmaTkxNV9ncHVfaW5mb19m b3BzfSwKICNlbmRpZgotCXsiaTkxNV9maWZvX3VuZGVycnVuX3Jlc2V0IiwgJmk5MTVfZmlmb191 bmRlcnJ1bl9yZXNldF9vcHN9LAotCXsiaTkxNV9wcmlfd21fbGF0ZW5jeSIsICZpOTE1X3ByaV93 bV9sYXRlbmN5X2ZvcHN9LAotCXsiaTkxNV9zcHJfd21fbGF0ZW5jeSIsICZpOTE1X3Nwcl93bV9s YXRlbmN5X2ZvcHN9LAotCXsiaTkxNV9jdXJfd21fbGF0ZW5jeSIsICZpOTE1X2N1cl93bV9sYXRl bmN5X2ZvcHN9LAotCXsiaTkxNV9mYmNfZmFsc2VfY29sb3IiLCAmaTkxNV9mYmNfZmFsc2VfY29s b3JfZm9wc30sCi0JeyJpOTE1X2RwX3Rlc3RfZGF0YSIsICZpOTE1X2Rpc3BsYXlwb3J0X3Rlc3Rf ZGF0YV9mb3BzfSwKLQl7Imk5MTVfZHBfdGVzdF90eXBlIiwgJmk5MTVfZGlzcGxheXBvcnRfdGVz dF90eXBlX2ZvcHN9LAotCXsiaTkxNV9kcF90ZXN0X2FjdGl2ZSIsICZpOTE1X2Rpc3BsYXlwb3J0 X3Rlc3RfYWN0aXZlX2ZvcHN9LAogCXsiaTkxNV9ndWNfbG9nX2xldmVsIiwgJmk5MTVfZ3VjX2xv Z19sZXZlbF9mb3BzfSwKIAl7Imk5MTVfZ3VjX2xvZ19yZWxheSIsICZpOTE1X2d1Y19sb2dfcmVs YXlfZm9wc30sCi0JeyJpOTE1X2hwZF9zdG9ybV9jdGwiLCAmaTkxNV9ocGRfc3Rvcm1fY3RsX2Zv cHN9LAotCXsiaTkxNV9ocGRfc2hvcnRfc3Rvcm1fY3RsIiwgJmk5MTVfaHBkX3Nob3J0X3N0b3Jt X2N0bF9mb3BzfSwKLQl7Imk5MTVfaXBjX3N0YXR1cyIsICZpOTE1X2lwY19zdGF0dXNfZm9wc30s Ci0JeyJpOTE1X2RycnNfY3RsIiwgJmk5MTVfZHJyc19jdGxfZm9wc30sCi0JeyJpOTE1X2VkcF9w c3JfZGVidWciLCAmaTkxNV9lZHBfcHNyX2RlYnVnX2ZvcHN9CiB9OwogCiBpbnQgaTkxNV9kZWJ1 Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKQEAgLTQzMDIs MTkxICsyNDEyLDMgQEAgaW50IGk5MTVfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAJCQkJCUk5MTVfREVCVUdGU19FTlRSSUVTLAogCQkJCQltaW5v ci0+ZGVidWdmc19yb290LCBtaW5vcik7CiB9Ci0KLXN0YXRpYyBpbnQgaTkxNV9wYW5lbF9zaG93 KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0K LQkJaW50ZWxfYXR0YWNoZWRfZHAodG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3RvcikpOwotCi0J aWYgKGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQotCQly ZXR1cm4gLUVOT0RFVjsKLQotCXNlcV9wcmludGYobSwgIlBhbmVsIHBvd2VyIHVwIGRlbGF5OiAl ZFxuIiwKLQkJICAgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX3VwX2RlbGF5KTsKLQlzZXFfcHJpbnRm KG0sICJQYW5lbCBwb3dlciBkb3duIGRlbGF5OiAlZFxuIiwKLQkJICAgaW50ZWxfZHAtPnBhbmVs X3Bvd2VyX2Rvd25fZGVsYXkpOwotCXNlcV9wcmludGYobSwgIkJhY2tsaWdodCBvbiBkZWxheTog JWRcbiIsCi0JCSAgIGludGVsX2RwLT5iYWNrbGlnaHRfb25fZGVsYXkpOwotCXNlcV9wcmludGYo bSwgIkJhY2tsaWdodCBvZmYgZGVsYXk6ICVkXG4iLAotCQkgICBpbnRlbF9kcC0+YmFja2xpZ2h0 X29mZl9kZWxheSk7Ci0KLQlyZXR1cm4gMDsKLX0KLURFRklORV9TSE9XX0FUVFJJQlVURShpOTE1 X3BhbmVsKTsKLQotc3RhdGljIGludCBpOTE1X2hkY3Bfc2lua19jYXBhYmlsaXR5X3Nob3coc3Ry dWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nv bm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKGNvbm5lY3Rv ci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQotCQlyZXR1cm4gLUVOT0RF VjsKLQotCS8qIEhEQ1AgaXMgc3VwcG9ydGVkIGJ5IGNvbm5lY3RvciAqLwotCWlmICghaW50ZWxf Y29ubmVjdG9yLT5oZGNwLnNoaW0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc2VxX3ByaW50Ziht LCAiJXM6JWQgSERDUCB2ZXJzaW9uOiAiLCBjb25uZWN0b3ItPm5hbWUsCi0JCSAgIGNvbm5lY3Rv ci0+YmFzZS5pZCk7Ci0JaW50ZWxfaGRjcF9pbmZvKG0sIGludGVsX2Nvbm5lY3Rvcik7Ci0KLQly ZXR1cm4gMDsKLX0KLURFRklORV9TSE9XX0FUVFJJQlVURShpOTE1X2hkY3Bfc2lua19jYXBhYmls aXR5KTsKLQotc3RhdGljIGludCBpOTE1X2RzY19mZWNfc3VwcG9ydF9zaG93KHN0cnVjdCBzZXFf ZmlsZSAqbSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7 Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHA7Ci0J c3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4IGN0eDsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSA9IE5VTEw7Ci0JaW50IHJldCA9IDA7Ci0JYm9vbCB0cnlfYWdhaW4g PSBmYWxzZTsKLQotCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgmY3R4LCBEUk1fTU9ERVNFVF9B Q1FVSVJFX0lOVEVSUlVQVElCTEUpOwotCi0JZG8gewotCQl0cnlfYWdhaW4gPSBmYWxzZTsKLQkJ cmV0ID0gZHJtX21vZGVzZXRfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4 LAotCQkJCSAgICAgICAmY3R4KTsKLQkJaWYgKHJldCkgewotCQkJaWYgKHJldCA9PSAtRURFQURM SyAmJiAhZHJtX21vZGVzZXRfYmFja29mZigmY3R4KSkgewotCQkJCXRyeV9hZ2FpbiA9IHRydWU7 Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQljcnRjID0gY29ubmVjdG9y LT5zdGF0ZS0+Y3J0YzsKLQkJaWYgKGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0 dXNfY29ubmVjdGVkIHx8ICFjcnRjKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJYnJlYWs7Ci0J CX0KLQkJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY3J0Yy0+bXV0ZXgsICZjdHgpOwotCQlpZiAo cmV0ID09IC1FREVBRExLKSB7Ci0JCQlyZXQgPSBkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOwot CQkJaWYgKCFyZXQpIHsKLQkJCQl0cnlfYWdhaW4gPSB0cnVlOwotCQkJCWNvbnRpbnVlOwotCQkJ fQotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAocmV0KSB7Ci0JCQlicmVhazsKLQkJfQotCQlpbnRl bF9kcCA9IGludGVsX2F0dGFjaGVkX2RwKHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsK LQkJY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwotCQlzZXFf cHJpbnRmKG0sICJEU0NfRW5hYmxlZDogJXNcbiIsCi0JCQkgICB5ZXNubyhjcnRjX3N0YXRlLT5k c2MuY29tcHJlc3Npb25fZW5hYmxlKSk7Ci0JCXNlcV9wcmludGYobSwgIkRTQ19TaW5rX1N1cHBv cnQ6ICVzXG4iLAotCQkJICAgeWVzbm8oZHJtX2RwX3Npbmtfc3VwcG9ydHNfZHNjKGludGVsX2Rw LT5kc2NfZHBjZCkpKTsKLQkJc2VxX3ByaW50ZihtLCAiRm9yY2VfRFNDX0VuYWJsZTogJXNcbiIs Ci0JCQkgICB5ZXNubyhpbnRlbF9kcC0+Zm9yY2VfZHNjX2VuKSk7Ci0JCWlmICghaW50ZWxfZHBf aXNfZWRwKGludGVsX2RwKSkKLQkJCXNlcV9wcmludGYobSwgIkZFQ19TaW5rX1N1cHBvcnQ6ICVz XG4iLAotCQkJCSAgIHllc25vKGRybV9kcF9zaW5rX3N1cHBvcnRzX2ZlYyhpbnRlbF9kcC0+ZmVj X2NhcGFibGUpKSk7Ci0JfSB3aGlsZSAodHJ5X2FnYWluKTsKLQotCWRybV9tb2Rlc2V0X2Ryb3Bf bG9ja3MoJmN0eCk7Ci0JZHJtX21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOwotCi0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgaTkxNV9kc2NfZmVjX3N1cHBvcnRfd3JpdGUoc3Ry dWN0IGZpbGUgKmZpbGUsCi0JCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCi0JCQkJCSAg c2l6ZV90IGxlbiwgbG9mZl90ICpvZmZwKQotewotCWJvb2wgZHNjX2VuYWJsZSA9IGZhbHNlOwot CWludCByZXQ7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9Ci0JCSgoc3RydWN0 IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhKS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciA9IGludGVsX2F0dGFjaGVkX2VuY29kZXIodG9faW50ZWxfY29ubmVj dG9yKGNvbm5lY3RvcikpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkx NShlbmNvZGVyLT5iYXNlLmRldik7Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190 b19pbnRlbF9kcChlbmNvZGVyKTsKLQotCWlmIChsZW4gPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlk cm1fZGJnKCZpOTE1LT5kcm0sCi0JCSJDb3BpZWQgJXp1IGJ5dGVzIGZyb20gdXNlciB0byBmb3Jj ZSBEU0NcbiIsIGxlbik7Ci0KLQlyZXQgPSBrc3RydG9ib29sX2Zyb21fdXNlcih1YnVmLCBsZW4s ICZkc2NfZW5hYmxlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWRybV9kYmco Jmk5MTUtPmRybSwgIkdvdCAlcyBmb3IgRFNDIEVuYWJsZVxuIiwKLQkJKGRzY19lbmFibGUpID8g InRydWUiIDogImZhbHNlIik7Ci0JaW50ZWxfZHAtPmZvcmNlX2RzY19lbiA9IGRzY19lbmFibGU7 Ci0KLQkqb2ZmcCArPSBsZW47Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBpOTE1X2Rz Y19mZWNfc3VwcG9ydF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3Qg ZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaTkxNV9kc2NfZmVjX3N1 cHBvcnRfc2hvdywKLQkJCSAgIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOTE1X2RzY19mZWNfc3VwcG9ydF9mb3BzID0gewotCS5v d25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gaTkxNV9kc2NfZmVjX3N1cHBvcnRfb3BlbiwK LQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBz aW5nbGVfcmVsZWFzZSwKLQkud3JpdGUgPSBpOTE1X2RzY19mZWNfc3VwcG9ydF93cml0ZQotfTsK LQotLyoqCi0gKiBpOTE1X2RlYnVnZnNfY29ubmVjdG9yX2FkZCAtIGFkZCBpOTE1IHNwZWNpZmlj IGNvbm5lY3RvciBkZWJ1Z2ZzIGZpbGVzCi0gKiBAY29ubmVjdG9yOiBwb2ludGVyIHRvIGEgcmVn aXN0ZXJlZCBkcm1fY29ubmVjdG9yCi0gKgotICogQ2xlYW51cCB3aWxsIGJlIGRvbmUgYnkgZHJt X2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCkgdGhyb3VnaCBhIGNhbGwgdG8KLSAqIGRybV9kZWJ1Z2Zz X2Nvbm5lY3Rvcl9yZW1vdmUoKS4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRp dmUgZXJyb3IgY29kZXMgb24gZXJyb3IuCi0gKi8KLWludCBpOTE1X2RlYnVnZnNfY29ubmVjdG9y X2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBkZW50cnkg KnJvb3QgPSBjb25uZWN0b3ItPmRlYnVnZnNfZW50cnk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmRldik7Ci0KLQkvKiBUaGUgY29ubmVj dG9yIG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZHMuICovCi0JaWYgKCFyb290 KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09 IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApIHsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgiaTkxNV9w YW5lbF90aW1pbmdzIiwgU19JUlVHTywgcm9vdCwKLQkJCQkgICAgY29ubmVjdG9yLCAmaTkxNV9w YW5lbF9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgiaTkxNV9wc3Jfc2lua19zdGF0dXMi LCBTX0lSVUdPLCByb290LAotCQkJCSAgICBjb25uZWN0b3IsICZpOTE1X3Bzcl9zaW5rX3N0YXR1 c19mb3BzKTsKLQl9Ci0KLQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9E RV9DT05ORUNUT1JfRGlzcGxheVBvcnQgfHwKLQkgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlw ZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEgfHwKLQkgICAgY29ubmVjdG9yLT5jb25uZWN0 b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIpIHsKLQkJZGVidWdmc19jcmVhdGVf ZmlsZSgiaTkxNV9oZGNwX3NpbmtfY2FwYWJpbGl0eSIsIFNfSVJVR08sIHJvb3QsCi0JCQkJICAg IGNvbm5lY3RvciwgJmk5MTVfaGRjcF9zaW5rX2NhcGFiaWxpdHlfZm9wcyk7Ci0JfQotCi0JaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgJiYKLQkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9y X3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0IHx8Ci0JICAgICBjb25uZWN0 b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApKQotCQlkZWJ1Z2Zz X2NyZWF0ZV9maWxlKCJpOTE1X2RzY19mZWNfc3VwcG9ydCIsIFNfSVJVR08sIHJvb3QsCi0JCQkJ ICAgIGNvbm5lY3RvciwgJmk5MTVfZHNjX2ZlY19zdXBwb3J0X2ZvcHMpOwotCi0JcmV0dXJuIDA7 Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5oCmluZGV4IGMwY2QyMmViOTE2ZC4uNmRh MzljNzZhYjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuaApAQCAtNiwxNSArNiwx NyBAQAogI2lmbmRlZiBfX0k5MTVfREVCVUdGU19IX18KICNkZWZpbmUgX19JOTE1X0RFQlVHRlNf SF9fCiAKLXN0cnVjdCBkcm1faTkxNV9wcml2YXRlOwogc3RydWN0IGRybV9jb25uZWN0b3I7Citz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRlOworc3Ry dWN0IHNlcV9maWxlOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBpbnQgaTkxNV9kZWJ1Z2Zz X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci1pbnQgaTkxNV9k ZWJ1Z2ZzX2Nvbm5lY3Rvcl9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cit2 b2lkIGk5MTVfZGVidWdmc19kZXNjcmliZV9vYmooc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpOTE1 X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KSB7IHJl dHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCBpOTE1X2RlYnVnZnNfY29ubmVjdG9yX2FkZChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5s aW5lIHZvaWQgaTkxNV9kZWJ1Z2ZzX2Rlc2NyaWJlX29iaihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopIHt9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9f STkxNV9ERUJVR0ZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNGU0M2E2NzFm MmMwLi45MzBhNmUzMWY4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNTEsNiArNTEs NyBAQAogI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfYncuaCIKICNpbmNsdWRlICJkaXNwbGF5L2lu dGVsX2NkY2xrLmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9jc3IuaCIKKyNpbmNsdWRlICJk aXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5oIgogI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxf ZGlzcGxheV90eXBlcy5oIgogI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfZHAuaCIKICNpbmNsdWRl ICJkaXNwbGF5L2ludGVsX2ZiZGV2LmgiCkBAIC0xMzMwLDYgKzEzMzEsNyBAQCBzdGF0aWMgdm9p ZCBpOTE1X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiAJLyogUmV2ZWFsIG91ciBwcmVzZW5jZSB0byB1c2Vyc3BhY2UgKi8KIAlpZiAoZHJtX2Rldl9y ZWdpc3RlcihkZXYsIDApID09IDApIHsKIAkJaTkxNV9kZWJ1Z2ZzX3JlZ2lzdGVyKGRldl9wcml2 KTsKKwkJaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzX3JlZ2lzdGVyKGRldl9wcml2KTsKIAkJaTkxNV9z ZXR1cF9zeXNmcyhkZXZfcHJpdik7CiAKIAkJLyogRGVwZW5kcyBvbiBzeXNmcyBoYXZpbmcgYmVl biBpbml0aWFsaXplZCAqLwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK