Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aqgns-0002iV-Jo for pgadmin-hackers@arkaria.postgresql.org; Thu, 14 Apr 2016 12:55:25 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1aqgnr-0000ws-UN for pgadmin-hackers@arkaria.postgresql.org; Thu, 14 Apr 2016 12:55:24 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1aqgkx-0000pU-Qx for pgadmin-hackers@postgresql.org; Thu, 14 Apr 2016 12:52:24 +0000 Received: from mail-yw0-x236.google.com ([2607:f8b0:4002:c05::236]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1aqgkt-0000gO-TE for pgadmin-hackers@postgresql.org; Thu, 14 Apr 2016 12:52:23 +0000 Received: by mail-yw0-x236.google.com with SMTP id o66so102150893ywc.3 for ; Thu, 14 Apr 2016 05:52:19 -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:date:message-id:subject:from:to :cc; bh=1s7m9z0wA+aNfvGWQgHfERwUxiO9QnDxx+c/OFo7psA=; b=qfj74/ScfNmOABpMbqMoIgD/XLzMxjS4vv/EQKEaILmJ5QSJVOIuTbxOIuoCGqSJ7B 6BHw42tkjLiiV1DcthaO0bim7fnnxdP8eb9KILH3MxKd8pNZ7hVhq2Wh9mjVXMkpTTXA 8s6juv9SXNMBkhDfCQLallLdY1xmv39jdJd5iujLq4tkbv14YwOvsTs4M4g+pL0ISIOK 4LvxVPLjaPOa+S48zCh6J+pNZ7ucEkOlfkX7r1LqUnI7uJRf7Fl4xtaLKbAMUnFQTjNk rzwBM5DTvCSsa/SN6bPjjBCN05F1meYbGUxoacUVrSENU1Z7YOsFgwgVHU/4SaygW3NX zFaw== 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:date :message-id:subject:from:to:cc; bh=1s7m9z0wA+aNfvGWQgHfERwUxiO9QnDxx+c/OFo7psA=; b=AwbLkbx8tw9HQnuXS2wYhsoztsp20TuP+4hqTPdxSQvoWAhDaGGTmQReFNc8b9iHTu TO9+q4PVDW6+kfveGnBs/vwtu9opeIC8vdi11Zo4ZruV/b8/SEKh67t+3vVoM8Ck7VYt j3onx5uGwyAr9D5xFv5cvPQWBcFVPLWDzcb4NvCAR6qeuo0+92glNnv69hB3bsQ/Tz1f QXLVpmdQiT/c6xblxoj+wKzGuD1dLW320kqcZ2R/+NVUoVH3SylQmhL7KtgfO9og8IKQ qBRJbNMgsFP68MBPjfVMWSbgfjKtbE198IeVD91Y3AXewl9p29SFKqwgrZWd6eWIxBGP /gZA== X-Gm-Message-State: AOPr4FWwuQTp5MeGQXJeHnFgfmdyx/qGfNrecF1mD61FVJRK8qA1bY/VqNPuWkk5XlLaEkOblH0YMZel1x93wWK0 MIME-Version: 1.0 X-Received: by 10.13.243.67 with SMTP id c64mr7902626ywf.306.1460638337788; Thu, 14 Apr 2016 05:52:17 -0700 (PDT) Received: by 10.37.203.134 with HTTP; Thu, 14 Apr 2016 05:52:17 -0700 (PDT) In-Reply-To: References: Date: Thu, 14 Apr 2016 18:22:17 +0530 Message-ID: Subject: Re: [pgAdmin4][Debugger]: Initial Patch From: Neel Patel To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=94eb2c035574455d480530715dd6 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 --94eb2c035574455d480530715dd6 Content-Type: multipart/alternative; boundary=94eb2c035574455d350530715dd4 --94eb2c035574455d350530715dd4 Content-Type: text/plain; charset=UTF-8 Hi, Please find attached v2 patch file of the debugger which fixes the below issues which was not present in the first patch. In this patch, we have added new table in sqlite database to store the functions arguments value user has given during debugging. After applying this patch, user needs to execute "setup.py" to create the new table in pgadmin4.db file. - In direct debugging, when user debug the function then arguments values will be stored in the sqlite database so when user debug the same function again then previous values will be filled in the user input dialog. - Once the execution is completed then user will be able to do the debug of the same function again by pressing the "Continue/Restart" button. - User can debug the "procedure" which is supported in PPAS database. - Replaced the "Glyphicon" with the "font-awesome" icons. Below are the TODOs - Validate the input arguments values changed by user while depositing the value during debugging. - Need to implement the code folding in the codemirror editor area. - As per the Ashesh's suggestion, need to add debug logs information so that we can get the state of the debug function. Also need to add "arrow" next to breakpoint in the gutters as per the pgadmin3. - Need to add "Debug package initializer" in the user input dialog for the direct debugging. - Last but not least "Review comments" :) Below functionalities are implemented but testing are pending. - Trigger functions need to test with the debugger. - Functions are tested with data types (like text, integer etc.) but it needs to be tested with all the data types for direct debugging. - Functions/Procedures need to test with PPAS 9.2 and earlier version where debugger version is different. Can you please review the patch file and let us know the comments. Thanks, Neel Patel On Wed, Apr 6, 2016 at 1:37 PM, Dave Page wrote: > On Wed, Apr 6, 2016 at 8:57 AM, Neel Patel > wrote: > > Hi Dave, > > > > I got the root cause. Issue will reproduce when we applied Akshay's query > > tool patch. > > Issue was once the panel was initialized, HTML file was not getting > loaded > > in to the panel due to the change in frame.js. > > > > Both query tool and debugger patch file contains the change in "frame.js" > > file. Once you applied the query tool patch and after that debugger then > > debugger patch should fail but i don't know why you do not get any error. > > > > Solution:- > > > > Open "frame.js" file and add the below line in "setTimeout" function > which > > is required by debugger. > > > > > pgBrowser.Events.trigger('pgadmin-browser:frame:urlloaded:' > > + that.name, frame, that.url, self); > > > > Do let us know if you still face the same issue. > > Ahh, good catch - that got it :-) > > Thanks! > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > --94eb2c035574455d350530715dd4 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please find attached v2 patch file = of the debugger which fixes the below issues which was not present in the f= irst patch.
In this patch, we have added new table in sqlite data= base to store the functions arguments value user has given during debugging= .
After applying this patch, user needs to execute "setup.py= " to create the new table in pgadmin4.db file.
  • In di= rect debugging, when user debug the function then arguments values will be = stored in the sqlite database so when user debug the same function again th= en previous values will be filled in the user input dialog.
  • Once th= e execution is completed then user will be able to do the debug of the same= function again by pressing the "Continue/Restart" button.
  • User can debug the "procedure" which is supported in PPAS datab= ase.
  • Replaced the "Glyphicon" with the "font-awesome= " icons.

Below are the TODOs
<= div>
  • Validate the input arguments values changed by user while depos= iting the value during debugging.
  • Need to implement the code foldin= g in the codemirror editor area.
  • As per the Ashesh's suggestion= , need to add debug logs information so that we can get the state of the de= bug function. Also need to add "arrow" next to breakpoint in the = gutters as per the pgadmin3.
  • Need to add "Debug package initia= lizer" in the user input dialog for the direct debugging.
  • Last= but not least "Review comments" :)
Below fun= ctionalities are implemented but testing are pending.
  • Tri= gger functions need to test with the debugger.
  • Functions are tested= with data types (like text, integer etc.) =C2=A0but it needs to be tested = with all the data types for direct debugging.
  • Functions/Procedures = need to test with PPAS 9.2 and earlier version where debugger version is di= fferent.
Can you please review the patch file and let u= s know the comments.

Thanks,
Neel Patel<= /div>

On Wed= , Apr 6, 2016 at 1:37 PM, Dave Page <dpage@pgadmin.org> wrot= e:
On Wed, Apr 6, 2016 a= t 8:57 AM, Neel Patel <ne= el.patel@enterprisedb.com> wrote:
> Hi Dave,
>
> I got the root cause. Issue will reproduce whe= n we applied Akshay's query
> tool patch.
> Issue was once the panel was initialized, HTML file was not getting lo= aded
> in to the panel due to the change in frame.js.
>
> Both query tool and debugger patch file contains the change in "f= rame.js"
> file. Once you applied the query tool patch and after that debugger th= en
> debugger patch should fail but i don't know why you do not get any= error.
>
> Solution:-
>
> Open "frame.js"=C2=A0 file and add the below line in "s= etTimeout" function which
> is required by debugger.
>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pgBrowse= r.Events.trigger('pgadmin-browser:frame:urlloaded:'
> + th= at.name, frame, that.url, self);
>
> Do let us know if you still face the same issue.

Ahh, good catch - that got it :-)

Thanks!

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

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

--94eb2c035574455d350530715dd4-- --94eb2c035574455d480530715dd6 Content-Type: application/octet-stream; name="debugger_14_April_v2.patch" Content-Disposition: attachment; filename="debugger_14_April_v2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_in09xl5e0 ZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29uZmlnLnB5Cmlu ZGV4IDVmMjJjODguLjljZjI2NDQgMTAwNjQ0Ci0tLSBhL3dlYi9jb25maWcu cHkKKysrIGIvd2ViL2NvbmZpZy5weQpAQCAtMTQxLDcgKzE0MSw3IEBAIE1B WF9TRVNTSU9OX0lETEVfVElNRSA9IDYwCiAKICMgVGhlIHNjaGVtYSB2ZXJz aW9uIG51bWJlciBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UKICMg RE8gTk9UIENIQU5HRSBVTkxFU1MgWU9VIEFSRSBBIFBHQURNSU4gREVWRUxP UEVSISEKLVNFVFRJTkdTX1NDSEVNQV9WRVJTSU9OID0gOAorU0VUVElOR1Nf U0NIRU1BX1ZFUlNJT04gPSA5CiAKICMgVGhlIGRlZmF1bHQgcGF0aCB0byB0 aGUgU1FMaXRlIGRhdGFiYXNlIHVzZWQgdG8gc3RvcmUgdXNlciBhY2NvdW50 cyBhbmQKICMgc2V0dGluZ3MuIFRoaXMgZGVmYXVsdCBwbGFjZXMgdGhlIGZp bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21vZGVsL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4v bW9kZWwvX19pbml0X18ucHkKaW5kZXggMjUzYmQ2Ny4uYjc5ZjA4NSAxMDA2 NDQKLS0tIGEvd2ViL3BnYWRtaW4vbW9kZWwvX19pbml0X18ucHkKKysrIGIv d2ViL3BnYWRtaW4vbW9kZWwvX19pbml0X18ucHkKQEAgLTE0OCwzICsxNDgs MjMgQEAgY2xhc3MgVXNlclByZWZlcmVuY2UoZGIuTW9kZWwpOgogICAgICAg ICBkYi5JbnRlZ2VyLCBkYi5Gb3JlaWduS2V5KCd1c2VyLmlkJyksIHByaW1h cnlfa2V5PVRydWUKICAgICAgICAgKQogICAgIHZhbHVlID0gZGIuQ29sdW1u KGRiLlN0cmluZygxMDI0KSwgbnVsbGFibGU9RmFsc2UpCisKK2NsYXNzIERl YnVnZ2VyRnVuY3Rpb25Bcmd1bWVudHMoZGIuTW9kZWwpOgorICAgICIiIkRl ZmluZSB0aGUgZGVidWdnZXIgaW5wdXQgZnVuY3Rpb24gYXJndW1lbnRzLiIi IgorICAgIF9fdGFibGVuYW1lX18gPSAnZGVidWdnZXJfZnVuY3Rpb25fYXJn dW1lbnRzJworICAgIHNlcnZlcl9pZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2Vy KCksIG51bGxhYmxlPUZhbHNlLCBwcmltYXJ5X2tleT1UcnVlKQorICAgIGRh dGFiYXNlX2lkID0gZGIuQ29sdW1uKGRiLkludGVnZXIoKSwgbnVsbGFibGU9 RmFsc2UsIHByaW1hcnlfa2V5PVRydWUpCisgICAgc2NoZW1hX2lkID0gZGIu Q29sdW1uKGRiLkludGVnZXIoKSwgbnVsbGFibGU9RmFsc2UsIHByaW1hcnlf a2V5PVRydWUpCisgICAgZnVuY3Rpb25faWQgPSBkYi5Db2x1bW4oZGIuSW50 ZWdlcigpLCBudWxsYWJsZT1GYWxzZSwgcHJpbWFyeV9rZXk9VHJ1ZSkKKyAg ICBhcmdfaWQgPSBkYi5Db2x1bW4oZGIuSW50ZWdlcigpLCBudWxsYWJsZT1G YWxzZSwgcHJpbWFyeV9rZXk9VHJ1ZSkKKyAgICBpc19udWxsID0gZGIuQ29s dW1uKGRiLkludGVnZXIoKSwKKyAgICAgICAgICAgIGRiLkNoZWNrQ29uc3Ry YWludCgnaXNfbnVsbCA+PSAwIEFORCBpc19udWxsIDw9IDEnKSwKKyAgICAg ICAgICAgIG51bGxhYmxlPUZhbHNlKQorICAgIGlzX2V4cHJlc3Npb24gPSBk Yi5Db2x1bW4oZGIuSW50ZWdlcigpLAorICAgICAgICAgICAgICAgICAgZGIu Q2hlY2tDb25zdHJhaW50KCdpc19leHByZXNzaW9uID49IDAgQU5EIGlzX2V4 cHJlc3Npb24gPD0gMScpLAorICAgICAgICAgICAgICAgICAgbnVsbGFibGU9 RmFsc2UpCisgICAgdXNlX2RlZmF1bHQgPSBkYi5Db2x1bW4oZGIuSW50ZWdl cigpLAorICAgICAgICAgICAgICAgIGRiLkNoZWNrQ29uc3RyYWludCgndXNl X2RlZmF1bHQgPj0gMCBBTkQgdXNlX2RlZmF1bHQgPD0gMScpLAorICAgICAg ICAgICAgICAgIG51bGxhYmxlPUZhbHNlKQorCisgICAgdmFsdWUgPSBkYi5D b2x1bW4oZGIuU3RyaW5nKCksIG51bGxhYmxlPVRydWUpCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2dyaWQvYmFja2dyaWQucGdh ZG1pbi5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZ3JpZC9iYWNr Z3JpZC5wZ2FkbWluLmpzCmluZGV4IGU0MDg5OGUuLmFhODY4NTMgMTAwNjQ0 Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZ3JpZC9iYWNrZ3Jp ZC5wZ2FkbWluLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNr Z3JpZC9iYWNrZ3JpZC5wZ2FkbWluLmpzCkBAIC01NjQsNiArNTY0LDIzNiBA QAogICAgIGVkaXRvcjogVGV4dGFyZWFDZWxsRWRpdG9yCiAgIH0pOwogCisK KyAgLyoqCisgICAqIEN1c3RvbSBoZWFkZXIgaWNvbiBjZWxsIHRvIGFkZCB0 aGUgaWNvbiBpbiB0YWJsZSBoZWFkZXIuCisgICovCisgIHZhciBDdXN0b21I ZWFkZXJJY29uQ2VsbCA9IEJhY2tncmlkLkV4dGVuc2lvbi5DdXN0b21IZWFk ZXJJY29uQ2VsbCA9IEJhY2tncmlkLkhlYWRlckNlbGwuZXh0ZW5kKHsKKyAg ICAgIC8qKiBAcHJvcGVydHkgKi8KKyAgICAgIGNsYXNzTmFtZTogImhlYWRl ci1pY29uLWNlbGwiLAorICAgICAgZXZlbnRzOiB7CisgICAgICAgICJjbGlj ayI6ICJhZGRIZWFkZXJJY29uIgorICAgICAgfSwKKyAgICAgIGFkZEhlYWRl ckljb246IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHNlbGYgPSB0aGlzOwor ICAgICAgICBtID0gbmV3ICh0aGlzLmNvbGxlY3Rpb24ubW9kZWwpOworICAg ICAgICB0aGlzLmNvbGxlY3Rpb24uYWRkKG0pCisgICAgICAgIGUucHJldmVu dERlZmF1bHQoKTsKKyAgICAgIH0sCisgICAgICByZW5kZXI6IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpOworICAgICAgICAg IC8vdGhpcy4kZWwuaHRtbCgiPGkgY2xhc3M9J2ZhIGZhLXBsdXMtY2lyY2xl Jz48L2k+Iik7CisgICAgICAgICAgdGhpcy4kZWwuaHRtbCgiPGxhYmVsPjxh PjxzcGFuIHN0eWxlPSdmb250LXdlaWdodDpub3JtYWw7Jz5BcnJheSBWYWx1 ZXM8L2E+PC9zcGFuPjwvbGFiZWw+IDxidXR0b24gY2xhc3M9J2J0bi1zbSBi dG4tZGVmYXVsdCBhZGQnPkFERDwvYnV0dG9uPiIpOworICAgICAgICAgIHRo aXMuZGVsZWdhdGVFdmVudHMoKTsKKyAgICAgICAgICByZXR1cm4gdGhpczsK KyAgICAgIH0KKyAgfSk7CisKKworICB2YXIgYXJyYXlDZWxsTW9kZWwgPSBC YWNrYm9uZS5Nb2RlbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7CisgICAg ICAgIHZhbHVlOiB1bmRlZmluZWQKKyAgICB9CisgIH0pOworCisgIC8qKgor ICAgICBDdXN0b20gSW5wdXRBcnJheUNlbGxFZGl0b3IgZm9yIGVkaXRpbmcg dXNlciBpbnB1dCBhcnJheSBmb3IgZGVidWdnZXIuCisgICAqLworICB2YXIg SW5wdXRBcnJheUNlbGxFZGl0b3IgPSBCYWNrZ3JpZC5FeHRlbnNpb24uSW5w dXRBcnJheUNlbGxFZGl0b3IgPQorICAgIEJhY2tncmlkLkNlbGxFZGl0b3Iu ZXh0ZW5kKHsKKyAgICAgIHRhZ05hbWU6ICJkaXYiLAorCisgICAgZXZlbnRz OiB7CisgICAgICAnYmx1cic6ICdsb3N0Rm9jdXMnCisgICAgfSwKKworICAg IHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRo aXMsCisgICAgICAgICAgICBhcnJheVZhbHVlc0NvbCA9IHRoaXMubW9kZWwu Z2V0KHRoaXMuY29sdW1uLmdldCgibmFtZSIpKSwKKyAgICAgICAgICAgIHRi bCA9ICQoIjx0YWJsZT48L3RhYmxlPiIpLmFwcGVuZFRvKHRoaXMuJGVsKSwK KyAgICAgICAgICAgIGdyaWRDb2xzID0gWworICAgICAgICAgICAgICAgICAg ICB7bmFtZTogJ3ZhbHVlJywgbGFiZWw6J0FycmF5IFZhbHVlcycsIHR5cGU6 ICd0ZXh0JywgY2VsbDonc3RyaW5nJywgaGVhZGVyQ2VsbDogQmFja2dyaWQu RXh0ZW5zaW9uLkN1c3RvbUhlYWRlckljb25DZWxsLCBjZWxsSGVhZGVyQ2xh c3NlczogJ3dpZHRoX3BlcmNlbnRfMTAwJ30sCisgICAgICAgICAgICAgICAg ICAgIF0sCisgICAgICAgICAgICBncmlkQm9keSA9ICQoIjxkaXYgY2xhc3M9 J3BnYWRtaW4tY29udHJvbC1ncm91cCBiYWNrZ3JpZCBmb3JtLWdyb3VwIGNv bC14cy0xMiBvYmplY3Qgc3Vibm9kZSc+PC9kaXY+Iik7CisKKyAgICAgICAg dGhpcy4kZWwuYXR0cigndGFiaW5kZXgnLCAnMScpOworCisgICAgICAgIGdy aWRDb2xzLnVuc2hpZnQoeworICAgICAgICAgIG5hbWU6ICJwZy1iYWNrZm9y bS1kZWxldGUiLCBsYWJlbDogIiIsCisgICAgICAgICAgY2VsbDogQmFja2dy aWQuRXh0ZW5zaW9uLkRlbGV0ZUNlbGwsCisgICAgICAgICAgLy9oZWFkZXJD ZWxsOiBCYWNrZ3JpZC5FeHRlbnNpb24uQ3VzdG9tSGVhZGVySWNvbkNlbGws CisgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCBjZWxsX3ByaW9yaXR5OiAt MQorICAgICAgICB9KTsKKworICAgICAgdGhpcy4kZWwuZW1wdHkoKTsKKyAg ICAgIHZhciBncmlkID0gc2VsZi5ncmlkID0gbmV3IEJhY2tncmlkLkdyaWQo eworICAgICAgICAgICAgY29sdW1uczogZ3JpZENvbHMsCisgICAgICAgICAg ICBjb2xsZWN0aW9uOmFycmF5VmFsdWVzQ29sCisgICAgICAgICAgfSk7CisK KyAgICAgIGdyaWQucmVuZGVyKCk7CisKKyAgICAgIGdyaWRCb2R5LmFwcGVu ZChncmlkLiRlbCkKKworICAgICAgdGhpcy4kZWwuaHRtbChncmlkQm9keSk7 CisKKyAgICAgICQoc2VsZi4kZWwpLnBnTWFrZVZpc2libGUoJ2JhY2tmb3Jt LXRhYicpOworICAgICAgc2VsZi5kZWxlZ2F0ZUV2ZW50cygpOworCisgICAg ICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoKKyAgICAgKiBDYWxs IGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgZ3JpZCBsb3N0IHRoZSBmb2N1cwor ICAgICAqLworICAgIGxvc3RGb2N1czogZnVuY3Rpb24oZXYpIHsKKworICAg ICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAgLyoKKyAgICAgICAqIEZ1bmN0 aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIG9uZSBkb20gZWxlbWVudCBpcyBk ZXNjZW5kYW50IG9mIGFub3RoZXIKKyAgICAgICAqIGRvbSBlbGVtZW50Lgor ICAgICAgICovCisgICAgICBpc0Rlc2NlbmRhbnQgPSBmdW5jdGlvbiAocGFy ZW50LCBjaGlsZCkgeworICAgICAgICAgdmFyIG5vZGUgPSBjaGlsZC5wYXJl bnROb2RlOworICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgeworICAg ICAgICAgICAgIGlmIChub2RlID09IHBhcmVudCkgeworICAgICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgIH0KKyAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIC8qCisgICAgICAg KiBCZXR3ZWVuIGxlYXZpbmcgdGhlIG9sZCBlbGVtZW50IGZvY3VzIGFuZCBl bnRlcmluZyB0aGUgbmV3IGVsZW1lbnQgZm9jdXMgdGhlCisgICAgICAgKiBh Y3RpdmUgZWxlbWVudCBpcyB0aGUgZG9jdW1lbnQvYm9keSBpdHNlbGYgc28g YWRkIHRpbWVvdXQgdG8gZ2V0IHRoZSBwcm9wZXIKKyAgICAgICAqIGZvY3Vz ZWQgYWN0aXZlIGVsZW1lbnQuCisgICAgICAgKi8KKyAgICAgIHNldFRpbWVv dXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChzZWxmLiRlbFswXSAhPSBk b2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICFpc0Rlc2NlbmRhbnQoc2VsZi4k ZWxbMF0sIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKXsKKyAgICAgICAgICB2 YXIgbSA9IHNlbGYubW9kZWwsCisgICAgICAgICAgICBjb2x1bW4gPSBzZWxm LmNvbHVtbjsKKyAgICAgICAgICBtLnRyaWdnZXIoJ2JhY2tncmlkOmVkaXRl ZCcsIG0sIGNvbHVtbiwgbmV3IEJhY2tncmlkLkNvbW1hbmQoZXYpKTsKKwor ICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAg IGlmIChzZWxmLmdyaWQpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmdyaWQu cmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgc2VsZi5ncmlkID0gbnVsbDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LCAxMCk7CisKKworICAgICAg ICB9fSwxMCk7CisgICAgICByZXR1cm47CisgICAgfQorICB9KTsKKworICAv KgorICAgKiBUaGlzIHdpbGwgaGVscCB1cyB0cmFuc2Zvcm0gdGhlIHVzZXIg aW5wdXQgc3RyaW5nIGFycmF5IHZhbHVlcyBpbiBwcm9wZXIgZm9ybWF0IHRv IGJlCisgICAqIGRpc3BsYXllZCBpbiB0aGUgY2VsbC4KKyAgICovCisgIHZh ciBJbnB1dFN0cmluZ0FycmF5Q2VsbEZvcm1hdHRlciA9IEJhY2tncmlkLkV4 dGVuc2lvbi5JbnB1dFN0cmluZ0FycmF5Q2VsbEZvcm1hdHRlciA9CisgICAg ZnVuY3Rpb24gKCkge307CisgIF8uZXh0ZW5kKElucHV0U3RyaW5nQXJyYXlD ZWxsRm9ybWF0dGVyLnByb3RvdHlwZSwgeworICAgIC8qKgorICAgICAqIFRh a2VzIGEgcmF3IHZhbHVlIGZyb20gYSBtb2RlbCBhbmQgcmV0dXJucyBhbiBv cHRpb25hbGx5IGZvcm1hdHRlZAorICAgICAqIHN0cmluZyBmb3IgZGlzcGxh eS4KKyAgICAgKi8KKyAgICBmcm9tUmF3OiBmdW5jdGlvbiAocmF3RGF0YSwg bW9kZWwpIHsKKyAgICAgICAgdmFyIHZhbHVlcyA9IFtdCisgICAgICAgIHJh d0RhdGEuZWFjaChmdW5jdGlvbihtKXsKKyAgICAgICAgICAgIHZhciB2YWwg PSBtLmdldCgndmFsdWUnKTsKKyAgICAgICAgICAgIGlmIChfLmlzVW5kZWZp bmVkKHZhbCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCgibnVs bCIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2 YWx1ZXMucHVzaChtLmdldCgidmFsdWUiKSk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfQorICAgICAgICApOworICAgICAgICByZXR1cm4gdmFsdWVz LnRvU3RyaW5nKCk7CisgICAgfSwKKyAgICB0b1JhdzogZnVuY3Rpb24gKGZv cm1hdHRlZERhdGEsIG1vZGVsKSB7CisgICAgICByZXR1cm4gZm9ybWF0dGVk RGF0YTsKKyAgICB9CisgIH0pOworCisgIC8qCisgICAqIFRoaXMgd2lsbCBo ZWxwIHVzIHRyYW5zZm9ybSB0aGUgdXNlciBpbnB1dCBpbnRlZ2VyIGFycmF5 IHZhbHVlcyBpbiBwcm9wZXIgZm9ybWF0IHRvIGJlCisgICAqIGRpc3BsYXll ZCBpbiB0aGUgY2VsbC4KKyAgICovCisgIHZhciBJbnB1dEludGVnZXJBcnJh eUNlbGxGb3JtYXR0ZXIgPSBCYWNrZ3JpZC5FeHRlbnNpb24uSW5wdXRJbnRl Z2VyQXJyYXlDZWxsRm9ybWF0dGVyID0KKyAgICBmdW5jdGlvbiAoKSB7fTsK KyAgXy5leHRlbmQoSW5wdXRJbnRlZ2VyQXJyYXlDZWxsRm9ybWF0dGVyLnBy b3RvdHlwZSwgeworICAgIC8qKgorICAgICAqIFRha2VzIGEgcmF3IHZhbHVl IGZyb20gYSBtb2RlbCBhbmQgcmV0dXJucyBhbiBvcHRpb25hbGx5IGZvcm1h dHRlZAorICAgICAqIHN0cmluZyBmb3IgZGlzcGxheS4KKyAgICAgKi8KKyAg ICBmcm9tUmF3OiBmdW5jdGlvbiAocmF3RGF0YSwgbW9kZWwpIHsKKyAgICAg ICAgdmFyIHZhbHVlcyA9IFtdCisgICAgICAgIHJhd0RhdGEuZWFjaChmdW5j dGlvbihtKXsKKyAgICAgICAgICAgIHZhciB2YWwgPSBtLmdldCgndmFsdWUn KTsKKyAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHZhbCkpIHsKKyAg ICAgICAgICAgICAgICB2YWx1ZXMucHVzaCgibnVsbCIpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChtLmdl dCgidmFsdWUiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg ICAgICApOworICAgICAgICByZXR1cm4gdmFsdWVzLnRvU3RyaW5nKCk7Cisg ICAgfSwKKyAgICB0b1JhdzogZnVuY3Rpb24gKGZvcm1hdHRlZERhdGEsIG1v ZGVsKSB7CisgICAgICAgIGZvcm1hdHRlZERhdGEuZWFjaChmdW5jdGlvbiht KXsKKyAgICAgICAgICAgIG0uc2V0KCJ2YWx1ZSIsIHBhcnNlSW50KG0uZ2V0 KCd2YWx1ZScpKSwge3NpbGVudDogdHJ1ZX0pOworICAgICAgICB9KTsKKwor ICAgICAgcmV0dXJuIGZvcm1hdHRlZERhdGE7CisgICAgfQorICB9KTsKKwor ICAvKgorICAgKiAgSW5wdXRTdHJpbmdBcnJheUNlbGwgZm9yIHJlbmRlcmlu ZyBhbmQgdGFraW5nIGlucHV0IGZvciBzdHJpbmcgYXJyYXkgdHlwZSBpbiBk ZWJ1Z2dlcgorICAgKi8KKyAgdmFyIElucHV0U3RyaW5nQXJyYXlDZWxsID0g QmFja2dyaWQuRXh0ZW5zaW9uLklucHV0U3RyaW5nQXJyYXlDZWxsID0gQmFj a2dyaWQuQ2VsbC5leHRlbmQoeworICAgIGNsYXNzTmFtZTogIndpZHRoX3Bl cmNlbnRfMjUiLAorICAgIGZvcm1hdHRlcjogSW5wdXRTdHJpbmdBcnJheUNl bGxGb3JtYXR0ZXIsCisgICAgZWRpdG9yOiBJbnB1dEFycmF5Q2VsbEVkaXRv ciwKKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgQmFj a2dyaWQuQ2VsbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBh cmd1bWVudHMpOworICAgICAgICAvLyBzZXQgdmFsdWUgdG8gZW1wdHkgYXJy YXkuCisgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29sbGVjdGlv bikpIHsKKyAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IG5ldyAoQmFj a2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAgICAgbW9kZWw6 IGFycmF5Q2VsbE1vZGVsfSkpOworICAgICAgICB9CisKKyAgICAgICAgdGhp cy5tb2RlbC5zZXQodGhpcy5jb2x1bW4uZ2V0KCduYW1lJyksIHRoaXMuY29s bGVjdGlvbik7CisKKyAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbGxl Y3Rpb24sICJyZW1vdmUiLCB0aGlzLnJlbmRlcik7CisgICAgfSwKKyAgfSk7 CisKKyAgLyoKKyAgICogIElucHV0SW50ZWdlckFycmF5Q2VsbCBmb3IgcmVu ZGVyaW5nIGFuZCB0YWtpbmcgaW5wdXQgZm9yIGludGVnZXIgYXJyYXkgdHlw ZSBpbiBkZWJ1Z2dlcgorICAgKi8KKyAgdmFyIElucHV0SW50ZWdlckFycmF5 Q2VsbCA9IEJhY2tncmlkLkV4dGVuc2lvbi5JbnB1dEludGVnZXJBcnJheUNl bGwgPSBCYWNrZ3JpZC5DZWxsLmV4dGVuZCh7CisgICAgY2xhc3NOYW1lOiAi d2lkdGhfcGVyY2VudF8yNSIsCisgICAgZm9ybWF0dGVyOiBJbnB1dEludGVn ZXJBcnJheUNlbGxGb3JtYXR0ZXIsCisgICAgZWRpdG9yOiBJbnB1dEFycmF5 Q2VsbEVkaXRvciwKKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewor ICAgICAgQmFja2dyaWQuQ2VsbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBs eSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAvLyBzZXQgdmFsdWUgdG8g ZW1wdHkgYXJyYXkuCisgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMu Y29sbGVjdGlvbikpIHsKKyAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbiA9 IG5ldyAoQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAg ICAgbW9kZWw6IGFycmF5Q2VsbE1vZGVsfSkpOworICAgICAgICB9CisKKwor ICAgICAgICB0aGlzLm1vZGVsLnNldCh0aGlzLmNvbHVtbi5nZXQoJ25hbWUn KSx0aGlzLmNvbGxlY3Rpb24pOworCisgICAgICAgIHRoaXMubGlzdGVuVG8o dGhpcy5jb2xsZWN0aW9uLCAicmVtb3ZlIiwgdGhpcy5yZW5kZXIpOworICAg IH0sCisgIH0pOworCiAgIHJldHVybiBCYWNrZ3JpZDsKIAogfSkpOwpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvX19pbml0X18u cHkgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci9fX2luaXRfXy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzJhY2Q3Ci0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv X19pbml0X18ucHkKQEAgLTAsMCArMSwxMzI0IEBACisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FM IFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTYsIFRoZSBw Z0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBy ZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiJBIGJsdWVwcmludCBt b2R1bGUgaW1wbGVtZW50aW5nIHRoZSBkZWJ1Z2dlciIiIgorCitNT0RVTEVf TkFNRSA9ICdkZWJ1Z2dlcicKKworaW1wb3J0IGpzb24KK2ltcG9ydCByYW5k b20KK2Zyb20gZmxhc2sgaW1wb3J0IHVybF9mb3IsIFJlc3BvbnNlLCByZW5k ZXJfdGVtcGxhdGUsIHJlcXVlc3QsIG1ha2VfcmVzcG9uc2UsIGpzb25pZnks IHNlc3Npb24sIGN1cnJlbnRfYXBwCitmcm9tIHBnYWRtaW4udXRpbHMgaW1w b3J0IFBnQWRtaW5Nb2R1bGUKK2Zyb20gcGdhZG1pbi51dGlscy5hamF4IGlt cG9ydCBiYWRfcmVxdWVzdAorZnJvbSBmbGFzay5leHQuYmFiZWwgaW1wb3J0 IGdldHRleHQKK2Zyb20gZmxhc2suZXh0LnNlY3VyaXR5IGltcG9ydCBsb2dp bl9yZXF1aXJlZAorZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQg Z2V0X2RyaXZlcgorZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJ VkVSCitmcm9tIHBnYWRtaW4ubW9kZWwgaW1wb3J0IGRiLCBEZWJ1Z2dlckZ1 bmN0aW9uQXJndW1lbnRzCitmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBv cnQgbWFrZV9qc29uX3Jlc3BvbnNlLCBcCisgICAgbWFrZV9yZXNwb25zZSBh cyBhamF4X3Jlc3BvbnNlLCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IKK2Zyb20g cGdhZG1pbi51dGlscy5tZW51IGltcG9ydCBQYW5lbAorCisjIENvbnN0YW50 cworQVNZTkNfT0sgPSAxCisKKworY2xhc3MgRGVidWdnZXJNb2R1bGUoUGdB ZG1pbk1vZHVsZSk6CisgICAgIiIiCisgICAgY2xhc3MgRGVidWdnZXJNb2R1 bGUoUGdBZG1pbk1vZHVsZSkKKworICAgICAgICBBIG1vZHVsZSBjbGFzcyBm b3IgZGVidWdnZXIgd2hpY2ggaXMgZGVyaXZlZCBmcm9tIFBnQWRtaW5Nb2R1 bGUuCisKKyAgICBNZXRob2RzOgorICAgIC0tLS0tLS0KKyAgICAqIGdldF9v d25famF2YXNjcmlwdHMoc2VsZikKKyAgICAgIC0gTWV0aG9kIGlzIHVzZWQg dG8gbG9hZCB0aGUgcmVxdWlyZWQgamF2YXNjcmlwdCBmaWxlcyBmb3IgZGVi dWdnZXIgbW9kdWxlCisKKyAgICAiIiIKKworICAgIGRlZiBnZXRfb3duX2ph dmFzY3JpcHRzKHNlbGYpOgorICAgICAgICBzY3JpcHRzID0gbGlzdCgpCisg ICAgICAgIGZvciBuYW1lLCBzY3JpcHQgaW4gWworICAgICAgICAgICAgICAg IFsncGdhZG1pbi50b29scy5kZWJ1Z2dlci5jb250cm9sbGVyJywgJ2pzL2Rl YnVnZ2VyJ10sCisgICAgICAgICAgICAgICAgWydwZ2FkbWluLnRvb2xzLmRl YnVnZ2VyLnVpJywgJ2pzL2RlYnVnZ2VyX3VpJ10sCisgICAgICAgICAgICAg ICAgWydwZ2FkbWluLnRvb2xzLmRlYnVnZ2VyLmRpcmVjdCcsICdqcy9kaXJl Y3QnXQorICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBzY3JpcHRz LmFwcGVuZCh7CisgICAgICAgICAgICAgICAgJ25hbWUnOiBuYW1lLAorICAg ICAgICAgICAgICAgICdwYXRoJzogdXJsX2ZvcignZGVidWdnZXIuaW5kZXgn KSArIHNjcmlwdCwKKyAgICAgICAgICAgICAgICAnd2hlbic6IE5vbmUKKyAg ICAgICAgICAgICAgICB9KQorCisgICAgICAgIHJldHVybiBzY3JpcHRzCisK K2JsdWVwcmludCA9IERlYnVnZ2VyTW9kdWxlKE1PRFVMRV9OQU1FLCBfX25h bWVfXykKKworCitAYmx1ZXByaW50LnJvdXRlKCIvIikKK0Bsb2dpbl9yZXF1 aXJlZAorZGVmIGluZGV4KCk6CisgICAgcmV0dXJuIGJhZF9yZXF1ZXN0KGVy cm9ybXNnPWdldHRleHQoIlRoaXMgVVJMIGNhbiBub3QgYmUgY2FsbGVkIGRp cmVjdGx5ISIpKQorCisKK0BibHVlcHJpbnQucm91dGUoIi9qcy9kZWJ1Z2dl ci5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBzY3JpcHQoKToKKyAgICAi IiJyZW5kZXIgdGhlIG1haW4gZGVidWdnZXIgamF2YXNjcmlwdCBmaWxlIiIi CisgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0 ZSgiZGVidWdnZXIvanMvZGVidWdnZXIuanMiLCBfPWdldHRleHQpLAorICAg ICAgICAgICAgICAgICAgICBzdGF0dXM9MjAwLAorICAgICAgICAgICAgICAg ICAgICBtaW1ldHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIpCisKKwor QGJsdWVwcmludC5yb3V0ZSgiL2pzL2RlYnVnZ2VyX3VpLmpzIikKK0Bsb2dp bl9yZXF1aXJlZAorZGVmIHNjcmlwdF9kZWJ1Z2dlcl9qcygpOgorICAgICIi InJlbmRlciB0aGUgZGVidWdnZXIgVUkgamF2YXNjcmlwdCBmaWxlIiIiCisg ICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgi ZGVidWdnZXIvanMvZGVidWdnZXJfdWkuanMiLCBfPWdldHRleHQpLAorICAg ICAgICAgICAgICAgICAgICBzdGF0dXM9MjAwLAorICAgICAgICAgICAgICAg ICAgICBtaW1ldHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIpCisKKwor QGJsdWVwcmludC5yb3V0ZSgiL2pzL2RpcmVjdC5qcyIpCitAbG9naW5fcmVx dWlyZWQKK2RlZiBzY3JpcHRfZGVidWdnZXJfZGlyZWN0X2pzKCk6CisgICAg IiIicmVuZGVyIHRoZSBqYXZhc2NyaXB0IGZpbGUgcmVxdWlyZWQgc2VuZCBh bmQgcmVjZWl2ZSB0aGUgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgZm9yIGRlYnVn Z2luZyIiIgorICAgIHJldHVybiBSZXNwb25zZShyZXNwb25zZT1yZW5kZXJf dGVtcGxhdGUoImRlYnVnZ2VyL2pzL2RpcmVjdC5qcyIsIF89Z2V0dGV4dCks CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgICAg ICAgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IikK KworCitkZWYgdXBkYXRlX3Nlc3Npb25fZGVidWdnZXJfdHJhbnNhY3Rpb24o dHJhbnNfaWQsIGRhdGEpOgorICAgICIiIlVwZGF0ZSB0aGUgc2Vzc2lvbiB2 YXJpYWJsZXMgcmVxdWlyZWQgZm9yIGRlYnVnZ2VyIHdpdGggdHJhbnNhY3Rp b24gSUQiIiIKKyAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vzc2lvblsnZGVidWdn ZXJEYXRhJ10KKyAgICBkZWJ1Z2dlcl9kYXRhW3N0cih0cmFuc19pZCldID0g ZGF0YQorCisgICAgc2Vzc2lvblsnZGVidWdnZXJEYXRhJ10gPSBkZWJ1Z2dl cl9kYXRhCisKKworZGVmIHVwZGF0ZV9zZXNzaW9uX2Z1bmN0aW9uX3RyYW5z YWN0aW9uKHRyYW5zX2lkLCBkYXRhKToKKyAgICAiIiJVcGRhdGUgdGhlIHNl c3Npb24gdmFyaWFibGVzIG9mIGZ1bmN0aW9ucyByZXF1aXJlZCB0byBkZWJ1 ZyB3aXRoIHRyYW5zYWN0aW9uIElEIiIiCisgICAgZnVuY3Rpb25fZGF0YSA9 IHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddCisgICAgZnVuY3Rpb25fZGF0YVtz dHIodHJhbnNfaWQpXSA9IGRhdGEKKyAgICBzZXNzaW9uWydmdW5jdGlvbkRh dGEnXSA9IGZ1bmN0aW9uX2RhdGEKKworCitAYmx1ZXByaW50LnJvdXRlKCcv aW5pdC88bm9kZV90eXBlPi88aW50OnNpZD4vPGludDpkaWQ+LzxpbnQ6c2Np ZD4vPGludDpmaWQ+JywgbWV0aG9kcz1bJ0dFVCddKQorQGxvZ2luX3JlcXVp cmVkCitkZWYgaW5pdF9mdW5jdGlvbihub2RlX3R5cGUsIHNpZCwgZGlkLCBz Y2lkLCBmaWQpOgorICAgICIiIgorICAgIGluaXRfZnVuY3Rpb24obm9kZV90 eXBlLCBzaWQsIGRpZCwgc2NpZCwgZmlkKQorCisgICAgVGhpcyBtZXRob2Qg aXMgcmVzcG9uc2libGUgdG8gaW5pdGlhbGl6ZSB0aGUgZnVuY3Rpb24gcmVx dWlyZWQgZm9yIGRlYnVnZ2luZy4KKyAgICBUaGlzIG1ldGhvZCBpcyBhbHNv IHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIHRoZSBhbGwgZnVuY3Rpb25zIGRh dGEgdG8gc2Vzc2lvbiB2YXJpYWJsZS4KKyAgICBUaGlzIGlzIG9ubHkgcmVx dWlyZWQgZm9yIGRpcmVjdCBkZWJ1Z2dpbmcuIEFzIEluZGlyZWN0IGRlYnVn Z2luZyBkb2VzIG5vdCByZXF1aXJlIHRoZXNlIGRhdGEgYmVjYXVzZSB1c2Vy IHdpbGwKKyAgICBwcm92aWRlIGFsbCB0aGUgYXJndW1lbnRzIGFuZCBvdGhl ciBmdW5jdGlvbnMgaW5mb3JtYXRpb24gdGhyb3VnaCBhbm90aGVyIHNlc3Np b24gdG8gaW52b2tlIHRoZSB0YXJnZXQuCisKKyAgICBQYXJhbWV0ZXJzOgor ICAgICAgICBub2RlX3R5cGUKKyAgICAgICAgLSBOb2RlIHR5cGUgLSBGdW5j dGlvbiBvciBQcm9jZWR1cmUKKyAgICAgICAgc2lkCisgICAgICAgIC0gU2Vy dmVyIElkCisgICAgICAgIGRpZAorICAgICAgICAtIERhdGFiYXNlIElkCisg ICAgICAgIHNjaWQKKyAgICAgICAgLSBTY2hlbWEgSWQKKyAgICAgICAgZmlk CisgICAgICAgIC0gRnVuY3Rpb24gSWQKKyAgICAiIiIKKyAgICBtYW5hZ2Vy ID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9t YW5hZ2VyKHNpZCkKKyAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRp ZD1kaWQpCisKKyAgICAjIEdldCB0aGUgc2VydmVyIHZlcnNpb24sIHNlcnZl ciB0eXBlIGFuZCB1c2VyIGluZm9ybWF0aW9uCisgICAgdmVyID0gbWFuYWdl ci52ZXJzaW9uCisgICAgc2VydmVyX3R5cGUgPSBtYW5hZ2VyLnNlcnZlcl90 eXBlCisgICAgdXNlciA9IG1hbmFnZXIudXNlcl9pbmZvCisKKyAgICAjIENo ZWNrIHNlcnZlciB0eXBlIGlzIHBwYXMgb3Igbm90CisgICAgcHBhc19zZXJ2 ZXIgPSBGYWxzZQorICAgIGlmIHNlcnZlcl90eXBlID09ICdwcGFzJzoKKyAg ICAgICAgcHBhc19zZXJ2ZXIgPSBUcnVlOworCisgICAgIyBTZXQgdGhlIHRl bXBsYXRlIHBhdGggcmVxdWlyZWQgdG8gcmVhZCB0aGUgc3FsIGZpbGVzCisg ICAgdGVtcGxhdGVfcGF0aCA9ICdkZWJ1Z2dlci9zcWwnCisKKyAgICBzcWwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICdn ZXRfZnVuY3Rpb25fZGVidWdfaW5mby5zcWwnXSksIGlzX3BwYXNfZGF0YWJh c2U9cHBhc19zZXJ2ZXIsIGhhc0ZlYXR1cmVGdW5jdGlvbkRlZmF1bHRzPSBU cnVlLCBmaWQ9ZmlkKQorICAgIHN0YXR1cywgcl9zZXQgPSBjb25uLmV4ZWN1 dGVfZGljdChzcWwpCisgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgY3Vy cmVudF9hcHAubG9nZ2VyLmRlYnVnKCJFcnJvciBnZXR0aW5nIGZ1bmN0aW9u IGluZm9ybWF0aW9uIGZyb20gZGF0YWJhc2UiKQorICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJfc2V0KQorCisgICAg cmV0X3N0YXR1cyA9IHN0YXR1cworCisgICAgIyBDaGVjayB0aGUgY29uZGl0 aW9uIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVidWdnYWJsZSBvciBu b3QuLi4uCisgICAgaWYgcl9zZXRbJ3Jvd3MnXVswXToKKyAgICAgICAgIyBG dW5jdGlvbiB3aXRoIGEgY29sb24gaW4gdGhlIG5hbWUgY2Fubm90IGJlIGRl YnVnZ2VkLgorICAgICAgICAjIElmIHRoaXMgaXMgYW4gRURCIHdyYXBwZWQg ZnVuY3Rpb24sIG5vIGRlYnVnZ2luZyBhbGxvd2VkCisgICAgICAgICMgRnVu Y3Rpb24gd2l0aCByZXR1cm4gdHlwZSAidHJpZ2dlciIgY2FuIG5vdCBiZSBk ZWJ1Z2dlZC4KKyAgICAgICAgaWYgIjoiIGluIHJfc2V0Wydyb3dzJ11bMF1b J25hbWUnXToKKyAgICAgICAgICAgIHJldF9zdGF0dXMgPSBGYWxzZQorICAg ICAgICBlbGlmIHJfc2V0Wydyb3dzJ11bMF1bJ3JldHR5cGUnXSA9PSAndHJp Z2dlcic6CisgICAgICAgICAgICByZXRfc3RhdHVzID0gRmFsc2UKKyAgICAg ICAgZWxpZiBwcGFzX3NlcnZlciBhbmQgcl9zZXRbJ3Jvd3MnXVswXVsncHJv c3JjJ10ubHN0cmlwKCkuc3RhcnRzd2l0aCgnJF9fRURCd3JhcHBlZF9fJCcp OgorICAgICAgICAgICAgcmV0X3N0YXR1cyA9IEZhbHNlCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICAjIElmIHVzZXIgaXMgc3VwZXIgdXNlciB0aGVu IHdlIHNob3VsZCBjaGVjayBkZWJ1Z2dlciBsaWJyYXJ5IGlzIGxvYWRlZCBv ciBub3QKKyAgICAgICAgICAgIGlmIHVzZXJbJ2lzX3N1cGVydXNlciddOgor ICAgICAgICAgICAgICAgIHN0YXR1c19pbiwgcmlkX3ByZSA9IGNvbm4uZXhl Y3V0ZV9zY2FsYXIoIlNIT1cgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIikK KyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzX2luOgorICAgICAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKCJFUlJP UjogQ291bGRuJ3QgZmV0Y2ggZGVidWdnZXIgcGx1Z2luIGluZm9ybWF0aW9u IikKKworICAgICAgICAgICAgICAgICMgTmVlZCB0byBjaGVjayBpZiBwbHVn aW4gaXMgcmVhbGx5IGxvYWRlZCBvciBub3Qgd2l0aCAicGx1Z2luX2RlYnVn Z2VyIiBzdHJpbmcKKyAgICAgICAgICAgICAgICBpZiByaWRfcHJlOgorICAg ICAgICAgICAgICAgICAgICBpZiAicGx1Z2luX2RlYnVnZ2VyIiBub3QgaW4g cmlkX3ByZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldF9zdGF0dXMg PSBGYWxzZQorCisgICAgICAgICAgICBzdGF0dXNfaW4sIHJpZF90YXIgPSBj b25uLmV4ZWN1dGVfc2NhbGFyKCIgU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJvYyBXSEVSRSBwcm9uYW1lID0gJ3BsZGJnX2dldF90YXJnZXRfaW5mbycg IikKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXNfaW46CisgICAgICAgICAg ICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmRlYnVnKCJFUlJPUjogQ291bGRu J3QgZmV0Y2ggZGVidWdnZXIgdGFyZ2V0IGluZm9ybWF0aW9uIikKKyAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKCJFUlJP UjogQ291bGRuJ3QgZmV0Y2ggZGVidWdnZXIgdGFyZ2V0IGluZm9ybWF0aW9u IikKKworICAgICAgICAgICAgaWYgcmlkX3RhciA9PSAwOgorICAgICAgICAg ICAgICAgIHJldF9zdGF0dXMgPSBGYWxzZQorICAgIGVsc2U6CisgICAgICAg IHJldF9zdGF0dXMgPSBGYWxzZQorCisgICAgIyBSZXR1cm4gdGhlIHJlc3Bv bnNlIHRoYXQgZnVuY3Rpb24gY2FuIG5vdCBiZSBkZWJ1Zy4uLgorICAgIGlm IG5vdCByZXRfc3RhdHVzOgorICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIu ZGVidWcoIkVycm9yOiBGdW5jdGlvbi9Qcm9jZWR1cmUgY2FuIG5vdCBiZSBk ZWJ1ZyIpCisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io IkVSUk9SOiBGdW5jdGlvbi9Qcm9jZWR1cmUgY2FuIG5vdCBiZSBkZWJ1Zy4i KQorCisgICAgIyBTdG9yZSB0aGUgZnVuY3Rpb24gaW5mb3JtYXRpb24gaW4g c2Vzc2lvbiB2YXJpYWJsZQorICAgIGlmICdmdW5jRGF0YScgbm90IGluIHNl c3Npb246CisgICAgICAgIGZ1bmN0aW9uX2RhdGEgPSBkaWN0KCkKKyAgICBl bHNlOgorICAgICAgICBmdW5jdGlvbl9kYXRhID0gc2Vzc2lvblsnZnVuY0Rh dGEnXQorCisgICAgZnVuY3Rpb25fZGF0YSA9IHsKKyAgICAgICAgJ29pZCc6 IGZpZCwKKyAgICAgICAgJ25hbWUnOiByX3NldFsncm93cyddWzBdWyduYW1l J10sCisgICAgICAgICdpc19mdW5jJzogcl9zZXRbJ3Jvd3MnXVswXVsnaXNm dW5jJ10sCisgICAgICAgICdpc19jYWxsYWJsZSc6IEZhbHNlLAorICAgICAg ICAnc2NoZW1hJzogcl9zZXRbJ3Jvd3MnXVswXVsnc2NoZW1hbmFtZSddLAor ICAgICAgICAnbGFuZ3VhZ2UnOiByX3NldFsncm93cyddWzBdWydsYW5uYW1l J10sCisgICAgICAgICdyZXR1cm5fdHlwZSc6IHJfc2V0Wydyb3dzJ11bMF1b J3JldHR5cGUnXSwKKyAgICAgICAgJ2FyZ3NfdHlwZSc6IHJfc2V0Wydyb3dz J11bMF1bJ3Byb2FyZ3R5cGVuYW1lcyddLAorICAgICAgICAnYXJnc19uYW1l Jzogcl9zZXRbJ3Jvd3MnXVswXVsncHJvYXJnbmFtZXMnXSwKKyAgICAgICAg J2FyZ19tb2RlJzogcl9zZXRbJ3Jvd3MnXVswXVsncHJvYXJnbW9kZXMnXSwK KyAgICAgICAgJ3VzZV9kZWZhdWx0Jzogcl9zZXRbJ3Jvd3MnXVswXVsncHJv bmFyZ2RlZmF1bHRzJ10sCisgICAgICAgICdkZWZhdWx0X3ZhbHVlJzogcl9z ZXRbJ3Jvd3MnXVswXVsncHJvYXJnZGVmYXVsdHMnXSwKKyAgICAgICAgJ3Br Zyc6IHJfc2V0Wydyb3dzJ11bMF1bJ3BrZyddLAorICAgICAgICAnYXJnc192 YWx1ZSc6ICcnCisgICAgfQorCisgICAgc2Vzc2lvblsnZnVuY0RhdGEnXSA9 IGZ1bmN0aW9uX2RhdGE7CisKKyAgICBkYXRhID0ge30KKyAgICBkYXRhWydu YW1lJ10gPSByX3NldFsncm93cyddWzBdWydwcm9hcmduYW1lcyddCisgICAg ZGF0YVsndHlwZSddID0gcl9zZXRbJ3Jvd3MnXVswXVsncHJvYXJndHlwZW5h bWVzJ10KKyAgICBkYXRhWyd1c2VfZGVmYXVsdCddID0gcl9zZXRbJ3Jvd3Mn XVswXVsncHJvbmFyZ2RlZmF1bHRzJ10KKyAgICBkYXRhWydkZWZhdWx0X3Zh bHVlJ10gPSByX3NldFsncm93cyddWzBdWydwcm9hcmdkZWZhdWx0cyddCisg ICAgZGF0YVsncmVxdWlyZV9pbnB1dCddID0gVHJ1ZQorCisgICAgIyBCZWxv dyB3aWxsIGNoZWNrIGRvIHdlIHJlYWxseSByZXF1aXJlZCBmb3IgdGhlIHVz ZXIgaW5wdXQgYXJndW1lbnRzIGFuZCBzaG93IGlucHV0IGRpYWxvZworICAg IGlmIG5vdCByX3NldFsncm93cyddWzBdWydwcm9hcmd0eXBlbmFtZXMnXToK KyAgICAgICAgZGF0YVsncmVxdWlyZV9pbnB1dCddID0gRmFsc2UKKyAgICBl bHNlOgorICAgICAgICBpZiByX3NldFsncm93cyddWzBdWydwa2cnXSAhPSAw IGFuZCByX3NldFsncm93cyddWzBdWydwa2djb25zb2lkJ10gIT0gMDoKKyAg ICAgICAgICAgIGRhdGFbJ3JlcXVpcmVfaW5wdXQnXSA9IFRydWUKKworICAg ICAgICBpZiByX3NldFsncm93cyddWzBdWydwcm9hcmdtb2RlcyddOgorICAg ICAgICAgICAgcHJvX2FyZ19tb2RlcyA9IHJfc2V0Wydyb3dzJ11bMF1bJ3By b2FyZ21vZGVzJ10uc3BsaXQoIiwiKTsKKyAgICAgICAgICAgIGZvciBwcl9h cmdfbW9kZSBpbiBwcm9fYXJnX21vZGVzOgorICAgICAgICAgICAgICAgIGlm IHByX2FyZ19tb2RlID09ICdvJyBvciBwcl9hcmdfbW9kZSA9PSAndCc6Cisg ICAgICAgICAgICAgICAgICAgIGRhdGFbJ3JlcXVpcmVfaW5wdXQnXSA9IEZh bHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRhdGFbJ3JlcXVp cmVfaW5wdXQnXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisKKyAgICByX3NldFsncm93cyddWzBdWydyZXF1aXJlX2lucHV0J10gPSBk YXRhWydyZXF1aXJlX2lucHV0J10KKworICAgIHJldHVybiBtYWtlX2pzb25f cmVzcG9uc2UoCisgICAgICAgICAgICAgICAgZGF0YT1yX3NldFsncm93cydd LAorICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICAg ICApCisKKworQGJsdWVwcmludC5yb3V0ZSgnL2RpcmVjdC88aW50OnRyYW5z X2lkPicsIG1ldGhvZHM9WydHRVQnXSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVm IGRpcmVjdF9uZXcodHJhbnNfaWQpOgorICAgIGRlYnVnZ2VyX2RhdGEgPSBz ZXNzaW9uWydkZWJ1Z2dlckRhdGEnXQorICAgICMgUmV0dXJuIGZyb20gdGhl IGZ1bmN0aW9uIGlmIHRyYW5zYWN0aW9uIGlkIG5vdCBmb3VuZAorICAgIGlm IHN0cih0cmFuc19pZCkgbm90IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAg IHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IFRy dWV9KQorCisgICAgb2JqID0gZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQp XQorCisgICAgIyBpZiBpbmRpcmVjdCBkZWJ1Z2dpbmcgcGFzcyB2YWx1ZSAw IHRvIGNsaWVudCBhbmQgZm9yIGRpcmVjdCBkZWJ1Z2dpbmcgcGFzcyBpdCB0 byAxCisgICAgZGVidWdfdHlwZSA9IDAgaWYgb2JqWydkZWJ1Z190eXBlJ10g PT0gJ2luZGlyZWN0JyBlbHNlIDEKKworICAgIHJldHVybiByZW5kZXJfdGVt cGxhdGUoCisgICAgICAgICJkZWJ1Z2dlci9kaXJlY3QuaHRtbCIsCisgICAg ICAgIF89Z2V0dGV4dCwKKyAgICAgICAgZnVuY3Rpb25fbmFtZT0ndGVzdCcs CisgICAgICAgIHVuaXF1ZUlkPXRyYW5zX2lkLAorICAgICAgICBkZWJ1Z190 eXBlPWRlYnVnX3R5cGUsCisgICAgICAgIHN0eWxlc2hlZXRzPVt1cmxfZm9y KCdkZWJ1Z2dlci5zdGF0aWMnLCBmaWxlbmFtZT0nY3NzL2RlYnVnZ2VyLmNz cycpXQorICAgICAgICApCisKKworQGJsdWVwcmludC5yb3V0ZSgnL2luaXRp YWxpemVfdGFyZ2V0LzxkZWJ1Z190eXBlPi88aW50OnNpZD4vPGludDpkaWQ+ LzxpbnQ6c2NpZD4vPGludDpmdW5jX2lkPicsIG1ldGhvZHM9WydHRVQnLCAn UE9TVCddKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgaW5pdGlhbGl6ZV90YXJn ZXQoZGVidWdfdHlwZSwgc2lkLCBkaWQsIHNjaWQsIGZ1bmNfaWQpOgorICAg ICIiIgorICAgIGluaXRpYWxpemVfdGFyZ2V0KGRlYnVnX3R5cGUsIHNpZCwg ZGlkLCBzY2lkLCBmdW5jX2lkKQorCisgICAgVGhpcyBtZXRob2QgaXMgcmVz cG9uc2libGUgZm9yIGNyZWF0aW5nIGFuIGFzeW5jaHJvbm91cyBjb25uZWN0 aW9uLgorICAgIEl0IHdpbGwgYWxzbyBjcmVhdGUgYSB1bmlxdWUgdHJhbnNh Y3Rpb24gaWQgYW5kIHN0b3JlIHRoZSBpbmZvcm1hdGlvbgorICAgIGludG8g c2Vzc2lvbiB2YXJpYWJsZS4KKworICAgIFBhcmFtZXRlcnM6CisgICAgICAg IGRlYnVnX3R5cGUKKyAgICAgICAgLSBUeXBlIG9mIGRlYnVnZ2luZyAoRGly ZWN0IG9yIEluZGlyZWN0KQorICAgICAgICBzaWQKKyAgICAgICAgLSBTZXJ2 ZXIgSWQKKyAgICAgICAgZGlkCisgICAgICAgIC0gRGF0YWJhc2UgSWQKKyAg ICAgICAgc2NpZAorICAgICAgICAtIFNjaGVtYSBJZAorICAgICAgICBmdW5j X2lkCisgICAgICAgIC0gRnVuY3Rpb24gSWQKKyAgICAiIiIKKworICAgICMg Q3JlYXRlIGFzeW5jaHJvbm91cyBjb25uZWN0aW9uIHVzaW5nIHJhbmRvbSBj b25uZWN0aW9uIGlkLgorICAgIGNvbm5faWQgPSBzdHIocmFuZG9tLnJhbmRp bnQoMSwgOTk5OTk5OSkpCisgICAgdHJ5OgorICAgICAgICBtYW5hZ2VyID0g Z2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5h Z2VyKHNpZCkKKyAgICAgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihk aWQ9ZGlkLCBjb25uX2lkPWNvbm5faWQpCisgICAgZXhjZXB0IEV4Y2VwdGlv biBhcyBlOgorICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9y KGVycm9ybXNnPXN0cihlKSkKKworICAgICMgQ29ubmVjdCB0aGUgU2VydmVy CisgICAgc3RhdHVzLCBtc2cgPSBjb25uLmNvbm5lY3QoKQorICAgIGlmIG5v dCBzdGF0dXM6CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9c3RyKG1zZykpCisKKyAgICAjIENyZWF0ZSBhIHVuaXF1 ZSBpZCBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgdHJhbnNfaWQgPSBzdHIo cmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkpCisKKyAgICAjIElmIHRoZXJl IGlzIG5vIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBzZXNzaW9uIHZhcmlh YmxlIHRoZW4gY3JlYXRlIHRoZSBzdG9yZSB0aGF0IGluZm9ybWF0aW9uCisg ICAgaWYgJ2RlYnVnZ2VyRGF0YScgbm90IGluIHNlc3Npb246CisgICAgICAg IGRlYnVnZ2VyX2RhdGEgPSBkaWN0KCkKKyAgICBlbHNlOgorICAgICAgICBk ZWJ1Z2dlcl9kYXRhID0gc2Vzc2lvblsnZGVidWdnZXJEYXRhJ10KKworICAg IHN0YXR1cyA9IFRydWU7CisKKyAgICAjIEZpbmQgb3V0IHRoZSBkZWJ1Z2dl ciB2ZXJzaW9uIGFuZCBzdG9yZSBpdCBpbiBzZXNzaW9uIHZhcmlhYmxlcwor ICAgIHN0YXR1cywgcmlkID0gY29ubi5leGVjdXRlX3NjYWxhcigKKyAgICAg ICAgICAgICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2NhdGFs b2cucGdfcHJvYyBwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIExFRlQg Sk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIHAucHJvbmFtZXNw YWNlID0gbi5vaWQgXAorICAgICAgICAgICAgICAgICAgICBXSEVSRSBuLm5z cG5hbWUgPSBBTlkoY3VycmVudF9zY2hlbWFzKGZhbHNlKSkgQU5EIHAucHJv bmFtZSA9ICdwbGRiZ19nZXRfcHJveHlfaW5mbyc7IgorICAgICAgICAgICAg ICAgICAgICApCisKKyAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJpZCkKKyAgICBl bHNlOgorICAgICAgICBpZiByaWQgPT0gMDoKKyAgICAgICAgICAgIGRlYnVn Z2VyX3ZlcnNpb24gPSAxCisKKyAgICAgICAgc3RhdHVzLCByaWQgPSBjb25u LmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAgICAgIlNFTEVDVCBwcm94eWFw aXZlciBGUk9NIHBsZGJnX2dldF9wcm94eV9pbmZvKCk7IgorICAgICAgICAg ICAgKQorCisgICAgICAgIGlmIHN0YXR1czoKKyAgICAgICAgICAgIGlmIHJp ZCA9PSAyIG9yIHJpZCA9PSAzOgorICAgICAgICAgICAgICAgIGRlYnVnZ2Vy X3ZlcnNpb24gPSByaWQ7CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg ICAgICAgIHN0YXR1cyA9IEZhbHNlOworCisgICAgIyBBZGQgdGhlIGRlYnVn Z2VyIHZlcnNpb24gaW5mb3JtYXRpb24gdG8gcGdhZG1pbjQgbG9nIGZpbGUK KyAgICBjdXJyZW50X2FwcC5sb2dnZXIuZGVidWcoIkRlYnVnZ2VyIHZlcnNp b24gaXM6ICVkIiwgZGVidWdnZXJfdmVyc2lvbikKKworICAgICMgV2UgbmVl ZCB0byBwYXNzIHRoZSB2YWx1ZSBlbnRlcmVkIGJ5IHRoZSB1c2VyIGluIGRp YWxvZyBmb3IgZGlyZWN0IGRlYnVnZ2luZworICAgICMgSGVyZSB3ZSBnZXQg dGhlIHZhbHVlIGluIGNhc2Ugb2YgZGlyZWN0IGRlYnVnZ2luZyBzbyB1cGRh dGUgdGhlIHNlc3Npb24gdmFyaWFibGVzIGFjY29yZGluZ2x5CisgICAgIyBG b3IgaW5kaXJlY3QgZGVidWdnaW5nIHVzZXIgd2lsbCBwcm92aWRlIHRoZSBk YXRhIGZyb20gYW5vdGhlciBzZXNzaW9uIHNvIGJlbG93IGNvbmRpdGlvbiB3 aWxsIGJlIGJlIHJlcXVpcmVkCisgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0g J1BPU1QnOgorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXF1ZXN0LnZh bHVlc1snZGF0YSddKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAg ZCA9IHNlc3Npb25bJ2Z1bmNEYXRhJ10KKyAgICAgICAgICAgIGRbJ2FyZ3Nf dmFsdWUnXSA9IGRhdGEKKyAgICAgICAgICAgIHNlc3Npb25bJ2Z1bmNEYXRh J10gPSBkCisKKyAgICAjIFVwZGF0ZSB0aGUgZGVidWdnZXIgZGF0YSBzZXNz aW9uIHZhcmlhYmxlCisgICAgIyBIZXJlIGZyYW1lX2lkIGlzIHJlcXVpcmVk IHdoZW4gdXNlciBkZWJ1ZyB0aGUgbXVsdGlsZXZlbCBmdW5jdGlvbi4gV2hl biB1c2VyIHNlbGVjdCB0aGUgZnJhbWUgZnJvbSBjbGllbnQgd2UKKyAgICAj IG5lZWQgdG8gdXBkYXRlIHRoZSBmcmFtZSBoZXJlIGFuZCBzZXQgdGhlIGJy ZWFrcG9pbnQgaW5mb3JtYXRpb24gb24gdGhhdCBmdW5jdGlvbiBvaWQKKyAg ICBkZWJ1Z2dlcl9kYXRhW3N0cih0cmFuc19pZCldID0geworICAgICAgICAn Y29ubl9pZCc6IGNvbm5faWQsCisgICAgICAgICdzZXJ2ZXJfaWQnOiBzaWQs CisgICAgICAgICdkYXRhYmFzZV9pZCc6IGRpZCwKKyAgICAgICAgJ3NjaGVt YV9pZCc6IHNjaWQsCisgICAgICAgICdmdW5jdGlvbl9pZCc6IGZ1bmNfaWQs CisgICAgICAgICdkZWJ1Z190eXBlJzogZGVidWdfdHlwZSwKKyAgICAgICAg J2RlYnVnZ2VyX3ZlcnNpb24nOiBkZWJ1Z2dlcl92ZXJzaW9uLAorICAgICAg ICAnZnJhbWVfaWQnOiAwLAorICAgICAgICAncmVzdGFydF9kZWJ1Zyc6IDAK KyAgICAgICAgfQorCisgICAgIyBTdG9yZSB0aGUgZ3JpZCBkaWN0aW9uYXJ5 IGludG8gdGhlIHNlc3Npb24gdmFyaWFibGUKKyAgICBzZXNzaW9uWydkZWJ1 Z2dlckRhdGEnXSA9IGRlYnVnZ2VyX2RhdGEKKworICAgICMgVXBkYXRlIHRo ZSBmdW5jdGlvbiBzZXNzaW9uICBpbmZvcm1hdGlvbiB3aXRoIHNhbWUgdHJh bnNhY3Rpb24gaWQKKyAgICBmdW5jX2RhdGEgPSBzZXNzaW9uWydmdW5jRGF0 YSddCisKKyAgICAjIFN0b3JlIHRoZSBmdW5jdGlvbiBpbmZvcm1hdGlvbiBp biBzZXNzaW9uIHZhcmlhYmxlCisgICAgaWYgJ2Z1bmN0aW9uRGF0YScgbm90 IGluIHNlc3Npb246CisgICAgICAgIGZ1bmN0aW9uX2RhdGEgPSBkaWN0KCkK KyAgICBlbHNlOgorICAgICAgICBmdW5jdGlvbl9kYXRhID0gc2Vzc2lvblsn ZnVuY3Rpb25EYXRhJ10KKworICAgIGZ1bmN0aW9uX2RhdGFbc3RyKHRyYW5z X2lkKV0gPSB7CisgICAgICAgICdvaWQnOiBmdW5jX2RhdGFbJ29pZCddLAor ICAgICAgICAnbmFtZSc6IGZ1bmNfZGF0YVsnbmFtZSddLAorICAgICAgICAn aXNfZnVuYyc6IGZ1bmNfZGF0YVsnaXNfZnVuYyddLAorICAgICAgICAnaXNf Y2FsbGFibGUnOiBmdW5jX2RhdGFbJ2lzX2NhbGxhYmxlJ10sCisgICAgICAg ICdzY2hlbWEnOiBmdW5jX2RhdGFbJ3NjaGVtYSddLAorICAgICAgICAnbGFu Z3VhZ2UnOiBmdW5jX2RhdGFbJ2xhbmd1YWdlJ10sCisgICAgICAgICdyZXR1 cm5fdHlwZSc6IGZ1bmNfZGF0YVsncmV0dXJuX3R5cGUnXSwKKyAgICAgICAg J2FyZ3NfdHlwZSc6IGZ1bmNfZGF0YVsnYXJnc190eXBlJ10sCisgICAgICAg ICdhcmdzX25hbWUnOiBmdW5jX2RhdGFbJ2FyZ3NfbmFtZSddLAorICAgICAg ICAnYXJnX21vZGUnOiBmdW5jX2RhdGFbJ2FyZ19tb2RlJ10sCisgICAgICAg ICd1c2VfZGVmYXVsdCc6IGZ1bmNfZGF0YVsndXNlX2RlZmF1bHQnXSwKKyAg ICAgICAgJ2RlZmF1bHRfdmFsdWUnOiBmdW5jX2RhdGFbJ2RlZmF1bHRfdmFs dWUnXSwKKyAgICAgICAgJ3BrZyc6IGZ1bmNfZGF0YVsncGtnJ10sCisgICAg ICAgICdhcmdzX3ZhbHVlJzogZnVuY19kYXRhWydhcmdzX3ZhbHVlJ10KKyAg ICB9CisKKyAgICAjIFVwZGF0ZSB0aGUgc2Vzc2lvbiB2YXJpYWJsZSBvZiBm dW5jdGlvbiBpbmZvcm1hdGlvbgorICAgIHNlc3Npb25bJ2Z1bmN0aW9uRGF0 YSddID0gZnVuY3Rpb25fZGF0YTsKKworICAgICMgRGVsZXRlIHRoZSAnZnVu Y0RhdGEnIHNlc3Npb24gdmFyaWFibGVzIGFzIGl0IGlzIG5vdCB1c2VkIG5v dyBhcyB0YXJnZXQgaXMgaW5pdGlhbGl6ZWQKKyAgICBkZWwgc2Vzc2lvblsn ZnVuY0RhdGEnXQorCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShk YXRhPXsnc3RhdHVzJzogc3RhdHVzLCAnZGVidWdnZXJUcmFuc0lkJzogdHJh bnNfaWR9KQorCisKK0BibHVlcHJpbnQucm91dGUoJy9jbG9zZS88aW50OnRy YW5zX2lkPicsIG1ldGhvZHM9WyJHRVQiXSkKK2RlZiBjbG9zZSh0cmFuc19p ZCk6CisgICAgIiIiCisgICAgY2xvc2UodHJhbnNfaWQpCisKKyAgICBUaGlz IG1ldGhvZCBpcyB1c2VkIHRvIGNsb3NlIHRoZSBhc3luY2hyb25vdXMgY29u bmVjdGlvbgorICAgIGFuZCByZW1vdmUgdGhlIGluZm9ybWF0aW9uIG9mIHVu aXF1ZSB0cmFuc2FjdGlvbiBpZCBmcm9tCisgICAgdGhlIHNlc3Npb24gdmFy aWFibGUuCisKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0cmFuc19pZAor ICAgICAgICAtIHVuaXF1ZSB0cmFuc2FjdGlvbiBpZC4KKyAgICAiIiIKKyAg ICAjIEFzIGRlYnVnZ2VyIGRhdGEgaXMgbm90IGluIHNlc3Npb24gdGhhdCBt ZWFucyB3ZSBoYXZlIGFscmVhZHkgZGVsZXRlZCBhbmQgY2xvc2UgdGhlIHRh cmdldAorICAgIGlmICdkZWJ1Z2dlckRhdGEnIG5vdCBpbiBzZXNzaW9uOgor ICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0 dXMnOiBUcnVlfSkKKworICAgIGRlYnVnZ2VyX2RhdGEgPSBzZXNzaW9uWydk ZWJ1Z2dlckRhdGEnXQorICAgICMgUmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9u IGlmIHRyYW5zYWN0aW9uIGlkIG5vdCBmb3VuZAorICAgIGlmIHN0cih0cmFu c19pZCkgbm90IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IFRydWV9KQorCisg ICAgb2JqID0gZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorICAgIHRy eToKKyAgICAgICAgbWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9E UklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihvYmpbJ3NlcnZlcl9pZCddKQor ICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1vYmpbJ2Rh dGFiYXNlX2lkJ10sIGNvbm5faWQ9b2JqWydjb25uX2lkJ10pCisgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKKworICAgICMgZmluZCB0 aGUgZGVidWdnZXIgdmVyc2lvbiBhbmQgZXhlY3V0ZSB0aGUgcXVlcnkgYWNj b3JkaW5nbHkKKyAgICBkYmdfdmVyc2lvbiA9IG9ialsnZGVidWdnZXJfdmVy c2lvbiddCisgICAgaWYgZGJnX3ZlcnNpb24gPD0gMjoKKyAgICAgICAgdGVt cGxhdGVfcGF0aCA9ICdkZWJ1Z2dlci9zcWwvdjEnCisgICAgZWxzZToKKyAg ICAgICAgdGVtcGxhdGVfcGF0aCA9ICdkZWJ1Z2dlci9zcWwvdjInCisKKyAg ICAjIFJlbGVhc2UgdGhlIGNvbm5lY3Rpb24KKyAgICBpZiBjb25uLmNvbm5l Y3RlZCgpOgorICAgICAgICBpZiBvYmpbJ2RlYnVnX3R5cGUnXSA9PSAnaW5k aXJlY3QnOgorICAgICAgICAgICAgIyByZW5kZXIgdGhlIFNRTCB0ZW1wbGF0 ZSBhbmQgc2VuZCB0aGUgcXVlcnkgdG8gc2VydmVyCisgICAgICAgICAgICBz cWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgs ICdhYm9ydF90YXJnZXQuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBzZXNzaW9uX2lkPW9ialsnc2Vzc2lvbl9pZCddKQorICAgICAgICAg ICAgc3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfZGljdChzcWwpCisgICAg ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAg ICAgICMgRGVsZXRlIHRoZSBleGlzdGluZyBkZWJ1Z2dlciBkYXRhIGluIHNl c3Npb24gdmFyaWFibGUKKyAgICAgICAgZGVsIHNlc3Npb25bJ2RlYnVnZ2Vy RGF0YSddW3N0cih0cmFuc19pZCldCisgICAgICAgIGRlbCBzZXNzaW9uWydm dW5jdGlvbkRhdGEnXVtzdHIodHJhbnNfaWQpXQorCisgICAgICAgICMgUmVs ZWFzZSB0aGUgY29ubmVjdGlvbiBhY3F1aXJlZCBkdXJpbmcgdGhlIGRlYnVn Z2luZworICAgICAgICBtYW5hZ2VyLnJlbGVhc2UoZGlkPW9ialsnZGF0YWJh c2VfaWQnXSwgY29ubl9pZD1vYmpbJ2Nvbm5faWQnXSkKKyAgICAgICAgcmV0 dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogVHJ1ZX0p CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25z ZShkYXRhPXsnc3RhdHVzJzogRmFsc2V9KQorCisKK0BibHVlcHJpbnQucm91 dGUoJy9yZXN0YXJ0LzxpbnQ6dHJhbnNfaWQ+JywgbWV0aG9kcz1bJ0dFVCdd KQorQGxvZ2luX3JlcXVpcmVkCitkZWYgcmVzdGFydF9kZWJ1Z2dpbmcodHJh bnNfaWQpOgorICAgICIiIgorICAgIHJlc3RhcnRfZGVidWdnaW5nKHRyYW5z X2lkKQorCisgICAgVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgdG8gcmVz dGFydCB0aGUgc2FtZSBmdW5jdGlvbiBmb3IgdGhlIGRlYnVnZ2luZy4KKwor ICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHRyYW5zX2lkCisgICAgICAgIC0g VHJhbnNhY3Rpb24gSUQKKyAgICAiIiIKKworICAgIGRlYnVnZ2VyX2RhdGEg PSBzZXNzaW9uWydkZWJ1Z2dlckRhdGEnXQorICAgIGlmIHN0cih0cmFuc19p ZCkgbm90IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAgIHJldHVybiBtYWtl X2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXsnc3RhdHVzJzog RmFsc2UsCisgICAgICAgICAgICAgICAgICAncmVzdWx0JzogZ2V0dGV4dCgn Tm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRo ZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpfQorICAgICAgICApCisgICAg b2JqID0gZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAgbWFu YWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rp b25fbWFuYWdlcihvYmpbJ3NlcnZlcl9pZCddKQorICAgIGNvbm4gPSBtYW5h Z2VyLmNvbm5lY3Rpb24oZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29ubl9p ZD1vYmpbJ2Nvbm5faWQnXSkKKworICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6 CisgICAgICAgICMgVXBkYXRlIHRoZSBzZXNzaW9uIHZhcmlhYmxlICJyZXN0 YXJ0X2RlYnVnIiB0byBrbm93IHRoYXQgc2FtZSBmdW5jdGlvbiBkZWJ1Z2dp bmcgaGFzIGJlZW4gcmVzdGFydGVkLgorICAgICAgICAjIERlbGV0ZSB0aGUg ZXhpc3RpbmcgZGVidWdnZXIgZGF0YSBpbiBzZXNzaW9uIHZhcmlhYmxlIGFu ZCB1cGRhdGUgd2l0aCBuZXcgZGF0YQorICAgICAgICBpZiBvYmpbJ3Jlc3Rh cnRfZGVidWcnXSA9PSAwOgorICAgICAgICAgICAgZGVidWdnZXJfZGF0YSA9 IHNlc3Npb25bJ2RlYnVnZ2VyRGF0YSddCisgICAgICAgICAgICBzZXNzaW9u X29iaiA9IGRlYnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKyAgICAgICAg ICAgIHNlc3Npb25fb2JqWydyZXN0YXJ0X2RlYnVnJ10gPSAxCisgICAgICAg ICAgICB1cGRhdGVfc2Vzc2lvbl9kZWJ1Z2dlcl90cmFuc2FjdGlvbih0cmFu c19pZCwgc2Vzc2lvbl9vYmopCisKKyAgICAgICAgIyBTdG9yZSB0aGUgZnVu Y3Rpb24gaW5mb3JtYXRpb24gaW4gc2Vzc2lvbiB2YXJpYWJsZQorICAgICAg ICBpZiAnZnVuY3Rpb25EYXRhJyBub3QgaW4gc2Vzc2lvbjoKKyAgICAgICAg ICAgIGZ1bmN0aW9uX2RhdGEgPSBkaWN0KCkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIGZ1bmN0aW9uX2RhdGEgPSB7CisgICAgICAgICAgICAgICAg J3NlcnZlcl9pZCc6IG9ialsnc2VydmVyX2lkJ10sCisgICAgICAgICAgICAg ICAgJ2RhdGFiYXNlX2lkJzogb2JqWydkYXRhYmFzZV9pZCddLAorICAgICAg ICAgICAgICAgICdzY2hlbWFfaWQnOiBvYmpbJ3NjaGVtYV9pZCddLAorICAg ICAgICAgICAgICAgICdmdW5jdGlvbl9pZCc6IG9ialsnZnVuY3Rpb25faWQn XSwKKyAgICAgICAgICAgICAgICAndHJhbnNfaWQnOiBzdHIodHJhbnNfaWQp LAorICAgICAgICAgICAgICAgICdwcm9hcmdtb2Rlcyc6IHNlc3Npb25bJ2Z1 bmN0aW9uRGF0YSddW3N0cih0cmFuc19pZCldWydhcmdfbW9kZSddLAorICAg ICAgICAgICAgICAgICdwcm9hcmd0eXBlbmFtZXMnOiBzZXNzaW9uWydmdW5j dGlvbkRhdGEnXVtzdHIodHJhbnNfaWQpXVsnYXJnc190eXBlJ10sCisgICAg ICAgICAgICAgICAgJ3Byb25hcmdkZWZhdWx0cyc6IHNlc3Npb25bJ2Z1bmN0 aW9uRGF0YSddW3N0cih0cmFuc19pZCldWyd1c2VfZGVmYXVsdCddLAorICAg ICAgICAgICAgICAgICdwcm9hcmdkZWZhdWx0cyc6IHNlc3Npb25bJ2Z1bmN0 aW9uRGF0YSddW3N0cih0cmFuc19pZCldWydkZWZhdWx0X3ZhbHVlJ10sCisg ICAgICAgICAgICAgICAgJ3Byb2FyZ25hbWVzJzogc2Vzc2lvblsnZnVuY3Rp b25EYXRhJ11bc3RyKHRyYW5zX2lkKV1bJ2FyZ3NfbmFtZSddCisgICAgICAg ICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShk YXRhPXsnc3RhdHVzJzogVHJ1ZSwgJ3Jlc3RhcnRfZGVidWcnOiBUcnVlLCAn cmVzdWx0JzogZnVuY3Rpb25fZGF0YX0pCisgICAgZWxzZToKKyAgICAgICAg c3RhdHVzID0gRmFsc2UKKyAgICAgICAgcmVzdWx0ID0gZ2V0dGV4dCgnTm90 IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBz ZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpCisKKyAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiBzdGF0dXN9KQorCisKK0Bi bHVlcHJpbnQucm91dGUoJy9zdGFydF9saXN0ZW5lci88aW50OnRyYW5zX2lk PicsIG1ldGhvZHM9WydHRVQnLCAnUE9TVCddKQorQGxvZ2luX3JlcXVpcmVk CitkZWYgc3RhcnRfZGVidWdnZXJfbGlzdGVuZXIodHJhbnNfaWQpOgorICAg ICIiIgorICAgIHN0YXJ0X2RlYnVnZ2VyX2xpc3RlbmVyKHRyYW5zX2lkKQor CisgICAgVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgdG8gbGlzdGVuIGFu ZCBnZXQgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIHJlcXVlc3RlZCBieSB1 c2VyIGR1cmluZyBkZWJ1Z2dpbmcKKworICAgIFBhcmFtZXRlcnM6CisgICAg ICAgIHRyYW5zX2lkCisgICAgICAgIC0gVHJhbnNhY3Rpb24gSUQKKyAgICAi IiIKKworICAgIGRlYnVnZ2VyX2RhdGEgPSBzZXNzaW9uWydkZWJ1Z2dlckRh dGEnXQorICAgIGlmIHN0cih0cmFuc19pZCkgbm90IGluIGRlYnVnZ2VyX2Rh dGE6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAg ICAgICAgICBkYXRhPXsnc3RhdHVzJzogRmFsc2UsCisgICAgICAgICAgICAg ICAgICAncmVzdWx0JzogZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byBzZXJ2 ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xv c2VkLicpfQorICAgICAgICApCisgICAgb2JqID0gZGVidWdnZXJfZGF0YVtz dHIodHJhbnNfaWQpXQorCisgICAgbWFuYWdlciA9IGdldF9kcml2ZXIoUEdf REVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihvYmpbJ3NlcnZl cl9pZCddKQorICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPW9i alsnZGF0YWJhc2VfaWQnXSwgY29ubl9pZD1vYmpbJ2Nvbm5faWQnXSkKKwor ICAgIHZlciA9IG1hbmFnZXIudmVyc2lvbgorICAgIHNlcnZlcl90eXBlID0g bWFuYWdlci5zZXJ2ZXJfdHlwZQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dl ciB2ZXJzaW9uIGFuZCBleGVjdXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQor ICAgIGRiZ192ZXJzaW9uID0gb2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAg ICBpZiBkYmdfdmVyc2lvbiA8PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRo ID0gJ2RlYnVnZ2VyL3NxbC92MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1w bGF0ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92MicKKworICAgICMgSWYgdXNl ciBhZ2FpbiBzdGFydCB0aGUgc2FtZSBkZWJ1ZyBmdW5jdGlvbiB3aXRoIGRp ZmZlcmVudCBhcmd1bWVudHMgdGhlbiB3ZSBuZWVkIHRvIHNhdmUgdGhhdCB2 YWx1ZXMgdG8gc2Vzc2lvbgorICAgICMgdmFyaWFibGUgYW5kIGRhdGFiYXNl LgorICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICdQT1NUJzoKKyAgICAgICAg ZGF0YSA9IGpzb24ubG9hZHMocmVxdWVzdC52YWx1ZXNbJ2RhdGEnXSkKKyAg ICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIGZ1bmN0aW9uX2RhdGEgPSBz ZXNzaW9uWydmdW5jdGlvbkRhdGEnXQorICAgICAgICAgICAgc2Vzc2lvbl9v YmogPSBmdW5jdGlvbl9kYXRhW3N0cih0cmFuc19pZCldCisgICAgICAgICAg ICBzZXNzaW9uX29ialsnYXJnc192YWx1ZSddID0gZGF0YQorICAgICAgICAg ICAgdXBkYXRlX3Nlc3Npb25fZnVuY3Rpb25fdHJhbnNhY3Rpb24odHJhbnNf aWQsIHNlc3Npb25fb2JqKQorCisgICAgaWYgY29ubi5jb25uZWN0ZWQoKToK KworICAgICAgICAjIEZvciB0aGUgZGlyZWN0IGRlYnVnZ2luZyBleHRyYWN0 IHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgdmFsdWVzIGZyb20gdXNlciBhbmQg cGFzcyB0byBqaW5qYSB0ZW1wbGF0ZQorICAgICAgICAjIHRvIGNyZWF0ZSB0 aGUgcXVlcnkgZm9yIGV4ZWN1dGlvbi4KKyAgICAgICAgaWYgb2JqWydkZWJ1 Z190eXBlJ10gPT0gJ2RpcmVjdCc6CisgICAgICAgICAgICBzdHJfcXVlcnkg PSAnJworCisgICAgICAgICAgICAjIEZvcm0gdGhlIGZ1bmN0aW9uIG5hbWUg d2l0aCBzY2hlbWEgbmFtZQorICAgICAgICAgICAgZnVuY19uYW1lID0gc2Vz c2lvblsnZnVuY3Rpb25EYXRhJ11bc3RyKHRyYW5zX2lkKV1bJ3NjaGVtYSdd ICsgJy4nICsgc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bc3RyKHRyYW5zX2lk KV1bJ25hbWUnXQorCisgICAgICAgICAgICBpZiBvYmpbJ3Jlc3RhcnRfZGVi dWcnXSA9PSAwOgorICAgICAgICAgICAgICAgICMgcmVuZGVyIHRoZSBTUUwg dGVtcGxhdGUgYW5kIHNlbmQgdGhlIHF1ZXJ5IHRvIHNlcnZlcgorICAgICAg ICAgICAgICAgIGlmIHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddW3N0cih0cmFu c19pZCldWydsYW5ndWFnZSddID09ICdwbHBnc3FsJzoKKyAgICAgICAgICAg ICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFt0ZW1w bGF0ZV9wYXRoLCAnZGVidWdfcGxwZ3NxbF9leGVjdXRlX3RhcmdldC5zcWwn XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYWNrZ2Vfb2lkPXNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddW3N0cih0cmFu c19pZCldWydwa2cnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZ1bmN0aW9uX29pZD1vYmpbJ2Z1bmN0aW9uX2lkJ10p CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg c3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRo LCAnZGVidWdfc3BsX2V4ZWN1dGVfdGFyZ2V0LnNxbCddKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tnZV9vaWQ9 c2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bc3RyKHRyYW5zX2lkKV1bJ3BrZydd LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVuY3Rpb25fb2lkPW9ialsnZnVuY3Rpb25faWQnXSkKKyAgICAgICAgICAg ICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKyAg ICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl cykKKworICAgICAgICAgICAgaWYgc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11b c3RyKHRyYW5zX2lkKV1bJ2FyZ19tb2RlJ106CisgICAgICAgICAgICAgICAg IyBJbiBFREJBUyA5MCwgaWYgYW4gU1BMLWZ1bmN0aW9uIGhhcyBib3RoIGFu IE9VVC1wYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICAjIGFuZCBhIHJldHVy biB2YWx1ZSAod2hpY2ggaXMgbm90IHBvc3NpYmxlIG9uIFBvc3RncmVTUUwg b3RoZXJ3aXNlKSwKKyAgICAgICAgICAgICAgICAjIHRoZSByZXR1cm4gdmFs dWUgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBleHRyYSBPVVQtcGFyYW1ldGVy CisgICAgICAgICAgICAgICAgIyBuYW1lZCAiX3JldHZhbF8iCisgICAgICAg ICAgICAgICAgaWYgc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bc3RyKHRyYW5z X2lkKV1bJ2FyZ3NfbmFtZSddOgorICAgICAgICAgICAgICAgICAgICBhcmdf bmFtZSA9IHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddW3N0cih0cmFuc19pZCld WydhcmdzX25hbWUnXS5zcGxpdCgiLCIpOworICAgICAgICAgICAgICAgICAg ICBpZiAnX3JldHZhbF8nIGluIGFyZ19uYW1lOgorICAgICAgICAgICAgICAg ICAgICAgICAgYXJnX21vZGUgPSBzZXNzaW9uWydmdW5jdGlvbkRhdGEnXVtz dHIodHJhbnNfaWQpXVsnYXJnX21vZGUnXS5zcGxpdCgiLCIpOworICAgICAg ICAgICAgICAgICAgICAgICAgYXJnX21vZGUucG9wKCk7CisgICAgICAgICAg ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdf bW9kZSA9IHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddW3N0cih0cmFuc19pZCld WydhcmdfbW9kZSddLnNwbGl0KCIsIik7CisgICAgICAgICAgICAgICAgZWxz ZToKKyAgICAgICAgICAgICAgICAgICAgYXJnX21vZGUgPSBzZXNzaW9uWydm dW5jdGlvbkRhdGEnXVtzdHIodHJhbnNfaWQpXVsnYXJnX21vZGUnXS5zcGxp dCgiLCIpOworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBh cmdfbW9kZSA9IFsnaSddICogbGVuKHNlc3Npb25bJ2Z1bmN0aW9uRGF0YSdd W3N0cih0cmFuc19pZCldWydhcmdzX3R5cGUnXS5zcGxpdCgiLCIpKTsKKwor ICAgICAgICAgICAgaWYgc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bc3RyKHRy YW5zX2lkKV1bJ2FyZ3NfdHlwZSddOgorICAgICAgICAgICAgICAgIGlmIHNl c3Npb25bJ2Z1bmN0aW9uRGF0YSddW3N0cih0cmFuc19pZCldWydhcmdzX25h bWUnXToKKyAgICAgICAgICAgICAgICAgICAgYXJnX25hbWUgPSBzZXNzaW9u WydmdW5jdGlvbkRhdGEnXVtzdHIodHJhbnNfaWQpXVsnYXJnc19uYW1lJ10u c3BsaXQoIiwiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgJ19yZXR2YWxf JyBpbiBhcmdfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ190 eXBlID0gc2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bc3RyKHRyYW5zX2lkKV1b J2FyZ3NfdHlwZSddLnNwbGl0KCIsIik7CisgICAgICAgICAgICAgICAgICAg ICAgICBhcmdfdHlwZS5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ190eXBlID0gc2Vzc2lv blsnZnVuY3Rpb25EYXRhJ11bc3RyKHRyYW5zX2lkKV1bJ2FyZ3NfdHlwZSdd LnNwbGl0KCIsIik7CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICAgICAgYXJnX3R5cGUgPSBzZXNzaW9uWydmdW5jdGlvbkRhdGEn XVtzdHIodHJhbnNfaWQpXVsnYXJnc190eXBlJ10uc3BsaXQoIiwiKTsKKwor ICAgICAgICAgICAgIyBCZWxvdyBhcmUgdHdvIGRpZmZlcmVudCB0ZW1wbGF0 ZSB0byBleGVjdXRlIGFuZCBzdGFydCBleGVjdXRlcgorICAgICAgICAgICAg aWYgbWFuYWdlci5zZXJ2ZXJfdHlwZSAhPSAncGcnIGFuZCBtYW5hZ2VyLnZl cnNpb24gPCA5MDMwMDoKKyAgICAgICAgICAgICAgICBzdHJfcXVlcnkgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oWydkZWJ1Z2dlci9zcWwnLCAnZXhl Y3V0ZV9lZGJzcGwuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZ1bmNfbmFtZT1mdW5jX25hbWUsIGlzX2Z1 bmM9c2Vzc2lvblsnZnVuY3Rpb25EYXRhJ11bc3RyKHRyYW5zX2lkKV1bJ2lz X2Z1bmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsYW5fbmFtZT1zZXNzaW9uWydmdW5jdGlvbkRhdGEnXVtzdHIo dHJhbnNfaWQpXVsnbGFuZ3VhZ2UnXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXRfdHlwZT1zZXNzaW9uWydmdW5j dGlvbkRhdGEnXVtzdHIodHJhbnNfaWQpXVsncmV0dXJuX3R5cGUnXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh PXNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddW3N0cih0cmFuc19pZCldWydhcmdz X3ZhbHVlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXJnX3R5cGU9YXJnX3R5cGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19tb2RlPWFyZ19tb2Rl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdHJfcXVl cnkgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oWydkZWJ1Z2dlci9zcWwn LCAnZXhlY3V0ZV9wbHBnc3FsLnNxbCddKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX25hbWU9ZnVuY19uYW1l LCBpc19mdW5jPXNlc3Npb25bJ2Z1bmN0aW9uRGF0YSddW3N0cih0cmFuc19p ZCldWydpc19mdW5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0X3R5cGU9c2Vzc2lvblsnZnVuY3Rpb25EYXRh J11bc3RyKHRyYW5zX2lkKV1bJ3JldHVybl90eXBlJ10sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZXNzaW9u WydmdW5jdGlvbkRhdGEnXVtzdHIodHJhbnNfaWQpXVsnYXJnc192YWx1ZSdd CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQorCisgICAgICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IGNvbm4uZXhlY3V0 ZV9hc3luYyhzdHJfcXVlcnkpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cmVzdWx0KQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgaWYgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgICAgICAgICAjIEZv ciBpbmRpcmVjdCBkZWJ1Z2dpbmcgZmlyc3QgY3JlYXRlIHRoZSBsaXN0ZW5l ciBhbmQgdGhlbiB3YWl0IGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAg ICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFt0ZW1wbGF0ZV9w YXRoLCAnY3JlYXRlX2xpc3RlbmVyLnNxbCddKSkKKworICAgICAgICAgICAg ICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVjdXRlX2RpY3Qoc3FsKQorICAg ICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVz KQorCisgICAgICAgICAgICAgICAgIyBHZXQgYW5kIHN0b3JlIHRoZSBzZXNz aW9uIHZhcmlhYmxlIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGZldGNoIG90aGVy IGluZm9ybWF0aW9uIGR1cmluZyBkZWJ1Z2dpbmcKKyAgICAgICAgICAgICAg ICBpbnRfc2Vzc2lvbl9pZCA9IHJlc1sncm93cyddWzBdWydwbGRiZ19jcmVh dGVfbGlzdGVuZXInXQorCisgICAgICAgICAgICAgICAgIyBJbiBFbnRlcnBy aXNlREIgdmVyc2lvbnMgPD0gOS4xIHRoZQorICAgICAgICAgICAgICAgICMg cGxkYmdfc2V0X2dsb2JhbF9icmVha3BvaW50IGZ1bmN0aW9uIHRvb2sgZml2 ZSBhcmd1bWVudHMsCisgICAgICAgICAgICAgICAgIyB0aGUgMm5kIGFyZ3Vt ZW50IGJlaW5nIHRoZSBwYWNrYWdlJ3MgT0lELCBpZiBhbnkuIFN0YXJ0aW5n CisgICAgICAgICAgICAgICAgIyB3aXRoIDkuMiwgdGhlIHBhY2thZ2UgT0lE IGFyZ3VtZW50IGlzIGdvbmUsIGFuZCB0aGUgZnVuY3Rpb24KKyAgICAgICAg ICAgICAgICAjIHRha2VzIGZvdXIgYXJndW1lbnRzIGxpa2UgdGhlIGNvbW11 bml0eSB2ZXJzaW9uIGhhcyBhbHdheXMKKyAgICAgICAgICAgICAgICAjIGRv bmUuCisgICAgICAgICAgICAgICAgaWYgc2VydmVyX3R5cGUgPT0gJ3BwYXMn IGFuZCB2ZXIgPD0gOTAxMDA6CisgICAgICAgICAgICAgICAgICAgIHNxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgJ2Fk ZF9icmVha3BvaW50X2VkYi5zcWwnXSksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkPWludF9zZXNzaW9u X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnVuY3Rpb25fb2lkPW9ialsnZnVuY3Rpb25faWQnXSkKKworICAgICAg ICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0 KHNxbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbdGVtcGxhdGVfcGF0aCwgJ2FkZF9icmVha3BvaW50X3BnLnNxbCdd KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlc3Npb25faWQ9aW50X3Nlc3Npb25faWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbl9vaWQ9b2JqWydm dW5jdGlvbl9pZCddKQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cywg cmVzID0gY29ubi5leGVjdXRlX2RpY3Qoc3FsKQorICAgICAgICAgICAgICAg ICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisK KyAgICAgICAgICAgICAgICAjIHdhaXQgZm9yIHRoZSB0YXJnZXQKKyAgICAg ICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3Rl bXBsYXRlX3BhdGgsICd3YWl0X2Zvcl90YXJnZXQuc3FsJ10pLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkPWlu dF9zZXNzaW9uX2lkKQorCisgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMg PSBjb25uLmV4ZWN1dGVfYXN5bmMoc3FsKQorICAgICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRl cm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAg ICAgICAgZGVidWdnZXJfZGF0YSA9IHNlc3Npb25bJ2RlYnVnZ2VyRGF0YSdd CisgICAgICAgICAgICAgICAgc2Vzc2lvbl9vYmogPSBkZWJ1Z2dlcl9kYXRh W3N0cih0cmFuc19pZCldCisgICAgICAgICAgICAgICAgc2Vzc2lvbl9vYmpb J2V4ZV9jb25uX2lkJ10gPSBvYmpbJ2Nvbm5faWQnXQorICAgICAgICAgICAg ICAgIHNlc3Npb25fb2JqWydyZXN0YXJ0X2RlYnVnJ10gPSAxCisgICAgICAg ICAgICAgICAgc2Vzc2lvbl9vYmpbJ2ZyYW1lX2lkJ10gPSAwCisgICAgICAg ICAgICAgICAgc2Vzc2lvbl9vYmpbJ3Nlc3Npb25faWQnXSA9IGludF9zZXNz aW9uX2lkCisgICAgICAgICAgICAgICAgdXBkYXRlX3Nlc3Npb25fZGVidWdn ZXJfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNlc3Npb25fb2JqKQorICAgICAg ICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0 YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc30pCisgICAgICAgICAgICBl bHNlOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAg ICAgICAgICAgcmVzdWx0ID0gZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byBz ZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4g Y2xvc2VkLicpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9y ZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVz dWx0fSkKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAg ICAgICByZXN1bHQgPSBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZl ciBPciBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9z ZWQuJykKKworICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17 J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdH0pCisKKworQGJs dWVwcmludC5yb3V0ZSgnL2V4ZWN1dGVfcXVlcnkvPGludDp0cmFuc19pZD4v PHF1ZXJ5X3R5cGU+JywgbWV0aG9kcz1bJ0dFVCddKQorQGxvZ2luX3JlcXVp cmVkCitkZWYgZXhlY3V0ZV9kZWJ1Z2dlcl9xdWVyeSh0cmFuc19pZCwgcXVl cnlfdHlwZSk6CisgICAgIiIiCisgICAgZXhlY3V0ZV9kZWJ1Z2dlcl9xdWVy eSh0cmFuc19pZCwgcXVlcnlfdHlwZSkKKworICAgIFRoaXMgbWV0aG9kIGlz IHJlc3BvbnNpYmxlIHRvIGV4ZWN1dGUgdGhlIHF1ZXJ5IGFuZCByZXR1cm4g dmFsdWUuIEFzIHRoaXMgbWV0aG9kIGlzIGdlbmVyaWMgc28gdXNlciBoYXMg dG8gcGFzcyB0aGUKKyAgICBxdWVyeV90eXBlIHRvIGdldCB0aGUgcmVxdWly ZWQgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy4KKworICAgIGUuZy4gSWYg dXNlciB3YW50IHRvIGV4ZWN1dGUgJ3N0ZXBfaW50bycgdGhlbiBxdWVyeV90 eXBlPSdzdGVwX2ludG8nLgorICAgICAgICAgSWYgdXNlciB3YW50IHRvIGV4 ZWN1dGUgJ2NvbnRpbnVlJyB0aGVuIHF1ZXJ5X3R5cGU9J2NvbnRpbnVlJwor CisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgdHJhbnNfaWQKKyAgICAgICAg LSBUcmFuc2FjdGlvbiBJRAorICAgICAgICBxdWVyeV90eXBlCisgICAgICAg IC0gVHlwZSBvZiBxdWVyeSB0byBleGVjdXRlCisgICAgIiIiCisKKyAgICBk ZWJ1Z2dlcl9kYXRhID0gc2Vzc2lvblsnZGVidWdnZXJEYXRhJ10KKyAgICBp ZiBzdHIodHJhbnNfaWQpIG5vdCBpbiBkZWJ1Z2dlcl9kYXRhOgorICAgICAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0 YT17J3N0YXR1cyc6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgJ3Jlc3Vs dCc6IGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5l Y3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKX0KKyAg ICAgICAgKQorICAgIG9iaiA9IGRlYnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lk KV0KKworICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJ VkVSKS5jb25uZWN0aW9uX21hbmFnZXIob2JqWydzZXJ2ZXJfaWQnXSkKKyAg ICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1vYmpbJ2RhdGFiYXNl X2lkJ10sIGNvbm5faWQ9b2JqWydleGVfY29ubl9pZCddKQorCisgICAgIyBm aW5kIHRoZSBkZWJ1Z2dlciB2ZXJzaW9uIGFuZCBleGVjdXRlIHRoZSBxdWVy eSBhY2NvcmRpbmdseQorICAgIGRiZ192ZXJzaW9uID0gb2JqWydkZWJ1Z2dl cl92ZXJzaW9uJ10KKyAgICBpZiBkYmdfdmVyc2lvbiA8PSAyOgorICAgICAg ICB0ZW1wbGF0ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92MScKKyAgICBlbHNl OgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92MicK KworICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgIHNxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgcXVlcnlf dHlwZSArICIuc3FsIl0pLCBzZXNzaW9uX2lkPW9ialsnc2Vzc2lvbl9pZCdd KQorICAgICAgICAjIEFzIHRoZSBxdWVyeSB0eXBlIGlzIGNvbnRpbnVlIG9y IHN0ZXBfaW50byBvciBzdGVwX292ZXIgdGhlbiB3ZSBtYXkgZ2V0IHJlc3Vs dCBhZnRlciBzb21lIHRpbWUgc28gcG9sbCB0aGUKKyAgICAgICAgIyByZXN1 bHQuIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBmcmFtZSBpZCB2YXJpYWJsZSB3 aGVuIHVzZXIgbW92ZSB0aGUgbmV4dCBzdGVwIGZvciBkZWJ1Z2dpbmcuCisg ICAgICAgIGlmIHF1ZXJ5X3R5cGUgPT0gJ2NvbnRpbnVlJyBvciBxdWVyeV90 eXBlID09ICdzdGVwX2ludG8nIG9yIHF1ZXJ5X3R5cGUgPT0gJ3N0ZXBfb3Zl cic6CisgICAgICAgICAgICAjIFdlIHNob3VsZCBzZXQgdGhlIGZyYW1lX2lk IHRvIDAgd2hlbiBleGVjdXRpb24gc3RhcnRzLgorICAgICAgICAgICAgaWYg b2JqWydmcmFtZV9pZCddICE9IDA6CisgICAgICAgICAgICAgICAgc2Vzc2lv bl9vYmogPSBkZWJ1Z2dlcl9kYXRhW3N0cih0cmFuc19pZCldCisgICAgICAg ICAgICAgICAgc2Vzc2lvbl9vYmpbJ2ZyYW1lX2lkJ10gPSAwCisgICAgICAg ICAgICAgICAgdXBkYXRlX3Nlc3Npb25fZGVidWdnZXJfdHJhbnNhY3Rpb24o dHJhbnNfaWQsIHNlc3Npb25fb2JqKQorCisgICAgICAgICAgICBzdGF0dXMs IHJlc3VsdCA9IGNvbm4uZXhlY3V0ZV9hc3luYyhzcWwpCisgICAgICAgICAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiBz dGF0dXMsICdyZXN1bHQnOiByZXN1bHR9KQorICAgICAgICBlbGlmIHF1ZXJ5 X3R5cGUgPT0gJ2Fib3J0X3RhcmdldCc6CisgICAgICAgICAgICBzdGF0dXMs IHJlc3VsdCA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAg ICAgbWFuYWdlci5yZWxlYXNlKGRpZD1vYmpbJ2RhdGFiYXNlX2lkJ10sIGNv bm5faWQ9b2JqWydjb25uX2lkJ10pCisKKyAgICAgICAgICAgICMgRGVsZXRl IHRoZSBleGlzdGluZyBkZWJ1Z2dlciBkYXRhIGluIHNlc3Npb24gdmFyaWFi bGUKKyAgICAgICAgICAgIGRlbCBzZXNzaW9uWydkZWJ1Z2dlckRhdGEnXVtz dHIodHJhbnNfaWQpXQorICAgICAgICAgICAgZGVsIHNlc3Npb25bJ2Z1bmN0 aW9uRGF0YSddW3N0cih0cmFuc19pZCldCisKKyAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXN1bHQpCisgICAgICAgICAgICBlbHNl OgorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2Uo aW5mbz0nVGFyZ2V0IEFib3J0ZWQuJywgZGF0YT17J3N0YXR1cyc6IHN0YXR1 cywgJ3Jlc3VsdCc6IHJlc3VsdH0pCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICBzdGF0dXMsIHJlc3VsdCA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkK KyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdWx0KQorICAgIGVs c2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJlc3VsdCA9 IGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rp b24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKQorCisgICAg cmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogJ1N1 Y2Nlc3MnLCAncmVzdWx0JzogcmVzdWx0Wydyb3dzJ119KQorCisKK0BibHVl cHJpbnQucm91dGUoJy9tZXNzYWdlcy88aW50OnRyYW5zX2lkPi8nLCBtZXRo b2RzPVsiR0VUIl0pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBtZXNzYWdlcyh0 cmFuc19pZCk6CisgICAgIiIiCisgICAgbWVzc2FnZXModHJhbnNfaWQpCisK KyAgICBUaGlzIG1ldGhvZCBwb2xscyB0aGUgbWVzc2FnZXMgcmV0dXJuZWQg YnkgdGhlIGRhdGFiYXNlIHNlcnZlci4KKworICAgIFBhcmFtZXRlcnM6Cisg ICAgICAgIHRyYW5zX2lkCisgICAgICAgIC0gdW5pcXVlIHRyYW5zYWN0aW9u IGlkLgorICAgICIiIgorCisgICAgZGVidWdnZXJfZGF0YSA9IHNlc3Npb25b J2RlYnVnZ2VyRGF0YSddCisgICAgaWYgc3RyKHRyYW5zX2lkKSBub3QgaW4g ZGVidWdnZXJfZGF0YToKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNw b25zZSgKKyAgICAgICAgICAgIGRhdGE9eydzdGF0dXMnOiAnTm90Q29ubmVj dGVkJywKKyAgICAgICAgICAgICAgICAgICdyZXN1bHQnOiBnZXR0ZXh0KCdO b3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0aW9uIHdpdGggdGhl IHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJyl9CisgICAgICAgICkKKyAgICBv YmogPSBkZWJ1Z2dlcl9kYXRhW3N0cih0cmFuc19pZCldCisKKyAgICBtYW5h Z2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlv bl9tYW5hZ2VyKG9ialsnc2VydmVyX2lkJ10pCisgICAgY29ubiA9IG1hbmFn ZXIuY29ubmVjdGlvbihkaWQ9b2JqWydkYXRhYmFzZV9pZCddLCBjb25uX2lk PW9ialsnY29ubl9pZCddKQorCisgICAgcG9ydF9udW1iZXIgPSAnJworCisg ICAgaWYgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgc3RhdHVzLCByZXN1 bHQsIG15X3Jlc3VsdCA9IGNvbm4ucG9sbCgpCisgICAgICAgIG5vdGlmeSA9 IGNvbm4ubWVzc2FnZXMoKQorICAgICAgICBpZiBub3RpZnk6CisgICAgICAg ICAgICAjIEluIG5vdGljZSBtZXNzYWdlIHdlIG5lZWQgdG8gZmluZCAiUExE QkdCUkVBSyIgc3RyaW5nIHRvIGZpbmQgdGhlIHBvcnQgbnVtYmVyIHRvIGF0 dGFjaC4KKyAgICAgICAgICAgICMgTm90aWNlIG1lc3NhZ2UgcmV0dXJuZWQg YnkgdGhlIHNlcnZlciBpcyAgICJOT1RJQ0U6ICBQTERCR0JSRUFLOjciLgor ICAgICAgICAgICAgIyBGcm9tIHRoZSBhYm92ZSBtZXNzYWdlIHdlIG5lZWQg dG8gZmluZCBvdXQgcG9ydCBudW1iZXIgYXMgIjciIHNvIGJlbG93IGxvZ2lj IHdpbGwgZmluZCA3IGFzIHBvcnQgbnVtYmVyCisgICAgICAgICAgICAjIGFu ZCBhdHRhY2ggbGlzdGVuZWQgdG8gdGhhdCBwb3J0IG51bWJlcgorICAgICAg ICAgICAgb2Zmc2V0ID0gbm90aWZ5WzBdLmZpbmQoJ1BMREJHQlJFQUsnKTsK KyAgICAgICAgICAgIHN0cl9sZW4gPSBsZW4oJ1BMREJHQlJFQUsnKQorICAg ICAgICAgICAgc3RyX2xlbiA9IHN0cl9sZW4gKyAxCisgICAgICAgICAgICB0 bXBPZmZzZXQgPSAwCisgICAgICAgICAgICB0bXBGbGFnID0gRmFsc2UKKwor ICAgICAgICAgICAgd2hpbGUgbm90aWZ5WzBdW29mZnNldCtzdHJfbGVuK3Rt cE9mZnNldF0uaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9 ICdTdWNjZXNzJworICAgICAgICAgICAgICAgIHRtcEZsYWcgPSBUcnVlCisg ICAgICAgICAgICAgICAgcG9ydF9udW1iZXIgPSBwb3J0X251bWJlciArIG5v dGlmeVswXVtvZmZzZXQrc3RyX2xlbit0bXBPZmZzZXRdCisgICAgICAgICAg ICAgICAgdG1wT2Zmc2V0ID0gdG1wT2Zmc2V0ICsgMQorCisgICAgICAgICAg ICBpZiB0bXBGbGFnID09IEZhbHNlOgorICAgICAgICAgICAgICAgIHN0YXR1 cyA9ICdCdXN5JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVz ID0gJ0J1c3knCisgICAgZWxzZToKKyAgICAgICAgc3RhdHVzID0gJ05vdENv bm5lY3RlZCcKKyAgICAgICAgcmVzdWx0ID0gZ2V0dGV4dCgnTm90IGNvbm5l Y3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIg aGFzIGJlZW4gY2xvc2VkLicpCisKKyAgICByZXR1cm4gbWFrZV9qc29uX3Jl c3BvbnNlKGRhdGE9eydzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiBwb3J0 X251bWJlcn0pCisKKworQGJsdWVwcmludC5yb3V0ZSgnL3N0YXJ0X2V4ZWN1 dGlvbi88aW50OnRyYW5zX2lkPi88aW50OnBvcnRfbnVtPicsIG1ldGhvZHM9 WydHRVQnXSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHN0YXJ0X2V4ZWN1dGlv bih0cmFuc19pZCwgcG9ydF9udW0pOgorICAgICIiIgorICAgIHN0YXJ0X2V4 ZWN1dGlvbih0cmFuc19pZCwgcG9ydF9udW0pCisKKyAgICBUaGlzIG1ldGhv ZCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYW4gYXN5bmNocm9ub3Vz IGNvbm5lY3Rpb24gZm9yIGV4ZWN1dGlvbiB0aHJlYWQuCisgICAgQWxzbyBz dG9yZSB0aGUgc2Vzc2lvbiBpZCBpbnRvIHNlc3Npb24gcmV0dXJuIHdpdGgg YXR0YWNoIHBvcnQgcXVlcnkgZm9yIHRoZSBkaXJlY3QgZGVidWdnaW5nLgor CisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgdHJhbnNfaWQKKyAgICAgICAg LSBUcmFuc2FjdGlvbiBJRAorICAgICAgICBwb3J0X251bQorICAgICAgICAt IFBvcnQgbnVtYmVyIHRvIGF0dGFjaAorICAgICIiIgorCisgICAgZGVidWdn ZXJfZGF0YSA9IHNlc3Npb25bJ2RlYnVnZ2VyRGF0YSddCisgICAgaWYgc3Ry KHRyYW5zX2lkKSBub3QgaW4gZGVidWdnZXJfZGF0YToKKyAgICAgICAgcmV0 dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIGRhdGE9eydz dGF0dXMnOiAnTm90Q29ubmVjdGVkJywKKyAgICAgICAgICAgICAgICAgICdy ZXN1bHQnOiBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBj b25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJyl9 CisgICAgICAgICkKKyAgICBvYmogPSBkZWJ1Z2dlcl9kYXRhW3N0cih0cmFu c19pZCldCisKKyAgICBkYmdfdmVyc2lvbiA9IG9ialsnZGVidWdnZXJfdmVy c2lvbiddCisKKyAgICAjIENyZWF0ZSBhc3luY2hyb25vdXMgY29ubmVjdGlv biB1c2luZyByYW5kb20gY29ubmVjdGlvbiBpZC4KKyAgICBleGVfY29ubl9p ZCA9IHN0cihyYW5kb20ucmFuZGludCgxLCA5OTk5OTk5KSkKKyAgICB0cnk6 CisgICAgICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJ VkVSKS5jb25uZWN0aW9uX21hbmFnZXIob2JqWydzZXJ2ZXJfaWQnXSkKKyAg ICAgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9b2JqWydkYXRh YmFzZV9pZCddLCBjb25uX2lkPWV4ZV9jb25uX2lkKQorICAgIGV4Y2VwdCBF eGNlcHRpb24gYXMgZToKKyAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCisKKyAgICAjIENvbm5lY3QgdGhl IFNlcnZlcgorICAgIHN0YXR1cywgbXNnID0gY29ubi5jb25uZWN0KCkKKyAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXN0cihtc2cpKQorCisgICAgaWYgJ2RlYnVn Z2VyRGF0YScgbm90IGluIHNlc3Npb246CisgICAgICAgIGRlYnVnZ2VyX2Rh dGEgPSBkaWN0KCkKKyAgICBlbHNlOgorICAgICAgICBkZWJ1Z2dlcl9kYXRh ID0gc2Vzc2lvblsnZGVidWdnZXJEYXRhJ10KKworICAgICMgZmluZCB0aGUg ZGVidWdnZXIgdmVyc2lvbiBhbmQgZXhlY3V0ZSB0aGUgcXVlcnkgYWNjb3Jk aW5nbHkKKyAgICBkYmdfdmVyc2lvbiA9IG9ialsnZGVidWdnZXJfdmVyc2lv biddCisgICAgaWYgZGJnX3ZlcnNpb24gPD0gMjoKKyAgICAgICAgdGVtcGxh dGVfcGF0aCA9ICdkZWJ1Z2dlci9zcWwvdjEnCisgICAgZWxzZToKKyAgICAg ICAgdGVtcGxhdGVfcGF0aCA9ICdkZWJ1Z2dlci9zcWwvdjInCisKKyAgICAj IGNvbm5lY3QgdG8gcG9ydCBhbmQgc3RvcmUgdGhlIHNlc3Npb24gSUQgaW4g dGhlIHNlc3Npb24gdmFyaWFibGVzCisgICAgc3FsID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAnYXR0YWNoX3RvX3BvcnQu c3FsJ10pLCBwb3J0PXBvcnRfbnVtKQorICAgIHN0YXR1c19wb3J0LCByZXNf cG9ydCA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKyAgICBpZiBub3Qgc3Rh dHVzX3BvcnQ6CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cmVzX3BvcnQpCisKKyAgICBzZXNzaW9uX29iaiA9IGRl YnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKyAgICBzZXNzaW9uX29ialsn cmVzdGFydF9kZWJ1ZyddID0gMAorICAgIHNlc3Npb25fb2JqWydmcmFtZV9p ZCddID0gMAorICAgIHNlc3Npb25fb2JqWydleGVfY29ubl9pZCddID0gZXhl X2Nvbm5faWQKKyAgICBzZXNzaW9uX29ialsnZGVidWdnZXJfdmVyc2lvbidd ID0gZGJnX3ZlcnNpb24KKyAgICBzZXNzaW9uX29ialsnc2Vzc2lvbl9pZCdd ID0gcmVzX3BvcnRbJ3Jvd3MnXVswXVsncGxkYmdfYXR0YWNoX3RvX3BvcnQn XQorICAgIHVwZGF0ZV9zZXNzaW9uX2RlYnVnZ2VyX3RyYW5zYWN0aW9uKHRy YW5zX2lkLCBzZXNzaW9uX29iaikKKworICAgIHJldHVybiBtYWtlX2pzb25f cmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6ICdTdWNjZXNzJywgJ3Jlc3VsdCc6 IHJlc19wb3J0Wydyb3dzJ11bMF1bJ3BsZGJnX2F0dGFjaF90b19wb3J0J119 KQorCisKK0BibHVlcHJpbnQucm91dGUoJy9zZXRfYnJlYWtwb2ludC88aW50 OnRyYW5zX2lkPi88aW50OmxpbmVfbm8+LzxpbnQ6c2V0X3R5cGU+JywgbWV0 aG9kcz1bJ0dFVCddKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgc2V0X2NsZWFy X2JyZWFrcG9pbnQodHJhbnNfaWQsIGxpbmVfbm8sIHNldF90eXBlKToKKyAg ICAiIiIKKyAgICBzZXRfY2xlYXJfYnJlYWtwb2ludCh0cmFuc19pZCwgbGlu ZV9ubywgc2V0X3R5cGUpCisKKyAgICBUaGlzIG1ldGhvZCBpcyByZXNwb25z aWJsZSB0byBzZXQgYW5kIGNsZWFuIHRoZSBicmVha3BvaW50CisKKyAgICBQ YXJhbWV0ZXJzOgorICAgICAgICB0cmFuc19pZAorICAgICAgICAtIFRyYW5z YWN0aW9uIElECisgICAgICAgIGxpbmVfbm8KKyAgICAgICAgLSBMaW5lIG51 bWJlciB0byBzZXQKKyAgICAgICAgc2V0X3R5cGUKKyAgICAgICAgLSAwIC0g Y2xlYXIgdGhlIGJyZWFrcG9pbnQsIDEgLSBzZXQgdGhlIGJyZWFrcG9pbnQK KyAgICAiIiIKKworICAgIGRlYnVnZ2VyX2RhdGEgPSBzZXNzaW9uWydkZWJ1 Z2dlckRhdGEnXQorICAgIGlmIHN0cih0cmFuc19pZCkgbm90IGluIGRlYnVn Z2VyX2RhdGE6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2Uo CisgICAgICAgICAgICBkYXRhPXsnc3RhdHVzJzogRmFsc2UsCisgICAgICAg ICAgICAgICAgICAncmVzdWx0JzogZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0 byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJl ZW4gY2xvc2VkLicpfQorICAgICAgICApCisgICAgb2JqID0gZGVidWdnZXJf ZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAgbWFuYWdlciA9IGdldF9kcml2 ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihvYmpb J3NlcnZlcl9pZCddKQorICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24o ZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29ubl9pZD1vYmpbJ2V4ZV9jb25u X2lkJ10pCisKKyAgICAjIGZpbmQgdGhlIGRlYnVnZ2VyIHZlcnNpb24gYW5k IGV4ZWN1dGUgdGhlIHF1ZXJ5IGFjY29yZGluZ2x5CisgICAgZGJnX3ZlcnNp b24gPSBvYmpbJ2RlYnVnZ2VyX3ZlcnNpb24nXQorICAgIGlmIGRiZ192ZXJz aW9uIDw9IDI6CisgICAgICAgIHRlbXBsYXRlX3BhdGggPSAnZGVidWdnZXIv c3FsL3YxJworICAgIGVsc2U6CisgICAgICAgIHRlbXBsYXRlX3BhdGggPSAn ZGVidWdnZXIvc3FsL3YyJworCisgICAgcXVlcnlfdHlwZSA9ICcnCisKKyAg ICAjIFdlIG5lZWQgdG8gZmluZCBvdXQgZnVuY3Rpb24gT0lEIGJlZm9yZSBz ZW5kaW5nIHRoZSBmb2lkIHRvIHNldCB0aGUgYnJlYWtwb2ludCBiZWNhdXNl IGl0IG1heSBwb3NzaWJsZSB0aGF0CisgICAgIyBkZWJ1Z2dpbmcgZnVuY3Rp b24gaGFzIG11bHRpIGxldmVsIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgc28g d2UgbmVlZCB0byBzYXZlIHRoZSBkZWJ1ZyBsZXZlbCB0byBzZXNzaW9uIHZh cmlhYmxlCisgICAgIyBhbmQgcGFzcyB0aGEgYXBwcm9wcmlhdGUgZm9pZCB0 byBzZXQgdGhlIGJyZWFrcG9pbnQuCisgICAgc3FsXyA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgImdldF9zdGFja19pbmZv LnNxbCJdKSwgc2Vzc2lvbl9pZD1vYmpbJ3Nlc3Npb25faWQnXSkKKyAgICBz dGF0dXMsIHJlc19zdGFjayA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbF8pCisg ICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXNfc3RhY2spCisKKyAgICAjIEZvciBt dWx0aWxldmVsIGZ1bmN0aW9uIGRlYnVnZ2luZywgd2UgbmVlZCB0byBmZXRj aCBjdXJyZW50IHNlbGVjdGVkIGZyYW1lJ3MgZnVuY3Rpb24gb2lkIGZvciBz ZXR0aW5nIHRoZQorICAgICMgYnJlYWtwb2ludC4gRm9yIHNpbmdsZSBmdW5j dGlvbiB0aGUgZnJhbWUgaWQgd2lsbCBiZSAwLgorICAgIGZvaWQgPSByZXNf c3RhY2tbJ3Jvd3MnXVtvYmpbJ2ZyYW1lX2lkJ11dWydmdW5jJ10KKworICAg ICMgQ2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgc3RhY2sgYmVmb3JlIHNldHRp bmcgdGhlIGJyZWFrcG9pbnQKKyAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgor ICAgICAgICBpZiBzZXRfdHlwZSA9PSAxOgorICAgICAgICAgICAgcXVlcnlf dHlwZSA9ICdzZXRfYnJlYWtwb2ludCcKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHF1ZXJ5X3R5cGUgPSAnY2xlYXJfYnJlYWtwb2ludCcKKworICAg ICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRl X3BhdGgsIHF1ZXJ5X3R5cGUgKyAiLnNxbCJdKSwgc2Vzc2lvbl9pZD1vYmpb J3Nlc3Npb25faWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvaWQ9Zm9pZCwgbGluZV9udW1iZXI9bGluZV9ubykKKworICAgICAgICBz dGF0dXMsIHJlc3VsdCA9IGNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKyAgICAg ICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdWx0KQorICAgIGVsc2U6Cisg ICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJlc3VsdCA9IGdldHRl eHQoJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0 aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKQorCisgICAgcmV0dXJu IG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAn cmVzdWx0JzogcmVzdWx0Wydyb3dzJ119KQorCisKK0BibHVlcHJpbnQucm91 dGUoJy9jbGVhcl9hbGxfYnJlYWtwb2ludC88aW50OnRyYW5zX2lkPicsIG1l dGhvZHM9WydQT1NUJ10pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBjbGVhcl9h bGxfYnJlYWtwb2ludCh0cmFuc19pZCk6CisgICAgIiIiCisgICAgY2xlYXJf YWxsX2JyZWFrcG9pbnQodHJhbnNfaWQpCisKKyAgICBUaGlzIG1ldGhvZCBp cyByZXNwb25zaWJsZSB0byBjbGVhciBhbGwgdGhlIGJyZWFrcG9pbnQKKwor ICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHRyYW5zX2lkCisgICAgICAgIC0g VHJhbnNhY3Rpb24gSUQKKyAgICAiIiIKKyAgICBkZWJ1Z2dlcl9kYXRhID0g c2Vzc2lvblsnZGVidWdnZXJEYXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQp IG5vdCBpbiBkZWJ1Z2dlcl9kYXRhOgorICAgICAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZh bHNlLAorICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05v dCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUg c2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9i aiA9IGRlYnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKworICAgIG1hbmFn ZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9u X21hbmFnZXIob2JqWydzZXJ2ZXJfaWQnXSkKKyAgICBjb25uID0gbWFuYWdl ci5jb25uZWN0aW9uKGRpZD1vYmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9 b2JqWydleGVfY29ubl9pZCddKQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dl ciB2ZXJzaW9uIGFuZCBleGVjdXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQor ICAgIGRiZ192ZXJzaW9uID0gb2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAg ICBpZiBkYmdfdmVyc2lvbiA8PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRo ID0gJ2RlYnVnZ2VyL3NxbC92MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1w bGF0ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92MicKKworICAgIHF1ZXJ5X3R5 cGUgPSAnJworCisgICAgaWYgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAg IyBnZXQgdGhlIGRhdGEgc2VudCB0aHJvdWdoIHBvc3QgZnJvbSBjbGllbnQK KyAgICAgICAgaWYgcmVxdWVzdC5mb3JtWydicmVha3BvaW50X2xpc3QnXToK KyAgICAgICAgICAgIGxpbmVfbnVtYmVycyA9IHJlcXVlc3QuZm9ybVsnYnJl YWtwb2ludF9saXN0J10uc3BsaXQoIiwiKQorICAgICAgICAgICAgZm9yIGxp bmVfbm8gaW4gbGluZV9udW1iZXJzOgorICAgICAgICAgICAgICAgIHNxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgImNs ZWFyX2JyZWFrcG9pbnQuc3FsIl0pLCBzZXNzaW9uX2lkPW9ialsnc2Vzc2lv bl9pZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv aWQ9b2JqWydmdW5jdGlvbl9pZCddLCBsaW5lX251bWJlcj1saW5lX25vKQor CisgICAgICAgICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1 dGVfZGljdChzcWwpCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1yZXN1bHQpCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMn OiBGYWxzZX0pCisgICAgZWxzZToKKyAgICAgICAgc3RhdHVzID0gRmFsc2UK KyAgICAgICAgcmVzdWx0ID0gZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byBz ZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4g Y2xvc2VkLicpCisKKyAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRh dGE9eydzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXN1bHRbJ3Jvd3Mn XX0pCisKKworQGJsdWVwcmludC5yb3V0ZSgnL2RlcG9zaXRfdmFsdWUvPGlu dDp0cmFuc19pZD4nLCBtZXRob2RzPVsnUE9TVCddKQorQGxvZ2luX3JlcXVp cmVkCitkZWYgZGVwb3NpdF9wYXJhbWV0ZXJfdmFsdWUodHJhbnNfaWQpOgor ICAgICIiIgorICAgIGRlcG9zaXRfcGFyYW1ldGVyX3ZhbHVlKHRyYW5zX2lk KQorCisgICAgVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgdG8gY2hhbmdl IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZXMKKworICAgIFBhcmFtZXRlcnM6Cisg ICAgICAgIHRyYW5zX2lkCisgICAgICAgIC0gVHJhbnNhY3Rpb24gSUQKKyAg ICAiIiIKKyAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vzc2lvblsnZGVidWdnZXJE YXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQpIG5vdCBpbiBkZWJ1Z2dlcl9k YXRhOgorICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAg ICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZhbHNlLAorICAgICAgICAgICAg ICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gc2Vy dmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNs b3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9iaiA9IGRlYnVnZ2VyX2RhdGFb c3RyKHRyYW5zX2lkKV0KKworICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBH X0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFnZXIob2JqWydzZXJ2 ZXJfaWQnXSkKKyAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1v YmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9b2JqWydleGVfY29ubl9pZCdd KQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dlciB2ZXJzaW9uIGFuZCBleGVj dXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQorICAgIGRiZ192ZXJzaW9uID0g b2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAgICBpZiBkYmdfdmVyc2lvbiA8 PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2RlYnVnZ2VyL3NxbC92 MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2RlYnVn Z2VyL3NxbC92MicKKworICAgIHF1ZXJ5X3R5cGUgPSAnJworCisgICAgaWYg Y29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgIyBnZXQgdGhlIGRhdGEgc2Vu dCB0aHJvdWdoIHBvc3QgZnJvbSBjbGllbnQKKyAgICAgICAgZGF0YSA9IGpz b24ubG9hZHMocmVxdWVzdC52YWx1ZXNbJ2RhdGEnXSkKKworICAgICAgICBp ZiBkYXRhOgorICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAiZGVwb3NpdF92YWx1ZS5zcWwiXSks IHNlc3Npb25faWQ9b2JqWydzZXNzaW9uX2lkJ10sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFyX25hbWU9ZGF0YVswXVsnbmFtZSdd LCBsaW5lX251bWJlcj0tMSwgdmFsPWRhdGFbMF1bJ3ZhbHVlJ10pCisKKyAg ICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVjdXRlX2RpY3Qo c3FsKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl c3VsdCkKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAg ICAgICByZXN1bHQgPSBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHNlcnZl ciBPciBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9z ZWQuJykKKworICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17 J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdFsncm93cyddfSkK KworCitAYmx1ZXByaW50LnJvdXRlKCcvc2VsZWN0X2ZyYW1lLzxpbnQ6dHJh bnNfaWQ+LzxpbnQ6ZnJhbWVfaWQ+JywgbWV0aG9kcz1bJ0dFVCddKQorQGxv Z2luX3JlcXVpcmVkCitkZWYgc2VsZWN0X2ZyYW1lKHRyYW5zX2lkLCBmcmFt ZV9pZCk6CisgICAgIiIiCisgICAgc2VsZWN0X2ZyYW1lKHRyYW5zX2lkLCBm cmFtZV9pZCkKKworICAgIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIHRv IHNlbGVjdCB0aGUgZnJhbWUgZnJvbSBzdGFjayBpbmZvCisKKyAgICBQYXJh bWV0ZXJzOgorICAgICAgICB0cmFuc19pZAorICAgICAgICAtIFRyYW5zYWN0 aW9uIElECisgICAgICAgIGZyYW1lX2lkCisgICAgICAgIC0gRnJhbWUgaWQg c2VsZWN0ZWQKKyAgICAiIiIKKyAgICBkZWJ1Z2dlcl9kYXRhID0gc2Vzc2lv blsnZGVidWdnZXJEYXRhJ10KKyAgICBpZiBzdHIodHJhbnNfaWQpIG5vdCBp biBkZWJ1Z2dlcl9kYXRhOgorICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jl c3BvbnNlKAorICAgICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZhbHNlLAor ICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IGdldHRleHQoJ05vdCBjb25u ZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVy IGhhcyBiZWVuIGNsb3NlZC4nKX0KKyAgICAgICAgKQorICAgIG9iaiA9IGRl YnVnZ2VyX2RhdGFbc3RyKHRyYW5zX2lkKV0KKworICAgIG1hbmFnZXIgPSBn ZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFn ZXIob2JqWydzZXJ2ZXJfaWQnXSkKKyAgICBjb25uID0gbWFuYWdlci5jb25u ZWN0aW9uKGRpZD1vYmpbJ2RhdGFiYXNlX2lkJ10sIGNvbm5faWQ9b2JqWydl eGVfY29ubl9pZCddKQorCisgICAgIyBmaW5kIHRoZSBkZWJ1Z2dlciB2ZXJz aW9uIGFuZCBleGVjdXRlIHRoZSBxdWVyeSBhY2NvcmRpbmdseQorICAgIGRi Z192ZXJzaW9uID0gb2JqWydkZWJ1Z2dlcl92ZXJzaW9uJ10KKyAgICBpZiBk YmdfdmVyc2lvbiA8PSAyOgorICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2Rl YnVnZ2VyL3NxbC92MScKKyAgICBlbHNlOgorICAgICAgICB0ZW1wbGF0ZV9w YXRoID0gJ2RlYnVnZ2VyL3NxbC92MicKKworICAgIHNlc3Npb25fb2JqID0g ZGVidWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorICAgIHNlc3Npb25fb2Jq WydmcmFtZV9pZCddID0gZnJhbWVfaWQKKyAgICB1cGRhdGVfc2Vzc2lvbl9k ZWJ1Z2dlcl90cmFuc2FjdGlvbih0cmFuc19pZCwgc2Vzc2lvbl9vYmopCisK KyAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgorICAgICAgICBzcWwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICJzZWxlY3Rf ZnJhbWUuc3FsIl0pLCBzZXNzaW9uX2lkPW9ialsnc2Vzc2lvbl9pZCddLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2lkPWZy YW1lX2lkKQorCisgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5leGVj dXRlX2RpY3Qoc3FsKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1y ZXN1bHQpCisgICAgZWxzZToKKyAgICAgICAgc3RhdHVzID0gRmFsc2UKKyAg ICAgICAgcmVzdWx0ID0gZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byBzZXJ2 ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xv c2VkLicpCisKKyAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9 eydzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXN1bHRbJ3Jvd3MnXX0p CisKKworQGJsdWVwcmludC5yb3V0ZSgnL2dldF9hcmd1bWVudHMvPGludDpz aWQ+LzxpbnQ6ZGlkPi88aW50OnNjaWQ+LzxpbnQ6ZnVuY19pZD4nLCBtZXRo b2RzPVsnR0VUJ10pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBnZXRfYXJndW1l bnRzX3NxbGl0ZShzaWQsIGRpZCwgc2NpZCwgZnVuY19pZCk6CisgICAgIiIi CisgICAgZ2V0X2FyZ3VtZW50c19zcWxpdGUoc2lkLCBkaWQsIHNjaWQsIGZ1 bmNfaWQpCisKKyAgICBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSB0byBn ZXQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBzYXZlZCB0byBzcWxpdGUgZGF0 YWJhc2UgZHVyaW5nIGZpcnN0IGRlYnVnZ2luZy4KKworICAgIFBhcmFtZXRl cnM6CisgICAgICAgIHNpZAorICAgICAgICAtIFNlcnZlciBJZAorICAgICAg ICBkaWQKKyAgICAgICAgLSBEYXRhYmFzZSBJZAorICAgICAgICBzY2lkCisg ICAgICAgIC0gU2NoZW1hIElkCisgICAgICAgIGZ1bmNfaWQKKyAgICAgICAg LSBGdW5jdGlvbiBJZAorICAgICIiIgorCisgICAgIiIiR2V0IHRoZSBjb3Vu dCBvZiB0aGUgZXhpc3RpbmcgZGF0YSBhdmFpbGFibGUgaW4gc3FsaXRlIGRh dGFiYXNlIiIiCisgICAgRGJnRnVuY0FyZ3NDb3VudCA9IERlYnVnZ2VyRnVu Y3Rpb25Bcmd1bWVudHMucXVlcnkuZmlsdGVyX2J5KAorICAgICAgICAgICAg ICAgICAgc2VydmVyX2lkPXNpZCwgZGF0YWJhc2VfaWQ9ZGlkLCBzY2hlbWFf aWQ9c2NpZCwgZnVuY3Rpb25faWQ9ZnVuY19pZCkuY291bnQoKQorCisgICAg YXJnc19kYXRhID0gW10KKworICAgIGlmIERiZ0Z1bmNBcmdzQ291bnQ6Cisg ICAgICAgICIiIlVwZGF0ZSB0aGUgRGVidWdnZXIgRnVuY3Rpb24gQXJndW1l bnRzIHNldHRpbmdzIiIiCisgICAgICAgIERiZ0Z1bmNBcmdzID0gRGVidWdn ZXJGdW5jdGlvbkFyZ3VtZW50cy5xdWVyeS5maWx0ZXJfYnkoCisgICAgICAg ICAgICAgICAgICAgICAgc2VydmVyX2lkPXNpZCwgZGF0YWJhc2VfaWQ9ZGlk LCBzY2hlbWFfaWQ9c2NpZCwgZnVuY3Rpb25faWQ9ZnVuY19pZCkKKworICAg ICAgICBhcmdzX2xpc3QgPSBEYmdGdW5jQXJncy5hbGwoKQorCisgICAgICAg IGZvciBpIGluIHJhbmdlKDAsIERiZ0Z1bmNBcmdzQ291bnQpOgorICAgICAg ICAgICAgaW5mbyA9IHsKKyAgICAgICAgICAgICAgICAiYXJnX2lkIjogYXJn c19saXN0W2ldLmFyZ19pZCwKKyAgICAgICAgICAgICAgICAiaXNfbnVsbCI6 ICBhcmdzX2xpc3RbaV0uaXNfbnVsbCwKKyAgICAgICAgICAgICAgICAiaXNf ZXhwcmVzc2lvbiI6ICBhcmdzX2xpc3RbaV0uaXNfZXhwcmVzc2lvbiwKKyAg ICAgICAgICAgICAgICAidXNlX2RlZmF1bHQiOiBhcmdzX2xpc3RbaV0udXNl X2RlZmF1bHQsCisgICAgICAgICAgICAgICAgInZhbHVlIjogYXJnc19saXN0 W2ldLnZhbHVlCisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzX2Rh dGEuYXBwZW5kKGluZm8pCisKKyAgICAgICAgIyBBcyB3ZSBkbyBoYXZlIGVu dHJ5IGF2YWlsYWJsZSBmb3IgdGhhdCBmdW5jdGlvbiBzbyB3ZSBuZWVkIHRv IGFkZCB0aGF0IGVudHJ5CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVz cG9uc2UoZGF0YT17J3Jlc3VsdCc6IGFyZ3NfZGF0YSwgJ2FyZ3NfY291bnQn OiBEYmdGdW5jQXJnc0NvdW50fSkKKyAgICBlbHNlOgorICAgICAgICAjIEFz IHdlIGRvIG5vdCBoYXZlIGFueSBlbnRyeSBhdmFpbGFibGUgZm9yIHRoYXQg ZnVuY3Rpb24gc28gd2UgbmVlZCB0byBhZGQgdGhhdCBlbnRyeQorICAgICAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydyZXN1bHQnOiAn cmVzdWx0JywgJ2FyZ3NfY291bnQnOiBEYmdGdW5jQXJnc0NvdW50fSkKKwor CitAYmx1ZXByaW50LnJvdXRlKCcvc2V0X2FyZ3VtZW50cy88aW50OnNpZD4v PGludDpkaWQ+LzxpbnQ6c2NpZD4vPGludDpmdW5jX2lkPicsIG1ldGhvZHM9 WydQT1NUJ10pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBzZXRfYXJndW1lbnRz X3NxbGl0ZShzaWQsIGRpZCwgc2NpZCwgZnVuY19pZCk6CisgICAgIiIiCisg ICAgc2V0X2FyZ3VtZW50c19zcWxpdGUoc2lkLCBkaWQsIHNjaWQsIGZ1bmNf aWQpCisKKyAgICBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3Igc2V0 dGluZyB0aGUgdmFsdWUgb2YgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHNxbGl0 ZSBkYXRhYmFzZQorCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgc2lkCisg ICAgICAgIC0gU2VydmVyIElkCisgICAgICAgIGRpZAorICAgICAgICAtIERh dGFiYXNlIElkCisgICAgICAgIHNjaWQKKyAgICAgICAgLSBTY2hlbWEgSWQK KyAgICAgICAgZnVuY19pZAorICAgICAgICAtIEZ1bmN0aW9uIElkCisgICAg IiIiCisKKyAgICBpZiByZXF1ZXN0LnZhbHVlc1snZGF0YSddOgorICAgICAg ICBkYXRhID0ganNvbi5sb2FkcyhyZXF1ZXN0LnZhbHVlc1snZGF0YSddKQor CisgICAgdHJ5OgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0 YSkpOgorICAgICAgICAgICAgRGJnRnVuY0FyZ3NFeGlzdHMgPSBEZWJ1Z2dl ckZ1bmN0aW9uQXJndW1lbnRzLnF1ZXJ5LmZpbHRlcl9ieSgKKyAgICAgICAg ICAgICAgICAgICAgc2VydmVyX2lkPWRhdGFbaV1bJ3NlcnZlcl9pZCddLCBk YXRhYmFzZV9pZD1kYXRhW2ldWydkYXRhYmFzZV9pZCddLCBzY2hlbWFfaWQ9 ZGF0YVtpXVsnc2NoZW1hX2lkJ10sCisgICAgICAgICAgICAgICAgICAgIGZ1 bmN0aW9uX2lkPWRhdGFbaV1bJ2Z1bmN0aW9uX2lkJ10sIGFyZ19pZD1kYXRh W2ldWydhcmdfaWQnXSkuY291bnQoKQorCisgICAgICAgICAgICAjIENoZWNr IGlmIGRhdGEgaXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gZGF0YWJhc2UgdGhl biB1cGRhdGUgdGhlIGV4aXN0aW5nIHZhbHVlIG90aGVyd2lzZSBhZGQgdGhl IG5ldyB2YWx1ZQorICAgICAgICAgICAgaWYgRGJnRnVuY0FyZ3NFeGlzdHM6 CisgICAgICAgICAgICAgICAgRGJnRnVuY0FyZ3MgPSBEZWJ1Z2dlckZ1bmN0 aW9uQXJndW1lbnRzLnF1ZXJ5LmZpbHRlcl9ieSgKKyAgICAgICAgICAgICAg ICAgICAgICAgIHNlcnZlcl9pZD1kYXRhW2ldWydzZXJ2ZXJfaWQnXSwgZGF0 YWJhc2VfaWQ9ZGF0YVtpXVsnZGF0YWJhc2VfaWQnXSwgc2NoZW1hX2lkPWRh dGFbaV1bJ3NjaGVtYV9pZCddLAorICAgICAgICAgICAgICAgICAgICAgICAg ZnVuY3Rpb25faWQ9ZGF0YVtpXVsnZnVuY3Rpb25faWQnXSwgYXJnX2lkPWRh dGFbaV1bJ2FyZ19pZCddKS5maXJzdCgpCisKKyAgICAgICAgICAgICAgICBE YmdGdW5jQXJncy5pc19udWxsID0gZGF0YVtpXVsnaXNfbnVsbCddCisgICAg ICAgICAgICAgICAgRGJnRnVuY0FyZ3MuaXNfZXhwcmVzc2lvbiA9IGRhdGFb aV1bJ2lzX2V4cHJlc3Npb24nXQorICAgICAgICAgICAgICAgIERiZ0Z1bmNB cmdzLnVzZV9kZWZhdWx0ID0gZGF0YVtpXVsndXNlX2RlZmF1bHQnXQorICAg ICAgICAgICAgICAgIERiZ0Z1bmNBcmdzLnZhbHVlID0gZGF0YVtpXVsndmFs dWUnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWJ1 Z2dlcl9mdW5jX2FyZ3MgPSBEZWJ1Z2dlckZ1bmN0aW9uQXJndW1lbnRzKAor ICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQgPSBkYXRhW2ldWydzZXJ2 ZXJfaWQnXSwKKyAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VfaWQgPSBk YXRhW2ldWydkYXRhYmFzZV9pZCddLAorICAgICAgICAgICAgICAgICAgICBz Y2hlbWFfaWQgPSBkYXRhW2ldWydzY2hlbWFfaWQnXSwKKyAgICAgICAgICAg ICAgICAgICAgZnVuY3Rpb25faWQgPSBkYXRhW2ldWydmdW5jdGlvbl9pZCdd LAorICAgICAgICAgICAgICAgICAgICBhcmdfaWQgPSBkYXRhW2ldWydhcmdf aWQnXSwKKyAgICAgICAgICAgICAgICAgICAgaXNfbnVsbCA9IGRhdGFbaV1b J2lzX251bGwnXSwKKyAgICAgICAgICAgICAgICAgICAgaXNfZXhwcmVzc2lv biA9IGRhdGFbaV1bJ2lzX2V4cHJlc3Npb24nXSwKKyAgICAgICAgICAgICAg ICAgICAgdXNlX2RlZmF1bHQgPSBkYXRhW2ldWyd1c2VfZGVmYXVsdCddLAor ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFbaV1bJ3ZhbHVlJ10K KyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICAgICBkYi5zZXNz aW9uLmFkZChkZWJ1Z2dlcl9mdW5jX2FyZ3MpCisKKyAgICAgICAgICAgIGRi LnNlc3Npb24uY29tbWl0KCkKKworICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg ZToKKyAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihlKQor ICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAg ICAgc3RhdHVzPTQxMCwKKyAgICAgICAgICAgIHN1Y2Nlc3M9MCwKKyAgICAg ICAgICAgIGVycm9ybXNnPWUubWVzc2FnZQorICAgICAgICApCisKKyAgICBy ZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiBUcnVl LCAncmVzdWx0JzogJ1N1Y2Nlc3MnfSkKKworCitAYmx1ZXByaW50LnJvdXRl KCcvcG9sbF9lbmRfZXhlY3V0aW9uX3Jlc3VsdC88aW50OnRyYW5zX2lkPi8n LCBtZXRob2RzPVsiR0VUIl0pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBwb2xs X2VuZF9leGVjdXRpb25fcmVzdWx0KHRyYW5zX2lkKToKKyAgICAiIiIKKyAg ICBwb2xsX2VuZF9leGVjdXRpb25fcmVzdWx0KHRyYW5zX2lkKQorCisgICAg VGhpcyBtZXRob2QgcG9sbHMgdGhlIGVuZCBvZiBleGVjdXRpb24gcmVzdWx0 IG1lc3NhZ2VzIHJldHVybmVkIGJ5IHRoZSBkYXRhYmFzZSBzZXJ2ZXIuCisK KyAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0cmFuc19pZAorICAgICAgICAt IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZC4KKyAgICAiIiIKKworICAgIGRlYnVn Z2VyX2RhdGEgPSBzZXNzaW9uWydkZWJ1Z2dlckRhdGEnXQorICAgIGlmIHN0 cih0cmFuc19pZCkgbm90IGluIGRlYnVnZ2VyX2RhdGE6CisgICAgICAgIHJl dHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXsn c3RhdHVzJzogJ05vdENvbm5lY3RlZCcsCisgICAgICAgICAgICAgICAgICAn cmVzdWx0JzogZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3Ig Y29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicp fQorICAgICAgICApCisgICAgb2JqID0gZGVidWdnZXJfZGF0YVtzdHIodHJh bnNfaWQpXQorCisgICAgbWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVM VF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihvYmpbJ3NlcnZlcl9pZCdd KQorICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPW9ialsnZGF0 YWJhc2VfaWQnXSwgY29ubl9pZD1vYmpbJ2Nvbm5faWQnXSkKKworICAgIGlm IGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgIHN0YXR1c21zZyA9IGNvbm4u c3RhdHVzX21lc3NhZ2UoKQorICAgICAgICBzdGF0dXMsIHJlc3VsdCwgbXlf cmVzdWx0ID0gY29ubi5wb2xsKCkKKyAgICAgICAgaWYgc3RhdHVzID09IEFT WU5DX09LIGFuZCBzZXNzaW9uWydmdW5jdGlvbkRhdGEnXVtzdHIodHJhbnNf aWQpXVsnbGFuZ3VhZ2UnXSA9PSAnZWRic3BsJzoKKyAgICAgICAgICAgIHN0 YXR1cyA9ICdTdWNjZXNzJworICAgICAgICAgICAgcmV0dXJuIG1ha2VfanNv bl9yZXNwb25zZShzdWNjZXNzPTEsIGluZm89Z2V0dGV4dCgiRXhlY3V0aW9u IENvbXBsZXRlZC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YT17J3N0YXR1cyc6IHN0YXR1cywgJ3N0YXR1c19tZXNz YWdlJzogc3RhdHVzbXNnfSkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAg ICAgICAgc3RhdHVzID0gJ1N1Y2Nlc3MnCisgICAgICAgICAgICBkYXRhID0g e30KKyAgICAgICAgICAgIGZvciBpIGluIHJlc3VsdDoKKyAgICAgICAgICAg ICAgICBmb3IgaywgdiBpbiBpLml0ZW1zKCk6CisgICAgICAgICAgICAgICAg ICAgIGRhdGFbIm5hbWUiXSA9IGsKKyAgICAgICAgICAgICAgICAgICAgZGF0 YS5zZXRkZWZhdWx0KCJ2YWx1ZSIsW10pLmFwcGVuZCh2KQorCisgICAgICAg ICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKHN1Y2Nlc3M9MSwgaW5m bz1nZXR0ZXh0KCJFeGVjdXRpb24gQ29tcGxldGVkLiIpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXsnc3RhdHVzJzog c3RhdHVzLCAncmVzdWx0JzogZGF0YSwgJ3N0YXR1c19tZXNzYWdlJzogc3Rh dHVzbXNnfSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1cyA9 ICdCdXN5JworICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9ICdOb3RDb25u ZWN0ZWQnCisgICAgICAgIHJlc3VsdCA9IGdldHRleHQoJ05vdCBjb25uZWN0 ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGhh cyBiZWVuIGNsb3NlZC4nKQorCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNw b25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVzdWx0 fSkKKworCitAYmx1ZXByaW50LnJvdXRlKCcvcG9sbF9yZXN1bHQvPGludDp0 cmFuc19pZD4vJywgbWV0aG9kcz1bIkdFVCJdKQorQGxvZ2luX3JlcXVpcmVk CitkZWYgcG9sbF9yZXN1bHQodHJhbnNfaWQpOgorICAgICIiIgorICAgIHBv bGxfcmVzdWx0KHRyYW5zX2lkKQorCisgICAgVGhpcyBtZXRob2QgcG9sbHMg dGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIHF1ZXJ5IGFuZCByZXR1 cm5zIHRoZSByZXN1bHQuCisKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0 cmFuc19pZAorICAgICAgICAtIHVuaXF1ZSB0cmFuc2FjdGlvbiBpZC4KKyAg ICAiIiIKKworICAgIGRlYnVnZ2VyX2RhdGEgPSBzZXNzaW9uWydkZWJ1Z2dl ckRhdGEnXQorICAgIGlmIHN0cih0cmFuc19pZCkgbm90IGluIGRlYnVnZ2Vy X2RhdGE6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisg ICAgICAgICAgICBkYXRhPXsnc3RhdHVzJzogJ05vdENvbm5lY3RlZCcsCisg ICAgICAgICAgICAgICAgICAncmVzdWx0JzogZ2V0dGV4dCgnTm90IGNvbm5l Y3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIg aGFzIGJlZW4gY2xvc2VkLicpfQorICAgICAgICApCisgICAgb2JqID0gZGVi dWdnZXJfZGF0YVtzdHIodHJhbnNfaWQpXQorCisgICAgbWFuYWdlciA9IGdl dF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdl cihvYmpbJ3NlcnZlcl9pZCddKQorICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5l Y3Rpb24oZGlkPW9ialsnZGF0YWJhc2VfaWQnXSwgY29ubl9pZD1vYmpbJ2V4 ZV9jb25uX2lkJ10pCisKKyAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgorICAg ICAgICBzdGF0dXMsIHJlc3VsdCwgbXlfcmVzdWx0ID0gY29ubi5wb2xsKCkK KyAgICAgICAgaWYgc3RhdHVzID09IEFTWU5DX09LIGFuZCByZXN1bHQgaXMg bm90IE5vbmU6CisgICAgICAgICAgICBzdGF0dXMgPSAnU3VjY2VzcycKKyAg ICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1cyA9ICdCdXN5JworICAg IGVsc2U6CisgICAgICAgIHN0YXR1cyA9ICdOb3RDb25uZWN0ZWQnCisgICAg ICAgIHJlc3VsdCA9IGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVy IE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3Nl ZC4nKQorCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsn c3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVzdWx0fSkKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3N0YXRpYy9jc3MvZGVi dWdnZXIuY3NzIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvc3RhdGlj L2Nzcy9kZWJ1Z2dlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMmRjZWI1MwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL3Rvb2xzL2RlYnVnZ2VyL3N0YXRpYy9jc3MvZGVidWdnZXIuY3NzCkBA IC0wLDAgKzEsNzIgQEAKKy5uYXZiYXItc3RhdGljLXRvcCwgLm5hdmJhci1m aXhlZC10b3AsIC5uYXZiYXItZml4ZWQtYm90dG9tIHsKKyAgYmFja2dyb3Vu ZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI0NDQyAwJSwg I0QyRDJEMiAxMDAlKTsKK30KKworLmJ0bi1kZWZhdWx0IHsKKyAgYmFja2dy b3VuZC1jb2xvcjogI0QyRDJEMjsKKyAgbGVmdDogMHB4OworICByaWdodDog MHB4OworICBwYWRkaW5nOiA3cHg7Cit9CisKKy5idG4tdG9vbGJhciB7Cisg IHBhZGRpbmctdG9wOiAzcHg7CisgIHBhZGRpbmctYm90dG9tOiAzcHg7Cit9 CisKKyNjb250YWluZXIgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRv cDogNDRweDsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgcmln aHQ6IDBweDsKK30KKworLmZ1bGwtY29udGFpbmVyIHsKKyAgcG9zaXRpb246 IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICByaWdo dDogMHB4OworICBib3R0b206MHB4OworfQorCisuZnVsbC1jb250YWluZXIt cGFuZSB7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDEwMCU7Cit9CisK Ky50b3AtY29udGFpbmVyIHsKKyAgbWluLWhlaWdodDogMzAwcHg7CisgIGhl aWdodDogMTAwJTsKK30KKworLnBnLWRlYnVnZ2VyLXBhbmVsIHsKKyAgaGVp Z2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsKKyAgcG9zaXRpb246IGFic29s dXRlOworICB0b3A6IDA7IGJvdHRvbTogMDsgcmlnaHQ6IDA7IGxlZnQ6IDA7 Cit9CisKKy53Y0xvYWRpbmdJY29uIHsKKyAgcG9zaXRpb246IGFic29sdXRl OworICBmb250LXNpemU6IDEwMHB4OworICBsZWZ0OiBjYWxjKDUwJSAtIDEw MHB4KTsKKyAgdG9wOiBjYWxjKDUwJSAtIDEwMHB4KTsKKyAgaGVpZ2h0OiA5 NXB4OworfQorCisud2NMb2FkaW5nTGFiZWwgeworICBwb3NpdGlvbjogYWJz b2x1dGU7CisgIHdpZHRoOiAxMDMlOworICBmb250LXNpemU6IDMwcHg7Cisg IHRvcDogY2FsYyg1MCUgKyAwcHgpOworICB0ZXh0LWFsaWduOiBjZW50ZXI7 Cit9CisKKy50b3AtY29udGFpbmVyIC5icmVha3BvaW50cyB7CisgICAgd2lk dGg6IDAuOWVtOworfQorCisudG9wLWNvbnRhaW5lciAuQ29kZU1pcnJvci1h Y3RpdmVsaW5lLWJhY2tncm91bmQgeworICAgIGJhY2tncm91bmQ6ICM1MEIw RjA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVn Z2VyL2RpcmVjdC5odG1sIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL2RpcmVjdC5odG1sCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGVmMmYKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvZGlyZWN0Lmh0bWwKQEAgLTAsMCArMSw2MyBAQAoreyUgZXh0ZW5k cyAiYmFzZS5odG1sIiAlfQoreyUgYmxvY2sgdGl0bGUgJX17eyBfKCdEZWJ1 Z2dlciAtICcpICsgZnVuY3Rpb25fbmFtZSB9fXslIGVuZGJsb2NrICV9Cit7 JSBibG9jayBpbml0X3NjcmlwdCAlfQordHJ5IHsKKyAgcmVxdWlyZSgKKyAg ICBbJ3BnYWRtaW4nLCAncGdhZG1pbi50b29scy5kZWJ1Z2dlci5kaXJlY3Qn XSwKKyAgICBmdW5jdGlvbihwZ0FkbWluLCBwZ0RpcmVjdERlYnVnKSB7Cisg ICAgICBwZ0RpcmVjdERlYnVnLmluaXQoe3sgdW5pcXVlSWQgfX0sIHt7IGRl YnVnX3R5cGUgfX0pOworICAgIH0sCisgICAgZnVuY3Rpb24oKSB7CisgICAg ICAvKiBUT0RPOjogU2hvdyBwcm9wZXIgZXJyb3IgZGlhbG9nICovCisgICAg ICBjb25zb2xlLmxvZyhhcmd1bWVudHMpOworICAgIH0pOworfSBjYXRjaCAo ZXJyKSB7CisgIC8qIFNob3cgcHJvcGVyIGVycm9yIGRpYWxvZyAqLworICBj b25zb2xlLmxvZyhlcnIpOworfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2Nr IGJvZHkgJX0KKworPG5hdiBjbGFzcz0ibmF2YmFyLWludmVyc2UgbmF2YmFy LWZpeGVkLXRvcCI+CisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+ CisgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4K KyAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgorICAgICAgICA8 ZGl2IGlkPSJidG4tdG9vbGJhciIgY2xhc3M9ImJ0bi10b29sYmFyIiByb2xl PSJ0b29sYmFyIiBhcmlhLWxhYmVsPSIiPgorICAgICAgICAgIDxkaXYgY2xh c3M9ImJ0bi1ncm91cCIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IiI+Cisg ICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRu IGJ0bi1kZWZhdWx0IGJ0bi1zdGVwLWludG8iIHRpdGxlPSJ7eyBfKCdTdGVw IGludG8nKSB9fSI+CisgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEg ZmEtaW5kZW50Ij48L2k+CisgICAgICAgICAgICAgIDwvYnV0dG9uPgorICAg ICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBi dG4tZGVmYXVsdCBidG4tc3RlcC1vdmVyIiB0aXRsZT0ie3sgXygnU3RlcCBv dmVyJykgfX0iPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZh LW91dGRlbnQiPjwvaT4KKyAgICAgICAgICAgICAgPC9idXR0b24+CisgICAg ICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0 bi1kZWZhdWx0IGJ0bi1jb250aW51ZSIgdGl0bGU9Int7IF8oJ0NvbnRpbnVl L1N0YXJ0JykgfX0iPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZh IGZhLXBsYXktY2lyY2xlIj48L2k+CisgICAgICAgICAgICAgIDwvYnV0dG9u PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICA8ZGl2IGNsYXNzPSJi dG4tZ3JvdXAiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSIiPgorICAgICAg ICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4t ZGVmYXVsdCBidG4tdG9nZ2xlLWJyZWFrcG9pbnQiIHRpdGxlPSJ7eyBfKCdU b2dnbGUgYnJlYWtwb2ludCcpIH19Ij4KKyAgICAgICAgICAgICAgICAgIDxp IGNsYXNzPSJmYSBmYS1jaXJjbGUiPjwvaT4KKyAgICAgICAgICAgICAgPC9i dXR0b24+CisgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBj bGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1jbGVhci1icmVha3BvaW50IiB0 aXRsZT0ie3sgXygnQ2xlYXIgYWxsIGJyZWFrcG9pbnRzJykgfX0iPgorICAg ICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWJhbiI+PC9pPgorICAg ICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAg ICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJp YS1sYWJlbD0iIj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0 b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXN0b3AiIHRpdGxlPSJ7 eyBfKCdTdG9wJykgfX0iPgorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9 ImZhIGZhLXN0b3AtY2lyY2xlIj48L2k+CisgICAgICAgICAgICAgIDwvYnV0 dG9uPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAg IDwvdWw+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9uYXY+Cis8ZGl2IGlk PSJjb250YWluZXIiPjwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKworCit7JSBi bG9jayBjc3NfbGluayAlfQoreyUgZm9yIHN0eWxlc2hlZXQgaW4gc3R5bGVz aGVldHMgJX0KKzxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hl ZXQiIGhyZWY9Int7IHN0eWxlc2hlZXQgfX0iLz4KK3slIGVuZGZvciAlfQor eyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9qcy9kZWJ1Z2dlci5qcyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9qcy9kZWJ1Z2dlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42ZDI0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL2pzL2RlYnVn Z2VyLmpzCkBAIC0wLDAgKzEsMzI5IEBACitkZWZpbmUoCisgIFsnanF1ZXJ5 JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAnYWxlcnRp ZnknLCAncGdhZG1pbicsCisgICdwZ2FkbWluLmJyb3dzZXInLCAnYmFja2Jv bmUnLCAnYmFja2dyaWQnLCAnY29kZW1pcnJvcicsICdiYWNrZm9ybScsCisg ICdwZ2FkbWluLnRvb2xzLmRlYnVnZ2VyLnVpJywgJ3djZG9ja2VyJywgJ3Bn YWRtaW4uYmFja2Zvcm0nLAorICAncGdhZG1pbi5iYWNrZ3JpZCcsICdwZ2Fk bWluLmJyb3dzZXIuZnJhbWUnXSwKKyAgZnVuY3Rpb24oJCwgXywgUywgQWxl cnRpZnksIHBnQWRtaW4sIHBnQnJvd3NlciwgQmFja2JvbmUsIEJhY2tncmlk LCBDb2RlTWlycm9yLCBCYWNrZm9ybSwgZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50 cykgeworCisgIHBnQWRtaW4gPSBwZ0FkbWluIHx8IHdpbmRvdy5wZ0FkbWlu IHx8IHt9OworCisgIHZhciBwZ1Rvb2xzID0gcGdBZG1pbi5Ub29scyA9IHBn QWRtaW4uVG9vbHMgfHwge307CisKKyAgLyogUmV0dXJuIGJhY2ssIHRoaXMg aGFzIGJlZW4gY2FsbGVkIG1vcmUgdGhhbiBvbmNlICovCisgIGlmIChwZ0Fk bWluLlRvb2xzLkRlYnVnZ2VyKQorICAgIHJldHVybiBwZ0FkbWluLlRvb2xz LkRlYnVnZ2VyOworCisgIHBnVG9vbHMuRGVidWdnZXIgPSB7CisgICAgICBp bml0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQg dG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIG11bHRpcGxlIHRpbWVzLgorICAg ICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkKKyAgICAgICAgICAgIHJldHVy bjsKKworICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKKworICAg ICAgICAvLyBJbml0aWFsaXplIHRoZSBjb250ZXh0IG1lbnUgdG8gZGlzcGxh eSB0aGUgZGVidWdnaW5nIG9wdGlvbnMgd2hlbiB1c2VyIG9wZW4gdGhlIGNv bnRleHQgbWVudSBmb3IgZnVuY3Rpb25zCisgICAgICAgIHBnQnJvd3Nlci5h ZGRfbWVudXMoW3sKKyAgICAgICAgICBuYW1lOiAnZGlyZWN0X2RlYnVnZ2Vy Jywgbm9kZTogJ2Z1bmN0aW9uJywgbW9kdWxlOiB0aGlzLAorICAgICAgICAg IGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdn ZXRfZnVuY3Rpb25faW5mb3JtYXRpb24nLAorICAgICAgICAgIGNhdGVnb3J5 OiAnRGVidWdnaW5nJywgcHJpb3JpdHk6IDEwLCBsYWJlbDogJ3t7IF8oJ0Rl YnVnJykgfX0nLAorICAgICAgICAgIGRhdGE6IHtvYmplY3Q6ICdmdW5jdGlv bid9LCBpY29uOiAnZmEgZmEtYXJyb3ctY2lyY2xlLXJpZ2h0JywKKyAgICAg ICAgICBlbmFibGU6ICdjYW5fZGVidWcnCisgICAgICAgIH0seworICAgICAg ICAgIG5hbWU6ICdnbG9iYWxfZGVidWdnZXInLCBub2RlOiAnZnVuY3Rpb24n LCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAgYXBwbGllczogWydvYmplY3Qn LCAnY29udGV4dCddLCBjYWxsYmFjazogJ2NoZWNrX2Z1bmNfZGVidWdnYWJs ZScsCisgICAgICAgICAgY2F0ZWdvcnk6ICdEZWJ1Z2dpbmcnLCBwcmlvcml0 eTogMTAsIGxhYmVsOiAne3sgXygnU2V0IGJyZWFrcG9pbnQnKSB9fScsCisg ICAgICAgICAgZGF0YToge29iamVjdDogJ2Z1bmN0aW9uJ30sIGljb246ICdm YSBmYS1hcnJvdy1jaXJjbGUtcmlnaHQnLAorICAgICAgICAgIGVuYWJsZTog J2Nhbl9kZWJ1ZycKKyAgICAgICAgfSx7CisgICAgICAgICAgbmFtZTogJ3By b2NlZHVyZV9kaXJlY3RfZGVidWdnZXInLCBub2RlOiAncHJvY2VkdXJlJywg bW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0Jywg J2NvbnRleHQnXSwgY2FsbGJhY2s6ICdnZXRfZnVuY3Rpb25faW5mb3JtYXRp b24nLAorICAgICAgICAgIGNhdGVnb3J5OiAnRGVidWdnaW5nJywgcHJpb3Jp dHk6IDEwLCBsYWJlbDogJ3t7IF8oJ0RlYnVnJykgfX0nLAorICAgICAgICAg IGRhdGE6IHtvYmplY3Q6ICdwcm9jZWR1cmUnfSwgaWNvbjogJ2ZhIGZhLWFy cm93LWNpcmNsZS1yaWdodCcsCisgICAgICAgICAgZW5hYmxlOiAnY2FuX2Rl YnVnJworICAgICAgICB9LCB7CisgICAgICAgICAgbmFtZTogJ3Byb2NlZHVy ZV9pbmRpcmVjdF9kZWJ1Z2dlcicsIG5vZGU6ICdwcm9jZWR1cmUnLCBtb2R1 bGU6IHRoaXMsCisgICAgICAgICAgYXBwbGllczogWydvYmplY3QnLCAnY29u dGV4dCddLCBjYWxsYmFjazogJ2NoZWNrX2Z1bmNfZGVidWdnYWJsZScsCisg ICAgICAgICAgY2F0ZWdvcnk6ICdEZWJ1Z2dpbmcnLCBwcmlvcml0eTogMTAs IGxhYmVsOiAne3sgXygnU2V0IGJyZWFrcG9pbnQnKSB9fScsCisgICAgICAg ICAgZGF0YToge29iamVjdDogJ3Byb2NlZHVyZSd9LCBpY29uOiAnZmEgZmEt YXJyb3ctY2lyY2xlLXJpZ2h0JywKKyAgICAgICAgICBlbmFibGU6ICdjYW5f ZGVidWcnCisgICAgICAgIH1dKTsKKworICAgICAgICAvLyBDcmVhdGUgYW5k IGxvYWQgdGhlIG5ldyBmcmFtZSByZXF1aXJlZCBmb3IgZGVidWdnZXIgcGFu ZWwKKyAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBwZ0Jyb3dzZXIuRnJhbWUo eworICAgICAgICAgIG5hbWU6ICdmcm1fZGVidWdnZXInLAorICAgICAgICAg IHRpdGxlOiAne3sgXygnRGVidWdnZXInKSB9fScsCisgICAgICAgICAgd2lk dGg6IDUwMCwKKyAgICAgICAgICBpc0Nsb3NlYWJsZTogdHJ1ZSwKKyAgICAg ICAgICBpc1ByaXZhdGU6IHRydWUsCisgICAgICAgICAgdXJsOiAnYWJvdXQ6 YmxhbmsnCisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMuZnJhbWUubG9h ZChwZ0Jyb3dzZXIuZG9ja2VyKTsKKyAgICAgIH0sCisgICAgICAvLyBJdCB3 aWxsIGNoZWNrIHdlYXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGRl YnVnZ2FibGUgb3Igbm90IHdpdGggcHJlLXJlcXVpcmVkIGNvbmRpdGlvbi4K KyAgICAgIGNhbl9kZWJ1ZzogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRh dGEpIHsKKyAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0 ZW0sIGQgPSBpdGVtRGF0YTsKKyAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVy IHRyZWUgdG8gY2hlY2sgcGFyZW50IG5vZGUKKyAgICAgICAgd2hpbGUgKGkp IHsKKyAgICAgICAgICBpZiAoJ2NhdGFsb2cnID09IGQuX3R5cGUpIHsKKyAg ICAgICAgICAgIC8vQ2hlY2sgaWYgd2UgYXJlIG5vdCBjaGlsZCBvZiBjYXRh bG9nCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQor ICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDog bnVsbDsKKyAgICAgICAgICBkID0gaSA/IHQuaXRlbURhdGEoaSkgOiBudWxs OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluZCB0aGUgZnVuY3Rpb24g aXMgcmVhbGx5IGF2YWlsYWJsZSBpbiBkYXRhYmFzZQorICAgICAgICB2YXIg dHJlZSA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgIGluZm8gPSB0cmVl LnNlbGVjdGVkKCksCisgICAgICAgICAgZF8gPSBpbmZvICYmIGluZm8ubGVu Z3RoID09IDEgPyB0cmVlLml0ZW1EYXRhKGluZm8pIDogdW5kZWZpbmVkLAor ICAgICAgICAgIG5vZGUgPSBkXyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZF8uX3R5 cGVdOworCisgICAgICAgIGlmICghZF8pCisgICAgICAgICAgcmV0dXJuIGZh bHNlOworCisgICAgICAgIHZhciB0cmVlSW5mbyA9IG5vZGUuZ2V0VHJlZU5v ZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwgW2luZm9dKTsKKworICAgICAgICAv LyBNdXN0IGJlIGEgc3VwZXIgdXNlciBvciBvYmplY3Qgb3duZXIgdG8gY3Jl YXRlIGJyZWFrcG9pbnRzIG9mIGFueSBraW5kCisgICAgICAgIGlmICghKHRy ZWVJbmZvLnNlcnZlci51c2VyLmlzX3N1cGVydXNlciB8fCB0cmVlSW5mby5m dW5jdGlvbi5mdW5jb3duZXIgPT0gdHJlZUluZm8uc2VydmVyLnVzZXIubmFt ZSkpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChk Xy5sYW5ndWFnZSAhPSAncGxwZ3NxbCcgJiYgZF8ubGFuZ3VhZ2UgIT0gJ2Vk YnNwbCcpIHsKKyAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9 CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9LAorICAgICAgLyoK KyAgICAgICAgRm9yIHRoZSBkaXJlY3QgZGVidWdnaW5nLCB3ZSBuZWVkIHRv IGZldGNoIHRoZSBmdW5jdGlvbiBpbmZvcm1hdGlvbiB0byBkaXNwbGF5IGlu IHRoZSBkaWFsb2cgc28gImdlbmVyYXRlX3VybCIKKyAgICAgICAgd2lsbCBk eW5hbWljYWxseSBnZW5lcmF0ZSB0aGUgVVJMIGZyb20gdGhlIHNlcnZlcl9p ZCwgZGF0YWJhc2VfaWQsIHNjaGVtYV9pZCBhbmQgZnVuY3Rpb24gaWQuCisg ICAgICAqLworICAgICAgZ2VuZXJhdGVfdXJsOiBmdW5jdGlvbihfdXJsLCB0 cmVlSW5mbywgbm9kZSkgeworICAgICAgICB2YXIgdXJsID0gJ3tCQVNFVVJM fXtVUkx9L3tPQkpUWVBFfXtSRUZ9JywKKyAgICAgICAgICAgIHJlZiA9ICcn OworCisgICAgICAgIF8uZWFjaCgKKyAgICAgICAgICBfLnNvcnRCeSgKKyAg ICAgICAgICAgIF8udmFsdWVzKAorICAgICAgICAgICAgICBfLnBpY2sodHJl ZUluZm8sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKHYsIGssIG8pIHsKKyAg ICAgICAgICAgICAgICByZXR1cm4gKGsgIT0gJ3NlcnZlci1ncm91cCcpOwor ICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgKSwKKyAgICAgICAgICAg IGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ucHJpb3JpdHk7IH0KKyAgICAgICAg ICApLAorICAgICAgICAgIGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgICAgIHJl ZiA9IFMoJyVzLyVzJykuc3ByaW50ZihyZWYsIGVuY29kZVVSSShvLl9pZCkp LnZhbHVlKCk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgdmFyIGFyZ3Mg PSB7CisgICAgICAgICAgJ1VSTCc6IF91cmwsCisgICAgICAgICAgJ0JBU0VV UkwnOiAne3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKX19JywKKyAgICAg ICAgICAnUkVGJzogcmVmLAorICAgICAgICAgICdPQkpUWVBFJzogZW5jb2Rl VVJJKG5vZGUudHlwZSkKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4g dXJsLnJlcGxhY2UoL3soXHcrKX0vZywgZnVuY3Rpb24obWF0Y2gsIGFyZykg eworICAgICAgICAgIHJldHVybiBhcmdzW2FyZ107CisgICAgICAgIH0pOwor ICAgICAgfSwKKworICAgICAgY2hlY2tfZnVuY19kZWJ1Z2dhYmxlOiBmdW5j dGlvbihhcmdzLCBpdGVtKSB7CisgICAgICAgIHZhciBpbnB1dCA9IGFyZ3Mg fHwge30sCisgICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlLAorICAgICAg ICAgIGkgPSBpdGVtIHx8IHQuc2VsZWN0ZWQoKSwKKyAgICAgICAgICBkID0g aSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5l ZCwKKyAgICAgICAgICBub2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5f dHlwZV07CisKKyAgICAgICAgaWYgKCFkKQorICAgICAgICAgIHJldHVybjsK KworICAgICAgICB2YXIgb2JqTmFtZSA9IGQubGFiZWwsCisgICAgICAgICAg ICB0cmVlSW5mbyA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHko bm9kZSwgW2ldKSwKKyAgICAgICAgICAgIF91cmwgPSB0aGlzLmdlbmVyYXRl X3VybCgnaW5pdCcsIHRyZWVJbmZvLCBub2RlKTsKKworICAgICAgICB2YXIg c2VsZiA9IHRoaXM7CisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJs OiBfdXJsLAorICAgICAgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgICAgICBz dWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIHNlbGYuc3Rh cnRfZ2xvYmFsX2RlYnVnZ2VyKCk7CisgICAgICAgICAgfSwKKyAgICAgICAg ICBlcnJvcjogZnVuY3Rpb24oeGhyLCBzdGF0dXMsIGVycm9yKSB7CisgICAg ICAgICAgICB0cnkgeworICAgICAgICAgICAgICB2YXIgZXJyID0gJC5wYXJz ZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgIGlmIChl cnIuc3VjY2VzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgbXNnID0gUygn e3sgXygnICsgZXJyLmVycm9ybXNnICsgJyl9fScpLnZhbHVlKCk7CisgICAg ICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoInt7IF8oJyIgKyBlcnIuZXJy b3Jtc2cgKyAiJykgfX0iKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfSBjYXRjaCAoZSkge30KKyAgICAgICAgICB9CisgICAgICAgIH0pOwor ICAgICAgfSwKKworICAgICAgLy9DYWxsYmFjayBmdW5jdGlvbiB3aGVuIHVz ZXIgc3RhcnQgdGhlIGluZGlyZWN0IGRlYnVnZ2luZyAoIExpc3RlbiB0byBh bm90aGVyIHNlc3Npb24gdG8gaW52b2tlIHRoZSB0YXJnZXQgKQorICAgICAg c3RhcnRfZ2xvYmFsX2RlYnVnZ2VyOiBmdW5jdGlvbihhcmdzLCBpdGVtKSB7 CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHRhcmdldCBhbmQgY3JlYXRl IGFzeW5jaHJvbm91cyBjb25uZWN0aW9uIGFuZCB1bmlxdWUgdHJhbnNhY3Rp b24gSUQKKyAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAg ICAgICBpID0gdC5zZWxlY3RlZCgpLAorICAgICAgICAgIGQgPSBpICYmIGku bGVuZ3RoID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkLAorICAg ICAgICAgIG5vZGUgPSBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXTsK KworICAgICAgICBpZiAoIWQpCisgICAgICAgICAgcmV0dXJuOworCisgICAg ICAgIHZhciB0cmVlSW5mbyA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHku YXBwbHkobm9kZSwgW2ldKTsKKworICAgICAgICBpZiAoZC5fdHlwZSA9PSAi ZnVuY3Rpb24iKSB7CisgICAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJs X2ZvcignZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAiaW5pdGlhbGl6ZV90YXJn ZXQvIiArICJpbmRpcmVjdC8iICsgdHJlZUluZm8uc2VydmVyLl9pZCArCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIHRyZWVJbmZv LmRhdGFiYXNlLl9pZCArICIvIiArIHRyZWVJbmZvLnNjaGVtYS5faWQgKyAi LyIgKyB0cmVlSW5mby5mdW5jdGlvbi5faWQ7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSB7CisgICAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2Zv cignZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAiaW5pdGlhbGl6ZV90YXJnZXQv IiArICJpbmRpcmVjdC8iICsgdHJlZUluZm8uc2VydmVyLl9pZCArCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIHRyZWVJbmZvLmRh dGFiYXNlLl9pZCArICIvIiArIHRyZWVJbmZvLnNjaGVtYS5faWQgKyAiLyIg KyB0cmVlSW5mby5wcm9jZWR1cmUuX2lkOworICAgICAgICB9CisKKyAgICAg ICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAg ICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlv bihyZXMpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAie3sgdXJsX2Zvcign ZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAiZGlyZWN0LyIgKyByZXMuZGF0YS5k ZWJ1Z2dlclRyYW5zSWQ7CisKKyAgICAgICAgICAgIHBnQnJvd3Nlci5FdmVu dHMub25jZSgKKyAgICAgICAgICAgICAgJ3BnYWRtaW4tYnJvd3NlcjpmcmFt ZTp1cmxsb2FkZWQ6ZnJtX2RlYnVnZ2VyJywgZnVuY3Rpb24oZnJhbWUpIHsK KyAgICAgICAgICAgICAgZnJhbWUub3BlblVSTCh1cmwpOworICAgICAgICAg ICAgfSk7CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGVidWdnZXIg cGFuZWwgYXMgcGVyIHRoZSBkYXRhIHJlY2VpdmVkIGZyb20gdXNlciBpbnB1 dCBkaWFsb2cuCisgICAgICAgICAgICB2YXIgZGFzaGJvYXJkUGFuZWwgPSBw Z0Jyb3dzZXIuZG9ja2VyLmZpbmRQYW5lbHMoCisgICAgICAgICAgICAgICdk YXNoYm9hcmQnCisgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgIHBh bmVsID0gcGdCcm93c2VyLmRvY2tlci5hZGRQYW5lbCgKKyAgICAgICAgICAg ICAgICAnZnJtX2RlYnVnZ2VyJywgd2NEb2NrZXIuRE9DSy5TVEFDS0VELCBk YXNoYm9hcmRQYW5lbFswXQorICAgICAgICAgICAgICApOworCisgICAgICAg ICAgICAgIHBhbmVsLmZvY3VzKCk7CisKKyAgICAgICAgICAgICAgLy8gUGFu ZWwgQ2xvc2VkIGV2ZW50CisgICAgICAgICAgICAgIHBhbmVsLm9uKHdjRG9j a2VyLkVWRU5ULkNMT1NFRCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg ICAgdmFyIGNsb3NlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4 JykgfX0iICsgImNsb3NlLyIgKyByZXMuZGF0YS5kZWJ1Z2dlclRyYW5zSWQ7 CisgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAg IHVybDogY2xvc2VVcmwsCisgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdH RVQnCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0pOwor ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihl KSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAg ICAgICAgICdEZWJ1Z2dlciB0YXJnZXQgSW5pdGlhbGl6ZSBFcnJvcicKKyAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg ICAgICB9LAorCisgICAgICAvKgorICAgICAgICBHZXQgdGhlIGZ1bmN0aW9u IGluZm9ybWF0aW9uIGZvciB0aGUgZGlyZWN0IGRlYnVnZ2luZyB0byBkaXNw bGF5IHRoZSBmdW5jdGlvbnMgYXJndW1lbnRzIGFuZCAgb3RoZXIgaW5mb3Jt YXRpb25zCisgICAgICAgIGluIHRoZSB1c2VyIGlucHV0IGRpYWxvZworICAg ICAgKi8KKyAgICAgIGdldF9mdW5jdGlvbl9pbmZvcm1hdGlvbjogZnVuY3Rp b24oYXJncywgaXRlbSkgeworICAgICAgICB2YXIgaW5wdXQgPSBhcmdzIHx8 IHt9LAorICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAg ICBpID0gaXRlbSB8fCB0LnNlbGVjdGVkKCksCisgICAgICAgICAgZCA9IGkg JiYgaS5sZW5ndGggPT0gMSA/IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQs CisgICAgICAgICAgbm9kZSA9IGQgJiYgcGdCcm93c2VyLk5vZGVzW2QuX3R5 cGVdOworCisgICAgICAgIGlmICghZCkKKyAgICAgICAgICByZXR1cm47CisK KyAgICAgICAgdmFyIG9iak5hbWUgPSBkLmxhYmVsLAorICAgICAgICAgICAg dHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFyY2h5LmFwcGx5KG5v ZGUsIFtpXSksCisgICAgICAgICAgICBfdXJsID0gdGhpcy5nZW5lcmF0ZV91 cmwoJ2luaXQnLCB0cmVlSW5mbywgbm9kZSk7CisKKyAgICAgICAgdmFyIHNl bGYgPSB0aGlzOworICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDog X3VybCwKKyAgICAgICAgICBjYWNoZTogZmFsc2UsCisgICAgICAgICAgc3Vj Y2VzczogZnVuY3Rpb24ocmVzKSB7CisKKyAgICAgICAgICAgIC8vIE9wZW4g QWxlcnRpZnkgdGhlIGRpYWxvZyB0byB0YWtlIHRoZSBpbnB1dCBhcmd1bWVu dHMgZnJvbSB1c2VyIGlmIGZ1bmN0aW9uIGhhdmluZyBpbnB1dCBhcmd1bWVu dHMKKyAgICAgICAgICAgIGlmIChyZXMuZGF0YVswXVsncmVxdWlyZV9pbnB1 dCddKSB7CisgICAgICAgICAgICAgIGdldF9mdW5jdGlvbl9hcmd1bWVudHMo cmVzLmRhdGFbMF0sIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg ZWxzZSB7CisJICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHRhcmdldCBh bmQgY3JlYXRlIGFzeW5jaHJvbm91cyBjb25uZWN0aW9uIGFuZCB1bmlxdWUg dHJhbnNhY3Rpb24gSUQKKwkgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g YXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbnMgdGhlbiB3ZSBzaG91bGQgbm90 IGFzayBmb3IgZm9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBhbmQKKwkgICAgICAg ICAgLy8gRGlyZWN0bHkgb3BlbiB0aGUgcGFuZWwKKyAgICAgICAgICAgICAg dmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAgICAgICAgICBpID0g dC5zZWxlY3RlZCgpLAorICAgICAgICAgICAgICAgIGQgPSBpICYmIGkubGVu Z3RoID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkLAorICAgICAg ICAgICAgICAgIG5vZGUgPSBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBl XTsKKworICAgICAgICAgICAgICBpZiAoIWQpCisgICAgICAgICAgICAgICAg cmV0dXJuOworCisgICAgICAgICAgICAgIHZhciB0cmVlSW5mbyA9IG5vZGUu Z2V0VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwgW2ldKTsKKworICAg ICAgICAgICAgICBpZiAoZC5fdHlwZSA9PSAiZnVuY3Rpb24iKSB7CisgICAg ICAgICAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdn ZXIuaW5kZXgnKSB9fSIgKyAiaW5pdGlhbGl6ZV90YXJnZXQvIiArICJkaXJl Y3QvIiArIHRyZWVJbmZvLnNlcnZlci5faWQgKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiLyIgKyB0cmVlSW5mby5kYXRhYmFzZS5faWQg KyAiLyIgKyB0cmVlSW5mby5zY2hlbWEuX2lkICsgIi8iICsgdHJlZUluZm8u ZnVuY3Rpb24uX2lkOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBiYXNlVXJsID0gInt7IHVy bF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImluaXRpYWxpemVfdGFy Z2V0LyIgKyAiZGlyZWN0LyIgKyB0cmVlSW5mby5zZXJ2ZXIuX2lkICsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iICsgdHJlZUluZm8u ZGF0YWJhc2UuX2lkICsgIi8iICsgdHJlZUluZm8uc2NoZW1hLl9pZCArICIv IiArIHRyZWVJbmZvLnByb2NlZHVyZS5faWQ7CisgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgIHVy bDogYmFzZVVybCwKKyAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLAor ICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworCisg ICAgICAgICAgICAgICAgICB2YXIgdXJsID0gInt7IHVybF9mb3IoJ2RlYnVn Z2VyLmluZGV4JykgfX0iICsgImRpcmVjdC8iICsgcmVzLmRhdGEuZGVidWdn ZXJUcmFuc0lkOworCisgICAgICAgICAgICAgICAgICBwZ0Jyb3dzZXIuRXZl bnRzLm9uY2UoCisgICAgICAgICAgICAgICAgICAgICdwZ2FkbWluLWJyb3dz ZXI6ZnJhbWU6dXJsbG9hZGVkOmZybV9kZWJ1Z2dlcicsIGZ1bmN0aW9uKGZy YW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLm9wZW5VUkwodXJs KTsKKyAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg ICAvLyBDcmVhdGUgdGhlIGRlYnVnZ2VyIHBhbmVsIGFzIHBlciB0aGUgZGF0 YSByZWNlaXZlZCBmcm9tIHVzZXIgaW5wdXQgZGlhbG9nLgorICAgICAgICAg ICAgICAgICAgdmFyIGRhc2hib2FyZFBhbmVsID0gcGdCcm93c2VyLmRvY2tl ci5maW5kUGFuZWxzKAorICAgICAgICAgICAgICAgICAgICAnZGFzaGJvYXJk JworICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAg ICBwYW5lbCA9IHBnQnJvd3Nlci5kb2NrZXIuYWRkUGFuZWwoCisgICAgICAg ICAgICAgICAgICAgICAgJ2ZybV9kZWJ1Z2dlcicsIHdjRG9ja2VyLkRPQ0su U1RBQ0tFRCwgZGFzaGJvYXJkUGFuZWxbMF0KKyAgICAgICAgICAgICAgICAg ICAgICApOworCisgICAgICAgICAgICAgICAgICBwYW5lbC5mb2N1cygpOwor CisgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBQYW5lbCBDbG9zZWQg ZXZlbnQKKyAgICAgICAgICAgICAgICAgIHBhbmVsLm9uKHdjRG9ja2VyLkVW RU5ULkNMT1NFRCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg IHZhciBjbG9zZVVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcp IH19IiArICJjbG9zZS8iICsgcmVzLmRhdGEuZGVidWdnZXJUcmFuc0lkOwor ICAgICAgICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAg ICAgICAgIHVybDogY2xvc2VVcmwsCisgICAgICAgICAgICAgICAgICAgICAg bWV0aG9kOiAnR0VUJworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAg ICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICAgICAnRGVi dWdnZXIgdGFyZ2V0IEluaXRpYWxpemUgRXJyb3InLAorICAgICAgICAgICAg ICAgICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZworICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0p OworICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgZXJy b3I6IGZ1bmN0aW9uKHhociwgc3RhdHVzLCBlcnJvcikgeworICAgICAgICAg ICAgdHJ5IHsKKyAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09O KHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICBpZiAoZXJyLnN1 Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAgICAgIG1zZyA9IFMoJ3t7IF8o JyArIGVyci5lcnJvcm1zZyArICcpfX0nKS52YWx1ZSgpOworICAgICAgICAg ICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KCJ7eyBfKCciICsgZXJyLmVycm9ybXNn ICsgIicpIH19Iik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g Y2F0Y2ggKGUpIHt9CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg IH0KKyAgICB9OworCisgICAgcmV0dXJuIHBnQWRtaW4uVG9vbHMuRGVidWdn ZXI7CisgIH0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9qcy9kZWJ1Z2dlcl91aS5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9qcy9kZWJ1Z2dlcl91aS5q cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjU4YmYz Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn ZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL2pzL2RlYnVnZ2VyX3VpLmpzCkBAIC0w LDAgKzEsNjU3IEBACitkZWZpbmUoCisgIFsnanF1ZXJ5JywgJ3VuZGVyc2Nv cmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAnYWxlcnRpZnknLCAncGdhZG1p bicsCisgICAncGdhZG1pbi5icm93c2VyJywgJ2JhY2tib25lJywgJ2JhY2tn cmlkJywgJ2NvZGVtaXJyb3InLCAnYmFja2Zvcm0nLAorICAgJ3djZG9ja2Vy JywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAncGdhZG1pbi5iYWNrZ3JpZCcsCisg ICAncGdhZG1pbi5icm93c2VyLnBhbmVsJ10sCisgIGZ1bmN0aW9uKCQsIF8s IFMsIEFsZXJ0aWZ5LCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tib25lLCBC YWNrZ3JpZCwgQ29kZU1pcnJvciwgQmFja2Zvcm0gKSB7CisKKyAgLyoKKyAg ICogRnVuY3Rpb24gdXNlZCB0byByZXR1cm4gdGhlIHJlc3BlY3RpdmUgQmFj a2dyaWQgY29udHJvbCBiYXNlZCBvbiB0aGUgZGF0YSB0eXBlCisgICAqIG9m IGZ1bmN0aW9uIGlucHV0IGFyZ3VtZW50LgorICAgKi8KKyAgdmFyIGNlbGxG dW5jdGlvbiA9IGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgdmFyIHNlbGYgPSB0 aGlzLAorICAgIHZhcmlhYmxlX3R5cGUgPSBtb2RlbC5nZXQoInR5cGUiKTsK KworICAgIC8vIGlmIHZhcmlhYmxlIHR5cGUgaXMgYW4gYXJyYXkgdGhlbiB3 ZSBuZWVkIHRvIHJlbmRlciB0aGUgY3VzdG9tIGNvbnRyb2wgdG8gdGFrZSB0 aGUgaW5wdXQgZnJvbSB1c2VyLgorICAgIGlmICh2YXJpYWJsZV90eXBlLmlu ZGV4T2YoIltdIikgIT0tMSkgeworICAgICAgaWYgKHZhcmlhYmxlX3R5cGUu aW5kZXhPZigiaW50ZWdlciIpICE9IC0xKSB7CisgICAgICAgIHJldHVybiBC YWNrZ3JpZC5FeHRlbnNpb24uSW5wdXRJbnRlZ2VyQXJyYXlDZWxsOworICAg ICAgfQorICAgICAgcmV0dXJuIEJhY2tncmlkLkV4dGVuc2lvbi5JbnB1dFN0 cmluZ0FycmF5Q2VsbDsKKyAgICB9CisKKyAgICBzd2l0Y2godmFyaWFibGVf dHlwZSkgeworICAgICAgY2FzZSAiYm9vbCI6CisgICAgICAgIHJldHVybiBC YWNrZ3JpZC5Cb29sZWFuQ2VsbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgImludGVnZXIiOgorICAgICAgICAvLyBBcyB3ZSBhcmUgZ2V0dGlu ZyB0aGlzIHZhbHVlIGFzIHRleHQgZnJvbSBzcWxpdGUgZGF0YWJhc2Ugc28g d2UgbmVlZCB0byB0eXBlIGNhc3QgaXQuCisgICAgICAgIGlmIChtb2RlbC5n ZXQoJ3ZhbHVlJykgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgbW9kZWwu c2V0KHsndmFsdWUnOiBwYXJzZUludChtb2RlbC5nZXQoJ3ZhbHVlJykpfSx7 c2lsZW50OnRydWV9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBC YWNrZ3JpZC5JbnRlZ2VyQ2VsbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgInJlYWwiOgorICAgICAgICAvLyBBcyB3ZSBhcmUgZ2V0dGluZyB0 aGlzIHZhbHVlIGFzIHRleHQgZnJvbSBzcWxpdGUgZGF0YWJhc2Ugc28gd2Ug bmVlZCB0byB0eXBlIGNhc3QgaXQuCisgICAgICAgIGlmIChtb2RlbC5nZXQo J3ZhbHVlJykgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgbW9kZWwuc2V0 KHsndmFsdWUnOiBwYXJzZUZsb2F0KG1vZGVsLmdldCgndmFsdWUnKSl9ICx7 c2lsZW50OnRydWV9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQmFj a2dyaWQuTnVtYmVyQ2VsbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh c2UgInN0cmluZyI6CisgICAgICAgIHJldHVybiBCYWNrZ3JpZC5TdHJpbmdD ZWxsOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgImRhdGUiOgorICAg ICAgICByZXR1cm4gQmFja2dyaWQuRGF0ZUNlbGw7CisgICAgICAgIGJyZWFr OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEJhY2tncmlkLkNl bGw7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIC8qCisgICAq IEZ1bmN0aW9uIHVzZWQgdG8gcmV0dXJuIHRoZSByZXNwZWN0aXZlIEJhY2tn cmlkIHN0cmluZyBvciBib29sZWFuIGNvbnRyb2wgYmFzZWQgb24gdGhlIGRh dGEgdHlwZQorICAgKiBvZiBmdW5jdGlvbiBpbnB1dCBhcmd1bWVudC4KKyAg ICovCisgIHZhciBjZWxsRXhwckNvbnRyb2xGdW5jdGlvbiA9IGZ1bmN0aW9u KG1vZGVsKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgIHZhcmlhYmxl X3R5cGUgPSBtb2RlbC5nZXQoInR5cGUiKTsKKyAgICBpZiAodmFyaWFibGVf dHlwZS5pbmRleE9mKCJbXSIpICE9LTEpIHsKKyAgICAgIHJldHVybiBCYWNr Z3JpZC5TdHJpbmdDZWxsOworICAgIH0KKyAgICByZXR1cm4gQmFja2dyaWQu Qm9vbGVhbkNlbGw7CisgIH0KKworICAvKioKKyAgICogIERlYnVnZ2VySW5w dXRBcmdzTW9kZWwgdXNlZCB0byByZXByZXNlbnQgaW5wdXQgcGFyYW1ldGVy cyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGRlYnVnCisgICAqICBmb3IgZnVuY3Rp b24gb2JqZWN0cy4KKyAgICoqLworICB2YXIgRGVidWdnZXJJbnB1dEFyZ3NN b2RlbCA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAgZGVmYXVsdHM6 IHsKKyAgICAgIG5hbWU6IHVuZGVmaW5lZCwKKyAgICAgIHR5cGU6IHVuZGVm aW5lZCwKKyAgICAgIGlzX251bGw6IHVuZGVmaW5lZCwKKyAgICAgIGV4cHI6 IHVuZGVmaW5lZCwKKyAgICAgIHZhbHVlOiB1bmRlZmluZWQsCisgICAgICB1 c2VfZGVmYXVsdDogdW5kZWZpbmVkLAorICAgICAgZGVmYXVsdF92YWx1ZTog dW5kZWZpbmVkLAorICAgIH0sCisgICAgdmFsaWRhdGU6IGZ1bmN0aW9uKCkg eworICAgICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ3ZhbHVlJykp IHx8CisgICAgICAgICAgXy5pc051bGwodGhpcy5nZXQoJ3ZhbHVlJykpIHx8 CisgICAgICAgICAgU3RyaW5nKHRoaXMuZ2V0KCd2YWx1ZScpKS5yZXBsYWNl KC9eXHMrfFxzKyQvZywgJycpID09ICcnKSB7CisgICAgICAgIHZhciBtc2cg PSAne3sgXygnUGxlYXNlIGVudGVyIHNvbWUgdmFsdWUhJykgfX0nOworICAg ICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCd2YWx1ZScsIG1zZyk7CisgICAg ICAgIHJldHVybiBtc2c7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlz LmVycm9yTW9kZWwudW5zZXQoJ3ZhbHVlJyk7CisgICAgICB9CisgICAgICBy ZXR1cm4gbnVsbDsKKyAgICB9CisgIH0pOworCisgIC8vIENvbGxlY3Rpb24g d2hpY2ggY29udGFpbnMgdGhlIG1vZGVsIGZvciBmdW5jdGlvbiBpbmZvcm1h dGlvbnMuCisgIHZhciBEZWJ1Z2dlcklucHV0QXJnQ29sbGVjdGlvbnMgPSBC YWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZCh7CisgICAgbW9kZWw6IERlYnVn Z2VySW5wdXRBcmdzTW9kZWwKKyAgfSk7CisKKyAgLy8gZnVuY3Rpb24gd2ls bCBlbmFibGUvZGlzYWJsZSB0aGUgdXNlX2RlZmF1bHQgY29sdW1uIGJhc2Vk IG9uIHRoZSB2YWx1ZSByZWNlaXZlZC4KKyAgdmFyIGRpc2FibGVEZWZhdWx0 Q2VsbCA9IGZ1bmN0aW9uKGQpIHsKKyAgICBpZiAoZCBpbnN0YW5jZW9mIEJh Y2tib25lLk1vZGVsKSB7CisgICAgICAgIHJldHVybiBkLmdldCgndXNlX2Rl ZmF1bHQnKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisg IC8vIEVuYWJsZS9EaXNhYmxlIHRoZSBjb250cm9sIGJhc2VkIG9uIHRoZSBh cnJheSBkYXRhIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGlucHV0IGFyZ3VtZW50 cworICB2YXIgZGlzYWJsZUV4cHJlc3Npb25Db250cm9sID0gZnVuY3Rpb24o ZCkgeworICAgIHZhciBhcmdUeXBlID0gZC5nZXQoJ3R5cGUnKTsKKyAgICBp ZiAoZCBpbnN0YW5jZW9mIEJhY2tib25lLk1vZGVsKSB7CisgICAgICB2YXIg YXJnVHlwZSA9IGQuZ2V0KCd0eXBlJyk7CisgICAgICBpZiAoYXJnVHlwZS5p bmRleE9mKCJbXSIpICE9LTEpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9OworCisg IHZhciByZXMgPSAgZnVuY3Rpb24oYXJncywgcmVzdGFydF9kZWJ1Zykgewor ICAgIGlmICghQWxlcnRpZnkuZGVidWdnZXJJbnB1dEFyZ3NEaWFsb2cpIHsK KyAgICAgIEFsZXJ0aWZ5LmRpYWxvZygnZGVidWdnZXJJbnB1dEFyZ3NEaWFs b2cnLCBmdW5jdGlvbiBmYWN0b3J5KCkgeworICAgICAgICByZXR1cm4gewor ICAgICAgICAgIG1haW46ZnVuY3Rpb24odGl0bGUsIGRhdGEsIHJlc3RhcnRf ZGVidWcpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0KCd0aXRsZScsIHRpdGxl KTsKKyAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgICAgICAg ICB0aGlzLnJlc3RhcnRfZGVidWcgPSByZXN0YXJ0X2RlYnVnOworCisgICAg ICAgICAgICAvLyBWYXJpYWJsZXMgdG8gc3RvcmUgdGhlIGRhdGEgc2VudCBm cm9tIHNxbGl0ZSBkYXRhYmFzZQorICAgICAgICAgICAgdmFyIGZ1bmNfYXJn c19kYXRhID0gdGhpcy5mdW5jX2FyZ3NfZGF0YSA9IFtdOworCisgICAgICAg ICAgICAvLyBBcyB3ZSBhcmUgbm90IGdldHRpbmcgcGdCcm93c2VyLnRyZWUg d2hlbiB3ZSBkZWJ1ZyBhZ2FpbiBzbyB0cmVlIGluZm8gd2lsbCBiZSB1cGRh dGVkIGZyb20gdGhlIHNlcnZlciBkYXRhCisgICAgICAgICAgICBpZiAocmVz dGFydF9kZWJ1ZyA9PSAwKSB7CisgICAgICAgICAgICAgIHZhciB0ID0gcGdC cm93c2VyLnRyZWUsCisgICAgICAgICAgICAgICAgaSA9IHQuc2VsZWN0ZWQo KSwKKyAgICAgICAgICAgICAgICBkID0gaSAmJiBpLmxlbmd0aCA9PSAxID8g dC5pdGVtRGF0YShpKSA6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICBu b2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV07CisKKyAgICAg ICAgICAgICAgaWYgKCFkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor ICAgICAgICAgICAgICB2YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2Rl SGllcmFyY2h5LmFwcGx5KG5vZGUsIFtpXSk7CisKKyAgICAgICAgICAgICAg aWYgKGQuX3R5cGUgPT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAg IC8vIEdldCB0aGUgZXhpc3RpbmcgZnVuY3Rpb24gcGFyYW1ldGVycyBhdmFp bGFibGUgZnJvbSBzcWxpdGUgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICB2 YXIgX1VybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiAr ICJnZXRfYXJndW1lbnRzLyIgKyB0cmVlSW5mby5zZXJ2ZXIuX2lkICsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIiArIHRyZWVJbmZvLmRh dGFiYXNlLl9pZCArICIvIiArIHRyZWVJbmZvLnNjaGVtYS5faWQgKyAiLyIg KyB0cmVlSW5mby5mdW5jdGlvbi5faWQ7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IHRo ZSBleGlzdGluZyBmdW5jdGlvbiBwYXJhbWV0ZXJzIGF2YWlsYWJsZSBmcm9t IHNxbGl0ZSBkYXRhYmFzZQorICAgICAgICAgICAgICAgIHZhciBfVXJsID0g Int7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImdldF9hcmd1 bWVudHMvIiArIHRyZWVJbmZvLnNlcnZlci5faWQgKworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi8iICsgdHJlZUluZm8uZGF0YWJhc2UuX2lk ICsgIi8iICsgdHJlZUluZm8uc2NoZW1hLl9pZCArICIvIiArIHRyZWVJbmZv LnByb2NlZHVyZS5faWQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAvLyBHZXQg dGhlIGV4aXN0aW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYXZhaWxhYmxlIGZy b20gc3FsaXRlIGRhdGFiYXNlCisgICAgICAgICAgICAgIHZhciBfVXJsID0g Int7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImdldF9hcmd1 bWVudHMvIiArIHRoaXMuZGF0YS5zZXJ2ZXJfaWQgKworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi8iICsgdGhpcy5kYXRhLmRhdGFiYXNlX2lk ICsgIi8iICsgdGhpcy5kYXRhLnNjaGVtYV9pZCArICIvIiArIHRoaXMuZGF0 YS5mdW5jdGlvbl9pZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg JC5hamF4KHsKKyAgICAgICAgICAgICAgdXJsOiBfVXJsLAorICAgICAgICAg ICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAgICAgICAgICBhc3luYzogZmFs c2UsCisgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgewor ICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5hcmdzX2NvdW50ICE9IDAp IHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByZXMuZGF0 YS5yZXN1bHQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg Ly8gQmVsb3cgd2lsbCBmb3JtYXQgdGhlIGRhdGEgdG8gYmUgc3RvcmVkIGlu IHNxbGl0ZSBkYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICBmdW5jX2Fy Z3NfZGF0YS5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAnYXJnX2lk JzogcmVzLmRhdGEucmVzdWx0W2ldWydhcmdfaWQnXSwKKyAgICAgICAgICAg ICAgICAgICAgICAnaXNfbnVsbCc6IHJlcy5kYXRhLnJlc3VsdFtpXVsnaXNf bnVsbCddLAorICAgICAgICAgICAgICAgICAgICAgICdpc19leHByZXNzaW9u JzogcmVzLmRhdGEucmVzdWx0W2ldWydpc19leHByZXNzaW9uJ10sCisgICAg ICAgICAgICAgICAgICAgICAgJ3VzZV9kZWZhdWx0JzogcmVzLmRhdGEucmVz dWx0W2ldWyd1c2VfZGVmYXVsdCddLAorICAgICAgICAgICAgICAgICAgICAg ICd2YWx1ZSc6IHJlcy5kYXRhLnJlc3VsdFtpXVsndmFsdWUnXQorICAgICAg ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg IGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgQWxlcnRp ZnkuYWxlcnQoCisgICAgICAgICAgICAgICAgICAnRGVidWdnZXIgU2V0IGFy Z3VtZW50cyBlcnJvcicKKyAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdmFyIGFy Z25hbWUsIGFyZ3R5cGUsIGFyZ21vZGUsIGRlZmF1bHRfYXJnc19jb3VudCwg ZGVmYXVsdF9hcmdzLCBhcmdfY250OworCisgICAgICAgICAgICB2YXIgdmFs dWVfaGVhZGVyID0gQmFja2dyaWQuSGVhZGVyQ2VsbC5leHRlbmQoeworICAg ICAgICAgICAgICAgIC8vIEFkZCBmaXhlZCB3aWR0aCB0byB0aGUgInZhbHVl IiBjb2x1bW4KKyAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd3aWR0aF9w ZXJjZW50XzI1JworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHZh ciBkZWZfdmFsX2xpc3QgPSBbXSwKKyAgICAgICAgICAgIGdyaWRDb2xzID0g WworICAgICAgICAgICAgICB7bmFtZTogJ25hbWUnLCBsYWJlbDonTmFtZScs IHR5cGU6J3RleHQnLCBlZGl0YWJsZTogZmFsc2UsIGNlbGw6J3N0cmluZycg fSwKKyAgICAgICAgICAgICAge25hbWU6ICd0eXBlJywgbGFiZWw6J1R5cGUn LCB0eXBlOiAndGV4dCcsIGVkaXRhYmxlOiBmYWxzZSwgY2VsbDonc3RyaW5n JyB9LAorICAgICAgICAgICAgICB7bmFtZTogJ2lzX251bGwnLCBsYWJlbDon TnVsbD8nLCB0eXBlOiAnYm9vbGVhbicsIGNlbGw6ICdib29sZWFuJyB9LAor ICAgICAgICAgICAgICB7bmFtZTogJ2V4cHInLCBsYWJlbDonRXhwcmVzc2lv bj8nLCB0eXBlOiAnYm9vbGVhbicsIGNlbGxGdW5jdGlvbjogY2VsbEV4cHJD b250cm9sRnVuY3Rpb24sIGVkaXRhYmxlOiBkaXNhYmxlRXhwcmVzc2lvbkNv bnRyb2wgfSwKKyAgICAgICAgICAgICAge25hbWU6ICd2YWx1ZScsIGxhYmVs OidWYWx1ZScsIHR5cGU6ICd0ZXh0JywgZWRpdGFibGU6IHRydWUsIGNlbGxG dW5jdGlvbjogY2VsbEZ1bmN0aW9uLCBoZWFkZXJDZWxsOiB2YWx1ZV9oZWFk ZXIgfSwKKyAgICAgICAgICAgICAge25hbWU6ICd1c2VfZGVmYXVsdCcsIGxh YmVsOidVc2UgRGVmYXVsdD8nLCB0eXBlOiAnYm9vbGVhbicsIGNlbGw6ImJv b2xlYW4iLCBlZGl0YWJsZTogZGlzYWJsZURlZmF1bHRDZWxsIH0sCisgICAg ICAgICAgICAgIHtuYW1lOiAnZGVmYXVsdF92YWx1ZScsIGxhYmVsOidEZWZh dWx0IHZhbHVlJywgdHlwZTogJ3RleHQnLCBlZGl0YWJsZTogZmFsc2UsIGNl bGw6J3N0cmluZycgfQorICAgICAgICAgICAgXTsKKworICAgICAgICAgICAg dmFyIG15X29iaiA9IFtdOworICAgICAgICAgICAgdmFyIGZ1bmNfb2JqID0g W107CisKKyAgICAgICAgICAgIC8vIEJlbG93IHdpbGwgY2FsY3VsYXRlIHRo ZSBpbnB1dCBhcmd1bWVudCBpZCByZXF1aXJlZCB0byBzdG9yZSBpbiBzcWxp dGUgZGF0YWJhc2UKKyAgICAgICAgICAgIHZhciBpbnB1dF9hcmdfaWQgPSB0 aGlzLmlucHV0X2FyZ19pZCA9IFtdOworICAgICAgICAgICAgaWYgKHRoaXMu ZGF0YVsncHJvYXJnbW9kZXMnXSAhPSBudWxsKSB7CisgICAgICAgICAgICAg IGFyZ21vZGVfMSA9IHRoaXMuZGF0YVsncHJvYXJnbW9kZXMnXS5zcGxpdCgi LCIpOworICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgYXJnbW9kZV8x Lmxlbmd0aDsgaysrKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ21vZGVf MVtrXSA9PSAnaScgfHwgYXJnbW9kZV8xW2tdID09ICdiJykgeworICAgICAg ICAgICAgICAgICAgaW5wdXRfYXJnX2lkLnB1c2goaykKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBhcmd0eXBlXzEgPSB0aGlz LmRhdGFbJ3Byb2FyZ3R5cGVuYW1lcyddLnNwbGl0KCIsIik7CisgICAgICAg ICAgICAgIGZvciAoayA9IDA7IGsgPCBhcmd0eXBlXzEubGVuZ3RoOyBrKysp IHsKKyAgICAgICAgICAgICAgICAgIGlucHV0X2FyZ19pZC5wdXNoKGspCisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg YXJndHlwZSA9IHRoaXMuZGF0YVsncHJvYXJndHlwZW5hbWVzJ10uc3BsaXQo IiwiKTsKKworICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVsncHJvYXJnbW9k ZXMnXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXJnbW9kZSA9IHRo aXMuZGF0YVsncHJvYXJnbW9kZXMnXS5zcGxpdCgiLCIpOworICAgICAgICAg ICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5kYXRhWydwcm9uYXJnZGVm YXVsdHMnXSkgeworICAgICAgICAgICAgICBkZWZhdWx0X2FyZ3NfY291bnQg PSB0aGlzLmRhdGFbJ3Byb25hcmdkZWZhdWx0cyddOworICAgICAgICAgICAg ICBkZWZhdWx0X2FyZ3MgPSB0aGlzLmRhdGFbJ3Byb2FyZ2RlZmF1bHRzJ10u c3BsaXQoIiwiKTsKKyAgICAgICAgICAgICAgYXJnX2NudCA9IGRlZmF1bHRf YXJnc19jb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg KHRoaXMuZGF0YVsncHJvYXJnbmFtZXMnXSAhPSBudWxsKSB7CisgICAgICAg ICAgICAgIGFyZ25hbWUgPSB0aGlzLmRhdGFbJ3Byb2FyZ25hbWVzJ10uc3Bs aXQoIiwiKTsKKworICAgICAgICAgICAgICAvLyBJdCB3aWxsIGFzc2lnbiBk ZWZhdWx0IHZhbHVlcyB0byAiRGVmYXVsdCB2YWx1ZSIgY29sdW1uCisgICAg ICAgICAgICAgIGZvciAoaiA9IChhcmduYW1lLmxlbmd0aCAtIDEpO2ogPj0g MDsgai0tKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVsncHJv YXJnbW9kZXMnXSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICBpZiAo YXJnX2NudCAmJiAoYXJnbW9kZVtqXSA9PSAnaScgfHwgYXJnbW9kZVtqXSA9 PSAnYicpKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ19jbnQgPSBhcmdf Y250IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgZGVmX3ZhbF9saXN0W2pd ID0gZGVmYXVsdF9hcmdzW2FyZ19jbnRdCisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgZGVmX3ZhbF9saXN0W2pdID0gIjxObyBkZWZhdWx0IHZhbHVlPiI7Cisg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgaWYgKGFyZ19j bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJnX2NudCA9IGFyZ19jbnQg LSAxOworICAgICAgICAgICAgICAgICAgICBkZWZfdmFsX2xpc3Rbal0gPSBk ZWZhdWx0X2FyZ3NbYXJnX2NudF0KKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBk ZWZfdmFsX2xpc3Rbal0gPSAiPE5vIGRlZmF1bHQgdmFsdWU+IjsKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICBpZiAoYXJndHlwZS5sZW5ndGggIT0g MCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBhcmd0eXBlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg ICAgICBpZiAodGhpcy5kYXRhWydwcm9hcmdtb2RlcyddICE9IG51bGwpIHsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ21vZGVbaV0gPT0gJ2knIHx8 IGFyZ21vZGVbaV0gPT0gJ2InKSB7CisgICAgICAgICAgICAgICAgICAgICAg dmFyIHVzZV9kZWZfdmFsdWUgPSBmYWxzZQorICAgICAgICAgICAgICAgICAg ICAgIGlmIChkZWZfdmFsX2xpc3RbaV0gIT0gIjxObyBkZWZhdWx0IHZhbHVl PiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9kZWZfdmFsdWUg PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICBteV9vYmoucHVzaCh7ICJuYW1lIjogYXJnbmFtZVtpXSwg InR5cGUiOiBhcmd0eXBlW2ldLCAidXNlX2RlZmF1bHQiOiB1c2VfZGVmX3Zh bHVlLCAiZGVmYXVsdF92YWx1ZSI6IGRlZl92YWxfbGlzdFtpXX0pOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy IHVzZV9kZWZfdmFsdWUgPSBmYWxzZQorICAgICAgICAgICAgICAgICAgICBp ZiAoZGVmX3ZhbF9saXN0W2ldICE9ICI8Tm8gZGVmYXVsdCB2YWx1ZT4iKSB7 CisgICAgICAgICAgICAgICAgICAgICAgdXNlX2RlZl92YWx1ZSA9IHRydWU7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg bXlfb2JqLnB1c2goeyAibmFtZSI6IGFyZ25hbWVbaV0sICJ0eXBlIjogYXJn dHlwZVtpXSwgInVzZV9kZWZhdWx0IjogdXNlX2RlZl92YWx1ZSwgImRlZmF1 bHRfdmFsdWUiOiBkZWZfdmFsX2xpc3RbaV19KTsKKyAgICAgICAgICAgICAg ICAgIH0KKworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgLy8gTmVlZCB0byB1cGRhdGUgdGhlIGZ1bmNf b2JqIHZhcmlhYmxlIGZyb20gc3FsaXRlIGRhdGFiYXNlIGlmIGF2YWlsYWJs ZQorICAgICAgICAgICAgICAvLyBUT0RPOiBOZWVkIHRvIGNoZWNrLCBob3cg dG8gdXBkYXRlIHRoZSB2YWx1ZSBpbiBBcnJheSBmaWVsZHMuLi4uCisgICAg ICAgICAgICAgIGlmIChmdW5jX2FyZ3NfZGF0YS5sZW5ndGggIT0gMCkgewor ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmdW5jX2FyZ3NfZGF0 YS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgdmFyIGluZGV4 ID0gZnVuY19hcmdzX2RhdGFbaV1bJ2FyZ19pZCddOworICAgICAgICAgICAg ICAgICAgZnVuY19vYmoucHVzaCh7ICJuYW1lIjogYXJnbmFtZVtpbmRleF0s ICJ0eXBlIjogYXJndHlwZVtpbmRleF0sICJpc19udWxsIjogZnVuY19hcmdz X2RhdGFbaV1bJ2lzX251bGwnXSA/IHRydWU6IGZhbHNlLCAiZXhwciI6IGZ1 bmNfYXJnc19kYXRhW2ldWydpc19leHByZXNzaW9uJ10/IHRydWU6IGZhbHNl LCAidmFsdWUiOiBmdW5jX2FyZ3NfZGF0YVtpXVsndmFsdWUnXSwgInVzZV9k ZWZhdWx0IjogZnVuY19hcmdzX2RhdGFbaV1bJ3VzZV9kZWZhdWx0J10/IHRy dWU6IGZhbHNlLCAiZGVmYXVsdF92YWx1ZSI6IGRlZl92YWxfbGlzdFtpbmRl eF19KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg ICAvKgorICAgICAgICAgICAgICAgR2VuZXJhdGUgdGhlIG5hbWUgcGFyYW1l dGVyIGlmIGZ1bmN0aW9uIGRvIG5vdCBoYXZlIGFyZ3VtZW50cyBuYW1lCisg ICAgICAgICAgICAgICBsaWtlIGRiZ3BhcmFtMSwgZGJncGFyYW0yIGV0Yy4K KyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgdmFyIG15YXJnbmFt ZSA9IFtdOworCisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmd0 eXBlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbXlhcmduYW1l W2ldID0gImRiZ3BhcmFtIiArIChpKzEpOworICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBhcmd1 bWVudHMKKyAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFbJ3Byb25hcmdk ZWZhdWx0cyddKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IGFyZ3R5cGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIG15 X29iai5wdXNoKHsgIm5hbWUiOiBteWFyZ25hbWVbaV0sICJ0eXBlIjogYXJn dHlwZVtpXSwgInVzZV9kZWZhdWx0IjogZmFsc2UsICJkZWZhdWx0X3ZhbHVl IjogIjxObyBkZWZhdWx0IHZhbHVlPiJ9KTsKKyAgICAgICAgICAgICAgICAg IGRlZl92YWxfbGlzdFtpXSA9ICI8Tm8gZGVmYXVsdCB2YWx1ZT4iOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkZWZh dWx0IGFyZ3VtZW50cworICAgICAgICAgICAgICAgIC8vQmVsb3cgbG9naWMg d2lsbCBhc3NpZ24gZGVmYXVsdCB2YWx1ZXMgdG8gIkRlZmF1bHQgdmFsdWUi IGNvbHVtbgorICAgICAgICAgICAgICAgIGZvciAoaiA9IChteWFyZ25hbWUu bGVuZ3RoIC0gMSk7aiA+PSAwOyBqLS0pIHsKKyAgICAgICAgICAgICAgICAg IGlmICh0aGlzLmRhdGFbJ3Byb2FyZ21vZGVzJ10gPT0gbnVsbCkgeworICAg ICAgICAgICAgICAgICAgICBpZiAoYXJnX2NudCkgeworICAgICAgICAgICAg ICAgICAgICAgIGFyZ19jbnQgPSBhcmdfY250IC0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICBkZWZfdmFsX2xpc3Rbal0gPSBkZWZhdWx0X2FyZ3NbYXJn X2NudF0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZfdmFsX2xp c3Rbal0gPSAiPE5vIGRlZmF1bHQgdmFsdWU+IjsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdfY250ICYm IChhcmdtb2RlW2pdID09ICdpJyB8fCBhcmdtb2RlW2pdID09ICdiJykpIHsK KyAgICAgICAgICAgICAgICAgICAgICBhcmdfY250ID0gYXJnX2NudCAtIDE7 CisgICAgICAgICAgICAgICAgICAgICAgZGVmX3ZhbF9saXN0W2pdID0gZGVm YXVsdF9hcmdzW2FyZ19jbnRdCisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg ICAgZGVmX3ZhbF9saXN0W2pdID0gIjxObyBkZWZhdWx0IHZhbHVlPiI7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgYXJndHlwZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg ICAgaWYgKHRoaXMuZGF0YVsncHJvYXJnbW9kZXMnXSA9PSBudWxsKSB7Cisg ICAgICAgICAgICAgICAgICAgIHZhciB1c2VfZGVmX3ZhbHVlID0gZmFsc2UK KyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZl92YWxfbGlzdFtpXSAhPSAi PE5vIGRlZmF1bHQgdmFsdWU+IikgeworICAgICAgICAgICAgICAgICAgICAg IHVzZV9kZWZfdmFsdWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIG15X29iai5wdXNoKHsgIm5hbWUiOiBt eWFyZ25hbWVbaV0sICJ0eXBlIjogYXJndHlwZVtpXSwgInVzZV9kZWZhdWx0 IjogdXNlX2RlZl92YWx1ZSwgImRlZmF1bHRfdmFsdWUiOiBkZWZfdmFsX2xp c3RbaV19KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnbW9kZVtp XSA9PSAnaScgfHwgYXJnbW9kZVtpXSA9PSAnYicpIHsKKyAgICAgICAgICAg ICAgICAgICAgICB2YXIgdXNlX2RlZl92YWx1ZSA9IGZhbHNlCisgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRlZl92YWxfbGlzdFtpXSAhPSAiPE5vIGRl ZmF1bHQgdmFsdWU+IikgeworICAgICAgICAgICAgICAgICAgICAgICAgdXNl X2RlZl92YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgIG15X29iai5wdXNoKHsgIm5hbWUiOiBt eWFyZ25hbWVbaV0sICJ0eXBlIjogYXJndHlwZVtpXSwgInVzZV9kZWZhdWx0 IjogdXNlX2RlZl92YWx1ZSwgImRlZmF1bHRfdmFsdWUiOiBkZWZfdmFsX2xp c3RbaV19KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIHRoZSBmdW5jX29i aiB2YXJpYWJsZSBmcm9tIHNxbGl0ZSBkYXRhYmFzZSBpZiBhdmFpbGFibGUK KyAgICAgICAgICAgICAgLy8gVE9ETzogTmVlZCB0byBjaGVjaywgaG93IHRv IHVwZGF0ZSB0aGUgdmFsdWUgaW4gQXJyYXkgZmllbGRzLi4uLgorICAgICAg ICAgICAgICBpZiAoZnVuY19hcmdzX2RhdGEubGVuZ3RoICE9IDApIHsKKyAg ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnVuY19hcmdzX2RhdGEu bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9 IGZ1bmNfYXJnc19kYXRhW2ldWydhcmdfaWQnXTsKKyAgICAgICAgICAgICAg ICAgIGZ1bmNfb2JqLnB1c2goeyAibmFtZSI6IG15YXJnbmFtZVtpbmRleF0s ICJ0eXBlIjogYXJndHlwZVtpbmRleF0sICJpc19udWxsIjogZnVuY19hcmdz X2RhdGFbaV1bJ2lzX251bGwnXSA/IHRydWU6IGZhbHNlLCAiZXhwciI6IGZ1 bmNfYXJnc19kYXRhW2ldWydpc19leHByZXNzaW9uJ10/IHRydWU6IGZhbHNl LCAidmFsdWUiOiBmdW5jX2FyZ3NfZGF0YVtpXVsndmFsdWUnXSwgInVzZV9k ZWZhdWx0IjogZnVuY19hcmdzX2RhdGFbaV1bJ3VzZV9kZWZhdWx0J10/IHRy dWU6IGZhbHNlLCAiZGVmYXVsdF92YWx1ZSI6IGRlZl92YWxfbGlzdFtpbmRl eF19KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFy Z3VtZW50cyBhbHJlYWR5IGF2YWlsYWJsZSBpbiB0aGUgc3FsaXRlIGRhdGFi YXNlIHRoZW4gd2Ugc2hvdWxkIHVzZSB0aGUgZXhpc3RpbmcgYXJndW1lbnRz CisgICAgICAgICAgICBpZiAoZnVuY19hcmdzX2RhdGEubGVuZ3RoID09IDAp IHsKKyAgICAgICAgICAgICAgdmFyIGRlYnVnZ2VySW5wdXRBcmdzQ29sbCA9 IHRoaXMuZGVidWdnZXJJbnB1dEFyZ3NDb2xsID0gbmV3IERlYnVnZ2VySW5w dXRBcmdDb2xsZWN0aW9ucyhteV9vYmopOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHZhciBkZWJ1Z2dlcklu cHV0QXJnc0NvbGwgPSB0aGlzLmRlYnVnZ2VySW5wdXRBcmdzQ29sbCA9IG5l dyBEZWJ1Z2dlcklucHV0QXJnQ29sbGVjdGlvbnMoZnVuY19vYmopOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJbml0aWFsaXplIGEgbmV3 IEdyaWQgaW5zdGFuY2UKKyAgICAgICAgICAgIGlmICh0aGlzLmdyaWQpIHsK KyAgICAgICAgICAgICAgICB0aGlzLmdyaWQucmVtb3ZlKCk7CisgICAgICAg ICAgICAgICAgdGhpcy5ncmlkID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHZhciBncmlkID0gdGhpcy5ncmlkID0gbmV3IEJhY2tncmlk LkdyaWQoeworICAgICAgICAgICAgICBjb2x1bW5zOiBncmlkQ29scywKKyAg ICAgICAgICAgICAgY29sbGVjdGlvbjogZGVidWdnZXJJbnB1dEFyZ3NDb2xs LAorICAgICAgICAgICAgICBjbGFzc05hbWU6ICJiYWNrZ3JpZCB0YWJsZS1i b3JkZXJlZCIKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBncmlk LnJlbmRlcigpOworICAgICAgICAgICAgJCh0aGlzLmVsZW1lbnRzLmNvbnRl bnQpLmh0bWwoZ3JpZC5lbCk7CisgICAgICAgICAgfSwKKyAgICAgICAgICBz ZXR1cDpmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg ICAgICAgICAgIGJ1dHRvbnM6W3sgdGV4dDogIkRlYnVnIiwga2V5OiAyNywg Y2xhc3NOYW1lOiAiYnRuIGJ0bi1wcmltYXJ5IiB9LAorICAgICAgICAgICAg ICAgICAgICAgICB7IHRleHQ6ICJDYW5jZWwiLCBrZXk6IDI3LCBjbGFzc05h bWU6ICJidG4gYnRuLXByaW1hcnkiIH1dLAorICAgICAgICAgICAgICBvcHRp b25zOiB7IG1vZGFsOiAwLCByZXNpemFibGU6IHRydWUgfQorICAgICAgICAg ICAgfTsKKyAgICAgICAgICB9LAorICAgICAgICAgIC8vIENhbGxiYWNrIGZ1 bmN0aW9ucyB3aGVuIGNsaWNrIG9uIHRoZSBidXR0b25zIG9mIHRoZSBBbGVy dGlmeSBkaWFsb2dzCisgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGUp IHsKKyAgICAgICAgICAgIGlmIChlLmJ1dHRvbi50ZXh0ID09PSAiRGVidWci KSB7CisKKyAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFyZ2V0 IG9uY2UgdGhlIGRlYnVnIGJ1dHRvbiBpcyBjbGlja2VkIGFuZAorICAgICAg ICAgICAgICAvLyBjcmVhdGUgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24gYW5k IHVuaXF1ZSB0cmFuc2FjdGlvbiBJRAorICAgICAgICAgICAgICB2YXIgc2Vs ZiA9IHRoaXM7CisKKyAgICAgICAgICAgICAgLy8gSWYgdGhlIGRlYnVnZ2lu ZyBpcyBzdGFydGVkIGFnYWluIHRoZW4gdHJlZUluZm8gaXMgYWxyZWFkeSBz dG9yZWQgaW4gdGhpcy5kYXRhIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUuCisg ICAgICAgICAgICAgIGlmIChzZWxmLnJlc3RhcnRfZGVidWcgPT0gMCkgewor ICAgICAgICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCisgICAg ICAgICAgICAgICAgICBpID0gdC5zZWxlY3RlZCgpLAorICAgICAgICAgICAg ICAgICAgZCA9IGkgJiYgaS5sZW5ndGggPT0gMSA/IHQuaXRlbURhdGEoaSkg OiB1bmRlZmluZWQsCisgICAgICAgICAgICAgICAgICBub2RlID0gZCAmJiBw Z0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV07CisKKyAgICAgICAgICAgICAgICBp ZiAoIWQpCisgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg ICAgICAgICB2YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFy Y2h5LmFwcGx5KG5vZGUsIFtpXSk7CisgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICB2YXIgYXJnc192YWx1ZV9saXN0ID0gW107CisgICAgICAg ICAgICAgIHZhciBzcWxpdGVfZnVuY19hcmdzX2xpc3QgPSB0aGlzLnNxbGl0 ZV9mdW5jX2FyZ3NfbGlzdCA9IFtdOworICAgICAgICAgICAgICB2YXIgaW50 X2NvdW50ID0gMDsKKworICAgICAgICAgICAgICB0aGlzLmdyaWQuY29sbGVj dGlvbi5lYWNoKGZ1bmN0aW9uKG0pIHsKKworICAgICAgICAgICAgICAgICAg Ly8gVE9ETzogUmVtb3ZlZCB0ZW1wb3JhcnkgZm9yIHRlc3RpbmcuLi4uLgor ICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgc2V0IHRv IE5VTEwgdGhlbiB3ZSBzaG91bGQgaWdub3JlIHRoZSB2YWx1ZSBmaWVsZAor ICAgICAgICAgICAgICAgICAgaWYgKG0uZ2V0KCdpc19udWxsJykpIHsKKyAg ICAgICAgICAgICAgICAgICAgYXJnc192YWx1ZV9saXN0LnB1c2goeyAnbmFt ZSc6IG0uZ2V0KCduYW1lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAndHlwZSc6IG0uZ2V0KCd0eXBlJyksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiAnTlVM TCd9KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBkZWZh dWx0IHZhbHVlIHRvIGJlIHVzZWQgb3Igbm90CisgICAgICAgICAgICAgICAg ICAgIGlmIChtLmdldCgndXNlX2RlZmF1bHQnKSkgeworICAgICAgICAgICAg ICAgICAgICAgIGFyZ3NfdmFsdWVfbGlzdC5wdXNoKHsgJ25hbWUnOiBtLmdl dCgnbmFtZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3R5cGUnOiBtLmdldCgndHlwZScpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogbS5nZXQoJ2RlZmF1 bHRfdmFsdWUnKX0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGFy Z3NfdmFsdWVfbGlzdC5wdXNoKHsgJ25hbWUnOiBtLmdldCgnbmFtZScpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUn OiBtLmdldCgndHlwZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3ZhbHVlJzogbS5nZXQoJ3ZhbHVlJyl9KTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgICBpZiAoc2VsZi5yZXN0YXJ0X2RlYnVnID09IDApIHsK KyAgICAgICAgICAgICAgICAgICAgLy8gQmVsb3cgd2lsbCBmb3JtYXQgdGhl IGRhdGEgdG8gYmUgc3RvcmVkIGluIHNxbGl0ZSBkYXRhYmFzZQorICAgICAg ICAgICAgICAgICAgICBzcWxpdGVfZnVuY19hcmdzX2xpc3QucHVzaCh7Cisg ICAgICAgICAgICAgICAgICAgICAgJ3NlcnZlcl9pZCc6IHRyZWVJbmZvLnNl cnZlci5faWQsCisgICAgICAgICAgICAgICAgICAgICAgJ2RhdGFiYXNlX2lk JzogdHJlZUluZm8uZGF0YWJhc2UuX2lkLAorICAgICAgICAgICAgICAgICAg ICAgICdzY2hlbWFfaWQnOiB0cmVlSW5mby5zY2hlbWEuX2lkICwKKyAgICAg ICAgICAgICAgICAgICAgICAnZnVuY3Rpb25faWQnOiBkLl90eXBlID09ICJm dW5jdGlvbiIgPyB0cmVlSW5mby5mdW5jdGlvbi5faWQgOiB0cmVlSW5mby5w cm9jZWR1cmUuX2lkLAorICAgICAgICAgICAgICAgICAgICAgICdhcmdfaWQn OiBzZWxmLmlucHV0X2FyZ19pZFtpbnRfY291bnRdLAorICAgICAgICAgICAg ICAgICAgICAgICdpc19udWxsJzogbS5nZXQoJ2lzX251bGwnKSAgPyAxIDog MCwKKyAgICAgICAgICAgICAgICAgICAgICAnaXNfZXhwcmVzc2lvbic6IG0u Z2V0KCdleHByJykgPyAxIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAn dXNlX2RlZmF1bHQnOiBtLmdldCgndXNlX2RlZmF1bHQnKSA/IDEgOiAwLAor ICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IG0uZ2V0KCd2YWx1ZScp CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgIC8vIEJlbG93IHdpbGwgZm9ybWF0IHRoZSBkYXRhIHRvIGJlIHN0b3Jl ZCBpbiBzcWxpdGUgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICAgICAgc3Fs aXRlX2Z1bmNfYXJnc19saXN0LnB1c2goeworICAgICAgICAgICAgICAgICAg ICAgICdzZXJ2ZXJfaWQnOiBzZWxmLmRhdGEuc2VydmVyX2lkLAorICAgICAg ICAgICAgICAgICAgICAgICdkYXRhYmFzZV9pZCc6IHNlbGYuZGF0YS5kYXRh YmFzZV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX2lkJzog c2VsZi5kYXRhLnNjaGVtYV9pZCAsCisgICAgICAgICAgICAgICAgICAgICAg J2Z1bmN0aW9uX2lkJzogc2VsZi5kYXRhLmZ1bmN0aW9uX2lkLAorICAgICAg ICAgICAgICAgICAgICAgICdhcmdfaWQnOiBzZWxmLmlucHV0X2FyZ19pZFtp bnRfY291bnRdLAorICAgICAgICAgICAgICAgICAgICAgICdpc19udWxsJzog bS5nZXQoJ2lzX251bGwnKSAgPyAxIDogMCwKKyAgICAgICAgICAgICAgICAg ICAgICAnaXNfZXhwcmVzc2lvbic6IG0uZ2V0KCdleHByJykgPyAxIDogMCwK KyAgICAgICAgICAgICAgICAgICAgICAndXNlX2RlZmF1bHQnOiBtLmdldCgn dXNlX2RlZmF1bHQnKSA/IDEgOiAwLAorICAgICAgICAgICAgICAgICAgICAg ICd2YWx1ZSc6IG0uZ2V0KCd2YWx1ZScpCisgICAgICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg ICBpbnRfY291bnQgPSBpbnRfY291bnQgKyAxOworICAgICAgICAgICAgICB9 KTsKKworICAgICAgICAgICAgICAvLyBJZiBkZWJ1Z2dpbmcgaXMgbm90IHN0 YXJ0ZWQgYWdhaW4gdGhlbiB3ZSBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgdGFy Z2V0IG90aGVyd2lzZSBub3QKKyAgICAgICAgICAgICAgaWYgKHNlbGYucmVz dGFydF9kZWJ1ZyA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGQuX3R5 cGUgPT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgICAgdmFyIGJh c2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAi aW5pdGlhbGl6ZV90YXJnZXQvIiArICJkaXJlY3QvIiArIHRyZWVJbmZvLnNl cnZlci5faWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi LyIgKyB0cmVlSW5mby5kYXRhYmFzZS5faWQgKyAiLyIgKyB0cmVlSW5mby5z Y2hlbWEuX2lkICsgIi8iICsgdHJlZUluZm8uZnVuY3Rpb24uX2lkOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVn Z2VyLmluZGV4JykgfX0iICsgImluaXRpYWxpemVfdGFyZ2V0LyIgKyAiZGly ZWN0LyIgKyB0cmVlSW5mby5zZXJ2ZXIuX2lkICsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi8iICsgdHJlZUluZm8uZGF0YWJhc2UuX2lk ICsgIi8iICsgdHJlZUluZm8uc2NoZW1hLl9pZCArICIvIiArIHRyZWVJbmZv LnByb2NlZHVyZS5faWQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgIHVybDogYmFz ZVVybCwKKyAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAorICAg ICAgICAgICAgICAgICAgZGF0YTp7J2RhdGEnOkpTT04uc3RyaW5naWZ5KGFy Z3NfdmFsdWVfbGlzdCl9LAorICAgICAgICAgICAgICAgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVy bCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJkaXJl Y3QvIiArIHJlcy5kYXRhLmRlYnVnZ2VyVHJhbnNJZDsKKworICAgICAgICAg ICAgICAgICAgICBwZ0Jyb3dzZXIuRXZlbnRzLm9uY2UoCisgICAgICAgICAg ICAgICAgICAgICAgJ3BnYWRtaW4tYnJvd3NlcjpmcmFtZTp1cmxsb2FkZWQ6 ZnJtX2RlYnVnZ2VyJywgZnVuY3Rpb24oZnJhbWUpIHsKKyAgICAgICAgICAg ICAgICAgICAgICBmcmFtZS5vcGVuVVJMKHVybCk7CisgICAgICAgICAgICAg ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0 aGUgZGVidWdnZXIgcGFuZWwgYXMgcGVyIHRoZSBkYXRhIHJlY2VpdmVkIGZy b20gdXNlciBpbnB1dCBkaWFsb2cuCisgICAgICAgICAgICAgICAgICAgIHZh ciBkYXNoYm9hcmRQYW5lbCA9IHBnQnJvd3Nlci5kb2NrZXIuZmluZFBhbmVs cygKKyAgICAgICAgICAgICAgICAgICAgICAnZGFzaGJvYXJkJworICAgICAg ICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgcGFu ZWwgPSBwZ0Jyb3dzZXIuZG9ja2VyLmFkZFBhbmVsKAorICAgICAgICAgICAg ICAgICAgICAgICAgJ2ZybV9kZWJ1Z2dlcicsIHdjRG9ja2VyLkRPQ0suU1RB Q0tFRCwgZGFzaGJvYXJkUGFuZWxbMF0KKyAgICAgICAgICAgICAgICAgICAg ICApOworCisgICAgICAgICAgICAgICAgICAgIHBhbmVsLmZvY3VzKCk7CisK KyAgICAgICAgICAgICAgICAgICAgLy8gUGFuZWwgQ2xvc2VkIGV2ZW50Cisg ICAgICAgICAgICAgICAgICAgIHBhbmVsLm9uKHdjRG9ja2VyLkVWRU5ULkNM T1NFRCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgdmFy IGNsb3NlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0i ICsgImNsb3NlLyIgKyByZXMuZGF0YS5kZWJ1Z2dlclRyYW5zSWQ7CisgICAg ICAgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHVybDogY2xvc2VVcmwsCisgICAgICAgICAgICAgICAgICAgICAg ICBtZXRob2Q6ICdHRVQnCisgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg ICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAg IGlmIChkLl90eXBlID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAg ICAgICAgICB2YXIgX1VybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRl eCcpIH19IiArICJzZXRfYXJndW1lbnRzLyIgKyB0cmVlSW5mby5zZXJ2ZXIu X2lkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIg KyB0cmVlSW5mby5kYXRhYmFzZS5faWQgKyAiLyIgKyB0cmVlSW5mby5zY2hl bWEuX2lkICsgIi8iICsgdHJlZUluZm8uZnVuY3Rpb24uX2lkOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICAgIHZhciBfVXJsID0gInt7IHVybF9mb3Io J2RlYnVnZ2VyLmluZGV4JykgfX0iICsgInNldF9hcmd1bWVudHMvIiArIHRy ZWVJbmZvLnNlcnZlci5faWQgKworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIvIiArIHRyZWVJbmZvLmRhdGFiYXNlLl9pZCArICIvIiAr IHRyZWVJbmZvLnNjaGVtYS5faWQgKyAiLyIgKyB0cmVlSW5mby5wcm9jZWR1 cmUuX2lkOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgICAgICB1cmw6 IF9VcmwsCisgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcs CisgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7J2RhdGEnOkpTT04uc3Ry aW5naWZ5KHNxbGl0ZV9mdW5jX2FyZ3NfbGlzdCl9LAorICAgICAgICAgICAg ICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAg ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6 IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsZXJ0 aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVidWdn ZXIgU2V0IGFyZ3VtZW50cyBlcnJvcicKKyAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg ICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAg ICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAgICAgICAgICAn RGVidWdnZXIgdGFyZ2V0IEluaXRpYWxpemUgRXJyb3InLAorICAgICAgICAg ICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmVycm9ybXNnCisgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRlYnVnZ2luZyBp cyBzdGFydGVkIGFnYWluIHRoZW4gd2Ugc2hvdWxkIG9ubHkgc2V0IHRoZSBh cmd1bWVudHMgYW5kIHN0YXJ0IHRoZSBsaXN0ZW5lciBhZ2FpbgorICAgICAg ICAgICAgICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2Vy LmluZGV4JykgfX0iICsgInN0YXJ0X2xpc3RlbmVyLyIgKyBzZWxmLmRhdGEu dHJhbnNfaWQ7CisKKyAgICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAg ICAgICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgICAgICAgICAg bWV0aG9kOiAnUE9TVCcsCisgICAgICAgICAgICAgICAgICBkYXRhOnsnZGF0 YSc6SlNPTi5zdHJpbmdpZnkoYXJnc192YWx1ZV9saXN0KX0sCisgICAgICAg ICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAg ICAgICAgICAgICAgLy9UT0RPOiBBbnl0aGluZyByZXF1aXJlZCA/IC4uLi4u CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgZXJy b3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxlcnRp ZnkuYWxlcnQoCisgICAgICAgICAgICAgICAgICAgICAgJ0RlYnVnZ2VyIGxp c3RlbmVyIHN0YXJ0aW5nIGVycm9yJywKKyAgICAgICAgICAgICAgICAgICAg ICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZworICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0p OworCisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBuZXcgaW5wdXQgYXJn dW1lbnRzIGdpdmVuIGJ5IHRoZSB1c2VyIGR1cmluZyBkZWJ1Z2dpbmcKKyAg ICAgICAgICAgICAgICB2YXIgX1VybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dl ci5pbmRleCcpIH19IiArICJzZXRfYXJndW1lbnRzLyIgKyBzZWxmLmRhdGEu c2VydmVyX2lkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIv IiArIHNlbGYuZGF0YS5kYXRhYmFzZV9pZCArICIvIiArIHNlbGYuZGF0YS5z Y2hlbWFfaWQgKyAiLyIgKyBzZWxmLmRhdGEuZnVuY3Rpb25faWQ7CisKKyAg ICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgICAgdXJs OiBfVXJsLAorICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCisg ICAgICAgICAgICAgICAgICBkYXRhOnsnZGF0YSc6SlNPTi5zdHJpbmdpZnko c3FsaXRlX2Z1bmNfYXJnc19saXN0KX0sCisgICAgICAgICAgICAgICAgICBz dWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgICAgIH0s CisgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAg ICAgICAgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAg ICAgICAgICAgICAnRGVidWdnZXIgU2V0IGFyZ3VtZW50cyBlcnJvcicKKyAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGlmIChlLmJ1dHRvbi50ZXh0ID09PSAiQ2FuY2VsIikgeworICAg ICAgICAgICAgICAvL2Nsb3NlIHRoZSBkaWFsb2cuLi4KKyAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0s CisgICAgICAgICAgYnVpbGQ6ZnVuY3Rpb24oKSB7CisgICAgICAgICAgfSwK KyAgICAgICAgICBwcmVwYXJlOmZ1bmN0aW9uKCkgeworICAgICAgICAgICAg LyoKKyAgICAgICAgICAgICBJZiB3ZSBhbHJlYWR5IGhhdmUgZGF0YSBhdmFp bGFibGUgaW4gc3FsaXRlIGRhdGFiYXNlIHRoZW4gd2Ugc2hvdWxkIGVuYWJs ZSB0aGUgZGVidWcgYnV0dG9uIG90aGVyd2lzZQorICAgICAgICAgICAgIGRp c2FibGUgdGhlIGRlYnVnIGJ1dHRvbi4KKyAgICAgICAgICAgICovCisgICAg ICAgICAgICBpZiAodGhpcy5mdW5jX2FyZ3NfZGF0YS5sZW5ndGggPT0gMCkg eworICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWwuYnV0dG9uc1swXS5l bGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWwu YnV0dG9uc1swXS5lbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgTGlzdGVu IHRvIHRoZSBncmlkIGNoYW5nZSBldmVudCBzbyB0aGF0IGlmIGFueSB2YWx1 ZSBjaGFuZ2VkIGJ5IHVzZXIgdGhlbiB3ZSBjYW4gZW5hYmxlL2Rpc2FibGUg dGhlCisgICAgICAgICAgICAgZGVidWcgYnV0dG9uLgorICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIHRoaXMuZ3JpZC5saXN0ZW5Ubyh0aGlzLmRlYnVn Z2VySW5wdXRBcmdzQ29sbCwiYmFja2dyaWQ6ZWRpdGVkIiwKKyAgICAgICAg ICAgICAgKGZ1bmN0aW9uKG9iaikgeworCisgICAgICAgICAgICAgICAgcmV0 dXJuIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICB2YXIgc2Vs ZiA9IHRoaXM7CisgICAgICAgICAgICAgICAgICB2YXIgZW5hYmxlX2J0biA9 IGZhbHNlOworCisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg dGhpcy5jb2xsZWN0aW9uLmxlbmd0aDsgaSsrICkgeworCisgICAgICAgICAg ICAgICAgICAgIC8vIFRPRE86IE5lZWQgdG8gY2hlY2sgdGhlICJOVUxMIiBh bmQgIkV4cHJlc3Npb24iIGNvbHVtbiB2YWx1ZSB0byBlbmFibGUvZGlzYWJs ZSB0aGUgIkRlYnVnIiBidXR0b24KKyAgICAgICAgICAgICAgICAgICAgaWYg KHRoaXMuY29sbGVjdGlvbi5tb2RlbHNbaV0uZ2V0KCd2YWx1ZScpID09ICIi IHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb24u bW9kZWxzW2ldLmdldCgndmFsdWUnKSA9PSBudWxsIHx8CisgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb24ubW9kZWxzW2ldLmdldCgn dmFsdWUnKSA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZW5hYmxlX2J0biA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbi5tb2RlbHNbaV0uZ2V0KCd1 c2VfZGVmYXVsdCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2JqLl9faW50ZXJuYWwuYnV0dG9uc1swXS5lbGVtZW50LmRpc2FibGVkID0g ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvYmouX19pbnRlcm5hbC5idXR0b25zWzBdLmVsZW1lbnQuZGlz YWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgIGlmICghZW5hYmxlX2J0bikKKyAgICAgICAgICAgICAgICAgICAg b2JqLl9faW50ZXJuYWwuYnV0dG9uc1swXS5lbGVtZW50LmRpc2FibGVkID0g ZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICkodGhpcykKKyAgICAgICAgICAgICk7CisgICAgICAg ICAgfQorICAgICAgICB9OworICAgICAgfSk7CisgICAgfQorCisgICAgQWxl cnRpZnkuZGVidWdnZXJJbnB1dEFyZ3NEaWFsb2coJ0RlYnVnZ2VyJyxhcmdz LCByZXN0YXJ0X2RlYnVnKS5yZXNpemVUbygnNjAlJywgJzYwJScpOworCisg IH07CisKKyAgcmV0dXJuIHJlczsKK30pOwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL2pzL2Rp cmVjdC5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRl cy9kZWJ1Z2dlci9qcy9kaXJlY3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYmM4NmIwZAotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9q cy9kaXJlY3QuanMKQEAgLTAsMCArMSwxMzg4IEBACitkZWZpbmUoCisgIFsn anF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAn YWxlcnRpZnknLCAncGdhZG1pbicsJ3BnYWRtaW4uYnJvd3NlcicsCisgICAn YmFja2JvbmUnLCAnYmFja2dyaWQnLCAnY29kZW1pcnJvcicsICdiYWNrZm9y bScsJ3BnYWRtaW4udG9vbHMuZGVidWdnZXIudWknLAorICAnd2Nkb2NrZXIn LCAncGdhZG1pbi5iYWNrZm9ybScsICdwZ2FkbWluLmJhY2tncmlkJywgJ2Nv ZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lJ10sCisgIGZ1 bmN0aW9uKCQsIF8sIFMsIEFsZXJ0aWZ5LCBwZ0FkbWluLCBwZ0Jyb3dzZXIs IEJhY2tib25lLCBCYWNrZ3JpZCwgQ29kZU1pcnJvciwgQmFja2Zvcm0sIGRl YnVnX2Z1bmN0aW9uX2FnYWluKSB7CisKKyAgaWYgKHBnQWRtaW4uQnJvd3Nl ci50cmVlICE9IG51bGwpIHsKKyAgICBwZ0FkbWluID0gcGdBZG1pbiB8fCB3 aW5kb3cucGdBZG1pbiB8fCB7fTsKKyAgfQorCisgIHZhciBwZ1Rvb2xzID0g cGdBZG1pbi5Ub29scyA9IHBnQWRtaW4uVG9vbHMgfHwge307CisKKyAgaWYg KHBnVG9vbHMuRGlyZWN0RGVidWcpCisgICAgcmV0dXJuIHBnVG9vbHMuRGly ZWN0RGVidWc7CisKKyAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgKGZ1bmN0aW9u KCkge30pOworCisgIF8uZXh0ZW5kKAorICAgIGNvbnRyb2xsZXIsIEJhY2ti b25lLkV2ZW50cywgeworICAgICAgZW5hYmxlOiBmdW5jdGlvbihidG4sIGVu YWJsZSkgeworICAgICAgICAvLyB0cmlnZ2VyIHRoZSBldmVudCBhbmQgY2hh bmdlIHRoZSBidXR0b24gdmlldyB0byBlbmFibGUvZGlzYWJsZSB0aGUgYnV0 dG9ucyBmb3IgZGVidWdnaW5nCisgICAgICAgIHRoaXMudHJpZ2dlcigncGdE ZWJ1Z2dlcjpidXR0b246c3RhdGU6JyArIGJ0biwgZW5hYmxlKTsKKyAgICAg IH0sCisKKyAgICAgIC8qCisgICAgICAgIEZ1bmN0aW9uIHRvIHNldCB0aGUg YnJlYWtwb2ludCBhbmQgc2VuZCB0aGUgbGluZSBuby4gd2hpY2ggaXMgc2V0 IHRvIHNlcnZlcgorICAgICAgICB0cmFuc19pZCA6LSBVbmlxdWUgVHJhbnNh Y3Rpb24gSUQsIGxpbmVfbm8gLSBsaW5lIG5vLiB0byBzZXQgdGhlIGJyZWFr cG9pbnQsIHNldF90eXBlID0gMCAtIGNsZWFyICwgMSAtIHNldAorICAgICAg Ki8KKyAgICAgIHNldF9icmVha3BvaW50OiBmdW5jdGlvbih0cmFuc19pZCwg bGluZV9ubywgc2V0X3R5cGUpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz OworCisgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIHNldC9jbGVhciB0 aGUgYnJlYWsgcG9pbnQgYnkgdXNlcgorICAgICAgICB2YXIgYmFzZVVybCA9 ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJzZXRfYnJl YWtwb2ludC8iICsgdHJhbnNfaWQgKyAiLyIgKyBsaW5lX25vICsgIi8iICsg c2V0X3R5cGU7CisKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6 IGJhc2VVcmwsCisgICAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAg ICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlmIChy ZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgLy8gQnJlYWtwb2lu dCBoYXMgYmVlbiBzZXQgYnkgdGhlIHVzZXIKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7Cisg ICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAgJ0Rl YnVnZ2VyOiBCcmVha3BvaW50IHNldCBleGVjdXRpb24gZXJyb3InCisgICAg ICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9 LAorCisgICAgICAvLyBGdW5jdGlvbiB0byBnZXQgdGhlIGxhdGVzdCBicmVh a3BvaW50IGluZm9ybWF0aW9uIGFuZCB1cGRhdGUgdGhlIGd1dHRlcnMgb2Yg Y29kZW1pcnJvcgorICAgICAgVXBkYXRlQnJlYWtwb2ludDogZnVuY3Rpb24o dHJhbnNfaWQpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAg ICAgIHZhciBicl9saXN0ID0gc2VsZi5HZXRCcmVha3BvaW50SW5mb3JtYXRp b24odHJhbnNfaWQpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJy ZWFrIHBvaW50IHRvIGNsZWFyIHRoZW4gd2Ugc2hvdWxkIHJldHVybiBmcm9t IGhlcmUuCisgICAgICAgIGlmICgoYnJfbGlzdC5sZW5ndGggPT0gMSkgJiYg KGJyX2xpc3RbMF0ubGluZW51bWJlciA9PSAtMSkpCisgICAgICAgICAgcmV0 dXJuOworCisgICAgICAgIHZhciBicmVha3BvaW50X2xpc3QgPSBuZXcgQXJy YXkoKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnJfbGlzdC5sZW5n dGg7IGkrKykgeworICAgICAgICAgIGlmIChicl9saXN0W2ldLmxpbmVudW1i ZXIgIT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrcG9pbnRfbGlzdC5wdXNo KGJyX2xpc3RbaV0ubGluZW51bWJlcikKKyAgICAgICAgICB9CisgICAgICAg IH0KKworICAgICAgICBmb3IgKGkgPSAwO2k8IGJyZWFrcG9pbnRfbGlzdC5s ZW5ndGg7aSsrKSB7CisgICAgICAgICAgdmFyIGluZm8gPSBwZ1Rvb2xzLkRp cmVjdERlYnVnLmVkaXRvci5saW5lSW5mbygoYnJlYWtwb2ludF9saXN0W2ld IC0gMSkpOworCisgICAgICAgICAgaWYgKGluZm8uZ3V0dGVyTWFya2VycyAh PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVi dWcuZWRpdG9yLnNldEd1dHRlck1hcmtlcigoYnJlYWtwb2ludF9saXN0W2ld IC0gMSksICJicmVha3BvaW50cyIsIG51bGwpOworICAgICAgICAgIH0KKyAg ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVi dWcuZWRpdG9yLnNldEd1dHRlck1hcmtlcigoYnJlYWtwb2ludF9saXN0W2ld IC0gMSksICJicmVha3BvaW50cyIsIGZ1bmN0aW9uKCkgeworICAgICAgICAg ICAgdmFyIG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp OworICAgICAgICAgICAgbWFya2VyLnN0eWxlLmNvbG9yID0gIiM4MjIiOwor ICAgICAgICAgICAgbWFya2VyLmlubmVySFRNTCA9ICLil48iOworICAgICAg ICAgICAgcmV0dXJuIG1hcmtlcjsKKyAgICAgICAgICAgIH0oKSk7CisgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorCisgICAgICAvLyBGdW5j dGlvbiB0byBnZXQgdGhlIGJyZWFrcG9pbnQgaW5mb3JtYXRpb24gZnJvbSB0 aGUgc2VydmVyCisgICAgICBHZXRCcmVha3BvaW50SW5mb3JtYXRpb246IGZ1 bmN0aW9uKHRyYW5zX2lkKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsK KyAgICAgICAgdmFyIHJlc3VsdCA9ICcnOworCisgICAgICAgIC8vIE1ha2Ug YWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0YWJhc2UgbWVzc2FnZQorICAg ICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRl eCcpIH19IiArICJleGVjdXRlX3F1ZXJ5LyIgKyB0cmFuc19pZCArICIvIiAr ICJnZXRfYnJlYWtwb2ludHMiOworCisgICAgICAgICQuYWpheCh7CisgICAg ICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1ldGhvZDogJ0dFVCcs CisgICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAgIHN1Y2Nlc3M6 IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0 YXR1cyA9PT0gJ1N1Y2Nlc3MnKSB7CisgICAgICAgICAgICAgIHJlc3VsdCA9 IHJlcy5kYXRhLnJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGVsc2UgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ05vdENvbm5lY3RlZCcp IHsKKyAgICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAg ICAgICAgJ0RlYnVnZ2VyOiBFcnJvciBmZXRjaGluZyBicmVha3BvaW50IGlu Zm9ybWF0aW9uJworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQor ICAgICAgICAgIH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsK KyAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAn RGVidWdnZXI6IEVycm9yIGZldGNoaW5nIGJyZWFrcG9pbnQgaW5mb3JtYXRp b24nCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfSk7 CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0sCisKKyAgICAg IC8vIEZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBleGVjdXRlciBhbmQgZXhlY3V0 ZSB0aGUgdXNlciByZXF1ZXN0ZWQgb3B0aW9uIGZvciBkZWJ1Z2dpbmcKKyAg ICAgIHN0YXJ0X2V4ZWN1dGlvbjogZnVuY3Rpb24odHJhbnNfaWQsIHBvcnRf bnVtKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgLy8g TWFrZSBhamF4IGNhbGwgdG8gbGlzdGVuIHRoZSBkYXRhYmFzZSBtZXNzYWdl CisgICAgICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2Vy LmluZGV4JykgfX0iICsgInN0YXJ0X2V4ZWN1dGlvbi8iICsgdHJhbnNfaWQg KyAiLyIgKyBwb3J0X251bTsKKworICAgICAgICAkLmFqYXgoeworICAgICAg ICAgIHVybDogYmFzZVVybCwKKyAgICAgICAgICBtZXRob2Q6ICdHRVQnLAor ICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAg ICAgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ1N1Y2Nlc3MnKSB7CisgICAg ICAgICAgICAgIC8vIElmIHN0YXR1cyBpcyBTdWNjZXNzIHRoZW4gZmluZCB0 aGUgcG9ydCBudW1iZXIgdG8gYXR0YWNoIHRoZSBleGVjdXRlci4KKyAgICAg ICAgICAgICAgc2VsZi5leGVjdXRlX3F1ZXJ5KHRyYW5zX2lkKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5kYXRhLnN0YXR1 cyA9PT0gJ05vdENvbm5lY3RlZCcpIHsKKyAgICAgICAgICAgICAgQWxlcnRp ZnkuYWxlcnQoCisgICAgICAgICAgICAgICAgJ0RlYnVnZ2VyOiBTdGFydCBl eGVjdXRpb24gZXJyb3InCisgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24o ZSkgeworICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAg ICAgICdEZWJ1Z2dlcjogU3RhcnQgZXhlY3V0aW9uIGVycm9yJworICAgICAg ICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfSwK KworICAgICAgLy8gRXhlY3V0ZSB0aGUgcXVlcnkgYW5kIGdldCB0aGUgZmly c3QgZnVuY3Rpb25zIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlcnZl cgorICAgICAgZXhlY3V0ZV9xdWVyeTogZnVuY3Rpb24odHJhbnNfaWQpIHsK KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAvLyBNYWtlIGFq YXggY2FsbCB0byBsaXN0ZW4gdGhlIGRhdGFiYXNlIG1lc3NhZ2UKKyAgICAg ICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgn KSB9fSIgKyAiZXhlY3V0ZV9xdWVyeS8iICsgdHJhbnNfaWQgKyAiLyIgKyAi d2FpdF9mb3JfYnJlYWtwb2ludCI7CisKKyAgICAgICAgJC5hamF4KHsKKyAg ICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAgICAgbWV0aG9kOiAnR0VU JywKKyAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAg ICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdTdWNjZXNzJykgewor ICAgICAgICAgICAgICAvLyBzZXQgdGhlIHJldHVybiBjb2RlIHRvIHRoZSBj b2RlIGVkaXRvciB0ZXh0IGFyZWEKKyAgICAgICAgICAgICAgaWYgKHJlcy5k YXRhLnJlc3VsdFswXS5zcmMgIT0gbnVsbCAmJiByZXMuZGF0YS5yZXN1bHRb MF0ubGluZW51bWJlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcGdU b29scy5EaXJlY3REZWJ1Zy5lZGl0b3Iuc2V0VmFsdWUocmVzLmRhdGEucmVz dWx0WzBdLnNyYyk7CisgICAgICAgICAgICAgICAgYWN0aXZlX2xpbmVfbm8g PSBzZWxmLmFjdGl2ZV9saW5lX25vID0gKHJlcy5kYXRhLnJlc3VsdFswXS5s aW5lbnVtYmVyIC0gMik7CisgICAgICAgICAgICAgICAgcGdUb29scy5EaXJl Y3REZWJ1Zy5lZGl0b3IuYWRkTGluZUNsYXNzKChyZXMuZGF0YS5yZXN1bHRb MF0ubGluZW51bWJlciAtIDIpLCAnd3JhcCcsICdDb2RlTWlycm9yLWFjdGl2 ZWxpbmUtYmFja2dyb3VuZCcpOworICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgLy8gQ2FsbCBmdW5jdGlvbiB0byBjcmVhdGUgYW5kIHVwZGF0 ZSBsb2NhbCB2YXJpYWJsZXMgLi4uLgorICAgICAgICAgICAgICBzZWxmLkdl dExvY2FsVmFyaWFibGVzKHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgc2Vs Zi5HZXRTdGFja0luZm9ybWF0aW9uKHRyYW5zX2lkKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0g J05vdENvbm5lY3RlZCcpIHsKKyAgICAgICAgICAgICAgQWxlcnRpZnkuYWxl cnQoCisgICAgICAgICAgICAgICAgJ0RlYnVnZ2VyOiBFeGVjdXRpb24gZXJy b3InCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAg ICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1Z2dl cjogRXhlY3V0aW9uIGVycm9yJworICAgICAgICAgICAgKTsKKyAgICAgICAg ICB9CisgICAgICAgIH0pOworICAgICAgfSwKKworICAgICAgLy8gR2V0IHRo ZSBsb2NhbCB2YXJpYWJsZSBpbmZvcm1hdGlvbiBvZiB0aGUgZnVuY3Rpb25z IGFuZCB1cGRhdGUgdGhlIGdyaWQKKyAgICAgIEdldExvY2FsVmFyaWFibGVz OiBmdW5jdGlvbih0cmFuc19pZCkgeworICAgICAgICB2YXIgc2VsZiA9IHRo aXM7CisKKyAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gbGlzdGVuIHRo ZSBkYXRhYmFzZSBtZXNzYWdlCisgICAgICAgIHZhciBiYXNlVXJsID0gInt7 IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgImV4ZWN1dGVfcXVl cnkvIiArIHRyYW5zX2lkICsgIi8iICsgImdldF92YXJpYWJsZXMiOworCisg ICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAg ICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2VzczogZnVu Y3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVz ID09PSAnU3VjY2VzcycpIHsKKyAgICAgICAgICAgICAgLy8gQ2FsbCBmdW5j dGlvbiB0byBjcmVhdGUgYW5kIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMKKyAg ICAgICAgICAgICAgc2VsZi5BZGRMb2NhbFZhcmlhYmxlcyhyZXMuZGF0YS5y ZXN1bHQpOworICAgICAgICAgICAgICBzZWxmLkFkZFBhcmFtZXRlcnMocmVz LmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs c2UgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ05vdENvbm5lY3RlZCcpIHsK KyAgICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAg ICAgJ0RlYnVnZ2VyOiBFcnJvciBmZXRjaGluZyB2YXJpYWJsZXMgaW5mb3Jt YXRpb24nCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAg ICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1 Z2dlcjogRXJyb3IgZmV0Y2hpbmcgdmFyaWFibGVzIGluZm9ybWF0aW9uJwor ICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAg ICAgfSwKKworICAgICAgLy8gR2V0IHRoZSBzdGFjayBpbmZvcm1hdGlvbiBv ZiB0aGUgZnVuY3Rpb25zIGFuZCB1cGRhdGUgdGhlIGdyaWQKKyAgICAgIEdl dFN0YWNrSW5mb3JtYXRpb246IGZ1bmN0aW9uKHRyYW5zX2lkKSB7CisgICAg ICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBNYWtlIGFqYXgg Y2FsbCB0byBsaXN0ZW4gdGhlIGRhdGFiYXNlIG1lc3NhZ2UKKyAgICAgICAg dmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgnKSB9 fSIgKyAiZXhlY3V0ZV9xdWVyeS8iICsgdHJhbnNfaWQgKyAiLyIgKyAiZ2V0 X3N0YWNrX2luZm8iOworCisgICAgICAgICQuYWpheCh7CisgICAgICAgICAg dXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAg ICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBp ZiAocmVzLmRhdGEuc3RhdHVzID09PSAnU3VjY2VzcycpIHsKKyAgICAgICAg ICAgICAgLy8gQ2FsbCBmdW5jdGlvbiB0byBjcmVhdGUgYW5kIHVwZGF0ZSBz dGFjayBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICBzZWxmLkFkZFN0YWNr SW5mb3JtYXRpb24ocmVzLmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ05v dENvbm5lY3RlZCcpIHsKKyAgICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQo CisgICAgICAgICAgICAgICAgJ0RlYnVnZ2VyOiBFcnJvciBmZXRjaGluZyBz dGFjayBpbmZvcm1hdGlvbicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlv bihlKSB7CisgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAg ICAgICAgJ0RlYnVnZ2VyOiBFcnJvciBmZXRjaGluZyBzdGFjayBpbmZvcm1h dGlvbicKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9 KTsKKyAgICAgIH0sCisKKyAgICAgIC8qCisgICAgICAgIHBvbGwgdGhlIGFj dHVhbCByZXN1bHQgYWZ0ZXIgdXNlciBoYXMgZXhlY3V0ZWQgdGhlICJjb250 aW51ZSIsICJzdGVwLWludG8iLCAic3RlcC1vdmVyIiBhY3Rpb25zIGFuZCBn ZXQgdGhlCisgICAgICAgIG90aGVyIHVwZGF0ZWQgaW5mb3JtYXRpb24gZnJv bSB0aGUgc2VydmVyLgorICAgICAgKi8KKyAgICAgIHBvbGxfcmVzdWx0OiBm dW5jdGlvbih0cmFuc19pZCkgeworICAgICAgdmFyIHNlbGYgPSB0aGlzOwor ICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gbGlzdGVuIHRoZSBkYXRhYmFz ZSBtZXNzYWdlCisgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdk ZWJ1Z2dlci5pbmRleCcpIH19IiArICJwb2xsX3Jlc3VsdC8iICsgdHJhbnNf aWQ7CisKKworICAgICAgc2V0VGltZW91dCgKKyAgICAgICAgZnVuY3Rpb24o KSB7CisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJs LAorICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2Vz czogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVzLmRhdGEu c3RhdHVzID09PSAnU3VjY2VzcycpIHsKKyAgICAgICAgICAgICAgLy8gSWYg bm8gcmVzdWx0IHRoZW4gcG9sbCBhZ2FpbiB0byB3YWl0IGZvciByZXN1bHRz LgorICAgICAgICAgICAgICBpZiAocmVzLmRhdGEucmVzdWx0ID09IG51bGwg fHwgcmVzLmRhdGEucmVzdWx0Lmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAg ICAgICAgLy8gTkVFTDogVEhJUyBJUyBDT05ESVRJT04gSVMgQURERUQKKyAg ICAgICAgICAgICAgICBzZWxmLnBvbGxfcmVzdWx0KHRyYW5zX2lkKTsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg ICAgICAgICBpZiAocmVzLmRhdGEucmVzdWx0WzBdLnNyYyAhPSB1bmRlZmlu ZWQgfHwgcmVzLmRhdGEucmVzdWx0WzBdLnNyYyAhPSBudWxsKSB7CisgICAg ICAgICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5kb2NrZXIuZmluaXNo TG9hZGluZyg1MDApOworICAgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0 RGVidWcuZWRpdG9yLnNldFZhbHVlKHJlcy5kYXRhLnJlc3VsdFswXS5zcmMp OworICAgICAgICAgICAgICAgIHNlbGYuVXBkYXRlQnJlYWtwb2ludCh0cmFu c19pZCk7CisgICAgICAgICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5l ZGl0b3IucmVtb3ZlTGluZUNsYXNzKHNlbGYuYWN0aXZlX2xpbmVfbm8sICd3 cmFwJywgJ0NvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5kJyk7Cisg ICAgICAgICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3IuYWRk TGluZUNsYXNzKChyZXMuZGF0YS5yZXN1bHRbMF0ubGluZW51bWJlciAtIDIp LCAnd3JhcCcsICdDb2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCcp OworICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2xpbmVfbm8gPSAocmVz LmRhdGEucmVzdWx0WzBdLmxpbmVudW1iZXIgLSAyKTsKKworICAgICAgICAg ICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhY2ssIGxvY2FsIHZhcmlhYmxlcyBh bmQgcGFyYW1ldGVycyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIHNl bGYuR2V0U3RhY2tJbmZvcm1hdGlvbih0cmFuc19pZCk7CisgICAgICAgICAg ICAgICAgc2VsZi5HZXRMb2NhbFZhcmlhYmxlcyh0cmFuc19pZCk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFwZ1Rv b2xzLkRpcmVjdERlYnVnLmRlYnVnX3R5cGUgJiYgIXBnVG9vbHMuRGlyZWN0 RGVidWcuZmlyc3RfdGltZV9pbmRpcmVjdF9kZWJ1ZykgeworICAgICAgICAg ICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5kb2NrZXIuZmluaXNoTG9h ZGluZyg1MDApOworICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuYWN0aXZl X2xpbmVfbm8gIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAg IHBnVG9vbHMuRGlyZWN0RGVidWcuZWRpdG9yLnJlbW92ZUxpbmVDbGFzcyhz ZWxmLmFjdGl2ZV9saW5lX25vLCAnd3JhcCcsICdDb2RlTWlycm9yLWFjdGl2 ZWxpbmUtYmFja2dyb3VuZCcpOworICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgc2VsZi5jbGVhcl9hbGxfYnJlYWtwb2ludCh0cmFu c19pZCk7CisgICAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGVfcXVlcnko dHJhbnNfaWQpOworICAgICAgICAgICAgICAgICAgcGdUb29scy5EaXJlY3RE ZWJ1Zy5maXJzdF90aW1lX2luZGlyZWN0X2RlYnVnID0gdHJ1ZTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmRvY2tlci5maW5pc2hM b2FkaW5nKDUwMCk7CisgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc291 cmNlIGlzIHJlYWxseSBjaGFuZ2VkIHRoZW4gb25seSB1cGRhdGUgdGhlIGJy ZWFrcG9pbnQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgIGlmIChy ZXMuZGF0YS5yZXN1bHRbMF0uc3JjICE9IHBnVG9vbHMuRGlyZWN0RGVidWcu ZWRpdG9yLmdldFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGdU b29scy5EaXJlY3REZWJ1Zy5lZGl0b3Iuc2V0VmFsdWUocmVzLmRhdGEucmVz dWx0WzBdLnNyYyk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuVXBkYXRl QnJlYWtwb2ludCh0cmFuc19pZCk7CisgICAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZWRpdG9y LnJlbW92ZUxpbmVDbGFzcyhzZWxmLmFjdGl2ZV9saW5lX25vLCAnd3JhcCcs ICdDb2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCcpOworICAgICAg ICAgICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3IuYWRkTGlu ZUNsYXNzKChyZXMuZGF0YS5yZXN1bHRbMF0ubGluZW51bWJlciAtIDIpLCAn d3JhcCcsICdDb2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCcpOwor ICAgICAgICAgICAgICAgICAgc2VsZi5hY3RpdmVfbGluZV9ubyA9IChyZXMu ZGF0YS5yZXN1bHRbMF0ubGluZW51bWJlciAtIDIpOworCisgICAgICAgICAg ICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YWNrLCBsb2NhbCB2YXJpYWJsZXMg YW5kIHBhcmFtZXRlcnMgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAg IHNlbGYuR2V0U3RhY2tJbmZvcm1hdGlvbih0cmFuc19pZCk7CisgICAgICAg ICAgICAgICAgICBzZWxmLkdldExvY2FsVmFyaWFibGVzKHRyYW5zX2lkKTsK KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBFbmFi bGUgYWxsIHRoZSBidXR0b25zIGFzIHdlIGdvdCB0aGUgcmVzdWx0cworICAg ICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdzdG9wJywgdHJ1ZSk7CisgICAg ICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3N0ZXBfb3ZlcicsIHRydWUpOwor ICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdzdGVwX2ludG8nLCB0cnVl KTsKKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnY29udGludWUnLCB0 cnVlKTsKKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgndG9nZ2xlX2Jy ZWFrcG9pbnQnLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJs ZSgnY2xlYXJfYWxsX2JyZWFrcG9pbnRzJywgdHJ1ZSk7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJl cy5kYXRhLnN0YXR1cyA9PT0gJ0J1c3knKSB7CisgICAgICAgICAgICAgIC8v IElmIHN0YXR1cyBpcyBCdXN5IHRoZW4gcG9sbCB0aGUgcmVzdWx0IGJ5IHJl Y3Vyc2l2ZSBjYWxsIHRvIHRoZSBwb2xsIGZ1bmN0aW9uCisgICAgICAgICAg ICAgIGlmICghcGdUb29scy5EaXJlY3REZWJ1Zy5kZWJ1Z190eXBlKSB7Cisg ICAgICAgICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5kb2NrZXIuc3Rh cnRMb2FkaW5nKCd7eyBfKCdXYWl0aW5nIGZvciBhbm90aGVyIHNlc3Npb24g dG8gaW52b2tlIHRoZSB0YXJnZXQuLi4nKSB9fScpOworICAgICAgICAgICAg ICAgIC8vIEFzIHdlIGFyZSB3YWl0aW5nIGZvciBhbm90aGVyIHNlc3Npb24g dG8gaW52b2tlIHRoZSB0YXJnZXQgc28gZGlzYWJsZSBhbGwgdGhlIGJ1dHRv bnMKKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RvcCcsIGZhbHNl KTsKKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RlcF9vdmVyJywg ZmFsc2UpOworICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdzdGVwX2lu dG8nLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ2Nv bnRpbnVlJywgZmFsc2UpOworICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxl KCd0b2dnbGVfYnJlYWtwb2ludCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAg ICBzZWxmLmVuYWJsZSgnY2xlYXJfYWxsX2JyZWFrcG9pbnRzJywgZmFsc2Up OworICAgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZmlyc3Rf dGltZV9pbmRpcmVjdF9kZWJ1ZyA9IGZhbHNlOworICAgICAgICAgICAgICAg IHNlbGYucG9sbF9yZXN1bHQodHJhbnNfaWQpOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vVE9E TzogTkVFTCBBRERFRAorICAgICAgICAgICAgICAgIHNlbGYucG9sbF9yZXN1 bHQodHJhbnNfaWQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdO b3RDb25uZWN0ZWQnKSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0 KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dlciBQb2xsIFJlc3VsdCBFcnJv cicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAg ICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAgJ0RlYnVnZ2Vy IFBvbGwgUmVzdWx0IEVycm9yJworICAgICAgICAgICAgKTsKKyAgICAgICAg ICB9CisgICAgICAgIH0pOworICAgICAgfSwgMTAwMCApOworCisgICAgfSwK KworICAgIC8qCisgICAgICBGb3IgdGhlIGRpcmVjdCBkZWJ1Z2dpbmcsIHdl IG5lZWQgdG8gY2hlY2sgd2VhdGhlciB0aGUgZnVuY3Rpb25zIGV4ZWN1dGlv biBpcyBjb21wbGV0ZWQgb3Igbm90LiBBZnRlciBjb21wbGV0aW9uCisgICAg ICBvZiB0aGUgZGVidWdnaW5nLCB3ZSB3aWxsIHN0b3AgcG9sbGluZyB0aGUg cmVzdWx0ICB1bnRpbCBuZXcgZXhlY3V0aW9uIHN0YXJ0cy4KKyAgICAqLwor ICAgIHBvbGxfZW5kX2V4ZWN1dGlvbl9yZXN1bHQ6IGZ1bmN0aW9uKHRyYW5z X2lkKSB7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAvL3JldHVy bjsKKyAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0 YWJhc2UgbWVzc2FnZQorICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2Zv cignZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAicG9sbF9lbmRfZXhlY3V0aW9u X3Jlc3VsdC8iICsgdHJhbnNfaWQ7CisKKyAgICAgIHNldFRpbWVvdXQoCisg ICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICQuYWpheCh7CisgICAg ICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1ldGhvZDogJ0dFVCcs CisgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAg ICAgICBpZiAocmVzLmRhdGEuc3RhdHVzID09PSAnU3VjY2VzcycpIHsKKyAg ICAgICAgICAgICAgaWYocmVzLmRhdGEucmVzdWx0ID09IHVuZGVmaW5lZCAp IHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAicmVz dWx0IiBpcyB1bmRlZmluZWQgb25seSBpbiBjYXNlIG9mIEVEQiBwcm9jZWR1 cmUuIEFzIE9uY2UgdGhlIEVEQiBwcm9jZWR1cmUgZXhlY3V0aW9uIGlzIGNv bXBsZXRlZAorICAgICAgICAgICAgICAgICB0aGVuIHdlIGFyZSBub3QgZ2V0 dGluZyBhbnkgcmVzdWx0IHNvIHdlIG5lZWQgaWdub3JlIHRoZSByZXN1bHQu CisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBwZ1Rvb2xz LkRpcmVjdERlYnVnLmVkaXRvci5yZW1vdmVMaW5lQ2xhc3Moc2VsZi5hY3Rp dmVfbGluZV9ubywgJ3dyYXAnLCAnQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJh Y2tncm91bmQnKTsKKyAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERl YnVnLmRpcmVjdF9leGVjdXRpb25fY29tcGxldGVkID0gdHJ1ZTsKKworICAg ICAgICAgICAgICAgIC8vU2V0IHRoZSBhbGVydGlmeSBtZXNzYWdlIHRvIGlu Zm9ybSB0aGUgdXNlciB0aGF0IGV4ZWN1dGlvbiBpcyBjb21wbGV0ZWQuCisg ICAgICAgICAgICAgICAgQWxlcnRpZnkubm90aWZ5KAorICAgICAgICAgICAg ICAgICAgcmVzLmluZm8sCisgICAgICAgICAgICAgICAgICAnc3VjY2Vzcycs CisgICAgICAgICAgICAgICAgICAzLAorICAgICAgICAgICAgICAgICAgZnVu Y3Rpb24oKSB7IH0KKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAg ICAgICAgLy8gVXBkYXRlIHRoZSBtZXNzYWdlIHRhYiBvZiB0aGUgZGVidWdn ZXIKKyAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmRibXNN ZXNzYWdlcy4kZWxlbS50ZXh0KHJlcy5kYXRhLnN0YXR1c19tZXNzYWdlKTsK KworICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGlvbiBjb21wbGV0ZWQgc28g ZGlzYWJsZSB0aGUgYnV0dG9ucyBvdGhlciB0aGFuICJDb250aW51ZS9TdGFy dCIgYnV0dG9uIGJlY2F1c2UgdXNlciBjYW4gc3RpbGwKKyAgICAgICAgICAg ICAgICAvLyBzdGFydCB0aGUgc2FtZSBleGVjdXRpb24gYWdhaW4uCisgICAg ICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3N0b3AnLCBmYWxzZSk7CisgICAg ICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3N0ZXBfb3ZlcicsIGZhbHNlKTsK KyAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RlcF9pbnRvJywgZmFs c2UpOworICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCd0b2dnbGVfYnJl YWtwb2ludCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzZWxmLmVuYWJs ZSgnY2xlYXJfYWxsX2JyZWFrcG9pbnRzJywgZmFsc2UpOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg IC8vIENhbGwgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCB1cGRhdGUgbG9jYWwg dmFyaWFibGVzIC4uLi4KKyAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEu cmVzdWx0Lm5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgcGdU b29scy5EaXJlY3REZWJ1Zy5lZGl0b3IucmVtb3ZlTGluZUNsYXNzKHNlbGYu YWN0aXZlX2xpbmVfbm8sICd3cmFwJywgJ0NvZGVNaXJyb3ItYWN0aXZlbGlu ZS1iYWNrZ3JvdW5kJyk7CisgICAgICAgICAgICAgICAgICBzZWxmLkFkZFJl c3VsdHMocmVzLmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgIHBn VG9vbHMuRGlyZWN0RGVidWcucGFyYW1zVGFiRnJhbWUudGFiKDMsdHJ1ZSk7 CisgICAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmRpcmVj dF9leGVjdXRpb25fY29tcGxldGVkID0gdHJ1ZTsKKworICAgICAgICAgICAg ICAgICAgLy9TZXQgdGhlIGFsZXJ0aWZ5IG1lc3NhZ2UgdG8gaW5mb3JtIHRo ZSB1c2VyIHRoYXQgZXhlY3V0aW9uIGlzIGNvbXBsZXRlZC4KKyAgICAgICAg ICAgICAgICAgIEFsZXJ0aWZ5Lm5vdGlmeSgKKyAgICAgICAgICAgICAgICAg ICAgcmVzLmluZm8sCisgICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJywK KyAgICAgICAgICAgICAgICAgICAgMywKKyAgICAgICAgICAgICAgICAgICAg ZnVuY3Rpb24oKSB7IH0KKyAgICAgICAgICAgICAgICAgICk7CisKKyAgICAg ICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbWVzc2FnZSB0YWIgb2YgdGhl IGRlYnVnZ2VyCisgICAgICAgICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERl YnVnLmRibXNNZXNzYWdlcy4kZWxlbS50ZXh0KHJlcy5kYXRhLnN0YXR1c19t ZXNzYWdlKTsKKworICAgICAgICAgICAgICAgICAgLy8gRXhlY3V0aW9uIGNv bXBsZXRlZCBzbyBkaXNhYmxlIHRoZSBidXR0b25zIG90aGVyIHRoYW4gIkNv bnRpbnVlL1N0YXJ0IiBidXR0b24gYmVjYXVzZSB1c2VyIGNhbiBzdGlsbAor ICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgdGhlIHNhbWUgZXhlY3V0aW9u IGFnYWluLgorICAgICAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3N0b3An LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3Rl cF9vdmVyJywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgc2VsZi5lbmFi bGUoJ3N0ZXBfaW50bycsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgIHNl bGYuZW5hYmxlKCd0b2dnbGVfYnJlYWtwb2ludCcsIGZhbHNlKTsKKyAgICAg ICAgICAgICAgICAgIHNlbGYuZW5hYmxlKCdjbGVhcl9hbGxfYnJlYWtwb2lu dHMnLCBmYWxzZSk7CisKKyAgICAgICAgICAgICAgICAgIC8vVE9ETzogQ29u dGludWUgYnV0dG9uIHNob3VsZCBiZSBlbmFibGUgYW5kIHVzZXIgd2lsbCBi ZSBhYmxlIHRvIGRvIG5leHQgZGVidWdnaW5nIHdpdGggc2FtZSBmdW5jdGlv bi4KKyAgICAgICAgICAgICAgICAgIC8vc2VsZi5lbmFibGUoJ2NvbnRpbnVl JywgZmFsc2UpOworCisgICAgICAgICAgICAgICAgICAvLyBORUVMOiBUT0RP OiBBZGRlZCBFeGVjdXRpb24gaXMgY29tcGxldGVkIHNvIGFnYWluIHBvbGwg dGhlIHJlc3VsdCB1bnRpbCB1c2VyIHN0YXJ0IHRoZSBhbm90aGVyIGRlYnVn Z2luZworICAgICAgICAgICAgICAgICAgLy9zZWxmLnBvbGxfZW5kX2V4ZWN1 dGlvbl9yZXN1bHQocGdUb29scy5EaXJlY3REZWJ1Zy50cmFuc19pZCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09 ICdCdXN5JykgeworICAgICAgICAgICAgICAvLyBJZiBzdGF0dXMgaXMgQnVz eSB0aGVuIHBvbGwgdGhlIHJlc3VsdCBieSByZWN1cnNpdmUgY2FsbCB0byB0 aGUgcG9sbCBmdW5jdGlvbgorICAgICAgICAgICAgICAvL3NlbGYucG9sbF9l bmRfZXhlY3V0aW9uX3Jlc3VsdCh0cmFuc19pZCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdO b3RDb25uZWN0ZWQnKSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0 KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dlciBwb2xsIGVuZCBleGVjdXRp b24gZXJyb3InLAorICAgICAgICAgICAgICAgIHJlcy5kYXRhLnJlc3VsdAor ICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0s CisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg IEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVidWdnZXIgcG9s bCBlbmQgZXhlY3V0aW9uIGVycm9yJywKKyAgICAgICAgICAgICAgZS5yZXNw b25zZUpTT04uZXJyb3Jtc2cKKyAgICAgICAgICAgICk7CisgICAgICAgICAg fQorICAgICAgICB9KTsKKyAgICAgIH0sIDEyMDApOworCisgICAgfSwKKwor ICAgIFJlc3RhcnQ6IGZ1bmN0aW9uKHRyYW5zX2lkKSB7CisKKyAgICAgIHZh ciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0i ICsgInJlc3RhcnQvIiArIHRyYW5zX2lkOworCisgICAgICAkLmFqYXgoewor ICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0 aW9uKHJlcykgeworICAgICAgICAgIC8vIFJlc3RhcnQgdGhlIHNhbWUgZnVu Y3Rpb24gZGVidWdnaW5nIHdpdGggcHJldmlvdXMgYXJndW1lbnRzCisgICAg ICAgICAgdmFyIHJlc3RhcnRfZGJnID0gcmVzLmRhdGEucmVzdGFydF9kZWJ1 ZyA/IDEgOiAwOworICAgICAgICAgIGRlYnVnX2Z1bmN0aW9uX2FnYWluKHJl cy5kYXRhLnJlc3VsdCwgcmVzdGFydF9kYmcpOworICAgICAgICB9LAorICAg ICAgICBlcnJvcjogZnVuY3Rpb24oeGhyLCBzdGF0dXMsIGVycm9yKSB7Cisg ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciBlcnIgPSAkLnBhcnNl SlNPTih4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIGlmIChlcnIu c3VjY2VzcyA9PSAwKSB7CisgICAgICAgICAgICAgIG1zZyA9IFMoJ3t7IF8o JyArIGVyci5lcnJvcm1zZyArICcpfX0nKS52YWx1ZSgpOworICAgICAgICAg ICAgICBBbGVydGlmeS5hbGVydCgie3sgXygnIiArIGVyci5lcnJvcm1zZyAr ICInKSB9fSIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gY2F0Y2gg KGUpIHt9CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0sCisKKyAgICAv LyBDb250aW51ZSB0aGUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGJyZWFr cG9pbnQKKyAgICBDb250aW51ZTogZnVuY3Rpb24odHJhbnNfaWQpIHsKKyAg ICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgLy9DaGVjayBmaXJzdCBp ZiBwcmV2aW91cyBleGVjdXRpb24gd2FzIGNvbXBsZXRlZCBvciBub3QKKyAg ICAgIGlmIChwZ1Rvb2xzLkRpcmVjdERlYnVnLmRpcmVjdF9leGVjdXRpb25f Y29tcGxldGVkKSB7CisgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZGly ZWN0X2V4ZWN1dGlvbl9jb21wbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgLy8g VE9ETzogV2UgbmVlZCB0byBnZXQgdGhlIGFyZ3VtZW50cyBnaXZlbiBieSB0 aGUgdXNlciBmcm9tIHNxbGl0ZSBkYXRhYmFzZQorICAgICAgICBzZWxmLlJl c3RhcnQodHJhbnNfaWQpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAg ICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0YWJhc2Ug bWVzc2FnZQorICAgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdk ZWJ1Z2dlci5pbmRleCcpIH19IiArICJleGVjdXRlX3F1ZXJ5LyIgKyB0cmFu c19pZCArICIvIiArICJjb250aW51ZSI7CisKKyAgICAgICAgJC5hamF4KHsK KyAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAgICAgbWV0aG9kOiAn R0VUJywKKyAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAg ICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAg ICAgc2VsZi5wb2xsX3Jlc3VsdCh0cmFuc19pZCk7CisgICAgICAgICAgICAg IGlmIChwZ1Rvb2xzLkRpcmVjdERlYnVnLmRlYnVnX3R5cGUpIHsKKyAgICAg ICAgICAgICAgICBzZWxmLnBvbGxfZW5kX2V4ZWN1dGlvbl9yZXN1bHQodHJh bnNfaWQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8vTkVF TDogQURERUQKKyAgICAgICAgICAgICAgLy9zZWxmLnBvbGxfZW5kX2V4ZWN1 dGlvbl9yZXN1bHQodHJhbnNfaWQpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAor ICAgICAgICAgICAgICAgICdEZWJ1Z2dlcjogQ29udGludWUgZXhlY3V0aW9u IGVycm9yJworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAg ICAgICAgIH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAg ICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGVi dWdnZXI6IENvbnRpbnVlIGV4ZWN1dGlvbiBlcnJvcicKKyAgICAgICAgICAg ICk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9 LAorCisgICAgICBTdGVwX292ZXI6IGZ1bmN0aW9uKHRyYW5zX2lkKSB7Cisg ICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBNYWtlIGFq YXggY2FsbCB0byBsaXN0ZW4gdGhlIGRhdGFiYXNlIG1lc3NhZ2UKKyAgICAg ICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZGVidWdnZXIuaW5kZXgn KSB9fSIgKyAiZXhlY3V0ZV9xdWVyeS8iICsgdHJhbnNfaWQgKyAiLyIgKyAi c3RlcF9vdmVyIjsKKworICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVy bDogYmFzZVVybCwKKyAgICAgICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAg ICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgaWYg KHJlcy5kYXRhLnN0YXR1cykgeworICAgICAgICAgICAgICBzZWxmLnBvbGxf cmVzdWx0KHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgaWYgKHBnVG9vbHMu RGlyZWN0RGVidWcuZGVidWdfdHlwZSkgeworICAgICAgICAgICAgICAgIHNl bGYucG9sbF9lbmRfZXhlY3V0aW9uX3Jlc3VsdCh0cmFuc19pZCk7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug eworICAgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAg ICAgICAnRGVidWdnZXI6IFN0ZXAgb3ZlciBleGVjdXRpb24gZXJyb3InCisg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwK KyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAg QWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1Z2dlcjogU3Rl cCBvdmVyIGV4ZWN1dGlvbiBlcnJvcicKKyAgICAgICAgICAgICk7CisgICAg ICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0sCisKKyAgICAgIFN0ZXBf aW50bzogZnVuY3Rpb24odHJhbnNfaWQpIHsKKyAgICAgICAgdmFyIHNlbGYg PSB0aGlzOworCisgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3Rl biB0aGUgZGF0YWJhc2UgbWVzc2FnZQorICAgICAgICB2YXIgYmFzZVVybCA9 ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJleGVjdXRl X3F1ZXJ5LyIgKyB0cmFuc19pZCArICIvIiArICJzdGVwX2ludG8iOworCisg ICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAg ICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgc3VjY2VzczogZnVu Y3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVz KSB7CisgICAgICAgICAgICAgIHNlbGYucG9sbF9yZXN1bHQodHJhbnNfaWQp OworICAgICAgICAgICAgICBpZiAocGdUb29scy5EaXJlY3REZWJ1Zy5kZWJ1 Z190eXBlKSB7CisgICAgICAgICAgICAgICAgc2VsZi5wb2xsX2VuZF9leGVj dXRpb25fcmVzdWx0KHRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg IEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dlcjog U3RlcCBpbnRvIGV4ZWN1dGlvbiBlcnJvcicKKyAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9y OiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgK KyAgICAgICAgICAgICAgJ0RlYnVnZ2VyOiBTdGVwIGludG8gZXhlY3V0aW9u IGVycm9yJworICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAg IH0pOworICAgICAgfSwKKworICAgICAgU3RvcDogZnVuY3Rpb24odHJhbnNf aWQpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIC8v IE1ha2UgYWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0YWJhc2UgbWVzc2Fn ZQorICAgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dl ci5pbmRleCcpIH19IiArICJleGVjdXRlX3F1ZXJ5LyIgKyB0cmFuc19pZCAr ICIvIiArICJhYm9ydF90YXJnZXQiOworCisgICAgICAgICQuYWpheCh7Cisg ICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1ldGhvZDogJ0dF VCcsCisgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAg ICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7CisgICAgICAgICAgICAg IC8vIENhbGwgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCB1cGRhdGUgbG9jYWwg dmFyaWFibGVzIC4uLi4KKyAgICAgICAgICAgICAgcGdUb29scy5EaXJlY3RE ZWJ1Zy5lZGl0b3IucmVtb3ZlTGluZUNsYXNzKHNlbGYuYWN0aXZlX2xpbmVf bm8sICd3cmFwJywgJ0NvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5k Jyk7CisgICAgICAgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuZGlyZWN0 X2V4ZWN1dGlvbl9jb21wbGV0ZWQgPSB0cnVlOworCisgICAgICAgICAgICAg IC8vU2V0IHRoZSBhbGVydGlmeSBtZXNzYWdlIHRvIGluZm9ybSB0aGUgdXNl ciB0aGF0IGV4ZWN1dGlvbiBpcyBjb21wbGV0ZWQuCisgICAgICAgICAgICAg IEFsZXJ0aWZ5Lm5vdGlmeSgKKyAgICAgICAgICAgICAgICByZXMuaW5mbywK KyAgICAgICAgICAgICAgICAnc3VjY2VzcycsCisgICAgICAgICAgICAgICAg MywKKyAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgfQorICAgICAgICAg ICAgICApOworCisgICAgICAgICAgICAgIC8vRGlzYWJsZSB0aGUgYnV0dG9u cyBvdGhlciB0aGFuIGNvbnRpbnVlIGJ1dHRvbi4gSWYgdXNlciB3YW50cyB0 byBhZ2FpbiB0aGVuIGl0IHNob3VsZCBhbGxvdyB0byBkZWJ1ZyBhZ2Fpbi4u LgorICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgnc3RvcCcsIGZhbHNlKTsK KyAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3N0ZXBfb3ZlcicsIGZhbHNl KTsKKyAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ3N0ZXBfaW50bycsIGZh bHNlKTsKKyAgICAgICAgICAgICAgc2VsZi5lbmFibGUoJ2NvbnRpbnVlJywg ZmFsc2UpOworICAgICAgICAgICAgICBzZWxmLmVuYWJsZSgndG9nZ2xlX2Jy ZWFrcG9pbnQnLCBmYWxzZSk7CisgICAgICAgICAgICAgIHNlbGYuZW5hYmxl KCdjbGVhcl9hbGxfYnJlYWtwb2ludHMnLCBmYWxzZSk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09 ICdOb3RDb25uZWN0ZWQnKSB7CisgICAgICAgICAgICAgIEFsZXJ0aWZ5LmFs ZXJ0KAorICAgICAgICAgICAgICAgICdEZWJ1Z2dlcjogU3RvcCBleGVjdXRp b24gZXJyb3InCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgewor ICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdE ZWJ1Z2dlcjogU3RvcCBleGVjdXRpb24gZXJyb3InCisgICAgICAgICAgICAp OworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9LAorCisgICAg ICB0b2dnbGVfYnJlYWtwb2ludDogZnVuY3Rpb24odHJhbnNfaWQpIHsKKyAg ICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIHZhciBpbmZvID0g cGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3IubGluZUluZm8oc2VsZi5hY3Rp dmVfbGluZV9ubyk7CisgICAgICAgIHZhciBiYXNlVXJsID0gJyc7CisKKyAg ICAgICAgLy8gSWYgZ3V0dGVyTWFya2VyIGlzIHVuZGVmaW5lZCB0aGF0IG1l YW5zIHRoZXJlIGlzIG5vIG1hcmtlciBkZWZpbmVkIHByZXZpb3VzbHkKKyAg ICAgICAgLy8gU28gd2UgbmVlZCB0byBzZXQgdGhlIGJyZWFrcG9pbnQgY29t bWFuZCBoZXJlLi4uCisgICAgICAgIGlmIChpbmZvLmd1dHRlck1hcmtlcnMg PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBiYXNlVXJsID0gInt7IHVy bF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsgInNldF9icmVha3BvaW50 LyIgKyB0cmFuc19pZCArICIvIiArIHNlbGYuYWN0aXZlX2xpbmVfbm8gKyAi LyIgKyAiMSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4Jykg fX0iICsgInNldF9icmVha3BvaW50LyIgKyB0cmFuc19pZCArICIvIiArIHNl bGYuYWN0aXZlX2xpbmVfbm8gKyAiLyIgKyAiMCI7CisgICAgICAgIH0KKwor ICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDogYmFzZVVybCwKKyAg ICAgICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1 bmN0aW9uKHJlcykgeworICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1 cykgeworICAgICAgICAgICAgICAvLyBDYWxsIGZ1bmN0aW9uIHRvIGNyZWF0 ZSBhbmQgdXBkYXRlIGxvY2FsIHZhcmlhYmxlcyAuLi4uCisgICAgICAgICAg ICAgIHZhciBpbmZvID0gcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3IubGlu ZUluZm8oc2VsZi5hY3RpdmVfbGluZV9ubyk7CisKKyAgICAgICAgICAgICAg aWYgKGluZm8uZ3V0dGVyTWFya2VycyAhPSB1bmRlZmluZWQpIHsKKyAgICAg ICAgICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmVkaXRvci5zZXRHdXR0 ZXJNYXJrZXIoc2VsZi5hY3RpdmVfbGluZV9ubywgImJyZWFrcG9pbnRzIiwg bnVsbCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7 CisgICAgICAgICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3Iu c2V0R3V0dGVyTWFya2VyKHNlbGYuYWN0aXZlX2xpbmVfbm8sICJicmVha3Bv aW50cyIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg bWFya2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAg ICAgICAgICAgICAgICAgIG1hcmtlci5zdHlsZS5jb2xvciA9ICIjODIyIjsK KyAgICAgICAgICAgICAgICAgICAgbWFya2VyLmlubmVySFRNTCA9ICLil48i OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyOworICAgICAg ICAgICAgICAgIH0oKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0g J05vdENvbm5lY3RlZCcpIHsKKyAgICAgICAgICAgICAgQWxlcnRpZnkuYWxl cnQoCisgICAgICAgICAgICAgICAgJ0RlYnVnZ2VyOiBUb2dnbGUgYnJlYWtw b2ludCBleGVjdXRpb24gZXJyb3InCisgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVu Y3Rpb24oZSkgeworICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAg ICAgICAgICAgICdEZWJ1Z2dlcjogVG9nZ2xlIGJyZWFrcG9pbnQgZXhlY3V0 aW9uIGVycm9yJworICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAg ICAgIH0pOworICAgICAgfSwKKworICAgICAgY2xlYXJfYWxsX2JyZWFrcG9p bnQ6IGZ1bmN0aW9uKHRyYW5zX2lkKSB7CisgICAgICAgIHZhciBzZWxmID0g dGhpczsKKworICAgICAgICB2YXIgYnJfbGlzdCA9IHNlbGYuR2V0QnJlYWtw b2ludEluZm9ybWF0aW9uKHRyYW5zX2lkKTsKKworICAgICAgICAvLyBJZiB0 aGVyZSBpcyBubyBicmVhayBwb2ludCB0byBjbGVhciB0aGVuIHdlIHNob3Vs ZCByZXR1cm4gZnJvbSBoZXJlLgorICAgICAgICBpZiAoKGJyX2xpc3QubGVu Z3RoID09IDEpICYmIChicl9saXN0WzBdLmxpbmVudW1iZXIgPT0gLTEpKQor ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgYnJlYWtwb2ludF9s aXN0ID0gbmV3IEFycmF5KCk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IGJyX2xpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBpZiAoYnJfbGlz dFtpXS5saW5lbnVtYmVyICE9IC0xKSB7CisgICAgICAgICAgICBicmVha3Bv aW50X2xpc3QucHVzaChicl9saXN0W2ldLmxpbmVudW1iZXIpCisgICAgICAg ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwg dG8gbGlzdGVuIHRoZSBkYXRhYmFzZSBtZXNzYWdlCisgICAgICAgIHZhciBi YXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4JykgfX0iICsg ImNsZWFyX2FsbF9icmVha3BvaW50LyIgKyB0cmFuc19pZDsKKworICAgICAg ICAkLmFqYXgoeworICAgICAgICAgIHVybDogYmFzZVVybCwKKyAgICAgICAg ICBtZXRob2Q6ICdQT1NUJywKKyAgICAgICAgICBkYXRhOiB7ICdicmVha3Bv aW50X2xpc3QnOiBicmVha3BvaW50X2xpc3Quam9pbigpIH0sCisgICAgICAg ICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZiAo cmVzLmRhdGEuc3RhdHVzKSB7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7 aTwgYnJlYWtwb2ludF9saXN0Lmxlbmd0aDtpKyspIHsKKyAgICAgICAgICAg ICAgICB2YXIgaW5mbyA9IHBnVG9vbHMuRGlyZWN0RGVidWcuZWRpdG9yLmxp bmVJbmZvKChicmVha3BvaW50X2xpc3RbaV0gLSAxKSk7CisKKyAgICAgICAg ICAgICAgICBpZiAoaW5mbykgeworICAgICAgICAgICAgICAgICAgaWYgKGlu Zm8uZ3V0dGVyTWFya2VycyAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg ICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5lZGl0b3Iuc2V0R3V0dGVy TWFya2VyKChicmVha3BvaW50X2xpc3RbaV0gLSAxKSwgImJyZWFrcG9pbnRz IiwgbnVsbCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAg ICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1Z2dl cjogQ2xlYXIgYWxsIGJyZWFrcG9pbnQgZXhlY3V0aW9uIGVycm9yJworICAg ICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg fSwKKworICAgICAgQWRkU3RhY2tJbmZvcm1hdGlvbjogZnVuY3Rpb24ocmVz dWx0KSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAv LyBSZW1vdmUgdGhlIGV4aXN0aW5nIGNyZWF0ZWQgZ3JpZCBhbmQgdXBkYXRl IHRoZSBzdGFjayB2YWx1ZXMKKyAgICAgICAgaWYgKHNlbGYuc3RhY2tfZ3Jp ZCkgeworICAgICAgICAgICAgc2VsZi5zdGFja19ncmlkLnJlbW92ZSgpOwor ICAgICAgICAgICAgc2VsZi5zdGFja19ncmlkID0gbnVsbDsKKyAgICAgICAg fQorCisgICAgICAgIHBnVG9vbHMuRGlyZWN0RGVidWcuc3RhY2tUYWIuJGVs ZW0uZW1wdHkoKTsKKworICAgICAgICB2YXIgRGVidWdnZXJTdGFja01vZGVs ID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICAgICAgICBkZWZhdWx0 czogeworICAgICAgICAgICAgbmFtZTogdW5kZWZpbmVkLAorICAgICAgICAg ICAgdmFsdWU6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIGxpbmVfbm86IHVu ZGVmaW5lZAorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAg Ly8gQ29sbGVjdGlvbiB3aGljaCBjb250YWlucyB0aGUgbW9kZWwgZm9yIGZ1 bmN0aW9uIGluZm9ybWF0aW9ucy4KKyAgICAgICAgdmFyIFN0YWNrQ29sbGVj dGlvbiA9IEJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHsKKyAgICAgICAg ICBtb2RlbDogRGVidWdnZXJTdGFja01vZGVsCisgICAgICAgIH0pOworCisg ICAgICAgIHN0YWNrR3JpZENvbHMgPSBbCisgICAgICAgICAge25hbWU6ICdu YW1lJywgbGFiZWw6J05hbWUnLCB0eXBlOid0ZXh0JywgZWRpdGFibGU6IGZh bHNlLCBjZWxsOidzdHJpbmcnfSwKKyAgICAgICAgICB7bmFtZTogJ3ZhbHVl JywgbGFiZWw6J1ZhbHVlJywgdHlwZTondGV4dCcsIGVkaXRhYmxlOiBmYWxz ZSwgY2VsbDonc3RyaW5nJ30sCisgICAgICAgICAge25hbWU6ICdsaW5lX25v JywgbGFiZWw6J0xpbmUgTm8uJywgdHlwZTondGV4dCcsIGVkaXRhYmxlOiBm YWxzZSwgY2VsbDonc3RyaW5nJ30KKyAgICAgICAgXTsKKworICAgICAgICB2 YXIgbXlfb2JqID0gW107CisgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoICE9 IDApCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVz dWx0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBjaGFu Z2UgdGhlIG15X2Z1bmNfdGVzdF8yIHdpdGggbmFtZSBvZiB0aGUgZnVuY3Rp b24gdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICBteV9vYmoucHVzaCh7 ICJuYW1lIjogcmVzdWx0W2ldLnRhcmdldG5hbWUsICJ2YWx1ZSI6IHJlc3Vs dFtpXS5hcmdzLCAibGluZV9ubyI6IHJlc3VsdFtpXS5saW5lbnVtYmVyIH0p OworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdGFj a0NvbGwgPSB0aGlzLnN0YWNrQ29sbCA9IG5ldyBTdGFja0NvbGxlY3Rpb24o bXlfb2JqKTsKKyAgICAgICAgdGhpcy5zdGFja0NvbGwub24oJ2JhY2tncmlk OnJvdzpzZWxlY3RlZCcsIHNlbGYuc2VsZWN0X2ZyYW1lLCBzZWxmKTsKKwor ICAgICAgICAvLyBJbml0aWFsaXplIGEgbmV3IEdyaWQgaW5zdGFuY2UKKyAg ICAgICAgdmFyIHN0YWNrX2dyaWQgPSB0aGlzLnN0YWNrX2dyaWQgPSBuZXcg QmFja2dyaWQuR3JpZCh7CisgICAgICAgICAgY29sdW1uczogc3RhY2tHcmlk Q29scywKKyAgICAgICAgICByb3c6IEJhY2tncmlkLlJvdy5leHRlbmQoewor ICAgICAgICAgICAgaGlnaGxpZ2h0Q29sb3I6ICIjRDlFREY3IiwKKyAgICAg ICAgICAgIGRpc2FibGVkQ29sb3I6ICIjRjFGMUYxIiwKKyAgICAgICAgICAg IGV2ZW50czogeworICAgICAgICAgICAgICBjbGljazogInJvd0NsaWNrIgor ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJvd0NsaWNrOiBmdW5jdGlv bihlKSB7CisgICAgICAgICAgICAgIC8vRmluZCB3aGljaCByb3cgaXMgc2Vs ZWN0ZWQgYW5kIGRlcGVuZGluZyBvbiB0aGF0IHNlbmQgdGhlIGZyYW1lIGlk CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLm1vZGVsLmNv bGxlY3Rpb24ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAo dGhpcy5tb2RlbC5jb2xsZWN0aW9uLm1vZGVsc1tpXS5nZXQoJ25hbWUnKSA9 PSB0aGlzLm1vZGVsLmdldCgnbmFtZScpKSB7CisgICAgICAgICAgICAgICAg ICBzZWxmLmZyYW1lX2lkXyA9IGk7CisgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCdiYWNrZ3JpZDpyb3c6c2Vs ZWN0ZWQnLCB0aGlzKTsKKyAgICAgICAgICAgICAgc2VsZi5zdGFja19ncmlk LiRlbC5maW5kKCJ0ZCIpLmNzcygiYmFja2dyb3VuZC1jb2xvciIsIHRoaXMu ZGlzYWJsZWRDb2xvcik7CisgICAgICAgICAgICAgIHRoaXMuJGVsLmZpbmQo InRkIikuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIiwgdGhpcy5oaWdobGlnaHRD b2xvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSksCisgICAgICAg ICAgY29sbGVjdGlvbjogc3RhY2tDb2xsLAorICAgICAgICAgIGNsYXNzTmFt ZTogImJhY2tncmlkIHRhYmxlLWJvcmRlcmVkIgorICAgICAgICB9KTsKKwor ICAgICAgICBzdGFja19ncmlkLnJlbmRlcigpOworICAgICAgICBwZ1Rvb2xz LkRpcmVjdERlYnVnLnN0YWNrVGFiLiRlbGVtLmFwcGVuZChzdGFja19ncmlk LmVsKTsKKyAgICAgIH0sCisKKyAgICAgIEFkZFJlc3VsdHM6IGZ1bmN0aW9u KHJlc3VsdCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAg ICAgLy8gUmVtb3ZlIHRoZSBleGlzdGluZyBjcmVhdGVkIGdyaWQgYW5kIHVw ZGF0ZSB0aGUgcmVzdWx0IHZhbHVlcworICAgICAgICBpZiAoc2VsZi5yZXN1 bHRfZ3JpZCkgeworICAgICAgICAgICAgc2VsZi5yZXN1bHRfZ3JpZC5yZW1v dmUoKTsKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2dyaWQgPSBudWxsOwor ICAgICAgICB9CisKKyAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5yZXRS ZXN1bHRzLiRlbGVtLmVtcHR5KCk7CisKKyAgICAgICAgdmFyIERlYnVnZ2Vy UmVzdWx0c01vZGVsID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICAg ICAgICBkZWZhdWx0czogeworICAgICAgICAgICAgbmFtZTogdW5kZWZpbmVk CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBDb2xs ZWN0aW9uIHdoaWNoIGNvbnRhaW5zIHRoZSBtb2RlbCBmb3IgZnVuY3Rpb24g aW5mb3JtYXRpb25zLgorICAgICAgICB2YXIgUmVzdWx0c0NvbGxlY3Rpb24g PSBCYWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZCh7CisgICAgICAgICAgbW9k ZWw6IERlYnVnZ2VyUmVzdWx0c01vZGVsCisgICAgICAgIH0pOworCisgICAg ICAgIHJlc3VsdEdyaWRDb2xzID0gWworICAgICAgICAgIHtuYW1lOiAndmFs dWUnLCBsYWJlbDpyZXN1bHQubmFtZSwgdHlwZTondGV4dCcsIGVkaXRhYmxl OiBmYWxzZSwgY2VsbDonc3RyaW5nJ30KKyAgICAgICAgXTsKKworICAgICAg ICB2YXIgbXlfb2JqID0gW107CisgICAgICAgIGlmIChyZXN1bHQudmFsdWUu bGVuZ3RoICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgcmVzdWx0LnZhbHVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg ICAvLyBUT0RPOiBjaGFuZ2UgdGhlIG15X2Z1bmNfdGVzdF8yIHdpdGggbmFt ZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgICAg ICBteV9vYmoucHVzaCh7ICJ2YWx1ZSI6IHJlc3VsdC52YWx1ZVtpXX0pOwor ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEluaXRpYWxp emUgYSBuZXcgR3JpZCBpbnN0YW5jZQorICAgICAgICB2YXIgcmVzdWx0X2dy aWQgPSB0aGlzLnJlc3VsdF9ncmlkID0gbmV3IEJhY2tncmlkLkdyaWQoewor ICAgICAgICAgIGNvbHVtbnM6IHJlc3VsdEdyaWRDb2xzLAorICAgICAgICAg IGNvbGxlY3Rpb246IG5ldyBSZXN1bHRzQ29sbGVjdGlvbihteV9vYmopLAor ICAgICAgICAgIGNsYXNzTmFtZTogImJhY2tncmlkIHRhYmxlLWJvcmRlcmVk IgorICAgICAgICB9KTsKKworICAgICAgICByZXN1bHRfZ3JpZC5yZW5kZXIo KTsKKyAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5yZXRSZXN1bHRzLiRl bGVtLmFwcGVuZChyZXN1bHRfZ3JpZC5lbCk7CisgICAgICB9LAorCisgICAg ICBBZGRMb2NhbFZhcmlhYmxlczogZnVuY3Rpb24ocmVzdWx0KSB7CisgICAg ICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBSZW1vdmUgdGhl IGV4aXN0aW5nIGNyZWF0ZWQgZ3JpZCBhbmQgdXBkYXRlIHRoZSB2YXJpYWJs ZXMgdmFsdWVzCisgICAgICAgIGlmIChzZWxmLnZhcmlhYmxlX2dyaWQpIHsK KyAgICAgICAgICAgIHNlbGYudmFyaWFibGVfZ3JpZC5yZW1vdmUoKTsKKyAg ICAgICAgICAgIHNlbGYudmFyaWFibGVfZ3JpZCA9IG51bGw7CisgICAgICAg IH0KKworICAgICAgICBwZ1Rvb2xzLkRpcmVjdERlYnVnLmxvY2FsVmFycy4k ZWxlbS5lbXB0eSgpOworCisgICAgICAgIHZhciBEZWJ1Z2dlclZhcmlhYmxl c01vZGVsID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICAgICAgICBk ZWZhdWx0czogeworICAgICAgICAgICAgbmFtZTogdW5kZWZpbmVkLAorICAg ICAgICAgICAgdHlwZTogdW5kZWZpbmVkLAorICAgICAgICAgICAgdmFsdWU6 IHVuZGVmaW5lZAorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAg ICAgLy8gQ29sbGVjdGlvbiB3aGljaCBjb250YWlucyB0aGUgbW9kZWwgZm9y IGZ1bmN0aW9uIGluZm9ybWF0aW9ucy4KKyAgICAgICAgdmFyIFZhcmlhYmxl c0NvbGxlY3Rpb24gPSBCYWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZCh7Cisg ICAgICAgICAgbW9kZWw6IERlYnVnZ2VyVmFyaWFibGVzTW9kZWwKKyAgICAg ICAgfSk7CisKKyAgICAgICAgZ3JpZENvbHMgPSBbCisgICAgICAgICAge25h bWU6ICduYW1lJywgbGFiZWw6J05hbWUnLCB0eXBlOid0ZXh0JywgZWRpdGFi bGU6IGZhbHNlLCBjZWxsOidzdHJpbmcnfSwKKyAgICAgICAgICB7bmFtZTog J3R5cGUnLCBsYWJlbDonVHlwZScsIHR5cGU6ICd0ZXh0JywgZWRpdGFibGU6 IGZhbHNlLCBjZWxsOidzdHJpbmcnfSwKKyAgICAgICAgICB7bmFtZTogJ3Zh bHVlJywgbGFiZWw6J1ZhbHVlJywgdHlwZTogJ3RleHQnLCBjZWxsOiAnc3Ry aW5nJ30KKyAgICAgICAgXTsKKworICAgICAgICB2YXIgbXlfb2JqID0gW107 CisgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoICE9IDApCisgICAgICAgIHsK KyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsr KSB7CisgICAgICAgICAgICBpZiAocmVzdWx0W2ldLnZhcmNsYXNzID09ICdM JykgeworICAgICAgICAgICAgICBteV9vYmoucHVzaCh7ICJuYW1lIjogcmVz dWx0W2ldLm5hbWUsICJ0eXBlIjogcmVzdWx0W2ldLmR0eXBlLCAidmFsdWUi OiByZXN1bHRbaV0udmFsdWV9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJbml0aWFsaXplIGEgbmV3 IEdyaWQgaW5zdGFuY2UKKyAgICAgICAgdmFyIHZhcmlhYmxlX2dyaWQgPSB0 aGlzLnZhcmlhYmxlX2dyaWQgPSBuZXcgQmFja2dyaWQuR3JpZCh7CisgICAg ICAgICAgY29sdW1uczogZ3JpZENvbHMsCisgICAgICAgICAgY29sbGVjdGlv bjogbmV3IFZhcmlhYmxlc0NvbGxlY3Rpb24obXlfb2JqKSwKKyAgICAgICAg ICBjbGFzc05hbWU6ICJiYWNrZ3JpZCB0YWJsZS1ib3JkZXJlZCIKKyAgICAg ICAgfSk7CisKKyAgICAgICAgdmFyaWFibGVfZ3JpZC5yZW5kZXIoKTsKKyAg ICAgICAgcGdUb29scy5EaXJlY3REZWJ1Zy5sb2NhbFZhcnMuJGVsZW0uYXBw ZW5kKHZhcmlhYmxlX2dyaWQuZWwpOworICAgICAgfSwKKworICAgICAgQWRk UGFyYW1ldGVyczogZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHZhciBz ZWxmID0gdGhpczsKKworICAgICAgICAvLyBSZW1vdmUgdGhlIGV4aXN0aW5n IGNyZWF0ZWQgZ3JpZCBhbmQgdXBkYXRlIHRoZSBwYXJhbWV0ZXIgdmFsdWVz CisgICAgICAgIGlmIChzZWxmLnBhcmFtX2dyaWQpIHsKKyAgICAgICAgICAg IHNlbGYucGFyYW1fZ3JpZC5yZW1vdmUoKTsKKyAgICAgICAgICAgIHNlbGYu cGFyYW1fZ3JpZCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwZ1Rv b2xzLkRpcmVjdERlYnVnLnBhcmFtc1RhYi4kZWxlbS5lbXB0eSgpOworCisg ICAgICAgIHZhciBEZWJ1Z2dlclBhcmFtZXRlcnNNb2RlbCA9IEJhY2tib25l Lk1vZGVsLmV4dGVuZCh7CisgICAgICAgICAgZGVmYXVsdHM6IHsKKyAgICAg ICAgICAgIG5hbWU6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHR5cGU6IHVu ZGVmaW5lZCwKKyAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQKKyAgICAg ICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIENvbGxlY3Rpb24g d2hpY2ggY29udGFpbnMgdGhlIG1vZGVsIGZvciBmdW5jdGlvbiBpbmZvcm1h dGlvbnMuCisgICAgICAgIHZhciBQYXJhbWV0ZXJzQ29sbGVjdGlvbiA9IHNl bGYuUGFyYW1ldGVyc0NvbGxlY3Rpb24gPSBCYWNrYm9uZS5Db2xsZWN0aW9u LmV4dGVuZCh7CisgICAgICAgICAgbW9kZWw6IERlYnVnZ2VyUGFyYW1ldGVy c01vZGVsCisgICAgICAgIH0pOworCisgICAgICAgIHNlbGYuUGFyYW1ldGVy c0NvbGxlY3Rpb24ucHJvdG90eXBlLm9uKCdjaGFuZ2UnLCBzZWxmLmRlcG9z aXRfcGFyYW1ldGVyX3ZhbHVlLCBzZWxmKTsKKworICAgICAgICBwYXJhbUdy aWRDb2xzID0gWworICAgICAgICAgIHtuYW1lOiAnbmFtZScsIGxhYmVsOidO YW1lJywgdHlwZTondGV4dCcsIGVkaXRhYmxlOiBmYWxzZSwgY2VsbDonc3Ry aW5nJ30sCisgICAgICAgICAge25hbWU6ICd0eXBlJywgbGFiZWw6J1R5cGUn LCB0eXBlOiAndGV4dCcsIGVkaXRhYmxlOiBmYWxzZSwgY2VsbDonc3RyaW5n J30sCisgICAgICAgICAge25hbWU6ICd2YWx1ZScsIGxhYmVsOidWYWx1ZScs IHR5cGU6ICd0ZXh0JywgY2VsbDogJ3N0cmluZyd9CisgICAgICAgIF07CisK KyAgICAgICAgdmFyIHBhcmFtX29iaiA9IFtdOworICAgICAgICBpZiAocmVz dWx0Lmxlbmd0aCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg aWYgKHJlc3VsdFtpXS52YXJjbGFzcyA9PSAnQScpIHsKKyAgICAgICAgICAg ICAgcGFyYW1fb2JqLnB1c2goeyAibmFtZSI6IHJlc3VsdFtpXS5uYW1lLCAi dHlwZSI6IHJlc3VsdFtpXS5kdHlwZSwgInZhbHVlIjogcmVzdWx0W2ldLnZh bHVlfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9 CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBhIG5ldyBHcmlkIGluc3RhbmNl CisgICAgICAgIHZhciBwYXJhbV9ncmlkID0gdGhpcy5wYXJhbV9ncmlkID0g bmV3IEJhY2tncmlkLkdyaWQoeworICAgICAgICAgIGNvbHVtbnM6IHBhcmFt R3JpZENvbHMsCisgICAgICAgICAgY29sbGVjdGlvbjogbmV3IFBhcmFtZXRl cnNDb2xsZWN0aW9uKHBhcmFtX29iaiksCisgICAgICAgICAgY2xhc3NOYW1l OiAiYmFja2dyaWQgdGFibGUtYm9yZGVyZWQiCisgICAgICAgIH0pOworCisg ICAgICAgIHBhcmFtX2dyaWQucmVuZGVyKCk7CisgICAgICAgIHBnVG9vbHMu RGlyZWN0RGVidWcucGFyYW1zVGFiLiRlbGVtLmFwcGVuZChwYXJhbV9ncmlk LmVsKTsKKyAgICAgIH0sCisKKyAgICAgIGRlcG9zaXRfcGFyYW1ldGVyX3Zh bHVlOiBmdW5jdGlvbihtb2RlbCkgeworICAgICAgICB2YXIgc2VsZiA9IHRo aXM7CisKKyAgICAgICAgLy8gdmFyaWFibGUgbmFtZSBhbmQgdmFsdWUgbGlz dCB0aGF0IGlzIGNoYW5nZWQgYnkgdXNlcgorICAgICAgICB2YXIgbmFtZV92 YWx1ZV9saXN0ID0gW107CisKKyAgICAgICAgbmFtZV92YWx1ZV9saXN0LnB1 c2goeyAnbmFtZSc6IG1vZGVsLmdldCgnbmFtZScpLCd0eXBlJzogbW9kZWwu Z2V0KCd0eXBlJyksICd2YWx1ZSc6IG1vZGVsLmdldCgndmFsdWUnKX0pOwor CisgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGxpc3RlbiB0aGUgZGF0 YWJhc2UgbWVzc2FnZQorICAgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxf Zm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJkZXBvc2l0X3ZhbHVlLyIg KyBwZ1Rvb2xzLkRpcmVjdERlYnVnLnRyYW5zX2lkOworCisgICAgICAgICQu YWpheCh7CisgICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1l dGhvZDogJ1BPU1QnLAorICAgICAgICAgIGRhdGE6eydkYXRhJzpKU09OLnN0 cmluZ2lmeShuYW1lX3ZhbHVlX2xpc3QpfSwKKyAgICAgICAgICBzdWNjZXNz OiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlmIChyZXMuZGF0YS5z dGF0dXMpIHsKKyAgICAgICAgICAgICAgLy8gR2V0IHRoZSB1cGRhdGVkIHZh cmlhYmxlcyB2YWx1ZQorICAgICAgICAgICAgICBzZWxmLkdldExvY2FsVmFy aWFibGVzKHBnVG9vbHMuRGlyZWN0RGVidWcudHJhbnNfaWQpOworICAgICAg ICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgZXJyb3I6IGZ1bmN0 aW9uKGUpIHsKKyAgICAgICAgICAgIEFsZXJ0aWZ5LmFsZXJ0KAorICAgICAg ICAgICAgICAnRGVidWdnZXI6IERlcG9zaXQgdmFsdWUgZXhlY3V0aW9uIGVy cm9yJywKKyAgICAgICAgICAgICAgZS5yZXNwb25zZUpTT04uZXJyb3Jtc2cK KyAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg ICAgIH0sCisKKyAgICAgIHNlbGVjdF9mcmFtZTogZnVuY3Rpb24obW9kZWws IHNlbGVjdGVkKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAg ICAgICAvLyBNYWtlIGFqYXggY2FsbCB0byBsaXN0ZW4gdGhlIGRhdGFiYXNl IG1lc3NhZ2UKKyAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2Zvcign ZGVidWdnZXIuaW5kZXgnKSB9fSIgKyAic2VsZWN0X2ZyYW1lLyIgKyBwZ1Rv b2xzLkRpcmVjdERlYnVnLnRyYW5zX2lkICsgIi8iICsgc2VsZi5mcmFtZV9p ZF87CisKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6IGJhc2VV cmwsCisgICAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAgICBzdWNj ZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlmIChyZXMuZGF0 YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgcGdUb29scy5EaXJlY3REZWJ1 Zy5lZGl0b3Iuc2V0VmFsdWUocmVzLmRhdGEucmVzdWx0WzBdLnNyYyk7Cisg ICAgICAgICAgICAgIHNlbGYuVXBkYXRlQnJlYWtwb2ludChwZ1Rvb2xzLkRp cmVjdERlYnVnLnRyYW5zX2lkKTsKKyAgICAgICAgICAgICAgLy9hY3RpdmVf bGluZV9ubyA9IHNlbGYuYWN0aXZlX2xpbmVfbm8gPSAocmVzLmRhdGEucmVz dWx0WzBdLmxpbmVudW1iZXIgLSAyKTsKKyAgICAgICAgICAgICAgcGdUb29s cy5EaXJlY3REZWJ1Zy5lZGl0b3IuYWRkTGluZUNsYXNzKChyZXMuZGF0YS5y ZXN1bHRbMF0ubGluZW51bWJlciAtIDIpLCAnd3JhcCcsICdDb2RlTWlycm9y LWFjdGl2ZWxpbmUtYmFja2dyb3VuZCcpOworCisgICAgICAgICAgICAgIC8v IENhbGwgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCB1cGRhdGUgbG9jYWwgdmFy aWFibGVzIC4uLi4KKyAgICAgICAgICAgICAgc2VsZi5HZXRMb2NhbFZhcmlh YmxlcyhwZ1Rvb2xzLkRpcmVjdERlYnVnLnRyYW5zX2lkKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlv bihlKSB7CisgICAgICAgICAgICBBbGVydGlmeS5hbGVydCgKKyAgICAgICAg ICAgICAgJ0RlYnVnZ2VyOiBTZWxlY3QgZnJhbWUgZXhlY3V0aW9uIGVycm9y JywKKyAgICAgICAgICAgICAgZS5yZXNwb25zZUpTT04uZXJyb3Jtc2cKKyAg ICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg IH0sCisgICAgfQorICApCisKKyAgLyoKKyAgICBEZWJ1Z2dlciB0b29sIHZh ciB2aWV3IHRvIGNyZWF0ZSB0aGUgYnV0dG9uIHRvb2xiYXIgYW5kIGxpc3Rl biB0byB0aGUgYnV0dG9uIGNsaWNrIGV2ZW50IGFuZCBpbmZvcm0gdGhlCisg ICAgY29udHJvbGxlciBhYm91dCB0aGUgY2xpY2sgYW5kIGNvbnRyb2xsZXIg d2lsbCB0YWtlIHRoZSBhY3Rpb24gZm9yIHRoZSBzcGVjaWZpZWQgYnV0dG9u IGNsaWNrLgorICAqLworICB2YXIgRGVidWdnZXJUb29sYmFyVmlldyA9IEJh Y2tib25lLlZpZXcuZXh0ZW5kKHsKKyAgICBlbDogJyNidG4tdG9vbGJhcics CisgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAgICBjb250cm9s bGVyLm9uKCdwZ0RlYnVnZ2VyOmJ1dHRvbjpzdGF0ZTpzdG9wJywgdGhpcy5l bmFibGVfc3RvcCwgdGhpcyk7CisgICAgICBjb250cm9sbGVyLm9uKCdwZ0Rl YnVnZ2VyOmJ1dHRvbjpzdGF0ZTpzdGVwX292ZXInLCB0aGlzLmVuYWJsZV9z dGVwX292ZXIsIHRoaXMpOworICAgICAgY29udHJvbGxlci5vbigncGdEZWJ1 Z2dlcjpidXR0b246c3RhdGU6c3RlcF9pbnRvJywgdGhpcy5lbmFibGVfc3Rl cF9pbnRvLCB0aGlzKTsKKyAgICAgIGNvbnRyb2xsZXIub24oJ3BnRGVidWdn ZXI6YnV0dG9uOnN0YXRlOmNvbnRpbnVlJywgdGhpcy5lbmFibGVfY29udGlu dWUsIHRoaXMpOworICAgICAgY29udHJvbGxlci5vbigncGdEZWJ1Z2dlcjpi dXR0b246c3RhdGU6dG9nZ2xlX2JyZWFrcG9pbnQnLCB0aGlzLmVuYWJsZV90 b2dnbGVfYnJlYWtwb2ludCwgdGhpcyk7CisgICAgICBjb250cm9sbGVyLm9u KCdwZ0RlYnVnZ2VyOmJ1dHRvbjpzdGF0ZTpjbGVhcl9hbGxfYnJlYWtwb2lu dHMnLCB0aGlzLmVuYWJsZV9jbGVhcl9hbGxfYnJlYWtwb2ludHMsIHRoaXMp OworICAgIH0sCisgICAgZXZlbnRzOiB7CisgICAgICAgICdjbGljayAuYnRu LXN0b3AnOiAnb25fc3RvcCcsCisgICAgICAgICdjbGljayAuYnRuLWNsZWFy LWJyZWFrcG9pbnQnOiAnb25fY2xlYXJfYWxsX2JyZWFrcG9pbnQnLAorICAg ICAgICAnY2xpY2sgLmJ0bi10b2dnbGUtYnJlYWtwb2ludCc6ICdvbl90b2dn bGVfYnJlYWtwb2ludCcsCisgICAgICAgICdjbGljayAuYnRuLWNvbnRpbnVl JzogJ29uX2NvbnRpbnVlJywKKyAgICAgICAgJ2NsaWNrIC5idG4tc3RlcC1v dmVyJzogJ29uX3N0ZXBfb3ZlcicsCisgICAgICAgICdjbGljayAuYnRuLXN0 ZXAtaW50byc6ICdvbl9zdGVwX2ludG8nCisgICAgfSwKKyAgICBlbmFibGVf c3RvcDogZnVuY3Rpb24oZW5hYmxlKSB7CisgICAgICB2YXIgJGJ0biA9IHRo aXMuJGVsLmZpbmQoJy5idG4tc3RvcCcpOworCisgICAgICBpZiAoZW5hYmxl KSB7CisgICAgICAgICRidG4ucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7Cisg ICAgICAgICRidG4ucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgIH0g ZWxzZSB7CisgICAgICAgICRidG4ucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsK KyAgICAgICAgJGJ0bi5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwor ICAgICAgfQorICAgIH0sCisgICAgZW5hYmxlX3N0ZXBfb3ZlcjogZnVuY3Rp b24oZW5hYmxlKSB7CisgICAgICB2YXIgJGJ0biA9IHRoaXMuJGVsLmZpbmQo Jy5idG4tc3RlcC1vdmVyJyk7CisKKyAgICAgIGlmIChlbmFibGUpIHsKKyAg ICAgICAgJGJ0bi5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICAg JGJ0bi5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgfSBlbHNlIHsK KyAgICAgICAgJGJ0bi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAg ICAkYnRuLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICB9 CisgICAgfSwKKyAgICBlbmFibGVfc3RlcF9pbnRvOiBmdW5jdGlvbihlbmFi bGUpIHsKKyAgICAgIHZhciAkYnRuID0gdGhpcy4kZWwuZmluZCgnLmJ0bi1z dGVwLWludG8nKTsKKworICAgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAk YnRuLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAkYnRuLnJl bW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICB9IGVsc2UgeworICAgICAg ICAkYnRuLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICRidG4u YXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgIH0KKyAgICB9 LAorICAgIGVuYWJsZV9jb250aW51ZTogZnVuY3Rpb24oZW5hYmxlKSB7Cisg ICAgICB2YXIgJGJ0biA9IHRoaXMuJGVsLmZpbmQoJy5idG4tY29udGludWUn KTsKKworICAgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAkYnRuLnByb3Ao J2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAkYnRuLnJlbW92ZUF0dHIo J2Rpc2FibGVkJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICAkYnRuLnBy b3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICRidG4uYXR0cignZGlz YWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgIH0KKyAgICB9LAorICAgIGVu YWJsZV90b2dnbGVfYnJlYWtwb2ludDogZnVuY3Rpb24oZW5hYmxlKSB7Cisg ICAgICB2YXIgJGJ0biA9IHRoaXMuJGVsLmZpbmQoJy5idG4tdG9nZ2xlLWJy ZWFrcG9pbnQnKTsKKworICAgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAk YnRuLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAkYnRuLnJl bW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICB9IGVsc2UgeworICAgICAg ICAkYnRuLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICRidG4u YXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgIH0KKyAgICB9 LAorICAgIGVuYWJsZV9jbGVhcl9hbGxfYnJlYWtwb2ludHM6IGZ1bmN0aW9u KGVuYWJsZSkgeworICAgICAgdmFyICRidG4gPSB0aGlzLiRlbC5maW5kKCcu YnRuLWNsZWFyLWJyZWFrcG9pbnQnKTsKKworICAgICAgaWYgKGVuYWJsZSkg eworICAgICAgICAkYnRuLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAg ICAgICAkYnRuLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICB9IGVs c2UgeworICAgICAgICAkYnRuLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Cisg ICAgICAgICRidG4uYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAg ICAgIH0KKyAgICB9LAorCisgICAgb25fc3RvcDogZnVuY3Rpb24oKSB7Cisg ICAgICBjb250cm9sbGVyLlN0b3AocGdUb29scy5EaXJlY3REZWJ1Zy50cmFu c19pZCk7CisgICAgfSwKKyAgICBvbl9jbGVhcl9hbGxfYnJlYWtwb2ludDog ZnVuY3Rpb24oKSB7CisgICAgICBjb250cm9sbGVyLmNsZWFyX2FsbF9icmVh a3BvaW50KHBnVG9vbHMuRGlyZWN0RGVidWcudHJhbnNfaWQpOworICAgIH0s CisgICAgb25fdG9nZ2xlX2JyZWFrcG9pbnQ6IGZ1bmN0aW9uKCkgeworICAg ICAgY29udHJvbGxlci50b2dnbGVfYnJlYWtwb2ludChwZ1Rvb2xzLkRpcmVj dERlYnVnLnRyYW5zX2lkKTsKKyAgICB9LAorICAgIG9uX2NvbnRpbnVlOiBm dW5jdGlvbigpIHsKKyAgICAgIGNvbnRyb2xsZXIuQ29udGludWUocGdUb29s cy5EaXJlY3REZWJ1Zy50cmFuc19pZCk7CisgICAgfSwKKyAgICBvbl9zdGVw X292ZXI6IGZ1bmN0aW9uKCkgeworICAgICAgY29udHJvbGxlci5TdGVwX292 ZXIocGdUb29scy5EaXJlY3REZWJ1Zy50cmFuc19pZCk7CisgICAgfSwKKyAg ICBvbl9zdGVwX2ludG86IGZ1bmN0aW9uKCkgeworICAgICAgY29udHJvbGxl ci5TdGVwX2ludG8ocGdUb29scy5EaXJlY3REZWJ1Zy50cmFuc19pZCk7Cisg ICAgfSwKKyAgfSk7CisKKworICAvKgorICAgIEZ1bmN0aW9uIGlzIHJlc3Bv bnNpYmxlIHRvIGNyZWF0ZSB0aGUgbmV3IHdjRG9ja2VyIGluc3RhbmNlIGZv ciBkZWJ1Z2dlciBhbmQgaW5pdGlhbGl6ZSB0aGUgZGVidWdnZXIgcGFuZWwg aW5zaWRlCisgICAgdGhlIGRvY2tlciBpbnN0YW5jZS4KKyAgKi8KKyAgdmFy IERpcmVjdERlYnVnID0gZnVuY3Rpb24oKSB7fTsKKworICBfLmV4dGVuZChE aXJlY3REZWJ1Zy5wcm90b3R5cGUsIHsKKyAgICBpbml0OiBmdW5jdGlvbih0 cmFuc19pZCwgZGVidWdfdHlwZSkgeyAvKiBXZSBzaG91bGQgZ2V0IHRoZSB0 cmFuc2FjdGlvbiBpZCBmcm9tIHRoZSBzZXJ2ZXIgZHVyaW5nIGluaXRpYWxp emF0aW9uIGhlcmUgKi8KKyAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGlu aXRpYWxpemUgdGhlIG1vZHVsZSBtdWx0aXBsZSB0aW1lcy4KKworICAgICAg dmFyIHNlbGYgPSB0aGlzOworICAgICAgXy5iaW5kQWxsKHBnVG9vbHMuRGly ZWN0RGVidWcsICdtZXNzYWdlcycpOworCisgICAgICBpZiAodGhpcy5pbml0 aWFsaXplZCkKKyAgICAgICAgICByZXR1cm47CisKKyAgICAgIHRoaXMuaW5p dGlhbGl6ZWQgPSB0cnVlOworICAgICAgdGhpcy50cmFuc19pZCA9IHRyYW5z X2lkOworICAgICAgdGhpcy5kZWJ1Z190eXBlID0gZGVidWdfdHlwZTsKKyAg ICAgIHRoaXMuZmlyc3RfdGltZV9pbmRpcmVjdF9kZWJ1ZyA9IGZhbHNlOwor ICAgICAgdGhpcy5kaXJlY3RfZXhlY3V0aW9uX2NvbXBsZXRlZCA9IGZhbHNl OworCisgICAgICB2YXIgZG9ja2VyID0gdGhpcy5kb2NrZXIgPSBuZXcgd2NE b2NrZXIoCisgICAgICAgICAgJyNjb250YWluZXInLCB7CisgICAgICAgICAg YWxsb3dDb250ZXh0TWVudTogZmFsc2UsCisgICAgICAgICAgYWxsb3dDb2xs YXBzZTogZmFsc2UsCisgICAgICAgICAgdGhlbWVQYXRoOiAne3sgdXJsX2Zv cignc3RhdGljJywgZmlsZW5hbWU9J2Nzcy93Y0RvY2tlci9UaGVtZXMnKSB9 fScsCisgICAgICAgICAgdGhlbWU6ICdwZ2FkbWluJworICAgICAgICB9KTsK KworICAgICAgdGhpcy5wYW5lbHMgPSBbXTsKKworICAgICAgLy8gQmVsb3cg Y29kZSB3aWxsIGJlIGV4ZWN1dGVkIGZvciBpbmRpcmVjdCBkZWJ1Z2dpbmcK KyAgICAgIC8vIGluZGlyZWN0IGRlYnVnZ2luZyAtIDAgIGFuZCBmb3IgZGly ZWN0IGRlYnVnZ2luZyAtIDEKKyAgICAgIGlmICh0cmFuc19pZCAhPSB1bmRl ZmluZWQgJiYgIWRlYnVnX3R5cGUpIHsKKyAgICAgICAgLy8gTWFrZSBhamF4 IGNhbGwgdG8gZXhlY3V0ZSB0aGUgYW5kIHN0YXJ0IHRoZSB0YXJnZXQgZm9y IGV4ZWN1dGlvbgorICAgICAgICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9y KCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJzdGFydF9saXN0ZW5lci8iICsg dHJhbnNfaWQ7CisKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6 IGJhc2VVcmwsCisgICAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAgICAgICAg ICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgIGlmIChy ZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgc2VsZi5pbnRpYWxp emVQYW5lbHMoKTsKKyAgICAgICAgICAgICAgY29udHJvbGxlci5wb2xsX3Jl c3VsdCh0cmFuc19pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwK KyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAg QWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdEZWJ1Z2dlciBsaXN0 ZW5lciBzdGFydGluZyBlcnJvcicsCisgICAgICAgICAgICAgIGUucmVzcG9u c2VKU09OLmVycm9ybXNnCisgICAgICAgICAgICApOworICAgICAgICAgIH0K KyAgICAgICAgfSk7CisgICAgICB9CisgICAgICBlbHNlIGlmICh0cmFuc19p ZCAhPSB1bmRlZmluZWQgJiYgZGVidWdfdHlwZSkKKyAgICAgIHsKKyAgICAg ICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gZXhlY3V0ZSB0aGUgYW5kIHN0YXJ0 IHRoZSB0YXJnZXQgZm9yIGV4ZWN1dGlvbgorICAgICAgICB2YXIgYmFzZVVy bCA9ICJ7eyB1cmxfZm9yKCdkZWJ1Z2dlci5pbmRleCcpIH19IiArICJzdGFy dF9saXN0ZW5lci8iICsgdHJhbnNfaWQ7CisKKyAgICAgICAgJC5hamF4KHsK KyAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAgICAgbWV0aG9kOiAn R0VUJywKKyAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAg ICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAg ICAgc2VsZi5tZXNzYWdlcyh0cmFuc19pZCk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgewor ICAgICAgICAgICAgQWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICdE ZWJ1Z2dlciBsaXN0ZW5lciBzdGFydGluZyBlcnJvcicsCisgICAgICAgICAg ICAgIGUucmVzcG9uc2VKU09OLmVycm9ybXNnCisgICAgICAgICAgICApOwor ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICBlbHNl CisgICAgICAgIHRoaXMuaW50aWFsaXplUGFuZWxzKCk7CisgICAgfSwKKwor ICAgIC8vIFJlYWQgdGhlIG1lc3NhZ2VzIG9mIHRoZSBkYXRhYmFzZSBzZXJ2 ZXIgYW5kIGdldCB0aGUgcG9ydCBJRCBhbmQgYXR0YWNoIHRoZSBleGVjdXRl ciB0byB0aGF0IHBvcnQuCisgICAgbWVzc2FnZXM6IGZ1bmN0aW9uKHRyYW5z X2lkKSB7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAvLyBNYWtl IGFqYXggY2FsbCB0byBsaXN0ZW4gdGhlIGRhdGFiYXNlIG1lc3NhZ2UKKyAg ICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RlYnVnZ2VyLmluZGV4 JykgfX0iICsgIm1lc3NhZ2VzLyIgKyB0cmFuc19pZDsKKworICAgICAgJC5h amF4KHsKKyAgICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICBtZXRob2Q6 ICdHRVQnLAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAg ICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzID09PSAnU3VjY2VzcycpIHsK KyAgICAgICAgICAgIHNlbGYuaW50aWFsaXplUGFuZWxzKCk7CisgICAgICAg ICAgICAvLyBJZiBzdGF0dXMgaXMgU3VjY2VzcyB0aGVuIGZpbmQgdGhlIHBv cnQgbnVtYmVyIHRvIGF0dGFjaCB0aGUgZXhlY3V0ZXIuCisgICAgICAgICAg ICAvL3NlbGYuc3RhcnRfZXhlY3V0aW9uKHRyYW5zX2lkLCByZXMuZGF0YS5y ZXN1bHQpOworICAgICAgICAgICAgY29udHJvbGxlci5zdGFydF9leGVjdXRp b24odHJhbnNfaWQsIHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgfQor ICAgICAgICAgIGVsc2UgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ0J1c3kn KSB7CisgICAgICAgICAgICAvLyBJZiBzdGF0dXMgaXMgQnVzeSB0aGVuIHBv bGwgdGhlIHJlc3VsdCBieSByZWN1cnNpdmUgY2FsbCB0byB0aGUgcG9sbCBm dW5jdGlvbgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlcyh0cmFuc19pZCk7 CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHJlcy5kYXRhLnN0 YXR1cyA9PT0gJ05vdENvbm5lY3RlZCcpIHsKKyAgICAgICAgICAgIEFsZXJ0 aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAnRGF0YSBHcmlkIFBvbGwgUmVz dWx0IEVycm9yJywKKyAgICAgICAgICAgICAgcmVzLmRhdGEucmVzdWx0Cisg ICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg ICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICBBbGVydGlmeS5h bGVydCgKKyAgICAgICAgICAgICdEZWJ1Z2dlciBsaXN0ZW5lciBzdGFydGlu ZyBlcnJvcicKKyAgICAgICAgICApOworICAgICAgICB9CisgICAgICB9KTsK KworICAgIH0sCisKKyAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB3aGVuIHVz ZXIgY2xpY2sgb24gZ3V0dGVycyBvZiBjb2RlbWlycm9yIHRvIHNldC9jbGVh ciB0aGUgYnJlYWtwb2ludAorICAgIG9uQnJlYWtQb2ludDogZnVuY3Rpb24o Y20sIG0pIHsKKyAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgLy8g VE9ETzo6CisgICAgICAvLyBXZSBtYXkgd2FudCB0byBjaGVjaywgaWYgYnJl YWstcG9pbnQgaXMgYWxsb3dlZCBhdCB0aGlzIG1vbWVudCBvciBub3QKKyAg ICAgIHZhciBpbmZvID0gY20ubGluZUluZm8obSk7CisKKyAgICAgIC8vIElm IGd1dHRlck1hcmtlciBpcyB1bmRlZmluZWQgdGhhdCBtZWFucyB0aGVyZSBp cyBubyBtYXJrZXIgZGVmaW5lZCBwcmV2aW91c2x5CisgICAgICAvLyBTbyB3 ZSBuZWVkIHRvIHNldCB0aGUgYnJlYWtwb2ludCBjb21tYW5kIGhlcmUuLi4K KyAgICAgIGlmIChpbmZvLmd1dHRlck1hcmtlcnMgPT0gdW5kZWZpbmVkKSB7 CisgICAgICAgIGNvbnRyb2xsZXIuc2V0X2JyZWFrcG9pbnQoc2VsZi50cmFu c19pZCxtKzEsMSk7IC8vc2V0IHRoZSBicmVha3BvaW50CisgICAgICB9Cisg ICAgICBlbHNlIHsKKyAgICAgICAgY29udHJvbGxlci5zZXRfYnJlYWtwb2lu dChzZWxmLnRyYW5zX2lkLG0rMSwwKTsgLy9jbGVhciB0aGUgYnJlYWtwb2lu dAorICAgICAgfQorCisgICAgICBjbS5zZXRHdXR0ZXJNYXJrZXIoCisgICAg ICAgIG0sICJicmVha3BvaW50cyIsIGluZm8uZ3V0dGVyTWFya2VycyA/IG51 bGwgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgbWFya2VyID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisKKyAgICAgICAgICBtYXJr ZXIuc3R5bGUuY29sb3IgPSAiIzgyMiI7CisgICAgICAgICAgbWFya2VyLmlu bmVySFRNTCA9ICLil48iOworCisgICAgICAgICAgcmV0dXJuIG1hcmtlcjsK KyAgICAgICAgfSgpKTsKKyAgICB9LAorCisgICAgLy8gQ3JlYXRlIHRoZSBk ZWJ1Z2dlciBsYXlvdXQgd2l0aCBzcGxpdHRlciBhbmQgZGlzcGxheSB0aGUg YXBwcm9wcmlhdGUgZGF0YSByZWNlaXZlZCBmcm9tIHNlcnZlci4KKyAgICBp bnRpYWxpemVQYW5lbHM6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHNlbGYg PSB0aGlzOworICAgICAgdGhpcy5yZWdpc3RlclBhbmVsKAorICAgICAgICAn Y29kZScsIGZhbHNlLCAnMTAwJScsICcxMDAlJywKKyAgICAgICAgZnVuY3Rp b24ocGFuZWwpIHsKKyAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBwYW5l bC5sYXlvdXQoKS5zY2VuZSgpLmZpbmQoJy5wZy1kZWJ1Z2dlci1wYW5lbCcp OworCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHdjU3BsaXR0ZXIgdXNl ZCBieSB3Y0RvY2tlciB0byBzcGxpdCB0aGUgc2luZ2xlIHBhbmVsLgorICAg ICAgICAgICAgdmFyIGhTcGxpdHRlciA9IG5ldyB3Y1NwbGl0dGVyKAorICAg ICAgICAgICAgICAgIGNvbnRhaW5lciwgcGFuZWwsCisgICAgICAgICAgICAg ICAgd2NEb2NrZXIuT1JJRU5UQVRJT04uVkVSVElDQUwKKyAgICAgICAgICAg ICAgICApOworCisgICAgICAgICAgICBoU3BsaXR0ZXIuc2Nyb2xsYWJsZSgw LCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgaFNwbGl0dGVyLnNjcm9s bGFibGUoMSwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIC8vIEluaXRp YWxpemUgdGhpcyBzcGxpdHRlciB3aXRoIGEgbGF5b3V0IGluIGVhY2ggcGFu ZS4KKyAgICAgICAgICAgIGhTcGxpdHRlci5pbml0TGF5b3V0cyh3Y0RvY2tl ci5MQVlPVVQuU0lNUExFLCB3Y0RvY2tlci5MQVlPVVQuU0lNUExFKTsKKwor ICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgdGhlIHNwbGl0dGVyIHNwbGl0 cyBkb3duIHRoZSBtaWRkbGUsIHdlIHNwbGl0IHRoZSBtYWluIHBhbmVsIGJ5 IDgwJS4KKyAgICAgICAgICAgIGhTcGxpdHRlci5wb3MoMC42NSk7CisKKyAg ICAgICAgICAgIHZhciAkcGFyYW1zID0gJCgnPGRpdiBjbGFzcz0iZnVsbC1j b250YWluZXIgcGFyYW1zIj48L2Rpdj4nKTsKKyAgICAgICAgICAgIGhTcGxp dHRlci5yaWdodCgpLmFkZEl0ZW0oJHBhcmFtcyk7CisKKyAgICAgICAgICAg IC8vIEFkZCBMb2NhbCBwYXJhbWV0ZXJzIHRhYiB0byBkaXNwbGF5IGZ1bmN0 aW9uIGFyZ3VtZW50cyB2YWx1ZQorICAgICAgICAgICAgdmFyIHBhcmFtc1Rh YkZyYW1lID0gc2VsZi5wYXJhbXNUYWJGcmFtZSA9IG5ldyB3Y1RhYkZyYW1l KCRwYXJhbXMsIHBhbmVsKTsKKyAgICAgICAgICAgIHZhciBwYXJhbXNUYWIg PSBzZWxmLnBhcmFtc1RhYiA9IHBhcmFtc1RhYkZyYW1lLmFkZFRhYigKKyAg ICAgICAgICAgICAgJ3t7XygnUGFyYW1ldGVycycpfX0nLCAtMSwgd2NEb2Nr ZXIuTEFZT1VULlNJTVBMRQorICAgICAgICAgICAgICApOworICAgICAgICAg ICAgcGFyYW1zVGFiLmFkZEl0ZW0oJCgnPGRpdiBpZD1wYXJhbWV0ZXJzIGNs YXNzPSJpbmZvIj48L2Rpdj4nKSk7CisKKyAgICAgICAgICAgIC8vIEFkZCBM b2NhbCB2YXJpYWJsZXMgdGFiCisgICAgICAgICAgICB2YXIgbG9jYWxWYXJz ID0gc2VsZi5sb2NhbFZhcnMgPSBwYXJhbXNUYWJGcmFtZS5hZGRUYWIoCisg ICAgICAgICAgICAgICd7eyBfKCdMb2NhbCB2YXJpYWJsZXMnKSB9fScsIC0x LCB3Y0RvY2tlci5MQVlPVVQuU0lNUExFCisgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICBsb2NhbFZhcnMuYWRkSXRlbSgkKCc8ZGl2IGlkPWxvY2Fs X3ZhcmlhYmxlcyBjbGFzcz0iaW5mbyI+PC9kaXY+JykpOworCisgICAgICAg ICAgICAvLyBBZGQgREJNUyBtZXNzYWdlcyB0YWIKKyAgICAgICAgICAgIHZh ciBkYm1zTWVzc2FnZXMgPSBzZWxmLmRibXNNZXNzYWdlcyA9IHBhcmFtc1Rh YkZyYW1lLmFkZFRhYigKKyAgICAgICAgICAgICAgJ3t7IF8oJ01lc3NhZ2Vz JykgfX0nLCAtMSwgd2NEb2NrZXIuTEFZT1VULlNJTVBMRQorICAgICAgICAg ICAgICApOworICAgICAgICAgICAgZGJtc01lc3NhZ2VzLmFkZEl0ZW0oJCgn PGRpdiBpZD1kYm1zX21lc3NhZ2VzIGNsYXNzPSJpbmZvIj48L2Rpdj4nKSk7 CisKKyAgICAgICAgICAgIC8vIEFkZCBmdW5jdGlvbiByZXR1cm4gcmVzdWx0 cyB0YWIKKyAgICAgICAgICAgIHZhciByZXRSZXN1bHRzID0gc2VsZi5yZXRS ZXN1bHRzID0gcGFyYW1zVGFiRnJhbWUuYWRkVGFiKAorICAgICAgICAgICAg ICAne3sgXygnUmVzdWx0cycpIH19JywgLTEsIHdjRG9ja2VyLkxBWU9VVC5T SU1QTEUKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldFJlc3Vs dHMuYWRkSXRlbSgkKCc8ZGl2IGlkPXJldF9yZXN1bHRzIGNsYXNzPSJpbmZv Ij48L2Rpdj4nKSk7CisKKyAgICAgICAgICAgIC8vIE5vdyBjcmVhdGUgYSBz ZWNvbmQgc3BsaXR0ZXIgdG8gZ28gaW5zaWRlIHRoZSBleGlzdGluZyBvbmUu CisgICAgICAgICAgICB2YXIgJHRvcENvbnRhaW5lciA9ICQoJzxkaXYgY2xh c3M9ImRlYnVnZ2VyIHRvcC1jb250YWluZXIiPjwvZGl2PicpOworICAgICAg ICAgICAgaFNwbGl0dGVyLmxlZnQoKS5hZGRJdGVtKCR0b3BDb250YWluZXIp OworCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHdjU3BsaXR0ZXIgdXNl ZCBieSB3Y0RvY2tlciB0byBzcGxpdCB0aGUgc2luZ2xlIHBhbmVsLgorICAg ICAgICAgICAgdmFyIHZTcGxpdHRlciA9IG5ldyB3Y1NwbGl0dGVyKAorICAg ICAgICAgICAgICAgICR0b3BDb250YWluZXIsIHBhbmVsLAorICAgICAgICAg ICAgICAgIHdjRG9ja2VyLk9SSUVOVEFUSU9OLkhPUklaT05UQUwKKyAgICAg ICAgICAgICAgICApOworCisgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRo aXMgc3BsaXR0ZXIgd2l0aCBhIGxheW91dCBpbiBlYWNoIHBhbmUuCisgICAg ICAgICAgICB2U3BsaXR0ZXIuaW5pdExheW91dHMod2NEb2NrZXIuTEFZT1VU LlNJTVBMRSwgd2NEb2NrZXIuTEFZT1VULlNJTVBMRSk7CisKKyAgICAgICAg ICAgIC8vIE5vdyBjcmVhdGUgYSB0YWIgd2lkZ2V0IGFuZCBwdXQgdGhhdCBp bnRvIG9uZSBvZiB0aGUgc3ViIHNwbGl0cy4KKyAgICAgICAgICAgIHZhciAk c3RhY2sgPSAkKCc8ZGl2IGNsYXNzPSJmdWxsLWNvbnRhaW5lciBzdGFjayI+ Jyk7CisgICAgICAgICAgICB2U3BsaXR0ZXIuYm90dG9tKCkuYWRkSXRlbSgk c3RhY2spOworCisgICAgICAgICAgICB2YXIgc3RhY2tGcmFtZSA9IG5ldyB3 Y1RhYkZyYW1lKCRzdGFjaywgcGFuZWwpOworICAgICAgICAgICAgdmFyIHN0 YWNrVGFiID0gc2VsZi5zdGFja1RhYiA9IHN0YWNrRnJhbWUuYWRkVGFiKAor ICAgICAgICAgICAgICAgICd7eyBfKCdTdGFjayBwYW5lJykgfX0nLCAtMSwg d2NEb2NrZXIuTEFZT1VULlNJTVBMRQorICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICBzdGFja1RhYi5hZGRJdGVtKAorICAgICAgICAgICAgICAg ICQoJzxkaXYgaWQ9InN0YWNrX3BhbmUiIGNsYXNzPSJmdWxsLWNvbnRhaW5l ci1wYW5lIGluZm8iPjwvZGl2PicpKTsKKworICAgICAgICAgICAgLy8gQnkg ZGVmYXVsdCwgdGhlIHNwbGl0dGVyIHNwbGl0cyBkb3duIHRoZSBtaWRkbGUs IHdlIHNwbGl0IHRoZSBtYWluIHBhbmVsIGJ5IDgwJS4KKyAgICAgICAgICAg IHZTcGxpdHRlci5wb3MoMC43NSk7CisKKyAgICAgICAgICAgIC8vIE5vdyBj cmVhdGUgYSB0YWIgd2lkZ2V0IGFuZCBwdXQgdGhhdCBpbnRvIG9uZSBvZiB0 aGUgc3ViIHNwbGl0cy4KKyAgICAgICAgICAgIHZhciBlZGl0b3JfcGFuZSA9 ICQoJzxkaXYgaWQ9InN0YWNrX3BhbmUiIGNsYXNzPSJmdWxsLWNvbnRhaW5l ci1wYW5lIGluZm8iPjwvZGl2PicpOworICAgICAgICAgICAgdmFyIGNvZGVf ZWRpdG9yX2FyZWEgPSAkKCc8dGV4dGFyZWEgaWQ9ImRlYnVnZ2VyLWVkaXRv ci10ZXh0YXJlYSI+PC90ZXh0YXJlYT4nKS5hcHBlbmQoZWRpdG9yX3BhbmUp OworICAgICAgICAgICAgdlNwbGl0dGVyLnRvcCgpLmFkZEl0ZW0oY29kZV9l ZGl0b3JfYXJlYSk7CisKKyAgICAgICAgICAgIC8vIFRvIHNob3cgdGhlIGxp bmUtbnVtYmVyIGFuZCBzZXQgYnJlYWtwb2ludCBtYXJrZXIgZGV0YWlscyBi eSB1c2VyLgorICAgICAgICAgICAgdmFyIGVkaXRvciA9IHNlbGYuZWRpdG9y ID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoCisgICAgICAgICAgICAgICAg Y29kZV9lZGl0b3JfYXJlYS5nZXQoMCksIHsKKyAgICAgICAgICAgICAgICBs aW5lTnVtYmVyczogdHJ1ZSwKKyAgICAgICAgICAgICAgICBndXR0ZXJzOiBb Im5vdGUtZ3V0dGVyIiwgIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiLCAiYnJl YWtwb2ludHMiXSwKKyAgICAgICAgICAgICAgICBtb2RlOiAidGV4dC94LXNx bCIsCisgICAgICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUKKyAgICAgICAg ICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIE9uIGxvYWRp bmcgdGhlIGRvY2tlciwgcmVnaXN0ZXIgdGhlIGNhbGxiYWNrcworICAgICAg ICB2YXIgb25Mb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZWxm LmRvY2tlci5maW5pc2hMb2FkaW5nKDEwMCk7CisgICAgICAgICAgICBzZWxm LmRvY2tlci5vZmYod2NEb2NrZXIuRVZFTlQuTE9BREVEKTsKKyAgICAgICAg ICAgIC8vIFJlZ2lzdGVyIHRoZSBjYWxsYmFjayB3aGVuIHVzZXIgc2V0L2Ns ZWFyIHRoZSBicmVha3BvaW50IG9uIGd1dHRlciBhcmVhLgorICAgICAgICAg ICAgc2VsZi5lZGl0b3Iub24oImd1dHRlckNsaWNrIiwgc2VsZi5vbkJyZWFr UG9pbnQuYmluZChzZWxmKSwgc2VsZik7CisgICAgICAgIH07CisKKyAgICAg ICAgc2VsZi5kb2NrZXIuc3RhcnRMb2FkaW5nKCd7eyBfKCdMb2FkaW5nLi4u JykgfX0nKTsKKyAgICAgICAgc2VsZi5kb2NrZXIub24od2NEb2NrZXIuRVZF TlQuTE9BREVELCBvbkxvYWQpOworCisgICAgICAgIHNlbGYubWFpbl9wYW5l bCA9IHNlbGYuZG9ja2VyLmFkZFBhbmVsKAorICAgICAgICAgICdjb2RlJywg d2NEb2NrZXIuRE9DSy5UT1AsIG51bGwsIHtoOiAnMTAwJScsIHc6ICcxMDAl J30KKyAgICAgICAgICApOworCisgICAgICAgIC8vIENyZWF0ZSB0aGUgdG9v bGJhciB2aWV3IGZvciBkZWJ1Z2dpbmcgdGhlIGZ1bmN0aW9uCisgICAgICAg IHRoaXMudG9vbGJhclZpZXcgPSBuZXcgRGVidWdnZXJUb29sYmFyVmlldygp OworICAgIH0sCisKKyAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWwgd2l0aCBu ZXcgZGVidWdnZXIgZG9ja2VyIGluc3RhbmNlLgorICAgIHJlZ2lzdGVyUGFu ZWw6IGZ1bmN0aW9uKG5hbWUsIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBvbklu aXQpIHsKKyAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgdGhpcy5k b2NrZXIucmVnaXN0ZXJQYW5lbFR5cGUobmFtZSwgeworICAgICAgICB0aXRs ZTogdGl0bGUsCisgICAgICAgIGlzUHJpdmF0ZTogdHJ1ZSwKKyAgICAgICAg b25DcmVhdGU6IGZ1bmN0aW9uKHBhbmVsKSB7CisgICAgICAgICAgc2VsZi5w YW5lbHNbbmFtZV0gPSBwYW5lbDsKKyAgICAgICAgICBwYW5lbC5pbml0U2l6 ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICBpZiAoIXRpdGxlKQorICAg ICAgICAgICAgcGFuZWwudGl0bGUoZmFsc2UpOworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHBhbmVsLnRpdGxlKHRpdGxlKTsKKyAgICAgICAgICBw YW5lbC5jbG9zZWFibGUoZmFsc2UpOworICAgICAgICAgIHBhbmVsLmxheW91 dCgpLmFkZEl0ZW0oCisgICAgICAgICAgICAkKCc8ZGl2PicsIHsnY2xhc3Mn OiAncGctZGVidWdnZXItcGFuZWwnfSkKKyAgICAgICAgICApOworICAgICAg ICAgIGlmIChvbkluaXQpIHsKKyAgICAgICAgICAgIG9uSW5pdC5hcHBseShz ZWxmLCBbcGFuZWxdKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IH0pOworICAgIH0KKyAgfSk7CisKKyAgcGdUb29scy5EaXJlY3REZWJ1ZyA9 IG5ldyBEaXJlY3REZWJ1ZygpOworCisgIHJldHVybiBwZ1Rvb2xzLkRpcmVj dERlYnVnOworfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9k ZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL2V4ZWN1dGVfZWRic3Bs LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9zcWwvZXhlY3V0ZV9lZGJzcGwuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0M2YwZTIKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL2V4ZWN1dGVfZWRic3BsLnNxbApAQCAtMCwwICsxLDEwNCBA QAoreyMjIyBDcmVhdGUgZXhlY3V0ZXIgZnVuY3Rpb24gZm9yIGVkYiBzcGwg ZnVuY3Rpb24gZGVidWdnaW5nICMjI30KK3slIHNldCBpbnNpZGVfbG9vcCA9 IHsndmFsdWUnOiBGYWxzZX0gJX0KKworeyUgaWYgbGFuX25hbWUgPT0gJ2Vk YnNwbCcgJX0KK3slIHNldCB1c2VBbm9ueW1vdXNCbG9jayA9ICJ0cnVlIiAl fQoreyUgaWYgbm90IGlzX2Z1bmMgJX0KKyAgICB7JSBzZXQgc3RyX3N0YXRl bWVudCA9ICJcdEVYRUMgIiB+IGZ1bmNfbmFtZSAlfQoreyUgZWxpZiByZXRf dHlwZSA9PSAndm9pZCcgJX0KKyAgICB7JSBzZXQgc3RyX3N0YXRlbWVudCA9 ICJcdFBFUkZPUk0gIiB+IGZ1bmNfbmFtZSAlfQoreyUgZWxzZSAlfQorICAg IHslIHNldCByZXN1bHRWYXIgPSAidl9yZXRWYWwiICV9CisgICAgeyUgc2V0 IHN0cl9zdGF0ZW1lbnQgPSAiXHQiIH4gcmVzdWx0VmFyIH4gIiA6PSAiIH4g ZnVuY19uYW1lICV9CisgICAgeyUgc2V0IHN0cl9kZWNsYXJlID0gc3RyX2Rl Y2xhcmUgfiAiXHQiIH4gcmVzdWx0VmFyIH4gIiAiIH4gcmV0X3R5cGUgfiAi O1xuIiAlfQorICAgIHslIHNldCBzdHJfcmVzdWx0ID0gIlx0REJNU19PVVRQ VVQuUFVUX0xJTkUoRSdcXG5cXG5SZXN1bHQ6XFxuLS0tLS0tLS1cXG4nIHx8 ICIgfiByZXN1bHRWYXIgfiAiOjp0ZXh0IHx8IEUnXFxuXFxuTk9URTogVGhp cyBpcyB0aGUgcmVzdWx0IGdlbmVyYXRlZCBkdXJpbmcgdGhlIGZ1bmN0aW9u IGV4ZWN1dGlvbiBieSB0aGUgZGVidWdnZXIuXFxuJyk7XG4iICV9Cit7JSBl bmRpZiAlfQorCit7JSBlbHNlICV9Cit7JSBpZiByZXRfdHlwZSA9PSAncmVj b3JkJyAlfQorICAgIHslIHNldCBzdHJfc3RhdGVtZW50ID0gIlx0U0VMRUNU ICIgfiBmdW5jX25hbWUgJX0KK3slIGVsc2UgJX0KKyAgICB7JSBzZXQgc3Ry X3N0YXRlbWVudCA9ICJcdFNFTEVDVCAqIEZST00gIiB+IGZ1bmNfbmFtZSAl fQoreyUgZW5kaWYgJX0KK3slIGVuZGlmICV9CisKK3slIHNldCBmaXJzdFBy b2NlZXNlZCA9ICJmYWxzZSIgJX0KK3slIHNldCBpbnB1dF92YWx1ZV9pbmRl eCA9IDAgJX0KKworeyUgaWYgYXJnX3R5cGV8bGVuZ3RoID4gMCAlfQoreyUg c2V0IHN0cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50IH4gIigiICV9CisK K3slIGZvciBhcmdfbW9kZSBpbiBhcmdzX21vZGUgJX0KKworeyUgaWYgdXNl QW5vbnltb3VzQmxvY2sgPT0gInRydWUiIGFuZCAoYXJnX21vZGUgPT0gJ28n IG9yIGFyZ19tb2RlID09ICdiJykgJX0KK3slIHNldCBzdHJQYXJhbSA9ICJw X3BhcmFtIiB+IChsb29wLmluZGV4IC0gMSkgJX0KK3slIHNldCBzdHJfZGVj bGFyZSA9IHN0cl9kZWNsYXJlIH4gIlx0IiB+IHN0clBhcmFtIH4gIiAiIH4g YXJnX3R5cGVbbG9vcC5pbmRleCAtIDFdICV9Cit7JSBpZiBhcmdfbW9kZSA9 PSAnYicgJX0KK3sjIyMgVE9ETzogdG8gY2hlY2sgZm9yIE51bGwgcGFyYW1l dGVycyByZWNlaXZlZCBmcm9tIGNsaWVudCAjIyN9Cit7JSBpZiBkYXRhW2lu cHV0X3ZhbHVlX2luZGV4XVsndHlwZSddID09ICd0ZXh0JyBhbmQgZGF0YVtp bnB1dF92YWx1ZV9pbmRleF1bJ3ZhbHVlJ10gIT0gJ05VTEwnICV9Cit7JSBz ZXQgdG1wX3ZhbCA9IGRhdGFbaW5wdXRfdmFsdWVfaW5kZXhdWyd2YWx1ZSdd fHF0TGl0ZXJhbCAlfQoreyUgc2V0IHN0cl9kZWNsYXJlID0gc3RyX2RlY2xh cmUgfiAiIDo9ICIgfiBzdHJQYXJhbSB+ICIgIiB+IHRtcF92YWwgfiAiOjoi IH4gZGF0YVtpbnB1dF92YWx1ZV9pbmRleF1bJ3R5cGUnXSAlfQoreyUgZWxz ZSAlfQoreyUgc2V0IHN0cl9kZWNsYXJlID0gc3RyX2RlY2xhcmUgfiAiIDo9 ICIgfiBzdHJQYXJhbSB+ICIgIiB+IGRhdGFbaW5wdXRfdmFsdWVfaW5kZXhd Wyd2YWx1ZSddIH4gIjo6IiB+IGRhdGFbaW5wdXRfdmFsdWVfaW5kZXhdWyd0 eXBlJ10gJX0KK3slIGVuZGlmICV9Cit7JSBzZXQgaW5wdXRfdmFsdWVfaW5k ZXggPSBpbnB1dF92YWx1ZV9pbmRleCArIDEgJX0KK3slIGVuZGlmICV9Cit7 JSBzZXQgc3RyX2RlY2xhcmUgPSBzdHJfZGVjbGFyZSB+ICI7XG4iICV9CisK K3slIGlmIGZpcnN0UHJvY2Vlc2VkID09ICJ0cnVlIiAlfQoreyUgc2V0IHN0 cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50IH4gIiwgIiAlfQoreyUgZW5k aWYgJX0KK3slIHNldCBmaXJzdFByb2NlZXNlZCA9ICJ0cnVlIiAlfQoreyUg c2V0IHN0cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50IH4gc3RyUGFyYW0g JX0KKworeyUgZWxpZiBhcmdfbW9kZSAhPSAnbycgJX0KK3slIGlmIGZpcnN0 UHJvY2Vlc2VkID09ICJ0cnVlIiAlfQoreyUgc2V0IHN0cl9zdGF0ZW1lbnQg PSBzdHJfc3RhdGVtZW50IH4gIiwgIiAlfQoreyUgZW5kaWYgJX0KK3slIHNl dCBmaXJzdFByb2NlZXNlZCA9ICJ0cnVlIiAlfQorCit7JSBpZiBhcmdfbW9k ZSA9PSAndicgJX0KK3slIHNldCBzdHJfc3RhdGVtZW50ID0gc3RyX3N0YXRl bWVudCB+ICJWQVJJQURJQyAiICV9Cit7JSBlbmRpZiAlfQorCit7IyMjIFRP RE86IHRvIGNoZWNrIGZvciBOdWxsIHBhcmFtZXRlcnMgcmVjZWl2ZWQgZnJv bSBjbGllbnQgIyMjfQoreyUgaWYgZGF0YVtpbnB1dF92YWx1ZV9pbmRleF1b J3R5cGUnXSA9PSAndGV4dCcgYW5kIGRhdGFbaW5wdXRfdmFsdWVfaW5kZXhd Wyd2YWx1ZSddICE9ICdOVUxMJyAlfQoreyUgc2V0IHRtcF92YXIgPSBkYXRh W2lucHV0X3ZhbHVlX2luZGV4XVsndmFsdWUnXXxxdExpdGVyYWwgJX0KK3sl IHNldCBzdHJfc3RhdGVtZW50ID0gc3RyX3N0YXRlbWVudCB+IHRtcF92YXIg fiAiOjoiIH4gZGF0YVtpbnB1dF92YWx1ZV9pbmRleF1bJ3R5cGUnXSAlfQor eyUgZWxzZSAlfQoreyUgc2V0IHN0cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVt ZW50IH4gZGF0YVtpbnB1dF92YWx1ZV9pbmRleF1bJ3ZhbHVlJ10gfiAiOjoi IH4gZGF0YVtpbnB1dF92YWx1ZV9pbmRleF1bJ3R5cGUnXSAlfQoreyUgZW5k aWYgJX0KK3slIHNldCBpbnB1dF92YWx1ZV9pbmRleCA9IGlucHV0X3ZhbHVl X2luZGV4ICsgMSAlfQorCisKK3slIGVuZGlmICV9CisKK3slIGlmIGxvb3Au bGFzdCAlfQoreyUgc2V0IHN0cl9zdGF0ZW1lbnQgPSBzdHJfc3RhdGVtZW50 IH4gIikiICV9Cit7JSBzZXQgc3RyUXVlcnkgPSBzdHJfc3RhdGVtZW50ICV9 Cit7JSBpZiB1c2VBbm9ueW1vdXNCbG9jayA9PSAidHJ1ZSIgJX0KK3slIHNl dCBzdHJRdWVyeSA9ICJERUNMQVJFXG4iIH4gc3RyX2RlY2xhcmUgfiAiQkVH SU5cbiIgfiBzdHJfc3RhdGVtZW50IH4gIjtcbiIgfiBzdHJfcmVzdWx0IH4g IkVORDsiICV9Cit7JSBlbmRpZiAlfQorCit7eyBzdHJRdWVyeSB9fQoreyUg aWYgaW5zaWRlX2xvb3AudXBkYXRlKHsndmFsdWUnOiBUcnVlfSkgJX0geyUg ZW5kaWYgJX0KK3slIGVuZGlmICV9CisKK3slIGVuZGZvciAlfQorCit7JSBl bGlmIG5vdCBpc19mdW5jIGFuZCBsYW5fbmFtZSA9PSAnZWRic3BsJyAlfQor eyUgc2V0IHN0clF1ZXJ5ID0gc3RyX3N0YXRlbWVudCAlfQoreyUgaWYgdXNl QW5vbnltb3VzQmxvY2sgPT0gInRydWUiICV9Cit7JSBzZXQgc3RyUXVlcnkg PSAiREVDTEFSRVxuIiB+IHN0cl9kZWNsYXJlIH4gIkJFR0lOXG4iIH4gc3Ry X3N0YXRlbWVudCB+ICI7XG4iIH4gc3RyX3Jlc3VsdCB+ICJFTkQ7IiAlfQor eyUgZW5kaWYgJX0KK3slIGVsc2UgJX0KK3slIHNldCBzdHJRdWVyeSA9IHN0 cl9zdGF0ZW1lbnQgfiAiKCkiICV9Cit7JSBpZiB1c2VBbm9ueW1vdXNCbG9j ayA9PSAidHJ1ZSIgJX0KK3slIHNldCBzdHJRdWVyeSA9ICJERUNMQVJFXG4i IH4gc3RyX2RlY2xhcmUgfiAiQkVHSU5cbiIgfiBzdHJfc3RhdGVtZW50IH4g IjtcbiIgfiBzdHJfcmVzdWx0IH4gIkVORDsiICV9Cit7JSBlbmRpZiAlfQor eyUgZW5kaWYgJX0KKworeyMjIyBSZXR1cm4gZmluYWwgcXVlcnkgZm9ybWVk IHdpdGggYWJvdmUgY29uZGl0aW9uICMjI30KK3slIGlmIG5vdCBpbnNpZGVf bG9vcC52YWx1ZSAlfQore3sgc3RyUXVlcnkgfX0KK3slIGVuZGlmICV9Clwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC9l eGVjdXRlX3BscGdzcWwuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn ZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC9leGVjdXRlX3BscGdzcWwuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjZDc1ZjEK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL2V4ZWN1dGVfcGxwZ3NxbC5zcWwK QEAgLTAsMCArMSwzMiBAQAoreyMjIyBDcmVhdGUgZXhlY3V0ZXIgZnVuY3Rp b24gZm9yIHBscGdzcWwgZnVuY3Rpb24gZGVidWdnaW5nICMjI30KK3slIGlm IG5vdCBpc19mdW5jICV9CisgICAgRVhFQyB7eyBmdW5jX25hbWUgfX0gKAor eyUgZWxpZiByZXRfdHlwZSA9PSAncmVjb3JkJyAlfQorICAgIFNFTEVDVCB7 eyBmdW5jX25hbWUgfX0gKAoreyUgZWxzZSAlfQorICAgIFNFTEVDVCAqIEZS T00ge3sgZnVuY19uYW1lIH19ICgKK3slIGVuZGlmICV9Cit7JSBpZiBkYXRh ICV9Cit7JSBmb3IgZGljdF9pdGVtIGluIGRhdGEgJX0KK3slIGlmICd0eXBl JyBpbiBkaWN0X2l0ZW0gYW5kICd2YWx1ZScgaW4gZGljdF9pdGVtICV9Cit7 JSBpZiBkaWN0X2l0ZW1bJ3R5cGUnXSA9PSAndGV4dCcgYW5kIGRpY3RfaXRl bVsndmFsdWUnXSAhPSAnTlVMTCcgJX0KK3t7IGRpY3RfaXRlbVsndmFsdWUn XXxxdExpdGVyYWwgfX06Ont7IGRpY3RfaXRlbVsndHlwZSddIH19eyUgaWYg bm90IGxvb3AubGFzdCAlfSwgeyUgZW5kaWYgJX0KK3slIGVsaWYgZGljdF9p dGVtWyd0eXBlJ10gPT0gJ3RleHQnIGFuZCBkaWN0X2l0ZW1bJ3ZhbHVlJ10g PT0gJ05VTEwnICV9Cit7eyBkaWN0X2l0ZW1bJ3ZhbHVlJ10gfX06Ont7IGRp Y3RfaXRlbVsndHlwZSddIH19eyUgaWYgbm90IGxvb3AubGFzdCAlfSwgeyUg ZW5kaWYgJX0KK3slIGVsc2UgJX0KK3slIGlmICdbXScgaW4gZGljdF9pdGVt Wyd0eXBlJ10gJX0KKyBBUlJBWVsKK3slIGZvciBkaWN0X2xpc3QgaW4gZGlj dF9pdGVtWyd2YWx1ZSddICV9Cit7JSBpZiAndmFsdWUnIGluIGRpY3RfbGlz dCAlfQore3sgZGljdF9saXN0Wyd2YWx1ZSddfHF0TGl0ZXJhbCB9fXslIGlm IG5vdCBsb29wLmxhc3QgJX0sIHslIGVuZGlmICV9Cit7JSBlbmRpZiAlfQor eyUgZW5kZm9yICV9CitdOjp7eyBkaWN0X2l0ZW1bJ3R5cGUnXSB9fQorCit7 JSBlbHNlICV9IHt7IGRpY3RfaXRlbVsndmFsdWUnXSB9fTo6e3sgZGljdF9p dGVtWyd0eXBlJ10gfX0KK3slIGVuZGlmICV9IHslIGlmIG5vdCBsb29wLmxh c3QgJX0sIHslIGVuZGlmICV9Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0K K3slIGVuZGZvciAlfQoreyUgZW5kaWYgJX0KKykKXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9k ZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL2dldF9mdW5jdGlvbl9k ZWJ1Z19pbmZvLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3Rl bXBsYXRlcy9kZWJ1Z2dlci9zcWwvZ2V0X2Z1bmN0aW9uX2RlYnVnX2luZm8u c3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwZTQ3 ZTUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL2dldF9mdW5jdGlvbl9kZWJ1 Z19pbmZvLnNxbApAQCAtMCwwICsxLDY2IEBACit7IyMjIFRvIGZldGNoIGRl YnVnIGZ1bmN0aW9uIGluZm9ybWF0aW9uICMjI30KK1NFTEVDVAorICAgIHAu cHJvbmFtZSBBUyBuYW1lLCBwLnByb3NyYywgbC5sYW5uYW1lLCBwLnByb3Jl dHNldCwgcC5wcm9yZXR0eXBlLCB5LnR5cG5hbWUgQVMgcmV0dHlwZSwKKyAg ICBDQVNFIFdIRU4gcHJvYWxsYXJndHlwZXMgSVMgTk9UIE5VTEwgVEhFTgor ICAgICAgICAgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcoQVJSQVko CisgICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAg IHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUocC5wcm9hbGxhcmd0eXBlc1tzLmld LCBOVUxMKQorICAgICAgICAgICAgICAgIEZST00KKyAgICAgICAgICAgICAg ICAgICAgcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxv Zy5hcnJheV91cHBlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHAucHJv YWxsYXJndHlwZXMsIDEpKSBBUyBzKGkpKSwgJywnKQorICAgICAgICBFTFNF CisgICAgICAgICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhBUlJB WSgKKyAgICAgICAgICAgICAgICBTRUxFQ1QKKyAgICAgICAgICAgICAgICAg ICAgcGdfY2F0YWxvZy5mb3JtYXRfdHlwZShwLnByb2FyZ3R5cGVzW3MuaV0s IE5VTEwpCisgICAgICAgICAgICAgICAgRlJPTQorICAgICAgICAgICAgICAg ICAgICBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcygwLCBwZ19jYXRhbG9n LmFycmF5X3VwcGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgcC5wcm9h cmd0eXBlcywgMSkpIEFTIHMoaSkpLCAnLCcpCisgICAgICAgIEVORCBBUyBw cm9hcmd0eXBlbmFtZXMsCisgICAgQ0FTRSBXSEVOIHByb2FsbGFyZ3R5cGVz IElTIE5PVCBOVUxMIFRIRU4KKyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJy YXlfdG9fc3RyaW5nKEFSUkFZKAorICAgICAgICAgICAgICAgIFNFTEVDVCBw cm9hbGxhcmd0eXBlc1tzLmldIEZST00KKyAgICAgICAgICAgICAgICAgICAg cGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJh eV91cHBlcihwcm9hbGxhcmd0eXBlcywgMSkpIHMoaSkpLCAnLCcpCisgICAg ICAgIEVMU0UKKyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJyYXlfdG9fc3Ry aW5nKEFSUkFZKAorICAgICAgICAgICAgICAgIFNFTEVDVCBwcm9hcmd0eXBl c1tzLmldIEZST00KKyAgICAgICAgICAgICAgICAgICAgcGdfY2F0YWxvZy5n ZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcihwcm9h cmd0eXBlcywgMSkpIHMoaSkpLCAnLCcpCisgICAgICAgIEVORCBBUyBwcm9h cmd0eXBlcywKKyAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhwLnBy b2FyZ25hbWVzLCAnLCcpIEFTIHByb2FyZ25hbWVzLAorICAgIHBnX2NhdGFs b2cuYXJyYXlfdG9fc3RyaW5nKHByb2FyZ21vZGVzLCAnLCcpIEFTIHByb2Fy Z21vZGVzLAorCisgICAgeyUgaWYgaXNfcHBhc19kYXRhYmFzZSAlfQorICAg ICAgICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIG4ub2lkIEVM U0UgMCBFTkQgQVMgcGtnLAorICAgICAgICBDQVNFIFdIRU4gbi5uc3BwYXJl bnQgPD4gMCBUSEVOIG4ubnNwbmFtZSBFTFNFICcnIEVORCBBUyBwa2duYW1l LAorICAgICAgICBDQVNFIFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIChT RUxFQ1Qgb2lkIEZST00gcGdfcHJvYyBXSEVSRSBwcm9uYW1lc3BhY2U9bi5v aWQgQU5EIHByb25hbWU9J2NvbnMnKSBFTFNFIDAgRU5EIEFTIHBrZ2NvbnNv aWQsCisgICAgICAgIENBU0UgV0hFTiBuLm5zcHBhcmVudCA8PiAwIFRIRU4g Zy5vaWQgRUxTRSBuLm9pZCBFTkQgQVMgc2NoZW1hLAorICAgICAgICBDQVNF IFdIRU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIGcubnNwbmFtZSBFTFNFIG4u bnNwbmFtZSBFTkQgQVMgc2NoZW1hbmFtZSwKKyAgICAgICAgTk9UIChsLmxh bm5hbWUgPSAnZWRic3BsJyBBTkQgcHJvdHlwZSA9ICcxJykgQVMgaXNmdW5j LAorICAgIHslZWxzZSV9CisgICAgICAgIDAgQVMgcGtnLAorICAgICAgICAn JyBBUyBwa2duYW1lLAorICAgICAgICAwIEFTIHBrZ2NvbnNvaWQsCisgICAg ICAgIG4ub2lkICAgICBBUyBzY2hlbWEsCisgICAgICAgIG4ubnNwbmFtZSBB UyBzY2hlbWFuYW1lLAorICAgICAgICB0cnVlIEFTIGlzZnVuYywKKyAgICB7 JWVuZGlmJX0KKyAgICBwZ19jYXRhbG9nLnBnX2dldF9mdW5jdGlvbl9pZGVu dGl0eV9hcmd1bWVudHMocC5vaWQpIEFTIHNpZ25hdHVyZSwKKworICAgIHsl IGlmIGhhc0ZlYXR1cmVGdW5jdGlvbkRlZmF1bHRzICV9CisgICAgICAgIHBn X2NhdGFsb2cucGdfZ2V0X2V4cHIocC5wcm9hcmdkZWZhdWx0cywgJ3BnX2Nh dGFsb2cucGdfY2xhc3MnOjpyZWdjbGFzcywgZmFsc2UpIEFTIHByb2FyZ2Rl ZmF1bHRzLAorICAgICAgICBwLnByb25hcmdkZWZhdWx0cworICAgIHslZWxz ZSV9CisgICAgICAgICcnIEFTIHByb2FyZ2RlZmF1bHRzLCAwIEFTIHByb25h cmdkZWZhdWx0cworICAgIHslZW5kaWYlfQorICAgICAgICBGUk9NCisgICAg ICAgICAgICBwZ19jYXRhbG9nLnBnX3Byb2MgcAorICAgICAgICAgICAgTEVG VCBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gcC5wcm9uYW1l c3BhY2UgPSBuLm9pZAorICAgICAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFs b2cucGdfbGFuZ3VhZ2UgbCBPTiBwLnByb2xhbmcgPSBsLm9pZAorICAgICAg ICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfdHlwZSB5IE9OIHAucHJv cmV0dHlwZSA9IHkub2lkCisKKyAgICB7JSBpZiBpc19wcGFzX2RhdGFiYXNl ICV9CisgICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFj ZSBnIE9OIG4ubnNwcGFyZW50ID0gZy5vaWQKKyAgICB7JSBlbmRpZiAlfQor CisgICAgeyUgaWYgZmlkICV9CisgICAgV0hFUkUgcC5vaWQgPSB7e2ZpZH19 OjppbnQ7CisgICAgeyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL0JhY2tlbmRfcnVubmluZy5z cWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL3YxL0JhY2tlbmRfcnVubmluZy5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzU3NzBkMAotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9zcWwvdjEvQmFja2VuZF9ydW5uaW5nLnNxbApAQCAtMCwwICsx LDQgQEAKK3sjIyMgQ2hlY2sgYmFja2VuZCB0YXJnZXQgaXMgcnVubmluZyBv ciBub3QgZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBiYWNrZW5kX3BpZCAl fQorICAgIFNFTEVDVCBDT1VOVCgqKSBGUk9NIChTRUxFQ1QgcGdfY2F0YWxv Zy5wZ19zdGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmlkKSBBUyBzIFdI RVJFIHBnX2NhdGFsb2cucGdfc3RhdF9nZXRfYmFja2VuZF9waWQocy5iaWQp ID0ge3sgY29ubnxxdElkZW50KGJhY2tlbmRfcGlkKSB9fTo6aW50ZWdlcjsK K3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC92MS9hYm9ydF90YXJnZXQuc3FsIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9h Ym9ydF90YXJnZXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAuLjhmODlhZTMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2Fi b3J0X3RhcmdldC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIEFib3J0IHRo ZSB0YXJnZXQgZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lk ICV9CisgICAgU0VMRUNUICogRlJPTSBwbGRiZ19hYm9ydF90YXJnZXQoe3tz ZXNzaW9uX2lkfX06OmludCkKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9hZGRfYnJlYWtw b2ludF9lZGIuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVt cGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9hZGRfYnJlYWtwb2ludF9lZGIuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxMjk0NjIK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2FkZF9icmVha3BvaW50X2Vk Yi5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIEFkZCBFREIgYnJlYWtwb2lu dHMgZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9Cisg ICAgU0VMRUNUICogRlJPTSBwbGRiZ19zZXRfZ2xvYmFsX2JyZWFrcG9pbnQo e3tzZXNzaW9uX2lkfX06OmludCwge3twYWNrYWdlX29pZH19OjppbnQsIHt7 ZnVuY3Rpb25fb2lkfX06Ok9JRCwgLTEsIHt7dGFyZ2V0X29pZH19OjppbnQp Cit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRl cy9kZWJ1Z2dlci9zcWwvdjEvYWRkX2JyZWFrcG9pbnRfcGcuc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92MS9hZGRfYnJlYWtwb2ludF9wZy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3 NTUKaW5kZXggMDAwMDAwMC4uZjgzZTFjZgotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjEvYWRkX2JyZWFrcG9pbnRfcGcuc3FsCkBAIC0wLDAgKzEsNCBA QAoreyMjIyBBZGQgUEcgYnJlYWtwb2ludCBmb3IgZGVidWdnaW5nICMjI30K K3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJn X3NldF9nbG9iYWxfYnJlYWtwb2ludCh7e3Nlc3Npb25faWR9fSwge3tmdW5j dGlvbl9vaWR9fSwgLTEsIE5VTEwpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvYXR0YWNo X3RvX3BvcnQuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVt cGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9hdHRhY2hfdG9fcG9ydC5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmI3NDQ3NwotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3Rl bXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvYXR0YWNoX3RvX3BvcnQuc3FsCkBA IC0wLDAgKzEsNCBAQAoreyMjIyBBdHRhY2ggdGhlIHRhcmdldCB0byBwb3J0 IGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgcG9ydCAlfQorICAgIFNFTEVD VCAqIEZST00gcGxkYmdfYXR0YWNoX3RvX3BvcnQoe3twb3J0fX06OmludCkK K3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC92MS9jbGVhcl9icmVha3BvaW50LnNxbCBiL3dlYi9w Z2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwv djEvY2xlYXJfYnJlYWtwb2ludC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uZWVjYzY3NAotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9z cWwvdjEvY2xlYXJfYnJlYWtwb2ludC5zcWwKQEAgLTAsMCArMSw0IEBACit7 IyMjIENsZWFyIGJyZWFrcG9pbnRzIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUg aWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdfZHJv cF9icmVha3BvaW50KHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7cG9pZH19OjpP SUQsIHt7Zm9pZH19OjpPSUQsIHt7bGluZV9udW1iZXJ9fTo6aW50KQoreyUg ZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL3YxL2NvbnRpbnVlLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvY29udGludWUu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3MWM1 M2UKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2NvbnRpbnVlLnNxbApA QCAtMCwwICsxLDExIEBACit7IyMjIENvbnRpbnVlIGZvciBkZWJ1Z2dpbmcg IyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVAorICAgICAg ICBwLnBrZyBBUyBwa2csIHAuZnVuYyBBUyBmdW5jLCBwLnRhcmdldE5hbWUg QVMgdGFyZ2V0TmFtZSwKKyAgICAgICAgcC5saW5lbnVtYmVyIEFTIGxpbmVu dW1iZXIsIHBsZGJnX2dldF9zb3VyY2Uoe3tzZXNzaW9uX2lkfX06OklOVEVH RVIsIHAucGtnLCBwLmZ1bmMpIEFTIHNyYywKKyAgICAgICAgKFNFTEVDVAor ICAgICAgICAgICAgcy5hcmdzCisgICAgICAgIEZST00gcGxkYmdfZ2V0X3N0 YWNrKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSKSBzCisgICAgICAgIFdIRVJF IHMuZnVuYyA9IHAuZnVuYyBBTkQgcy5wa2cgPSBwLnBrZykgQVMgYXJncwor ICAgIEZST00gcGxkYmdfY29udGludWUoe3tzZXNzaW9uX2lkfX06OklOVEVH RVIpIHAKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVt cGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9jcmVhdGVfbGlzdGVuZXIuc3FsIGIv d2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2Vy L3NxbC92MS9jcmVhdGVfbGlzdGVuZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NzU1CmluZGV4IDAwMDAwMDAuLjFkNDc3MzkKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YxL2NyZWF0ZV9saXN0ZW5lci5zcWwKQEAgLTAsMCArMSwyIEBA Cit7IyMjIENyZWF0ZSBsaXN0ZW5lciBmb3IgZGVidWdnaW5nICMjI30KKyAg ICBTRUxFQ1QgKiBmcm9tIHBsZGJnX2NyZWF0ZV9saXN0ZW5lcigpCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMv ZGVidWdnZXIvc3FsL3YxL2RlYnVnX3BscGdzcWxfZXhlY3V0ZV90YXJnZXQu c3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92MS9kZWJ1Z19wbHBnc3FsX2V4ZWN1dGVfdGFyZ2V0LnNx bApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZmQ2Njk0 Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn ZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9kZWJ1Z19wbHBnc3FsX2V4 ZWN1dGVfdGFyZ2V0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgRGVidWcg ZXhlY3V0ZSB0YXJnZXQgZm9yIHBscGdzcWwgZnVuY3Rpb24gIyMjfQoreyUg aWYgZnVuY3Rpb25fb2lkICV9CisgICAgU0VMRUNUIHBscGdzcWxfb2lkX2Rl YnVnKHt7cGFja2dlX29pZH19LCB7e2Z1bmN0aW9uX29pZH19KQoreyUgZW5k aWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YxL2RlYnVnX3BscGdzcWxfaW5pdC5zcWwgYi93ZWIvcGdhZG1p bi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2Rl YnVnX3BscGdzcWxfaW5pdC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMC4uMTRhZDNjNQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9w Z2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwv djEvZGVidWdfcGxwZ3NxbF9pbml0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sj IyMgRGVidWcgSW5pdGlhbGl6YXRpb24gZm9yIHBscGdzcWwgZnVuY3Rpb24g IyMjfQoreyUgaWYgcGFja2dlX2luaXRfb2lkICV9CisgICAgU0VMRUNUIHBs cGdzcWxfb2lkX2RlYnVnKHt7cGFja2dlX29pZH19OjpPSUQsIHt7cGFja2dl X2luaXRfb2lkfX06Ok9JRCkKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9kZWJ1Z19zcGxf ZXhlY3V0ZV90YXJnZXQuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn ZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9kZWJ1Z19zcGxfZXhlY3V0 ZV90YXJnZXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAuLmUxYzMyNGUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2RlYnVn X3NwbF9leGVjdXRlX3RhcmdldC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMj IERlYnVnIGV4ZWN1dGUgdGFyZ2V0IGZvciBFREIgc3BsIGZ1bmN0aW9uICMj I30KK3slIGlmIGZ1bmN0aW9uX29pZCAlfQorICAgIFNFTEVDVCBlZGJfb2lk X2RlYnVnKHt7cGFja2dlX29pZH19LCB7e2Z1bmN0aW9uX29pZH19KQoreyUg ZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL3YxL2RlYnVnX3NwbF9pbml0LnNxbCBiL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZGVi dWdfc3BsX2luaXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAuLmFhNWIzMjQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2Rl YnVnX3NwbF9pbml0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgRGVidWcg SW5pdGlhbGl6YXRpb24gZm9yIEVEQiBzcGwgZnVuY3Rpb24gIyMjfQoreyUg aWYgcGFja2dlX2luaXRfb2lkICV9CisgICAgU0VMRUNUIGVkYl9vaWRfZGVi dWcoe3twYWNrZ2Vfb2lkfX06Ok9JRCwge3twYWNrZ2VfaW5pdF9vaWR9fTo6 T0lEKQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YxL2RlcG9zaXRfdmFsdWUuc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92MS9kZXBvc2l0X3ZhbHVlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwLi44NmU5ZjRhCi0tLSAvZGV2L251bGwKKysrIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92MS9kZXBvc2l0X3ZhbHVlLnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMg Q2hhbmdlIHRoZSB2YXJpYWJsZSB2YWx1ZSBhbmQgc3VibWl0IGR1cmluZyBk ZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVD VCAqIEZST00gcGxkYmdfZGVwb3NpdF92YWx1ZSh7e3Nlc3Npb25faWR9fTo6 aW50LCB7e3Zhcl9uYW1lfHF0TGl0ZXJhbH19LCB7e2xpbmVfbnVtYmVyfX0s IHt7dmFsfHF0TGl0ZXJhbH19KQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2dldF9icmVh a3BvaW50cy5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YxL2dldF9icmVha3BvaW50cy5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTlkYTVkYgotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3Rl bXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZ2V0X2JyZWFrcG9pbnRzLnNxbApA QCAtMCwwICsxLDQgQEAKK3sjIyMgR2V0IHRoZSBicmVha3BvaW50IGluZm9y bWF0aW9uIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAl fQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdfZ2V0X2JyZWFrcG9pbnRzKHt7 c2Vzc2lvbl9pZH19OjppbnQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZ2V0X2Z1bmN0 aW9uX2luZm8uc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVt cGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9nZXRfZnVuY3Rpb25faW5mby5zcWwK bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzk4OWRhNwot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2Vy L3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZ2V0X2Z1bmN0aW9uX2luZm8u c3FsCkBAIC0wLDAgKzEsNjYgQEAKK3sjIyMgVG8gZmV0Y2ggZGVidWcgZnVu Y3Rpb24gaW5mb3JtYXRpb24gIyMjfQorU0VMRUNUCisgICAgcC5wcm9uYW1l IEFTIG5hbWUsIGwubGFubmFtZSwgcC5wcm9yZXRzZXQsIHAucHJvcmV0dHlw ZSwgeS50eXBuYW1lIEFTIHJldHR5cGUsCisgICAgQ0FTRSBXSEVOIHByb2Fs bGFyZ3R5cGVzIElTIE5PVCBOVUxMIFRIRU4KKyAgICAgICAgICAgIHBnX2Nh dGFsb2cuYXJyYXlfdG9fc3RyaW5nKEFSUkFZKAorICAgICAgICAgICAgICAg IFNFTEVDVAorICAgICAgICAgICAgICAgICAgICBwZ19jYXRhbG9nLmZvcm1h dF90eXBlKHAucHJvYWxsYXJndHlwZXNbcy5pXSwgTlVMTCkKKyAgICAgICAg ICAgICAgICBGUk9NCisgICAgICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cu Z2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIoCisg ICAgICAgICAgICAgICAgICAgICAgICBwLnByb2FsbGFyZ3R5cGVzLCAxKSkg QVMgcyhpKSksICcsJykKKyAgICAgICAgRUxTRQorICAgICAgICAgICAgcGdf Y2F0YWxvZy5hcnJheV90b19zdHJpbmcoQVJSQVkoCisgICAgICAgICAgICAg ICAgU0VMRUNUCisgICAgICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cuZm9y bWF0X3R5cGUocC5wcm9hcmd0eXBlc1tzLmldLCBOVUxMKQorICAgICAgICAg ICAgICAgIEZST00KKyAgICAgICAgICAgICAgICAgICAgcGdfY2F0YWxvZy5n ZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcigKKyAg ICAgICAgICAgICAgICAgICAgICAgIHAucHJvYXJndHlwZXMsIDEpKSBBUyBz KGkpKSwgJywnKQorICAgICAgICBFTkQgQVMgcHJvYXJndHlwZW5hbWVzLAor ICAgIENBU0UgV0hFTiBwcm9hbGxhcmd0eXBlcyBJUyBOT1QgTlVMTCBUSEVO CisgICAgICAgICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhBUlJB WSgKKyAgICAgICAgICAgICAgICBTRUxFQ1QgcHJvYWxsYXJndHlwZXNbcy5p XSBGUk9NCisgICAgICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJh dGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHJvYWxsYXJn dHlwZXMsIDEpKSBzKGkpKSwgJywnKQorICAgICAgICBFTFNFCisgICAgICAg ICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhBUlJBWSgKKyAgICAg ICAgICAgICAgICBTRUxFQ1QgcHJvYXJndHlwZXNbcy5pXSBGUk9NCisgICAg ICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAs IHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHJvYXJndHlwZXMsIDEpKSBzKGkp KSwgJywnKQorICAgICAgICBFTkQgQVMgcHJvYXJndHlwZXMsCisgICAgcGdf Y2F0YWxvZy5hcnJheV90b19zdHJpbmcocC5wcm9hcmduYW1lcywgJywnKSBB UyBwcm9hcmduYW1lcywKKyAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmlu Zyhwcm9hcmdtb2RlcywgJywnKSBBUyBwcm9hcmdtb2RlcywKKworCXslIGlm IGlzX3BwYXNfZGF0YWJhc2UgJX0KKyAgICAgICAgQ0FTRSBXSEVOIG4ubnNw cGFyZW50IDw+IDAgVEhFTiBuLm9pZCBFTFNFIDAgRU5EIEFTIHBrZywKKyAg ICAgICAgQ0FTRSBXSEVOIG4ubnNwcGFyZW50IDw+IDAgVEhFTiBuLm5zcG5h bWUgRUxTRSAnJyBFTkQgQVMgcGtnbmFtZSwKKyAgICAgICAgQ0FTRSBXSEVO IG4ubnNwcGFyZW50IDw+IDAgVEhFTiAoU0VMRUNUIG9pZCBGUk9NIHBnX3By b2MgV0hFUkUgcHJvbmFtZXNwYWNlPW4ub2lkIEFORCBwcm9uYW1lPSdjb25z JykgRUxTRSAwIEVORCBBUyBwa2djb25zb2lkLAorICAgICAgICBDQVNFIFdI RU4gbi5uc3BwYXJlbnQgPD4gMCBUSEVOIGcub2lkIEVMU0Ugbi5vaWQgRU5E IEFTIHNjaGVtYSwKKyAgICAgICAgQ0FTRSBXSEVOIG4ubnNwcGFyZW50IDw+ IDAgVEhFTiBnLm5zcG5hbWUgRUxTRSBuLm5zcG5hbWUgRU5EIEFTIHNjaGVt YW5hbWUsCisgICAgICAgIE5PVCAobC5sYW5uYW1lID0gJ2VkYnNwbCcgQU5E IHByb3R5cGUgPSAnMScpIEFTIGlzZnVuYywKKwl7JWVsc2UlfQorICAgICAg ICAwIEFTIHBrZywKKyAgICAgICAgJycgQVMgcGtnbmFtZSwKKyAgICAgICAg MCBBUyBwa2djb25zb2lkLAorICAgICAgICBuLm9pZCAgICAgQVMgc2NoZW1h LAorICAgICAgICBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKKyAgICAgICAg dHJ1ZSBBUyBpc2Z1bmMsCisJeyVlbmRpZiV9CisJcGdfY2F0YWxvZy5wZ19n ZXRfZnVuY3Rpb25faWRlbnRpdHlfYXJndW1lbnRzKHAub2lkKSBBUyBzaWdu YXR1cmUsCisKKwl7JSBpZiBoYXNGZWF0dXJlRnVuY3Rpb25EZWZhdWx0cyAl fQorICAgICAgICBwZ19jYXRhbG9nLnBnX2dldF9leHByKHAucHJvYXJnZGVm YXVsdHMsICdwZ19jYXRhbG9nLnBnX2NsYXNzJzo6cmVnY2xhc3MsIGZhbHNl KSBBUyBwcm9hcmdkZWZhdWx0cywKKyAgICAgICAgcC5wcm9uYXJnZGVmYXVs dHMKKwl7JWVsc2UlfQorCQkgJycgQVMgcHJvYXJnZGVmYXVsdHMsIDAgQVMg cHJvbmFyZ2RlZmF1bHRzCisJeyVlbmRpZiV9CisJICAgIEZST00KKyAgICAg ICAgICAgIHBnX2NhdGFsb2cucGdfcHJvYyBwCisgICAgICAgICAgICBMRUZU IEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBwLnByb25hbWVz cGFjZSA9IG4ub2lkCisgICAgICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxv Zy5wZ19sYW5ndWFnZSBsIE9OIHAucHJvbGFuZyA9IGwub2lkCisgICAgICAg ICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ190eXBlIHkgT04gcC5wcm9y ZXR0eXBlID0geS5vaWQKKworCXslIGlmIGlzX3BwYXNfZGF0YWJhc2UgJX0K KwkJTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGcgT04gbi5u c3BwYXJlbnQgPSBnLm9pZAorICAgIHslIGVuZGlmICV9CisKKwl7JSBpZiBm aWQgJX0KKwlXSEVSRSBwLm9pZCA9IHt7ZmlkfX06OmludDsKKwl7JSBlbmRp ZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjEvZ2V0X3N0YWNrX2luZm8uc3FsIGIvd2ViL3BnYWRtaW4vdG9v bHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9nZXRfc3Rh Y2tfaW5mby5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw MC4uMDUwMzRjOQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvZ2V0X3N0 YWNrX2luZm8uc3FsCkBAIC0wLDAgKzEsNCBAQAoreyMjIyBHZXQgdGhlIHN0 YWNrIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vz c2lvbl9pZCAlfQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdfZ2V0X3N0YWNr KHt7c2Vzc2lvbl9pZH19OjppbnQpIE9SREVSIEJZIGxldmVsCit7JSBlbmRp ZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjEvZ2V0X3ZhcmlhYmxlcy5zcWwgYi93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2dldF92YXJp YWJsZXMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAu LjQ3ZWJlZDUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL2dldF92YXJp YWJsZXMuc3FsCkBAIC0wLDAgKzEsOCBAQAoreyMjIyBHZXQgdGhlIHZhcmlh YmxlcyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nICMjI30KK3slIGlmIHNl c3Npb25faWQgJX0KKyAgICBTRUxFQ1QKKyAgICAgICAgbmFtZSwgdmFyQ2xh c3MsIHZhbHVlLAorCSAgICBwZ19jYXRhbG9nLmZvcm1hdF90eXBlKGR0eXBl LCBOVUxMKSBhcyBkdHlwZSwgaXNjb25zdAorCUZST00gcGxkYmdfZ2V0X3Zh cmlhYmxlcyh7e3Nlc3Npb25faWR9fTo6aW50KQorCU9SREVSIEJZIHZhckNs YXNzCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBs YXRlcy9kZWJ1Z2dlci9zcWwvdjEvc2VsZWN0X2ZyYW1lLnNxbCBiL3dlYi9w Z2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwv djEvc2VsZWN0X2ZyYW1lLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl eCAwMDAwMDAwLi5lMzFlNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92 MS9zZWxlY3RfZnJhbWUuc3FsCkBAIC0wLDAgKzEsMTIgQEAKK3sjIyMgc2Vs ZWN0IHRoZSBmcmFtZSB0byBkZWJ1ZyB0aGUgZnVuY3Rpb24gIyMjfQoreyUg aWYgc2Vzc2lvbl9pZCBhbmQgZnJhbWVfaWQgJX0KKyAgICBTRUxFQ1QKKyAg ICAgICAgcC5wa2cgQVMgcGtnLCBwLmZ1bmMgQVMgZnVuYywgcC50YXJnZXRO YW1lIEFTIHRhcmdldE5hbWUsCisgICAgICAgIHAubGluZW51bWJlciBBUyBs aW5lbnVtYmVyLAorICAgICAgICBDQVNFIFdIRU4gcC5mdW5jIDw+IDAgVEhF TiBwbGRiZ19nZXRfc291cmNlKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSLCBw LmZ1bmMsIHAucGtnKSBFTFNFICc8Tm8gc291cmNlIGF2YWlsYWJsZT4nIEVO RCBBUyBzcmMsCisgICAgICAgIChTRUxFQ1QKKyAgICAgICAgICAgIHMuYXJn cworICAgICAgICAgRlJPTSBwbGRiZ19nZXRfc3RhY2soe3tzZXNzaW9uX2lk fX06OklOVEVHRVIpIHMKKyAgICAgICAgIFdIRVJFIHMuZnVuYyA9IHAuZnVu YyBBTkQgcy5wa2cgPSBwLnBrZykgQVMgYXJncworICAgIEZST00gcGxkYmdf c2VsZWN0X2ZyYW1lKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSLCB7e2ZyYW1l X2lkfX06OklOVEVHRVIpIHAKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9zZXRfYnJlYWtw b2ludC5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0 ZXMvZGVidWdnZXIvc3FsL3YxL3NldF9icmVha3BvaW50LnNxbApuZXcgZmls ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MWM4YjEzCi0tLSAvZGV2 L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92MS9zZXRfYnJlYWtwb2ludC5zcWwKQEAgLTAs MCArMSw0IEBACit7IyMjIFNldCB0aGUgYnJlYWtwb2ludHMgZm9yIGRlYnVn Z2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAgU0VMRUNUICog RlJPTSBwbGRiZ19zZXRfYnJlYWtwb2ludCh7e3Nlc3Npb25faWR9fTo6aW50 ICx7e3BvaWR9fTo6T0lELCB7e2ZvaWR9fTo6T0lELCB7e2xpbmVfbnVtYmVy fX06OmludCkKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS9zdGVwX2ludG8uc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92MS9zdGVwX2ludG8uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAuLjgzNzI4N2QKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3Yx L3N0ZXBfaW50by5zcWwKQEAgLTAsMCArMSwxMSBAQAoreyMjIyBTdGVwIGlu dG8gZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9u X2lkICV9CisgICAgU0VMRUNUCisgICAgICAgIHAucGtnIEFTIHBrZywgcC5m dW5jIEFTIGZ1bmMsIHAudGFyZ2V0TmFtZSBBUyB0YXJnZXROYW1lLAorICAg ICAgICBwLmxpbmVudW1iZXIgQVMgbGluZW51bWJlciwgcGxkYmdfZ2V0X3Nv dXJjZSh7e3Nlc3Npb25faWR9fTo6SU5URUdFUiwgcC5wa2csIHAuZnVuYykg QVMgc3JjLAorICAgICAgICAoU0VMRUNUCisgICAgICAgICAgICBzLmFyZ3MK KyAgICAgICAgIEZST00gcGxkYmdfZ2V0X3N0YWNrKHt7c2Vzc2lvbl9pZH19 OjpJTlRFR0VSKSBzCisgICAgICAgICBXSEVSRSBzLmZ1bmMgPSBwLmZ1bmMg QU5EIHMucGtnID0gcC5wa2cpIEFTIGFyZ3MKKyAgICBGUk9NIHBsZGJnX3N0 ZXBfaW50byh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcAoreyUgZW5kaWYg JX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIv c3FsL3YxL3N0ZXBfb3Zlci5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL3N0ZXBfb3Zlci5zcWwK bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTVjZWQ2Ngot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2Vy L3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjEvc3RlcF9vdmVyLnNxbApAQCAt MCwwICsxLDExIEBACit7IyMjIFN0ZXAgb3ZlciBmdW5jdGlvbiBmb3IgZGVi dWdnaW5nICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QK KyAgICAgICAgcC5wa2cgQVMgcGtnLCBwLmZ1bmMgQVMgZnVuYywgcC50YXJn ZXROYW1lIEFTIHRhcmdldE5hbWUsCisgICAgICAgIHAubGluZW51bWJlciBB UyBsaW5lbnVtYmVyLCBwbGRiZ19nZXRfc291cmNlKHt7c2Vzc2lvbl9pZH19 OjpJTlRFR0VSLCBwLnBrZywgcC5mdW5jKSBBUyBzcmMsCisgICAgICAgIChT RUxFQ1QKKyAgICAgICAgICAgIHMuYXJncworICAgICAgICBGUk9NIHBsZGJn X2dldF9zdGFjayh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcworICAgICAg ICBXSEVSRSBzLmZ1bmMgPSBwLmZ1bmMgQU5EIHMucGtnID0gcC5wa2cpIEFT IGFyZ3MKKyAgICBGUk9NIHBsZGJnX3N0ZXBfb3Zlcih7e3Nlc3Npb25faWR9 fTo6SU5URUdFUikgcAoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1 Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YxL3dhaXRfZm9yX2JyZWFr cG9pbnQuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxh dGVzL2RlYnVnZ2VyL3NxbC92MS93YWl0X2Zvcl9icmVha3BvaW50LnNxbApu ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMjcxMDU2Ci0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS93YWl0X2Zvcl9icmVha3BvaW50 LnNxbApAQCAtMCwwICsxLDExIEBACit7IyMjIHNlbGVjdCB0aGUgZnJhbWUg dG8gZGVidWcgdGhlIGZ1bmN0aW9uICMjI30KK3slIGlmIHNlc3Npb25faWQg JX0KKyAgICBTRUxFQ1QKKyAgICAgICAgcC5wa2cgQVMgcGtnLCBwLmZ1bmMg QVMgZnVuYywgcC50YXJnZXROYW1lIEFTIHRhcmdldE5hbWUsCisgICAgICAg IHAubGluZW51bWJlciBBUyBsaW5lbnVtYmVyLCBwbGRiZ19nZXRfc291cmNl KHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSLCBwLnBrZywgcC5mdW5jKSBBUyBz cmMsCisgICAgICAgIChTRUxFQ1QKKyAgICAgICAgICAgIHMuYXJncworICAg ICAgICAgRlJPTSBwbGRiZ19nZXRfc3RhY2soe3tzZXNzaW9uX2lkfX06OklO VEVHRVIpIHMKKyAgICAgICAgIFdIRVJFIHMuZnVuYyA9IHAuZnVuYyBBTkQg cy5wa2cgPSBwLnBrZykgQVMgYXJncworICAgIEZST00gcGxkYmdfd2FpdF9m b3JfYnJlYWtwb2ludCh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikgcDsKK3sl IGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92MS93YWl0X2Zvcl90YXJnZXQuc3FsIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92MS93 YWl0X2Zvcl90YXJnZXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAuLmM0ZjU2MzQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3Yx L3dhaXRfZm9yX3RhcmdldC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIFdh aXQgZm9yIHRoZSB0YXJnZXQgZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBz ZXNzaW9uX2lkICV9CisgICAgU0VMRUNUICogRlJPTSBwbGRiZ193YWl0X2Zv cl90YXJnZXQoe3tzZXNzaW9uX2lkfX06OmludCkKK3slIGVuZGlmICV9Clwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92 Mi9CYWNrZW5kX3J1bm5pbmcuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVi dWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9CYWNrZW5kX3J1bm5p bmcuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1 NzcwZDAKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9k ZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL0JhY2tlbmRfcnVu bmluZy5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIENoZWNrIGJhY2tlbmQg dGFyZ2V0IGlzIHJ1bm5pbmcgb3Igbm90IGZvciBkZWJ1Z2dpbmcgIyMjfQor eyUgaWYgYmFja2VuZF9waWQgJX0KKyAgICBTRUxFQ1QgQ09VTlQoKikgRlJP TSAoU0VMRUNUIHBnX2NhdGFsb2cucGdfc3RhdF9nZXRfYmFja2VuZF9pZHNl dCgpIEFTIGJpZCkgQVMgcyBXSEVSRSBwZ19jYXRhbG9nLnBnX3N0YXRfZ2V0 X2JhY2tlbmRfcGlkKHMuYmlkKSA9IHt7IGNvbm58cXRJZGVudChiYWNrZW5k X3BpZCkgfX06OmludGVnZXI7Cit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvYWJvcnRfdGFy Z2V0LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRl cy9kZWJ1Z2dlci9zcWwvdjIvYWJvcnRfdGFyZ2V0LnNxbApuZXcgZmlsZSBt b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Zjg5YWUzCi0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC92Mi9hYm9ydF90YXJnZXQuc3FsCkBAIC0wLDAgKzEs NCBAQAoreyMjIyBBYm9ydCB0aGUgdGFyZ2V0IGZvciBkZWJ1Z2dpbmcgIyMj fQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVCAqIEZST00gcGxk YmdfYWJvcnRfdGFyZ2V0KHt7c2Vzc2lvbl9pZH19OjppbnQpCit7JSBlbmRp ZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjIvYWRkX2JyZWFrcG9pbnRfZWRiLnNxbCBiL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvYWRk X2JyZWFrcG9pbnRfZWRiLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl eCAwMDAwMDAwLi4wMTI5NDYyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92 Mi9hZGRfYnJlYWtwb2ludF9lZGIuc3FsCkBAIC0wLDAgKzEsNCBAQAoreyMj IyBBZGQgRURCIGJyZWFrcG9pbnRzIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUg aWYgc2Vzc2lvbl9pZCAlfQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdfc2V0 X2dsb2JhbF9icmVha3BvaW50KHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7cGFj a2FnZV9vaWR9fTo6aW50LCB7e2Z1bmN0aW9uX29pZH19OjpPSUQsIC0xLCB7 e3RhcmdldF9vaWR9fTo6aW50KQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29s cy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2FkZF9icmVh a3BvaW50X3BnLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3Rl bXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvYWRkX2JyZWFrcG9pbnRfcGcuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4M2UxY2YK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2FkZF9icmVha3BvaW50X3Bn LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgQWRkIFBHIGJyZWFrcG9pbnQg Zm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAg U0VMRUNUICogRlJPTSBwbGRiZ19zZXRfZ2xvYmFsX2JyZWFrcG9pbnQoe3tz ZXNzaW9uX2lkfX0sIHt7ZnVuY3Rpb25fb2lkfX0sIC0xLCBOVUxMKQoreyUg ZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL3YyL2F0dGFjaF90b19wb3J0LnNxbCBiL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvYXR0 YWNoX3RvX3BvcnQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAuLmJiNzQ0NzcKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2F0 dGFjaF90b19wb3J0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgQXR0YWNo IHRoZSB0YXJnZXQgdG8gcG9ydCBmb3IgZGVidWdnaW5nICMjI30KK3slIGlm IHBvcnQgJX0KKyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJnX2F0dGFjaF90b19w b3J0KHt7cG9ydH19OjppbnQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvY2xlYXJfYnJl YWtwb2ludC5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YyL2NsZWFyX2JyZWFrcG9pbnQuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMzZDgzZjgKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90 ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2NsZWFyX2JyZWFrcG9pbnQuc3Fs CkBAIC0wLDAgKzEsNCBAQAoreyMjIyBDbGVhciBicmVha3BvaW50cyBmb3Ig ZGVidWdnaW5nICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxF Q1QgKiBGUk9NIHBsZGJnX2Ryb3BfYnJlYWtwb2ludCh7e3Nlc3Npb25faWR9 fTo6aW50LCB7e2ZvaWR9fTo6T0lELCB7e2xpbmVfbnVtYmVyfX06OmludCkK K3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC92Mi9jb250aW51ZS5zcWwgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2NvbnRp bnVlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44 NWRjZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9jb250aW51ZS5z cWwKQEAgLTAsMCArMSwxMSBAQAoreyMjIyBDb250aW51ZSBmb3IgZGVidWdn aW5nICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QKKyAg ICAgICAgcC5mdW5jLCBwLnRhcmdldE5hbWUsIHAubGluZW51bWJlciwKKyAg ICAgICAgcGxkYmdfZ2V0X3NvdXJjZSh7e3Nlc3Npb25faWR9fTo6SU5URUdF UiwgcC5mdW5jKSBBUyBzcmMsCisgICAgICAgIChTRUxFQ1QKKyAgICAgICAg ICAgIHMuYXJncworICAgICAgICBGUk9NIHBsZGJnX2dldF9zdGFjayh7e3Nl c3Npb25faWR9fTo6SU5URUdFUikgcworICAgICAgICBXSEVSRSBzLmZ1bmMg PSBwLmZ1bmMpIEFTIGFyZ3MKKyAgICBGUk9NIHBsZGJnX2NvbnRpbnVlKHt7 c2Vzc2lvbl9pZH19OjpJTlRFR0VSKSBwCit7JSBlbmRpZiAlfQpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvY3Jl YXRlX2xpc3RlbmVyLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2Vy L3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvY3JlYXRlX2xpc3RlbmVyLnNx bApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZDQ3NzM5 Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn ZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9jcmVhdGVfbGlzdGVuZXIu c3FsCkBAIC0wLDAgKzEsMiBAQAoreyMjIyBDcmVhdGUgbGlzdGVuZXIgZm9y IGRlYnVnZ2luZyAjIyN9CisgICAgU0VMRUNUICogZnJvbSBwbGRiZ19jcmVh dGVfbGlzdGVuZXIoKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv ZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9kZWJ1Z19wbHBn c3FsX2V4ZWN1dGVfdGFyZ2V0LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2Rl YnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZGVidWdfcGxwZ3Nx bF9leGVjdXRlX3RhcmdldC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMC4uNjJhOGUzMgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9w Z2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwv djIvZGVidWdfcGxwZ3NxbF9leGVjdXRlX3RhcmdldC5zcWwKQEAgLTAsMCAr MSw0IEBACit7IyMjIERlYnVnIGV4ZWN1dGUgdGFyZ2V0IGZvciBwbHBnc3Fs IGZ1bmN0aW9uICMjI30KK3slIGlmIGZ1bmN0aW9uX29pZCAlfQorICAgIFNF TEVDVCBwbHBnc3FsX29pZF9kZWJ1Zyh7e2Z1bmN0aW9uX29pZH19KQoreyUg ZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL3YyL2RlYnVnX3BscGdzcWxfaW5pdC5zcWwgYi93ZWIvcGdh ZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3Yy L2RlYnVnX3BscGdzcWxfaW5pdC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uZTU2YWQ5OAotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9z cWwvdjIvZGVidWdfcGxwZ3NxbF9pbml0LnNxbApAQCAtMCwwICsxLDQgQEAK K3sjIyMgRGVidWcgSW5pdGlhbGl6YXRpb24gZm9yIHBscGdzcWwgZnVuY3Rp b24gIyMjfQoreyUgaWYgcGFja2dlX2luaXRfb2lkICV9CisgICAgU0VMRUNU IHBscGdzcWxfb2lkX2RlYnVnKHt7cGFja2dlX2luaXRfb2lkfX06Ok9JRCkK K3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC92Mi9kZWJ1Z19zcGxfZXhlY3V0ZV90YXJnZXQuc3Fs IGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVn Z2VyL3NxbC92Mi9kZWJ1Z19zcGxfZXhlY3V0ZV90YXJnZXQuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0ZTQyMjkKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YyL2RlYnVnX3NwbF9leGVjdXRlX3Rhcmdl dC5zcWwKQEAgLTAsMCArMSw0IEBACit7IyMjIERlYnVnIGV4ZWN1dGUgdGFy Z2V0IGZvciBFREIgc3BsIGZ1bmN0aW9uICMjI30KK3slIGlmIGZ1bmN0aW9u X29pZCAlfQorICAgIFNFTEVDVCBlZGJfb2lkX2RlYnVnKHt7ZnVuY3Rpb25f b2lkfX0pCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3Rl bXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZGVidWdfc3BsX2luaXQuc3FsIGIv d2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2Vy L3NxbC92Mi9kZWJ1Z19zcGxfaW5pdC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3 NTUKaW5kZXggMDAwMDAwMC4uZDE2YjFiMQotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjIvZGVidWdfc3BsX2luaXQuc3FsCkBAIC0wLDAgKzEsNCBAQAor eyMjIyBEZWJ1ZyBJbml0aWFsaXphdGlvbiBmb3IgRURCIHNwbCBmdW5jdGlv biAjIyN9Cit7JSBpZiBwYWNrZ2VfaW5pdF9vaWQgJX0KKyAgICBTRUxFQ1Qg ZWRiX29pZF9kZWJ1Zyh7e3BhY2tnZV9pbml0X29pZH19OjpPSUQpCit7JSBl bmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1 Z2dlci9zcWwvdjIvZGVwb3NpdF92YWx1ZS5zcWwgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2RlcG9z aXRfdmFsdWUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAuLjZlZTMyNTkKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2RlcG9z aXRfdmFsdWUuc3FsCkBAIC0wLDAgKzEsNCBAQAoreyMjIyBDaGFuZ2UgdGhl IHZhcmlhYmxlIHZhbHVlIGFuZCBzdWJtaXQgZHVyaW5nIGRlYnVnZ2luZyAj IyN9Cit7JSBpZiBzZXNzaW9uX2lkICV9CisgICAgU0VMRUNUICogRlJPTSBw bGRiZ19kZXBvc2l0X3ZhbHVlKHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7dmFy X25hbWV8cXRMaXRlcmFsIH19LCB7e2xpbmVfbnVtYmVyfX0sIHt7dmFsfHF0 TGl0ZXJhbH19KQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2dldF9icmVha3BvaW50cy5z cWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVi dWdnZXIvc3FsL3YyL2dldF9icmVha3BvaW50cy5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTlkYTVkYgotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9k ZWJ1Z2dlci9zcWwvdjIvZ2V0X2JyZWFrcG9pbnRzLnNxbApAQCAtMCwwICsx LDQgQEAKK3sjIyMgR2V0IHRoZSBicmVha3BvaW50IGluZm9ybWF0aW9uIGZv ciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAlfQorICAgIFNF TEVDVCAqIEZST00gcGxkYmdfZ2V0X2JyZWFrcG9pbnRzKHt7c2Vzc2lvbl9p ZH19OjppbnQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2Vy L3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZ2V0X2Z1bmN0aW9uX2luZm8u c3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2Rl YnVnZ2VyL3NxbC92Mi9nZXRfZnVuY3Rpb25faW5mby5zcWwKbmV3IGZpbGUg bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzk4OWRhNwotLS0gL2Rldi9u dWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRl cy9kZWJ1Z2dlci9zcWwvdjIvZ2V0X2Z1bmN0aW9uX2luZm8uc3FsCkBAIC0w LDAgKzEsNjYgQEAKK3sjIyMgVG8gZmV0Y2ggZGVidWcgZnVuY3Rpb24gaW5m b3JtYXRpb24gIyMjfQorU0VMRUNUCisgICAgcC5wcm9uYW1lIEFTIG5hbWUs IGwubGFubmFtZSwgcC5wcm9yZXRzZXQsIHAucHJvcmV0dHlwZSwgeS50eXBu YW1lIEFTIHJldHR5cGUsCisgICAgQ0FTRSBXSEVOIHByb2FsbGFyZ3R5cGVz IElTIE5PVCBOVUxMIFRIRU4KKyAgICAgICAgICAgIHBnX2NhdGFsb2cuYXJy YXlfdG9fc3RyaW5nKEFSUkFZKAorICAgICAgICAgICAgICAgIFNFTEVDVAor ICAgICAgICAgICAgICAgICAgICBwZ19jYXRhbG9nLmZvcm1hdF90eXBlKHAu cHJvYWxsYXJndHlwZXNbcy5pXSwgTlVMTCkKKyAgICAgICAgICAgICAgICBG Uk9NCisgICAgICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJhdGVf c2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIoCisgICAgICAgICAg ICAgICAgICAgICAgICBwLnByb2FsbGFyZ3R5cGVzLCAxKSkgQVMgcyhpKSks ICcsJykKKyAgICAgICAgRUxTRQorICAgICAgICAgICAgcGdfY2F0YWxvZy5h cnJheV90b19zdHJpbmcoQVJSQVkoCisgICAgICAgICAgICAgICAgU0VMRUNU CisgICAgICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUo cC5wcm9hcmd0eXBlc1tzLmldLCBOVUxMKQorICAgICAgICAgICAgICAgIEZS T00KKyAgICAgICAgICAgICAgICAgICAgcGdfY2F0YWxvZy5nZW5lcmF0ZV9z ZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcigKKyAgICAgICAgICAg ICAgICAgICAgICAgIHAucHJvYXJndHlwZXMsIDEpKSBBUyBzKGkpKSwgJywn KQorICAgICAgICBFTkQgQVMgcHJvYXJndHlwZW5hbWVzLAorICAgIENBU0Ug V0hFTiBwcm9hbGxhcmd0eXBlcyBJUyBOT1QgTlVMTCBUSEVOCisgICAgICAg ICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhBUlJBWSgKKyAgICAg ICAgICAgICAgICBTRUxFQ1QgcHJvYWxsYXJndHlwZXNbcy5pXSBGUk9NCisg ICAgICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVz KDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHJvYWxsYXJndHlwZXMsIDEp KSBzKGkpKSwgJywnKQorICAgICAgICBFTFNFCisgICAgICAgICAgICBwZ19j YXRhbG9nLmFycmF5X3RvX3N0cmluZyhBUlJBWSgKKyAgICAgICAgICAgICAg ICBTRUxFQ1QgcHJvYXJndHlwZXNbcy5pXSBGUk9NCisgICAgICAgICAgICAg ICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFs b2cuYXJyYXlfdXBwZXIocHJvYXJndHlwZXMsIDEpKSBzKGkpKSwgJywnKQor ICAgICAgICBFTkQgQVMgcHJvYXJndHlwZXMsCisgICAgcGdfY2F0YWxvZy5h cnJheV90b19zdHJpbmcocC5wcm9hcmduYW1lcywgJywnKSBBUyBwcm9hcmdu YW1lcywKKyAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyhwcm9hcmdt b2RlcywgJywnKSBBUyBwcm9hcmdtb2RlcywKKworCXslIGlmIGlzX3BwYXNf ZGF0YWJhc2UgJX0KKyAgICAgICAgQ0FTRSBXSEVOIG4ubnNwcGFyZW50IDw+ IDAgVEhFTiBuLm9pZCBFTFNFIDAgRU5EIEFTIHBrZywKKyAgICAgICAgQ0FT RSBXSEVOIG4ubnNwcGFyZW50IDw+IDAgVEhFTiBuLm5zcG5hbWUgRUxTRSAn JyBFTkQgQVMgcGtnbmFtZSwKKyAgICAgICAgQ0FTRSBXSEVOIG4ubnNwcGFy ZW50IDw+IDAgVEhFTiAoU0VMRUNUIG9pZCBGUk9NIHBnX3Byb2MgV0hFUkUg cHJvbmFtZXNwYWNlPW4ub2lkIEFORCBwcm9uYW1lPSdjb25zJykgRUxTRSAw IEVORCBBUyBwa2djb25zb2lkLAorICAgICAgICBDQVNFIFdIRU4gbi5uc3Bw YXJlbnQgPD4gMCBUSEVOIGcub2lkIEVMU0Ugbi5vaWQgRU5EIEFTIHNjaGVt YSwKKyAgICAgICAgQ0FTRSBXSEVOIG4ubnNwcGFyZW50IDw+IDAgVEhFTiBn Lm5zcG5hbWUgRUxTRSBuLm5zcG5hbWUgRU5EIEFTIHNjaGVtYW5hbWUsCisg ICAgICAgIE5PVCAobC5sYW5uYW1lID0gJ2VkYnNwbCcgQU5EIHByb3R5cGUg PSAnMScpIEFTIGlzZnVuYywKKwl7JWVsc2UlfQorICAgICAgICAwIEFTIHBr ZywKKyAgICAgICAgJycgQVMgcGtnbmFtZSwKKyAgICAgICAgMCBBUyBwa2dj b25zb2lkLAorICAgICAgICBuLm9pZCAgICAgQVMgc2NoZW1hLAorICAgICAg ICBuLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKKyAgICAgICAgdHJ1ZSBBUyBp c2Z1bmMsCisJeyVlbmRpZiV9CisJcGdfY2F0YWxvZy5wZ19nZXRfZnVuY3Rp b25faWRlbnRpdHlfYXJndW1lbnRzKHAub2lkKSBBUyBzaWduYXR1cmUsCisK Kwl7JSBpZiBoYXNGZWF0dXJlRnVuY3Rpb25EZWZhdWx0cyAlfQorICAgICAg ICBwZ19jYXRhbG9nLnBnX2dldF9leHByKHAucHJvYXJnZGVmYXVsdHMsICdw Z19jYXRhbG9nLnBnX2NsYXNzJzo6cmVnY2xhc3MsIGZhbHNlKSBBUyBwcm9h cmdkZWZhdWx0cywKKyAgICAgICAgcC5wcm9uYXJnZGVmYXVsdHMKKwl7JWVs c2UlfQorCQkgJycgQVMgcHJvYXJnZGVmYXVsdHMsIDAgQVMgcHJvbmFyZ2Rl ZmF1bHRzCisJeyVlbmRpZiV9CisJICAgIEZST00KKyAgICAgICAgICAgIHBn X2NhdGFsb2cucGdfcHJvYyBwCisgICAgICAgICAgICBMRUZUIEpPSU4gcGdf Y2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBwLnByb25hbWVzcGFjZSA9IG4u b2lkCisgICAgICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19sYW5n dWFnZSBsIE9OIHAucHJvbGFuZyA9IGwub2lkCisgICAgICAgICAgICBMRUZU IEpPSU4gcGdfY2F0YWxvZy5wZ190eXBlIHkgT04gcC5wcm9yZXR0eXBlID0g eS5vaWQKKworCXslIGlmIGlzX3BwYXNfZGF0YWJhc2UgJX0KKwkJTEVGVCBK T0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGcgT04gbi5uc3BwYXJlbnQg PSBnLm9pZAorICAgIHslIGVuZGlmICV9CisKKwl7JSBpZiBmaWQgJX0KKwlX SEVSRSBwLm9pZCA9IHt7ZmlkfX06OmludDsKKwl7JSBlbmRpZiAlfQpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIv Z2V0X3N0YWNrX2luZm8uc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdn ZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9nZXRfc3RhY2tfaW5mby5z cWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDUwMzRj OQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVn Z2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvZ2V0X3N0YWNrX2luZm8u c3FsCkBAIC0wLDAgKzEsNCBAQAoreyMjIyBHZXQgdGhlIHN0YWNrIGluZm9y bWF0aW9uIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vzc2lvbl9pZCAl fQorICAgIFNFTEVDVCAqIEZST00gcGxkYmdfZ2V0X3N0YWNrKHt7c2Vzc2lv bl9pZH19OjppbnQpIE9SREVSIEJZIGxldmVsCit7JSBlbmRpZiAlfQpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIv Z2V0X3ZhcmlhYmxlcy5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2dldF92YXJpYWJsZXMuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3ZWJlZDUK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dl ci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL2dldF92YXJpYWJsZXMuc3Fs CkBAIC0wLDAgKzEsOCBAQAoreyMjIyBHZXQgdGhlIHZhcmlhYmxlcyBpbmZv cm1hdGlvbiBmb3IgZGVidWdnaW5nICMjI30KK3slIGlmIHNlc3Npb25faWQg JX0KKyAgICBTRUxFQ1QKKyAgICAgICAgbmFtZSwgdmFyQ2xhc3MsIHZhbHVl LAorCSAgICBwZ19jYXRhbG9nLmZvcm1hdF90eXBlKGR0eXBlLCBOVUxMKSBh cyBkdHlwZSwgaXNjb25zdAorCUZST00gcGxkYmdfZ2V0X3ZhcmlhYmxlcyh7 e3Nlc3Npb25faWR9fTo6aW50KQorCU9SREVSIEJZIHZhckNsYXNzCit7JSBl bmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1 Z2dlci9zcWwvdjIvc2VsZWN0X2ZyYW1lLnNxbCBiL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvc2VsZWN0 X2ZyYW1lLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw Li40YTE4ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9v bHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9zZWxlY3Rf ZnJhbWUuc3FsCkBAIC0wLDAgKzEsMTEgQEAKK3sjIyMgc2VsZWN0IHRoZSBm cmFtZSB0byBkZWJ1ZyB0aGUgZnVuY3Rpb24gIyMjfQoreyUgaWYgc2Vzc2lv bl9pZCAlfQorICAgIFNFTEVDVAorICAgICAgICBwLmZ1bmMgQVMgZnVuYywg cC50YXJnZXROYW1lIEFTIHRhcmdldE5hbWUsIHAubGluZW51bWJlciBBUyBs aW5lbnVtYmVyLAorICAgICAgICBDQVNFIFdIRU4gcC5mdW5jIDw+IDAgVEhF TiBwbGRiZ19nZXRfc291cmNlKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSLCBw LmZ1bmMpIEVMU0UgJzxObyBzb3VyY2UgYXZhaWxhYmxlPicgRU5EIEFTIHNy YywKKyAgICAgICAgKFNFTEVDVAorICAgICAgICAgICAgcy5hcmdzCisgICAg ICAgICBGUk9NIHBsZGJnX2dldF9zdGFjayh7e3Nlc3Npb25faWR9fTo6SU5U RUdFUikgcworICAgICAgICAgV0hFUkUgcy5mdW5jID0gcC5mdW5jKSBBUyBh cmdzCisgICAgRlJPTSBwbGRiZ19zZWxlY3RfZnJhbWUoe3tzZXNzaW9uX2lk fX06OklOVEVHRVIsIHt7ZnJhbWVfaWR9fTo6SU5URUdFUikgcAoreyUgZW5k aWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdn ZXIvc3FsL3YyL3NldF9icmVha3BvaW50LnNxbCBiL3dlYi9wZ2FkbWluL3Rv b2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvc2V0X2Jy ZWFrcG9pbnQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAuLmE1NmQ2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90 b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3YyL3NldF9i cmVha3BvaW50LnNxbApAQCAtMCwwICsxLDQgQEAKK3sjIyMgU2V0IHRoZSBi cmVha3BvaW50cyBmb3IgZGVidWdnaW5nICMjI30KK3slIGlmIHNlc3Npb25f aWQgJX0KKyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJnX3NldF9icmVha3BvaW50 KHt7c2Vzc2lvbl9pZH19OjppbnQsIHt7Zm9pZH19OjpPSUQse3tsaW5lX251 bWJlcn19OjppbnQpCit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVn Z2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9zcWwvdjIvc3RlcF9pbnRvLnNxbCBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dl ci9zcWwvdjIvc3RlcF9pbnRvLnNxbApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwLi5jZDA1MjQwCi0tLSAvZGV2L251bGwKKysrIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92Mi9zdGVwX2ludG8uc3FsCkBAIC0wLDAgKzEsMTEgQEAKK3sjIyMgU3Rl cCBpbnRvIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgIyMjfQoreyUgaWYgc2Vz c2lvbl9pZCAlfQorICAgIFNFTEVDVAorICAgICAgICBwLmZ1bmMsIHAudGFy Z2V0TmFtZSwgcC5saW5lbnVtYmVyLAorICAgICAgICBwbGRiZ19nZXRfc291 cmNlKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSLCBwLmZ1bmMpIEFTIHNyYywK KyAgICAgICAgKFNFTEVDVAorICAgICAgICAgICAgcy5hcmdzCisgICAgICAg ICBGUk9NIHBsZGJnX2dldF9zdGFjayh7e3Nlc3Npb25faWR9fTo6SU5URUdF UikgcworICAgICAgICAgV0hFUkUgcy5mdW5jID0gcC5mdW5jKSBBUyBhcmdz CisgICAgRlJPTSBwbGRiZ19zdGVwX2ludG8oe3tzZXNzaW9uX2lkfX06OklO VEVHRVIpIHAKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIv dGVtcGxhdGVzL2RlYnVnZ2VyL3NxbC92Mi9zdGVwX292ZXIuc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVnZ2VyL3Nx bC92Mi9zdGVwX292ZXIuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAuLmVkMzE1M2QKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3FsL3Yy L3N0ZXBfb3Zlci5zcWwKQEAgLTAsMCArMSwxMSBAQAoreyMjIyBTdGVwIG92 ZXIgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyAjIyN9Cit7JSBpZiBzZXNzaW9u X2lkICV9CisgICAgU0VMRUNUCisgICAgICAgIHAuZnVuYywgcC50YXJnZXRO YW1lLCBwLmxpbmVudW1iZXIsCisgICAgICAgIHBsZGJnX2dldF9zb3VyY2Uo e3tzZXNzaW9uX2lkfX06OklOVEVHRVIsIHAuZnVuYykgQVMgc3JjLAorICAg ICAgICAoU0VMRUNUCisgICAgICAgICAgICBzLmFyZ3MKKyAgICAgICAgIEZS T00gcGxkYmdfZ2V0X3N0YWNrKHt7c2Vzc2lvbl9pZH19OjpJTlRFR0VSKSBz CisgICAgICAgICBXSEVSRSBzLmZ1bmMgPSBwLmZ1bmMpIEFTIGFyZ3MKKyAg ICBGUk9NIHBsZGJnX3N0ZXBfb3Zlcih7e3Nlc3Npb25faWR9fTo6SU5URUdF UikgcAoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1w bGF0ZXMvZGVidWdnZXIvc3FsL3YyL3dhaXRfZm9yX2JyZWFrcG9pbnQuc3Fs IGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVzL2RlYnVn Z2VyL3NxbC92Mi93YWl0X2Zvcl9icmVha3BvaW50LnNxbApuZXcgZmlsZSBt b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NmVmY2I4Ci0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGVidWdnZXIvdGVtcGxhdGVz L2RlYnVnZ2VyL3NxbC92Mi93YWl0X2Zvcl9icmVha3BvaW50LnNxbApAQCAt MCwwICsxLDEyIEBACit7IyMjIHNlbGVjdCB0aGUgZnJhbWUgdG8gZGVidWcg dGhlIGZ1bmN0aW9uICMjI30KK3slIGlmIHNlc3Npb25faWQgJX0KKyAgICBT RUxFQ1QKKyAgICAgICAgcC5mdW5jIEFTIGZ1bmMsIHAudGFyZ2V0TmFtZSBB UyB0YXJnZXROYW1lLAorICAgICAgICBwLmxpbmVudW1iZXIgQVMgbGluZW51 bWJlciwKKyAgICAgICAgcGxkYmdfZ2V0X3NvdXJjZSh7e3Nlc3Npb25faWR9 fTo6SU5URUdFUiwgcC5mdW5jKSBBUyBzcmMsCisgICAgICAgIChTRUxFQ1QK KyAgICAgICAgICAgIHMuYXJncworICAgICAgICAgRlJPTSBwbGRiZ19nZXRf c3RhY2soe3tzZXNzaW9uX2lkfX06OklOVEVHRVIpIHMKKyAgICAgICAgIFdI RVJFIHMuZnVuYyA9IHAuZnVuYykgQVMgYXJncworICAgIEZST00gcGxkYmdf d2FpdF9mb3JfYnJlYWtwb2ludCh7e3Nlc3Npb25faWR9fTo6SU5URUdFUikg cAoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0 ZXMvZGVidWdnZXIvc3FsL3YyL3dhaXRfZm9yX3RhcmdldC5zcWwgYi93ZWIv cGdhZG1pbi90b29scy9kZWJ1Z2dlci90ZW1wbGF0ZXMvZGVidWdnZXIvc3Fs L3YyL3dhaXRfZm9yX3RhcmdldC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uYzRmNTYzNAotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2RlYnVnZ2VyL3RlbXBsYXRlcy9kZWJ1Z2dlci9z cWwvdjIvd2FpdF9mb3JfdGFyZ2V0LnNxbApAQCAtMCwwICsxLDQgQEAKK3sj IyMgV2FpdCBmb3IgdGhlIHRhcmdldCBmb3IgZGVidWdnaW5nICMjI30KK3sl IGlmIHNlc3Npb25faWQgJX0KKyAgICBTRUxFQ1QgKiBGUk9NIHBsZGJnX3dh aXRfZm9yX3RhcmdldCh7e3Nlc3Npb25faWR9fTo6aW50KQoreyUgZW5kaWYg JX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93 ZWIvc2V0dXAucHkgYi93ZWIvc2V0dXAucHkKaW5kZXggNjkwNzQ0YS4uMDFl NjlhMSAxMDA2NDQKLS0tIGEvd2ViL3NldHVwLnB5CisrKyBiL3dlYi9zZXR1 cC5weQpAQCAtMjE3LDYgKzIxNywyMSBAQCBDUkVBVEUgVEFCTEUgdXNlcl9w cmVmZXJlbmNlcyAoCiAgICAgRk9SRUlHTiBLRVkodWlkKSBSRUZFUkVOQ0VT IHVzZXIgKGlkKQogICAgICkiIiIpCiAKKyAgICAgICAgaWYgaW50KHZlcnNp b24udmFsdWUpIDwgOToKKyAgICAgICAgICAgIGRiLmVuZ2luZS5leGVjdXRl KCIiIgorQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZGVidWdnZXJfZnVu Y3Rpb25fYXJndW1lbnRzICgKKyAgICBzZXJ2ZXJfaWQgSU5URUdFUiAsCisg ICAgZGF0YWJhc2VfaWQgSU5URUdFUiAsCisgICAgc2NoZW1hX2lkIElOVEVH RVIgLAorICAgIGZ1bmN0aW9uX2lkIElOVEVHRVIgLAorICAgIGFyZ19pZCBJ TlRFR0VSICwKKyAgICBpc19udWxsIElOVEVHRVIgTk9UIE5VTEwgQ0hFQ0sg KGlzX251bGwgPj0gMCBBTkQgaXNfbnVsbCA8PSAxKSAsCisgICAgaXNfZXhw cmVzc2lvbiBJTlRFR0VSIE5PVCBOVUxMIENIRUNLIChpc19leHByZXNzaW9u ID49IDAgQU5EIGlzX2V4cHJlc3Npb24gPD0gMSkgLAorICAgIHVzZV9kZWZh dWx0IElOVEVHRVIgTk9UIE5VTEwgQ0hFQ0sgKHVzZV9kZWZhdWx0ID49IDAg QU5EIHVzZV9kZWZhdWx0IDw9IDEpICwKKyAgICB2YWx1ZSBURVhULAorICAg IFBSSU1BUlkgS0VZIChzZXJ2ZXJfaWQsIGRhdGFiYXNlX2lkLCBzY2hlbWFf aWQsIGZ1bmN0aW9uX2lkLCBhcmdfaWQpCisgICAgKSIiIikKKwogICAgICMg RmluYWxseSwgdXBkYXRlIHRoZSBzY2hlbWEgdmVyc2lvbgogICAgIHZlcnNp b24udmFsdWUgPSBjb25maWcuU0VUVElOR1NfU0NIRU1BX1ZFUlNJT04KICAg ICBkYi5zZXNzaW9uLm1lcmdlKHZlcnNpb24pCg== --94eb2c035574455d480530715dd6 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 --94eb2c035574455d480530715dd6--