Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1akSiu-0003Yi-Nw for pgadmin-hackers@arkaria.postgresql.org; Mon, 28 Mar 2016 08:40:33 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1akSis-0002tm-MD for pgadmin-hackers@arkaria.postgresql.org; Mon, 28 Mar 2016 08:40:30 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1akSin-0002tc-EC for pgadmin-hackers@postgresql.org; Mon, 28 Mar 2016 08:40:26 +0000 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1akSie-0000TC-RG for pgadmin-hackers@postgresql.org; Mon, 28 Mar 2016 08:40:24 +0000 Received: by mail-wm0-x232.google.com with SMTP id p65so91290093wmp.1 for ; Mon, 28 Mar 2016 01:40:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Ek3sJBq6eW0r9xA/SxbmxsBFdVLGyWJtPSBb+3a8jsg=; b=tI7o092D2HmGiYKgwvG97T0vG55uSOyrIxi55G1y+XcEAjY6vjDcGN6IBW4cLehtmB URtih1qRnnM57lYb4FTieEL3+JZa6VleHMxnzv4eVFXRYx+TXZw+xf8kqDopx14bUJF/ BeiAO3lRVAEWq7ktqY/mPTtIpMW4Vj769DlibbOOG55uYjcQPNJjd5o+Zv9tz3dDDnQ0 nJm3Joc/6JLk/zq+P1h7pck9doP0kdP5ZHgvOvdFJ7J6tfDqAQ/NRupmLi6iyECM7Alr fZjEy3AdS+u/ydaCo13CAoPeuxPEIgB4C11F05+MGNfyj/9VoDrD1/FXZniSTfn11BMJ Zqrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Ek3sJBq6eW0r9xA/SxbmxsBFdVLGyWJtPSBb+3a8jsg=; b=dS1VcoNQqLmsm4/X7F9mLcy8KNV2f8yGwpLDNS7JPq6gq5jDRd/KrAbUmO0qdmk6R+ o/DBt1NR1yEf3VYlR5qe9W9FegX+g8UCAc9WP0+7ZgU0l7a5cB4FhRUsc43DkmhFhxPS SQGqZcN1fGLyb7yFhl3Q84m7ryMGNWDu3ygp1MrE0zu5nz8hJZRm+y+oBsV2ctOkil3I CkBEj/Ho2oGSSllIowBvKY19suj743B5exrJL8fgkhhYZo8/frdQLjVu2jH4xS0C0wPZ GVGO3farNPHJiuklrgMX0yJYuwMFglQS1GSmsWZuu5pYcuAxxdaQq8JybkXAjmw4dmGd cDNw== X-Gm-Message-State: AD7BkJKwF+ygDu74M93amFQkt4nvdNuN3nOrUn+Bn3C9FqodsxME/4IqEEoTy1/QIm0AacJppEOL5d9ORpLPh8RW X-Received: by 10.194.95.73 with SMTP id di9mr30016654wjb.152.1459154413743; Mon, 28 Mar 2016 01:40:13 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.55.74 with HTTP; Mon, 28 Mar 2016 01:39:43 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Mon, 28 Mar 2016 14:09:43 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch]: Grant Wizard To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=047d7bdc8f7081919a052f17dc91 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --047d7bdc8f7081919a052f17dc91 Content-Type: multipart/alternative; boundary=047d7bdc8f70819196052f17dc8f --047d7bdc8f70819196052f17dc8f Content-Type: text/plain; charset=UTF-8 Hi Dave, Please find updated patch with suggested changes. On Thu, Mar 10, 2016 at 5:26 PM, Dave Page wrote: > On Thu, Mar 10, 2016 at 9:50 AM, Surinder Kumar > wrote: > > Please apply Khusboo's patch for "Privileges macros under Schema" before > > using grant wizard patch. > > Thanks, that works. Some (hopefully final) feedback: > > - Can we add a side-image? Not sure what yet - just a placeholder for > now until I come up with something. > Already a placeholder for left side image. > > - Why is the closed button in an odd position (see File -> Test Alert > for comparison) > Fixed > > - Why are we using a scrolling list AND pagination? I think a > scrolling list alone should be fine. > Pagination is removed. > > - The grid sizing is wrong. See how the scrollbar on the right in the > screenshot is off the edge of the dialogue, and there's a horizontal > scrollbar? > Fixed. > > - We shouldn't truncate object names as that can be ambiguous. The > column should extend as necessary, and there should be a horizontal > scrollbar on the grid itself (not at the bottom of the dialogue > content). > I have fixed it and scrollbar is now on the grid itself. > > - Function names should include the parameters, as they are part of > the identifier. Without, it can be ambigous - e.g. do_stuff(int) vs. > do_stuff(text). > Fixed. > > - If I select only functions (for example), the Privileges panel > should only list privileges available for functions. If I select > multiple object types, it should show the available options for only > those object types. > Implemented this feature. > > - If I select functions and tables, and then choose (for example), > usage and truncate, it will attempt to set usage on tables and > truncate on functions. It should only attempt to set privileges on the > objects for which they are appropriate. > Done > > - On the last page, the Next button is disabled. It is turned a > marginally darker blue, but also highlights on mouse-over. The change > in shade is so subtle it's hard to see, and the highlight implies the > button is active when it isn't. > Fixed. > > - The buttons appear to have a smaller corner radius than those on the > main browser, or in other dialogues. > Fixed. > > - Button labels should have an   before them to properly space > the label from the icon (or better yet, this should be done in CSS, > though that would also need to be done elsewhere). > done with css. > > - Why do the URLs have a /wizard prefix? I think that should be removed. > Removed prefix. > > - The available privileges for each object type seem to be defined in > both grant_wizard.js and allowed_acl.json. Can we just use > allowed_acl.json? > Yes, allowed_acl.json is now used in grant_wizard.js. > > Thanks. > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > --047d7bdc8f70819196052f17dc8f Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Dave,

Please find updated patch with= suggested changes.

On Thu, Mar 10, 2016 at 5:26 PM, Dave Page &= lt;dpage@pgadmin.org= > wrote:
On Thu, Mar 10, 2016 at 9:= 50 AM, Surinder Kumar
<su= rinder.kumar@enterprisedb.com> wrote:
> Please apply Khusboo's patch for "Privileges macros under Sch= ema" before
> using grant wizard patch.

Thanks, that works. Some (hopefully final) feedback:

- Can we add a side-image? Not sure what yet - just a placeholder for
now until I come up with something.
Already a placehol= der for left side image.

- Why is the closed button in an odd position (see File -> Test Alert
for comparison)
Fixed=C2=A0

- Why are we using a scrolling list AND pagination? I think a
scrolling list alone should be fine.
Pagination is rem= oved.=C2=A0

- The grid sizing is wrong. See how the scrollbar on the right in the
screenshot is off the edge of the dialogue, and there's a horizontal
scrollbar?
Fixed.

- We shouldn't truncate object names as that can be ambiguous. The
column should extend as necessary, and there should be a horizontal
scrollbar on the grid itself (not at the bottom of the dialogue
content).
I have fixed it and scrollbar is now on the = grid itself.

- Function names should include the parameters, as they are part of
the identifier. Without, it can be ambigous - e.g. do_stuff(int) vs.
do_stuff(text).
Fixed.=C2=A0

- If I select only functions (for example), the Privileges panel
should only list privileges available for functions. If I select
multiple object types, it should show the available options for only
those object types.
Implemented this feature.=C2=A0

- If I select functions and tables, and then choose (for example),
usage and truncate, it will attempt to set usage on tables and
truncate on functions. It should only attempt to set privileges on the
objects for which they are appropriate.
Done=C2=A0

- On the last page, the Next button is disabled. It is turned a
marginally darker blue, but also highlights on mouse-over. The change
in shade is so subtle it's hard to see, and the highlight implies the button is active when it isn't.
Fixed.=C2=A0
=

- The buttons appear to have a smaller corner radius than those on the
main browser, or in other dialogues.
Fixed.=C2=A0

- Button labels should have an &nbsp; before them to properly space
the label from the icon (or better yet, this should be done in CSS,
though that would also need to be done elsewhere).
don= e with css.=C2=A0

- Why do the URLs have a /wizard prefix? I think that should be removed.
Removed prefix.=C2=A0

- The available privileges for each object type seem to be defined in
both grant_wizard.js and allowed_acl.json. Can we just use
allowed_acl.json?
Yes, allowed_acl.json is now used in= grant_wizard.js.

Thanks.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--047d7bdc8f70819196052f17dc8f-- --047d7bdc8f7081919a052f17dc91 Content-Type: application/octet-stream; name="grant_wizard_v5.patch" Content-Disposition: attachment; filename="grant_wizard_v5.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imbqvs7q0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2Nzcy93 aXphcmQuY3NzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvY3NzL3dp emFyZC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u Y2E2MTdiNgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc3RhdGljL2Nzcy93aXphcmQuY3NzCkBAIC0wLDAgKzEsMTQ4IEBACisK Ky8qKiBDU1MgZm9yIFdpemFyZCAqKi8KKy5hanMtY29udGVudCB7CisgIHBh ZGRpbmctdG9wOiAwcHggIWltcG9ydGFudDsKK30KKworLyogV2l6YXJkIEhl YWRlciBDU1MgKi8KKy5hbGVydGlmeSAuYWpzLWRpYWxvZyAuYWpzLWNsb3Nl IHsKKyAgbWFyZ2luLXRvcDogMTVweDsKK30KKworLndpemFyZC1oZWFkZXIg eworICBiYWNrZ3JvdW5kOiAjNDI4YmNhOworICBwYWRkaW5nLWxlZnQ6IDE1 cHg7CisgIHBhZGRpbmctYm90dG9tOiA3cHg7CisgIGNvbG9yOiAjZmZmOwor ICBmb250LXNpemU6IDE4cHg7CisgIGhlaWdodDogNzZweDsKKyAgbGluZS1o ZWlnaHQ6IDc2cHg7CisgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwor fQorCisud2l6YXJkLWhlYWRlciBoMyB7CisgIGZvbnQtc2l6ZTogMThweDsK KyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisud2l6YXJkX2RsZyB7 CisgIGZsb2F0OiBsZWZ0OworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAx MDAlOworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciB7CisJcG9zaXRp b246IHJlbGF0aXZlOworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAl OworfQorCisucGdhZG1pbi13aXphcmQgeworICB3aWR0aDogMTAwJTsKKyAg aGVpZ2h0OiAxMDAlOworfQorCisud2l6YXJkLWNvbnRlbnQgeworICBwb3Np dGlvbjogcmVsYXRpdmU7CisgIHBhZGRpbmc6IDA7CisgIGhlaWdodDogNjQl OworfQorCisud2l6YXJkLXJpZ2h0LXBhbmVsIHsKKyAgb3ZlcmZsb3cteTog YXV0bzsKKyAgaGVpZ2h0OiAxMDAlOworICB0b3A6IDA7CisgIHJpZ2h0OiAw OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMDsKK30KKwor LndpemFyZC1sZWZ0LXBhbmVsIHsKKyAgcG9zaXRpb246IGFic29sdXRlOwor ICB0b3A6IDA7CisgIGRpc3BsYXk6IGZsZXg7CisgIGJvdHRvbTogMDsKKyAg bGVmdDogMDsKKyAgYWxpZ24taXRlbXM6IGNlbnRlcjsKKyAganVzdGlmeS1j b250ZW50OiBjZW50ZXI7CisgIHJpZ2h0OiAwOworfQorCisud2l6YXJkLWxl ZnQtcGFuZWwgaW1nIHsKKyAgd2lkdGg6IDE0MHB4OworfQorCisud2l6YXJk LXJpZ2h0LXBhbmVsX2NvbnRlbnQgeworCWhlaWdodDogNjAlOworfQorCisu c2VsZWN0X2RiX29iamVjdHNfY29udGFpbmVyIHsKKyAgaGVpZ2h0OiAxMDAl OworfQorCisvKiBXaXphcmQgRm9vdGVyIENTUyAqLworLmZvb3RlciB7Cisg IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAg Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CisgIGJvdHRvbTogMHB4Owor ICBoZWlnaHQ6IDYycHg7CisgIHJpZ2h0OiAwcHg7CisgIHBhZGRpbmctdG9w OiAyMnB4OworICBib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDsKKyAgei1p bmRleDogMTA7Cit9CisKKy8qIFdpemFyZCBCdXR0b24gQ1NTICovCisud2l6 YXJkLWJ1dHRvbnMgeworICBmbG9hdDogcmlnaHQ7Cit9CisKKy53aXphcmQt YnV0dG9ucyBidXR0b24geworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzog N3B4IDE1LjJweDsKKyAgZm9udC1zaXplOiAxNHB4OworICBtYXJnaW46IDBw eCA1cHggMCAwICFpbXBvcnRhbnQ7Cit9CisKKy53aXphcmQtYnV0dG9ucyBi dXR0b24ud2l6YXJkLW5leHQgaS5mYSB7CisJcGFkZGluZy1sZWZ0OiA1cHg7 Cit9CisKKy53aXphcmQtYnV0dG9ucyBidXR0b24ud2l6YXJkLWJhY2sgaS5m YSwKKy53aXphcmQtYnV0dG9ucyBidXR0b24ud2l6YXJkLWNhbmNlbCBpLmZh IHsKKwlwYWRkaW5nLXJpZ2h0OiA1cHg7Cit9CisKKy53aXphcmQtYnV0dG9u cyAud2l6YXJkLWZpbmlzaCB7CisgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0 YW50OworfQorCisvKiBXaXphcmQgU3RhdHVzIGJhciBDU1MgKi8KKy53aXph cmQtZGVzY3JpcHRpb24geworICBwYWRkaW5nOiAxLjdlbSAwLjFlbTsKK30K KworLyogRXJyb3IgbWVzc2FnZSBjc3MgKi8KKy5lcnJvcl9tc2dfZGl2IHsK KyAgZGlzcGxheTogYmxvY2s7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg Ym90dG9tOiA1NXB4OworICBiYWNrZ3JvdW5kOiAjZmZmOworfQorCisuZXJy b3JfbXNnX2RpdiBwIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgY29sb3I6 ICNiOTJjMjg7Cit9CisKKy8qIEluIHdpemFyZCBzZWxlY3QyIGRyb3Bkb3du IGRvZXNuJ3QKKyAqIHBvcHVwIGJlY2F1c2Ugei1pbmRleCBvZiBhbGVydGlm eQorICogd2l6YXJkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgei1pbmRleAorICog b2Ygc2VsZWN0MiBkcm9wZG93bi4gVG8gbWFrZSBzZWxlY3QyCisgKiB2aXNp YmxlLCBzZXQgei1pbmRleCBvZiBzZWxlY3QyCisgKiBoaWdoZXIgdmFsdWUg dGhhbiB3aXphcmQncworICovCisuc2VsZWN0Mi1jb250YWluZXItLW9wZW4g eworICB6LWluZGV4OiAxMDAwMDsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUudWkuanMgYi93ZWIvcGdhZG1p bi9icm93c2VyL3N0YXRpYy9qcy9ub2RlLnVpLmpzCmluZGV4IGYxMjdkNTIu LjQyZTc0MzMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3Rh dGljL2pzL25vZGUudWkuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z dGF0aWMvanMvbm9kZS51aS5qcwpAQCAtMjc5LDcgKzI3OSw3IEBAIGZ1bmN0 aW9uKCQsIF8sIHBnQWRtaW4sIEJhY2tib25lLCBCYWNrZm9ybSwgQWxlcnRp ZnksIE5vZGUpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfTsK IAotICAgICAgd2hpbGUocCkgeworICAgICAgd2hpbGUocCAmIHAubGVuZ3Ro ID4gMCkgewogICAgICAgICB0b3AgPSBwLmdldCgwKS5vZmZzZXRUb3AgKyBw LmhlaWdodCgpOwogICAgICAgICBwID0gcC5wYXJlbnQoKTsKICAgICAgICAg aWYgKGhhc1Njcm9sbGJhcihwKSkgewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vYnJvd3Nlci9zdGF0aWMvanMvd2l6YXJkLmpzIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zdGF0aWMvanMvd2l6YXJkLmpzCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjkyNGZmM2EKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy93aXphcmQuanMKQEAg LTAsMCArMSwyMjIgQEAKK2RlZmluZSgKKyAgICBbJ3VuZGVyc2NvcmUnLCAn YmFja2JvbmUnLCAncGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInXSwKK2Z1 bmN0aW9uKF8sIEJhY2tib25lLCBwZ0FkbWluLCBwZ0Jyb3dzZXIpIHsKKwor ICBwZ0Jyb3dzZXIgPSBwZ0Jyb3dzZXIgfHwgcGdBZG1pbi5Ccm93c2VyIHx8 IHt9OworCisgIC8qIFdpemFyZCBpbmRpdmlkdWFsIFBhZ2UgTW9kZWwgKi8K KyAgdmFyIFdpemFyZFBhZ2UgPSBwZ0Jyb3dzZXIuV2l6YXJkUGFnZSA9IEJh Y2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAgZGVmYXVsdHM6IHsKKyAgICAg IGlkOiB1bmRlZmluZWQsIC8qIElkICovCisgICAgICBwYWdlX3RpdGxlOiB1 bmRlZmluZWQsIC8qIFBhZ2UgVGl0bGUgKi8KKyAgICAgIHZpZXc6IHVuZGVm aW5lZCwgLyogQSBCYWNrYm9uZSBWaWV3ICovCisgICAgICBodG1sOiB1bmRl ZmluZWQsIC8qIEhUTUwgdGFncyB0byBiZSByZW5kZXJlZCAqLworICAgICAg aW1hZ2U6IHVuZGVmaW5lZCwgLyogTGVmdCBoYW5kIHNpZGUgaW1hZ2UgKi8K KyAgICAgIGRpc2FibGVfcHJldjogZmFsc2UsIC8qICBQcmV2aW91cyBCdXR0 b24gRmxhZyAqLworICAgICAgZGlzYWJsZV9uZXh0OiBmYWxzZSwgLyogIE5l eHQgQnV0dG9uIEZsYWcgKi8KKyAgICAgIGRpc2FibGVfY2FuY2VsOiBmYWxz ZSwgLyogQ2FuY2VsIEJ1dHRvbiBGbGFnICovCisgICAgICBzaG93X3Byb2dy ZXNzX2JhcjogJycsCisgICAgICAvKiBDYWxsYmFjayBmb3IgT25Mb2FkICov CisgICAgICBvbkxvYWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g dHJ1ZTsKKyAgICAgIH0sCisgICAgICAvKiBDYWxsYmFjayBmb3IgYmVmb3Jl IE5leHQgKi8KKyAgICAgIGJlZm9yZU5leHQ6IGZ1bmN0aW9uKCkgeworICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0sCisgICAgICBvbk5leHQ6IGZ1 bmN0aW9uKCl7fSwKKyAgICAgIG9uQmVmb3JlOiBmdW5jdGlvbigpIHt9LAor ICAgICAgLyogQ2FsbGJhY2sgZm9yIGJlZm9yZSBQcmV2aW91cyAqLworICAg ICAgYmVmb3JlUHJldjogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0 cnVlOworICAgICAgfQorICAgIH0KKyAgfSk7CisKKyAgdmFyIFdpemFyZCA9 IHBnQnJvd3Nlci5XaXphcmQgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7Cisg ICAgb3B0aW9uczogeworICAgICAgdGl0bGU6ICdXaXphcmQnLCAvKiBNYWlu IFdpemFyZCBUaXRsZSAqLworICAgICAgaW1hZ2U6ICdsZWZ0X3BhbmVsLnBu ZycsIC8qIFRPRE86OiBXZSBjYW4gdXNlIGRlZmF1bHQgaW1hZ2UgaGVyZSAq LworICAgICAgY3Vycl9wYWdlOiAwLCAvKiBDdXJyZW50IFBhZ2UgdG8gTG9h ZCAqLworICAgICAgZGlzYWJsZV9uZXh0OiBmYWxzZSwKKyAgICAgIGRpc2Fi bGVfcHJldjogZmFsc2UsCisgICAgICBkaXNhYmxlX2ZpbmlzaDogZmFsc2Us CisgICAgICBkaXNhYmxlX2NhbmNlbDogZmFsc2UsCisgICAgICBoZWlnaHQ6 IDQwMCwKKyAgICAgIHdpZHRoOiA2NTAsCisgICAgICBzaG93X2xlZnRfcGFu ZWw6IHRydWUKKyAgICB9LAorICAgIHRtcGw6IF8udGVtcGxhdGUoCisgICAg ICAgIiAgICA8ZGl2IGNsYXNzPSdwZ2FkbWluLXdpemFyZCcgc3R5bGU9J2hl aWdodDogPCU9IHRoaXMub3B0aW9ucy5oZWlnaHQgJT5weDsgd2lkdGg6IDwl PSB0aGlzLm9wdGlvbnMud2lkdGggJT5weCc+IgorICAgICAgICsgIiAgICAg IDxkaXYgY2xhc3M9J3dpemFyZC1oZWFkZXIgd2l6YXJkLWJhZGdlJz4iCisg ICAgICAgKyAiICAgICAgICA8ZGl2IGNsYXNzPSdyb3cnPiIKKyAgICAgICAr ICIgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLXNtLTknPiIKKyAgICAgICAr ICIgICAgICAgICAgICAgIDxoMz48c3BhbiBpZD0nbWFpbi10aXRsZSc+PCU9 IHRoaXMub3B0aW9ucy50aXRsZSAlPjwvc3Bhbj4gLSA8c3BhbiBpZD0nc3Rl cC10aXRsZSc+PCU9IHBhZ2VfdGl0bGUgJT48L3NwYW4+PC9oMz4iCisgICAg ICAgKyAiICAgICAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAgICAgIDwv ZGl2PiIKKyAgICAgICArICIgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAg ICAgPGRpdiBjbGFzcz0nd2l6YXJkLWNvbnRlbnQgY29sLXNtLTEyJz4iCisg ICAgICAgKyAiICAgICAgICA8JSBpZih0aGlzLm9wdGlvbnMuc2hvd19sZWZ0 X3BhbmVsKSB7ICU+IgorICAgICAgICsgIiAgICAgICAgICA8ZGl2IGNsYXNz PSdjb2wtc20tMyB3aXphcmQtbGVmdC1wYW5lbCc+IgorICAgICAgICsgIiAg ICAgICAgICAgICAgPGltZyBzcmM9JzwlPSB0aGlzLm9wdGlvbnMuaW1hZ2Ug JT4nPjwvZGl2PiIKKyAgICAgICArICIgICAgICAgIDwlIH0gJT4iCisgICAg ICAgKyAiICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtc20tPCUgaWYodGhpcy5v cHRpb25zLnNob3dfbGVmdF9wYW5lbCl7ICU+OTwlIH0gZWxzZSB7ICU+MTI8 JSB9ICU+IHdpemFyZC1yaWdodC1wYW5lbCc+IgorICAgICAgICsgIiAgICAg ICAgICA8JSBpZiggdHlwZW9mIHNob3dfZGVzY3JpcHRpb24gIT0gICd1bmRl ZmluZWQnKXsgJT4iCisgICAgICAgKyAiICAgICAgICAgICAgPGRpdiBjbGFz cz0nd2l6YXJkLWRlc2NyaXB0aW9uJz4iCisgICAgICAgKyAiICAgICAgICAg ICAgICA8JT0gc2hvd19kZXNjcmlwdGlvbiAlPiIKKyAgICAgICArICIgICAg ICAgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAgICAgICAgIDwlIH0gJT4i CisgICAgICAgKyAiICAgICAgICAgIDxkaXYgY2xhc3M9J3dpemFyZC1yaWdo dC1wYW5lbF9jb250ZW50Jz4iCisgICAgICAgKyAiICAgICAgICAgIDwvZGl2 PiIKKyAgICAgICArICIgICAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAg ICA8L2Rpdj4iCisgICAgICAgKyAiICAgICAgPGRpdiBjbGFzcz0nY29sLXNt LTEyIGVycm9yX21zZ19kaXYnPiIKKyAgICAgICArICIgICAgICAgPHA+PC9w PiIKKyAgICAgICArICIgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAgICAg PGRpdiBjbGFzcz0nZm9vdGVyIGNvbC1zbS0xMic+IgorICAgICAgICsgIiAg ICAgICAgPGRpdiBjbGFzcz0ncm93Jz4iCisgICAgICAgKyAiICAgICAgICAg IDxkaXYgY2xhc3M9J2NvbC1zbS00IHdpemFyZC1wcm9ncmVzcy1iYXInPiIK KyAgICAgICArICIgICAgICAgICAgICAgPHA+PCUgaWYoc2hvd19wcm9ncmVz c19iYXIpeyAlPjwlPSBzaG93X3Byb2dyZXNzX2JhciAlPjwlIH0gJT48L3A+ IgorICAgICAgICsgIiAgICAgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAg ICAgICAgIDxkaXYgY2xhc3M9J2NvbC1zbS04Jz4iCisgICAgICAgKyAiICAg ICAgICAgICAgPGRpdiBjbGFzcz0nd2l6YXJkLWJ1dHRvbnMnPiIKKyAgICAg ICArICIgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9J2J0biBidG4tcHJp bWFyeSB3aXphcmQtYmFjaycgPCU9dGhpcy5vcHRpb25zLmRpc2FibGVfcHJl diA/ICdkaXNhYmxlZCcgOiAnJyU+PjxpIGNsYXNzPSdmYSBmYS1iYWNrd2Fy ZCc+PC9pPkJhY2s8L2J1dHRvbj4iCisgICAgICAgKyAiICAgICAgICAgICAg ICA8YnV0dG9uIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgd2l6YXJkLW5leHQn IDwlPXRoaXMub3B0aW9ucy5kaXNhYmxlX25leHQgPyAnZGlzYWJsZWQnIDog JyclPj5OZXh0PGkgY2xhc3M9J2ZhIGZhLWZvcndhcmQnPjwvaT48L2J1dHRv bj4iCisgICAgICAgKyAiICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdi dG4gYnRuLWRhbmdlciB3aXphcmQtY2FuY2VsJyA8JT10aGlzLm9wdGlvbnMu ZGlzYWJsZV9jYW5jZWwgPyAnZGlzYWJsZWQnIDogJyclPj48aSBjbGFzcz0n ZmEgZmEtbGcgZmEtY2xvc2UnPjwvaT5DYW5jZWw8L2J1dHRvbj4iCisgICAg ICAgKyAiICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdidG4gYnRuLXBy aW1hcnkgd2l6YXJkLWZpbmlzaCcgPCU9dGhpcy5vcHRpb25zLmRpc2FibGVf ZmluaXNoID8gJ2Rpc2FibGVkJyA6ICcnJT4+RmluaXNoPC9idXR0b24+Igor ICAgICAgICsgIiAgICAgICAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAg ICAgICAgPC9kaXY+IgorICAgICAgICsgIiAgICAgICAgPC9kaXY+IgorICAg ICAgICsgIiAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAgPC9kaXY+Iiks CisgICAgZXZlbnRzOiB7CisgICAgICAiY2xpY2sgYnV0dG9uLndpemFyZC1u ZXh0IiA6ICJuZXh0UGFnZSIsCisgICAgICAiY2xpY2sgYnV0dG9uLndpemFy ZC1iYWNrIiA6ICJwcmV2UGFnZSIsCisgICAgICAiY2xpY2sgYnV0dG9uLndp emFyZC1jYW5jZWwiIDogIm9uQ2FuY2VsIiwKKyAgICAgICJjbGljayBidXR0 b24ud2l6YXJkLWZpbmlzaCIgOiAiZmluaXNoV2l6YXJkIiwKKyAgICB9LAor ICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgIHRo aXMub3B0aW9ucyA9IF8uZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIG9wdGlv bnMub3B0aW9ucyk7CisgICAgICB0aGlzLmN1cnJQYWdlID0gdGhpcy5jb2xs ZWN0aW9uLmF0KHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UpLnRvSlNPTigpOwor ICAgIH0sCisgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBk YXRhID0gdGhpcy5jdXJyUGFnZTsKKworICAgICAgLyogQ2hlY2sgU3RhdHVz IG9mIHRoZSBidXR0b25zICovCisgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJs ZV9uZXh0ID0gKHRoaXMub3B0aW9ucy5kaXNhYmxlX25leHQgPyB0cnVlIDog dGhpcy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2UuZGlzYWJsZV9uZXh0KSk7 CisgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZV9wcmV2ID0gKHRoaXMub3B0 aW9ucy5kaXNhYmxlX3ByZXYgPyB0cnVlIDogdGhpcy5ldmFsQVNGdW5jKHRo aXMuY3VyclBhZ2UuZGlzYWJsZV9wcmV2KSk7CisgICAgICB0aGlzLm9wdGlv bnMuZGlzYWJsZV9jYW5jZWwgPSAodGhpcy5jdXJyUGFnZS5jYW5DYW5jZWwg PyB0cnVlIDogdGhpcy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2UuZGlzYWJs ZV9jYW5jZWwpKTsKKworICAgICAgdGhhdCA9IHRoaXM7CisKKyAgICAgIC8q IEhUTUwgQ29udGVudCAqLworICAgICAgaWYgKGRhdGEuaHRtbCkgeyBkYXRh LmNvbnRlbnQgPSBkYXRhLmh0bWw7IH0KKyAgICAgIC8qIEJhY2tib25lIFZp ZXcgKi8KKyAgICAgIGVsc2UgaWYgKGRhdGEudmlldykgeyBkYXRhLmNvbnRl bnQgPSBkYXRhLnZpZXcucmVuZGVyKCkuZWw7fQorCisgICAgICAkKHRoaXMu ZWwpLmh0bWwodGhpcy50bXBsKGRhdGEpKTsKKyAgICAgICQodGhpcy5lbCku ZmluZCgiLndpemFyZC1yaWdodC1wYW5lbF9jb250ZW50IikuaHRtbChkYXRh LmNvbnRlbnQpOworCisgICAgICAvKiBPbkxvYWQgQ2FsbGJhY2sgKi8KKyAg ICAgIHRoaXMub25Mb2FkKCk7CisKKyAgICAgIHJldHVybiB0aGlzOworICAg IH0sCisgICAgbmV4dFBhZ2U6IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5v cHRpb25zLmN1cnJfcGFnZS5lbCA9IHRoaXMuJGVsOworICAgICAgaWYgKCF0 aGlzLmJlZm9yZU5leHQoKSkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAg cGFnZV9pZCA9IHRoaXMub25OZXh0KCk7CisKKyAgICAgIGlmIChwYWdlX2lk ICkgeworICAgICAgICB0aGlzLmN1cnJQYWdlID0gdGhpcy5jb2xsZWN0aW9u LmdldChwYWdlX2lkKS50b0pTT04oKTsKKyAgICAgICAgdGhpcy5vcHRpb25z LmN1cnJfcGFnZSA9IHRoaXMuY29sbGVjdGlvbi5pbmRleE9mKHRoaXMuY29s bGVjdGlvbi5nZXQocGFnZV9pZCkpOworICAgICAgfQorICAgICAgZWxzZSBp ZiAodGhpcy5vcHRpb25zLmN1cnJfcGFnZSA8ICh0aGlzLmNvbGxlY3Rpb24u bGVuZ3RoLTEpKSB7CisgICAgICAgIHRoaXMub3B0aW9ucy5jdXJyX3BhZ2Ug PSB0aGlzLm9wdGlvbnMuY3Vycl9wYWdlICsgMTsKKyAgICAgICAgdGhpcy5j dXJyUGFnZSA9IHRoaXMuY29sbGVjdGlvbi5hdCh0aGlzLm9wdGlvbnMuY3Vy cl9wYWdlKS50b0pTT04oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5lbmFi bGVEaXNhYmxlTmV4dCgpOworICAgICAgdGhpcy5lbmFibGVEaXNhYmxlUHJl digpOworCisgICAgICByZXR1cm4gdGhpcy5yZW5kZXIoKTsKKyAgICB9LAor ICAgIHByZXZQYWdlOiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICghdGhpcy5i ZWZvcmVQcmV2KCkpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgIHBhZ2Vf aWQgPSB0aGlzLm9uUHJldigpOworCisgICAgICBpZiAocGFnZV9pZCl7Cisg ICAgICAgIHRoaXMuY3VyclBhZ2UgPSB0aGlzLmNvbGxlY3Rpb24uZ2V0KHBh Z2VfaWQpLnRvSlNPTigpOworICAgICAgICB0aGlzLm9wdGlvbnMuY3Vycl9w YWdlID0gdGhpcy5jb2xsZWN0aW9uLmluZGV4T2YodGhpcy5jb2xsZWN0aW9u LmdldChwYWdlX2lkKSk7CisgICAgICB9CisgICAgICBlbHNlIGlmICh0aGlz Lm9wdGlvbnMuY3Vycl9wYWdlID4gMCkgeworICAgICAgICB0aGlzLm9wdGlv bnMuY3Vycl9wYWdlID0gdGhpcy5vcHRpb25zLmN1cnJfcGFnZSAtIDE7Cisg ICAgICAgIHRoaXMuY3VyclBhZ2UgPSB0aGlzLmNvbGxlY3Rpb24uYXQodGhp cy5vcHRpb25zLmN1cnJfcGFnZSkudG9KU09OKCk7CisgICAgICB9CisKKyAg ICAgIHRoaXMuZW5hYmxlRGlzYWJsZU5leHQoKTsKKyAgICAgIHRoaXMuZW5h YmxlRGlzYWJsZVByZXYoKTsKKworICAgICAgcmV0dXJuIHRoaXMucmVuZGVy KCk7CisgICAgfSwKKyAgICBmaW5pc2hXaXphcmQ6IGZ1bmN0aW9uKCkgewor ICAgICAgdGhpcy5vbkZpbmlzaCgpOworICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfSwKKyAgICBlbmFibGVEaXNhYmxlTmV4dDogZnVuY3Rpb24oZGlzYWJs ZSkgeworICAgICAgICBpZiAodHlwZW9mKGRpc2FibGUpICE9ICd1bmRlZmlu ZWQnKSB7CisgICAgICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVfbmV4dCA9 IGRpc2FibGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5v cHRpb25zLmN1cnJfcGFnZSA+PSAodGhpcy5jb2xsZWN0aW9uLmxlbmd0aC0x KSkgeworICAgICAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlX25leHQgPSB0 cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHRo aXMub3B0aW9ucy5kaXNhYmxlX25leHQgPSBmYWxzZTsKKyAgICAgICAgfQor ICAgIH0sCisgICAgZW5hYmxlRGlzYWJsZVByZXY6IGZ1bmN0aW9uKGRpc2Fi bGUpIHsKKyAgICAgICAgaWYgKHR5cGVvZihkaXNhYmxlKSAhPSAndW5kZWZp bmVkJykgeworICAgICAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlX3ByZXYg PSBkaXNhYmxlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMu b3B0aW9ucy5jdXJyX3BhZ2UgPD0gMCkgeworICAgICAgICAgIHRoaXMub3B0 aW9ucy5kaXNhYmxlX3ByZXYgPSB0cnVlOworICAgICAgICB9CisgICAgICAg IGVsc2UgeworICAgICAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlX3ByZXYg PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0sCisgICAgYmVmb3JlTmV4dDog ZnVuY3Rpb24oKXsKKyAgICAgIHJldHVybiB0aGlzLmV2YWxBU0Z1bmModGhp cy5jdXJyUGFnZS5iZWZvcmVOZXh0KTsKKyAgICB9LAorICAgIGJlZm9yZVBy ZXY6IGZ1bmN0aW9uKCl7CisgICAgICByZXR1cm4gdGhpcy5ldmFsQVNGdW5j KHRoaXMuY3VyclBhZ2UuYmVmb3JlUHJldik7CisgICAgfSwKKyAgICBvblBy ZXY6IGZ1bmN0aW9uKCl7CisgICAgICByZXR1cm4gdGhpcy5ldmFsQVNGdW5j KHRoaXMuY3VyclBhZ2Uub25QcmV2KTsKKyAgICB9LAorICAgIG9uTmV4dDog ZnVuY3Rpb24oKXsKKyAgICAgIHJldHVybiB0aGlzLmV2YWxBU0Z1bmModGhp cy5jdXJyUGFnZS5vbk5leHQpOworICAgIH0sCisgICAgb25Mb2FkOiBmdW5j dGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmV2YWxBU0Z1bmModGhpcy5j dXJyUGFnZS5vbkxvYWQpOworICAgIH0sCisgICAgb25GaW5pc2g6IGZ1bmN0 aW9uKCkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSwKKyAgICBvbkNh bmNlbDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLiRlbC5yZW1vdmUoKTsK KyAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisgICAgZXZhbEFTRnVuYzog ZnVuY3Rpb24oZnVuYywgY3R4KSB7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7 CisgICAgICBjdHggPSBjdHggfHwgc2VsZi5jdXJyUGFnZTsKKworICAgICAg cmV0dXJuIChfLmlzRnVuY3Rpb24oZnVuYykgPyBmdW5jLmFwcGx5KGN0eCwg W3NlbGZdKSA6IGZ1bmMpOworICAgIH0KKyAgfSk7CisKKyAgcmV0dXJuIHBn QnJvd3NlcjsKKworfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29s cy9ncmFudF93aXphcmQvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi90b29s cy9ncmFudF93aXphcmQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYzcxODE4ZQotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC9fX2luaXRfXy5weQpA QCAtMCwwICsxLDM4NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBD b3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE2LCBUaGUgcGdBZG1pbiBEZXZlbG9w bWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIg dGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKworIiIiSW1wbGVtZW50cyBHcmFudCBXaXphcmQiIiIK KworaW1wb3J0IGpzb24KK2Zyb20gZmxhc2sgaW1wb3J0IHJlbmRlcl90ZW1w bGF0ZSwgcmVxdWVzdCwgY3VycmVudF9hcHAKK2Zyb20gZmxhc2suZXh0LmJh YmVsIGltcG9ydCBnZXR0ZXh0Citmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBp bXBvcnQgbWFrZV9yZXNwb25zZSBhcyBhamF4X3Jlc3BvbnNlLCBcCisgICAg bWFrZV9qc29uX3Jlc3BvbnNlLCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IKK2Zy b20gcGdhZG1pbi51dGlscy5kcml2ZXIgaW1wb3J0IGdldF9kcml2ZXIKK2Zy b20gY29uZmlnIGltcG9ydCBQR19ERUZBVUxUX0RSSVZFUgorIyBmcm9tIHBn YWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMudXRpbHMgaW1w b3J0IHBhcnNlX3ByaXZfdG9fZGIKK2Zyb20gcGdhZG1pbi51dGlscyBpbXBv cnQgUGdBZG1pbk1vZHVsZQorZnJvbSBmbGFzayBpbXBvcnQgUmVzcG9uc2Us IHVybF9mb3IKK2Zyb20gZmxhc2suZXh0LnNlY3VyaXR5IGltcG9ydCBsb2dp bl9yZXF1aXJlZAorZnJvbSB1cmxsaWIgaW1wb3J0IHVucXVvdGUKKworIyBz ZXQgdGVtcGxhdGUgcGF0aCBmb3Igc3FsIHNjcmlwdHMKK3RlbXBsYXRlX3Bh dGggPSAnZ3JhbnRfd2l6YXJkL3NxbCcKK01PRFVMRV9OQU1FID0gJ2dyYW50 X3dpemFyZCcKKworCitjbGFzcyBHcmFudFdpemFyZE1vZHVsZShQZ0FkbWlu TW9kdWxlKToKKyAgICAiIiIKKyAgICBjbGFzcyBHcmFudFdpemFyZE1vZHVs ZShPYmplY3QpOgorCisgICAgICAgIEl0IGlzIGEgd2l6YXJkIHdoaWNoIGlu aGVyaXRzIFBnQWRtaW5Nb2R1bGUKKyAgICAgICAgY2xhc3MgYW5kIGRlZmlu ZSBtZXRob2RzIHRvIGxvYWQgaXRzIG93bgorICAgICAgICBqYXZhc2NyaXB0 IGZpbGUuCisgICAgIiIiCisgICAgZGVmIGdldF9vd25fc3R5bGVzaGVldHMo c2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zOgorICAgICAg ICAgICAgbGlzdDogdGhlIHN0eWxlc2hlZXRzIHVzZWQgYnkgdGhpcyBtb2R1 bGUuCisgICAgICAgICIiIgorICAgICAgICBzdHlsZXNoZWV0cyA9IFsKKyAg ICAgICAgICAgIHVybF9mb3IoJ2Jyb3dzZXIuc3RhdGljJywgZmlsZW5hbWU9 J2Nzcy93aXphcmQuY3NzJyksCisgICAgICAgICAgICB1cmxfZm9yKCdncmFu dF93aXphcmQuc3RhdGljJywgZmlsZW5hbWU9J2Nzcy9ncmFudF93aXphcmQu Y3NzJykKKyAgICAgICAgICAgIF0KKyAgICAgICAgcmV0dXJuIHN0eWxlc2hl ZXRzCisKKyAgICBkZWYgZ2V0X293bl9qYXZhc2NyaXB0cyhzZWxmKToKKyAg ICAgICAgIiIiIgorICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgbGlz dDoganMgZmlsZXMgdXNlZCBieSB0aGlzIG1vZHVsZQorICAgICAgICAiIiIK KyAgICAgICAgc2NyaXB0cyA9IFtdCisgICAgICAgIHNjcmlwdHMuYXBwZW5k KHsKKyAgICAgICAgICAgICduYW1lJzogJ3BnYWRtaW4udG9vbHMuZ3JhbnRf d2l6YXJkJywKKyAgICAgICAgICAgICdwYXRoJzogdXJsX2ZvcignZ3JhbnRf d2l6YXJkLmluZGV4JykgKyAnZ3JhbnRfd2l6YXJkJywKKyAgICAgICAgICAg ICd3aGVuJzogTm9uZQorICAgICAgICB9KQorICAgICAgICBzY3JpcHRzLmFw cGVuZCh7CisgICAgICAgICAgICAnbmFtZSc6ICdwZ2FkbWluLmJyb3dzZXIu d2l6YXJkJywKKyAgICAgICAgICAgICdwYXRoJzogdXJsX2ZvcignYnJvd3Nl ci5zdGF0aWMnLCBmaWxlbmFtZT0nanMvd2l6YXJkJyksCisgICAgICAgICAg ICAnd2hlbic6IE5vbmUKKyAgICAgICAgfSkKKyAgICAgICAgcmV0dXJuIHNj cmlwdHMKKworIyBDcmVhdGUgYmx1ZXByaW50IGZvciBHcmFudFdpemFyZE1v ZHVsZSBjbGFzcworYmx1ZXByaW50ID0gR3JhbnRXaXphcmRNb2R1bGUoCisg ICAgTU9EVUxFX05BTUUsIF9fbmFtZV9fLCBzdGF0aWNfdXJsX3BhdGg9Jycp CisKKworQGJsdWVwcmludC5yb3V0ZSgiLyIpCitAbG9naW5fcmVxdWlyZWQK K2RlZiBpbmRleCgpOgorICAgIHBhc3MKKworCitAYmx1ZXByaW50LnJvdXRl KCIvZ3JhbnRfd2l6YXJkLmpzIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHNj cmlwdCgpOgorICAgICIiInJlbmRlciBvd24gamF2YXNjcmlwdCIiIgorICAg IHJldHVybiBSZXNwb25zZShyZXNwb25zZT1yZW5kZXJfdGVtcGxhdGUoCisg ICAgICAgICAgICAgICAgImdyYW50X3dpemFyZC9qcy9ncmFudF93aXphcmQu anMiLCBfPWdldHRleHQpLAorICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAs CisgICAgICAgICAgICAgICAgbWltZXR5cGU9ImFwcGxpY2F0aW9uL2phdmFz Y3JpcHQiKQorCisKK0BibHVlcHJpbnQucm91dGUoIi9hbGxvd2VkX2FjbC5q c29uIikKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIGFjbF9saXN0KCk6CisgICAg IiIicmVuZGVyIGxpc3Qgb2YgYWNscyIiIgorICAgIHJldHVybiBSZXNwb25z ZShyZXNwb25zZT1yZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAg ImdyYW50X3dpemFyZC9zcWwvYWxsb3dlZF9hY2wuanNvbiIsIF89Z2V0dGV4 dCksCisgICAgICAgICAgICAgICAgc3RhdHVzPTIwMCwKKyAgICAgICAgICAg ICAgICBtaW1ldHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIpCisKKwor QGJsdWVwcmludC5yb3V0ZSgKKyAgICAnL3Byb3BlcnRpZXMvPGludDpnaWQ+ LzxpbnQ6c2lkPi88aW50OmRpZD4nCisgICAgJy88aW50Om5vZGVfaWQ+Lzxu b2RlX25hbWU+Lzxub2RlX3R5cGU+Lzxuc3BuYW1lPi8nLAorICAgIG1ldGhv ZHM9KCdHRVQnLCAnUE9TVCcpKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgcHJv cGVydGllcyhnaWQsIHNpZCwgZGlkLCBub2RlX2lkLCBub2RlX25hbWUsIG5v ZGVfdHlwZSwgbnNwbmFtZSk6CisgICAgIiIiSXQgZmV0Y2hlcyB0aGUgcHJv cGVydGllcyBvZiBvYmplY3QgdHlwZXMKKyAgICAgICBhbmQgcmVuZGVyIGlu dG8gc2VsZWN0aW9uIHBhZ2Ugb2Ygd2l6YXJkCisgICAgIiIiCisKKyAgICAj IHVucXVvdGUgZW5jb2RlZCB1cmwgcGFyYW1ldGVyCisgICAgbm9kZV90eXBl ID0gdW5xdW90ZShub2RlX3R5cGUpCisgICAgbnNwbmFtZSA9IHVucXVvdGUo bnNwbmFtZSkKKworICAgIHJlc19kYXRhID0gW10KKyAgICBtYW5hZ2VyID0g Z2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5h Z2VyKHNpZCkKKyAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1k aWQpCisKKyAgICAjIEZldGNoIGZ1bmN0aW9ucyBhZ2FpbnN0IHNjaGVtYQor ICAgIGlmIG5vZGVfdHlwZSBpbiBbJ3NjaGVtYSddOgorICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICBbdGVt cGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAg bm9kZV9pZD1ub2RlX2lkLCBub2RlX25hbWU9bm9kZV9uYW1lLAorICAgICAg ICAgICAgdHlwZT1ub2RlX3R5cGUsIG5zcG5hbWU9bnNwbmFtZSkKKworICAg ICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKwor ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAg cmVzX2RhdGEuZXh0ZW5kKHJlc1sncm93cyddKQorCisgICAgIyBGZXRjaCB0 cmlnZ2VyIGZ1bmN0aW9ucworICAgIGlmIG5vZGVfdHlwZSBpbiBbJ3NjaGVt YScsICd0cmlnZ2VyX2Z1bmN0aW9uJ106CisgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgIFt0ZW1wbGF0ZV9w YXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICBub2RlX2lk PW5vZGVfaWQsIG5vZGVfbmFtZT1ub2RlX25hbWUsCisgICAgICAgICAgICB0 eXBlPSd0cmlnZ2VyX2Z1bmN0aW9uJywgbnNwbmFtZT1uc3BuYW1lKQorICAg ICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKwor ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAg cmVzX2RhdGEuZXh0ZW5kKHJlc1sncm93cyddKQorCisgICAgIyBGZXRjaCBT ZXF1ZW5jZXMgYWdhaW5zdCBzY2hlbWEKKyAgICBpZiBub2RlX3R5cGUgaW4g WydzY2hlbWEnLCAnc2VxdWVuY2UnXToKKyAgICAgICAgU1FMID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgW3RlbXBsYXRlX3Bh dGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIG5vZGVfaWQ9 bm9kZV9pZCwgbm9kZV9uYW1lPW5vZGVfbmFtZSwKKyAgICAgICAgICAgIHR5 cGU9J3NlcXVlbmNlJywgbnNwbmFtZT1uc3BuYW1lKQorCisgICAgICAgIHN0 YXR1cywgcmVzID0gY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICBp ZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisgICAgICAgIHJlc19kYXRhLmV4 dGVuZChyZXNbJ3Jvd3MnXSkKKworICAgICMgRmV0Y2ggVGFibGVzIGFnYWlu c3Qgc2NoZW1hCisgICAgaWYgbm9kZV90eXBlIGluIFsnc2NoZW1hJywgJ3Rh YmxlJ106CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9p bigKKyAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5z cWwnXSksCisgICAgICAgICAgICBub2RlX2lkPW5vZGVfaWQsIG5vZGVfbmFt ZT1ub2RlX25hbWUsCisgICAgICAgICAgICB0eXBlPSd0YWJsZScsIG5zcG5h bWU9bnNwbmFtZSkKKworICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhl Y3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQorCisgICAgICAgIHJlc19kYXRhLmV4dGVuZChyZXNbJ3Jvd3MnXSkK KworICAgICMgRmV0Y2ggVmlld3MgYWdhaW5zdCBzY2hlbWEKKyAgICBpZiBu b2RlX3R5cGUgaW4gWydzY2hlbWEnLCAndmlldyddOgorICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICBbdGVt cGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAg bm9kZV9pZD1ub2RlX2lkLCBub2RlX25hbWU9bm9kZV9uYW1lLAorICAgICAg ICAgICAgdHlwZT0ndmlldycsIG5zcG5hbWU9bnNwbmFtZSkKKworICAgICAg ICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAg ICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgIHJlc19k YXRhLmV4dGVuZChyZXNbJ3Jvd3MnXSkKKworICAgIHJldHVybiBhamF4X3Jl c3BvbnNlKAorICAgICAgICAgICAgcmVzcG9uc2U9cmVzX2RhdGEsCisgICAg ICAgICAgICBzdGF0dXM9MjAwCisgICAgICAgICAgICApCisKKworZGVmIHBh cnNlX3ByaXZfdG9fZGIoc3RyX3ByaXZpbGVnZXMsIGFjbHMpOgorICAgICIi IgorICAgIENvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uIHRvIHBhcnNlIHByaXZp bGVnZXMgYmVmb3JlIHNlbmRpbmcgdG8gZGF0YWJhc2UuCisgICAgIiIiCisg ICAgZGJfcHJpdmlsZWdlcyA9IHsKKyAgICAgICAgJ2MnOiAnQ09OTkVDVCcs CisgICAgICAgICdDJzogJ0NSRUFURScsCisgICAgICAgICdUJzogJ1RFTVBP UkFSWScsCisgICAgICAgICdhJzogJ0lOU0VSVCcsCisgICAgICAgICdyJzog J1NFTEVDVCcsCisgICAgICAgICd3JzogJ1VQREFURScsCisgICAgICAgICdk JzogJ0RFTEVURScsCisgICAgICAgICdEJzogJ1RSVU5DQVRFJywKKyAgICAg ICAgJ3gnOiAnUkVGRVJFTkNFUycsCisgICAgICAgICd0JzogJ1RSSUdHRVIn LAorICAgICAgICAnVSc6ICdVU0FHRScsCisgICAgICAgICdYJzogJ0VYRUNV VEUnCisgICAgICAgIH0KKworICAgIHByaXZpbGVnZXMgPSBbXQorCisgICAg Zm9yIHByaXYgaW4gc3RyX3ByaXZpbGVnZXM6CisgICAgICAgIHByaXZfd2l0 aF9ncmFudCA9IHt9CisgICAgICAgIHByaXZfd2l0aG91dF9ncmFudCA9IHt9 CisgICAgICAgIHByaXZfZnVuY3Rpb25fd2l0aF9ncmFudCA9IFtdCisgICAg ICAgIHByaXZfZnVuY3Rpb25fd2l0aG91dF9ncmFudCA9IFtdCisgICAgICAg IHByaXZfc2VxdWVuY2Vfd2l0aF9ncmFudCA9IFtdCisgICAgICAgIHByaXZf c2VxdWVuY2Vfd2l0aG91dF9ncmFudCA9IFtdCisgICAgICAgIHByaXZfdGFi bGVfd2l0aF9ncmFudCA9IFtdCisgICAgICAgIHByaXZfdGFibGVfd2l0aG91 dF9ncmFudCA9IFtdCisKKyAgICAgICAgIyBpbXBvcnQgcGRiCisgICAgICAg ICMgcGRiLnNldF90cmFjZSgpCisgICAgICAgIGZvciBwcml2aWxlZ2UgaW4g cHJpdlsncHJpdmlsZWdlcyddOgorCisgICAgICAgICAgICBpZiBwcml2aWxl Z2VbJ3ByaXZpbGVnZV90eXBlJ10gbm90IGluIGRiX3ByaXZpbGVnZXM6Cisg ICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBFeHRy YWN0IHByaXZpbGVnZXMgYXBwbGljYWJsZSB0byBmdW5jdGlvbgorICAgICAg ICAgICAgaWYgcHJpdmlsZWdlWydwcml2aWxlZ2VfdHlwZSddIGluIGFjbHNb J2Z1bmN0aW9uJ11bJ2FjbCddOgorICAgICAgICAgICAgICAgIGlmIHByaXZp bGVnZVsnd2l0aF9ncmFudCddOgorICAgICAgICAgICAgICAgICAgICBwcml2 X2Z1bmN0aW9uX3dpdGhfZ3JhbnQuYXBwZW5kKAorICAgICAgICAgICAgICAg ICAgICAgICAgZGJfcHJpdmlsZWdlc1twcml2aWxlZ2VbJ3ByaXZpbGVnZV90 eXBlJ11dKQorICAgICAgICAgICAgICAgIGVsaWYgcHJpdmlsZWdlWydwcml2 aWxlZ2UnXToKKyAgICAgICAgICAgICAgICAgICAgcHJpdl9mdW5jdGlvbl93 aXRob3V0X2dyYW50LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAg IGRiX3ByaXZpbGVnZXNbcHJpdmlsZWdlWydwcml2aWxlZ2VfdHlwZSddXSkK KworICAgICAgICAgICAgIyBFeHRyYWN0IHByaXZpbGVnZXMgYXBwbGljYWJs ZSB0byBzZXF1ZW5jZQorICAgICAgICAgICAgaWYgcHJpdmlsZWdlWydwcml2 aWxlZ2VfdHlwZSddIGluIGFjbHNbJ3NlcXVlbmNlJ11bJ2FjbCddOgorICAg ICAgICAgICAgICAgIGlmIHByaXZpbGVnZVsnd2l0aF9ncmFudCddOgorICAg ICAgICAgICAgICAgICAgICBwcml2X3NlcXVlbmNlX3dpdGhfZ3JhbnQuYXBw ZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgZGJfcHJpdmlsZWdlc1tw cml2aWxlZ2VbJ3ByaXZpbGVnZV90eXBlJ11dKQorICAgICAgICAgICAgICAg IGVsaWYgcHJpdmlsZWdlWydwcml2aWxlZ2UnXToKKyAgICAgICAgICAgICAg ICAgICAgcHJpdl9zZXF1ZW5jZV93aXRob3V0X2dyYW50LmFwcGVuZCgKKyAg ICAgICAgICAgICAgICAgICAgICAgIGRiX3ByaXZpbGVnZXNbcHJpdmlsZWdl Wydwcml2aWxlZ2VfdHlwZSddXSkKKworICAgICAgICAgICAgIyBFeHRyYWN0 IHByaXZpbGVnZXMgYXBwbGljYWJsZSB0byB2aWV3L3RhYmxlCisgICAgICAg ICAgICBpZiAocHJpdmlsZWdlWydwcml2aWxlZ2VfdHlwZSddIGluIGFjbHNb J3RhYmxlJ11bJ2FjbCddKToKKyAgICAgICAgICAgICAgICBpZiBwcml2aWxl Z2VbJ3dpdGhfZ3JhbnQnXToKKyAgICAgICAgICAgICAgICAgICAgcHJpdl90 YWJsZV93aXRoX2dyYW50LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAg ICAgIGRiX3ByaXZpbGVnZXNbcHJpdmlsZWdlWydwcml2aWxlZ2VfdHlwZSdd XSkKKyAgICAgICAgICAgICAgICBlbGlmIHByaXZpbGVnZVsncHJpdmlsZWdl J106CisgICAgICAgICAgICAgICAgICAgIHByaXZfdGFibGVfd2l0aG91dF9n cmFudC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBkYl9wcml2 aWxlZ2VzW3ByaXZpbGVnZVsncHJpdmlsZWdlX3R5cGUnXV0pCisKKyAgICAg ICAgIyBJZiB3ZSBoYXZlIGFsbCBhY2wgdGhlbiBqdXN0IHJldHVybiBhbGwK KyAgICAgICAgaWYgbGVuKHByaXZfdGFibGVfd2l0aF9ncmFudCkgPT0gbGVu KGFjbHNbJ3RhYmxlJ11bJ2FjbCddKToKKyAgICAgICAgICAgIHByaXZfdGFi bGVfd2l0aF9ncmFudCA9IFsnQUxMJ10KKworICAgICAgICBpZiBsZW4ocHJp dl90YWJsZV93aXRob3V0X2dyYW50KSA9PSBsZW4oYWNsc1sndGFibGUnXVsn YWNsJ10pOgorICAgICAgICAgICAgcHJpdl90YWJsZV93aXRob3V0X2dyYW50 ID0gWydBTEwnXQorCisgICAgICAgICMgQXBwZW5kaW5nIGFuZCByZXR1cm5p bmcgYWxsIEFDTAorICAgICAgICBwcml2X3dpdGhfZ3JhbnRbJ2Z1bmN0aW9u J10gPSBwcml2X2Z1bmN0aW9uX3dpdGhfZ3JhbnQKKyAgICAgICAgcHJpdl93 aXRob3V0X2dyYW50WydmdW5jdGlvbiddID0gcHJpdl9mdW5jdGlvbl93aXRo b3V0X2dyYW50CisKKyAgICAgICAgcHJpdl93aXRoX2dyYW50WydzZXF1ZW5j ZSddID0gcHJpdl9zZXF1ZW5jZV93aXRoX2dyYW50CisgICAgICAgIHByaXZf d2l0aG91dF9ncmFudFsnc2VxdWVuY2UnXSA9IHByaXZfc2VxdWVuY2Vfd2l0 aG91dF9ncmFudAorCisgICAgICAgIHByaXZfd2l0aF9ncmFudFsndGFibGUn XSA9IHByaXZfdGFibGVfd2l0aF9ncmFudAorICAgICAgICBwcml2X3dpdGhv dXRfZ3JhbnRbJ3RhYmxlJ10gPSBwcml2X3RhYmxlX3dpdGhvdXRfZ3JhbnQK KworICAgICAgICBwcml2aWxlZ2VzLmFwcGVuZCh7CisgICAgICAgICAgICAn Z3JhbnRlZSc6IHByaXZbJ2dyYW50ZWUnXSwKKyAgICAgICAgICAgICd3aXRo X2dyYW50JzogcHJpdl93aXRoX2dyYW50LAorICAgICAgICAgICAgJ3dpdGhv dXRfZ3JhbnQnOiBwcml2X3dpdGhvdXRfZ3JhbnQKKyAgICAgICAgICAgIH0p CisKKyAgICByZXR1cm4gcHJpdmlsZWdlcworCisKK0BibHVlcHJpbnQucm91 dGUoCisgICAgJy9tc3FsLzxpbnQ6Z2lkPi88aW50OnNpZD4vPGludDpkaWQ+ Lzxub2RlX3R5cGU+Lzxuc3BuYW1lPi8nLAorICAgIG1ldGhvZHM9KCdHRVQn LCAnUE9TVCcpKQorZGVmIG1zcWwoZ2lkLCBzaWQsIGRpZCwgbm9kZV90eXBl LCBuc3BuYW1lKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwg cmV0dXJuIG1vZGlmaWVkIFNRTAorICAgICIiIgorCisgICAgIyB1bnF1b3Rl IGVuY29kZWQgdXJsIHBhcmFtZXRlcgorICAgIG5vZGVfdHlwZSA9IHVucXVv dGUobm9kZV90eXBlKQorICAgIG5zcG5hbWUgPSB1bnF1b3RlKG5zcG5hbWUp CisKKyAgICBkYXRhID0ge30KKyAgICBmb3IgaywgdiBpbiByZXF1ZXN0LmFy Z3MuaXRlbXMoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YVtr XSA9IGpzb24ubG9hZHModikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6 CisgICAgICAgICAgICBkYXRhW2tdID0gdgorCisgICAgIyBGb3JtIGRiIGNv bm5lY3Rpb24KKyAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxU X0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKHNpZCkKKyAgICBjb25uID0g bWFuYWdlci5jb25uZWN0aW9uKGRpZD1kaWQpCisKKyAgICBhY2xzID0gW10K KyAgICB0cnk6CisgICAgICAgIGFjbHMgPSByZW5kZXJfdGVtcGxhdGUoCisg ICAgICAgICAgICAiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgJ2FsbG93ZWRf YWNsLmpzb24nXSkKKyAgICAgICAgICAgICkKKyAgICAgICAgYWNscyA9IGpz b24ubG9hZHMoYWNscykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Cisg ICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oZSkKKworICAg IHRyeToKKworICAgICAgICAjIFBhcnNlIHByaXZpbGVnZXMKKyAgICAgICAg aWYgJ2FjbCcgaW4gZGF0YToKKyAgICAgICAgICAgIGRhdGFbJ2FjbCddID0g cGFyc2VfcHJpdl90b19kYihkYXRhWydhY2wnXSwgYWNscykKKworICAgICAg ICAjIFBhc3MgZGF0YWJhc2Ugb2JqZWN0cyBhbmQgZ2V0IFNRTCBmb3IgcHJp dmlsZWdlcworICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oCisgICAgICAgICAgICBbdGVtcGxhdGVfcGF0aCwgJ2dyYW50LnNxbCdd KSwKKyAgICAgICAgICAgIGRhdGE9ZGF0YSwgbnNwbmFtZT1uc3BuYW1lLCBj b25uPWNvbm4pCisKKyAgICAgICAgcmVzID0geydkYXRhJzogU1FMfQorCisg ICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAgICAgICAgcmVz cG9uc2U9cmVzLAorICAgICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICAg ICAgKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBy ZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgc3RhdHVz PTQxMCwKKyAgICAgICAgICAgIHN1Y2Nlc3M9MCwKKyAgICAgICAgICAgIGVy cm9ybXNnPWUubWVzc2FnZQorICAgICAgICApCisKKworQGJsdWVwcmludC5y b3V0ZSgKKyAgICAnL3NhdmUvPGludDpnaWQ+LzxpbnQ6c2lkPi88aW50OmRp ZD4vJworICAgICc8bm9kZV90eXBlPi88bnNwbmFtZT4vJywKKyAgICBtZXRo b2RzPSgnR0VUJywgJ1BPU1QnKSkKK2RlZiBzYXZlKGdpZCwgc2lkLCBkaWQs IG5vZGVfdHlwZSwgbnNwbmFtZSk6CisgICAgIiIiCisgICAgVGhpcyBmdW5j dGlvbiB3aWxsIGFwcGx5IHRoZSBwcml2aWxlZ2VzIHRvIHRoZSBzZWxlY3Rl ZAorICAgIERhdGFiYXNlIE9iamVjdHMKKyAgICAiIiIKKworICAgICMgdW5x dW90ZSBlbmNvZGVkIHVybCBwYXJhbWV0ZXIKKyAgICBub2RlX3R5cGUgPSB1 bnF1b3RlKG5vZGVfdHlwZSkKKyAgICBuc3BuYW1lID0gdW5xdW90ZShuc3Bu YW1lKQorCisgICAgZGF0YSA9IHJlcXVlc3QuZm9ybSBpZiByZXF1ZXN0LmZv cm0gZWxzZSBqc29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNvZGUoKSkKKwor ICAgICMgRm9ybSBkYiBjb25uZWN0aW9uIGFuZCB3ZSB1c2UgY29ubiB0byBl eGVjdXRlIHNxbAorICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFV TFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFnZXIoc2lkKQorICAgIGNvbm4g PSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPWRpZCkKKworICAgIGFjbHMgPSBb XQorICAgIHRyeToKKyAgICAgICAgYWNscyA9IHJlbmRlcl90ZW1wbGF0ZSgK KyAgICAgICAgICAgICIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAnYWxsb3dl ZF9hY2wuanNvbiddKQorICAgICAgICAgICAgKQorICAgICAgICBhY2xzID0g anNvbi5sb2FkcyhhY2xzKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK KyAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihlKQorCisg ICAgdHJ5OgorCisgICAgICAgICMgUGFyc2UgcHJpdmlsZWdlcworICAgICAg ICBpZiAnYWNsJyBpbiBkYXRhOgorICAgICAgICAgICAgZGF0YVsnYWNsJ10g PSBwYXJzZV9wcml2X3RvX2RiKGRhdGFbJ2FjbCddLCBhY2xzKQorCisgICAg ICAgICMgUGFzcyBkYXRhYmFzZSBvYmplY3RzIGFuZCBnZXQgU1FMIGZvciBw cml2aWxlZ2VzCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbigKKyAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAnZ3JhbnQuc3Fs J10pLAorICAgICAgICAgICAgZGF0YT1kYXRhLCBuc3BuYW1lPW5zcG5hbWUs IGNvbm49Y29ubikKKworICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhl Y3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQorCisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisg ICAgICAgICAgICBzdWNjZXNzPTEsCisgICAgICAgICAgICBpbmZvPSJQcml2 aWxlZ2VzIEFwcGxpZWQiCisgICAgICAgICkKKworICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgZToKKyAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1lLm1lc3NhZ2UpCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi90b29scy9ncmFudF93aXphcmQvc3RhdGljL2Nzcy9ncmFudF93aXph cmQuY3NzIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3N0YXRp Yy9jc3MvZ3JhbnRfd2l6YXJkLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi40NmM5MjAzCi0tLSAvZGV2L251bGwKKysrIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3N0YXRpYy9jc3MvZ3JhbnRf d2l6YXJkLmNzcwpAQCAtMCwwICsxLDg2IEBACisvKiogR3JhbnQgV2l6YXJk IENTUyAqKi8KKworLyoqCisgIENTUyB0byBtYWtlIGRiIG9iamVjdCB0eXBl IHRhYmxlCisgIGZpeGVkIHNvIHRoYXQgdGJvZHkgY29udGVudCBtYXkKKyAg c2Nyb2xsCisgKi8KKy5vYmplY3RfdHlwZV90YWJsZSB0aGVhZCB0ciB7Cisg IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisK Ky5vYmplY3RfdHlwZV90YWJsZSB7CisJZGlzcGxheTogaW5saW5lLWJsb2Nr OworICBoZWlnaHQ6IDEwMCU7CisgIGJvcmRlcjogMCAhaW1wb3J0YW50Owor fQorCisub2JqZWN0X3R5cGVfdGFibGUgdGJvZHkgeworICBkaXNwbGF5OiBi bG9jazsKKyAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgYm9yZGVyOiAxcHggc29s aWQgI2RkZDsKKyAgd2lkdGg6IDEwMCU7CisgIG1pbi1oZWlnaHQ6IDEwMCU7 CisgIG1heC1oZWlnaHQ6IDY2JTsKKyAgaGVpZ2h0OiA2NiU7Cit9CisKKy5v YmplY3RfdHlwZV90YWJsZSB0Ym9keSB0ciB0ZCB7CisJYmFja2dyb3VuZC1w b3NpdGlvbjogNHB4IDRweDsKKwlib3JkZXItcmFkaXVzOiAwOworfQorCisu b2JqZWN0X3R5cGVfdGFibGUgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDEpLAor Lm9iamVjdF90eXBlX3RhYmxlIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgxKSB7 CisgIHdpZHRoOiAyOHB4OworICBtaW4td2lkdGg6IDI4cHg7Cit9CisKKy5v YmplY3RfdHlwZV90YWJsZSB0Ym9keSB0ciB0ZDpudGgtY2hpbGQoMiksCisu b2JqZWN0X3R5cGVfdGFibGUgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpIHsK KyAgd2lkdGg6IDE4NXB4OworICBtaW4td2lkdGg6IDE4NXB4OworfQorCisu b2JqZWN0X3R5cGVfdGFibGUgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDMpLAor Lm9iamVjdF90eXBlX3RhYmxlIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgzKSB7 CisgIHdpZHRoOiAxMTBweDsKKyAgbWluLXdpZHRoOiAxMTBweDsKK30KKwor Lm9iamVjdF90eXBlX3RhYmxlIHRoZWFkIHRyIHRoOm50aC1jaGlsZCg0KSB7 CisJd2lkdGg6IDI0NHB4OworfQorCisub2JqZWN0X3R5cGVfdGFibGUgdGJv ZHkgdHIgdGQ6bnRoLWNoaWxkKDQpIHsKKyAgd2lkdGg6IDI0NHB4OworICBt aW4td2lkdGg6IDIyOHB4OworICBtYXgtd2lkdGg6IDEwMCU7Cit9CisKKy8q KiBPdmVycmlkZSBCYWNrZ3JpZCBmaWx0ZXIgQ1NTICoqLworLmJhY2tncmlk LWZpbHRlci5mb3JtLXNlYXJjaCB7CisgIGZsb2F0OiBsZWZ0OworICBtYXJn aW46IDBweCA1cHggNXB4IDA7Cit9CisKKy8qKiBDdXN0b20gc3R5bGluZyBm b3IgQ29kZW1pcnJvciBmaWVsZCAqKi8KKy53aXphcmQtcmlnaHQtcGFuZWxf Y29udGVudCB7CisgIGJvcmRlcjogMXB4IHNvbGlkZSAjY2NjOworfQorCisu d2l6YXJkLXJpZ2h0LXBhbmVsX2NvbnRlbnQgLkNvZGVNaXJyb3IgeworICBi b3JkZXI6IDFweCBzb2xpZCAjY2NjOworICBoZWlnaHQ6IDI4NXB4ICFpbXBv cnRhbnQ7CisgIG1pbi1oZWlnaHQ6IDI4NXB4ICFpbXBvcnRhbnQ7Cit9CisK Ky53aXphcmQtcmlnaHQtcGFuZWxfY29udGVudCAuQ29kZU1pcnJvci1saW5l bnVtYmVyIHsKKyAgYmFja2dyb3VuZDogI0Y3RjdGNzsKKyAgYm9yZGVyLXJp Z2h0OiAxcHggc29saWQgI0RERERERDsKK30KKworLndpemFyZC1yaWdodC1w YW5lbF9jb250ZW50IC5Db2RlTWlycm9yLWd1dHRlcnMgeworICBtaW4taGVp Z2h0OiAyODVweCAhaW1wb3J0YW50OworfQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXph cmQvanMvZ3JhbnRfd2l6YXJkLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3Jh bnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvanMvZ3JhbnRfd2l6 YXJkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5 N2FiNTEKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9n cmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9qcy9ncmFudF93 aXphcmQuanMKQEAgLTAsMCArMSwxMDgzIEBACitkZWZpbmUoWworICAgICAg J2pxdWVyeScsICd1bmRlcnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5nJywg J2FsZXJ0aWZ5JywKKyAgICAgICdwZ2FkbWluLmJyb3dzZXInLCAnYmFja2Jv bmUnLCAnYmFja2dyaWQnLCAncGdhZG1pbi5icm93c2VyLm5vZGUnLAorICAg ICAgJ2JhY2tncmlkLnNlbGVjdC5hbGwnLCAnYmFja2dyaWQuZmlsdGVyJywg J3BnYWRtaW4uYnJvd3Nlci5zZXJ2ZXIucHJpdmlsZWdlJywKKyAgICAgICdw Z2FkbWluLmJyb3dzZXIud2l6YXJkJywKKyAgICAgIF0sCisKKyAgLy8gVGhp cyBkZWZpbmVzIEdyYW50IFdpemFyZCBkaWFsb2cKKyAgZnVuY3Rpb24oJCwg XywgUywgYWxlcnRpZnksIHBnQnJvd3NlciwgQmFja2JvbmUsIEJhY2tncmlk LCBwZ05vZGUpIHsKKworICAgIC8vIGlmIG1vZHVsZSBpcyBhbHJlYWR5IGlu aXRpYWxpemVkLCByZWZlciB0byB0aGF0LgorICAgIGlmIChwZ0Jyb3dzZXIu R3JhbnRXaXphcmQpIHsKKyAgICAgIHJldHVybiBwZ0Jyb3dzZXIuR3JhbnRX aXphcmQ7CisgICAgfQorCisgICAgLyoqCisgICAgICBJdCBpcyBzdWIgbW9k ZWwgZm9yIGZpZWxkICJPYmplY3RzIi4gSXQgaGFzIGZpZWxkcworICAgICAg Zm9yIGRhdGFiYXNlIG9iamVjdCB0eXBlcyBzdWNoIGFzIFNjaGVtYXMsIFZp ZXdzIGFuZAorICAgICAgU2VxdWVuY2UgZXRjLgorICAgICovCisgICAgdmFy IERhdGFiYXNlT2JqZWN0TW9kZWwgPSBwZ05vZGUuTW9kZWwuZXh0ZW5kKHsK KyAgICAgIGRlZmF1bHRzOiB7CisgICAgICAgIHNlbGVjdGVkOiBmYWxzZSwK KyAgICAgICAgaWNvbjogJ2ljb24tdW5rbm93bicsCisgICAgICAgIG5hbWU6 IHVuZGVmaW5lZCwKKyAgICAgICAgbmFtZV93aXRoX2FyZ3M6IHVuZGVmaW5l ZCwKKyAgICAgICAgbnNwbmFtZTogdW5kZWZpbmVkLAorICAgICAgICBwcm9h cmdzOiB1bmRlZmluZWQsCisgICAgICAgIG9iamVjdF90eXBlOiB1bmRlZmlu ZWQsCisgICAgICAgIG9iamVjdF9pZDogdW5kZWZpbmVkCisgICAgICB9LAor ICAgICAgaWRBdHRyaWJ1dGU6ICdvYmplY3RfaWQnLCAvLyB0byB1bmlxdWVs eSBpZGVudGlmeSBhIG1vZGVsIG9iamVjdAorICAgICAgdG9KU09OOiBmdW5j dGlvbihvYmopIHsKKyAgICAgICAgdmFyIGQgPSBwZ05vZGUuTW9kZWwucHJv dG90eXBlLnRvSlNPTi5hcHBseSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGQu aWNvbjsKKyAgICAgICAgcmV0dXJuIGQ7CisgICAgICB9LAorICAgICAgcGFy c2U6IGZ1bmN0aW9uKHJlcykgeworCisgICAgICAgIC8vIENyZWF0ZSB1bmlx dWUgb2JqZWN0IGlkCisgICAgICAgIHJlcy5vYmplY3RfaWQgPSByZXMubmFt ZV93aXRoX2FyZ3M7CisKKyAgICAgICAgLy8gY3JlYXRlIG5hbWUgd2l0aCBh cmdzIGlmIGl0cyBvYmplY3QgaXMgZnVuY3Rpb24KKyAgICAgICAgaWYoIV8u aXNVbmRlZmluZWQocmVzLm9iamVjdF90eXBlKSAmJiAocmVzLm9iamVjdF90 eXBlID09ICdGdW5jdGlvbicgfHwKKyAgICAgICAgICByZXMub2JqZWN0X3R5 cGUgPT0gJ1RyaWdnZXIgRnVuY3Rpb24nKSkKKyAgICAgICAgICByZXMubmFt ZV93aXRoX2FyZ3MgPSByZXMubmFtZSsnKCcrKHR5cGVvZihyZXMucHJvYXJn cykgIT0gJ3VuZGVmaW5lZCcgPyByZXMucHJvYXJncyA6ICcnKSsnKSc7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICByZXMubmFtZV93aXRoX2FyZ3MgPSBy ZXMubmFtZTsKKworICAgICAgICByZXR1cm4gcmVzOworICAgICAgfSwKKwor ICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uKCkgeworCisgICAgICAgIC8qCisg ICAgICAgICogVHJpZ2dlcnMgZXJyb3IgbWVzc2FnZXMgZm9yIG9iamVjdCB0 eXBlcyAic2VsZWN0ZWQiCisgICAgICAgICogaWYgaXQgaXMgZW1wdHkvdW5k ZWZpbmVkL251bGwKKyAgICAgICAgKi8KKyAgICAgICAgdmFyIGVyciA9IHt9 LAorICAgICAgICAgIGVycm1zZywKKyAgICAgICAgICBub2RlID0gdGhpcy5n ZXQoJ29iamVjdHMnKS50b0pTT04oKTsKKyAgICAgICAgaWYgKF8uaXNFbXB0 eShub2RlKSkgeworICAgICAgICAgIGVyclsnc2VsZWN0ZWQnXSA9ICd7eyBf KCJQbGVhc2Ugc2VsZWN0IGFueSBkYXRhYmFzZSBvYmplY3QgdHlwZSIpIH19 JzsKKyAgICAgICAgICBlcnJtc2cgPSBlcnJtc2cgfHwgZXJyWydzZWxlY3Rl ZCddOworICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ3NlbGVjdGVk JywgZXJybXNnKTsKKyAgICAgICAgICByZXR1cm4gZXJybXNnOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgn c2VsZWN0ZWQnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsK KyAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIERlZmluZSBjb2x1bW5zIGZv ciB0aGUgRGIgT2JqZWN0IFR5cGVzIGdyaWQKKyAgICB2YXIgY29sdW1ucyA9 IFt7CisgICAgICBuYW1lOiAic2VsZWN0ZWQiLAorCisgICAgICAvKgorICAg ICAgT3ZlcnJpZGUgcmVuZGVyIG1ldGhvZCBvZiBCYWNrZ3JpZC5FeHRlbnNp b24uU2VsZWN0Um93Q2VsbAorICAgICAgY2xhc3MuIEl0IGhhcyBhbiBpc3N1 ZTogSXQgZG9lc24ndCBtYXJrIHJvd3MgY2hlY2tlZCBpZiB3ZSBtb3ZlIHRv IG5leHQKKyAgICAgIHBhZ2UgYW5kIHRoZW4gZ28gYmFjayB0byBwcmV2aW91 cyBwYWdlLiBidXQgaXQgbXVzdCBzaG93LgorICAgICAgc28gd2UgaGFuZGxl IHRoaXMgY2FzZSBieSBvdmVycmlkaW5nIHRoZSByZW5kZXIgbWV0aG9kLgor ICAgICAgKi8KKyAgICAgIGNlbGw6IEJhY2tncmlkLkV4dGVuc2lvbi5TZWxl Y3RSb3dDZWxsLmV4dGVuZCh7CisgICAgICAgIHJlbmRlcjogZnVuY3Rpb24o KSB7CisKKyAgICAgICAgICAvLyBVc2UgdGhlIEJhY2tmb3JtIENvbnRyb2wn cyByZW5kZXIgZnVuY3Rpb24KKyAgICAgICAgICBCYWNrZ3JpZC5FeHRlbnNp b24uU2VsZWN0Um93Q2VsbC5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMs IGFyZ3VtZW50cyk7CisKKyAgICAgICAgICB2YXIgY29sID0gdGhpcy5jb2x1 bW4uZ2V0KCduYW1lJyk7CisgICAgICAgICAgaWYgKHRoaXMubW9kZWwgJiYg dGhpcy5tb2RlbC5oYXMoY29sKSkgeworICAgICAgICAgICAgaWYgKHRoaXMu bW9kZWwuZ2V0KGNvbCkpIHsKKyAgICAgICAgICAgICAgdGhpcy5jaGVja2Jv eCgpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsKKyAgICAgICAgICAgICAgdGhp cy4kZWwucGFyZW50KCkudG9nZ2xlQ2xhc3MoInNlbGVjdGVkIiwgdHJ1ZSk7 CisgICAgICAgICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigiYmFja2dyaWQ6 c2VsZWN0ZWQiLCB0aGlzLm1vZGVsLCB0cnVlKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg IH0KKyAgICAgIH0pLAorCisgICAgICBoZWFkZXJDZWxsOiAic2VsZWN0LWFs bCIsCisKKyAgICB9LHsKKyAgICAgIG5hbWU6ICJvYmplY3RfdHlwZSIsCisg ICAgICBsYWJlbDogIk9iamVjdCBUeXBlIiwKKyAgICAgIGVkaXRhYmxlOiBm YWxzZSwKKyAgICAgIGNlbGw6IEJhY2tncmlkLkNlbGwuZXh0ZW5kKHsKKyAg ICAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgIC8vIE92 ZXJyaWRlIHJlbmRlciB0byBhZGQgaWNvbiB0byBEYiBPYmplY3QgY29sdW1u CisgICAgICAgICAgQmFja2dyaWQuQ2VsbC5wcm90b3R5cGUucmVuZGVyLmFw cGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgdGhpcy4kZWwuYWRk Q2xhc3ModGhpcy5tb2RlbC5nZXQoJ2ljb24nKSkuY3NzKHsicGFkZGluZy1s ZWZ0IjogIjI0cHgifSk7CisKKyAgICAgICAgICByZXR1cm4gdGhpczsKKyAg ICAgICAgfQorICAgICAgfSkKKyAgICB9LHsKKyAgICAgIG5hbWU6ICJuc3Bu YW1lIiwKKyAgICAgIGxhYmVsOiAiU2NoZW1hIiwKKyAgICAgIGNlbGw6ICJz dHJpbmciLAorICAgICAgZWRpdGFibGU6IGZhbHNlCisgICAgfSx7CisgICAg ICBuYW1lOiAibmFtZV93aXRoX2FyZ3MiLAorICAgICAgbGFiZWw6ICJOYW1l IiwKKyAgICAgIGNlbGw6ICJzdHJpbmciLAorICAgICAgZWRpdGFibGU6IGZh bHNlCisgICAgfV07CisKKyAgICAvLyBDcmVhdGUgYW4gT2JqZWN0IEdyYW50 V2l6YXJkIG9mIHBnQnJvd3NlciBjbGFzcworICAgIHBnQnJvd3Nlci5HcmFu dFdpemFyZCAgPSB7CisgICAgICBpbml0OiBmdW5jdGlvbigpIHsKKyAgICAg ICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgcmV0dXJuOwor CisgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgICAg IC8vIERlZmluZSBsaXN0IG9mIG5vZGVzIG9uIHdoaWNoIGdyYW50IHdpemFy ZCBjb250ZXh0IG1lbnUgb3B0aW9uIGFwcGVhcnMKKyAgICAgICAgdmFyIHN1 cHBvcnRlZF9ub2RlcyA9IFsKKyAgICAgICAgICAgICAgJ3NjaGVtYScsICdj b2xsLWZ1bmN0aW9uJywKKyAgICAgICAgICAgICAgJ2NvbGwtc2VxdWVuY2Un LCAnY29sbC10YWJsZScsCisgICAgICAgICAgICAgICdjb2xsLXZpZXcnLCAn Y29sbC1tYXRlcmlhbGl6ZWRfdmlldycKKyAgICAgICAgICAgIF0sCisKKyAg ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICBFbmFibGUvZGlzYWJsZSBn cmFudHdpemFyZCBtZW51IGluIHRvb2xzIGJhc2VkCisgICAgICAgICAgICAg IG9uIG5vZGUgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgaWYgc2VsZWN0ZWQg bm9kZSBpcyBwcmVzZW50IGluIHN1cHBvcnRlZF9ub2RlcywKKyAgICAgICAg ICAgICAgbWVudSB3aWxsIGJlIGVuYWJsZWQgb3RoZXJ3aXNlIGRpc2FibGVk LgorICAgICAgICAgICAgICBBbHNvLCBoaWRlIGl0IGZvciBzeXN0ZW0gdmll dyBpbiBjYXRhbG9ncworICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1l bnVfZW5hYmxlZCA9IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVtLCBkYXRhKSB7 CisgICAgICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkgPSBp dGVtLCBkID0gaXRlbURhdGE7CisgICAgICAgICAgICAgIHZhciBwYXJlbnRf aXRlbSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSk6IG51bGwsCisg ICAgICAgICAgICAgICAgICBwYXJlbnRfZGF0YSA9IHBhcmVudF9pdGVtID8g dC5pdGVtRGF0YShwYXJlbnRfaXRlbSkgOiBudWxsOworICAgICAgICAgICAg ICBpZighXy5pc1VuZGVmaW5lZChkKSAmJiAhXy5pc051bGwoZCkgJiYgIV8u aXNOdWxsKHBhcmVudF9kYXRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g KChfLmluZGV4T2Yoc3VwcG9ydGVkX25vZGVzLCBkLl90eXBlKSAhPT0gLTEg JiYgcGFyZW50X2RhdGEuX3R5cGUgIT0gJ2NhdGFsb2cnKSA/IHRydWU6IGZh bHNlKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gRGVm aW5lIHRoZSBub2RlcyBvbiB3aGljaCB0aGUgbWVudXMgdG8gYmUgYXBwZWFy CisgICAgICAgIHZhciBtZW51cyA9IFt7CisgICAgICAgICAgbmFtZTogJ2dy YW50X3dpemFyZF9zY2hlbWEnLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAg YXBwbGllczogWyd0b29scyddLCBjYWxsYmFjazogJ3N0YXJ0X2dyYW50X3dp emFyZCcsCisgICAgICAgICAgcHJpb3JpdHk6IDEwLCBsYWJlbDogJ3t7Xygi R3JhbnQgV2l6YXJkLi4uIikgfX0nLAorICAgICAgICAgIGljb246ICd3Y1Rh Ykljb24nLCBlbmFibGU6IG1lbnVfZW5hYmxlZAorICAgICAgICB9XTsKKwor ICAgICAgICAvLyBBZGQgc3VwcG9ydGVkIG1lbnVzIGludG8gdGhlIG1lbnVz IGxpc3QKKyAgICAgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgc3VwcG9y dGVkX25vZGVzLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICBtZW51cy5w dXNoKHsKKyAgICAgICAgICAgIG5hbWU6ICdncmFudF93aXphcmRfc2NoZW1h X2NvbnRleHRfJyArIHN1cHBvcnRlZF9ub2Rlc1tpZHhdLAorICAgICAgICAg ICAgbm9kZTogc3VwcG9ydGVkX25vZGVzW2lkeF0sIG1vZHVsZTogdGhpcywK KyAgICAgICAgICAgIGFwcGxpZXM6IFsnY29udGV4dCddLCBjYWxsYmFjazog J3N0YXJ0X2dyYW50X3dpemFyZCcsCisgICAgICAgICAgICBwcmlvcml0eTog MTAsIGxhYmVsOiAne3tfKCJHcmFudCBXaXphcmQuLi4iKSB9fScsCisgICAg ICAgICAgICBpY29uOiAnd2NUYWJJY29uJywgZW5hYmxlOiBtZW51X2VuYWJs ZWQKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHBnQWRt aW4uQnJvd3Nlci5hZGRfbWVudXMobWVudXMpOworCisgICAgICAgIHJldHVy biB0aGlzOworICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJhY2sgdG8gZHJh dyBXaXphcmQgRGlhbG9nCisgICAgICBzdGFydF9ncmFudF93aXphcmQ6IGZ1 bmN0aW9uKGFjdGlvbiwgaXRlbSkgeworCisgICAgICAgIC8vIERlY2xhcmUg V2l6YXJkIGRpYWxvZworICAgICAgICBpZiAoIWFsZXJ0aWZ5LndpemFyZERp YWxvZykgeworICAgICAgICAgIGFsZXJ0aWZ5LmRpYWxvZygnd2l6YXJkRGlh bG9nJywgZnVuY3Rpb24gZmFjdG9yeSgpIHsKKworICAgICAgICAgICAgLy8g R2VuZXJhdGUgd2l6YXJkIG1haW4gY29udGFpbmVyCisgICAgICAgICAgICB2 YXIgJGNvbnRhaW5lciA9ICQoIjxkaXYgY2xhc3M9J3dpemFyZF9kbGcnPjwv ZGl2PiIpOworCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg ICBtYWluOiBmdW5jdGlvbih0aXRsZSkgeworICAgICAgICAgICAgICAgIHRo aXMuc2V0KCd0aXRsZScsIHRpdGxlKTsKKyAgICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgICAgc2V0dXA6ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg ICAgcmV0dXJuIHsKKworICAgICAgICAgICAgICAgICAgLy8gU2V0IG9wdGlv bnMgZm9yIGRpYWxvZworICAgICAgICAgICAgICAgICAgb3B0aW9uczogewor ICAgICAgICAgICAgICAgICAgICBmcmFtZWxlc3M6IHRydWUsCisgICAgICAg ICAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsCisgICAgICAgICAgICAg ICAgICAgIGF1dG9SZXNldDogZmFsc2UsCisgICAgICAgICAgICAgICAgICAg IG1heGltaXphYmxlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgY2xv c2FibGVCeURpbW1lcjogZmFsc2UKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICB9LAorICAgICAgICAg ICAgICBob29rczp7CisgICAgICAgICAgICAgICAgb25zaG93OiBmdW5jdGlv bigpIHsKKworICAgICAgICAgICAgICAgICAgLy8gU2V0IGRpbWVuc2lvbnMg Zm9yIHdpemFyZAorICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5k aWFsb2cuc3R5bGUud2lkdGggPSAnMTAwJSc7CisgICAgICAgICAgICAgICAg ICB0aGlzLmVsZW1lbnRzLmRpYWxvZy5zdHlsZS5oZWlnaHQgPSAnNjglJzsK KworICAgICAgICAgICAgICAgICAgLy8gQWRkIHBnYWRtaW5fZ3JhbnRfd2l6 YXJkX2JvZHkgY2xhc3MgdG8gZGlhbG9nCisgICAgICAgICAgICAgICAgICAk KHRoaXMuZWxlbWVudHMuYm9keSkuYWRkQ2xhc3MoJ3BnYWRtaW5fZ3JhbnRf d2l6YXJkX2JvZHknKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg ICAgICB9LAorCisgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAg IFJldHVybnMgYSBQYWdpbmF0b3IgQ2xhc3MgT2JqZWN0IHdoaWNoIGlzIGFn YWluIHRvIGJlIHJlbmRlcmVkCisKKyAgICAgICAgICAgICAgICBAY2xhc3Mg e0JhY2tncmlkLkV4dGVuc2lvbi5QYWdpbmF0b3J9CisgICAgICAgICAgICAg ICAgQHBhcmFtIHtCYWNrYm9uZS5Db2xsZWN0aW9ufSBjb2xsIC0gZnJvbSB3 aGljaCBkYXRhIGlzIGZldGNoZWQKKyAgICAgICAgICAgICAgICBAcmV0dXJu IHtPYmplY3R9IHBhZ2luYXRvcgorICAgICAgICAgICAgICAqLworICAgICAg ICAgICAgICBEYlBhZ2luYXRvcjogZnVuY3Rpb24oY29sbCl7CisgICAgICAg ICAgICAgICAgdmFyIHBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yID0gbmV3 IEJhY2tncmlkLkV4dGVuc2lvbi5QYWdpbmF0b3IoeworICAgICAgICAgICAg ICAgICAgY29sbGVjdGlvbjogY29sbCwKKyAgICAgICAgICAgICAgICAgIHdp bmRvd1NpemU6IDgKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gcGFnaW5hdG9yOworICAgICAgICAgICAgICB9LAorCisg ICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgIENyZWF0ZSBuZXcg RmlsdGVyIHdoaWNoIHdpbGwgZmlsdGVyIHRoZQorICAgICAgICAgICAgICAg IHJlbmRlcmVkIGdyaWQgZm9yIFNlbGVjdCBUeXBlIFRhYnVsYXIgRGF0YQor ICAgICAgICAgICAgICAgIEBwYXJhbSB7QmFja2JvbmUuUGFnZWFibGVDb2xs ZWN0aW9ufSBjb2xsCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICAg IERiT2JqZWN0RmlsdGVyOiBmdW5jdGlvbihjb2xsKXsKKyAgICAgICAgICAg ICAgICB2YXIgY2xpZW50U2lkZUZpbHRlciA9IHRoaXMuY2xpZW50U2lkZUZp bHRlciA9IG5ldyBCYWNrZ3JpZC5FeHRlbnNpb24uQ2xpZW50U2lkZUZpbHRl cih7CisgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsLAorICAg ICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF8oJ1NlYXJjaCBieSBvYmpl Y3QgdHlwZSBvciBuYW1lJyksCisKKyAgICAgICAgICAgICAgICAgIC8vIFRo ZSBtb2RlbCBmaWVsZHMgdG8gc2VhcmNoIGZvciBtYXRjaGVzCisgICAgICAg ICAgICAgICAgICBmaWVsZHM6IFsnb2JqZWN0X3R5cGUnLCAnbmFtZSddLAor CisgICAgICAgICAgICAgICAgICAvLyBIb3cgbG9uZyB0byB3YWl0IGFmdGVy IHR5cGluZyBoYXMgc3RvcHBlZCBiZWZvcmUgc2VhcmNoaW5nIGNhbiBzdGFy dAorICAgICAgICAgICAgICAgICAgd2FpdDogMTUwCisgICAgICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNpZGVGaWx0 ZXI7CisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgLy9FbmFi bGUgRGlzYWJsZSBOZXh0IGJ1dHRvbiBvZiBQYWdlIDIKKyAgICAgICAgICAg ICAgdXBkYXRlQnV0dG9uczogZnVuY3Rpb24obW9kaWZpZWQpeworICAgICAg ICAgICAgICAgIGlmKCFtb2RpZmllZCkKKyAgICAgICAgICAgICAgICAgICQo Jy53aXphcmQtbmV4dCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgJCgnLndpemFy ZC1uZXh0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICAg ICAgIH0sCisKKyAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAg Q2FsbGJhY2sgY2FsbGVkIHdoZW4gYW4gZXJyb3JNb2RlbCBpcyBzZXQKKyAg ICAgICAgICAgICAgICB3aXRoIGludmFsaWQgdmFsdWUgYW5kIGVycm9ybXNn IGlzIHNldCBpbnRvCisgICAgICAgICAgICAgICAgc3RhdHVzIGJhciBlbGVt ZW50IGFuZCBuZXh0IGJ1dHRvbiBpcyBkaXNhYmxlZAorICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICBvblNlc3Npb25JbnZhbGlkOiBmdW5jdGlv bihtc2cpIHsKKyAgICAgICAgICAgICAgICAkKCcuZXJyb3JfbXNnX2RpdiBw JykuaHRtbChtc2cpLnJlbW92ZUNsYXNzKCJoaWRlIik7CisKKyAgICAgICAg ICAgICAgICAvLyBFbmFibGUgZGlzYWJsZSBOZXh0IGJ1dHRvbgorICAgICAg ICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9ucyhmYWxzZSk7CisgICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgIH0sCisKKyAg ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgY2Fs bGVkIHdoZW4gYW55dGhpbmcgaXMgc2V0IGludG8gbW9kZWwKKyAgICAgICAg ICAgICAgICB0aHVzIGhpZGUgZXJyb3IgbXNnIGVsZW1lbnQgYW5kIGVuYWJs ZSBuZXh0IGJ1dHRvbgorICAgICAgICAgICAgICAgIHN0YXR1cyBiYXIgZWxl bWVudCBhbmQgbmV4dCBidXR0b24gaXMgZGlzYWJsZWQKKyAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgb25TZXNzaW9uVmFsaWRhdGVkOiBmdW5j dGlvbihzZXNzSGFzQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgICQoJy5l cnJvcl9tc2dfZGl2IHAnKS5lbXB0eSgpLmFkZENsYXNzKCJoaWRlIik7CisK KyAgICAgICAgICAgICAgICAvLyBFbmFibGUgZGlzYWJsZSBOZXh0IGJ1dHRv bgorICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9ucyhzZXNzSGFz Q2hhbmdlZCk7CisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAg LyoqCisgICAgICAgICAgICAgICAgUmVtb3ZlL0RlbGV0ZSBvYmplY3RzLCBh dHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgaW4gd2l6YXJkIG9uIHdpemFy ZCBjbG9zZSBvciBmaW5pc2gKKyAgICAgICAgICAgICAgICB0byByZWNsYWlt IG1lbW9yeQorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICByZWxl YXNlT2JqZWN0czogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB2YXIg c2VsZiA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICBpZighXy5pc1VuZGVm aW5lZChzZWxmLmRiT2JqZWN0RmlsdGVyKSkgeworICAgICAgICAgICAgICAg ICAgc2VsZi5kYk9iamVjdEZpbHRlci5yZW1vdmUoKTsKKyAgICAgICAgICAg ICAgICAgIHNlbGYuZGJPYmplY3RGaWx0ZXIgPSB1bmRlZmluZWQ7CisgICAg ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoIV8uaXNVbmRl ZmluZWQoc2VsZi5jbGllbnRTaWRlRmlsdGVyKSkgeworICAgICAgICAgICAg ICAgICAgc2VsZi5jbGllbnRTaWRlRmlsdGVyLnJlbW92ZSgpOworICAgICAg ICAgICAgICAgICAgc2VsZi5jbGllbnRTaWRlRmlsdGVyID0gdW5kZWZpbmVk OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNs ZWFyIG9iamVjdCBwcml2IGFycmF5CisgICAgICAgICAgICAgICAgaWYoIV8u aXNOdWxsKHNlbGYub2JqX3ByaXYpICYmCisgICAgICAgICAgICAgICAgICAh Xy5pc1VuZGVmaW5lZChzZWxmLm9ial9wcml2KSkgeworICAgICAgICAgICAg ICAgICAgc2VsZi5vYmpfcHJpdiA9IFtdOworICAgICAgICAgICAgICAgICAg ZGVsZXRlIHNlbGYub2JqX3ByaXY7CisgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgLy8gRGVsZXRlIFdpemFyZCBQYWdlcworICAgICAg ICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKHNlbGYuZGJPYmplY3RUeXBl UGFnZSkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlzTnVsbChzZWxmLmRi T2JqZWN0VHlwZVBhZ2UpKSB7CisgICAgICAgICAgICAgICAgICBpZighXy5p c1VuZGVmaW5lZChzZWxmLmRiT2JqZWN0VHlwZVBhZ2UuZ2V0KCdtb2RlbCcp KSAmJgorICAgICAgICAgICAgICAgICAgICAhXy5pc051bGwoc2VsZi5kYk9i amVjdFR5cGVQYWdlLmdldCgnbW9kZWwnKSkpIHsKKyAgICAgICAgICAgICAg ICAgICAgc2VsZi5kYk9iamVjdFR5cGVQYWdlLmdldCgnbW9kZWwnKS5jbGVh cigpOworICAgICAgICAgICAgICAgICAgICBzZWxmLmRiT2JqZWN0VHlwZVBh Z2UuZ2V0KCd2aWV3JykuY2xlYW51cCgpOworICAgICAgICAgICAgICAgICAg ICBzZWxmLmRiT2JqZWN0VHlwZVBhZ2UgPSB1bmRlZmluZWQ7CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg ICAgICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5wcml2aWxlZ2VQYWdlKSAm JgorICAgICAgICAgICAgICAgICAgIV8uaXNOdWxsKHNlbGYucHJpdmlsZWdl UGFnZSkpIHsKKyAgICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVk KHNlbGYucHJpdmlsZWdlUGFnZS5nZXQoJ21vZGVsJykpICYmCisgICAgICAg ICAgICAgICAgICAgICFfLmlzTnVsbChzZWxmLnByaXZpbGVnZVBhZ2UuZ2V0 KCdtb2RlbCcpKSkgeworICAgICAgICAgICAgICAgICAgICBzZWxmLnByaXZp bGVnZVBhZ2UuZ2V0KCdtb2RlbCcpLmNsZWFyKCk7CisgICAgICAgICAgICAg ICAgICAgIHNlbGYucHJpdmlsZWdlUGFnZS5nZXQoJ3ZpZXcnKS5jbGVhbnVw KCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpdmlsZWdlUGFnZSA9 IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChz ZWxmLnJldmlld1NRTFBhZ2UpICYmCisgICAgICAgICAgICAgICAgICAhXy5p c051bGwoc2VsZi5yZXZpZXdTUUxQYWdlKSkgeworICAgICAgICAgICAgICAg ICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5yZXZpZXdTUUxQYWdlLmdldCgn bW9kZWwnKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIV8uaXNOdWxsKHNl bGYucmV2aWV3U1FMUGFnZS5nZXQoJ21vZGVsJykpKSB7CisgICAgICAgICAg ICAgICAgICAgIHNlbGYucmV2aWV3U1FMUGFnZS5nZXQoJ21vZGVsJykuY2xl YXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXZpZXdTUUxQYWdl ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNsZWFyIHByaXZNb2Rl bAorICAgICAgICAgICAgICAgIGlmKCFfLmlzTnVsbChzZWxmLnByaXZNb2Rl bCkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKHNlbGYu cHJpdk1vZGVsKSkgeworICAgICAgICAgICAgICAgICAgc2VsZi5wcml2TW9k ZWwuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICAvLyBSZW1vdmUgY29sbGVjdGlvbiBjb250YWluaW5nIGRiIG9iamVj dCBkYXRhCisgICAgICAgICAgICAgICAgaWYoIV8uaXNOdWxsKHNlbGYuY29s bCkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKHNlbGYu Y29sbCkpIHsKKyAgICAgICAgICAgICAgICAgIHNlbGYuY29sbC5yZXNldCgp OworICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsID0gdW5kZWZpbmVkOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEZWxldGUg V2l6YXJkCisgICAgICAgICAgICAgICAgaWYoIV8uaXNOdWxsKHNlbGYud2l6 YXJkKSAmJgorICAgICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQoc2Vs Zi53aXphcmQpKSB7CisgICAgICAgICAgICAgICAgICBzZWxmLndpemFyZC5j b2xsZWN0aW9uLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICBzZWxmLndp emFyZC5jdXJyX3BhZ2UgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAg ICBzZWxmLndpemFyZC5lbCA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg ICAgIHNlbGYud2l6YXJkLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAg c2VsZi53aXphcmQgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgLyoqCisgICAg ICAgICAgICAgICAgRXZlcnkgdGltZSBhIHdpemFyZCBpcyBvcGVuZWQsIHRo aXMgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBpcyBjYWxsZWQgZXZlcnl0 aW1lLiBJdCBoYXMgV2l6YXJkIFBhZ2VzIHdoaWNoCisgICAgICAgICAgICAg ICAgYXJlIHJlbmRlcmVkIGJ5IHRoZSBXaXphcmQgQ2xhc3M6CisKKyAgICAg ICAgICAgICAgICBAY2xhc3Mge3BnQnJvd3Nlci5XaXphcmRQYWdlfSBkYk9i amVjdFR5cGUxIC0gVGhpcyBwYWdlCisgICAgICAgICAgICAgICAgQGV4dGVu ZHMge0JhY2tib25lLk1vZGVsfQorICAgICAgICAgICAgICAgIHJlbmRlcnMg YSBncmlkIG9mIERhdGFiYXNlIE9iamVjdCBUeXBlcyBzdWNoIGFzCisgICAg ICAgICAgICAgICAgICBTY2hlbWFzLCBWaWV3cyBhbmQgU2VxdWVuY2VzIGV0 Yy4KKworICAgICAgICAgICAgICAgIEBjbGFzcyB7cGdCcm93c2VyLldpemFy ZFBhZ2V9IFdpemFyZFBhZ2UyIC0gVGhpcyBwYWdlCisgICAgICAgICAgICAg ICAgQGV4dGVuZHMge0JhY2tib25lLk1vZGVsfQorICAgICAgICAgICAgICAg IGFkZHMgUHJpdmlsZWdlIENvbnRyb2wgd2hpY2ggcHJvdmlkZXMgZ3JhbnQg cHJpdmlsZWdlcworICAgICAgICAgICAgICAgIHN1Y2ggYXMgIkNyZWF0ZSwg SW5zZXJ0LCBEZWxldGUsIFVwZGF0ZSIgc28gb24gdGhlCisgICAgICAgICAg ICAgICAgZGF0YWJhc2Ugb2JqZWN0cyBzZWxlY3RlZCBvbiBXaXphcmQgUGFn ZXMuCisKKyAgICAgICAgICAgICAgICBAY2xhc3Mge3BnQnJvd3Nlci5XaXph cmRQYWdlfSBXaXphcmRQYWdlMyAtIFRoaXMgcGFnZQorICAgICAgICAgICAg ICAgIGRpc3BsYXlzIHRoZSBnZW5lcmF0ZWQgR1JBTlQgU1FMIHF1ZXJ5IGZv ciB0aGUgRGIKKyAgICAgICAgICAgICAgICBvYmplY3RzIHNlbGVjdGVkIHdp dGggdGhlIHNwZWNpZmljIHByaXZpbGVnZXMgYWRkZWQgdG8gaXQuCisgICAg ICAgICAgICAgICAgQGV4dGVuZHMge0JhY2tib25lLk1vZGVsfQorCisgICAg ICAgICAgICAgICAgQGNsYXNzIHtCYWNrYm9uZS5Db2xsZWN0aW9ufSBXaXph cmRDb2xsZWN0aW9uIC0gSXQgaXMgdGhlCisgICAgICAgICAgICAgICAgY29s bGVjdGlvbiBvZiB3aXphcmQgcGFnZXMKKworICAgICAgICAgICAgICAgIEBj bGFzcyB7cGdCcm93c2VyLldpemFyZH0gd2l6YXJkIC0gSXRzIHRhc2sgaXM6 CisgICAgICAgICAgICAgICAgLSBDcmVhdGUgYSBXaXphcmQKKyAgICAgICAg ICAgICAgICAtIEFkZCBCdXR0b25zLCBDYWxsYmFja3MgdG8gaXQuCisgICAg ICAgICAgICAgICAgLSBSZW5kZXIgV2l6YXJkUGFnZXMKKyAgICAgICAgICAg ICAgICBAZXh0ZW5kcyB7QmFja2JvbmUuVmlld30KKworICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICBidWlsZDogZnVuY3Rpb24oKSB7CisgICAg ICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxk KCRjb250YWluZXIuZ2V0KDApKTsKKyAgICAgICAgICAgICAgfSwKKworICAg ICAgICAgICAgICAvL1JldHVybnMgbGlzdCBvZiBBY2xzIGRlZmluZWQgZm9y IG5vZGVzCisgICAgICAgICAgICAgIGdldF9qc29uX2RhdGE6IGZ1bmN0aW9u KCkgeworICAgICAgICAgICAgICAgIHZhciB1cmwgPSAiL2dyYW50X3dpemFy ZC9hbGxvd2VkX2FjbC5qc29uIjsKKyAgICAgICAgICAgICAgICByZXR1cm4g JC5hamF4KHsKKyAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAg ICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbnAnLAorICAgICAgICAg ICAgICAgICAgdXJsOiB1cmwKKyAgICAgICAgICAgICAgICB9KTsKKworICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICBwcmVwYXJlOmZ1bmN0aW9u KCkgeworCisgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5lbXB0eSgpLmFw cGVuZCgiPGRpdiBjbGFzcz0nZ3JhbnRfd2l6YXJkX2NvbnRhaW5lcic+PC9k aXY+Iik7CisKKyAgICAgICAgICAgICAgICAvLyBEZWZpbmUgZWwgZm9yIHdp emFyZCB2aWV3CisgICAgICAgICAgICAgICAgdmFyIGVsID0gJCgnLmdyYW50 X3dpemFyZF9jb250YWluZXInKTsKKworICAgICAgICAgICAgICAgIC8vIEZl dGNoIHByaXZpbGVnZXMgc3BlY2lmaWMgdG8gbm9kZXMKKyAgICAgICAgICAg ICAgICB2YXIganNvbl9kYXRhID0gdGhpcy5nZXRfanNvbl9kYXRhKCksCisg ICAgICAgICAgICAgICAgICAgIHByaXZEaWN0ID0gSlNPTi5wYXJzZShqc29u X2RhdGEucmVzcG9uc2VUZXh0KTsKKworICAgICAgICAgICAgICAgIC8vIEV4 dHJhY3QgdGhlIGRhdGEgZnJvbSB0aGUgc2VsZWN0ZWQgdHJlZSBub2RlCisg ICAgICAgICAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAg ICAgICAgICAgICAgICAgaSA9IHQuc2VsZWN0ZWQoKSwKKyAgICAgICAgICAg ICAgICAgICAgZCA9IHRoaXMuZCA9IGkgJiYgaS5sZW5ndGggPT0gMSA/IHQu aXRlbURhdGEoaSkgOiB1bmRlZmluZWQsCisgICAgICAgICAgICAgICAgICAg IGluZm8gPSB0aGlzLmluZm8gPSBwZ0Jyb3dzZXIuTm9kZS5nZXRUcmVlTm9k ZUhpZXJhcmNoeShpKSwKKyAgICAgICAgICAgICAgICAgICAgaWNvbiA9IGQu aWNvbjsKKworICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAg ICAgR2VuZXJhdGUgYSBVUkwgdXNpbmc6CisgICAgICAgICAgICAgICAgICBn aWQsIGRpZCwgc2lkKHNlcnZlciBpZCksIG5vZGVfaWQobm9kZSBpZCksCisg ICAgICAgICAgICAgICAgICBub2RlXyhub2RlIG5hbWUpLCBub2RlX3R5cGUo bm9kZSB0eXBlKQorICAgICAgICAgICAgICAgICAgYW5kIHBhc3MgaXQgdG8g Y29sbGVjdGlvbiB3aGljaCB3aWxsIGZldGNoIE9iamVjdCBUeXBlIHByb3Bl cnRpZXMuCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB2 YXIgZ2lkID0gaW5mb1snc2VydmVyLWdyb3VwJ10uX2lkLAorICAgICAgICAg ICAgICAgICAgICBzaWQgPSBpbmZvLnNlcnZlci5faWQsCisgICAgICAgICAg ICAgICAgICAgIGRpZCA9IGluZm8uZGF0YWJhc2UuX2lkLAorICAgICAgICAg ICAgICAgICAgICBub2RlX2lkID0gZC5faWQsCisgICAgICAgICAgICAgICAg ICAgIG5zcG5hbWUgPSBpbmZvLnNjaGVtYS5sYWJlbCwKKyAgICAgICAgICAg ICAgICAgICAgbm9kZV90eXBlID0gZC5fdHlwZS5yZXBsYWNlKCdjb2xsLScs ICcnKS5yZXBsYWNlKCdtYXRlcmlhbGl6ZWRfJywgJycpLAorICAgICAgICAg ICAgICAgICAgICBub2RlX2xhYmVsID0gZC5sYWJlbDsKKworICAgICAgICAg ICAgICAgICAgICAvLyBDb2xsZWN0aW9uIHVybCB0byBmZXRjaCBkYXRhYmFz ZSBvYmplY3QgdHlwZXMgZm9yIG9iamVjdHMgZmllbGQKKyAgICAgICAgICAg ICAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZ3JhbnRfd2l6 YXJkLmluZGV4JykgfX0iICsgInByb3BlcnRpZXMvIiArCisgICAgICAgICAg ICAgICAgICAgICAgICBTKCclcy8lcy8lcy8lcy8lcy8lcy8lcy8nKS5zcHJp bnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSShn aWQpLCBlbmNvZGVVUkkoc2lkKSwgZW5jb2RlVVJJKGRpZCksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKG5vZGVfaWQpLCBlbmNv ZGVVUkkobm9kZV9sYWJlbCksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW5jb2RlVVJJKG5vZGVfdHlwZSksIGVuY29kZVVSSShuc3BuYW1lKSku dmFsdWUoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBNb2RlbCdzIHNh dmUgdXJsCisgICAgICAgICAgICAgICAgICAgIHNhdmVVcmwgPSAie3sgdXJs X2ZvcignZ3JhbnRfd2l6YXJkLmluZGV4JykgfX0iICsgInNhdmUvIiArCisg ICAgICAgICAgICAgICAgICAgICAgICBTKCclcy8lcy8lcy8lcy8lcy8nKS5z cHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVS SShnaWQpLCBlbmNvZGVVUkkoc2lkKSwgZW5jb2RlVVJJKGRpZCksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKG5vZGVfdHlwZSks IGVuY29kZVVSSShuc3BuYW1lKSkudmFsdWUoKSwKKworICAgICAgICAgICAg ICAgICAgICAvLyBnZW5lcmF0ZSBlbmNvZGVkIHVybCBiYXNlZCBvbiB3aXph cmQgdHlwZQorICAgICAgICAgICAgICAgICAgICBtc3FsX3VybCA9IHRoaXMu bXNxbF91cmwgPSAiL2dyYW50X3dpemFyZC9tc3FsLyIrCisgICAgICAgICAg ICAgICAgICAgICAgUygnJXMvJXMvJXMvJXMvJXMvJykuc3ByaW50ZigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKGdpZCksIGVuY29k ZVVSSShzaWQpLCBlbmNvZGVVUkkoZGlkKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgZW5jb2RlVVJJKG5vZGVfdHlwZSksIGVuY29kZVVSSShuc3Bu YW1lKSkudmFsdWUoKSwKKworICAgICAgICAgICAgICAgICAgICBDb2xsID0g QmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAgICAgICAg ICAgICAgIG1vZGVsOiBEYXRhYmFzZU9iamVjdE1vZGVsLAorICAgICAgICAg ICAgICAgICAgICAgIHVybDogYmFzZVVybAorICAgICAgICAgICAgICAgICAg ICB9KSwKKworICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgaW5zdGFu Y2VzIG9mIGNvbGxlY3Rpb24gYW5kIGZpbHRlcgorICAgICAgICAgICAgICAg ICAgICBjb2xsID0gdGhpcy5jb2xsID0gbmV3IENvbGwoKSwKKyAgICAgICAg ICAgICAgICAgICAgZGJPYmplY3RGaWx0ZXIgPSB0aGlzLmRiT2JqZWN0Rmls dGVyID0gdGhpcy5EYk9iamVjdEZpbHRlcihjb2xsKTsKKworICAgICAgICAg ICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgcHJpdkFycmF5IGhvbGRz IG9iamVjdHMgc2VsZWN0ZWQgd2hpY2ggZnVydGhlciBoZWxwcworICAgICAg ICAgICAgICAgICAgaW4gY3JlYXRpbmcgcHJpdmlsZWdlcyBNb2RlbAorICAg ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0 aGlzOworICAgICAgICAgICAgICAgIHNlbGYucHJpdkFycmF5ID0gW107CisK KyAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgIE92ZXJy aWRlIGJhY2tncmlkIGxpc3RlbmVyICJiYWNrZ3JpZDpzZWxlY3RlZCIgdG8K KyAgICAgICAgICAgICAgICAgIEFkZC9SZW1vdmUgbW9kZWwgdG8vZnJvbSBv YmplY3RzIGNvbGxlY3Rpb24KKyAgICAgICAgICAgICAgICAqLworICAgICAg ICAgICAgICAgIGNvbGwub24oJ2JhY2tncmlkOnNlbGVjdGVkJywgZnVuY3Rp b24obW9kZWwsIHNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgICBtb2Rl bC5zZXQoJ3NlbGVjdGVkJywgc2VsZWN0ZWQpOworCisgICAgICAgICAgICAg ICAgICB2YXIgb2JqZWN0X3R5cGUgPSBtb2RlbC5nZXQoJ29iamVjdF90eXBl Jyk7CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9iamVjdF90eXBlKQor ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNl ICdGdW5jdGlvbic6CisgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3R5 cGUgPSAnZnVuY3Rpb24nOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICBjYXNlICdUcmlnZ2VyIEZ1bmN0aW9u JzoKKyAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHlwZSA9ICdmdW5j dGlvbic7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIGNhc2UgJ1RhYmxlJzoKKyAgICAgICAgICAgICAgICAg ICAgICBvYmplY3RfdHlwZSA9ICd0YWJsZSc7CisgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NlcXVl bmNlJzoKKyAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHlwZSA9ICdz ZXF1ZW5jZSc7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIGNhc2UgJ1ZpZXcnOgorICAgICAgICAgICAgICAg ICAgICAgIG9iamVjdF90eXBlID0gJ3RhYmxlJzsKKyAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICAgIGlmIGEgcm93 IChjaGVja2JveCkgaXMgY2hlY2tlZCwgYWRkIHRoYXQgbW9kZWwKKyAgICAg ICAgICAgICAgICAgICAgaW50byBjb2xsZWN0aW9uLCB3aGVuIHVuY2hlY2tl ZCByZW1vdmUgaXQgZnJvbQorICAgICAgICAgICAgICAgICAgICBtb2RlbC4K KworICAgICAgICAgICAgICAgICAgICBBbHNvIHB1c2gvcG9wIG9iamVjdCB0 eXBlIGluL2Zyb20gcHJpdkFycmF5CisgICAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWQpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYoXy5pbmRleE9mKHNlbGYucHJpdkFycmF5LCBvYmplY3Rf dHlwZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcml2 QXJyYXkucHVzaChvYmplY3RfdHlwZSk7CisgICAgICAgICAgICAgICAgICAg IG5ld01vZGVsLmdldCgnb2JqZWN0cycpLmFkZChtb2RlbCwgeyBzaWxlbnQ6 IHRydWUgfSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IHNl bGYucHJpdkFycmF5LmluZGV4T2Yob2JqZWN0X3R5cGUpOworICAgICAgICAg ICAgICAgICAgICBpZihpZHggIT0tMSkKKyAgICAgICAgICAgICAgICAgICAg ICBzZWxmLnByaXZBcnJheS5zcGxpY2UoaWR4LCAxKTsKKyAgICAgICAgICAg ICAgICAgICAgbmV3TW9kZWwuZ2V0KCdvYmplY3RzJykucmVtb3ZlKG1vZGVs KTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg Ly8gdmFsaWRhdGUgbW9kZWwgb24gY2hlY2tib3ggY2hlY2svdW5jaGVjawor ICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICBtb2RlbC52YWxpZGF0ZS5j YWxsKG5ld01vZGVsKTsKKworICAgICAgICAgICAgICAgICAgLyoqCisgICAg ICAgICAgICAgICAgICAgIElmIG5vIG9iamVjdCB0eXBlIGlzIHNlbGVjdGVk LCBzZXQgZXJyb3IgbXNnCisgICAgICAgICAgICAgICAgICAgIGFuZCBkaXNh YmxlIG5leHQgYnV0dG9uLCBlbHNlIGVuYWJsZSBuZXh0IGJ1dHRvbgorICAg ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIGlmKG1zZykK KyAgICAgICAgICAgICAgICAgICAgc2VsZi5vblNlc3Npb25JbnZhbGlkLmNh bGwoc2VsZiwgbXNnKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICAgICAgc2VsZi5vblNlc3Npb25WYWxpZGF0ZWQuY2FsbChz ZWxmLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg ICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgSXQgaXMgdGhlIG1haW4g bW9kZWwgd2l0aCBzY2hlbWEgZGVmaW5lZAorICAgICAgICAgICAgICAgICAg RXZlcnkgdGltZSBhIG5ldyB3aXphcmQgaXMgb3BlbmVkLAorICAgICAgICAg ICAgICAgICAgYSBuZXcgbW9kZWwgc2hvdWxkIGNyZWF0ZS4KKyAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgIHZhciBHcmFudFdpemFyZE1v ZGVsID0gcGdOb2RlLk1vZGVsLmV4dGVuZCh7CisgICAgICAgICAgICAgICAg ICBkZWZhdWx0czogeworICAgICAgICAgICAgICAgICAgICBvYmplY3RzOiB1 bmRlZmluZWQsCisgICAgICAgICAgICAgICAgICAgIGFjbDogdW5kZWZpbmVk CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgc2No ZW1hOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICBpZDogJ29iamVjdHMnLCBsYWJlbDogJ3t7IF8oIk9iamVjdHMi KSB9fScsIG1vZGVsOiBEYXRhYmFzZU9iamVjdE1vZGVsLAorICAgICAgICAg ICAgICAgICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJywgZ3JvdXA6ICdPYmpl Y3RzJworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdhY2wnLCBsYWJl bDogJ3t7IF8oIlByaXZpbGVnZXMiKSB9fScsCisgICAgICAgICAgICAgICAg ICAgICAgbW9kZWw6IHBnQWRtaW4uQnJvd3Nlci5Ob2RlLlByaXZpbGVnZVJv bGVNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29sbGVj dGlvbicsIGNhbkFkZDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBj YW5EZWxldGU6IHRydWUsIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rp b24nCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg IF0sCisgICAgICAgICAgICAgICAgICB1cmxSb290OiBzYXZlVXJsCisgICAg ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvKioKKyAgICAg ICAgICAgICAgICAgIENyZWF0ZSBpbnN0YW5jZSBvZiBHcmFudFdpemFyZCBN b2RlbCwgcHJvdmlkZSB1cmxSb290CisgICAgICAgICAgICAgICAgICBub2Rl X2luZm8gb2JqZWN0LCBHZW5lcmF0ZSBmaWVsZHMgb2JqZWN0cworICAgICAg ICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0g bmV3IEdyYW50V2l6YXJkTW9kZWwoe30sIHsgbm9kZV9pbmZvOiBpbmZvIH0p OworCisgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICBG ZXRjaCBkYXRhIGZyb20gc2VydmVyIGFuZCBzZXQgaW50byBncmlkCisgICAg ICAgICAgICAgICAgICBhbmQgc2hvdy9oaWRlIHByb2dyZXNzIGJhcgorICAg ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgJCgnLndpemFyZC1w cm9ncmVzcy1iYXIgcCcpLnNob3coKTsKKworICAgICAgICAgICAgICAgIGNv bGwuZmV0Y2goeworICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rp b24oY29sbGVjdGlvbiwgZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAk KCcud2l6YXJkLXByb2dyZXNzLWJhciBwJykuaHRtbCgnJyk7CisgICAgICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgcmVzZXQ6IHRydWUK KyAgICAgICAgICAgICAgICB9LCB0aGlzKTsKKworICAgICAgICAgICAgICAg IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgICAgICAgICAv LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g ICAgICAgICAgICBXaXphcmQgUGFnZSBmb3IgRGIgT2JqZWN0IFR5cGUgICAg ICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgICAgICAgICAvKioKKyAg ICAgICAgICAgICAgICAgIENyZWF0ZSB3aXphcmQgcGFnZS4gSXQgcmVuZGVy cyBhIGdyaWQgb2YKKyAgICAgICAgICAgICAgICAgIERhdGFiYXNlIE9iamVj dCBUeXBlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICBTY2hlbWFzLCBW aWV3cyBhbmQgU2VxdWVuY2VzIGV0Yy4KKyAgICAgICAgICAgICAgICAgIFNl dCBkZWZhdWx0IHZhbHVlcworICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgdmFyIGRiT2JqZWN0VHlwZVBhZ2UgPSBzZWxmLmRiT2JqZWN0 VHlwZVBhZ2UgPSBuZXcgcGdCcm93c2VyLldpemFyZFBhZ2UoeworICAgICAg ICAgICAgICAgICAgaWQ6IDEsCisgICAgICAgICAgICAgICAgICBwYWdlX3Rp dGxlOiBfKCdPYmplY3QgU2VsZWN0aW9uIChzdGVwIDEgb2YgMyknKSwKKyAg ICAgICAgICAgICAgICAgIGRpc2FibGVfcHJldjogdHJ1ZSwKKyAgICAgICAg ICAgICAgICAgIGRpc2FibGVfbmV4dDogdHJ1ZSwKKyAgICAgICAgICAgICAg ICAgIHNob3dfZGVzY3JpcHRpb246IF8oJ1BsZWFzZSBzZWxlY3Qgb2JqZWN0 cyBmcm9tIHRoZSBiZWxvdyBsaXN0LicpLAorICAgICAgICAgICAgICAgICAg c2hvd19wcm9ncmVzc19iYXI6IF8oJ1BsZWFzZSB3YWl0IHdoaWxlIGZldGNo aW5nIHJlY29yZHMuLi4nKSwKKyAgICAgICAgICAgICAgICAgIG1vZGVsOiBu ZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgIHZpZXc6IG5ldyAoZnVuY3Rp b24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHBhZ2UgSW5z dGFuY2UKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VWaWV3ID0gdGhp czsKKworICAgICAgICAgICAgICAgICAgICBfLmV4dGVuZChwYWdlVmlldywg eworCisgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGdyaWQgaWYg aXQgaXMgYmVmb3JlIHJlbmRlcgorICAgICAgICAgICAgICAgICAgICAgIGNs ZWFudXA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHRoaXMuZ3JpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGlzLmdyaWQucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg IGRlbGV0ZSB0aGlzLmdyaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMuZ3JpZCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBncmlkIGVs ZW1lbnQgaWYgZXhpc3RzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo dGhpcy5lbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMu ZWwpLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxl dGUgdGhpcy5lbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAg Ly8gRGVsZXRlIGdyaWQgYmVmb3JlIHJlbmRlcgorICAgICAgICAgICAgICAg ICAgICAgIGdyaWQ6IG51bGwsCisKKyAgICAgICAgICAgICAgICAgICAgICBy ZW5kZXI6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICAgICAg ICAvLyBDcmVhdGUgYSBncmlkIGNvbnRhaW5lcgorICAgICAgICAgICAgICAg ICAgICAgICAgdmFyIGdyaWRCb2R5ID0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICQoJzxkaXYgY2xhc3M9InNlbGVjdF9kYl9vYmplY3RzX2Nv bnRhaW5lciI+PC9kaXY+Jyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg IC8vIFJlbW92ZSBncmlkIGlmIGV4aXRzIGJlZm9yZSByZW5kZXIKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v IEluaXRpYWxpemUgYSBuZXcgR3JpZCBpbnN0YW5jZQorICAgICAgICAgICAg ICAgICAgICAgICAgdGhpcy5ncmlkID0gbmV3IEJhY2tncmlkLkdyaWQoewor ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBfLmNsb25lKGNv bHVtbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9u OiBjb2xsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6 ICJiYWNrZ3JpZCB0YWJsZS1ib3JkZXJlZCBvYmplY3RfdHlwZV90YWJsZSIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg ICAgICAgICAgICAgIC8vIFJlbmRlciBzZWxlY3Rpb24gVHlwZSBncmlkIGFu ZCBwYWdpbmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRCb2R5 LmFwcGVuZCggdGhpcy5ncmlkLnJlbmRlcigpLiRlbCk7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFJlbmRlciBTZWFyY2ggRmlsdGVyCisgICAg ICAgICAgICAgICAgICAgICAgICBncmlkQm9keS5wcmVwZW5kKAorICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudFNpZGVGaWx0ZXIucmVu ZGVyKCkuZWwpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3Np Z24gZ3JpZEJvZHkgY29udGVudCB0byBwYWdlIGVsZW1lbnQKKyAgICAgICAg ICAgICAgICAgICAgICAgIHRoaXMuZWwgPSBncmlkQm9keTsKKworICAgICAg ICAgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICAgICAg ICAgIEZldGNoIHNlbGVjdGVkIG1vZGVscyBmcm9tIGNvbGxlY3Rpb24gYW5k CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Ugcm93cyBjaGVja2Vk IGluIGdyaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgICAgICAgICBuZXdNb2RlbC5nZXQoJ29iamVjdHMnKS5lYWNo KGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy IG1vZGVsID0gY29sbC5nZXQobS5nZXQoJ29iamVjdF9pZCcpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29sbC50cmlnZ2VyKCdiYWNrZ3JpZDpzZWxl Y3RlZCcsIG1vZGVsLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggZ3JpZCB0byByZSByZW5kZXIg cm93cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGwudHJpZ2dlcign YmFja2dyaWQ6cmVmcmVzaCcpOworCisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgfSksCisK KyAgICAgICAgICAgICAgICAgIGJlZm9yZU5leHQ6IGZ1bmN0aW9uKG9iail7 CisgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAg ICAgICAgICAgICAgICAgb2JqLm9wdGlvbnMuZGlzYWJsZV9uZXh0ID0gdHJ1 ZTsKKworICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAg ICAgICAgICBFbmFibGUvRGlzYWJsZSBuZXh0IGJ1dHRvbiBvZiBwcml2aWxl Z2VQYWdlIGlmIG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICBhcmUg cHJlc2VudCBpbiBtb2RlbAorICAgICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgICAgICBpZighXy5pc051bGwobmV3TW9kZWwuZ2V0KCdh Y2wnKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5l ZChuZXdNb2RlbC5nZXQoJ2FjbCcpKSkgeworICAgICAgICAgICAgICAgICAg ICAgIGlmKG5ld01vZGVsLmdldCgnYWNsJykubGVuZ3RoID4gMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgIG9iai5jb2xsZWN0aW9uLmF0KDEpLnNldCgn ZGlzYWJsZV9uZXh0JywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgICAgICAvLyBDbGVhbiB0aGUgdmlldwor ICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi52aWV3KSB7CisgICAgICAg ICAgICAgICAgICAgICAgc2VsZi52aWV3LmNsZWFudXAoKTsKKyAgICAgICAg ICAgICAgICAgICAgICBkZWxldGUgc2VsZi52aWV3OworICAgICAgICAgICAg ICAgICAgICAgIHNlbGYudmlldyA9IG51bGw7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgfSk7CisKKyAg ICAgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAg ICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAg ICAgICAgICAgIC8vICAgICAgICAgICAgV2l6YXJkIFBhZ2UgZm9yIFByaXZp bGVnZSBDb250cm9sICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg ICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgICAgICAg ICAgICAgLy8gV2l6YXJkIGZvciBQcml2ZWxlZ2UgY29udHJvbAorICAgICAg ICAgICAgICAgIHZhciBwcml2aWxlZ2VQYWdlID0gc2VsZi5wcml2aWxlZ2VQ YWdlID0gbmV3IHBnQnJvd3Nlci5XaXphcmRQYWdlKHsKKyAgICAgICAgICAg ICAgICAgIGlkOiAyLAorICAgICAgICAgICAgICAgICAgcGFnZV90aXRsZTog XygnUHJpdmlsZWdlcyBTZWxlY3Rpb24gKHN0ZXAgMiBvZiAzKScpLAorICAg ICAgICAgICAgICAgICAgc2hvd19kZXNjcmlwdGlvbjogXygnUGxlYXNlIHNl bGVjdCBwcml2aWxlZ2VzIGZvciB0aGUgc2VsZWN0ZWQgb2JqZWN0cy4nKSwK KyAgICAgICAgICAgICAgICAgIGRpc2FibGVfbmV4dDogdHJ1ZSwKKyAgICAg ICAgICAgICAgICAgIG1vZGVsOiBuZXdNb2RlbCwKKworICAgICAgICAgICAg ICAgICAgLy8gQ3JlYXRlIGEgdmlldyBmdW5jdGlvbiBvYmplY3QKKyAgICAg ICAgICAgICAgICAgIHZpZXc6IG5ldyAoZnVuY3Rpb24oKSB7CisgICAgICAg ICAgICAgICAgICAgIHZhciBwYWdlVmlldyA9IHRoaXM7CisgICAgICAgICAg ICAgICAgICAgICAgXy5leHRlbmQocGFnZVZpZXcsIHsKKworICAgICAgICAg ICAgICAgICAgICAgICAgLy8gUmVuZGVyIFByaXZlbGVnZSBjb250cm9sIHRv IGdlbmVyYXRlIGl0cyBodG1sIG1hcmt1cAorICAgICAgICAgICAgICAgICAg ICAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAg ICAgICAgICAgICB2YXIgb2JqX3ByaXYgPSBbXTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VsZi5wcml2QXJyYXkgPSBfLnVuaXEoc2VsZi5wcml2 QXJyYXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBfLmVhY2goc2Vs Zi5wcml2QXJyYXksIGZ1bmN0aW9uKHByaXYpeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYub2JqX3ByaXYgPSBvYmpfcHJpdiA9IF8udW5p b24ob2JqX3ByaXYgLCBwcml2RGljdFtwcml2XS5hY2wpOworICAgICAgICAg ICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAg ICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUg UHJpdk1vZGVsIGFuZCBpdHMgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHJpdmlsZWdlcyBhcnJheSBpcyBnZW5lcmF0ZWQgYmFz ZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZSBv ZiBub2RlcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2TW9kZWwg PSBzZWxmLnByaXZNb2RlbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg dmFyIFByaXZNb2RlbCA9IHBnTm9kZS5Nb2RlbC5leHRlbmQoeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzOiB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhY2w6IHVuZGVmaW5lZAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2NoZW1hOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnYWNs JywgbGFiZWw6ICd7eyBfKCJQcml2aWxlZ2VzIikgfX0nLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogcGdBZG1pbi5Ccm93c2Vy Lk5vZGUuUHJpdmlsZWdlUm9sZU1vZGVsLmV4dGVuZCh7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcml2aWxlZ2VzIGFyZSBz ZWxlY3RlZCBiYXNlZCBvbiBub2RlIGNsaWNrZWQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcml2aWxlZ2VzOiBvYmpfcHJpdgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgdW5pcXVlQ29sIDog WydncmFudGVlJywgJ2dyYW50b3InXSwgZWRpdGFibGU6IHRydWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2xsZWN0aW9u JywgY2FuQWRkOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYW5EZWxldGU6IHRydWUsIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNv bGxlY3Rpb24nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAg ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAv KioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHByaXZlbGVn ZSBjb250cm9sIGlzIHJlLXJlbmRlcmVkLCBpbiBvcmRlciB0bworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlciBwcml2aWxlZ2VzIGJhc2Vk IG9uIG9iamVjdCB0eXBlIHNlbGVjdGVkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlbGV0ZSBwcml2aWxlZ2VzIGZyb20gcHJpdk1vZGVsIHdo aWNoIGFyZSBub3cgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJlc2VudCBpbiBvYmplY3QgcHJpdmlsZWdlcyBhcnJheShvYmplY3RfcHJp dikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge307CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChwcml2TW9kZWwpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhID0gcHJpdk1vZGVsLnRvSlNPTigpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb2xlUHJpdnMgPSBkYXRh WydhY2wnXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo dmFyIGlkeCBpbiByb2xlUHJpdnMpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhciByb2xlUHJpdiA9IChyb2xlUHJpdnNbaWR4XSlbJ3By aXZpbGVnZXMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZW1vdmVJZHggPSBbXSwgajsKKworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIChqIGluIHJvbGVQcml2KSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZhciBwID0gcm9sZVByaXZbal07CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmluZGV4T2Yob2Jq X3ByaXYsIHBbJ3ByaXZpbGVnZV90eXBlJ10pID09IC0xKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWR4LnB1c2goaik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIChqIGluIHJlbW92ZUlkeCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByb2xlUHJpdi5zcGxpY2UoaiwgMSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zdGFudGlh dGUgcHJpdk1vZGVsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZN b2RlbCA9IHNlbGYucHJpdk1vZGVsID0gbmV3IFByaXZNb2RlbChkYXRhLCB7 IG5vZGVfaW5mbzogc2VsZi5pbmZvIH0pOworCisgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIHRy YWNrIGNoYW5nZXMgaW50byBtb2RlbCwgc3RhcnQgbmV3IHNlc3Npb24KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgYW5kIEFkZCBldmVudCBsaXN0ZW5l ciBmb3IgcHJpdmlsZWdlcyBjb250cm9sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJp dk1vZGVsLnN0YXJ0TmV3U2Vzc2lvbigpOworICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWxmLnByaXZNb2RlbC5vbigncGdhZG1pbi1zZXNzaW9uOnZh bGlkJywgc2VsZi5vblNlc3Npb25WYWxpZGF0ZWQuYmluZChzZWxmKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpdk1vZGVsLm9uKCdw Z2FkbWluLXNlc3Npb246aW52YWxpZCcsIHNlbGYub25TZXNzaW9uSW52YWxp ZC5iaW5kKHNlbGYpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyoq CisgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBGaWVsZCBPYmpl Y3Qgd2hpY2ggaGFzIHByb3BlcnRpZXMgbGlrZQorICAgICAgICAgICAgICAg ICAgICAgICAgICBub2RlX2RhdGEsIG5vZGVfaW5mbyB3aGljaCBpcyByZXF1 aXJlZCBmb3IgcmVuZGVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg IFByaXZpbGVnZSBjb250cm9sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZHMgPSBC YWNrZm9ybS5nZW5lcmF0ZVZpZXdTY2hlbWEoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmluZm8sIHNlbGYucHJpdk1vZGVsLCAnY3Jl YXRlJywgc2VsZi5kLl90eXBlLCBzZWxmLmQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcml2aWxlZ2VzRmllbGQgPSBuZXcgQmFja2Zvcm0uRmllbGQoZmllbGRz WzBdLmZpZWxkc1swXSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg dGhpcy5wcml2Q29udHJvbCA9IG5ldyAocHJpdmlsZWdlc0ZpZWxkLmdldCgn Y29udHJvbCcpKSAoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp ZWxkOiBwcml2aWxlZ2VzRmllbGQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW9kZWw6IHNlbGYucHJpdk1vZGVsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiB7ZWw6IHRoaXMucHJpdkNvbnRyb2wucmVuZGVyKCkuJGVsfTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAg ICAgICAgIC8vIFJlbW92ZSB0aGUgcHJpdmlsZWdlIGNvbnRyb2wKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNsZWFudXA6IGZ1bmN0aW9uKCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcml2Q29udHJvbCkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJpdkNvbnRy b2wucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs ZXRlIHRoaXMucHJpdkNvbnRyb2w7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhpcy5wcml2Q29udHJvbCA9IG51bGw7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIH0p LAorCisgICAgICAgICAgICAgICAgICBiZWZvcmVQcmV2OiBmdW5jdGlvbih3 aXphcmRPYmopIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUg dGhlIHByaXZpbGVnZSBjb250cm9sCisgICAgICAgICAgICAgICAgICAgIGlm ICh0aGlzLnZpZXcpIHsKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZp ZXcuY2xlYW51cCgpOworICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0 aGlzLnZpZXc7CisgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3ID0g bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg ICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZS9EaXNh YmxlIG5leHQgYnV0dG9uIG9mIERiT2JqZWN0VHlwZSBwYWdlIGlmIG9iamVj dHMKKyAgICAgICAgICAgICAgICAgICAgICBhcmUgcHJlc2VudCBpbiBtb2Rl bAorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAg ICAgdmFyIG9iamVjdHNNb2RlbCA9IG5ld01vZGVsLmdldCgnb2JqZWN0cycp OworCisgICAgICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG9i amVjdHNNb2RlbCkgJiYgIV8uaXNFbXB0eShvYmplY3RzTW9kZWwpICYmCisg ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzTW9kZWwubGVuZ3RoID4g MCkgeworICAgICAgICAgICAgICAgICAgICAgIHdpemFyZE9iai5jb2xsZWN0 aW9uLmF0KDApLnNldCgnZGlzYWJsZV9uZXh0JywgZmFsc2UpOworCisgICAg ICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2hvdyBwcm9ncmVzcyBiYXIK KyAgICAgICAgICAgICAgICAgICAgICB3aXphcmRPYmouY29sbGVjdGlvbi5h dCgwKS5zZXQoJ3Nob3dfcHJvZ3Jlc3NfYmFyJywgJycpOworICAgICAgICAg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyoqCisgICAg ICAgICAgICAgICAgICAgICAgV2UncmUgcmUtcmVuZGVyaW5nIHRoZSBjb250 cm9scyBhcyB0aGV5IGFyZSBkZWxldGVkCisgICAgICAgICAgICAgICAgICAg ICAgYmVmb3JlIGhlYWRpbmcgdG8gbmV4dCBwYWdlCisgICAgICAgICAgICAg ICAgICAgICAgUmVmcmVzaCBCYWNrZ3JpZCB0byByZS1yZW5kZXIgdGhlIGVs ZW1lbnRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgcmUtcmVu ZGVyIEZpbHRlcgorICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgICAgICBuZXdNb2RlbC50cmlnZ2VyKCJiYWNrZ3JpZDpyZWZyZXNo IiwgbmV3TW9kZWwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgc2Vs Zi5jbGllbnRTaWRlRmlsdGVyLnJlbmRlcigpOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIH0sCisKKyAg ICAgICAgICAgICAgICAgIGJlZm9yZU5leHQ6IGZ1bmN0aW9uKCkgeyByZXR1 cm4gdHJ1ZTsgfSwKKworICAgICAgICAgICAgICAgICAgb25OZXh0OiBmdW5j dGlvbihvYmopeworCisgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiBh Y2xzIG9mIHByaXZNb2RlbCB0byBtYWluIG1vZGVsIG5ld01vZGVsCisgICAg ICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzZWxmLnByaXZN b2RlbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBuZXdNb2RlbC5zZXQo eydhY2wnOiBzZWxmLnByaXZNb2RlbC5nZXQoJ2FjbCcpfSk7CisgICAgICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBSZW1v dmUgdGhlIHByaXZpbGVnZSBjb250cm9sCisgICAgICAgICAgICAgICAgICAg IGlmICh0aGlzLnZpZXcpIHsKKyAgICAgICAgICAgICAgICAgICAgICB0aGlz LnZpZXcuY2xlYW51cCgpOworICAgICAgICAgICAgICAgICAgICAgIGRlbGV0 ZSB0aGlzLnZpZXc7CisgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3 ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg ICAgICAgICAgIC8vIEVuYWJsZSBmaW5pc2ggYnV0dG9uCisgICAgICAgICAg ICAgICAgICAgIHNlbGYud2l6YXJkLm9wdGlvbnMuZGlzYWJsZV9maW5pc2gg PSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAg ICAgICAgICAgICAgICB0cmlnZ2VycyB0byBnZXQgU1FMIHF1ZXJpZXMgZGF0 YSB0byByZW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBy ZXZpZXdTUUxQYWdlCisgICAgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgICAgIG5ld01vZGVsLnRyaWdnZXIoJ3BnYWRtaW4td2l6YXJk Om5leHRwYWdlOnNxbCcsIHsnbm9kZV90eXBlJzogbm9kZV90eXBlIH0pOwor ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisK KyAgICAgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisg ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworICAg ICAgICAgICAgICAgIC8vICAgICAgICAgICAgUmV2aWV3IFNRTCBRdWVyeSBQ YWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg ICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAg ICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgICAg ICAgICAgICAgLy9DcmVhdGUgU3FsRmllbGQgT2JqZWN0CisgICAgICAgICAg ICAgICAgdmFyIHNxbEZpZWxkID0gbmV3IEJhY2tmb3JtLkZpZWxkKAorICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgaWQ6 ICdzcWx0YWInLAorICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfKCdT cWwgVGFiJyksCisKKyAgICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAg ICAgICAgICAgICAgICAgICAgIEV4dGVuZCAnU3FsVGFiQ29udHJvbCcgdG8g ZGVmaW5lIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24g J29uV2l6YXJkTmV4dFBhZ2VDaGFuZ2UnCisgICAgICAgICAgICAgICAgICAg ICAgICB3aGljaCBnZXRzIHRyaWdnZXJlZCBvbiBuZXh0IGJ1dHRvbgorICAg ICAgICAgICAgICAgICAgICAgICAgY2xpY2sgdG8gZmV0Y2ggZ2VuZXJhdGVk IFNRTCBxdWVyeQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBz ZWxlY3RlZCBkYiBvYmplY3RzLgorICAgICAgICAgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogQmFja2Zvcm0uU3Fs VGFiQ29udHJvbC5leHRlbmQoeworICAgICAgICAgICAgICAgICAgICAgICAg aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJlbnQgY2xhc3MKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgQmFja2Zvcm0uU3FsVGFiQ29udHJvbC5wcm90 b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXNxbF91cmwgPSBzZWxm Lm1zcWxfdXJsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRl ZmluZSB0cmlnZ2VyIGV2ZW50cyBmb3IgcHJldiBhbmQgbmV4dCBwYWdlCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwub24oJ3BnYWRt aW4td2l6YXJkOm5leHRwYWdlOnNxbCcsIHRoaXMub25XaXphcmROZXh0UGFn ZUNoYW5nZSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRo aXMubW9kZWwub24oJ3BnYWRtaW4td2l6YXJkOnByZXZwYWdlOnNxbCcsIHRo aXMub25XaXphcmRQcmV2UGFnZUNoYW5nZSwgdGhpcyk7CisgICAgICAgICAg ICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAv LyBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBtb2RpZmllZCBTUUwgZm9yIHRo ZSB3aXphcmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uV2l6YXJkTmV4 dFBhZ2VDaGFuZ2U6IGZ1bmN0aW9uKCl7CisKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIEZldGNoZXMgbW9kaWZpZWQgU1FMCisgICAgICAgICAg ICAgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXJsOiB0aGlzLm1zcWxfdXJsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGU6ICdHRVQnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRhOiBzZWxmLm1vZGVsLnRvSlNPTih0cnVlLCAnR0VUJyks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICJqc29u IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTog ImFwcGxpY2F0aW9uL2pzb24iCisgICAgICAgICAgICAgICAgICAgICAgICAg IH0pLmRvbmUoZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2VsZi5zcWxUYWIuY2xlYXJIaXN0b3J5KCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcWxUYWIuc2V0VmFsdWUocmVz LmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5mYWlsKGZ1 bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu bW9kZWwudHJpZ2dlcigncGdhZG1pbi12aWV3Om1zcWw6ZXJyb3InKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgfSkuYWx3YXlzKGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwudHJp Z2dlcigncGdhZG1pbi12aWV3Om1zcWw6ZmV0Y2hlZCcpOworICAgICAgICAg ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rp b24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBs aXN0ZW4gdG8gbmV4dC9wcmV2IHBhZ2UgZXZlbnRzCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMubW9kZWwub2ZmKCdwZ2FkbWluLXdpemFyZDpu ZXh0cGFnZTpzcWwnLCB0aGlzLm9uV2l6YXJkTmV4dFBhZ2VDaGFuZ2UsIHRo aXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLm9m ZigncGdhZG1pbi13aXphcmQ6cHJldnBhZ2U6c3FsJywgdGhpcy5vbldpemFy ZFByZXZQYWdlQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgQmFja2Zvcm0uU3FsVGFiQ29udHJvbC5fX3N1cGVyX18ucmVtb3Zl LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAg ICAgICAgICAgICB9KSwKKworICAgICAgICAgICAgICAgICAgLyoqCisgICAg ICAgICAgICAgICAgICAgIENyZWF0ZSBzcWxGaWVsZCB2aWV3IGluc3RhbmNl CisgICAgICAgICAgICAgICAgICAgIHRvIHJlbmRlciBpdCBpbnRvIHdpemFy ZCBwYWdlCisgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAg ICAgc3FsQ29udHJvbCA9IG5ldyAoc3FsRmllbGQuZ2V0KCdjb250cm9sJykp KHsKKyAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHNxbEZpZWxkLAorICAg ICAgICAgICAgICAgICAgICBtb2RlbDogbmV3TW9kZWwKKyAgICAgICAgICAg ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8gV2l6YXJkIGZvciBT UUwgdGFiIGNvbnRyb2wKKyAgICAgICAgICAgICAgICB2YXIgcmV2aWV3U1FM UGFnZSA9IHNlbGYucmV2aWV3U1FMUGFnZSA9IG5ldyBwZ0Jyb3dzZXIuV2l6 YXJkUGFnZSh7CisgICAgICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAg ICAgICAgICAgIHBhZ2VfdGl0bGU6IF8oJ0ZpbmFsIChSZXZpZXcgU2VsZWN0 aW9uKSAoc3RlcCAzIG9mIDMpJyksCisgICAgICAgICAgICAgICAgICBzaG93 X2Rlc2NyaXB0aW9uOiBfKCdGb2xsb3dpbmcgcXVlcnkgd2lsbCBiZSBleGVj dXRlZCBvbiB0aGUgZGF0YWJhc2UnCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsnIHNlcnZlciBmb3IgdGhlIHNlbGVjdGVkIG9iamVjdHMs IGFuZCBwcml2aWxlZ2VzLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKycgUGxlYXNlIGNsaWNrIG9uIEZpbmlzaCB0byBjb21wbGV0ZSB0 aGUgcHJvY2Vzcy4nKSwKKyAgICAgICAgICAgICAgICAgIG1vZGVsOiBuZXdN b2RlbCwKKyAgICAgICAgICAgICAgICAgIHZpZXc6IG5ldyhmdW5jdGlvbigp IHsKKworICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgU3FsVGFiIGNv bnRyb2wgdG8gZ2VuZXJhdGUgaXRzIGh0bWwgbWFya3VwCisgICAgICAgICAg ICAgICAgICAgIHZhciBzcWxUYWJIdG1sID0gc3FsQ29udHJvbC5yZW5kZXIo KS4kZWw7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyID0gZnVu Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBl bDogc3FsVGFiSHRtbCB9OworICAgICAgICAgICAgICAgICAgICB9OworICAg ICAgICAgICAgICAgICAgfSksCisKKyAgICAgICAgICAgICAgICAgIGJlZm9y ZVByZXY6IGZ1bmN0aW9uKHdpemFyZE9iaikgeworCisgICAgICAgICAgICAg ICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBuZXh0 IGJ1dHRvbiBpZiBwcml2aWxlZ2UKKyAgICAgICAgICAgICAgICAgICAgICBt b2RlbCBpcyBub3QgZW1wdHkgZWxzZSBkaXNhYmxlCisgICAgICAgICAgICAg ICAgICAgICAgbmV4dCBidXR0b24KKyAgICAgICAgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgICAgIHZhciBhY2xNb2RlbCA9IG5ld01vZGVs LmdldCgnYWNsJyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoIV8uaXNV bmRlZmluZWQod2l6YXJkT2JqLmNvbGxlY3Rpb24pICYmCisgICAgICAgICAg ICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rpb24ubW9kZWxzLmxlbmd0 aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZighXy5pc1VuZGVm aW5lZChhY2xNb2RlbCkgJiYgIV8uaXNFbXB0eShhY2xNb2RlbCkgJiYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgYWNsTW9kZWwubGVuZ3RoID4gMCkg eworICAgICAgICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rp b24uYXQoMSkuc2V0KCdkaXNhYmxlX25leHQnLCBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug eworICAgICAgICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rp b24uYXQoMSkuc2V0KCdkaXNhYmxlX25leHQnLCB0cnVlKTsKKyAgICAgICAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgICAgICB9KTsKKworCisgICAgICAgICAg ICAgICAgLy8gQ3JlYXRlIFdpemFyZCBDb2xsZWN0aW9uIG9mIFdpemFyZCBQ YWdlcworICAgICAgICAgICAgICAgIHZhciBXaXphcmRDb2xsZWN0aW9uID0g QmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAgICAgICAg ICAgbW9kZWw6IHBnQnJvd3Nlci5XaXphcmRQYWdlCisgICAgICAgICAgICAg ICAgfSk7CisKKyAgICAgICAgICAgICAgICAvLyBJdCBob2xkcyBhbGwgdGhl IHdpemFyZCBwYWdlcyB0byBiZSByZW5kZXJlZAorICAgICAgICAgICAgICAg IHRoaXMud2l6YXJkQ29sbGVjdGlvbiA9IG5ldyBXaXphcmRDb2xsZWN0aW9u KAorICAgICAgICAgICAgICAgICAgW2RiT2JqZWN0VHlwZVBhZ2UsIHByaXZp bGVnZVBhZ2UsIHJldmlld1NRTFBhZ2VdCisgICAgICAgICAgICAgICAgKTsK KworICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgQ3Jl YXRlIHdpemFyZCB3aGljaCBoYXMgZm9sbG93aW5nIG9wZXJhdGlvbnM6Cisg ICAgICAgICAgICAgICAgICAtIHJlbmRlcnMgd2l6YXJkIHBhZ2VzCisgICAg ICAgICAgICAgICAgICAtIGRlZmluZXMgdGhlIGZpcnN0IHBhZ2UgdG8gcmVu ZGVyIGluIHdpemFyZAorICAgICAgICAgICAgICAgICAgLSBTYXZlIHRoZSBt b2RlbCBvbiBmaW5pc2hidXR0b24KKyAgICAgICAgICAgICAgICAgIC0gUmVt b3ZlIHdpemFyZCBvbiBjYW5jZWwgYnV0dG9uCisgICAgICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICAgIHZhciB3aXphcmQgPSBzZWxmLndpemFy ZCA9IG5ldyAocGdCcm93c2VyLldpemFyZC5leHRlbmQoeworICAgICAgICAg ICAgICAgICAgb3B0aW9uczogeworICAgICAgICAgICAgICAgICAgICB0aXRs ZTogXygnR3JhbnQgV2l6YXJkJyksIC8qIE1haW4gV2l6YXJkIFRpdGxlICov CisgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnJywKKyAgICAgICAgICAg ICAgICAgICAgaGVpZ2h0OiAnJywKKyAgICAgICAgICAgICAgICAgICAgY3Vy cl9wYWdlOiAwLAorICAgICAgICAgICAgICAgICAgICBzaG93X2xlZnRfcGFu ZWw6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlX2Zpbmlz aDogdHJ1ZQorICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg ICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZpbmlzaCBidXR0b24KKyAgICAgICAg ICAgICAgICAgIG9uRmluaXNoOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg ICAgICAgICAgdmFyIG0gPSBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgIGQgPSBtLnRvSlNPTignR0VUJyk7CisKKyAgICAgICAgICAgICAg ICAgICAgLy8gU2F2ZSBtb2RlbAorICAgICAgICAgICAgICAgICAgICBpZiAo ZCAmJiAhXy5pc0VtcHR5KGQpICYmICFfLmlzVW5kZWZpbmVkKGQub2JqZWN0 cykpIHsKKyAgICAgICAgICAgICAgICAgICAgICBtLnNhdmUoe30sIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiBkLAorICAgICAgICAgICAg ICAgICAgICAgICAgdmFsaWRhdGU6IGZhbHNlLAorICAgICAgICAgICAgICAg ICAgICAgICAgY2FjaGU6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gUmVsZWFzZSB3aXphcmQgb2JqZWN0cworICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbGVhc2VPYmplY3RzKCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAg ICBlcnJvcjogZnVuY3Rpb24obSwganF4aHIpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgYWxlcnRpZnkucGdOb3RpZmllcigKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZXJyb3IiLCBqcXhociwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTKAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgInt7IF8oJ0Vycm9yIGR1cmluZyBzYXZpbmcgcHJvcGVydGllcyAt ICUlcyEnKSB9fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICku c3ByaW50ZihqcXhoci5zdGF0dXNUZXh0KS52YWx1ZSgpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg ICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNhbmNlbCBidXR0b24KKyAgICAgICAg ICAgICAgICAgIG9uQ2FuY2VsOiBmdW5jdGlvbigpIHsKKworICAgICAgICAg ICAgICAgICAgICAvLyBSZWxlYXNlIHdpemFyZCBvYmplY3RzCisgICAgICAg ICAgICAgICAgICAgIHNlbGYucmVsZWFzZU9iamVjdHMoKTsKKyAgICAgICAg ICAgICAgICAgICAgc2VsZi5jbG9zZSgpOworICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0pKSAoeworICAgICAgICAgICAgICAgICAg Y29sbGVjdGlvbjogdGhpcy53aXphcmRDb2xsZWN0aW9uLAorICAgICAgICAg ICAgICAgICAgZWw6IGVsLAorICAgICAgICAgICAgICAgICAgbW9kZWw6IG5l d01vZGVsCisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg ICAvLyBSZW5kZXIgd2l6YXJkCisgICAgICAgICAgICAgICAgd2l6YXJkLnJl bmRlcigpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAg ICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbCBHcmFu dCBXaXphcmQgRGlhbG9nCisgICAgICAgIGFsZXJ0aWZ5LndpemFyZERpYWxv Zyh0cnVlKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIHBnQnJv d3Nlci5HcmFudFdpemFyZDsKKyAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFy ZC9zcWwvYWxsb3dlZF9hY2wuanNvbiBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dy YW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3NxbC9hbGxvd2Vk X2FjbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjJkMjFmMTQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29s cy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9zcWwvYWxs b3dlZF9hY2wuanNvbgpAQCAtMCwwICsxLDMwIEBACit7IyBMaXN0IG9mIGFs bG93ZWQgcHJpdmlsZWdlcyBvZiBTY2hlbWEsIHRhYmxlIHNlcXVlbmNlLCBm dW5jdGlvbiBhbmQgdmlldyAjfQoreyMKKyAgICBGb3JtYXQgZm9yIGFsbG93 ZWQgcHJpdmlsZWdlcyBhcmU6CisgICAgIm5vZGVfbmFtZSI6IHsKKyAgICAg ICAgInR5cGUiOiAibmFtZSIsCisgICAgICAgICJhY2wiOiBbLi4uXQorICAg IH0KKyN9Cit7CisgICAgInNjaGVtYSI6IHsKKyAgICAgICAgInR5cGUiOiAi U0NIRU1BIiwKKyAgICAgICAgImFjbCI6IFsiYSIsICJyIiwgInciLCAiZCIs ICJEIiwgIngiLCAidCIsICJVIiwgIlgiXQorICAgIH0sCisgICAgInRhYmxl IjogeworICAgICAgICAidHlwZSI6ICJUQUJMRSIsCisgICAgICAgICJhY2wi OiBbImEiLCAidyIsICJkIiwgIkQiLCAieCIsICJ0Il0KKyAgICB9LAorICAg ICJ2aWV3IjogeworICAgICAgICAidHlwZSI6ICJWSUVXIiwKKyAgICAgICAg ImFjbCI6IFsiYSIsICJ3IiwgImQiLCAiRCIsICJ4IiwgInQiXQorICAgIH0s CisgICAgInNlcXVlbmNlIjogeworICAgICAgICAidHlwZSI6ICJTRVFVRU5D RSIsCisgICAgICAgICJhY2wiOiBbInciLCAiVSJdCisgICAgfSwKKyAgICAi ZnVuY3Rpb24iOiB7CisgICAgICAgICJ0eXBlIjogIkZVTkNUSU9OIiwKKyAg ICAgICAgImFjbCI6IFsiWCJdCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93 aXphcmQvc3FsL2dyYW50LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50 X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3NxbC9ncmFudC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1OWI1Mwot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dp emFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3NxbC9ncmFudC5zcWwKQEAg LTAsMCArMSwxOSBAQAoreyM9PT09PUdyYW50IFBlcm1pc3Npb25zIG9uIERh dGFiYXNlIE9iamVjdHMgU2VsZWN0ZWQ9PT09I30KK3slIGltcG9ydCAnbWFj cm9zL3NjaGVtYXMvcHJpdmlsZWdlLm1hY3JvcycgYXMgUFJJVklMRUdFICV9 Cit7JSBpbXBvcnQgJ21hY3Jvcy9mdW5jdGlvbnMvcHJpdmlsZWdlLm1hY3Jv cycgYXMgUFJJVklMRUdFX0ZVTkNUSU9OICV9Cit7JSBpZiBkYXRhLmFjbCAt JX0KK3slIGZvciBvYmogaW4gZGF0YS5vYmplY3RzIC0lfQoreyUgZm9yIHBy aXYgaW4gZGF0YS5hY2wgLSV9Cit7JS0gc2V0IG9ial90eXBlID0gb2JqLm9i amVjdF90eXBlfHVwcGVyIC0lfQoreyMgPT09PT0gaWYgb2JqZWN0X3R5cGUg aXMgRnVuY3Rpb24gdGhlbiBhcHBseSBmdW5jdGlvbiBtYXJjcm9zID09PT09 ICN9Cit7JSBpZiAob2JqX3R5cGUgPT0gJ0ZVTkNUSU9OJyBvciBvYmpfdHlw ZSA9PSAnVFJJR0dFUiBGVU5DVElPTicpIGFuZCAocHJpdi53aXRoX2dyYW50 WydmdW5jdGlvbiddfGxlbmd0aCA+IDAgb3IgcHJpdi53aXRob3V0X2dyYW50 WydmdW5jdGlvbiddfGxlbmd0aCA+IDApIC0lfQore3sgUFJJVklMRUdFX0ZV TkNUSU9OLlNFVChjb25uLCAnRlVOQ1RJT04nLCBwcml2LmdyYW50ZWUsIG9i ai5uYW1lLCBwcml2LndpdGhvdXRfZ3JhbnRbJ2Z1bmN0aW9uJ10sIHByaXYu d2l0aF9ncmFudFsnZnVuY3Rpb24nXSwgbnNwbmFtZSwgb2JqLnByb2FyZ3Mp fX0KK3slIGVsaWYgKG9ial90eXBlID09ICdTRVFVRU5DRScpIGFuZCAocHJp di53aXRoX2dyYW50Wyd0YWJsZSddfGxlbmd0aCA+IDAgb3IgcHJpdi53aXRo b3V0X2dyYW50Wyd0YWJsZSddfGxlbmd0aCA+IDApIC0lfQore3sgUFJJVklM RUdFLlNFVChjb25uLCBvYmpfdHlwZS51cHBlcigpLCBwcml2LmdyYW50ZWUs IG9iai5uYW1lLCBwcml2LndpdGhvdXRfZ3JhbnRbJ3NlcXVlbmNlJ10sIHBy aXYud2l0aF9ncmFudFsnc2VxdWVuY2UnXSwgbnNwbmFtZSApIH19Cit7JSBl bGlmIChvYmpfdHlwZSA9PSAnVklFVycgb3Igb2JqX3R5cGUgPT0gJ1RBQkxF JykgYW5kIChwcml2LndpdGhfZ3JhbnRbJ3RhYmxlJ118bGVuZ3RoID4gMCBv ciBwcml2LndpdGhvdXRfZ3JhbnRbJ3RhYmxlJ118bGVuZ3RoID4gMCkgLSV9 IHsjID09PT09IFZpZXdzIGFyZSBhbHNvIHRhYmxlID09PT09ICN9Cit7JS0g c2V0IG9ial90eXBlID0gJ1RBQkxFJyAtJX0KK3t7IFBSSVZJTEVHRS5TRVQo Y29ubiwgb2JqX3R5cGUudXBwZXIoKSwgcHJpdi5ncmFudGVlLCBvYmoubmFt ZSwgcHJpdi53aXRob3V0X2dyYW50Wyd0YWJsZSddLCBwcml2LndpdGhfZ3Jh bnRbJ3RhYmxlJ10sIG5zcG5hbWUgKSB9fQoreyUgZW5kaWYgLSV9Cit7JSBl bmRmb3IgLSV9Cit7JSBlbmRmb3IgLSV9Cit7JSBlbmRpZiAtJX0KZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0 ZXMvZ3JhbnRfd2l6YXJkL3NxbC9wcm9wZXJ0aWVzLnNxbCBiL3dlYi9wZ2Fk bWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJk L3NxbC9wcm9wZXJ0aWVzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lOTI4ODhjCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXph cmQvc3FsL3Byb3BlcnRpZXMuc3FsCkBAIC0wLDAgKzEsNjYgQEAKK3sjPT09 PT09PT09PT09PT09PT09PUZldGNoIGxpc3Qgb2YgRGF0YWJhc2Ugb2JqZWN0 IHR5cGVzKEZ1bmN0aW9ucywgU2VxdWVuY2UsIFRhYmxlcyBvciBWaWV3KT09 PT09PT09PT09PT09PT09PT0jfQoreyUgaWYgdHlwZSA9PSAnc2NoZW1hJyBv ciB0eXBlID09ICd0cmlnZ2VyX2Z1bmN0aW9uJyBhbmQgbm9kZV9pZCBhbmQg bm9kZV9uYW1lICV9Cit7JSBzZXQgZnVuY190eXBlID0gJ1RyaWdnZXIgRnVu Y3Rpb24nIGlmIHR5cGUgPT0gJ3RyaWdnZXJfZnVuY3Rpb24nIGVsc2UgJ0Z1 bmN0aW9uJyAlfQorU0VMRUNUCisgICAgcGdfZ2V0X2Z1bmN0aW9uX2lkZW50 aXR5X2FyZ3VtZW50cyhwci5vaWQpIEFTIHByb2FyZ3MsCisgICAgeyMgcHIu cHJvbmFtZSB8fCAnKCcgfHwgcGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2Fy Z3VtZW50cyhwci5vaWQpIHx8ICcpJyBBUyBuYW1lLCN9CisgICAgcHIucHJv bmFtZSBBUyBuYW1lLAorICAgICd7eyBmdW5jX3R5cGUgfX0nIEFTIG9iamVj dF90eXBlLAorICAgICd7eyBuc3BuYW1lIH19JyBBUyBuc3BuYW1lLAorICAg ICd7eyAiaWNvbi1mdW5jdGlvbiIgaWYgdHlwZSAhPSAidHJpZ2dlcl9mdW5j dGlvbiIgZWxzZSAiaWNvbi10cmlnZ2VyX2Z1bmN0aW9uIiB9fScgQVMgaWNv bgorRlJPTSBwZ19wcm9jIHByCisgICAgSk9JTiBwZ190eXBlIHR5cCBPTiB0 eXAub2lkPXByb3JldHR5cGUKKyAgICBKT0lOIHBnX25hbWVzcGFjZSB0eXBu cyBPTiB0eXBucy5vaWQ9dHlwLnR5cG5hbWVzcGFjZQorICAgIEpPSU4gcGdf bGFuZ3VhZ2UgbG5nIE9OIGxuZy5vaWQ9cHJvbGFuZworICAgIExFRlQgT1VU RVIgSk9JTiBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRlcy5vYmpvaWQ9cHIu b2lkIEFORCBkZXMuY2xhc3NvaWQ9J3BnX3Byb2MnOjpyZWdjbGFzcykKK1dI RVJFIHByb2lzYWdnID0gRkFMU0UgQU5EIHByb25hbWVzcGFjZSA9IHt7IG5v ZGVfaWQgfX06Om9pZAorICAgIEFORCB0eXBuYW1lIHt7ICdOT1QnIGlmIHR5 cGUgIT0gJ3RyaWdnZXJfZnVuY3Rpb24nIGVsc2UgJycgfX0gSU4gKCd0cmln Z2VyJywgJ2V2ZW50X3RyaWdnZXInKQorT1JERVIgQlkgcHJvbmFtZQoreyUg ZW5kaWYgJX0KKworeyUgaWYgdHlwZSA9PSAnc2VxdWVuY2UnIGFuZCBub2Rl X2lkIGFuZCBub2RlX25hbWUgJX0KK1NFTEVDVAorICAgIGNsLnJlbG5hbWUg QVMgbmFtZSwKKyAgICAnU2VxdWVuY2UnIEFTIG9iamVjdF90eXBlLAorICAg ICd7eyBuc3BuYW1lIH19JyBBUyBuc3BuYW1lLAorICAgICdpY29uLXNlcXVl bmNlJyBBUyBpY29uCitGUk9NIHBnX2NsYXNzIGNsCisgICAgTEVGVCBPVVRF UiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1jbC5v aWQgQU5EIGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpyZWdjbGFzcykKK1dI RVJFIHJlbGtpbmQgPSAnUycgQU5EIHJlbG5hbWVzcGFjZSAgPSB7eyBub2Rl X2lkIH19OjpvaWQKK09SREVSIEJZIGNsLnJlbG5hbWUKK3slIGVuZGlmICV9 CisKK3slIGlmIHR5cGUgPT0gJ3RhYmxlJyBhbmQgbm9kZV9pZCBhbmQgbm9k ZV9uYW1lICV9CitTRUxFQ1QgcmVsLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAn VGFibGUnIEFTIG9iamVjdF90eXBlLAorICAgICd7eyBuc3BuYW1lIH19JyBB UyBuc3BuYW1lLAorICAgICdpY29uLXRhYmxlJyBBUyBpY29uCitGUk9NIHBn X2NsYXNzIHJlbAorICAgIExFRlQgT1VURVIgSk9JTiBwZ190YWJsZXNwYWNl IHNwYyBPTiBzcGMub2lkPXJlbC5yZWx0YWJsZXNwYWNlCisgICAgTEVGVCBP VVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1y ZWwub2lkIEFORCBkZXMub2Jqc3ViaWQ9MCBBTkQgZGVzLmNsYXNzb2lkPSdw Z19jbGFzcyc6OnJlZ2NsYXNzKQorICAgIExFRlQgT1VURVIgSk9JTiBwZ19j b25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9cmVsLm9pZCBBTkQgY29u LmNvbnR5cGU9J3AnCisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2NsYXNzIHRz dCBPTiB0c3Qub2lkID0gcmVsLnJlbHRvYXN0cmVsaWQKKyAgICBMRUZUIEpP SU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9mdHlwZT10eXAub2lkCitXSEVS RSByZWwucmVsa2luZCBJTiAoJ3InLCdzJywndCcpIEFORCByZWwucmVsbmFt ZXNwYWNlID0ge3sgbm9kZV9pZCB9fTo6b2lkCitPUkRFUiBCWSByZWwucmVs bmFtZQoreyUgZW5kaWYgJX0KKworeyUgaWYgdHlwZSA9PSAndmlldycgYW5k IG5vZGVfaWQgYW5kIG5vZGVfbmFtZSAlfQorU0VMRUNUCisgICAgYy5yZWxu YW1lIEFTIG5hbWUsCisgICAgJ1ZpZXcnIEFTIG9iamVjdF90eXBlLAorICAg ICd7eyBuc3BuYW1lIH19JyBBUyBuc3BuYW1lLAorICAgICdpY29uLXZpZXcn IEFTIGljb24KK0ZST00gcGdfY2xhc3MgYworICAgIExFRlQgT1VURVIgSk9J TiBwZ190YWJsZXNwYWNlIHNwYyBPTiBzcGMub2lkPWMucmVsdGFibGVzcGFj ZQorICAgIExFRlQgT1VURVIgSk9JTiBwZ19kZXNjcmlwdGlvbiBkZXMgT04g KGRlcy5vYmpvaWQ9Yy5vaWQgYW5kIGRlcy5vYmpzdWJpZD0wIEFORCBkZXMu Y2xhc3NvaWQ9J3BnX2NsYXNzJzo6cmVnY2xhc3MpCisgICAgTEVGVCBPVVRF UiBKT0lOIHBnX2NsYXNzIHRzdCBPTiB0c3Qub2lkID0gYy5yZWx0b2FzdHJl bGlkCitXSEVSRSAoKGMucmVsaGFzcnVsZXMgQU5EIChFWElTVFMgKAorICAg IFNFTEVDVCByLnJ1bGVuYW1lCisgICAgRlJPTSBwZ19yZXdyaXRlIHIKKyAg ICBXSEVSRSAoKHIuZXZfY2xhc3MgPSBjLm9pZCkKKyAgICAgICAgQU5EIChi cGNoYXIoci5ldl90eXBlKSA9ICcxJzo6YnBjaGFyKSkgKSkKKyAgICAgICAp IE9SIChjLnJlbGtpbmQgPSAndic6OmNoYXIpKQorQU5EIGMucmVsbmFtZXNw YWNlID0ge3sgbm9kZV9pZCB9fTo6b2lkCitPUkRFUiBCWSBjLnJlbG5hbWUK K3slIGVuZGlmICV9Cg== --047d7bdc8f7081919a052f17dc91 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --047d7bdc8f7081919a052f17dc91--