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 632D8C433DB for ; Wed, 20 Jan 2021 03:44:03 +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 B21B02310D for ; Wed, 20 Jan 2021 03:44:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B21B02310D 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]:50802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l24PY-0007IR-Ey for qemu-devel@archiver.kernel.org; Tue, 19 Jan 2021 22:44:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l24CD-0007xf-0b for qemu-devel@nongnu.org; Tue, 19 Jan 2021 22:30:14 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:7731) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l24CA-0007Vb-0U for qemu-devel@nongnu.org; Tue, 19 Jan 2021 22:30:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1611113409; x=1642649409; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=OfYisIpjzmK+NVd667PmltPlFes0urdXGPJZhkUwu04=; b=x4yDbXc1PNdwLPOEnkrD1EQn8EDDYgYnnghDNMF9qQtoueOTqQs6TitN byfNnKMPRr0a+XBIrqWtA0Ls3anpFMVt2wdZtJOoFxLrqsE45v0ZP0HK1 vyP8hJMq+8EGQIdxqkRUwDNhnUv5L33K9T4YEUpN6L3KGL3QmaIsSMV9p E=; Received: from unknown (HELO ironmsg05-sd.qualcomm.com) ([10.53.140.145]) by alexa-out-sd-01.qualcomm.com with ESMTP; 19 Jan 2021 19:29:27 -0800 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg05-sd.qualcomm.com with ESMTP; 19 Jan 2021 19:29:26 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id C468E2A16; Tue, 19 Jan 2021 21:29:26 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v7 22/35] Hexagon (target/hexagon) generater phase 4 - decode tree Date: Tue, 19 Jan 2021 21:28:55 -0600 Message-Id: <1611113349-24906-23-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" UHl0aG9uIHNjcmlwdCB0aGF0IGVtaXRzIHRoZSBkZWNvZGUgdHJlZSBpbiBkZWN0cmVlX2dlbmVy YXRlZC5oLgoKU2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMu Y29tPgotLS0KIHRhcmdldC9oZXhhZ29uL2RlY3RyZWUucHkgfCAzNTEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDM1MSBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZGVjdHJlZS5weQoK ZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2RlY3RyZWUucHkgYi90YXJnZXQvaGV4YWdvbi9k ZWN0cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5NDY3ZWMKLS0t IC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9kZWN0cmVlLnB5CkBAIC0wLDAgKzEsMzUx IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisjIyAgQ29weXJpZ2h0KGMpIDIwMTkt MjAyMSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk LgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMj ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMj ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjIworCitpbXBv cnQgaW8KK2ltcG9ydCByZQorCitpbXBvcnQgc3lzCitpbXBvcnQgaXNldAorCitlbmNzID0ge3Rh ZyA6ICcnLmpvaW4ocmV2ZXJzZWQoaXNldC5pc2V0W3RhZ11bJ2VuYyddLnJlcGxhY2UoJyAnLCAn JykpKQorICAgIGZvciB0YWcgaW4gaXNldC50YWdzIGlmIGlzZXQuaXNldFt0YWddWydlbmMnXSAh PSAnTUlTU0lORyBFTkNPRElORyd9CisKK2VuY19jbGFzc2VzID0gc2V0KFtpc2V0LmlzZXRbdGFn XVsnZW5jX2NsYXNzJ10gZm9yIHRhZyBpbiBlbmNzLmtleXMoKV0pCitzdWJpbnNuX2VuY19jbGFz c2VzID0gXAorICAgIHNldChbZW5jX2NsYXNzIGZvciBlbmNfY2xhc3MgaW4gZW5jX2NsYXNzZXMg XAorICAgICAgICBpZiBlbmNfY2xhc3Muc3RhcnRzd2l0aCgnU1VCSU5TTl8nKV0pCitleHRfZW5j X2NsYXNzZXMgPSBcCisgICAgc2V0KFtlbmNfY2xhc3MgZm9yIGVuY19jbGFzcyBpbiBlbmNfY2xh c3NlcyBcCisgICAgICAgIGlmIGVuY19jbGFzcyBub3QgaW4gKCdOT1JNQUwnLCAnMTZCSVQnKSBh bmQgXAorICAgICAgICAgICBub3QgZW5jX2NsYXNzLnN0YXJ0c3dpdGgoJ1NVQklOU05fJyldKQor Cit0cnk6CisgICAgc3ViaW5zbl9ncm91cGluZ3MgPSBpc2V0LnN1Ymluc25fZ3JvdXBpbmdzCitl eGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgc3ViaW5zbl9ncm91cGluZ3MgPSB7fQorCitmb3Ig KHRhZywgc3ViaW5zbl9ncm91cGluZykgaW4gc3ViaW5zbl9ncm91cGluZ3MuaXRlbXMoKToKKyAg ICBlbmNzW3RhZ10gPSAnJy5qb2luKHJldmVyc2VkKHN1Ymluc25fZ3JvdXBpbmdbJ2VuYyddLnJl cGxhY2UoJyAnLCAnJykpKQorCitkZWN0cmVlX25vcm1hbCA9IHsnbGVhdmVzJyA6IHNldCgpfQor ZGVjdHJlZV8xNmJpdCA9IHsnbGVhdmVzJyA6IHNldCgpfQorZGVjdHJlZV9zdWJpbnNuX2dyb3Vw aW5ncyA9IHsnbGVhdmVzJyA6IHNldCgpfQorZGVjdHJlZV9zdWJpbnNucyA9IHtuYW1lIDogeyds ZWF2ZXMnIDogc2V0KCl9IGZvciBuYW1lIGluIHN1Ymluc25fZW5jX2NsYXNzZXN9CitkZWN0cmVl X2V4dGVuc2lvbnMgPSB7bmFtZSA6IHsnbGVhdmVzJyA6IHNldCgpfSBmb3IgbmFtZSBpbiBleHRf ZW5jX2NsYXNzZXN9CisKK2ZvciB0YWcgaW4gZW5jcy5rZXlzKCk6CisgICAgaWYgdGFnIGluIHN1 Ymluc25fZ3JvdXBpbmdzOgorICAgICAgICBkZWN0cmVlX3N1Ymluc25fZ3JvdXBpbmdzWydsZWF2 ZXMnXS5hZGQodGFnKQorICAgICAgICBjb250aW51ZQorICAgIGVuY19jbGFzcyA9IGlzZXQuaXNl dFt0YWddWydlbmNfY2xhc3MnXQorICAgIGlmIGVuY19jbGFzcy5zdGFydHN3aXRoKCdTVUJJTlNO XycpOgorICAgICAgICBpZiBsZW4oZW5jc1t0YWddKSAhPSAzMjoKKyAgICAgICAgICAgIGVuY3Nb dGFnXSA9IGVuY3NbdGFnXSArICcwJyAqICgzMiAtIGxlbihlbmNzW3RhZ10pKQorICAgICAgICBk ZWN0cmVlX3N1Ymluc25zW2VuY19jbGFzc11bJ2xlYXZlcyddLmFkZCh0YWcpCisgICAgZWxpZiAg ZW5jX2NsYXNzID09ICcxNkJJVCc6CisgICAgICAgIGlmIGxlbihlbmNzW3RhZ10pICE9IDE2Ogor ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUYWcgInt9IiBoYXMgZW5jX2NsYXNzICJ7fSIg YW5kIG5vdCBhbiBlbmNvZGluZyAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lk dGggb2YgMTYgYml0cyEnLmZvcm1hdCh0YWcsIGVuY19jbGFzcykpCisgICAgICAgIGRlY3RyZWVf MTZiaXRbJ2xlYXZlcyddLmFkZCh0YWcpCisgICAgZWxzZToKKyAgICAgICAgaWYgbGVuKGVuY3Nb dGFnXSkgIT0gMzI6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAie30iIGhhcyBl bmNfY2xhc3MgInt9IiBhbmQgbm90IGFuIGVuY29kaW5nICcgKworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICd3aWR0aCBvZiAzMiBiaXRzIScuZm9ybWF0KHRhZywgZW5jX2NsYXNzKSkKKyAg ICAgICAgaWYgZW5jX2NsYXNzID09ICdOT1JNQUwnOgorICAgICAgICAgICAgZGVjdHJlZV9ub3Jt YWxbJ2xlYXZlcyddLmFkZCh0YWcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWN0cmVl X2V4dGVuc2lvbnNbZW5jX2NsYXNzXVsnbGVhdmVzJ10uYWRkKHRhZykKKworZmFrZXRhZ3MgPSBz ZXQoKQorZm9yICh0YWcsIGVuYykgaW4gaXNldC5lbmNfZXh0X3NwYWNlcy5pdGVtcygpOgorICAg IGZha2V0YWdzLmFkZCh0YWcpCisgICAgZW5jc1t0YWddID0gJycuam9pbihyZXZlcnNlZChlbmMu cmVwbGFjZSgnICcsICcnKSkpCisgICAgZGVjdHJlZV9ub3JtYWxbJ2xlYXZlcyddLmFkZCh0YWcp CisKK2Zha2V0YWdzIHw9IHNldChzdWJpbnNuX2dyb3VwaW5ncy5rZXlzKCkpCisKK2RlZiBldmVy eV9iaXRfY291bnRzKGJpdHNldCk6CisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG5leHQoaXRl cihiaXRzZXQpKSkpOgorICAgICAgICBpZiBsZW4oc2V0KFtiaXRzWzppXSArIGJpdHNbaSsxOl0g Zm9yIGJpdHMgaW4gYml0c2V0XSkpID09IGxlbihiaXRzZXQpOgorICAgICAgICAgICAgcmV0dXJu IEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIGF1dG9fc2VwYXJhdGUobm9kZSk6CisgICAg dGFncyA9IG5vZGVbJ2xlYXZlcyddCisgICAgaWYgbGVuKHRhZ3MpIDw9IDE6CisgICAgICAgIHJl dHVybgorICAgIGVuY193aWR0aCA9IGxlbihlbmNzW25leHQoaXRlcih0YWdzKSldKQorICAgIG9w Y29kZV9iaXRfZm9yX2FsbCA9IFwKKyAgICAgICAgW2FsbChbZW5jc1t0YWddW2ldIGluICcwMScg XAorICAgICAgICAgICAgZm9yIHRhZyBpbiB0YWdzXSkgZm9yIGkgaW4gcmFuZ2UoZW5jX3dpZHRo KV0KKyAgICBvcGNvZGVfYml0X2lzXzBfZm9yX2FsbCA9IFwKKyAgICAgICAgW29wY29kZV9iaXRf Zm9yX2FsbFtpXSBhbmQgYWxsKFtlbmNzW3RhZ11baV0gPT0gJzAnIFwKKyAgICAgICAgICAgIGZv ciB0YWcgaW4gdGFnc10pIGZvciBpIGluIHJhbmdlKGVuY193aWR0aCldCisgICAgb3Bjb2RlX2Jp dF9pc18xX2Zvcl9hbGwgPSBcCisgICAgICAgIFtvcGNvZGVfYml0X2Zvcl9hbGxbaV0gYW5kIGFs bChbZW5jc1t0YWddW2ldID09ICcxJyBcCisgICAgICAgICAgICBmb3IgdGFnIGluIHRhZ3NdKSBm b3IgaSBpbiByYW5nZShlbmNfd2lkdGgpXQorICAgIGRpZmZlcmVudGlhdG9yX29wY29kZV9iaXQg PSBcCisgICAgICAgIFtvcGNvZGVfYml0X2Zvcl9hbGxbaV0gYW5kIFwKKyAgICAgICAgIG5vdCAo b3Bjb2RlX2JpdF9pc18wX2Zvcl9hbGxbaV0gb3IgXAorICAgICAgICAgb3Bjb2RlX2JpdF9pc18x X2Zvcl9hbGxbaV0pIFwKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGVuY193aWR0aCldCisg ICAgYmVzdF93aWR0aCA9IDAKKyAgICBmb3Igd2lkdGggaW4gcmFuZ2UoNCwgMCwgLTEpOgorICAg ICAgICBmb3IgbHNiIGluIHJhbmdlKGVuY193aWR0aCAtIHdpZHRoLCAtMSwgLTEpOgorICAgICAg ICAgICAgYml0c2V0ID0gc2V0KFtlbmNzW3RhZ11bbHNiOmxzYit3aWR0aF0gZm9yIHRhZyBpbiB0 YWdzXSkKKyAgICAgICAgICAgIGlmIGFsbChkaWZmZXJlbnRpYXRvcl9vcGNvZGVfYml0W2xzYjps c2Ird2lkdGhdKSBhbmQgXAorICAgICAgICAgICAgICAgIChsZW4oYml0c2V0KSA9PSBsZW4odGFn cykgb3IgZXZlcnlfYml0X2NvdW50cyhiaXRzZXQpKToKKyAgICAgICAgICAgICAgICBiZXN0X3dp ZHRoID0gd2lkdGgKKyAgICAgICAgICAgICAgICBiZXN0X2xzYiA9IGxzYgorICAgICAgICAgICAg ICAgIGNhdWdodF9hbGxfdGFncyA9IGxlbihiaXRzZXQpID09IGxlbih0YWdzKQorICAgICAgICAg ICAgICAgIGJyZWFrCisgICAgICAgIGlmIGJlc3Rfd2lkdGggIT0gMDoKKyAgICAgICAgICAgIGJy ZWFrCisgICAgaWYgYmVzdF93aWR0aCA9PSAwOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0Nv dWxkIG5vdCBmaW5kIGEgd2F5IHRvIGRpZmZlcmVudGlhdGUgdGhlIGVuY29kaW5ncyAnICsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAnb2YgdGhlIGZvbGxvd2luZyB0YWdzOlxue30nLmZvcm1h dCgnXG4nLmpvaW4odGFncykpKQorICAgIGlmIGNhdWdodF9hbGxfdGFnczoKKyAgICAgICAgZm9y IHdpZHRoIGluIHJhbmdlKDEsIGJlc3Rfd2lkdGgpOgorICAgICAgICAgICAgZm9yIGxzYiBpbiBy YW5nZShlbmNfd2lkdGggLSB3aWR0aCwgLTEsIC0xKToKKyAgICAgICAgICAgICAgICBiaXRzZXQg PSBzZXQoW2VuY3NbdGFnXVtsc2I6bHNiK3dpZHRoXSBmb3IgdGFnIGluIHRhZ3NdKQorICAgICAg ICAgICAgICAgIGlmIGFsbChkaWZmZXJlbnRpYXRvcl9vcGNvZGVfYml0W2xzYjpsc2Ird2lkdGhd KSBhbmQgXAorICAgICAgICAgICAgICAgICAgICBsZW4oYml0c2V0KSA9PSBsZW4odGFncyk6Cisg ICAgICAgICAgICAgICAgICAgIGJlc3Rfd2lkdGggPSB3aWR0aAorICAgICAgICAgICAgICAgICAg ICBiZXN0X2xzYiA9IGxzYgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg ZWxzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYnJlYWsKKyAgICBu b2RlWydzZXBhcmF0b3JfbHNiJ10gPSBiZXN0X2xzYgorICAgIG5vZGVbJ3NlcGFyYXRvcl93aWR0 aCddID0gYmVzdF93aWR0aAorICAgIG5vZGVbJ2NoaWxkcmVuJ10gPSBbXQorICAgIGZvciB2YWx1 ZSBpbiByYW5nZSgyICoqIGJlc3Rfd2lkdGgpOgorICAgICAgICBjaGlsZCA9IHt9CisgICAgICAg IGJpdHMgPSAnJy5qb2luKHJldmVyc2VkKCd7OjB7fWJ9Jy5mb3JtYXQodmFsdWUsIGJlc3Rfd2lk dGgpKSkKKyAgICAgICAgY2hpbGRbJ2xlYXZlcyddID0gXAorICAgICAgICAgICAgc2V0KFt0YWcg Zm9yIHRhZyBpbiB0YWdzIFwKKyAgICAgICAgICAgICAgICBpZiBlbmNzW3RhZ11bYmVzdF9sc2I6 YmVzdF9sc2IrYmVzdF93aWR0aF0gPT0gYml0c10pCisgICAgICAgIG5vZGVbJ2NoaWxkcmVuJ10u YXBwZW5kKGNoaWxkKQorICAgIGZvciBjaGlsZCBpbiBub2RlWydjaGlsZHJlbiddOgorICAgICAg ICBhdXRvX3NlcGFyYXRlKGNoaWxkKQorCithdXRvX3NlcGFyYXRlKGRlY3RyZWVfbm9ybWFsKQor YXV0b19zZXBhcmF0ZShkZWN0cmVlXzE2Yml0KQoraWYgc3ViaW5zbl9ncm91cGluZ3M6CisgICAg YXV0b19zZXBhcmF0ZShkZWN0cmVlX3N1Ymluc25fZ3JvdXBpbmdzKQorZm9yIGRlY3RyZWVfc3Vi aW5zbiBpbiBkZWN0cmVlX3N1Ymluc25zLnZhbHVlcygpOgorICAgIGF1dG9fc2VwYXJhdGUoZGVj dHJlZV9zdWJpbnNuKQorZm9yIGRlY3RyZWVfZXh0IGluIGRlY3RyZWVfZXh0ZW5zaW9ucy52YWx1 ZXMoKToKKyAgICBhdXRvX3NlcGFyYXRlKGRlY3RyZWVfZXh0KQorCitmb3IgdGFnIGluIGZha2V0 YWdzOgorICAgIGRlbCBlbmNzW3RhZ10KKworZGVmIHRhYmxlX25hbWUocGFyZW50cywgbm9kZSk6 CisgICAgcGF0aCA9IHBhcmVudHMgKyBbbm9kZV0KKyAgICByb290ID0gcGF0aFswXQorICAgIHRh ZyA9IG5leHQoaXRlcihub2RlWydsZWF2ZXMnXSkpCisgICAgaWYgdGFnIGluIHN1Ymluc25fZ3Jv dXBpbmdzOgorICAgICAgICBlbmNfd2lkdGggPSBsZW4oc3ViaW5zbl9ncm91cGluZ3NbdGFnXVsn ZW5jJ10ucmVwbGFjZSgnICcsICcnKSkKKyAgICBlbHNlOgorICAgICAgICB0YWcgPSBuZXh0KGl0 ZXIobm9kZVsnbGVhdmVzJ10gLSBmYWtldGFncykpCisgICAgICAgIGVuY193aWR0aCA9IGxlbihl bmNzW3RhZ10pCisgICAgZGV0ZXJtaW5pbmdfYml0cyA9IFsnXyddICogZW5jX3dpZHRoCisgICAg Zm9yIChwYXJlbnQsIGNoaWxkKSBpbiB6aXAocGF0aFs6LTFdLCBwYXRoWzE6XSk6CisgICAgICAg IGxzYiA9IHBhcmVudFsnc2VwYXJhdG9yX2xzYiddCisgICAgICAgIHdpZHRoID0gcGFyZW50Wydz ZXBhcmF0b3Jfd2lkdGgnXQorICAgICAgICB2YWx1ZSA9IHBhcmVudFsnY2hpbGRyZW4nXS5pbmRl eChjaGlsZCkKKyAgICAgICAgZGV0ZXJtaW5pbmdfYml0c1tsc2I6bHNiK3dpZHRoXSA9IFwKKyAg ICAgICAgICAgIGxpc3QocmV2ZXJzZWQoJ3s6MHt9Yn0nLmZvcm1hdCh2YWx1ZSwgd2lkdGgpKSkK KyAgICBpZiB0YWcgaW4gc3ViaW5zbl9ncm91cGluZ3M6CisgICAgICAgIG5hbWUgPSAnREVDT0RF X1JPT1RfRUUnCisgICAgZWxzZToKKyAgICAgICAgZW5jX2NsYXNzID0gaXNldC5pc2V0W3RhZ11b J2VuY19jbGFzcyddCisgICAgICAgIGlmIGVuY19jbGFzcyBpbiBleHRfZW5jX2NsYXNzZXM6Cisg ICAgICAgICAgICBuYW1lID0gJ0RFQ09ERV9FWFRfe30nLmZvcm1hdChlbmNfY2xhc3MpCisgICAg ICAgIGVsaWYgZW5jX2NsYXNzIGluIHN1Ymluc25fZW5jX2NsYXNzZXM6CisgICAgICAgICAgICBu YW1lID0gJ0RFQ09ERV9TVUJJTlNOX3t9Jy5mb3JtYXQoZW5jX2NsYXNzKQorICAgICAgICBlbHNl OgorICAgICAgICAgICAgbmFtZSA9ICdERUNPREVfUk9PVF97fScuZm9ybWF0KGVuY193aWR0aCkK KyAgICBpZiBub2RlICE9IHJvb3Q6CisgICAgICAgIG5hbWUgKz0gJ18nICsgJycuam9pbihyZXZl cnNlZChkZXRlcm1pbmluZ19iaXRzKSkKKyAgICByZXR1cm4gbmFtZQorCitkZWYgcHJpbnRfbm9k ZShmLCBub2RlLCBwYXJlbnRzKToKKyAgICBpZiBsZW4obm9kZVsnbGVhdmVzJ10pIDw9IDE6Cisg ICAgICAgIHJldHVybgorICAgIG5hbWUgPSB0YWJsZV9uYW1lKHBhcmVudHMsIG5vZGUpCisgICAg bHNiID0gbm9kZVsnc2VwYXJhdG9yX2xzYiddCisgICAgd2lkdGggPSBub2RlWydzZXBhcmF0b3Jf d2lkdGgnXQorICAgIHByaW50KCdERUNPREVfTkVXX1RBQkxFKHt9LHt9LERFQ09ERV9TRVBBUkFU T1JfQklUUyh7fSx7fSkpJy5cCisgICAgICAgIGZvcm1hdChuYW1lLCAyICoqIHdpZHRoLCBsc2Is IHdpZHRoKSwgZmlsZT1mKQorICAgIGZvciBjaGlsZCBpbiBub2RlWydjaGlsZHJlbiddOgorICAg ICAgICBpZiBsZW4oY2hpbGRbJ2xlYXZlcyddKSA9PSAwOgorICAgICAgICAgICAgcHJpbnQoJ0lO VkFMSUQoKScsIGZpbGU9ZikKKyAgICAgICAgZWxpZiBsZW4oY2hpbGRbJ2xlYXZlcyddKSA9PSAx OgorICAgICAgICAgICAgKHRhZywpID0gY2hpbGRbJ2xlYXZlcyddCisgICAgICAgICAgICBpZiB0 YWcgaW4gc3ViaW5zbl9ncm91cGluZ3M6CisgICAgICAgICAgICAgICAgY2xhc3NfYSA9IHN1Ymlu c25fZ3JvdXBpbmdzW3RhZ11bJ2NsYXNzX2EnXQorICAgICAgICAgICAgICAgIGNsYXNzX2IgPSBz dWJpbnNuX2dyb3VwaW5nc1t0YWddWydjbGFzc19iJ10KKyAgICAgICAgICAgICAgICBlbmMgPSBz dWJpbnNuX2dyb3VwaW5nc1t0YWddWydlbmMnXS5yZXBsYWNlKCcgJywgJycpCisgICAgICAgICAg ICAgICAgaWYgJ1JFU0VSVkVEJyBpbiB0YWc6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdJ TlZBTElEKCknLCBmaWxlPWYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnQoJ1NVQklOU05TKHt9LHt9LHt9LCJ7fSIpJy5cCisgICAgICAgICAgICAgICAg ICAgICAgICBmb3JtYXQodGFnLCBjbGFzc19hLCBjbGFzc19iLCBlbmMpLCBmaWxlPWYpCisgICAg ICAgICAgICBlbGlmIHRhZyBpbiBpc2V0LmVuY19leHRfc3BhY2VzOgorICAgICAgICAgICAgICAg IGVuYyA9IGlzZXQuZW5jX2V4dF9zcGFjZXNbdGFnXS5yZXBsYWNlKCcgJywgJycpCisgICAgICAg ICAgICAgICAgcHJpbnQoJ0VYVFNQQUNFKHt9LCJ7fSIpJy5mb3JtYXQodGFnLCBlbmMpLCBmaWxl PWYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVuYyA9ICcnLmpvaW4ocmV2 ZXJzZWQoZW5jc1t0YWddKSkKKyAgICAgICAgICAgICAgICBwcmludCgnVEVSTUlOQUwoe30sInt9 IiknLmZvcm1hdCh0YWcsIGVuYyksIGZpbGU9ZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IHByaW50KCdUQUJMRV9MSU5LKHt9KScuZm9ybWF0KHRhYmxlX25hbWUocGFyZW50cyArIFtub2Rl XSwgY2hpbGQpKSwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZikKKyAgICBwcmludCgnREVDT0RF X0VORF9UQUJMRSh7fSx7fSxERUNPREVfU0VQQVJBVE9SX0JJVFMoe30se30pKScuXAorICAgICAg ICBmb3JtYXQobmFtZSwgMiAqKiB3aWR0aCwgbHNiLCB3aWR0aCksIGZpbGU9ZikKKyAgICBwcmlu dChmaWxlPWYpCisgICAgcGFyZW50cy5hcHBlbmQobm9kZSkKKyAgICBmb3IgY2hpbGQgaW4gbm9k ZVsnY2hpbGRyZW4nXToKKyAgICAgICAgcHJpbnRfbm9kZShmLCBjaGlsZCwgcGFyZW50cykKKyAg ICBwYXJlbnRzLnBvcCgpCisKK2RlZiBwcmludF90cmVlKGYsIHRyZWUpOgorICAgIHByaW50X25v ZGUoZiwgdHJlZSwgW10pCisKK2RlZiBwcmludF9tYXRjaF9pbmZvKGYpOgorICAgIGZvciB0YWcg aW4gc29ydGVkKGVuY3Mua2V5cygpLCBrZXk9aXNldC50YWdzLmluZGV4KToKKyAgICAgICAgZW5j ID0gJycuam9pbihyZXZlcnNlZChlbmNzW3RhZ10pKQorICAgICAgICBtYXNrID0gaW50KHJlLnN1 YihyJ1teMV0nLCByJzAnLCBlbmMucmVwbGFjZSgnMCcsICcxJykpLCAyKQorICAgICAgICBtYXRj aCA9IGludChyZS5zdWIocidbXjAxXScsIHInMCcsIGVuYyksIDIpCisgICAgICAgIHN1ZmZpeCA9 ICcnCisgICAgICAgIHByaW50KCdERUNPREV7fV9NQVRDSF9JTkZPKHt9LDB4ezp4fVUsMHh7Onh9 VSknLlwKKyAgICAgICAgICAgIGZvcm1hdChzdWZmaXgsIHRhZywgbWFzaywgbWF0Y2gpLCBmaWxl PWYpCisKK3JlZ3JlID0gcmUuY29tcGlsZSgKKyAgICByJygoPzwhRFVQKVtNTk9SQ1BRWFNHVlpB XSkoW3N0dXZ3eHl6ZGVmZ10rKShbLl0/W0xsSGhdPykoXGQrUz8pJykKK2ltbXJlID0gcmUuY29t cGlsZShyJ1sjXShbclJzU3VVbV0pKFxkKykoPzpbOl0oXGQrKSk/JykKKworZGVmIG9yZGVyZWRf dW5pcXVlKGwpOgorICAgIHJldHVybiBzb3J0ZWQoc2V0KGwpLCBrZXk9bC5pbmRleCkKKworaW1w bGljaXRfcmVnaXN0ZXJzID0geworICAgICdTUCcgOiAyOSwKKyAgICAnRlAnIDogMzAsCisgICAg J0xSJyA6IDMxCit9CisKK251bV9yZWdpc3RlcnMgPSB7CisgICAgJ1InIDogMzIsCisgICAgJ1Yn IDogMzIKK30KKworZGVmIHByaW50X29wX2luZm8oZik6CisgICAgZm9yIHRhZyBpbiBzb3J0ZWQo ZW5jcy5rZXlzKCksIGtleT1pc2V0LnRhZ3MuaW5kZXgpOgorICAgICAgICBlbmMgPSBlbmNzW3Rh Z10KKyAgICAgICAgcHJpbnQoZmlsZT1mKQorICAgICAgICBwcmludCgnREVDT0RFX09QSU5GTyh7 fSwnLmZvcm1hdCh0YWcpLCBmaWxlPWYpCisgICAgICAgIHJlZ3MgPSBvcmRlcmVkX3VuaXF1ZShy ZWdyZS5maW5kYWxsKGlzZXQuaXNldFt0YWddWydzeW50YXgnXSkpCisgICAgICAgIGltbXMgPSBv cmRlcmVkX3VuaXF1ZShpbW1yZS5maW5kYWxsKGlzZXQuaXNldFt0YWddWydzeW50YXgnXSkpCisg ICAgICAgIHJlZ25vID0gMAorICAgICAgICBmb3IgcmVnIGluIHJlZ3M6CisgICAgICAgICAgICBy ZWdfdHlwZSA9IHJlZ1swXQorICAgICAgICAgICAgcmVnX2xldHRlciA9IHJlZ1sxXVswXQorICAg ICAgICAgICAgcmVnX251bV9jaG9pY2VzID0gaW50KHJlZ1szXS5yc3RyaXAoJ1MnKSkKKyAgICAg ICAgICAgIHJlZ19tYXBwaW5nID0gcmVnWzBdICsgJycuam9pbihbJ18nIGZvciBsZXR0ZXIgaW4g cmVnWzFdXSkgKyByZWdbM10KKyAgICAgICAgICAgIHJlZ19lbmNfZmllbGRzID0gcmUuZmluZGFs bChyZWdfbGV0dGVyICsgJysnLCBlbmMpCisgICAgICAgICAgICBpZiBsZW4ocmVnX2VuY19maWVs ZHMpID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUYWcgInt9IiBtaXNz aW5nIHJlZ2lzdGVyIGZpZWxkIScuZm9ybWF0KHRhZykpCisgICAgICAgICAgICBpZiBsZW4ocmVn X2VuY19maWVsZHMpID4gMToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAi e30iIGhhcyBzcGxpdCByZWdpc3RlciBmaWVsZCEnLlwKKyAgICAgICAgICAgICAgICAgICAgZm9y bWF0KHRhZykpCisgICAgICAgICAgICByZWdfZW5jX2ZpZWxkID0gcmVnX2VuY19maWVsZHNbMF0K KyAgICAgICAgICAgIGlmIDIgKiogbGVuKHJlZ19lbmNfZmllbGQpICE9IHJlZ19udW1fY2hvaWNl czoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAie30iIGhhcyBpbmNvcnJl Y3QgcmVnaXN0ZXIgZmllbGQgd2lkdGghJy5cCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCh0 YWcpKQorICAgICAgICAgICAgcHJpbnQoJyAgICAgICAgREVDT0RFX1JFRyh7fSx7fSx7fSknLlwK KyAgICAgICAgICAgICAgICBmb3JtYXQocmVnbm8sIGxlbihyZWdfZW5jX2ZpZWxkKSwgZW5jLmlu ZGV4KHJlZ19lbmNfZmllbGQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1mKQorICAg ICAgICAgICAgaWYgcmVnX3R5cGUgaW4gbnVtX3JlZ2lzdGVycyBhbmQgXAorICAgICAgICAgICAg ICAgIHJlZ19udW1fY2hvaWNlcyAhPSBudW1fcmVnaXN0ZXJzW3JlZ190eXBlXToKKyAgICAgICAg ICAgICAgICBwcmludCgnICAgICAgICBERUNPREVfTUFQUEVEX1JFRyh7fSx7fSknLlwKKyAgICAg ICAgICAgICAgICAgICAgZm9ybWF0KHJlZ25vLCByZWdfbWFwcGluZyksIGZpbGU9ZikKKyAgICAg ICAgICAgIHJlZ25vICs9IDEKKyAgICAgICAgZGVmIGltcGxpY2l0X3JlZ2lzdGVyX2tleShyZWcp OgorICAgICAgICAgICAgcmV0dXJuIGltcGxpY2l0X3JlZ2lzdGVyc1tyZWddCisgICAgICAgIGZv ciByZWcgaW4gc29ydGVkKAorICAgICAgICAgICAgc2V0KFtyIGZvciByIGluIChpc2V0LmlzZXRb dGFnXVsncnJlZ3MnXS5zcGxpdCgnLCcpICsgXAorICAgICAgICAgICAgICAgIGlzZXQuaXNldFt0 YWddWyd3cmVncyddLnNwbGl0KCcsJykpIFwKKyAgICAgICAgICAgICAgICAgICAgaWYgciBpbiBp bXBsaWNpdF9yZWdpc3RlcnNdKSwga2V5PWltcGxpY2l0X3JlZ2lzdGVyX2tleSk6CisgICAgICAg ICAgICBwcmludCgnICAgICAgICBERUNPREVfSU1QTF9SRUcoe30se30pJy5cCisgICAgICAgICAg ICAgICAgZm9ybWF0KHJlZ25vLCBpbXBsaWNpdF9yZWdpc3RlcnNbcmVnXSksIGZpbGU9ZikKKyAg ICAgICAgICAgIHJlZ25vICs9IDEKKyAgICAgICAgaWYgaW1tcyBhbmQgaW1tc1swXVswXS5pc3Vw cGVyKCk6CisgICAgICAgICAgICBpbW1zID0gcmV2ZXJzZWQoaW1tcykKKyAgICAgICAgZm9yIGlt bSBpbiBpbW1zOgorICAgICAgICAgICAgaWYgaW1tWzBdLmlzdXBwZXIoKToKKyAgICAgICAgICAg ICAgICBpbW1ubyA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1tbm8g PSAwCisgICAgICAgICAgICBpbW1fdHlwZSA9IGltbVswXQorICAgICAgICAgICAgaW1tX3dpZHRo ID0gaW50KGltbVsxXSkKKyAgICAgICAgICAgIGltbV9zaGlmdCA9IGltbVsyXQorICAgICAgICAg ICAgaWYgaW1tX3NoaWZ0OgorICAgICAgICAgICAgICAgIGltbV9zaGlmdCA9IGludChpbW1fc2hp ZnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltbV9zaGlmdCA9IDAKKyAg ICAgICAgICAgIGlmIGltbV90eXBlLmlzbG93ZXIoKToKKyAgICAgICAgICAgICAgICBpbW1fbGV0 dGVyID0gJ2knCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltbV9sZXR0ZXIg PSAnSScKKyAgICAgICAgICAgIHJlbWFpbmRlciA9IGltbV93aWR0aAorICAgICAgICAgICAgZm9y IG0gaW4gcmV2ZXJzZWQobGlzdChyZS5maW5kaXRlcihpbW1fbGV0dGVyICsgJysnLCBlbmMpKSk6 CisgICAgICAgICAgICAgICAgcmVtYWluZGVyIC09IG0uZW5kKCkgLSBtLnN0YXJ0KCkKKyAgICAg ICAgICAgICAgICBwcmludCgnICAgICAgICBERUNPREVfSU1NKHt9LHt9LHt9LHt9KScuXAorICAg ICAgICAgICAgICAgICAgICBmb3JtYXQoaW1tbm8sIG0uZW5kKCkgLSBtLnN0YXJ0KCksIG0uc3Rh cnQoKSwgcmVtYWluZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9ZikKKyAgICAg ICAgICAgIGlmIHJlbWFpbmRlciAhPSAwOgorICAgICAgICAgICAgICAgIGlmIGltbVsyXToKKyAg ICAgICAgICAgICAgICAgICAgaW1tWzJdID0gJzonICsgaW1tWzJdCisgICAgICAgICAgICAgICAg cmFpc2UgRXhjZXB0aW9uKCdUYWcgInt9IiBoYXMgYW4gaW5jb3JyZWN0IG51bWJlciBvZiAnICsg XAorICAgICAgICAgICAgICAgICAgICAnZW5jb2RpbmcgYml0cyBmb3IgaW1tZWRpYXRlICJ7fSIn LlwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0KHRhZywgJycuam9pbihpbW0pKSkKKyAgICAg ICAgICAgIGlmIGltbV90eXBlLmxvd2VyKCkgaW4gJ3NyJzoKKyAgICAgICAgICAgICAgICBwcmlu dCgnICAgICAgICBERUNPREVfSU1NX1NYVCh7fSx7fSknLlwKKyAgICAgICAgICAgICAgICAgICAg Zm9ybWF0KGltbW5vLCBpbW1fd2lkdGgpLCBmaWxlPWYpCisgICAgICAgICAgICBpZiBpbW1fdHlw ZS5sb3dlcigpID09ICduJzoKKyAgICAgICAgICAgICAgICBwcmludCgnICAgICAgICBERUNPREVf SU1NX05FRyh7fSx7fSknLlwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGltbW5vLCBpbW1f d2lkdGgpLCBmaWxlPWYpCisgICAgICAgICAgICBpZiBpbW1fc2hpZnQ6CisgICAgICAgICAgICAg ICAgcHJpbnQoJyAgICAgICAgREVDT0RFX0lNTV9TSElGVCh7fSx7fSknLlwKKyAgICAgICAgICAg ICAgICAgICAgZm9ybWF0KGltbW5vLCBpbW1fc2hpZnQpLCBmaWxlPWYpCisgICAgICAgIHByaW50 KCcpJywgZmlsZT1mKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHdpdGggb3Bl bihzeXMuYXJndlsxXSwgJ3cnKSBhcyBmOgorICAgICAgICBwcmludF90cmVlKGYsIGRlY3RyZWVf bm9ybWFsKQorICAgICAgICBwcmludF90cmVlKGYsIGRlY3RyZWVfMTZiaXQpCisgICAgICAgIGlm IHN1Ymluc25fZ3JvdXBpbmdzOgorICAgICAgICAgICAgcHJpbnRfdHJlZShmLCBkZWN0cmVlX3N1 Ymluc25fZ3JvdXBpbmdzKQorICAgICAgICBmb3IgKG5hbWUsIGRlY3RyZWVfc3ViaW5zbikgaW4g c29ydGVkKGRlY3RyZWVfc3ViaW5zbnMuaXRlbXMoKSk6CisgICAgICAgICAgICBwcmludF90cmVl KGYsIGRlY3RyZWVfc3ViaW5zbikKKyAgICAgICAgZm9yIChuYW1lLCBkZWN0cmVlX2V4dCkgaW4g c29ydGVkKGRlY3RyZWVfZXh0ZW5zaW9ucy5pdGVtcygpKToKKyAgICAgICAgICAgIHByaW50X3Ry ZWUoZiwgZGVjdHJlZV9leHQpCisgICAgICAgIHByaW50X21hdGNoX2luZm8oZikKKyAgICAgICAg cHJpbnRfb3BfaW5mbyhmKQotLSAKMi43LjQKCg==