Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bUb9M-0004fp-NU for pgadmin-hackers@arkaria.postgresql.org; Tue, 02 Aug 2016 14:58:33 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1bUb9M-0000Qy-9u for pgadmin-hackers@arkaria.postgresql.org; Tue, 02 Aug 2016 14:58:32 +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 1bUb92-0008Hg-Rk for pgadmin-hackers@postgresql.org; Tue, 02 Aug 2016 14:58:13 +0000 Received: from mail-qt0-x230.google.com ([2607:f8b0:400d:c0d::230]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1bUb8v-0004Oq-TB for pgadmin-hackers@postgresql.org; Tue, 02 Aug 2016 14:58:12 +0000 Received: by mail-qt0-x230.google.com with SMTP id u25so124596711qtb.1 for ; Tue, 02 Aug 2016 07:58:05 -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=JMcP95RqJGOIBUPkV3V5ywtq+sl+HdJgk6cp+U1P8uQ=; b=1u5+cG0Jv/3e6JTTWpVLGuMzTKkYpW6wO6Yhz28nQECBFEAQsDJbTh3o7NuHniMXvG Bggo9pVwF4/8NMOof8sitBjETWkoPtL1+JSPEA9M1+TpSW9KY6cnvhqOuJLGNioLbPPQ BzVfdJJXSAaZUZWucrJ7Nbe5o2rGPVHkjKvuoF/lNAyrq49mAZyu2xE0wd2FmaD+yvMw rsxve53UR0qu6bwYj8sZ/mqAK1M3RdGR1zCQ0zjTpiQsDFZG2Br7esdYFD/YcrYH3E3I mfjPSiH/mgTLxH4rFlyDsMh3zKcWrYP9WFnxrzA/iNSfBkYvVXmIa4CSFRtw8oMSO/58 WkDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=JMcP95RqJGOIBUPkV3V5ywtq+sl+HdJgk6cp+U1P8uQ=; b=X51pnPvNi3/6Ydi5I/wc12ECECTSu4AYnfJ4Hy2OXYe0E/RRhFdV9klvQ+X4oy9jW/ 8lmCVrDznx5l1ssA1breTE25TMd2Me6Z5960F+6+w/fla4TR8v3mvZbPj1n5vw0bAi4E T64+kXKHKjP5ctG5cUzyFfoXiEfF1if+lV28HaINJTH9bn56TDg/6Lp7QZxq7ojm/jOQ 2klBwmrEtnCBaXWG10p+pM9/acKzpAxrAm9qM0wLKcIJa3wBtmsm+iQU1aV9Ms0+HRrq XQ+TCNbpKfYTIAuTmP59OqZplrWoYfZ83DsPm32GAlsB/gaFWXXZ17qc88JTUMSfoRJp SD4g== X-Gm-Message-State: AEkoouuV6Vbyq+G23wy/mIMU1IoXmpVPBol/ih3A8YIX1saYuSSsS39Y1LeQWJXv/a2poyCiiiQFRjYUyJJz+sVf X-Received: by 10.200.37.129 with SMTP id e1mr99011019qte.96.1470149884037; Tue, 02 Aug 2016 07:58:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.41.90 with HTTP; Tue, 2 Aug 2016 07:58:02 -0700 (PDT) In-Reply-To: References: From: Navnath Gadakh Date: Tue, 2 Aug 2016 20:28:02 +0530 Message-ID: Subject: Re: pgAdmin IV : Unittest modular patch To: Dave Page Cc: pgadmin-hackers , Kanchan Mohitey Content-Type: multipart/mixed; boundary=001a11c0360a9af563053917f1c1 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 --001a11c0360a9af563053917f1c1 Content-Type: multipart/alternative; boundary=001a11c0360a9af55e053917f1bf --001a11c0360a9af55e053917f1bf Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Dave, Please find the attached patch. *This patch includes:* 1. API test cases for Roles & Tablespaces node(Completed nodes: server groups, servers, databases) You can run test-suite using following command for roles node python regression/runtests.py --pkg browser.server_groups.servers.roles for tablespaces node python regression/runtests.py --pkg browser.server_groups.servers.tablespaces for all nodes python regression/runtests.py You can also test with multiple servers. 2. Delete database code in some of the missed test files. 3. Added advanced configurations in test_advanced_config.json.in for roles & tablespaces. So, accordingly you need change the file test_advanced_config.json 4. Added one test user credentials in test_config.json.in to test the =E2=80=98valid password=E2=80=99 test case which is present in browser/tests/test_change_password.py Why test user credentials in test_config.json.in? Currently, I am getting =E2=80=98UnicodeDecodeError=E2=80=99 whe= n I run test-suite(runtests.py) with existing code. I already explained the detail about this error in RM(#1521 ). I am creating test user to test the =E2=80=98valid password=E2=80=99 test c= ase. *Notes:* 1. Code not added to encode the password which is displaying in log file while testing SMTP(Will add the code in next patch) 2. Code not added to show enhanced the test summary report(that you mentioned in the previous email). I will look into this, need to decide approach what are the code changes required in the current code. Thanks! On Mon, Aug 1, 2016 at 3:56 PM, Dave Page wrote: > Hi > > On Mon, Aug 1, 2016 at 10:54 AM, Navnath Gadakh > wrote: > > Hi Dave, > > > > On Mon, Aug 1, 2016 at 3:17 PM, Dave Page > wrote: > >> On Thu, Jul 28, 2016 at 8:12 AM, Navnath Gadakh > >> wrote: > >>> Thanks Dave! > >>> > >>> On Wed, Jul 27, 2016 at 8:12 PM, Dave Page > wrote: > >>>> Ahh, that explains it. Nice catch! It's working in both server and > >>>> desktop modes now :-). > >>>> > >>>> I've committed the patch, but can you please look at the following > issues: > >>>> > >>>> 1) When testing SMTP, the encoded password used to connect to the > >>>> server is displayed in both the logs and stdout (the "send: 'AUTH > >>>> PLAIN ....'" lines). Can you catch that, and replace it with *'s > >>>> please? Sooner or later someone will reveal a password otherwise. > > Could you please send me your's regression.log file. While > > testing SMTP I didn't see encoded password displayed on both logs and > > stdout. > > Here's an extract from stdout (with the encoded password replaced with > xxxxxx). I don't actually see the same in regression.log, but that may > be because of the log settings I'm using - we should filter the same > from there though to be safe: > > ... > This function checks reset password functionality. (TestCase for > Validating Valid_Email) ... send: 'ehlo > piranha.ox.uk.enterprisedb.com\r\n' > reply: '250-smtp.gmail.com at your service, [194.73.70.210]\r\n' > reply: '250-SIZE 35882577\r\n' > reply: '250-8BITMIME\r\n' > reply: '250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER > XOAUTH\r\n' > reply: '250-ENHANCEDSTATUSCODES\r\n' > reply: '250-PIPELINING\r\n' > reply: '250-CHUNKING\r\n' > reply: '250 SMTPUTF8\r\n' > reply: retcode (250); Msg: smtp.gmail.com at your service, [194.73.70.210] > SIZE 35882577 > 8BITMIME > AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH > ENHANCEDSTATUSCODES > PIPELINING > CHUNKING > SMTPUTF8 > send: 'AUTH PLAIN xxxxxx\r\n' > reply: '235 2.7.0 Accepted\r\n' > reply: retcode (235); Msg: 2.7.0 Accepted > send: u'mail FROM: size=3D1122\r\n' > reply: '250 2.1.0 OK v26sm44372678pfi.41 - gsmtp\r\n' > reply: retcode (250); Msg: 2.1.0 OK v26sm44372678pfi.41 - gsmtp > send: u'rcpt TO:\r\n' > reply: '250 2.1.5 OK v26sm44372678pfi.41 - gsmtp\r\n' > reply: retcode (250); Msg: 2.1.5 OK v26sm44372678pfi.41 - gsmtp > send: 'data\r\n' > reply: '354 Go ahead v26sm44372678pfi.41 - gsmtp\r\n' > reply: retcode (354); Msg: Go ahead v26sm44372678pfi.41 - gsmtp > data: (354, 'Go ahead v26sm44372678pfi.41 - gsmtp') > send: 'Content-Type: multipart/mixed; > boundary=3D"=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D5947340609837468= 105=3D=3D"\r\nMIME-Version: > 1.0\r\nSubject: Password reset instructions for pgAdmin 4\r\nFrom: > no-reply@localhost\r\nTo: dpage@pgadmin.org\r\nDate: Mon, 01 Aug 2016 > 11:18:01 +0100\r\nMessage-ID: > <20160801101758.1954.48817@piranha.ox.uk.enterprisedb.com > >\r\n\r\n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D59473406098374681= 05=3D=3D\r\nContent-Type: > multipart/alternative;\r\n > boundary=3D"=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D4573645557236154= 244=3D=3D"\r\nMIME-Version: > 1.0\r\n\r\n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D457364555723615= 4244=3D=3D\r\nContent-Type: > text/plain; charset=3D"utf-8"\r\nMIME-Version: > 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\nClick the link below to > reset your > password:\r\n\r\nhttp://localhost/reset/WyIxIiwiYTY2ODY0ZTY0NzlmMzM1NTNhY= Tc0NzUwYzEwNDc5ZmQiXQ.CoCzVg.FE0MhiGBwOgVWTcX8mB3Xgq54yw\r\n--=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D4573645557236154244=3D=3D\r\nContent-Type: > text/html; charset=3D"utf-8"\r\nMIME-Version: > 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n

href=3D" > http://localhost/reset/WyIxIiwiYTY2ODY0ZTY0NzlmMzM1NTNhYTc0NzUwYzEwNDc5Zm= QiXQ.CoCzVg.FE0MhiGBwOgVWTcX8mB3Xgq54yw > ">Click > here to reset your > > password

\r\n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D457364= 5557236154244=3D=3D--\r\n\r\n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D5947340609837468105=3D=3D--\r\n.\r\n' > reply: '250 2.0.0 OK 1470046685 v26sm44372678pfi.41 - gsmtp\r\n' > reply: retcode (250); Msg: 2.0.0 OK 1470046685 v26sm44372678pfi.41 - gsmtp > data: (250, '2.0.0 OK 1470046685 v26sm44372678pfi.41 - gsmtp') > send: 'quit\r\n' > reply: '221 2.0.0 closing connection v26sm44372678pfi.41 - gsmtp\r\n' > reply: retcode (221); Msg: 2.0.0 closing connection v26sm44372678pfi.41 - > gsmtp > ok > runTest > (pgadmin.browser.server_groups.servers.tests.test_server_put.ServerUpdate= TestCase) > ... > > These are the relevant settings I'm using: > > # Debug mode > DEBUG =3D True > > # App mode > SERVER_MODE =3D True > > # Log > CONSOLE_LOG_LEVEL =3D DEBUG > FILE_LOG_LEVEL =3D DEBUG > > # Mail server settings > MAIL_SERVER =3D 'smtp.gmail.com' > MAIL_PORT =3D 465 > MAIL_USE_SSL =3D True > MAIL_USERNAME =3D 'dave.page@enterprisedb.com' > MAIL_PASSWORD =3D 'xxxxxx' > > > >>>> > >>>> 2) Is the test count in the summary correct when you have multiple > >>>> servers? I think it might be resetting between servers. > >>> In the current code runTest() function calls only one time for > >>> single/multiple server/s that's why it's showing same count for both > >>> (single & multiple). > >>> Question: What exactly we are looking for, only count? Or we need > >>> any more logs like for adding database, it should display in which > >>> server (PG/PPAS) its adding database if this is the case we need a > >>> feasibility check. > >> > >> Right now I would like to see the summary updated so it outputs useful > >> (and correct) information - for example, it could say something like: > >> > >> =3D=3D=3D=3D=3D > >> Testing completed: > >> > >> PostgreSQL 9.4: 23 tests passed, 0 tests failed > >> EPAS 9.5: 25 tests passed, 2 tests failed (foo_test, > bar_test) > >> =3D=3D=3D=3D=3D > >> > >> where PostgreSQL 9.4 and EPAS 9.5 are the two servers configured in > >> test_config.py and foo_test and bar_test are the names of the tests > >> that failed. > > Thanks for additional info. > >> > >>>> 3) Please ensure that test databases that are created are also dropp= ed > >>>> again. I'm getting tired of deleting them manually! > >>> I already added delete databases in tearDown () function, But > >>> yeah, I found two test cases where this code missed. I will add this > >>> in the next patch. > >> > >> Thanks. > >> > >>>> > >>>> Thanks, Dave. > >>>> > >>>> On Wed, Jul 27, 2016 at 1:19 PM, Navnath Gadakh > >>>> wrote: > >>>>> Hi Dave, > >>>>> We have reproduced the issue you mentioned in the previous > >>>>> email. We need to skip the login related test cases when SERVER_MODE > =3D > >>>>> False in the web/config_local.py. > >>>>> > >>>>> Please find the revised patch for the same. > >>>>> > >>>>> Thanks! > >>>>> > >>>>> > >>>>> On Fri, Jul 22, 2016 at 9:48 PM, Dave Page < > dave.page@enterprisedb.com> wrote: > >>>>>> Hi > >>>>>> > >>>>>> On Fri, Jul 22, 2016 at 2:22 PM, Navnath Gadakh > >>>>>> wrote: > >>>>>>> Hi Dave, > >>>>>>> > >>>>>>> Please find the attached patch for pgAdmin4 unittest(Support of > API > >>>>>>> testing with different servers i.e. PG and PPAS). > >>>>>>> > >>>>>>> This patch includes- > >>>>>>> > >>>>>>> Test framework support API testing with multiple server for this > we need to > >>>>>>> modify test_config.json(for user it=E2=80=99s test_config.json.in= ) and > >>>>>>> test_advanced_config.json(for user it=E2=80=99s > test_advanced_config.json.in). > >>>>>>> Server details of PG and PPAS are included in both .in files. > >>>>>>> > >>>>>>> Removed the logic of logging in the test client on each test > scenario(As > >>>>>>> per Khushboo's comment in previous email). We need this logic in > test cases > >>>>>>> under =E2=80=98browser/tests/=E2=80=99 as for test scenarios like= change password > and > >>>>>>> invalid login test cases as test client should be logged out > first. So, as > >>>>>>> per this the code is slightly modified in =E2=80=98browser/tests/= =E2=80=99. > >>>>>> > >>>>>> OK in principle, but it doesn't seem to work: > >>>>>> > >>>>>> This function will add the server under default server group. > (Default > >>>>>> Server Node url) ... ok > >>>>>> > >>>>>> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>>>>> FAIL: runTest > (pgadmin.browser.tests.test_reset_password.ResetPasswordTestCase) > >>>>>> This function checks reset password functionality. (TestCase for > >>>>>> Validating Empty Email) > >>>>>> > ---------------------------------------------------------------------- > >>>>>> Traceback (most recent call last): > >>>>>> File > "/Users/dpage/git/pgadmin4/web/pgadmin/browser/tests/test_reset_password.= py", > >>>>>> line 44, in runTest > >>>>>> 'utf-8')) > >>>>>> AssertionError: 'Recover pgAdmin 4 Password' not found in > u' >>>>>> HTML PUBLIC "-//W3C//DTD HTML 3.2 > >>>>>> > Final//EN">\nRedirecting...\n

Redirecting...

\n

Y= ou > >>>>>> should be redirected automatically to target URL: /<= /a>. > >>>>>> If not click the link.' > >>>>>> > >>>>>> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>>>>> FAIL: runTest > (pgadmin.browser.tests.test_reset_password.ResetPasswordTestCase) > >>>>>> This function checks reset password functionality. (TestCase for > >>>>>> Validating Invalid_Email) > >>>>>> > ---------------------------------------------------------------------- > >>>>>> Traceback (most recent call last): > >>>>>> File > "/Users/dpage/git/pgadmin4/web/pgadmin/browser/tests/test_reset_password.= py", > >>>>>> line 44, in runTest > >>>>>> 'utf-8')) > >>>>>> AssertionError: 'Recover pgAdmin 4 Password' not found in > u' >>>>>> HTML PUBLIC "-//W3C//DTD HTML 3.2 > >>>>>> > Final//EN">\nRedirecting...\n

Redirecting...

\n

Y= ou > >>>>>> should be redirected automatically to target URL: /<= /a>. > >>>>>> If not click the link.' > >>>>>> > >>>>>> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>>>>> FAIL: runTest > (pgadmin.browser.tests.test_reset_password.ResetPasswordTestCase) > >>>>>> This function checks reset password functionality. (TestCase for > >>>>>> Validating Valid_Email) > >>>>>> > ---------------------------------------------------------------------- > >>>>>> Traceback (most recent call last): > >>>>>> File > "/Users/dpage/git/pgadmin4/web/pgadmin/browser/tests/test_reset_password.= py", > >>>>>> line 44, in runTest > >>>>>> 'utf-8')) > >>>>>> AssertionError: 'Recover pgAdmin 4 Password' not found in > u' >>>>>> HTML PUBLIC "-//W3C//DTD HTML 3.2 > >>>>>> > Final//EN">\nRedirecting...\n

Redirecting...

\n

Y= ou > >>>>>> should be redirected automatically to target URL: /<= /a>. > >>>>>> If not click the link.' > >>>>>> > >>>>>> > ---------------------------------------------------------------------- > >>>>>> Ran 26 tests in 30.109s > >>>>>> > >>>>>> FAILED (failures=3D3) > >>>>>> > >>>>>> It's very far from obvious what's wrong here (/reset looks just fi= ne > >>>>>> to me). How can we get more useful info out of the framework? > >>>>>> > >>>>>> -- > >>>>>> Dave Page > >>>>>> VP, Chief Architect, Tools & Installers > >>>>>> EnterpriseDB: http://www.enterprisedb.com > >>>>>> The Enterprise PostgreSQL Company > >>>>>> > >>>>>> Blog: http://pgsnake.blogspot.com > >>>>>> Twitter: @pgsnake > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> Thanks, > >>>>> Navnath Gadakh > >>>>> Software Engineer > >>>>> EnterpriseDB Corporation > >>>>> Mobile: +91 9975389878 > >>>> > >>>> > >>>> > >>>> -- > >>>> Dave Page > >>>> VP, Chief Architect, Tools & Installers > >>>> EnterpriseDB: http://www.enterprisedb.com > >>>> The Enterprise PostgreSQL Company > >>>> > >>>> Blog: http://pgsnake.blogspot.com > >>>> Twitter: @pgsnake > >>> > >>> > >>> > >>> -- > >>> Thanks, > >>> Navnath Gadakh > >>> Software Engineer > >>> EnterpriseDB Corporation > >>> Mobile: +91 9975389878 > >> > >> > >> > >> -- > >> Dave Page > >> VP, Chief Architect, Tools & Installers > >> EnterpriseDB: http://www.enterprisedb.com > >> The Enterprise PostgreSQL Company > >> > >> Blog: http://pgsnake.blogspot.com > >> Twitter: @pgsnake > > > > > > > > -- > > Thanks, > > Navnath Gadakh > > Software Engineer > > EnterpriseDB Corporation > > Mobile: +91 9975389878 > > > > -- > Dave Page > VP, Chief Architect, Tools & Installers > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > --=20 Thanks, Navnath Gadakh Software Engineer EnterpriseDB Corporation Mobile: +91 9975389878 --001a11c0360a9af55e053917f1bf Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Dave,
=C2=A0 =C2=A0 =C2=A0Please find the attached p= atch.
This patch includes:
1. API test cases for Roles & T= ablespaces node(Completed nodes: server groups, servers, databases)
=C2= =A0 =C2=A0 You can run test-suite using following command
=C2=A0 =C2=A0 = =C2=A0for roles node
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0python regression/runtests.py --p= kg browser.server_groups.servers.roles
=C2=A0 =C2=A0 =C2=A0for ta= blespaces node
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0python regression/runtests.py --pkg brows= er.server_groups.servers.tablespaces
=C2=A0 =C2=A0 =C2=A0for all = nodes
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0python regression/runtests.py
=C2=A0 = =C2=A0 =C2=A0You can also test with multiple =C2=A0servers.
2. Delete da= tabase code in some of the missed test files.
3. Added advanced configur= ations in
test_advanced_con= fig.json.in for roles & tablespaces. So, accordingly you need chang= e the file =C2=A0 =C2=A0 =C2=A0 =C2=A0test_advanced_config.json
4. Added= one test user credentials in test_c= onfig.json.in to test the =E2=80=98valid password=E2=80=99 test case wh= ich is present in browser/tests/test_change_password.py
=C2=A0 =C2=A0 Wh= y test user credentials in test_conf= ig.json.in?
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Currently, I a= m getting =E2=80=98UnicodeDecodeError=E2=80=99 when I run test-suite(runtes= ts.py) with existing code. I already explained the detail about this error = in RM(#1521). I = am creating test user to test the =E2=80=98valid password=E2=80=99 test cas= e.

Notes:
=C2=A01. Code not added to encode the password w= hich is displaying in log file while testing SMTP(Will add the code in next= patch)
=C2=A02. Code not added to show enhanced the test summary report= (that you mentioned in the previous email). I will look into this, need to = decide approach what are the code changes required in the current code. =C2=A0 =C2=A0 =C2=A0
Thanks!


On Mon, Aug 1, 2016 at 3:56 PM, = Dave Page <dave.page@enterprisedb.com> wrote:
Hi

On Mon, Aug 1, 2016 at 10:54 AM, Navnath Gadakh
<nav= nath.gadakh@enterprisedb.com> wrote:
> Hi Dave,
>
> On Mon, Aug 1, 2016 at 3:17 PM, Dave Page <dave.page@enterprisedb.com> wrote:
>> On Thu, Jul 28, 2016 at 8:12 AM, Navnath Gadakh
>> <navnath.gad= akh@enterprisedb.com> wrote:
>>> Thanks Dave!
>>>
>>> On Wed, Jul 27, 2016 at 8:12 PM, Dave Page <dave.page@enterprisedb.com> wrote:
>>>> Ahh, that explains it. Nice catch! It's working in bot= h server and
>>>> desktop modes now :-).
>>>>
>>>> I've committed the patch, but can you please look at t= he following issues:
>>>>
>>>> 1) When testing SMTP, the encoded password used to connect= to the
>>>> server is displayed in both the logs and stdout (the "= ;send: 'AUTH
>>>> PLAIN ....'" lines). Can you catch that, and repl= ace it with *'s
>>>> please? Sooner or later someone will reveal a password oth= erwise.
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Could you please send me your's r= egression.log file. While
> testing SMTP I didn't see encoded password displayed on both logs = and
> stdout.

Here's an extract from stdout (with the encoded password replace= d with
xxxxxx). I don't actually see the same in regression.log, but that may<= br> be because of the log settings I'm using - we should filter the same
from there though to be safe:

...
This function checks reset password functionality. (TestCa= se for
Validating Valid_Email) ... send: 'ehlo
piranha.ox.uk.enterprisedb.com\r\n'
reply: '250-smtp.gmail.com at your service, [194.73.70.210]\r\n'= ;
reply: '250-SIZE 35882577\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAU= TH\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-CHUNKING\r\n'
reply: '250 SMTPUTF8\r\n'
reply: retcode (250); Msg: smtp.gmail.com at your service, [194.73.70.210]<= br> SIZE 35882577
8BITMIME
AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
ENHANCEDSTATUSCODES
PIPELINING
CHUNKING
SMTPUTF8
send: 'AUTH PLAIN xxxxxx\r\n'
reply: '235 2.7.0 Accepted\r\n'
reply: retcode (235); Msg: 2.7.0 Accepted
send: u'mail FROM:<no-reply@localhost> size=3D1122\r\n'
reply: '250 2.1.0 OK v26sm44372678pfi.41 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.0 OK v26sm44372678pfi.41 - gsmtp
send: u'rcpt TO:<dpage@pgadmin.= org>\r\n'
reply: '250 2.1.5 OK v26sm44372678pfi.41 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.5 OK v26sm44372678pfi.41 - gsmtp
send: 'data\r\n'
reply: '354=C2=A0 Go ahead v26sm44372678pfi.41 - gsmtp\r\n'
reply: retcode (354); Msg: Go ahead v26sm44372678pfi.41 - gsmtp
data: (354, 'Go ahead v26sm44372678pfi.41 - gsmtp')
send: 'Content-Type: multipart/mixed;
boundary=3D"=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D5947340609837= 468105=3D=3D"\r\nMIME-Version:
1.0\r\nSubject: Password reset instructions for pgAdmin 4\r\nFrom:
no-reply@localhost\r\nTo: dpage@pgadmi= n.org\r\nDate: Mon, 01 Aug 2016
11:18:01 +0100\r\nMessage-ID:
<20160801101758.1954.48817@piranha.ox.uk.enterprisedb.com>\r\n\r= \n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D5947340609837468105=3D=3D\= r\nContent-Type:
multipart/alternative;\r\n
boundary=3D"=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D4573645557236= 154244=3D=3D"\r\nMIME-Version:
1.0\r\n\r\n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D45736455572361542= 44=3D=3D\r\nContent-Type:
text/plain; charset=3D"utf-8"\r\nMIME-Version:
1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\nClick the link below to
reset your password:\r\n\r\nhttp://localhost/reset/WyIxIiwiYTY2ODY0ZTY0Nzlm= MzM1NTNhYTc0NzUwYzEwNDc5ZmQiXQ.CoCzVg.FE0MhiGBwOgVWTcX8mB3Xgq54yw\r\n--=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D4573645557236154244=3D=3D\r\nCont= ent-Type:
text/html; charset=3D"utf-8"\r\nMIME-Version:
1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n<p><a
href=3D"http://localhost/reset/WyIxIiwiYTY2ODY0ZTY0NzlmMzM= 1NTNhYTc0NzUwYzEwNDc5ZmQiXQ.CoCzVg.FE0MhiGBwOgVWTcX8mB3Xgq54yw">= ;Click
here to reset your
password</a></p>\r\n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D4573645557236154244=3D=3D--\r\n\r\n--=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D5947340609837468105=3D=3D--\r\n.\r\n'
reply: '250 2.0.0 OK 1470046685 v26sm44372678pfi.41 - gsmtp\r\n'
reply: retcode (250); Msg: 2.0.0 OK 1470046685 v26sm44372678pfi.41 - gsmtp<= br> data: (250, '2.0.0 OK 1470046685 v26sm44372678pfi.41 - gsmtp')
send: 'quit\r\n'
reply: '221 2.0.0 closing connection v26sm44372678pfi.41 - gsmtp\r\n= 9;
reply: retcode (221); Msg: 2.0.0 closing connection v26sm44372678pfi.41 - g= smtp
ok
runTest (pgadmin.browser.server_groups.servers.tests.test_server_put.Server= UpdateTestCase)
...

These are the relevant settings I'm using:

# Debug mode
DEBUG =3D True

# App mode
SERVER_MODE =3D True

# Log
CONSOLE_LOG_LEVEL =3D DEBUG
FILE_LOG_LEVEL =3D DEBUG

# Mail server settings
MAIL_SERVER =3D 'smtp.gmail.com'
MAIL_PORT =3D 465
MAIL_USE_SSL =3D True
MAIL_USERNAME =3D 'dave.p= age@enterprisedb.com'
MAIL_PASSWORD =3D 'xxxxxx'


>>>>
>>>> 2) Is the test count in the summary correct when you have = multiple
>>>> servers? I think it might be resetting between servers.
>>>=C2=A0 =C2=A0 =C2=A0 In the current code runTest() function cal= ls only one time for
>>> single/multiple server/s that's why it's showing same = count for both
>>> (single & multiple).
>>>=C2=A0 =C2=A0 Question: What exactly we are looking for, only c= ount? Or we need
>>> any more logs like for adding database, it should display in w= hich
>>> server (PG/PPAS) its adding database if this is the case we ne= ed a
>>> feasibility check.
>>
>> Right now I would like to see the summary updated so it outputs us= eful
>> (and correct) information - for example, it could say something li= ke:
>>
>> =3D=3D=3D=3D=3D
>> Testing completed:
>>
>> PostgreSQL 9.4:=C2=A0 23 tests passed, 0 tests failed
>> EPAS 9.5:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 tests passed= , 2 tests failed (foo_test, bar_test)
>> =3D=3D=3D=3D=3D
>>
>> where PostgreSQL 9.4 and EPAS 9.5 are the two servers configured i= n
>> test_config.py and foo_test and bar_test are the names of the test= s
>> that failed.
>=C2=A0 =C2=A0 Thanks for additional info.
>>
>>>> 3) Please ensure that test databases that are created are = also dropped
>>>> again. I'm getting tired of deleting them manually!
>>>=C2=A0 =C2=A0 =C2=A0I already added delete databases in tearDow= n () function, But
>>> yeah, I found two test cases where this code missed. I will ad= d this
>>> in the next patch.
>>
>> Thanks.
>>
>>>>
>>>> Thanks, Dave.
>>>>
>>>> On Wed, Jul 27, 2016 at 1:19 PM, Navnath Gadakh
>>>> <nav= nath.gadakh@enterprisedb.com> wrote:
>>>>> Hi Dave,
>>>>>=C2=A0 =C2=A0 =C2=A0 =C2=A0We have reproduced the issue= you mentioned in the previous
>>>>> email. We need to skip the login related test cases wh= en SERVER_MODE =3D
>>>>> False in the web/config_local.py.
>>>>>
>>>>> Please find the revised patch for the same.
>>>>>
>>>>> Thanks!
>>>>>
>>>>>
>>>>> On Fri, Jul 22, 2016 at 9:48 PM, Dave Page <dave.page@enterprisedb.com> w= rote:
>>>>>> Hi
>>>>>>
>>>>>> On Fri, Jul 22, 2016 at 2:22 PM, Navnath Gadakh
>>>>>> <navnath.gadakh@enterprisedb.com> wrote:
>>>>>>> Hi Dave,
>>>>>>>
>>>>>>>=C2=A0 =C2=A0 Please find the attached patch fo= r pgAdmin4 unittest(Support of API
>>>>>>> testing with different servers i.e. PG and PPA= S).
>>>>>>>
>>>>>>> This patch includes-
>>>>>>>
>>>>>>> Test framework support API testing with multip= le server for this we need to
>>>>>>> modify test_config.json(for user it=E2=80=99s = test_config.json.in) and
>>>>>>> test_advanced_config.json(for user it=E2=80=99= s test_advanced_config.json.in).
>>>>>>> Server details of PG and=C2=A0 PPAS are includ= ed in both .in files.
>>>>>>>
>>>>>>> Removed the logic of logging in=C2=A0 the test= client on each test scenario(As
>>>>>>> per Khushboo's comment in previous email).= =C2=A0 We need this logic in test cases
>>>>>>> under =E2=80=98browser/tests/=E2=80=99 as for = test scenarios like change password and
>>>>>>> invalid login test cases as test client should= be logged out first. So, as
>>>>>>> per this the code is slightly modified in =E2= =80=98browser/tests/=E2=80=99.
>>>>>>
>>>>>> OK in principle, but it doesn't seem to work:<= br> >>>>>>
>>>>>> This function will add the server under default se= rver group. (Default
>>>>>> Server Node url) ... ok
>>>>>>
>>>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>>>>>> FAIL: runTest (pgadmin.browser.tests.test_reset_pa= ssword.ResetPasswordTestCase)
>>>>>> This function checks reset password functionality.= (TestCase for
>>>>>> Validating Empty Email)
>>>>>> --------------------------------------------------= --------------------
>>>>>> Traceback (most recent call last):
>>>>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/w= eb/pgadmin/browser/tests/test_reset_password.py",
>>>>>> line 44, in runTest
>>>>>>=C2=A0 =C2=A0 =C2=A0'utf-8'))
>>>>>> AssertionError: 'Recover pgAdmin 4 Password= 9; not found in u'<!DOCTYPE
>>>>>> HTML PUBLIC "-//W3C//DTD HTML 3.2
>>>>>> Final//EN">\n<title>Redirecting...&l= t;/title>\n<h1>Redirecting...</h1>\n<p>You
>>>>>> should be redirected automatically to target URL: = <a href=3D"/">/</a>.
>>>>>> If not click the link.'
>>>>>>
>>>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>>>>>> FAIL: runTest (pgadmin.browser.tests.test_reset_pa= ssword.ResetPasswordTestCase)
>>>>>> This function checks reset password functionality.= (TestCase for
>>>>>> Validating Invalid_Email)
>>>>>> --------------------------------------------------= --------------------
>>>>>> Traceback (most recent call last):
>>>>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/w= eb/pgadmin/browser/tests/test_reset_password.py",
>>>>>> line 44, in runTest
>>>>>>=C2=A0 =C2=A0 =C2=A0'utf-8'))
>>>>>> AssertionError: 'Recover pgAdmin 4 Password= 9; not found in u'<!DOCTYPE
>>>>>> HTML PUBLIC "-//W3C//DTD HTML 3.2
>>>>>> Final//EN">\n<title>Redirecting...&l= t;/title>\n<h1>Redirecting...</h1>\n<p>You
>>>>>> should be redirected automatically to target URL: = <a href=3D"/">/</a>.
>>>>>> If not click the link.'
>>>>>>
>>>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>>>>>> FAIL: runTest (pgadmin.browser.tests.test_reset_pa= ssword.ResetPasswordTestCase)
>>>>>> This function checks reset password functionality.= (TestCase for
>>>>>> Validating Valid_Email)
>>>>>> --------------------------------------------------= --------------------
>>>>>> Traceback (most recent call last):
>>>>>>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/w= eb/pgadmin/browser/tests/test_reset_password.py",
>>>>>> line 44, in runTest
>>>>>>=C2=A0 =C2=A0 =C2=A0'utf-8'))
>>>>>> AssertionError: 'Recover pgAdmin 4 Password= 9; not found in u'<!DOCTYPE
>>>>>> HTML PUBLIC "-//W3C//DTD HTML 3.2
>>>>>> Final//EN">\n<title>Redirecting...&l= t;/title>\n<h1>Redirecting...</h1>\n<p>You
>>>>>> should be redirected automatically to target URL: = <a href=3D"/">/</a>.
>>>>>> If not click the link.'
>>>>>>
>>>>>> --------------------------------------------------= --------------------
>>>>>> Ran 26 tests in 30.109s
>>>>>>
>>>>>> FAILED (failures=3D3)
>>>>>>
>>>>>> It's very far from obvious what's wrong he= re (/reset looks just fine
>>>>>> to me). How can we get more useful info out of the= framework?
>>>>>>
>>>>>> --
>>>>>> Dave Page
>>>>>> VP, Chief Architect, Tools & Installers
>>>>>> EnterpriseDB: http://www.enterprisedb.com
>>>>>> The Enterprise PostgreSQL Company
>>>>>>
>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>> Twitter: @pgsnake
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Thanks,
>>>>> Navnath Gadakh
>>>>> Software Engineer
>>>>> EnterpriseDB Corporation
>>>>> Mobile: +91 9975389878
>>>>
>>>>
>>>>
>>>> --
>>>> Dave Page
>>>> VP, Chief Architect, Tools & Installers
>>>> EnterpriseDB: http://www.enterprisedb.com
>>>> The Enterprise PostgreSQL Company
>>>>
>>>> Blog: http://pgsnake.blogspot.com
>>>> Twitter: @pgsnake
>>>
>>>
>>>
>>> --
>>> Thanks,
>>> Navnath Gadakh
>>> Software Engineer
>>> EnterpriseDB Corporation
>>> Mobile: +91 9975389878
>>
>>
>>
>> --
>> Dave Page
>> VP, Chief Architect, Tools & Installers
>> EnterpriseDB: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>
>
>
> --
> Thanks,
> Navnath Gadakh
> Software Engineer
> EnterpriseDB Corporation
> Mobile: +91 9975389878



--
Dave Page
VP, Chief Architect, Tools & Installers
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

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



--
=
=
Thanks,
Navnath= =C2=A0Gadakh
Software Engineer
EnterpriseDB Corporation
<= /font>
Mobile: +91 9975389878=C2=A0

<= /font>

=
--001a11c0360a9af55e053917f1bf-- --001a11c0360a9af563053917f1c1 Content-Type: application/octet-stream; name="pgadmin_unittest_roles_tablespaces.patch" Content-Disposition: attachment; filename="pgadmin_unittest_roles_tablespaces.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_irdl8mmx0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy90ZXN0cy90ZXN0X2RiX2FkZC5weSBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy90ZXN0cy90ZXN0X2RiX2FkZC5weQppbmRleCA4NWRjYzZjLi4yMmNk N2NlIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvdGVzdHMvdGVzdF9kYl9hZGQucHkK KysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3Rlc3RzL3Rlc3RfZGJfYWRkLnB5CkBAIC0zOCw3ICsz OCw3IEBAIGNsYXNzIERhdGFiYXNlQWRkVGVzdENhc2UoQmFzZVRlc3RHZW5l cmF0b3IpOgogICAgICAgICAiIiIgVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCBk YXRhYmFzZSB1bmRlciAxc3Qgc2VydmVyIG9mIHRyZWUgbm9kZS4gIiIiCiAK ICAgICAgICAgc2VydmVyX2Nvbm5lY3RfcmVzcG9uc2UsIHNlcnZlcl9ncm91 cCwgc2VydmVyX2lkcyA9IFwKLSAgICAgICAgICAgIHV0aWxzLmNvbm5lY3Rf c2VydmVyKHNlbGYudGVzdGVyKQorICAgICAgICAgICAgdXRpbHMuY29ubmVj dF9zZXJ2ZXIoc2VsZi50ZXN0ZXIsIFRydWUpCiAKICAgICAgICAgZm9yIHNl cnZlcl9jb25uZWN0LCBzZXJ2ZXJfaWQgaW4gemlwKHNlcnZlcl9jb25uZWN0 X3Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VydmVyX2lkcyk6CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv dGVzdHMvdGVzdF9kYl9wdXQucHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvdGVzdHMvdGVzdF9kYl9w dXQucHkKaW5kZXggNDYxNWQzNC4uNjc0MDUzNCAxMDA2NDQKLS0tIGEvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3Rlc3RzL3Rlc3RfZGJfcHV0LnB5CisrKyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy90ZXN0cy90 ZXN0X2RiX3B1dC5weQpAQCAtNzAsNSArNzAsNiBAQCBjbGFzcyBEYXRhYmFz ZXNVcGRhdGVUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgICAg IDpyZXR1cm46IE5vbmUKICAgICAgICAgIiIiCiAKKyAgICAgICAgdXRpbHMu ZGVsZXRlX2RhdGFiYXNlKHNlbGYudGVzdGVyKQogICAgICAgICB1dGlscy5k ZWxldGVfc2VydmVyKHNlbGYudGVzdGVyKQogICAgICAgICB1dGlscy5kZWxl dGVfcGFyZW50X2lkX2ZpbGUoKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvcm9sZXMvdGVzdHMvX19p bml0X18ucHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMv c2VydmVycy9yb2xlcy90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTExYmY4Ci0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvcm9sZXMvdGVzdHMvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNiBAQAor IyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTYs IFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2Fy ZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisj CisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmcm9tIHBnYWRtaW4udXRp bHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2VuZXJhdG9yCisKKworY2xhc3Mg Um9sZUdlbmVyYXRvclRlc3RDYXNlKEJhc2VUZXN0R2VuZXJhdG9yKToKKwor ICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICByZXR1cm4KZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL3JvbGVzL3Rlc3RzL3Rlc3Rfcm9sZV9hZGQucHkgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9yb2xlcy90ZXN0cy90 ZXN0X3JvbGVfYWRkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjI3Y2FlNTIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9yb2xlcy90ZXN0cy90 ZXN0X3JvbGVfYWRkLnB5CkBAIC0wLDAgKzEsNTQgQEAKKyMgIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29s cworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE2LCBUaGUgcGdBZG1p biBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFz ZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKworaW1wb3J0IGpzb24KKworZnJvbSByZWdyZXNz aW9uIGltcG9ydCB0ZXN0X3V0aWxzIGFzIHV0aWxzCitmcm9tIHBnYWRtaW4u dXRpbHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2VuZXJhdG9yCisKKworY2xh c3MgTG9naW5Sb2xlQWRkVGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgor ICAgICIiIlRoaXMgY2xhc3MgaGFzIGFkZCByb2xlIHNjZW5hcmlvIiIiCisK KyAgICBzY2VuYXJpb3MgPSBbCisgICAgICAgICMgRmV0Y2hpbmcgZGVmYXVs dCBVUkwgZm9yIHJvbGVzIG5vZGUuCisgICAgICAgICgnQ2hlY2sgUm9sZSBO b2RlJywgZGljdCh1cmw9Jy9icm93c2VyL3JvbGUvb2JqLycpKQorICAgIF0K KworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5j dGlvbiB1c2VkIHRvIGFkZCB0aGUgc2V2ZXIiIiIKKworICAgICAgICAjIEFk ZCB0aGUgc2VydmVyCisgICAgICAgIHV0aWxzLmFkZF9zZXJ2ZXIoc2VsZi50 ZXN0ZXIpCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgIiIi VGhpcyBmdW5jdGlvbiB0ZXN0IHRoZSBhZGQgcm9sZSBzY2VuYXJpbyIiIgor CisgICAgICAgIHNlcnZlcl9jb25uZWN0X3Jlc3BvbnNlLCBzZXJ2ZXJfZ3Jv dXAsIHNlcnZlcl9pZHMgPSBcCisgICAgICAgICAgICB1dGlscy5jb25uZWN0 X3NlcnZlcihzZWxmLnRlc3RlciwgVHJ1ZSkKKworICAgICAgICBmb3Igc2Vy dmVyX2Nvbm5lY3QsIHNlcnZlcl9pZCBpbiB6aXAoc2VydmVyX2Nvbm5lY3Rf cmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZXJ2ZXJfaWRzKToKKyAgICAgICAgICAgIGlmIHNlcnZl cl9jb25uZWN0WydkYXRhJ11bJ2Nvbm5lY3RlZCddOgorICAgICAgICAgICAg ICAgIGRhdGEgPSB1dGlscy5nZXRfcm9sZV9kYXRhKCkKKyAgICAgICAgICAg ICAgICByZXNwb25zZSA9IHNlbGYudGVzdGVyLnBvc3Qoc2VsZi51cmwgKyBz dHIoc2VydmVyX2dyb3VwKSArICcvJworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArIHNlcnZlcl9pZCArICcvJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YT1qc29uLmR1bXBzKGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9J2h0bWwvanNvbicp CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlLnN0 YXR1c19jb2RlLCAyMDApCisgICAgICAgICAgICAgICAgcmVzcG9uc2VfZGF0 YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuZGF0YS5kZWNvZGUoJ3V0Zi04Jykp CisgICAgICAgICAgICAgICAgdXRpbHMud3JpdGVfcm9sZV9pZChyZXNwb25z ZV9kYXRhKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAi IiJUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgdGhlIHJvbGUsc2VydmVyIGFuZCBw YXJlbnQgaWQgZmlsZSIiIgorCisgICAgICAgIHV0aWxzLmRlbGV0ZV9yb2xl KHNlbGYudGVzdGVyKQorICAgICAgICB1dGlscy5kZWxldGVfc2VydmVyKHNl bGYudGVzdGVyKQorICAgICAgICB1dGlscy5kZWxldGVfcGFyZW50X2lkX2Zp bGUoKQorCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9yb2xlcy90ZXN0cy90ZXN0X3JvbGVfZGVsZXRl LnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvcm9sZXMvdGVzdHMvdGVzdF9yb2xlX2RlbGV0ZS5weQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzc2OWNiCi0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvcm9sZXMvdGVzdHMvdGVzdF9yb2xlX2RlbGV0ZS5weQpAQCAtMCww ICsxLDYzIEBACisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRt aW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAy MDEzIC0gMjAxNiwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBU aGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FM IExpY2VuY2UKKyMKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworaW1w b3J0IGpzb24KK2Zyb20gcmVncmVzc2lvbiBpbXBvcnQgdGVzdF91dGlscyBh cyB1dGlscworZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBCYXNl VGVzdEdlbmVyYXRvcgorZnJvbSB0ZXN0X3NldHVwIGltcG9ydCBjb25maWdf ZGF0YQorZnJvbSByZWdyZXNzaW9uLnRlc3RfdXRpbHMgaW1wb3J0IGdldF9p ZHMKKworCitjbGFzcyBMb2dpblJvbGVEZWxldGVUZXN0Q2FzZShCYXNlVGVz dEdlbmVyYXRvcik6CisgICAgIiIiVGhpcyBjbGFzcyBoYXMgZGVsZXRlIHJv bGUgc2NlbmFyaW8iIiIKKworICAgIHNjZW5hcmlvcyA9IFsKKyAgICAgICAg IyBGZXRjaGluZyBkZWZhdWx0IFVSTCBmb3Igcm9sZXMgbm9kZS4KKyAgICAg ICAgKCdDaGVjayBSb2xlIE5vZGUnLCBkaWN0KHVybD0nL2Jyb3dzZXIvcm9s ZS9vYmovJykpCisgICAgXQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAg ICAgICAiIiJUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYWRkIHRoZSBzZXJ2ZXIi IiIKKworICAgICAgICAjIEFkZCB0aGUgc2VydmVyCisgICAgICAgIHV0aWxz LmFkZF9zZXJ2ZXIoc2VsZi50ZXN0ZXIpCisgICAgICAgICMgQ29ubmVjdCB0 byBzZXJ2ZXIKKyAgICAgICAgc2VydmVyX2Nvbm5lY3RfcmVzcG9uc2UsIHNl cnZlcl9ncm91cCwgc2VydmVyX2lkcyA9IFwKKyAgICAgICAgICAgIHV0aWxz LmNvbm5lY3Rfc2VydmVyKHNlbGYudGVzdGVyLCBGYWxzZSkKKyAgICAgICAg IyBBZGQgdGhlIHJvbGUKKyAgICAgICAgdXRpbHMuYWRkX3JvbGUoc2VsZi50 ZXN0ZXIsIHNlcnZlcl9jb25uZWN0X3Jlc3BvbnNlLCBzZXJ2ZXJfZ3JvdXAs CisgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZHMpCisKKyAgICBk ZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlvbiB0 ZXN0cyB0aGUgZGVsZXRlIHJvbGUgc2NlbmFyaW8iIiIKKworICAgICAgICBz cnZfZ3JwID0gY29uZmlnX2RhdGFbJ3Rlc3Rfc2VydmVyX2dyb3VwJ10KKyAg ICAgICAgYWxsX2lkID0gZ2V0X2lkcygpCisgICAgICAgIHNlcnZlcl9pZHMg PSBhbGxfaWRbInNpZCJdCisgICAgICAgIHJvbGVfaWRzX2RpY3QgPSBhbGxf aWRbImxyaWQiXVswXQorCisgICAgICAgIGZvciBzZXJ2ZXJfaWQgaW4gc2Vy dmVyX2lkczoKKyAgICAgICAgICAgIHJvbGVfaWQgPSByb2xlX2lkc19kaWN0 W2ludChzZXJ2ZXJfaWQpXQorICAgICAgICAgICAgcm9sZV9yZXNwb25zZSA9 IHV0aWxzLnZlcmlmeV9yb2xlKHNlbGYudGVzdGVyLCBzcnZfZ3JwLCBzZXJ2 ZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcm9sZV9pZCkKKyAgICAgICAgICAgIGlmIGxlbihyb2xlX3Jl c3BvbnNlKSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv bigiTm8gcm9sZXMocykgdG8gZGVsZXRlISEhIikKKyAgICAgICAgICAgIHJl c3BvbnNlID0gc2VsZi50ZXN0ZXIuZGVsZXRlKHNlbGYudXJsICsgc3RyKHNy dl9ncnApICsgJy8nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cihzZXJ2ZXJfaWQpICsgJy8nICsgc3RyKHJvbGVf aWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9sbG93X3JlZGlyZWN0cz1UcnVlKQorICAgICAgICAgICAgZGVsZXRl X3Jlc3BvbnNlX2RhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVj b2RlKCd1dGYtOCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRl bGV0ZV9yZXNwb25zZV9kYXRhWydzdWNjZXNzJ10sIDEpCisKKyAgICBkZWYg dGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24gZGVs ZXRlcyB0aGUgcm9sZSxzZXJ2ZXIgYW5kIHBhcmVudCBpZCBmaWxlIiIiCisK KyAgICAgICAgdXRpbHMuZGVsZXRlX3NlcnZlcihzZWxmLnRlc3RlcikKKyAg ICAgICAgdXRpbHMuZGVsZXRlX3BhcmVudF9pZF9maWxlKCkKKwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvcm9sZXMvdGVzdHMvdGVzdF9yb2xlX2dldC5weSBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3JvbGVzL3Rlc3RzL3Rl c3Rfcm9sZV9nZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uM2MyZWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3JvbGVzL3Rlc3RzL3Rl c3Rfcm9sZV9nZXQucHkKQEAgLTAsMCArMSw1MyBAQAorIyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xz CisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTYsIFRoZSBwZ0FkbWlu IERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNl ZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCitmcm9tIHJlZ3Jlc3Npb24gaW1wb3J0IHRlc3Rf dXRpbHMgYXMgdXRpbHMKK2Zyb20gdGVzdF9zZXR1cCBpbXBvcnQgY29uZmln X2RhdGEKK2Zyb20gcGdhZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRl c3RHZW5lcmF0b3IKK2Zyb20gcmVncmVzc2lvbi50ZXN0X3V0aWxzIGltcG9y dCBnZXRfaWRzCisKKworY2xhc3MgTG9naW5Sb2xlR2V0VGVzdENhc2UoQmFz ZVRlc3RHZW5lcmF0b3IpOgorICAgICIiIlRoaXMgY2xhc3MgdGVzdHMgdGhl IGdldCByb2xlIHNjZW5hcmlvIiIiCisKKyAgICBzY2VuYXJpb3MgPSBbCisg ICAgICAgICMgRmV0Y2hpbmcgZGVmYXVsdCBVUkwgZm9yIHJvbGVzIG5vZGUu CisgICAgICAgICgnQ2hlY2sgUm9sZSBOb2RlJywgZGljdCh1cmw9Jy9icm93 c2VyL3JvbGUvb2JqLycpKQorICAgIF0KKworICAgIGRlZiBzZXRVcChzZWxm KToKKyAgICAgICAgIyBBZGQgdGhlIHNlcnZlcgorICAgICAgICB1dGlscy5h ZGRfc2VydmVyKHNlbGYudGVzdGVyKQorICAgICAgICAjIENvbm5lY3QgdG8g c2VydmVyCisgICAgICAgIHNlcnZlcl9jb25uZWN0X3Jlc3BvbnNlLCBzZXJ2 ZXJfZ3JvdXAsIHNlcnZlcl9pZHMgPSBcCisgICAgICAgICAgICB1dGlscy5j b25uZWN0X3NlcnZlcihzZWxmLnRlc3RlciwgRmFsc2UpCisgICAgICAgICMg QWRkIHRoZSByb2xlCisgICAgICAgIHV0aWxzLmFkZF9yb2xlKHNlbGYudGVz dGVyLCBzZXJ2ZXJfY29ubmVjdF9yZXNwb25zZSwgc2VydmVyX2dyb3VwLAor ICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWRzKQorCisgICAgZGVm IHJ1blRlc3Qoc2VsZik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24gdGVz dCB0aGUgZ2V0IHJvbGUgc2NlbmFyaW8iIiIKKyAgICAgICAgc3J2X2dycCA9 IGNvbmZpZ19kYXRhWyd0ZXN0X3NlcnZlcl9ncm91cCddCisgICAgICAgIGFs bF9pZCA9IGdldF9pZHMoKQorICAgICAgICBzZXJ2ZXJfaWRzID0gYWxsX2lk WyJzaWQiXQorICAgICAgICByb2xlX2lkc19kaWN0ID0gYWxsX2lkWyJscmlk Il1bMF0KKworICAgICAgICBmb3Igc2VydmVyX2lkIGluIHNlcnZlcl9pZHM6 CisgICAgICAgICAgICByb2xlX2lkID0gcm9sZV9pZHNfZGljdFtpbnQoc2Vy dmVyX2lkKV0KKyAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIu Z2V0KHNlbGYudXJsICsgc3RyKHNydl9ncnApICsgJy8nICsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZXJ2ZXJfaWQp ICsgJy8nICsgc3RyKHJvbGVfaWQpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9sbG93X3JlZGlyZWN0cz1UcnVlKQorICAg ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcG9uc2Uuc3RhdHVzX2Nv ZGUsIDIwMCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAg IiIiVGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSByb2xlLHNlcnZlciBhbmQg cGFyZW50IGlkIGZpbGUiIiIKKworICAgICAgICB1dGlscy5kZWxldGVfcm9s ZShzZWxmLnRlc3RlcikKKyAgICAgICAgdXRpbHMuZGVsZXRlX3NlcnZlcihz ZWxmLnRlc3RlcikKKyAgICAgICAgdXRpbHMuZGVsZXRlX3BhcmVudF9pZF9m aWxlKCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL3JvbGVzL3Rlc3RzL3Rlc3Rfcm9sZV9wdXQucHkg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9y b2xlcy90ZXN0cy90ZXN0X3JvbGVfcHV0LnB5Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmIxZjhiYTIKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9y b2xlcy90ZXN0cy90ZXN0X3JvbGVfcHV0LnB5CkBAIC0wLDAgKzEsNjggQEAK KyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9z dGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE2 LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdh cmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQor IworIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW1wb3J0IGpzb24KKwor ZnJvbSByZWdyZXNzaW9uIGltcG9ydCB0ZXN0X3V0aWxzIGFzIHV0aWxzCitm cm9tIHRlc3Rfc2V0dXAgaW1wb3J0IGNvbmZpZ19kYXRhLCBhZHZhbmNlZF9j b25maWdfZGF0YQorZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBC YXNlVGVzdEdlbmVyYXRvcgorZnJvbSByZWdyZXNzaW9uLnRlc3RfdXRpbHMg aW1wb3J0IGdldF9pZHMKKworCitjbGFzcyBMb2dpblJvbGVQdXRUZXN0Q2Fz ZShCYXNlVGVzdEdlbmVyYXRvcik6CisgICAgIiIiVGhpcyBjbGFzcyBoYXMg dXBkYXRlIHJvbGUgc2NlbmFyaW8iIiIKKworICAgIHNjZW5hcmlvcyA9IFsK KyAgICAgICAgIyBGZXRjaGluZyBkZWZhdWx0IFVSTCBmb3Igcm9sZXMgbm9k ZS4KKyAgICAgICAgKCdDaGVjayBSb2xlIE5vZGUnLCBkaWN0KHVybD0nL2Jy b3dzZXIvcm9sZS9vYmovJykpCisgICAgXQorCisgICAgZGVmIHNldFVwKHNl bGYpOgorICAgICAgICAjIEFkZCB0aGUgc2VydmVyCisgICAgICAgIHV0aWxz LmFkZF9zZXJ2ZXIoc2VsZi50ZXN0ZXIpCisgICAgICAgICMgQ29ubmVjdCB0 byBzZXJ2ZXIKKyAgICAgICAgc2VydmVyX2Nvbm5lY3RfcmVzcG9uc2UsIHNl cnZlcl9ncm91cCwgc2VydmVyX2lkcyA9IFwKKyAgICAgICAgICAgIHV0aWxz LmNvbm5lY3Rfc2VydmVyKHNlbGYudGVzdGVyLCBGYWxzZSkKKyAgICAgICAg IyBBZGQgdGhlIHJvbGUKKyAgICAgICAgdXRpbHMuYWRkX3JvbGUoc2VsZi50 ZXN0ZXIsIHNlcnZlcl9jb25uZWN0X3Jlc3BvbnNlLCBzZXJ2ZXJfZ3JvdXAs CisgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZHMpCisKKyAgICBk ZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlvbiB0 ZXN0cyB0aGUgdXBkYXRlIHJvbGUgZGF0YSBzY2VuYXJpbyIiIgorCisgICAg ICAgIHNydl9ncnAgPSBjb25maWdfZGF0YVsndGVzdF9zZXJ2ZXJfZ3JvdXAn XQorICAgICAgICBhbGxfaWQgPSBnZXRfaWRzKCkKKyAgICAgICAgc2VydmVy X2lkcyA9IGFsbF9pZFsic2lkIl0KKyAgICAgICAgcm9sZV9pZHNfZGljdCA9 IGFsbF9pZFsibHJpZCJdWzBdCisKKyAgICAgICAgZm9yIHNlcnZlcl9pZCBp biBzZXJ2ZXJfaWRzOgorICAgICAgICAgICAgcm9sZV9pZCA9IHJvbGVfaWRz X2RpY3RbaW50KHNlcnZlcl9pZCldCisgICAgICAgICAgICByb2xlX3Jlc3Bv bnNlID0gdXRpbHMudmVyaWZ5X3JvbGUoc2VsZi50ZXN0ZXIsIHNydl9ncnAs IHNlcnZlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByb2xlX2lkKQorICAgICAgICAgICAgaWYgbGVuKHJv bGVfcmVzcG9uc2UpID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhj ZXB0aW9uKCJObyByb2xlcyhzKSB0byB1cGRhdGUhISEiKQorCisgICAgICAg ICAgICBkYXRhID0geworICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6 IGFkdmFuY2VkX2NvbmZpZ19kYXRhWyJ0ZXN0X2xyX3VwZGF0ZV9kYXRhIl0K KyAgICAgICAgICAgICAgICBbInRlc3RfY29tbWVudCJdLAorICAgICAgICAg ICAgICAgICJscmlkIjogcm9sZV9pZAorICAgICAgICAgICAgfQorICAgICAg ICAgICAgcHV0X3Jlc3BvbnNlID0gc2VsZi50ZXN0ZXIucHV0KHNlbGYudXJs ICsgc3RyKHNydl9ncnApICsgJy8nICsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VydmVyX2lkKSArICcvJyAr IHN0cihyb2xlX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMoZGF0YSksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3Jl ZGlyZWN0cz1UcnVlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs cyhwdXRfcmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKworICAgIGRlZiB0 ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlvbiBkZWxl dGVzIHRoZSByb2xlLHNlcnZlciBhbmQgcGFyZW50IGlkIGZpbGUiIiIKKwor ICAgICAgICB1dGlscy5kZWxldGVfcm9sZShzZWxmLnRlc3RlcikKKyAgICAg ICAgdXRpbHMuZGVsZXRlX3NlcnZlcihzZWxmLnRlc3RlcikKKyAgICAgICAg dXRpbHMuZGVsZXRlX3BhcmVudF9pZF9maWxlKCkKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3RhYmxl c3BhY2VzL3Rlc3RzL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvdGFibGVzcGFjZXMvdGVzdHMvX19p bml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MzMwMjAyNwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3RhYmxlc3BhY2VzL3Rlc3RzL19f aW5pdF9fLnB5CkBAIC0wLDAgKzEsMTYgQEAKKyMgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIwor IyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE2LCBUaGUgcGdBZG1pbiBEZXZl bG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5k ZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBC YXNlVGVzdEdlbmVyYXRvcgorCisKK2NsYXNzIFRibHNwYWNlR2VuZXJhdG9y VGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgorCisgICAgZGVmIHJ1blRl c3Qoc2VsZik6CisgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvdGFibGVzcGFj ZXMvdGVzdHMvdGVzdF90YnNwY19hZGQucHkgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy90YWJsZXNwYWNlcy90ZXN0cy90 ZXN0X3Ric3BjX2FkZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40OGM3NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvdGFibGVzcGFjZXMv dGVzdHMvdGVzdF90YnNwY19hZGQucHkKQEAgLTAsMCArMSw1MyBAQAorIyAj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3Jl U1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTYsIFRo ZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBp cyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisj ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbXBvcnQganNvbgorCitmcm9t IHJlZ3Jlc3Npb24gaW1wb3J0IHRlc3RfdXRpbHMgYXMgdXRpbHMKK2Zyb20g cGdhZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RHZW5lcmF0b3IK KworCitjbGFzcyBUYWJsZVNwYWNlQWRkVGVzdENhc2UoQmFzZVRlc3RHZW5l cmF0b3IpOgorICAgICIiIlRoaXMgY2xhc3Mgd2lsbCBhZGQgdGFibGVzcGFj ZSBub2RlIHVuZGVyIHNlcnZlciIiIgorCisgICAgc2NlbmFyaW9zID0gWwor ICAgICAgICAjIEZldGNoaW5nIGRlZmF1bHQgVVJMIGZvciB0YWJsZXNwYWNl IG5vZGUuCisgICAgICAgICgnQ2hlY2sgVGFibGVzcGFjZSBOb2RlJywgZGlj dCh1cmw9Jy9icm93c2VyL3RhYmxlc3BhY2Uvb2JqLycpKQorICAgIF0KKwor ICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlv biB1c2VkIHRvIGFkZCB0aGUgc2V2ZXIiIiIKKworICAgICAgICAjIEFkZCB0 aGUgc2VydmVyCisgICAgICAgIHV0aWxzLmFkZF9zZXJ2ZXIoc2VsZi50ZXN0 ZXIpCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgIiIiVGhp cyBmdW5jdGlvbiB0ZXN0IHRoZSBhZGQgdGFibGVzcGFjZSBzY2VuYXJpbyIi IgorCisgICAgICAgIHNlcnZlcl9jb25uZWN0X3Jlc3BvbnNlLCBzZXJ2ZXJf Z3JvdXAsIHNlcnZlcl9pZHMgPSBcCisgICAgICAgICAgICB1dGlscy5jb25u ZWN0X3NlcnZlcihzZWxmLnRlc3RlciwgVHJ1ZSkKKworICAgICAgICBmb3Ig c2VydmVyX2Nvbm5lY3QsIHNlcnZlcl9pZCBpbiB6aXAoc2VydmVyX2Nvbm5l Y3RfcmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZXJ2ZXJfaWRzKToKKyAgICAgICAgICAgIGlmIHNl cnZlcl9jb25uZWN0WydkYXRhJ11bJ2Nvbm5lY3RlZCddOgorICAgICAgICAg ICAgICAgIGRhdGEgPSB1dGlscy5nZXRfdGFibGVzcGFjZV9kYXRhKHNlcnZl cl9jb25uZWN0KQorICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi50 ZXN0ZXIucG9zdChzZWxmLnVybCArIHN0cihzZXJ2ZXJfZ3JvdXApICsgJy8n CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsgc2VydmVyX2lkICsgJy8nLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMoZGF0YSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRlbnRfdHlwZT0naHRtbC9qc29uJykKKyAgICAgICAgICAgICAgICBzZWxm LmFzc2VydFRydWUocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAg ICAgICAgICAgICByZXNwb25zZV9kYXRhID0ganNvbi5sb2FkcyhyZXNwb25z ZS5kYXRhLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgICAgICAgICB1dGls cy53cml0ZV90YWJsZXNwYWNlX2lkKHJlc3BvbnNlX2RhdGEpCisKKyAgICBk ZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24g ZGVsZXRlcyB0aGUgdGFibGVzcGFjZSxzZXJ2ZXIgYW5kIHBhcmVudCBpZCBm aWxlIiIiCisKKyAgICAgICAgdXRpbHMuZGVsZXRlX3RhYmxlX3NwYWNlKHNl bGYudGVzdGVyKQorICAgICAgICB1dGlscy5kZWxldGVfc2VydmVyKHNlbGYu dGVzdGVyKQorICAgICAgICB1dGlscy5kZWxldGVfcGFyZW50X2lkX2ZpbGUo KQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvdGFibGVzcGFjZXMvdGVzdHMvdGVzdF90YnNwY19kZWxl dGUucHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy90YWJsZXNwYWNlcy90ZXN0cy90ZXN0X3Ric3BjX2RlbGV0ZS5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOThhOGU4Ci0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvdGFibGVzcGFjZXMvdGVzdHMvdGVzdF90YnNwY19k ZWxldGUucHkKQEAgLTAsMCArMSw2NSBAQAorIyAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisj IENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTYsIFRoZSBwZ0FkbWluIERldmVs b3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRl ciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjICMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCitpbXBvcnQganNvbgorZnJvbSByZWdyZXNzaW9uIGltcG9y dCB0ZXN0X3V0aWxzIGFzIHV0aWxzCitmcm9tIHBnYWRtaW4udXRpbHMucm91 dGUgaW1wb3J0IEJhc2VUZXN0R2VuZXJhdG9yCitmcm9tIHRlc3Rfc2V0dXAg aW1wb3J0IGNvbmZpZ19kYXRhCitmcm9tIHJlZ3Jlc3Npb24udGVzdF91dGls cyBpbXBvcnQgZ2V0X2lkcworCisKK2NsYXNzIFRhYmxlU3BhY2VEZWxldGVU ZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CisgICAgIiIiVGhpcyBjbGFz cyBoYXMgZGVsZXRlIHRhYmxlIHNwYWNlIHNjZW5hcmlvIiIiCisKKyAgICBz Y2VuYXJpb3MgPSBbCisgICAgICAgICMgRmV0Y2hpbmcgZGVmYXVsdCBVUkwg Zm9yIHRhYmxlc3BhY2Ugbm9kZS4KKyAgICAgICAgKCdDaGVjayBUYWJsZXNw YWNlIE5vZGUnLCBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGVzcGFjZS9vYmov JykpCisgICAgXQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAi IiJUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYWRkIHRoZSBzZXJ2ZXIiIiIKKwor ICAgICAgICAjIEFkZCB0aGUgc2VydmVyCisgICAgICAgIHV0aWxzLmFkZF9z ZXJ2ZXIoc2VsZi50ZXN0ZXIpCisgICAgICAgICMgQ29ubmVjdCB0byBzZXJ2 ZXIKKyAgICAgICAgc2VydmVyX2Nvbm5lY3RfcmVzcG9uc2UsIHNlcnZlcl9n cm91cCwgc2VydmVyX2lkcyA9IFwKKyAgICAgICAgICAgIHV0aWxzLmNvbm5l Y3Rfc2VydmVyKHNlbGYudGVzdGVyLCBGYWxzZSkKKyAgICAgICAgIyBBZGQg dGhlIHRhYmxlIHNwYWNlCisgICAgICAgIHV0aWxzLmFkZF90YWJsZV9zcGFj ZShzZWxmLnRlc3Rlciwgc2VydmVyX2Nvbm5lY3RfcmVzcG9uc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfZ3JvdXAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWRzKQorCisgICAg ZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24g dGVzdHMgdGhlIGRlbGV0ZSB0YWJsZSBzcGFjZSBzY2VuYXJpbyIiIgorCisg ICAgICAgIHNydl9ncnAgPSBjb25maWdfZGF0YVsndGVzdF9zZXJ2ZXJfZ3Jv dXAnXQorICAgICAgICBhbGxfaWQgPSBnZXRfaWRzKCkKKyAgICAgICAgc2Vy dmVyX2lkcyA9IGFsbF9pZFsic2lkIl0KKyAgICAgICAgdGFibGVfc3BhY2Vf aWRzX2RpY3QgPSBhbGxfaWRbInRhYmxlX3NwYWNlX2lkIl1bMF0KKworICAg ICAgICBmb3Igc2VydmVyX2lkIGluIHNlcnZlcl9pZHM6CisgICAgICAgICAg ICB0YWJsZV9zcGFjZV9pZCA9IHRhYmxlX3NwYWNlX2lkc19kaWN0W2ludChz ZXJ2ZXJfaWQpXQorICAgICAgICAgICAgdGFibGVfc3BhY2VfcmVzcG9uc2Ug PSB1dGlscy52ZXJpZnlfdGFibGVfc3BhY2Uoc2VsZi50ZXN0ZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzcnZfZ3JwLCBzZXJ2ZXJfaWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0YWJsZV9zcGFjZV9pZCkKKyAgICAgICAgICAgIGlmIGxlbih0YWJsZV9z cGFjZV9yZXNwb25zZSkgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBF eGNlcHRpb24oIk5vIHRhYmxlc3BhY2UocykgdG8gZGVsZXRlISEhIikKKwor ICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5kZWxldGUoc2Vs Zi51cmwgKyBzdHIoc3J2X2dycCkgKyAnLycgKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlcnZlcl9pZCkgKyAn LycgKyBzdHIoCisgICAgICAgICAgICAgICAgdGFibGVfc3BhY2VfaWQpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9s bG93X3JlZGlyZWN0cz1UcnVlKQorICAgICAgICAgICAgZGVsZXRlX3Jlc3Bv bnNlX2RhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVjb2RlKCd1 dGYtOCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlbGV0ZV9y ZXNwb25zZV9kYXRhWydzdWNjZXNzJ10sIDEpCisKKyAgICBkZWYgdGVhckRv d24oc2VsZik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24gZGVsZXRlcyB0 aGUgc2VydmVyIGFuZCBwYXJlbnQgaWQgZmlsZSIiIgorCisgICAgICAgIHV0 aWxzLmRlbGV0ZV9zZXJ2ZXIoc2VsZi50ZXN0ZXIpCisgICAgICAgIHV0aWxz LmRlbGV0ZV9wYXJlbnRfaWRfZmlsZSgpCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy90YWJsZXNwYWNl cy90ZXN0cy90ZXN0X3Ric3BjX2dldC5weSBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3RhYmxlc3BhY2VzL3Rlc3RzL3Rl c3RfdGJzcGNfZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjQ1ZTEyYzAKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy90YWJsZXNwYWNlcy90 ZXN0cy90ZXN0X3Ric3BjX2dldC5weQpAQCAtMCwwICsxLDU5IEBACisjICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVT UUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxNiwgVGhl IHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlz IHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMg IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Zyb20gcmVncmVzc2lvbiBpbXBv cnQgdGVzdF91dGlscyBhcyB1dGlscworZnJvbSB0ZXN0X3NldHVwIGltcG9y dCBjb25maWdfZGF0YQorZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9y dCBCYXNlVGVzdEdlbmVyYXRvcgorZnJvbSByZWdyZXNzaW9uLnRlc3RfdXRp bHMgaW1wb3J0IGdldF9pZHMKKworCitjbGFzcyBUYWJsZXNwYWNlR2V0VGVz dENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgorICAgICIiIlRoaXMgY2xhc3Mg dGVzdHMgdGhlIGdldCB0YWJsZSBzcGFjZSBzY2VuYXJpbyIiIgorCisgICAg c2NlbmFyaW9zID0gWworICAgICAgICAjIEZldGNoaW5nIGRlZmF1bHQgVVJM IGZvciByb2xlcyBub2RlLgorICAgICAgICAoJ0NoZWNrIFRhYmxlc3BhY2Ug Tm9kZScsIGRpY3QodXJsPScvYnJvd3Nlci90YWJsZXNwYWNlL29iai8nKSkK KyAgICBdCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgQWRk IHRoZSBzZXJ2ZXIKKyAgICAgICAgdXRpbHMuYWRkX3NlcnZlcihzZWxmLnRl c3RlcikKKyAgICAgICAgIyBDb25uZWN0IHRvIHNlcnZlcgorICAgICAgICBz ZXJ2ZXJfY29ubmVjdF9yZXNwb25zZSwgc2VydmVyX2dyb3VwLCBzZXJ2ZXJf aWRzID0gXAorICAgICAgICAgICAgdXRpbHMuY29ubmVjdF9zZXJ2ZXIoc2Vs Zi50ZXN0ZXIsIEZhbHNlKQorICAgICAgICAjIEFkZCB0aGUgdGFibGUgc3Bh Y2UKKyAgICAgICAgdXRpbHMuYWRkX3RhYmxlX3NwYWNlKHNlbGYudGVzdGVy LCBzZXJ2ZXJfY29ubmVjdF9yZXNwb25zZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlcnZlcl9ncm91cCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlcnZlcl9pZHMpCisKKyAgICBkZWYgcnVuVGVzdChz ZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlvbiB0ZXN0IHRoZSBnZXQg dGFibGUgc3BhY2Ugc2NlbmFyaW8iIiIKKworICAgICAgICBzcnZfZ3JwID0g Y29uZmlnX2RhdGFbJ3Rlc3Rfc2VydmVyX2dyb3VwJ10KKyAgICAgICAgYWxs X2lkID0gZ2V0X2lkcygpCisgICAgICAgIHNlcnZlcl9pZHMgPSBhbGxfaWRb InNpZCJdCisgICAgICAgIHRhYmxlc3BhY2VfaWRzX2RpY3QgPSBhbGxfaWRb InRhYmxlX3NwYWNlX2lkIl1bMF0KKworICAgICAgICBmb3Igc2VydmVyX2lk IGluIHNlcnZlcl9pZHM6CisgICAgICAgICAgICB0YWJsZXNwYWNlX2lkID0g dGFibGVzcGFjZV9pZHNfZGljdFtpbnQoc2VydmVyX2lkKV0KKyAgICAgICAg ICAgIHNlcnZlcl9yZXNwb25zZSA9IHV0aWxzLnZlcmlmeV9zZXJ2ZXIoc2Vs Zi50ZXN0ZXIsIHNydl9ncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZCkKKyAgICAgICAg ICAgIGlmIHNlcnZlcl9yZXNwb25zZVsnZGF0YSddWydjb25uZWN0ZWQnXToK KyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYudGVzdGVyLmdldChz ZWxmLnVybCArIHN0cihzcnZfZ3JwKSArICcvJyArCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlcnZlcl9pZCkg KyAnLycgKyBzdHIoCisgICAgICAgICAgICAgICAgICAgIHRhYmxlc3BhY2Vf aWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvbGxvd19yZWRpcmVjdHM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBz ZWxmLmFzc2VydEVxdWFscyhyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQor CisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAiIiJUaGlzIGZ1 bmN0aW9uIGRlbGV0ZXMgdGhlIHJvbGUsc2VydmVyIGFuZCBwYXJlbnQgaWQg ZmlsZSIiIgorCisgICAgICAgIHV0aWxzLmRlbGV0ZV90YWJsZV9zcGFjZShz ZWxmLnRlc3RlcikKKyAgICAgICAgdXRpbHMuZGVsZXRlX3NlcnZlcihzZWxm LnRlc3RlcikKKyAgICAgICAgdXRpbHMuZGVsZXRlX3BhcmVudF9pZF9maWxl KCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL3RhYmxlc3BhY2VzL3Rlc3RzL3Rlc3RfdGJzcGNfcHV0 LnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvdGFibGVzcGFjZXMvdGVzdHMvdGVzdF90YnNwY19wdXQucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3NjQwZgotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL3RhYmxlc3BhY2VzL3Rlc3RzL3Rlc3RfdGJzcGNfcHV0LnB5 CkBAIC0wLDAgKzEsNzIgQEAKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMK KyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmln aHQgKEMpIDIwMTMgLSAyMDE2LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBU ZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBv c3RncmVTUUwgTGljZW5jZQorIworIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KworaW1wb3J0IGpzb24KKworZnJvbSByZWdyZXNzaW9uIGltcG9ydCB0ZXN0 X3V0aWxzIGFzIHV0aWxzCitmcm9tIHRlc3Rfc2V0dXAgaW1wb3J0IGNvbmZp Z19kYXRhLCBhZHZhbmNlZF9jb25maWdfZGF0YQorZnJvbSBwZ2FkbWluLnV0 aWxzLnJvdXRlIGltcG9ydCBCYXNlVGVzdEdlbmVyYXRvcgorZnJvbSByZWdy ZXNzaW9uLnRlc3RfdXRpbHMgaW1wb3J0IGdldF9pZHMKKworCitjbGFzcyBU YWJsZVNwYWNlVXBkYXRlVGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgor ICAgICIiIlRoaXMgY2xhc3MgaGFzIHVwZGF0ZSB0YWJsZXNwYWNlIHNjZW5h cmlvIiIiCisKKyAgICBzY2VuYXJpb3MgPSBbCisgICAgICAgICMgRmV0Y2hp bmcgZGVmYXVsdCBVUkwgZm9yIHJvbGVzIG5vZGUuCisgICAgICAgICgnQ2hl Y2sgVGFibGVzcGFjZSBOb2RlJywgZGljdCh1cmw9Jy9icm93c2VyL3RhYmxl c3BhY2Uvb2JqLycpKQorICAgIF0KKworICAgIGRlZiBzZXRVcChzZWxmKToK KyAgICAgICAgIyBBZGQgdGhlIHNlcnZlcgorICAgICAgICB1dGlscy5hZGRf c2VydmVyKHNlbGYudGVzdGVyKQorICAgICAgICAjIENvbm5lY3QgdG8gc2Vy dmVyCisgICAgICAgIHNlcnZlcl9jb25uZWN0X3Jlc3BvbnNlLCBzZXJ2ZXJf Z3JvdXAsIHNlcnZlcl9pZHMgPSBcCisgICAgICAgICAgICB1dGlscy5jb25u ZWN0X3NlcnZlcihzZWxmLnRlc3RlciwgRmFsc2UpCisgICAgICAgICMgQWRk IHRoZSB0YWJsZXNwYWNlCisgICAgICAgIHV0aWxzLmFkZF90YWJsZV9zcGFj ZShzZWxmLnRlc3Rlciwgc2VydmVyX2Nvbm5lY3RfcmVzcG9uc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfZ3JvdXAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWRzKQorCisgICAg ZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24g dGVzdHMgdGhlIHVwZGF0ZSB0YWJsZXNwYWNlIGRhdGEgc2NlbmFyaW8iIiIK KworICAgICAgICBzcnZfZ3JwID0gY29uZmlnX2RhdGFbJ3Rlc3Rfc2VydmVy X2dyb3VwJ10KKyAgICAgICAgYWxsX2lkID0gZ2V0X2lkcygpCisgICAgICAg IHNlcnZlcl9pZHMgPSBhbGxfaWRbInNpZCJdCisgICAgICAgIHRhYmxlc3Bh Y2VfaWRzX2RpY3QgPSBhbGxfaWRbInRhYmxlX3NwYWNlX2lkIl1bMF0KKwor ICAgICAgICBmb3Igc2VydmVyX2lkIGluIHNlcnZlcl9pZHM6CisgICAgICAg ICAgICB0YWJsZXNwYWNlX2lkID0gdGFibGVzcGFjZV9pZHNfZGljdFtpbnQo c2VydmVyX2lkKV0KKyAgICAgICAgICAgIHRhYmxlc3BhY2VfcmVzcG9uc2Ug PSB1dGlscy52ZXJpZnlfdGFibGVfc3BhY2Uoc2VsZi50ZXN0ZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNydl9ncnAsIHNlcnZlcl9pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGFibGVzcGFjZV9pZCkKKyAgICAgICAgICAgIGlmIGxlbih0YWJsZXNwYWNl X3Jlc3BvbnNlKSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2Vw dGlvbigiTm8gdGFibGVzcGFjZShzKSB0byB1cGRhdGUhISEiKQorCisgICAg ICAgICAgICBkYXRhID0geworICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv biI6IGFkdmFuY2VkX2NvbmZpZ19kYXRhWyJ0ZXN0X3Ric3BjX3VwZGF0ZV9k YXRhIl0KKyAgICAgICAgICAgICAgICBbInRlc3RfY29tbWVudCJdLAorICAg ICAgICAgICAgICAgICJ0YWJsZV9zcGFjZV9pZCI6IHRhYmxlc3BhY2VfaWQK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHV0X3Jlc3BvbnNlID0g c2VsZi50ZXN0ZXIucHV0KHNlbGYudXJsICsgc3RyKHNydl9ncnApICsgJy8n ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHIoc2VydmVyX2lkKSArICcvJyArIHN0cigKKyAgICAgICAgICAgICAg ICB0YWJsZXNwYWNlX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMoZGF0YSksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93 X3JlZGlyZWN0cz1UcnVlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx dWFscyhwdXRfcmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKworICAgIGRl ZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlvbiBk ZWxldGVzIHRoZSByb2xlLHNlcnZlciBhbmQgcGFyZW50IGlkIGZpbGUiIiIK KworICAgICAgICB1dGlscy5kZWxldGVfdGFibGVfc3BhY2Uoc2VsZi50ZXN0 ZXIpCisgICAgICAgIHV0aWxzLmRlbGV0ZV9zZXJ2ZXIoc2VsZi50ZXN0ZXIp CisgICAgICAgIHV0aWxzLmRlbGV0ZV9wYXJlbnRfaWRfZmlsZSgpCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy90ZXN0cy90ZXN0X3NlcnZlcl9hZGQucHkgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy90ZXN0cy90ZXN0X3NlcnZl cl9hZGQucHkKaW5kZXggMmIxZWI0NS4uMzdkNjk0OSAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvdGVz dHMvdGVzdF9zZXJ2ZXJfYWRkLnB5CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3Rlc3RzL3Rlc3Rfc2VydmVyX2Fk ZC5weQpAQCAtMzIsMTAgKzMyLDggQEAgY2xhc3MgU2VydmVyc0FkZFRlc3RD YXNlKEJhc2VUZXN0R2VuZXJhdG9yKToKICAgICAgICAgICAgIHVybCA9ICJ7 MH17MX0vIi5mb3JtYXQoc2VsZi51cmwsIHNlcnZlcl9ncm91cCkKICAgICAg ICAgICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIucG9zdCh1cmwsIGRhdGE9 anNvbi5kdW1wcyhzZXJ2ZXJfZGF0YSksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSdodG1sL2pzb24n KQotCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2Uuc3Rh dHVzX2NvZGUsIDIwMCkKLQotICAgICAgICAgICAgcmVzcG9uc2VfZGF0YSA9 IGpzb24ubG9hZHMocmVzcG9uc2UuZGF0YS5kZWNvZGUoKSkKKyAgICAgICAg ICAgIHJlc3BvbnNlX2RhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEu ZGVjb2RlKCd1dGYtOCcpKQogICAgICAgICAgICAgdXRpbHMud3JpdGVfcGFy ZW50X2lkKHJlc3BvbnNlX2RhdGEsIHBpY2tsZV9pZF9kaWN0KQogCiAgICAg ZGVmIHRlYXJEb3duKHNlbGYpOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvdGVzdHMvdGVzdF9zZXJ2 ZXJfcHV0LnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvdGVzdHMvdGVzdF9zZXJ2ZXJfcHV0LnB5CmluZGV4IDVlODEw YmEuLjk5NzMzNTkgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL3Rlc3RzL3Rlc3Rfc2VydmVyX3B1dC5w eQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy90ZXN0cy90ZXN0X3NlcnZlcl9wdXQucHkKQEAgLTY4LDUgKzY4LDYg QEAgY2xhc3MgU2VydmVyVXBkYXRlVGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0 b3IpOgogICAgICAgICA6cmV0dXJuOiBOb25lCiAgICAgICAgICIiIgogCisg ICAgICAgIHV0aWxzLmRlbGV0ZV9kYXRhYmFzZShzZWxmLnRlc3RlcikKICAg ICAgICAgdXRpbHMuZGVsZXRlX3NlcnZlcihzZWxmLnRlc3RlcikKICAgICAg ICAgdXRpbHMuZGVsZXRlX3BhcmVudF9pZF9maWxlKCkKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9jaGFuZ2VfcGFzc3dv cmQucHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfY2hhbmdl X3Bhc3N3b3JkLnB5CmluZGV4IDJmNzE0YTcuLjNkYmQzODYgMTAwNjQ0Ci0t LSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9jaGFuZ2VfcGFz c3dvcmQucHkKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZXN0cy90ZXN0 X2NoYW5nZV9wYXNzd29yZC5weQpAQCAtMTEsNiArMTEsOCBAQCBpbXBvcnQg dXVpZAogCiBmcm9tIHBnYWRtaW4udXRpbHMucm91dGUgaW1wb3J0IEJhc2VU ZXN0R2VuZXJhdG9yCiBmcm9tIHJlZ3Jlc3Npb24udGVzdF9zZXR1cCBpbXBv cnQgY29uZmlnX2RhdGEKK2Zyb20gcmVncmVzc2lvbiBpbXBvcnQgdGVzdF91 dGlscyBhcyB1dGlscworZnJvbSB1dGlscyBpbXBvcnQgY2hhbmdlX3Bhc3N3 b3JkCiAKIAogY2xhc3MgQ2hhbmdlUGFzc3dvcmRUZXN0Q2FzZShCYXNlVGVz dEdlbmVyYXRvcik6CkBAIC01Niw1MSArNTgsNTggQEAgY2xhc3MgQ2hhbmdl UGFzc3dvcmRUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgICAg ICAgICAgICAgWyd0ZXN0X25ld19wYXNzd29yZCddKSwKICAgICAgICAgICAg IHJlc3BkYXRhPSdJbnZhbGlkIHBhc3N3b3JkJykpLAogCi0gICAgICAgICMg VGhpcyB0ZXN0Y2FzZSBjaGVja3MgZm9yIHZhbGlkIHBhc3N3b3JkCisgICAg ICAgICMgVGhpcyB0ZXN0IGNhc2UgY2hlY2tzIGZvciB2YWxpZCBwYXNzd29y ZAogICAgICAgICAoJ1Rlc3RDYXNlIGZvciBDaGFuZ2luZyBWYWxpZF9QYXNz d29yZCcsIGRpY3QoCi0gICAgICAgICAgICBwYXNzd29yZD0oY29uZmlnX2Rh dGFbJ3BnQWRtaW40X2xvZ2luX2NyZWRlbnRpYWxzJ10KKyAgICAgICAgICAg IHZhbGlkX3Bhc3N3b3JkPSdyZWFzc2lnbmluZ19wYXNzd29yZCcsCisgICAg ICAgICAgICB1c2VybmFtZT0oY29uZmlnX2RhdGFbJ3BnQWRtaW40X3Rlc3Rf dXNlcl9jcmVkZW50aWFscyddCisgICAgICAgICAgICAgICAgICAgICAgWyd0 ZXN0X2xvZ2luX3VzZXJuYW1lJ10pLAorICAgICAgICAgICAgcGFzc3dvcmQ9 KGNvbmZpZ19kYXRhWydwZ0FkbWluNF90ZXN0X3VzZXJfY3JlZGVudGlhbHMn XQogICAgICAgICAgICAgICAgICAgICAgIFsndGVzdF9sb2dpbl9wYXNzd29y ZCddKSwKLSAgICAgICAgICAgIG5ld19wYXNzd29yZD0oY29uZmlnX2RhdGFb J3BnQWRtaW40X2xvZ2luX2NyZWRlbnRpYWxzJ10KKyAgICAgICAgICAgIG5l d19wYXNzd29yZD0oY29uZmlnX2RhdGFbJ3BnQWRtaW40X3Rlc3RfdXNlcl9j cmVkZW50aWFscyddCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsndGVz dF9uZXdfcGFzc3dvcmQnXSksCiAgICAgICAgICAgICBuZXdfcGFzc3dvcmRf Y29uZmlybT0oCi0gICAgICAgICAgICAgICAgY29uZmlnX2RhdGFbJ3BnQWRt aW40X2xvZ2luX2NyZWRlbnRpYWxzJ10KKyAgICAgICAgICAgICAgICBjb25m aWdfZGF0YVsncGdBZG1pbjRfdGVzdF91c2VyX2NyZWRlbnRpYWxzJ10KICAg ICAgICAgICAgICAgICBbJ3Rlc3RfbmV3X3Bhc3N3b3JkJ10pLAotICAgICAg ICAgICAgcmVzcGRhdGE9J1lvdSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB5b3Vy IHBhc3N3b3JkLicpKSwKLSAgICAgICAgKCdSZWFzc2lnbmluZ19QYXNzd29y ZCcsIGRpY3QoCi0gICAgICAgICAgICB0ZXN0X2Nhc2U9J3JlYXNzaWduaW5n X3Bhc3N3b3JkJywKLSAgICAgICAgICAgIHBhc3N3b3JkPShjb25maWdfZGF0 YVsncGdBZG1pbjRfbG9naW5fY3JlZGVudGlhbHMnXQotICAgICAgICAgICAg ICAgICAgICAgIFsndGVzdF9uZXdfcGFzc3dvcmQnXSksCi0gICAgICAgICAg ICBuZXdfcGFzc3dvcmQ9KGNvbmZpZ19kYXRhWydwZ0FkbWluNF9sb2dpbl9j cmVkZW50aWFscyddCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsndGVz dF9sb2dpbl9wYXNzd29yZCddKSwKLSAgICAgICAgICAgIG5ld19wYXNzd29y ZF9jb25maXJtPSgKLSAgICAgICAgICAgICAgICBjb25maWdfZGF0YVsncGdB ZG1pbjRfbG9naW5fY3JlZGVudGlhbHMnXQotICAgICAgICAgICAgICAgIFsn dGVzdF9sb2dpbl9wYXNzd29yZCddKSwKICAgICAgICAgICAgIHJlc3BkYXRh PSdZb3Ugc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgeW91ciBwYXNzd29yZC4nKSkK LQogICAgIF0KIAorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFz cworCiAgICAgZGVmIHJ1blRlc3Qoc2VsZik6CiAgICAgICAgICIiIlRoaXMg ZnVuY3Rpb24gd2lsbCBjaGVjayBjaGFuZ2UgcGFzc3dvcmQgZnVuY3Rpb25h bGl0eS4iIiIKIAotICAgICAgICAjIENoZWNrIGZvciAndGVzdF9jYXNlJyBl eGlzdHMgaW4gc2VsZiBGb3IgcmVhc3NpZ25pbmcgdGhlIHBhc3N3b3JkLgot ICAgICAgICAjIFBhc3N3b3JkIGdldHMgY2hhbmdlIGluIGNoYW5nZSBwYXNz d29yZCB0ZXN0IGNhc2UuCi0gICAgICAgIGlmICd0ZXN0X2Nhc2UnIGluIGRp cihzZWxmKToKLSAgICAgICAgICAgIGVtYWlsID0gXAotICAgICAgICAgICAg ICAgIGNvbmZpZ19kYXRhWydwZ0FkbWluNF9sb2dpbl9jcmVkZW50aWFscydd WwotICAgICAgICAgICAgICAgICAgICAndGVzdF9sb2dpbl91c2VybmFtZSdd Ci0gICAgICAgICAgICBwYXNzd29yZCA9IFwKLSAgICAgICAgICAgICAgICBj b25maWdfZGF0YVsncGdBZG1pbjRfbG9naW5fY3JlZGVudGlhbHMnXVsKLSAg ICAgICAgICAgICAgICAgICAgJ3Rlc3RfbmV3X3Bhc3N3b3JkJ10KKyAgICAg ICAgIyBDaGVjayBmb3IgJ3ZhbGlkX3Bhc3N3b3JkJyBleGlzdHMgaW4gc2Vs ZiB0byB0ZXN0ICd2YWxpZCBwYXNzd29yZCcKKyAgICAgICAgIyB0ZXN0IGNh c2UKKyAgICAgICAgaWYgJ3ZhbGlkX3Bhc3N3b3JkJyBpbiBkaXIoc2VsZik6 CisgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYudGVzdGVyLnBvc3QoJy91 c2VyX21hbmFnZW1lbnQvdXNlci8nLCBkYXRhPWRpY3QoCisgICAgICAgICAg ICAgICAgZW1haWw9c2VsZi51c2VybmFtZSwgbmV3UGFzc3dvcmQ9c2VsZi5w YXNzd29yZCwKKyAgICAgICAgICAgICAgICBjb25maXJtUGFzc3dvcmQ9c2Vs Zi5wYXNzd29yZCwgYWN0aXZlPTEsIHJvbGU9IjIiKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfcmVkaXJlY3Rz PVRydWUpCisgICAgICAgICAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzX2Nv ZGUgPT0gMjAwCisKKyAgICAgICAgICAgICMgTG9nb3V0IHRoZSBBZG1pbmlz dHJhdG9yIGJlZm9yZSBsb2dpbiBub3JtYWwgdXNlcgorICAgICAgICAgICAg dXRpbHMubG9nb3V0X3Rlc3Rlcl9hY2NvdW50KHNlbGYudGVzdGVyKQorCiAg ICAgICAgICAgICByZXNwb25zZSA9IHNlbGYudGVzdGVyLnBvc3QoJy9sb2dp bicsIGRhdGE9ZGljdCgKLSAgICAgICAgICAgICAgICBlbWFpbD1lbWFpbCwg cGFzc3dvcmQ9cGFzc3dvcmQpLCBmb2xsb3dfcmVkaXJlY3RzPVRydWUpCi0K LSAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5nZXQoJy9jaGFuZ2Un LCBmb2xsb3dfcmVkaXJlY3RzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0 SW4oJ3BnQWRtaW4gNCBQYXNzd29yZCBDaGFuZ2UnLCByZXNwb25zZS5kYXRh LmRlY29kZSgKLSAgICAgICAgICAgICd1dGYtOCcpKQotCi0gICAgICAgIHJl c3BvbnNlID0gc2VsZi50ZXN0ZXIucG9zdCgnL2NoYW5nZScsIGRhdGE9ZGlj dCgKLSAgICAgICAgICAgIHBhc3N3b3JkPXNlbGYucGFzc3dvcmQsCi0gICAg ICAgICAgICBuZXdfcGFzc3dvcmQ9c2VsZi5uZXdfcGFzc3dvcmQsCi0gICAg ICAgICAgICBuZXdfcGFzc3dvcmRfY29uZmlybT1zZWxmLm5ld19wYXNzd29y ZF9jb25maXJtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvbGxvd19yZWRpcmVjdHM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3Nl cnRJbihzZWxmLnJlc3BkYXRhLCByZXNwb25zZS5kYXRhLmRlY29kZSgndXRm LTgnKSkKKyAgICAgICAgICAgICAgICBlbWFpbD1zZWxmLnVzZXJuYW1lLCBw YXNzd29yZD1zZWxmLnBhc3N3b3JkKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb2xsb3dfcmVkaXJlY3RzPVRydWUpCisg ICAgICAgICAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAw CisKKyAgICAgICAgICAgICMgdGVzdCB0aGUgJ2NoYW5nZSBwYXNzd29yZCcg dGVzdCBjYXNlCisgICAgICAgICAgICBjaGFuZ2VfcGFzc3dvcmQoc2VsZikK KworICAgICAgICAgICAgIyBEZWxldGUgdGhlIG5vcm1hbCB1c2VyIGFmdGVy IGNoYW5naW5nIGl0J3MgcGFzc3dvcmQKKyAgICAgICAgICAgIHV0aWxzLmxv Z291dF90ZXN0ZXJfYWNjb3VudChzZWxmLnRlc3RlcikKKworICAgICAgICAg ICAgIyBMb2dpbiB0aGUgQWRtaW5pc3RyYXRvciBiZWZvcmUgZGVsZXRpbmcg bm9ybWFsIHVzZXIKKyAgICAgICAgICAgIHV0aWxzLmxvZ2luX3Rlc3Rlcl9h Y2NvdW50KHNlbGYudGVzdGVyKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBz ZWxmLnRlc3Rlci5kZWxldGUoJy91c2VyX21hbmFnZW1lbnQvdXNlci8yJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv bGxvd19yZWRpcmVjdHM9VHJ1ZSkKKyAgICAgICAgICAgIGFzc2VydCByZXNw b25zZS5zdGF0dXNfY29kZSA9PSAyMDAKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIGNoYW5nZV9wYXNzd29yZChzZWxmKQorCisgICAgZGVmIHRlYXJE b3duKHNlbGYpOgorICAgICAgICB1dGlscy5sb2dpbl90ZXN0ZXJfYWNjb3Vu dChzZWxmLnRlc3RlcikKKwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJv d3Nlci90ZXN0cy91dGlscy5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVz dHMvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMTg1NDhjZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvdGVzdHMvdXRpbHMucHkKQEAgLTAsMCArMSwyMSBAQAorIyAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAjcGdBZG1pbiA0IC0g UG9zdGdyZVNRTCBUb29scworIworIyAjQ29weXJpZ2h0IChDKSAyMDEzIC0g MjAxNiwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyAjVGhpcyBz b2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNl bmNlCisjCisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwor ZGVmIGNoYW5nZV9wYXNzd29yZChzZWxmKToKKyAgICByZXNwb25zZSA9IHNl bGYudGVzdGVyLmdldCgnL2NoYW5nZScsIGZvbGxvd19yZWRpcmVjdHM9VHJ1 ZSkKKyAgICBzZWxmLmFzc2VydEluKCdwZ0FkbWluIDQgUGFzc3dvcmQgQ2hh bmdlJywgcmVzcG9uc2UuZGF0YS5kZWNvZGUoCisgICAgICAgICd1dGYtOCcp KQorCisgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5wb3N0KCcvY2hhbmdl JywgZGF0YT1kaWN0KAorICAgICAgICBwYXNzd29yZD1zZWxmLnBhc3N3b3Jk LAorICAgICAgICBuZXdfcGFzc3dvcmQ9c2VsZi5uZXdfcGFzc3dvcmQsCisg ICAgICAgIG5ld19wYXNzd29yZF9jb25maXJtPXNlbGYubmV3X3Bhc3N3b3Jk X2NvbmZpcm0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b2xsb3dfcmVkaXJlY3RzPVRydWUpCisgICAgc2VsZi5hc3NlcnRJbihzZWxm LnJlc3BkYXRhLCByZXNwb25zZS5kYXRhLmRlY29kZSgndXRmLTgnKSkKXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcmVn cmVzc2lvbi90ZXN0X2FkdmFuY2VkX2NvbmZpZy5qc29uLmluIGIvd2ViL3Jl Z3Jlc3Npb24vdGVzdF9hZHZhbmNlZF9jb25maWcuanNvbi5pbgppbmRleCBj MGQyNzhiLi44YjY3OWFkIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi90 ZXN0X2FkdmFuY2VkX2NvbmZpZy5qc29uLmluCisrKyBiL3dlYi9yZWdyZXNz aW9uL3Rlc3RfYWR2YW5jZWRfY29uZmlnLmpzb24uaW4KQEAgLTE5NCw2ICsx OTQsNTAgQEAKICAgewogICAgICAgInRlc3RfY29tbWVudCI6ICJUaGlzIGlz IGRiIHVwZGF0ZSBjb21tZW50IgogICB9Ci0gXQorIF0sCisgInRlc3RfbHJf Y3JlZGVudGlhbHMiOiB7CisgICAgICAidGVzdF9jYW5fbG9naW4iOiAidHJ1 ZSIsCisgICAgICAidGVzdF9jb25uX2xpbWl0IjogLTEsCisgICAgICAidGVz dF9jcmVhdGVfcm9sZSI6ICJ0cnVlIiwKKyAgICAgICJ0ZXN0X3JvbGVfaW5o ZXJpdCI6ICJ0cnVlIiwKKyAgICAgICJ0ZXN0X3JvbGVfbWVtYmVyc2hpcCI6 IFtdLAorICAgICAgInRlc3RfbHJfbmFtZSI6ICAidGVzdGxyZzEiLAorICAg ICAgInRlc3RfbHJfcGFzc3dvcmQiOiAiZWRiIiwKKyAgICAgICJ0ZXN0X2xy X3ZhbGlkaXR5IjogIjEyLzI3LzIwMTYiLAorICAgICAgInRlc3Rfc2VjX2xh YmxlIjogW10sCisgICAgICAidGVzdF92YXJpYWJsZSI6WworICAgICAgICAg ICAgICAgICAgICAgICAgeyJuYW1lIjoid29ya19tZW0iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiZGF0YWJhc2UiOiJwb3N0Z3JlcyIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6NjUKKyAgICAgICAgICAg ICAgICAgICAgICAgIH1dCisgICAgfSwKKyAgInRlc3RfbHJfdXBkYXRlX2Rh dGEiOiB7CisgICAgICAidGVzdF9jb21tZW50IjogIlRoaXMgaXMgZGIgdXBk YXRlIGNvbW1lbnQiCisgIH0sCisKKyAgInRlc3RfdGFibGVzcGNfY3JlZGVu dGlhbHMiOlt7CisgICAgInRlc3RfdGJsc3BhY2VfbmFtZSI6ICJ0ZXN0X3Rh Ymxlc3BhY2UiLAorICAgICJ0ZXN0X3NwY19zZWNsYWJsZSI6IFtdLAorICAg ICJ0ZXN0X3NwY19hY2wiOiBbCisgICAgICB7CisgICAgICAgICJncmFudGVl IjoicG9zdGdyZXMiLAorICAgICAgICAiZ3JhbnRvciI6InBvc3RncmVzIiwK KyAgICAgICAgInByaXZpbGVnZXMiOlsKKyAgICAgICAgICB7CisgICAgICAg ICAgICAicHJpdmlsZWdlX3R5cGUiOiJDIiwKKyAgICAgICAgICAgICJwcml2 aWxlZ2UiOnRydWUsCisgICAgICAgICAgICAid2l0aF9ncmFudCI6ZmFsc2UK KyAgICAgICAgICB9CisgICAgICAgIF0KKyAgICAgIH0KKyAgICBdLAorICAg ICJ0ZXN0X3NwY19sb2NhdGlvbiI6ICIvTGlicmFyeS9Qb3N0Z3JlU1FMLzku Ni9kYXRhIiwKKyAgICAidGVzdF9zcGNfb3B0cyI6IFtdLAorICAgICJ0ZXN0 X3NwY191c2VyIjogInBvc3RncmVzIgorICB9XSwKKworICAgICJ0ZXN0X3Ri c3BjX3VwZGF0ZV9kYXRhIjogeworICAgICJ0ZXN0X2NvbW1lbnQiOiAiVGhp cyBpcyB0YWJsZXNwYWNlIHVwZGF0ZSBjb21tZW50IgorICB9CiAKLX0KXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS93ZWIv cmVncmVzc2lvbi90ZXN0X2NvbmZpZy5qc29uLmluIGIvd2ViL3JlZ3Jlc3Np b24vdGVzdF9jb25maWcuanNvbi5pbgppbmRleCAwMjhkMWU3Li45ZmNmMTk3 IDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi90ZXN0X2NvbmZpZy5qc29u LmluCisrKyBiL3dlYi9yZWdyZXNzaW9uL3Rlc3RfY29uZmlnLmpzb24uaW4K QEAgLTQsNiArNCwxMSBAQAogICAgICJ0ZXN0X2xvZ2luX3Bhc3N3b3JkIjog IlBBU1NXT1JEIiwKICAgICAidGVzdF9sb2dpbl91c2VybmFtZSI6ICJVU0VS QEVYQU1QTEUuQ09NIgogICB9LAorICAicGdBZG1pbjRfdGVzdF91c2VyX2Ny ZWRlbnRpYWxzIjogeworICAgICJ0ZXN0X25ld19wYXNzd29yZCI6ICJORVdQ QVNTV09SRCIsCisgICAgInRlc3RfbG9naW5fcGFzc3dvcmQiOiAiUEFTU1dP UkQiLAorICAgICJ0ZXN0X2xvZ2luX3VzZXJuYW1lIjogIlVTRVJARVhBTVBM RS5DT00iCisgIH0sCiAgICJ0ZXN0X3NlcnZlcl9ncm91cCI6IDEsCiAgICJ0 ZXN0X3NlcnZlcl9jcmVkZW50aWFscyI6IFsKICAgICB7CmRpZmYgLS1naXQg YS93ZWIvcmVncmVzc2lvbi90ZXN0X3V0aWxzLnB5IGIvd2ViL3JlZ3Jlc3Np b24vdGVzdF91dGlscy5weQppbmRleCA2YmUyYmIyLi4xOGM1OTgxIDEwMDY0 NAotLS0gYS93ZWIvcmVncmVzc2lvbi90ZXN0X3V0aWxzLnB5CisrKyBiL3dl Yi9yZWdyZXNzaW9uL3Rlc3RfdXRpbHMucHkKQEAgLTE5LDYgKzE5LDIwIEBA IFNFUlZFUl9VUkwgPSAnL2Jyb3dzZXIvc2VydmVyL29iai8nCiBTRVJWRVJf Q09OTkVDVF9VUkwgPSAnYnJvd3Nlci9zZXJ2ZXIvY29ubmVjdC8nCiBEQVRB QkFTRV9VUkwgPSAnL2Jyb3dzZXIvZGF0YWJhc2Uvb2JqLycKIERBVEFCQVNF X0NPTk5FQ1RfVVJMID0gJ2Jyb3dzZXIvZGF0YWJhc2UvY29ubmVjdC8nCitS T0xFX1VSTCA9ICcvYnJvd3Nlci9yb2xlL29iai8nCitUQUJMRV9TUEFDRV9V UkwgPSAnL2Jyb3dzZXIvdGFibGVzcGFjZS9vYmovJworCisKK2RlZiBnZXRf cGlja2xlX2lkX2RpY3QoKToKKyAgICAiIiJUaGlzIGZ1bmN0aW9uIHJldHVy bnMgdGhlIGVtcHR5IGRpY3Qgb2Ygc2VydmVyIGNvbmZpZyBkYXRhIiIiCisK KyAgICBwaWNrbGVfaWRfZGljdCA9IHsKKyAgICAgICAgInNpZCI6IFtdLCAg IyBzZXJ2ZXIKKyAgICAgICAgImRpZCI6IFtdLCAgIyBkYXRhYmFzZQorICAg ICAgICAibHJpZCI6IFtdLCAgIyByb2xlCisgICAgICAgICJ0YWJsZV9zcGFj ZV9pZCI6IFtdICAjIHRhYmxlc3BhY2UKKyAgICB9CisgICAgcmV0dXJuIHBp Y2tsZV9pZF9kaWN0CiAKIAogZGVmIGdldF9pZHModXJsPXBpY2tsZV9wYXRo KToKQEAgLTM0LDEwICs0OCwyMiBAQCBkZWYgZ2V0X2lkcyh1cmw9cGlja2xl X3BhdGgpOgogICAgIG91dHB1dCA9IG9wZW4odXJsLCAncmInKQogICAgIGlk cyA9IHBpY2tsZS5sb2FkKG91dHB1dCkKICAgICBvdXRwdXQuY2xvc2UoKQot CiAgICAgcmV0dXJuIGlkcwogCiAKK2RlZiB2ZXJpZnlfc2VydmVyKHRlc3Rl ciwgc2VydmVyX2dyb3VwLCBzZXJ2ZXJfaWQpOgorICAgICIiIlRoaXMgZnVu Y3Rpb24gdmVyaWZpZXMgdGhhdCBzZXJ2ZXIgaXMgY29ubmVjdGluZyBvciBu b3QiIiIKKworICAgIHJlc3BvbnNlID0gdGVzdGVyLnBvc3QoCisgICAgICAg ICd7MH17MX0vezJ9Jy5mb3JtYXQoU0VSVkVSX0NPTk5FQ1RfVVJMLCBzZXJ2 ZXJfZ3JvdXAsIHNlcnZlcl9pZCksCisgICAgICAgIGRhdGE9ZGljdChwYXNz d29yZD1jb25maWdfZGF0YQorICAgICAgICBbJ3Rlc3Rfc2VydmVyX2NyZWRl bnRpYWxzJ11bMF0KKyAgICAgICAgWyd0ZXN0X2RiX3Bhc3N3b3JkJ10pLAor ICAgICAgICBmb2xsb3dfcmVkaXJlY3RzPVRydWUpCisgICAgc3J2X2Nvbm5l Y3QgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVjb2RlKCd1dGYtOCcp KQorICAgIHJldHVybiBzcnZfY29ubmVjdAorCisKIGRlZiB2ZXJpZnlfZGF0 YWJhc2UodGVzdGVyLCBzZXJ2ZXJfZ3JvdXAsIHNlcnZlcl9pZCwgZGJfaWQp OgogICAgICIiIgogICAgIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCBk YXRhYmFzZSBpcyBleGlzdHMgYW5kIHdoZXRoZXIgaXQgY29ubmVjdApAQCAt MTU4LDYgKzE4NCw3IEBAIGRlZiBsb2dvdXRfdGVzdGVyX2FjY291bnQodGVz dGVyKToKICAgICByZXNwb25zZSA9IHRlc3Rlci5nZXQoJy9sb2dvdXQnKQog CiAKKyMgQ29uZmlnIGRhdGEgZm9yIHBhcmVudF9pZC5wa2wKIGRlZiBnZXRf Y29uZmlnX2RhdGEoKToKICAgICAiIiIKICAgICBUaGlzIGZ1bmN0aW9uIGdl dCB0aGUgZGF0YSByZWxhdGVkIHRvIHNlcnZlciBncm91cCBhbmQgZGF0YWJh c2UKQEAgLTE2OCwxMiArMTk1LDcgQEAgZGVmIGdldF9jb25maWdfZGF0YSgp OgogICAgICIiIgogCiAgICAgZGJfZGF0YSA9IFtdCi0KLSAgICBwaWNrbGVf aWRfZGljdCA9IHsKLSAgICAgICAgInNpZCI6IFtdLCAgIyBzZXJ2ZXIKLSAg ICAgICAgImRpZCI6IFtdICAjIGRhdGFiYXNlCi0gICAgfQotCisgICAgcGlj a2xlX2lkX2RpY3QgPSBnZXRfcGlja2xlX2lkX2RpY3QoKQogICAgIHNlcnZl cl9ncm91cCA9IGNvbmZpZ19kYXRhWyd0ZXN0X3NlcnZlcl9ncm91cCddCiAK ICAgICBmb3Igc3J2IGluIGNvbmZpZ19kYXRhWyd0ZXN0X3NlcnZlcl9jcmVk ZW50aWFscyddOgpAQCAtMjA1LDcgKzIyNyw3IEBAIGRlZiB3cml0ZV9wYXJl bnRfaWQocmVzcG9uc2VfZGF0YSwgcGlja2xlX2lkX2RpY3QpOgogICAgICAg ICBleGlzdGVkX3NlcnZlcl9pZCA9IG9wZW4ocGlja2xlX3BhdGgsICdyYicp CiAgICAgICAgIHBpY2tsZV9pZF9kaWN0ID0gcGlja2xlLmxvYWQoZXhpc3Rl ZF9zZXJ2ZXJfaWQpCiAKLSAgICBwaWNrbGVfaWRfZGljdFsic2lkIl0uYXBw ZW5kKHNlcnZlcl9pZCkKKyAgICBwaWNrbGVfaWRfZGljdFsic2lkIl0uYXBw ZW5kKHN0cihzZXJ2ZXJfaWQpKQogICAgIG91dHB1dCA9IG9wZW4ocGlja2xl X3BhdGgsICd3YicpCiAgICAgcGlja2xlLmR1bXAocGlja2xlX2lkX2RpY3Qs IG91dHB1dCkKICAgICBvdXRwdXQuY2xvc2UoKQpAQCAtMjIzLDIwICsyNDUs MjIgQEAgZGVmIHdyaXRlX2RiX3BhcmVudF9pZChyZXNwb25zZV9kYXRhKToK IAogICAgIGRiX2lkID0gcmVzcG9uc2VfZGF0YVsnbm9kZSddWydfaWQnXQog ICAgIHNlcnZlcl9pZCA9IHJlc3BvbnNlX2RhdGFbJ25vZGUnXVsnX3BpZCdd CisgICAgIyBUT0RPOiBtb2RpZnkgbG9naWMgdG8gd3JpdGUgaW4gZmlsZSAv IGZpbGUgZXhpc3RzIG9yIGNyZWF0ZSBuZXcKKyAgICBwaWNrbGVfaWRfZGlj dCA9IGdldF9waWNrbGVfaWRfZGljdCgpCiAgICAgaWYgb3MucGF0aC5pc2Zp bGUocGlja2xlX3BhdGgpOgogICAgICAgICBleGlzdGluZ19zZXJ2ZXJfaWQg PSBvcGVuKHBpY2tsZV9wYXRoLCAncmInKQogICAgICAgICB0b2xfc2VydmVy X2lkID0gcGlja2xlLmxvYWQoZXhpc3Rpbmdfc2VydmVyX2lkKQogICAgICAg ICBwaWNrbGVfaWRfZGljdCA9IHRvbF9zZXJ2ZXJfaWQKLSAgICAgICAgaWYg J2RpZCcgaW4gcGlja2xlX2lkX2RpY3Q6Ci0gICAgICAgICAgICBpZiBwaWNr bGVfaWRfZGljdFsnZGlkJ106Ci0gICAgICAgICAgICAgICAgIyBBZGQgdGhl IGRiX2lkIGFzIHZhbHVlIGluIGRpY3QKLSAgICAgICAgICAgICAgICBwaWNr bGVfaWRfZGljdFsiZGlkIl1bMF0udXBkYXRlKHtzZXJ2ZXJfaWQ6IGRiX2lk fSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBDcmVh dGUgbmV3IGRpY3Qgd2l0aCBzZXJ2ZXJfaWQgYW5kIGRiX2lkCi0gICAgICAg ICAgICAgICAgcGlja2xlX2lkX2RpY3RbImRpZCJdLmFwcGVuZCh7c2VydmVy X2lkOiBkYl9pZH0pCi0gICAgICAgIGRiX291dHB1dCA9IG9wZW4ocGlja2xl X3BhdGgsICd3YicpCi0gICAgICAgIHBpY2tsZS5kdW1wKHBpY2tsZV9pZF9k aWN0LCBkYl9vdXRwdXQpCi0gICAgICAgIGRiX291dHB1dC5jbG9zZSgpCisg ICAgaWYgJ2RpZCcgaW4gcGlja2xlX2lkX2RpY3Q6CisgICAgICAgIGlmIHBp Y2tsZV9pZF9kaWN0WydkaWQnXToKKyAgICAgICAgICAgICMgQWRkIHRoZSBk Yl9pZCBhcyB2YWx1ZSBpbiBkaWN0CisgICAgICAgICAgICBwaWNrbGVfaWRf ZGljdFsiZGlkIl1bMF0udXBkYXRlKHtzZXJ2ZXJfaWQ6IGRiX2lkfSkKKyAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQ3JlYXRlIG5ldyBkaWN0IHdp dGggc2VydmVyX2lkIGFuZCBkYl9pZAorICAgICAgICAgICAgcGlja2xlX2lk X2RpY3RbImRpZCJdLmFwcGVuZCh7c2VydmVyX2lkOiBkYl9pZH0pCisgICAg ZGJfb3V0cHV0ID0gb3BlbihwaWNrbGVfcGF0aCwgJ3diJykKKyAgICBwaWNr bGUuZHVtcChwaWNrbGVfaWRfZGljdCwgZGJfb3V0cHV0KQorICAgIGRiX291 dHB1dC5jbG9zZSgpCiAKIAogZGVmIGRlbGV0ZV9wYXJlbnRfaWRfZmlsZSgp OgpAQCAtMjY1LDcgKzI4OSw3IEBAIGRlZiBhZGRfc2VydmVyKHRlc3Rlcik6 CiAgICAgZm9yIGRiX2RldGFpbCBpbiBkYl9kYXRhOgogICAgICAgICByZXNw b25zZSA9IHRlc3Rlci5wb3N0KHVybCwgZGF0YT1qc29uLmR1bXBzKGRiX2Rl dGFpbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVu dF90eXBlPSdodG1sL2pzb24nKQotICAgICAgICByZXNwb25zZV9kYXRhID0g anNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29kZSgpKQorICAgICAgICBy ZXNwb25zZV9kYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29k ZSgndXRmLTgnKSkKICAgICAgICAgd3JpdGVfcGFyZW50X2lkKHJlc3BvbnNl X2RhdGEsIHBpY2tsZV9pZF9kaWN0KQogCiAKQEAgLTI4OSwxMiArMzEzLDE0 IEBAIGRlZiBnZXRfc2VydmVyKHRlc3Rlcik6CiAgICAgICAgIHJlc3BvbnNl X2RhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVjb2RlKCkpCiAK IAotZGVmIGNvbm5lY3Rfc2VydmVyKHRlc3Rlcik6CitkZWYgY29ubmVjdF9z ZXJ2ZXIodGVzdGVyLCBhZGRfZGJfZmxhZz1GYWxzZSk6CiAgICAgIiIiCiAg ICAgVGhpcyBmdW5jdGlvbiB1c2VkIHRvIGNvbm5lY3QgYWRkZWQgc2VydmVy CiAKICAgICA6cGFyYW0gdGVzdGVyOnRlc3QgY2xpZW50IG9iamVjdAogICAg IDp0eXBlIHRlc3RlcjogZmxhc2sgdGVzdCBvYmplY3QKKyAgICA6cGFyYW0g YWRkX2RiX2ZsYWc6IGZsYWcgZm9yIGRiIGFkZCB0ZXN0IGNhc2UKKyAgICA6 dHlwZSBhZGRfZGJfZmxhZzogYm9vbAogICAgIDpyZXR1cm46IHNlcnZlcl9j b25uZWN0LCBzZXJ2ZXJfZ3JvdXAsIHNlcnZlcl9pZAogICAgIDpydHlwZTog c2VydmVyX2Nvbm5lY3Q6ZGljdCwgc2VydmVyX2dyb3VwOmRpY3QsIHNlcnZl cl9pZDpzdHIKICAgICAiIiIKQEAgLTMxNSw5ICszNDEsMTAgQEAgZGVmIGNv bm5lY3Rfc2VydmVyKHRlc3Rlcik6CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFsndGVzdF9zZXJ2ZXJfY3JlZGVudGlhbHMnXVswXQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3RfZGJf cGFzc3dvcmQnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9sbG93X3JlZGlyZWN0cz1UcnVlKQotICAgICAgICBzZXJ2ZXJfY29ubmVj dF9kZXRhaWwgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVjb2RlKCkp Ci0gICAgICAgIGNvbm5lY3RfZGF0YWJhc2UodGVzdGVyLCBzZXJ2ZXJfY29u bmVjdF9kZXRhaWwsIHNlcnZlcl9pZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICBzZXJ2ZXJfZ3JvdXApCisgICAgICAgIHNlcnZlcl9jb25uZWN0X2Rl dGFpbCA9IGpzb24ubG9hZHMocmVzcG9uc2UuZGF0YS5kZWNvZGUoJ3V0Zi04 JykpCisgICAgICAgIGlmIG5vdCBhZGRfZGJfZmxhZzoKKyAgICAgICAgICAg IGNvbm5lY3RfZGF0YWJhc2UodGVzdGVyLCBzZXJ2ZXJfY29ubmVjdF9kZXRh aWwsIHNlcnZlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2VydmVyX2dyb3VwKQogICAgICAgICBzZXJ2ZXJfY29ubmVjdC5hcHBlbmQo c2VydmVyX2Nvbm5lY3RfZGV0YWlsKQogICAgICAgICBzZXJ2ZXJzLmFwcGVu ZChzZXJ2ZXJfaWQpCiAgICAgcmV0dXJuIHNlcnZlcl9jb25uZWN0LCBzZXJ2 ZXJfZ3JvdXAsIHNlcnZlcnMKQEAgLTM0NSw3ICszNzIsNyBAQCBkZWYgY29u bmVjdF9kYXRhYmFzZSh0ZXN0ZXIsIHNlcnZlcl9jb25uZWN0LCBzZXJ2ZXJf aWQsIHNlcnZlcl9ncm91cCk6CiAgICAgICAgICAgICBEQVRBQkFTRV9VUkwg KyBzdHIoc2VydmVyX2dyb3VwKSArICIvIiArIHNlcnZlcl9pZCArICIvIiwK ICAgICAgICAgICAgIGRhdGE9anNvbi5kdW1wcyhkYl9kYXRhKSwKICAgICAg ICAgICAgIGNvbnRlbnRfdHlwZT0naHRtbC9qc29uJykKLSAgICAgICAgcmVz cG9uc2VfZGF0YSA9IGpzb24ubG9hZHMoZGJfcmVzcG9uc2UuZGF0YS5kZWNv ZGUoKSkKKyAgICAgICAgcmVzcG9uc2VfZGF0YSA9IGpzb24ubG9hZHMoZGJf cmVzcG9uc2UuZGF0YS5kZWNvZGUoJ3V0Zi04JykpCiAgICAgICAgIHdyaXRl X2RiX3BhcmVudF9pZChyZXNwb25zZV9kYXRhKQogCiAKQEAgLTM2Niw3ICsz OTMsNyBAQCBkZWYgZGVsZXRlX3NlcnZlcih0ZXN0ZXIpOgogICAgIGZvciBz ZXJ2ZXJfaWQgaW4gc2VydmVyX2lkczoKICAgICAgICAgcmVzcG9uc2UgPSB0 ZXN0ZXIuZGVsZXRlKHVybCArIHN0cihzZXJ2ZXJfaWQpKQogICAgICAgICBh c3NlcnQgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwCi0gICAgICAgIHJl c3BvbnNlX2RhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVjb2Rl KCkpCisgICAgICAgIHJlc3BvbnNlX2RhdGEgPSBqc29uLmxvYWRzKHJlc3Bv bnNlLmRhdGEuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgICBhc3NlcnQgcmVz cG9uc2VfZGF0YVsnc3VjY2VzcyddID09IDEKIAogCkBAIC0zOTUsMyArNDIy LDMwOSBAQCBkZWYgZGVsZXRlX2RhdGFiYXNlKHRlc3Rlcik6CiAgICAgICAg IGFzc2VydCByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDAKICAgICAgICAg cmVzcG9uc2VfZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuZGF0YS5kZWNv ZGUoJ3V0Zi04JykpCiAgICAgICAgIGFzc2VydCByZXNwb25zZV9kYXRhWydz dWNjZXNzJ10gPT0gMQorCisKKyMgUm9sZXMgdXRpbGl0eQorZGVmIHZlcmlm eV9yb2xlKHRlc3Rlciwgc2VydmVyX2dyb3VwLCBzZXJ2ZXJfaWQsIHJvbGVf aWQpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIEdF VCBBUEkgZm9yIHJvbGUgdG8gdmVyaWZ5CisKKyAgICA6cGFyYW0gdGVzdGVy OiB0ZXN0IGNsaWVudAorICAgIDp0eXBlIHRlc3RlcjogZmxhc2sgdGVzdCBj bGllbnQgb2JqZWN0CisgICAgOnBhcmFtIHNlcnZlcl9ncm91cDogc2VydmVy IGdyb3VwIGlkCisgICAgOnR5cGUgc2VydmVyX2dyb3VwOiBpbnQKKyAgICA6 cGFyYW0gc2VydmVyX2lkOiBzZXJ2ZXIgaWQKKyAgICA6dHlwZSBzZXJ2ZXJf aWQ6IHN0cgorICAgIDpwYXJhbSByb2xlX2lkOiByb2xlIGlkCisgICAgOnR5 cGUgcm9sZV9pZDogaW50CisgICAgOnJldHVybjogZGljdC9Ob25lCisgICAg IiIiCisKKyAgICByZXNwb25zZSA9IHRlc3Rlci5wb3N0KAorICAgICAgICAn ezB9ezF9L3syfScuZm9ybWF0KFNFUlZFUl9DT05ORUNUX1VSTCwgc2VydmVy X2dyb3VwLCBzZXJ2ZXJfaWQpLAorICAgICAgICBkYXRhPWRpY3QocGFzc3dv cmQ9Y29uZmlnX2RhdGEKKyAgICAgICAgWyd0ZXN0X3NlcnZlcl9jcmVkZW50 aWFscyddWzBdCisgICAgICAgIFsndGVzdF9kYl9wYXNzd29yZCddKSwKKyAg ICAgICAgZm9sbG93X3JlZGlyZWN0cz1UcnVlKQorICAgIHNydl9jb25uZWN0 ID0ganNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29kZSgndXRmLTgnKSkK KyAgICBpZiBzcnZfY29ubmVjdFsnZGF0YSddWydjb25uZWN0ZWQnXToKKyAg ICAgICAgcmVzcG9uc2UgPSB0ZXN0ZXIuZ2V0KAorICAgICAgICAgICAgJ3sw fXsxfS97Mn0vezN9Jy5mb3JtYXQoUk9MRV9VUkwsIHNlcnZlcl9ncm91cCwg c2VydmVyX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcm9sZV9pZCksCisgICAgICAgICAgICBjb250ZW50X3R5cGU9J2h0bWwv anNvbicpCisgICAgICAgIHRlbXBfcmVzcG9uc2UgPSBqc29uLmxvYWRzKHJl c3BvbnNlLmRhdGEuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICByZXR1cm4g dGVtcF9yZXNwb25zZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25l CisKKworZGVmIHRlc3RfZ2V0cm9sZSh0ZXN0ZXIpOgorICAgIGlmIG5vdCB0 ZXN0ZXI6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBhbGxfaWQgPSBn ZXRfaWRzKCkKKworICAgIHNlcnZlcl9pZHMgPSBhbGxfaWRbInNpZCJdCisg ICAgcm9sZV9pZHNfZGljdCA9IGFsbF9pZFsibHJpZCJdWzBdCisgICAgc2Vy dmVyX2dyb3VwID0gY29uZmlnX2RhdGFbJ3Rlc3Rfc2VydmVyX2dyb3VwJ10K KworICAgIHJvbGVfcmVzcG9uc2VfZGF0YSA9IFtdCisgICAgZm9yIHNlcnZl cl9pZCBpbiBzZXJ2ZXJfaWRzOgorICAgICAgICByb2xlX2lkID0gcm9sZV9p ZHNfZGljdFtpbnQoc2VydmVyX2lkKV0KKyAgICAgICAgcm9sZV9yZXNwb25z ZV9kYXRhLmFwcGVuZCgKKyAgICAgICAgICAgIHZlcmlmeV9yb2xlKHRlc3Rl ciwgc2VydmVyX2dyb3VwLCBzZXJ2ZXJfaWQsIHJvbGVfaWQpKQorICAgIHJl dHVybiByb2xlX3Jlc3BvbnNlX2RhdGEKKworCitkZWYgZ2V0X3JvbGVfZGF0 YSgpOgorICAgICIiIlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcm9sZSBk YXRhIGZyb20gY29uZmlnIGZpbGUiIiIKKworICAgIGRhdGEgPSB7CisgICAg ICAgICJyb2xjYW5sb2dpbiI6IGFkdmFuY2VkX2NvbmZpZ19kYXRhWyd0ZXN0 X2xyX2NyZWRlbnRpYWxzJ10KKyAgICAgICAgWyd0ZXN0X2Nhbl9sb2dpbidd LAorICAgICAgICAicm9sY29ubmxpbWl0IjogYWR2YW5jZWRfY29uZmlnX2Rh dGFbJ3Rlc3RfbHJfY3JlZGVudGlhbHMnXQorICAgICAgICBbJ3Rlc3RfY29u bl9saW1pdCddLAorICAgICAgICAicm9sY3JlYXRlcm9sZSI6IGFkdmFuY2Vk X2NvbmZpZ19kYXRhWyd0ZXN0X2xyX2NyZWRlbnRpYWxzJ10KKyAgICAgICAg Wyd0ZXN0X2NyZWF0ZV9yb2xlJ10sCisgICAgICAgICJyb2xpbmhlcml0Ijog YWR2YW5jZWRfY29uZmlnX2RhdGFbJ3Rlc3RfbHJfY3JlZGVudGlhbHMnXQor ICAgICAgICBbJ3Rlc3Rfcm9sZV9pbmhlcml0J10sCisgICAgICAgICJyb2xt ZW1iZXJzaGlwIjogYWR2YW5jZWRfY29uZmlnX2RhdGFbJ3Rlc3RfbHJfY3Jl ZGVudGlhbHMnXQorICAgICAgICBbJ3Rlc3Rfcm9sZV9tZW1iZXJzaGlwJ10s CisgICAgICAgICJyb2xuYW1lIjogc3RyKHV1aWQudXVpZDQoKSlbMTo4XSwK KyAgICAgICAgInJvbHBhc3N3b3JkIjogYWR2YW5jZWRfY29uZmlnX2RhdGFb J3Rlc3RfbHJfY3JlZGVudGlhbHMnXQorICAgICAgICBbJ3Rlc3RfbHJfcGFz c3dvcmQnXSwKKyAgICAgICAgInJvbHZhbGlkdW50aWwiOiBhZHZhbmNlZF9j b25maWdfZGF0YVsndGVzdF9scl9jcmVkZW50aWFscyddCisgICAgICAgIFsn dGVzdF9scl92YWxpZGl0eSddLAorICAgICAgICAic2VjbGFiZWxzIjogYWR2 YW5jZWRfY29uZmlnX2RhdGFbJ3Rlc3RfbHJfY3JlZGVudGlhbHMnXQorICAg ICAgICBbJ3Rlc3Rfc2VjX2xhYmxlJ10sCisgICAgICAgICJ2YXJpYWJsZXMi OiBhZHZhbmNlZF9jb25maWdfZGF0YVsndGVzdF9scl9jcmVkZW50aWFscydd CisgICAgICAgIFsndGVzdF92YXJpYWJsZSddCisgICAgfQorICAgIHJldHVy biBkYXRhCisKKworZGVmIGFkZF9yb2xlKHRlc3Rlciwgc2VydmVyX2Nvbm5l Y3RfcmVzcG9uc2UsIHNlcnZlcl9ncm91cCwgc2VydmVyX2lkcyk6CisgICAg IiIiCisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFkZCB0aGUgcm9s ZXMgdG8gc2VydmVyCisKKyAgICA6cGFyYW0gdGVzdGVyOiBmbGFzayB0ZXN0 IGNsaWVudAorICAgIDp0eXBlIHRlc3RlcjogZmxhc2sgdGVzdCBjbGllbnQg b2JqZWN0CisgICAgOnBhcmFtIHNlcnZlcl9jb25uZWN0X3Jlc3BvbnNlOiBz ZXJ2ZXIgY29ubmVjdCBBUEkgcmVzcG9uc2UKKyAgICA6dHlwZSBzZXJ2ZXJf Y29ubmVjdF9yZXNwb25zZTogZGljdAorICAgIDpwYXJhbSBzZXJ2ZXJfZ3Jv dXA6IHNlcnZlciBncm91cAorICAgIDp0eXBlIHNlcnZlcl9ncm91cDogaW50 CisgICAgOnBhcmFtIHNlcnZlcl9pZHM6IGxpc3Qgb2Ygc2VydmVyIGlkCisg ICAgOnR5cGUgc2VydmVyX2lkczogbGlzdAorICAgIDpyZXR1cm46IE5vbmUK KyAgICAiIiIKKworICAgIGZvciBzZXJ2ZXJfY29ubmVjdCwgc2VydmVyX2lk IGluIHppcChzZXJ2ZXJfY29ubmVjdF9yZXNwb25zZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkcyk6Cisg ICAgICAgIGlmIHNlcnZlcl9jb25uZWN0WydkYXRhJ11bJ2Nvbm5lY3RlZCdd OgorICAgICAgICAgICAgZGF0YSA9IGdldF9yb2xlX2RhdGEoKQorICAgICAg ICAgICAgcmVzcG9uc2UgPSB0ZXN0ZXIucG9zdChST0xFX1VSTCArIHN0cihz ZXJ2ZXJfZ3JvdXApICsgJy8nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsgc2VydmVyX2lkICsgJy8nLCBkYXRhPWpzb24uZHVtcHMo ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRlbnRfdHlwZT0naHRtbC9qc29uJykKKyAgICAgICAgICAgIGFzc2VydCBy ZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDAKKyAgICAgICAgICAgIHJlc3Bv bnNlX2RhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVjb2RlKCd1 dGYtOCcpKQorICAgICAgICAgICAgd3JpdGVfcm9sZV9pZChyZXNwb25zZV9k YXRhKQorCisKK2RlZiB3cml0ZV9yb2xlX2lkKHJlc3BvbnNlX2RhdGEpOgor ICAgICIiIgorCisgICAgOnBhcmFtIHJlc3BvbnNlX2RhdGE6CisgICAgOnJl dHVybjoKKyAgICAiIiIKKworICAgIGxyX2lkID0gcmVzcG9uc2VfZGF0YVsn bm9kZSddWydfaWQnXQorICAgIHNlcnZlcl9pZCA9IHJlc3BvbnNlX2RhdGFb J25vZGUnXVsnX3BpZCddCisgICAgcGlja2xlX2lkX2RpY3QgPSBnZXRfcGlj a2xlX2lkX2RpY3QoKQorICAgICMgVE9ETzogbW9kaWZ5IGxvZ2ljIHRvIHdy aXRlIGluIGZpbGUgLyBmaWxlIGV4aXN0cyBvciBjcmVhdGUgbmV3IGNoZWNr CisgICAgIyBvbGQgZmlsZQorICAgIGlmIG9zLnBhdGguaXNmaWxlKHBpY2ts ZV9wYXRoKToKKyAgICAgICAgZXhpc3Rpbmdfc2VydmVyX2lkID0gb3Blbihw aWNrbGVfcGF0aCwgJ3JiJykKKyAgICAgICAgdG9sX3NlcnZlcl9pZCA9IHBp Y2tsZS5sb2FkKGV4aXN0aW5nX3NlcnZlcl9pZCkKKyAgICAgICAgcGlja2xl X2lkX2RpY3QgPSB0b2xfc2VydmVyX2lkCisgICAgaWYgJ2xyaWQnIGluIHBp Y2tsZV9pZF9kaWN0OgorICAgICAgICBpZiBwaWNrbGVfaWRfZGljdFsnbHJp ZCddOgorICAgICAgICAgICAgIyBBZGQgdGhlIGRiX2lkIGFzIHZhbHVlIGlu IGRpY3QKKyAgICAgICAgICAgIHBpY2tsZV9pZF9kaWN0WyJscmlkIl1bMF0u dXBkYXRlKHtzZXJ2ZXJfaWQ6IGxyX2lkfSkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICMgQ3JlYXRlIG5ldyBkaWN0IHdpdGggc2VydmVyX2lkIGFu ZCBkYl9pZAorICAgICAgICAgICAgcGlja2xlX2lkX2RpY3RbImxyaWQiXS5h cHBlbmQoe3NlcnZlcl9pZDogbHJfaWR9KQorICAgIGRiX291dHB1dCA9IG9w ZW4ocGlja2xlX3BhdGgsICd3YicpCisgICAgcGlja2xlLmR1bXAocGlja2xl X2lkX2RpY3QsIGRiX291dHB1dCkKKyAgICBkYl9vdXRwdXQuY2xvc2UoKQor CisKK2RlZiBkZWxldGVfcm9sZSh0ZXN0ZXIpOgorICAgICIiIgorICAgIFRo aXMgZnVuY3Rpb24gdXNlIHRvIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgcm9sZXMg aW4gdGhlIHNlcnZlcnMKKworICAgIDpwYXJhbSB0ZXN0ZXI6IGZsYXNrIHRl c3QgY2xpZW50CisgICAgOnR5cGUgdGVzdGVyOiBmbGFzayB0ZXN0IG9iamVj dAorICAgIDpyZXR1cm46IE5vbmUKKyAgICAiIiIKKworICAgIHNydl9ncnAg PSBjb25maWdfZGF0YVsndGVzdF9zZXJ2ZXJfZ3JvdXAnXQorICAgIGFsbF9p ZCA9IGdldF9pZHMoKQorICAgIHNlcnZlcl9pZHMgPSBhbGxfaWRbInNpZCJd CisgICAgcm9sZV9pZHNfZGljdCA9IGFsbF9pZFsibHJpZCJdWzBdCisKKyAg ICBmb3Igc2VydmVyX2lkIGluIHNlcnZlcl9pZHM6CisgICAgICAgIHJvbGVf aWQgPSByb2xlX2lkc19kaWN0W2ludChzZXJ2ZXJfaWQpXQorICAgICAgICBy b2xlX3Jlc3BvbnNlID0gdmVyaWZ5X3JvbGUodGVzdGVyLCBzcnZfZ3JwLCBz ZXJ2ZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByb2xlX2lkKQorICAgICAgICBpZiBsZW4ocm9sZV9yZXNwb25zZSkgPT0g MDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm8gcm9sZXMocykg dG8gZGVsZXRlISEhIikKKyAgICAgICAgcmVzcG9uc2UgPSB0ZXN0ZXIuZGVs ZXRlKFJPTEVfVVJMICsgc3RyKHNydl9ncnApICsgJy8nICsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZXJ2ZXJfaWQpICsgJy8n ICsgc3RyKHJvbGVfaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9sbG93X3JlZGlyZWN0cz1UcnVlKQorICAgICAgICBhc3NlcnQg cmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwCisgICAgICAgIGRlbGV0ZV9y ZXNwb25zZV9kYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29k ZSgndXRmLTgnKSkKKyAgICAgICAgYXNzZXJ0IGRlbGV0ZV9yZXNwb25zZV9k YXRhWydzdWNjZXNzJ10gPT0gMQorCisKKyMgVGFibGVzcGFjZSB1dGlsaXR5 CitkZWYgZ2V0X3RhYmxlc3BhY2VfZGF0YShzZXJ2ZXJfY29ubmVjdCk6Cisg ICAgIiIiVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0YWJsZXNwYWNlIGRh dGEgZnJvbSBjb25maWcgZmlsZSIiIgorCisgICAgYWR2X2NvbmZpZ19kYXRh ID0gTm9uZQorICAgIGRhdGEgPSBOb25lCisgICAgZGJfdXNlciA9IHNlcnZl cl9jb25uZWN0WydkYXRhJ11bJ3VzZXInXVsnbmFtZSddCisKKyAgICAjIEdl dCB0aGUgY29uZmlnIGRhdGEgb2YgYXBwcm9wcmlhdGUgZGIgdXNlcgorICAg IGZvciBjb25maWdfdGVzdF9kYXRhIGluIGFkdmFuY2VkX2NvbmZpZ19kYXRh Wyd0ZXN0X3RhYmxlc3BjX2NyZWRlbnRpYWxzJ106CisgICAgICAgIGlmIGRi X3VzZXIgPT0gY29uZmlnX3Rlc3RfZGF0YVsndGVzdF9zcGNfdXNlciddOgor ICAgICAgICAgICAgYWR2X2NvbmZpZ19kYXRhID0gY29uZmlnX3Rlc3RfZGF0 YQorCisgICAgaWYgYWR2X2NvbmZpZ19kYXRhIGlzIG5vdCBOb25lOgorICAg ICAgICBkYXRhID0geworICAgICAgICAgICAgIm5hbWUiOiBzdHIodXVpZC51 dWlkNCgpKVsxOjhdLAorICAgICAgICAgICAgInNlY2xhYmVscyI6IGFkdl9j b25maWdfZGF0YVsidGVzdF9zcGNfc2VjbGFibGUiXSwKKyAgICAgICAgICAg ICJzcGNhY2wiOiBhZHZfY29uZmlnX2RhdGFbInRlc3Rfc3BjX2FjbCJdLAor ICAgICAgICAgICAgInNwY2xvY2F0aW9uIjogYWR2X2NvbmZpZ19kYXRhWyJ0 ZXN0X3NwY19sb2NhdGlvbiJdLAorICAgICAgICAgICAgInNwY29wdGlvbnMi OiBhZHZfY29uZmlnX2RhdGFbInRlc3Rfc3BjX29wdHMiXSwKKyAgICAgICAg ICAgICJzcGN1c2VyIjogYWR2X2NvbmZpZ19kYXRhWyJ0ZXN0X3NwY191c2Vy Il0KKyAgICAgICAgfQorICAgIHJldHVybiBkYXRhCisKKworZGVmIHdyaXRl X3RhYmxlc3BhY2VfaWQocmVzcG9uc2VfZGF0YSk6CisgICAgIiIiCisgICAg VGhpcyBmdW5jdGlvbiB3cml0ZSB0aGUgdGFibGUgc3BhY2UgaWQgdG8gcGFy ZW50X2lkLnBrbAorCisgICAgOnBhcmFtIHJlc3BvbnNlX2RhdGE6IGNyZWF0 ZSB0YWJsZSBzcGFjZSBBUEkgcmVzcG9uc2UgZGF0YQorICAgIDp0eXBlIHJl c3BvbnNlX2RhdGE6IGRpY3QKKyAgICA6cmV0dXJuOiBOb25lCisgICAgIiIi CisKKyAgICB0YWJsZV9zcGFjZV9pZCA9IHJlc3BvbnNlX2RhdGFbJ25vZGUn XVsnX2lkJ10KKyAgICBzZXJ2ZXJfaWQgPSByZXNwb25zZV9kYXRhWydub2Rl J11bJ19waWQnXQorICAgIHBpY2tsZV9pZF9kaWN0ID0gZ2V0X3BpY2tsZV9p ZF9kaWN0KCkKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShwaWNrbGVfcGF0aCk6 CisgICAgICAgIGV4aXN0aW5nX3NlcnZlcl9pZCA9IG9wZW4ocGlja2xlX3Bh dGgsICdyYicpCisgICAgICAgIHRvbF9zZXJ2ZXJfaWQgPSBwaWNrbGUubG9h ZChleGlzdGluZ19zZXJ2ZXJfaWQpCisgICAgICAgIHBpY2tsZV9pZF9kaWN0 ID0gdG9sX3NlcnZlcl9pZAorICAgIGlmICd0YWJsZV9zcGFjZV9pZCcgaW4g cGlja2xlX2lkX2RpY3Q6CisgICAgICAgIGlmIHBpY2tsZV9pZF9kaWN0Wyd0 YWJsZV9zcGFjZV9pZCddOgorICAgICAgICAgICAgIyBBZGQgdGhlIGRiX2lk IGFzIHZhbHVlIGluIGRpY3QKKyAgICAgICAgICAgIHBpY2tsZV9pZF9kaWN0 WyJ0YWJsZV9zcGFjZV9pZCJdWzBdLnVwZGF0ZSgKKyAgICAgICAgICAgICAg ICB7c2VydmVyX2lkOiB0YWJsZV9zcGFjZV9pZH0pCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAjIENyZWF0ZSBuZXcgZGljdCB3aXRoIHNlcnZlcl9p ZCBhbmQgZGJfaWQKKyAgICAgICAgICAgIHBpY2tsZV9pZF9kaWN0WyJ0YWJs ZV9zcGFjZV9pZCJdLmFwcGVuZCgKKyAgICAgICAgICAgICAgICB7c2VydmVy X2lkOiB0YWJsZV9zcGFjZV9pZH0pCisgICAgZGJfb3V0cHV0ID0gb3Blbihw aWNrbGVfcGF0aCwgJ3diJykKKyAgICBwaWNrbGUuZHVtcChwaWNrbGVfaWRf ZGljdCwgZGJfb3V0cHV0KQorICAgIGRiX291dHB1dC5jbG9zZSgpCisKKwor ZGVmIGFkZF90YWJsZV9zcGFjZSh0ZXN0ZXIsIHNlcnZlcl9jb25uZWN0X3Jl c3BvbnNlLCBzZXJ2ZXJfZ3JvdXAsIHNlcnZlcl9pZHMpOgorICAgICIiIgor ICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgdGhlIHJvbGVzIHRv IHNlcnZlcgorCisgICAgOnBhcmFtIHRlc3RlcjogZmxhc2sgdGVzdCBjbGll bnQKKyAgICA6dHlwZSB0ZXN0ZXI6IGZsYXNrIHRlc3QgY2xpZW50IG9iamVj dAorICAgIDpwYXJhbSBzZXJ2ZXJfY29ubmVjdF9yZXNwb25zZTogc2VydmVy IGNvbm5lY3QgQVBJIHJlc3BvbnNlCisgICAgOnR5cGUgc2VydmVyX2Nvbm5l Y3RfcmVzcG9uc2U6IGRpY3QKKyAgICA6cGFyYW0gc2VydmVyX2dyb3VwOiBz ZXJ2ZXIgZ3JvdXAKKyAgICA6dHlwZSBzZXJ2ZXJfZ3JvdXA6IGludAorICAg IDpwYXJhbSBzZXJ2ZXJfaWRzOiBsaXN0IG9mIHNlcnZlciBpZAorICAgIDp0 eXBlIHNlcnZlcl9pZHM6IGxpc3QKKyAgICA6cmV0dXJuOiBOb25lCisgICAg IiIiCisKKyAgICBmb3Igc2VydmVyX2Nvbm5lY3QsIHNlcnZlcl9pZCBpbiB6 aXAoc2VydmVyX2Nvbm5lY3RfcmVzcG9uc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZHMpOgorICAgICAg ICBpZiBzZXJ2ZXJfY29ubmVjdFsnZGF0YSddWydjb25uZWN0ZWQnXToKKyAg ICAgICAgICAgIGRhdGEgPSBnZXRfdGFibGVzcGFjZV9kYXRhKHNlcnZlcl9j b25uZWN0KQorICAgICAgICAgICAgcmVzcG9uc2UgPSB0ZXN0ZXIucG9zdChU QUJMRV9TUEFDRV9VUkwgKyBzdHIoc2VydmVyX2dyb3VwKSArICcvJworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNlcnZlcl9pZCAr ICcvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YT1qc29uLmR1bXBzKGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250ZW50X3R5cGU9J2h0bWwvanNvbicpCisgICAgICAg ICAgICBhc3NlcnQgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwCisgICAg ICAgICAgICByZXNwb25zZV9kYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5k YXRhLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgICAgIHdyaXRlX3RhYmxl c3BhY2VfaWQocmVzcG9uc2VfZGF0YSkKKworCitkZWYgdmVyaWZ5X3RhYmxl X3NwYWNlKHRlc3Rlciwgc2VydmVyX2dyb3VwLCBzZXJ2ZXJfaWQsIHRhYmxl c3BhY2VfaWQpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMg dGhlIEdFVCBBUEkgZm9yIHJvbGUgdG8gdmVyaWZ5CisKKyAgICA6cGFyYW0g dGVzdGVyOiB0ZXN0IGNsaWVudAorICAgIDp0eXBlIHRlc3RlcjogZmxhc2sg dGVzdCBjbGllbnQgb2JqZWN0CisgICAgOnBhcmFtIHNlcnZlcl9ncm91cDog c2VydmVyIGdyb3VwIGlkCisgICAgOnR5cGUgc2VydmVyX2dyb3VwOiBpbnQK KyAgICA6cGFyYW0gc2VydmVyX2lkOiBzZXJ2ZXIgaWQKKyAgICA6dHlwZSBz ZXJ2ZXJfaWQ6IHN0cgorICAgIDpwYXJhbSB0YWJsZXNwYWNlX2lkOiB0YWJs ZSBzcGFjZSBpZAorICAgIDp0eXBlIHRhYmxlc3BhY2VfaWQ6IGludAorICAg IDpyZXR1cm46IGRpY3QvTm9uZQorICAgICIiIgorCisgICAgcmVzcG9uc2Ug PSB0ZXN0ZXIucG9zdCgKKyAgICAgICAgJ3swfXsxfS97Mn0nLmZvcm1hdChT RVJWRVJfQ09OTkVDVF9VUkwsIHNlcnZlcl9ncm91cCwgc2VydmVyX2lkKSwK KyAgICAgICAgZGF0YT1kaWN0KHBhc3N3b3JkPWNvbmZpZ19kYXRhCisgICAg ICAgIFsndGVzdF9zZXJ2ZXJfY3JlZGVudGlhbHMnXVswXQorICAgICAgICBb J3Rlc3RfZGJfcGFzc3dvcmQnXSksCisgICAgICAgIGZvbGxvd19yZWRpcmVj dHM9VHJ1ZSkKKyAgICBzcnZfY29ubmVjdCA9IGpzb24ubG9hZHMocmVzcG9u c2UuZGF0YS5kZWNvZGUoJ3V0Zi04JykpCisgICAgaWYgc3J2X2Nvbm5lY3Rb J2RhdGEnXVsnY29ubmVjdGVkJ106CisgICAgICAgIHJlc3BvbnNlID0gdGVz dGVyLmdldCgKKyAgICAgICAgICAgICd7MH17MX0vezJ9L3szfScuZm9ybWF0 KFRBQkxFX1NQQUNFX1VSTCwgc2VydmVyX2dyb3VwLCBzZXJ2ZXJfaWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNwYWNl X2lkKSwKKyAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0naHRtbC9qc29uJykK KyAgICAgICAgdGVtcF9yZXNwb25zZSA9IGpzb24ubG9hZHMocmVzcG9uc2Uu ZGF0YS5kZWNvZGUoJ3V0Zi04JykpCisgICAgICAgIHJldHVybiB0ZW1wX3Jl c3BvbnNlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitk ZWYgZGVsZXRlX3RhYmxlX3NwYWNlKHRlc3Rlcik6CisgICAgIiIiCisgICAg VGhpcyBmdW5jdGlvbiB1c2UgdG8gZGVsZXRlIHRoZSBleGlzdGluZyB0YWJs ZXNwYWNlIGluIHRoZSBzZXJ2ZXJzCisKKyAgICA6cGFyYW0gdGVzdGVyOiBm bGFzayB0ZXN0IGNsaWVudAorICAgIDp0eXBlIHRlc3RlcjogZmxhc2sgdGVz dCBvYmplY3QKKyAgICA6cmV0dXJuOiBOb25lCisgICAgIiIiCisKKyAgICBz cnZfZ3JwID0gY29uZmlnX2RhdGFbJ3Rlc3Rfc2VydmVyX2dyb3VwJ10KKyAg ICBhbGxfaWQgPSBnZXRfaWRzKCkKKyAgICBzZXJ2ZXJfaWRzID0gYWxsX2lk WyJzaWQiXQorICAgIHRhYmxlc3BhY2VfaWRzX2RpY3QgPSBhbGxfaWRbInRh YmxlX3NwYWNlX2lkIl1bMF0KKworICAgIGZvciBzZXJ2ZXJfaWQgaW4gc2Vy dmVyX2lkczoKKyAgICAgICAgdGFibGVzcGFjZV9pZCA9IHRhYmxlc3BhY2Vf aWRzX2RpY3RbaW50KHNlcnZlcl9pZCldCisgICAgICAgIHJvbGVfcmVzcG9u c2UgPSB2ZXJpZnlfdGFibGVfc3BhY2UodGVzdGVyLCBzcnZfZ3JwLCBzZXJ2 ZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGFibGVzcGFjZV9pZCkKKyAgICAgICAgaWYgbGVuKHJvbGVfcmVz cG9uc2UpID09IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5v IHRhYmxlc3BhY2UocykgdG8gZGVsZXRlISEhIikKKyAgICAgICAgcmVzcG9u c2UgPSB0ZXN0ZXIuZGVsZXRlKFRBQkxFX1NQQUNFX1VSTCArIHN0cihzcnZf Z3JwKSArICcvJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHIoc2VydmVyX2lkKSArICcvJyArIHN0cih0YWJsZXNwYWNlX2lkKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd19yZWRp cmVjdHM9VHJ1ZSkKKyAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLnN0YXR1c19j b2RlID09IDIwMAorICAgICAgICBkZWxldGVfcmVzcG9uc2VfZGF0YSA9IGpz b24ubG9hZHMocmVzcG9uc2UuZGF0YS5kZWNvZGUoJ3V0Zi04JykpCisgICAg ICAgIGFzc2VydCBkZWxldGVfcmVzcG9uc2VfZGF0YVsnc3VjY2VzcyddID09 IDEK --001a11c0360a9af563053917f1c1 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 --001a11c0360a9af563053917f1c1--