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,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 5E3EAC433EF for ; Mon, 20 Sep 2021 21:31:22 +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 DFFDB61175 for ; Mon, 20 Sep 2021 21:31:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org DFFDB61175 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:54620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mSQsj-0003LP-2V for qemu-devel@archiver.kernel.org; Mon, 20 Sep 2021 17:31:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60358) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mSQmN-0001n7-O9 for qemu-devel@nongnu.org; Mon, 20 Sep 2021 17:24:47 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:9859) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1mSQmK-00021x-Pk for qemu-devel@nongnu.org; Mon, 20 Sep 2021 17:24:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1632173084; x=1663709084; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0fosB+SGl8DxruWUDvoi0TUA5QDi9QmZrm6MFJjaURU=; b=VU+8FvVpQg270FGY4UNtGYp5+7ZNwwShPSldDNOcBqr8CbV0V6ZSC/Yq WCuFGqxXKpZo+R5AYoOa7XgUFY0IbydHvVtLqBPDpdVt9oEeWz7H/mgqk dhk8V13XLUF5Lx5YpnDYW8lGRlBRmhb3FJttuzwT4ey/M/28I1z1It84s Y=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-02.qualcomm.com with ESMTP; 20 Sep 2021 14:24:37 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg-SD-alpha.qualcomm.com with ESMTP; 20 Sep 2021 14:24:36 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id ACCBF14DD; Mon, 20 Sep 2021 16:24:35 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v3 11/30] Hexagon HVX (target/hexagon) helper functions Date: Mon, 20 Sep 2021 16:24:06 -0500 Message-Id: <1632173065-18522-12-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1632173065-18522-1-git-send-email-tsimpson@quicinc.com> References: <1632173065-18522-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: -39 X-Spam_score: -4.0 X-Spam_bar: ---- X-Spam_report: (-4.0 / 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.25, 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, tsimpson@quicinc.com, richard.henderson@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Q29tbWl0IHZlY3RvciBzdG9yZXMgKG1hc2tlZCBhbmQgc2NhdHRlci9nYXRoZXIpCkxvZyB2ZWN0 b3IgcmVnaXN0ZXIgd3JpdGVzCkFkZCB0aGUgZXhlY3V0aW9uIGNvdW50ZXJzIHRvIHRoZSBkZWJ1 ZyBsb2cKSGlzdG9ncmFtIGluc3RydWN0aW9ucwoKU2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBz b24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdldC9oZXhhZ29uL2hlbHBlci5oICAg IHwgIDEzICsrKwogdGFyZ2V0L2hleGFnb24vb3BfaGVscGVyLmMgfCAyMTggKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDIyOSBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29u L2hlbHBlci5oIGIvdGFyZ2V0L2hleGFnb24vaGVscGVyLmgKaW5kZXggY2EyMDFmYi4uYzk5YzFj MSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2hleGFnb24vaGVscGVyLmgKKysrIGIvdGFyZ2V0L2hleGFn b24vaGVscGVyLmgKQEAgLTIzLDYgKzIzLDcgQEAgREVGX0hFTFBFUl8xKGRlYnVnX3N0YXJ0X3Bh Y2tldCwgdm9pZCwgZW52KQogREVGX0hFTFBFUl9GTEFHU18zKGRlYnVnX2NoZWNrX3N0b3JlX3dp ZHRoLCBUQ0dfQ0FMTF9OT19XRywgdm9pZCwgZW52LCBpbnQsIGludCkKIERFRl9IRUxQRVJfRkxB R1NfMyhkZWJ1Z19jb21taXRfZW5kLCBUQ0dfQ0FMTF9OT19XRywgdm9pZCwgZW52LCBpbnQsIGlu dCkKIERFRl9IRUxQRVJfMihjb21taXRfc3RvcmUsIHZvaWQsIGVudiwgaW50KQorREVGX0hFTFBF Ul8xKGNvbW1pdF9odnhfc3RvcmVzLCB2b2lkLCBlbnYpCiBERUZfSEVMUEVSX0ZMQUdTXzQoZmNp cmNhZGQsIFRDR19DQUxMX05PX1JXR19TRSwgczMyLCBzMzIsIHMzMiwgczMyLCBzMzIpCiBERUZf SEVMUEVSX0ZMQUdTXzEoZmJyZXYsIFRDR19DQUxMX05PX1JXR19TRSwgaTMyLCBpMzIpCiBERUZf SEVMUEVSXzMoc2ZyZWNpcGEsIGk2NCwgZW52LCBmMzIsIGYzMikKQEAgLTg5LDMgKzkwLDE1IEBA IERFRl9IRUxQRVJfNChzZmZtc19saWIsIGYzMiwgZW52LCBmMzIsIGYzMiwgZjMyKQogCiBERUZf SEVMUEVSXzMoZGZtcHlmaXgsIGY2NCwgZW52LCBmNjQsIGY2NCkKIERFRl9IRUxQRVJfNChkZm1w eWhoLCBmNjQsIGVudiwgZjY0LCBmNjQsIGY2NCkKKworLyogSGlzdG9ncmFtIGluc3RydWN0aW9u cyAqLworREVGX0hFTFBFUl8xKHZoaXN0LCB2b2lkLCBlbnYpCitERUZfSEVMUEVSXzEodmhpc3Rx LCB2b2lkLCBlbnYpCitERUZfSEVMUEVSXzEodndoaXN0MjU2LCB2b2lkLCBlbnYpCitERUZfSEVM UEVSXzEodndoaXN0MjU2cSwgdm9pZCwgZW52KQorREVGX0hFTFBFUl8xKHZ3aGlzdDI1Nl9zYXQs IHZvaWQsIGVudikKK0RFRl9IRUxQRVJfMSh2d2hpc3QyNTZxX3NhdCwgdm9pZCwgZW52KQorREVG X0hFTFBFUl8xKHZ3aGlzdDEyOCwgdm9pZCwgZW52KQorREVGX0hFTFBFUl8xKHZ3aGlzdDEyOHEs IHZvaWQsIGVudikKK0RFRl9IRUxQRVJfMih2d2hpc3QxMjhtLCB2b2lkLCBlbnYsIHMzMikKK0RF Rl9IRUxQRVJfMih2d2hpc3QxMjhxbSwgdm9pZCwgZW52LCBzMzIpCmRpZmYgLS1naXQgYS90YXJn ZXQvaGV4YWdvbi9vcF9oZWxwZXIuYyBiL3RhcmdldC9oZXhhZ29uL29wX2hlbHBlci5jCmluZGV4 IDYxZDVjZGUuLmEwYzUwYTMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9oZXhhZ29uL29wX2hlbHBlci5j CisrKyBiL3RhcmdldC9oZXhhZ29uL29wX2hlbHBlci5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5j bHVkZSAiYXJjaC5oIgogI2luY2x1ZGUgImhleF9hcmNoX3R5cGVzLmgiCiAjaW5jbHVkZSAiZm1h X2VtdS5oIgorI2luY2x1ZGUgIm1tdmVjL21tdmVjLmgiCisjaW5jbHVkZSAibW12ZWMvbWFjcm9z LmgiCiAKICNkZWZpbmUgU0ZfQklBUyAgICAgICAgMTI3CiAjZGVmaW5lIFNGX01BTlRCSVRTICAg IDIzCkBAIC0xNjQsNiArMTY2LDUyIEBAIHZvaWQgSEVMUEVSKGNvbW1pdF9zdG9yZSkoQ1BVSGV4 YWdvblN0YXRlICplbnYsIGludCBzbG90X251bSkKICAgICB9CiB9CiAKK3ZvaWQgSEVMUEVSKGNv bW1pdF9odnhfc3RvcmVzKShDUFVIZXhhZ29uU3RhdGUgKmVudikKK3sKKyAgICB1aW50cHRyX3Qg cmEgPSBHRVRQQygpOworICAgIGludCBpOworCisgICAgLyogTm9ybWFsIChwb3NzaWJseSBtYXNr ZWQpIHZlY3RvciBzdG9yZSAqLworICAgIGZvciAoaSA9IDA7IGkgPCBWU1RPUkVTX01BWDsgaSsr KSB7CisgICAgICAgIGlmIChlbnYtPnZzdG9yZV9wZW5kaW5nW2ldKSB7CisgICAgICAgICAgICBl bnYtPnZzdG9yZV9wZW5kaW5nW2ldID0gMDsKKyAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YSA9 IGVudi0+dnN0b3JlW2ldLnZhOworICAgICAgICAgICAgaW50IHNpemUgPSBlbnYtPnZzdG9yZVtp XS5zaXplOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAg ICAgICAgICAgICAgICBpZiAodGVzdF9iaXQoaiwgZW52LT52c3RvcmVbaV0ubWFzaykpIHsKKyAg ICAgICAgICAgICAgICAgICAgY3B1X3N0Yl9kYXRhX3JhKGVudiwgdmEgKyBqLCBlbnYtPnZzdG9y ZVtpXS5kYXRhLnViW2pdLCByYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorCisgICAgLyogU2NhdHRlciBzdG9yZSAqLworICAgIGlmIChlbnYt PnZ0Y21fcGVuZGluZykgeworICAgICAgICBlbnYtPnZ0Y21fcGVuZGluZyA9IGZhbHNlOworICAg ICAgICBpZiAoZW52LT52dGNtX2xvZy5vcCkgeworICAgICAgICAgICAgLyogTmVlZCB0byBwZXJm b3JtIHRoZSBzY2F0dGVyIHJlYWQvbW9kaWZ5L3dyaXRlIGF0IGNvbW1pdCB0aW1lICovCisgICAg ICAgICAgICBpZiAoZW52LT52dGNtX2xvZy5vcF9zaXplID09IDIpIHsKKyAgICAgICAgICAgICAg ICBTQ0FUVEVSX09QX1dSSVRFX1RPX01FTSh1aW50MTZfdCk7CisgICAgICAgICAgICB9IGVsc2Ug aWYgKGVudi0+dnRjbV9sb2cub3Bfc2l6ZSA9PSA0KSB7CisgICAgICAgICAgICAgICAgLyogV29y ZCBTY2F0dGVyICs9ICovCisgICAgICAgICAgICAgICAgU0NBVFRFUl9PUF9XUklURV9UT19NRU0o dWludDMyX3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnX2Fzc2Vy dF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IGVudi0+dnRjbV9sb2cuc2l6ZTsgaSsrKSB7CisgICAgICAg ICAgICAgICAgaWYgKHRlc3RfYml0KGksIGVudi0+dnRjbV9sb2cubWFzaykpIHsKKyAgICAgICAg ICAgICAgICAgICAgY3B1X3N0Yl9kYXRhX3JhKGVudiwgZW52LT52dGNtX2xvZy52YVtpXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi0+dnRjbV9sb2cuZGF0YS51Yltp XSwgcmEpOworICAgICAgICAgICAgICAgICAgICBjbGVhcl9iaXQoaSwgZW52LT52dGNtX2xvZy5t YXNrKTsKKyAgICAgICAgICAgICAgICAgICAgZW52LT52dGNtX2xvZy5kYXRhLnViW2ldID0gMDsK KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K Kwogc3RhdGljIHZvaWQgcHJpbnRfc3RvcmUoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludCBzbG90 KQogewogICAgIGlmICghKGVudi0+c2xvdF9jYW5jZWxsZWQgJiAoMSA8PCBzbG90KSkpIHsKQEAg LTI0Miw5ICsyOTAsMTAgQEAgdm9pZCBIRUxQRVIoZGVidWdfY29tbWl0X2VuZCkoQ1BVSGV4YWdv blN0YXRlICplbnYsIGludCBoYXNfc3QwLCBpbnQgaGFzX3N0MSkKICAgICBIRVhfREVCVUdfTE9H KCJOZXh0IFBDID0gIiBUQVJHRVRfRk1UX2x4ICJcbiIsIGVudi0+bmV4dF9QQyk7CiAgICAgSEVY X0RFQlVHX0xPRygiRXhlYyBjb3VudGVyczogcGt0ID0gIiBUQVJHRVRfRk1UX2x4CiAgICAgICAg ICAgICAgICAgICAiLCBpbnNuID0gIiBUQVJHRVRfRk1UX2x4Ci0gICAgICAgICAgICAgICAgICAi XG4iLAorICAgICAgICAgICAgICAgICAgIiwgaHZ4ID0gIiBUQVJHRVRfRk1UX2x4ICJcbiIsCiAg ICAgICAgICAgICAgICAgICBlbnYtPmdwcltIRVhfUkVHX1FFTVVfUEtUX0NOVF0sCi0gICAgICAg ICAgICAgICAgICBlbnYtPmdwcltIRVhfUkVHX1FFTVVfSU5TTl9DTlRdKTsKKyAgICAgICAgICAg ICAgICAgIGVudi0+Z3ByW0hFWF9SRUdfUUVNVV9JTlNOX0NOVF0sCisgICAgICAgICAgICAgICAg ICBlbnYtPmdwcltIRVhfUkVHX1FFTVVfSFZYX0NOVF0pOwogCiB9CiAKQEAgLTExNjUsNiArMTIx NCwxNzEgQEAgZmxvYXQ2NCBIRUxQRVIoZGZtcHloaCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGZs b2F0NjQgUnh4ViwKICAgICByZXR1cm4gUnh4VjsKIH0KIAorLyogSGlzdG9ncmFtIGluc3RydWN0 aW9ucyAqLworCit2b2lkIEhFTFBFUih2aGlzdCkoQ1BVSGV4YWdvblN0YXRlICplbnYpCit7Cisg ICAgTU1WZWN0b3IgKmlucHV0ID0gJmVudi0+dG1wX1ZSZWdzWzBdOworCisgICAgZm9yIChpbnQg bGFuZSA9IDA7IGxhbmUgPCA4OyBsYW5lKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBzaXplb2YoTU1WZWN0b3IpIC8gODsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFy IHZhbHVlID0gaW5wdXQtPnViWyhzaXplb2YoTU1WZWN0b3IpIC8gOCkgKiBsYW5lICsgaV07Cisg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZ25vID0gdmFsdWUgPj4gMzsKKyAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgZWxlbWVudCA9IHZhbHVlICYgNzsKKworICAgICAgICAgICAgZW52LT5W UmVnc1tyZWdub10udWhbKHNpemVvZihNTVZlY3RvcikgLyAxNikgKiBsYW5lICsgZWxlbWVudF0r KzsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBIRUxQRVIodmhpc3RxKShDUFVIZXhhZ29u U3RhdGUgKmVudikKK3sKKyAgICBNTVZlY3RvciAqaW5wdXQgPSAmZW52LT50bXBfVlJlZ3NbMF07 CisKKyAgICBmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IDg7IGxhbmUrKykgeworICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IHNpemVvZihNTVZlY3RvcikgLyA4OyArK2kpIHsKKyAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUgPSBpbnB1dC0+dWJbKHNpemVvZihNTVZlY3RvcikgLyA4 KSAqIGxhbmUgKyBpXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVnbm8gPSB2YWx1ZSA+ PiAzOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBlbGVtZW50ID0gdmFsdWUgJiA3OworCisg ICAgICAgICAgICBpZiAoZkdFVFFCSVQoZW52LT5xdG1wLCBzaXplb2YoTU1WZWN0b3IpIC8gOCAq IGxhbmUgKyBpKSkgeworICAgICAgICAgICAgICAgIGVudi0+VlJlZ3NbcmVnbm9dLnVoWworICAg ICAgICAgICAgICAgICAgICAoc2l6ZW9mKE1NVmVjdG9yKSAvIDE2KSAqIGxhbmUgKyBlbGVtZW50 XSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEhFTFBFUih2 d2hpc3QyNTYpKENQVUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIE1NVmVjdG9yICppbnB1dCA9 ICZlbnYtPnRtcF9WUmVnc1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKHNpemVvZihN TVZlY3RvcikgLyAyKTsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBidWNrZXQgPSBmR0VU VUJZVEUoMCwgaW5wdXQtPmhbaV0pOworICAgICAgICB1bnNpZ25lZCBpbnQgd2VpZ2h0ID0gZkdF VFVCWVRFKDEsIGlucHV0LT5oW2ldKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHZpbmRleCA9IChi dWNrZXQgPj4gMykgJiAweDFGOworICAgICAgICB1bnNpZ25lZCBpbnQgZWxpbmRleCA9ICgoaSA+ PiAwKSAmICh+NykpIHwgKChidWNrZXQgPj4gMCkgJiA3KTsKKworICAgICAgICBlbnYtPlZSZWdz W3ZpbmRleF0udWhbZWxpbmRleF0gPQorICAgICAgICAgICAgZW52LT5WUmVnc1t2aW5kZXhdLnVo W2VsaW5kZXhdICsgd2VpZ2h0OworICAgIH0KK30KKwordm9pZCBIRUxQRVIodndoaXN0MjU2cSko Q1BVSGV4YWdvblN0YXRlICplbnYpCit7CisgICAgTU1WZWN0b3IgKmlucHV0ID0gJmVudi0+dG1w X1ZSZWdzWzBdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoc2l6ZW9mKE1NVmVjdG9yKSAv IDIpOyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGJ1Y2tldCA9IGZHRVRVQllURSgwLCBp bnB1dC0+aFtpXSk7CisgICAgICAgIHVuc2lnbmVkIGludCB3ZWlnaHQgPSBmR0VUVUJZVEUoMSwg aW5wdXQtPmhbaV0pOworICAgICAgICB1bnNpZ25lZCBpbnQgdmluZGV4ID0gKGJ1Y2tldCA+PiAz KSAmIDB4MUY7CisgICAgICAgIHVuc2lnbmVkIGludCBlbGluZGV4ID0gKChpID4+IDApICYgKH43 KSkgfCAoKGJ1Y2tldCA+PiAwKSAmIDcpOworCisgICAgICAgIGlmIChmR0VUUUJJVChlbnYtPnF0 bXAsIDIgKiBpKSkgeworICAgICAgICAgICAgZW52LT5WUmVnc1t2aW5kZXhdLnVoW2VsaW5kZXhd ID0KKyAgICAgICAgICAgICAgICBlbnYtPlZSZWdzW3ZpbmRleF0udWhbZWxpbmRleF0gKyB3ZWln aHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSEVMUEVSKHZ3aGlzdDI1Nl9zYXQpKENQ VUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIE1NVmVjdG9yICppbnB1dCA9ICZlbnYtPnRtcF9W UmVnc1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKHNpemVvZihNTVZlY3RvcikgLyAy KTsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBidWNrZXQgPSBmR0VUVUJZVEUoMCwgaW5w dXQtPmhbaV0pOworICAgICAgICB1bnNpZ25lZCBpbnQgd2VpZ2h0ID0gZkdFVFVCWVRFKDEsIGlu cHV0LT5oW2ldKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHZpbmRleCA9IChidWNrZXQgPj4gMykg JiAweDFGOworICAgICAgICB1bnNpZ25lZCBpbnQgZWxpbmRleCA9ICgoaSA+PiAwKSAmICh+Nykp IHwgKChidWNrZXQgPj4gMCkgJiA3KTsKKworICAgICAgICBlbnYtPlZSZWdzW3ZpbmRleF0udWhb ZWxpbmRleF0gPQorICAgICAgICAgICAgZlZTQVRVSChlbnYtPlZSZWdzW3ZpbmRleF0udWhbZWxp bmRleF0gKyB3ZWlnaHQpOworICAgIH0KK30KKwordm9pZCBIRUxQRVIodndoaXN0MjU2cV9zYXQp KENQVUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIE1NVmVjdG9yICppbnB1dCA9ICZlbnYtPnRt cF9WUmVnc1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKHNpemVvZihNTVZlY3Rvcikg LyAyKTsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBidWNrZXQgPSBmR0VUVUJZVEUoMCwg aW5wdXQtPmhbaV0pOworICAgICAgICB1bnNpZ25lZCBpbnQgd2VpZ2h0ID0gZkdFVFVCWVRFKDEs IGlucHV0LT5oW2ldKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHZpbmRleCA9IChidWNrZXQgPj4g MykgJiAweDFGOworICAgICAgICB1bnNpZ25lZCBpbnQgZWxpbmRleCA9ICgoaSA+PiAwKSAmICh+ NykpIHwgKChidWNrZXQgPj4gMCkgJiA3KTsKKworICAgICAgICBpZiAoZkdFVFFCSVQoZW52LT5x dG1wLCAyICogaSkpIHsKKyAgICAgICAgICAgIGVudi0+VlJlZ3NbdmluZGV4XS51aFtlbGluZGV4 XSA9CisgICAgICAgICAgICAgICAgZlZTQVRVSChlbnYtPlZSZWdzW3ZpbmRleF0udWhbZWxpbmRl eF0gKyB3ZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEhFTFBFUih2d2hpc3Qx MjgpKENQVUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIE1NVmVjdG9yICppbnB1dCA9ICZlbnYt PnRtcF9WUmVnc1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKHNpemVvZihNTVZlY3Rv cikgLyAyKTsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBidWNrZXQgPSBmR0VUVUJZVEUo MCwgaW5wdXQtPmhbaV0pOworICAgICAgICB1bnNpZ25lZCBpbnQgd2VpZ2h0ID0gZkdFVFVCWVRF KDEsIGlucHV0LT5oW2ldKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHZpbmRleCA9IChidWNrZXQg Pj4gMykgJiAweDFGOworICAgICAgICB1bnNpZ25lZCBpbnQgZWxpbmRleCA9ICgoaSA+PiAxKSAm ICh+MykpIHwgKChidWNrZXQgPj4gMSkgJiAzKTsKKworICAgICAgICBlbnYtPlZSZWdzW3ZpbmRl eF0udXdbZWxpbmRleF0gPQorICAgICAgICAgICAgZW52LT5WUmVnc1t2aW5kZXhdLnV3W2VsaW5k ZXhdICsgd2VpZ2h0OworICAgIH0KK30KKwordm9pZCBIRUxQRVIodndoaXN0MTI4cSkoQ1BVSGV4 YWdvblN0YXRlICplbnYpCit7CisgICAgTU1WZWN0b3IgKmlucHV0ID0gJmVudi0+dG1wX1ZSZWdz WzBdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoc2l6ZW9mKE1NVmVjdG9yKSAvIDIpOyBp KyspIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGJ1Y2tldCA9IGZHRVRVQllURSgwLCBpbnB1dC0+ aFtpXSk7CisgICAgICAgIHVuc2lnbmVkIGludCB3ZWlnaHQgPSBmR0VUVUJZVEUoMSwgaW5wdXQt PmhbaV0pOworICAgICAgICB1bnNpZ25lZCBpbnQgdmluZGV4ID0gKGJ1Y2tldCA+PiAzKSAmIDB4 MUY7CisgICAgICAgIHVuc2lnbmVkIGludCBlbGluZGV4ID0gKChpID4+IDEpICYgKH4zKSkgfCAo KGJ1Y2tldCA+PiAxKSAmIDMpOworCisgICAgICAgIGlmIChmR0VUUUJJVChlbnYtPnF0bXAsIDIg KiBpKSkgeworICAgICAgICAgICAgZW52LT5WUmVnc1t2aW5kZXhdLnV3W2VsaW5kZXhdID0KKyAg ICAgICAgICAgICAgICBlbnYtPlZSZWdzW3ZpbmRleF0udXdbZWxpbmRleF0gKyB3ZWlnaHQ7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSEVMUEVSKHZ3aGlzdDEyOG0pKENQVUhleGFnb25T dGF0ZSAqZW52LCBpbnQzMl90IHVpVikKK3sKKyAgICBNTVZlY3RvciAqaW5wdXQgPSAmZW52LT50 bXBfVlJlZ3NbMF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IChzaXplb2YoTU1WZWN0b3Ip IC8gMik7IGkrKykgeworICAgICAgICB1bnNpZ25lZCBpbnQgYnVja2V0ID0gZkdFVFVCWVRFKDAs IGlucHV0LT5oW2ldKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHdlaWdodCA9IGZHRVRVQllURSgx LCBpbnB1dC0+aFtpXSk7CisgICAgICAgIHVuc2lnbmVkIGludCB2aW5kZXggPSAoYnVja2V0ID4+ IDMpICYgMHgxRjsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsaW5kZXggPSAoKGkgPj4gMSkgJiAo fjMpKSB8ICgoYnVja2V0ID4+IDEpICYgMyk7CisKKyAgICAgICAgaWYgKChidWNrZXQgJiAxKSA9 PSB1aVYpIHsKKyAgICAgICAgICAgIGVudi0+VlJlZ3NbdmluZGV4XS51d1tlbGluZGV4XSA9Cisg ICAgICAgICAgICAgICAgZW52LT5WUmVnc1t2aW5kZXhdLnV3W2VsaW5kZXhdICsgd2VpZ2h0Owor ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEhFTFBFUih2d2hpc3QxMjhxbSkoQ1BVSGV4YWdv blN0YXRlICplbnYsIGludDMyX3QgdWlWKQoreworICAgIE1NVmVjdG9yICppbnB1dCA9ICZlbnYt PnRtcF9WUmVnc1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKHNpemVvZihNTVZlY3Rv cikgLyAyKTsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBidWNrZXQgPSBmR0VUVUJZVEUo MCwgaW5wdXQtPmhbaV0pOworICAgICAgICB1bnNpZ25lZCBpbnQgd2VpZ2h0ID0gZkdFVFVCWVRF KDEsIGlucHV0LT5oW2ldKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHZpbmRleCA9IChidWNrZXQg Pj4gMykgJiAweDFGOworICAgICAgICB1bnNpZ25lZCBpbnQgZWxpbmRleCA9ICgoaSA+PiAxKSAm ICh+MykpIHwgKChidWNrZXQgPj4gMSkgJiAzKTsKKworICAgICAgICBpZiAoKChidWNrZXQgJiAx KSA9PSB1aVYpICYmIGZHRVRRQklUKGVudi0+cXRtcCwgMiAqIGkpKSB7CisgICAgICAgICAgICBl bnYtPlZSZWdzW3ZpbmRleF0udXdbZWxpbmRleF0gPQorICAgICAgICAgICAgICAgIGVudi0+VlJl Z3NbdmluZGV4XS51d1tlbGluZGV4XSArIHdlaWdodDsKKyAgICAgICAgfQorICAgIH0KK30KKwog c3RhdGljIHZvaWQgY2FuY2VsX3Nsb3QoQ1BVSGV4YWdvblN0YXRlICplbnYsIHVpbnQzMl90IHNs b3QpCiB7CiAgICAgSEVYX0RFQlVHX0xPRygiU2xvdCAlZCBjYW5jZWxsZWRcbiIsIHNsb3QpOwot LSAKMi43LjQKCg==