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 1fUtzB-0003RG-Jt for pgadmin-hackers@arkaria.postgresql.org; Mon, 18 Jun 2018 13:14:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fUtz9-0000sF-Dc for pgadmin-hackers@arkaria.postgresql.org; Mon, 18 Jun 2018 13:14:19 +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.89) (envelope-from ) id 1fUtz9-0000s5-32 for pgadmin-hackers@lists.postgresql.org; Mon, 18 Jun 2018 13:14:19 +0000 Received: from mail-lf0-x233.google.com ([2a00:1450:4010:c07::233]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1fUtz4-0006Yh-6U for pgadmin-hackers@postgresql.org; Mon, 18 Jun 2018 13:14:18 +0000 Received: by mail-lf0-x233.google.com with SMTP id x13-v6so9140031lff.10 for ; Mon, 18 Jun 2018 06:14:13 -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=an3E2Z9NbnvWifp7guDuIBGQpT6SSycBNo3ec++vMlA=; b=x5YS2izrbKaRT6wBrTNJohpxtulT0LKHY44ha1+Qa7oic6dC53C166bgn3AGQEjqS0 bmTivefMWAPJAfRzrOA0PeakazteP1zENkblSa+0Co5DSeMjg+9X8ndTX2ic1QE18OYz 5TdKC4wjY593jZu2r1bHgx4SeFtmYHbw4HQUnJaZWeyN48CaKgV9NYuK/JlscWaNTYF1 KAwYGzVgiadYzG3wC7XYKM3sETRmb/dNQPttw0jvftoY6vJkRC7TVwwTXyC+z0hOryH/ u3AYm3Ije28UdzkZIQiIMQ/jiOknpl7pKAXzxK2YLhymKCzV8CLyk56clQAgpyn2Jhcd 6Sbg== 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=an3E2Z9NbnvWifp7guDuIBGQpT6SSycBNo3ec++vMlA=; b=qGLO9Ts1RG79fd3ftTtaae3MDaV2Nw03J0FakzXyxmtCEa8iMZvMM98t9JbU0JmnsL Ul5vkgvqfN8g+jaG6GltCRJJEWeTxX1F04leZGBHjnvyrmaEFO12AR0LJkSu49rqUWaK G1uy6TAOwjNho+7MN0CJtjB7GMclGxaqM4oAQWC6SOl3sAm7clwvPTbcTyPf1HKV8dqr bd9pC30Bep7prkEBgZx6raoYsC2SjPN3rIdoxn1v7+Q26KVIJRM+DHS9gTQq/iIuXiyc qPqm0nRLzBj2bNai0uEvLqv1Yiyk9NxAAl8LluQ3lz6rKYblFjkKjzJIgG6YqS+U6faL S+kw== X-Gm-Message-State: APt69E1N/cRr+78BbjraTX6PIDf4Rr2yuDhkFq9ko9Tk+VrNzYp2bArk WwUx+hAEKuENLJQlf/9mn+tUcIcK2bvwBWRmbU9y/Q== X-Google-Smtp-Source: ADUXVKJPLOf/8cQHTowsjqcBBYlag6+AlxK8d/ofLWrwxoLlnAmlRiXD19Kj9/6dn1bJ5aDOyZ7jDY64nFe3GMvEJBo= X-Received: by 2002:a2e:4811:: with SMTP id v17-v6mr7854842lja.39.1529327652284; Mon, 18 Jun 2018 06:14:12 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a2e:7a02:0:0:0:0:0 with HTTP; Mon, 18 Jun 2018 06:14:11 -0700 (PDT) In-Reply-To: References: From: Aditya Toshniwal Date: Mon, 18 Jun 2018 18:44:11 +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="00000000000075ddb1056eea5767" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000075ddb1056eea5767 Content-Type: multipart/alternative; boundary="00000000000075ddad056eea5765" --00000000000075ddad056eea5765 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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. 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 both >> SQL_ASCII/MULE_INTERNAL and SQLASCII/MULEINTERNAL), however it doesn't s= eem >> to be enough as I'm getting the following error when trying to download = CSV >> from the query tool. Can we ensure that conn.encoding contains an un-mun= ged >> value at all times, or is that coming from psycopg2? >> > =E2=80=8BThat is done by pyscopg2 and conn.encoding is a psycopg2 connect= ion > 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_asci= i.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/w= erkzeug/serving.py", >> line 270, in run_wsgi >> execute(self.server.app) >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/w= erkzeug/serving.py", >> line 260, in execute >> for data in application_iter: >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/w= erkzeug/wsgi.py", >> line 870, in __next__ >> return self._next() >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/w= erkzeug/wrappers.py", >> line 82, in _iter_encoded >> for item in iterable: >> File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/conn= ection.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 de= code 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 t= he > original code without changes and it fails there too. I will fix this and > 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" > --=20 Thanks and Regards, Aditya Toshniwal Software Engineer | EnterpriseDB Software Solutions | Pune "Don't Complain about Heat, Plant a tree" --00000000000075ddad056eea5765 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Attached is the updated patch which includes t= he fix for Download CSV fail in SQL_ASCII database, which is RM3250=C2=A0
This should fix= RM3289 and RM3250. As they interrelated, sending the combined patch.
=
Kindl= y review.

On Fri, Jun 15, 2018 at 2:33 PM, Aditya Toshniwal <= ;adi= tya.toshniwal@enterprisedb.com> wrote:
Hi Dave,

On Fri, Jun 15, 2018 at 2:08 PM, Da= ve Page <dpage@pgadmin.org> 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 y= ou've accounted for that to some degree in connection.py (you 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 do= wnload CSV from the query tool. Can we ensure that conn.encoding contains a= n 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<= /div>=C2=A0

2018-06-15 09:32:28,799: INFO werkzeug: 127.0.0.1 - - [15/Jun/2018 09:32:28] "GET /sqleditor/qu= ery_tool/download/2732923?query=3DSELECT%20*%20FROM%20public.sql_= ascii%0AORDER%20BY%20id%20ASC%20&filename=3Dsql_ascii.csv HTT= P/1.1" 500 -
2018-06-15 09:32:28,801: ERROR werkzeug: = Error on request:
=
Traceback (most recent call last):
=C2=A0 File "= /Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/we= rkzeug/serving.py", line 270, in run_wsgi
=C2=A0 =C2=A0 exec= ute(self.server.app)
=C2=A0 File "/Users/dpage/.virtualenvs/= pgadmin4/lib/python2.7/site-packages/werkzeug/serving.py", l= ine 260, in execute
=C2=A0 =C2=A0 for data in application_iter:
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyth= on2.7/site-packages/werkzeug/wsgi.py", line 870, in __next__
=C2=A0 =C2=A0 return self._next()
=C2=A0 File "/Users/= dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/= wrappers.py", line 82, in _iter_encoded
=C2=A0 =C2=A0 for it= em in iterable:
=C2=A0 File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/connection.py", line 752, in ge= n
=C2=A0 =C2=A0 column_name =3D column_name.decode(conn_encoding)
LookupError: unknown encoding: SQLASCII
=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.connection.encoding
column= _name =3D column_name.decode(conn_encoding)=E2=80=8B
=C2=A0
=

--
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 |=C2=A0EnterpriseDB So= ftware Solutions |=C2=A0Pune
"Don't Complain about Heat, = Plant a tree"



--
Thanks and Regards,
Aditya Toshniwal
Software Engineer |=C2=A0EnterpriseDB Software Sol= utions |=C2=A0Pune
"Don't Complain about Heat, Plant a tr= ee"
--00000000000075ddad056eea5765-- --00000000000075ddb1056eea5767 Content-Type: application/octet-stream; name="RM3289_3250.patch" Content-Disposition: attachment; filename="RM3289_3250.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jika70630 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 bmVjdGlvbi5weQppbmRleCBjZmQxNjFhMC4uOTcxYTI0YWUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk bWluL3V0aWxzL2RyaXZlci9wc3ljb3BnMi9jb25uZWN0aW9uLnB5CisrKyBiL3dlYi9wZ2FkbWlu L3V0aWxzL2RyaXZlci9wc3ljb3BnMi9jb25uZWN0aW9uLnB5CkBAIC0zMyw3ICszMyw3IEBAIGZy b20gcGdhZG1pbi51dGlscyBpbXBvcnQgZ2V0X2NvbXBsZXRlX2ZpbGVfcGF0aAogZnJvbSAuLmFi c3RyYWN0IGltcG9ydCBCYXNlRHJpdmVyLCBCYXNlQ29ubmVjdGlvbgogZnJvbSAuY3Vyc29yIGlt cG9ydCBEaWN0Q3Vyc29yCiBmcm9tIC50eXBlY2FzdCBpbXBvcnQgcmVnaXN0ZXJfZ2xvYmFsX3R5 cGVjYXN0ZXJzLCBcCi0gICAgcmVnaXN0ZXJfc3RyaW5nX3R5cGVjYXN0ZXJzLCByZWdpc3Rlcl9i aW5hcnlfdHlwZWNhc3RlcnMsIFwKKyAgICByZWdpc3Rlcl9iaW5hcnlfdHlwZWNhc3RlcnMsIFwK ICAgICByZWdpc3Rlcl9hcnJheV90b19zdHJpbmdfdHlwZWNhc3RlcnMsIEFMTF9KU09OX1RZUEVT CiAKIApAQCAtMzg3LDggKzM4Nyw2IEBAIGNsYXNzIENvbm5lY3Rpb24oQmFzZUNvbm5lY3Rpb24p OgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmNvbm4uYXV0b2NvbW1p dCA9IFRydWUKIAotICAgICAgICByZWdpc3Rlcl9zdHJpbmdfdHlwZWNhc3RlcnMoc2VsZi5jb25u KQotCiAgICAgICAgIGlmIHNlbGYuYXJyYXlfdG9fc3RyaW5nOgogICAgICAgICAgICAgcmVnaXN0 ZXJfYXJyYXlfdG9fc3RyaW5nX3R5cGVjYXN0ZXJzKHNlbGYuY29ubikKIApAQCAtMzk3LDExICsz OTUsMjIgQEAgY2xhc3MgQ29ubmVjdGlvbihCYXNlQ29ubmVjdGlvbik6CiAgICAgICAgIGlmIHNl bGYudXNlX2JpbmFyeV9wbGFjZWhvbGRlcjoKICAgICAgICAgICAgIHJlZ2lzdGVyX2JpbmFyeV90 eXBlY2FzdGVycyhzZWxmLmNvbm4pCiAKLSAgICAgICAgc3RhdHVzID0gX2V4ZWN1dGUoY3VyLCAi U0VUIERhdGVTdHlsZT1JU087IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVQg Y2xpZW50X21pbl9tZXNzYWdlcz1ub3RpY2U7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJTRVQgYnl0ZWFfb3V0cHV0PWVzY2FwZTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlNFVCBjbGllbnRfZW5jb2Rpbmc9J1VOSUNPREUnOyIpCi0KKyAgICAgICAgaWYgc2Vs Zi5jb25uLmVuY29kaW5nIG5vdCBpbiAoJ1NRTF9BU0NJSScsICdTUUxBU0NJSScsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNVUxFX0lOVEVSTkFMJywgJ01VTEVJTlRF Uk5BTCcpOgorICAgICAgICAgICAgc3RhdHVzID0gX2V4ZWN1dGUoY3VyLCAiU0VUIERhdGVTdHls ZT1JU087IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM9bm90aWNlOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlNFVCBieXRlYV9vdXRwdXQ9ZXNjYXBlOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlNFVCBjbGllbnRfZW5jb2Rpbmc9J1VOSUNPREUnOyIpCisgICAgICAgICAgICBzZWxm LnB5dGhvbl9lbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgIGVuY29kaW5nc1tzZWxmLmNv bm4uZW5jb2RpbmddID0gc2VsZi5weXRob25fZW5jb2RpbmcKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHN0YXR1cyA9IF9leGVjdXRlKGN1ciwgIlNFVCBEYXRlU3R5bGU9SVNPOyIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFVCBjbGllbnRfbWluX21lc3NhZ2VzPW5v dGljZTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVQgYnl0ZWFfb3V0 cHV0PWVzY2FwZTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVQgY2xp ZW50X2VuY29kaW5nPSd7MH0nOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3Jt YXQoc2VsZi5jb25uLmVuY29kaW5nKSkKKyAgICAgICAgICAgIHNlbGYucHl0aG9uX2VuY29kaW5n ID0gJ3Jhd191bmljb2RlX2VzY2FwZScKKyAgICAgICAgICAgIGVuY29kaW5nc1tzZWxmLmNvbm4u ZW5jb2RpbmddID0gc2VsZi5weXRob25fZW5jb2RpbmcKICAgICAgICAgaWYgc3RhdHVzIGlzIG5v dCBOb25lOgogICAgICAgICAgICAgc2VsZi5jb25uLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYu Y29ubiA9IE5vbmUKQEAgLTczNCw3ICs3NDMsNyBAQCBXSEVSRQogCiAgICAgICAgICAgICBoZWFk ZXIgPSBbXQogICAgICAgICAgICAganNvbl9jb2x1bW5zID0gW10KLSAgICAgICAgICAgIGNvbm5f ZW5jb2RpbmcgPSBjdXIuY29ubmVjdGlvbi5lbmNvZGluZworICAgICAgICAgICAgY29ubl9lbmNv ZGluZyA9IGVuY29kaW5nc1tjdXIuY29ubmVjdGlvbi5lbmNvZGluZ10KIAogICAgICAgICAgICAg Zm9yIGMgaW4gY3VyLm9yZGVyZWRfZGVzY3JpcHRpb24oKToKICAgICAgICAgICAgICAgICAjIFRo aXMgaXMgdG8gaGFuZGxlIHRoZSBjYXNlIGluIHdoaWNoIGNvbHVtbiBuYW1lIGlzIG5vbi1hc2Np aQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL3R5cGVjYXN0 LnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL3R5cGVjYXN0LnB5CmluZGV4 IGYxMzY2MDQ5Li5hOGY2YzM4NSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVy L3BzeWNvcGcyL3R5cGVjYXN0LnB5CisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9wc3lj b3BnMi90eXBlY2FzdC5weQpAQCAtMTYzLDQ5ICsxNjMsNiBAQCBkZWYgcmVnaXN0ZXJfZ2xvYmFs X3R5cGVjYXN0ZXJzKCk6CiAgICAgcHN5Y29wZzIuZXh0ZW5zaW9ucy5yZWdpc3Rlcl90eXBlKHBn X2FycmF5X3R5cGVzX3RvX2FycmF5X29mX3N0cmluZ190eXBlKQogCiAKLWRlZiByZWdpc3Rlcl9z dHJpbmdfdHlwZWNhc3RlcnMoY29ubmVjdGlvbik6Ci0gICAgaWYgY29ubmVjdGlvbi5lbmNvZGlu ZyAhPSAnVVRGOCc6Ci0gICAgICAgICMgSW4gcHl0aG9uMyB3aGVuIGRhdGFiYXNlIGVuY29kaW5n IGlzIG90aGVyIHRoYW4gdXRmLTggYW5kIGNsaWVudAotICAgICAgICAjIGVuY29kaW5nIGlzIHNl dCB0byBVTklDT0RFIHRoZW4gd2UgbmVlZCB0byBtYXAgZGF0YSBmcm9tIGRhdGFiYXNlCi0gICAg ICAgICMgZW5jb2RpbmcgdG8gdXRmLTguCi0gICAgICAgICMgVGhpcyBpcyByZXF1aXJlZCBiZWNh dXNlIHdoZW4gY2xpZW50IGVuY29kaW5nIGlzIHNldCB0byBVTklDT0RFIHRoZW4KLSAgICAgICAg IyBwc3ljb3BnIGFzc3VtZXMgZGF0YWJhc2UgZW5jb2RpbmcgdXRmLTggYW5kIG5vdCB0aGUgYWN0 dWFsIGVuY29kaW5nLgotICAgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgaXQncyBidWcgb3IgZmVh dHVyZSBpbiBwc3ljb3BnIGZvciBweXRob24zLgotICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZv ID49ICgzLCk6Ci0gICAgICAgICAgICBkZWYgcmV0dXJuX2FzX3VuaWNvZGUodmFsdWUsIGN1cnNv cik6Ci0gICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgICAgICAjIFRyZWF0IHZhbHVlIGFzIGJ5dGUgc2Vx dWVuY2Ugb2YgZGF0YWJhc2UgZW5jb2RpbmcgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICAjIGRl Y29kZSBpdCBhcyB1dGYtOCB0byBnZXQgY29ycmVjdCB1bmljb2RlIHZhbHVlLgotICAgICAgICAg ICAgICAgIHJldHVybiBieXRlcygKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGVuY29kaW5n c1tjdXJzb3IuY29ubmVjdGlvbi5lbmNvZGluZ10KLSAgICAgICAgICAgICAgICApLmRlY29kZSgn dXRmLTgnKQotCi0gICAgICAgICAgICB1bmljb2RlX3R5cGUgPSBwc3ljb3BnMi5leHRlbnNpb25z Lm5ld190eXBlKAotICAgICAgICAgICAgICAgICMgImNoYXIiLCBuYW1lLCB0ZXh0LCBjaGFyYWN0 ZXIsIGNoYXJhY3RlciB2YXJ5aW5nCi0gICAgICAgICAgICAgICAgKDE5LCAxOCwgMjUsIDEwNDIs IDEwNDMsIDApLAotICAgICAgICAgICAgICAgICdVTklDT0RFJywgcmV0dXJuX2FzX3VuaWNvZGUp Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWYgcmV0dXJuX2FzX3VuaWNvZGUodmFsdWUs IGN1cnNvcik6Ci0gICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKLSAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgICAgICAjIERlY29kZSBpdCBhcyB1dGYt OCB0byBnZXQgY29ycmVjdCB1bmljb2RlIHZhbHVlLgotICAgICAgICAgICAgICAgIHJldHVybiB2 YWx1ZS5kZWNvZGUoJ3V0Zi04JykKLQotICAgICAgICAgICAgdW5pY29kZV90eXBlID0gcHN5Y29w ZzIuZXh0ZW5zaW9ucy5uZXdfdHlwZSgKLSAgICAgICAgICAgICAgICAjICJjaGFyIiwgbmFtZSwg dGV4dCwgY2hhcmFjdGVyLCBjaGFyYWN0ZXIgdmFyeWluZwotICAgICAgICAgICAgICAgICgxOSwg MTgsIDI1LCAxMDQyLCAxMDQzLCAwKSwKLSAgICAgICAgICAgICAgICAnVU5JQ09ERScsIHJldHVy bl9hc191bmljb2RlKQotCi0gICAgICAgIHVuaWNvZGVfYXJyYXlfdHlwZSA9IHBzeWNvcGcyLmV4 dGVuc2lvbnMubmV3X2FycmF5X3R5cGUoCi0gICAgICAgICAgICAjICJjaGFyIltdLCBuYW1lW10s IHRleHRbXSwgY2hhcmFjdGVyW10sIGNoYXJhY3RlciB2YXJ5aW5nW10KLSAgICAgICAgICAgICgx MDAyLCAxMDAzLCAxMDA5LCAxMDE0LCAxMDE1LCAwCi0gICAgICAgICAgICAgKSwgJ1VOSUNPREVB UlJBWScsIHVuaWNvZGVfdHlwZSkKLQotICAgICAgICBwc3ljb3BnMi5leHRlbnNpb25zLnJlZ2lz dGVyX3R5cGUodW5pY29kZV90eXBlKQotICAgICAgICBwc3ljb3BnMi5leHRlbnNpb25zLnJlZ2lz dGVyX3R5cGUodW5pY29kZV9hcnJheV90eXBlKQotCi0KIGRlZiByZWdpc3Rlcl9iaW5hcnlfdHlw ZWNhc3RlcnMoY29ubmVjdGlvbik6CiAgICAgcHN5Y29wZzIuZXh0ZW5zaW9ucy5yZWdpc3Rlcl90 eXBlKAogICAgICAgICBwc3ljb3BnMi5leHRlbnNpb25zLm5ld190eXBlKApkaWZmIC0tZ2l0IGEv d2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3RfdXRpbHMvdGVzdF91dGlscy5weSBiL3dlYi9yZWdy ZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxzL3Rlc3RfdXRpbHMucHkKaW5kZXggM2U1MTdiNjEuLjQ2 NGEwOWUxIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9weXRob25fdGVzdF91dGlscy90ZXN0 X3V0aWxzLnB5CisrKyBiL3dlYi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxzL3Rlc3RfdXRp bHMucHkKQEAgLTExNiw3ICsxMTYsNyBAQCBkZWYgY2xlYXJfbm9kZV9pbmZvX2RpY3QoKToKICAg ICAgICAgZGVsIG5vZGVfaW5mb19kaWN0W25vZGVdWzpdCiAKIAotZGVmIGNyZWF0ZV9kYXRhYmFz ZShzZXJ2ZXIsIGRiX25hbWUpOgorZGVmIGNyZWF0ZV9kYXRhYmFzZShzZXJ2ZXIsIGRiX25hbWUs IGVuY29kaW5nPU5vbmUpOgogICAgICIiIlRoaXMgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgZGF0 YWJhc2UgYW5kIHJldHVybnMgdGhlIGRhdGFiYXNlIGlkIiIiCiAgICAgdHJ5OgogICAgICAgICBj b25uZWN0aW9uID0gZ2V0X2RiX2Nvbm5lY3Rpb24oCkBAIC0xMzAsOCArMTMwLDE0IEBAIGRlZiBj cmVhdGVfZGF0YWJhc2Uoc2VydmVyLCBkYl9uYW1lKToKICAgICAgICAgb2xkX2lzb2xhdGlvbl9s ZXZlbCA9IGNvbm5lY3Rpb24uaXNvbGF0aW9uX2xldmVsCiAgICAgICAgIGNvbm5lY3Rpb24uc2V0 X2lzb2xhdGlvbl9sZXZlbCgwKQogICAgICAgICBwZ19jdXJzb3IgPSBjb25uZWN0aW9uLmN1cnNv cigpCi0gICAgICAgIHBnX2N1cnNvci5leGVjdXRlKAotICAgICAgICAgICAgJycnQ1JFQVRFIERB VEFCQVNFICIlcyIgVEVNUExBVEUgdGVtcGxhdGUwJycnICUgZGJfbmFtZSkKKyAgICAgICAgaWYg ZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHBnX2N1cnNvci5leGVjdXRlKAorICAgICAg ICAgICAgICAgICcnJ0NSRUFURSBEQVRBQkFTRSAiJXMiIFRFTVBMQVRFIHRlbXBsYXRlMCcnJyAl IGRiX25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwZ19jdXJzb3IuZXhlY3V0ZSgK KyAgICAgICAgICAgICAgICAnJydDUkVBVEUgREFUQUJBU0UgIiVzIiBURU1QTEFURSB0ZW1wbGF0 ZTAKKyAgICAgICAgICAgICAgICBFTkNPRElORz0nJXMnIExDX0NPTExBVEU9JyVzJyBMQ19DVFlQ RT0nJXMnICcnJyAlCisgICAgICAgICAgICAgICAgKGRiX25hbWUsIGVuY29kaW5nWzBdLCBlbmNv ZGluZ1sxXSwgZW5jb2RpbmdbMV0pKQogICAgICAgICBjb25uZWN0aW9uLnNldF9pc29sYXRpb25f bGV2ZWwob2xkX2lzb2xhdGlvbl9sZXZlbCkKICAgICAgICAgY29ubmVjdGlvbi5jb21taXQoKQog Cg== --00000000000075ddb1056eea5767--