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 Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9691CC001B0 for ; Sat, 12 Aug 2023 20:33:05 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 2A1A340154; Sat, 12 Aug 2023 20:33:05 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 2A1A340154 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5XSpVvzUyzuE; Sat, 12 Aug 2023 20:33:03 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by smtp2.osuosl.org (Postfix) with ESMTP id 18ACA40568; Sat, 12 Aug 2023 20:33:02 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 18ACA40568 Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id DE3941BF578 for ; Sat, 12 Aug 2023 20:33:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id C4AD340568 for ; Sat, 12 Aug 2023 20:33:00 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org C4AD340568 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 16ERDgetSonr for ; Sat, 12 Aug 2023 20:32:57 +0000 (UTC) Received: from smtp6-g21.free.fr (smtp6-g21.free.fr [IPv6:2a01:e0c:1:1599::15]) by smtp2.osuosl.org (Postfix) with ESMTPS id D204A40154 for ; Sat, 12 Aug 2023 20:32:56 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org D204A40154 Received: from ymorin.is-a-geek.org (unknown [IPv6:2a01:cb19:8b44:b00:13dc:fe9:8e15:e643]) (Authenticated sender: yann.morin.1998@free.fr) by smtp6-g21.free.fr (Postfix) with ESMTPSA id 728E77802D1; Sat, 12 Aug 2023 22:32:51 +0200 (CEST) Received: by ymorin.is-a-geek.org (sSMTP sendmail emulation); Sat, 12 Aug 2023 22:32:51 +0200 Date: Sat, 12 Aug 2023 22:32:51 +0200 From: "Yann E. MORIN" To: =?utf-8?Q?Rapha=C3=ABl?= Slagmolen Message-ID: <20230812203251.GS421096@scaer> References: <1166577682.270413.1673277779708@fidget.co-bxl> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1166577682.270413.1673277779708@fidget.co-bxl> User-Agent: Mutt/1.5.22 (2013-10-16) X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=free.fr; s=smtp-20201208; t=1691872373; bh=5Y0f5M8aolIDs3tvwmuA2vMyrVwk9vrhf4ju9jq7p6w=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=aUFtUGW8AYZkNM+2h4D6MmldWwM8uDSOgoKk7G9MBAvkOIsynNMkC3POmofkzysrn gHwm0gBHcYQLUzby64pswkQJpKkQztK/eNdzb92Ty2opcfEHsBcJIsiP5nEycN8+4V v8SNb+hAkpE/PVlmN7babTmSgYeb+OKRCQPOtRKxAoaVaU3kN6sSl9uYYa8glkGV95 H+8O0D64rO1jHfDWGULLuRDLzmbWIC4qhfs7m3A1Lqsg/82+dTYnNplyKq1hFhlGOU 8EHtLTEXLqnv4sk3s3WeJce4fxAdB5rfJw29H3qAOnHWyB74j9kF8urBvvHtoXjVhW RljWXiKIwpGOA== X-Mailman-Original-Authentication-Results: smtp2.osuosl.org; dkim=pass (2048-bit key) header.d=free.fr header.i=@free.fr header.a=rsa-sha256 header.s=smtp-20201208 header.b=aUFtUGW8 Subject: Re: [Buildroot] [PATCH 1/1] utils/make_rich_wrapper.py: add new python script to wrap the build process into a colored TUI with progress tracking X-BeenThere: buildroot@buildroot.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: buildroot@buildroot.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: buildroot-bounces@buildroot.org Sender: "buildroot" UmFwaGHDq2wsIEFsLAoKT24gMjAyMy0wMS0wOSAxNjoyMiArMDEwMCwgUmFwaGHDq2wgU2xhZ21v bGVuIHZpYSBidWlsZHJvb3Qgc3Bha2UgdGh1c2x5Ogo+IEFzIHRoZSBidWlsZCBwcm9jZXNzIGNh biBiZSBsb25nIGFuZCBoYXJkIHRvIHRyYWNrLCBJIHdyb3RlIGEgbGl0dGxlIFB5dGhvbgo+IHNj cmlwdCB0aGF0IHRyeSB0byBtYWtlIGl0IGVhc2llciBmb3IgdXNlcnMKPiB0byBzZWUgd2hlcmUg aW4gdGhlIHByb2Nlc3MgdGhleSBhcmUsIHdoYXQgaXMgZ29pbmcgb24sIGxvZyBmaWx0ZXJpbmcg YW5kCj4gbW9yZS4KClRoYW5rcyBmb3IgdGhpcyBwcm9wb3NhbCwgYW5kIHNvcnJ5IGZvciB0aGUg bGF0ZSByZXBseS4uLgoKV2UndmUgZGlzY3Vzc2VkIHRoaXMgYSBiaXQgd2l0aCBhbm90aGVyIG1h aW50YWluZXIsIGFuZCB3ZSBhcmUgYSBiaXQKcmVsdWN0YW50IGF0IGNhcnJ5aW5nIHRoaXMgc2Ny aXB0IGluIEJ1aWxkcm9vdC4KCkZpcnN0LCB3ZSBjYW50IGVhc2lseSByZXZpZXcgaXQsIGJlY2F1 c2UgaXQgaXMgYmFkbHkgbGluZS13cmFwcGVkLgoKU2Vjb25kLCBpdCBsb29rcyB0b28gY29tcGxp Y2F0ZWQuCgpUaGlyZCwgd2UgYWxyZWFkeSBoYXZlIGEgc2ltcGxlciBzY3JpcHQgdGhhdCBqdXN0 IGZpbHRlcnMgdGhlIG91dHB1dCBvZgptYWtlLCBhbmQganVzdCBkaXNwbGF5cyB0aGUgbGluZXMg d2l0aCAnPj4+JywgcmVkaXJlY3RpbmcgdGhlIGZ1bGwgbG9nCnRvIGEgZmlsZTogdXRpbHMvYnJt YWtlOyB0aGlzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGEgYmVhdXRpZmljYXRpb24gb2YKdGhlIGJ1 aWxkIG91dHB1dC4KClNvLCB3ZSdyZSBnb2luZyB0byByZWplY3QgdGhpcyBzY3JpcHQuCgpSZWdh cmRzLApZYW5uIEUuIE1PUklOLgoKPiBUaGUgc2NyaXB0IGlzIGNvbXBsZXRseSBhdXRvbm9tb3Vz IGFuZCBkb2Vzbid0IGltcG9zZSBhbnl0aGluZyBvbiB0aGUgY3VycmVudAo+IGJ1aWxkIHByb2Nl c3Mgc28gaXQgc2hvdWxkIHdvcmsgd2l0aG91dAo+IHRhbXBlcmluZyB0aGUgbWFpbnRlbmFiaWxp dHkgb2YgdGhlIHByb2plY3QncyBNYWtlZmlsZS4KPiAKPiBUaGUgc2NyaXB0IGhhcyBvbmx5IHR3 byBkZXBlbmRlbmNpZXMgOgo+IMKgwqAgwqAtIHBhY2thZ2luZyAoZm9yIHZlcnNpb24gcGFyc2lu ZyB3aGlsZSBjaGVja2luZyBCdWlsZHJvb3QncyBkZXBlbmRlbmNpZXMpCj4gwqDCoCDCoC0gcmlj aCAoZm9yIHRoZSBjb2xvcmVkIG91dHB1dCBhbmQgbGF5b3V0KQo+IAo+IEZlYXR1cmVzOgo+IMKg wqAgwqAtIHRlc3QgdGhlIHByZXNlbmNlIG9mIEJ1aWxkcm9vdCdzIGRlcGVuZGVuY2llcywgd2l0 aCB2ZXJzaW9uIGNvbnRyb2wgYW5kCj4gcGF0aCB2YWxpZGF0aW9uIChmb3IgYGZpbGVgKQo+IMKg wqAgwqAtIChvcHRpb25hbCkgdGVzdCB0aGUgcHJlc2VuY2Ugb2YgQnVpbGRyb290J3Mgb3B0aW9u YWwgZGVwZW5kZW5jaWVzIGJ1dAo+IHdpdGhvdXQgYmxvY2tpbmcgdGhlIHByb2Nlc3MKPiDCoMKg IMKgLSBjYW4gb25seSBkbyB0aGUgY2hlY2tpbmcgb3Igc2tpcCBpdCBlbnRpcmVseSB1c2luZyBj b21tYW5kIGxpbmUgb3B0aW9uCj4gwqDCoCDCoC0gZmlsdGVyIHRoZSBvdXRwdXQgb2YgdGhlIGJ1 aWxkIHByb2Nlc3Mgd2hpbGUgdHJ5aW5nIHRvIGRldGVjdAo+IGZhdGFsL2Vycm9yL3dhcm5pbmcv ZGVidWcgbG9nbGV2ZWwgKG1heSBoYXZlIHNvbWUgZmFsc2UgcG9zaXRpdmUpCj4gwqDCoCDCoC0g Y2FuIGNoYW5nZSB0aGUgZmlsdGVyaW5nIGxldmVsIHVzaW5nIGEgY29tbWFuZCBsaW5lIG9wdGlv biAoZGVmYXVsdCBvbgo+IEVSUk9SKQo+IMKgwqAgwqAtIGtlZXAgdHJhY2sgb2YgdGhlIGFtb3Vu dCBvZiB3b3JrIHRvIGRvIHVzaW5nIGBtYWtlIGV4dGVybmFsLWRlcHNgIGFuZAo+IGRpc3BsYXkg dGhlIG92ZXJhbGwgcHJvZ3Jlc3MKPiDCoMKgIMKgLSBpbiBjYXNlIHRoZSBhbW91bnQgb2Ygd29y ayBpc24ndCBjb3JyZWN0bHkgZGV0ZWN0ZWQgKEkgdHJ5IHRvIGFjY291bnQgZm9yCj4gc29tZSBz cGVjaWFscyBzdGVwcyksIHRoZSBwcm9ncmVzcyBpcyBmaXhlZCBhdCB0aGUgZW5kIHdpdGggYSBt ZXNzYWdlCj4gwqDCoCDCoC0ga2VlcCB0cmFjayBvZiBhbGwgdGhlIHRhc2sgYWxyZWFkeSBkb25l IGFuZCB0aGUgb25lIGN1cnJlbnRseSB3b3JraW5nCj4gwqDCoCDCoC0gZGlzcGxheSB0aGUgY3Vy cmVudCB0YXNrJ3Mgc3RlcCBtZXNzYWdlIChleHRyYWN0ZWQgZnJvbSBgPj4+ICVzYCBvdXRwdXQp Cj4gwqDCoCDCoC0ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCB0YXNrIHByb2dyZXNzIGJhc2Vk IG9uIHRoZSBhbW91bnQgb2Ygc3RlcHMKPiBkb25lCj4gwqDCoCDCoC0gZGlzcGxheSBhIHByb2dy ZXNzIGluIGNhc2Ugb2YgYHdnZXRgIHdpdGggZXh0cmFjdGlvbiBvZiBmaWxlbmFtZSwgc2l6ZSwK PiBhbmQgZG93bmxvYWRlZCBmcm9tIHRoZSBvdXRwdXQKPiAKPiBUaGUgc2NyaXB0IGlzIGxhdW5j aGluZyBgbWFrZWAgYnkgaXRzZWxmIGJ1dCB0aGUgdXNlciBpcyBzdXBwb3NlZCB0byBoYXZlCj4g YWxyZWFkeSBkb25lIHRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCEKPiAKPiBNYXkgYmUgYWRkZWQg bGF0ZXI6Cj4gwqDCoCDCoC0gZXhwb3J0IHJhdyBvdXRwdXQgZnJvbSBgbWFrZWAgaW50byBhIGxv ZyBmaWxlIGluIC90bXAgb3IgZWxzZXdoZXJlCj4gKGNvbW1hbmQgbGluZSBvcHRpb24/KQo+IMKg wqAgwqAtIGFkZCBvdGhlciB0cmFja2FibGUgc3RlcCBsaWtlIGB3Z2V0YD8KPiDCoMKgIMKgLSBp bXByb3ZlIGxvZ2xldmVsIGRldGVjdGlvbgo+IMKgwqAgwqAtIGFueSByZXF1ZXN0IGZyb20gdGhl IHRlYW0/IQo+IAo+IFNvbWUgaW1hZ2VzIGNhbiBiZSBzZWVuIG9uIG15IHBlcnNvbmFsIHNlcnZl cjoKPiDCoMKgIMKgLSB0aGUgYC0taGVscGAgbWVudTogaHR0cHM6Ly9uYWhldWxjcmFmdC5iZS9u ZXh0Y2xvdWQvcy9hWDhmVzVtSzhkYlh3cVQKPiDCoMKgIMKgLSB0aGUgcHJvZ3Jlc3MgdHJhY2tp bmc6Cj4gaHR0cHM6Ly9uYWhldWxjcmFmdC5iZS9uZXh0Y2xvdWQvcy84N0dLN3lYUXpaSHlkY2oK PiDCoMKgIMKgLSB0aGUgZmluaXNoZWQgcHJvY2VzczogaHR0cHM6Ly9uYWhldWxjcmFmdC5iZS9u ZXh0Y2xvdWQvcy9aUE10NDZXUDVqaWI3bWsKPiAKPiBTaWduZWQtb2ZmLWJ5OiBSYXBoYcOrbCBT bGFnbW9sZW4gKFR1dHVsKSA8cmFwaGFlbC5zbGFnbW9sZW5AbWFpbGZlbmNlLmNvbT4KPiAtLS0K PiAgREVWRUxPUEVSUyAgICAgICAgICAgICAgICAgfCAgIDMgKwo+ICB1dGlscy9tYWtlX3JpY2hf d3JhcHBlci5weSB8IDY2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IDIgZmlsZXMgY2hhbmdlZCwgNjYzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNzU1 IHV0aWxzL21ha2VfcmljaF93cmFwcGVyLnB5Cj4gCj4gZGlmZiAtLWdpdCBhL0RFVkVMT1BFUlMg Yi9ERVZFTE9QRVJTCj4gaW5kZXggODZlM2YwZTdiMS4uMGM3OGQyZjNhMSAxMDA2NDQKPiAtLS0g YS9ERVZFTE9QRVJTCj4gKysrIGIvREVWRUxPUEVSUwo+IEBAIC0zMTU5LDMgKzMxNTksNiBAQCBG OglwYWNrYWdlL3F1YXppcC8KPiAgRjoJcGFja2FnZS9zaGFwZWxpYi8KPiAgRjoJcGFja2FnZS9z aW1wbGUtbWFpbC8KPiAgRjoJcGFja2FnZS90aW5jLwo+ICsKPiArTjoJUmFwaGHDq2wgU2xhZ21v bGVuIChUdXR1bCkgPHJhcGhhZWwuc2xhZ21vbGVuQG1haWxmZW5jZS5jb20+Cj4gK0Y6CXV0aWxz L21ha2VfcmljaF93cmFwcGVyLnB5Cj4gZGlmZiAtLWdpdCBhL3V0aWxzL21ha2VfcmljaF93cmFw cGVyLnB5IGIvdXRpbHMvbWFrZV9yaWNoX3dyYXBwZXIucHkKPiBuZXcgZmlsZSBtb2RlIDEwMDc1 NQo+IGluZGV4IDAwMDAwMDAwMDAuLjE1MmI1MGJlNjUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv dXRpbHMvbWFrZV9yaWNoX3dyYXBwZXIucHkKPiBAQCAtMCwwICsxLDY2MCBAQAo+ICsjIS91c3Iv YmluL2VudiBweXRob24KPiArIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KPiArCj4gKycnJwo+ICsg ICAgRGF0ZSBjcmVhdGVkOiAyMDIzLzAxLzA3Cj4gKyAgICBEYXRlIGxhc3QgbW9kaWZpZWQ6IDIw MjMvMDEvMDkKPiArICAgIFB5dGhvbiBWZXJzaW9uOiAzLjEwKwo+ICsgICAgUmVxdWlyZW1lbnQ6 Cj4gKyAgICAgICAgcGFja2FnaW5nPT0yMSsKPiArICAgICAgICByaWNoPT0xMysKPiArJycnCj4g Kwo+ICtfX2F1dGhvcl9fID0gJ1R1dHVsIChodHRwczovL2dpdGxhYi5jb20vVHV0dWwpJwo+ICtf X2NvcHlyaWdodF9fID0gJ0NvcHlyaWdodCAyMDIzLCBtYWtlX3JpY2hfd3JhcHBlci5weSBmb3Ig QnVpbGRyb290Jwo+ICtfX2xpY2Vuc2VfXyA9ICdNSVQnCj4gK19fY3JlZGl0c19fID0gWydUdXR1 bCddCj4gK19fdmVyc2lvbl9fID0gJzEuMC4wJwo+ICtfX3N0YXR1c19fID0gJ3JlbGVhc2UnICAj IHJlbGVhc2UgPiB0ZXN0ID4gZGV2Cj4gK19fbWFpbnRhaW5lcl9fID0gJ1R1dHVsJwo+ICtfX2Rl c2NyaXB0aW9uX18gPSAnc2ltcGxlIHB5dGhvbiBzY3JpcHQgdGhhdCBhY3QgYXMgYSB3cmFwcGVy IGFyb3VuZCBgbWFrZWAKPiBmb3IgQnVpbGRyb290IHVzaW5nIHRoZSBSaWNoIG1vZHVsZScKPiAr Cj4gK2ltcG9ydCBhcmdwYXJzZQo+ICtpbXBvcnQgZW51bQo+ICtpbXBvcnQgbG9nZ2luZwo+ICtp bXBvcnQgb3MKPiAraW1wb3J0IHJlCj4gK2ltcG9ydCBzZWxlY3QKPiAraW1wb3J0IHNodXRpbAo+ ICtpbXBvcnQgc2lnbmFsCj4gK2ltcG9ydCBzdWJwcm9jZXNzCj4gK2Zyb20gcGFja2FnaW5nIGlt cG9ydCB2ZXJzaW9uCj4gK2Zyb20gcmljaCBpbXBvcnQgYm94Cj4gK2Zyb20gcmljaC5jb25zb2xl IGltcG9ydCBDb25zb2xlLCBHcm91cAo+ICtmcm9tIHJpY2gubGl2ZSBpbXBvcnQgTGl2ZQo+ICtm cm9tIHJpY2gubG9nZ2luZyBpbXBvcnQgUmljaEhhbmRsZXIKPiArZnJvbSByaWNoLnBhbmVsIGlt cG9ydCBQYW5lbAo+ICtmcm9tIHJpY2gucHJvbXB0IGltcG9ydCBDb25maXJtCj4gK2Zyb20gcmlj aC5wcm9ncmVzcyBpbXBvcnQgKAo+ICsgICAgQmFyQ29sdW1uLAo+ICsgICAgRG93bmxvYWRDb2x1 bW4sCj4gKyAgICBNb2ZOQ29tcGxldGVDb2x1bW4sCj4gKyAgICBQcm9ncmVzcywgU3Bpbm5lckNv bHVtbiwKPiArICAgIFRhc2ssCj4gKyAgICBUYXNrUHJvZ3Jlc3NDb2x1bW4sCj4gKyAgICBUZXh0 Q29sdW1uLAo+ICsgICAgVGltZUVsYXBzZWRDb2x1bW4sCj4gKyAgICBUaW1lUmVtYWluaW5nQ29s dW1uLAo+ICsgICAgVHJhbnNmZXJTcGVlZENvbHVtbgo+ICspCj4gK2Zyb20gcmljaC50YWJsZSBp bXBvcnQgVGFibGUKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4g Kwo+ICsKPiArY2xhc3MgRG93bmxvYWRTdGVwKGVudW0uRW51bSk6Cj4gKyAgICAiIiIKPiArICAg IEhlbHAgdG8ga25vdyB3aWNoIGRvd25sb2FkaW5nIGluZm9ybWF0aW9uIGlzIHByZXNlbnQKPiAr ICAgICIiIgo+ICsgICAgTEVOR1RIID0gMAo+ICsgICAgT1VUUFVUID0gMQo+ICsgICAgUFJPR1JF U1MgPSAyCj4gKyAgICBET05FID0gMwo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKPiArCj4gKwo+ICtjbGFzcyBTdGF0ZShlbnVtLkVudW0pOgo+ICsgICAgIiIiCj4g KyAgICBCdWlsZHJvb3QgTWFrZWZpbGUncyBzdGVwcwo+ICsgICAgIiIiCj4gKyAgICBSRUFEWSA9 IDAKPiArICAgIERPV05MT0FESU5HID0gMQo+ICsgICAgRVhUUkFDVElORyA9IDIKPiArICAgIFBB VENISU5HID0gMwo+ICsgICAgQ09ORklHVVJJTkcgPSA0Cj4gKyAgICBCVUlMRElORyA9IDUKPiAr ICAgIElOU1RBTExJTkcgPSA2Cj4gKyAgICBET05FID0gNwo+ICsKPiArICAgIEBzdGF0aWNtZXRo b2QKPiArICAgIGRlZiBnZXRfZnJvbV9tZXNzYWdlKG1lc3NhZ2UpIC0+IHN0cjoKPiArICAgICAg ICBpZiBtZXNzYWdlLl9fY29udGFpbnNfXygiRG93bmxvYWRpbmciKToKPiArICAgICAgICAgICAg cmV0dXJuIFN0YXRlLkRPV05MT0FESU5HCj4gKyAgICAgICAgZWxpZiBtZXNzYWdlLl9fY29udGFp bnNfXygiRXh0cmFjdGluZyIpOgo+ICsgICAgICAgICAgICByZXR1cm4gU3RhdGUuRVhUUkFDVElO Rwo+ICsgICAgICAgIGVsaWYgbWVzc2FnZS5fX2NvbnRhaW5zX18oIlBhdGNoaW5nIik6Cj4gKyAg ICAgICAgICAgIHJldHVybiBTdGF0ZS5QQVRDSElORwo+ICsgICAgICAgIGVsaWYgbWVzc2FnZS5f X2NvbnRhaW5zX18oIkNvbmZpZ3VyaW5nIik6Cj4gKyAgICAgICAgICAgIHJldHVybiBTdGF0ZS5D T05GSUdVUklORwo+ICsgICAgICAgIGVsaWYgbWVzc2FnZS5fX2NvbnRhaW5zX18oIkJ1aWxkaW5n Iik6Cj4gKyAgICAgICAgICAgIHJldHVybiBTdGF0ZS5CVUlMRElORwo+ICsgICAgICAgIGVsaWYg bWVzc2FnZS5fX2NvbnRhaW5zX18oIkluc3RhbGxpbmciKToKPiArICAgICAgICAgICAgcmV0dXJu IFN0YXRlLklOU1RBTExJTkcKPiArICAgICAgICBlbHNlOgo+ICsgICAgICAgICAgICByZXR1cm4g Tm9uZQo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArCj4gKwo+ ICtjbGFzcyBUYXNrKCk6Cj4gKyAgICAiIiIKPiArICAgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJl bnQgc3RlcAo+ICsgICAgIiIiCj4gKwo+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnRf cGtnX3Byb2dyZXNzLCBzdGVwX3Byb2dyZXNzLAo+IHBrZ19zdGVwc19wcm9ncmVzcywgZG93bmxv YWRlcik6Cj4gKyAgICAgICAgc2VsZi5jdXJyZW50X3BrZ19wcm9ncmVzcyA9IGN1cnJlbnRfcGtn X3Byb2dyZXNzCj4gKyAgICAgICAgc2VsZi5zdGVwX3Byb2dyZXNzID0gc3RlcF9wcm9ncmVzcwo+ ICsgICAgICAgIHNlbGYucGtnX3N0ZXBzX3Byb2dyZXNzID0gcGtnX3N0ZXBzX3Byb2dyZXNzCj4g KyAgICAgICAgc2VsZi5kb3dubG9hZGVyID0gZG93bmxvYWRlcgo+ICsKPiArICAgICAgICBzZWxm LnBrZ190YXNrX2lkID0gTm9uZQo+ICsgICAgICAgIHNlbGYuc3RlcF90YXNrX2lkID0gTm9uZQo+ ICsgICAgICAgIHNlbGYucGtnX3N0ZXBfdGFza19pZCA9IE5vbmUKPiArICAgICAgICBzZWxmLmRv d25sb2FkaW5nX3Rhc2tfaWQgPSBOb25lCj4gKyAgICAgICAgc2VsZi5zdGF0ZSA9IE5vbmUKPiAr ICAgICAgICBzZWxmLm5hbWUgPSBOb25lCj4gKwo+ICsgICAgZGVmIF9fZGVsX18oc2VsZik6Cj4g KyAgICAgICAgaWYgc2VsZi5wa2dfdGFza19pZCBpcyBub3QgTm9uZToKPiArICAgICAgICAgICAg c2VsZi5jdXJyZW50X3BrZ19wcm9ncmVzcy5zdG9wX3Rhc2soc2VsZi5wa2dfdGFza19pZCkKPiAr ICAgICAgICAgICAgc2VsZi5wa2dfdGFza19pZCA9IE5vbmUKPiArICAgICAgICBpZiBzZWxmLnN0 ZXBfdGFza19pZCBpcyBub3QgTm9uZToKPiArICAgICAgICAgICAgc2VsZi5zdGVwX3Byb2dyZXNz LnN0b3BfdGFzayhzZWxmLnN0ZXBfdGFza19pZCkKPiArICAgICAgICAgICAgc2VsZi5zdGVwX3By b2dyZXNzLnVwZGF0ZShzZWxmLnN0ZXBfdGFza19pZCwgdmlzaWJsZT1GYWxzZSkKPiArICAgICAg ICAgICAgc2VsZi5zdGVwX3Rhc2tfaWQgPSBOb25lCj4gKyAgICAgICAgaWYgc2VsZi5wa2dfc3Rl cF90YXNrX2lkIGlzIG5vdCBOb25lOgo+ICsgICAgICAgICAgICBzZWxmLnBrZ19zdGVwc19wcm9n cmVzcy5zdG9wX3Rhc2soc2VsZi5wa2dfc3RlcF90YXNrX2lkKQo+ICsgICAgICAgICAgICBzZWxm LnBrZ19zdGVwc19wcm9ncmVzcy51cGRhdGUoc2VsZi5wa2dfc3RlcF90YXNrX2lkLAo+IHZpc2li bGU9RmFsc2UpCj4gKyAgICAgICAgICAgIHNlbGYucGtnX3N0ZXBfdGFza19pZCA9IE5vbmUKPiAr ICAgICAgICBpZiBzZWxmLmRvd25sb2FkaW5nX3Rhc2tfaWQgaXMgbm90IE5vbmU6Cj4gKyAgICAg ICAgICAgIHNlbGYuZG93bmxvYWRlci5zdG9wX3Rhc2soc2VsZi5kb3dubG9hZGluZ190YXNrX2lk KQo+ICsgICAgICAgICAgICBzZWxmLmRvd25sb2FkZXIudXBkYXRlKHNlbGYuZG93bmxvYWRpbmdf dGFza19pZCwgdmlzaWJsZT1GYWxzZSkKPiArICAgICAgICAgICAgc2VsZi5kb3dubG9hZGluZ190 YXNrX2lkID0gTm9uZQo+ICsgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKPiArICAgICAgICBzZWxm LnNhdGUgPSBTdGF0ZS5ET05FCj4gKwo+ICsgICAgZGVmIHVwZGF0ZShzZWxmLCBuZXdfc3RhdGUs IG5ld19zdGVwPU5vbmUpIC0+IE5vbmU6Cj4gKyAgICAgICAgc2VsZi5zdGF0ZSA9IG5ld19zdGF0 ZQo+ICsKPiArICAgICAgICBpZiBzZWxmLmRvd25sb2FkaW5nX3Rhc2tfaWQgaXMgbm90IE5vbmUg YW5kIFN0YXRlLkRPV05MT0FESU5HICE9Cj4gc2VsZi5zdGF0ZToKPiArICAgICAgICAgICAgc2Vs Zi5kb3dubG9hZGVyLnN0b3BfdGFzayhzZWxmLmRvd25sb2FkaW5nX3Rhc2tfaWQpCj4gKyAgICAg ICAgICAgIHNlbGYuZG93bmxvYWRlci51cGRhdGUoc2VsZi5kb3dubG9hZGluZ190YXNrX2lkLCB2 aXNpYmxlPUZhbHNlKQo+ICsgICAgICAgICAgICBzZWxmLmRvd25sb2FkaW5nX3Rhc2tfaWQgPSBO b25lCj4gKwo+ICsgICAgICAgIGlmIHNlbGYuc3RlcF90YXNrX2lkIGlzIG5vdCBOb25lOgo+ICsg ICAgICAgICAgICBzZWxmLnN0ZXBfcHJvZ3Jlc3Muc3RvcF90YXNrKHNlbGYuc3RlcF90YXNrX2lk KQo+ICsgICAgICAgICAgICBzZWxmLnN0ZXBfcHJvZ3Jlc3MudXBkYXRlKHNlbGYuc3RlcF90YXNr X2lkLCB2aXNpYmxlPUZhbHNlKQo+ICsgICAgICAgIGlmIG5ld19zdGVwIGlzIG5vdCBOb25lOgo+ ICsgICAgICAgICAgICBzZWxmLnN0ZXBfdGFza19pZCA9IHNlbGYuc3RlcF9wcm9ncmVzcy5hZGRf dGFzaygiIiwgc3RlcD1uZXdfc3RlcCwKPiBuYW1lPXNlbGYubmFtZSkKPiArICAgICAgICBlbHNl Ogo+ICsgICAgICAgICAgICBzZWxmLnN0ZXBfdGFza19pZCA9IE5vbmUKPiArICAgICAgICBpZiBz ZWxmLnBrZ19zdGVwX3Rhc2tfaWQgaXMgbm90IE5vbmU6Cj4gKyAgICAgICAgICAgIHNlbGYucGtn X3N0ZXBzX3Byb2dyZXNzLnVwZGF0ZShzZWxmLnBrZ19zdGVwX3Rhc2tfaWQsCj4gY29tcGxldGVk PXNlbGYuc3RhdGUudmFsdWUpCj4gKwo+ICsgICAgZGVmIG5leHQoc2VsZiwgbmV3X25hbWUsIG5l d19zdGF0ZSwgbmV3X3N0ZXA9Tm9uZSkgLT4gTm9uZToKPiArICAgICAgICBpZiBzZWxmLnBrZ190 YXNrX2lkIGlzIG5vdCBOb25lOgo+ICsgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGtnX3Byb2dy ZXNzLnN0b3BfdGFzayhzZWxmLnBrZ190YXNrX2lkKQo+ICsgICAgICAgICAgICBzZWxmLmN1cnJl bnRfcGtnX3Byb2dyZXNzLnVwZGF0ZShzZWxmLnBrZ190YXNrX2lkLAo+IGRlc2NyaXB0aW9uPSJb Ym9sZCBncmVlbl0lcyBkb25lISIgJSBzZWxmLm5hbWUpCj4gKwo+ICsgICAgICAgIGlmIHNlbGYu c3RlcF90YXNrX2lkIGlzIG5vdCBOb25lOgo+ICsgICAgICAgICAgICBzZWxmLnN0ZXBfcHJvZ3Jl c3Muc3RvcF90YXNrKHNlbGYuc3RlcF90YXNrX2lkKQo+ICsgICAgICAgICAgICBzZWxmLnN0ZXBf cHJvZ3Jlc3MudXBkYXRlKHNlbGYuc3RlcF90YXNrX2lkLCB2aXNpYmxlPUZhbHNlKQo+ICsKPiAr ICAgICAgICBpZiBzZWxmLnBrZ19zdGVwX3Rhc2tfaWQgaXMgbm90IE5vbmU6Cj4gKyAgICAgICAg ICAgIHNlbGYucGtnX3N0ZXBzX3Byb2dyZXNzLnN0b3BfdGFzayhzZWxmLnBrZ19zdGVwX3Rhc2tf aWQpCj4gKyAgICAgICAgICAgIHNlbGYucGtnX3N0ZXBzX3Byb2dyZXNzLnVwZGF0ZShzZWxmLnBr Z19zdGVwX3Rhc2tfaWQsCj4gdmlzaWJsZT1GYWxzZSkKPiArICAgICAgICAgICAgc2VsZi5wa2df c3RlcF90YXNrX2lkID0gTm9uZQo+ICsKPiArICAgICAgICBpZiBzZWxmLmRvd25sb2FkaW5nX3Rh c2tfaWQgaXMgbm90IE5vbmU6Cj4gKyAgICAgICAgICAgIHNlbGYuZG93bmxvYWRlci5zdG9wX3Rh c2soc2VsZi5kb3dubG9hZGluZ190YXNrX2lkKQo+ICsgICAgICAgICAgICBzZWxmLmRvd25sb2Fk ZXIudXBkYXRlKHNlbGYuZG93bmxvYWRpbmdfdGFza19pZCwgdmlzaWJsZT1GYWxzZSkKPiArICAg ICAgICAgICAgc2VsZi5kb3dubG9hZGluZ190YXNrX2lkID0gTm9uZQo+ICsKPiArICAgICAgICBz ZWxmLm5hbWUgPSBuZXdfbmFtZQo+ICsgICAgICAgIHNlbGYuc3RhdGUgPSBuZXdfc3RhdGUKPiAr Cj4gKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBub3QgTm9uZToKPiArICAgICAgICAgICAgc2Vs Zi5zdGVwX3Rhc2tfaWQgPSBzZWxmLnN0ZXBfcHJvZ3Jlc3MuYWRkX3Rhc2soIiIsIHN0ZXA9bmV3 X3N0ZXAsCj4gbmFtZT1zZWxmLm5hbWUpCj4gKyAgICAgICAgaWYgIkZpbmlzaGluZyIgPT0gc2Vs Zi5uYW1lOgo+ICsgICAgICAgICAgICBzZWxmLnBrZ190YXNrX2lkID0gc2VsZi5jdXJyZW50X3Br Z19wcm9ncmVzcy5hZGRfdGFzaygiJXMiICUKPiBzZWxmLm5hbWUpCj4gKyAgICAgICAgZWxzZToK PiArICAgICAgICAgICAgc2VsZi5wa2dfc3RlcF90YXNrX2lkID0gc2VsZi5wa2dfc3RlcHNfcHJv Z3Jlc3MuYWRkX3Rhc2soIiIsCj4gdG90YWw9U3RhdGUuRE9ORS52YWx1ZSwgbmFtZT1zZWxmLm5h bWUpCj4gKyAgICAgICAgICAgIHNlbGYucGtnX3Rhc2tfaWQgPSBzZWxmLmN1cnJlbnRfcGtnX3By b2dyZXNzLmFkZF90YXNrKCJXb3JraW5nIG9uCj4gJXMiICUgc2VsZi5uYW1lKQo+ICsKPiArIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArCj4gKwo+ICtkZWYgaGFuZGxlX3Rh c2tfdXBkYXRlKGN1cnJlbnQsIG1lc3NhZ2UpIC0+IGJvb2w6Cj4gKyAgICAiIiIKPiArICAgIEhh bmRsZSBzdGVwIHVwZGF0ZSBhbmQgZGV0ZWN0IHRhc2sgc3dpdGNoaW5nCj4gKyAgICAiIiIKPiAr ICAgIGZpbmlzaGVkID0gRmFsc2UKPiArICAgIG1lc3NhZ2VfYXJyYXkgPSBtZXNzYWdlLnNwbGl0 KCI+Pj4gIilbMV0uc3BsaXQoIiAiKQo+ICsKPiArICAgIG5hbWUgPSAiW2JdIiArIG1lc3NhZ2Vf YXJyYXlbMF0gKyAiWy9iXSIKPiArICAgIGlmIGxlbihtZXNzYWdlX2FycmF5KSA+PSAzOgo+ICsg ICAgICAgIG5hbWUgPSBuYW1lICsgIiAiICsgbWVzc2FnZV9hcnJheVsxXQo+ICsgICAgICAgIHN0 ZXAgPSBtZXNzYWdlX2FycmF5WzI6XQo+ICsgICAgZWxzZToKPiArICAgICAgICBzdGVwID0gbWVz c2FnZV9hcnJheVsxOl0KPiArICAgIGlmIG1lc3NhZ2UuX19jb250YWluc19fKCI+Pj4gICAiKToK PiArICAgICAgICBuYW1lID0gIkZpbmlzaGluZyIgICMgUmVzZXQgZm9yIHRoZSBsYXN0IGZldyB0 YXNrcwo+ICsKPiArICAgIHN0ZXAgPSAnICcuam9pbihzdHIoeCkgZm9yIHggaW4gc3RlcCkKPiAr ICAgIHN0YXRlID0gU3RhdGUuZ2V0X2Zyb21fbWVzc2FnZShzdGVwKQo+ICsKPiArICAgIGlmIGN1 cnJlbnQubmFtZSBpcyBOb25lOgo+ICsgICAgICAgIGN1cnJlbnQubmV4dChuYW1lLCBzdGF0ZSwg c3RlcCkKPiArICAgIGVsaWYgbmFtZSAhPSBjdXJyZW50Lm5hbWU6Cj4gKyAgICAgICAgZmluaXNo ZWQgPSBUcnVlCj4gKyAgICAgICAgY3VycmVudC51cGRhdGUoU3RhdGUuRE9ORSkKPiArICAgICAg ICBpZiBzdGF0ZSBpcyBOb25lOgo+ICsgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlLlJFQURZCj4g KyAgICAgICAgY3VycmVudC5uZXh0KG5hbWUsIHN0YXRlLCBzdGVwKQo+ICsgICAgZWxpZiBzdGF0 ZSBpcyBOb25lOgo+ICsgICAgICAgIHN0YXRlID0gY3VycmVudC5zdGF0ZQo+ICsKPiArICAgIGN1 cnJlbnQudXBkYXRlKHN0YXRlLCBzdGVwKQo+ICsgICAgcmV0dXJuIGZpbmlzaGVkCj4gKwo+ICsj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsKPiArCj4gK2RlZiBoYW5kbGVf ZG93bmxvYWRpbmcoY3VycmVudCwgbWVzc2FnZSwgc3RlcCkgLT4gTm9uZToKPiArICAgICIiIgo+ ICsgICAgSGFuZGxlIGFsbCB0aGF0IGlzIGFib3V0IGRvd25sb2FkaW5nICh3Z2V0IG9ubHkgZm9y IG5vdykKPiArICAgICIiIgo+ICsKPiArICAgIGxvZy5kZWJ1ZyhtZXNzYWdlKQo+ICsKPiArICAg IGlmIGN1cnJlbnQuZG93bmxvYWRpbmdfdGFza19pZCBpcyBOb25lOgo+ICsgICAgICAgIGN1cnJl bnQuZG93bmxvYWRpbmdfdGFza19pZCA9IGN1cnJlbnQuZG93bmxvYWRlci5hZGRfdGFzaygiIiwK PiB0b3RhbD1Ob25lLCBmaWxlbmFtZT0iPyIpCj4gKwo+ICsgICAgaWYgRG93bmxvYWRTdGVwLkxF TkdUSCA9PSBzdGVwOgo+ICsgICAgICAgIGN1cnJlbnQuZG93bmxvYWRlci51cGRhdGUoY3VycmVu dC5kb3dubG9hZGluZ190YXNrX2lkLAo+IHRvdGFsPWludChtZXNzYWdlLnNwbGl0KCJMZW5ndGg6 ICIpWzFdLnNwbGl0KCIgKCIpWzBdKSkKPiArICAgIGVsaWYgRG93bmxvYWRTdGVwLk9VVFBVVCA9 PSBzdGVwOgo+ICsgICAgICAgIGN1cnJlbnQuZG93bmxvYWRlci51cGRhdGUoY3VycmVudC5kb3du bG9hZGluZ190YXNrX2lkLAo+IGZpbGVuYW1lPW1lc3NhZ2Uuc3BsaXQoIm91dHB1dCcgJyIpWzFd KQo+ICsgICAgZWxpZiBEb3dubG9hZFN0ZXAuUFJPR1JFU1MgPT0gc3RlcDoKPiArICAgICAgICBp ZiBtZXNzYWdlLl9fY29udGFpbnNfXygiIC4iKToKPiArICAgICAgICAgICAgZG93bmxvYWRlZF9z aXplID0gbWVzc2FnZS5zcGxpdCgiIC4iKVswXQo+ICsgICAgICAgIGVsc2U6Cj4gKyAgICAgICAg ICAgIGRvd25sb2FkZWRfc2l6ZSA9IG1lc3NhZ2Uuc3BsaXQoIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAo+ICAgICAgICAgICAgICAgICAgICAgICIpWzBdCj4gKyAgICAgICAgZG93 bmxvYWRlZF9zaXplLnN0cmlwKCkudXBwZXIoKS5yZXBsYWNlKCJPIiwgIiIpLnJlcGxhY2UoIkIi LAo+ICIiKS5yZXBsYWNlKCJJIiwgIiIpCj4gKyAgICAgICAgaWYgZG93bmxvYWRlZF9zaXplLl9f Y29udGFpbnNfXygiSyIpOgo+ICsgICAgICAgICAgICBkb3dubG9hZGVkX3NpemUgPSBpbnQoZG93 bmxvYWRlZF9zaXplLnJlcGxhY2UoIksiLCAiIikpICogMTAwMAo+ICsgICAgICAgIGVsaWYgZG93 bmxvYWRlZF9zaXplLl9fY29udGFpbnNfXygiTSIpOgo+ICsgICAgICAgICAgICBkb3dubG9hZGVk X3NpemUgPSBpbnQoZG93bmxvYWRlZF9zaXplLnJlcGxhY2UoIk0iLCAiIikpICogMTAwMDAwMAo+ ICsgICAgICAgIGVsaWYgZG93bmxvYWRlZF9zaXplLl9fY29udGFpbnNfXygiRyIpOgo+ICsgICAg ICAgICAgICBkb3dubG9hZGVkX3NpemUgPSBpbnQoZG93bmxvYWRlZF9zaXplLnJlcGxhY2UoIkci LCAiIikpICoKPiAxMDAwMDAwMDAwCj4gKyAgICAgICAgZWxpZiBkb3dubG9hZGVkX3NpemUuX19j b250YWluc19fKCJUIik6Cj4gKyAgICAgICAgICAgIGRvd25sb2FkZWRfc2l6ZSA9IGludChkb3du bG9hZGVkX3NpemUucmVwbGFjZSgiVCIsICIiKSkgKgo+IDEwMDAwMDAwMDAwMDAKPiArICAgICAg ICBjdXJyZW50LmRvd25sb2FkZXIudXBkYXRlKGN1cnJlbnQuZG93bmxvYWRpbmdfdGFza19pZCwK PiBjb21wbGV0ZWQ9aW50KGRvd25sb2FkZWRfc2l6ZSkpCj4gKyAgICBlbGlmIERvd25sb2FkU3Rl cC5ET05FID09IHN0ZXA6Cj4gKyAgICAgICAgY3VycmVudC5kb3dubG9hZGVyLnN0b3BfdGFzayhj dXJyZW50LmRvd25sb2FkaW5nX3Rhc2tfaWQpCj4gKyAgICAgICAgY3VycmVudC5kb3dubG9hZGVy LnVwZGF0ZShjdXJyZW50LmRvd25sb2FkaW5nX3Rhc2tfaWQsIHZpc2libGU9RmFsc2UpCj4gKyAg ICAgICAgY3VycmVudC5kb3dubG9hZGluZ190YXNrX2lkID0gTm9uZQo+ICsKPiArIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArCj4gKwo+ICtkZWYgd2hpY2goZXhlY19uYW1l LCBwYWNrYWdlPU5vbmUsIGRlc2lyZWRfdmVyc2lvbj1Ob25lLAo+IHZlcnNpb25fdHVwbGVfY2F0 Y2hlcj1Ob25lLCBwYXRoPU5vbmUpIC0+IGJvb2w6Cj4gKyAgICAiIiIKPiArICAgIFVzZWQgdG8g ZmluZCBpZiBhIGJpbmFyeSBpcyBwcmVzZW50IChhbmQgdXNhYmxlKSBvbiB0aGUgc3lzdGVtCj4g KyAgICBDYW4gYWxzbyBjaGVjayBmb3IgbWluaW1hbCB2ZXJzaW9uIChhcyBsb25nIGFzIHRoZSBi aW5hcnkgdXNlIC0tdmVyc2lvbikKPiArICAgIEFuZCBtYXkgYWxzbyBjaGVjayBpZiB0aGUgcGF0 aCBpcyB0aGUgcmVxdWlyZWQgb25lCj4gKyAgICAiIiIKPiArICAgIGdsb2JhbCBjb25zb2xlCj4g KyAgICBpZiBwYWNrYWdlIGlzIE5vbmU6Cj4gKyAgICAgICAgcGFja2FnZSA9IGV4ZWNfbmFtZQo+ ICsKPiArICAgIHAgPSBzaHV0aWwud2hpY2goZXhlY19uYW1lKQo+ICsgICAgaWYgcCBpcyBOb25l Ogo+ICsgICAgICAgIGNvbnNvbGUucHJpbnQoZiIgICAgW3JlZDFdOmNyb3NzX21hcms6IFtiXXtw YWNrYWdlfVsvYl0gaXMgcmVxdWlyZWQKPiBidXQgY2Fubm90IGZpbmQgaXQgaW4gdGhlIFBBVEgi KQo+ICsgICAgICAgIHJldHVybiBGYWxzZQo+ICsgICAgZWxpZiBwYXRoIGlzIG5vdCBOb25lIGFu ZCBwYXRoICE9IHA6Cj4gKyAgICAgICAgY29uc29sZS5wcmludCgKPiArICAgICAgICAgICAgZiIg ICAgW29yYW5nZV9yZWQxXTpub19lbnRyeTogW2Jde3BhY2thZ2V9Wy9iXSBpcyBmb3VuZCBidXQg d2UKPiBuZWVkIGl0IHRvIGJlIGluIGEgc3BlY2lmaWMgbG9jYXRpb246IHtwfSAtLT4ge3BhdGh9 IikKPiArICAgICAgICByZXR1cm4gRmFsc2UKPiArICAgIGVsaWYgZGVzaXJlZF92ZXJzaW9uIGlz IG5vdCBOb25lOgo+ICsgICAgICAgIGlmIHZlcnNpb25fdHVwbGVfY2F0Y2hlciBpcyBub3QgTm9u ZToKPiArICAgICAgICAgICAgbG9jYWxfdmVyc2lvbiA9IHN1YnByb2Nlc3MucnVuKFtwLCAiLS12 ZXJzaW9uIl0sCj4gc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2hlY2s9VHJ1ZSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4gdGV4dD1UcnVlKS5zdGRvdXQu c3BsaXQodmVyc2lvbl90dXBsZV9jYXRjaGVyWzBdKVsxXS5zcGxpdCh2ZXJzaW9uX3R1cGxlX2Nh dGNoZXJbMV0pWzBdCj4gKyAgICAgICAgICAgIGlmIHZlcnNpb24ucGFyc2UobG9jYWxfdmVyc2lv bikgPCB2ZXJzaW9uLnBhcnNlKGRlc2lyZWRfdmVyc2lvbik6Cj4gKyAgICAgICAgICAgICAgICBj b25zb2xlLnByaW50KAo+ICsgICAgICAgICAgICAgICAgICAgIGYiICAgIFtvcmFuZ2UxXTpleGNs YW1hdGlvbl9tYXJrOiBbYl17cGFja2FnZX1bL2JdIGlzCj4gZm91bmQgYnV0IHdlIHJlcXVpcmUg YXQgbGVhc3QgdGhlIHZlcnNpb24ge2Rlc2lyZWRfdmVyc2lvbn0gYW5kIHlvdSBoYXZlIHRoZQo+ IHZlcnNpb24ge2xvY2FsX3ZlcnNpb259IikKPiArICAgICAgICAgICAgICAgIHJldHVybiBGYWxz ZQo+ICsgICAgICAgIGVsc2U6Cj4gKyAgICAgICAgICAgIGNvbnNvbGUucHJpbnQoCj4gKyAgICAg ICAgICAgICAgICBmIiAgICBbb3JhbmdlMV06ZXhjbGFtYXRpb25fbWFyazogW2Jde3BhY2thZ2V9 Wy9iXSBpcyBmb3VuZAo+IGJ1dCB3ZSByZXF1aXJlIGF0IGxlYXN0IHRoZSB2ZXJzaW9uIHtkZXNp cmVkX3ZlcnNpb259IikKPiArICAgICAgICAgICAgcmV0dXJuIEZhbHNlCj4gKyAgICBjb25zb2xl LnByaW50KGYiICAgIFtncmVlbjRdOmhlYXZ5X2NoZWNrX21hcms6ICBbYl17cGFja2FnZX1bL2Jd IGlzIGZvdW5kCj4gYW5kIHVzYWJsZSIpCj4gKyAgICByZXR1cm4gVHJ1ZQo+ICsKPiArIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArCj4gKwo+ICtkZWYgdGVzdF9kZXBlbmNl bmNpZXModG9vbHNfbGlzdCkgLT4gYm9vbDoKPiArICAgICIiIgo+ICsgICAgU2ltcGx5IGhhbmRs ZSBjYWxsaW5nIHdoaWNoKCkgZnJvbSBhIGxpc3Qgb2YgdG9vbHMKPiArICAgICIiIgo+ICsgICAg aXNfYWxsX29rID0gVHJ1ZQo+ICsgICAgZm9yIHRvb2wgaW4gdG9vbHNfbGlzdDoKPiArICAgICAg ICBpZiBub3Qgd2hpY2godG9vbFswXSwgdG9vbFsxXSwgdG9vbFsyXSwgdG9vbFszXSwgdG9vbFs0 XSk6Cj4gKyAgICAgICAgICAgIGlzX2FsbF9vayA9IEZhbHNlCj4gKyAgICByZXR1cm4gaXNfYWxs X29rCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsKPiArCj4g KyMgd2hpY2goYmluYXJ5KSwgcGFja2FnZVtiaW5hcnldLCBtaW5pbWFsIHZlcnNpb24sIHZlcnNp b25fdHVwbGVfY2F0Y2hlciwKPiByZXF1aXJlZCBwYXRoCj4gK2J1aWxkX3Rvb2xzX2xpc3QgPSBb Cj4gKyAgICAoIndoaWNoIiwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCj4gKyAgICAoInNlZCIs IE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAo+ICsgICAgKCJtYWtlIiwgTm9uZSwgIjMuODEiLCAo IkdOVSBNYWtlICIsICJcbiIpLCBOb25lKSwKPiArICAgICgibGQiLCAiYmludXRpbHMiLCBOb25l LCBOb25lLCBOb25lKSwKPiArICAgICgiZGlmZiIsICJkaWZmdXRpbHMiLCBOb25lLCBOb25lLCBO b25lKSwKPiArICAgICgiZ2NjIiwgTm9uZSwgIjQuOCIsICgiZ2NjIChHQ0MpICIsICJcbiIpLCBO b25lKSwKPiArICAgICgiZysrIiwgTm9uZSwgIjQuOCIsICgiZysrIChHQ0MpICIsICJcbiIpLCBO b25lKSwKPiArICAgICgiYmFzaCIsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAo+ICsgICAgKCJw YXRjaCIsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAo+ICsgICAgKCJnemlwIiwgTm9uZSwgTm9u ZSwgTm9uZSwgTm9uZSksCj4gKyAgICAoImJ6aXAyIiwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSks Cj4gKyAgICAoInBlcmwiLCBOb25lLCAiNS44LjciLCAoIiAodiIsICIpIGJ1aWx0IGZvciIpLCBO b25lKSwKPiArICAgICgidGFyIiwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCj4gKyAgICAoImNw aW8iLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKPiArICAgICgidW56aXAiLCBOb25lLCBOb25l LCBOb25lLCBOb25lKSwKPiArICAgICgicnN5bmMiLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwK PiArICAgICgiZmlsZSIsIE5vbmUsIE5vbmUsIE5vbmUsICIvdXNyL2Jpbi9maWxlIiksCj4gKyAg ICAoImJjIiwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCj4gKyAgICAoImZpbmQiLCAiZmluZHV0 aWxzIiwgTm9uZSwgTm9uZSwgTm9uZSkKPiArXQo+ICtzb3VyY2VfZmV0Y2hpbmdfdG9vbHNfbGlz dCA9IFsKPiArICAgICgid2dldCIsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpCj4gK10KPiArCj4g Kwo+ICtkZWYgY2hlY2tfcmVxdWlyZW1lbnRzKCkgLT4gYm9vbDoKPiArICAgICIiIgo+ICsgICAg TWFuYWdlIHRoZSBkaXNwbGF5IGFuZCBjaGVja2luZyBmb3IgdGhlIHJlcXVpcmVkIHRvb2xzLCBz dG9wIGlmIGFueSBpcwo+IG1pc3NpbmcKPiArICAgICIiIgo+ICsgICAgZ2xvYmFsIGNvbnNvbGUK PiArICAgIHJlcXVpcmVtZW50c19vayA9IFRydWUKPiArICAgIGNvbnNvbGUucHJpbnQoIk1hbmRh dG9yeSBwYWNrYWdlczoiKQo+ICsgICAgd2l0aCBjb25zb2xlLnN0YXR1cygiW2JsdWVdTG9va2lu ZyBmb3IgbWFuZGF0b3J5IHBhY2thZ2VzLi4uIikgYXMgc3RhdHVzOgo+ICsgICAgICAgIGNvbnNv bGUucHJpbnQoIiAgW2ldQnVpbGQgdG9vbHM6IikKPiArICAgICAgICByZXF1aXJlbWVudHNfb2sg PSB0ZXN0X2RlcGVuY2VuY2llcyhidWlsZF90b29sc19saXN0KSBhbmQKPiByZXF1aXJlbWVudHNf b2sKPiArICAgICAgICBjb25zb2xlLnByaW50KCIgIFtpXVNvdXJjZSBmZXRjaGluZyB0b29sczoi KQo+ICsgICAgICAgIHJlcXVpcmVtZW50c19vayA9IHRlc3RfZGVwZW5jZW5jaWVzKHNvdXJjZV9m ZXRjaGluZ190b29sc19saXN0KSBhbmQKPiByZXF1aXJlbWVudHNfb2sKPiArICAgIGlmIG5vdCBy ZXF1aXJlbWVudHNfb2s6Cj4gKyAgICAgICAgY29uc29sZS5wcmludCgiXG5NYW5kYXRvcnkgcHJv Z3JhbSBhcmUgW3VdbWlzc2luZ1svdV0iKQo+ICsgICAgICAgIGNvbnNvbGUucHJpbnQoInlvdSBt dXN0IGluc3RhbGwgdGhlbSBiZWZvcmUgcmV0cnlpbmchIikKPiArICAgIHJldHVybiByZXF1aXJl bWVudHNfb2sKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKwo+ ICsKPiArcmVjb21tYW5kZWRfZGVwZW5kZW5jaWVzX2xpc3QgPSBbCj4gKyAgICAoInB5dGhvbiIs IE5vbmUsICIyLjciLCAoIlB5dGhvbiAiLCAiXG4iKSwgTm9uZSkKPiArXQo+ICtjb25maWd1cmF0 aW9uX2ludGVyZmFjZV9kZXBlbmRlbmNpZXNfbGlzdCA9IFsKPiArICAgICgibmN1cnNlc3c1LWNv bmZpZyIsICJuY3Vyc2VzNSIsIE5vbmUsIE5vbmUsIE5vbmUpLCAgIyBtZW51Y29uZmlnCj4gKyAg ICAoInF0ZGlhZy1xdDUiLCAicXQ1IiwgTm9uZSwgTm9uZSwgTm9uZSksICAjIHhjb25maWcKPiAr ICAgICgiZ2xpYi1jb21waWxlLXNjaGVtYXMiLCAiZ2xpYjIiLCBOb25lLCBOb25lLCBOb25lKSwg ICMgZ2NvbmZpZwo+ICsgICAgKCJndGstbGF1bmNoIiwgImd0azIiLCBOb25lLCBOb25lLCBOb25l KSwgICMgZ2NvbmZpZwo+ICsgICAgKCJnbGFkZSIsICJnbGFkZTIiLCBOb25lLCBOb25lLCBOb25l KSAgIyBnY29uZmlnCj4gK10KPiArb3B0X3NvdXJjZV9mZXRjaGluZ190b29sc19saXN0ID0gWwo+ ICsgICAgKCJienIiLCAiYmF6YWFyIiwgTm9uZSwgTm9uZSwgTm9uZSksCj4gKyAgICAoImN2cyIs IE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAo+ICsgICAgKCJnaXQiLCBOb25lLCBOb25lLCBOb25l LCBOb25lKSwKPiArICAgICgiaGciLCAibWVyY3VyaWFsIiwgTm9uZSwgTm9uZSwgTm9uZSksCj4g KyAgICAoInNjcCIsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAo+ICsgICAgKCJzZnRwIiwgTm9u ZSwgTm9uZSwgTm9uZSwgTm9uZSksCj4gKyAgICAoInN2biIsICJzdWJ2ZXJzaW9uIiwgTm9uZSwg Tm9uZSwgTm9uZSkKPiArXQo+ICtqYXZhX3JlbGF0ZWRfcGFja2FnZXNfbGlzdCA9IFsKPiArICAg ICgiamF2YWMiLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKPiArICAgICgiamFyIiwgTm9uZSwg Tm9uZSwgTm9uZSwgTm9uZSkKPiArXQo+ICtkb2N1bWVudGF0aW9uX2dlbmVyYXRpb25fdG9vbHNf bGlzdCA9IFsKPiArICAgICgiYXNjaWlkb2MiLCBOb25lLCAiOC42LjMiLCAoImFzY2lpZG9jICIs ICJcbiIpLCBOb25lKSwKPiArICAgICgidzNtIiwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCj4g KyAgICAoImRibGF0ZXgiLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSAgIyBPbmx5IGZvciBQREYg bWFudWFsCj4gK10KPiArZ3JhcGhfZ2VuZXJhdGlvbl90b29sc19saXN0ID0gWwo+ICsgICAgKCJn dmdlbiIsICJncmFwaHZpeiIsIE5vbmUsIE5vbmUsIE5vbmUpCj4gK10KPiArCj4gKwo+ICtkZWYg Y2hlY2tfb3B0aW9uYWxfcGFja2FnZXMoKSAtPiBib29sOgo+ICsgICAgIiIiCj4gKyAgICBNYW5h Z2UgdGhlIGRpc3BsYXkgYW5kIGNoZWNraW5nIGZvciB0aGUgb3B0aW9uYWwgdG9vbHMsIGNvbnRp bnVlIHdpdGggYQo+IHdhcm5pbmcgaWYgYW55IGlzIG1pc3NpbmcKPiArICAgICIiIgo+ICsgICAg Z2xvYmFsIGNvbnNvbGUKPiArICAgIG9wdF9vayA9IFRydWUKPiArICAgIGNvbnNvbGUucHJpbnQo Ik9wdGlvbmFsIHBhY2thZ2VzOiIpCj4gKyAgICB3aXRoIGNvbnNvbGUuc3RhdHVzKCJbYmx1ZV1M b29raW5nIGZvciBvcHRpb25hbCBwYWNrYWdlcy4uLiIpIGFzIHN0YXR1czoKPiArICAgICAgICBj b25zb2xlLnByaW50KCIgIFtpXVJlY29tbWVuZGVkIGRlcGVuZGVuY2llczoiKQo+ICsgICAgICAg IG9wdF9vayA9IHRlc3RfZGVwZW5jZW5jaWVzKHJlY29tbWFuZGVkX2RlcGVuZGVuY2llc19saXN0 KSBhbmQgb3B0X29rCj4gKyAgICAgICAgY29uc29sZS5wcmludCgiICBbaV1Db25maWd1cmF0aW9u IGludGVyZmFjZSBkZXBlbmRlbmNpZXM6IikKPiArICAgICAgICBvcHRfb2sgPSB0ZXN0X2RlcGVu Y2VuY2llcyhjb25maWd1cmF0aW9uX2ludGVyZmFjZV9kZXBlbmRlbmNpZXNfbGlzdCkKPiBhbmQg b3B0X29rCj4gKyAgICAgICAgY29uc29sZS5wcmludCgiICBbaV1Tb3VyY2UgZmV0Y2hpbmcgdG9v bHM6IikKPiArICAgICAgICBvcHRfb2sgPSB0ZXN0X2RlcGVuY2VuY2llcyhvcHRfc291cmNlX2Zl dGNoaW5nX3Rvb2xzX2xpc3QpIGFuZCBvcHRfb2sKPiArICAgICAgICBjb25zb2xlLnByaW50KCIg IFtpXUphdmEtcmVsYXRlZCBwYWNrYWdlcywgaWYgdGhlIEphdmEgQ2xhc3NwYXRoIG5lZWRzCj4g dG8gYmUgYnVpbHQgZm9yIHRoZSB0YXJnZXQgc3lzdGVtOiIpCj4gKyAgICAgICAgb3B0X29rID0g dGVzdF9kZXBlbmNlbmNpZXMoamF2YV9yZWxhdGVkX3BhY2thZ2VzX2xpc3QpIGFuZCBvcHRfb2sK PiArICAgICAgICBjb25zb2xlLnByaW50KCIgIFtpXURvY3VtZW50YXRpb24gZ2VuZXJhdGlvbiB0 b29sczoiKQo+ICsgICAgICAgIG9wdF9vayA9IHRlc3RfZGVwZW5jZW5jaWVzKGRvY3VtZW50YXRp b25fZ2VuZXJhdGlvbl90b29sc19saXN0KSBhbmQKPiBvcHRfb2sKPiArICAgICAgICBjb25zb2xl LnByaW50KCIgIFtpXUdyYXBoIGdlbmVyYXRpb24gdG9vbHM6IikKPiArICAgICAgICBvcHRfb2sg PSB0ZXN0X2RlcGVuY2VuY2llcyhncmFwaF9nZW5lcmF0aW9uX3Rvb2xzX2xpc3QpIGFuZCBvcHRf b2sKPiArICAgICAgICBjb25zb2xlLnByaW50KAo+ICsgICAgICAgICAgICAiICAgIFtncmF5Mzld OmludGVycm9iYW5nOiAgW2JdcHl0aG9uLW1hdHBsb3RsaWJbL2JdIGNhbm5vdCBiZQo+IGRldGVj dGVkIGF1dG9tYXRpY2x5LiBDaGVjayB5b3VyIGRpc3RyaWJ1dGlvbidzIHJlcG9zaXRvcmllcyBv ciBbaV1waXBbL2ldIikKPiArICAgIGlmIG5vdCBvcHRfb2s6Cj4gKyAgICAgICAgY29uc29sZS5w cmludCgiXG4+Pj4gU29tZSBvcHRpb25hbCBwcm9ncmFtIGFyZSBbdV1taXNzaW5nWy91XSwgc29t ZQo+IGZ1bmN0aW9uYWxpdGllcyBtYXkgbm90IGNvbXBpbGUgb3IgYmUgaW5jb21wbGV0ZSIpCj4g KyAgICByZXR1cm4gb3B0X29rCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwo+ICsKPiArCj4gKyMgc2tlbGV0b24gKDQpOiBob3N0LXNrZWxldG9uICYmIHNrZWxldG9u LWluaXQtY29tbW9uICYmCj4gc2tlbGV0b24taW5pdC0oc3lzdnxzeXN0ZW1kfG9wZW5yY3xub25l KSAmJiBza2VsZXRvbgo+ICsjIHRvb2xjYWhpbiAoMik6IHRvb2xjaGFpbiAmJiB0b29sY2hhaW4t YnVpbGRyb290Cj4gKyMgZ2NjKCsxKTogZ2NjIGJlY29tZSBob3N0LWdjYy1pbml0aWFsIGFuZCBo b3N0LWdjYy1maW5hbAo+ICsjIHZhcmlvdXMgKH40KTogaG9zdC1tYWtlZGV2cyAmJiBpZnVwZG93 bi1zY3JpcHRzICYmIGluaXRzY3JpcHRzICYmCj4gdXJhbmRvbS1zY3JpcHRzCj4gKyMgKzEgZm9y IHRoZSBsYXN0IHRhc2sgKGZpbmFsaXppbmcgaG9zdC90YXJnZXQgZGlyZWN0b3J5LCBzYW5pdGl6 aW5nIFJQQVRILAo+IGdlbmVyYXRpbmcgcm9vdCBmaWxlc3lzdGVtcyBhbmQgaW1hZ2Ugcm9vdGZz KQo+ICsjIEJVVC4uLi4gaW4gc29tZSBjYXNlIHRoaXMgbnVtYmVyIGlzbid0IHF1aXQgZXhhY3Qg KGVzcGVjaWFsbHkgdGhlICd2YXJpb3VzJwo+IHNlY3Rpb24pCj4gK2V4dHJhX3BhY2thZ2VzX3Rv X2NvdW50ID0gMTIKPiArCj4gKwo+ICtkZWYgbG9hZF9hbGxfdGFza3MoKSAtPiBOb25lOgo+ICsg ICAgIiIiCj4gKyAgICBMb2FkIHRoZSBleHRlcm5hbCBkZXBzIG9uIHdpdGNoIHdlIG5lZWQgdG8g d29yayBmb3IgdGhpcyBydW4KPiArICAgIGlmIGFuIGVycm9yIG9jY3VyZSwgaXQncyBwcm9iYWJs eSBiZWNhdXNlIHRoZSB1c2VyIGRpZG4ndCBkbyBhbnkgYG1ha2UKPiBtZW51Y29uZmlnYAo+ICsg ICAgIiIiCj4gKyAgICBnbG9iYWwgdG90YWxfcGtncwo+ICsgICAgZ2xvYmFsIGNvbnNvbGUKPiAr ICAgIHdpdGggY29uc29sZS5zdGF0dXMoIltib2xkXUxvYWRpbmcgY29uZmlnLCByZXF1ZXN0ZWQg cGFja2FnZXMgYW5kCj4gZGVwZW5kZW5jaWVzWy9ib2xkXSAoZGlkIHlvdSBydW4gYFtibHVlXW1h a2UgbWVudWNvbmZpZ1svYmx1ZV1gPykiLAo+IHNwaW5uZXI9ImFlc3RoZXRpYyIpIGFzIHN0YXR1 czoKPiArICAgICAgICBleHRlcm5hbF9kZXBzID0gc3VicHJvY2Vzcy5ydW4oWyJtYWtlIiwgImV4 dGVybmFsLWRlcHMiXSwKPiBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjaGVjaz1UcnVlLCB0ZXh0 PVRydWUpCj4gKyAgICByYXdfcGtnc19saXN0ID0gZXh0ZXJuYWxfZGVwcy5zdGRvdXQuc3BsaXRs aW5lcygpCj4gKwo+ICsgICAgIyBEbyBzb21lIGNsZWFuaW5nIGJlY2F1c2UgYWxsIHRoZSBwYXRj aGVzIGZpbGVzIGFyZW4ndCBwYWNrYWdlcwo+ICsgICAgcmVnZXggPSByZS5jb21waWxlKHInXi4q XC5wYXRjaC4qJCcpCj4gKyAgICB0b3RhbF9wa2dzID0gW3AgZm9yIHAgaW4gcmF3X3BrZ3NfbGlz dCBpZiBub3QgcmVnZXgubWF0Y2gocCldCj4gKwo+ICsgICAgY29uc29sZS5wcmludCgiSW4gdG90 YWwiLCAobGVuKHRvdGFsX3BrZ3MpICsgZXh0cmFfcGFja2FnZXNfdG9fY291bnQpLAo+ICJwYWNr YWdlcyB3aWxsIGJlIHByb2Nlc3NlZCBmb3IgdGhpcyBidWlsZHJvb3QiKQo+ICsKPiArIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArCj4gKwo+ICtkZWYgbWFpbigpIC0+IE5v bmU6Cj4gKyAgICAjIFRyYWNrIHRoZSBhdmVyYWxsIHByb2dyZXNzCj4gKyAgICBwa2dzX3Byb2dy ZXNzID0gUHJvZ3Jlc3MoCj4gKyAgICAgICAgVGltZUVsYXBzZWRDb2x1bW4oKSwKPiArICAgICAg ICBUZXh0Q29sdW1uKCJbYmx1ZV17dGFzay5kZXNjcmlwdGlvbn0iKSwKPiArICAgICAgICBCYXJD b2x1bW4oY29tcGxldGVfc3R5bGU9J3NsYXRlX2JsdWUxJyksCj4gKyAgICAgICAgTW9mTkNvbXBs ZXRlQ29sdW1uKCksCj4gKyAgICAgICAgVGFza1Byb2dyZXNzQ29sdW1uKCkKPiArICAgICkKPiAr ICAgICMgVHJhY2sgdGhlIGN1cnJlbnQgcHJvZ3Jlc3MgYW5kIHN0YXkgYWZ0ZXIgY29tcGxldGlv bgo+ICsgICAgY3VycmVudF9wa2dfcHJvZ3Jlc3MgPSBQcm9ncmVzcygKPiArICAgICAgICBUaW1l RWxhcHNlZENvbHVtbigpLAo+ICsgICAgICAgIFRleHRDb2x1bW4oInt0YXNrLmRlc2NyaXB0aW9u fSIpCj4gKyAgICApCj4gKyAgICAjIFByb2dyZXNzIGJhcnMgZm9yIHNpbmdsZSBwa2cgc3RlcHMg KHdpbGwgYmUgaGlkZGVuIHdoZW4gc3RlcCBpcyBkb25lKQo+ICsgICAgc3RlcF9wcm9ncmVzcyA9 IFByb2dyZXNzKAo+ICsgICAgICAgIFRleHRDb2x1bW4oIiAgICAgIiksCj4gKyAgICAgICAgU3Bp bm5lckNvbHVtbigpLAo+ICsgICAgICAgIFRleHRDb2x1bW4oIltib2xkIHB1cnBsZV17dGFzay5m aWVsZHNbc3RlcF19IikKPiArICAgICkKPiArICAgICMgUHJvZ3Jlc3MgYmFyIGZvciBjdXJyZW50 IHBrZyAocHJvZ3Jlc3MgaW4gc3RlcHMpCj4gKyAgICBwa2dfc3RlcHNfcHJvZ3Jlc3MgPSBQcm9n cmVzcygKPiArICAgICAgICBUZXh0Q29sdW1uKCJbYm9sZCBjeWFuXVByb2dyZXNzIGZvciBwa2cg e3Rhc2suZmllbGRzW25hbWVdfSIpLAo+ICsgICAgICAgIFNwaW5uZXJDb2x1bW4oInNpbXBsZURv dHNTY3JvbGxpbmciKSwKPiArICAgICAgICBUZXh0Q29sdW1uKCIoe3Rhc2suY29tcGxldGVkfSBv ZiB7dGFzay50b3RhbH0gc3RlcHMgZG9uZSkiKSwKPiArICAgICkKPiArICAgICMgVHJhY2sgYW55 IGRvd25sb2FkaW5nCj4gKyAgICBkb3dubG9hZGVyX3Byb2dyZXNzID0gUHJvZ3Jlc3MoCj4gKyAg ICAgICAgVGV4dENvbHVtbigiW2JvbGRde3Rhc2suZmllbGRzW2ZpbGVuYW1lXX0iLCBqdXN0aWZ5 PSJyaWdodCIpLAo+ICsgICAgICAgIEJhckNvbHVtbihiYXJfd2lkdGg9Tm9uZSwgY29tcGxldGVf c3R5bGU9ImRhcmtfbWFnZW50YSIsCj4gcHVsc2Vfc3R5bGU9Im1lZGl1bV9wdXJwbGUiKSwKPiAr ICAgICAgICAiW3Byb2dyZXNzLnBlcmNlbnRhZ2Vde3Rhc2sucGVyY2VudGFnZTo+My4xZn0lIiwK PiArICAgICAgICAi4oCiIiwKPiArICAgICAgICBEb3dubG9hZENvbHVtbigpLAo+ICsgICAgICAg ICLigKIiLAo+ICsgICAgICAgIFRyYW5zZmVyU3BlZWRDb2x1bW4oKSwKPiArICAgICAgICAi4oCi IiwKPiArICAgICAgICBUaW1lUmVtYWluaW5nQ29sdW1uKCkKPiArICAgICkKPiArCj4gKyAgICAj IGdyb3VwIG9mIHByb2dyZXNzIGJhcnM7Cj4gKyAgICAjIHNvbWUgYXJlIGFsd2F5cyB2aXNpYmxl LCBvdGhlcnMgd2lsbCBkaXNhcHBlYXIgd2hlbiBwcm9ncmVzcyBpcwo+IGNvbXBsZXRlCj4gKyAg ICB3b3JraW5nX3BhbmVsID0gUGFuZWwoR3JvdXAoY3VycmVudF9wa2dfcHJvZ3Jlc3MsIHN0ZXBf cHJvZ3Jlc3MsCj4gcGtnX3N0ZXBzX3Byb2dyZXNzLCBkb3dubG9hZGVyX3Byb2dyZXNzKSwgYm94 PWJveC5TSU1QTEVfSEVBRCkKPiArICAgIHByb2dyZXNzX2dyb3VwID0gR3JvdXAoCj4gKyAgICAg ICAgd29ya2luZ19wYW5lbCwKPiArICAgICAgICBwa2dzX3Byb2dyZXNzCj4gKyAgICApCj4gKwo+ ICsgICAgcGtnc190YXNrX2lkID0gcGtnc19wcm9ncmVzcy5hZGRfdGFzaygiUGFja2FnZXMiLCB0 b3RhbD0obGVuKHRvdGFsX3BrZ3MpICsKPiBleHRyYV9wYWNrYWdlc190b19jb3VudCkpCj4gKyAg ICBjYWNoZWQgPSBOb25lCj4gKyAgICBvdmVyZmxvdyA9IE5vbmUKPiArCj4gKyAgICAjIHVzZSBv d24gbGl2ZSBpbnN0YW5jZSBhcyBjb250ZXh0IG1hbmFnZXIgd2l0aCBncm91cCBvZiBwcm9ncmVz cyBiYXJzLAo+ICsgICAgIyB3aGljaCBhbGxvd3MgZm9yIHJ1bm5pbmcgbXVsdGlwbGUgZGlmZmVy ZW50IHByb2dyZXNzIGJhcnMgaW4gcGFyYWxsZWwsCj4gKyAgICAjIGFuZCBkeW5hbWljYWxseSBz aG93aW5nL2hpZGluZyB0aGVtCj4gKyAgICB3aXRoIExpdmUocHJvZ3Jlc3NfZ3JvdXApOgo+ICsg ICAgICAgICMgQ3VycmVudCB0YXNrCj4gKyAgICAgICAgcGtnID0gVGFzayhjdXJyZW50X3BrZ19w cm9ncmVzcz1jdXJyZW50X3BrZ19wcm9ncmVzcywKPiBzdGVwX3Byb2dyZXNzPXN0ZXBfcHJvZ3Jl c3MsCj4gKyAgICAgICAgICAgICAgICAgICBwa2dfc3RlcHNfcHJvZ3Jlc3M9cGtnX3N0ZXBzX3By b2dyZXNzLAo+IGRvd25sb2FkZXI9ZG93bmxvYWRlcl9wcm9ncmVzcykKPiArCj4gKyAgICAgICAg IyBQcmVwYXJlIHRoZSBjYWxsIHRvIGBtYWtlYAo+ICsgICAgICAgIG1vZGlmaWVkX2VudiA9IG9z LmVudmlyb24uY29weSgpCj4gKyAgICAgICAgbW9kaWZpZWRfZW52WyJMQU5HIl0gPSAiQyIKPiAr ICAgICAgICBsb2cuZGVidWcoZiJVc2luZyBtb2RpZmllZCBlbmNpcm9ubWVudDoge21vZGlmaWVk X2Vudn0iKQo+ICsgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAo+ICsgICAgICAg ICAgICAnbWFrZScsCj4gKyAgICAgICAgICAgIGVudj1tb2RpZmllZF9lbnYsCj4gKyAgICAgICAg ICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCj4gKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9j ZXNzLlNURE9VVCwKPiArICAgICAgICAgICAgdGV4dD1UcnVlLAo+ICsgICAgICAgICAgICBjbG9z ZV9mZHM9VHJ1ZSkKPiArCj4gKyAgICAgICAgIyBMb29wIGFzIGxvbmcgYXMgdGhlIHByb2Nlc3Mg aXMgcnVubmluZwo+ICsgICAgICAgIHdoaWxlIHByb2Nlc3MucG9sbCgpIGlzIE5vbmU6Cj4gKyAg ICAgICAgICAgICMgV2FpdCBmb3Igc29tZXRoaW5nIHRvIHJlYWQgZnJvbSBzdGRvdXQgb3Igc3Rk ZXJyCj4gKyAgICAgICAgICAgIF8sIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtwcm9jZXNzLnN0ZG91 dC5maWxlbm8oKV0sIFtdLCBbXSkKPiArICAgICAgICAgICAgcmVhZCA9IHByb2Nlc3Muc3Rkb3V0 LnJlYWRsaW5lKCkKPiArCj4gKyAgICAgICAgICAgICMgRGV0ZWN0IGVhY2ggc3RlcAo+ICsgICAg ICAgICAgICBpZiByZWFkLl9fY29udGFpbnNfXygiWzdtPj4+Iik6Cj4gKyAgICAgICAgICAgICAg ICBpZiBoYW5kbGVfdGFza191cGRhdGUocGtnLCByZWFkKToKPiArICAgICAgICAgICAgICAgICAg ICBwa2dzX3Byb2dyZXNzLmFkdmFuY2UocGtnc190YXNrX2lkLCBhZHZhbmNlPTEpCj4gKyAgICAg ICAgICAgICMgSGFuZGxlcyBhbGwgV0dFVCBkb3dubG9hZGluZyBzdGVwcwo+ICsgICAgICAgICAg ICBlbGlmIHJlLnNlYXJjaCgiTGVuZ3RoOiBbMC05XSsgXChbMC05aW9PYkJrS21NZ0d0VC4sXStc KSIsIHJlYWQpOgo+ICsgICAgICAgICAgICAgICAgaGFuZGxlX2Rvd25sb2FkaW5nKHBrZywgcmVh ZCwgRG93bmxvYWRTdGVwLkxFTkdUSCkKPiArICAgICAgICAgICAgZWxpZiByZS5zZWFyY2goIndn ZXQgLS4qb3V0cHV0JyAnLionIiwgcmVhZCk6Cj4gKyAgICAgICAgICAgICAgICBoYW5kbGVfZG93 bmxvYWRpbmcocGtnLCByZWFkLCBEb3dubG9hZFN0ZXAuT1VUUFVUKQo+ICsgICAgICAgICAgICBl bGlmIHJlLnNlYXJjaCgiWzAtOWtLbU1nR3RUaW9PYkIuLF0rIFsuIF0rIFswLTldKyUiLCByZWFk KToKPiArICAgICAgICAgICAgICAgIGhhbmRsZV9kb3dubG9hZGluZyhwa2csIHJlYWQsIERvd25s b2FkU3RlcC5QUk9HUkVTUykKPiArICAgICAgICAgICAgZWxpZiByZS5zZWFyY2goIlswLTktL3BQ YUFtTSBdKyBcKFswLTkuLCBrS21NZ0d0VGJCb09pSVwvXStzXCkgLQo+IC4qIHNhdmVkIiwgcmVh ZCk6Cj4gKyAgICAgICAgICAgICAgICBoYW5kbGVfZG93bmxvYWRpbmcocGtnLCByZWFkLCBEb3du bG9hZFN0ZXAuRE9ORSkKPiArICAgICAgICAgICAgIyBIYW5kbGVzIGF1dG8tZGV0ZWN0IGZvciBs b2dnaW5nIGxldmVsCj4gKyAgICAgICAgICAgIGVsaWYgcmUuc2VhcmNoKCJbXF0gXXsxfShFWENF UFRJT058RU1FUkdFTkNZfEVNRVJHKVtcXTogXXsxfSIsCj4gcmVhZC51cHBlcigpKToKPiArICAg ICAgICAgICAgICAgIGxvZy5leGNlcHRpb24ocmVhZCkKPiArICAgICAgICAgICAgZWxpZiByZS5z ZWFyY2goIltcXSBdezF9KENSSVRJQ0FMfENSSVR8RkFUQUx8QUxFUlQpW1xdOiBdezF9IiwKPiBy ZWFkLnVwcGVyKCkpOgo+ICsgICAgICAgICAgICAgICAgbG9nLmNyaXRpY2FsKHJlYWQpCj4gKyAg ICAgICAgICAgIGVsaWYgcmUuc2VhcmNoKCJbXF0gXXsxfShFUlJPUnxFUlIpW1xdOiBdezF9Iiwg cmVhZC51cHBlcigpKToKPiArICAgICAgICAgICAgICAgIGxvZy5lcnJvcihyZWFkKQo+ICsgICAg ICAgICAgICBlbGlmIHJlLnNlYXJjaCgiW1xdIF17MX0oV0FSTklOR3xXQVJOKVtcXTogXXsxfSIs IHJlYWQudXBwZXIoKSk6Cj4gKyAgICAgICAgICAgICAgICBsb2cud2FybmluZyhyZWFkKQo+ICsg ICAgICAgICAgICBlbGlmIHJlLnNlYXJjaCgiW1xdIF17MX0oREVCVUd8VFJBQ0UpW1xdOiBdezF9 IiwgcmVhZC51cHBlcigpKToKPiArICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhyZWFkKQo+ICsg ICAgICAgICAgICBlbGlmIHJlYWQ6Cj4gKyAgICAgICAgICAgICAgICBsb2cuaW5mbyhyZWFkKQo+ ICsKPiArICAgICAgICAjIENsZWFuIHRoZSAiY3VycmVudCIgcHJvZ3Jlc3MgYmFyCj4gKyAgICAg ICAgZGVsIHBrZwo+ICsKPiArICAgICAgICAjIFdlIG1heSBuZWVkIHRvIGZpeCB0aGlzIHByb2dy ZXNzIGRlcGVuZGluZyBvZiB0aGUgdW50cmFja2FibGUgdGFza3MKPiB0aGF0IG1heSBiZSBiYWRs eSBhY2NvdW50ZWQgZm9yIGVhcmxpZXIKPiArICAgICAgICBwa2dzX3Rhc2sgPSBbdCBmb3IgdCBp biBwa2dzX3Byb2dyZXNzLnRhc2tzIGlmIHQuaWQgPT0KPiBwa2dzX3Rhc2tfaWRdWzBdCj4gKyAg ICAgICAgaWYgcGtnc190YXNrLmNvbXBsZXRlZCA8IHBrZ3NfdGFzay50b3RhbDoKPiArICAgICAg ICAgICAgY2FjaGVkID0gcGtnc190YXNrLnRvdGFsIC0gcGtnc190YXNrLmNvbXBsZXRlZAo+ICsg ICAgICAgICAgICBwa2dzX3Byb2dyZXNzLnVwZGF0ZShwa2dzX3Rhc2tfaWQsIGNvbXBsZXRlZD0o cGtnc190YXNrLnRvdGFsKSwKPiBhZHZhbmNlPTEpCj4gKyAgICAgICAgZWxpZiBwa2dzX3Rhc2su Y29tcGxldGVkID4gcGtnc190YXNrLnRvdGFsOgo+ICsgICAgICAgICAgICBvdmVyZmxvdyA9IHBr Z3NfdGFzay5jb21wbGV0ZWQgLSBwa2dzX3Rhc2sudG90YWwKPiArICAgICAgICAgICAgcGtnc19w cm9ncmVzcy51cGRhdGUocGtnc190YXNrX2lkLCB0b3RhbD1wa2dzX3Rhc2suY29tcGxldGVkLAo+ IGNvbXBsZXRlZD0ocGtnc190YXNrLmNvbXBsZXRlZCksIGFkdmFuY2U9MSkKPiArICAgICAgICBw a2dzX3Byb2dyZXNzLnJlZnJlc2goKQo+ICsgICAgaWYgY2FjaGVkIGlzIG5vdCBOb25lOgo+ICsg ICAgICAgIGNvbnNvbGUucHJpbnQoZiJbc3ByaW5nX2dyZWVuM11bYl17Y2FjaGVkfVsvYl0gcGtn KHMpIGxvYWRlZCBmcm9tCj4gW2ldY2FjaGUiKQo+ICsgICAgaWYgb3ZlcmZsb3cgaXMgbm90IE5v bmU6Cj4gKyAgICAgICAgY29uc29sZS5wcmludChmIltkZWVwX3BpbmsyIGJde292ZXJmbG93fSB1 bmFjb3VudGVkIHBrZyhzKSBhZGRlZCB0bwo+IG91ciB3b3JrbG9hZCIpCj4gKyAgICBjb25zb2xl LnByaW50KCJXb3JrIGlzIGRvbmUgOnJlbGlldmVkX2ZhY2U6IikKPiArCj4gKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKwo+ICsKPiArZGVmIGhhbmRsZV9zaWdpbnQoc2ln bnVtLCBmcmFtZSkgLT4gTm9uZToKPiArICAgIGNvbnNvbGUucHJpbnQoIkludGVycnVwdGVkIGJ5 IHRoZSB1c2VyIikKPiArICAgIHF1aXQoKQo+ICsKPiArCj4gK3NpZ25hbC5zaWduYWwoc2lnbmFs LlNJR0lOVCwgaGFuZGxlX3NpZ2ludCkKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCj4gKwo+ICtpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgo+ICsgICAgcGFyc2Vy ID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCj4gKyAgICAgICAgcHJvZz0ibWFrZV9yaWNoX3dy YXBwZXIucHkiLAo+ICsgICAgICAgIGRlc2NyaXB0aW9uPWYie19fZGVzY3JpcHRpb25fX30iLAo+ ICsgICAgICAgIGVwaWxvZz1mIntfX2NvcHlyaWdodF9ffSwge19fYXV0aG9yX199LCBsaWNlbnNl OiB7X19saWNlbnNlX199Igo+ICsgICAgKQo+ICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWwn LCAnLS1sb2dsZXZlbCcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NldCB0aGUg dmVyYm9zaXR5IGxldmVsIGZvciB0aGUgbG9ncyBwcmludGVkIG9uCj4gdGhlIHNjcmVlbicsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBjaG9pY2VzPVsiYWxsIiwgImRlYnVnIiwgImluZm8iLCAid2FybiIsICJlcnJvciIsCj4g ImNyaXRpY2FsIl0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImVycm9yIikK PiArICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQo+ICsg ICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctZicsICctLWZhc3QnLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGhlbHA9J2Rpc2FibGUgdGhlIHJlcXVpcmVtZW50cyBhbmQgb3B0aW9ubmFsIGNoZWNr Cj4gYmVmb3JlIHJ1bm5pbmcnLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3Rv cmVfdHJ1ZScpCj4gKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tb25seS1jaGVjaycsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgaGVscD0nb25seSBkbyB0aGUgcmVxdWlyZW1lbnRzIGFuZCBv cHRpb25uYWwgY2hlY2sgYW5kCj4gZXhpdCcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYWN0 aW9uPSdzdG9yZV90cnVlJykKPiArICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2hlY2stb3B0 aW9uYWwnLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdlbmFibGUgY2hlY2tpbmcg Zm9yIG9wdGlvbmFsIHJlc3NvdXJjZXMgYW5kCj4gZXhpdCcsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCj4gKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCct LXZlcnNpb24nLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRwdXQgdmVyc2lv biBpbmZvcm1hdGlvbiBhbmQgZXhpdCcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlv bj0ndmVyc2lvbicsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249ZiclKHByb2cp cyB7X192ZXJzaW9uX199IC0ge19fc3RhdHVzX199JykKPiArICAgIHBhcnNlci5hZGRfYXJndW1l bnQoJy0tYWJvdXQnLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRwdXQgYWJv dXQgaW5mb3JtYXRpb24gYW5kIGV4aXQnLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBhY3Rp b249J3N0b3JlX3RydWUnKQo+ICsKPiArICAgIGFyZ3VtZW50cyA9IHBhcnNlci5wYXJzZV9hcmdz KCkKPiArCj4gKyAgICBpZiBhcmd1bWVudHMuYWJvdXQ6Cj4gKyAgICAgICAgY29uc29sZSA9IENv bnNvbGUoaGlnaGxpZ2h0PUZhbHNlKQo+ICsgICAgICAgIGNvbnNvbGUucHJpbnQoZiJ7X19jb3B5 cmlnaHRfX31cbkNyZWF0ZWQgYnkge19fYXV0aG9yX199LCBsaWNlbnNlOgo+IHtfX2xpY2Vuc2Vf X31cblxue19fZGVzY3JpcHRpb25fX31cbiIpCj4gKyAgICAgICAgaWYgInJlbGVhc2UiID09IF9f c3RhdHVzX186Cj4gKyAgICAgICAgICAgIGNvbnNvbGUucHJpbnQoZiJbZ3JlZW4gYl17X19zdGF0 dXNfX30iKQo+ICsgICAgICAgIGVsaWYgInRlc3QiID09IF9fc3RhdHVzX186Cj4gKyAgICAgICAg ICAgIGNvbnNvbGUucHJpbnQoZiJbY3lhbl17X19zdGF0dXNfX30iKQo+ICsgICAgICAgIGVsaWYg ImRldiIgPT0gX19zdGF0dXNfXzoKPiArICAgICAgICAgICAgY29uc29sZS5wcmludChmIltwdXJw bGUgaV17X19zdGF0dXNfX30iKQo+ICsgICAgICAgIGVsc2U6Cj4gKyAgICAgICAgICAgIGNvbnNv bGUucHJpbnQoZiJbcmVkIHVde19fc3RhdHVzX199IikKPiArICAgICAgICBjb25zb2xlLnByaW50 KGYiVmVyc2lvbjoge19fdmVyc2lvbl9ffVxuTWFpbnRhaW5lcjoKPiB7X19tYWludGFpbmVyX199 XG5cbkNyZWRpdHM6IHtfX2NyZWRpdHNfX30iKQo+ICsgICAgICAgIHF1aXQoKQo+ICsKPiArICAg ICMgSW5pdGlhbGlzZSB0aGUgcmljaCBjb25zb2xlIGZvciBwcmludGluZwo+ICsgICAgY29uc29s ZSA9IENvbnNvbGUoKQo+ICsKPiArICAgICMgSW5pdGlhbGluZyB0aGUgcmljaCBsb2cgaGFuZGxl cgo+ICsgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygKPiArICAgICAgICBsZXZlbD1hcmd1bWVudHMu bG9nbGV2ZWwudXBwZXIoKS5yZXBsYWNlKCJBTEwiLAo+ICJOT1RTRVQiKS5yZXBsYWNlKCJXQVJO IiwgIldBUk5JTkciKSwKPiArICAgICAgICBmb3JtYXQ9IiUobWVzc2FnZSlzIiwKPiArICAgICAg ICBkYXRlZm10PSJbJVhdIiwKPiArICAgICAgICBoYW5kbGVycz1bUmljaEhhbmRsZXIocmljaF90 cmFjZWJhY2tzPVRydWUsIHNob3dfcGF0aD1GYWxzZSldCj4gKyAgICApCj4gKyAgICBsb2cgPSBs b2dnaW5nLmdldExvZ2dlcigicmljaCIpCj4gKwo+ICsgICAgaWYgbm90IGFyZ3VtZW50cy5mYXN0 Ogo+ICsgICAgICAgIG9rID0gY2hlY2tfcmVxdWlyZW1lbnRzKCkKPiArICAgICAgICBpZiBub3Qg YXJndW1lbnRzLm9ubHlfY2hlY2s6Cj4gKyAgICAgICAgICAgIGlmIG9rOgo+ICsgICAgICAgICAg ICAgICAgY29uc29sZS5ydWxlKHN0eWxlPSJncmVlbiIpCj4gKyAgICAgICAgICAgIGVsc2U6Cj4g KyAgICAgICAgICAgICAgICBxdWl0KCkKPiArCj4gKyAgICBpZiBub3QgYXJndW1lbnRzLmZhc3Qg YW5kIGFyZ3VtZW50cy5jaGVja19vcHRpb25hbDoKPiArICAgICAgICBvayA9IGNoZWNrX29wdGlv bmFsX3BhY2thZ2VzKCkKPiArICAgICAgICBpZiBub3QgYXJndW1lbnRzLm9ubHlfY2hlY2s6Cj4g KyAgICAgICAgICAgIGlmIG9rOgo+ICsgICAgICAgICAgICAgICAgY29uc29sZS5ydWxlKHN0eWxl PSJibHVlIikKPiArICAgICAgICAgICAgZWxzZToKPiArICAgICAgICAgICAgICAgIGNvbnNvbGUu cnVsZShzdHlsZT0ibWFnZW50YSIpCj4gKwo+ICsgICAgaWYgbm90IGFyZ3VtZW50cy5vbmx5X2No ZWNrOgo+ICsgICAgICAgIGxvYWRfYWxsX3Rhc2tzKCkKPiArICAgICAgICBpZiBub3QgYXJndW1l bnRzLmZhc3QgYW5kIG5vdCBDb25maXJtLmFzaygiUHJvY2VlZD8gKGl0IG1heSB0YWtlIHNvbWUK PiB0aW1lcykiLCBjb25zb2xlPWNvbnNvbGUsIGRlZmF1bHQ9InkiKToKPiArICAgICAgICAgICAg cXVpdCgpCj4gKyAgICAgICAgY29uc29sZS5wcmludCgiXG5cbiIpCj4gKyAgICAgICAgbWFpbigp Cj4gLS0gCj4gMi4zOS4wCj4gCj4gLS0tLQo+IERlOiByYXBoYWVsLnNsYWdtb2xlbkBtYWlsZmVu Y2UuY29tCj4gw4A6IGJ1aWxkcm9vdEBidWlsZHJvb3Qub3JnLCByYXBoYWVsLnNsYWdtb2xlbkBt YWlsZmVuY2UuY29tCj4gOSBqYW52LiAyMDIzIDE1OjU3OjQ4Cj4gCj4gLS0tLQo+IERlOiByYXBo YWVsLnNsYWdtb2xlbkBtYWlsZmVuY2UuY29tCj4gw4A6IGJ1aWxkcm9vdEBidWlsZHJvb3Qub3Jn Cj4gOSBqYW52LiAyMDIzIDE2OjIyOjUyCgoKCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBidWlsZHJvb3QgbWFpbGluZyBsaXN0Cj4gYnVpbGRyb290 QGJ1aWxkcm9vdC5vcmcKPiBodHRwczovL2xpc3RzLmJ1aWxkcm9vdC5vcmcvbWFpbG1hbi9saXN0 aW5mby9idWlsZHJvb3QKCgotLSAKLi0tLS0tLS0tLS0tLS0tLS0tLi0tLS0tLS0tLS0tLS0tLS0t LS0tLi0tLS0tLS0tLS0tLS0tLS0tLS4tLS0tLS0tLS0tLS0tLS0tLS0tLS4KfCAgWWFubiBFLiBN T1JJTiAgfCBSZWFsLVRpbWUgRW1iZWRkZWQgfCAvIlwgQVNDSUkgUklCQk9OIHwgRXJpY3MnIGNv bnNwaXJhY3k6IHwKfCArMzMgNjYyIDM3NiAwNTYgfCBTb2Z0d2FyZSAgRGVzaWduZXIgfCBcIC8g Q0FNUEFJR04gICAgIHwgIF9fXyAgICAgICAgICAgICAgIHwKfCArMzMgNTYxIDA5OSA0MjcgYC0t LS0tLS0tLS0tLS4tLS0tLS0tOiAgWCAgQUdBSU5TVCAgICAgIHwgIFxlLyAgVGhlcmUgaXMgbm8g IHwKfCBodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvIHwgXy8qXF8gfCAvIFwgSFRNTCBNQUlM ICAgIHwgICB2ICAgY29uc3BpcmFjeS4gIHwKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LV4tLS0tLS0tXi0tLS0tLS0tLS0tLS0tLS0tLV4tLS0tLS0tLS0tLS0tLS0tLS0tLScKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYnVpbGRyb290IG1haWxp bmcgbGlzdApidWlsZHJvb3RAYnVpbGRyb290Lm9yZwpodHRwczovL2xpc3RzLmJ1aWxkcm9vdC5v cmcvbWFpbG1hbi9saXN0aW5mby9idWlsZHJvb3QK