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 1016CC433E6 for ; Fri, 8 Jan 2021 04:56:26 +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 6567222E02 for ; Fri, 8 Jan 2021 04:56:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6567222E02 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]:52258 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kxjp2-0007U9-BE for qemu-devel@archiver.kernel.org; Thu, 07 Jan 2021 23:56:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52516) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kxjPw-0008Mk-68 for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:30:29 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:25188) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kxjPo-00059i-T9 for qemu-devel@nongnu.org; Thu, 07 Jan 2021 23:30:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1610080220; x=1641616220; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=iZN1/sFxqMC4+59GePWUyfR6uXvTidLCr1CzrfW2/i0=; b=uqhVDx1djnnIUp6hHCatggOJJoQLNV+Nrra2y5REozjsuEzulHyB06Kv BZlxwGhps34DN0iz5KDx7ocbP+SjGzT3IhWnNfl4NF+k+pEdJkAlUm713 SmS/8tWRbrOAGMcbQ3jwo9VMkJiMgT8UmEzdtT/2fgt0heFKe88L/bUAe 0=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 07 Jan 2021 20:29:15 -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 Jan 2021 20:29:15 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 4627D11A9; Thu, 7 Jan 2021 22:29:15 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v6 29/35] Hexagon (target/hexagon) translation Date: Thu, 7 Jan 2021 22:29:00 -0600 Message-Id: <1610080146-14968-30-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1610080146-14968-1-git-send-email-tsimpson@quicinc.com> References: <1610080146-14968-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, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UmVhZCB0aGUgaW5zdHJ1Y3Rpb24gbWVtb3J5CkNyZWF0ZSBhIHBhY2tldCBkYXRhIHN0cnVjdHVy ZQpHZW5lcmF0ZSBUQ0cgY29kZSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBwYWNrZXQKSW52b2tlIHRo ZSBnZW5lcmF0ZSBmdW5jdGlvbiBmb3IgZWFjaCBpbnN0cnVjdGlvbgpHZW5lcmF0ZSBUQ0cgY29k ZSBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0CgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNv biA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmgg fCAgOTEgKysrKysrCiB0YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuYyB8IDY4NyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNzc4 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi90cmFuc2xh dGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jCgpkaWZm IC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmggYi90YXJnZXQvaGV4YWdvbi90cmFu c2xhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc4ZTBkCi0tLSAv ZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmgKQEAgLTAsMCArMSw5MSBA QAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEhFWEFHT05fVFJBTlNMQVRFX0gKKyNk ZWZpbmUgSEVYQUdPTl9UUkFOU0xBVEVfSAorCisjaW5jbHVkZSAicWVtdS9iaXRtYXAuaCIKKyNp bmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJleGVjL3RyYW5zbGF0b3IuaCIKKyNpbmNsdWRlICJ0 Y2cvdGNnLW9wLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgRGlz YXNDb250ZXh0IHsKKyAgICBEaXNhc0NvbnRleHRCYXNlIGJhc2U7CisgICAgdWludDMyX3QgbWVt X2lkeDsKKyAgICBpbnQgcmVnX2xvZ1tSRUdfV1JJVEVTX01BWF07CisgICAgaW50IHJlZ19sb2df aWR4OworICAgIERFQ0xBUkVfQklUTUFQKHJlZ3Nfd3JpdHRlbiwgVE9UQUxfUEVSX1RIUkVBRF9S RUdTKTsKKyAgICBpbnQgcHJlZ19sb2dbUFJFRF9XUklURVNfTUFYXTsKKyAgICBpbnQgcHJlZ19s b2dfaWR4OworICAgIHVpbnQ4X3Qgc3RvcmVfd2lkdGhbU1RPUkVTX01BWF07CisgICAgdWludDhf dCBzMV9zdG9yZV9wcm9jZXNzZWQ7Cit9IERpc2FzQ29udGV4dDsKKworc3RhdGljIGlubGluZSB2 b2lkIGN0eF9sb2dfcmVnX3dyaXRlKERpc2FzQ29udGV4dCAqY3R4LCBpbnQgcm51bSkKK3sKKyNp ZiBIRVhfREVCVUcKKyAgICBpZiAodGVzdF9iaXQocm51bSwgY3R4LT5yZWdzX3dyaXR0ZW4pKSB7 CisgICAgICAgIEhFWF9ERUJVR19MT0coIldBUk5JTkc6IE11bHRpcGxlIHdyaXRlcyB0byByJWRc biIsIHJudW0pOworICAgIH0KKyNlbmRpZgorICAgIGN0eC0+cmVnX2xvZ1tjdHgtPnJlZ19sb2df aWR4XSA9IHJudW07CisgICAgY3R4LT5yZWdfbG9nX2lkeCsrOworICAgIHNldF9iaXQocm51bSwg Y3R4LT5yZWdzX3dyaXR0ZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3R4X2xvZ19yZWdf d3JpdGVfcGFpcihEaXNhc0NvbnRleHQgKmN0eCwgaW50IHJudW0pCit7CisgICAgY3R4X2xvZ19y ZWdfd3JpdGUoY3R4LCBybnVtKTsKKyAgICBjdHhfbG9nX3JlZ193cml0ZShjdHgsIHJudW0gKyAx KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN0eF9sb2dfcHJlZF93cml0ZShEaXNhc0NvbnRl eHQgKmN0eCwgaW50IHBudW0pCit7CisgICAgY3R4LT5wcmVnX2xvZ1tjdHgtPnByZWdfbG9nX2lk eF0gPSBwbnVtOworICAgIGN0eC0+cHJlZ19sb2dfaWR4Kys7Cit9CisKK3N0YXRpYyBpbmxpbmUg Ym9vbCBpc19wcmVsb2FkZWQoRGlzYXNDb250ZXh0ICpjdHgsIGludCBudW0pCit7CisgICAgcmV0 dXJuIHRlc3RfYml0KG51bSwgY3R4LT5yZWdzX3dyaXR0ZW4pOworfQorCitleHRlcm4gVENHdiBo ZXhfZ3ByW1RPVEFMX1BFUl9USFJFQURfUkVHU107CitleHRlcm4gVENHdiBoZXhfcHJlZFtOVU1f UFJFR1NdOworZXh0ZXJuIFRDR3YgaGV4X25leHRfUEM7CitleHRlcm4gVENHdiBoZXhfdGhpc19Q QzsKK2V4dGVybiBUQ0d2IGhleF9zbG90X2NhbmNlbGxlZDsKK2V4dGVybiBUQ0d2IGhleF9icmFu Y2hfdGFrZW47CitleHRlcm4gVENHdiBoZXhfbmV3X3ZhbHVlW1RPVEFMX1BFUl9USFJFQURfUkVH U107CitleHRlcm4gVENHdiBoZXhfcmVnX3dyaXR0ZW5bVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsK K2V4dGVybiBUQ0d2IGhleF9uZXdfcHJlZF92YWx1ZVtOVU1fUFJFR1NdOworZXh0ZXJuIFRDR3Yg aGV4X3ByZWRfd3JpdHRlbjsKK2V4dGVybiBUQ0d2IGhleF9zdG9yZV9hZGRyW1NUT1JFU19NQVhd OworZXh0ZXJuIFRDR3YgaGV4X3N0b3JlX3dpZHRoW1NUT1JFU19NQVhdOworZXh0ZXJuIFRDR3Yg aGV4X3N0b3JlX3ZhbDMyW1NUT1JFU19NQVhdOworZXh0ZXJuIFRDR3ZfaTY0IGhleF9zdG9yZV92 YWw2NFtTVE9SRVNfTUFYXTsKK2V4dGVybiBUQ0d2IGhleF9kY3plcm9fYWRkcjsKK2V4dGVybiBU Q0d2IGhleF9sbHNjX2FkZHI7CitleHRlcm4gVENHdiBoZXhfbGxzY192YWw7CitleHRlcm4gVENH dl9pNjQgaGV4X2xsc2NfdmFsX2k2NDsKKworZXh0ZXJuIHZvaWQgZ2VuX2V4Y2VwdGlvbihpbnQg ZXhjcCk7CitleHRlcm4gdm9pZCBnZW5fZXhjZXB0aW9uX2RlYnVnKHZvaWQpOworCitleHRlcm4g dm9pZCBwcm9jZXNzX3N0b3JlKERpc2FzQ29udGV4dCAqY3R4LCBpbnQgc2xvdF9udW0pOworI2Vu ZGlmCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuYyBiL3RhcmdldC9oZXhh Z29uL3RyYW5zbGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzUx Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuYwpAQCAtMCww ICsxLDY4NyBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92 YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjZGVmaW5lIFFFTVVfR0VORVJBVEUK KyNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAidGNn L3RjZy1vcC5oIgorI2luY2x1ZGUgImV4ZWMvY3B1X2xkc3QuaCIKKyNpbmNsdWRlICJleGVjL2xv Zy5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiYXR0cmlicy5oIgorI2luY2x1 ZGUgImluc24uaCIKKyNpbmNsdWRlICJkZWNvZGUuaCIKKyNpbmNsdWRlICJ0cmFuc2xhdGUuaCIK KyNpbmNsdWRlICJwcmludGluc24uaCIKKworVENHdiBoZXhfZ3ByW1RPVEFMX1BFUl9USFJFQURf UkVHU107CitUQ0d2IGhleF9wcmVkW05VTV9QUkVHU107CitUQ0d2IGhleF9uZXh0X1BDOworVENH diBoZXhfdGhpc19QQzsKK1RDR3YgaGV4X3Nsb3RfY2FuY2VsbGVkOworVENHdiBoZXhfYnJhbmNo X3Rha2VuOworVENHdiBoZXhfbmV3X3ZhbHVlW1RPVEFMX1BFUl9USFJFQURfUkVHU107CisjaWYg SEVYX0RFQlVHCitUQ0d2IGhleF9yZWdfd3JpdHRlbltUT1RBTF9QRVJfVEhSRUFEX1JFR1NdOwor I2VuZGlmCitUQ0d2IGhleF9uZXdfcHJlZF92YWx1ZVtOVU1fUFJFR1NdOworVENHdiBoZXhfcHJl ZF93cml0dGVuOworVENHdiBoZXhfc3RvcmVfYWRkcltTVE9SRVNfTUFYXTsKK1RDR3YgaGV4X3N0 b3JlX3dpZHRoW1NUT1JFU19NQVhdOworVENHdiBoZXhfc3RvcmVfdmFsMzJbU1RPUkVTX01BWF07 CitUQ0d2X2k2NCBoZXhfc3RvcmVfdmFsNjRbU1RPUkVTX01BWF07CitUQ0d2IGhleF9wa3RfaGFz X3N0b3JlX3MxOworVENHdiBoZXhfZGN6ZXJvX2FkZHI7CitUQ0d2IGhleF9sbHNjX2FkZHI7CitU Q0d2IGhleF9sbHNjX3ZhbDsKK1RDR3ZfaTY0IGhleF9sbHNjX3ZhbF9pNjQ7CisKK3N0YXRpYyBj b25zdCBjaGFyICogY29uc3QgaGV4YWdvbl9wcmVkbmFtZXNbXSA9IHsKKyAgInAwIiwgInAxIiwg InAyIiwgInAzIgorfTsKKwordm9pZCBnZW5fZXhjZXB0aW9uKGludCBleGNwKQoreworICAgIFRD R3ZfaTMyIGhlbHBlcl90bXAgPSB0Y2dfY29uc3RfaTMyKGV4Y3ApOworICAgIGdlbl9oZWxwZXJf cmFpc2VfZXhjZXB0aW9uKGNwdV9lbnYsIGhlbHBlcl90bXApOworICAgIHRjZ190ZW1wX2ZyZWVf aTMyKGhlbHBlcl90bXApOworfQorCit2b2lkIGdlbl9leGNlcHRpb25fZGVidWcodm9pZCkKK3sK KyAgICBnZW5fZXhjZXB0aW9uKEVYQ1BfREVCVUcpOworfQorCisjaWYgSEVYX0RFQlVHCisjZGVm aW5lIFBBQ0tFVF9CVUZGRVJfTEVOICAgICAgICAgICAgICAxMDI4CitzdGF0aWMgdm9pZCBwcmlu dF9wa3QoUGFja2V0ICpwa3QpCit7CisgICAgY2hhciBidWZbUEFDS0VUX0JVRkZFUl9MRU5dOwor ICAgIHNucHJpbnRfYV9wa3RfZGVidWcoYnVmLCBQQUNLRVRfQlVGRkVSX0xFTiwgcGt0KTsKKyAg ICBIRVhfREVCVUdfTE9HKCIlcyIsIGJ1Zik7Cit9CisjZGVmaW5lIEhFWF9ERUJVR19QUklOVF9Q S1QocGt0KSAgcHJpbnRfcGt0KHBrdCkKKyNlbHNlCisjZGVmaW5lIEhFWF9ERUJVR19QUklOVF9Q S1QocGt0KSAgLyogbm90aGluZyAqLworI2VuZGlmCisKK3N0YXRpYyBpbnQgcmVhZF9wYWNrZXRf d29yZHMoQ1BVSGV4YWdvblN0YXRlICplbnYsIERpc2FzQ29udGV4dCAqY3R4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3b3Jkc1tdKQoreworICAgIGJvb2wgZm91bmRf ZW5kID0gZmFsc2U7CisgICAgaW50IG53b3JkczsKKworICAgIG1lbXNldCh3b3JkcywgMCwgUEFD S0VUX1dPUkRTX01BWCAqIHNpemVvZih1aW50MzJfdCkpOworICAgIGZvciAobndvcmRzID0gMDsg IWZvdW5kX2VuZCAmJiBud29yZHMgPCBQQUNLRVRfV09SRFNfTUFYOyBud29yZHMrKykgeworICAg ICAgICB3b3Jkc1tud29yZHNdID0gY3B1X2xkbF9jb2RlKGVudiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3R4LT5iYXNlLnBjX25leHQgKyBud29yZHMgKiBzaXplb2YodWludDMy X3QpKTsKKyAgICAgICAgZm91bmRfZW5kID0gaXNfcGFja2V0X2VuZCh3b3Jkc1tud29yZHNdKTsK KyAgICB9CisgICAgaWYgKCFmb3VuZF9lbmQpIHsKKyAgICAgICAgLyogUmVhZCB0b28gbWFueSB3 b3JkcyB3aXRob3V0IGZpbmRpbmcgdGhlIGVuZCAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9 CisKKyAgICAvKiBDaGVjayBmb3IgcGFnZSBib3VuZGFyeSBjcm9zc2luZyAqLworICAgIGludCBt YXhfd29yZHMgPSAtKGN0eC0+YmFzZS5wY19uZXh0IHwgVEFSR0VUX1BBR0VfTUFTSykgLyBzaXpl b2YodWludDMyX3QpOworICAgIGlmIChud29yZHMgPiBtYXhfd29yZHMpIHsKKyAgICAgICAgLyog V2UgY2FuIG9ubHkgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBU QiAqLworICAgICAgICBnX2Fzc2VydChjdHgtPmJhc2UubnVtX2luc25zID09IDEpOworICAgIH0K KworICAgIEhFWF9ERUJVR19MT0coImRlY29kZV9wYWNrZXQ6IHBjID0gMHgleFxuIiwgY3R4LT5i YXNlLnBjX25leHQpOworICAgIEhFWF9ERUJVR19MT0coIiAgICB3b3JkcyA9IHsgIik7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBud29yZHM7IGkrKykgeworICAgICAgICBIRVhfREVCVUdfTE9H KCIweCV4LCAiLCB3b3Jkc1tpXSk7CisgICAgfQorICAgIEhFWF9ERUJVR19MT0coIn1cbiIpOwor CisgICAgcmV0dXJuIG53b3JkczsKK30KKworc3RhdGljIHZvaWQgZ2VuX3N0YXJ0X3BhY2tldChE aXNhc0NvbnRleHQgKmN0eCwgUGFja2V0ICpwa3QpCit7CisgICAgdGFyZ2V0X3Vsb25nIG5leHRf UEMgPSBjdHgtPmJhc2UucGNfbmV4dCArIHBrdC0+ZW5jb2RfcGt0X3NpemVfaW5fYnl0ZXM7Cisg ICAgaW50IGk7CisKKyAgICAvKiBDbGVhciBvdXQgdGhlIGRpc2Fzc2VtYmx5IGNvbnRleHQgKi8K KyAgICBjdHgtPnJlZ19sb2dfaWR4ID0gMDsKKyAgICBiaXRtYXBfemVybyhjdHgtPnJlZ3Nfd3Jp dHRlbiwgVE9UQUxfUEVSX1RIUkVBRF9SRUdTKTsKKyAgICBjdHgtPnByZWdfbG9nX2lkeCA9IDA7 CisgICAgZm9yIChpID0gMDsgaSA8IFNUT1JFU19NQVg7IGkrKykgeworICAgICAgICBjdHgtPnN0 b3JlX3dpZHRoW2ldID0gMDsKKyAgICB9CisgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9wa3RfaGFz X3N0b3JlX3MxLCBwa3QtPnBrdF9oYXNfc3RvcmVfczEpOworICAgIGN0eC0+czFfc3RvcmVfcHJv Y2Vzc2VkID0gMDsKKworI2lmIEhFWF9ERUJVRworICAgIC8qIEhhbmR5IHBsYWNlIHRvIHNldCBh IGJyZWFrcG9pbnQgYmVmb3JlIHRoZSBwYWNrZXQgZXhlY3V0ZXMgKi8KKyAgICBnZW5faGVscGVy X2RlYnVnX3N0YXJ0X3BhY2tldChjcHVfZW52KTsKKyAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X3Ro aXNfUEMsIGN0eC0+YmFzZS5wY19uZXh0KTsKKyNlbmRpZgorCisgICAgLyogSW5pdGlhbGl6ZSB0 aGUgcnVudGltZSBzdGF0ZSBmb3IgcGFja2V0IHNlbWFudGljcyAqLworICAgIHRjZ19nZW5fbW92 aV90bChoZXhfZ3ByW0hFWF9SRUdfUENdLCBjdHgtPmJhc2UucGNfbmV4dCk7CisgICAgdGNnX2dl bl9tb3ZpX3RsKGhleF9zbG90X2NhbmNlbGxlZCwgMCk7CisgICAgaWYgKHBrdC0+cGt0X2hhc19j b2YpIHsKKyAgICAgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9icmFuY2hfdGFrZW4sIDApOworICAg ICAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X25leHRfUEMsIG5leHRfUEMpOworICAgIH0KKyAgICB0 Y2dfZ2VuX21vdmlfdGwoaGV4X3ByZWRfd3JpdHRlbiwgMCk7Cit9CisKKy8qCisgKiBUaGUgTE9H XypfV1JJVEUgbWFjcm9zIG1hcmsgbW9zdCBvZiB0aGUgd3JpdGVzIGluIGEgcGFja2V0CisgKiBI b3dldmVyLCB0aGVyZSBhcmUgc29tZSBpbXBsaWNpdCB3cml0ZXMgbWFya2VkIGFzIGF0dHJpYnV0 ZXMKKyAqIG9mIHRoZSBhcHBsaWNhYmxlIGluc3RydWN0aW9ucy4KKyAqLworc3RhdGljIHZvaWQg bWFya19pbXBsaWNpdF9yZWdfd3JpdGUoRGlzYXNDb250ZXh0ICpjdHgsIEluc24gKmluc24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXR0cmliLCBpbnQgcm51bSkK K3sKKyAgICBpZiAoR0VUX0FUVFJJQihpbnNuLT5vcGNvZGUsIGF0dHJpYikpIHsKKyAgICAgICAg aW50IGlzX3ByZWRpY2F0ZWQgPSBHRVRfQVRUUklCKGluc24tPm9wY29kZSwgQV9DT05ERVhFQyk7 CisgICAgICAgIGlmIChpc19wcmVkaWNhdGVkICYmICFpc19wcmVsb2FkZWQoY3R4LCBybnVtKSkg eworICAgICAgICAgICAgdGNnX2dlbl9tb3ZfdGwoaGV4X25ld192YWx1ZVtybnVtXSwgaGV4X2dw cltybnVtXSk7CisgICAgICAgIH0KKworICAgICAgICBjdHhfbG9nX3JlZ193cml0ZShjdHgsIHJu dW0pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbWFya19pbXBsaWNpdF9wcmVkX3dyaXRlKERp c2FzQ29udGV4dCAqY3R4LCBJbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBhdHRyaWIsIGludCBwbnVtKQoreworICAgIGlmIChHRVRfQVRUUklCKGlu c24tPm9wY29kZSwgYXR0cmliKSkgeworICAgICAgICBjdHhfbG9nX3ByZWRfd3JpdGUoY3R4LCBw bnVtKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfaW1wbGljaXRfd3JpdGVzKERpc2Fz Q29udGV4dCAqY3R4LCBJbnNuICppbnNuKQoreworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRl KGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfRlAsICBIRVhfUkVHX0ZQKTsKKyAgICBtYXJr X2ltcGxpY2l0X3JlZ193cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX1NQLCAgSEVY X1JFR19TUCk7CisgICAgbWFya19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJ Q0lUX1dSSVRFU19MUiwgIEhFWF9SRUdfTFIpOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRl KGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfTEMwLCBIRVhfUkVHX0xDMCk7CisgICAgbWFy a19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19TQTAsIEhF WF9SRUdfU0EwKTsKKyAgICBtYXJrX2ltcGxpY2l0X3JlZ193cml0ZShjdHgsIGluc24sIEFfSU1Q TElDSVRfV1JJVEVTX0xDMSwgSEVYX1JFR19MQzEpOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dy aXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfU0ExLCBIRVhfUkVHX1NBMSk7CisKKyAg ICBtYXJrX2ltcGxpY2l0X3ByZWRfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19Q MCwgMCk7CisgICAgbWFya19pbXBsaWNpdF9wcmVkX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJ VF9XUklURVNfUDEsIDEpOworICAgIG1hcmtfaW1wbGljaXRfcHJlZF93cml0ZShjdHgsIGluc24s IEFfSU1QTElDSVRfV1JJVEVTX1AyLCAyKTsKKyAgICBtYXJrX2ltcGxpY2l0X3ByZWRfd3JpdGUo Y3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19QMywgMyk7Cit9CisKK3N0YXRpYyB2b2lkIGdl bl9pbnNuKENQVUhleGFnb25TdGF0ZSAqZW52LCBEaXNhc0NvbnRleHQgKmN0eCwKKyAgICAgICAg ICAgICAgICAgICAgIEluc24gKmluc24sIFBhY2tldCAqcGt0KQoreworICAgIGlmIChpbnNuLT5n ZW5lcmF0ZSkgeworICAgICAgICBtYXJrX2ltcGxpY2l0X3dyaXRlcyhjdHgsIGluc24pOworICAg ICAgICBpbnNuLT5nZW5lcmF0ZShlbnYsIGN0eCwgaW5zbiwgcGt0KTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBnZW5fZXhjZXB0aW9uKEhFWF9FWENQX0lOVkFMSURfT1BDT0RFKTsKKyAgICAgICAg Y3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIH0KK30KKworLyoKKyAqIEhl bHBlcnMgZm9yIGdlbmVyYXRpbmcgdGhlIHBhY2tldCBjb21taXQKKyAqLworc3RhdGljIHZvaWQg Z2VuX3JlZ193cml0ZXMoRGlzYXNDb250ZXh0ICpjdHgpCit7CisgICAgaW50IGk7CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgY3R4LT5yZWdfbG9nX2lkeDsgaSsrKSB7CisgICAgICAgIGludCByZWdf bnVtID0gY3R4LT5yZWdfbG9nW2ldOworCisgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9ncHJb cmVnX251bV0sIGhleF9uZXdfdmFsdWVbcmVnX251bV0pOworICAgIH0KK30KKworc3RhdGljIHZv aWQgZ2VuX3ByZWRfd3JpdGVzKERpc2FzQ29udGV4dCAqY3R4LCBQYWNrZXQgKnBrdCkKK3sKKyAg ICAvKiBFYXJseSBleGl0IGlmIHRoZSBsb2cgaXMgZW1wdHkgKi8KKyAgICBpZiAoIWN0eC0+cHJl Z19sb2dfaWR4KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUQ0d2IHplcm8gPSB0 Y2dfY29uc3RfdGwoMCk7CisgICAgVENHdiBjb250cm9sX3JlZyA9IHRjZ190ZW1wX25ldygpOwor ICAgIFRDR3YgcHZhbCA9IHRjZ190ZW1wX25ldygpOworICAgIGludCBpOworCisgICAgLyoKKyAg ICAgKiBPbmx5IGVuZGxvb3AgaW5zdHJ1Y3Rpb25zIHdpbGwgY29uZGl0aW9uYWxseQorICAgICAq IHdyaXRlIGEgcHJlZGljYXRlLiAgSWYgdGhlcmUgYXJlIG5vIGVuZGxvb3AKKyAgICAgKiBpbnN0 cnVjdGlvbnMsIHdlIGNhbiB1c2UgdGhlIG5vbi1jb25kaXRpb25hbAorICAgICAqIHdyaXRlIG9m IHRoZSBwcmVkaWNhdGVzLgorICAgICAqLworICAgIGlmIChwa3QtPnBrdF9oYXNfZW5kbG9vcCkg eworICAgICAgICBUQ0d2IHByZWRfd3JpdHRlbiA9IHRjZ190ZW1wX25ldygpOworICAgICAgICBm b3IgKGkgPSAwOyBpIDwgY3R4LT5wcmVnX2xvZ19pZHg7IGkrKykgeworICAgICAgICAgICAgaW50 IHByZWRfbnVtID0gY3R4LT5wcmVnX2xvZ1tpXTsKKworICAgICAgICAgICAgdGNnX2dlbl9hbmRp X3RsKHByZWRfd3JpdHRlbiwgaGV4X3ByZWRfd3JpdHRlbiwgMSA8PCBwcmVkX251bSk7CisgICAg ICAgICAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NPTkRfTkUsIGhleF9wcmVkW3ByZWRfbnVt XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkX3dyaXR0ZW4sIHplcm8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X25ld19wcmVkX3ZhbHVlW3ByZWRfbnVt XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfcHJlZFtwcmVkX251bV0pOwor ICAgICAgICB9CisgICAgICAgIHRjZ190ZW1wX2ZyZWUocHJlZF93cml0dGVuKTsKKyAgICB9IGVs c2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5wcmVnX2xvZ19pZHg7IGkrKykgewor ICAgICAgICAgICAgaW50IHByZWRfbnVtID0gY3R4LT5wcmVnX2xvZ1tpXTsKKyAgICAgICAgICAg IHRjZ19nZW5fbW92X3RsKGhleF9wcmVkW3ByZWRfbnVtXSwgaGV4X25ld19wcmVkX3ZhbHVlW3By ZWRfbnVtXSk7CisjaWYgSEVYX0RFQlVHCisgICAgICAgICAgICAvKiBEbyB0aGlzIHNvIEhFTFBF UihkZWJ1Z19jb21taXRfZW5kKSB3aWxsIGtub3cgKi8KKyAgICAgICAgICAgIHRjZ19nZW5fb3Jp X3RsKGhleF9wcmVkX3dyaXR0ZW4sIGhleF9wcmVkX3dyaXR0ZW4sIDEgPDwgcHJlZF9udW0pOwor I2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICB0Y2dfdGVtcF9mcmVlKHplcm8pOworICAg IHRjZ190ZW1wX2ZyZWUoY29udHJvbF9yZWcpOworICAgIHRjZ190ZW1wX2ZyZWUocHZhbCk7Cit9 CisKKyNpZiBIRVhfREVCVUcKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fY2hlY2tfc3RvcmVfd2lk dGgoRGlzYXNDb250ZXh0ICpjdHgsIGludCBzbG90X251bSkKK3sKKyAgICBUQ0d2IHNsb3QgPSB0 Y2dfY29uc3RfdGwoc2xvdF9udW0pOworICAgIFRDR3YgY2hlY2sgPSB0Y2dfY29uc3RfdGwoY3R4 LT5zdG9yZV93aWR0aFtzbG90X251bV0pOworICAgIGdlbl9oZWxwZXJfZGVidWdfY2hlY2tfc3Rv cmVfd2lkdGgoY3B1X2Vudiwgc2xvdCwgY2hlY2spOworICAgIHRjZ190ZW1wX2ZyZWUoc2xvdCk7 CisgICAgdGNnX3RlbXBfZnJlZShjaGVjayk7Cit9CisjZGVmaW5lIEhFWF9ERUJVR19HRU5fQ0hF Q0tfU1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSkgXAorICAgIGdlbl9jaGVja19zdG9yZV93aWR0 aChjdHgsIHNsb3RfbnVtKQorI2Vsc2UKKyNkZWZpbmUgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9S RV9XSURUSChjdHgsIHNsb3RfbnVtKSAgLyogbm90aGluZyAqLworI2VuZGlmCisKK3ZvaWQgcHJv Y2Vzc19zdG9yZShEaXNhc0NvbnRleHQgKmN0eCwgaW50IHNsb3RfbnVtKQoreworICAgIC8qCisg ICAgICogV2UgbWF5IGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhpcyBzdG9yZQorICAgICAqIFNl ZSBDSEVDS19OT1NIVUYgaW4gbWFjcm9zLmgKKyAgICAgKi8KKyAgICBpZiAoc2xvdF9udW0gPT0g MSAmJiBjdHgtPnMxX3N0b3JlX3Byb2Nlc3NlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQor ICAgIGN0eC0+czFfc3RvcmVfcHJvY2Vzc2VkID0gMTsKKworICAgIFRDR3YgY2FuY2VsbGVkID0g dGNnX3RlbXBfbmV3KCk7CisgICAgVENHTGFiZWwgKmxhYmVsX2VuZCA9IGdlbl9uZXdfbGFiZWwo KTsKKworICAgIC8qIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBzbG90IHdhcyBjYW5jZWxsZWQg Ki8KKyAgICB0Y2dfZ2VuX2V4dHJhY3RfdGwoY2FuY2VsbGVkLCBoZXhfc2xvdF9jYW5jZWxsZWQs IHNsb3RfbnVtLCAxKTsKKyAgICB0Y2dfZ2VuX2JyY29uZGlfdGwoVENHX0NPTkRfTkUsIGNhbmNl bGxlZCwgMCwgbGFiZWxfZW5kKTsKKyAgICB0Y2dfdGVtcF9mcmVlKGNhbmNlbGxlZCk7CisgICAg eworICAgICAgICBUQ0d2IGFkZHJlc3MgPSB0Y2dfdGVtcF9sb2NhbF9uZXcoKTsKKyAgICAgICAg dGNnX2dlbl9tb3ZfdGwoYWRkcmVzcywgaGV4X3N0b3JlX2FkZHJbc2xvdF9udW1dKTsKKworICAg ICAgICAvKgorICAgICAgICAgKiBJZiB3ZSBrbm93IHRoZSB3aWR0aCBmcm9tIHRoZSBEaXNhc0Nv bnRleHQsIHdlIGNhbgorICAgICAgICAgKiBnZW5lcmF0ZSBtdWNoIGNsZWFuZXIgY29kZS4KKyAg ICAgICAgICogVW5mb3J0dW5hdGVseSwgbm90IGFsbCBpbnN0cnVjdGlvbnMgZXhlY3V0ZSB0aGUg ZlNUT1JFCisgICAgICAgICAqIG1hY3JvIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uICBBbnl0aGlu ZyB0aGF0IHVzZXMgdGhlCisgICAgICAgICAqIGdlbmVyaWMgaGVscGVyIHdpbGwgaGF2ZSB0aGlz IHByb2JsZW0uICBJbnN0cnVjdGlvbnMKKyAgICAgICAgICogdGhhdCB1c2UgZldSQVAgdG8gZ2Vu ZXJhdGUgcHJvcGVyIFRDRyBjb2RlIHdpbGwgYmUgT0suCisgICAgICAgICAqLworICAgICAgICBz d2l0Y2ggKGN0eC0+c3RvcmVfd2lkdGhbc2xvdF9udW1dKSB7CisgICAgICAgIGNhc2UgMToKKyAg ICAgICAgICAgIEhFWF9ERUJVR19HRU5fQ0hFQ0tfU1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSk7 CisgICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q4KGhleF9zdG9yZV92YWwzMltzbG90X251bV0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9zdG9yZV9hZGRyW3Nsb3RfbnVtXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBIRVhfREVCVUdfR0VOX0NIRUNL X1NUT1JFX1dJRFRIKGN0eCwgc2xvdF9udW0pOworICAgICAgICAgICAgdGNnX2dlbl9xZW11X3N0 MTYoaGV4X3N0b3JlX3ZhbDMyW3Nsb3RfbnVtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhleF9zdG9yZV9hZGRyW3Nsb3RfbnVtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGN0eC0+bWVtX2lkeCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0Ogor ICAgICAgICAgICAgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9SRV9XSURUSChjdHgsIHNsb3RfbnVt KTsKKyAgICAgICAgICAgIHRjZ19nZW5fcWVtdV9zdDMyKGhleF9zdG9yZV92YWwzMltzbG90X251 bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfc3RvcmVfYWRkcltzbG90X251 bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm1lbV9pZHgpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIEhFWF9ERUJVR19HRU5f Q0hFQ0tfU1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSk7CisgICAgICAgICAgICB0Y2dfZ2VuX3Fl bXVfc3Q2NChoZXhfc3RvcmVfdmFsNjRbc2xvdF9udW1dLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaGV4X3N0b3JlX2FkZHJbc2xvdF9udW1dLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAg ICogSWYgd2UgZ2V0IHRvIGhlcmUsIHdlIGRvbid0IGtub3cgdGhlIHdpZHRoIGF0CisgICAgICAg ICAgICAgICAgICogVENHIGdlbmVyYXRpb24gdGltZSwgd2UnbGwgdXNlIGEgaGVscGVyIHRvCisg ICAgICAgICAgICAgICAgICogYXZvaWQgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZSB3aWR0aCBhdCBy dW50aW1lLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIFRDR3Ygc2xvdCA9 IHRjZ19jb25zdF90bChzbG90X251bSk7CisgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9jb21t aXRfc3RvcmUoY3B1X2Vudiwgc2xvdCk7CisgICAgICAgICAgICAgICAgdGNnX3RlbXBfZnJlZShz bG90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0Y2dfdGVtcF9mcmVlKGFk ZHJlc3MpOworICAgIH0KKyAgICBnZW5fc2V0X2xhYmVsKGxhYmVsX2VuZCk7Cit9CisKK3N0YXRp YyB2b2lkIHByb2Nlc3Nfc3RvcmVfbG9nKERpc2FzQ29udGV4dCAqY3R4LCBQYWNrZXQgKnBrdCkK K3sKKyAgICAvKgorICAgICAqICBXaGVuIGEgcGFja2V0IGhhcyB0d28gc3RvcmVzLCB0aGUgaGFy ZHdhcmUgcHJvY2Vzc2VzCisgICAgICogIHNsb3QgMSBhbmQgdGhlbiBzbG90IDIuICBUaGlzIHdp bGwgYmUgaW1wb3J0YW50IHdoZW4KKyAgICAgKiAgdGhlIG1lbW9yeSBhY2Nlc3NlcyBvdmVybGFw LgorICAgICAqLworICAgIGlmIChwa3QtPnBrdF9oYXNfc3RvcmVfczEgJiYgIXBrdC0+cGt0X2hh c19kY3plcm9hKSB7CisgICAgICAgIHByb2Nlc3Nfc3RvcmUoY3R4LCAxKTsKKyAgICB9CisgICAg aWYgKHBrdC0+cGt0X2hhc19zdG9yZV9zMCAmJiAhcGt0LT5wa3RfaGFzX2RjemVyb2EpIHsKKyAg ICAgICAgcHJvY2Vzc19zdG9yZShjdHgsIDApOworICAgIH0KK30KKworLyogWmVybyBvdXQgYSAz Mi1iaXQgY2FjaGUgbGluZSAqLworc3RhdGljIHZvaWQgcHJvY2Vzc19kY3plcm9hKERpc2FzQ29u dGV4dCAqY3R4LCBQYWNrZXQgKnBrdCkKK3sKKyAgICBpZiAocGt0LT5wa3RfaGFzX2RjemVyb2Ep IHsKKyAgICAgICAgLyogU3RvcmUgMzIgYnl0ZXMgb2YgemVybyBzdGFydGluZyBhdCAoYWRkciAm IH4weDFmKSAqLworICAgICAgICBUQ0d2IGFkZHIgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICAgICAg VENHdl9pNjQgemVybyA9IHRjZ19jb25zdF9pNjQoMCk7CisKKyAgICAgICAgdGNnX2dlbl9hbmRp X3RsKGFkZHIsIGhleF9kY3plcm9fYWRkciwgfjB4MWYpOworICAgICAgICB0Y2dfZ2VuX3FlbXVf c3Q2NCh6ZXJvLCBhZGRyLCBjdHgtPm1lbV9pZHgpOworICAgICAgICB0Y2dfZ2VuX2FkZGlfdGwo YWRkciwgYWRkciwgOCk7CisgICAgICAgIHRjZ19nZW5fcWVtdV9zdDY0KHplcm8sIGFkZHIsIGN0 eC0+bWVtX2lkeCk7CisgICAgICAgIHRjZ19nZW5fYWRkaV90bChhZGRyLCBhZGRyLCA4KTsKKyAg ICAgICAgdGNnX2dlbl9xZW11X3N0NjQoemVybywgYWRkciwgY3R4LT5tZW1faWR4KTsKKyAgICAg ICAgdGNnX2dlbl9hZGRpX3RsKGFkZHIsIGFkZHIsIDgpOworICAgICAgICB0Y2dfZ2VuX3FlbXVf c3Q2NCh6ZXJvLCBhZGRyLCBjdHgtPm1lbV9pZHgpOworCisgICAgICAgIHRjZ190ZW1wX2ZyZWUo YWRkcik7CisgICAgICAgIHRjZ190ZW1wX2ZyZWVfaTY0KHplcm8pOworICAgIH0KK30KKworc3Rh dGljIHZvaWQgZ2VuX2V4ZWNfY291bnRlcnMoUGFja2V0ICpwa3QpCit7CisgICAgaW50IG51bV9p bnNucyA9IHBrdC0+bnVtX2luc25zOworICAgIGludCBudW1fcmVhbF9pbnNucyA9IDA7CisgICAg aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2luc25zOyBpKyspIHsKKyAgICAgICAg aWYgKCFwa3QtPmluc25baV0uaXNfZW5kbG9vcCAmJgorICAgICAgICAgICAgIXBrdC0+aW5zbltp XS5wYXJ0MSAmJgorICAgICAgICAgICAgIUdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwg QV9JVF9OT1ApKSB7CisgICAgICAgICAgICBudW1fcmVhbF9pbnNucysrOworICAgICAgICB9Cisg ICAgfQorCisgICAgdGNnX2dlbl9hZGRpX3RsKGhleF9ncHJbSEVYX1JFR19RRU1VX1BLVF9DTlRd LAorICAgICAgICAgICAgICAgICAgICBoZXhfZ3ByW0hFWF9SRUdfUUVNVV9QS1RfQ05UXSwgMSk7 CisgICAgdGNnX2dlbl9hZGRpX3RsKGhleF9ncHJbSEVYX1JFR19RRU1VX0lOU05fQ05UXSwKKyAg ICAgICAgICAgICAgICAgICAgaGV4X2dwcltIRVhfUkVHX1FFTVVfSU5TTl9DTlRdLCBudW1fcmVh bF9pbnNucyk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9jb21taXRfcGFja2V0KERpc2FzQ29udGV4 dCAqY3R4LCBQYWNrZXQgKnBrdCkKK3sKKyAgICBnZW5fcmVnX3dyaXRlcyhjdHgpOworICAgIGdl bl9wcmVkX3dyaXRlcyhjdHgsIHBrdCk7CisgICAgcHJvY2Vzc19zdG9yZV9sb2coY3R4LCBwa3Qp OworICAgIHByb2Nlc3NfZGN6ZXJvYShjdHgsIHBrdCk7CisgICAgZ2VuX2V4ZWNfY291bnRlcnMo cGt0KTsKKyNpZiBIRVhfREVCVUcKKyAgICB7CisgICAgICAgIFRDR3YgaGFzX3N0MCA9CisgICAg ICAgICAgICB0Y2dfY29uc3RfdGwocGt0LT5wa3RfaGFzX3N0b3JlX3MwICYmICFwa3QtPnBrdF9o YXNfZGN6ZXJvYSk7CisgICAgICAgIFRDR3YgaGFzX3N0MSA9CisgICAgICAgICAgICB0Y2dfY29u c3RfdGwocGt0LT5wa3RfaGFzX3N0b3JlX3MxICYmICFwa3QtPnBrdF9oYXNfZGN6ZXJvYSk7CisK KyAgICAgICAgLyogSGFuZHkgcGxhY2UgdG8gc2V0IGEgYnJlYWtwb2ludCBhdCB0aGUgZW5kIG9m IGV4ZWN1dGlvbiAqLworICAgICAgICBnZW5faGVscGVyX2RlYnVnX2NvbW1pdF9lbmQoY3B1X2Vu diwgaGFzX3N0MCwgaGFzX3N0MSk7CisKKyAgICAgICAgdGNnX3RlbXBfZnJlZShoYXNfc3QwKTsK KyAgICAgICAgdGNnX3RlbXBfZnJlZShoYXNfc3QxKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlm IChwa3QtPnBrdF9oYXNfY29mKSB7CisgICAgICAgIGN0eC0+YmFzZS5pc19qbXAgPSBESVNBU19O T1JFVFVSTjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9hbmRfdHJhbnNsYXRlX3Bh Y2tldChDUFVIZXhhZ29uU3RhdGUgKmVudiwgRGlzYXNDb250ZXh0ICpjdHgpCit7CisgICAgdWlu dDMyX3Qgd29yZHNbUEFDS0VUX1dPUkRTX01BWF07CisgICAgaW50IG53b3JkczsKKyAgICBQYWNr ZXQgcGt0OworICAgIGludCBpOworCisgICAgbndvcmRzID0gcmVhZF9wYWNrZXRfd29yZHMoZW52 LCBjdHgsIHdvcmRzKTsKKyAgICBpZiAoIW53b3JkcykgeworICAgICAgICBnZW5fZXhjZXB0aW9u KEhFWF9FWENQX0lOVkFMSURfUEFDS0VUKTsKKyAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJ U0FTX05PUkVUVVJOOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlY29kZV9w YWNrZXQobndvcmRzLCB3b3JkcywgJnBrdCwgZmFsc2UpID4gMCkgeworICAgICAgICBIRVhfREVC VUdfUFJJTlRfUEtUKCZwa3QpOworICAgICAgICBnZW5fc3RhcnRfcGFja2V0KGN0eCwgJnBrdCk7 CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwa3QubnVtX2luc25zOyBpKyspIHsKKyAgICAgICAg ICAgIGdlbl9pbnNuKGVudiwgY3R4LCAmcGt0Lmluc25baV0sICZwa3QpOworICAgICAgICB9Cisg ICAgICAgIGdlbl9jb21taXRfcGFja2V0KGN0eCwgJnBrdCk7CisgICAgICAgIGN0eC0+YmFzZS5w Y19uZXh0ICs9IHBrdC5lbmNvZF9wa3Rfc2l6ZV9pbl9ieXRlczsKKyAgICB9IGVsc2UgeworICAg ICAgICBnZW5fZXhjZXB0aW9uKEhFWF9FWENQX0lOVkFMSURfUEFDS0VUKTsKKyAgICAgICAgY3R4 LT5iYXNlLmlzX2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIH0KK30KKworc3RhdGljIHZvaWQg aGV4YWdvbl90cl9pbml0X2Rpc2FzX2NvbnRleHQoRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVU3RhdGUgKmNzKQor eworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRjYmFzZSwgRGlzYXNDb250 ZXh0LCBiYXNlKTsKKworICAgIGN0eC0+bWVtX2lkeCA9IE1NVV9VU0VSX0lEWDsKK30KKworc3Rh dGljIHZvaWQgaGV4YWdvbl90cl90Yl9zdGFydChEaXNhc0NvbnRleHRCYXNlICpkYiwgQ1BVU3Rh dGUgKmNwdSkKK3sKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl90cl9pbnNuX3N0YXJ0KERpc2Fz Q29udGV4dEJhc2UgKmRjYmFzZSwgQ1BVU3RhdGUgKmNwdSkKK3sKKyAgICBEaXNhc0NvbnRleHQg KmN0eCA9IGNvbnRhaW5lcl9vZihkY2Jhc2UsIERpc2FzQ29udGV4dCwgYmFzZSk7CisKKyAgICB0 Y2dfZ2VuX2luc25fc3RhcnQoY3R4LT5iYXNlLnBjX25leHQpOworfQorCitzdGF0aWMgYm9vbCBo ZXhhZ29uX3RyX2JyZWFrcG9pbnRfY2hlY2soRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLCBDUFVT dGF0ZSAqY3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IENQVUJyZWFrcG9pbnQgKmJwKQoreworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVy X29mKGRjYmFzZSwgRGlzYXNDb250ZXh0LCBiYXNlKTsKKworICAgIHRjZ19nZW5fbW92aV90bCho ZXhfZ3ByW0hFWF9SRUdfUENdLCBjdHgtPmJhc2UucGNfbmV4dCk7CisgICAgY3R4LT5iYXNlLmlz X2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIGdlbl9leGNlcHRpb25fZGVidWcoKTsKKyAgICAv KgorICAgICAqIFRoZSBhZGRyZXNzIGNvdmVyZWQgYnkgdGhlIGJyZWFrcG9pbnQgbXVzdCBiZSBp bmNsdWRlZCBpbgorICAgICAqIFt0Yi0+cGMsIHRiLT5wYyArIHRiLT5zaXplKSBpbiBvcmRlciB0 byBmb3IgaXQgdG8gYmUKKyAgICAgKiBwcm9wZXJseSBjbGVhcmVkIC0tIHRodXMgd2UgaW5jcmVt ZW50IHRoZSBQQyBoZXJlIHNvIHRoYXQKKyAgICAgKiB0aGUgbG9naWMgc2V0dGluZyB0Yi0+c2l6 ZSBiZWxvdyBkb2VzIHRoZSByaWdodCB0aGluZy4KKyAgICAgKi8KKyAgICBjdHgtPmJhc2UucGNf bmV4dCArPSA0OworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwa3RfY3Jvc3Nl c19wYWdlKENQVUhleGFnb25TdGF0ZSAqZW52LCBEaXNhc0NvbnRleHQgKmN0eCkKK3sKKyAgICB0 YXJnZXRfdWxvbmcgcGFnZV9zdGFydCA9IGN0eC0+YmFzZS5wY19maXJzdCAmIFRBUkdFVF9QQUdF X01BU0s7CisgICAgYm9vbCBmb3VuZF9lbmQgPSBmYWxzZTsKKyAgICBpbnQgbndvcmRzOworCisg ICAgZm9yIChud29yZHMgPSAwOyAhZm91bmRfZW5kICYmIG53b3JkcyA8IFBBQ0tFVF9XT1JEU19N QVg7IG53b3JkcysrKSB7CisgICAgICAgIHVpbnQzMl90IHdvcmQgPSBjcHVfbGRsX2NvZGUoZW52 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YmFzZS5wY19uZXh0ICsgbndvcmRz ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZvdW5kX2VuZCA9IGlzX3BhY2tldF9lbmQo d29yZCk7CisgICAgfQorICAgIHVpbnQzMl90IG5leHRfcHRyID0gIGN0eC0+YmFzZS5wY19uZXh0 ICsgbndvcmRzICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICByZXR1cm4gZm91bmRfZW5kICYmIG5l eHRfcHRyIC0gcGFnZV9zdGFydCA+PSBUQVJHRVRfUEFHRV9TSVpFOworfQorCitzdGF0aWMgdm9p ZCBoZXhhZ29uX3RyX3RyYW5zbGF0ZV9wYWNrZXQoRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLCBD UFVTdGF0ZSAqY3B1KQoreworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRj YmFzZSwgRGlzYXNDb250ZXh0LCBiYXNlKTsKKyAgICBDUFVIZXhhZ29uU3RhdGUgKmVudiA9IGNw dS0+ZW52X3B0cjsKKworICAgIGRlY29kZV9hbmRfdHJhbnNsYXRlX3BhY2tldChlbnYsIGN0eCk7 CisKKyAgICBpZiAoY3R4LT5iYXNlLmlzX2ptcCA9PSBESVNBU19ORVhUKSB7CisgICAgICAgIHRh cmdldF91bG9uZyBwYWdlX3N0YXJ0ID0gY3R4LT5iYXNlLnBjX2ZpcnN0ICYgVEFSR0VUX1BBR0Vf TUFTSzsKKyAgICAgICAgdGFyZ2V0X3Vsb25nIGJ5dGVzX21heCA9IFBBQ0tFVF9XT1JEU19NQVgg KiBzaXplb2YodGFyZ2V0X3Vsb25nKTsKKworICAgICAgICBpZiAoY3R4LT5iYXNlLnBjX25leHQg LSBwYWdlX3N0YXJ0ID49IFRBUkdFVF9QQUdFX1NJWkUgfHwKKyAgICAgICAgICAgIChjdHgtPmJh c2UucGNfbmV4dCAtIHBhZ2Vfc3RhcnQgPj0gVEFSR0VUX1BBR0VfU0laRSAtIGJ5dGVzX21heCAm JgorICAgICAgICAgICAgIHBrdF9jcm9zc2VzX3BhZ2UoZW52LCBjdHgpKSkgeworICAgICAgICAg ICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX1RPT19NQU5ZOworICAgICAgICB9CisKKyAgICAg ICAgLyoKKyAgICAgICAgICogVGhlIENQVSBsb2cgaXMgdXNlZCB0byBjb21wYXJlIGFnYWluc3Qg TExEQiBzaW5nbGUgc3RlcHBpbmcsCisgICAgICAgICAqIHNvIGVuZCB0aGUgVExCIGFmdGVyIGV2 ZXJ5IHBhY2tldC4KKyAgICAgICAgICovCisgICAgICAgIEhleGFnb25DUFUgKmhleF9jcHUgPSBj b250YWluZXJfb2YoZW52LCBIZXhhZ29uQ1BVLCBlbnYpOworICAgICAgICBpZiAoaGV4X2NwdS0+ bGxkYl9jb21wYXQgJiYgcWVtdV9sb2dsZXZlbF9tYXNrKENQVV9MT0dfVEJfQ1BVKSkgeworICAg ICAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX1RPT19NQU5ZOworICAgICAgICB9Cisj aWYgSEVYX0RFQlVHCisgICAgICAgIC8qIFdoZW4gZGVidWdnaW5nLCBvbmx5IHB1dCBvbmUgcGFj a2V0IHBlciBUQiAqLworICAgICAgICBjdHgtPmJhc2UuaXNfam1wID0gRElTQVNfVE9PX01BTlk7 CisjZW5kaWYKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfdGJfc3RvcChEaXNh c0NvbnRleHRCYXNlICpkY2Jhc2UsIENQVVN0YXRlICpjcHUpCit7CisgICAgRGlzYXNDb250ZXh0 ICpjdHggPSBjb250YWluZXJfb2YoZGNiYXNlLCBEaXNhc0NvbnRleHQsIGJhc2UpOworCisgICAg c3dpdGNoIChjdHgtPmJhc2UuaXNfam1wKSB7CisgICAgY2FzZSBESVNBU19UT09fTUFOWToKKyAg ICAgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9ncHJbSEVYX1JFR19QQ10sIGN0eC0+YmFzZS5wY19u ZXh0KTsKKyAgICAgICAgaWYgKGN0eC0+YmFzZS5zaW5nbGVzdGVwX2VuYWJsZWQpIHsKKyAgICAg ICAgICAgIGdlbl9leGNlcHRpb25fZGVidWcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHRjZ19nZW5fZXhpdF90YihOVUxMLCAwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK KyAgICBjYXNlIERJU0FTX05PUkVUVVJOOgorICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfZ3By W0hFWF9SRUdfUENdLCBoZXhfbmV4dF9QQyk7CisgICAgICAgIGlmIChjdHgtPmJhc2Uuc2luZ2xl c3RlcF9lbmFibGVkKSB7CisgICAgICAgICAgICBnZW5fZXhjZXB0aW9uX2RlYnVnKCk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0Y2dfZ2VuX2V4aXRfdGIoTlVMTCwgMCk7CisgICAg ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90 X3JlYWNoZWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfZGlzYXNfbG9n KGNvbnN0IERpc2FzQ29udGV4dEJhc2UgKmRjYmFzZSwgQ1BVU3RhdGUgKmNwdSkKK3sKKyAgICBx ZW11X2xvZygiSU46ICVzXG4iLCBsb29rdXBfc3ltYm9sKGRjYmFzZS0+cGNfZmlyc3QpKTsKKyAg ICBsb2dfdGFyZ2V0X2Rpc2FzKGNwdSwgZGNiYXNlLT5wY19maXJzdCwgZGNiYXNlLT50Yi0+c2l6 ZSk7Cit9CisKKworc3RhdGljIGNvbnN0IFRyYW5zbGF0b3JPcHMgaGV4YWdvbl90cl9vcHMgPSB7 CisgICAgLmluaXRfZGlzYXNfY29udGV4dCA9IGhleGFnb25fdHJfaW5pdF9kaXNhc19jb250ZXh0 LAorICAgIC50Yl9zdGFydCAgICAgICAgICAgPSBoZXhhZ29uX3RyX3RiX3N0YXJ0LAorICAgIC5p bnNuX3N0YXJ0ICAgICAgICAgPSBoZXhhZ29uX3RyX2luc25fc3RhcnQsCisgICAgLmJyZWFrcG9p bnRfY2hlY2sgICA9IGhleGFnb25fdHJfYnJlYWtwb2ludF9jaGVjaywKKyAgICAudHJhbnNsYXRl X2luc24gICAgID0gaGV4YWdvbl90cl90cmFuc2xhdGVfcGFja2V0LAorICAgIC50Yl9zdG9wICAg ICAgICAgICAgPSBoZXhhZ29uX3RyX3RiX3N0b3AsCisgICAgLmRpc2FzX2xvZyAgICAgICAgICA9 IGhleGFnb25fdHJfZGlzYXNfbG9nLAorfTsKKwordm9pZCBnZW5faW50ZXJtZWRpYXRlX2NvZGUo Q1BVU3RhdGUgKmNzLCBUcmFuc2xhdGlvbkJsb2NrICp0YiwgaW50IG1heF9pbnNucykKK3sKKyAg ICBEaXNhc0NvbnRleHQgY3R4OworCisgICAgdHJhbnNsYXRvcl9sb29wKCZoZXhhZ29uX3RyX29w cywgJmN0eC5iYXNlLCBjcywgdGIsIG1heF9pbnNucyk7Cit9CisKKyNkZWZpbmUgTkFNRV9MRU4g ICAgICAgICAgICAgICA2NAorc3RhdGljIGNoYXIgbmV3X3ZhbHVlX25hbWVzW1RPVEFMX1BFUl9U SFJFQURfUkVHU11bTkFNRV9MRU5dOworI2lmIEhFWF9ERUJVRworc3RhdGljIGNoYXIgcmVnX3dy aXR0ZW5fbmFtZXNbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXVtOQU1FX0xFTl07CisjZW5kaWYKK3N0 YXRpYyBjaGFyIG5ld19wcmVkX3ZhbHVlX25hbWVzW05VTV9QUkVHU11bTkFNRV9MRU5dOworc3Rh dGljIGNoYXIgc3RvcmVfYWRkcl9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CitzdGF0aWMg Y2hhciBzdG9yZV93aWR0aF9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CitzdGF0aWMgY2hh ciBzdG9yZV92YWwzMl9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CitzdGF0aWMgY2hhciBz dG9yZV92YWw2NF9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CisKK3ZvaWQgaGV4YWdvbl90 cmFuc2xhdGVfaW5pdCh2b2lkKQoreworICAgIGludCBpOworCisgICAgb3Bjb2RlX2luaXQoKTsK KworI2lmIEhFWF9ERUJVRworICAgIGlmICghcWVtdV9sb2dmaWxlKSB7CisgICAgICAgIHFlbXVf c2V0X2xvZyhxZW11X2xvZ2xldmVsKTsKKyAgICB9CisjZW5kaWYKKworICAgIGZvciAoaSA9IDA7 IGkgPCBUT1RBTF9QRVJfVEhSRUFEX1JFR1M7IGkrKykgeworICAgICAgICBoZXhfZ3ByW2ldID0g dGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhh Z29uU3RhdGUsIGdwcltpXSksCisgICAgICAgICAgICBoZXhhZ29uX3JlZ25hbWVzW2ldKTsKKwor ICAgICAgICBzbnByaW50ZihuZXdfdmFsdWVfbmFtZXNbaV0sIE5BTUVfTEVOLCAibmV3XyVzIiwg aGV4YWdvbl9yZWduYW1lc1tpXSk7CisgICAgICAgIGhleF9uZXdfdmFsdWVbaV0gPSB0Y2dfZ2xv YmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0 ZSwgbmV3X3ZhbHVlW2ldKSwKKyAgICAgICAgICAgIG5ld192YWx1ZV9uYW1lc1tpXSk7CisKKyNp ZiBIRVhfREVCVUcKKyAgICAgICAgc25wcmludGYocmVnX3dyaXR0ZW5fbmFtZXNbaV0sIE5BTUVf TEVOLCAicmVnX3dyaXR0ZW5fJXMiLAorICAgICAgICAgICAgICAgICBoZXhhZ29uX3JlZ25hbWVz W2ldKTsKKyAgICAgICAgaGV4X3JlZ193cml0dGVuW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNw dV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIHJlZ193cml0dGVu W2ldKSwKKyAgICAgICAgICAgIHJlZ193cml0dGVuX25hbWVzW2ldKTsKKyNlbmRpZgorICAgIH0K KyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRUdTOyBpKyspIHsKKyAgICAgICAgaGV4X3ByZWRb aV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgICAgIG9mZnNldG9mKENQ VUhleGFnb25TdGF0ZSwgcHJlZFtpXSksCisgICAgICAgICAgICBoZXhhZ29uX3ByZWRuYW1lc1tp XSk7CisKKyAgICAgICAgc25wcmludGYobmV3X3ByZWRfdmFsdWVfbmFtZXNbaV0sIE5BTUVfTEVO LCAibmV3X3ByZWRfJXMiLAorICAgICAgICAgICAgICAgICBoZXhhZ29uX3ByZWRuYW1lc1tpXSk7 CisgICAgICAgIGhleF9uZXdfcHJlZF92YWx1ZVtpXSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVf ZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBuZXdfcHJlZF92YWx1 ZVtpXSksCisgICAgICAgICAgICBuZXdfcHJlZF92YWx1ZV9uYW1lc1tpXSk7CisgICAgfQorICAg IGhleF9wcmVkX3dyaXR0ZW4gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAg b2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBwcmVkX3dyaXR0ZW4pLCAicHJlZF93cml0dGVuIik7 CisgICAgaGV4X25leHRfUEMgPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAg b2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBuZXh0X1BDKSwgIm5leHRfUEMiKTsKKyAgICBoZXhf dGhpc19QQyA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihD UFVIZXhhZ29uU3RhdGUsIHRoaXNfUEMpLCAidGhpc19QQyIpOworICAgIGhleF9zbG90X2NhbmNl bGxlZCA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVI ZXhhZ29uU3RhdGUsIHNsb3RfY2FuY2VsbGVkKSwgInNsb3RfY2FuY2VsbGVkIik7CisgICAgaGV4 X2JyYW5jaF90YWtlbiA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZz ZXRvZihDUFVIZXhhZ29uU3RhdGUsIGJyYW5jaF90YWtlbiksICJicmFuY2hfdGFrZW4iKTsKKyAg ICBoZXhfcGt0X2hhc19zdG9yZV9zMSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAg ICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIHBrdF9oYXNfc3RvcmVfczEpLCAicGt0X2hh c19zdG9yZV9zMSIpOworICAgIGhleF9kY3plcm9fYWRkciA9IHRjZ19nbG9iYWxfbWVtX25ldyhj cHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIGRjemVyb19hZGRyKSwg ImRjemVyb19hZGRyIik7CisgICAgaGV4X2xsc2NfYWRkciA9IHRjZ19nbG9iYWxfbWVtX25ldyhj cHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIGxsc2NfYWRkciksICJs bHNjX2FkZHIiKTsKKyAgICBoZXhfbGxzY192YWwgPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2Vu diwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBsbHNjX3ZhbCksICJsbHNjX3Zh bCIpOworICAgIGhleF9sbHNjX3ZhbF9pNjQgPSB0Y2dfZ2xvYmFsX21lbV9uZXdfaTY0KGNwdV9l bnYsCisgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbGxzY192YWxfaTY0KSwgImxs c2NfdmFsX2k2NCIpOworICAgIGZvciAoaSA9IDA7IGkgPCBTVE9SRVNfTUFYOyBpKyspIHsKKyAg ICAgICAgc25wcmludGYoc3RvcmVfYWRkcl9uYW1lc1tpXSwgTkFNRV9MRU4sICJzdG9yZV9hZGRy XyVkIiwgaSk7CisgICAgICAgIGhleF9zdG9yZV9hZGRyW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3 KGNwdV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1lbV9sb2df c3RvcmVzW2ldLnZhKSwKKyAgICAgICAgICAgIHN0b3JlX2FkZHJfbmFtZXNbaV0pOworCisgICAg ICAgIHNucHJpbnRmKHN0b3JlX3dpZHRoX25hbWVzW2ldLCBOQU1FX0xFTiwgInN0b3JlX3dpZHRo XyVkIiwgaSk7CisgICAgICAgIGhleF9zdG9yZV93aWR0aFtpXSA9IHRjZ19nbG9iYWxfbWVtX25l dyhjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBtZW1fbG9n X3N0b3Jlc1tpXS53aWR0aCksCisgICAgICAgICAgICBzdG9yZV93aWR0aF9uYW1lc1tpXSk7CisK KyAgICAgICAgc25wcmludGYoc3RvcmVfdmFsMzJfbmFtZXNbaV0sIE5BTUVfTEVOLCAic3RvcmVf dmFsMzJfJWQiLCBpKTsKKyAgICAgICAgaGV4X3N0b3JlX3ZhbDMyW2ldID0gdGNnX2dsb2JhbF9t ZW1fbmV3KGNwdV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1l bV9sb2dfc3RvcmVzW2ldLmRhdGEzMiksCisgICAgICAgICAgICBzdG9yZV92YWwzMl9uYW1lc1tp XSk7CisKKyAgICAgICAgc25wcmludGYoc3RvcmVfdmFsNjRfbmFtZXNbaV0sIE5BTUVfTEVOLCAi c3RvcmVfdmFsNjRfJWQiLCBpKTsKKyAgICAgICAgaGV4X3N0b3JlX3ZhbDY0W2ldID0gdGNnX2ds b2JhbF9tZW1fbmV3X2k2NChjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdv blN0YXRlLCBtZW1fbG9nX3N0b3Jlc1tpXS5kYXRhNjQpLAorICAgICAgICAgICAgc3RvcmVfdmFs NjRfbmFtZXNbaV0pOworICAgIH0KK30KLS0gCjIuNy40Cgo=