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 9B67BC433DB for ; Mon, 8 Feb 2021 05:55:57 +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 DA7A764E6C for ; Mon, 8 Feb 2021 05:55:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DA7A764E6C 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]:58174 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l8zWd-0000WH-Nz for qemu-devel@archiver.kernel.org; Mon, 08 Feb 2021 00:55:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l8zO6-0007pJ-Tl for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:47:06 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:35756) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l8zNw-0006RS-VV for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:47:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1612763217; x=1644299217; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=io7hFEb44jJIRBkpqF8cZJ18NEk9Xk2EBmrXaon4+jM=; b=IAf0aJ4UGOToNjQpUUKmGGrQxPg4Vb77kESltWb8kWHY1WV4v4jQ1XRd Dx16qYSOEE2dCvaqHnJEBwg9Y8qph+5nzeWVQid8fbhv4IYG/OhhuoM0u pyoLS7zxuaDmSOsoDA2NFjyaGIMxk86l8o3tDNF+ao/9l90nhflG3aeiJ g=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-02.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 ironmsg04-sd.qualcomm.com with ESMTP; 07 Feb 2021 21:46:29 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 0C9932D06; Sun, 7 Feb 2021 23:46:29 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v8 07/35] Hexagon (target/hexagon) scalar core helpers Date: Sun, 7 Feb 2021 23:45:57 -0600 Message-Id: <1612763186-18161-8-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.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.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" VGhlIG1ham9yaXR5IG9mIGhlbHBlcnMgYXJlIGdlbmVyYXRlZC4gIERlZmluZSB0aGUgaGVscGVy IGZ1bmN0aW9ucyBuZWVkZWQKdGhlbiBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgZmlsZQoKU2lnbmVk LW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdl dC9oZXhhZ29uL2hlbHBlci5oICAgIHwgICA4OCArKysrCiB0YXJnZXQvaGV4YWdvbi9vcF9oZWxw ZXIuYyB8IDEwNjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMTE1MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg dGFyZ2V0L2hleGFnb24vaGVscGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdv bi9vcF9oZWxwZXIuYwoKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2hlbHBlci5oIGIvdGFy Z2V0L2hleGFnb24vaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YTVmMzQwYwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2hlbHBlci5oCkBAIC0w LDAgKzEsODggQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgImludGVybmFsLmgi CisjaW5jbHVkZSAiaGVscGVyX3Byb3Rvc19nZW5lcmF0ZWQuaC5pbmMiCisKK0RFRl9IRUxQRVJf RkxBR1NfMihyYWlzZV9leGNlcHRpb24sIFRDR19DQUxMX05PX1JFVFVSTiwgbm9yZXR1cm4sIGVu diwgaTMyKQorI2lmIEhFWF9ERUJVRworREVGX0hFTFBFUl8xKGRlYnVnX3N0YXJ0X3BhY2tldCwg dm9pZCwgZW52KQorREVGX0hFTFBFUl9GTEFHU18zKGRlYnVnX2NoZWNrX3N0b3JlX3dpZHRoLCBU Q0dfQ0FMTF9OT19XRywgdm9pZCwgZW52LCBpbnQsIGludCkKK0RFRl9IRUxQRVJfRkxBR1NfMyhk ZWJ1Z19jb21taXRfZW5kLCBUQ0dfQ0FMTF9OT19XRywgdm9pZCwgZW52LCBpbnQsIGludCkKKyNl bmRpZgorREVGX0hFTFBFUl8yKGNvbW1pdF9zdG9yZSwgdm9pZCwgZW52LCBpbnQpCitERUZfSEVM UEVSX0ZMQUdTXzQoZmNpcmNhZGQsIFRDR19DQUxMX05PX1JXR19TRSwgczMyLCBzMzIsIHMzMiwg czMyLCBzMzIpCisKKy8qIEZsb2F0aW5nIHBvaW50ICovCitERUZfSEVMUEVSXzIoY29udl9zZjJk ZiwgZjY0LCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X2RmMnNmLCBmMzIsIGVudiwgZjY0 KQorREVGX0hFTFBFUl8yKGNvbnZfdXcyc2YsIGYzMiwgZW52LCBzMzIpCitERUZfSEVMUEVSXzIo Y29udl91dzJkZiwgZjY0LCBlbnYsIHMzMikKK0RFRl9IRUxQRVJfMihjb252X3cyc2YsIGYzMiwg ZW52LCBzMzIpCitERUZfSEVMUEVSXzIoY29udl93MmRmLCBmNjQsIGVudiwgczMyKQorREVGX0hF TFBFUl8yKGNvbnZfdWQyc2YsIGYzMiwgZW52LCBzNjQpCitERUZfSEVMUEVSXzIoY29udl91ZDJk ZiwgZjY0LCBlbnYsIHM2NCkKK0RFRl9IRUxQRVJfMihjb252X2Qyc2YsIGYzMiwgZW52LCBzNjQp CitERUZfSEVMUEVSXzIoY29udl9kMmRmLCBmNjQsIGVudiwgczY0KQorREVGX0hFTFBFUl8yKGNv bnZfc2YydXcsIHMzMiwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9zZjJ3LCBzMzIsIGVu diwgZjMyKQorREVGX0hFTFBFUl8yKGNvbnZfc2YydWQsIHM2NCwgZW52LCBmMzIpCitERUZfSEVM UEVSXzIoY29udl9zZjJkLCBzNjQsIGVudiwgZjMyKQorREVGX0hFTFBFUl8yKGNvbnZfZGYydXcs IHMzMiwgZW52LCBmNjQpCitERUZfSEVMUEVSXzIoY29udl9kZjJ3LCBzMzIsIGVudiwgZjY0KQor REVGX0hFTFBFUl8yKGNvbnZfZGYydWQsIHM2NCwgZW52LCBmNjQpCitERUZfSEVMUEVSXzIoY29u dl9kZjJkLCBzNjQsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfc2YydXdfY2hvcCwgczMy LCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X3NmMndfY2hvcCwgczMyLCBlbnYsIGYzMikK K0RFRl9IRUxQRVJfMihjb252X3NmMnVkX2Nob3AsIHM2NCwgZW52LCBmMzIpCitERUZfSEVMUEVS XzIoY29udl9zZjJkX2Nob3AsIHM2NCwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9kZjJ1 d19jaG9wLCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYyd19jaG9wLCBzMzIs IGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYydWRfY2hvcCwgczY0LCBlbnYsIGY2NCkK K0RFRl9IRUxQRVJfMihjb252X2RmMmRfY2hvcCwgczY0LCBlbnYsIGY2NCkKK0RFRl9IRUxQRVJf MyhzZmFkZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmc3ViLCBmMzIsIGVu diwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZjbXBlcSwgczMyLCBlbnYsIGYzMiwgZjMyKQor REVGX0hFTFBFUl8zKHNmY21wZ3QsIHMzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfMyhz ZmNtcGdlLCBzMzIsIGVudiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZjbXB1bywgczMyLCBl bnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmbWF4LCBmMzIsIGVudiwgZjMyLCBmMzIpCitE RUZfSEVMUEVSXzMoc2ZtaW4sIGYzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmNs YXNzLCBzMzIsIGVudiwgZjMyLCBzMzIpCitERUZfSEVMUEVSXzMoc2ZmaXh1cG4sIGYzMiwgZW52 LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmZpeHVwZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQor REVGX0hFTFBFUl8yKHNmZml4dXByLCBmMzIsIGVudiwgZjMyKQorCitERUZfSEVMUEVSXzMoZGZh ZGQsIGY2NCwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQRVJfMyhkZnN1YiwgZjY0LCBlbnYsIGY2 NCwgZjY0KQorREVGX0hFTFBFUl8zKGRmbWF4LCBmNjQsIGVudiwgZjY0LCBmNjQpCitERUZfSEVM UEVSXzMoZGZtaW4sIGY2NCwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQRVJfMyhkZmNtcGVxLCBz MzIsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMoZGZjbXBndCwgczMyLCBlbnYsIGY2NCwg ZjY0KQorREVGX0hFTFBFUl8zKGRmY21wZ2UsIHMzMiwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQ RVJfMyhkZmNtcHVvLCBzMzIsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMoZGZjbGFzcywg czMyLCBlbnYsIGY2NCwgczMyKQorCitERUZfSEVMUEVSXzMoc2ZtcHksIGYzMiwgZW52LCBmMzIs IGYzMikKK0RFRl9IRUxQRVJfNChzZmZtYSwgZjMyLCBlbnYsIGYzMiwgZjMyLCBmMzIpCitERUZf SEVMUEVSXzUoc2ZmbWFfc2MsIGYzMiwgZW52LCBmMzIsIGYzMiwgZjMyLCBmMzIpCitERUZfSEVM UEVSXzQoc2ZmbXMsIGYzMiwgZW52LCBmMzIsIGYzMiwgZjMyKQorREVGX0hFTFBFUl80KHNmZm1h X2xpYiwgZjMyLCBlbnYsIGYzMiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzQoc2ZmbXNfbGliLCBm MzIsIGVudiwgZjMyLCBmMzIsIGYzMikKKworREVGX0hFTFBFUl8zKGRmbXB5Zml4LCBmNjQsIGVu diwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzQoZGZtcHloaCwgZjY0LCBlbnYsIGY2NCwgZjY0LCBm NjQpCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9vcF9oZWxwZXIuYyBiL3RhcmdldC9oZXhh Z29uL29wX2hlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNmQ3 MTgKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9vcF9oZWxwZXIuYwpAQCAtMCww ICsxLDEwNjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3NkZXAu aCIKKyNpbmNsdWRlICJxZW11LmgiCisjaW5jbHVkZSAiZXhlYy9oZWxwZXItcHJvdG8uaCIKKyNp bmNsdWRlICJmcHUvc29mdGZsb2F0LmgiCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiaW50 ZXJuYWwuaCIKKyNpbmNsdWRlICJtYWNyb3MuaCIKKyNpbmNsdWRlICJhcmNoLmgiCisjaW5jbHVk ZSAiaGV4X2FyY2hfdHlwZXMuaCIKKyNpbmNsdWRlICJmbWFfZW11LmgiCisjaW5jbHVkZSAiY29u dl9lbXUuaCIKKworI2RlZmluZSBTRl9CSUFTICAgICAgICAxMjcKKyNkZWZpbmUgU0ZfTUFOVEJJ VFMgICAgMjMKKworLyogRXhjZXB0aW9ucyBwcm9jZXNzaW5nIGhlbHBlcnMgKi8KK3N0YXRpYyB2 b2lkIFFFTVVfTk9SRVRVUk4gZG9fcmFpc2VfZXhjZXB0aW9uX2VycihDUFVIZXhhZ29uU3RhdGUg KmVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBleGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludHB0cl90IHBjKQoreworICAgIENQVVN0YXRlICpjcyA9IENQVShoZXhh Z29uX2Vudl9nZXRfY3B1KGVudikpOworICAgIHFlbXVfbG9nX21hc2soQ1BVX0xPR19JTlQsICIl czogJWRcbiIsIF9fZnVuY19fLCBleGNlcHRpb24pOworICAgIGNzLT5leGNlcHRpb25faW5kZXgg PSBleGNlcHRpb247CisgICAgY3B1X2xvb3BfZXhpdF9yZXN0b3JlKGNzLCBwYyk7Cit9CisKK3Zv aWQgUUVNVV9OT1JFVFVSTiBIRUxQRVIocmFpc2VfZXhjZXB0aW9uKShDUFVIZXhhZ29uU3RhdGUg KmVudiwgdWludDMyX3QgZXhjcCkKK3sKKyAgICBkb19yYWlzZV9leGNlcHRpb25fZXJyKGVudiwg ZXhjcCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfcmVnX3dyaXRlKENQVUhleGFn b25TdGF0ZSAqZW52LCBpbnQgcm51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRhcmdldF91bG9uZyB2YWwsIHVpbnQzMl90IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygi bG9nX3JlZ193cml0ZVslZF0gPSAiIFRBUkdFVF9GTVRfbGQgIiAoMHgiIFRBUkdFVF9GTVRfbHgg IikiLAorICAgICAgICAgICAgICAgICAgcm51bSwgdmFsLCB2YWwpOworICAgIGlmICh2YWwgPT0g ZW52LT5ncHJbcm51bV0pIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiIE5PIENIQU5HRSIpOwor ICAgIH0KKyAgICBIRVhfREVCVUdfTE9HKCJcbiIpOworCisgICAgZW52LT5uZXdfdmFsdWVbcm51 bV0gPSB2YWw7CisjaWYgSEVYX0RFQlVHCisgICAgLyogRG8gdGhpcyBzbyBIRUxQRVIoZGVidWdf Y29tbWl0X2VuZCkgd2lsbCBrbm93ICovCisgICAgZW52LT5yZWdfd3JpdHRlbltybnVtXSA9IDE7 CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ19wcmVkX3dyaXRlKENQVUhleGFn b25TdGF0ZSAqZW52LCBpbnQgcG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0YXJnZXRfdWxvbmcgdmFsKQoreworICAgIEhFWF9ERUJVR19MT0coImxvZ19wcmVkX3dyaXRl WyVkXSA9ICIgVEFSR0VUX0ZNVF9sZAorICAgICAgICAgICAgICAgICAgIiAoMHgiIFRBUkdFVF9G TVRfbHggIilcbiIsCisgICAgICAgICAgICAgICAgICBwbnVtLCB2YWwsIHZhbCk7CisKKyAgICAv KiBNdWx0aXBsZSB3cml0ZXMgdG8gdGhlIHNhbWUgcHJlZyBhcmUgYW5kJ2VkIHRvZ2V0aGVyICov CisgICAgaWYgKGVudi0+cHJlZF93cml0dGVuICYgKDEgPDwgcG51bSkpIHsKKyAgICAgICAgZW52 LT5uZXdfcHJlZF92YWx1ZVtwbnVtXSAmPSB2YWwgJiAweGZmOworICAgIH0gZWxzZSB7CisgICAg ICAgIGVudi0+bmV3X3ByZWRfdmFsdWVbcG51bV0gPSB2YWwgJiAweGZmOworICAgICAgICBlbnYt PnByZWRfd3JpdHRlbiB8PSAxIDw8IHBudW07CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZv aWQgbG9nX3N0b3JlMzIoQ1BVSGV4YWdvblN0YXRlICplbnYsIHRhcmdldF91bG9uZyBhZGRyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWwsIGludCB3aWR0 aCwgaW50IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygibG9nX3N0b3JlJWQoMHgiIFRBUkdF VF9GTVRfbHgKKyAgICAgICAgICAgICAgICAgICIsICUiIFBSSWQzMiAiIFsweDA4JSIgUFJJeDMy ICJdKVxuIiwKKyAgICAgICAgICAgICAgICAgIHdpZHRoLCBhZGRyLCB2YWwsIHZhbCk7CisgICAg ZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52YSA9IGFkZHI7CisgICAgZW52LT5tZW1fbG9nX3N0 b3Jlc1tzbG90XS53aWR0aCA9IHdpZHRoOworICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0u ZGF0YTMyID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nX3N0b3JlNjQoQ1BVSGV4 YWdvblN0YXRlICplbnYsIHRhcmdldF91bG9uZyBhZGRyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludDY0X3QgdmFsLCBpbnQgd2lkdGgsIGludCBzbG90KQoreworICAgIEhFWF9E RUJVR19MT0coImxvZ19zdG9yZSVkKDB4IiBUQVJHRVRfRk1UX2x4CisgICAgICAgICAgICAgICAg ICAiLCAlIiBQUklkNjQgIiBbMHgwMTYlIiBQUkl4NjQgIl0pXG4iLAorICAgICAgICAgICAgICAg ICAgIHdpZHRoLCBhZGRyLCB2YWwsIHZhbCk7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90 XS52YSA9IGFkZHI7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53aWR0aCA9IHdpZHRo OworICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTY0ID0gdmFsOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgd3JpdGVfbmV3X3BjKENQVUhleGFnb25TdGF0ZSAqZW52LCB0YXJnZXRf dWxvbmcgYWRkcikKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJ3cml0ZV9uZXdfcGMoMHgiIFRBUkdF VF9GTVRfbHggIilcbiIsIGFkZHIpOworCisgICAgLyoKKyAgICAgKiBJZiBtb3JlIHRoYW4gb25l IGJyYW5jaCBpcyB0YWtlbiBpbiBhIHBhY2tldCwgb25seSB0aGUgZmlyc3Qgb25lCisgICAgICog aXMgYWN0dWFsbHkgZG9uZS4KKyAgICAgKi8KKyAgICBpZiAoZW52LT5icmFuY2hfdGFrZW4pIHsK KyAgICAgICAgSEVYX0RFQlVHX0xPRygiSU5GTzogbXVsdGlwbGUgYnJhbmNoZXMgdGFrZW4gaW4g c2FtZSBwYWNrZXQsICIKKyAgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgdGhlIHNlY29u ZCBvbmVcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZDSEVDS19QQ0FMSUdOKGFkZHIpOwor ICAgICAgICBlbnYtPmJyYW5jaF90YWtlbiA9IDE7CisgICAgICAgIGVudi0+bmV4dF9QQyA9IGFk ZHI7CisgICAgfQorfQorCisjaWYgSEVYX0RFQlVHCisvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBi cmVha3BvaW50ICovCit2b2lkIEhFTFBFUihkZWJ1Z19zdGFydF9wYWNrZXQpKENQVUhleGFnb25T dGF0ZSAqZW52KQoreworICAgIEhFWF9ERUJVR19MT0coIlN0YXJ0IHBhY2tldDogcGMgPSAweCIg VEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAgICAgICAgZW52LT5ncHJbSEVYX1JFR19Q Q10pOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUT1RBTF9QRVJfVEhSRUFEX1JFR1M7IGkr KykgeworICAgICAgICBlbnYtPnJlZ193cml0dGVuW2ldID0gMDsKKyAgICB9Cit9CisjZW5kaWYK Kworc3RhdGljIGlubGluZSBpbnQzMl90IG5ld19wcmVkX3ZhbHVlKENQVUhleGFnb25TdGF0ZSAq ZW52LCBpbnQgcG51bSkKK3sKKyAgICByZXR1cm4gZW52LT5uZXdfcHJlZF92YWx1ZVtwbnVtXTsK K30KKworI2lmIEhFWF9ERUJVRworLyogQ2hlY2tzIGZvciBib29ra2VlcGluZyBlcnJvcnMgYmV0 d2VlbiBkaXNhc3NlbWJseSBjb250ZXh0IGFuZCBydW50aW1lICovCit2b2lkIEhFTFBFUihkZWJ1 Z19jaGVja19zdG9yZV93aWR0aCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludCBzbG90LCBpbnQg Y2hlY2spCit7CisgICAgaWYgKGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0ud2lkdGggIT0gY2hl Y2spIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiRVJST1I6ICVkICE9ICVkXG4iLAorICAgICAg ICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0ud2lkdGgsIGNoZWNrKTsK KyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9p ZCBIRUxQRVIoY29tbWl0X3N0b3JlKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHNsb3RfbnVt KQoreworICAgIHN3aXRjaCAoZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0ud2lkdGgpIHsK KyAgICBjYXNlIDE6CisgICAgICAgIHB1dF91c2VyX3U4KGVudi0+bWVtX2xvZ19zdG9yZXNbc2xv dF9udW1dLmRhdGEzMiwKKyAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tz bG90X251bV0udmEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIHB1dF91 c2VyX3UxNihlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS5kYXRhMzIsCisgICAgICAgICAg ICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS52YSk7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgcHV0X3VzZXJfdTMyKGVudi0+bWVtX2xvZ19zdG9y ZXNbc2xvdF9udW1dLmRhdGEzMiwKKyAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19z dG9yZXNbc2xvdF9udW1dLnZhKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OgorICAgICAg ICBwdXRfdXNlcl91NjQoZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0uZGF0YTY0LAorICAg ICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0udmEpOworICAg ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp OworICAgIH0KK30KKworI2lmIEhFWF9ERUJVRworc3RhdGljIHZvaWQgcHJpbnRfc3RvcmUoQ1BV SGV4YWdvblN0YXRlICplbnYsIGludCBzbG90KQoreworICAgIGlmICghKGVudi0+c2xvdF9jYW5j ZWxsZWQgJiAoMSA8PCBzbG90KSkpIHsKKyAgICAgICAgdWludDhfdCB3aWR0aCA9IGVudi0+bWVt X2xvZ19zdG9yZXNbc2xvdF0ud2lkdGg7CisgICAgICAgIGlmICh3aWR0aCA9PSAxKSB7CisgICAg ICAgICAgICB1aW50MzJfdCBkYXRhID0gZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhMzIg JiAweGZmOworICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRtZW1iWzB4IiBUQVJHRVRfRk1U X2x4ICJdID0gJSIgUFJJZDMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgKDB4JTAyIiBQ Ukl4MzIgIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9y ZXNbc2xvdF0udmEsIGRhdGEsIGRhdGEpOworICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID09IDIp IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGRhdGEgPSBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3Rd LmRhdGEzMiAmIDB4ZmZmZjsKKyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlx0bWVtaFsweCIg VEFSR0VUX0ZNVF9seCAiXSA9ICUiIFBSSWQzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAi ICgweCUwNCIgUFJJeDMyICIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1l bV9sb2dfc3RvcmVzW3Nsb3RdLnZhLCBkYXRhLCBkYXRhKTsKKyAgICAgICAgfSBlbHNlIGlmICh3 aWR0aCA9PSA0KSB7CisgICAgICAgICAgICB1aW50MzJfdCBkYXRhID0gZW52LT5tZW1fbG9nX3N0 b3Jlc1tzbG90XS5kYXRhMzI7CisgICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJcdG1lbXdbMHgi IFRBUkdFVF9GTVRfbHggIl0gPSAlIiBQUklkMzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IiAoMHglMDgiIFBSSXgzMiAiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5t ZW1fbG9nX3N0b3Jlc1tzbG90XS52YSwgZGF0YSwgZGF0YSk7CisgICAgICAgIH0gZWxzZSBpZiAo d2lkdGggPT0gOCkgeworICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRtZW1kWzB4IiBUQVJH RVRfRk1UX2x4ICJdID0gJSIgUFJJZDY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICIgKDB4 JTAxNiIgUFJJeDY0ICIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9s b2dfc3RvcmVzW3Nsb3RdLnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9s b2dfc3RvcmVzW3Nsb3RdLmRhdGE2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5t ZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhNjQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgSEVYX0RFQlVHX0xPRygiXHRCYWQgc3RvcmUgd2lkdGggJWRcbiIsIHdpZHRoKTsKKyAgICAg ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8q IFRoaXMgZnVuY3Rpb24gaXMgYSBoYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50ICovCit2 b2lkIEhFTFBFUihkZWJ1Z19jb21taXRfZW5kKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IGhh c19zdDAsIGludCBoYXNfc3QxKQoreworICAgIGJvb2wgcmVnX3ByaW50ZWQgPSBmYWxzZTsKKyAg ICBib29sIHByZWRfcHJpbnRlZCA9IGZhbHNlOworICAgIGludCBpOworCisgICAgSEVYX0RFQlVH X0xPRygiUGFja2V0IGNvbW1pdHRlZDogcGMgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAorICAg ICAgICAgICAgICAgICAgZW52LT50aGlzX1BDKTsKKyAgICBIRVhfREVCVUdfTE9HKCJzbG90X2Nh bmNlbGxlZCA9ICVkXG4iLCBlbnYtPnNsb3RfY2FuY2VsbGVkKTsKKworICAgIGZvciAoaSA9IDA7 IGkgPCBUT1RBTF9QRVJfVEhSRUFEX1JFR1M7IGkrKykgeworICAgICAgICBpZiAoZW52LT5yZWdf d3JpdHRlbltpXSkgeworICAgICAgICAgICAgaWYgKCFyZWdfcHJpbnRlZCkgeworICAgICAgICAg ICAgICAgIEhFWF9ERUJVR19MT0coIlJlZ3Mgd3JpdHRlblxuIik7CisgICAgICAgICAgICAgICAg cmVnX3ByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSEVYX0RFQlVH X0xPRygiXHRyJWQgPSAiIFRBUkdFVF9GTVRfbGQgIiAoMHgiIFRBUkdFVF9GTVRfbHggIilcbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGVudi0+bmV3X3ZhbHVlW2ldLCBlbnYtPm5l d192YWx1ZVtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVN X1BSRUdTOyBpKyspIHsKKyAgICAgICAgaWYgKGVudi0+cHJlZF93cml0dGVuICYgKDEgPDwgaSkp IHsKKyAgICAgICAgICAgIGlmICghcHJlZF9wcmludGVkKSB7CisgICAgICAgICAgICAgICAgSEVY X0RFQlVHX0xPRygiUHJlZGljYXRlcyB3cml0dGVuXG4iKTsKKyAgICAgICAgICAgICAgICBwcmVk X3ByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSEVYX0RFQlVHX0xP RygiXHRwJWQgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBpLCBlbnYtPm5ld19wcmVkX3ZhbHVlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAg IGlmIChoYXNfc3QwIHx8IGhhc19zdDEpIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiU3RvcmVz XG4iKTsKKyAgICAgICAgaWYgKGhhc19zdDApIHsKKyAgICAgICAgICAgIHByaW50X3N0b3JlKGVu diwgMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc19zdDEpIHsKKyAgICAgICAgICAgIHBy aW50X3N0b3JlKGVudiwgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBIRVhfREVCVUdfTE9H KCJOZXh0IFBDID0gIiBUQVJHRVRfRk1UX2x4ICJcbiIsIGVudi0+bmV4dF9QQyk7CisgICAgSEVY X0RFQlVHX0xPRygiRXhlYyBjb3VudGVyczogcGt0ID0gIiBUQVJHRVRfRk1UX2x4CisgICAgICAg ICAgICAgICAgICAiLCBpbnNuID0gIiBUQVJHRVRfRk1UX2x4CisgICAgICAgICAgICAgICAgICAi XG4iLAorICAgICAgICAgICAgICAgICAgZW52LT5ncHJbSEVYX1JFR19RRU1VX1BLVF9DTlRdLAor ICAgICAgICAgICAgICAgICAgZW52LT5ncHJbSEVYX1JFR19RRU1VX0lOU05fQ05UXSk7CisKK30K KyNlbmRpZgorCitzdGF0aWMgaW50MzJfdCBmY2lyY2FkZF92NChpbnQzMl90IFJ4ViwgaW50MzJf dCBvZmZzZXQsIGludDMyX3QgTSwgaW50MzJfdCBDUykKK3sKKyAgICBpbnQzMl90IGxlbmd0aCA9 IE0gJiAweDAwMDFmZmZmOworICAgIHVpbnQzMl90IG5ld19wdHIgPSBSeFYgKyBvZmZzZXQ7Cisg ICAgdWludDMyX3Qgc3RhcnRfYWRkciA9IENTOworICAgIHVpbnQzMl90IGVuZF9hZGRyID0gc3Rh cnRfYWRkciArIGxlbmd0aDsKKworICAgIGlmIChuZXdfcHRyID49IGVuZF9hZGRyKSB7CisgICAg ICAgIG5ld19wdHIgLT0gbGVuZ3RoOworICAgIH0gZWxzZSBpZiAobmV3X3B0ciA8IHN0YXJ0X2Fk ZHIpIHsKKyAgICAgICAgbmV3X3B0ciArPSBsZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIG5l d19wdHI7Cit9CisKK2ludDMyX3QgSEVMUEVSKGZjaXJjYWRkKShpbnQzMl90IFJ4ViwgaW50MzJf dCBvZmZzZXQsIGludDMyX3QgTSwgaW50MzJfdCBDUykKK3sKKyAgICBpbnQzMl90IEtfY29uc3Qg PSAoTSA+PiAyNCkgJiAweGY7CisgICAgaW50MzJfdCBsZW5ndGggPSBNICYgMHgxZmZmZjsKKyAg ICBpbnQzMl90IG1hc2sgPSAoMSA8PCAoS19jb25zdCArIDIpKSAtIDE7CisgICAgdWludDMyX3Qg bmV3X3B0ciA9IFJ4ViArIG9mZnNldDsKKyAgICB1aW50MzJfdCBzdGFydF9hZGRyID0gUnhWICYg KH5tYXNrKTsKKyAgICB1aW50MzJfdCBlbmRfYWRkciA9IHN0YXJ0X2FkZHIgfCBsZW5ndGg7CisK KyAgICBpZiAoS19jb25zdCA9PSAwICYmIGxlbmd0aCA+PSA0KSB7CisgICAgICAgIHJldHVybiBm Y2lyY2FkZF92NChSeFYsIG9mZnNldCwgTSwgQ1MpOworICAgIH0KKworICAgIGlmIChuZXdfcHRy ID49IGVuZF9hZGRyKSB7CisgICAgICAgIG5ld19wdHIgLT0gbGVuZ3RoOworICAgIH0gZWxzZSBp ZiAobmV3X3B0ciA8IHN0YXJ0X2FkZHIpIHsKKyAgICAgICAgbmV3X3B0ciArPSBsZW5ndGg7Cisg ICAgfQorCisgICAgcmV0dXJuIG5ld19wdHI7Cit9CisKKy8qCisgKiBIZXhhZ29uIEZQIG9wZXJh dGlvbnMgcmV0dXJuIH4wIGluc3RlYXQgb2YgTmFOCisgKiBUaGUgaGV4X2NoZWNrX3NmbmFuL2hl eF9jaGVja19kZm5hbiBmdW5jdGlvbnMgcGVyZm9ybSB0aGlzIGNoZWNrCisgKi8KK3N0YXRpYyBm bG9hdDMyIGhleF9jaGVja19zZm5hbihmbG9hdDMyIHgpCit7CisgICAgaWYgKGZsb2F0MzJfaXNf YW55X25hbih4KSkgeworICAgICAgICByZXR1cm4gbWFrZV9mbG9hdDMyKDB4RkZGRkZGRkZVKTsK KyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBmbG9hdDY0IGhleF9jaGVja19kZm5h bihmbG9hdDY0IHgpCit7CisgICAgaWYgKGZsb2F0NjRfaXNfYW55X25hbih4KSkgeworICAgICAg ICByZXR1cm4gbWFrZV9mbG9hdDY0KDB4RkZGRkZGRkZGRkZGRkZGRlVMTCk7CisgICAgfQorICAg IHJldHVybiB4OworfQorCisvKgorICogbWVtX25vc2h1ZgorICogU2VjdGlvbiA1LjUgb2YgdGhl IEhleGFnb24gVjY3IFByb2dyYW1tZXIncyBSZWZlcmVuY2UgTWFudWFsCisgKgorICogSWYgdGhl IGxvYWQgaXMgaW4gc2xvdCAwIGFuZCB0aGVyZSBpcyBhIHN0b3JlIGluIHNsb3QxICh0aGF0Cisg KiB3YXNuJ3QgY2FuY2VsbGVkKSwgd2UgaGF2ZSB0byBkbyB0aGUgc3RvcmUgZmlyc3QuCisgKi8K K3N0YXRpYyB2b2lkIGNoZWNrX25vc2h1ZihDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qg c2xvdCkKK3sKKyAgICBpZiAoc2xvdCA9PSAwICYmIGVudi0+cGt0X2hhc19zdG9yZV9zMSAmJgor ICAgICAgICAoKGVudi0+c2xvdF9jYW5jZWxsZWQgJiAoMSA8PCAxKSkgPT0gMCkpIHsKKyAgICAg ICAgSEVMUEVSKGNvbW1pdF9zdG9yZSkoZW52LCAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp bmUgdWludDhfdCBtZW1fbG9hZDEoQ1BVSGV4YWdvblN0YXRlICplbnYsIHVpbnQzMl90IHNsb3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWRkcikKK3sK KyAgICB1aW50OF90IHJldHZhbDsKKyAgICBjaGVja19ub3NodWYoZW52LCBzbG90KTsKKyAgICBn ZXRfdXNlcl91OChyZXR2YWwsIHZhZGRyKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0 aWMgaW5saW5lIHVpbnQxNl90IG1lbV9sb2FkMihDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMy X3Qgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2 YWRkcikKK3sKKyAgICB1aW50MTZfdCByZXR2YWw7CisgICAgY2hlY2tfbm9zaHVmKGVudiwgc2xv dCk7CisgICAgZ2V0X3VzZXJfdTE2KHJldHZhbCwgdmFkZHIpOworICAgIHJldHVybiByZXR2YWw7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbWVtX2xvYWQ0KENQVUhleGFnb25TdGF0ZSAq ZW52LCB1aW50MzJfdCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy Z2V0X3Vsb25nIHZhZGRyKQoreworICAgIHVpbnQzMl90IHJldHZhbDsKKyAgICBjaGVja19ub3No dWYoZW52LCBzbG90KTsKKyAgICBnZXRfdXNlcl91MzIocmV0dmFsLCB2YWRkcik7CisgICAgcmV0 dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBtZW1fbG9hZDgoQ1BVSGV4 YWdvblN0YXRlICplbnYsIHVpbnQzMl90IHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0YXJnZXRfdWxvbmcgdmFkZHIpCit7CisgICAgdWludDY0X3QgcmV0dmFsOworICAg IGNoZWNrX25vc2h1ZihlbnYsIHNsb3QpOworICAgIGdldF91c2VyX3U2NChyZXR2YWwsIHZhZGRy KTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKiBGbG9hdGluZyBwb2ludCAqLworZmxvYXQ2 NCBIRUxQRVIoY29udl9zZjJkZikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQor eworICAgIGZsb2F0NjQgb3V0X2Y2NDsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBv dXRfZjY0ID0gZmxvYXQzMl90b19mbG9hdDY0KFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBv dXRfZjY0ID0gaGV4X2NoZWNrX2RmbmFuKG91dF9mNjQpOworICAgIGFyY2hfZnBvcF9lbmQoZW52 KTsKKyAgICByZXR1cm4gb3V0X2Y2NDsKK30KKworZmxvYXQzMiBIRUxQRVIoY29udl9kZjJzZiko Q1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzVikKK3sKKyAgICBmbG9hdDMyIG91dF9m MzI7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgb3V0X2YzMiA9IGZsb2F0NjRfdG9f ZmxvYXQzMihSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIG91dF9mMzIgPSBoZXhfY2hlY2tf c2ZuYW4ob3V0X2YzMik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBvdXRf ZjMyOworfQorCitmbG9hdDMyIEhFTFBFUihjb252X3V3MnNmKShDUFVIZXhhZ29uU3RhdGUgKmVu diwgaW50MzJfdCBSc1YpCit7CisgICAgZmxvYXQzMiBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0 KGVudik7CisgICAgUmRWID0gdWludDMyX3RvX2Zsb2F0MzIoUnNWLCAmZW52LT5mcF9zdGF0dXMp OworICAgIFJkViA9IGhleF9jaGVja19zZm5hbihSZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52 KTsKKyAgICByZXR1cm4gUmRWOworfQorCitmbG9hdDY0IEhFTFBFUihjb252X3V3MmRmKShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgaW50MzJfdCBSc1YpCit7CisgICAgZmxvYXQ2NCBSZGRWOworICAg IGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkZFYgPSB1aW50MzJfdG9fZmxvYXQ2NChSc1Ys ICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRWKTsKKyAg ICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0MzIgSEVM UEVSKGNvbnZfdzJzZikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDMyX3QgUnNWKQoreworICAg IGZsb2F0MzIgUmRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9IGludDMy X3RvX2Zsb2F0MzIoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkViA9IGhleF9jaGVja19z Zm5hbihSZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQor CitmbG9hdDY0IEhFTFBFUihjb252X3cyZGYpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQzMl90 IFJzVikKK3sKKyAgICBmbG9hdDY0IFJkZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7Cisg ICAgUmRkViA9IGludDMyX3RvX2Zsb2F0NjQoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJk ZFYgPSBoZXhfY2hlY2tfZGZuYW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAg IHJldHVybiBSZGRWOworfQorCitmbG9hdDMyIEhFTFBFUihjb252X3VkMnNmKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgaW50NjRfdCBSc3NWKQoreworICAgIGZsb2F0MzIgUmRWOworICAgIGFyY2hf ZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9IHVpbnQ2NF90b19mbG9hdDMyKFJzc1YsICZlbnYt PmZwX3N0YXR1cyk7CisgICAgUmRWID0gaGV4X2NoZWNrX3NmbmFuKFJkVik7CisgICAgYXJjaF9m cG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVSKGNvbnZf dWQyZGYpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQ2NF90IFJzc1YpCit7CisgICAgZmxvYXQ2 NCBSZGRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkZFYgPSB1aW50NjRfdG9f ZmxvYXQ2NChSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkZFYgPSBoZXhfY2hlY2tfZGZu YW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQor CitmbG9hdDMyIEhFTFBFUihjb252X2Qyc2YpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQ2NF90 IFJzc1YpCit7CisgICAgZmxvYXQzMiBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7Cisg ICAgUmRWID0gaW50NjRfdG9fZmxvYXQzMihSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJk ViA9IGhleF9jaGVja19zZm5hbihSZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICBy ZXR1cm4gUmRWOworfQorCitmbG9hdDY0IEhFTFBFUihjb252X2QyZGYpKENQVUhleGFnb25TdGF0 ZSAqZW52LCBpbnQ2NF90IFJzc1YpCit7CisgICAgZmxvYXQ2NCBSZGRWOworICAgIGFyY2hfZnBv cF9zdGFydChlbnYpOworICAgIFJkZFYgPSBpbnQ2NF90b19mbG9hdDY0KFJzc1YsICZlbnYtPmZw X3N0YXR1cyk7CisgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRWKTsKKyAgICBhcmNoX2Zw b3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZf c2YydXcpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzVikKK3sKKyAgICBpbnQzMl90 IFJkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZFYgPSBjb252X3NmX3RvXzR1 KFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0 dXJuIFJkVjsKK30KKworaW50MzJfdCBIRUxQRVIoY29udl9zZjJ3KShDUFVIZXhhZ29uU3RhdGUg KmVudiwgZmxvYXQzMiBSc1YpCit7CisgICAgaW50MzJfdCBSZFY7CisgICAgYXJjaF9mcG9wX3N0 YXJ0KGVudik7CisgICAgUmRWID0gY29udl9zZl90b180cyhSc1YsICZlbnYtPmZwX3N0YXR1cyk7 CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDY0X3Qg SEVMUEVSKGNvbnZfc2YydWQpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzVikKK3sK KyAgICBpbnQ2NF90IFJkZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRkViA9 IGNvbnZfc2ZfdG9fOHUoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQo ZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50NjRfdCBIRUxQRVIoY29udl9zZjJkKShD UFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YpCit7CisgICAgaW50NjRfdCBSZGRWOwor ICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkZFYgPSBjb252X3NmX3RvXzhzKFJzViwg JmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJk ZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfZGYydXcpKENQVUhleGFnb25TdGF0ZSAqZW52 LCBmbG9hdDY0IFJzc1YpCit7CisgICAgaW50MzJfdCBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0 KGVudik7CisgICAgUmRWID0gY29udl9kZl90b180dShSc3NWLCAmZW52LT5mcF9zdGF0dXMpOwor ICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQzMl90IEhF TFBFUihjb252X2RmMncpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7Cisg ICAgaW50MzJfdCBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRWID0gY29u dl9kZl90b180cyhSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52 KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQ2NF90IEhFTFBFUihjb252X2RmMnVkKShDUFVI ZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAgIGludDY0X3QgUmRkVjsKKyAg ICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZGRWID0gY29udl9kZl90b184dShSc3NWLCAm ZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRk VjsKK30KKworaW50NjRfdCBIRUxQRVIoY29udl9kZjJkKShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQ2NCBSc3NWKQoreworICAgIGludDY0X3QgUmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQo ZW52KTsKKyAgICBSZGRWID0gY29udl9kZl90b184cyhSc3NWLCAmZW52LT5mcF9zdGF0dXMpOwor ICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50MzJfdCBI RUxQRVIoY29udl9zZjJ1d19jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1Yp Cit7CisgICAgaW50MzJfdCBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgc2V0 X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVybywgJmVudi0+ZnBfc3RhdHVz KTsKKyAgICBSZFYgPSBjb252X3NmX3RvXzR1KFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBh cmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50MzJfdCBIRUxQRVIo Y29udl9zZjJ3X2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzVikKK3sKKyAg ICBpbnQzMl90IFJkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRf cm91bmRpbmdfbW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5mcF9zdGF0dXMpOworICAg IFJkViA9IGNvbnZfc2ZfdG9fNHMoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBv cF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQ2NF90IEhFTFBFUihjb252X3Nm MnVkX2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzVikKK3sKKyAgICBpbnQ2 NF90IFJkZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgc2V0X2Zsb2F0X3JvdW5k aW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVybywgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZGRW ID0gY29udl9zZl90b184dShSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2Vu ZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQorCitpbnQ2NF90IEhFTFBFUihjb252X3NmMmRf Y2hvcCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGludDY0X3Qg UmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRfcm91bmRpbmdf bW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkZFYgPSBj b252X3NmX3RvXzhzKFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVu dik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfZGYydXdfY2hv cCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzVikKK3sKKyAgICBpbnQzMl90IFJk VjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRfcm91bmRpbmdfbW9k ZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkViA9IGNvbnZf ZGZfdG9fNHUoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7 CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50MzJfdCBIRUxQRVIoY29udl9kZjJ3X2Nob3ApKENQ VUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAgaW50MzJfdCBSZFY7Cisg ICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgc2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxv YXRfcm91bmRfdG9femVybywgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBjb252X2RmX3Rv XzRzKFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAg IHJldHVybiBSZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNvbnZfZGYydWRfY2hvcCkoQ1BVSGV4 YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzVikKK3sKKyAgICBpbnQ2NF90IFJkZFY7CisgICAg YXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgc2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRf cm91bmRfdG9femVybywgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZGRWID0gY29udl9kZl90b184 dShSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICBy ZXR1cm4gUmRkVjsKK30KKworaW50NjRfdCBIRUxQRVIoY29udl9kZjJkX2Nob3ApKENQVUhleGFn b25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAgaW50NjRfdCBSZGRWOworICAgIGFy Y2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3Jv dW5kX3RvX3plcm8sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRkViA9IGNvbnZfZGZfdG9fOHMo UnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0 dXJuIFJkZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKHNmYWRkKShDUFVIZXhhZ29uU3RhdGUgKmVu diwgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGZsb2F0MzIgUmRWOworICAgIGFy Y2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9IGZsb2F0MzJfYWRkKFJzViwgUnRWLCAmZW52 LT5mcF9zdGF0dXMpOworICAgIFJkViA9IGhleF9jaGVja19zZm5hbihSZFYpOworICAgIGFyY2hf ZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitmbG9hdDMyIEhFTFBFUihzZnN1 YikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAg ICBmbG9hdDMyIFJkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZFYgPSBmbG9h dDMyX3N1YihSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tf c2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30K KworaW50MzJfdCBIRUxQRVIoc2ZjbXBlcSkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIg UnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBpbnQzMl90IFBkVjsKKyAgICBhcmNoX2Zwb3Bfc3Rh cnQoZW52KTsKKyAgICBQZFYgPSBmOEJJVFNPRihmbG9hdDMyX2VxX3F1aWV0KFJzViwgUnRWLCAm ZW52LT5mcF9zdGF0dXMpKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBk VjsKK30KKworaW50MzJfdCBIRUxQRVIoc2ZjbXBndCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZs b2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBpbnQgY21wOworICAgIGludDMyX3QgUGRW OworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGNtcCA9IGZsb2F0MzJfY29tcGFyZV9x dWlldChSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBQZFYgPSBmOEJJVFNPRihjbXAg PT0gZmxvYXRfcmVsYXRpb25fZ3JlYXRlcik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAg IHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKHNmY21wZ2UpKENQVUhleGFnb25TdGF0 ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgaW50IGNtcDsKKyAgICBp bnQzMl90IFBkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBjbXAgPSBmbG9hdDMy X2NvbXBhcmVfcXVpZXQoUnNWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUGRWID0gZjhC SVRTT0YoY21wID09IGZsb2F0X3JlbGF0aW9uX2dyZWF0ZXIgfHwKKyAgICAgICAgICAgICAgICAg ICBjbXAgPT0gZmxvYXRfcmVsYXRpb25fZXF1YWwpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsK KyAgICByZXR1cm4gUGRWOworfQorCitpbnQzMl90IEhFTFBFUihzZmNtcHVvKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGludDMyX3QgUGRW OworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFBkViA9IGY4QklUU09GKGZsb2F0MzJf aXNfYW55X25hbihSc1YpIHx8CisgICAgICAgICAgICAgICAgICAgZmxvYXQzMl9pc19hbnlfbmFu KFJ0VikpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUGRWOworfQorCitm bG9hdDMyIEhFTFBFUihzZm1heCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWLCBm bG9hdDMyIFJ0VikKK3sKKyAgICBmbG9hdDMyIFJkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52 KTsKKyAgICBSZFYgPSBmbG9hdDMyX21heG51bShSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsK KyAgICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7 CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZtaW4pKENQVUhleGFnb25T dGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgZmxvYXQzMiBSZFY7 CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRWID0gZmxvYXQzMl9taW5udW0oUnNW LCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRWID0gaGV4X2NoZWNrX3NmbmFuKFJkVik7 CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDMyX3Qg SEVMUEVSKHNmY2xhc3MpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgaW50MzJf dCB1aVYpCit7CisgICAgaW50MzJfdCBQZFYgPSAwOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYp OworICAgIGlmIChmR0VUQklUKDAsIHVpVikgJiYgZmxvYXQzMl9pc196ZXJvKFJzVikpIHsKKyAg ICAgICAgUGRWID0gMHhmZjsKKyAgICB9CisgICAgaWYgKGZHRVRCSVQoMSwgdWlWKSAmJiBmbG9h dDMyX2lzX25vcm1hbChSc1YpKSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlm IChmR0VUQklUKDIsIHVpVikgJiYgZmxvYXQzMl9pc19kZW5vcm1hbChSc1YpKSB7CisgICAgICAg IFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDMsIHVpVikgJiYgZmxvYXQzMl9p c19pbmZpbml0eShSc1YpKSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChm R0VUQklUKDQsIHVpVikgJiYgZmxvYXQzMl9pc19hbnlfbmFuKFJzVikpIHsKKyAgICAgICAgUGRW ID0gMHhmZjsKKyAgICB9CisgICAgc2V0X2Zsb2F0X2V4Y2VwdGlvbl9mbGFncygwLCAmZW52LT5m cF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUGRWOworfQor CitmbG9hdDMyIEhFTFBFUihzZmZpeHVwbikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIg UnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBmbG9hdDMyIFJkViA9IDA7CisgICAgaW50IGFkanVz dDsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBhcmNoX3NmX3JlY2lwX2NvbW1vbigm UnNWLCAmUnRWLCAmUmRWLCAmYWRqdXN0LCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkViA9IFJz VjsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQz MiBIRUxQRVIoc2ZmaXh1cGQpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxv YXQzMiBSdFYpCit7CisgICAgZmxvYXQzMiBSZFYgPSAwOworICAgIGludCBhZGp1c3Q7CisgICAg YXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgYXJjaF9zZl9yZWNpcF9jb21tb24oJlJzViwgJlJ0 ViwgJlJkViwgJmFkanVzdCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBSdFY7CisgICAg YXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVS KHNmZml4dXByKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YpCit7CisgICAgZmxv YXQzMiBSZFYgPSAwOworICAgIGludCBhZGp1c3Q7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7 CisgICAgYXJjaF9zZl9pbnZzcXJ0X2NvbW1vbigmUnNWLCAmUmRWLCAmYWRqdXN0LCAmZW52LT5m cF9zdGF0dXMpOworICAgIFJkViA9IFJzVjsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAg cmV0dXJuIFJkVjsKK30KKworZmxvYXQ2NCBIRUxQRVIoZGZhZGQpKENQVUhleGFnb25TdGF0ZSAq ZW52LCBmbG9hdDY0IFJzc1YsIGZsb2F0NjQgUnR0VikKK3sKKyAgICBmbG9hdDY0IFJkZFY7Cisg ICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRkViA9IGZsb2F0NjRfYWRkKFJzc1YsIFJ0 dFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRkViA9IGhleF9jaGVja19kZm5hbihSZGRWKTsK KyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2Zsb2F0NjQg SEVMUEVSKGRmc3ViKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0 IFJ0dFYpCit7CisgICAgZmxvYXQ2NCBSZGRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIFJkZFYgPSBmbG9hdDY0X3N1YihSc3NWLCBSdHRWLCAmZW52LT5mcF9zdGF0dXMpOworICAg IFJkZFYgPSBoZXhfY2hlY2tfZGZuYW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOwor ICAgIHJldHVybiBSZGRWOworfQorCitmbG9hdDY0IEhFTFBFUihkZm1heCkoQ1BVSGV4YWdvblN0 YXRlICplbnYsIGZsb2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAgIGZsb2F0NjQgUmRk VjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZGRWID0gZmxvYXQ2NF9tYXhudW0o UnNzViwgUnR0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpZiAoZmxvYXQ2NF9pc19hbnlfbmFu KFJzc1YpIHx8IGZsb2F0NjRfaXNfYW55X25hbihSdHRWKSkgeworICAgICAgICBmbG9hdF9yYWlz ZShmbG9hdF9mbGFnX2ludmFsaWQsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgfQorICAgIFJkZFYg PSBoZXhfY2hlY2tfZGZuYW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJl dHVybiBSZGRWOworfQorCitmbG9hdDY0IEhFTFBFUihkZm1pbikoQ1BVSGV4YWdvblN0YXRlICpl bnYsIGZsb2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAgIGZsb2F0NjQgUmRkVjsKKyAg ICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZGRWID0gZmxvYXQ2NF9taW5udW0oUnNzViwg UnR0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpZiAoZmxvYXQ2NF9pc19hbnlfbmFuKFJzc1Yp IHx8IGZsb2F0NjRfaXNfYW55X25hbihSdHRWKSkgeworICAgICAgICBmbG9hdF9yYWlzZShmbG9h dF9mbGFnX2ludmFsaWQsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgfQorICAgIFJkZFYgPSBoZXhf Y2hlY2tfZGZuYW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBS ZGRWOworfQorCitpbnQzMl90IEhFTFBFUihkZmNtcGVxKShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgaW50MzJfdCBQZFY7CisgICAgYXJj aF9mcG9wX3N0YXJ0KGVudik7CisgICAgUGRWID0gZjhCSVRTT0YoZmxvYXQ2NF9lcV9xdWlldChS c3NWLCBSdHRWLCAmZW52LT5mcF9zdGF0dXMpKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7Cisg ICAgcmV0dXJuIFBkVjsKK30KKworaW50MzJfdCBIRUxQRVIoZGZjbXBndCkoQ1BVSGV4YWdvblN0 YXRlICplbnYsIGZsb2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAgIGludCBjbXA7Cisg ICAgaW50MzJfdCBQZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgY21wID0gZmxv YXQ2NF9jb21wYXJlX3F1aWV0KFJzc1YsIFJ0dFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUGRW ID0gZjhCSVRTT0YoY21wID09IGZsb2F0X3JlbGF0aW9uX2dyZWF0ZXIpOworICAgIGFyY2hfZnBv cF9lbmQoZW52KTsKKyAgICByZXR1cm4gUGRWOworfQorCitpbnQzMl90IEhFTFBFUihkZmNtcGdl KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7Cisg ICAgaW50IGNtcDsKKyAgICBpbnQzMl90IFBkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsK KyAgICBjbXAgPSBmbG9hdDY0X2NvbXBhcmVfcXVpZXQoUnNzViwgUnR0ViwgJmVudi0+ZnBfc3Rh dHVzKTsKKyAgICBQZFYgPSBmOEJJVFNPRihjbXAgPT0gZmxvYXRfcmVsYXRpb25fZ3JlYXRlciB8 fAorICAgICAgICAgICAgICAgICAgIGNtcCA9PSBmbG9hdF9yZWxhdGlvbl9lcXVhbCk7CisgICAg YXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVMUEVS KGRmY21wdW8pKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YsIGZsb2F0NjQgUnR0 VikKK3sKKyAgICBpbnQzMl90IFBkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBQ ZFYgPSBmOEJJVFNPRihmbG9hdDY0X2lzX2FueV9uYW4oUnNzVikgfHwKKyAgICAgICAgICAgICAg ICAgICBmbG9hdDY0X2lzX2FueV9uYW4oUnR0VikpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsK KyAgICByZXR1cm4gUGRWOworfQorCitpbnQzMl90IEhFTFBFUihkZmNsYXNzKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBpbnQzMl90IHVpVikKK3sKKyAgICBpbnQzMl90IFBk ViA9IDA7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgaWYgKGZHRVRCSVQoMCwgdWlW KSAmJiBmbG9hdDY0X2lzX3plcm8oUnNzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9 CisgICAgaWYgKGZHRVRCSVQoMSwgdWlWKSAmJiBmbG9hdDY0X2lzX25vcm1hbChSc3NWKSkgewor ICAgICAgICBQZFYgPSAweGZmOworICAgIH0KKyAgICBpZiAoZkdFVEJJVCgyLCB1aVYpICYmIGZs b2F0NjRfaXNfZGVub3JtYWwoUnNzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9Cisg ICAgaWYgKGZHRVRCSVQoMywgdWlWKSAmJiBmbG9hdDY0X2lzX2luZmluaXR5KFJzc1YpKSB7Cisg ICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDQsIHVpVikgJiYgZmxv YXQ2NF9pc19hbnlfbmFuKFJzc1YpKSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAg IHNldF9mbG9hdF9leGNlcHRpb25fZmxhZ3MoMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNo X2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2Zt cHkpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7Cisg ICAgZmxvYXQzMiBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRWID0gaW50 ZXJuYWxfbXB5ZihSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hl Y2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsK K30KKworZmxvYXQzMiBIRUxQRVIoc2ZmbWEpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMy IFJ4ViwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7 CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUnhWID0gaW50ZXJuYWxfZm1hZngoUnNW LCBSdFYsIFJ4ViwgMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBoZXhfY2hlY2tfc2Zu YW4oUnhWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJ4VjsKK30KKwor c3RhdGljIGJvb2wgaXNfemVyb19wcm9kKGZsb2F0MzIgYSwgZmxvYXQzMiBiKQoreworICAgIHJl dHVybiAoKGZsb2F0MzJfaXNfemVybyhhKSAmJiBpc19maW5pdGUoYikpIHx8CisgICAgICAgICAg ICAoZmxvYXQzMl9pc196ZXJvKGIpICYmIGlzX2Zpbml0ZShhKSkpOworfQorCitzdGF0aWMgZmxv YXQzMiBjaGVja19uYW4oZmxvYXQzMiBkc3QsIGZsb2F0MzIgeCwgZmxvYXRfc3RhdHVzICpmcF9z dGF0dXMpCit7CisgICAgZmxvYXQzMiByZXQgPSBkc3Q7CisgICAgaWYgKGZsb2F0MzJfaXNfYW55 X25hbih4KSkgeworICAgICAgICBpZiAoZXh0cmFjdDMyKHgsIDIyLCAxKSA9PSAwKSB7CisgICAg ICAgICAgICBmbG9hdF9yYWlzZShmbG9hdF9mbGFnX2ludmFsaWQsIGZwX3N0YXR1cyk7CisgICAg ICAgIH0KKyAgICAgICAgcmV0ID0gbWFrZV9mbG9hdDMyKDB4ZmZmZmZmZmYpOyAgICAvKiBuYW4g Ki8KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZmbWFfc2Mp KENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYsIGZsb2F0MzIgUHVWKQoreworICAgIHNpemU0 c190IHRtcDsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSeFYgPSBjaGVja19uYW4o UnhWLCBSeFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnNW LCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9IGNoZWNrX25hbihSeFYsIFJ0ViwgJmVudi0+ ZnBfc3RhdHVzKTsKKyAgICB0bXAgPSBpbnRlcm5hbF9mbWFmeChSc1YsIFJ0ViwgUnhWLCBmU1hU Tig4LCA2NCwgUHVWKSwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICB0bXAgPSBoZXhfY2hlY2tfc2Zu YW4odG1wKTsKKyAgICBpZiAoIShmbG9hdDMyX2lzX3plcm8oUnhWKSAmJiBpc196ZXJvX3Byb2Qo UnNWLCBSdFYpKSkgeworICAgICAgICBSeFYgPSB0bXA7CisgICAgfQorICAgIGFyY2hfZnBvcF9l bmQoZW52KTsKKyAgICByZXR1cm4gUnhWOworfQorCitmbG9hdDMyIEhFTFBFUihzZmZtcykoQ1BV SGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnhWLAorICAgICAgICAgICAgICAgICAgICAgIGZs b2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBmbG9hdDMyIG5lZ19Sc1Y7CisgICAgYXJj aF9mcG9wX3N0YXJ0KGVudik7CisgICAgbmVnX1JzViA9IGZsb2F0MzJfc3ViKGZsb2F0MzJfemVy bywgUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9IGludGVybmFsX2ZtYWZ4KG5lZ19S c1YsIFJ0ViwgUnhWLCAwLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9IGhleF9jaGVja19z Zm5hbihSeFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUnhWOworfQor CitzdGF0aWMgaW5saW5lIGJvb2wgaXNfaW5mX3Byb2QoaW50MzJfdCBhLCBpbnQzMl90IGIpCit7 CisgICAgcmV0dXJuIChmbG9hdDMyX2lzX2luZmluaXR5KGEpICYmIGZsb2F0MzJfaXNfaW5maW5p dHkoYikpIHx8CisgICAgICAgICAgIChmbG9hdDMyX2lzX2luZmluaXR5KGEpICYmIGlzX2Zpbml0 ZShiKSAmJiAhZmxvYXQzMl9pc196ZXJvKGIpKSB8fAorICAgICAgICAgICAoZmxvYXQzMl9pc19p bmZpbml0eShiKSAmJiBpc19maW5pdGUoYSkgJiYgIWZsb2F0MzJfaXNfemVybyhhKSk7Cit9CisK K2Zsb2F0MzIgSEVMUEVSKHNmZm1hX2xpYikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIg UnhWLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYp Cit7CisgICAgaW50IGluZmlucDsKKyAgICBpbnQgaW5mbWludXNpbmY7CisgICAgZmxvYXQzMiB0 bXA7CisKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRfcm91bmRpbmdf bW9kZShmbG9hdF9yb3VuZF9uZWFyZXN0X2V2ZW4sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW5m bWludXNpbmYgPSBmbG9hdDMyX2lzX2luZmluaXR5KFJ4VikgJiYKKyAgICAgICAgICAgICAgICAg IGlzX2luZl9wcm9kKFJzViwgUnRWKSAmJgorICAgICAgICAgICAgICAgICAgKGZHRVRCSVQoMzEs IFJzViBeIFJ4ViBeIFJ0VikgIT0gMCk7CisgICAgaW5maW5wID0gZmxvYXQzMl9pc19pbmZpbml0 eShSeFYpIHx8CisgICAgICAgICAgICAgZmxvYXQzMl9pc19pbmZpbml0eShSdFYpIHx8CisgICAg ICAgICAgICAgZmxvYXQzMl9pc19pbmZpbml0eShSc1YpOworICAgIFJ4ViA9IGNoZWNrX25hbihS eFYsIFJ4ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBjaGVja19uYW4oUnhWLCBSc1Ys ICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnRWLCAmZW52LT5m cF9zdGF0dXMpOworICAgIHRtcCA9IGludGVybmFsX2ZtYWZ4KFJzViwgUnRWLCBSeFYsIDAsICZl bnYtPmZwX3N0YXR1cyk7CisgICAgdG1wID0gaGV4X2NoZWNrX3NmbmFuKHRtcCk7CisgICAgaWYg KCEoZmxvYXQzMl9pc196ZXJvKFJ4VikgJiYgaXNfemVyb19wcm9kKFJzViwgUnRWKSkpIHsKKyAg ICAgICAgUnhWID0gdG1wOworICAgIH0KKyAgICBzZXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzKDAs ICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaWYgKGZsb2F0MzJfaXNfaW5maW5pdHkoUnhWKSAmJiAh aW5maW5wKSB7CisgICAgICAgIFJ4ViA9IFJ4ViAtIDE7CisgICAgfQorICAgIGlmIChpbmZtaW51 c2luZikgeworICAgICAgICBSeFYgPSAwOworICAgIH0KKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7 CisgICAgcmV0dXJuIFJ4VjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZmbXNfbGliKShDUFVIZXhh Z29uU3RhdGUgKmVudiwgZmxvYXQzMiBSeFYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZs b2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBpbnQgaW5maW5wOworICAgIGludCBpbmZt aW51c2luZjsKKyAgICBmbG9hdDMyIHRtcDsKKworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX25lYXJlc3RfZXZlbiwgJmVu di0+ZnBfc3RhdHVzKTsKKyAgICBpbmZtaW51c2luZiA9IGZsb2F0MzJfaXNfaW5maW5pdHkoUnhW KSAmJgorICAgICAgICAgICAgICAgICAgaXNfaW5mX3Byb2QoUnNWLCBSdFYpICYmCisgICAgICAg ICAgICAgICAgICAoZkdFVEJJVCgzMSwgUnNWIF4gUnhWIF4gUnRWKSA9PSAwKTsKKyAgICBpbmZp bnAgPSBmbG9hdDMyX2lzX2luZmluaXR5KFJ4VikgfHwKKyAgICAgICAgICAgICBmbG9hdDMyX2lz X2luZmluaXR5KFJ0VikgfHwKKyAgICAgICAgICAgICBmbG9hdDMyX2lzX2luZmluaXR5KFJzVik7 CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnhWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4 ViA9IGNoZWNrX25hbihSeFYsIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBjaGVj a19uYW4oUnhWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgZmxvYXQzMiBtaW51c19Sc1Yg PSBmbG9hdDMyX3N1YihmbG9hdDMyX3plcm8sIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICB0 bXAgPSBpbnRlcm5hbF9mbWFmeChtaW51c19Sc1YsIFJ0ViwgUnhWLCAwLCAmZW52LT5mcF9zdGF0 dXMpOworICAgIHRtcCA9IGhleF9jaGVja19zZm5hbih0bXApOworICAgIGlmICghKGZsb2F0MzJf aXNfemVybyhSeFYpICYmIGlzX3plcm9fcHJvZChSc1YsIFJ0VikpKSB7CisgICAgICAgIFJ4ViA9 IHRtcDsKKyAgICB9CisgICAgc2V0X2Zsb2F0X2V4Y2VwdGlvbl9mbGFncygwLCAmZW52LT5mcF9z dGF0dXMpOworICAgIGlmIChmbG9hdDMyX2lzX2luZmluaXR5KFJ4VikgJiYgIWluZmlucCkgewor ICAgICAgICBSeFYgPSBSeFYgLSAxOworICAgIH0KKyAgICBpZiAoaW5mbWludXNpbmYpIHsKKyAg ICAgICAgUnhWID0gMDsKKyAgICB9CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVy biBSeFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVSKGRmbXB5Zml4KShDUFVIZXhhZ29uU3RhdGUgKmVu diwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgaW50NjRfdCBSZGRWOworICAg IGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGlmIChmbG9hdDY0X2lzX2Rlbm9ybWFsKFJzc1Yp ICYmCisgICAgICAgIChmbG9hdDY0X2dldGV4cChSdHRWKSA+PSA1MTIpICYmCisgICAgICAgIGZs b2F0NjRfaXNfbm9ybWFsKFJ0dFYpKSB7CisgICAgICAgIFJkZFYgPSBmbG9hdDY0X211bChSc3NW LCBtYWtlX2Zsb2F0NjQoMHg0MzMwMDAwMDAwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICZlbnYtPmZwX3N0YXR1cyk7CisgICAgICAgIFJkZFYgPSBoZXhfY2hlY2tfZGZuYW4o UmRkVik7CisgICAgfSBlbHNlIGlmIChmbG9hdDY0X2lzX2Rlbm9ybWFsKFJ0dFYpICYmCisgICAg ICAgICAgICAgICAoZmxvYXQ2NF9nZXRleHAoUnNzVikgPj0gNTEyKSAmJgorICAgICAgICAgICAg ICAgZmxvYXQ2NF9pc19ub3JtYWwoUnNzVikpIHsKKyAgICAgICAgUmRkViA9IGZsb2F0NjRfbXVs KFJzc1YsIG1ha2VfZmxvYXQ2NCgweDNjYjAwMDAwMDAwMDAwMDApLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICAgICAgUmRkViA9IGhleF9jaGVja19k Zm5hbihSZGRWKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZGRWID0gUnNzVjsKKyAgICB9Cisg ICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQorCitmbG9hdDY0IEhF TFBFUihkZm1weWhoKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSeHhWLAorICAgICAg ICAgICAgICAgICAgICAgICAgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgYXJj aF9mcG9wX3N0YXJ0KGVudik7CisgICAgUnh4ViA9IGludGVybmFsX21weWhoKFJzc1YsIFJ0dFYs IFJ4eFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUnh4ViA9IGhleF9jaGVja19kZm5hbihSeHhW KTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJ4eFY7Cit9CisKK3N0YXRp YyB2b2lkIGNhbmNlbF9zbG90KENQVUhleGFnb25TdGF0ZSAqZW52LCB1aW50MzJfdCBzbG90KQor eworICAgIEhFWF9ERUJVR19MT0coIlNsb3QgJWQgY2FuY2VsbGVkXG4iLCBzbG90KTsKKyAgICBl bnYtPnNsb3RfY2FuY2VsbGVkIHw9ICgxIDw8IHNsb3QpOworfQorCisvKiBUaGVzZSBtYWNyb3Mg Y2FuIGJlIHJlZmVyZW5jZWQgaW4gdGhlIGdlbmVyYXRlZCBoZWxwZXIgZnVuY3Rpb25zICovCisj ZGVmaW5lIHdhcm4oLi4uKSAvKiBOb3RoaW5nICovCisjZGVmaW5lIGZhdGFsKC4uLikgZ19hc3Nl cnRfbm90X3JlYWNoZWQoKTsKKworI2RlZmluZSBCT0dVU19IRUxQRVIodGFnKSBcCisgICAgcHJp bnRmKCJFUlJPUjogYm9ndXMgaGVscGVyOiAiICN0YWcgIlxuIikKKworI2luY2x1ZGUgImhlbHBl cl9mdW5jc19nZW5lcmF0ZWQuYy5pbmMiCi0tIAoyLjcuNAoK