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 1qW9FT-002HBs-Vu for pgadmin-hackers@arkaria.postgresql.org; Wed, 16 Aug 2023 05:39:16 +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 1qW9FS-003LpH-9E for pgadmin-hackers@arkaria.postgresql.org; Wed, 16 Aug 2023 05:39:14 +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 1qW9FR-003LoU-RI for pgadmin-hackers@lists.postgresql.org; Wed, 16 Aug 2023 05:39:14 +0000 Received: from mail-ot1-x32f.google.com ([2607:f8b0:4864:20::32f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qW9FO-000Pwy-9Y for pgadmin-hackers@postgresql.org; Wed, 16 Aug 2023 05:39:13 +0000 Received: by mail-ot1-x32f.google.com with SMTP id 46e09a7af769-6bca5d6dcedso5216090a34.1 for ; Tue, 15 Aug 2023 22:39:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692164348; x=1692769148; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=f4QIUY/qNsQynWB3a0JQ/HUMuFLa2vaSndwTRxgiaas=; b=Z1jfLrHzknGTHET19eEd/++fduzmKiNxisZETAB+eCAjoyGVb/AvAJlE+HD/BrbSWX 5NSEajwN9+3tL4CGNUfc1SSbb9BCRRMy/+aqUzqWWtRIFlmmuj7V0zuLQpH46/MlChC+ VJ3WlZ2jTWD/EDhWCms3gVGPCm6thWBFrdLJfjaHDcvddrK75T3u25o0ax3Oy9gaXh6G BbdQeyTcPEmUH+tyP8nz3+yTCIVGUzq0Ar3+7H/3PhBo6w5nI+Ns/pfkjwLJT/4eTJVv o7Ne9ll/7++IseOP1DrLU+E8Mo+/oMk8FHigDnjTYPYP3B6ZErD3XxyfotTFA2GhiZrI rONA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692164348; x=1692769148; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=f4QIUY/qNsQynWB3a0JQ/HUMuFLa2vaSndwTRxgiaas=; b=CWPYnBdjbEi6ApdC6WRqbfQmMWtQQed+X302jzWINUhkc0SeHTmKabFaWx/qQj7JN+ 8bQirJ8a7I+54eteANUgbZW606QQQQsiGq3U2PCtFpynnFpBfJhKXJPj+AM9LeTCjENW 50rbqqD7fl7u4Evrna388/eiZyt2N5/nR3kBCl9zErigs2G6hoZt9F7jBpZYr4QzqktZ FZVRff/8LdrdfCf2G/leIkLR1PFokZJ/vXMS6t5q5sByFJdK3KW8gODNXFQ4KL0vxC7h G1BWmwrtbtQX4cRQiqnSkNxK9E0LvHG+RNknNF+jf9o6bs7A7vfcg8XtOovToUDZ7Q/G xKfA== X-Gm-Message-State: AOJu0YwkmYCCRYRfAKzdfvIunOA3tUoPTDLlOJnEsB+g66NfC8PJCdXl 3hLNiqolBnNbfuP/beg26l0rhqeR0xhmH/kDKIhZDFpr8qIufy8a X-Google-Smtp-Source: AGHT+IGfDgZyODaxSacPjsbm1q2BqJKzoqDp67QJviGmA8jaT8FkSSpvhW25OrY1simATJdJ7IDEmBQH6n6PxoHyQbI= X-Received: by 2002:a05:6830:5a:b0:6bc:b8d9:476e with SMTP id d26-20020a056830005a00b006bcb8d9476emr984714otp.16.1692164347990; Tue, 15 Aug 2023 22:39:07 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sahil Harpal Date: Wed, 16 Aug 2023 11:08:49 +0530 Message-ID: Subject: Re: Pgadmin4 System Stats Extension Design To: Khushboo Vashi Cc: Aditya Toshniwal , pgadmin-hackers@postgresql.org, Ashesh Vashi , Dave Page , Akshay Joshi Content-Type: multipart/mixed; boundary="000000000000de6e3f060303b684" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000de6e3f060303b684 Content-Type: multipart/alternative; boundary="000000000000de6e3e060303b682" --000000000000de6e3e060303b682 Content-Type: text/plain; charset="UTF-8" Could you please try this attached patch. --000000000000de6e3e060303b682 Content-Type: text/html; charset="UTF-8"
Could you please try this attached patch.
--000000000000de6e3e060303b682-- --000000000000de6e3f060303b684 Content-Type: application/octet-stream; name="SS_WIP.patch" Content-Disposition: attachment; filename="SS_WIP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lldaws670 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9fX2luaXRfXy5weSBiL3dlYi9wZ2Fk bWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQ0KaW5kZXggMWRhYzU0ZTc0Li5jMThmNWQzZGUgMTAw NjQ0DQotLS0gYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvX19pbml0X18ucHkNCisrKyBiL3dlYi9w Z2FkbWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQ0KQEAgLTExMiw2ICsxMTIsNzIgQEAgY2xhc3Mg RGFzaGJvYXJkTW9kdWxlKFBnQWRtaW5Nb2R1bGUpOg0KICAgICAgICAgICAgIGhlbHBfc3RyPWhl bHBfc3RyaW5nDQogICAgICAgICApDQogDQorICAgICAgICBzZWxmLmhwY19zdGF0c19yZWZyZXNo ID0gc2VsZi5kYXNoYm9hcmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAgICAgICAgICAnZGFz aGJvYXJkcycsICdocGNfc3RhdHNfcmVmcmVzaCcsDQorICAgICAgICAgICAgZ2V0dGV4dCgiSGFu ZGxlICYgUHJvY2VzcyBjb3VudCBzdGF0aXN0aWNzIHJlZnJlc2ggcmF0ZSIpLA0KKyAgICAgICAg ICAgICdpbnRlZ2VyJywgNSwgbWluX3ZhbD0xLCBtYXhfdmFsPTk5OTk5OSwNCisgICAgICAgICAg ICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xBQkVMX1JFRlJFU0hfUkFURVMsDQorICAgICAgICAgICAg aGVscF9zdHI9aGVscF9zdHJpbmcNCisgICAgICAgICkNCisNCisgICAgICAgIHNlbGYuY3Vfc3Rh dHNfcmVmcmVzaCA9IHNlbGYuZGFzaGJvYXJkX3ByZWZlcmVuY2UucmVnaXN0ZXIoDQorICAgICAg ICAgICAgJ2Rhc2hib2FyZHMnLCAnY3Vfc3RhdHNfcmVmcmVzaCcsDQorICAgICAgICAgICAgZ2V0 dGV4dCgNCisgICAgICAgICAgICAgICAgIlBlcmNlbnRhZ2Ugb2YgQ1BVIHRpbWUgdXNlZCBieSBk aWZmZXJlbnQgcHJvY2VzcyBcDQorICAgICAgICAgICAgICAgIG1vZGVzIHN0YXRpc3RpY3MgcmVm cmVzaCByYXRlIg0KKyAgICAgICAgICAgICksICdpbnRlZ2VyJywgNSwgbWluX3ZhbD0xLCBtYXhf dmFsPTk5OTk5OSwNCisgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xBQkVMX1JFRlJF U0hfUkFURVMsDQorICAgICAgICAgICAgaGVscF9zdHI9aGVscF9zdHJpbmcNCisgICAgICAgICkN CisNCisgICAgICAgIHNlbGYubGFfc3RhdHNfcmVmcmVzaCA9IHNlbGYuZGFzaGJvYXJkX3ByZWZl cmVuY2UucmVnaXN0ZXIoDQorICAgICAgICAgICAgJ2Rhc2hib2FyZHMnLCAnbGFfc3RhdHNfcmVm cmVzaCcsDQorICAgICAgICAgICAgZ2V0dGV4dCgiQXZlcmFnZSBsb2FkIHN0YXRpc3RpY3MgcmVm cmVzaCByYXRlIiksICdpbnRlZ2VyJywNCisgICAgICAgICAgICA1LCBtaW5fdmFsPTEsIG1heF92 YWw9OTk5OTk5LA0KKyAgICAgICAgICAgIGNhdGVnb3J5X2xhYmVsPVBSRUZfTEFCRUxfUkVGUkVT SF9SQVRFUywNCisgICAgICAgICAgICBoZWxwX3N0cj1oZWxwX3N0cmluZw0KKyAgICAgICAgKQ0K Kw0KKyAgICAgICAgc2VsZi5wY3Vfc3RhdHNfcmVmcmVzaCA9IHNlbGYuZGFzaGJvYXJkX3ByZWZl cmVuY2UucmVnaXN0ZXIoDQorICAgICAgICAgICAgJ2Rhc2hib2FyZHMnLCAncGN1X3N0YXRzX3Jl ZnJlc2gnLA0KKyAgICAgICAgICAgIGdldHRleHQoIkNQVSB1c2FnZSBwZXIgcHJvY2VzcyBzdGF0 aXN0aWNzIHJlZnJlc2ggcmF0ZSIpLA0KKyAgICAgICAgICAgICdpbnRlZ2VyJywgNSwgbWluX3Zh bD0xLCBtYXhfdmFsPTk5OTk5OSwNCisgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xB QkVMX1JFRlJFU0hfUkFURVMsDQorICAgICAgICAgICAgaGVscF9zdHI9aGVscF9zdHJpbmcNCisg ICAgICAgICkNCisNCisgICAgICAgIHNlbGYubV9zdGF0c19yZWZyZXNoID0gc2VsZi5kYXNoYm9h cmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAgICAgICAgICAnZGFzaGJvYXJkcycsICdtX3N0 YXRzX3JlZnJlc2gnLA0KKyAgICAgICAgICAgIGdldHRleHQoIk1lbW9yeSB1c2FnZSBzdGF0aXN0 aWNzIHJlZnJlc2ggcmF0ZSIpLCAnaW50ZWdlcicsDQorICAgICAgICAgICAgNSwgbWluX3ZhbD0x LCBtYXhfdmFsPTk5OTk5OSwNCisgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1QUkVGX0xBQkVM X1JFRlJFU0hfUkFURVMsDQorICAgICAgICAgICAgaGVscF9zdHI9aGVscF9zdHJpbmcNCisgICAg ICAgICkNCisNCisgICAgICAgIHNlbGYuc21fc3RhdHNfcmVmcmVzaCA9IHNlbGYuZGFzaGJvYXJk X3ByZWZlcmVuY2UucmVnaXN0ZXIoDQorICAgICAgICAgICAgJ2Rhc2hib2FyZHMnLCAnc21fc3Rh dHNfcmVmcmVzaCcsDQorICAgICAgICAgICAgZ2V0dGV4dCgiU3dhcCBtZW1vcnkgdXNhZ2Ugc3Rh dGlzdGljcyByZWZyZXNoIHJhdGUiKSwgJ2ludGVnZXInLA0KKyAgICAgICAgICAgIDUsIG1pbl92 YWw9MSwgbWF4X3ZhbD05OTk5OTksDQorICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9UFJFRl9M QUJFTF9SRUZSRVNIX1JBVEVTLA0KKyAgICAgICAgICAgIGhlbHBfc3RyPWhlbHBfc3RyaW5nDQor ICAgICAgICApDQorDQorICAgICAgICBzZWxmLnBtdV9zdGF0c19yZWZyZXNoID0gc2VsZi5kYXNo Ym9hcmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAgICAgICAgICAnZGFzaGJvYXJkcycsICdw bXVfc3RhdHNfcmVmcmVzaCcsDQorICAgICAgICAgICAgZ2V0dGV4dCgiTWVtb3J5IHVzYWdlIHBl ciBwcm9jZXNzIHN0YXRpc3RpY3MgcmVmcmVzaCByYXRlIiksDQorICAgICAgICAgICAgJ2ludGVn ZXInLCA1LCBtaW5fdmFsPTEsIG1heF92YWw9OTk5OTk5LA0KKyAgICAgICAgICAgIGNhdGVnb3J5 X2xhYmVsPVBSRUZfTEFCRUxfUkVGUkVTSF9SQVRFUywNCisgICAgICAgICAgICBoZWxwX3N0cj1o ZWxwX3N0cmluZw0KKyAgICAgICAgKQ0KKw0KKyAgICAgICAgc2VsZi5pb19zdGF0c19yZWZyZXNo ID0gc2VsZi5kYXNoYm9hcmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCisgICAgICAgICAgICAnZGFz aGJvYXJkcycsICdpb19zdGF0c19yZWZyZXNoJywNCisgICAgICAgICAgICBnZXR0ZXh0KCJJL08g YW5hbHlzaXMgc3RhdGlzdGljcyByZWZyZXNoIHJhdGUiKSwgJ2ludGVnZXInLA0KKyAgICAgICAg ICAgIDUsIG1pbl92YWw9MSwgbWF4X3ZhbD05OTk5OTksDQorICAgICAgICAgICAgY2F0ZWdvcnlf bGFiZWw9UFJFRl9MQUJFTF9SRUZSRVNIX1JBVEVTLA0KKyAgICAgICAgICAgIGhlbHBfc3RyPWhl bHBfc3RyaW5nDQorICAgICAgICApDQorDQogICAgICAgICBzZWxmLmRpc3BsYXlfZ3JhcGhzID0g c2VsZi5kYXNoYm9hcmRfcHJlZmVyZW5jZS5yZWdpc3RlcigNCiAgICAgICAgICAgICAnZGlzcGxh eScsICdzaG93X2dyYXBocycsDQogICAgICAgICAgICAgZ2V0dGV4dCgiU2hvdyBncmFwaHM/Iiks ICdib29sZWFuJywgVHJ1ZSwNCkBAIC0xOTcsNiArMjYzLDEyIEBAIGNsYXNzIERhc2hib2FyZE1v ZHVsZShQZ0FkbWluTW9kdWxlKToNCiAgICAgICAgICAgICAnZGFzaGJvYXJkLmdldF9wcmVwYXJl ZF9ieV9kYXRhYmFzZV9pZCcsDQogICAgICAgICAgICAgJ2Rhc2hib2FyZC5jb25maWcnLA0KICAg ICAgICAgICAgICdkYXNoYm9hcmQuZ2V0X2NvbmZpZ19ieV9zZXJ2ZXJfaWQnLA0KKyAgICAgICAg ICAgICdkYXNoYm9hcmQuY2hlY2tfc3lzdGVtX3N0YXRpc3RpY3MnLA0KKyAgICAgICAgICAgICdk YXNoYm9hcmQuY2hlY2tfc3lzdGVtX3N0YXRpc3RpY3Nfc2lkJywNCisgICAgICAgICAgICAnZGFz aGJvYXJkLmNoZWNrX3N5c3RlbV9zdGF0aXN0aWNzX2RpZCcsDQorICAgICAgICAgICAgJ2Rhc2hi b2FyZC5zeXN0ZW1fc3RhdGlzdGljcycsDQorICAgICAgICAgICAgJ2Rhc2hib2FyZC5zeXN0ZW1f c3RhdGlzdGljc19zaWQnLA0KKyAgICAgICAgICAgICdkYXNoYm9hcmQuc3lzdGVtX3N0YXRpc3Rp Y3NfZGlkJywNCiAgICAgICAgIF0NCiANCiANCkBAIC01MzYsMyArNjA4LDYyIEBAIGRlZiB0ZXJt aW5hdGVfc2Vzc2lvbihzaWQ9Tm9uZSwgZGlkPU5vbmUsIHBpZD1Ob25lKToNCiAgICAgICAgIHJl c3BvbnNlPWdldHRleHQoIlN1Y2Nlc3MiKSBpZiByZXMgZWxzZSBnZXR0ZXh0KCJGYWlsZWQiKSwN CiAgICAgICAgIHN0YXR1cz0yMDANCiAgICAgKQ0KKw0KKw0KKyMgVG8gY2hlY2sgd2hldGhlciBz eXN0ZW0gc3RhdHMgZXh0ZXNpb24gaXMgcHJlc2VudCBvciBub3QNCitAYmx1ZXByaW50LnJvdXRl KCdjaGVja19leHRlbnNpb24vc3lzdGVtX3N0YXRpc3RpY3MnLA0KKyAgICAgICAgICAgICAgICAg ZW5kcG9pbnQ9J2NoZWNrX3N5c3RlbV9zdGF0aXN0aWNzJywgbWV0aG9kcz1bJ0dFVCddKQ0KK0Bi bHVlcHJpbnQucm91dGUoJ2NoZWNrX2V4dGVuc2lvbi9zeXN0ZW1fc3RhdGlzdGljcy88aW50OnNp ZD4nLA0KKyAgICAgICAgICAgICAgICAgZW5kcG9pbnQ9J2NoZWNrX3N5c3RlbV9zdGF0aXN0aWNz X3NpZCcsIG1ldGhvZHM9WydHRVQnXSkNCitAYmx1ZXByaW50LnJvdXRlKCdjaGVja19leHRlbnNp b24vc3lzdGVtX3N0YXRpc3RpY3MvPGludDpzaWQ+LzxpbnQ6ZGlkPicsDQorICAgICAgICAgICAg ICAgICBlbmRwb2ludD0nY2hlY2tfc3lzdGVtX3N0YXRpc3RpY3NfZGlkJywgbWV0aG9kcz1bJ0dF VCddKQ0KK0Bsb2dpbl9yZXF1aXJlZA0KK0BjaGVja19wcmVjb25kaXRpb24NCitkZWYgY2hlY2tf c3lzdGVtX3N0YXRpc3RpY3Moc2lkPU5vbmUsIGRpZD1Ob25lKToNCisgICAgc3FsID0gIlNFTEVD VCAqIEZST00gcGdfZXh0ZW5zaW9uIFdIRVJFIGV4dG5hbWUgPSAnc3lzdGVtX3N0YXRzJzsiDQor ICAgIHN0YXR1cywgcmVzID0gZy5jb25uLmV4ZWN1dGVfc2NhbGFyKHNxbCkNCisgICAgaWYgbm90 IHN0YXR1czoNCisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQ0KKyAgICBkYXRhID0ge30NCisgICAgaWYgcmVzIGlzIG5vdCBOb25lOg0KKyAgICAgICAg ZGF0YVsnc3NfcHJlc2VudCddID0gVHJ1ZQ0KKyAgICBlbHNlOg0KKyAgICAgICAgZGF0YVsnc3Nf cHJlc2VudCddID0gRmFsc2UNCisgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoDQorICAgICAgICBy ZXNwb25zZT1kYXRhLA0KKyAgICAgICAgc3RhdHVzPTIwMA0KKyAgICApDQorDQorDQorIyBTeXN0 ZW0gU3RhdGlzdGljcyBCYWNrZW5kDQorQGJsdWVwcmludC5yb3V0ZSgnL3N5c3RlbV9zdGF0aXN0 aWNzJywNCisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSdzeXN0ZW1fc3RhdGlzdGljcycsIG1l dGhvZHM9WydHRVQnXSkNCitAYmx1ZXByaW50LnJvdXRlKCcvc3lzdGVtX3N0YXRpc3RpY3MvPGlu dDpzaWQ+JywNCisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSdzeXN0ZW1fc3RhdGlzdGljc19z aWQnLCBtZXRob2RzPVsnR0VUJ10pDQorQGJsdWVwcmludC5yb3V0ZSgnL3N5c3RlbV9zdGF0aXN0 aWNzLzxpbnQ6c2lkPi88aW50OmRpZD4nLA0KKyAgICAgICAgICAgICAgICAgZW5kcG9pbnQ9J3N5 c3RlbV9zdGF0aXN0aWNzX2RpZCcsIG1ldGhvZHM9WydHRVQnXSkNCitAbG9naW5fcmVxdWlyZWQN CitAY2hlY2tfcHJlY29uZGl0aW9uDQorZGVmIHN5c3RlbV9zdGF0aXN0aWNzKHNpZD1Ob25lLCBk aWQ9Tm9uZSk6DQorICAgIHJlc3BfZGF0YSA9IHt9DQorDQorICAgIGlmIHJlcXVlc3QuYXJnc1sn Y2hhcnRfbmFtZXMnXSAhPSAnJzoNCisgICAgICAgIGNoYXJ0X25hbWVzID0gcmVxdWVzdC5hcmdz WydjaGFydF9uYW1lcyddLnNwbGl0KCcsJykNCisNCisgICAgICAgIGlmIG5vdCBzaWQ6DQorICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz0nU2VydmVyIElE IG5vdCBzcGVjaWZpZWQuJykNCisNCisgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgNCisg ICAgICAgICAgICAiLyIuam9pbihbZy50ZW1wbGF0ZV9wYXRoLCAnc3lzdGVtX3N0YXRpc3RpY3Mu c3FsJ10pLCBkaWQ9ZGlkLA0KKyAgICAgICAgICAgIGNoYXJ0X25hbWVzPWNoYXJ0X25hbWVzLA0K KyAgICAgICAgKQ0KKyAgICAgICAgc3RhdHVzLCByZXMgPSBnLmNvbm4uZXhlY3V0ZV9kaWN0KHNx bCkNCisNCisgICAgICAgIGZvciBjaGFydF9yb3cgaW4gcmVzWydyb3dzJ106DQorICAgICAgICAg ICAgcmVzcF9kYXRhW2NoYXJ0X3Jvd1snY2hhcnRfbmFtZSddXSA9IGpzb24ubG9hZHMoDQorICAg ICAgICAgICAgICAgIGNoYXJ0X3Jvd1snY2hhcnRfZGF0YSddKQ0KKw0KKyAgICByZXR1cm4gYWph eF9yZXNwb25zZSgNCisgICAgICAgIHJlc3BvbnNlPXJlc3BfZGF0YSwNCisgICAgICAgIHN0YXR1 cz0yMDANCisgICAgKQ0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMv anMvRGFzaGJvYXJkLmpzeCBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvRGFzaGJv YXJkLmpzeA0KaW5kZXggNzE5NGZjYzEwLi5lNmFmZWZmMDcgMTAwNjQ0DQotLS0gYS93ZWIvcGdh ZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL0Rhc2hib2FyZC5qc3gNCisrKyBiL3dlYi9wZ2FkbWlu L2Rhc2hib2FyZC9zdGF0aWMvanMvRGFzaGJvYXJkLmpzeA0KQEAgLTI5LDYgKzI5LDEwIEBAIGlt cG9ydCBfIGZyb20gJ2xvZGFzaCc7DQogaW1wb3J0IENhY2hlZE91dGxpbmVkSWNvbiBmcm9tICdA bWF0ZXJpYWwtdWkvaWNvbnMvQ2FjaGVkT3V0bGluZWQnOw0KIGltcG9ydCBFbXB0eVBhbmVsTWVz c2FnZSBmcm9tICcuLi8uLi8uLi9zdGF0aWMvanMvY29tcG9uZW50cy9FbXB0eVBhbmVsTWVzc2Fn ZSc7DQogaW1wb3J0IFRhYlBhbmVsIGZyb20gJy4uLy4uLy4uL3N0YXRpYy9qcy9jb21wb25lbnRz L1RhYlBhbmVsJzsNCitpbXBvcnQgU3VtbWFyeSBmcm9tICdTeXN0ZW1TdGF0cy9TdW1tYXJ5JzsN CitpbXBvcnQgQ1BVIGZyb20gJ1N5c3RlbVN0YXRzL0NQVSc7DQoraW1wb3J0IE1lbW9yeSBmcm9t ICdTeXN0ZW1TdGF0cy9NZW1vcnknOw0KK2ltcG9ydCBTdG9yYWdlIGZyb20gJ1N5c3RlbVN0YXRz L1N0b3JhZ2UnOw0KIA0KIGZ1bmN0aW9uIHBhcnNlRGF0YShkYXRhKSB7DQogICBsZXQgcmVzID0g W107DQpAQCAtMTQ4LDEyICsxNTIsMjEgQEAgZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGFzaGJv YXJkKHsNCiB9KSB7DQogICBjb25zdCBjbGFzc2VzID0gdXNlU3R5bGVzKCk7DQogICBsZXQgdGFi cyA9IFtnZXR0ZXh0KCdTZXNzaW9ucycpLCBnZXR0ZXh0KCdMb2NrcycpLCBnZXR0ZXh0KCdQcmVw YXJlZCBUcmFuc2FjdGlvbnMnKV07DQorICBsZXQgbWFpblRhYnMgPSBbZ2V0dGV4dCgnR2VuZXJh bCcpLCBnZXR0ZXh0KCdTeXN0ZW0gU3RhdGlzdGljcycpXTsNCisgIGxldCBzeXN0ZW1TdGF0c1Rh YnMgPSBbZ2V0dGV4dCgnU3VtbWFyeScpLCBnZXR0ZXh0KCdDUFUnKSwgZ2V0dGV4dCgnTWVtb3J5 JyksIGdldHRleHQoJ1N0b3JhZ2UnKV07DQogICBjb25zdCBbZGFzaERhdGEsIHNldGRhc2hEYXRh XSA9IHVzZVN0YXRlKFtdKTsNCiAgIGNvbnN0IFttc2csIHNldE1zZ10gPSB1c2VTdGF0ZSgnJyk7 DQorICBjb25zdCBbc3NNc2csIHNldFNzTXNnXSA9IHVzZVN0YXRlKCcnKTsNCiAgIGNvbnN0IFt0 YWJWYWwsIHNldFRhYlZhbF0gPSB1c2VTdGF0ZSgwKTsNCisgIGNvbnN0IFttYWluVGFiVmFsLCBz ZXRtYWluVGFiVmFsXSA9IHVzZVN0YXRlKDApOw0KICAgY29uc3QgW3JlZnJlc2gsIHNldFJlZnJl c2hdID0gdXNlU3RhdGUoZmFsc2UpOw0KICAgY29uc3QgW2FjdGl2ZU9ubHksIHNldEFjdGl2ZU9u bHldID0gdXNlU3RhdGUoZmFsc2UpOw0KICAgY29uc3QgW3NjaGVtYURpY3QsIHNldFNjaGVtYURp Y3RdID0gUmVhY3QudXNlU3RhdGUoe30pOw0KKyAgY29uc3QgW3N5c3RlbVN0YXRzVGFiVmFsLCBz ZXRTeXN0ZW1TdGF0c1RhYlZhbF0gPSB1c2VTdGF0ZSgwKTsNCisNCisgIGNvbnN0IHN5c3RlbVN0 YXRzVGFiQ2hhbmdlZCA9IChlLCB0YWJWYWwpID0+IHsNCisgICAgc2V0U3lzdGVtU3RhdHNUYWJW YWwodGFiVmFsKTsNCisgIH07DQogDQogICBpZiAoIWRpZCkgew0KICAgICB0YWJzLnB1c2goZ2V0 dGV4dCgnQ29uZmlndXJhdGlvbicpKTsNCkBAIC0xNjMsNiArMTc2LDEwIEBAIGV4cG9ydCBkZWZh dWx0IGZ1bmN0aW9uIERhc2hib2FyZCh7DQogICAgIHNldFRhYlZhbCh0YWJWYWwpOw0KICAgfTsN CiANCisgIGNvbnN0IG1haW5UYWJDaGFuZ2VkID0gKGUsIHRhYlZhbCkgPT4gew0KKyAgICBzZXRt YWluVGFiVmFsKHRhYlZhbCk7DQorICB9Ow0KKw0KICAgY29uc3Qgc2VydmVyQ29uZmlnQ29sdW1u cyA9IFsNCiAgICAgew0KICAgICAgIGFjY2Vzc29yOiAnbmFtZScsDQpAQCAtNzQ1LDYgKzc2Miw3 IEBAIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhc2hib2FyZCh7DQogDQogICB1c2VFZmZlY3Qo KCkgPT4gew0KICAgICBsZXQgdXJsLA0KKyAgICAgIHNzX2V4dGVuc2lvbl9jaGVja191cmwgPSB1 cmxfZm9yKCdkYXNoYm9hcmQuY2hlY2tfc3lzdGVtX3N0YXRpc3RpY3MnKSwNCiAgICAgICBtZXNz YWdlID0gZ2V0dGV4dCgNCiAgICAgICAgICdQbGVhc2UgY29ubmVjdCB0byB0aGUgc2VsZWN0ZWQg c2VydmVyIHRvIHZpZXcgdGhlIGRhc2hib2FyZC4nDQogICAgICAgKTsNCkBAIC03NzAsNiArNzg4 LDEwIEBAIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhc2hib2FyZCh7DQogICAgICAgaWYgKGRp ZCkgdXJsICs9IHNpZCArICcvJyArIGRpZDsNCiAgICAgICBlbHNlIHVybCArPSBzaWQ7DQogDQor ICAgICAgaWYgKGRpZCAmJiAhcHJvcHMuZGJDb25uZWN0ZWQpIHJldHVybjsNCisgICAgICBpZiAo ZGlkKSBzc19leHRlbnNpb25fY2hlY2tfdXJsICs9ICcvJyArIHNpZCArICcvJyArIGRpZDsNCisg ICAgICBlbHNlIHNzX2V4dGVuc2lvbl9jaGVja191cmwgKz0gJy8nICsgc2lkOw0KKw0KICAgICAg IGNvbnN0IGFwaSA9IGdldEFwaUluc3RhbmNlKCk7DQogICAgICAgaWYgKG5vZGUpIHsNCiAgICAg ICAgIGFwaSh7DQpAQCAtNzg3LDYgKzgwOSwyMCBAQCBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBE YXNoYm9hcmQoew0KICAgICAgICAgICAgIC8vIHNob3cgZmFpbGVkIG1lc3NhZ2UuDQogICAgICAg ICAgICAgc2V0TXNnKGdldHRleHQoJ0ZhaWxlZCB0byByZXRyaWV2ZSBkYXRhIGZyb20gdGhlIHNl cnZlci4nKSk7DQogICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAgYXBpKHsNCisgICAgICAgICAg dXJsOiBzc19leHRlbnNpb25fY2hlY2tfdXJsLA0KKyAgICAgICAgICB0eXBlOiAnR0VUJywNCisg ICAgICAgIH0pDQorICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCisgICAgICAgICAgICBjb25z dCBkYXRhID0gcmVzLmRhdGE7DQorICAgICAgICAgICAgaWYoZGF0YVsnc3NfcHJlc2VudCddID09 IGZhbHNlKXsNCisgICAgICAgICAgICAgIHNldFNzTXNnKGdldHRleHQoJ1N5c3RlbSBzdGF0cyBl eHRlbnNpb24gaXMgbm90IGluc3RhbGxlZC4gWW91IGNhbiBpbnN0YWxsIHRoZSBleHRlbnNpb24g aW4gYSBkYXRhYmFzZSB1c2luZyB0aGUgIkNSRUFURSBFWFRFTlNJT04gc3lzdGVtX3N0YXRzOyIg U1FMIGNvbW1hbmQuIFJlbG9hZCB0aGUgcGdBZG1pbiBvbmNlIHlvdSBpbnN0YWxsZWQuJykpOw0K KyAgICAgICAgICAgIH0NCisgICAgICAgICAgfSkNCisgICAgICAgICAgLmNhdGNoKCgpID0+IHsN CisgICAgICAgICAgICBzZXRTc01zZyhnZXR0ZXh0KCdGYWlsZWQgdG8gdmVyaWZ5IHRoZSBwcmVz ZW5jZSBvZiBzeXN0ZW0gc3RhdHMgZXh0ZW5zaW9uLicpKTsNCisgICAgICAgICAgfSk7DQogICAg ICAgfSBlbHNlIHsNCiAgICAgICAgIHNldE1zZyhtZXNzYWdlKTsNCiAgICAgICB9DQpAQCAtODY3 LDY4ICs5MDMsMTQ4IEBAIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhc2hib2FyZCh7DQogICAg ICAge3NpZCAmJiBwcm9wcy5zZXJ2ZXJDb25uZWN0ZWQgPyAoDQogICAgICAgICA8Qm94IGNsYXNz TmFtZT17Y2xhc3Nlcy5kYXNoYm9hcmRQYW5lbH0+DQogICAgICAgICAgIDxCb3ggY2xhc3NOYW1l PXtjbGFzc2VzLmVtcHR5UGFuZWx9Pg0KLSAgICAgICAgICAgIHshXy5pc1VuZGVmaW5lZChwcmVm ZXJlbmNlcykgJiYgcHJlZmVyZW5jZXMuc2hvd19ncmFwaHMgJiYgKA0KLSAgICAgICAgICAgICAg PEdyYXBocw0KLSAgICAgICAgICAgICAgICBrZXk9e3NpZCArIGRpZH0NCi0gICAgICAgICAgICAg ICAgcHJlZmVyZW5jZXM9e3ByZWZlcmVuY2VzfQ0KLSAgICAgICAgICAgICAgICBzaWQ9e3NpZH0N Ci0gICAgICAgICAgICAgICAgZGlkPXtkaWR9DQotICAgICAgICAgICAgICAgIHBhZ2VWaXNpYmxl PXtwcm9wcy5wYW5lbFZpc2libGV9DQotICAgICAgICAgICAgICA+PC9HcmFwaHM+DQotICAgICAg ICAgICAgKX0NCi0gICAgICAgICAgICB7IV8uaXNVbmRlZmluZWQocHJlZmVyZW5jZXMpICYmIHBy ZWZlcmVuY2VzLnNob3dfYWN0aXZpdHkgJiYgKA0KLSAgICAgICAgICAgICAgPEJveCBjbGFzc05h bWU9e2NsYXNzZXMucGFuZWxDb250ZW50fT4NCi0gICAgICAgICAgICAgICAgPEJveA0KLSAgICAg ICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5jYXJkSGVhZGVyfQ0KLSAgICAgICAgICAg ICAgICAgIHRpdGxlPXtwcm9wcy5kYkNvbm5lY3RlZCA/ICBnZXR0ZXh0KCdEYXRhYmFzZSBhY3Rp dml0eScpIDogZ2V0dGV4dCgnU2VydmVyIGFjdGl2aXR5Jyl9DQotICAgICAgICAgICAgICAgID4N Ci0gICAgICAgICAgICAgICAgICB7cHJvcHMuZGJDb25uZWN0ZWQgPyAgZ2V0dGV4dCgnRGF0YWJh c2UgYWN0aXZpdHknKSA6IGdldHRleHQoJ1NlcnZlciBhY3Rpdml0eScpfXsnICd9DQorICAgICAg ICAgICAgPEJveCBjbGFzc05hbWU9e2NsYXNzZXMucGFuZWxDb250ZW50fT4NCisgICAgICAgICAg ICAgIDxCb3ggaGVpZ2h0PSIxMDAlIiBkaXNwbGF5PSJmbGV4IiBmbGV4RGlyZWN0aW9uPSJjb2x1 bW4iPg0KKyAgICAgICAgICAgICAgICA8Qm94Pg0KKyAgICAgICAgICAgICAgICAgIDxUYWJzDQor ICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bWFpblRhYlZhbH0NCisgICAgICAgICAgICAgICAg ICAgIG9uQ2hhbmdlPXttYWluVGFiQ2hhbmdlZH0NCisgICAgICAgICAgICAgICAgICA+DQorICAg ICAgICAgICAgICAgICAgICB7bWFpblRhYnMubWFwKCh0YWJWYWx1ZSkgPT4gew0KKyAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gPFRhYiBrZXk9e3RhYlZhbHVlfSBsYWJlbD17dGFiVmFsdWV9 IC8+Ow0KKyAgICAgICAgICAgICAgICAgICAgfSl9DQorICAgICAgICAgICAgICAgICAgICA8UmVm cmVzaEJ1dHRvbi8+DQorICAgICAgICAgICAgICAgICAgPC9UYWJzPg0KICAgICAgICAgICAgICAg ICA8L0JveD4NCi0gICAgICAgICAgICAgICAgPEJveCBoZWlnaHQ9IjEwMCUiIGRpc3BsYXk9ImZs ZXgiIGZsZXhEaXJlY3Rpb249ImNvbHVtbiI+DQotICAgICAgICAgICAgICAgICAgPEJveD4NCi0g ICAgICAgICAgICAgICAgICAgIDxUYWJzDQotICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0 YWJWYWx9DQotICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0YWJDaGFuZ2VkfQ0KLSAg ICAgICAgICAgICAgICAgICAgPg0KLSAgICAgICAgICAgICAgICAgICAgICB7dGFicy5tYXAoKHRh YlZhbHVlKSA9PiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxUYWIga2V5PXt0 YWJWYWx1ZX0gbGFiZWw9e3RhYlZhbHVlfSAvPjsNCi0gICAgICAgICAgICAgICAgICAgICAgfSl9 DQotICAgICAgICAgICAgICAgICAgICAgIDxSZWZyZXNoQnV0dG9uLz4NCi0gICAgICAgICAgICAg ICAgICAgIDwvVGFicz4NCisgICAgICAgICAgICAgICAgey8qIEdlbmVyYWwgU3RhdGlzdGljcyAq L30NCisgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXttYWluVGFiVmFsfSBpbmRleD17 MH0gY2xhc3NOYW1lUm9vdD17Y2xhc3Nlcy50YWJQYW5lbH0+DQorICAgICAgICAgICAgICAgICAg eyFfLmlzVW5kZWZpbmVkKHByZWZlcmVuY2VzKSAmJiBwcmVmZXJlbmNlcy5zaG93X2dyYXBocyAm JiAoDQorICAgICAgICAgICAgICAgICAgICA8R3JhcGhzDQorICAgICAgICAgICAgICAgICAgICAg IGtleT17c2lkICsgZGlkfQ0KKyAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJlbmNlcz17cHJl ZmVyZW5jZXN9DQorICAgICAgICAgICAgICAgICAgICAgIHNpZD17c2lkfQ0KKyAgICAgICAgICAg ICAgICAgICAgICBkaWQ9e2RpZH0NCisgICAgICAgICAgICAgICAgICAgICAgcGFnZVZpc2libGU9 e3Byb3BzLnBhbmVsVmlzaWJsZX0NCisgICAgICAgICAgICAgICAgICAgID48L0dyYXBocz4NCisg ICAgICAgICAgICAgICAgICApfQ0KKyAgICAgICAgICAgICAgICAgIHshXy5pc1VuZGVmaW5lZChw cmVmZXJlbmNlcykgJiYgcHJlZmVyZW5jZXMuc2hvd19hY3Rpdml0eSAmJiAoDQorICAgICAgICAg ICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17Y2xhc3Nlcy5wYW5lbENvbnRlbnR9Pg0KKyAgICAg ICAgICAgICAgICAgICAgICA8Qm94DQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1l PXtjbGFzc2VzLmNhcmRIZWFkZXJ9DQorICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3By b3BzLmRiQ29ubmVjdGVkID8gIGdldHRleHQoJ0RhdGFiYXNlIGFjdGl2aXR5JykgOiBnZXR0ZXh0 KCdTZXJ2ZXIgYWN0aXZpdHknKX0NCisgICAgICAgICAgICAgICAgICAgICAgPg0KKyAgICAgICAg ICAgICAgICAgICAgICAgIHtwcm9wcy5kYkNvbm5lY3RlZCA/ICBnZXR0ZXh0KCdEYXRhYmFzZSBh Y3Rpdml0eScpIDogZ2V0dGV4dCgnU2VydmVyIGFjdGl2aXR5Jyl9eycgJ30NCisgICAgICAgICAg ICAgICAgICAgICAgPC9Cb3g+DQorICAgICAgICAgICAgICAgICAgICAgIDxCb3ggaGVpZ2h0PSIx MDAlIiBkaXNwbGF5PSJmbGV4IiBmbGV4RGlyZWN0aW9uPSJjb2x1bW4iPg0KKyAgICAgICAgICAg ICAgICAgICAgICAgIDxCb3g+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFicw0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGFiVmFsfQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbkNoYW5nZT17dGFiQ2hhbmdlZH0NCisgICAgICAgICAgICAgICAgICAg ICAgICAgID4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RhYnMubWFwKCh0YWJWYWx1 ZSkgPT4gew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8VGFiIGtleT17 dGFiVmFsdWV9IGxhYmVsPXt0YWJWYWx1ZX0gLz47DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0pfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVmcmVzaEJ1dHRvbi8+DQor ICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYnM+DQorICAgICAgICAgICAgICAgICAgICAg ICAgPC9Cb3g+DQorICAgICAgICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXt0YWJW YWx9IGluZGV4PXswfSBjbGFzc05hbWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4NCisgICAgICAg ICAgICAgICAgICAgICAgICAgIDxQZ1RhYmxlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhdmVUYWJsZT17ZmFsc2V9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUhl YWRlcj17Q3VzdG9tQWN0aXZlT25seUhlYWRlcn0NCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29sdW1ucz17YWN0aXZpdHlDb2x1bW5zfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkYXRhPXtmaWx0ZXJlZERhc2hEYXRhfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz Y2hlbWE9e3NjaGVtYURpY3R9DQorICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9QZ1RhYmxl Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFiUGFuZWw+DQorICAgICAgICAgICAgICAg ICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXt0YWJWYWx9IGluZGV4PXsxfSBjbGFzc05hbWVSb290 PXtjbGFzc2VzLnRhYlBhbmVsfT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxQZ1RhYmxl DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdmVUYWJsZT17ZmFsc2V9DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2RhdGFiYXNlTG9ja3NDb2x1bW5zfQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXtkYXNoRGF0YX0NCisgICAgICAgICAgICAg ICAgICAgICAgICAgID48L1BnVGFibGU+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJQ YW5lbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8VGFiUGFuZWwgdmFsdWU9e3RhYlZhbH0g aW5kZXg9ezJ9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9Pg0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgPFBnVGFibGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F2 ZVRhYmxlPXtmYWxzZX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucz17ZGF0 YWJhc2VQcmVwYXJlZENvbHVtbnN9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9 e2Rhc2hEYXRhfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvUGdUYWJsZT4NCisgICAg ICAgICAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPg0KKyAgICAgICAgICAgICAgICAgICAgICAg IDxUYWJQYW5lbCB2YWx1ZT17dGFiVmFsfSBpbmRleD17M30gY2xhc3NOYW1lUm9vdD17Y2xhc3Nl cy50YWJQYW5lbH0+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8UGdUYWJsZQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXZlVGFibGU9e2ZhbHNlfQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb2x1bW5zPXtzZXJ2ZXJDb25maWdDb2x1bW5zfQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhPXtkYXNoRGF0YX0NCisgICAgICAgICAgICAgICAgICAgICAg ICAgID48L1BnVGFibGU+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4NCisg ICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+DQorICAgICAgICAgICAgICAgICAgICA8L0JveD4N CisgICAgICAgICAgICAgICAgICApfQ0KKyAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPg0KKyAg ICAgICAgICAgICAgICB7LyogU3lzdGVtIFN0YXRpc3RpY3MgKi99DQorICAgICAgICAgICAgICAg IDxUYWJQYW5lbCB2YWx1ZT17bWFpblRhYlZhbH0gaW5kZXg9ezF9IGNsYXNzTmFtZVJvb3Q9e2Ns YXNzZXMudGFiUGFuZWx9Pg0KKyAgICAgICAgICAgICAgICAgIDxCb3ggaGVpZ2h0PSIxMDAlIiBk aXNwbGF5PSJmbGV4IiBmbGV4RGlyZWN0aW9uPSJjb2x1bW4iPg0KKyAgICAgICAgICAgICAgICAg ICAge3NzTXNnID09PSAnJyA/DQorICAgICAgICAgICAgICAgICAgICAgIDw+DQorICAgICAgICAg ICAgICAgICAgICAgICAgPEJveD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJzDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzeXN0ZW1TdGF0c1RhYlZhbH0NCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3N5c3RlbVN0YXRzVGFiQ2hhbmdl ZH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgID4NCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAge3N5c3RlbVN0YXRzVGFicy5tYXAoKHRhYlZhbHVlKSA9PiB7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIDxUYWIga2V5PXt0YWJWYWx1ZX0gbGFiZWw9e3RhYlZh bHVlfSAvPjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9DQorICAgICAgICAgICAg ICAgICAgICAgICAgICA8L1RhYnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+DQor ICAgICAgICAgICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXtzeXN0ZW1TdGF0c1RhYlZh bH0gaW5kZXg9ezB9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9Pg0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgPFN1bW1hcnkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg a2V5PXtzaWQgKyBkaWR9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcmVuY2Vz PXtwcmVmZXJlbmNlc30NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkPXtzaWR9DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD17ZGlkfQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYWdlVmlzaWJsZT17cHJvcHMucGFuZWxWaXNpYmxlfQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25uZWN0ZWQ9e3Byb3BzLnNlcnZlckNvbm5lY3RlZH0N CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+DQorICAgICAgICAgICAgICAgICAgICAgICAg PC9UYWJQYW5lbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8VGFiUGFuZWwgdmFsdWU9e3N5 c3RlbVN0YXRzVGFiVmFsfSBpbmRleD17MX0gY2xhc3NOYW1lUm9vdD17Y2xhc3Nlcy50YWJQYW5l bH0+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8Q1BVDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGtleT17c2lkICsgZGlkfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmVmZXJlbmNlcz17cHJlZmVyZW5jZXN9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp ZD17c2lkfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9e2RpZH0NCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFnZVZpc2libGU9e3Byb3BzLnBhbmVsVmlzaWJsZX0NCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29ubmVjdGVkPXtwcm9wcy5zZXJ2ZXJD b25uZWN0ZWR9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAvPg0KKyAgICAgICAgICAgICAg ICAgICAgICAgIDwvVGFiUGFuZWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPFRhYlBhbmVs IHZhbHVlPXtzeXN0ZW1TdGF0c1RhYlZhbH0gaW5kZXg9ezJ9IGNsYXNzTmFtZVJvb3Q9e2NsYXNz ZXMudGFiUGFuZWx9Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPE1lbW9yeQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3NpZCArIGRpZH0NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJlZmVyZW5jZXM9e3ByZWZlcmVuY2VzfQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaWQ9e3NpZH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPXtk aWR9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VWaXNpYmxlPXtwcm9wcy5wYW5l bFZpc2libGV9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbm5lY3RlZD17 cHJvcHMuc2VydmVyQ29ubmVjdGVkfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4NCisg ICAgICAgICAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPg0KKyAgICAgICAgICAgICAgICAgICAg ICAgIDxUYWJQYW5lbCB2YWx1ZT17c3lzdGVtU3RhdHNUYWJWYWx9IGluZGV4PXszfSBjbGFzc05h bWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxT dG9yYWdlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17c2lkICsgZGlkfQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJlbmNlcz17cHJlZmVyZW5jZXN9DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZD17c2lkfQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWQ9e2RpZH0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVZpc2li bGU9e3Byb3BzLnBhbmVsVmlzaWJsZX0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vy dmVyQ29ubmVjdGVkPXtwcm9wcy5zZXJ2ZXJDb25uZWN0ZWR9DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFiUGFuZWw+DQorICAgICAg ICAgICAgICAgICAgICAgIDwvPiA6DQorICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NO YW1lPXtjbGFzc2VzLmVtcHR5UGFuZWx9Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFbXB0 eVBhbmVsTWVzc2FnZSB0ZXh0PXtzc01zZ30vPg0KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rp dj4NCisgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICA8L0JveD4NCi0g ICAgICAgICAgICAgICAgICA8VGFiUGFuZWwgdmFsdWU9e3RhYlZhbH0gaW5kZXg9ezB9IGNsYXNz TmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFuZWx9Pg0KLSAgICAgICAgICAgICAgICAgICAgPFBnVGFi bGUNCi0gICAgICAgICAgICAgICAgICAgICAgY2F2ZVRhYmxlPXtmYWxzZX0NCi0gICAgICAgICAg ICAgICAgICAgICAgQ3VzdG9tSGVhZGVyPXtDdXN0b21BY3RpdmVPbmx5SGVhZGVyfQ0KLSAgICAg ICAgICAgICAgICAgICAgICBjb2x1bW5zPXthY3Rpdml0eUNvbHVtbnN9DQotICAgICAgICAgICAg ICAgICAgICAgIGRhdGE9e2ZpbHRlcmVkRGFzaERhdGF9DQotICAgICAgICAgICAgICAgICAgICAg IHNjaGVtYT17c2NoZW1hRGljdH0NCi0gICAgICAgICAgICAgICAgICAgID48L1BnVGFibGU+DQot ICAgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4NCi0gICAgICAgICAgICAgICAgICA8VGFiUGFu ZWwgdmFsdWU9e3RhYlZhbH0gaW5kZXg9ezF9IGNsYXNzTmFtZVJvb3Q9e2NsYXNzZXMudGFiUGFu ZWx9Pg0KLSAgICAgICAgICAgICAgICAgICAgPFBnVGFibGUNCi0gICAgICAgICAgICAgICAgICAg ICAgY2F2ZVRhYmxlPXtmYWxzZX0NCi0gICAgICAgICAgICAgICAgICAgICAgY29sdW1ucz17ZGF0 YWJhc2VMb2Nrc0NvbHVtbnN9DQotICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e2Rhc2hEYXRh fQ0KLSAgICAgICAgICAgICAgICAgICAgPjwvUGdUYWJsZT4NCi0gICAgICAgICAgICAgICAgICA8 L1RhYlBhbmVsPg0KLSAgICAgICAgICAgICAgICAgIDxUYWJQYW5lbCB2YWx1ZT17dGFiVmFsfSBp bmRleD17Mn0gY2xhc3NOYW1lUm9vdD17Y2xhc3Nlcy50YWJQYW5lbH0+DQotICAgICAgICAgICAg ICAgICAgICA8UGdUYWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICBjYXZlVGFibGU9e2ZhbHNl fQ0KLSAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zPXtkYXRhYmFzZVByZXBhcmVkQ29sdW1u c30NCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YT17ZGFzaERhdGF9DQotICAgICAgICAgICAg ICAgICAgICA+PC9QZ1RhYmxlPg0KLSAgICAgICAgICAgICAgICAgIDwvVGFiUGFuZWw+DQotICAg ICAgICAgICAgICAgICAgPFRhYlBhbmVsIHZhbHVlPXt0YWJWYWx9IGluZGV4PXszfSBjbGFzc05h bWVSb290PXtjbGFzc2VzLnRhYlBhbmVsfT4NCi0gICAgICAgICAgICAgICAgICAgIDxQZ1RhYmxl DQotICAgICAgICAgICAgICAgICAgICAgIGNhdmVUYWJsZT17ZmFsc2V9DQotICAgICAgICAgICAg ICAgICAgICAgIGNvbHVtbnM9e3NlcnZlckNvbmZpZ0NvbHVtbnN9DQotICAgICAgICAgICAgICAg ICAgICAgIGRhdGE9e2Rhc2hEYXRhfQ0KLSAgICAgICAgICAgICAgICAgICAgPjwvUGdUYWJsZT4N Ci0gICAgICAgICAgICAgICAgICA8L1RhYlBhbmVsPg0KLSAgICAgICAgICAgICAgICA8L0JveD4N CisgICAgICAgICAgICAgICAgPC9UYWJQYW5lbD4NCiAgICAgICAgICAgICAgIDwvQm94Pg0KLSAg ICAgICAgICAgICl9DQorICAgICAgICAgICAgPC9Cb3g+DQogICAgICAgICAgIDwvQm94Pg0KICAg ICAgICAgPC9Cb3g+DQogICAgICAgKSA6IHNob3dEZWZhdWx0Q29udGVudHMoKSB9DQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0cy9DUFUuanN4 IGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0cy9DUFUuanN4DQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwLi42MGE0ZmZhN2UNCi0tLSAvZGV2 L251bGwNCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvU3lzdGVtU3RhdHMv Q1BVLmpzeA0KQEAgLTAsMCArMSwzNjggQEANCitpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVz ZUVmZmVjdCwgdXNlUmVmLCB1c2VSZWR1Y2VyLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnOw0KK2lt cG9ydCBQZ1RhYmxlIGZyb20gJ3NvdXJjZXMvY29tcG9uZW50cy9QZ1RhYmxlJzsNCitpbXBvcnQg Z2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOw0KK2ltcG9ydCBQcm9wVHlwZXMgZnJvbSAn cHJvcC10eXBlcyc7DQoraW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9j b3JlL3N0eWxlcyc7DQoraW1wb3J0IHVybF9mb3IgZnJvbSAnc291cmNlcy91cmxfZm9yJzsNCitp bXBvcnQge2dldEdDRCwgZ2V0RXBvY2h9IGZyb20gJ3NvdXJjZXMvdXRpbHMnOw0KK2ltcG9ydCB7 Q2hhcnRDb250YWluZXJ9IGZyb20gJy4uL0Rhc2hib2FyZCc7DQoraW1wb3J0IHsgR3JpZCB9IGZy b20gJ0BtYXRlcmlhbC11aS9jb3JlJzsNCitpbXBvcnQgeyBEQVRBX1BPSU5UX1NJWkUgfSBmcm9t ICdzb3VyY2VzL2NoYXJ0anMnOw0KK2ltcG9ydCBTdHJlYW1pbmdDaGFydCBmcm9tICcuLi8uLi8u Li8uLi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0NoYXJ0JzsNCitpbXBv cnQge3VzZUludGVydmFsLCB1c2VQcmV2aW91c30gZnJvbSAnc291cmNlcy9jdXN0b21faG9va3Mn Ow0KK2ltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7DQorDQorZXhwb3J0IGNvbnN0IFhfQVhJU19M RU5HVEggPSA3NTsNCisNCitjb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVzKCh0aGVtZSkgPT4g KHsNCisgIGF1dG9SZXNpemVyOiB7DQorICAgIGhlaWdodDogJzEwMCUgIWltcG9ydGFudCcsDQor ICAgIHdpZHRoOiAnMTAwJSAhaW1wb3J0YW50JywNCisgICAgYmFja2dyb3VuZDogdGhlbWUucGFs ZXR0ZS5ncmV5WzQwMF0sDQorICAgIHBhZGRpbmc6ICc3LjVweCcsDQorICAgIG92ZXJmbG93WDog J2F1dG8gIWltcG9ydGFudCcsDQorICAgIG92ZXJmbG93WTogJ2hpZGRlbiAhaW1wb3J0YW50JywN CisgICAgbWluSGVpZ2h0OiAnMTAwJScsDQorICAgIG1pbldpZHRoOiAnMTAwJScsDQorICB9LA0K KyAgY29udGFpbmVyOiB7DQorICAgIGhlaWdodDogJ2F1dG8nLA0KKyAgICBiYWNrZ3JvdW5kOiB0 aGVtZS5wYWxldHRlLmdyZXlbMjAwXSwNCisgICAgcGFkZGluZzogJzEwcHgnLA0KKyAgICBtYXJn aW5Cb3R0b206ICczMHB4JywNCisgIH0sDQorICBmaXhlZENvbnRhaW5lcjogew0KKyAgICBoZWln aHQ6ICc1NzdweCcsDQorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ3JleVsyMDBdLA0K KyAgICBwYWRkaW5nOiAnMTBweCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzMwcHgnLA0KKyAgfSwN CisgIGNvbnRhaW5lckhlYWRlcjogew0KKyAgICBmb250U2l6ZTogJzE2cHgnLA0KKyAgICBmb250 V2VpZ2h0OiAnYm9sZCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzVweCcsDQorICB9DQorfSkpOw0K Kw0KK2V4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhieXRlcykgew0KKyAgY29uc3QgdW5pdHMg PSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTsNCisgIGxldCB1bml0SW5kZXggPSAwOw0K Kw0KKyAgd2hpbGUgKGJ5dGVzID49IDEwMjQgJiYgdW5pdEluZGV4IDwgdW5pdHMubGVuZ3RoIC0g MSkgew0KKyAgICBieXRlcyAvPSAxMDI0Ow0KKyAgICB1bml0SW5kZXgrKzsNCisgIH0NCisNCisg IHJldHVybiBgJHtieXRlcy50b0ZpeGVkKDIpfSAke3VuaXRzW3VuaXRJbmRleF19YDsNCit9DQor DQorZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEobGFiZWxzLCByZWZyZXNoUmF0ZSkgew0K KyAgY29uc3QgY29sb3JzID0gWycjRkY2Mzg0JywnIzM2QTJFQicsJyNGRkNFNTYnLCcjNEJDMEMw JywnIzk5NjZGRicsJyNGRjlGNDAnLCcjOEQ2RTYzJywnIzIxOTZGMycsJyNGRkVCM0InLCcjOUMy N0IwJywnIzAwQkNENCcsJyNDRERDMzknXTsNCisgIGxldCBkYXRhc2V0cyA9IE9iamVjdC5rZXlz KGxhYmVscykubWFwKChsYWJlbCwgaSk9PnsNCisgICAgcmV0dXJuIHsNCisgICAgICBsYWJlbDog bGFiZWwsDQorICAgICAgZGF0YTogbGFiZWxzW2xhYmVsXSB8fCBbXSwNCisgICAgICBib3JkZXJD b2xvcjogY29sb3JzW2ldLA0KKyAgICAgIHBvaW50SGl0UmFkaXVzOiBEQVRBX1BPSU5UX1NJWkUs DQorICAgIH07DQorICB9KSB8fCBbXTsNCisNCisgIHJldHVybiB7DQorICAgIGRhdGFzZXRzOiBk YXRhc2V0cywNCisgICAgcmVmcmVzaFJhdGU6IHJlZnJlc2hSYXRlLA0KKyAgfTsNCit9DQorDQor LyogVVJMIGZvciBmZXRjaGluZyBncmFwaHMgZGF0YSAqLw0KK2V4cG9ydCBmdW5jdGlvbiBnZXRT dGF0c1VybChzaWQ9LTEsIGRpZD0tMSwgY2hhcnRfbmFtZXM9W10pIHsNCisgIGxldCBiYXNlX3Vy bCA9IHVybF9mb3IoJ2Rhc2hib2FyZC5zeXN0ZW1fc3RhdGlzdGljcycpOw0KKyAgYmFzZV91cmwg Kz0gJy8nICsgc2lkOw0KKyAgYmFzZV91cmwgKz0gKGRpZCA+IDApID8gKCcvJyArIGRpZCkgOiAn JzsNCisgIGJhc2VfdXJsICs9ICc/Y2hhcnRfbmFtZXM9JyArIGNoYXJ0X25hbWVzLmpvaW4oJywn KTsNCisNCisgIHJldHVybiBiYXNlX3VybDsNCit9DQorDQorLyogVGhpcyB3aWxsIHByb2Nlc3Mg aW5jb21pbmcgY2hhcnRzIGRhdGEgYWRkIGl0IHRoZSBwcmV2aW91cyBjaGFydHMNCisgKiBkYXRh IHRvIGdldCB0aGUgbmV3IHN0YXRlLg0KKyAqLw0KK2V4cG9ydCBmdW5jdGlvbiBzdGF0c1JlZHVj ZXIoc3RhdGUsIGFjdGlvbikgew0KKw0KKyAgaWYoYWN0aW9uLnJlc2V0KSB7DQorICAgIHJldHVy biBhY3Rpb24ucmVzZXQ7DQorICB9DQorDQorICBpZighYWN0aW9uLmluY29taW5nKSB7DQorICAg IHJldHVybiBzdGF0ZTsNCisgIH0NCisNCisgIGlmKCFhY3Rpb24uY291bnRlckRhdGEpIHsNCisg ICAgYWN0aW9uLmNvdW50ZXJEYXRhID0gYWN0aW9uLmluY29taW5nOw0KKyAgfQ0KKw0KKyAgbGV0 IG5ld1N0YXRlID0ge307DQorICBPYmplY3Qua2V5cyhhY3Rpb24uaW5jb21pbmcpLmZvckVhY2go bGFiZWwgPT4gew0KKyAgICBpZihzdGF0ZVtsYWJlbF0pIHsNCisgICAgICBuZXdTdGF0ZVtsYWJl bF0gPSBbDQorICAgICAgICBhY3Rpb24uY291bnRlciA/ICBhY3Rpb24uaW5jb21pbmdbbGFiZWxd IC0gYWN0aW9uLmNvdW50ZXJEYXRhW2xhYmVsXSA6IGFjdGlvbi5pbmNvbWluZ1tsYWJlbF0sDQor ICAgICAgICAuLi5zdGF0ZVtsYWJlbF0uc2xpY2UoMCwgWF9BWElTX0xFTkdUSC0xKSwNCisgICAg ICBdOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIG5ld1N0YXRlW2xhYmVsXSA9IFsNCisgICAgICAg IGFjdGlvbi5jb3VudGVyID8gIGFjdGlvbi5pbmNvbWluZ1tsYWJlbF0gLSBhY3Rpb24uY291bnRl ckRhdGFbbGFiZWxdIDogYWN0aW9uLmluY29taW5nW2xhYmVsXSwNCisgICAgICBdOw0KKyAgICB9 DQorICB9KTsNCisgIHJldHVybiBuZXdTdGF0ZTsNCit9DQorDQorY29uc3QgY2hhcnRzRGVmYXVs dCA9IHsNCisgICdjdV9zdGF0cyc6IHsnVXNlciBOb3JtYWwnOiBbXSwgJ1VzZXIgTmljZWQnOiBb XSwgJ0tlcm5lbCc6IFtdLCAnSWRsZSc6IFtdfSwNCisgICdsYV9zdGF0cyc6IHsnMSBtaW4nOiBb XSwgJzUgbWlucyc6IFtdLCAnMTAgbWlucyc6IFtdLCAnMTUgbWlucyc6IFtdfSwNCisgICdwY3Vf c3RhdHMnOiB7fSwNCit9Ow0KKw0KK2V4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENQVSh7cHJlZmVy ZW5jZXMsIHNpZCwgZGlkLCBwYWdlVmlzaWJsZSwgZW5hYmxlUG9sbD10cnVlfSkgew0KKyAgY29u c3QgcmVmcmVzaE9uID0gdXNlUmVmKG51bGwpOw0KKyAgY29uc3QgcHJldlByZWZlcm5jZXMgPSB1 c2VQcmV2aW91cyhwcmVmZXJlbmNlcyk7DQorDQorICBjb25zdCBbY3B1VXNhZ2VJbmZvLCBjcHVV c2FnZUluZm9SZWR1Y2VdID0gdXNlUmVkdWNlcihzdGF0c1JlZHVjZXIsIGNoYXJ0c0RlZmF1bHRb J2N1X3N0YXRzJ10pOw0KKyAgY29uc3QgW2xvYWRBdmdJbmZvLCBsb2FkQXZnSW5mb1JlZHVjZV0g PSB1c2VSZWR1Y2VyKHN0YXRzUmVkdWNlciwgY2hhcnRzRGVmYXVsdFsnbGFfc3RhdHMnXSk7DQor ICBjb25zdCBbcHJvY2Vzc0NwdVVzYWdlU3RhdHMsIHNldFByb2Nlc3NDcHVVc2FnZVN0YXRzXSA9 IHVzZVN0YXRlKFtdKTsNCisNCisgIGNvbnN0IFtjb3VudGVyRGF0YSwgc2V0Q291bnRlckRhdGFd ID0gdXNlU3RhdGUoe30pOw0KKw0KKyAgY29uc3QgW3BvbGxEZWxheSwgc2V0UG9sbERlbGF5XSA9 IHVzZVN0YXRlKDUwMDApOw0KKw0KKyAgY29uc3QgW2Vycm9yTXNnLCBzZXRFcnJvck1zZ10gPSB1 c2VTdGF0ZShudWxsKTsNCisgIGNvbnN0IFtjaGFydERyYXduT25jZSwgc2V0Q2hhcnREcmF3bk9u Y2VdID0gdXNlU3RhdGUoZmFsc2UpOw0KKw0KKyAgY29uc3QgdGFibGVIZWFkZXIgPSBbDQorICAg IHsNCisgICAgICBIZWFkZXI6ICdQSUQnLA0KKyAgICAgIGFjY2Vzc29yOiAncGlkJywNCisgICAg ICBzb3J0YWJsZTogdHJ1ZSwNCisgICAgICByZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJs ZUdsb2JhbEZpbHRlcjogZmFsc2UsDQorICAgIH0sDQorICAgIHsNCisgICAgICBIZWFkZXI6ICdO YW1lJywNCisgICAgICBhY2Nlc3NvcjogJ25hbWUnLA0KKyAgICAgIHNvcnRhYmxlOiB0cnVlLA0K KyAgICAgIHJlc2l6YWJsZTogdHJ1ZSwNCisgICAgICBkaXNhYmxlR2xvYmFsRmlsdGVyOiBmYWxz ZSwNCisgICAgfSwNCisgICAgew0KKyAgICAgIEhlYWRlcjogJ0NQVSBVc2FnZScsDQorICAgICAg YWNjZXNzb3I6ICdjcHVfdXNhZ2UnLA0KKyAgICAgIHNvcnRhYmxlOiB0cnVlLA0KKyAgICAgIHJl c2l6YWJsZTogdHJ1ZSwNCisgICAgICBkaXNhYmxlR2xvYmFsRmlsdGVyOiBmYWxzZSwNCisgICAg fSwNCisgIF07DQorDQorICB1c2VFZmZlY3QoKCk9PnsNCisgICAgbGV0IGNhbGNQb2xsRGVsYXkg PSBmYWxzZTsNCisgICAgaWYocHJldlByZWZlcm5jZXMpIHsNCisgICAgICBpZihwcmV2UHJlZmVy bmNlc1snY3Vfc3RhdHNfcmVmcmVzaCddICE9IHByZWZlcmVuY2VzWydjdV9zdGF0c19yZWZyZXNo J10pIHsNCisgICAgICAgIGNwdVVzYWdlSW5mb1JlZHVjZSh7cmVzZXQ6IGNoYXJ0c0RlZmF1bHRb J2N1X3N0YXRzJ119KTsNCisgICAgICAgIGNhbGNQb2xsRGVsYXkgPSB0cnVlOw0KKyAgICAgIH0N CisgICAgICBpZihwcmV2UHJlZmVybmNlc1snbGFfc3RhdHNfcmVmcmVzaCddICE9IHByZWZlcmVu Y2VzWydsYV9zdGF0c19yZWZyZXNoJ10pIHsNCisgICAgICAgIGxvYWRBdmdJbmZvUmVkdWNlKHty ZXNldDogY2hhcnRzRGVmYXVsdFsnbGFfc3RhdHMnXX0pOw0KKyAgICAgICAgY2FsY1BvbGxEZWxh eSA9IHRydWU7DQorICAgICAgfQ0KKyAgICAgIGlmKHByZXZQcmVmZXJuY2VzWydwY3Vfc3RhdHNf cmVmcmVzaCddICE9IHByZWZlcmVuY2VzWydwY3Vfc3RhdHNfcmVmcmVzaCddKSB7DQorICAgICAg ICBzZXRQcm9jZXNzQ3B1VXNhZ2VTdGF0cyh7cmVzZXQ6IGNoYXJ0c0RlZmF1bHRbJ3BjdV9zdGF0 cyddfSk7DQorICAgICAgICBjYWxjUG9sbERlbGF5ID0gdHJ1ZTsNCisgICAgICB9DQorICAgIH0g ZWxzZSB7DQorICAgICAgY2FsY1BvbGxEZWxheSA9IHRydWU7DQorICAgIH0NCisgICAgaWYoY2Fs Y1BvbGxEZWxheSkgew0KKyAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjaGFydHNEZWZh dWx0KTsNCisgICAgICBjb25zdCBsZW5ndGggPSBrZXlzLmxlbmd0aDsNCisgICAgICBpZihsZW5n dGggPT0gMSl7DQorICAgICAgICBzZXRQb2xsRGVsYXkoDQorICAgICAgICAgIHByZWZlcmVuY2Vz W2tleXNbMF0rJ19yZWZyZXNoJ10qMTAwMA0KKyAgICAgICAgKTsNCisgICAgICB9IGVsc2Ugew0K KyAgICAgICAgc2V0UG9sbERlbGF5KA0KKyAgICAgICAgICBnZXRHQ0QoT2JqZWN0LmtleXMoY2hh cnRzRGVmYXVsdCkubWFwKChuYW1lKT0+cHJlZmVyZW5jZXNbbmFtZSsnX3JlZnJlc2gnXSkpKjEw MDANCisgICAgICAgICk7DQorICAgICAgfQ0KKyAgICB9DQorICB9LCBbcHJlZmVyZW5jZXNdKTsN CisNCisgIHVzZUVmZmVjdCgoKT0+ew0KKyAgICAvKiBDaGFydHMgcmVuZGVyZWQgYXJlIG5vdCB2 aXNpYmxlIHdoZW4sIHRoZSBkYXNoYm9hcmQgaXMgaGlkZGVuIGJ1dCBsYXRlciB2aXNpYmxlICov DQorICAgIGlmKHBhZ2VWaXNpYmxlICYmICFjaGFydERyYXduT25jZSkgew0KKyAgICAgIHNldENo YXJ0RHJhd25PbmNlKHRydWUpOw0KKyAgICB9DQorICB9LCBbcGFnZVZpc2libGVdKTsNCisNCisg IHVzZUludGVydmFsKCgpPT57DQorICAgIGNvbnN0IGN1cnJFcG9jaCA9IGdldEVwb2NoKCk7DQor ICAgIGlmKHJlZnJlc2hPbi5jdXJyZW50ID09PSBudWxsKSB7DQorICAgICAgbGV0IHRtcFJlZiA9 IHt9Ow0KKyAgICAgIE9iamVjdC5rZXlzKGNoYXJ0c0RlZmF1bHQpLmZvckVhY2goKG5hbWUpPT57 DQorICAgICAgICB0bXBSZWZbbmFtZV0gPSBjdXJyRXBvY2g7DQorICAgICAgfSk7DQorICAgICAg cmVmcmVzaE9uLmN1cnJlbnQgPSB0bXBSZWY7DQorICAgIH0NCisNCisgICAgbGV0IGdldEZvciA9 IFtdOw0KKyAgICBPYmplY3Qua2V5cyhjaGFydHNEZWZhdWx0KS5mb3JFYWNoKChuYW1lKT0+ew0K KyAgICAgIGlmKGN1cnJFcG9jaCA+PSByZWZyZXNoT24uY3VycmVudFtuYW1lXSkgew0KKyAgICAg ICAgZ2V0Rm9yLnB1c2gobmFtZSk7DQorICAgICAgICByZWZyZXNoT24uY3VycmVudFtuYW1lXSA9 IGN1cnJFcG9jaCArIHByZWZlcmVuY2VzW25hbWUrJ19yZWZyZXNoJ107DQorICAgICAgfQ0KKyAg ICB9KTsNCisNCisgICAgbGV0IHBhdGggPSBnZXRTdGF0c1VybChzaWQsIGRpZCwgZ2V0Rm9yKTsN CisgICAgaWYgKCFwYWdlVmlzaWJsZSl7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIGF4 aW9zLmdldChwYXRoKQ0KKyAgICAgIC50aGVuKChyZXNwKT0+ew0KKyAgICAgICAgbGV0IGRhdGEg PSByZXNwLmRhdGE7DQorICAgICAgICBzZXRFcnJvck1zZyhudWxsKTsNCisgICAgICAgIGlmKGRh dGEuaGFzT3duUHJvcGVydHkoJ2N1X3N0YXRzJykpew0KKyAgICAgICAgICBsZXQgbmV3X2N1X3N0 YXRzID0gew0KKyAgICAgICAgICAgICdVc2VyIE5vcm1hbCc6IGRhdGFbJ2N1X3N0YXRzJ11bJ3Vz ZXJtb2RlX25vcm1hbF9wcm9jZXNzX3BlcmNlbnQnXT9kYXRhWydjdV9zdGF0cyddWyd1c2VybW9k ZV9ub3JtYWxfcHJvY2Vzc19wZXJjZW50J106MCwNCisgICAgICAgICAgICAnVXNlciBOaWNlZCc6 IGRhdGFbJ2N1X3N0YXRzJ11bJ3VzZXJtb2RlX25pY2VkX3Byb2Nlc3NfcGVyY2VudCddP2RhdGFb J2N1X3N0YXRzJ11bJ3VzZXJtb2RlX25pY2VkX3Byb2Nlc3NfcGVyY2VudCddOjAsDQorICAgICAg ICAgICAgJ0tlcm5lbCc6IGRhdGFbJ2N1X3N0YXRzJ11bJ2tlcm5lbG1vZGVfcHJvY2Vzc19wZXJj ZW50J10/ZGF0YVsnY3Vfc3RhdHMnXVsna2VybmVsbW9kZV9wcm9jZXNzX3BlcmNlbnQnXTowLA0K KyAgICAgICAgICAgICdJZGxlJzogZGF0YVsnY3Vfc3RhdHMnXVsnaWRsZV9tb2RlX3BlcmNlbnQn XT9kYXRhWydjdV9zdGF0cyddWydpZGxlX21vZGVfcGVyY2VudCddOjAsDQorICAgICAgICAgIH07 DQorICAgICAgICAgIGNwdVVzYWdlSW5mb1JlZHVjZSh7aW5jb21pbmc6IG5ld19jdV9zdGF0c30p Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYoZGF0YS5oYXNPd25Qcm9wZXJ0eSgnbGFfc3Rh dHMnKSl7DQorICAgICAgICAgIGxldCBuZXdfbGFfc3RhdHMgPSB7DQorICAgICAgICAgICAgJzEg bWluJzogZGF0YVsnbGFfc3RhdHMnXVsnbG9hZF9hdmdfb25lX21pbnV0ZSddP2RhdGFbJ2xhX3N0 YXRzJ11bJ2xvYWRfYXZnX29uZV9taW51dGUnXTowLA0KKyAgICAgICAgICAgICc1IG1pbnMnOiBk YXRhWydsYV9zdGF0cyddWydsb2FkX2F2Z19maXZlX21pbnV0ZXMnXT9kYXRhWydsYV9zdGF0cydd Wydsb2FkX2F2Z19maXZlX21pbnV0ZXMnXTowLA0KKyAgICAgICAgICAgICcxMCBtaW5zJzogZGF0 YVsnbGFfc3RhdHMnXVsnbG9hZF9hdmdfdGVuX21pbnV0ZXMnXT9kYXRhWydsYV9zdGF0cyddWyds b2FkX2F2Z190ZW5fbWludXRlcyddOjAsDQorICAgICAgICAgICAgJzE1IG1pbnMnOiBkYXRhWyds YV9zdGF0cyddWydsb2FkX2F2Z19maWZ0ZWVuX21pbnV0ZXMnXT9kYXRhWydsYV9zdGF0cyddWyds b2FkX2F2Z19maWZ0ZWVuX21pbnV0ZXMnXTowLA0KKyAgICAgICAgICB9Ow0KKyAgICAgICAgICBs b2FkQXZnSW5mb1JlZHVjZSh7aW5jb21pbmc6IG5ld19sYV9zdGF0c30pOw0KKyAgICAgICAgfQ0K Kw0KKyAgICAgICAgaWYoZGF0YS5oYXNPd25Qcm9wZXJ0eSgncGN1X3N0YXRzJykpew0KKyAgICAg ICAgICBsZXQgcGN1X2luZm9fbGlzdCA9IFtdOw0KKyAgICAgICAgICBjb25zdCBwY3VfaW5mb19v YmogPSBkYXRhWydwY3Vfc3RhdHMnXTsNCisgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcGN1 X2luZm9fb2JqKSB7DQorICAgICAgICAgICAgcGN1X2luZm9fbGlzdC5wdXNoKHsgaWNvbjogJycs IHBpZDogcGN1X2luZm9fb2JqW2tleV1bJ3BpZCddLCBuYW1lOiBwY3VfaW5mb19vYmpba2V5XVsn bmFtZSddLCBjcHVfdXNhZ2U6IGZvcm1hdEJ5dGVzKHBjdV9pbmZvX29ialtrZXldWydjcHVfdXNh Z2UnXSkgfSk7DQorICAgICAgICAgIH0NCisNCisgICAgICAgICAgc2V0UHJvY2Vzc0NwdVVzYWdl U3RhdHMocGN1X2luZm9fbGlzdCk7DQorICAgICAgICB9DQorDQorICAgICAgICBzZXRDb3VudGVy RGF0YSgocHJldkNvdW50ZXJEYXRhKT0+ew0KKyAgICAgICAgICByZXR1cm4gew0KKyAgICAgICAg ICAgIC4uLnByZXZDb3VudGVyRGF0YSwNCisgICAgICAgICAgICAuLi5kYXRhLA0KKyAgICAgICAg ICB9Ow0KKyAgICAgICAgfSk7DQorICAgICAgfSkNCisgICAgICAuY2F0Y2goKGVycm9yKT0+ew0K KyAgICAgICAgaWYoIWVycm9yTXNnKSB7DQorICAgICAgICAgIGNwdVVzYWdlSW5mb1JlZHVjZSh7 cmVzZXQ6Y2hhcnRzRGVmYXVsdFsnY3Vfc3RhdHMnXX0pOw0KKyAgICAgICAgICBsb2FkQXZnSW5m b1JlZHVjZSh7cmVzZXQ6Y2hhcnRzRGVmYXVsdFsnbGFfc3RhdHMnXX0pOw0KKyAgICAgICAgICBz ZXRDb3VudGVyRGF0YSh7fSk7DQorICAgICAgICAgIGlmKGVycm9yLnJlc3BvbnNlKSB7DQorICAg ICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDI4KSB7DQorICAgICAgICAg ICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdQbGVhc2UgY29ubmVjdCB0byB0aGUgc2VsZWN0ZWQg c2VydmVyIHRvIHZpZXcgdGhlIGdyYXBoLicpKTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAg ICAgICAgICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4dCgnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbHN0 IHJlbmRlcmluZyB0aGUgZ3JhcGguJykpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgfSBl bHNlIGlmKGVycm9yLnJlcXVlc3QpIHsNCisgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0 KCdOb3QgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNl cnZlciBoYXMgYmVlbiBjbG9zZWQuJykpOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAg ICAgfSBlbHNlIHsNCisgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsNCisgICAgICAg ICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgIH0pOw0KKyAgfSwgZW5hYmxlUG9sbCA/IHBvbGxEZWxh eSA6IC0xKTsNCisNCisgIHJldHVybiAoDQorICAgIDw+DQorICAgICAgPGRpdiBkYXRhLXRlc3Rp ZD0nZ3JhcGgtcG9sbC1kZWxheScgc3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fT57cG9sbERlbGF5 fTwvZGl2Pg0KKyAgICAgIHtjaGFydERyYXduT25jZSAmJg0KKyAgICAgICAgPENQVVdyYXBwZXIN CisgICAgICAgICAgY3B1VXNhZ2VJbmZvPXt0cmFuc2Zvcm1EYXRhKGNwdVVzYWdlSW5mbywgcHJl ZmVyZW5jZXNbJ2N1X3N0YXRzX3JlZnJlc2gnXSl9DQorICAgICAgICAgIGxvYWRBdmdJbmZvPXt0 cmFuc2Zvcm1EYXRhKGxvYWRBdmdJbmZvLCBwcmVmZXJlbmNlc1snbGFfc3RhdHNfcmVmcmVzaCdd KX0NCisgICAgICAgICAgcHJvY2Vzc0NwdVVzYWdlU3RhdHM9e3Byb2Nlc3NDcHVVc2FnZVN0YXRz fQ0KKyAgICAgICAgICB0YWJsZUhlYWRlcj17dGFibGVIZWFkZXJ9DQorICAgICAgICAgIGVycm9y TXNnPXtlcnJvck1zZ30NCisgICAgICAgICAgc2hvd1Rvb2x0aXA9e3ByZWZlcmVuY2VzWydncmFw aF9tb3VzZV90cmFjayddfQ0KKyAgICAgICAgICBzaG93RGF0YVBvaW50cz17cHJlZmVyZW5jZXNb J2dyYXBoX2RhdGFfcG9pbnRzJ119DQorICAgICAgICAgIGxpbmVCb3JkZXJXaWR0aD17cHJlZmVy ZW5jZXNbJ2dyYXBoX2xpbmVfYm9yZGVyX3dpZHRoJ119DQorICAgICAgICAgIGlzRGF0YWJhc2U9 e2RpZCA+IDB9DQorICAgICAgICAgIGlzVGVzdD17ZmFsc2V9DQorICAgICAgICAvPg0KKyAgICAg IH0NCisgICAgPC8+DQorICApOw0KK30NCisNCitDUFUucHJvcFR5cGVzID0gew0KKyAgcHJlZmVy ZW5jZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCwNCisgIHNpZDogUHJvcFR5cGVzLm9u ZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlz UmVxdWlyZWRdKSwNCisgIGRpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmlu Zy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSwNCisgIHBhZ2VWaXNp YmxlOiBQcm9wVHlwZXMuYm9vbCwNCisgIGVuYWJsZVBvbGw6IFByb3BUeXBlcy5ib29sLA0KK307 DQorDQorZXhwb3J0IGZ1bmN0aW9uIENQVVdyYXBwZXIocHJvcHMpIHsNCisgIGNvbnN0IGNsYXNz ZXMgPSB1c2VTdHlsZXMoKTsNCisgIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpPT4oew0KKyAg ICBzaG93RGF0YVBvaW50czogcHJvcHMuc2hvd0RhdGFQb2ludHMsDQorICAgIHNob3dUb29sdGlw OiBwcm9wcy5zaG93VG9vbHRpcCwNCisgICAgbGluZUJvcmRlcldpZHRoOiBwcm9wcy5saW5lQm9y ZGVyV2lkdGgsDQorICB9KSwgW3Byb3BzLnNob3dUb29sdGlwLCBwcm9wcy5zaG93RGF0YVBvaW50 cywgcHJvcHMubGluZUJvcmRlcldpZHRoXSk7DQorICByZXR1cm4gKA0KKyAgICA8Pg0KKyAgICAg IDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNzZXMuY29udGFpbmVy fT4NCisgICAgICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9IHNtPXsxMn0+DQorICAgICAgICAgIDxkaXYg Y2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ0NQVSBVc2FnZSAo KScpfTwvZGl2Pg0KKyAgICAgICAgICA8Q2hhcnRDb250YWluZXIgaWQ9J2N1LWdyYXBoJyB0aXRs ZT17Z2V0dGV4dCgnJyl9IGRhdGFzZXRzPXtwcm9wcy5jcHVVc2FnZUluZm8uZGF0YXNldHN9ICBl cnJvck1zZz17cHJvcHMuZXJyb3JNc2d9IGlzVGVzdD17cHJvcHMuaXNUZXN0fT4NCisgICAgICAg ICAgICA8U3RyZWFtaW5nQ2hhcnQgZGF0YT17cHJvcHMuY3B1VXNhZ2VJbmZvfSBkYXRhUG9pbnRT aXplPXtEQVRBX1BPSU5UX1NJWkV9IHhSYW5nZT17WF9BWElTX0xFTkdUSH0gb3B0aW9ucz17b3B0 aW9uc30gLz4NCisgICAgICAgICAgPC9DaGFydENvbnRhaW5lcj4NCisgICAgICAgIDwvR3JpZD4N CisgICAgICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9IHNtPXsxMn0+DQorICAgICAgICAgIDxkaXYgY2xh c3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQoJ0xvYWQgQXZlcmFnZScp fTwvZGl2Pg0KKyAgICAgICAgICA8Q2hhcnRDb250YWluZXIgaWQ9J2xhLWdyYXBoJyB0aXRsZT17 Z2V0dGV4dCgnJyl9IGRhdGFzZXRzPXtwcm9wcy5sb2FkQXZnSW5mby5kYXRhc2V0c30gIGVycm9y TXNnPXtwcm9wcy5lcnJvck1zZ30gaXNUZXN0PXtwcm9wcy5pc1Rlc3R9Pg0KKyAgICAgICAgICAg IDxTdHJlYW1pbmdDaGFydCBkYXRhPXtwcm9wcy5sb2FkQXZnSW5mb30gZGF0YVBvaW50U2l6ZT17 REFUQV9QT0lOVF9TSVpFfSB4UmFuZ2U9e1hfQVhJU19MRU5HVEh9IG9wdGlvbnM9e29wdGlvbnN9 IC8+DQorICAgICAgICAgIDwvQ2hhcnRDb250YWluZXI+DQorICAgICAgICA8L0dyaWQ+DQorICAg ICAgPC9HcmlkPg0KKyAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9 e2NsYXNzZXMuZml4ZWRDb250YWluZXJ9Pg0KKyAgICAgICAgPFBnVGFibGUNCisgICAgICAgICAg Y2xhc3NOYW1lPXtjbGFzc2VzLmF1dG9SZXNpemVyfQ0KKyAgICAgICAgICBjb2x1bW5zPXtwcm9w cy50YWJsZUhlYWRlcn0NCisgICAgICAgICAgZGF0YT17cHJvcHMucHJvY2Vzc0NwdVVzYWdlU3Rh dHN9DQorICAgICAgICAgIG1zZz17cHJvcHMuZXJyb3JNc2d9DQorICAgICAgICAgIHR5cGU9eydw YW5lbCd9DQorICAgICAgICA+PC9QZ1RhYmxlPg0KKyAgICAgIDwvR3JpZD4NCisgICAgPC8+DQor ICApOw0KK30NCisNCitjb25zdCBwcm9wVHlwZVN0YXRzID0gUHJvcFR5cGVzLnNoYXBlKHsNCisg IGRhdGFzZXRzOiBQcm9wVHlwZXMuYXJyYXksDQorICByZWZyZXNoUmF0ZTogUHJvcFR5cGVzLm51 bWJlci5pc1JlcXVpcmVkLA0KK30pOw0KK0NQVVdyYXBwZXIucHJvcFR5cGVzID0gew0KKyAgY3B1 VXNhZ2VJbmZvOiBwcm9wVHlwZVN0YXRzLmlzUmVxdWlyZWQsDQorICBsb2FkQXZnSW5mbzogcHJv cFR5cGVTdGF0cy5pc1JlcXVpcmVkLA0KKyAgcHJvY2Vzc0NwdVVzYWdlU3RhdHM6IFByb3BUeXBl cy5hcnJheS5pc1JlcXVpcmVkLA0KKyAgdGFibGVIZWFkZXI6IFByb3BUeXBlcy5hcnJheS5pc1Jl cXVpcmVkLA0KKyAgZXJyb3JNc2c6IFByb3BUeXBlcy5zdHJpbmcsDQorICBzaG93VG9vbHRpcDog UHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwNCisgIHNob3dEYXRhUG9pbnRzOiBQcm9wVHlwZXMu Ym9vbC5pc1JlcXVpcmVkLA0KKyAgbGluZUJvcmRlcldpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlz UmVxdWlyZWQsDQorICBpc0RhdGFiYXNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLA0KKyAg aXNUZXN0OiBQcm9wVHlwZXMuYm9vbCwNCit9Ow0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl DQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0 cy9NZW1vcnkuanN4IGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0 cy9NZW1vcnkuanN4DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwLi43MGFm NDA5MTkNCi0tLSAvZGV2L251bGwNCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMv anMvU3lzdGVtU3RhdHMvTWVtb3J5LmpzeA0KQEAgLTAsMCArMSwzNzIgQEANCitpbXBvcnQgUmVh Y3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VSZWR1Y2VyLCB1c2VNZW1vIH0g ZnJvbSAncmVhY3QnOw0KK2ltcG9ydCBQZ1RhYmxlIGZyb20gJ3NvdXJjZXMvY29tcG9uZW50cy9Q Z1RhYmxlJzsNCitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOw0KK2ltcG9y dCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7DQoraW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZy b20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7DQoraW1wb3J0IHVybF9mb3IgZnJvbSAnc291 cmNlcy91cmxfZm9yJzsNCitpbXBvcnQge2dldEdDRCwgZ2V0RXBvY2h9IGZyb20gJ3NvdXJjZXMv dXRpbHMnOw0KK2ltcG9ydCB7Q2hhcnRDb250YWluZXJ9IGZyb20gJy4uL0Rhc2hib2FyZCc7DQor aW1wb3J0IHsgR3JpZCB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlJzsNCitpbXBvcnQgeyBEQVRB X1BPSU5UX1NJWkUgfSBmcm9tICdzb3VyY2VzL2NoYXJ0anMnOw0KK2ltcG9ydCBTdHJlYW1pbmdD aGFydCBmcm9tICcuLi8uLi8uLi8uLi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVh bWluZ0NoYXJ0JzsNCitpbXBvcnQge3VzZUludGVydmFsLCB1c2VQcmV2aW91c30gZnJvbSAnc291 cmNlcy9jdXN0b21faG9va3MnOw0KK2ltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7DQorDQorZXhw b3J0IGNvbnN0IFhfQVhJU19MRU5HVEggPSA3NTsNCisNCitjb25zdCB1c2VTdHlsZXMgPSBtYWtl U3R5bGVzKCh0aGVtZSkgPT4gKHsNCisgIGF1dG9SZXNpemVyOiB7DQorICAgIGhlaWdodDogJzEw MCUgIWltcG9ydGFudCcsDQorICAgIHdpZHRoOiAnMTAwJSAhaW1wb3J0YW50JywNCisgICAgYmFj a2dyb3VuZDogdGhlbWUucGFsZXR0ZS5ncmV5WzQwMF0sDQorICAgIHBhZGRpbmc6ICc3LjVweCcs DQorICAgIG92ZXJmbG93WDogJ2F1dG8gIWltcG9ydGFudCcsDQorICAgIG92ZXJmbG93WTogJ2hp ZGRlbiAhaW1wb3J0YW50JywNCisgICAgbWluSGVpZ2h0OiAnMTAwJScsDQorICAgIG1pbldpZHRo OiAnMTAwJScsDQorICB9LA0KKyAgY29udGFpbmVyOiB7DQorICAgIGhlaWdodDogJ2F1dG8nLA0K KyAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdyZXlbMjAwXSwNCisgICAgcGFkZGluZzog JzEwcHgnLA0KKyAgICBtYXJnaW5Cb3R0b206ICczMHB4JywNCisgIH0sDQorICBmaXhlZENvbnRh aW5lcjogew0KKyAgICBoZWlnaHQ6ICc1NzdweCcsDQorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBh bGV0dGUuZ3JleVsyMDBdLA0KKyAgICBwYWRkaW5nOiAnMTBweCcsDQorICAgIG1hcmdpbkJvdHRv bTogJzMwcHgnLA0KKyAgfSwNCisgIGNvbnRhaW5lckhlYWRlcjogew0KKyAgICBmb250U2l6ZTog JzE2cHgnLA0KKyAgICBmb250V2VpZ2h0OiAnYm9sZCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzVw eCcsDQorICB9DQorfSkpOw0KKw0KK2V4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhieXRlcykg ew0KKyAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTsNCisgIGxl dCB1bml0SW5kZXggPSAwOw0KKw0KKyAgd2hpbGUgKGJ5dGVzID49IDEwMjQgJiYgdW5pdEluZGV4 IDwgdW5pdHMubGVuZ3RoIC0gMSkgew0KKyAgICBieXRlcyAvPSAxMDI0Ow0KKyAgICB1bml0SW5k ZXgrKzsNCisgIH0NCisNCisgIHJldHVybiBgJHtieXRlcy50b0ZpeGVkKDIpfSAke3VuaXRzW3Vu aXRJbmRleF19YDsNCit9DQorDQorZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEobGFiZWxz LCByZWZyZXNoUmF0ZSkgew0KKyAgY29uc3QgY29sb3JzID0gWycjRkY2Mzg0JywnIzM2QTJFQics JyNGRkNFNTYnLCcjNEJDMEMwJywnIzk5NjZGRicsJyNGRjlGNDAnLCcjOEQ2RTYzJywnIzIxOTZG MycsJyNGRkVCM0InLCcjOUMyN0IwJywnIzAwQkNENCcsJyNDRERDMzknXTsNCisgIGxldCBkYXRh c2V0cyA9IE9iamVjdC5rZXlzKGxhYmVscykubWFwKChsYWJlbCwgaSk9PnsNCisgICAgcmV0dXJu IHsNCisgICAgICBsYWJlbDogbGFiZWwsDQorICAgICAgZGF0YTogbGFiZWxzW2xhYmVsXSB8fCBb XSwNCisgICAgICBib3JkZXJDb2xvcjogY29sb3JzW2ldLA0KKyAgICAgIHBvaW50SGl0UmFkaXVz OiBEQVRBX1BPSU5UX1NJWkUsDQorICAgIH07DQorICB9KSB8fCBbXTsNCisNCisgIHJldHVybiB7 DQorICAgIGRhdGFzZXRzOiBkYXRhc2V0cywNCisgICAgcmVmcmVzaFJhdGU6IHJlZnJlc2hSYXRl LA0KKyAgfTsNCit9DQorDQorLyogVVJMIGZvciBmZXRjaGluZyBncmFwaHMgZGF0YSAqLw0KK2V4 cG9ydCBmdW5jdGlvbiBnZXRTdGF0c1VybChzaWQ9LTEsIGRpZD0tMSwgY2hhcnRfbmFtZXM9W10p IHsNCisgIGxldCBiYXNlX3VybCA9IHVybF9mb3IoJ2Rhc2hib2FyZC5zeXN0ZW1fc3RhdGlzdGlj cycpOw0KKyAgYmFzZV91cmwgKz0gJy8nICsgc2lkOw0KKyAgYmFzZV91cmwgKz0gKGRpZCA+IDAp ID8gKCcvJyArIGRpZCkgOiAnJzsNCisgIGJhc2VfdXJsICs9ICc/Y2hhcnRfbmFtZXM9JyArIGNo YXJ0X25hbWVzLmpvaW4oJywnKTsNCisNCisgIHJldHVybiBiYXNlX3VybDsNCit9DQorDQorLyog VGhpcyB3aWxsIHByb2Nlc3MgaW5jb21pbmcgY2hhcnRzIGRhdGEgYWRkIGl0IHRoZSBwcmV2aW91 cyBjaGFydHMNCisgKiBkYXRhIHRvIGdldCB0aGUgbmV3IHN0YXRlLg0KKyAqLw0KK2V4cG9ydCBm dW5jdGlvbiBzdGF0c1JlZHVjZXIoc3RhdGUsIGFjdGlvbikgew0KKw0KKyAgaWYoYWN0aW9uLnJl c2V0KSB7DQorICAgIHJldHVybiBhY3Rpb24ucmVzZXQ7DQorICB9DQorDQorICBpZighYWN0aW9u LmluY29taW5nKSB7DQorICAgIHJldHVybiBzdGF0ZTsNCisgIH0NCisNCisgIGlmKCFhY3Rpb24u Y291bnRlckRhdGEpIHsNCisgICAgYWN0aW9uLmNvdW50ZXJEYXRhID0gYWN0aW9uLmluY29taW5n Ow0KKyAgfQ0KKw0KKyAgbGV0IG5ld1N0YXRlID0ge307DQorICBPYmplY3Qua2V5cyhhY3Rpb24u aW5jb21pbmcpLmZvckVhY2gobGFiZWwgPT4gew0KKyAgICBpZihzdGF0ZVtsYWJlbF0pIHsNCisg ICAgICBuZXdTdGF0ZVtsYWJlbF0gPSBbDQorICAgICAgICBhY3Rpb24uY291bnRlciA/ICBhY3Rp b24uaW5jb21pbmdbbGFiZWxdIC0gYWN0aW9uLmNvdW50ZXJEYXRhW2xhYmVsXSA6IGFjdGlvbi5p bmNvbWluZ1tsYWJlbF0sDQorICAgICAgICAuLi5zdGF0ZVtsYWJlbF0uc2xpY2UoMCwgWF9BWElT X0xFTkdUSC0xKSwNCisgICAgICBdOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIG5ld1N0YXRlW2xh YmVsXSA9IFsNCisgICAgICAgIGFjdGlvbi5jb3VudGVyID8gIGFjdGlvbi5pbmNvbWluZ1tsYWJl bF0gLSBhY3Rpb24uY291bnRlckRhdGFbbGFiZWxdIDogYWN0aW9uLmluY29taW5nW2xhYmVsXSwN CisgICAgICBdOw0KKyAgICB9DQorICB9KTsNCisgIHJldHVybiBuZXdTdGF0ZTsNCit9DQorDQor Y29uc3QgY2hhcnRzRGVmYXVsdCA9IHsNCisgICdtX3N0YXRzJzogeydUb3RhbCc6IFtdLCAnVXNl ZCc6IFtdLCAnRnJlZSc6IFtdfSwNCisgICdzbV9zdGF0cyc6IHsnVG90YWwnOiBbXSwgJ1VzZWQn OiBbXSwgJ0ZyZWUnOiBbXX0sDQorICAncG11X3N0YXRzJzoge30sDQorfTsNCisNCitleHBvcnQg ZGVmYXVsdCBmdW5jdGlvbiBNZW1vcnkoe3ByZWZlcmVuY2VzLCBzaWQsIGRpZCwgcGFnZVZpc2li bGUsIGVuYWJsZVBvbGw9dHJ1ZX0pIHsNCisgIGNvbnN0IHJlZnJlc2hPbiA9IHVzZVJlZihudWxs KTsNCisgIGNvbnN0IHByZXZQcmVmZXJuY2VzID0gdXNlUHJldmlvdXMocHJlZmVyZW5jZXMpOw0K Kw0KKyAgY29uc3QgW21lbW9yeVVzYWdlSW5mbywgbWVtb3J5VXNhZ2VJbmZvUmVkdWNlXSA9IHVz ZVJlZHVjZXIoc3RhdHNSZWR1Y2VyLCBjaGFydHNEZWZhdWx0WydtX3N0YXRzJ10pOw0KKyAgY29u c3QgW3N3YXBNZW1vcnlVc2FnZUluZm8sIHN3YXBNZW1vcnlVc2FnZUluZm9SZWR1Y2VdID0gdXNl UmVkdWNlcihzdGF0c1JlZHVjZXIsIGNoYXJ0c0RlZmF1bHRbJ3NtX3N0YXRzJ10pOw0KKyAgY29u c3QgW3Byb2Nlc3NNZW1vcnlVc2FnZVN0YXRzLCBzZXRQcm9jZXNzTWVtb3J5VXNhZ2VTdGF0c10g PSB1c2VTdGF0ZShbXSk7DQorDQorICBjb25zdCBbY291bnRlckRhdGEsIHNldENvdW50ZXJEYXRh XSA9IHVzZVN0YXRlKHt9KTsNCisNCisgIGNvbnN0IFtwb2xsRGVsYXksIHNldFBvbGxEZWxheV0g PSB1c2VTdGF0ZSg1MDAwKTsNCisgIGNvbnN0IFtlcnJvck1zZywgc2V0RXJyb3JNc2ddID0gdXNl U3RhdGUobnVsbCk7DQorICBjb25zdCBbY2hhcnREcmF3bk9uY2UsIHNldENoYXJ0RHJhd25PbmNl XSA9IHVzZVN0YXRlKGZhbHNlKTsNCisNCisgIGNvbnN0IHRhYmxlSGVhZGVyID0gWw0KKyAgICB7 DQorICAgICAgSGVhZGVyOiAnUElEJywNCisgICAgICBhY2Nlc3NvcjogJ3BpZCcsDQorICAgICAg c29ydGFibGU6IHRydWUsDQorICAgICAgcmVzaXphYmxlOiB0cnVlLA0KKyAgICAgIGRpc2FibGVH bG9iYWxGaWx0ZXI6IGZhbHNlLA0KKyAgICB9LA0KKyAgICB7DQorICAgICAgSGVhZGVyOiAnTmFt ZScsDQorICAgICAgYWNjZXNzb3I6ICduYW1lJywNCisgICAgICBzb3J0YWJsZTogdHJ1ZSwNCisg ICAgICByZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2Us DQorICAgIH0sDQorICAgIHsNCisgICAgICBIZWFkZXI6ICdNZW1vcnkgVXNhZ2UnLA0KKyAgICAg IGFjY2Vzc29yOiAnbWVtb3J5X3VzYWdlJywNCisgICAgICBzb3J0YWJsZTogdHJ1ZSwNCisgICAg ICByZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsDQor ICAgIH0sDQorICAgIHsNCisgICAgICBIZWFkZXI6ICdNZW1vcnkgQnl0ZXMnLA0KKyAgICAgIGFj Y2Vzc29yOiAnbWVtb3J5X2J5dGVzJywNCisgICAgICBzb3J0YWJsZTogdHJ1ZSwNCisgICAgICBy ZXNpemFibGU6IHRydWUsDQorICAgICAgZGlzYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsDQorICAg IH0sDQorICBdOw0KKw0KKyAgdXNlRWZmZWN0KCgpPT57DQorICAgIGxldCBjYWxjUG9sbERlbGF5 ID0gZmFsc2U7DQorICAgIGlmKHByZXZQcmVmZXJuY2VzKSB7DQorICAgICAgaWYocHJldlByZWZl cm5jZXNbJ21fc3RhdHNfcmVmcmVzaCddICE9IHByZWZlcmVuY2VzWydtX3N0YXRzX3JlZnJlc2gn XSkgew0KKyAgICAgICAgbWVtb3J5VXNhZ2VJbmZvUmVkdWNlKHtyZXNldDogY2hhcnRzRGVmYXVs dFsnbV9zdGF0cyddfSk7DQorICAgICAgICBjYWxjUG9sbERlbGF5ID0gdHJ1ZTsNCisgICAgICB9 DQorICAgICAgaWYocHJldlByZWZlcm5jZXNbJ3NtX3N0YXRzX3JlZnJlc2gnXSAhPSBwcmVmZXJl bmNlc1snc21fc3RhdHNfcmVmcmVzaCddKSB7DQorICAgICAgICBzd2FwTWVtb3J5VXNhZ2VJbmZv UmVkdWNlKHtyZXNldDogY2hhcnRzRGVmYXVsdFsnc21fc3RhdHMnXX0pOw0KKyAgICAgICAgY2Fs Y1BvbGxEZWxheSA9IHRydWU7DQorICAgICAgfQ0KKyAgICAgIGlmKHByZXZQcmVmZXJuY2VzWydw bXVfc3RhdHNfcmVmcmVzaCddICE9IHByZWZlcmVuY2VzWydwbXVfc3RhdHNfcmVmcmVzaCddKSB7 DQorICAgICAgICBzZXRQcm9jZXNzTWVtb3J5VXNhZ2VTdGF0cyh7cmVzZXQ6IGNoYXJ0c0RlZmF1 bHRbJ3BtdV9zdGF0cyddfSk7DQorICAgICAgICBjYWxjUG9sbERlbGF5ID0gdHJ1ZTsNCisgICAg ICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgY2FsY1BvbGxEZWxheSA9IHRydWU7DQorICAgIH0N CisgICAgaWYoY2FsY1BvbGxEZWxheSkgew0KKyAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5 cyhjaGFydHNEZWZhdWx0KTsNCisgICAgICBjb25zdCBsZW5ndGggPSBrZXlzLmxlbmd0aDsNCisg ICAgICBpZihsZW5ndGggPT0gMSl7DQorICAgICAgICBzZXRQb2xsRGVsYXkoDQorICAgICAgICAg IHByZWZlcmVuY2VzW2tleXNbMF0rJ19yZWZyZXNoJ10qMTAwMA0KKyAgICAgICAgKTsNCisgICAg ICB9IGVsc2Ugew0KKyAgICAgICAgc2V0UG9sbERlbGF5KA0KKyAgICAgICAgICBnZXRHQ0QoT2Jq ZWN0LmtleXMoY2hhcnRzRGVmYXVsdCkubWFwKChuYW1lKT0+cHJlZmVyZW5jZXNbbmFtZSsnX3Jl ZnJlc2gnXSkpKjEwMDANCisgICAgICAgICk7DQorICAgICAgfQ0KKyAgICB9DQorICB9LCBbcHJl ZmVyZW5jZXNdKTsNCisNCisgIHVzZUVmZmVjdCgoKT0+ew0KKyAgICAvKiBDaGFydHMgcmVuZGVy ZWQgYXJlIG5vdCB2aXNpYmxlIHdoZW4sIHRoZSBkYXNoYm9hcmQgaXMgaGlkZGVuIGJ1dCBsYXRl ciB2aXNpYmxlICovDQorICAgIGlmKHBhZ2VWaXNpYmxlICYmICFjaGFydERyYXduT25jZSkgew0K KyAgICAgIHNldENoYXJ0RHJhd25PbmNlKHRydWUpOw0KKyAgICB9DQorICB9LCBbcGFnZVZpc2li bGVdKTsNCisNCisgIHVzZUludGVydmFsKCgpPT57DQorICAgIGNvbnN0IGN1cnJFcG9jaCA9IGdl dEVwb2NoKCk7DQorICAgIGlmKHJlZnJlc2hPbi5jdXJyZW50ID09PSBudWxsKSB7DQorICAgICAg bGV0IHRtcFJlZiA9IHt9Ow0KKyAgICAgIE9iamVjdC5rZXlzKGNoYXJ0c0RlZmF1bHQpLmZvckVh Y2goKG5hbWUpPT57DQorICAgICAgICB0bXBSZWZbbmFtZV0gPSBjdXJyRXBvY2g7DQorICAgICAg fSk7DQorICAgICAgcmVmcmVzaE9uLmN1cnJlbnQgPSB0bXBSZWY7DQorICAgIH0NCisNCisgICAg bGV0IGdldEZvciA9IFtdOw0KKyAgICBPYmplY3Qua2V5cyhjaGFydHNEZWZhdWx0KS5mb3JFYWNo KChuYW1lKT0+ew0KKyAgICAgIGlmKGN1cnJFcG9jaCA+PSByZWZyZXNoT24uY3VycmVudFtuYW1l XSkgew0KKyAgICAgICAgZ2V0Rm9yLnB1c2gobmFtZSk7DQorICAgICAgICByZWZyZXNoT24uY3Vy cmVudFtuYW1lXSA9IGN1cnJFcG9jaCArIHByZWZlcmVuY2VzW25hbWUrJ19yZWZyZXNoJ107DQor ICAgICAgfQ0KKyAgICB9KTsNCisNCisgICAgbGV0IHBhdGggPSBnZXRTdGF0c1VybChzaWQsIGRp ZCwgZ2V0Rm9yKTsNCisgICAgaWYgKCFwYWdlVmlzaWJsZSl7DQorICAgICAgcmV0dXJuOw0KKyAg ICB9DQorICAgIGF4aW9zLmdldChwYXRoKQ0KKyAgICAgIC50aGVuKChyZXNwKT0+ew0KKyAgICAg ICAgbGV0IGRhdGEgPSByZXNwLmRhdGE7DQorICAgICAgICBzZXRFcnJvck1zZyhudWxsKTsNCisg ICAgICAgIGlmKGRhdGEuaGFzT3duUHJvcGVydHkoJ21fc3RhdHMnKSl7DQorICAgICAgICAgIGxl dCBuZXdfbV9zdGF0cyA9IHsNCisgICAgICAgICAgICAnVG90YWwnOiBkYXRhWydtX3N0YXRzJ11b J3RvdGFsX21lbW9yeSddP2RhdGFbJ21fc3RhdHMnXVsndG90YWxfbWVtb3J5J106MCwNCisgICAg ICAgICAgICAnVXNlZCc6IGRhdGFbJ21fc3RhdHMnXVsndXNlZF9tZW1vcnknXT9kYXRhWydtX3N0 YXRzJ11bJ3VzZWRfbWVtb3J5J106MCwNCisgICAgICAgICAgICAnRnJlZSc6IGRhdGFbJ21fc3Rh dHMnXVsnZnJlZV9tZW1vcnknXT9kYXRhWydtX3N0YXRzJ11bJ2ZyZWVfbWVtb3J5J106MCwNCisg ICAgICAgICAgfTsNCisgICAgICAgICAgbWVtb3J5VXNhZ2VJbmZvUmVkdWNlKHtpbmNvbWluZzog bmV3X21fc3RhdHN9KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmKGRhdGEuaGFzT3duUHJv cGVydHkoJ3NtX3N0YXRzJykpew0KKyAgICAgICAgICBsZXQgbmV3X3NtX3N0YXRzID0gew0KKyAg ICAgICAgICAgICdUb3RhbCc6IGRhdGFbJ3NtX3N0YXRzJ11bJ3N3YXBfdG90YWwnXT9kYXRhWydz bV9zdGF0cyddWydzd2FwX3RvdGFsJ106MCwNCisgICAgICAgICAgICAnVXNlZCc6IGRhdGFbJ3Nt X3N0YXRzJ11bJ3N3YXBfdXNlZCddP2RhdGFbJ3NtX3N0YXRzJ11bJ3N3YXBfdXNlZCddOjAsDQor ICAgICAgICAgICAgJ0ZyZWUnOiBkYXRhWydzbV9zdGF0cyddWydzd2FwX2ZyZWUnXT9kYXRhWydz bV9zdGF0cyddWydzd2FwX2ZyZWUnXTowLA0KKyAgICAgICAgICB9Ow0KKyAgICAgICAgICBzd2Fw TWVtb3J5VXNhZ2VJbmZvUmVkdWNlKHtpbmNvbWluZzogbmV3X3NtX3N0YXRzfSk7DQorICAgICAg ICB9DQorDQorICAgICAgICBpZihkYXRhLmhhc093blByb3BlcnR5KCdwbXVfc3RhdHMnKSl7DQor ICAgICAgICAgIGxldCBwbXVfaW5mb19saXN0ID0gW107DQorICAgICAgICAgIGNvbnN0IHBtdV9p bmZvX29iaiA9IGRhdGFbJ3BtdV9zdGF0cyddOw0KKyAgICAgICAgICBmb3IgKGNvbnN0IGtleSBp biBwbXVfaW5mb19vYmopIHsNCisgICAgICAgICAgICBwbXVfaW5mb19saXN0LnB1c2goeyBpY29u OiAnJywgcGlkOiBwbXVfaW5mb19vYmpba2V5XVsncGlkJ10sIG5hbWU6IHBtdV9pbmZvX29ialtr ZXldWyduYW1lJ10sIG1lbW9yeV91c2FnZTogZm9ybWF0Qnl0ZXMocG11X2luZm9fb2JqW2tleV1b J21lbW9yeV91c2FnZSddKSwgbWVtb3J5X2J5dGVzOiBmb3JtYXRCeXRlcyhwbXVfaW5mb19vYmpb a2V5XVsnbWVtb3J5X2J5dGVzJ10pIH0pOw0KKyAgICAgICAgICB9DQorDQorICAgICAgICAgIHNl dFByb2Nlc3NNZW1vcnlVc2FnZVN0YXRzKHBtdV9pbmZvX2xpc3QpOw0KKyAgICAgICAgfQ0KKw0K KyAgICAgICAgc2V0Q291bnRlckRhdGEoKHByZXZDb3VudGVyRGF0YSk9PnsNCisgICAgICAgICAg cmV0dXJuIHsNCisgICAgICAgICAgICAuLi5wcmV2Q291bnRlckRhdGEsDQorICAgICAgICAgICAg Li4uZGF0YSwNCisgICAgICAgICAgfTsNCisgICAgICAgIH0pOw0KKyAgICAgIH0pDQorICAgICAg LmNhdGNoKChlcnJvcik9PnsNCisgICAgICAgIGlmKCFlcnJvck1zZykgew0KKyAgICAgICAgICBt ZW1vcnlVc2FnZUluZm9SZWR1Y2Uoe3Jlc2V0OmNoYXJ0c0RlZmF1bHRbJ21fc3RhdHMnXX0pOw0K KyAgICAgICAgICBzd2FwTWVtb3J5VXNhZ2VJbmZvUmVkdWNlKHtyZXNldDpjaGFydHNEZWZhdWx0 WydzbV9zdGF0cyddfSk7DQorICAgICAgICAgIHNldENvdW50ZXJEYXRhKHt9KTsNCisgICAgICAg ICAgaWYoZXJyb3IucmVzcG9uc2UpIHsNCisgICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2Uu c3RhdHVzID09PSA0MjgpIHsNCisgICAgICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ1Bs ZWFzZSBjb25uZWN0IHRvIHRoZSBzZWxlY3RlZCBzZXJ2ZXIgdG8gdmlldyB0aGUgZ3JhcGguJykp Ow0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0 ZXh0KCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsc3QgcmVuZGVyaW5nIHRoZSBncmFwaC4nKSk7DQor ICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9IGVsc2UgaWYoZXJyb3IucmVxdWVzdCkgew0KKyAg ICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZl ciBvciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKSk7DQor ICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGNv bnNvbGUuZXJyb3IoZXJyb3IpOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgfSk7 DQorICB9LCBlbmFibGVQb2xsID8gcG9sbERlbGF5IDogLTEpOw0KKyAgcmV0dXJuICgNCisgICAg PD4NCisgICAgICA8ZGl2IGRhdGEtdGVzdGlkPSdncmFwaC1wb2xsLWRlbGF5JyBzdHlsZT17e2Rp c3BsYXk6ICdub25lJ319Pntwb2xsRGVsYXl9PC9kaXY+DQorICAgICAge2NoYXJ0RHJhd25PbmNl ICYmDQorICAgICAgICA8TWVtb3J5V3JhcHBlcg0KKyAgICAgICAgICBtZW1vcnlVc2FnZUluZm89 e3RyYW5zZm9ybURhdGEobWVtb3J5VXNhZ2VJbmZvLCBwcmVmZXJlbmNlc1snbV9zdGF0c19yZWZy ZXNoJ10pfQ0KKyAgICAgICAgICBzd2FwTWVtb3J5VXNhZ2VJbmZvPXt0cmFuc2Zvcm1EYXRhKHN3 YXBNZW1vcnlVc2FnZUluZm8sIHByZWZlcmVuY2VzWydzbV9zdGF0c19yZWZyZXNoJ10pfQ0KKyAg ICAgICAgICBwcm9jZXNzTWVtb3J5VXNhZ2VTdGF0cz17cHJvY2Vzc01lbW9yeVVzYWdlU3RhdHN9 DQorICAgICAgICAgIHRhYmxlSGVhZGVyPXt0YWJsZUhlYWRlcn0NCisgICAgICAgICAgZXJyb3JN c2c9e2Vycm9yTXNnfQ0KKyAgICAgICAgICBzaG93VG9vbHRpcD17cHJlZmVyZW5jZXNbJ2dyYXBo X21vdXNlX3RyYWNrJ119DQorICAgICAgICAgIHNob3dEYXRhUG9pbnRzPXtwcmVmZXJlbmNlc1sn Z3JhcGhfZGF0YV9wb2ludHMnXX0NCisgICAgICAgICAgbGluZUJvcmRlcldpZHRoPXtwcmVmZXJl bmNlc1snZ3JhcGhfbGluZV9ib3JkZXJfd2lkdGgnXX0NCisgICAgICAgICAgaXNEYXRhYmFzZT17 ZGlkID4gMH0NCisgICAgICAgICAgaXNUZXN0PXtmYWxzZX0NCisgICAgICAgIC8+DQorICAgICAg fQ0KKyAgICA8Lz4NCisgICk7DQorfQ0KKw0KK01lbW9yeS5wcm9wVHlwZXMgPSB7DQorICBwcmVm ZXJlbmNlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLA0KKyAgc2lkOiBQcm9wVHlwZXMu b25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIu aXNSZXF1aXJlZF0pLA0KKyAgZGlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3Ry aW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLA0KKyAgcGFnZVZp c2libGU6IFByb3BUeXBlcy5ib29sLA0KKyAgZW5hYmxlUG9sbDogUHJvcFR5cGVzLmJvb2wsDQor fTsNCisNCitleHBvcnQgZnVuY3Rpb24gTWVtb3J5V3JhcHBlcihwcm9wcykgew0KKyAgY29uc3Qg Y2xhc3NlcyA9IHVzZVN0eWxlcygpOw0KKyAgY29uc3Qgb3B0aW9ucyA9IHVzZU1lbW8oKCk9Pih7 DQorICAgIHNob3dEYXRhUG9pbnRzOiBwcm9wcy5zaG93RGF0YVBvaW50cywNCisgICAgc2hvd1Rv b2x0aXA6IHByb3BzLnNob3dUb29sdGlwLA0KKyAgICBsaW5lQm9yZGVyV2lkdGg6IHByb3BzLmxp bmVCb3JkZXJXaWR0aCwNCisgIH0pLCBbcHJvcHMuc2hvd1Rvb2x0aXAsIHByb3BzLnNob3dEYXRh UG9pbnRzLCBwcm9wcy5saW5lQm9yZGVyV2lkdGhdKTsNCisNCisgIHJldHVybiAoDQorICAgIDw+ DQorICAgICAgPEdyaWQgY29udGFpbmVyIHNwYWNpbmc9ezF9IGNsYXNzTmFtZT17Y2xhc3Nlcy5j b250YWluZXJ9Pg0KKyAgICAgICAgPEdyaWQgaXRlbSBtZD17Nn0gc209ezEyfT4NCisgICAgICAg ICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dCgnTWVt b3J5Jyl9PC9kaXY+DQorICAgICAgICAgIDxDaGFydENvbnRhaW5lciBpZD0nbS1ncmFwaCcgdGl0 bGU9e2dldHRleHQoJycpfSBkYXRhc2V0cz17cHJvcHMubWVtb3J5VXNhZ2VJbmZvLmRhdGFzZXRz fSAgZXJyb3JNc2c9e3Byb3BzLmVycm9yTXNnfSBpc1Rlc3Q9e3Byb3BzLmlzVGVzdH0+DQorICAg ICAgICAgICAgPFN0cmVhbWluZ0NoYXJ0IGRhdGE9e3Byb3BzLm1lbW9yeVVzYWdlSW5mb30gZGF0 YVBvaW50U2l6ZT17REFUQV9QT0lOVF9TSVpFfSB4UmFuZ2U9e1hfQVhJU19MRU5HVEh9IG9wdGlv bnM9e29wdGlvbnN9IC8+DQorICAgICAgICAgIDwvQ2hhcnRDb250YWluZXI+DQorICAgICAgICA8 L0dyaWQ+DQorICAgICAgICA8R3JpZCBpdGVtIG1kPXs2fSBzbT17MTJ9Pg0KKyAgICAgICAgICA8 ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5jb250YWluZXJIZWFkZXJ9PntnZXR0ZXh0KCdTd2FwIE1l bW9yeScpfTwvZGl2Pg0KKyAgICAgICAgICA8Q2hhcnRDb250YWluZXIgaWQ9J3NtLWdyYXBoJyB0 aXRsZT17Z2V0dGV4dCgnJyl9IGRhdGFzZXRzPXtwcm9wcy5zd2FwTWVtb3J5VXNhZ2VJbmZvLmRh dGFzZXRzfSAgZXJyb3JNc2c9e3Byb3BzLmVycm9yTXNnfSBpc1Rlc3Q9e3Byb3BzLmlzVGVzdH0+ DQorICAgICAgICAgICAgPFN0cmVhbWluZ0NoYXJ0IGRhdGE9e3Byb3BzLnN3YXBNZW1vcnlVc2Fn ZUluZm99IGRhdGFQb2ludFNpemU9e0RBVEFfUE9JTlRfU0laRX0geFJhbmdlPXtYX0FYSVNfTEVO R1RIfSBvcHRpb25zPXtvcHRpb25zfSAvPg0KKyAgICAgICAgICA8L0NoYXJ0Q29udGFpbmVyPg0K KyAgICAgICAgPC9HcmlkPg0KKyAgICAgIDwvR3JpZD4NCisgICAgICA8R3JpZCBjb250YWluZXIg c3BhY2luZz17MX0gY2xhc3NOYW1lPXtjbGFzc2VzLmZpeGVkQ29udGFpbmVyfT4NCisgICAgICAg IDxQZ1RhYmxlDQorICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5hdXRvUmVzaXplcn0NCisg ICAgICAgICAgY29sdW1ucz17cHJvcHMudGFibGVIZWFkZXJ9DQorICAgICAgICAgIGRhdGE9e3By b3BzLnByb2Nlc3NNZW1vcnlVc2FnZVN0YXRzfQ0KKyAgICAgICAgICBtc2c9e3Byb3BzLmVycm9y TXNnfQ0KKyAgICAgICAgICB0eXBlPXsncGFuZWwnfQ0KKyAgICAgICAgPjwvUGdUYWJsZT4NCisg ICAgICA8L0dyaWQ+DQorICAgIDwvPg0KKyAgKTsNCit9DQorDQorY29uc3QgcHJvcFR5cGVTdGF0 cyA9IFByb3BUeXBlcy5zaGFwZSh7DQorICBkYXRhc2V0czogUHJvcFR5cGVzLmFycmF5LA0KKyAg cmVmcmVzaFJhdGU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwNCit9KTsNCitNZW1vcnlX cmFwcGVyLnByb3BUeXBlcyA9IHsNCisgIG1lbW9yeVVzYWdlSW5mbzogcHJvcFR5cGVTdGF0cy5p c1JlcXVpcmVkLA0KKyAgc3dhcE1lbW9yeVVzYWdlSW5mbzogcHJvcFR5cGVTdGF0cy5pc1JlcXVp cmVkLA0KKyAgcHJvY2Vzc01lbW9yeVVzYWdlU3RhdHM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVp cmVkLA0KKyAgdGFibGVIZWFkZXI6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLA0KKyAgZXJy b3JNc2c6IFByb3BUeXBlcy5zdHJpbmcsDQorICBzaG93VG9vbHRpcDogUHJvcFR5cGVzLmJvb2wu aXNSZXF1aXJlZCwNCisgIHNob3dEYXRhUG9pbnRzOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVk LA0KKyAgbGluZUJvcmRlcldpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsDQorICBp c0RhdGFiYXNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLA0KKyAgaXNUZXN0OiBQcm9wVHlw ZXMuYm9vbCwNCit9Ow0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0cy9TdG9yYWdlLmpzeCBi L3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvU3lzdGVtU3RhdHMvU3RvcmFnZS5qc3gN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAuLjUwY2ZhMjBmNA0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9TeXN0ZW1TdGF0 cy9TdG9yYWdlLmpzeA0KQEAgLTAsMCArMSwzMjkgQEANCitpbXBvcnQgUmVhY3QsIHsgdXNlU3Rh dGUsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VSZWR1Y2VyLCB1c2VNZW1vIH0gZnJvbSAncmVhY3Qn Ow0KK2ltcG9ydCBnZXR0ZXh0IGZyb20gJ3NvdXJjZXMvZ2V0dGV4dCc7DQoraW1wb3J0IFByb3BU eXBlcyBmcm9tICdwcm9wLXR5cGVzJzsNCitpbXBvcnQgeyBtYWtlU3R5bGVzIH0gZnJvbSAnQG1h dGVyaWFsLXVpL2NvcmUvc3R5bGVzJzsNCitpbXBvcnQgdXJsX2ZvciBmcm9tICdzb3VyY2VzL3Vy bF9mb3InOw0KK2ltcG9ydCB7Z2V0R0NELCBnZXRFcG9jaH0gZnJvbSAnc291cmNlcy91dGlscyc7 DQoraW1wb3J0IHtDaGFydENvbnRhaW5lcn0gZnJvbSAnLi4vRGFzaGJvYXJkJzsNCitpbXBvcnQg eyBHcmlkIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnOw0KK2ltcG9ydCB7IERBVEFfUE9JTlRf U0laRSB9IGZyb20gJ3NvdXJjZXMvY2hhcnRqcyc7DQoraW1wb3J0IFN0cmVhbWluZ0NoYXJ0IGZy b20gJy4uLy4uLy4uLy4uL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvU3RyZWFtaW5nQ2hh cnQnOw0KK2ltcG9ydCB7dXNlSW50ZXJ2YWwsIHVzZVByZXZpb3VzfSBmcm9tICdzb3VyY2VzL2N1 c3RvbV9ob29rcyc7DQoraW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsNCisNCitleHBvcnQgY29u c3QgWF9BWElTX0xFTkdUSCA9IDc1Ow0KKw0KK2NvbnN0IHVzZVN0eWxlcyA9IG1ha2VTdHlsZXMo KHRoZW1lKSA9PiAoew0KKyAgYXV0b1Jlc2l6ZXI6IHsNCisgICAgaGVpZ2h0OiAnMTAwJSAhaW1w b3J0YW50JywNCisgICAgd2lkdGg6ICcxMDAlICFpbXBvcnRhbnQnLA0KKyAgICBiYWNrZ3JvdW5k OiB0aGVtZS5wYWxldHRlLmdyZXlbNDAwXSwNCisgICAgcGFkZGluZzogJzcuNXB4JywNCisgICAg b3ZlcmZsb3dYOiAnYXV0byAhaW1wb3J0YW50JywNCisgICAgb3ZlcmZsb3dZOiAnaGlkZGVuICFp bXBvcnRhbnQnLA0KKyAgICBtaW5IZWlnaHQ6ICcxMDAlJywNCisgICAgbWluV2lkdGg6ICcxMDAl JywNCisgIH0sDQorICBjb250YWluZXI6IHsNCisgICAgaGVpZ2h0OiAnYXV0bycsDQorICAgIGJh Y2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ3JleVsyMDBdLA0KKyAgICBwYWRkaW5nOiAnMTBweCcs DQorICAgIG1hcmdpbkJvdHRvbTogJzMwcHgnLA0KKyAgfSwNCisgIGlvRGlza0NvbnRhaW5lcjog ew0KKyAgICBoZWlnaHQ6ICdhdXRvJywNCisgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5n cmV5WzIwMF0sDQorICAgIHBhZGRpbmc6ICcxMHB4JywNCisgIH0sDQorICBmaXhlZENvbnRhaW5l cjogew0KKyAgICBoZWlnaHQ6ICc1NzdweCcsDQorICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0 dGUuZ3JleVsyMDBdLA0KKyAgICBwYWRkaW5nOiAnMTBweCcsDQorICAgIG1hcmdpbkJvdHRvbTog JzMwcHgnLA0KKyAgfSwNCisgIGNvbnRhaW5lckhlYWRlcjogew0KKyAgICBmb250U2l6ZTogJzE2 cHgnLA0KKyAgICBmb250V2VpZ2h0OiAnYm9sZCcsDQorICAgIG1hcmdpbkJvdHRvbTogJzVweCcs DQorICB9LA0KKyAgY2hhcnRIZWFkZXI6IHsNCisgICAgZm9udFNpemU6ICcxNHB4JywNCisgICAg Zm9udFdlaWdodDogJ2JvbGQnLA0KKyAgICBtYXJnaW5Cb3R0b206ICc1cHgnLA0KKyAgfQ0KK30p KTsNCisNCitleHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShsYWJlbHMsIHJlZnJlc2hSYXRl KSB7DQorICBjb25zdCBjb2xvcnMgPSBbJyNGRjYzODQnLCcjMzZBMkVCJywnI0ZGQ0U1NicsJyM0 QkMwQzAnLCcjOTk2NkZGJywnI0ZGOUY0MCcsJyM4RDZFNjMnLCcjMjE5NkYzJywnI0ZGRUIzQics JyM5QzI3QjAnLCcjMDBCQ0Q0JywnI0NEREMzOSddOw0KKyAgbGV0IGRhdGFzZXRzID0gT2JqZWN0 LmtleXMobGFiZWxzKS5tYXAoKGxhYmVsLCBpKT0+ew0KKyAgICByZXR1cm4gew0KKyAgICAgIGxh YmVsOiBsYWJlbCwNCisgICAgICBkYXRhOiBsYWJlbHNbbGFiZWxdIHx8IFtdLA0KKyAgICAgIGJv cmRlckNvbG9yOiBjb2xvcnNbaV0sDQorICAgICAgcG9pbnRIaXRSYWRpdXM6IERBVEFfUE9JTlRf U0laRSwNCisgICAgfTsNCisgIH0pIHx8IFtdOw0KKw0KKyAgcmV0dXJuIHsNCisgICAgZGF0YXNl dHM6IGRhdGFzZXRzLA0KKyAgICByZWZyZXNoUmF0ZTogcmVmcmVzaFJhdGUsDQorICB9Ow0KK30N CisNCisvKiBVUkwgZm9yIGZldGNoaW5nIGdyYXBocyBkYXRhICovDQorZXhwb3J0IGZ1bmN0aW9u IGdldFN0YXRzVXJsKHNpZD0tMSwgZGlkPS0xLCBjaGFydF9uYW1lcz1bXSkgew0KKyAgbGV0IGJh c2VfdXJsID0gdXJsX2ZvcignZGFzaGJvYXJkLnN5c3RlbV9zdGF0aXN0aWNzJyk7DQorICBiYXNl X3VybCArPSAnLycgKyBzaWQ7DQorICBiYXNlX3VybCArPSAoZGlkID4gMCkgPyAoJy8nICsgZGlk KSA6ICcnOw0KKyAgYmFzZV91cmwgKz0gJz9jaGFydF9uYW1lcz0nICsgY2hhcnRfbmFtZXMuam9p bignLCcpOw0KKw0KKyAgcmV0dXJuIGJhc2VfdXJsOw0KK30NCisNCisvKiBUaGlzIHdpbGwgcHJv Y2VzcyBpbmNvbWluZyBjaGFydHMgZGF0YSBhZGQgaXQgdGhlIHByZXZpb3VzIGNoYXJ0cw0KKyAq IGRhdGEgdG8gZ2V0IHRoZSBuZXcgc3RhdGUuDQorICovDQorZXhwb3J0IGZ1bmN0aW9uIGlvU3Rh dHNSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHsNCisNCisgIGlmKGFjdGlvbi5yZXNldCkgew0KKyAg ICByZXR1cm4gYWN0aW9uLnJlc2V0Ow0KKyAgfQ0KKw0KKyAgaWYoIWFjdGlvbi5pbmNvbWluZykg ew0KKyAgICByZXR1cm4gc3RhdGU7DQorICB9DQorDQorICBpZighYWN0aW9uLmNvdW50ZXJEYXRh KSB7DQorICAgIGFjdGlvbi5jb3VudGVyRGF0YSA9IGFjdGlvbi5pbmNvbWluZzsNCisgIH0NCisN CisgIGxldCBuZXdTdGF0ZSA9IHt9Ow0KKyAgT2JqZWN0LmtleXMoYWN0aW9uLmluY29taW5nKS5m b3JFYWNoKGRpc2tfc3RhdHMgPT4gew0KKyAgICBuZXdTdGF0ZVtkaXNrX3N0YXRzXSA9IHt9Ow0K KyAgICBPYmplY3Qua2V5cyhhY3Rpb24uaW5jb21pbmdbZGlza19zdGF0c10pLmZvckVhY2gobGFi ZWwgPT4gew0KKyAgICAgIGlmKHN0YXRlW2Rpc2tfc3RhdHNdW2xhYmVsXSkgew0KKyAgICAgICAg bmV3U3RhdGVbZGlza19zdGF0c11bbGFiZWxdID0gWw0KKyAgICAgICAgICBhY3Rpb24uY291bnRl ciA/ICBhY3Rpb24uaW5jb21pbmdbZGlza19zdGF0c11bbGFiZWxdIC0gYWN0aW9uLmNvdW50ZXJE YXRhW2Rpc2tfc3RhdHNdW2xhYmVsXSA6IGFjdGlvbi5pbmNvbWluZ1tkaXNrX3N0YXRzXVtsYWJl bF0sDQorICAgICAgICAgIC4uLnN0YXRlW2Rpc2tfc3RhdHNdW2xhYmVsXS5zbGljZSgwLCBYX0FY SVNfTEVOR1RILTEpLA0KKyAgICAgICAgXTsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgbmV3 U3RhdGVbZGlza19zdGF0c11bbGFiZWxdID0gWw0KKyAgICAgICAgICBhY3Rpb24uY291bnRlciA/ ICBhY3Rpb24uaW5jb21pbmdbZGlza19zdGF0c11bbGFiZWxdIC0gYWN0aW9uLmNvdW50ZXJEYXRh W2Rpc2tfc3RhdHNdW2xhYmVsXSA6IGFjdGlvbi5pbmNvbWluZ1tkaXNrX3N0YXRzXVtsYWJlbF0s DQorICAgICAgICBdOw0KKyAgICAgIH0NCisgICAgfSk7DQorICB9KTsNCisgIHJldHVybiBuZXdT dGF0ZTsNCit9DQorDQorY29uc3QgY2hhcnRzRGVmYXVsdCA9IHsNCisgICdpb19zdGF0cyc6IHt9 LA0KK307DQorDQorZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3RvcmFnZSh7cHJlZmVyZW5jZXMs IHNpZCwgZGlkLCBwYWdlVmlzaWJsZSwgZW5hYmxlUG9sbD10cnVlfSkgew0KKyAgY29uc3QgcmVm cmVzaE9uID0gdXNlUmVmKG51bGwpOw0KKyAgY29uc3QgcHJldlByZWZlcm5jZXMgPSB1c2VQcmV2 aW91cyhwcmVmZXJlbmNlcyk7DQorDQorICBjb25zdCBbaW9JbmZvLCBpb0luZm9SZWR1Y2VdID0g dXNlUmVkdWNlcihpb1N0YXRzUmVkdWNlciwgY2hhcnRzRGVmYXVsdFsnaW9fc3RhdHMnXSk7DQor DQorICBjb25zdCBbY291bnRlckRhdGEsIHNldENvdW50ZXJEYXRhXSA9IHVzZVN0YXRlKHt9KTsN CisNCisgIGNvbnN0IFtwb2xsRGVsYXksIHNldFBvbGxEZWxheV0gPSB1c2VTdGF0ZSg1MDAwKTsN CisgIGNvbnN0IFtlcnJvck1zZywgc2V0RXJyb3JNc2ddID0gdXNlU3RhdGUobnVsbCk7DQorICBj b25zdCBbY2hhcnREcmF3bk9uY2UsIHNldENoYXJ0RHJhd25PbmNlXSA9IHVzZVN0YXRlKGZhbHNl KTsNCisNCisgIHVzZUVmZmVjdCgoKT0+ew0KKyAgICBsZXQgY2FsY1BvbGxEZWxheSA9IGZhbHNl Ow0KKyAgICBpZihwcmV2UHJlZmVybmNlcykgew0KKyAgICAgIGlmKHByZXZQcmVmZXJuY2VzWydp b19zdGF0c19yZWZyZXNoJ10gIT0gcHJlZmVyZW5jZXNbJ2lvX3N0YXRzX3JlZnJlc2gnXSkgew0K KyAgICAgICAgaW9JbmZvUmVkdWNlKHtyZXNldDogY2hhcnRzRGVmYXVsdFsnaW9fc3RhdHMnXX0p Ow0KKyAgICAgICAgY2FsY1BvbGxEZWxheSA9IHRydWU7DQorICAgICAgfQ0KKyAgICB9IGVsc2Ug ew0KKyAgICAgIGNhbGNQb2xsRGVsYXkgPSB0cnVlOw0KKyAgICB9DQorICAgIGlmKGNhbGNQb2xs RGVsYXkpIHsNCisgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCk7 DQorICAgICAgY29uc3QgbGVuZ3RoID0ga2V5cy5sZW5ndGg7DQorICAgICAgaWYobGVuZ3RoID09 IDEpew0KKyAgICAgICAgc2V0UG9sbERlbGF5KA0KKyAgICAgICAgICBwcmVmZXJlbmNlc1trZXlz WzBdKydfcmVmcmVzaCddKjEwMDANCisgICAgICAgICk7DQorICAgICAgfSBlbHNlIHsNCisgICAg ICAgIHNldFBvbGxEZWxheSgNCisgICAgICAgICAgZ2V0R0NEKE9iamVjdC5rZXlzKGNoYXJ0c0Rl ZmF1bHQpLm1hcCgobmFtZSk9PnByZWZlcmVuY2VzW25hbWUrJ19yZWZyZXNoJ10pKSoxMDAwDQor ICAgICAgICApOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfSwgW3ByZWZlcmVuY2VzXSk7DQorDQor ICB1c2VFZmZlY3QoKCk9PnsNCisgICAgLyogQ2hhcnRzIHJlbmRlcmVkIGFyZSBub3QgdmlzaWJs ZSB3aGVuLCB0aGUgZGFzaGJvYXJkIGlzIGhpZGRlbiBidXQgbGF0ZXIgdmlzaWJsZSAqLw0KKyAg ICBpZihwYWdlVmlzaWJsZSAmJiAhY2hhcnREcmF3bk9uY2UpIHsNCisgICAgICBzZXRDaGFydERy YXduT25jZSh0cnVlKTsNCisgICAgfQ0KKyAgfSwgW3BhZ2VWaXNpYmxlXSk7DQorDQorICB1c2VJ bnRlcnZhbCgoKT0+ew0KKyAgICBjb25zdCBjdXJyRXBvY2ggPSBnZXRFcG9jaCgpOw0KKyAgICBp ZihyZWZyZXNoT24uY3VycmVudCA9PT0gbnVsbCkgew0KKyAgICAgIGxldCB0bXBSZWYgPSB7fTsN CisgICAgICBPYmplY3Qua2V5cyhjaGFydHNEZWZhdWx0KS5mb3JFYWNoKChuYW1lKT0+ew0KKyAg ICAgICAgdG1wUmVmW25hbWVdID0gY3VyckVwb2NoOw0KKyAgICAgIH0pOw0KKyAgICAgIHJlZnJl c2hPbi5jdXJyZW50ID0gdG1wUmVmOw0KKyAgICB9DQorDQorICAgIGxldCBnZXRGb3IgPSBbXTsN CisgICAgT2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsNCisgICAg ICBpZihjdXJyRXBvY2ggPj0gcmVmcmVzaE9uLmN1cnJlbnRbbmFtZV0pIHsNCisgICAgICAgIGdl dEZvci5wdXNoKG5hbWUpOw0KKyAgICAgICAgcmVmcmVzaE9uLmN1cnJlbnRbbmFtZV0gPSBjdXJy RXBvY2ggKyBwcmVmZXJlbmNlc1tuYW1lKydfcmVmcmVzaCddOw0KKyAgICAgIH0NCisgICAgfSk7 DQorDQorICAgIGxldCBwYXRoID0gZ2V0U3RhdHNVcmwoc2lkLCBkaWQsIGdldEZvcik7DQorICAg IGlmICghcGFnZVZpc2libGUpew0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBheGlvcy5n ZXQocGF0aCkNCisgICAgICAudGhlbigocmVzcCk9PnsNCisgICAgICAgIGxldCBkYXRhID0gcmVz cC5kYXRhOw0KKyAgICAgICAgc2V0RXJyb3JNc2cobnVsbCk7DQorICAgICAgICBpZihkYXRhLmhh c093blByb3BlcnR5KCdpb19zdGF0cycpKXsNCisgICAgICAgICAgY29uc3QgaW9faW5mb19vYmog PSBkYXRhWydpb19zdGF0cyddOw0KKyAgICAgICAgICBmb3IgKGNvbnN0IGRpc2sgaW4gaW9faW5m b19vYmopIHsNCisgICAgICAgICAgICBpZighY2hhcnRzRGVmYXVsdC5pb19zdGF0cy5oYXNPd25Q cm9wZXJ0eShgJHtkaXNrfV90b3RhbF9yd2ApKXsNCisgICAgICAgICAgICAgIGNoYXJ0c0RlZmF1 bHQuaW9fc3RhdHNbYCR7ZGlza31fdG90YWxfcndgXSA9IHsnUmVhZCc6IFtdLCAnV3JpdGUnOiBb XX07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmKCFpb0luZm8uaGFzT3duUHJvcGVy dHkoYCR7ZGlza31fdG90YWxfcndgKSl7DQorICAgICAgICAgICAgICBpb0luZm9bYCR7ZGlza31f dG90YWxfcndgXSA9IHsnUmVhZCc6IFtdLCAnV3JpdGUnOiBbXX07DQorICAgICAgICAgICAgfQ0K Kw0KKyAgICAgICAgICAgIGlmKCFjaGFydHNEZWZhdWx0LmlvX3N0YXRzLmhhc093blByb3BlcnR5 KGAke2Rpc2t9X2J5dGVzX3J3YCkpew0KKyAgICAgICAgICAgICAgY2hhcnRzRGVmYXVsdC5pb19z dGF0c1tgJHtkaXNrfV9ieXRlc19yd2BdID0geydSZWFkJzogW10sICdXcml0ZSc6IFtdfTsNCisg ICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYoIWlvSW5mby5oYXNPd25Qcm9wZXJ0eShgJHtk aXNrfV9ieXRlc19yd2ApKXsNCisgICAgICAgICAgICAgIGlvSW5mb1tgJHtkaXNrfV9ieXRlc19y d2BdID0geydSZWFkJzogW10sICdXcml0ZSc6IFtdfTsNCisgICAgICAgICAgICB9DQorDQorICAg ICAgICAgICAgaWYoIWNoYXJ0c0RlZmF1bHQuaW9fc3RhdHMuaGFzT3duUHJvcGVydHkoYCR7ZGlz a31fdGltZV9yd2ApKXsNCisgICAgICAgICAgICAgIGNoYXJ0c0RlZmF1bHQuaW9fc3RhdHNbYCR7 ZGlza31fdGltZV9yd2BdID0geydSZWFkJzogW10sICdXcml0ZSc6IFtdfTsNCisgICAgICAgICAg ICB9DQorICAgICAgICAgICAgaWYoIWlvSW5mby5oYXNPd25Qcm9wZXJ0eShgJHtkaXNrfV90aW1l X3J3YCkpew0KKyAgICAgICAgICAgICAgaW9JbmZvW2Ake2Rpc2t9X3RpbWVfcndgXSA9IHsnUmVh ZCc6IFtdLCAnV3JpdGUnOiBbXX07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9DQorDQor ICAgICAgICAgIGxldCBuZXdfaW9fc3RhdHMgPSB7fTsNCisgICAgICAgICAgZm9yIChjb25zdCBk aXNrIGluIGlvX2luZm9fb2JqKSB7DQorICAgICAgICAgICAgbmV3X2lvX3N0YXRzW2Ake2Rpc2t9 X3RvdGFsX3J3YF0gPSB7J1JlYWQnOiBpb19pbmZvX29ialtgJHtkaXNrfWBdWyd0b3RhbF9yZWFk cyddP2lvX2luZm9fb2JqW2Ake2Rpc2t9YF1bJ3RvdGFsX3JlYWRzJ106MCwgJ1dyaXRlJzogaW9f aW5mb19vYmpbYCR7ZGlza31gXVsndG90YWxfd3JpdGVzJ10/aW9faW5mb19vYmpbYCR7ZGlza31g XVsndG90YWxfd3JpdGVzJ106MH07DQorICAgICAgICAgICAgbmV3X2lvX3N0YXRzW2Ake2Rpc2t9 X2J5dGVzX3J3YF0gPSB7J1JlYWQnOiBpb19pbmZvX29ialtgJHtkaXNrfWBdWydyZWFkX2J5dGVz J10/aW9faW5mb19vYmpbYCR7ZGlza31gXVsncmVhZF9ieXRlcyddOjAsICdXcml0ZSc6IGlvX2lu Zm9fb2JqW2Ake2Rpc2t9YF1bJ3dyaXRlX2J5dGVzJ10/aW9faW5mb19vYmpbYCR7ZGlza31gXVsn d3JpdGVfYnl0ZXMnXTowfTsNCisgICAgICAgICAgICBuZXdfaW9fc3RhdHNbYCR7ZGlza31fdGlt ZV9yd2BdID0geydSZWFkJzogaW9faW5mb19vYmpbYCR7ZGlza31gXVsncmVhZF90aW1lX21zJ10/ aW9faW5mb19vYmpbYCR7ZGlza31gXVsncmVhZF90aW1lX21zJ106MCwgJ1dyaXRlJzogaW9faW5m b19vYmpbYCR7ZGlza31gXVsnd3JpdGVfdGltZV9tcyddP2lvX2luZm9fb2JqW2Ake2Rpc2t9YF1b J3dyaXRlX3RpbWVfbXMnXTowfTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICBpb0luZm9SZWR1 Y2Uoe2luY29taW5nOiBuZXdfaW9fc3RhdHN9KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHNl dENvdW50ZXJEYXRhKChwcmV2Q291bnRlckRhdGEpPT57DQorICAgICAgICAgIHJldHVybiB7DQor ICAgICAgICAgICAgLi4ucHJldkNvdW50ZXJEYXRhLA0KKyAgICAgICAgICAgIC4uLmRhdGEsDQor ICAgICAgICAgIH07DQorICAgICAgICB9KTsNCisgICAgICB9KQ0KKyAgICAgIC5jYXRjaCgoZXJy b3IpPT57DQorICAgICAgICBpZighZXJyb3JNc2cpIHsNCisgICAgICAgICAgaW9JbmZvUmVkdWNl KHtyZXNldDpjaGFydHNEZWZhdWx0Wydpb19zdGF0cyddfSk7DQorICAgICAgICAgIHNldENvdW50 ZXJEYXRhKHt9KTsNCisgICAgICAgICAgaWYoZXJyb3IucmVzcG9uc2UpIHsNCisgICAgICAgICAg ICBpZiAoZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MjgpIHsNCisgICAgICAgICAgICAgIHNl dEVycm9yTXNnKGdldHRleHQoJ1BsZWFzZSBjb25uZWN0IHRvIHRoZSBzZWxlY3RlZCBzZXJ2ZXIg dG8gdmlldyB0aGUgZ3JhcGguJykpOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAg ICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsc3QgcmVuZGVy aW5nIHRoZSBncmFwaC4nKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9IGVsc2UgaWYo ZXJyb3IucmVxdWVzdCkgew0KKyAgICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ05vdCBj b25uZWN0ZWQgdG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhh cyBiZWVuIGNsb3NlZC4nKSk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICB9IGVs c2Ugew0KKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOw0KKyAgICAgICAgICB9DQor ICAgICAgICB9DQorICAgICAgfSk7DQorICB9LCBlbmFibGVQb2xsID8gcG9sbERlbGF5IDogLTEp Ow0KKw0KKyAgcmV0dXJuICgNCisgICAgPD4NCisgICAgICA8ZGl2IGRhdGEtdGVzdGlkPSdncmFw aC1wb2xsLWRlbGF5JyBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319Pntwb2xsRGVsYXl9PC9kaXY+ DQorICAgICAge2NoYXJ0RHJhd25PbmNlICYmDQorICAgICAgICA8U3RvcmFnZVdyYXBwZXINCisg ICAgICAgICAgaW9JbmZvPXtpb0luZm99DQorICAgICAgICAgIGlvUmVmcmVzaFJhdGU9e3ByZWZl cmVuY2VzWydpb19zdGF0c19yZWZyZXNoJ119DQorICAgICAgICAgIGVycm9yTXNnPXtlcnJvck1z Z30NCisgICAgICAgICAgc2hvd1Rvb2x0aXA9e3ByZWZlcmVuY2VzWydncmFwaF9tb3VzZV90cmFj ayddfQ0KKyAgICAgICAgICBzaG93RGF0YVBvaW50cz17cHJlZmVyZW5jZXNbJ2dyYXBoX2RhdGFf cG9pbnRzJ119DQorICAgICAgICAgIGxpbmVCb3JkZXJXaWR0aD17cHJlZmVyZW5jZXNbJ2dyYXBo X2xpbmVfYm9yZGVyX3dpZHRoJ119DQorICAgICAgICAgIGlzRGF0YWJhc2U9e2RpZCA+IDB9DQor ICAgICAgICAgIGlzVGVzdD17ZmFsc2V9DQorICAgICAgICAvPg0KKyAgICAgIH0NCisgICAgPC8+ DQorICApOw0KK30NCisNCitTdG9yYWdlLnByb3BUeXBlcyA9IHsNCisgIHByZWZlcmVuY2VzOiBQ cm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsDQorICBzaWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUo W1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVk XSksDQorICBkaWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1 aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksDQorICBwYWdlVmlzaWJsZTogUHJv cFR5cGVzLmJvb2wsDQorICBlbmFibGVQb2xsOiBQcm9wVHlwZXMuYm9vbCwNCit9Ow0KKw0KK2V4 cG9ydCBmdW5jdGlvbiBTdG9yYWdlV3JhcHBlcihwcm9wcykgew0KKyAgY29uc3QgY2xhc3NlcyA9 IHVzZVN0eWxlcygpOw0KKyAgY29uc3Qgb3B0aW9ucyA9IHVzZU1lbW8oKCk9Pih7DQorICAgIHNo b3dEYXRhUG9pbnRzOiBwcm9wcy5zaG93RGF0YVBvaW50cywNCisgICAgc2hvd1Rvb2x0aXA6IHBy b3BzLnNob3dUb29sdGlwLA0KKyAgICBsaW5lQm9yZGVyV2lkdGg6IHByb3BzLmxpbmVCb3JkZXJX aWR0aCwNCisgIH0pLCBbcHJvcHMuc2hvd1Rvb2x0aXAsIHByb3BzLnNob3dEYXRhUG9pbnRzLCBw cm9wcy5saW5lQm9yZGVyV2lkdGhdKTsNCisNCisgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhw cm9wcy5pb0luZm8pOw0KKyAgcmV0dXJuICgNCisgICAgPD4NCisgICAgICB7a2V5cy5tYXAoKGtl eSwgaW5kZXgpID0+ICgNCisgICAgICAgIGluZGV4ICUgMyA9PT0gMCAmJiAoDQorICAgICAgICAg IDxHcmlkIGtleT17YGRpc2stJHtpbmRleH1gfSBjb250YWluZXIgc3BhY2luZz17MX0gY2xhc3NO YW1lPXtjbGFzc2VzLmNvbnRhaW5lcn0+DQorICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIHNw YWNpbmc9ezF9IGNsYXNzTmFtZT17Y2xhc3Nlcy5pb0Rpc2tDb250YWluZXJ9Pg0KKyAgICAgICAg ICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dChg RGlzayAke01hdGguZmxvb3IoaW5kZXggLyAzKSArIDF9YCl9PC9kaXY+DQorICAgICAgICAgICAg PC9HcmlkPg0KKyAgICAgICAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05h bWU9e2NsYXNzZXMuaW9EaXNrQ29udGFpbmVyfT4NCisgICAgICAgICAgICAgIHtrZXlzLnNsaWNl KGluZGV4LCBpbmRleCArIDMpLm1hcCgoaW5uZXJLZXksIGlubmVyS2V5SW5kZXgpID0+ICgNCisg ICAgICAgICAgICAgICAgPEdyaWQga2V5PXtgJHtpbm5lcktleX1gfSBpdGVtIG1kPXs0fSBzbT17 Nn0+DQorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY2hhcnRIZWFk ZXJ9Pntpbm5lcktleUluZGV4PT0wID8gZ2V0dGV4dCgnSS9PIE9wZXJhdGlvbnMgQ291bnQnKTog aW5uZXJLZXlJbmRleD09MT8gZ2V0dGV4dCgnRGF0YSBUcmFuc2ZlciAoQnl0ZXMpJyk6Z2V0dGV4 dCgnVGltZSBTcGVudCBpbiBJL08gT3BlcmF0aW9ucyAoTWlsbGlzZWNvbmRzKScpfTwvZGl2Pg0K KyAgICAgICAgICAgICAgICAgIDxDaGFydENvbnRhaW5lciBpZD17YGlvLWdyYXBoLSR7aW5uZXJL ZXl9YH0gdGl0bGU9e2dldHRleHQoJycpfSBkYXRhc2V0cz17dHJhbnNmb3JtRGF0YShwcm9wcy5p b0luZm9baW5uZXJLZXldLCBwcm9wcy5pb1JlZnJlc2hSYXRlKS5kYXRhc2V0c30gIGVycm9yTXNn PXtwcm9wcy5lcnJvck1zZ30gaXNUZXN0PXtwcm9wcy5pc1Rlc3R9Pg0KKyAgICAgICAgICAgICAg ICAgICAgPFN0cmVhbWluZ0NoYXJ0IGRhdGE9e3RyYW5zZm9ybURhdGEocHJvcHMuaW9JbmZvW2lu bmVyS2V5XSwgcHJvcHMuaW9SZWZyZXNoUmF0ZSl9IGRhdGFQb2ludFNpemU9e0RBVEFfUE9JTlRf U0laRX0geFJhbmdlPXtYX0FYSVNfTEVOR1RIfSBvcHRpb25zPXtvcHRpb25zfSAvPg0KKyAgICAg ICAgICAgICAgICAgIDwvQ2hhcnRDb250YWluZXI+DQorICAgICAgICAgICAgICAgIDwvR3JpZD4N CisgICAgICAgICAgICAgICkpfQ0KKyAgICAgICAgICAgIDwvR3JpZD4NCisgICAgICAgICAgPC9H cmlkPg0KKyAgICAgICAgKQ0KKyAgICAgICkpfQ0KKyAgICA8Lz4NCisgICk7DQorfQ0KKw0KK1N0 b3JhZ2VXcmFwcGVyLnByb3BUeXBlcyA9IHsNCisgIGlvSW5mbzogUHJvcFR5cGVzLm9iamVjdE9m KA0KKyAgICBQcm9wVHlwZXMuc2hhcGUoew0KKyAgICAgIFJlYWQ6IFByb3BUeXBlcy5hcnJheSwN CisgICAgICBXcml0ZTogUHJvcFR5cGVzLmFycmF5LA0KKyAgICB9KQ0KKyAgKSwNCisgIGlvUmVm cmVzaFJhdGU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwNCisgIGVycm9yTXNnOiBQcm9w VHlwZXMuc3RyaW5nLA0KKyAgc2hvd1Rvb2x0aXA6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQs DQorICBzaG93RGF0YVBvaW50czogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwNCisgIGxpbmVC b3JkZXJXaWR0aDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLA0KKyAgaXNEYXRhYmFzZTog UHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwNCisgIGlzVGVzdDogUHJvcFR5cGVzLmJvb2wsDQor fTsNClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L2Rhc2hib2FyZC9zdGF0aWMvanMvU3lzdGVtU3RhdHMvU3VtbWFyeS5qc3ggYi93ZWIvcGdhZG1p bi9kYXNoYm9hcmQvc3RhdGljL2pzL1N5c3RlbVN0YXRzL1N1bW1hcnkuanN4DQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwLi5mM2UyM2UyYjANCi0tLSAvZGV2L251bGwNCisr KyBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMvU3lzdGVtU3RhdHMvU3VtbWFyeS5q c3gNCkBAIC0wLDAgKzEsNDIyIEBADQoraW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZl Y3QsIHVzZVJlZiwgdXNlUmVkdWNlciwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JzsNCitpbXBvcnQg Z2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOw0KK2ltcG9ydCBQcm9wVHlwZXMgZnJvbSAn cHJvcC10eXBlcyc7DQoraW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9j b3JlL3N0eWxlcyc7DQoraW1wb3J0IHVybF9mb3IgZnJvbSAnc291cmNlcy91cmxfZm9yJzsNCitp bXBvcnQgZ2V0QXBpSW5zdGFuY2UgZnJvbSAnc291cmNlcy9hcGlfaW5zdGFuY2UnOw0KK2ltcG9y dCB7Z2V0R0NELCBnZXRFcG9jaH0gZnJvbSAnc291cmNlcy91dGlscyc7DQoraW1wb3J0IHtDaGFy dENvbnRhaW5lcn0gZnJvbSAnLi4vRGFzaGJvYXJkJzsNCitpbXBvcnQgeyBHcmlkIH0gZnJvbSAn QG1hdGVyaWFsLXVpL2NvcmUnOw0KK2ltcG9ydCB7IERBVEFfUE9JTlRfU0laRSB9IGZyb20gJ3Nv dXJjZXMvY2hhcnRqcyc7DQoraW1wb3J0IFN0cmVhbWluZ0NoYXJ0IGZyb20gJy4uLy4uLy4uLy4u L3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvU3RyZWFtaW5nQ2hhcnQnOw0KK2ltcG9ydCBE b251dENoYXJ0IGZyb20gJy4uLy4uLy4uLy4uL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQv RG9udXRDaGFydCc7DQoraW1wb3J0IHt1c2VJbnRlcnZhbCwgdXNlUHJldmlvdXN9IGZyb20gJ3Nv dXJjZXMvY3VzdG9tX2hvb2tzJzsNCitpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOw0KKw0KK2V4 cG9ydCBjb25zdCBYX0FYSVNfTEVOR1RIID0gNzU7DQorDQorY29uc3QgdXNlU3R5bGVzID0gbWFr ZVN0eWxlcygodGhlbWUpID0+ICh7DQorICBhdXRvUmVzaXplcjogew0KKyAgICBoZWlnaHQ6ICcx MDAlICFpbXBvcnRhbnQnLA0KKyAgICB3aWR0aDogJzEwMCUgIWltcG9ydGFudCcsDQorICAgIGJh Y2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ3JleVs0MDBdLA0KKyAgICBwYWRkaW5nOiAnNy41cHgn LA0KKyAgICBvdmVyZmxvd1g6ICdhdXRvICFpbXBvcnRhbnQnLA0KKyAgICBvdmVyZmxvd1k6ICdo aWRkZW4gIWltcG9ydGFudCcsDQorICAgIG1pbkhlaWdodDogJzEwMCUnLA0KKyAgICBtaW5XaWR0 aDogJzEwMCUnLA0KKyAgfSwNCisgIHRhYmxlOiB7DQorICAgIHdpZHRoOiAnMTAwJScsDQorICAg IGJhY2tncm91bmRDb2xvcjogdGhlbWUub3RoZXJWYXJzLnRhYmxlQmcsDQorICAgIGJvcmRlcjog JzFweCBzb2xpZCByZ2IoMjIxLCAyMjQsIDIzMCknLA0KKyAgfSwNCisgIHRhYmxlVmFsOiB7DQor ICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2IoMjIxLCAyMjQsIDIzMCkgIWltcG9ydGFudCcsDQor ICAgIHBhZGRpbmc6ICcxMHB4ICFpbXBvcnRhbnQnLA0KKyAgfSwNCisgIGNvbnRhaW5lcjogew0K KyAgICBoZWlnaHQ6ICdhdXRvJywNCisgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5ncmV5 WzIwMF0sDQorICAgIHBhZGRpbmc6ICcxMHB4JywNCisgICAgbWFyZ2luQm90dG9tOiAnMzBweCcs DQorICB9LA0KKyAgY29udGFpbmVySGVhZGVyOiB7DQorICAgIGZvbnRTaXplOiAnMTZweCcsDQor ICAgIGZvbnRXZWlnaHQ6ICdib2xkJywNCisgICAgbWFyZ2luQm90dG9tOiAnNXB4JywNCisgIH0s DQorfSkpOw0KKw0KK2V4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGxhYmVscywgcmVmcmVz aFJhdGUpIHsNCisgIGNvbnN0IGNvbG9ycyA9IFsnI0ZGNjM4NCcsJyMzNkEyRUInLCcjRkZDRTU2 JywnIzRCQzBDMCcsJyM5OTY2RkYnLCcjRkY5RjQwJywnIzhENkU2MycsJyMyMTk2RjMnLCcjRkZF QjNCJywnIzlDMjdCMCcsJyMwMEJDRDQnLCcjQ0REQzM5J107DQorICBsZXQgZGF0YXNldHMgPSBP YmplY3Qua2V5cyhsYWJlbHMpLm1hcCgobGFiZWwsIGkpPT57DQorICAgIHJldHVybiB7DQorICAg ICAgbGFiZWw6IGxhYmVsLA0KKyAgICAgIGRhdGE6IGxhYmVsc1tsYWJlbF0gfHwgW10sDQorICAg ICAgYm9yZGVyQ29sb3I6IGNvbG9yc1tpXSwNCisgICAgICBwb2ludEhpdFJhZGl1czogREFUQV9Q T0lOVF9TSVpFLA0KKyAgICB9Ow0KKyAgfSkgfHwgW107DQorDQorICByZXR1cm4gew0KKyAgICBk YXRhc2V0czogZGF0YXNldHMsDQorICAgIHJlZnJlc2hSYXRlOiByZWZyZXNoUmF0ZSwNCisgIH07 DQorfQ0KKw0KKy8qIFVSTCBmb3IgZmV0Y2hpbmcgZ3JhcGhzIGRhdGEgKi8NCitleHBvcnQgZnVu Y3Rpb24gZ2V0U3RhdHNVcmwoc2lkPS0xLCBkaWQ9LTEsIGNoYXJ0X25hbWVzPVtdKSB7DQorICBs ZXQgYmFzZV91cmwgPSB1cmxfZm9yKCdkYXNoYm9hcmQuc3lzdGVtX3N0YXRpc3RpY3MnKTsNCisg IGJhc2VfdXJsICs9ICcvJyArIHNpZDsNCisgIGJhc2VfdXJsICs9IChkaWQgPiAwKSA/ICgnLycg KyBkaWQpIDogJyc7DQorICBiYXNlX3VybCArPSAnP2NoYXJ0X25hbWVzPScgKyBjaGFydF9uYW1l cy5qb2luKCcsJyk7DQorDQorICByZXR1cm4gYmFzZV91cmw7DQorfQ0KKw0KKy8qIFRoaXMgd2ls bCBwcm9jZXNzIGluY29taW5nIGNoYXJ0cyBkYXRhIGFkZCBpdCB0aGUgcHJldmlvdXMgY2hhcnRz DQorICogZGF0YSB0byBnZXQgdGhlIG5ldyBzdGF0ZS4NCisgKi8NCitleHBvcnQgZnVuY3Rpb24g c3RhdHNSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHsNCisNCisgIGlmKGFjdGlvbi5yZXNldCkgew0K KyAgICByZXR1cm4gYWN0aW9uLnJlc2V0Ow0KKyAgfQ0KKw0KKyAgaWYoIWFjdGlvbi5pbmNvbWlu Zykgew0KKyAgICByZXR1cm4gc3RhdGU7DQorICB9DQorDQorICBpZighYWN0aW9uLmNvdW50ZXJE YXRhKSB7DQorICAgIGFjdGlvbi5jb3VudGVyRGF0YSA9IGFjdGlvbi5pbmNvbWluZzsNCisgIH0N CisNCisgIGxldCBuZXdTdGF0ZSA9IHt9Ow0KKyAgT2JqZWN0LmtleXMoYWN0aW9uLmluY29taW5n KS5mb3JFYWNoKGxhYmVsID0+IHsNCisgICAgaWYoc3RhdGVbbGFiZWxdKSB7DQorICAgICAgbmV3 U3RhdGVbbGFiZWxdID0gWw0KKyAgICAgICAgYWN0aW9uLmNvdW50ZXIgPyAgYWN0aW9uLmluY29t aW5nW2xhYmVsXSAtIGFjdGlvbi5jb3VudGVyRGF0YVtsYWJlbF0gOiBhY3Rpb24uaW5jb21pbmdb bGFiZWxdLA0KKyAgICAgICAgLi4uc3RhdGVbbGFiZWxdLnNsaWNlKDAsIFhfQVhJU19MRU5HVEgt MSksDQorICAgICAgXTsNCisgICAgfSBlbHNlIHsNCisgICAgICBuZXdTdGF0ZVtsYWJlbF0gPSBb DQorICAgICAgICBhY3Rpb24uY291bnRlciA/ICBhY3Rpb24uaW5jb21pbmdbbGFiZWxdIC0gYWN0 aW9uLmNvdW50ZXJEYXRhW2xhYmVsXSA6IGFjdGlvbi5pbmNvbWluZ1tsYWJlbF0sDQorICAgICAg XTsNCisgICAgfQ0KKyAgfSk7DQorICByZXR1cm4gbmV3U3RhdGU7DQorfQ0KKw0KK2NvbnN0IGNo YXJ0c0RlZmF1bHQgPSB7DQorICAnaHBjX3N0YXRzJzogeydIYW5kbGUnOiBuZXcgQXJyYXkoWF9B WElTX0xFTkdUSCkuZmlsbChudWxsKSwgJ1Byb2Nlc3MnOiBuZXcgQXJyYXkoWF9BWElTX0xFTkdU SCkuZmlsbChudWxsKX0sDQorfTsNCisNCitjb25zdCBTdW1tYXJ5VGFibGUgPSAocHJvcHMpID0+ IHsNCisgIGNvbnN0IGNsYXNzZXMgPSB1c2VTdHlsZXMoKTsNCisgIGNvbnN0IGRhdGEgPSBwcm9w cy5kYXRhOw0KKyAgcmV0dXJuICgNCisgICAgPHRhYmxlIGNsYXNzTmFtZT17Y2xhc3Nlcy50YWJs ZX0+DQorICAgICAgPHRoZWFkPg0KKyAgICAgICAgPHRyPg0KKyAgICAgICAgICA8dGggY2xhc3NO YW1lPXtjbGFzc2VzLnRhYmxlVmFsfT5Qcm9wZXJ0eTwvdGg+DQorICAgICAgICAgIDx0aCBjbGFz c05hbWU9e2NsYXNzZXMudGFibGVWYWx9PlZhbHVlPC90aD4NCisgICAgICAgIDwvdHI+DQorICAg ICAgPC90aGVhZD4NCisgICAgICA8dGJvZHk+DQorICAgICAgICB7ZGF0YS5tYXAoKGl0ZW0sIGlu ZGV4KSA9PiAoDQorICAgICAgICAgIDx0ciBjbGFzc05hbWU9e2NsYXNzZXMudGFibGVWYWx9IGtl eT17aW5kZXh9Pg0KKyAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2NsYXNzZXMudGFibGVWYWx9 PntpdGVtLm5hbWV9PC90ZD4NCisgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjbGFzc2VzLnRh YmxlVmFsfT57aXRlbS52YWx1ZX08L3RkPg0KKyAgICAgICAgICA8L3RyPg0KKyAgICAgICAgKSl9 DQorICAgICAgPC90Ym9keT4NCisgICAgPC90YWJsZT4NCisgICk7DQorfTsNCisNCitTdW1tYXJ5 VGFibGUucHJvcFR5cGVzID0gew0KKyAgZGF0YTogUHJvcFR5cGVzLmFueSwNCit9Ow0KKw0KK2V4 cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN1bW1hcnkoe3ByZWZlcmVuY2VzLCBzaWQsIGRpZCwgcGFn ZVZpc2libGUsIGVuYWJsZVBvbGw9dHJ1ZX0pIHsNCisgIGNvbnN0IHJlZnJlc2hPbiA9IHVzZVJl ZihudWxsKTsNCisgIGNvbnN0IHByZXZQcmVmZXJuY2VzID0gdXNlUHJldmlvdXMocHJlZmVyZW5j ZXMpOw0KKw0KKyAgY29uc3QgW3Byb2Nlc3NIYW5kbGVDb3VudCwgcHJvY2Vzc0hhbmRsZUNvdW50 UmVkdWNlXSA9IHVzZVJlZHVjZXIoc3RhdHNSZWR1Y2VyLCBjaGFydHNEZWZhdWx0WydocGNfc3Rh dHMnXSk7DQorICBjb25zdCBbb3NTdGF0cywgc2V0T3NTdGF0c10gPSB1c2VTdGF0ZShbXSk7DQor ICBjb25zdCBbY3B1U3RhdHMsIHNldENwdVN0YXRzXSA9IHVzZVN0YXRlKFtdKTsNCisgIGNvbnN0 IFtwcm9jZXNzSW5mb1N0YXRzXSA9IHVzZVN0YXRlKHsnUnVubmluZyc6IDQsICdTbGVlcGluZyc6 IDIsICdTdG9wcGVkJzogMSwgJ1pvbWJpZSc6IDJ9KTsNCisNCisgIGNvbnN0IFtjb3VudGVyRGF0 YSwgc2V0Q291bnRlckRhdGFdID0gdXNlU3RhdGUoe30pOw0KKw0KKyAgY29uc3QgW3BvbGxEZWxh eSwgc2V0UG9sbERlbGF5XSA9IHVzZVN0YXRlKDUwMDApOw0KKyAgY29uc3QgW2xvbmdQb2xsRGVs YXldID0gdXNlU3RhdGUoMTgwMDAwKTsNCisgIGNvbnN0IFtlcnJvck1zZywgc2V0RXJyb3JNc2dd ID0gdXNlU3RhdGUobnVsbCk7DQorICBjb25zdCBbY2hhcnREcmF3bk9uY2UsIHNldENoYXJ0RHJh d25PbmNlXSA9IHVzZVN0YXRlKGZhbHNlKTsNCisNCisgIGNvbnN0IHRhYmxlSGVhZGVyID0gWw0K KyAgICB7DQorICAgICAgSGVhZGVyOiAnUHJvcGVydHknLA0KKyAgICAgIGFjY2Vzc29yOiAnbmFt ZScsDQorICAgICAgc29ydGFibGU6IHRydWUsDQorICAgICAgcmVzaXphYmxlOiB0cnVlLA0KKyAg ICAgIGRpc2FibGVHbG9iYWxGaWx0ZXI6IGZhbHNlLA0KKyAgICB9LA0KKyAgICB7DQorICAgICAg SGVhZGVyOiAnVmFsdWUnLA0KKyAgICAgIGFjY2Vzc29yOiAndmFsdWUnLA0KKyAgICAgIHNvcnRh YmxlOiB0cnVlLA0KKyAgICAgIHJlc2l6YWJsZTogdHJ1ZSwNCisgICAgICBkaXNhYmxlR2xvYmFs RmlsdGVyOiBmYWxzZSwNCisgICAgfSwNCisgIF07DQorDQorICB1c2VFZmZlY3QoKCk9PnsNCisg ICAgbGV0IGNhbGNQb2xsRGVsYXkgPSBmYWxzZTsNCisgICAgaWYocHJldlByZWZlcm5jZXMpIHsN CisgICAgICBpZihwcmV2UHJlZmVybmNlc1snaHBjX3N0YXRzX3JlZnJlc2gnXSAhPSBwcmVmZXJl bmNlc1snaHBjX3N0YXRzX3JlZnJlc2gnXSkgew0KKyAgICAgICAgcHJvY2Vzc0hhbmRsZUNvdW50 UmVkdWNlKHtyZXNldDogY2hhcnRzRGVmYXVsdFsnaHBjX3N0YXRzJ119KTsNCisgICAgICAgIGNh bGNQb2xsRGVsYXkgPSB0cnVlOw0KKyAgICAgIH0NCisgICAgfSBlbHNlIHsNCisgICAgICBjYWxj UG9sbERlbGF5ID0gdHJ1ZTsNCisgICAgfQ0KKyAgICBpZihjYWxjUG9sbERlbGF5KSB7DQorICAg ICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNoYXJ0c0RlZmF1bHQpOw0KKyAgICAgIGNvbnN0 IGxlbmd0aCA9IGtleXMubGVuZ3RoOw0KKyAgICAgIGlmKGxlbmd0aCA9PSAxKXsNCisgICAgICAg IHNldFBvbGxEZWxheSgNCisgICAgICAgICAgcHJlZmVyZW5jZXNba2V5c1swXSsnX3JlZnJlc2gn XSoxMDAwDQorICAgICAgICApOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBzZXRQb2xsRGVs YXkoDQorICAgICAgICAgIGdldEdDRChPYmplY3Qua2V5cyhjaGFydHNEZWZhdWx0KS5tYXAoKG5h bWUpPT5wcmVmZXJlbmNlc1tuYW1lKydfcmVmcmVzaCddKSkqMTAwMA0KKyAgICAgICAgKTsNCisg ICAgICB9DQorICAgIH0NCisgIH0sIFtwcmVmZXJlbmNlc10pOw0KKw0KKyAgdXNlRWZmZWN0KCgp PT57DQorICAgIC8qIENoYXJ0cyByZW5kZXJlZCBhcmUgbm90IHZpc2libGUgd2hlbiwgdGhlIGRh c2hib2FyZCBpcyBoaWRkZW4gYnV0IGxhdGVyIHZpc2libGUgKi8NCisgICAgaWYocGFnZVZpc2li bGUgJiYgIWNoYXJ0RHJhd25PbmNlKSB7DQorICAgICAgc2V0Q2hhcnREcmF3bk9uY2UodHJ1ZSk7 DQorICAgIH0NCisgIH0sIFtwYWdlVmlzaWJsZV0pOw0KKw0KKyAgdXNlRWZmZWN0KCgpID0+IHsN CisgICAgdHJ5IHsNCisgICAgICAvLyBGZXRjaCB0aGUgbGF0ZXN0IGRhdGEgcG9pbnQgZnJvbSB0 aGUgQVBJIGVuZHBvaW50DQorICAgICAgbGV0IHVybDsNCisgICAgICB1cmwgPSB1cmxfZm9yKCdk YXNoYm9hcmQuc3lzdGVtX3N0YXRpc3RpY3MnKTsNCisgICAgICB1cmwgKz0gJy8nICsgc2lkOw0K KyAgICAgIHVybCArPSBkaWQgPiAwID8gJy8nICsgZGlkIDogJyc7DQorICAgICAgdXJsICs9ICc/ Y2hhcnRfbmFtZXM9JyArICdwZ19zeXNfb3NfaW5mbyxwZ19zeXNfY3B1X2luZm8nOw0KKyAgICAg IGNvbnN0IGFwaSA9IGdldEFwaUluc3RhbmNlKCk7DQorICAgICAgYXBpKHsNCisgICAgICAgIHVy bDogdXJsLA0KKyAgICAgICAgdHlwZTogJ0dFVCcsDQorICAgICAgfSkNCisgICAgICAgIC50aGVu KChyZXMpID0+IHsNCisgICAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YTsNCisNCisgICAgICAg ICAgY29uc3Qgb3NfaW5mb19vYmogPSBkYXRhWydwZ19zeXNfb3NfaW5mbyddOw0KKyAgICAgICAg ICBsZXQgb3NfaW5mb19saXN0ID0gWw0KKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdO YW1lJywgdmFsdWU6IG9zX2luZm9fb2JqWyduYW1lJ10gfSwNCisgICAgICAgICAgICB7IGljb246 ICcnLCBuYW1lOiAnVmVyc2lvbicsIHZhbHVlOiBvc19pbmZvX29ialsndmVyc2lvbiddIH0sDQor ICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ0hvc3QgbmFtZScsIHZhbHVlOiBvc19pbmZv X29ialsnaG9zdF9uYW1lJ10gfSwNCisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnRG9t YWluIG5hbWUnLCB2YWx1ZTogb3NfaW5mb19vYmpbJ2RvbWFpbl9uYW1lJ10gfSwNCisgICAgICAg ICAgICB7IGljb246ICcnLCBuYW1lOiAnQXJjaGl0ZWN0dXJlJywgdmFsdWU6IG9zX2luZm9fb2Jq WydhcmNoaXRlY3R1cmUnXSB9LA0KKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdPcyB1 cCBzaW5jZSBzZWNvbmRzJywgdmFsdWU6IG9zX2luZm9fb2JqWydvc191cF9zaW5jZV9zZWNvbmRz J10gfSwNCisgICAgICAgICAgXTsNCisgICAgICAgICAgc2V0T3NTdGF0cyhvc19pbmZvX2xpc3Qp Ow0KKw0KKyAgICAgICAgICBjb25zdCBjcHVfaW5mb19vYmogPSBkYXRhWydwZ19zeXNfY3B1X2lu Zm8nXTsNCisgICAgICAgICAgbGV0IGNwdV9pbmZvX2xpc3QgPSBbDQorICAgICAgICAgICAgeyBp Y29uOiAnJywgbmFtZTogJ1ZlbmRvcicsIHZhbHVlOiBjcHVfaW5mb19vYmpbJ3ZlbmRvciddIH0s DQorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ0Rlc2NyaXB0aW9uJywgdmFsdWU6IGNw dV9pbmZvX29ialsnZGVzY3JpcHRpb24nXSB9LA0KKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5h bWU6ICdNb2RlbCBuYW1lJywgdmFsdWU6IGNwdV9pbmZvX29ialsnbW9kZWxfbmFtZSddIH0sDQor ICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ05vIG9mIGNvcmVzJywgdmFsdWU6IGNwdV9p bmZvX29ialsnbm9fb2ZfY29yZXMnXSB9LA0KKyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6 ICdBcmNoaXRlY3R1cmUnLCB2YWx1ZTogY3B1X2luZm9fb2JqWydhcmNoaXRlY3R1cmUnXSB9LA0K KyAgICAgICAgICAgIHsgaWNvbjogJycsIG5hbWU6ICdDbG9jayBzcGVlZCBIeicsIHZhbHVlOiBj cHVfaW5mb19vYmpbJ2Nsb2NrX3NwZWVkX2h6J10gfSwNCisgICAgICAgICAgICB7IGljb246ICcn LCBuYW1lOiAnTDEgZGNhY2hlIHNpemUnLCB2YWx1ZTogY3B1X2luZm9fb2JqWydsMWRjYWNoZV9z aXplJ10gfSwNCisgICAgICAgICAgICB7IGljb246ICcnLCBuYW1lOiAnTDEgaWNhY2hlIHNpemUn LCB2YWx1ZTogY3B1X2luZm9fb2JqWydsMWljYWNoZV9zaXplJ10gfSwNCisgICAgICAgICAgICB7 IGljb246ICcnLCBuYW1lOiAnTDIgY2FjaGUgc2l6ZScsIHZhbHVlOiBjcHVfaW5mb19vYmpbJ2wy Y2FjaGVfc2l6ZSddIH0sDQorICAgICAgICAgICAgeyBpY29uOiAnJywgbmFtZTogJ0wzIGNhY2hl IHNpemUnLCB2YWx1ZTogY3B1X2luZm9fb2JqWydsM2NhY2hlX3NpemUnXSB9LA0KKyAgICAgICAg ICBdOw0KKyAgICAgICAgICBzZXRDcHVTdGF0cyhjcHVfaW5mb19saXN0KTsNCisNCisgICAgICAg ICAgc2V0RXJyb3JNc2cobnVsbCk7DQorICAgICAgICB9KQ0KKyAgICAgICAgLmNhdGNoKChlcnJv cikgPT4gew0KKyAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOics IGVycm9yKTsNCisgICAgICAgIH0pOw0KKyAgICB9IGNhdGNoIChlcnJvcikgew0KKyAgICAgIGNv bnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGE6JywgZXJyb3IpOw0KKyAgICB9DQorICB9 LCBbc2lkLCBkaWQsIGVuYWJsZVBvbGwsIHBhZ2VWaXNpYmxlXSk7DQorDQorICB1c2VJbnRlcnZh bCgoKT0+ew0KKyAgICBjb25zdCBjdXJyRXBvY2ggPSBnZXRFcG9jaCgpOw0KKyAgICBpZihyZWZy ZXNoT24uY3VycmVudCA9PT0gbnVsbCkgew0KKyAgICAgIGxldCB0bXBSZWYgPSB7fTsNCisgICAg ICBPYmplY3Qua2V5cyhjaGFydHNEZWZhdWx0KS5mb3JFYWNoKChuYW1lKT0+ew0KKyAgICAgICAg dG1wUmVmW25hbWVdID0gY3VyckVwb2NoOw0KKyAgICAgIH0pOw0KKyAgICAgIHJlZnJlc2hPbi5j dXJyZW50ID0gdG1wUmVmOw0KKyAgICB9DQorDQorICAgIGxldCBnZXRGb3IgPSBbXTsNCisgICAg T2JqZWN0LmtleXMoY2hhcnRzRGVmYXVsdCkuZm9yRWFjaCgobmFtZSk9PnsNCisgICAgICBpZihj dXJyRXBvY2ggPj0gcmVmcmVzaE9uLmN1cnJlbnRbbmFtZV0pIHsNCisgICAgICAgIGdldEZvci5w dXNoKG5hbWUpOw0KKyAgICAgICAgcmVmcmVzaE9uLmN1cnJlbnRbbmFtZV0gPSBjdXJyRXBvY2gg KyBwcmVmZXJlbmNlc1tuYW1lKydfcmVmcmVzaCddOw0KKyAgICAgIH0NCisgICAgfSk7DQorDQor ICAgIGxldCBwYXRoID0gZ2V0U3RhdHNVcmwoc2lkLCBkaWQsIGdldEZvcik7DQorICAgIGlmICgh cGFnZVZpc2libGUpew0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBheGlvcy5nZXQocGF0 aCkNCisgICAgICAudGhlbigocmVzcCk9PnsNCisgICAgICAgIGxldCBkYXRhID0gcmVzcC5kYXRh Ow0KKyAgICAgICAgc2V0RXJyb3JNc2cobnVsbCk7DQorICAgICAgICBwcm9jZXNzSGFuZGxlQ291 bnRSZWR1Y2Uoe2luY29taW5nOiBkYXRhWydocGNfc3RhdHMnXX0pOw0KKw0KKyAgICAgICAgc2V0 Q291bnRlckRhdGEoKHByZXZDb3VudGVyRGF0YSk9PnsNCisgICAgICAgICAgcmV0dXJuIHsNCisg ICAgICAgICAgICAuLi5wcmV2Q291bnRlckRhdGEsDQorICAgICAgICAgICAgLi4uZGF0YSwNCisg ICAgICAgICAgfTsNCisgICAgICAgIH0pOw0KKyAgICAgIH0pDQorICAgICAgLmNhdGNoKChlcnJv cik9PnsNCisgICAgICAgIGlmKCFlcnJvck1zZykgew0KKyAgICAgICAgICBwcm9jZXNzSGFuZGxl Q291bnRSZWR1Y2Uoe3Jlc2V0OmNoYXJ0c0RlZmF1bHRbJ2hwY19zdGF0cyddfSk7DQorICAgICAg ICAgIHNldENvdW50ZXJEYXRhKHt9KTsNCisgICAgICAgICAgaWYoZXJyb3IucmVzcG9uc2UpIHsN CisgICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MjgpIHsNCisgICAg ICAgICAgICAgIHNldEVycm9yTXNnKGdldHRleHQoJ1BsZWFzZSBjb25uZWN0IHRvIHRoZSBzZWxl Y3RlZCBzZXJ2ZXIgdG8gdmlldyB0aGUgZ3JhcGguJykpOw0KKyAgICAgICAgICAgIH0gZWxzZSB7 DQorICAgICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdBbiBlcnJvciBvY2N1cnJlZCB3 aGlsc3QgcmVuZGVyaW5nIHRoZSBncmFwaC4nKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg ICB9IGVsc2UgaWYoZXJyb3IucmVxdWVzdCkgew0KKyAgICAgICAgICAgIHNldEVycm9yTXNnKGdl dHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlvbiB0byB0 aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKSk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAg ICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOw0KKyAg ICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgfSk7DQorICB9LCBlbmFibGVQb2xsID8gcG9s bERlbGF5IDogLTEpOw0KKw0KKyAgdXNlSW50ZXJ2YWwoKCk9PnsNCisgICAgLy8gbGV0IHVybDsN CisgICAgLy8gdXJsID0gdXJsX2ZvcignZGFzaGJvYXJkLnN5c3RlbV9zdGF0aXN0aWNzJyk7DQor ICAgIC8vIHVybCArPSAnLycgKyBzaWQ7DQorICAgIC8vIHVybCArPSBkaWQgPiAwID8gJy8nICsg ZGlkIDogJyc7DQorICAgIC8vIHVybCArPSAnP2NoYXJ0X25hbWVzPScgKyAncGlfc3RhdHMnOw0K KyAgICAvLyBheGlvcy5nZXQodXJsKQ0KKyAgICAvLyAgIC50aGVuKChyZXNwKT0+ew0KKyAgICAv LyAgICAgbGV0IGRhdGEgPSByZXNwLmRhdGE7DQorICAgIC8vICAgICBjb25zb2xlLmxvZygicGkg ZGF0YTogIiwgZGF0YSk7DQorICAgIC8vICAgfSkNCisgICAgLy8gICAuY2F0Y2goKGVycm9yKT0+ ew0KKyAgICAvLyAgICAgaWYoIWVycm9yTXNnKSB7DQorICAgIC8vICAgICAgIGlmKGVycm9yLnJl c3BvbnNlKSB7DQorICAgIC8vICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0g NDI4KSB7DQorICAgIC8vICAgICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdQbGVhc2UgY29u bmVjdCB0byB0aGUgc2VsZWN0ZWQgc2VydmVyIHRvIHZpZXcgdGhlIGdyYXBoLicpKTsNCisgICAg Ly8gICAgICAgICB9IGVsc2Ugew0KKyAgICAvLyAgICAgICAgICAgc2V0RXJyb3JNc2coZ2V0dGV4 dCgnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbHN0IHJlbmRlcmluZyB0aGUgZ3JhcGguJykpOw0KKyAg ICAvLyAgICAgICAgIH0NCisgICAgLy8gICAgICAgfSBlbHNlIGlmKGVycm9yLnJlcXVlc3QpIHsN CisgICAgLy8gICAgICAgICBzZXRFcnJvck1zZyhnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHRo ZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQu JykpOw0KKyAgICAvLyAgICAgICAgIHJldHVybjsNCisgICAgLy8gICAgICAgfSBlbHNlIHsNCisg ICAgLy8gICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsNCisgICAgLy8gICAgICAgfQ0KKyAg ICAvLyAgICAgfQ0KKyAgICAvLyAgIH0pOw0KKyAgfSwgZW5hYmxlUG9sbCA/IGxvbmdQb2xsRGVs YXkgOiAtMSk7DQorDQorICByZXR1cm4gKA0KKyAgICA8Pg0KKyAgICAgIDxkaXYgZGF0YS10ZXN0 aWQ9J2dyYXBoLXBvbGwtZGVsYXknIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0+e3BvbGxEZWxh eX08L2Rpdj4NCisgICAgICB7Y2hhcnREcmF3bk9uY2UgJiYNCisgICAgICAgIDxTdW1tYXJ5V3Jh cHBlcg0KKyAgICAgICAgICBwcm9jZXNzSGFuZGxlQ291bnQ9e3RyYW5zZm9ybURhdGEocHJvY2Vz c0hhbmRsZUNvdW50LCBwcmVmZXJlbmNlc1snaHBjX3N0YXRzX3JlZnJlc2gnXSl9DQorICAgICAg ICAgIG9zU3RhdHM9e29zU3RhdHN9DQorICAgICAgICAgIGNwdVN0YXRzPXtjcHVTdGF0c30NCisg ICAgICAgICAgcHJvY2Vzc0luZm9TdGF0cz17dHJhbnNmb3JtRGF0YShwcm9jZXNzSW5mb1N0YXRz LCA1KX0NCisgICAgICAgICAgdGFibGVIZWFkZXI9e3RhYmxlSGVhZGVyfQ0KKyAgICAgICAgICBl cnJvck1zZz17ZXJyb3JNc2d9DQorICAgICAgICAgIHNob3dUb29sdGlwPXtwcmVmZXJlbmNlc1sn Z3JhcGhfbW91c2VfdHJhY2snXX0NCisgICAgICAgICAgc2hvd0RhdGFQb2ludHM9e3ByZWZlcmVu Y2VzWydncmFwaF9kYXRhX3BvaW50cyddfQ0KKyAgICAgICAgICBsaW5lQm9yZGVyV2lkdGg9e3By ZWZlcmVuY2VzWydncmFwaF9saW5lX2JvcmRlcl93aWR0aCddfQ0KKyAgICAgICAgICBpc0RhdGFi YXNlPXtkaWQgPiAwfQ0KKyAgICAgICAgICBpc1Rlc3Q9e2ZhbHNlfQ0KKyAgICAgICAgLz4NCisg ICAgICB9DQorICAgIDwvPg0KKyAgKTsNCit9DQorDQorU3VtbWFyeS5wcm9wVHlwZXMgPSB7DQor ICBwcmVmZXJlbmNlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLA0KKyAgc2lkOiBQcm9w VHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5u dW1iZXIuaXNSZXF1aXJlZF0pLA0KKyAgZGlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlw ZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLA0KKyAg cGFnZVZpc2libGU6IFByb3BUeXBlcy5ib29sLA0KKyAgZW5hYmxlUG9sbDogUHJvcFR5cGVzLmJv b2wsDQorfTsNCisNCitleHBvcnQgZnVuY3Rpb24gU3VtbWFyeVdyYXBwZXIocHJvcHMpIHsNCisg IGNvbnN0IGNsYXNzZXMgPSB1c2VTdHlsZXMoKTsNCisgIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1v KCgpPT4oew0KKyAgICBzaG93RGF0YVBvaW50czogcHJvcHMuc2hvd0RhdGFQb2ludHMsDQorICAg IHNob3dUb29sdGlwOiBwcm9wcy5zaG93VG9vbHRpcCwNCisgICAgbGluZUJvcmRlcldpZHRoOiBw cm9wcy5saW5lQm9yZGVyV2lkdGgsDQorICB9KSwgW3Byb3BzLnNob3dUb29sdGlwLCBwcm9wcy5z aG93RGF0YVBvaW50cywgcHJvcHMubGluZUJvcmRlcldpZHRoXSk7DQorICByZXR1cm4gKA0KKyAg ICA8Pg0KKyAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsxfSBjbGFzc05hbWU9e2NsYXNz ZXMuY29udGFpbmVyfT4NCisgICAgICAgIDxHcmlkIGl0ZW0gbWQ9ezZ9IHNtPXsxMn0+DQorICAg ICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRhaW5lckhlYWRlcn0+e2dldHRleHQo J09TIEluZm9ybWF0aW9uJyl9PC9kaXY+DQorICAgICAgICAgIDxTdW1tYXJ5VGFibGUgZGF0YT17 cHJvcHMub3NTdGF0c30gLz4NCisgICAgICAgIDwvR3JpZD4NCisgICAgICAgIDxHcmlkIGl0ZW0g bWQ9ezZ9IHNtPXsxMn0+DQorICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRh aW5lckhlYWRlcn0+e2dldHRleHQoJ0hhbmRsZSAmIFByb2Nlc3MgQ291bnQnKX08L2Rpdj4NCisg ICAgICAgICAgPENoYXJ0Q29udGFpbmVyIGlkPSdocGMtZ3JhcGgnIHRpdGxlPXtnZXR0ZXh0KCcn KX0gZGF0YXNldHM9e3Byb3BzLnByb2Nlc3NIYW5kbGVDb3VudC5kYXRhc2V0c30gIGVycm9yTXNn PXtwcm9wcy5lcnJvck1zZ30gaXNUZXN0PXtwcm9wcy5pc1Rlc3R9Pg0KKyAgICAgICAgICAgIDxT dHJlYW1pbmdDaGFydCBkYXRhPXtwcm9wcy5wcm9jZXNzSGFuZGxlQ291bnR9IGRhdGFQb2ludFNp emU9e0RBVEFfUE9JTlRfU0laRX0geFJhbmdlPXtYX0FYSVNfTEVOR1RIfSBvcHRpb25zPXtvcHRp b25zfSBzaG93U2Vjb25kQXhpcz17dHJ1ZX0gLz4NCisgICAgICAgICAgPC9DaGFydENvbnRhaW5l cj4NCisgICAgICAgIDwvR3JpZD4NCisgICAgICA8L0dyaWQ+DQorICAgICAgPEdyaWQgY29udGFp bmVyIHNwYWNpbmc9ezF9IGNsYXNzTmFtZT17Y2xhc3Nlcy5jb250YWluZXJ9Pg0KKyAgICAgICAg PEdyaWQgaXRlbSBtZD17Nn0gc209ezEyfT4NCisgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ns YXNzZXMuY29udGFpbmVySGVhZGVyfT57Z2V0dGV4dCgnQ1BVIEluZm9ybWF0aW9uJyl9PC9kaXY+ DQorICAgICAgICAgIDxTdW1tYXJ5VGFibGUgZGF0YT17cHJvcHMuY3B1U3RhdHN9IC8+DQorICAg ICAgICA8L0dyaWQ+DQorICAgICAgICA8R3JpZCBpdGVtIG1kPXs2fSBzbT17MTJ9Pg0KKyAgICAg ICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5jb250YWluZXJIZWFkZXJ9PntnZXR0ZXh0KCdQ cm9jZXNzIEluZm9ybWF0aW9uJyl9PC9kaXY+DQorICAgICAgICAgIDxDaGFydENvbnRhaW5lciBp ZD0ncGktZ3JhcGgnIHRpdGxlPXtnZXR0ZXh0KCcnKX0gZGF0YXNldHM9e3Byb3BzLnByb2Nlc3NJ bmZvU3RhdHMuZGF0YXNldHN9ICBlcnJvck1zZz17cHJvcHMuZXJyb3JNc2d9IGlzVGVzdD17cHJv cHMuaXNUZXN0fT4NCisgICAgICAgICAgICA8RG9udXRDaGFydCBkYXRhPXtwcm9wcy5wcm9jZXNz SW5mb1N0YXRzLmRhdGFzZXRzfSAvPg0KKyAgICAgICAgICA8L0NoYXJ0Q29udGFpbmVyPg0KKyAg ICAgICAgPC9HcmlkPg0KKyAgICAgIDwvR3JpZD4NCisgICAgPC8+DQorICApOw0KK30NCisNCitT dW1tYXJ5V3JhcHBlci5wcm9wVHlwZXMgPSB7DQorICBwcm9jZXNzSGFuZGxlQ291bnQ6IFByb3BU eXBlcy5hbnkuaXNSZXF1aXJlZCwNCisgIG9zU3RhdHM6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJl ZCwNCisgIGNwdVN0YXRzOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsDQorICBwcm9jZXNzSW5m b1N0YXRzOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsDQorICB0YWJsZUhlYWRlcjogUHJvcFR5 cGVzLmFueS5pc1JlcXVpcmVkLA0KKyAgZXJyb3JNc2c6IFByb3BUeXBlcy5hbnksDQorICBzaG93 VG9vbHRpcDogUHJvcFR5cGVzLmJvb2wsDQorICBzaG93RGF0YVBvaW50czogUHJvcFR5cGVzLmJv b2wsDQorICBsaW5lQm9yZGVyV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsDQorICBpc0RhdGFiYXNl OiBQcm9wVHlwZXMuYm9vbCwNCisgIGlzVGVzdDogUHJvcFR5cGVzLmJvb2wsDQorfTsNCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVm YXVsdC9zeXN0ZW1fc3RhdGlzdGljcy5zcWwgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxh dGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC9zeXN0ZW1fc3RhdGlzdGljcy5zcWwNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAuLjkwMjRhMmM1ZQ0KLS0tIC9kZXYvbnVsbA0K KysrIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2RlZmF1 bHQvc3lzdGVtX3N0YXRpc3RpY3Muc3FsDQpAQCAtMCwwICsxLDEwMCBAQA0KK3slIHNldCBhZGRf dW5pb24gPSBmYWxzZSAlfQ0KK3slIGlmICdwZ19zeXNfb3NfaW5mbycgaW4gY2hhcnRfbmFtZXMg JX0NCit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQ0KKyAgICBTRUxFQ1QgJ3BnX3N5c19vc19p bmZvJyBBUyBjaGFydF9uYW1lLCBwZ19jYXRhbG9nLnJvd190b19qc29uKHQpIEFTIGNoYXJ0X2Rh dGENCisgICAgRlJPTSAoU0VMRUNUICogRlJPTSBwZ19zeXNfb3NfaW5mbygpKSB0DQoreyUgZW5k aWYgJX0NCit7JSBpZiBhZGRfdW5pb24gYW5kICdwZ19zeXNfY3B1X2luZm8nIGluIGNoYXJ0X25h bWVzICV9DQorICAgIFVOSU9OIEFMTA0KK3slIGVuZGlmICV9DQoreyUgaWYgJ3BnX3N5c19jcHVf aW5mbycgaW4gY2hhcnRfbmFtZXMgJX0NCit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQ0KKyAg ICBTRUxFQ1QgJ3BnX3N5c19jcHVfaW5mbycgQVMgY2hhcnRfbmFtZSwgcGdfY2F0YWxvZy5yb3df dG9fanNvbih0KSBBUyBjaGFydF9kYXRhDQorICAgIEZST00gKFNFTEVDVCAqIEZST00gcGdfc3lz X2NwdV9pbmZvKCkpIHQNCit7JSBlbmRpZiAlfQ0KK3slIGlmIGFkZF91bmlvbiBhbmQgJ2hwY19z dGF0cycgaW4gY2hhcnRfbmFtZXMgJX0NCisgICAgVU5JT04gQUxMDQoreyUgZW5kaWYgJX0NCit7 JSBpZiAnaHBjX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KK3slIHNldCBhZGRfdW5pb24gPSB0 cnVlICV9DQorICAgIFNFTEVDVCAnaHBjX3N0YXRzJyBBUyBjaGFydF9uYW1lLCBwZ19jYXRhbG9n LnJvd190b19qc29uKHQpIEFTIGNoYXJ0X2RhdGENCisgICAgRlJPTSAoU0VMRUNUDQorICAgICAg ICAoU0VMRUNUIGhhbmRsZV9jb3VudCBGUk9NIHBnX3N5c19vc19pbmZvKCkpICBBUyAie3sgXygn SGFuZGxlJykgfX0iLA0KKyAgICAgICAgKFNFTEVDVCBwcm9jZXNzX2NvdW50IEZST00gcGdfc3lz X29zX2luZm8oKSkgIEFTICJ7eyBfKCdQcm9jZXNzJykgfX0iDQorICAgICkgdA0KK3slIGVuZGlm ICV9DQoreyUgaWYgYWRkX3VuaW9uIGFuZCAnY3Vfc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9DQor ICAgIFVOSU9OIEFMTA0KK3slIGVuZGlmICV9DQoreyUgaWYgJ2N1X3N0YXRzJyBpbiBjaGFydF9u YW1lcyAlfQ0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9DQorICAgIFNFTEVDVCAnY3Vfc3Rh dHMnIEFTIGNoYXJ0X25hbWUsIHBnX2NhdGFsb2cucm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0 YQ0KKyAgICBGUk9NIChTRUxFQ1QgKiBGUk9NIHBnX3N5c19jcHVfdXNhZ2VfaW5mbygpKSB0DQor eyUgZW5kaWYgJX0NCit7JSBpZiBhZGRfdW5pb24gYW5kICdsYV9zdGF0cycgaW4gY2hhcnRfbmFt ZXMgJX0NCisgICAgVU5JT04gQUxMDQoreyUgZW5kaWYgJX0NCit7JSBpZiAnbGFfc3RhdHMnIGlu IGNoYXJ0X25hbWVzICV9DQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0NCisgICAgU0VMRUNU ICdsYV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSBBUyBj aGFydF9kYXRhIEZST00gKFNFTEVDVCAqIEZST00gcGdfc3lzX2xvYWRfYXZnX2luZm8oKSkgdA0K K3slIGVuZGlmICV9DQoreyUgaWYgYWRkX3VuaW9uIGFuZCAncGN1X3N0YXRzJyBpbiBjaGFydF9u YW1lcyAlfQ0KKyAgICBVTklPTiBBTEwNCit7JSBlbmRpZiAlfQ0KK3slIGlmICdwY3Vfc3RhdHMn IGluIGNoYXJ0X25hbWVzICV9DQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0NCisgICAgU0VM RUNUICdwY3Vfc3RhdHMnIEFTIGNoYXJ0X25hbWUsICgNCisgICAgU0VMRUNUIHRvX2pzb24ocGdf Y2F0YWxvZy5qc29uYl9vYmplY3RfYWdnKCdwcm9jZXNzJ3x8cm93X251bWJlciwgcGdfY2F0YWxv Zy5yb3dfdG9fanNvbih0KSkpDQorICAgIEZST00gKA0KKyAgICAgICAgU0VMRUNUIHBpZCwgbmFt ZSwgY3B1X3VzYWdlLCBST1dfTlVNQkVSKCkgT1ZFUiAoT1JERVIgQlkgcGlkKSBBUyByb3dfbnVt YmVyDQorICAgICAgICBGUk9NIHBnX3N5c19jcHVfbWVtb3J5X2J5X3Byb2Nlc3MoKQ0KKyAgICAp IHQNCisgICAgKSBBUyBjaGFydF9kYXRhDQoreyUgZW5kaWYgJX0NCit7JSBpZiBhZGRfdW5pb24g YW5kICdtX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KKyAgICBVTklPTiBBTEwNCit7JSBlbmRp ZiAlfQ0KK3slIGlmICdtX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KK3slIHNldCBhZGRfdW5p b24gPSB0cnVlICV9DQorICAgIFNFTEVDVCAnbV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcGdfY2F0 YWxvZy5yb3dfdG9fanNvbih0KSBBUyBjaGFydF9kYXRhIEZST00gKFNFTEVDVCB0b3RhbF9tZW1v cnksIHVzZWRfbWVtb3J5LCBmcmVlX21lbW9yeSBGUk9NIHBnX3N5c19tZW1vcnlfaW5mbygpKSB0 DQoreyUgZW5kaWYgJX0NCit7JSBpZiBhZGRfdW5pb24gYW5kICdzbV9zdGF0cycgaW4gY2hhcnRf bmFtZXMgJX0NCisgICAgVU5JT04gQUxMDQoreyUgZW5kaWYgJX0NCit7JSBpZiAnc21fc3RhdHMn IGluIGNoYXJ0X25hbWVzICV9DQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0NCisgICAgU0VM RUNUICdzbV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSBB UyBjaGFydF9kYXRhIEZST00gKFNFTEVDVCBzd2FwX3RvdGFsLCBzd2FwX3VzZWQsIHN3YXBfZnJl ZSBGUk9NIHBnX3N5c19tZW1vcnlfaW5mbygpKSB0DQoreyUgZW5kaWYgJX0NCit7JSBpZiBhZGRf dW5pb24gYW5kICdwbXVfc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9DQorICAgIFVOSU9OIEFMTA0K K3slIGVuZGlmICV9DQoreyUgaWYgJ3BtdV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0NCit7JSBz ZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQ0KKyAgICBTRUxFQ1QgJ3BtdV9zdGF0cycgQVMgY2hhcnRf bmFtZSwgKA0KKyAgICBTRUxFQ1QgdG9fanNvbihwZ19jYXRhbG9nLmpzb25iX29iamVjdF9hZ2co J3Byb2Nlc3MnfHxyb3dfbnVtYmVyLCBwZ19jYXRhbG9nLnJvd190b19qc29uKHQpKSkNCisgICAg RlJPTSAoDQorICAgICAgICBTRUxFQ1QgcGlkLCBuYW1lLCBtZW1vcnlfdXNhZ2UsIG1lbW9yeV9i eXRlcywgUk9XX05VTUJFUigpIE9WRVIgKE9SREVSIEJZIHBpZCkgQVMgcm93X251bWJlcg0KKyAg ICAgICAgRlJPTSBwZ19zeXNfY3B1X21lbW9yeV9ieV9wcm9jZXNzKCkNCisgICAgKSB0DQorICAg ICkgQVMgY2hhcnRfZGF0YQ0KK3slIGVuZGlmICV9DQoreyUgaWYgYWRkX3VuaW9uIGFuZCAnaW9f c3RhdHMnIGluIGNoYXJ0X25hbWVzICV9DQorICAgIFVOSU9OIEFMTA0KK3slIGVuZGlmICV9DQor eyUgaWYgJ2lvX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KK3slIHNldCBhZGRfdW5pb24gPSB0 cnVlICV9DQorICAgIFNFTEVDVCAnaW9fc3RhdHMnIEFTIGNoYXJ0X25hbWUsICgNCisgICAgU0VM RUNUIHRvX2pzb24ocGdfY2F0YWxvZy5qc29uYl9vYmplY3RfYWdnKCdkaXNrJ3x8cm93X251bWJl ciwgcGdfY2F0YWxvZy5yb3dfdG9fanNvbih0KSkpDQorICAgIEZST00gKA0KKyAgICAgICAgU0VM RUNUICosIFJPV19OVU1CRVIoKSBPVkVSIChPUkRFUiBCWSBkZXZpY2VfbmFtZSkgQVMgcm93X251 bWJlcg0KKyAgICAgICAgRlJPTSBwZ19zeXNfaW9fYW5hbHlzaXNfaW5mbygpDQorICAgICkgdA0K KyAgICApIEFTIGNoYXJ0X2RhdGENCit7JSBlbmRpZiAlfQ0KK3slIGlmIGFkZF91bmlvbiBhbmQg J3BpX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQ0KKyAgICBVTklPTiBBTEwNCit7JSBlbmRpZiAl fQ0KK3slIGlmICdwaV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0NCit7JSBzZXQgYWRkX3VuaW9u ID0gdHJ1ZSAlfQ0KKyAgICBTRUxFQ1QgJ3BpX3N0YXRzJyBBUyBjaGFydF9uYW1lLCBwZ19jYXRh bG9nLnJvd190b19qc29uKHQpIEFTIGNoYXJ0X2RhdGEgRlJPTSAoU0VMRUNUICogRlJPTSBwZ19z eXNfcHJvY2Vzc19pbmZvKCkpIHQNCit7JSBlbmRpZiAlfQ0KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlDQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2NvbXBvbmVudHMvUGdD aGFydC9Eb251dENoYXJ0LmpzeCBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9jb21wb25lbnRzL1Bn Q2hhcnQvRG9udXRDaGFydC5qc3gNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAuLjRkYTFkNDQzNQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pz L2NvbXBvbmVudHMvUGdDaGFydC9Eb251dENoYXJ0LmpzeA0KQEAgLTAsMCArMSw3MCBAQA0KK2lt cG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JzsNCitpbXBvcnQg Q2hhcnQgZnJvbSAnY2hhcnQuanMvYXV0byc7DQoraW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9w LXR5cGVzJzsNCisNCitleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb251dENoYXJ0KHsgZGF0YSB9 KSB7DQorICBjb25zdCBjaGFydFJlZiA9IHVzZVJlZihudWxsKTsNCisgIGNvbnN0IGNoYXJ0SW5z dGFuY2UgPSB1c2VSZWYobnVsbCk7DQorDQorICB1c2VFZmZlY3QoKCkgPT4gew0KKyAgICBpZiAo ZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7DQorICAgICAgaWYgKGNoYXJ0 SW5zdGFuY2UuY3VycmVudCkgew0KKyAgICAgICAgLy8gSWYgY2hhcnQgaW5zdGFuY2UgZXhpc3Rz LCB1cGRhdGUgdGhlIGRhdGENCisgICAgICAgIGNoYXJ0SW5zdGFuY2UuY3VycmVudC5kYXRhLmxh YmVscyA9IGRhdGEubWFwKChpdGVtKSA9PiBpdGVtLmxhYmVsKTsNCisgICAgICAgIGNoYXJ0SW5z dGFuY2UuY3VycmVudC5kYXRhLmRhdGFzZXRzWzBdLmRhdGEgPSBkYXRhLm1hcCgoaXRlbSkgPT4g aXRlbS5kYXRhKTsNCisgICAgICAgIGNoYXJ0SW5zdGFuY2UuY3VycmVudC51cGRhdGUoKTsNCisg ICAgICB9IGVsc2Ugew0KKyAgICAgICAgLy8gSWYgY2hhcnQgaW5zdGFuY2UgZG9lc24ndCBleGlz dCwgY3JlYXRlIGEgbmV3IGNoYXJ0DQorICAgICAgICBjb25zdCBjaGFydE9wdGlvbnMgPSB7DQor ICAgICAgICAgIHJlc3BvbnNpdmU6IHRydWUsDQorICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0 aW86IGZhbHNlLA0KKyAgICAgICAgICBwbHVnaW5zOiB7DQorICAgICAgICAgICAgbGVnZW5kOiB7 DQorICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSwgLy8gSGlkZSB0aGUgbGFiZWxzIGF0IHRo ZSB0b3ANCisgICAgICAgICAgICB9LA0KKyAgICAgICAgICB9LA0KKyAgICAgICAgICBhbmltYXRp b246IHsNCisgICAgICAgICAgICBkdXJhdGlvbjogMCwgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9u DQorICAgICAgICAgIH0sDQorICAgICAgICAgIHRvb2x0aXBzOiB7DQorICAgICAgICAgICAgY2Fs bGJhY2tzOiB7DQorICAgICAgICAgICAgICBsYWJlbDogZnVuY3Rpb24gKHRvb2x0aXBJdGVtLCBj aGFydERhdGEpIHsNCisgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldCA9IGNoYXJ0RGF0YS5k YXRhc2V0c1t0b29sdGlwSXRlbS5kYXRhc2V0SW5kZXhdOw0KKyAgICAgICAgICAgICAgICBjb25z dCB0b3RhbCA9IGRhdGFzZXQuZGF0YS5yZWR1Y2UoKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1 ZSkgPT4gcHJldmlvdXNWYWx1ZSArIGN1cnJlbnRWYWx1ZSk7DQorICAgICAgICAgICAgICAgIGNv bnN0IGN1cnJlbnRWYWx1ZSA9IGRhdGFzZXQuZGF0YVt0b29sdGlwSXRlbS5pbmRleF07DQorICAg ICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSAoKGN1cnJlbnRWYWx1ZSAvIHRvdGFsKSAq IDEwMCkudG9GaXhlZCgyKSArICclJzsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQu bGFiZWwgKyAnOiAnICsgY3VycmVudFZhbHVlICsgJyAoJyArIHBlcmNlbnRhZ2UgKyAnKSc7DQor ICAgICAgICAgICAgICB9LA0KKyAgICAgICAgICAgIH0sDQorICAgICAgICAgIH0sDQorICAgICAg ICB9Ow0KKw0KKyAgICAgICAgY29uc3QgY2hhcnREYXRhID0gew0KKyAgICAgICAgICBsYWJlbHM6 IGRhdGEubWFwKChpdGVtKSA9PiBpdGVtLmxhYmVsKSwNCisgICAgICAgICAgZGF0YXNldHM6IFsN CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBkYXRhOiBkYXRhLm1hcCgoaXRlbSkgPT4g aXRlbS5kYXRhKSwNCisgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogZGF0YS5tYXAoKGl0 ZW0pID0+IGl0ZW0uYm9yZGVyQ29sb3IpLA0KKyAgICAgICAgICAgICAgaG92ZXJCYWNrZ3JvdW5k Q29sb3I6IGRhdGEubWFwKChpdGVtKSA9PiBpdGVtLmJvcmRlckNvbG9yKSwNCisgICAgICAgICAg ICB9LA0KKyAgICAgICAgICBdLA0KKyAgICAgICAgfTsNCisNCisgICAgICAgIGNvbnN0IGN0eCA9 IGNoYXJ0UmVmLmN1cnJlbnQuZ2V0Q29udGV4dCgnMmQnKTsNCisgICAgICAgIGNoYXJ0SW5zdGFu Y2UuY3VycmVudCA9IG5ldyBDaGFydChjdHgsIHsNCisgICAgICAgICAgdHlwZTogJ2RvdWdobnV0 JywNCisgICAgICAgICAgZGF0YTogY2hhcnREYXRhLA0KKyAgICAgICAgICBvcHRpb25zOiBjaGFy dE9wdGlvbnMsDQorICAgICAgICB9KTsNCisgICAgICB9DQorICAgIH0NCisgIH0sIFtkYXRhXSk7 DQorDQorICByZXR1cm4gKA0KKyAgICA8Y2FudmFzIHJlZj17Y2hhcnRSZWZ9IC8+DQorICApOw0K K30NCisNCitEb251dENoYXJ0LnByb3BUeXBlcyA9IHsNCisgIGRhdGE6IFByb3BUeXBlcy5hcnJh eS5pc1JlcXVpcmVkLA0KK307DQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWluZ0No YXJ0LmpzeCBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvU3RyZWFt aW5nQ2hhcnQuanN4DQppbmRleCBiZDQ2NWUzZGEuLjVjY2ZlMzQ2NCAxMDA2NDQNCi0tLSBhL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy9jb21wb25lbnRzL1BnQ2hhcnQvU3RyZWFtaW5nQ2hhcnQuanN4 DQorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvY29tcG9uZW50cy9QZ0NoYXJ0L1N0cmVhbWlu Z0NoYXJ0LmpzeA0KQEAgLTMyLDcgKzMyLDcgQEAgZnVuY3Rpb24gdG9vbHRpcFBsdWdpbihyZWZy ZXNoUmF0ZSkgew0KICAgICBzaG93VG9vbHRpcCgpOw0KICAgICBsZXQgdG9vbHRpcEh0bWw9YDxk aXY+JHsodS5kYXRhWzFdLmxlbmd0aC0xLXBhcnNlSW50KHUubGVnZW5kLnZhbHVlc1swXVsnXydd KSkgKiByZWZyZXNoUmF0ZSArIGdldHRleHQoJyBzZWNvbmRzIGFnbycpfTwvZGl2PmA7DQogICAg IGZvcihsZXQgaT0xOyBpPHUuc2VyaWVzLmxlbmd0aDsgaSsrKSB7DQotICAgICAgdG9vbHRpcEh0 bWwgKz0gYDxkaXYgY2xhc3M9InVwbG90LXRvb2x0aXAtbGFiZWwiPjxkaXYgc3R5bGU9ImhlaWdo dDoxMnB4OyB3aWR0aDoxMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiR7dS5zZXJpZXNbaV0uc3Ryb2tl KCl9Ij48L2Rpdj4gJHt1LnNlcmllc1tpXS5sYWJlbH06ICR7dS5sZWdlbmQudmFsdWVzW2ldWydf J119PC9kaXY+YDsNCisgICAgICB0b29sdGlwSHRtbCArPSBgPGRpdiBjbGFzcz0ndXBsb3QtdG9v bHRpcC1sYWJlbCc+PGRpdiBzdHlsZT0naGVpZ2h0OjEycHg7IHdpZHRoOjEycHg7IGJhY2tncm91 bmQtY29sb3I6JHt1LnNlcmllc1tpXS5zdHJva2UoKX0nPjwvZGl2PiAke3Uuc2VyaWVzW2ldLmxh YmVsfTogJHt1LmxlZ2VuZC52YWx1ZXNbaV1bJ18nXX08L2Rpdj5gOw0KICAgICB9DQogICAgIHRv b2x0aXAuaW5uZXJIVE1MID0gdG9vbHRpcEh0bWw7DQogDQpAQCAtNTgsNDQgKzU4LDMyIEBAIGZ1 bmN0aW9uIHRvb2x0aXBQbHVnaW4ocmVmcmVzaFJhdGUpIHsNCiAgIH07DQogfQ0KIA0KLWV4cG9y dCBkZWZhdWx0IGZ1bmN0aW9uIFN0cmVhbWluZ0NoYXJ0KHt4UmFuZ2U9NzUsIGRhdGEsIG9wdGlv bnN9KSB7DQorZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3RyZWFtaW5nQ2hhcnQoe3hSYW5nZT03 NSwgZGF0YSwgb3B0aW9ucywgc2hvd1NlY29uZEF4aXM9ZmFsc2V9KSB7DQogICBjb25zdCBjaGFy dFJlZiA9IHVzZVJlZigpOw0KICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpOw0KICAgY29uc3Qg eyB3aWR0aCwgaGVpZ2h0LCByZWY6Y29udGFpbmVyUmVmIH0gPSB1c2VSZXNpemVEZXRlY3Rvcigp Ow0KLSAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB1c2VNZW1vKCgpPT4oew0KLSAgICB0aXRsZTog JycsDQotICAgIHdpZHRoOiB3aWR0aCwNCi0gICAgaGVpZ2h0OiBoZWlnaHQsDQotICAgIHBhZGRp bmc6IFsxMCwgMCwgMTAsIDBdLA0KLSAgICBmb2N1czogew0KLSAgICAgIGFscGhhOiAwLjMsDQot ICAgIH0sDQotICAgIGN1cnNvcjogew0KLSAgICAgIHk6IGZhbHNlLA0KLSAgICAgIGRyYWc6IHsN Ci0gICAgICAgIHNldFNjYWxlOiBmYWxzZSwNCi0gICAgICB9DQotICAgIH0sDQotICAgIHNlcmll czogWw0KKyAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB1c2VNZW1vKCgpPT4gew0KKyAgICBjb25z dCBzZXJpZXMgPSBbDQogICAgICAge30sDQotICAgICAgLi4uKGRhdGEuZGF0YXNldHM/Lm1hcCgo ZGF0dW0pPT4oew0KKyAgICAgIC4uLihkYXRhLmRhdGFzZXRzPy5tYXAoKGRhdHVtLCBpbmRleCkg PT4gKHsNCiAgICAgICAgIGxhYmVsOiBkYXR1bS5sYWJlbCwNCiAgICAgICAgIHN0cm9rZTogZGF0 dW0uYm9yZGVyQ29sb3IsDQogICAgICAgICB3aWR0aDogb3B0aW9ucy5saW5lQm9yZGVyV2lkdGgg Pz8gMSwNCi0gICAgICAgIHBvaW50czogeyBzaG93OiBvcHRpb25zLnNob3dEYXRhUG9pbnRzID8/ IGZhbHNlLCBzaXplOiBkYXR1bS5wb2ludEhpdFJhZGl1cyoyIH0NCi0gICAgICB9KSk/P3t9KQ0K LSAgICBdLA0KLSAgICBzY2FsZXM6IHsNCi0gICAgICB4OiB7DQotICAgICAgICB0aW1lOiBmYWxz ZSwNCi0gICAgICB9DQotICAgIH0sDQotICAgIGF4ZXM6IFsNCisgICAgICAgIHNjYWxlOiBzaG93 U2Vjb25kQXhpcyAmJiAoaW5kZXggPT09IDEpID8gJ3kxJyA6ICd5JywNCisgICAgICAgIHBvaW50 czogeyBzaG93OiBvcHRpb25zLnNob3dEYXRhUG9pbnRzID8/IGZhbHNlLCBzaXplOiBkYXR1bS5w b2ludEhpdFJhZGl1cyAqIDIgfSwNCisgICAgICB9KSkgPz8gW10pLA0KKyAgICBdOw0KKw0KKyAg ICBjb25zdCBheGVzID0gWw0KICAgICAgIHsNCiAgICAgICAgIHNob3c6IGZhbHNlLA0KICAgICAg ICAgc3Ryb2tlOiB0aGVtZS5wYWxldHRlLnRleHQucHJpbWFyeSwNCiAgICAgICB9LA0KLSAgICAg IHsNCisgICAgXTsNCisNCisgICAgaWYoc2hvd1NlY29uZEF4aXMpew0KKyAgICAgIGF4ZXMucHVz aCh7DQorICAgICAgICBzY2FsZTogJ3knLA0KICAgICAgICAgZ3JpZDogew0KICAgICAgICAgICBz dHJva2U6IHRoZW1lLm90aGVyVmFycy5ib3JkZXJDb2xvciwNCiAgICAgICAgICAgd2lkdGg6IDAu NSwNCkBAIC0xMDgsMTEgKzk2LDEwNCBAQCBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHJlYW1p bmdDaGFydCh7eFJhbmdlPTc1LCBkYXRhLCBvcHRpb25zfSkgew0KICAgICAgICAgICAgIGlmKHNp emUgPCA0MCkgc2l6ZSA9IDQwOw0KICAgICAgICAgICB9DQogICAgICAgICAgIHJldHVybiBzaXpl Ow0KKyAgICAgICAgfSwNCisgICAgICAgIC8vIHktYXhpcyBjb25maWd1cmF0aW9uDQorICAgICAg ICB2YWx1ZXM6IChzZWxmLCB0aWNrcykgPT4gew0KKyAgICAgICAgICAvLyBGb3JtYXQgdGhlIGxh YmVsDQorICAgICAgICAgIHJldHVybiB0aWNrcy5tYXAoKHZhbHVlKSA9PiB7DQorICAgICAgICAg ICAgaWYodmFsdWUgPCAxKXsNCisgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSsnJzsNCisgICAg ICAgICAgICB9DQorICAgICAgICAgICAgY29uc3Qgc3VmZml4ZXMgPSBbJycsICdrJywgJ00nLCAn QicsICdUJ107DQorICAgICAgICAgICAgY29uc3Qgc3VmZml4TnVtID0gTWF0aC5mbG9vcihNYXRo LmxvZzEwKHZhbHVlKSAvIDMpOw0KKyAgICAgICAgICAgIGNvbnN0IHNob3J0VmFsdWUgPSAodmFs dWUgLyBNYXRoLnBvdygxMDAwLCBzdWZmaXhOdW0pKS50b0ZpeGVkKDEpOw0KKyAgICAgICAgICAg IHJldHVybiBzaG9ydFZhbHVlICsgc3VmZml4ZXNbc3VmZml4TnVtXTsNCisgICAgICAgICAgfSk7 DQorICAgICAgICB9DQorICAgICAgfSk7DQorICAgICAgYXhlcy5wdXNoKHsNCisgICAgICAgIHNj YWxlOiAneTEnLA0KKyAgICAgICAgc2lkZTogMSwNCisgICAgICAgIHN0cm9rZTogdGhlbWUucGFs ZXR0ZS50ZXh0LnByaW1hcnksDQorICAgICAgICBncmlkOiB7c2hvdzogZmFsc2V9LA0KKyAgICAg ICAgc2l6ZTogZnVuY3Rpb24oX29iaiwgdmFsdWVzKSB7DQorICAgICAgICAgIGxldCBzaXplID0g NDA7DQorICAgICAgICAgIGlmKHZhbHVlcz8ubGVuZ3RoID4gMCkgew0KKyAgICAgICAgICAgIHNp emUgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aC0xXS5sZW5ndGgqMTI7DQorICAgICAgICAgICAgaWYo c2l6ZSA8IDQwKSBzaXplID0gNDA7DQorICAgICAgICAgIH0NCisgICAgICAgICAgcmV0dXJuIHNp emU7DQorICAgICAgICB9LA0KKyAgICAgICAgLy8geS1heGlzIGNvbmZpZ3VyYXRpb24NCisgICAg ICAgIHZhbHVlczogKHNlbGYsIHRpY2tzKSA9PiB7DQorICAgICAgICAgIC8vIEZvcm1hdCB0aGUg bGFiZWwNCisgICAgICAgICAgcmV0dXJuIHRpY2tzLm1hcCgodmFsdWUpID0+IHsNCisgICAgICAg ICAgICBpZih2YWx1ZSA8IDEpew0KKyAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKycnOw0KKyAg ICAgICAgICAgIH0NCisgICAgICAgICAgICBjb25zdCBzdWZmaXhlcyA9IFsnJywgJ2snLCAnTScs ICdCJywgJ1QnXTsNCisgICAgICAgICAgICBjb25zdCBzdWZmaXhOdW0gPSBNYXRoLmZsb29yKE1h dGgubG9nMTAodmFsdWUpIC8gMyk7DQorICAgICAgICAgICAgY29uc3Qgc2hvcnRWYWx1ZSA9ICh2 YWx1ZSAvIE1hdGgucG93KDEwMDAsIHN1ZmZpeE51bSkpLnRvRml4ZWQoMSk7DQorICAgICAgICAg ICAgcmV0dXJuIHNob3J0VmFsdWUgKyBzdWZmaXhlc1tzdWZmaXhOdW1dOw0KKyAgICAgICAgICB9 KTsNCiAgICAgICAgIH0NCi0gICAgICB9DQotICAgIF0sDQotICAgIHBsdWdpbnM6IG9wdGlvbnMu c2hvd1Rvb2x0aXAgPyBbdG9vbHRpcFBsdWdpbihkYXRhLnJlZnJlc2hSYXRlKV0gOiBbXSwNCi0g IH0pLCBbZGF0YS5yZWZyZXNoUmF0ZSwgZGF0YT8uZGF0YXNldHM/Lmxlbmd0aCwgd2lkdGgsIGhl aWdodCwgb3B0aW9uc10pOw0KKyAgICAgIH0pOw0KKyAgICB9IGVsc2V7DQorICAgICAgYXhlcy5w dXNoKHsNCisgICAgICAgIHNjYWxlOiAneScsDQorICAgICAgICBncmlkOiB7DQorICAgICAgICAg IHN0cm9rZTogdGhlbWUub3RoZXJWYXJzLmJvcmRlckNvbG9yLA0KKyAgICAgICAgICB3aWR0aDog MC41LA0KKyAgICAgICAgfSwNCisgICAgICAgIHN0cm9rZTogdGhlbWUucGFsZXR0ZS50ZXh0LnBy aW1hcnksDQorICAgICAgICBzaXplOiBmdW5jdGlvbihfb2JqLCB2YWx1ZXMpIHsNCisgICAgICAg ICAgbGV0IHNpemUgPSA0MDsNCisgICAgICAgICAgaWYodmFsdWVzPy5sZW5ndGggPiAwKSB7DQor ICAgICAgICAgICAgc2l6ZSA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoLTFdLmxlbmd0aCoxMjsNCisg ICAgICAgICAgICBpZihzaXplIDwgNDApIHNpemUgPSA0MDsNCisgICAgICAgICAgfQ0KKyAgICAg ICAgICByZXR1cm4gc2l6ZTsNCisgICAgICAgIH0sDQorICAgICAgICAvLyB5LWF4aXMgY29uZmln dXJhdGlvbg0KKyAgICAgICAgdmFsdWVzOiAoc2VsZiwgdGlja3MpID0+IHsNCisgICAgICAgICAg Ly8gRm9ybWF0IHRoZSBsYWJlbA0KKyAgICAgICAgICByZXR1cm4gdGlja3MubWFwKCh2YWx1ZSkg PT4gew0KKyAgICAgICAgICAgIGlmKHZhbHVlIDwgMSl7DQorICAgICAgICAgICAgICByZXR1cm4g dmFsdWUrJyc7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGNvbnN0IHN1ZmZpeGVzID0g WycnLCAnaycsICdNJywgJ0InLCAnVCddOw0KKyAgICAgICAgICAgIGNvbnN0IHN1ZmZpeE51bSA9 IE1hdGguZmxvb3IoTWF0aC5sb2cxMCh2YWx1ZSkgLyAzKTsNCisgICAgICAgICAgICBjb25zdCBz aG9ydFZhbHVlID0gKHZhbHVlIC8gTWF0aC5wb3coMTAwMCwgc3VmZml4TnVtKSkudG9GaXhlZCgx KTsNCisgICAgICAgICAgICByZXR1cm4gc2hvcnRWYWx1ZSArIHN1ZmZpeGVzW3N1ZmZpeE51bV07 DQorICAgICAgICAgIH0pOw0KKyAgICAgICAgfQ0KKyAgICAgIH0pOw0KKyAgICB9DQorDQorICAg IHJldHVybiB7DQorICAgICAgdGl0bGU6ICcnLA0KKyAgICAgIHdpZHRoOiB3aWR0aCwNCisgICAg ICBoZWlnaHQ6IGhlaWdodCwNCisgICAgICBwYWRkaW5nOiBbMTAsIDAsIDEwLCAwXSwNCisgICAg ICBmb2N1czogew0KKyAgICAgICAgYWxwaGE6IDAuMywNCisgICAgICB9LA0KKyAgICAgIGN1cnNv cjogew0KKyAgICAgICAgeTogZmFsc2UsDQorICAgICAgICBkcmFnOiB7DQorICAgICAgICAgIHNl dFNjYWxlOiBmYWxzZSwNCisgICAgICAgIH0NCisgICAgICB9LA0KKyAgICAgIHNlcmllczogc2Vy aWVzLA0KKyAgICAgIHNjYWxlczogew0KKyAgICAgICAgeDogew0KKyAgICAgICAgICB0aW1lOiBm YWxzZSwNCisgICAgICAgIH0NCisgICAgICB9LA0KKyAgICAgIGF4ZXM6IGF4ZXMsDQorICAgICAg cGx1Z2luczogb3B0aW9ucy5zaG93VG9vbHRpcCA/IFt0b29sdGlwUGx1Z2luKGRhdGEucmVmcmVz aFJhdGUpXSA6IFtdLA0KKyAgICB9Ow0KKyAgfSwgW2RhdGEucmVmcmVzaFJhdGUsIGRhdGE/LmRh dGFzZXRzPy5sZW5ndGgsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnNdKTsNCiANCiAgIGNvbnN0IGlu aXRpYWxTdGF0ZSA9IFsNCiAgICAgQXJyYXkuZnJvbShuZXcgQXJyYXkoeFJhbmdlKS5rZXlzKCkp LA0KQEAgLTE0MCw0ICsyMjEsNSBAQCBTdHJlYW1pbmdDaGFydC5wcm9wVHlwZXMgPSB7DQogICB4 UmFuZ2U6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwNCiAgIGRhdGE6IHByb3BUeXBlRGF0 YS5pc1JlcXVpcmVkLA0KICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCwNCisgIHNob3dTZWNv bmRBeGlzOiBQcm9wVHlwZXMuYm9vbCwNCiB9Ow0K --000000000000de6e3f060303b684--