From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0502C433E0 for ; Mon, 8 Feb 2021 05:51:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 4150E64E27 for ; Mon, 8 Feb 2021 05:51:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4150E64E27 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:47536 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l8zSe-0004XR-2i for qemu-devel@archiver.kernel.org; Mon, 08 Feb 2021 00:51:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55896) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l8zNy-0007eP-3A for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:46:58 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:14438) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l8zNp-0006ST-Ve for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:46:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1612763210; x=1644299210; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xbWQRE0H7iaXYz3MgXgA3FKL7F9m/840/QVGTrc1iJM=; b=TkG0dgka0mgw9BsDcOAgYtaBIzD3t/OITJi9E+YM8pGYSLrLpRPvsir0 KszT7QMfNxDK7bm538zKU12VTrrXpXGGwAN4xlPCqi56Qo2i/yGT31+qC +a4f79IfS01sjNQpmRRb7J+Z5y+PpdeUqIkPswp17WVsXELsAGbZHsikj c=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 07 Feb 2021 21:46:30 -0800 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg-SD-alpha.qualcomm.com with ESMTP; 07 Feb 2021 21:46:30 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 7137DFCD; Sun, 7 Feb 2021 23:46:29 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v8 13/35] Hexagon (target/hexagon) instruction/packet decode Date: Sun, 7 Feb 2021 23:46:03 -0600 Message-Id: <1612763186-18161-14-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1612763186-18161-1-git-send-email-tsimpson@quicinc.com> References: <1612763186-18161-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.248, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, bcain@quicinc.com, philmd@redhat.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGFrZSB0aGUgd29yZHMgZnJvbSBpbnN0cnVjdGlvbiBtZW1vcnkgYW5kIGJ1aWxkIGEgcGFja2V0 X3QgZm9yIFRDRyBjb2RlCmdlbmVyYXRpb24KClRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUg cGVyZm9ybWVkCiAgICBDb252ZXJ0IHRoZSAubmV3IGVuY29kZWQgb2Zmc2V0IHRvIHRoZSByZWdp c3RlciBudW1iZXIgb2YgdGhlIHByb2R1Y2VyCiAgICBSZW9yZGVyIHRoZSBwYWNrZXQgc28gLm5l dyBwcm9kdWNlciBpcyBiZWZvcmUgY29uc3VtZXIKICAgIEFwcGx5IGNvbnN0YW50IGV4dGVuZGVy cwogICAgU2VwYXJhdGUgc3ViaW5zbidzIGludG8gdHdvIGluc3RydWN0aW9ucwogICAgQnJlYWsg Y29tcGFyZS1qdW1wcyBpbnRvIHR3byBpbnN0cnVjdGlvbnMKICAgIENyZWF0ZSBpbnN0cnVjdGlv bnMgZm9yIDplbmRsb29wCgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25A cXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vZGVjb2RlLmggfCAgMzIgKysKIHRhcmdl dC9oZXhhZ29uL2RlY29kZS5jIHwgOTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA5ODkgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2RlY29kZS5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9k ZWNvZGUuaCBiL3RhcmdldC9oZXhhZ29uL2RlY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmM2NmY1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9k ZWNvZGUuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjEg UXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq CisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYg SEVYQUdPTl9ERUNPREVfSAorI2RlZmluZSBIRVhBR09OX0RFQ09ERV9ICisKKyNpbmNsdWRlICJj cHUuaCIKKyNpbmNsdWRlICJvcGNvZGVzLmgiCisjaW5jbHVkZSAiaW5zbi5oIgorCit2b2lkIGRl Y29kZV9pbml0KHZvaWQpOworCit2b2lkIGRlY29kZV9zZW5kX2luc25fdG8oUGFja2V0ICpwYWNr ZXQsIGludCBzdGFydCwgaW50IG5ld2xvYyk7CisKK2ludCBkZWNvZGVfcGFja2V0KGludCBtYXhf d29yZHMsIGNvbnN0IHVpbnQzMl90ICp3b3JkcywgUGFja2V0ICpwa3QsCisgICAgICAgICAgICAg ICAgICBib29sIGRpc2FzX29ubHkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhh Z29uL2RlY29kZS5jIGIvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYzliYWNhYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhh Z29uL2RlY29kZS5jCkBAIC0wLDAgKzEsOTU3IEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5 LTIwMjEgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisg KiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNp bmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9sb2cuaCIKKyNpbmNsdWRlICJp Y2xhc3MuaCIKKyNpbmNsdWRlICJhdHRyaWJzLmgiCisjaW5jbHVkZSAiZ2VucHRyLmgiCisjaW5j bHVkZSAiZGVjb2RlLmgiCisjaW5jbHVkZSAiaW5zbi5oIgorI2luY2x1ZGUgInByaW50aW5zbi5o IgorCisjZGVmaW5lIGZaWFROKE4sIE0sIFZBTCkgKChWQUwpICYgKCgxTEwgPDwgKE4pKSAtIDEp KQorCitlbnVtIHsKKyAgICBFWFRfSURYX25vZXh0ID0gMCwKKyAgICBFWFRfSURYX25vZXh0X0FG VEVSID0gNCwKKyAgICBFWFRfSURYX21tdmVjID0gNCwKKyAgICBFWFRfSURYX21tdmVjX0FGVEVS ID0gOCwKKyAgICBYWF9MQVNUX0VYVF9JRFgKK307CisKKy8qCisgKiAgQ2VydGFpbiBvcGVyYW5k IHR5cGVzIHJlcHJlc2VudCBhIG5vbi1jb250aWd1b3VzIHNldCBvZiB2YWx1ZXMuCisgKiAgRm9y IGV4YW1wbGUsIHRoZSBjb21wb3VuZCBjb21wYXJlLWFuZC1qdW1wIGluc3RydWN0aW9uIGNhbiBv bmx5IGFjY2VzcworICogIHJlZ2lzdGVycyBSMC1SNyBhbmQgUjE2LTIzLgorICogIFRoaXMgdGFi bGUgcmVwcmVzZW50cyB0aGUgbWFwcGluZyBmcm9tIHRoZSBlbmNvZGluZyB0byB0aGUgYWN0dWFs IHZhbHVlcy4KKyAqLworCisjZGVmaW5lIERFRl9SRUdNQVAoTkFNRSwgRUxFTUVOVFMsIC4uLikg XAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgREVDT0RFX1JFR0lTVEVSXyMjTkFNRVtF TEVNRU5UU10gPSBcCisgICAgeyBfX1ZBX0FSR1NfXyB9OworICAgICAgICAvKiBOYW1lICAgTnVt IFRhYmxlICovCitERUZfUkVHTUFQKFJfMTYsICAxNiwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywg MTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzKQorREVGX1JFR01BUChSX184LCAgOCwgIDAs IDIsIDQsIDYsIDE2LCAxOCwgMjAsIDIyKQorCisjZGVmaW5lIERFQ09ERV9NQVBQRURfUkVHKFJF R05PLCBOQU1FKSBcCisgICAgaW5zbi0+cmVnbm9bUkVHTk9dID0gREVDT0RFX1JFR0lTVEVSXyMj TkFNRVtpbnNuLT5yZWdub1tSRUdOT11dOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3Qg c3RydWN0IERlY3RyZWVUYWJsZSAqdGFibGVfbGluazsKKyAgICBjb25zdCBzdHJ1Y3QgRGVjdHJl ZVRhYmxlICp0YWJsZV9saW5rX2I7CisgICAgT3Bjb2RlIG9wY29kZTsKKyAgICBlbnVtIHsKKyAg ICAgICAgREVDVFJFRV9FTlRSWV9JTlZBTElELAorICAgICAgICBERUNUUkVFX1RBQkxFX0xJTkss CisgICAgICAgIERFQ1RSRUVfU1VCSU5TTlMsCisgICAgICAgIERFQ1RSRUVfRVhUU1BBQ0UsCisg ICAgICAgIERFQ1RSRUVfVEVSTUlOQUwKKyAgICB9IHR5cGU7Cit9IERlY3RyZWVFbnRyeTsKKwor dHlwZWRlZiBzdHJ1Y3QgRGVjdHJlZVRhYmxlIHsKKyAgICB1bnNpZ25lZCBpbnQgKCpsb29rdXBf ZnVuY3Rpb24pKGludCBzdGFydGJpdCwgaW50IHdpZHRoLCB1aW50MzJfdCBvcGNvZGUpOworICAg IHVuc2lnbmVkIGludCBzaXplOworICAgIHVuc2lnbmVkIGludCBzdGFydGJpdDsKKyAgICB1bnNp Z25lZCBpbnQgd2lkdGg7CisgICAgY29uc3QgRGVjdHJlZUVudHJ5IHRhYmxlW107Cit9IERlY3Ry ZWVUYWJsZTsKKworI2RlZmluZSBERUNPREVfTkVXX1RBQkxFKFRBRywgU0laRSwgV0hBVE5PVCkg XAorICAgIHN0YXRpYyBjb25zdCBEZWN0cmVlVGFibGUgZGVjdHJlZV90YWJsZV8jI1RBRzsKKyNk ZWZpbmUgVEFCTEVfTElOSyhUQUJMRSkgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICov CisjZGVmaW5lIFRFUk1JTkFMKFRBRywgRU5DKSAgICAgICAgICAgICAgICAgICAgLyogTk9USElO RyAqLworI2RlZmluZSBTVUJJTlNOUyhUQUcsIENMQVNTQSwgQ0xBU1NCLCBFTkMpICAgIC8qIE5P VEhJTkcgKi8KKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMpICAgICAgICAgICAgICAgICAgICAv KiBOT1RISU5HICovCisjZGVmaW5lIElOVkFMSUQoKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfRU5EX1RBQkxFKC4uLikgICAgICAgICAg ICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk8oLi4uKSAgICAg ICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5G TyguLi4pICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfT1BJTkZPKC4uLikg ICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKworI2luY2x1ZGUgImRlY3RyZWVfZ2Vu ZXJhdGVkLmguaW5jIgorCisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVmIERFQ09ERV9NQVRD SF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0VO RF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3VuZGVmIFNVQklOU05T CisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYgREVDT0RFX05FV19U QUJMRQorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklUUworCisjZGVmaW5lIERFQ09ERV9TRVBB UkFUT1JfQklUUyhTVEFSVCwgV0lEVEgpIE5VTEwsIFNUQVJULCBXSURUSAorI2RlZmluZSBERUNP REVfTkVXX1RBQkxFX0hFTFBFUihUQUcsIFNJWkUsIEZOLCBTVEFSVCwgV0lEVEgpIFwKKyAgICBz dGF0aWMgY29uc3QgRGVjdHJlZVRhYmxlIGRlY3RyZWVfdGFibGVfIyNUQUcgPSB7IFwKKyAgICAg ICAgLnNpemUgPSBTSVpFLCBcCisgICAgICAgIC5sb29rdXBfZnVuY3Rpb24gPSBGTiwgXAorICAg ICAgICAuc3RhcnRiaXQgPSBTVEFSVCwgXAorICAgICAgICAud2lkdGggPSBXSURUSCwgXAorICAg ICAgICAudGFibGUgPSB7CisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFU Tk9UKSBcCisgICAgREVDT0RFX05FV19UQUJMRV9IRUxQRVIoVEFHLCBTSVpFLCBXSEFUTk9UKQor CisjZGVmaW5lIFRBQkxFX0xJTksoVEFCTEUpIFwKKyAgICB7IC50eXBlID0gREVDVFJFRV9UQUJM RV9MSU5LLCAudGFibGVfbGluayA9ICZkZWN0cmVlX3RhYmxlXyMjVEFCTEUgfSwKKyNkZWZpbmUg VEVSTUlOQUwoVEFHLCBFTkMpIFwKKyAgICB7IC50eXBlID0gREVDVFJFRV9URVJNSU5BTCwgLm9w Y29kZSA9IFRBRyAgfSwKKyNkZWZpbmUgU1VCSU5TTlMoVEFHLCBDTEFTU0EsIENMQVNTQiwgRU5D KSBcCisgICAgeyBcCisgICAgICAgIC50eXBlID0gREVDVFJFRV9TVUJJTlNOUywgXAorICAgICAg ICAudGFibGVfbGluayA9ICZkZWN0cmVlX3RhYmxlX0RFQ09ERV9TVUJJTlNOXyMjQ0xBU1NBLCBc CisgICAgICAgIC50YWJsZV9saW5rX2IgPSAmZGVjdHJlZV90YWJsZV9ERUNPREVfU1VCSU5TTl8j I0NMQVNTQiBcCisgICAgfSwKKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMpIHsgLnR5cGUgPSBE RUNUUkVFX0VYVFNQQUNFIH0sCisjZGVmaW5lIElOVkFMSUQoKSB7IC50eXBlID0gREVDVFJFRV9F TlRSWV9JTlZBTElELCAub3Bjb2RlID0gWFhfTEFTVF9PUENPREUgfSwKKworI2RlZmluZSBERUNP REVfRU5EX1RBQkxFKC4uLikgfSB9OworCisjZGVmaW5lIERFQ09ERV9NQVRDSF9JTkZPKC4uLikg ICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfTEVHQUNZX01BVENI X0lORk8oLi4uKSAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX09QSU5GTygu Li4pICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisKKyNpbmNsdWRlICJkZWN0cmVl X2dlbmVyYXRlZC5oLmluYyIKKworI3VuZGVmIERFQ09ERV9PUElORk8KKyN1bmRlZiBERUNPREVf TUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI3VuZGVmIERFQ09E RV9FTkRfVEFCTEUKKyN1bmRlZiBJTlZBTElECisjdW5kZWYgVEVSTUlOQUwKKyN1bmRlZiBTVUJJ TlNOUworI3VuZGVmIEVYVFNQQUNFCisjdW5kZWYgVEFCTEVfTElOSworI3VuZGVmIERFQ09ERV9O RVdfVEFCTEUKKyN1bmRlZiBERUNPREVfTkVXX1RBQkxFX0hFTFBFUgorI3VuZGVmIERFQ09ERV9T RVBBUkFUT1JfQklUUworCitzdGF0aWMgY29uc3QgRGVjdHJlZVRhYmxlIGRlY3RyZWVfdGFibGVf REVDT0RFX0VYVF9FWFRfbm9leHQgPSB7CisgICAgLnNpemUgPSAxLCAubG9va3VwX2Z1bmN0aW9u ID0gTlVMTCwgLnN0YXJ0Yml0ID0gMCwgLndpZHRoID0gMCwKKyAgICAudGFibGUgPSB7CisgICAg ICAgIHsgLnR5cGUgPSBERUNUUkVFX0VOVFJZX0lOVkFMSUQsIC5vcGNvZGUgPSBYWF9MQVNUX09Q Q09ERSB9LAorICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBEZWN0cmVlVGFibGUgKmV4dF90cmVl c1tYWF9MQVNUX0VYVF9JRFhdOworCitzdGF0aWMgdm9pZCBkZWNvZGVfZXh0X2luaXQodm9pZCkK K3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSBFWFRfSURYX25vZXh0OyBpIDwgRVhUX0lEWF9u b2V4dF9BRlRFUjsgaSsrKSB7CisgICAgICAgIGV4dF90cmVlc1tpXSA9ICZkZWN0cmVlX3RhYmxl X0RFQ09ERV9FWFRfRVhUX25vZXh0OworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAg IHVpbnQzMl90IG1hc2s7CisgICAgdWludDMyX3QgbWF0Y2g7Cit9IERlY29kZUlUYWJsZUVudHJ5 OworCisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBXSEFUTk9UKSAgLyogTk9U SElORyAqLworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSAgICAgICAgICAgICAgICAgICAgIC8q IE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBFTkMpICAgICAgICAgICAgICAgICAg ICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05TKFRBRywgQ0xBU1NBLCBDTEFTU0IsIEVO QykgICAgLyogTk9USElORyAqLworI2RlZmluZSBFWFRTUEFDRShUQUcsIEVOQykgICAgICAgICAg ICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgSU5WQUxJRCgpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9FTkRfVEFCTEUoLi4u KSAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfT1BJTkZPKC4u LikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKworI2RlZmluZSBERUNPREVfTUFU Q0hfSU5GT19OT1JNQUwoVEFHLCBNQVNLLCBNQVRDSCkgXAorICAgIFtUQUddID0geyBcCisgICAg ICAgIC5tYXNrID0gTUFTSywgXAorICAgICAgICAubWF0Y2ggPSBNQVRDSCwgXAorICAgIH0sCisK KyNkZWZpbmUgREVDT0RFX01BVENIX0lORk9fTlVMTChUQUcsIE1BU0ssIE1BVENIKSBcCisgICAg W1RBR10gPSB7IC5tYXRjaCA9IH4wIH0sCisKKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk8oLi4u KSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoX19WQV9BUkdTX18pCisjZGVmaW5lIERFQ09ERV9M RUdBQ1lfTUFUQ0hfSU5GTyguLi4pIC8qIE5PVEhJTkcgKi8KKworc3RhdGljIGNvbnN0IERlY29k ZUlUYWJsZUVudHJ5IGRlY29kZV9pdGFibGVbWFhfTEFTVF9PUENPREVdID0geworI2luY2x1ZGUg ImRlY3RyZWVfZ2VuZXJhdGVkLmguaW5jIgorfTsKKworI3VuZGVmIERFQ09ERV9NQVRDSF9JTkZP CisjZGVmaW5lIERFQ09ERV9NQVRDSF9JTkZPKC4uLikgREVDT0RFX01BVENIX0lORk9fTlVMTChf X1ZBX0FSR1NfXykKKworI3VuZGVmIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI2RlZmluZSBE RUNPREVfTEVHQUNZX01BVENIX0lORk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19OT1JNQUwoX19W QV9BUkdTX18pCisKK3N0YXRpYyBjb25zdCBEZWNvZGVJVGFibGVFbnRyeSBkZWNvZGVfbGVnYWN5 X2l0YWJsZVtYWF9MQVNUX09QQ09ERV0gPSB7CisjaW5jbHVkZSAiZGVjdHJlZV9nZW5lcmF0ZWQu aC5pbmMiCit9OworCisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVmIERFQ09ERV9NQVRDSF9J TkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0VORF9U QUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3VuZGVmIFNVQklOU05TCisj dW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYgREVDT0RFX05FV19UQUJM RQorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklUUworCit2b2lkIGRlY29kZV9pbml0KHZvaWQp Cit7CisgICAgZGVjb2RlX2V4dF9pbml0KCk7Cit9CisKK3ZvaWQgZGVjb2RlX3NlbmRfaW5zbl90 byhQYWNrZXQgKnBhY2tldCwgaW50IHN0YXJ0LCBpbnQgbmV3bG9jKQoreworICAgIEluc24gdG1w aW5zbjsKKyAgICBpbnQgZGlyZWN0aW9uOworICAgIGludCBpOworICAgIGlmIChzdGFydCA9PSBu ZXdsb2MpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3RhcnQgPCBuZXdsb2Mp IHsKKyAgICAgICAgLyogTW92ZSB0b3dhcmRzIGVuZCAqLworICAgICAgICBkaXJlY3Rpb24gPSAx OworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIG1vdmUgdG93YXJkcyBiZWdpbm5pbmcgKi8KKyAg ICAgICAgZGlyZWN0aW9uID0gLTE7CisgICAgfQorICAgIGZvciAoaSA9IHN0YXJ0OyBpICE9IG5l d2xvYzsgaSArPSBkaXJlY3Rpb24pIHsKKyAgICAgICAgdG1waW5zbiA9IHBhY2tldC0+aW5zbltp XTsKKyAgICAgICAgcGFja2V0LT5pbnNuW2ldID0gcGFja2V0LT5pbnNuW2kgKyBkaXJlY3Rpb25d OworICAgICAgICBwYWNrZXQtPmluc25baSArIGRpcmVjdGlvbl0gPSB0bXBpbnNuOworICAgIH0K K30KKworLyogRmlsbCBuZXd2YWx1ZSByZWdpc3RlcnMgd2l0aCB0aGUgY29ycmVjdCByZWdubyAq Lworc3RhdGljIHZvaWQKK2RlY29kZV9maWxsX25ld3ZhbHVlX3JlZ25vKFBhY2tldCAqcGFja2V0 KQoreworICAgIGludCBpLCB1c2VfcmVnaWR4LCBvZmZzZXQsIGRlZl9pZHgsIGRzdF9pZHg7Cisg ICAgdWludDE2X3QgZGVmX29wY29kZSwgdXNlX29wY29kZTsKKyAgICBjaGFyICpkc3RzdHI7CisK KyAgICBmb3IgKGkgPSAxOyBpIDwgcGFja2V0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICBp ZiAoR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSAmJgor ICAgICAgICAgICAgIUdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ldLm9wY29kZSwgQV9FWFRFTlNJ T04pKSB7CisgICAgICAgICAgICB1c2Vfb3Bjb2RlID0gcGFja2V0LT5pbnNuW2ldLm9wY29kZTsK KworICAgICAgICAgICAgLyogSXQncyBhIHN0b3JlLCBzbyB3ZSdyZSBhZGp1c3RpbmcgdGhlIE50 IGZpZWxkICovCisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQih1c2Vfb3Bjb2RlLCBBX1NUT1JF KSkgeworICAgICAgICAgICAgICAgIHVzZV9yZWdpZHggPSBzdHJjaHIob3Bjb2RlX3JlZ2luZm9b dXNlX29wY29kZV0sICd0JykgLQorICAgICAgICAgICAgICAgICAgICBvcGNvZGVfcmVnaW5mb1t1 c2Vfb3Bjb2RlXTsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgIC8qIEl0J3MgYSBKdW1wLCBzbyB3 ZSdyZSBhZGp1c3RpbmcgdGhlIE5zIGZpZWxkICovCisgICAgICAgICAgICAgICAgdXNlX3JlZ2lk eCA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1t1c2Vfb3Bjb2RlXSwgJ3MnKSAtCisgICAgICAgICAg ICAgICAgICAgIG9wY29kZV9yZWdpbmZvW3VzZV9vcGNvZGVdOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2hhdCdzIGVuY29kZWQgYXQgdGhlIE4tZmll bGQgaXMgdGhlIG9mZnNldCB0byB3aG8ncyBwcm9kdWNpbmcKKyAgICAgICAgICAgICAqIHRoZSB2 YWx1ZS4gIFNoaWZ0IG9mZiB0aGUgTFNCIHdoaWNoIGluZGljYXRlcyBvZGQvZXZlbiByZWdpc3Rl ciwKKyAgICAgICAgICAgICAqIHRoZW4gd2FsayBiYWNrd2FyZHMgYW5kIHNraXAgb3ZlciB0aGUg Y29uc3RhbnQgZXh0ZW5kZXJzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvZmZzZXQg PSBwYWNrZXQtPmluc25baV0ucmVnbm9bdXNlX3JlZ2lkeF0gPj4gMTsKKyAgICAgICAgICAgIGRl Zl9pZHggPSBpIC0gb2Zmc2V0OworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvZmZz ZXQ7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKHBhY2tldC0+aW5zbltp IC0gaiAtIDFdLm9wY29kZSwgQV9JVF9FWFRFTkRFUikpIHsKKyAgICAgICAgICAgICAgICAgICAg ZGVmX2lkeC0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgLyoKKyAgICAgICAgICAgICAqIENoZWNrIGZvciBhIGJhZGx5IGVuY29kZWQgTi1maWVsZCB3 aGljaCBwb2ludHMgdG8gYW4gaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAqIG91dC1vZi1yYW5n ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBnX2Fzc2VydCghKChkZWZfaWR4IDwgMCkg fHwgKGRlZl9pZHggPiAocGFja2V0LT5udW1faW5zbnMgLSAxKSkpKTsKKworICAgICAgICAgICAg LyoKKyAgICAgICAgICAgICAqIHBhY2tldC0+aW5zbltkZWZfaWR4XSBpcyB0aGUgcHJvZHVjZXIK KyAgICAgICAgICAgICAqIEZpZ3VyZSBvdXQgd2hpY2ggdHlwZSBvZiBkZXN0aW5hdGlvbiBpdCBw cm9kdWNlcworICAgICAgICAgICAgICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRo ZSByZWdpbmZvCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGRlZl9vcGNvZGUgPSBwYWNr ZXQtPmluc25bZGVmX2lkeF0ub3Bjb2RlOworICAgICAgICAgICAgZHN0c3RyID0gc3Ryc3RyKG9w Y29kZV93cmVnc1tkZWZfb3Bjb2RlXSwgIlJkIik7CisgICAgICAgICAgICBpZiAoZHN0c3RyKSB7 CisgICAgICAgICAgICAgICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNv ZGVdLCAnZCcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkc3RzdHIg PSBzdHJzdHIob3Bjb2RlX3dyZWdzW2RlZl9vcGNvZGVdLCAiUngiKTsKKyAgICAgICAgICAgICAg ICBpZiAoZHN0c3RyKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0cmNocihvcGNv ZGVfcmVnaW5mb1tkZWZfb3Bjb2RlXSwgJ3gnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJzdHIob3Bjb2RlX3dyZWdzW2RlZl9vcGNv ZGVdLCAiUmUiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRzdHN0cikgeworICAgICAgICAg ICAgICAgICAgICAgICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVd LCAnZScpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICAgICAgZHN0c3RyID0gc3Ryc3RyKG9wY29kZV93cmVnc1tkZWZfb3Bjb2RlXSwgIlJ5Iik7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHN0c3RyKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHN0c3RyID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVdLCAneScp OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgICAgZ19hc3NlcnQoZHN0c3RyICE9IE5VTEwpOworCisgICAgICAgICAgICAv KiBOb3cgcGF0Y2ggdXAgdGhlIGNvbnN1bWVyIHdpdGggdGhlIHJlZ2lzdGVyIG51bWJlciAqLwor ICAgICAgICAgICAgZHN0X2lkeCA9IGRzdHN0ciAtIG9wY29kZV9yZWdpbmZvW2RlZl9vcGNvZGVd OworICAgICAgICAgICAgcGFja2V0LT5pbnNuW2ldLnJlZ25vW3VzZV9yZWdpZHhdID0KKyAgICAg ICAgICAgICAgICBwYWNrZXQtPmluc25bZGVmX2lkeF0ucmVnbm9bZHN0X2lkeF07CisgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICogV2UgbmVlZCB0byByZW1lbWJlciB3aG8gcHJvZHVjZXMg dGhpcyB2YWx1ZSB0byBsYXRlcgorICAgICAgICAgICAgICogY2hlY2sgaWYgaXQgd2FzIGR5bmFt aWNhbGx5IGNhbmNlbGxlZAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwYWNrZXQtPmlu c25baV0ubmV3X3ZhbHVlX3Byb2R1Y2VyX3Nsb3QgPQorICAgICAgICAgICAgICAgIHBhY2tldC0+ aW5zbltkZWZfaWR4XS5zbG90OworICAgICAgICB9CisgICAgfQorfQorCisvKiBTcGxpdCBDSiBp bnRvIGEgY29tcGFyZSBhbmQgYSBqdW1wICovCitzdGF0aWMgdm9pZCBkZWNvZGVfc3BsaXRfY21w anVtcChQYWNrZXQgKnBrdCkKK3sKKyAgICBpbnQgbGFzdCwgaTsKKyAgICBpbnQgbnVtaW5zbnMg PSBwa3QtPm51bV9pbnNuczsKKworICAgIC8qCisgICAgICogRmlyc3QsIHNwbGl0IGFsbCBjb21w YXJlLWp1bXBzLgorICAgICAqIFRoZSBjb21wYXJlIGlzIHNlbnQgdG8gdGhlIGVuZCBhcyBhIG5l dyBpbnN0cnVjdGlvbi4KKyAgICAgKiBEbyBpdCB0aGlzIHdheSBzbyB3ZSBkb24ndCByZW9yZGVy IGR1YWwganVtcHMuIFRob3NlIG5lZWQgdG8gc3RheSBpbgorICAgICAqIG9yaWdpbmFsIG9yZGVy LgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1pbnNuczsgaSsrKSB7CisgICAgICAg IC8qIEl0J3MgYSBjbXAtanVtcCAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25b aV0ub3Bjb2RlLCBBX05FV0NNUEpVTVApKSB7CisgICAgICAgICAgICBsYXN0ID0gcGt0LT5udW1f aW5zbnM7CisgICAgICAgICAgICBwa3QtPmluc25bbGFzdF0gPSBwa3QtPmluc25baV07ICAgIC8q IGNvcHkgdGhlIGluc3RydWN0aW9uICovCisgICAgICAgICAgICBwa3QtPmluc25bbGFzdF0ucGFy dDEgPSAxOyAgICAvKiBsYXN0IGluc3RydWN0aW9uIGRvZXMgdGhlIENNUCAqLworICAgICAgICAg ICAgcGt0LT5pbnNuW2ldLnBhcnQxID0gMDsgICAgLyogZXhpc3RpbmcgaW5zdHJ1Y3Rpb24gZG9l cyB0aGUgSlVNUCAqLworICAgICAgICAgICAgcGt0LT5udW1faW5zbnMrKzsKKyAgICAgICAgfQor ICAgIH0KKworICAgIC8qIE5vdyByZS1zaHVmZmxlIGFsbCB0aGUgY29tcGFyZXMgYmFjayB0byB0 aGUgYmVnaW5uaW5nICovCisgICAgZm9yIChpID0gMDsgaSA8IHBrdC0+bnVtX2luc25zOyBpKysp IHsKKyAgICAgICAgaWYgKHBrdC0+aW5zbltpXS5wYXJ0MSkgeworICAgICAgICAgICAgZGVjb2Rl X3NlbmRfaW5zbl90byhwa3QsIGksIDApOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg aW5saW5lIGludCBkZWNvZGVfb3Bjb2RlX2Nhbl9qdW1wKGludCBvcGNvZGUpCit7CisgICAgaWYg KChHRVRfQVRUUklCKG9wY29kZSwgQV9KVU1QKSkgfHwKKyAgICAgICAgKEdFVF9BVFRSSUIob3Bj b2RlLCBBX0NBTEwpKSB8fAorICAgICAgICAob3Bjb2RlID09IEoyX3RyYXAwKSB8fAorICAgICAg ICAob3Bjb2RlID09IEoyX3BhdXNlKSkgeworICAgICAgICAvKiBFeGNlcHRpb24gdG8gQV9KVU1Q IGF0dHJpYnV0ZSAqLworICAgICAgICBpZiAob3Bjb2RlID09IEo0X2hpbnRqdW1wcikgeworICAg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlY29kZV9vcGNvZGVfZW5k c19sb29wKGludCBvcGNvZGUpCit7CisgICAgcmV0dXJuIEdFVF9BVFRSSUIob3Bjb2RlLCBBX0hX TE9PUDBfRU5EKSB8fAorICAgICAgICAgICBHRVRfQVRUUklCKG9wY29kZSwgQV9IV0xPT1AxX0VO RCk7Cit9CisKKy8qIFNldCB0aGUgaXNfKiBmaWVsZHMgaW4gZWFjaCBpbnN0cnVjdGlvbiAqLwor c3RhdGljIHZvaWQgZGVjb2RlX3NldF9pbnNuX2F0dHJfZmllbGRzKFBhY2tldCAqcGt0KQorewor ICAgIGludCBpOworICAgIGludCBudW1pbnNucyA9IHBrdC0+bnVtX2luc25zOworICAgIHVpbnQx Nl90IG9wY29kZTsKKworICAgIHBrdC0+cGt0X2hhc19jb2YgPSAwOworICAgIHBrdC0+cGt0X2hh c19lbmRsb29wID0gMDsKKyAgICBwa3QtPnBrdF9oYXNfZGN6ZXJvYSA9IDA7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtaW5zbnM7IGkrKykgeworICAgICAgICBvcGNvZGUgPSBwa3QtPmluc25b aV0ub3Bjb2RlOworICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnBhcnQxKSB7CisgICAgICAgICAg ICBjb250aW51ZTsgICAgLyogU2tpcCBjb21wYXJlIG9mIGNtcC1qdW1wcyAqLworICAgICAgICB9 CisKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RDWkVST0EpKSB7CisgICAgICAg ICAgICBwa3QtPnBrdF9oYXNfZGN6ZXJvYSA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAo R0VUX0FUVFJJQihvcGNvZGUsIEFfU1RPUkUpKSB7CisgICAgICAgICAgICBpZiAocGt0LT5pbnNu W2ldLnNsb3QgPT0gMCkgeworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19zdG9yZV9zMCA9 IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19z dG9yZV9zMSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwa3QtPnBr dF9oYXNfY29mIHw9IGRlY29kZV9vcGNvZGVfY2FuX2p1bXAob3Bjb2RlKTsKKworICAgICAgICBw a3QtPmluc25baV0uaXNfZW5kbG9vcCA9IGRlY29kZV9vcGNvZGVfZW5kc19sb29wKG9wY29kZSk7 CisKKyAgICAgICAgcGt0LT5wa3RfaGFzX2VuZGxvb3AgfD0gcGt0LT5pbnNuW2ldLmlzX2VuZGxv b3A7CisKKyAgICAgICAgcGt0LT5wa3RfaGFzX2NvZiB8PSBwa3QtPnBrdF9oYXNfZW5kbG9vcDsK KyAgICB9Cit9CisKKy8qCisgKiBTaHVmZmxlIGZvciBleGVjdXRpb24KKyAqIE1vdmUgc3RvcmVz IHRvIGVuZCAoaW4gc2FtZSBvcmRlciBhcyBlbmNvZGluZykKKyAqIE1vdmUgY29tcGFyZXMgdG8g YmVnaW5uaW5nIChmb3IgdXNlIGJ5IC5uZXcgaW5zbnMpCisgKi8KK3N0YXRpYyB2b2lkIGRlY29k ZV9zaHVmZmxlX2Zvcl9leGVjdXRpb24oUGFja2V0ICpwYWNrZXQpCit7CisgICAgaW50IGNoYW5n ZWQgPSAwOworICAgIGludCBpOworICAgIGludCBmbGFnOyAgICAvKiBmbGFnIG1lYW5zIHdlJ3Zl IHNlZW4gYSBub24tbWVtb3J5IGluc3RydWN0aW9uICovCisgICAgaW50IG5fbWVtczsKKyAgICBp bnQgbGFzdF9pbnNuID0gcGFja2V0LT5udW1faW5zbnMgLSAxOworCisgICAgLyoKKyAgICAgKiBT a2lwIGVuZCBsb29wcywgc29tZWhvdyBhbiBlbmQgbG9vcCBpcyBnZXR0aW5nIGluIGFuZCBtZXNz aW5nCisgICAgICogdXAgdGhlIG9yZGVyCisgICAgICovCisgICAgaWYgKGRlY29kZV9vcGNvZGVf ZW5kc19sb29wKHBhY2tldC0+aW5zbltsYXN0X2luc25dLm9wY29kZSkpIHsKKyAgICAgICAgbGFz dF9pbnNuLS07CisgICAgfQorCisgICAgZG8geworICAgICAgICBjaGFuZ2VkID0gMDsKKyAgICAg ICAgLyoKKyAgICAgICAgICogU3RvcmVzIGdvIGxhc3QsIG11c3Qgbm90IHJlb3JkZXIuCisgICAg ICAgICAqIENhbm5vdCBzaHVmZmxlIHN0b3JlcyBwYXN0IGxvYWRzLCBlaXRoZXIuCisgICAgICAg ICAqIEl0ZXJhdGUgYmFja3dhcmRzLiAgSWYgd2Ugc2VlIGEgbm9uLW1lbW9yeSBpbnN0cnVjdGlv biwKKyAgICAgICAgICogdGhlbiBhIHN0b3JlLCBzaHVmZmxlIHRoZSBzdG9yZSB0byB0aGUgZnJv bnQuICBEb24ndCBzaHVmZmxlCisgICAgICAgICAqIHN0b3JlcyB3cnQgZWFjaCBvdGhlciBvciBh IGxvYWQuCisgICAgICAgICAqLworICAgICAgICBmb3IgKGZsYWcgPSBuX21lbXMgPSAwLCBpID0g bGFzdF9pbnNuOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaW50IG9wY29kZSA9IHBhY2tl dC0+aW5zbltpXS5vcGNvZGU7CisKKyAgICAgICAgICAgIGlmIChmbGFnICYmIEdFVF9BVFRSSUIo b3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgICAgIGRlY29kZV9zZW5kX2luc25fdG8o cGFja2V0LCBpLCBsYXN0X2luc24gLSBuX21lbXMpOworICAgICAgICAgICAgICAgIG5fbWVtcysr OworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChH RVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkpIHsKKyAgICAgICAgICAgICAgICBuX21lbXMrKzsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfTE9BRCkpIHsKKyAg ICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIERvbid0IHNldCBmbGFnLCBzaW5j ZSB3ZSBkb24ndCB3YW50IHRvIHNodWZmbGUgYQorICAgICAgICAgICAgICAgICAqIHN0b3JlIHBh c3QgYSBsb2FkCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbl9tZW1zKys7 CisgICAgICAgICAgICB9IGVsc2UgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RPVE5FV1ZBTFVF KSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogRG9uJ3Qgc2V0IGZs YWcsIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gc2h1ZmZsZSBwYXN0CisgICAgICAgICAgICAgICAg ICogYSAubmV3IHZhbHVlCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisK KyAgICAgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9 CisgICAgICAgIC8qIENvbXBhcmVzIGdvIGZpcnN0LCBtYXkgYmUgcmVvcmRlcmVkIHdydCBlYWNo IG90aGVyICovCisgICAgICAgIGZvciAoZmxhZyA9IDAsIGkgPSAwOyBpIDwgbGFzdF9pbnNuICsg MTsgaSsrKSB7CisgICAgICAgICAgICBpbnQgb3Bjb2RlID0gcGFja2V0LT5pbnNuW2ldLm9wY29k ZTsKKworICAgICAgICAgICAgaWYgKChzdHJzdHIob3Bjb2RlX3dyZWdzW29wY29kZV0sICJQZDQi KSB8fAorICAgICAgICAgICAgICAgICBzdHJzdHIob3Bjb2RlX3dyZWdzW29wY29kZV0sICJQZTQi KSkgJiYKKyAgICAgICAgICAgICAgICBHRVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkgPT0gMCkg eworICAgICAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGEgY29tcGFyZSAobm90IGEgc3Rv cmUgY29uZGl0aW9uYWwpICovCisgICAgICAgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAg ICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90byhwYWNrZXQsIGksIDApOworICAgICAgICAg ICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKG9wY29k ZSwgQV9JTVBMSUNJVF9XUklURVNfUDMpICYmCisgICAgICAgICAgICAgICAgICAgICAgICFkZWNv ZGVfb3Bjb2RlX2VuZHNfbG9vcChwYWNrZXQtPmluc25baV0ub3Bjb2RlKSkgeworICAgICAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogc3BObG9vcCBpbnN0cnVjdGlvbgorICAgICAg ICAgICAgICAgICAqIERvbid0IHJlb3JkZXIgZW5kbG9vcHM7IHRoZXkgYXJlIG5vdCB2YWxpZCBm b3IgLm5ldyB1c2VzLAorICAgICAgICAgICAgICAgICAqIGFuZCB3ZSB3YW50IHRvIG1hdGNoIEhX CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAg ICAgICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90byhwYWNrZXQsIGksIDApOworICAgICAg ICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKG9w Y29kZSwgQV9JTVBMSUNJVF9XUklURVNfUDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICFH RVRfQVRUUklCKG9wY29kZSwgQV9ORVdDTVBKVU1QKSkgeworICAgICAgICAgICAgICAgIGlmIChm bGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY29kZV9zZW5kX2luc25fdG8ocGFja2V0LCBp LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg fSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICAvKgorICAgICAqIElmIHdlIGhhdmUgYSAubmV3IHJl Z2lzdGVyIGNvbXBhcmUvYnJhbmNoLCBtb3ZlIHRoYXQgdG8gdGhlIHZlcnkKKyAgICAgKiB2ZXJ5 IGVuZCwgcGFzdCBzdG9yZXMKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbGFzdF9pbnNu OyBpKyspIHsKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ldLm9wY29kZSwg QV9ET1RORVdWQUxVRSkpIHsKKyAgICAgICAgICAgIGRlY29kZV9zZW5kX2luc25fdG8ocGFja2V0 LCBpLCBsYXN0X2luc24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkCithcHBseV9leHRlbmRlcihQYWNrZXQgKnBrdCwgaW50IGksIHVpbnQz Ml90IGV4dGVuZGVyKQoreworICAgIGludCBpbW1lZF9udW07CisgICAgdWludDMyX3QgYmFzZV9p bW1lZDsKKworICAgIGltbWVkX251bSA9IG9wY29kZV93aGljaF9pbW1lZGlhdGVfaXNfZXh0ZW5k ZWQocGt0LT5pbnNuW2ldLm9wY29kZSk7CisgICAgYmFzZV9pbW1lZCA9IHBrdC0+aW5zbltpXS5p bW1lZFtpbW1lZF9udW1dOworCisgICAgcGt0LT5pbnNuW2ldLmltbWVkW2ltbWVkX251bV0gPSBl eHRlbmRlciB8IGZaWFROKDYsIDMyLCBiYXNlX2ltbWVkKTsKK30KKworc3RhdGljIHZvaWQgZGVj b2RlX2FwcGx5X2V4dGVuZGVycyhQYWNrZXQgKnBhY2tldCkKK3sKKyAgICBpbnQgaTsKKyAgICBm b3IgKGkgPSAwOyBpIDwgcGFja2V0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICBpZiAoR0VU X0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0lUX0VYVEVOREVSKSkgeworICAgICAg ICAgICAgcGFja2V0LT5pbnNuW2kgKyAxXS5leHRlbnNpb25fdmFsaWQgPSAxOworICAgICAgICAg ICAgYXBwbHlfZXh0ZW5kZXIocGFja2V0LCBpICsgMSwgcGFja2V0LT5pbnNuW2ldLmltbWVkWzBd KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3JlbW92ZV9leHRl bmRlcnMoUGFja2V0ICpwYWNrZXQpCit7CisgICAgaW50IGksIGo7CisgICAgZm9yIChpID0gMDsg aSA8IHBhY2tldC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGFj a2V0LT5pbnNuW2ldLm9wY29kZSwgQV9JVF9FWFRFTkRFUikpIHsKKyAgICAgICAgICAgIC8qIFJl bW92ZSB0aGlzIG9uZSBieSBtb3ZpbmcgdGhlIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMgZG93biAq LworICAgICAgICAgICAgZm9yIChqID0gaTsKKyAgICAgICAgICAgICAgICAoaiA8IHBhY2tldC0+ bnVtX2luc25zIC0gMSkgJiYgKGogPCBJTlNUUlVDVElPTlNfTUFYIC0gMSk7CisgICAgICAgICAg ICAgICAgaisrKSB7CisgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2pdID0gcGFja2V0LT5p bnNuW2ogKyAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhY2tldC0+bnVtX2luc25z LS07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBTbG90TWFzayBnZXRfdmFsaWRfc2xv dHMoY29uc3QgUGFja2V0ICpwa3QsIHVuc2lnbmVkIGludCBzbG90KQoreworICAgIHJldHVybiBm aW5kX2ljbGFzc19zbG90cyhwa3QtPmluc25bc2xvdF0ub3Bjb2RlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwa3QtPmluc25bc2xvdF0uaWNsYXNzKTsKK30KKworI2RlZmluZSBERUNP REVfTkVXX1RBQkxFKFRBRywgU0laRSwgV0hBVE5PVCkgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZp bmUgVEFCTEVfTElOSyhUQUJMRSkgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICov CisjZGVmaW5lIFRFUk1JTkFMKFRBRywgRU5DKSAgICAgICAgICAgICAgICAgICAgICAgLyogTk9U SElORyAqLworI2RlZmluZSBTVUJJTlNOUyhUQUcsIENMQVNTQSwgQ0xBU1NCLCBFTkMpICAgICAg IC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMpICAgICAgICAgICAgICAg ICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIElOVkFMSUQoKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfRU5EX1RBQkxFKC4u LikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX01BVENI X0lORk8oLi4uKSAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09E RV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgICAgLyogTk9USElORyAqLworCisjZGVm aW5lIERFQ09ERV9SRUcoUkVHTk8sIFdJRFRILCBTVEFSVEJJVCkgXAorICAgIGluc24tPnJlZ25v W1JFR05PXSA9ICgoZW5jb2RpbmcgPj4gU1RBUlRCSVQpICYgKCgxIDw8IFdJRFRIKSAtIDEpKTsK KworI2RlZmluZSBERUNPREVfSU1QTF9SRUcoUkVHTk8sIFZBTCkgXAorICAgIGluc24tPnJlZ25v W1JFR05PXSA9IFZBTDsKKworI2RlZmluZSBERUNPREVfSU1NKElNTU5PLCBXSURUSCwgU1RBUlRC SVQsIFZBTFNUQVJUKSBcCisgICAgaW5zbi0+aW1tZWRbSU1NTk9dIHw9ICgoKGVuY29kaW5nID4+ IFNUQVJUQklUKSAmICgoMSA8PCBXSURUSCkgLSAxKSkpIDw8IFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgKFZBTFNUQVJUKTsKKworI2RlZmluZSBERUNPREVfSU1NX1NYVChJTU1OTywgV0lE VEgpIFwKKyAgICBpbnNuLT5pbW1lZFtJTU1OT10gPSAoKCgoaW50MzJfdClpbnNuLT5pbW1lZFtJ TU1OT10pIDw8ICgzMiAtIFdJRFRIKSkgPj4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAo MzIgLSBXSURUSCkpOworCisjZGVmaW5lIERFQ09ERV9JTU1fTkVHKElNTU5PLCBXSURUSCkgXAor ICAgIGluc24tPmltbWVkW0lNTU5PXSA9IC1pbnNuLT5pbW1lZFtJTU1OT107CisKKyNkZWZpbmUg REVDT0RFX0lNTV9TSElGVChJTU1OTywgU0hBTVQpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIGlmICgoIWluc24tPmV4dGVuc2lvbl92YWxpZCkgfHwgXAorICAgICAgICAo aW5zbi0+d2hpY2hfZXh0ZW5kZWQgIT0gSU1NTk8pKSB7IFwKKyAgICAgICAgaW5zbi0+aW1tZWRb SU1NTk9dIDw8PSBTSEFNVDsgXAorICAgIH0KKworI2RlZmluZSBERUNPREVfT1BJTkZPKFRBRywg QkVIKSBcCisgICAgY2FzZSBUQUc6IFwKKyAgICAgICAgeyBCRUggIH0gXAorICAgICAgICBicmVh azsgXAorCisvKgorICogRmlsbCBpbiB0aGUgb3BlcmFuZHMgb2YgdGhlIGluc3RydWN0aW9uCisg KiBkZWN0cmVlX2dlbmVyYXRlZC5oLmluYyBoYXMgYSBERUNPREVfT1BJTkZPIGVudHJ5IGZvciBl YWNoIG9wY29kZQorICogRm9yIGV4YW1wbGUsCisgKiAgICAgREVDT0RFX09QSU5GTyhBMl9hZGRp LAorICogICAgICAgICAgREVDT0RFX1JFRygwLDUsMCkKKyAqICAgICAgICAgIERFQ09ERV9SRUco MSw1LDE2KQorICogICAgICAgICAgREVDT0RFX0lNTSgwLDcsMjEsOSkKKyAqICAgICAgICAgIERF Q09ERV9JTU0oMCw5LDUsMCkKKyAqICAgICAgICAgIERFQ09ERV9JTU1fU1hUKDAsMTYpCisgKiB3 aXRoIHRoZSBtYWNyb3MgZGVmaW5lZCBhYm92ZSwgd2UnbGwgZmlsbCBpbiBhIHN3aXRjaCBzdGF0 ZW1lbnQKKyAqIHdoZXJlIGVhY2ggY2FzZSBpcyBhbiBvcGNvZGUgdGFnLgorICovCitzdGF0aWMg dm9pZAorZGVjb2RlX29wKEluc24gKmluc24sIE9wY29kZSB0YWcsIHVpbnQzMl90IGVuY29kaW5n KQoreworICAgIGluc24tPmltbWVkWzBdID0gMDsKKyAgICBpbnNuLT5pbW1lZFsxXSA9IDA7Cisg ICAgaW5zbi0+b3Bjb2RlID0gdGFnOworICAgIGlmIChpbnNuLT5leHRlbnNpb25fdmFsaWQpIHsK KyAgICAgICAgaW5zbi0+d2hpY2hfZXh0ZW5kZWQgPSBvcGNvZGVfd2hpY2hfaW1tZWRpYXRlX2lz X2V4dGVuZGVkKHRhZyk7CisgICAgfQorCisgICAgc3dpdGNoICh0YWcpIHsKKyNpbmNsdWRlICJk ZWN0cmVlX2dlbmVyYXRlZC5oLmluYyIKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg ICB9CisKKyAgICBpbnNuLT5nZW5lcmF0ZSA9IG9wY29kZV9nZW5wdHJbdGFnXTsKKworICAgIGlu c24tPmljbGFzcyA9IGljbGFzc19iaXRzKGVuY29kaW5nKTsKK30KKworI3VuZGVmIERFQ09ERV9S RUcKKyN1bmRlZiBERUNPREVfSU1QTF9SRUcKKyN1bmRlZiBERUNPREVfSU1NCisjdW5kZWYgREVD T0RFX0lNTV9TSElGVAorI3VuZGVmIERFQ09ERV9PUElORk8KKyN1bmRlZiBERUNPREVfTUFUQ0hf SU5GTworI3VuZGVmIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTworI3VuZGVmIERFQ09ERV9FTkRf VEFCTEUKKyN1bmRlZiBJTlZBTElECisjdW5kZWYgVEVSTUlOQUwKKyN1bmRlZiBTVUJJTlNOUwor I3VuZGVmIEVYVFNQQUNFCisjdW5kZWYgVEFCTEVfTElOSworI3VuZGVmIERFQ09ERV9ORVdfVEFC TEUKKyN1bmRlZiBERUNPREVfU0VQQVJBVE9SX0JJVFMKKworc3RhdGljIHVuc2lnbmVkIGludAor ZGVjb2RlX3N1Ymluc25fdGFibGV3YWxrKEluc24gKmluc24sIGNvbnN0IERlY3RyZWVUYWJsZSAq dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZW5jb2RpbmcpCit7Cisg ICAgdW5zaWduZWQgaW50IGk7CisgICAgT3Bjb2RlIG9wYzsKKyAgICBpZiAodGFibGUtPmxvb2t1 cF9mdW5jdGlvbikgeworICAgICAgICBpID0gdGFibGUtPmxvb2t1cF9mdW5jdGlvbih0YWJsZS0+ c3RhcnRiaXQsIHRhYmxlLT53aWR0aCwgZW5jb2RpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAg IGkgPSBleHRyYWN0MzIoZW5jb2RpbmcsIHRhYmxlLT5zdGFydGJpdCwgdGFibGUtPndpZHRoKTsK KyAgICB9CisgICAgaWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfVEFCTEVfTElO SykgeworICAgICAgICByZXR1cm4gZGVjb2RlX3N1Ymluc25fdGFibGV3YWxrKGluc24sIHRhYmxl LT50YWJsZVtpXS50YWJsZV9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgaWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09 IERFQ1RSRUVfVEVSTUlOQUwpIHsKKyAgICAgICAgb3BjID0gdGFibGUtPnRhYmxlW2ldLm9wY29k ZTsKKyAgICAgICAgaWYgKChlbmNvZGluZyAmIGRlY29kZV9pdGFibGVbb3BjXS5tYXNrKSAhPSBk ZWNvZGVfaXRhYmxlW29wY10ubWF0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9CisgICAgICAgIGRlY29kZV9vcChpbnNuLCBvcGMsIGVuY29kaW5nKTsKKyAgICAgICAgcmV0 dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0 aWMgdW5zaWduZWQgaW50IGdldF9pbnNuX2EodWludDMyX3QgZW5jb2RpbmcpCit7CisgICAgcmV0 dXJuIGV4dHJhY3QzMihlbmNvZGluZywgMCwgMTMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50 IGdldF9pbnNuX2IodWludDMyX3QgZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGV4dHJhY3QzMihl bmNvZGluZywgMTYsIDEzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZGVjb2RlX2luc25z X3RhYmxld2FsayhJbnNuICppbnNuLCBjb25zdCBEZWN0cmVlVGFibGUgKnRhYmxlLAorICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBlbmNvZGluZykKK3sKKyAgICB1bnNpZ25lZCBpbnQg aTsKKyAgICB1bnNpZ25lZCBpbnQgYSwgYjsKKyAgICBPcGNvZGUgb3BjOworICAgIGlmICh0YWJs ZS0+bG9va3VwX2Z1bmN0aW9uKSB7CisgICAgICAgIGkgPSB0YWJsZS0+bG9va3VwX2Z1bmN0aW9u KHRhYmxlLT5zdGFydGJpdCwgdGFibGUtPndpZHRoLCBlbmNvZGluZyk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgaSA9IGV4dHJhY3QzMihlbmNvZGluZywgdGFibGUtPnN0YXJ0Yml0LCB0YWJsZS0+ d2lkdGgpOworICAgIH0KKyAgICBpZiAodGFibGUtPnRhYmxlW2ldLnR5cGUgPT0gREVDVFJFRV9U QUJMRV9MSU5LKSB7CisgICAgICAgIHJldHVybiBkZWNvZGVfaW5zbnNfdGFibGV3YWxrKGluc24s IHRhYmxlLT50YWJsZVtpXS50YWJsZV9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbmNvZGluZyk7CisgICAgfSBlbHNlIGlmICh0YWJsZS0+dGFibGVbaV0udHlw ZSA9PSBERUNUUkVFX1NVQklOU05TKSB7CisgICAgICAgIGEgPSBnZXRfaW5zbl9hKGVuY29kaW5n KTsKKyAgICAgICAgYiA9IGdldF9pbnNuX2IoZW5jb2RpbmcpOworICAgICAgICBiID0gZGVjb2Rl X3N1Ymluc25fdGFibGV3YWxrKGluc24sIHRhYmxlLT50YWJsZVtpXS50YWJsZV9saW5rX2IsIGIp OworICAgICAgICBhID0gZGVjb2RlX3N1Ymluc25fdGFibGV3YWxrKGluc24gKyAxLCB0YWJsZS0+ dGFibGVbaV0udGFibGVfbGluaywgYSk7CisgICAgICAgIGlmICgoYSA9PSAwKSB8fCAoYiA9PSAw KSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDI7 CisgICAgfSBlbHNlIGlmICh0YWJsZS0+dGFibGVbaV0udHlwZSA9PSBERUNUUkVFX1RFUk1JTkFM KSB7CisgICAgICAgIG9wYyA9IHRhYmxlLT50YWJsZVtpXS5vcGNvZGU7CisgICAgICAgIGlmICgo ZW5jb2RpbmcgJiBkZWNvZGVfaXRhYmxlW29wY10ubWFzaykgIT0gZGVjb2RlX2l0YWJsZVtvcGNd Lm1hdGNoKSB7CisgICAgICAgICAgICBpZiAoKGVuY29kaW5nICYgZGVjb2RlX2xlZ2FjeV9pdGFi bGVbb3BjXS5tYXNrKSAhPQorICAgICAgICAgICAgICAgIGRlY29kZV9sZWdhY3lfaXRhYmxlW29w Y10ubWF0Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBkZWNvZGVfb3AoaW5zbiwgb3BjLCBlbmNvZGluZyk7CisgICAgICAg IHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor c3RhdGljIHVuc2lnbmVkIGludAorZGVjb2RlX2luc25zKEluc24gKmluc24sIHVpbnQzMl90IGVu Y29kaW5nKQoreworICAgIGNvbnN0IERlY3RyZWVUYWJsZSAqdGFibGU7CisgICAgaWYgKHBhcnNl X2JpdHMoZW5jb2RpbmcpICE9IDApIHsKKyAgICAgICAgLyogU3RhcnQgd2l0aCBQUCB0YWJsZSAt IDMyIGJpdCBpbnN0cnVjdGlvbnMgKi8KKyAgICAgICAgdGFibGUgPSAmZGVjdHJlZV90YWJsZV9E RUNPREVfUk9PVF8zMjsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBzdGFydCB3aXRoIEVFIHRh YmxlIC0gZHVwbGV4IGluc3RydWN0aW9ucyAqLworICAgICAgICB0YWJsZSA9ICZkZWN0cmVlX3Rh YmxlX0RFQ09ERV9ST09UX0VFOworICAgIH0KKyAgICByZXR1cm4gZGVjb2RlX2luc25zX3RhYmxl d2FsayhpbnNuLCB0YWJsZSwgZW5jb2RpbmcpOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfYWRk X2VuZGxvb3BfaW5zbihJbnNuICppbnNuLCBpbnQgbG9vcG51bSkKK3sKKyAgICBpZiAobG9vcG51 bSA9PSAxMCkgeworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9lbmRsb29wMDE7CisgICAgICAg IGluc24tPmdlbmVyYXRlID0gb3Bjb2RlX2dlbnB0cltKMl9lbmRsb29wMDFdOworICAgIH0gZWxz ZSBpZiAobG9vcG51bSA9PSAxKSB7CisgICAgICAgIGluc24tPm9wY29kZSA9IEoyX2VuZGxvb3Ax OworICAgICAgICBpbnNuLT5nZW5lcmF0ZSA9IG9wY29kZV9nZW5wdHJbSjJfZW5kbG9vcDFdOwor ICAgIH0gZWxzZSBpZiAobG9vcG51bSA9PSAwKSB7CisgICAgICAgIGluc24tPm9wY29kZSA9IEoy X2VuZGxvb3AwOworICAgICAgICBpbnNuLT5nZW5lcmF0ZSA9IG9wY29kZV9nZW5wdHJbSjJfZW5k bG9vcDBdOworICAgIH0gZWxzZSB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cisg ICAgfQorfQorCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVfcGFyc2ViaXRzX2lzX2xvb3BlbmQo dWludDMyX3QgZW5jb2RpbmczMikKK3sKKyAgICB1aW50MzJfdCBiaXRzID0gcGFyc2VfYml0cyhl bmNvZGluZzMyKTsKKyAgICByZXR1cm4gYml0cyA9PSAweDI7Cit9CisKK3N0YXRpYyB2b2lkCitk ZWNvZGVfc2V0X3Nsb3RfbnVtYmVyKFBhY2tldCAqcGt0KQoreworICAgIGludCBzbG90OworICAg IGludCBpOworICAgIGludCBoaXRfbWVtX2luc24gPSAwOworICAgIGludCBoaXRfZHVwbGV4ID0g MDsKKworICAgIC8qCisgICAgICogVGhlIHNsb3RzIGFyZSBlbmNvZGVkIGluIHJldmVyc2Ugb3Jk ZXIKKyAgICAgKiBGb3IgZWFjaCBpbnN0cnVjdGlvbiwgY291bnQgZG93biB1bnRpbCB5b3UgZmlu ZCBhIHN1aXRhYmxlIHNsb3QKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBzbG90ID0gMzsgaSA8 IHBrdC0+bnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgU2xvdE1hc2sgdmFsaWRfc2xvdHMgPSBn ZXRfdmFsaWRfc2xvdHMocGt0LCBpKTsKKworICAgICAgICB3aGlsZSAoISh2YWxpZF9zbG90cyAm ICgxIDw8IHNsb3QpKSkgeworICAgICAgICAgICAgc2xvdC0tOworICAgICAgICB9CisgICAgICAg IHBrdC0+aW5zbltpXS5zbG90ID0gc2xvdDsKKyAgICAgICAgaWYgKHNsb3QpIHsKKyAgICAgICAg ICAgIC8qIEkndmUgYXNzaWduZWQgdGhlIHNsb3QsIG5vdyBkZWNyZW1lbnQgaXQgZm9yIHRoZSBu ZXh0IGluc24gKi8KKyAgICAgICAgICAgIHNsb3QtLTsKKyAgICAgICAgfQorICAgIH0KKworICAg IC8qIEZpeCB0aGUgZXhjZXB0aW9ucyAtIG1lbSBpbnNucyB0byBzbG90IDAsMSAqLworICAgIGZv ciAoaSA9IHBrdC0+bnVtX2luc25zIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgLyogRmly c3QgbWVtb3J5IGluc3RydWN0aW9uIGFsd2F5cyBnb2VzIHRvIHNsb3QgMCAqLworICAgICAgICBp ZiAoKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9NRU1MSUtFKSB8fAorICAgICAg ICAgICAgIEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9NRU1MSUtFX1BBQ0tFVF9S VUxFUykpICYmCisgICAgICAgICAgICAhaGl0X21lbV9pbnNuKSB7CisgICAgICAgICAgICBoaXRf bWVtX2luc24gPSAxOworICAgICAgICAgICAgcGt0LT5pbnNuW2ldLnNsb3QgPSAwOworICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBOZXh0IG1lbW9yeSBpbnN0 cnVjdGlvbiBhbHdheXMgZ29lcyB0byBzbG90IDEgKi8KKyAgICAgICAgaWYgKChHRVRfQVRUUklC KHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRSkgfHwKKyAgICAgICAgICAgICBHRVRfQVRU UklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfTUVNTElLRV9QQUNLRVRfUlVMRVMpKSAmJgorICAg ICAgICAgICAgaGl0X21lbV9pbnNuKSB7CisgICAgICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9 IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGaXggdGhlIGV4Y2VwdGlvbnMgLSBkdXBs ZXggYWx3YXlzIHNsb3QgMCwxICovCisgICAgZm9yIChpID0gcGt0LT5udW1faW5zbnMgLSAxOyBp ID49IDA7IGktLSkgeworICAgICAgICAvKiBGaXJzdCBzdWJpbnNuIGFsd2F5cyBnb2VzIHRvIHNs b3QgMCAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBBX1NV QklOU04pICYmICFoaXRfZHVwbGV4KSB7CisgICAgICAgICAgICBoaXRfZHVwbGV4ID0gMTsKKyAg ICAgICAgICAgIHBrdC0+aW5zbltpXS5zbG90ID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICB9CisKKyAgICAgICAgLyogTmV4dCBzdWJpbnNuIGFsd2F5cyBnb2VzIHRvIHNsb3Qg MSAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBBX1NVQklO U04pICYmIGhpdF9kdXBsZXgpIHsKKyAgICAgICAgICAgIHBrdC0+aW5zbltpXS5zbG90ID0gMTsK KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEZpeCB0aGUgZXhjZXB0aW9ucyAtIHNsb3QgMSBp cyBuZXZlciBlbXB0eSwgYWx3YXlzIGFsaWducyB0byBzbG90IDAgKi8KKyAgICBpbnQgc2xvdDBf Zm91bmQgPSAwOworICAgIGludCBzbG90MV9mb3VuZCA9IDA7CisgICAgaW50IHNsb3QxX2lpZHgg PSAwOworICAgIGZvciAoaSA9IHBrdC0+bnVtX2luc25zIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAg ICAgICAgLyogSXMgc2xvdDAgdXNlZD8gKi8KKyAgICAgICAgaWYgKHBrdC0+aW5zbltpXS5zbG90 ID09IDApIHsKKyAgICAgICAgICAgIGludCBpc19lbmRsb29wID0gKHBrdC0+aW5zbltpXS5vcGNv ZGUgPT0gSjJfZW5kbG9vcDAxKTsKKyAgICAgICAgICAgIGlzX2VuZGxvb3AgfD0gKHBrdC0+aW5z bltpXS5vcGNvZGUgPT0gSjJfZW5kbG9vcDApOworICAgICAgICAgICAgaXNfZW5kbG9vcCB8PSAo cGt0LT5pbnNuW2ldLm9wY29kZSA9PSBKMl9lbmRsb29wMSk7CisKKyAgICAgICAgICAgIC8qCisg ICAgICAgICAgICAgKiBNYWtlIHN1cmUgaXQncyBub3QgZW5kbG9vcCBzaW5jZSwgd2UncmUgb3Zl cmxvYWRpbmcKKyAgICAgICAgICAgICAqIHNsb3QwIGZvciBlbmRsb29wCisgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIGlmICghaXNfZW5kbG9vcCkgeworICAgICAgICAgICAgICAgIHNsb3Qw X2ZvdW5kID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBJcyBzbG90 MSB1c2VkPyAqLworICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3QgPT0gMSkgeworICAgICAg ICAgICAgc2xvdDFfZm91bmQgPSAxOworICAgICAgICAgICAgc2xvdDFfaWlkeCA9IGk7CisgICAg ICAgIH0KKyAgICB9CisgICAgLyogSXMgc2xvdDAgZW1wdHkgYW5kIHNsb3QxIHVzZWQ/ICovCisg ICAgaWYgKChzbG90MF9mb3VuZCA9PSAwKSAmJiAoc2xvdDFfZm91bmQgPT0gMSkpIHsKKyAgICAg ICAgLyogVGhlbiBwdXNoIGl0IHRvIHNsb3QwICovCisgICAgICAgIHBrdC0+aW5zbltzbG90MV9p aWR4XS5zbG90ID0gMDsKKyAgICB9Cit9CisKKy8qCisgKiBkZWNvZGVfcGFja2V0CisgKiBEZWNv ZGVzIHBhY2tldCB3aXRoIGdpdmVuIHdvcmRzCisgKiBSZXR1cm5zIDAgb24gaW5zdWZmaWNpZW50 IHdvcmRzLAorICogb3IgbnVtYmVyIG9mIHdvcmRzIHVzZWQgb24gc3VjY2VzcworICovCisKK2lu dCBkZWNvZGVfcGFja2V0KGludCBtYXhfd29yZHMsIGNvbnN0IHVpbnQzMl90ICp3b3JkcywgUGFj a2V0ICpwa3QsCisgICAgICAgICAgICAgICAgICBib29sIGRpc2FzX29ubHkpCit7CisgICAgaW50 IG51bV9pbnNucyA9IDA7CisgICAgaW50IHdvcmRzX3JlYWQgPSAwOworICAgIGludCBlbmRfb2Zf cGFja2V0ID0gMDsKKyAgICBpbnQgbmV3X2luc25zID0gMDsKKyAgICB1aW50MzJfdCBlbmNvZGlu ZzMyOworCisgICAgLyogSW5pdGlhbGl6ZSAqLworICAgIG1lbXNldChwa3QsIDAsIHNpemVvZigq cGt0KSk7CisgICAgLyogVHJ5IHRvIGJ1aWxkIHBhY2tldCAqLworICAgIHdoaWxlICghZW5kX29m X3BhY2tldCAmJiAod29yZHNfcmVhZCA8IG1heF93b3JkcykpIHsKKyAgICAgICAgZW5jb2Rpbmcz MiA9IHdvcmRzW3dvcmRzX3JlYWRdOworICAgICAgICBlbmRfb2ZfcGFja2V0ID0gaXNfcGFja2V0 X2VuZChlbmNvZGluZzMyKTsKKyAgICAgICAgbmV3X2luc25zID0gZGVjb2RlX2luc25zKCZwa3Qt Pmluc25bbnVtX2luc25zXSwgZW5jb2RpbmczMik7CisgICAgICAgIGdfYXNzZXJ0KG5ld19pbnNu cyA+IDApOworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3ZSBzYXcgYW4gZXh0ZW5kZXIsIG1h cmsgbmV4dCB3b3JkIGV4dGVuZGVkIHNvIGltbWVkaWF0ZQorICAgICAgICAgKiBkZWNvZGUgd29y a3MKKyAgICAgICAgICovCisgICAgICAgIGlmIChwa3QtPmluc25bbnVtX2luc25zXS5vcGNvZGUg PT0gQTRfZXh0KSB7CisgICAgICAgICAgICBwa3QtPmluc25bbnVtX2luc25zICsgMV0uZXh0ZW5z aW9uX3ZhbGlkID0gMTsKKyAgICAgICAgfQorICAgICAgICBudW1faW5zbnMgKz0gbmV3X2luc25z OworICAgICAgICB3b3Jkc19yZWFkKys7CisgICAgfQorCisgICAgcGt0LT5udW1faW5zbnMgPSBu dW1faW5zbnM7CisgICAgaWYgKCFlbmRfb2ZfcGFja2V0KSB7CisgICAgICAgIC8qIFJhbiBvdXQg b2Ygd29yZHMhICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwa3QtPmVuY29kX3Br dF9zaXplX2luX2J5dGVzID0gd29yZHNfcmVhZCAqIDQ7CisKKyAgICAvKgorICAgICAqIENoZWNr IGZvciA6ZW5kbG9vcCBpbiB0aGUgcGFyc2UgYml0cworICAgICAqIFNlY3Rpb24gMTAuNiBvZiB0 aGUgUHJvZ3JhbW1lcidzIFJlZmVyZW5jZSBkZXNjcmliZXMgdGhlIGVuY29kaW5nCisgICAgICog ICAgIFRoZSBlbmQgb2YgaGFyZHdhcmUgbG9vcCAwIGNhbiBiZSBlbmNvZGVkIHdpdGggMiB3b3Jk cworICAgICAqICAgICBUaGUgZW5kIG9mIGhhcmR3YXJlIGxvb3AgMSBuZWVkcyAzIHdvcmRzCisg ICAgICovCisgICAgaWYgKCh3b3Jkc19yZWFkID09IDIpICYmIChkZWNvZGVfcGFyc2ViaXRzX2lz X2xvb3BlbmQod29yZHNbMF0pKSkgeworICAgICAgICBkZWNvZGVfYWRkX2VuZGxvb3BfaW5zbigm cGt0LT5pbnNuW3BrdC0+bnVtX2luc25zKytdLCAwKTsKKyAgICB9CisgICAgaWYgKHdvcmRzX3Jl YWQgPj0gMykgeworICAgICAgICB1aW50MzJfdCBoYXNfbG9vcDAsIGhhc19sb29wMTsKKyAgICAg ICAgaGFzX2xvb3AwID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzBdKTsKKyAg ICAgICAgaGFzX2xvb3AxID0gZGVjb2RlX3BhcnNlYml0c19pc19sb29wZW5kKHdvcmRzWzFdKTsK KyAgICAgICAgaWYgKGhhc19sb29wMCAmJiBoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRlY29k ZV9hZGRfZW5kbG9vcF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEwKTsKKyAg ICAgICAgfSBlbHNlIGlmIChoYXNfbG9vcDEpIHsKKyAgICAgICAgICAgIGRlY29kZV9hZGRfZW5k bG9vcF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDEpOworICAgICAgICB9IGVs c2UgaWYgKGhhc19sb29wMCkgeworICAgICAgICAgICAgZGVjb2RlX2FkZF9lbmRsb29wX2luc24o JnBrdC0+aW5zbltwa3QtPm51bV9pbnNucysrXSwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICBkZWNvZGVfYXBwbHlfZXh0ZW5kZXJzKHBrdCk7CisgICAgaWYgKCFkaXNhc19vbmx5KSB7Cisg ICAgICAgIGRlY29kZV9yZW1vdmVfZXh0ZW5kZXJzKHBrdCk7CisgICAgfQorICAgIGRlY29kZV9z ZXRfc2xvdF9udW1iZXIocGt0KTsKKyAgICBkZWNvZGVfZmlsbF9uZXd2YWx1ZV9yZWdubyhwa3Qp OworCisgICAgaWYgKCFkaXNhc19vbmx5KSB7CisgICAgICAgIGRlY29kZV9zaHVmZmxlX2Zvcl9l eGVjdXRpb24ocGt0KTsKKyAgICAgICAgZGVjb2RlX3NwbGl0X2NtcGp1bXAocGt0KTsKKyAgICAg ICAgZGVjb2RlX3NldF9pbnNuX2F0dHJfZmllbGRzKHBrdCk7CisgICAgfQorCisgICAgcmV0dXJu IHdvcmRzX3JlYWQ7Cit9CisKKy8qIFVzZWQgZm9yICItZCBpbl9hc20iIGxvZ2dpbmcgKi8KK2lu dCBkaXNhc3NlbWJsZV9oZXhhZ29uKHVpbnQzMl90ICp3b3JkcywgaW50IG53b3JkcywgYmZkX3Zt YSBwYywKKyAgICAgICAgICAgICAgICAgICAgICAgIEdTdHJpbmcgKmJ1ZikKK3sKKyAgICBQYWNr ZXQgcGt0OworCisgICAgaWYgKGRlY29kZV9wYWNrZXQobndvcmRzLCB3b3JkcywgJnBrdCwgdHJ1 ZSkgPiAwKSB7CisgICAgICAgIHNucHJpbnRfYV9wa3RfZGlzYXMoYnVmLCAmcGt0LCB3b3Jkcywg cGMpOworICAgICAgICByZXR1cm4gcGt0LmVuY29kX3BrdF9zaXplX2luX2J5dGVzOworICAgIH0g ZWxzZSB7CisgICAgICAgIGdfc3RyaW5nX2Fzc2lnbihidWYsICI8aW52YWxpZD4iKTsKKyAgICAg ICAgcmV0dXJuIDA7CisgICAgfQorfQotLSAKMi43LjQKCg==