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=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2A87C352A4 for ; Tue, 11 Feb 2020 01:02:38 +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 5D08F20661 for ; Tue, 11 Feb 2020 01:02:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="yWnXHERe" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5D08F20661 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]:41844 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1Jwj-00015R-7I for qemu-devel@archiver.kernel.org; Mon, 10 Feb 2020 20:02:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60543) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1JcB-0001Jb-MB for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1Jc5-0006DP-AY for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:23 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:3651) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1Jc4-0004uE-Tb for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1581381676; x=1612917676; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4EsQgAocETP3eSs/OoWqFMvFQDpQRfy5X8Yq4gBjGN4=; b=yWnXHEReNWi3VthAPh4v9AK3pro6tBKBhmgKi0lKkN2dXZLgQ0/pP2gE +A5jUYXyNRM4Ni5yluAZnAPRzST7aTN87nlObV1TPdG/DDemtHwVqOCIV ngSEscsiiGHv30klIOEjSvwyBCT2S6f1bPGJJ7GWh7yAkP3pYpr3s4be1 s=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 10 Feb 2020 16:41:01 -0800 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; 10 Feb 2020 16:41:00 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 8F2DD1B42; Mon, 10 Feb 2020 18:41:00 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH 33/66] Hexagon TCG generation helpers - step 1 Date: Mon, 10 Feb 2020 18:40:11 -0600 Message-Id: <1581381644-13678-34-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1581381644-13678-1-git-send-email-tsimpson@quicinc.com> References: <1581381644-13678-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 199.106.114.38 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: riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, Taylor Simpson , philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" SGVscGVycyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyByZWdpc3RlcnMKSGVscGVycyBmb3IgZ2V0 dGluZyBhbmQgc2V0dGluZyBwYXJ0cyBvZiB2YWx1ZXMgKGUuZy4sIHNldCBiaXQpCgpTaWduZWQt b2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0 L2hleGFnb24vZ2VucHRyX2hlbHBlcnMuaCB8IDMyMyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMzIzIGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9nZW5wdHJfaGVscGVycy5oCgpkaWZmIC0tZ2l0 IGEvdGFyZ2V0L2hleGFnb24vZ2VucHRyX2hlbHBlcnMuaCBiL3RhcmdldC9oZXhhZ29uL2dlbnB0 cl9oZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5MWZkYgot LS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbnB0cl9oZWxwZXJzLmgKQEAgLTAs MCArMSwzMjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE5IFF1YWxjb21tIElubm92YXRp b24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEdFTlBUUl9IRUxQRVJTX0gK KyNkZWZpbmUgR0VOUFRSX0hFTFBFUlNfSAorCitzdGF0aWMgaW5saW5lIFRDR3YgZ2VuX3JlYWRf cmVnKFRDR3YgcmVzdWx0LCBpbnQgbnVtKQoreworICAgIHRjZ19nZW5fbW92X3RsKHJlc3VsdCwg aGV4X2dwcltudW1dKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIFRD R3YgZ2VuX3JlYWRfcHJlZyhUQ0d2IHByZWQsIHVpbnQ4X3QgbnVtKQoreworICAgIHRjZ19nZW5f bW92X3RsKHByZWQsIGhleF9wcmVkW251bV0pOworICAgIHJldHVybiBwcmVkOworfQorCitzdGF0 aWMgaW5saW5lIFRDR3YgZ2VuX25ld3JlZ19zdChUQ0d2IHJlc3VsdCwgVENHdl9lbnYgY3B1X2Vu diwgVENHdiBybnVtKQoreworICAgIGdlbl9oZWxwZXJfbmV3X3ZhbHVlKHJlc3VsdCwgY3B1X2Vu diwgcm51bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlz X3ByZWxvYWRlZChEaXNhc0NvbnRleHQgKmN0eCwgaW50IG51bSkKK3sKKyAgICBpbnQgaTsKKyAg ICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5jdHhfcmVnX2xvZ19pZHg7IGkrKykgeworICAgICAgICBp ZiAoY3R4LT5jdHhfcmVnX2xvZ1tpXSA9PSBudW0pIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGdlbl9sb2dfcmVnX3dyaXRlKGludCBybnVtLCBUQ0d2IHZhbCwgaW50IHNsb3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX3ByZWRpY2F0ZWQpCit7 CisgICAgaWYgKGlzX3ByZWRpY2F0ZWQpIHsKKyAgICAgICAgVENHdiBvbmUgPSB0Y2dfY29uc3Rf dGwoMSk7CisgICAgICAgIFRDR3YgemVybyA9IHRjZ19jb25zdF90bCgwKTsKKyAgICAgICAgVENH diBzbG90X21hc2sgPSB0Y2dfdGVtcF9uZXcoKTsKKworICAgICAgICB0Y2dfZ2VuX2FuZGlfdGwo c2xvdF9tYXNrLCBoZXhfc2xvdF9jYW5jZWxsZWQsIDEgPDwgc2xvdCk7CisgICAgICAgIHRjZ19n ZW5fbW92Y29uZF90bChUQ0dfQ09ORF9FUSwgaGV4X25ld192YWx1ZVtybnVtXSwgc2xvdF9tYXNr LCB6ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCBoZXhfbmV3X3ZhbHVlW3Ju dW1dKTsKKworICAgICAgICB0Y2dfdGVtcF9mcmVlKG9uZSk7CisgICAgICAgIHRjZ190ZW1wX2Zy ZWUoemVybyk7CisgICAgICAgIHRjZ190ZW1wX2ZyZWUoc2xvdF9tYXNrKTsKKyAgICB9IGVsc2Ug eworICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlW3JudW1dLCB2YWwpOworICAg IH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9sb2dfcmVnX3dyaXRlX3BhaXIoaW50IHJu dW0sIFRDR3ZfaTY0IHZhbCwgaW50IHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgaXNfcHJlZGljYXRlZCkKK3sKKyAgICBUQ0d2IHZhbDMyID0gdGNn X3RlbXBfbmV3KCk7CisKKyAgICBpZiAoaXNfcHJlZGljYXRlZCkgeworICAgICAgICBUQ0d2IG9u ZSA9IHRjZ19jb25zdF90bCgxKTsKKyAgICAgICAgVENHdiB6ZXJvID0gdGNnX2NvbnN0X3RsKDAp OworICAgICAgICBUQ0d2IHNsb3RfbWFzayA9IHRjZ190ZW1wX25ldygpOworCisgICAgICAgIHRj Z19nZW5fYW5kaV90bChzbG90X21hc2ssIGhleF9zbG90X2NhbmNlbGxlZCwgMSA8PCBzbG90KTsK KyAgICAgICAgLyogTG93IHdvcmQgKi8KKyAgICAgICAgdGNnX2dlbl9leHRybF9pNjRfaTMyKHZh bDMyLCB2YWwpOworICAgICAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NPTkRfRVEsIGhleF9u ZXdfdmFsdWVbcm51bV0sIHNsb3RfbWFzaywgemVybywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhbDMyLCBoZXhfbmV3X3ZhbHVlW3JudW1dKTsKKyAgICAgICAgLyogSGlnaCB3b3JkICov CisgICAgICAgIHRjZ19nZW5fZXh0cmhfaTY0X2kzMih2YWwzMiwgdmFsKTsKKyAgICAgICAgdGNn X2dlbl9tb3Zjb25kX3RsKFRDR19DT05EX0VRLCBoZXhfbmV3X3ZhbHVlW3JudW0gKyAxXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfbWFzaywgemVybywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhbDMyLCBoZXhfbmV3X3ZhbHVlW3JudW0gKyAxXSk7CisKKyAgICAgICAg dGNnX3RlbXBfZnJlZShvbmUpOworICAgICAgICB0Y2dfdGVtcF9mcmVlKHplcm8pOworICAgICAg ICB0Y2dfdGVtcF9mcmVlKHNsb3RfbWFzayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogTG93 IHdvcmQgKi8KKyAgICAgICAgdGNnX2dlbl9leHRybF9pNjRfaTMyKHZhbDMyLCB2YWwpOworICAg ICAgICB0Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlW3JudW1dLCB2YWwzMik7CisgICAgICAg IC8qIEhpZ2ggd29yZCAqLworICAgICAgICB0Y2dfZ2VuX2V4dHJoX2k2NF9pMzIodmFsMzIsIHZh bCk7CisgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXdfdmFsdWVbcm51bSArIDFdLCB2YWwz Mik7CisgICAgfQorCisgICAgdGNnX3RlbXBfZnJlZSh2YWwzMik7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBnZW5fbG9nX3ByZWRfd3JpdGUoaW50IHBudW0sIFRDR3YgdmFsKQoreworICAgIFRD R3YgemVybyA9IHRjZ19jb25zdF90bCgwKTsKKyAgICBUQ0d2IGJhc2VfdmFsID0gdGNnX3RlbXBf bG9jYWxfbmV3KCk7CisgICAgVENHdiBhbmRfdmFsID0gdGNnX3RlbXBfbG9jYWxfbmV3KCk7CisK KyAgICAvKiBNdWx0aXBsZSB3cml0ZXMgdG8gdGhlIHNhbWUgcHJlZyBhcmUgYW5kJ2VkIHRvZ2V0 aGVyICovCisgICAgdGNnX2dlbl9hbmRpX3RsKGJhc2VfdmFsLCB2YWwsIDB4ZmYpOworICAgIHRj Z19nZW5fYW5kX3RsKGFuZF92YWwsIGJhc2VfdmFsLCBoZXhfbmV3X3ByZWRfdmFsdWVbcG51bV0p OworICAgIHRjZ19nZW5fbW92Y29uZF90bChUQ0dfQ09ORF9ORSwgaGV4X25ld19wcmVkX3ZhbHVl W3BudW1dLAorICAgICAgICAgICAgICAgICAgICAgICBoZXhfcHJlZF93cml0dGVuW3BudW1dLCB6 ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICBhbmRfdmFsLCBiYXNlX3ZhbCk7CisgICAgdGNn X2dlbl9tb3ZpX3RsKGhleF9wcmVkX3dyaXR0ZW5bcG51bV0sIDEpOworCisgICAgdGNnX3RlbXBf ZnJlZSh6ZXJvKTsKKyAgICB0Y2dfdGVtcF9mcmVlKGJhc2VfdmFsKTsKKyAgICB0Y2dfdGVtcF9m cmVlKGFuZF92YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX3JlYWRfcDNfMChUQ0d2 IGNvbnRyb2xfcmVnKQoreworICAgIFRDR3YgcHZhbCA9IHRjZ190ZW1wX25ldygpOworICAgIGlu dCBpOworICAgIHRjZ19nZW5fbW92aV90bChjb250cm9sX3JlZywgMCk7CisgICAgZm9yIChpID0g TlVNX1BSRUdTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdGNnX2dlbl9zaGxpX3RsKGNv bnRyb2xfcmVnLCBjb250cm9sX3JlZywgOCk7CisgICAgICAgIHRjZ19nZW5fYW5kaV90bChwdmFs LCBoZXhfcHJlZFtpXSwgMHhmZik7CisgICAgICAgIHRjZ19nZW5fb3JfdGwoY29udHJvbF9yZWcs IGNvbnRyb2xfcmVnLCBwdmFsKTsKKyAgICB9CisgICAgdGNnX3RlbXBfZnJlZShwdmFsKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIGdlbl93cml0ZV9wM18wKFRDR3YgdG1wKQoreworICAgIFRD R3YgY29udHJvbF9yZWcgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICBUQ0d2IHByZWRfdmFsID0gdGNn X3RlbXBfbmV3KCk7CisgICAgaW50IGk7CisKKyAgICB0Y2dfZ2VuX21vdl90bChjb250cm9sX3Jl ZywgdG1wKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRUdTOyBpKyspIHsKKyAgICAgICAg dGNnX2dlbl9hbmRpX3RsKHByZWRfdmFsLCBjb250cm9sX3JlZywgMHhmZik7CisgICAgICAgIHRj Z19nZW5fbW92X3RsKGhleF9wcmVkW2ldLCBwcmVkX3ZhbCk7CisgICAgICAgIHRjZ19nZW5fc2hy aV90bChjb250cm9sX3JlZywgY29udHJvbF9yZWcsIDgpOworICAgIH0KKyAgICB0Y2dfdGVtcF9m cmVlKGNvbnRyb2xfcmVnKTsKKyAgICB0Y2dfdGVtcF9mcmVlKHByZWRfdmFsKTsKK30KKworc3Rh dGljIGlubGluZSBUQ0d2IGdlbl9nZXRfYnl0ZShUQ0d2IHJlc3VsdCwgaW50IE4sIFRDR3Ygc3Jj LCBib29sIHNpZ24pCit7CisgICAgVENHdiBzaGlmdCA9IHRjZ19jb25zdF90bCg4ICogTik7Cisg ICAgVENHdiBtYXNrID0gdGNnX2NvbnN0X3RsKDB4ZmYpOworCisgICAgdGNnX2dlbl9zaHJfdGwo cmVzdWx0LCBzcmMsIHNoaWZ0KTsKKyAgICB0Y2dfZ2VuX2FuZF90bChyZXN1bHQsIHJlc3VsdCwg bWFzayk7CisgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgdGNnX2dlbl9leHQ4c190bChyZXN1bHQs IHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGNnX2dlbl9leHQ4dV90bChyZXN1bHQs IHJlc3VsdCk7CisgICAgfQorICAgIHRjZ190ZW1wX2ZyZWUobWFzayk7CisgICAgdGNnX3RlbXBf ZnJlZShzaGlmdCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIFRD R3YgZ2VuX2dldF9ieXRlX2k2NChUQ0d2IHJlc3VsdCwgaW50IE4sIFRDR3ZfaTY0IHNyYywgYm9v bCBzaWduKQoreworICAgIFRDR3ZfaTY0IHJlc3VsdF9pNjQgPSB0Y2dfdGVtcF9uZXdfaTY0KCk7 CisgICAgVENHdl9pNjQgc2hpZnQgPSB0Y2dfY29uc3RfaTY0KDggKiBOKTsKKyAgICBUQ0d2X2k2 NCBtYXNrID0gdGNnX2NvbnN0X2k2NCgweGZmKTsKKyAgICB0Y2dfZ2VuX3Nocl9pNjQocmVzdWx0 X2k2NCwgc3JjLCBzaGlmdCk7CisgICAgdGNnX2dlbl9hbmRfaTY0KHJlc3VsdF9pNjQsIHJlc3Vs dF9pNjQsIG1hc2spOworICAgIHRjZ19nZW5fZXh0cmxfaTY0X2kzMihyZXN1bHQsIHJlc3VsdF9p NjQpOworICAgIGlmIChzaWduKSB7CisgICAgICAgIHRjZ19nZW5fZXh0OHNfdGwocmVzdWx0LCBy ZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRjZ19nZW5fZXh0OHVfdGwocmVzdWx0LCBy ZXN1bHQpOworICAgIH0KKyAgICB0Y2dfdGVtcF9mcmVlX2k2NChyZXN1bHRfaTY0KTsKKyAgICB0 Y2dfdGVtcF9mcmVlX2k2NChzaGlmdCk7CisgICAgdGNnX3RlbXBfZnJlZV9pNjQobWFzayk7CisK KyAgICByZXR1cm4gcmVzdWx0OworCit9CitzdGF0aWMgaW5saW5lIFRDR3YgZ2VuX2dldF9oYWxm KFRDR3YgcmVzdWx0LCBpbnQgTiwgVENHdiBzcmMsIGJvb2wgc2lnbikKK3sKKyAgICBUQ0d2IHNo aWZ0ID0gdGNnX2NvbnN0X3RsKDE2ICogTik7CisgICAgVENHdiBtYXNrID0gdGNnX2NvbnN0X3Rs KDB4ZmZmZik7CisKKyAgICB0Y2dfZ2VuX3Nocl90bChyZXN1bHQsIHNyYywgc2hpZnQpOworICAg IHRjZ19nZW5fYW5kX3RsKHJlc3VsdCwgcmVzdWx0LCBtYXNrKTsKKyAgICBpZiAoc2lnbikgewor ICAgICAgICB0Y2dfZ2VuX2V4dDE2c190bChyZXN1bHQsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgdGNnX2dlbl9leHQxNnVfdGwocmVzdWx0LCByZXN1bHQpOworICAgIH0KKyAgICB0 Y2dfdGVtcF9mcmVlKG1hc2spOworICAgIHRjZ190ZW1wX2ZyZWUoc2hpZnQpOworCisgICAgcmV0 dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9zZXRfaGFsZihpbnQgTiwg VENHdiByZXN1bHQsIFRDR3Ygc3JjKQoreworICAgIFRDR3YgbWFzazEgPSB0Y2dfY29uc3RfdGwo figweGZmZmYgPDwgKE4gKiAxNikpKTsKKyAgICBUQ0d2IG1hc2syID0gdGNnX2NvbnN0X3RsKDB4 ZmZmZik7CisgICAgVENHdiBzaGlmdCA9IHRjZ19jb25zdF90bChOICogMTYpOworICAgIFRDR3Yg dG1wID0gdGNnX3RlbXBfbmV3KCk7CisKKyAgICB0Y2dfZ2VuX2FuZF90bChyZXN1bHQsIHJlc3Vs dCwgbWFzazEpOworICAgIHRjZ19nZW5fYW5kX3RsKHRtcCwgc3JjLCBtYXNrMik7CisgICAgdGNn X2dlbl9zaGxpX3RsKHRtcCwgdG1wLCBOICogMTYpOworICAgIHRjZ19nZW5fb3JfdGwocmVzdWx0 LCByZXN1bHQsIHRtcCk7CisKKyAgICB0Y2dfdGVtcF9mcmVlKG1hc2sxKTsKKyAgICB0Y2dfdGVt cF9mcmVlKG1hc2syKTsKKyAgICB0Y2dfdGVtcF9mcmVlKHNoaWZ0KTsKKyAgICB0Y2dfdGVtcF9m cmVlKHRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fc2V0X2hhbGZfaTY0KGludCBO LCBUQ0d2X2k2NCByZXN1bHQsIFRDR3Ygc3JjKQoreworICAgIFRDR3ZfaTY0IG1hc2sxID0gdGNn X2NvbnN0X2k2NCh+KDB4ZmZmZkxMIDw8IChOICogMTYpKSk7CisgICAgVENHdl9pNjQgbWFzazIg PSB0Y2dfY29uc3RfaTY0KDB4ZmZmZkxMKTsKKyAgICBUQ0d2X2k2NCBzaGlmdCA9IHRjZ19jb25z dF9pNjQoTiAqIDE2KTsKKyAgICBUQ0d2X2k2NCB0bXAgPSB0Y2dfdGVtcF9uZXdfaTY0KCk7CisK KyAgICB0Y2dfZ2VuX2FuZF9pNjQocmVzdWx0LCByZXN1bHQsIG1hc2sxKTsKKyAgICB0Y2dfZ2Vu X2NvbmNhdF9pMzJfaTY0KHRtcCwgc3JjLCBzcmMpOworICAgIHRjZ19nZW5fYW5kX2k2NCh0bXAs IHRtcCwgbWFzazIpOworICAgIHRjZ19nZW5fc2hsaV9pNjQodG1wLCB0bXAsIE4gKiAxNik7Cisg ICAgdGNnX2dlbl9vcl9pNjQocmVzdWx0LCByZXN1bHQsIHRtcCk7CisKKyAgICB0Y2dfdGVtcF9m cmVlX2k2NChtYXNrMSk7CisgICAgdGNnX3RlbXBfZnJlZV9pNjQobWFzazIpOworICAgIHRjZ190 ZW1wX2ZyZWVfaTY0KHNoaWZ0KTsKKyAgICB0Y2dfdGVtcF9mcmVlX2k2NCh0bXApOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgZ2VuX3NldF9ieXRlKGludCBOLCBUQ0d2IHJlc3VsdCwgVENHdiBz cmMpCit7CisgICAgVENHdiBtYXNrMSA9IHRjZ19jb25zdF90bCh+KDB4ZmYgPDwgKE4gKiA4KSkp OworICAgIFRDR3YgbWFzazIgPSB0Y2dfY29uc3RfdGwoMHhmZik7CisgICAgVENHdiBzaGlmdCA9 IHRjZ19jb25zdF90bChOICogOCk7CisgICAgVENHdiB0bXAgPSB0Y2dfdGVtcF9uZXcoKTsKKwor ICAgIHRjZ19nZW5fYW5kX3RsKHJlc3VsdCwgcmVzdWx0LCBtYXNrMSk7CisgICAgdGNnX2dlbl9h bmRfdGwodG1wLCBzcmMsIG1hc2syKTsKKyAgICB0Y2dfZ2VuX3NobGlfdGwodG1wLCB0bXAsIE4g KiA4KTsKKyAgICB0Y2dfZ2VuX29yX3RsKHJlc3VsdCwgcmVzdWx0LCB0bXApOworCisgICAgdGNn X3RlbXBfZnJlZShtYXNrMSk7CisgICAgdGNnX3RlbXBfZnJlZShtYXNrMik7CisgICAgdGNnX3Rl bXBfZnJlZShzaGlmdCk7CisgICAgdGNnX3RlbXBfZnJlZSh0bXApOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgZ2VuX3NldF9ieXRlX2k2NChpbnQgTiwgVENHdl9pNjQgcmVzdWx0LCBUQ0d2IHNy YykKK3sKKyAgICBUQ0d2X2k2NCBtYXNrMSA9IHRjZ19jb25zdF9pNjQofigweGZmTEwgPDwgKE4g KiA4KSkpOworICAgIFRDR3ZfaTY0IG1hc2syID0gdGNnX2NvbnN0X2k2NCgweGZmTEwpOworICAg IFRDR3ZfaTY0IHNoaWZ0ID0gdGNnX2NvbnN0X2k2NChOICogOCk7CisgICAgVENHdl9pNjQgdG1w ID0gdGNnX3RlbXBfbmV3X2k2NCgpOworCisgICAgdGNnX2dlbl9hbmRfaTY0KHJlc3VsdCwgcmVz dWx0LCBtYXNrMSk7CisgICAgdGNnX2dlbl9jb25jYXRfaTMyX2k2NCh0bXAsIHNyYywgc3JjKTsK KyAgICB0Y2dfZ2VuX2FuZF9pNjQodG1wLCB0bXAsIG1hc2syKTsKKyAgICB0Y2dfZ2VuX3NobGlf aTY0KHRtcCwgdG1wLCBOICogOCk7CisgICAgdGNnX2dlbl9vcl9pNjQocmVzdWx0LCByZXN1bHQs IHRtcCk7CisKKyAgICB0Y2dfdGVtcF9mcmVlX2k2NChtYXNrMSk7CisgICAgdGNnX3RlbXBfZnJl ZV9pNjQobWFzazIpOworICAgIHRjZ190ZW1wX2ZyZWVfaTY0KHNoaWZ0KTsKKyAgICB0Y2dfdGVt cF9mcmVlX2k2NCh0bXApOworfQorCitzdGF0aWMgaW5saW5lIFRDR3YgZ2VuX2dldF93b3JkKFRD R3YgcmVzdWx0LCBpbnQgTiwgVENHdl9pNjQgc3JjLCBib29sIHNpZ24pCit7CisgICAgaWYgKE4g PT0gMCkgeworICAgICAgICB0Y2dfZ2VuX2V4dHJsX2k2NF9pMzIocmVzdWx0LCBzcmMpOworICAg IH0gZWxzZSBpZiAoTiA9PSAxKSB7CisgICAgICAgIHRjZ19nZW5fZXh0cmhfaTY0X2kzMihyZXN1 bHQsIHNyYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cisg ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgVENHdl9pNjQgZ2Vu X2dldF93b3JkX2k2NChUQ0d2X2k2NCByZXN1bHQsIGludCBOLCBUQ0d2X2k2NCBzcmMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaWduKQoreworICAgIFRD R3Ygd29yZCA9IHRjZ190ZW1wX25ldygpOworICAgIGdlbl9nZXRfd29yZCh3b3JkLCBOLCBzcmMs IHNpZ24pOworICAgIGlmIChzaWduKSB7CisgICAgICAgIHRjZ19nZW5fZXh0X2kzMl9pNjQocmVz dWx0LCB3b3JkKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0Y2dfZ2VuX2V4dHVfaTMyX2k2NChy ZXN1bHQsIHdvcmQpOworICAgIH0KKyAgICB0Y2dfdGVtcF9mcmVlKHdvcmQpOworICAgIHJldHVy biByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgVENHdiBnZW5fc2V0X2JpdChpbnQgaSwgVENH diByZXN1bHQsIFRDR3Ygc3JjKQoreworICAgIFRDR3YgbWFzayA9IHRjZ19jb25zdF90bCh+KDEg PDwgaSkpOworICAgIFRDR3YgYml0ID0gdGNnX3RlbXBfbmV3KCk7CisgICAgdGNnX2dlbl9zaGxp X3RsKGJpdCwgc3JjLCBpKTsKKyAgICB0Y2dfZ2VuX2FuZF90bChyZXN1bHQsIHJlc3VsdCwgbWFz ayk7CisgICAgdGNnX2dlbl9vcl90bChyZXN1bHQsIHJlc3VsdCwgYml0KTsKKyAgICB0Y2dfdGVt cF9mcmVlKG1hc2spOworICAgIHRjZ190ZW1wX2ZyZWUoYml0KTsKKworICAgIHJldHVybiByZXN1 bHQ7Cit9CisKKyNlbmRpZgotLSAKMi43LjQKCg==