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.5 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,WEIRD_QUOTING 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 24995C352A4 for ; Tue, 11 Feb 2020 00:49:41 +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 D3EAB20733 for ; Tue, 11 Feb 2020 00:49:40 +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="Ngtdlufx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D3EAB20733 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]:41650 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1JkC-0006WF-0O for qemu-devel@archiver.kernel.org; Mon, 10 Feb 2020 19:49:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60546) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1JcB-0001Jc-Nt for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1Jc5-0006Eg-LZ for qemu-devel@nongnu.org; Mon, 10 Feb 2020 19:41:23 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:59190) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1Jc4-0004pJ-Qp 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=HhAjFgMGrUuX6ziKb/fe/RY3m4nZULLvmwvBBLZZc/w=; b=NgtdlufxMHj353Jn+5iRVCkwIjuokpNzgDrSCQZrN1PgvjKs5T8B/CUC 0WM1ELsuxIcv1QNsLQMgujiFQp5xm06T2auoGh4KCz2xzxKNmqcHlZFVs 6hUvXvd2AHhJKxwrR6Nvjc9iHi02MuIeWJcinCzlA9+146g+d0rS9Pdy7 4=; Received: from unknown (HELO ironmsg05-sd.qualcomm.com) ([10.53.140.145]) by alexa-out-sd-02.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:40:59 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 8B24C1B5B; Mon, 10 Feb 2020 18:40:59 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH 21/66] Hexagon generator phase 2 - qemu_def_generated.h Date: Mon, 10 Feb 2020 18:39:59 -0600 Message-Id: <1581381644-13678-22-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.39 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" Rm9yIGVhY2ggaW5zdHJ1Y3Rpb24gd2UgY3JlYXRlCiAgICBERUZfSEVMUEVSIGZ1bmN0aW9uIHBy b3RvdHlwZQogICAgVENHIGNvZGUgdG8gZ2VuZXJhdGUgY2FsbCB0byBoZWxwZXIKICAgIEhlbHBl ciBkZWZpbml0aW9uCgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVp Y2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vZG9fcWVtdS5weSB8IDc3MyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNzcz IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDc1NSB0YXJnZXQvaGV4YWdvbi9kb19xZW11 LnB5CgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZG9fcWVtdS5weSBiL3RhcmdldC9oZXhh Z29uL2RvX3FlbXUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkyZGJj MwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2RvX3FlbXUucHkKQEAgLTAsMCAr MSw3NzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0 IHByaW50X2Z1bmN0aW9uCisjIworIyMgIENvcHlyaWdodCAoYykgMjAxOSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMKKyMjICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorIyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyMjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyMKKyMj ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorIyMgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjIworCitpbXBvcnQgc3lzCitpbXBvcnQgcmUK K2ltcG9ydCBzdHJpbmcKK3RyeToKKyAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwor ZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisKKworaW1w b3J0IG9wZXJhdG9yCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4KKworCisKK2JlaGRpY3Qg PSB7fSAgICAgICAgICAjIHRhZyAtPmJlaGF2aW9yCitzZW1kaWN0ID0ge30gICAgICAgICAgIyB0 YWcgLT4gc2VtYW50aWNzCitleHRkaWN0ID0ge30gICAgICAgICAgIyB0YWcgLT4gV2hhdCBleHRl bnNpb24gYW4gaW5zdHJ1Y3Rpb24gYmVsb25ncyB0byAob3IgIiIpCitleHRuYW1lcyA9IHt9ICAg ICAgICAgIyBleHQgbmFtZSAtPiBUcnVlCithdHRyaWJkaWN0ID0ge30gICAgICAgIyB0YWcgLT4g YXR0cmlidXRlcworbWFjcm9zID0ge30gICAgICAgICAgICMgbWFjcm8gLT4gbWFjcm8gaW5mb3Jt YXRpb24uLi4KK2F0dHJpYmluZm8gPSB7fSAgICAgICAjIFJlZ2lzdGVyIGluZm9ybWF0aW9uIGFu ZCBtaXNjCit0YWdzID0gW10gICAgICAgICAgICAgIyBsaXN0IG9mIGFsbCB0YWdzCisKK2RlZiBn ZXRfbWFjcm8obWFjbmFtZSxleHQ9IiIpOgorICAgIG1hY2tleSA9IG1hY25hbWUgKyAiOiIgKyBl eHQKKyAgICBpZiBleHQgYW5kIG1hY2tleSBub3QgaW4gbWFjcm9zOgorICAgICAgICByZXR1cm4g Z2V0X21hY3JvKG1hY25hbWUsIiIpCisgICAgcmV0dXJuIG1hY3Jvc1ttYWNrZXldCisKKyMgV2Ug c2hvdWxkIGRvIHRoaXMgYXMgYSBoYXNoIGZvciBwZXJmb3JtYW5jZSwKKyMgYnV0IHRvIGtlZXAg b3JkZXIgbGV0J3Mga2VlcCBpdCBhcyBhIGxpc3QuCitkZWYgdW5pcXVpZnkoc2VxKToKKyAgICBz ZWVuID0gc2V0KCkKKyAgICBzZWVuX2FkZCA9IHNlZW4uYWRkCisgICAgcmV0dXJuIFt4IGZvciB4 IGluIHNlcSBpZiB4IG5vdCBpbiBzZWVuIGFuZCBub3Qgc2Vlbl9hZGQoeCldCisKK3JlZ3JlID0g cmUuY29tcGlsZSgKKyAgICByIigoPzwhRFVQKVtNTk9SQ1BRWFNHVlpBXSkoW3N0dXZ3eHl6ZGVm Z10rKShbLl0/W0xsSGhdPykoXGQrUz8pIikKK2ltbXJlID0gcmUuY29tcGlsZShyIlsjXShbclJz U3VVbV0pKFxkKykoPzpbOl0oXGQrKSk/IikKK3JlZ19vcl9pbW1yZSA9IFwKKyAgICByZS5jb21w aWxlKHIiKCgoPzwhRFVQKVtNTlJDT1BRWFNHVlpBXSkoW3N0dXZ3eHl6ZGVmZ10rKSIgKyBcCisg ICAgICAgICAgICAgICAgIihbLl0/W0xsSGhdPykoXGQrUz8pKXwoWyNdKFtyUnNTdVVtXSkoXGQr KVs6XT8oXGQrKT8pIikKK3JlbGltbXJlID0gcmUuY29tcGlsZShyIlsjXShbclJdKShcZCspKD86 WzpdKFxkKykpPyIpCithYnNpbW1yZSA9IHJlLmNvbXBpbGUociJbI10oW3NTdVVtXSkoXGQrKSg/ Ols6XShcZCspKT8iKQorCitmaW5pc2hlZF9tYWNyb3MgPSBzZXQoKQorCitkZWYgZXhwYW5kX21h Y3JvX2F0dHJpYnMobWFjcm8sYWxsbWFjX3JlKToKKyAgICBpZiBtYWNyby5rZXkgbm90IGluIGZp bmlzaGVkX21hY3JvczoKKyAgICAgICAgIyBHZXQgYSBsaXN0IG9mIGFsbCB0aGluZ3MgdGhhdCBt aWdodCBiZSBtYWNyb3MKKyAgICAgICAgbCA9IGFsbG1hY19yZS5maW5kYWxsKG1hY3JvLmJlaCkK KyAgICAgICAgZm9yIHN1Ym1hY3JvIGluIGw6CisgICAgICAgICAgICBpZiBub3Qgc3VibWFjcm86 IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgZ2V0X21hY3JvKHN1Ym1hY3JvLG1hY3JvLmV4 dCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZG4ndCBmaW5kIG1hY3Jv OiA8JXM+IiAlIGwpCisgICAgICAgICAgICBtYWNyby5hdHRyaWJzIHw9IGV4cGFuZF9tYWNyb19h dHRyaWJzKAorICAgICAgICAgICAgICAgIGdldF9tYWNybyhzdWJtYWNybyxtYWNyby5leHQpLCBh bGxtYWNfcmUpCisgICAgICAgICAgICBmaW5pc2hlZF9tYWNyb3MuYWRkKG1hY3JvLmtleSkKKyAg ICByZXR1cm4gbWFjcm8uYXR0cmlicworCitpbW1leHRyZSA9IHJlLmNvbXBpbGUocidmKE1VU1Rf KT9JTU1FWFRbKF0oW1V1U3NScl0pJykKK2RlZiBjYWxjdWxhdGVfYXR0cmlicygpOgorICAgICMg UmVjdXJzZSBkb3duIG1hY3JvcywgZmluZCBhdHRyaWJ1dGVzIGZyb20gc3ViLW1hY3JvcworICAg IG1hY3JvVmFsdWVzID0gbGlzdChtYWNyb3MudmFsdWVzKCkpCisgICAgYWxsbWFjcm9zX3Jlc3Ry ID0gInwiLmpvaW4oc2V0KFsgbS5yZS5wYXR0ZXJuIGZvciBtIGluIG1hY3JvVmFsdWVzIF0pKQor ICAgIGFsbG1hY3Jvc19yZSA9IHJlLmNvbXBpbGUoYWxsbWFjcm9zX3Jlc3RyKQorICAgIGZvciBt YWNybyBpbiBtYWNyb1ZhbHVlczoKKyAgICAgICAgZXhwYW5kX21hY3JvX2F0dHJpYnMobWFjcm8s YWxsbWFjcm9zX3JlKQorICAgICMgQXBwZW5kIGF0dHJpYnV0ZXMgdG8gYWxsIGluc3RydWN0aW9u cworICAgIGZvciB0YWcgaW4gdGFnczoKKyAgICAgICAgZm9yIG1hY25hbWUgaW4gYWxsbWFjcm9z X3JlLmZpbmRhbGwoc2VtZGljdFt0YWddKToKKyAgICAgICAgICAgIGlmIG5vdCBtYWNuYW1lOiBj b250aW51ZQorICAgICAgICAgICAgbWFjcm8gPSBnZXRfbWFjcm8obWFjbmFtZSxleHRkaWN0W3Rh Z10pCisgICAgICAgICAgICBhdHRyaWJkaWN0W3RhZ10gfD0gc2V0KG1hY3JvLmF0dHJpYnMpCisg ICAgICAgIG0gPSBpbW1leHRyZS5zZWFyY2goc2VtZGljdFt0YWddKQorICAgICAgICBpZiBtOgor ICAgICAgICAgICAgaWYgbS5ncm91cCgyKS5pc3VwcGVyKCk6CisgICAgICAgICAgICAgICAgYXR0 cmliID0gJ0FfRVhUX1VQUEVSX0lNTUVEJworICAgICAgICAgICAgZWxpZiBtLmdyb3VwKDIpLmlz bG93ZXIoKToKKyAgICAgICAgICAgICAgICBhdHRyaWIgPSAnQV9FWFRfTE9XRVJfSU1NRUQnCisg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlICJOb3QgYSBsZXR0ZXI6ICVz ICglcykiICUgKG0uZ3JvdXAoMSksdGFnKQorICAgICAgICAgICAgaWYgbm90IGF0dHJpYiBpbiBh dHRyaWJkaWN0W3RhZ106CisgICAgICAgICAgICAgICAgYXR0cmliZGljdFt0YWddLmFkZChhdHRy aWIpCisKK2RlZiBTRU1BTlRJQ1ModGFnLCBiZWgsIHNlbSk6CisgICAgI3ByaW50IHRhZyxiZWgs c2VtCisgICAgZXh0ZGljdFt0YWddID0gIiIKKyAgICBiZWhkaWN0W3RhZ10gPSBiZWgKKyAgICBz ZW1kaWN0W3RhZ10gPSBzZW0KKyAgICBhdHRyaWJkaWN0W3RhZ10gPSBzZXQoKQorICAgIHRhZ3Mu YXBwZW5kKHRhZykgICAgICAgICMgZGljdHMgaGF2ZSBubyBvcmRlciwgdGhpcyBpcyBmb3Igb3Jk ZXIKKworZGVmIEFUVFJJQlVURVModGFnLCBhdHRyaWJzdHJpbmcpOgorICAgIGF0dHJpYnN0cmlu ZyA9IFwKKyAgICAgICAgYXR0cmlic3RyaW5nLnJlcGxhY2UoIkFUVFJJQlMiLCIiKS5yZXBsYWNl KCIoIiwiIikucmVwbGFjZSgiKSIsIiIpCisgICAgaWYgbm90IGF0dHJpYnN0cmluZzoKKyAgICAg ICAgcmV0dXJuCisgICAgYXR0cmlicyA9IGF0dHJpYnN0cmluZy5zcGxpdCgiLCIpCisgICAgZm9y IGF0dHJpYiBpbiBhdHRyaWJzOgorICAgICAgICBhdHRyaWJkaWN0W3RhZ10uYWRkKGF0dHJpYi5z dHJpcCgpKQorCitjbGFzcyBNYWNybyhvYmplY3QpOgorICAgIF9fc2xvdHNfXyA9IFsna2V5Jywn bmFtZScsICdiZWgnLCAnYXR0cmlicycsICdyZScsJ2V4dCddCisgICAgZGVmIF9faW5pdF9fKHNl bGYsa2V5LCBuYW1lLCBiZWgsIGF0dHJpYnMsZXh0KToKKyAgICAgICAgc2VsZi5rZXkgPSBrZXkK KyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmJlaCA9IGJlaAorICAgICAg ICBzZWxmLmF0dHJpYnMgPSBzZXQoYXR0cmlicykKKyAgICAgICAgc2VsZi5leHQgPSBleHQKKyAg ICAgICAgc2VsZi5yZSA9IHJlLmNvbXBpbGUoIlxcYiIgKyBuYW1lICsgIlxcYiIpCisKK2RlZiBN QUNST0FUVFJJQihtYWNuYW1lLGJlaCxhdHRyaWJzdHJpbmcsZXh0PSIiKToKKyAgICBhdHRyaWJz dHJpbmcgPSBhdHRyaWJzdHJpbmcucmVwbGFjZSgiKCIsIiIpLnJlcGxhY2UoIikiLCIiKQorICAg IG1hY2tleSA9IG1hY25hbWUgKyAiOiIgKyBleHQKKyAgICBpZiBhdHRyaWJzdHJpbmc6CisgICAg ICAgIGF0dHJpYnMgPSBhdHRyaWJzdHJpbmcuc3BsaXQoIiwiKQorICAgIGVsc2U6CisgICAgICAg IGF0dHJpYnMgPSBbXQorICAgIG1hY3Jvc1ttYWNrZXldID0gTWFjcm8obWFja2V5LG1hY25hbWUs YmVoLGF0dHJpYnMsZXh0KQorCisjIHJlYWQgaW4gZmlsZS4gIEV2YWx1YXRlIGVhY2ggbGluZTog ZWFjaCBsaW5lIGNhbGxzIGEgZnVuY3Rpb24gYWJvdmUKKworZm9yIGxpbmUgaW4gb3BlbihzeXMu YXJndlsxXSwgJ3J0JykucmVhZGxpbmVzKCk6CisgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgi IyIpOgorICAgICAgICBldmFsKGxpbmUuc3RyaXAoKSkKKworCitjYWxjdWxhdGVfYXR0cmlicygp CisKKworYXR0cmlicmUgPSByZS5jb21waWxlKHInREVGX0FUVFJJQlwoKFtBLVphLXowLTlfXSsp LCAoW14sXSopLCAnICsKKyAgICAgICAgciciKFtBLVphLXowLTlfXC5dKikiLCAiKFtBLVphLXow LTlfXC5dKikiXCknKQorZm9yIGxpbmUgaW4gb3BlbihzeXMuYXJndlsyXSwgJ3J0JykucmVhZGxp bmVzKCk6CisgICAgaWYgbm90IGF0dHJpYnJlLm1hdGNoKGxpbmUpOgorICAgICAgICBjb250aW51 ZQorICAgIChhdHRyaWJfYmFzZSxkZXNjcixycmVnLHdyZWcpID0gYXR0cmlicmUuZmluZGFsbChs aW5lKVswXQorICAgIGF0dHJpYl9iYXNlID0gJ0FfJyArIGF0dHJpYl9iYXNlCisgICAgYXR0cmli aW5mb1thdHRyaWJfYmFzZV0gPSB7J3JyZWcnOnJyZWcsICd3cmVnJzp3cmVnLCAnZGVzY3InOmRl c2NyfQorCitkZWYgY29tcHV0ZV90YWdfcmVncyh0YWcpOgorICAgIHJldHVybiB1bmlxdWlmeShy ZWdyZS5maW5kYWxsKGJlaGRpY3RbdGFnXSkpCisKK2RlZiBjb21wdXRlX3RhZ19pbW1lZGlhdGVz KHRhZyk6CisgICAgcmV0dXJuIHVuaXF1aWZ5KGltbXJlLmZpbmRhbGwoYmVoZGljdFt0YWddKSkK KworIyMKKyMjICB0YWdyZWdzIGlzIHRoZSBtYWluIGRhdGEgc3RydWN0dXJlIHdlJ2xsIHVzZQor IyMgIHRhZ3JlZ3NbdGFnXSB3aWxsIGNvbnRhaW4gdGhlIHJlZ2lzdGVycyB1c2VkIGJ5IGFuIGlu c3RydWN0aW9uCisjIyAgV2l0aGluIGVhY2ggZW50cnksIHdlJ2xsIHVzZSB0aGUgcmVndHlwZSBh bmQgcmVnaWQgZmllbGRzCisjIyAgICAgIHJlZ3R5cGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93 aW5nCisjIyAgICAgICAgICBDICAgICAgICAgICAgICAgIGNvbnRyb2wgcmVnaXN0ZXIKKyMjICAg ICAgICAgIE4gICAgICAgICAgICAgICAgbmV3IHJlZ2lzdGVyIHZhbHVlCisjIyAgICAgICAgICBQ ICAgICAgICAgICAgICAgIHByZWRpY2F0ZSByZWdpc3RlcgorIyMgICAgICAgICAgUiAgICAgICAg ICAgICAgICBHUFIgcmVnaXN0ZXIKKyMjICAgICAgICAgIE0gICAgICAgICAgICAgICAgbW9kaWZp ZXIgcmVnaXN0ZXIKKyMjICAgICAgcmVnaWQgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nCisj IyAgICAgICAgICBkLCBlICAgICAgICAgICAgIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisjIyAgICAg ICAgICBkZCAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHBhaXIKKyMjICAgICAg ICAgIHMsIHQsIHUsIHYsIHcgICAgc291cmNlIHJlZ2lzdGVyCisjIyAgICAgICAgICBzcywgdHQs IHV1LCB2diAgIHNvdXJjZSByZWdpc3RlciBwYWlyCisjIyAgICAgICAgICB4LCB5ICAgICAgICAg ICAgIHJlYWQtd3JpdGUgcmVnaXN0ZXIKKyMjICAgICAgICAgIHh4LCB5eSAgICAgICAgICAgcmVh ZC13cml0ZSByZWdpc3RlciBwYWlyCisjIwordGFncmVncyA9IGRpY3QoemlwKHRhZ3MsIGxpc3Qo bWFwKGNvbXB1dGVfdGFnX3JlZ3MsIHRhZ3MpKSkpCisKK2RlZiBpc19wYWlyKHJlZ2lkKToKKyAg ICByZXR1cm4gbGVuKHJlZ2lkKSA9PSAyCisKK2RlZiBpc19zaW5nbGUocmVnaWQpOgorICAgIHJl dHVybiBsZW4ocmVnaWQpID09IDEKKworZGVmIGlzX3dyaXR0ZW4ocmVnaWQpOgorICAgIHJldHVy biByZWdpZFswXSBpbiAiZGV4eSIKKworZGVmIGlzX3dyaXRlb25seShyZWdpZCk6CisgICAgcmV0 dXJuIHJlZ2lkWzBdIGluICJkZSIKKworZGVmIGlzX3JlYWQocmVnaWQpOgorICAgIHJldHVybiBy ZWdpZFswXSBpbiAic3R1dnd4eSIKKworZGVmIGlzX3JlYWR3cml0ZShyZWdpZCk6CisgICAgcmV0 dXJuIHJlZ2lkWzBdIGluICJ4eSIKKworZGVmIGlzX3NjYWxhcl9yZWcocmVndHlwZSk6CisgICAg cmV0dXJuIHJlZ3R5cGUgaW4gIlJQQyIKKworZGVmIGlzX29sZF92YWwocmVndHlwZSwgcmVnaWQs IHRhZyk6CisgICAgcmV0dXJuIHJlZ3R5cGUrcmVnaWQrJ1YnIGluIHNlbWRpY3RbdGFnXQorCitk ZWYgaXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICByZXR1cm4gcmVndHlwZSty ZWdpZCsnTicgaW4gc2VtZGljdFt0YWddCisKK3RhZ2ltbXMgPSBkaWN0KHppcCh0YWdzLCBsaXN0 KG1hcChjb21wdXRlX3RhZ19pbW1lZGlhdGVzLCB0YWdzKSkpKQorCitkZWYgbmVlZF9zbG90KHRh Zyk6CisgICAgaWYgKCdBX0NPTkRFWEVDJyBpbiBhdHRyaWJkaWN0W3RhZ10gb3IKKyAgICAgICAg J0FfU1RPUkUnIGluIGF0dHJpYmRpY3RbdGFnXSk6CisgICAgICAgIHJldHVybiAxCisgICAgZWxz ZToKKyAgICAgICAgcmV0dXJuIDAKKworZGVmIG5lZWRfcGFydDEodGFnKToKKyAgICByZXR1cm4g cmUuY29tcGlsZShyImZQQVJUMSIpLnNlYXJjaChzZW1kaWN0W3RhZ10pCisKK2RlZiBuZWVkX2Vh KHRhZyk6CisgICAgcmV0dXJuIHJlLmNvbXBpbGUociJcYkVBXGIiKS5zZWFyY2goc2VtZGljdFt0 YWddKQorCitkZWYgaW1tX25hbWUoaW1tbGV0dCk6CisgICAgcmV0dXJuICIlc2lWIiAlIGltbWxl dHQKKworIyMKKyMjIEhlbHBlcnMgZm9yIGdlbl9oZWxwZXJfcHJvdG90eXBlCisjIworZGVmX2hl bHBlcl90eXBlcyA9IHsKKyAgICAnTicgOiAnczMyJywKKyAgICAnTycgOiAnczMyJywKKyAgICAn UCcgOiAnczMyJywKKyAgICAnTScgOiAnczMyJywKKyAgICAnQycgOiAnczMyJywKKyAgICAnUicg OiAnczMyJywKKyAgICAnVicgOiAncHRyJywKKyAgICAnUScgOiAncHRyJworfQorCitkZWZfaGVs cGVyX3R5cGVzX3BhaXIgPSB7CisgICAgJ1InIDogJ3M2NCcsCisgICAgJ0MnIDogJ3M2NCcsCisg ICAgJ1MnIDogJ3M2NCcsCisgICAgJ0cnIDogJ3M2NCcsCisgICAgJ1YnIDogJ3B0cicsCisgICAg J1EnIDogJ3B0cicKK30KKworZGVmIGdlbl9kZWZfaGVscGVyX29wbihmLCB0YWcsIHJlZ3R5cGUs IHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAoaXNfcGFpcihyZWdpZCkpOgorICAg ICAgICBmLndyaXRlKCIsICVzIiAlIChkZWZfaGVscGVyX3R5cGVzX3BhaXJbcmVndHlwZV0pKQor ICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBmLndyaXRlKCIsICVzIiAlIChk ZWZfaGVscGVyX3R5cGVzW3JlZ3R5cGVdKSkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQmFk IHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorCisjIworIyMg R2VuZXJhdGUgdGhlIERFRl9IRUxQRVIgcHJvdG90eXBlIGZvciBhbiBpbnN0cnVjdGlvbgorIyMg ICAgIEZvciBBMl9hZGQ6IFJkMzI9YWRkKFJzMzIsUnQzMikKKyMjICAgICBXZSBwcm9kdWNlOgor IyMgICAgICAgICAjaWZuZGVmIGZXUkFQX0EyX2FkZAorIyMgICAgICAgICBERUZfSEVMUEVSXzMo QTJfYWRkLCBzMzIsIGVudiwgczMyLCBzMzIpCisjIyAgICAgICAgICNlbmRpZgorIyMKK2RlZiBn ZW5faGVscGVyX3Byb3RvdHlwZShmLCB0YWcsIHJlZ3MsIGltbXMpOgorICAgIGYud3JpdGUoJyNp Zm5kZWYgZldSQVBfJXNcbicgJSB0YWcpCisgICAgbnVtcmVzdWx0cyA9IDAKKyAgICBudW1zY2Fs YXJyZXN1bHRzID0gMAorICAgIG51bXNjYWxhcnJlYWR3cml0ZSA9IDAKKyAgICBmb3IgcmVndHlw ZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgaWYgKGlzX3dyaXR0ZW4ocmVn aWQpKToKKyAgICAgICAgICAgIG51bXJlc3VsdHMgKz0gMQorICAgICAgICAgICAgaWYgKGlzX3Nj YWxhcl9yZWcocmVndHlwZSkpOgorICAgICAgICAgICAgICAgIG51bXNjYWxhcnJlc3VsdHMgKz0g MQorICAgICAgICBpZiAoaXNfcmVhZHdyaXRlKHJlZ2lkKSk6CisgICAgICAgICAgICBpZiAoaXNf c2NhbGFyX3JlZyhyZWd0eXBlKSk6CisgICAgICAgICAgICAgICAgbnVtc2NhbGFycmVhZHdyaXRl ICs9IDEKKworICAgIGlmIChudW1zY2FsYXJyZXN1bHRzID4gMSk6CisgICAgICAgICMjIFRoZSBo ZWxwZXIgaXMgYm9ndXMgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJlc3VsdAorICAgICAg ICBmLndyaXRlKCdERUZfSEVMUEVSXzEoJXMsIHZvaWQsIGVudilcbicgJSB0YWcpCisgICAgZWxz ZToKKyAgICAgICAgIyMgRmlndXJlIG91dCBob3cgbWFueSBhcmd1bWVudHMgdGhlIGhlbHBlciB3 aWxsIHRha2UKKyAgICAgICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPT0gMCk6CisgICAgICAgICAg ICBkZWZfaGVscGVyX3NpemUgPSBsZW4ocmVncykrbGVuKGltbXMpK251bXNjYWxhcnJlYWR3cml0 ZSsxCisgICAgICAgICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6IGRlZl9oZWxwZXJfc2l6ZSArPSAx CisgICAgICAgICAgICBpZiBuZWVkX3Nsb3QodGFnKTogZGVmX2hlbHBlcl9zaXplICs9IDEKKyAg ICAgICAgICAgIGYud3JpdGUoJ0RFRl9IRUxQRVJfJXMoJXMnICUgKGRlZl9oZWxwZXJfc2l6ZSwg dGFnKSkKKyAgICAgICAgICAgICMjIFRoZSByZXR1cm4gdHlwZSBpcyB2b2lkCisgICAgICAgICAg ICBmLndyaXRlKCcsIHZvaWQnICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZl9oZWxw ZXJfc2l6ZSA9IGxlbihyZWdzKStsZW4oaW1tcykrbnVtc2NhbGFycmVhZHdyaXRlCisgICAgICAg ICAgICBpZiBuZWVkX3BhcnQxKHRhZyk6IGRlZl9oZWxwZXJfc2l6ZSArPSAxCisgICAgICAgICAg ICBpZiBuZWVkX3Nsb3QodGFnKTogZGVmX2hlbHBlcl9zaXplICs9IDEKKyAgICAgICAgICAgIGYu d3JpdGUoJ0RFRl9IRUxQRVJfJXMoJXMnICUgKGRlZl9oZWxwZXJfc2l6ZSwgdGFnKSkKKworICAg ICAgICAjIyBHZW5lcmF0ZSB0aGUgcWVtdSBERUZfSEVMUEVSIHR5cGUgZm9yIGVhY2ggcmVzdWx0 CisgICAgICAgIGk9MAorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4g cmVnczoKKyAgICAgICAgICAgIGlmIChpc193cml0dGVuKHJlZ2lkKSk6CisgICAgICAgICAgICAg ICAgZ2VuX2RlZl9oZWxwZXJfb3BuKGYsIHRhZywgcmVndHlwZSwgcmVnaWQsIHRvc3MsIG51bXJl Z3MsIGkpCisgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyMgUHV0IHRoZSBlbnYg YmV0d2VlbiB0aGUgb3V0cHV0cyBhbmQgaW5wdXRzCisgICAgICAgIGYud3JpdGUoJywgZW52JyAp CisgICAgICAgIGkgKz0gMQorCisgICAgICAgICMjIEdlbmVyYXRlIHRoZSBxZW11IHR5cGUgZm9y IGVhY2ggaW5wdXQgb3BlcmFuZCAocmVncyBhbmQgaW1tZWRpYXRlcykKKyAgICAgICAgZm9yIHJl Z3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgICAgICBpZiAoaXNfcmVh ZChyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9kZWZfaGVscGVyX29wbihmLCB0YWcsIHJl Z3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKQorICAgICAgICAgICAgICAgIGkgKz0gMQor ICAgICAgICBmb3IgaW1tbGV0dCxiaXRzLGltbXNoaWZ0IGluIGltbXM6CisgICAgICAgICAgICBm LndyaXRlKCIsIHMzMiIpCisKKyAgICAgICAgIyMgQWRkIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBp bnN0cnVjdGlvbiBzbG90IGFuZCBwYXJ0MSAoaWYgbmVlZGVkKQorICAgICAgICBpZiBuZWVkX3Ns b3QodGFnKTogZi53cml0ZSgnLCBpMzInICkKKyAgICAgICAgaWYgbmVlZF9wYXJ0MSh0YWcpOiBm LndyaXRlKCcgLCBpMzInICkKKyAgICAgICAgZi53cml0ZSgnKVxuJykKKyAgICBmLndyaXRlKCcj ZW5kaWZcbicpCisKKyMjCisjIyBIZWxwZXJzIGZvciBnZW5fdGNnX2Z1bmMKKyMjCitkZWYgZ2Vu X2RlY2xfZWFfdGNnKGYpOgorICAgIGYud3JpdGUoIkRFQ0xfRUE7XG4iKQorCitkZWYgZ2VuX2Zy ZWVfZWFfdGNnKGYpOgorICAgIGYud3JpdGUoIkZSRUVfRUE7XG4iKQorCitkZWYgZ2VucHRyX2Rl Y2woZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICByZWdOPSIlcyVzTiIgJSAocmVndHlwZSxy ZWdpZCkKKyAgICBtYWNybyA9ICJERUNMXyVzUkVHXyVzIiAlIChyZWd0eXBlLCByZWdpZCkKKyAg ICBmLndyaXRlKCIlcyglcyVzViwgJXMsICVkLCAwKTtcbiIgJSBcCisgICAgICAgIChtYWNybywg cmVndHlwZSwgcmVnaWQsIHJlZ04sIHJlZ25vKSkKKworZGVmIGdlbnB0cl9kZWNsX25ldyhmLHJl Z3R5cGUscmVnaWQscmVnbm8pOgorICAgIHJlZ049IiVzJXNYIiAlIChyZWd0eXBlLHJlZ2lkKQor ICAgIG1hY3JvID0gIkRFQ0xfTkVXXyVzUkVHXyVzIiAlIChyZWd0eXBlLCByZWdpZCkKKyAgICBm LndyaXRlKCIlcyglcyVzTiwgJXMsICVkLCAwKTtcbiIgJSBcCisgICAgICAgIChtYWNybywgcmVn dHlwZSwgcmVnaWQsIHJlZ04sIHJlZ25vKSkKKworZGVmIGdlbnB0cl9kZWNsX29wbihmLCB0YWcs IHJlZ3R5cGUsIHJlZ2lkLCB0b3NzLCBudW1yZWdzLCBpKToKKyAgICBpZiAoaXNfcGFpcihyZWdp ZCkpOgorICAgICAgICBnZW5wdHJfZGVjbChmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICBlbGlmIChp c19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgaWYgaXNfb2xkX3ZhbChyZWd0eXBlLCByZWdpZCwg dGFnKToKKyAgICAgICAgICAgIGdlbnB0cl9kZWNsKGYscmVndHlwZSxyZWdpZCxpKQorICAgICAg ICBlbGlmIGlzX25ld192YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBnZW5w dHJfZGVjbF9uZXcoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg ICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdz KQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlw ZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKK2RlZiBnZW5wdHJfZGVjbF9pbW0oZixpbW1sZXR0KToK KyAgICBpZiAoaW1tbGV0dC5pc3VwcGVyKCkpOgorICAgICAgICBpID0gMQorICAgIGVsc2U6Cisg ICAgICAgIGkgPSAwCisgICAgZi53cml0ZSgiREVDTF9JTU0oJXMsJWQpO1xuIiAlIChpbW1fbmFt ZShpbW1sZXR0KSxpKSkKKworZGVmIGdlbnB0cl9mcmVlKGYscmVndHlwZSxyZWdpZCxyZWdubyk6 CisgICAgbWFjcm8gPSAiRlJFRV8lc1JFR18lcyIgJSAocmVndHlwZSwgcmVnaWQpCisgICAgZi53 cml0ZSgiJXMoJXMlc1YpO1xuIiAlIChtYWNybywgcmVndHlwZSwgcmVnaWQpKQorCitkZWYgZ2Vu cHRyX2ZyZWVfbmV3KGYscmVndHlwZSxyZWdpZCxyZWdubyk6CisgICAgbWFjcm8gPSAiRlJFRV9O RVdfJXNSRUdfJXMiICUgKHJlZ3R5cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVzJXNOKTtc biIgJSAobWFjcm8sIHJlZ3R5cGUsIHJlZ2lkKSkKKworZGVmIGdlbnB0cl9mcmVlX29wbihmLHJl Z3R5cGUscmVnaWQsaSk6CisgICAgaWYgKGlzX3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VucHRy X2ZyZWUoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6Cisg ICAgICAgIGlmIGlzX29sZF92YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAgICBn ZW5wdHJfZnJlZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgZWxpZiBpc19uZXdfdmFsKHJl Z3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VucHRyX2ZyZWVfbmV3KGYscmVndHlw ZSxyZWdpZCxpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkJhZCByZWdpc3Rl ciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKyAgICBlbHNlOgorICAgICAg ICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdz KQorCitkZWYgZ2VucHRyX2ZyZWVfaW1tKGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgiRlJFRV9J TU0oJXMpO1xuIiAlIChpbW1fbmFtZShpbW1sZXR0KSkpCisKK2RlZiBnZW5wdHJfc3JjX3JlYWQo ZixyZWd0eXBlLHJlZ2lkKToKKyAgICBtYWNybyA9ICJSRUFEXyVzUkVHXyVzIiAlIChyZWd0eXBl LCByZWdpZCkKKyAgICBmLndyaXRlKCIlcyglcyVzViwgJXMlc04pO1xuIiAlIFwKKyAgICAgICAg KG1hY3JvLHJlZ3R5cGUscmVnaWQscmVndHlwZSxyZWdpZCkpCisKK2RlZiBnZW5wdHJfc3JjX3Jl YWRfbmV3KGYscmVndHlwZSxyZWdpZCk6CisgICAgbWFjcm8gPSAiUkVBRF9ORVdfJXNSRUdfJXMi ICUgKHJlZ3R5cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVzJXNOLCAlcyVzWCk7XG4iICUg XAorICAgICAgICAobWFjcm8scmVndHlwZSxyZWdpZCxyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdl bnB0cl9zcmNfcmVhZF9vcG4oZixyZWd0eXBlLHJlZ2lkKToKKyAgICBpZiAoaXNfcGFpcihyZWdp ZCkpOgorICAgICAgICBnZW5wdHJfc3JjX3JlYWQoZixyZWd0eXBlLHJlZ2lkKQorICAgIGVsaWYg KGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBpZiBpc19vbGRfdmFsKHJlZ3R5cGUsIHJlZ2lk LCB0YWcpOgorICAgICAgICAgICAgZ2VucHRyX3NyY19yZWFkKGYscmVndHlwZSxyZWdpZCkKKyAg ICAgICAgZWxpZiBpc19uZXdfdmFsKHJlZ3R5cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAg Z2VucHRyX3NyY19yZWFkX25ldyhmLHJlZ3R5cGUscmVnaWQpCisgICAgICAgIGVsc2U6CisgICAg ICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAiLHJlZ3R5cGUscmVnaWQsdG9zcyxu dW1yZWdzKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIs cmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKK2RlZiBnZW5faGVscGVyX2NhbGxfb3BuKGYs IHRhZywgcmVndHlwZSwgcmVnaWQsIHRvc3MsIG51bXJlZ3MsIGkpOgorICAgIGlmIChpID4gMCk6 IGYud3JpdGUoIiwgIikKKyAgICBpZiAoaXNfcGFpcihyZWdpZCkpOgorICAgICAgICBmLndyaXRl KCIlcyVzViIgJSAocmVndHlwZSxyZWdpZCkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJlZ2lkKSk6 CisgICAgICAgIGlmIGlzX29sZF92YWwocmVndHlwZSwgcmVnaWQsIHRhZyk6CisgICAgICAgICAg ICBmLndyaXRlKCIlcyVzViIgJSAocmVndHlwZSxyZWdpZCkpCisgICAgICAgIGVsaWYgaXNfbmV3 X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICAgICAgICAgIGYud3JpdGUoIiVzJXNOIiAl IChyZWd0eXBlLHJlZ2lkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQg cmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisgICAgZWxzZToK KyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncykKKworZGVmIGdlbl9oZWxwZXJfZGVjbF9pbW0oZixpbW1sZXR0KToKKyAgICBmLndy aXRlKCJERUNMX1RDR19JTU0odGNndl8lcywgJXMpO1xuIiAlIFwKKyAgICAgICAgKGltbV9uYW1l KGltbWxldHQpLCBpbW1fbmFtZShpbW1sZXR0KSkpCisKK2RlZiBnZW5faGVscGVyX2NhbGxfaW1t KGYsaW1tbGV0dCk6CisgICAgZi53cml0ZSgiLCB0Y2d2XyVzIiAlIGltbV9uYW1lKGltbWxldHQp KQorCitkZWYgZ2VuX2hlbHBlcl9mcmVlX2ltbShmLGltbWxldHQpOgorICAgIGYud3JpdGUoIkZS RUVfVENHX0lNTSh0Y2d2XyVzKTtcbiIgJSBpbW1fbmFtZShpbW1sZXR0KSkKKworZGVmIGdlbnB0 cl9kc3Rfd3JpdGUoZixyZWd0eXBlLCByZWdpZCk6CisgICAgbWFjcm8gPSAiV1JJVEVfJXNSRUdf JXMiICUgKHJlZ3R5cGUsIHJlZ2lkKQorICAgIGYud3JpdGUoIiVzKCVzJXNOLCAlcyVzVik7XG4i ICUgKG1hY3JvLCByZWd0eXBlLCByZWdpZCwgcmVndHlwZSwgcmVnaWQpKQorCitkZWYgZ2VucHRy X2RzdF93cml0ZV9vcG4oZixyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAgICBpZiAoaXNfcGFpcihy ZWdpZCkpOgorICAgICAgICBnZW5wdHJfZHN0X3dyaXRlKGYsIHJlZ3R5cGUsIHJlZ2lkKQorICAg IGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBnZW5wdHJfZHN0X3dyaXRlKGYsIHJl Z3R5cGUsIHJlZ2lkKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFy c2U6ICIscmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MpCisKKyMjCisjIyBHZW5lcmF0ZSB0aGUg VENHIGNvZGUgdG8gY2FsbCB0aGUgaGVscGVyCisjIyAgICAgRm9yIEEyX2FkZDogUmQzMj1hZGQo UnMzMixSdDMyKSwgeyBSZFY9UnNWK1J0Vjt9CisjIyAgICAgV2UgcHJvZHVjZToKKyMjICAgICAg IHsKKyMjICAgICAgIC8qIEEyX2FkZCAqLworIyMgICAgICAgREVDTF9SUkVHX2QoUmRWLCBSZE4s IDAsIDApOworIyMgICAgICAgREVDTF9SUkVHX3MoUnNWLCBSc04sIDEsIDApOworIyMgICAgICAg REVDTF9SUkVHX3QoUnRWLCBSdE4sIDIsIDApOworIyMgICAgICAgUkVBRF9SUkVHX3MoUnNWLCBS c04pOworIyMgICAgICAgUkVBRF9SUkVHX3QoUnRWLCBSdE4pOworIyMgICAgICAgZldSQVBfQTJf YWRkKAorIyMgICAgICAgZG8geworIyMgICAgICAgZ2VuX2hlbHBlcl9BMl9hZGQoUmRWLCBjcHVf ZW52LCBSc1YsIFJ0Vik7CisjIyAgICAgICB3aGlsZSAoMCksCisjIyAgICAgICB7IFJkVj1Sc1Yr UnRWO30pOworIyMgICAgICAgV1JJVEVfUlJFR19kKFJkTiwgUmRWKTsKKyMjICAgICAgIEZSRUVf UlJFR19kKFJkVik7CisjIyAgICAgICBGUkVFX1JSRUdfcyhSc1YpOworIyMgICAgICAgRlJFRV9S UkVHX3QoUnRWKTsKKyMjICAgICAgIC8qIEEyX2FkZCAqLworIyMgICAgICAgfQorIyMKK2RlZiBn ZW5fdGNnX2Z1bmMoZiwgdGFnLCByZWdzLCBpbW1zKToKKyAgICBmLndyaXRlKCd7XG4nKQorICAg IGYud3JpdGUoJy8qICVzICovXG4nICUgdGFnKQorICAgIGlmIG5lZWRfZWEodGFnKTogZ2VuX2Rl Y2xfZWFfdGNnKGYpCisgICAgaT0wCisgICAgIyMgRGVjbGFyZSBhbGwgdGhlIG9wZXJhbmRzIChy ZWdzIGFuZCBpbW1lZGlhdGVzKQorICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBp biByZWdzOgorICAgICAgICBnZW5wdHJfZGVjbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwg dG9zcywgbnVtcmVncywgaSkKKyAgICAgICAgaSArPSAxCisgICAgZm9yIGltbWxldHQsYml0cyxp bW1zaGlmdCBpbiBpbW1zOgorICAgICAgICBnZW5wdHJfZGVjbF9pbW0oZixpbW1sZXR0KQorCisg ICAgaWYgJ0FfUFJJVicgaW4gYXR0cmliZGljdFt0YWddOgorICAgICAgICBmLndyaXRlKCdmQ0hF Q0tGT1JQUklWKCk7XG4nKQorICAgIGlmICdBX0dVRVNUJyBpbiBhdHRyaWJkaWN0W3RhZ106Cisg ICAgICAgIGYud3JpdGUoJ2ZDSEVDS0ZPUkdVRVNUKCk7XG4nKQorICAgIGlmICdBX0ZQT1AnIGlu IGF0dHJpYmRpY3RbdGFnXToKKyAgICAgICAgZi53cml0ZSgnZkZQT1BfU1RBUlQoKTtcbicpOwor CisgICAgIyMgUmVhZCBhbGwgdGhlIGlucHV0cworICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3Ms bnVtcmVncyBpbiByZWdzOgorICAgICAgICBpZiAoaXNfcmVhZChyZWdpZCkpOgorICAgICAgICAg ICAgZ2VucHRyX3NyY19yZWFkX29wbihmLHJlZ3R5cGUscmVnaWQpCisKKyAgICAjIyBHZW5lcmF0 ZSB0aGUgY2FsbCB0byB0aGUgaGVscGVyCisgICAgZi53cml0ZSgiZldSQVBfJXMoXG4iICUgdGFn KQorICAgIGYud3JpdGUoImRvIHtcbiIpCisgICAgZm9yIGltbWxldHQsYml0cyxpbW1zaGlmdCBp biBpbW1zOgorICAgICAgICBnZW5faGVscGVyX2RlY2xfaW1tKGYsaW1tbGV0dCkKKyAgICBpZiBu ZWVkX3BhcnQxKHRhZyk6IGYud3JpdGUoIlBBUlQxX1dSQVAoIikKKyAgICBpZiBuZWVkX3Nsb3Qo dGFnKTogZi53cml0ZSgiU0xPVF9XUkFQKCIpCisgICAgZi53cml0ZSgiZ2VuX2hlbHBlcl8lcygi ICUgKHRhZykpCisgICAgaT0wCisgICAgIyMgSWYgdGhlcmUgaXMgYSBzY2FsYXIgcmVzdWx0LCBp dCBpcyB0aGUgcmV0dXJuIHR5cGUKKyAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3Mg aW4gcmVnczoKKyAgICAgICAgaWYgKGlzX3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIGdl bl9oZWxwZXJfY2FsbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVtcmVncywg aSkKKyAgICAgICAgICAgIGkgKz0gMQorICAgIGlmIChpID4gMCk6IGYud3JpdGUoIiwgIikKKyAg ICBmLndyaXRlKCJjcHVfZW52IikKKyAgICBpPTEKKyAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3Nz LG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgaWYgKGlzX3JlYWQocmVnaWQpKToKKyAgICAgICAg ICAgIGdlbl9oZWxwZXJfY2FsbF9vcG4oZiwgdGFnLCByZWd0eXBlLCByZWdpZCwgdG9zcywgbnVt cmVncywgaSkKKyAgICAgICAgICAgIGkgKz0gMQorICAgIGZvciBpbW1sZXR0LGJpdHMsaW1tc2hp ZnQgaW4gaW1tczoKKyAgICAgICAgZ2VuX2hlbHBlcl9jYWxsX2ltbShmLGltbWxldHQpCisKKyAg ICBpZiBuZWVkX3Nsb3QodGFnKTogZi53cml0ZSgiLCBzbG90IikKKyAgICBpZiBuZWVkX3BhcnQx KHRhZyk6IGYud3JpdGUoIiwgcGFydDEiICkKKyAgICBmLndyaXRlKCIpIikKKyAgICBpZiBuZWVk X3Nsb3QodGFnKTogZi53cml0ZSgiKSIpCisgICAgaWYgbmVlZF9wYXJ0MSh0YWcpOiBmLndyaXRl KCIpIikKKyAgICBmLndyaXRlKCI7XG4iKQorICAgIGZvciBpbW1sZXR0LGJpdHMsaW1tc2hpZnQg aW4gaW1tczoKKyAgICAgICAgZ2VuX2hlbHBlcl9mcmVlX2ltbShmLGltbWxldHQpCisgICAgZi53 cml0ZSgifSB3aGlsZSAoMCkiKQorICAgIGYud3JpdGUoIixcbiVzKTtcbiIgJSBzZW1kaWN0W3Rh Z10gKQorCisgICAgIyMgV3JpdGUgYWxsIHRoZSBvdXRwdXRzCisgICAgZm9yIHJlZ3R5cGUscmVn aWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgIGlmIChpc193cml0dGVuKHJlZ2lkKSk6 CisgICAgICAgICAgICBnZW5wdHJfZHN0X3dyaXRlX29wbihmLHJlZ3R5cGUsIHJlZ2lkLCB0YWcp CisKKyAgICBpZiAnQV9GUE9QJyBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAgICAgIGYud3JpdGUo J2ZGUE9QX0VORCgpO1xuJyk7CisKKworICAgICMjIEZyZWUgYWxsIHRoZSBvcGVyYW5kcyAocmVn cyBhbmQgaW1tZWRpYXRlcykKKyAgICBpZiBuZWVkX2VhKHRhZyk6IGdlbl9mcmVlX2VhX3RjZyhm KQorICAgIGZvciByZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncyBpbiByZWdzOgorICAgICAgICBn ZW5wdHJfZnJlZV9vcG4oZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgIGkgKz0gMQorICAgIGZv ciBpbW1sZXR0LGJpdHMsaW1tc2hpZnQgaW4gaW1tczoKKyAgICAgICAgZ2VucHRyX2ZyZWVfaW1t KGYsaW1tbGV0dCkKKworICAgIGYud3JpdGUoIi8qICVzICovXG4iICUgdGFnKQorICAgIGYud3Jp dGUoIn0iKQorCisjIworIyMgSGVscGVycyBmb3IgZ2VuX2hlbHBlcl9kZWZpbml0aW9uCisjIwor ZGVmIGdlbl9kZWNsX2VhKGYpOgorICAgIGYud3JpdGUoInNpemU0dV90IEVBO1xuIikKKworZGVm IGdlbl9oZWxwZXJfcmV0dXJuX3R5cGUoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBpZiBy ZWdubyA+IDEgOiBmLndyaXRlKCIsICIpCisgICAgZi53cml0ZSgiaW50MzJfdCIpCisKK2RlZiBn ZW5faGVscGVyX3JldHVybl90eXBlX3BhaXIoZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBp ZiByZWdubyA+IDEgOiBmLndyaXRlKCIsICIpCisgICAgZi53cml0ZSgiaW50NjRfdCIpCisKK2Rl ZiBnZW5faGVscGVyX2FyZyhmLHJlZ3R5cGUscmVnaWQscmVnbm8pOgorICAgIGlmIHJlZ25vID4g MCA6IGYud3JpdGUoIiwgIiApCisgICAgZi53cml0ZSgiaW50MzJfdCAlcyVzViIgJSAocmVndHlw ZSxyZWdpZCkpCisKK2RlZiBnZW5faGVscGVyX2FyZ19uZXcoZixyZWd0eXBlLHJlZ2lkLHJlZ25v KToKKyAgICBpZiByZWdubyA+PSAwIDogZi53cml0ZSgiLCAiICkKKyAgICBmLndyaXRlKCJpbnQz Ml90ICVzJXNOIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVmIGdlbl9oZWxwZXJfYXJnX3BhaXIo ZixyZWd0eXBlLHJlZ2lkLHJlZ25vKToKKyAgICBpZiByZWdubyA+PSAwIDogZi53cml0ZSgiLCAi KQorICAgIGYud3JpdGUoImludDY0X3QgJXMlc1YiICUgKHJlZ3R5cGUscmVnaWQpKQorCitkZWYg Z2VuX2hlbHBlcl9hcmdfb3BuKGYscmVndHlwZSxyZWdpZCxpKToKKyAgICBpZiAoaXNfcGFpcihy ZWdpZCkpOgorICAgICAgICBnZW5faGVscGVyX2FyZ19wYWlyKGYscmVndHlwZSxyZWdpZCxpKQor ICAgIGVsaWYgKGlzX3NpbmdsZShyZWdpZCkpOgorICAgICAgICBpZiBpc19vbGRfdmFsKHJlZ3R5 cGUsIHJlZ2lkLCB0YWcpOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmcoZixyZWd0eXBlLHJl Z2lkLGkpCisgICAgICAgIGVsaWYgaXNfbmV3X3ZhbChyZWd0eXBlLCByZWdpZCwgdGFnKToKKyAg ICAgICAgICAgIGdlbl9oZWxwZXJfYXJnX25ldyhmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAg ZWxzZToKKyAgICAgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxy ZWdpZCx0b3NzLG51bXJlZ3MpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJhZCByZWdpc3Rl ciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKworZGVmIGdlbl9oZWxwZXJf YXJnX2ltbShmLGltbWxldHQpOgorICAgIGYud3JpdGUoIiwgaW50MzJfdCAlcyIgJSAoaW1tX25h bWUoaW1tbGV0dCkpKQorCitkZWYgZ2VuX2hlbHBlcl9kZXN0X2RlY2woZixyZWd0eXBlLHJlZ2lk LHJlZ25vLHN1YmZpZWxkPSIiKToKKyAgICBmLndyaXRlKCJpbnQzMl90ICVzJXNWJXMgPSAwO1xu IiAlIFwKKyAgICAgICAgKHJlZ3R5cGUscmVnaWQsc3ViZmllbGQpKQorCitkZWYgZ2VuX2hlbHBl cl9kZXN0X2RlY2xfcGFpcihmLHJlZ3R5cGUscmVnaWQscmVnbm8sc3ViZmllbGQ9IiIpOgorICAg IGYud3JpdGUoImludDY0X3QgJXMlc1YlcyA9IDA7XG4iICUgXAorICAgICAgICAocmVndHlwZSxy ZWdpZCxzdWJmaWVsZCkpCisKK2RlZiBnZW5faGVscGVyX2Rlc3RfZGVjbF9vcG4oZixyZWd0eXBl LHJlZ2lkLGkpOgorICAgIGlmIChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJf ZGVzdF9kZWNsX3BhaXIoZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgZWxpZiAoaXNfc2luZ2xlKHJl Z2lkKSk6CisgICAgICAgIGdlbl9oZWxwZXJfZGVzdF9kZWNsKGYscmVndHlwZSxyZWdpZCxpKQor ICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCYWQgcmVnaXN0ZXIgcGFyc2U6ICIscmVndHlwZSxy ZWdpZCx0b3NzLG51bXJlZ3MpCisKK2RlZiBnZW5faGVscGVyX3JldHVybihmLHJlZ3R5cGUscmVn aWQscmVnbm8pOgorICAgIGYud3JpdGUoInJldHVybiAlcyVzVjtcbiIgJSAocmVndHlwZSxyZWdp ZCkpCisKK2RlZiBnZW5faGVscGVyX3JldHVybl9wYWlyKGYscmVndHlwZSxyZWdpZCxyZWdubyk6 CisgICAgZi53cml0ZSgicmV0dXJuICVzJXNWO1xuIiAlIChyZWd0eXBlLHJlZ2lkKSkKKworZGVm IGdlbl9oZWxwZXJfcmV0dXJuX29wbihmLCByZWd0eXBlLCByZWdpZCwgaSk6CisgICAgaWYgKGlz X3BhaXIocmVnaWQpKToKKyAgICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fcGFpcihmLHJlZ3R5cGUs cmVnaWQsaSkKKyAgICBlbGlmIChpc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgZ2VuX2hlbHBl cl9yZXR1cm4oZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkJh ZCByZWdpc3RlciBwYXJzZTogIixyZWd0eXBlLHJlZ2lkLHRvc3MsbnVtcmVncykKKworIyMKKyMj IEdlbmVyYXRlIHRoZSBUQ0cgY29kZSB0byBjYWxsIHRoZSBoZWxwZXIKKyMjICAgICBGb3IgQTJf YWRkOiBSZDMyPWFkZChSczMyLFJ0MzIpLCB7IFJkVj1Sc1YrUnRWO30KKyMjICAgICBXZSBwcm9k dWNlOgorIyMgICAgICAgI2lmbmRlZiBmV1JBUF9BMl9hZGQKKyMjICAgICAgIGludDMyX3QgSEVM UEVSKEEyX2FkZCkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDMyX3QgUnNWLCBpbnQzMl90IFJ0 VikKKyMjICAgICAgIHsKKyMjICAgICAgIHVpbnQzMl90IHNsb3QgPSA0OyBzbG90ID0gc2xvdDsK KyMjICAgICAgIGludDMyX3QgUmRWID0gMDsKKyMjICAgICAgIHsgUmRWPVJzVitSdFY7fQorIyMg ICAgICAgQ09VTlRfSEVMUEVSKEEyX2FkZCk7CisjIyAgICAgICByZXR1cm4gUmRWOworIyMgICAg ICAgfQorIyMgICAgICAgI2VuZGlmCisjIworZGVmIGdlbl9oZWxwZXJfZGVmaW5pdGlvbihmLCB0 YWcsIHJlZ3MsIGltbXMpOgorICAgIGYud3JpdGUoJyNpZm5kZWYgZldSQVBfJXNcbicgJSB0YWcp CisgICAgbnVtcmVzdWx0cyA9IDAKKyAgICBudW1zY2FsYXJyZXN1bHRzID0gMAorICAgIG51bXNj YWxhcnJlYWR3cml0ZSA9IDAKKyAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4g cmVnczoKKyAgICAgICAgaWYgKGlzX3dyaXR0ZW4ocmVnaWQpKToKKyAgICAgICAgICAgIG51bXJl c3VsdHMgKz0gMQorICAgICAgICAgICAgaWYgKGlzX3NjYWxhcl9yZWcocmVndHlwZSkpOgorICAg ICAgICAgICAgICAgIG51bXNjYWxhcnJlc3VsdHMgKz0gMQorICAgICAgICBpZiAoaXNfcmVhZHdy aXRlKHJlZ2lkKSk6CisgICAgICAgICAgICBpZiAoaXNfc2NhbGFyX3JlZyhyZWd0eXBlKSk6Cisg ICAgICAgICAgICAgICAgbnVtc2NhbGFycmVhZHdyaXRlICs9IDEKKworICAgIGlmIChudW1zY2Fs YXJyZXN1bHRzID4gMSk6CisgICAgICAgICMjIFRoZSBoZWxwZXIgaXMgYm9ndXMgd2hlbiB0aGVy ZSBpcyBtb3JlIHRoYW4gb25lIHJlc3VsdAorICAgICAgICBmLndyaXRlKCJ2b2lkIEhFTFBFUigl cykoQ1BVSGV4YWdvblN0YXRlICplbnYpIHsgQk9HVVNfSEVMUEVSKCVzKTsgfVxuIgorICAgICAg ICAgICAgICAgICUgKHRhZywgdGFnKSkKKyAgICBlbHNlOgorICAgICAgICAjIyBUaGUgcmV0dXJu IHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGlzIHRoZSB0eXBlIG9mIHRoZSBkZXN0aW5hdGlvbgorICAg ICAgICAjIyByZWdpc3RlcgorICAgICAgICBpPTAKKyAgICAgICAgZm9yIHJlZ3R5cGUscmVnaWQs dG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgICAgICBpZiAoaXNfd3JpdHRlbihyZWdpZCkp OgorICAgICAgICAgICAgICAgIGlmIChpc19wYWlyKHJlZ2lkKSk6CisgICAgICAgICAgICAgICAg ICAgIGdlbl9oZWxwZXJfcmV0dXJuX3R5cGVfcGFpcihmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAg ICAgICAgICAgICBlbGlmIChpc19zaW5nbGUocmVnaWQpKToKKyAgICAgICAgICAgICAgICAgICAg Z2VuX2hlbHBlcl9yZXR1cm5fdHlwZShmLHJlZ3R5cGUscmVnaWQsaSkKKyAgICAgICAgICAgICAg ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiQmFkIHJlZ2lzdGVyIHBhcnNlOiAi LHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzKQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAg ICAgaWYgKG51bXNjYWxhcnJlc3VsdHMgPT0gMCk6CisgICAgICAgICAgICBmLndyaXRlKCJ2b2lk IikKKyAgICAgICAgZi53cml0ZSgiIEhFTFBFUiglcykoQ1BVSGV4YWdvblN0YXRlICplbnYiICUg dGFnKQorCisgICAgICAgIGkgPSAxCisgICAgICAgICMjIEFyZ3VtZW50cyB0byB0aGUgaGVscGVy IGZ1bmN0aW9uIGFyZSB0aGUgc291cmNlIHJlZ3MgYW5kIGltbWVkaWF0ZXMKKyAgICAgICAgZm9y IHJlZ3R5cGUscmVnaWQsdG9zcyxudW1yZWdzIGluIHJlZ3M6CisgICAgICAgICAgICBpZiAoaXNf cmVhZChyZWdpZCkpOgorICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfYXJnX29wbihmLHJlZ3R5 cGUscmVnaWQsaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZm9yIGltbWxldHQs Yml0cyxpbW1zaGlmdCBpbiBpbW1zOgorICAgICAgICAgICAgZ2VuX2hlbHBlcl9hcmdfaW1tKGYs aW1tbGV0dCkKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBpZiBuZWVkX3Nsb3QodGFnKToK KyAgICAgICAgICAgIGlmIGkgPiAwOiBmLndyaXRlKCIsICIpCisgICAgICAgICAgICBmLndyaXRl KCJ1aW50MzJfdCBzbG90IikKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBpZiBuZWVkX3Bh cnQxKHRhZyk6CisgICAgICAgICAgICBpZiBpID4gMDogZi53cml0ZSgiLCAiKQorICAgICAgICAg ICAgZi53cml0ZSgidWludDMyX3QgcGFydDEiKQorICAgICAgICBmLndyaXRlKCIpXG57XG4iKQor ICAgICAgICBpZiAobm90IG5lZWRfc2xvdCh0YWcpKTogZi53cml0ZSgidWludDMyX3Qgc2xvdCA9 IDQ7IHNsb3QgPSBzbG90O1xuIiApCisgICAgICAgIGlmIG5lZWRfZWEodGFnKTogZ2VuX2RlY2xf ZWEoZikKKyAgICAgICAgIyMgRGVjbGFyZSB0aGUgcmV0dXJuIHZhcmlhYmxlCisgICAgICAgIGk9 MAorICAgICAgICBmb3IgcmVndHlwZSxyZWdpZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAg ICAgICAgIGlmIChpc193cml0ZW9ubHkocmVnaWQpKToKKyAgICAgICAgICAgICAgICBnZW5faGVs cGVyX2Rlc3RfZGVjbF9vcG4oZixyZWd0eXBlLHJlZ2lkLGkpCisgICAgICAgICAgICBpICs9IDEK KworICAgICAgICBpZiAnQV9GUE9QJyBpbiBhdHRyaWJkaWN0W3RhZ106CisgICAgICAgICAgICBm LndyaXRlKCdmRlBPUF9TVEFSVCgpO1xuJyk7CisKKyAgICAgICAgZi53cml0ZShzZW1kaWN0W3Rh Z10pCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgiQ09VTlRfSEVMUEVS KCVzKTtcbiIgJSB0YWcgKQorCisgICAgICAgIGlmICdBX0ZQT1AnIGluIGF0dHJpYmRpY3RbdGFn XToKKyAgICAgICAgICAgIGYud3JpdGUoJ2ZGUE9QX0VORCgpO1xuJyk7CisKKyAgICAgICAgIyMg U2F2ZS9yZXR1cm4gdGhlIHJldHVybiB2YXJpYWJsZQorICAgICAgICBmb3IgcmVndHlwZSxyZWdp ZCx0b3NzLG51bXJlZ3MgaW4gcmVnczoKKyAgICAgICAgICAgIGlmIChpc193cml0dGVuKHJlZ2lk KSk6CisgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9yZXR1cm5fb3BuKGYsIHJlZ3R5cGUsIHJl Z2lkLCBpKQorICAgICAgICBmLndyaXRlKCJ9XG4iKQorICAgICAgICAjIyBFbmQgb2YgdGhlIGhl bHBlciBkZWZpbml0aW9uCisgICAgZi53cml0ZSgnI2VuZGlmXG4nKQorCisjIworIyMgQnJpbmcg aXQgYWxsIHRvZ2V0aGVyIGluIHRoZSBERUZfUUVNVSBtYWNybworIyMKK2RlZiBnZW5fcWVtdShm LCB0YWcpOgorICAgIHJlZ3MgPSB0YWdyZWdzW3RhZ10KKyAgICBpbW1zID0gdGFnaW1tc1t0YWdd CisKKyAgICBmLndyaXRlKCdERUZfUUVNVSglcywlcyxcbicgJSAodGFnLHNlbWRpY3RbdGFnXSkp CisgICAgZ2VuX2hlbHBlcl9wcm90b3R5cGUoZiwgdGFnLCByZWdzLCBpbW1zKQorICAgIGYud3Jp dGUoIixcbiIgKQorICAgIGdlbl90Y2dfZnVuYyhmLCB0YWcsIHJlZ3MsIGltbXMpCisgICAgZi53 cml0ZSgiLFxuIiApCisgICAgZ2VuX2hlbHBlcl9kZWZpbml0aW9uKGYsIHRhZywgcmVncywgaW1t cykKKyAgICBmLndyaXRlKCIpXG4iKQorCisjIworIyMgR2VuZXJhdGUgdGhlIHFlbXVfZGVmX2dl bmVyYXRlZC5oIGZpbGUKKyMjCitmID0gU3RyaW5nSU8oKQorCitmLndyaXRlKCIjaWZuZGVmIERF Rl9RRU1VXG4iKQorZi53cml0ZSgiI2RlZmluZSBERUZfUUVNVShUQUcsU0hPUlRDT0RFLEhFTFBF UixHRU5GTixIRUxQRk4pICAgLyogTm90aGluZyAqL1xuIikKK2Yud3JpdGUoIiNlbmRpZlxuXG4i KQorCisKK2ZvciB0YWcgaW4gdGFnczoKKyAgICAjIyBTa2lwIGFzc2VtYmxlciBtYXBwZWQgaW5z dHJ1Y3Rpb25zCisgICAgaWYgIkFfTUFQUElORyIgaW4gYXR0cmliZGljdFt0YWddOgorICAgICAg ICBjb250aW51ZQorICAgICMjIFNraXAgdGhlIGZha2UgaW5zdHJ1Y3Rpb25zCisgICAgaWYgKCAi QV9GQUtFSU5TTiIgaW4gYXR0cmliZGljdFt0YWddICkgOgorICAgICAgICBjb250aW51ZQorICAg ICMjIFNraXAgdGhlIHByaXYgaW5zdHJ1Y3Rpb25zCisgICAgaWYgKCAiQV9QUklWIiBpbiBhdHRy aWJkaWN0W3RhZ10gKSA6CisgICAgICAgIGNvbnRpbnVlCisgICAgIyMgU2tpcCB0aGUgZ3Vlc3Qg aW5zdHJ1Y3Rpb25zCisgICAgaWYgKCAiQV9HVUVTVCIgaW4gYXR0cmliZGljdFt0YWddICkgOgor ICAgICAgICBjb250aW51ZQorICAgICMjIFNraXAgdGhlIGRpYWcgaW5zdHJ1Y3Rpb25zCisgICAg aWYgKCB0YWcgPT0gIlk2X2RpYWciICkgOgorICAgICAgICBjb250aW51ZQorICAgIGlmICggdGFn ID09ICJZNl9kaWFnMCIgKSA6CisgICAgICAgIGNvbnRpbnVlCisgICAgaWYgKCB0YWcgPT0gIlk2 X2RpYWcxIiApIDoKKyAgICAgICAgY29udGludWUKKworICAgIGdlbl9xZW11KGYsIHRhZykKKwor cmVhbGYgPSBvcGVuKCdxZW11X2RlZl9nZW5lcmF0ZWQuaCcsJ3cnKQorcmVhbGYud3JpdGUoZi5n ZXR2YWx1ZSgpKQorcmVhbGYuY2xvc2UoKQorZi5jbG9zZSgpCisKLS0gCjIuNy40Cgo=