Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hd7Fn-000469-BG for pgadmin-hackers@arkaria.postgresql.org; Tue, 18 Jun 2019 06:06:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hd7El-0004Vm-8n for pgadmin-hackers@arkaria.postgresql.org; Tue, 18 Jun 2019 06:04:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hd7Ek-0004Rk-Gq for pgadmin-hackers@lists.postgresql.org; Tue, 18 Jun 2019 06:04:55 +0000 Received: from mail-qk1-x743.google.com ([2607:f8b0:4864:20::743]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hd7Ec-0006l7-2C for pgadmin-hackers@postgresql.org; Tue, 18 Jun 2019 06:04:53 +0000 Received: by mail-qk1-x743.google.com with SMTP id i125so7801560qkd.6 for ; Mon, 17 Jun 2019 23:04:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=l0LaLHKjnwRZCCDpwW8tAw2qceaHpRx6yk72fZqioo8=; b=W0wPoYFkSt48YFgTlsSjNXkm7kmCtKf7RZ2N/FvH8l92AX6wpdSKUGb+EE4as6fYY/ gRWPKf+AOSMJEel4kfTKw/6i/8/HfRczuSdovySdvdUawnX7R66PxBStwTh+o4Zd3Rd4 bU/vAhquWtq4zRC50/zCcZSraGLRrjh3vPajsXfXGILdO5Kz2UHMFivVRicOXG89CkmZ 5tb1N9Ttw9uDmRZmTanLaWqDREF3NUbSbP4g4J5JbL41UbGmQCp6qNmmYb73ZonO1kLn pIEs0hJec875wKiUXLzUlQgG+rb2GJ2JqikKc5u2nO7xmv7bgHntxyW0I0vSGROpI6ol 3gig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=l0LaLHKjnwRZCCDpwW8tAw2qceaHpRx6yk72fZqioo8=; b=HnlJOkxgz3xZOmwxAFDPpkrTVyRwOomQvD6OPjA1uE/Lhs8TZuMe8iUPJFF4p6Ahuz 8pPSLy5bEY/6hLCYVtZBOeUyCTrwBvGCgHB7XUp00LdiAqGHGJrYk92sLbgsnMRbHeWX ZHREAnbuPfYLeucPeGtQDWfoz3pWaOGriB0op/SP+XW8CztodcniB0n/5vNCt1eC3+Zb qtz+4yQxJ4LvdLCrXEgcrKelAekEyxyXHQAllb2br+e1L5d0yynxugYyxiPOJZs3H3hT tX/9TSnmvqxfupdpdgOof/i7mYqBfooxix+RGnGnJjHAMrSksfOPWq/odrs9yB7iteiN Xr7A== X-Gm-Message-State: APjAAAXnz2phFn+r/G9PBaiSaHZ2Q1AsZV937bsWOfQe5Uft1ai1dr7w RDbDay+DX5Rw6iEd/pUv02w6hXD313L1mt+2hw0PAA== X-Google-Smtp-Source: APXvYqz0lvFWsjP3LZWXNXkTq7V1NOQLflqVM8OuUA4M9MLAwIekO5KSPLEgAxZuquryVyooZrM0i9zNmABsGRwv39I= X-Received: by 2002:a37:7083:: with SMTP id l125mr67170019qkc.71.1560837884490; Mon, 17 Jun 2019 23:04:44 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Akshay Joshi Date: Tue, 18 Jun 2019 11:34:33 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch]: Feature #4202 Implement new framework to test Reverse Engineering SQL To: Dave Page Cc: Ashesh Vashi , pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000a87d67058b92e3f0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000a87d67058b92e3f0 Content-Type: multipart/alternative; boundary="000000000000a87d66058b92e3ee" --000000000000a87d66058b92e3ee Content-Type: text/plain; charset="UTF-8" Hi Dave/Hackers Attached is the modified patch to fix the given review comments. Please review it. On Mon, Jun 17, 2019 at 2:29 PM Dave Page wrote: > > > On Mon, Jun 17, 2019 at 9:41 AM Akshay Joshi < > akshay.joshi@enterprisedb.com> wrote: > >> Hi Dave >> >> On Mon, Jun 17, 2019 at 1:33 PM Dave Page wrote: >> >>> >>> >>> On Mon, Jun 17, 2019 at 8:19 AM Ashesh Vashi < >>> ashesh.vashi@enterprisedb.com> wrote: >>> >>>> >>>> On Mon, Jun 17, 2019 at 11:54 AM Akshay Joshi < >>>> akshay.joshi@enterprisedb.com> wrote: >>>> >>>>> Hi Dave/Hackers >>>>> >>>>> On Fri, Jun 14, 2019 at 6:10 PM Akshay Joshi < >>>>> akshay.joshi@enterprisedb.com> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Fri, Jun 14, 2019 at 1:59 PM Dave Page wrote: >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> On Thu, Jun 13, 2019 at 12:52 PM Akshay Joshi < >>>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Hi Hackers >>>>>>>> >>>>>>>> I have implemented the new test framework to test the Reverse >>>>>>>> Engineering SQL. I have integrated it as a part of API/Regression test >>>>>>>> suite. It will work when we run all the test cases or module wise test case. >>>>>>>> >>>>>>>> *How it works*: Attached patch contains the generic framework to >>>>>>>> read all the JSON files from the *tests->version based (example >>>>>>>> 9.6_plus, 10_plus or default) folder. *Run all the test scenarios >>>>>>>> present in the JSON file in sequential order. >>>>>>>> >>>>>>>> Format of the JSON file is mentioned in >>>>>>>> "web/pgadmin/browser/server_groups/servers/databases/casts/tests/default/test.json" >>>>>>>> >>>>>>>> For expected SQL we will have following two options: >>>>>>>> >>>>>>>> - Provide the expected sql in scenario itself as parameter *"expected_sql" >>>>>>>> : ""*. >>>>>>>> - Create a output file with any name in the same directory >>>>>>>> where the JSON file resides and specify the parameter "*expected_sql_file": >>>>>>>> ""* >>>>>>>> >>>>>>>> Attached patch contains both the above mentioned examples. >>>>>>>> >>>>>>>> Please review it. >>>>>>>> >>>>>>> >>>>>>> Nice! >>>>>>> >>>>>>> A few comments: >>>>>>> >>>>>>> - The scenario name should be "Reverse Engineered SQL Test Cases" >>>>>>> - After the scenario name is output, can we output a \n so the next >>>>>>> line isn't appended to the name? >>>>>>> >>>>>> >>>>>> Will fix the above. >>>>>> >>>>>>> - How do we run only the re_sql tests? I tried the obvious ways >>>>>>> (e.g. python runtests.py --pkg >>>>>>> regression.re_sql.tests.test_resql.ReverseEngineeringSQLTestCase) but got >>>>>>> errors. Please add an example to web/regression/README. >>>>>>> >>>>>> >>>>>> It is not a pgadmin module and we have kept it in regression >>>>>> folder, so will have to change the existing code. I have tried but facing >>>>>> issues when run only "regression.re_sql.tests", will continue working on >>>>>> this. >>>>>> >>>>> >>>>> Can we add a new parameter to --pkg "*resql*" to run all the >>>>> reverse engineered test cases for all the modules, it just like parameter " >>>>> *all*" which is used to run all the regression tests. Following will >>>>> be the scenario if we add new parameter: >>>>> >>>>> - If we run --pkg all, run all the API and resql test cases. >>>>> - If we run --pkg , run the API and resql test cases >>>>> for the specified module list >>>>> - if we run --pkg resql, run all the resql test cases only. >>>>> >>>>> How about using the command line options '--only-resql', and >>>> '--no-resql' for the same? >>>> * If we run the test suite with '--only-resql', it should run only the >>>> test cases for the reverse engineering sql for all or selected packages >>>> specified by '--pkg'. >>>> * If we run the test suite with '--no-resql', no test cases for the >>>> reverse engineering sql should be running. >>>> * By default, test suite should run the test cases for reverse >>>> engineering sql too. >>>> >>>> NOTE: '--only-resql', and '--no-resql' must not be specified together. >>>> >>>> Let's leave the command line option '--pkg' for selecting the packages >>>> only. >>>> >>> >>> Why add more options? I don't see why we can't think of these tests as >>> just another package. If that's really a problem, we could just rename it >>> to --tests or something. >>> >> >> As I mentioned in my previous email, this is not a regular >> package/module in pgadmin directory. We have kept it in regression >> folder. With current implementation if we provide "all" as a --pkg >> parameter it will import all the modules where "*test.*" string is >> present in the module name. If we provide the specific package like " >> *browser.server_groups.servers.databases.casts.tests*" then it will >> import all the files of that module. >> >> So here problem is if we specify "python runtests.py --pkg >> *regression.re_sql.tests*" we don't have list of all the module to >> iterate over the *tests* folder and get the JSON file. >> > > Yes, I know all of that. That's why I said "*think* of these tests as just > another package". I know they're actually not. > > >> My question here is why do we need to separate the resql test cases? It >> would be good to have if they run along with the API test case for all or >> specified module. >> > > Because the rest of the tests can take a long time to run, and it may be > useful to just run these tests if that's what the developer wants. > > >> >> But if we will have to support it than we should have one option to >> identify that we need to run only *re_sql* for all the modules. That we >> can achieve by any options like I suggest "--pkg resql" or suggested by >> Ashesh "--only-resql". >> > > Right - and as I said, let's just consider them to be another package > (i.e. do it the way you suggest). > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > -- *Thanks & Regards* *Akshay Joshi* *Sr. Software Architect* *EnterpriseDB Software India Private Limited* *Mobile: +91 976-788-8246* --000000000000a87d66058b92e3ee Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi=C2=A0Dave/Hackers

Attached is the modified patch to fix the given review com= ments. Please review it.

On Mon, Jun 17, 2019 at 2:29 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">


On Mon, Jun 17, 2019 at 9:41 AM Akshay Joshi <akshay.joshi@enterpri= sedb.com> wrote:
Hi=C2=A0Dave

On Mon, Jun 17, 2019= at 1:33 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">


On Mon, Jun 17, 2019 at 8:19 AM Ashesh Vashi <ashesh.vashi@enterpri= sedb.com> wrote:
On= Mon, Jun 17, 2019 at 11:54 AM Akshay Joshi <akshay.joshi@enterprisedb.com&g= t; wrote:
Hi=C2=A0Dave/Hackers

On Fri, Jun 14, 2019 at 6:1= 0 PM Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:


On Fri, Jun 14, 2019 at 1:59 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">
Hi

On Thu, Jun 13, 2019 at 12:52 PM Akshay Joshi <akshay.joshi@enterpris= edb.com> wrote:
Hi Hackers

I have implemented th= e new test framework to test the Reverse Engineering SQL. I have integrated= it as a part of API/Regression test suite. It will work when we run all th= e=C2=A0test cases or module wise test case.

How= it works: Attached patch contains the generic framework to read all th= e JSON files from the tests->version based (example 9.6_plus, 10_plus= or default) folder. Run all the test scenarios present in the JSON fil= e in sequential order.

Format of the JSON file is = mentioned in "<path_of_source>web/pgadmin/browser/server_groups/= servers/databases/casts/tests/default/test.json"

<= div>For expected SQL we will have following two options:
  • = Provide the expected sql in scenario itself as parameter "expected_= sql" : "<SQL>".
  • Create a output file w= ith any name in the same directory where the JSON file resides and specify = the parameter "expected_sql_file": "<name of the file&= gt;"
Attached patch contains both the abov= e mentioned examples.

Please review it.

Nice!

A few comm= ents:

- The scenario name should be "Reverse = Engineered SQL Test Cases"
- After the scenario name is outp= ut, can we output a \n so the next line isn't appended to the name?
=C2=A0 =C2=A0
=C2=A0 =C2=A0Will f= ix the above.=C2=A0
=
- How do we run only the r= e_sql tests? I tried the obvious ways (e.g.=C2=A0python runtests.py --pkg r= egression.re_sql.tests.test_resql.ReverseEngineeringSQLTestCase) but got er= rors. Please add an example to web/regression/README.

=C2=A0 =C2=A0It is not a pgadmin module and we= have kept it in regression folder, so will have to change the existing cod= e. I have tried but facing issues when run only=C2=A0 "regression.re_s= ql.tests", will continue working on this.

=C2=A0 =C2=A0 =C2=A0Can we add a new parameter=C2=A0 = to --pkg "resql" to run all the reverse engineered test ca= ses for all the modules, it just like parameter "all" whic= h is used to run all the regression tests. Following will be the scenario i= f we add new parameter:
  • If we run --pkg all, run all the = API and resql test cases.
  • If we run --pkg <module list>, run = the API and resql test cases for the specified module list=C2=A0
  • if= we run --pkg resql, run all the resql test cases only.=C2=A0 =C2=A0=C2=A0<= /li>
How about using the command li= ne options '--only-resql', and '--no-resql' for the same?
* If we run the test suite with '--only-resql', it should = run only the test cases for the reverse engineering sql for all or selected= packages specified by '--pkg'.
* If we run the test suit= e with '--no-resql', no test cases for the reverse engineering sql = should be running.
* By default, test suite should run the test c= ases for reverse engineering sql too.

NOTE: '-= -only-resql', and '--no-resql' must not be specified together.<= /div>

Let's leave the command line option '--pkg= ' for selecting the packages only.=C2=A0
=

Why add more options? I don't see why we can't = think of these tests as just another package. If that's really a proble= m, we could just rename it to --tests or something.=C2=A0
=

=C2=A0 =C2=A0As I mentioned in my previous= email, this is not a regular package/module in pgadmin directory. We = have kept it in regression folder. With current implementation if we provid= e "all" as a --pkg parameter it will import all the modules where= "test." string is present in the module name. If we provi= de the specific package like "browser.server_groups.servers.databas= es.casts.tests" then it will import all the files of that module.= =C2=A0

=C2=A0 So here problem is if we specify &qu= ot;python runtests.py --pkg regression.re_sql.tests&q= uot; we don't have list of all the module to iterate over the tests<= /b> folder and get the JSON file.
=
Yes, I know all of that. That's why I said "*think*= of these tests as just another package". I know they're actually = not.
=C2=A0
My question here is why = do we need to separate the resql test cases? It would be good to have = if they run along with the API test case for all or specified module.
=

Because the rest of the tests = can take a long time to run, and it may be useful to just run these tests i= f that's what the developer wants.
=C2=A0

=C2=A0But if we will have to support it than we sh= ould have one option to identify that we need to run only re_sql for all the modules. That we can achieve by any options like I suggest &q= uot;--pkg resql" or suggested by Ashesh "--only-resql<= /span>".=C2=A0=C2=A0

Right - and as I said, let's just consider them to be another package = (i.e. do it the way you suggest).=C2=A0

--
Dave Pa= ge
Blog: http:= //pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterpris= edb.com
The Enterprise PostgreSQL Company


--
Thanks & Regards
=
Akshay Joshi
Sr. Software Architect
EnterpriseDB Software India Private Limited
=
Mobile: += 91 976-788-8246
--000000000000a87d66058b92e3ee-- --000000000000a87d67058b92e3f0 Content-Type: application/octet-stream; name="RM_4202.patch" Content-Disposition: attachment; filename="RM_4202.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jx1ekd9u0 ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggOWIxOWFhZjkuLjc3OGMxNjll IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNDMsNiArNDMsOSBAQCBj aGVjay1wZXA4OgogY2hlY2stcHl0aG9uOgogCWNkIHdlYiAmJiBweXRob24gcmVncmVzc2lvbi9y dW50ZXN0cy5weSAtLWV4Y2x1ZGUgZmVhdHVyZV90ZXN0cwogCitjaGVjay1yZXNxbDoKKwljZCB3 ZWIgJiYgcHl0aG9uIHJlZ3Jlc3Npb24vcnVudGVzdHMucHkgLS1wa2cgcmVzcWwgLS1leGNsdWRl IGZlYXR1cmVfdGVzdHMKKwogY2hlY2stZmVhdHVyZTogaW5zdGFsbC1ub2RlIGJ1bmRsZQogCWNk IHdlYiAmJiBweXRob24gcmVncmVzc2lvbi9ydW50ZXN0cy5weSAtLXBrZyBmZWF0dXJlX3Rlc3Rz CiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L2FsdGVyX2ltcGxpY2l0X2Nhc3Quc3FsIGIv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3Rz L3Rlc3RzL2RlZmF1bHQvYWx0ZXJfaW1wbGljaXRfY2FzdC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLjk4YjdlNDUyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3Rlc3RzL2Rl ZmF1bHQvYWx0ZXJfaW1wbGljaXRfY2FzdC5zcWwKQEAgLTAsMCArMSw5IEBACistLSBDYXN0OiBt b25leSAtPiBiaWdpbnQKKworLS0gRFJPUCBDQVNUIChtb25leSBBUyBiaWdpbnQpOworCitDUkVB VEUgQ0FTVCAobW9uZXkgQVMgYmlnaW50KQorCVdJVEhPVVQgRlVOQ1RJT04KKwlBUyBJTVBMSUNJ VDsKKworQ09NTUVOVCBPTiBDQVNUIChtb25leSBBUyBiaWdpbnQpIElTICdDYXN0IGZyb20gbW9u ZXkgdG8gYmlnaW50JzsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L2NyZWF0ZV9pbXBsaWNp dF9jYXN0LnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L2NyZWF0ZV9pbXBsaWNpdF9jYXN0LnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNjhmZmU1MDAKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv Y2FzdHMvdGVzdHMvZGVmYXVsdC9jcmVhdGVfaW1wbGljaXRfY2FzdC5zcWwKQEAgLTAsMCArMSw3 IEBACistLSBDYXN0OiBtb25leSAtPiBiaWdpbnQKKworLS0gRFJPUCBDQVNUIChtb25leSBBUyBi aWdpbnQpOworCitDUkVBVEUgQ0FTVCAobW9uZXkgQVMgYmlnaW50KQorCVdJVEhPVVQgRlVOQ1RJ T04KKwlBUyBJTVBMSUNJVDsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L3Rlc3QuanNvbiBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0 cy90ZXN0cy9kZWZhdWx0L3Rlc3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMC4uNmY0MWRhOGEKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2FzdHMvdGVzdHMvZGVmYXVsdC90ZXN0Lmpz b24KQEAgLTAsMCArMSw2OCBAQAoreworICAic2NlbmFyaW9zIjogWworICAgIHsKKyAgICAgICJ0 eXBlIjogImNyZWF0ZSIsCisgICAgICAibmFtZSI6ICJDcmVhdGUgSU1QTElDSVQgQ2FzdCIsCisg ICAgICAiZW5kcG9pbnQiOiAiTk9ERS1jYXN0Lm9iaiIsCisgICAgICAic3FsX2VuZHBvaW50Ijog Ik5PREUtY2FzdC5zcWxfaWQiLAorICAgICAgImRhdGEiOiB7CisgICAgICAgICJjYXN0Y29udGV4 dCI6ICJJTVBMSUNJVCIsCisgICAgICAgICJlbmNvZGluZyI6ICJVVEY4IiwKKyAgICAgICAgIm5h bWUiOiAibW9uZXktPmJpZ2ludCIsCisgICAgICAgICJzcmN0eXAiOiAibW9uZXkiLAorICAgICAg ICAidHJndHlwIjogImJpZ2ludCIKKyAgICAgIH0sCisgICAgICAiZXhwZWN0ZWRfc3FsX2ZpbGUi OiAiY3JlYXRlX2ltcGxpY2l0X2Nhc3Quc3FsIgorICAgIH0sCisgICAgeworICAgICAgInR5cGUi OiAiYWx0ZXIiLAorICAgICAgIm5hbWUiOiAiQWx0ZXIgSU1QTElDSVQgQ2FzdCIsCisgICAgICAi ZW5kcG9pbnQiOiAiTk9ERS1jYXN0Lm9ial9pZCIsCisgICAgICAic3FsX2VuZHBvaW50IjogIk5P REUtY2FzdC5zcWxfaWQiLAorICAgICAgImRhdGEiOiB7CisgICAgICAgICJkZXNjcmlwdGlvbiI6 ICJDYXN0IGZyb20gbW9uZXkgdG8gYmlnaW50IgorICAgICAgfSwKKyAgICAgICJleHBlY3RlZF9z cWxfZmlsZSI6ICJhbHRlcl9pbXBsaWNpdF9jYXN0LnNxbCIKKyAgICB9LAorICAgIHsKKyAgICAg ICJ0eXBlIjogImRlbGV0ZSIsCisgICAgICAibmFtZSI6ICJEcm9wIElNUExJQ0lUIENhc3QiLAor ICAgICAgImVuZHBvaW50IjogIk5PREUtY2FzdC5kZWxldGVfaWQiLAorICAgICAgImRhdGEiOiB7 CisgICAgICAgICJuYW1lIjogIm1vbmV5LT5iaWdpbnQiCisgICAgICB9CisgICAgfSwKKyAgICB7 CisgICAgICAidHlwZSI6ICJjcmVhdGUiLAorICAgICAgIm5hbWUiOiJDcmVhdGUgRVhQTElDSVQg Q2FzdCIsCisgICAgICAiZW5kcG9pbnQiOiAiTk9ERS1jYXN0Lm9iaiIsCisgICAgICAic3FsX2Vu ZHBvaW50IjogIk5PREUtY2FzdC5zcWxfaWQiLAorICAgICAgImRhdGEiOiB7CisgICAgICAgICJj YXN0Y29udGV4dCI6ICJFWFBMSUNJVCIsCisgICAgICAgICJlbmNvZGluZyI6ICJVVEY4IiwKKyAg ICAgICAgIm5hbWUiOiAibW9uZXktPmJpZ2ludCIsCisgICAgICAgICJzcmN0eXAiOiAibW9uZXki LAorICAgICAgICAidHJndHlwIjogImJpZ2ludCIKKyAgICAgIH0sCisgICAgICAiZXhwZWN0ZWRf c3FsIjogIi0tIENhc3Q6IG1vbmV5IC0+IGJpZ2ludFxuXG4tLSBEUk9QIENBU1QgKG1vbmV5IEFT IGJpZ2ludCk7XG5cbkNSRUFURSBDQVNUIChtb25leSBBUyBiaWdpbnQpXG5cdFdJVEhPVVQgRlVO Q1RJT047IgorICAgIH0sCisgICAgeworICAgICAgInR5cGUiOiAiYWx0ZXIiLAorICAgICAgIm5h bWUiOiAiQWx0ZXIgRVhQTElDSVQgQ2FzdCIsCisgICAgICAiZW5kcG9pbnQiOiAiTk9ERS1jYXN0 Lm9ial9pZCIsCisgICAgICAic3FsX2VuZHBvaW50IjogIk5PREUtY2FzdC5zcWxfaWQiLAorICAg ICAgImRhdGEiOiB7CisgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDYXN0IGZyb20gbW9uZXkgdG8g YmlnaW50IgorICAgICAgfSwKKyAgICAgICJleHBlY3RlZF9zcWwiOiAiLS0gQ2FzdDogbW9uZXkg LT4gYmlnaW50XG5cbi0tIERST1AgQ0FTVCAobW9uZXkgQVMgYmlnaW50KTtcblxuQ1JFQVRFIENB U1QgKG1vbmV5IEFTIGJpZ2ludClcblx0V0lUSE9VVCBGVU5DVElPTjtcblxuQ09NTUVOVCBPTiBD QVNUIChtb25leSBBUyBiaWdpbnQpIElTICdDYXN0IGZyb20gbW9uZXkgdG8gYmlnaW50JzsiCisg ICAgfSwKKyAgICB7CisgICAgICAidHlwZSI6ICJkZWxldGUiLAorICAgICAgIm5hbWUiOiAiRHJv cCBFWFBMSUNJVCBDYXN0IiwKKyAgICAgICJlbmRwb2ludCI6ICJOT0RFLWNhc3QuZGVsZXRlX2lk IiwKKyAgICAgICJkYXRhIjogeworICAgICAgICAibmFtZSI6ICJtb25leS0+YmlnaW50IgorICAg ICAgfQorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvY29sbGF0aW9ucy90ZXN0cy9fX2lu aXRfXy5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL2NvbGxhdGlvbnMvdGVzdHMvX19pbml0X18ucHkKaW5kZXggMzFkMjA0Njcu LmIyZTQ1MDk3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMv c2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9jb2xsYXRpb25zL3Rlc3RzL19faW5pdF9fLnB5Cisr KyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL2NvbGxhdGlvbnMvdGVzdHMvX19pbml0X18ucHkKQEAgLTExLDYgKzExLDUgQEAgZnJv bSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBCYXNlVGVzdEdlbmVyYXRvcgogCiAKIGNsYXNz IENvbGxhdGlvblRlc3RHZW5lcmF0b3IoQmFzZVRlc3RHZW5lcmF0b3IpOgotCi0gICAgZGVmIGdl bmVyYXRlX3Rlc3RzKHNlbGYpOgorICAgIGRlZiBydW5UZXN0KHNlbGYpOgogICAgICAgICByZXR1 cm4KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3N5bm9ueW1zL3Rlc3RzL19faW5pdF9fLnB5IGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvc3lub255 bXMvdGVzdHMvX19pbml0X18ucHkKaW5kZXggYzFjMWM0YTcuLjI0YTE3OTBkIDEwMDY0NAotLS0g YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy9zeW5vbnltcy90ZXN0cy9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9zeW5vbnltcy90ZXN0cy9f X2luaXRfXy5weQpAQCAtMTEsNiArMTEsNSBAQCBmcm9tIHBnYWRtaW4udXRpbHMucm91dGUgaW1w b3J0IEJhc2VUZXN0R2VuZXJhdG9yCiAKIAogY2xhc3MgU3lub255bVRlc3RHZW5lcmF0b3IoQmFz ZVRlc3RHZW5lcmF0b3IpOgotCi0gICAgZGVmIGdlbmVyYXRlX3Rlc3RzKHNlbGYpOgorICAgIGRl ZiBydW5UZXN0KHNlbGYpOgogICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3ZpZXdzL3Rl c3RzL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvdmlld3MvdGVzdHMvX19pbml0X18ucHkKaW5kZXggOTc4NWRm MDEuLjIzY2FmOWRkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy92aWV3cy90ZXN0cy9fX2luaXRfXy5weQorKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy92aWV3cy90ZXN0cy9fX2luaXRfXy5weQpAQCAtMTEsNiArMTEsNSBAQCBmcm9tIHBnYWRt aW4udXRpbHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2VuZXJhdG9yCiAKIAogY2xhc3MgVmlld3NU ZXN0R2VuZXJhdG9yKEJhc2VUZXN0R2VuZXJhdG9yKToKLQotICAgIGRlZiBnZW5lcmF0ZV90ZXN0 cyhzZWxmKToKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKICAgICAgICAgcmV0dXJuCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi91dGlscy9yb3V0ZS5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL3JvdXRl LnB5CmluZGV4IGIyMDZjYjJlLi44NjI5ZGJiZCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdXRp bHMvcm91dGUucHkKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvcm91dGUucHkKQEAgLTUzLDEzICs1 MywxNiBAQCBjbGFzcyBUZXN0c0dlbmVyYXRvclJlZ2lzdHJ5KEFCQ01ldGEpOgogICAgICAgICBB QkNNZXRhLl9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGQpCiAKICAgICBAY2xhc3NtZXRob2QK LSAgICBkZWYgbG9hZF9nZW5lcmF0b3JzKGNscywgcGtnX3Jvb3QsIGV4Y2x1ZGVfcGtncywgZm9y X21vZHVsZXM9W10pOgorICAgIGRlZiBsb2FkX2dlbmVyYXRvcnMoY2xzLCBwa2dfcm9vdCwgZXhj bHVkZV9wa2dzLCBmb3JfbW9kdWxlcz1bXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Jl c3FsX29ubHk9RmFsc2UpOgogCiAgICAgICAgIGNscy5yZWdpc3RyeSA9IGRpY3QoKQogCiAgICAg ICAgIGFsbF9tb2R1bGVzID0gW10KIAogICAgICAgICBhbGxfbW9kdWxlcyArPSBmaW5kX21vZHVs ZXMocGtnX3Jvb3QsIEZhbHNlLCBUcnVlKQorICAgICAgICAjIEFwcGVuZCByZXZlcnNlIGVuZ2lu ZWVyZWQgdGVzdCBjYXNlIG1vZHVsZQorICAgICAgICBhbGxfbW9kdWxlcy5hcHBlbmQoJ3JlZ3Jl c3Npb24ucmVfc3FsLnRlc3RzLnRlc3RfcmVzcWwnKQogCiAgICAgICAgICMgSWYgc3BlY2lmaWMg bW9kdWxlcyBhcmUgdG8gYmUgdGVzdGVkLCBleGNsdWRlIG90aGVycwogICAgICAgICBpZiBsZW4o Zm9yX21vZHVsZXMpID4gMDoKQEAgLTY4LDE3ICs3MSwzMCBAQCBjbGFzcyBUZXN0c0dlbmVyYXRv clJlZ2lzdHJ5KEFCQ01ldGEpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZtb2Qg aW4gZm9yX21vZHVsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1l LmVuZHN3aXRoKGZtb2QpXQogCi0gICAgICAgICMgQ2hlY2sgZm9yIFNFUlZFUiBtb2RlCi0gICAg ICAgIGZvciBtb2R1bGVfbmFtZSBpbiBhbGxfbW9kdWxlczoKKyAgICAgICAgIyBTZXQgdGhlIG1v ZHVsZSBsaXN0IGFuZCBleGNsdWRlIHBhY2thZ2VzIGluIHRoZSBCYXNlVGVzdEdlbmVyYXRvcgor ICAgICAgICAjIGZvciBSZXZlcnNlIEVuZ2luZWVyIFNRTCB0ZXN0IGNhc2VzLgorICAgICAgICBC YXNlVGVzdEdlbmVyYXRvci5zZXRSZVNRTE1vZHVsZUxpc3QoYWxsX21vZHVsZXMpCisgICAgICAg IEJhc2VUZXN0R2VuZXJhdG9yLnNldEV4Y2x1ZGVQa2dzKGV4Y2x1ZGVfcGtncykKKworICAgICAg ICAjIENoZWNrIGlmIG9ubHkgcmV2ZXJzZSBlbmdpbmVlcmVkIHNxbCB0ZXN0IGNhc2VzIHRvIHJ1 bgorICAgICAgICAjIGlmIHllcyB0aGVuIGltcG9ydCBvbmx5IHRoYXQgbW9kdWxlCisgICAgICAg IGlmIGlzX3Jlc3FsX29ubHk6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYg InRlc3RzLiIgaW4gc3RyKG1vZHVsZV9uYW1lKSBhbmQgbm90IGFueSgKLSAgICAgICAgICAgICAg ICAgICAgc3RyKG1vZHVsZV9uYW1lKS5zdGFydHN3aXRoKAotICAgICAgICAgICAgICAgICAgICAg ICAgJ3BnYWRtaW4uJyArIHN0cihleGNsdWRlX3BrZykKLSAgICAgICAgICAgICAgICAgICAgKSBm b3IgZXhjbHVkZV9wa2cgaW4gZXhjbHVkZV9wa2dzCi0gICAgICAgICAgICAgICAgKToKLSAgICAg ICAgICAgICAgICAgICAgaW1wb3J0X21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgICAg ICBpbXBvcnRfbW9kdWxlKCdyZWdyZXNzaW9uLnJlX3NxbC50ZXN0cy50ZXN0X3Jlc3FsJykKICAg ICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICB0cmFjZWJhY2su cHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMg Q2hlY2sgZm9yIFNFUlZFUiBtb2RlCisgICAgICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gYWxs X21vZHVsZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiAi dGVzdHMuIiBpbiBzdHIobW9kdWxlX25hbWUpIGFuZCBub3QgYW55KAorICAgICAgICAgICAgICAg ICAgICAgICAgc3RyKG1vZHVsZV9uYW1lKS5zdGFydHN3aXRoKAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdwZ2FkbWluLicgKyBzdHIoZXhjbHVkZV9wa2cpCisgICAgICAgICAgICAgICAg ICAgICAgICApIGZvciBleGNsdWRlX3BrZyBpbiBleGNsdWRlX3BrZ3MKKyAgICAgICAgICAgICAg ICAgICAgKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9tb2R1bGUobW9kdWxlX25h bWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAg ICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVycikKIAogCiBAc2l4LmFkZF9t ZXRhY2xhc3MoVGVzdHNHZW5lcmF0b3JSZWdpc3RyeSkKQEAgLTEyMywzICsxMzksMTEgQEAgY2xh c3MgQmFzZVRlc3RHZW5lcmF0b3IodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIEBjbGFzc21ldGhv ZAogICAgIGRlZiBzZXRUZXN0RGF0YWJhc2VOYW1lKGNscywgZGF0YWJhc2VfbmFtZSk6CiAgICAg ICAgIGNscy50ZXN0X2RiID0gZGF0YWJhc2VfbmFtZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAg ZGVmIHNldFJlU1FMTW9kdWxlTGlzdChjbHMsIG1vZHVsZV9saXN0KToKKyAgICAgICAgY2xzLnJl X3NxbF9tb2R1bGVfbGlzdCA9IG1vZHVsZV9saXN0CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk ZWYgc2V0RXhjbHVkZVBrZ3MoY2xzLCBleGNsdWRlX3BrZ3MpOgorICAgICAgICBjbHMuZXhjbHVk ZV9wa2dzID0gZXhjbHVkZV9wa2dzCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9SRUFETUUg Yi93ZWIvcmVncmVzc2lvbi9SRUFETUUKaW5kZXggNmE2OGQzNmYuLmZlYzA5MWUyIDEwMDY0NAot LS0gYS93ZWIvcmVncmVzc2lvbi9SRUFETUUKKysrIGIvd2ViL3JlZ3Jlc3Npb24vUkVBRE1FCkBA IC0xNDgsNiArMTQ4LDkgQEAgUHl0aG9uIFRlc3RzOgogICAgICBydW4gJ3B5dGhvbiBydW50ZXN0 cy5weSAtLXBrZyBhbGwnIG9yIGp1c3Q6CiAgICAgICAgICAncHl0aG9uIHJ1bnRlc3RzLnB5Jwog CistIEV4ZWN1dGUgb25seSByZXZlcnNlIGVuZ2luZWVyZWQgc3FsIHRlc3QgZnJhbWV3b3JrIGZv ciBhbGwgbm9kZXMKKyAgICAgcnVuICdweXRob24gcnVudGVzdHMucHkgLS1wa2cgcmVzcWwnCisK IC0gRXhlY3V0ZSB0ZXN0IGZyYW1ld29yayBmb3IgZW50aXJlIHBhY2thZ2UKIAogICAgICBFeGFt cGxlIDEpIFJ1biB0ZXN0IGZyYW1ld29yayBmb3IgJ2Jyb3dzZXInIHBhY2thZ2UKZGlmZiAtLWdp dCBhL3dlYi9yZWdyZXNzaW9uL3JlX3NxbC9fX2luaXRfXy5weSBiL3dlYi9yZWdyZXNzaW9uL3Jl X3NxbC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTY5 ZGUyOWIKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL3JlX3NxbC90ZXN0cy9fX2luaXRfXy5w eSBiL3dlYi9yZWdyZXNzaW9uL3JlX3NxbC90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTY5ZGUyOWIKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNz aW9uL3JlX3NxbC90ZXN0cy90ZXN0X3Jlc3FsLnB5IGIvd2ViL3JlZ3Jlc3Npb24vcmVfc3FsL3Rl c3RzL3Rlc3RfcmVzcWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjM2 OWM4ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcmVfc3FsL3Rlc3RzL3Rl c3RfcmVzcWwucHkKQEAgLTAsMCArMSwyMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBn QWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAx OSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVh c2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisK K2ltcG9ydCBqc29uCitpbXBvcnQgb3MKKworZnJvbSBmbGFzayBpbXBvcnQgdXJsX2ZvcgorZnJv bSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBCYXNlVGVzdEdlbmVyYXRvcgorZnJvbSByZWdy ZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxzIGltcG9ydCB0ZXN0X3V0aWxzIGFzIHV0aWxzCitmcm9t IHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnRlc3RzIGlt cG9ydCBcCisgICAgdXRpbHMgYXMgZGF0YWJhc2VfdXRpbHMKK2Zyb20gcGdhZG1pbi51dGlscy52 ZXJzaW9uZWRfdGVtcGxhdGVfbG9hZGVyIGltcG9ydCBcCisgICAgZ2V0X3ZlcnNpb25fbWFwcGlu Z19kaXJlY3RvcmllcworCisKK2RlZiBjcmVhdGVfcmVzcWxfbW9kdWxlX2xpc3QoYWxsX21vZHVs ZXMsIGV4Y2x1ZGVfcGtncyk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv IGNyZWF0ZSB0aGUgbW9kdWxlIGxpc3QgZm9yIHJldmVyc2UgZW5naW5lZXJpbmcKKyAgICBTUUwg YnkgaXRlcmF0aW5nIGFsbCB0aGUgbW9kdWxlcy4KKworICAgIDpwYXJhbSBhbGxfbW9kdWxlczog TGlzdCBvZiBhbGwgdGhlIG1vZHVsZXMKKyAgICA6cGFyYW0gZXhjbHVkZV9wa2dzOiBMaXN0IG9m IGV4Y2x1ZGUgcGFja2FnZXMKKyAgICA6cmV0dXJuOgorICAgICIiIgorICAgIHJlc3FsX21vZHVs ZV9saXN0ID0gZGljdCgpCisKKyAgICBmb3IgbW9kdWxlIGluIGFsbF9tb2R1bGVzOgorICAgICAg ICBpZiAidGVzdHMuIiBpbiBzdHIobW9kdWxlKSBhbmQgbm90IGFueShzdHIobW9kdWxlKS5zdGFy dHN3aXRoKAorICAgICAgICAgICAgICAgICdwZ2FkbWluLicgKyBzdHIoZXhjbHVkZV9wa2cpKSBm b3IgZXhjbHVkZV9wa2cgaW4gZXhjbHVkZV9wa2dzCisgICAgICAgICk6CisgICAgICAgICAgICBj b21wbGV0ZV9tb2R1bGVfbmFtZSA9IG1vZHVsZS5zcGxpdCgiLnRlc3QiKQorICAgICAgICAgICAg bW9kdWxlX25hbWVfbGlzdCA9IGNvbXBsZXRlX21vZHVsZV9uYW1lWzBdLnNwbGl0KCIuIikKKyAg ICAgICAgICAgIG1vZHVsZV9uYW1lID0gbW9kdWxlX25hbWVfbGlzdFtsZW4obW9kdWxlX25hbWVf bGlzdCkgLSAxXQorCisgICAgICAgICAgICByZXNxbF9tb2R1bGVfbGlzdFttb2R1bGVfbmFtZV0g PSBvcy5wYXRoLmpvaW4oKm1vZHVsZV9uYW1lX2xpc3QpCisKKyAgICByZXR1cm4gcmVzcWxfbW9k dWxlX2xpc3QKKworCitjbGFzcyBSZXZlcnNlRW5naW5lZXJlZFNRTFRlc3RDYXNlcyhCYXNlVGVz dEdlbmVyYXRvcik6CisgICAgIiIiIFRoaXMgY2xhc3Mgd2lsbCB0ZXN0IHRoZSByZXZlcnNlIGVu Z2luZWVyaW5nIFNRTCIiIgorCisgICAgc2NlbmFyaW9zID0gWworICAgICAgICAoJ1JldmVyc2Ug RW5naW5lZXJlZCBTUUwgVGVzdCBDYXNlcycsIGRpY3QoKSkKKyAgICBdCisKKyAgICBkZWYgc2V0 VXAoc2VsZik6CisgICAgICAgICMgR2V0IHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uCisgICAgICAg IHNlbGYuZGJfY29uID0gZGF0YWJhc2VfdXRpbHMuY29ubmVjdF9kYXRhYmFzZSgKKyAgICAgICAg ICAgIHNlbGYsIHV0aWxzLlNFUlZFUl9HUk9VUCwgc2VsZi5zZXJ2ZXJfaW5mb3JtYXRpb25bJ3Nl cnZlcl9pZCddLAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaW5mb3JtYXRpb25bJ2RiX2lkJ10p CisgICAgICAgIGlmIG5vdCBzZWxmLmRiX2NvblsnaW5mbyddID09ICJEYXRhYmFzZSBjb25uZWN0 ZWQuIjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGQgbm90IGNvbm5lY3QgdG8g ZGF0YWJhc2UuIikKKworICAgICAgICAjIEdldCB0aGUgYXBwbGljYXRpb24gcGF0aAorICAgICAg ICBzZWxmLmFwcHBhdGggPSBvcy5nZXRjd2QoKQorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6Cisg ICAgICAgICMgQ3JlYXRlIHRoZSBtb2R1bGUgbGlzdCBvbiB3aGljaCByZXZlcnNlIGVuZ2luZWVy aW5nIHNxbCB0ZXN0CisgICAgICAgICMgY2FzZXMgd2lsbCBiZSBleGVjdXRlZC4KKyAgICAgICAg cmVzcWxfbW9kdWxlX2xpc3QgPSBjcmVhdGVfcmVzcWxfbW9kdWxlX2xpc3QoCisgICAgICAgICAg ICBCYXNlVGVzdEdlbmVyYXRvci5yZV9zcWxfbW9kdWxlX2xpc3QsCisgICAgICAgICAgICBCYXNl VGVzdEdlbmVyYXRvci5leGNsdWRlX3BrZ3MpCisKKyAgICAgICAgZm9yIG1vZHVsZSBpbiByZXNx bF9tb2R1bGVfbGlzdDoKKyAgICAgICAgICAgIG1vZHVsZV9wYXRoID0gcmVzcWxfbW9kdWxlX2xp c3RbbW9kdWxlXQorICAgICAgICAgICAgIyBHZXQgdGhlIGZvbGRlciBuYW1lIGJhc2VkIG9uIHNl cnZlciB2ZXJzaW9uIG51bWJlciBhbmQKKyAgICAgICAgICAgICMgdGhlaXIgZXhpc3RlbmNlLgor ICAgICAgICAgICAgc3RhdHVzLCBzZWxmLnRlc3RfZm9sZGVyID0gc2VsZi5nZXRfdGVzdF9mb2xk ZXIobW9kdWxlX3BhdGgpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg ICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgSXRlcmF0ZSBhbGwgdGhlIGZpbGVzIGluIHRo ZSB0ZXN0IGZvbGRlciBhbmQgY2hlY2sgZm9yCisgICAgICAgICAgICAjIHRoZSBKU09OIGZpbGVz LgorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoc2VsZi50ZXN0X2ZvbGRl cik6CisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5qc29uIik6CisgICAg ICAgICAgICAgICAgICAgIGNvbXBsZXRlX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnRl c3RfZm9sZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb21wbGV0 ZV9maWxlX25hbWUpIGFzIGpzb25mcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBq c29uLmxvYWQoanNvbmZwKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgc2NlbmFy aW9zIGluIGRhdGEuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4 ZWN1dGVfdGVzdF9jYXNlKHNjZW5hcmlvcykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAg ICAgICAgZGF0YWJhc2VfdXRpbHMuZGlzY29ubmVjdF9kYXRhYmFzZSgKKyAgICAgICAgICAgIHNl bGYsIHNlbGYuc2VydmVyX2luZm9ybWF0aW9uWydzZXJ2ZXJfaWQnXSwKKyAgICAgICAgICAgIHNl bGYuc2VydmVyX2luZm9ybWF0aW9uWydkYl9pZCddKQorCisgICAgZGVmIGdldF91cmwoc2VsZiwg ZW5kcG9pbnQsIG9iamVjdF9pZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVu Y3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHVybC4KKworICAgICAgICA6cGFyYW0gZW5kcG9pbnQ6 CisgICAgICAgIDpwYXJhbSBvYmplY3RfaWQ6CisgICAgICAgIDpyZXR1cm46CisgICAgICAgICIi IgorICAgICAgICBvYmplY3RfdXJsID0gTm9uZQorICAgICAgICBmb3IgcnVsZSBpbiBzZWxmLmFw cC51cmxfbWFwLml0ZXJfcnVsZXMoZW5kcG9pbnQpOgorICAgICAgICAgICAgb3B0aW9ucyA9IHt9 CisgICAgICAgICAgICBmb3IgYXJnIGluIHJ1bGUuYXJndW1lbnRzOgorICAgICAgICAgICAgICAg IGlmIGFyZyA9PSAnZ2lkJzoKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1snZ2lkJ10gPSBp bnQodXRpbHMuU0VSVkVSX0dST1VQKQorICAgICAgICAgICAgICAgIGVsaWYgYXJnID09ICdzaWQn OgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zWydzaWQnXSA9IGludChzZWxmLnNlcnZlcl9p bmZvcm1hdGlvblsnc2VydmVyX2lkJ10pCisgICAgICAgICAgICAgICAgZWxpZiBhcmcgPT0gJ2Rp ZCc6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2RpZCddID0gaW50KHNlbGYuc2VydmVy X2luZm9ybWF0aW9uWydkYl9pZCddKQorICAgICAgICAgICAgICAgIGVsaWYgYXJnID09ICdzY2lk JzoKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1snc2NpZCddID0gaW50KHNlbGYuc2VydmVy X2luZm9ybWF0aW9uWydzY2hlbWFfaWQnXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg ICAgICAgICAgICAgICBpZiBvYmplY3RfaWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg ICAgICAgICBvcHRpb25zW2FyZ10gPSBpbnQob2JqZWN0X2lkKQorCisgICAgICAgICAgICB3aXRo IHNlbGYuYXBwLnRlc3RfcmVxdWVzdF9jb250ZXh0KCk6CisgICAgICAgICAgICAgICAgb2JqZWN0 X3VybCA9IHVybF9mb3IocnVsZS5lbmRwb2ludCwgKipvcHRpb25zKQorCisgICAgICAgIHJldHVy biBvYmplY3RfdXJsCisKKyAgICBkZWYgZXhlY3V0ZV90ZXN0X2Nhc2Uoc2VsZiwgc2NlbmFyaW9z KToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBydW4gdGhlIHRlc3Qg Y2FzZXMgZm9yIHNwZWNpZmljIG1vZHVsZS4KKworICAgICAgICA6cGFyYW0gbW9kdWxlX25hbWU6 IE5hbWUgb2YgdGhlIG1vZHVsZQorICAgICAgICA6cGFyYW0gc2NlbmFyaW9zOiBMaXN0IG9mIHNj ZW5hcmlvcworICAgICAgICA6cmV0dXJuOgorICAgICAgICAiIiIKKyAgICAgICAgb2JqZWN0X2lk ID0gTm9uZQorICAgICAgICAjIEFkZGVkIGxpbmUgYnJlYWsgYWZ0ZXIgc2NlbmFyaW8gbmFtZQor ICAgICAgICBwcmludCgiXG4iKQorCisgICAgICAgIGZvciBzY2VuYXJpbyBpbiBzY2VuYXJpb3M6 CisgICAgICAgICAgICBwcmludChzY2VuYXJpb1snbmFtZSddKQorCisgICAgICAgICAgICBpZiAn dHlwZScgaW4gc2NlbmFyaW8gYW5kIHNjZW5hcmlvWyd0eXBlJ10gPT0gJ2NyZWF0ZSc6CisgICAg ICAgICAgICAgICAgIyBHZXQgdGhlIHVybCBhbmQgY3JlYXRlIHRoZSBzcGVjaWZpYyBub2RlLgor ICAgICAgICAgICAgICAgIGNyZWF0ZV91cmwgPSBzZWxmLmdldF91cmwoc2NlbmFyaW9bJ2VuZHBv aW50J10pCisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5wb3N0KGNyZWF0 ZV91cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9 anNvbi5kdW1wcyhzY2VuYXJpb1snZGF0YSddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSdodG1sL2pzb24nKQorICAgICAgICAgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAg ICAgICAgICAgcmVzcF9kYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29kZSgndXRm OCcpKQorICAgICAgICAgICAgICAgIG9iamVjdF9pZCA9IHJlc3BfZGF0YVsnbm9kZSddWydfaWQn XQorCisgICAgICAgICAgICAgICAgIyBDb21wYXJlIHRoZSByZXZlcnNlIGVuZ2luZWVyaW5nIFNR TAorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVfc3FsKHNjZW5hcmlvLCBvYmplY3RfaWQp CisgICAgICAgICAgICBlbGlmICd0eXBlJyBpbiBzY2VuYXJpbyBhbmQgc2NlbmFyaW9bJ3R5cGUn XSA9PSAnYWx0ZXInOgorICAgICAgICAgICAgICAgICMgR2V0IHRoZSB1cmwgYW5kIGNyZWF0ZSB0 aGUgc3BlY2lmaWMgbm9kZS4KKyAgICAgICAgICAgICAgICBhbHRlcl91cmwgPSBzZWxmLmdldF91 cmwoc2NlbmFyaW9bJ2VuZHBvaW50J10sIG9iamVjdF9pZCkKKyAgICAgICAgICAgICAgICByZXNw b25zZSA9IHNlbGYudGVzdGVyLnB1dChhbHRlcl91cmwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGF0YT1qc29uLmR1bXBzKHNjZW5hcmlvWydkYXRhJ10pLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd19yZWRpcmVj dHM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNwb25zZS5zdGF0 dXNfY29kZSwgMjAwKQorICAgICAgICAgICAgICAgIHJlc3BfZGF0YSA9IGpzb24ubG9hZHMocmVz cG9uc2UuZGF0YS5kZWNvZGUoJ3V0ZjgnKSkKKyAgICAgICAgICAgICAgICBvYmplY3RfaWQgPSBy ZXNwX2RhdGFbJ25vZGUnXVsnX2lkJ10KKworICAgICAgICAgICAgICAgICMgQ29tcGFyZSB0aGUg cmV2ZXJzZSBlbmdpbmVlcmluZyBTUUwKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3JlX3Nx bChzY2VuYXJpbywgb2JqZWN0X2lkKQorICAgICAgICAgICAgZWxpZiAndHlwZScgaW4gc2NlbmFy aW8gYW5kIHNjZW5hcmlvWyd0eXBlJ10gPT0gJ2RlbGV0ZSc6CisgICAgICAgICAgICAgICAgIyBH ZXQgdGhlIGRlbGV0ZSB1cmwgYW5kIGRlbGV0ZSB0aGUgb2JqZWN0IGNyZWF0ZWQgYWJvdmUuCisg ICAgICAgICAgICAgICAgZGVsZXRlX3VybCA9IHNlbGYuZ2V0X3VybChzY2VuYXJpb1snZW5kcG9p bnQnXSwgb2JqZWN0X2lkKQorICAgICAgICAgICAgICAgIGRlbGV0ZV9yZXNwb25zZSA9IHNlbGYu dGVzdGVyLmRlbGV0ZShkZWxldGVfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfcmVkaXJlY3RzPVRydWUpCisgICAgICAgICAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVsZXRlX3Jlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDAp CisKKyAgICBkZWYgZ2V0X3Rlc3RfZm9sZGVyKHNlbGYsIG1vZHVsZV9wYXRoKToKKyAgICAgICAg IiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGFwcHJvcHJpYXRlIHRlc3Qg Zm9sZGVyIGJhc2VkIG9uCisgICAgICAgIHNlcnZlciB2ZXJzaW9uIGFuZCB0aGVpciBleGlzdGVu Y2UuCisKKyAgICAgICAgOnBhcmFtIG1vZHVsZV9wYXRoOiBQYXRoIG9mIHRoZSBtb2R1bGUgdG8g YmUgdGVzdGVkLgorICAgICAgICA6cmV0dXJuOgorICAgICAgICAiIiIKKyAgICAgICAgIyBKb2lu IHRoZSBhcHBsaWNhdGlvbiBwYXRoIGFuZCB0aGUgbW9kdWxlIHBhdGgKKyAgICAgICAgYWJzb2x1 dGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmFwcHBhdGgsIG1vZHVsZV9wYXRoKQorICAgICAg ICAjIEl0ZXJhdGUgdGhlIHZlcnNpb24gbWFwcGluZyBkaXJlY3Rvcmllcy4KKyAgICAgICAgZm9y IHZlcnNpb25fbWFwcGluZyBpbiBnZXRfdmVyc2lvbl9tYXBwaW5nX2RpcmVjdG9yaWVzKAorICAg ICAgICAgICAgICAgIHNlbGYuc2VydmVyWyd0eXBlJ10pOgorICAgICAgICAgICAgaWYgdmVyc2lv bl9tYXBwaW5nWydudW1iZXInXSA+IFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJf aW5mb3JtYXRpb25bJ3NlcnZlcl92ZXJzaW9uJ106CisgICAgICAgICAgICAgICAgY29udGludWUK KworICAgICAgICAgICAgY29tcGxldGVfcGF0aCA9IG9zLnBhdGguam9pbihhYnNvbHV0ZV9wYXRo LCAndGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJz aW9uX21hcHBpbmdbJ25hbWUnXSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29t cGxldGVfcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUsIGNvbXBsZXRlX3BhdGgK KworICAgICAgICByZXR1cm4gRmFsc2UsIE5vbmUKKworICAgIGRlZiBjaGVja19yZV9zcWwoc2Vs Ziwgc2NlbmFyaW8sIG9iamVjdF9pZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0 aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSByZXZlcnNlIGVuZ2luZWVyaW5nIFNRTC4KKyAgICAgICAg OnBhcmFtIHNjZW5hcmlvOgorICAgICAgICA6cGFyYW0gb2JqZWN0X2lkOgorICAgICAgICA6cmV0 dXJuOgorICAgICAgICAiIiIKKyAgICAgICAgc3FsX3VybCA9IHNlbGYuZ2V0X3VybChzY2VuYXJp b1snc3FsX2VuZHBvaW50J10sIG9iamVjdF9pZCkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRl c3Rlci5nZXQoc3FsX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcG9uc2Uuc3Rh dHVzX2NvZGUsIDIwMCkKKyAgICAgICAgcmVzcF9zcWwgPSByZXNwb25zZS5kYXRhLmRlY29kZSgn dW5pY29kZV9lc2NhcGUnKQorCisgICAgICAgICMgUmVtb3ZlIGZpcnN0IGFuZCBsYXN0IGRvdWJs ZSBxdW90ZXMKKyAgICAgICAgaWYgcmVzcF9zcWwuc3RhcnRzd2l0aCgnIicpIGFuZCByZXNwX3Nx bC5lbmRzd2l0aCgnIicpOgorICAgICAgICAgICAgcmVzcF9zcWwgPSByZXNwX3NxbFsxOi0xXQor CisgICAgICAgICMgQ2hlY2sgaWYgZXhwZWN0ZWQgc3FsIGlzIGdpdmVuIGluIEpTT04gZmlsZSBv ciBwYXRoIG9mIHRoZSBvdXRwdXQKKyAgICAgICAgIyBmaWxlIGlzIGdpdmVuCisgICAgICAgIGlm ICdleHBlY3RlZF9zcWxfZmlsZScgaW4gc2NlbmFyaW86CisgICAgICAgICAgICBvdXRwdXRfZmls ZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RfZm9sZGVyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2NlbmFyaW9bJ2V4cGVjdGVkX3NxbF9maWxlJ10pCisKKyAgICAg ICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dHB1dF9maWxlKToKKyAgICAgICAgICAgICAgICBm cCA9IG9wZW4ob3V0cHV0X2ZpbGUsICJyIikKKyAgICAgICAgICAgICAgICAjIFVzZWQgcnN0cmlw IHRvIHJlbW92ZSB0cmFpbGluZyBcbgorICAgICAgICAgICAgICAgIHNxbCA9IGZwLnJlYWQoKS5y c3RyaXAoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNxbCwgcmVzcF9zcWwp CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIkV4 cGVjdGVkIFNRTCBGaWxlIG5vdCBmb3VuZCIpCisgICAgICAgIGVsaWYgJ2V4cGVjdGVkX3NxbCcg aW4gc2NlbmFyaW86CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzY2VuYXJpb1snZXhw ZWN0ZWRfc3FsJ10sIHJlc3Bfc3FsKQpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vcnVudGVz dHMucHkgYi93ZWIvcmVncmVzc2lvbi9ydW50ZXN0cy5weQppbmRleCA0ZjgxMzE0NS4uMWQ0ZmE1 NGIgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5CisrKyBiL3dlYi9yZWdy ZXNzaW9uL3J1bnRlc3RzLnB5CkBAIC0yNDksNiArMjQ5LDEwIEBAIGRlZiBnZXRfdGVzdF9tb2R1 bGVzKGFyZ3VtZW50cyk6CiAgICAgIyBMb2FkIHRoZSB0ZXN0IG1vZHVsZXMgd2hpY2ggYXJlIGlu IGdpdmVuIHBhY2thZ2UoaS5lLiBpbiBhcmd1bWVudHMucGtnKQogICAgIGlmIGFyZ3VtZW50c1sn cGtnJ10gaXMgTm9uZSBvciBhcmd1bWVudHNbJ3BrZyddID09ICJhbGwiOgogICAgICAgICBUZXN0 c0dlbmVyYXRvclJlZ2lzdHJ5LmxvYWRfZ2VuZXJhdG9ycygncGdhZG1pbicsIGV4Y2x1ZGVfcGtn cykKKyAgICBlbGlmIGFyZ3VtZW50c1sncGtnJ10gaXMgbm90IE5vbmUgYW5kIGFyZ3VtZW50c1sn cGtnJ10gPT0gInJlc3FsIjoKKyAgICAgICAgIyBMb2FkIHRoZSByZXZlcnNlIGVuZ2luZWVyaW5n IHNxbCB0ZXN0IG1vZHVsZQorICAgICAgICBUZXN0c0dlbmVyYXRvclJlZ2lzdHJ5LmxvYWRfZ2Vu ZXJhdG9ycygncGdhZG1pbicsIGV4Y2x1ZGVfcGtncywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaXNfcmVzcWxfb25seT1UcnVlKQogICAgIGVsc2U6CiAg ICAgICAgIGZvcl9tb2R1bGVzID0gW10KICAgICAgICAgaWYgYXJndW1lbnRzWydtb2R1bGVzJ10g aXMgbm90IE5vbmU6CkBAIC00MzgsNiArNDQyLDkgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f JzoKICAgICAgICAgICAgICAgICBzZXJ2ZXJbJ3NzbG1vZGUnXQogICAgICAgICAgICAgKQogCisg ICAgICAgICAgICAjIEFkZCB0aGUgc2VydmVyIHZlcnNpb24gaW4gc2VydmVyIGluZm9ybWF0aW9u CisgICAgICAgICAgICBzZXJ2ZXJfaW5mb3JtYXRpb25bJ3NlcnZlcl92ZXJzaW9uJ10gPSBjb25u ZWN0aW9uLnNlcnZlcl92ZXJzaW9uCisKICAgICAgICAgICAgICMgRHJvcCB0aGUgZGF0YWJhc2Ug aWYgYWxyZWFkeSBleGlzdHMuCiAgICAgICAgICAgICB0ZXN0X3V0aWxzLmRyb3BfZGF0YWJhc2Uo Y29ubmVjdGlvbiwgdGVzdF9kYl9uYW1lKQogICAgICAgICAgICAgIyBDcmVhdGUgZGF0YWJhc2UK --000000000000a87d67058b92e3f0--