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=-13.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 169A4C433DF for ; Thu, 30 Jul 2020 20:45:02 +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 E722320838 for ; Thu, 30 Jul 2020 20:45:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E722320838 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D28766E956; Thu, 30 Jul 2020 20:44:57 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8DB836E09E; Thu, 30 Jul 2020 20:44:53 +0000 (UTC) IronPort-SDR: mEZ7moIS+YIUpCIVQblpwB+fg7CqXkRAHYgwkd7L3P+lL8TVX/Yzmy+UqUtaDWi28j18dH7XJm wdPE1Ac3t6Cw== X-IronPort-AV: E=McAfee;i="6000,8403,9698"; a="236555516" X-IronPort-AV: E=Sophos;i="5.75,415,1589266800"; d="scan'208";a="236555516" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jul 2020 13:44:53 -0700 IronPort-SDR: DkyEfgaPJ6I2742M6M+Rkt+LShTd5oLZi0X2ahqVsdUrxQoMWRM9K7R8j7L7ebiXZb8RjW2zVR tIGgq+8Py/bw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,415,1589266800"; d="scan'208";a="274325531" Received: from unknown (HELO achrisan-DESK2.amr.corp.intel.com) ([10.251.137.81]) by fmsmga008.fm.intel.com with ESMTP; 30 Jul 2020 13:44:52 -0700 From: Anitha Chrisanthus To: dri-devel@lists.freedesktop.org, anitha.chrisanthus@intel.com Subject: [PATCH v4] drm/kmb: Add support for KeemBay Display Date: Thu, 30 Jul 2020 13:44:44 -0700 Message-Id: <1596141884-29868-2-git-send-email-anitha.chrisanthus@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1596141884-29868-1-git-send-email-anitha.chrisanthus@intel.com> References: <1596141884-29868-1-git-send-email-anitha.chrisanthus@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: daniel.vetter@intel.com, intel-gfx@lists.freedesktop.org, edmund.j.dea@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhpcyBpcyBhIGJhc2ljIEtNUyBhdG9taWMgbW9kZXNldHRpbmcgZGlzcGxheSBkcml2ZXIgZm9y IEtlZW1CYXkgZmFtaWx5IG9mClNPQ3MuIERyaXZlciBoYXMgbm8gMkQgb3IgM0QgZ3JhcGhpY3Mu SXQgY2FsbHMgaW50byB0aGUgQURWIGJyaWRnZQpkcml2ZXIgYXQgdGhlIGNvbm5lY3RvciBsZXZl bC4KClNpbmdsZSBDUlRDIHdpdGggTENEIGNvbnRyb2xsZXItPm1pcGkgRFNJLT4gQURWIGJyaWRn ZQoKT25seSAxMDgwcCByZXNvbHV0aW9uIGFuZCBzaW5nbGUgcGxhbmUgaXMgc3VwcG9ydGVkIGF0 IHRoaXMgdGltZS4KCnYyOiBtb3ZlZCBleHRlcm4gdG8gLmgsIHJlbW92ZWQgbGljZW5zZSB0ZXh0 CiAgICB1c2UgZHJtX2Rldl9pbml0LCB1cGNsYXNzZWQgZGV2X3ByaXZhdGUsIHJlbW92ZWQgSEFW RV9JUlEuCgp2MzogU3F1YXNoZWQgYWxsIDU5IGNvbW1pdHMgdG8gb25lCgp2NDogcmV2aWV3IGNo YW5nZXMgZnJvbSBTYW0gUmF2bmJvcmcKCXJlbmFtZWQgZGV2X3AgdG8ga21iCgltb3ZlZCBjbG9j a3MgdW5kZXIga21iX2Nsb2NrLCBjb25zb2xpZGF0ZWQgY2xrIGluaXRpYWxpemF0aW9ucwoJdXNl IGRybW0gZnVuY3Rpb25zCgl1c2UgRFJNX0dFTV9DTUFfRFJJVkVSX09QU19WTUFQCgpDYzogU2Ft IFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3JnPgpTaWduZWQtb2ZmLWJ5OiBBbml0aGEgQ2hyaXNh bnRodXMgPGFuaXRoYS5jaHJpc2FudGh1c0BpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBCb2IgUGFh dXdlIDxib2Iuai5wYWF1d2VAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9LY29uZmln ICAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgfCAgICAx ICsKIGRyaXZlcnMvZ3B1L2RybS9rbWIvS2NvbmZpZyAgICAgfCAgIDEzICsKIGRyaXZlcnMvZ3B1 L2RybS9rbWIvTWFrZWZpbGUgICAgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Ny dGMuYyAgfCAgMjE3ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmggIHwgICAz NiArCiBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuYyAgIHwgIDcyOCArKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuaCAgIHwgIDE3MiArKysrCiBkcml2ZXJz L2dwdS9kcm0va21iL2ttYl9kc2kuYyAgIHwgMTgzNCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5oICAgfCAgMzcwICsr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9wbGFuZS5jIHwgIDUxOCArKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuaCB8ICAxMjQgKysrCiBkcml2ZXJzL2dw dS9kcm0va21iL2ttYl9yZWdzLmggIHwgIDczOCArKysrKysrKysrKysrKysrCiAxMyBmaWxlcyBj aGFuZ2VkLCA0NzU1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0va21iL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21i L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfY3J0 Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfY3J0Yy5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0va21iL2ttYl9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2ttYi9rbWJfcGxhbmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIv a21iX3JlZ3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKaW5kZXggMTQ3ZDYxYi4uOTdhMTYzMWIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0y NzUsNiArMjc1LDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnIgog CiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVy cy9ncHUvZHJtL2ttYi9LY29uZmlnIgorCiBjb25maWcgRFJNX1ZHRU0KIAl0cmlzdGF0ZSAiVmly dHVhbCBHRU0gcHJvdmlkZXIiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAyZjMxNTc5 Li4yMTQ2ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC03MSw2ICs3MSw3IEBAIG9iai0kKENPTkZJR19EUk1f QU1ER1BVKSs9IGFtZC9hbWRncHUvCiBvYmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwogb2Jq LSQoQ09ORklHX0RSTV9JODEwKQkrPSBpODEwLwogb2JqLSQoQ09ORklHX0RSTV9JOTE1KQkrPSBp OTE1Lworb2JqLSQoQ09ORklHX0RSTV9LTUJfRElTUExBWSkgICs9IGttYi8KIG9iai0kKENPTkZJ R19EUk1fTUdBRzIwMCkgKz0gbWdhZzIwMC8KIG9iai0kKENPTkZJR19EUk1fVjNEKSAgKz0gdjNk Lwogb2JqLSQoQ09ORklHX0RSTV9WQzQpICArPSB2YzQvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0va21iL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0va21iL0tjb25maWcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4Yjc0YwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9rbWIvS2NvbmZpZwpAQCAtMCwwICsxLDEzIEBACitjb25maWcgRFJNX0tN Ql9ESVNQTEFZCisJdHJpc3RhdGUgIklOVEVMIEtFRU1CQVkgRElTUExBWSIKKwlkZXBlbmRzIG9u IERSTSAmJiBPRiAmJiAoQVJNIHx8IEFSTTY0KQorCWRlcGVuZHMgb24gQ09NTU9OX0NMSworCXNl bGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKKwlzZWxlY3Qg RFJNX0dFTV9DTUFfSEVMUEVSCisJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCisJaGVscAorCUNo b29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBJbnRlbCdzIEtlZW1CYXkgU09DIHdoaWNoIGlu dGVncmF0ZXMKKwlhbiBBUk0gQ29ydGV4IEE1MyBDUFUgd2l0aCBhbiBJbnRlbCBNb3ZpZGl1cyBW UFUuCisKKwlJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga21iLWRy bS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9rbWIvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0va21iL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUy N2Q3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0va21iL01ha2VmaWxlCkBA IC0wLDAgKzEsMiBAQAora21iLWRybS15IDo9IGttYl9jcnRjLm8ga21iX2Rydi5vIGttYl9wbGFu ZS5vIGttYl9kc2kubworb2JqLSQoQ09ORklHX0RSTV9LTUJfRElTUExBWSkJKz0ga21iLWRybS5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9jcnRjLmMgYi9kcml2ZXJzL2dw dS9kcm0va21iL2ttYl9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjA1NTExYTgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfY3J0 Yy5jCkBAIC0wLDAgKzEsMjE3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTgtMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5o PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc2ltcGxlZmIuaD4KKworI2luY2x1ZGUg PHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9j bWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1 ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJrbWJfY3J0Yy5oIgorI2lu Y2x1ZGUgImttYl9kcnYuaCIKKyNpbmNsdWRlICJrbWJfcGxhbmUuaCIKKyNpbmNsdWRlICJrbWJf cmVncy5oIgorI2luY2x1ZGUgImttYl9kc2kuaCIKKworc3RhdGljIHZvaWQga21iX2NydGNfY2xl YW51cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsK K30KKworc3RhdGljIGludCBrbWJfY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBr bWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkZXYpOworCisJLyogQ2xlYXIgaW50ZXJydXB0 ICovCisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsIExDRF9JTlRfVkVSVF9DT01Q KTsKKwkvKiBTZXQgd2hpY2ggaW50ZXJ2YWwgdG8gZ2VuZXJhdGUgdmVydGljYWwgaW50ZXJydXB0 ICovCisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WU1RBVFVTX0NPTVBBUkUsCisJCSAgICAgIExD RF9WU1RBVFVTX0NPTVBBUkVfVlNZTkMpOworCS8qIEVuYWJsZSB2ZXJ0aWNhbCBpbnRlcnJ1cHQg Ki8KKwlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJCQkgICAgTENE X0lOVF9WRVJUX0NPTVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrbWJfY3J0Y19k aXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19r bWIoZGV2KTsKKworCS8qIENsZWFyIGludGVycnVwdCAqLworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfSU5UX0NMRUFSLCBMQ0RfSU5UX1ZFUlRfQ09NUCk7CisJLyogRGlzYWJsZSB2ZXJ0aWNhbCBp bnRlcnJ1cHQgKi8KKwlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJ CQlMQ0RfSU5UX1ZFUlRfQ09NUCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNf ZnVuY3Mga21iX2NydGNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBrbWJfY3J0Y19jbGVhbnVwLAor CS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlw ID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVs cGVyX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCisJLmVuYWJsZV92YmxhbmsgPSBrbWJf Y3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGttYl9jcnRjX2Rpc2FibGVf dmJsYW5rLAorfTsKKworc3RhdGljIHZvaWQga21iX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsK KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSA9ICZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9k ZTsKKwlzdHJ1Y3Qga21iX2NydGNfdGltaW5nIHZtOworCWludCB2c3luY19zdGFydF9vZmZzZXQ7 CisJaW50IHZzeW5jX2VuZF9vZmZzZXQ7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0g dG9fa21iKGRldik7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwkvKiBJbml0aWFsaXplIG1p cGkgKi8KKwlrbWJfZHNpX2h3X2luaXQoZGV2LCBtKTsKKwlkcm1faW5mbyhkZXYsCisJCSJ2ZnA9 ICVkIHZicD0gJWQgdnN5Y19sZW49JWQgaGZwPSVkIGhicD0lZCBoc3luY19sZW49JWRcbiIsCisJ CSBtLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbS0+Y3J0Y192ZGlzcGxheSwKKwkJIG0tPmNydGNfdnRv dGFsIC0gbS0+Y3J0Y192c3luY19lbmQsCisJCSBtLT5jcnRjX3ZzeW5jX2VuZCAtIG0tPmNydGNf dnN5bmNfc3RhcnQsCisJCSBtLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbS0+Y3J0Y19oZGlzcGxheSwK KwkJIG0tPmNydGNfaHRvdGFsIC0gbS0+Y3J0Y19oc3luY19lbmQsCisJCSBtLT5jcnRjX2hzeW5j X2VuZCAtIG0tPmNydGNfaHN5bmNfc3RhcnQpOworCXZhbCA9IGttYl9yZWFkX2xjZChrbWIsIExD RF9JTlRfRU5BQkxFKTsKKwlrbWJfY2xyX2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUs IHZhbCk7CisJa21iX3NldF9iaXRtYXNrX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsIH4weDApOwor CXZtLnZmcm9udF9wb3JjaCA9IDI7CisJdm0udmJhY2tfcG9yY2ggPSAyOworCXZtLnZzeW5jX2xl biA9IDg7CisJdm0uaGZyb250X3BvcmNoID0gMDsKKwl2bS5oYmFja19wb3JjaCA9IDA7CisJdm0u aHN5bmNfbGVuID0gMjg7CisKKwl2c3luY19zdGFydF9vZmZzZXQgPSAgbS0+Y3J0Y192c3luY19z dGFydCAtICBtLT5jcnRjX2hzeW5jX3N0YXJ0OworCXZzeW5jX2VuZF9vZmZzZXQgPSAgbS0+Y3J0 Y192c3luY19lbmQgLSBtLT5jcnRjX2hzeW5jX2VuZDsKKworCWRybV9kYmcoZGV2LCAiJXMgOiAl ZGFjdGl2ZSBoZWlnaHQ9ICVkIHZicD0lZCB2ZnA9JWQgdnN5bmMtdz0lZCBoLWFjdGl2ZT0lZCBo LWJwPSVkIGgtZnA9JWQgaHlzbmMtbD0lZCIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sCisJCQlt LT5jcnRjX3ZkaXNwbGF5LCB2bS52YmFja19wb3JjaCwgdm0udmZyb250X3BvcmNoLAorCQkJdm0u dnN5bmNfbGVuLCBtLT5jcnRjX2hkaXNwbGF5LCB2bS5oYmFja19wb3JjaCwKKwkJCXZtLmhmcm9u dF9wb3JjaCwgdm0uaHN5bmNfbGVuKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX1ZfQUNUSVZF SEVJR0hULAorCQkJbS0+Y3J0Y192ZGlzcGxheSAtIDEpOworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfVl9CQUNLUE9SQ0gsIHZtLnZiYWNrX3BvcmNoKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENE X1ZfRlJPTlRQT1JDSCwgdm0udmZyb250X3BvcmNoKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENE X1ZTWU5DX1dJRFRILCB2bS52c3luY19sZW4gLSAxKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENE X0hfQUNUSVZFV0lEVEgsCisJCQltLT5jcnRjX2hkaXNwbGF5IC0gMSk7CisJa21iX3dyaXRlX2xj ZChrbWIsIExDRF9IX0JBQ0tQT1JDSCwgdm0uaGJhY2tfcG9yY2gpOworCWttYl93cml0ZV9sY2Qo a21iLCBMQ0RfSF9GUk9OVFBPUkNILCB2bS5oZnJvbnRfcG9yY2gpOworCWttYl93cml0ZV9sY2Qo a21iLCBMQ0RfSFNZTkNfV0lEVEgsIHZtLmhzeW5jX2xlbiAtIDEpOworCS8qIFRoaXMgaXMgaGFy ZGNvZGVkIGFzIDAgaW4gdGhlIE15cmlhZHggY29kZSAqLworCWttYl93cml0ZV9sY2Qoa21iLCBM Q0RfVlNZTkNfU1RBUlQsIDApOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfVlNZTkNfRU5ELCAw KTsKKwkvKiBCYWNrIGdyb3VuZCBjb2xvciAqLworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfQkdf Q09MT1VSX0xTLCAweDQpOworCWlmIChtLT5mbGFncyA9PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFD RSkgeworCQlrbWJfd3JpdGVfbGNkKGttYiwKKwkJCSAgICAgIExDRF9WU1lOQ19XSURUSF9FVkVO LCB2bS52c3luY19sZW4gLSAxKTsKKwkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJTENEX1ZfQkFD S1BPUkNIX0VWRU4sIHZtLnZiYWNrX3BvcmNoKTsKKwkJa21iX3dyaXRlX2xjZChrbWIsCisJCQkJ TENEX1ZfRlJPTlRQT1JDSF9FVkVOLCB2bS52ZnJvbnRfcG9yY2gpOworCQlrbWJfd3JpdGVfbGNk KGttYiwgTENEX1ZfQUNUSVZFSEVJR0hUX0VWRU4sCisJCQkgICAgICBtLT5jcnRjX3ZkaXNwbGF5 IC0gMSk7CisJCS8qIFRoaXMgaXMgaGFyZGNvZGVkIGFzIDEwIGluIHRoZSBNeXJpYWR4IGNvZGUg Ki8KKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9WU1lOQ19TVEFSVF9FVkVOLCAxMCk7CisJCWtt Yl93cml0ZV9sY2Qoa21iLCBMQ0RfVlNZTkNfRU5EX0VWRU4sIDEwKTsKKwl9CisJa21iX3dyaXRl X2xjZChrbWIsIExDRF9USU1JTkdfR0VOX1RSSUcsIEVOQUJMRSk7CisJa21iX3NldF9iaXRtYXNr X2xjZChrbWIsIExDRF9DT05UUk9MLCBMQ0RfQ1RSTF9FTkFCTEUpOworCWttYl9zZXRfYml0bWFz a19sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQga21iX2Ny dGNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgc3RydWN0IGRy bV9jcnRjX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqbGNk ID0gY3J0Y190b19rbWJfcHJpdihjcnRjKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShsY2QtPmNs ayk7CisJa21iX2NydGNfbW9kZV9zZXRfbm9mYihjcnRjKTsKKwlkcm1fY3J0Y192Ymxhbmtfb24o Y3J0Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGttYl9jcnRjX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKKwkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUp Cit7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqbGNkID0gY3J0Y190b19rbWJfcHJpdihjcnRj KTsKKworCS8qIEFsd2F5cyBkaXNhYmxlIHBsYW5lcyBvbiB0aGUgQ1JUQyB0aGF0IGlzIGJlaW5n IHR1cm5lZCBvZmYgKi8KKwlkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lc19vbl9jcnRj KG9sZF9zdGF0ZSwgZmFsc2UpOworCisJZHJtX2NydGNfdmJsYW5rX29mZihjcnRjKTsKKwljbGtf ZGlzYWJsZV91bnByZXBhcmUobGNkLT5jbGspOworfQorCitzdGF0aWMgdm9pZCBrbWJfY3J0Y19h dG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGRybV9jcnRj X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owor CXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkZXYpOworCisJa21iX2Nscl9i aXRtYXNrX2xjZChrbWIsIExDRF9JTlRfRU5BQkxFLAorCQkJICAgIExDRF9JTlRfVkVSVF9DT01Q KTsKK30KKworc3RhdGljIHZvaWQga21iX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpr bWIgPSB0b19rbWIoZGV2KTsKKworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0VO QUJMRSwKKwkJCSAgICBMQ0RfSU5UX1ZFUlRfQ09NUCk7CisKKwlzcGluX2xvY2tfaXJxKCZjcnRj LT5kZXYtPmV2ZW50X2xvY2spOworCWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpCisJCWRybV9jcnRj X3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7CisJY3J0Yy0+c3Rh dGUtPmV2ZW50ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9j ayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGttYl9j cnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2JlZ2luID0ga21iX2NydGNfYXRvbWljX2Jl Z2luLAorCS5hdG9taWNfZW5hYmxlID0ga21iX2NydGNfYXRvbWljX2VuYWJsZSwKKwkuYXRvbWlj X2Rpc2FibGUgPSBrbWJfY3J0Y19hdG9taWNfZGlzYWJsZSwKKwkuYXRvbWljX2ZsdXNoID0ga21i X2NydGNfYXRvbWljX2ZsdXNoLAorfTsKKworaW50IGttYl9zZXR1cF9jcnRjKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pCit7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iID0gdG9fa21iKGRy bSk7CisJc3RydWN0IGttYl9wbGFuZSAqcHJpbWFyeTsKKwlpbnQgcmV0OworCisJcHJpbWFyeSA9 IGttYl9wbGFuZV9pbml0KGRybSk7CisJaWYgKElTX0VSUihwcmltYXJ5KSkKKwkJcmV0dXJuIFBU Ul9FUlIocHJpbWFyeSk7CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRybSwg JmttYi0+Y3J0YywgJnByaW1hcnktPmJhc2VfcGxhbmUsCisJCQkJCU5VTEwsICZrbWJfY3J0Y19m dW5jcywgTlVMTCk7CisJaWYgKHJldCkgeworCQlrbWJfcGxhbmVfZGVzdHJveSgmcHJpbWFyeS0+ YmFzZV9wbGFuZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2NydGNfaGVscGVyX2FkZCgm a21iLT5jcnRjLCAma21iX2NydGNfaGVscGVyX2Z1bmNzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9r bWIva21iX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzYzMDY2 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfY3J0Yy5oCkBAIC0w LDAgKzEsMzYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyAq CisgKiBDb3B5cmlnaHQgwqkgMjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lm bmRlZiBfX0tNQl9DUlRDX0hfXworI2RlZmluZSBfX0tNQl9DUlRDX0hfXworCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kYXRhL3NpbXBsZWZiLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2Mu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPgorI2luY2x1ZGUgPGxpbnV4L211 dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvd2FpdC5oPgorI2luY2x1ZGUgImttYl9kcnYuaCIKKworc3RydWN0IGttYl9jcnRjX3RpbWlu ZyB7CisJdTMyIHZmcm9udF9wb3JjaDsKKwl1MzIgdmJhY2tfcG9yY2g7CisJdTMyIHZzeW5jX2xl bjsKKwl1MzIgaGZyb250X3BvcmNoOworCXUzMiBoYmFja19wb3JjaDsKKwl1MzIgaHN5bmNfbGVu OworfTsKKworI2VuZGlmIC8qIF9fS01CX0NSVENfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0va21iL2ttYl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2Rydi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Yjk2ZWYKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kcnYuYwpAQCAtMCwwICsxLDcyOCBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCDC qSAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgor I2luY2x1ZGUgPGxpbnV4L29mX3Jlc2VydmVkX21lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8ZHJtL2Ry bS5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJh bWVidWZmZXJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5oPgorI2luY2x1ZGUg PGRybS9kcm1faXJxLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9k cm1fcHJvYmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJrbWJfY3J0Yy5oIgorI2luY2x1ZGUgImtt Yl9kcnYuaCIKKyNpbmNsdWRlICJrbWJfZHNpLmgiCisjaW5jbHVkZSAia21iX3BsYW5lLmgiCisj aW5jbHVkZSAia21iX3JlZ3MuaCIKKworLyogI2RlZmluZSBERUJVRyAqLworCitpbnQga21iX3Vu ZGVyX2Zsb3cgPSAwLCBrbWJfZmx1c2hfZG9uZSA9IDAsIGxheWVyX25vID0gMDsKK3N0YXRpYyBz dHJ1Y3Qga21iX2Nsb2NrIGttYl9jbGs7CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2JyaWRnZSAqYWR2 X2JyaWRnZTsKKworaW50IGttYl9kaXNwbGF5X2Nsa19lbmFibGUoc3RydWN0IGttYl9kcm1fcHJp dmF0ZSAqa21iKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGttYl9jbGsuY2xrX2xjZCk7CisJaWYgKHJldCkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgIkZh aWxlZCB0byBlbmFibGUgTENEIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoa21iX2Nsay5jbGtfbWlwaSk7CisJaWYgKHJl dCkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgIkZhaWxlZCB0byBlbmFibGUgTUlQSSBjbG9jazog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5h YmxlKGttYl9jbGsuY2xrX21pcGlfZWNmZyk7CisJaWYgKHJldCkgeworCQlkcm1fZXJyKCZrbWIt PmRybSwKKwkJCQkiRmFpbGVkIHRvIGVuYWJsZSBNSVBJX0VDRkcgY2xvY2s6ICVkXG4iLCByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShrbWJfY2xr LmNsa19taXBpX2NmZyk7CisJaWYgKHJldCkgeworCQlkcm1fZXJyKCZrbWItPmRybSwKKwkJCQki RmFpbGVkIHRvIGVuYWJsZSBNSVBJX0NGRyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCURSTV9JTkZPKCJTVUNDRVNTIDogZW5hYmxlZCBMQ0QgTUlQSSBjbG9ja3NcbiIp OworCXJldHVybiAwOworfQorCisKK2ludCBrbWJfaW5pdGlhbGl6ZV9jbG9ja3Moc3RydWN0IGtt Yl9kcm1fcHJpdmF0ZSAqa21iLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmlj ZV9ub2RlICp2cHVfZGV2OworCXVuc2lnbmVkIGxvbmcgY2xrOworCWludCByZXQgPSAwOworCisJ a21iX2Nsay5jbGtfbGNkID0gY2xrX2dldChkZXYsICJjbGtfbGNkIik7CisJaWYgKElTX0VSUihr bWJfY2xrLmNsa19sY2QpKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxl ZCBjbGtfbGNkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoa21iX2Nsay5jbGtfbGNkKTsKKwl9CisK KwlrbWJfY2xrLmNsa19taXBpID0gY2xrX2dldChkZXYsICJjbGtfbWlwaSIpOworCWlmIChJU19F UlIoa21iX2Nsay5jbGtfbWlwaSkpIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJjbGtfZ2V0KCkg ZmFpbGVkIGNsa19taXBpXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoa21iX2Nsay5jbGtfbWlwaSk7 CisJfQorCisJa21iX2Nsay5jbGtfbWlwaV9lY2ZnID0gY2xrX2dldChkZXYsICJjbGtfbWlwaV9l Y2ZnIik7CisJaWYgKElTX0VSUihrbWJfY2xrLmNsa19taXBpX2VjZmcpKSB7CisJCWRybV9lcnIo JmttYi0+ZHJtLCAiY2xrX2dldCgpIGZhaWxlZCBjbGtfbWlwaV9lY2ZnXG4iKTsKKwkJcmV0dXJu IFBUUl9FUlIoa21iX2Nsay5jbGtfbWlwaV9lY2ZnKTsKKwl9CisKKwlrbWJfY2xrLmNsa19taXBp X2NmZyA9IGNsa19nZXQoZGV2LCAiY2xrX21pcGlfY2ZnIik7CisJaWYgKElTX0VSUihrbWJfY2xr LmNsa19taXBpX2NmZykpIHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJjbGtfZ2V0KCkgZmFpbGVk IGNsa19taXBpX2NmZ1xuIik7CisJCXJldHVybiBQVFJfRVJSKGttYl9jbGsuY2xrX21pcGlfY2Zn KTsKKwl9CisJdnB1X2RldiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvc29jL3ZwdS1pcGMiKTsK KwlrbWJfY2xrLmNsa19wbGwwID0gb2ZfY2xrX2dldF9ieV9uYW1lKHZwdV9kZXYsICJwbGxfMF9v dXRfMCIpOworCWlmIChJU19FUlIoa21iX2Nsay5jbGtfcGxsMCkpIHsKKwkJZHJtX2Vycigma21i LT5kcm0sICJjbGtfZ2V0KCkgZmFpbGVkIGNsa19wbGwwICIpOworCQlyZXR1cm4gUFRSX0VSUihr bWJfY2xrLmNsa19wbGwwKTsKKwl9CisJa21iLT5zeXNfY2xrX21oeiA9IGNsa19nZXRfcmF0ZShr bWJfY2xrLmNsa19wbGwwKS8xMDAwMDAwOworCWRybV9pbmZvKCZrbWItPmRybSwgInN5c3RlbSBj bGsgPSAlZCBNaHoiLCBrbWItPnN5c19jbGtfbWh6KTsKKworCS8qIFNldCBMQ0QgY2xvY2sgdG8g MjAwIE1oeiAqLworCWNsa19zZXRfcmF0ZShrbWJfY2xrLmNsa19sY2QsIEtNQl9MQ0RfREVGQVVM VF9DTEspOworCWlmIChjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbGNkKSAhPSBLTUJfTENEX0RF RkFVTFRfQ0xLKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiZmFpbGVkIHRvIHNldCB0byBjbGtf bGNkIHRvICVkXG4iLAorCQkJICBLTUJfTENEX0RFRkFVTFRfQ0xLKTsKKwkJcmV0dXJuIC0xOwor CX0KKwlkcm1faW5mbygma21iLT5kcm0sICJjbGtfbGNkID0gJWxkXG4iLCBjbGtfZ2V0X3JhdGUo a21iX2Nsay5jbGtfbGNkKSk7CisKKwkvKiBTZXQgTUlQSSBjbG9jayB0byAyNCBNaHogKi8KKwlj bGtfc2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaSwgS01CX01JUElfREVGQVVMVF9DTEspOworCWlm IChjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaSkgIT0gS01CX01JUElfREVGQVVMVF9DTEsp IHsKKwkJZHJtX2Vycigma21iLT5kcm0sICJmYWlsZWQgdG8gc2V0IHRvIGNsa19taXBpIHRvICVk XG4iLAorCQkJICBLTUJfTUlQSV9ERUZBVUxUX0NMSyk7CisJCXJldHVybiAtMTsKKwl9CisJZHJt X2luZm8oJmttYi0+ZHJtLCAiY2xrX21pcGkgPSAlbGRcbiIsIGNsa19nZXRfcmF0ZShrbWJfY2xr LmNsa19taXBpKSk7CisKKwljbGsgPSBjbGtfZ2V0X3JhdGUoa21iX2Nsay5jbGtfbWlwaV9lY2Zn KTsKKwlpZiAoY2xrICE9IEtNQl9NSVBJX0RFRkFVTFRfQ0ZHX0NMSykgeworCQkvKiBTZXQgTUlQ SV9FQ0ZHIGNsb2NrIHRvIDI0IE1oeiAqLworCQljbGtfc2V0X3JhdGUoa21iX2Nsay5jbGtfbWlw aV9lY2ZnLCBLTUJfTUlQSV9ERUZBVUxUX0NGR19DTEspOworCQljbGsgPSBjbGtfZ2V0X3JhdGUo a21iX2Nsay5jbGtfbWlwaV9lY2ZnKTsKKwkJaWYgKGNsayAhPSBLTUJfTUlQSV9ERUZBVUxUX0NG R19DTEspIHsKKwkJCWRybV9lcnIoJmttYi0+ZHJtLAorCQkJCSJmYWlsZWQgdG8gc2V0IHRvIGNs a19taXBpX2VjZmcgdG8gJWRcbiIsCisJCQkJIEtNQl9NSVBJX0RFRkFVTFRfQ0ZHX0NMSyk7CisJ CQlyZXR1cm4gLTE7CisJCX0KKworCQlkcm1faW5mbygma21iLT5kcm0sICJjbGtfbWlwaV9lY2Zn IGFmdGVyIHNldCA9ICVsZFxuIiwgY2xrKTsKKwl9CisKKwljbGsgPSBjbGtfZ2V0X3JhdGUoa21i X2Nsay5jbGtfbWlwaV9jZmcpOworCWlmIChjbGsgIT0gS01CX01JUElfREVGQVVMVF9DRkdfQ0xL KSB7CisJCS8qIFNldCBNSVBJX0NGRyBjbG9jayB0byAyNCBNaHogKi8KKwkJY2xrX3NldF9yYXRl KGttYl9jbGsuY2xrX21pcGlfY2ZnLCAyNDAwMDAwMCk7CisJCWNsayA9IGNsa19nZXRfcmF0ZShr bWJfY2xrLmNsa19taXBpX2NmZyk7CisJCWlmIChjbGsgIT0gS01CX01JUElfREVGQVVMVF9DRkdf Q0xLKSB7CisJCQlkcm1fZXJyKCZrbWItPmRybSwKKwkJCQkJImZhaWxlZCB0byBzZXQgY2xrX21p cGlfY2ZnIHRvICVkXG4iLAorCQkJCSAgS01CX01JUElfREVGQVVMVF9DRkdfQ0xLKTsKKwkJCXJl dHVybiAtMTsKKwkJfQorCQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJIkdldCBjbGtfbWlwaV9j ZmcgYWZ0ZXIgc2V0ID0gJWxkXG4iLCBjbGspOworCX0KKworCXJldCA9IGttYl9kaXNwbGF5X2Ns a19lbmFibGUoa21iKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRW5hYmxlIE1T U19DQU1fQ0xLX0NUUkwgZm9yIE1JUEkgVFggYW5kIExDRCAqLworCWttYl9zZXRfYml0bWFza19t c3NjYW0oa21iLCBNU1NfQ0FNX0NMS19DVFJMLCAweDFmZmYpOworCWttYl9zZXRfYml0bWFza19t c3NjYW0oa21iLCBNU1NfQ0FNX1JTVE5fQ1RSTCwgMHhmZmZmZmZmZik7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQga21iX2Rpc3BsYXlfY2xrX2Rpc2FibGUodm9pZCkKK3sKKwlpZiAoa21i X2Nsay5jbGtfbGNkKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoa21iX2Nsay5jbGtfbGNkKTsK KwlpZiAoa21iX2Nsay5jbGtfbWlwaSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGttYl9jbGsu Y2xrX21pcGkpOworCWlmIChrbWJfY2xrLmNsa19taXBpX2VjZmcpCisJCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShrbWJfY2xrLmNsa19taXBpX2VjZmcpOworCWlmIChrbWJfY2xrLmNsa19taXBpX2Nm ZykKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGttYl9jbGsuY2xrX21pcGlfY2ZnKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pb21lbSAqa21iX21hcF9tbWlvKHN0cnVjdCBkZXZp Y2UgKmRldiwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJdm9pZCBf X2lvbWVtICptZW07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKKwlpZiAoIXJlcykgeworCQlEUk1fRVJST1IoImZhaWxl ZCB0byBnZXQgcmVzb3VyY2UgZm9yICVzXG4iLCBuYW1lKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisJfQorCW1lbSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYg KElTX0VSUihtZW0pKQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBpb3JlbWFwICVzIHJlZ2lzdGVy c1xuIiwgbmFtZSk7CisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIGludCBrbWJfbG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBrbWJf ZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkcm0pOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZHJtLT5kZXYpOworCWludCBpcnFfbGNkOworCWlu dCByZXQgPSAwOworCisKKwkvKiBNYXAgTENEIE1NSU8gcmVnaXN0ZXJzICovCisJa21iLT5sY2Rf bW1pbyA9IGttYl9tYXBfbW1pbyhkcm0tPmRldiwgImxjZF9yZWdzIik7CisJaWYgKElTX0VSUihr bWItPmxjZF9tbWlvKSkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBtYXAgTENE IHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIE1hcCBNSVBJIE1N SU8gcmVnaXN0ZXJzICovCisJa21iLT5taXBpX21taW8gPSBrbWJfbWFwX21taW8oZHJtLT5kZXYs ICJtaXBpX3JlZ3MiKTsKKwlpZiAoSVNfRVJSKGttYi0+bWlwaV9tbWlvKSkgeworCQlkcm1fZXJy KCZrbWItPmRybSwgImZhaWxlZCB0byBtYXAgTUlQSSByZWdpc3RlcnNcbiIpOworCQlpb3VubWFw KGttYi0+bGNkX21taW8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBUaGlzIGlzIG9u bHkgZm9yIE1JUElfVFhfTVNTX0xDRF9NSVBJX0NGRyBhbmQKKwkgKiBNU1NfQ0FNX0NMS19DVFJM IHJlZ2lzdGVyCisJICovCisJa21iLT5tc3NjYW1fbW1pbyA9IGttYl9tYXBfbW1pbyhkcm0tPmRl diwgIm1zc2NhbV9yZWdzIik7CisJaWYgKElTX0VSUihrbWItPm1zc2NhbV9tbWlvKSkgeworCQlk cm1fZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBtYXAgTVNTQ0FNIHJlZ2lzdGVyc1xuIik7CisJ CWlvdW5tYXAoa21iLT5sY2RfbW1pbyk7CisJCWlvdW5tYXAoa21iLT5taXBpX21taW8pOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoSVNfRVJSKGttYi0+bXNzY2FtX21taW8pKSB7CisJ CWRybV9lcnIoJmttYi0+ZHJtLCAiZmFpbGVkIHRvIG1hcCBNU1NDQU0gcmVnaXN0ZXJzXG4iKTsK KwkJaW91bm1hcChrbWItPmxjZF9tbWlvKTsKKwkJaW91bm1hcChrbWItPm1pcGlfbW1pbyk7CisJ CXJldHVybiAtRU5PTUVNOworCX0KKwkvKiBFbmFibGUgZGlzcGxheSBjbG9ja3MgKi8KKwlrbWJf aW5pdGlhbGl6ZV9jbG9ja3Moa21iLCAmcGRldi0+ZGV2KTsKKworCS8qIFJlZ2lzdGVyIGlycXMg aGVyZSAtIHNlY3Rpb24gMTcuMyBpbiBkYXRhYm9vaworCSAqIGxpc3RzIExDRCBhdCA3OSBhbmQg ODIgZm9yIE1JUEkgdW5kZXIgTVNTIENQVSAtCisJICogZmlybXdhcmUgaGFzIHJlZGlyZWN0ZWQg NzkgdG8gQTUzIElSUSAzMworCSAqLworCisJLyogQWxsb2NhdGUgTENEIGludGVycnVwdCByZXNv dXJjZXMsIGVuYWJsZSBpbnRlcnJ1cHQgbGluZSwKKwkgKiBhbmQgc2V0dXAgSVJRIGhhbmRsaW5n CisJICovCisJaXJxX2xjZCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJpcnFfbGNk Iik7CisJaWYgKGlycV9sY2QgPCAwKSB7CisJCWRybV9lcnIoJmttYi0+ZHJtLCAiaXJxX2xjZCBu b3QgZm91bmQiKTsKKwkJZ290byBzZXR1cF9mYWlsOworCX0KKworCS8qIEdldCB0aGUgb3B0aW9u YWwgZnJhbWVidWZmZXIgbWVtb3J5IHJlc291cmNlICovCisJcmV0ID0gb2ZfcmVzZXJ2ZWRfbWVt X2RldmljZV9pbml0KGRybS0+ZGV2KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQorCQly ZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2luaXQoJmttYi0+aXJxX2xvY2spOworCisJcmV0ID0g a21iX3NldHVwX2NydGMoZHJtKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcm1fZXJyKCZrbWItPmRy bSwgImZhaWxlZCB0byBjcmVhdGUgY3J0Y1xuIik7CisJCWdvdG8gc2V0dXBfZmFpbDsKKwl9CisK KwkvKiBJbml0aWFsaXplIE1JUEkgRFNJICovCisJcmV0ID0ga21iX2RzaV9pbml0KGRybSwgYWR2 X2JyaWRnZSk7CisJaWYgKHJldCkgeworCQlkcm1fZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBp bml0aWFsaXplIERTSVxuIik7CisJCWdvdG8gc2V0dXBfZmFpbDsKKwl9CisKKwlyZXQgPSBkcm1f aXJxX2luc3RhbGwoZHJtLCBpcnFfbGNkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcm1fZXJyKCZr bWItPmRybSwgImZhaWxlZCB0byBpbnN0YWxsIElSUSBoYW5kbGVyXG4iKTsKKwkJZ290byBpcnFf ZmFpbDsKKwl9CisKKwlrbWItPmlycV9sY2QgPSBpcnFfbGNkOworCisJcmV0dXJuIDA7CisKKyBp cnFfZmFpbDoKKwlkcm1fY3J0Y19jbGVhbnVwKCZrbWItPmNydGMpOworIHNldHVwX2ZhaWw6CisJ b2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRybS0+ZGV2KTsKKworCXJldHVybiByZXQ7 Cit9CisKK2ludCBrbWJfYXRvbWljX2hlbHBlcl9jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoIXN0YXRl KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl9jaGVjayhkZXYsIHN0 YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3Mga21i X21vZGVfY29uZmlnX2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBkcm1fZ2VtX2ZiX2NyZWF0ZSwK KwkuYXRvbWljX2NoZWNrID0ga21iX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21t aXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCit9OworCitzdGF0aWMgaW50IGttYl9zZXR1 cF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWludCByZXQ7CisKKwly ZXQgPSBkcm1tX21vZGVfY29uZmlnX2luaXQoZHJtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gS01CX01JTl9XSURUSDsKKwlkcm0tPm1v ZGVfY29uZmlnLm1pbl9oZWlnaHQgPSBLTUJfTUlOX0hFSUdIVDsKKwlkcm0tPm1vZGVfY29uZmln Lm1heF93aWR0aCA9IEtNQl9NQVhfV0lEVEg7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0 ID0gS01CX01BWF9IRUlHSFQ7CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZrbWJfbW9kZV9j b25maWdfZnVuY3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVf bGNkX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgc3RhdHVz LCB2YWwsIHZhbDE7CisJaW50IHBsYW5lX2lkLCBkbWEwX3N0YXRlLCBkbWExX3N0YXRlOworCXN0 cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRvX2ttYihkZXYpOworCisJc3RhdHVzID0ga21i X3JlYWRfbGNkKGttYiwgTENEX0lOVF9TVEFUVVMpOworCisJaWYgKHN0YXR1cyAmIExDRF9JTlRf RU9GKSB7CisKKwkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9JTlRfQ0xFQVIsIExDRF9JTlRfRU9G KTsKKworCQkvKiBXaGVuIGRpc2FibGluZy9lbmFibGluZyBMQ0QgbGF5ZXJzLCB0aGUgY2hhbmdl IHRha2VzIGVmZmVjdAorCQkgKiBpbW1lZGlhdGVseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgRU9G IChlbmQgb2YgZnJhbWUpLgorCQkgKiBXaGVuIGttYl9wbGFuZV9hdG9taWNfZGlzYWJsZSBpcyBj YWxsZWQsIG1hcmsgdGhlIHBsYW5lIGFzCisJCSAqIGRpc2FibGVkIGJ1dCBhY3R1YWxseSBkaXNh YmxlIHRoZSBwbGFuZSB3aGVuIEVPRiBpcnEgaXMKKwkJICogYmVpbmcgaGFuZGxlZC4KKwkJICov CisJCWZvciAocGxhbmVfaWQgPSBMQVlFUl8wOworCQkJCXBsYW5lX2lkIDwga21iLT5uX2xheWVy czsgcGxhbmVfaWQrKykgeworCQkJaWYgKHBsYW5lX3N0YXR1c1twbGFuZV9pZF0uZGlzYWJsZSkg eworCQkJCWttYl9jbHJfYml0bWFza19sY2Qoa21iLAorCQkJCQkJICAgIExDRF9MQVlFUm5fRE1B X0NGRworCQkJCQkJICAgIChwbGFuZV9pZCksCisJCQkJCQkgICAgTENEX0RNQV9MQVlFUl9FTkFC TEUpOworCisJCQkJa21iX2Nscl9iaXRtYXNrX2xjZChrbWIsIExDRF9DT05UUk9MLAorCQkJCQkg ICAgcGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5jdHJsKTsKKworCQkJCXBsYW5lX3N0YXR1c1twbGFu ZV9pZF0uZGlzYWJsZSA9IGZhbHNlOworCQkJfQorCQl9CisJCWlmIChrbWJfdW5kZXJfZmxvdykg eworCQkJLyogRE1BIFJlY292ZXJ5IGFmdGVyIHVuZGVyZmxvdyAqLworCQkJZG1hMF9zdGF0ZSA9 IChsYXllcl9ubyA9PSAwKSA/CisJCQkgICAgTENEX1ZJREVPMF9ETUEwX1NUQVRFIDogTENEX1ZJ REVPMV9ETUEwX1NUQVRFOworCQkJZG1hMV9zdGF0ZSA9IChsYXllcl9ubyA9PSAwKSA/CisJCQkg ICAgTENEX1ZJREVPMF9ETUExX1NUQVRFIDogTENEX1ZJREVPMV9ETUExX1NUQVRFOworCisJCQlk byB7CisJCQkJa21iX3dyaXRlX2xjZChrbWIsIExDRF9GSUZPX0ZMVVNILCAxKTsKKwkJCQl2YWwg PSBrbWJfcmVhZF9sY2Qoa21iLCBkbWEwX3N0YXRlKQorCQkJCSAgICAmIExDRF9ETUFfU1RBVEVf QUNUSVZFOworCQkJCXZhbDEgPSBrbWJfcmVhZF9sY2Qoa21iLCBkbWExX3N0YXRlKQorCQkJCSAg ICAmIExDRF9ETUFfU1RBVEVfQUNUSVZFOworCQkJfSB3aGlsZSAoKHZhbCB8fCB2YWwxKSk7CisJ CQkvKiBkaXNhYmxlIGRtYSAqLworCQkJa21iX2Nscl9iaXRtYXNrX2xjZChrbWIsIExDRF9MQVlF Um5fRE1BX0NGRyhsYXllcl9ubyksCisJCQkJCSAgICBMQ0RfRE1BX0xBWUVSX0VOQUJMRSk7CisJ CQlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0ZJRk9fRkxVU0gsIDEpOworCQkJa21iX2ZsdXNoX2Rv bmUgPSAxOworCQkJa21iX3VuZGVyX2Zsb3cgPSAwOworCQl9CisKKwl9CisKKwlpZiAoc3RhdHVz ICYgTENEX0lOVF9MSU5FX0NNUCkgeworCQkvKiBjbGVhciBsaW5lIGNvbXBhcmUgaW50ZXJydXB0 ICovCisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCBMQ0RfSU5UX0xJTkVfQ01Q KTsKKwl9CisKKwlpZiAoc3RhdHVzICYgTENEX0lOVF9WRVJUX0NPTVApIHsKKwkJLyogUmVhZCBW U1RBVFVTICovCisJCXZhbCA9IGttYl9yZWFkX2xjZChrbWIsIExDRF9WU1RBVFVTKTsKKwkJdmFs ID0gKHZhbCAmIExDRF9WU1RBVFVTX1ZFUlRJQ0FMX1NUQVRVU19NQVNLKTsKKwkJc3dpdGNoICh2 YWwpIHsKKwkJY2FzZSBMQ0RfVlNUQVRVU19DT01QQVJFX1ZTWU5DOgorCQkJLyogQ2xlYXIgdmVy dGljYWwgY29tcGFyZSBpbnRlcnJ1cHQgKi8KKwkJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5U X0NMRUFSLCBMQ0RfSU5UX1ZFUlRfQ09NUCk7CisJCQlpZiAoa21iX2ZsdXNoX2RvbmUpIHsKKwkJ CQlrbWJfc2V0X2JpdG1hc2tfbGNkKGttYiwKKwkJCQkJCSAgICBMQ0RfTEFZRVJuX0RNQV9DRkcK KwkJCQkJCSAgICAobGF5ZXJfbm8pLAorCQkJCQkJICAgIExDRF9ETUFfTEFZRVJfRU5BQkxFKTsK KwkJCQlrbWJfZmx1c2hfZG9uZSA9IDA7CisJCQl9CisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYs IDApOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1ZTVEFUVVNfQ09NUEFSRV9CQUNLUE9SQ0g6CisJ CWNhc2UgTENEX1ZTVEFUVVNfQ09NUEFSRV9BQ1RJVkU6CisJCWNhc2UgTENEX1ZTVEFUVVNfQ09N UEFSRV9GUk9OVF9QT1JDSDoKKwkJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCBM Q0RfSU5UX1ZFUlRfQ09NUCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoc3RhdHVzICYgTENE X0lOVF9ETUFfRVJSKSB7CisJCXZhbCA9CisJCSAgICAoc3RhdHVzICYgTENEX0lOVF9ETUFfRVJS ICYKKwkJICAgICBrbWJfcmVhZF9sY2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSkpOworCQkvKiBMQVlF UjAgLSBWTDAgKi8KKwkJaWYgKHZhbCAmIChMQVlFUjBfRE1BX0ZJRk9fVU5ERVJGTE9XIHwKKwkJ CSAgIExBWUVSMF9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAorCQkJICAgTEFZRVIwX0RNQV9DUl9G SUZPX1VOREVSRkxPVykpIHsKKwkJCWttYl91bmRlcl9mbG93Kys7CisJCQlkcm1faW5mbygma21i LT5kcm0sCisJCQkgICAgIiFMQVlFUjA6VkwwIERNQSBVTkRFUkZMT1cgdmFsID0gMHglbHgsdW5k ZXJfZmxvdz0lZCIsCisJCQkgICAgIHZhbCwga21iX3VuZGVyX2Zsb3cpOworCQkJLyogZGlzYWJs ZSB1bmRlcmZsb3cgaW5lcnJ1cHQgKi8KKwkJCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0Rf SU5UX0VOQUJMRSwKKwkJCQkJICAgIExBWUVSMF9ETUFfRklGT19VTkRFUkZMT1cgfAorCQkJCQkg ICAgTEFZRVIwX0RNQV9DQl9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBMQVlFUjBfRE1BX0NS X0ZJRk9fVU5ERVJGTE9XKTsKKwkJCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0NM RUFSLAorCQkJCQkgICAgTEFZRVIwX0RNQV9DQl9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAgICBM QVlFUjBfRE1BX0ZJRk9fVU5ERVJGTE9XIHwKKwkJCQkJICAgIExBWUVSMF9ETUFfQ1JfRklGT19V TkRFUkZMT1cpOworCQkJLyogZGlzYWJsZSBhdXRvIHJlc3RhcnQgbW9kZSAqLworCQkJa21iX2Ns cl9iaXRtYXNrX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX0NGRygwKSwKKwkJCQkgICAgTENEX0RN QV9MQVlFUl9DT05UX1BJTkdfUE9OR19VUERBVEUpOworCQkJbGF5ZXJfbm8gPSAwOworCQl9CisK KwkJaWYgKHZhbCAmIExBWUVSMF9ETUFfRklGT19PVkVSRkxPVykKKwkJCWRybV9pbmZvKCZrbWIt PmRybSwKKwkJCQkiTEFZRVIwOlZMMCBETUEgT1ZFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOwor CQlpZiAodmFsICYgTEFZRVIwX0RNQV9DQl9GSUZPX09WRVJGTE9XKQorCQkJZHJtX2luZm8oJmtt Yi0+ZHJtLAorCQkJCSJMQVlFUjA6VkwwIERNQSBDQiBPVkVSRkxPVyB2YWwgPSAweCVseCIsIHZh bCk7CisJCWlmICh2YWwgJiBMQVlFUjBfRE1BX0NSX0ZJRk9fT1ZFUkZMT1cpCisJCQlkcm1faW5m bygma21iLT5kcm0sCisJCQkJIkxBWUVSMDpWTDAgRE1BIENSIE9WRVJGTE9XIHZhbCA9IDB4JWx4 IiwgdmFsKTsKKworCQkvKiBMQVlFUjEgLSBWTDEgKi8KKwkJaWYgKHZhbCAmIChMQVlFUjFfRE1B X0ZJRk9fVU5ERVJGTE9XIHwKKwkJCSAgIExBWUVSMV9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAor CQkJICAgTEFZRVIxX0RNQV9DUl9GSUZPX1VOREVSRkxPVykpIHsKKwkJCWttYl91bmRlcl9mbG93 Kys7CisJCQlkcm1faW5mbygma21iLT5kcm0sCisJCQkgICAgIiFMQVlFUjE6VkwxIERNQSBVTkRF UkZMT1cgdmFsID0gMHglbHgsIHVuZGVyX2Zsb3c9JWQiLAorCQkJICAgICB2YWwsIGttYl91bmRl cl9mbG93KTsKKwkJCS8qIGRpc2FibGUgdW5kZXJmbG93IGluZXJydXB0ICovCisJCQlrbWJfY2xy X2JpdG1hc2tfbGNkKGttYiwgTENEX0lOVF9FTkFCTEUsCisJCQkJCSAgICBMQVlFUjFfRE1BX0ZJ Rk9fVU5ERVJGTE9XIHwKKwkJCQkJICAgIExBWUVSMV9ETUFfQ0JfRklGT19VTkRFUkZMT1cgfAor CQkJCQkgICAgTEFZRVIxX0RNQV9DUl9GSUZPX1VOREVSRkxPVyk7CisJCQlrbWJfc2V0X2JpdG1h c2tfbGNkKGttYiwgTENEX0lOVF9DTEVBUiwKKwkJCQkJICAgIExBWUVSMV9ETUFfQ0JfRklGT19V TkRFUkZMT1cgfAorCQkJCQkgICAgTEFZRVIxX0RNQV9GSUZPX1VOREVSRkxPVyB8CisJCQkJCSAg ICBMQVlFUjFfRE1BX0NSX0ZJRk9fVU5ERVJGTE9XKTsKKwkJCS8qIGRpc2FibGUgYXV0byByZXN0 YXJ0IG1vZGUgKi8KKwkJCWttYl9jbHJfYml0bWFza19sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9D RkcoMSksCisJCQkJICAgIExDRF9ETUFfTEFZRVJfQ09OVF9QSU5HX1BPTkdfVVBEQVRFKTsKKwkJ CWxheWVyX25vID0gMTsKKwkJfQorCisJCS8qIExBWUVSMSAtIFZMMSAqLworCQlpZiAodmFsICYg TEFZRVIxX0RNQV9GSUZPX09WRVJGTE9XKQorCQkJZHJtX2luZm8oJmttYi0+ZHJtLAorCQkJCSJM QVlFUjE6VkwxIERNQSBPVkVSRkxPVyB2YWwgPSAweCVseCIsIHZhbCk7CisJCWlmICh2YWwgJiBM QVlFUjFfRE1BX0NCX0ZJRk9fT1ZFUkZMT1cpCisJCQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJ IkxBWUVSMTpWTDEgRE1BIENCIE9WRVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKwkJaWYgKHZh bCAmIExBWUVSMV9ETUFfQ1JfRklGT19PVkVSRkxPVykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwK KwkJCQkiTEFZRVIxOlZMMSBETUEgQ1IgT1ZFUkZMT1cgdmFsID0gMHglbHgiLCB2YWwpOworCisJ CS8qIExBWUVSMiAtIEdMMCAqLworCQlpZiAodmFsICYgTEFZRVIyX0RNQV9GSUZPX1VOREVSRkxP VykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQkiTEFZRVIyOkdMMCBETUEgVU5ERVJGTE9X IHZhbCA9IDB4JWx4IiwgdmFsKTsKKwkJaWYgKHZhbCAmIExBWUVSMl9ETUFfRklGT19PVkVSRkxP VykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQkiTEFZRVIyOkdMMCBETUEgT1ZFUkZMT1cg dmFsID0gMHglbHgiLCB2YWwpOworCisJCS8qIExBWUVSMyAtIEdMMSAqLworCQlpZiAodmFsICYg TEFZRVIzX0RNQV9GSUZPX1VOREVSRkxPVykKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQki TEFZRVIzOkdMMSBETUEgVU5ERVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKwkJaWYgKHZhbCAm IExBWUVSM19ETUFfRklGT19VTkRFUkZMT1cpCisJCQlkcm1faW5mbygma21iLT5kcm0sCisJCQkJ IkxBWUVSMzpHTDEgRE1BIE9WRVJGTE9XIHZhbCA9IDB4JWx4IiwgdmFsKTsKKwl9CisKKwlpZiAo c3RhdHVzICYgTENEX0lOVF9MQVlFUikgeworCQkvKiBDbGVhciBsYXllciBpbnRlcnJ1cHRzICov CisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfSU5UX0NMRUFSLCBMQ0RfSU5UX0xBWUVSKTsKKwl9 CisKKwkvKiBDbGVhciBhbGwgaW50ZXJydXB0cyAqLworCWttYl9zZXRfYml0bWFza19sY2Qoa21i LCBMQ0RfSU5UX0NMRUFSLCAxKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIElSUSBo YW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3Qga21iX2lzcihpbnQgaXJxLCB2b2lkICphcmcp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWFyZzsK KwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKKworCXJldCA9IGhhbmRsZV9sY2RfaXJxKGRl dik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQga21iX2lycV9yZXNldChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtKQoreworCWttYl93cml0ZV9sY2QodG9fa21iKGRybSksIExDRF9JTlRf Q0xFQVIsIDB4RkZGRik7CisJa21iX3dyaXRlX2xjZCh0b19rbWIoZHJtKSwgTENEX0lOVF9FTkFC TEUsIDApOworfQorCitERUZJTkVfRFJNX0dFTV9DTUFfRk9QUyhmb3BzKTsKKworc3RhdGljIHN0 cnVjdCBkcm1fZHJpdmVyIGttYl9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZF Ul9HRU0gfAorCSAgICBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9NSUMsCisJLmlycV9oYW5k bGVyID0ga21iX2lzciwKKwkuaXJxX3ByZWluc3RhbGwgPSBrbWJfaXJxX3Jlc2V0LAorCS5pcnFf dW5pbnN0YWxsID0ga21iX2lycV9yZXNldCwKKwkvKiBHRU0gT3BlcmF0aW9ucyAqLworCS5mb3Bz ID0gJmZvcHMsCisJRFJNX0dFTV9DTUFfRFJJVkVSX09QU19WTUFQLAorCS5uYW1lID0gImttYi1k cm0iLAorCS5kZXNjID0gIktFRU1CQVkgRElTUExBWSBEUklWRVIgIiwKKwkuZGF0ZSA9ICIyMDE5 MDEyMiIsCisJLm1ham9yID0gMSwKKwkubWlub3IgPSAwLAorfTsKKworc3RhdGljIHZvaWQga21i X2RybV91bmxvYWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk cm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIg PSB0b19rbWIoZHJtKTsKKworI2lmZGVmIERFQlVHCisJZHVtcF9zdGFjaygpOworI2VuZGlmCisJ ZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7 CisJb2Zfbm9kZV9wdXQoa21iLT5jcnRjLnBvcnQpOworCWttYi0+Y3J0Yy5wb3J0ID0gTlVMTDsK KwlwbV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2KTsKKwlkcm1faXJxX3VuaW5zdGFsbChkcm0p OworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShk cm0tPmRldik7CisKKwlpZiAoa21iLT5sY2RfbW1pbykgeworCQlpb3VubWFwKGttYi0+bGNkX21t aW8pOworCQlyZWxlYXNlX21lbV9yZWdpb24oTENEX0JBU0VfQUREUiwgTENEX01NSU9fU0laRSk7 CisJfQorCisJaWYgKGttYi0+bWlwaV9tbWlvKSB7CisJCWlvdW5tYXAoa21iLT5taXBpX21taW8p OworCQlyZWxlYXNlX21lbV9yZWdpb24oTUlQSV9CQVNFX0FERFIsIE1JUElfTU1JT19TSVpFKTsK Kwl9CisKKwlpZiAoa21iLT5tc3NjYW1fbW1pbykgeworCQlpb3VubWFwKGttYi0+bXNzY2FtX21t aW8pOworCQlyZWxlYXNlX21lbV9yZWdpb24oTVNTX0NBTV9CQVNFX0FERFIsIE1TU19DQU1fTU1J T19TSVpFKTsKKwl9CisKKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZHJtLT5kZXYp OworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisKKwkvKiBSZWxlYXNlIGNsa3MgKi8K KwlrbWJfZGlzcGxheV9jbGtfZGlzYWJsZSgpOworCWNsa19wdXQoa21iX2Nsay5jbGtfbGNkKTsK KwljbGtfcHV0KGttYl9jbGsuY2xrX21pcGkpOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVM TCk7CisKKwkvKiBVbnJlZ2lzdGVyIERTSSBob3N0ICovCisJa21iX2RzaV9ob3N0X3VucmVnaXN0 ZXIoKTsKK30KKworc3RhdGljIGludCBrbWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBnZXRfZGV2aWNlKCZwZGV2LT5kZXYpOwor CXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYjsKKwlpbnQgcmV0ID0gMDsKKworCS8qIFRoZSBi cmlkZ2UgKEFEViA3NTM1KSB3aWxsIHJldHVybiAtRVBST0JFX0RFRkVSIHVudGlsIGl0CisJICog aGFzIGEgbWlwaV9kc2lfaG9zdCB0byByZWdpc3RlciBpdHMgZGV2aWNlIHRvLiBTbywgd2UKKwkg KiBmaXJzdCByZWdpc3RlciB0aGUgRFNJIGhvc3QgZHVyaW5nIHByb2JlIHRpbWUsIGFuZCB0aGVu IHJldHVybgorCSAqIC1FUFJPQkVfREVGRVIgdW50aWwgdGhlIGJyaWRnZSBpcyBsb2FkZWQuIFBy b2JlIHdpbGwgYmUgY2FsbGVkIGFnYWluCisJICogIGFuZCB0aGVuIHRoZSByZXN0IG9mIHRoZSBk cml2ZXIgaW5pdGlhbGl6YXRpb24gY2FuIHByb2NlZXMKKwkgKiAgYWZ0ZXJ3YXJkcyBhbmQgdGhl IGJyaWRnZSBjYW4gYmUgc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkLgorCSAqLworCWFkdl9icmlkZ2Ug PSBrbWJfZHNpX2hvc3RfYnJpZGdlX2luaXQoZGV2KTsKKworCWlmIChhZHZfYnJpZGdlID09IEVS Ul9QVFIoLUVQUk9CRV9ERUZFUikpCisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCWVsc2UgaWYg KElTX0VSUihhZHZfYnJpZGdlKSkgeworCQlEUk1fRVJST1IoInByb2JlIGZhaWxlZCB0byBpbml0 aWFsaXplIERTSSBob3N0IGJyaWRnZVxuIik7CisJCXJldHVybiBQVFJfRVJSKGFkdl9icmlkZ2Up OworCX0KKworCS8qIENyZWF0ZSBEUk0gZGV2aWNlICovCisJa21iID0gZGV2bV9kcm1fZGV2X2Fs bG9jKGRldiwgJmttYl9kcml2ZXIsCisJCQlzdHJ1Y3Qga21iX2RybV9wcml2YXRlLCBkcm0pOwor CWlmIChJU19FUlIoa21iKSkKKwkJcmV0dXJuIFBUUl9FUlIoa21iKTsKKworCWRldl9zZXRfZHJ2 ZGF0YShkZXYsICZrbWItPmRybSk7CisKKwlyZXQgPSBrbWJfc2V0dXBfbW9kZV9jb25maWcoJmtt Yi0+ZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCWRldl9zZXRfZHJ2ZGF0YShk ZXYsICZrbWItPmRybSk7CisKKwkvKiBMb2FkIGRyaXZlciAqLworCWttYi0+bl9sYXllcnMgPSBL TUJfTUFYX1BMQU5FUzsKKwlyZXQgPSBrbWJfbG9hZCgma21iLT5kcm0sIDApOworCWlmIChyZXQg PT0gLUVQUk9CRV9ERUZFUikgeworCQlkcm1faW5mbygma21iLT5kcm0sICJ3YWl0IGZvciBleHRl cm5hbCBicmlkZ2UgZHJpdmVyIERUXG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfSBl bHNlIGlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwkvKiBTZXQgdGhlIENSVEMncyBwb3J0 IHNvIHRoYXQgdGhlIGVuY29kZXIgY29tcG9uZW50IGNhbiBmaW5kIGl0ICovCisJa21iLT5jcnRj LnBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChkZXYtPm9mX25vZGUsIDApOworCXJldCA9 IGRybV92YmxhbmtfaW5pdCgma21iLT5kcm0sIGttYi0+ZHJtLm1vZGVfY29uZmlnLm51bV9jcnRj KTsKKwlkcm1faW5mbygma21iLT5kcm0sICJtb2RlX2NvbmZpZy5udW1fY3J0Yz0lZFxuIiwKKwkJ CWttYi0+ZHJtLm1vZGVfY29uZmlnLm51bV9jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcm1f ZXJyKCZrbWItPmRybSwgImZhaWxlZCB0byBpbml0aWFsaXplIHZibGFua1xuIik7CisJCWdvdG8g ZXJyX3ZibGFuazsKKwl9CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoJmttYi0+ZHJtKTsKKwlk cm1fa21zX2hlbHBlcl9wb2xsX2luaXQoJmttYi0+ZHJtKTsKKworCS8qIFJlZ2lzdGVyIGdyYXBo aWNzIGRldmljZSB3aXRoIHRoZSBrZXJuZWwgKi8KKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKCZr bWItPmRybSwgMCk7CisKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdpc3RlcjsKKworCXJldHVy biAwOworCisgZXJyX3JlZ2lzdGVyOgorCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaSgma21iLT5k cm0pOworIGVycl92Ymxhbms6CisJcG1fcnVudGltZV9kaXNhYmxlKGttYi0+ZHJtLmRldik7Cisg ZXJyX2ZyZWU6CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoJmttYi0+ZHJtKTsKKwlkZXZfc2V0 X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrbWJfZHNpX2hvc3RfdW5yZWdpc3RlcigpOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCBrbWJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJa21iX2RybV91bmxvYWQoJnBkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGttYl9vZl9tYXRjaFtdID0gewor CXsuY29tcGF0aWJsZSA9ICJpbnRlbCxrbWJfZGlzcGxheSJ9LAorCXt9LAorfTsKKworTU9EVUxF X0RFVklDRV9UQUJMRShvZiwga21iX29mX21hdGNoKTsKKworc3RhdGljIGludCBfX21heWJlX3Vu dXNlZCBrbWJfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBrbWJfZHJtX3ByaXZh dGUgKmttYiA9IGRybSA/IHRvX2ttYihkcm0pIDogTlVMTDsKKworCWlmICgha21iKQorCQlyZXR1 cm4gMDsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJa21iLT5zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKKwlpZiAoSVNfRVJSKGttYi0+c3Rh dGUpKSB7CisJCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRybSk7CisJCXJldHVybiBQVFJf RVJSKGttYi0+c3RhdGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5 YmVfdW51c2VkIGttYl9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qga21iX2RybV9w cml2YXRlICprbWIgPSBkcm0gPyB0b19rbWIoZHJtKSA6IE5VTEw7CisKKwlpZiAoIWttYikKKwkJ cmV0dXJuIDA7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoZHJtLCBrbWItPnN0YXRlKTsK Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBTSU1QTEVfREVWX1BNX09QUyhrbWJfcG1fb3BzLCBrbWJfcG1fc3VzcGVuZCwga21iX3Bt X3Jlc3VtZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGttYl9wbGF0Zm9ybV9k cml2ZXIgPSB7CisJLnByb2JlID0ga21iX3Byb2JlLAorCS5yZW1vdmUgPSBrbWJfcmVtb3ZlLAor CS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImttYi1kcm0iLAorCQkgICAucG0gPSAma21iX3Bt X29wcywKKwkJICAgLm9mX21hdGNoX3RhYmxlID0ga21iX29mX21hdGNoLAorCQkgICB9LAorfTsK KworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihrbWJfcGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxF X0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiS2VlbWJh eSBEaXNwbGF5IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0va21iL2tt Yl9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmEyOTNlCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHJ2LmgKQEAgLTAsMCArMSwx NzIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyAqCisgKiBD b3B5cmlnaHQgwqkgMjAxOC0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBf X0tNQl9EUlZfSF9fCisjZGVmaW5lIF9fS01CX0RSVl9IX18KKworI2luY2x1ZGUgImttYl9yZWdz LmgiCisKKyNkZWZpbmUgS01CX01BWF9XSURUSAkJCTE5MjAgLyptYXggd2lkdGggaW4gcGl4ZWxz ICovCisjZGVmaW5lIEtNQl9NQVhfSEVJR0hUCQkJMTA4MCAvKm1heCBoZWlnaHQgaW4gcGl4ZWxz ICovCisjZGVmaW5lIEtNQl9NSU5fV0lEVEggICAgICAgICAgICAgICAgICAgMTkyMCAvKm1heCB3 aWR0aCBpbiBwaXhlbHMgKi8KKyNkZWZpbmUgS01CX01JTl9IRUlHSFQgICAgICAgICAgICAgICAg ICAxMDgwIC8qbWF4IGhlaWdodCBpbiBwaXhlbHMgKi8KKyNkZWZpbmUgS01CX0xDRF9ERUZBVUxU X0NMSwkJMjAwMDAwMDAwCisjZGVmaW5lIEtNQl9NSVBJX0RFRkFVTFRfQ0xLCQkyNDAwMDAwMAor I2RlZmluZSBLTUJfTUlQSV9ERUZBVUxUX0NGR19DTEsJMjQwMDAwMDAKKyNkZWZpbmUgS01CX1NZ U19DTEtfTUhaCQkJNTAwCisKKyNkZWZpbmUgY3J0Y190b19rbWJfcHJpdih4KQljb250YWluZXJf b2YoeCwgc3RydWN0IGttYl9kcm1fcHJpdmF0ZSwgY3J0YykKKworI2RlZmluZSBJQ0FNX01NSU8J CTB4M2IxMDAwMDAKKyNkZWZpbmUgSUNBTV9MQ0RfT0ZGU0VUCQkweDEwODAKKyNkZWZpbmUgSUNB TV9NTUlPX1NJWkUJCTB4MjAwMAorc3RydWN0IGttYl9kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRy bV9kZXZpY2UJCWRybTsKKwl2b2lkIF9faW9tZW0JCQkqbGNkX21taW87CisJdm9pZCBfX2lvbWVt CQkJKm1pcGlfbW1pbzsKKwl2b2lkIF9faW9tZW0JCQkqbXNzY2FtX21taW87CisJdW5zaWduZWQg Y2hhcgkJCW5fbGF5ZXJzOworCXN0cnVjdCBjbGsJCQkqY2xrOworCXN0cnVjdCBkcm1fY3J0YwkJ CWNydGM7CisJc3RydWN0IGttYl9wbGFuZQkJKnBsYW5lOworCXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlCQkqc3RhdGU7CisJc3BpbmxvY2tfdAkJCWlycV9sb2NrOworCWludAkJCQlpcnFfbGNkOwor CWludAkJCQlpcnFfbWlwaTsKKwlpbnQJCQkJc3lzX2Nsa19taHo7CisJZG1hX2FkZHJfdAkJCWZi X2FkZHI7Cit9OworCitzdHJ1Y3Qga21iX2Nsb2NrIHsKKwlzdHJ1Y3QgY2xrICpjbGtfbGNkOwor CXN0cnVjdCBjbGsgKmNsa19taXBpOworCXN0cnVjdCBjbGsgKmNsa19taXBpX2VjZmc7CisJc3Ry dWN0IGNsayAqY2xrX21pcGlfY2ZnOworCXN0cnVjdCBjbGsgKmNsa19wbGwwOworfTsKKworc3Rh dGljIGlubGluZSBzdHJ1Y3Qga21iX2RybV9wcml2YXRlICp0b19rbWIoY29uc3Qgc3RydWN0IGRy bV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGttYl9k cm1fcHJpdmF0ZSwgZHJtKTsKK30KKworc3RydWN0IGJsdF9sYXllcl9jb25maWcgeworCXVuc2ln bmVkIGNoYXIgbGF5ZXJfZm9ybWF0OworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGttYl93cml0 ZV9sY2Qoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJIHVuc2lnbmVkIGludCBy ZWcsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIChkZXZfcC0+bGNkX21taW8gKyByZWcp KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl93cml0ZV9taXBpKHN0cnVjdCBrbWJfZHJt X3ByaXZhdGUgKmRldl9wLAorCQkJCSAgdW5zaWduZWQgaW50IHJlZywgdTMyIHZhbHVlKQorewor CXdyaXRlbCh2YWx1ZSwgKGRldl9wLT5taXBpX21taW8gKyByZWcpKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIGttYl93cml0ZV9tc3NjYW0oc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3As CisJCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUs IChkZXZfcC0+bXNzY2FtX21taW8gKyByZWcpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIga21i X3JlYWRfbXNzY2FtKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgdW5zaWdu ZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoZGV2X3AtPm1zc2NhbV9tbWlvICsgcmVnKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIGttYl9zZXRfYml0bWFza19tc3NjYW0oc3RydWN0IGtt Yl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJCSAgdW5zaWduZWQgaW50IHJlZywgdTMyIG1hc2sp Cit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9tc3NjYW0oZGV2X3AsIHJlZyk7CisKKwlrbWJf d3JpdGVfbXNzY2FtKGRldl9wLCByZWcsIChyZWdfdmFsIHwgbWFzaykpOworfQorCitzdGF0aWMg aW5saW5lIHUzMiBrbWJfcmVhZF9sY2Qoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsIHVu c2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRldl9wLT5sY2RfbW1pbyArIHJlZyk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfc2V0X2JpdG1hc2tfbGNkKHN0cnVjdCBrbWJf ZHJtX3ByaXZhdGUgKmRldl9wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgbWFz aykKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX2xjZChkZXZfcCwgcmVnKTsKKworCWttYl93 cml0ZV9sY2QoZGV2X3AsIHJlZywgKHJlZ192YWwgfCBtYXNrKSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBrbWJfY2xyX2JpdG1hc2tfbGNkKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9w LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgbWFzaykKK3sKKwl1MzIgcmVnX3Zh bCA9IGttYl9yZWFkX2xjZChkZXZfcCwgcmVnKTsKKworCWttYl93cml0ZV9sY2QoZGV2X3AsIHJl ZywgKHJlZ192YWwgJiAofm1hc2spKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGttYl9yZWFk X21pcGkoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsIHVuc2lnbmVkIGludCByZWcpCit7 CisJcmV0dXJuIHJlYWRsKGRldl9wLT5taXBpX21taW8gKyByZWcpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQga21iX3dyaXRlX2JpdHNfbWlwaShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZf cCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdTMyIG9mZnNldCwKKwkJCQkgICAgICAg dTMyIG51bV9iaXRzLCB1MzIgdmFsdWUpCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9taXBp KGRldl9wLCByZWcpOworCXUzMiBtYXNrID0gKDEgPDwgbnVtX2JpdHMpIC0gMTsKKworCXZhbHVl ICY9IG1hc2s7CisJbWFzayA8PD0gb2Zmc2V0OworCXJlZ192YWwgJj0gKH5tYXNrKTsKKwlyZWdf dmFsIHw9ICh2YWx1ZSA8PCBvZmZzZXQpOworI2lmZGVmIERFQlVHCisJaWYgKHJlZyA9PSBEUEhZ X0ZSRVFfQ1RSTDBfMyArIDQpIHsKKwkJRFJNX0lORk8oIiVzIDogJWQgIHJlZz0weCV4IG9mZnNl dD0lZCBudW1fYml0cz0lZCB2YWw9MHgleFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHJl Zywgb2Zmc2V0LCBudW1fYml0cywKKwkJCSByZWdfdmFsKTsKKwl9CisjZW5kaWYKKwlrbWJfd3Jp dGVfbWlwaShkZXZfcCwgcmVnLCByZWdfdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGtt Yl9zZXRfYml0X21pcGkoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqZGV2X3AsCisJCQkJICAgIHVu c2lnbmVkIGludCByZWcsIHUzMiBvZmZzZXQpCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9t aXBpKGRldl9wLCByZWcpOworCisJa21iX3dyaXRlX21pcGkoZGV2X3AsIHJlZywgcmVnX3ZhbCB8 ICgxIDw8IG9mZnNldCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX2Nscl9iaXRfbWlw aShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpkZXZfcCwKKwkJCQkgICAgdW5zaWduZWQgaW50IHJl ZywgdTMyIG9mZnNldCkKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX21pcGkoZGV2X3AsIHJl Zyk7CisKKwlrbWJfd3JpdGVfbWlwaShkZXZfcCwgcmVnLCByZWdfdmFsICYgKH4oMSA8PCBvZmZz ZXQpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfc2V0X2JpdG1hc2tfbWlwaShzdHJ1 Y3Qga21iX2RybV9wcml2YXRlICpkZXZfcCwKKwkJCQkJdW5zaWduZWQgaW50IHJlZywgdTMyIG1h c2spCit7CisJdTMyIHJlZ192YWwgPSBrbWJfcmVhZF9taXBpKGRldl9wLCByZWcpOworCisJa21i X3dyaXRlX21pcGkoZGV2X3AsIHJlZywgKHJlZ192YWwgfCBtYXNrKSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBrbWJfY2xyX2JpdG1hc2tfbWlwaShzdHJ1Y3Qga21iX2RybV9wcml2YXRlICpk ZXZfcCwKKwkJCQkJdW5zaWduZWQgaW50IHJlZywgdTMyIG1hc2spCit7CisJdTMyIHJlZ192YWwg PSBrbWJfcmVhZF9taXBpKGRldl9wLCByZWcpOworCisJa21iX3dyaXRlX21pcGkoZGV2X3AsIHJl ZywgKHJlZ192YWwgJiAofm1hc2spKSk7Cit9CisKK2ludCBrbWJfc2V0dXBfY3J0YyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQga21iX3NldF9zY2Fub3V0KHN0cnVjdCBrbWJfZHJtX3By aXZhdGUgKmxjZCk7CisjZW5kaWYgLyogX19LTUJfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2ku YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZlN2NhCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMKQEAgLTAsMCArMSwxODM0IEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogQ29weXJp Z2h0IMKpIDIwMTktMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51 eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgorCisjaW5jbHVkZSAia21iX2Ry di5oIgorI2luY2x1ZGUgImttYl9kc2kuaCIKKyNpbmNsdWRlICJrbWJfcmVncy5oIgorCitzdGF0 aWMgaW50IGh3X2luaXRpYWxpemVkOworLyogI2RlZmluZSBNSVBJX1RYX1RFU1RfUEFUVEVSTl9H RU5FUkFUSU9OICovCisvKiAjZGVmaW5lIERQSFlfR0VUX0ZTTSAqLworLyogI2RlZmluZSBEUEhZ X1JFQURfVEVTVENPREUgKi8KKworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9z dDsKK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2lfZGV2aWNlOworCisvKiBEZWZh dWx0IHNldHRpbmcgaXMgMTA4MHAsIDQgbGFuZXMgKi8KKyNkZWZpbmUgSU1HX0hFSUdIVF9MSU5F UyAgMTA4MAorI2RlZmluZSBJTUdfV0lEVEhfUFggICAgICAxOTIwCisjZGVmaW5lIE1JUElfVFhf QUNUSVZFX0xBTkVTIDQKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdGlvbl9jZmcgbWlwaV90 eF9mcmFtZTBfc2VjdF9jZmcgPSB7CisJLndpZHRoX3BpeGVscyA9IElNR19XSURUSF9QWCwKKwku aGVpZ2h0X2xpbmVzID0gSU1HX0hFSUdIVF9MSU5FUywKKwkuZGF0YV90eXBlID0gRFNJX0xQX0RU X1BQU19SR0I4ODhfMjRCLAorCS5kYXRhX21vZGUgPSBNSVBJX0RBVEFfTU9ERTEsCisJLmRtYV9w YWNrZWQgPSAwCit9OworCitzdHJ1Y3QgbWlwaV90eF9mcmFtZV9jZmcgbWlwaXR4X2ZyYW1lMF9j ZmcgPSB7CisJLnNlY3Rpb25zWzBdID0gJm1pcGlfdHhfZnJhbWUwX3NlY3RfY2ZnLAorCS5zZWN0 aW9uc1sxXSA9IE5VTEwsCisJLnNlY3Rpb25zWzJdID0gTlVMTCwKKwkuc2VjdGlvbnNbM10gPSBO VUxMLAorCS52c3luY193aWR0aCA9IDUsCisJLnZfYmFja3BvcmNoID0gMzYsCisJLnZfZnJvbnRw b3JjaCA9IDQsCisJLmhzeW5jX3dpZHRoID0gNDQsCisJLmhfYmFja3BvcmNoID0gMTQ4LAorCS5o X2Zyb250cG9yY2ggPSA4OAorfTsKKworc3RydWN0IG1pcGlfdHhfZHNpX2NmZyBtaXBpdHhfZHNp X2NmZyA9IHsKKwkuaGZwX2JsYW5rX2VuID0gMCwKKwkuZW90cF9lbiA9IDAsCisJLmxwbV9sYXN0 X3ZmcF9saW5lID0gMCwKKwkubHBtX2ZpcnN0X3ZzYV9saW5lID0gMCwKKwkuc3luY19wdWxzZV9l dmVudG4gPSBEU0lfVklERU9fTU9ERV9OT19CVVJTVF9FVkVOVCwKKwkuaGZwX2JsYW5raW5nID0g U0VORF9CTEFOS19QQUNLRVQsCisJLmhicF9ibGFua2luZyA9IFNFTkRfQkxBTktfUEFDS0VULAor CS5oc2FfYmxhbmtpbmcgPSBTRU5EX0JMQU5LX1BBQ0tFVCwKKwkudl9ibGFua2luZyA9IFNFTkRf QkxBTktfUEFDS0VULAorfTsKKworc3RydWN0IG1pcGlfY3RybF9jZmcgbWlwaV90eF9pbml0X2Nm ZyA9IHsKKwkuaW5kZXggPSBNSVBJX0NUUkw2LAorCS50eXBlID0gTUlQSV9EU0ksCisJLmRpciA9 IE1JUElfVFgsCisJLmFjdGl2ZV9sYW5lcyA9IE1JUElfVFhfQUNUSVZFX0xBTkVTLAorCS5sYW5l X3JhdGVfbWJwcyA9IE1JUElfVFhfTEFORV9EQVRBX1JBVEVfTUJQUywKKwkucmVmX2Nsa19raHog PSBNSVBJX1RYX1JFRl9DTEtfS0haLAorCS5jZmdfY2xrX2toeiA9IE1JUElfVFhfQ0ZHX0NMS19L SFosCisJLmRhdGFfaWYgPSBNSVBJX0lGX1BBUkFMTEVMLAorCS50eF9jdHJsX2NmZyA9IHsKKwkJ CS5mcmFtZXNbMF0gPSAmbWlwaXR4X2ZyYW1lMF9jZmcsCisJCQkuZnJhbWVzWzFdID0gTlVMTCwK KwkJCS5mcmFtZXNbMl0gPSBOVUxMLAorCQkJLmZyYW1lc1szXSA9IE5VTEwsCisJCQkudHhfZHNp X2NmZyA9ICZtaXBpdHhfZHNpX2NmZywKKwkJCS5saW5lX3N5bmNfcGt0X2VuID0gMCwKKwkJCS5s aW5lX2NvdW50ZXJfYWN0aXZlID0gMCwKKwkJCS5mcmFtZV9jb3VudGVyX2FjdGl2ZSA9IDAsCisJ CQkudHhfYWx3YXlzX3VzZV9oYWN0ID0gMSwKKwkJCS50eF9oYWN0X3dhaXRfc3RvcCA9IDEsCisJ CQl9Cit9OworCitzdHJ1Y3QgIG1pcGlfaHNfZnJlcV9yYW5nZV9jZmcgeworCXVpbnQxNl90IGRl ZmF1bHRfYml0X3JhdGVfbWJwczsKKwl1aW50OF90IGhzZnJlcXJhbmdlX2NvZGU7Cit9OworCitz dHJ1Y3QgdmNvX3BhcmFtcyB7CisJdTMyIGZyZXE7CisJdTMyIHJhbmdlOworCXUzMiBkaXZpZGVy OworfTsKKworc3RhdGljIHN0cnVjdCB2Y29fcGFyYW1zIHZjb190YWJsZVtdID0geworCXs1Miwg MHgzZiwgOH0sCisJezgwLCAweDM5LCA4fSwKKwl7MTA1LCAweDJmLCA0fSwKKwl7MTYwLCAweDI5 LCA0fSwKKwl7MjEwLCAweDFmLCAyfSwKKwl7MzIwLCAweDE5LCAyfSwKKwl7NDIwLCAweDBmLCAx fSwKKwl7NjMwLCAweDA5LCAxfSwKKwl7MTEwMCwgMHgwMywgMX0sCisJezB4ZmZmZiwgMHgwMSwg MX0sCit9OworCitzdGF0aWMgc3RydWN0IG1pcGlfaHNfZnJlcV9yYW5nZV9jZmcKK21pcGlfaHNf ZnJlcV9yYW5nZVtNSVBJX0RQSFlfREVGQVVMVF9CSVRfUkFURVNdID0geworCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gODAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgwMH0sCisJey5kZWZhdWx0 X2JpdF9yYXRlX21icHMgPSA5MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDEwfSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDEwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDIwfSwKKwl7LmRl ZmF1bHRfYml0X3JhdGVfbWJwcyA9IDExMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDMwfSwKKwl7 LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEyMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDAxfSwK Kwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEzMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDEx fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE0MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAw eDIxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE1MCwgLmhzZnJlcXJhbmdlX2NvZGUg PSAweDMxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE2MCwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDAyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE3MCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDEyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE4MCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDIyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE5MCwgLmhzZnJl cXJhbmdlX2NvZGUgPSAweDMyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIwNSwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDAzfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIyMCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDEzfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIz NSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDIzfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDI1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDMzfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJw cyA9IDI3NSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDA0fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVf bWJwcyA9IDMwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDE0fSwKKwl7LmRlZmF1bHRfYml0X3Jh dGVfbWJwcyA9IDMyNSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDI1fSwKKwl7LmRlZmF1bHRfYml0 X3JhdGVfbWJwcyA9IDM1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDM1fSwKKwl7LmRlZmF1bHRf Yml0X3JhdGVfbWJwcyA9IDQwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDA1fSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDQ1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDE2fSwKKwl7LmRl ZmF1bHRfYml0X3JhdGVfbWJwcyA9IDUwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDI2fSwKKwl7 LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDU1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDM3fSwK Kwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDYwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDA3 fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDY1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAw eDE4fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDcwMCwgLmhzZnJlcXJhbmdlX2NvZGUg PSAweDI4fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDc1MCwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDM5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDgwMCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDA5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDg1MCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDE5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDkwMCwgLmhzZnJl cXJhbmdlX2NvZGUgPSAweDI5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEwMDAsIC5o c2ZyZXFyYW5nZV9jb2RlID0gMHgwQX0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMDUw LCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MUF9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0g MTEwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDJBfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJw cyA9IDExNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzQn0sCisJey5kZWZhdWx0X2JpdF9yYXRl X21icHMgPSAxMjAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEJ9LAorCXsuZGVmYXVsdF9iaXRf cmF0ZV9tYnBzID0gMTI1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDFCfSwKKwl7LmRlZmF1bHRf Yml0X3JhdGVfbWJwcyA9IDEzMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgyQn0sCisJey5kZWZh dWx0X2JpdF9yYXRlX21icHMgPSAxMzUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4M0N9LAorCXsu ZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTQwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDBDfSwK Kwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE0NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgx Q30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxNTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9 IDB4MkN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTU1MCwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDNEfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE2MDAsIC5oc2ZyZXFyYW5n ZV9jb2RlID0gMHgwRH0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxNjUwLCAuaHNmcmVx cmFuZ2VfY29kZSA9IDB4MUR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTcwMCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDJFfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE3NTAs IC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzRX0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAx ODAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBz ID0gMTg1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDFFfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVf bWJwcyA9IDE5MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgyRn0sCisJey5kZWZhdWx0X2JpdF9y YXRlX21icHMgPSAxOTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4M0Z9LAorCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gMjAwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDBGfSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDIwNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0MH0sCisJey5k ZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyMTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDF9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjE1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQy fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIyMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0g MHg0M30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyMjUwLCAuaHNmcmVxcmFuZ2VfY29k ZSA9IDB4NDR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjMwMCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDQ1fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIzNTAsIC5oc2ZyZXFy YW5nZV9jb2RlID0gMHg0Nn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyNDAwLCAuaHNm cmVxcmFuZ2VfY29kZSA9IDB4NDd9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjQ1MCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDQ4fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDI1 MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0OX0KK307CisKK3VuaW9uIG1pcGlfaXJxX2NmZyBp bnRfY2ZnID0geworCS5pcnFfY2ZnLmZyYW1lX2RvbmUgPSAxLAorCS5pcnFfY2ZnLmN0cmxfZXJy b3IgPSAxLAorfTsKKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitrbWJfZHNpX21vZGVf dmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rv ci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9k ZV9jb25maWc7CisKKwlpZiAobW9kZS0+aGRpc3BsYXkgPCBtb2RlX2NvbmZpZy0+bWluX3dpZHRo IHx8CisJCQltb2RlLT5oZGlzcGxheSA+IG1vZGVfY29uZmlnLT5tYXhfd2lkdGgpCisJCXJldHVy biBNT0RFX0JBRF9IVkFMVUU7CisKKwlpZiAobW9kZS0+dmRpc3BsYXkgPCBtb2RlX2NvbmZpZy0+ bWluX2hlaWdodCB8fAorCQkJbW9kZS0+dmRpc3BsYXkgPiBtb2RlX2NvbmZpZy0+bWF4X2hlaWdo dCkKKwkJcmV0dXJuIE1PREVfQkFEX1ZWQUxVRTsKKworCXJldHVybiBNT0RFX09LOworfQorCitz dGF0aWMgaW50IGttYl9kc2lfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCit7CisJaW50IG51bV9tb2RlcyA9IDA7CisKKwludW1fbW9kZXMgPSBkcm1fYWRkX21vZGVz X25vZWRpZChjb25uZWN0b3IsCisJCQkgY29ubmVjdG9yLT5kZXYtPm1vZGVfY29uZmlnLm1heF93 aWR0aCwKKwkJCSBjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7CisKKwlE Uk1fSU5GTygid2lkdGg9JWQgaGVpZ2h0PSVkXG4iLAorCQkgY29ubmVjdG9yLT5kZXYtPm1vZGVf Y29uZmlnLm1heF93aWR0aCwKKwkJIGNvbm5lY3Rvci0+ZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVp Z2h0KTsKKwlEUk1fSU5GTygibnVtIG1vZGVzPSVkXG4iLCBudW1fbW9kZXMpOworCisJcmV0dXJu IG51bV9tb2RlczsKK30KKwordm9pZCBrbWJfZHNpX2hvc3RfdW5yZWdpc3Rlcih2b2lkKQorewor CW1pcGlfZHNpX2hvc3RfdW5yZWdpc3Rlcihkc2lfaG9zdCk7CisJa2ZyZWUoZHNpX2hvc3QpOwor fQorCitzdGF0aWMgdm9pZCBrbWJfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGttYl9jb25uZWN0b3IgKmttYl9jb25uZWN0 b3IgPSB0b19rbWJfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwlkcm1fY29ubmVjdG9yX2NsZWFu dXAoY29ubmVjdG9yKTsKKwlrZnJlZShrbWJfY29ubmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQg a21iX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor CXN0cnVjdCBrbWJfZHNpICprbWJfZHNpID0gdG9fa21iX2RzaShlbmNvZGVyKTsKKworCWlmICgh a21iX2RzaSkKKwkJcmV0dXJuOworCisJa2ZyZWUoa21iX2RzaS0+ZHNpX2hvc3QpOworCisJZHJt X2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKworCWttYl9kc2lfY29ubmVjdG9yX2Rlc3Ryb3ko JmttYl9kc2ktPmF0dGFjaGVkX2Nvbm5lY3Rvci0+YmFzZSk7CisKKwlrZnJlZShrbWJfZHNpKTsK KwlpZiAoIWRzaV9kZXZpY2UpCisJCWtmcmVlKGRzaV9kZXZpY2UpOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGttYl9kc2lfZnVuY3MgPSB7CisJLmRlc3Ryb3kg PSBrbWJfZHNpX2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKK2Ry bV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGttYl9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9 IHsKKwkuZ2V0X21vZGVzID0ga21iX2RzaV9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSBrbWJf ZHNpX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3Mga21iX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBrbWJfZHNpX2Nv bm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9y ZXNldCwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfZGVzdHJveV9zdGF0ZSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCit9OworCitzdGF0aWMgc3NpemVfdCBr bWJfZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJICAg ICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQga21iX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwK KwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQga21iX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAq aG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXYpCit7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMga21iX2RzaV9o b3N0X29wcyA9IHsKKwkuYXR0YWNoID0ga21iX2RzaV9ob3N0X2F0dGFjaCwKKwkuZGV0YWNoID0g a21iX2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNmZXIgPSBrbWJfZHNpX2hvc3RfdHJhbnNmZXIs Cit9OworCitzdGF0aWMgc3RydWN0IGttYl9kc2lfaG9zdCAqa21iX2RzaV9ob3N0X2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkJICAgICAgc3RydWN0IGttYl9kc2kgKmttYl9kc2kp Cit7CisJc3RydWN0IGttYl9kc2lfaG9zdCAqaG9zdDsKKworCWhvc3QgPSBremFsbG9jKHNpemVv ZigqaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlo b3N0LT5iYXNlID0gZHNpX2hvc3Q7CisJaG9zdC0+YmFzZS0+b3BzID0gJmttYl9kc2lfaG9zdF9v cHM7CisJaG9zdC0+a21iX2RzaSA9IGttYl9kc2k7CisKKwlob3N0LT5iYXNlLT5kZXYgPSBkcm0t PmRldjsKKworCWRzaV9kZXZpY2UtPmhvc3QgPSBob3N0LT5iYXNlOworCWhvc3QtPmRldmljZSA9 IGRzaV9kZXZpY2U7CisJcmV0dXJuIGhvc3Q7Cit9CisKK3N0cnVjdCBkcm1fYnJpZGdlICprbWJf ZHNpX2hvc3RfYnJpZGdlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UgPSBOVUxMOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5jb2Rlcl9ub2Rl OworCisJLyogQ3JlYXRlIGFuZCByZWdpc3RlciBNSVBJIERTSSBob3N0ICovCisJaWYgKCFkc2lf aG9zdCkgeworCQlkc2lfaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKCpkc2lfaG9zdCksIEdGUF9LRVJO RUwpOworCQlpZiAoIWRzaV9ob3N0KQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkJ ZHNpX2hvc3QtPm9wcyA9ICZrbWJfZHNpX2hvc3Rfb3BzOworCisJCWlmICghZHNpX2RldmljZSkg eworCQkJZHNpX2RldmljZSA9IGt6YWxsb2Moc2l6ZW9mKCpkc2lfZGV2aWNlKSwgR0ZQX0tFUk5F TCk7CisJCQlpZiAoIWRzaV9kZXZpY2UpIHsKKwkJCQlrZnJlZShkc2lfaG9zdCk7CisJCQkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCQl9CisJCX0KKworCQlkc2lfaG9zdC0+ZGV2ID0gZGV2 OworCQltaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKGRzaV9ob3N0KTsKKwl9CisJLyogRmluZCBBRFY3 NTM1IG5vZGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwllbmNvZGVyX25vZGUgPSBvZl9wYXJzZV9w aGFuZGxlKGRldi0+b2Zfbm9kZSwgImVuY29kZXItc2xhdmUiLCAwKTsKKworCWlmICghZW5jb2Rl cl9ub2RlKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBicmlkZ2UgaW5mbyBmcm9tIERU XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJLyogTG9jYXRlIGRybSBi cmlkZ2UgZnJvbSB0aGUgaGRtaSBlbmNvZGVyIERUIG5vZGUgKi8KKwlicmlkZ2UgPSBvZl9kcm1f ZmluZF9icmlkZ2UoZW5jb2Rlcl9ub2RlKTsKKwlvZl9ub2RlX3B1dChlbmNvZGVyX25vZGUpOwor CWlmICghYnJpZGdlKSB7CisJCURSTV9JTkZPKCJXYWl0IGZvciBleHRlcm5hbCBicmlkZ2UgZHJp dmVyIERUXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7CisJfQorCXJldHVy biBicmlkZ2U7Cit9CisKK3UzMiBtaXBpX2dldF9kYXRhdHlwZV9wYXJhbXModTMyIGRhdGFfdHlw ZSwgdTMyIGRhdGFfbW9kZSwKKwkJCSAgICAgc3RydWN0IG1pcGlfZGF0YV90eXBlX3BhcmFtcyAq cGFyYW1zKQoreworCXN0cnVjdCBtaXBpX2RhdGFfdHlwZV9wYXJhbXMgZGF0YV90eXBlX3BhcmFt OworCisJc3dpdGNoIChkYXRhX3R5cGUpIHsKKwljYXNlIERTSV9MUF9EVF9QUFNfWUNCQ1I0MjBf MTJCOgorCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDI7CisJCWRh dGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfYnl0ZXMgPSAzOworCQlzd2l0Y2ggKGRhdGFf bW9kZSkgeworCQkJLyogQ2FzZSAwIG5vdCBzdXBwb3J0ZWQgYWNjb3JkaW5nIHRvIE1ESyAqLwor CQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJZGF0YV90eXBlX3BhcmFtLnBpeGVs c19wZXJfcGNsayA9IDI7CisJCQlkYXRhX3R5cGVfcGFyYW0uYml0c19wZXJfcGNsayA9IDI0Owor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoIkRTSTogSW52YWxpZCBkYXRhX21v ZGUgJWRcbiIsIGRhdGFfbW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfTsKKwkJYnJlYWs7 CisJY2FzZSBEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzE2QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNp emVfY29uc3RyYWludF9waXhlbHMgPSAyOworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJh aW50X2J5dGVzID0gNDsKKwkJc3dpdGNoIChkYXRhX21vZGUpIHsKKwkJCS8qIENhc2UgMCBhbmQg MSBub3Qgc3VwcG9ydGVkIGFjY29yZGluZworCQkJICogdG8gTURLCisJCQkgKi8KKwkJY2FzZSAy OgorCQkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCQlkYXRhX3R5cGVf cGFyYW0uYml0c19wZXJfcGNsayA9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWRhdGFf dHlwZV9wYXJhbS5waXhlbHNfcGVyX3BjbGsgPSAyOworCQkJZGF0YV90eXBlX3BhcmFtLmJpdHNf cGVyX3BjbGsgPSAzMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJEU0k6 IEludmFsaWQgZGF0YV9tb2RlICVkXG4iLCBkYXRhX21vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX07CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX0xQUFNfWUNCQ1I0MjJfMjBCOgorCWNh c2UgRFNJX0xQX0RUX1BQU19ZQ0JDUjQyMl8yNEI6CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2Nv bnN0cmFpbnRfcGl4ZWxzID0gMjsKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9i eXRlcyA9IDY7CisJCXN3aXRjaCAoZGF0YV9tb2RlKSB7CisJCQkvKiBDYXNlIDAgbm90IHN1cHBv cnRlZCBhY2NvcmRpbmcgdG8gTURLICovCisJCWNhc2UgMToKKwkJY2FzZSAyOgorCQljYXNlIDM6 CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJCWRhdGFfdHlwZV9w YXJhbS5iaXRzX3Blcl9wY2xrID0gMjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9F UlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfbW9kZSAlZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJldHVy biAtRUlOVkFMOworCQl9OworCQlicmVhazsKKwljYXNlIERTSV9MUF9EVF9QUFNfUkdCNTY1XzE2 QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAxOworCQlkYXRh X3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gMjsKKwkJc3dpdGNoIChkYXRhX21v ZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Bl cl9wY2xrID0gMTsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMTY7CisJCQli cmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Bl cl9wY2xrID0gMjsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMzI7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfbW9kZSAl ZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQlicmVhazsKKwlj YXNlIERTSV9MUF9EVF9QUFNfUkdCNjY2XzE4QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29u c3RyYWludF9waXhlbHMgPSA0OworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5 dGVzID0gOTsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAxODsKKwkJZGF0YV90 eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RU X0xQUFNfUkdCNjY2XzE4QjoKKwljYXNlIERTSV9MUF9EVF9QUFNfUkdCODg4XzI0QjoKKwkJZGF0 YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAxOworCQlkYXRhX3R5cGVfcGFy YW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gMzsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVy X3BjbGsgPSAyNDsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJy ZWFrOworCWNhc2UgRFNJX0xQX0RUX1BQU19SR0IxMDEwMTBfMzBCOgorCQlkYXRhX3R5cGVfcGFy YW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDQ7CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2Nv bnN0cmFpbnRfYnl0ZXMgPSAxNTsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAz MDsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfdHlwZSAlZFxuIiwgZGF0YV90 eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKKworCSpwYXJhbXMgPSBkYXRhX3R5cGVfcGFy YW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY29tcHV0ZV93Yyh1MzIgd2lkdGhfcHgs IHU4IHNpemVfY29uc3RyX3AsIHU4IHNpemVfY29uc3RyX2IpCit7CisJLyogQ2FsY3VsYXRlIHRo ZSB3b3JkIGNvdW50IGZvciBlYWNoIGxvbmcgcGFja2V0ICovCisJcmV0dXJuICgoKHdpZHRoX3B4 IC8gc2l6ZV9jb25zdHJfcCkgKiBzaXplX2NvbnN0cl9iKSAmIDB4ZmZmZik7Cit9CisKK3N0YXRp YyB1MzIgY29tcHV0ZV91bnBhY2tlZF9ieXRlcyh1MzIgd2MsIHU4IGJpdHNfcGVyX3BjbGspCit7 CisJLyogTnVtYmVyIG9mIFBDTEsgY3ljbGVzIG5lZWRlZCB0byB0cmFuc2ZlciBhIGxpbmUKKwkg KiB3aXRoIGVhY2ggUENMSyBjeWNsZSwgNCBCeXRlcyBhcmUgc2VudCB0aHJvdWdoIHRoZSBQUEwg bW9kdWxlCisJICovCisJcmV0dXJuICgod2MgKiA4KSAvIGJpdHNfcGVyX3BjbGspICogNDsKK30K Kworc3RhdGljIHUzMiBtaXBpX3R4X2ZnX3NlY3Rpb25fY2ZnX3JlZ3Moc3RydWN0IGttYl9kcm1f cHJpdmF0ZSAqa21iLAorCQkJCSAgICAgICB1OCBmcmFtZV9pZCwgdTggc2VjdGlvbiwKKwkJCQkg ICAgICAgdTMyIGhlaWdodF9saW5lcywgdTMyIHVucGFja2VkX2J5dGVzLAorCQkJCSAgICAgICBz dHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0X3BoY2ZnICpwaF9jZmcpCit7CisJdTMyIGNmZyA9IDA7 CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCXUzMiByZWdfYWRyOworCisJLyogRnJhbWUg c2VjdGlvbiBwYWNrZXQgaGVhZGVyICovCisJLyogV29yZCBjb3VudCBiaXRzIFsxNTowXSAqLwor CWNmZyA9IChwaF9jZmctPndjICYgTUlQSV9UWF9TRUNUX1dDX01BU0spIDw8IDA7CisKKwkvKiBE YXRhIHR5cGUgKGJpdHMgWzIxOjE2XSkgKi8KKwljZmcgfD0gKChwaF9jZmctPmRhdGFfdHlwZSAm IE1JUElfVFhfU0VDVF9EVF9NQVNLKQorCQk8PCBNSVBJX1RYX1NFQ1RfRFRfU0hJRlQpOworCisJ LyogVmlydHVhbCBjaGFubmVsIChiaXRzIFsyMzoyMl0pICovCisJY2ZnIHw9ICgocGhfY2ZnLT52 Y2hhbm5lbCAmIE1JUElfVFhfU0VDVF9WQ19NQVNLKQorCQk8PCBNSVBJX1RYX1NFQ1RfVkNfU0hJ RlQpOworCisJLyogRGF0YSBtb2RlIChiaXRzIFsyNDoyNV0pICovCisJY2ZnIHw9ICgocGhfY2Zn LT5kYXRhX21vZGUgJiBNSVBJX1RYX1NFQ1RfRE1fTUFTSykKKwkJPDwgTUlQSV9UWF9TRUNUX0RN X1NISUZUKTsKKwlpZiAocGhfY2ZnLT5kbWFfcGFja2VkKQorCQljZmcgfD0gTUlQSV9UWF9TRUNU X0RNQV9QQUNLRUQ7CisKKwlkcm1fZGJnKCZrbWItPmRybSwKKwkJICJjdHJsPSVkIGZyYW1lX2lk PSVkIHNlY3Rpb249JWQgY2ZnPSV4IHBhY2tlZD0lZFxuIiwKKwkJICBjdHJsX25vLCBmcmFtZV9p ZCwgc2VjdGlvbiwgY2ZnLCBwaF9jZmctPmRtYV9wYWNrZWQpOworCWttYl93cml0ZV9taXBpKGtt YiwKKwkJICAgICAgIChNSVBJX1RYbV9IU19GR25fU0VDVG9fUEgoY3RybF9ubywgZnJhbWVfaWQs IHNlY3Rpb24pKSwKKwkJICAgICAgIGNmZyk7CisKKwkvKiBVbnBhY2tlZCBieXRlcyAqLworCisJ LyogVGhlcmUgYXJlIDQgZnJhbWUgZ2VuZXJhdG9ycyBhbmQgZWFjaCBmZyBoYXMgNCBzZWN0aW9u cworCSAqIFRoZXJlIGFyZSAyIHJlZ2lzdGVycyBmb3IgdW5wYWNrZWQgYnl0ZXMgKCMgYnl0ZXMg ZWFjaAorCSAqIHNlY3Rpb24gb2NjdXBpZXMgaW4gbWVtb3J5KQorCSAqIFJFR19VTlBBQ0tFRF9C WVRFUzA6IFsxNTowXS1CWVRFUzAsIFszMToxNl0tQllURVMxCisJICogUkVHX1VOUEFDS0VEX0JZ VEVTMTogWzE1OjBdLUJZVEVTMiwgWzMxOjE2XS1CWVRFUzMKKwkgKi8KKwlyZWdfYWRyID0KKwkg ICAgTUlQSV9UWG1fSFNfRkduX1NFQ1RfVU5QQUNLRURfQllURVMwKGN0cmxfbm8sCisJCQkJCQkg ZnJhbWVfaWQpICsgKHNlY3Rpb24gLyAyKSAqIDQ7CisJa21iX3dyaXRlX2JpdHNfbWlwaShrbWIs IHJlZ19hZHIsIChzZWN0aW9uICUgMikgKiAxNiwgMTYsCisJCQkgICAgdW5wYWNrZWRfYnl0ZXMp OworCWRybV9kYmcoJmttYi0+ZHJtLAorCQkgInVucGFja2VkX2J5dGVzID0gJWQsIHdvcmRjb3Vu dCA9ICVkXG4iLCB1bnBhY2tlZF9ieXRlcywKKwkJICBwaF9jZmctPndjKTsKKworCS8qIExpbmUg Y29uZmlnICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX0ZHbl9TRUNUb19MSU5FX0NGRyhjdHJs X25vLCBmcmFtZV9pZCwgc2VjdGlvbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLCBo ZWlnaHRfbGluZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIG1pcGlfdHhfZmdfc2Vj dGlvbl9jZmcoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLAorCQkJCSAgdTggZnJhbWVfaWQs IHU4IHNlY3Rpb24sCisJCQkJICBzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0aW9uX2NmZyAqZnJh bWVfc2NmZywKKwkJCQkgIHUzMiAqYml0c19wZXJfcGNsaywgdTMyICp3YykKK3sKKwl1MzIgcmV0 ID0gMDsKKwl1MzIgdW5wYWNrZWRfYnl0ZXM7CisJc3RydWN0IG1pcGlfZGF0YV90eXBlX3BhcmFt cyBkYXRhX3R5cGVfcGFyYW1ldGVyczsKKwlzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0X3BoY2Zn IHBoX2NmZzsKKworCXJldCA9IG1pcGlfZ2V0X2RhdGF0eXBlX3BhcmFtcyhmcmFtZV9zY2ZnLT5k YXRhX3R5cGUsCisJCQkJICAgICAgIGZyYW1lX3NjZmctPmRhdGFfbW9kZSwKKwkJCQkgICAgICAg JmRhdGFfdHlwZV9wYXJhbWV0ZXJzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyog UGFja2V0IHdpZHRoIGhhcyB0byBiZSBhIG11bHRpcGxlIG9mIHRoZSBtaW5pbXVtIHBhY2tldCB3 aWR0aAorCSAqIChpbiBwaXhlbHMpIHNldCBmb3IgZWFjaCBkYXRhIHR5cGUKKwkgKi8KKwlpZiAo ZnJhbWVfc2NmZy0+d2lkdGhfcGl4ZWxzICUKKwkgICAgZGF0YV90eXBlX3BhcmFtZXRlcnMuc2l6 ZV9jb25zdHJhaW50X3BpeGVscyAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSp3YyA9IGNv bXB1dGVfd2MoZnJhbWVfc2NmZy0+d2lkdGhfcGl4ZWxzLAorCQkJIGRhdGFfdHlwZV9wYXJhbWV0 ZXJzLnNpemVfY29uc3RyYWludF9waXhlbHMsCisJCQkgZGF0YV90eXBlX3BhcmFtZXRlcnMuc2l6 ZV9jb25zdHJhaW50X2J5dGVzKTsKKwl1bnBhY2tlZF9ieXRlcyA9IGNvbXB1dGVfdW5wYWNrZWRf Ynl0ZXMoKndjLAorCQkJCQlkYXRhX3R5cGVfcGFyYW1ldGVycy5iaXRzX3Blcl9wY2xrKTsKKwlw aF9jZmcud2MgPSAqd2M7CisJcGhfY2ZnLmRhdGFfbW9kZSA9IGZyYW1lX3NjZmctPmRhdGFfbW9k ZTsKKwlwaF9jZmcuZGF0YV90eXBlID0gZnJhbWVfc2NmZy0+ZGF0YV90eXBlOworCXBoX2NmZy5k bWFfcGFja2VkID0gZnJhbWVfc2NmZy0+ZG1hX3BhY2tlZDsKKwlwaF9jZmcudmNoYW5uZWwgPSBm cmFtZV9pZDsKKworCW1pcGlfdHhfZmdfc2VjdGlvbl9jZmdfcmVncyhrbWIsIGZyYW1lX2lkLCBz ZWN0aW9uLAorCQkJCSAgICBmcmFtZV9zY2ZnLT5oZWlnaHRfbGluZXMsCisJCQkJICAgIHVucGFj a2VkX2J5dGVzLCAmcGhfY2ZnKTsKKworCS8qIENhbGxlciBuZWVkcyBiaXRzX3Blcl9jbGsgZm9y IGFkZGl0aW9uYWwgY2FsdWNsYXRpb25zICovCisJKmJpdHNfcGVyX3BjbGsgPSBkYXRhX3R5cGVf cGFyYW1ldGVycy5iaXRzX3Blcl9wY2xrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IG1pcGlfdHhfZmdfY2ZnX3JlZ3Moc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1OCBmcmFt ZV9nZW4sCisJCQkJc3RydWN0IG1pcGlfdHhfZnJhbWVfdGltaW5nX2NmZyAqZmdfY2ZnKQorewor CXUzMiBzeXNjbGs7CisJdTMyIHBwbF9sbHBfcmF0aW87CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NU Ukw2LCByZWdfYWRyLCB2YWwsIG9mZnNldDsKKworCS8qIDUwMCBNaHogc3lzdGVtIGNsb2NrIG1p bnVzIDUwIHRvIGFjY291bnQgZm9yIHRoZSBkaWZmZXJlbmNlIGluCisJICogTUlQSSBjbG9jayBz cGVlZCBpbiBSVEwgdGVzdHMKKwkgKi8KKwlzeXNjbGsgPSBrbWItPnN5c19jbGtfbWh6IC0gNTA7 CisKKwkvKiBQUEwtUGl4ZWwgUGFja2luZyBMYXllciwgTExQLUxvdyBMZXZlbCBQcm90b2NvbAor CSAqIEZyYW1lIGdlbmFydG9yIHRpbWluZyBwYXJhbWV0ZXJzIGFyZSBjbG9ja2VkIG9uIHRoZSBz eXN0ZW0gY2xvY2ssCisJICogd2hlcmVhcyBhcyB0aGUgZXF1aXZhbGVudCBwYXJhbWV0ZXJzIGlu IHRoZSBMTFAgYmxvY2tzIGFyZSBjbG9ja2VkCisJICogb24gTExQIFR4IGNsb2NrIGZyb20gdGhl IEQtUEhZIC0gQllURSBjbG9jaworCSAqLworCisJLyogTXVsdGlwbHkgYnkgMTAwMCB0byBtYWlu dGFpbiBwcmVjaXNpb24gKi8KKwlwcGxfbGxwX3JhdGlvID0gKChmZ19jZmctPmJwcCAvIDgpICog c3lzY2xrICogMTAwMCkgLworCSAgICAoKGZnX2NmZy0+bGFuZV9yYXRlX21icHMgLyA4KSAqIGZn X2NmZy0+YWN0aXZlX2xhbmVzKTsKKworCWRybV9kYmcoJmttYi0+ZHJtLCAicHBsX2xscF9yYXRp bz0lZFxuIiwgcHBsX2xscF9yYXRpbyk7CisJZHJtX2RiZygma21iLT5kcm0sICJicHA9JWQgc3lz Y2xrPSVkIGxhbmUtcmF0ZT0lZCBhY3Rpdi1sYW5lcz0lZFxuIiwKKwkJIGZnX2NmZy0+YnBwLCBz eXNjbGssIGZnX2NmZy0+bGFuZV9yYXRlX21icHMsCisJCSBmZ19jZmctPmFjdGl2ZV9sYW5lcyk7 CisKKwkvKiBGcmFtZSBnZW5lcmF0b3IgbnVtYmVyIG9mIGxpbmVzICovCisJcmVnX2FkciA9IE1J UElfVFhtX0hTX0ZHbl9OVU1fTElORVMoY3RybF9ubywgZnJhbWVfZ2VuKTsKKwlrbWJfd3JpdGVf bWlwaShrbWIsIHJlZ19hZHIsIGZnX2NmZy0+dl9hY3RpdmUpOworCisJLyogdnN5bmMgd2lkdGgK KwkgKiBUaGVyZSBhcmUgMiByZWdpc3RlcnMgZm9yIHZzeW5jIHdpZHRoIChWU0EgaW4gbGluZXMg Zm9yCisJICogY2hhbm5lbHMgMC0zKQorCSAqIFJFR19WU1lOQ19XSURUSDA6IFsxNTowXS1WU0Eg Zm9yIGNoYW5uZWwwLCBbMzE6MTZdLVZTQSBmb3IgY2hhbm5lbDEKKwkgKiBSRUdfVlNZTkNfV0lE VEgxOiBbMTU6MF0tVlNBIGZvciBjaGFubmVsMiwgWzMxOjE2XS1WU0EgZm9yIGNoYW5uZWwzCisJ ICovCisJb2Zmc2V0ID0gKGZyYW1lX2dlbiAlIDIpICogMTY7CisJcmVnX2FkciA9IE1JUElfVFht X0hTX1ZTWU5DX1dJRFRIbihjdHJsX25vLCBmcmFtZV9nZW4gLyAyKTsKKwlrbWJfd3JpdGVfYml0 c19taXBpKGttYiwgcmVnX2Fkciwgb2Zmc2V0LCAxNiwgZmdfY2ZnLT52c3luY193aWR0aCk7CisK KwkvKiB2ZXJ0aWNhbCBiYWNrcG9yY2ggKHZicCkgKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNf Vl9CQUNLUE9SQ0hFU24oY3RybF9ubywgZnJhbWVfZ2VuIC8gMik7CisJa21iX3dyaXRlX2JpdHNf bWlwaShrbWIsIHJlZ19hZHIsIG9mZnNldCwgMTYsIGZnX2NmZy0+dl9iYWNrcG9yY2gpOworCisJ LyogdmVydGljYWwgZnJvbnRwb3JjaCAodmZwKSAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19W X0ZST05UUE9SQ0hFU24oY3RybF9ubywgZnJhbWVfZ2VuIC8gMik7CisJa21iX3dyaXRlX2JpdHNf bWlwaShrbWIsIHJlZ19hZHIsIG9mZnNldCwgMTYsIGZnX2NmZy0+dl9mcm9udHBvcmNoKTsKKwor CS8qIHZlcnRpY2FsIGFjdGl2ZSAodmFjdGl2ZSkgKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNf Vl9BQ1RJVkVuKGN0cmxfbm8sIGZyYW1lX2dlbiAvIDIpOworCWttYl93cml0ZV9iaXRzX21pcGko a21iLCByZWdfYWRyLCBvZmZzZXQsIDE2LCBmZ19jZmctPnZfYWN0aXZlKTsKKworCS8qIGhzeW5j IHdpZHRoICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX0hTWU5DX1dJRFRIbihjdHJsX25vLCBm cmFtZV9nZW4pOworCWttYl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwKKwkJICAgICAgIChmZ19j ZmctPmhzeW5jX3dpZHRoICogcHBsX2xscF9yYXRpbykgLyAxMDAwKTsKKworCS8qIGhvcml6b250 YWwgYmFja3BvcmNoIChoYnApICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX0hfQkFDS1BPUkNI bihjdHJsX25vLCBmcmFtZV9nZW4pOworCWttYl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwKKwkJ ICAgICAgIChmZ19jZmctPmhfYmFja3BvcmNoICogcHBsX2xscF9yYXRpbykgLyAxMDAwKTsKKwor CS8qIGhvcml6b250YWwgZnJvbnRwb3JjaCAoaGZwKSAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9I U19IX0ZST05UUE9SQ0huKGN0cmxfbm8sIGZyYW1lX2dlbik7CisJa21iX3dyaXRlX21pcGkoa21i LCByZWdfYWRyLAorCQkgICAgICAgKGZnX2NmZy0+aF9mcm9udHBvcmNoICogcHBsX2xscF9yYXRp bykgLyAxMDAwKTsKKworCS8qIGhvcml6b250YWwgYWN0aXZlIChoYSkgKi8KKwlyZWdfYWRyID0g TUlQSV9UWG1fSFNfSF9BQ1RJVkVuKGN0cmxfbm8sIGZyYW1lX2dlbik7CisKKwkvKiBjb252ZXJ0 IGhfYWN0aXZlIHdoaWNoIGlzIHdjIGluIGJ5dGVzIHRvIGN5Y2xlcyAqLworCXZhbCA9IChmZ19j ZmctPmhfYWN0aXZlICogc3lzY2xrICogMTAwMCkgLworCSAgICAoKGZnX2NmZy0+bGFuZV9yYXRl X21icHMgLyA4KSAqIGZnX2NmZy0+YWN0aXZlX2xhbmVzKTsKKwl2YWwgLz0gMTAwMDsKKwlrbWJf d3JpdGVfbWlwaShrbWIsIHJlZ19hZHIsIHZhbCk7CisKKwkvKiBsbHAgaHN5bmMgd2lkdGggKi8K KwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfTExQX0hTWU5DX1dJRFRIbihjdHJsX25vLCBmcmFtZV9n ZW4pOworCWttYl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwgZmdfY2ZnLT5oc3luY193aWR0aCAq IChmZ19jZmctPmJwcCAvIDgpKTsKKworCS8qIGxscCBoIGJhY2twb3JjaCAqLworCXJlZ19hZHIg PSBNSVBJX1RYbV9IU19MTFBfSF9CQUNLUE9SQ0huKGN0cmxfbm8sIGZyYW1lX2dlbik7CisJa21i X3dyaXRlX21pcGkoa21iLCByZWdfYWRyLCBmZ19jZmctPmhfYmFja3BvcmNoICogKGZnX2NmZy0+ YnBwIC8gOCkpOworCisJLyogbGxwIGggZnJvbnRwb3JjaCAqLworCXJlZ19hZHIgPSBNSVBJX1RY bV9IU19MTFBfSF9GUk9OVFBPUkNIbihjdHJsX25vLCBmcmFtZV9nZW4pOworCWttYl93cml0ZV9t aXBpKGttYiwgcmVnX2FkciwKKwkJICAgICAgIGZnX2NmZy0+aF9mcm9udHBvcmNoICogKGZnX2Nm Zy0+YnBwIC8gOCkpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX3R4X2ZnX2NmZyhzdHJ1Y3Qga21i X2RybV9wcml2YXRlICprbWIsIHU4IGZyYW1lX2dlbiwKKwkJCSAgIHU4IGFjdGl2ZV9sYW5lcywg dTMyIGJwcCwgdTMyIHdjLAorCQkJICAgdTMyIGxhbmVfcmF0ZV9tYnBzLCBzdHJ1Y3QgbWlwaV90 eF9mcmFtZV9jZmcgKmZnX2NmZykKK3sKKwl1MzIgaSwgZmdfbnVtX2xpbmVzID0gMDsKKwlzdHJ1 Y3QgbWlwaV90eF9mcmFtZV90aW1pbmdfY2ZnIGZnX3RfY2ZnOworCisJLyogQ2FsY3VsYXRlIHRo ZSB0b3RhbCBmcmFtZSBnZW5lcmF0b3IgbnVtYmVyIG9mCisJICogbGluZXMgYmFzZWQgb24gaXQn cyBhY3RpdmUgc2VjdGlvbnMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUlQSV9UWF9GUkFNRV9H RU5fU0VDVElPTlM7IGkrKykgeworCQlpZiAoZmdfY2ZnLT5zZWN0aW9uc1tpXSAhPSBOVUxMKQor CQkJZmdfbnVtX2xpbmVzICs9IGZnX2NmZy0+c2VjdGlvbnNbaV0tPmhlaWdodF9saW5lczsKKwl9 CisKKwlmZ190X2NmZy5icHAgPSBicHA7CisJZmdfdF9jZmcubGFuZV9yYXRlX21icHMgPSBsYW5l X3JhdGVfbWJwczsKKwlmZ190X2NmZy5oc3luY193aWR0aCA9IGZnX2NmZy0+aHN5bmNfd2lkdGg7 CisJZmdfdF9jZmcuaF9iYWNrcG9yY2ggPSBmZ19jZmctPmhfYmFja3BvcmNoOworCWZnX3RfY2Zn LmhfZnJvbnRwb3JjaCA9IGZnX2NmZy0+aF9mcm9udHBvcmNoOworCWZnX3RfY2ZnLmhfYWN0aXZl ID0gd2M7CisJZmdfdF9jZmcudnN5bmNfd2lkdGggPSBmZ19jZmctPnZzeW5jX3dpZHRoOworCWZn X3RfY2ZnLnZfYmFja3BvcmNoID0gZmdfY2ZnLT52X2JhY2twb3JjaDsKKwlmZ190X2NmZy52X2Zy b250cG9yY2ggPSBmZ19jZmctPnZfZnJvbnRwb3JjaDsKKwlmZ190X2NmZy52X2FjdGl2ZSA9IGZn X251bV9saW5lczsKKwlmZ190X2NmZy5hY3RpdmVfbGFuZXMgPSBhY3RpdmVfbGFuZXM7CisKKwkv KiBBcHBseSBmcmFtZSBnZW5lcmF0b3IgdGltaW5nIHNldHRpbmcgKi8KKwltaXBpX3R4X2ZnX2Nm Z19yZWdzKGttYiwgZnJhbWVfZ2VuLCAmZmdfdF9jZmcpOworfQorCitzdGF0aWMgdm9pZCBtaXBp X3R4X211bHRpY2hhbm5lbF9maWZvX2NmZyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJ CQkJCSAgdTggYWN0aXZlX2xhbmVzLCB1OCB2Y2hhbm5lbF9pZCkKK3sKKwl1MzIgZmlmb19zaXpl LCBmaWZvX3J0aHJlc2hvbGQ7CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCisJLyogQ2xl YXIgYWxsIG1jIGZpZm8gY2hhbm5lbCBzaXplcyBhbmQgdGhyZXNob2xkcyAqLworCWttYl93cml0 ZV9taXBpKGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX0NUUkxfRU4sIDApOworCWttYl93cml0ZV9t aXBpKGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX0NIQU5fQUxMT0MwLCAwKTsKKwlrbWJfd3JpdGVf bWlwaShrbWIsIE1JUElfVFhfSFNfTUNfRklGT19DSEFOX0FMTE9DMSwgMCk7CisJa21iX3dyaXRl X21pcGkoa21iLCBNSVBJX1RYX0hTX01DX0ZJRk9fUlRIUkVTSE9MRDAsIDApOworCWttYl93cml0 ZV9taXBpKGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX1JUSFJFU0hPTEQxLCAwKTsKKworCWZpZm9f c2l6ZSA9ICgoYWN0aXZlX2xhbmVzID4gTUlQSV9EX0xBTkVTX1BFUl9EUEhZKSA/CisJCSAgICAg TUlQSV9DVFJMXzRMQU5FX01BWF9NQ19GSUZPX0xPQyA6CisJCSAgICAgTUlQSV9DVFJMXzJMQU5F X01BWF9NQ19GSUZPX0xPQykgLSAxOworCisJLyogTUMgZmlmbyBzaXplIGZvciB2aXJ0dWFsIGNo YW5uZWxzIDAtMworCSAqIFJFR19NQ19GSUZPX0NIQU5fQUxMT0MwOiBbODowXS1jaGFubmVsMCwg WzI0OjE2XS1jaGFubmVsMQorCSAqIFJFR19NQ19GSUZPX0NIQU5fQUxMT0MxOiBbODowXS0yLCBb MjQ6MTZdLWNoYW5uZWwzCisJICovCisJU0VUX01DX0ZJRk9fQ0hBTl9BTExPQyhrbWIsIGN0cmxf bm8sIHZjaGFubmVsX2lkLCBmaWZvX3NpemUpOworCisJLyogU2V0IHRocmVzaG9sZCB0byBoYWxm IHRoZSBmaWZvIHNpemUsIGFjdHVhbCBzaXplPXNpemUqMTYgKi8KKwlmaWZvX3J0aHJlc2hvbGQg PSAoKGZpZm9fc2l6ZSkgKiA4KSAmIEJJVF9NQVNLXzE2OworCVNFVF9NQ19GSUZPX1JUSFJFU0hP TEQoa21iLCBjdHJsX25vLCB2Y2hhbm5lbF9pZCwgZmlmb19ydGhyZXNob2xkKTsKKworCS8qIEVu YWJsZSB0aGUgTUMgRklGTyBjaGFubmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFZpcnR1YWwgQ2hh bm5lbCAqLworCWttYl9zZXRfYml0X21pcGkoa21iLCBNSVBJX1RYbV9IU19NQ19GSUZPX0NUUkxf RU4oY3RybF9ubyksCisJCQkgdmNoYW5uZWxfaWQpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX3R4 X2N0cmxfY2ZnKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTggZmdfaWQsCisJCQkgICAg IHN0cnVjdCBtaXBpX2N0cmxfY2ZnICpjdHJsX2NmZykKK3sKKwl1MzIgc3luY19jZmcgPSAwLCBj dHJsID0gMCwgZmdfZW47CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCisJLyogTUlQSV9U WF9IU19TWU5DX0NGRyAqLworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcubGluZV9zeW5jX3Br dF9lbikKKwkJc3luY19jZmcgfD0gTElORV9TWU5DX1BLVF9FTkFCTEU7CisJaWYgKGN0cmxfY2Zn LT50eF9jdHJsX2NmZy5mcmFtZV9jb3VudGVyX2FjdGl2ZSkKKwkJc3luY19jZmcgfD0gRlJBTUVf Q09VTlRFUl9BQ1RJVkU7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy5saW5lX2NvdW50ZXJf YWN0aXZlKQorCQlzeW5jX2NmZyB8PSBMSU5FX0NPVU5URVJfQUNUSVZFOworCWlmIChjdHJsX2Nm Zy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+dl9ibGFua2luZykKKwkJc3luY19jZmcgfD0gRFNJ X1ZfQkxBTktJTkc7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oc2Ff YmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9IU0FfQkxBTktJTkc7CisJaWYgKGN0cmxfY2Zn LT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oYnBfYmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERT SV9IQlBfQkxBTktJTkc7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5o ZnBfYmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9IRlBfQkxBTktJTkc7CisJaWYgKGN0cmxf Y2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5zeW5jX3B1bHNlX2V2ZW50bikKKwkJc3luY19j ZmcgfD0gRFNJX1NZTkNfUFVMU0VfRVZFTlROOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcu dHhfZHNpX2NmZy0+bHBtX2ZpcnN0X3ZzYV9saW5lKQorCQlzeW5jX2NmZyB8PSBEU0lfTFBNX0ZJ UlNUX1ZTQV9MSU5FOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+bHBt X2xhc3RfdmZwX2xpbmUpCisJCXN5bmNfY2ZnIHw9IERTSV9MUE1fTEFTVF9WRlBfTElORTsKKwor CS8qIEVuYWJsZSBmcmFtZSBnZW5lcmF0b3IgKi8KKwlmZ19lbiA9IDEgPDwgZmdfaWQ7CisJc3lu Y19jZmcgfD0gRlJBTUVfR0VOX0VOKGZnX2VuKTsKKworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9j ZmcudHhfYWx3YXlzX3VzZV9oYWN0KQorCQlzeW5jX2NmZyB8PSBBTFdBWVNfVVNFX0hBQ1QoZmdf ZW4pOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfaGFjdF93YWl0X3N0b3ApCisJCXN5 bmNfY2ZnIHw9IEhBQ1RfV0FJVF9TVE9QKGZnX2VuKTsKKworCWRybV9kYmcoJmttYi0+ZHJtLCAi c3luY19jZmc9JWQgZmdfZW49JWRcbiIsIHN5bmNfY2ZnLCBmZ19lbik7CisKKwkvKiBNSVBJX1RY X0hTX0NUUkwgKi8KKworCS8qIHR5cGU6RFNJLCBzb3VyY2U6TENEICovCisJY3RybCA9IEhTX0NU UkxfRU4gfCBUWF9TT1VSQ0U7CisJY3RybCB8PSBMQ0RfVkMoZmdfaWQpOworCWN0cmwgfD0gQUNU SVZFX0xBTkVTKGN0cmxfY2ZnLT5hY3RpdmVfbGFuZXMgLSAxKTsKKwlpZiAoY3RybF9jZmctPnR4 X2N0cmxfY2ZnLnR4X2RzaV9jZmctPmVvdHBfZW4pCisJCWN0cmwgfD0gRFNJX0VPVFBfRU47CisJ aWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oZnBfYmxhbmtfZW4pCisJCWN0 cmwgfD0gRFNJX0NNRF9IRlBfRU47CisKKwkvKjY3IG5zIHN0b3AgdGltZSAqLworCWN0cmwgfD0g SFNFWElUX0NOVCgweDQzKTsKKworCWttYl93cml0ZV9taXBpKGttYiwgTUlQSV9UWG1fSFNfU1lO Q19DRkcoY3RybF9ubyksIHN5bmNfY2ZnKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFht X0hTX0NUUkwoY3RybF9ubyksIGN0cmwpOworfQorCisjaWZkZWYgTUlQSV9UWF9URVNUX1BBVFRF Uk5fR0VORVJBVElPTgorc3RhdGljIHZvaWQgbWlwaV90eF9oc190cF9nZW4oc3RydWN0IGttYl9k cm1fcHJpdmF0ZSAqa21iLCBpbnQgdmMsCisJCQkgICAgICBpbnQgdHBfc2VsLCB1MzIgc3RyaXBl X3dpZHRoLCB1MzIgY29sb3IwLAorCQkJICAgICAgdTMyIGNvbG9yMSwgdTMyIGN0cmxfbm8pCit7 CisJaW50IHZhbCA9IDA7CisKKwkvKiBTZWxlY3QgdGVzdCBwYXR0ZXJuIG1vZGUgb24gdGhlIHZp cnR1YWwgY2hhbm5lbCAqLworCXZhbCA9IFRQX1NFTF9WQ20odmMsIHRwX3NlbCk7CisKKwkvKiBD b25maWd1cmUgdGVzdCBwYXR0ZXJuIGNvbG9ycyAqLworCWttYl93cml0ZV9taXBpKGttYiwgTUlQ SV9UWG1fSFNfVEVTVF9QQVRfQ09MT1IwKGN0cmxfbm8pLCBjb2xvcjApOworCWttYl93cml0ZV9t aXBpKGttYiwgTUlQSV9UWG1fSFNfVEVTVF9QQVRfQ09MT1IxKGN0cmxfbm8pLCBjb2xvcjEpOwor CisJLyogRW5hYmxlIHRlc3QgcGF0dGVybiBnZW5lcmF0aW9uIG9uIHRoZSB2aXJ0dWFsIGNoYW5u ZWwgKi8KKwl2YWwgfD0gVFBfRU5fVkNtKHZjKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElf VFhtX0hTX1RFU1RfUEFUX0NUUkwoY3RybF9ubyksIHZhbCk7CisKK30KKyNlbmRpZgorCitzdGF0 aWMgdTMyIG1pcGlfdHhfaW5pdF9jbnRybChzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJ CQkgICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2NmZyAqY3RybF9jZmcpCit7CisJdTMyIHJldCA9IDA7 CisJdTggYWN0aXZlX3ZjaGFubmVscyA9IDA7CisJdTggZnJhbWVfaWQsIHNlY3Q7CisJdTMyIGJp dHNfcGVyX3BjbGsgPSAwOworCXUzMiB3b3JkX2NvdW50ID0gMDsKKwlzdHJ1Y3QgbWlwaV90eF9m cmFtZV9jZmcgKmZyYW1lOworCisJLyogVGhpcyBpcyB0aGUgb3JkZXIgdG8gaW5pdGlhbGl6ZSBN SVBJIFRYOgorCSAqIDEuIHNldCBmcmFtZSBzZWN0aW9uIHBhcmFtZXRlcnMKKwkgKiAyLiBzZXQg ZnJhbWUgc3BlY2lmaWMgcGFyYW1ldGVycworCSAqIDMuIGNvbm5lY3QgbGNkIHRvIG1pcGkKKwkg KiA0LiBtdWx0aSBjaGFubmVsIGZpZm8gY2ZnCisJICogNS4gc2V0IG1pcGl0eGNjdHJsY2ZnCisJ ICovCisKKwlmb3IgKGZyYW1lX2lkID0gMDsgZnJhbWVfaWQgPCA0OyBmcmFtZV9pZCsrKSB7CisJ CWZyYW1lID0gY3RybF9jZmctPnR4X2N0cmxfY2ZnLmZyYW1lc1tmcmFtZV9pZF07CisKKwkJLyog RmluZCB2YWxpZCBmcmFtZSwgYXNzdW1lIG9ubHkgb25lIHZhbGlkIGZyYW1lICovCisJCWlmIChm cmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogRnJhbWUgU2VjdGlvbiBjb25maWd1 cmF0aW9uICovCisJCS8qIFRPRE8gLSBhc3N1bWUgdGhlcmUgaXMgb25seSBvbmUgdmFsaWQgc2Vj dGlvbiBpbiBhIGZyYW1lLAorCQkgKiBzbyBiaXRzX3Blcl9wY2xrIGFuZCB3b3JkX2NvdW50IGFy ZSBvbmx5IHNldCBvbmNlCisJCSAqLworCQlmb3IgKHNlY3QgPSAwOyBzZWN0IDwgTUlQSV9DVFJM X1ZJUlRVQUxfQ0hBTk5FTFM7IHNlY3QrKykgeworCQkJaWYgKGZyYW1lLT5zZWN0aW9uc1tzZWN0 XSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSBtaXBpX3R4X2ZnX3NlY3Rpb25f Y2ZnKGttYiwgZnJhbWVfaWQsIHNlY3QsCisJCQkJCQkgICAgIGZyYW1lLT5zZWN0aW9uc1tzZWN0 XSwKKwkJCQkJCSAgICAgJmJpdHNfcGVyX3BjbGssCisJCQkJCQkgICAgICZ3b3JkX2NvdW50KTsK KwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQl9CisKKwkJLyogU2V0IGZyYW1lIHNw ZWNpZmljIHBhcmFtZXRlcnMgKi8KKwkJbWlwaV90eF9mZ19jZmcoa21iLCBmcmFtZV9pZCwgY3Ry bF9jZmctPmFjdGl2ZV9sYW5lcywKKwkJCSAgICAgICBiaXRzX3Blcl9wY2xrLCB3b3JkX2NvdW50 LAorCQkJICAgICAgIGN0cmxfY2ZnLT5sYW5lX3JhdGVfbWJwcywgZnJhbWUpOworCisJCWFjdGl2 ZV92Y2hhbm5lbHMrKzsKKworCQkvKiBTdG9wIGl0ZXJhdGluZyBhcyBvbmx5IG9uZSB2aXJ0dWFs IGNoYW5uZWwKKwkJICogc2hhbGwgYmUgdXNlZCBmb3IgTENEIGNvbm5lY3Rpb24KKwkJICovCisJ CWJyZWFrOworCX0KKworCWlmIChhY3RpdmVfdmNoYW5uZWxzID09IDApCisJCXJldHVybiAtRUlO VkFMOworCS8qIE11bHRpLUNoYW5uZWwgRklGTyBDb25maWd1cmF0aW9uICovCisJbWlwaV90eF9t dWx0aWNoYW5uZWxfZmlmb19jZmcoa21iLCBjdHJsX2NmZy0+YWN0aXZlX2xhbmVzLCBmcmFtZV9p ZCk7CisKKwkvKiBGcmFtZSBHZW5lcmF0b3IgRW5hYmxlICovCisJbWlwaV90eF9jdHJsX2NmZyhr bWIsIGZyYW1lX2lkLCBjdHJsX2NmZyk7CisKKyNpZmRlZiBNSVBJX1RYX1RFU1RfUEFUVEVSTl9H RU5FUkFUSU9OCisJbWlwaV90eF9oc190cF9nZW4oa21iLCAwLCBNSVBJX1RYX0hTX1RQX1ZfU1RS SVBFUywKKwkJCSAgMHg4LCAweGZmLCAweGZmMDAsIE1JUElfQ1RSTDYpOworI2VuZGlmCisKKwlk cm1fZGJnKCZrbWItPmRybSwgIklSUV9TVEFUVVMgPSAweCV4XG4iLAorCQkgIEdFVF9NSVBJX1RY X0hTX0lSUV9TVEFUVVMoa21iLCBNSVBJX0NUUkw2KSk7CisKKwlyZXR1cm4gcmV0OworfQorCisj aWZkZWYgRFBIWV9SRUFEX1RFU1RDT0RFCitpbnQgZHBoeV9yZWFkX3Rlc3Rjb2RlKHN0cnVjdCBr bWJfZHJtX3ByaXZhdGUgKmttYiwgaW50IGRwaHlfc2VsLAorCQkgICAgICAgaW50IHRlc3RfY29k ZSkKK3sKKwl1MzIgcmVnX3dyX2RhdGE7CisJdTMyIHJlZ19yZF9kYXRhOworCWludCBkYXRhOwor CisJcmVnX3dyX2RhdGEgPSBkcGh5X3NlbDsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIERQSFlfVEVT VF9DVFJMMSwgcmVnX3dyX2RhdGEpOworCisJZGF0YSA9IDA7CisJcmVnX3dyX2RhdGEgPSAwOwor CXJlZ19yZF9kYXRhID0gMDsKKworCWlmICgoKGRwaHlfc2VsID4+IDAgJiAweDEpID09IDEpIHwg KChkcGh5X3NlbCA+PiA0ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwgPj4gOCAmIDB4 MSkgPT0gMSkpCisJCXJlZ193cl9kYXRhIHw9IGRhdGEgPDwgMDsKKwlpZiAoKChkcGh5X3NlbCA+ PiAxICYgMHgxKSA9PSAxKSB8ICgoZHBoeV9zZWwgPj4gNSAmIDB4MSkgPT0gMSkgfAorCSAgICAo KGRwaHlfc2VsID4+IDkgJiAweDEpID09IDEpKQorCQlyZWdfd3JfZGF0YSB8PSBkYXRhIDw8IDg7 CisJaWYgKCgoZHBoeV9zZWwgPj4gMiAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2VsID4+IDYgJiAw eDEpID09IDEpIHwKKwkgICAgKChkcGh5X3NlbCA+PiAxMCAmIDB4MSkgPT0gMSkpCisJCXJlZ193 cl9kYXRhIHw9IGRhdGEgPDwgMTY7CisJaWYgKCgoZHBoeV9zZWwgPj4gMyAmIDB4MSkgPT0gMSkg fCAoKGRwaHlfc2VsID4+IDcgJiAweDEpID09IDEpIHwKKwkgICAgKChkcGh5X3NlbCA+PiAxMSAm IDB4MSkgPT0gMSkpCisJCXJlZ193cl9kYXRhIHw9IGRhdGEgPDwgMjQ7CisKKwlpZiAoKGRwaHlf c2VsID4+IDAgJiAweGYpID4gMCkKKwkJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1RfRElO MF8zLCByZWdfd3JfZGF0YSk7CisJaWYgKChkcGh5X3NlbCA+PiA0ICYgMHhmKSA+IDApCisJCWtt Yl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0RJTjRfNywgcmVnX3dyX2RhdGEpOworCWlmICgo ZHBoeV9zZWwgPj4gOCAmIDB4MykgPiAwKQorCQlrbWJfd3JpdGVfbWlwaShrbWIsIERQSFlfVEVT VF9ESU44XzksIHJlZ193cl9kYXRhKTsKKworCXJlZ193cl9kYXRhID0gMDsKKwlyZWdfd3JfZGF0 YSA9IChkcGh5X3NlbCB8IGRwaHlfc2VsIDw8IDEyKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIERQ SFlfVEVTVF9DVFJMMSwgcmVnX3dyX2RhdGEpOworCisJcmVnX3dyX2RhdGEgPSAwOworCXJlZ193 cl9kYXRhID0gZHBoeV9zZWwgPDwgMTI7CisJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1Rf Q1RSTDEsIHJlZ193cl9kYXRhKTsKKworCXJlZ193cl9kYXRhID0gMDsKKwlrbWJfd3JpdGVfbWlw aShrbWIsIERQSFlfVEVTVF9DVFJMMSwgcmVnX3dyX2RhdGEpOworCisJZGF0YSA9IHRlc3RfY29k ZSA+PiA4ICYgMHhmOworCXJlZ193cl9kYXRhID0gMDsKKworCWlmICgoKGRwaHlfc2VsID4+IDAg JiAweDEpID09IDEpIHwgKChkcGh5X3NlbCA+PiA0ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBo eV9zZWwgPj4gOCAmIDB4MSkgPT0gMSkpCisJCXJlZ193cl9kYXRhIHw9IGRhdGEgPDwgMDsKKwlp ZiAoKChkcGh5X3NlbCA+PiAxICYgMHgxKSA9PSAxKSB8ICgoZHBoeV9zZWwgPj4gNSAmIDB4MSkg PT0gMSkgfAorCSAgICAoKGRwaHlfc2VsID4+IDkgJiAweDEpID09IDEpKQorCQlyZWdfd3JfZGF0 YSB8PSBkYXRhIDw8IDg7CisJaWYgKCgoZHBoeV9zZWwgPj4gMiAmIDB4MSkgPT0gMSkgfCAoKGRw aHlfc2VsID4+IDYgJiAweDEpID09IDEpIHwKKwkgICAgKChkcGh5X3NlbCA+PiAxMCAmIDB4MSkg PT0gMSkpCisJCXJlZ193cl9kYXRhIHw9IGRhdGEgPDwgMTY7CisJaWYgKCgoZHBoeV9zZWwgPj4g MyAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2VsID4+IDcgJiAweDEpID09IDEpIHwKKwkgICAgKChk cGh5X3NlbCA+PiAxMSAmIDB4MSkgPT0gMSkpCisJCXJlZ193cl9kYXRhIHw9IGRhdGEgPDwgMjQ7 CisKKwlpZiAoKGRwaHlfc2VsID4+IDAgJiAweGYpID4gMCkKKwkJa21iX3dyaXRlX21pcGkoa21i LCBEUEhZX1RFU1RfRElOMF8zLCByZWdfd3JfZGF0YSk7CisJaWYgKChkcGh5X3NlbCA+PiA0ICYg MHhmKSA+IDApCisJCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0RJTjRfNywgcmVnX3dy X2RhdGEpOworCWlmICgoZHBoeV9zZWwgPj4gOCAmIDB4MykgPiAwKQorCQlrbWJfd3JpdGVfbWlw aShrbWIsIERQSFlfVEVTVF9ESU44XzksIHJlZ193cl9kYXRhKTsKKworCXJlZ193cl9kYXRhID0g MDsKKwlyZWdfd3JfZGF0YSA9IGRwaHlfc2VsOworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9U RVNUX0NUUkwxLCByZWdfd3JfZGF0YSk7CisKKwlkYXRhID0gdGVzdF9jb2RlICYgMHhmZjsKKwly ZWdfd3JfZGF0YSA9IDA7CisKKwlpZiAoKChkcGh5X3NlbCA+PiAwICYgMHgxKSA9PSAxKSB8ICgo ZHBoeV9zZWwgPj4gNCAmIDB4MSkgPT0gMSkgfAorCSAgICAoKGRwaHlfc2VsID4+IDggJiAweDEp ID09IDEpKQorCQlyZWdfd3JfZGF0YSB8PSBkYXRhIDw8IDA7CisJaWYgKCgoZHBoeV9zZWwgPj4g MSAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2VsID4+IDUgJiAweDEpID09IDEpIHwKKwkgICAgKChk cGh5X3NlbCA+PiA5ICYgMHgxKSA9PSAxKSkKKwkJcmVnX3dyX2RhdGEgfD0gZGF0YSA8PCA4Owor CWlmICgoKGRwaHlfc2VsID4+IDIgJiAweDEpID09IDEpIHwgKChkcGh5X3NlbCA+PiA2ICYgMHgx KSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwgPj4gMTAgJiAweDEpID09IDEpKQorCQlyZWdfd3Jf ZGF0YSB8PSBkYXRhIDw8IDE2OworCWlmICgoKGRwaHlfc2VsID4+IDMgJiAweDEpID09IDEpIHwg KChkcGh5X3NlbCA+PiA3ICYgMHgxKSA9PSAxKSB8CisJICAgICgoZHBoeV9zZWwgPj4gMTEgJiAw eDEpID09IDEpKQorCQlyZWdfd3JfZGF0YSB8PSBkYXRhIDw8IDI0OworCisJaWYgKChkcGh5X3Nl bCA+PiAwICYgMHhmKSA+IDApCisJCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0RJTjBf MywgcmVnX3dyX2RhdGEpOworCWlmICgoZHBoeV9zZWwgPj4gNCAmIDB4ZikgPiAwKQorCQlrbWJf d3JpdGVfbWlwaShrbWIsIERQSFlfVEVTVF9ESU40XzcsIHJlZ193cl9kYXRhKTsKKwlpZiAoKGRw aHlfc2VsID4+IDggJiAweDMpID4gMCkKKwkJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX1RFU1Rf RElOOF85LCByZWdfd3JfZGF0YSk7CisKKwlyZWdfd3JfZGF0YSA9IDA7CisJcmVnX3dyX2RhdGEg PSAoZHBoeV9zZWwgfCBkcGh5X3NlbCA8PCAxMik7CisJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZ X1RFU1RfQ1RSTDEsIHJlZ193cl9kYXRhKTsKKworCXJlZ193cl9kYXRhID0gMDsKKwlyZWdfd3Jf ZGF0YSA9IGRwaHlfc2VsIDw8IDEyOworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9URVNUX0NU UkwxLCByZWdfd3JfZGF0YSk7CisKKwlyZWdfd3JfZGF0YSA9IDA7CisJa21iX3dyaXRlX21pcGko a21iLCBEUEhZX1RFU1RfQ1RSTDEsIHJlZ193cl9kYXRhKTsKKworCWlmICgoZHBoeV9zZWwgPj4g MCAmIDB4ZikgPiAwKQorCQlyZWdfcmRfZGF0YSA9IGttYl9yZWFkX21pcGkoa21iLCBEUEhZX1RF U1RfRE9VVDBfMyk7CisJaWYgKChkcGh5X3NlbCA+PiA0ICYgMHhmKSA+IDApCisJCXJlZ19yZF9k YXRhID0ga21iX3JlYWRfbWlwaShrbWIsIERQSFlfVEVTVF9ET1VUNF83KTsKKwlpZiAoKGRwaHlf c2VsID4+IDggJiAweDMpID4gMCkKKwkJcmVnX3JkX2RhdGEgPSBrbWJfcmVhZF9taXBpKGttYiwg RFBIWV9URVNUX0RPVVQ4XzkpOworCisJaWYgKCgoZHBoeV9zZWwgPj4gMCAmIDB4MSkgPT0gMSkg fCAoKGRwaHlfc2VsID4+IDQgJiAweDEpID09IDEpIHwKKwkgICAgKChkcGh5X3NlbCA+PiA4ICYg MHgxKSA9PSAxKSkKKwkJZGF0YSA9IHJlZ19yZF9kYXRhID4+IDA7CisJaWYgKCgoZHBoeV9zZWwg Pj4gMSAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2VsID4+IDUgJiAweDEpID09IDEpIHwKKwkgICAg KChkcGh5X3NlbCA+PiA5ICYgMHgxKSA9PSAxKSkKKwkJZGF0YSA9IHJlZ19yZF9kYXRhID4+IDg7 CisJaWYgKCgoZHBoeV9zZWwgPj4gMiAmIDB4MSkgPT0gMSkgfCAoKGRwaHlfc2VsID4+IDYgJiAw eDEpID09IDEpIHwKKwkgICAgKChkcGh5X3NlbCA+PiAxMCAmIDB4MSkgPT0gMSkpCisJCWRhdGEg PSByZWdfcmRfZGF0YSA+PiAxNjsKKwlpZiAoKChkcGh5X3NlbCA+PiAzICYgMHgxKSA9PSAxKSB8 ICgoZHBoeV9zZWwgPj4gNyAmIDB4MSkgPT0gMSkgfAorCSAgICAoKGRwaHlfc2VsID4+IDExICYg MHgxKSA9PSAxKSkKKwkJZGF0YSA9IHJlZ19yZF9kYXRhID4+IDI0OworCisJcmV0dXJuIGRhdGE7 Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdGVzdF9tb2RlX3NlbmQoc3RydWN0IGttYl9kcm1f cHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubywKKwkJCSAgIHUzMiB0ZXN0X2NvZGUsIHUzMiB0ZXN0 X2RhdGEpCit7CisJaWYgKHRlc3RfY29kZSAhPSBURVNUX0NPREVfRlNNX0NPTlRST0wpCisJCWRy bV9kYmcoJmttYi0+ZHJtLAorCQkJInRlc3RfY29kZSA9ICUwMngsIHRlc3RfZGF0YSA9ICUwOHhc biIsIHRlc3RfY29kZSwKKwkJCSB0ZXN0X2RhdGEpOworCS8qIFN0ZXBzIHRvIHNlbmQgdGVzdCBj b2RlOgorCSAqIC0gc2V0IHRlc3RjbGsgSElHSAorCSAqIC0gc2V0IHRlc3RkaW4gd2l0aCB0ZXN0 IGNvZGUKKwkgKiAtIHNldCB0ZXN0ZW4gSElHSAorCSAqIC0gc2V0IHRlc3RjbGsgTE9XCisJICog LSBzZXQgdGVzdGVuIExPVworCSAqLworCisJLyogU2V0IHRlc3RjbGsgaGlnaCAqLworCVNFVF9E UEhZX1RFU1RfQ1RSTDFfQ0xLKGttYiwgZHBoeV9ubyk7CisKKwkvKiBTZXQgdGVzdGRpbiAqLwor CVNFVF9URVNUX0RJTjBfMyhrbWIsIGRwaHlfbm8sIHRlc3RfY29kZSk7CisKKwkvKiBTZXQgdGVz dGVuIGhpZ2ggKi8KKwlTRVRfRFBIWV9URVNUX0NUUkwxX0VOKGttYiwgZHBoeV9ubyk7CisKKwkv KiBTZXQgdGVzdGNsayBsb3cgKi8KKwlDTFJfRFBIWV9URVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlf bm8pOworCisJLyogU2V0IHRlc3RlbiBsb3cgKi8KKwlDTFJfRFBIWV9URVNUX0NUUkwxX0VOKGtt YiwgZHBoeV9ubyk7CisKKwlpZiAodGVzdF9jb2RlKSB7CisJCS8qICBTdGVwcyB0byBzZW5kIHRl c3QgZGF0YToKKwkJICogLSBzZXQgdGVzdGVuIExPVworCQkgKiAtIHNldCB0ZXN0Y2xrIExPVwor CQkgKiAtIHNldCB0ZXN0ZGluIHdpdGggZGF0YQorCQkgKiAtIHNldCB0ZXN0Y2xrIEhJR0gKKwkJ ICovCisKKwkJLyogU2V0IHRlc3RlbiBsb3cgKi8KKwkJQ0xSX0RQSFlfVEVTVF9DVFJMMV9FTihr bWIsIGRwaHlfbm8pOworCisJCS8qIFNldCB0ZXN0Y2xrIGxvdyAqLworCQlDTFJfRFBIWV9URVNU X0NUUkwxX0NMSyhrbWIsIGRwaHlfbm8pOworCisJCS8qIFNldCBkYXRhIGluIHRlc3RkaW4gKi8K KwkJa21iX3dyaXRlX21pcGkoa21iLAorCQkJICAgICAgIERQSFlfVEVTVF9ESU4wXzMgKyAoKGRw aHlfbm8gLyAweDQpICogMHg0KSwKKwkJCSAgICAgICB0ZXN0X2RhdGEgPDwgKChkcGh5X25vICUg NCkgKiA4KSk7CisKKwkJLyogU2V0IHRlc3RjbGsgaGlnaCAqLworCQlTRVRfRFBIWV9URVNUX0NU UkwxX0NMSyhrbWIsIGRwaHlfbm8pOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF90 ZXN0X21vZGVfc3JjX29zY19mcmVxX3RhcmdldF9sb3dfYml0cyhzdHJ1Y3QKKwkJCQkJCQkgICAg ICBrbWJfZHJtX3ByaXZhdGUKKwkJCQkJCQkgICAgICAqa21iLAorCQkJCQkJCSAgICAgIHUzMiBk cGh5X25vLAorCQkJCQkJCSAgICAgIHUzMiBmcmVxKQoreworCS8qIFR5cGljYWwgcmlzZS9mYWxs IHRpbWU9MTY2LCByZWZlciBUYWJsZSAxMjA3IGRhdGFib29rLAorCSAqIHNyX29zY19mcmVxX3Rh cmdldFs3OjBdCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVf U0xFV19SQVRFX0RETF9DWUNMRVMsCisJCSAgICAgICAoZnJlcSAmIDB4N2YpKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIHNldF90ZXN0X21vZGVfc3JjX29zY19mcmVxX3RhcmdldF9oaV9iaXRz KHN0cnVjdAorCQkJCQkJCSAgICAga21iX2RybV9wcml2YXRlCisJCQkJCQkJICAgICAqa21iLAor CQkJCQkJCSAgICAgdTMyIGRwaHlfbm8sCisJCQkJCQkJICAgICB1MzIgZnJlcSkKK3sKKwl1MzIg ZGF0YTsKKworCS8qIEZsYWcgdGhpcyBhcyBoaWdoIG5pYmJsZSAqLworCWRhdGEgPSAoKGZyZXEg Pj4gNikgJiAweDFmKSB8ICgxIDw8IDcpOworCisJLyogVHlwaWNhbCByaXNlL2ZhbGwgdGltZT0x NjYsIHJlZmVyIFRhYmxlIDEyMDcgZGF0YWJvb2ssCisJICogc3Jfb3NjX2ZyZXFfdGFyZ2V0WzEx OjddCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfU0xFV19S QVRFX0RETF9DWUNMRVMsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX3R4X2dldF92Y29f cGFyYW1zKHN0cnVjdCB2Y29fcGFyYW1zICp2Y28pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRSh2Y29fdGFibGUpOyBpKyspIHsKKwkJaWYgKHZjby0+ZnJlcSA8IHZj b190YWJsZVtpXS5mcmVxKSB7CisJCQkqdmNvID0gdmNvX3RhYmxlW2ldOworCQkJcmV0dXJuOwor CQl9CisJfQorCisJV0FSTl9PTkNFKDEsICJJbnZhbGlkIHZjbyBmcmVxID0gJXUgZm9yIFBMTCBz ZXR1cFxuIiwgdmNvLT5mcmVxKTsKK30KKworc3RhdGljIHZvaWQgbWlwaV90eF9wbGxfc2V0dXAo c3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubywKKwkJCSAgICAgIHUzMiBy ZWZfY2xrX21oeiwgdTMyIHRhcmdldF9mcmVxX21oeikKK3sKKwl1MzIgYmVzdF9uID0gMCwgYmVz dF9tID0gMDsKKwl1MzIgbiA9IDAsIG0gPSAwLCBkaXYgPSAwLCBkZWx0YSwgZnJlcSA9IDAsIHRf ZnJlcTsKKwl1MzIgYmVzdF9mcmVxX2RlbHRhID0gMzAwMDsKKworCS8qIHBsbF9yZWZfY2xrOiAt IHZhbGlkIHJhbmdlOiAyfjY0IE1IejsgVHlwaWNhbGx5IDI0IE1IegorCSAqIEZ2Y286IC0gdmFs aWQgcmFuZ2U6IDMyMH4xMjUwIE1IeiAoR2VuMyBELVBIWSkKKwkgKiBGb3V0OiAtIHZhbGlkIHJh bmdlOiA0MH4xMjUwIE1IeiAoR2VuMyBELVBIWSkKKwkgKiBuOiAtIHZhbGlkIHJhbmdlIFswIDE1 XQorCSAqIE46IC0gTiA9IG4gKyAxCisJICogICAgICAtdmFsaWQgcmFuZ2U6IFsxIDE2XQorCSAq ICAgICAgLWNvbmRpdGlvbnM6IC0gKHBsbF9yZWZfY2xrIC8gTikgPj0gMiBNSHoKKwkgKiAgICAg ICAgICAgICAgLShwbGxfcmVmX2NsayAvIE4pIDw9IDggTUh6CisJICogbTogdmFsaWQgcmFuZ2Ug WzYyIDYyM10KKwkgKiBNOiAtIE0gPSBtICsgMgorCSAqICAgICAgLXZhbGlkIHJhbmdlIFs2NCA2 MjVdCisJICogICAgICAtRnZjbyA9IChNL04pICogcGxsX3JlZl9jbGsKKwkgKi8KKwlzdHJ1Y3Qg dmNvX3BhcmFtcyB2Y29fcCA9IHsKKwkJLnJhbmdlID0gMCwKKwkJLmRpdmlkZXIgPSAxLAorCX07 CisKKwl2Y29fcC5mcmVxID0gdGFyZ2V0X2ZyZXFfbWh6OworCW1pcGlfdHhfZ2V0X3Zjb19wYXJh bXMoJnZjb19wKTsKKworCS8qIFNlYXJjaCBwbGwgbiBwYXJhbWV0ZXIgKi8KKwlmb3IgKG4gPSBQ TExfTl9NSU47IG4gPD0gUExMX05fTUFYOyBuKyspIHsKKwkJLyogQ2FsY3VsYXRlIHRoZSBwbGwg aW5wdXQgZnJlcXVlbmN5IGRpdmlzaW9uIHJhdGlvCisJCSAqIG11bHRpcGx5IGJ5IDEwMDAgZm9y IHByZWNpc2lvbiAtCisJCSAqIG5vIGZsb2F0aW5nIHBvaW50LCBhZGQgbiBmb3Igcm91bmRpbmcK KwkJICovCisJCWRpdiA9ICgocmVmX2Nsa19taHogKiAxMDAwKSArIG4pIC8gKG4gKyAxKTsKKwor CQkvKiBGb3VuZCBhIHZhbGlkIG4gcGFyYW1ldGVyICovCisJCWlmICgoZGl2IDwgMjAwMCB8fCBk aXYgPiA4MDAwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNlYXJjaCBwbGwgbSBwYXJhbWV0ZXIg Ki8KKwkJZm9yIChtID0gUExMX01fTUlOOyBtIDw9IFBMTF9NX01BWDsgbSsrKSB7CisJCQkvKiBD YWxjdWxhdGUgdGhlIEZ2Y28oRFBIWSBQTEwgb3V0cHV0IGZyZXF1ZW5jeSkKKwkJCSAqIHVzaW5n IHRoZSBjdXJyZW50IG4sbSBwYXJhbXMKKwkJCSAqLworCQkJZnJlcSA9IGRpdiAqIChtICsgMik7 CisJCQlmcmVxIC89IDEwMDA7CisKKwkJCS8qIFRyaW0gdGhlIHBvdGVudGlhbCBwbGwgZnJlcSB0 byBtYXggc3VwcG9ydGVkICovCisJCQlpZiAoZnJlcSA+IFBMTF9GVkNPX01BWCkKKwkJCQljb250 aW51ZTsKKworCQkJZGVsdGEgPSBhYnMoZnJlcSAtIHRhcmdldF9mcmVxX21oeik7CisKKwkJCS8q IFNlbGVjdCB0aGUgYmVzdCAoY2xvc2VzdCB0byB0YXJnZXQgcGxsIGZyZXEpCisJCQkgKiBuLG0g cGFyYW1ldGVycyBzbyBmYXIKKwkJCSAqLworCQkJaWYgKGRlbHRhIDwgYmVzdF9mcmVxX2RlbHRh KSB7CisJCQkJYmVzdF9uID0gbjsKKwkJCQliZXN0X20gPSBtOworCQkJCWJlc3RfZnJlcV9kZWx0 YSA9IGRlbHRhOworCQkJfQorCQl9CisJfQorCisJLyogUHJvZ3JhbSB2Y29fY250cmwgcGFyYW1l dGVyCisJICogUExMX1ZDT19Db250cm9sWzU6MF0gPSBwbGxfdmNvX2NudHJsX292ciwKKwkgKiBQ TExfVkNPX0NvbnRyb2xbNl0gICA9IHBsbF92Y29fY250cmxfb3ZyX2VuCisJICovCisJdGVzdF9t b2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX1ZDT19DVFJMLCAodmNvX3AucmFu Z2UKKwkJCQkJCQkJfCAoMSA8PCA2KSkpOworCisJLyogUHJvZ3JhbSBtLCBuIHBsbCBwYXJhbWV0 ZXJzICovCisJZHJtX2RiZygma21iLT5kcm0sICJtID0gJWQgbiA9ICVkXG4iLCBiZXN0X20sIGJl c3Rfbik7CisKKwkvKiBQTExfSW5wdXRfRGl2aWRlcl9SYXRpb1szOjBdID0gcGxsX25fb3ZyICov CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX0lOUFVUX0RJVklE RVIsCisJCSAgICAgICAoYmVzdF9uICYgMHgwZikpOworCisJLyogbSAtIGxvdyBuaWJibGUgUExM X0xvb3BfRGl2aWRlcl9SYXRpb1s0OjBdCisJICogcGxsX21fb3ZyWzQ6MF0KKwkgKi8KKwl0ZXN0 X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfRkVFREJBQ0tfRElWSURFUiwK KwkJICAgICAgIChiZXN0X20gJiAweDFmKSk7CisKKwkvKiBtIC0gaGlnaCBuaWJibGUgUExMX0xv b3BfRGl2aWRlcl9SYXRpb1s0OjBdCisJICogcGxsX21fb3ZyWzk6NV0KKwkgKi8KKwl0ZXN0X21v ZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfRkVFREJBQ0tfRElWSURFUiwKKwkJ ICAgICAgICgoYmVzdF9tID4+IDUpICYgMHgxZikgfCBQTExfRkVFREJBQ0tfRElWSURFUl9ISUdI KTsKKworCS8qIEVuYWJsZSBvdmVyd3JpdGUgb2YgbixtIHBhcmFtZXRlcnMgOnBsbF9uX292cl9l biwgcGxsX21fb3ZyX2VuICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NP REVfUExMX09VVFBVVF9DTEtfU0VMLAorCQkgICAgICAgKFBMTF9OX09WUl9FTiB8IFBMTF9NX09W Ul9FTikpOworCisJLyogUHJvZ3JhbSBDaGFyZ2UtUHVtcCBwYXJhbWV0ZXJzICovCisKKwkvKiBw bGxfcHJvcF9jbnRybC1maXhlZCB2YWx1ZXMgZm9yIHByb3BfY250cmwgZnJvbSBEUEhZIGRvYyAq LworCXRfZnJlcSA9IHRhcmdldF9mcmVxX21oeiAqIHZjb19wLmRpdmlkZXI7CisJdGVzdF9tb2Rl X3NlbmQoa21iLCBkcGh5X25vLAorCQkgICAgICAgVEVTVF9DT0RFX1BMTF9QUk9QT1JUSU9OQUxf Q0hBUkdFX1BVTVBfQ1RSTCwKKwkJICAgICAgICgodF9mcmVxID4gMTE1MCkgPyAweDBDIDogMHgw QikpOworCisJLyogcGxsX2ludF9jbnRybC1maXhlZCB2YWx1ZSBmb3IgaW50X2NudHJsIGZyb20g RFBIWSBkb2MgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExf SU5URUdSQUxfQ0hBUkdFX1BVTVBfQ1RSTCwKKwkJICAgICAgIDB4MDApOworCisJLyogcGxsX2dt cF9jbnRybC1maXhlZCB2YWx1ZSBmb3IgZ21wX2NudHJsIGZyb20gRFBIWSBkb2NpICovCisJdGVz dF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX0dNUF9DVFJMLCAweDEwKTsK KworCS8qIHBsbF9jcGJpYXNfY250cmwtZml4ZWQgdmFsdWUgZm9yIGNwYmlhc19jbnRybCBmcm9t IERQSFkgZG9jICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfUExM X0NIQVJHRV9QVU1QX0JJQVMsIDB4MTApOworCisJLyogcGxsX3RoMSAtTG9jayBEZXRlY3RvciBQ aGFzZSBlcnJvciB0aHJlc2hvbGQsCisJICogZG9jdW1lbnQgZ2l2ZXMgZml4ZWQgdmFsdWUKKwkg Ki8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfUEhBU0VfRVJS X0NUUkwsIDB4MDIpOworCisJLyogUExMIExvY2sgQ29uZmlndXJhdGlvbiAqLworCisJLyogcGxs X3RoMiAtIExvY2sgRmlsdGVyIGxlbmd0aCwgZG9jdW1lbnQgZ2l2ZXMgZml4ZWQgdmFsdWUgKi8K Kwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfTE9DS19GSUxURVIs IDB4NjApOworCisJLyogcGxsX3RoMy0gUExMIFVubG9ja2luZyBmaWx0ZXIsIGRvY3VtZW50IGdp dmVzIGZpeGVkIHZhbHVlICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NP REVfUExMX1VOTE9DS19GSUxURVIsIDB4MDMpOworCisJLyogcGxsX2xvY2tfc2VsLVBMTCBMb2Nr IERldGVjdG9yIFNlbGVjdGlvbiwKKwkgKiBkb2N1bWVudCBnaXZlcyBmaXhlZCB2YWx1ZQorCSAq LworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgVEVTVF9DT0RFX1BMTF9MT0NLX0RFVEVD VE9SLCAweDAyKTsKK30KKworI2lmZGVmIERQSFlfR0VUX0ZTTQorc3RhdGljIHZvaWQgZHBoeV9n ZXRfZnNtKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTMyIGRwaHlfbm8pCit7CisJdGVz dF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfRlNNX0NPTlRST0wsIDB4ODApOwor CisJZHJtX2RiZygma21iLT5kcm0sICJkcGh5ICVkIGZzbV9zdGF0ZSA9IDAleFxuIiwgZHBoeV9u bywKKwkJIGttYl9yZWFkX21pcGkoa21iLCBEUEhZX1RFU1RfRE9VVDRfNykpOworfQorI2VuZGlm CisKK3N0YXRpYyB2b2lkIGRwaHlfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qga21iX2RybV9wcml2YXRl ICprbWIsCisJCQkgICAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcgKmNmZywgdTMyIGRwaHlfbm8s CisJCQkgICAgICAgaW50IGFjdGl2ZV9sYW5lcywgZW51bSBkcGh5X21vZGUgbW9kZSkKK3sKKwl1 MzIgdGVzdF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMCwgdmFsOworCWludCBpID0gMDsKKworCWRy bV9pbmZvKCZrbWItPmRybSwKKwkJImRwaHk9JWQgbW9kZT0lZCBhY3RpdmVfbGFuZXM9JWRcbiIs IGRwaHlfbm8sIG1vZGUsCisJCSBhY3RpdmVfbGFuZXMpOworCWRybV9kYmcoJmttYi0+ZHJtLCAi TUlQSV9EUEhZX1NUQVQwXzRfNyA9IDB4JXgpXG4iLAorCQkgIGttYl9yZWFkX21pcGkoa21iLCBN SVBJX0RQSFlfU1RBVDRfNykpOworCisJLyogU2V0IEQtUEhZIGluIHNodXRkb3duIG1vZGUgKi8K KwkvKiBBc3NlcnQgUlNUWiBzaWduYWwgKi8KKwlDTFJfRFBIWV9JTklUX0NUUkwwKGttYiwgZHBo eV9ubywgUkVTRVRaKTsKKworCS8qIEFzc2VydCBTSFVURE9XTlogc2lnbmFsICovCisJQ0xSX0RQ SFlfSU5JVF9DVFJMMChrbWIsIGRwaHlfbm8sIFNIVVRET1dOWik7CisJdmFsID0ga21iX3JlYWRf bWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMCk7CisKKwlkcm1fZGJnKCZrbWItPmRybSwgIkRQSFlf SU5JVF9DVFJMMCA9IDB4JXhcbiIsIHZhbCk7CisKKwkvKiBJbml0IEQtUEhZX24KKwkgKiBQdWxz ZSB0ZXN0Y2xlYXIgc2lnbmFsIHRvIG1ha2Ugc3VyZSB0aGUgZC1waHkgY29uZmlndXJhdGlvbgor CSAqIHN0YXJ0cyBmcm9tIGEgY2xlYW4gYmFzZQorCSAqLworCUNMUl9EUEhZX1RFU1RfQ1RSTDAo a21iLCBkcGh5X25vKTsKKwluZGVsYXkoMTUpOworCVNFVF9EUEhZX1RFU1RfQ1RSTDAoa21iLCBk cGh5X25vKTsKKwluZGVsYXkoMTUpOworCUNMUl9EUEhZX1RFU1RfQ1RSTDAoa21iLCBkcGh5X25v KTsKKwluZGVsYXkoMTUpOworCisJZHJtX2RiZygma21iLT5kcm0sICJEUEhZX1RFU1RfQ1RSTDA9 MHgleFxuIiwKKwkJICBrbWJfcmVhZF9taXBpKGttYiwgRFBIWV9URVNUX0NUUkwwKSk7CisKKwkv KiBTZXQgbWFzdGVybWFjcm8gYml0IC0gTWFzdGVyIG9yIHNsYXZlIG1vZGUgKi8KKwl0ZXN0X2Nv ZGUgPSBURVNUX0NPREVfTVVMVElQTEVfUEhZX0NUUkw7CisKKwkvKiBEUEhZIGhhcyBpdHMgb3du IGNsb2NrIGxhbmUgZW5hYmxlZCAobWFzdGVyKSAqLworCWlmIChtb2RlID09IE1JUElfRFBIWV9N QVNURVIpCisJCXRlc3RfZGF0YSA9IDB4MDE7CisJZWxzZQorCQl0ZXN0X2RhdGEgPSAweDAwOwor CisJLyogU2VuZCB0aGUgdGVzdCBjb2RlIGFuZCBkYXRhICovCisJdGVzdF9tb2RlX3NlbmQoa21i LCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBTZXQgdGhlIGxhbmUgZGF0 YSByYXRlICovCisJZm9yIChpID0gMDsgaSA8IE1JUElfRFBIWV9ERUZBVUxUX0JJVF9SQVRFUzsg aSsrKSB7CisJCWlmIChtaXBpX2hzX2ZyZXFfcmFuZ2VbaV0uZGVmYXVsdF9iaXRfcmF0ZV9tYnBz IDwKKwkJICAgIGNmZy0+bGFuZV9yYXRlX21icHMpCisJCQljb250aW51ZTsKKworCQkvKiBTZW5k IHRoZSB0ZXN0IGNvZGUgYW5kIGRhdGEgKi8KKwkJLyogYml0WzY6MF0gPSBoc2ZyZXFyYW5nZV9v dnIgYml0WzddID0gaHNmcmVxcmFuZ2Vfb3ZyX2VuICovCisJCXRlc3RfY29kZSA9IFRFU1RfQ09E RV9IU19GUkVRX1JBTkdFX0NGRzsKKwkJdGVzdF9kYXRhID0gKG1pcGlfaHNfZnJlcV9yYW5nZVtp XS5oc2ZyZXFyYW5nZV9jb2RlICYgMHg3ZikgfAorCQkgICAgKDEgPDwgNyk7CisJCXRlc3RfbW9k ZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCQlicmVhazsKKwl9 CisKKwkvKiBIaWdoLVNwZWVkIFR4IFNsZXcgUmF0ZSBDYWxpYnJhdGlvbgorCSAqIEJpdFJhdGU6 ID4gMS41IEdicHMgJiYgPD0gMi41IEdicHM6IHNsZXcgcmF0ZSBjb250cm9sIE9GRgorCSAqLwor CWlmIChjZmctPmxhbmVfcmF0ZV9tYnBzID4gMTUwMCkgeworCQkvKiBCeXBhc3Mgc2xldyByYXRl IGNhbGlicmF0aW9uIGFsZ29yaXRobQorCQkgKiBiaXRzWzE6MH0gc3JjYWxfZW5fb3ZyX2VuLCBz cmNhbF9lbl9vdnIKKwkJICovCisJCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JBVEVfT1ZF UlJJREVfQ1RSTDsKKwkJdGVzdF9kYXRhID0gMHgwMjsKKwkJdGVzdF9tb2RlX3NlbmQoa21iLCBk cGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkJLyogRGlzYWJsZSBzbGV3IHJhdGUg Y2FsaWJyYXRpb24gKi8KKwkJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfTE9P UF9DVFJMOworCQl0ZXN0X2RhdGEgPSAweDAwOworCQl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlf bm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKwl9IGVsc2UgaWYgKGNmZy0+bGFuZV9yYXRlX21i cHMgPiAxMDAwKSB7CisJCS8qIEJpdFJhdGU6ID4gMSBHYnBzICYmIDw9IDEuNSBHYnBzOiAtIHNs ZXcgcmF0ZSBjb250cm9sIE9OCisJCSAqIHR5cGljYWwgcmlzZS9mYWxsIHRpbWVzOiAxNjYgcHMK KwkJICovCisKKwkJLyogRG8gbm90IGJ5cGFzcyBzbGV3IHJhdGUgY2FsaWJyYXRpb24gYWxnb3Jp dGhtCisJCSAqIGJpdHNbMTowfT1zcmNhbF9lbl9vdnJfZW4sIHNyY2FsX2VuX292ciwgYml0WzZd PXNyX3JhbmdlCisJCSAqLworCQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX09WRVJS SURFX0NUUkw7CisJCXRlc3RfZGF0YSA9ICgweDAzIHwgKDEgPDwgNikpOworCQl0ZXN0X21vZGVf c2VuZChrbWIsIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKworCQkvKiBFbmFibGUg c2xldyByYXRlIGNhbGlicmF0aW9uICovCisJCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JB VEVfRERMX0xPT1BfQ1RSTDsKKwkJdGVzdF9kYXRhID0gMHgwMTsKKwkJdGVzdF9tb2RlX3NlbmQo a21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkJLyogU2V0IHNyX29zY19m cmVxX3RhcmdldFs2OjBdIGxvdyBuaWJibGUKKwkJICogdHlwaWNhbCByaXNlL2ZhbGwgdGltZT0x NjYsIHJlZmVyIFRhYmxlIDEyMDcgZGF0YWJvb2sKKwkJICovCisJCXRlc3RfY29kZSA9IFRFU1Rf Q09ERV9TTEVXX1JBVEVfRERMX0NZQ0xFUzsKKwkJdGVzdF9kYXRhID0gKDB4NzJmICYgMHg3Zik7 CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOwor CisJCS8qIFNldCBzcl9vc2NfZnJlcV90YXJnZXRbMTE6N10gaGlnaCBuaWJibGUKKwkJICogVHlw aWNhbCByaXNlL2ZhbGwgdGltZT0xNjYsIHJlZmVyIFRhYmxlIDEyMDcgZGF0YWJvb2sKKwkJICov CisJCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JBVEVfRERMX0NZQ0xFUzsKKwkJdGVzdF9k YXRhID0gKCgweDcyZiA+PiA2KSAmIDB4MWYpIHwgKDEgPDwgNyk7CisJCXRlc3RfbW9kZV9zZW5k KGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCX0gZWxzZSB7CisJCS8qIGxh bmVfcmF0ZV9tYnBzIDw9IDEwMDAgTWJwcworCQkgKiBCaXRSYXRlOiAgPD0gMSBHYnBzOgorCQkg KiAtIHNsZXcgcmF0ZSBjb250cm9sIE9OCisJCSAqIC0gdHlwaWNhbCByaXNlL2ZhbGwgdGltZXM6 IDIyNSBwcworCQkgKi8KKworCQkvKiBEbyBub3QgYnlwYXNzIHNsZXcgcmF0ZSBjYWxpYnJhdGlv biBhbGdvcml0aG0gKi8KKwkJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9PVkVSUklE RV9DVFJMOworCQl0ZXN0X2RhdGEgPSAoMHgwMyB8ICgxIDw8IDYpKTsKKwkJdGVzdF9tb2RlX3Nl bmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkJLyogRW5hYmxlIHNs ZXcgcmF0ZSBjYWxpYnJhdGlvbiAqLworCQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRF X0RETF9MT09QX0NUUkw7CisJCXRlc3RfZGF0YSA9IDB4MDE7CisJCXRlc3RfbW9kZV9zZW5kKGtt YiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJCS8qIFR5cGljYWwgcmlzZS9m YWxsIHRpbWU9MjU1LCByZWZlciBUYWJsZSAxMjA3IGRhdGFib29rICovCisJCXRlc3RfY29kZSA9 IFRFU1RfQ09ERV9TTEVXX1JBVEVfRERMX0NZQ0xFUzsKKwkJdGVzdF9kYXRhID0gKDB4NTIzICYg MHg3Zik7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2Rh dGEpOworCisJCS8qIFNldCBzcl9vc2NfZnJlcV90YXJnZXRbMTE6N10gaGlnaCBuaWJibGUgKi8K KwkJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lDTEVTOworCQl0ZXN0X2Rh dGEgPSAoKDB4NTIzID4+IDYpICYgMHgxZikgfCAoMSA8PCA3KTsKKwkJdGVzdF9tb2RlX3NlbmQo a21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwl9CisKKwkvKiBTZXQgY2Zn Y2xrZnJlcXJhbmdlICovCisJdmFsID0gKCgoY2ZnLT5jZmdfY2xrX2toeiAvIDEwMDApIC0gMTcp ICogNCkgJiAweDNmOworCVNFVF9EUEhZX0ZSRVFfQ1RSTDBfMyhrbWIsIGRwaHlfbm8sIHZhbCk7 CisKKwlkcm1fZGJnKCZrbWItPmRybSwgIkRQSFlfRlJFUSA9IDB4JXhcbiIsCisJCSBrbWJfcmVh ZF9taXBpKGttYiwgRFBIWV9GUkVRX0NUUkwwXzMgKyA0KSk7CisJZHJtX2RiZygma21iLT5kcm0s ICJNSVBJX0RQSFlfU1RBVDBfNF83ID0gMHgleClcbiIsCisJCSAga21iX3JlYWRfbWlwaShrbWIs IE1JUElfRFBIWV9TVEFUNF83KSk7CisKKwkvKiBFbmFibGUgY29uZmlnIGNsayBmb3IgdGhlIGNv cnJlc3BvbmRpbmcgZC1waHkgKi8KKwlrbWJfc2V0X2JpdF9taXBpKGttYiwgRFBIWV9DRkdfQ0xL X0VOLCBkcGh5X25vKTsKKworCWRybV9kYmcoJmttYi0+ZHJtLCAiRFBIWV9DRkdfQ0xLX0VOID0g MHgleFxuIiwKKwkJIGttYl9yZWFkX21pcGkoa21iLCBEUEhZX0NGR19DTEtfRU4pKTsKKworCS8q IFBMTCBzZXR1cCAqLworCWlmIChtb2RlID09IE1JUElfRFBIWV9NQVNURVIpIHsKKwkJLyogU2V0 IFBMTCByZWd1bGF0b3IgaW4gYnlwYXNzICovCisJCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9QTExf QU5BTE9HX1BST0c7CisJCXRlc3RfZGF0YSA9IDB4MDE7CisJCXRlc3RfbW9kZV9zZW5kKGttYiwg ZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJCS8qIFBMTCBQYXJhbWV0ZXJzIFNl dHVwICovCisJCW1pcGlfdHhfcGxsX3NldHVwKGttYiwgZHBoeV9ubywgY2ZnLT5yZWZfY2xrX2to eiAvIDEwMDAsCisJCQkJICBjZmctPmxhbmVfcmF0ZV9tYnBzIC8gMik7CisKKwkJLyogU2V0IGNs a3NlbCAqLworCQlrbWJfd3JpdGVfYml0c19taXBpKGttYiwgRFBIWV9JTklUX0NUUkwxLAorCQkJ CSAgICBQTExfQ0xLU0VMXzAsIDIsIDB4MDEpOworCisJCS8qIFNldCBwbGxfc2hhZG93X2NvbnRy b2wgKi8KKwkJa21iX3NldF9iaXRfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMSwgUExMX1NIQURP V19DVFJMKTsKKworCQlkcm1fZGJnKCZrbWItPmRybSwgIkRQSFlfSU5JVF9DVFJMMSA9IDB4JXhc biIsCisJCQkga21iX3JlYWRfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMSkpOworCX0KKworCWRy bV9kYmcoJmttYi0+ZHJtLCAiTUlQSV9EUEhZX1NUQVQwXzRfNyA9IDB4JXgpXG4iLAorCQkgIGtt Yl9yZWFkX21pcGkoa21iLCBNSVBJX0RQSFlfU1RBVDRfNykpOworCisvLyNkZWZpbmUgTUlQSV9U WF9GT1JDRV9WT0QKKyNpZmRlZiBNSVBJX1RYX0ZPUkNFX1ZPRAorI2RlZmluZSBNSVBJX1RYX1ZP RF9MVkwJNDUwCisjZGVmaW5lIFRFU1RfQ09ERV9CQU5ER0FQIDB4MjQKKwkvKiBTZXQgYmFuZGdh cC9WT0QgbGV2ZWwgKi8KKwlzd2l0Y2ggKE1JUElfVFhfVk9EX0xWTCkgeworCWNhc2UgMjAwOgor CQl0ZXN0X2RhdGEgPSAweDAwOworCQlicmVhazsKKwljYXNlIDMwMDoKKwkJdGVzdF9kYXRhID0g MHgyMDsKKwkJYnJlYWs7CisJY2FzZSAzNTA6CisJCXRlc3RfZGF0YSA9IDB4NDA7CisJCWJyZWFr OworCWNhc2UgNDUwOgorCQl0ZXN0X2RhdGEgPSAweDYwOworCQlicmVhazsKKwljYXNlIDQwMDoK KwlkZWZhdWx0OgorCQl0ZXN0X2RhdGEgPSAweDcwOworCQlicmVhazsKKwl9CisJdGVzdF9tb2Rl X3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfQkFOREdBUCwgdGVzdF9kYXRhKTsKKyNlbmRp ZgorCisJLyogU2VuZCBOT1JNQUwgT1BFUkFUSU9OIHRlc3QgY29kZSAqLworCXRlc3RfY29kZSA9 IDB4MDsKKwl0ZXN0X2RhdGEgPSAweDA7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0 ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBDb25maWd1cmUgQkFTRURJUiBmb3IgZGF0YSBs YW5lcworCSAqIE5PVEU6IGJhc2VkaXIgb25seSBhcHBsaWVzIHRvIExBTkVfMCBvZiBlYWNoIEQt UEhZLgorCSAqIFRoZSBvdGhlciBsYW5lcyBrZWVwIHRoZWlyIGRpcmVjdGlvbiBiYXNlZCBvbiB0 aGUgRC1QSFkgdHlwZSwKKwkgKiBlaXRoZXIgUnggb3IgVHguCisJICogYml0c1s1OjBdICAtIEJh c2VEaXI6IDEgPSBSeAorCSAqIGJpdHNbOTo2XSAtIEJhc2VEaXI6IDAgPSBUeAorCSAqLworCWRy bV9kYmcoJmttYi0+ZHJtLCAiTUlQSV9EUEhZX1NUQVQwXzRfNyA9IDB4JXgpXG4iLAorCQkgIGtt Yl9yZWFkX21pcGkoa21iLCBNSVBJX0RQSFlfU1RBVDRfNykpOworCisJa21iX3dyaXRlX2JpdHNf bWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMiwgMCwgOSwgMHgwM2YpOworCW5kZWxheSgxNSk7CisK KwkvKiBFbmFibGUgQ0xPQ0sgTEFORQorCSAqIENsb2NrIGxhbmUgc2hvdWxkIGJlIGVuYWJsZWQg cmVnYXJkbGVzcyBvZiB0aGUgZGlyZWN0aW9uCisJICogc2V0IGZvciB0aGUgRC1QSFkgKFJ4L1R4 KQorCSAqLworCWttYl9zZXRfYml0X21pcGkoa21iLCBEUEhZX0lOSVRfQ1RSTDIsIDEyICsgZHBo eV9ubyk7CisKKwlkcm1fZGJnKCZrbWItPmRybSwgIkRQSFlfSU5JVF9DVFJMMiA9IDB4JXhcbiIs CisJCSBrbWJfcmVhZF9taXBpKGttYiwgRFBIWV9JTklUX0NUUkwyKSk7CisKKwkvKiBFbmFibGUg REFUQSBMQU5FUyAqLworCWttYl93cml0ZV9iaXRzX21pcGkoa21iLCBEUEhZX0VOQUJMRSwgZHBo eV9ubyAqIDIsIDIsCisJCQkgICAgKCgxIDw8IGFjdGl2ZV9sYW5lcykgLSAxKSk7CisKKwlkcm1f ZGJnKCZrbWItPmRybSwKKwkJIkRQSFlfRU5BQkxFID0gMHgleFxuIiwga21iX3JlYWRfbWlwaShr bWIsIERQSFlfRU5BQkxFKSk7CisJbmRlbGF5KDE1KTsKKworCS8qIFRha2UgRC1QSFkgb3V0IG9m IHNodXRkb3duIG1vZGUgKi8KKwkvKiBEZWFzc2VydCBTSFVURE9XTlogc2lnbmFsICovCisJZHJt X2RiZygma21iLT5kcm0sICJNSVBJX0RQSFlfU1RBVDBfNF83ID0gMHgleClcbiIsCisJCSBrbWJf cmVhZF9taXBpKGttYiwgTUlQSV9EUEhZX1NUQVQ0XzcpKTsKKwlTRVRfRFBIWV9JTklUX0NUUkww KGttYiwgZHBoeV9ubywgU0hVVERPV05aKTsKKwluZGVsYXkoMTUpOworCisJLyogRGVhc3NlcnQg UlNUWiBzaWduYWwgKi8KKwlTRVRfRFBIWV9JTklUX0NUUkwwKGttYiwgZHBoeV9ubywgUkVTRVRa KTsKKwlkcm1fZGJnKCZrbWItPmRybSwgIkRQSFlfSU5JVF9DVFJMMCA9IDB4JXhcbiIsCisJCSBr bWJfcmVhZF9taXBpKGttYiwgRFBIWV9JTklUX0NUUkwwKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRw aHlfd2FpdF9mc20oc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubywKKwkJ CSAgZW51bSBkcGh5X3R4X2ZzbSBmc21fc3RhdGUpCit7CisJZW51bSBkcGh5X3R4X2ZzbSB2YWwg PSBEUEhZX1RYX1BPV0VSRFdOOworCWludCBpID0gMDsKKwlpbnQgc3RhdHVzID0gMTsKKworCWRv IHsKKwkJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfRlNNX0NPTlRST0ws IDB4ODApOworCisJCXZhbCA9IEdFVF9URVNUX0RPVVQ0Xzcoa21iLCBkcGh5X25vKTsKKwkJaSsr OworCQlpZiAoaSA+IFRJTUVPVVQpIHsKKwkJCXN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJfQor CX0gd2hpbGUgKHZhbCAhPSBmc21fc3RhdGUpOworCisJZHJtX2RiZygma21iLT5kcm0sICIlczog ZHBoeSAlZCB2YWwgPSAleFxuIiwgX19mdW5jX18sIGRwaHlfbm8sIHZhbCk7CisJZHJtX2luZm8o JmttYi0+ZHJtLCAiKioqKioqKioqKiBEUEhZICVkIFdBSVRfRlNNICVzICoqKioqKioqKipcbiIs CisJCSBkcGh5X25vLCBzdGF0dXMgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIik7Cit9CisKK3N0YXRp YyB2b2lkIHdhaXRfaW5pdF9kb25lKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTMyIGRw aHlfbm8sCisJCQkgICB1MzIgYWN0aXZlX2xhbmVzKQoreworCXUzMiBzdG9wc3RhdGVkYXRhID0g MDsKKwl1MzIgZGF0YV9sYW5lcyA9ICgxIDw8IGFjdGl2ZV9sYW5lcykgLSAxOworCWludCBpID0g MCwgdmFsOworCWludCBzdGF0dXMgPSAxOworCisJZHJtX2RiZygma21iLT5kcm0sICJkcGh5PSVk IGFjdGl2ZV9sYW5lcz0lZCBkYXRhX2xhbmVzPSVkXG4iLCBkcGh5X25vLAorCQkgYWN0aXZlX2xh bmVzLCBkYXRhX2xhbmVzKTsKKworCWRvIHsKKwkJdmFsID0ga21iX3JlYWRfbWlwaShrbWIsIE1J UElfRFBIWV9TVEFUNF83KTsKKwkJc3RvcHN0YXRlZGF0YSA9IEdFVF9TVE9QU1RBVEVfREFUQShr bWIsIGRwaHlfbm8pICYgZGF0YV9sYW5lczsKKworCQkvKiBUT0RPLW5lZWQgdG8gYWRkIGEgdGlt ZSBvdXQgYW5kIHJldHVybiBmYWlsdXJlICovCisJCWkrKzsKKworCQlpZiAoaSA+IFRJTUVPVVQp IHsKKwkJCXN0YXR1cyA9IDA7CisKKwkJCWRybV9pbmZvKCZrbWItPmRybSwKKwkJCQkiISBXQUlU X0lOSVRfRE9ORTogVElNSU5HIE9VVCEoZXJyX3N0YXQ9JWQpIiwKKwkJCQkga21iX3JlYWRfbWlw aShrbWIsIE1JUElfRFBIWV9FUlJfU1RBVDZfNykpOworCQkJZHJtX2RiZygma21iLT5kcm0sCisJ CQkJIk1JUElfRFBIWV9TVEFUMF80XzcgPSAweCV4KVxuIiwgdmFsKTsKKwkJCWRybV9kYmcoJmtt Yi0+ZHJtLAorCQkJCSJzdG9wZGF0YSA9IDB4JXggZGF0YV9sYW5lcz0weCV4XG4iLAorCQkJCSBz dG9wc3RhdGVkYXRhLCBkYXRhX2xhbmVzKTsKKworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA8 IDMpIHsKKwkJCWRybV9kYmcoJmttYi0+ZHJtLAorCQkJCSJzdG9wZGF0YSA9IDB4JXggZGF0YV9s YW5lcz0weCV4XG4iLAorCQkJCSBzdG9wc3RhdGVkYXRhLCBkYXRhX2xhbmVzKTsKKwkJCWRybV9k YmcoJmttYi0+ZHJtLAorCQkJCSJNSVBJX0RQSFlfU1RBVDBfNF83ID0gMHgleClcbiIsIHZhbCk7 CisJCX0KKwl9IHdoaWxlIChzdG9wc3RhdGVkYXRhICE9IGRhdGFfbGFuZXMpOworCisJZHJtX2lu Zm8oJmttYi0+ZHJtLCAiKioqKioqKioqKiBEUEhZICVkIElOSVQgLSAlcyAqKioqKioqKioqXG4i LAorCQkgZHBoeV9ubywgc3RhdHVzID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpOworfQorCitzdGF0 aWMgdm9pZCB3YWl0X3BsbF9sb2NrKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTMyIGRw aHlfbm8pCit7CisJaW50IGkgPSAwOworCWludCBzdGF0dXMgPSAxOworCisJZG8geworCQkvKiBU T0RPLW5lZWQgdG8gYWRkIGEgdGltZSBvdXQgYW5kIHJldHVybiBmYWlsdXJlICovCisJCWkrKzsK KwkJaWYgKGkgPiBUSU1FT1VUKSB7CisJCQlzdGF0dXMgPSAwOworCisJCQlkcm1faW5mbygma21i LT5kcm0sICIlczogdGltaW5nIG91dCIsIF9fZnVuY19fKTsKKwkJCWRybV9kYmcoJmttYi0+ZHJt LAorCQkJCSIlcyA6IFBMTF9MT0NLID0gMHgleCAiLCBfX2Z1bmNfXywKKwkJCQlrbWJfcmVhZF9t aXBpKGttYiwgRFBIWV9QTExfTE9DSykpOworCisJCQlicmVhazsKKwkJfQorCisJCWlmICgoaSAl IDEwMCkgPT0gMCkKKwkJCWRybV9kYmcoJmttYi0+ZHJtLAorCQkJCSIlcyA6IFBMTF9MT0NLID0g MHgleFxuIiwgX19mdW5jX18sCisJCQkJa21iX3JlYWRfbWlwaShrbWIsIERQSFlfUExMX0xPQ0sp KTsKKwl9IHdoaWxlICghR0VUX1BMTF9MT0NLKGttYiwgZHBoeV9ubykpOworCisJZHJtX2luZm8o JmttYi0+ZHJtLCAiKioqKiogUExMIExvY2tlZCBmb3IgRFBIWSAlZCAtICVzICoqKioqXG4iLAor CQkgZHBoeV9ubywgc3RhdHVzID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpOworfQorCitzdGF0aWMg dTMyIG1pcGlfdHhfaW5pdF9kcGh5KHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwKKwkJCSAg ICAgc3RydWN0IG1pcGlfY3RybF9jZmcgKmNmZykKK3sKKwl1MzIgZHBoeV9ubyA9IE1JUElfRFBI WTY7CisKKwlkcm1faW5mbygma21iLT5kcm0sCisJCSJhY3RpdmVfbGFuZXM9JWQgbGFuZV9yYXRl PSVkXG4iLCBjZmctPmFjdGl2ZV9sYW5lcywKKwkJTUlQSV9UWF9MQU5FX0RBVEFfUkFURV9NQlBT KTsKKworCS8qIE11bHRpcGxlIEQtUEhZcyBuZWVkZWQgKi8KKwlpZiAoY2ZnLT5hY3RpdmVfbGFu ZXMgPiBNSVBJX0RQSFlfRF9MQU5FUykgeworCQkvKgorCQkgKkluaXRpYWxpemF0aW9uIGZvciBU eCBhZ2dyZWdhdGlvbiBtb2RlIGlzIGRvbmUgYWNjb3JkaW5nIHRvCisJCSAqYS4gc3RhcnQgaW5p dCBQSFkxCisJCSAqYi4gcG9sbCBmb3IgUEhZMSBGU00gc3RhdGUgTE9DSworCQkgKiAgIGIxLiBy ZWcgYWRkciAweDAzWzM6MF0gLSBzdGF0ZV9tYWluWzM6MF0gPT0gNSAoTE9DSykKKwkJICpjLiBw b2xsIGZvciBQSFkxIGNhbGlicmF0aW9ucyBkb25lIDoKKwkJICogICBjMS4gdGVybWluYXRpb24g Y2FsaWJyYXRpb24gbG93ZXIgc2VjdGlvbjogYWRkciAweDIyWzVdCisJCSAqICAgLSByZXNjYWxf ZG9uZQorCQkgKiAgIGMyLiBzbGV3cmF0ZSBjYWxpYnJhdGlvbiAoaWYgZGF0YSByYXRlIDwgPSAx NTAwIE1icHMpOgorCQkgKiAgICAgYWRkciAweEE3WzM6Ml0gLSBzcmNhbF9kb25lLCBzcl9maW5p c2hlZAorCQkgKmQuIHN0YXJ0IGluaXQgUEhZMAorCQkgKmUuIHBvbGwgZm9yIFBIWTAgc3RvcHN0 YXRlCisJCSAqZi4gcG9sbCBmb3IgUEhZMSBzdG9wc3RhdGUKKwkJICovCisJCS8qIFBIWSAjTisx ICgnc2xhdmUnKSAqLworCisJCWRwaHlfaW5pdF9zZXF1ZW5jZShrbWIsIGNmZywgZHBoeV9ubyAr IDEsCisJCQkJICAgKGNmZy0+YWN0aXZlX2xhbmVzIC0gTUlQSV9EUEhZX0RfTEFORVMpLAorCQkJ CSAgIE1JUElfRFBIWV9TTEFWRSk7CisJCWRwaHlfd2FpdF9mc20oa21iLCBkcGh5X25vICsgMSwg RFBIWV9UWF9MT0NLKTsKKworCQkvKiBQSFkgI04gbWFzdGVyICovCisJCWRwaHlfaW5pdF9zZXF1 ZW5jZShrbWIsIGNmZywgZHBoeV9ubywgTUlQSV9EUEhZX0RfTEFORVMsCisJCQkJICAgTUlQSV9E UEhZX01BU1RFUik7CisKKwkJLyogV2FpdCBmb3IgRFBIWSBpbml0IHRvIGNvbXBsZXRlICovCisJ CXdhaXRfaW5pdF9kb25lKGttYiwgZHBoeV9ubywgTUlQSV9EUEhZX0RfTEFORVMpOworCQl3YWl0 X2luaXRfZG9uZShrbWIsIGRwaHlfbm8gKyAxLAorCQkJICAgICAgIGNmZy0+YWN0aXZlX2xhbmVz IC0gTUlQSV9EUEhZX0RfTEFORVMpOworCQl3YWl0X3BsbF9sb2NrKGttYiwgZHBoeV9ubyk7CisJ CXdhaXRfcGxsX2xvY2soa21iLCBkcGh5X25vICsgMSk7CisJCWRwaHlfd2FpdF9mc20oa21iLCBk cGh5X25vLCBEUEhZX1RYX0lETEUpOworCX0gZWxzZSB7CQkvKiBTaW5nbGUgRFBIWSAqLworCQlk cGh5X2luaXRfc2VxdWVuY2Uoa21iLCBjZmcsIGRwaHlfbm8sIGNmZy0+YWN0aXZlX2xhbmVzLAor CQkJCSAgIE1JUElfRFBIWV9NQVNURVIpOworCQlkcGh5X3dhaXRfZnNtKGttYiwgZHBoeV9ubywg RFBIWV9UWF9JRExFKTsKKwkJd2FpdF9pbml0X2RvbmUoa21iLCBkcGh5X25vLCBjZmctPmFjdGl2 ZV9sYW5lcyk7CisJCXdhaXRfcGxsX2xvY2soa21iLCBkcGh5X25vKTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKwordm9pZCBjb25uZWN0X2xjZF90b19taXBpKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUg KmttYikKK3sKKwkvKiBESVNBQkxFIE1JUEktPkNJRiBDT05ORUNUSU9OICovCisJa21iX3dyaXRl X21zc2NhbShrbWIsIE1TU19NSVBJX0NJRl9DRkcsIDApOworCisJLyogRU5BQkxFIExDRC0+TUlQ SSBDT05ORUNUSU9OICovCisJa21iX3dyaXRlX21zc2NhbShrbWIsIE1TU19MQ0RfTUlQSV9DRkcs IDEpOworCisJLyogRElTQUJMRSBMQ0QtPkNJRiBMT09QQkFDSyAqLworCWttYl93cml0ZV9tc3Nj YW0oa21iLCBNU1NfTE9PUEJBQ0tfQ0ZHLCAwKTsKK30KKworaW50IGttYl9kc2lfaHdfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sK KwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIgPSB0b19rbWIoZGV2KTsKKwl1NjQgZGF0YV9y YXRlOworCisJbWlwaV90eF9pbml0X2NmZy5hY3RpdmVfbGFuZXMgPSBNSVBJX1RYX0FDVElWRV9M QU5FUzsKKworCWlmIChtb2RlICE9IE5VTEwpIHsKKwkJbWlwaV90eF9mcmFtZTBfc2VjdF9jZmcu d2lkdGhfcGl4ZWxzID0gbW9kZS0+Y3J0Y19oZGlzcGxheTsKKwkJbWlwaV90eF9mcmFtZTBfc2Vj dF9jZmcuaGVpZ2h0X2xpbmVzID0gbW9kZS0+Y3J0Y192ZGlzcGxheTsKKwkJbWlwaXR4X2ZyYW1l MF9jZmcudnN5bmNfd2lkdGggPQorCQkgICAgbW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5j cnRjX3ZzeW5jX3N0YXJ0OworCQltaXBpdHhfZnJhbWUwX2NmZy52X2JhY2twb3JjaCA9CisJCSAg ICBtb2RlLT5jcnRjX3Z0b3RhbCAtIG1vZGUtPmNydGNfdnN5bmNfZW5kOworCQltaXBpdHhfZnJh bWUwX2NmZy52X2Zyb250cG9yY2ggPQorCQkgICAgbW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1v ZGUtPmNydGNfdmRpc3BsYXk7CisJCW1pcGl0eF9mcmFtZTBfY2ZnLmhzeW5jX3dpZHRoID0KKwkJ ICAgIG1vZGUtPmNydGNfaHN5bmNfZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKKwkJbWlw aXR4X2ZyYW1lMF9jZmcuaF9iYWNrcG9yY2ggPQorCQkgICAgbW9kZS0+Y3J0Y19odG90YWwgLSBt b2RlLT5jcnRjX2hzeW5jX2VuZDsKKwkJbWlwaXR4X2ZyYW1lMF9jZmcuaF9mcm9udHBvcmNoID0K KwkJICAgIG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5OworCisJ CS8qIExhbmUgcmF0ZSA9ICh2dG90YWwqaHRvdGFsKmZwcypicHApLzQgLyAxMDAwMDAwCisJCSAq IHRvIGNvbnZlcnQgdG8gTWJwcworCQkgKi8KKwkJZGF0YV9yYXRlID0gKCgoKHUzMikgbW9kZS0+ Y3J0Y192dG90YWwgKgorCQkJCSh1MzIpIG1vZGUtPmNydGNfaHRvdGFsKSAqCisJCQkJKHUzMiko ZHJtX21vZGVfdnJlZnJlc2gobW9kZSkpICoKKwkJCSAgICAgIE1JUElfVFhfQlBQKSAvIG1pcGlf dHhfaW5pdF9jZmcuYWN0aXZlX2xhbmVzKSAvCisJCSAgICAxMDAwMDAwOworCisJCWRybV9pbmZv KCZrbWItPmRybSwgImh0b3RhbD0lZCB2dG90YWw9JWQgcmVmcmVzaD0lZFxuIiwKKwkJCSBtb2Rl LT5jcnRjX2h0b3RhbCwgbW9kZS0+Y3J0Y192dG90YWwsCisJCQkgZHJtX21vZGVfdnJlZnJlc2go bW9kZSkpOworCQlkcm1faW5mbygma21iLT5kcm0sICJkYXRhX3JhdGU9JXUgYWN0aXZlX2xhbmVz PSVkXG4iLAorCQkJICh1MzIpIGRhdGFfcmF0ZSwgbWlwaV90eF9pbml0X2NmZy5hY3RpdmVfbGFu ZXMpOworCisJCS8qIFdoZW4gbGF0ZSByYXRlIDwgODAwLCBtb2Rlc2V0IGZhaWxzIHdpdGggNCBs YW5lcywKKwkJICogc28gc3dpdGNoIHRvIDIgbGFuZXMKKwkJICovCisJCWlmIChkYXRhX3JhdGUg PCA4MDApIHsKKwkJCW1pcGlfdHhfaW5pdF9jZmcuYWN0aXZlX2xhbmVzID0gMjsKKwkJCW1pcGlf dHhfaW5pdF9jZmcubGFuZV9yYXRlX21icHMgPSBkYXRhX3JhdGUgKiAyOworCQl9IGVsc2Ugewor CQkJbWlwaV90eF9pbml0X2NmZy5sYW5lX3JhdGVfbWJwcyA9IGRhdGFfcmF0ZTsKKwkJfQorCQlk cm1faW5mbygma21iLT5kcm0sCisJCQkibGFuZSByYXRlPSVkXG4iLCBtaXBpX3R4X2luaXRfY2Zn LmxhbmVfcmF0ZV9tYnBzKTsKKwkJZHJtX2RiZygma21iLT5kcm0sCisJCSAgICAgInZmcD0gJWQg dmJwPSAlZCB2c3ljX2xlbj0lZCBoZnA9JWQgaGJwPSVkIGhzeW5jX2xlbj0lZCBsYW5lLXJhdGU9 JWQiLAorCQkgICAgIG1pcGl0eF9mcmFtZTBfY2ZnLnZfZnJvbnRwb3JjaCwKKwkJICAgICBtaXBp dHhfZnJhbWUwX2NmZy52X2JhY2twb3JjaCwKKwkJICAgICBtaXBpdHhfZnJhbWUwX2NmZy52c3lu Y193aWR0aCwKKwkJICAgICBtaXBpdHhfZnJhbWUwX2NmZy5oX2Zyb250cG9yY2gsCisJCSAgICAg bWlwaXR4X2ZyYW1lMF9jZmcuaF9iYWNrcG9yY2gsCisJCSAgICAgbWlwaXR4X2ZyYW1lMF9jZmcu aHN5bmNfd2lkdGgsCisJCSAgICAgbWlwaV90eF9pbml0X2NmZy5sYW5lX3JhdGVfbWJwcyk7CisK Kwl9CisKKwlpZiAoaHdfaW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJa21iX3dyaXRlX21p cGkoa21iLCBEUEhZX0VOQUJMRSwgMCk7CisJa21iX3dyaXRlX21pcGkoa21iLCBEUEhZX0lOSVRf Q1RSTDAsIDApOworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9JTklUX0NUUkwxLCAwKTsKKwlr bWJfd3JpdGVfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMiwgMCk7CisKKwkvKiBJbml0aWFsaXpl IG1pcGkgY29udHJvbGxlciAqLworCW1pcGlfdHhfaW5pdF9jbnRybChrbWIsICZtaXBpX3R4X2lu aXRfY2ZnKTsKKworCS8qIERwaHkgaW5pdGlhbGl6YXRpb24gKi8KKwltaXBpX3R4X2luaXRfZHBo eShrbWIsICZtaXBpX3R4X2luaXRfY2ZnKTsKKwlkcm1fZGJnKCZrbWItPmRybSwgIklSUV9TVEFU VVMgPSAweCV4XG4iLAorCQkgR0VUX01JUElfVFhfSFNfSVJRX1NUQVRVUyhrbWIsIE1JUElfQ1RS TDYpKTsKKworCWNvbm5lY3RfbGNkX3RvX21pcGkoa21iKTsKKworI2lmZGVmIE1JUElfVFhfVEVT VF9QQVRURVJOX0dFTkVSQVRJT04KKwltaXBpX3R4X2hzX3RwX2dlbihrbWIsIDAsIE1JUElfVFhf SFNfVFBfVl9TVFJJUEVTLAorCQkJICAweDE1LCAweGZmLCAweGZmMDAsIE1JUElfQ1RSTDYpOwor CisJZHJtX2RiZygma21iLT5kcm0sICJJUlFfU1RBVFVTID0gMHgleFxuIiwKKwkJIEdFVF9NSVBJ X1RYX0hTX0lSUV9TVEFUVVMoa21iLCBNSVBJX0NUUkw2KSk7CisjZW5kaWYgLy9NSVBJX1RYX1RF U1RfUEFUVEVSTl9HRU5FUkFUSU9OCisKKwlod19pbml0aWFsaXplZCA9IHRydWU7CisKKwlkcm1f ZGJnKCZrbWItPmRybSwgIk1JUElfVFhtX0hTX0NUUkwgPSAweCV4XG4iLAorCQkga21iX3JlYWRf bWlwaShrbWIsIE1JUElfVFhtX0hTX0NUUkwoNikpKTsKKwlkcm1fZGJnKCZrbWItPmRybSwgIk1J UEkgTE9PUCBCQUNLID0gJXhcbiIsCisJCSBrbWJfcmVhZF9taXBpKGttYiwgTUlQSV9DVFJMX0RJ R19MT09QQkFDSykpOworCWRybV9pbmZvKCZrbWItPmRybSwgIm1pcGkgaHdfaW5pdGlhbGl6ZWQg PSAlZFxuIiwgaHdfaW5pdGlhbGl6ZWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBrbWJfZHNp X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkK K3sKKwlzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7CisJc3RydWN0IGttYl9jb25uZWN0b3IgKmttYl9jb25uZWN0b3I7CisJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3Qga21iX2RzaV9ob3N0ICpob3N0OworCWludCBy ZXQgPSAwOworCisJa21iX2RzaSA9IGt6YWxsb2Moc2l6ZW9mKCprbWJfZHNpKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFrbWJfZHNpKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIGtt Yl9kc2lcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlrbWJfY29ubmVjdG9yID0ga3ph bGxvYyhzaXplb2YoKmttYl9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWttYl9jb25u ZWN0b3IpIHsKKwkJa2ZyZWUoa21iX2RzaSk7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9j YXRlIGttYl9jb25uZWN0b3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlrbWJfZHNp LT5hdHRhY2hlZF9jb25uZWN0b3IgPSBrbWJfY29ubmVjdG9yOworCisJaG9zdCA9IGttYl9kc2lf aG9zdF9pbml0KGRldiwga21iX2RzaSk7CisJaWYgKCFob3N0KSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIGFsbG9jYXRlIGhvc3RcbiIpOworCQlrZnJlZShrbWJfZHNpKTsKKwkJa2ZyZWUoa21i X2Nvbm5lY3Rvcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWttYl9kc2ktPmRzaV9ob3N0 ID0gaG9zdDsKKwljb25uZWN0b3IgPSAma21iX2Nvbm5lY3Rvci0+YmFzZTsKKwllbmNvZGVyID0g JmttYl9kc2ktPmJhc2U7CisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAxOworCWVuY29kZXIt PnBvc3NpYmxlX2Nsb25lcyA9IDA7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2Rlciwg JmttYl9kc2lfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfRFNJLAorCQkJICJNSVBJLURTSSIpOwor CisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAma21iX2RzaV9jb25uZWN0b3Jf ZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKKworCWRybV9jb25uZWN0b3Jf aGVscGVyX2FkZChjb25uZWN0b3IsICZrbWJfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwor CisJZHJtX2luZm8oZGV2LCAiY29ubmVjdG9yID0gJXMgZW5jb2RlciA9ICVzXG4iLCBjb25uZWN0 b3ItPm5hbWUsCisJCSBlbmNvZGVyLT5uYW1lKTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfYXR0 YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKKwlkcm1faW5mbyhkZXYsICJjb25uZWN0 b3ItPmVuY29kZXIgPSAweCVwIHJldCA9ICVkXG4iLAorCQkgY29ubmVjdG9yLT5lbmNvZGVyLAor CQkgcmV0KTsKKworCS8qIExpbmsgZHJtX2JyaWRnZSB0byBlbmNvZGVyICovCisJcmV0ID0gZHJt X2JyaWRnZV9hdHRhY2goZW5jb2RlciwgYnJpZGdlLCBOVUxMLCAwKTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8gTUlQSVxuIik7CisJCWRybV9l bmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJCXJldHVybiByZXQ7CisJfQorCWRybV9pbmZvKGRl diwgIkJyaWRnZSBhdHRhY2hlZCA6IFNVQ0NFU1NcbiIpOworCXJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0va21i L2ttYl9kc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmJlYWY0Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmgKQEAgLTAsMCAr MSwzNzAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKyAqCisg KiBDb3B5cmlnaHQgwqkgMjAxOS0yMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRl ZiBfX0tNQl9EU0lfSF9fCisjZGVmaW5lIF9fS01CX0RTSV9IX18KKworI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX21vZGVzLmg+CisjaW5jbHVkZSAia21iX2Rydi5oIgorCisvKiBNSVBJIFRYIENGRyovCisj ZGVmaW5lIE1JUElfVFhfTEFORV9EQVRBX1JBVEVfTUJQUyA4OTEKKyNkZWZpbmUgTUlQSV9UWF9S RUZfQ0xLX0tIWiAgICAgICAgIDI0MDAwCisjZGVmaW5lIE1JUElfVFhfQ0ZHX0NMS19LSFogICAg ICAgICAyNDAwMAorI2RlZmluZSBNSVBJX1RYX0JQUAkJICAgIDI0CisKKy8qIERQSFkgVHggdGVz dCBjb2RlcyovCisjZGVmaW5lIFRFU1RfQ09ERV9GU01fQ09OVFJPTAkJCQkweDAzCisjZGVmaW5l IFRFU1RfQ09ERV9NVUxUSVBMRV9QSFlfQ1RSTAkJCTB4MEMKKyNkZWZpbmUgVEVTVF9DT0RFX1BM TF9QUk9QT1JUSU9OQUxfQ0hBUkdFX1BVTVBfQ1RSTAkweDBFCisjZGVmaW5lIFRFU1RfQ09ERV9Q TExfSU5URUdSQUxfQ0hBUkdFX1BVTVBfQ1RSTAkJMHgwRgorI2RlZmluZSBURVNUX0NPREVfUExM X1ZDT19DVFJMCQkJCTB4MTIKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9HTVBfQ1RSTAkJCQkweDEz CisjZGVmaW5lIFRFU1RfQ09ERV9QTExfUEhBU0VfRVJSX0NUUkwJCQkweDE0CisjZGVmaW5lIFRF U1RfQ09ERV9QTExfTE9DS19GSUxURVIJCQkweDE1CisjZGVmaW5lIFRFU1RfQ09ERV9QTExfVU5M T0NLX0ZJTFRFUgkJCTB4MTYKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9JTlBVVF9ESVZJREVSCQkJ MHgxNworI2RlZmluZSBURVNUX0NPREVfUExMX0ZFRURCQUNLX0RJVklERVIJCQkweDE4CisjZGVm aW5lICAgUExMX0ZFRURCQUNLX0RJVklERVJfSElHSAkJCSgxIDw8IDcpCisjZGVmaW5lIFRFU1Rf Q09ERV9QTExfT1VUUFVUX0NMS19TRUwJCQkweDE5CisjZGVmaW5lICAgUExMX05fT1ZSX0VOCQkJ CQkoMSA8PCA0KQorI2RlZmluZSAgIFBMTF9NX09WUl9FTgkJCQkJKDEgPDwgNSkKKyNkZWZpbmUg VEVTVF9DT0RFX1ZPRF9MRVZFTAkJCQkweDI0CisjZGVmaW5lIFRFU1RfQ09ERV9QTExfQ0hBUkdF X1BVTVBfQklBUwkJCTB4MUMKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9MT0NLX0RFVEVDVE9SCQkJ MHgxRAorI2RlZmluZSBURVNUX0NPREVfSFNfRlJFUV9SQU5HRV9DRkcJCQkweDQ0CisjZGVmaW5l IFRFU1RfQ09ERV9QTExfQU5BTE9HX1BST0cJCQkweDFGCisjZGVmaW5lIFRFU1RfQ09ERV9TTEVX X1JBVEVfT1ZFUlJJREVfQ1RSTAkJMHhBMAorI2RlZmluZSBURVNUX0NPREVfU0xFV19SQVRFX0RE TF9MT09QX0NUUkwJCTB4QTMKKyNkZWZpbmUgVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lDTEVT CQkJMHhBNAorCisvKiBEUEhZIHBhcmFtcyAqLworI2RlZmluZSBQTExfTl9NSU4JMAorI2RlZmlu ZSBQTExfTl9NQVgJMTUKKyNkZWZpbmUgUExMX01fTUlOCTYyCisjZGVmaW5lIFBMTF9NX01BWAk2 MjMKKyNkZWZpbmUgUExMX0ZWQ09fTUFYCTEyNTAKKworI2RlZmluZSBUSU1FT1VUCQk2MDAKKwor I2RlZmluZSBNSVBJX1RYX0ZSQU1FX0dFTgkJCQk0CisjZGVmaW5lIE1JUElfVFhfRlJBTUVfR0VO X1NFQ1RJT05TCQkJNAorI2RlZmluZSBNSVBJX0NUUkxfVklSVFVBTF9DSEFOTkVMUwkJCTQKKyNk ZWZpbmUgTUlQSV9EX0xBTkVTX1BFUl9EUEhZCQkJCTIKKyNkZWZpbmUgTUlQSV9DVFJMXzJMQU5F X01BWF9NQ19GSUZPX0xPQwkJCTI1NQorI2RlZmluZSBNSVBJX0NUUkxfNExBTkVfTUFYX01DX0ZJ Rk9fTE9DCQkJNTExCisvKiAyIERhdGEgTGFuZXMgcGVyIEQtUEhZICovCisjZGVmaW5lIE1JUElf RFBIWV9EX0xBTkVTCQkJCTIKKyNkZWZpbmUgTUlQSV9EUEhZX0RFRkFVTFRfQklUX1JBVEVTCQkJ NjMKKworI2RlZmluZSB0b19rbWJfY29ubmVjdG9yKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qg a21iX2Nvbm5lY3RvciwgYmFzZSkKKyNkZWZpbmUgdG9fa21iX2hvc3QoeCkgY29udGFpbmVyX29m KHgsIHN0cnVjdCBrbWJfZHNpX2hvc3QsIGJhc2UpCisjZGVmaW5lIHRvX2ttYl9kc2koeCkgY29u dGFpbmVyX29mKHgsIHN0cnVjdCBrbWJfZHNpLCBiYXNlKQorCitzdHJ1Y3Qga21iX2Nvbm5lY3Rv cjsKK3N0cnVjdCBrbWJfZHNpX2hvc3Q7CisKK3N0cnVjdCBrbWJfZHNpIHsKKwlzdHJ1Y3QgZHJt X2VuY29kZXIgYmFzZTsKKwlzdHJ1Y3Qga21iX2Nvbm5lY3RvciAqYXR0YWNoZWRfY29ubmVjdG9y OworCXN0cnVjdCBrbWJfZHNpX2hvc3QgKmRzaV9ob3N0OworCXN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2U7Cit9OworCitzdHJ1Y3Qga21iX2RzaV9ob3N0IHsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqYmFzZTsKKwlzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkZXZpY2U7Cit9OworCitzdHJ1Y3Qga21iX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9j b25uZWN0b3IgYmFzZTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGU7Cit9OworCisvKiBEUEhZIFR4IHRlc3QgY29kZXMg Ki8KKworZW51bSBtaXBpX2N0cmxfbnVtIHsKKwlNSVBJX0NUUkwwID0gMCwKKwlNSVBJX0NUUkwx LAorCU1JUElfQ1RSTDIsCisJTUlQSV9DVFJMMywKKwlNSVBJX0NUUkw0LAorCU1JUElfQ1RSTDUs CisJTUlQSV9DVFJMNiwKKwlNSVBJX0NUUkw3LAorCU1JUElfQ1RSTDgsCisJTUlQSV9DVFJMOSwK KwlNSVBJX0NUUkxfTkEKK307CisKK2VudW0gbWlwaV9kcGh5X251bSB7CisJTUlQSV9EUEhZMCA9 IDAsCisJTUlQSV9EUEhZMSwKKwlNSVBJX0RQSFkyLAorCU1JUElfRFBIWTMsCisJTUlQSV9EUEhZ NCwKKwlNSVBJX0RQSFk1LAorCU1JUElfRFBIWTYsCisJTUlQSV9EUEhZNywKKwlNSVBJX0RQSFk4 LAorCU1JUElfRFBIWTksCisJTUlQSV9EUEhZX05BCit9OworCitlbnVtIG1pcGlfZGlyIHsKKwlN SVBJX1JYLAorCU1JUElfVFgKK307CisKK2VudW0gbWlwaV9jdHJsX3R5cGUgeworCU1JUElfRFNJ LAorCU1JUElfQ1NJCit9OworCitlbnVtIG1pcGlfZGF0YV9pZiB7CisJTUlQSV9JRl9ETUEsCisJ TUlQSV9JRl9QQVJBTExFTAorfTsKKworZW51bSBtaXBpX2RhdGFfbW9kZSB7CisJTUlQSV9EQVRB X01PREUwLAorCU1JUElfREFUQV9NT0RFMSwKKwlNSVBJX0RBVEFfTU9ERTIsCisJTUlQSV9EQVRB X01PREUzCit9OworCitlbnVtIG1pcGlfZHNpX3ZpZGVvX21vZGUgeworCURTSV9WSURFT19NT0RF X05PX0JVUlNUX1BVTFNFLAorCURTSV9WSURFT19NT0RFX05PX0JVUlNUX0VWRU5ULAorCURTSV9W SURFT19NT0RFX0JVUlNUCit9OworCitlbnVtIG1pcGlfZHNpX2JsYW5raW5nX21vZGUgeworCVRS QU5TSVRJT05fVE9fTE9XX1BPV0VSLAorCVNFTkRfQkxBTktfUEFDS0VUCit9OworCitlbnVtIG1p cGlfZHNpX2VvdHAgeworCURTSV9FT1RQX0RJU0FCTEVELAorCURTSV9FT1RQX0VOQUJMRVMKK307 CisKK2VudW0gbWlwaV9kc2lfZGF0YV90eXBlIHsKKwlEU0lfU1BfRFRfUkVTRVJWRURfMDAgPSAw eDAwLAorCURTSV9TUF9EVF9WU1lOQ19TVEFSVCA9IDB4MDEsCisJRFNJX1NQX0RUX0NPTE9SX01P REVfT0ZGID0gMHgwMiwKKwlEU0lfU1BfRFRfR0VORVJJQ19TSE9SVF9XUiA9IDB4MDMsCisJRFNJ X1NQX0RUX0dFTkVSSUNfUkQgPSAweDA0LAorCURTSV9TUF9EVF9EQ1NfU0hPUlRfV1IgPSAweDA1 LAorCURTSV9TUF9EVF9EQ1NfUkQgPSAweDA2LAorCURTSV9TUF9EVF9FT1RQID0gMHgwOCwKKwlE U0lfTFBfRFRfTlVMTCA9IDB4MDksCisJRFNJX0xQX0RUX1JFU0VSVkVEXzBBID0gMHgwYSwKKwlE U0lfTFBfRFRfUkVTRVJWRURfMEIgPSAweDBiLAorCURTSV9MUF9EVF9MUFBTX1lDQkNSNDIyXzIw QiA9IDB4MGMsCisJRFNJX0xQX0RUX1BQU19SR0IxMDEwMTBfMzBCID0gMHgwZCwKKwlEU0lfTFBf RFRfUFBTX1JHQjU2NV8xNkIgPSAweDBlLAorCURTSV9MUF9EVF9SRVNFUlZFRF8wRiA9IDB4MGYs CisKKwlEU0lfU1BfRFRfUkVTRVJWRURfMTAgPSAweDEwLAorCURTSV9TUF9EVF9WU1lOQ19FTkQg PSAweDExLAorCURTSV9TUF9EVF9DT0xPUl9NT0RFX09OID0gMHgxMiwKKwlEU0lfU1BfRFRfR0VO RVJJQ19TSE9SVF9XUl8xUEFSID0gMHgxMywKKwlEU0lfU1BfRFRfR0VORVJJQ19SRF8xUEFSID0g MHgxNCwKKwlEU0lfU1BfRFRfRENTX1NIT1JUX1dSXzFQQVIgPSAweDE1LAorCURTSV9TUF9EVF9S RVNFUlZFRF8xNiA9IDB4MTYsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzE3ID0gMHgxNywKKwlEU0lf U1BfRFRfUkVTRVJWRURfMTggPSAweDE4LAorCURTSV9MUF9EVF9CTEFOSyA9IDB4MTksCisJRFNJ X0xQX0RUX1JFU0VSVkVEXzFBID0gMHgxYSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfMUIgPSAweDFi LAorCURTSV9MUF9EVF9QUFNfWUNCQ1I0MjJfMjRCID0gMHgxYywKKwlEU0lfTFBfRFRfUFBTX1JH QjEyMTIxMl8zNkIgPSAweDFkLAorCURTSV9MUF9EVF9QUFNfUkdCNjY2XzE4QiA9IDB4MWUsCisJ RFNJX0xQX0RUX1JFU0VSVkVEXzFGID0gMHgxZiwKKworCURTSV9TUF9EVF9SRVNFUlZFRF8yMCA9 IDB4MjAsCisJRFNJX1NQX0RUX0hTWU5DX1NUQVJUID0gMHgyMSwKKwlEU0lfU1BfRFRfU0hVVF9E T1dOX1BFUklQSF9DTUQgPSAweDIyLAorCURTSV9TUF9EVF9HRU5FUklDX1NIT1JUX1dSXzJQQVIg PSAweDIzLAorCURTSV9TUF9EVF9HRU5FUklDX1JEXzJQQVIgPSAweDI0LAorCURTSV9TUF9EVF9S RVNFUlZFRF8yNSA9IDB4MjUsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzI2ID0gMHgyNiwKKwlEU0lf U1BfRFRfUkVTRVJWRURfMjcgPSAweDI3LAorCURTSV9TUF9EVF9SRVNFUlZFRF8yOCA9IDB4Mjgs CisJRFNJX0xQX0RUX0dFTkVSSUNfTE9OR19XUiA9IDB4MjksCisJRFNJX0xQX0RUX1JFU0VSVkVE XzJBID0gMHgyYSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfMkIgPSAweDJiLAorCURTSV9MUF9EVF9Q UFNfWUNCQ1I0MjJfMTZCID0gMHgyYywKKwlEU0lfTFBfRFRfUkVTRVJWRURfMkQgPSAweDJkLAor CURTSV9MUF9EVF9MUFBTX1JHQjY2Nl8xOEIgPSAweDJlLAorCURTSV9MUF9EVF9SRVNFUlZFRF8y RiA9IDB4MmYsCisKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzAgPSAweDMwLAorCURTSV9TUF9EVF9I U1lOQ19FTkQgPSAweDMxLAorCURTSV9TUF9EVF9UVVJOX09OX1BFUklQSF9DTUQgPSAweDMyLAor CURTSV9TUF9EVF9SRVNFUlZFRF8zMyA9IDB4MzMsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzM0ID0g MHgzNCwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzUgPSAweDM1LAorCURTSV9TUF9EVF9SRVNFUlZF RF8zNiA9IDB4MzYsCisJRFNJX1NQX0RUX1NFVF9NQVhfUkVUVVJOX1BLVF9TSVpFID0gMHgzNywK KwlEU0lfU1BfRFRfUkVTRVJWRURfMzggPSAweDM4LAorCURTSV9MUF9EVF9EU0NfTE9OR19XUiA9 IDB4MzksCisJRFNJX0xQX0RUX1JFU0VSVkVEXzNBID0gMHgzYSwKKwlEU0lfTFBfRFRfUkVTRVJW RURfM0IgPSAweDNiLAorCURTSV9MUF9EVF9SRVNFUlZFRF8zQyA9IDB4M2MsCisJRFNJX0xQX0RU X1BQU19ZQ0JDUjQyMF8xMkIgPSAweDNkLAorCURTSV9MUF9EVF9QUFNfUkdCODg4XzI0QiA9IDB4 M2UsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzNGID0gMHgzZgorfTsKKworZW51bSBtaXBpX3R4X2hz X3RwX3NlbCB7CisJTUlQSV9UWF9IU19UUF9XSE9MRV9GUkFNRV9DT0xPUjAgPSAwLAorCU1JUElf VFhfSFNfVFBfV0hPTEVfRlJBTUVfQ09MT1IxLAorCU1JUElfVFhfSFNfVFBfVl9TVFJJUEVTLAor CU1JUElfVFhfSFNfVFBfSF9TVFJJUEVTLAorfTsKKworZW51bSBkcGh5X21vZGUgeworCU1JUElf RFBIWV9TTEFWRSA9IDAsCisJTUlQSV9EUEhZX01BU1RFUgorfTsKKworZW51bSBkcGh5X3R4X2Zz bSB7CisJRFBIWV9UWF9QT1dFUkRXTiA9IDAsCisJRFBIWV9UWF9CR1BPTiwKKwlEUEhZX1RYX1RF Uk1DQUwsCisJRFBIWV9UWF9URVJNQ0FMVVAsCisJRFBIWV9UWF9PRkZTRVRDQUwsCisJRFBIWV9U WF9MT0NLLAorCURQSFlfVFhfU1JDQUwsCisJRFBIWV9UWF9JRExFLAorCURQSFlfVFhfVUxQLAor CURQSFlfVFhfTEFORVNUQVJULAorCURQSFlfVFhfQ0xLQUxJR04sCisJRFBIWV9UWF9ERExUVU5O SU5HLAorCURQSFlfVFhfVUxQX0ZPUkNFX1BMTCwKKwlEUEhZX1RYX0xPQ0tfTE9TUworfTsKKwor c3RydWN0IG1pcGlfZGF0YV90eXBlX3BhcmFtcyB7CisJdWludDhfdCBzaXplX2NvbnN0cmFpbnRf cGl4ZWxzOworCXVpbnQ4X3Qgc2l6ZV9jb25zdHJhaW50X2J5dGVzOworCXVpbnQ4X3QgcGl4ZWxz X3Blcl9wY2xrOworCXVpbnQ4X3QgYml0c19wZXJfcGNsazsKK307CisKK3N0cnVjdCBtaXBpX3R4 X2RzaV9jZmcgeworCXVpbnQ4X3QgaGZwX2JsYW5rX2VuOwkvKmhvcml6b250YWwgZnJvbnQgcG9y Y2ggYmxhbmtpbmcgZW5hYmxlICovCisJdWludDhfdCBlb3RwX2VuOwkvKkVuZCBvZiB0cmFuc21p c3Npb24gcGFja2V0IGVuYWJsZSAqLworCS8qbGFzdCB2ZXJ0aWNhbCBmcm9udCBwb3JjaCBibGFu a2luZyBtb2RlICovCisJdWludDhfdCBscG1fbGFzdF92ZnBfbGluZTsKKwkvKmZpcnN0IHZlcnRp Y2FsIHN5bmMgYWN0aXZlIGJsYW5raW5nIG1vZGUgKi8KKwl1aW50OF90IGxwbV9maXJzdF92c2Ff bGluZTsKKwl1aW50OF90IHN5bmNfcHVsc2VfZXZlbnRuOwkvKnN5bmMgdHlwZSAqLworCXVpbnQ4 X3QgaGZwX2JsYW5raW5nOwkvKmhvcml6b250YWwgZnJvbnQgcG9yY2ggYmxhbmtpbmcgbW9kZSAq LworCXVpbnQ4X3QgaGJwX2JsYW5raW5nOwkvKmhvcml6b250YWwgYmFjayBwb3JjaCBibGFua2lu ZyBtb2RlICovCisJdWludDhfdCBoc2FfYmxhbmtpbmc7CS8qaG9yaXpvbnRhbCBzeW5jIGFjdGl2 ZSBibGFua2luZyBtb2RlICovCisJdWludDhfdCB2X2JsYW5raW5nOwkvKnZlcnRpY2FsIHRpbWlu ZyBibGFua2luZyBtb2RlICovCit9OworCitzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0aW9uX2Nm ZyB7CisJdWludDMyX3QgZG1hX3Zfc3RyaWRlOworCXVpbnQxNl90IGRtYV92X3NjYWxlX2NmZzsK Kwl1aW50MTZfdCB3aWR0aF9waXhlbHM7CisJdWludDE2X3QgaGVpZ2h0X2xpbmVzOworCXVpbnQ4 X3QgZG1hX3BhY2tlZDsKKwl1aW50OF90IGJwcDsKKwl1aW50OF90IGJwcF91bnBhY2tlZDsKKwl1 aW50OF90IGRtYV9oX3N0cmlkZTsKKwl1aW50OF90IGRhdGFfdHlwZTsKKwl1aW50OF90IGRhdGFf bW9kZTsKKwl1aW50OF90IGRtYV9mbGlwX3JvdGF0ZV9zZWw7Cit9OworCitzdHJ1Y3QgbWlwaV90 eF9mcmFtZV90aW1pbmdfY2ZnIHsKKwl1aW50MzJfdCBicHA7CisJdWludDMyX3QgbGFuZV9yYXRl X21icHM7CisJdWludDMyX3QgaHN5bmNfd2lkdGg7CisJdWludDMyX3QgaF9iYWNrcG9yY2g7CisJ dWludDMyX3QgaF9mcm9udHBvcmNoOworCXVpbnQzMl90IGhfYWN0aXZlOworCXVpbnQxNl90IHZz eW5jX3dpZHRoOworCXVpbnQxNl90IHZfYmFja3BvcmNoOworCXVpbnQxNl90IHZfZnJvbnRwb3Jj aDsKKwl1aW50MTZfdCB2X2FjdGl2ZTsKKwl1aW50OF90IGFjdGl2ZV9sYW5lczsKK307CisKK3N0 cnVjdCBtaXBpX3R4X2ZyYW1lX3NlY3RfcGhjZmcgeworCXVpbnQzMl90IHdjOworCWVudW0gbWlw aV9kYXRhX21vZGUgZGF0YV9tb2RlOworCWVudW0gbWlwaV9kc2lfZGF0YV90eXBlIGRhdGFfdHlw ZTsKKwl1aW50OF90IHZjaGFubmVsOworCXVpbnQ4X3QgZG1hX3BhY2tlZDsKK307CisKK3N0cnVj dCBtaXBpX3R4X2ZyYW1lX2NmZyB7CisJc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdGlvbl9jZmcg KnNlY3Rpb25zW01JUElfVFhfRlJBTUVfR0VOX1NFQ1RJT05TXTsKKwl1aW50MzJfdCBoc3luY193 aWR0aDsJLyppbiBwaXhlbHMgKi8KKwl1aW50MzJfdCBoX2JhY2twb3JjaDsJLyppbiBwaXhlbHMg Ki8KKwl1aW50MzJfdCBoX2Zyb250cG9yY2g7CS8qaW4gcGl4ZWxzICovCisJdWludDE2X3QgdnN5 bmNfd2lkdGg7CS8qaW4gbGluZXMgKi8KKwl1aW50MTZfdCB2X2JhY2twb3JjaDsJLyppbiBsaW5l cyAqLworCXVpbnQxNl90IHZfZnJvbnRwb3JjaDsJLyppbiBsaW5lcyAqLworfTsKKworc3RydWN0 IG1pcGlfdHhfY3RybF9jZmcgeworCXN0cnVjdCBtaXBpX3R4X2ZyYW1lX2NmZyAqZnJhbWVzW01J UElfVFhfRlJBTUVfR0VOXTsKKwlzdHJ1Y3QgbWlwaV90eF9kc2lfY2ZnICp0eF9kc2lfY2ZnOwor CXVpbnQ4X3QgbGluZV9zeW5jX3BrdF9lbjsKKwl1aW50OF90IGxpbmVfY291bnRlcl9hY3RpdmU7 CisJdWludDhfdCBmcmFtZV9jb3VudGVyX2FjdGl2ZTsKKwl1aW50OF90IHR4X2hzY2xra2lkbGVf Y250OworCXVpbnQ4X3QgdHhfaHNleGl0X2NudDsKKwl1aW50OF90IHR4X2NyY19lbjsKKwl1aW50 OF90IHR4X2hhY3Rfd2FpdF9zdG9wOworCXVpbnQ4X3QgdHhfYWx3YXlzX3VzZV9oYWN0OworCXVp bnQ4X3QgdHhfd2FpdF90cmlnOworCXVpbnQ4X3QgdHhfd2FpdF9hbGxfc2VjdDsKK307CisKKy8q Y29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIE1JUEkgY29udHJvbCAqLworc3RydWN0IG1pcGlf Y3RybF9jZmcgeworCS8qIGNvbnRyb2xsZXIgaW5kZXggOiBDVFJMNiBmb3IgY29ubmVjdGluZyB0 byBMQ0QgKi8KKwl1aW50OF90IGluZGV4OworCXVpbnQ4X3QgdHlwZTsJCS8qIGNvbnRyb2xsZXIg dHlwZSA6IE1JUElfRFNJICovCisJdWludDhfdCBkaXI7CQkvKiBjb250cm9sbGVyIGRpcmVjdGlv biA6IE1JUElfVFggKi8KKwl1aW50OF90IGFjdGl2ZV9sYW5lczsJLyogIyBhY3RpdmUgbGFuZXMg cGVyIGNvbnRyb2xsZXIgMi80ICovCisJdWludDMyX3QgbGFuZV9yYXRlX21icHM7CS8qTUJQUyAq LworCXVpbnQzMl90IHJlZl9jbGtfa2h6OworCXVpbnQzMl90IGNmZ19jbGtfa2h6OworCXVpbnQz Ml90IGRhdGFfaWY7CS8qTUlQSV9JRl9ETUEgb3IgTUlQSV9JRl9QQVJBTExFTCAqLworCXN0cnVj dCBtaXBpX3R4X2N0cmxfY2ZnIHR4X2N0cmxfY2ZnOworfTsKKworLyogU3RydWN0dXJlIGZvciBz dG9yaW5nIHVzZXIgc3BlY2lmaWVkIGludGVycnVwdHMgdGhhdCBhcmUgZW5hYmxlZCAqLwordW5p b24gbWlwaV9pcnFfY2ZnIHsKKwl1aW50OF90IHZhbHVlOworCXN0cnVjdCB7CisJCXVpbnQ4X3Qg bGluZV9jb21wYXJlOjE7CisJCXVpbnQ4X3QgZG1hX2V2ZW50OjE7CisJCXVpbnQ4X3QgZnJhbWVf ZG9uZToxOworCQl1aW50OF90IGN0cmxfZXJyb3I6MTsKKwkJdWludDhfdCBkcGh5X2Vycm9yOjE7 CisJfSBpcnFfY2ZnOworfTsKKworc3RydWN0IGRybV9icmlkZ2UgKmttYl9kc2lfaG9zdF9icmlk Z2VfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IGttYl9kc2lfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKK3ZvaWQga21iX3BsYW5l X2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOwordm9pZCBtaXBpX3R4X2hhbmRsZV9p cnFzKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmRldl9wKTsKK3ZvaWQga21iX2RzaV9ob3N0X3Vu cmVnaXN0ZXIodm9pZCk7CitpbnQga21iX2RzaV9od19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKKyNlbmRpZiAvKiBfX0tNQl9EU0lf SF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9wbGFuZS5jIGIvZHJp dmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42YTM2Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9r bWJfcGxhbmUuYwpAQCAtMCwwICsxLDUxOCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4LTIwMjAgSW50ZWwgQ29ycG9y YXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvb2Zf Z3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NpbXBsZWZiLmg+CisjaW5j bHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgor I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0 Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21hbmFn ZWQuaD4KKworI2luY2x1ZGUgImttYl9jcnRjLmgiCisjaW5jbHVkZSAia21iX2Rydi5oIgorI2lu Y2x1ZGUgImttYl9wbGFuZS5oIgorI2luY2x1ZGUgImttYl9yZWdzLmgiCisKK3N0cnVjdCBsYXll cl9zdGF0dXMgcGxhbmVfc3RhdHVzW0tNQl9NQVhfUExBTkVTXTsKK2NvbnN0IHVpbnQzMl90IGxh eWVyX2lycXNbXSA9IHsKKwlMQ0RfSU5UX1ZMMCwKKwlMQ0RfSU5UX1ZMMSwKKwlMQ0RfSU5UX0dM MCwKKwlMQ0RfSU5UX0dMMQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjaGVja19waXhlbF9m b3JtYXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHUzMiBmb3JtYXQpCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgcGxhbmUtPmZvcm1hdF9jb3VudDsgaSsrKSB7CisJCWlmIChwbGFu ZS0+Zm9ybWF0X3R5cGVzW2ldID09IGZvcm1hdCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4g LUVJTlZBTDsKK30KKworc3RhdGljIGludCBrbWJfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7 CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJaW50IHJldDsKKworCWZiID0gc3RhdGUt PmZiOworCWlmICghZmIgfHwgIXN0YXRlLT5jcnRjKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGNo ZWNrX3BpeGVsX2Zvcm1hdChwbGFuZSwgZmItPmZvcm1hdC0+Zm9ybWF0KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJaWYgKHN0YXRlLT5jcnRjX3cgPiBLTUJfTUFYX1dJRFRIIHx8IHN0 YXRlLT5jcnRjX2ggPiBLTUJfTUFYX0hFSUdIVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHN0 YXRlLT5jcnRjX3cgPCBLTUJfTUlOX1dJRFRIIHx8IHN0YXRlLT5jcnRjX2ggPCBLTUJfTUlOX0hF SUdIVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGtt Yl9wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAg IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBrbWJfcGxhbmUgKmtt Yl9wbGFuZSA9IHRvX2ttYl9wbGFuZShwbGFuZSk7CisJaW50IHBsYW5lX2lkID0ga21iX3BsYW5l LT5pZDsKKworCXN3aXRjaCAocGxhbmVfaWQpIHsKKwljYXNlIExBWUVSXzA6CisJCXBsYW5lX3N0 YXR1c1twbGFuZV9pZF0uY3RybCA9IExDRF9DVFJMX1ZMMV9FTkFCTEU7CisJCWJyZWFrOworCWNh c2UgTEFZRVJfMToKKwkJcGxhbmVfc3RhdHVzW3BsYW5lX2lkXS5jdHJsID0gTENEX0NUUkxfVkwy X0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBMQVlFUl8yOgorCQlwbGFuZV9zdGF0dXNbcGxhbmVf aWRdLmN0cmwgPSBMQ0RfQ1RSTF9HTDFfRU5BQkxFOworCQlicmVhazsKKwljYXNlIExBWUVSXzM6 CisJCXBsYW5lX3N0YXR1c1twbGFuZV9pZF0uY3RybCA9IExDRF9DVFJMX0dMMl9FTkFCTEU7CisJ CWJyZWFrOworCX0KKworCXBsYW5lX3N0YXR1c1twbGFuZV9pZF0uZGlzYWJsZSA9IHRydWU7Cit9 CisKK3Vuc2lnbmVkIGludCBzZXRfcGl4ZWxfZm9ybWF0KHUzMiBmb3JtYXQpCit7CisJdW5zaWdu ZWQgaW50IHZhbCA9IDA7CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCQkvKiBwbGFuYXIgZm9ybWF0 cyAqLworCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0NDQ6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRf WUNCQ1I0NDRQTEFOIHwgTENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFOworCQlicmVhazsKKwljYXNl IERSTV9GT1JNQVRfWVZVNDQ0OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1lDQkNSNDQ0UExB TiB8IExDRF9MQVlFUl9QTEFOQVJfU1RPUkFHRQorCQkgICAgfCBMQ0RfTEFZRVJfQ1JDQl9PUkRF UjsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMjoKKwkJdmFsID0gTENEX0xBWUVS X0ZPUk1BVF9ZQ0JDUjQyMlBMQU4gfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0U7CisJCWJyZWFr OworCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjI6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfWUNC Q1I0MjJQTEFOIHwgTENEX0xBWUVSX1BMQU5BUl9TVE9SQUdFCisJCSAgICB8IExDRF9MQVlFUl9D UkNCX09SREVSOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgorCQl2YWwgPSBM Q0RfTEFZRVJfRk9STUFUX1lDQkNSNDIwUExBTiB8IExDRF9MQVlFUl9QTEFOQVJfU1RPUkFHRTsK KwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKKwkJdmFsID0gTENEX0xBWUVSX0ZP Uk1BVF9ZQ0JDUjQyMFBMQU4gfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0UKKwkJICAgIHwgTENE X0xBWUVSX0NSQ0JfT1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQl2 YWwgPSBMQ0RfTEFZRVJfRk9STUFUX05WMTIgfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0U7CisJ CWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFU X05WMTIgfCBMQ0RfTEFZRVJfUExBTkFSX1NUT1JBR0UKKwkJICAgIHwgTENEX0xBWUVSX0NSQ0Jf T1JERVI7CisJCWJyZWFrOworCQkvKiBwYWNrZWQgZm9ybWF0cyAqLworCQkvKiBsb29rcyBodyBy ZXF1aXJlcyBCICYgRyB0byBiZSBzd2FwcGVkIHdoZW4gUkdCICovCisJY2FzZSBEUk1fRk9STUFU X1JHQjMzMjoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0IzMzIgfCBMQ0RfTEFZRVJfQkdS X09SREVSOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjQ0NDQ6CisJCXZhbCA9IExD RF9MQVlFUl9GT1JNQVRfUkdCWDQ0NDQ7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BUkdC NDQ0NDoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0JBNDQ0NCB8IExDRF9MQVlFUl9CR1Jf T1JERVI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSNDQ0NDoKKwkJdmFsID0gTENE X0xBWUVSX0ZPUk1BVF9SR0JBNDQ0NDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0Ix NTU1OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1hSR0IxNTU1IHwgTENEX0xBWUVSX0JHUl9P UkRFUjsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1OgorCQl2YWwgPSBMQ0Rf TEFZRVJfRk9STUFUX1hSR0IxNTU1OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjE1 NTU6CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCQTE1NTUgfCBMQ0RfTEFZRVJfQkdSX09S REVSOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6CisJCXZhbCA9IExDRF9M QVlFUl9GT1JNQVRfUkdCQTE1NTU7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6 CisJCXZhbCA9IExDRF9MQVlFUl9GT1JNQVRfUkdCNTY1IHwgTENEX0xBWUVSX0JHUl9PUkRFUjsK KwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJdmFsID0gTENEX0xBWUVSX0ZP Uk1BVF9SR0I1NjU7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCXZhbCA9 IExDRF9MQVlFUl9GT1JNQVRfUkdCODg4IHwgTENEX0xBWUVSX0JHUl9PUkRFUjsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0I4 ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJdmFsID0gTENEX0xB WUVSX0ZPUk1BVF9SR0JYODg4OCB8IExDRF9MQVlFUl9CR1JfT1JERVI7CisJCWJyZWFrOworCWNh c2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwkJdmFsID0gTENEX0xBWUVSX0ZPUk1BVF9SR0JYODg4 ODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCQl2YWwgPSBMQ0RfTEFZ RVJfRk9STUFUX1JHQkE4ODg4IHwgTENEX0xBWUVSX0JHUl9PUkRFUjsKKwkJYnJlYWs7CisJY2Fz ZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQl2YWwgPSBMQ0RfTEFZRVJfRk9STUFUX1JHQkE4ODg4 OworCQlicmVhazsKKwl9CisJRFJNX0lORk9fT05DRSgiJXMgOiAlZCBmb3JtYXQ9MHgleCB2YWw9 MHgleFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGZvcm1hdCwgdmFsKTsKKwlyZXR1cm4g dmFsOworfQorCit1bnNpZ25lZCBpbnQgc2V0X2JpdHNfcGVyX3BpeGVsKGNvbnN0IHN0cnVjdCBk cm1fZm9ybWF0X2luZm8gKmZvcm1hdCkKK3sKKwl1MzIgYnBwID0gMDsKKwl1bnNpZ25lZCBpbnQg dmFsID0gMDsKKworCWlmIChmb3JtYXQtPm51bV9wbGFuZXMgPiAxKSB7CisJCXZhbCA9IExDRF9M QVlFUl84QlBQOworCQlyZXR1cm4gdmFsOworCX0KKworCWJwcCArPSA4ICogZm9ybWF0LT5jcHBb MF07CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgODoKKwkJdmFsID0gTENEX0xBWUVSXzhCUFA7 CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCA9IExDRF9MQVlFUl8xNkJQUDsKKwkJYnJlYWs7 CisJY2FzZSAyNDoKKwkJdmFsID0gTENEX0xBWUVSXzI0QlBQOworCQlicmVhazsKKwljYXNlIDMy OgorCQl2YWwgPSBMQ0RfTEFZRVJfMzJCUFA7CisJCWJyZWFrOworCX0KKworCURSTV9ERUJVRygi YnBwPSVkIHZhbD0weCV4XG4iLCBicHAsIHZhbCk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGlj IHZvaWQgY29uZmlnX2NzYyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIGludCBwbGFuZV9p ZCkKK3sKKwkvKiBZVVYgdG8gUkdCIGNvbnZlcnNpb24gdXNpbmcgdGhlIGZpeGVkIG1hdHJpeCBj c2NfY29lZl9sY2QgKi8KKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYx MShwbGFuZV9pZCksIGNzY19jb2VmX2xjZFswXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9M QVlFUm5fQ1NDX0NPRUZGMTIocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbMV0pOworCWttYl93cml0 ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjEzKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNk WzJdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYyMShwbGFuZV9p ZCksIGNzY19jb2VmX2xjZFszXSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1ND X0NPRUZGMjIocGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbNF0pOworCWttYl93cml0ZV9sY2Qoa21i LCBMQ0RfTEFZRVJuX0NTQ19DT0VGRjIzKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzVdKTsKKwlr bWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfQ09FRkYzMShwbGFuZV9pZCksIGNzY19j b2VmX2xjZFs2XSk7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1NDX0NPRUZGMzIo cGxhbmVfaWQpLCBjc2NfY29lZl9sY2RbN10pOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZ RVJuX0NTQ19DT0VGRjMzKHBsYW5lX2lkKSwgY3NjX2NvZWZfbGNkWzhdKTsKKwlrbWJfd3JpdGVf bGNkKGttYiwgTENEX0xBWUVSbl9DU0NfT0ZGMShwbGFuZV9pZCksIGNzY19jb2VmX2xjZFs5XSk7 CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ1NDX09GRjIocGxhbmVfaWQpLCBjc2Nf Y29lZl9sY2RbMTBdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9DU0NfT0ZGMyhw bGFuZV9pZCksIGNzY19jb2VmX2xjZFsxMV0pOworfQorCitzdGF0aWMgdm9pZCBrbWJfcGxhbmVf YXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJ c3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iOworCXVuc2lnbmVkIGludCB3aWR0aDsKKwl1bnNp Z25lZCBpbnQgaGVpZ2h0OworCXVuc2lnbmVkIGludCBkbWFfbGVuOworCXN0cnVjdCBrbWJfcGxh bmUgKmttYl9wbGFuZTsKKwl1bnNpZ25lZCBpbnQgZG1hX2NmZzsKKwl1bnNpZ25lZCBpbnQgY3Ry bCA9IDAsIHZhbCA9IDAsIG91dF9mb3JtYXQgPSAwOworCXVuc2lnbmVkIGludCBzcmNfdywgc3Jj X2gsIGNydGNfeCwgY3J0Y195OworCXVuc2lnbmVkIGNoYXIgcGxhbmVfaWQ7CisJaW50IG51bV9w bGFuZXM7CisJc3RhdGljIGRtYV9hZGRyX3QgYWRkcltNQVhfU1VCX1BMQU5FU10gPSB7IDAsIDAs IDAgfTsKKworCWlmICghcGxhbmUgfHwgIXBsYW5lLT5zdGF0ZSB8fCAhc3RhdGUpCisJCXJldHVy bjsKKworCWZiID0gcGxhbmUtPnN0YXRlLT5mYjsKKwlpZiAoIWZiKQorCQlyZXR1cm47CisJbnVt X3BsYW5lcyA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7CisJa21iX3BsYW5lID0gdG9fa21iX3Bs YW5lKHBsYW5lKTsKKwlwbGFuZV9pZCA9IGttYl9wbGFuZS0+aWQ7CisKKwlrbWIgPSB0b19rbWIo cGxhbmUtPmRldik7CisKKwlpZiAoa21iX3VuZGVyX2Zsb3cgfHwga21iX2ZsdXNoX2RvbmUpIHsK KwkJZHJtX2RiZygma21iLT5kcm0sICJwbGFuZV91cGRhdGU6dW5kZXJmbG93ISEhISByZXR1cm5p bmciKTsKKwkJcmV0dXJuOworCX0KKworCXNyY193ID0gKHBsYW5lLT5zdGF0ZS0+c3JjX3cgPj4g MTYpOworCXNyY19oID0gcGxhbmUtPnN0YXRlLT5zcmNfaCA+PiAxNjsKKwljcnRjX3ggPSBwbGFu ZS0+c3RhdGUtPmNydGNfeDsKKwljcnRjX3kgPSBwbGFuZS0+c3RhdGUtPmNydGNfeTsKKworCWRy bV9kYmcoJmttYi0+ZHJtLAorCQkic3JjX3c9JWQgc3JjX2g9JWQsIGZiLT5mb3JtYXQtPmZvcm1h dD0weCV4IGZiLT5mbGFncz0weCV4XG4iLAorCQkgIHNyY193LCBzcmNfaCwgZmItPmZvcm1hdC0+ Zm9ybWF0LCBmYi0+ZmxhZ3MpOworCisJd2lkdGggPSBmYi0+d2lkdGg7CisJaGVpZ2h0ID0gZmIt PmhlaWdodDsKKwlkbWFfbGVuID0gKHdpZHRoICogaGVpZ2h0ICogZmItPmZvcm1hdC0+Y3BwWzBd KTsKKwlkcm1fZGJnKCZrbWItPmRybSwgImRtYV9sZW49JWQgIiwgZG1hX2xlbik7CisJa21iX3dy aXRlX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX0xFTihwbGFuZV9pZCksIGRtYV9sZW4pOworCWtt Yl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9MRU5fU0hBRE9XKHBsYW5lX2lkKSwgZG1h X2xlbik7CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX0xJTkVfVlNUUklERShw bGFuZV9pZCksCisJCSAgICAgIGZiLT5waXRjaGVzWzBdKTsKKwlrbWJfd3JpdGVfbGNkKGttYiwg TENEX0xBWUVSbl9ETUFfTElORV9XSURUSChwbGFuZV9pZCksCisJCSAgICAgICh3aWR0aCAqIGZi LT5mb3JtYXQtPmNwcFswXSkpOworCisJYWRkcltZX1BMQU5FXSA9IGRybV9mYl9jbWFfZ2V0X2dl bV9hZGRyKGZiLCBwbGFuZS0+c3RhdGUsIDApOworCWttYi0+ZmJfYWRkciA9IGFkZHJbWV9QTEFO RV07CisJa21iX3dyaXRlX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX1NUQVJUX0FERFIocGxhbmVf aWQpLAorCQkgICAgICBhZGRyW1lfUExBTkVdICsgZmItPm9mZnNldHNbMF0pOworCXZhbCA9IHNl dF9waXhlbF9mb3JtYXQoZmItPmZvcm1hdC0+Zm9ybWF0KTsKKwl2YWwgfD0gc2V0X2JpdHNfcGVy X3BpeGVsKGZiLT5mb3JtYXQpOworCS8qIFByb2dyYW0gQ2IvQ3IgZm9yIHBsYW5hciBmb3JtYXRz ICovCisJaWYgKG51bV9wbGFuZXMgPiAxKSB7CisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZ RVJuX0RNQV9DQl9MSU5FX1ZTVFJJREUocGxhbmVfaWQpLAorCQkJCXdpZHRoKmZiLT5mb3JtYXQt PmNwcFswXSk7CisJCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DQl9MSU5FX1dJ RFRIKHBsYW5lX2lkKSwKKwkJCSAgICAgICh3aWR0aCAqIGZiLT5mb3JtYXQtPmNwcFswXSkpOwor CisJCWFkZHJbVV9QTEFORV0gPSBkcm1fZmJfY21hX2dldF9nZW1fYWRkcihmYiwgcGxhbmUtPnN0 YXRlLAorCQkJCVVfUExBTkUpOworCQkvKiBjaGVjayBpZiBDYi9DciBpcyBzd2FwcGVkKi8KKwkJ aWYgKChudW1fcGxhbmVzID09IDMpICYmICh2YWwgJiBMQ0RfTEFZRVJfQ1JDQl9PUkRFUikpCisJ CQlrbWJfd3JpdGVfbGNkKGttYiwKKwkJCQkJTENEX0xBWUVSbl9ETUFfU1RBUlRfQ1JfQURSKHBs YW5lX2lkKSwKKwkJCQkJYWRkcltVX1BMQU5FXSk7CisJCWVsc2UKKwkJCWttYl93cml0ZV9sY2Qo a21iLAorCQkJCQlMQ0RfTEFZRVJuX0RNQV9TVEFSVF9DQl9BRFIocGxhbmVfaWQpLAorCQkJCQlh ZGRyW1VfUExBTkVdKTsKKworCQlpZiAobnVtX3BsYW5lcyA9PSAzKSB7CisJCQlrbWJfd3JpdGVf bGNkKGttYiwKKwkJCQlMQ0RfTEFZRVJuX0RNQV9DUl9MSU5FX1ZTVFJJREUocGxhbmVfaWQpLAor CQkJCSgod2lkdGgpKmZiLT5mb3JtYXQtPmNwcFswXSkpOworCisJCQlrbWJfd3JpdGVfbGNkKGtt YiwKKwkJCQlMQ0RfTEFZRVJuX0RNQV9DUl9MSU5FX1dJRFRIKHBsYW5lX2lkKSwKKwkJCQkoKHdp ZHRoKSpmYi0+Zm9ybWF0LT5jcHBbMF0pKTsKKworCQkJYWRkcltWX1BMQU5FXSA9IGRybV9mYl9j bWFfZ2V0X2dlbV9hZGRyKGZiLAorCQkJCQlwbGFuZS0+c3RhdGUsIFZfUExBTkUpOworCisJCQkv KiBjaGVjayBpZiBDYi9DciBpcyBzd2FwcGVkKi8KKwkJCWlmICh2YWwgJiBMQ0RfTEFZRVJfQ1JD Ql9PUkRFUikKKwkJCQlrbWJfd3JpdGVfbGNkKGttYiwKKwkJCQkJTENEX0xBWUVSbl9ETUFfU1RB UlRfQ0JfQURSKHBsYW5lX2lkKSwKKwkJCQkJYWRkcltWX1BMQU5FXSk7CisJCQllbHNlCisJCQkJ a21iX3dyaXRlX2xjZChrbWIsCisJCQkJCUxDRF9MQVlFUm5fRE1BX1NUQVJUX0NSX0FEUihwbGFu ZV9pZCksCisJCQkJCWFkZHJbVl9QTEFORV0pOworCQl9CisJfQorCisJa21iX3dyaXRlX2xjZChr bWIsIExDRF9MQVlFUm5fV0lEVEgocGxhbmVfaWQpLCBzcmNfdyAtIDEpOworCWttYl93cml0ZV9s Y2Qoa21iLCBMQ0RfTEFZRVJuX0hFSUdIVChwbGFuZV9pZCksIHNyY19oIC0gMSk7CisJa21iX3dy aXRlX2xjZChrbWIsIExDRF9MQVlFUm5fQ09MX1NUQVJUKHBsYW5lX2lkKSwgY3J0Y194KTsKKwlr bWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVSbl9ST1dfU1RBUlQocGxhbmVfaWQpLCBjcnRjX3kp OworCisJdmFsIHw9IExDRF9MQVlFUl9GSUZPXzEwMDsKKworCWlmICh2YWwgJiBMQ0RfTEFZRVJf UExBTkFSX1NUT1JBR0UpIHsKKwkJdmFsIHw9IExDRF9MQVlFUl9DU0NfRU47CisKKwkJLyogRW5h YmxlIENTQyBpZiBpbnB1dCBpcyBwbGFuYXIgYW5kIG91dHB1dCBpcyBSR0IgKi8KKwkJY29uZmln X2NzYyhrbWIsIHBsYW5lX2lkKTsKKwl9CisKKwlrbWJfd3JpdGVfbGNkKGttYiwgTENEX0xBWUVS bl9DRkcocGxhbmVfaWQpLCB2YWwpOworCisJc3dpdGNoIChwbGFuZV9pZCkgeworCWNhc2UgTEFZ RVJfMDoKKwkJY3RybCA9IExDRF9DVFJMX1ZMMV9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZ RVJfMToKKwkJY3RybCA9IExDRF9DVFJMX1ZMMl9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZ RVJfMjoKKwkJY3RybCA9IExDRF9DVFJMX0dMMV9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgTEFZ RVJfMzoKKwkJY3RybCA9IExDRF9DVFJMX0dMMl9FTkFCTEU7CisJCWJyZWFrOworCX0KKworCWN0 cmwgfD0gTENEX0NUUkxfUFJPR1JFU1NJVkUgfCBMQ0RfQ1RSTF9USU1fR0VOX0VOQUJMRQorCSAg ICB8IExDRF9DVFJMX0NPTlRJTlVPVVMgfCBMQ0RfQ1RSTF9PVVRQVVRfRU5BQkxFRDsKKworCS8q IExDRCBpcyBjb25uZWN0ZWQgdG8gTUlQSSBvbiBrbWIKKwkgKiBUaGVyZWZvcmUgdGhpcyBiaXQg aXMgcmVxdWlyZWQgZm9yIERTSSBUeAorCSAqLworCWN0cmwgfD0gTENEX0NUUkxfVkhTWU5DX0lE TEVfTFZMOworCisJa21iX3NldF9iaXRtYXNrX2xjZChrbWIsIExDRF9DT05UUk9MLCBjdHJsKTsK KworCS8qIEZJWE1FIG5vIGRvYyBvbiBob3cgdG8gc2V0IG91dHB1dCBmb3JtYXQsdGhlc2UgdmFs dWVzIGFyZQorCSAqIHRha2VuIGZyb20gdGhlIE15cmlhZHggdGVzdHMKKwkgKi8KKwlvdXRfZm9y bWF0IHw9IExDRF9PVVRGX0ZPUk1BVF9SR0I4ODg7CisKKwkvKiBMZWF2ZSBSR0Igb3JkZXIsY29u dmVyc2lvbiBtb2RlIGFuZCBjbGlwIG1vZGUgdG8gZGVmYXVsdCAqLworCS8qIGRvIG5vdCBpbnRl cmxlYXZlIFJHQiBjaGFubmVscyBmb3IgbWlwaSBUeCBjb21wYXRpYmlsaXR5ICovCisJb3V0X2Zv cm1hdCB8PSBMQ0RfT1VURl9NSVBJX1JHQl9NT0RFOworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0Rf T1VUX0ZPUk1BVF9DRkcsIG91dF9mb3JtYXQpOworCisJZG1hX2NmZyA9IExDRF9ETUFfTEFZRVJf RU5BQkxFIHwgTENEX0RNQV9MQVlFUl9WU1RSSURFX0VOIHwKKwkgICAgTENEX0RNQV9MQVlFUl9D T05UX1VQREFURSB8IExDRF9ETUFfTEFZRVJfQVhJX0JVUlNUXzE2OworCisJLyogRW5hYmxlIERN QSAqLworCWttYl93cml0ZV9sY2Qoa21iLCBMQ0RfTEFZRVJuX0RNQV9DRkcocGxhbmVfaWQpLCBk bWFfY2ZnKTsKKwlkcm1fZGJnKCZrbWItPmRybSwgImRtYV9jZmc9MHgleCBMQ0RfRE1BX0NGRz0w eCV4XG4iLCBkbWFfY2ZnLAorCQkgIGttYl9yZWFkX2xjZChrbWIsIExDRF9MQVlFUm5fRE1BX0NG RyhwbGFuZV9pZCkpKTsKKworCWttYl9zZXRfYml0bWFza19sY2Qoa21iLCBMQ0RfSU5UX0NMRUFS LCBMQ0RfSU5UX0VPRiB8CisJCQlMQ0RfSU5UX0RNQV9FUlIpOworCWttYl9zZXRfYml0bWFza19s Y2Qoa21iLCBMQ0RfSU5UX0VOQUJMRSwgTENEX0lOVF9FT0YgfAorCQkJTENEX0lOVF9ETUFfRVJS KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIGttYl9w bGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IGttYl9wbGFuZV9hdG9taWNf Y2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBrbWJfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRv bWljX2Rpc2FibGUgPSBrbWJfcGxhbmVfYXRvbWljX2Rpc2FibGUKK307CisKK3ZvaWQga21iX3Bs YW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IGttYl9wbGFu ZSAqa21iX3BsYW5lID0gdG9fa21iX3BsYW5lKHBsYW5lKTsKKworCWRybV9wbGFuZV9jbGVhbnVw KHBsYW5lKTsKKwlrZnJlZShrbWJfcGxhbmUpOworfQorCitzdGF0aWMgdm9pZCBrbWJfZGVzdHJv eV9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGttYl9wbGFuZV9zdGF0ZSAqa21iX3N0 YXRlID0gdG9fa21iX3BsYW5lX3N0YXRlKHN0YXRlKTsKKworCV9fZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfZGVzdHJveV9zdGF0ZShzdGF0ZSk7CisJa2ZyZWUoa21iX3N0YXRlKTsKK30KKworc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqa21iX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKKwlzdHJ1 Y3Qga21iX3BsYW5lX3N0YXRlICprbWJfc3RhdGU7CisKKwlrbWJfc3RhdGUgPSBrbWVtZHVwKHBs YW5lLT5zdGF0ZSwgc2l6ZW9mKCprbWJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWttYl9z dGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZSA9ICZrbWJfc3RhdGUtPmJhc2VfcGxhbmVf c3RhdGU7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUs IHN0YXRlKTsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIHZvaWQga21iX3BsYW5lX3Jl c2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBrbWJfcGxhbmVfc3RhdGUg KmttYl9zdGF0ZSA9IHRvX2ttYl9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCisJaWYgKGtt Yl9zdGF0ZSkKKwkJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlCisJCSAg ICAoJmttYl9zdGF0ZS0+YmFzZV9wbGFuZV9zdGF0ZSk7CisJa2ZyZWUoa21iX3N0YXRlKTsKKwor CXBsYW5lLT5zdGF0ZSA9IE5VTEw7CisJa21iX3N0YXRlID0ga3phbGxvYyhzaXplb2YoKmttYl9z dGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChrbWJfc3RhdGUpIHsKKwkJa21iX3N0YXRlLT5iYXNl X3BsYW5lX3N0YXRlLnBsYW5lID0gcGxhbmU7CisJCWttYl9zdGF0ZS0+YmFzZV9wbGFuZV9zdGF0 ZS5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8wOworCQlwbGFuZS0+c3RhdGUgPSAma21iX3N0 YXRlLT5iYXNlX3BsYW5lX3N0YXRlOworCQlrbWJfc3RhdGUtPm5vX3BsYW5lcyA9IEtNQl9NQVhf UExBTkVTOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mga21i X3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRh dGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3Bs YW5lLAorCS5kZXN0cm95ID0ga21iX3BsYW5lX2Rlc3Ryb3ksCisJLnJlc2V0ID0ga21iX3BsYW5l X3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0ga21iX3BsYW5lX2R1cGxpY2F0ZV9z dGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBrbWJfZGVzdHJveV9wbGFuZV9zdGF0ZSwK K307CisKK3N0cnVjdCBrbWJfcGxhbmUgKmttYl9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0pCit7CisJc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqbGNkID0gdG9fa21iKGRybSk7CisJ c3RydWN0IGttYl9wbGFuZSAqcGxhbmUgPSBOVUxMOworCXN0cnVjdCBrbWJfcGxhbmUgKnByaW1h cnkgPSBOVUxMOworCWludCBpID0gMDsKKwlpbnQgcmV0ID0gMDsKKwllbnVtIGRybV9wbGFuZV90 eXBlIHBsYW5lX3R5cGU7CisJY29uc3QgdWludDMyX3QgKnBsYW5lX2Zvcm1hdHM7CisJaW50IG51 bV9wbGFuZV9mb3JtYXRzOworCisJZm9yIChpID0gMDsgaSA8IGxjZC0+bl9sYXllcnM7IGkrKykg eworCQlwbGFuZSA9IGRybW1fa3phbGxvYyhkcm0sIHNpemVvZigqcGxhbmUpLCBHRlBfS0VSTkVM KTsKKworCQlpZiAoIXBsYW5lKSB7CisJCQlkcm1fZXJyKGRybSwgIkZhaWxlZCB0byBhbGxvY2F0 ZSBwbGFuZVxuIik7CisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJfQorCisJCXBsYW5l X3R5cGUgPSAoaSA9PSAwKSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgorCQkgICAgRFJNX1BM QU5FX1RZUEVfT1ZFUkxBWTsKKwkJaWYgKGkgPCAyKSB7CisJCQlwbGFuZV9mb3JtYXRzID0ga21i X2Zvcm1hdHNfdjsKKwkJCW51bV9wbGFuZV9mb3JtYXRzID0gQVJSQVlfU0laRShrbWJfZm9ybWF0 c192KTsKKwkJfSBlbHNlIHsKKwkJCXBsYW5lX2Zvcm1hdHMgPSBrbWJfZm9ybWF0c19nOworCQkJ bnVtX3BsYW5lX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGttYl9mb3JtYXRzX2cpOworCQl9CisKKwkJ cmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgJnBsYW5lLT5iYXNlX3BsYW5lLAor CQkJCQkgICAgICAgUE9TU0lCTEVfQ1JUQ1MsICZrbWJfcGxhbmVfZnVuY3MsCisJCQkJCSAgICAg ICBwbGFuZV9mb3JtYXRzLCBudW1fcGxhbmVfZm9ybWF0cywKKwkJCQkJICAgICAgIE5VTEwsIHBs YW5lX3R5cGUsICJwbGFuZSAlZCIsIGkpOworCQlpZiAocmV0IDwgMCkgeworCQkJZHJtX2Vycihk cm0sICJkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQgZmFpbGVkIChyZXQ9JWQpIiwKKwkJCQkgIHJl dCk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJZHJtX2RiZyhkcm0sICIlcyA6ICVkIGk9JWQg dHlwZT0lZCIsCisJCQkgIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJCSAgaSwgcGxhbmVfdHlwZSk7 CisJCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZwbGFuZS0+YmFzZV9wbGFuZSwKKwkJCQkgICAgICZr bWJfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHBsYW5lX3R5cGUgPT0gRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWSkgeworCQkJcHJpbWFyeSA9IHBsYW5lOworCQkJbGNkLT5wbGFuZSA9IHBsYW5l OworCQl9CisJCWRybV9kYmcoZHJtLCAiJXMgOiAlZCBwcmltYXJ5PSVwXG4iLCBfX2Z1bmNfXywg X19MSU5FX18sCisJCQkgICZwcmltYXJ5LT5iYXNlX3BsYW5lKTsKKwkJcGxhbmUtPmlkID0gaTsK Kwl9CisKKwlyZXR1cm4gcHJpbWFyeTsKK2NsZWFudXA6CisJa2ZyZWUocGxhbmUpOworCXJldHVy biBFUlJfUFRSKHJldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9w bGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfcGxhbmUuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi40OGYyMzdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2ttYi9rbWJfcGxhbmUuaApAQCAtMCwwICsxLDEyNCBAQAorLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorICoKKyAqIENvcHlyaWdodCDCqSAyMDE4LTIwMjAg SW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9fS01CX1BMQU5FX0hfXworI2RlZmlu ZSBfX0tNQl9QTEFORV9IX18KKworI2luY2x1ZGUgImttYl9kcnYuaCIKKworZXh0ZXJuIGludCBr bWJfdW5kZXJfZmxvdzsKK2V4dGVybiBpbnQga21iX2ZsdXNoX2RvbmU7CisKKyNkZWZpbmUgTENE X0lOVF9WTDBfRVJSICgoTEFZRVIwX0RNQV9GSUZPX1VOREVSRkxPVykgfCBcCisJCQkoTEFZRVIw X0RNQV9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShMQVlFUjBfRE1BX0NCX0ZJRk9fT1ZFUkZMT1cp IHwgXAorCQkJKExBWUVSMF9ETUFfQ0JfRklGT19VTkRFUkZMT1cpIHwgXAorCQkJKExBWUVSMF9E TUFfQ1JfRklGT19PVkVSRkxPVykgfCBcCisJCQkoTEFZRVIwX0RNQV9DUl9GSUZPX1VOREVSRkxP VykpCisKKyNkZWZpbmUgTENEX0lOVF9WTDFfRVJSICgoTEFZRVIxX0RNQV9GSUZPX1VOREVSRkxP VykgfCBcCisJCQkoTEFZRVIxX0RNQV9GSUZPX09WRVJGTE9XKSB8IFwKKwkJCShMQVlFUjFfRE1B X0NCX0ZJRk9fT1ZFUkZMT1cpIHwgXAorCQkJKExBWUVSMV9ETUFfQ0JfRklGT19VTkRFUkZMT1cp IHwgXAorCQkJKExBWUVSMV9ETUFfQ1JfRklGT19PVkVSRkxPVykgfCBcCisJCQkoTEFZRVIxX0RN QV9DUl9GSUZPX1VOREVSRkxPVykpCisKKyNkZWZpbmUgTENEX0lOVF9HTDBfRVJSIChMQVlFUjJf RE1BX0ZJRk9fT1ZFUkZMT1cgfCBMQVlFUjJfRE1BX0ZJRk9fVU5ERVJGTE9XKQorI2RlZmluZSBM Q0RfSU5UX0dMMV9FUlIgKExBWUVSM19ETUFfRklGT19PVkVSRkxPVyB8IExBWUVSM19ETUFfRklG T19VTkRFUkZMT1cpCisjZGVmaW5lIExDRF9JTlRfVkwwIChMQVlFUjBfRE1BX0RPTkUgfCBMQVlF UjBfRE1BX0lETEUgfCBMQ0RfSU5UX1ZMMF9FUlIpCisjZGVmaW5lIExDRF9JTlRfVkwxIChMQVlF UjFfRE1BX0RPTkUgfCBMQVlFUjFfRE1BX0lETEUgfCBMQ0RfSU5UX1ZMMV9FUlIpCisjZGVmaW5l IExDRF9JTlRfR0wwIChMQVlFUjJfRE1BX0RPTkUgfCBMQVlFUjJfRE1BX0lETEUgfCBMQ0RfSU5U X0dMMF9FUlIpCisjZGVmaW5lIExDRF9JTlRfR0wxIChMQVlFUjNfRE1BX0RPTkUgfCBMQVlFUjNf RE1BX0lETEUgfCBMQ0RfSU5UX0dMMV9FUlIpCisjZGVmaW5lIExDRF9JTlRfRE1BX0VSUiAoTENE X0lOVF9WTDBfRVJSIHwgTENEX0lOVF9WTDFfRVJSIFwKKwkJfCBMQ0RfSU5UX0dMMF9FUlIgfCBM Q0RfSU5UX0dMMV9FUlIpCisKKyNkZWZpbmUgUE9TU0lCTEVfQ1JUQ1MgMQorI2RlZmluZSBJTklU SUFMSVpFRCAxCisjZGVmaW5lIHRvX2ttYl9wbGFuZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IGttYl9wbGFuZSwgYmFzZV9wbGFuZSkKKworI2RlZmluZSB0b19rbWJfcGxhbmVfc3RhdGUoeCkg XAorCQljb250YWluZXJfb2YoeCwgc3RydWN0IGttYl9wbGFuZV9zdGF0ZSwgYmFzZV9wbGFuZV9z dGF0ZSkKKworZW51bSBsYXllcl9pZCB7CisJTEFZRVJfMCwKKwlMQVlFUl8xLAorCUxBWUVSXzIs CisJTEFZRVJfMywKKy8vCUtNQl9NQVhfUExBTkVTLAorfTsKKworI2RlZmluZSBLTUJfTUFYX1BM QU5FUyAxCisKK2VudW0gc3ViX3BsYW5lX2lkIHsKKwlZX1BMQU5FLAorCVVfUExBTkUsCisJVl9Q TEFORSwKKwlNQVhfU1VCX1BMQU5FUywKK307CisKK3N0cnVjdCBrbWJfcGxhbmUgeworCXN0cnVj dCBkcm1fcGxhbmUgYmFzZV9wbGFuZTsKKwlzdHJ1Y3Qga21iX2RybV9wcml2YXRlIGttYl9kZXY7 CisJdW5zaWduZWQgY2hhciBpZDsKK307CisKK3N0cnVjdCBrbWJfcGxhbmVfc3RhdGUgeworCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgYmFzZV9wbGFuZV9zdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIG5v X3BsYW5lczsKK307CisKKy8qIEdyYXBoaWNzIGxheWVyIChsYXllcnMgMiAmIDMpIGZvcm1hdHMs IG9ubHkgcGFja2VkIGZvcm1hdHMgIGFyZSBzdXBwb3J0ZWQgKi8KK3N0YXRpYyBjb25zdCB1MzIg a21iX2Zvcm1hdHNfZ1tdID0geworCURSTV9GT1JNQVRfUkdCMzMyLAorCURSTV9GT1JNQVRfWFJH QjQ0NDQsIERSTV9GT1JNQVRfWEJHUjQ0NDQsCisJRFJNX0ZPUk1BVF9BUkdCNDQ0NCwgRFJNX0ZP Uk1BVF9BQkdSNDQ0NCwKKwlEUk1fRk9STUFUX1hSR0IxNTU1LCBEUk1fRk9STUFUX1hCR1IxNTU1 LAorCURSTV9GT1JNQVRfQVJHQjE1NTUsIERSTV9GT1JNQVRfQUJHUjE1NTUsCisJRFJNX0ZPUk1B VF9SR0I1NjUsIERSTV9GT1JNQVRfQkdSNTY1LAorCURSTV9GT1JNQVRfUkdCODg4LCBEUk1fRk9S TUFUX0JHUjg4OCwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LCBEUk1fRk9STUFUX1hCR1I4ODg4LAor CURSTV9GT1JNQVRfQVJHQjg4ODgsIERSTV9GT1JNQVRfQUJHUjg4ODgsCit9OworCisjZGVmaW5l IE1BWF9GT1JNQVRfRwkoQVJSQVlfU0laRShrbWJfZm9ybWF0c19nKSkKKyNkZWZpbmUgTUFYX0ZP Uk1BVF9WCShBUlJBWV9TSVpFKGttYl9mb3JtYXRzX3YpKQorCisvKiBWaWRlbyBsYXllciAoIDAg JiAxKSBmb3JtYXRzLCBwYWNrZWQgYW5kIHBsYW5hciBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8K K3N0YXRpYyBjb25zdCB1MzIga21iX2Zvcm1hdHNfdltdID0geworCS8qIHBhY2tlZCBmb3JtYXRz ICovCisJRFJNX0ZPUk1BVF9SR0IzMzIsCisJRFJNX0ZPUk1BVF9YUkdCNDQ0NCwgRFJNX0ZPUk1B VF9YQkdSNDQ0NCwKKwlEUk1fRk9STUFUX0FSR0I0NDQ0LCBEUk1fRk9STUFUX0FCR1I0NDQ0LAor CURSTV9GT1JNQVRfWFJHQjE1NTUsIERSTV9GT1JNQVRfWEJHUjE1NTUsCisJRFJNX0ZPUk1BVF9B UkdCMTU1NSwgRFJNX0ZPUk1BVF9BQkdSMTU1NSwKKwlEUk1fRk9STUFUX1JHQjU2NSwgRFJNX0ZP Uk1BVF9CR1I1NjUsCisJRFJNX0ZPUk1BVF9SR0I4ODgsIERSTV9GT1JNQVRfQkdSODg4LAorCURS TV9GT1JNQVRfWFJHQjg4ODgsIERSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdC ODg4OCwgRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwkvKnBsYW5hciBmb3JtYXRzICovCisJRFJNX0ZP Uk1BVF9ZVVY0MjAsIERSTV9GT1JNQVRfWVZVNDIwLAorCURSTV9GT1JNQVRfWVVWNDIyLCBEUk1f Rk9STUFUX1lWVTQyMiwKKwlEUk1fRk9STUFUX1lVVjQ0NCwgRFJNX0ZPUk1BVF9ZVlU0NDQsCisJ RFJNX0ZPUk1BVF9OVjEyLCBEUk1fRk9STUFUX05WMjEsCit9OworCisvKiBDb252ZXJzaW9uICh5 dXYtPnJnYikgbWF0cml4IGZyb20gbXlyaWFkeCAqLworc3RhdGljIGNvbnN0IHUzMiBjc2NfY29l Zl9sY2RbXSA9IHsKKwkxMDI0LCAwLCAxNDM2LAorCTEwMjQsIC0zNTIsIC03MzEsCisJMTAyNCwg MTgxNCwgMCwKKwktMTc5LCAxMjUsIC0yMjYKK307CisKK3N0cnVjdCBsYXllcl9zdGF0dXMgewor CWJvb2wgZGlzYWJsZTsKKwl1MzIgY3RybDsKK307CisKK2V4dGVybiBzdHJ1Y3QgbGF5ZXJfc3Rh dHVzIHBsYW5lX3N0YXR1c1tLTUJfTUFYX1BMQU5FU107CisKK3N0cnVjdCBrbWJfcGxhbmUgKmtt Yl9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwordm9pZCBrbWJfcGxhbmVfZGVz dHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7CisjZW5kaWYgLyogX19LTUJfUExBTkVfSF9f ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9yZWdzLmggYi9kcml2ZXJz L2dwdS9kcm0va21iL2ttYl9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMDg5ZTQyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX3Jl Z3MuaApAQCAtMCwwICsxLDczOCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seQorICoKKyAqIENvcHlyaWdodCDCqSAyMDE4LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24K KyAqLworCisjaWZuZGVmIF9fS01CX1JFR1NfSF9fCisjZGVmaW5lIF9fS01CX1JFR1NfSF9fCisK KyNkZWZpbmUgRU5BQkxFCQkJCQkgMQorI2RlZmluZSBESVNBQkxFCQkJCQkgMAorLypmcm9tIERh dGEgQm9vayBzZWN0aW9uIDEyLjUuOC4xIHBhZ2UgNDMyMiAqLworI2RlZmluZSBDUFJfQkFTRV9B RERSICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjA4MTAwMDApCisjZGVmaW5lIE1JUElf QkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDkwMDAwMCkKKy8qZnJvbSBE YXRhIEJvb2sgc2VjdGlvbiAxMi4xMS42LjEgcGFnZSA0OTcyICovCisjZGVmaW5lIExDRF9CQVNF X0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDkzMDAwMCkKKyNkZWZpbmUgTVNT X0NBTV9CQVNFX0FERFIJCQkoTUlQSV9CQVNFX0FERFIgKyAweDEwMDAwKQorI2RlZmluZSBMQ0Rf TU1JT19TSVpFCQkJCSgweDMwMDApCisjZGVmaW5lIE1JUElfTU1JT19TSVpFCQkJCSgweDQwMDAp CisjZGVmaW5lIE1TU19DQU1fTU1JT19TSVpFCQkJKDB4MzApCisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqCQkgICBMQ0QgY29udHJvbGxlciBjb250cm9sIHJlZ2lzdGVyIGRlZmluZXMKKyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisjZGVmaW5lIExDRF9DT05UUk9MCQkJCSgweDQgKiAweDAwMCkKKyNk ZWZpbmUgTENEX0NUUkxfUFJPR1JFU1NJVkUJCQkgICgwPDwwKQorI2RlZmluZSBMQ0RfQ1RSTF9J TlRFUkxBQ0VECQkJICAoMTw8MCkKKyNkZWZpbmUgTENEX0NUUkxfRU5BQkxFCQkJCSAgKDE8PDEp CisjZGVmaW5lIExDRF9DVFJMX1ZMMV9FTkFCTEUJCQkgICgxPDwyKQorI2RlZmluZSBMQ0RfQ1RS TF9WTDJfRU5BQkxFCQkJICAoMTw8MykKKyNkZWZpbmUgTENEX0NUUkxfR0wxX0VOQUJMRQkJCSAg KDE8PDQpCisjZGVmaW5lIExDRF9DVFJMX0dMMl9FTkFCTEUJCQkgICgxPDw1KQorI2RlZmluZSBM Q0RfQ1RSTF9BTFBIQV9CTEVORF9WTDEJCSAgKDA8PDYpCisjZGVmaW5lIExDRF9DVFJMX0FMUEhB X0JMRU5EX1ZMMgkJICAoMTw8NikKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFfQkxFTkRfR0wxCQkg ICgyPDw2KQorI2RlZmluZSBMQ0RfQ1RSTF9BTFBIQV9CTEVORF9HTDIJCSAgKDM8PDYpCisjZGVm aW5lIExDRF9DVFJMX0FMUEhBX1RPUF9WTDEJCQkgICgwPDw4KQorI2RlZmluZSBMQ0RfQ1RSTF9B TFBIQV9UT1BfVkwyCQkJICAoMTw8OCkKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFfVE9QX0dMMQkJ CSAgKDI8PDgpCisjZGVmaW5lIExDRF9DVFJMX0FMUEhBX1RPUF9HTDIJCQkgICgzPDw4KQorI2Rl ZmluZSBMQ0RfQ1RSTF9BTFBIQV9NSURETEVfVkwxCQkgICgwPDwxMCkKKyNkZWZpbmUgTENEX0NU UkxfQUxQSEFfTUlERExFX1ZMMgkJICAoMTw8MTApCisjZGVmaW5lIExDRF9DVFJMX0FMUEhBX01J RERMRV9HTDEJCSAgKDI8PDEwKQorI2RlZmluZSBMQ0RfQ1RSTF9BTFBIQV9NSURETEVfR0wyCQkg ICgzPDwxMCkKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFfQk9UVE9NX1ZMMQkJICAoMDw8MTIpCisj ZGVmaW5lIExDRF9DVFJMX0FMUEhBX0JPVFRPTV9WTDIJCSAgKDE8PDEyKQorI2RlZmluZSBMQ0Rf Q1RSTF9BTFBIQV9CT1RUT01fR0wxCQkgICgyPDwxMikKKyNkZWZpbmUgTENEX0NUUkxfQUxQSEFf Qk9UVE9NX0dMMgkJICAoMzw8MTIpCisjZGVmaW5lIExDRF9DVFJMX1RJTV9HRU5fRU5BQkxFCQkJ ICAoMTw8MTQpCisjZGVmaW5lIExDRF9DVFJMX0NPTlRJTlVPVVMJCQkgICgwPDwxNSkKKyNkZWZp bmUgTENEX0NUUkxfT05FX1NIT1QJCQkgICgxPDwxNSkKKyNkZWZpbmUgTENEX0NUUkxfUFdNMF9F TgkJCSAgKDE8PDE2KQorI2RlZmluZSBMQ0RfQ1RSTF9QV00xX0VOCQkJICAoMTw8MTcpCisjZGVm aW5lIExDRF9DVFJMX1BXTTJfRU4JCQkgICgxPDwxOCkKKyNkZWZpbmUgTENEX0NUUkxfT1VUUFVU X0RJU0FCTEVECQkgICgwPDwxOSkKKyNkZWZpbmUgTENEX0NUUkxfT1VUUFVUX0VOQUJMRUQJCQkg ICgxPDwxOSkKKyNkZWZpbmUgTENEX0NUUkxfQlBPUkNIX0VOQUJMRQkJCSAgKDE8PDIxKQorI2Rl ZmluZSBMQ0RfQ1RSTF9GUE9SQ0hfRU5BQkxFCQkJICAoMTw8MjIpCisjZGVmaW5lIExDRF9DVFJM X1BJUEVMSU5FX0RNQQkJCSAgKDE8PDI4KQorI2RlZmluZSBMQ0RfQ1RSTF9WSFNZTkNfSURMRV9M VkwJCSAgKDE8PDMxKQorCisvKmludGVycnVwdHMgKi8KKyNkZWZpbmUgTENEX0lOVF9TVEFUVVMJ CQkJKDB4NCAqIDB4MDAxKQorI2RlZmluZSBMQ0RfSU5UX0VPRgkJCQkgICgxPDwwKQorI2RlZmlu ZSBMQ0RfSU5UX0xJTkVfQ01QCQkJICAoMTw8MSkKKyNkZWZpbmUgTENEX0lOVF9WRVJUX0NPTVAJ CQkgICgxPDwyKQorI2RlZmluZSBMQVlFUjBfRE1BX0RPTkUJCQkJICAoMTw8MykKKyNkZWZpbmUg TEFZRVIwX0RNQV9JRExFCQkJCSAgKDE8PDQpCisjZGVmaW5lIExBWUVSMF9ETUFfRklGT19PVkVS RkxPVwkJICAoMTw8NSkKKyNkZWZpbmUgTEFZRVIwX0RNQV9GSUZPX1VOREVSRkxPVwkJICAoMTw8 NikKKyNkZWZpbmUgTEFZRVIwX0RNQV9DQl9GSUZPX09WRVJGTE9XCQkgICgxPDw3KQorI2RlZmlu ZSBMQVlFUjBfRE1BX0NCX0ZJRk9fVU5ERVJGTE9XCQkgICgxPDw4KQorI2RlZmluZSBMQVlFUjBf RE1BX0NSX0ZJRk9fT1ZFUkZMT1cJCSAgKDE8PDkpCisjZGVmaW5lIExBWUVSMF9ETUFfQ1JfRklG T19VTkRFUkZMT1cJCSAgKDE8PDEwKQorI2RlZmluZSBMQVlFUjFfRE1BX0RPTkUJCQkJICAoMTw8 MTEpCisjZGVmaW5lIExBWUVSMV9ETUFfSURMRQkJCQkgICgxPDwxMikKKyNkZWZpbmUgTEFZRVIx X0RNQV9GSUZPX09WRVJGTE9XCQkgICgxPDwxMykKKyNkZWZpbmUgTEFZRVIxX0RNQV9GSUZPX1VO REVSRkxPVwkJICAoMTw8MTQpCisjZGVmaW5lIExBWUVSMV9ETUFfQ0JfRklGT19PVkVSRkxPVwkJ ICAoMTw8MTUpCisjZGVmaW5lIExBWUVSMV9ETUFfQ0JfRklGT19VTkRFUkZMT1cJCSAgKDE8PDE2 KQorI2RlZmluZSBMQVlFUjFfRE1BX0NSX0ZJRk9fT1ZFUkZMT1cJCSAgKDE8PDE3KQorI2RlZmlu ZSBMQVlFUjFfRE1BX0NSX0ZJRk9fVU5ERVJGTE9XCQkgICgxPDwxOCkKKyNkZWZpbmUgTEFZRVIy X0RNQV9ET05FCQkJCSAgKDE8PDE5KQorI2RlZmluZSBMQVlFUjJfRE1BX0lETEUJCQkJICAoMTw8 MjApCisjZGVmaW5lIExBWUVSMl9ETUFfRklGT19PVkVSRkxPVwkJICAoMTw8MjEpCisjZGVmaW5l IExBWUVSMl9ETUFfRklGT19VTkRFUkZMT1cJCSAgKDE8PDIyKQorI2RlZmluZSBMQVlFUjNfRE1B X0RPTkUJCQkJICAoMTw8MjMpCisjZGVmaW5lIExBWUVSM19ETUFfSURMRQkJCQkgICgxPDwyNCkK KyNkZWZpbmUgTEFZRVIzX0RNQV9GSUZPX09WRVJGTE9XCQkgICgxPDwyNSkKKyNkZWZpbmUgTEFZ RVIzX0RNQV9GSUZPX1VOREVSRkxPVwkJICAoMTw8MjYpCisjZGVmaW5lIExDRF9JTlRfTEFZRVIJ CQkJICAoMHgwN2ZmZmZmOCkKKyNkZWZpbmUgTENEX0lOVF9FTkFCTEUJCQkJKDB4NCAqIDB4MDAy KQorI2RlZmluZSBMQ0RfSU5UX0NMRUFSCQkJCSgweDQgKiAweDAwMykKKyNkZWZpbmUgTENEX0xJ TkVfQ09VTlQJCQkJKDB4NCAqIDB4MDA0KQorI2RlZmluZSBMQ0RfTElORV9DT01QQVJFCQkJKDB4 NCAqIDB4MDA1KQorI2RlZmluZSBMQ0RfVlNUQVRVUwkJCQkoMHg0ICogMHgwMDYpCisKKy8qTENE X1ZTVEFUVVNfQ09NUEFSRSBWZXJ0Y2FsIGludGVydmFsIGluIHdoaWNoIHRvIGdlbmVyYXRlIHZl cnRjYWwKKyAqIGludGVydmFsIGludGVycnVwdAorICovCisvKiBCSVRTIDEzIGFuZCAxNCAqLwor I2RlZmluZSBMQ0RfVlNUQVRVU19DT01QQVJFCQkJKDB4NCAqIDB4MDA3KQorI2RlZmluZSBMQ0Rf VlNUQVRVU19WRVJUSUNBTF9TVEFUVVNfTUFTSwkgICgzPDwxMykKKyNkZWZpbmUgTENEX1ZTVEFU VVNfQ09NUEFSRV9WU1lOQwkJICAoMDw8MTMpCisjZGVmaW5lIExDRF9WU1RBVFVTX0NPTVBBUkVf QkFDS1BPUkNICQkgICgxPDwxMykKKyNkZWZpbmUgTENEX1ZTVEFUVVNfQ09NUEFSRV9BQ1RJVkUJ CSAgKDI8PDEzKQorI2RlZmluZSBMQ0RfVlNUQVRVU19DT01QQVJFX0ZST05UX1BPUkNICQkgICgz PDwxMykKKworI2RlZmluZSBMQ0RfU0NSRUVOX1dJRFRICQkJKDB4NCAqIDB4MDA4KQorI2RlZmlu ZSBMQ0RfU0NSRUVOX0hFSUdIVAkJCSgweDQgKiAweDAwOSkKKyNkZWZpbmUgTENEX0ZJRUxEX0lO VF9DRkcJCQkoMHg0ICogMHgwMGEpCisjZGVmaW5lIExDRF9GSUZPX0ZMVVNICQkJCSgweDQgKiAw eDAwYikKKyNkZWZpbmUgTENEX0JHX0NPTE9VUl9MUwkJCSgweDQgKiAweDAwYykKKyNkZWZpbmUg TENEX0JHX0NPTE9VUl9NUwkJCSgweDQgKiAweDAwZCkKKyNkZWZpbmUgTENEX1JBTV9DRkcJCQkg ICAgICAgICgweDQgKiAweDAwZSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkgICBMQ0Qg Y29udHJvbGxlciBMYXllciBjb25maWcgcmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg Ki8KKyNkZWZpbmUgTENEX0xBWUVSMF9DRkcJCSAgICAgICAgKDB4NCAqIDB4MTAwKQorI2RlZmlu ZSBMQ0RfTEFZRVJuX0NGRyhOKQkJCShMQ0RfTEFZRVIwX0NGRyArICgweDQwMCpOKSkKKyNkZWZp bmUgTENEX0xBWUVSX1NDQUxFX0gJCQkgICgxPDwxKQorI2RlZmluZSBMQ0RfTEFZRVJfU0NBTEVf VgkJCSAgKDE8PDIpCisjZGVmaW5lIExDRF9MQVlFUl9TQ0FMRV9IX1YJCQkgIChMQ0RfTEFZRVJf U0NBTEVfSCB8IFwKKwkJCQkJCQlMQ0RfTEFZRVJfU0NBTEVfVikKKyNkZWZpbmUgTENEX0xBWUVS X0NTQ19FTgkJCSAgKDE8PDMpCisjZGVmaW5lIExDRF9MQVlFUl9BTFBIQV9TVEFUSUMJCQkgICgx PDw0KQorI2RlZmluZSBMQ0RfTEFZRVJfQUxQSEFfRU1CRUQJCQkgICgxPDw1KQorI2RlZmluZSBM Q0RfTEFZRVJfQUxQSEFfQ09NQkkJCQkgIChMQ0RfTEFZRVJfQUxQSEFfU1RBVElDIHwgXAorCQkJ CQkJCUxDRF9MQVlFUl9BTFBIQV9FTUJFRCkKKy8qIFJHQiBtdWx0aXBsaWVkIHdpdGggYWxwaGEg Ki8KKyNkZWZpbmUgTENEX0xBWUVSX0FMUEhBX1BSRU1VTFQJCQkgICgxPDw2KQorI2RlZmluZSBM Q0RfTEFZRVJfSU5WRVJUX0NPTAkJCSAgKDE8PDcpCisjZGVmaW5lIExDRF9MQVlFUl9UUkFOU1BB UkVOVF9FTgkJICAoMTw8OCkKKyNkZWZpbmUgTENEX0xBWUVSX0ZPUk1BVF9ZQ0JDUjQ0NFBMQU4J CSAgKDA8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfWUNCQ1I0MjJQTEFOCQkgICgxPDw5 KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX1lDQkNSNDIwUExBTgkJICAoMjw8OSkKKyNkZWZp bmUgTENEX0xBWUVSX0ZPUk1BVF9SR0I4ODhQTEFOCQkgICgzPDw5KQorI2RlZmluZSBMQ0RfTEFZ RVJfRk9STUFUX1lDQkNSNDQ0TElOCQkgICg0PDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFU X1lDQkNSNDIyTElOCQkgICg1PDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX1JHQjg4OAkJ CSAgKDY8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCQTg4ODgJCSAgKDc8PDkpCisj ZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCWDg4ODgJCSAgKDg8PDkpCisjZGVmaW5lIExDRF9M QVlFUl9GT1JNQVRfUkdCNTY1CQkJICAoOTw8OSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZPUk1BVF9S R0JBMTU1NQkJICAoMHhhPDw5KQorI2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX1hSR0IxNTU1CQkg ICgweGI8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCNDQ0CQkJICAoMHhjPDw5KQor I2RlZmluZSBMQ0RfTEFZRVJfRk9STUFUX1JHQkE0NDQ0CQkgICgweGQ8PDkpCisjZGVmaW5lIExD RF9MQVlFUl9GT1JNQVRfUkdCWDQ0NDQJCSAgKDB4ZTw8OSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZP Uk1BVF9SR0IzMzIJCQkgICgweGY8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCQTMz MjgJCSAgKDB4MTA8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfUkdCWDMzMjgJCSAgKDB4 MTE8PDkpCisjZGVmaW5lIExDRF9MQVlFUl9GT1JNQVRfQ0xVVAkJCSAgKDB4MTI8PDkpCisjZGVm aW5lIExDRF9MQVlFUl9GT1JNQVRfTlYxMgkJCSAgKDB4MWM8PDkpCisjZGVmaW5lIExDRF9MQVlF Ul9QTEFOQVJfU1RPUkFHRQkJICAoMTw8MTQpCisjZGVmaW5lIExDRF9MQVlFUl84QlBQCQkJCSAg KDA8PDE1KQorI2RlZmluZSBMQ0RfTEFZRVJfMTZCUFAJCQkJICAoMTw8MTUpCisjZGVmaW5lIExD RF9MQVlFUl8yNEJQUAkJCQkgICgyPDwxNSkKKyNkZWZpbmUgTENEX0xBWUVSXzMyQlBQCQkJCSAg KDM8PDE1KQorI2RlZmluZSBMQ0RfTEFZRVJfWV9PUkRFUgkJCSAgKDE8PDE3KQorI2RlZmluZSBM Q0RfTEFZRVJfQ1JDQl9PUkRFUgkJCSAgKDE8PDE4KQorI2RlZmluZSBMQ0RfTEFZRVJfQkdSX09S REVSCQkJICAoMTw8MTkpCisjZGVmaW5lIExDRF9MQVlFUl9MVVRfMkVOVAkJCSAgKDA8PDIwKQor I2RlZmluZSBMQ0RfTEFZRVJfTFVUXzRFTlQJCQkgICgxPDwyMCkKKyNkZWZpbmUgTENEX0xBWUVS X0xVVF8xNkVOVAkJCSAgKDI8PDIwKQorI2RlZmluZSBMQ0RfTEFZRVJfTk9fRkxJUAkJCSAgKDA8 PDIyKQorI2RlZmluZSBMQ0RfTEFZRVJfRkxJUF9WCQkJICAoMTw8MjIpCisjZGVmaW5lIExDRF9M QVlFUl9GTElQX0gJCQkgICgyPDwyMikKKyNkZWZpbmUgTENEX0xBWUVSX1JPVF9SOTAJCQkgICgz PDwyMikKKyNkZWZpbmUgTENEX0xBWUVSX1JPVF9MOTAJCQkgICg0PDwyMikKKyNkZWZpbmUgTENE X0xBWUVSX1JPVF8xODAJCQkgICg1PDwyMikKKyNkZWZpbmUgTENEX0xBWUVSX0ZJRk9fMDAJCQkg ICgwPDwyNSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZJRk9fMjUJCQkgICgxPDwyNSkKKyNkZWZpbmUg TENEX0xBWUVSX0ZJRk9fNTAJCQkgICgyPDwyNSkKKyNkZWZpbmUgTENEX0xBWUVSX0ZJRk9fMTAw CQkJICAoMzw8MjUpCisjZGVmaW5lIExDRF9MQVlFUl9JTlRFUkxFQVZFX0RJUwkJICAoMDw8Mjcp CisjZGVmaW5lIExDRF9MQVlFUl9JTlRFUkxFQVZFX1YJCQkgICgxPDwyNykKKyNkZWZpbmUgTENE X0xBWUVSX0lOVEVSTEVBVkVfSAkJCSAgKDI8PDI3KQorI2RlZmluZSBMQ0RfTEFZRVJfSU5URVJM RUFWRV9DSAkJCSAgKDM8PDI3KQorI2RlZmluZSBMQ0RfTEFZRVJfSU5URVJMRUFWRV9WX1NVQgkJ ICAoNDw8MjcpCisjZGVmaW5lIExDRF9MQVlFUl9JTlRFUkxFQVZFX0hfU1VCCQkgICg1PDwyNykK KyNkZWZpbmUgTENEX0xBWUVSX0lOVEVSTEVBVkVfQ0hfU1VCCQkgICg2PDwyNykKKyNkZWZpbmUg TENEX0xBWUVSX0lOVEVSX1BPU19FVkVOCQkgICgwPDwzMCkKKyNkZWZpbmUgTENEX0xBWUVSX0lO VEVSX1BPU19PREQJCQkgICgxPDwzMCkKKworI2RlZmluZSBMQ0RfTEFZRVIwX0NPTF9TVEFSVAkJ KDB4NCAqIDB4MTAxKQorI2RlZmluZSBMQ0RfTEFZRVJuX0NPTF9TVEFSVChOKQkJKExDRF9MQVlF UjBfQ09MX1NUQVJUICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX1JPV19TVEFSVAkJ KDB4NCAqIDB4MTAyKQorI2RlZmluZSBMQ0RfTEFZRVJuX1JPV19TVEFSVChOKQkJKExDRF9MQVlF UjBfUk9XX1NUQVJUICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX1dJRFRICQkoMHg0 ICogMHgxMDMpCisjZGVmaW5lIExDRF9MQVlFUm5fV0lEVEgoTikJCShMQ0RfTEFZRVIwX1dJRFRI ICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0hFSUdIVAkJKDB4NCAqIDB4MTA0KQor I2RlZmluZSBMQ0RfTEFZRVJuX0hFSUdIVChOKQkJKExDRF9MQVlFUjBfSEVJR0hUICsgKDB4NDAw Kk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX1NDQUxFX0NGRwkJKDB4NCAqIDB4MTA1KQorI2RlZmlu ZSBMQ0RfTEFZRVJuX1NDQUxFX0NGRyhOKQkJKExDRF9MQVlFUjBfU0NBTEVfQ0ZHICsgKDB4NDAw Kk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0FMUEhBCQkoMHg0ICogMHgxMDYpCisjZGVmaW5lIExD RF9MQVlFUm5fQUxQSEEoTikJCShMQ0RfTEFZRVIwX0FMUEhBICsgKDB4NDAwKk4pKQorI2RlZmlu ZSBMQ0RfTEFZRVIwX0lOVl9DT0xPVVJfTFMJKDB4NCAqIDB4MTA3KQorI2RlZmluZSBMQ0RfTEFZ RVJuX0lOVl9DT0xPVVJfTFMoTikJKExDRF9MQVlFUjBfSU5WX0NPTE9VUl9MUyArICgweDQwMCpO KSkKKyNkZWZpbmUgTENEX0xBWUVSMF9JTlZfQ09MT1VSX01TCSgweDQgKiAweDEwOCkKKyNkZWZp bmUgTENEX0xBWUVSbl9JTlZfQ09MT1VSX01TKE4pCShMQ0RfTEFZRVIwX0lOVl9DT0xPVVJfTVMg KyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfVFJBTlNfQ09MT1VSX0xTCSgweDQgKiAw eDEwOSkKKyNkZWZpbmUgTENEX0xBWUVSbl9UUkFOU19DT0xPVVJfTFMoTikJKExDRF9MQVlFUjBf VFJBTlNfQ09MT1VSX0xTICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX1RSQU5TX0NP TE9VUl9NUwkoMHg0ICogMHgxMGEpCisjZGVmaW5lIExDRF9MQVlFUm5fVFJBTlNfQ09MT1VSX01T KE4pCShMQ0RfTEFZRVIwX1RSQU5TX0NPTE9VUl9NUyArICgweDQwMCpOKSkKKyNkZWZpbmUgTENE X0xBWUVSMF9DU0NfQ09FRkYxMQkJKDB4NCAqIDB4MTBiKQorI2RlZmluZSBMQ0RfTEFZRVJuX0NT Q19DT0VGRjExKE4pCShMQ0RfTEFZRVIwX0NTQ19DT0VGRjExICsgKDB4NDAwKk4pKQorI2RlZmlu ZSBMQ0RfTEFZRVIwX0NTQ19DT0VGRjEyCQkoMHg0ICogMHgxMGMpCisjZGVmaW5lIExDRF9MQVlF Um5fQ1NDX0NPRUZGMTIoTikJKExDRF9MQVlFUjBfQ1NDX0NPRUZGMTIgKyAoMHg0MDAqTikpCisj ZGVmaW5lIExDRF9MQVlFUjBfQ1NDX0NPRUZGMTMJCSgweDQgKiAweDEwZCkKKyNkZWZpbmUgTENE X0xBWUVSbl9DU0NfQ09FRkYxMyhOKQkoTENEX0xBWUVSMF9DU0NfQ09FRkYxMyArICgweDQwMCpO KSkKKyNkZWZpbmUgTENEX0xBWUVSMF9DU0NfQ09FRkYyMQkJKDB4NCAqIDB4MTBlKQorI2RlZmlu ZSBMQ0RfTEFZRVJuX0NTQ19DT0VGRjIxKE4pCShMQ0RfTEFZRVIwX0NTQ19DT0VGRjIxICsgKDB4 NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0NTQ19DT0VGRjIyCQkoMHg0ICogMHgxMGYpCisj ZGVmaW5lIExDRF9MQVlFUm5fQ1NDX0NPRUZGMjIoTikJKExDRF9MQVlFUjBfQ1NDX0NPRUZGMjIg KyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfQ1NDX0NPRUZGMjMJCSgweDQgKiAweDEx MCkKKyNkZWZpbmUgTENEX0xBWUVSbl9DU0NfQ09FRkYyMyhOKQkoTENEX0xBWUVSMF9DU0NfQ09F RkYyMyArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9DU0NfQ09FRkYzMQkJKDB4NCAq IDB4MTExKQorI2RlZmluZSBMQ0RfTEFZRVJuX0NTQ19DT0VGRjMxKE4pCShMQ0RfTEFZRVIwX0NT Q19DT0VGRjMxICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0NTQ19DT0VGRjMyCQko MHg0ICogMHgxMTIpCisjZGVmaW5lIExDRF9MQVlFUm5fQ1NDX0NPRUZGMzIoTikJICAoTENEX0xB WUVSMF9DU0NfQ09FRkYzMiArICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9DU0NfQ09F RkYzMwkJKDB4NCAqIDB4MTEzKQorI2RlZmluZSBMQ0RfTEFZRVJuX0NTQ19DT0VGRjMzKE4pCShM Q0RfTEFZRVIwX0NTQ19DT0VGRjMzICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0NT Q19PRkYxCQkoMHg0ICogMHgxMTQpCisjZGVmaW5lIExDRF9MQVlFUm5fQ1NDX09GRjEoTikJCShM Q0RfTEFZRVIwX0NTQ19PRkYxICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0NTQ19P RkYyCQkoMHg0ICogMHgxMTUpCisjZGVmaW5lIExDRF9MQVlFUm5fQ1NDX09GRjIoTikJCShMQ0Rf TEFZRVIwX0NTQ19PRkYyICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0NTQ19PRkYz CQkoMHg0ICogMHgxMTYpCisjZGVmaW5lIExDRF9MQVlFUm5fQ1NDX09GRjMoTikJCShMQ0RfTEFZ RVIwX0NTQ19PRkYzICsgKDB4NDAwKk4pKQorCisvKiAgTENEIGNvbnRyb2xsZXIgTGF5ZXIgRE1B IGNvbmZpZyByZWdpc3RlciAqLworI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9DRkcJCQkoMHg0ICog MHgxMTcpCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX0NGRyhOKQkJCShMQ0RfTEFZRVIwX0RNQV9D RkcgKyAoMHg0MDAqTikpCisjZGVmaW5lIExDRF9ETUFfTEFZRVJfRU5BQkxFCQkJICAoMTw8MCkK KyNkZWZpbmUgTENEX0RNQV9MQVlFUl9TVEFUVVMJCQkgICgxPDwxKQorI2RlZmluZSBMQ0RfRE1B X0xBWUVSX0FVVE9fVVBEQVRFCQkgICgxPDwyKQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0NPTlRf VVBEQVRFCQkgICgxPDwzKQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0NPTlRfUElOR19QT05HX1VQ REFURQkgIChMQ0RfRE1BX0xBWUVSX0FVVE9fVVBEQVRFIFwKKwkJCQkJCXwgTENEX0RNQV9MQVlF Ul9DT05UX1VQREFURSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9GSUZPX0FEUl9NT0RFCQkgICgx PDw0KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8xCQkgICgxPDw1KQorI2RlZmlu ZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8yCQkgICgyPDw1KQorI2RlZmluZSBMQ0RfRE1BX0xB WUVSX0FYSV9CVVJTVF8zCQkgICgzPDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJT VF80CQkgICg0PDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF81CQkgICg1PDw1 KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF82CQkgICg2PDw1KQorI2RlZmluZSBM Q0RfRE1BX0xBWUVSX0FYSV9CVVJTVF83CQkgICg3PDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVS X0FYSV9CVVJTVF84CQkgICg4PDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF85 CQkgICg5PDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8xMAkJICAoMHhhPDw1 KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8xMQkJICAoMHhiPDw1KQorI2RlZmlu ZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8xMgkJICAoMHhjPDw1KQorI2RlZmluZSBMQ0RfRE1B X0xBWUVSX0FYSV9CVVJTVF8xMwkJICAoMHhkPDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FY SV9CVVJTVF8xNAkJICAoMHhlPDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8x NQkJICAoMHhmPDw1KQorI2RlZmluZSBMQ0RfRE1BX0xBWUVSX0FYSV9CVVJTVF8xNgkJICAoMHgx MDw8NSkKKyNkZWZpbmUgTENEX0RNQV9MQVlFUl9WU1RSSURFX0VOCQkgICgxPDwxMCkKKworI2Rl ZmluZSBMQ0RfTEFZRVIwX0RNQV9TVEFSVF9BRFIJCSgweDQgKiAweDExOCkKKyNkZWZpbmUgTENE X0xBWUVSbl9ETUFfU1RBUlRfQUREUihOKQkJKExDRF9MQVlFUjBfRE1BX1NUQVJUX0FEUiBcCisJ CQkJCQkrICgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9ETUFfU1RBUlRfU0hBRE9XCQko MHg0ICogMHgxMTkpCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX1NUQVJUX1NIQURPVyhOKQkJKExD RF9MQVlFUjBfRE1BX1NUQVJUX1NIQURPVyBcCisJCQkJCQkrICgweDQwMCpOKSkKKyNkZWZpbmUg TENEX0xBWUVSMF9ETUFfTEVOCQkJKDB4NCAqIDB4MTFhKQorI2RlZmluZSBMQ0RfTEFZRVJuX0RN QV9MRU4oTikJCQkoTENEX0xBWUVSMF9ETUFfTEVOICsgXAorCQkJCQkJKDB4NDAwKk4pKQorI2Rl ZmluZSBMQ0RfTEFZRVIwX0RNQV9MRU5fU0hBRE9XCQkoMHg0ICogMHgxMWIpCisjZGVmaW5lIExD RF9MQVlFUm5fRE1BX0xFTl9TSEFET1coTikJCShMQ0RfTEFZRVIwX0RNQV9MRU5fU0hBRE9XICsg XAorCQkJCQkJKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9TVEFUVVMJCQkoMHg0 ICogMHgxMWMpCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX1NUQVRVUyhOKQkJKExDRF9MQVlFUjBf RE1BX1NUQVRVUyArIFwKKwkJCQkJCSgweDQwMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMF9ETUFf TElORV9XSURUSAkJKDB4NCAqIDB4MTFkKQorI2RlZmluZSBMQ0RfTEFZRVJuX0RNQV9MSU5FX1dJ RFRIKE4pCQkoTENEX0xBWUVSMF9ETUFfTElORV9XSURUSCArIFwKKwkJCQkJCSgweDQwMCpOKSkK KyNkZWZpbmUgTENEX0xBWUVSMF9ETUFfTElORV9WU1RSSURFCQkoMHg0ICogMHgxMWUpCisjZGVm aW5lIExDRF9MQVlFUm5fRE1BX0xJTkVfVlNUUklERShOKQkJKExDRF9MQVlFUjBfRE1BX0xJTkVf VlNUUklERSArXAorCQkJCQkJKDB4NDAwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9GSUZP X1NUQVRVUwkJKDB4NCAqIDB4MTFmKQorI2RlZmluZSBMQ0RfTEFZRVJuX0RNQV9GSUZPX1NUQVRV UyhOKQkJKExDRF9MQVlFUjBfRE1BX0ZJRk9fU1RBVFVTICsgXAorCQkJCQkJKDB4NDAwKk4pKQor I2RlZmluZSBMQ0RfTEFZRVIwX0NGRzIJCQkJKDB4NCAqIDB4MTIwKQorI2RlZmluZSBMQ0RfTEFZ RVJuX0NGRzIoTikJCQkoTENEX0xBWUVSMF9DRkcyICsgKDB4NDAwKk4pKQorI2RlZmluZSBMQ0Rf TEFZRVIwX0RNQV9TVEFSVF9DQl9BRFIJCSgweDQgKiAweDcwMCkKKyNkZWZpbmUgTENEX0xBWUVS bl9ETUFfU1RBUlRfQ0JfQURSKE4pCQkoTENEX0xBWUVSMF9ETUFfU1RBUlRfQ0JfQURSICsgXAor CQkJCQkJKDB4MjAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfRE1BX1NUQVJUX0NCX1NIQURPVwkJ KDB4NCAqIDB4NzAxKQorI2RlZmluZSBMQ0RfTEFZRVJuX0RNQV9TVEFSVF9DQl9TSEFET1coTikJ KExDRF9MQVlFUjBfRE1BX1NUQVJUX0NCX1NIQURPV1wKKwkJCQkJCSsgKDB4MjAqTikpCisjZGVm aW5lIExDRF9MQVlFUjBfRE1BX0NCX0xJTkVfV0lEVEgJCSgweDQgKiAweDcwMikKKyNkZWZpbmUg TENEX0xBWUVSbl9ETUFfQ0JfTElORV9XSURUSChOKQkJKExDRF9MQVlFUjBfRE1BX0NCX0xJTkVf V0lEVEggK1wKKwkJCQkJCSgweDIwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9DQl9MSU5F X1ZTVFJJREUJCSgweDQgKiAweDcwMykKKyNkZWZpbmUgTENEX0xBWUVSbl9ETUFfQ0JfTElORV9W U1RSSURFKE4pCShMQ0RfTEFZRVIwX0RNQV9DQl9MSU5FX1ZTVFJJREVcCisJCQkJCQkrICgweDIw Kk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9TVEFSVF9DUl9BRFIJCSgweDQgKiAweDcwNCkK KyNkZWZpbmUgTENEX0xBWUVSbl9ETUFfU1RBUlRfQ1JfQURSKE4pCQkoTENEX0xBWUVSMF9ETUFf U1RBUlRfQ1JfQURSICsgXAorCQkJCQkJKDB4MjAqTikpCisjZGVmaW5lIExDRF9MQVlFUjBfRE1B X1NUQVJUX0NSX1NIQURPVwkJKDB4NCAqIDB4NzA1KQorI2RlZmluZSBMQ0RfTEFZRVJuX0RNQV9T VEFSVF9DUl9TSEFET1coTikJXAorCQkJCQkJKExDRF9MQVlFUjBfRE1BX1NUQVJUX0NSX1NIQURP V1wKKwkJCQkJCSArICgweDIwKk4pKQorI2RlZmluZSBMQ0RfTEFZRVIwX0RNQV9DUl9MSU5FX1dJ RFRICQkoMHg0ICogMHg3MDYpCisjZGVmaW5lIExDRF9MQVlFUm5fRE1BX0NSX0xJTkVfV0lEVEgo TikJCShMQ0RfTEFZRVIwX0RNQV9DUl9MSU5FX1dJRFRIICtcCisJCQkJCQkoMHgyMCpOKSkKKyNk ZWZpbmUgTENEX0xBWUVSMF9ETUFfQ1JfTElORV9WU1RSSURFCQkoMHg0ICogMHg3MDcpCisjZGVm aW5lIExDRF9MQVlFUm5fRE1BX0NSX0xJTkVfVlNUUklERShOKQkoTENEX0xBWUVSMF9ETUFfQ1Jf TElORV9WU1RSSURFXAorCQkJCQkJKyAoMHgyMCpOKSkKKyNkZWZpbmUgTENEX0xBWUVSMV9ETUFf U1RBUlRfQ0JfQURSCQkoMHg0ICogMHg3MDgpCisjZGVmaW5lIExDRF9MQVlFUjFfRE1BX1NUQVJU X0NCX1NIQURPVwkJKDB4NCAqIDB4NzA5KQorI2RlZmluZSBMQ0RfTEFZRVIxX0RNQV9DQl9MSU5F X1dJRFRICQkoMHg0ICogMHg3MGEpCisjZGVmaW5lIExDRF9MQVlFUjFfRE1BX0NCX0xJTkVfVlNU UklERQkJKDB4NCAqIDB4NzBiKQorI2RlZmluZSBMQ0RfTEFZRVIxX0RNQV9TVEFSVF9DUl9BRFIJ CSgweDQgKiAweDcwYykKKyNkZWZpbmUgTENEX0xBWUVSMV9ETUFfU1RBUlRfQ1JfU0hBRE9XCQko MHg0ICogMHg3MGQpCisjZGVmaW5lIExDRF9MQVlFUjFfRE1BX0NSX0xJTkVfV0lEVEgJCSgweDQg KiAweDcwZSkKKyNkZWZpbmUgTENEX0xBWUVSMV9ETUFfQ1JfTElORV9WU1RSSURFCQkoMHg0ICog MHg3MGYpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJICAgTENEIGNvbnRyb2xsZXIgb3V0 cHV0IGZvcm1hdCByZWdpc3RlciBkZWZpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZp bmUgTENEX09VVF9GT1JNQVRfQ0ZHCQkJKDB4NCAqIDB4ODAwKQorI2RlZmluZSBMQ0RfT1VURl9G T1JNQVRfUkdCMTIxMjEyICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTENEX09VVEZf Rk9STUFUX1JHQjEwMTAxMCAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIExDRF9PVVRG X0ZPUk1BVF9SR0I4ODggICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBMQ0RfT1VU Rl9GT1JNQVRfUkdCNjY2ICAgICAgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTENEX09V VEZfRk9STUFUX1JHQjU2NSAgICAgICAgICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIExDRF9P VVRGX0ZPUk1BVF9SR0I0NDQgICAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBMQ0Rf T1VURl9GT1JNQVRfTVJHQjEyMTIxMiAgICAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTENE X09VVEZfRk9STUFUX01SR0IxMDEwMTAgICAgICAgICAgICAgICAgKDB4MTEpCisjZGVmaW5lIExD RF9PVVRGX0ZPUk1BVF9NUkdCODg4ICAgICAgICAgICAgICAgICAgICgweDEyKQorI2RlZmluZSBM Q0RfT1VURl9GT1JNQVRfTVJHQjY2NiAgICAgICAgICAgICAgICAgICAoMHgxMykKKyNkZWZpbmUg TENEX09VVEZfRk9STUFUX01SR0I1NjUgICAgICAgICAgICAgICAgICAgKDB4MTQpCisjZGVmaW5l IExDRF9PVVRGX0ZPUk1BVF9ZQ0JDUjQyMF84Ql9MRUdBQ1kgICAgICAgICgweDA4KQorI2RlZmlu ZSBMQ0RfT1VURl9GT1JNQVRfWUNCQ1I0MjBfOEJfRENJICAgICAgICAgICAoMHgwOSkKKyNkZWZp bmUgTENEX09VVEZfRk9STUFUX1lDQkNSNDIwXzhCICAgICAgICAgICAgICAgKDB4MEEpCisjZGVm aW5lIExDRF9PVVRGX0ZPUk1BVF9ZQ0JDUjQyMF8xMEIgICAgICAgICAgICAgICgweDBCKQorI2Rl ZmluZSBMQ0RfT1VURl9GT1JNQVRfWUNCQ1I0MjBfMTJCICAgICAgICAgICAgICAoMHgwQykKKyNk ZWZpbmUgTENEX09VVEZfRk9STUFUX1lDQkNSNDIyXzhCICAgICAgICAgICAgICAgKDB4MEQpCisj ZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9ZQ0JDUjQyMl8xMEIgICAgICAgICAgICAgICgweDBFKQor I2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfWUNCQ1I0NDQgICAgICAgICAgICAgICAgICAoMHgwRikK KyNkZWZpbmUgTENEX09VVEZfRk9STUFUX01ZQ0JDUjQyMF84Ql9MRUdBQ1kgICAgICAgKDB4MTgp CisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9NWUNCQ1I0MjBfOEJfRENJICAgICAgICAgICgweDE5 KQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfTVlDQkNSNDIwXzhCICAgICAgICAgICAgICAoMHgx QSkKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX01ZQ0JDUjQyMF8xMEIgICAgICAgICAgICAgKDB4 MUIpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9NWUNCQ1I0MjBfMTJCICAgICAgICAgICAgICgw eDFDKQorI2RlZmluZSBMQ0RfT1VURl9GT1JNQVRfTVlDQkNSNDIyXzhCICAgICAgICAgICAgICAo MHgxRCkKKyNkZWZpbmUgTENEX09VVEZfRk9STUFUX01ZQ0JDUjQyMl8xMEIgICAgICAgICAgICAg KDB4MUUpCisjZGVmaW5lIExDRF9PVVRGX0ZPUk1BVF9NWUNCQ1I0NDQgICAgICAgICAgICAgICAg ICgweDFGKQorI2RlZmluZSBMQ0RfT1VURl9CR1JfT1JERVIJCQkgICgxIDw8IDUpCisjZGVmaW5l IExDRF9PVVRGX1lfT1JERVIJCQkgICgxIDw8IDYpCisjZGVmaW5lIExDRF9PVVRGX0NSQ0JfT1JE RVIJCQkgICgxIDw8IDcpCisjZGVmaW5lIExDRF9PVVRGX1NZTkNfTU9ERQkJCSAgKDEgPDwgMTEp CisjZGVmaW5lIExDRF9PVVRGX1JHQl9DT05WX01PREUJCQkgICgxIDw8IDE0KQorI2RlZmluZSBM Q0RfT1VURl9NSVBJX1JHQl9NT0RFCQkJICAoMSA8PCAxOCkKKworI2RlZmluZSBMQ0RfSFNZTkNf V0lEVEgJCQkJKDB4NCAqIDB4ODAxKQorI2RlZmluZSBMQ0RfSF9CQUNLUE9SQ0gJCQkJKDB4NCAq IDB4ODAyKQorI2RlZmluZSBMQ0RfSF9BQ1RJVkVXSURUSAkJCSgweDQgKiAweDgwMykKKyNkZWZp bmUgTENEX0hfRlJPTlRQT1JDSAkJCSgweDQgKiAweDgwNCkKKyNkZWZpbmUgTENEX1ZTWU5DX1dJ RFRICQkJCSgweDQgKiAweDgwNSkKKyNkZWZpbmUgTENEX1ZfQkFDS1BPUkNICQkJCSgweDQgKiAw eDgwNikKKyNkZWZpbmUgTENEX1ZfQUNUSVZFSEVJR0hUCQkJKDB4NCAqIDB4ODA3KQorI2RlZmlu ZSBMQ0RfVl9GUk9OVFBPUkNICQkJKDB4NCAqIDB4ODA4KQorI2RlZmluZSBMQ0RfVlNZTkNfU1RB UlQJCQkJKDB4NCAqIDB4ODA5KQorI2RlZmluZSBMQ0RfVlNZTkNfRU5ECQkJCSgweDQgKiAweDgw YSkKKyNkZWZpbmUgTENEX1ZfQkFDS1BPUkNIX0VWRU4JCQkoMHg0ICogMHg4MGIpCisjZGVmaW5l IExDRF9WU1lOQ19XSURUSF9FVkVOCQkJKDB4NCAqIDB4ODBjKQorI2RlZmluZSBMQ0RfVl9BQ1RJ VkVIRUlHSFRfRVZFTgkJCSgweDQgKiAweDgwZCkKKyNkZWZpbmUgTENEX1ZfRlJPTlRQT1JDSF9F VkVOCQkJKDB4NCAqIDB4ODBlKQorI2RlZmluZSBMQ0RfVlNZTkNfU1RBUlRfRVZFTgkJCSgweDQg KiAweDgwZikKKyNkZWZpbmUgTENEX1ZTWU5DX0VORF9FVkVOCQkJKDB4NCAqIDB4ODEwKQorI2Rl ZmluZSBMQ0RfVElNSU5HX0dFTl9UUklHCQkJKDB4NCAqIDB4ODExKQorI2RlZmluZSBMQ0RfUFdN MF9DVFJMCQkJCSgweDQgKiAweDgxMikKKyNkZWZpbmUgTENEX1BXTTBfUlBUX0xFQURJTgkJCSgw eDQgKiAweDgxMykKKyNkZWZpbmUgTENEX1BXTTBfSElHSF9MT1cJCQkoMHg0ICogMHg4MTQpCisj ZGVmaW5lIExDRF9QV00xX0NUUkwJCQkJKDB4NCAqIDB4ODE1KQorI2RlZmluZSBMQ0RfUFdNMV9S UFRfTEVBRElOCQkJKDB4NCAqIDB4ODE2KQorI2RlZmluZSBMQ0RfUFdNMV9ISUdIX0xPVwkJCSgw eDQgKiAweDgxNykKKyNkZWZpbmUgTENEX1BXTTJfQ1RSTAkJCQkoMHg0ICogMHg4MTgpCisjZGVm aW5lIExDRF9QV00yX1JQVF9MRUFESU4JCQkoMHg0ICogMHg4MTkpCisjZGVmaW5lIExDRF9QV00y X0hJR0hfTE9XCQkJKDB4NCAqIDB4ODFhKQorI2RlZmluZSBMQ0RfVklERU8wX0RNQTBfQllURVMJ CQkoMHg0ICogMHhiMDApCisjZGVmaW5lIExDRF9WSURFTzBfRE1BMF9TVEFURQkJCSgweDQgKiAw eGIwMSkKKyNkZWZpbmUgTENEX0RNQV9TVEFURV9BQ1RJVkUJCQkgICgxIDw8IDMpCisjZGVmaW5l IExDRF9WSURFTzBfRE1BMV9CWVRFUwkJCSgweDQgKiAweGIwMikKKyNkZWZpbmUgTENEX1ZJREVP MF9ETUExX1NUQVRFCQkJKDB4NCAqIDB4YjAzKQorI2RlZmluZSBMQ0RfVklERU8wX0RNQTJfQllU RVMJCQkoMHg0ICogMHhiMDQpCisjZGVmaW5lIExDRF9WSURFTzBfRE1BMl9TVEFURQkJCSgweDQg KiAweGIwNSkKKyNkZWZpbmUgTENEX1ZJREVPMV9ETUEwX0JZVEVTCQkJKDB4NCAqIDB4YjA2KQor I2RlZmluZSBMQ0RfVklERU8xX0RNQTBfU1RBVEUJCQkoMHg0ICogMHhiMDcpCisjZGVmaW5lIExD RF9WSURFTzFfRE1BMV9CWVRFUwkJCSgweDQgKiAweGIwOCkKKyNkZWZpbmUgTENEX1ZJREVPMV9E TUExX1NUQVRFCQkJKDB4NCAqIDB4YjA5KQorI2RlZmluZSBMQ0RfVklERU8xX0RNQTJfQllURVMJ CQkoMHg0ICogMHhiMGEpCisjZGVmaW5lIExDRF9WSURFTzFfRE1BMl9TVEFURQkJCSgweDQgKiAw eGIwYikKKyNkZWZpbmUgTENEX0dSQVBISUMwX0RNQV9CWVRFUwkJCSgweDQgKiAweGIwYykKKyNk ZWZpbmUgTENEX0dSQVBISUMwX0RNQV9TVEFURQkJCSgweDQgKiAweGIwZCkKKyNkZWZpbmUgTENE X0dSQVBISUMxX0RNQV9CWVRFUwkJCSgweDQgKiAweGIwZSkKKyNkZWZpbmUgTENEX0dSQVBISUMx X0RNQV9TVEFURQkJCSgweDQgKiAweGIwZikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCSAg IE1JUEkgY29udHJvbGxlciBjb250cm9sIHJlZ2lzdGVyIGRlZmluZXMKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKmkqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworI2RlZmluZSBNSVBJMF9IU19CQVNFX0FERFIJCQkoTUlQSV9CQVNFX0FERFIgKyAw eDQwMCkKKyNkZWZpbmUgSFNfT0ZGU0VUKE0pCQkJCSgoTSArIDEpICogMHg0MDApCisKKyNkZWZp bmUgTUlQSV9UWF9IU19DVFJMCQkJCSgweDApCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfQ1RSTChN KQkJCShNSVBJX1RYX0hTX0NUUkwgKyBIU19PRkZTRVQoTSkpCisjZGVmaW5lICAgSFNfQ1RSTF9F TgkJCQkoMSA8PCAwKQorLyoxOkNTSSAwOkRTSSAqLworI2RlZmluZSAgIEhTX0NUUkxfQ1NJRFNJ TgkJCSgxIDw8IDIpCisvKjE6TENELCAwOkRNQSAqLworI2RlZmluZSAgIFRYX1NPVVJDRQkJCQko MSA8PCAzKQorI2RlZmluZSAgIEFDVElWRV9MQU5FUyhuKQkJCSgobikgPDwgNCkKKyNkZWZpbmUg ICBMQ0RfVkMoY2gpCQkJCSgoY2gpIDw8IDgpCisjZGVmaW5lICAgRFNJX0VPVFBfRU4JCQkJKDEg PDwgMTEpCisjZGVmaW5lICAgRFNJX0NNRF9IRlBfRU4JCQkoMSA8PCAxMikKKyNkZWZpbmUgICBD UkNfRU4JCQkJKDEgPDwgMTQpCisjZGVmaW5lICAgSFNFWElUX0NOVChuKQkJCQkoKG4pIDw8IDE2 KQorI2RlZmluZSAgIEhTQ0xLSURMRV9DTlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE1JUElfVFhf SFNfU1lOQ19DRkcJCQkoMHg4KQorI2RlZmluZSAgIE1JUElfVFhtX0hTX1NZTkNfQ0ZHKE0pCQko TUlQSV9UWF9IU19TWU5DX0NGRyBcCisJCQkJCQkrIEhTX09GRlNFVChNKSkKKyNkZWZpbmUgICBM SU5FX1NZTkNfUEtUX0VOQUJMRQkJCSgxIDw8IDApCisjZGVmaW5lICAgRlJBTUVfQ09VTlRFUl9B Q1RJVkUJCQkoMSA8PCAxKQorI2RlZmluZSAgIExJTkVfQ09VTlRFUl9BQ1RJVkUJCQkoMSA8PCAy KQorI2RlZmluZSAgIERTSV9WX0JMQU5LSU5HCQkJKDEgPDwgNCkKKyNkZWZpbmUgICBEU0lfSFNB X0JMQU5LSU5HCQkJKDEgPDwgNSkKKyNkZWZpbmUgICBEU0lfSEJQX0JMQU5LSU5HCQkJKDEgPDwg NikKKyNkZWZpbmUgICBEU0lfSEZQX0JMQU5LSU5HCQkJKDEgPDwgNykKKyNkZWZpbmUgICBEU0lf U1lOQ19QVUxTRV9FVkVOVE4JCQkoMSA8PCA4KQorI2RlZmluZSAgIERTSV9MUE1fRklSU1RfVlNB X0xJTkUJCSgxIDw8IDkpCisjZGVmaW5lICAgRFNJX0xQTV9MQVNUX1ZGUF9MSU5FCQkJKDEgPDwg MTApCisjZGVmaW5lICAgV0FJVF9BTExfU0VDVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgICBXQUlU X1RSSUdfUE9TCQkJCSgxIDw8IDE1KQorI2RlZmluZSAgIEFMV0FZU19VU0VfSEFDVChmKQkJCSgo ZikgPDwgMTkpCisjZGVmaW5lICAgRlJBTUVfR0VOX0VOKGYpCQkJKChmKSA8PCAyMykKKyNkZWZp bmUgICBIQUNUX1dBSVRfU1RPUChmKQkJCSgoZikgPDwgMjgpCisjZGVmaW5lIE1JUElfVFgwX0hT X0ZHMF9TRUNUMF9QSAkJKDB4NDApCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfRkduX1NFQ1RvX1BI KE0sIE4sIE8pCShNSVBJX1RYMF9IU19GRzBfU0VDVDBfUEggKyBcCisJCQkJCQlIU19PRkZTRVQo TSkgKyAoMHgyQypOKSArICg4Kk8pKQorI2RlZmluZSAgIE1JUElfVFhfU0VDVF9XQ19NQVNLCQkJ KDB4ZmZmZikKKyNkZWZpbmUJICBNSVBJX1RYX1NFQ1RfVkNfTUFTSwkJCSgzKQorI2RlZmluZSAg IE1JUElfVFhfU0VDVF9WQ19TSElGVAkJCSgyMikKKyNkZWZpbmUgICBNSVBJX1RYX1NFQ1RfRFRf TUFTSwkJCSgweDNmKQorI2RlZmluZSAgIE1JUElfVFhfU0VDVF9EVF9TSElGVAkJCSgxNikKKyNk ZWZpbmUgICBNSVBJX1RYX1NFQ1RfRE1fTUFTSwkJCSgzKQorI2RlZmluZSAgIE1JUElfVFhfU0VD VF9ETV9TSElGVAkJCSgyNCkKKyNkZWZpbmUgICBNSVBJX1RYX1NFQ1RfRE1BX1BBQ0tFRAkJKDE8 PDI2KQorI2RlZmluZSBNSVBJX1RYX0hTX0ZHMF9TRUNUX1VOUEFDS0VEX0JZVEVTMAkoMHg2MCkK KyNkZWZpbmUgTUlQSV9UWF9IU19GRzBfU0VDVF9VTlBBQ0tFRF9CWVRFUzEJKDB4NjQpCisjZGVm aW5lICAgTUlQSV9UWG1fSFNfRkduX1NFQ1RfVU5QQUNLRURfQllURVMwKE0sIE4pCVwKKwkJCQkJ KE1JUElfVFhfSFNfRkcwX1NFQ1RfVU5QQUNLRURfQllURVMwIFwKKwkJCQkJKyBIU19PRkZTRVQo TSkgKyAoMHgyQypOKSkKKyNkZWZpbmUgTUlQSV9UWF9IU19GRzBfU0VDVDBfTElORV9DRkcJCSgw eDQ0KQorI2RlZmluZSAgIE1JUElfVFhtX0hTX0ZHbl9TRUNUb19MSU5FX0NGRyhNLCBOLCBPKQlc CisJCQkJKE1JUElfVFhfSFNfRkcwX1NFQ1QwX0xJTkVfQ0ZHICsgSFNfT0ZGU0VUKE0pIFwKKwkJ CQkrICgweDJDKk4pICsgKDgqTykpCisKKyNkZWZpbmUgTUlQSV9UWF9IU19GRzBfTlVNX0xJTkVT CQkoMHg2OCkKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19GR25fTlVNX0xJTkVTKE0sIE4pCVwKKwkJ CQkoTUlQSV9UWF9IU19GRzBfTlVNX0xJTkVTICsgSFNfT0ZGU0VUKE0pIFwKKwkJCQkrICgweDJD Kk4pKQorI2RlZmluZSBNSVBJX1RYX0hTX1ZTWU5DX1dJRFRIUzAJCSgweDEwNCkKKyNkZWZpbmUg ICBNSVBJX1RYbV9IU19WU1lOQ19XSURUSG4oTSwgTikJCVwKKwkJCQkoTUlQSV9UWF9IU19WU1lO Q19XSURUSFMwICsgSFNfT0ZGU0VUKE0pIFwKKwkJCQkrICgweDQqTikpCisjZGVmaW5lIE1JUElf VFhfSFNfVl9CQUNLUE9SQ0hFUzAJCSgweDE2YykKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19WX0JB Q0tQT1JDSEVTbihNLCBOKQlcCisJCQkJKE1JUElfVFhfSFNfVl9CQUNLUE9SQ0hFUzAgKyBIU19P RkZTRVQoTSkgXAorCQkJCSsgKDB4NCpOKSkKKyNkZWZpbmUgTUlQSV9UWF9IU19WX0ZST05UUE9S Q0hFUzAJCSgweDE3NCkKKyNkZWZpbmUgICBNSVBJX1RYbV9IU19WX0ZST05UUE9SQ0hFU24oTSwg TikJXAorCQkJCShNSVBJX1RYX0hTX1ZfRlJPTlRQT1JDSEVTMCArIEhTX09GRlNFVChNKSBcCisJ CQkJKyAoMHg0Kk4pKQorI2RlZmluZSBNSVBJX1RYX0hTX1ZfQUNUSVZFMAkJCSgweDE3YykKKyNk ZWZpbmUgICBNSVBJX1RYbV9IU19WX0FDVElWRW4oTSwgTikJCVwKKwkJCQkoTUlQSV9UWF9IU19W X0FDVElWRTAgKyBIU19PRkZTRVQoTSkgXAorCQkJCSsgKDB4NCpOKSkKKyNkZWZpbmUgTUlQSV9U WF9IU19IU1lOQ19XSURUSDAJCQkoMHgxMGMpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfSFNZTkNf V0lEVEhuKE0sIE4pCQlcCisJCQkJKE1JUElfVFhfSFNfSFNZTkNfV0lEVEgwICsgSFNfT0ZGU0VU KE0pIFwKKwkJCQkrICgweDQqTikpCisjZGVmaW5lIE1JUElfVFhfSFNfSF9CQUNLUE9SQ0gwCQkJ KDB4MTFjKQorI2RlZmluZSAgIE1JUElfVFhtX0hTX0hfQkFDS1BPUkNIbihNLCBOKQkJXAorCQkJ CShNSVBJX1RYX0hTX0hfQkFDS1BPUkNIMCArIEhTX09GRlNFVChNKSBcCisJCQkJKyAoMHg0Kk4p KQorI2RlZmluZSBNSVBJX1RYX0hTX0hfRlJPTlRQT1JDSDAJCSgweDEyYykKKyNkZWZpbmUgICBN SVBJX1RYbV9IU19IX0ZST05UUE9SQ0huKE0sIE4pCVwKKwkJCQkoTUlQSV9UWF9IU19IX0ZST05U UE9SQ0gwICsgSFNfT0ZGU0VUKE0pIFwKKwkJCQkrICgweDQqTikpCisjZGVmaW5lIE1JUElfVFhf SFNfSF9BQ1RJVkUwCQkJKDB4MTg0KQorI2RlZmluZSAgIE1JUElfVFhtX0hTX0hfQUNUSVZFbihN LCBOKQkJXAorCQkJCShNSVBJX1RYX0hTX0hfQUNUSVZFMCArIEhTX09GRlNFVChNKSBcCisJCQkJ KyAoMHg0Kk4pKQorI2RlZmluZSBNSVBJX1RYX0hTX0xMUF9IU1lOQ19XSURUSDAJCSgweDEzYykK KyNkZWZpbmUgICBNSVBJX1RYbV9IU19MTFBfSFNZTkNfV0lEVEhuKE0sIE4pCVwKKwkJCQkoTUlQ SV9UWF9IU19MTFBfSFNZTkNfV0lEVEgwICsgSFNfT0ZGU0VUKE0pIFwKKwkJCQkrICgweDQqTikp CisjZGVmaW5lIE1JUElfVFhfSFNfTExQX0hfQkFDS1BPUkNIMAkJKDB4MTRjKQorI2RlZmluZSAg IE1JUElfVFhtX0hTX0xMUF9IX0JBQ0tQT1JDSG4oTSwgTikJXAorCQkJCShNSVBJX1RYX0hTX0xM UF9IX0JBQ0tQT1JDSDAgKyBIU19PRkZTRVQoTSkgXAorCQkJCSsgKDB4NCpOKSkKKyNkZWZpbmUg TUlQSV9UWF9IU19MTFBfSF9GUk9OVFBPUkNIMAkJKDB4MTVjKQorI2RlZmluZSAgIE1JUElfVFht X0hTX0xMUF9IX0ZST05UUE9SQ0huKE0sIE4pCVwKKwkJCQkoTUlQSV9UWF9IU19MTFBfSF9GUk9O VFBPUkNIMCArIEhTX09GRlNFVChNKSBcCisJCQkJKyAoMHg0Kk4pKQorCisjZGVmaW5lIE1JUElf VFhfSFNfTUNfRklGT19DVFJMX0VOCQkoMHgxOTQpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfTUNf RklGT19DVFJMX0VOKE0pCVwKKwkJCQkoTUlQSV9UWF9IU19NQ19GSUZPX0NUUkxfRU4gKyBIU19P RkZTRVQoTSkpCisKKyNkZWZpbmUgTUlQSV9UWF9IU19NQ19GSUZPX0NIQU5fQUxMT0MwCQkoMHgx OTgpCisjZGVmaW5lIE1JUElfVFhfSFNfTUNfRklGT19DSEFOX0FMTE9DMQkJKDB4MTljKQorI2Rl ZmluZSAgIE1JUElfVFhtX0hTX01DX0ZJRk9fQ0hBTl9BTExPQ24oTSwgTikJXAorCQkJKE1JUElf VFhfSFNfTUNfRklGT19DSEFOX0FMTE9DMCArIEhTX09GRlNFVChNKSBcCisJCQkrICgweDQqTikp CisjZGVmaW5lICAgU0VUX01DX0ZJRk9fQ0hBTl9BTExPQyhkZXYsIGN0cmwsIHZjLCBzeikJXAor CQlrbWJfd3JpdGVfYml0c19taXBpKGRldiwgXAorCQkJCU1JUElfVFhtX0hTX01DX0ZJRk9fQ0hB Tl9BTExPQ24oY3RybCwgXAorCQkJCXZjLzIpLCAodmMgJSAyKSoxNiwgMTYsIHN6KQorI2RlZmlu ZSBNSVBJX1RYX0hTX01DX0ZJRk9fUlRIUkVTSE9MRDAJCSgweDFhMCkKKyNkZWZpbmUgTUlQSV9U WF9IU19NQ19GSUZPX1JUSFJFU0hPTEQxCQkoMHgxYTQpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNf TUNfRklGT19SVEhSRVNIT0xEbihNLCBOKQlcCisJCQkJKE1JUElfVFhfSFNfTUNfRklGT19SVEhS RVNIT0xEMCArIEhTX09GRlNFVChNKSBcCisJCQkJKyAoMHg0Kk4pKQorI2RlZmluZSAgIFNFVF9N Q19GSUZPX1JUSFJFU0hPTEQoZGV2LCBjdHJsLCB2YywgdGgpCVwKKwlrbWJfd3JpdGVfYml0c19t aXBpKGRldiwgTUlQSV9UWG1fSFNfTUNfRklGT19SVEhSRVNIT0xEbihjdHJsLCB2Yy8yKSwgXAor CQkJKHZjICUgMikqMTYsIDE2LCB0aCkKKyNkZWZpbmUgTUlQSV9UWF9IU19ETUFfQ0ZHCQkJKDB4 MWE4KQorI2RlZmluZSBNSVBJX1RYX0hTX0RNQV9TVEFSVF9BRFJfQ0hBTjAJCSgweDFhYykKKyNk ZWZpbmUgTUlQSV9UWF9IU19ETUFfTEVOX0NIQU4wCQkoMHgxYjQpCisKKy8qIE1JUEkgSVJRICov CisjZGVmaW5lIE1JUElfQ1RSTF9JUlFfU1RBVFVTMAkJCQkoMHgwMCkKKyNkZWZpbmUgICBNSVBJ X0RQSFlfRVJSX0lSUQkJCQkxCisjZGVmaW5lICAgTUlQSV9EUEhZX0VSUl9NQVNLCQkJCTB4N0ZF CS8qYml0cyAxLTEwICovCisjZGVmaW5lICAgTUlQSV9IU19JUlEJCQkJCTEzCisvKmJpdHMgMTMt MjIgKi8KKyNkZWZpbmUgICBNSVBJX0hTX0lSUV9NQVNLCQkJCTB4N0ZFMDAwCisjZGVmaW5lICAg TUlQSV9MUF9FVkVOVF9JUlEJCQkJMjUKKyNkZWZpbmUgICBNSVBJX0dFVF9JUlFfU1RBVDAoZGV2 KQkJa21iX3JlYWRfbWlwaShkZXYsIFwKKwkJCQkJCU1JUElfQ1RSTF9JUlFfU1RBVFVTMCkKKyNk ZWZpbmUgTUlQSV9DVFJMX0lSUV9TVEFUVVMxCQkJCSgweDA0KQorI2RlZmluZSAgIE1JUElfSFNf UlhfRVZFTlRfSVJRCQkJCTAKKyNkZWZpbmUgICBNSVBJX0dFVF9JUlFfU1RBVDEoZGV2KQkJa21i X3JlYWRfbWlwaShkZXYsIFwKKwkJCQkJCU1JUElfQ1RSTF9JUlFfU1RBVFVTMSkKKyNkZWZpbmUg TUlQSV9DVFJMX0lSUV9FTkFCTEUwCQkJCSgweDA4KQorI2RlZmluZSAgIFNFVF9NSVBJX0NUUkxf SVJRX0VOQUJMRTAoZGV2LCBNLCBOKQlrbWJfc2V0X2JpdF9taXBpKGRldiwgXAorCQkJCQkJTUlQ SV9DVFJMX0lSUV9FTkFCTEUwLCBNK04pCisjZGVmaW5lICAgTUlQSV9HRVRfSVJRX0VOQUJMRUQw KGRldikJCWttYl9yZWFkX21pcGkoZGV2LCBcCisJCQkJCQlNSVBJX0NUUkxfSVJRX0VOQUJMRTAp CisjZGVmaW5lIE1JUElfQ1RSTF9JUlFfRU5BQkxFMQkJCQkoMHgwYykKKyNkZWZpbmUgICBNSVBJ X0dFVF9JUlFfRU5BQkxFRDEoZGV2KQkJa21iX3JlYWRfbWlwaShkZXYsIFwKKwkJCQkJCU1JUElf Q1RSTF9JUlFfRU5BQkxFMSkKKyNkZWZpbmUgTUlQSV9DVFJMX0lSUV9DTEVBUjAJCQkJKDB4MDEw KQorI2RlZmluZSAgIFNFVF9NSVBJX0NUUkxfSVJRX0NMRUFSMChkZXYsIE0sIE4pCQlcCisJCWtt Yl9zZXRfYml0X21pcGkoZGV2LCBNSVBJX0NUUkxfSVJRX0NMRUFSMCwgTStOKQorI2RlZmluZSBN SVBJX0NUUkxfSVJRX0NMRUFSMQkJCQkoMHgwMTQpCisjZGVmaW5lICAgU0VUX01JUElfQ1RSTF9J UlFfQ0xFQVIxKGRldiwgTSwgTikJCVwKKwkJa21iX3NldF9iaXRfbWlwaShkZXYsIE1JUElfQ1RS TF9JUlFfQ0xFQVIxLCBNK04pCisjZGVmaW5lIE1JUElfQ1RSTF9ESUdfTE9PUEJBQ0sJCQkJKDB4 MDE4KQorI2RlZmluZSBNSVBJX1RYX0hTX0lSUV9TVEFUVVMJCQkJKDB4MDFjKQorI2RlZmluZSAg IE1JUElfVFhfSFNfSVJRX1NUQVRVU20oTSkJCShNSVBJX1RYX0hTX0lSUV9TVEFUVVMgKyBcCisJ CQkJCQlIU19PRkZTRVQoTSkpCisjZGVmaW5lICAgR0VUX01JUElfVFhfSFNfSVJRX1NUQVRVUyhk ZXYsIE0pCWttYl9yZWFkX21pcGkoZGV2LCBcCisJCQkJCQlNSVBJX1RYX0hTX0lSUV9TVEFUVVNt KE0pKQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJRX0xJTkVfQ09NUEFSRQkJCSgxPDwxKQorI2Rl ZmluZSAgIE1JUElfVFhfSFNfSVJRX0ZSQU1FX0RPTkVfMAkJCSgxPDwyKQorI2RlZmluZSAgIE1J UElfVFhfSFNfSVJRX0ZSQU1FX0RPTkVfMQkJCSgxPDwzKQorI2RlZmluZSAgIE1JUElfVFhfSFNf SVJRX0ZSQU1FX0RPTkVfMgkJCSgxPDw0KQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJRX0ZSQU1F X0RPTkVfMwkJCSgxPDw1KQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJRX0RNQV9ET05FXzAJCQko MTw8NikKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9ETUFfSURMRV8wCQkJKDE8PDcpCisjZGVm aW5lICAgTUlQSV9UWF9IU19JUlFfRE1BX0RPTkVfMQkJCSgxPDw4KQorI2RlZmluZSAgIE1JUElf VFhfSFNfSVJRX0RNQV9JRExFXzEJCQkoMTw8OSkKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9E TUFfRE9ORV8yCQkJKDE8PDEwKQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJRX0RNQV9JRExFXzIJ CQkoMTw8MTEpCisjZGVmaW5lICAgTUlQSV9UWF9IU19JUlFfRE1BX0RPTkVfMwkJCSgxPDwxMikK KyNkZWZpbmUgICBNSVBJX1RYX0hTX0lSUV9ETUFfSURMRV8zCQkJKDE8PDEzKQorI2RlZmluZSAg IE1JUElfVFhfSFNfSVJRX01DX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTQpCisjZGVmaW5lICAgTUlQ SV9UWF9IU19JUlFfTUNfRklGT19PVkVSRkxPVwkJKDE8PDE1KQorI2RlZmluZSAgIE1JUElfVFhf SFNfSVJRX0xMUF9GSUZPX0VNUFRZCQkJKDE8PDE2KQorI2RlZmluZSAgIE1JUElfVFhfSFNfSVJR X0xMUF9SRVFVRVNUX1FVRVVFX0ZVTEwJCSgxPDwxNykKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lS UV9MTFBfUkVRVUVTVF9RVUVVRV9FUlJPUgkoMTw8MTgpCisjZGVmaW5lICAgTUlQSV9UWF9IU19J UlFfTExQX1dPUkRfQ09VTlRfRVJST1IJCSgxPDwyMCkKKyNkZWZpbmUgICBNSVBJX1RYX0hTX0lS UV9GUkFNRV9ET05FCQkJXAorCQkJCShNSVBJX1RYX0hTX0lSUV9GUkFNRV9ET05FXzAgfCBcCisJ CQkJTUlQSV9UWF9IU19JUlFfRlJBTUVfRE9ORV8xIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX0ZS QU1FX0RPTkVfMiB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9GUkFNRV9ET05FXzMpCisKKyNkZWZp bmUgTUlQSV9UWF9IU19JUlFfRE1BX0RPTkUJCQkJXAorCQkJCShNSVBJX1RYX0hTX0lSUV9ETUFf RE9ORV8wIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX0RNQV9ET05FXzEgfCBcCisJCQkJTUlQSV9U WF9IU19JUlFfRE1BX0RPTkVfMiB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9ETUFfRE9ORV8zKQor CisjZGVmaW5lIE1JUElfVFhfSFNfSVJRX0RNQV9JRExFCQkJCVwKKwkJCQkoTUlQSV9UWF9IU19J UlFfRE1BX0lETEVfMCB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9ETUFfSURMRV8xIHwgXAorCQkJ CU1JUElfVFhfSFNfSVJRX0RNQV9JRExFXzIgfCBcCisJCQkJTUlQSV9UWF9IU19JUlFfRE1BX0lE TEVfMykKKworI2RlZmluZSBNSVBJX1RYX0hTX0lSUV9FUlJPUgkJCQlcCisJCQkJKE1JUElfVFhf SFNfSVJRX01DX0ZJRk9fVU5ERVJGTE9XIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX01DX0ZJRk9f T1ZFUkZMT1cgfCBcCisJCQkJTUlQSV9UWF9IU19JUlFfTExQX0ZJRk9fRU1QVFkgfCBcCisJCQkJ TUlQSV9UWF9IU19JUlFfTExQX1JFUVVFU1RfUVVFVUVfRlVMTCB8IFwKKwkJCQlNSVBJX1RYX0hT X0lSUV9MTFBfUkVRVUVTVF9RVUVVRV9FUlJPUiB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9MTFBf V09SRF9DT1VOVF9FUlJPUikKKworI2RlZmluZSBNSVBJX1RYX0hTX0lSUV9BTEwJCQkJXAorCQkJ CShNSVBJX1RYX0hTX0lSUV9GUkFNRV9ET05FIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX0RNQV9E T05FIHwgXAorCQkJCU1JUElfVFhfSFNfSVJRX0RNQV9JRExFIHwgXAorCQkJCU1JUElfVFhfSFNf SVJRX0xJTkVfQ09NUEFSRSB8IFwKKwkJCQlNSVBJX1RYX0hTX0lSUV9FUlJPUikKKworI2RlZmlu ZSBNSVBJX1RYX0hTX0lSUV9FTkFCTEUJCQkJKDB4MDIwKQorI2RlZmluZSAgIFNFVF9IU19JUlFf RU5BQkxFKGRldiwgTSwgdmFsKQlrbWJfc2V0X2JpdG1hc2tfbWlwaShkZXYsIFwKKwkJCQkJCU1J UElfVFhfSFNfSVJRX0VOQUJMRSBcCisJCQkJCQkrIEhTX09GRlNFVChNKSwgdmFsKQorI2RlZmlu ZSAgIENMUl9IU19JUlFfRU5BQkxFKGRldiwgTSwgdmFsKQlrbWJfY2xyX2JpdG1hc2tfbWlwaShk ZXYsIFwKKwkJCQkJCU1JUElfVFhfSFNfSVJRX0VOQUJMRSBcCisJCQkJCQkrIEhTX09GRlNFVChN KSwgdmFsKQorI2RlZmluZQkgIEdFVF9IU19JUlFfRU5BQkxFKGRldiwgTSkJCWttYl9yZWFkX21p cGkoZGV2LCBcCisJCQkJCQlNSVBJX1RYX0hTX0lSUV9FTkFCTEUgXAorCQkJCQkJKyBIU19PRkZT RVQoTSkpCisjZGVmaW5lIE1JUElfVFhfSFNfSVJRX0NMRUFSCQkJCSgweDAyNCkKKyNkZWZpbmUg ICBTRVRfTUlQSV9UWF9IU19JUlFfQ0xFQVIoZGV2LCBNLCB2YWwpCQlcCisJCQlrbWJfc2V0X2Jp dG1hc2tfbWlwaShkZXYsIFwKKwkJCU1JUElfVFhfSFNfSVJRX0NMRUFSIFwKKwkJCSsgSFNfT0ZG U0VUKE0pLCB2YWwpCisKKy8qIE1JUEkgVGVzdCBQYXR0ZXJuIEdlbmVyYXRpb24gKi8KKyNkZWZp bmUgTUlQSV9UWF9IU19URVNUX1BBVF9DVFJMCQkJKDB4MjMwKQorI2RlZmluZSAgIE1JUElfVFht X0hTX1RFU1RfUEFUX0NUUkwoTSkJCQlcCisJCQkJKE1JUElfVFhfSFNfVEVTVF9QQVRfQ1RSTCAr IEhTX09GRlNFVChNKSkKKyNkZWZpbmUgICBUUF9FTl9WQ20oTSkJCQkJCSgxIDw8ICgoTSkgKiAw eDA0KSkKKyNkZWZpbmUgICBUUF9TRUxfVkNtKE0sIE4pCQkJCVwKKwkJCQkoTiA8PCAoKChNKSAq IDB4MDQpICsgMSkpCisjZGVmaW5lICAgVFBfU1RSSVBFX1dJRFRIKE0pCQkJCSgoTSkgPDwgMTYp CisjZGVmaW5lIE1JUElfVFhfSFNfVEVTVF9QQVRfQ09MT1IwCQkJKDB4MjM0KQorI2RlZmluZSAg IE1JUElfVFhtX0hTX1RFU1RfUEFUX0NPTE9SMChNKQkJXAorCQkJCShNSVBJX1RYX0hTX1RFU1Rf UEFUX0NPTE9SMCArIEhTX09GRlNFVChNKSkKKyNkZWZpbmUgTUlQSV9UWF9IU19URVNUX1BBVF9D T0xPUjEJCQkoMHgyMzgpCisjZGVmaW5lICAgTUlQSV9UWG1fSFNfVEVTVF9QQVRfQ09MT1IxKE0p CQlcCisJCQkJKE1JUElfVFhfSFNfVEVTVF9QQVRfQ09MT1IxICsgSFNfT0ZGU0VUKE0pKQorCisv KiBELVBIWSByZWdzICovCisjZGVmaW5lIERQSFlfRU5BQkxFCQkJCSgweDEwMCkKKyNkZWZpbmUg RFBIWV9JTklUX0NUUkwwCQkJCSgweDEwNCkKKyNkZWZpbmUgICBTSFVURE9XTloJCQkJMAorI2Rl ZmluZSAgIFJFU0VUWgkJCQkxMgorI2RlZmluZSBEUEhZX0lOSVRfQ1RSTDEJCQkJKDB4MTA4KQor I2RlZmluZSAgIFBMTF9DTEtTRUxfMAkJCQkxOAorI2RlZmluZSAgIFBMTF9TSEFET1dfQ1RSTAkJ CTE2CisjZGVmaW5lIERQSFlfSU5JVF9DVFJMMgkJCQkoMHgxMGMpCisjZGVmaW5lICAgU0VUX0RQ SFlfSU5JVF9DVFJMMChkZXYsIGRwaHksIG9mZnNldCkJXAorCQkJa21iX3NldF9iaXRfbWlwaShk ZXYsIERQSFlfSU5JVF9DVFJMMCwgKGRwaHkrb2Zmc2V0KSkKKyNkZWZpbmUgICBDTFJfRFBIWV9J TklUX0NUUkwwKGRldiwgZHBoeSwgb2Zmc2V0KQlcCisJCQlrbWJfY2xyX2JpdF9taXBpKGRldiwg RFBIWV9JTklUX0NUUkwwLCAoZHBoeStvZmZzZXQpKQorI2RlZmluZSBEUEhZX0lOSVRfQ1RSTDIJ CQkJKDB4MTBjKQorI2RlZmluZSBEUEhZX1BMTF9PQlMwCQkJCSgweDExMCkKKyNkZWZpbmUgRFBI WV9QTExfT0JTMQkJCQkoMHgxMTQpCisjZGVmaW5lIERQSFlfUExMX09CUzIJCQkJKDB4MTE4KQor I2RlZmluZSBEUEhZX0ZSRVFfQ1RSTDBfMwkJCSgweDExYykKKyNkZWZpbmUgRFBIWV9GUkVRX0NU Ukw0XzcJCQkoMHgxMjApCisjZGVmaW5lICAgU0VUX0RQSFlfRlJFUV9DVFJMMF8zKGRldiwgZHBo eSwgdmFsKQlcCisJCQlrbWJfd3JpdGVfYml0c19taXBpKGRldiwgRFBIWV9GUkVRX0NUUkwwXzMg XAorCQkJKyAoKGRwaHkvNCkqNCksIChkcGh5ICUgNCkgKiA4LCA2LCB2YWwpCisKKyNkZWZpbmUg RFBIWV9GT1JDRV9DVFJMMAkJCSgweDEyOCkKKyNkZWZpbmUgRFBIWV9GT1JDRV9DVFJMMQkJCSgw eDEyQykKKyNkZWZpbmUgTUlQSV9EUEhZX1NUQVQwXzMJCQkoMHgxMzQpCisjZGVmaW5lIE1JUElf RFBIWV9TVEFUNF83CQkJKDB4MTM4KQorI2RlZmluZQkgIEdFVF9TVE9QU1RBVEVfREFUQShkZXYs IGRwaHkpCQlcCisJCQkoKChrbWJfcmVhZF9taXBpKGRldiwgTUlQSV9EUEhZX1NUQVQwXzMgKyAo ZHBoeS80KSo0KSkgXAorCQkJCQk+PiAoKChkcGh5ICUgNCkqOCkrNCkpICYgMHgwMykKKworI2Rl ZmluZSBNSVBJX0RQSFlfRVJSX1NUQVQ2XzcJCQkoMHgxNEMpCisKKyNkZWZpbmUgRFBIWV9URVNU X0NUUkwwCQkJCSgweDE1NCkKKyNkZWZpbmUgICBTRVRfRFBIWV9URVNUX0NUUkwwKGRldiwgZHBo eSkJCVwKKwkJCWttYl9zZXRfYml0X21pcGkoZGV2LCBEUEhZX1RFU1RfQ1RSTDAsIChkcGh5KSkK KyNkZWZpbmUgICBDTFJfRFBIWV9URVNUX0NUUkwwKGRldiwgZHBoeSkJCVwKKwkJCWttYl9jbHJf Yml0X21pcGkoZGV2LCBEUEhZX1RFU1RfQ1RSTDAsIFwKKwkJCQkJCShkcGh5KSkKKyNkZWZpbmUg RFBIWV9URVNUX0NUUkwxCQkJCSgweDE1OCkKKyNkZWZpbmUgICBTRVRfRFBIWV9URVNUX0NUUkwx X0NMSyhkZXYsIGRwaHkpCVwKKwkJCWttYl9zZXRfYml0X21pcGkoZGV2LCBEUEhZX1RFU1RfQ1RS TDEsIChkcGh5KSkKKyNkZWZpbmUgICBDTFJfRFBIWV9URVNUX0NUUkwxX0NMSyhkZXYsIGRwaHkp CVwKKwkJCWttYl9jbHJfYml0X21pcGkoZGV2LCBEUEhZX1RFU1RfQ1RSTDEsIChkcGh5KSkKKyNk ZWZpbmUgICBTRVRfRFBIWV9URVNUX0NUUkwxX0VOKGRldiwgZHBoeSkJXAorCQkJa21iX3NldF9i aXRfbWlwaShkZXYsIERQSFlfVEVTVF9DVFJMMSwgKGRwaHkrMTIpKQorI2RlZmluZSAgIENMUl9E UEhZX1RFU1RfQ1RSTDFfRU4oZGV2LCBkcGh5KQlcCisJCQlrbWJfY2xyX2JpdF9taXBpKGRldiwg RFBIWV9URVNUX0NUUkwxLCAoZHBoeSsxMikpCisjZGVmaW5lIERQSFlfVEVTVF9ESU4wXzMJCQko MHgxNWMpCisjZGVmaW5lICAgU0VUX1RFU1RfRElOMF8zKGRldiwgZHBoeSwgdmFsKQkJXAorCQkJ a21iX3dyaXRlX21pcGkoZGV2LCBEUEhZX1RFU1RfRElOMF8zICsgXAorCQkJNCwgKCh2YWwpIDw8 ICgoKGRwaHkpJTQpKjgpKSkKKyNkZWZpbmUgRFBIWV9URVNUX0RPVVQwXzMJCQkoMHgxNjgpCisj ZGVmaW5lICAgR0VUX1RFU1RfRE9VVDBfMyhkZXYsIGRwaHkpCQlcCisJCQkoa21iX3JlYWRfbWlw aShkZXYsIERQSFlfVEVTVF9ET1VUMF8zKSBcCisJCQk+PiAoKChkcGh5KSU0KSo4KSAmIDB4ZmYp CisjZGVmaW5lIERQSFlfVEVTVF9ET1VUNF83CQkJKDB4MTZDKQorI2RlZmluZSAgIEdFVF9URVNU X0RPVVQ0XzcoZGV2LCBkcGh5KQkJXAorCQkJKGttYl9yZWFkX21pcGkoZGV2LCBEUEhZX1RFU1Rf RE9VVDRfNykgXAorCQkJPj4gKCgoZHBoeSklNCkqOCkgJiAweGZmKQorI2RlZmluZSBEUEhZX1RF U1RfRE9VVDhfOQkJCSgweDE3MCkKKyNkZWZpbmUgRFBIWV9URVNUX0RJTjRfNwkJCSgweDE2MCkK KyNkZWZpbmUgRFBIWV9URVNUX0RJTjhfOQkJCSgweDE2NCkKKyNkZWZpbmUgRFBIWV9QTExfTE9D SwkJCQkoMHgxODgpCisjZGVmaW5lICAgR0VUX1BMTF9MT0NLKGRldiwgZHBoeSkJCVwKKwkJCShr bWJfcmVhZF9taXBpKGRldiwgRFBIWV9QTExfTE9DSykgXAorCQkJJiAoMSA8PCAoZHBoeSAtIE1J UElfRFBIWTYpKSkKKyNkZWZpbmUgRFBIWV9DRkdfQ0xLX0VOCQkJCSgweDE4YykKKworI2RlZmlu ZSBNU1NfTUlQSV9DSUZfQ0ZHCQkJKDB4MDApCisjZGVmaW5lIE1TU19MQ0RfTUlQSV9DRkcJCQko MHgwNCkKKyNkZWZpbmUgTVNTX0NBTV9DTEtfQ1RSTAkJCSgweDEwKQorI2RlZmluZSBNU1NfTE9P UEJBQ0tfQ0ZHCQkJKDB4MEMpCisjZGVmaW5lICAgTENECQkJCQkoMTw8MSkKKyNkZWZpbmUgICBN SVBJX0NPTU1PTgkJCQkoMTw8MikKKyNkZWZpbmUgICBNSVBJX1RYMAkJCQkoMTw8OSkKKyNkZWZp bmUgTVNTX0NBTV9SU1ROX0NUUkwJCQkoMHgxNCkKKyNkZWZpbmUgTVNTX0NBTV9SU1ROX1NFVAkJ CSgweDIwKQorI2RlZmluZSBNU1NfQ0FNX1JTVE5fQ0xSCQkJKDB4MjQpCisKKyNkZWZpbmUgTVNT Q1BVX0NQUl9DTEtfRU4JCQkoMHgwKQorI2RlZmluZSBNU1NDUFVfQ1BSX1JTVF9FTgkJCSgweDEw KQorI2RlZmluZSBCSVRfTUFTS18xNgkJCQkoMHhmZmZmKQorLyppY2FtIGxjZCBxb3MgKi8KKyNk ZWZpbmUgTENEX1FPU19QUk9SSVRZCQkJCSgweDgpCisjZGVmaW5lIExDRF9RT1NfTU9ERQkJCQko MHhDKQorI2RlZmluZSBMQ0RfUU9TX0JXCQkJCSgweDEwKQorI2VuZGlmIC8qIF9fS01CX1JFR1Nf SF9fICovCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==