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 5D97AC352A4 for ; Tue, 11 Feb 2020 01:00:18 +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 184B22072C for ; Tue, 11 Feb 2020 01:00:18 +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="vg9B6rZx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 184B22072C 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]:41796 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1JuT-00063U-4r for qemu-devel@archiver.kernel.org; Mon, 10 Feb 2020 20:00:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60487) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1Jc7-0001Hu-2J for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1Jc3-000664-Vo for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:18 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:3639) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1Jc3-0004qc-L8 for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1581381675; x=1612917675; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=i0NMur8PkMux1nEIoXurZtpLg28FrOUGu3JN+QKSTqQ=; b=vg9B6rZxBsGfxOuddmyl8luy8nnhFknUbztQNAnP1SPpLBdLaVRj6rtI wXWf5fKzccNZbfpB1KJO45QqPuHPQWHvyc6NhXeMwn2af90P5DGlSWcId E5jMyArfk5/JD0AoPmJJSGWmvcwW1WW2VWPYpMELLrZOdUQo4xjV3ubxf M=; Received: from unknown (HELO ironmsg05-sd.qualcomm.com) ([10.53.140.145]) by alexa-out-sd-01.qualcomm.com with ESMTP; 10 Feb 2020 16:41:00 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg05-sd.qualcomm.com with ESMTP; 10 Feb 2020 16:41:00 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 1D5211B76; Mon, 10 Feb 2020 18:41:00 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH 28/66] Hexagon generater phase 4 - Decode tree Date: Mon, 10 Feb 2020 18:40:06 -0600 Message-Id: <1581381644-13678-29-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" UHl0aG9uIHNjcmlwdCB0aGF0IGVtaXRzIHRoZSBkZWNvZGUgdHJlZSBpbiBkZWN0cmVlX2dlbmVy YXRlZC5oLgoKU2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMu Y29tPgotLS0KIHRhcmdldC9oZXhhZ29uL2RlY3RyZWUucHkgfCAzNTQgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDM1NCBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZGVjdHJlZS5weQoK ZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2RlY3RyZWUucHkgYi90YXJnZXQvaGV4YWdvbi9k ZWN0cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwNDM1YzkKLS0t IC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9kZWN0cmVlLnB5CkBAIC0wLDAgKzEsMzU0 IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmlu dF9mdW5jdGlvbgorIyMKKyMjICBDb3B5cmlnaHQgKGMpIDIwMTkgUXVhbGNvbW0gSW5ub3ZhdGlv biBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMjCisjIyAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyMjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorIyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMjCisjIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIyAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMjCisjIyAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyMjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIyMKKworaW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHJl CisKK2ltcG9ydCBzeXMKK3N5cy5wYXRoLmluc2VydCgwLCBzeXMuYXJndlsxXSkKK2ltcG9ydCBp c2V0CisKK2VuY3MgPSB7dGFnIDogJycuam9pbihyZXZlcnNlZChpc2V0LmlzZXRbdGFnXVsnZW5j J10ucmVwbGFjZSgnICcsICcnKSkpCisgICAgZm9yIHRhZyBpbiBpc2V0LnRhZ3MgaWYgaXNldC5p c2V0W3RhZ11bJ2VuYyddICE9ICdNSVNTSU5HIEVOQ09ESU5HJ30KKworZW5jX2NsYXNzZXMgPSBz ZXQoW2lzZXQuaXNldFt0YWddWydlbmNfY2xhc3MnXSBmb3IgdGFnIGluIGVuY3Mua2V5cygpXSkK K3N1Ymluc25fZW5jX2NsYXNzZXMgPSBcCisgICAgc2V0KFtlbmNfY2xhc3MgZm9yIGVuY19jbGFz cyBpbiBlbmNfY2xhc3NlcyBcCisgICAgICAgIGlmIGVuY19jbGFzcy5zdGFydHN3aXRoKCdTVUJJ TlNOXycpXSkKK2V4dF9lbmNfY2xhc3NlcyA9IFwKKyAgICBzZXQoW2VuY19jbGFzcyBmb3IgZW5j X2NsYXNzIGluIGVuY19jbGFzc2VzIFwKKyAgICAgICAgaWYgZW5jX2NsYXNzIG5vdCBpbiAoJ05P Uk1BTCcsICcxNkJJVCcpIGFuZCBcCisgICAgICAgICAgIG5vdCBlbmNfY2xhc3Muc3RhcnRzd2l0 aCgnU1VCSU5TTl8nKV0pCisKK3RyeToKKyAgICBzdWJpbnNuX2dyb3VwaW5ncyA9IGlzZXQuc3Vi aW5zbl9ncm91cGluZ3MKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBzdWJpbnNuX2dyb3Vw aW5ncyA9IHt9CisKK2ZvciAodGFnLCBzdWJpbnNuX2dyb3VwaW5nKSBpbiBzdWJpbnNuX2dyb3Vw aW5ncy5pdGVtcygpOgorICAgIGVuY3NbdGFnXSA9ICcnLmpvaW4ocmV2ZXJzZWQoc3ViaW5zbl9n cm91cGluZ1snZW5jJ10ucmVwbGFjZSgnICcsICcnKSkpCisKK2RlY3RyZWVfbm9ybWFsID0geyds ZWF2ZXMnIDogc2V0KCl9CitkZWN0cmVlXzE2Yml0ID0geydsZWF2ZXMnIDogc2V0KCl9CitkZWN0 cmVlX3N1Ymluc25fZ3JvdXBpbmdzID0geydsZWF2ZXMnIDogc2V0KCl9CitkZWN0cmVlX3N1Ymlu c25zID0ge25hbWUgOiB7J2xlYXZlcycgOiBzZXQoKX0gZm9yIG5hbWUgaW4gc3ViaW5zbl9lbmNf Y2xhc3Nlc30KK2RlY3RyZWVfZXh0ZW5zaW9ucyA9IHtuYW1lIDogeydsZWF2ZXMnIDogc2V0KCl9 IGZvciBuYW1lIGluIGV4dF9lbmNfY2xhc3Nlc30KKworZm9yIHRhZyBpbiBlbmNzLmtleXMoKToK KyAgICBpZiB0YWcgaW4gc3ViaW5zbl9ncm91cGluZ3M6CisgICAgICAgIGRlY3RyZWVfc3ViaW5z bl9ncm91cGluZ3NbJ2xlYXZlcyddLmFkZCh0YWcpCisgICAgICAgIGNvbnRpbnVlCisgICAgZW5j X2NsYXNzID0gaXNldC5pc2V0W3RhZ11bJ2VuY19jbGFzcyddCisgICAgaWYgZW5jX2NsYXNzLnN0 YXJ0c3dpdGgoJ1NVQklOU05fJyk6CisgICAgICAgIGlmIGxlbihlbmNzW3RhZ10pICE9IDMyOgor ICAgICAgICAgICAgZW5jc1t0YWddID0gZW5jc1t0YWddICsgJzAnICogKDMyIC0gbGVuKGVuY3Nb dGFnXSkpCisgICAgICAgIGRlY3RyZWVfc3ViaW5zbnNbZW5jX2NsYXNzXVsnbGVhdmVzJ10uYWRk KHRhZykKKyAgICBlbGlmICBlbmNfY2xhc3MgPT0gJzE2QklUJzoKKyAgICAgICAgaWYgbGVuKGVu Y3NbdGFnXSkgIT0gMTY6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAie30iIGhh cyBlbmNfY2xhc3MgInt9IiBhbmQgbm90IGFuIGVuY29kaW5nICcgKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICd3aWR0aCBvZiAxNiBiaXRzIScuZm9ybWF0KHRhZywgZW5jX2NsYXNzKSkK KyAgICAgICAgZGVjdHJlZV8xNmJpdFsnbGVhdmVzJ10uYWRkKHRhZykKKyAgICBlbHNlOgorICAg ICAgICBpZiBsZW4oZW5jc1t0YWddKSAhPSAzMjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv bignVGFnICJ7fSIgaGFzIGVuY19jbGFzcyAie30iIGFuZCBub3QgYW4gZW5jb2RpbmcgJyArCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoIG9mIDMyIGJpdHMhJy5mb3JtYXQodGFn LCBlbmNfY2xhc3MpKQorICAgICAgICBpZiBlbmNfY2xhc3MgPT0gJ05PUk1BTCc6CisgICAgICAg ICAgICBkZWN0cmVlX25vcm1hbFsnbGVhdmVzJ10uYWRkKHRhZykKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIGRlY3RyZWVfZXh0ZW5zaW9uc1tlbmNfY2xhc3NdWydsZWF2ZXMnXS5hZGQodGFn KQorCitmYWtldGFncyA9IHNldCgpCitmb3IgKHRhZywgZW5jKSBpbiBpc2V0LmVuY19leHRfc3Bh Y2VzLml0ZW1zKCk6CisgICAgZmFrZXRhZ3MuYWRkKHRhZykKKyAgICBlbmNzW3RhZ10gPSAnJy5q b2luKHJldmVyc2VkKGVuYy5yZXBsYWNlKCcgJywgJycpKSkKKyAgICBkZWN0cmVlX25vcm1hbFsn bGVhdmVzJ10uYWRkKHRhZykKKworZmFrZXRhZ3MgfD0gc2V0KHN1Ymluc25fZ3JvdXBpbmdzLmtl eXMoKSkKKworZGVmIGV2ZXJ5X2JpdF9jb3VudHMoYml0c2V0KToKKyAgICBmb3IgaSBpbiByYW5n ZSgxLCBsZW4obmV4dChpdGVyKGJpdHNldCkpKSk6CisgICAgICAgIGlmIGxlbihzZXQoW2JpdHNb OmldICsgYml0c1tpKzE6XSBmb3IgYml0cyBpbiBiaXRzZXRdKSkgPT0gbGVuKGJpdHNldCk6Cisg ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgYXV0b19zZXBh cmF0ZShub2RlKToKKyAgICB0YWdzID0gbm9kZVsnbGVhdmVzJ10KKyAgICBpZiBsZW4odGFncykg PD0gMToKKyAgICAgICAgcmV0dXJuCisgICAgZW5jX3dpZHRoID0gbGVuKGVuY3NbbmV4dChpdGVy KHRhZ3MpKV0pCisgICAgb3Bjb2RlX2JpdF9mb3JfYWxsID0gXAorICAgICAgICBbYWxsKFtlbmNz W3RhZ11baV0gaW4gJzAxJyBcCisgICAgICAgICAgICBmb3IgdGFnIGluIHRhZ3NdKSBmb3IgaSBp biByYW5nZShlbmNfd2lkdGgpXQorICAgIG9wY29kZV9iaXRfaXNfMF9mb3JfYWxsID0gXAorICAg ICAgICBbb3Bjb2RlX2JpdF9mb3JfYWxsW2ldIGFuZCBhbGwoW2VuY3NbdGFnXVtpXSA9PSAnMCcg XAorICAgICAgICAgICAgZm9yIHRhZyBpbiB0YWdzXSkgZm9yIGkgaW4gcmFuZ2UoZW5jX3dpZHRo KV0KKyAgICBvcGNvZGVfYml0X2lzXzFfZm9yX2FsbCA9IFwKKyAgICAgICAgW29wY29kZV9iaXRf Zm9yX2FsbFtpXSBhbmQgYWxsKFtlbmNzW3RhZ11baV0gPT0gJzEnIFwKKyAgICAgICAgICAgIGZv ciB0YWcgaW4gdGFnc10pIGZvciBpIGluIHJhbmdlKGVuY193aWR0aCldCisgICAgZGlmZmVyZW50 aWF0b3Jfb3Bjb2RlX2JpdCA9IFwKKyAgICAgICAgW29wY29kZV9iaXRfZm9yX2FsbFtpXSBhbmQg XAorICAgICAgICAgbm90IChvcGNvZGVfYml0X2lzXzBfZm9yX2FsbFtpXSBvciBcCisgICAgICAg ICBvcGNvZGVfYml0X2lzXzFfZm9yX2FsbFtpXSkgXAorICAgICAgICAgICAgZm9yIGkgaW4gcmFu Z2UoZW5jX3dpZHRoKV0KKyAgICBiZXN0X3dpZHRoID0gMAorICAgIGZvciB3aWR0aCBpbiByYW5n ZSg0LCAwLCAtMSk6CisgICAgICAgIGZvciBsc2IgaW4gcmFuZ2UoZW5jX3dpZHRoIC0gd2lkdGgs IC0xLCAtMSk6CisgICAgICAgICAgICBiaXRzZXQgPSBzZXQoW2VuY3NbdGFnXVtsc2I6bHNiK3dp ZHRoXSBmb3IgdGFnIGluIHRhZ3NdKQorICAgICAgICAgICAgaWYgYWxsKGRpZmZlcmVudGlhdG9y X29wY29kZV9iaXRbbHNiOmxzYit3aWR0aF0pIGFuZCBcCisgICAgICAgICAgICAgICAgKGxlbihi aXRzZXQpID09IGxlbih0YWdzKSBvciBldmVyeV9iaXRfY291bnRzKGJpdHNldCkpOgorICAgICAg ICAgICAgICAgIGJlc3Rfd2lkdGggPSB3aWR0aAorICAgICAgICAgICAgICAgIGJlc3RfbHNiID0g bHNiCisgICAgICAgICAgICAgICAgY2F1Z2h0X2FsbF90YWdzID0gbGVuKGJpdHNldCkgPT0gbGVu KHRhZ3MpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgYmVzdF93aWR0aCAhPSAw OgorICAgICAgICAgICAgYnJlYWsKKyAgICBpZiBiZXN0X3dpZHRoID09IDA6CisgICAgICAgIHJh aXNlIEV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgYSB3YXkgdG8gZGlmZmVyZW50aWF0ZSB0aGUg ZW5jb2RpbmdzICcgKworICAgICAgICAgICAgICAgICAgICAgICAgICdvZiB0aGUgZm9sbG93aW5n IHRhZ3M6XG57fScuZm9ybWF0KCdcbicuam9pbih0YWdzKSkpCisgICAgaWYgY2F1Z2h0X2FsbF90 YWdzOgorICAgICAgICBmb3Igd2lkdGggaW4gcmFuZ2UoMSwgYmVzdF93aWR0aCk6CisgICAgICAg ICAgICBmb3IgbHNiIGluIHJhbmdlKGVuY193aWR0aCAtIHdpZHRoLCAtMSwgLTEpOgorICAgICAg ICAgICAgICAgIGJpdHNldCA9IHNldChbZW5jc1t0YWddW2xzYjpsc2Ird2lkdGhdIGZvciB0YWcg aW4gdGFnc10pCisgICAgICAgICAgICAgICAgaWYgYWxsKGRpZmZlcmVudGlhdG9yX29wY29kZV9i aXRbbHNiOmxzYit3aWR0aF0pIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIGxlbihiaXRzZXQp ID09IGxlbih0YWdzKToKKyAgICAgICAgICAgICAgICAgICAgYmVzdF93aWR0aCA9IHdpZHRoCisg ICAgICAgICAgICAgICAgICAgIGJlc3RfbHNiID0gbHNiCisgICAgICAgICAgICAgICAgICAgIGJy ZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg ICAgICBicmVhaworICAgIG5vZGVbJ3NlcGFyYXRvcl9sc2InXSA9IGJlc3RfbHNiCisgICAgbm9k ZVsnc2VwYXJhdG9yX3dpZHRoJ10gPSBiZXN0X3dpZHRoCisgICAgbm9kZVsnY2hpbGRyZW4nXSA9 IFtdCisgICAgZm9yIHZhbHVlIGluIHJhbmdlKDIgKiogYmVzdF93aWR0aCk6CisgICAgICAgIGNo aWxkID0ge30KKyAgICAgICAgYml0cyA9ICcnLmpvaW4ocmV2ZXJzZWQoJ3s6MHt9Yn0nLmZvcm1h dCh2YWx1ZSwgYmVzdF93aWR0aCkpKQorICAgICAgICBjaGlsZFsnbGVhdmVzJ10gPSBcCisgICAg ICAgICAgICBzZXQoW3RhZyBmb3IgdGFnIGluIHRhZ3MgXAorICAgICAgICAgICAgICAgIGlmIGVu Y3NbdGFnXVtiZXN0X2xzYjpiZXN0X2xzYitiZXN0X3dpZHRoXSA9PSBiaXRzXSkKKyAgICAgICAg bm9kZVsnY2hpbGRyZW4nXS5hcHBlbmQoY2hpbGQpCisgICAgZm9yIGNoaWxkIGluIG5vZGVbJ2No aWxkcmVuJ106CisgICAgICAgIGF1dG9fc2VwYXJhdGUoY2hpbGQpCisKK2F1dG9fc2VwYXJhdGUo ZGVjdHJlZV9ub3JtYWwpCithdXRvX3NlcGFyYXRlKGRlY3RyZWVfMTZiaXQpCitpZiBzdWJpbnNu X2dyb3VwaW5nczoKKyAgICBhdXRvX3NlcGFyYXRlKGRlY3RyZWVfc3ViaW5zbl9ncm91cGluZ3Mp Citmb3IgZGVjdHJlZV9zdWJpbnNuIGluIGRlY3RyZWVfc3ViaW5zbnMudmFsdWVzKCk6CisgICAg YXV0b19zZXBhcmF0ZShkZWN0cmVlX3N1Ymluc24pCitmb3IgZGVjdHJlZV9leHQgaW4gZGVjdHJl ZV9leHRlbnNpb25zLnZhbHVlcygpOgorICAgIGF1dG9fc2VwYXJhdGUoZGVjdHJlZV9leHQpCisK K2ZvciB0YWcgaW4gZmFrZXRhZ3M6CisgICAgZGVsIGVuY3NbdGFnXQorCitkZWYgdGFibGVfbmFt ZShwYXJlbnRzLCBub2RlKToKKyAgICBwYXRoID0gcGFyZW50cyArIFtub2RlXQorICAgIHJvb3Qg PSBwYXRoWzBdCisgICAgdGFnID0gbmV4dChpdGVyKG5vZGVbJ2xlYXZlcyddKSkKKyAgICBpZiB0 YWcgaW4gc3ViaW5zbl9ncm91cGluZ3M6CisgICAgICAgIGVuY193aWR0aCA9IGxlbihzdWJpbnNu X2dyb3VwaW5nc1t0YWddWydlbmMnXS5yZXBsYWNlKCcgJywgJycpKQorICAgIGVsc2U6CisgICAg ICAgIHRhZyA9IG5leHQoaXRlcihub2RlWydsZWF2ZXMnXSAtIGZha2V0YWdzKSkKKyAgICAgICAg ZW5jX3dpZHRoID0gbGVuKGVuY3NbdGFnXSkKKyAgICBkZXRlcm1pbmluZ19iaXRzID0gWydfJ10g KiBlbmNfd2lkdGgKKyAgICBmb3IgKHBhcmVudCwgY2hpbGQpIGluIHppcChwYXRoWzotMV0sIHBh dGhbMTpdKToKKyAgICAgICAgbHNiID0gcGFyZW50WydzZXBhcmF0b3JfbHNiJ10KKyAgICAgICAg d2lkdGggPSBwYXJlbnRbJ3NlcGFyYXRvcl93aWR0aCddCisgICAgICAgIHZhbHVlID0gcGFyZW50 WydjaGlsZHJlbiddLmluZGV4KGNoaWxkKQorICAgICAgICBkZXRlcm1pbmluZ19iaXRzW2xzYjps c2Ird2lkdGhdID0gXAorICAgICAgICAgICAgbGlzdChyZXZlcnNlZCgnezowe31ifScuZm9ybWF0 KHZhbHVlLCB3aWR0aCkpKQorICAgIGlmIHRhZyBpbiBzdWJpbnNuX2dyb3VwaW5nczoKKyAgICAg ICAgbmFtZSA9ICdERUNPREVfUk9PVF9FRScKKyAgICBlbHNlOgorICAgICAgICBlbmNfY2xhc3Mg PSBpc2V0LmlzZXRbdGFnXVsnZW5jX2NsYXNzJ10KKyAgICAgICAgaWYgZW5jX2NsYXNzIGluIGV4 dF9lbmNfY2xhc3NlczoKKyAgICAgICAgICAgIG5hbWUgPSAnREVDT0RFX0VYVF97fScuZm9ybWF0 KGVuY19jbGFzcykKKyAgICAgICAgZWxpZiBlbmNfY2xhc3MgaW4gc3ViaW5zbl9lbmNfY2xhc3Nl czoKKyAgICAgICAgICAgIG5hbWUgPSAnREVDT0RFX1NVQklOU05fe30nLmZvcm1hdChlbmNfY2xh c3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gJ0RFQ09ERV9ST09UX3t9Jy5m b3JtYXQoZW5jX3dpZHRoKQorICAgIGlmIG5vZGUgIT0gcm9vdDoKKyAgICAgICAgbmFtZSArPSAn XycgKyAnJy5qb2luKHJldmVyc2VkKGRldGVybWluaW5nX2JpdHMpKQorICAgIHJldHVybiBuYW1l CisKK2RlZiBwcmludF9ub2RlKGYsIG5vZGUsIHBhcmVudHMpOgorICAgIGlmIGxlbihub2RlWyds ZWF2ZXMnXSkgPD0gMToKKyAgICAgICAgcmV0dXJuCisgICAgbmFtZSA9IHRhYmxlX25hbWUocGFy ZW50cywgbm9kZSkKKyAgICBsc2IgPSBub2RlWydzZXBhcmF0b3JfbHNiJ10KKyAgICB3aWR0aCA9 IG5vZGVbJ3NlcGFyYXRvcl93aWR0aCddCisgICAgcHJpbnQoJ0RFQ09ERV9ORVdfVEFCTEUoe30s e30sREVDT0RFX1NFUEFSQVRPUl9CSVRTKHt9LHt9KSknLlwKKyAgICAgICAgZm9ybWF0KG5hbWUs IDIgKiogd2lkdGgsIGxzYiwgd2lkdGgpLCBmaWxlPWYpCisgICAgZm9yIGNoaWxkIGluIG5vZGVb J2NoaWxkcmVuJ106CisgICAgICAgIGlmIGxlbihjaGlsZFsnbGVhdmVzJ10pID09IDA6CisgICAg ICAgICAgICBwcmludCgnSU5WQUxJRCgpJywgZmlsZT1mKQorICAgICAgICBlbGlmIGxlbihjaGls ZFsnbGVhdmVzJ10pID09IDE6CisgICAgICAgICAgICAodGFnLCkgPSBjaGlsZFsnbGVhdmVzJ10K KyAgICAgICAgICAgIGlmIHRhZyBpbiBzdWJpbnNuX2dyb3VwaW5nczoKKyAgICAgICAgICAgICAg ICBjbGFzc19hID0gc3ViaW5zbl9ncm91cGluZ3NbdGFnXVsnY2xhc3NfYSddCisgICAgICAgICAg ICAgICAgY2xhc3NfYiA9IHN1Ymluc25fZ3JvdXBpbmdzW3RhZ11bJ2NsYXNzX2InXQorICAgICAg ICAgICAgICAgIGVuYyA9IHN1Ymluc25fZ3JvdXBpbmdzW3RhZ11bJ2VuYyddLnJlcGxhY2UoJyAn LCAnJykKKyAgICAgICAgICAgICAgICBpZiAnUkVTRVJWRUQnIGluIHRhZzoKKyAgICAgICAgICAg ICAgICAgICAgcHJpbnQoJ0lOVkFMSUQoKScsIGZpbGU9ZikKKyAgICAgICAgICAgICAgICBlbHNl OgorICAgICAgICAgICAgICAgICAgICBwcmludCgnU1VCSU5TTlMoe30se30se30sInt9IiknLlwK KyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCh0YWcsIGNsYXNzX2EsIGNsYXNzX2IsIGVu YyksIGZpbGU9ZikKKyAgICAgICAgICAgIGVsaWYgdGFnIGluIGlzZXQuZW5jX2V4dF9zcGFjZXM6 CisgICAgICAgICAgICAgICAgZW5jID0gaXNldC5lbmNfZXh0X3NwYWNlc1t0YWddLnJlcGxhY2Uo JyAnLCAnJykKKyAgICAgICAgICAgICAgICBwcmludCgnRVhUU1BBQ0Uoe30sInt9IiknLmZvcm1h dCh0YWcsIGVuYyksIGZpbGU9ZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg ZW5jID0gJycuam9pbihyZXZlcnNlZChlbmNzW3RhZ10pKQorICAgICAgICAgICAgICAgIHByaW50 KCdURVJNSU5BTCh7fSwie30iKScuZm9ybWF0KHRhZywgZW5jKSwgZmlsZT1mKQorICAgICAgICBl bHNlOgorICAgICAgICAgICAgcHJpbnQoJ1RBQkxFX0xJTksoe30pJy5mb3JtYXQodGFibGVfbmFt ZShwYXJlbnRzICsgW25vZGVdLCBjaGlsZCkpLAorICAgICAgICAgICAgICAgICAgZmlsZT1mKQor ICAgIHByaW50KCdERUNPREVfRU5EX1RBQkxFKHt9LHt9LERFQ09ERV9TRVBBUkFUT1JfQklUUyh7 fSx7fSkpJy5cCisgICAgICAgIGZvcm1hdChuYW1lLCAyICoqIHdpZHRoLCBsc2IsIHdpZHRoKSwg ZmlsZT1mKQorICAgIHByaW50KGZpbGU9ZikKKyAgICBwYXJlbnRzLmFwcGVuZChub2RlKQorICAg IGZvciBjaGlsZCBpbiBub2RlWydjaGlsZHJlbiddOgorICAgICAgICBwcmludF9ub2RlKGYsIGNo aWxkLCBwYXJlbnRzKQorICAgIHBhcmVudHMucG9wKCkKKworZGVmIHByaW50X3RyZWUoZiwgdHJl ZSk6CisgICAgcHJpbnRfbm9kZShmLCB0cmVlLCBbXSkKKworZGVmIHByaW50X21hdGNoX2luZm8o Zik6CisgICAgZm9yIHRhZyBpbiBzb3J0ZWQoZW5jcy5rZXlzKCksIGtleT1pc2V0LnRhZ3MuaW5k ZXgpOgorICAgICAgICBlbmMgPSAnJy5qb2luKHJldmVyc2VkKGVuY3NbdGFnXSkpCisgICAgICAg IG1hc2sgPSBpbnQocmUuc3ViKHInW14xXScsIHInMCcsIGVuYy5yZXBsYWNlKCcwJywgJzEnKSks IDIpCisgICAgICAgIG1hdGNoID0gaW50KHJlLnN1YihyJ1teMDFdJywgcicwJywgZW5jKSwgMikK KyAgICAgICAgc3VmZml4ID0gJycKKyAgICAgICAgcHJpbnQoJ0RFQ09ERXt9X01BVENIX0lORk8o e30sMHh7Onh9VSwweHs6eH1VKScuXAorICAgICAgICAgICAgZm9ybWF0KHN1ZmZpeCwgdGFnLCBt YXNrLCBtYXRjaCksIGZpbGU9ZikKKworcmVncmUgPSByZS5jb21waWxlKAorICAgIHInKCg/PCFE VVApW01OT1JDUFFYU0dWWkFdKShbc3R1dnd4eXpkZWZnXSspKFsuXT9bTGxIaF0/KShcZCtTPykn KQoraW1tcmUgPSByZS5jb21waWxlKHInWyNdKFtyUnNTdVVtXSkoXGQrKSg/Ols6XShcZCspKT8n KQorCitkZWYgb3JkZXJlZF91bmlxdWUobCk6CisgICAgcmV0dXJuIHNvcnRlZChzZXQobCksIGtl eT1sLmluZGV4KQorCitpbXBsaWNpdF9yZWdpc3RlcnMgPSB7CisgICAgJ1NQJyA6IDI5LAorICAg ICdGUCcgOiAzMCwKKyAgICAnTFInIDogMzEKK30KKworbnVtX3JlZ2lzdGVycyA9IHsKKyAgICAn UicgOiAzMiwKKyAgICAnVicgOiAzMgorfQorCitkZWYgcHJpbnRfb3BfaW5mbyhmKToKKyAgICBm b3IgdGFnIGluIHNvcnRlZChlbmNzLmtleXMoKSwga2V5PWlzZXQudGFncy5pbmRleCk6CisgICAg ICAgIGVuYyA9IGVuY3NbdGFnXQorICAgICAgICBwcmludChmaWxlPWYpCisgICAgICAgIHByaW50 KCdERUNPREVfT1BJTkZPKHt9LCcuZm9ybWF0KHRhZyksIGZpbGU9ZikKKyAgICAgICAgcmVncyA9 IG9yZGVyZWRfdW5pcXVlKHJlZ3JlLmZpbmRhbGwoaXNldC5pc2V0W3RhZ11bJ3N5bnRheCddKSkK KyAgICAgICAgaW1tcyA9IG9yZGVyZWRfdW5pcXVlKGltbXJlLmZpbmRhbGwoaXNldC5pc2V0W3Rh Z11bJ3N5bnRheCddKSkKKyAgICAgICAgcmVnbm8gPSAwCisgICAgICAgIGZvciByZWcgaW4gcmVn czoKKyAgICAgICAgICAgIHJlZ190eXBlID0gcmVnWzBdCisgICAgICAgICAgICByZWdfbGV0dGVy ID0gcmVnWzFdWzBdCisgICAgICAgICAgICByZWdfbnVtX2Nob2ljZXMgPSBpbnQocmVnWzNdLnJz dHJpcCgnUycpKQorICAgICAgICAgICAgcmVnX21hcHBpbmcgPSByZWdbMF0gKyAnJy5qb2luKFsn XycgZm9yIGxldHRlciBpbiByZWdbMV1dKSArIHJlZ1szXQorICAgICAgICAgICAgcmVnX2VuY19m aWVsZHMgPSByZS5maW5kYWxsKHJlZ19sZXR0ZXIgKyAnKycsIGVuYykKKyAgICAgICAgICAgIGlm IGxlbihyZWdfZW5jX2ZpZWxkcykgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRp b24oJ1RhZyAie30iIG1pc3NpbmcgcmVnaXN0ZXIgZmllbGQhJy5mb3JtYXQodGFnKSkKKyAgICAg ICAgICAgIGlmIGxlbihyZWdfZW5jX2ZpZWxkcykgPiAxOgorICAgICAgICAgICAgICAgIHJhaXNl IEV4Y2VwdGlvbignVGFnICJ7fSIgaGFzIHNwbGl0IHJlZ2lzdGVyIGZpZWxkIScuXAorICAgICAg ICAgICAgICAgICAgICBmb3JtYXQodGFnKSkKKyAgICAgICAgICAgIHJlZ19lbmNfZmllbGQgPSBy ZWdfZW5jX2ZpZWxkc1swXQorICAgICAgICAgICAgaWYgMiAqKiBsZW4ocmVnX2VuY19maWVsZCkg IT0gcmVnX251bV9jaG9pY2VzOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGFn ICJ7fSIgaGFzIGluY29ycmVjdCByZWdpc3RlciBmaWVsZCB3aWR0aCEnLlwKKyAgICAgICAgICAg ICAgICAgICAgZm9ybWF0KHRhZykpCisgICAgICAgICAgICBwcmludCgnICAgICAgICBERUNPREVf UkVHKHt9LHt9LHt9KScuXAorICAgICAgICAgICAgICAgIGZvcm1hdChyZWdubywgbGVuKHJlZ19l bmNfZmllbGQpLCBlbmMuaW5kZXgocmVnX2VuY19maWVsZCkpLAorICAgICAgICAgICAgICAgICAg ICAgICBmaWxlPWYpCisgICAgICAgICAgICBpZiByZWdfdHlwZSBpbiBudW1fcmVnaXN0ZXJzIGFu ZCBcCisgICAgICAgICAgICAgICAgcmVnX251bV9jaG9pY2VzICE9IG51bV9yZWdpc3RlcnNbcmVn X3R5cGVdOgorICAgICAgICAgICAgICAgIHByaW50KCcgICAgICAgIERFQ09ERV9NQVBQRURfUkVH KHt9LHt9KScuXAorICAgICAgICAgICAgICAgICAgICBmb3JtYXQocmVnbm8sIHJlZ19tYXBwaW5n KSwgZmlsZT1mKQorICAgICAgICAgICAgcmVnbm8gKz0gMQorICAgICAgICBkZWYgaW1wbGljaXRf cmVnaXN0ZXJfa2V5KHJlZyk6CisgICAgICAgICAgICByZXR1cm4gaW1wbGljaXRfcmVnaXN0ZXJz W3JlZ10KKyAgICAgICAgZm9yIHJlZyBpbiBzb3J0ZWQoCisgICAgICAgICAgICBzZXQoW3IgZm9y IHIgaW4gKGlzZXQuaXNldFt0YWddWydycmVncyddLnNwbGl0KCcsJykgKyBcCisgICAgICAgICAg ICAgICAgaXNldC5pc2V0W3RhZ11bJ3dyZWdzJ10uc3BsaXQoJywnKSkgXAorICAgICAgICAgICAg ICAgICAgICBpZiByIGluIGltcGxpY2l0X3JlZ2lzdGVyc10pLCBrZXk9aW1wbGljaXRfcmVnaXN0 ZXJfa2V5KToKKyAgICAgICAgICAgIHByaW50KCcgICAgICAgIERFQ09ERV9JTVBMX1JFRyh7fSx7 fSknLlwKKyAgICAgICAgICAgICAgICBmb3JtYXQocmVnbm8sIGltcGxpY2l0X3JlZ2lzdGVyc1ty ZWddKSwgZmlsZT1mKQorICAgICAgICAgICAgcmVnbm8gKz0gMQorICAgICAgICBpZiBpbW1zIGFu ZCBpbW1zWzBdWzBdLmlzdXBwZXIoKToKKyAgICAgICAgICAgIGltbXMgPSByZXZlcnNlZChpbW1z KQorICAgICAgICBmb3IgaW1tIGluIGltbXM6CisgICAgICAgICAgICBpZiBpbW1bMF0uaXN1cHBl cigpOgorICAgICAgICAgICAgICAgIGltbW5vID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICBpbW1ubyA9IDAKKyAgICAgICAgICAgIGltbV90eXBlID0gaW1tWzBdCisgICAg ICAgICAgICBpbW1fd2lkdGggPSBpbnQoaW1tWzFdKQorICAgICAgICAgICAgaW1tX3NoaWZ0ID0g aW1tWzJdCisgICAgICAgICAgICBpZiBpbW1fc2hpZnQ6CisgICAgICAgICAgICAgICAgaW1tX3No aWZ0ID0gaW50KGltbV9zaGlmdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg aW1tX3NoaWZ0ID0gMAorICAgICAgICAgICAgaWYgaW1tX3R5cGUuaXNsb3dlcigpOgorICAgICAg ICAgICAgICAgIGltbV9sZXR0ZXIgPSAnaScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgaW1tX2xldHRlciA9ICdJJworICAgICAgICAgICAgcmVtYWluZGVyID0gaW1tX3dpZHRo CisgICAgICAgICAgICBmb3IgbSBpbiByZXZlcnNlZChsaXN0KHJlLmZpbmRpdGVyKGltbV9sZXR0 ZXIgKyAnKycsIGVuYykpKToKKyAgICAgICAgICAgICAgICByZW1haW5kZXIgLT0gbS5lbmQoKSAt IG0uc3RhcnQoKQorICAgICAgICAgICAgICAgIHByaW50KCcgICAgICAgIERFQ09ERV9JTU0oe30s e30se30se30pJy5cCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdChpbW1ubywgbS5lbmQoKSAt IG0uc3RhcnQoKSwgbS5zdGFydCgpLCByZW1haW5kZXIpLAorICAgICAgICAgICAgICAgICAgICAg ICAgZmlsZT1mKQorICAgICAgICAgICAgaWYgcmVtYWluZGVyICE9IDA6CisgICAgICAgICAgICAg ICAgaWYgaW1tWzJdOgorICAgICAgICAgICAgICAgICAgICBpbW1bMl0gPSAnOicgKyBpbW1bMl0K KyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAie30iIGhhcyBhbiBpbmNvcnJl Y3QgbnVtYmVyIG9mICcgKyBcCisgICAgICAgICAgICAgICAgICAgICdlbmNvZGluZyBiaXRzIGZv ciBpbW1lZGlhdGUgInt9IicuXAorICAgICAgICAgICAgICAgICAgICBmb3JtYXQodGFnLCAnJy5q b2luKGltbSkpKQorICAgICAgICAgICAgaWYgaW1tX3R5cGUubG93ZXIoKSBpbiAnc3InOgorICAg ICAgICAgICAgICAgIHByaW50KCcgICAgICAgIERFQ09ERV9JTU1fU1hUKHt9LHt9KScuXAorICAg ICAgICAgICAgICAgICAgICBmb3JtYXQoaW1tbm8sIGltbV93aWR0aCksIGZpbGU9ZikKKyAgICAg ICAgICAgIGlmIGltbV90eXBlLmxvd2VyKCkgPT0gJ24nOgorICAgICAgICAgICAgICAgIHByaW50 KCcgICAgICAgIERFQ09ERV9JTU1fTkVHKHt9LHt9KScuXAorICAgICAgICAgICAgICAgICAgICBm b3JtYXQoaW1tbm8sIGltbV93aWR0aCksIGZpbGU9ZikKKyAgICAgICAgICAgIGlmIGltbV9zaGlm dDoKKyAgICAgICAgICAgICAgICBwcmludCgnICAgICAgICBERUNPREVfSU1NX1NISUZUKHt9LHt9 KScuXAorICAgICAgICAgICAgICAgICAgICBmb3JtYXQoaW1tbm8sIGltbV9zaGlmdCksIGZpbGU9 ZikKKyAgICAgICAgcHJpbnQoJyknLCBmaWxlPWYpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5f Xyc6CisgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgcHJpbnRfdHJlZShmLCBkZWN0 cmVlX25vcm1hbCkKKyAgICBwcmludF90cmVlKGYsIGRlY3RyZWVfMTZiaXQpCisgICAgaWYgc3Vi aW5zbl9ncm91cGluZ3M6CisgICAgICAgIHByaW50X3RyZWUoZiwgZGVjdHJlZV9zdWJpbnNuX2dy b3VwaW5ncykKKyAgICBmb3IgKG5hbWUsIGRlY3RyZWVfc3ViaW5zbikgaW4gc29ydGVkKGRlY3Ry ZWVfc3ViaW5zbnMuaXRlbXMoKSk6CisgICAgICAgIHByaW50X3RyZWUoZiwgZGVjdHJlZV9zdWJp bnNuKQorICAgIGZvciAobmFtZSwgZGVjdHJlZV9leHQpIGluIHNvcnRlZChkZWN0cmVlX2V4dGVu c2lvbnMuaXRlbXMoKSk6CisgICAgICAgIHByaW50X3RyZWUoZiwgZGVjdHJlZV9leHQpCisgICAg cHJpbnRfbWF0Y2hfaW5mbyhmKQorICAgIHByaW50X29wX2luZm8oZikKKyAgICBvcGVuKCdkZWN0 cmVlX2dlbmVyYXRlZC5oJywgJ3cnKS53cml0ZShmLmdldHZhbHVlKCkpCi0tIAoyLjcuNAoK