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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 5CAFEC433E0 for ; Mon, 21 Dec 2020 11:10:09 +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 EF3E8227BF for ; Mon, 21 Dec 2020 11:10:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EF3E8227BF 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 0D56889D52; Mon, 21 Dec 2020 11:10:08 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 045D56E0E5 for ; Mon, 21 Dec 2020 11:10:06 +0000 (UTC) IronPort-SDR: rmXOq6BxuazApsyMJM5zc0sY1eeGCy6oBR8zhiY6bb3LLFdpkbmuagEp/mgLc3klglIPSLETx2 jggpo7ki25oA== X-IronPort-AV: E=McAfee;i="6000,8403,9841"; a="194138134" X-IronPort-AV: E=Sophos;i="5.78,436,1599548400"; d="scan'208";a="194138134" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2020 03:10:06 -0800 IronPort-SDR: pexehBE444/K+KHMich5IHNUqmaEhEGfraSlspFaK3gnCH/Qpl7Sm4WpQecor7MshR6N01Olzc HAFF+DZIMtYg== X-IronPort-AV: E=Sophos;i="5.78,436,1599548400"; d="scan'208";a="372430795" Received: from mlesiews-mobl3.ger.corp.intel.com (HELO localhost) ([10.213.22.241]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2020 03:10:03 -0800 From: Jani Nikula To: Jani Nikula , intel-gfx@lists.freedesktop.org Date: Mon, 21 Dec 2020 13:09:57 +0200 Message-Id: <20201221110957.18215-1-jani.nikula@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201221090449.8288-5-jani.nikula@intel.com> References: <20201221090449.8288-5-jani.nikula@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2] drm/i915: refactor i915 plane code into 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: Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClZpbGxlIHN1Z2dlc3RlZCB0 aGlzIGFzIGEgZ29vZCBpZGVhLCBsZXQncyBtb3ZlIHRoaXMgYmVmb3JlIG1vdmluZwp0aGUgY3J0 YyBjb2RlLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4K UmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5j b20+CltKYW5pOiBmaXhlZCBpOTE1eHhfcGxhbmUuaCBzdGFuZGFsb25lIGJ1aWxkLl0KU2lnbmVk LW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMgICAgfCA3MDQgKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmggICAgfCAgMjQg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgfCA2ODkgKy0t LS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuaCB8ICAgNCAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5j ICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDczMiBpbnNlcnRpb25zKCspLCA2OTMgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p OXh4X3BsYW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2k5eHhfcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggYjY1NTg0MDE2OTFlLi4z ZjY3NDcyNWNkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0yMTYsNyArMjE2LDggQEAgaTkx NS15ICs9IFwKIAlkaXNwbGF5L2ludGVsX3F1aXJrcy5vIFwKIAlkaXNwbGF5L2ludGVsX3Nwcml0 ZS5vIFwKIAlkaXNwbGF5L2ludGVsX3RjLm8gXAotCWRpc3BsYXkvaW50ZWxfdmdhLm8KKwlkaXNw bGF5L2ludGVsX3ZnYS5vIFwKKwlkaXNwbGF5L2k5eHhfcGxhbmUubwogaTkxNS0kKENPTkZJR19B Q1BJKSArPSBcCiAJZGlzcGxheS9pbnRlbF9hY3BpLm8gXAogCWRpc3BsYXkvaW50ZWxfb3ByZWdp b24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5l LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI3ODk4NWM4NTVhNQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jCkBAIC0wLDAg KzEsNzA0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJp Z2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjaW5j bHVkZSAiaW50ZWxfYXRvbWljLmgiCisjaW5jbHVkZSAiaW50ZWxfYXRvbWljX3BsYW5lLmgiCisj aW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgorI2luY2x1ZGUgImludGVsX3Nwcml0ZS5o IgorI2luY2x1ZGUgImk5eHhfcGxhbmUuaCIKKworLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZv ciBnZW4gPD0gMyAqLworc3RhdGljIGNvbnN0IHUzMiBpOHh4X3ByaW1hcnlfZm9ybWF0c1tdID0g eworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9YUkdCMTU1NSwKKwlEUk1fRk9STUFUX1JH QjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorfTsKKworLyogUHJpbWFyeSBwbGFuZSBmb3Jt YXRzIGZvciBpdmIgKG5vIGZwMTYgZHVlIHRvIGh3IGlzc3VlKSAqLworc3RhdGljIGNvbnN0IHUz MiBpdmJfcHJpbWFyeV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFU X1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJ RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorfTsKKwor LyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPj0gNCwgZXhjZXB0IGl2YiAqLworc3Rh dGljIGNvbnN0IHUzMiBpOTY1X3ByaW1hcnlfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgs CisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFU X1hCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEw MTAxMCwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCit9OworCisvKiBQcmltYXJ5IHBsYW5l IGZvcm1hdHMgZm9yIHZsdi9jaHYgKi8KK3N0YXRpYyBjb25zdCB1MzIgdmx2X3ByaW1hcnlfZm9y bWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZP Uk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4 ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURS TV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKKwlEUk1fRk9S TUFUX0FCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKK307CisKK3N0YXRp YyBjb25zdCB1NjQgaTl4eF9mb3JtYXRfbW9kaWZpZXJzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9E X1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRfTU9EX0lOVkFM SUQKK307CisKK3N0YXRpYyBib29sIGk4eHhfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3Ry dWN0IGRybV9wbGFuZSAqX3BsYW5lLAorCQkJCQkgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVy KQoreworCXN3aXRjaCAobW9kaWZpZXIpIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoK KwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQly ZXR1cm4gZmFsc2U7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRf Qzg6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6 CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZP Uk1BVF9NT0RfTElORUFSIHx8CisJCQltb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxF RDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgYm9vbCBpOTY1 X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKKwkJ CQkJICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKK3sKKwlzd2l0Y2ggKG1vZGlmaWVyKSB7 CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9U SUxFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXN3aXRj aCAoZm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0I1 NjU6CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4 OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIx MDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9B QkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwkJcmV0dXJuIG1v ZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkJbW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKwor c3RhdGljIGJvb2wgaTl4eF9wbGFuZV9oYXNfZmJjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKKwkJCSAgICAgICBlbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSkKK3sKKwlp ZiAoIUhBU19GQkMoZGV2X3ByaXYpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSVNfQlJPQURX RUxMKGRldl9wcml2KSB8fCBJU19IQVNXRUxMKGRldl9wcml2KSkKKwkJcmV0dXJuIGk5eHhfcGxh bmUgPT0gUExBTkVfQTsgLyogdGllZCB0byBwaXBlIEEgKi8KKwllbHNlIGlmIChJU19JVllCUklE R0UoZGV2X3ByaXYpKQorCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BIHx8IGk5eHhfcGxh bmUgPT0gUExBTkVfQiB8fAorCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9DOworCWVsc2UgaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQSB8 fCBpOXh4X3BsYW5lID09IFBMQU5FX0I7CisJZWxzZQorCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQ TEFORV9BOworfQorCitzdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2hhc193aW5kb3dpbmcoc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhf cGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKKworCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2 KSkKKwkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQjsKKwllbHNlIGlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKKwkJcmV0dXJuIGZhbHNlOworCWVs c2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNCkpCisJCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5F X0M7CisJZWxzZQorCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9CIHx8CisJCQlpOXh4X3Bs YW5lID09IFBMQU5FX0M7Cit9CisKK3N0YXRpYyB1MzIgaTl4eF9wbGFuZV9jdGwoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgIGNvbnN0IHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1 bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJdTMyIGRz cGNudHI7CisKKwlkc3BjbnRyID0gRElTUExBWV9QTEFORV9FTkFCTEU7CisKKwlpZiAoSVNfRzRY KGRldl9wcml2KSB8fCBJU19HRU4oZGV2X3ByaXYsIDUpIHx8CisJICAgIElTX0dFTihkZXZfcHJp diwgNikgfHwgSVNfSVZZQlJJREdFKGRldl9wcml2KSkKKwkJZHNwY250ciB8PSBESVNQUExBTkVf VFJJQ0tMRV9GRUVEX0RJU0FCTEU7CisKKwlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewor CWNhc2UgRFJNX0ZPUk1BVF9DODoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfOEJQUDsKKwkJYnJl YWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9C R1JYNTU1OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6CisJCWRzcGNudHIg fD0gRElTUFBMQU5FX0JHUkE1NTU7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6 CisJCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlg1NjU7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZP Uk1BVF9YUkdCODg4ODoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDg4ODsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9SR0JY ODg4OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCWRzcGNudHIgfD0g RElTUFBMQU5FX0JHUkE4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoK KwkJZHNwY250ciB8PSBESVNQUExBTkVfUkdCQTg4ODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9S TUFUX1hSR0IyMTAxMDEwOgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JYMTAxMDEwOworCQli cmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJCWRzcGNudHIgfD0gRElTUFBM QU5FX1JHQlgxMDEwMTA7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoK KwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTEwMTAxMDsKKwkJYnJlYWs7CisJY2FzZSBEUk1f Rk9STUFUX0FCR1IyMTAxMDEwOgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9SR0JBMTAxMDEwOwor CQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwkJZHNwY250ciB8PSBE SVNQUExBTkVfUkdCWDE2MTYxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNF KGZiLT5mb3JtYXQtPmZvcm1hdCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDQgJiYKKwkgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Y X1RJTEVEKQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9USUxFRDsKKworCWlmIChyb3RhdGlvbiAm IERSTV9NT0RFX1JPVEFURV8xODApCisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7 CisKKwlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpCisJCWRzcGNudHIgfD0gRElT UFBMQU5FX01JUlJPUjsKKworCXJldHVybiBkc3BjbnRyOworfQorCitpbnQgaTl4eF9jaGVja19w bGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgc3JjX3gsIHNyY195LCBzcmNfdzsKKwl1MzIgb2Zm c2V0OworCWludCByZXQ7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChwbGFuZV9z dGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGxhbmVfc3RhdGUtPnVh cGkudmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCXNyY194ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3Jj LngxID4+IDE2OworCXNyY195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OworCisJ LyogVW5kb2N1bWVudGVkIGhhcmR3YXJlIGxpbWl0IG9uIGk5NjUvZzR4L3Zsdi9jaHYgKi8KKwlp ZiAoSEFTX0dNQ0goZGV2X3ByaXYpICYmIGZiLT5mb3JtYXQtPmNwcFswXSA9PSA4ICYmIHNyY193 ID4gMjA0OCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmc3Jj X3gsICZzcmNfeSwgcGxhbmVfc3RhdGUsIDApOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gNCkKKwkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmc3Jj X3gsICZzcmNfeSwKKwkJCQkJCQkgICAgcGxhbmVfc3RhdGUsIDApOworCWVsc2UKKwkJb2Zmc2V0 ID0gMDsKKworCS8qCisJICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRoYXQg dGhlIHNyYworCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1ZXMu CisJICovCisJZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCisJ CQkgICAgICBzcmNfeCA8PCAxNiwgc3JjX3kgPDwgMTYpOworCisJLyogSFNXL0JEVyBkbyB0aGlz IGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KKwlpZiAoIUlTX0hBU1dFTEwoZGV2X3ByaXYp ICYmICFJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7CisJCXVuc2lnbmVkIGludCByb3RhdGlvbiA9 IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwkJaW50IHNyY193ID0gZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisJCWludCBzcmNfaCA9IGRybV9yZWN0X2hl aWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKworCQlpZiAocm90YXRpb24gJiBE Uk1fTU9ERV9ST1RBVEVfMTgwKSB7CisJCQlzcmNfeCArPSBzcmNfdyAtIDE7CisJCQlzcmNfeSAr PSBzcmNfaCAtIDE7CisJCX0gZWxzZSBpZiAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gp IHsKKwkJCXNyY194ICs9IHNyY193IC0gMTsKKwkJfQorCX0KKworCXBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVswXS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd LnggPSBzcmNfeDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHNyY195OworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5eHhfcGxhbmVfY2hlY2soc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFu ZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJaW50IHJldDsKKworCXJldCA9IGNodl9wbGFu ZV9jaGVja19yb3RhdGlvbihwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwg Y3J0Y19zdGF0ZSwKKwkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJCURS TV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJCWk5eHhfcGxhbmVfaGFzX3dpbmRvd2lu ZyhwbGFuZSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpOXh4X2NoZWNr X3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJcmV0ID0g aW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcGxhbmVfc3RhdGUtPmN0bCA9IGk5eHhfcGxhbmVfY3RsKGNy dGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGk5 eHhfcGxhbmVfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3Rh dGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjcnRjLT5iYXNlLmRldik7CisJdTMyIGRzcGNudHIgPSAwOworCisJaWYgKGNydGNfc3Rh dGUtPmdhbW1hX2VuYWJsZSkKKwkJZHNwY250ciB8PSBESVNQUExBTkVfR0FNTUFfRU5BQkxFOwor CisJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1BJ UEVfQ1NDX0VOQUJMRTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNSkKKwkJZHNwY250 ciB8PSBESVNQUExBTkVfU0VMX1BJUEUoY3J0Yy0+cGlwZSk7CisKKwlyZXR1cm4gZHNwY250cjsK K30KKworc3RhdGljIHZvaWQgaTl4eF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpudW0sIHVuc2lnbmVkIGlu dCAqZGVuKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOworCXVuc2lnbmVkIGludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07CisKKwkv KgorCSAqIGc0eCBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUgY2FuJ3QgZXhjZWVkIDgwJQor CSAqIG9mIGNkY2xrIHdoZW4gdGhlIHNwcml0ZSBwbGFuZSBpcyBlbmFibGVkIG9uIHRoZQorCSAq IHNhbWUgcGlwZS4gaWxrL3NuYiBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUgaXMKKwkgKiBu ZXZlciBhbGxvd2VkIHRvIGV4Y2VlZCA4MCUgb2YgY2RjbGsuIExldCdzIGp1c3QgZ28KKwkgKiB3 aXRoIHRoZSBpbGsvc25iIGxpbWl0IGFsd2F5cy4KKwkgKi8KKwlpZiAoY3BwID09IDgpIHsKKwkJ Km51bSA9IDEwOworCQkqZGVuID0gODsKKwl9IGVsc2UgeworCQkqbnVtID0gMTsKKwkJKmRlbiA9 IDE7CisJfQorfQorCitzdGF0aWMgaW50IGk5eHhfcGxhbmVfbWluX2NkY2xrKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJdW5zaWduZWQgaW50IHBpeGVsX3JhdGU7CisJ dW5zaWduZWQgaW50IG51bSwgZGVuOworCisJLyoKKwkgKiBOb3RlIHRoYXQgY3J0Y19zdGF0ZS0+ cGl4ZWxfcmF0ZSBhY2NvdW50cyBmb3IgYm90aAorCSAqIGhvcml6b250YWwgYW5kIHZlcnRpY2Fs IHBhbmVsIGZpdHRlciBkb3duc2NhbGluZyBmYWN0b3JzLgorCSAqIFByZS1IU1cgYnNwZWMgdGVs bHMgdXMgdG8gb25seSBjb25zaWRlciB0aGUgaG9yaXpvbnRhbAorCSAqIGRvd25zY2FsaW5nIGZh Y3RvciBoZXJlLiBXZSBpZ25vcmUgdGhhdCBhbmQganVzdCBjb25zaWRlcgorCSAqIGJvdGggZm9y IHNpbXBsaWNpdHkuCisJICovCisJcGl4ZWxfcmF0ZSA9IGNydGNfc3RhdGUtPnBpeGVsX3JhdGU7 CisKKwlpOXh4X3BsYW5lX3JhdGlvKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmbnVtLCAmZGVu KTsKKworCS8qIHR3byBwaXhlbHMgcGVyIGNsb2NrIHdpdGggZG91YmxlIHdpZGUgcGlwZSAqLwor CWlmIChjcnRjX3N0YXRlLT5kb3VibGVfd2lkZSkKKwkJZGVuICo9IDI7CisKKwlyZXR1cm4gRElW X1JPVU5EX1VQKHBpeGVsX3JhdGUgKiBudW0sIGRlbik7Cit9CisKK3N0YXRpYyB2b2lkIGk5eHhf dXBkYXRlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkgICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gaTl4eF9w bGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7CisJdTMyIGxpbmVhcl9vZmZz ZXQ7CisJaW50IHggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueDsKKwlpbnQgeSA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55OworCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+ dWFwaS5kc3QueDE7CisJaW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC55MTsKKwlp bnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisJaW50 IGNydGNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKwl1bnNp Z25lZCBsb25nIGlycWZsYWdzOworCXUzMiBkc3BhZGRyX29mZnNldDsKKwl1MzIgZHNwY250cjsK KworCWRzcGNudHIgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwgaTl4eF9wbGFuZV9jdGxfY3J0YyhjcnRj X3N0YXRlKTsKKworCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwg cGxhbmVfc3RhdGUsIDApOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJZHNw YWRkcl9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0OworCWVsc2UK KwkJZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJfb2Zmc2V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIERTUFNUUklERShpOXh4X3BsYW5lKSwKKwkJCSAgcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lWzBdLnN0cmlkZSk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDQpIHsKKwkJ LyoKKwkJICogUExBTkVfQSBkb2Vzbid0IGFjdHVhbGx5IGhhdmUgYSBmdWxsIHdpbmRvdworCQkg KiBnZW5lcmF0b3IgYnV0IGxldCdzIGFzc3VtZSB3ZSBzdGlsbCBuZWVkIHRvCisJCSAqIHByb2dy YW0gd2hhdGV2ZXIgaXMgdGhlcmUuCisJCSAqLworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgRFNQUE9TKGk5eHhfcGxhbmUpLAorCQkJCSAgKGNydGNfeSA8PCAxNikgfCBjcnRjX3gpOwor CQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU0laRShpOXh4X3BsYW5lKSwKKwkJCQkg ICgoY3J0Y19oIC0gMSkgPDwgMTYpIHwgKGNydGNfdyAtIDEpKTsKKwl9IGVsc2UgaWYgKElTX0NI RVJSWVZJRVcoZGV2X3ByaXYpICYmIGk5eHhfcGxhbmUgPT0gUExBTkVfQikgeworCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTVBPUyhpOXh4X3BsYW5lKSwKKwkJCQkgIChjcnRjX3kg PDwgMTYpIHwgY3J0Y194KTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBSSU1TSVpF KGk5eHhfcGxhbmUpLAorCQkJCSAgKChjcnRjX2ggLSAxKSA8PCAxNikgfCAoY3J0Y193IC0gMSkp OworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTUNOU1RBTFBIQShpOXh4X3BsYW5l KSwgMCk7CisJfQorCisJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChk ZXZfcHJpdikpIHsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUE9GRlNFVChpOXh4 X3BsYW5lKSwKKwkJCQkgICh5IDw8IDE2KSB8IHgpOworCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA0KSB7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BMSU5PRkYo aTl4eF9wbGFuZSksCisJCQkJICBsaW5lYXJfb2Zmc2V0KTsKKwkJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIERTUFRJTEVPRkYoaTl4eF9wbGFuZSksCisJCQkJICAoeSA8PCAxNikgfCB4KTsK Kwl9CisKKwkvKgorCSAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIHNlbGYtYXJtcyBpZiB0aGUgcGxh bmUgd2FzIHByZXZpb3VzbHkKKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVu YWJsZSBhdG9taWMgYnkgd3JpdGluZworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyIGp1c3QgYmVm b3JlIHRoZSBzdXJmYWNlIHJlZ2lzdGVyLgorCSAqLworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsKKwlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSA0KQorCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU1VSRihpOXh4X3Bs YW5lKSwKKwkJCQkgIGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRlKSArIGRzcGFk ZHJfb2Zmc2V0KTsKKwllbHNlCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BBRERS KGk5eHhfcGxhbmUpLAorCQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUp ICsgZHNwYWRkcl9vZmZzZXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGk5eHhfZGlzYWJsZV9w bGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIGk5eHhfcGxhbmVf aWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOworCXVuc2lnbmVkIGxvbmcgaXJxZmxh Z3M7CisJdTMyIGRzcGNudHI7CisKKwkvKgorCSAqIERTUENOVFIgcGlwZSBnYW1tYSBlbmFibGUg b24gZzR4KyBhbmQgcGlwZSBjc2MKKwkgKiBlbmFibGUgb24gaWxrKyBhZmZlY3QgdGhlIHBpcGUg Ym90dG9tIGNvbG9yIGFzCisJICogd2VsbCwgc28gd2UgbXVzdCBjb25maWd1cmUgdGhlbSBldmVu IGlmIHRoZSBwbGFuZQorCSAqIGlzIGRpc2FibGVkLgorCSAqCisJICogT24gcHJlLWc0eCB0aGVy ZSBpcyBubyB3YXkgdG8gZ2FtbWEgY29ycmVjdCB0aGUKKwkgKiBwaXBlIGJvdHRvbSBjb2xvciBi dXQgd2UnbGwga2VlcCBvbiBkb2luZyB0aGlzCisJICogYW55d2F5IHNvIHRoYXQgdGhlIGNydGMg c3RhdGUgcmVhZG91dCB3b3JrcyBjb3JyZWN0bHkuCisJICovCisJZHNwY250ciA9IGk5eHhfcGxh bmVfY3RsX2NydGMoY3J0Y19zdGF0ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg RFNQQ05UUihpOXh4X3BsYW5lKSwgZHNwY250cik7CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gNCkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNVUkYoaTl4eF9wbGFuZSks IDApOworCWVsc2UKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUEFERFIoaTl4eF9w bGFuZSksIDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyBib29sIGk5eHhfcGxhbmVfZ2V0X2h3X3N0YXRl KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJICAgIGVudW0gcGlwZSAqcGlwZSkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNl LmRldik7CisJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CisJ ZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKKwlpbnRl bF93YWtlcmVmX3Qgd2FrZXJlZjsKKwlib29sIHJldDsKKwl1MzIgdmFsOworCisJLyoKKwkgKiBO b3QgMTAwJSBjb3JyZWN0IGZvciBwbGFuZXMgdGhhdCBjYW4gbW92ZSBiZXR3ZWVuIHBpcGVzLAor CSAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBmb3IgZ2VuMi00IHdoaWNoIGRvbid0IGhhdmUg YW55CisJICogZGlzcGxheSBwb3dlciB3ZWxscy4KKwkgKi8KKwlwb3dlcl9kb21haW4gPSBQT1dF Ul9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7CisJd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93 ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CisJaWYgKCF3YWtlcmVm KQorCQlyZXR1cm4gZmFsc2U7CisKKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEU1BD TlRSKGk5eHhfcGxhbmUpKTsKKworCXJldCA9IHZhbCAmIERJU1BMQVlfUExBTkVfRU5BQkxFOwor CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSkKKwkJKnBpcGUgPSBwbGFuZS0+cGlwZTsK KwllbHNlCisJCSpwaXBlID0gKHZhbCAmIERJU1BQTEFORV9TRUxfUElQRV9NQVNLKSA+PgorCQkJ RElTUFBMQU5FX1NFTF9QSVBFX1NISUZUOworCisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2 X3ByaXYsIHBvd2VyX2RvbWFpbiwgd2FrZXJlZik7CisKKwlyZXR1cm4gcmV0OworfQorCit1bnNp Z25lZCBpbnQKK2k5eHhfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAorCQkgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCisJCSAgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisKKwlpZiAoIUhBU19HTUNIKGRldl9wcml2KSkg eworCQlyZXR1cm4gMzIqMTAyNDsKKwl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkgeworCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpCisJCQlyZXR1 cm4gMTYqMTAyNDsKKwkJZWxzZQorCQkJcmV0dXJuIDMyKjEwMjQ7CisJfSBlbHNlIGlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDMpIHsKKwkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9YX1RJTEVEKQorCQkJcmV0dXJuIDgqMTAyNDsKKwkJZWxzZQorCQkJcmV0dXJuIDE2KjEwMjQ7 CisJfSBlbHNlIHsKKwkJaWYgKHBsYW5lLT5pOXh4X3BsYW5lID09IFBMQU5FX0MpCisJCQlyZXR1 cm4gNCoxMDI0OworCQllbHNlCisJCQlyZXR1cm4gOCoxMDI0OworCX0KK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaTk2NV9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRl X3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5l ID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGludGVsX3Bs YW5lX2Rlc3Ryb3ksCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBs aWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJv eV9zdGF0ZSwKKwkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpOTY1X3BsYW5lX2Zvcm1hdF9tb2Rf c3VwcG9ydGVkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaTh4 eF9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBk YXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9w bGFuZSwKKwkuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCisJLmF0b21pY19kdXBsaWNh dGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95 X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKKwkuZm9ybWF0X21vZF9zdXBwb3J0 ZWQgPSBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3RydWN0IGludGVs X3BsYW5lICoKK2ludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpw bGFuZTsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzICpwbGFuZV9mdW5jczsKKwl1bnNp Z25lZCBpbnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKKwljb25zdCB1MzIgKmZvcm1hdHM7CisJaW50 IG51bV9mb3JtYXRzOworCWludCByZXQsIHpwb3M7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA5KQorCQlyZXR1cm4gc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBp cGUsCisJCQkJCQkgIFBMQU5FX1BSSU1BUlkpOworCisJcGxhbmUgPSBpbnRlbF9wbGFuZV9hbGxv YygpOworCWlmIChJU19FUlIocGxhbmUpKQorCQlyZXR1cm4gcGxhbmU7CisKKwlwbGFuZS0+cGlw ZSA9IHBpcGU7CisJLyoKKwkgKiBPbiBnZW4yLzMgb25seSBwbGFuZSBBIGNhbiBkbyBGQkMsIGJ1 dCB0aGUgcGFuZWwgZml0dGVyIGFuZCBMVkRTCisJICogcG9ydCBpcyBob29rZWQgdG8gcGlwZSBC LiBIZW5jZSB3ZSB3YW50IHBsYW5lIEEgZmVlZGluZyBwaXBlIEIuCisJICovCisJaWYgKEhBU19G QkMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihkZXZfcHJpdikgPCA0ICYmCisJICAgIElOVEVMX05V TV9QSVBFUyhkZXZfcHJpdikgPT0gMikKKwkJcGxhbmUtPmk5eHhfcGxhbmUgPSAoZW51bSBpOXh4 X3BsYW5lX2lkKSAhcGlwZTsKKwllbHNlCisJCXBsYW5lLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4 eF9wbGFuZV9pZCkgcGlwZTsKKwlwbGFuZS0+aWQgPSBQTEFORV9QUklNQVJZOworCXBsYW5lLT5m cm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBwbGFuZS0+aWQpOworCisJ cGxhbmUtPmhhc19mYmMgPSBpOXh4X3BsYW5lX2hhc19mYmMoZGV2X3ByaXYsIHBsYW5lLT5pOXh4 X3BsYW5lKTsKKwlpZiAocGxhbmUtPmhhc19mYmMpIHsKKwkJc3RydWN0IGludGVsX2ZiYyAqZmJj ID0gJmRldl9wcml2LT5mYmM7CisKKwkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9iaXRzIHw9 IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7CisJfQorCisJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3By aXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CisJCWZvcm1hdHMgPSB2bHZfcHJpbWFy eV9mb3JtYXRzOworCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUodmx2X3ByaW1hcnlfZm9ybWF0 cyk7CisJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKKwkJLyoKKwkJICog V2FGUDE2R2FtbWFFbmFibGluZzppdmIKKwkJICogIldvcmthcm91bmQgOiBXaGVuIHVzaW5nIHRo ZSA2NC1iaXQgZm9ybWF0LCB0aGUgcGxhbmUKKwkJICogIG91dHB1dCBvbiBlYWNoIGNvbG9yIGNo YW5uZWwgaGFzIG9uZSBxdWFydGVyIGFtcGxpdHVkZS4KKwkJICogIEl0IGNhbiBiZSBicm91Z2h0 IHVwIHRvIGZ1bGwgYW1wbGl0dWRlIGJ5IHVzaW5nIHBpcGUKKwkJICogIGdhbW1hIGNvcnJlY3Rp b24gb3IgcGlwZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIHRvCisJCSAqICBtdWx0aXBseSB0aGUg cGxhbmUgb3V0cHV0IGJ5IGZvdXIuIgorCQkgKgorCQkgKiBUaGVyZSBpcyBubyBkZWRpY2F0ZWQg cGxhbmUgZ2FtbWEgZm9yIHRoZSBwcmltYXJ5IHBsYW5lLAorCQkgKiBhbmQgdXNpbmcgdGhlIHBp cGUgZ2FtbWEvY3NjIGNvdWxkIGNvbmZsaWN0IHdpdGggb3RoZXIKKwkJICogcGxhbmVzLCBzbyB3 ZSBjaG9vc2Ugbm90IHRvIGV4cG9zZSBmcDE2IG9uIElWQiBwcmltYXJ5CisJCSAqIHBsYW5lcy4g SFNXIHByaW1hcnkgcGxhbmVzIG5vIGxvbmdlciBoYXZlIHRoaXMgcHJvYmxlbS4KKwkJICovCisJ CWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7CisJCQlmb3JtYXRzID0gaXZiX3ByaW1hcnlf Zm9ybWF0czsKKwkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpdmJfcHJpbWFyeV9mb3JtYXRz KTsKKwkJfSBlbHNlIHsKKwkJCWZvcm1hdHMgPSBpOTY1X3ByaW1hcnlfZm9ybWF0czsKKwkJCW51 bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOTY1X3ByaW1hcnlfZm9ybWF0cyk7CisJCX0KKwl9IGVs c2UgeworCQlmb3JtYXRzID0gaTh4eF9wcmltYXJ5X2Zvcm1hdHM7CisJCW51bV9mb3JtYXRzID0g QVJSQVlfU0laRShpOHh4X3ByaW1hcnlfZm9ybWF0cyk7CisJfQorCisJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gNCkKKwkJcGxhbmVfZnVuY3MgPSAmaTk2NV9wbGFuZV9mdW5jczsKKwllbHNl CisJCXBsYW5lX2Z1bmNzID0gJmk4eHhfcGxhbmVfZnVuY3M7CisKKwlpZiAoSVNfVkFMTEVZVklF VyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCXBsYW5lLT5taW5fY2Rj bGsgPSB2bHZfcGxhbmVfbWluX2NkY2xrOworCWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJp dikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCisJCXBsYW5lLT5taW5fY2RjbGsgPSBoc3dfcGxh bmVfbWluX2NkY2xrOworCWVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpCisJCXBsYW5l LT5taW5fY2RjbGsgPSBpdmJfcGxhbmVfbWluX2NkY2xrOworCWVsc2UKKwkJcGxhbmUtPm1pbl9j ZGNsayA9IGk5eHhfcGxhbmVfbWluX2NkY2xrOworCisJcGxhbmUtPm1heF9zdHJpZGUgPSBpOXh4 X3BsYW5lX21heF9zdHJpZGU7CisJcGxhbmUtPnVwZGF0ZV9wbGFuZSA9IGk5eHhfdXBkYXRlX3Bs YW5lOworCXBsYW5lLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNhYmxlX3BsYW5lOworCXBsYW5l LT5nZXRfaHdfc3RhdGUgPSBpOXh4X3BsYW5lX2dldF9od19zdGF0ZTsKKwlwbGFuZS0+Y2hlY2tf cGxhbmUgPSBpOXh4X3BsYW5lX2NoZWNrOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NSB8fCBJU19HNFgoZGV2X3ByaXYpKQorCQlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQo JmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKKwkJCQkJICAgICAgIDAsIHBsYW5lX2Z1bmNz LAorCQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsCisJCQkJCSAgICAgICBpOXh4X2Zv cm1hdF9tb2RpZmllcnMsCisJCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZLAorCQkJ CQkgICAgICAgInByaW1hcnkgJWMiLCBwaXBlX25hbWUocGlwZSkpOworCWVsc2UKKwkJcmV0ID0g ZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxhbmUtPmJhc2UsCisJ CQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywKKwkJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3Jt YXRzLAorCQkJCQkgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAorCQkJCQkgICAgICAgRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSwKKwkJCQkJICAgICAgICJwbGFuZSAlYyIsCisJCQkJCSAgICAg ICBwbGFuZV9uYW1lKHBsYW5lLT5pOXh4X3BsYW5lKSk7CisJaWYgKHJldCkKKwkJZ290byBmYWls OworCisJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIHBpcGUgPT0gUElQRV9CKSB7CisJ CXN1cHBvcnRlZF9yb3RhdGlvbnMgPQorCQkJRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9S T1RBVEVfMTgwIHwKKwkJCURSTV9NT0RFX1JFRkxFQ1RfWDsKKwl9IGVsc2UgaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNCkgeworCQlzdXBwb3J0ZWRfcm90YXRpb25zID0KKwkJCURSTV9NT0RF X1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MDsKKwl9IGVsc2UgeworCQlzdXBwb3J0ZWRf cm90YXRpb25zID0gRFJNX01PREVfUk9UQVRFXzA7CisJfQorCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gNCkKKwkJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSgmcGxhbmUt PmJhc2UsCisJCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMCwKKwkJCQkJCSAgIHN1cHBvcnRlZF9y b3RhdGlvbnMpOworCisJenBvcyA9IDA7CisJZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJs ZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHpwb3MpOworCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQo JnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiBwbGFu ZTsKKworZmFpbDoKKwlpbnRlbF9wbGFuZV9mcmVlKHBsYW5lKTsKKworCXJldHVybiBFUlJfUFRS KHJldCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4 eF9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iYzI4MzRhNjI3MzUKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2k5eHhfcGxhbmUuaApA QCAtMCwwICsxLDI0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgor ICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9J OVhYX1BMQU5FX0hfCisjZGVmaW5lIF9JOVhYX1BMQU5FX0hfCisKKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgorCitlbnVtIHBpcGU7CitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBp bnRlbF9wbGFuZTsKK3N0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZTsKKwordW5zaWduZWQgaW50IGk5 eHhfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJCSAgIHUz MiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKKwkJCQkgICB1bnNpZ25lZCBpbnQgcm90YXRp b24pOworaW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKTsKKworc3RydWN0IGludGVsX3BsYW5lICoKK2ludGVsX3ByaW1hcnlf cGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBl IHBpcGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmMKaW5kZXggYzgyMmUxMWRmMWJkLi5mMmM0OGU1Y2RiNDMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBAIC04Nyw1NiArODcsNyBAQAog I2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVk ZSAiaW50ZWxfdmdhLmgiCi0KLS8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2VuIDw9IDMg Ki8KLXN0YXRpYyBjb25zdCB1MzIgaTh4eF9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsKLQlEUk1fRk9S TUFUX0M4LAotCURSTV9GT1JNQVRfWFJHQjE1NTUsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJN X0ZPUk1BVF9YUkdCODg4OCwKLX07Ci0KLS8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgaXZi IChubyBmcDE2IGR1ZSB0byBodyBpc3N1ZSkgKi8KLXN0YXRpYyBjb25zdCB1MzIgaXZiX3ByaW1h cnlfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0J RFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRf WFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLX07Ci0KLS8qIFByaW1hcnkg cGxhbmUgZm9ybWF0cyBmb3IgZ2VuID49IDQsIGV4Y2VwdCBpdmIgKi8KLXN0YXRpYyBjb25zdCB1 MzIgaTk2NV9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsKLQlEUk1fRk9STUFUX0M4LAotCURSTV9GT1JN QVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9YQkdSODg4OCwK LQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0JRFJN X0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAotfTsKLQotLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZv ciB2bHYvY2h2ICovCi1zdGF0aWMgY29uc3QgdTMyIHZsdl9wcmltYXJ5X2Zvcm1hdHNbXSA9IHsK LQlEUk1fRk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJHQjg4 ODgsCi0JRFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4LAotCURSTV9G T1JNQVRfQUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hC R1IyMTAxMDEwLAotCURSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9BQkdSMjEw MTAxMCwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCi19OwotCi1zdGF0aWMgY29uc3QgdTY0 IGk5eHhfZm9ybWF0X21vZGlmaWVyc1tdID0gewotCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAot CURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlEUk1fRk9STUFUX01PRF9JTlZBTElECi19OworI2lu Y2x1ZGUgImk5eHhfcGxhbmUuaCIKIAogc3RhdGljIHZvaWQgaTl4eF9jcnRjX2Nsb2NrX2dldChz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlw ZV9jb25maWcpOwpAQCAtNDA0Nyw0MjIgKzM5OTgsNiBAQCBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1 cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAlyZXR1cm4gMDsK IH0KIAotc3RhdGljIHZvaWQgaTl4eF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSwKLQkJCSAgICAgdW5zaWduZWQgaW50ICpudW0sIHVuc2lnbmVkIGlu dCAqZGVuKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Ci0KLQkv KgotCSAqIGc0eCBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUgY2FuJ3QgZXhjZWVkIDgwJQot CSAqIG9mIGNkY2xrIHdoZW4gdGhlIHNwcml0ZSBwbGFuZSBpcyBlbmFibGVkIG9uIHRoZQotCSAq IHNhbWUgcGlwZS4gaWxrL3NuYiBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUgaXMKLQkgKiBu ZXZlciBhbGxvd2VkIHRvIGV4Y2VlZCA4MCUgb2YgY2RjbGsuIExldCdzIGp1c3QgZ28KLQkgKiB3 aXRoIHRoZSBpbGsvc25iIGxpbWl0IGFsd2F5cy4KLQkgKi8KLQlpZiAoY3BwID09IDgpIHsKLQkJ Km51bSA9IDEwOwotCQkqZGVuID0gODsKLQl9IGVsc2UgewotCQkqbnVtID0gMTsKLQkJKmRlbiA9 IDE7Ci0JfQotfQotCi1zdGF0aWMgaW50IGk5eHhfcGxhbmVfbWluX2NkY2xrKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JdW5zaWduZWQgaW50IHBpeGVsX3JhdGU7Ci0J dW5zaWduZWQgaW50IG51bSwgZGVuOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgY3J0Y19zdGF0ZS0+ cGl4ZWxfcmF0ZSBhY2NvdW50cyBmb3IgYm90aAotCSAqIGhvcml6b250YWwgYW5kIHZlcnRpY2Fs IHBhbmVsIGZpdHRlciBkb3duc2NhbGluZyBmYWN0b3JzLgotCSAqIFByZS1IU1cgYnNwZWMgdGVs bHMgdXMgdG8gb25seSBjb25zaWRlciB0aGUgaG9yaXpvbnRhbAotCSAqIGRvd25zY2FsaW5nIGZh Y3RvciBoZXJlLiBXZSBpZ25vcmUgdGhhdCBhbmQganVzdCBjb25zaWRlcgotCSAqIGJvdGggZm9y IHNpbXBsaWNpdHkuCi0JICovCi0JcGl4ZWxfcmF0ZSA9IGNydGNfc3RhdGUtPnBpeGVsX3JhdGU7 Ci0KLQlpOXh4X3BsYW5lX3JhdGlvKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmbnVtLCAmZGVu KTsKLQotCS8qIHR3byBwaXhlbHMgcGVyIGNsb2NrIHdpdGggZG91YmxlIHdpZGUgcGlwZSAqLwot CWlmIChjcnRjX3N0YXRlLT5kb3VibGVfd2lkZSkKLQkJZGVuICo9IDI7Ci0KLQlyZXR1cm4gRElW X1JPVU5EX1VQKHBpeGVsX3JhdGUgKiBudW0sIGRlbik7Ci19Ci0KLXVuc2lnbmVkIGludAotaTl4 eF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCSAgICAgIHUz MiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKLQkJICAgICAgdW5zaWduZWQgaW50IHJvdGF0 aW9uKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKLQotCWlmICghSEFTX0dNQ0goZGV2X3ByaXYpKSB7Ci0JCXJldHVybiAz MioxMDI0OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KSB7Ci0JCWlmICht b2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKLQkJCXJldHVybiAxNioxMDI0Owot CQllbHNlCi0JCQlyZXR1cm4gMzIqMTAyNDsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMykgewotCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpCi0J CQlyZXR1cm4gOCoxMDI0OwotCQllbHNlCi0JCQlyZXR1cm4gMTYqMTAyNDsKLQl9IGVsc2Ugewot CQlpZiAocGxhbmUtPmk5eHhfcGxhbmUgPT0gUExBTkVfQykKLQkJCXJldHVybiA0KjEwMjQ7Ci0J CWVsc2UKLQkJCXJldHVybiA4KjEwMjQ7Ci0JfQotfQotCi1zdGF0aWMgdTMyIGk5eHhfcGxhbmVf Y3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0J c3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGku Y3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRj LT5iYXNlLmRldik7Ci0JdTMyIGRzcGNudHIgPSAwOwotCi0JaWYgKGNydGNfc3RhdGUtPmdhbW1h X2VuYWJsZSkKLQkJZHNwY250ciB8PSBESVNQUExBTkVfR0FNTUFfRU5BQkxFOwotCi0JaWYgKGNy dGNfc3RhdGUtPmNzY19lbmFibGUpCi0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1BJUEVfQ1NDX0VO QUJMRTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNSkKLQkJZHNwY250ciB8PSBESVNQ UExBTkVfU0VMX1BJUEUoY3J0Yy0+cGlwZSk7Ci0KLQlyZXR1cm4gZHNwY250cjsKLX0KLQotc3Rh dGljIHUzMiBpOXh4X3BsYW5lX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKLQkJCSAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBs YW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBs YW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQl1MzIgZHNwY250cjsKLQotCWRzcGNudHIgPSBESVNQ TEFZX1BMQU5FX0VOQUJMRTsKLQotCWlmIChJU19HNFgoZGV2X3ByaXYpIHx8IElTX0dFTihkZXZf cHJpdiwgNSkgfHwKLQkgICAgSVNfR0VOKGRldl9wcml2LCA2KSB8fCBJU19JVllCUklER0UoZGV2 X3ByaXYpKQotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKLQot CXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCQlk c3BjbnRyIHw9IERJU1BQTEFORV84QlBQOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWFJH QjE1NTU6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlg1NTU7Ci0JCWJyZWFrOwotCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCMTU1NToKLQkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTU1NTsKLQkJ YnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJZHNwY250ciB8PSBESVNQUExBTkVf QkdSWDU2NTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgotCQlkc3BjbnRy IHw9IERJU1BQTEFORV9CR1JYODg4OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4 ODg6Ci0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQlg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJN X0ZPUk1BVF9BUkdCODg4ODoKLQkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTg4ODsKLQkJYnJl YWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9S R0JBODg4OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Ci0JCWRzcGNu dHIgfD0gRElTUFBMQU5FX0JHUlgxMDEwMTA7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9Y QkdSMjEwMTAxMDoKLQkJZHNwY250ciB8PSBESVNQUExBTkVfUkdCWDEwMTAxMDsKLQkJYnJlYWs7 Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9C R1JBMTAxMDEwOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Ci0JCWRz cGNudHIgfD0gRElTUFBMQU5FX1JHQkExMDEwMTA7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1B VF9YQkdSMTYxNjE2MTZGOgotCQlkc3BjbnRyIHw9IERJU1BQTEFORV9SR0JYMTYxNjE2OwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmItPmZvcm1hdC0+Zm9ybWF0KTsKLQkJ cmV0dXJuIDA7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCAmJgotCSAgICBm Yi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpCi0JCWRzcGNudHIgfD0gRElT UFBMQU5FX1RJTEVEOwotCi0JaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkKLQkJ ZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKLQotCWlmIChyb3RhdGlvbiAmIERSTV9N T0RFX1JFRkxFQ1RfWCkKLQkJZHNwY250ciB8PSBESVNQUExBTkVfTUlSUk9SOwotCi0JcmV0dXJu IGRzcGNudHI7Ci19Ci0KLWludCBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWlu dCBzcmNfeCwgc3JjX3ksIHNyY193OwotCXUzMiBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCXJldCA9 IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsK LQotCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7 Ci0Jc3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7Ci0Jc3JjX3kgPSBwbGFu ZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7Ci0KLQkvKiBVbmRvY3VtZW50ZWQgaGFyZHdhcmUg bGltaXQgb24gaTk2NS9nNHgvdmx2L2NodiAqLwotCWlmIChIQVNfR01DSChkZXZfcHJpdikgJiYg ZmItPmZvcm1hdC0+Y3BwWzBdID09IDggJiYgc3JjX3cgPiAyMDQ4KQotCQlyZXR1cm4gLUVJTlZB TDsKLQotCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwg MCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQotCQlvZmZzZXQgPSBpbnRlbF9w bGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZzcmNfeCwgJnNyY195LAotCQkJCQkJCSAgICBw bGFuZV9zdGF0ZSwgMCk7Ci0JZWxzZQotCQlvZmZzZXQgPSAwOwotCi0JLyoKLQkgKiBQdXQgdGhl IGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3JjCi0JICogY29vcmRpbmF0ZSBj aGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KLQkgKi8KLQlkcm1fcmVjdF90cmFuc2xh dGVfdG8oJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKLQkJCSAgICAgIHNyY194IDw8IDE2LCBzcmNf eSA8PCAxNik7Ci0KLQkvKiBIU1cvQkRXIGRvIHRoaXMgYXV0b21hZ2ljYWxseSBpbiBoYXJkd2Fy ZSAqLwotCWlmICghSVNfSEFTV0VMTChkZXZfcHJpdikgJiYgIUlTX0JST0FEV0VMTChkZXZfcHJp dikpIHsKLQkJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9u OwotCQlpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+ PiAxNjsKLQkJaW50IHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5z cmMpID4+IDE2OwotCi0JCWlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApIHsKLQkJ CXNyY194ICs9IHNyY193IC0gMTsKLQkJCXNyY195ICs9IHNyY19oIC0gMTsKLQkJfSBlbHNlIGlm IChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCkgewotCQkJc3JjX3ggKz0gc3JjX3cgLSAx OwotCQl9Ci0JfQotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCA9IG9mZnNl dDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueCA9IHNyY194OwotCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVswXS55ID0gc3JjX3k7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGJv b2wgaTl4eF9wbGFuZV9oYXNfd2luZG93aW5nKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFz ZS5kZXYpOwotCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxh bmU7Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBpOXh4X3BsYW5l ID09IFBMQU5FX0I7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0 WChkZXZfcHJpdikpCi0JCXJldHVybiBmYWxzZTsKLQllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYs IDQpKQotCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9DOwotCWVsc2UKLQkJcmV0dXJuIGk5 eHhfcGxhbmUgPT0gUExBTkVfQiB8fAotCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9DOwotfQotCi1z dGF0aWMgaW50Ci1pOXh4X3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAotCQkgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVh cGkucGxhbmUpOwotCWludCByZXQ7Ci0KLQlyZXQgPSBjaHZfcGxhbmVfY2hlY2tfcm90YXRpb24o cGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpbnRlbF9h dG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCi0JCQkJ CQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCi0JCQkJCQlEUk1fUExBTkVfSEVMUEVSX05P X1NDQUxJTkcsCi0JCQkJCQlpOXh4X3BsYW5lX2hhc193aW5kb3dpbmcocGxhbmUpKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBs YW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0 ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IGludGVsX3BsYW5lX2NoZWNr X3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsK LQotCXBsYW5lX3N0YXRlLT5jdGwgPSBpOXh4X3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9z dGF0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcGxhbmUo c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhf cGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKLQl1MzIgbGluZWFyX29mZnNldDsKLQlpbnQgeCA9 IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54OwotCWludCB5ID0gcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lWzBdLnk7Ci0JaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsK LQlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwotCWludCBjcnRjX3cgPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQlpbnQgY3J0Y19oID0gZHJt X3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCXVuc2lnbmVkIGxvbmcgaXJx ZmxhZ3M7Ci0JdTMyIGRzcGFkZHJfb2Zmc2V0OwotCXUzMiBkc3BjbnRyOwotCi0JZHNwY250ciA9 IHBsYW5lX3N0YXRlLT5jdGwgfCBpOXh4X3BsYW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOwotCi0J bGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBwbGFuZV9zdGF0ZSwg MCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQotCQlkc3BhZGRyX29mZnNldCA9 IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7Ci0JZWxzZQotCQlkc3BhZGRyX29m ZnNldCA9IGxpbmVhcl9vZmZzZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVu Y29yZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQ U1RSSURFKGk5eHhfcGxhbmUpLAotCQkJICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3Ry aWRlKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkgewotCQkvKgotCQkgKiBQTEFO RV9BIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGZ1bGwgd2luZG93Ci0JCSAqIGdlbmVyYXRvciBi dXQgbGV0J3MgYXNzdW1lIHdlIHN0aWxsIG5lZWQgdG8KLQkJICogcHJvZ3JhbSB3aGF0ZXZlciBp cyB0aGVyZS4KLQkJICovCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BQT1MoaTl4 eF9wbGFuZSksCi0JCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7Ci0JCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBEU1BTSVpFKGk5eHhfcGxhbmUpLAotCQkJCSAgKChjcnRjX2ggLSAx KSA8PCAxNikgfCAoY3J0Y193IC0gMSkpOwotCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikgJiYgaTl4eF9wbGFuZSA9PSBQTEFORV9CKSB7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQUklNUE9TKGk5eHhfcGxhbmUpLAotCQkJCSAgKGNydGNfeSA8PCAxNikgfCBjcnRj X3gpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTVNJWkUoaTl4eF9wbGFuZSks Ci0JCQkJICAoKGNydGNfaCAtIDEpIDw8IDE2KSB8IChjcnRjX3cgLSAxKSk7Ci0JCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBQUklNQ05TVEFMUEhBKGk5eHhfcGxhbmUpLCAwKTsKLQl9Ci0K LQlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkgewot CQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQT0ZGU0VUKGk5eHhfcGxhbmUpLAotCQkJ CSAgKHkgPDwgMTYpIHwgeCk7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQp IHsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUExJTk9GRihpOXh4X3BsYW5lKSwK LQkJCQkgIGxpbmVhcl9vZmZzZXQpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQ VElMRU9GRihpOXh4X3BsYW5lKSwKLQkJCQkgICh5IDw8IDE2KSB8IHgpOwotCX0KLQotCS8qCi0J ICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMgcHJldmlv dXNseQotCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUgcGxhbmUgZW5hYmxlIGF0b21pYyBi eSB3cml0aW5nCi0JICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVzdCBiZWZvcmUgdGhlIHN1cmZh Y2UgcmVnaXN0ZXIuCi0JICovCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUENOVFIo aTl4eF9wbGFuZSksIGRzcGNudHIpOwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0J CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVVJGKGk5eHhfcGxhbmUpLAotCQkJCSAg aW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgZHNwYWRkcl9vZmZzZXQpOwot CWVsc2UKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUEFERFIoaTl4eF9wbGFuZSks Ci0JCQkJICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBkc3BhZGRyX29m ZnNldCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ss IGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF9kaXNhYmxlX3BsYW5lKHN0cnVjdCBp bnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5l ID0gcGxhbmUtPmk5eHhfcGxhbmU7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQl1MzIgZHNw Y250cjsKLQotCS8qCi0JICogRFNQQ05UUiBwaXBlIGdhbW1hIGVuYWJsZSBvbiBnNHgrIGFuZCBw aXBlIGNzYwotCSAqIGVuYWJsZSBvbiBpbGsrIGFmZmVjdCB0aGUgcGlwZSBib3R0b20gY29sb3Ig YXMKLQkgKiB3ZWxsLCBzbyB3ZSBtdXN0IGNvbmZpZ3VyZSB0aGVtIGV2ZW4gaWYgdGhlIHBsYW5l Ci0JICogaXMgZGlzYWJsZWQuCi0JICoKLQkgKiBPbiBwcmUtZzR4IHRoZXJlIGlzIG5vIHdheSB0 byBnYW1tYSBjb3JyZWN0IHRoZQotCSAqIHBpcGUgYm90dG9tIGNvbG9yIGJ1dCB3ZSdsbCBrZWVw IG9uIGRvaW5nIHRoaXMKLQkgKiBhbnl3YXkgc28gdGhhdCB0aGUgY3J0YyBzdGF0ZSByZWFkb3V0 IHdvcmtzIGNvcnJlY3RseS4KLQkgKi8KLQlkc3BjbnRyID0gaTl4eF9wbGFuZV9jdGxfY3J0Yyhj cnRjX3N0YXRlKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ss IGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BDTlRSKGk5eHhf cGxhbmUpLCBkc3BjbnRyKTsKLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQotCQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQU1VSRihpOXh4X3BsYW5lKSwgMCk7Ci0JZWxzZQot CQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQUREUihpOXh4X3BsYW5lKSwgMCk7Ci0K LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdz KTsKLX0KLQotc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSwKLQkJCQkgICAgZW51bSBwaXBlICpwaXBlKQotewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVt IGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKLQllbnVtIGk5eHhfcGxh bmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwotCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwotCWJvb2wgcmV0OwotCXUzMiB2YWw7Ci0KLQkvKgotCSAqIE5vdCAxMDAlIGNvcnJl Y3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJldHdlZW4gcGlwZXMsCi0JICogYnV0IHRoYXQn cyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTQgd2hpY2ggZG9uJ3QgaGF2ZSBhbnkKLQkgKiBkaXNw bGF5IHBvd2VyIHdlbGxzLgotCSAqLwotCXBvd2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBF KHBsYW5lLT5waXBlKTsKLQl3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5h YmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKLQlpZiAoIXdha2VyZWYpCi0JCXJldHVybiBm YWxzZTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERTUENOVFIoaTl4eF9wbGFu ZSkpOwotCi0JcmV0ID0gdmFsICYgRElTUExBWV9QTEFORV9FTkFCTEU7Ci0KLQlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA1KQotCQkqcGlwZSA9IHBsYW5lLT5waXBlOwotCWVsc2UKLQkJKnBp cGUgPSAodmFsICYgRElTUFBMQU5FX1NFTF9QSVBFX01BU0spID4+Ci0JCQlESVNQUExBTkVfU0VM X1BJUEVfU0hJRlQ7Ci0KLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJf ZG9tYWluLCB3YWtlcmVmKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHNrbF9k ZXRhY2hfc2NhbGVyKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLCBpbnQgaWQpCiB7CiAJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2UuZGV2OwpAQCAtMTYyNTAs MjI4ICsxNTc4NSw2IEBAIHZvaWQgaW50ZWxfcGxhbmVfZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSkKIAlrZnJlZSh0b19pbnRlbF9wbGFuZShwbGFuZSkpOwogfQogCi1zdGF0aWMgYm9v bCBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFu ZSwKLQkJCQkJICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKLXsKLQlzd2l0Y2ggKG1vZGlm aWVyKSB7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWF9USUxFRDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQot CXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNhc2UgRFJNX0ZPUk1B VF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1OgotCWNhc2UgRFJNX0ZPUk1BVF9Y UkdCODg4ODoKLQkJcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAot CQkJbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuIGZhbHNlOwotCX0KLX0KLQotc3RhdGljIGJvb2wgaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1 cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCi0JCQkJCSAgICB1MzIgZm9ybWF0LCB1 NjQgbW9kaWZpZXIpCi17Ci0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9N T0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2Ug RFJNX0ZPUk1BVF9DODoKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCWNhc2UgRFJNX0ZPUk1B VF9YUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFU X0FSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQljYXNlIERSTV9GT1JNQVRf WFJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Ci0JY2FzZSBE Uk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JCXJldHVybiBtb2RpZmllciA9PSBEUk1fRk9STUFU X01PRF9MSU5FQVIgfHwKLQkJCW1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwot CWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2Z1bmNzIGk5NjVfcGxhbmVfZnVuY3MgPSB7Ci0JLnVwZGF0ZV9wbGFuZSA9IGRy bV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKLQkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9t aWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCi0JLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95 LAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRl LAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCi0J LmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwK LX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk4eHhfcGxhbmVfZnVu Y3MgPSB7Ci0JLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK LQkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCi0JLmRl c3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0g aW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGlu dGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTh4eF9w bGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKLX07Ci0KLXN0YXRpYyBib29sIGk5eHhfcGxhbmVf aGFzX2ZiYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgZW51 bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUpCi17Ci0JaWYgKCFIQVNfRkJDKGRldl9wcml2KSkK LQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFT V0VMTChkZXZfcHJpdikpCi0JCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0E7IC8qIHRpZWQg dG8gcGlwZSBBICovCi0JZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKLQkJcmV0dXJu IGk5eHhfcGxhbmUgPT0gUExBTkVfQSB8fCBpOXh4X3BsYW5lID09IFBMQU5FX0IgfHwKLQkJCWk5 eHhfcGxhbmUgPT0gUExBTkVfQzsKLQllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQp Ci0JCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0EgfHwgaTl4eF9wbGFuZSA9PSBQTEFORV9C OwotCWVsc2UKLQkJcmV0dXJuIGk5eHhfcGxhbmUgPT0gUExBTkVfQTsKLX0KLQotc3RhdGljIHN0 cnVjdCBpbnRlbF9wbGFuZSAqCi1pbnRlbF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQotewotCXN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmU7Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyAqcGxhbmVfZnVu Y3M7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7Ci0JY29uc3QgdTMyICpmb3Jt YXRzOwotCWludCBudW1fZm9ybWF0czsKLQlpbnQgcmV0LCB6cG9zOwotCi0JaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gOSkKLQkJcmV0dXJuIHNrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRlKGRl dl9wcml2LCBwaXBlLAotCQkJCQkJICBQTEFORV9QUklNQVJZKTsKLQotCXBsYW5lID0gaW50ZWxf cGxhbmVfYWxsb2MoKTsKLQlpZiAoSVNfRVJSKHBsYW5lKSkKLQkJcmV0dXJuIHBsYW5lOwotCi0J cGxhbmUtPnBpcGUgPSBwaXBlOwotCS8qCi0JICogT24gZ2VuMi8zIG9ubHkgcGxhbmUgQSBjYW4g ZG8gRkJDLCBidXQgdGhlIHBhbmVsIGZpdHRlciBhbmQgTFZEUwotCSAqIHBvcnQgaXMgaG9va2Vk IHRvIHBpcGUgQi4gSGVuY2Ugd2Ugd2FudCBwbGFuZSBBIGZlZWRpbmcgcGlwZSBCLgotCSAqLwot CWlmIChIQVNfRkJDKGRldl9wcml2KSAmJiBJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCAmJgotCSAg ICBJTlRFTF9OVU1fUElQRVMoZGV2X3ByaXYpID09IDIpCi0JCXBsYW5lLT5pOXh4X3BsYW5lID0g KGVudW0gaTl4eF9wbGFuZV9pZCkgIXBpcGU7Ci0JZWxzZQotCQlwbGFuZS0+aTl4eF9wbGFuZSA9 IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7Ci0JcGxhbmUtPmlkID0gUExBTkVfUFJJTUFSWTsK LQlwbGFuZS0+ZnJvbnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRCVUZGRVIocGlwZSwgcGxhbmUt PmlkKTsKLQotCXBsYW5lLT5oYXNfZmJjID0gaTl4eF9wbGFuZV9oYXNfZmJjKGRldl9wcml2LCBw bGFuZS0+aTl4eF9wbGFuZSk7Ci0JaWYgKHBsYW5lLT5oYXNfZmJjKSB7Ci0JCXN0cnVjdCBpbnRl bF9mYmMgKmZiYyA9ICZkZXZfcHJpdi0+ZmJjOwotCi0JCWZiYy0+cG9zc2libGVfZnJhbWVidWZm ZXJfYml0cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0OwotCX0KLQotCWlmIChJU19WQUxMRVlW SUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQlmb3JtYXRzID0g dmx2X3ByaW1hcnlfZm9ybWF0czsKLQkJbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHZsdl9wcmlt YXJ5X2Zvcm1hdHMpOwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KSB7Ci0J CS8qCi0JCSAqIFdhRlAxNkdhbW1hRW5hYmxpbmc6aXZiCi0JCSAqICJXb3JrYXJvdW5kIDogV2hl biB1c2luZyB0aGUgNjQtYml0IGZvcm1hdCwgdGhlIHBsYW5lCi0JCSAqICBvdXRwdXQgb24gZWFj aCBjb2xvciBjaGFubmVsIGhhcyBvbmUgcXVhcnRlciBhbXBsaXR1ZGUuCi0JCSAqICBJdCBjYW4g YmUgYnJvdWdodCB1cCB0byBmdWxsIGFtcGxpdHVkZSBieSB1c2luZyBwaXBlCi0JCSAqICBnYW1t YSBjb3JyZWN0aW9uIG9yIHBpcGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiB0bwotCQkgKiAgbXVs dGlwbHkgdGhlIHBsYW5lIG91dHB1dCBieSBmb3VyLiIKLQkJICoKLQkJICogVGhlcmUgaXMgbm8g ZGVkaWNhdGVkIHBsYW5lIGdhbW1hIGZvciB0aGUgcHJpbWFyeSBwbGFuZSwKLQkJICogYW5kIHVz aW5nIHRoZSBwaXBlIGdhbW1hL2NzYyBjb3VsZCBjb25mbGljdCB3aXRoIG90aGVyCi0JCSAqIHBs YW5lcywgc28gd2UgY2hvb3NlIG5vdCB0byBleHBvc2UgZnAxNiBvbiBJVkIgcHJpbWFyeQotCQkg KiBwbGFuZXMuIEhTVyBwcmltYXJ5IHBsYW5lcyBubyBsb25nZXIgaGF2ZSB0aGlzIHByb2JsZW0u Ci0JCSAqLwotCQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkgewotCQkJZm9ybWF0cyA9IGl2 Yl9wcmltYXJ5X2Zvcm1hdHM7Ci0JCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaXZiX3ByaW1h cnlfZm9ybWF0cyk7Ci0JCX0gZWxzZSB7Ci0JCQlmb3JtYXRzID0gaTk2NV9wcmltYXJ5X2Zvcm1h dHM7Ci0JCQludW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaTk2NV9wcmltYXJ5X2Zvcm1hdHMpOwot CQl9Ci0JfSBlbHNlIHsKLQkJZm9ybWF0cyA9IGk4eHhfcHJpbWFyeV9mb3JtYXRzOwotCQludW1f Zm9ybWF0cyA9IEFSUkFZX1NJWkUoaTh4eF9wcmltYXJ5X2Zvcm1hdHMpOwotCX0KLQotCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCXBsYW5lX2Z1bmNzID0gJmk5NjVfcGxhbmVfZnVu Y3M7Ci0JZWxzZQotCQlwbGFuZV9mdW5jcyA9ICZpOHh4X3BsYW5lX2Z1bmNzOwotCi0JaWYgKElT X1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQlwbGFu ZS0+bWluX2NkY2xrID0gdmx2X3BsYW5lX21pbl9jZGNsazsKLQllbHNlIGlmIChJU19CUk9BRFdF TEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQotCQlwbGFuZS0+bWluX2NkY2xr ID0gaHN3X3BsYW5lX21pbl9jZGNsazsKLQllbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYp KQotCQlwbGFuZS0+bWluX2NkY2xrID0gaXZiX3BsYW5lX21pbl9jZGNsazsKLQllbHNlCi0JCXBs YW5lLT5taW5fY2RjbGsgPSBpOXh4X3BsYW5lX21pbl9jZGNsazsKLQotCXBsYW5lLT5tYXhfc3Ry aWRlID0gaTl4eF9wbGFuZV9tYXhfc3RyaWRlOwotCXBsYW5lLT51cGRhdGVfcGxhbmUgPSBpOXh4 X3VwZGF0ZV9wbGFuZTsKLQlwbGFuZS0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9wbGFu ZTsKLQlwbGFuZS0+Z2V0X2h3X3N0YXRlID0gaTl4eF9wbGFuZV9nZXRfaHdfc3RhdGU7Ci0JcGxh bmUtPmNoZWNrX3BsYW5lID0gaTl4eF9wbGFuZV9jaGVjazsKLQotCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKLQkJcmV0ID0gZHJtX3VuaXZlcnNhbF9w bGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxhbmUtPmJhc2UsCi0JCQkJCSAgICAgICAwLCBw bGFuZV9mdW5jcywKLQkJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAotCQkJCQkgICAg ICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAotCQkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWSwKLQkJCQkJICAgICAgICJwcmltYXJ5ICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKLQllbHNl Ci0JCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwgJnBsYW5l LT5iYXNlLAotCQkJCQkgICAgICAgMCwgcGxhbmVfZnVuY3MsCi0JCQkJCSAgICAgICBmb3JtYXRz LCBudW1fZm9ybWF0cywKLQkJCQkJICAgICAgIGk5eHhfZm9ybWF0X21vZGlmaWVycywKLQkJCQkJ ICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlksCi0JCQkJCSAgICAgICAicGxhbmUgJWMiLAot CQkJCQkgICAgICAgcGxhbmVfbmFtZShwbGFuZS0+aTl4eF9wbGFuZSkpOwotCWlmIChyZXQpCi0J CWdvdG8gZmFpbDsKLQotCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBlID09IFBJ UEVfQikgewotCQlzdXBwb3J0ZWRfcm90YXRpb25zID0KLQkJCURSTV9NT0RFX1JPVEFURV8wIHwg RFJNX01PREVfUk9UQVRFXzE4MCB8Ci0JCQlEUk1fTU9ERV9SRUZMRUNUX1g7Ci0JfSBlbHNlIGlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKLQkJc3VwcG9ydGVkX3JvdGF0aW9ucyA9Ci0J CQlEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODA7Ci0JfSBlbHNlIHsKLQkJ c3VwcG9ydGVkX3JvdGF0aW9ucyA9IERSTV9NT0RFX1JPVEFURV8wOwotCX0KLQotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVy dHkoJnBsYW5lLT5iYXNlLAotCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCi0JCQkJCQkgICBz dXBwb3J0ZWRfcm90YXRpb25zKTsKLQotCXpwb3MgPSAwOwotCWRybV9wbGFuZV9jcmVhdGVfenBv c19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCB6cG9zKTsKLQotCWRybV9wbGFuZV9o ZWxwZXJfYWRkKCZwbGFuZS0+YmFzZSwgJmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7Ci0KLQly ZXR1cm4gcGxhbmU7Ci0KLWZhaWw6Ci0JaW50ZWxfcGxhbmVfZnJlZShwbGFuZSk7Ci0KLQlyZXR1 cm4gRVJSX1BUUihyZXQpOwotfQotCiBzdGF0aWMgaW50IGludGVsX2NydGNfbGF0ZV9yZWdpc3Rl cihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJaW50ZWxfY3J0Y19kZWJ1Z2ZzX2FkZChjcnRj KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKaW5kZXgg NzE3YjBlNDE2MGU5Li5mN2U0OWEzOWJkOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5oCkBAIC02MzAsMTEgKzYzMCw3IEBAIHUzMiBza2xfcGxhbmVf Y3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogdTMy IHNrbF9wbGFuZV9zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSwKIAkJICAgICBpbnQgcGxhbmUpOwogaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotaW50IGk5eHhfY2hlY2tfcGxh bmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIGludCBz a2xfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0LCBib29sIHJnYl9vcmRlciwgYm9vbCBhbHBo YSk7Ci11bnNpZ25lZCBpbnQgaTl4eF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUsCi0JCQkJICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAotCQkJCSAg IHVuc2lnbmVkIGludCByb3RhdGlvbik7CiBpbnQgYmR3X2dldF9waXBlbWlzY19icHAoc3RydWN0 IGludGVsX2NydGMgKmNydGMpOwogdW5zaWduZWQgaW50IGludGVsX3BsYW5lX2ZlbmNlX3lfb2Zm c2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwppbmRleCBiN2UyMDg4MTYw NzQuLmNmMzU4OWZkMGRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9zcHJpdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X3Nwcml0ZS5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCiAjaW5j bHVkZSAiaW50ZWxfZHNpLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCisjaW5jbHVkZSAi aTl4eF9wbGFuZS5oIgogCiBpbnQgaW50ZWxfdXNlY3NfdG9fc2NhbmxpbmVzKGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAogCQkJICAgICBpbnQgdXNlY3MpCi0t IAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=