Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sZXEh-001eNr-1Z for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Aug 2024 14:56:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sZXEf-00AuWf-If for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Aug 2024 14:56:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sZXEf-00AuVE-3H for pgsql-hackers@lists.postgresql.org; Thu, 01 Aug 2024 14:56:57 +0000 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sZXEc-002ck4-Dw for pgsql-hackers@lists.postgresql.org; Thu, 01 Aug 2024 14:56:56 +0000 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-52efc60a6e6so11001319e87.1 for ; Thu, 01 Aug 2024 07:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1722524213; x=1723129013; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Ohy7ZQbYuFXQtRvfJBBeOOxCsrEM9WMSf1LfkdXsq5w=; b=gmfrRj/vRz1GAPhmMMcEpFnh0jwbyBjvhvljfAma+czqgUKajRTWZIkP/EGEE85uss YmEpummRlqeLhs8bbGJEiPNnF5BRbCE4GSL8XVkONJzLufmPtztKKZ9EiSS/iEpV64gO 64j7HdKKhSihoiajuE9DtGJhReVtyxn+/EE9IP8yL7/SJVWzA81s8fs4PqpHagVFvbKy 9N+Q3QnUnd2JpPGqzmQfZfnyqPDOl4vqa4J+EAHf8T7H29Y08SUogFqGJuVGPPXVMF/8 mcampIZxiHp9PnCafRSOIEZBwf2vGalt3r2BTUb84IdmdvPnr8vHMfmfRy6bEcQ30o5z vpLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722524213; x=1723129013; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Ohy7ZQbYuFXQtRvfJBBeOOxCsrEM9WMSf1LfkdXsq5w=; b=oZtXFUrOtHffxD0rSPQKY5EWvOJpv+d5T+VfERMG0BURXqaYvgNoKdkR2DC3sofs5s GifwWCTw90yNzw99DPd7Wucv/HdyKrGX+Fz2tLCwAA8ue6QdARQVSCy6z4/mf9JtKGIy nsLQQl8kvdCSnuD/tto8agMq3zxRvH9B1WCVV1wnxf6q/PNiLCd+qTb02m73T6Q37s7E rP0C6h1D6hDXDpEuiRKl/8JcPogOlTSvH2a/183uAIPXsELacm6+PgrUOqqRyRmtd4Bk PPNOR97M5nG7+P2fRHyWC49jqJmtkLi0S5q2bizHdWDHeubWkAJEgFoUttJwbIb+5Cb2 TlkA== X-Gm-Message-State: AOJu0YwLGtb4B31UxWjjIyC1iQK+sh3NomEZlX2PR8dhQOgwv5zUkOIj hYWMDS5dYklqRRoC686E/U5ldumaliZn3fhC8O4edPA/t/XNDal7HQWlxEzlBG5vxuZH3I1Xy1n R1V4jSUJg/KawmryYsK32J6BRUZ36WiSPaFMM9ajS X-Google-Smtp-Source: AGHT+IFUlbiPYGwzBFdjCHX5cs9vhb3Gco+z0/pP2mkAO1rfoFlpTg3U4hExIk4Cq5mitVnlqAtbV42EFQ7/rTlixSY= X-Received: by 2002:a05:6512:2805:b0:52e:9d28:c28a with SMTP id 2adb3069b0e04-530bb3795c5mr111855e87.26.1722524212510; Thu, 01 Aug 2024 07:56:52 -0700 (PDT) MIME-Version: 1.0 From: Junwang Zhao Date: Thu, 1 Aug 2024 22:56:40 +0800 Message-ID: Subject: Official devcontainer config To: PostgreSQL Hackers Cc: Andrey Borodin , Jelte Fennema-Nio Content-Type: multipart/mixed; boundary="000000000000cdf093061ea06b2f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cdf093061ea06b2f Content-Type: text/plain; charset="UTF-8" Stack Overflow 2024 developer survey[1] said VSCode is the most used development environment. In a PostgreSQL Hacker Mentoring discussion, we talked about how to use vscode to debug and running postgres, Andrey(ccd) has tons of tips for new developers, and I post my daily used devcontainer config[2] , Jelte(ccd) suggested that it might be a good idea we integrate the config into postgres repo so that the barrier to entry for new developers will be much lower. **Note** This is not intended to change the workflow of experienced hackers, it is just hoping to make the life easier for beginner developers. **How to use** Open VSCode Command Palette(cmd/ctrl + shift + p), search devcontainer, then choose something like `Dev containers: Rebuild and Reopen in Container`, you are good to go. **About the patch** devcontainer.json: The .devcontainer/devcontainer.json is the entry point for VSCode to *open folder to develop in a container*, it will build the docker image for the first time you open in container, this will take some time. There are some parameters(runArgs) for running the container, we need some settings and privileges to run perf or generate core dumps. It has a mount point mapping the hosts $HOME/freedom to container's /opt/freedom, I chose the name *freedom* because the container is kind of a jail. It also installed some vscode extensions and did some customizations. After diving into the container, the postCreateCommand.sh will be automatically called, it will do some configurations like git, perf, .vscode, core_pattern, etc. It also downloads michaelpq's pg_plugins and FlameGraph. Dockerfile: It is based on debian bookworm, it installed dependencies to build postgres, also IPC::Run to run TAP tests I guess. It also has a .gdbinit to break elog.c:errfinish for elevel 21, this will make the debugging easier why error is logged. gdbpg.py is adapted from https://github.com/tvondra/gdbpg, I think putting it here will make it evolve as time goes. tasks.json: This is kind of like a bookkeeping for developers, it has the following commands: - meson debug setup - meson release setup - ninja build - regression tests - ninja install - init cluster - start cluster - stop cluster - install pg_bsd_indent - pgindent - apply patch - generate flamegraph launch.json: It has one configuration that makes it possible to attach to one process(e.g. postgres backend) and debug with vscode. PFA and please give it a try if you are a VSCode user. [1]: https://survey.stackoverflow.co/2024/technology#1-integrated-development-environment [2]: https://github.com/atomicdb/devcontainer/tree/main/postgres -- Regards Junwang Zhao --000000000000cdf093061ea06b2f Content-Type: application/octet-stream; name="v1-0001-official-devcontainer-config.patch" Content-Disposition: attachment; filename="v1-0001-official-devcontainer-config.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lzbe9tuz0 RnJvbSBjZjdjYzA2NmVkODZmMzZmNDZiMjcyNmU5N2M2Yzc0NWVlZDIxYTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGFvIEp1bndhbmcgPHpoandwa3VAZ21haWwuY29tPgpEYXRl OiBUaHUsIDEgQXVnIDIwMjQgMTM6NDk6NTMgKzAwMDAKU3ViamVjdDogW1BBVENIIHYxXSBvZmZp Y2lhbCBkZXZjb250YWluZXIgY29uZmlnCgpTaWduZWQtb2ZmLWJ5OiBaaGFvIEp1bndhbmcgPHpo andwa3VAZ21haWwuY29tPgotLS0KIC5kZXZjb250YWluZXIvLmdkYmluaXQgICAgICAgICAgICAg fCAgMzIgKysrCiAuZGV2Y29udGFpbmVyLy5wc3FscmMgICAgICAgICAgICAgIHwgICA3ICsKIC5k ZXZjb250YWluZXIvRG9ja2VyZmlsZSAgICAgICAgICAgfCAgOTUgKysrKysrKwogLmRldmNvbnRh aW5lci9kZXZjb250YWluZXIuanNvbiAgICB8ICA0NiArKysrCiAuZGV2Y29udGFpbmVyL2dkYnBn LnB5ICAgICAgICAgICAgIHwgMzg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAuZGV2 Y29udGFpbmVyL2xhdW5jaC5qc29uICAgICAgICAgIHwgIDIwICsrCiAuZGV2Y29udGFpbmVyL3Bv c3RDcmVhdGVDb21tYW5kLnNoIHwgIDg2ICsrKysrKysKIC5kZXZjb250YWluZXIvdGFza3MuanNv biAgICAgICAgICAgfCAyMTkgKysrKysrKysrKysrKysrKwogLmdpdGlnbm9yZSAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMyArCiA5IGZpbGVzIGNoYW5nZWQsIDg5NCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgLmRldmNvbnRhaW5lci8uZ2RiaW5pdAogY3JlYXRlIG1vZGUg MTAwNjQ0IC5kZXZjb250YWluZXIvLnBzcWxyYwogY3JlYXRlIG1vZGUgMTAwNjQ0IC5kZXZjb250 YWluZXIvRG9ja2VyZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IC5kZXZjb250YWluZXIvZGV2Y29u dGFpbmVyLmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZGV2Y29udGFpbmVyL2dkYnBnLnB5CiBj cmVhdGUgbW9kZSAxMDA2NDQgLmRldmNvbnRhaW5lci9sYXVuY2guanNvbgogY3JlYXRlIG1vZGUg MTAwNjQ0IC5kZXZjb250YWluZXIvcG9zdENyZWF0ZUNvbW1hbmQuc2gKIGNyZWF0ZSBtb2RlIDEw MDY0NCAuZGV2Y29udGFpbmVyL3Rhc2tzLmpzb24KCmRpZmYgLS1naXQgYS8uZGV2Y29udGFpbmVy Ly5nZGJpbml0IGIvLmRldmNvbnRhaW5lci8uZ2RiaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi4wMGFjMjExOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvLmRldmNvbnRh aW5lci8uZ2RiaW5pdApAQCAtMCwwICsxLDMyIEBACisjIGdkYnBnLnB5IGNvbnRhaW5zIHNjcmlw dHMgdG8gbmljZWx5IHByaW50IHRoZSBwb3N0Z3JlcyBkYXRhc3RydWN0dXJlcworIyB3aGlsZSBp biBhIGdkYiBzZXNzaW9uLiBTaW5jZSB0aGUgdnNjb2RlIGRlYnVnZ2VyIGlzIGJhc2VkIG9uIGdk YiB0aGlzCisjIGFjdHVhbGx5IGFsc28gd29ya3Mgd2hlbiBkZWJ1Z2dpbmcgd2l0aCB2c2NvZGUu Citzb3VyY2UgL3Jvb3QvZ2RicGcucHkKKworIyB3aGVuIGRlYnVnZ2luZyBwb3N0Z3JlcyBpdCBp cyBjb252ZW5pZW50IHRvIF9hbHdheXNfIGhhdmUgYSBicmVha3BvaW50CisjIHRyaWdnZXIgd2hl biBhbiBlcnJvciBpcyBsb2dnZWQuIEJlY2F1c2UgLmdkYmluaXQgaXMgc291cmNlZCBiZWZvcmUg Z2RiCisjIGlzIGZ1bGx5IGF0dGFjaGVkIGFuZCBoYXMgdGhlIHNvdXJjZXMgbG9hZGVkLiBUbyBt YWtlIHN1cmUgdGhlIGJyZWFrcG9pbnQKKyMgaXMgYWRkZWQgd2hlbiB0aGUgbGlicmFyeSBpcyBs b2FkZWQgd2UgdGVtcG9yYXJ5IHNldCB0aGUgYnJlYWtwb2ludCBwZW5kaW5nCisjIHRvIG9uLiBB ZnRlciB3ZSBoYXZlIGFkZGVkIG91dCBicmVha3BvaW50IHdlIHJldmVydCBiYWNrIHRvIHRoZSBk ZWZhdWx0CisjIGNvbmZpZ3VyYXRpb24gZm9yIGJyZWFrcG9pbnQgcGVuZGluZy4KKyMgVGhlIGJy ZWFrcG9pbnQgaXMgaGFyZCB0byByZWFkLCBidXQgYXQgZW50cnkgb2YgdGhlIGZ1bmN0aW9uIHdl IGRvbid0IGhhdmUKKyMgdGhlIGxldmVsIGxvYWRlZCBpbiBlbGV2ZWwuIEluc3RlYWQgd2UgaGFy ZGNvZGUgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZQorIyBsZXZlbCBvZiB0aGUgY3VycmVudCBlcnJv ciBpcyBzdG9yZWQuIEFsc28gZ2RiIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUKKyMgRVJST1Igc3lt Ym9sIHNvIHdlIGhhcmRjb2RlIHRoaXMgdG8gdGhlIHZhbHVlIG9mIEVSUk9SLiBJdCBpcyB2ZXJ5 IHVubGlrZWx5CisjIHRoaXMgdmFsdWUgd2lsbCBldmVyIGNoYW5nZSBpbiBwb3N0Z3JlcywgYnV0 IGlmIGl0IGRvZXMgd2UgbWlnaHQgbmVlZCB0bworIyBmaW5kIGEgd2F5IHRvIGNvbmRpdGlvbmFs bHkgbG9hZCB0aGUgY29ycmVjdCBicmVha3BvaW50Lgorc2V0IGJyZWFrcG9pbnQgcGVuZGluZyBv bgorYnJlYWsgZWxvZy5jOmVycmZpbmlzaCBpZiBlcnJvcmRhdGFbZXJyb3JkYXRhX3N0YWNrX2Rl cHRoXS5lbGV2ZWwgPT0gMjEKK3NldCBicmVha3BvaW50IHBlbmRpbmcgYXV0bworCitlY2hvIFxu CitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbgorZWNobyB3aGVuIGF0dGFjaGluZyB0 byBhIHBvc3RncmVzIGJhY2tlbmQgYSBicmVha3BvaW50IHdpbGwgYmUgc2V0IG9uIGVsb2cuYzpl cnJmaW5pc2ggXG4KK2VjaG8gaXQgd2lsbCBvbmx5IGJyZWFrIG9uIGVycm9ycyBiZWluZyByYWlz ZWQgaW4gcG9zdGdyZXMgXG4KK2VjaG8gXG4KK2VjaG8gdG8gZGlzYWJsZSB0aGlzIGJyZWFrcG9p bnQgZnJvbSB2c2NvZGUgcnVuIGAtZXhlYyBkaXNhYmxlIDFgIGluIHRoZSBkZWJ1ZyBjb25zb2xl IFxuCitlY2hvIHRoaXMgYXNzdW1lcyBpdCdzIHRoZSBmaXJzdCBicmVha3BvaW50IGxvYWRlZCBh cyBpdCBpcyBsb2FkZWQgZnJvbSAuZ2RiaW5pdCBcbgorZWNobyB0aGlzIGNhbiBiZSB2ZXJpZmll ZCB3aXRoIGAtZXhlYyBpbmZvIGJyZWFrYCwgZW5hYmxpbmcgY2FuIGJlIGRvbmUgd2l0aCBcbgor ZWNobyBgLWV4ZWMgZW5hYmxlIDFgIFxuCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c bgorZWNobyBcbgpkaWZmIC0tZ2l0IGEvLmRldmNvbnRhaW5lci8ucHNxbHJjIGIvLmRldmNvbnRh aW5lci8ucHNxbHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc2NDJh OTcxNDkKLS0tIC9kZXYvbnVsbAorKysgYi8uZGV2Y29udGFpbmVyLy5wc3FscmMKQEAgLTAsMCAr MSw3IEBACitcdGltaW5nIG9uCitccHNldCBsaW5lc3R5bGUgdW5pY29kZQorXHBzZXQgYm9yZGVy IDIKK1xzZXRlbnYgUEFHRVIgJ3BzcGcgLS1uby1tb3VzZSAtYlggLS1uby1jb21tYW5kYmFyIC0t bm8tdG9wYmFyJworXHNldCBISVNUU0laRSAxMDAwMDAKK1xzZXQgUFJPTVBUMSAnXG4lWyUwMzNb MW0lXSVNICVuQCUvOiU+LSVwJVIlWyUwMzNbMG0lXSUjICcKK1xzZXQgUFJPTVBUMiAnICAnCmRp ZmYgLS1naXQgYS8uZGV2Y29udGFpbmVyL0RvY2tlcmZpbGUgYi8uZGV2Y29udGFpbmVyL0RvY2tl cmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uM2EwOTg1NWZhZgot LS0gL2Rldi9udWxsCisrKyBiLy5kZXZjb250YWluZXIvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDk1 IEBACitGUk9NIGRlYmlhbjpib29rd29ybSBBUyBiYXNlCisKK0VOViBUWj1VVEMKK1JVTiBsbiAt c25mIC91c3Ivc2hhcmUvem9uZWluZm8vJFRaIC9ldGMvbG9jYWx0aW1lICYmIGVjaG8gJFRaID4g L2V0Yy90aW1lem9uZQorCisjIGluc3RhbGwgYnVpbGQgdG9vbHMoYWxwaGFiZXRpYyBvcmRlcikK K1JVTiBhcHQgdXBkYXRlICYmIGFwdCBpbnN0YWxsIC15IFwKKyAgICBiYXNoLWNvbXBsZXRpb24g XAorICAgIGJpc29uIFwKKyAgICBiemlwMiBcCisgICAgY2NhY2hlIFwKKyAgICBjcGFubWludXMg XAorICAgIGNyb24gXAorICAgIGN1cmwgXAorICAgIGZsZXggXAorICAgIGZzd2F0Y2ggXAorICAg IGdjYyBnKysgXAorICAgIGdkYiBcCisgICAgZ2l0IFwKKyAgICBodG9wIFwKKyAgICBpcHJvdXRl MiBcCisgICAgbGliY3VybDQtZ251dGxzLWRldiBcCisgICAgbGliZ2RhbC1kZXYgXAorICAgIGxp Ymdlb3MtZGV2IFwKKyAgICBsaWJpY3UtZGV2IFwKKyAgICBsaWJrcmI1LWRldiBcCisgICAgbGli bHo0LWRldiBcCisgICAgbGlicGFtMGctZGV2IFwKKyAgICBsaWJwZXJsLWRldiBcCisgICAgbGli cHJvai1kZXYgXAorICAgIGxpYnByb3RvYnVmLWMtZGV2IFwKKyAgICBsaWJyZWFkbGluZS1kZXYg XAorICAgIGxpYnNlbGludXgxLWRldiBcCisgICAgbGlic3NsLWRldiBcCisgICAgbGlieG1sMi1k ZXYgXAorICAgIGxpYnhzbHQtZGV2IFwKKyAgICBsaWJ6c3RkLWRldiBcCisgICAgbGludXgtcGVy ZiBcCisgICAgbG9jYWxlcyBcCisgICAgbHNiLXJlbGVhc2UgXAorICAgIGxzb2YgXAorICAgIG1h a2UgXAorICAgIG1hbiBcCisgICAgbWVzb24gXAorICAgIG5lb3ZpbSBcCisgICAgbmluamEtYnVp bGQgXAorICAgIHBlcmwgXAorICAgIHBrZy1jb25maWcgXAorICAgIHByb2NwcyBcCisgICAgcHJv dG9idWYtYy1jb21waWxlciBcCisgICAgcHNwZyBcCisgICAgcHl0aG9uMyBweXRob24zLXBpcCBc CisgICAgc3RyYWNlIFwKKyAgICBzdWRvIFwKKyAgICB0bXV4IFwKKyAgICB0cmVlIFwKKyAgICB1 bnppcCBcCisgICAgdXVpZC1kZXYgXAorICAgIHZhbGdyaW5kIFwKKyAgICB3Z2V0IFwKKyAgICB6 bGliMWctZGV2IFwKKyAmJiBhcHQgcmVtb3ZlIGxpYnBxLWRldiAteSBcCisgJiYgYXB0IGF1dG9y ZW1vdmUgLXkgXAorICYmIGFwdCBjbGVhbgorCitSVU4gc2VkIC1pICcvZW5fVVMuVVRGLTgvcy9e IyAvL2cnIC9ldGMvbG9jYWxlLmdlbiAmJiBsb2NhbGUtZ2VuCitFTlYgTEFORyBlbl9VUy5VVEYt OAorRU5WIExBTkdVQUdFIGVuX1VTOmVuCitFTlYgTENfQUxMIGVuX1VTLlVURi04CisKK1JVTiBj cGFubSBpbnN0YWxsIElQQzo6UnVuCitSVU4gY3Bhbm0gaHR0cHM6Ly9jcGFuLm1ldGFjcGFuLm9y Zy9hdXRob3JzL2lkL1MvU0gvU0hBTkNPQ0svUGVybC1UaWR5LTIwMjMwMzA5LnRhci5negorCisj IFNpbmNlIGdkYiB3aWxsIHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgcm9vdCB1c2VyIHdoZW4g ZGVidWdnaW5nLCB3ZSBuZWVkIGFkZAorIyBib3RoIC5nZGJpbml0IGFuZCBnZGJwZy5weSBzY3Jp cHQgaW50byByb290IGhvbWUKKyMgZ2RicGcucHkgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0 aHViLmNvbS90dm9uZHJhL2dkYnBnCitDT1BZIC0tY2hvd249cm9vdDpyb290IC5nZGJpbml0IC9y b290LworQ09QWSAtLWNob3duPXJvb3Q6cm9vdCBnZGJwZy5weSAvcm9vdC8KKworIyBhZGQgdGhl IHBvc3RncmVzIHVzZXIgdG8gc3Vkb2VycyBhbmQgYWxsb3cgYWxsIHN1ZG9lcnMgdG8gbG9naW4g d2l0aG91dCBhIHBhc3N3b3JkIHByb21wdAorUlVOIHVzZXJhZGQgLW1zIC9iaW4vYmFzaCBwb3N0 Z3JlcyBcCisgJiYgdXNlcm1vZCAtYUcgc3VkbyBwb3N0Z3JlcyBcCisgJiYgZWNobyAnJXN1ZG8g QUxMPShBTEwpIE5PUEFTU1dEOkFMTCcgPj4gL2V0Yy9zdWRvZXJzCisKK1dPUktESVIgL2hvbWUv cG9zdGdyZXMKK1VTRVIgcG9zdGdyZXMKKworQ09QWSAtLWNob3duPXBvc3RncmVzOnBvc3RncmVz IC5wc3FscmMgLgorCitSVU4gc3VkbyBta2RpciAtcCAvb3B0L2ZyZWVkb20gXAorICYmIHN1ZG8g Y2hvd24gLVIgcG9zdGdyZXM6cG9zdGdyZXMgL29wdC9mcmVlZG9tCisKK0VOViBQQVRIPSIvaG9t ZS9wb3N0Z3Jlcy9wZ3NxbC9iaW46JFBBVEgiCitFTlYgUEdQT1JUPTU0MzIKK0VYUE9TRSA1NDMy CmRpZmYgLS1naXQgYS8uZGV2Y29udGFpbmVyL2RldmNvbnRhaW5lci5qc29uIGIvLmRldmNvbnRh aW5lci9kZXZjb250YWluZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5mOTJkMTE2YmNmCi0tLSAvZGV2L251bGwKKysrIGIvLmRldmNvbnRhaW5lci9kZXZjb250 YWluZXIuanNvbgpAQCAtMCwwICsxLDQ2IEBACit7CisgICAgImJ1aWxkIjogeyAKKyAgICAgICAg ImRvY2tlcmZpbGUiOiAiRG9ja2VyZmlsZSIKKyAgICB9LAorICAgICJydW5BcmdzIjogWworICAg ICAgICAiLS11bGltaXQ9Y29yZT0tMSIsCisgICAgICAgICItLWNhcC1hZGQ9U1lTX0FETUlOIiwK KyAgICAgICAgIi0tY2FwLWFkZD1TWVNfUFRSQUNFIiwKKyAgICAgICAgIi0tc2VjdXJpdHktb3B0 IiwKKyAgICAgICAgInNlY2NvbXA9dW5jb25maW5lZCIsCisgICAgICAgICItLXByaXZpbGVnZWQi CisgICAgXSwKKyAgICAibW91bnRzIjogWworICAgICAgICAvLyBZb3UgaGF2ZSB0byBtYWtlIHN1 cmUgc291cmNlIGRpcmVjdG9yeSBpcyBhdmFsaWFibGUgb24geW91ciBob3N0IGZpbGUgc3lzdGVt CisgICAgICAgICJzb3VyY2U9JHtsb2NhbEVudjpIT01FfS9mcmVlZG9tLHRhcmdldD0vb3B0L2Zy ZWVkb20sdHlwZT1iaW5kLGNvbnNpc3RlbmN5PWNhY2hlZCIKKyAgICBdLAorICAgICJ3b3Jrc3Bh Y2VNb3VudCI6ICJzb3VyY2U9JHtsb2NhbFdvcmtzcGFjZUZvbGRlcn0sdGFyZ2V0PS9ob21lL3Bv c3RncmVzL3Bvc3RncmVzLHR5cGU9YmluZCxjb25zaXN0ZW5jeT1jYWNoZWQiLAorICAgICJ3b3Jr c3BhY2VGb2xkZXIiOiAiL2hvbWUvcG9zdGdyZXMvcG9zdGdyZXMiLAorICAgICJmb3J3YXJkUG9y dHMiOiBbCisgICAgICAgIDU0MzIKKyAgICBdLAorICAgICJjdXN0b21pemF0aW9ucyI6IHsKKyAg ICAgICAgInZzY29kZSI6IHsKKyAgICAgICAgICAgICJleHRlbnNpb25zIjogWworICAgICAgICAg ICAgICAgICJlYW1vZGlvLmdpdGxlbnMiLAorICAgICAgICAgICAgICAgICJnaXRodWIudnNjb2Rl LWdpdGh1Yi1hY3Rpb25zIiwKKyAgICAgICAgICAgICAgICAiR2l0SHViLmNvcGlsb3QiLAorICAg ICAgICAgICAgICAgICJtcy12c2NvZGUuY3BwdG9vbHMtZXh0ZW5zaW9uLXBhY2siLAorICAgICAg ICAgICAgICAgICJtcy12c2NvZGUuaGV4ZWRpdG9yIiwKKyAgICAgICAgICAgICAgICAibXMtdnNs aXZlc2hhcmUudnNsaXZlc2hhcmUiLAorICAgICAgICAgICAgICAgICJyaW9qNy5jb21tYW5kLXZh cmlhYmxlIiwKKyAgICAgICAgICAgICAgICAiNzR0aC5zY3JvbGxrZXkiCisgICAgICAgICAgICBd LAorICAgICAgICAgICAgInNldHRpbmdzIjogeworICAgICAgICAgICAgICAgICJmaWxlcy5leGNs dWRlIjogeworICAgICAgICAgICAgICAgICAgICAiKiovKi5vIjogdHJ1ZSwKKyAgICAgICAgICAg ICAgICAgICAgIioqLy5kZXBzLyI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg ICAgICAgICJDX0NwcC5kZWZhdWx0LmNTdGFuZGFyZCI6ICJjOTkiLAorICAgICAgICAgICAgICAg ICJDX0NwcC5kZWZhdWx0LmNwcFN0YW5kYXJkIjogImMrKzE3IiwKKyAgICAgICAgICAgICAgICAi Q19DcHAuZGVmYXVsdC5icm93c2UuZGF0YWJhc2VGaWxlbmFtZSI6ICIke3dvcmtzcGFjZUZvbGRl cn0vLnZzY29kZS8uYnJvd3NlLmNfY3BwLmRiIgorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfSwKKyAgICAicG9zdENyZWF0ZUNvbW1hbmQiOiAiYmFzaCAuLy5kZXZjb250YWluZXIvcG9z dENyZWF0ZUNvbW1hbmQuc2giCit9CmRpZmYgLS1naXQgYS8uZGV2Y29udGFpbmVyL2dkYnBnLnB5 IGIvLmRldmNvbnRhaW5lci9nZGJwZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi43NzY1NzBiMmNlCi0tLSAvZGV2L251bGwKKysrIGIvLmRldmNvbnRhaW5lci9nZGJw Zy5weQpAQCAtMCwwICsxLDM4NiBAQAoraW1wb3J0IGdkYgorCitkZWYgZm9ybWF0X3BsYW5fdHJl ZSh0cmVlLCBpbmRlbnQ9MCk6CisJJ2Zvcm1hdHMgYSBwbGFuIChzdWIpdHJlZSwgd2l0aCBjdXN0 b20gaW5kZW50YXRpb24nCisKKwkjIGlmIHRoZSBwb2ludGVyIGlzIE5VTEwsIGp1c3QgcmV0dXJu IChudWxsKSBzdHJpbmcKKwlpZiAoc3RyKHRyZWUpID09ICcweDAnKToKKwkJcmV0dXJuICctPiAo TlVMTCknCisKKwkjIGZvcm1hdCBhbGwgdGhlIGltcG9ydGFudCBmaWVsZHMgKHNpbWlsYXJseSB0 byBFWFBMQUlOKQorCXJldHZhbCA9ICcnJworLT4gJSh0eXBlKXMgKGNvc3Q9JShzdGFydHVwKS4z Zi4uLiUodG90YWwpLjNmIHJvd3M9JShyb3dzKXMgd2lkdGg9JSh3aWR0aClzKQorXHR0YXJnZXQg bGlzdDoKKyUodGFyZ2V0KXMKK1x0JShsZWZ0KXMKK1x0JShyaWdodClzJycnICUgeworCQkJJ3R5 cGUnIDogZm9ybWF0X3R5cGUodHJlZVsndHlwZSddKSwJCQkjIHR5cGUgb2YgdGhlIE5vZGUKKwkJ CSdzdGFydHVwJyA6IGZsb2F0KHRyZWVbJ3N0YXJ0dXBfY29zdCddKSwJIyBzdGFydHVwIGNvc3QK KwkJCSd0b3RhbCcgOiBmbG9hdCh0cmVlWyd0b3RhbF9jb3N0J10pLAkJIyB0b3RhbCBjb3N0CisJ CQkncm93cycgOiBzdHIodHJlZVsncGxhbl9yb3dzJ10pLAkJCSMgbnVtYmVyIG9mIHJvd3MKKwkJ CSd3aWR0aCcgOiBzdHIodHJlZVsncGxhbl93aWR0aCddKSwJCQkjIHR1cGxlIHdpZHRoIChubyBo ZWFkZXIpCisKKwkJCSMgZm9ybWF0IHRhcmdldCBsaXN0CisJCQkndGFyZ2V0JyA6IGZvcm1hdF9u b2RlX2xpc3QodHJlZVsndGFyZ2V0bGlzdCddLCAyLCBUcnVlKSwKKworCQkJIyBsZWZ0IHN1YnRy ZWUKKwkJCSdsZWZ0JyA6IGZvcm1hdF9wbGFuX3RyZWUodHJlZVsnbGVmdHRyZWUnXSwgMCksCisK KwkJCSMgcmlnaHQgc3VidHJlZQorCQkJJ3JpZ2h0JyA6IGZvcm1hdF9wbGFuX3RyZWUodHJlZVsn cmlnaHR0cmVlJ10sIDApCisJCX0KKworCXJldHVybiBhZGRfaW5kZW50KHJldHZhbCwgaW5kZW50 KzEpCisKKworZGVmIGZvcm1hdF90eXBlKHQsIGluZGVudD0wKToKKwknc3RyaXAgdGhlIGxlYWRp bmcgVF8gZnJvbSB0aGUgbm9kZSB0eXBlIHRhZycKKworCXQgPSBzdHIodCkKKworCWlmIHQuc3Rh cnRzd2l0aCgnVF8nKToKKwkJdCA9IHRbMjpdCisKKwlyZXR1cm4gYWRkX2luZGVudCh0LCBpbmRl bnQpCisKKworZGVmIGZvcm1hdF9pbnRfbGlzdChsc3QsIGluZGVudD0wKToKKwknZm9ybWF0IGxp c3QgY29udGFpbmluZyBpbnRlZ2VyIHZhbHVlcyBkaXJlY3RseSAobm90IHdhcmFwcGVkIGluIE5v ZGUpJworCisJIyBoYW5kbGUgTlVMTCBwb2ludGVyIChmb3IgTGlzdCB3ZSByZXR1cm4gTklMCisJ aWYgKHN0cihsc3QpID09ICcweDAnKToKKwkJcmV0dXJuICcoTklMKScKKworCSMgd2UnbGwgY29s bGVjdCB0aGUgZm9ybWF0dGVkIGl0ZW1zIGludG8gYSBQeXRob24gbGlzdAorCXRsaXN0ID0gW10K KwlpdGVtID0gbHN0WydoZWFkJ10KKworCSMgd2FsayB0aGUgbGlzdCB1bnRpbCB3ZSByZWFjaCB0 aGUgbGFzdCBpdGVtCisJd2hpbGUgc3RyKGl0ZW0pICE9ICcweDAnOgorCisJCSMgZ2V0IGl0ZW0g ZnJvbSB0aGUgbGlzdCBhbmQganVzdCBncmFiICdpbnRfdmFsdWUgYXMgaW50JworCQl0bGlzdC5h cHBlbmQoaW50KGl0ZW1bJ2RhdGEnXVsnaW50X3ZhbHVlJ10pKQorCisJCSMgbmV4dCBpdGVtCisJ CWl0ZW0gPSBpdGVtWyduZXh0J10KKworCXJldHVybiBhZGRfaW5kZW50KHN0cih0bGlzdCksIGlu ZGVudCkKKworCitkZWYgZm9ybWF0X29pZF9saXN0KGxzdCwgaW5kZW50PTApOgorCSdmb3JtYXQg bGlzdCBjb250YWluaW5nIE9pZCB2YWx1ZXMgZGlyZWN0bHkgKG5vdCB3YXJhcHBlZCBpbiBOb2Rl KScKKworCSMgaGFuZGxlIE5VTEwgcG9pbnRlciAoZm9yIExpc3Qgd2UgcmV0dXJuIE5JTCkKKwlp ZiAoc3RyKGxzdCkgPT0gJzB4MCcpOgorCQlyZXR1cm4gJyhOSUwpJworCisJIyB3ZSdsbCBjb2xs ZWN0IHRoZSBmb3JtYXR0ZWQgaXRlbXMgaW50byBhIFB5dGhvbiBsaXN0CisJdGxpc3QgPSBbXQor CWl0ZW0gPSBsc3RbJ2hlYWQnXQorCisJIyB3YWxrIHRoZSBsaXN0IHVudGlsIHdlIHJlYWNoIHRo ZSBsYXN0IGl0ZW0KKwl3aGlsZSBzdHIoaXRlbSkgIT0gJzB4MCc6CisKKwkJIyBnZXQgaXRlbSBm cm9tIHRoZSBsaXN0IGFuZCBqdXN0IGdyYWIgJ29pZF92YWx1ZSBhcyBpbnQnCisJCXRsaXN0LmFw cGVuZChpbnQoaXRlbVsnZGF0YSddWydvaWRfdmFsdWUnXSkpCisKKwkJIyBuZXh0IGl0ZW0KKwkJ aXRlbSA9IGl0ZW1bJ25leHQnXQorCisJcmV0dXJuIGFkZF9pbmRlbnQoc3RyKHRsaXN0KSwgaW5k ZW50KQorCisKK2RlZiBmb3JtYXRfbm9kZV9saXN0KGxzdCwgaW5kZW50PTAsIG5ld2xpbmU9RmFs c2UpOgorCSdmb3JtYXQgbGlzdCBjb250YWluaW5nIE5vZGUgdmFsdWVzJworCisJIyBoYW5kbGUg TlVMTCBwb2ludGVyIChmb3IgTGlzdCB3ZSByZXR1cm4gTklMKQorCWlmIChzdHIobHN0KSA9PSAn MHgwJyk6CisJCXJldHVybiAnKE5JTCknCisKKwkjIHdlJ2xsIGNvbGxlY3QgdGhlIGZvcm1hdHRl ZCBpdGVtcyBpbnRvIGEgUHl0aG9uIGxpc3QKKwl0bGlzdCA9IFtdCisJaXRlbSA9IGxzdFsnaGVh ZCddCisKKwkjIHdhbGsgdGhlIGxpc3QgdW50aWwgd2UgcmVhY2ggdGhlIGxhc3QgaXRlbQorCXdo aWxlIHN0cihpdGVtKSAhPSAnMHgwJzoKKworCQkjIHdlIGFzc3VtZSB0aGUgbGlzdCBjb250YWlu cyBOb2RlIGluc3RhbmNlcywgc28gZ3JhYiBhIHJlZmVyZW5jZQorCQkjIGFuZCBjYXN0IGl0IHRv IChOb2RlKikKKwkJbm9kZSA9IGNhc3QoaXRlbVsnZGF0YSddWydwdHJfdmFsdWUnXSwgJ05vZGUn KQorCisJCSMgYXBwZW5kIHRoZSBmb3JtYXR0ZWQgTm9kZSB0byB0aGUgcmVzdWx0IGxpc3QKKwkJ dGxpc3QuYXBwZW5kKGZvcm1hdF9ub2RlKG5vZGUpKQorCisJCSMgbmV4dCBpdGVtCisJCWl0ZW0g PSBpdGVtWyduZXh0J10KKworCXJldHZhbCA9IHN0cih0bGlzdCkKKwlpZiBuZXdsaW5lOgorCQly ZXR2YWwgPSAiXG4iLmpvaW4oW3N0cih0KSBmb3IgdCBpbiB0bGlzdF0pCisKKwlyZXR1cm4gYWRk X2luZGVudChyZXR2YWwsIGluZGVudCkKKworCitkZWYgZm9ybWF0X2NoYXIodmFsdWUpOgorCScn J2NvbnZlcnQgdGhlICd2YWx1ZScgaW50byBhIHNpbmdsZS1jaGFyYWN0ZXIgc3RyaW5nICh1Z2x5 LCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheScnJworCisJc3RyX3ZhbCA9IHN0cih2YWx1ZS5j YXN0KGdkYi5sb29rdXBfdHlwZSgnY2hhcicpKSkKKworCSMgcmVtb3ZlIHRoZSBxdW90ZXMgKHN0 YXJ0L2VuZCkKKwlyZXR1cm4gc3RyX3ZhbC5zcGxpdCgnICcpWzFdWzE6LTFdCisKKworZGVmIGZv cm1hdF9yZWxpZHMocmVsaWRzKToKKwlyZXR1cm4gJyhub3QgaW1wbGVtZW50ZWQpJworCisKK2Rl ZiBmb3JtYXRfbm9kZV9hcnJheShhcnJheSwgc3RhcnRfaWR4LCBsZW5ndGgsIGluZGVudD0wKToK KworCWl0ZW1zID0gW10KKwlmb3IgaSBpbiByYW5nZShzdGFydF9pZHgsc3RhcnRfaWR4ICsgbGVu Z3RoIC0gMSk6CisJCWl0ZW1zLmFwcGVuZChzdHIoaSkgKyAiID0+ICIgKyBmb3JtYXRfbm9kZShh cnJheVtpXSkpCisKKwlyZXR1cm4gYWRkX2luZGVudCgoIlxuIi5qb2luKGl0ZW1zKSksIGluZGVu dCkKKworCitkZWYgZm9ybWF0X25vZGUobm9kZSwgaW5kZW50PTApOgorCSdmb3JtYXQgYSBzaW5n bGUgTm9kZSBpbnN0YW5jZSAob25seSBzZWxlY3RlZCBOb2RlIHR5cGVzIHN1cHBvcnRlZCknCisK KwlpZiBzdHIobm9kZSkgPT0gJzB4MCc6CisJCXJldHVybiBhZGRfaW5kZW50KCcoTlVMTCknLCBp bmRlbnQpCisKKwlyZXR2YWwgPSAnJzsKKwl0eXBlX3N0ciA9IHN0cihub2RlWyd0eXBlJ10pCisK KwlpZiBpc19hKG5vZGUsICdUYXJnZXRFbnRyeScpOgorCisJCSMgd2UgYXNzdW1lIHRoZSBsaXN0 IGNvbnRhaW5zIE5vZGUgaW5zdGFuY2VzIChwcm9iYWJseSBzYWZlIGZvciBQbGFuIGZpZWxkcykK KwkJbm9kZSA9IGNhc3Qobm9kZSwgJ1RhcmdldEVudHJ5JykKKworCQluYW1lX3B0ciA9IG5vZGVb J3Jlc25hbWUnXS5jYXN0KGdkYi5sb29rdXBfdHlwZSgnY2hhcicpLnBvaW50ZXIoKSkKKwkJbmFt ZSA9ICIoTlVMTCkiCisJCWlmIHN0cihuYW1lX3B0cikgIT0gJzB4MCc6CisJCQluYW1lID0gJyIn ICsgKG5hbWVfcHRyLnN0cmluZygpKSArICciJworCisJCXJldHZhbCA9ICdUYXJnZXRFbnRyeSAo cmVzbm89JShyZXNubylzIHJlc25hbWU9JShuYW1lKXMgb3JpZ3RibD0lKHRibClzIG9yaWdjb2w9 JShjb2wpcyBqdW5rPSUoanVuaylzIGV4cHI9WyUoZXhwcilzXSknICUgeworCQkJCSdyZXNubycg OiBub2RlWydyZXNubyddLAorCQkJCSduYW1lJyA6IG5hbWUsCisJCQkJJ3RibCcgOiBub2RlWydy ZXNvcmlndGJsJ10sCisJCQkJJ2NvbCcgOiBub2RlWydyZXNvcmlnY29sJ10sCisJCQkJJ2p1bmsn IDogKGludChub2RlWydyZXNqdW5rJ10pID09IDEpLAorCQkJCSdleHByJyA6IGZvcm1hdF9ub2Rl KG5vZGVbJ2V4cHInXSkKKwkJCX0KKworCWVsaWYgaXNfYShub2RlLCAnVmFyJyk6CisKKwkJIyB3 ZSBhc3N1bWUgdGhlIGxpc3QgY29udGFpbnMgTm9kZSBpbnN0YW5jZXMgKHByb2JhYmx5IHNhZmUg Zm9yIFBsYW4gZmllbGRzKQorCQlub2RlID0gY2FzdChub2RlLCAnVmFyJykKKworCQlyZXR2YWwg PSAnVmFyICh2YXJubz0lKG5vKXMgdmFyYXR0bm89JShhdHRubylzIGxldmVsc3VwPSUobGV2ZWxz dXApcyknICUgeworCQkJCSdubycgOiBub2RlWyd2YXJubyddLAorCQkJCSdhdHRubycgOiBub2Rl Wyd2YXJhdHRubyddLAorCQkJCSdsZXZlbHN1cCcgOiBub2RlWyd2YXJsZXZlbHN1cCddCisJCQl9 CisKKwllbGlmIGlzX2Eobm9kZSwgJ1JhbmdlVGJsUmVmJyk6CisKKwkJbm9kZSA9IGNhc3Qobm9k ZSwgJ1JhbmdlVGJsUmVmJykKKworCQlyZXR2YWwgPSAnUmFuZ2VUYmxSZWYgKHJ0aW5kZXg9JWQp JyAlIChpbnQobm9kZVsncnRpbmRleCddKSwpCisKKwllbGlmIGlzX2Eobm9kZSwgJ1JlbE9wdElu Zm8nKToKKworCQlub2RlID0gY2FzdChub2RlLCAnUmVsT3B0SW5mbycpCisKKwkJcmV0dmFsID0g J1JlbE9wdEluZm8gKGtpbmQ9JShraW5kKXMgcmVsaWRzPSUocmVsaWRzKXMgcnRla2luZD0lKHJ0 ZWtpbmQpcyByZWxpZD0lKHJlbGlkKXMgcm93cz0lKHJvd3MpcyB3aWR0aD0lKHdpZHRoKXMgZms9 JShmaylzKScgJSB7CisJCQkJJ2tpbmQnIDogbm9kZVsncmVsb3B0a2luZCddLAorCQkJCSdyb3dz JyA6IG5vZGVbJ3Jvd3MnXSwKKwkJCQknd2lkdGgnIDogbm9kZVsnd2lkdGgnXSwKKwkJCQkncmVs aWQnIDogbm9kZVsncmVsaWQnXSwKKwkJCQkncmVsaWRzJyA6IGZvcm1hdF9yZWxpZHMobm9kZVsn cmVsaWRzJ10pLAorCQkJCSdydGVraW5kJyA6IG5vZGVbJ3J0ZWtpbmQnXSwKKwkJCQknZmsnIDog KGludChub2RlWydoYXNfZmtfam9pbiddKSA9PSAxKQorCQkJfQorCisJZWxpZiBpc19hKG5vZGUs ICdSYW5nZVRibEVudHJ5Jyk6CisKKwkJbm9kZSA9IGNhc3Qobm9kZSwgJ1JhbmdlVGJsRW50cnkn KQorCisJCXJldHZhbCA9ICdSYW5nZVRibEVudHJ5IChraW5kPSUocnRla2luZClzIHJlbGlkPSUo cmVsaWQpcyByZWxraW5kPSUocmVsa2luZClzKScgJSB7CisJCQkJJ3JlbGlkJyA6IG5vZGVbJ3Jl bGlkJ10sCisJCQkJJ3J0ZWtpbmQnIDogbm9kZVsncnRla2luZCddLAorCQkJCSdyZWxraW5kJyA6 IGZvcm1hdF9jaGFyKG5vZGVbJ3JlbGtpbmQnXSkKKwkJCX0KKworCWVsaWYgaXNfYShub2RlLCAn UGxhbm5lckluZm8nKToKKworCQlyZXR2YWwgPSBmb3JtYXRfcGxhbm5lcl9pbmZvKG5vZGUpCisK KwllbGlmIGlzX2Eobm9kZSwgJ1BsYW5uZWRTdG10Jyk6CisKKwkJcmV0dmFsID0gZm9ybWF0X3Bs YW5uZWRfc3RtdChub2RlKQorCisJZWxpZiBpc19hKG5vZGUsICdMaXN0Jyk6CisKKwkJcmV0dmFs ID0gZm9ybWF0X25vZGVfbGlzdChub2RlLCAwLCBUcnVlKQorCisJZWxpZiBpc19hKG5vZGUsICdQ bGFuJyk6CisKKwkJcmV0dmFsID0gZm9ybWF0X3BsYW5fdHJlZShub2RlKQorCisJZWxpZiBpc19h KG5vZGUsICdSZXN0cmljdEluZm8nKToKKworCQlub2RlID0gY2FzdChub2RlLCAnUmVzdHJpY3RJ bmZvJykKKworCQlyZXR2YWwgPSAnJydSZXN0cmljdEluZm8gKHB1c2hlZF9kb3duPSUocHVzaF9k b3duKXMgY2FuX2pvaW49JShjYW5fam9pbilzIGRlbGF5ZWQ9JShkZWxheWVkKXMpCislKGNsYXVz ZSlzCislKG9yY2xhdXNlKXMnJycgJSB7CisJCQknY2xhdXNlJyA6IGZvcm1hdF9ub2RlKG5vZGVb J2NsYXVzZSddLCAxKSwKKwkJCSdvcmNsYXVzZScgOiBmb3JtYXRfbm9kZShub2RlWydvcmNsYXVz ZSddLCAxKSwKKwkJCSdwdXNoX2Rvd24nIDogKGludChub2RlWydpc19wdXNoZWRfZG93biddKSA9 PSAxKSwKKwkJCSdjYW5fam9pbicgOiAoaW50KG5vZGVbJ2Nhbl9qb2luJ10pID09IDEpLAorCQkJ J2RlbGF5ZWQnIDogKGludChub2RlWydvdXRlcmpvaW5fZGVsYXllZCddKSA9PSAxKQorCQl9CisK KwllbGlmIGlzX2Eobm9kZSwgJ09wRXhwcicpOgorCisJCW5vZGUgPSBjYXN0KG5vZGUsICdPcEV4 cHInKQorCisJCXJldHZhbCA9IGZvcm1hdF9vcF9leHByKG5vZGUpCisKKwllbGlmIGlzX2Eobm9k ZSwgJ0Jvb2xFeHByJyk6CisKKwkJbm9kZSA9IGNhc3Qobm9kZSwgJ0Jvb2xFeHByJykKKworCQlw cmludCBub2RlCisKKwkJcmV0dmFsID0gZm9ybWF0X2Jvb2xfZXhwcihub2RlKQorCisJZWxzZToK KwkJIyBkZWZhdWx0IC0ganVzdCBwcmludCB0aGUgdHlwZSBuYW1lCisJCXJldHZhbCA9IGZvcm1h dF90eXBlKHR5cGVfc3RyKQorCisJcmV0dXJuIGFkZF9pbmRlbnQoc3RyKHJldHZhbCksIGluZGVu dCkKKworCitkZWYgZm9ybWF0X3BsYW5uZXJfaW5mbyhpbmZvLCBpbmRlbnQ9MCk6CisKKwkjIFF1 ZXJ5ICpwYXJzZTsJCQkvKiB0aGUgUXVlcnkgYmVpbmcgcGxhbm5lZCAqLworCSMgKmdsb2I7CQkJ CS8qIGdsb2JhbCBpbmZvIGZvciBjdXJyZW50IHBsYW5uZXIgcnVuICovCisJIyBJbmRleAlxdWVy eV9sZXZlbDsJLyogMSBhdCB0aGUgb3V0ZXJtb3N0IFF1ZXJ5ICovCisJIyBzdHJ1Y3QgUGxhbm5l ckluZm8gKnBhcmVudF9yb290OwkvKiBOVUxMIGF0IG91dGVybW9zdCBRdWVyeSAqLworCSMgTGlz dAkgICAqcGxhbl9wYXJhbXM7CS8qIGxpc3Qgb2YgUGxhbm5lclBhcmFtSXRlbXMsIHNlZSBiZWxv dyAqLworCisJcmV0dmFsID0gJycncmVsOgorJShyZWwpcworcnRlOgorJShydGUpcworJycnICUg eydyZWwnIDogZm9ybWF0X25vZGVfYXJyYXkoaW5mb1snc2ltcGxlX3JlbF9hcnJheSddLCAxLCBp bnQoaW5mb1snc2ltcGxlX3JlbF9hcnJheV9zaXplJ10pKSwKKwkgICAncnRlJyA6IGZvcm1hdF9u b2RlX2FycmF5KGluZm9bJ3NpbXBsZV9ydGVfYXJyYXknXSwgMSwgaW50KGluZm9bJ3NpbXBsZV9y ZWxfYXJyYXlfc2l6ZSddKSl9CisKKwlyZXR1cm4gYWRkX2luZGVudChyZXR2YWwsIGluZGVudCkK KworCitkZWYgZm9ybWF0X3BsYW5uZWRfc3RtdChwbGFuLCBpbmRlbnQ9MCk6CisKKwlyZXR2YWwg PSAnJycgICAgICAgICAgdHlwZTogJSh0eXBlKXMKKyAgICAgIHF1ZXJ5IElEOiAlKHFpZClzCisg ICAgcGFyYW0gZXhlYzogJShucGFyYW0pcworICAgICByZXR1cm5pbmc6ICUoaGFzX3JldHVybmlu ZylzCisgbW9kaWZ5aW5nIENURTogJShoYXNfbW9kaWZ5X2N0ZSlzCisgICBjYW4gc2V0IHRhZzog JShjYW5fc2V0X3RhZylzCisgICAgIHRyYW5zaWVudDogJSh0cmFuc2llbnQpcworICByb3cgc2Vj dXJpdHk6ICUocm93X3NlY3VyaXR5KXMKKyAgICAgICAgICAgICAgIAorICAgICBwbGFuIHRyZWU6 ICUodHJlZSlzCisgICByYW5nZSB0YWJsZToKKyUocnRhYmxlKXMKKyByZWxhdGlvbiBPSURzOiAl KHJlbGF0aW9uX29pZHMpcworICAgcmVzdWx0IHJlbHM6ICUocmVzdWx0X3JlbHMpcworICB1dGls aXR5IHN0bXQ6ICUodXRpbF9zdG10KXMKKyAgICAgIHN1YnBsYW5zOiAlKHN1YnBsYW5zKXMnJycg JSB7CisJCQkndHlwZScgOiBwbGFuWydjb21tYW5kVHlwZSddLAorCQkJJ3FpZCcgOiBwbGFuWydx dWVyeUlkJ10sCisJCQknbnBhcmFtJyA6IHBsYW5bJ25QYXJhbUV4ZWMnXSwKKwkJCSdoYXNfcmV0 dXJuaW5nJyA6IChpbnQocGxhblsnaGFzUmV0dXJuaW5nJ10pID09IDEpLAorCQkJJ2hhc19tb2Rp ZnlfY3RlJyA6IChpbnQocGxhblsnaGFzTW9kaWZ5aW5nQ1RFJ10pID09IDEpLAorCQkJJ2Nhbl9z ZXRfdGFnJyA6IChpbnQocGxhblsnY2FuU2V0VGFnJ10pID09IDEpLAorCQkJJ3RyYW5zaWVudCcg OiAoaW50KHBsYW5bJ3RyYW5zaWVudFBsYW4nXSkgPT0gMSksCisJCQkncm93X3NlY3VyaXR5JyA6 IChpbnQocGxhblsnaGFzUm93U2VjdXJpdHknXSkgPT0gMSksCisJCQkndHJlZScgOiBmb3JtYXRf cGxhbl90cmVlKHBsYW5bJ3BsYW5UcmVlJ10pLAorCQkJJ3J0YWJsZScgOiBmb3JtYXRfbm9kZV9s aXN0KHBsYW5bJ3J0YWJsZSddLCAxLCBUcnVlKSwKKwkJCSdyZWxhdGlvbl9vaWRzJyA6IGZvcm1h dF9vaWRfbGlzdChwbGFuWydyZWxhdGlvbk9pZHMnXSksCisJCQkncmVzdWx0X3JlbHMnIDogZm9y bWF0X2ludF9saXN0KHBsYW5bJ3Jlc3VsdFJlbGF0aW9ucyddKSwKKwkJCSd1dGlsX3N0bXQnIDog Zm9ybWF0X25vZGUocGxhblsndXRpbGl0eVN0bXQnXSksCisJCQknc3VicGxhbnMnIDogZm9ybWF0 X25vZGVfbGlzdChwbGFuWydzdWJwbGFucyddLCAxLCBUcnVlKQorCQkgIH0KKworCXJldHVybiBh ZGRfaW5kZW50KHJldHZhbCwgaW5kZW50KQorCitkZWYgZm9ybWF0X29wX2V4cHIobm9kZSwgaW5k ZW50PTApOgorCisJcmV0dXJuICIiIk9wRXhwciBbb3Bubz0lKG9wbm8pc10KKyUoY2xhdXNlcylz IiIiICUgewknb3BubycgOiBub2RlWydvcG5vJ10sCisJCQkJCSdjbGF1c2VzJyA6IGZvcm1hdF9u b2RlX2xpc3Qobm9kZVsnYXJncyddLCAxLCBUcnVlKX0KKworZGVmIGZvcm1hdF9ib29sX2V4cHIo bm9kZSwgaW5kZW50PTApOgorCisJcmV0dXJuICIiIkJvb2xFeHByIFtvcD0lKG9wKXNdCislKGNs YXVzZXMpcyIiIiAlIHsJJ29wJyA6IG5vZGVbJ2Jvb2xvcCddLAorCQkJCQknY2xhdXNlcycgOiBm b3JtYXRfbm9kZV9saXN0KG5vZGVbJ2FyZ3MnXSwgMSwgVHJ1ZSl9CisKK2RlZiBpc19hKG4sIHQp OgorCScnJ2NoZWNrcyB0aGF0IHRoZSBub2RlIGhhcyB0eXBlICd0JyAoanVzdCBsaWtlIElzQSgp IG1hY3JvKScnJworCisJaWYgbm90IGlzX25vZGUobik6CisJCXJldHVybiBGYWxzZQorCisJcmV0 dXJuIChzdHIoblsndHlwZSddKSA9PSAoJ1RfJyArIHQpKQorCisKK2RlZiBpc19ub2RlKGwpOgor CScnJ3JldHVybiBUcnVlIGlmIHRoZSB2YWx1ZSBsb29rcyBsaWtlIGEgTm9kZSAoaGFzICd0eXBl JyBmaWVsZCknJycKKworCXRyeToKKwkJeCA9IGxbJ3R5cGUnXQorCQlyZXR1cm4gVHJ1ZQorCWV4 Y2VwdDoKKwkJcmV0dXJuIEZhbHNlCisKK2RlZiBjYXN0KG5vZGUsIHR5cGVfbmFtZSk6CisJJycn d3JhcCB0aGUgZ2RiIGNhc3QgdG8gcHJvcGVyIG5vZGUgdHlwZScnJworCisJIyBsb29rdXAgdGhl IHR5cGUgd2l0aCBuYW1lICd0eXBlX25hbWUnIGFuZCBjYXN0IHRoZSBub2RlIHRvIGl0CisJdCA9 IGdkYi5sb29rdXBfdHlwZSh0eXBlX25hbWUpCisJcmV0dXJuIG5vZGUuY2FzdCh0LnBvaW50ZXIo KSkKKworCitkZWYgYWRkX2luZGVudCh2YWwsIGluZGVudCk6CisKKwlyZXR1cm4gIlxuIi5qb2lu KFsoKCJcdCIqaW5kZW50KSArIGwpIGZvciBsIGluIHZhbC5zcGxpdCgiXG4iKV0pCisKKworY2xh c3MgUGdQcmludENvbW1hbmQoZ2RiLkNvbW1hbmQpOgorCSJwcmludCBQb3N0Z3JlU1FMIHN0cnVj dHVyZXMiCisKKwlkZWYgX19pbml0X18gKHNlbGYpOgorCQlzdXBlciAoUGdQcmludENvbW1hbmQs IHNlbGYpLl9faW5pdF9fICgicGdwcmludCIsCisJCQkJCWdkYi5DT01NQU5EX1NVUFBPUlQsCisJ CQkJCWdkYi5DT01QTEVURV9OT05FLCBGYWxzZSkKKworCWRlZiBpbnZva2UgKHNlbGYsIGFyZywg ZnJvbV90dHkpOgorCisJCWFyZ19saXN0ID0gZ2RiLnN0cmluZ190b19hcmd2KGFyZykKKwkJaWYg bGVuKGFyZ19saXN0KSAhPSAxOgorCQkJcHJpbnQgInVzYWdlOiBwZ3ByaW50IHZhciIKKwkJCXJl dHVybgorCisJCWwgPSBnZGIucGFyc2VfYW5kX2V2YWwoYXJnX2xpc3RbMF0pCisKKwkJaWYgbm90 IGlzX25vZGUobCk6CisJCQlwcmludCAibm90IGEgbm9kZSB0eXBlIgorCisJCXByaW50IGZvcm1h dF9ub2RlKGwpCisKKworUGdQcmludENvbW1hbmQoKQpkaWZmIC0tZ2l0IGEvLmRldmNvbnRhaW5l ci9sYXVuY2guanNvbiBiLy5kZXZjb250YWluZXIvbGF1bmNoLmpzb24KbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTNjMGFlOThmYwotLS0gL2Rldi9udWxsCisrKyBiLy5k ZXZjb250YWluZXIvbGF1bmNoLmpzb24KQEAgLTAsMCArMSwyMCBAQAoreworICAgICJ2ZXJzaW9u IjogIjAuMi4wIiwKKyAgICAiY29uZmlndXJhdGlvbnMiOiBbCisgICAgICAgIHsKKyAgICAgICAg ICAgICJuYW1lIjogIihnZGIpIEF0dGFjaCIsCisgICAgICAgICAgICAidHlwZSI6ICJjcHBkYmci LAorICAgICAgICAgICAgInJlcXVlc3QiOiAiYXR0YWNoIiwKKyAgICAgICAgICAgICJwcm9jZXNz SWQiOiAiJHtjb21tYW5kOnBpY2tQcm9jZXNzfSIsCisgICAgICAgICAgICAicHJvZ3JhbSI6ICIv aG9tZS9wb3N0Z3Jlcy9wZ3NxbC9iaW4vcG9zdGdyZXMiLAorICAgICAgICAgICAgImFkZGl0aW9u YWxTT0xpYlNlYXJjaFBhdGgiOiAiL2hvbWUvcG9zdGdyZXMvcGdzcWwvbGliIiwKKyAgICAgICAg ICAgICJzZXR1cENvbW1hbmRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgInRleHQiOiAiaGFuZGxlIFNJR1VTUjEgbm9wcmludCBub3N0b3AgcGFzcyIsCisgICAg ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJsZXQgZ2RiIG5vdCBzdG9wIHdoZW4gU0lH VVNSMSBpcyBzZW50IHRvIHByb2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAiaWdub3JlRmFp bHVyZXMiOiB0cnVlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9 CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvLmRldmNvbnRhaW5lci9wb3N0Q3JlYXRlQ29tbWFuZC5z aCBiLy5kZXZjb250YWluZXIvcG9zdENyZWF0ZUNvbW1hbmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uZWY4NDAyN2ZjNAotLS0gL2Rldi9udWxsCisrKyBiLy5kZXZj b250YWluZXIvcG9zdENyZWF0ZUNvbW1hbmQuc2gKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL2Jh c2gKKworZnVuY3Rpb24gY29uZmlndXJlX2NvcmVkdW1wcyB7CisgIHN1ZG8gc2ggLWMgImVjaG8g J2NvcmUuJXAuc2lnJXMuJXRzJyA+IC9wcm9jL3N5cy9rZXJuZWwvY29yZV9wYXR0ZXJuIgorfQor CitmdW5jdGlvbiBjb25maWd1cmVfZ2l0IHsKKyAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVt YWlsIGVtYWlsQGV4YW1wbGUuY29tCisgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJZ b3VyIE5hbWUiCisgIGdpdCBjb25maWcgLS1nbG9iYWwgY29yZS5lZGl0b3IgdmltCisKKyAgIyBh bGlhcworICBnaXQgY29uZmlnIC0tZ2xvYmFsIGFsaWFzLmJyICJicmFuY2ggLXZ2IgorICBnaXQg Y29uZmlnIC0tZ2xvYmFsIGFsaWFzLmNpICJjb21taXQgLXMiCisgIGdpdCBjb25maWcgLS1nbG9i YWwgYWxpYXMuY28gY2hlY2tvdXQKKyAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBhbGlhcy5jb2IgImNo ZWNrb3V0IC1iIgorICBnaXQgY29uZmlnIC0tZ2xvYmFsIGFsaWFzLmNwIGNoZXJyeS1waWNrCisg IGdpdCBjb25maWcgLS1nbG9iYWwgYWxpYXMuZGggImRpZmYgLS1uby1wcmVmaXggSEVBRCIKKyAg Z2l0IGNvbmZpZyAtLWdsb2JhbCBhbGlhcy5wcyBwdXNoCisgIGdpdCBjb25maWcgLS1nbG9iYWwg YWxpYXMuc3Qgc3RhdHVzCisgIGdpdCBjb25maWcgLS1nbG9iYWwgYWxpYXMubGcgImxvZyAtLWdy YXBoIC0tZm9ybWF0PSclQyhhdXRvKSVoJUMocmVzZXQpICVDKGRpbSB3aGl0ZSklYW4lQyhyZXNl dCkgJUMoZ3JlZW4pJWFpJUMocmVzZXQpICVDKGF1dG8pJWQlQyhyZXNldCklbiAgICVzJyIKKyAg Z2l0IGNvbmZpZyAtLWdsb2JhbCBhbGlhcy5sZzEwICJsb2cgLS1ncmFwaCAtLXByZXR0eT1mb3Jt YXQ6JyVDKHllbGxvdyklaCVDKGF1dG8pJWQlQ3Jlc2V0ICVzICVDKHdoaXRlKS0gJWFuLCAlYXIl Q3Jlc2V0JyAtMTAiCisgIGdpdCBjb25maWcgLS1nbG9iYWwgYWxpYXMubGcyMCAibG9nIC0tZ3Jh cGggLS1wcmV0dHk9Zm9ybWF0OiclQyh5ZWxsb3cpJWglQyhhdXRvKSVkJUNyZXNldCAlcyAlQyh3 aGl0ZSktICVhbiwgJWFyJUNyZXNldCcgLTIwIgorICBnaXQgY29uZmlnIC0tZ2xvYmFsIGFsaWFz LmxnMzAgImxvZyAtLWdyYXBoIC0tcHJldHR5PWZvcm1hdDonJUMoeWVsbG93KSVoJUMoYXV0bykl ZCVDcmVzZXQgJXMgJUMod2hpdGUpLSAlYW4sICVhciVDcmVzZXQnIC0zMCIKKyAgZ2l0IGNvbmZp ZyAtLWdsb2JhbCBhbGlhcy5mcCAiZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tcHJlZml4Igor CisgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1hZGQgc2FmZS5kaXJlY3RvcnkgL2hvbWUvcG9zdGdy ZXMvcG9zdGdyZXMKK30KKworZnVuY3Rpb24gY29uZmlndXJlX3ZzY29kZSB7CisgIG1rZGlyIC1w IC52c2NvZGUKKyAgY2F0IDw8RU9MID4gIi52c2NvZGUvY19jcHBfcHJvcGVydGllcy5qc29uIgor eworICAgICJjb25maWd1cmF0aW9ucyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi OiAiUG9zdGdyZXMgRGV2ZWxvcG1lbnQgQ29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAiaW5j bHVkZVBhdGgiOiBbCisgICAgICAgICAgICAgICAgIlwke3dvcmtzcGFjZUZvbGRlcn0vKioiLAor ICAgICAgICAgICAgICAgICJcJHt3b3Jrc3BhY2VGb2xkZXJ9L3NyYy9pbmNsdWRlLyIsCisgICAg ICAgICAgICAgICAgIlwke3dvcmtzcGFjZUZvbGRlcn0vLi4vYnVpbGQvc3JjL2luY2x1ZGUvIgor ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjU3RhbmRhcmQiOiAiYzk5IiwKKyAgICAgICAg ICAgICJjb25maWd1cmF0aW9uUHJvdmlkZXIiOiAibXMtdnNjb2RlLm1ha2VmaWxlLXRvb2xzIgor ICAgICAgICB9CisgICAgXSwKKyAgICAidmVyc2lvbiI6IDQKK30KK0VPTAorCisgICMgQ29weSB0 aGUgbGF1bmNoLmpzb24gYW5kIHRhc2tzLmpzb24gZmlsZXMgaWYgdGhleSBkb24ndCBleGlzdAor ICBpZiBbICEgLWYgLnZzY29kZS9sYXVuY2guanNvbiBdOyB0aGVuCisgICAgY3AgLmRldmNvbnRh aW5lci9sYXVuY2guanNvbiAudnNjb2RlLworICBmaQorICBpZiBbICEgLWYgLnZzY29kZS90YXNr cy5qc29uIF07IHRoZW4KKyAgICBjcCAuZGV2Y29udGFpbmVyL3Rhc2tzLmpzb24gLnZzY29kZS8K KyAgZmkKK30KKworZnVuY3Rpb24gY29uZmlndXJlX3BlcmYgeworICBzdWRvIHNoIC1jICJlY2hv IDAgPiAvcHJvYy9zeXMva2VybmVsL2twdHJfcmVzdHJpY3QiCisgIHN1ZG8gc3UgLWMgImVjaG8g LTEgPiAvcHJvYy9zeXMva2VybmVsL3BlcmZfZXZlbnRfcGFyYW5vaWQiCisKKyAgaWYgWyAhIC1k IC9vcHQvZnJlZWRvbS90b29scy9GbGFtZUdyYXBoIF07IHRoZW4KKyAgICBnaXQgY2xvbmUgaHR0 cHM6Ly9naXRodWIuY29tL2JyZW5kYW5ncmVnZy9GbGFtZUdyYXBoLmdpdCAvb3B0L2ZyZWVkb20v dG9vbHMvRmxhbWVHcmFwaAorICBmaQorfQorCitmdW5jdGlvbiBjb25maWd1cmVfcGdfcGx1Z2lu cyB7CisgIGlmIFsgISAtZCAvb3B0L2ZyZWVkb20vZXh0ZW5zaW9ucy9wZ19wbHVnaW5zIF07IHRo ZW4KKyAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWxwcS9wZ19wbHVnaW5z LmdpdCAvb3B0L2ZyZWVkb20vZXh0ZW5zaW9ucy9wZ19wbHVnaW5zCisgIGZpCit9CisKK2Z1bmN0 aW9uIG1haW4geworICBta2RpciAtcCAvb3B0L2ZyZWVkb20vZXh0ZW5zaW9ucworICBta2RpciAt cCAvb3B0L2ZyZWVkb20vcGF0Y2hlcworICBta2RpciAtcCAvb3B0L2ZyZWVkb20vdG9vbHMKKwor ICBjb25maWd1cmVfY29yZWR1bXBzCisgIGNvbmZpZ3VyZV9naXQKKyAgY29uZmlndXJlX3BlcmYK KyAgY29uZmlndXJlX3BnX3BsdWdpbnMKKyAgY29uZmlndXJlX3ZzY29kZQorfQorCittYWluICRA CmRpZmYgLS1naXQgYS8uZGV2Y29udGFpbmVyL3Rhc2tzLmpzb24gYi8uZGV2Y29udGFpbmVyL3Rh c2tzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTc1OWI4ZWU0 YgotLS0gL2Rldi9udWxsCisrKyBiLy5kZXZjb250YWluZXIvdGFza3MuanNvbgpAQCAtMCwwICsx LDIxOSBAQAoreworICAgIC8vIFNlZSBodHRwczovL2dvLm1pY3Jvc29mdC5jb20vZndsaW5rLz9M aW5rSWQ9NzMzNTU4CisgICAgLy8gZm9yIHRoZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSB0YXNr cy5qc29uIGZvcm1hdAorICAgIC8vIFNlZSBQb3N0Z3JlU1FMIG1lc29uIGRvYyBsaW5rIGh0dHBz Oi8vd2lraS5wb3N0Z3Jlc3FsLm9yZy93aWtpL01lc29uCisgICAgInZlcnNpb24iOiAiMi4wLjAi LAorICAgICJ0YXNrcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhYmVsIjogIm1lc29u IHNldHVwIiwKKyAgICAgICAgICAgICJ0eXBlIjogInNoZWxsIiwKKyAgICAgICAgICAgICJjb21t YW5kIjogIm1lc29uIiwKKyAgICAgICAgICAgICJhcmdzIjogWworICAgICAgICAgICAgICAgICJz ZXR1cCIsCisgICAgICAgICAgICAgICAgIi4uL2J1aWxkIiwgICAgICAgICAgICAgLy8gb3V0IG9m IHNvdXJjZSB0cmVlCisgICAgICAgICAgICAgICAgIi0tcHJlZml4PS9ob21lL3Bvc3RncmVzL3Bn c3FsIiwKKyAgICAgICAgICAgICAgICAiLS1idWlsZHR5cGU9ZGVidWciLCAgICAvLyBkZWZhdWx0 IGlzIGRlYnVnb3B0aW1pemVkCisgICAgICAgICAgICAgICAgIi1EY19hcmdzPS1mbm8taW5saW5l LWZ1bmN0aW9ucyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtRENPUFlfUEFSU0VfUExBTl9UUkVF UyAtRFdSSVRFX1JFQURfUEFSU0VfUExBTl9UUkVFUyAtRFJBV19FWFBSRVNTSU9OX0NPVkVSQUdF X1RFU1QgLURFTkZPUkNFX1JFR1JFU1NJT05fVEVTVF9OQU1FX1JFU1RSSUNUSU9OUyIsCisgICAg ICAgICAgICAgICAgIi1EY2Fzc2VydD10cnVlIiwKKyAgICAgICAgICAgICAgICAiLUR0YXBfdGVz dHM9ZW5hYmxlZCIsCisgICAgICAgICAgICAgICAgIi0td2Vycm9yIgorICAgICAgICAgICAgXSwK KyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hlciI6IFtdLAorICAgICAgICAgICAgImRldGFpbCI6 ICJtZXNvbiBzZXR1cCBkZWJ1ZyBjb25maWd1cmF0aW9uIgorICAgICAgICB9LAorICAgICAgICB7 CisgICAgICAgICAgICAibGFiZWwiOiAibWVzb24gc2V0dXAgcmVsZWFzZSIsCisgICAgICAgICAg ICAidHlwZSI6ICJzaGVsbCIsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJtZXNvbiIsCisgICAg ICAgICAgICAiYXJncyI6IFsKKyAgICAgICAgICAgICAgICAic2V0dXAiLAorICAgICAgICAgICAg ICAgICIuLi9idWlsZCIsCisgICAgICAgICAgICAgICAgIi0tcHJlZml4PS9ob21lL3Bvc3RncmVz L3Bnc3FsIiwKKyAgICAgICAgICAgICAgICAiLS1idWlsZHR5cGU9cmVsZWFzZSIKKyAgICAgICAg ICAgIF0sCisgICAgICAgICAgICAicHJvYmxlbU1hdGNoZXIiOiBbXSwKKyAgICAgICAgICAgICJk ZXRhaWwiOiAibWVzb24gc2V0dXAgcmVsZWFzZSBjb25maWd1cmF0aW9uIgorICAgICAgICB9LAor ICAgICAgICB7CisgICAgICAgICAgICAibGFiZWwiOiAiY2xlYXIgYnVpbGQgZGlyZWN0b3J5IiwK KyAgICAgICAgICAgICJ0eXBlIjogInNoZWxsIiwKKyAgICAgICAgICAgICJjb21tYW5kIjogInJt IC1yZiAuLi9idWlsZCIsCisgICAgICAgICAgICAicHJvYmxlbU1hdGNoZXIiOiBbXSwKKyAgICAg ICAgICAgICJkZXRhaWwiOiAiY2xlYXIgYnVpbGQgZGlyZWN0b3J5IgorICAgICAgICB9LAorICAg ICAgICB7CisgICAgICAgICAgICAibGFiZWwiOiAibmluamEgYnVpbGQiLAorICAgICAgICAgICAg InR5cGUiOiAic2hlbGwiLAorICAgICAgICAgICAgImNvbW1hbmQiOiAibmluamEiLAorICAgICAg ICAgICAgImFyZ3MiOlsKKyAgICAgICAgICAgICAgICAiLUMiLAorICAgICAgICAgICAgICAgICIu Li9idWlsZCIsCisgICAgICAgICAgICAgICAgIi1qIiwKKyAgICAgICAgICAgICAgICAiNCIKKyAg ICAgICAgICAgIF0sCisgICAgICAgICAgICAicHJvYmxlbU1hdGNoZXIiOiBbXSwKKyAgICAgICAg ICAgICJkZXRhaWwiOiAiYnVpbGQgcG9zdGdyZXMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg ICAgICAgICAgICJsYWJlbCI6ICJyZWdyZXNzaW9uIHRlc3RzIiwKKyAgICAgICAgICAgICJ0eXBl IjogInNoZWxsIiwKKyAgICAgICAgICAgICJjb21tYW5kIjogIm1lc29uIHRlc3QgLUMgLi4vYnVp bGQgLXEgLS1wcmludC1lcnJvcmxvZ3MgLS1zdWl0ZSBzZXR1cCAtLXN1aXRlIHJlZ3Jlc3MiLAor ICAgICAgICAgICAgInByb2JsZW1NYXRjaGVyIjogW10sCisgICAgICAgICAgICAiZGV0YWlsIjog InJ1biBtYWluIHJlZ3Jlc3Npb24gdGVzdHMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg ICAgICAgICJsYWJlbCI6ICJjaGVjay13b3JsZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzaGVs bCIsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJtZXNvbiB0ZXN0IC1DIC4uL2J1aWxkIC1xIC0t cHJpbnQtZXJyb3Jsb2dzIiwKKyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hlciI6IFtdLAorICAg ICAgICAgICAgImRldGFpbCI6ICJydW4gYWxsIHRlc3RzIgorICAgICAgICB9LAorICAgICAgICB7 CisgICAgICAgICAgICAibGFiZWwiOiAibmluamEgaW5zdGFsbCIsCisgICAgICAgICAgICAidHlw ZSI6ICJzaGVsbCIsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJuaW5qYSBpbnN0YWxsIC1DIC4u L2J1aWxkIiwKKyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hlciI6IFtdLAorICAgICAgICAgICAg ImRldGFpbCI6ICJpbnN0YWxsIHBnc3FsIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg ICAgICAibGFiZWwiOiAiaW5pdCBjbHVzdGVyIiwKKyAgICAgICAgICAgICJ0eXBlIjogInNoZWxs IiwKKyAgICAgICAgICAgICJjb21tYW5kIjogIi9ob21lL3Bvc3RncmVzL3Bnc3FsL2Jpbi9pbml0 ZGIiLAorICAgICAgICAgICAgImFyZ3MiOiBbCisgICAgICAgICAgICAgICAgIi1EIiwKKyAgICAg ICAgICAgICAgICAiL2hvbWUvcG9zdGdyZXMvcGdkYXRhIgorICAgICAgICAgICAgXSwKKyAgICAg ICAgICAgICJwcm9ibGVtTWF0Y2hlciI6IFtdLAorICAgICAgICAgICAgImRldGFpbCI6ICJpbml0 IGNsdXN0ZXIgdXNpbmcgaW5pdGRiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg ICAibGFiZWwiOiAic3RhcnQgY2x1c3RlciIsCisgICAgICAgICAgICAidHlwZSI6ICJzaGVsbCIs CisgICAgICAgICAgICAiY29tbWFuZCI6ICIvaG9tZS9wb3N0Z3Jlcy9wZ3NxbC9iaW4vcGdfY3Rs IiwKKyAgICAgICAgICAgICJhcmdzIjogWworICAgICAgICAgICAgICAgICItRCIsCisgICAgICAg ICAgICAgICAgIi9ob21lL3Bvc3RncmVzL3BnZGF0YSIsCisgICAgICAgICAgICAgICAgIi1sIiwK KyAgICAgICAgICAgICAgICAiL2hvbWUvcG9zdGdyZXMvcGdkYXRhL2xvZ2ZpbGUiLAorICAgICAg ICAgICAgICAgICJzdGFydCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicHJvYmxlbU1h dGNoZXIiOiBbXSwKKyAgICAgICAgICAgICJkZXRhaWwiOiAic3RhcnQgZGIgY2x1c3RlciIKKyAg ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImxhYmVsIjogInJlc3RhcnQgY2x1c3Rl ciIsCisgICAgICAgICAgICAidHlwZSI6ICJzaGVsbCIsCisgICAgICAgICAgICAiY29tbWFuZCI6 ICIvaG9tZS9wb3N0Z3Jlcy9wZ3NxbC9iaW4vcGdfY3RsIiwKKyAgICAgICAgICAgICJhcmdzIjog WworICAgICAgICAgICAgICAgICItRCIsCisgICAgICAgICAgICAgICAgIi9ob21lL3Bvc3RncmVz L3BnZGF0YSIsCisgICAgICAgICAgICAgICAgIi1sIiwKKyAgICAgICAgICAgICAgICAiL2hvbWUv cG9zdGdyZXMvcGdkYXRhL2xvZ2ZpbGUiLAorICAgICAgICAgICAgICAgICJyZXN0YXJ0IgorICAg ICAgICAgICAgXSwKKyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hlciI6IFtdLAorICAgICAgICAg ICAgImRldGFpbCI6ICJyZXN0YXJ0IGRiIGNsdXN0ZXIiCisgICAgICAgIH0sCisgICAgICAgIHsK KyAgICAgICAgICAgICJsYWJlbCI6ICJzdG9wIGNsdXN0ZXIiLAorICAgICAgICAgICAgInR5cGUi OiAic2hlbGwiLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiL2hvbWUvcG9zdGdyZXMvcGdzcWwv YmluL3BnX2N0bCIsCisgICAgICAgICAgICAiYXJncyI6IFsKKyAgICAgICAgICAgICAgICAiLUQi LAorICAgICAgICAgICAgICAgICIvaG9tZS9wb3N0Z3Jlcy9wZ2RhdGEiLAorICAgICAgICAgICAg ICAgICJzdG9wIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hlciI6 IFtdLAorICAgICAgICAgICAgImRldGFpbCI6ICJzdG9wIGRiIGNsdXN0ZXIiCisgICAgICAgIH0s CisgICAgICAgIHsKKyAgICAgICAgICAgICJsYWJlbCI6ICJjbGVhciBwZ2RhdGEiLAorICAgICAg ICAgICAgInR5cGUiOiAic2hlbGwiLAorICAgICAgICAgICAgImNvbW1hbmQiOiAicm0gLXJmIC9o b21lL3Bvc3RncmVzL3BnZGF0YSIsCisgICAgICAgICAgICAicHJvYmxlbU1hdGNoZXIiOiBbXSwK KyAgICAgICAgICAgICJkZXRhaWwiOiAiY2xlYXIgcGdkYXRhIGRpcmVjdG9yeSIKKyAgICAgICAg fSwKKyAgICAgICAgeworICAgICAgICAgICAgImxhYmVsIjogImluc3RhbGwgcGdfYnNkX2luZGVu dCIsCisgICAgICAgICAgICAidHlwZSI6ICJzaGVsbCIsCisgICAgICAgICAgICAiY29tbWFuZCI6 ICJzdWRvIGNwIC4uL2J1aWxkL3NyYy90b29scy9wZ19ic2RfaW5kZW50L3BnX2JzZF9pbmRlbnQg L3Vzci9sb2NhbC9iaW4iLAorICAgICAgICAgICAgInByb2JsZW1NYXRjaGVyIjogW10sCisgICAg ICAgICAgICAiZGV0YWlsIjogImluc3RhbGwgcGdfYnNkX2luZGVudCB0byAvdXNyL2xvY2FsL2Jp biIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImxhYmVsIjogInBnaW5kZW50 IiwKKyAgICAgICAgICAgICJ0eXBlIjogInNoZWxsIiwKKyAgICAgICAgICAgICJjb21tYW5kIjog InNyYy90b29scy9wZ2luZGVudC9wZ2luZGVudCAke2lucHV0OnNlbGVjdERpcn0iLAorICAgICAg ICAgICAgInByb2JsZW1NYXRjaGVyIjogW10sCisgICAgICAgICAgICAiZGV0YWlsIjogInJ1biBw Z2luZGVudCBvbiBzZWxlY3RlZCBkaXJlY3RvcnkiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg ICAgICAgICAgICJsYWJlbCI6ICJmb3JtYXQgcGF0Y2giLAorICAgICAgICAgICAgInR5cGUiOiAi c2hlbGwiLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiZ2l0IGZvcm1hdC1wYXRjaCAtbyAvb3B0 L2ZyZWVkb20vcGF0Y2hlcyAtJHtpbnB1dDpmb3JtYXRQYXRjaE51bWJlcn0gLXYgJHtpbnB1dDpm b3JtYXRQYXRjaFZlcnNpb259IiwKKyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hlciI6IFtdLAor ICAgICAgICAgICAgImRldGFpbCI6ICJnZW5lcmF0ZSBwYXRjaGVzIGZyb20gdGhlIHRvcG1vc3Qg PG4+IGNvbW1pdHMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYWJlbCI6 ICJhcHBseSBwYXRjaCIsCisgICAgICAgICAgICAidHlwZSI6ICJzaGVsbCIsCisgICAgICAgICAg ICAiY29tbWFuZCI6ICJnaXQgYW0gL29wdC9mcmVlZG9tL3BhdGNoZXMvJHtpbnB1dDpwYXRjaEZp bGV9IiwKKyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hlciI6IFtdLAorICAgICAgICAgICAgImRl dGFpbCI6ICJhcHBseSBwYXRjaCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg ImxhYmVsIjogImdlbmVyYXRlIGZsYW1lZ3JhcGgiLAorICAgICAgICAgICAgInR5cGUiOiAic2hl bGwiLAorICAgICAgICAgICAgImNvbW1hbmQiOiAicGVyZiByZWNvcmQgLW8gLi4vcGVyZl8ke2lu cHV0OnByb2Nlc3NJZH0uZGF0YSAtZyAtRiA5OSAtcCAke2lucHV0OnByb2Nlc3NJZH0gLS0gc2xl ZXAgNjAgJiYgcGVyZiBzY3JpcHQgLWkgLi4vcGVyZl8ke2lucHV0OnByb2Nlc3NJZH0uZGF0YSB8 IC9vcHQvZnJlZWRvbS90b29scy9GbGFtZUdyYXBoL3N0YWNrY29sbGFwc2UtcGVyZi5wbCB8IC9v cHQvZnJlZWRvbS90b29scy9GbGFtZUdyYXBoL2ZsYW1lZ3JhcGgucGwgPiAvb3B0L2ZyZWVkb20v cGVyZl8ke2lucHV0OnByb2Nlc3NJZH0uc3ZnIiwKKyAgICAgICAgICAgICJwcm9ibGVtTWF0Y2hl ciI6IFtdLAorICAgICAgICAgICAgImRldGFpbCI6ICJnZW5lcmF0ZSBmbGFtZWdyYXBoIgorICAg ICAgICB9CisgICAgXSwKKyAgICAiaW5wdXRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi aWQiOiAic2VsZWN0RGlyIiwKKyAgICAgICAgICAgICJ0eXBlIjogImNvbW1hbmQiLAorICAgICAg ICAgICAgImNvbW1hbmQiOiAiZXh0ZW5zaW9uLmNvbW1hbmR2YXJpYWJsZS5waWNrU3RyaW5nUmVt ZW1iZXIiLAorICAgICAgICAgICAgImFyZ3MiOiB7CisgICAgICAgICAgICAgICAgImRlc2NyaXB0 aW9uIjogIldoaWNoIGRpcmVjdG9yeSB0byBydW4gZm9yIHBnaW5kZW50PyIsCisgICAgICAgICAg ICAgICAgIm9wdGlvbnMiOiBbCisgICAgICAgICAgICAgICAgICAgIFsiVXNlIHByZXZpb3VzIGRp cmVjdG9yeSIsICIke3JlbWVtYmVyOnNyY1N1YkRpcn0iXSwKKyAgICAgICAgICAgICAgICAgICAg WyJQaWNrIGRpcmVjdG9yeSIsICIke3BpY2tGaWxlOnNyY1N1YkRpcn0iXQorICAgICAgICAgICAg ICAgIF0sCisgICAgICAgICAgICAgICAgImRlZmF1bHQiOiBudWxsLAorICAgICAgICAgICAgICAg ICJwaWNrRmlsZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInNyY1N1YkRpciI6IHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJXaGljaCBkaXJlY3Rvcnk/IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIjogInNyYy8qKiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAic2hvd0RpcnMiOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgImtl eVJlbWVtYmVyIjogInNyY1N1YkRpciIKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg ICAgImlkIjogImZvcm1hdFBhdGNoTnVtYmVyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6 ICJwYXRjaGVzIGZyb20gdGhlIHRvcG1vc3QgPG4+IGNvbW1pdHMiLAorICAgICAgICAgICAgInR5 cGUiOiAicHJvbXB0U3RyaW5nIiwKKyAgICAgICAgICAgICJkZWZhdWx0IjogIjEiCisgICAgICAg IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJmb3JtYXRQYXRjaFZlcnNpb24iLAor ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIjxuPi10aCBpdGVyYXRpb24gb2YgdGhlIHRvcGlj IiwKKyAgICAgICAgICAgICJ0eXBlIjogInByb21wdFN0cmluZyIsCisgICAgICAgICAgICAiZGVm YXVsdCI6ICIxIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAicGF0 Y2hGaWxlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJXaGljaCBwYXRjaCBmaWxlIHRv IGFwcGx5PyIsCisgICAgICAgICAgICAidHlwZSI6ICJwcm9tcHRTdHJpbmciLAorICAgICAgICAg ICAgImRlZmF1bHQiOiAiKiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk IjogInByb2Nlc3NJZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiV2hpY2ggcHJvY2Vz cyB0byBwZXJmPyIsCisgICAgICAgICAgICAidHlwZSI6ICJwcm9tcHRTdHJpbmciLAorICAgICAg ICAgICAgImRlZmF1bHQiOiAiIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvLmdp dGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggNGU5MTEzOTVmZS4uOTUyZTRjOTNlZiAxMDA2NDQK LS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0zMSw2ICszMSw3IEBAIHdpbjMy dmVyLnJjCiAqLmV4ZQogbGliKmRsbC5kZWYKIGxpYioucGMKKy5EU19TdG9yZQogCiAjIExvY2Fs IGV4Y2x1ZGVzIGluIHJvb3QgZGlyZWN0b3J5CiAvR05VbWFrZWZpbGUKQEAgLTQzLDMgKzQ0LDUg QEAgbGliKi5wYwogL1JlbGVhc2UvCiAvdG1wX2luc3RhbGwvCiAvcG9ydGxvY2svCisvLmRldmNv bnRhaW5lci8KKy8udnNjb2RlLwotLSAKMi4zOS4yCgo= --000000000000cdf093061ea06b2f--