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=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A627C2D0A3 for ; Fri, 30 Oct 2020 00:42:32 +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 8263320691 for ; Fri, 30 Oct 2020 00:42:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="Bvf6rj+X" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8263320691 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]:53018 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kYIUw-0002tf-FM for qemu-devel@archiver.kernel.org; Thu, 29 Oct 2020 20:42:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38992) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kYHyb-00040B-Db for qemu-devel@nongnu.org; Thu, 29 Oct 2020 20:09:08 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:38752) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kYHyR-0005Qs-9N for qemu-devel@nongnu.org; Thu, 29 Oct 2020 20:09:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1604016535; x=1635552535; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=R3q9GIbeVnVM9QC3wyACZHw3p76H9oXLdeGRHiAPy5c=; b=Bvf6rj+X+0gW27QyxxB/H9/pAuvwj5oueZnb2T+r7/482VOlG5+RVN6K +9qO3dSsJC5I10diVC1ABUXUjMkBt5wKK+drcahGROQknKdY8F69Rz5hx 3LCnHOW6W+s0u5ryLjjXqeZRTwl7ZrcB7baHOwOmTlvYFcltsWbVe/2m5 w=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-02.qualcomm.com with ESMTP; 29 Oct 2020 17:08:44 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg04-sd.qualcomm.com with ESMTP; 29 Oct 2020 17:08:44 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 9370E411F; Thu, 29 Oct 2020 19:08:43 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v5 07/33] Hexagon (target/hexagon) scalar core helpers Date: Thu, 29 Oct 2020 19:08:13 -0500 Message-Id: <1604016519-28065-8-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1604016519-28065-1-git-send-email-tsimpson@quicinc.com> References: <1604016519-28065-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.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/29 19:58:53 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] 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.249, 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, at.org@qualcomm.com, laurent@vivier.eu, tsimpson@quicinc.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGhlIG1ham9yaXR5IG9mIGhlbHBlcnMgYXJlIGdlbmVyYXRlZC4gIERlZmluZSB0aGUgaGVscGVy IGZ1bmN0aW9ucyBuZWVkZWQKdGhlbiBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgZmlsZQoKU2lnbmVk LW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdl dC9oZXhhZ29uL2hlbHBlci5oICAgIHwgIDg1ICsrKysKIHRhcmdldC9oZXhhZ29uL29wX2hlbHBl ci5jIHwgOTcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCAxMDU2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 YXJnZXQvaGV4YWdvbi9oZWxwZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29u L29wX2hlbHBlci5jCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vaGVscGVyLmggYi90YXJn ZXQvaGV4YWdvbi9oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45 MjQ2YjI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vaGVscGVyLmgKQEAgLTAs MCArMSw4NSBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92 YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCitERUZfSEVMUEVSX0ZMQUdTXzIocmFp c2VfZXhjZXB0aW9uLCBUQ0dfQ0FMTF9OT19SRVRVUk4sIG5vcmV0dXJuLCBlbnYsIGkzMikKK0RF Rl9IRUxQRVJfMShkZWJ1Z19zdGFydF9wYWNrZXQsIHZvaWQsIGVudikKK0RFRl9IRUxQRVJfRkxB R1NfMyhkZWJ1Z19jaGVja19zdG9yZV93aWR0aCwgVENHX0NBTExfTk9fV0csIHZvaWQsIGVudiwg aW50LCBpbnQpCitERUZfSEVMUEVSXzIoY29tbWl0X3N0b3JlLCB2b2lkLCBlbnYsIGludCkKK0RF Rl9IRUxQRVJfRkxBR1NfMyhkZWJ1Z19jb21taXRfZW5kLCBUQ0dfQ0FMTF9OT19XRywgdm9pZCwg ZW52LCBpbnQsIGludCkKK0RFRl9IRUxQRVJfNChmY2lyY2FkZCwgczMyLCBzMzIsIHMzMiwgczMy LCBzMzIpCisKKy8qIEZsb2F0aW5nIHBvaW50ICovCitERUZfSEVMUEVSXzIoY29udl9zZjJkZiwg ZjY0LCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X2RmMnNmLCBmMzIsIGVudiwgZjY0KQor REVGX0hFTFBFUl8yKGNvbnZfdXcyc2YsIGYzMiwgZW52LCBzMzIpCitERUZfSEVMUEVSXzIoY29u dl91dzJkZiwgZjY0LCBlbnYsIHMzMikKK0RFRl9IRUxQRVJfMihjb252X3cyc2YsIGYzMiwgZW52 LCBzMzIpCitERUZfSEVMUEVSXzIoY29udl93MmRmLCBmNjQsIGVudiwgczMyKQorREVGX0hFTFBF Ul8yKGNvbnZfdWQyc2YsIGYzMiwgZW52LCBzNjQpCitERUZfSEVMUEVSXzIoY29udl91ZDJkZiwg ZjY0LCBlbnYsIHM2NCkKK0RFRl9IRUxQRVJfMihjb252X2Qyc2YsIGYzMiwgZW52LCBzNjQpCitE RUZfSEVMUEVSXzIoY29udl9kMmRmLCBmNjQsIGVudiwgczY0KQorREVGX0hFTFBFUl8yKGNvbnZf c2YydXcsIHMzMiwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9zZjJ3LCBzMzIsIGVudiwg ZjMyKQorREVGX0hFTFBFUl8yKGNvbnZfc2YydWQsIHM2NCwgZW52LCBmMzIpCitERUZfSEVMUEVS XzIoY29udl9zZjJkLCBzNjQsIGVudiwgZjMyKQorREVGX0hFTFBFUl8yKGNvbnZfZGYydXcsIHMz MiwgZW52LCBmNjQpCitERUZfSEVMUEVSXzIoY29udl9kZjJ3LCBzMzIsIGVudiwgZjY0KQorREVG X0hFTFBFUl8yKGNvbnZfZGYydWQsIHM2NCwgZW52LCBmNjQpCitERUZfSEVMUEVSXzIoY29udl9k ZjJkLCBzNjQsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfc2YydXdfY2hvcCwgczMyLCBl bnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X3NmMndfY2hvcCwgczMyLCBlbnYsIGYzMikKK0RF Rl9IRUxQRVJfMihjb252X3NmMnVkX2Nob3AsIHM2NCwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIo Y29udl9zZjJkX2Nob3AsIHM2NCwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9kZjJ1d19j aG9wLCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYyd19jaG9wLCBzMzIsIGVu diwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYydWRfY2hvcCwgczY0LCBlbnYsIGY2NCkKK0RF Rl9IRUxQRVJfMihjb252X2RmMmRfY2hvcCwgczY0LCBlbnYsIGY2NCkKK0RFRl9IRUxQRVJfMyhz ZmFkZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmc3ViLCBmMzIsIGVudiwg ZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZjbXBlcSwgczMyLCBlbnYsIGYzMiwgZjMyKQorREVG X0hFTFBFUl8zKHNmY21wZ3QsIHMzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmNt cGdlLCBzMzIsIGVudiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZjbXB1bywgczMyLCBlbnYs IGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmbWF4LCBmMzIsIGVudiwgZjMyLCBmMzIpCitERUZf SEVMUEVSXzMoc2ZtaW4sIGYzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmNsYXNz LCBzMzIsIGVudiwgZjMyLCBzMzIpCitERUZfSEVMUEVSXzMoc2ZmaXh1cG4sIGYzMiwgZW52LCBm MzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmZpeHVwZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQorREVG X0hFTFBFUl8yKHNmZml4dXByLCBmMzIsIGVudiwgZjMyKQorCitERUZfSEVMUEVSXzMoZGZhZGQs IGY2NCwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQRVJfMyhkZnN1YiwgZjY0LCBlbnYsIGY2NCwg ZjY0KQorREVGX0hFTFBFUl8zKGRmbWF4LCBmNjQsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVS XzMoZGZtaW4sIGY2NCwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQRVJfMyhkZmNtcGVxLCBzMzIs IGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMoZGZjbXBndCwgczMyLCBlbnYsIGY2NCwgZjY0 KQorREVGX0hFTFBFUl8zKGRmY21wZ2UsIHMzMiwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQRVJf MyhkZmNtcHVvLCBzMzIsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMoZGZjbGFzcywgczMy LCBlbnYsIGY2NCwgczMyKQorCitERUZfSEVMUEVSXzMoc2ZtcHksIGYzMiwgZW52LCBmMzIsIGYz MikKK0RFRl9IRUxQRVJfNChzZmZtYSwgZjMyLCBlbnYsIGYzMiwgZjMyLCBmMzIpCitERUZfSEVM UEVSXzUoc2ZmbWFfc2MsIGYzMiwgZW52LCBmMzIsIGYzMiwgZjMyLCBmMzIpCitERUZfSEVMUEVS XzQoc2ZmbXMsIGYzMiwgZW52LCBmMzIsIGYzMiwgZjMyKQorREVGX0hFTFBFUl80KHNmZm1hX2xp YiwgZjMyLCBlbnYsIGYzMiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzQoc2ZmbXNfbGliLCBmMzIs IGVudiwgZjMyLCBmMzIsIGYzMikKKworREVGX0hFTFBFUl8zKGRmbXB5Zml4LCBmNjQsIGVudiwg ZjY0LCBmNjQpCitERUZfSEVMUEVSXzQoZGZtcHloaCwgZjY0LCBlbnYsIGY2NCwgZjY0LCBmNjQp CisKKyNpbmNsdWRlICJoZWxwZXJfcHJvdG9zX2dlbmVyYXRlZC5oIgpkaWZmIC0tZ2l0IGEvdGFy Z2V0L2hleGFnb24vb3BfaGVscGVyLmMgYi90YXJnZXQvaGV4YWdvbi9vcF9oZWxwZXIuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjJhMThkCi0tLSAvZGV2L251bGwKKysr IGIvdGFyZ2V0L2hleGFnb24vb3BfaGVscGVyLmMKQEAgLTAsMCArMSw5NzEgQEAKKy8qCisgKiAg Q29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBB bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11Lmgi CisjaW5jbHVkZSAiZXhlYy9oZWxwZXItcHJvdG8uaCIKKyNpbmNsdWRlICJmcHUvc29mdGZsb2F0 LmgiCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJt YWNyb3MuaCIKKyNpbmNsdWRlICJhcmNoLmgiCisjaW5jbHVkZSAiaGV4X2FyY2hfdHlwZXMuaCIK KyNpbmNsdWRlICJmbWFfZW11LmgiCisjaW5jbHVkZSAiY29udl9lbXUuaCIKKworI2RlZmluZSBT Rl9CSUFTICAgICAgICAxMjcKKyNkZWZpbmUgU0ZfTUFOVEJJVFMgICAgMjMKKworLyogRXhjZXB0 aW9ucyBwcm9jZXNzaW5nIGhlbHBlcnMgKi8KK3N0YXRpYyB2b2lkIFFFTVVfTk9SRVRVUk4gZG9f cmFpc2VfZXhjZXB0aW9uX2VycihDUFVIZXhhZ29uU3RhdGUgKmVudiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBleGNlcHRpb24sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90 IHBjKQoreworICAgIENQVVN0YXRlICpjcyA9IENQVShoZXhhZ29uX2Vudl9nZXRfY3B1KGVudikp OworICAgIHFlbXVfbG9nX21hc2soQ1BVX0xPR19JTlQsICIlczogJWRcbiIsIF9fZnVuY19fLCBl eGNlcHRpb24pOworICAgIGNzLT5leGNlcHRpb25faW5kZXggPSBleGNlcHRpb247CisgICAgY3B1 X2xvb3BfZXhpdF9yZXN0b3JlKGNzLCBwYyk7Cit9CisKK3ZvaWQgUUVNVV9OT1JFVFVSTiBIRUxQ RVIocmFpc2VfZXhjZXB0aW9uKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3QgZXhjcCkK K3sKKyAgICBkb19yYWlzZV9leGNlcHRpb25fZXJyKGVudiwgZXhjcCwgMCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBsb2dfcmVnX3dyaXRlKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQgcm51 bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWwsIHVp bnQzMl90IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygibG9nX3JlZ193cml0ZVslZF0gPSAi IFRBUkdFVF9GTVRfbGQgIiAoMHgiIFRBUkdFVF9GTVRfbHggIikiLAorICAgICAgICAgICAgICAg ICAgcm51bSwgdmFsLCB2YWwpOworICAgIGlmIChlbnYtPnNsb3RfY2FuY2VsbGVkICYgKDEgPDwg c2xvdCkpIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiIENBTkNFTExFRCIpOworICAgIH0KKyAg ICBpZiAodmFsID09IGVudi0+Z3ByW3JudW1dKSB7CisgICAgICAgIEhFWF9ERUJVR19MT0coIiBO TyBDSEFOR0UiKTsKKyAgICB9CisgICAgSEVYX0RFQlVHX0xPRygiXG4iKTsKKyAgICBpZiAoIShl bnYtPnNsb3RfY2FuY2VsbGVkICYgKDEgPDwgc2xvdCkpKSB7CisgICAgICAgIGVudi0+bmV3X3Zh bHVlW3JudW1dID0gdmFsOworI2lmIEhFWF9ERUJVRworICAgICAgICAvKiBEbyB0aGlzIHNvIEhF TFBFUihkZWJ1Z19jb21taXRfZW5kKSB3aWxsIGtub3cgKi8KKyAgICAgICAgZW52LT5yZWdfd3Jp dHRlbltybnVtXSA9IDE7CisjZW5kaWYKKyAgICB9Cit9CisKK3N0YXRpYyBfX2F0dHJpYnV0ZV9f KCh1bnVzZWQpKQoraW5saW5lIHZvaWQgbG9nX3JlZ193cml0ZV9wYWlyKENQVUhleGFnb25TdGF0 ZSAqZW52LCBpbnQgcm51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50NjRfdCB2YWwsIHVpbnQzMl90IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygibG9nX3Jl Z193cml0ZV9wYWlyWyVkOiVkXSA9ICVsZFxuIiwgcm51bSArIDEsIHJudW0sIHZhbCk7CisgICAg bG9nX3JlZ193cml0ZShlbnYsIHJudW0sIHZhbCAmIDB4RkZGRkZGRkYsIHNsb3QpOworICAgIGxv Z19yZWdfd3JpdGUoZW52LCBybnVtICsgMSwgKHZhbCA+PiAzMikgJiAweEZGRkZGRkZGLCBzbG90 KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ19wcmVkX3dyaXRlKENQVUhleGFnb25TdGF0 ZSAqZW52LCBpbnQgcG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn ZXRfdWxvbmcgdmFsKQoreworICAgIEhFWF9ERUJVR19MT0coImxvZ19wcmVkX3dyaXRlWyVkXSA9 ICIgVEFSR0VUX0ZNVF9sZAorICAgICAgICAgICAgICAgICAgIiAoMHgiIFRBUkdFVF9GTVRfbHgg IilcbiIsCisgICAgICAgICAgICAgICAgICBwbnVtLCB2YWwsIHZhbCk7CisKKyAgICAvKiBNdWx0 aXBsZSB3cml0ZXMgdG8gdGhlIHNhbWUgcHJlZyBhcmUgYW5kJ2VkIHRvZ2V0aGVyICovCisgICAg aWYgKGVudi0+cHJlZF93cml0dGVuICYgKDEgPDwgcG51bSkpIHsKKyAgICAgICAgZW52LT5uZXdf cHJlZF92YWx1ZVtwbnVtXSAmPSB2YWwgJiAweGZmOworICAgIH0gZWxzZSB7CisgICAgICAgIGVu di0+bmV3X3ByZWRfdmFsdWVbcG51bV0gPSB2YWwgJiAweGZmOworICAgICAgICBlbnYtPnByZWRf d3JpdHRlbiB8PSAxIDw8IHBudW07CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9n X3N0b3JlMzIoQ1BVSGV4YWdvblN0YXRlICplbnYsIHRhcmdldF91bG9uZyBhZGRyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWwsIGludCB3aWR0aCwgaW50 IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygibG9nX3N0b3JlJWQoMHgiIFRBUkdFVF9GTVRf bHggIiwgIiBUQVJHRVRfRk1UX2xkCisgICAgICAgICAgICAgICAgICAiIFsweCIgVEFSR0VUX0ZN VF9seCAiXSlcbiIsCisgICAgICAgICAgICAgICAgICB3aWR0aCwgYWRkciwgdmFsLCB2YWwpOwor ICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0udmEgPSBhZGRyOworICAgIGVudi0+bWVtX2xv Z19zdG9yZXNbc2xvdF0ud2lkdGggPSB3aWR0aDsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Ns b3RdLmRhdGEzMiA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ19zdG9yZTY0KENQ VUhleGFnb25TdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQ2NF90IHZhbCwgaW50IHdpZHRoLCBpbnQgc2xvdCkKK3sKKyAgICBI RVhfREVCVUdfTE9HKCJsb2dfc3RvcmUlZCgweCIgVEFSR0VUX0ZNVF9seCAiLCAlbGQgWzB4JWx4 XSlcbiIsCisgICAgICAgICAgICAgICAgICAgd2lkdGgsIGFkZHIsIHZhbCwgdmFsKTsKKyAgICBl bnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLnZhID0gYWRkcjsKKyAgICBlbnYtPm1lbV9sb2dfc3Rv cmVzW3Nsb3RdLndpZHRoID0gd2lkdGg7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5k YXRhNjQgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9uZXdfcGMoQ1BVSGV4 YWdvblN0YXRlICplbnYsIHRhcmdldF91bG9uZyBhZGRyKQoreworICAgIEhFWF9ERUJVR19MT0co IndyaXRlX25ld19wYygweCIgVEFSR0VUX0ZNVF9seCAiKVxuIiwgYWRkcik7CisKKyAgICAvKgor ICAgICAqIElmIG1vcmUgdGhhbiBvbmUgYnJhbmNoIGlzIHRha2VuIGluIGEgcGFja2V0LCBvbmx5 IHRoZSBmaXJzdCBvbmUKKyAgICAgKiBpcyBhY3R1YWxseSBkb25lLgorICAgICAqLworICAgIGlm IChlbnYtPmJyYW5jaF90YWtlbikgeworICAgICAgICBIRVhfREVCVUdfTE9HKCJJTkZPOiBtdWx0 aXBsZSBicmFuY2hlcyB0YWtlbiBpbiBzYW1lIHBhY2tldCwgIgorICAgICAgICAgICAgICAgICAg ICAgICJpZ25vcmluZyB0aGUgc2Vjb25kIG9uZVxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg ZkNIRUNLX1BDQUxJR04oYWRkcik7CisgICAgICAgIGVudi0+YnJhbmNoX3Rha2VuID0gMTsKKyAg ICAgICAgZW52LT5uZXh0X1BDID0gYWRkcjsKKyAgICB9Cit9CisKKy8qIEhhbmR5IHBsYWNlIHRv IHNldCBhIGJyZWFrcG9pbnQgKi8KK3ZvaWQgSEVMUEVSKGRlYnVnX3N0YXJ0X3BhY2tldCkoQ1BV SGV4YWdvblN0YXRlICplbnYpCit7CisgICAgSEVYX0RFQlVHX0xPRygiU3RhcnQgcGFja2V0OiBw YyA9IDB4IiBUQVJHRVRfRk1UX2x4ICJcbiIsCisgICAgICAgICAgICAgICAgICBlbnYtPmdwcltI RVhfUkVHX1BDXSk7CisKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgVE9UQUxfUEVS X1RIUkVBRF9SRUdTOyBpKyspIHsKKyAgICAgICAgZW52LT5yZWdfd3JpdHRlbltpXSA9IDA7Cisg ICAgfQorfQorCitzdGF0aWMgaW5saW5lIGludDMyX3QgbmV3X3ByZWRfdmFsdWUoQ1BVSGV4YWdv blN0YXRlICplbnYsIGludCBwbnVtKQoreworICAgIHJldHVybiBlbnYtPm5ld19wcmVkX3ZhbHVl W3BudW1dOworfQorCisvKiBDaGVja3MgZm9yIGJvb2trZWVwaW5nIGVycm9ycyBiZXR3ZWVuIGRp c2Fzc2VtYmx5IGNvbnRleHQgYW5kIHJ1bnRpbWUgKi8KK3ZvaWQgSEVMUEVSKGRlYnVnX2NoZWNr X3N0b3JlX3dpZHRoKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHNsb3QsIGludCBjaGVjaykK K3sKKyAgICBpZiAoZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53aWR0aCAhPSBjaGVjaykgewor ICAgICAgICBIRVhfREVCVUdfTE9HKCJFUlJPUjogJWQgIT0gJWRcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53aWR0aCwgY2hlY2spOworICAgICAg ICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKwordm9pZCBIRUxQRVIoY29tbWl0 X3N0b3JlKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHNsb3RfbnVtKQoreworICAgIHN3aXRj aCAoZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0ud2lkdGgpIHsKKyAgICBjYXNlIDE6Cisg ICAgICAgIHB1dF91c2VyX3U4KGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1dLmRhdGEzMiwK KyAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0udmEpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIHB1dF91c2VyX3UxNihlbnYtPm1l bV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS5kYXRhMzIsCisgICAgICAgICAgICAgICAgICAgICBlbnYt Pm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS52YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug NDoKKyAgICAgICAgcHV0X3VzZXJfdTMyKGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1dLmRh dGEzMiwKKyAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1d LnZhKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OgorICAgICAgICBwdXRfdXNlcl91NjQo ZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0uZGF0YTY0LAorICAgICAgICAgICAgICAgICAg ICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0udmEpOworICAgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgcHJpbnRfc3RvcmUoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludCBzbG90KQor eworICAgIGlmICghKGVudi0+c2xvdF9jYW5jZWxsZWQgJiAoMSA8PCBzbG90KSkpIHsKKyAgICAg ICAgdWludDhfdCB3aWR0aCA9IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0ud2lkdGg7CisgICAg ICAgIGlmICh3aWR0aCA9PSAxKSB7CisgICAgICAgICAgICB1aW50MzJfdCBkYXRhID0gZW52LT5t ZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhMzIgJiAweGZmOworICAgICAgICAgICAgSEVYX0RFQlVH X0xPRygiXHRtZW1iWzB4IiBUQVJHRVRfRk1UX2x4ICJdID0gJWQgKDB4JTAyeClcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0udmEsIGRhdGEs IGRhdGEpOworICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID09IDIpIHsKKyAgICAgICAgICAgIHVp bnQzMl90IGRhdGEgPSBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLmRhdGEzMiAmIDB4ZmZmZjsK KyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlx0bWVtaFsweCIgVEFSR0VUX0ZNVF9seCAiXSA9 ICVkICgweCUwNHgpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2df c3RvcmVzW3Nsb3RdLnZhLCBkYXRhLCBkYXRhKTsKKyAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA9 PSA0KSB7CisgICAgICAgICAgICB1aW50MzJfdCBkYXRhID0gZW52LT5tZW1fbG9nX3N0b3Jlc1tz bG90XS5kYXRhMzI7CisgICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJcdG1lbXdbMHgiIFRBUkdF VF9GTVRfbHggIl0gPSAlZCAoMHglMDh4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52YSwgZGF0YSwgZGF0YSk7CisgICAgICAgIH0gZWxz ZSBpZiAod2lkdGggPT0gOCkgeworICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRtZW1kWzB4 IiBUQVJHRVRfRk1UX2x4ICJdID0gJWx1ICgweCUwMTZseClcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0udmEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTY0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLmRhdGE2NCk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJcdEJhZCBzdG9yZSB3aWR0aCAl ZFxuIiwgd2lkdGgpOworICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAg ICAgfQorICAgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBhIGhhbmR5IHBsYWNlIHRvIHNl dCBhIGJyZWFrcG9pbnQgKi8KK3ZvaWQgSEVMUEVSKGRlYnVnX2NvbW1pdF9lbmQpKENQVUhleGFn b25TdGF0ZSAqZW52LCBpbnQgaGFzX3N0MCwgaW50IGhhc19zdDEpCit7CisgICAgYm9vbCByZWdf cHJpbnRlZCA9IGZhbHNlOworICAgIGJvb2wgcHJlZF9wcmludGVkID0gZmFsc2U7CisgICAgaW50 IGk7CisKKyAgICBIRVhfREVCVUdfTE9HKCJQYWNrZXQgY29tbWl0dGVkOiBwYyA9IDB4IiBUQVJH RVRfRk1UX2x4ICJcbiIsCisgICAgICAgICAgICAgICAgICBlbnYtPnRoaXNfUEMpOworICAgIEhF WF9ERUJVR19MT0coInNsb3RfY2FuY2VsbGVkID0gJWRcbiIsIGVudi0+c2xvdF9jYW5jZWxsZWQp OworCisgICAgZm9yIChpID0gMDsgaSA8IFRPVEFMX1BFUl9USFJFQURfUkVHUzsgaSsrKSB7Cisg ICAgICAgIGlmIChlbnYtPnJlZ193cml0dGVuW2ldKSB7CisgICAgICAgICAgICBpZiAoIXJlZ19w cmludGVkKSB7CisgICAgICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiUmVncyB3cml0dGVuXG4i KTsKKyAgICAgICAgICAgICAgICByZWdfcHJpbnRlZCA9IHRydWU7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJcdHIlZCA9ICIgVEFSR0VUX0ZNVF9sZCAiICgweCIg VEFSR0VUX0ZNVF9seCAiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgZW52LT5u ZXdfdmFsdWVbaV0sIGVudi0+bmV3X3ZhbHVlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAg IGZvciAoaSA9IDA7IGkgPCBOVU1fUFJFR1M7IGkrKykgeworICAgICAgICBpZiAoZW52LT5wcmVk X3dyaXR0ZW4gJiAoMSA8PCBpKSkgeworICAgICAgICAgICAgaWYgKCFwcmVkX3ByaW50ZWQpIHsK KyAgICAgICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJQcmVkaWNhdGVzIHdyaXR0ZW5cbiIpOwor ICAgICAgICAgICAgICAgIHByZWRfcHJpbnRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBIRVhfREVCVUdfTE9HKCJcdHAlZCA9IDB4IiBUQVJHRVRfRk1UX2x4ICJcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGksIGVudi0+bmV3X3ByZWRfdmFsdWVbaV0pOworICAg ICAgICB9CisgICAgfQorCisgICAgaWYgKGhhc19zdDAgfHwgaGFzX3N0MSkgeworICAgICAgICBI RVhfREVCVUdfTE9HKCJTdG9yZXNcbiIpOworICAgICAgICBpZiAoaGFzX3N0MCkgeworICAgICAg ICAgICAgcHJpbnRfc3RvcmUoZW52LCAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzX3N0 MSkgeworICAgICAgICAgICAgcHJpbnRfc3RvcmUoZW52LCAxKTsKKyAgICAgICAgfQorICAgIH0K KworICAgIEhFWF9ERUJVR19MT0coIk5leHQgUEMgPSAweCV4XG4iLCBlbnYtPm5leHRfUEMpOwor ICAgIEhFWF9ERUJVR19MT0coIkV4ZWMgY291bnRlcnM6IHBrdCA9ICIgVEFSR0VUX0ZNVF9seAor ICAgICAgICAgICAgICAgICAgIiwgaW5zbiA9ICIgVEFSR0VUX0ZNVF9seAorICAgICAgICAgICAg ICAgICAgIlxuIiwKKyAgICAgICAgICAgICAgICAgIGVudi0+Z3ByW0hFWF9SRUdfUUVNVV9QS1Rf Q05UXSwKKyAgICAgICAgICAgICAgICAgIGVudi0+Z3ByW0hFWF9SRUdfUUVNVV9JTlNOX0NOVF0p OworCit9CisKK3N0YXRpYyBpbnQzMl90IGZjaXJjYWRkX3Y0KGludDMyX3QgUnhWLCBpbnQzMl90 IG9mZnNldCwgaW50MzJfdCBNLCBpbnQzMl90IENTKQoreworICAgIGludDMyX3QgbGVuZ3RoID0g TSAmIDB4MDAwMWZmZmY7CisgICAgdWludDMyX3QgbmV3X3B0ciA9IFJ4ViArIG9mZnNldDsKKyAg ICB1aW50MzJfdCBzdGFydF9hZGRyID0gQ1M7CisgICAgdWludDMyX3QgZW5kX2FkZHIgPSBzdGFy dF9hZGRyICsgbGVuZ3RoOworCisgICAgaWYgKG5ld19wdHIgPj0gZW5kX2FkZHIpIHsKKyAgICAg ICAgbmV3X3B0ciAtPSBsZW5ndGg7CisgICAgfSBlbHNlIGlmIChuZXdfcHRyIDwgc3RhcnRfYWRk cikgeworICAgICAgICBuZXdfcHRyICs9IGxlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3 X3B0cjsKK30KKworaW50MzJfdCBIRUxQRVIoZmNpcmNhZGQpKGludDMyX3QgUnhWLCBpbnQzMl90 IG9mZnNldCwgaW50MzJfdCBNLCBpbnQzMl90IENTKQoreworICAgIGludDMyX3QgS19jb25zdCA9 IChNID4+IDI0KSAmIDB4ZjsKKyAgICBpbnQzMl90IGxlbmd0aCA9IE0gJiAweDFmZmZmOworICAg IGludDMyX3QgbWFzayA9ICgxIDw8IChLX2NvbnN0ICsgMikpIC0gMTsKKyAgICB1aW50MzJfdCBu ZXdfcHRyID0gUnhWICsgb2Zmc2V0OworICAgIHVpbnQzMl90IHN0YXJ0X2FkZHIgPSBSeFYgJiAo fm1hc2spOworICAgIHVpbnQzMl90IGVuZF9hZGRyID0gc3RhcnRfYWRkciB8IGxlbmd0aDsKKwor ICAgIGlmIChLX2NvbnN0ID09IDAgJiYgbGVuZ3RoID49IDQpIHsKKyAgICAgICAgcmV0dXJuIGZj aXJjYWRkX3Y0KFJ4Viwgb2Zmc2V0LCBNLCBDUyk7CisgICAgfQorCisgICAgaWYgKG5ld19wdHIg Pj0gZW5kX2FkZHIpIHsKKyAgICAgICAgbmV3X3B0ciAtPSBsZW5ndGg7CisgICAgfSBlbHNlIGlm IChuZXdfcHRyIDwgc3RhcnRfYWRkcikgeworICAgICAgICBuZXdfcHRyICs9IGxlbmd0aDsKKyAg ICB9CisKKyAgICByZXR1cm4gbmV3X3B0cjsKK30KKworLyoKKyAqIG1lbV9ub3NodWYKKyAqIFNl Y3Rpb24gNS41IG9mIHRoZSBIZXhhZ29uIFY2NyBQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlIE1hbnVh bAorICoKKyAqIElmIHRoZSBsb2FkIGlzIGluIHNsb3QgMCBhbmQgdGhlcmUgaXMgYSBzdG9yZSBp biBzbG90MSAodGhhdAorICogd2Fzbid0IGNhbmNlbGxlZCksIHdlIGhhdmUgdG8gZG8gdGhlIHN0 b3JlIGZpcnN0LgorICovCitzdGF0aWMgdm9pZCBjaGVja19ub3NodWYoQ1BVSGV4YWdvblN0YXRl ICplbnYsIHVpbnQzMl90IHNsb3QpCit7CisgICAgaWYgKHNsb3QgPT0gMCAmJiBlbnYtPnBrdF9o YXNfc3RvcmVfczEgJiYKKyAgICAgICAgKChlbnYtPnNsb3RfY2FuY2VsbGVkICYgKDEgPDwgMSkp ID09IDApKSB7CisgICAgICAgIEhFTFBFUihjb21taXRfc3RvcmUpKGVudiwgMSk7CisgICAgfQor fQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgbWVtX2xvYWQxKENQVUhleGFnb25TdGF0ZSAqZW52 LCB1aW50MzJfdCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRf dWxvbmcgdmFkZHIpCit7CisgICAgdWludDhfdCByZXR2YWw7CisgICAgY2hlY2tfbm9zaHVmKGVu diwgc2xvdCk7CisgICAgZ2V0X3VzZXJfdTgocmV0dmFsLCB2YWRkcik7CisgICAgcmV0dXJuIHJl dHZhbDsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCBtZW1fbG9hZDIoQ1BVSGV4YWdvblN0 YXRlICplbnYsIHVpbnQzMl90IHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0YXJnZXRfdWxvbmcgdmFkZHIpCit7CisgICAgdWludDE2X3QgcmV0dmFsOworICAgIGNoZWNr X25vc2h1ZihlbnYsIHNsb3QpOworICAgIGdldF91c2VyX3UxNihyZXR2YWwsIHZhZGRyKTsKKyAg ICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG1lbV9sb2FkNChD UFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWRkcikKK3sKKyAgICB1aW50MzJfdCByZXR2YWw7 CisgICAgY2hlY2tfbm9zaHVmKGVudiwgc2xvdCk7CisgICAgZ2V0X3VzZXJfdTMyKHJldHZhbCwg dmFkZHIpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3Qg bWVtX2xvYWQ4KENQVUhleGFnb25TdGF0ZSAqZW52LCB1aW50MzJfdCBzbG90LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25nIHZhZGRyKQoreworICAgIHVpbnQ2 NF90IHJldHZhbDsKKyAgICBjaGVja19ub3NodWYoZW52LCBzbG90KTsKKyAgICBnZXRfdXNlcl91 NjQocmV0dmFsLCB2YWRkcik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyogRmxvYXRpbmcg cG9pbnQgKi8KK2Zsb2F0NjQgSEVMUEVSKGNvbnZfc2YyZGYpKENQVUhleGFnb25TdGF0ZSAqZW52 LCBmbG9hdDMyIFJzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDY0 IG91dF9mNjQgPSBmbG9hdDMyX3RvX2Zsb2F0NjQoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAg IGlmIChmbG9hdDY0X2lzX2FueV9uYW4ob3V0X2Y2NCkpIHsKKyAgICAgICAgb3V0X2Y2NCA9IG1h a2VfZmxvYXQ2NCgweEZGRkZGRkZGRkZGRkZGRkZVTEwpOworICAgIH0KKyAgICBhcmNoX2Zwb3Bf ZW5kKGVudik7CisgICAgcmV0dXJuIG91dF9mNjQ7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKGNvbnZf ZGYyc2YpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAgYXJjaF9m cG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQzMiBvdXRfZjMyID0gZmxvYXQ2NF90b19mbG9hdDMy KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJl dHVybiBvdXRfZjMyOworfQorCitmbG9hdDMyIEhFTFBFUihjb252X3V3MnNmKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgaW50MzJfdCBSc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7Cisg ICAgZmxvYXQzMiBSZFYgPSB1aW50MzJfdG9fZmxvYXQzMihSc1YsICZlbnYtPmZwX3N0YXR1cyk7 CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2Zsb2F0NjQg SEVMUEVSKGNvbnZfdXcyZGYpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQzMl90IFJzVikKK3sK KyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDY0IFJkZFYgPSB1aW50MzJfdG9f ZmxvYXQ2NChSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOwor ICAgIHJldHVybiBSZGRWOworfQorCitmbG9hdDMyIEhFTFBFUihjb252X3cyc2YpKENQVUhleGFn b25TdGF0ZSAqZW52LCBpbnQzMl90IFJzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsK KyAgICBmbG9hdDMyIFJkViA9IGludDMyX3RvX2Zsb2F0MzIoUnNWLCAmZW52LT5mcF9zdGF0dXMp OworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitmbG9hdDY0 IEhFTFBFUihjb252X3cyZGYpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQzMl90IFJzVikKK3sK KyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDY0IFJkZFYgPSBpbnQzMl90b19m bG9hdDY0KFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7Cisg ICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKGNvbnZfdWQyc2YpKENQVUhleGFn b25TdGF0ZSAqZW52LCBpbnQ2NF90IFJzc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7 CisgICAgZmxvYXQzMiBSZFYgPSB1aW50NjRfdG9fZmxvYXQzMihSc3NWLCAmZW52LT5mcF9zdGF0 dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitmbG9h dDY0IEhFTFBFUihjb252X3VkMmRmKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50NjRfdCBSc3NW KQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGZsb2F0NjQgUmRkViA9IHVpbnQ2 NF90b19mbG9hdDY0KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChl bnYpOworICAgIHJldHVybiBSZGRWOworfQorCitmbG9hdDMyIEhFTFBFUihjb252X2Qyc2YpKENQ VUhleGFnb25TdGF0ZSAqZW52LCBpbnQ2NF90IFJzc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0 KGVudik7CisgICAgZmxvYXQzMiBSZFYgPSBpbnQ2NF90b19mbG9hdDMyKFJzc1YsICZlbnYtPmZw X3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisK K2Zsb2F0NjQgSEVMUEVSKGNvbnZfZDJkZikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDY0X3Qg UnNzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDY0IFJkZFYgPSBp bnQ2NF90b19mbG9hdDY0KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2Vu ZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQorCitpbnQzMl90IEhFTFBFUihjb252X3NmMnV3 KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YpCit7CisgICAgYXJjaF9mcG9wX3N0 YXJ0KGVudik7CisgICAgaW50MzJfdCBSZFYgPSBjb252X3NmX3RvXzR1KFJzViwgJmVudi0+ZnBf c3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKwor aW50MzJfdCBIRUxQRVIoY29udl9zZjJ3KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBS c1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50MzJfdCBSZFYgPSBjb252 X3NmX3RvXzRzKFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7 CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50NjRfdCBIRUxQRVIoY29udl9zZjJ1ZCkoQ1BVSGV4 YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYp OworICAgIGludDY0X3QgUmRkViA9IGNvbnZfc2ZfdG9fOHUoUnNWLCAmZW52LT5mcF9zdGF0dXMp OworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50NjRf dCBIRUxQRVIoY29udl9zZjJkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YpCit7 CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50NjRfdCBSZGRWID0gY29udl9zZl90 b184cyhSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAg IHJldHVybiBSZGRWOworfQorCitpbnQzMl90IEhFTFBFUihjb252X2RmMnV3KShDUFVIZXhhZ29u U3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIGludDMyX3QgUmRWID0gY29udl9kZl90b180dShSc3NWLCAmZW52LT5mcF9zdGF0dXMpOwor ICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQzMl90IEhF TFBFUihjb252X2RmMncpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7Cisg ICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50MzJfdCBSZFYgPSBjb252X2RmX3RvXzRz KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJl dHVybiBSZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNvbnZfZGYydWQpKENQVUhleGFnb25TdGF0 ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAg aW50NjRfdCBSZGRWID0gY29udl9kZl90b184dShSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAg IGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50NjRfdCBIRUxQ RVIoY29udl9kZjJkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAg IGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGludDY0X3QgUmRkViA9IGNvbnZfZGZfdG9fOHMo UnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0 dXJuIFJkZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfc2YydXdfY2hvcCkoQ1BVSGV4YWdv blN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3RvX3plcm8sICZlbnYtPmZw X3N0YXR1cyk7CisgICAgaW50MzJfdCBSZFYgPSBjb252X3NmX3RvXzR1KFJzViwgJmVudi0+ZnBf c3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKwor aW50MzJfdCBIRUxQRVIoY29udl9zZjJ3X2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9h dDMyIFJzVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRfcm91 bmRpbmdfbW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGlu dDMyX3QgUmRWID0gY29udl9zZl90b180cyhSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJj aF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNv bnZfc2YydWRfY2hvcCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAg IGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0 X3JvdW5kX3RvX3plcm8sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW50NjRfdCBSZGRWID0gY29u dl9zZl90b184dShSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYp OworICAgIHJldHVybiBSZGRWOworfQorCitpbnQ2NF90IEhFTFBFUihjb252X3NmMmRfY2hvcCko Q1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGFyY2hfZnBvcF9zdGFy dChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3RvX3plcm8s ICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW50NjRfdCBSZGRWID0gY29udl9zZl90b184cyhSc1Ys ICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBS ZGRWOworfQorCitpbnQzMl90IEhFTFBFUihjb252X2RmMnV3X2Nob3ApKENQVUhleGFnb25TdGF0 ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAg c2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVybywgJmVudi0+ZnBfc3Rh dHVzKTsKKyAgICBpbnQzMl90IFJkViA9IGNvbnZfZGZfdG9fNHUoUnNzViwgJmVudi0+ZnBfc3Rh dHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50 MzJfdCBIRUxQRVIoY29udl9kZjJ3X2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0 IFJzc1YpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgc2V0X2Zsb2F0X3JvdW5k aW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVybywgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpbnQz Ml90IFJkViA9IGNvbnZfZGZfdG9fNHMoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNo X2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50NjRfdCBIRUxQRVIoY29u dl9kZjJ1ZF9jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAg IGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0 X3JvdW5kX3RvX3plcm8sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW50NjRfdCBSZGRWID0gY29u dl9kZl90b184dShSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52 KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50NjRfdCBIRUxQRVIoY29udl9kZjJkX2Nob3Ap KENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAgYXJjaF9mcG9wX3N0 YXJ0KGVudik7CisgICAgc2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVy bywgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpbnQ2NF90IFJkZFYgPSBjb252X2RmX3RvXzhzKFJz c1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVy biBSZGRWOworfQorCitmbG9hdDMyIEhFTFBFUihzZmFkZCkoQ1BVSGV4YWdvblN0YXRlICplbnYs IGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsK KyAgICBmbG9hdDMyIFJkViA9IGZsb2F0MzJfYWRkKFJzViwgUnRWLCAmZW52LT5mcF9zdGF0dXMp OworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitmbG9hdDMy IEhFTFBFUihzZnN1YikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWLCBmbG9hdDMy IFJ0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDMyIFJkViA9IGZs b2F0MzJfc3ViKFJzViwgUnRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQo ZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQzMl90IEhFTFBFUihzZmNtcGVxKShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGFyY2hf ZnBvcF9zdGFydChlbnYpOworICAgIGludDMyX3QgUGRWID0gZjhCSVRTT0YoZmxvYXQzMl9lcShS c1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKSk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAg IHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKHNmY21wZ3QpKENQVUhleGFnb25TdGF0 ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0 KGVudik7CisgICAgaW50IGNtcCA9IGZsb2F0MzJfY29tcGFyZShSc1YsIFJ0ViwgJmVudi0+ZnBf c3RhdHVzKTsKKyAgICBpbnQzMl90IFBkViA9IGY4QklUU09GKGNtcCA9PSBmbG9hdF9yZWxhdGlv bl9ncmVhdGVyKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBkVjsKK30K KworaW50MzJfdCBIRUxQRVIoc2ZjbXBnZSkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIg UnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQg Y21wID0gZmxvYXQzMl9jb21wYXJlKFJzViwgUnRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGlu dDMyX3QgUGRWID0gZjhCSVRTT0YoY21wID09IGZsb2F0X3JlbGF0aW9uX2dyZWF0ZXIgfHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNtcCA9PSBmbG9hdF9yZWxhdGlvbl9lcXVhbCk7Cisg ICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVM UEVSKHNmY21wdW8pKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBS dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaW50MzJfdCBQZFYgPSBmOEJJ VFNPRihmbG9hdDMyX2lzX2FueV9uYW4oUnNWKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmxvYXQzMl9pc19hbnlfbmFuKFJ0VikpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAg ICByZXR1cm4gUGRWOworfQorCitmbG9hdDMyIEhFTFBFUihzZm1heCkoQ1BVSGV4YWdvblN0YXRl ICplbnYsIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQo ZW52KTsKKyAgICBmbG9hdDMyIFJkViA9IGZsb2F0MzJfbWF4KFJzViwgUnRWLCAmZW52LT5mcF9z dGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitm bG9hdDMyIEhFTFBFUihzZm1pbikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWLCBm bG9hdDMyIFJ0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBmbG9hdDMyIFJk ViA9IGZsb2F0MzJfbWluKFJzViwgUnRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBv cF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQzMl90IEhFTFBFUihzZmNsYXNz KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YsIGludDMyX3QgdWlWKQoreworICAg IGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGludDMyX3QgUGRWID0gMDsKKyAgICBpZiAoZkdF VEJJVCgwLCB1aVYpICYmIGZsb2F0MzJfaXNfemVybyhSc1YpKSB7CisgICAgICAgIFBkViA9IDB4 ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDEsIHVpVikgJiYgZmxvYXQzMl9pc19ub3JtYWwo UnNWKSkgeworICAgICAgICBQZFYgPSAweGZmOworICAgIH0KKyAgICBpZiAoZkdFVEJJVCgyLCB1 aVYpICYmIGZsb2F0MzJfaXNfZGVub3JtYWwoUnNWKSkgeworICAgICAgICBQZFYgPSAweGZmOwor ICAgIH0KKyAgICBpZiAoZkdFVEJJVCgzLCB1aVYpICYmIGZsb2F0MzJfaXNfaW5maW5pdHkoUnNW KSkgeworICAgICAgICBQZFYgPSAweGZmOworICAgIH0KKyAgICBpZiAoZkdFVEJJVCg0LCB1aVYp ICYmIGZsb2F0MzJfaXNfYW55X25hbihSc1YpKSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAg fQorICAgIHNldF9mbG9hdF9leGNlcHRpb25fZmxhZ3MoMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBkVjsKK30KKworZmxvYXQzMiBIRUxQ RVIoc2ZmaXh1cG4pKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBS dFYpCit7CisgICAgZmxvYXQzMiBSZFYgPSAwOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIGludCBhZGp1c3Q7CisgICAgYXJjaF9zZl9yZWNpcF9jb21tb24oJlJzViwgJlJ0ViwgJlJk ViwgJmFkanVzdCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBSc1Y7CisgICAgYXJjaF9m cG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKHNmZml4 dXBkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQorewor ICAgIGZsb2F0MzIgUmRWID0gMDsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQg YWRqdXN0OworICAgIGFyY2hfc2ZfcmVjaXBfY29tbW9uKCZSc1YsICZSdFYsICZSZFYsICZhZGp1 c3QsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRWID0gUnRWOworICAgIGFyY2hfZnBvcF9lbmQo ZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitmbG9hdDMyIEhFTFBFUihzZmZpeHVwcikoQ1BV SGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGZsb2F0MzIgUmRWID0gMDsK KyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQgYWRqdXN0OworICAgIGFyY2hfc2Zf aW52c3FydF9jb21tb24oJlJzViwgJlJkViwgJmFkanVzdCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBSZFYgPSBSc1Y7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9 CisKK2Zsb2F0NjQgSEVMUEVSKGRmYWRkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBS c3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxv YXQ2NCBSZGRWID0gZmxvYXQ2NF9hZGQoUnNzViwgUnR0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0NjQgSEVM UEVSKGRmc3ViKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0 dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQ2NCBSZGRWID0gZmxv YXQ2NF9zdWIoUnNzViwgUnR0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5k KGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVSKGRmbWF4KShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJj aF9mcG9wX3N0YXJ0KGVudik7CisgICAgZmxvYXQ2NCBSZGRWID0gZmxvYXQ2NF9tYXgoUnNzViwg UnR0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0 dXJuIFJkZFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVSKGRmbWluKShDUFVIZXhhZ29uU3RhdGUgKmVu diwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVu dik7CisgICAgZmxvYXQ2NCBSZGRWID0gZmxvYXQ2NF9taW4oUnNzViwgUnR0ViwgJmVudi0+ZnBf c3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisK K2ludDMyX3QgSEVMUEVSKGRmY21wZXEpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJz c1YsIGZsb2F0NjQgUnR0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQz Ml90IFBkViA9IGY4QklUU09GKGZsb2F0NjRfZXEoUnNzViwgUnR0ViwgJmVudi0+ZnBfc3RhdHVz KSk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7Cit9CisKK2ludDMy X3QgSEVMUEVSKGRmY21wZ3QpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YsIGZs b2F0NjQgUnR0VikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQgY21wID0g ZmxvYXQ2NF9jb21wYXJlKFJzc1YsIFJ0dFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW50MzJf dCBQZFYgPSBmOEJJVFNPRihjbXAgPT0gZmxvYXRfcmVsYXRpb25fZ3JlYXRlcik7CisgICAgYXJj aF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGRm Y21wZ2UpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YsIGZsb2F0NjQgUnR0VikK K3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpbnQgY21wID0gZmxvYXQ2NF9jb21w YXJlKFJzc1YsIFJ0dFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW50MzJfdCBQZFYgPSBmOEJJ VFNPRihjbXAgPT0gZmxvYXRfcmVsYXRpb25fZ3JlYXRlciB8fAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgY21wID09IGZsb2F0X3JlbGF0aW9uX2VxdWFsKTsKKyAgICBhcmNoX2Zwb3BfZW5k KGVudik7CisgICAgcmV0dXJuIFBkVjsKK30KKworaW50MzJfdCBIRUxQRVIoZGZjbXB1bykoQ1BV SGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAgIGFy Y2hfZnBvcF9zdGFydChlbnYpOworICAgIGludDMyX3QgUGRWID0gZjhCSVRTT0YoZmxvYXQ2NF9p c19hbnlfbmFuKFJzc1YpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdDY0X2lz X2FueV9uYW4oUnR0VikpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUGRW OworfQorCitpbnQzMl90IEhFTFBFUihkZmNsYXNzKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxv YXQ2NCBSc3NWLCBpbnQzMl90IHVpVikKK3sKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAg ICBpbnQzMl90IFBkViA9IDA7CisgICAgaWYgKGZHRVRCSVQoMCwgdWlWKSAmJiBmbG9hdDY0X2lz X3plcm8oUnNzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9CisgICAgaWYgKGZHRVRC SVQoMSwgdWlWKSAmJiBmbG9hdDY0X2lzX25vcm1hbChSc3NWKSkgeworICAgICAgICBQZFYgPSAw eGZmOworICAgIH0KKyAgICBpZiAoZkdFVEJJVCgyLCB1aVYpICYmIGZsb2F0NjRfaXNfZGVub3Jt YWwoUnNzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9CisgICAgaWYgKGZHRVRCSVQo MywgdWlWKSAmJiBmbG9hdDY0X2lzX2luZmluaXR5KFJzc1YpKSB7CisgICAgICAgIFBkViA9IDB4 ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDQsIHVpVikgJiYgZmxvYXQ2NF9pc19hbnlfbmFu KFJzc1YpKSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIHNldF9mbG9hdF9leGNl cHRpb25fZmxhZ3MoMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7 CisgICAgcmV0dXJuIFBkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZtcHkpKENQVUhleGFnb25T dGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgYXJjaF9mcG9wX3N0 YXJ0KGVudik7CisgICAgZmxvYXQzMiBSZFYgPSBpbnRlcm5hbF9tcHlmKFJzViwgUnRWLCAmZW52 LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOwor fQorCitmbG9hdDMyIEhFTFBFUihzZmZtYSkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIg UnhWLAorICAgICAgICAgICAgICAgICAgICAgIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sK KyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSeFYgPSBpbnRlcm5hbF9mbWFmeChSc1Ys IFJ0ViwgUnhWLCAwLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsK KyAgICByZXR1cm4gUnhWOworfQorCitzdGF0aWMgYm9vbCBpc2Zpbml0ZShmbG9hdDMyIHgpCit7 CisgICAgcmV0dXJuICFmbG9hdDMyX2lzX2FueV9uYW4oeCkgJiYgIWZsb2F0MzJfaXNfaW5maW5p dHkoeCk7Cit9CisKK3N0YXRpYyBib29sIGlzX3plcm9fcHJvZChmbG9hdDMyIGEsIGZsb2F0MzIg YikKK3sKKyAgICByZXR1cm4gKChmbG9hdDMyX2lzX3plcm8oYSkgJiYgaXNmaW5pdGUoYikpIHx8 CisgICAgICAgICAgICAoZmxvYXQzMl9pc196ZXJvKGIpICYmIGlzZmluaXRlKGEpKSk7Cit9CisK K3N0YXRpYyBmbG9hdDMyIGNoZWNrX25hbihmbG9hdDMyIGRzdCwgZmxvYXQzMiB4LCBmbG9hdF9z dGF0dXMgKmZwX3N0YXR1cykKK3sKKyAgICBmbG9hdDMyIHJldCA9IGRzdDsKKyAgICBpZiAoZmxv YXQzMl9pc19hbnlfbmFuKHgpKSB7CisgICAgICAgIGlmIChleHRyYWN0MzIoeCwgMjIsIDEpID09 IDApIHsKKyAgICAgICAgICAgIGZsb2F0X3JhaXNlKGZsb2F0X2ZsYWdfaW52YWxpZCwgZnBfc3Rh dHVzKTsKKyAgICAgICAgfQorICAgICAgICByZXQgPSBtYWtlX2Zsb2F0MzIoMHhmZmZmZmZmZik7 ICAgIC8qIG5hbiAqLworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitmbG9hdDMyIEhFTFBF UihzZmZtYV9zYykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnhWLAorICAgICAgICAg ICAgICAgICAgICAgICAgIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0ViwgZmxvYXQzMiBQdVYpCit7 CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgc2l6ZTRzX3QgdG1wOworICAgIFJ4ViA9 IGNoZWNrX25hbihSeFYsIFJ4ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBjaGVja19u YW4oUnhWLCBSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4Viwg UnRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIHRtcCA9IGludGVybmFsX2ZtYWZ4KFJzViwgUnRW LCBSeFYsIGZTWFROKDgsIDY0LCBQdVYpLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGlmICghKGZs b2F0MzJfaXNfemVybyhSeFYpICYmIGlzX3plcm9fcHJvZChSc1YsIFJ0VikpKSB7CisgICAgICAg IFJ4ViA9IHRtcDsKKyAgICB9CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBS eFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKHNmZm1zKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxv YXQzMiBSeFYsCisgICAgICAgICAgICAgICAgICAgICAgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRW KQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGZsb2F0MzIgbmVnX1JzViA9IGZs b2F0MzJfc3ViKGZsb2F0MzJfemVybywgUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9 IGludGVybmFsX2ZtYWZ4KG5lZ19Sc1YsIFJ0ViwgUnhWLCAwLCAmZW52LT5mcF9zdGF0dXMpOwor ICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUnhWOworfQorCitzdGF0aWMgaW5s aW5lIGJvb2wgaXNfaW5mX3Byb2QoaW50MzJfdCBhLCBpbnQzMl90IGIpCit7CisgICAgcmV0dXJu IChmbG9hdDMyX2lzX2luZmluaXR5KGEpICYmIGZsb2F0MzJfaXNfaW5maW5pdHkoYikpIHx8Cisg ICAgICAgICAgIChmbG9hdDMyX2lzX2luZmluaXR5KGEpICYmIGlzZmluaXRlKGIpICYmICFmbG9h dDMyX2lzX3plcm8oYikpIHx8CisgICAgICAgICAgIChmbG9hdDMyX2lzX2luZmluaXR5KGIpICYm IGlzZmluaXRlKGEpICYmICFmbG9hdDMyX2lzX3plcm8oYSkpOworfQorCitmbG9hdDMyIEhFTFBF UihzZmZtYV9saWIpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGFyY2hf ZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5k X25lYXJlc3RfZXZlbiwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpbnQgaW5maW5wOworICAgIGlu dCBpbmZtaW51c2luZjsKKyAgICBmbG9hdDMyIHRtcDsKKyAgICBpbmZtaW51c2luZiA9IGZsb2F0 MzJfaXNfaW5maW5pdHkoUnhWKSAmJgorICAgICAgICAgICAgICAgICAgaXNfaW5mX3Byb2QoUnNW LCBSdFYpICYmCisgICAgICAgICAgICAgICAgICAoZkdFVEJJVCgzMSwgUnNWIF4gUnhWIF4gUnRW KSAhPSAwKTsKKyAgICBpbmZpbnAgPSBmbG9hdDMyX2lzX2luZmluaXR5KFJ4VikgfHwKKyAgICAg ICAgICAgICBmbG9hdDMyX2lzX2luZmluaXR5KFJ0VikgfHwKKyAgICAgICAgICAgICBmbG9hdDMy X2lzX2luZmluaXR5KFJzVik7CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnhWLCAmZW52LT5m cF9zdGF0dXMpOworICAgIFJ4ViA9IGNoZWNrX25hbihSeFYsIFJzViwgJmVudi0+ZnBfc3RhdHVz KTsKKyAgICBSeFYgPSBjaGVja19uYW4oUnhWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAg dG1wID0gaW50ZXJuYWxfZm1hZngoUnNWLCBSdFYsIFJ4ViwgMCwgJmVudi0+ZnBfc3RhdHVzKTsK KyAgICBpZiAoIShmbG9hdDMyX2lzX3plcm8oUnhWKSAmJiBpc196ZXJvX3Byb2QoUnNWLCBSdFYp KSkgeworICAgICAgICBSeFYgPSB0bXA7CisgICAgfQorICAgIHNldF9mbG9hdF9leGNlcHRpb25f ZmxhZ3MoMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpZiAoZmxvYXQzMl9pc19pbmZpbml0eShS eFYpICYmICFpbmZpbnApIHsKKyAgICAgICAgUnhWID0gUnhWIC0gMTsKKyAgICB9CisgICAgaWYg KGluZm1pbnVzaW5mKSB7CisgICAgICAgIFJ4ViA9IDA7CisgICAgfQorICAgIGFyY2hfZnBvcF9l bmQoZW52KTsKKyAgICByZXR1cm4gUnhWOworfQorCitmbG9hdDMyIEhFTFBFUihzZmZtc19saWIp KENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChl bnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX25lYXJlc3RfZXZl biwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpbnQgaW5maW5wOworICAgIGludCBpbmZtaW51c2lu ZjsKKyAgICBmbG9hdDMyIHRtcDsKKyAgICBpbmZtaW51c2luZiA9IGZsb2F0MzJfaXNfaW5maW5p dHkoUnhWKSAmJgorICAgICAgICAgICAgICAgICAgaXNfaW5mX3Byb2QoUnNWLCBSdFYpICYmCisg ICAgICAgICAgICAgICAgICAoZkdFVEJJVCgzMSwgUnNWIF4gUnhWIF4gUnRWKSA9PSAwKTsKKyAg ICBpbmZpbnAgPSBmbG9hdDMyX2lzX2luZmluaXR5KFJ4VikgfHwKKyAgICAgICAgICAgICBmbG9h dDMyX2lzX2luZmluaXR5KFJ0VikgfHwKKyAgICAgICAgICAgICBmbG9hdDMyX2lzX2luZmluaXR5 KFJzVik7CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnhWLCAmZW52LT5mcF9zdGF0dXMpOwor ICAgIFJ4ViA9IGNoZWNrX25hbihSeFYsIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYg PSBjaGVja19uYW4oUnhWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgZmxvYXQzMiBtaW51 c19Sc1YgPSBmbG9hdDMyX3N1YihmbG9hdDMyX3plcm8sIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsK KyAgICB0bXAgPSBpbnRlcm5hbF9mbWFmeChtaW51c19Sc1YsIFJ0ViwgUnhWLCAwLCAmZW52LT5m cF9zdGF0dXMpOworICAgIGlmICghKGZsb2F0MzJfaXNfemVybyhSeFYpICYmIGlzX3plcm9fcHJv ZChSc1YsIFJ0VikpKSB7CisgICAgICAgIFJ4ViA9IHRtcDsKKyAgICB9CisgICAgc2V0X2Zsb2F0 X2V4Y2VwdGlvbl9mbGFncygwLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGlmIChmbG9hdDMyX2lz X2luZmluaXR5KFJ4VikgJiYgIWluZmlucCkgeworICAgICAgICBSeFYgPSBSeFYgLSAxOworICAg IH0KKyAgICBpZiAoaW5mbWludXNpbmYpIHsKKyAgICAgICAgUnhWID0gMDsKKyAgICB9CisgICAg YXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSeFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVS KGRmbXB5Zml4KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0 dFYpCit7CisgICAgaW50NjRfdCBSZGRWOworICAgIGlmIChmbG9hdDY0X2lzX2Rlbm9ybWFsKFJz c1YpICYmCisgICAgICAgIChmbG9hdDY0X2dldGV4cChSdHRWKSA+PSA1MTIpICYmCisgICAgICAg IGZsb2F0NjRfaXNfbm9ybWFsKFJ0dFYpKSB7CisgICAgICAgIFJkZFYgPSBmbG9hdDY0X211bChS c3NWLCBtYWtlX2Zsb2F0NjQoMHg0MzMwMDAwMDAwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICZlbnYtPmZwX3N0YXR1cyk7CisgICAgfSBlbHNlIGlmIChmbG9hdDY0X2lzX2Rl bm9ybWFsKFJ0dFYpICYmCisgICAgICAgICAgICAgICAoZmxvYXQ2NF9nZXRleHAoUnNzVikgPj0g NTEyKSAmJgorICAgICAgICAgICAgICAgZmxvYXQ2NF9pc19ub3JtYWwoUnNzVikpIHsKKyAgICAg ICAgUmRkViA9IGZsb2F0NjRfbXVsKFJzc1YsIG1ha2VfZmxvYXQ2NCgweDNjYjAwMDAwMDAwMDAw MDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICB9 IGVsc2UgeworICAgICAgICBSZGRWID0gUnNzVjsKKyAgICB9CisgICAgYXJjaF9mcG9wX2VuZChl bnYpOworICAgIHJldHVybiBSZGRWOworfQorCitmbG9hdDY0IEhFTFBFUihkZm1weWhoKShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSeHhWLAorICAgICAgICAgICAgICAgICAgICAgICAg ZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7 CisgICAgUnh4ViA9IGludGVybmFsX21weWhoKFJzc1YsIFJ0dFYsIFJ4eFYsICZlbnYtPmZwX3N0 YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSeHhWOworfQorCitz dGF0aWMgdm9pZCBjYW5jZWxfc2xvdChDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qgc2xv dCkKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJTbG90ICVkIGNhbmNlbGxlZFxuIiwgc2xvdCk7Cisg ICAgZW52LT5zbG90X2NhbmNlbGxlZCB8PSAoMSA8PCBzbG90KTsKK30KKworLyogVGhlc2UgbWFj cm9zIGNhbiBiZSByZWZlcmVuY2VkIGluIHRoZSBnZW5lcmF0ZWQgaGVscGVyIGZ1bmN0aW9ucyAq LworI2RlZmluZSB3YXJuKC4uLikgLyogTm90aGluZyAqLworI2RlZmluZSBmYXRhbCguLi4pIGdf YXNzZXJ0X25vdF9yZWFjaGVkKCk7CisKKyNkZWZpbmUgQk9HVVNfSEVMUEVSKHRhZykgXAorICAg IHByaW50ZigiRVJST1I6IGJvZ3VzIGhlbHBlcjogIiAjdGFnICJcbiIpCisKKyNpbmNsdWRlICJo ZWxwZXJfZnVuY3NfZ2VuZXJhdGVkLmgiCi0tIAoyLjcuNAoK