Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1azkBq-0001J2-9g for pgadmin-hackers@arkaria.postgresql.org; Mon, 09 May 2016 12:21:34 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1azkBp-0006EY-Nk for pgadmin-hackers@arkaria.postgresql.org; Mon, 09 May 2016 12:21:33 +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 1azkBS-0005wi-2P for pgadmin-hackers@postgresql.org; Mon, 09 May 2016 12:21:10 +0000 Received: from mail-lf0-x22c.google.com ([2a00:1450:4010:c07::22c]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1azkBI-0008CN-En for pgadmin-hackers@postgresql.org; Mon, 09 May 2016 12:21:09 +0000 Received: by mail-lf0-x22c.google.com with SMTP id m64so197482567lfd.1 for ; Mon, 09 May 2016 05:21:00 -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=sWz/XcNZHmcNPnMqqnQJ96ilAIfSFzHh5ESs9/EQ6Rk=; b=dstBwN85E1vZU3PgD7Q5ZHpdXd90Mc6tEBsV1ANnnDZ2aysqtRBu9kgW4SNk4dx63c +t37Vam313wniLClgRogGibJYvdlcPZzf/EHaXCxghXG4XzC7JmKl9w4GgEgzebLeAhk HYsYm5TAE8SuK2KdpB4rvNSSHT60DbZ8vkm7lWwIJggvL/PivZWogAzp6pF+uwQuDzuC GnVOOsv14PbgiCrKEb6xfOvr/wSVxXoS96N3mACZ6MpxtLjG06/WmGNJkaqAcjvFT9Xk 1sCRS8uM3I/Ls0s9asOKEzPcMBs2zyVDM/7DJ4lrJkPeJwGyGK+DPxs+yQvJinfImpyO w+8w== 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=sWz/XcNZHmcNPnMqqnQJ96ilAIfSFzHh5ESs9/EQ6Rk=; b=kwB94cg01fBur9U90Clb4B3+PPlZtPw+7xpnKjDKKf/He/SuCrdpJiQQdCQf9zPe3Y EUUFB3Jf5fpiElbmehMqW84jsP1z2xAmy/E6EL45aUcJKZRx5/WPec8o1/pmWTPVCQGQ l7/uwFaTceIgGZiv0jJNLk/oO70ScdjhPgkl6qaZK1OCC//p61LgRRy6QYPCZuFxDuER d1K0erV2YAqWnpgNVugCKNi5oBMf+B+klsi4xRZgCzPRMH6Z2rrLwK31CLZGD4T+NFhi PGXmfISVMcK0mlKA3zhIOlU6+4mqLLvJkfkyoe3uwGNnDBAMh/KknK1XKlz6PH9dVqn1 QJpg== X-Gm-Message-State: AOPr4FVLOIJ984ojGh+HbHVQFXcAHfENMl7OzamX0ctn4njTm4pwZvlsb8WVSa+9NikwDHR7Y2sYF2moI7Bl+sRo MIME-Version: 1.0 X-Received: by 10.25.170.20 with SMTP id t20mr13378879lfe.133.1462796459487; Mon, 09 May 2016 05:20:59 -0700 (PDT) Received: by 10.25.144.81 with HTTP; Mon, 9 May 2016 05:20:59 -0700 (PDT) In-Reply-To: <2BC9FA40-F05D-48AA-8796-29808FC15498@enterprisedb.com> References: <58B5FCCE-9882-44C0-B990-8BF5D2FA17DC@enterprisedb.com> <928839C0-1CD1-4307-9C62-6A693D6F0533@enterprisedb.com> <2BC9FA40-F05D-48AA-8796-29808FC15498@enterprisedb.com> Date: Mon, 9 May 2016 17:50:59 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch]: Foreign Table Module From: Khushboo Vashi To: Murtuza Zabuawala Cc: Neel Patel , pgadmin-hackers Content-Type: multipart/mixed; boundary=001a1141108c58ea18053267d7f6 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 --001a1141108c58ea18053267d7f6 Content-Type: multipart/alternative; boundary=001a1141108c58ea04053267d7f4 --001a1141108c58ea04053267d7f4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, Please find the attached updated patch for the Foreign Tables module. Thanks, Khushboo On Mon, May 9, 2016 at 1:46 PM, Murtuza Zabuawala < murtuza.zabuawala@enterprisedb.com> wrote: > > Hi Khushboo, > > Please find comments as below, > (Tested with Python3) > > *1)* Default string value is not quoted properly which causing SQL to > break, here default string should be 'my test string' for myCol2. > > CREATE FOREIGN TABLE "Test123"."test1_Server" > ("myCol" bigint NOT NULL DEFAULT 213 COLLATE pg_catalog."C", > "myCol2" character varying(50) NOT NULL DEFAULT my test string COLLATE > pg_catalog."C.UTF-8") > INHERITS ("Test123".abc, pem.chart) > SERVER test_fw_server; > > I think this behavior is perfect as we can't add single quotes for all the data-types. User should have to add himself if required. > *2)* When Length & Precision, does not clear when user selects another > data type > - First select Numeric provide Length & Precision and then choose abstime > data type which have neither Length & Precision > - It will not clear/ not allow user to clear old values & generates wrong > SQL > > ALTER FOREIGN TABLE "Test123"."test1_TT1" > ADD COLUMN col1 abstime(50 , 2) NOT NULL COLLATE pg_catalog."C"; > Done > *3)* I am allowed to select self table as inherited table > > ALTER FOREIGN TABLE pem."test1_TT1" INHERIT pem."test1_TT1"; > > Done > *4)* Wrong SQL generated for array like data types > > ALTER FOREIGN TABLE pem."test1_TT1" > ADD COLUMN name character[](50 ) NOT NULL COLLATE pg_catalog."POSIX"; > > Correct SQL: > > ALTER FOREIGN TABLE pem."test1_TT1" > ADD COLUMN name character(50)[] NOT NULL COLLATE pg_catalog."POSIX= "; > > Done > *5)* I am allowed to enter duplicate options but as per postgres > documentation > we should not allow duplicate options > > ALTER FOREIGN TABLE pem."test1_TT1" > OPTIONS (ADD op1 'val1'); > > ALTER FOREIGN TABLE pem."test1_TT1" > OPTIONS (ADD op1 'val1'); > > ALTER FOREIGN TABLE pem."test1_TT1" > OPTIONS (ADD op1 'val2'); > > Done > *6)* Created table with Special name (eg: table name =3D> "@Test#" ) & it > breaks when we clicks on it. > > File > "/home/murtuza/projects/pgadmin4/web/pgadmin/browser/server_groups/server= s/databases/schemas/foreign_tables/__init__.py", > line 414, in properties > data =3D self._fetch_properties(gid, sid, did, scid, foid) > File > "/home/murtuza/projects/pgadmin4/web/pgadmin/browser/server_groups/server= s/databases/schemas/foreign_tables/__init__.py", > line 982, in _fetch_properties > c['typlen'] =3D int(typlen) > TypeError: int() argument must be a string, a bytes-like object or a > number, not 'list' > > Couldn't reproduce but I think while fixing above issues it is resolved. > *7) *While dropping any foreign table gives this error but table gets > deleted from browser tree. > > s/databases/schemas/foreign_tables/__init__.py", line 414, in properties > data =3D self._fetch_properties(gid, sid, did, scid, foid) > File > "/home/murtuza/projects/pgadmin4/web/pgadmin/browser/server_groups/server= s/databases/schemas/foreign_tables/__init__.py", > line 982, in _fetch_properties > c['typlen'] =3D int(typlen) > TypeError: int() argument must be a string, a bytes-like object or a > number, not 'list' > Couldn't reproduce but I think while fixing above issues it is resolved. > > *Can be added into TODO:* > *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D* > > *1)* We should not allowed user to Inherits from catalog tables like > pg_catalog.pg_type; > > *2)* Minor SQL alignment when only server & table name was given > > CREATE FOREIGN TABLE "Test123"."test1_Server" > () > SERVER test_fw_server; > > Expected: > --------- > CREATE FOREIGN TABLE "Test123"."test1_Server" () > SERVER test_fw_server; > > *3)* Collation client side validation missing for columns, not every data > type support Collations, > For other data types it should be disable just like Length & Precision. > > > Regards, > Murtuza > > > > On 09-May-2016, at 10:43 am, Murtuza Zabuawala < > murtuza.zabuawala@enterprisedb.com> wrote: > > Hi Khushboo, > > No I did not. let me apply it and try again. > > Thanks, > Murtuza > > > On 06-May-2016, at 10:15 pm, Khushboo Vashi < > khushboo.vashi@enterprisedb.com> wrote: > > Hi Murtuza, > > Have you applied Dependent Cell patch on this? As the Foreign table is > dependent on that. > > Thanks, > Khushboo > On 6 May 2016 20:39, "Murtuza Zabuawala" < > murtuza.zabuawala@enterprisedb.com> wrote: > >> Hi Khushboo, >> >> Please find comments as below, >> >> I pulled latest version of code and then I applied v2 patch. >> >> >> 1) Once applying patch, When I re-started pgAdmin4 server again, I got >> below error (Screenshot is also attached), >> * ( FYI, I was not able to re-produce it again second time. )* >> >> >> >> >> >> * File "/Users/murtuza/Desktop/pgadmin4/web/pgadmin/utils/__init__.py", >> line 37, in create_module_preference self.preference =3D >> Preferences(self.name , None) File >> "/Users/murtuza/Desktop/pgadmin4/web/pgadmin/utils/preferences.py", line >> 261, in __init__ db.session.commit()=E2=80=A6..* >> >> *=E2=80=A6..* >> >> * cursor.execute(statement, >> parameters)sqlalchemy.exc.OperationalError: (OperationalError) database = is >> locked 'INSERT INTO module_preference (name) VALUES (?)' >> ('NODE-foreign-table=E2=80=99,)* >> >> >> 2) I am not able to create/open Foreign table node as I am getting errors >> from JS side (when I expand the schema node & do not get Create context >> menu as well) >> Please find screenshots for both scenario. >> >> >> > 07-59-45.png> >> >> >> On 06-May-2016, at 3:55 pm, Khushboo Vashi < >> khushboo.vashi@enterprisedb.com> wrote: >> >> Hi, >> >> Please find the attached patch for the Foreign Table Node with fixed >> issues. >> >> Thanks, >> Khushboo >> >> On Fri, Apr 29, 2016 at 12:20 PM, Neel Patel > > wrote: >> >>> Hi Khushboo, >>> >>> Below are the observations. >>> >>> - When we create the new Foreign Table with column name and types >>> then it shows NULL along with column name and type in properties tab. >>> >>> e.g. column_1 xml[] NULL >>> >> I think if its NOT NULL, then it should be NULL and it is default, so >> this should be okay. >> >>> >>> - Once we inherits the table from another table then column and >>> another parameters of inherited table should not allowed to change. >>> >>> Done >> >>> >>> - When we create any foreign table then same foreign table is also >>> listed under "Tables" node. >>> >>> This bug is related to Table node and Harshal is working on this issue. >> >>> >>> - SQL is not generated properly. Please find below SQL which gives >>> error during execution. >>> >>> CREATE FOREIGN TABLE public.test_2 >>> (id1 integer NOT NULL DEFAULT12 COLLATEpg_catalog."POSIX") >>> SERVER fsrv; >>> >> Done >> >>> >>> - When we create the new foreign table with security label then no >>> SQL is generated for security label. >>> >>> Done >> >>> >>> - In Edit mode, when we provide security label with both value >>> "provider" and "security label" then security label is displayed NULL >>> >>> e.g. SECURITY LABEL FOR frgn_table ON FOREIGN TABLE >>> public.fsrv_table IS NULL; >>> >> Done >> >>> >>> - During creation of the column, when we remove the collation then >>> it gives below error. >>> >>> TypeError: item is undefined >>> >> Done >> >>> >>> - Delete/Drop cascade functionality is not working, we are getting >>> below error. >>> >>> TypeError: self.canDrop.apply is not a function >>> >> Done >> >>> >>> - When we edit the foreign table and try to remove the existing >>> "Data Type" of column then it gives below error. >>> >>> TypeError: this.dataAdapter is null >>> >> Done >> >>> >>> - Create the new foreign table and click on ADD button in Column tab >>> and do not provide any column name and data type. Need to do proper >>> validation in Column tab for all parameters. Currently if user do not >>> provide any value then wrong SQL is getting generated. >>> >>> CREATE FOREIGN TABLE public.test_4 >>> (None None NULL) >>> SERVER test_fsrv; >>> >> Done >> >>> >>> - When we do not provide the Check parameters in constraint then it >>> gives SQL syntax error. >>> >>> CREATE FOREIGN TABLE public.test_5 >>> () >>> SERVER test_fsrv; >>> >>> ALTER FOREIGN TABLE public.test_5 >>> ADD CONSTRAINT test CHECK () NOT VALID; >>> >> Done >> >>> >>> - If we edit foreign table and change the schema then it gives below >>> error. >>> >>> IndexError: list index out of range >>> >> Done >> >>> >>> - We should have proper indentation in the SQL tab once we give the >>> parameters. Currently it looks like below for "Options" value. >>> >>> CREATE FOREIGN TABLE "1_test"."5_test" >>> () >>> SERVER asas >>> OPTIONS (test1 'test2' >>> , test3 'test4'); >>> >> Done >> >>> >>> - If user provide foreign table name and do not provide foreign >>> server and click on SQL tab then we are getting error on browser sid= e as >>> below. We should have proper error handling in this case. >>> >>> Couldn't find the required parameter (ftsrvname). >>> >> Done >> >>> >>> - Create the foreign table, add the constraint and do not provide >>> any constraint information then SQL generated is wrong. >>> >>> CREATE FOREIGN TABLE "1_test"."9_test" >>> () >>> SERVER test_fsrv; >>> >>> ALTER FOREIGN TABLE "1_test"."9_test" >>> ADD CONSTRAINT None CHECK (); >>> >> Done >> >>> >>> - When we click on the foreign table collection node then "Comment" >>> column is blank even though we have comment in the foreign table. >>> >>> Done >> >>> >>> - Create the foreign table on PG 9.1 and after pressing Save button >>> we are getting below error. >>> >>> "the JSON object must be str, not 'list'" >>> >> Done >> >>> >>> - When we delete the options parameters then it gives SQL error >>> because DROP statement does not include the value. >>> >>> ALTER FOREIGN TABLE public.test_12 >>> OPTIONS ( DROP ser2 'val2'); >>> >> Done >> >>> >>> - There are some new functionality added in PG 9.5. Do we really >>> need to implement ? Need to discuss with Dave/Ashesh. Below are the = new >>> functionality. >>> >>> - In create foreign table,we have added column constraint >>> but "table constraint" is added from 9.5.Do we really >>> require to add table constraint ? >>> - In alter foreign table, below are the new functionality >>> added. >>> 1. ALTER [ COLUMN ] column_name SET STORAGE { >>> PLAIN | EXTERNAL | EXTENDED | MAIN } >>> 2. DISABLE TRIGGER [ trigger_name | ALL | USER ] >>> 3. ENABLE TRIGGER [ trigger_name | ALL | USER ] >>> 4. ENABLE REPLICA TRIGGER trigger_name >>> 5. ENABLE ALWAYS TRIGGER trigger_name >>> 6. SET WITH OIDS >>> 7. SET WITHOUT OIDS >>> >>> As per the discussion, we will add these functionality into the next >> phase. >> >>> Do let us know in case of any queries. >>> >>> Thanks, >>> Neel Patel >>> >>> On Tue, Apr 5, 2016 at 2:27 PM, Khushboo Vashi < >>> khushboo.vashi@enterprisedb.com> wrote: >>> >>>> Hi, >>>> >>>> Please find updated patch for the Foreign Table Module. >>>> >>>> This patch is dependent on >>>> 1. Backgrid Depscell Patch, (submitted by me) >>>> 2. NodeAjaxOptionsCell Transform change patch, on which Ashesh and >>>> Murtuza are working >>>> >>>> Thanks, >>>> Khushboo >>>> >>>> >>>> >>>> >>>> On Wed, Feb 24, 2016 at 2:57 PM, Khushboo Vashi < >>>> khushboo.vashi@enterprisedb.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> I have updated the Foreign Table module as below: >>>>> >>>>> - Used 'NodeByListControl' to get schemas, in the foreign_table.js >>>>> file as suggested by Ashesh to avoid code redundancy. >>>>> >>>>> - Applied *'Security Label Macro'* Patch (Implemented by Harshal). >>>>> To test the Foreign Table patch, 'Security Label Macro' patch must >>>>> be applied first as that is not committed yet. >>>>> >>>>> Please find attached Foreign Table Patch. >>>>> >>>>> Thanks, >>>>> Khushboo >>>>> >>>>> On Tue, Feb 23, 2016 at 6:53 PM, Khushboo Vashi < >>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> Please find attached patch for the Foreign Table Module. >>>>>> >>>>>> The patch will be modified after Types module implementation as we >>>>>> need to populate Base Type and some Type related validations from t= he >>>>>> Types module. >>>>>> >>>>>> Please review it and let me know the feedback. >>>>>> >>>>>> Thanks, >>>>>> Khushboo >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) >>>> To make changes to your subscription: >>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>> >>>> >>> >> >> -- >> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) >> To make changes to your subscription: >> http://www.postgresql.org/mailpref/pgadmin-hackers >> >> >> > > --001a1141108c58ea04053267d7f4 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please find the attached updated pa= tch for the Foreign Tables module.

Thanks,
Khushboo

= On Mon, May 9, 2016 at 1:46 PM, Murtuza Zabuawala <murtuz= a.zabuawala@enterprisedb.com> wrote:

H= i Khushboo,

Please find comments as below,
(Tested with Python3)

1) D= efault string value is not quoted properly which causing SQL to break, here= default string should be 'my test string' for myCol2.
CREATE FOREIGN TABLE "Test123"."test1_Server&qu= ot;
("myCol" bigint NOT NULL DEFAULT 213 COLLATE pg_cat= alog."C",
"myCol2" character varying(50) NOT = NULL DEFAULT my test string COLLATE pg_catalog."C.UTF-8")
=C2=A0 =C2=A0 INHERITS ("Test123".abc, pem.chart)
= =C2=A0 =C2=A0 SERVER test_fw_server;

I think this behavior is perfect as we can't add single quo= tes for all the data-types. User should have to add himself if required.
=C2=A0
2) When Length & Precision, does not clea= r when user selects another data type
- First select Numeric prov= ide Length & Precision and then choose abstime=C2=A0
=C2=A0 d= ata type which have neither Length & Precision=C2=A0
- It wil= l not clear/ not allow user to clear old values & generates wrong SQL

ALTER FOREIGN TABLE "Test123"."test1= _TT1"
=C2=A0 =C2=A0 ADD COLUMN col1 abstime(50 , 2) NOT NULL= COLLATE pg_catalog."C";
Done= =C2=A0
= 3) I am allowed to select self table as inherited table
ALTER FOREIGN TABLE pem."test1_TT1" INHERIT pem.&quo= t;test1_TT1";

Done= =C2=A0
=
4) Wrong SQL generated for array like data types

ALTER FOREIGN TABLE pem."test1_TT1"
= =C2=A0 =C2=A0 ADD COLUMN name character[](50 ) NOT NULL COLLATE pg_catalog.= "POSIX";

Correct SQL:
=C2=A0 = =C2=A0
ALTER FOREIGN TABLE pem."test1_TT1"
= =C2=A0 =C2=A0 =C2=A0 =C2=A0ADD COLUMN name character(50)[] NOT NULL COLLATE= pg_catalog."POSIX";

Done=C2=A0
=
5) I am allowed to enter duplicate options but = as per postgres documentation=C2=A0
=C2=A0 =C2=A0we should not al= low duplicate options=C2=A0

ALTER FOREIGN TABLE pe= m."test1_TT1"
=C2=A0 =C2=A0 OPTIONS (ADD op1 'val1&= #39;);

ALTER FOREIGN TABLE pem."test1_TT1&quo= t;
=C2=A0 =C2=A0 OPTIONS (ADD op1 'val1');

=
ALTER FOREIGN TABLE pem."test1_TT1"
=C2=A0 = =C2=A0 OPTIONS (ADD op1 'val2');

Done=C2=A0
6) Created table with Special name (e= g: table name =3D> "@Test#" ) & it breaks when we clicks o= n it.

=C2=A0 File "/home/murtuza/projects/pga= dmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_t= ables/__init__.py", line 414, in properties
=C2=A0 =C2=A0 da= ta =3D self._fetch_properties(gid, sid, did, scid, foid)
=C2=A0 F= ile "/home/murtuza/projects/pgadmin4/web/pgadmin/browser/server_groups= /servers/databases/schemas/foreign_tables/__init__.py", line 982, in _= fetch_properties
=C2=A0 =C2=A0 c['typlen'] =3D int(typlen= )
TypeError: int() argument must be a string, a bytes-like object= or a number, not 'list'=C2=A0
=C2=A0
=
Couldn't reproduce but I think while fixing abo= ve issues it is resolved.
7) While=C2=A0dropping any foreign tab= le gives this error but table gets deleted from browser=C2=A0tree.

s/databases/schemas/foreign_tables/__init__.py",= line 414, in properties
=C2=A0 =C2=A0 data =3D self._fetch_prope= rties(gid, sid, did, scid, foid)
=C2=A0 File "/home/murtuza/= projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schem= as/foreign_tables/__init__.py", line 982, in _fetch_properties
=C2=A0 =C2=A0 c['typlen'] =3D int(typlen)
TypeError: i= nt() argument must be a string, a bytes-like object or a number, not 'l= ist'
=C2=A0Couldn't reprod= uce but I think while fixing above issues it is resolved.

Can be= added into TODO:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D

1) We s= hould not allowed user to Inherits from catalog tables like pg_catalog.pg_t= ype;

2) Minor SQL alignment when only serve= r & table name was given=C2=A0

CREATE FOREIGN = TABLE "Test123"."test1_Server"
()
= =C2=A0 =C2=A0 SERVER test_fw_server;

Expected:
---------
CREATE FOREIGN TABLE "Test123"."t= est1_Server" ()
=C2=A0 =C2=A0 SERVER test_fw_server;

3) Collation client side validation missing for co= lumns, not every data type support Collations,
=C2=A0 =C2=A0For o= ther data types it should be disable just like Length & Precision.


Regards,
Murtuza
<= div>



On 09-May-2016, at 10:43 am, Murtuza Zabuawala <murtuza.za= buawala@enterprisedb.com> wrote:

Hi Khushboo,

No I did not. let me apply i= t and try again.

Thanks,
Murtuza


On 06-May-20= 16, at 10:15 pm, Khushboo Vashi <khushboo.vashi@enterprisedb.com> wrote= :

Hi Murtuza,

Have you appli= ed Dependent Cell patch on this? As the Foreign table is dependent on that.=

Thanks,
Khushboo

On 6 May 2016 20:39, "Murtuza Zabuawala&quo= t; <murtuza.zabuawala@enterprisedb.com> wrote:
Hi Khushb= oo,

Please find comments as below,

<= /div>
I pulled latest version of code and then I applied v2 patch.


1) Once applying patch, When I re-start= ed pgAdmin4 server again, I got below error (Screenshot is also attached),<= /div>
=C2=A0 =C2=A0( FYI, I was not able to re-prod= uce it again second time. )

=C2=A0 File "/Users/murtuza/Desktop/pgadmin4/web/pg= admin/utils/__init__.py", line 37, in create_module_preference
=C2= =A0 =C2=A0 self.preference =3D Preferences(self.name, None)
=C2=A0 File "/Users/murtuza/De= sktop/pgadmin4/web/pgadmin/utils/preferences.py", line 261, in __init_= _
=C2=A0 =C2=A0 db.session.commit()
=E2=80=A6..
<= div>=E2=80=A6..
=C2=A0 =C2=A0 cursor.execute(statement, parameters= )
sqlalchemy.exc.OperationalError: (OperationalError) database is locked= 'INSERT INTO module_preference (name) VALUES (?)' ('NODE-forei= gn-table=E2=80=99,)


<= /i>
2) I am not able to create/open Foreign table node as I = am getting errors from JS side =C2=A0(when I expand the schema node & d= o not get Create context menu as well)
=C2=A0 =C2=A0 Please= find screenshots for both scenario.


<Screenshot from 2016-05-06 08-00-19.png><Scr= eenshot from 2016-05-06 07-59-45.png><Screen Shot 2016-0= 5-06 at 8.18.12 pm.png>


On 06-May-2016, at 3:55 pm, Khushboo Vashi <khushboo.vash= i@enterprisedb.com> wrote:

Hi,
Please find the attached patch for the Foreign Table Node with= fixed issues.

Thanks,
Khushboo

On Fri, Apr 29, 2016 a= t 12:20 PM, Neel Patel <neel.patel@enterprisedb.com> wrote:
Hi Khushboo,

<= div>Below are the observations.
  • When we create the new Fo= reign Table with column name and types then it shows NULL along with column= name and type in properties tab.
=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0e.g.=C2=A0column_1 xml[] NULL=C2=A0
<= /blockquote>
I think if its NOT NULL, then it should be NULL and it is = default, so this should be okay.
  • Once we inherits the table from another table then column an= d another parameters of inherited table should not allowed to change.
  • <= /ul>
Done
  • When we create any foreign table then same foreign ta= ble is also listed under "Tables" node.
This bug is related to Table node and Harshal is working on t= his issue.
  • SQL is = not generated properly. Please find below SQL which gives error during exec= ution.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0CREATE FOREIG= N TABLE public.test_2
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(i= d1 integer NOT NULL DEFAULT12 COLLATEpg_catalog."POSIX")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SERVER fsrv;
=
Done
  • When we create the new foreign table with security label t= hen no SQL is generated for security label.
Done
  • In Ed= it mode, when we provide security label with both value "provider"= ; and "security label" then security label is displayed NULL
  • =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 e.g.=C2=A0 SECURITY LAB= EL FOR frgn_table ON FOREIGN TABLE public.fsrv_table IS NULL;
Done
=
  • During creation of the column, when we r= emove the collation then it gives below error.
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TypeError: item is undefined
=
Done
  • Delete/Drop cascade functionality is not working, we are g= etting below error.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0TypeError: self.canDrop.apply is not a function
Done
=
  • When we edit the foreign table and try t= o remove the existing "Data Type" of column then it gives below e= rror.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 TypeEr= ror: this.dataAdapter is null
Done <= br>
    <= li>Create the new foreign table and click on ADD button in Column tab and d= o not provide any column name and data type. Need to do proper validation i= n Column tab for all parameters. Currently if user do not provide any value= then wrong SQL is getting generated.
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0CREATE FOREIGN TABLE public.test_4
=C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(None None NULL)
=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SERVER test_fsrv;
Done
=
  • When we do not provide the Check parameters in constraint then it g= ives SQL syntax error.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0CREATE FOREIGN TABLE public.test_5
=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0()
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0SERVER test_fsrv;

=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ALTER FOREIGN TABLE public.test_5
=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ADD CONSTRAINT test CHECK () NOT VALID;=
Done
=
  • If we edit foreign table and change the schem= a then it gives below error.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 IndexError: list index out of range
=
Done
  • We should have proper indentation in the SQL tab= once we give the parameters. Currently it looks like below for "Optio= ns" value.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 CREATE FOREIGN TABLE "1_test"."5_test"
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ()
=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SERVER asas
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 OPTIONS (test1 'test2'
=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 , test3 'test4');
Done
  • If user provide foreign table name and do not pro= vide foreign server and click on SQL tab then we are getting error on brows= er side as below. We should have proper error handling in this case.
  • =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Couldn't f= ind the required parameter (ftsrvname).
Done
  • Create = the foreign table, add the constraint and do not provide any constraint inf= ormation then SQL generated is wrong.
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0CREATE FOREIGN TABLE "1_test"."9_tes= t"
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0()
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SERVER test_fsrv;
=

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER FOREIGN TABLE = "1_test"."9_test"
=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 ADD CONSTRAINT None CHECK ();
=
Done
  • When we click on the foreign table collection node then "Comment&= quot; column is blank even though we have comment in the foreign table.
  • Done
    • Create the foreign table on PG 9.1 and after pressin= g Save button we are getting below error.
    =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "the JSON object must be str, n= ot 'list'"
    Done
    • Whe= n we delete the options parameters then it gives SQL error because DROP sta= tement does not include the value.
    =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER FOREIGN TABLE public.test_12
    = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 OPTIONS ( DR= OP ser2 'val2');
    Done
    =
    • There are some new fun= ctionality added in PG 9.5. Do we really need to implement ? Need to discus= s with Dave/Ashesh. Below are the new functionality.
    =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- In create foreign table,w= e have added column constraint but "table constraint" is added fr= om 9.5.Do we really requir= e to add table constraint ?
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0- In alter foreign table, below are the new functio= nality added.
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A01.=C2=A0 ALTER [ COLUMN ] column_name SET STORAG= E { PLAIN | EXTERNAL | EXTENDED | MAIN }
    =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A02.=C2=A0 DISABLE TRIGGE= R [ trigger_name | ALL | USER ]
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A03.=C2=A0 ENABLE TRIGGER [ trig= ger_name | ALL | USER ]
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A04.=C2=A0 ENABLE REPLICA TRIGGER trigger_= name
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A05.=C2=A0 ENABLE ALWAYS TRIGGER trigger_name
    =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A06.= =C2=A0 SET WITH OIDS
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A07.=C2=A0 SET WITHOUT OIDS

    <= /div>
    As per the discussion, we will add these funct= ionality into the next phase.
    <= div>
    Do let us know in case of any queries.

    <= div>Thanks,
    Neel Patel

    =
    On Tue, Apr 5, 2016 at 2:27 PM, Khushboo V= ashi <khushboo.vashi@enterprisedb.com> wrote:<= br>
    Hi,

    Pl= ease find updated patch for the Foreign Table Module.

    <= div>This patch is dependent on=C2=A0
    1. Backgrid Depscell Patch, = (submitted by me)
    2. NodeAjaxOptionsCell Transform change patch, = on which Ashesh and Murtuza are working

    Thanks,
    Khushboo




    On Wed, F= eb 24, 2016 at 2:57 PM, Khushboo Vashi <khushboo.vashi@enter= prisedb.com> wrote:
    Hi,

    I have updated the Foreign Table module as= below:

    - Used 'NodeByListControl' to get s= chemas, in the foreign_table.js file as suggested by Ashesh to avoid code r= edundancy.

    - Applied 'Security Label Macro'=C2= =A0 Patch (Implemented by Harshal).
    =C2=A0 To test the Foreign Table p= atch, 'Security Label Macro' patch must be applied first as that is= not committed yet.

    Please find attached Forei= gn Table Patch.

    Thanks,
    Khushboo
    =

    On Tue, Feb 23, 2= 016 at 6:53 PM, Khushboo Vashi <khushboo.vashi@enterprisedb.= com> wrote:
    Hi,

    P= lease find attached patch for the Foreign Table Module.

    The patch wi= ll be modified after Types module implementation as we need to populate Bas= e Type=C2=A0 and some Type related validations from the Types module.
    Please review it and let me know the feedback.

    Thanks,
    Khushboo=




    --
    Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
    To make changes to your subscription:
    http://www.postgresql.org/mailpref/pgadmin-hackers=



    <pgAdmin4_Foreign_tables_ver2.patch>
    --
    Sent via = pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
    To make chang= es to your subscription:
    http://www.postgresql.org/mailpref/pgadmi= n-hackers



    --001a1141108c58ea04053267d7f4-- --001a1141108c58ea18053267d7f6 Content-Type: text/x-patch; charset=US-ASCII; name="pgAdmin4_foreign_tables_ver3.patch" Content-Disposition: attachment; filename="pgAdmin4_foreign_tables_ver3.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_inzz7ej10 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL19f aW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvX19p bml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZjRjMmIzYQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Zv cmVpZ25fdGFibGVzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTA3NSBAQAor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0 IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMg LSAyMDE2LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMg c29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGlj ZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIi SW1wbGVtZW50cyB0aGUgRm9yZWlnbiBUYWJsZSBNb2R1bGUuIiIiCisKK2lt cG9ydCBqc29uCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2ltcG9y dCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKK2Zyb20gZmxhc2sgaW1wb3J0IHJl bmRlcl90ZW1wbGF0ZSwgbWFrZV9yZXNwb25zZSwgcmVxdWVzdCwganNvbmlm eSwgXAorICAgIGN1cnJlbnRfYXBwCitmcm9tIGZsYXNrLmV4dC5iYWJlbCBp bXBvcnQgZ2V0dGV4dAorZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRf RFJJVkVSCitmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgbWFrZV9q c29uX3Jlc3BvbnNlLCBcCisgICAgbWFrZV9yZXNwb25zZSBhcyBhamF4X3Jl c3BvbnNlLCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IsIGdvbmUKK2Zyb20gcGdh ZG1pbi5icm93c2VyLnV0aWxzIGltcG9ydCBQR0NoaWxkTm9kZVZpZXcKK2Zy b20gcGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24gaW1wb3J0IENvbGxlY3Rp b25Ob2RlTW9kdWxlCitpbXBvcnQgcGdhZG1pbi5icm93c2VyLnNlcnZlcl9n cm91cHMuc2VydmVycy5kYXRhYmFzZXMuc2NoZW1hcyBhcyBzY2hlbWFzCitm cm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgcHJlY29uZGl0aW9uX3Jl cXVpcmVkCitmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNl cnZlcnMuZGF0YWJhc2VzLnNjaGVtYXMudXRpbHMgaW1wb3J0IFwKKyAgICBT Y2hlbWFDaGlsZE1vZHVsZSwgRGF0YVR5cGVSZWFkZXIKK2Zyb20gcGdhZG1p bi51dGlscy5kcml2ZXIgaW1wb3J0IGdldF9kcml2ZXIKK2Zyb20gcGdhZG1p bi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMudXRp bHMgaW1wb3J0IFwKKyAgICBwYXJzZV9zZWNfbGFiZWxzX2Zyb21fZGIKKwor CitjbGFzcyBGb3JlaWduVGFibGVNb2R1bGUoU2NoZW1hQ2hpbGRNb2R1bGUp OgorICAgICIiIgorICAgIGNsYXNzIEZvcmVpZ25UYWJsZU1vZHVsZShDb2xs ZWN0aW9uTm9kZU1vZHVsZSk6CisKKyAgICAgICAgVGhpcyBjbGFzcyByZXBy ZXNlbnRzIFRoZSBGb3JlaWduIFRhYmxlIE1vZHVsZS4KKworICAgIE1ldGhv ZHM6CisgICAgLS0tLS0tLQorICAgICogX19pbml0X18oKmFyZ3MsICoqa3dh cmdzKQorICAgICAgLSBJbml0aWFsaXplIHRoZSBGb3JlaWduIFRhYmxlIE1v ZHVsZS4KKworICAgICogZ2V0X25vZGVzKGdpZCwgc2lkLCBkaWQsIHNjaWQp CisgICAgICAtIEdlbmVyYXRlIHRoZSBGb3JlaWduIFRhYmxlIGNvbGxlY3Rp b24gbm9kZS4KKworICAgICogbm9kZV9pbm9kZSgpOgorICAgICAgLSBPdmVy cmlkZSB0aGlzIHByb3BlcnR5IHRvIG1ha2UgdGhlIEZvcmVpZ24gVGFibGUg bm9kZSBhcyBsZWFmIG5vZGUuCisKKyAgICAqIHNjcmlwdF9sb2FkKCkKKyAg ICAgIC0gTG9hZCB0aGUgbW9kdWxlIHNjcmlwdCBmb3IgRm9yZWlnbiBUYWJs ZSwgd2hlbiBzY2hlbWEgbm9kZSBpcworICAgICAgICBpbml0aWFsaXplZC4K KyAgICAiIiIKKyAgICBOT0RFX1RZUEUgPSAnZm9yZWlnbi10YWJsZScKKyAg ICBDT0xMRUNUSU9OX0xBQkVMID0gZ2V0dGV4dCgiRm9yZWlnbiBUYWJsZXMi KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6 CisgICAgICAgIHN1cGVyKEZvcmVpZ25UYWJsZU1vZHVsZSwgc2VsZikuX19p bml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLm1pbl92ZXIg PSBOb25lCisgICAgICAgIHNlbGYubWF4X3ZlciA9IE5vbmUKKworICAgIGRl ZiBnZXRfbm9kZXMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCk6CisgICAg ICAgICIiIgorICAgICAgICBHZW5lcmF0ZSB0aGUgRm9yZWlnbiBUYWJsZSBj b2xsZWN0aW9uIG5vZGUuCisgICAgICAgICIiIgorICAgICAgICB5aWVsZCBz ZWxmLmdlbmVyYXRlX2Jyb3dzZXJfY29sbGVjdGlvbl9ub2RlKHNjaWQpCisK KyAgICBAcHJvcGVydHkKKyAgICBkZWYgbm9kZV9pbm9kZShzZWxmKToKKyAg ICAgICAgIiIiCisgICAgICAgIE1ha2UgdGhlIG5vZGUgYXMgbGVhZiBub2Rl LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBA cHJvcGVydHkKKyAgICBkZWYgc2NyaXB0X2xvYWQoc2VsZik6CisgICAgICAg ICIiIgorICAgICAgICBMb2FkIHRoZSBtb2R1bGUgc2NyaXB0IGZvciBmb3Jl aWduIHRhYmxlLCB3aGVuIHRoZQorICAgICAgICBzY2hlbWEgbm9kZSBpcyBp bml0aWFsaXplZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzY2hl bWFzLlNjaGVtYU1vZHVsZS5OT0RFX1RZUEUKKworCitibHVlcHJpbnQgPSBG b3JlaWduVGFibGVNb2R1bGUoX19uYW1lX18pCisKKworY2xhc3MgRm9yZWln blRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyKToK KyAgICAiIiIKKyAgICBjbGFzcyBGb3JlaWduVGFibGVWaWV3KFBHQ2hpbGRO b2RlVmlldykKKworICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgUEdDaGlsZE5v ZGVWaWV3IHRvIGdldCB0aGUgZGlmZmVyZW50IHJvdXRlcyBmb3IKKyAgICB0 aGUgbW9kdWxlLgorCisgICAgVGhlIGNsYXNzIGlzIHJlc3BvbnNpYmxlIHRv IENyZWF0ZSwgUmVhZCwgVXBkYXRlIGFuZCBEZWxldGUgb3BlcmF0aW9ucyBm b3IKKyAgICB0aGUgRm9yZWlnbiBUYWJsZS4KKworICAgIE1ldGhvZHM6Cisg ICAgLS0tLS0tLQorICAgICogdmFsaWRhdGVfcmVxdWVzdChmKToKKyAgICAg IC0gV29ya3MgYXMgYSBkZWNvcmF0b3IuCisgICAgICAgIFZhbGlkYXRpbmcg cmVxdWVzdCBvbiB0aGUgcmVxdWVzdCBvZiBjcmVhdGUsIHVwZGF0ZSBhbmQg bW9kaWZpZWQgU1FMLgorCisgICAgKiBtb2R1bGVfanMoKToKKyAgICAgIC0g T3ZlcnJpZGVzIHRoaXMgcHJvcGVydHkgdG8gZGVmaW5lIGphdmFzY3JpcHQg Zm9yIEZvcmVpZ24gVGFibGUgbm9kZS4KKworICAgICogY2hlY2tfcHJlY29u ZGl0aW9uKGYpOgorICAgICAgLSBXb3JrcyBhcyBhIGRlY29yYXRvci4KKyAg ICAgIC0gQ2hlY2tzIGRhdGFiYXNlIGNvbm5lY3Rpb24gc3RhdHVzLgorICAg ICAgLSBBdHRhY2ggY29ubmVjdGlvbiBvYmplY3QgYW5kIHRlbXBsYXRlIHBh dGguCisKKyAgICAqIGxpc3QoZ2lkLCBzaWQsIGRpZCwgc2NpZCk6CisgICAg ICAtIExpc3QgdGhlIEZvcmVpZ24gVGFibGUuCisKKyAgICAqIG5vZGVzKGdp ZCwgc2lkLCBkaWQsIHNjaWQpOgorICAgICAgLSBSZXR1cm5zIGFsbCB0aGUg Rm9yZWlnbiBUYWJsZSB0byBnZW5lcmF0ZSBOb2RlcyBpbiB0aGUgYnJvd3Nl ci4KKworICAgICogcHJvcGVydGllcyhnaWQsIHNpZCwgZGlkLCBzY2lkLCBm b2lkKToKKyAgICAgIC0gUmV0dXJucyB0aGUgRm9yZWlnbiBUYWJsZSBwcm9w ZXJ0aWVzLgorCisgICAgKiBnZXRfY29sbGF0aW9ucyhnaWQsIHNpZCwgZGlk LCBzY2lkLCBmb2lkPU5vbmUpOgorICAgICAgLSBSZXR1cm5zIENvbGxhdGlv bnMuCisKKyAgICAqIGdldF90eXBlcyhnaWQsIHNpZCwgZGlkLCBzY2lkLCBm b2lkPU5vbmUpOgorICAgICAgLSBSZXR1cm5zIERhdGEgVHlwZXMuCisKKyAg ICAqIGdldF9mb3JlaWduX3NlcnZlcnMoZ2lkLCBzaWQsIGRpZCwgc2NpZCwg Zm9pZD1Ob25lKToKKyAgICAgIC0gUmV0dXJucyB0aGUgRm9yZWlnbiBTZXJ2 ZXJzLgorCisgICAgKiBnZXRfdGFibGVzKGdpZCwgc2lkLCBkaWQsIHNjaWQs IGZvaWQ9Tm9uZSk6CisgICAgICAtIFJldHVybnMgdGhlIEZvcmVpZ24gVGFi bGVzIGFzIHdlbGwgYXMgUGxhaW4gVGFibGVzLgorCisgICAgKiBnZXRfY29s dW1ucyhnaWQsIHNpZCwgZGlkLCBzY2lkLCBmb2lkPU5vbmUpOgorICAgICAg LSBSZXR1cm5zIHRoZSBUYWJsZSBDb2x1bW5zLgorCisgICAgKiBjcmVhdGUo Z2lkLCBzaWQsIGRpZCwgc2NpZCk6CisgICAgICAtIENyZWF0ZXMgYSBuZXcg Rm9yZWlnbiBUYWJsZSBvYmplY3QuCisKKyAgICAqIHVwZGF0ZShnaWQsIHNp ZCwgZGlkLCBzY2lkLCBmb2lkKToKKyAgICAgIC0gVXBkYXRlcyB0aGUgRm9y ZWlnbiBUYWJsZSBvYmplY3QuCisKKyAgICAqIGRlbGV0ZShnaWQsIHNpZCwg ZGlkLCBzY2lkLCBmb2lkKToKKyAgICAgIC0gRHJvcHMgdGhlIEZvcmVpZ24g VGFibGUgb2JqZWN0LgorCisgICAgKiBzcWwoZ2lkLCBzaWQsIGRpZCwgc2Np ZCwgZm9pZCk6CisgICAgICAtIFJldHVybnMgdGhlIFNRTCBmb3IgdGhlIEZv cmVpZ24gVGFibGUgb2JqZWN0LgorCisgICAgKiBtc3FsKGdpZCwgc2lkLCBk aWQsIHNjaWQsIGZvaWQ9Tm9uZSk6CisgICAgICAtIFJldHVybnMgdGhlIG1v ZGlmaWVkIFNRTC4KKworICAgICogZ2V0X3NxbChnaWQsIHNpZCwgZGF0YSwg c2NpZCwgZm9pZD1Ob25lKToKKyAgICAgIC0gR2VuZXJhdGVzIHRoZSBTUUwg c3RhdGVtZW50cyB0byBjcmVhdGUvdXBkYXRlIHRoZSBGb3JlaWduIFRhYmxl IG9iamVjdC4KKworICAgICogZGVwZW5kZW50cyhnaWQsIHNpZCwgZGlkLCBz Y2lkLCBmb2lkKToKKyAgICAgIC0gUmV0dXJucyB0aGUgZGVwZW5kZW50cyBm b3IgdGhlIEZvcmVpZ24gVGFibGUgb2JqZWN0LgorCisgICAgKiBkZXBlbmRl bmNpZXMoZ2lkLCBzaWQsIGRpZCwgc2NpZCwgZm9pZCk6CisgICAgICAtIFJl dHVybnMgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIEZvcmVpZ24gVGFibGUg b2JqZWN0LgorICAgICIiIgorCisgICAgbm9kZV90eXBlID0gYmx1ZXByaW50 Lm5vZGVfdHlwZQorCisgICAgcGFyZW50X2lkcyA9IFsKKyAgICAgICAgeyd0 eXBlJzogJ2ludCcsICdpZCc6ICdnaWQnfSwKKyAgICAgICAgeyd0eXBlJzog J2ludCcsICdpZCc6ICdzaWQnfSwKKyAgICAgICAgeyd0eXBlJzogJ2ludCcs ICdpZCc6ICdkaWQnfSwKKyAgICAgICAgeyd0eXBlJzogJ2ludCcsICdpZCc6 ICdzY2lkJ30KKyAgICBdCisgICAgaWRzID0gWworICAgICAgICB7J3R5cGUn OiAnaW50JywgJ2lkJzogJ2ZvaWQnfQorICAgIF0KKworICAgIG9wZXJhdGlv bnMgPSBkaWN0KHsKKyAgICAgICAgJ29iaic6IFsKKyAgICAgICAgICAgIHsn Z2V0JzogJ3Byb3BlcnRpZXMnLCAnZGVsZXRlJzogJ2RlbGV0ZScsICdwdXQn OiAndXBkYXRlJ30sCisgICAgICAgICAgICB7J2dldCc6ICdsaXN0JywgJ3Bv c3QnOiAnY3JlYXRlJ30KKyAgICAgICAgXSwKKyAgICAgICAgJ2RlbGV0ZSc6 IFt7J2RlbGV0ZSc6ICdkZWxldGUnfV0sCisgICAgICAgICdjaGlsZHJlbic6 IFt7J2dldCc6ICdjaGlsZHJlbid9XSwKKyAgICAgICAgJ25vZGVzJzogW3sn Z2V0JzogJ25vZGUnfSwgeydnZXQnOiAnbm9kZXMnfV0sCisgICAgICAgICdz cWwnOiBbeydnZXQnOiAnc3FsJ31dLAorICAgICAgICAnbXNxbCc6IFt7J2dl dCc6ICdtc3FsJ30sIHsnZ2V0JzogJ21zcWwnfV0sCisgICAgICAgICdzdGF0 cyc6IFt7J2dldCc6ICdzdGF0aXN0aWNzJ31dLAorICAgICAgICAnZGVwZW5k ZW5jeSc6IFt7J2dldCc6ICdkZXBlbmRlbmNpZXMnfV0sCisgICAgICAgICdk ZXBlbmRlbnQnOiBbeydnZXQnOiAnZGVwZW5kZW50cyd9XSwKKyAgICAgICAg J21vZHVsZS5qcyc6IFt7fSwge30sIHsnZ2V0JzogJ21vZHVsZV9qcyd9XSwK KyAgICAgICAgJ2dldF9jb2xsYXRpb25zJzogWworICAgICAgICAgICAgeydn ZXQnOiAnZ2V0X2NvbGxhdGlvbnMnfSwKKyAgICAgICAgICAgIHsnZ2V0Jzog J2dldF9jb2xsYXRpb25zJ30KKyAgICAgICAgICAgIF0sCisgICAgICAgICdn ZXRfdHlwZXMnOiBbeydnZXQnOiAndHlwZXMnfSwgeydnZXQnOiAndHlwZXMn fV0sCisgICAgICAgICdnZXRfZm9yZWlnbl9zZXJ2ZXJzJzogW3snZ2V0Jzog J2dldF9mb3JlaWduX3NlcnZlcnMnfSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeydnZXQnOiAnZ2V0X2ZvcmVpZ25fc2VydmVycyd9XSwK KyAgICAgICAgJ2dldF90YWJsZXMnOiBbeydnZXQnOiAnZ2V0X3RhYmxlcyd9 LCB7J2dldCc6ICdnZXRfdGFibGVzJ31dLAorICAgICAgICAnZ2V0X2NvbHVt bnMnOiBbeydnZXQnOiAnZ2V0X2NvbHVtbnMnfSwgeydnZXQnOiAnZ2V0X2Nv bHVtbnMnfV0KKyAgICB9KQorCisgICAgZGVmIHZhbGlkYXRlX3JlcXVlc3Qo Zik6CisgICAgICAgICIiIgorICAgICAgICBXb3JrcyBhcyBhIGRlY29yYXRv ci4KKyAgICAgICAgVmFsaWRhdGluZyByZXF1ZXN0IG9uIHRoZSByZXF1ZXN0 IG9mIGNyZWF0ZSwgdXBkYXRlIGFuZCBtb2RpZmllZCBTUUwuCisKKyAgICAg ICAgUmVxdWlyZWQgQXJnczoKKyAgICAgICAgICAgICAgICAgICAgbmFtZTog TmFtZSBvZiB0aGUgRm9yZWlnbiBUYWJsZQorICAgICAgICAgICAgICAgICAg ICBmdHNydm5hbWU6IEZvcmVpZ24gU2VydmVyIE5hbWUKKworICAgICAgICBB Ym92ZSBib3RoIHRoZSBhcmd1bWVudHMgd2lsbCBub3QgYmUgdmFsaWRhdGVk IGluIHRoZSB1cGRhdGUgYWN0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAg QHdyYXBzKGYpCisgICAgICAgIGRlZiB3cmFwKHNlbGYsICoqa3dhcmdzKToK KworICAgICAgICAgICAgZGF0YSA9IHt9CisKKyAgICAgICAgICAgIGlmIHJl cXVlc3QuZGF0YToKKyAgICAgICAgICAgICAgICByZXEgPSBqc29uLmxvYWRz KHJlcXVlc3QuZGF0YS5kZWNvZGUoKSkKKyAgICAgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICAgICAgcmVxID0gcmVxdWVzdC5hcmdzIG9yIHJlcXVlc3Qu Zm9ybQorCisgICAgICAgICAgICBpZiAnZm9pZCcgbm90IGluIGt3YXJnczoK KyAgICAgICAgICAgICAgICByZXF1aXJlZF9hcmdzID0gWworICAgICAgICAg ICAgICAgICAgICAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgICdmdHNy dm5hbWUnCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgICAgICAgICAg Zm9yIGFyZyBpbiByZXF1aXJlZF9hcmdzOgorICAgICAgICAgICAgICAgICAg ICBpZiBhcmcgbm90IGluIHJlcSBvciByZXFbYXJnXSA9PSAnJzoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2Uo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTQxMCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzPTAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXJyb3Jtc2c9Z2V0dGV4dCgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgdGhl IHJlcXVpcmVkIHBhcmFtZXRlciBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICglcykuIiAlIGFyZworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAg ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpc3RfcGFyYW1zID0gW10K KyAgICAgICAgICAgICAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAnR0VUJzoK KyAgICAgICAgICAgICAgICAgICAgbGlzdF9wYXJhbXMgPSBbJ2NvbnN0cmFp bnRzJywgJ2NvbHVtbnMnLCAnZnRvcHRpb25zJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3NlY2xhYmVscycsICdpbmhlcml0cydd CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg bGlzdF9wYXJhbXMgPSBbJ2luaGVyaXRzJ10KKworICAgICAgICAgICAgICAg IGZvciBrZXkgaW4gcmVxOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkg aW4gbGlzdF9wYXJhbXMgYW5kIHJlcVtrZXldICE9ICcnIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbmQgcmVxW2tleV0gaXMgbm90IE5vbmU6 CisgICAgICAgICAgICAgICAgICAgICAgICAjIENvdmVydHMgc3RyaW5nIGlu dG8gcHl0aG9uIGxpc3QgYXMgZXhwZWN0ZWQuCisgICAgICAgICAgICAgICAg ICAgICAgICBkYXRhW2tleV0gPSBbXSBpZlwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0eXBlKHJlcVtrZXldKSA9PSBsaXN0IGFuZCBsZW4ocmVx W2tleV0pID09IDAgZWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAganNvbi5sb2FkcyhyZXFba2V5XSkKKworICAgICAgICAgICAgICAgICAg ICAgICAgaWYga2V5ID09ICdpbmhlcml0cyc6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBDb252ZXJ0IFRhYmxlIGlkcyBmcm9tIHVuaWNvZGUv c3RyaW5nIHRvIGludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg YW5kIG1ha2UgdHVwbGUgZm9yICdJTicgcXVlcnkuCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5oZXJpdHMgPSB0dXBsZShbaW50KHgpIGZvciB4 IGluIGRhdGFba2V5XV0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiBsZW4oaW5oZXJpdHMpID09IDE6CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgUHl0aG9uIHR1cHBsZSBoYXMgLCBhZnRlciB0aGUg Zmlyc3QgcGFyYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBpbiBjYXNlIG9mIHNpbmdsZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgU28sIHdlIG5lZWQgdG8gbWFrZSBpdCB0 dXBsZSBleHBsaWNpdGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbmhlcml0cyA9ICIoIiArIHN0cihpbmhlcml0c1swXSkgKyAiKSIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbmhlcml0czoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGZXRjaCBUYWJsZSBO YW1lcyBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgSWRzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIGFzIHdlIG5lZWQgVGFibGUgbmFtZXMg dG8gZ2VuZXJhdGUgdGhlIFNRTC4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxh dGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnZ2V0X3RhYmxlcy5zcWwnXSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhdHRyZWxpZD1pbmhlcml0cykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiByZXNbJ3Jvd3MnXVswXToK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFba2V5 XSA9IHJlc1sncm93cyddWzBdWydpbmhlcml0cyddCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSBbXQorCisgICAgICAgICAg ICAgICAgICAgIGVsaWYga2V5ID09ICd0eXBub3RudWxsJzoKKyAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IFRydWUgaWYgKHJlcVtrZXld ID09ICd0cnVlJyBvciByZXFba2V5XQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaXMgVHJ1ZSkgZWxzZSBGYWxzZSBp ZlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxW2tleV0gPT0g J2ZhbHNlJyBvciByZXFba2V5XSkgaXMgRmFsc2UgZWxzZSAnJworICAgICAg ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YVtrZXldID0gcmVxW2tleV0KKworICAgICAgICAgICAgZXhjZXB0IEV4 Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQorCisgICAgICAgICAg ICBzZWxmLnJlcXVlc3QgPSBkYXRhCisgICAgICAgICAgICByZXR1cm4gZihz ZWxmLCAqKmt3YXJncykKKworICAgICAgICByZXR1cm4gd3JhcAorCisgICAg ZGVmIG1vZHVsZV9qcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIExv YWQgSlMgZmlsZSAoZm9yZWlnbl90YWJsZXMuanMpIGZvciB0aGlzIG1vZHVs ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBtYWtlX3Jlc3BvbnNl KAorICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICJmb3JlaWduX3RhYmxlcy9qcy9mb3JlaWduX3RhYmxlcy5qcyIsCisg ICAgICAgICAgICAgICAgXz1nZXR0ZXh0CisgICAgICAgICAgICApLAorICAg ICAgICAgICAgMjAwLCB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94 LWphdmFzY3JpcHQnfQorICAgICAgICApCisKKyAgICBkZWYgY2hlY2tfcHJl Y29uZGl0aW9uKGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV29ya3MgYXMg YSBkZWNvcmF0b3IuCisgICAgICAgIENoZWNrcyB0aGUgZGF0YWJhc2UgY29u bmVjdGlvbiBzdGF0dXMuCisgICAgICAgIEF0dGFjaGVzIHRoZSBjb25uZWN0 aW9uIG9iamVjdCBhbmQgdGVtcGxhdGUgcGF0aCB0byB0aGUgY2xhc3Mgb2Jq ZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgQHdyYXBzKGYpCisgICAgICAg IGRlZiB3cmFwKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzZWxm ID0gYXJnc1swXQorICAgICAgICAgICAgZHJpdmVyID0gZ2V0X2RyaXZlcihQ R19ERUZBVUxUX0RSSVZFUikKKyAgICAgICAgICAgIHNlbGYubWFuYWdlciA9 IGRyaXZlci5jb25uZWN0aW9uX21hbmFnZXIoa3dhcmdzWydzaWQnXSkKKwor ICAgICAgICAgICAgIyBHZXQgZGF0YWJhc2UgY29ubmVjdGlvbgorICAgICAg ICAgICAgc2VsZi5jb25uID0gc2VsZi5tYW5hZ2VyLmNvbm5lY3Rpb24oZGlk PWt3YXJnc1snZGlkJ10pCisKKyAgICAgICAgICAgIHNlbGYucXRJZGVudCA9 IGRyaXZlci5xdElkZW50CisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNv bm4uY29ubmVjdGVkKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHByZWNv bmRpdGlvbl9yZXF1aXJlZCgKKyAgICAgICAgICAgICAgICAgICAgZ2V0dGV4 dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIHRvIHRo ZSBzZXJ2ZXIgaGFzIGJlZW4gbG9zdCEiCisgICAgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIHZlciA9IHNl bGYubWFuYWdlci52ZXJzaW9uCisgICAgICAgICAgICBzZXJ2ZXJfdHlwZSA9 IHNlbGYubWFuYWdlci5zZXJ2ZXJfdHlwZQorCisgICAgICAgICAgICAjIFNl dCB0ZW1wbGF0ZSBwYXRoIGZvciBzcWwgc2NyaXB0cyBkZXBlbmRpbmcKKyAg ICAgICAgICAgICMgb24gdGhlIHNlcnZlciB2ZXJzaW9uLgorCisgICAgICAg ICAgICBpZiB2ZXIgPj0gOTA1MDA6CisgICAgICAgICAgICAgICAgc2VsZi50 ZW1wbGF0ZV9wYXRoID0gJ2ZvcmVpZ25fdGFibGVzL3NxbC85LjVfcGx1cycK KyAgICAgICAgICAgIGVsaWYgdmVyID49IDkwMzAwOgorICAgICAgICAgICAg ICAgIHNlbGYudGVtcGxhdGVfcGF0aCA9ICdmb3JlaWduX3RhYmxlcy9zcWwv OS4zX3BsdXMnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg IHNlbGYudGVtcGxhdGVfcGF0aCA9ICdmb3JlaWduX3RhYmxlcy9zcWwvOS4x X3BsdXMnCisKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzLCAqKmt3YXJn cykKKworICAgICAgICByZXR1cm4gd3JhcAorCisgICAgQGNoZWNrX3ByZWNv bmRpdGlvbgorICAgIGRlZiBsaXN0KHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNj aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgTGlzdCBhbGwgdGhlIEZvcmVp Z24gVGFibGVzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBnaWQ6 IFNlcnZlciBHcm91cCBJZAorICAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSWQK KyAgICAgICAgICAgIGRpZDogRGF0YWJhc2UgSWQKKyAgICAgICAgICAgIHNj aWQ6IFNjaGVtYSBJZAorICAgICAgICAiIiIKKyAgICAgICAgU1FMID0gcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdu b2RlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aWQ9c2NpZCkKKyAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhl Y3V0ZV9kaWN0KFNRTCkKKworICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCisgICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAg ICAgICAgcmVzcG9uc2U9cmVzWydyb3dzJ10sCisgICAgICAgICAgICBzdGF0 dXM9MjAwCisgICAgICAgICkKKworICAgIEBjaGVja19wcmVjb25kaXRpb24K KyAgICBkZWYgbm9kZXMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCk6Cisg ICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBGb3JlaWduIFRhYmxl cyB0byBnZW5lcmF0ZSB0aGUgTm9kZXMuCisKKyAgICAgICAgQXJnczoKKyAg ICAgICAgICAgIGdpZDogU2VydmVyIEdyb3VwIElkCisgICAgICAgICAgICBz aWQ6IFNlcnZlciBJZAorICAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJZAor ICAgICAgICAgICAgc2NpZDogU2NoZW1hIElkCisgICAgICAgICIiIgorCisg ICAgICAgIHJlcyA9IFtdCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2RlLnNxbCddKSwgc2Np ZD1zY2lkKQorICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhl Y3V0ZV8yZGFycmF5KFNRTCkKKworICAgICAgICBpZiBub3Qgc3RhdHVzOgor ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1yc2V0KQorCisgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cydd OgorICAgICAgICAgICAgcmVzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBz ZWxmLmJsdWVwcmludC5nZW5lcmF0ZV9icm93c2VyX25vZGUoCisgICAgICAg ICAgICAgICAgICAgIHJvd1snb2lkJ10sCisgICAgICAgICAgICAgICAgICAg IHNjaWQsCisgICAgICAgICAgICAgICAgICAgIHJvd1snbmFtZSddLAorICAg ICAgICAgICAgICAgICAgICBpY29uPSJpY29uLWZvcmVpZ24tdGFibGUiCisg ICAgICAgICAgICAgICAgKSkKKworICAgICAgICByZXR1cm4gbWFrZV9qc29u X3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT1yZXMsCisgICAgICAgICAg ICBzdGF0dXM9MjAwCisgICAgICAgICkKKworICAgIEBjaGVja19wcmVjb25k aXRpb24KKyAgICBkZWYgcHJvcGVydGllcyhzZWxmLCBnaWQsIHNpZCwgZGlk LCBzY2lkLCBmb2lkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMg dGhlIEZvcmVpZ24gVGFibGUgcHJvcGVydGllcy4KKworICAgICAgICBBcmdz OgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSWQKKyAgICAgICAg ICAgIHNpZDogU2VydmVyIElkCisgICAgICAgICAgICBkaWQ6IERhdGFiYXNl IElkCisgICAgICAgICAgICBzY2lkOiBTY2hlbWEgSWQKKyAgICAgICAgICAg IGZvaWQ6IEZvcmVpZ24gVGFibGUgSWQKKyAgICAgICAgIiIiCisgICAgICAg IGRhdGEgPSBzZWxmLl9mZXRjaF9wcm9wZXJ0aWVzKGdpZCwgc2lkLCBkaWQs IHNjaWQsIGZvaWQpCisKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAg ICAgICByZXR1cm4gZ29uZShnZXR0ZXh0KCIiIgorQ291bGQgbm90IGZpbmQg dGhlIGZvcmVpZ24gdGFibGUgaW4gdGhlIGRhdGFiYXNlLgorSXQgbWF5IGhh dmUgYmVlbiByZW1vdmVkIGJ5IGFub3RoZXIgdXNlciBvcgorc2hpZnRlZCB0 byB0aGUgYW5vdGhlciBzY2hlbWEuCisiIiIpKQorCisgICAgICAgIHJldHVy biBhamF4X3Jlc3BvbnNlKAorICAgICAgICAgICAgcmVzcG9uc2U9ZGF0YSwK KyAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgKQorCisgICAgQGNo ZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBnZXRfY29sbGF0aW9ucyhzZWxm LCBnaWQsIHNpZCwgZGlkLCBzY2lkLCBmb2lkPU5vbmUpOgorICAgICAgICAi IiIKKyAgICAgICAgUmV0dXJucyB0aGUgQ29sbGF0aW9ucy4KKworICAgICAg ICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSWQKKyAg ICAgICAgICAgIHNpZDogU2VydmVyIElkCisgICAgICAgICAgICBkaWQ6IERh dGFiYXNlIElkCisgICAgICAgICAgICBzY2lkOiBTY2hlbWEgSWQKKyAgICAg ICAgICAgIGZvaWQ6IEZvcmVpZ24gVGFibGUgSWQKKyAgICAgICAgIiIiCisK KyAgICAgICAgcmVzID0gW3snbGFiZWwnOiAnJywgJ3ZhbHVlJzogJyd9XQor ICAgICAgICB0cnk6CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9jb2xsYXRp b25zLnNxbCddKSkKKyAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYu Y29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAgICAgICAgaWYgbm90 IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgZm9yIHJv dyBpbiByc2V0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgcmVzLmFwcGVu ZCgKKyAgICAgICAgICAgICAgICAgICAgeydsYWJlbCc6IHJvd1snY29weV9j b2xsYXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHJv d1snY29weV9jb2xsYXRpb24nXX0KKyAgICAgICAgICAgICAgICApCisKKyAg ICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAg ICAgICAgICAgZGF0YT1yZXMsCisgICAgICAgICAgICAgICAgc3RhdHVzPTIw MAorICAgICAgICAgICAgKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24g YXMgZToKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9c3RyKGUpKQorCisgICAgQGNoZWNrX3ByZWNvbmRpdGlv bgorICAgIGRlZiB0eXBlcyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCBm b2lkPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUg RGF0YSBUeXBlcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZ2lk OiBTZXJ2ZXIgR3JvdXAgSWQKKyAgICAgICAgICAgIHNpZDogU2VydmVyIElk CisgICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElkCisgICAgICAgICAgICBz Y2lkOiBTY2hlbWEgSWQKKyAgICAgICAgICAgIGZvaWQ6IEZvcmVpZ24gVGFi bGUgSWQKKyAgICAgICAgIiIiCisKKyAgICAgICAgY29uZGl0aW9uID0gIiIi dHlwaXNkZWZpbmVkIEFORCB0eXB0eXBlIElOICgnYicsICdjJywgJ2QnLCAn ZScsICdyJykKK0FORCBOT1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBnX2Ns YXNzIFdIRVJFIHJlbG5hbWVzcGFjZT10eXBuYW1lc3BhY2UKK0FORCByZWxu YW1lID0gdHlwbmFtZSBBTkQgcmVsa2luZCAhPSAnYycpIEFORAorKHR5cG5h bWUgTk9UIExJS0UgJ18lJyBPUiBOT1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9N IHBnX2NsYXNzIFdIRVJFCityZWxuYW1lc3BhY2U9dHlwbmFtZXNwYWNlIEFO RCByZWxuYW1lID0gc3Vic3RyaW5nKHR5cG5hbWUgRlJPTSAyKTo6bmFtZQor QU5EIHJlbGtpbmQgIT0gJ2MnKSkiIiIKKworICAgICAgICBpZiBzZWxmLmJs dWVwcmludC5zaG93X3N5c3RlbV9vYmplY3RzOgorICAgICAgICAgICAgY29u ZGl0aW9uICs9ICIgQU5EIG5zcC5uc3BuYW1lICE9ICdpbmZvcm1hdGlvbl9z Y2hlbWEnIgorCisgICAgICAgICMgR2V0IFR5cGVzCisgICAgICAgIHN0YXR1 cywgdHlwZXMgPSBzZWxmLmdldF90eXBlcyhzZWxmLmNvbm4sIGNvbmRpdGlv bikKKworICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz10eXBlcykKKwor ICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAg ICAgZGF0YT10eXBlcywKKyAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAg ICAgKQorCisgICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBnZXRf Zm9yZWlnbl9zZXJ2ZXJzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIGZv aWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBG b3JlaWduIFNlcnZlcnMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg IGdpZDogU2VydmVyIEdyb3VwIElkCisgICAgICAgICAgICBzaWQ6IFNlcnZl ciBJZAorICAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJZAorICAgICAgICAg ICAgc2NpZDogU2NoZW1hIElkCisgICAgICAgICAgICBmb2lkOiBGb3JlaWdu IFRhYmxlIElkCisgICAgICAgICIiIgorICAgICAgICByZXMgPSBbeydsYWJl bCc6ICcnLCAndmFsdWUnOiAnJ31dCisgICAgICAgIHRyeToKKyAgICAgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1w bGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnZ2V0X2ZvcmVpZ25fc2VydmVycy5zcWwnXSkpCisgICAg ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFy cmF5KFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCisKKyAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cydd OgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoCisgICAgICAgICAgICAg ICAgICAgIHsnbGFiZWwnOiByb3dbJ3Nydm5hbWUnXSwgJ3ZhbHVlJzogcm93 WydzcnZuYW1lJ119CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg cmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgICAgICBk YXRhPXJlcywKKyAgICAgICAgICAgICAgICBzdGF0dXM9MjAwCisgICAgICAg ICAgICApCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1zdHIoZSkpCisKKyAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgZGVm IGdldF90YWJsZXMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgZm9pZD1O b25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIEZvcmVp Z24gVGFibGVzIGFzIHdlbGwgYXMgUGxhaW4gVGFibGVzLgorCisgICAgICAg IEFyZ3M6CisgICAgICAgICAgICBnaWQ6IFNlcnZlciBHcm91cCBJZAorICAg ICAgICAgICAgc2lkOiBTZXJ2ZXIgSWQKKyAgICAgICAgICAgIGRpZDogRGF0 YWJhc2UgSWQKKyAgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJZAorICAgICAg ICAgICAgZm9pZDogRm9yZWlnbiBUYWJsZSBJZAorICAgICAgICAiIiIKKyAg ICAgICAgcmVzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdnZXRfdGFibGVzLnNxbCddKSwgZm9pZD1mb2lkKQorICAgICAgICAg ICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwp CisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQor CisgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAg ICAgICAgICAgICAgIGRhdGE9cnNldFsncm93cyddLAorICAgICAgICAgICAg ICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICkKKworICAgICAgICBleGNl cHQ6CisgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdHJh Y2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGN1cnJlbnRf YXBwLmxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2su cHJpbnRfZXhjZXB0aW9uKGV4Y190eXBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3ZhbHVlLCBleGNfdHJhY2Vi YWNrLCBsaW1pdD0yKSkKKworICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZXhjX3ZhbHVlKSkKKworICAg IEBjaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgZ2V0X2NvbHVtbnMoc2Vs ZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgZm9pZD1Ob25lKToKKyAgICAgICAg IiIiCisgICAgICAgIFJldHVybnMgdGhlIFRhYmxlIENvbHVtbnMuCisKKyAg ICAgICAgQXJnczoKKyAgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3VwIElk CisgICAgICAgICAgICBzaWQ6IFNlcnZlciBJZAorICAgICAgICAgICAgZGlk OiBEYXRhYmFzZSBJZAorICAgICAgICAgICAgc2NpZDogU2NoZW1hIElkCisg ICAgICAgICAgICBmb2lkOiBGb3JlaWduIFRhYmxlIElkCisgICAgICAgICAg ICBhdHRyZWxpZDogVGFibGUgb2lkCisKKyAgICAgICAgUmV0dXJuczoKKyAg ICAgICAgICAgICAgSlNPTiBBcnJheSB3aXRoIGJlbG93IHBhcmFtZXRlcnMu CisgICAgICAgICAgICAgIGF0dG5hbWU6IENvbHVtbiBOYW1lCisgICAgICAg ICAgICAgIGRhdGF0eXBlOiBDb2x1bW4gRGF0YSBUeXBlCisgICAgICAgICAg ICAgIGluaGVyaXRlZF9mcm9tOiBQYXJlbnQgVGFibGUgZnJvbSB3aGljaCB0 aGUgcmVsYXRlZCBjb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlzIGluaGVyaXR0ZWQuCisgICAgICAgICIiIgorICAgICAgICByZXMg PSBbXQorICAgICAgICBkYXRhID0gcmVxdWVzdC5hcmdzIGlmIHJlcXVlc3Qu YXJncyBlbHNlIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYg ZGF0YSBhbmQgJ2F0dHJlbGlkJyBpbiBkYXRhOgorICAgICAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0 ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2dldF90YWJsZV9jb2x1bW5zLnNxbCddKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmVsaWQ9ZGF0 YVsnYXR0cmVsaWQnXSkKKyAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9 IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorCisgICAgICAgICAgICAg ICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisgICAgICAg ICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAg ICAgICAgICAgICAgZGF0YT1yZXNbJ3Jvd3MnXSwKKyAgICAgICAgICAgICAg ICAgICAgc3RhdHVzPTIwMAorICAgICAgICAgICAgICAgICkKKyAgICAgICAg ZXhjZXB0OgorICAgICAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhj X3RyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBjdXJy ZW50X2FwcC5sb2dnZXIuZXJyb3IodHJhY2ViYWNrLnByaW50X2V4Y2VwdGlv bigKKyAgICAgICAgICAgICAgICBleGNfdHlwZSwKKyAgICAgICAgICAgICAg ICBleGNfdmFsdWUsCisgICAgICAgICAgICAgICAgZXhjX3RyYWNlYmFjaywK KyAgICAgICAgICAgICAgICBsaW1pdD0yCisgICAgICAgICAgICAgICAgKQor ICAgICAgICAgICAgKQorCisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihleGNfdmFsdWUpKQorCisgICAg QGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEB2YWxpZGF0ZV9yZXF1ZXN0Cisg ICAgZGVmIGNyZWF0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkKToKKyAg ICAgICAgIiIiCisgICAgICAgIENyZWF0ZXMgYSBuZXcgRm9yZWlnbiBUYWJs ZSBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGdpZDog U2VydmVyIEdyb3VwIElkCisgICAgICAgICAgICBzaWQ6IFNlcnZlciBJZAor ICAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJZAorICAgICAgICAgICAgc2Np ZDogU2NoZW1hIElkCisgICAgICAgICAgICBmb2lkOiBGb3JlaWduIFRhYmxl IElkCisgICAgICAgICAgICBuYW1lOiBGb3JlaWduIFRhYmxlIE5hbWUKKyAg ICAgICAgICAgIGJhc2Vuc3A6IFNjaGVtYSBOYW1lCisgICAgICAgICAgICBm dHNydm5hbWU6IEZvcmVpZ24gU2VydmVyIE5hbWUKKworICAgICAgICBSZXR1 cm5zOgorICAgICAgICAgICAgRm9yZWlnbiBUYWJsZSBvYmplY3QgaW4ganNv biBmb3JtYXQuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAg ICAgICAjIEdldCBTUUwgdG8gY3JlYXRlIEZvcmVpZ24gVGFibGUKKyAgICAg ICAgICAgIHN0YXR1cywgU1FMID0gc2VsZi5nZXRfc3FsKGdpZCwgc2lkLCBk aWQsIHNjaWQsIHNlbGYucmVxdWVzdCkKKyAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1TUUwpCisKKyAgICAgICAgICAgIHN0YXR1cywg cmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKKyAgICAgICAg ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAg ICAgICMgTmVlZCBvaWQgdG8gYWRkIG9iamVjdCBpbiB0aGUgdHJlZSBhdCBi cm93c2VyLgorICAgICAgICAgICAgYmFzZW5zcCA9IHNlbGYucmVxdWVzdFsn YmFzZW5zcCddIGlmICgnYmFzZW5zcCcgaW4gc2VsZi5yZXF1ZXN0KSBcCisg ICAgICAgICAgICAgICAgZWxzZSBOb25lCisgICAgICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2dldF9vaWQuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJhc2Vuc3A9YmFzZW5zcCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuYW1lPXNlbGYucmVxdWVzdFsnbmFtZSddKQorICAg ICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFy cmF5KFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCisKKyAgICAgICAgICAgIGZvaWQsIHNjaWQgPSByZXNbJ3Jvd3Mn XVswXQorCisgICAgICAgICAgICByZXR1cm4ganNvbmlmeSgKKyAgICAgICAg ICAgICAgICBub2RlPXNlbGYuYmx1ZXByaW50LmdlbmVyYXRlX2Jyb3dzZXJf bm9kZSgKKyAgICAgICAgICAgICAgICAgICAgZm9pZCwKKyAgICAgICAgICAg ICAgICAgICAgc2NpZCwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXF1 ZXN0WyduYW1lJ10sCisgICAgICAgICAgICAgICAgICAgIGljb249Imljb24t Zm9yZWlnbi10YWJsZSIKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICApCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3Ry KGUpKQorCisgICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBkZWxl dGUoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgZm9pZCk6CisgICAgICAg ICIiIgorICAgICAgICBEcm9wcyB0aGUgRm9yZWlnbiBUYWJsZS4KKworICAg ICAgICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSWQK KyAgICAgICAgICAgIHNpZDogU2VydmVyIElkCisgICAgICAgICAgICBkaWQ6 IERhdGFiYXNlIElkCisgICAgICAgICAgICBzY2lkOiBTY2hlbWEgSWQKKyAg ICAgICAgICAgIGZvaWQ6IEZvcmVpZ24gVGFibGUgSWQKKyAgICAgICAgIiIi CisgICAgICAgIGlmIHNlbGYuY21kID09ICdkZWxldGUnOgorICAgICAgICAg ICAgIyBUaGlzIGlzIGEgY2FzY2FkZSBvcGVyYXRpb24KKyAgICAgICAgICAg IGNhc2NhZGUgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBj YXNjYWRlID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAj IEZldGNoIE5hbWUgYW5kIFNjaGVtYSBOYW1lIHRvIGRlbGV0ZSB0aGUgZm9y ZWlnbiB0YWJsZS4KKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdkZWxldGUuc3FsJ10pLCBzY2lkPXNj aWQsIGZvaWQ9Zm9pZCkKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2Vs Zi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAgICBuYW1l LCBiYXNlbnNwID0gcmVzWydyb3dzJ11bMF0KKworICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdkZWxldGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5hbWU9bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiYXNlbnNwPWJhc2Vuc3AsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzY2FkZT1jYXNjYWRlKQorICAgICAgICAg ICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FM KQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykK KworICAgICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAg ICAgICAgICAgICAgICBzdWNjZXNzPTEsCisgICAgICAgICAgICAgICAgaW5m bz1nZXR0ZXh0KCJGb3JlaWduIFRhYmxlIGRyb3BwZWQiKSwKKyAgICAgICAg ICAgICAgICBkYXRhPXsKKyAgICAgICAgICAgICAgICAgICAgJ2lkJzogZm9p ZCwKKyAgICAgICAgICAgICAgICAgICAgJ3NjaWQnOiBzY2lkLAorICAgICAg ICAgICAgICAgICAgICAnc2lkJzogc2lkLAorICAgICAgICAgICAgICAgICAg ICAnZ2lkJzogZ2lkLAorICAgICAgICAgICAgICAgICAgICAnZGlkJzogZGlk CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKQorCisgICAgICAg IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQorCisgICAg QGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEB2YWxpZGF0ZV9yZXF1ZXN0Cisg ICAgZGVmIHVwZGF0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCBmb2lk KToKKyAgICAgICAgIiIiCisgICAgICAgIFVwZGF0ZXMgdGhlIEZvcmVpZ24g VGFibGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGdpZDogU2Vy dmVyIEdyb3VwIElkCisgICAgICAgICAgICBzaWQ6IFNlcnZlciBJZAorICAg ICAgICAgICAgZGlkOiBEYXRhYmFzZSBJZAorICAgICAgICAgICAgc2NpZDog U2NoZW1hIElkCisgICAgICAgICAgICBmb2lkOiBGb3JlaWduIFRhYmxlIElk CisgICAgICAgICIiIgorICAgICAgICBzdGF0dXMsIFNRTCA9IHNlbGYuZ2V0 X3NxbChnaWQsIHNpZCwgZGlkLCBzY2lkLCBzZWxmLnJlcXVlc3QsIGZvaWQp CisKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9U1FMKQorCisgICAg ICAgIHRyeToKKyAgICAgICAgICAgIGlmIFNRTCBhbmQgU1FMLnN0cmlwKCdc bicpIGFuZCBTUUwuc3RyaXAoJyAnKToKKyAgICAgICAgICAgICAgICBzdGF0 dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihTUUwpCisgICAg ICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMp CisKKyAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfb2lkLnNxbCdd KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9p ZD1mb2lkKQorICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5j b25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAgICAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAg ICAgICBzY2lkID0gcmVzWydyb3dzJ11bMF1bJ3NjaWQnXQorCisgICAgICAg ICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAg ICAgICAgICAgICAgc3VjY2Vzcz0xLAorICAgICAgICAgICAgICAgICAgICBp bmZvPSJGb3JlaWduIFRhYmxlIHVwZGF0ZWQiLAorICAgICAgICAgICAgICAg ICAgICBkYXRhPXsKKyAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IGZv aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2NpZCc6IHNjaWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAnc2lkJzogc2lkLAorICAgICAgICAg ICAgICAgICAgICAgICAgJ2dpZCc6IGdpZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICdkaWQnOiBkaWQKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAg ICAgICAgICAgc3VjY2Vzcz0xLAorICAgICAgICAgICAgICAgICAgICBpbmZv PSJOb3RoaW5nIHRvIHVwZGF0ZSIsCisgICAgICAgICAgICAgICAgICAgIGRh dGE9eworICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogZm9pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICdzY2lkJzogc2NpZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICdzaWQnOiBzaWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAnZ2lkJzogZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAg J2RpZCc6IGRpZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAg ICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9c3RyKGUpKQorCisgICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRl ZiBzcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgZm9pZD1Ob25lKToK KyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIFNRTCBmb3IgdGhl IEZvcmVpZ24gVGFibGUgb2JqZWN0LgorCisgICAgICAgIEFyZ3M6CisgICAg ICAgICAgICBnaWQ6IFNlcnZlciBHcm91cCBJZAorICAgICAgICAgICAgc2lk OiBTZXJ2ZXIgSWQKKyAgICAgICAgICAgIGRpZDogRGF0YWJhc2UgSWQKKyAg ICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJZAorICAgICAgICAgICAgZm9pZDog Rm9yZWlnbiBUYWJsZSBJZAorICAgICAgICAiIiIKKyAgICAgICAgZGF0YSA9 IHNlbGYuX2ZldGNoX3Byb3BlcnRpZXMoZ2lkLCBzaWQsIGRpZCwgc2NpZCwg Zm9pZCwgaW5oZXJpdHM9VHJ1ZSkKKworICAgICAgICBjb2xfZGF0YSA9IFtd CisgICAgICAgIGZvciBjIGluIGRhdGFbJ2NvbHVtbnMnXToKKyAgICAgICAg ICAgIGlmIChub3QgJ2luaGVyaXRlZGZyb20nIGluIGMpIG9yIChjWydpbmhl cml0ZWRmcm9tJ10gaXMgTm9uZSk6CisgICAgICAgICAgICAgICAgY29sX2Rh dGEuYXBwZW5kKGMpCisKKyAgICAgICAgZGF0YVsnY29sdW1ucyddID0gY29s X2RhdGEKKworICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwgZGF0YT1kYXRh KQorCisgICAgICAgIHNxbF9oZWFkZXIgPSAiIiItLSB7MH06IHsxfQorCist LSBEUk9QIHswfSB7MX07CisKKyIiIi5mb3JtYXQoJ0ZPUkVJR04gVEFCTEUn LCBkYXRhWydiYXNlbnNwJ10gKyAiLiIgKyBkYXRhWyduYW1lJ10pCisKKyAg ICAgICAgU1FMID0gc3FsX2hlYWRlciArIFNRTAorCisgICAgICAgIHJldHVy biBhamF4X3Jlc3BvbnNlKHJlc3BvbnNlPVNRTC5zdHJpcCgnXG4nKSkKKwor ICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAdmFsaWRhdGVfcmVxdWVz dAorICAgIGRlZiBtc3FsKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIGZv aWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBt b2RpZmllZCBTUUwuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGdp ZDogU2VydmVyIEdyb3VwIElkCisgICAgICAgICAgICBzaWQ6IFNlcnZlciBJ ZAorICAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJZAorICAgICAgICAgICAg c2NpZDogU2NoZW1hIElkCisgICAgICAgICAgICBmb2lkOiBGb3JlaWduIFRh YmxlIElkCisgICAgICAgICAgICBuYW1lOiBGb3JlaWduIFRhYmxlIE5hbWUK KyAgICAgICAgICAgIGZ0c3J2bmFtZTogRm9yZWlnbiBTZXJ2ZXIgTmFtZQor CisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBTUUwgc3RhdGVtZW50 cyB0byBjcmVhdGUvdXBkYXRlIHRoZSBGb3JlaWduIFRhYmxlLgorICAgICAg ICAiIiIKKyAgICAgICAgc3RhdHVzLCBTUUwgPSBzZWxmLmdldF9zcWwoZ2lk LCBzaWQsIGRpZCwgc2NpZCwgc2VsZi5yZXF1ZXN0LCBmb2lkKQorICAgICAg ICBpZiBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jl c3BvbnNlKAorICAgICAgICAgICAgICAgIGRhdGE9U1FMLnN0cmlwKCdcbicp LAorICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICkK KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBTUUwKKworICAg IGRlZiBnZXRfc3FsKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIGRhdGEs IGZvaWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBHZW5yYXRlcyB0 aGUgU1FMIHN0YXRlbWVudHMgdG8gY3JlYXRlL3VwZGF0ZSB0aGUgRm9yZWln biBUYWJsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBT ZXJ2ZXIgR3JvdXAgSWQKKyAgICAgICAgICAgIHNpZDogU2VydmVyIElkCisg ICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElkCisgICAgICAgICAgICBzY2lk OiBTY2hlbWEgSWQKKyAgICAgICAgICAgIGZvaWQ6IEZvcmVpZ24gVGFibGUg SWQKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlm IGZvaWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb2xkX2RhdGEg PSBzZWxmLl9mZXRjaF9wcm9wZXJ0aWVzKGdpZCwgc2lkLCBkaWQsIHNjaWQs IGZvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluaGVyaXRzPVRydWUpCisKKyAgICAgICAgICAgICAg ICBpZiBub3Qgb2xkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIHJldHVy biBnb25lKGdldHRleHQoIiIiCisgICAgICAgIENvdWxkIG5vdCBmaW5kIHRo ZSBmb3JlaWduIHRhYmxlIGluIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgSXQg bWF5IGhhdmUgYmVlbiByZW1vdmVkIGJ5IGFub3RoZXIgdXNlciBvcgorICAg ICAgICBzaGlmdGVkIHRvIHRoZSBhbm90aGVyIHNjaGVtYS4KKyAgICAgICAg IiIiKSkKKworICAgICAgICAgICAgICAgICMgUHJlcGFyZSBkaWN0IG9mIGNv bHVtbnMgd2l0aCBrZXkgPSBjb2x1bW4ncyBhdHRudW0KKyAgICAgICAgICAg ICAgICAjIFdpbGwgdXNlIHRoaXMgaW4gdGhlIHVwZGF0ZSB0ZW1wbGF0ZSB3 aGVuIGFueSBjb2x1bW4gaXMKKyAgICAgICAgICAgICAgICAjIGNoYW5nZWQs IHRvIGlkZW50aWZ5IHRoZSBjb2x1bW5zLgorICAgICAgICAgICAgICAgIGNv bF9kYXRhID0ge30KKyAgICAgICAgICAgICAgICBmb3IgYyBpbiBvbGRfZGF0 YVsnY29sdW1ucyddOgorICAgICAgICAgICAgICAgICAgICBjb2xfZGF0YVtj WydhdHRudW0nXV0gPSBjCisKKyAgICAgICAgICAgICAgICBvbGRfZGF0YVsn Y29sdW1ucyddID0gY29sX2RhdGEKKworICAgICAgICAgICAgICAgIGlmICdj b2x1bW5zJyBpbiBkYXRhIGFuZCAnYWRkZWQnIGluIGRhdGFbJ2NvbHVtbnMn XToKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsnY29sdW1ucyddWydhZGRl ZCddID0gc2VsZi5fZm9ybWF0X2NvbHVtbnMoCisgICAgICAgICAgICAgICAg ICAgICAgICBkYXRhWydjb2x1bW5zJ11bJ2FkZGVkJ10pCisKKyAgICAgICAg ICAgICAgICBpZiAnY29sdW1ucycgaW4gZGF0YSBhbmQgJ2NoYW5nZWQnIGlu IGRhdGFbJ2NvbHVtbnMnXToKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsn Y29sdW1ucyddWydjaGFuZ2VkJ10gPSBzZWxmLl9mb3JtYXRfY29sdW1ucygK KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXVsnY2hh bmdlZCddKQorCisgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1w bGF0ZV9wYXRoLCAndXBkYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAg ICAgZGF0YT1kYXRhLCBvX2RhdGE9b2xkX2RhdGEKKyAgICAgICAgICAgICAg ICApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGFb J2NvbHVtbnMnXSA9IHNlbGYuX2Zvcm1hdF9jb2x1bW5zKGRhdGFbJ2NvbHVt bnMnXSkKKyAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3Fs J10pLCBkYXRhPWRhdGEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgU1FM CisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAg ICAgcmV0dXJuIEZhbHNlLCBlCisKKyAgICBAY2hlY2tfcHJlY29uZGl0aW9u CisgICAgZGVmIGRlcGVuZGVudHMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2Np ZCwgZm9pZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9u IGdldCB0aGUgZGVwZW5kZW50cyBhbmQgcmV0dXJuIGFqYXggcmVzcG9uc2UK KyAgICAgICAgZm9yIHRoZSBGb3JlaWduIFRhYmxlIG9iamVjdC4KKworICAg ICAgICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSWQK KyAgICAgICAgICAgIHNpZDogU2VydmVyIElkCisgICAgICAgICAgICBkaWQ6 IERhdGFiYXNlIElkCisgICAgICAgICAgICBzY2lkOiBTY2hlbWEgSWQKKyAg ICAgICAgICAgIGZvaWQ6IEZvcmVpZ24gVGFibGUgSWQKKyAgICAgICAgIiIi CisgICAgICAgIGRlcGVuZGVudHNfcmVzdWx0ID0gc2VsZi5nZXRfZGVwZW5k ZW50cyhzZWxmLmNvbm4sIGZvaWQpCisgICAgICAgIHJldHVybiBhamF4X3Jl c3BvbnNlKAorICAgICAgICAgICAgcmVzcG9uc2U9ZGVwZW5kZW50c19yZXN1 bHQsCisgICAgICAgICAgICBzdGF0dXM9MjAwCisgICAgICAgICkKKworICAg IEBjaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgZGVwZW5kZW5jaWVzKHNl bGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIGZvaWQpOgorICAgICAgICAiIiIK KyAgICAgICAgVGhpcyBmdW5jdGlvbiBnZXQgdGhlIGRlcGVuZGVuY2llcyBh bmQgcmV0dXJuIGFqYXggcmVzcG9uc2UKKyAgICAgICAgZm9yIHRoZSAgRm9y ZWlnbiBUYWJsZSBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg ICAgIGdpZDogU2VydmVyIEdyb3VwIElkCisgICAgICAgICAgICBzaWQ6IFNl cnZlciBJZAorICAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJZAorICAgICAg ICAgICAgc2NpZDogU2NoZW1hIElkCisgICAgICAgICAgICBmb2lkOiBGb3Jl aWduIFRhYmxlIElkCisgICAgICAgICIiIgorICAgICAgICBkZXBlbmRlbmNp ZXNfcmVzdWx0ID0gc2VsZi5nZXRfZGVwZW5kZW5jaWVzKHNlbGYuY29ubiwg Zm9pZCkKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAg ICAgICByZXNwb25zZT1kZXBlbmRlbmNpZXNfcmVzdWx0LAorICAgICAgICAg ICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBkZWYgX2Zvcm1hdF9j b2x1bW5zKHNlbGYsIGNvbHVtbnMpOgorICAgICAgICAiIiIKKyAgICAgICAg Rm9ybWF0IFRhYmxlIENvbHVtbnMuCisgICAgICAgICIiIgorICAgICAgICBm b3IgYyBpbiBjb2x1bW5zOgorICAgICAgICAgICAgaWYgJ1tdJyBpbiBjWydk YXRhdHlwZSddOgorICAgICAgICAgICAgICAgIGNbJ2RhdGF0eXBlJ10gPSBj WydkYXRhdHlwZSddLnJlcGxhY2UoJ1tdJywgJycpCisgICAgICAgICAgICAg ICAgY1snaXNBcnJheVR5cGUnXSA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAgICAgY1snaXNBcnJheVR5cGUnXSA9IEZhbHNlCisK KyAgICAgICAgcmV0dXJuIGNvbHVtbnMKKworCisgICAgZGVmIF9mZXRjaF9w cm9wZXJ0aWVzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIGZvaWQsIGlu aGVyaXRzPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMg dGhlIEZvcmVpZ24gVGFibGUgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIHVz ZWQgaW4KKyAgICAgICAgcHJvcGVydGllcywgc3FsIGFuZCBnZXRfc3FsIGZ1 bmN0aW9ucy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBT ZXJ2ZXIgR3JvdXAgSWQKKyAgICAgICAgICAgIHNpZDogU2VydmVyIElkCisg ICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElkCisgICAgICAgICAgICBzY2lk OiBTY2hlbWEgSWQKKyAgICAgICAgICAgIGZvaWQ6IEZvcmVpZ24gVGFibGUg SWQKKyAgICAgICAgICAgIGluaGVyaXRzOiBJZiBUcnVlIHRoZW4gaW5oZXJp dGVkIHRhYmxlIHdpbGwgYmUgZmV0Y2hlZCBmcm9tCisgICAgICAgICAgICAg ICAgICAgICAgZGF0YWJhc2UKKworICAgICAgICBSZXR1cm5zOgorCisgICAg ICAgICIiIgorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lkPXNjaWQsIGZvaWQ9Zm9p ZCkKKyAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9k aWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQor CisgICAgICAgIGlmIGxlbihyZXNbJ3Jvd3MnXSkgPT0gMDoKKyAgICAgICAg ICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3Mn XVswXQorCisgICAgICAgICMgR2V0IGZvcm1hdHRlZCBTZWN1cml0eSBMYWJl bHMKKyAgICAgICAgaWYgJ3NlY2xhYmVscycgaW4gZGF0YToKKyAgICAgICAg ICAgIGRhdGEudXBkYXRlKHBhcnNlX3NlY19sYWJlbHNfZnJvbV9kYihkYXRh WydzZWNsYWJlbHMnXSkpCisKKyAgICAgICAgIyBHZXQgZm9ybWF0dGVkIFZh cmlhYmxlcworICAgICAgICBpZiAnZnRvcHRpb25zJyBpbiBkYXRhOgorICAg ICAgICAgICAgZGF0YS51cGRhdGUoeydzdHJmdG9wdGlvbnMnOiBkYXRhWydm dG9wdGlvbnMnXX0pCisgICAgICAgICAgICBkYXRhLnVwZGF0ZShzZWxmLl9w YXJzZV92YXJpYWJsZXNfZnJvbV9kYihkYXRhWydmdG9wdGlvbnMnXSkpCisK KyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2dldF9jb25zdHJhaW50cy5zcWwnXSksIGZvaWQ9Zm9p ZCkKKyAgICAgICAgc3RhdHVzLCBjb25zID0gc2VsZi5jb25uLmV4ZWN1dGVf ZGljdChTUUwpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPWNvbnMp CisKKyAgICAgICAgaWYgY29ucyBhbmQgJ3Jvd3MnIGluIGNvbnM6CisgICAg ICAgICAgICBkYXRhWydjb25zdHJhaW50cyddID0gY29uc1sncm93cyddCisK KyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2dldF9jb2x1bW5zLnNxbCddKSwgZm9pZD1mb2lkKQor ICAgICAgICBzdGF0dXMsIGNvbHMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0 KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9Y29scykKKwor ICAgICAgICAjIFRoZSBMZW5ndGggYW5kIHRoZSBwcmVjaXNpb24gb2YgdGhl IERhdGF0eXBlIHNob3VsZCBiZSBzZXBhcmF0ZWQuCisgICAgICAgICMgVGhl IEZvcm1hdCB3ZSBnZXR0aW5nIGZyb20gZGF0YWJhc2UgaXM6IG51bWVyaWMo MSwxKQorICAgICAgICAjIFNvLCB3ZSBuZWVkIHRvIHNlcGFyYXRlIGl0IGFz IExlbmd0aDogMSwgUHJlY2lzaW9uOiAxCisgICAgICAgIGZvciBjIGluIGNv bHNbJ3Jvd3MnXToKKyAgICAgICAgICAgIGlmIGNbJ2Z1bGx0eXBlJ10gIT0g JycgYW5kIGNbJ2Z1bGx0eXBlJ10uZmluZCgiKCIpID4gMDoKKyAgICAgICAg ICAgICAgICBzdWJzdHIgPSBjWydmdWxsdHlwZSddW2NbJ2Z1bGx0eXBlJ10u ZmluZCgiKCIpICsgMTpjWydmdWxsdHlwZSddLmZpbmQoIikiKV0KKyAgICAg ICAgICAgICAgICB0eXBsZW4gPSBzdWJzdHIuc3BsaXQoIiwiKQorICAgICAg ICAgICAgICAgIGlmIGxlbih0eXBsZW4pID4gMToKKyAgICAgICAgICAgICAg ICAgICAgY1sndHlwbGVuJ10gPSBpbnQodHlwbGVuWzBdKQorICAgICAgICAg ICAgICAgICAgICBjWydwcmVjaXNpb24nXSA9IGludCh0eXBsZW5bMV0pCisg ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY1sn dHlwbGVuJ10gPSBpbnQodHlwbGVuWzBdKQorICAgICAgICAgICAgICAgICAg ICBjWydwcmVjaXNpb24nXSA9IE5vbmUKKworICAgICAgICBpZiBjb2xzIGFu ZCAncm93cycgaW4gY29sczoKKyAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMn XSA9IGNvbHNbJ3Jvd3MnXQorCisgICAgICAgIGRhdGFbJ3N0cmNvbHVtbidd ID0gJycKKyAgICAgICAgc3RyX2NvbHMgPSBbXQorICAgICAgICBpZiAnY29s dW1ucycgaW4gZGF0YToKKyAgICAgICAgICAgIGZvciBjIGluIGRhdGFbJ2Nv bHVtbnMnXToKKyAgICAgICAgICAgICAgICBzdHJfY29scy5hcHBlbmQoY1sn c3RyY29sdW1uJ10pCisgICAgICAgICAgICBkYXRhWydzdHJjb2x1bW4nXSA9 ICcsICcuam9pbihzdHJfY29scykKKworICAgICAgICAjIEdldCBJbmhlcml0 ZWQgdGFibGUgbmFtZXMgZnJvbSB0aGVpciBPSUQKKyAgICAgICAgaWYgaW5o ZXJpdHM6CisgICAgICAgICAgICBpZiAnaW5oZXJpdHMnIGluIGRhdGEgYW5k IGRhdGFbJ2luaGVyaXRzJ106CisgICAgICAgICAgICAgICAgaW5oZXJpdHMg PSB0dXBsZShbaW50KHgpIGZvciB4IGluIGRhdGFbJ2luaGVyaXRzJ11dKQor ICAgICAgICAgICAgICAgIGlmIGxlbihpbmhlcml0cykgPT0gMToKKyAgICAg ICAgICAgICAgICAgICAgaW5oZXJpdHMgPSAiKCIgKyBzdHIoaW5oZXJpdHNb MF0pICsgIikiCisKKyAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRf dGFibGVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXR0cmVsaWQ9aW5oZXJpdHMpCisgICAgICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKwor ICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQorCisgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiByZXNb J3Jvd3MnXVswXToKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsnaW5oZXJp dHMnXSA9IHJlc1sncm93cyddWzBdWydpbmhlcml0cyddCisKKyAgICAgICAg cmV0dXJuIGRhdGEKKworICAgIGRlZiBfcGFyc2VfdmFyaWFibGVzX2Zyb21f ZGIoc2VsZiwgZGJfdmFyaWFibGVzKToKKyAgICAgICAgIiIiCisgICAgICAg IEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgb3V0cHV0IGZvciB2YXJpYWJsZXMu CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRiX3ZhcmlhYmxlczog VmFyaWFibGUgb2JqZWN0CisKKyAgICAgICAgICAgICAgICBFeHBlY3RlZCBP YmplY3QgRm9ybWF0OgorICAgICAgICAgICAgICAgICAgICBbJ29wdGlvbjE9 dmFsdWUxJywgLi5dCisgICAgICAgICAgICAgICAgd2hlcmU6CisgICAgICAg ICAgICAgICAgICAgIHVzZXJfbmFtZSBhbmQgZGF0YWJhc2UgYXJlIG9wdGlv bmFsCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBWYXJpYWJsZSBP YmplY3QgaW4gYmVsb3cgZm9ybWF0OgorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAndmFyaWFibGVzJzogWworICAgICAgICAgICAgICAg ICAgICB7J25hbWUnOiAndmFyX25hbWUnLCAndmFsdWUnOiAndmFyX3ZhbHVl JywKKyAgICAgICAgICAgICAgICAgICAgJ3VzZXJfbmFtZSc6ICd1c2VyX25h bWUnLCAnZGF0YWJhc2UnOiAnZGF0YWJhc2VfbmFtZSd9LAorICAgICAgICAg ICAgICAgICAgICAuLi5dCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIHdoZXJlOgorICAgICAgICAgICAgICAgICAgICB1c2VyX25hbWUg YW5kIGRhdGFiYXNlIGFyZSBvcHRpb25hbAorICAgICAgICAiIiIKKyAgICAg ICAgdmFyaWFibGVzX2xzdCA9IFtdCisKKyAgICAgICAgaWYgZGJfdmFyaWFi bGVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIHJvdyBpbiBkYl92 YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgdmFyX25hbWUsIHZhcl92YWx1 ZSA9IHJvdy5zcGxpdCgiPSIpCisgICAgICAgICAgICAgICAgIyBCZWNhdXNl IHdlIHNhdmUgYXMgYm9vbGVhbiBzdHJpbmcgaW4gZGIgc28gaXQgbmVlZHMK KyAgICAgICAgICAgICAgICAjIGNvbnZlcnNpb24KKyAgICAgICAgICAgICAg ICBpZiB2YXJfdmFsdWUgPT0gJ2ZhbHNlJyBvciB2YXJfdmFsdWUgPT0gJ29m Zic6CisgICAgICAgICAgICAgICAgICAgIHZhcl92YWx1ZSA9IEZhbHNlCisK KyAgICAgICAgICAgICAgICB2YXJfZGljdCA9IHsnb3B0aW9uJzogdmFyX25h bWUsICd2YWx1ZSc6IHZhcl92YWx1ZX0KKworICAgICAgICAgICAgICAgIHZh cmlhYmxlc19sc3QuYXBwZW5kKHZhcl9kaWN0KQorCisgICAgICAgIHJldHVy biB7ImZ0b3B0aW9ucyI6IHZhcmlhYmxlc19sc3R9CisKK0ZvcmVpZ25UYWJs ZVZpZXcucmVnaXN0ZXJfbm9kZV92aWV3KGJsdWVwcmludCkKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3N0YXRpYy9pbWcv Y29sbC1mb3JlaWduLXRhYmxlLnBuZyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVp Z25fdGFibGVzL3N0YXRpYy9pbWcvY29sbC1mb3JlaWduLXRhYmxlLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzFmNzQyYmJjYTA1OTgwZjNjNGNi ZjNjMTZhZjBlMGNmOWFmYTQxCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA0 OTIKemNtVjxJMFRjZC1QKTxoOzNLfExrMDAwZTFOSkxUcTAwMG1HMDAwbU8w e3tSM0NAbHxEMDAwMDFiNWNoXzBJdHApCno9PlB4I3g9PjcxTVBzQDRBKGlL ZiZpPDZvYEt7SVIlR35QUzxMQm4qPWpQXy0jbnxSe3gjJSNRPSFuaCFRbjIh fgp6KSRRSGctR2peaWRkQjsyITEtM1BeR1UxbEoqRGsycDZlJT4+RTdQbmdV a0kmdE1FT2Y/SUBZKS17MFRqO15PMXUKejxLXlkkaHJzOUg7TllqSHI+dn4z P0NrOUI/KFhVNz5FWXF3cmx6Sy1zSG07MnQqQGBJPmd3dXslSmIqdj1qLWUx Cno9Oy1MRnNqMlZwQEEye1I/ZHxRVnM7YVFDdShHblU8bUJZPUBiRylhYCl8 UGJENEZQcXBUIzJwMDAwNFdRY2hDPAp6SzwzekgwMDAwMVZvT0l2MEVoKTBO QntyOzMyO2JSYXt2R2Y2OTUxVTY5RTk0b0VRS0EwMChxUU8rXlJXMH57NDcK ekNWYzslY0tgcVlvPUhTT1IyYjc7JiVGLTlGYnFifmReQ2E5RjV5PVEzSmhV dG1RMWRNIXUhNyRQNzZaUjxJUiFmCno4MnJZSmdHRldDYSNoejJAZjZ6aXpk PGBRQEgyelckMj1udUhDJSQ0P1QobTJBbDdnJD1FNVl8aUFYZks3c0VqOwp6 UExpYDJKYz1ReTA0dnNNPSsmXmRIK1lkREpDbCtjRVFieVVlSUghOHF9TCNG MW9rMj80UWtOblBUKHFUYFhPVFEKaTxESDQ4a2xOVU5aK2A9TShoVW1tSztS WXQwMDAwPE1OVU1uTFNUWD1UbHZ1ZAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx CgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMv c3RhdGljL2ltZy9mb3JlaWduLXRhYmxlLnBuZyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L2ZvcmVpZ25fdGFibGVzL3N0YXRpYy9pbWcvZm9yZWlnbi10YWJsZS5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNjMTMzODg1YTBjMGM3MDUwZTRj ODU4MGFkZmQ3NWY4Y2VhYTg1MgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg NTYzCnpjbVYtMzA/aHIxUCk8aDszS3xMazAwMGUxTkpMVHEwMDBtRzAwMG1P MHt7UjNDQGx8RDAwMDAxYjVjaF8wSXRwKQp6PT5QeCMpbGZgU01kYWs8QShp S2koRXBPcGA9Wm5KeTRkWn0tfDY0dT1qRzwtPUh9K3c7cE1FKD1WUCh4RX1R NiEKeiY7TnpZeyhpeyhiO0o1PnpXOENkX0V4ZzxPUlZyZnJ8dmhQPkBBJD9D WWI0ayU+OFM9Xyg3KWJIbGdlO29hKGdKCno/JW16cC1ybkJkLXswV2k7Tmp1 bjteTn10PEt5TSE8JWhyTD07LUxfPkZNWF49YyVjd3RnTmk7P0NrQ0I/ZUZq Sgp6Pmd3dkpyPkNmPnNJOUg3dWRsRGA+K0E2RkBiZEVWPyhYaVp0RTtmRXUo N2VSdmErKUFAJHZLWF5ZISlod1k5Yk8Kel9WKVByX19uc1R4Vlg2WV94RHQj S1JvfmQwMERHVFBFIUN0PUdiTmMwMDA0RU9HaVdpaHlAKTswMDAwOWE3YkJt CnowMDBYVTAwMFhVMFJXbnU3eXRrTzJYc2tJTUYtbWg5MkY9ZWxKV21yMDAw MldOa2w8Wjd9SGhILUVNK0Y1QyEwIQp6IWFgU09FITUmcU9OJiUodz9JVE9h VDlIX0c0dVpLPFNleHAmZlI9RG5hbUxhP25WZCE0PyFyU18pKTEqZzQpQ1EK ekRiMWNJRlpweWZVa3IpeVlucl89Nno/QkBQJWY5JT1XNHpBYGNgSXUra1dY MGpUfUhWS2tXdUpDSSZUTWd7bldhCnp0dXx5TUJJKzRAOXUwKnNCV3NDYVJv OG9AMDNkWHdiUFZoRXE/MisxbDNac2EyRyFJTWNSNVZUJGFObD9vclJkRgp6 MExhTHQ0RTZiITt+X1VJTmIrWkorOytXQEwpU29pQFBxayh8MF95ejZ3fCZR UXs/fnYwMDJvdlBESExrVjFuRmgKQkNuRXA9CgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3Rh Ymxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvanMvZm9yZWlnbl90YWJs ZXMuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0 ZXMvZm9yZWlnbl90YWJsZXMvanMvZm9yZWlnbl90YWJsZXMuanMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzZTg1YwotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3Rl bXBsYXRlcy9mb3JlaWduX3RhYmxlcy9qcy9mb3JlaWduX3RhYmxlcy5qcwpA QCAtMCwwICsxLDcwNiBAQAorLyogQ3JlYXRlIGFuZCBSZWdpc3RlciBGb3Jl aWduIFRhYmxlIENvbGxlY3Rpb24gYW5kIE5vZGUuICovCitkZWZpbmUoCisg ICAgICAgIFsnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5z dHJpbmcnLCAncGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLCAnYWxlcnRp ZnknLCAncGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24nXSwKK2Z1bmN0aW9u KCQsIF8sIFMsIHBnQWRtaW4sIHBnQnJvd3NlciwgYWxlcnRpZnkpIHsKKwor ICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1snY29sbC1mb3JlaWduLXRhYmxlJ10p IHsKKyAgICB2YXIgZm9yZWlnbnRhYmxlID0gcGdBZG1pbi5Ccm93c2VyLk5v ZGVzWydjb2xsLWZvcmVpZ24tdGFibGUnXSA9CisgICAgICBwZ0FkbWluLkJy b3dzZXIuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICBub2RlOiAnZm9y ZWlnbi10YWJsZScsCisgICAgICAgIGxhYmVsOiAne3sgXygnRm9yZWlnbiBU YWJsZXMnKSB9fScsCisgICAgICAgIHR5cGU6ICdjb2xsLWZvcmVpZ24tdGFi bGUnLAorICAgICAgICBjb2x1bW5zOiBbJ25hbWUnLCAnb3duZXInLCAnZGVz Y3JpcHRpb24nXQorICAgICAgfSk7CisgIH07CisKKyAgLy8gU2VjdXJpdHkg TW9kZWwKKyAgdmFyIFNlY3VyaXR5TW9kZWwgPSBCYWNrZm9ybS5TZWN1cml0 eU1vZGVsID0gcGdBZG1pbi5Ccm93c2VyLk5vZGUuTW9kZWwuZXh0ZW5kKHsK KyAgICBkZWZhdWx0czogeworICAgICAgcHJvdmlkZXI6IG51bGwsCisgICAg ICBsYWJlbDogbnVsbAorICAgIH0sCisgICAgc2NoZW1hOiBbeworICAgICAg aWQ6ICdwcm92aWRlcicsIGxhYmVsOiAne3sgXygnUHJvdmlkZXInKSB9fScs CisgICAgICB0eXBlOiAndGV4dCcsIGVkaXRhYmxlOiB0cnVlLCBjZWxsSGVh ZGVyQ2xhc3Nlczond2lkdGhfcGVyY2VudF81MCcKKyAgICB9LHsKKyAgICAg IGlkOiAnc2VjdXJpdHlfbGFiZWwnLCBsYWJlbDogJ3t7IF8oJ1NlY3VyaXR5 IExhYmVsJykgfX0nLAorICAgICAgdHlwZTogJ3RleHQnLCBlZGl0YWJsZTog dHJ1ZSwgY2VsbEhlYWRlckNsYXNzZXM6J3dpZHRoX3BlcmNlbnRfNTAnCisg ICAgfV0sCisgICAgdmFsaWRhdGU6IGZ1bmN0aW9uKCkgeworICAgICAgdmFy IGVyciA9IHt9LAorICAgICAgICAgIGVycm1zZyA9IG51bGwsCisgICAgICAg ICAgZGF0YSA9IHRoaXMudG9KU09OKCk7CisKKyAgICAgIGlmIChfLmlzVW5k ZWZpbmVkKGRhdGEuc2VjdXJpdHlfbGFiZWwpIHx8CisgICAgICAgIF8uaXNO dWxsKGRhdGEuc2VjdXJpdHlfbGFiZWwpIHx8CisgICAgICAgIFN0cmluZyhk YXRhLnNlY3VyaXR5X2xhYmVsKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycp ID09ICcnKSB7CisgICAgICAgIHJldHVybiBfKCJQbGVhc2Ugc3BlY2lmeSB0 aGUgdmFsdWUgZm9yIGFsbCB0aGUgc2VjdXJpdHkgcHJvdmlkZXJzLiIpOwor ICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9KTsKKwor ICAvLyBJbnRlZ2VyIENlbGwgZm9yIENvbHVtbnMgTGVuZ3RoIGFuZCBQcmVj aXNpb24KKyAgdmFyIEludGVnZXJEZXBDZWxsID0gQmFja2dyaWQuSW50ZWdl ckNlbGwuZXh0ZW5kKHsKKyAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkg eworICAgICAgICBCYWNrZ3JpZC5OdW1iZXJDZWxsLnByb3RvdHlwZS5pbml0 aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIEJhY2tn cmlkLkV4dGVuc2lvbi5EZXBlbmRlbnRDZWxsLnByb3RvdHlwZS5pbml0aWFs aXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB9LAorICAgICAg ZGVwZW5kZW50Q2hhbmdlZDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlz LiRlbC5lbXB0eSgpOworICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVs OworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW47CisgICAgICAg IGVkaXRhYmxlID0gdGhpcy5jb2x1bW4uZ2V0KCJlZGl0YWJsZSIpOworCisg ICAgICAgIGlzX2VkaXRhYmxlID0gXy5pc0Z1bmN0aW9uKGVkaXRhYmxlKSA/ ICEhZWRpdGFibGUuYXBwbHkoY29sdW1uLCBbbW9kZWxdKSA6ICEhZWRpdGFi bGU7CisgICAgICAgIGlmIChpc19lZGl0YWJsZSl7IHRoaXMuJGVsLmFkZENs YXNzKCJlZGl0YWJsZSIpOyB9CisgICAgICAgIGVsc2UgeyB0aGlzLiRlbC5y ZW1vdmVDbGFzcygiZWRpdGFibGUiKTsgfQorCisgICAgICAgIHRoaXMuZGVs ZWdhdGVFdmVudHMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9 LAorICAgICAgcmVtb3ZlOiBCYWNrZ3JpZC5FeHRlbnNpb24uRGVwZW5kZW50 Q2VsbC5wcm90b3R5cGUucmVtb3ZlCisgICAgfSk7CisKKworICAvLyBDb2x1 bW5zIE1vZGVsCisgIHZhciBDb2x1bW5zTW9kZWwgPSBwZ0FkbWluLkJyb3dz ZXIuTm9kZS5Nb2RlbC5leHRlbmQoeworICAgIGlkQXR0cmlidXRlOiAnYXR0 bnVtJywKKyAgICBkZWZhdWx0czogeworICAgICAgYXR0bmFtZTogdW5kZWZp bmVkLAorICAgICAgZGF0YXR5cGU6IHVuZGVmaW5lZCwKKyAgICAgIHR5cGxl bjogdW5kZWZpbmVkLAorICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsCisg ICAgICB0eXBkZWZhdWx0OiB1bmRlZmluZWQsCisgICAgICBhdHRub3RudWxs OiB1bmRlZmluZWQsCisgICAgICBjb2xsbmFtZTogdW5kZWZpbmVkLAorICAg ICAgYXR0bnVtOiB1bmRlZmluZWQsCisgICAgICBpbmhlcml0ZWRmcm9tOiB1 bmRlZmluZWQsCisgICAgICBpbmhlcml0ZWRpZDogdW5kZWZpbmVkLAorICAg IH0sCisgICAgdHlwZV9vcHRpb25zOiB1bmRlZmluZWQsCisgICAgc2NoZW1h OiBbeworICAgICAgICBpZDogJ2F0dG5hbWUnLCBsYWJlbDone3sgXygnTmFt ZScpIH19JywgY2VsbDogJ3N0cmluZycsIHR5cGU6ICd0ZXh0JywKKyAgICAg ICAgZWRpdGFibGU6ICdpc19lZGl0YWJsZV9jb2x1bW4nLCBjZWxsSGVhZGVy Q2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMjAnCisgICAgICB9LHsKKyAgICAg ICAgaWQ6ICdkYXRhdHlwZScsIGxhYmVsOid7eyBfKCdEYXRhIFR5cGUnKSB9 fScsIGNlbGw6ICdub2RlLWFqYXgtb3B0aW9ucycsCisgICAgICAgIGNvbnRy b2w6ICdub2RlLWFqYXgtb3B0aW9ucycsIHR5cGU6ICd0ZXh0JywgdXJsOiAn Z2V0X3R5cGVzJywKKyAgICAgICAgZWRpdGFibGU6ICdpc19lZGl0YWJsZV9j b2x1bW4nLCBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMjAn LAorICAgICAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uKGQsIHNlbGYpeworICAg ICAgICAgICAgc2VsZi5tb2RlbC50eXBlX29wdGlvbnMgPSBkOworICAgICAg ICAgICAgcmV0dXJuIGQ7CisgICAgICAgICAgfQorICAgICAgfSx7CisgICAg ICAgIGlkOiAndHlwbGVuJywgbGFiZWw6J3t7IF8oJ0xlbmd0aCcpIH19JywK KyAgICAgICAgY2VsbDogSW50ZWdlckRlcENlbGwsCisgICAgICAgIHR5cGU6 ICd0ZXh0JywgZGVwczogWydkYXRhdHlwZSddLAorICAgICAgICBlZGl0YWJs ZTogZnVuY3Rpb24obSkgeworICAgICAgICAvLyBXZSB3aWxsIHN0b3JlIHR5 cGUgZnJvbSBzZWxlY3RlZCBmcm9tIGNvbWJvYm94CisgICAgICAgICAgaWYo IShfLmlzVW5kZWZpbmVkKG0uZ2V0KCdpbmhlcml0ZWRpZCcpKQorICAgICAg ICAgICAgfHwgXy5pc051bGwobS5nZXQoJ2luaGVyaXRlZGlkJykpCisgICAg ICAgICAgICB8fCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCdpbmhlcml0ZWRmcm9t JykpCisgICAgICAgICAgICB8fCBfLmlzTnVsbChtLmdldCgnaW5oZXJpdGVk ZnJvbScpKSkpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgICAgdmFyIG9m X3R5cGUgPSBtLmdldCgnZGF0YXR5cGUnKTsKKyAgICAgICAgaWYobS50eXBl X29wdGlvbnMpIHsKKyAgICAgICAgICBtLnNldCgnaXNfdGxlbmd0aCcsIGZh bHNlLCB7c2lsZW50OiB0cnVlfSk7CisKKyAgICAgICAgICAvLyBpdGVyYXRp bmcgb3ZlciBhbGwgdGhlIHR5cGVzCisgICAgICAgICAgXy5lYWNoKG0udHlw ZV9vcHRpb25zLCBmdW5jdGlvbihvKSB7CisgICAgICAgICAgICAvLyBpZiB0 eXBlIGZyb20gc2VsZWN0ZWQgZnJvbSBjb21ib2JveCBtYXRjaGVzIGluIG9w dGlvbnMKKyAgICAgICAgICAgIGlmICggb2ZfdHlwZSA9PSBvLnZhbHVlICkg eworICAgICAgICAgICAgICAgIC8vIGlmIGxlbmd0aCBpcyBhbGxvd2VkIGZv ciBzZWxlY3RlZCB0eXBlCisgICAgICAgICAgICAgICAgaWYoby5sZW5ndGgp CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLy8gc2V0 IHRoZSB2YWx1ZXMgaW4gbW9kZWwKKyAgICAgICAgICAgICAgICAgIG0uc2V0 KCdpc190bGVuZ3RoJywgdHJ1ZSwge3NpbGVudDogdHJ1ZX0pOworICAgICAg ICAgICAgICAgICAgbS5zZXQoJ21pbl92YWwnLCBvLm1pbl92YWwsIHtzaWxl bnQ6IHRydWV9KTsKKyAgICAgICAgICAgICAgICAgIG0uc2V0KCdtYXhfdmFs Jywgby5tYXhfdmFsLCB7c2lsZW50OiB0cnVlfSk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICAg IHJldHVybiBtLmdldCgnaXNfdGxlbmd0aCcpOworICAgICAgICB9CisgICAg ICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAgICAgICBjZWxsSGVh ZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMTAnCisgICAgICB9LHsKKyAg ICAgICAgaWQ6ICdwcmVjaXNpb24nLCBsYWJlbDone3sgXygnUHJlY2lzaW9u JykgfX0nLAorICAgICAgICB0eXBlOiAndGV4dCcsIGRlcHM6IFsnZGF0YXR5 cGUnXSwKKyAgICAgICAgY2VsbDogSW50ZWdlckRlcENlbGwsCisgICAgICAg IGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgaWYoIShfLmlz VW5kZWZpbmVkKG0uZ2V0KCdpbmhlcml0ZWRpZCcpKQorICAgICAgICAgICAg fHwgXy5pc051bGwobS5nZXQoJ2luaGVyaXRlZGlkJykpCisgICAgICAgICAg ICB8fCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCdpbmhlcml0ZWRmcm9tJykpCisg ICAgICAgICAgICB8fCBfLmlzTnVsbChtLmdldCgnaW5oZXJpdGVkZnJvbScp KSkpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgICAgICB2YXIgb2ZfdHlw ZSA9IG0uZ2V0KCdkYXRhdHlwZScpOworICAgICAgICAgIGlmKG0udHlwZV9v cHRpb25zKSB7CisgICAgICAgICAgICAgbS5zZXQoJ2lzX3ByZWNpc2lvbics IGZhbHNlLCB7c2lsZW50OiB0cnVlfSk7CisgICAgICAgICAgICAvLyBpdGVy YXRpbmcgb3ZlciBhbGwgdGhlIHR5cGVzCisgICAgICAgICAgICBfLmVhY2go bS50eXBlX29wdGlvbnMsIGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgICAgICAg Ly8gaWYgdHlwZSBmcm9tIHNlbGVjdGVkIGZyb20gY29tYm9ib3ggbWF0Y2hl cyBpbiBvcHRpb25zCisgICAgICAgICAgICAgIGlmICggb2ZfdHlwZSA9PSBv LnZhbHVlICkgeworICAgICAgICAgICAgICAgIC8vIGlmIHByZWNlc3Npb24g aXMgYWxsb3dlZCBmb3Igc2VsZWN0ZWQgdHlwZQorICAgICAgICAgICAgICAg IGlmKG8ucHJlY2lzaW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgIC8vIHNldCB0aGUgdmFsdWVzIGluIG1vZGVsCisgICAgICAg ICAgICAgICAgICBtLnNldCgnaXNfcHJlY2lzaW9uJywgdHJ1ZSwge3NpbGVu dDogdHJ1ZX0pOworICAgICAgICAgICAgICAgICAgbS5zZXQoJ21pbl92YWwn LCBvLm1pbl92YWwsIHtzaWxlbnQ6IHRydWV9KTsKKyAgICAgICAgICAgICAg ICAgIG0uc2V0KCdtYXhfdmFsJywgby5tYXhfdmFsLCB7c2lsZW50OiB0cnVl fSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgIH0pOworICAgICAgICAgIHJldHVybiBtLmdldCgnaXNfcHJlY2lzaW9u Jyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg IH0sIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8xMCcKKyAg ICAgIH0seworICAgICAgICBpZDogJ3R5cGRlZmF1bHQnLCBsYWJlbDone3sg XygnRGVmYXVsdCcpIH19JywgdHlwZTogJ3RleHQnLAorICAgICAgICBjZWxs OiAnc3RyaW5nJywgbWluX3ZlcnNpb246IDkwMzAwLAorICAgICAgICBwbGFj ZWhvbGRlcjogIkVudGVyIGFuIGV4cHJlc3Npb24gb3IgYSB2YWx1ZS4iLAor ICAgICAgICBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMTAn LAorICAgICAgICBlZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAg IGlmKCEoXy5pc1VuZGVmaW5lZChtLmdldCgnaW5oZXJpdGVkaWQnKSkKKyAg ICAgICAgICAgIHx8IF8uaXNOdWxsKG0uZ2V0KCdpbmhlcml0ZWRpZCcpKQor ICAgICAgICAgICAgfHwgXy5pc1VuZGVmaW5lZChtLmdldCgnaW5oZXJpdGVk ZnJvbScpKQorICAgICAgICAgICAgfHwgXy5pc051bGwobS5nZXQoJ2luaGVy aXRlZGZyb20nKSkpKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICAgIGlm ICh0aGlzLmdldCgnbm9kZV9pbmZvJykuc2VydmVyLnZlcnNpb24gPCA5MDMw MCl7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQor ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICB9LHsK KyAgICAgICAgaWQ6ICdhdHRub3RudWxsJywgbGFiZWw6J3t7IF8oJ05vdCBO dWxsJykgfX0nLAorICAgICAgICBjZWxsOiAnYm9vbGVhbicsdHlwZTogJ3N3 aXRjaCcsIGVkaXRhYmxlOiAnaXNfZWRpdGFibGVfY29sdW1uJywKKyAgICAg ICAgY2VsbEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50XzEwJworICAg ICAgfSx7CisgICAgICAgIGlkOiAnY29sbG5hbWUnLCBsYWJlbDone3sgXygn Q29sbGF0aW9uJykgfX0nLCBjZWxsOiAnbm9kZS1hamF4LW9wdGlvbnMnLAor ICAgICAgICBjb250cm9sOiAnbm9kZS1hamF4LW9wdGlvbnMnLCB0eXBlOiAn dGV4dCcsIHVybDogJ2dldF9jb2xsYXRpb25zJywKKyAgICAgICAgbWluX3Zl cnNpb246IDkwMzAwLCBlZGl0YWJsZTogJ2lzX2VkaXRhYmxlX2NvbHVtbics CisgICAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8y MCcKKyAgICAgIH0seworICAgICAgICBpZDogJ2F0dG51bScsIGNlbGw6ICdz dHJpbmcnLHR5cGU6ICd0ZXh0JywgdmlzaWJsZTogZmFsc2UKKyAgICAgIH0s eworICAgICAgICBpZDogJ2luaGVyaXRlZGZyb20nLCBsYWJlbDone3sgXygn SW5oZXJpdGVkIEZyb20nKSB9fScsIGNlbGw6ICdzdHJpbmcnLAorICAgICAg ICB0eXBlOiAndGV4dCcsIHZpc2libGU6IGZhbHNlLCBtb2RlOiBbJ3Byb3Bl cnRpZXMnLCAnZWRpdCddLAorICAgICAgICBjZWxsSGVhZGVyQ2xhc3Nlczog J3dpZHRoX3BlcmNlbnRfMTAnCisgICAgfV0sCisgICAgdmFsaWRhdGU6IGZ1 bmN0aW9uKCkgeworICAgICAgdmFyIGVyciA9IHt9LAorICAgICAgZXJybXNn OworCisgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnYXR0bmFt ZScpKSB8fCBTdHJpbmcodGhpcy5nZXQoJ2F0dG5hbWUnKSkucmVwbGFjZSgv XlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAgICAgICBlcnJbJ25hbWUn XSA9ICd7eyBfKCdDb2x1bW4gTmFtZSBjYW4gbm90IGJlIGVtcHR5IScpIH19 JzsKKyAgICAgICAgZXJybXNnID0gZXJybXNnIHx8IGVyclsnYXR0bmFtZSdd OworICAgICAgfQorCisgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLmdl dCgnZGF0YXR5cGUnKSkgfHwgU3RyaW5nKHRoaXMuZ2V0KCdkYXRhdHlwZScp KQorICAgICAgLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsK KyAgICAgICAgZXJyWydiYXNlbnNwJ10gPSAne3sgXygnQ29sdW1uIERhdGF0 eXBlIGNhbiBub3QgYmUgZW1wdHkhJykgfX0nOworICAgICAgICBlcnJtc2cg PSBlcnJtc2cgfHwgZXJyWydkYXRhdHlwZSddOworICAgICAgfQorCisgICAg ICB0aGlzLmVycm9yTW9kZWwuY2xlYXIoKS5zZXQoZXJyKTsKKworICAgICAg cmV0dXJuIGVycm1zZzsKKyAgICB9LAorICAgIGlzX2VkaXRhYmxlX2NvbHVt bjogZnVuY3Rpb24obSkgeworICAgICAgcmV0dXJuIChfLmlzVW5kZWZpbmVk KG0uZ2V0KCdpbmhlcml0ZWRpZCcpKSB8fCBfLmlzTnVsbChtLmdldCgnaW5o ZXJpdGVkaWQnKSkKKyAgICAgICB8fCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCdp bmhlcml0ZWRmcm9tJykpIHx8IF8uaXNOdWxsKG0uZ2V0KCdpbmhlcml0ZWRm cm9tJykpKSA/IHRydWUgOiBmYWxzZQorICAgIH0sCisgICAgdG9KU09OOiBC YWNrYm9uZS5Nb2RlbC5wcm90b3R5cGUudG9KU09OCisgIH0pOworCisgIHZh ciBmb3JtYXROb2RlID0gZnVuY3Rpb24ob3B0KSB7CisgICAgaWYgKCFvcHQu aWQpIHsKKyAgICAgIHJldHVybiBvcHQudGV4dDsKKyAgICB9CisKKyAgICB2 YXIgb3B0aW1hZ2UgPSAkKG9wdC5lbGVtZW50KS5kYXRhKCdpbWFnZScpOwor CisgICAgaWYoIW9wdGltYWdlKXsKKyAgICAgIHJldHVybiBvcHQudGV4dDsK KyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuICQoCisgICAgICAgICAgJzxz cGFuPjxzcGFuIGNsYXNzPSJ3Y1RhYkljb24gJyArIG9wdGltYWdlICsgJyIv PicgKyBvcHQudGV4dCArICc8L3NwYW4+JworICAgICAgICAgICk7CisgICAg fQorICB9OworCisKKyAgLyogTm9kZUFqYXhPcHRpb25zTXVsdGlwbGVDb250 cm9sIGlzIGZvciBtdWx0aXBsZSBzZWxlY3Rpb24gb2YgQ29tYm9ib3guCisg ICogIFRoaXMgY29udHJvbCBpcyB1c2VkIHRvIHNlbGVjdCBNdWx0aXBsZSBQ YXJlbnQgVGFibGVzIHRvIGJlIGluaGVyaXRlZC4KKyAgKiAgSXQgYWxzbyBw b3B1bGF0ZXMvdmFjYXRlcyBDb2x1bW5zIG9uIHNlbGVjdGlvbi9kZXNlbGVj dGlvbiBvZiB0aGUgb3B0aW9uIChpLmUuIHRhYmxlIG5hbWUpLgorICAqICBU byBwb3B1bGF0ZXMgdGhlIGNvbHVtbiwgaXQgY2FsbHMgdGhlIHNlcnZlciBh bmQgZmV0Y2ggdGhlIGNvbHVtbnMgZGF0YQorICAqICBmb3IgdGhlIHNlbGVj dGVkIHRhYmxlLgorICAqLworCisgIHZhciBOb2RlQWpheE9wdGlvbnNNdWx0 aXBsZUNvbnRyb2wgPSBCYWNrZm9ybS5Ob2RlQWpheE9wdGlvbnNNdWx0aXBs ZUNvbnRyb2wgPSBCYWNrZm9ybS5Ob2RlQWpheE9wdGlvbnNDb250cm9sLmV4 dGVuZCh7CisgICAgdGVtcGxhdGU6IF8udGVtcGxhdGUoWworICAgICAgJzxs YWJlbCBjbGFzcz0iPCU9QmFja2Zvcm0uY29udHJvbExhYmVsQ2xhc3NOYW1l JT4iPjwlPWxhYmVsJT48L2xhYmVsPicsCisgICAgICAnPGRpdiBjbGFzcz0i PCU9QmFja2Zvcm0uY29udHJvbHNDbGFzc05hbWUlPiA8JT1leHRyYUNsYXNz ZXMuam9pbihcJyBcJyklPiI+JywKKyAgICAgICcgIDxzZWxlY3QgY2xhc3M9 InBnYWRtaW4tbm9kZS1zZWxlY3QgZm9ybS1jb250cm9sIiBuYW1lPSI8JT1u YW1lJT4iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgdmFsdWU9PCUtdmFsdWUlPiA8 JT1kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIiU+IDwlPXJlcXVpcmVkID8g InJlcXVpcmVkIiA6ICIiJT4gPicsCisgICAgICAnICA8L3NlbGVjdD4nLAor ICAgICAgJzwvZGl2PiddLmpvaW4oIlxuIikpLAorICAgIGRlZmF1bHRzOiBf LmV4dGVuZCgKKyAgICAgIHt9LCBCYWNrZm9ybS5Ob2RlQWpheE9wdGlvbnND b250cm9sLnByb3RvdHlwZS5kZWZhdWx0cywKKyAgICAgIHsKKyAgICAgICAg c2VsZWN0MjogeworICAgICAgICAgIGFsbG93Q2xlYXI6IHRydWUsCisgICAg ICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgZnJvbSB0aGUgbGlzdCcsCisg ICAgICAgICAgd2lkdGg6ICdzdHlsZScsCisgICAgICAgICAgdGVtcGxhdGVS ZXN1bHQ6IGZvcm1hdE5vZGUsCisgICAgICAgICAgdGVtcGxhdGVTZWxlY3Rp b246IGZvcm1hdE5vZGUKKyAgICAgICAgfQorICAgICAgfSksCisgICAgcmVu ZGVyOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBmaWVsZCA9IF8uZGVmYXVs dHModGhpcy5maWVsZC50b0pTT04oKSwgdGhpcy5kZWZhdWx0cyksCisgICAg ICAgIGF0dHJpYnV0ZXMgPSB0aGlzLm1vZGVsLnRvSlNPTigpLAorICAgICAg ICBhdHRyQXJyID0gZmllbGQubmFtZS5zcGxpdCgnLicpLAorICAgICAgICBu YW1lID0gYXR0ckFyci5zaGlmdCgpLAorICAgICAgICBwYXRoID0gYXR0ckFy ci5qb2luKCcuJyksCisgICAgICAgIHJhd1ZhbHVlID0gdGhpcy5rZXlQYXRo QWNjZXNzb3IoYXR0cmlidXRlc1tuYW1lXSwgcGF0aCksCisgICAgICAgIGRh dGEgPSBfLmV4dGVuZChmaWVsZCwgeworICAgICAgICAgIHJhd1ZhbHVlOiBy YXdWYWx1ZSwKKyAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtYXR0ZXIuZnJv bVJhdyhyYXdWYWx1ZSwgdGhpcy5tb2RlbCksCisgICAgICAgICAgYXR0cmli dXRlczogYXR0cmlidXRlcywKKyAgICAgICAgICBmb3JtYXR0ZXI6IHRoaXMu Zm9ybWF0dGVyCisgICAgICAgIH0pLAorICAgICAgICBldmFsRiA9IGZ1bmN0 aW9uKGYsIGQsIG0pIHsKKyAgICAgICAgICByZXR1cm4gKF8uaXNGdW5jdGlv bihmKSA/ICEhZi5hcHBseShkLCBbbV0pIDogISFmKTsKKyAgICAgICAgfTsK KworICAgICAgLy8gRXZhbHVhdGUgdGhlIGRpc2FibGVkLCB2aXNpYmxlLCBh bmQgcmVxdWlyZWQgb3B0aW9uCisgICAgICBfLmV4dGVuZChkYXRhLCB7Cisg ICAgICAgIGRpc2FibGVkOiBldmFsRihkYXRhLmRpc2FibGVkLCBkYXRhLCB0 aGlzLm1vZGVsKSwKKyAgICAgICAgdmlzaWJsZTogIGV2YWxGKGRhdGEudmlz aWJsZSwgZGF0YSwgdGhpcy5tb2RlbCksCisgICAgICAgIHJlcXVpcmVkOiBl dmFsRihkYXRhLnJlcXVpcmVkLCBkYXRhLCB0aGlzLm1vZGVsKQorICAgICAg fSk7CisKKyAgICAgIGlmIChmaWVsZC5ub2RlX2luZm8uc2VydmVyLnZlcnNp b24gPCBmaWVsZC5taW5fdmVyc2lvbikgeworICAgICAgICBmaWVsZC52ZXJz aW9uX2NvbXBhdGlibGUgPSBmYWxzZQorICAgICAgICByZXR1cm4gdGhpczsK KyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvLyBFdmFsdWF0aW9u IHRoZSBvcHRpb25zCisgICAgICAgIGlmIChfLmlzRnVuY3Rpb24oZGF0YS5v cHRpb25zKSkgeworICAgICAgICB0cnkgeworICAgICAgICAgIGRhdGEub3B0 aW9ucyA9IGRhdGEub3B0aW9ucy5hcHBseSh0aGlzKQorICAgICAgICB9IGNh dGNoKGUpIHsKKyAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgICAg ZGF0YS5vcHRpb25zID0gW10KKyAgICAgICAgICB0aGlzLm1vZGVsLnRyaWdn ZXIoJ3BnYWRtaW4tdmlldzp0cmFuc2Zvcm06ZXJyb3InLCBzZWxmLm1vZGVs LCBzZWxmLmZpZWxkLCBlKTsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAg ICAgICAgLy8gQ2xlYW4gdXAgZmlyc3QKKyAgICAgICAgdGhpcy4kZWwucmVt b3ZlQ2xhc3MoQmFja2Zvcm0uaGlkZGVuQ2xhc3NuYW1lKTsKKyAgICAgICAg dGhpcy4kZWwuaHRtbCh0aGlzLnRlbXBsYXRlKGRhdGEpKS5hZGRDbGFzcyhm aWVsZC5uYW1lKTsKKworICAgICAgICBpZiAoIWRhdGEudmlzaWJsZSkgewor ICAgICAgICB0aGlzLiRlbC5hZGRDbGFzcyhCYWNrZm9ybS5oaWRkZW5DbGFz c25hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgb3B0cyA9 IF8uZXh0ZW5kKAorICAgICAgICAgIHt9LCB0aGlzLmRlZmF1bHRzLnNlbGVj dDIsIGRhdGEuc2VsZWN0MiwKKyAgICAgICAgICB7CisgICAgICAgICAgICAn ZGF0YSc6IGRhdGEub3B0aW9ucworICAgICAgICAgIH0pOworICAgICAgICB0 aGlzLiRlbC5maW5kKCJzZWxlY3QiKS5zZWxlY3QyKG9wdHMpLnZhbChkYXRh LnJhd1ZhbHVlKS50cmlnZ2VyKCJjaGFuZ2UiKTsKKyAgICAgICAgdGhpcy51 cGRhdGVJbnZhbGlkKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJl dHVybiB0aGlzOworICAgIH0sCisgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKGUp IHsKKyAgICAgIHZhciBtb2RlbCA9IHRoaXMubW9kZWwsCisgICAgICAgICAg JGVsID0gJChlLnRhcmdldCksCisgICAgICAgICAgYXR0ckFyciA9IHRoaXMu ZmllbGQuZ2V0KCJuYW1lIikuc3BsaXQoJy4nKSwKKyAgICAgICAgICBuYW1l ID0gYXR0ckFyci5zaGlmdCgpLAorICAgICAgICAgIHBhdGggPSBhdHRyQXJy LmpvaW4oJy4nKSwKKyAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVG cm9tRE9NKCksCisgICAgICAgICAgY2hhbmdlcyA9IHt9LAorICAgICAgICAg IGNvbHVtbnMgPSBtb2RlbC5nZXQoJ2NvbHVtbnMnKSwKKyAgICAgICAgICBp bmhlcml0cyA9IG1vZGVsLmdldChuYW1lKTsKKworICAgICAgaWYgKHRoaXMu bW9kZWwuZXJyb3JNb2RlbCBpbnN0YW5jZW9mIEJhY2tib25lLk1vZGVsKSB7 CisgICAgICAgIGlmIChfLmlzRW1wdHkocGF0aCkpIHsKKyAgICAgICAgICB0 aGlzLm1vZGVsLmVycm9yTW9kZWwudW5zZXQobmFtZSk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgdmFyIG5lc3RlZEVycm9yID0gdGhpcy5tb2Rl bC5lcnJvck1vZGVsLmdldChuYW1lKTsKKyAgICAgICAgICBpZiAobmVzdGVk RXJyb3IpIHsKKyAgICAgICAgICAgIHRoaXMua2V5UGF0aFNldHRlcihuZXN0 ZWRFcnJvciwgcGF0aCwgbnVsbCk7CisgICAgICAgICAgICB0aGlzLm1vZGVs LmVycm9yTW9kZWwuc2V0KG5hbWUsIG5lc3RlZEVycm9yKTsKKyAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdmFyIHNlbGYgPSB0 aGlzOworCisgICAgICBpZiAodHlwZW9mKGluaGVyaXRzKSAgPT0gInN0cmlu ZyIpeyBpbmhlcml0cyA9IEpTT04ucGFyc2UoaW5oZXJpdHMpOyB9CisKKyAg ICAgIC8vIFJlbW92ZSBDb2x1bW5zIGlmIGluaGVyaXQgb3B0aW9uIGlzIGRl c2VsZWN0ZWQgZnJvbSB0aGUgY29tYm9ib3gKKyAgICAgIGlmKF8uc2l6ZShK U09OLnBhcnNlKHZhbHVlKSkgPCBfLnNpemUoaW5oZXJpdHMpKSB7CisgICAg ICAgIHZhciBkaWYgPSAgXy5kaWZmZXJlbmNlKGluaGVyaXRzLCBKU09OLnBh cnNlKHZhbHVlKSk7CisgICAgICAgIHZhciBybXZfY29sdW1ucyA9IGNvbHVt bnMud2hlcmUoe2luaGVyaXRlZGlkOiBwYXJzZUludChkaWZbMF0pfSk7Cisg ICAgICAgIGNvbHVtbnMucmVtb3ZlKHJtdl9jb2x1bW5zKTsKKyAgICAgIH0K KyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgXy5lYWNoKEpTT04ucGFy c2UodmFsdWUpLCBmdW5jdGlvbihpKSB7CisgICAgICAgICAgLy8gRmV0Y2gg Q29sdW1ucyBmcm9tIHNlcnZlcgorICAgICAgICAgIHZhciBmbmRfY29sdW1u cyA9IGNvbHVtbnMud2hlcmUoe2luaGVyaXRlZGlkOiBwYXJzZUludChpKX0p OworICAgICAgICAgIGlmIChmbmRfY29sdW1ucyAmJiBmbmRfY29sdW1ucy5s ZW5ndGggPD0gMCkgeworICAgICAgICAgICAgaW5odGVkX2NvbHVtbnMgPSBz ZWxmLmZldGNoQ29sdW1ucyhpKTsKKyAgICAgICAgICAgIGNvbHVtbnMuYWRk KGluaHRlZF9jb2x1bW5zKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOwor ICAgICAgfQorCisgICAgICBjaGFuZ2VzW25hbWVdID0gXy5pc0VtcHR5KHBh dGgpID8gdmFsdWUgOiBfLmNsb25lKG1vZGVsLmdldChuYW1lKSkgfHwge307 CisgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcodGhpcy5tb2RlbCwgImNoYW5n ZToiICsgbmFtZSwgdGhpcy5yZW5kZXIpOworICAgICAgbW9kZWwuc2V0KGNo YW5nZXMpOworICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAiY2hh bmdlOiIgKyBuYW1lLCB0aGlzLnJlbmRlcik7CisgICAgfSwKKyAgICBmZXRj aENvbHVtbnM6IGZ1bmN0aW9uKHRhYmxlX2lkKXsKKyAgICAgIHZhciBzZWxm ID0gdGhpcywKKyAgICAgICAgICB1cmwgPSAnZ2V0X2NvbHVtbnMnLAorICAg ICAgICAgIG0gPSBzZWxmLm1vZGVsLnRvcCB8fCBzZWxmLm1vZGVsOworCisg ICAgICBpZiAodXJsKSB7CisgICAgICAgIHZhciBub2RlID0gdGhpcy5maWVs ZC5nZXQoJ3NjaGVtYV9ub2RlJyksCisgICAgICAgICAgICBub2RlX2luZm8g PSB0aGlzLmZpZWxkLmdldCgnbm9kZV9pbmZvJyksCisgICAgICAgICAgICBm dWxsX3VybCA9IG5vZGUuZ2VuZXJhdGVfdXJsLmFwcGx5KAorICAgICAgICAg ICAgICBub2RlLCBbCisgICAgICAgICAgICAgICAgbnVsbCwgdXJsLCB0aGlz LmZpZWxkLmdldCgnbm9kZV9kYXRhJyksCisgICAgICAgICAgICAgICAgdGhp cy5maWVsZC5nZXQoJ3VybF93aXRoX2lkJykgfHwgZmFsc2UsIG5vZGVfaW5m bworICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgIGNhY2hlX2xldmVs ID0gdGhpcy5maWVsZC5nZXQoJ2NhY2hlX2xldmVsJykgfHwgbm9kZS50eXBl LAorICAgICAgICAgICAgY2FjaGVfbm9kZSA9IHRoaXMuZmllbGQuZ2V0KCdj YWNoZV9ub2RlJyk7CisKKyAgICAgICAgY2FjaGVfbm9kZSA9IChjYWNoZV9u b2RlICYmIHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snY2FjaGVfbm9kZSddKSB8 fCBub2RlOworCisgICAgICAgIG0udHJpZ2dlcigncGdhZG1pbjp2aWV3OmZl dGNoaW5nJywgbSwgc2VsZi5maWVsZCk7CisgICAgICAgIGRhdGEgPSB7YXR0 cmVsaWQ6IHRhYmxlX2lkfQorCisgICAgICAgIC8vIEZldGNoaW5nIENvbHVt bnMgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHRhYmxlLgorICAgICAgICAkLmFq YXgoeworICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICB1cmw6 IGZ1bGxfdXJsLAorICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAg c3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAvKgorICAg ICAgICAgICAgICogV2Ugd2lsbCBjYWNoZSB0aGlzIGRhdGEgZm9yIHNob3J0 IHBlcmlvZCBvZiB0aW1lIGZvciBhdm9pZGluZworICAgICAgICAgICAgICog c2FtZSBjYWxscy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZGF0 YSA9IGNhY2hlX25vZGUuY2FjaGUodXJsLCBub2RlX2luZm8sIGNhY2hlX2xl dmVsLCByZXMuZGF0YSk7CisKKyAgICAgICAgICB9LAorICAgICAgICAgIGVy cm9yOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIG0udHJpZ2dlcigncGdh ZG1pbjp2aWV3OmZldGNoOmVycm9yJywgbSwgc2VsZi5maWVsZCk7CisgICAg ICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbS50cmlnZ2VyKCdwZ2Fk bWluOnZpZXc6ZmV0Y2hlZCcsIG0sIHNlbGYuZmllbGQpOworCisgICAgICAg IC8vIFRvIGZldGNoIG9ubHkgb3B0aW9ucyBmcm9tIGNhY2hlLCB3ZSBkbyBu b3QgbmVlZCB0aW1lIGZyb20gJ2F0JworICAgICAgICAvLyBhdHRyaWJ1dGUg YnV0IG9ubHkgb3B0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQg aXMgZmVhc2libGUgdGhhdCB0aGUgZGF0YSBtYXkgbm90IGhhdmUgYmVlbiBm ZXRjaGVkLgorICAgICAgICBkYXRhID0gKGRhdGEgJiYgZGF0YS5kYXRhKSB8 fCBbXTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICB9CisgICAgfSwK KyAgfSk7CisKKworICAvLyBDb25zdHJhaW50cyBNb2RlbAorICB2YXIgQ29u c3RyYWludE1vZGVsID0gcGdBZG1pbi5Ccm93c2VyLk5vZGUuTW9kZWwuZXh0 ZW5kKHsKKyAgICBpZEF0dHJpYnV0ZTogJ2Nvbm9pZCcsCisgICAgaW5pdGlh bGl6ZTogZnVuY3Rpb24oYXR0cnMsIGFyZ3MpIHsKKyAgICAgIHZhciBpc05l dyA9IChfLnNpemUoYXR0cnMpID09PSAwKTsKKyAgICAgIGlmICghaXNOZXcp IHsKKyAgICAgICAgdGhpcy5jb252YWxpZGF0ZWRfZGVmYXVsdCA9IHRoaXMu Z2V0KCdjb252YWxpZGF0ZWQnKQorICAgICAgfQorICAgICAgcGdBZG1pbi5C cm93c2VyLk5vZGUuTW9kZWwucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHko dGhpcywgYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGRlZmF1bHRzOiB7Cisg ICAgICBjb25vaWQ6IHVuZGVmaW5lZCwKKyAgICAgIGNvbm5hbWU6IHVuZGVm aW5lZCwKKyAgICAgIGNvbnNyYzogdW5kZWZpbmVkLAorICAgICAgY29ubm9p bmhlcml0OiB1bmRlZmluZWQsCisgICAgICBjb252YWxpZGF0ZWQ6IHRydWUK KyAgICB9LAorICAgIGNvbnZhbGlkYXRlZF9kZWZhdWx0OiB0cnVlLAorICAg IHNjaGVtYTogW3sKKyAgICAgIGlkOiAnY29ub2lkJywgdHlwZTogJ3RleHQn LCBjZWxsOiAnc3RyaW5nJywgdmlzaWJsZTogZmFsc2UKKyAgICB9LHsKKyAg ICAgIGlkOiAnY29ubmFtZScsIGxhYmVsOid7eyBfKCdOYW1lJykgfX0nLCB0 eXBlOiAndGV4dCcsIGNlbGw6ICdzdHJpbmcnLAorICAgICAgZWRpdGFibGU6 ICdpc19lZGl0YWJsZScsIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVy Y2VudF8zMCcKKyAgICB9LHsKKyAgICAgIGlkOiAnY29uc3JjJywgbGFiZWw6 J3t7IF8oJ0NoZWNrJykgfX0nLCB0eXBlOiAnbXVsdGlsaW5lJywKKyAgICAg IGVkaXRhYmxlOiAnaXNfZWRpdGFibGUnLCBjZWxsOiBCYWNrZ3JpZC5FeHRl bnNpb24uVGV4dGFyZWFDZWxsLAorICAgICAgY2VsbEhlYWRlckNsYXNzZXM6 ICd3aWR0aF9wZXJjZW50XzMwJworICAgIH0seworICAgICAgaWQ6ICdjb25u b2luaGVyaXQnLCBsYWJlbDone3sgXygnTm8gSW5oZXJpdCcpIH19JywgdHlw ZTogJ3N3aXRjaCcsCisgICAgICBjZWxsOiAnYm9vbGVhbicsIGVkaXRhYmxl OiAnaXNfZWRpdGFibGUnLAorICAgICAgY2VsbEhlYWRlckNsYXNzZXM6ICd3 aWR0aF9wZXJjZW50XzIwJworICAgIH0seworICAgICAgaWQ6ICdjb252YWxp ZGF0ZWQnLCBsYWJlbDone3sgXygnVmFsaWRhdGU/JykgfX0nLCB0eXBlOiAn c3dpdGNoJywKKyAgICAgIGNlbGw6ICdib29sZWFuJywgY2VsbEhlYWRlckNs YXNzZXM6ICd3aWR0aF9wZXJjZW50XzIwJywKKyAgICAgIGVkaXRhYmxlOiBm dW5jdGlvbihtKSB7CisgICAgICAgIHZhciBzZXJ2ZXIgPSB0aGlzLmdldCgn bm9kZV9pbmZvJykuc2VydmVyOworICAgICAgICBpZiAoXy5pc1VuZGVmaW5l ZChtLmlzTmV3KSkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBpZiAoIW0u aXNOZXcoKSkgeworICAgICAgICAgIGlmKG0uZ2V0KCdjb252YWxpZGF0ZWQn KSAmJiBtLmNvbnZhbGlkYXRlZF9kZWZhdWx0KSB7CisgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0 cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg fQorICAgICB9CisgICAgXSwKKyAgICB2YWxpZGF0ZTogZnVuY3Rpb24oKSB7 CisgICAgICB2YXIgZXJyID0ge30sCisgICAgICBlcnJtc2c7CisKKyAgICAg IGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCdjb25uYW1lJykpIHx8IFN0 cmluZyh0aGlzLmdldCgnY29ubmFtZScpKS5yZXBsYWNlKC9eXHMrfFxzKyQv ZywgJycpID09ICcnKSB7CisgICAgICAgIGVyclsnY29ubmFtZSddID0gJ3t7 IF8oJ0NvbnN0cmFpbnQgTmFtZSBjYW4gbm90IGJlIGVtcHR5IScpIH19JzsK KyAgICAgICAgZXJybXNnID0gZXJybXNnIHx8IGVyclsnY29ubmFtZSddOwor ICAgICAgfQorCisgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgn Y29uc3JjJykpIHx8IFN0cmluZyh0aGlzLmdldCgnY29uc3JjJykpCisgICAg ICAucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAgICAg ICBlcnJbJ2NvbnNyYyddID0gJ3t7IF8oJ0NvbnN0cmFpbnQgQ2hlY2sgY2Fu IG5vdCBiZSBlbXB0eSEnKSB9fSc7CisgICAgICAgIGVycm1zZyA9IGVycm1z ZyB8fCBlcnJbJ2NvbnNyYyddOworICAgICAgfQorCisgICAgICB0aGlzLmVy cm9yTW9kZWwuY2xlYXIoKS5zZXQoZXJyKTsKKworICAgICAgcmV0dXJuIGVy cm1zZzsKKyAgICB9LAorICAgIGlzX2VkaXRhYmxlOiBmdW5jdGlvbihtKSB7 CisgICAgICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG0uaXNOZXcpID8gdHJ1 ZSA6IG0uaXNOZXcoKTsKKyAgICB9LAorICAgIHRvSlNPTjogQmFja2JvbmUu TW9kZWwucHJvdG90eXBlLnRvSlNPTgorICB9KTsKKworCisgIC8vIE9wdGlv bnMgTW9kZWwKKyAgdmFyIE9wdGlvbnNNb2RlbCA9IHBnQWRtaW4uQnJvd3Nl ci5Ob2RlLk1vZGVsLmV4dGVuZCh7CisgICAgZGVmYXVsdHM6IHsKKyAgICAg IG9wdGlvbjogdW5kZWZpbmVkLAorICAgICAgdmFsdWU6IHVuZGVmaW5lZAor ICAgIH0sCisgICAgc2NoZW1hOiBbeworICAgICAgaWQ6ICdvcHRpb24nLCBs YWJlbDone3sgXygnT3B0aW9uJykgfX0nLCBjZWxsOiAnc3RyaW5nJywgdHlw ZTogJ3RleHQnLAorICAgICAgZWRpdGFibGU6IHRydWUsIGNlbGxIZWFkZXJD bGFzc2VzOid3aWR0aF9wZXJjZW50XzUwJworICAgIH0seworICAgICAgaWQ6 ICd2YWx1ZScsIGxhYmVsOid7eyBfKCdWYWx1ZScpIH19JywgY2VsbDogJ3N0 cmluZycsdHlwZTogJ3RleHQnLAorICAgICAgZWRpdGFibGU6IHRydWUsIGNl bGxIZWFkZXJDbGFzc2VzOid3aWR0aF9wZXJjZW50XzUwJworICAgIH0KKyAg ICBdLAorICAgIHZhbGlkYXRlOiBmdW5jdGlvbigpIHsKKyAgICAgIC8vIFRP RE86IEFkZCB2YWxpZGF0aW9uIGhlcmUKKyAgICB9LAorICAgIHRvSlNPTjog QmFja2JvbmUuTW9kZWwucHJvdG90eXBlLnRvSlNPTgorICB9KTsKKworCisg IGlmICghcGdCcm93c2VyLk5vZGVzWydmb3JlaWduLXRhYmxlJ10pIHsKKyAg ICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ2ZvcmVpZ24tdGFibGUnXSA9IHBn QnJvd3Nlci5Ob2RlLmV4dGVuZCh7CisgICAgICB0eXBlOiAnZm9yZWlnbi10 YWJsZScsCisgICAgICBsYWJlbDogJ3t7IF8oJ0ZvcmVpZ24gVGFibGUnKSB9 fScsCisgICAgICBjb2xsZWN0aW9uX3R5cGU6ICdjb2xsLWZvcmVpZ24tdGFi bGUnLAorICAgICAgaGFzU1FMOiB0cnVlLAorICAgICAgaGFzRGVwZW5kczog dHJ1ZSwKKyAgICAgIHBhcmVudF90eXBlOiBbJ3NjaGVtYSddLAorICAgICAg SW5pdDogZnVuY3Rpb24oKSB7CisgICAgICAgIC8qIEF2b2lkIG11bGl0cGxl IHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLworICAgICAgICBpZiAodGhpcy5p bml0aWFsaXplZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0 aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgICAgICBwZ0Jyb3dzZXIu YWRkX21lbnVzKFt7CisgICAgICAgICAgbmFtZTogJ2NyZWF0ZV9mb3JlaWdu LXRhYmxlX29uX2NvbGwnLCBub2RlOiAnY29sbC1mb3JlaWduLXRhYmxlJywg bW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0Jywg J2NvbnRleHQnXSwgY2FsbGJhY2s6ICdzaG93X29ial9wcm9wZXJ0aWVzJywK KyAgICAgICAgICBjYXRlZ29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA0LCBs YWJlbDogJ3t7IF8oJ0ZvcmVpZ24gVGFibGUuLi4nKSB9fScsCisgICAgICAg ICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLWZvcmVpZ24tdGFibGUnLCBkYXRh OiB7YWN0aW9uOiAnY3JlYXRlJywgY2hlY2s6IHRydWV9LAorICAgICAgICAg IGVuYWJsZTogJ2NhbkNyZWF0ZScKKyAgICAgICAgfSx7CisgICAgICAgICAg bmFtZTogJ2NyZWF0ZV9mb3JlaWduLXRhYmxlJywgbm9kZTogJ2ZvcmVpZ24t dGFibGUnLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAgYXBwbGllczogWydv YmplY3QnLCAnY29udGV4dCddLCBjYWxsYmFjazogJ3Nob3dfb2JqX3Byb3Bl cnRpZXMnLAorICAgICAgICAgIGNhdGVnb3J5OiAnY3JlYXRlJywgcHJpb3Jp dHk6IDQsIGxhYmVsOiAne3sgXygnRm9yZWlnbiBUYWJsZS4uLicpIH19JywK KyAgICAgICAgICBpY29uOiAnd2NUYWJJY29uIGljb24tZm9yZWlnbi10YWJs ZScsIGRhdGE6IHthY3Rpb246ICdjcmVhdGUnLCBjaGVjazogdHJ1ZX0sCisg ICAgICAgICAgZW5hYmxlOiAnY2FuQ3JlYXRlJworICAgICAgICB9LHsKKyAg ICAgICAgICBuYW1lOiAnY3JlYXRlX2ZvcmVpZ24tdGFibGUnLCBub2RlOiAn c2NoZW1hJywgbW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsn b2JqZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdzaG93X29ial9wcm9w ZXJ0aWVzJywKKyAgICAgICAgICBjYXRlZ29yeTogJ2NyZWF0ZScsIHByaW9y aXR5OiA0LCBsYWJlbDogJ3t7IF8oJ0ZvcmVpZ24gVGFibGUuLi4nKSB9fScs CisgICAgICAgICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLWZvcmVpZ24tdGFi bGUnLCBkYXRhOiB7YWN0aW9uOiAnY3JlYXRlJywgY2hlY2s6IGZhbHNlfSwK KyAgICAgICAgICBlbmFibGU6ICdjYW5DcmVhdGUnCisgICAgICAgIH0KKyAg ICAgICAgXSk7CisKKyAgICAgIH0sCisgICAgICBjYW5Ecm9wOiBwZ0Jyb3dz ZXIuTm9kZXNbJ3NjaGVtYSddLmNhbkNoaWxkRHJvcCwKKyAgICAgIGNhbkRy b3BDYXNjYWRlOiBwZ0Jyb3dzZXIuTm9kZXNbJ3NjaGVtYSddLmNhbkNoaWxk RHJvcCwKKyAgICAgIG1vZGVsOiBwZ0FkbWluLkJyb3dzZXIuTm9kZS5Nb2Rl bC5leHRlbmQoeworICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhdHRy cywgYXJncykgeworICAgICAgICAgIHZhciBpc05ldyA9IChfLnNpemUoYXR0 cnMpID09PSAwKTsKKyAgICAgICAgICBpZiAoaXNOZXcpIHsKKyAgICAgICAg ICAgIC8vIFNldCBTZWxlY3RlZCBTY2hlbWEKKyAgICAgICAgICAgIHNjaGVt YSA9IGFyZ3Mubm9kZV9pbmZvLnNjaGVtYS5sYWJlbAorICAgICAgICAgICAg dGhpcy5zZXQoeydiYXNlbnNwJzogc2NoZW1hfSwge3NpbGVudDogdHJ1ZX0p OworICAgICAgICAgIH0KKyAgICAgICAgICBwZ0FkbWluLkJyb3dzZXIuTm9k ZS5Nb2RlbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1 bWVudHMpOworICAgICAgICB9LAorICAgICAgICBkZWZhdWx0czogeworICAg ICAgICAgIG5hbWU6IHVuZGVmaW5lZCwKKyAgICAgICAgICBvaWQ6IHVuZGVm aW5lZCwKKyAgICAgICAgICBvd25lcjogdW5kZWZpbmVkLAorICAgICAgICAg IGJhc2Vuc3A6IHVuZGVmaW5lZCwKKyAgICAgICAgICBkZXNjcmlwdGlvbjog dW5kZWZpbmVkLAorICAgICAgICAgIGZ0c3J2bmFtZTogdW5kZWZpbmVkLAor ICAgICAgICAgIHN0cmNvbHVtbjogdW5kZWZpbmVkLAorICAgICAgICAgIHN0 cmZ0b3B0aW9uczogdW5kZWZpbmVkLAorICAgICAgICAgIGluaGVyaXRzOiBb XSwKKyAgICAgICAgICBjb2x1bW5zOiBbXSwKKyAgICAgICAgICBjb25zdHJh aW50czogW10sCisgICAgICAgICAgZnRvcHRpb25zOiBbXSwKKyAgICAgICAg ICBzZWNsYWJlbHM6IFtdCisgICAgICAgIH0sCisgICAgICAgIHNjaGVtYTog W3sKKyAgICAgICAgICBpZDogJ25hbWUnLCBsYWJlbDogJ3t7IF8oJ05hbWUn KSB9fScsIGNlbGw6ICdzdHJpbmcnLAorICAgICAgICAgIHR5cGU6ICd0ZXh0 JywgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10KKyAg ICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdvaWQnLCBsYWJlbDone3sgXygn T2lkJykgfX0nLCBjZWxsOiAnc3RyaW5nJywKKyAgICAgICAgICB0eXBlOiAn dGV4dCcgLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXQorICAgICAgICB9LHsKKyAg ICAgICAgICBpZDogJ293bmVyJywgbGFiZWw6J3t7IF8oJ093bmVyJykgfX0n LCBjZWxsOiAnc3RyaW5nJywgY29udHJvbDogQmFja2Zvcm0uTm9kZUxpc3RC eU5hbWVDb250cm9sLAorICAgICAgICAgIG5vZGU6ICdyb2xlJywgIHR5cGU6 ICd0ZXh0JywgbW9kZTogWydlZGl0JywgJ3Byb3BlcnRpZXMnXQorICAgICAg ICB9LHsKKyAgICAgICAgICBpZDogJ2Jhc2Vuc3AnLCBsYWJlbDone3sgXygn U2NoZW1hJykgfX0nLCBjZWxsOiAnbm9kZS1saXN0LWJ5LW5hbWUnLAorICAg ICAgICAgICBjb250cm9sOiAnbm9kZS1saXN0LWJ5LW5hbWUnLCBjYWNoZV9s ZXZlbDogJ2RhdGFiYXNlJywgdHlwZTogJ3RleHQnLAorICAgICAgICAgICBu b2RlOiAnc2NoZW1hJywgbW9kZTpbJ2NyZWF0ZScsICdlZGl0J10KKyAgICAg ICAgfSx7CisgICAgICAgICAgaWQ6ICdkZXNjcmlwdGlvbicsIGxhYmVsOid7 eyBfKCdDb21tZW50JykgfX0nLCBjZWxsOiAnc3RyaW5nJywKKyAgICAgICAg ICB0eXBlOiAnbXVsdGlsaW5lJworICAgICAgICB9LHsKKyAgICAgICAgICBp ZDogJ2Z0c3J2bmFtZScsIGxhYmVsOid7eyBfKCdGb3JlaWduIFNlcnZlcicp IH19JywgY2VsbDogJ3N0cmluZycsIGNvbnRyb2w6ICdub2RlLWFqYXgtb3B0 aW9ucycsCisgICAgICAgICAgdHlwZTogJ3RleHQnLCBncm91cDogJ0RlZmlu aXRpb24nLCB1cmw6ICdnZXRfZm9yZWlnbl9zZXJ2ZXJzJywgZGlzYWJsZWQ6 IGZ1bmN0aW9uKG0pIHsgcmV0dXJuICFtLmlzTmV3KCk7IH0KKyAgICAgICAg fSx7CisgICAgICAgICAgaWQ6ICdpbmhlcml0cycsIGxhYmVsOid7eyBfKCdJ bmhlcml0cycpIH19JywgY2VsbDogJ3N0cmluZycsIGdyb3VwOiAnRGVmaW5p dGlvbicsCisgICAgICAgICAgdHlwZTogJ2xpc3QnLCBtaW5fdmVyc2lvbjog OTA1MDAsIGNvbnRyb2w6ICdub2RlLWFqYXgtb3B0aW9ucy1tdWx0aXBsZScs CisgICAgICAgICAgdXJsOiAnZ2V0X3RhYmxlcycsIHNlbGVjdDI6IHttdWx0 aXBsZTogdHJ1ZX0sCisgICAgICAgICAgJ2NhY2hlX2xldmVsJzogJ2RhdGFi YXNlJywKKyAgICAgICAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uKGQsIHNlbGYp eworICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQuZ2V0KCdtb2RlJykgPT0g J2VkaXQnKSB7CisgICAgICAgICAgICAgIG9pZCA9IHRoaXMubW9kZWwuZ2V0 KCdvaWQnKTsKKyAgICAgICAgICAgICAgcyA9IF8uZmluZFdoZXJlKGQsIHsn aWQnOiBvaWR9KTsKKyAgICAgICAgICAgICAgaWYgKHMpIHsKKyAgICAgICAg ICAgICAgICBkID0gXy5yZWplY3QoZCwgcyk7CisgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBkOworICAgICAg ICAgIH0KKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdzdHJjb2x1bW4n LCBsYWJlbDone3sgXygnQ29sdW1ucycpIH19JywgY2VsbDogJ3N0cmluZycs IGdyb3VwOiAnRGVmaW5pdGlvbicsCisgICAgICAgICAgdHlwZTogJ3RleHQn LCBtaW5fdmVyc2lvbjogOTA1MDAsIG1vZGU6IFsncHJvcGVydGllcyddCisg ICAgICAgIH0seworICAgICAgICAgIGlkOiAnY29sdW1ucycsIGxhYmVsOid7 eyBfKCdDb2x1bW5zJykgfX0nLCBjZWxsOiAnc3RyaW5nJywKKyAgICAgICAg ICB0eXBlOiAnY29sbGVjdGlvbicsIGdyb3VwOiAnQ29sdW1ucycsIHZpc2li bGU6IGZhbHNlLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCisgICAgICAg ICAgbW9kZWw6IENvbHVtbnNNb2RlbCwgY2FuQWRkOiB0cnVlLCBjYW5EZWxl dGU6IHRydWUsIGNhbkVkaXQ6IGZhbHNlLAorICAgICAgICAgIGNvbHVtbnM6 IFsnYXR0bmFtZScsICdkYXRhdHlwZScsICd0eXBsZW4nLCAncHJlY2lzaW9u JywgJ3R5cGRlZmF1bHQnLCAnYXR0bm90bnVsbCcsICdjb2xsbmFtZScsICdp bmhlcml0ZWRmcm9tJ10KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg ICAgIGlkOiAnY29uc3RyYWludHMnLCBsYWJlbDone3sgXygnQ29uc3RyYWlu dHMnKSB9fScsIGNlbGw6ICdzdHJpbmcnLAorICAgICAgICAgIHR5cGU6ICdj b2xsZWN0aW9uJywgZ3JvdXA6ICdDb25zdHJhaW50cycsIHZpc2libGU6IGZh bHNlLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCisgICAgICAgICAgbW9k ZWw6IENvbnN0cmFpbnRNb2RlbCwgY2FuQWRkOiB0cnVlLCBjYW5EZWxldGU6 IHRydWUsIGNvbHVtbnM6IFsnY29ubmFtZScsJ2NvbnNyYycsICdjb25ub2lu aGVyaXQnLCAnY29udmFsaWRhdGVkJ10sCisgICAgICAgICAgY2FuRWRpdDog ZnVuY3Rpb24obykgeworICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBC YWNrYm9uZS5Nb2RlbCkgeworICAgICAgICAgICAgICBpZiAobyBpbnN0YW5j ZW9mIENvbnN0cmFpbnRNb2RlbCkgeworICAgICAgICAgICAgICAgIHJldHVy biBvLmlzTmV3KCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0sIG1pbl92 ZXJzaW9uOiA5MDUwMAorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3N0 cmZ0b3B0aW9ucycsIGxhYmVsOid7eyBfKCdPcHRpb25zJykgfX0nLCBjZWxs OiAnc3RyaW5nJywKKyAgICAgICAgICB0eXBlOiAndGV4dCcsIGdyb3VwOiAn RGVmaW5pdGlvbicsIG1vZGU6IFsncHJvcGVydGllcyddCisgICAgICAgIH0s eworICAgICAgICAgIGlkOiAnZnRvcHRpb25zJywgbGFiZWw6J3t7IF8oJ09w dGlvbnMnKSB9fScsIGNlbGw6ICdzdHJpbmcnLAorICAgICAgICAgIHR5cGU6 ICdjb2xsZWN0aW9uJywgZ3JvdXA6ICdPcHRpb25zJywgbW9kZTogWydlZGl0 JywgJ2NyZWF0ZSddLAorICAgICAgICAgIG1vZGVsOiBPcHRpb25zTW9kZWws IGNhbkFkZDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLCBjYW5FZGl0OiBmYWxz ZSwKKyAgICAgICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9u JywgdW5pcXVlQ29sIDogWydvcHRpb24nXQorICAgICAgICB9LHsKKyAgICAg ICAgICBpZDogJ3NlY2xhYmVscycsIGxhYmVsOiAne3sgXygnU2VjdXJpdHkg TGFiZWxzJykgfX0nLAorICAgICAgICAgIG1vZGVsOiBTZWN1cml0eU1vZGVs LCB0eXBlOiAnY29sbGVjdGlvbicsCisgICAgICAgICAgZ3JvdXA6ICd7eyBf KCdTZWN1cml0eScpIH19JywgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAor ICAgICAgICAgIG1pbl92ZXJzaW9uOiA5MDEwMCwgY2FuQWRkOiB0cnVlLAor ICAgICAgICAgIGNhbkVkaXQ6IGZhbHNlLCBjYW5EZWxldGU6IHRydWUsCisg ICAgICAgICAgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlvbicsIHVu aXF1ZUNvbCA6IFsncHJvdmlkZXInXQorICAgICAgICB9CisgICAgICAgIF0s CisgICAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbigpCisgICAgICAgIHsKKyAg ICAgICAgICB2YXIgZXJyID0ge30sCisgICAgICAgICAgICAgIGVycm1zZywK KyAgICAgICAgICAgICAgc2VjbGFiZWxzID0gdGhpcy5nZXQoJ3NlY2xhYmVs cycpOworCisgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5nZXQo J25hbWUnKSkgfHwgU3RyaW5nKHRoaXMuZ2V0KCduYW1lJykpLnJlcGxhY2Uo L15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAgICAgICAgICAgIGVyclsn bmFtZSddID0gJ3t7IF8oJ05hbWUgY2FuIG5vdCBiZSBlbXB0eSEnKSB9fSc7 CisgICAgICAgICAgICBlcnJtc2cgPSBlcnJtc2cgfHwgZXJyWyduYW1lJ107 CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQo dGhpcy5nZXQoJ2Jhc2Vuc3AnKSkgfHwgU3RyaW5nKHRoaXMuZ2V0KCdiYXNl bnNwJykpCisgICAgICAgICAgLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykg PT0gJycpIHsKKyAgICAgICAgICAgIGVyclsnYmFzZW5zcCddID0gJ3t7IF8o J1NjaGVtYSBjYW4gbm90IGJlIGVtcHR5IScpIH19JzsKKyAgICAgICAgICAg IGVycm1zZyA9IGVycm1zZyB8fCBlcnJbJ2Jhc2Vuc3AnXTsKKyAgICAgICAg ICB9CisKKyAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgn ZnRzcnZuYW1lJykpIHx8IFN0cmluZyh0aGlzLmdldCgnZnRzcnZuYW1lJykp LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAgICAgICAg ICAgIGVyclsnZnRzcnZuYW1lJ10gPSAne3sgXygnRm9yZWlnbiBTZXJ2ZXIg Y2FuIG5vdCBiZSBlbXB0eSEnKSB9fSc7CisgICAgICAgICAgICBlcnJtc2cg PSBlcnJtc2cgfHwgZXJyWydmdHNydm5hbWUnXTsKKyAgICAgICAgICB9CisK KyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuY2xlYXIoKS5zZXQoZXJyKTsK KworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICB9 KSwKKyAgICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0s IGRhdGEpIHsKKyAgICAgICAgLy9JZiBjaGVjayBpcyBmYWxzZSB0aGVuICwg d2Ugd2lsbCBhbGxvdyBjcmVhdGUgbWVudQorICAgICAgICBpZiAoZGF0YSAm JiBkYXRhLmNoZWNrID09IGZhbHNlKQorICAgICAgICAgIHJldHVybiB0cnVl OworCisgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkgPSBpdGVt LCBkID0gaXRlbURhdGE7CisgICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0 cmVlIHRvIGNoZWNrIHBhcmVudCBub2RlCisgICAgICAgIHdoaWxlIChpKSB7 CisgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cgdXNl ciB0byBjcmVhdGUgZm9yZWlnbiB0YWJsZQorICAgICAgICAgIGlmIChfLmlu ZGV4T2YoWydzY2hlbWEnXSwgZC5fdHlwZSkgPiAtMSkKKyAgICAgICAgICAg IHJldHVybiB0cnVlOworCisgICAgICAgICAgaWYgKCdjb2xsLWZvcmVpZ24t dGFibGUnID09IGQuX3R5cGUpIHsKKyAgICAgICAgICAgIC8vQ2hlY2sgaWYg d2UgYXJlIG5vdCBjaGlsZCBvZiBjYXRhbG9nCisgICAgICAgICAgICBwcmV2 X2kgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsKKyAg ICAgICAgICAgIHByZXZfZCA9IHByZXZfaSA/IHQuaXRlbURhdGEocHJldl9p KSA6IG51bGw7CisgICAgICAgICAgICBpZiggcHJldl9kLl90eXBlID09ICdj YXRhbG9nJykgeworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgaSA9IHQu aGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOworICAgICAgICAg IGQgPSBpID8gdC5pdGVtRGF0YShpKSA6IG51bGw7CisgICAgICAgIH0KKyAg ICAgICAgLy8gYnkgZGVmYXVsdCB3ZSBkbyBub3Qgd2FudCB0byBhbGxvdyBj cmVhdGUgbWVudQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAg fSk7CisKKyAgfQorCisgIHJldHVybiBwZ0Jyb3dzZXIuTm9kZXNbJ2ZvcmVp Z24tdGFibGUnXTsKK30pOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv Zm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85 LjFfcGx1cy9jcmVhdGUuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90 YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjFfcGx1cy9j cmVhdGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjQ3YjhkMzMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9m b3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzku MV9wbHVzL2NyZWF0ZS5zcWwKQEAgLTAsMCArMSwyOSBAQAoreyUgaW1wb3J0 ICdtYWNyb3Mvc2NoZW1hcy9zZWN1cml0eS5tYWNyb3MnIGFzIFNFQ0xBQkxF ICV9Cit7JSBpZiBkYXRhICV9CitDUkVBVEUgRk9SRUlHTiBUQUJMRSB7eyBj b25ufHF0SWRlbnQoZGF0YS5iYXNlbnNwLCBkYXRhLm5hbWUpIH19ICh7JSBp ZiBkYXRhLmNvbHVtbnMgJX0KK3slIGZvciBjIGluIGRhdGEuY29sdW1ucyAl fQoreyUgaWYgbm90IGxvb3AuZmlyc3QlfSAgICB7JSBlbmRpZiAlfXt7Y29u bnxxdElkZW50KGMuYXR0bmFtZSl9fSB7eyBjb25ufHF0VHlwZUlkZW50KGMu ZGF0YXR5cGUpIH19eyUgaWYgYy50eXBsZW4gJX0oe3tjLnR5cGxlbn19IHsl IGlmIGMucHJlY2lzaW9uICV9LCB7e2MucHJlY2lzaW9ufX17JSBlbmRpZiAl fSl7JSBlbmRpZiAlfXslIGlmIGMuaXNBcnJheVR5cGUgJX1bXXslIGVuZGlm ICV9eyUgaWYgYy5hdHRub3RudWxsICV9CisgTk9UIE5VTEx7JSBlbHNlICV9 IE5VTEx7JSBlbmRpZiAlfQoreyUgaWYgbm90IGxvb3AubGFzdCAlfSwKK3sl IGVuZGlmICV9eyUgZW5kZm9yIC0lfXslIGVuZGlmICV9CispCisgICAgU0VS VkVSIHt7IGNvbm58cXRJZGVudChkYXRhLmZ0c3J2bmFtZSkgfX17JSBpZiBk YXRhLmZ0b3B0aW9ucyAlfQorCit7JSBmb3IgbyBpbiBkYXRhLmZ0b3B0aW9u cyAlfQoreyUgaWYgby5vcHRpb24gYW5kIG8udmFsdWUgJX0KK3slIGlmIGxv b3AuZmlyc3QgJX0gICAgT1BUSU9OUyAoeyUgZW5kaWYgJX17JSBpZiBub3Qg bG9vcC5maXJzdCAlfSwgeyUgZW5kaWYgJX17e28ub3B0aW9ufX0ge3tvLnZh bHVlfHF0TGl0ZXJhbH19eyUgaWYgbG9vcC5sYXN0ICV9KXslIGVuZGlmICV9 eyUgZW5kaWYgJX0KK3slIGVuZGZvciAlfXslIGVuZGlmIC0lfTsKK3slIGlm IGRhdGEuZGVzY3JpcHRpb24gJX0KKworQ09NTUVOVCBPTiBGT1JFSUdOIFRB QkxFIHt7IGNvbm58cXRJZGVudChkYXRhLmJhc2Vuc3AsIGRhdGEubmFtZSkg fX0KKyAgICBJUyAne3sgZGF0YS5kZXNjcmlwdGlvbiB9fSc7Cit7JSBlbmRp ZiAtJX0KK3slIGlmIGRhdGEuc2VjbGFiZWxzICV9Cit7JSBmb3IgciBpbiBk YXRhLnNlY2xhYmVscyAlfQoreyUgaWYgci5zZWN1cml0eV9sYWJlbCBhbmQg ci5wcm92aWRlciAlfQorCit7eyBTRUNMQUJMRS5TRVQoY29ubiwgJ0ZPUkVJ R04gVEFCTEUnLCBkYXRhLm5hbWUsIHIucHJvdmlkZXIsIHIuc2VjdXJpdHlf bGFiZWwsIGRhdGEuYmFzZW5zcCkgfX0KK3slIGVuZGlmICV9Cit7JSBlbmRm b3IgJX0KK3slIGVuZGlmICV9Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVp Z25fdGFibGVzL3NxbC85LjFfcGx1cy9kZWxldGUuc3FsIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVz L3NxbC85LjFfcGx1cy9kZWxldGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjYyNDNlMDUKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWln bl90YWJsZXMvc3FsLzkuMV9wbHVzL2RlbGV0ZS5zcWwKQEAgLTAsMCArMSwx NSBAQAoreyUgaWYgc2NpZCBhbmQgZm9pZCAlfQorU0VMRUNUCisgICAgYy5y ZWxuYW1lIEFTIG5hbWUsIG5zcG5hbWUgYXMgYmFzZW5zcAorRlJPTQorICAg IHBnX2NsYXNzIGMKK0xFRlQgT1VURVIgSk9JTgorICAgIHBnX25hbWVzcGFj ZSBuc3AgT04gKG5zcC5vaWQ9Yy5yZWxuYW1lc3BhY2UpCitXSEVSRQorICAg IGMucmVsbmFtZXNwYWNlID0ge3tzY2lkfX06Om9pZAorICAgIEFORCBjLm9p ZCA9IHt7Zm9pZH19OjpvaWQ7Cit7JSBlbmRpZiAlfQorCit7JSBpZiBuYW1l ICV9CitEUk9QIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KGJhc2Vu c3AsIG5hbWUpIH19eyUgaWYgY2FzY2FkZSAlfSBDQVNDQURFeyUgZW5kaWYg JX07Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv Zm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85 LjFfcGx1cy9nZXRfY29sbGF0aW9ucy5zcWwgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9m b3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzku MV9wbHVzL2dldF9jb2xsYXRpb25zLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5lNTljMTdkCi0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVp Z25fdGFibGVzL3NxbC85LjFfcGx1cy9nZXRfY29sbGF0aW9ucy5zcWwKQEAg LTAsMCArMSwxMCBAQAorU0VMRUNUIC0tbnNwbmFtZSwgY29sbG5hbWUsCisg ICAgQ0FTRSBXSEVOIGxlbmd0aChuc3BuYW1lKSA+IDAgQU5EIGxlbmd0aChj b2xsbmFtZSkgPiAwICBUSEVOCisgICAgY29uY2F0KG5zcG5hbWUsICcuIics IGNvbGxuYW1lLCciJykKKyAgICBFTFNFICcnIEVORCBBUyBjb3B5X2NvbGxh dGlvbgorRlJPTQorICAgIHBnX2NvbGxhdGlvbiBjLCBwZ19uYW1lc3BhY2Ug bgorV0hFUkUKKyAgICBjLmNvbGxuYW1lc3BhY2U9bi5vaWQKK09SREVSIEJZ CisgICAgbnNwbmFtZSwgY29sbG5hbWU7CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJs ZXMvc3FsLzkuMV9wbHVzL2dldF9jb2x1bW5zLnNxbCBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9z cWwvOS4xX3BsdXMvZ2V0X2NvbHVtbnMuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjRiZjVlMTcKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9y ZWlnbl90YWJsZXMvc3FsLzkuMV9wbHVzL2dldF9jb2x1bW5zLnNxbApAQCAt MCwwICsxLDIyIEBACitTRUxFQ1QKKyAgICBhdHRuYW1lLCBhdHRuZGltcywg YXR0dHlwbW9kLCBmb3JtYXRfdHlwZSh0Lm9pZCxOVUxMKSBBUyBkYXRhdHlw ZSwKKyAgICBmb3JtYXRfdHlwZSh0Lm9pZCwgYXR0LmF0dHR5cG1vZCkgQVMg ZnVsbHR5cGUsIGF0dG5vdG51bGwsIGF0dG51bSwKKyAgICAoU0VMRUNUIENP VU5UKDEpIGZyb20gcGdfdHlwZSB0MiBXSEVSRSB0Mi50eXBuYW1lPXQudHlw bmFtZSkgPiAxIEFTIGlzZHVwLAorICAgICgKKyAgICAgICAgYXR0bmFtZSB8 fCAnICcgfHwgZm9ybWF0X3R5cGUodC5vaWQsIGF0dC5hdHR0eXBtb2QpIHx8 ICcgJyB8fAorICAgICAgICAoQ0FTRSBXSEVOIGF0dG5vdG51bGw9J3RydWUn CisgICAgICAgIFRIRU4gJ05PVCBOVUxMJyBFTFNFICdOVUxMJworICAgICAg ICBFTkQpCisgICAgKSBhcyBzdHJjb2x1bW4KK0ZST00KKyAgICBwZ19hdHRy aWJ1dGUgYXR0CitKT0lOCisgICAgcGdfdHlwZSB0IE9OIHQub2lkPWF0dHR5 cGlkCitKT0lOCisgICAgcGdfbmFtZXNwYWNlIG5zcCBPTiB0LnR5cG5hbWVz cGFjZT1uc3Aub2lkCitMRUZUIE9VVEVSIEpPSU4KKyAgICBwZ190eXBlIGIg T04gdC50eXBlbGVtPWIub2lkCitXSEVSRQorICAgIGF0dC5hdHRyZWxpZD17 e2ZvaWR9fTo6b2lkCisgICAgQU5EIGF0dG51bT4wCitPUkRFUiBieSBhdHRu dW07CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxl cy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuMV9wbHVzL2dldF9j b25zdHJhaW50cy5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxl cy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuMV9wbHVzL2dldF9j b25zdHJhaW50cy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZmM5MzU0OQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9z cWwvOS4xX3BsdXMvZ2V0X2NvbnN0cmFpbnRzLnNxbApAQCAtMCwwICsxLDcg QEAKK1NFTEVDVAorICAgIGNvbm5hbWUsIGNvbnR5cGUsIGNvbnNyYworRlJP TQorICAgIHBnX2NvbnN0cmFpbnQKK1dIRVJFCisgICAgY29ucmVsaWQ9e3tm b2lkfX06Om9pZAorT1JERVIgYnkgY29ubmFtZTsKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWdu X3RhYmxlcy9zcWwvOS4xX3BsdXMvZ2V0X2ZvcmVpZ25fc2VydmVycy5zcWwg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9y ZWlnbl90YWJsZXMvc3FsLzkuMV9wbHVzL2dldF9mb3JlaWduX3NlcnZlcnMu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ODBm MDIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWdu X3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuMV9wbHVz L2dldF9mb3JlaWduX3NlcnZlcnMuc3FsCkBAIC0wLDAgKzEsNSBAQAorU0VM RUNUCisgICAgc3J2bmFtZQorRlJPTQorICAgIHBnX2ZvcmVpZ25fc2VydmVy CitPUkRFUiBCWSBzcnZuYW1lOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3Nx bC85LjFfcGx1cy9nZXRfb2lkLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVp Z25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS4xX3Bs dXMvZ2V0X29pZC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uOWE1ZjVkMQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9z cWwvOS4xX3BsdXMvZ2V0X29pZC5zcWwKQEAgLTAsMCArMSwxOSBAQAoreyUg aWYgYmFzZW5zcCAlfQorU0VMRUNUCisgICAgYy5vaWQsIGJuLm9pZCBhcyBz Y2lkCitGUk9NCisgICAgcGdfY2xhc3MgYworSk9JTgorICAgIHBnX25hbWVz cGFjZSBibiBPTiBibi5vaWQ9Yy5yZWxuYW1lc3BhY2UKK1dIRVJFCisgICAg Ym4ubnNwbmFtZSA9IHt7IGJhc2Vuc3B8cXRMaXRlcmFsIH19CisgICAgQU5E IGMucmVsbmFtZT17eyBuYW1lfHF0TGl0ZXJhbCB9fTsKKworeyUgZWxpZiBm b2lkICV9CitTRUxFQ1QKKyAgICBjLnJlbG5hbWVzcGFjZSBhcyBzY2lkCitG Uk9NCisgICAgcGdfY2xhc3MgYworV0hFUkUKKyAgICBjLm9pZCA9IHt7Zm9p ZH19OjpvaWQ7Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVz L3NxbC85LjFfcGx1cy9ub2RlLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVp Z25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS4xX3Bs dXMvbm9kZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYmM3MzFjNQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwv OS4xX3BsdXMvbm9kZS5zcWwKQEAgLTAsMCArMSwxNCBAQAorU0VMRUNUCisg ICAgYy5vaWQsIGMucmVsbmFtZSBBUyBuYW1lLCBwZ19nZXRfdXNlcmJ5aWQo cmVsb3duZXIpIEFTIG93bmVyLAorICAgIGZ0b3B0aW9ucywgbnNwbmFtZSBh cyBiYXNlbnNwLCBkZXNjcmlwdGlvbgorRlJPTQorICAgIHBnX2NsYXNzIGMK K0pPSU4KKyAgICBwZ19mb3JlaWduX3RhYmxlIGZ0IE9OIGMub2lkPWZ0LmZ0 cmVsaWQKK0xFRlQgT1VURVIgSk9JTgorICAgIHBnX25hbWVzcGFjZSBuc3Ag T04gKG5zcC5vaWQ9Yy5yZWxuYW1lc3BhY2UpCitMRUZUIE9VVEVSIEpPSU4K KyAgICBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRlcy5vYmpvaWQ9Yy5vaWQg QU5EIGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpyZWdjbGFzcykKK1dIRVJF CisgICAgYy5yZWxuYW1lc3BhY2UgPSB7e3NjaWR9fTo6b2lkCitPUkRFUiBC WSBjLnJlbG5hbWU7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3Jl aWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuMV9w bHVzL3Byb3BlcnRpZXMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90 YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjFfcGx1cy9w cm9wZXJ0aWVzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yNWFiYzFiCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3Nx bC85LjFfcGx1cy9wcm9wZXJ0aWVzLnNxbApAQCAtMCwwICsxLDI1IEBACitT RUxFQ1QKKyAgICBjLm9pZCwgYy5yZWxuYW1lIEFTIG5hbWUsIHBnX2dldF91 c2VyYnlpZChyZWxvd25lcikgQVMgb3duZXIsCisgICAgZnRvcHRpb25zLCBz cnZuYW1lIEFTIGZ0c3J2bmFtZSwgZGVzY3JpcHRpb24sIG5zcG5hbWUgYXMg YmFzZW5zcCwKKyAgICAoU0VMRUNUCisgICAgICAgIGFycmF5X2FnZyhwcm92 aWRlciB8fCAnPScgfHwgbGFiZWwpCisgICAgRlJPTQorICAgICAgICBwZ19z ZWNsYWJlbCBzbDEKKyAgICBXSEVSRQorICAgICAgICBzbDEub2Jqb2lkPWMu b2lkKSBBUyBzZWNsYWJlbHMKK0ZST00KKyAgICBwZ19jbGFzcyBjCitKT0lO CisgICAgcGdfZm9yZWlnbl90YWJsZSBmdCBPTiBjLm9pZD1mdC5mdHJlbGlk CitMRUZUIE9VVEVSIEpPSU4KKyAgICBwZ19mb3JlaWduX3NlcnZlciBmcyBP TiBmdC5mdHNlcnZlcj1mcy5vaWQKK0xFRlQgT1VURVIgSk9JTgorICAgIHBn X2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1jLm9pZCBBTkQgZGVz LmNsYXNzb2lkPSdwZ19jbGFzcyc6OnJlZ2NsYXNzKQorTEVGVCBPVVRFUiBK T0lOCisgICAgcGdfbmFtZXNwYWNlIG5zcCBPTiAobnNwLm9pZD1jLnJlbG5h bWVzcGFjZSkKK1dIRVJFCisgICAgYy5yZWxuYW1lc3BhY2UgPSB7e3NjaWR9 fTo6b2lkCisgICAgeyUgaWYgZm9pZCAlfQorICAgIEFORCBjLm9pZCA9IHt7 Zm9pZH19OjpvaWQKKyAgICB7JSBlbmRpZiAlfQorT1JERVIgQlkgYy5yZWxu YW1lOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJs ZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjFfcGx1cy91cGRh dGUuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxh dGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjFfcGx1cy91cGRhdGUuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODA3NjYKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxl cy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuMV9wbHVzL3VwZGF0 ZS5zcWwKQEAgLTAsMCArMSwxMDUgQEAKK3slIGltcG9ydCAnbWFjcm9zL3Nj aGVtYXMvc2VjdXJpdHkubWFjcm9zJyBhcyBTRUNMQUJMRSAlfQoreyUgaWYg ZGF0YSAlfQoreyUgc2V0IG5hbWUgPSBvX2RhdGEubmFtZSAlfQoreyUgaWYg ZGF0YS5uYW1lICV9Cit7JSBpZiBkYXRhLm5hbWUgIT0gb19kYXRhLm5hbWUg JX0KK0FMVEVSIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0 YS5iYXNlbnNwLCBvX2RhdGEubmFtZSkgfX0KK1JFTkFNRSBUTyB7eyBjb25u fHF0SWRlbnQoZGF0YS5uYW1lKSB9fTsKK3slIHNldCBuYW1lID0gZGF0YS5u YW1lICV9Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgLSV9CisKK3slIGlmIGRh dGEub3duZXIgJX0KKworQUxURVIgRk9SRUlHTiBUQUJMRSB7eyBjb25ufHF0 SWRlbnQob19kYXRhLmJhc2Vuc3AsIG5hbWUpIH19CitPV05FUiBUTyB7eyBk YXRhLm93bmVyIH19OworeyUgZW5kaWYgLSV9CisKK3slIGlmIGRhdGEuY29s dW1ucyAlfQoreyUgZm9yIGMgaW4gZGF0YS5jb2x1bW5zLmRlbGV0ZWQgJX0K KworQUxURVIgRk9SRUlHTiBUQUJMRSB7eyBjb25ufHF0SWRlbnQob19kYXRh LmJhc2Vuc3AsIG5hbWUpIH19CitEUk9QIENPTFVNTiB7e2Nvbm58cXRJZGVu dChjLmF0dG5hbWUpfX07Cit7JSBlbmRmb3IgLSV9CisKK3slIGZvciBjIGlu IGRhdGEuY29sdW1ucy5hZGRlZCAlfQorCitBTFRFUiBGT1JFSUdOIFRBQkxF IHt7IGNvbm58cXRJZGVudChvX2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0KK0FE RCBDT0xVTU4ge3tjb25ufHF0SWRlbnQoYy5hdHRuYW1lKX19IHt7IGNvbm58 cXRUeXBlSWRlbnQoYy5kYXRhdHlwZSkgfX17JSBpZiBjLnR5cGxlbiAlfSh7 e2MudHlwbGVufX17JSBpZiBjLnByZWNpc2lvbiAlfSwge3tjLnByZWNpc2lv bn19eyUgZW5kaWYgJX0peyUgZW5kaWYgJX17JSBpZiBjLmlzQXJyYXlUeXBl ICV9W117JSBlbmRpZiAlfQoreyUgaWYgYy5hdHRub3RudWxsICV9IE5PVCBO VUxMeyUgZWxzZSAlfSBOVUxMeyUgZW5kaWYgJX0KK3slIGlmIGMudHlwZGVm YXVsdCAlfSBERUZBVUxUIHt7Yy50eXBkZWZhdWx0fX17JSBlbmRpZiAlfQor eyUgaWYgYy5jb2xsbmFtZSAlfSBDT0xMQVRFIHt7Yy5jb2xsbmFtZX19eyUg ZW5kaWYgJX07Cit7JSBlbmRmb3IgLSV9CisKK3slIGZvciBjIGluIGRhdGEu Y29sdW1ucy5jaGFuZ2VkICV9CisKK0FMVEVSIEZPUkVJR04gVEFCTEUge3sg Y29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNwLCBuYW1lKSB9fQorRFJPUCBD T0xVTU4ge3tjb25ufHF0SWRlbnQob19kYXRhWydjb2x1bW5zJ11bYy5hdHRu dW1dWydhdHRuYW1lJ10pfX07CisKK0FMVEVSIEZPUkVJR04gVEFCTEUge3sg Y29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNwLCBuYW1lKSB9fQorQUREIENP TFVNTiB7e2Nvbm58cXRJZGVudChjLmF0dG5hbWUpfX0ge3sgY29ubnxxdFR5 cGVJZGVudChjLmRhdGF0eXBlKSB9fXslIGlmIGMudHlwbGVuICV9KHt7Yy50 eXBsZW59fXslIGlmIGMucHJlY2lzaW9uICV9LCB7e2MucHJlY2lzaW9ufX17 JSBlbmRpZiAlfSl7JSBlbmRpZiAlfXslIGlmIGMuaXNBcnJheVR5cGUgJX1b XXslIGVuZGlmICV9Cit7JSBpZiBjLmF0dG5vdG51bGwgJX0gTk9UIE5VTEx7 JSBlbHNlICV9IE5VTEx7JSBlbmRpZiAlfQoreyUgaWYgYy50eXBkZWZhdWx0 ICV9IERFRkFVTFQge3tjLnR5cGRlZmF1bHR9fXslIGVuZGlmICV9Cit7JSBp ZiBjLmNvbGxuYW1lICV9IENPTExBVEUge3tjLmNvbGxuYW1lfX17JSBlbmRp ZiAlfTsKK3slIGVuZGZvciAlfQoreyUgZW5kaWYgLSV9CisKKworeyUgaWYg ZGF0YS5mdG9wdGlvbnMgJX0KK3slIGZvciBvIGluIGRhdGEuZnRvcHRpb25z LmRlbGV0ZWQgJX0KK3slIGlmIG8ub3B0aW9uIGFuZCBvLnZhbHVlICV9CisK K0FMVEVSIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5i YXNlbnNwLCBuYW1lKSB9fQorT1BUSU9OUyAoIERST1Age3tvLm9wdGlvbn19 KTsKK3slIGVuZGlmICV9Cit7JSBlbmRmb3IgJX0KKworeyUgZm9yIG8gaW4g ZGF0YS5mdG9wdGlvbnMuYWRkZWQgJX0KK3slIGlmIG8ub3B0aW9uIGFuZCBv LnZhbHVlICV9CisKK0FMVEVSIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElk ZW50KG9fZGF0YS5iYXNlbnNwLCBuYW1lKSB9fQorT1BUSU9OUyAoQUREIHt7 by5vcHRpb259fSB7e28udmFsdWV8cXRMaXRlcmFsfX0pOworeyUgZW5kaWYg JX0KK3slIGVuZGZvciAlfQorCit7JSBmb3IgbyBpbiBkYXRhLmZ0b3B0aW9u cy5jaGFuZ2VkICV9Cit7JSBpZiBvLm9wdGlvbiBhbmQgby52YWx1ZSAlfQor CitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChvX2RhdGEu YmFzZW5zcCwgbmFtZSkgfX0KK09QVElPTlMgKFNFVCB7e28ub3B0aW9ufX0g e3tvLnZhbHVlfHF0TGl0ZXJhbH19KTsKK3slIGVuZGlmICV9Cit7JSBlbmRm b3IgJX0KK3slIGVuZGlmIC0lfQorCisKK3slIHNldCBzZWNsYWJlbHMgPSBk YXRhLnNlY2xhYmVscyAlfQoreyUgaWYgJ2RlbGV0ZWQnIGluIHNlY2xhYmVs cyBhbmQgc2VjbGFiZWxzLmRlbGV0ZWR8bGVuZ3RoID4gMCAlfQoreyUgZm9y IHIgaW4gc2VjbGFiZWxzLmRlbGV0ZWQgJX0KK3t7IFNFQ0xBQkxFLlVOU0VU KGNvbm4sICdGT1JFSUdOIFRBQkxFJywgbmFtZSwgci5wcm92aWRlciwgb19k YXRhLmJhc2Vuc3ApIH19Cit7JSBlbmRmb3IgJX0KK3slIGVuZGlmIC0lfQor eyUgaWYgJ2FkZGVkJyBpbiBzZWNsYWJlbHMgYW5kIHNlY2xhYmVscy5hZGRl ZHxsZW5ndGggPiAwICV9Cit7JSBmb3IgciBpbiBzZWNsYWJlbHMuYWRkZWQg JX0KKwore3sgU0VDTEFCTEUuU0VUKGNvbm4sICdGT1JFSUdOIFRBQkxFJywg bmFtZSwgci5wcm92aWRlciwgci5zZWN1cml0eV9sYWJlbCwgb19kYXRhLmJh c2Vuc3ApIH19Cit7JSBlbmRmb3IgJX0KK3slIGVuZGlmIC0lfQoreyUgaWYg J2NoYW5nZWQnIGluIHNlY2xhYmVscyBhbmQgc2VjbGFiZWxzLmNoYW5nZWR8 bGVuZ3RoID4gMCAlfQoreyUgZm9yIHIgaW4gc2VjbGFiZWxzLmNoYW5nZWQg JX0KKwore3sgU0VDTEFCTEUuU0VUKGNvbm4sICdGT1JFSUdOIFRBQkxFJywg bmFtZSwgci5wcm92aWRlciwgci5zZWN1cml0eV9sYWJlbCwgb19kYXRhLmJh c2Vuc3ApIH19Cit7JSBlbmRmb3IgJX0KK3slIGVuZGlmIC0lfQorCit7JSBp ZiBkYXRhLmRlc2NyaXB0aW9uICV9CisKK0NPTU1FTlQgT04gRk9SRUlHTiBU QUJMRSB7eyBjb25ufHF0SWRlbnQob19kYXRhLmJhc2Vuc3AsIG5hbWUpIH19 CisgICAgSVMge3sgZGF0YS5kZXNjcmlwdGlvbnxxdExpdGVyYWwgfX07Cit7 JSBlbmRpZiAtJX0KKworeyUgaWYgZGF0YS5iYXNlbnNwICV9CisKK0FMVEVS IEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNw LCBuYW1lKSB9fQorICAgIFNFVCBTQ0hFTUEge3sgY29ubnxxdElkZW50KGRh dGEuYmFzZW5zcCkgfX07Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0KZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBs YXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS4zX3BsdXMvY3JlYXRlLnNxbCBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3Jl aWduX3RhYmxlcy9zcWwvOS4zX3BsdXMvY3JlYXRlLnNxbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWQ3ZjI1Ci0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxh dGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy9jcmVhdGUuc3FsCkBA IC0wLDAgKzEsMzEgQEAKK3slIGltcG9ydCAnbWFjcm9zL3NjaGVtYXMvc2Vj dXJpdHkubWFjcm9zJyBhcyBTRUNMQUJMRSAlfQoreyUgaWYgZGF0YSAlfQor Q1JFQVRFIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KGRhdGEuYmFz ZW5zcCwgZGF0YS5uYW1lKSB9fSAoeyUgaWYgZGF0YS5jb2x1bW5zICV9Cit7 JSBmb3IgYyBpbiBkYXRhLmNvbHVtbnMgJX0KK3slIGlmIG5vdCBsb29wLmZp cnN0JX0gICAgeyUgZW5kaWYgJX17e2Nvbm58cXRJZGVudChjLmF0dG5hbWUp fX0ge3tjb25ufHF0VHlwZUlkZW50KGMuZGF0YXR5cGUpIH19eyUgaWYgYy50 eXBsZW4gJX0oe3tjLnR5cGxlbn19eyUgaWYgYy5wcmVjaXNpb24gJX0sIHt7 Yy5wcmVjaXNpb259fXslIGVuZGlmICV9KXslIGVuZGlmICV9eyUgaWYgYy5p c0FycmF5VHlwZSAlfVtdeyUgZW5kaWYgJX17JSBpZiBjLmF0dG5vdG51bGwg JX0KKyBOT1QgTlVMTHslIGVsc2UgJX0gTlVMTHslIGVuZGlmICV9eyUgaWYg Yy50eXBkZWZhdWx0ICV9CisgREVGQVVMVCB7e2MudHlwZGVmYXVsdH19eyUg ZW5kaWYgJX17JSBpZiBjLmNvbGxuYW1lICV9CisgQ09MTEFURSB7e2MuY29s bG5hbWV9fXslIGVuZGlmICV9Cit7JSBpZiBub3QgbG9vcC5sYXN0ICV9LAor eyUgZW5kaWYgJX17JSBlbmRmb3IgLSV9eyUgZW5kaWYgJX0KKykKKyAgICBT RVJWRVIge3sgY29ubnxxdElkZW50KGRhdGEuZnRzcnZuYW1lKSB9fXslIGlm IGRhdGEuZnRvcHRpb25zICV9CisKK3slIGZvciBvIGluIGRhdGEuZnRvcHRp b25zICV9Cit7JSBpZiBvLm9wdGlvbiBhbmQgby52YWx1ZSAlfQoreyUgaWYg bG9vcC5maXJzdCAlfSAgICBPUFRJT05TICh7JSBlbmRpZiAlfXslIGlmIG5v dCBsb29wLmZpcnN0ICV9LCB7JSBlbmRpZiAlfXt7by5vcHRpb259fSB7e28u dmFsdWV8cXRMaXRlcmFsfX17JSBpZiBsb29wLmxhc3QgJX0peyUgZW5kaWYg JX17JSBlbmRpZiAlfQoreyUgZW5kZm9yICV9eyUgZW5kaWYgJX07Cit7JSBp ZiBkYXRhLmRlc2NyaXB0aW9uICV9CisKK0NPTU1FTlQgT04gRk9SRUlHTiBU QUJMRSB7eyBjb25ufHF0SWRlbnQoZGF0YS5iYXNlbnNwLCBkYXRhLm5hbWUp IH19CisgICAgSVMgJ3t7IGRhdGEuZGVzY3JpcHRpb24gfX0nOworeyUgZW5k aWYgLSV9Cit7JSBpZiBkYXRhLnNlY2xhYmVscyAlfQoreyUgZm9yIHIgaW4g ZGF0YS5zZWNsYWJlbHMgJX0KK3slIGlmIHIuc2VjdXJpdHlfbGFiZWwgYW5k IHIucHJvdmlkZXIgJX0KKwore3sgU0VDTEFCTEUuU0VUKGNvbm4sICdGT1JF SUdOIFRBQkxFJywgZGF0YS5uYW1lLCByLnByb3ZpZGVyLCByLnNlY3VyaXR5 X2xhYmVsLCBkYXRhLmJhc2Vuc3ApIH19Cit7JSBlbmRpZiAlfQoreyUgZW5k Zm9yICV9Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3Jl aWduX3RhYmxlcy9zcWwvOS4zX3BsdXMvZGVsZXRlLnNxbCBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxl cy9zcWwvOS4zX3BsdXMvZGVsZXRlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi41YmIwOTY5Ci0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVp Z25fdGFibGVzL3NxbC85LjNfcGx1cy9kZWxldGUuc3FsCkBAIC0wLDAgKzEs MTcgQEAKK3slIGlmIHNjaWQgYW5kIGZvaWQgJX0KK1NFTEVDVAorICAgIGMu cmVsbmFtZSBBUyBuYW1lLCBuc3BuYW1lIGFzIGJhc2Vuc3AKK0ZST00KKyAg ICBwZ19jbGFzcyBjCitMRUZUIE9VVEVSIEpPSU4KKyAgICBwZ19uYW1lc3Bh Y2UgbnNwIE9OIChuc3Aub2lkPWMucmVsbmFtZXNwYWNlKQorV0hFUkUKKyAg ICBjLnJlbG5hbWVzcGFjZSA9IHt7c2NpZH19OjpvaWQKK0FORAorICAgIGMu b2lkID0ge3tmb2lkfX06Om9pZDsKK3slIGVuZGlmICV9CisKKworeyUgaWYg bmFtZSAlfQorRFJPUCBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChi YXNlbnNwLCBuYW1lKSB9fXslIGlmIGNhc2NhZGUlfSBDQVNDQURFeyUgZW5k aWYgJX07Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3Nx bC85LjNfcGx1cy9nZXRfY29sbGF0aW9ucy5zcWwgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3Fs LzkuM19wbHVzL2dldF9jb2xsYXRpb25zLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5lOGQyNzRiCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2Zv cmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy9nZXRfY29sbGF0aW9ucy5zcWwK QEAgLTAsMCArMSw5IEBACitTRUxFQ1QgLS1uc3BuYW1lLCBjb2xsbmFtZSwK KyAgICBDQVNFIFdIRU4gbGVuZ3RoKG5zcG5hbWUpID4gMCBBTkQgbGVuZ3Ro KGNvbGxuYW1lKSA+IDAgIFRIRU4KKyAgICBjb25jYXQobnNwbmFtZSwgJy4i JywgY29sbG5hbWUsJyInKQorICAgIEVMU0UgJycgRU5EIEFTIGNvcHlfY29s bGF0aW9uCitGUk9NCisgICAgcGdfY29sbGF0aW9uIGMsIHBnX25hbWVzcGFj ZSBuCitXSEVSRQorICAgIGMuY29sbG5hbWVzcGFjZT1uLm9pZAorT1JERVIg QlkgbnNwbmFtZSwgY29sbG5hbWU7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMv c3FsLzkuM19wbHVzL2dldF9jb2x1bW5zLnNxbCBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwv OS4zX3BsdXMvZ2V0X2NvbHVtbnMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjA4MjRkM2UKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWln bl90YWJsZXMvc3FsLzkuM19wbHVzL2dldF9jb2x1bW5zLnNxbApAQCAtMCww ICsxLDM0IEBACitTRUxFQ1QKKyAgICBhdHRuYW1lLCBhdHRuZGltcywgYXR0 dHlwbW9kLCBmb3JtYXRfdHlwZSh0Lm9pZCxOVUxMKSBBUyBkYXRhdHlwZSwK KyAgICBhdHRub3RudWxsLCBhdHRudW0sIGZvcm1hdF90eXBlKHQub2lkLCBh dHQuYXR0dHlwbW9kKSBBUyBmdWxsdHlwZSwKKyAgICBDQVNFIFdIRU4gbGVu Z3RoKGNuLm5zcG5hbWUpID4gMCBBTkQgbGVuZ3RoKGNsLmNvbGxuYW1lKSA+ IDAgVEhFTgorICAgIGNvbmNhdChjbi5uc3BuYW1lLCAnLiInLCBjbC5jb2xs bmFtZSwnIicpIEVMU0UgJycgRU5EIEFTIGNvbGxuYW1lLAorICAgIChTRUxF Q1QgQ09VTlQoMSkgZnJvbSBwZ190eXBlIHQyIFdIRVJFIHQyLnR5cG5hbWU9 dC50eXBuYW1lKSA+IDEgQVMgaXNkdXAsCisgICAgcGdfY2F0YWxvZy5wZ19n ZXRfZXhwcihkZWYuYWRiaW4sIGRlZi5hZHJlbGlkKSBBUyB0eXBkZWZhdWx0 LAorICAgICgKKyAgICAgICAgYXR0bmFtZSB8fCAnICcgfHwgZm9ybWF0X3R5 cGUodC5vaWQsIGF0dC5hdHR0eXBtb2QpIHx8ICcgJyB8fAorICAgICAgICAo Q0FTRSBXSEVOIGF0dG5vdG51bGw9J3RydWUnCisgICAgICAgIFRIRU4gJ05P VCBOVUxMJyBFTFNFICdOVUxMJworICAgICAgICBFTkQpIHx8ICcgJyB8fAor ICAgICAgICAoQ0FTRSBXSEVOIHBnX2NhdGFsb2cucGdfZ2V0X2V4cHIoZGVm LmFkYmluLCBkZWYuYWRyZWxpZCk8PicnCisgICAgICAgIFRIRU4gJ0RFRkFV TFQgJyB8fCBwZ19jYXRhbG9nLnBnX2dldF9leHByKGRlZi5hZGJpbiwgZGVm LmFkcmVsaWQpCisgICAgICAgIEVMU0UgJycgRU5EKQorICAgICkgYXMgc3Ry Y29sdW1uCitGUk9NCisgICAgcGdfYXR0cmlidXRlIGF0dAorSk9JTgorICAg IHBnX3R5cGUgdCBPTiB0Lm9pZD1hdHR0eXBpZAorSk9JTgorICAgIHBnX25h bWVzcGFjZSBuc3AgT04gdC50eXBuYW1lc3BhY2U9bnNwLm9pZAorTEVGVCBP VVRFUiBKT0lOCisgICAgcGdfYXR0cmRlZiBkZWYgT04gYWRyZWxpZD1hdHQu YXR0cmVsaWQgQU5EIGFkbnVtPWF0dC5hdHRudW0KK0xFRlQgT1VURVIgSk9J TgorICAgIHBnX3R5cGUgYiBPTiB0LnR5cGVsZW09Yi5vaWQKK0xFRlQgT1VU RVIgSk9JTgorICAgIHBnX2NvbGxhdGlvbiBjbCBPTiB0LnR5cGNvbGxhdGlv bj1jbC5vaWQKK0xFRlQgT1VURVIgSk9JTgorICAgIHBnX25hbWVzcGFjZSBj biBPTiBjbC5jb2xsbmFtZXNwYWNlPWNuLm9pZAorV0hFUkUKKyAgICBhdHQu YXR0cmVsaWQ9e3tmb2lkfX06Om9pZAorICAgIEFORCBhdHRudW0+MAorT1JE RVIgYnkgYXR0bnVtOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9y ZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjNf cGx1cy9nZXRfY29uc3RyYWludHMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9y ZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjNf cGx1cy9nZXRfY29uc3RyYWludHMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmZjOTM1NDkKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWln bl90YWJsZXMvc3FsLzkuM19wbHVzL2dldF9jb25zdHJhaW50cy5zcWwKQEAg LTAsMCArMSw3IEBACitTRUxFQ1QKKyAgICBjb25uYW1lLCBjb250eXBlLCBj b25zcmMKK0ZST00KKyAgICBwZ19jb25zdHJhaW50CitXSEVSRQorICAgIGNv bnJlbGlkPXt7Zm9pZH19OjpvaWQKK09SREVSIGJ5IGNvbm5hbWU7CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0 ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuM19wbHVzL2dldF9mb3JlaWduX3Nl cnZlcnMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVt cGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy9nZXRfZm9yZWln bl9zZXJ2ZXJzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4xYzk1Y2U1Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3Nx bC85LjNfcGx1cy9nZXRfZm9yZWlnbl9zZXJ2ZXJzLnNxbApAQCAtMCwwICsx LDYgQEAKK1NFTEVDVAorICAgIHNydm5hbWUKK0ZST00KKyAgICBwZ19mb3Jl aWduX3NlcnZlcgorT1JERVIgQlkKKyAgICBzcnZuYW1lOwpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2Zv cmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy9nZXRfb2lkLnNxbCBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3Rh Ymxlcy9zcWwvOS4zX3BsdXMvZ2V0X29pZC5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1ZjVkMQotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9m b3JlaWduX3RhYmxlcy9zcWwvOS4zX3BsdXMvZ2V0X29pZC5zcWwKQEAgLTAs MCArMSwxOSBAQAoreyUgaWYgYmFzZW5zcCAlfQorU0VMRUNUCisgICAgYy5v aWQsIGJuLm9pZCBhcyBzY2lkCitGUk9NCisgICAgcGdfY2xhc3MgYworSk9J TgorICAgIHBnX25hbWVzcGFjZSBibiBPTiBibi5vaWQ9Yy5yZWxuYW1lc3Bh Y2UKK1dIRVJFCisgICAgYm4ubnNwbmFtZSA9IHt7IGJhc2Vuc3B8cXRMaXRl cmFsIH19CisgICAgQU5EIGMucmVsbmFtZT17eyBuYW1lfHF0TGl0ZXJhbCB9 fTsKKworeyUgZWxpZiBmb2lkICV9CitTRUxFQ1QKKyAgICBjLnJlbG5hbWVz cGFjZSBhcyBzY2lkCitGUk9NCisgICAgcGdfY2xhc3MgYworV0hFUkUKKyAg ICBjLm9pZCA9IHt7Zm9pZH19OjpvaWQ7Cit7JSBlbmRpZiAlfQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVz L2ZvcmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy9ub2RlLnNxbCBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3Rh Ymxlcy9zcWwvOS4zX3BsdXMvbm9kZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYmM3MzFjNQotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3Jl aWduX3RhYmxlcy9zcWwvOS4zX3BsdXMvbm9kZS5zcWwKQEAgLTAsMCArMSwx NCBAQAorU0VMRUNUCisgICAgYy5vaWQsIGMucmVsbmFtZSBBUyBuYW1lLCBw Z19nZXRfdXNlcmJ5aWQocmVsb3duZXIpIEFTIG93bmVyLAorICAgIGZ0b3B0 aW9ucywgbnNwbmFtZSBhcyBiYXNlbnNwLCBkZXNjcmlwdGlvbgorRlJPTQor ICAgIHBnX2NsYXNzIGMKK0pPSU4KKyAgICBwZ19mb3JlaWduX3RhYmxlIGZ0 IE9OIGMub2lkPWZ0LmZ0cmVsaWQKK0xFRlQgT1VURVIgSk9JTgorICAgIHBn X25hbWVzcGFjZSBuc3AgT04gKG5zcC5vaWQ9Yy5yZWxuYW1lc3BhY2UpCitM RUZUIE9VVEVSIEpPSU4KKyAgICBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRl cy5vYmpvaWQ9Yy5vaWQgQU5EIGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpy ZWdjbGFzcykKK1dIRVJFCisgICAgYy5yZWxuYW1lc3BhY2UgPSB7e3NjaWR9 fTo6b2lkCitPUkRFUiBCWSBjLnJlbG5hbWU7CmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90 YWJsZXMvc3FsLzkuM19wbHVzL3Byb3BlcnRpZXMuc3FsIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVz L3NxbC85LjNfcGx1cy9wcm9wZXJ0aWVzLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4zZmYwODhmCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2Zv cmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy9wcm9wZXJ0aWVzLnNxbApAQCAt MCwwICsxLDI3IEBACitTRUxFQ1QKKyAgICBjLm9pZCwgYy5yZWxuYW1lIEFT IG5hbWUsIHBnX2dldF91c2VyYnlpZChyZWxvd25lcikgQVMgb3duZXIsCisg ICAgZnRvcHRpb25zLCBzcnZuYW1lIEFTIGZ0c3J2bmFtZSwgZGVzY3JpcHRp b24sIG5zcG5hbWUgYXMgYmFzZW5zcCwgY29uc3JjLAorICAgIChTRUxFQ1QK KyAgICAgICAgYXJyYXlfYWdnKHByb3ZpZGVyIHx8ICc9JyB8fCBsYWJlbCkK KyAgICBGUk9NCisgICAgICAgIHBnX3Noc2VjbGFiZWwgc2wxCisgICAgV0hF UkUKKyAgICAgICAgc2wxLm9iam9pZD1jLm9pZCkgQVMgc2VjbGFiZWxzCitG Uk9NCisgICAgcGdfY2xhc3MgYworSk9JTgorICAgIHBnX2ZvcmVpZ25fdGFi bGUgZnQgT04gYy5vaWQ9ZnQuZnRyZWxpZAorTEVGVCBPVVRFUiBKT0lOCisg ICAgcGdfZm9yZWlnbl9zZXJ2ZXIgZnMgT04gZnQuZnRzZXJ2ZXI9ZnMub2lk CitMRUZUIE9VVEVSIEpPSU4KKyAgICBwZ19kZXNjcmlwdGlvbiBkZXMgT04g KGRlcy5vYmpvaWQ9Yy5vaWQgQU5EIGRlcy5jbGFzc29pZD0ncGdfY2xhc3Mn OjpyZWdjbGFzcykKK0xFRlQgT1VURVIgSk9JTgorICAgIHBnX25hbWVzcGFj ZSBuc3AgT04gKG5zcC5vaWQ9Yy5yZWxuYW1lc3BhY2UpCitMRUZUIE9VVEVS IEpPSU4KKyAgICBwZ19jb25zdHJhaW50IGNuIE9OIChjbi5jb25yZWxpZD1j Lm9pZCkKK1dIRVJFCisgICAgYy5yZWxuYW1lc3BhY2UgPSB7e3NjaWR9fTo6 b2lkCisgICAgeyUgaWYgZm9pZCAlfQorICAgIEFORCBjLm9pZCA9IHt7Zm9p ZH19OjpvaWQKKyAgICB7JSBlbmRpZiAlfQorT1JERVIgQlkgYy5yZWxuYW1l OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMv dGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy91cGRhdGUu c3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVz L2ZvcmVpZ25fdGFibGVzL3NxbC85LjNfcGx1cy91cGRhdGUuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOThiNTMKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90 ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuM19wbHVzL3VwZGF0ZS5z cWwKQEAgLTAsMCArMSwxMTMgQEAKK3slIGltcG9ydCAnbWFjcm9zL3NjaGVt YXMvc2VjdXJpdHkubWFjcm9zJyBhcyBTRUNMQUJMRSAlfQoreyUgaWYgZGF0 YSAlfQoreyUgc2V0IG5hbWUgPSBvX2RhdGEubmFtZSAlfQoreyUgaWYgZGF0 YS5uYW1lICV9Cit7JSBpZiBkYXRhLm5hbWUgIT0gb19kYXRhLm5hbWUgJX0K K0FMVEVSIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5i YXNlbnNwLCBvX2RhdGEubmFtZSkgfX0KK1JFTkFNRSBUTyB7eyBjb25ufHF0 SWRlbnQoZGF0YS5uYW1lKSB9fTsKK3slIHNldCBuYW1lID0gZGF0YS5uYW1l ICV9Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgLSV9Cit7JSBpZiBkYXRhLm93 bmVyICV9CisKK0FMVEVSIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50 KG9fZGF0YS5iYXNlbnNwLCBuYW1lKSB9fQorT1dORVIgVE8ge3sgZGF0YS5v d25lciB9fTsKK3slIGVuZGlmIC0lfQoreyUgaWYgZGF0YS5jb2x1bW5zICV9 Cit7JSBmb3IgYyBpbiBkYXRhLmNvbHVtbnMuZGVsZXRlZCAlfQorCitBTFRF UiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChvX2RhdGEuYmFzZW5z cCwgbmFtZSkgfX0KK0RST1AgQ09MVU1OIHt7Y29ubnxxdElkZW50KGMuYXR0 bmFtZSl9fTsKK3slIGVuZGZvciAtJX0KK3slIGZvciBjIGluIGRhdGEuY29s dW1ucy5hZGRlZCAlfQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58 cXRJZGVudChvX2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0KK0FERCBDT0xVTU4g e3tjb25ufHF0SWRlbnQoYy5hdHRuYW1lKX19IHt7IGNvbm58cXRUeXBlSWRl bnQoYy5kYXRhdHlwZSkgfX17JSBpZiBjLnR5cGxlbiAlfSh7e2MudHlwbGVu fX17JSBpZiBjLnByZWNpc2lvbiAlfSwge3tjLnByZWNpc2lvbn19eyUgZW5k aWYgJX0peyUgZW5kaWYgJX17JSBpZiBjLmlzQXJyYXlUeXBlICV9W117JSBl bmRpZiAlfQoreyUgaWYgYy5hdHRub3RudWxsICV9IE5PVCBOVUxMeyUgZWxz ZSAlfSBOVUxMeyUgZW5kaWYgJX0KK3slIGlmIGMudHlwZGVmYXVsdCAlfSBE RUZBVUxUIHt7Yy50eXBkZWZhdWx0fX17JSBlbmRpZiAlfQoreyUgaWYgYy5j b2xsbmFtZSAlfSBDT0xMQVRFIHt7Yy5jb2xsbmFtZX19eyUgZW5kaWYgJX07 Cit7JSBlbmRmb3IgLSV9Cit7JSBmb3IgYyBpbiBkYXRhLmNvbHVtbnMuY2hh bmdlZCAlfQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVu dChvX2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0KK0RST1AgQ09MVU1OIHt7Y29u bnxxdElkZW50KG9fZGF0YVsnY29sdW1ucyddW2MuYXR0bnVtXVsnYXR0bmFt ZSddKX19OworCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVu dChvX2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0KK0FERCBDT0xVTU4ge3tjb25u fHF0SWRlbnQoYy5hdHRuYW1lKX19IHt7IGNvbm58cXRUeXBlSWRlbnQoYy5k YXRhdHlwZSkgfX17JSBpZiBjLnR5cGxlbiAlfSh7e2MudHlwbGVufX17JSBp ZiBjLnByZWNpc2lvbiAlfSwge3tjLnByZWNpc2lvbn19eyUgZW5kaWYgJX0p eyUgZW5kaWYgJX17JSBpZiBjLmlzQXJyYXlUeXBlICV9W117JSBlbmRpZiAl fQoreyUgaWYgYy5hdHRub3RudWxsICV9IE5PVCBOVUxMeyUgZWxzZSAlfSBO VUxMeyUgZW5kaWYgJX0KK3slIGlmIGMudHlwZGVmYXVsdCAlfSBERUZBVUxU IHt7Yy50eXBkZWZhdWx0fX17JSBlbmRpZiAlfQoreyUgaWYgYy5jb2xsbmFt ZSAlfSBDT0xMQVRFIHt7Yy5jb2xsbmFtZX19eyUgZW5kaWYgJX07Cit7JSBl bmRmb3IgLSV9Cit7JSBlbmRpZiAtJX0KK3slIGlmIGRhdGEuY29uc3RyYWlu dHMgJX0KK3slIGZvciBjIGluIGRhdGEuY29uc3RyYWludHMuZGVsZXRlZCAl fQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChvX2Rh dGEuYmFzZW5zcCwgbmFtZSkgfX0KK0RST1AgQ09OU1RSQUlOVCB7e2Nvbm58 cXRJZGVudChjLmNvbm5hbWUpfX07Cit7JSBlbmRmb3IgJX0KKworeyUgZm9y IGMgaW4gZGF0YS5jb25zdHJhaW50cy5hZGRlZCAlfQorCitBTFRFUiBGT1JF SUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChvX2RhdGEuYmFzZW5zcCwgbmFt ZSkgfX0KK0FERCBDT05TVFJBSU5UIHt7Y29ubnxxdElkZW50KGMuY29ubmFt ZSl9fSB7JSBpZiBjLmNvbnNyYyAlfSBDSEVDSyAoe3tjLmNvbnNyY319KXsl IGVuZGlmICV9IHslIGlmIGMuY29ubm9pbmhlcml0ICV9IE5PIElOSEVSSVR7 JSBlbmRpZiAlfTsKK3slIGVuZGZvciAlfQoreyUgZW5kaWYgLSV9CisKK3sl IGlmIGRhdGEuZnRvcHRpb25zICV9Cit7JSBmb3IgbyBpbiBkYXRhLmZ0b3B0 aW9ucy5kZWxldGVkICV9Cit7JSBpZiBvLm9wdGlvbiBhbmQgby52YWx1ZSAl fQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChvX2Rh dGEuYmFzZW5zcCwgbmFtZSkgfX0KK09QVElPTlMgKCBEUk9QIHt7by5vcHRp b259fSk7Cit7JSBlbmRpZiAlfQoreyUgZW5kZm9yICV9CisKK3slIGZvciBv IGluIGRhdGEuZnRvcHRpb25zLmFkZGVkICV9Cit7JSBpZiBvLm9wdGlvbiBh bmQgby52YWx1ZSAlfQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58 cXRJZGVudChvX2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0KK09QVElPTlMgKEFE RCB7e28ub3B0aW9ufX0ge3tvLnZhbHVlfHF0TGl0ZXJhbH19KTsKK3slIGVu ZGlmICV9Cit7JSBlbmRmb3IgJX0KKworeyUgZm9yIG8gaW4gZGF0YS5mdG9w dGlvbnMuY2hhbmdlZCAlfQoreyUgaWYgby5vcHRpb24gYW5kIG8udmFsdWUg JX0KKworQUxURVIgRk9SRUlHTiBUQUJMRSB7eyBjb25ufHF0SWRlbnQob19k YXRhLmJhc2Vuc3AsIG5hbWUpIH19CitPUFRJT05TIChTRVQge3tvLm9wdGlv bn19IHt7by52YWx1ZXxxdExpdGVyYWx9fSk7Cit7JSBlbmRpZiAlfQoreyUg ZW5kZm9yICV9Cit7JSBlbmRpZiAtJX0KKworeyUgc2V0IHNlY2xhYmVscyA9 IGRhdGEuc2VjbGFiZWxzICV9Cit7JSBpZiAnZGVsZXRlZCcgaW4gc2VjbGFi ZWxzIGFuZCBzZWNsYWJlbHMuZGVsZXRlZHxsZW5ndGggPiAwICV9Cit7JSBm b3IgciBpbiBzZWNsYWJlbHMuZGVsZXRlZCAlfQorCit7eyBTRUNMQUJMRS5V TlNFVChjb25uLCAnRk9SRUlHTiBUQUJMRScsIG5hbWUsIHIucHJvdmlkZXIs IG9fZGF0YS5iYXNlbnNwKSB9fQoreyUgZW5kZm9yICV9Cit7JSBlbmRpZiAt JX0KK3slIGlmICdhZGRlZCcgaW4gc2VjbGFiZWxzIGFuZCBzZWNsYWJlbHMu YWRkZWR8bGVuZ3RoID4gMCAlfQoreyUgZm9yIHIgaW4gc2VjbGFiZWxzLmFk ZGVkICV9CisKK3t7IFNFQ0xBQkxFLlNFVChjb25uLCAnRk9SRUlHTiBUQUJM RScsIG5hbWUsIHIucHJvdmlkZXIsIHIuc2VjdXJpdHlfbGFiZWwsIG9fZGF0 YS5iYXNlbnNwKSB9fQoreyUgZW5kZm9yICV9Cit7JSBlbmRpZiAtJX0KK3sl IGlmICdjaGFuZ2VkJyBpbiBzZWNsYWJlbHMgYW5kIHNlY2xhYmVscy5jaGFu Z2VkfGxlbmd0aCA+IDAgJX0KK3slIGZvciByIGluIHNlY2xhYmVscy5jaGFu Z2VkICV9CisKK3t7IFNFQ0xBQkxFLlNFVChjb25uLCAnRk9SRUlHTiBUQUJM RScsIG5hbWUsIHIucHJvdmlkZXIsIHIuc2VjdXJpdHlfbGFiZWwsIG9fZGF0 YS5iYXNlbnNwKSB9fQoreyUgZW5kZm9yICV9Cit7JSBlbmRpZiAtJX0KKwor eyUgaWYgZGF0YS5kZXNjcmlwdGlvbiAlfQorCitDT01NRU5UIE9OIEZPUkVJ R04gVEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNwLCBuYW1l KSB9fQorICAgIElTIHt7IGRhdGEuZGVzY3JpcHRpb258cXRMaXRlcmFsIH19 OworeyUgZW5kaWYgLSV9CisKK3slIGlmIGRhdGEuYmFzZW5zcCAlfQorCitB TFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChvX2RhdGEuYmFz ZW5zcCwgbmFtZSkgfX0KKyAgICBTRVQgU0NIRU1BIHt7IGNvbm58cXRJZGVu dChkYXRhLmJhc2Vuc3ApIH19OworeyUgZW5kaWYgJX0KK3slIGVuZGlmICV9 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90 ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2NyZWF0ZS5z cWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMv Zm9yZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2NyZWF0ZS5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlZjFkOAotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3Rl bXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvY3JlYXRlLnNx bApAQCAtMCwwICsxLDQ3IEBACit7JSBpbXBvcnQgJ21hY3Jvcy9zY2hlbWFz L3NlY3VyaXR5Lm1hY3JvcycgYXMgU0VDTEFCTEUgJX0KK3slIHNldCBpc19j b2x1bW5zID0gW10gJX0KK3slIGlmIGRhdGEgJX0KK0NSRUFURSBGT1JFSUdO IFRBQkxFIHt7IGNvbm58cXRJZGVudChkYXRhLmJhc2Vuc3AsIGRhdGEubmFt ZSkgfX0KKyh7JSBpZiBkYXRhLmNvbHVtbnMgJX0KK3slIGZvciBjIGluIGRh dGEuY29sdW1ucyAlfQoreyUgaWYgKG5vdCBjLmluaGVyaXRlZGZyb20gb3Ig Yy5pbmhlcml0ZWRmcm9tID09Jycgb3IgIGMuaW5oZXJpdGVkZnJvbSA9PSBO b25lIG9yICBjLmluaGVyaXRlZGZyb20gPT0gJ05vbmUnICkgJX0KK3slIGlm IGlzX2NvbHVtbnMuYXBwZW5kKCcxJykgJX17JSBlbmRpZiAlfQore3tjb25u fHF0SWRlbnQoYy5hdHRuYW1lKX19IHt7Y29ubnxxdFR5cGVJZGVudChjLmRh dGF0eXBlKSB9fXslIGlmIGMudHlwbGVuICV9KHt7Yy50eXBsZW59fXslIGlm IGMucHJlY2lzaW9uICV9LCB7e2MucHJlY2lzaW9ufX17JSBlbmRpZiAlfSl7 JSBlbmRpZiAlfXslIGlmIGMuaXNBcnJheVR5cGUgJX1bXXslIGVuZGlmICV9 Cit7JSBpZiBjLmF0dG5vdG51bGwgJX0gTk9UIE5VTEx7JSBlbHNlICV9IE5V TEx7JSBlbmRpZiAlfQoreyUgaWYgYy50eXBkZWZhdWx0ICV9IERFRkFVTFQg e3tjLnR5cGRlZmF1bHR9fXslIGVuZGlmICV9Cit7JSBpZiBjLmNvbGxuYW1l ICV9IENPTExBVEUge3tjLmNvbGxuYW1lfX17JSBlbmRpZiAlfQoreyUgaWYg bm90IGxvb3AubGFzdCAlfSwKK3slIGVuZGlmICV9eyUgZW5kaWYgJX17JSBl bmRmb3IgLSV9Cit7JSBlbmRpZiAtJX0KKykKK3slIGlmIGRhdGEuaW5oZXJp dHMgJX0KKyAgICBJTkhFUklUUyAoeyUgZm9yIGkgaW4gZGF0YS5pbmhlcml0 cyAlfXslIGlmIGkgJX17e2l9fXslIGlmIG5vdCBsb29wLmxhc3QgJX0sIHsl IGVuZGlmICV9eyUgZW5kaWYgJX17JSBlbmRmb3IgJX0pCit7JSBlbmRpZiAl fQorICAgIFNFUlZFUiB7eyBjb25ufHF0SWRlbnQoZGF0YS5mdHNydm5hbWUp IH19eyUgaWYgZGF0YS5mdG9wdGlvbnMgJX0KKworeyUgZm9yIG8gaW4gZGF0 YS5mdG9wdGlvbnMgJX0KK3slIGlmIG8ub3B0aW9uIGFuZCBvLnZhbHVlICV9 Cit7JSBpZiBsb29wLmZpcnN0ICV9ICAgIE9QVElPTlMgKHslIGVuZGlmICV9 eyUgaWYgbm90IGxvb3AuZmlyc3QgJX0sIHslIGVuZGlmICV9e3tvLm9wdGlv bn19IHt7by52YWx1ZXxxdExpdGVyYWx9fXslIGlmIGxvb3AubGFzdCAlfSl7 JSBlbmRpZiAlfXslIGVuZGlmICV9Cit7JSBlbmRmb3IgJX17JSBlbmRpZiAl fTsKK3slIGlmIGRhdGEuY29uc3RyYWludHMgJX0KK3slIGZvciBjIGluIGRh dGEuY29uc3RyYWludHMgJX0KKworQUxURVIgRk9SRUlHTiBUQUJMRSB7eyBj b25ufHF0SWRlbnQoZGF0YS5iYXNlbnNwLCBkYXRhLm5hbWUpIH19CisgICAg QUREIENPTlNUUkFJTlQge3sgY29ubnxxdElkZW50KGMuY29ubmFtZSkgfX0g Q0hFQ0sgKHt7IGMuY29uc3JjIH19KXslIGlmIG5vdCBjLmNvbnZhbGlkYXRl ZCAlfSBOT1QgVkFMSUR7JSBlbmRpZiAlfXslIGlmIGMuY29ubm9pbmhlcml0 ICV9IE5PIElOSEVSSVR7JSBlbmRpZiAlfTsKK3slIGVuZGZvciAlfQoreyUg ZW5kaWYgJX0KK3slIGlmIGRhdGEuZGVzY3JpcHRpb24gJX0KKworQ09NTUVO VCBPTiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChkYXRhLmJhc2Vu c3AsIGRhdGEubmFtZSkgfX0KKyAgICBJUyAne3sgZGF0YS5kZXNjcmlwdGlv biB9fSc7Cit7JSBlbmRpZiAtJX0KKworeyUgaWYgZGF0YS5zZWNsYWJlbHMg JX0KK3slIGZvciByIGluIGRhdGEuc2VjbGFiZWxzICV9Cit7JSBpZiByLnNl Y3VyaXR5X2xhYmVsIGFuZCByLnByb3ZpZGVyICV9CisKK3t7IFNFQ0xBQkxF LlNFVChjb25uLCAnRk9SRUlHTiBUQUJMRScsIGRhdGEubmFtZSwgci5wcm92 aWRlciwgci5zZWN1cml0eV9sYWJlbCwgZGF0YS5iYXNlbnNwKSB9fQoreyUg ZW5kaWYgJX0KK3slIGVuZGZvciAlfQoreyUgZW5kaWYgJX0KK3slIGVuZGlm ICV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxl cy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2RlbGV0 ZS5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0 ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2RlbGV0ZS5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiMDk2OQotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVz L3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvZGVsZXRl LnNxbApAQCAtMCwwICsxLDE3IEBACit7JSBpZiBzY2lkIGFuZCBmb2lkICV9 CitTRUxFQ1QKKyAgICBjLnJlbG5hbWUgQVMgbmFtZSwgbnNwbmFtZSBhcyBi YXNlbnNwCitGUk9NCisgICAgcGdfY2xhc3MgYworTEVGVCBPVVRFUiBKT0lO CisgICAgcGdfbmFtZXNwYWNlIG5zcCBPTiAobnNwLm9pZD1jLnJlbG5hbWVz cGFjZSkKK1dIRVJFCisgICAgYy5yZWxuYW1lc3BhY2UgPSB7e3NjaWR9fTo6 b2lkCitBTkQKKyAgICBjLm9pZCA9IHt7Zm9pZH19OjpvaWQ7Cit7JSBlbmRp ZiAlfQorCisKK3slIGlmIG5hbWUgJX0KK0RST1AgRk9SRUlHTiBUQUJMRSB7 eyBjb25ufHF0SWRlbnQoYmFzZW5zcCwgbmFtZSkgfX17JSBpZiBjYXNjYWRl JX0gQ0FTQ0FERXslIGVuZGlmICV9OworeyUgZW5kaWYgJX0KZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9m b3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvZ2V0X2NvbGxhdGlvbnMuc3Fs IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2Zv cmVpZ25fdGFibGVzL3NxbC85LjVfcGx1cy9nZXRfY29sbGF0aW9ucy5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkMjc0Ygot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFi bGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvZ2V0 X2NvbGxhdGlvbnMuc3FsCkBAIC0wLDAgKzEsOSBAQAorU0VMRUNUIC0tbnNw bmFtZSwgY29sbG5hbWUsCisgICAgQ0FTRSBXSEVOIGxlbmd0aChuc3BuYW1l KSA+IDAgQU5EIGxlbmd0aChjb2xsbmFtZSkgPiAwICBUSEVOCisgICAgY29u Y2F0KG5zcG5hbWUsICcuIicsIGNvbGxuYW1lLCciJykKKyAgICBFTFNFICcn IEVORCBBUyBjb3B5X2NvbGxhdGlvbgorRlJPTQorICAgIHBnX2NvbGxhdGlv biBjLCBwZ19uYW1lc3BhY2UgbgorV0hFUkUKKyAgICBjLmNvbGxuYW1lc3Bh Y2U9bi5vaWQKK09SREVSIEJZIG5zcG5hbWUsIGNvbGxuYW1lOwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVz L2ZvcmVpZ25fdGFibGVzL3NxbC85LjVfcGx1cy9nZXRfY29sdW1ucy5zcWwg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9y ZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2dldF9jb2x1bW5zLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE0NTY0Ci0tLSAv ZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMv dGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVzL3NxbC85LjVfcGx1cy9nZXRfY29s dW1ucy5zcWwKQEAgLTAsMCArMSw1MyBAQAorV0lUSCBJTkhfVEFCTEVTIEFT CisgICAgKFNFTEVDVAorICAgICBkaXN0aW5jdCBvbiAoYXQuYXR0bmFtZSkg YXR0bmFtZSwgcGguaW5ocGFyZW50IEFTIGluaGVyaXRlZGlkLCBwaC5pbmhz ZXFubywKKyAgICAgY29uY2F0KG5tc3BfcGFyZW50Lm5zcG5hbWUsICcuJyxw YXJlbnQucmVsbmFtZSApIEFTIGluaGVyaXRlZGZyb20KKyAgICBGUk9NCisg ICAgICAgIHBnX2F0dHJpYnV0ZSBhdAorICAgIEpPSU4KKyAgICAgICAgcGdf aW5oZXJpdHMgcGggT04gcGguaW5ocGFyZW50ID0gYXQuYXR0cmVsaWQgQU5E IHBoLmluaHJlbGlkID0ge3tmb2lkfX06Om9pZAorICAgIEpPSU4KKyAgICAg ICAgcGdfY2xhc3MgcGFyZW50IE9OIHBoLmluaHBhcmVudCAgPSBwYXJlbnQu b2lkCisgICAgSk9JTgorICAgICAgICBwZ19uYW1lc3BhY2Ugbm1zcF9wYXJl bnQgT04gbm1zcF9wYXJlbnQub2lkICA9IHBhcmVudC5yZWxuYW1lc3BhY2UK KyAgICBHUk9VUCBCWSBhdC5hdHRuYW1lLCBwaC5pbmhwYXJlbnQsIHBoLmlu aHNlcW5vLCBpbmhlcml0ZWRmcm9tCisgICAgT1JERVIgQlkgYXQuYXR0bmFt ZSwgcGguaW5ocGFyZW50LCBwaC5pbmhzZXFubywgaW5oZXJpdGVkZnJvbQor ICAgICkKK1NFTEVDVCBJTkguaW5oZXJpdGVkZnJvbSwgSU5ILmluaGVyaXRl ZGlkLAorICAgIGF0dC5hdHRuYW1lLCBhdHQuYXR0bmRpbXMsIGF0dC5hdHR0 eXBtb2QsIGZvcm1hdF90eXBlKHQub2lkLE5VTEwpIEFTIGRhdGF0eXBlLAor ICAgIGF0dC5hdHRub3RudWxsLCBhdHQuYXR0bnVtLCBmb3JtYXRfdHlwZSh0 Lm9pZCwgYXR0LmF0dHR5cG1vZCkgQVMgZnVsbHR5cGUsCisgICAgQ0FTRSBX SEVOIGxlbmd0aChjbi5uc3BuYW1lKSA+IDAgQU5EIGxlbmd0aChjbC5jb2xs bmFtZSkgPiAwIFRIRU4KKyAgICBjb25jYXQoY24ubnNwbmFtZSwgJy4iJywg Y2wuY29sbG5hbWUsJyInKQorICAgIEVMU0UgJycgRU5EIEFTIGNvbGxuYW1l LAorICAgIHBnX2NhdGFsb2cucGdfZ2V0X2V4cHIoZGVmLmFkYmluLCBkZWYu YWRyZWxpZCkgQVMgdHlwZGVmYXVsdCwKKyAgICAoCisgICAgICAgIGF0dC5h dHRuYW1lIHx8ICcgJyB8fCBmb3JtYXRfdHlwZSh0Lm9pZCwgYXR0LmF0dHR5 cG1vZCkgfHwgJyAnIHx8CisgICAgICAgIChDQVNFIFdIRU4gYXR0bm90bnVs bD0ndHJ1ZScKKyAgICAgICAgVEhFTiAnTk9UIE5VTEwnIEVMU0UgJ05VTEwn CisgICAgICAgIEVORCkgfHwgJyAnIHx8CisgICAgICAgIChDQVNFIFdIRU4g cGdfY2F0YWxvZy5wZ19nZXRfZXhwcihkZWYuYWRiaW4sIGRlZi5hZHJlbGlk KTw+JycKKyAgICAgICAgVEhFTiAnREVGQVVMVCAnIHx8IHBnX2NhdGFsb2cu cGdfZ2V0X2V4cHIoZGVmLmFkYmluLCBkZWYuYWRyZWxpZCkKKyAgICAgICAg RUxTRSAnJyBFTkQpCisgICAgKSBhcyBzdHJjb2x1bW4sCisKKyAgICAoU0VM RUNUIENPVU5UKDEpIGZyb20gcGdfdHlwZSB0MiBXSEVSRSB0Mi50eXBuYW1l PXQudHlwbmFtZSkgPiAxIEFTIGlzZHVwCitGUk9NCisgICAgcGdfYXR0cmli dXRlIGF0dAorTEVGVCBKT0lOCisgICAgSU5IX1RBQkxFUyBhcyBJTkggT04g YXR0LmF0dG5hbWUgPSBJTkguYXR0bmFtZQorSk9JTgorICAgIHBnX3R5cGUg dCBPTiB0Lm9pZD1hdHR0eXBpZAorSk9JTgorICAgIHBnX25hbWVzcGFjZSBu c3AgT04gdC50eXBuYW1lc3BhY2U9bnNwLm9pZAorTEVGVCBPVVRFUiBKT0lO CisgICAgcGdfYXR0cmRlZiBkZWYgT04gYWRyZWxpZD1hdHQuYXR0cmVsaWQg QU5EIGFkbnVtPWF0dC5hdHRudW0KK0xFRlQgT1VURVIgSk9JTgorICAgIHBn X3R5cGUgYiBPTiB0LnR5cGVsZW09Yi5vaWQKK0xFRlQgT1VURVIgSk9JTgor ICAgIHBnX2NvbGxhdGlvbiBjbCBPTiB0LnR5cGNvbGxhdGlvbj1jbC5vaWQK K0xFRlQgT1VURVIgSk9JTgorICAgIHBnX25hbWVzcGFjZSBjbiBPTiBjbC5j b2xsbmFtZXNwYWNlPWNuLm9pZAorV0hFUkUKKyAgICBhdHQuYXR0cmVsaWQ9 e3tmb2lkfX06Om9pZAorICAgIEFORCBhdHQuYXR0bnVtPjAKKyAgICBPUkRF UiBCWSBhdHQuYXR0bmFtZTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwv OS41X3BsdXMvZ2V0X2NvbnN0cmFpbnRzLnNxbCBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwv OS41X3BsdXMvZ2V0X2NvbnN0cmFpbnRzLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi43NTYwYzMxCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2Zv cmVpZ25fdGFibGVzL3NxbC85LjVfcGx1cy9nZXRfY29uc3RyYWludHMuc3Fs CkBAIC0wLDAgKzEsNyBAQAorU0VMRUNUCisgICAgb2lkIGFzIGNvbm9pZCwg Y29ubmFtZSwgY29udHlwZSwgY29uc3JjLCBjb25ub2luaGVyaXQsIGNvbnZh bGlkYXRlZAorRlJPTQorICAgIHBnX2NvbnN0cmFpbnQKK1dIRVJFCisgICAg Y29ucmVsaWQ9e3tmb2lkfX06Om9pZAorT1JERVIgYnkgY29ubmFtZTsKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBs YXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvZ2V0X2ZvcmVpZ25f c2VydmVycy5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90 ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2dldF9mb3Jl aWduX3NlcnZlcnMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjcxN2JkZDMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMv c3FsLzkuNV9wbHVzL2dldF9mb3JlaWduX3NlcnZlcnMuc3FsCkBAIC0wLDAg KzEsNiBAQAorU0VMRUNUCisgICAgc3J2bmFtZQorRlJPTQorICAgIHBnX2Zv cmVpZ25fc2VydmVyCitPUkRFUgorICAgIEJZIHNydm5hbWU7CmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMv Zm9yZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2dldF9vaWQuc3FsIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25f dGFibGVzL3NxbC85LjVfcGx1cy9nZXRfb2lkLnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTVmNWQxCi0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVz L2ZvcmVpZ25fdGFibGVzL3NxbC85LjVfcGx1cy9nZXRfb2lkLnNxbApAQCAt MCwwICsxLDE5IEBACit7JSBpZiBiYXNlbnNwICV9CitTRUxFQ1QKKyAgICBj Lm9pZCwgYm4ub2lkIGFzIHNjaWQKK0ZST00KKyAgICBwZ19jbGFzcyBjCitK T0lOCisgICAgcGdfbmFtZXNwYWNlIGJuIE9OIGJuLm9pZD1jLnJlbG5hbWVz cGFjZQorV0hFUkUKKyAgICBibi5uc3BuYW1lID0ge3sgYmFzZW5zcHxxdExp dGVyYWwgfX0KKyAgICBBTkQgYy5yZWxuYW1lPXt7IG5hbWV8cXRMaXRlcmFs IH19OworCit7JSBlbGlmIGZvaWQgJX0KK1NFTEVDVAorICAgIGMucmVsbmFt ZXNwYWNlIGFzIHNjaWQKK0ZST00KKyAgICBwZ19jbGFzcyBjCitXSEVSRQor ICAgIGMub2lkID0ge3tmb2lkfX06Om9pZDsKK3slIGVuZGlmICV9CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0 ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL2dldF90YWJsZV9jb2x1 bW5zLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBs YXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvZ2V0X3RhYmxlX2Nv bHVtbnMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmUxODgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9m b3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90YWJsZXMvc3FsLzku NV9wbHVzL2dldF90YWJsZV9jb2x1bW5zLnNxbApAQCAtMCwwICsxLDE0IEBA Cit7JSBpZiBhdHRyZWxpZCAgJX0KK1NFTEVDVAorICAgIGEuYXR0bmFtZSwg Zm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgTlVMTCkgQVMgZGF0YXR5cGUsCisg ICAgcXVvdGVfaWRlbnQobi5uc3BuYW1lKXx8Jy4nfHxxdW90ZV9pZGVudChj LnJlbG5hbWUpIGFzIGluaGVyaXRlZGZyb20sCisgICAgYy5vaWQgYXMgaW5o ZXJpdGVkaWQKK0ZST00KKyAgICBwZ19jbGFzcyBjCitKT0lOCisgICAgcGdf bmFtZXNwYWNlIG4gT04gYy5yZWxuYW1lc3BhY2U9bi5vaWQKK0pPSU4KKyAg ICBwZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0gYy5vaWQgQU5EIE5P VCBhLmF0dGlzZHJvcHBlZCBBTkQgYS5hdHRudW0+MAorV0hFUkUKKyAgICBj Lm9pZCA9IHt7YXR0cmVsaWR9fTo6T0lECit7JSBlbmRpZiAlfQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVz L2ZvcmVpZ25fdGFibGVzL3NxbC85LjVfcGx1cy9nZXRfdGFibGVzLnNxbCBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3Jl aWduX3RhYmxlcy9zcWwvOS41X3BsdXMvZ2V0X3RhYmxlcy5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0NDVhMgotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3Rl bXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvZ2V0X3RhYmxl cy5zcWwKQEAgLTAsMCArMSwyMiBAQAoreyUgaWYgYXR0cmVsaWQgICV9CitT RUxFQ1QKKyAgICBhcnJheV9hZ2cocXVvdGVfaWRlbnQobi5uc3BuYW1lKSB8 fCAnLicgfHwgcXVvdGVfaWRlbnQoYy5yZWxuYW1lKSkgYXMgaW5oZXJpdHMK K0ZST00KKyAgICBwZ19jbGFzcyBjLCBwZ19uYW1lc3BhY2UgbgorV0hFUkUK KyAgICBjLnJlbG5hbWVzcGFjZT1uLm9pZCBBTkQgYy5yZWxraW5kIElOICgn cicsICdmJykKKyAgICBBTkQgYy5vaWQgaW4ge3thdHRyZWxpZH19OworCit7 JSBlbHNlICV9CitTRUxFQ1QKKyAgICBjLm9pZCBBUyBpZCwgcXVvdGVfaWRl bnQobi5uc3BuYW1lKSB8fCAnLicgfHwgcXVvdGVfaWRlbnQoYy5yZWxuYW1l KSBhcyB0ZXh0CitGUk9NCisgICAgcGdfY2xhc3MgYywgcGdfbmFtZXNwYWNl IG4KK1dIRVJFCisgICAgYy5yZWxuYW1lc3BhY2U9bi5vaWQgQU5EIGMucmVs a2luZCBJTiAoJ3InLCAnZicpCit7JSBpZiBmb2lkICV9CisgICAgQU5EIGMu b2lkIDw+IHt7Zm9pZH19OjpvaWQKK3slIGVuZGlmICV9CitPUkRFUiBCWQor ICAgIG4ubnNwbmFtZSwgYy5yZWxuYW1lOworeyUgZW5kaWYgJX0KZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRl cy9mb3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvbm9kZS5zcWwgYi93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9yZWlnbl90 YWJsZXMvc3FsLzkuNV9wbHVzL25vZGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmJjNzMxYzUKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3RhYmxlcy90ZW1wbGF0ZXMvZm9y ZWlnbl90YWJsZXMvc3FsLzkuNV9wbHVzL25vZGUuc3FsCkBAIC0wLDAgKzEs MTQgQEAKK1NFTEVDVAorICAgIGMub2lkLCBjLnJlbG5hbWUgQVMgbmFtZSwg cGdfZ2V0X3VzZXJieWlkKHJlbG93bmVyKSBBUyBvd25lciwKKyAgICBmdG9w dGlvbnMsIG5zcG5hbWUgYXMgYmFzZW5zcCwgZGVzY3JpcHRpb24KK0ZST00K KyAgICBwZ19jbGFzcyBjCitKT0lOCisgICAgcGdfZm9yZWlnbl90YWJsZSBm dCBPTiBjLm9pZD1mdC5mdHJlbGlkCitMRUZUIE9VVEVSIEpPSU4KKyAgICBw Z19uYW1lc3BhY2UgbnNwIE9OIChuc3Aub2lkPWMucmVsbmFtZXNwYWNlKQor TEVGVCBPVVRFUiBKT0lOCisgICAgcGdfZGVzY3JpcHRpb24gZGVzIE9OIChk ZXMub2Jqb2lkPWMub2lkIEFORCBkZXMuY2xhc3NvaWQ9J3BnX2NsYXNzJzo6 cmVnY2xhc3MpCitXSEVSRQorICAgIGMucmVsbmFtZXNwYWNlID0ge3tzY2lk fX06Om9pZAorT1JERVIgQlkgYy5yZWxuYW1lOwpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25f dGFibGVzL3NxbC85LjVfcGx1cy9wcm9wZXJ0aWVzLnNxbCBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxl cy9zcWwvOS41X3BsdXMvcHJvcGVydGllcy5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYjgyNAotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9m b3JlaWduX3RhYmxlcy9zcWwvOS41X3BsdXMvcHJvcGVydGllcy5zcWwKQEAg LTAsMCArMSwzMSBAQAorU0VMRUNUCisgICAgYy5vaWQsIGMucmVsbmFtZSBB UyBuYW1lLCBwZ19nZXRfdXNlcmJ5aWQocmVsb3duZXIpIEFTIG93bmVyLAor ICAgIGZ0b3B0aW9ucywgc3J2bmFtZSBBUyBmdHNydm5hbWUsIGRlc2NyaXB0 aW9uLCBuc3BuYW1lIEFTIGJhc2Vuc3AsCisgICAgKFNFTEVDVAorICAgICAg ICBhcnJheV9hZ2cocHJvdmlkZXIgfHwgJz0nIHx8IGxhYmVsKQorICAgIEZS T00KKyAgICAgICAgcGdfc2hzZWNsYWJlbCBzbDEKKyAgICBXSEVSRQorICAg ICAgICBzbDEub2Jqb2lkPWMub2lkKSBBUyBzZWNsYWJlbHMKKyAgICB7JSBp ZiBmb2lkICV9LAorICAgIChTRUxFQ1QKKyAgICAgICAgYXJyYXlfYWdnKGku aW5ocGFyZW50KSBGUk9NIHBnX2luaGVyaXRzIGkKKyAgICBXSEVSRQorICAg ICAgICBpLmluaHJlbGlkID0ge3tmb2lkfX06Om9pZCBHUk9VUCBCWSBpLmlu aHJlbGlkKSBBUyBpbmhlcml0cworICAgIHslIGVuZGlmICV9CitGUk9NCisg ICAgcGdfY2xhc3MgYworSk9JTgorICAgIHBnX2ZvcmVpZ25fdGFibGUgZnQg T04gYy5vaWQ9ZnQuZnRyZWxpZAorTEVGVCBPVVRFUiBKT0lOCisgICAgcGdf Zm9yZWlnbl9zZXJ2ZXIgZnMgT04gZnQuZnRzZXJ2ZXI9ZnMub2lkCitMRUZU IE9VVEVSIEpPSU4KKyAgICBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRlcy5v YmpvaWQ9Yy5vaWQgQU5EIGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpyZWdj bGFzcykKK0xFRlQgT1VURVIgSk9JTgorICAgIHBnX25hbWVzcGFjZSBuc3Ag T04gKG5zcC5vaWQ9Yy5yZWxuYW1lc3BhY2UpCitXSEVSRQorICAgIGMucmVs bmFtZXNwYWNlID0ge3tzY2lkfX06Om9pZAorICAgIHslIGlmIGZvaWQgJX0K KyAgICBBTkQgYy5vaWQgPSB7e2ZvaWR9fTo6b2lkCisgICAgeyUgZW5kaWYg JX0KK09SREVSIEJZIGMucmVsbmFtZTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL2ZvcmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxl cy9zcWwvOS41X3BsdXMvdXBkYXRlLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Zv cmVpZ25fdGFibGVzL3RlbXBsYXRlcy9mb3JlaWduX3RhYmxlcy9zcWwvOS41 X3BsdXMvdXBkYXRlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5jZDkxYTVlCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvZm9yZWlnbl90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fdGFibGVz L3NxbC85LjVfcGx1cy91cGRhdGUuc3FsCkBAIC0wLDAgKzEsMTM5IEBACit7 JSBpbXBvcnQgJ21hY3Jvcy9zY2hlbWFzL3NlY3VyaXR5Lm1hY3JvcycgYXMg U0VDTEFCTEUgJX0KK3slIGlmIGRhdGEgJX0KK3slIHNldCBuYW1lID0gb19k YXRhLm5hbWUgJX0KK3slIGlmIGRhdGEubmFtZSAlfXslIGlmIGRhdGEubmFt ZSAhPSBvX2RhdGEubmFtZSAlfQorQUxURVIgRk9SRUlHTiBUQUJMRSB7eyBj b25ufHF0SWRlbnQob19kYXRhLmJhc2Vuc3AsIG9fZGF0YS5uYW1lKSB9fQor ICAgIFJFTkFNRSBUTyB7eyBjb25ufHF0SWRlbnQoZGF0YS5uYW1lKSB9fTsK K3slIHNldCBuYW1lID0gZGF0YS5uYW1lICV9Cit7JSBlbmRpZiAlfXslIGVu ZGlmICV9Cit7JSBpZiBkYXRhLm93bmVyICV9CisKK0FMVEVSIEZPUkVJR04g VEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNwLCBuYW1lKSB9 fQorICAgIE9XTkVSIFRPIHt7IGRhdGEub3duZXIgfX07Cit7JSBlbmRpZiAl fQoreyUgaWYgZGF0YS5jb2x1bW5zICV9Cit7JSBmb3IgYyBpbiBkYXRhLmNv bHVtbnMuZGVsZXRlZCAlfQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNv bm58cXRJZGVudChvX2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0KKyAgICBEUk9Q IENPTFVNTiB7e2Nvbm58cXRJZGVudChjLmF0dG5hbWUpfX07Cit7JSBlbmRm b3IgLSV9Cit7JSBmb3IgYyBpbiBkYXRhLmNvbHVtbnMuYWRkZWQgJX0KK3sl IGlmIChub3QgYy5pbmhlcml0ZWRmcm9tIG9yIGMuaW5oZXJpdGVkZnJvbSA9 PScnIG9yICBjLmluaGVyaXRlZGZyb20gPT0gTm9uZSBvciAgYy5pbmhlcml0 ZWRmcm9tID09ICdOb25lJyApICV9CisKK0FMVEVSIEZPUkVJR04gVEFCTEUg e3sgY29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNwLCBuYW1lKSB9fQorICAg IEFERCBDT0xVTU4ge3tjb25ufHF0SWRlbnQoYy5hdHRuYW1lKX19IHt7IGNv bm58cXRUeXBlSWRlbnQoYy5kYXRhdHlwZSkgfX17JSBpZiBjLnR5cGxlbiAl fSh7e2MudHlwbGVufX17JSBpZiBjLnByZWNpc2lvbiAlfSwge3tjLnByZWNp c2lvbn19eyUgZW5kaWYgJX0peyUgZW5kaWYgJX17JSBpZiBjLmlzQXJyYXlU eXBlICV9W117JSBlbmRpZiAlfQoreyUgaWYgYy5hdHRub3RudWxsICV9IE5P VCBOVUxMeyUgZWxzZSAlfSBOVUxMeyUgZW5kaWYgJX0KK3slIGlmIGMudHlw ZGVmYXVsdCAlfSBERUZBVUxUIHt7Yy50eXBkZWZhdWx0fX17JSBlbmRpZiAl fQoreyUgaWYgYy5jb2xsbmFtZSAlfSBDT0xMQVRFIHt7Yy5jb2xsbmFtZX19 eyUgZW5kaWYgJX07Cit7JSBlbmRpZiAlfQoreyUgZW5kZm9yIC0lfQoreyUg Zm9yIGMgaW4gZGF0YS5jb2x1bW5zLmNoYW5nZWQgJX0KKworQUxURVIgRk9S RUlHTiBUQUJMRSB7eyBjb25ufHF0SWRlbnQob19kYXRhLmJhc2Vuc3AsIG5h bWUpIH19CisgICAgRFJPUCBDT0xVTU4ge3tjb25ufHF0SWRlbnQob19kYXRh Wydjb2x1bW5zJ11bYy5hdHRudW1dWydhdHRuYW1lJ10pfX07CisKK0FMVEVS IEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNw LCBuYW1lKSB9fQorICAgIEFERCBDT0xVTU4ge3tjb25ufHF0SWRlbnQoYy5h dHRuYW1lKX19IHt7IGNvbm58cXRUeXBlSWRlbnQoYy5kYXRhdHlwZSkgfX17 JSBpZiBjLnR5cGxlbiAlfSh7e2MudHlwbGVufX17JSBpZiBjLnByZWNpc2lv biAlfSwge3tjLnByZWNpc2lvbn19eyUgZW5kaWYgJX0peyUgZW5kaWYgJX17 JSBpZiBjLmlzQXJyYXlUeXBlICV9W117JSBlbmRpZiAlfQoreyUgaWYgYy5h dHRub3RudWxsICV9IE5PVCBOVUxMeyUgZWxzZSAlfSBOVUxMeyUgZW5kaWYg JX0KK3slIGlmIGMudHlwZGVmYXVsdCAlfSBERUZBVUxUIHt7Yy50eXBkZWZh dWx0fX17JSBlbmRpZiAlfQoreyUgaWYgYy5jb2xsbmFtZSAlfSBDT0xMQVRF IHt7Yy5jb2xsbmFtZX19eyUgZW5kaWYgJX07Cit7JSBlbmRmb3IgJX0KK3sl IGVuZGlmICV9Cit7JSBpZiBkYXRhLmluaGVyaXRzIGFuZCBkYXRhLmluaGVy aXRzfGxlbmd0aCA+IDAlfQoreyUgaWYgb19kYXRhLmluaGVyaXRzID09IE5v bmUgb3Igb19kYXRhLmluaGVyaXRzID09ICdOb25lJyAlfQoreyUgc2V0IGlu aGVyaXRzID0gJycgJX0KK3slIGVsc2UgJX0KK3slIHNldCBpbmhlcml0cyA9 IG9fZGF0YS5pbmhlcml0cyAlfQoreyUgZW5kaWYgJX0KK3slIGZvciBpIGlu IGRhdGEuaW5oZXJpdHMgJX0KK3slIGlmIGkgbm90IGluIGluaGVyaXRzICV9 eyUgaWYgaSAlfQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJ ZGVudChvX2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0gSU5IRVJJVCB7e2l9fTsK K3slIGVuZGlmICV9Cit7JSBlbmRpZiAlfQoreyUgZW5kZm9yICV9Cit7JSBl bmRpZiAlfQoreyUgaWYgb19kYXRhLmluaGVyaXRzIGFuZCAnaW5oZXJpdHMn IGluIGRhdGEgJX0KK3slIGlmIGRhdGEuaW5oZXJpdHMgPT0gTm9uZSBvciBk YXRhLmluaGVyaXRzID09ICdOb25lJyAlfQoreyUgc2V0IGluaGVyaXRzID0g JycgJX0KK3slIGVsc2UgJX0KK3slIHNldCBpbmhlcml0cyA9IGRhdGEuaW5o ZXJpdHMgJX0KK3slIGVuZGlmICV9Cit7JSBmb3IgaSBpbiBvX2RhdGEuaW5o ZXJpdHMgJX17JSBpZiBpIG5vdCBpbiBpbmhlcml0cyAlfXslIGlmIGkgJX0K KworQUxURVIgRk9SRUlHTiBUQUJMRSB7eyBjb25ufHF0SWRlbnQob19kYXRh LmJhc2Vuc3AsIG5hbWUpIH19IE5PIElOSEVSSVQge3tpfX07eyUgZW5kaWYg JX0KK3slIGVuZGlmICV9Cit7JSBlbmRmb3IgJX0KK3slIGVuZGlmICV9Cit7 JSBpZiBkYXRhLmNvbnN0cmFpbnRzICV9Cit7JSBmb3IgYyBpbiBkYXRhLmNv bnN0cmFpbnRzLmRlbGV0ZWQgJX0KKworQUxURVIgRk9SRUlHTiBUQUJMRSB7 eyBjb25ufHF0SWRlbnQob19kYXRhLmJhc2Vuc3AsIG5hbWUpIH19CisgICAg RFJPUCBDT05TVFJBSU5UIHt7Y29ubnxxdElkZW50KGMuY29ubmFtZSl9fTsK K3slIGVuZGZvciAtJX0KK3slIGZvciBjIGluIGRhdGEuY29uc3RyYWludHMu YWRkZWQgJX0KKworQUxURVIgRk9SRUlHTiBUQUJMRSB7eyBjb25ufHF0SWRl bnQob19kYXRhLmJhc2Vuc3AsIG5hbWUpIH19CisgICAgQUREIENPTlNUUkFJ TlQge3sgY29ubnxxdElkZW50KGMuY29ubmFtZSkgfX0gQ0hFQ0sgKHt7IGMu Y29uc3JjIH19KXslIGlmIG5vdCBjLmNvbnZhbGlkYXRlZCAlfSBOT1QgVkFM SUR7JSBlbmRpZiAlfXslIGlmIGMuY29ubm9pbmhlcml0ICV9IE5PIElOSEVS SVR7JSBlbmRpZiAlfTsKK3slIGVuZGZvciAlfQoreyUgZm9yIGMgaW4gZGF0 YS5jb25zdHJhaW50cy5jaGFuZ2VkICV9Cit7JSBpZiBjLmNvbnZhbGlkYXRl ZCAlfQorCitBTFRFUiBGT1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChv X2RhdGEuYmFzZW5zcCwgbmFtZSkgfX0KKyAgICBWQUxJREFURSBDT05TVFJB SU5UIHt7IGNvbm58cXRJZGVudChjLmNvbm5hbWUpIH19OworeyUgZW5kaWYg JX0KK3slIGVuZGZvciAlfQoreyUgZW5kaWYgJX0KK3slIGlmIGRhdGEuZnRv cHRpb25zICV9Cit7JSBmb3IgbyBpbiBkYXRhLmZ0b3B0aW9ucy5kZWxldGVk ICV9Cit7JSBpZiBvLm9wdGlvbiBhbmQgby52YWx1ZSAlfQorCitBTFRFUiBG T1JFSUdOIFRBQkxFIHt7IGNvbm58cXRJZGVudChvX2RhdGEuYmFzZW5zcCwg bmFtZSkgfX0KKyAgICBPUFRJT05TICggRFJPUCB7e28ub3B0aW9ufX0pOwor eyUgZW5kaWYgJX0KK3slIGVuZGZvciAlfQoreyUgZm9yIG8gaW4gZGF0YS5m dG9wdGlvbnMuYWRkZWQgJX0KK3slIGlmIG8ub3B0aW9uIGFuZCBvLnZhbHVl ICV9CisKK0FMVEVSIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KG9f ZGF0YS5iYXNlbnNwLCBuYW1lKSB9fQorICAgIE9QVElPTlMgKEFERCB7e28u b3B0aW9ufX0ge3tvLnZhbHVlfHF0TGl0ZXJhbH19KTsKK3slIGVuZGlmICV9 Cit7JSBlbmRmb3IgJX0KK3slIGZvciBvIGluIGRhdGEuZnRvcHRpb25zLmNo YW5nZWQgJX0KK3slIGlmIG8ub3B0aW9uIGFuZCBvLnZhbHVlICV9CisKK0FM VEVSIEZPUkVJR04gVEFCTEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5iYXNl bnNwLCBuYW1lKSB9fQorICAgIE9QVElPTlMgKFNFVCB7e28ub3B0aW9ufX0g e3tvLnZhbHVlfHF0TGl0ZXJhbH19KTsKK3slIGVuZGlmICV9Cit7JSBlbmRm b3IgJX0KK3slIGVuZGlmIC0lfQoreyUgc2V0IHNlY2xhYmVscyA9IGRhdGEu c2VjbGFiZWxzICV9Cit7JSBpZiAnZGVsZXRlZCcgaW4gc2VjbGFiZWxzIGFu ZCBzZWNsYWJlbHMuZGVsZXRlZHxsZW5ndGggPiAwICV9Cit7JSBmb3IgciBp biBzZWNsYWJlbHMuZGVsZXRlZCAlfQorCit7eyBTRUNMQUJMRS5VTlNFVChj b25uLCAnRk9SRUlHTiBUQUJMRScsIG5hbWUsIHIucHJvdmlkZXIsIG9fZGF0 YS5iYXNlbnNwKSB9fQoreyUgZW5kZm9yICV9Cit7JSBlbmRpZiAlfQoreyUg aWYgJ2FkZGVkJyBpbiBzZWNsYWJlbHMgYW5kIHNlY2xhYmVscy5hZGRlZHxs ZW5ndGggPiAwICV9Cit7JSBmb3IgciBpbiBzZWNsYWJlbHMuYWRkZWQgJX0K Kwore3sgU0VDTEFCTEUuU0VUKGNvbm4sICdGT1JFSUdOIFRBQkxFJywgbmFt ZSwgci5wcm92aWRlciwgci5zZWN1cml0eV9sYWJlbCwgb19kYXRhLmJhc2Vu c3ApIH19Cit7JSBlbmRmb3IgJX0KK3slIGVuZGlmICV9Cit7JSBpZiAnY2hh bmdlZCcgaW4gc2VjbGFiZWxzIGFuZCBzZWNsYWJlbHMuY2hhbmdlZHxsZW5n dGggPiAwICV9Cit7JSBmb3IgciBpbiBzZWNsYWJlbHMuY2hhbmdlZCAlfQor Cit7eyBTRUNMQUJMRS5TRVQoY29ubiwgJ0ZPUkVJR04gVEFCTEUnLCBuYW1l LCByLnByb3ZpZGVyLCByLnNlY3VyaXR5X2xhYmVsLCBvX2RhdGEuYmFzZW5z cCkgfX0KK3slIGVuZGZvciAlfQoreyUgZW5kaWYgLSV9Cit7JSBpZiBkYXRh LmRlc2NyaXB0aW9uICV9CisKK0NPTU1FTlQgT04gRk9SRUlHTiBUQUJMRSB7 eyBjb25ufHF0SWRlbnQob19kYXRhLmJhc2Vuc3AsIG5hbWUpIH19CitJUyB7 eyBkYXRhLmRlc2NyaXB0aW9ufHF0TGl0ZXJhbCB9fTsKK3slIGVuZGlmIC0l fQoreyUgaWYgZGF0YS5iYXNlbnNwICV9CisKK0FMVEVSIEZPUkVJR04gVEFC TEUge3sgY29ubnxxdElkZW50KG9fZGF0YS5iYXNlbnNwLCBuYW1lKSB9fQor ICAgIFNFVCBTQ0hFTUEge3sgY29ubnxxdElkZW50KGRhdGEuYmFzZW5zcCkg fX07Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0K --001a1141108c58ea18053267d7f6 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 --001a1141108c58ea18053267d7f6--