Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1et9Xc-0007wW-Su for pgadmin-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 10:09:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1et9Xa-0004aW-Us for pgadmin-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 10:09:50 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1et9Xa-0004ZT-9b for pgadmin-hackers@lists.postgresql.org; Tue, 06 Mar 2018 10:09:50 +0000 Received: from mail-oi0-x244.google.com ([2607:f8b0:4003:c06::244]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1et9XW-0003AD-34 for pgadmin-hackers@postgresql.org; Tue, 06 Mar 2018 10:09:48 +0000 Received: by mail-oi0-x244.google.com with SMTP id h23so4443640oib.5 for ; Tue, 06 Mar 2018 02:09:45 -0800 (PST) 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=84vgJV/S7nMgvUpnvM0qfuLA2XpJoOohg54ii8E3UdA=; b=kVFBxGd5DlhqOZf0T6nNSyPC2aWQZpxEOTHHBk2cr/mpOVzv3rQZ1jvJEZf0H2FGNI 5UPqC9sulK7iarCNWCSZtTqER1P/XYO5lT+1t3qd6NDsr7MUx5SPxMiuGHa/3ghSWNa9 hynId+j1omXQWtHTyMx6zCguJ+CMb6ApeAsY4759bkU4H/w8w2CHBRChnIsaDp5QXMMI DGxkhs1tkyBxu1Eb9IaYhF66T/9VBjfN0Q8PGpBpUV2dr/d4Ve6v/usEFvyvgec2irG+ JVep8octnEYpG8GFwlXyErGbcGDhD//3ofH1/nuJYAG8CORcBF2/QQkhTg2G/eRuszi/ 801A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=84vgJV/S7nMgvUpnvM0qfuLA2XpJoOohg54ii8E3UdA=; b=n3C0D7qv/HFdUo2KDDmI5XkpSbkAqfRTV3DGFl4j2IniopJDB0iQWa8y9r0c65Tb+P ZSFb/f7I3wY4Sx5N2eY5oX3nRvsRJGZTnjrZ4xrcGchUEhKHAfcCy0OybxC42f10VKET oNaYlJOnfXG43yw4F7KnYA4DppddccaVGEwU9cjkCye3ExITSvMg0VqYQqp1cLe9j4cj qPH330LO/IzjzTJmpfTeA4qjgviLyzmQ3KBs+fRJfTst/ulwiaotZqkgiKdzNHSwB0OM semyH61zySr77xigLuioLpK1Hm/zlsd08o3uzrY28gBaBTn6xwkEdkkMgOl50hmtcoXa id+Q== X-Gm-Message-State: AElRT7FJ1L6l/uco5i3RpRAT+uhXzW3y9XhBG51R7x32r1Okqyvs+2Q3 rifG7OmLCziKuKlLZG7dRjE6P05UW12zxraW97pgrA== X-Google-Smtp-Source: AG47ELvHlqJ4FaFZSdIqHgjOgcQuKZuaedtoJbmFcvEXcniw3xoAUOGKpq1M7FA2D4nwsIp1jCy0VWvJwgcCm8Lchjw= X-Received: by 10.202.218.197 with SMTP id r188mr10133286oig.203.1520330984892; Tue, 06 Mar 2018 02:09:44 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.203.154 with HTTP; Tue, 6 Mar 2018 02:09:44 -0800 (PST) In-Reply-To: References: From: Khushboo Vashi Date: Tue, 6 Mar 2018 15:39:44 +0530 Message-ID: Subject: Re: pgAdmin 4 commit: Ensure we pick up the messages from the current query To: Joao De Almeida Pereira Cc: Dave Page , Murtuza Zabuawala , pgadmin-hackers Content-Type: multipart/mixed; boundary="001a113d595a4c9f310566bba4cd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --001a113d595a4c9f310566bba4cd Content-Type: multipart/alternative; boundary="001a113d595a4c9f2c0566bba4cb" --001a113d595a4c9f2c0566bba4cb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 5, 2018 at 8:42 PM, Joao De Almeida Pereira < jdealmeidapereira@pivotal.io> wrote: > Hello Khushboo, > Looks like we are almost doen, just missing one PEP-8 issue: > =E2=86=92 pycodestyle --config=3D.pycodestyle pgadmin/tools > pgadmin/tools/sqleditor/tests/test_poll_query_tool.py:46: [E126] > continuation line over-indented for hanging indent > 1 E126 continuation line over-indented for hanging indent > 1 > > > Thanks Joao. Please find the attached updated patch. > The tests run successfully in our CI pipeline. > > Thanks > Joao > > Thanks, Khushboo > On Sun, Mar 4, 2018 at 11:51 PM Khushboo Vashi < > khushboo.vashi@enterprisedb.com> wrote: > >> On Fri, Mar 2, 2018 at 6:55 PM, Dave Page wrote: >> >>> Could you rebase this please? It no longer applies. >>> >>> Please find the attached updated patch. >> >>> Thanks. >>> >>> On Thu, Mar 1, 2018 at 5:56 AM, Khushboo Vashi < >>> khushboo.vashi@enterprisedb.com> wrote: >>> >>>> Hi Joao, >>>> >>>> Thanks for reviewing. >>>> >>>> On Wed, Feb 28, 2018 at 8:55 PM, Joao De Almeida Pereira < >>>> jdealmeidapereira@pivotal.io> wrote: >>>> >>>>> Hello Khushboo, >>>>> After reviewing the patch I have the gut feeling that we do not have >>>>> enough test coverage on this issue, specially due to the intricate wh= ile >>>>> loop and conditions around the polling. >>>>> I think that this deserve Unit tests around it, When I say Unit Test = I >>>>> am not talking about executing queries against the database, but do s= ome >>>>> stubbing of the database so that we can control the flow that we want= . >>>>> >>>> You are right. It needs more unit testing. I have checked below >>>> scenarios: >>>> 1. Returns 2 notices with data output >>>> 2. Returns 1000 notices with data output >>>> 3. No notices with data output >>>> >>>> By running above, I have checked, each time returned notices are >>>> accurate, no old notices are getting appended, it does not affect with= the >>>> amount of messages (few, none or more). Also, with the updated patch,= I >>>> have made sure that all these queries run with the single transaction = id >>>> (same connection). >>>> >>>> So, please let me know if you think I can add more things to this. >>>> >>>>> >>>>> >>>> It is a temptation to try to always do a Feature Test to test what we >>>>> want because it is "easier" to write and ultimately it is what users = see, >>>>> but while 1 Feature Test runs we can run 200 Unit Tests that give us = much >>>>> more confidence that the code is doing what we expect it to do. >>>>> >>>>> Right, so added regression tests instead of feature tests. >>>> >>>> This being said, I run the tests on the CI Pipeline and all tests pass= . >>>>> Running pycodestyle fails due to some line sizes on the >>>>> psycopg2/__init__py. I believe that it is not what you changed, but s= ince >>>>> you were changing the file it can be fixed it is just: >>>>> >>>>> pgadmin/utils/driver/psycopg2/__init__.py:1276: [E501] line too long >>>>> (81 > 79 characters) >>>>> pgadmin/utils/driver/psycopg2/__init__.py:1277: [E501] line too long >>>>> (91 > 79 characters) >>>>> pgadmin/utils/driver/psycopg2/__init__.py:1282: [E501] line too long >>>>> (81 > 79 characters) >>>>> pgadmin/utils/driver/psycopg2/__init__.py:1283: [E501] line too long >>>>> (91 > 79 characters) >>>>> 4 E501 line too long (81 > 79 characters) >>>>> >>>>> Fixed. Thanks for pointing out. >>>> >>>>> >>>>> Thanks >>>>> Joao >>>>> >>>>> >>>>> On Wed, Feb 28, 2018 at 6:49 AM Khushboo Vashi < >>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>> >>>>>> On Mon, Feb 26, 2018 at 10:02 PM, Dave Page >>>>>> wrote: >>>>>> >>>>>>> Argh, I ran some tests, but didn't spot any lost messages in the >>>>>>> tests I ran. I'll revert the patch. >>>>>>> >>>>>>> Khushboo; >>>>>>> >>>>>>> Please look at the following: >>>>>>> >>>>>>> - Fix the patch so it doesn't drop messages. >>>>>>> >>>>>> Fixed. >>>>>> By default, the notice attribute of the connection object of psycopg >>>>>> 2 only stores 50 notices. Once it reaches to 50 it starts from 1 aga= in. >>>>>> To fix this I have changed the notice attribute from list to deque t= o >>>>>> append more messages. Currently I have kept the maximum limit at a t= ime of >>>>>> the notice attribute is 100000 (in a single poll). >>>>>> >>>>>>> - Add regression tests to make sure it doesn't break in the future. >>>>>>> This may require creating one or more functions the spew out a whol= e lot of >>>>>>> notices, and then running a couple of queries and checking the outp= ut. >>>>>>> >>>>>> Added. With this regression test, the current code is failing which >>>>>> has been taken care in this patch. >>>>>> >>>>>>> - Check the messages panel on the history tab. I just noticed it >>>>>>> seems to only be showing an even smaller subset of the messages. >>>>>>> >>>>>> Tested and no issues found. >>>>>> >>>>>>> >>>>>>> >>>>>> Thanks. >>>>>>> >>>>>>> On Mon, Feb 26, 2018 at 4:23 PM, Murtuza Zabuawala < >>>>>>> murtuza.zabuawala@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Sent bit early, >>>>>>>> >>>>>>>> You can run 'VACUUM FULL VERBOSE' in query tool and verify the >>>>>>>> populated messages (pgAdmin3 vs. pgAdmin4). >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Feb 26, 2018 at 9:48 PM, Murtuza Zabuawala < >>>>>>>> murtuza.zabuawala@enterprisedb.com> wrote: >>>>>>>> >>>>>>>>> Hi Khushboo/Dave, >>>>>>>>> >>>>>>>>> With given commit, I'm again seeing the issue raised in >>>>>>>>> https://redmine.postgresql.org/issues/1523 :( >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Regards, >>>>>>>>> Murtuza Zabuawala >>>>>>>>> EnterpriseDB: http://www.enterprisedb.com >>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Feb 26, 2018 at 7:49 PM, Dave Page >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Ensure we pick up the messages from the current query and not a >>>>>>>>>> previous one. Fixes #3094 >>>>>>>>>> >>>>>>>>>> Branch >>>>>>>>>> ------ >>>>>>>>>> master >>>>>>>>>> >>>>>>>>>> Details >>>>>>>>>> ------- >>>>>>>>>> https://git.postgresql.org/gitweb?p=3Dpgadmin4.git;a=3Dcommitdif= f;h=3D >>>>>>>>>> 08b3ccc01a4d57e8ea3657f8882a53dcd1b99386 >>>>>>>>>> Author: Khushboo Vashi >>>>>>>>>> >>>>>>>>>> Modified Files >>>>>>>>>> -------------- >>>>>>>>>> web/pgadmin/utils/driver/abstract.py | 1 + >>>>>>>>>> web/pgadmin/utils/driver/psycopg2/__init__.py | 64 >>>>>>>>>> +++++++++------------------ >>>>>>>>>> 2 files changed, 21 insertions(+), 44 deletions(-) >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Dave Page >>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>> Twitter: @pgsnake >>>>>>> >>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>> The Enterprise PostgreSQL Company >>>>>>> >>>>>> >>>> >>> >>> >>> -- >>> Dave Page >>> Blog: http://pgsnake.blogspot.com >>> Twitter: @pgsnake >>> >>> EnterpriseDB UK: http://www.enterprisedb.com >>> The Enterprise PostgreSQL Company >>> >> --001a113d595a4c9f2c0566bba4cb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Mon, Mar 5, 2018 at 8:42 PM, Joao De Almeida Pereira <jd= ealmeidapereira@pivotal.io> wrote:
Hello Khushboo,
Looks like we are almost doen,= just missing one PEP-8 issue:
=E2=86=92 pycodestyle --confi= g=3D.pycodestyle pgadmin/tools
pgadmin/tools/sqleditor/tests/test_poll_query_tool.py:46: [E126] continuation line over-indented for han= ging indent
1=C2=A0 =C2=A0 =C2=A0 =C2=A0E126 continuation line ov= er-indented for hanging indent
1

<= br>
Thanks Joao.=C2=A0
Please find t= he attached updated patch.=C2=A0
The tests run successfully in our CI pipeline.

Thanks
Joao

Thanks,
Khushboo=C2=A0<= /div>
On Sun, Mar 4, 2018 at 11:51 P= M Khushboo Vashi <khushboo.vashi@enterprisedb.com> wrote:
On Fri, Mar 2, 2018 at 6:55 PM, Dave Page <dpa= ge@pgadmin.org> wrote:
Could you rebase this please? It no longer applies.

Please find the attached updated = patch.=C2=A0
Thanks.

O= n Thu, Mar 1, 2018 at 5:56 AM, Khushboo Vashi <khushboo.vash= i@enterprisedb.com> wrote:
Hi Joao,

Thanks for reviewing.
=

On Wed, Feb= 28, 2018 at 8:55 PM, Joao De Almeida Pereira <jdealmeidapereir= a@pivotal.io> wrote:
Hello Khushboo,
After reviewing the patch I have the gut fee= ling that we do not have enough test coverage on this issue, specially due = to the intricate while loop and conditions around the polling.
I = think that this deserve Unit tests around it, When I say Unit Test I am not= talking about executing queries against the database, but do some stubbing= of the database so that we can control the flow that we want.
You are right. It needs more unit testin= g. I have checked below scenarios:
1. Returns 2 notices with data= output
2. Returns 1000 notices with data output
3. No = notices with data output=C2=A0

By running above, I= have checked, each time returned notices are accurate, no old notices are = getting appended, it does not affect with the amount of messages (few, none= or more).=C2=A0 Also, with the updated patch, I have made sure that all th= ese queries run with the single transaction id (same connection).

So, please let me know if you think I can add more things t= o this.
=C2= =A0=C2=A0
It is a temptation to try to always do a Feature T= est to test what we want because it is "easier" to write and ulti= mately it is what users see, but while 1 Feature Test runs we can run 200 U= nit Tests that give us much more confidence that the code is doing what we = expect it to do.

Right, = so added regression tests instead of feature tests.=C2=A0
<= br>
Th= is being said, I run the tests on the CI Pipeline and all tests pass. Runni= ng pycodestyle fails due to some line sizes on the psycopg2/__init__py. I b= elieve that it is not what you changed, but since you were changing the fil= e it can be fixed it is just:

pgadmin/utils/d= river/psycopg2/__init__.py:1276: [E501] line too long (81 > 79 char= acters)
pgadmin/utils/driver/psycopg2/__init__.py:1277: [E50= 1] line too long (91 > 79 characters)
pgadmin/utils/driver/psy= copg2/__init__.py:1282: [E501] line too long (81 > 79 characters)
pgadmin/utils/driver/psycopg2/__init__.py:1283: [E501] line t= oo long (91 > 79 characters)
4=C2=A0 =C2=A0 =C2=A0 =C2=A0E501 = line too long (81 > 79 characters)

Fixed. Thanks for pointing out.=C2=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px= #ccc solid;padding-left:1ex">

Thanks
Joao


On Wed, Feb 28, 2018 at 6:49 AM Khushboo Vashi <khushboo.vashi@enterprisedb.= com> wrote:
On Mon, Feb 26,= 2018 at 10:02 PM, Dave Page <dpage@pgadmin.org> wrote:
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">
Argh, I r= an some tests, but didn't spot any lost messages in the tests I ran. I&= #39;ll revert the patch.

Khushboo;

<= div>Please look at the following:

- Fix the patch = so it doesn't drop messages.
=
Fixed.
By default, the notice attribute of the connection object= of psycopg 2 only stores 50 notices. Once it reaches to 50 it starts from = 1 again.
To fix this I have changed the notice attribute from lis= t to deque to append more messages. Currently I have kept the maximum limit= at a time of the notice attribute is=C2=A0100000 (in a single poll).=C2=A0=
- Add regression tests to make sure it doesn't break i= n the future. This may require creating one or more functions the spew out = a whole lot of notices, and then running a couple of queries and checking t= he output.
Added. With this regr= ession test, the current code is failing which has been taken care in this = patch.
<= div class=3D"gmail_quote">
- Check the messages panel on the history tab. I jus= t noticed it seems to only be showing an even smaller subset of the message= s.
Tested and no issu= es found.
=C2=A0
Thanks= .

On Mon, Feb 26, 2018 at 4:23 PM, Murtuza Zabuawala <= mur= tuza.zabuawala@enterprisedb.com> wrote:
Sent bit early,=C2=A0

You can run= 'VACUUM FULL VERBOSE= ' in query tool and verify the populated messages (pgAdmin3 vs. = pgAdmin4).=C2=A0


On Mon, Feb 26, 2018 at 9:48 PM, Murtuza Zabuaw= ala <murtuza.zabuawala@enterprisedb.com> wrote:
Hi K= hushboo/Dave,

With given commit, I'm again seeing the issue raised in https:= //redmine.postgresql.org/issues/1523 :(




--
Regards,
Murtuza Zabuawala
EnterpriseDB:=C2=A0= http://www.enterprisedb.com
The Enterprise PostgreSQL Compan= y


On Mon, Feb 26, 2018 at 7:49 PM, Dave Page <= span dir=3D"ltr"><dpage@pgadmin.org> wrote:
Ensure we pick up the messages from the current query an= d not a previous one. Fixes #3094

Branch
------
master

Details
-------
https://git.postgresql.org/gitweb?p=3Dpgadmin4.git;a=3Dcommitdiff;h=3D08b3ccc01a4d57e8ea3657f8882a53dcd1b99386
Author: Khushboo Vashi <khushboo.vashi@enterprisedb.com>

Modified Files
--------------
web/pgadmin/utils/driver/abstract.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= |=C2=A0 1 +
web/pgadmin/utils/driver/psycopg2/__init__.py | 64 +++++++++----------= --------
2 files changed, 21 insertions(+), 44 deletions(-)






= --
Dave Pag= e
Blog: http:/= /pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprise= db.com
The Enterprise PostgreSQL Company




--

--001a113d595a4c9f2c0566bba4cb-- --001a113d595a4c9f310566bba4cd Content-Type: text/x-patch; charset="US-ASCII"; name="RM_3094_ver4.patch" Content-Disposition: attachment; filename="RM_3094_ver4.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jefhso930 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMva2V5Ym9hcmRfc2hvcnRjdXRf dGVzdC5weSBiL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMva2V5Ym9hcmRfc2hvcnRjdXRfdGVz dC5weQppbmRleCA0NDNlZmY2Li5iYmFlMTk0IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9mZWF0 dXJlX3Rlc3RzL2tleWJvYXJkX3Nob3J0Y3V0X3Rlc3QucHkKKysrIGIvd2ViL3BnYWRtaW4vZmVh dHVyZV90ZXN0cy9rZXlib2FyZF9zaG9ydGN1dF90ZXN0LnB5CkBAIC02Miw3ICs2Miw5IEBAIGNs YXNzIEtleWJvYXJkU2hvcnRjdXRGZWF0dXJlVGVzdChCYXNlRmVhdHVyZVRlc3QpOgogICAgICAg ICAgICAgKS5rZXlfZG93bigKICAgICAgICAgICAgICAgICBrZXlfY29tYm9bMl0KICAgICAgICAg ICAgICkua2V5X3VwKAotICAgICAgICAgICAgICAgIEtleXMuQUxUCisgICAgICAgICAgICAgICAg a2V5X2NvbWJvWzBdCisgICAgICAgICAgICApLmtleV91cCgKKyAgICAgICAgICAgICAgICBrZXlf Y29tYm9bMV0KICAgICAgICAgICAgICkucGVyZm9ybSgpCiAKICAgICAgICAgICAgIHByaW50KCJF eGVjdXRpbmcgc2hvcnRjdXQ6ICIgKyBzZWxmLm5ld19zaG9ydGN1dHNbc11bJ2xvY2F0b3InXSAr CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVzdHMvdGVzdF9wb2xs X3F1ZXJ5X3Rvb2wucHkgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVzdHMvdGVzdF9w b2xsX3F1ZXJ5X3Rvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1 ZWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZXN0 cy90ZXN0X3BvbGxfcXVlcnlfdG9vbC5weQpAQCAtMCwwICsxLDExMiBAQAorIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQg KEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29m dHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKworaW1wb3J0IGpzb24KKworZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2VydmVy X2dyb3Vwcy5zZXJ2ZXJzLmRhdGFiYXNlcy50ZXN0cyBpbXBvcnQgdXRpbHMgYXMgXAorICAgIGRh dGFiYXNlX3V0aWxzCitmcm9tIHBnYWRtaW4udXRpbHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2Vu ZXJhdG9yCitmcm9tIHJlZ3Jlc3Npb24gaW1wb3J0IHBhcmVudF9ub2RlX2RpY3QKK2Zyb20gcmVn cmVzc2lvbi5weXRob25fdGVzdF91dGlscyBpbXBvcnQgdGVzdF91dGlscyBhcyB1dGlscworCisK K2NsYXNzIFRlc3RQb2xsUXVlcnlUb29sKEJhc2VUZXN0R2VuZXJhdG9yKToKKyAgICAiIiIgVGhp cyBjbGFzcyB3aWxsIHRlc3QgdGhlIHF1ZXJ5IHRvb2wgcG9sbGluZy4gIiIiCisgICAgc2NlbmFy aW9zID0gWworICAgICAgICAoJ1doZW4gcXVlcnkgdG9vbCBwb2xsaW5nIHJldHVybnMgbWVzc2Fn ZXMgd2l0aCByZXN1bHQgZGF0YS1zZXQnLAorICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICBz cWw9WworICAgICAgICAgICAgICAgICAiIiIKK0RST1AgVEFCTEUgSUYgRVhJU1RTIHRlc3RfZm9y X25vdGljZXM7CisKK0RPICQkCitCRUdJTgorICAgIFJBSVNFIE5PVElDRSAnSGVsbG8sIHdvcmxk ISc7CitFTkQgJCQ7CisKK1NFTEVDVCAnQ0hFQ0tJTkcgUE9MTElORyc7CisiIiIsCisgICAgICAg ICAgICAgICAgICIiIgorRE8gJCQKK0JFR0lOCisgICAgRk9SIGkgaW4gMS4uMTAwMCBMT09QCisg ICAgICAgIFJBSVNFIE5PVElDRSAnQ291bnQgaXMgJScsIGk7CisgICAgRU5EIExPT1A7CitFTkQg JCQ7CisKK1NFTEVDVCAnQ0hFQ0tJTkcgUE9MTElORyBGT1IgTE9ORyBNRVNTQUdFUyc7CisiIiIs CisgICAgICAgICAgICAgICAgICJTRUxFQ1QgJ0NIRUNLSU5HIFBPTExJTkcgV0lUSE9VVCBNRVNT QUdFUyc7IgorICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgZXhwZWN0ZWRfbWVzc2FnZT1b J05PVElDRTogIHRhYmxlICJ0ZXN0X2Zvcl9ub3RpY2VzIiAnICsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIiJkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcKK05PVElDRTogIEhlbGxv LCB3b3JsZCEKKyIiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLmpvaW4o WyJOT1RJQ0U6ICBDb3VudCBpcyB7MH0iLmZvcm1hdChpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTAwMSldKSArICJcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZV0sCisgICAgICAgICAgICAgZXhwZWN0 ZWRfcmVzdWx0PVsnQ0hFQ0tJTkcgUE9MTElORycsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnQ0hFQ0tJTkcgUE9MTElORyBGT1IgTE9ORyBNRVNTQUdFUycsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnQ0hFQ0tJTkcgUE9MTElORyBXSVRIT1VUIE1FU1NBR0VTJ10sCisg ICAgICAgICAgICAgcHJpbnRfbWVzc2FnZXM9WycyIE5PVElDRVMgV0lUSCBEQVRBU0VUJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMDAgTk9USUNFUyBXSVRIIERBVEFTRVQnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTk8gTk9USUNFIFdJVEggREFUQVNFVCcKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgKSkKKyAgICBdCisKKyAgICBk ZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgIiIiIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBt ZXNzYWdlcyByZXR1cm4gYnkgcXVlcnkgdG9vbCBwb2xsaW5nLiAiIiIKKyAgICAgICAgZGF0YWJh c2VfaW5mbyA9IHBhcmVudF9ub2RlX2RpY3RbImRhdGFiYXNlIl1bLTFdCisgICAgICAgIHNlbGYu c2VydmVyX2lkID0gZGF0YWJhc2VfaW5mb1sic2VydmVyX2lkIl0KKworICAgICAgICBzZWxmLmRi X2lkID0gZGF0YWJhc2VfaW5mb1siZGJfaWQiXQorICAgICAgICBkYl9jb24gPSBkYXRhYmFzZV91 dGlscy5jb25uZWN0X2RhdGFiYXNlKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdXRpbHMuU0VSVkVSX0dST1VQLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2lkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGJfaWQpCisg ICAgICAgIGlmIG5vdCBkYl9jb25bImluZm8iXSA9PSAiRGF0YWJhc2UgY29ubmVjdGVkLiI6Cisg ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBkYXRh YmFzZS4iKQorCisgICAgICAgICMgSW5pdGlhbGl6ZSBxdWVyeSB0b29sCisgICAgICAgIHVybCA9 ICcvZGF0YWdyaWQvaW5pdGlhbGl6ZS9xdWVyeV90b29sL3swfS97MX0vezJ9Jy5mb3JtYXQoCisg ICAgICAgICAgICB1dGlscy5TRVJWRVJfR1JPVVAsIHNlbGYuc2VydmVyX2lkLCBzZWxmLmRiX2lk KQorICAgICAgICByZXNwb25zZSA9IHNlbGYudGVzdGVyLnBvc3QodXJsKQorICAgICAgICBzZWxm LmFzc2VydEVxdWFscyhyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorCisgICAgICAgIHJlc3Bv bnNlX2RhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmRhdGEuZGVjb2RlKCd1dGYtOCcpKQorICAg ICAgICBzZWxmLnRyYW5zX2lkID0gcmVzcG9uc2VfZGF0YVsnZGF0YSddWydncmlkVHJhbnNJZCdd CisKKyAgICAgICAgY250ID0gMAorICAgICAgICBmb3IgcyBpbiBzZWxmLnNxbDoKKyAgICAgICAg ICAgIHByaW50KCJFeGVjdXRpbmcgYW5kIHBvbGxpbmcgd2l0aDogIiArIHNlbGYucHJpbnRfbWVz c2FnZXNbY250XSkKKyAgICAgICAgICAgICMgU3RhcnQgcXVlcnkgdG9vbCB0cmFuc2FjdGlvbgor ICAgICAgICAgICAgdXJsID0gJy9zcWxlZGl0b3IvcXVlcnlfdG9vbC9zdGFydC97MH0nLmZvcm1h dChzZWxmLnRyYW5zX2lkKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5wb3N0 KHVybCwgZGF0YT1qc29uLmR1bXBzKHsic3FsIjogc30pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0naHRtbC9qc29uJykKKworICAgICAgICAg ICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKworICAgICAg ICAgICAgIyBRdWVyeSB0b29sIHBvbGxpbmcKKyAgICAgICAgICAgIHVybCA9ICcvc3FsZWRpdG9y L3BvbGwvezB9Jy5mb3JtYXQoc2VsZi50cmFuc19pZCkKKyAgICAgICAgICAgIHJlc3BvbnNlID0g c2VsZi50ZXN0ZXIuZ2V0KHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3Bv bnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAgICAgICByZXNwb25zZV9kYXRhID0ganNvbi5s b2FkcyhyZXNwb25zZS5kYXRhLmRlY29kZSgndXRmLTgnKSkKKworICAgICAgICAgICAgIyBDaGVj ayB0aGUgcmV0dXJuZWQgbWVzc2FnZXMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNl bGYuZXhwZWN0ZWRfbWVzc2FnZVtjbnRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVzcG9uc2VfZGF0YVsnZGF0YSddWydhZGRpdGlvbmFsX21lc3NhZ2VzJ10pCisgICAgICAgICAg ICAjIENoZWNrIHRoZSBvdXRwdXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu ZXhwZWN0ZWRfcmVzdWx0W2NudF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNw b25zZV9kYXRhWydkYXRhJ11bJ3Jlc3VsdCddWzBdWzBdKQorCisgICAgICAgICAgICBjbnQgKz0g MQorCisgICAgICAgICMgRGlzY29ubmVjdCB0aGUgZGF0YWJhc2UKKyAgICAgICAgZGF0YWJhc2Vf dXRpbHMuZGlzY29ubmVjdF9kYXRhYmFzZShzZWxmLCBzZWxmLnNlcnZlcl9pZCwgc2VsZi5kYl9p ZCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9hYnN0cmFjdC5weSBiL3dl Yi9wZ2FkbWluL3V0aWxzL2RyaXZlci9hYnN0cmFjdC5weQppbmRleCAzMmUxYzk3Li4yNzFiZmVj IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvYWJzdHJhY3QucHkKKysrIGIv d2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL2Fic3RyYWN0LnB5CkBAIC0xNjgsNiArMTY4LDggQEAg Y2xhc3MgQmFzZUNvbm5lY3Rpb24ob2JqZWN0KToKICAgICBBU1lOQ19XUklURV9USU1FT1VUID0g MwogICAgIEFTWU5DX05PVF9DT05ORUNURUQgPSA0CiAgICAgQVNZTkNfRVhFQ1VUSU9OX0FCT1JU RUQgPSA1CisgICAgQVNZTkNfVElNRU9VVCA9IDAuMgorICAgIEFTWU5DX05PVElDRV9NQVhMRU5H VEggPSAxMDAwMDAKIAogICAgIEBhYnN0cmFjdG1ldGhvZAogICAgIGRlZiBjb25uZWN0KHNlbGYs ICoqa3dhcmdzKToKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9wc3ljb3Bn Mi9fX2luaXRfXy5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9wc3ljb3BnMi9fX2luaXRf Xy5weQppbmRleCA4MTQ0MmU0Li45NDFhNjk0IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGls cy9kcml2ZXIvcHN5Y29wZzIvX19pbml0X18ucHkKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJp dmVyL3BzeWNvcGcyL19faW5pdF9fLnB5CkBAIC0zNyw2ICszNyw3IEBAIGZyb20gLmN1cnNvciBp bXBvcnQgRGljdEN1cnNvcgogZnJvbSAudHlwZWNhc3QgaW1wb3J0IHJlZ2lzdGVyX2dsb2JhbF90 eXBlY2FzdGVycywgXAogICAgIHJlZ2lzdGVyX3N0cmluZ190eXBlY2FzdGVycywgcmVnaXN0ZXJf YmluYXJ5X3R5cGVjYXN0ZXJzLCBcCiAgICAgcmVnaXN0ZXJfYXJyYXlfdG9fc3RyaW5nX3R5cGVj YXN0ZXJzLCBBTExfSlNPTl9UWVBFUworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIAog CiBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsKToKQEAgLTExMCw3ICsxMTEsNyBAQCBjbGFzcyBD b25uZWN0aW9uKEJhc2VDb25uZWN0aW9uKToKICAgICAgIC0gVGhpcyBtZXRob2QgaXMgdXNlZCB0 byB3YWl0IGZvciBhc3luY2hyb25vdXMgY29ubmVjdGlvbi4gVGhpcyBpcyBhCiAgICAgICAgIGJs b2NraW5nIGNhbGwuCiAKLSAgICAqIF93YWl0X3RpbWVvdXQoY29ubiwgdGltZSkKKyAgICAqIF93 YWl0X3RpbWVvdXQoY29ubikKICAgICAgIC0gVGhpcyBtZXRob2QgaXMgdXNlZCB0byB3YWl0IGZv ciBhc3luY2hyb25vdXMgY29ubmVjdGlvbiB3aXRoIHRpbWVvdXQuCiAgICAgICAgIFRoaXMgaXMg YSBub24gYmxvY2tpbmcgY2FsbC4KIApAQCAtMzEwLDYgKzMxMSw5IEBAIGNsYXNzIENvbm5lY3Rp b24oQmFzZUNvbm5lY3Rpb24pOgogICAgICAgICAgICAgKQogICAgICAgICAgICAgcmV0dXJuIEZh bHNlLCBtc2cKIAorICAgICAgICAjIE92ZXJ3cml0ZSBjb25uZWN0aW9uIG5vdGljZSBhdHRyIHRv IHN1cHBvcnQKKyAgICAgICAgIyBtb3JlIHRoYW4gNTAgbm90aWNlcyBhdCBhIHRpbWUKKyAgICAg ICAgcGdfY29ubi5ub3RpY2VzID0gZGVxdWUoW10sIHNlbGYuQVNZTkNfTk9USUNFX01BWExFTkdU SCkKICAgICAgICAgc2VsZi5jb25uID0gcGdfY29ubgogICAgICAgICBzZWxmLndhc0Nvbm5lY3Rl ZCA9IFRydWUKICAgICAgICAgdHJ5OgpAQCAtMTIwOCw2ICsxMjEyLDcgQEAgRmFpbGVkIHRvIHJl c2V0IHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgZHVlIHRvIGZvbGxvd2luZyBlcnJvcjoK ICAgICAgICAgICAgICkKICAgICAgICAgICAgIHJldHVybiBGYWxzZSwgbXNnCiAKKyAgICAgICAg cGdfY29ubi5ub3RpY2VzID0gZGVxdWUoW10sIHNlbGYuQVNZTkNfTk9USUNFX01BWExFTkdUSCkK ICAgICAgICAgc2VsZi5jb25uID0gcGdfY29ubgogICAgICAgICBzZWxmLl9fYmFja2VuZF9waWQg PSBwZ19jb25uLmdldF9iYWNrZW5kX3BpZCgpCiAKQEAgLTEyNjEsNTEgKzEyNjYsMzEgQEAgRmFp bGVkIHRvIHJlc2V0IHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgZHVlIHRvIGZvbGxvd2lu ZyBlcnJvcjoKIAogICAgICAgICBBcmdzOgogICAgICAgICAgICAgY29ubjogY29ubmVjdGlvbiBv YmplY3QKLSAgICAgICAgICAgIHRpbWU6IHdhaXQgdGltZQogICAgICAgICAiIiIKLQotICAgICAg ICBzdGF0ZSA9IGNvbm4ucG9sbCgpCi0gICAgICAgIGlmIHN0YXRlID09IHBzeWNvcGcyLmV4dGVu c2lvbnMuUE9MTF9PSzoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLkFTWU5DX09LCi0gICAgICAg IGVsaWYgc3RhdGUgPT0gcHN5Y29wZzIuZXh0ZW5zaW9ucy5QT0xMX1dSSVRFOgotICAgICAgICAg ICAgIyBXYWl0IGZvciB0aGUgZ2l2ZW4gdGltZSBhbmQgdGhlbiBjaGVjayB0aGUgcmV0dXJuIHN0 YXR1cwotICAgICAgICAgICAgIyBJZiB0aHJlZSBlbXB0eSBsaXN0cyBhcmUgcmV0dXJuZWQgdGhl biB0aGUgdGltZS1vdXQgaXMgcmVhY2hlZC4KLSAgICAgICAgICAgIHRpbWVvdXRfc3RhdHVzID0g c2VsZWN0LnNlbGVjdChbXSwgW2Nvbm4uZmlsZW5vKCldLCBbXSwgMCkKLSAgICAgICAgICAgIGlm IHRpbWVvdXRfc3RhdHVzID09IChbXSwgW10sIFtdKToKLSAgICAgICAgICAgICAgICByZXR1cm4g c2VsZi5BU1lOQ19XUklURV9USU1FT1VUCi0KLSAgICAgICAgICAgICMgcG9sbCBhZ2FpbiB0byBj aGVjayB0aGUgc3RhdGUgaWYgaXQgaXMgc3RpbGwgUE9MTF9XUklURQotICAgICAgICAgICAgIyB0 aGVuIHJldHVybiBBU1lOQ19XUklURV9USU1FT1VUIGVsc2UgcmV0dXJuIEFTWU5DX09LLgorICAg ICAgICB3aGlsZSAxOgogICAgICAgICAgICAgc3RhdGUgPSBjb25uLnBvbGwoKQotICAgICAgICAg ICAgaWYgc3RhdGUgPT0gcHN5Y29wZzIuZXh0ZW5zaW9ucy5QT0xMX1dSSVRFOgotICAgICAgICAg ICAgICAgIHJldHVybiBzZWxmLkFTWU5DX1dSSVRFX1RJTUVPVVQKLSAgICAgICAgICAgIHJldHVy biBzZWxmLkFTWU5DX09LCi0gICAgICAgIGVsaWYgc3RhdGUgPT0gcHN5Y29wZzIuZXh0ZW5zaW9u cy5QT0xMX1JFQUQ6Ci0gICAgICAgICAgICAjIFdhaXQgZm9yIHRoZSBnaXZlbiB0aW1lIGFuZCB0 aGVuIGNoZWNrIHRoZSByZXR1cm4gc3RhdHVzCi0gICAgICAgICAgICAjIElmIHRocmVlIGVtcHR5 IGxpc3RzIGFyZSByZXR1cm5lZCB0aGVuIHRoZSB0aW1lLW91dCBpcyByZWFjaGVkLgotICAgICAg ICAgICAgdGltZW91dF9zdGF0dXMgPSBzZWxlY3Quc2VsZWN0KFtjb25uLmZpbGVubygpXSwgW10s IFtdLCAwKQotICAgICAgICAgICAgaWYgdGltZW91dF9zdGF0dXMgPT0gKFtdLCBbXSwgW10pOgot ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLkFTWU5DX1JFQURfVElNRU9VVAotCi0gICAgICAg ICAgICAjIHNlbGVjdC5zZWxlY3QgdGltZW91dCBvcHRpb24gd29ya3Mgb25seSBpZiB3ZSBwcm92 aWRlCi0gICAgICAgICAgICAjICBlbXB0eSBbXSBbXSBbXSBmaWxlIGRlc2NyaXB0b3IgaW4gc2Vs ZWN0LnNlbGVjdCgpIGZ1bmN0aW9uCi0gICAgICAgICAgICAjIGFuZCB0aGF0IGFsc28gd29ya3Mg b25seSBvbiBVTklYIGJhc2VkIHN5c3RlbSwgaXQgZG8gbm90IHN1cHBvcnQKLSAgICAgICAgICAg ICMgV2luZG93cyBIZW5jZSB3ZSBoYXZlIHdyb3RlIG91ciBvd24gcG9vbGluZyBtZWNoYW5pc20g dG8gcmVhZAotICAgICAgICAgICAgIyBkYXRhIGZhc3QgZWFjaCBjYWxsIGNvbm4ucG9sbCgpIHJl YWRzIGNodW5rcyBvZiBkYXRhIGZyb20KLSAgICAgICAgICAgICMgY29ubmVjdGlvbiBvYmplY3Qg bW9yZSB3ZSBwb2xsIG1vcmUgd2UgcmVhZCBkYXRhIGZyb20gY29ubmVjdGlvbgotICAgICAgICAg ICAgY250ID0gMAotICAgICAgICAgICAgd2hpbGUgY250IDwgMTAwMDoKLSAgICAgICAgICAgICAg ICAjIHBvbGwgYWdhaW4gdG8gY2hlY2sgdGhlIHN0YXRlIGlmIGl0IGlzIHN0aWxsIFBPTExfUkVB RAotICAgICAgICAgICAgICAgICMgdGhlbiByZXR1cm4gQVNZTkNfUkVBRF9USU1FT1VUIGVsc2Ug cmV0dXJuIEFTWU5DX09LLgotICAgICAgICAgICAgICAgIHN0YXRlID0gY29ubi5wb2xsKCkKLSAg ICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSBwc3ljb3BnMi5leHRlbnNpb25zLlBPTExfT0s6Ci0g ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLkFTWU5DX09LCi0gICAgICAgICAgICAgICAg Y250ICs9IDEKLSAgICAgICAgICAgIHJldHVybiBzZWxmLkFTWU5DX1JFQURfVElNRU9VVAotICAg ICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgcHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJvcigK LSAgICAgICAgICAgICAgICAicG9sbCgpIHJldHVybmVkICVzIGZyb20gX3dhaXRfdGltZW91dCBm dW5jdGlvbiIgJSBzdGF0ZQotICAgICAgICAgICAgKQorICAgICAgICAgICAgaWYgc3RhdGUgPT0g cHN5Y29wZzIuZXh0ZW5zaW9ucy5QT0xMX09LOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxm LkFTWU5DX09LCisgICAgICAgICAgICBlbGlmIHN0YXRlID09IHBzeWNvcGcyLmV4dGVuc2lvbnMu UE9MTF9XUklURToKKyAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIHRoZSBnaXZlbiB0aW1lIGFu ZCB0aGVuIGNoZWNrIHRoZSByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAgICAgIyBJZiB0aHJl ZSBlbXB0eSBsaXN0cyBhcmUgcmV0dXJuZWQgdGhlbiB0aGUgdGltZS1vdXQgaXMKKyAgICAgICAg ICAgICAgICAjIHJlYWNoZWQuCisgICAgICAgICAgICAgICAgdGltZW91dF9zdGF0dXMgPSBzZWxl Y3Quc2VsZWN0KFtdLCBbY29ubi5maWxlbm8oKV0sIFtdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkFTWU5DX1RJTUVPVVQpCisgICAgICAgICAg ICAgICAgaWYgdGltZW91dF9zdGF0dXMgPT0gKFtdLCBbXSwgW10pOgorICAgICAgICAgICAgICAg ICAgICByZXR1cm4gc2VsZi5BU1lOQ19XUklURV9USU1FT1VUCisgICAgICAgICAgICBlbGlmIHN0 YXRlID09IHBzeWNvcGcyLmV4dGVuc2lvbnMuUE9MTF9SRUFEOgorICAgICAgICAgICAgICAgICMg V2FpdCBmb3IgdGhlIGdpdmVuIHRpbWUgYW5kIHRoZW4gY2hlY2sgdGhlIHJldHVybiBzdGF0dXMK KyAgICAgICAgICAgICAgICAjIElmIHRocmVlIGVtcHR5IGxpc3RzIGFyZSByZXR1cm5lZCB0aGVu IHRoZSB0aW1lLW91dCBpcworICAgICAgICAgICAgICAgICMgcmVhY2hlZC4KKyAgICAgICAgICAg ICAgICB0aW1lb3V0X3N0YXR1cyA9IHNlbGVjdC5zZWxlY3QoW2Nvbm4uZmlsZW5vKCldLCBbXSwg W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu QVNZTkNfVElNRU9VVCkKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0X3N0YXR1cyA9PSAoW10s IFtdLCBbXSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLkFTWU5DX1JFQURfVElN RU9VVAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBwc3ljb3BnMi5P cGVyYXRpb25hbEVycm9yKAorICAgICAgICAgICAgICAgICAgICAicG9sbCgpIHJldHVybmVkICVz IGZyb20gX3dhaXRfdGltZW91dCBmdW5jdGlvbiIgJSBzdGF0ZQorICAgICAgICAgICAgICAgICkK IAogICAgIGRlZiBwb2xsKHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlLCBub19y ZXN1bHQ9RmFsc2UpOgogICAgICAgICAiIiIKQEAgLTEzNDcsOCArMTMzMiw4IEBAIEZhaWxlZCB0 byByZXNldCB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGR1ZSB0byBmb2xsb3dpbmcgZXJy b3I6CiAgICAgICAgICAgICBpc19lcnJvciA9IFRydWUKIAogICAgICAgICBpZiBzZWxmLmNvbm4u bm90aWNlcyBhbmQgc2VsZi5fX25vdGljZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB3aGls ZSBzZWxmLmNvbm4ubm90aWNlczoKLSAgICAgICAgICAgICAgICBzZWxmLl9fbm90aWNlcy5hcHBl bmQoc2VsZi5jb25uLm5vdGljZXMucG9wKDApWzpdKQorICAgICAgICAgICAgc2VsZi5fX25vdGlj ZXMuZXh0ZW5kKHNlbGYuY29ubi5ub3RpY2VzKQorICAgICAgICAgICAgc2VsZi5jb25uLm5vdGlj ZXMuY2xlYXIoKQogCiAgICAgICAgICMgV2UgYWxzbyBuZWVkIHRvIGZldGNoIG5vdGljZXMgYmVm b3JlIHdlIHJldHVybiBmcm9tIGZ1bmN0aW9uIGluIGNhc2UKICAgICAgICAgIyBvZiBhbnkgRXhj ZXB0aW9uLCBUbyBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uIHdlIHdpbGwgcmV0dXJuIGFmdGVyCg== --001a113d595a4c9f310566bba4cd--