Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fVdvQ-0003yW-2D for pgadmin-hackers@arkaria.postgresql.org; Wed, 20 Jun 2018 14:17:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fVdvO-0002Td-3i for pgadmin-hackers@arkaria.postgresql.org; Wed, 20 Jun 2018 14:17:30 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fVdvN-0002TS-Ho for pgadmin-hackers@lists.postgresql.org; Wed, 20 Jun 2018 14:17:29 +0000 Received: from mail-lf0-x22e.google.com ([2a00:1450:4010:c07::22e]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1fVdvJ-0000xk-Hk for pgadmin-hackers@postgresql.org; Wed, 20 Jun 2018 14:17:28 +0000 Received: by mail-lf0-x22e.google.com with SMTP id q11-v6so5235339lfc.7 for ; Wed, 20 Jun 2018 07:17:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=k9iGYV3kJylS3Lo3T6vhXEJToglfthLPbnfim2hqjUc=; b=PjaZn27v8Ydk7MUwaacden3TahyTk+lbjL+q/hKxCZn18f2DbopFmobsLUvBBmMopH XXxbtqEBLmr87qgWXr/+GZW+gSSYlah8oIjaZnslzokt+BUPUnwSSZBKFnabF3KmQrAz polOBjJ9CekMkBCQm68uJRtTk3btWQX2TzV25Yl0OmRjtWdxlq3arXyfIgWjTrfk3gMz PY4BJn9Sa6dOHwUkEK2mkCJZptRZk8kmYuihrd/t900Q+/Pe8Cn0tFI9/nAw6i+3HisV ObYUxILFBEE3gvdHtPw2hUlt1XCPOSTZk5E5V3+8h6VMYkEeuIv2PacDH+t//GOJBMOJ XTtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=k9iGYV3kJylS3Lo3T6vhXEJToglfthLPbnfim2hqjUc=; b=jJEos7qUo82B7Q6UXdeb4oO6zHw5gAhxrL5sZVTQG4r724uNtYcoPFoOMnH7859BZF s03f8/vKUdXEVIKtDxwkUCMFQuHgUQq0CW87MlbI5prJTPcc1BB1H39idSWRfemSuSe5 9B5ILNUKW/QwIDv9SJ8VPrHpd8v+zvFQFx7yb1T40LqmYQnlRWuk9t7k+Hf0GxcL/qu5 uEpM4sw5K+EGXq2VZibBDjVgucuyAaegfSt5il3j9DqGd/Kw4q+/ezHU8Jo+hbjalxiy 9ykJ+lD1zqGqIrhYY/OdN31MtgwY4ozj0DugBGSM+gTSnTa7D9GDT8Dp80pyYJKfVWvj 6Gag== X-Gm-Message-State: APt69E0nalg7PLYrYu0FiEWggJl4M6TV2hRNlN/T7iRSAf7uCj1Ex4ra G/Y9FZKUqzVMp8auWgQGctl3TRM5PwjW0kLMdv4pNg== X-Google-Smtp-Source: ADUXVKKqF9D4fbTSxZKTlEjAbV9l/9R3Tn2bnsutSBTGFcVPv1cKBRGCLGP/Mju9HpVLFMuqSx7M88kUfQBkyCgs594= X-Received: by 2002:a2e:4811:: with SMTP id v17-v6mr13728415lja.39.1529504243379; Wed, 20 Jun 2018 07:17:23 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a2e:7a02:0:0:0:0:0 with HTTP; Wed, 20 Jun 2018 07:17:22 -0700 (PDT) In-Reply-To: References: From: Aditya Toshniwal Date: Wed, 20 Jun 2018 19:47:22 +0530 Message-ID: Subject: Re: [pgAdmin4][RM#3289] Can't query SQL_ASCII database. To: Dave Page Cc: Joao De Almeida Pereira , pgadmin-hackers Content-Type: multipart/mixed; boundary="0000000000001c1cd6056f137576" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0000000000001c1cd6056f137576 Content-Type: multipart/alternative; boundary="0000000000001c1cd2056f137574" --0000000000001c1cd2056f137574 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Dave, Attached is the updated patch. (Playing with encodings is not at all fun :( ) On Tue, Jun 19, 2018 at 2:23 AM, Dave Page wrote: > Hi > > On Mon, Jun 18, 2018 at 2:14 PM, Aditya Toshniwal enterprisedb.com> wrote: > >> Hi Hackers, >> >> Attached is the updated patch which includes the fix for Download CSV >> fail in SQL_ASCII database, which is RM3250 >> >> This should fix RM3289 and RM3250. As they interrelated, sending the >> combined patch. >> Kindly review. >> > > This is definitely looking better - both view and save now work as > expected. However, using the test data the I posted upthread, if I try to > edit a value (in this case by adding a couple of chars to the end of the > data in row 2) I get: > It should fix the error. > > 2018-06-18 16:41:40,895: SQL pgadmin: Execute (void) for server #1 - > DB:ascii (Query-id: 3093186): > UPDATE public.ascii SET > data =3D %(data)s::text WHERE > id =3D '2'; > 2018-06-18 16:41:41,027: INFO werkzeug: 127.0.0.1 - - [18/Jun/2018 > 16:41:41] "POST /sqleditor/save/2805058 HTTP/1.1" 500 - > 2018-06-18 16:41:41,042: ERROR werkzeug: Error on request: > Traceback (most recent call last): > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/we= rkzeug/serving.py", > line 270, in run_wsgi > execute(self.server.app) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/we= rkzeug/serving.py", > line 258, in execute > application_iter =3D app(environ, start_response) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1997, in __call__ > return self.wsgi_app(environ, start_response) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1985, in wsgi_app > response =3D self.handle_exception(e) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1540, in handle_exception > reraise(exc_type, exc_value, tb) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1982, in wsgi_app > response =3D self.full_dispatch_request() > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1614, in full_dispatch_request > rv =3D self.handle_user_exception(e) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1517, in handle_user_exception > reraise(exc_type, exc_value, tb) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1612, in full_dispatch_request > rv =3D self.dispatch_request() > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask/app.py", > line 1598, in dispatch_request > return self.view_functions[rule.endpoint](**req.view_args) > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/fl= ask_login.py", > line 792, in decorated_view > return func(*args, **kwargs) > File "/Users/dpage/git/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py= ", > line 776, in save > default_conn) > File "/Users/dpage/git/pgadmin4/web/pgadmin/tools/sqleditor/command.py"= , > line 829, in save > item['sql'], item['data']) > File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/conne= ction.py", > line 975, in execute_void > self.__internal_blocking_execute(cur, query, params) > File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/conne= ction.py", > line 629, in __internal_blocking_execute > cur.execute(query, params) > File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/curso= r.py", > line 176, in execute > return _cursor.execute(self, query, params) > UnicodeEncodeError: 'ascii' codec can't encode characters in position > 19-21: ordinal not in range(128) > > >> >> On Fri, Jun 15, 2018 at 2:33 PM, Aditya Toshniwal < >> aditya.toshniwal@enterprisedb.com> wrote: >> >>> Hi Dave, >>> >>> On Fri, Jun 15, 2018 at 2:08 PM, Dave Page wrote: >>> >>>> Hi >>>> >>>> On Thu, Jun 14, 2018 at 7:05 AM, Aditya Toshniwal < >>>> aditya.toshniwal@enterprisedb.com> wrote: >>>> >>>>> I am sorry I missed the attachment. :( >>>>> PFA. >>>>> >>>> >>>> It looks like the encoding names are getting munged somewhere. I see >>>> you've accounted for that to some degree in connection.py (you have bo= th >>>> SQL_ASCII/MULE_INTERNAL and SQLASCII/MULEINTERNAL), however it doesn't= seem >>>> to be enough as I'm getting the following error when trying to downloa= d CSV >>>> from the query tool. Can we ensure that conn.encoding contains an un-m= unged >>>> value at all times, or is that coming from psycopg2? >>>> >>> =E2=80=8BThat is done by pyscopg2 and conn.encoding is a psycopg2 conne= ction >>> property.=E2=80=8B >>> >>> >>>> >>>> 2018-06-15 09:32:28,799: INFO werkzeug: 127.0.0.1 - - [15/Jun/2018 >>>> 09:32:28] "GET /sqleditor/query_tool/download >>>> /2732923?query=3DSELECT%20*%20FROM%20public.sql_ascii%0AORDER% >>>> 20BY%20id%20ASC%20&filename=3Dsql_ascii.csv HTTP/1.1" 500 - >>>> 2018-06-15 09:32:28,801: ERROR werkzeug: Error on request: >>>> Traceback (most recent call last): >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages= /werkzeug/serving.py", >>>> line 270, in run_wsgi >>>> execute(self.server.app) >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages= /werkzeug/serving.py", >>>> line 260, in execute >>>> for data in application_iter: >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages= /werkzeug/wsgi.py", >>>> line 870, in __next__ >>>> return self._next() >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages= /werkzeug/wrappers.py", >>>> line 82, in _iter_encoded >>>> for item in iterable: >>>> File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/co= nnection.py", >>>> line 752, in gen >>>> column_name =3D column_name.decode(conn_encoding) >>>> LookupError: unknown encoding: SQLASCII >>>> >>> >>> =E2=80=8BThis is because there is code bug here. Below is code used to = decode a >>> column name. Connection encoding and python encoding are two different >>> things. Python does not know what SQLASCII is. This will work with UTF-= 8 >>> because python has decoder with same name. I tried to download CSV with= the >>> original code without changes and it fails there too. I will fix this a= nd >>> will send the updated patch. I should have checked this. >>> conn_encoding =3D cur.connection.encoding >>> column_name =3D column_name.decode(conn_encoding)=E2=80=8B >>> >>> >>>> >>>> -- >>>> Dave Page >>>> Blog: http://pgsnake.blogspot.com >>>> Twitter: @pgsnake >>>> >>>> EnterpriseDB UK: http://www.enterprisedb.com >>>> The Enterprise PostgreSQL Company >>>> >>> >>> >>> >>> -- >>> Thanks and Regards, >>> Aditya Toshniwal >>> Software Engineer | EnterpriseDB Software Solutions | Pune >>> "Don't Complain about Heat, Plant a tree" >>> >> >> >> >> -- >> Thanks and Regards, >> Aditya Toshniwal >> Software Engineer | EnterpriseDB Software Solutions | Pune >> "Don't Complain about Heat, Plant a tree" >> > > > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > --=20 Thanks and Regards, Aditya Toshniwal Software Engineer | EnterpriseDB Software Solutions | Pune "Don't Complain about Heat, Plant a tree" --0000000000001c1cd2056f137574 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Dave,

Attached is the updated patch. (Playing with enco= dings is not at all fun :( )

On Tue, Jun 19, 2018 at 2:23 AM, Dave Page <dpage@pgadmin= .org> wrote:
Hi

On Mon, Jun 18, 2018 at 2:14 PM, Aditya Toshniwal <aditya.toshniwal@enterprisedb.com> wrote:
Hi Hackers,

At= tached is the updated patch which includes the fix for Download CSV fail in= SQL_ASCII database, which is RM3250=C2=A0
This should fix RM3289 and RM3250. As they interrelate= d, sending the combined patch.
Kindly review.

Th= is is definitely looking better - both view and save now work as expected. = However, using the test data the I posted upthread, if I try to edit a valu= e (in this case by adding a couple of chars to the end of the data in row 2= ) I get:
It should fix the error.=C2=A0=C2=A0

2018-06-18 16:41:40,895: SQL= pgadmin: Execute (void) for server #1 - DB:ascii (Query-id: 3= 093186):
UPDATE public.ascii SET
data =3D %(data)s::tex= t WHERE
id =3D '2';
2018-06-18 16:41:41,027: IN= FO werkzeug: 127.0.0.1 - - [18/Jun/2018 16:41:41] "POST /= sqleditor/save/2805058 HTTP/1.1" 500 -
2018-06-18 16:41:41,0= 42: ERROR werkzeug: Error on request:
<= div>Traceback (most recent call last):
=C2=A0 File "/Users/d= page/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/s= erving.py", line 270, in run_wsgi
=C2=A0 =C2=A0 execute(self= .server.app)
=C2=A0 File "/Users/dpage/.virtualenvs/<= wbr>pgadmin4/lib/python2.7/site-packages/werkzeug/serving.py", li= ne 258, in execute
=C2=A0 =C2=A0 application_iter =3D app(environ= , start_response)
=C2=A0 File "/Users/dpage= /.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py&q= uot;, line 1997, in __call__
=C2=A0 =C2=A0 return self.wsgi_app(e= nviron, start_response)
=C2=A0 File "/Users/dpage/.virtualen= vs/pgadmin4/lib/python2.7/site-packages/flask/app.py", line = 1985, in wsgi_app
=C2=A0 =C2=A0 response =3D self.handle_exceptio= n(e)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/li= b/python2.7/site-packages/flask/app.py", line 1540, in handle_exc= eption
=C2=A0 =C2=A0 reraise(exc_type, exc_value, tb)
= =C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py", line 1982, in wsgi_app
=C2=A0= =C2=A0 response =3D self.full_dispatch_request()
=C2=A0 File &qu= ot;/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages= /flask/app.py", line 1614, in full_dispatch_request
=C2=A0 = =C2=A0 rv =3D self.handle_user_exception(e)
=C2=A0 File "/Us= ers/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask= /app.py", line 1517, in handle_user_exception
=C2=A0 =C2=A0 = reraise(exc_type, exc_value, tb)
=C2=A0 File "/Users/dpage/.= virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py&quo= t;, line 1612, in full_dispatch_request
=C2=A0 =C2=A0 rv =3D self= .dispatch_request()
=C2=A0 File "/Users/dpage/.virtualenvs/<= wbr>pgadmin4/lib/python2.7/site-packages/flask/app.py", line 1598= , in dispatch_request
=C2=A0 =C2=A0 return self.view_functions[ru= le.endpoint](**req.view_args)
=C2=A0 File "/Users/dpage= /.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask_login.py= ", line 792, in decorated_view
=C2=A0 =C2=A0 return func(*ar= gs, **kwargs)
=C2=A0 File "/Users/dpage/git/pgadmin4/= web/pgadmin/tools/sqleditor/__init__.py", line 776, in save<= /div>
=C2=A0 =C2=A0 default_conn)
=C2=A0 File "/Users/dp= age/git/pgadmin4/web/pgadmin/tools/sqleditor/command.py", li= ne 829, in save
=C2=A0 =C2=A0 item['sql'], item['data= '])
=C2=A0 File "/Users/dpage/git/pgadmin4/web/pgad= min/utils/driver/psycopg2/connection.py", line 975, in execute_vo= id
=C2=A0 =C2=A0 self.__internal_blocking_execute(cur, query= , params)
=C2=A0 File "/Users/dpage/git/pgadmin4/web/pg= admin/utils/driver/psycopg2/connection.py", line 629, in __intern= al_blocking_execute
=C2=A0 =C2=A0 cur.execute(query, params)
=C2=A0 File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/dr= iver/psycopg2/cursor.py", line 176, in execute
=C2=A0 = =C2=A0 return _cursor.execute(self, query, params)
UnicodeEncodeE= rror: 'ascii' codec can't encode characters in position 19-21: = ordinal not in range(128)
=C2=A0

On Fri, Jun 15, 2018 = at 2:33 PM, Aditya Toshniwal <aditya.toshniwal@enterprised= b.com> wrote:
H= i Dave,

On Fri, Jun 15, 2018 at 2:08 PM, Dave Page <dpage@pgadmin.org> wrote:
Hi

<= span class=3D"m_2945951049890774816gmail-m_-1986074299226162598m_-492336539= 0318353705gmail-">On Thu, Jun 14, 2018 at 7:05 AM, Aditya Toshniwal <aditya.toshniwal@enterprisedb.com> wrote:
I am so= rry I missed the attachment. :(
PFA.

<= /div>
It looks like the encoding names are getting munged somewh= ere. I see you've accounted for that to some degree in connection.py (y= ou have both SQL_ASCII/MULE_INTERNAL and SQLASCII/MULEINTERNAL), however it= doesn't seem to be enough as I'm getting the following error when = trying to download CSV from the query tool. Can we ensure that conn.encodin= g contains an un-munged value at all times, or is that coming from psycopg2= ?
=E2=80=8BThat is done by pyscopg2= and conn.encoding is a psycopg2 connection property.=E2=80=8B
=C2=A0<= /div>

2018-06-15 09:32:28,799: INFO werkzeug: 127.0.0.1 = - - [15/Jun/2018 09:32:28] "GET /sqleditor/query_tool/download/27= 32923?query=3DSELECT%20*%20FROM%20public.sql_ascii%0AORDER%20BY%2= 0id%20ASC%20&filename=3Dsql_ascii.csv HTTP/1.1" 500 -
2018-06-15 09:32:28,801: ERROR werkzeug: Error on request:<= /div>
Traceback (most recent call last):
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2= .7/site-packages/werkzeug/serving.py", line 270, in run_wsgi
=C2=A0 =C2=A0 execute(self.server.app)
=C2=A0 File "/U= sers/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werk= zeug/serving.py", line 260, in execute
=C2=A0 =C2=A0 for dat= a in application_iter:
=C2=A0 File "/Users/dpage/.virtualenv= s/pgadmin4/lib/python2.7/site-packages/werkzeug/wsgi.py", li= ne 870, in __next__
=C2=A0 =C2=A0 return self._next()
= =C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/werkzeug/wrappers.py", line 82, in _iter_encoded
=
=C2=A0 =C2=A0 for item in iterable:
=C2=A0 File "/Users= /dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/connection.= py", line 752, in gen
=C2=A0 =C2=A0 column_name =3D column_n= ame.decode(conn_encoding)
LookupError: unknown encoding: SQL= ASCII
=C2=A0
=E2=80= =8BThis is because there is code bug here. Below is code used to decode a c= olumn name. Connection encoding and python encoding are two different thing= s. Python does not know what SQLASCII is. This will work with UTF-8 because= python has decoder with same name. I tried to download CSV with the origin= al code without changes and it fails there too. I will fix this and will se= nd the updated patch. I should have checked this.
conn_encoding =3D cur.c= onnection.encoding
column_name =3D column_name.decode(conn_encoding)= =E2=80=8B
=C2=A0

--
http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseD= B UK: http://www.= enterprisedb.com
The Enterprise PostgreSQL Company



--
Thanks and Reg= ards,
Aditya Toshniw= al
Soft= ware Engineer |=C2=A0EnterpriseDB Software Solutions |=C2=A0<= span style=3D"color:rgb(0,0,0);font-family:"trebuchet ms",sans-se= rif;font-size:small">Pune
&= quot;Don't Complain about Heat, Plant a tree"
<= /div>



--
Thanks and Regards,
Aditya Toshniwal
Software Engineer |=C2=A0EnterpriseDB= Software Solutions |=C2=A0Pune<= /div>
"Don't Complain about Hea= t, Plant a tree"



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

E= nterpriseDB UK: h= ttp://www.enterprisedb.com
The Enterprise PostgreSQL Company



--
Thanks and Regards,
Aditya Toshniwal
Software Engineer |=C2=A0EnterpriseDB Software Sol= utions |=C2=A0Pune
"Don't Complain about Heat, Plant a tr= ee"
--0000000000001c1cd2056f137574-- --0000000000001c1cd6056f137576 Content-Type: application/octet-stream; name="RM3289_3250.patch" Content-Disposition: attachment; filename="RM3289_3250.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jin7bzm80 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weSBiL3dl Yi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weQppbmRleCBhOTQ2MGRkNy4uZDhm MmNlNjcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5w eQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvX19pbml0X18ucHkKQEAgLTU3NCw3 ICs1NzQsOCBAQCBkZWYgcG9sbCh0cmFuc19pZCk6CiAgICAgICAgICAgICAnY2xpZW50X3ByaW1h cnlfa2V5JzogY2xpZW50X3ByaW1hcnlfa2V5LAogICAgICAgICAgICAgJ2hhc19vaWRzJzogaGFz X29pZHMsCiAgICAgICAgICAgICAnb2lkcyc6IG9pZHMKLSAgICAgICAgfQorICAgICAgICB9LAor ICAgICAgICBlbmNvZGluZz1jb25uLnB5dGhvbl9lbmNvZGluZwogICAgICkKIAogCkBAIC02NDYs NyArNjQ3LDggQEAgZGVmIGZldGNoKHRyYW5zX2lkLCBmZXRjaF9hbGw9Tm9uZSk6CiAgICAgICAg ICAgICAnaGFzX21vcmVfcm93cyc6IGhhc19tb3JlX3Jvd3MsCiAgICAgICAgICAgICAncm93c19m ZXRjaGVkX2Zyb20nOiByb3dzX2ZldGNoZWRfZnJvbSwKICAgICAgICAgICAgICdyb3dzX2ZldGNo ZWRfdG8nOiByb3dzX2ZldGNoZWRfdG8KLSAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBl bmNvZGluZz1jb25uLnB5dGhvbl9lbmNvZGluZwogICAgICkKIAogCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVzdHMvdGVzdF9lbmNvZGluZ19jaGFyc2V0LnB5IGIv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3Rlc3RzL3Rlc3RfZW5jb2RpbmdfY2hhcnNldC5w eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uOGE4ZDQ1ZTMKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVzdHMvdGVzdF9lbmNvZGlu Z19jaGFyc2V0LnB5CkBAIC0wLDAgKzEsMTEzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBw Z0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIw MTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxl YXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor Citmcm9tIHBnYWRtaW4udXRpbHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2VuZXJhdG9yCitmcm9t IHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnRlc3RzIGlt cG9ydCB1dGlscyBhcyBcCisgICAgZGF0YWJhc2VfdXRpbHMKK2Zyb20gcmVncmVzc2lvbiBpbXBv cnQgcGFyZW50X25vZGVfZGljdAorZnJvbSByZWdyZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxzIGlt cG9ydCB0ZXN0X3V0aWxzCitpbXBvcnQganNvbgorZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBz ZXJ2ZXJfdXRpbHMKKworCitjbGFzcyBUZXN0RW5jb2RpbmdDaGFyc2V0KEJhc2VUZXN0R2VuZXJh dG9yKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIHZhbGlkYXRlcyBjaGFyYWN0ZXIgc3VwcG9y dCBpbiBwZ0FkbWluNCBmb3IKKyAgICBkaWZmZXJlbnQgUG9zdGdyZXNEQiBlbmNvZGluZ3MKKyAg ICAiIiIKKyAgICBza2lwX29uX2RhdGFiYXNlID0gWydncGRiJ10KKyAgICBzY2VuYXJpb3MgPSBb CisgICAgICAgICgKKyAgICAgICAgICAgICdXaXRoIEVuY29kaW5nIFVURjgnLAorICAgICAgICAg ICAgZGljdCgKKyAgICAgICAgICAgICAgICBkYl9lbmNvZGluZz0nVVRGOCcsCisgICAgICAgICAg ICAgICAgbGNfY29sbGF0ZT0nQycsCisgICAgICAgICAgICAgICAgdGVzdF9zdHI9J0EnCisgICAg ICAgICAgICApKSwKKyAgICAgICAgKAorICAgICAgICAgICAgJ1dpdGggRW5jb2RpbmcgV0lOMTI1 MicsCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgIGRiX2VuY29kaW5nPSdXSU4x MjUyJywKKyAgICAgICAgICAgICAgICBsY19jb2xsYXRlPSdDJywKKyAgICAgICAgICAgICAgICB0 ZXN0X3N0cj0nQScKKyAgICAgICAgICAgICkpLAorICAgICAgICAoCisgICAgICAgICAgICAnV2l0 aCBFbmNvZGluZyBFVUNfQ04nLAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICBk Yl9lbmNvZGluZz0nRVVDX0NOJywKKyAgICAgICAgICAgICAgICBsY19jb2xsYXRlPSdDJywKKyAg ICAgICAgICAgICAgICB0ZXN0X3N0cj0nQScKKyAgICAgICAgICAgICkpLAorICAgICAgICAoCisg ICAgICAgICAgICAnV2l0aCBFbmNvZGluZyBTUUxfQVNDSUknLAorICAgICAgICAgICAgZGljdCgK KyAgICAgICAgICAgICAgICBkYl9lbmNvZGluZz0nU1FMX0FTQ0lJJywKKyAgICAgICAgICAgICAg ICBsY19jb2xsYXRlPSdDJywKKyAgICAgICAgICAgICAgICB0ZXN0X3N0cj0nXFwyNTUnCisgICAg ICAgICAgICApKSwKKyAgICBdCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYu ZW5jb2RlX2RiX25hbWUgPSAnZW5jb2RpbmdfJyArIHNlbGYuZGJfZW5jb2RpbmcKKyAgICAgICAg c2VsZi5lbmNvZGVfc2lkID0gc2VsZi5zZXJ2ZXJfaW5mb3JtYXRpb25bJ3NlcnZlcl9pZCddCisK KyAgICAgICAgc2VydmVyX2NvbiA9IHNlcnZlcl91dGlscy5jb25uZWN0X3NlcnZlcihzZWxmLCBz ZWxmLmVuY29kZV9zaWQpCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NraXBfb25fZGF0YWJh c2UnKToKKyAgICAgICAgICAgIGlmICdkYXRhJyBpbiBzZXJ2ZXJfY29uIGFuZCAndHlwZScgaW4g c2VydmVyX2NvblsnZGF0YSddOgorICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9jb25bJ2RhdGEn XVsndHlwZSddIGluIHNlbGYuc2tpcF9vbl9kYXRhYmFzZToKKyAgICAgICAgICAgICAgICAgICAg c2VsZi5za2lwVGVzdCgnY2Fubm90IHJ1biBpbjogJXMnICUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZXJ2ZXJfY29uWydkYXRhJ11bJ3R5cGUnXSkKKworICAgICAgICBzZWxm LmVuY29kZV9kaWQgPSB0ZXN0X3V0aWxzLmNyZWF0ZV9kYXRhYmFzZSgKKyAgICAgICAgICAgIHNl bGYuc2VydmVyLCBzZWxmLmVuY29kZV9kYl9uYW1lLAorICAgICAgICAgICAgKHNlbGYuZGJfZW5j b2RpbmcsIHNlbGYubGNfY29sbGF0ZSkpCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKworICAg ICAgICBkYl9jb24gPSBkYXRhYmFzZV91dGlscy5jb25uZWN0X2RhdGFiYXNlKHNlbGYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5T RVJWRVJfR1JPVVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5lbmNvZGVfc2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RlX2RpZCkKKyAgICAgICAgaWYgbm90IGRiX2Nvblsi aW5mbyJdID09ICJEYXRhYmFzZSBjb25uZWN0ZWQuIjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw dGlvbigiQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlLiIpCisKKyAgICAgICAgIyBJ bml0aWFsaXplIHF1ZXJ5IHRvb2wKKyAgICAgICAgdXJsID0gJy9kYXRhZ3JpZC9pbml0aWFsaXpl L3F1ZXJ5X3Rvb2wvezB9L3sxfS97Mn0nLmZvcm1hdCgKKyAgICAgICAgICAgIHRlc3RfdXRpbHMu U0VSVkVSX0dST1VQLCBzZWxmLmVuY29kZV9zaWQsIHNlbGYuZW5jb2RlX2RpZCkKKyAgICAgICAg cmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5wb3N0KHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh bHMocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKworICAgICAgICByZXNwb25zZV9kYXRhID0g anNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi50 cmFuc19pZCA9IHJlc3BvbnNlX2RhdGFbJ2RhdGEnXVsnZ3JpZFRyYW5zSWQnXQorCisgICAgICAg ICMgQ2hlY2sgY2hhcmFjdGVyCisgICAgICAgIHVybCA9ICIvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2wv c3RhcnQvezB9Ii5mb3JtYXQoc2VsZi50cmFuc19pZCkKKyAgICAgICAgc3FsID0gInNlbGVjdCBF J3swfSc7Ii5mb3JtYXQoc2VsZi50ZXN0X3N0cikKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRl c3Rlci5wb3N0KHVybCwgZGF0YT1qc29uLmR1bXBzKHsic3FsIjogc3FsfSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9J2h0bWwvanNvbicpCisgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAg IHVybCA9ICcvc3FsZWRpdG9yL3BvbGwvezB9Jy5mb3JtYXQoc2VsZi50cmFuc19pZCkKKyAgICAg ICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5nZXQodXJsKQorICAgICAgICBzZWxmLmFzc2VydEVx dWFscyhyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICByZXNwb25zZV9kYXRhID0g anNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5h c3NlcnRFcXVhbHMocmVzcG9uc2VfZGF0YVsnZGF0YSddWydyb3dzX2ZldGNoZWRfdG8nXSwgMSkK KworICAgICAgICBkYXRhYmFzZV91dGlscy5kaXNjb25uZWN0X2RhdGFiYXNlKHNlbGYsIHNlbGYu ZW5jb2RlX3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLmVuY29kZV9kaWQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG1haW5f Y29ubiA9IHRlc3RfdXRpbHMuZ2V0X2RiX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBzZWxmLnNl cnZlclsnZGInXSwKKyAgICAgICAgICAgIHNlbGYuc2VydmVyWyd1c2VybmFtZSddLAorICAgICAg ICAgICAgc2VsZi5zZXJ2ZXJbJ2RiX3Bhc3N3b3JkJ10sCisgICAgICAgICAgICBzZWxmLnNlcnZl clsnaG9zdCddLAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJbJ3BvcnQnXSwKKyAgICAgICAgICAg IHNlbGYuc2VydmVyWydzc2xtb2RlJ10KKyAgICAgICAgKQorICAgICAgICB0ZXN0X3V0aWxzLmRy b3BfZGF0YWJhc2UobWFpbl9jb25uLCBzZWxmLmVuY29kZV9kYl9uYW1lKQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdXRpbHMvYWpheC5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL2FqYXgucHkKaW5k ZXggOWI0NGFhM2UuLmMxOWY3NzhhIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGlscy9hamF4 LnB5CisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2FqYXgucHkKQEAgLTQ1LDcgKzQ1LDggQEAgZGVm IGdldF9ub19jYWNoZV9oZWFkZXIoKToKIAogCiBkZWYgbWFrZV9qc29uX3Jlc3BvbnNlKAotICAg ICAgICBzdWNjZXNzPTEsIGVycm9ybXNnPScnLCBpbmZvPScnLCByZXN1bHQ9Tm9uZSwgZGF0YT1O b25lLCBzdGF0dXM9MjAwCisgICAgICAgIHN1Y2Nlc3M9MSwgZXJyb3Jtc2c9JycsIGluZm89Jycs IHJlc3VsdD1Ob25lLCBkYXRhPU5vbmUsIHN0YXR1cz0yMDAsCisgICAgICAgIGVuY29kaW5nPSd1 dGYtOCcKICk6CiAgICAgIiIiQ3JlYXRlIGEgSFRNTCByZXNwb25zZSBkb2N1bWVudCBkZXNjcmli aW5nIHRoZSByZXN1bHRzIG9mIGEgcmVxdWVzdCBhbmQKICAgICBjb250YWluaW5nIHRoZSBkYXRh LiIiIgpAQCAtNTgsNyArNTksNyBAQCBkZWYgbWFrZV9qc29uX3Jlc3BvbnNlKAogCiAgICAgcmV0 dXJuIFJlc3BvbnNlKAogICAgICAgICByZXNwb25zZT1qc29uLmR1bXBzKGRvYywgY2xzPURhdGFU eXBlSlNPTkVuY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9ycz0o JywnLCAnOicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JzPSgnLCcs ICc6JyksIGVuY29kaW5nPWVuY29kaW5nKSwKICAgICAgICAgc3RhdHVzPXN0YXR1cywKICAgICAg ICAgbWltZXR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICBoZWFkZXJzPWdldF9ub19j YWNoZV9oZWFkZXIoKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNv cGcyL2Nvbm5lY3Rpb24ucHkgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29wZzIvY29u bmVjdGlvbi5weQppbmRleCBjZmQxNjFhMC4uNmY1MjJkYTYgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk bWluL3V0aWxzL2RyaXZlci9wc3ljb3BnMi9jb25uZWN0aW9uLnB5CisrKyBiL3dlYi9wZ2FkbWlu L3V0aWxzL2RyaXZlci9wc3ljb3BnMi9jb25uZWN0aW9uLnB5CkBAIC01MCw3ICs1MCw2IEBAIGVs c2U6CiAKIF8gPSBnZXR0ZXh0CiAKLQogIyBSZWdpc3RlciBnbG9iYWwgdHlwZSBjYXN0ZXIgd2hp Y2ggd2lsbCBiZSBhcHBsaWNhYmxlIHRvIGFsbCBjb25uZWN0aW9ucy4KIHJlZ2lzdGVyX2dsb2Jh bF90eXBlY2FzdGVycygpCiAKQEAgLTM5NywxMCArMzk2LDI5IEBAIGNsYXNzIENvbm5lY3Rpb24o QmFzZUNvbm5lY3Rpb24pOgogICAgICAgICBpZiBzZWxmLnVzZV9iaW5hcnlfcGxhY2Vob2xkZXI6 CiAgICAgICAgICAgICByZWdpc3Rlcl9iaW5hcnlfdHlwZWNhc3RlcnMoc2VsZi5jb25uKQogCi0g ICAgICAgIHN0YXR1cyA9IF9leGVjdXRlKGN1ciwgIlNFVCBEYXRlU3R5bGU9SVNPOyIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VUIGNsaWVudF9taW5fbWVzc2FnZXM9bm90aWNl OyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VUIGJ5dGVhX291dHB1dD1lc2Nh cGU7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVQgY2xpZW50X2VuY29kaW5n PSdVTklDT0RFJzsiKQorICAgICAgICBpZiBzZWxmLmNvbm4uZW5jb2RpbmcgaW4gKCdTUUxfQVND SUknLCAnU1FMQVNDSUknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNVUxF X0lOVEVSTkFMJywgJ01VTEVJTlRFUk5BTCcpOgorICAgICAgICAgICAgc3RhdHVzID0gX2V4ZWN1 dGUoY3VyLCAiU0VUIERhdGVTdHlsZT1JU087IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiU0VUIGNsaWVudF9taW5fbWVzc2FnZXM9bm90aWNlOyIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlNFVCBieXRlYV9vdXRwdXQ9ZXNjYXBlOyIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFVCBjbGllbnRfZW5jb2Rpbmc9J3swfSc7Igor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNvbm4uZW5jb2Rpbmcp KQorICAgICAgICAgICAgc2VsZi5weXRob25fZW5jb2RpbmcgPSAncmF3X3VuaWNvZGVfZXNjYXBl JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzID0gX2V4ZWN1dGUoY3VyLCAiU0VU IERhdGVTdHlsZT1JU087IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VU IGNsaWVudF9taW5fbWVzc2FnZXM9bm90aWNlOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlNFVCBieXRlYV9vdXRwdXQ9ZXNjYXBlOyIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlNFVCBjbGllbnRfZW5jb2Rpbmc9J1VOSUNPREUnOyIpCisgICAgICAg ICAgICBzZWxmLnB5dGhvbl9lbmNvZGluZyA9ICd1dGYtOCcKKworICAgICAgICAjIFJlcGxhY2Ug dGhlIHB5dGhvbiBlbmNvZGluZyBmb3Igb3JpZ2luYWwgbmFtZSBhbmQgcmVuYW1lZCBlbmNvZGlu Z3MKKyAgICAgICAgIyBwc3ljb3BnMiByZW1vdmVzIHRoZSB1bmRlcnNjb3JlIGluIGNvbm4uZW5j b2RpbmcKKyAgICAgICAgIyBTZXR0aW5nIHRoZSBlbmNvZGluZ3MgZGljdCB2YWx1ZSB3aWxsIG9u bHkgaGVscCBmb3Igc2VsZWN0IHN0YXRlbWVudHMKKyAgICAgICAgIyBiZWNhdXNlIGZvciBwYXJh bWV0ZXJpemVkIERNTCwgcGFyYW0gdmFsdWVzIGFyZSBjb252ZXJ0ZWQgYmFzZWQgb24KKyAgICAg ICAgIyBweXRob24gZW5jb2Rpbmcgb2YgcHlzY29wZzJzIGludGVybmFsIGVuY29kaW5ncyBkaWN0 LgorICAgICAgICBmb3Iga2V5LCB2YWwgaW4gZW5jb2RpbmdzLml0ZW1zKCk6CisgICAgICAgICAg ICBpZiBrZXkucmVwbGFjZSgnXycsICcnKSA9PSBzZWxmLmNvbm4uZW5jb2Rpbmc6CisgICAgICAg ICAgICAgICAgZW5jb2RpbmdzW2tleV0gPSBzZWxmLnB5dGhvbl9lbmNvZGluZwogCiAgICAgICAg IGlmIHN0YXR1cyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuY29ubi5jbG9zZSgpCkBA IC01OTgsNiArNjE2LDIxIEBAIFdIRVJFCiAKICAgICAgICAgcmV0dXJuIFRydWUsIGN1cgogCisg ICAgZGVmIGVzY2FwZV9wYXJhbXNfc3FsYXNjaWkoc2VsZiwgcGFyYW1zKToKKyAgICAgICAgIyBU aGUgZGF0YSBpcyB1bmVzY2FwZWQgdXNpbmcgc3RyaW5nX3R5cGVjYXN0ZXJzIHdoZW4gc2VsZWN0 ZWQKKyAgICAgICAgIyBXZSBuZWVkIHRvIGVzYWNwZSB0aGUgZGF0YSBzbyB0aGF0IGl0IGRvZXMg bm90IGZhaWwgd2hlbgorICAgICAgICAjIGl0IGlzIGVuY29kZWQgd2l0aCBweXRob24gYXNjaWkK KyAgICAgICAgIyB1bmljb2RlX2VzY2FwZSBoZWxwcyBpbiBlc2NhcGluZyBhbmQgdW5lc2NhcGlu ZworICAgICAgICBpZiBzZWxmLmNvbm4uZW5jb2RpbmcgaW4gKCdTUUxfQVNDSUknLCAnU1FMQVND SUknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNVUxFX0lOVEVSTkFMJywg J01VTEVJTlRFUk5BTCcpXAorICAgICAgICAgICBhbmQgcGFyYW1zIGlzIG5vdCBOb25lIGFuZCB0 eXBlKHBhcmFtcykgPT0gZGljdDoKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSB7CisgICAgICAg ICAgICAgICAgICAgIGtleTogdmFsLmVuY29kZSgndW5pY29kZV9lc2NhcGUnKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5kZWNvZGUoJ3Jhd191bmljb2RlX2VzY2FwZScpCisgICAgICAg ICAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBwYXJhbXMuaXRlbXMoKQorICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIHBhcmFtcworCiAgICAgZGVmIF9faW50ZXJuYWxfYmxvY2tp bmdfZXhlY3V0ZShzZWxmLCBjdXIsIHF1ZXJ5LCBwYXJhbXMpOgogICAgICAgICAiIiIKICAgICAg ICAgVGhpcyBmdW5jdGlvbiBleGVjdXRlcyB0aGUgcXVlcnkgdXNpbmcgY3Vyc29yJ3MgZXhlY3V0 ZSBmdW5jdGlvbiwKQEAgLTYxNyw2ICs2NTAsNyBAQCBXSEVSRQogICAgICAgICBlbHNlOgogICAg ICAgICAgICAgcXVlcnkgPSBxdWVyeS5lbmNvZGUoJ3V0Zi04JykKIAorICAgICAgICBwYXJhbXMg PSBzZWxmLmVzY2FwZV9wYXJhbXNfc3FsYXNjaWkocGFyYW1zKQogICAgICAgICBjdXIuZXhlY3V0 ZShxdWVyeSwgcGFyYW1zKQogICAgICAgICBpZiBzZWxmLmFzeW5jID09IDE6CiAgICAgICAgICAg ICBzZWxmLl93YWl0KGN1ci5jb25uZWN0aW9uKQpAQCAtNzM0LDcgKzc2OCw3IEBAIFdIRVJFCiAK ICAgICAgICAgICAgIGhlYWRlciA9IFtdCiAgICAgICAgICAgICBqc29uX2NvbHVtbnMgPSBbXQot ICAgICAgICAgICAgY29ubl9lbmNvZGluZyA9IGN1ci5jb25uZWN0aW9uLmVuY29kaW5nCisgICAg ICAgICAgICBjb25uX2VuY29kaW5nID0gZW5jb2RpbmdzW2N1ci5jb25uZWN0aW9uLmVuY29kaW5n XQogCiAgICAgICAgICAgICBmb3IgYyBpbiBjdXIub3JkZXJlZF9kZXNjcmlwdGlvbigpOgogICAg ICAgICAgICAgICAgICMgVGhpcyBpcyB0byBoYW5kbGUgdGhlIGNhc2UgaW4gd2hpY2ggY29sdW1u IG5hbWUgaXMgbm9uLWFzY2lpCkBAIC04ODAsNiArOTE0LDkgQEAgV0hFUkUKICAgICAgICAgZWxz ZToKICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZW5jb2RlKCd1dGYtOCcpCiAKKyAgICAgICAg IyBDb252ZXJ0IHRoZSBwYXJhbXMgYmFzZWQgb24gcHl0aG9uX2VuY29kaW5nCisgICAgICAgIHBh cmFtcyA9IHNlbGYuZXNjYXBlX3BhcmFtc19zcWxhc2NpaShwYXJhbXMpCisKICAgICAgICAgc2Vs Zi5fX2FzeW5jX2N1cnNvciA9IE5vbmUKICAgICAgICAgc3RhdHVzLCBjdXIgPSBzZWxmLl9fY3Vy c29yKCkKIApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL3R5 cGVjYXN0LnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL3R5cGVjYXN0LnB5 CmluZGV4IGYxMzY2MDQ5Li5kZTJlNjMyNSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdXRpbHMv ZHJpdmVyL3BzeWNvcGcyL3R5cGVjYXN0LnB5CisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZl ci9wc3ljb3BnMi90eXBlY2FzdC5weQpAQCAtMTY0LDQ2ICsxNjQsMzcgQEAgZGVmIHJlZ2lzdGVy X2dsb2JhbF90eXBlY2FzdGVycygpOgogCiAKIGRlZiByZWdpc3Rlcl9zdHJpbmdfdHlwZWNhc3Rl cnMoY29ubmVjdGlvbik6Ci0gICAgaWYgY29ubmVjdGlvbi5lbmNvZGluZyAhPSAnVVRGOCc6Ci0g ICAgICAgICMgSW4gcHl0aG9uMyB3aGVuIGRhdGFiYXNlIGVuY29kaW5nIGlzIG90aGVyIHRoYW4g dXRmLTggYW5kIGNsaWVudAotICAgICAgICAjIGVuY29kaW5nIGlzIHNldCB0byBVTklDT0RFIHRo ZW4gd2UgbmVlZCB0byBtYXAgZGF0YSBmcm9tIGRhdGFiYXNlCi0gICAgICAgICMgZW5jb2Rpbmcg dG8gdXRmLTguCi0gICAgICAgICMgVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIHdoZW4gY2xpZW50 IGVuY29kaW5nIGlzIHNldCB0byBVTklDT0RFIHRoZW4KLSAgICAgICAgIyBwc3ljb3BnIGFzc3Vt ZXMgZGF0YWJhc2UgZW5jb2RpbmcgdXRmLTggYW5kIG5vdCB0aGUgYWN0dWFsIGVuY29kaW5nLgot ICAgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgaXQncyBidWcgb3IgZmVhdHVyZSBpbiBwc3ljb3Bn IGZvciBweXRob24zLgorICAgICMgcmF3X3VuaWNvZGVfZXNjYXBlIHVzZWQgZm9yIFNRTCBBU0NJ SSB3aWxsIGVzY2FwZSB0aGUKKyAgICAjIGNoYXJhY3RlcnMuIEhlcmUgd2UgdW5lc2NhcGUgdGhl bSB1c2luZyB1bmljb2RlX2VzY2FwZQorICAgICMgYW5kIHNlbmQgYWhlYWQuIFdoZW4gaW5zZXJ0 IHVwZGF0ZSBpcyBkb25lLCB0aGUgY2hhcmFjdGVycworICAgICMgYXJlIGVzY2FwZWQgYWdhaW4g YW5kIHNlbnQgdG8gdGhlIERCLgorICAgIGlmIGNvbm5lY3Rpb24uZW5jb2RpbmcgaW4gKCdTUUxf QVNDSUknLCAnU1FMQVNDSUknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNVUxF X0lOVEVSTkFMJywgJ01VTEVJTlRFUk5BTCcpOgogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZv ID49ICgzLCk6Ci0gICAgICAgICAgICBkZWYgcmV0dXJuX2FzX3VuaWNvZGUodmFsdWUsIGN1cnNv cik6CisgICAgICAgICAgICBkZWYgbm9uX2FzY2lpX2VzY2FwZSh2YWx1ZSwgY3Vyc29yKToKICAg ICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICByZXR1 cm4gTm9uZQotICAgICAgICAgICAgICAgICMgVHJlYXQgdmFsdWUgYXMgYnl0ZSBzZXF1ZW5jZSBv ZiBkYXRhYmFzZSBlbmNvZGluZyBhbmQgdGhlbgotICAgICAgICAgICAgICAgICMgZGVjb2RlIGl0 IGFzIHV0Zi04IHRvIGdldCBjb3JyZWN0IHVuaWNvZGUgdmFsdWUuCiAgICAgICAgICAgICAgICAg cmV0dXJuIGJ5dGVzKAogICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZW5jb2RpbmdzW2N1cnNv ci5jb25uZWN0aW9uLmVuY29kaW5nXQotICAgICAgICAgICAgICAgICkuZGVjb2RlKCd1dGYtOCcp Ci0KLSAgICAgICAgICAgIHVuaWNvZGVfdHlwZSA9IHBzeWNvcGcyLmV4dGVuc2lvbnMubmV3X3R5 cGUoCi0gICAgICAgICAgICAgICAgIyAiY2hhciIsIG5hbWUsIHRleHQsIGNoYXJhY3RlciwgY2hh cmFjdGVyIHZhcnlpbmcKLSAgICAgICAgICAgICAgICAoMTksIDE4LCAyNSwgMTA0MiwgMTA0Mywg MCksCi0gICAgICAgICAgICAgICAgJ1VOSUNPREUnLCByZXR1cm5fYXNfdW5pY29kZSkKKyAgICAg ICAgICAgICAgICApLmRlY29kZSgndW5pY29kZV9lc2NhcGUnKQogICAgICAgICBlbHNlOgotICAg ICAgICAgICAgZGVmIHJldHVybl9hc191bmljb2RlKHZhbHVlLCBjdXJzb3IpOgorICAgICAgICAg ICAgZGVmIG5vbl9hc2NpaV9lc2NhcGUodmFsdWUsIGN1cnNvcik6CiAgICAgICAgICAgICAgICAg aWYgdmFsdWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAg ICAgICAgICAgICAjIERlY29kZSBpdCBhcyB1dGYtOCB0byBnZXQgY29ycmVjdCB1bmljb2RlIHZh bHVlLgotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoJ3V0Zi04JykKKyAgICAg ICAgICAgICAgICByZXR1cm4gdmFsdWUuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCiAKLSAgICAg ICAgICAgIHVuaWNvZGVfdHlwZSA9IHBzeWNvcGcyLmV4dGVuc2lvbnMubmV3X3R5cGUoCi0gICAg ICAgICAgICAgICAgIyAiY2hhciIsIG5hbWUsIHRleHQsIGNoYXJhY3RlciwgY2hhcmFjdGVyIHZh cnlpbmcKLSAgICAgICAgICAgICAgICAoMTksIDE4LCAyNSwgMTA0MiwgMTA0MywgMCksCi0gICAg ICAgICAgICAgICAgJ1VOSUNPREUnLCByZXR1cm5fYXNfdW5pY29kZSkKKyAgICAgICAgdW5pY29k ZV90eXBlID0gcHN5Y29wZzIuZXh0ZW5zaW9ucy5uZXdfdHlwZSgKKyAgICAgICAgICAgICMgImNo YXIiLCBuYW1lLCB0ZXh0LCBjaGFyYWN0ZXIsIGNoYXJhY3RlciB2YXJ5aW5nCisgICAgICAgICAg ICAoMTksIDE4LCAyNSwgMTA0MiwgMTA0MywgMCksCisgICAgICAgICAgICAnVU5JQ09ERScsIG5v bl9hc2NpaV9lc2NhcGUpCiAKICAgICAgICAgdW5pY29kZV9hcnJheV90eXBlID0gcHN5Y29wZzIu ZXh0ZW5zaW9ucy5uZXdfYXJyYXlfdHlwZSgKICAgICAgICAgICAgICMgImNoYXIiW10sIG5hbWVb XSwgdGV4dFtdLCBjaGFyYWN0ZXJbXSwgY2hhcmFjdGVyIHZhcnlpbmdbXQogICAgICAgICAgICAg KDEwMDIsIDEwMDMsIDEwMDksIDEwMTQsIDEwMTUsIDAKICAgICAgICAgICAgICApLCAnVU5JQ09E RUFSUkFZJywgdW5pY29kZV90eXBlKQogCi0gICAgICAgIHBzeWNvcGcyLmV4dGVuc2lvbnMucmVn aXN0ZXJfdHlwZSh1bmljb2RlX3R5cGUpCi0gICAgICAgIHBzeWNvcGcyLmV4dGVuc2lvbnMucmVn aXN0ZXJfdHlwZSh1bmljb2RlX2FycmF5X3R5cGUpCisgICAgICAgIHBzeWNvcGcyLmV4dGVuc2lv bnMucmVnaXN0ZXJfdHlwZSh1bmljb2RlX3R5cGUsIGNvbm5lY3Rpb24pCisgICAgICAgIHBzeWNv cGcyLmV4dGVuc2lvbnMucmVnaXN0ZXJfdHlwZSh1bmljb2RlX2FycmF5X3R5cGUsIGNvbm5lY3Rp b24pCiAKIAogZGVmIHJlZ2lzdGVyX2JpbmFyeV90eXBlY2FzdGVycyhjb25uZWN0aW9uKToKZGlm ZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxzL3Rlc3RfdXRpbHMucHkg Yi93ZWIvcmVncmVzc2lvbi9weXRob25fdGVzdF91dGlscy90ZXN0X3V0aWxzLnB5CmluZGV4IDNl NTE3YjYxLi40NjRhMDllMSAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3Rf dXRpbHMvdGVzdF91dGlscy5weQorKysgYi93ZWIvcmVncmVzc2lvbi9weXRob25fdGVzdF91dGls cy90ZXN0X3V0aWxzLnB5CkBAIC0xMTYsNyArMTE2LDcgQEAgZGVmIGNsZWFyX25vZGVfaW5mb19k aWN0KCk6CiAgICAgICAgIGRlbCBub2RlX2luZm9fZGljdFtub2RlXVs6XQogCiAKLWRlZiBjcmVh dGVfZGF0YWJhc2Uoc2VydmVyLCBkYl9uYW1lKToKK2RlZiBjcmVhdGVfZGF0YWJhc2Uoc2VydmVy LCBkYl9uYW1lLCBlbmNvZGluZz1Ob25lKToKICAgICAiIiJUaGlzIGZ1bmN0aW9uIHVzZWQgdG8g Y3JlYXRlIGRhdGFiYXNlIGFuZCByZXR1cm5zIHRoZSBkYXRhYmFzZSBpZCIiIgogICAgIHRyeToK ICAgICAgICAgY29ubmVjdGlvbiA9IGdldF9kYl9jb25uZWN0aW9uKApAQCAtMTMwLDggKzEzMCwx NCBAQCBkZWYgY3JlYXRlX2RhdGFiYXNlKHNlcnZlciwgZGJfbmFtZSk6CiAgICAgICAgIG9sZF9p c29sYXRpb25fbGV2ZWwgPSBjb25uZWN0aW9uLmlzb2xhdGlvbl9sZXZlbAogICAgICAgICBjb25u ZWN0aW9uLnNldF9pc29sYXRpb25fbGV2ZWwoMCkKICAgICAgICAgcGdfY3Vyc29yID0gY29ubmVj dGlvbi5jdXJzb3IoKQotICAgICAgICBwZ19jdXJzb3IuZXhlY3V0ZSgKLSAgICAgICAgICAgICcn J0NSRUFURSBEQVRBQkFTRSAiJXMiIFRFTVBMQVRFIHRlbXBsYXRlMCcnJyAlIGRiX25hbWUpCisg ICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBwZ19jdXJzb3IuZXhlY3V0 ZSgKKyAgICAgICAgICAgICAgICAnJydDUkVBVEUgREFUQUJBU0UgIiVzIiBURU1QTEFURSB0ZW1w bGF0ZTAnJycgJSBkYl9uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGdfY3Vyc29y LmV4ZWN1dGUoCisgICAgICAgICAgICAgICAgJycnQ1JFQVRFIERBVEFCQVNFICIlcyIgVEVNUExB VEUgdGVtcGxhdGUwCisgICAgICAgICAgICAgICAgRU5DT0RJTkc9JyVzJyBMQ19DT0xMQVRFPScl cycgTENfQ1RZUEU9JyVzJyAnJycgJQorICAgICAgICAgICAgICAgIChkYl9uYW1lLCBlbmNvZGlu Z1swXSwgZW5jb2RpbmdbMV0sIGVuY29kaW5nWzFdKSkKICAgICAgICAgY29ubmVjdGlvbi5zZXRf aXNvbGF0aW9uX2xldmVsKG9sZF9pc29sYXRpb25fbGV2ZWwpCiAgICAgICAgIGNvbm5lY3Rpb24u Y29tbWl0KCkKIAo= --0000000000001c1cd6056f137576--