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 43EEEC433E0 for ; Wed, 20 Jan 2021 03:37:11 +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 484BE22509 for ; Wed, 20 Jan 2021 03:37:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 484BE22509 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]:60050 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l24Iu-0007rg-RN for qemu-devel@archiver.kernel.org; Tue, 19 Jan 2021 22:37:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47514) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l24Bh-0007Gv-Jo for qemu-devel@nongnu.org; Tue, 19 Jan 2021 22:29:41 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:9632) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l24Bb-0007VI-Ng for qemu-devel@nongnu.org; Tue, 19 Jan 2021 22:29:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1611113375; x=1642649375; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+vm1cWHJZ48BTXVvu8xfv6zWU2soQK1GD4FxA8AdyG8=; b=Rc+Og0jmRI20N28lJBI1Nt8QIqKbLKTjLKp8cr9lPmViozQTciqYOcnz c5QOGmP9e5MFEtLmilw/Knt2eJA3znBPR7FDzRKSXO9V0CDR7PPiRBTBG jZ1JE535jqK3ws74p2DRcDi+wYuQQS6XZn766YRFkFVa7zkHyv5ET/ORP A=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-01.qualcomm.com with ESMTP; 19 Jan 2021 19:29:25 -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; 19 Jan 2021 19:29:25 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 98E0B2B08; Tue, 19 Jan 2021 21:29:24 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v7 07/35] Hexagon (target/hexagon) scalar core helpers Date: Tue, 19 Jan 2021 21:28:40 -0600 Message-Id: <1611113349-24906-8-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1611113349-24906-1-git-send-email-tsimpson@quicinc.com> References: <1611113349-24906-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.248, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, bcain@quicinc.com, philmd@redhat.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGhlIG1ham9yaXR5IG9mIGhlbHBlcnMgYXJlIGdlbmVyYXRlZC4gIERlZmluZSB0aGUgaGVscGVy IGZ1bmN0aW9ucyBuZWVkZWQKdGhlbiBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgZmlsZQoKU2lnbmVk LW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdl dC9oZXhhZ29uL2hlbHBlci5oICAgIHwgICA4NSArKysrCiB0YXJnZXQvaGV4YWdvbi9vcF9oZWxw ZXIuYyB8IDEwNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMTE1MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg dGFyZ2V0L2hleGFnb24vaGVscGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdv bi9vcF9oZWxwZXIuYwoKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2hlbHBlci5oIGIvdGFy Z2V0L2hleGFnb24vaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YTNlZDA2ZAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2hlbHBlci5oCkBAIC0w LDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworREVGX0hFTFBFUl9GTEFHU18yKHJh aXNlX2V4Y2VwdGlvbiwgVENHX0NBTExfTk9fUkVUVVJOLCBub3JldHVybiwgZW52LCBpMzIpCitE RUZfSEVMUEVSXzEoZGVidWdfc3RhcnRfcGFja2V0LCB2b2lkLCBlbnYpCitERUZfSEVMUEVSX0ZM QUdTXzMoZGVidWdfY2hlY2tfc3RvcmVfd2lkdGgsIFRDR19DQUxMX05PX1dHLCB2b2lkLCBlbnYs IGludCwgaW50KQorREVGX0hFTFBFUl8yKGNvbW1pdF9zdG9yZSwgdm9pZCwgZW52LCBpbnQpCitE RUZfSEVMUEVSX0ZMQUdTXzMoZGVidWdfY29tbWl0X2VuZCwgVENHX0NBTExfTk9fV0csIHZvaWQs IGVudiwgaW50LCBpbnQpCitERUZfSEVMUEVSX0ZMQUdTXzQoZmNpcmNhZGQsIFRDR19DQUxMX05P X1JXR19TRSwgczMyLCBzMzIsIHMzMiwgczMyLCBzMzIpCisKKy8qIEZsb2F0aW5nIHBvaW50ICov CitERUZfSEVMUEVSXzIoY29udl9zZjJkZiwgZjY0LCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihj b252X2RmMnNmLCBmMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfdXcyc2YsIGYzMiwg ZW52LCBzMzIpCitERUZfSEVMUEVSXzIoY29udl91dzJkZiwgZjY0LCBlbnYsIHMzMikKK0RFRl9I RUxQRVJfMihjb252X3cyc2YsIGYzMiwgZW52LCBzMzIpCitERUZfSEVMUEVSXzIoY29udl93MmRm LCBmNjQsIGVudiwgczMyKQorREVGX0hFTFBFUl8yKGNvbnZfdWQyc2YsIGYzMiwgZW52LCBzNjQp CitERUZfSEVMUEVSXzIoY29udl91ZDJkZiwgZjY0LCBlbnYsIHM2NCkKK0RFRl9IRUxQRVJfMihj b252X2Qyc2YsIGYzMiwgZW52LCBzNjQpCitERUZfSEVMUEVSXzIoY29udl9kMmRmLCBmNjQsIGVu diwgczY0KQorREVGX0hFTFBFUl8yKGNvbnZfc2YydXcsIHMzMiwgZW52LCBmMzIpCitERUZfSEVM UEVSXzIoY29udl9zZjJ3LCBzMzIsIGVudiwgZjMyKQorREVGX0hFTFBFUl8yKGNvbnZfc2YydWQs IHM2NCwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9zZjJkLCBzNjQsIGVudiwgZjMyKQor REVGX0hFTFBFUl8yKGNvbnZfZGYydXcsIHMzMiwgZW52LCBmNjQpCitERUZfSEVMUEVSXzIoY29u dl9kZjJ3LCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYydWQsIHM2NCwgZW52 LCBmNjQpCitERUZfSEVMUEVSXzIoY29udl9kZjJkLCBzNjQsIGVudiwgZjY0KQorREVGX0hFTFBF Ul8yKGNvbnZfc2YydXdfY2hvcCwgczMyLCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X3Nm MndfY2hvcCwgczMyLCBlbnYsIGYzMikKK0RFRl9IRUxQRVJfMihjb252X3NmMnVkX2Nob3AsIHM2 NCwgZW52LCBmMzIpCitERUZfSEVMUEVSXzIoY29udl9zZjJkX2Nob3AsIHM2NCwgZW52LCBmMzIp CitERUZfSEVMUEVSXzIoY29udl9kZjJ1d19jaG9wLCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBF Ul8yKGNvbnZfZGYyd19jaG9wLCBzMzIsIGVudiwgZjY0KQorREVGX0hFTFBFUl8yKGNvbnZfZGYy dWRfY2hvcCwgczY0LCBlbnYsIGY2NCkKK0RFRl9IRUxQRVJfMihjb252X2RmMmRfY2hvcCwgczY0 LCBlbnYsIGY2NCkKK0RFRl9IRUxQRVJfMyhzZmFkZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQorREVG X0hFTFBFUl8zKHNmc3ViLCBmMzIsIGVudiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZjbXBl cSwgczMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmY21wZ3QsIHMzMiwgZW52LCBm MzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmNtcGdlLCBzMzIsIGVudiwgZjMyLCBmMzIpCitERUZf SEVMUEVSXzMoc2ZjbXB1bywgczMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8zKHNmbWF4 LCBmMzIsIGVudiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzMoc2ZtaW4sIGYzMiwgZW52LCBmMzIs IGYzMikKK0RFRl9IRUxQRVJfMyhzZmNsYXNzLCBzMzIsIGVudiwgZjMyLCBzMzIpCitERUZfSEVM UEVSXzMoc2ZmaXh1cG4sIGYzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfMyhzZmZpeHVw ZCwgZjMyLCBlbnYsIGYzMiwgZjMyKQorREVGX0hFTFBFUl8yKHNmZml4dXByLCBmMzIsIGVudiwg ZjMyKQorCitERUZfSEVMUEVSXzMoZGZhZGQsIGY2NCwgZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQ RVJfMyhkZnN1YiwgZjY0LCBlbnYsIGY2NCwgZjY0KQorREVGX0hFTFBFUl8zKGRmbWF4LCBmNjQs IGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMoZGZtaW4sIGY2NCwgZW52LCBmNjQsIGY2NCkK K0RFRl9IRUxQRVJfMyhkZmNtcGVxLCBzMzIsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzMo ZGZjbXBndCwgczMyLCBlbnYsIGY2NCwgZjY0KQorREVGX0hFTFBFUl8zKGRmY21wZ2UsIHMzMiwg ZW52LCBmNjQsIGY2NCkKK0RFRl9IRUxQRVJfMyhkZmNtcHVvLCBzMzIsIGVudiwgZjY0LCBmNjQp CitERUZfSEVMUEVSXzMoZGZjbGFzcywgczMyLCBlbnYsIGY2NCwgczMyKQorCitERUZfSEVMUEVS XzMoc2ZtcHksIGYzMiwgZW52LCBmMzIsIGYzMikKK0RFRl9IRUxQRVJfNChzZmZtYSwgZjMyLCBl bnYsIGYzMiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzUoc2ZmbWFfc2MsIGYzMiwgZW52LCBmMzIs IGYzMiwgZjMyLCBmMzIpCitERUZfSEVMUEVSXzQoc2ZmbXMsIGYzMiwgZW52LCBmMzIsIGYzMiwg ZjMyKQorREVGX0hFTFBFUl80KHNmZm1hX2xpYiwgZjMyLCBlbnYsIGYzMiwgZjMyLCBmMzIpCitE RUZfSEVMUEVSXzQoc2ZmbXNfbGliLCBmMzIsIGVudiwgZjMyLCBmMzIsIGYzMikKKworREVGX0hF TFBFUl8zKGRmbXB5Zml4LCBmNjQsIGVudiwgZjY0LCBmNjQpCitERUZfSEVMUEVSXzQoZGZtcHlo aCwgZjY0LCBlbnYsIGY2NCwgZjY0LCBmNjQpCisKKyNpbmNsdWRlICJoZWxwZXJfcHJvdG9zX2dl bmVyYXRlZC5oIgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vb3BfaGVscGVyLmMgYi90YXJn ZXQvaGV4YWdvbi9vcF9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li41MTg2ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vb3BfaGVscGVyLmMK QEAgLTAsMCArMSwxMDY2IEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjEgUXVhbGNv bW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJxZW11 L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS5oIgorI2luY2x1ZGUgImV4ZWMvaGVscGVyLXByb3Rv LmgiCisjaW5jbHVkZSAiZnB1L3NvZnRmbG9hdC5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1 ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAibWFjcm9zLmgiCisjaW5jbHVkZSAiYXJjaC5oIgor I2luY2x1ZGUgImhleF9hcmNoX3R5cGVzLmgiCisjaW5jbHVkZSAiZm1hX2VtdS5oIgorI2luY2x1 ZGUgImNvbnZfZW11LmgiCisKKyNkZWZpbmUgU0ZfQklBUyAgICAgICAgMTI3CisjZGVmaW5lIFNG X01BTlRCSVRTICAgIDIzCisKKy8qIEV4Y2VwdGlvbnMgcHJvY2Vzc2luZyBoZWxwZXJzICovCitz dGF0aWMgdm9pZCBRRU1VX05PUkVUVVJOIGRvX3JhaXNlX2V4Y2VwdGlvbl9lcnIoQ1BVSGV4YWdv blN0YXRlICplbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBwYykKK3sKKyAgICBDUFVTdGF0ZSAqY3MgPSBD UFUoaGV4YWdvbl9lbnZfZ2V0X2NwdShlbnYpKTsKKyAgICBxZW11X2xvZ19tYXNrKENQVV9MT0df SU5ULCAiJXM6ICVkXG4iLCBfX2Z1bmNfXywgZXhjZXB0aW9uKTsKKyAgICBjcy0+ZXhjZXB0aW9u X2luZGV4ID0gZXhjZXB0aW9uOworICAgIGNwdV9sb29wX2V4aXRfcmVzdG9yZShjcywgcGMpOwor fQorCit2b2lkIFFFTVVfTk9SRVRVUk4gSEVMUEVSKHJhaXNlX2V4Y2VwdGlvbikoQ1BVSGV4YWdv blN0YXRlICplbnYsIHVpbnQzMl90IGV4Y3ApCit7CisgICAgZG9fcmFpc2VfZXhjZXB0aW9uX2Vy cihlbnYsIGV4Y3AsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nX3JlZ193cml0ZShD UFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHJudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0YXJnZXRfdWxvbmcgdmFsLCB1aW50MzJfdCBzbG90KQoreworICAgIEhFWF9ERUJV R19MT0coImxvZ19yZWdfd3JpdGVbJWRdID0gIiBUQVJHRVRfRk1UX2xkICIgKDB4IiBUQVJHRVRf Rk1UX2x4ICIpIiwKKyAgICAgICAgICAgICAgICAgIHJudW0sIHZhbCwgdmFsKTsKKyAgICBpZiAo ZW52LT5zbG90X2NhbmNlbGxlZCAmICgxIDw8IHNsb3QpKSB7CisgICAgICAgIEhFWF9ERUJVR19M T0coIiBDQU5DRUxMRUQiKTsKKyAgICB9CisgICAgaWYgKHZhbCA9PSBlbnYtPmdwcltybnVtXSkg eworICAgICAgICBIRVhfREVCVUdfTE9HKCIgTk8gQ0hBTkdFIik7CisgICAgfQorICAgIEhFWF9E RUJVR19MT0coIlxuIik7CisgICAgaWYgKCEoZW52LT5zbG90X2NhbmNlbGxlZCAmICgxIDw8IHNs b3QpKSkgeworICAgICAgICBlbnYtPm5ld192YWx1ZVtybnVtXSA9IHZhbDsKKyNpZiBIRVhfREVC VUcKKyAgICAgICAgLyogRG8gdGhpcyBzbyBIRUxQRVIoZGVidWdfY29tbWl0X2VuZCkgd2lsbCBr bm93ICovCisgICAgICAgIGVudi0+cmVnX3dyaXR0ZW5bcm51bV0gPSAxOworI2VuZGlmCisgICAg fQorfQorCitzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK2lubGluZSB2b2lkIGxvZ19y ZWdfd3JpdGVfcGFpcihDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHJudW0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdmFsLCB1aW50MzJfdCBzbG90KQor eworICAgIEhFWF9ERUJVR19MT0coImxvZ19yZWdfd3JpdGVfcGFpclslZDolZF0gPSAlbGRcbiIs IHJudW0gKyAxLCBybnVtLCB2YWwpOworICAgIGxvZ19yZWdfd3JpdGUoZW52LCBybnVtLCB2YWwg JiAweEZGRkZGRkZGLCBzbG90KTsKKyAgICBsb2dfcmVnX3dyaXRlKGVudiwgcm51bSArIDEsICh2 YWwgPj4gMzIpICYgMHhGRkZGRkZGRiwgc2xvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBs b2dfcHJlZF93cml0ZShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHBudW0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25nIHZhbCkKK3sKKyAgICBIRVhfREVC VUdfTE9HKCJsb2dfcHJlZF93cml0ZVslZF0gPSAiIFRBUkdFVF9GTVRfbGQKKyAgICAgICAgICAg ICAgICAgICIgKDB4IiBUQVJHRVRfRk1UX2x4ICIpXG4iLAorICAgICAgICAgICAgICAgICAgcG51 bSwgdmFsLCB2YWwpOworCisgICAgLyogTXVsdGlwbGUgd3JpdGVzIHRvIHRoZSBzYW1lIHByZWcg YXJlIGFuZCdlZCB0b2dldGhlciAqLworICAgIGlmIChlbnYtPnByZWRfd3JpdHRlbiAmICgxIDw8 IHBudW0pKSB7CisgICAgICAgIGVudi0+bmV3X3ByZWRfdmFsdWVbcG51bV0gJj0gdmFsICYgMHhm ZjsKKyAgICB9IGVsc2UgeworICAgICAgICBlbnYtPm5ld19wcmVkX3ZhbHVlW3BudW1dID0gdmFs ICYgMHhmZjsKKyAgICAgICAgZW52LT5wcmVkX3dyaXR0ZW4gfD0gMSA8PCBwbnVtOworICAgIH0K K30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ19zdG9yZTMyKENQVUhleGFnb25TdGF0ZSAqZW52 LCB0YXJnZXRfdWxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn ZXRfdWxvbmcgdmFsLCBpbnQgd2lkdGgsIGludCBzbG90KQoreworICAgIEhFWF9ERUJVR19MT0co ImxvZ19zdG9yZSVkKDB4IiBUQVJHRVRfRk1UX2x4ICIsICIgVEFSR0VUX0ZNVF9sZAorICAgICAg ICAgICAgICAgICAgIiBbMHgiIFRBUkdFVF9GTVRfbHggIl0pXG4iLAorICAgICAgICAgICAgICAg ICAgd2lkdGgsIGFkZHIsIHZhbCwgdmFsKTsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3Rd LnZhID0gYWRkcjsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLndpZHRoID0gd2lkdGg7 CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhMzIgPSB2YWw7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBsb2dfc3RvcmU2NChDUFVIZXhhZ29uU3RhdGUgKmVudiwgdGFyZ2V0X3Vs b25nIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWwsIGlu dCB3aWR0aCwgaW50IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygibG9nX3N0b3JlJWQoMHgi IFRBUkdFVF9GTVRfbHggIiwgJWxkIFsweCVseF0pXG4iLAorICAgICAgICAgICAgICAgICAgIHdp ZHRoLCBhZGRyLCB2YWwsIHZhbCk7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52YSA9 IGFkZHI7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53aWR0aCA9IHdpZHRoOworICAg IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTY0ID0gdmFsOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgd3JpdGVfbmV3X3BjKENQVUhleGFnb25TdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcg YWRkcikKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJ3cml0ZV9uZXdfcGMoMHgiIFRBUkdFVF9GTVRf bHggIilcbiIsIGFkZHIpOworCisgICAgLyoKKyAgICAgKiBJZiBtb3JlIHRoYW4gb25lIGJyYW5j aCBpcyB0YWtlbiBpbiBhIHBhY2tldCwgb25seSB0aGUgZmlyc3Qgb25lCisgICAgICogaXMgYWN0 dWFsbHkgZG9uZS4KKyAgICAgKi8KKyAgICBpZiAoZW52LT5icmFuY2hfdGFrZW4pIHsKKyAgICAg ICAgSEVYX0RFQlVHX0xPRygiSU5GTzogbXVsdGlwbGUgYnJhbmNoZXMgdGFrZW4gaW4gc2FtZSBw YWNrZXQsICIKKyAgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgdGhlIHNlY29uZCBvbmVc biIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZDSEVDS19QQ0FMSUdOKGFkZHIpOworICAgICAg ICBlbnYtPmJyYW5jaF90YWtlbiA9IDE7CisgICAgICAgIGVudi0+bmV4dF9QQyA9IGFkZHI7Cisg ICAgfQorfQorCisvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50ICovCit2b2lkIEhF TFBFUihkZWJ1Z19zdGFydF9wYWNrZXQpKENQVUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIEhF WF9ERUJVR19MT0coIlN0YXJ0IHBhY2tldDogcGMgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAor ICAgICAgICAgICAgICAgICAgZW52LT5ncHJbSEVYX1JFR19QQ10pOworCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBUT1RBTF9QRVJfVEhSRUFEX1JFR1M7IGkrKykgeworICAgICAgICBlbnYtPnJl Z193cml0dGVuW2ldID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBuZXdf cHJlZF92YWx1ZShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHBudW0pCit7CisgICAgcmV0dXJu IGVudi0+bmV3X3ByZWRfdmFsdWVbcG51bV07Cit9CisKKy8qIENoZWNrcyBmb3IgYm9va2tlZXBp bmcgZXJyb3JzIGJldHdlZW4gZGlzYXNzZW1ibHkgY29udGV4dCBhbmQgcnVudGltZSAqLwordm9p ZCBIRUxQRVIoZGVidWdfY2hlY2tfc3RvcmVfd2lkdGgpKENQVUhleGFnb25TdGF0ZSAqZW52LCBp bnQgc2xvdCwgaW50IGNoZWNrKQoreworICAgIGlmIChlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3Rd LndpZHRoICE9IGNoZWNrKSB7CisgICAgICAgIEhFWF9ERUJVR19MT0coIkVSUk9SOiAlZCAhPSAl ZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLndp ZHRoLCBjaGVjayk7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorfQor Cit2b2lkIEhFTFBFUihjb21taXRfc3RvcmUpKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQgc2xv dF9udW0pCit7CisgICAgc3dpdGNoIChlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS53aWR0 aCkgeworICAgIGNhc2UgMToKKyAgICAgICAgcHV0X3VzZXJfdTgoZW52LT5tZW1fbG9nX3N0b3Jl c1tzbG90X251bV0uZGF0YTMyLAorICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3Rv cmVzW3Nsb3RfbnVtXS52YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAg cHV0X3VzZXJfdTE2KGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1dLmRhdGEzMiwKKyAgICAg ICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1dLnZhKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBwdXRfdXNlcl91MzIoZW52LT5tZW1fbG9n X3N0b3Jlc1tzbG90X251bV0uZGF0YTMyLAorICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1f bG9nX3N0b3Jlc1tzbG90X251bV0udmEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDg6Cisg ICAgICAgIHB1dF91c2VyX3U2NChlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS5kYXRhNjQs CisgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS52YSk7 CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj aGVkKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9zdG9yZShDUFVIZXhhZ29uU3Rh dGUgKmVudiwgaW50IHNsb3QpCit7CisgICAgaWYgKCEoZW52LT5zbG90X2NhbmNlbGxlZCAmICgx IDw8IHNsb3QpKSkgeworICAgICAgICB1aW50OF90IHdpZHRoID0gZW52LT5tZW1fbG9nX3N0b3Jl c1tzbG90XS53aWR0aDsKKyAgICAgICAgaWYgKHdpZHRoID09IDEpIHsKKyAgICAgICAgICAgIHVp bnQzMl90IGRhdGEgPSBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLmRhdGEzMiAmIDB4ZmY7Cisg ICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJcdG1lbWJbMHgiIFRBUkdFVF9GTVRfbHggIl0gPSAl ZCAoMHglMDJ4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0 b3Jlc1tzbG90XS52YSwgZGF0YSwgZGF0YSk7CisgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPT0g MikgeworICAgICAgICAgICAgdWludDMyX3QgZGF0YSA9IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xv dF0uZGF0YTMyICYgMHhmZmZmOworICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRtZW1oWzB4 IiBUQVJHRVRfRk1UX2x4ICJdID0gJWQgKDB4JTA0eClcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0udmEsIGRhdGEsIGRhdGEpOworICAgICAg ICB9IGVsc2UgaWYgKHdpZHRoID09IDQpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGRhdGEgPSBl bnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLmRhdGEzMjsKKyAgICAgICAgICAgIEhFWF9ERUJVR19M T0coIlx0bWVtd1sweCIgVEFSR0VUX0ZNVF9seCAiXSA9ICVkICgweCUwOHgpXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLnZhLCBkYXRhLCBk YXRhKTsKKyAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA9PSA4KSB7CisgICAgICAgICAgICBIRVhf REVCVUdfTE9HKCJcdG1lbWRbMHgiIFRBUkdFVF9GTVRfbHggIl0gPSAlbHUgKDB4JTAxNmx4KVxu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52 YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5k YXRhNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xv dF0uZGF0YTY0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEhFWF9ERUJVR19MT0co Ilx0QmFkIHN0b3JlIHdpZHRoICVkXG4iLCB3aWR0aCk7CisgICAgICAgICAgICBnX2Fzc2VydF9u b3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlz IGEgaGFuZHkgcGxhY2UgdG8gc2V0IGEgYnJlYWtwb2ludCAqLwordm9pZCBIRUxQRVIoZGVidWdf Y29tbWl0X2VuZCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludCBoYXNfc3QwLCBpbnQgaGFzX3N0 MSkKK3sKKyAgICBib29sIHJlZ19wcmludGVkID0gZmFsc2U7CisgICAgYm9vbCBwcmVkX3ByaW50 ZWQgPSBmYWxzZTsKKyAgICBpbnQgaTsKKworICAgIEhFWF9ERUJVR19MT0coIlBhY2tldCBjb21t aXR0ZWQ6IHBjID0gMHgiIFRBUkdFVF9GTVRfbHggIlxuIiwKKyAgICAgICAgICAgICAgICAgIGVu di0+dGhpc19QQyk7CisgICAgSEVYX0RFQlVHX0xPRygic2xvdF9jYW5jZWxsZWQgPSAlZFxuIiwg ZW52LT5zbG90X2NhbmNlbGxlZCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgVE9UQUxfUEVSX1RI UkVBRF9SRUdTOyBpKyspIHsKKyAgICAgICAgaWYgKGVudi0+cmVnX3dyaXR0ZW5baV0pIHsKKyAg ICAgICAgICAgIGlmICghcmVnX3ByaW50ZWQpIHsKKyAgICAgICAgICAgICAgICBIRVhfREVCVUdf TE9HKCJSZWdzIHdyaXR0ZW5cbiIpOworICAgICAgICAgICAgICAgIHJlZ19wcmludGVkID0gdHJ1 ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlx0ciVkID0gIiBU QVJHRVRfRk1UX2xkICIgKDB4IiBUQVJHRVRfRk1UX2x4ICIpXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBpLCBlbnYtPm5ld192YWx1ZVtpXSwgZW52LT5uZXdfdmFsdWVbaV0pOworICAg ICAgICB9CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9QUkVHUzsgaSsrKSB7Cisg ICAgICAgIGlmIChlbnYtPnByZWRfd3JpdHRlbiAmICgxIDw8IGkpKSB7CisgICAgICAgICAgICBp ZiAoIXByZWRfcHJpbnRlZCkgeworICAgICAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlByZWRp Y2F0ZXMgd3JpdHRlblxuIik7CisgICAgICAgICAgICAgICAgcHJlZF9wcmludGVkID0gdHJ1ZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlx0cCVkID0gMHgiIFRB UkdFVF9GTVRfbHggIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgZW52LT5uZXdf cHJlZF92YWx1ZVtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzX3N0MCB8fCBo YXNfc3QxKSB7CisgICAgICAgIEhFWF9ERUJVR19MT0coIlN0b3Jlc1xuIik7CisgICAgICAgIGlm IChoYXNfc3QwKSB7CisgICAgICAgICAgICBwcmludF9zdG9yZShlbnYsIDApOworICAgICAgICB9 CisgICAgICAgIGlmIChoYXNfc3QxKSB7CisgICAgICAgICAgICBwcmludF9zdG9yZShlbnYsIDEp OworICAgICAgICB9CisgICAgfQorCisgICAgSEVYX0RFQlVHX0xPRygiTmV4dCBQQyA9IDB4JXhc biIsIGVudi0+bmV4dF9QQyk7CisgICAgSEVYX0RFQlVHX0xPRygiRXhlYyBjb3VudGVyczogcGt0 ID0gIiBUQVJHRVRfRk1UX2x4CisgICAgICAgICAgICAgICAgICAiLCBpbnNuID0gIiBUQVJHRVRf Rk1UX2x4CisgICAgICAgICAgICAgICAgICAiXG4iLAorICAgICAgICAgICAgICAgICAgZW52LT5n cHJbSEVYX1JFR19RRU1VX1BLVF9DTlRdLAorICAgICAgICAgICAgICAgICAgZW52LT5ncHJbSEVY X1JFR19RRU1VX0lOU05fQ05UXSk7CisKK30KKworc3RhdGljIGludDMyX3QgZmNpcmNhZGRfdjQo aW50MzJfdCBSeFYsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IE0sIGludDMyX3QgQ1MpCit7Cisg ICAgaW50MzJfdCBsZW5ndGggPSBNICYgMHgwMDAxZmZmZjsKKyAgICB1aW50MzJfdCBuZXdfcHRy ID0gUnhWICsgb2Zmc2V0OworICAgIHVpbnQzMl90IHN0YXJ0X2FkZHIgPSBDUzsKKyAgICB1aW50 MzJfdCBlbmRfYWRkciA9IHN0YXJ0X2FkZHIgKyBsZW5ndGg7CisKKyAgICBpZiAobmV3X3B0ciA+ PSBlbmRfYWRkcikgeworICAgICAgICBuZXdfcHRyIC09IGxlbmd0aDsKKyAgICB9IGVsc2UgaWYg KG5ld19wdHIgPCBzdGFydF9hZGRyKSB7CisgICAgICAgIG5ld19wdHIgKz0gbGVuZ3RoOworICAg IH0KKworICAgIHJldHVybiBuZXdfcHRyOworfQorCitpbnQzMl90IEhFTFBFUihmY2lyY2FkZCko aW50MzJfdCBSeFYsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IE0sIGludDMyX3QgQ1MpCit7Cisg ICAgaW50MzJfdCBLX2NvbnN0ID0gKE0gPj4gMjQpICYgMHhmOworICAgIGludDMyX3QgbGVuZ3Ro ID0gTSAmIDB4MWZmZmY7CisgICAgaW50MzJfdCBtYXNrID0gKDEgPDwgKEtfY29uc3QgKyAyKSkg LSAxOworICAgIHVpbnQzMl90IG5ld19wdHIgPSBSeFYgKyBvZmZzZXQ7CisgICAgdWludDMyX3Qg c3RhcnRfYWRkciA9IFJ4ViAmICh+bWFzayk7CisgICAgdWludDMyX3QgZW5kX2FkZHIgPSBzdGFy dF9hZGRyIHwgbGVuZ3RoOworCisgICAgaWYgKEtfY29uc3QgPT0gMCAmJiBsZW5ndGggPj0gNCkg eworICAgICAgICByZXR1cm4gZmNpcmNhZGRfdjQoUnhWLCBvZmZzZXQsIE0sIENTKTsKKyAgICB9 CisKKyAgICBpZiAobmV3X3B0ciA+PSBlbmRfYWRkcikgeworICAgICAgICBuZXdfcHRyIC09IGxl bmd0aDsKKyAgICB9IGVsc2UgaWYgKG5ld19wdHIgPCBzdGFydF9hZGRyKSB7CisgICAgICAgIG5l d19wdHIgKz0gbGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiBuZXdfcHRyOworfQorCisvKgor ICogSGV4YWdvbiBGUCBvcGVyYXRpb25zIHJldHVybiB+MCBpbnN0ZWF0IG9mIE5hTgorICogVGhl IGhleF9jaGVja19zZm5hbi9oZXhfY2hlY2tfZGZuYW4gZnVuY3Rpb25zIHBlcmZvcm0gdGhpcyBj aGVjaworICovCitzdGF0aWMgZmxvYXQzMiBoZXhfY2hlY2tfc2ZuYW4oZmxvYXQzMiB4KQorewor ICAgIGlmIChmbG9hdDMyX2lzX2FueV9uYW4oeCkpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfZmxv YXQzMigweEZGRkZGRkZGVSk7CisgICAgfQorICAgIHJldHVybiB4OworfQorCitzdGF0aWMgZmxv YXQ2NCBoZXhfY2hlY2tfZGZuYW4oZmxvYXQ2NCB4KQoreworICAgIGlmIChmbG9hdDY0X2lzX2Fu eV9uYW4oeCkpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfZmxvYXQ2NCgweEZGRkZGRkZGRkZGRkZG RkZVTEwpOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworLyoKKyAqIG1lbV9ub3NodWYKKyAq IFNlY3Rpb24gNS41IG9mIHRoZSBIZXhhZ29uIFY2NyBQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlIE1h bnVhbAorICoKKyAqIElmIHRoZSBsb2FkIGlzIGluIHNsb3QgMCBhbmQgdGhlcmUgaXMgYSBzdG9y ZSBpbiBzbG90MSAodGhhdAorICogd2Fzbid0IGNhbmNlbGxlZCksIHdlIGhhdmUgdG8gZG8gdGhl IHN0b3JlIGZpcnN0LgorICovCitzdGF0aWMgdm9pZCBjaGVja19ub3NodWYoQ1BVSGV4YWdvblN0 YXRlICplbnYsIHVpbnQzMl90IHNsb3QpCit7CisgICAgaWYgKHNsb3QgPT0gMCAmJiBlbnYtPnBr dF9oYXNfc3RvcmVfczEgJiYKKyAgICAgICAgKChlbnYtPnNsb3RfY2FuY2VsbGVkICYgKDEgPDwg MSkpID09IDApKSB7CisgICAgICAgIEhFTFBFUihjb21taXRfc3RvcmUpKGVudiwgMSk7CisgICAg fQorfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgbWVtX2xvYWQxKENQVUhleGFnb25TdGF0ZSAq ZW52LCB1aW50MzJfdCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn ZXRfdWxvbmcgdmFkZHIpCit7CisgICAgdWludDhfdCByZXR2YWw7CisgICAgY2hlY2tfbm9zaHVm KGVudiwgc2xvdCk7CisgICAgZ2V0X3VzZXJfdTgocmV0dmFsLCB2YWRkcik7CisgICAgcmV0dXJu IHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCBtZW1fbG9hZDIoQ1BVSGV4YWdv blN0YXRlICplbnYsIHVpbnQzMl90IHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0YXJnZXRfdWxvbmcgdmFkZHIpCit7CisgICAgdWludDE2X3QgcmV0dmFsOworICAgIGNo ZWNrX25vc2h1ZihlbnYsIHNsb3QpOworICAgIGdldF91c2VyX3UxNihyZXR2YWwsIHZhZGRyKTsK KyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG1lbV9sb2Fk NChDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qgc2xvdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWRkcikKK3sKKyAgICB1aW50MzJfdCByZXR2 YWw7CisgICAgY2hlY2tfbm9zaHVmKGVudiwgc2xvdCk7CisgICAgZ2V0X3VzZXJfdTMyKHJldHZh bCwgdmFkZHIpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0 X3QgbWVtX2xvYWQ4KENQVUhleGFnb25TdGF0ZSAqZW52LCB1aW50MzJfdCBzbG90LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25nIHZhZGRyKQoreworICAgIHVp bnQ2NF90IHJldHZhbDsKKyAgICBjaGVja19ub3NodWYoZW52LCBzbG90KTsKKyAgICBnZXRfdXNl cl91NjQocmV0dmFsLCB2YWRkcik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyogRmxvYXRp bmcgcG9pbnQgKi8KK2Zsb2F0NjQgSEVMUEVSKGNvbnZfc2YyZGYpKENQVUhleGFnb25TdGF0ZSAq ZW52LCBmbG9hdDMyIFJzVikKK3sKKyAgICBmbG9hdDY0IG91dF9mNjQ7CisgICAgYXJjaF9mcG9w X3N0YXJ0KGVudik7CisgICAgb3V0X2Y2NCA9IGZsb2F0MzJfdG9fZmxvYXQ2NChSc1YsICZlbnYt PmZwX3N0YXR1cyk7CisgICAgb3V0X2Y2NCA9IGhleF9jaGVja19kZm5hbihvdXRfZjY0KTsKKyAg ICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIG91dF9mNjQ7Cit9CisKK2Zsb2F0MzIg SEVMUEVSKGNvbnZfZGYyc2YpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7 CisgICAgZmxvYXQzMiBvdXRfZjMyOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIG91 dF9mMzIgPSBmbG9hdDY0X3RvX2Zsb2F0MzIoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBv dXRfZjMyID0gaGV4X2NoZWNrX3NmbmFuKG91dF9mMzIpOworICAgIGFyY2hfZnBvcF9lbmQoZW52 KTsKKyAgICByZXR1cm4gb3V0X2YzMjsKK30KKworZmxvYXQzMiBIRUxQRVIoY29udl91dzJzZiko Q1BVSGV4YWdvblN0YXRlICplbnYsIGludDMyX3QgUnNWKQoreworICAgIGZsb2F0MzIgUmRWOwor ICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9IHVpbnQzMl90b19mbG9hdDMyKFJz ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAg ICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQ2NCBIRUxQ RVIoY29udl91dzJkZikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDMyX3QgUnNWKQoreworICAg IGZsb2F0NjQgUmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZGRWID0gdWlu dDMyX3RvX2Zsb2F0NjQoUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkZFYgPSBoZXhfY2hl Y2tfZGZuYW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZGRW OworfQorCitmbG9hdDMyIEhFTFBFUihjb252X3cyc2YpKENQVUhleGFnb25TdGF0ZSAqZW52LCBp bnQzMl90IFJzVikKK3sKKyAgICBmbG9hdDMyIFJkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52 KTsKKyAgICBSZFYgPSBpbnQzMl90b19mbG9hdDMyKFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7Cisg ICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQ2NCBIRUxQRVIoY29udl93MmRmKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgaW50MzJfdCBSc1YpCit7CisgICAgZmxvYXQ2NCBSZGRWOworICAgIGFyY2hf ZnBvcF9zdGFydChlbnYpOworICAgIFJkZFYgPSBpbnQzMl90b19mbG9hdDY0KFJzViwgJmVudi0+ ZnBfc3RhdHVzKTsKKyAgICBSZGRWID0gaGV4X2NoZWNrX2RmbmFuKFJkZFYpOworICAgIGFyY2hf ZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoY29u dl91ZDJzZikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDY0X3QgUnNzVikKK3sKKyAgICBmbG9h dDMyIFJkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZFYgPSB1aW50NjRfdG9f ZmxvYXQzMihSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkViA9IGhleF9jaGVja19zZm5h bihSZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitm bG9hdDY0IEhFTFBFUihjb252X3VkMmRmKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50NjRfdCBS c3NWKQoreworICAgIGZsb2F0NjQgUmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAg ICBSZGRWID0gdWludDY0X3RvX2Zsb2F0NjQoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBS ZGRWID0gaGV4X2NoZWNrX2RmbmFuKFJkZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAg ICByZXR1cm4gUmRkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoY29udl9kMnNmKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgaW50NjRfdCBSc3NWKQoreworICAgIGZsb2F0MzIgUmRWOworICAgIGFyY2hf ZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9IGludDY0X3RvX2Zsb2F0MzIoUnNzViwgJmVudi0+ ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2ZuYW4oUmRWKTsKKyAgICBhcmNoX2Zw b3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworZmxvYXQ2NCBIRUxQRVIoY29udl9k MmRmKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50NjRfdCBSc3NWKQoreworICAgIGZsb2F0NjQg UmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZGRWID0gaW50NjRfdG9fZmxv YXQ2NChSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkZFYgPSBoZXhfY2hlY2tfZGZuYW4o UmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQorCitp bnQzMl90IEhFTFBFUihjb252X3NmMnV3KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBS c1YpCit7CisgICAgaW50MzJfdCBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAg UmRWID0gY29udl9zZl90b180dShSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9w X2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfc2Yy dykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGludDMyX3QgUmRW OworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9IGNvbnZfc2ZfdG9fNHMoUnNW LCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4g UmRWOworfQorCitpbnQ2NF90IEhFTFBFUihjb252X3NmMnVkKShDUFVIZXhhZ29uU3RhdGUgKmVu diwgZmxvYXQzMiBSc1YpCit7CisgICAgaW50NjRfdCBSZGRWOworICAgIGFyY2hfZnBvcF9zdGFy dChlbnYpOworICAgIFJkZFYgPSBjb252X3NmX3RvXzh1KFJzViwgJmVudi0+ZnBfc3RhdHVzKTsK KyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2ludDY0X3Qg SEVMUEVSKGNvbnZfc2YyZCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWKQorewor ICAgIGludDY0X3QgUmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZGRWID0g Y29udl9zZl90b184cyhSc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChl bnYpOworICAgIHJldHVybiBSZGRWOworfQorCitpbnQzMl90IEhFTFBFUihjb252X2RmMnV3KShD UFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAgIGludDMyX3QgUmRWOwor ICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9IGNvbnZfZGZfdG9fNHUoUnNzViwg JmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJk VjsKK30KKworaW50MzJfdCBIRUxQRVIoY29udl9kZjJ3KShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQ2NCBSc3NWKQoreworICAgIGludDMyX3QgUmRWOworICAgIGFyY2hfZnBvcF9zdGFydChl bnYpOworICAgIFJkViA9IGNvbnZfZGZfdG9fNHMoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50NjRfdCBIRUxQ RVIoY29udl9kZjJ1ZCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzVikKK3sKKyAg ICBpbnQ2NF90IFJkZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRkViA9IGNv bnZfZGZfdG9fOHUoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVu dik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNvbnZfZGYyZCkoQ1BV SGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzVikKK3sKKyAgICBpbnQ2NF90IFJkZFY7Cisg ICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRkViA9IGNvbnZfZGZfdG9fOHMoUnNzViwg JmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJk ZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfc2YydXdfY2hvcCkoQ1BVSGV4YWdvblN0YXRl ICplbnYsIGZsb2F0MzIgUnNWKQoreworICAgIGludDMyX3QgUmRWOworICAgIGFyY2hfZnBvcF9z dGFydChlbnYpOworICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3RvX3pl cm8sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRWID0gY29udl9zZl90b180dShSc1YsICZlbnYt PmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9 CisKK2ludDMyX3QgSEVMUEVSKGNvbnZfc2Yyd19jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQzMiBSc1YpCit7CisgICAgaW50MzJfdCBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVu dik7CisgICAgc2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVybywgJmVu di0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBjb252X3NmX3RvXzRzKFJzViwgJmVudi0+ZnBfc3Rh dHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKworaW50 NjRfdCBIRUxQRVIoY29udl9zZjJ1ZF9jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQz MiBSc1YpCit7CisgICAgaW50NjRfdCBSZGRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOwor ICAgIHNldF9mbG9hdF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3RvX3plcm8sICZlbnYtPmZw X3N0YXR1cyk7CisgICAgUmRkViA9IGNvbnZfc2ZfdG9fOHUoUnNWLCAmZW52LT5mcF9zdGF0dXMp OworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50NjRf dCBIRUxQRVIoY29udl9zZjJkX2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJz VikKK3sKKyAgICBpbnQ2NF90IFJkZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAg c2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVybywgJmVudi0+ZnBfc3Rh dHVzKTsKKyAgICBSZGRWID0gY29udl9zZl90b184cyhSc1YsICZlbnYtPmZwX3N0YXR1cyk7Cisg ICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQorCitpbnQzMl90IEhF TFBFUihjb252X2RmMnV3X2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1Yp Cit7CisgICAgaW50MzJfdCBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgc2V0 X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRfdG9femVybywgJmVudi0+ZnBfc3RhdHVz KTsKKyAgICBSZFYgPSBjb252X2RmX3RvXzR1KFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAg YXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2ludDMyX3QgSEVMUEVS KGNvbnZfZGYyd19jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQorewor ICAgIGludDMyX3QgUmRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9h dF9yb3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3RvX3plcm8sICZlbnYtPmZwX3N0YXR1cyk7Cisg ICAgUmRWID0gY29udl9kZl90b180cyhSc3NWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGFyY2hf ZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOworfQorCitpbnQ2NF90IEhFTFBFUihjb252 X2RmMnVkX2Nob3ApKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YpCit7CisgICAg aW50NjRfdCBSZGRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIHNldF9mbG9hdF9y b3VuZGluZ19tb2RlKGZsb2F0X3JvdW5kX3RvX3plcm8sICZlbnYtPmZwX3N0YXR1cyk7CisgICAg UmRkViA9IGNvbnZfZGZfdG9fOHUoUnNzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zw b3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkZFY7Cit9CisKK2ludDY0X3QgSEVMUEVSKGNvbnZf ZGYyZF9jaG9wKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWKQoreworICAgIGlu dDY0X3QgUmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRfcm91 bmRpbmdfbW9kZShmbG9hdF9yb3VuZF90b196ZXJvLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJk ZFYgPSBjb252X2RmX3RvXzhzKFJzc1YsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgYXJjaF9mcG9w X2VuZChlbnYpOworICAgIHJldHVybiBSZGRWOworfQorCitmbG9hdDMyIEhFTFBFUihzZmFkZCko Q1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikKK3sKKyAgICBm bG9hdDMyIFJkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZFYgPSBmbG9hdDMy X2FkZChSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBoZXhfY2hlY2tfc2Zu YW4oUmRWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJkVjsKK30KKwor ZmxvYXQzMiBIRUxQRVIoc2ZzdWIpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwg ZmxvYXQzMiBSdFYpCit7CisgICAgZmxvYXQzMiBSZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVu dik7CisgICAgUmRWID0gZmxvYXQzMl9zdWIoUnNWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7Cisg ICAgUmRWID0gaGV4X2NoZWNrX3NmbmFuKFJkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOwor ICAgIHJldHVybiBSZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKHNmY21wZXEpKENQVUhleGFnb25T dGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgaW50MzJfdCBQZFY7 CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUGRWID0gZjhCSVRTT0YoZmxvYXQzMl9l cV9xdWlldChSc1YsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKSk7CisgICAgYXJjaF9mcG9wX2VuZChl bnYpOworICAgIHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKHNmY21wZ3QpKENQVUhl eGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgaW50IGNt cDsKKyAgICBpbnQzMl90IFBkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBjbXAg PSBmbG9hdDMyX2NvbXBhcmVfcXVpZXQoUnNWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAg UGRWID0gZjhCSVRTT0YoY21wID09IGZsb2F0X3JlbGF0aW9uX2dyZWF0ZXIpOworICAgIGFyY2hf ZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUGRWOworfQorCitpbnQzMl90IEhFTFBFUihzZmNt cGdlKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQorewor ICAgIGludCBjbXA7CisgICAgaW50MzJfdCBQZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7 CisgICAgY21wID0gZmxvYXQzMl9jb21wYXJlX3F1aWV0KFJzViwgUnRWLCAmZW52LT5mcF9zdGF0 dXMpOworICAgIFBkViA9IGY4QklUU09GKGNtcCA9PSBmbG9hdF9yZWxhdGlvbl9ncmVhdGVyIHx8 CisgICAgICAgICAgICAgICAgICAgY21wID09IGZsb2F0X3JlbGF0aW9uX2VxdWFsKTsKKyAgICBh cmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBkVjsKK30KKworaW50MzJfdCBIRUxQRVIo c2ZjbXB1bykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnNWLCBmbG9hdDMyIFJ0VikK K3sKKyAgICBpbnQzMl90IFBkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBQZFYg PSBmOEJJVFNPRihmbG9hdDMyX2lzX2FueV9uYW4oUnNWKSB8fAorICAgICAgICAgICAgICAgICAg IGZsb2F0MzJfaXNfYW55X25hbihSdFYpKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAg cmV0dXJuIFBkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZtYXgpKENQVUhleGFnb25TdGF0ZSAq ZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgZmxvYXQzMiBSZFY7CisgICAg YXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRWID0gZmxvYXQzMl9tYXhudW0oUnNWLCBSdFYs ICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUmRWID0gaGV4X2NoZWNrX3NmbmFuKFJkVik7CisgICAg YXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVS KHNmbWluKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQor eworICAgIGZsb2F0MzIgUmRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkViA9 IGZsb2F0MzJfbWlubnVtKFJzViwgUnRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkViA9IGhl eF9jaGVja19zZm5hbihSZFYpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4g UmRWOworfQorCitpbnQzMl90IEhFTFBFUihzZmNsYXNzKShDUFVIZXhhZ29uU3RhdGUgKmVudiwg ZmxvYXQzMiBSc1YsIGludDMyX3QgdWlWKQoreworICAgIGludDMyX3QgUGRWID0gMDsKKyAgICBh cmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpZiAoZkdFVEJJVCgwLCB1aVYpICYmIGZsb2F0MzJf aXNfemVybyhSc1YpKSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChmR0VU QklUKDEsIHVpVikgJiYgZmxvYXQzMl9pc19ub3JtYWwoUnNWKSkgeworICAgICAgICBQZFYgPSAw eGZmOworICAgIH0KKyAgICBpZiAoZkdFVEJJVCgyLCB1aVYpICYmIGZsb2F0MzJfaXNfZGVub3Jt YWwoUnNWKSkgeworICAgICAgICBQZFYgPSAweGZmOworICAgIH0KKyAgICBpZiAoZkdFVEJJVCgz LCB1aVYpICYmIGZsb2F0MzJfaXNfaW5maW5pdHkoUnNWKSkgeworICAgICAgICBQZFYgPSAweGZm OworICAgIH0KKyAgICBpZiAoZkdFVEJJVCg0LCB1aVYpICYmIGZsb2F0MzJfaXNfYW55X25hbihS c1YpKSB7CisgICAgICAgIFBkViA9IDB4ZmY7CisgICAgfQorICAgIHNldF9mbG9hdF9leGNlcHRp b25fZmxhZ3MoMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7Cisg ICAgcmV0dXJuIFBkVjsKK30KKworZmxvYXQzMiBIRUxQRVIoc2ZmaXh1cG4pKENQVUhleGFnb25T dGF0ZSAqZW52LCBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgZmxvYXQzMiBSZFYg PSAwOworICAgIGludCBhZGp1c3Q7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgYXJj aF9zZl9yZWNpcF9jb21tb24oJlJzViwgJlJ0ViwgJlJkViwgJmFkanVzdCwgJmVudi0+ZnBfc3Rh dHVzKTsKKyAgICBSZFYgPSBSc1Y7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVy biBSZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKHNmZml4dXBkKShDUFVIZXhhZ29uU3RhdGUgKmVu diwgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGZsb2F0MzIgUmRWID0gMDsKKyAg ICBpbnQgYWRqdXN0OworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIGFyY2hfc2ZfcmVj aXBfY29tbW9uKCZSc1YsICZSdFYsICZSZFYsICZhZGp1c3QsICZlbnYtPmZwX3N0YXR1cyk7Cisg ICAgUmRWID0gUnRWOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRWOwor fQorCitmbG9hdDMyIEhFTFBFUihzZmZpeHVwcikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0 MzIgUnNWKQoreworICAgIGZsb2F0MzIgUmRWID0gMDsKKyAgICBpbnQgYWRqdXN0OworICAgIGFy Y2hfZnBvcF9zdGFydChlbnYpOworICAgIGFyY2hfc2ZfaW52c3FydF9jb21tb24oJlJzViwgJlJk ViwgJmFkanVzdCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSZFYgPSBSc1Y7CisgICAgYXJjaF9m cG9wX2VuZChlbnYpOworICAgIHJldHVybiBSZFY7Cit9CisKK2Zsb2F0NjQgSEVMUEVSKGRmYWRk KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7Cisg ICAgZmxvYXQ2NCBSZGRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJkZFYgPSBm bG9hdDY0X2FkZChSc3NWLCBSdHRWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJkZFYgPSBoZXhf Y2hlY2tfZGZuYW4oUmRkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBS ZGRWOworfQorCitmbG9hdDY0IEhFTFBFUihkZnN1YikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZs b2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAgIGZsb2F0NjQgUmRkVjsKKyAgICBhcmNo X2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBSZGRWID0gZmxvYXQ2NF9zdWIoUnNzViwgUnR0ViwgJmVu di0+ZnBfc3RhdHVzKTsKKyAgICBSZGRWID0gaGV4X2NoZWNrX2RmbmFuKFJkZFYpOworICAgIGFy Y2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworZmxvYXQ2NCBIRUxQRVIo ZGZtYXgpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YsIGZsb2F0NjQgUnR0VikK K3sKKyAgICBmbG9hdDY0IFJkZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRk ViA9IGZsb2F0NjRfbWF4bnVtKFJzc1YsIFJ0dFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaWYg KGZsb2F0NjRfaXNfYW55X25hbihSc3NWKSB8fCBmbG9hdDY0X2lzX2FueV9uYW4oUnR0VikpIHsK KyAgICAgICAgZmxvYXRfcmFpc2UoZmxvYXRfZmxhZ19pbnZhbGlkLCAmZW52LT5mcF9zdGF0dXMp OworICAgIH0KKyAgICBSZGRWID0gaGV4X2NoZWNrX2RmbmFuKFJkZFYpOworICAgIGFyY2hfZnBv cF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworZmxvYXQ2NCBIRUxQRVIoZGZtaW4p KENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YsIGZsb2F0NjQgUnR0VikKK3sKKyAg ICBmbG9hdDY0IFJkZFY7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAgUmRkViA9IGZs b2F0NjRfbWlubnVtKFJzc1YsIFJ0dFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaWYgKGZsb2F0 NjRfaXNfYW55X25hbihSc3NWKSB8fCBmbG9hdDY0X2lzX2FueV9uYW4oUnR0VikpIHsKKyAgICAg ICAgZmxvYXRfcmFpc2UoZmxvYXRfZmxhZ19pbnZhbGlkLCAmZW52LT5mcF9zdGF0dXMpOworICAg IH0KKyAgICBSZGRWID0gaGV4X2NoZWNrX2RmbmFuKFJkZFYpOworICAgIGFyY2hfZnBvcF9lbmQo ZW52KTsKKyAgICByZXR1cm4gUmRkVjsKK30KKworaW50MzJfdCBIRUxQRVIoZGZjbXBlcSkoQ1BV SGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAgIGlu dDMyX3QgUGRWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFBkViA9IGY4QklUU09G KGZsb2F0NjRfZXFfcXVpZXQoUnNzViwgUnR0ViwgJmVudi0+ZnBfc3RhdHVzKSk7CisgICAgYXJj aF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7Cit9CisKK2ludDMyX3QgSEVMUEVSKGRm Y21wZ3QpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDY0IFJzc1YsIGZsb2F0NjQgUnR0VikK K3sKKyAgICBpbnQgY21wOworICAgIGludDMyX3QgUGRWOworICAgIGFyY2hfZnBvcF9zdGFydChl bnYpOworICAgIGNtcCA9IGZsb2F0NjRfY29tcGFyZV9xdWlldChSc3NWLCBSdHRWLCAmZW52LT5m cF9zdGF0dXMpOworICAgIFBkViA9IGY4QklUU09GKGNtcCA9PSBmbG9hdF9yZWxhdGlvbl9ncmVh dGVyKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBkVjsKK30KKworaW50 MzJfdCBIRUxQRVIoZGZjbXBnZSkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzViwg ZmxvYXQ2NCBSdHRWKQoreworICAgIGludCBjbXA7CisgICAgaW50MzJfdCBQZFY7CisgICAgYXJj aF9mcG9wX3N0YXJ0KGVudik7CisgICAgY21wID0gZmxvYXQ2NF9jb21wYXJlX3F1aWV0KFJzc1Ys IFJ0dFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUGRWID0gZjhCSVRTT0YoY21wID09IGZsb2F0 X3JlbGF0aW9uX2dyZWF0ZXIgfHwKKyAgICAgICAgICAgICAgICAgICBjbXAgPT0gZmxvYXRfcmVs YXRpb25fZXF1YWwpOworICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUGRWOwor fQorCitpbnQzMl90IEhFTFBFUihkZmNtcHVvKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQ2 NCBSc3NWLCBmbG9hdDY0IFJ0dFYpCit7CisgICAgaW50MzJfdCBQZFY7CisgICAgYXJjaF9mcG9w X3N0YXJ0KGVudik7CisgICAgUGRWID0gZjhCSVRTT0YoZmxvYXQ2NF9pc19hbnlfbmFuKFJzc1Yp IHx8CisgICAgICAgICAgICAgICAgICAgZmxvYXQ2NF9pc19hbnlfbmFuKFJ0dFYpKTsKKyAgICBh cmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFBkVjsKK30KKworaW50MzJfdCBIRUxQRVIo ZGZjbGFzcykoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzViwgaW50MzJfdCB1aVYp Cit7CisgICAgaW50MzJfdCBQZFYgPSAwOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAg IGlmIChmR0VUQklUKDAsIHVpVikgJiYgZmxvYXQ2NF9pc196ZXJvKFJzc1YpKSB7CisgICAgICAg IFBkViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDEsIHVpVikgJiYgZmxvYXQ2NF9p c19ub3JtYWwoUnNzVikpIHsKKyAgICAgICAgUGRWID0gMHhmZjsKKyAgICB9CisgICAgaWYgKGZH RVRCSVQoMiwgdWlWKSAmJiBmbG9hdDY0X2lzX2Rlbm9ybWFsKFJzc1YpKSB7CisgICAgICAgIFBk ViA9IDB4ZmY7CisgICAgfQorICAgIGlmIChmR0VUQklUKDMsIHVpVikgJiYgZmxvYXQ2NF9pc19p bmZpbml0eShSc3NWKSkgeworICAgICAgICBQZFYgPSAweGZmOworICAgIH0KKyAgICBpZiAoZkdF VEJJVCg0LCB1aVYpICYmIGZsb2F0NjRfaXNfYW55X25hbihSc3NWKSkgeworICAgICAgICBQZFYg PSAweGZmOworICAgIH0KKyAgICBzZXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzKDAsICZlbnYtPmZw X3N0YXR1cyk7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBQZFY7Cit9CisK K2Zsb2F0MzIgSEVMUEVSKHNmbXB5KShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSc1Ys IGZsb2F0MzIgUnRWKQoreworICAgIGZsb2F0MzIgUmRWOworICAgIGFyY2hfZnBvcF9zdGFydChl bnYpOworICAgIFJkViA9IGludGVybmFsX21weWYoUnNWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7 CisgICAgUmRWID0gaGV4X2NoZWNrX3NmbmFuKFJkVik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYp OworICAgIHJldHVybiBSZFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVSKHNmZm1hKShDUFVIZXhhZ29u U3RhdGUgKmVudiwgZmxvYXQzMiBSeFYsCisgICAgICAgICAgICAgICAgICAgICAgZmxvYXQzMiBS c1YsIGZsb2F0MzIgUnRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJ4ViA9 IGludGVybmFsX2ZtYWZ4KFJzViwgUnRWLCBSeFYsIDAsICZlbnYtPmZwX3N0YXR1cyk7CisgICAg UnhWID0gaGV4X2NoZWNrX3NmbmFuKFJ4Vik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAg IHJldHVybiBSeFY7Cit9CisKK3N0YXRpYyBib29sIGlzX3plcm9fcHJvZChmbG9hdDMyIGEsIGZs b2F0MzIgYikKK3sKKyAgICByZXR1cm4gKChmbG9hdDMyX2lzX3plcm8oYSkgJiYgaXNfZmluaXRl KGIpKSB8fAorICAgICAgICAgICAgKGZsb2F0MzJfaXNfemVybyhiKSAmJiBpc19maW5pdGUoYSkp KTsKK30KKworc3RhdGljIGZsb2F0MzIgY2hlY2tfbmFuKGZsb2F0MzIgZHN0LCBmbG9hdDMyIHgs IGZsb2F0X3N0YXR1cyAqZnBfc3RhdHVzKQoreworICAgIGZsb2F0MzIgcmV0ID0gZHN0OworICAg IGlmIChmbG9hdDMyX2lzX2FueV9uYW4oeCkpIHsKKyAgICAgICAgaWYgKGV4dHJhY3QzMih4LCAy MiwgMSkgPT0gMCkgeworICAgICAgICAgICAgZmxvYXRfcmFpc2UoZmxvYXRfZmxhZ19pbnZhbGlk LCBmcF9zdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJldCA9IG1ha2VfZmxvYXQzMigweGZm ZmZmZmZmKTsgICAgLyogbmFuICovCisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Zsb2F0 MzIgSEVMUEVSKHNmZm1hX3NjKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgZmxvYXQzMiBSeFYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQzMiBSc1YsIGZsb2F0MzIgUnRWLCBmbG9hdDMy IFB1VikKK3sKKyAgICBzaXplNHNfdCB0bXA7CisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7Cisg ICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnhWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9 IGNoZWNrX25hbihSeFYsIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBjaGVja19u YW4oUnhWLCBSdFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgdG1wID0gaW50ZXJuYWxfZm1hZngo UnNWLCBSdFYsIFJ4ViwgZlNYVE4oOCwgNjQsIFB1ViksICZlbnYtPmZwX3N0YXR1cyk7CisgICAg dG1wID0gaGV4X2NoZWNrX3NmbmFuKHRtcCk7CisgICAgaWYgKCEoZmxvYXQzMl9pc196ZXJvKFJ4 VikgJiYgaXNfemVyb19wcm9kKFJzViwgUnRWKSkpIHsKKyAgICAgICAgUnhWID0gdG1wOworICAg IH0KKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7CisgICAgcmV0dXJuIFJ4VjsKK30KKworZmxvYXQz MiBIRUxQRVIoc2ZmbXMpKENQVUhleGFnb25TdGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwKKyAgICAg ICAgICAgICAgICAgICAgICBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgZmxvYXQz MiBuZWdfUnNWOworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIG5lZ19Sc1YgPSBmbG9h dDMyX3N1YihmbG9hdDMyX3plcm8sIFJzViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBp bnRlcm5hbF9mbWFmeChuZWdfUnNWLCBSdFYsIFJ4ViwgMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAg ICBSeFYgPSBoZXhfY2hlY2tfc2ZuYW4oUnhWKTsKKyAgICBhcmNoX2Zwb3BfZW5kKGVudik7Cisg ICAgcmV0dXJuIFJ4VjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX2luZl9wcm9kKGludDMy X3QgYSwgaW50MzJfdCBiKQoreworICAgIHJldHVybiAoZmxvYXQzMl9pc19pbmZpbml0eShhKSAm JiBmbG9hdDMyX2lzX2luZmluaXR5KGIpKSB8fAorICAgICAgICAgICAoZmxvYXQzMl9pc19pbmZp bml0eShhKSAmJiBpc19maW5pdGUoYikgJiYgIWZsb2F0MzJfaXNfemVybyhiKSkgfHwKKyAgICAg ICAgICAgKGZsb2F0MzJfaXNfaW5maW5pdHkoYikgJiYgaXNfZmluaXRlKGEpICYmICFmbG9hdDMy X2lzX3plcm8oYSkpOworfQorCitmbG9hdDMyIEhFTFBFUihzZmZtYV9saWIpKENQVUhleGFnb25T dGF0ZSAqZW52LCBmbG9hdDMyIFJ4ViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQz MiBSc1YsIGZsb2F0MzIgUnRWKQoreworICAgIGludCBpbmZpbnA7CisgICAgaW50IGluZm1pbnVz aW5mOworICAgIGZsb2F0MzIgdG1wOworCisgICAgYXJjaF9mcG9wX3N0YXJ0KGVudik7CisgICAg c2V0X2Zsb2F0X3JvdW5kaW5nX21vZGUoZmxvYXRfcm91bmRfbmVhcmVzdF9ldmVuLCAmZW52LT5m cF9zdGF0dXMpOworICAgIGluZm1pbnVzaW5mID0gZmxvYXQzMl9pc19pbmZpbml0eShSeFYpICYm CisgICAgICAgICAgICAgICAgICBpc19pbmZfcHJvZChSc1YsIFJ0VikgJiYKKyAgICAgICAgICAg ICAgICAgIChmR0VUQklUKDMxLCBSc1YgXiBSeFYgXiBSdFYpICE9IDApOworICAgIGluZmlucCA9 IGZsb2F0MzJfaXNfaW5maW5pdHkoUnhWKSB8fAorICAgICAgICAgICAgIGZsb2F0MzJfaXNfaW5m aW5pdHkoUnRWKSB8fAorICAgICAgICAgICAgIGZsb2F0MzJfaXNfaW5maW5pdHkoUnNWKTsKKyAg ICBSeFYgPSBjaGVja19uYW4oUnhWLCBSeFYsICZlbnYtPmZwX3N0YXR1cyk7CisgICAgUnhWID0g Y2hlY2tfbmFuKFJ4ViwgUnNWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4ViA9IGNoZWNrX25h bihSeFYsIFJ0ViwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICB0bXAgPSBpbnRlcm5hbF9mbWFmeChS c1YsIFJ0ViwgUnhWLCAwLCAmZW52LT5mcF9zdGF0dXMpOworICAgIHRtcCA9IGhleF9jaGVja19z Zm5hbih0bXApOworICAgIGlmICghKGZsb2F0MzJfaXNfemVybyhSeFYpICYmIGlzX3plcm9fcHJv ZChSc1YsIFJ0VikpKSB7CisgICAgICAgIFJ4ViA9IHRtcDsKKyAgICB9CisgICAgc2V0X2Zsb2F0 X2V4Y2VwdGlvbl9mbGFncygwLCAmZW52LT5mcF9zdGF0dXMpOworICAgIGlmIChmbG9hdDMyX2lz X2luZmluaXR5KFJ4VikgJiYgIWluZmlucCkgeworICAgICAgICBSeFYgPSBSeFYgLSAxOworICAg IH0KKyAgICBpZiAoaW5mbWludXNpbmYpIHsKKyAgICAgICAgUnhWID0gMDsKKyAgICB9CisgICAg YXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVybiBSeFY7Cit9CisKK2Zsb2F0MzIgSEVMUEVS KHNmZm1zX2xpYikoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0MzIgUnhWLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBmbG9hdDMyIFJzViwgZmxvYXQzMiBSdFYpCit7CisgICAgaW50IGlu ZmlucDsKKyAgICBpbnQgaW5mbWludXNpbmY7CisgICAgZmxvYXQzMiB0bXA7CisKKyAgICBhcmNo X2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBzZXRfZmxvYXRfcm91bmRpbmdfbW9kZShmbG9hdF9yb3Vu ZF9uZWFyZXN0X2V2ZW4sICZlbnYtPmZwX3N0YXR1cyk7CisgICAgaW5mbWludXNpbmYgPSBmbG9h dDMyX2lzX2luZmluaXR5KFJ4VikgJiYKKyAgICAgICAgICAgICAgICAgIGlzX2luZl9wcm9kKFJz ViwgUnRWKSAmJgorICAgICAgICAgICAgICAgICAgKGZHRVRCSVQoMzEsIFJzViBeIFJ4ViBeIFJ0 VikgPT0gMCk7CisgICAgaW5maW5wID0gZmxvYXQzMl9pc19pbmZpbml0eShSeFYpIHx8CisgICAg ICAgICAgICAgZmxvYXQzMl9pc19pbmZpbml0eShSdFYpIHx8CisgICAgICAgICAgICAgZmxvYXQz Ml9pc19pbmZpbml0eShSc1YpOworICAgIFJ4ViA9IGNoZWNrX25hbihSeFYsIFJ4ViwgJmVudi0+ ZnBfc3RhdHVzKTsKKyAgICBSeFYgPSBjaGVja19uYW4oUnhWLCBSc1YsICZlbnYtPmZwX3N0YXR1 cyk7CisgICAgUnhWID0gY2hlY2tfbmFuKFJ4ViwgUnRWLCAmZW52LT5mcF9zdGF0dXMpOworICAg IGZsb2F0MzIgbWludXNfUnNWID0gZmxvYXQzMl9zdWIoZmxvYXQzMl96ZXJvLCBSc1YsICZlbnYt PmZwX3N0YXR1cyk7CisgICAgdG1wID0gaW50ZXJuYWxfZm1hZngobWludXNfUnNWLCBSdFYsIFJ4 ViwgMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICB0bXAgPSBoZXhfY2hlY2tfc2ZuYW4odG1wKTsK KyAgICBpZiAoIShmbG9hdDMyX2lzX3plcm8oUnhWKSAmJiBpc196ZXJvX3Byb2QoUnNWLCBSdFYp KSkgeworICAgICAgICBSeFYgPSB0bXA7CisgICAgfQorICAgIHNldF9mbG9hdF9leGNlcHRpb25f ZmxhZ3MoMCwgJmVudi0+ZnBfc3RhdHVzKTsKKyAgICBpZiAoZmxvYXQzMl9pc19pbmZpbml0eShS eFYpICYmICFpbmZpbnApIHsKKyAgICAgICAgUnhWID0gUnhWIC0gMTsKKyAgICB9CisgICAgaWYg KGluZm1pbnVzaW5mKSB7CisgICAgICAgIFJ4ViA9IDA7CisgICAgfQorICAgIGFyY2hfZnBvcF9l bmQoZW52KTsKKyAgICByZXR1cm4gUnhWOworfQorCitmbG9hdDY0IEhFTFBFUihkZm1weWZpeCko Q1BVSGV4YWdvblN0YXRlICplbnYsIGZsb2F0NjQgUnNzViwgZmxvYXQ2NCBSdHRWKQoreworICAg IGludDY0X3QgUmRkVjsKKyAgICBhcmNoX2Zwb3Bfc3RhcnQoZW52KTsKKyAgICBpZiAoZmxvYXQ2 NF9pc19kZW5vcm1hbChSc3NWKSAmJgorICAgICAgICAoZmxvYXQ2NF9nZXRleHAoUnR0VikgPj0g NTEyKSAmJgorICAgICAgICBmbG9hdDY0X2lzX25vcm1hbChSdHRWKSkgeworICAgICAgICBSZGRW ID0gZmxvYXQ2NF9tdWwoUnNzViwgbWFrZV9mbG9hdDY0KDB4NDMzMDAwMDAwMDAwMDAwMCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZW52LT5mcF9zdGF0dXMpOworICAgICAgICBSZGRW ID0gaGV4X2NoZWNrX2RmbmFuKFJkZFYpOworICAgIH0gZWxzZSBpZiAoZmxvYXQ2NF9pc19kZW5v cm1hbChSdHRWKSAmJgorICAgICAgICAgICAgICAgKGZsb2F0NjRfZ2V0ZXhwKFJzc1YpID49IDUx MikgJiYKKyAgICAgICAgICAgICAgIGZsb2F0NjRfaXNfbm9ybWFsKFJzc1YpKSB7CisgICAgICAg IFJkZFYgPSBmbG9hdDY0X211bChSc3NWLCBtYWtlX2Zsb2F0NjQoMHgzY2IwMDAwMDAwMDAwMDAw KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnYtPmZwX3N0YXR1cyk7CisgICAgICAg IFJkZFYgPSBoZXhfY2hlY2tfZGZuYW4oUmRkVik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmRk ViA9IFJzc1Y7CisgICAgfQorICAgIGFyY2hfZnBvcF9lbmQoZW52KTsKKyAgICByZXR1cm4gUmRk VjsKK30KKworZmxvYXQ2NCBIRUxQRVIoZGZtcHloaCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZs b2F0NjQgUnh4ViwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0NjQgUnNzViwgZmxvYXQ2 NCBSdHRWKQoreworICAgIGFyY2hfZnBvcF9zdGFydChlbnYpOworICAgIFJ4eFYgPSBpbnRlcm5h bF9tcHloaChSc3NWLCBSdHRWLCBSeHhWLCAmZW52LT5mcF9zdGF0dXMpOworICAgIFJ4eFYgPSBo ZXhfY2hlY2tfZGZuYW4oUnh4Vik7CisgICAgYXJjaF9mcG9wX2VuZChlbnYpOworICAgIHJldHVy biBSeHhWOworfQorCitzdGF0aWMgdm9pZCBjYW5jZWxfc2xvdChDUFVIZXhhZ29uU3RhdGUgKmVu diwgdWludDMyX3Qgc2xvdCkKK3sKKyAgICBIRVhfREVCVUdfTE9HKCJTbG90ICVkIGNhbmNlbGxl ZFxuIiwgc2xvdCk7CisgICAgZW52LT5zbG90X2NhbmNlbGxlZCB8PSAoMSA8PCBzbG90KTsKK30K KworLyogVGhlc2UgbWFjcm9zIGNhbiBiZSByZWZlcmVuY2VkIGluIHRoZSBnZW5lcmF0ZWQgaGVs cGVyIGZ1bmN0aW9ucyAqLworI2RlZmluZSB3YXJuKC4uLikgLyogTm90aGluZyAqLworI2RlZmlu ZSBmYXRhbCguLi4pIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisKKyNkZWZpbmUgQk9HVVNfSEVM UEVSKHRhZykgXAorICAgIHByaW50ZigiRVJST1I6IGJvZ3VzIGhlbHBlcjogIiAjdGFnICJcbiIp CisKKyNpbmNsdWRlICJoZWxwZXJfZnVuY3NfZ2VuZXJhdGVkLmgiCi0tIAoyLjcuNAoK