Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dPktb-0000ky-L5 for pgadmin-hackers@arkaria.postgresql.org; Tue, 27 Jun 2017 07:26:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dPkta-0006t2-GS for pgadmin-hackers@arkaria.postgresql.org; Tue, 27 Jun 2017 07:26:46 +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.84_2) (envelope-from ) id 1dPktZ-0006ss-9r for pgadmin-hackers@lists.postgresql.org; Tue, 27 Jun 2017 07:26:46 +0000 Received: from mail-yw0-x235.google.com ([2607:f8b0:4002:c05::235]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1dPktQ-0002yj-5O for pgadmin-hackers@postgresql.org; Tue, 27 Jun 2017 07:26:43 +0000 Received: by mail-yw0-x235.google.com with SMTP id l21so277879ywb.1 for ; Tue, 27 Jun 2017 00:26:35 -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=/R+uliNzQiiOGrvz0TBdJRizmMWITWu9o2XvJJEiXyo=; b=UoNxnEV8jlMY0XDEQcz5KfA24AirDg5Z3opAy1VHNljR98RWMUp1vHhFYqZMLZMwRN fuClRY2UV6ggmUs0BrhiCkcvbBinMmo2/w0jzEpyyx7WOJi8Fg9/1BaFfavQkgfpK2ED kUH930aknDIBGgLAPTqL2voPmLWgeP3W3YSncM6LgFcYCLdzmakTSyf41f07h5TLDlZ4 hBtWm8smJzBnNLcPdNBeKHK3b2yE+/EgU/hzOVjIyQaZjkYh+CT885DMP9tPiodAbMMC 7V5tgAiWElUAj796l8GSHmBlExdtl1fQqG7asG1bXXhz5qwUl0eh1R1QO82p59xi6NCJ VFow== 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=/R+uliNzQiiOGrvz0TBdJRizmMWITWu9o2XvJJEiXyo=; b=rTVl7sE6eP+O7Na57eslrkwLrx+qZ0Mrwg/59XFvC6b/kv3xOBkmpFebbsbLjCMVC7 zatKh56jNQ4E4XkN7BfWblUGvBSo+eEna+VnroXGkfA3FnFvD9bhI3a9/AMUIZjUfve7 Cn64yMG8GRt+Ex8QC0BR0WfH9wJ0P32SNzWzjAdsuXRBqB7va75o/jsE63ODgsd48ZKD B9VYWw8AoexmqoX39IokB7HND92tn0fZAhxHn6Cj7DPTY4efibU5f3p8mmdHZ7qTTIj0 gkkWcycg1586xjtAcxVm+mhBUqJwX4nJ4f+pYGlD8HKpfBpSkeRePzBr+fIxPZonqTTh F4KQ== X-Gm-Message-State: AKS2vOxQn4Gv9qPmjYLNyX7lWSpSyVdk6evdRBjrchbq2Olmp+yJh6/P CNCBLXxRPbeV6mF1anr2oLfo+n3XG8QK X-Received: by 10.13.213.21 with SMTP id x21mr2792032ywd.224.1498548394991; Tue, 27 Jun 2017 00:26:34 -0700 (PDT) MIME-Version: 1.0 Received: by 10.13.193.68 with HTTP; Tue, 27 Jun 2017 00:26:34 -0700 (PDT) In-Reply-To: References: From: Harshal Dhumal Date: Tue, 27 Jun 2017 12:56:34 +0530 Message-ID: Subject: Re: [pgadmin-hackers] Re: Server side cursor limitations for on demand loading of data in query tool [RM2137] [pgAdmin4] To: Dave Page Cc: Harshal Dhumal , Ashesh Vashi , pgadmin-hackers Content-Type: multipart/mixed; boundary="001a114fc0fac35e220552ebfcd2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Unsubscribe: , List-Archive: Precedence: bulk --001a114fc0fac35e220552ebfcd2 Content-Type: multipart/alternative; boundary="001a114fc0fac35e1e0552ebfcd0" --001a114fc0fac35e1e0552ebfcd0 Content-Type: text/plain; charset="UTF-8" Hi, Please find rebased patch. -- *Harshal Dhumal* *Sr. Software Engineer* EnterpriseDB India: http://www.enterprisedb.com The Enterprise PostgreSQL Company On Mon, Jun 26, 2017 at 5:24 PM, Harshal Dhumal < harshal.dhumal@enterprisedb.com> wrote: > yes i'm working on that only :) > > > -- > *Harshal Dhumal* > *Sr. Software Engineer* > > EnterpriseDB India: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > > On Mon, Jun 26, 2017 at 5:22 PM, Dave Page wrote: > >> I'm sorry, it needs rebasing again. If you can do it quickly, I'll >> make sure it's the next patch I work on in that area. >> >> Thanks. >> >> On Mon, Jun 26, 2017 at 5:16 AM, Harshal Dhumal >> wrote: >> > Hi Dave, >> > >> > Please find updated rebased patch for RM2137 >> > >> > On Fri, Jun 23, 2017 at 9:00 PM, Dave Page wrote: >> >> >> >> Hi Harshal, >> >> >> >> When can we expect an updated version of this patch? I think it's >> >> important to get this into the next release. >> >> >> >> Thanks! >> >> >> >> On Fri, Jun 16, 2017 at 10:55 AM, Dave Page wrote: >> >> > Hi, >> >> > >> >> > That's better - the failures are far less random now :-). I got the >> >> > following two though, on both PG and EPAS 9.5: >> >> > >> >> > ============================================================ >> ========== >> >> > ERROR: runTest >> >> > (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest) >> >> > Query tool feature test >> >> > ------------------------------------------------------------ >> ---------- >> >> > Traceback (most recent call last): >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_ >> tool_tests.py", >> >> > line 95, in runTest >> >> > self._query_tool_explain_analyze_buffers() >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_ >> tool_tests.py", >> >> > line 443, in _query_tool_explain_analyze_buffers >> >> > canvas.find_element_by_xpath("//*[contains(string(), 'Shared >> Read >> >> > Blocks')]") >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webelement.py", >> >> > line 260, in find_element_by_xpath >> >> > return self.find_element(by=By.XPATH, value=xpath) >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webelement.py", >> >> > line 508, in find_element >> >> > {"using": by, "value": value})['value'] >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webelement.py", >> >> > line 491, in _execute >> >> > return self._parent.execute(command, params) >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> > line 238, in execute >> >> > self.error_handler.check_response(response) >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/errorhandler.py", >> >> > line 193, in check_response >> >> > raise exception_class(message, screen, stacktrace) >> >> > NoSuchElementException: Message: no such element: Unable to locate >> >> > element: {"method":"xpath","selector":"//*[contains(string(), >> 'Shared >> >> > Read Blocks')]"} >> >> > (Session info: chrome=58.0.3029.110) >> >> > (Driver info: chromedriver=2.29.461585 >> >> > (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.3 >> >> > x86_64) >> >> > >> >> > >> >> > ============================================================ >> ========== >> >> > ERROR: runTest >> >> > (pgadmin.feature_tests.view_data_dml_queries.CheckForViewDataTest) >> >> > Validate Insert, Update operations in View data with given test data >> >> > ------------------------------------------------------------ >> ---------- >> >> > Traceback (most recent call last): >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_ >> data_dml_queries.py", >> >> > line 104, in runTest >> >> > self._add_row() >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_ >> data_dml_queries.py", >> >> > line 255, in _add_row >> >> > self._update_cell(cell_xpath, config_data[str(idx)]) >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_ >> data_dml_queries.py", >> >> > line 164, in _update_cell >> >> > cell_el = self.page.find_by_xpath(xpath) >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgad >> min_page.py", >> >> > line 122, in find_by_xpath >> >> > return self.wait_for_element(lambda driver: >> >> > driver.find_element_by_xpath(xpath)) >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgad >> min_page.py", >> >> > line 205, in wait_for_element >> >> > return self._wait_for("element to exist", element_if_it_exists) >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgad >> min_page.py", >> >> > line 255, in _wait_for >> >> > "Timed out waiting for " + waiting_for_message) >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/support/wait.py", >> >> > line 71, in until >> >> > value = method(self._driver) >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/regression/feature_utils/pgad >> min_page.py", >> >> > line 200, in element_if_it_exists >> >> > if element.is_displayed() and element.is_enabled(): >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webelement.py", >> >> > line 358, in is_displayed >> >> > return self._execute(Command.IS_ELEMENT_DISPLAYED)['value'] >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webelement.py", >> >> > line 491, in _execute >> >> > return self._parent.execute(command, params) >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> > line 238, in execute >> >> > self.error_handler.check_response(response) >> >> > File >> >> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/errorhandler.py", >> >> > line 193, in check_response >> >> > raise exception_class(message, screen, stacktrace) >> >> > StaleElementReferenceException: Message: stale element reference: >> >> > element is not attached to the page document >> >> > (Session info: chrome=58.0.3029.110) >> >> > (Driver info: chromedriver=2.29.461585 >> >> > (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.3 >> >> > x86_64) >> >> > >> > >> > >> > I checked my feature test cases for any database server version/type >> (PG, >> > EPAS) specific failures and I found that test cases are working fine on >> all >> > of them. However I have slightly modified test case to overcome above >> > mentioned failures. >> > >> >> >> >> > >> >> > On 9.4 everything passes. On 9.6, I get one failure: >> >> > >> >> > ============================================================ >> ========== >> >> > FAIL: runTest >> >> > (pgadmin.feature_tests.view_data_dml_queries.CheckForViewDataTest) >> >> > Validate Insert, Update operations in View data with given test data >> >> > ------------------------------------------------------------ >> ---------- >> >> > Traceback (most recent call last): >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_ >> data_dml_queries.py", >> >> > line 105, in runTest >> >> > self._verify_row_data(True) >> >> > File >> >> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/view_ >> data_dml_queries.py", >> >> > line 282, in _verify_row_data >> >> > self.assertEquals(cells[idx], config_data[str(idx)][1]) >> >> > AssertionError: u'[default]' != u'1' >> >> > - [default] >> >> > + 1 >> >> > >> > >> > I guess Khushboo has fixed this recently. >> > >> > >> >> >> >> > Screenshots attached. >> >> > >> >> > On Fri, Jun 16, 2017 at 7:54 AM, Harshal Dhumal >> >> > wrote: >> >> >> Hi Dave, >> >> >> >> >> >> Please find attached patch where I have added timeout of 2 seconds >> >> >> before >> >> >> selecting object menu in connect to server function. >> >> >> >> >> >> Note: Apply this patch on top of previous patch for on demand >> loading >> >> >> feature. >> >> >> >> >> >> >> >> >> -- >> >> >> Harshal Dhumal >> >> >> Sr. Software Engineer >> >> >> >> >> >> EnterpriseDB India: http://www.enterprisedb.com >> >> >> The Enterprise PostgreSQL Company >> >> >> >> >> >> On Fri, Jun 16, 2017 at 2:25 AM, Dave Page >> wrote: >> >> >>> >> >> >>> Sounds good, thanks. >> >> >>> >> >> >>> On Thu, Jun 15, 2017 at 9:54 PM, Harshal Dhumal >> >> >>> wrote: >> >> >>> > Hi >> >> >>> > >> >> >>> > On Fri, Jun 16, 2017 at 2:07 AM, Dave Page >> >> >>> > wrote: >> >> >>> >> >> >> >>> >> Hi >> >> >>> >> >> >> >>> >> On Thu, Jun 15, 2017 at 9:30 PM, Harshal Dhumal >> >> >>> >> wrote: >> >> >>> >> > Hi Dave, >> >> >>> >> > >> >> >>> >> > Please find attached updated patch. >> >> >>> >> > >> >> >>> >> > On Thu, Jun 15, 2017 at 3:58 PM, Dave Page > > >> >> >>> >> > wrote: >> >> >>> >> >> >> >> >>> >> >> Hi >> >> >>> >> >> >> >> >>> >> >> On Wed, Jun 14, 2017 at 11:36 PM, Harshal Dhumal >> >> >>> >> >> wrote: >> >> >>> >> >>> >> >> >>> >> >>> Hi Dave, >> >> >>> >> >>> >> >> >>> >> >>> Please find rebased patch for RM2137. >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> Looking very good. The only issues I see are: >> >> >>> >> >> >> >> >>> >> >> - The row headers should auto-size such that they can display >> >> >>> >> >> the >> >> >>> >> >> row >> >> >>> >> >> numbers if the last row was displayed. E.g. if there are >> 12345 >> >> >>> >> >> rows >> >> >>> >> >> in >> >> >>> >> >> total, then the row header should be sized to display 5 >> digits. >> >> >>> >> >> >> >> >>> >> > Fixed. >> >> >>> >> > >> >> >>> >> > >> >> >>> >> >> >> >> >>> >> >> - The tests are comprehensive, which is awesome. However, >> every >> >> >>> >> >> time >> >> >>> >> >> I >> >> >>> >> >> ran >> >> >>> >> >> them, at least one of the feature tests failed. >> Unfortunately, >> >> >>> >> >> it >> >> >>> >> >> was a >> >> >>> >> >> different one each time. In the last two runs, I got: >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> ============================================================ >> ========== >> >> >>> >> >> ERROR: runTest >> >> >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest >> ) >> >> >>> >> >> Query tool feature test >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> ------------------------------------------------------------ >> ---------- >> >> >>> >> >> Traceback (most recent call last): >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/git/pgadmin4/web/regression/feature_utils/base >> _feature_test.py", >> >> >>> >> >> line 40, in setUp >> >> >>> >> >> self.before() >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_ >> tool_tests.py", >> >> >>> >> >> line 40, in before >> >> >>> >> >> self._connects_to_server() >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_ >> tool_tests.py", >> >> >>> >> >> line 144, in _connects_to_server >> >> >>> >> >> self.page.driver.find_element_by_link_text("Create"))\ >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> >>> >> >> line 319, in find_element_by_link_text >> >> >>> >> >> return self.find_element(by=By.LINK_TEXT, >> value=link_text) >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> >>> >> >> line 756, in find_element >> >> >>> >> >> 'value': value})['value'] >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> >>> >> >> line 238, in execute >> >> >>> >> >> self.error_handler.check_response(response) >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/errorhandler.py", >> >> >>> >> >> line 193, in check_response >> >> >>> >> >> raise exception_class(message, screen, stacktrace) >> >> >>> >> >> NoSuchElementException: Message: no such element: Unable to >> >> >>> >> >> locate >> >> >>> >> >> element: {"method":"link text","selector":"Create"} >> >> >>> >> >> (Session info: chrome=58.0.3029.110) >> >> >>> >> >> (Driver info: chromedriver=2.29.461585 >> >> >>> >> >> (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X >> >> >>> >> >> 10.12.3 >> >> >>> >> >> x86_64) >> >> >>> >> >> >> >> >>> >> > I checked code from _connects_to_server function which is >> common >> >> >>> >> > in >> >> >>> >> > all >> >> >>> >> > features test cases. I didn't find anything wrong with this. >> If >> >> >>> >> > there >> >> >>> >> > is >> >> >>> >> > a >> >> >>> >> > bug in this function then all feature test must fail. >> >> >>> >> > Let me know if you are getting failure consistently in >> >> >>> >> > _connects_to_server >> >> >>> >> > function. >> >> >>> >> >> >> >>> >> I wondered if that one is a race condition. Do we need a short >> >> >>> >> delay >> >> >>> >> before clicking the Object menu? I have seen this occasionally >> >> >>> >> before. >> >> >>> > >> >> >>> > >> >> >>> > OK. In that case let's try putting 1-2 second delay and observer >> >> >>> > behaviour. >> >> >>> > I'll send separate patch for this tomorrow as this is not >> related to >> >> >>> > on >> >> >>> > demand query result feature or its test cases. >> >> >>> > >> >> >>> >> >> >> >>> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> ============================================================ >> ========== >> >> >>> >> >> ERROR: runTest >> >> >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest >> ) >> >> >>> >> >> Query tool feature test >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> ------------------------------------------------------------ >> ---------- >> >> >>> >> >> Traceback (most recent call last): >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_ >> tool_tests.py", >> >> >>> >> >> line 119, in runTest >> >> >>> >> >> self._query_tool_auto_rollback_enabled() >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/query_ >> tool_tests.py", >> >> >>> >> >> line 697, in _query_tool_auto_rollback_enabled >> >> >>> >> >> '//div[contains(@class, "sql-editor-message") and >> >> >>> >> >> contains(string(), >> >> >>> >> >> "COMMIT")]' >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> >>> >> >> line 295, in find_element_by_xpath >> >> >>> >> >> return self.find_element(by=By.XPATH, value=xpath) >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> >>> >> >> line 756, in find_element >> >> >>> >> >> 'value': value})['value'] >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", >> >> >>> >> >> line 238, in execute >> >> >>> >> >> self.error_handler.check_response(response) >> >> >>> >> >> File >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/errorhandler.py", >> >> >>> >> >> line 193, in check_response >> >> >>> >> >> raise exception_class(message, screen, stacktrace) >> >> >>> >> >> NoSuchElementException: Message: no such element: Unable to >> >> >>> >> >> locate >> >> >>> >> >> element: {"method":"xpath","selector":" >> //div[contains(@class, >> >> >>> >> >> "sql-editor-message") and contains(string(), "COMMIT")]"} >> >> >>> >> >> (Session info: chrome=58.0.3029.110) >> >> >>> >> >> (Driver info: chromedriver=2.29.461585 >> >> >>> >> >> (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X >> >> >>> >> >> 10.12.3 >> >> >>> >> >> x86_64) >> >> >>> >> >> >> >> >>> >> > I have updated Auto rollback enabled test in this patch. >> >> >>> >> > >> >> >>> >> >> >> >> >>> >> >> Relevant screenshots attached. >> >> >>> >> >> >> >> >>> >> >> - Can you tidy up the regression output a little please? >> Instead >> >> >>> >> >> of: >> >> >>> >> >> >> >> >>> >> >> ------- >> >> >>> >> >> runTest >> >> >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest >> ) >> >> >>> >> >> Query tool feature test ... On demand result set on >> scrolling... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> On demand result set on grid select all... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> On demand result set on column select all... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Explain query... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Explain query with verbose... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Explain query with costs... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Explain analyze query... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Explain analyze query with buffers... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Explain analyze query with timing... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Auto commit disabled... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Auto commit enabled... >> >> >>> >> >> OK. >> >> >>> >> >> >> >> >>> >> >> Auto rollback enabled... >> >> >>> >> >> ERROR >> >> >>> >> >> ------- >> >> >>> >> >> >> >> >>> >> >> Something like: >> >> >>> >> >> >> >> >>> >> >> ------- >> >> >>> >> >> runTest >> >> >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest >> ) >> >> >>> >> >> Query tool feature test ... >> >> >>> >> >> On demand result set on scrolling... OK. >> >> >>> >> >> On demand result set on grid select all... OK. >> >> >>> >> >> On demand result set on column select all... OK. >> >> >>> >> >> Explain query... OK. >> >> >>> >> >> Explain query with verbose... OK. >> >> >>> >> >> Explain query with costs... OK. >> >> >>> >> >> Explain analyze query... OK. >> >> >>> >> >> Explain analyze query with buffers... OK. >> >> >>> >> >> Explain analyze query with timing... OK. >> >> >>> >> >> Auto commit disabled... OK. >> >> >>> >> >> Auto commit enabled... OK. >> >> >>> >> >> Auto rollback enabled... ERROR >> >> >>> >> >> -------- >> >> >>> >> >> >> >> >>> >> > Fixed. >> >> >>> >> > >> >> >>> >> > >> >> >>> >> >> >> >> >>> >> >> Thanks! >> >> >>> >> >> >> >> >>> >> >> -- >> >> >>> >> >> 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 >> >> >>> > >> >> >>> > >> >> >>> >> >> >>> >> >> >>> >> >> >>> -- >> >> >>> 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 >> >> >> >> >> >> >> >> -- >> >> 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 >> > > --001a114fc0fac35e1e0552ebfcd0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Please find rebased patch.

=
--=C2=A0
Hars= hal Dhumal
Sr. Software Engineer

=
Enterpri= seDB India:=C2=A0http://www.enterpri= sedb.com
The Enterprise PostgreSQL Co= mpany

On Mon, Jun 26, 2017 at 5:24 PM, Harshal Dhu= mal <harshal.dhumal@enterprisedb.com> wrote:
yes i'm working on th= at only :)

=
<= div>
--=C2=A0
Harshal Dhumal=
Sr. Software Engineer

EnterpriseDB India= :=C2=A0http://www.enterprisedb.= com
The Enterprise PostgreSQL Company=

On Mon, Jun 26= , 2017 at 5:22 PM, Dave Page <dpage@pgadmin.org> wrote:
<= blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px= #ccc solid;padding-left:1ex">I'm sorry, it needs rebasing again. If yo= u can do it quickly, I'll
make sure it's the next patch I work on in that area.

Thanks.

On Mon, Jun 26, 2017 at 5:16 AM, Harshal Dhumal
<harshal.dhumal@enterprisedb.com> wrote:
> Hi Dave,
>
> Please find updated rebased patch for RM2137
>
> On Fri, Jun 23, 2017 at 9:00 PM, Dave Page <dpage@pgadmin.org> wrote:
>>
>> Hi Harshal,
>>
>> When can we expect an updated version of this patch? I think it= 9;s
>> important to get this into the next release.
>>
>> Thanks!
>>
>> On Fri, Jun 16, 2017 at 10:55 AM, Dave Page <dpage@pgadmin.org> wrote:
>> > Hi,
>> >
>> > That's better - the failures are far less random now :-).= I got the
>> > following two though, on both PG and EPAS 9.5:
>> >
>> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>> > ERROR: runTest
>> > (pgadmin.feature_tests.query_tool_tests.QueryToolFeature= Test)
>> > Query tool feature test
>> > --------------------------------------------------------= --------------
>> > Traceback (most recent call last):
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_test= s/query_tool_tests.py",
>> > line 95, in runTest
>> >=C2=A0 =C2=A0 =C2=A0self._query_tool_explain_analyze_buff= ers()
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_test= s/query_tool_tests.py",
>> > line 443, in _query_tool_explain_analyze_buffers
>> >=C2=A0 =C2=A0 =C2=A0canvas.find_element_by_xpath("//= *[contains(string(), 'Shared Read
>> > Blocks')]")
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/webelement.py",
>> > line 260, in find_element_by_xpath
>> >=C2=A0 =C2=A0 =C2=A0return self.find_element(by=3DBy.XPATH, va= lue=3Dxpath)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/webelement.py",
>> > line 508, in find_element
>> >=C2=A0 =C2=A0 =C2=A0{"using": by, "value":= value})['value']
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/webelement.py",
>> > line 491, in _execute
>> >=C2=A0 =C2=A0 =C2=A0return self._parent.execute(command, param= s)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/webdriver.py",
>> > line 238, in execute
>> >=C2=A0 =C2=A0 =C2=A0self.error_handler.check_response(res= ponse)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/errorhandler.py",
>> > line 193, in check_response
>> >=C2=A0 =C2=A0 =C2=A0raise exception_class(message, screen, sta= cktrace)
>> > NoSuchElementException: Message: no such element: Unable to l= ocate
>> > element: {"method":"xpath","selector= ":"//*[contains(string(), 'Shared
>> > Read Blocks')]"}
>> >=C2=A0 =C2=A0(Session info: chrome=3D58.0.3029.110)
>> >=C2=A0 =C2=A0(Driver info: chromedriver=3D2.29.461585
>> > (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=3DMa= c OS X 10.12.3
>> > x86_64)
>> >
>> >
>> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
>> > ERROR: runTest
>> > (pgadmin.feature_tests.view_data_dml_queries.CheckForVie= wDataTest)
>> > Validate Insert, Update operations in View data with given te= st data
>> > --------------------------------------------------------= --------------
>> > Traceback (most recent call last):
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_test= s/view_data_dml_queries.py",
>> > line 104, in runTest
>> >=C2=A0 =C2=A0 =C2=A0self._add_row()
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_test= s/view_data_dml_queries.py",
>> > line 255, in _add_row
>> >=C2=A0 =C2=A0 =C2=A0self._update_cell(cell_xpath, config_data[= str(idx)])
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_test= s/view_data_dml_queries.py",
>> > line 164, in _update_cell
>> >=C2=A0 =C2=A0 =C2=A0cell_el =3D self.page.find_by_xpath(xpath)=
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/regression/feature_u= tils/pgadmin_page.py",
>> > line 122, in find_by_xpath
>> >=C2=A0 =C2=A0 =C2=A0return self.wait_for_element(lambda driver= :
>> > driver.find_element_by_xpath(xpath))
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/regression/feature_u= tils/pgadmin_page.py",
>> > line 205, in wait_for_element
>> >=C2=A0 =C2=A0 =C2=A0return self._wait_for("element to exi= st", element_if_it_exists)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/regression/feature_u= tils/pgadmin_page.py",
>> > line 255, in _wait_for
>> >=C2=A0 =C2=A0 =C2=A0"Timed out waiting for " + waiti= ng_for_message)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/support/wait.py",
>> > line 71, in until
>> >=C2=A0 =C2=A0 =C2=A0value =3D method(self._driver)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/regression/feature_u= tils/pgadmin_page.py",
>> > line 200, in element_if_it_exists
>> >=C2=A0 =C2=A0 =C2=A0if element.is_displayed() and element.is_e= nabled():
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/webelement.py",
>> > line 358, in is_displayed
>> >=C2=A0 =C2=A0 =C2=A0return self._execute(Command.IS_ELEME= NT_DISPLAYED)['value']
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/webelement.py",
>> > line 491, in _execute
>> >=C2=A0 =C2=A0 =C2=A0return self._parent.execute(command, param= s)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/webdriver.py",
>> > line 238, in execute
>> >=C2=A0 =C2=A0 =C2=A0self.error_handler.check_response(res= ponse)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/s= ite-packages/selenium/webdriver/remote/errorhandler.py",
>> > line 193, in check_response
>> >=C2=A0 =C2=A0 =C2=A0raise exception_class(message, screen, sta= cktrace)
>> > StaleElementReferenceException: Message: stale element r= eference:
>> > element is not attached to the page document
>> >=C2=A0 =C2=A0(Session info: chrome=3D58.0.3029.110)
>> >=C2=A0 =C2=A0(Driver info: chromedriver=3D2.29.461585
>> > (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=3DMa= c OS X 10.12.3
>> > x86_64)
>> >
>
>
> I checked my feature test cases for any database server version/type (= PG,
> EPAS) specific failures and I found that test cases are working fine o= n all
> of them. However I have slightly modified test case to overcome above<= br> > mentioned failures.
>
>>
>> >
>> > On 9.4 everything passes. On 9.6, I get one failure:
>> >
>> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=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.feature_tests.view_data_dml_queries.CheckForVie= wDataTest)
>> > Validate Insert, Update operations in View data with given te= st data
>> > --------------------------------------------------------= --------------
>> > Traceback (most recent call last):
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_test= s/view_data_dml_queries.py",
>> > line 105, in runTest
>> >=C2=A0 =C2=A0 =C2=A0self._verify_row_data(True)
>> >=C2=A0 =C2=A0File
>> > "/Users/dpage/git/pgadmin4/web/pgadmin/feature_test= s/view_data_dml_queries.py",
>> > line 282, in _verify_row_data
>> >=C2=A0 =C2=A0 =C2=A0self.assertEquals(cells[idx], config_data[= str(idx)][1])
>> > AssertionError: u'[default]' !=3D u'1'
>> > - [default]
>> > + 1
>> >
>
> I guess Khushboo has fixed this recently.
>
>
>>
>> > Screenshots attached.
>> >
>> > On Fri, Jun 16, 2017 at 7:54 AM, Harshal Dhumal
>> > <harshal.dhumal@enterprisedb.com> wrote:
>> >> Hi Dave,
>> >>
>> >> Please find attached patch where I have added timeout of = 2 seconds
>> >> before
>> >> selecting object menu in connect to server function.
>> >>
>> >> Note: Apply this patch on top of previous patch for on de= mand loading
>> >> feature.
>> >>
>> >>
>> >> --
>> >> Harshal Dhumal
>> >> Sr. Software Engineer
>> >>
>> >> EnterpriseDB India: http://www.enterprisedb.com
>> >> The Enterprise PostgreSQL Company
>> >>
>> >> On Fri, Jun 16, 2017 at 2:25 AM, Dave Page <dpage@pgadmin.org> wrot= e:
>> >>>
>> >>> Sounds good, thanks.
>> >>>
>> >>> On Thu, Jun 15, 2017 at 9:54 PM, Harshal Dhumal
>> >>> <harshal.dhumal@enterprisedb.com> wrote:
>> >>> > Hi
>> >>> >
>> >>> > On Fri, Jun 16, 2017 at 2:07 AM, Dave Page <<= a href=3D"mailto:dpage@pgadmin.org" target=3D"_blank">dpage@pgadmin.org= >
>> >>> > wrote:
>> >>> >>
>> >>> >> Hi
>> >>> >>
>> >>> >> On Thu, Jun 15, 2017 at 9:30 PM, Harshal Dhu= mal
>> >>> >> <harshal.dhumal@enterprisedb.com> w= rote:
>> >>> >> > Hi Dave,
>> >>> >> >
>> >>> >> > Please find attached updated patch.
>> >>> >> >
>> >>> >> > On Thu, Jun 15, 2017 at 3:58 PM, Dave P= age <dpage@pgadmi= n.org>
>> >>> >> > wrote:
>> >>> >> >>
>> >>> >> >> Hi
>> >>> >> >>
>> >>> >> >> On Wed, Jun 14, 2017 at 11:36 PM, H= arshal Dhumal
>> >>> >> >> <harshal.dhumal@enterprisedb.com<= /a>> wrote:
>> >>> >> >>>
>> >>> >> >>> Hi Dave,
>> >>> >> >>>
>> >>> >> >>> Please find rebased patch for R= M2137.
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> Looking very good. The only issues = I see are:
>> >>> >> >>
>> >>> >> >> - The row headers should auto-size = such that they can display
>> >>> >> >> the
>> >>> >> >> row
>> >>> >> >> numbers if the last row was display= ed. E.g. if there are 12345
>> >>> >> >> rows
>> >>> >> >> in
>> >>> >> >> total, then the row header should b= e sized to display 5 digits.
>> >>> >> >>
>> >>> >> > Fixed.
>> >>> >> >
>> >>> >> >
>> >>> >> >>
>> >>> >> >> - The tests are comprehensive, whic= h is awesome. However, every
>> >>> >> >> time
>> >>> >> >> I
>> >>> >> >> ran
>> >>> >> >> them, at least one of the feature t= ests failed. Unfortunately,
>> >>> >> >> it
>> >>> >> >> was a
>> >>> >> >> different one each time. In the las= t two runs, I got:
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> >>> >> >> ERROR: runTest
>> >>> >> >> (pgadmin.feature_tests.query_t= ool_tests.QueryToolFeatureTest)
>> >>> >> >> Query tool feature test
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> ------------------------------= ----------------------------------------
>> >>> >> >> Traceback (most recent call last):<= br> >> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/git/pgadmin4/web= /regression/feature_utils/base_feature_test.py",
>> >>> >> >> line 40, in setUp
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0self.before() >> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/git/pgadmin4/web= /pgadmin/feature_tests/query_tool_tests.py",
>> >>> >> >> line 40, in before
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0self._connects_t= o_server()
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/git/pgadmin4/web= /pgadmin/feature_tests/query_tool_tests.py",
>> >>> >> >> line 144, in _connects_to_server >> >>> >> >>=C2=A0 =C2=A0 =C2=A0self.page.driver= .find_element_by_link_text("Create"))\
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= webdriver.py",
>> >>> >> >> line 319, in find_element_by_link_t= ext
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0return self.find= _element(by=3DBy.LINK_TEXT, value=3Dlink_text)
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= webdriver.py",
>> >>> >> >> line 756, in find_element
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0'value':= value})['value']
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= webdriver.py",
>> >>> >> >> line 238, in execute
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0self.error_handl= er.check_response(response)
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= errorhandler.py",
>> >>> >> >> line 193, in check_response
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0raise exception_= class(message, screen, stacktrace)
>> >>> >> >> NoSuchElementException: Message: no= such element: Unable to
>> >>> >> >> locate
>> >>> >> >> element: {"method":"= link text","selector":"Create"}
>> >>> >> >>=C2=A0 =C2=A0(Session info: chrome= =3D58.0.3029.110)
>> >>> >> >>=C2=A0 =C2=A0(Driver info: chromedri= ver=3D2.29.461585
>> >>> >> >> (0be2cd95f834e9ee7c46bcc7cf405= b483f5ae83b),platform=3DMac OS X
>> >>> >> >> 10.12.3
>> >>> >> >> x86_64)
>> >>> >> >>
>> >>> >> > I checked code from _connects_to_server= function which is common
>> >>> >> > in
>> >>> >> > all
>> >>> >> > features test cases. I didn't find = anything wrong with this. If
>> >>> >> > there
>> >>> >> > is
>> >>> >> > a
>> >>> >> > bug in this function then all feature t= est must fail.
>> >>> >> > Let me know if you are getting failure = consistently in
>> >>> >> > _connects_to_server
>> >>> >> > function.
>> >>> >>
>> >>> >> I wondered if that one is a race condition. = Do we need a short
>> >>> >> delay
>> >>> >> before clicking the Object menu? I have seen= this occasionally
>> >>> >> before.
>> >>> >
>> >>> >
>> >>> > OK. In that case let's try putting 1-2 secon= d delay and observer
>> >>> > behaviour.
>> >>> > I'll send separate patch for this tomorrow a= s this is not related to
>> >>> > on
>> >>> > demand query result feature or its test cases. >> >>> >
>> >>> >>
>> >>> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> >>> >> >> ERROR: runTest
>> >>> >> >> (pgadmin.feature_tests.query_t= ool_tests.QueryToolFeatureTest)
>> >>> >> >> Query tool feature test
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> ------------------------------= ----------------------------------------
>> >>> >> >> Traceback (most recent call last):<= br> >> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/git/pgadmin4/web= /pgadmin/feature_tests/query_tool_tests.py",
>> >>> >> >> line 119, in runTest
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0self._query_tool= _auto_rollback_enabled()
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/git/pgadmin4/web= /pgadmin/feature_tests/query_tool_tests.py",
>> >>> >> >> line 697, in _query_tool_auto_rollb= ack_enabled
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0'//div[conta= ins(@class, "sql-editor-message") and
>> >>> >> >> contains(string(),
>> >>> >> >> "COMMIT")]'
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= webdriver.py",
>> >>> >> >> line 295, in find_element_by_xpath<= br> >> >>> >> >>=C2=A0 =C2=A0 =C2=A0return self.find= _element(by=3DBy.XPATH, value=3Dxpath)
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= webdriver.py",
>> >>> >> >> line 756, in find_element
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0'value':= value})['value']
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= webdriver.py",
>> >>> >> >> line 238, in execute
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0self.error_handl= er.check_response(response)
>> >>> >> >>=C2=A0 =C2=A0File
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> "/Users/dpage/.virtualenvs/pga= dmin4/lib/python2.7/site-packages/selenium/webdriver/remote/= errorhandler.py",
>> >>> >> >> line 193, in check_response
>> >>> >> >>=C2=A0 =C2=A0 =C2=A0raise exception_= class(message, screen, stacktrace)
>> >>> >> >> NoSuchElementException: Message: no= such element: Unable to
>> >>> >> >> locate
>> >>> >> >> element: {"method":"= xpath","selector":"//div[contains(@class,
>> >>> >> >> "sql-editor-message") and= contains(string(), "COMMIT")]"}
>> >>> >> >>=C2=A0 =C2=A0(Session info: chrome= =3D58.0.3029.110)
>> >>> >> >>=C2=A0 =C2=A0(Driver info: chromedri= ver=3D2.29.461585
>> >>> >> >> (0be2cd95f834e9ee7c46bcc7cf405= b483f5ae83b),platform=3DMac OS X
>> >>> >> >> 10.12.3
>> >>> >> >> x86_64)
>> >>> >> >>
>> >>> >> > I have updated Auto rollback enabled te= st in this patch.
>> >>> >> >
>> >>> >> >>
>> >>> >> >> Relevant screenshots attached.
>> >>> >> >>
>> >>> >> >> - Can you tidy up the regression ou= tput a little please? Instead
>> >>> >> >> of:
>> >>> >> >>
>> >>> >> >> -------
>> >>> >> >> runTest
>> >>> >> >> (pgadmin.feature_tests.query_t= ool_tests.QueryToolFeatureTest)
>> >>> >> >> Query tool feature test ... On dema= nd result set on scrolling...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> On demand result set on grid select= all...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> On demand result set on column sele= ct all...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Explain query...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Explain query with verbose...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Explain query with costs...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Explain analyze query...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Explain analyze query with buffers.= ..
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Explain analyze query with timing..= .
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Auto commit disabled...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Auto commit enabled...
>> >>> >> >> OK.
>> >>> >> >>
>> >>> >> >> Auto rollback enabled...
>> >>> >> >> ERROR
>> >>> >> >> -------
>> >>> >> >>
>> >>> >> >> Something like:
>> >>> >> >>
>> >>> >> >> -------
>> >>> >> >> runTest
>> >>> >> >> (pgadmin.feature_tests.query_t= ool_tests.QueryToolFeatureTest)
>> >>> >> >> Query tool feature test ...
>> >>> >> >> On demand result set on scrolling..= . OK.
>> >>> >> >> On demand result set on grid select= all... OK.
>> >>> >> >> On demand result set on column sele= ct all... OK.
>> >>> >> >> Explain query... OK.
>> >>> >> >> Explain query with verbose... OK. >> >>> >> >> Explain query with costs... OK.
>> >>> >> >> Explain analyze query... OK.
>> >>> >> >> Explain analyze query with buffers.= .. OK.
>> >>> >> >> Explain analyze query with timing..= . OK.
>> >>> >> >> Auto commit disabled... OK.
>> >>> >> >> Auto commit enabled... OK.
>> >>> >> >> Auto rollback enabled... ERROR
>> >>> >> >> --------
>> >>> >> >>
>> >>> >> > Fixed.
>> >>> >> >
>> >>> >> >
>> >>> >> >>
>> >>> >> >> Thanks!
>> >>> >> >>
>> >>> >> >> --
>> >>> >> >> Dave Page
>> >>> >> >> Blog:
http://pgsnake.blogspot.com=
>> >>> >> >> Twitter: @pgsnake
>> >>> >> >>
>> >>> >> >> EnterpriseDB UK: http://www.enter= prisedb.com
>> >>> >> >> The Enterprise PostgreSQL Company >> >>> >> >
>> >>> >> >
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >> --
>> >>> >> Dave Page
>> >>> >> Blog: http://pgsnake.blogspot.com
>> >>> >> Twitter: @pgsnake
>> >>> >>
>> >>> >> EnterpriseDB UK: http://www.enterprisedb.c= om
>> >>> >> The Enterprise PostgreSQL Company
>> >>> >
>> >>> >
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> 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
>>
>>
>>
>> --
>> 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


--001a114fc0fac35e1e0552ebfcd0-- --001a114fc0fac35e220552ebfcd2 Content-Type: text/x-patch; charset="US-ASCII"; name="RM2137_query_tool_on_demand_result_V9.patch" Content-Disposition: attachment; filename="RM2137_query_tool_on_demand_result_V9.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j4f909h10 ZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29uZmlnLnB5CmluZGV4IDZhMzEyOGUu LmU0MDIwMWQgMTAwNjQ0Ci0tLSBhL3dlYi9jb25maWcucHkKKysrIGIvd2ViL2NvbmZpZy5weQpA QCAtMzIyLDYgKzMyMiwxMiBAQCBUSFJFQURFRF9NT0RFID0gVHJ1ZQogU1FMQUxDSEVNWV9UUkFD S19NT0RJRklDQVRJT05TID0gRmFsc2UKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTnVtYmVyIG9m IHJlY29yZHMgdG8gZmV0Y2ggaW4gb25lIGJhdGNoIGluIHF1ZXJ5IHRvb2wgd2hlbiBxdWVyeSBy ZXN1bHQKKyMgc2V0IGlzIGxhcmdlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK09OX0RFTUFORF9SRUNP UkRfQ09VTlQgPSAxMDAwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIExvY2FsIGNvbmZpZyBzZXR0 aW5ncwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZmVhdHVy ZV90ZXN0cy9jb25uZWN0X3RvX3NlcnZlcl9mZWF0dXJlX3Rlc3QucHkgYi93ZWIvcGdhZG1pbi9m ZWF0dXJlX3Rlc3RzL2Nvbm5lY3RfdG9fc2VydmVyX2ZlYXR1cmVfdGVzdC5weQppbmRleCBlOGRl MTYxLi4yOGE2ZGY2IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL2Nvbm5l Y3RfdG9fc2VydmVyX2ZlYXR1cmVfdGVzdC5weQorKysgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rl c3RzL2Nvbm5lY3RfdG9fc2VydmVyX2ZlYXR1cmVfdGVzdC5weQpAQCAtNyw2ICs3LDcgQEAKICMK ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiAKK2ltcG9ydCB0aW1lCiBmcm9tIHNlbGVuaXVtLndlYmRyaXZl ciBpbXBvcnQgQWN0aW9uQ2hhaW5zCiAKIGltcG9ydCBjb25maWcgYXMgYXBwX2NvbmZpZwpAQCAt NTMsNiArNTQsNyBAQCBjbGFzcyBDb25uZWN0c1RvU2VydmVyRmVhdHVyZVRlc3QoQmFzZUZlYXR1 cmVUZXN0KToKIAogICAgIGRlZiBfY29ubmVjdHNfdG9fc2VydmVyKHNlbGYpOgogICAgICAgICBz ZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgiLy8qW0BjbGFzcz0nYWNpVHJlZVRleHQnIGFuZCAuPSdT ZXJ2ZXJzJ10iKS5jbGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMikKICAgICAgICAgc2VsZi5w YWdlLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJPYmplY3QiKS5jbGljaygpCiAg ICAgICAgIEFjdGlvbkNoYWlucyhzZWxmLnBhZ2UuZHJpdmVyKSBcCiAgICAgICAgICAgICAubW92 ZV90b19lbGVtZW50KHNlbGYucGFnZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgi Q3JlYXRlIikpIFwKQEAgLTcyLDYgKzc0LDggQEAgY2xhc3MgQ29ubmVjdHNUb1NlcnZlckZlYXR1 cmVUZXN0KEJhc2VGZWF0dXJlVGVzdCk6CiAgICAgICAgIHNlbGYucGFnZS50b2dnbGVfb3Blbl9z ZXJ2ZXIoc2VsZi5zZXJ2ZXJbJ25hbWUnXSkKICAgICAgICAgc2VsZi5wYWdlLnRvZ2dsZV9vcGVu X3RyZWVfaXRlbSgnRGF0YWJhc2VzJykKICAgICAgICAgc2VsZi5wYWdlLnRvZ2dsZV9vcGVuX3Ry ZWVfaXRlbSgnYWNjZXB0YW5jZV90ZXN0X2RiJykKKyAgICAgICAgIyB3YWl0IHVudGlsIGFsbCBk YXRhYmFzZSBkZXBlbmRhbnQgbW9kdWxlcy9qcyBhcmUgbG9hZGVkLgorICAgICAgICB0aW1lLnNs ZWVwKDUpCiAgICAgICAgIHNlbGYucGFnZS50b2dnbGVfb3Blbl90cmVlX2l0ZW0oJ1NjaGVtYXMn KQogICAgICAgICBzZWxmLnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9pdGVtKCdwdWJsaWMnKQogICAg ICAgICBzZWxmLnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9pdGVtKCdUYWJsZXMnKQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy9wZ19kYXRhdHlwZV92YWxpZGF0aW9uX3Rlc3Qu cHkgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL3BnX2RhdGF0eXBlX3ZhbGlkYXRpb25fdGVz dC5weQppbmRleCA4NDgzODc2Li4yNmM3ODdiIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9mZWF0 dXJlX3Rlc3RzL3BnX2RhdGF0eXBlX3ZhbGlkYXRpb25fdGVzdC5weQorKysgYi93ZWIvcGdhZG1p bi9mZWF0dXJlX3Rlc3RzL3BnX2RhdGF0eXBlX3ZhbGlkYXRpb25fdGVzdC5weQpAQCAtNiw2ICs2 LDcgQEAKICMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBM aWNlbmNlCiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaW1wb3J0IHRpbWUKIGZyb20gc2VsZW5pdW0u d2ViZHJpdmVyIGltcG9ydCBBY3Rpb25DaGFpbnMKIGZyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2Vw dGlvbnMgaW1wb3J0IFRpbWVvdXRFeGNlcHRpb24KIGZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1 cHBvcnQudWkgaW1wb3J0IFdlYkRyaXZlcldhaXQKQEAgLTU2LDYgKzU3LDcgQEAgY2xhc3MgUEdE YXRheXBlRmVhdHVyZVRlc3QoQmFzZUZlYXR1cmVUZXN0KToKICAgICAgICAgc2VsZi5wYWdlLmZp bmRfYnlfeHBhdGgoCiAgICAgICAgICAgICAiLy8qW0BjbGFzcz0nYWNpVHJlZVRleHQnIGFuZCAu PSdTZXJ2ZXJzJ10iCiAgICAgICAgICkuY2xpY2soKQorICAgICAgICB0aW1lLnNsZWVwKDIpCiAg ICAgICAgIHNlbGYucGFnZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiT2JqZWN0 IikuY2xpY2soKQogICAgICAgICBBY3Rpb25DaGFpbnMoc2VsZi5wYWdlLmRyaXZlcikgXAogICAg ICAgICAgICAgLm1vdmVfdG9fZWxlbWVudCgKQEAgLTEwNiw0NSArMTA4LDE5IEBAIGNsYXNzIFBH RGF0YXlwZUZlYXR1cmVUZXN0KEJhc2VGZWF0dXJlVGVzdCk6CiAgICAgICAgIHNlbGYucGFnZS5m aWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQogICAgICAgICBzZWxmLnBhZ2UuZmluZF9i eV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQogICAgICAgICB3YWl0ID0gV2ViRHJpdmVyV2FpdChz ZWxmLnBhZ2UuZHJpdmVyLCA1KQotICAgICAgICB3YWl0LnVudGlsKEVDLnByZXNlbmNlX29mX2Vs ZW1lbnRfbG9jYXRlZCgKLSAgICAgICAgICAgIChCeS5YUEFUSCwgIi8vKltAaWQ9JzAnXS8vKltA aWQ9J2RhdGFncmlkJ10vZGl2WzVdL2Rpdi9kaXZbMV0vIgotICAgICAgICAgICAgICAgICAgICAg ICAiZGl2WzJdL3NwYW4iKSkpCisKKyAgICAgICAgY2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVz ZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAi I2RhdGFncmlkIC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkKKyAgICAgICAgKQogCiAg ICAgICAgICMgRm9yIGV2ZXJ5IHNhbXBsZSBkYXRhLXR5cGUgdmFsdWUsIGNoZWNrIHRoZSBleHBl Y3RlZCBvdXRwdXQuCiAgICAgICAgIGNudCA9IDIKLSAgICAgICAgZm9yIHZhbCBpbiBleHBlY3Rl ZF9vdXRwdXRbOjEwXToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb3VyY2Vf Y29kZSA9IHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKAotICAgICAgICAgICAgICAgICAgICAiLy8q W0BpZD0nMCddLy8qW0BpZD0nZGF0YWdyaWQnXS9kaXZbNV0vZGl2L2RpdlsxXS9kaXZbIgotICAg ICAgICAgICAgICAgICAgICArIHN0cihjbnQpCi0gICAgICAgICAgICAgICAgICAgICsgIl0vc3Bh biIKLSAgICAgICAgICAgICAgICApLmdldF9hdHRyaWJ1dGUoJ2lubmVySFRNTCcpCi0KLSAgICAg ICAgICAgICAgICBQR0RhdGF5cGVGZWF0dXJlVGVzdC5jaGVja19yZXN1bHQoCi0gICAgICAgICAg ICAgICAgICAgIHNvdXJjZV9jb2RlLAotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRw dXRbY250IC0gMl0KLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgY250ICs9IDEK LSAgICAgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXhjZXB0aW9uOgotICAgICAgICAgICAgICAgIGFz c2VydCBGYWxzZSwgInswfSBkb2VzIG5vdCBtYXRjaCB3aXRoIHsxfSIuZm9ybWF0KAotICAgICAg ICAgICAgICAgICAgICB2YWwsIGV4cGVjdGVkX291dHB1dFtjbnRdCi0gICAgICAgICAgICAgICAg KQotCi0gICAgICAgIGNudCA9IDEyCi0gICAgICAgIGZvciB2YWwgaW4gZXhwZWN0ZWRfb3V0cHV0 WzEwOl06CisgICAgICAgIGNlbGxzID0gY2FudmFzLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVj dG9yKCcuc2xpY2stY2VsbCcpCisgICAgICAgICMgcmVtb3ZlIGZpcnN0IGVsZW1lbnQgYXMgaXQg aXMgcm93IG51bWJlci4KKyAgICAgICAgY2VsbHMucG9wKDApCisgICAgICAgIGZvciB2YWwsIGNl bGwgaW4gemlwKGV4cGVjdGVkX291dHB1dCwgY2VsbHMpOgogICAgICAgICAgICAgdHJ5OgotICAg ICAgICAgICAgICAgIGlmIGNudCA9PSAxNDoKLSAgICAgICAgICAgICAgICAgICAgeHBhdGggPSAi Ly8qW0BpZD0nMCddLy8qW0BpZD0nZGF0YWdyaWQnXS9kaXZbNV0vZGl2L2RpdlsxXS9kaXZbIiBc Ci0gICAgICAgICAgICAgICAgICAgICsgc3RyKGNudCkgXAotICAgICAgICAgICAgICAgICAgICAr ICJdL3NwYW4iCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgeHBh dGggPSAiLy8qW0BpZD0nMCddLy8qW0BpZD0nZGF0YWdyaWQnXS9kaXZbNV0vZGl2L2Rpdi9kaXZb IiBcCi0gICAgICAgICAgICAgICAgICAgICsgc3RyKGNudCkgXAotICAgICAgICAgICAgICAgICAg ICArICJdIgotCi0gICAgICAgICAgICAgICAgc291cmNlX2NvZGUgPSBzZWxmLnBhZ2UuZmluZF9i eV94cGF0aCgKLSAgICAgICAgICAgICAgICAgICAgIHhwYXRoCi0gICAgICAgICAgICAgICAgKS5n ZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKQorICAgICAgICAgICAgICAgIHNvdXJjZV9jb2RlID0g Y2VsbC5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKQogCiAgICAgICAgICAgICAgICAgUEdEYXRh eXBlRmVhdHVyZVRlc3QuY2hlY2tfcmVzdWx0KAogICAgICAgICAgICAgICAgICAgICBzb3VyY2Vf Y29kZSwKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMvcXVlcnlfdG9vbF90 ZXN0cy5weSBiL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMvcXVlcnlfdG9vbF90ZXN0cy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU4Mjg3Ci0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy9xdWVyeV90b29sX3Rlc3RzLnB5CkBAIC0w LDAgKzEsNzM0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3Jl U1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTcsIFRoZSBwZ0FkbWluIERl dmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9z dGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmcm9tIF9fZnV0dXJlX18g aW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgdGltZQoraW1wb3J0IHN5cworaW1wb3J0IGNv bmZpZworZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIgaW1wb3J0IEFjdGlvbkNoYWlucworZnJvbSBz ZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC51aSBpbXBvcnQgV2ViRHJpdmVyV2FpdAorZnJvbSBz ZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydCBpbXBvcnQgZXhwZWN0ZWRfY29uZGl0aW9ucyBhcyBF QworZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuY29tbW9uLmJ5IGltcG9ydCBCeQorZnJvbSByZWdy ZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxzIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIHJlZ3Jlc3Np b24uZmVhdHVyZV91dGlscy5iYXNlX2ZlYXR1cmVfdGVzdCBpbXBvcnQgQmFzZUZlYXR1cmVUZXN0 CisKKworY2xhc3MgUXVlcnlUb29sRmVhdHVyZVRlc3QoQmFzZUZlYXR1cmVUZXN0KToKKyAgICAi IiIKKyAgICAgICAgVGhpcyBmZWF0dXJlIHRlc3Qgd2lsbCB0ZXN0IHRoZSBkaWZmZXJlbnQgcXVl cnkgdG9vbCBmZWF0dXJlcy4KKyAgICAiIiIKKworICAgIHNjZW5hcmlvcyA9IFsKKyAgICAgICAg KCJRdWVyeSB0b29sIGZlYXR1cmUgdGVzdCIsIGRpY3QoKSkKKyAgICBdCisKKyAgICBkZWYgYmVm b3JlKHNlbGYpOgorICAgICAgICBjb25uZWN0aW9uID0gdGVzdF91dGlscy5nZXRfZGJfY29ubmVj dGlvbihzZWxmLnNlcnZlclsnZGInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJbJ3VzZXJuYW1lJ10sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyWydkYl9wYXNz d29yZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLnNlcnZlclsnaG9zdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclsncG9ydCddKQorICAgICAgICB0ZXN0X3V0aWxz LmRyb3BfZGF0YWJhc2UoY29ubmVjdGlvbiwgImFjY2VwdGFuY2VfdGVzdF9kYiIpCisgICAgICAg IHRlc3RfdXRpbHMuY3JlYXRlX2RhdGFiYXNlKHNlbGYuc2VydmVyLCAiYWNjZXB0YW5jZV90ZXN0 X2RiIikKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3NwaW5uZXJfdG9fZGlzYXBwZWFyKCkK KyAgICAgICAgc2VsZi5fY29ubmVjdHNfdG9fc2VydmVyKCkKKyAgICAgICAgc2VsZi5fbG9jYXRl X2RhdGFiYXNlX3RyZWVfbm9kZSgpCisgICAgICAgIHNlbGYucGFnZS5vcGVuX3F1ZXJ5X3Rvb2wo KQorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICMgb24gZGVtYW5kIHJlc3VsdCBz ZXQgb24gc2Nyb2xsaW5nLgorICAgICAgICBwcmludCgiXG5PbiBkZW1hbmQgcmVzdWx0IHNldCBv biBzY3JvbGxpbmcuLi4gIiwKKyAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIp CisgICAgICAgIHNlbGYuX29uX2RlbWFuZF9yZXN1bHQoKQorICAgICAgICBwcmludCgiT0suIiwK KyAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVy eV90b29sKCkKKworICAgICAgICAjIG9uIGRlbWFuZCByZXN1bHQgc2V0IG9uIGdyaWQgc2VsZWN0 IGFsbC4KKyAgICAgICAgcHJpbnQoIk9uIGRlbWFuZCByZXN1bHQgc2V0IG9uIGdyaWQgc2VsZWN0 IGFsbC4uLiAiLAorICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIsIGVuZD0iIikKKyAgICAg ICAgc2VsZi5fb25fZGVtYW5kX3Jlc3VsdF9zZWxlY3RfYWxsX2dyaWQoKQorICAgICAgICBwcmlu dCgiT0suIiwKKyAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9j bGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIG9uIGRlbWFuZCByZXN1bHQgc2V0IG9uIGNv bHVtbiBzZWxlY3QgYWxsLgorICAgICAgICBwcmludCgiT24gZGVtYW5kIHJlc3VsdCBzZXQgb24g Y29sdW1uIHNlbGVjdCBhbGwuLi4gIiwKKyAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyLCBl bmQ9IiIpCisgICAgICAgIHNlbGYuX29uX2RlbWFuZF9yZXN1bHRfc2VsZWN0X2FsbF9jb2x1bW4o KQorICAgICAgICBwcmludCgiT0suIiwKKyAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQor ICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIGV4cGxhaW4gcXVl cnkKKyAgICAgICAgcHJpbnQoIkV4cGxhaW4gcXVlcnkuLi4gIiwgZmlsZT1zeXMuc3RkZXJyLCBl bmQ9IiIpCisgICAgICAgIHNlbGYuX3F1ZXJ5X3Rvb2xfZXhwbGFpbigpCisgICAgICAgIHByaW50 KCJPSy4iLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2wo KQorCisgICAgICAgICMgZXhwbGFpbiBxdWVyeSB3aXRoIHZlcmJvc2UKKyAgICAgICAgcHJpbnQo IkV4cGxhaW4gcXVlcnkgd2l0aCB2ZXJib3NlLi4uICIsIGZpbGU9c3lzLnN0ZGVyciwgZW5kPSIi KQorICAgICAgICBzZWxmLl9xdWVyeV90b29sX2V4cGxhaW5fdmVyYm9zZSgpCisgICAgICAgIHBy aW50KCJPSy4iLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rv b2woKQorCisgICAgICAgICMgZXhwbGFpbiBxdWVyeSB3aXRoIGNvc3RzCisgICAgICAgIHByaW50 KCJFeHBsYWluIHF1ZXJ5IHdpdGggY29zdHMuLi4gIiwgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIp CisgICAgICAgIHNlbGYuX3F1ZXJ5X3Rvb2xfZXhwbGFpbl9jb3N0KCkKKyAgICAgICAgcHJpbnQo Ik9LLiIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgp CisKKyAgICAgICAgIyBleHBsYWluIGFuYWx5emUgcXVlcnkKKyAgICAgICAgcHJpbnQoIkV4cGxh aW4gYW5hbHl6ZSBxdWVyeS4uLiAiLCBmaWxlPXN5cy5zdGRlcnIsIGVuZD0iIikKKyAgICAgICAg c2VsZi5fcXVlcnlfdG9vbF9leHBsYWluX2FuYWx5emUoKQorICAgICAgICBwcmludCgiT0suIiwg ZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAg ICAgICAjIGV4cGxhaW4gYW5hbHl6ZSBxdWVyeSB3aXRoIGJ1ZmZlcnMKKyAgICAgICAgcHJpbnQo IkV4cGxhaW4gYW5hbHl6ZSBxdWVyeSB3aXRoIGJ1ZmZlcnMuLi4gIiwgZmlsZT1zeXMuc3RkZXJy LCBlbmQ9IiIpCisgICAgICAgIHNlbGYuX3F1ZXJ5X3Rvb2xfZXhwbGFpbl9hbmFseXplX2J1ZmZl cnMoKQorICAgICAgICBwcmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxm Ll9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIGV4cGxhaW4gYW5hbHl6ZSBxdWVyeSB3 aXRoIHRpbWluZworICAgICAgICBwcmludCgiRXhwbGFpbiBhbmFseXplIHF1ZXJ5IHdpdGggdGlt aW5nLi4uICIsIGZpbGU9c3lzLnN0ZGVyciwgZW5kPSIiKQorICAgICAgICBzZWxmLl9xdWVyeV90 b29sX2V4cGxhaW5fYW5hbHl6ZV90aW1pbmcoKQorICAgICAgICBwcmludCgiT0suIiwgZmlsZT1z eXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAj IGF1dG8gY29tbWl0IGRpc2FibGVkLgorICAgICAgICBwcmludCgiQXV0byBjb21taXQgZGlzYWJs ZWQuLi4gIiwgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIpCisgICAgICAgIHNlbGYuX3F1ZXJ5X3Rv b2xfYXV0b19jb21taXRfZGlzYWJsZWQoKQorICAgICAgICBwcmludCgiT0suIiwgZmlsZT1zeXMu c3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIGF1 dG8gY29tbWl0IGVuYWJsZWQuCisgICAgICAgIHByaW50KCJBdXRvIGNvbW1pdCBlbmFibGVkLi4u ICIsIGZpbGU9c3lzLnN0ZGVyciwgZW5kPSIiKQorICAgICAgICBzZWxmLl9xdWVyeV90b29sX2F1 dG9fY29tbWl0X2VuYWJsZWQoKQorICAgICAgICBwcmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJy KQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIGF1dG8gcm9s bGJhY2sgZW5hYmxlZC4KKyAgICAgICAgcHJpbnQoIkF1dG8gcm9sbGJhY2sgZW5hYmxlZC4uLiIs IGZpbGU9c3lzLnN0ZGVyciwgZW5kPSIiKQorICAgICAgICBzZWxmLl9xdWVyeV90b29sX2F1dG9f cm9sbGJhY2tfZW5hYmxlZCgpCisgICAgICAgIHByaW50KCIgT0suIiwgZmlsZT1zeXMuc3RkZXJy KQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIGNhbmNlbCBx dWVyeS4KKyAgICAgICAgcHJpbnQoIkNhbmNlbCBxdWVyeS4uLiAiLCBmaWxlPXN5cy5zdGRlcnIs IGVuZD0iIikKKyAgICAgICAgc2VsZi5fcXVlcnlfdG9vbF9jYW5jZWxfcXVlcnkoKQorICAgICAg ICBwcmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVy eV90b29sKCkKKworICAgIGRlZiBhZnRlcihzZWxmKToKKyAgICAgICAgc2VsZi5wYWdlLnJlbW92 ZV9zZXJ2ZXIoc2VsZi5zZXJ2ZXIpCisgICAgICAgIGNvbm5lY3Rpb24gPSB0ZXN0X3V0aWxzLmdl dF9kYl9jb25uZWN0aW9uKHNlbGYuc2VydmVyWydkYiddLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlclsndXNlcm5hbWUnXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2 ZXJbJ2RiX3Bhc3N3b3JkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuc2VydmVyWydob3N0J10sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyWydwb3J0J10pCisgICAgICAg IHRlc3RfdXRpbHMuZHJvcF9kYXRhYmFzZShjb25uZWN0aW9uLCAiYWNjZXB0YW5jZV90ZXN0X2Ri IikKKworICAgIGRlZiBfY29ubmVjdHNfdG9fc2VydmVyKHNlbGYpOgorICAgICAgICBzZWxmLnBh Z2UuZmluZF9ieV94cGF0aCgKKyAgICAgICAgICAgICIvLypbQGNsYXNzPSdhY2lUcmVlVGV4dCcg YW5kIC49J1NlcnZlcnMnXSIpLmNsaWNrKCkKKyAgICAgICAgdGltZS5zbGVlcCgyKQorICAgICAg ICBzZWxmLnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIk9iamVjdCIpLmNs aWNrKCkKKyAgICAgICAgQWN0aW9uQ2hhaW5zKHNlbGYucGFnZS5kcml2ZXIpIFwKKyAgICAgICAg ICAgIC5tb3ZlX3RvX2VsZW1lbnQoCisgICAgICAgICAgICBzZWxmLnBhZ2UuZHJpdmVyLmZpbmRf ZWxlbWVudF9ieV9saW5rX3RleHQoIkNyZWF0ZSIpKVwKKyAgICAgICAgICAgIC5wZXJmb3JtKCkK KyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIlNlcnZlci4uLiIp LmNsaWNrKCkKKworICAgICAgICBzZXJ2ZXJfY29uZmlnID0gc2VsZi5zZXJ2ZXIKKyAgICAgICAg c2VsZi5wYWdlLmZpbGxfaW5wdXRfYnlfZmllbGRfbmFtZSgibmFtZSIsIHNlcnZlcl9jb25maWdb J25hbWUnXSkKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfcGFydGlhbF9saW5rX3RleHQoIkNv bm5lY3Rpb24iKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxk X25hbWUoImhvc3QiLCBzZXJ2ZXJfY29uZmlnWydob3N0J10pCisgICAgICAgIHNlbGYucGFnZS5m aWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoInBvcnQiLCBzZXJ2ZXJfY29uZmlnWydwb3J0J10pCisg ICAgICAgIHNlbGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoCisgICAgICAgICAgICAi dXNlcm5hbWUiLAorICAgICAgICAgICAgc2VydmVyX2NvbmZpZ1sndXNlcm5hbWUnXQorICAgICAg ICApCisgICAgICAgIHNlbGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoCisgICAgICAg ICAgICAicGFzc3dvcmQiLAorICAgICAgICAgICAgc2VydmVyX2NvbmZpZ1snZGJfcGFzc3dvcmQn XQorICAgICAgICApCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKCIvL2J1dHRvbltj b250YWlucyguLCdTYXZlJyldIikuY2xpY2soKQorCisgICAgZGVmIF9sb2NhdGVfZGF0YWJhc2Vf dHJlZV9ub2RlKHNlbGYpOgorICAgICAgICBzZWxmLnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9pdGVt KHNlbGYuc2VydmVyWyduYW1lJ10pCisgICAgICAgIHNlbGYucGFnZS50b2dnbGVfb3Blbl90cmVl X2l0ZW0oJ0RhdGFiYXNlcycpCisgICAgICAgIHNlbGYucGFnZS50b2dnbGVfb3Blbl90cmVlX2l0 ZW0oJ2FjY2VwdGFuY2VfdGVzdF9kYicpCisKKyAgICBkZWYgX2NsZWFyX3F1ZXJ5X3Rvb2woc2Vs Zik6CisgICAgICAgICMgY2xlYXIgY29kZW1pcnJvci4KKyAgICAgICAgc2VsZi5wYWdlLmZpbmRf YnlfaWQoImJ0bi1lZGl0IikuY2xpY2soKQorICAgICAgICAjIHdhaXQgZm9yIGFsZXJ0aWZ5IGRp YWxvZyBvcGVuIGFuaW1hdGlvbiB0byBjb21wbGV0ZS4KKyAgICAgICAgdGltZS5zbGVlcCgxKQor CisgICAgICAgIHNlbGYucGFnZS5jbGlja19lbGVtZW50KHNlbGYucGFnZS5maW5kX2J5X3hwYXRo KCIvL2J1dHRvbltjb250YWlucyguLCdZZXMnKV0iKSkKKyAgICAgICAgIyB3YWl0IGZvciBhbGVy dGlmeSBkaWFsb2cgY2xvc2UgYW5pbWF0aW9uIHRvIGNvbXBsZXRlLgorICAgICAgICB0aW1lLnNs ZWVwKDEpCisKKyAgICBkZWYgX29uX2RlbWFuZF9yZXN1bHQoc2VsZik6CisgICAgICAgIE9OX0RF TUFORF9DSFVOS1MgPSAyCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gT24gZGVtYW5kIHF1ZXJ5IHJl c3VsdCBvbiBzY3JvbGwKK1NFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwge30pIGFzIGlkIiIiLmZv cm1hdCgKKyAgICAgICAgICAgIGNvbmZpZy5PTl9ERU1BTkRfUkVDT1JEX0NPVU5UICogT05fREVN QU5EX0NIVU5LUykKKworICAgICAgICB3YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJp dmVyLCAxMCkKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVl cnkpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkK KworICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRv cl90b19kaXNhcHBlYXIoKQorCisgICAgICAgIGNhbnZhcyA9IHdhaXQudW50aWwoRUMucHJlc2Vu Y2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAgICAgKEJ5LkNTU19TRUxFQ1RPUiwgIiNk YXRhZ3JpZCAuc2xpY2stdmlld3BvcnQgLmdyaWQtY2FudmFzIikpKQorCisgICAgICAgICMgc2Ny b2xsIHRvIGJvdHRvbSB0byBmZXRjaCBuZXh0IGNodW5rIG9mIHJlc3VsdCBzZXQuCisgICAgICAg IHNlbGYuZHJpdmVyLmV4ZWN1dGVfc2NyaXB0KAorICAgICAgICAgICAgIiQoJy5zbGljay12aWV3 cG9ydCcpLnNjcm9sbFRvcCgkKCcuZ3JpZC1jYW52YXMnKS5oZWlnaHQoKSk7IgorICAgICAgICAp CisKKyAgICAgICAgIyB3YWl0IGZvciBhamF4IHRvIGNvbXBsZXRlLgorICAgICAgICB0aW1lLnNs ZWVwKDEpCisKKyAgICAgICAgIyBhZ2FpbiBzY3JvbGwgdG8gYm90dG9tIHRvIGJyaW5nIGxhc3Qg cm93IG9mIG5leHQgY2h1bmsgaW4KKyAgICAgICAgIyB2aWV3cG9ydC4KKyAgICAgICAgc2VsZi5k cml2ZXIuZXhlY3V0ZV9zY3JpcHQoCisgICAgICAgICAgICAiJCgnLnNsaWNrLXZpZXdwb3J0Jyku c2Nyb2xsVG9wKCQoJy5ncmlkLWNhbnZhcycpLmhlaWdodCgpKTsiCisgICAgICAgICkKKworICAg ICAgICByb3dfaWRfdG9fZmluZCA9IGNvbmZpZy5PTl9ERU1BTkRfUkVDT1JEX0NPVU5UICogT05f REVNQU5EX0NIVU5LUworCisgICAgICAgIGNhbnZhcy5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisg ICAgICAgICAgICAnLy9zcGFuW3RleHQoKT0ie30iXScuZm9ybWF0KHJvd19pZF90b19maW5kKQor ICAgICAgICApCisKKyAgICBkZWYgX29uX2RlbWFuZF9yZXN1bHRfc2VsZWN0X2FsbF9ncmlkKHNl bGYpOgorICAgICAgICBPTl9ERU1BTkRfQ0hVTktTID0gMworICAgICAgICBxdWVyeSA9ICIiIi0t IE9uIGRlbWFuZCBxdWVyeSByZXN1bHQgb24gZ3JpZCBzZWxlY3QgYWxsCitTRUxFQ1QgZ2VuZXJh dGVfc2VyaWVzKDEsIHt9KSBhcyBpZCIiIi5mb3JtYXQoCisgICAgICAgICAgICBjb25maWcuT05f REVNQU5EX1JFQ09SRF9DT1VOVCAqIE9OX0RFTUFORF9DSFVOS1MpCisKKyAgICAgICAgd2FpdCA9 IFdlYkRyaXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwgMTApCisKKyAgICAgICAgc2VsZi5wYWdl LmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisKKyAgICAgICAgc2VsZi5wYWdlLmZp bmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2Uud2FpdF9m b3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorCisgICAgICAg IHdhaXQudW50aWwoRUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAgICAg KEJ5LkNTU19TRUxFQ1RPUiwgIi5zbGljay1oZWFkZXItY29sdW1uIikpKS5jbGljaygpCisKKyAg ICAgICAgIyB3YWl0IGZvciB1bnRpbCBhbGwgcmVjb3JkcyBhcmUgZmV0Y2hlZCBhbmQgc2VsZWN0 ZWQuCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgIyBzY3JvbGwgdG8gYm90dG9tIHRv IGJyaW5nIGxhc3Qgcm93IG9mIG5leHQgY2h1bmsgaW4KKyAgICAgICAgIyB2aWV3cG9ydC4KKyAg ICAgICAgc2VsZi5kcml2ZXIuZXhlY3V0ZV9zY3JpcHQoCisgICAgICAgICAgICAiJCgnLnNsaWNr LXZpZXdwb3J0Jykuc2Nyb2xsVG9wKCQoJy5ncmlkLWNhbnZhcycpLmhlaWdodCgpKTsiCisgICAg ICAgICkKKworICAgICAgICBjYW52YXMgPSB3YWl0LnVudGlsKEVDLnByZXNlbmNlX29mX2VsZW1l bnRfbG9jYXRlZCgKKyAgICAgICAgICAgIChCeS5DU1NfU0VMRUNUT1IsICIjZGF0YWdyaWQgLnNs aWNrLXZpZXdwb3J0IC5ncmlkLWNhbnZhcyIpKQorICAgICAgICApCisKKyAgICAgICAgcm93X2lk X3RvX2ZpbmQgPSBjb25maWcuT05fREVNQU5EX1JFQ09SRF9DT1VOVCAqIE9OX0RFTUFORF9DSFVO S1MKKworICAgICAgICBjYW52YXMuZmluZF9lbGVtZW50X2J5X3hwYXRoKAorICAgICAgICAgICAg Jy8vc3Bhblt0ZXh0KCk9Int9Il0nLmZvcm1hdChyb3dfaWRfdG9fZmluZCkKKyAgICAgICAgKQor CisgICAgZGVmIF9vbl9kZW1hbmRfcmVzdWx0X3NlbGVjdF9hbGxfY29sdW1uKHNlbGYpOgorICAg ICAgICBPTl9ERU1BTkRfQ0hVTktTID0gNAorICAgICAgICBxdWVyeSA9ICIiIi0tIE9uIGRlbWFu ZCBxdWVyeSByZXN1bHQgb24gY29sdW1uIHNlbGVjdCBhbGwKK1NFTEVDVCBnZW5lcmF0ZV9zZXJp ZXMoMSwge30pIGFzIGlkMSwgJ2R1bW15JyBhcyBpZDIiIiIuZm9ybWF0KAorICAgICAgICAgICAg Y29uZmlnLk9OX0RFTUFORF9SRUNPUkRfQ09VTlQgKiBPTl9ERU1BTkRfQ0hVTktTKQorCisgICAg ICAgIHdhaXQgPSBXZWJEcml2ZXJXYWl0KHNlbGYucGFnZS5kcml2ZXIsIDEwKQorCisgICAgICAg IHNlbGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorCisgICAgICAgIHNl bGYucGFnZS5maW5kX2J5X2lkKCJidG4tZmxhc2giKS5jbGljaygpCisKKyAgICAgICAgc2VsZi5w YWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkK KworICAgICAgICAjIGNsaWNrIG9uIGZpcnN0IGRhdGEgY29sdW1uIHRvIHNlbGVjdCBhbGwgY29s dW1uLgorCisgICAgICAgIHdhaXQudW50aWwoRUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVk KAorICAgICAgICAgICgKKyAgICAgICAgICAgIEJ5LlhQQVRILAorICAgICAgICAgICAgIi8vc3Bh bltjb250YWlucyhAY2xhc3MsICdjb2x1bW4tbmFtZScpIGFuZCBjb250YWlucyguLCAnaWQxJyld IikpCisgICAgICAgICkuY2xpY2soKQorCisgICAgICAgICMgd2FpdCBmb3IgdW50aWwgYWxsIHJl Y29yZHMgYXJlIGZldGNoZWQgYW5kIHNlbGVjdGVkLgorICAgICAgICB0aW1lLnNsZWVwKDEpCisg ICAgICAgICMgc2Nyb2xsIHRvIGJvdHRvbSB0byBicmluZyBsYXN0IHJvdyBvZiBuZXh0IGNodW5r IGluCisgICAgICAgICMgdmlld3BvcnQuCisgICAgICAgIHNlbGYuZHJpdmVyLmV4ZWN1dGVfc2Ny aXB0KAorICAgICAgICAgICAgIiQoJy5zbGljay12aWV3cG9ydCcpLnNjcm9sbFRvcCgkKCcuZ3Jp ZC1jYW52YXMnKS5oZWlnaHQoKSk7IgorICAgICAgICApCisKKyAgICAgICAgY2FudmFzID0gd2Fp dC51bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnku Q1NTX1NFTEVDVE9SLCAiI2RhdGFncmlkIC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkK KyAgICAgICAgKQorCisgICAgICAgIHJvd19pZF90b19maW5kID0gY29uZmlnLk9OX0RFTUFORF9S RUNPUkRfQ09VTlQgKiBPTl9ERU1BTkRfQ0hVTktTCisKKyAgICAgICAgY2FudmFzLmZpbmRfZWxl bWVudF9ieV94cGF0aCgKKyAgICAgICAgICAgICcvL3NwYW5bdGV4dCgpPSJ7fSJdJy5mb3JtYXQo cm93X2lkX3RvX2ZpbmQpCisgICAgICAgICkKKworICAgIGRlZiBfcXVlcnlfdG9vbF9leHBsYWlu KHNlbGYpOgorICAgICAgICBxdWVyeSA9ICIiIi0tIEV4cGxhaW4gcXVlcnkKK1NFTEVDVCBnZW5l cmF0ZV9zZXJpZXMoMSwgMTAwMCkgYXMgaWQgb3JkZXIgYnkgaWQgZGVzYyIiIgorCisgICAgICAg IHdhaXQgPSBXZWJEcml2ZXJXYWl0KHNlbGYucGFnZS5kcml2ZXIsIDEwKQorCisgICAgICAgIHNl bGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBzZWxmLnBh Z2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRyb3Bkb3duIikuY2xpY2soKQorICAgICAgICBzZWxm LnBhZ2UuZmluZF9ieV9pZCgiYnRuLWV4cGxhaW4iKS5jbGljaygpCisKKyAgICAgICAgc2VsZi5w YWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkK KworICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdEYXRhIE91dHB1dCcpCisKKyAgICAgICAg Y2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAg ICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAiI2RhdGFncmlkIC5zbGljay12aWV3cG9ydCAuZ3Jp ZC1jYW52YXMiKSkKKyAgICAgICAgKQorICAgICAgICAjIFNlYXJjaCBmb3IgUGxhbiB3b3JkIGlu IHJlc3VsdAorICAgICAgICBjYW52YXMuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbY29udGFp bnMoc3RyaW5nKCksJ1BsYW4nKV0iKQorCisgICAgZGVmIF9xdWVyeV90b29sX2V4cGxhaW5fdmVy Ym9zZShzZWxmKToKKyAgICAgICAgcXVlcnkgPSAiIiItLSBFeHBsYWluIHF1ZXJ5IHdpdGggdmVy Ym9zZQorU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBhcyBpZCBvcmRlciBieSBpZCBk ZXNjIiIiCisKKyAgICAgICAgd2FpdCA9IFdlYkRyaXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwg MTApCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkp CisKKyAgICAgICAgcXVlcnlfb3AgPSBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRy b3Bkb3duIikKKyAgICAgICAgcXVlcnlfb3AuY2xpY2soKQorCisgICAgICAgIEFjdGlvbkNoYWlu cyhzZWxmLmRyaXZlcikubW92ZV90b19lbGVtZW50KAorICAgICAgICAgICAgcXVlcnlfb3AuZmlu ZF9lbGVtZW50X2J5X3hwYXRoKAorICAgICAgICAgICAgICAgICIvL2xpW2NvbnRhaW5zKC4sJ0V4 cGxhaW4gT3B0aW9ucycpXSIpKS5wZXJmb3JtKCkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9i eV9pZCgiYnRuLWV4cGxhaW4tdmVyYm9zZSIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2Uu ZmluZF9ieV9pZCgiYnRuLWV4cGxhaW4iKS5jbGljaygpCisKKyAgICAgICAgc2VsZi5wYWdlLndh aXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkKKworICAg ICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdEYXRhIE91dHB1dCcpCisKKyAgICAgICAgY2FudmFz ID0gd2FpdC51bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAg ICAoQnkuQ1NTX1NFTEVDVE9SLCAiI2RhdGFncmlkIC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52 YXMiKSkKKyAgICAgICAgKQorICAgICAgICAjIFNlYXJjaCBmb3IgJ091dHB1dCcgd29yZCBpbiBy ZXN1bHQKKyAgICAgICAgY2FudmFzLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW2NvbnRhaW5z KHN0cmluZygpLCAnT3V0cHV0JyldIikKKworICAgIGRlZiBfcXVlcnlfdG9vbF9leHBsYWluX2Nv c3Qoc2VsZik6CisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gRXhwbGFpbiBxdWVyeSB3aXRoIGNvc3Rz CitTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGFzIGlkIG9yZGVyIGJ5IGlkIGRlc2Mi IiIKKworICAgICAgICB3YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkK KworICAgICAgICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKyAg ICAgICAgcXVlcnlfb3AgPSBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRyb3Bkb3du IikKKyAgICAgICAgcXVlcnlfb3AuY2xpY2soKQorCisgICAgICAgIEFjdGlvbkNoYWlucyhzZWxm LmRyaXZlcikubW92ZV90b19lbGVtZW50KAorICAgICAgICAgICAgcXVlcnlfb3AuZmluZF9lbGVt ZW50X2J5X3hwYXRoKAorICAgICAgICAgICAgICAgICIvL2xpW2NvbnRhaW5zKC4sJ0V4cGxhaW4g T3B0aW9ucycpXSIpKS5wZXJmb3JtKCkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgi YnRuLWV4cGxhaW4tY29zdHMiKS5jbGljaygpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlf aWQoImJ0bi1leHBsYWluIikuY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9x dWVyeV90b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisKKyAgICAgICAgc2Vs Zi5wYWdlLmNsaWNrX3RhYignRGF0YSBPdXRwdXQnKQorCisgICAgICAgIGNhbnZhcyA9IHdhaXQu dW50aWwoRUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAgICAgKEJ5LkNT U19TRUxFQ1RPUiwgIiNkYXRhZ3JpZCAuc2xpY2stdmlld3BvcnQgLmdyaWQtY2FudmFzIikpCisg ICAgICAgICkKKyAgICAgICAgIyBTZWFyY2ggZm9yICdUb3RhbCBDb3N0IHdvcmQgaW4gcmVzdWx0 CisgICAgICAgIGNhbnZhcy5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltjb250YWlucyhzdHJp bmcoKSwnVG90YWwgQ29zdCcpXSIpCisKKyAgICBkZWYgX3F1ZXJ5X3Rvb2xfZXhwbGFpbl9hbmFs eXplKHNlbGYpOgorICAgICAgICBxdWVyeSA9ICIiIi0tIEV4cGxhaW4gYW5hbHl6ZSBxdWVyeQor U0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBhcyBpZCBvcmRlciBieSBpZCBkZXNjIiIi CisKKyAgICAgICAgd2FpdCA9IFdlYkRyaXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwgMTApCisK KyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisKKyAg ICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1xdWVyeS1kcm9wZG93biIpLmNsaWNrKCkK KyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1leHBsYWluLWFuYWx5emUiKS5jbGlj aygpCisKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRp Y2F0b3JfdG9fZGlzYXBwZWFyKCkKKworICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdEYXRh IE91dHB1dCcpCisKKyAgICAgICAgY2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVzZW5jZV9vZl9l bGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAiI2RhdGFncmlk IC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkKKyAgICAgICAgKQorICAgICAgICAjIFNl YXJjaCBmb3IgQWN0dWFsIFJvd3Mgd29yZCBpbiByZXN1bHQKKyAgICAgICAgY2FudmFzLmZpbmRf ZWxlbWVudF9ieV94cGF0aCgiLy8qW2NvbnRhaW5zKHN0cmluZygpLCdBY3R1YWwgUm93cycpXSIp CisKKyAgICBkZWYgX3F1ZXJ5X3Rvb2xfZXhwbGFpbl9hbmFseXplX2J1ZmZlcnMoc2VsZik6Cisg ICAgICAgIHF1ZXJ5ID0gIiIiLS0gRXhwbGFpbiBhbmFseXplIHF1ZXJ5IHdpdGggYnVmZmVycwor U0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBhcyBpZCBvcmRlciBieSBpZCBkZXNjIiIi CisKKyAgICAgICAgd2FpdCA9IFdlYkRyaXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwgMTApCisK KyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisKKyAg ICAgICAgcXVlcnlfb3AgPSBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRyb3Bkb3du IikKKyAgICAgICAgcXVlcnlfb3AuY2xpY2soKQorCisgICAgICAgIEFjdGlvbkNoYWlucyhzZWxm LmRyaXZlcikubW92ZV90b19lbGVtZW50KAorICAgICAgICAgICAgcXVlcnlfb3AuZmluZF9lbGVt ZW50X2J5X3hwYXRoKAorICAgICAgICAgICAgICAgICIvL2xpW2NvbnRhaW5zKC4sJ0V4cGxhaW4g T3B0aW9ucycpXSIpKS5wZXJmb3JtKCkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgi YnRuLWV4cGxhaW4tYnVmZmVycyIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9i eV9pZCgiYnRuLWV4cGxhaW4tYW5hbHl6ZSIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2Uu d2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorCisg ICAgICAgIHNlbGYucGFnZS5jbGlja190YWIoJ0RhdGEgT3V0cHV0JykKKworICAgICAgICBjYW52 YXMgPSB3YWl0LnVudGlsKEVDLnByZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRlZCgKKyAgICAgICAg ICAgIChCeS5DU1NfU0VMRUNUT1IsICIjZGF0YWdyaWQgLnNsaWNrLXZpZXdwb3J0IC5ncmlkLWNh bnZhcyIpKQorICAgICAgICApCisgICAgICAgICMgU2VhcmNoIGZvciAnU2hhcmVkIFJlYWQgQmxv Y2tzJyB3b3JkIGluIHJlc3VsdAorICAgICAgICBjYW52YXMuZmluZF9lbGVtZW50X2J5X3hwYXRo KCIvLypbY29udGFpbnMoc3RyaW5nKCksICdTaGFyZWQgUmVhZCBCbG9ja3MnKV0iKQorCisgICAg ZGVmIF9xdWVyeV90b29sX2V4cGxhaW5fYW5hbHl6ZV90aW1pbmcoc2VsZik6CisgICAgICAgIHF1 ZXJ5ID0gIiIiLS0gRXhwbGFpbiBhbmFseXplIHF1ZXJ5IHdpdGggdGltaW5nCitTRUxFQ1QgZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGFzIGlkIG9yZGVyIGJ5IGlkIGRlc2MiIiIKKworICAgICAg ICB3YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAgICBz ZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKyAgICAgICAgcXVlcnlf b3AgPSBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRyb3Bkb3duIikKKyAgICAgICAg cXVlcnlfb3AuY2xpY2soKQorCisgICAgICAgIEFjdGlvbkNoYWlucyhzZWxmLmRyaXZlcikubW92 ZV90b19lbGVtZW50KAorICAgICAgICAgICAgcXVlcnlfb3AuZmluZF9lbGVtZW50X2J5X3hwYXRo KAorICAgICAgICAgICAgICAgICIvL2xpW2NvbnRhaW5zKC4sJ0V4cGxhaW4gT3B0aW9ucycpXSIp KS5wZXJmb3JtKCkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWV4cGxhaW4t dGltaW5nIikuY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZXhw bGFpbi1hbmFseXplIikuY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVy eV90b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisKKyAgICAgICAgc2VsZi5w YWdlLmNsaWNrX3RhYignRGF0YSBPdXRwdXQnKQorCisgICAgICAgIGNhbnZhcyA9IHdhaXQudW50 aWwoRUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAgICAgKEJ5LkNTU19T RUxFQ1RPUiwgIiNkYXRhZ3JpZCAuc2xpY2stdmlld3BvcnQgLmdyaWQtY2FudmFzIikpCisgICAg ICAgICkKKyAgICAgICAgIyBTZWFyY2ggZm9yICdBY3R1YWwgVG90YWwgVGltZScgd29yZCBpbiBy ZXN1bHQKKyAgICAgICAgY2FudmFzLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW2NvbnRhaW5z KHN0cmluZygpLCAnQWN0dWFsIFRvdGFsIFRpbWUnKV0iKQorCisgICAgZGVmIF9xdWVyeV90b29s X2F1dG9fY29tbWl0X2Rpc2FibGVkKHNlbGYpOgorICAgICAgICB0YWJsZV9uYW1lID0gJ3F1ZXJ5 X3Rvb2xfYXV0b19jb21taXRfZGlzYWJsZWRfdGFibGUnCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0g MS4gRGlzYWJsZSBhdXRvIGNvbW1pdC4KKy0tIDIuIENyZWF0ZSB0YWJsZSBpbiBwdWJsaWMgc2No ZW1hLgorLS0gMy4gUk9MTEJBQ0sgdHJhbnNhY3Rpb24uCistLSA0LiBDaGVjayBpZiB0YWJsZSBp cyAqTk9UKiBjcmVhdGVkLgorQ1JFQVRFIFRBQkxFIHB1YmxpYy57fSgpOyIiIi5mb3JtYXQodGFi bGVfbmFtZSkKKyAgICAgICAgd2FpdCA9IFdlYkRyaXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwg MTApCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkp CisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1xdWVyeS1kcm9wZG93biIpLmNs aWNrKCkKKworICAgICAgICBhdXRvX2NvbW1pdF9idG4gPSBzZWxmLnBhZ2UuZmluZF9ieV9pZCgi YnRuLWF1dG8tY29tbWl0IikKKworICAgICAgICBhdXRvX2NvbW1pdF9jaGVjayA9IGF1dG9fY29t bWl0X2J0bi5maW5kX2VsZW1lbnRfYnlfdGFnX25hbWUoImkiKQorCisgICAgICAgICMgaWYgYXV0 byBjb21taXQgaXMgZW5hYmxlZCB0aGVuICdpJyBlbGVtZW50IHdpbGwKKyAgICAgICAgIyBoYXZl ICdhdXRvLWNvbW1pdCBmYSBmYS1jaGVjaycgY2xhc3NlcworICAgICAgICAjIGlmIGF1dG8gY29t bWl0IGlzIGRpc2FibGVkIHRoZW4gJ2knIGVsZW1lbnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1 dG8tY29tbWl0IGZhIGZhLWNoZWNrIHZpc2liaWxpdHktaGlkZGVuJyBjbGFzc2VzCisKKyAgICAg ICAgaWYgJ2F1dG8tY29tbWl0IGZhIGZhLWNoZWNrJyA9PSBzdHIoYXV0b19jb21taXRfY2hlY2su Z2V0X2F0dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAnY2xhc3MnKSk6CisgICAgICAgICAgICBh dXRvX2NvbW1pdF9idG4uY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJi dG4tZmxhc2giKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90b29s X2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNlbGYucGFnZS5jbGlj a190YWIoJ01lc3NhZ2VzJykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hw YXRoKAorICAgICAgICAgICAgJy8vZGl2W2NvbnRhaW5zKEBjbGFzcywgInNxbC1lZGl0b3ItbWVz c2FnZSIpIGFuZCBjb250YWlucyhzdHJpbmcoKSwgIkNSRUFURSBUQUJMRSIpXScKKyAgICAgICAg KQorCisgICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2woKQorICAgICAgICBxdWVyeSA9ICIi Ii0tIDEuIChEb25lKSBEaXNhYmxlIGF1dG8gY29tbWl0LgorLS0gMi4gKERvbmUpIENyZWF0ZSB0 YWJsZSBpbiBwdWJsaWMgc2NoZW1hLgorLS0gMy4gUk9MTEJBQ0sgdHJhbnNhY3Rpb24uCistLSA0 LiBDaGVjayBpZiB0YWJsZSBpcyAqTk9UKiBjcmVhdGVkLgorUk9MTEJBQ0s7IiIiCisgICAgICAg IHNlbGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBzZWxm LnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxmLnBhZ2Uu d2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorICAg ICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdNZXNzYWdlcycpCisgICAgICAgIHNlbGYuZHJpdmVy LmZpbmRfZWxlbWVudF9ieV94cGF0aCgKKyAgICAgICAgICAgICcvL2Rpdltjb250YWlucyhAY2xh c3MsICJzcWwtZWRpdG9yLW1lc3NhZ2UiKSBhbmQgY29udGFpbnMoc3RyaW5nKCksICJST0xMQkFD SyIpXScKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2woKQorICAg ICAgICBxdWVyeSA9ICIiIi0tIDEuIChEb25lKSBEaXNhYmxlIGF1dG8gY29tbWl0LgorLS0gMi4g KERvbmUpIENyZWF0ZSB0YWJsZSBpbiBwdWJsaWMgc2NoZW1hLgorLS0gMy4gKERvbmUpIFJPTExC QUNLIHRyYW5zYWN0aW9uLgorLS0gNC4gQ2hlY2sgaWYgdGFibGUgaXMgKk5PVCogY3JlYXRlZC4K K1NFTEVDVCByZWxuYW1lIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsa2luZCBJTiAoJ3InLCdzJywn dCcpIGFuZCByZWxuYW1lc3BhY2UgPSAyMjAwOjpvaWQ7IiIiCisgICAgICAgIHNlbGYucGFnZS5m aWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBzZWxmLnBhZ2UuZmluZF9i eV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVl cnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorICAgICAgICBzZWxmLnBh Z2UuY2xpY2tfdGFiKCdEYXRhIE91dHB1dCcpCisgICAgICAgIGNhbnZhcyA9IHdhaXQudW50aWwo RUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAgICAgKEJ5LkNTU19TRUxF Q1RPUiwgIiNkYXRhZ3JpZCAuc2xpY2stdmlld3BvcnQgLmdyaWQtY2FudmFzIikpKQorCisgICAg ICAgIGVsID0gY2FudmFzLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vZGl2W2NvbnRhaW5zKEBj bGFzcywgJ3NsaWNrLWNlbGwnKSBhbmQgY29udGFpbnModGV4dCgpLCAne30nKV0iLmZvcm1hdCh0 YWJsZV9uYW1lKSkKKworICAgICAgICBhc3NlcnQgbGVuKGVsKSA9PSAwLCAiVGFibGUgJ3t9JyBj cmVhdGVkIHdpdGggYXV0byBjb21taXQgZGlzYWJsZWQgYW5kIHdpdGhvdXQgYW55IGV4cGxpY2l0 IGNvbW1pdC4iLmZvcm1hdCh0YWJsZV9uYW1lKQorCisgICAgZGVmIF9xdWVyeV90b29sX2F1dG9f Y29tbWl0X2VuYWJsZWQoc2VsZik6CisgICAgICAgIHRhYmxlX25hbWUgPSAncXVlcnlfdG9vbF9h dXRvX2NvbW1pdF9lbmFibGVkX3RhYmxlJworICAgICAgICBxdWVyeSA9ICIiIi0tIDEuIEVORCBh bnkgb3BlbiB0cmFuc2FjdGlvbi4KKy0tIDIuIEVuYWJsZSBhdXRvIGNvbW1pdC4KKy0tIDMuIENy ZWF0ZSB0YWJsZSBpbiBwdWJsaWMgc2NoZW1hLgorLS0gNC4gUk9MTEJBQ0sgdHJhbnNhY3Rpb24K Ky0tIDUuIENoZWNrIGlmIHRhYmxlIGlzIGNyZWF0ZWQgZXZlbnQgYWZ0ZXIgUk9MTEJBQ0suCitF TkQ7CitDUkVBVEUgVEFCTEUgcHVibGljLnt9KCk7IiIiLmZvcm1hdCh0YWJsZV9uYW1lKQorICAg ICAgICB3YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAg ICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAgICBz ZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRyb3Bkb3duIikuY2xpY2soKQorCisgICAg ICAgIGF1dG9fY29tbWl0X2J0biA9IHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tYXV0by1jb21t aXQiKQorCisgICAgICAgIGF1dG9fY29tbWl0X2NoZWNrID0gYXV0b19jb21taXRfYnRuLmZpbmRf ZWxlbWVudF9ieV90YWdfbmFtZSgiaSIpCisKKyAgICAgICAgIyBpZiBhdXRvIGNvbW1pdCBpcyBl bmFibGVkIHRoZW4gJ2knIGVsZW1lbnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8tY29tbWl0 IGZhIGZhLWNoZWNrJyBjbGFzc2VzCisgICAgICAgICMgaWYgYXV0byBjb21taXQgaXMgZGlzYWJs ZWQgdGhlbiAnaScgZWxlbWVudCB3aWxsCisgICAgICAgICMgaGF2ZSAnYXV0by1jb21taXQgZmEg ZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4nIGNsYXNzZXMKKworICAgICAgICBpZiAnYXV0by1j b21taXQgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4nID09IHN0cihhdXRvX2NvbW1pdF9j aGVjay5nZXRfYXR0cmlidXRlKAorICAgICAgICAgICAgICAgICdjbGFzcycpKToKKyAgICAgICAg ICAgIGF1dG9fY29tbWl0X2J0bi5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lk KCJidG4tZmxhc2giKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90 b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNlbGYucGFnZS5j bGlja190YWIoJ01lc3NhZ2VzJykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5 X3hwYXRoKAorICAgICAgICAgICAgJy8vZGl2W2NvbnRhaW5zKEBjbGFzcywgInNxbC1lZGl0b3It bWVzc2FnZSIpIGFuZCBjb250YWlucyhzdHJpbmcoKSwgIkNSRUFURSBUQUJMRSIpXScKKyAgICAg ICAgKQorCisgICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2woKQorICAgICAgICBxdWVyeSA9 ICIiIi0tIDEuIChEb25lKSBFTkQgYW55IG9wZW4gdHJhbnNhY3Rpb24gaWYgYW55LgorLS0gMi4g KERvbmUpIEVuYWJsZSBhdXRvIGNvbW1pdC4KKy0tIDMuIChEb25lKSBDcmVhdGUgdGFibGUgaW4g cHVibGljIHNjaGVtYS4KKy0tIDQuIFJPTExCQUNLIHRyYW5zYWN0aW9uCistLSA1LiBDaGVjayBp ZiB0YWJsZSBpcyBjcmVhdGVkIGV2ZW50IGFmdGVyIFJPTExCQUNLLgorUk9MTEJBQ0s7IiIiCisg ICAgICAgIHNlbGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAg ICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxm LnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIo KQorICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdNZXNzYWdlcycpCisgICAgICAgIHNlbGYu ZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgKKyAgICAgICAgICAgICcvL2Rpdltjb250YWlu cyhAY2xhc3MsICJzcWwtZWRpdG9yLW1lc3NhZ2UiKSBhbmQgY29udGFpbnMoc3RyaW5nKCksICJS T0xMQkFDSyIpXScKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2wo KQorICAgICAgICBxdWVyeSA9ICIiIi0tIDEuIChEb25lKSBFTkQgYW55IG9wZW4gdHJhbnNhY3Rp b24gaWYgYW55LgorLS0gMi4gKERvbmUpIEVuYWJsZSBhdXRvIGNvbW1pdC4KKy0tIDMuIChEb25l KSBDcmVhdGUgdGFibGUgaW4gcHVibGljIHNjaGVtYS4KKy0tIDQuIChEb25lKSBST0xMQkFDSyB0 cmFuc2FjdGlvbgorLS0gNS4gQ2hlY2sgaWYgdGFibGUgaXMgY3JlYXRlZCBldmVudCBhZnRlciBS T0xMQkFDSy4KK1NFTEVDVCByZWxuYW1lIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsa2luZCBJTiAo J3InLCdzJywndCcpIGFuZCByZWxuYW1lc3BhY2UgPSAyMjAwOjpvaWQ7IiIiCisgICAgICAgIHNl bGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBzZWxmLnBh Z2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxmLnBhZ2UuY2xp Y2tfdGFiKCdEYXRhIE91dHB1dCcpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90 b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisKKyAgICAgICAgY2FudmFzID0g d2FpdC51bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAo QnkuQ1NTX1NFTEVDVE9SLCAiI2RhdGFncmlkIC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMi KSkpCisKKyAgICAgICAgZWwgPSBjYW52YXMuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy9kaXZb Y29udGFpbnMoQGNsYXNzLCAnc2xpY2stY2VsbCcpIGFuZCBjb250YWlucyh0ZXh0KCksICd7fScp XSIuZm9ybWF0KHRhYmxlX25hbWUpKQorCisgICAgICAgIGFzc2VydCBsZW4oZWwpICE9IDAsICJU YWJsZSAne30nIGlzIG5vdCBjcmVhdGVkIHdpdGggYXV0byBjb21taXQgZW5hYmxlZC4iLmZvcm1h dCh0YWJsZV9uYW1lKQorCisgICAgZGVmIF9xdWVyeV90b29sX2F1dG9fcm9sbGJhY2tfZW5hYmxl ZChzZWxmKToKKyAgICAgICAgdGFibGVfbmFtZSA9ICdxdWVyeV90b29sX2F1dG9fcm9sbGJhY2tf ZW5hYmxlZF90YWJsZScKKyAgICAgICAgcXVlcnkgPSAiIiItLSAxLiBFTkQgYW55IG9wZW4gdHJh bnNhY3Rpb24uCistLSAyLiBFbmFibGUgYXV0byByb2xsYmFjayBhbmQgZGlzYWJsZSBhdXRvIGNv bW1pdC4KKy0tIDMuIENyZWF0ZSB0YWJsZSBpbiBwdWJsaWMgc2NoZW1hLgorLS0gNC4gR2VuZXJh dGUgZXJyb3IgaW4gdHJhbnNhY3Rpb24uCistLSA1LiBFTkQgdHJhbnNhY3Rpb24uCistLSA2LiBD aGVjayBpZiB0YWJsZSBpcyAqTk9UKiBjcmVhdGVkIGFmdGVyIGVuZGluZyB0cmFuc2FjdGlvbi4K K0VORDsiIiIKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVl cnkpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkK KyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRpY2F0b3Jf dG9fZGlzYXBwZWFyKCkKKyAgICAgICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisKKyAgICAg ICAgcXVlcnkgPSAiIiItLSAxLiAoRG9uZSkgRU5EIGFueSBvcGVuIHRyYW5zYWN0aW9uLgorLS0g Mi4gRW5hYmxlIGF1dG8gcm9sbGJhY2sgYW5kIGRpc2FibGUgYXV0byBjb21taXQuCistLSAzLiBD cmVhdGUgdGFibGUgaW4gcHVibGljIHNjaGVtYS4KKy0tIDQuIEdlbmVyYXRlIGVycm9yIGluIHRy YW5zYWN0aW9uLgorLS0gNS4gRU5EIHRyYW5zYWN0aW9uLgorLS0gNi4gQ2hlY2sgaWYgdGFibGUg aXMgKk5PVCogY3JlYXRlZCBhZnRlciBlbmRpbmcgdHJhbnNhY3Rpb24uCitDUkVBVEUgVEFCTEUg cHVibGljLnt9KCk7IiIiLmZvcm1hdCh0YWJsZV9uYW1lKQorICAgICAgICB3YWl0ID0gV2ViRHJp dmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAgICBzZWxmLnBhZ2UuZmlsbF9j b2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9p ZCgiYnRuLXF1ZXJ5LWRyb3Bkb3duIikuY2xpY2soKQorCisgICAgICAgIGF1dG9fcm9sbGJhY2tf YnRuID0gc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1hdXRvLXJvbGxiYWNrIikKKworICAgICAg ICBhdXRvX3JvbGxiYWNrX2NoZWNrID0gYXV0b19yb2xsYmFja19idG4uZmluZF9lbGVtZW50X2J5 X3RhZ19uYW1lKCJpIikKKworICAgICAgICAjIGlmIGF1dG8gcm9sbGJhY2sgaXMgZW5hYmxlZCB0 aGVuICdpJyBlbGVtZW50IHdpbGwKKyAgICAgICAgIyBoYXZlICdhdXRvLXJvbGxiYWNrIGZhIGZh LWNoZWNrJyBjbGFzc2VzCisgICAgICAgICMgaWYgYXV0byByb2xsYmFjayBpcyBkaXNhYmxlZCB0 aGVuICdpJyBlbGVtZW50IHdpbGwKKyAgICAgICAgIyBoYXZlICdhdXRvLXJvbGxiYWNrIGZhIGZh LWNoZWNrIHZpc2liaWxpdHktaGlkZGVuJyBjbGFzc2VzCisKKyAgICAgICAgaWYgJ2F1dG8tcm9s bGJhY2sgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4nID09IHN0cihhdXRvX3JvbGxiYWNr X2NoZWNrLmdldF9hdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgJ2NsYXNzJykpOgorICAgICAg ICAgICAgYXV0b19yb2xsYmFja19idG4uY2xpY2soKQorCisgICAgICAgIGF1dG9fY29tbWl0X2J0 biA9IHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tYXV0by1jb21taXQiKQorCisgICAgICAgIGF1 dG9fY29tbWl0X2NoZWNrID0gYXV0b19jb21taXRfYnRuLmZpbmRfZWxlbWVudF9ieV90YWdfbmFt ZSgiaSIpCisKKyAgICAgICAgIyBpZiBhdXRvIGNvbW1pdCBpcyBlbmFibGVkIHRoZW4gJ2knIGVs ZW1lbnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8tY29tbWl0IGZhIGZhLWNoZWNrJyBjbGFz c2VzCisgICAgICAgICMgaWYgYXV0byBjb21taXQgaXMgZGlzYWJsZWQgdGhlbiAnaScgZWxlbWVu dCB3aWxsCisgICAgICAgICMgaGF2ZSAnYXV0by1jb21taXQgZmEgZmEtY2hlY2sgdmlzaWJpbGl0 eS1oaWRkZW4nIGNsYXNzZXMKKworICAgICAgICBpZiAnYXV0by1jb21taXQgZmEgZmEtY2hlY2sn ID09IHN0cihhdXRvX2NvbW1pdF9jaGVjay5nZXRfYXR0cmlidXRlKAorICAgICAgICAgICAgICAg ICdjbGFzcycpKToKKyAgICAgICAgICAgIGF1dG9fY29tbWl0X2J0bi5jbGljaygpCisKKyAgICAg ICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkKKyAgICAgICAgc2Vs Zi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRpY2F0b3JfdG9fZGlzYXBwZWFy KCkKKyAgICAgICAgc2VsZi5wYWdlLmNsaWNrX3RhYignTWVzc2FnZXMnKQorICAgICAgICBzZWxm LmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAgICAgICAnLy9kaXZbY29udGFp bnMoQGNsYXNzLCAic3FsLWVkaXRvci1tZXNzYWdlIikgYW5kIGNvbnRhaW5zKHN0cmluZygpLCAi Q1JFQVRFIFRBQkxFIildJworICAgICAgICApCisKKyAgICAgICAgc2VsZi5fY2xlYXJfcXVlcnlf dG9vbCgpCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gMS4gKERvbmUpIEVORCBhbnkgb3BlbiB0cmFu c2FjdGlvbi4KKy0tIDIuIChEb25lKSBFbmFibGUgYXV0byByb2xsYmFjayBhbmQgZGlzYWJsZSBh dXRvIGNvbW1pdC4KKy0tIDMuIChEb25lKSBDcmVhdGUgdGFibGUgaW4gcHVibGljIHNjaGVtYS4K Ky0tIDQuIEdlbmVyYXRlIGVycm9yIGluIHRyYW5zYWN0aW9uLgorLS0gNS4gRU5EIHRyYW5zYWN0 aW9uLgorLS0gNi4gQ2hlY2sgaWYgdGFibGUgaXMgKk5PVCogY3JlYXRlZCBhZnRlciBlbmRpbmcg dHJhbnNhY3Rpb24uCitTRUxFQ1QgMS8wOyIiIgorICAgICAgICBzZWxmLnBhZ2UuZmlsbF9jb2Rl bWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0 bi1mbGFzaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xf bG9hZGluZ19pbmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkKKyAgICAgICAgc2VsZi5wYWdlLmNsaWNr X3RhYignTWVzc2FnZXMnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBh dGgoCisgICAgICAgICAgICAnLy9kaXZbY29udGFpbnMoQGNsYXNzLCAic3FsLWVkaXRvci1tZXNz YWdlIikgYW5kIGNvbnRhaW5zKHN0cmluZygpLCAiZGl2aXNpb24gYnkgemVybyIpXScKKyAgICAg ICAgKQorCisgICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2woKQorICAgICAgICBxdWVyeSA9 ICIiIi0tIDEuIChEb25lKSBFTkQgYW55IG9wZW4gdHJhbnNhY3Rpb24uCistLSAyLiAoRG9uZSkg RW5hYmxlIGF1dG8gcm9sbGJhY2sgYW5kIGRpc2FibGUgYXV0byBjb21taXQuCistLSAzLiAoRG9u ZSkgQ3JlYXRlIHRhYmxlIGluIHB1YmxpYyBzY2hlbWEuCistLSA0LiAoRG9uZSkgR2VuZXJhdGUg ZXJyb3IgaW4gdHJhbnNhY3Rpb24uCistLSA1LiBFTkQgdHJhbnNhY3Rpb24uCistLSA2LiBDaGVj ayBpZiB0YWJsZSBpcyAqTk9UKiBjcmVhdGVkIGFmdGVyIGVuZGluZyB0cmFuc2FjdGlvbi4KK0VO RDsiIiIKKworICAgICAgICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVy eSkKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkKKyAg ICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRpY2F0b3JfdG9f ZGlzYXBwZWFyKCkKKyAgICAgICAgc2VsZi5wYWdlLmNsaWNrX3RhYignTWVzc2FnZXMnKQorICAg ICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAgICAgICAnLy9k aXZbY29udGFpbnMoQGNsYXNzLCAic3FsLWVkaXRvci1tZXNzYWdlIikgYW5kIGNvbnRhaW5zKHN0 cmluZygpLCAiUXVlcnkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5IildJworICAgICAgICApCisKKyAg ICAgICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gMS4g KERvbmUpIEVORCBhbnkgb3BlbiB0cmFuc2FjdGlvbi4KKy0tIDIuIChEb25lKSBFbmFibGUgYXV0 byByb2xsYmFjayBhbmQgZGlzYWJsZSBhdXRvIGNvbW1pdC4KKy0tIDMuIChEb25lKSBDcmVhdGUg dGFibGUgaW4gcHVibGljIHNjaGVtYS4KKy0tIDQuIChEb25lKSBHZW5lcmF0ZSBlcnJvciBpbiB0 cmFuc2FjdGlvbi4KKy0tIDUuIChEb25lKSBFTkQgdHJhbnNhY3Rpb24uCistLSA2LiBDaGVjayBp ZiB0YWJsZSBpcyAqTk9UKiBjcmVhdGVkIGFmdGVyIGVuZGluZyB0cmFuc2FjdGlvbi4KK1NFTEVD VCByZWxuYW1lIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsa2luZCBJTiAoJ3InLCdzJywndCcpIGFu ZCByZWxuYW1lc3BhY2UgPSAyMjAwOjpvaWQ7IiIiCisgICAgICAgIHNlbGYucGFnZS5maWxsX2Nv ZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgi YnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9v bF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorICAgICAgICBzZWxmLnBhZ2UuY2xp Y2tfdGFiKCdEYXRhIE91dHB1dCcpCisgICAgICAgIGNhbnZhcyA9IHdhaXQudW50aWwoRUMucHJl c2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAgICAgKEJ5LkNTU19TRUxFQ1RPUiwg IiNkYXRhZ3JpZCAuc2xpY2stdmlld3BvcnQgLmdyaWQtY2FudmFzIikpKQorCisgICAgICAgIGVs ID0gY2FudmFzLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vZGl2W2NvbnRhaW5zKEBjbGFzcywg J3NsaWNrLWNlbGwnKSBhbmQgY29udGFpbnModGV4dCgpLCAne30nKV0iLmZvcm1hdCh0YWJsZV9u YW1lKSkKKworICAgICAgICBhc3NlcnQgbGVuKGVsKSA9PSAwLCAiVGFibGUgJ3t9JyBjcmVhdGVk IGV2ZW4gYWZ0ZXIgUk9MTEJBQ0sgZHVlIHRvIHNxbCBlcnJvci4iLmZvcm1hdCh0YWJsZV9uYW1l KQorCisgICAgZGVmIF9xdWVyeV90b29sX2NhbmNlbF9xdWVyeShzZWxmKToKKyAgICAgICAgcXVl cnkgPSAiIiItLSAxLiBFTkQgYW55IG9wZW4gdHJhbnNhY3Rpb24uCistLSAyLiBFbmFibGUgYXV0 byBjb21taXQgYW5kIERpc2FibGUgYXV0byByb2xsYmFjay4KKy0tIDMuIEV4ZWN1dGUgbG9uZyBy dW5uaW5nIHF1ZXJ5LgorLS0gNC4gQ2FuY2VsIGxvbmcgcnVubmluZyBxdWVyeSBleGVjdXRpb24u CitFTkQ7CitTRUxFQ1QgMSwgcGdfc2xlZXAoMTApIiIiCisgICAgICAgIHNlbGYucGFnZS5maWxs X2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5 X2lkKCJidG4tcXVlcnktZHJvcGRvd24iKS5jbGljaygpCisKKyAgICAgICAgYXV0b19yb2xsYmFj a19idG4gPSBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWF1dG8tcm9sbGJhY2siKQorCisgICAg ICAgIGF1dG9fcm9sbGJhY2tfY2hlY2sgPSBhdXRvX3JvbGxiYWNrX2J0bi5maW5kX2VsZW1lbnRf YnlfdGFnX25hbWUoImkiKQorCisgICAgICAgICMgaWYgYXV0byByb2xsYmFjayBpcyBlbmFibGVk IHRoZW4gJ2knIGVsZW1lbnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8tcm9sbGJhY2sgZmEg ZmEtY2hlY2snIGNsYXNzZXMKKyAgICAgICAgIyBpZiBhdXRvIHJvbGxiYWNrIGlzIGRpc2FibGVk IHRoZW4gJ2knIGVsZW1lbnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8tcm9sbGJhY2sgZmEg ZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4nIGNsYXNzZXMKKworICAgICAgICBpZiAnYXV0by1y b2xsYmFjayBmYSBmYS1jaGVjaycgPT0gc3RyKGF1dG9fcm9sbGJhY2tfY2hlY2suZ2V0X2F0dHJp YnV0ZSgKKyAgICAgICAgICAgICAgICAnY2xhc3MnKSk6CisgICAgICAgICAgICBhdXRvX3JvbGxi YWNrX2J0bi5jbGljaygpCisKKyAgICAgICAgYXV0b19jb21taXRfYnRuID0gc2VsZi5wYWdlLmZp bmRfYnlfaWQoImJ0bi1hdXRvLWNvbW1pdCIpCisKKyAgICAgICAgYXV0b19jb21taXRfY2hlY2sg PSBhdXRvX2NvbW1pdF9idG4uZmluZF9lbGVtZW50X2J5X3RhZ19uYW1lKCJpIikKKworICAgICAg ICAjIGlmIGF1dG8gY29tbWl0IGlzIGVuYWJsZWQgdGhlbiAnaScgZWxlbWVudCB3aWxsCisgICAg ICAgICMgaGF2ZSAnYXV0by1jb21taXQgZmEgZmEtY2hlY2snIGNsYXNzZXMKKyAgICAgICAgIyBp ZiBhdXRvIGNvbW1pdCBpcyBkaXNhYmxlZCB0aGVuICdpJyBlbGVtZW50IHdpbGwKKyAgICAgICAg IyBoYXZlICdhdXRvLWNvbW1pdCBmYSBmYS1jaGVjayB2aXNpYmlsaXR5LWhpZGRlbicgY2xhc3Nl cworCisgICAgICAgIGlmICdhdXRvLWNvbW1pdCBmYSBmYS1jaGVjayB2aXNpYmlsaXR5LWhpZGRl bicgPT0gc3RyKGF1dG9fY29tbWl0X2NoZWNrLmdldF9hdHRyaWJ1dGUoCisgICAgICAgICAgICAg ICAgJ2NsYXNzJykpOgorICAgICAgICAgICAgYXV0b19jb21taXRfYnRuLmNsaWNrKCkKKworICAg ICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBz ZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J2ZldGNoaW5nX2RhdGEn XSIpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tY2FuY2VsLXF1ZXJ5IikuY2xp Y2soKQorICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGlj YXRvcl90b19kaXNhcHBlYXIoKQorICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdNZXNzYWdl cycpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgKKyAgICAgICAg ICAgICcvL2Rpdltjb250YWlucyhAY2xhc3MsICJzcWwtZWRpdG9yLW1lc3NhZ2UiKSBhbmQgY29u dGFpbnMoc3RyaW5nKCksICJjYW5jZWxpbmcgc3RhdGVtZW50IGR1ZSB0byB1c2VyIHJlcXVlc3Qi KV0nCisgICAgICAgICkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMvdmll d19kYXRhX2RtbF9xdWVyaWVzLnB5IGIvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy92aWV3X2Rh dGFfZG1sX3F1ZXJpZXMucHkKaW5kZXggNTViNDVhZC4uYTZiYzVhYSAxMDA2NDQKLS0tIGEvd2Vi L3BnYWRtaW4vZmVhdHVyZV90ZXN0cy92aWV3X2RhdGFfZG1sX3F1ZXJpZXMucHkKKysrIGIvd2Vi L3BnYWRtaW4vZmVhdHVyZV90ZXN0cy92aWV3X2RhdGFfZG1sX3F1ZXJpZXMucHkKQEAgLTksNiAr OSw3IEBACiAKIGltcG9ydCBqc29uCiBpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCiBmcm9tIHNlbGVu aXVtLndlYmRyaXZlciBpbXBvcnQgQWN0aW9uQ2hhaW5zCiBmcm9tIHJlZ3Jlc3Npb24ucHl0aG9u X3Rlc3RfdXRpbHMgaW1wb3J0IHRlc3RfdXRpbHMKIGZyb20gcmVncmVzc2lvbi5mZWF0dXJlX3V0 aWxzLmJhc2VfZmVhdHVyZV90ZXN0IGltcG9ydCBCYXNlRmVhdHVyZVRlc3QKQEAgLTIwNSw2ICsy MDYsMTAgQEAgQ1JFQVRFIFRBQkxFIHB1YmxpYy5kZWZhdWx0cwogICAgICAgICAgICAgICAgIHNl bGYucGFnZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiVmlldyBEYXRhIikpIFwK ICAgICAgICAgICAgIC5wZXJmb3JtKCkKICAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfcGFydGlh bF9saW5rX3RleHQoIlZpZXcgQWxsIFJvd3MiKS5jbGljaygpCisKKyAgICAgICAgIyB3YWl0IHVu dGlsIGRhdGFncmlkIGZyYW1lIGlzIGxvYWRlZC4KKyAgICAgICAgc2VsZi5wYWdlLmNsaWNrX3Rh YignRWRpdCBEYXRhIC0nKQorCiAgICAgICAgIHNlbGYud2FpdC51bnRpbCgKICAgICAgICAgICAg IEVDLnZpc2liaWxpdHlfb2ZfZWxlbWVudF9sb2NhdGVkKAogICAgICAgICAgICAgICAgIChCeS5D U1NfU0VMRUNUT1IsICdpZnJhbWUnKQpAQCAtMjQyLDYgKzI0NywxMSBAQCBDUkVBVEUgVEFCTEUg cHVibGljLmRlZmF1bHRzCiAgICAgICAgIHNlbGYuX3VwZGF0ZV9jZWxsKHJvdzFfY2VsbDJfeHBh dGgsIFsiMSIsICIiLCAiaW50Il0pCiAKICAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0 bi1zYXZlIikuY2xpY2soKSAgIyBTYXZlIGRhdGEKKyAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUg c29tZSBkZWxheSBhZnRlciBzYXZlIGJ1dHRvbiBpcyBjbGlja2VkLCBhcyBpdAorICAgICAgICAj IHRha2VzIHNvbWUgdGltZSB0byBjb21wbGV0ZSBzYXZlIGFqYXggY2FsbCBvdGhlcndpc2UgZGlz Y2FyZCB1bnNhdmVkCisgICAgICAgICMgY2hhbmdlcyBkaWFsb2cgd2lsbCBhcHBlYXIgaWYgd2Ug dHJ5IHRvIGV4ZWN1dGUgcXVlcnkgYmVmb3JlIHByZXZpb3VzCisgICAgICAgICMgc2F2ZSBhamF4 IGlzIGNvbXBsZXRlZC4KKyAgICAgICAgdGltZS5zbGVlcCgyKQogCiAgICAgICAgICMgVmVyaWZ5 IHJvdyAxIGFuZCByb3cgMiBkYXRhCiAgICAgICAgIHNlbGYuX3ZlcmlmeV9yb3dfZGF0YShGYWxz ZSkKQEAgLTI1NCw2ICsyNjQsMTEgQEAgQ1JFQVRFIFRBQkxFIHB1YmxpYy5kZWZhdWx0cwogICAg ICAgICAgICAgc2VsZi5fdXBkYXRlX2NlbGwoY2VsbF94cGF0aCwgY29uZmlnX2RhdGFbc3RyKGlk eCldKQogCiAgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tc2F2ZSIpLmNsaWNrKCkg ICMgU2F2ZSBkYXRhCisgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIHNvbWUgZGVsYXkgYWZ0ZXIg c2F2ZSBidXR0b24gaXMgY2xpY2tlZCwgYXMgaXQKKyAgICAgICAgIyB0YWtlcyBzb21lIHRpbWUg dG8gY29tcGxldGUgc2F2ZSBhamF4IGNhbGwgb3RoZXJ3aXNlIGRpc2NhcmQgdW5zYXZlZAorICAg ICAgICAjIGNoYW5nZXMgZGlhbG9nIHdpbGwgYXBwZWFyIGlmIHdlIHRyeSB0byBleGVjdXRlIHF1 ZXJ5IGJlZm9yZSBwcmV2aW91cworICAgICAgICAjIHNhdmUgYWpheCBpcyBjb21wbGV0ZWQuCisg ICAgICAgIHRpbWUuc2xlZXAoMikKIAogICAgIGRlZiBfdmVyaWZ5X3Jvd19kYXRhKHNlbGYsIGlz X25ld19yb3cpOgogICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xp Y2soKQpAQCAtMjY0LDE3ICsyNzksMTcgQEAgQ1JFQVRFIFRBQkxFIHB1YmxpYy5kZWZhdWx0cwog ICAgICAgICB4cGF0aCA9ICIvLypbY29udGFpbnMoQGNsYXNzLCAndWktd2lkZ2V0LWNvbnRlbnQn KSBhbmQgIiBcCiAgICAgICAgICAgICAgICAgImNvbnRhaW5zKEBzdHlsZSwgJ3RvcDoiICsgc3Ry KHJvd19oZWlnaHQpICsgInB4JyldIgogCi0gICAgICAgICMgd2FpdCBmb3Igc3RhbGUgZWxlbWVu dCByZWZlcmVuY2UgZXhjZXB0aW9uCi0gICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9lbGVtZW50 X3RvX3N0YWxlKHhwYXRoKQorICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9s b2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorCiAgICAgICAgIHJlc3VsdF9yb3cgPSBz ZWxmLnBhZ2UuZmluZF9ieV94cGF0aCh4cGF0aCkKIAogICAgICAgICAjIExpc3Qgb2Ygcm93IHZh bHVlcyBpbiBhbiBhcnJheQogICAgICAgICBjZWxscyA9IFtlbC50ZXh0IGZvciBlbCBpbiByZXN1 bHRfcm93LmZpbmRfZWxlbWVudHNfYnlfdGFnX25hbWUoJ2RpdicpXQogCiAgICAgICAgIGZvciBp ZHggaW4gcmFuZ2UoMSwgbGVuKGNvbmZpZ19kYXRhLmtleXMoKSkpOgotICAgICAgICAgICAgIyAj IGFmdGVyIGNvcHkgJiBwYXN0ZSByb3csIHRoZSBmaXJzdCBjZWxsIG9mIHJvdyAxIGFuZAotICAg ICAgICAgICAgIyAjIHJvdyAyKGJlaW5nIHByaW1hcnkga2V5cykgd29uJ3QgbWF0Y2gKLSAgICAg ICAgICAgICMgIyBzZWUgaWYgY2VsbCB2YWx1ZXMgbWF0Y2hlZCB0byBhY3R1YWwgdmFsdWUKKyAg ICAgICAgICAgICMgYWZ0ZXIgY29weSAmIHBhc3RlIHJvdywgdGhlIGZpcnN0IGNlbGwgb2Ygcm93 IDEgYW5kCisgICAgICAgICAgICAjIHJvdyAyKGJlaW5nIHByaW1hcnkga2V5cykgd29uJ3QgbWF0 Y2gKKyAgICAgICAgICAgICMgc2VlIGlmIGNlbGwgdmFsdWVzIG1hdGNoZWQgdG8gYWN0dWFsIHZh bHVlCiAgICAgICAgICAgICBpZiBpZHggIT0gMSBhbmQgbm90IGlzX25ld19yb3c6CiAgICAgICAg ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2VsbHNbaWR4XSwgY29uZmlnX2RhdGFbc3RyKGlk eCldWzFdKQogICAgICAgICAgICAgZWxpZiBpc19uZXdfcm93OgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vZmVhdHVyZV90ZXN0cy94c3NfY2hlY2tzX3BhbmVsc19hbmRfcXVlcnlfdG9vbF90ZXN0 LnB5IGIvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy94c3NfY2hlY2tzX3BhbmVsc19hbmRfcXVl cnlfdG9vbF90ZXN0LnB5CmluZGV4IDRmZDA3ODMuLjc1YjQyMjIgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL2ZlYXR1cmVfdGVzdHMveHNzX2NoZWNrc19wYW5lbHNfYW5kX3F1ZXJ5X3Rvb2xfdGVz dC5weQorKysgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL3hzc19jaGVja3NfcGFuZWxzX2Fu ZF9xdWVyeV90b29sX3Rlc3QucHkKQEAgLTEwLDYgKzEwLDkgQEAKIGZyb20gc2VsZW5pdW0ud2Vi ZHJpdmVyIGltcG9ydCBBY3Rpb25DaGFpbnMKIGZyb20gcmVncmVzc2lvbi5weXRob25fdGVzdF91 dGlscyBpbXBvcnQgdGVzdF91dGlscwogZnJvbSByZWdyZXNzaW9uLmZlYXR1cmVfdXRpbHMuYmFz ZV9mZWF0dXJlX3Rlc3QgaW1wb3J0IEJhc2VGZWF0dXJlVGVzdAorZnJvbSBzZWxlbml1bS53ZWJk cml2ZXIuc3VwcG9ydC51aSBpbXBvcnQgV2ViRHJpdmVyV2FpdAorZnJvbSBzZWxlbml1bS53ZWJk cml2ZXIuc3VwcG9ydCBpbXBvcnQgZXhwZWN0ZWRfY29uZGl0aW9ucyBhcyBFQworZnJvbSBzZWxl bml1bS53ZWJkcml2ZXIuY29tbW9uLmJ5IGltcG9ydCBCeQogaW1wb3J0IHRpbWUKIAogY2xhc3Mg Q2hlY2tGb3JYc3NGZWF0dXJlVGVzdChCYXNlRmVhdHVyZVRlc3QpOgpAQCAtNzIsNiArNzUsNyBA QCBjbGFzcyBDaGVja0Zvclhzc0ZlYXR1cmVUZXN0KEJhc2VGZWF0dXJlVGVzdCk6CiAKICAgICBk ZWYgX2Nvbm5lY3RzX3RvX3NlcnZlcihzZWxmKToKICAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlf eHBhdGgoIi8vKltAY2xhc3M9J2FjaVRyZWVUZXh0JyBhbmQgLj0nU2VydmVycyddIikuY2xpY2so KQorICAgICAgICB0aW1lLnNsZWVwKDIpCiAgICAgICAgIHNlbGYucGFnZS5kcml2ZXIuZmluZF9l bGVtZW50X2J5X2xpbmtfdGV4dCgiT2JqZWN0IikuY2xpY2soKQogICAgICAgICBBY3Rpb25DaGFp bnMoc2VsZi5wYWdlLmRyaXZlcikgXAogICAgICAgICAgICAgLm1vdmVfdG9fZWxlbWVudChzZWxm LnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkNyZWF0ZSIpKSBcCkBAIC0x NTIsMTEgKzE1NiwxNiBAQCBjbGFzcyBDaGVja0Zvclhzc0ZlYXR1cmVUZXN0KEJhc2VGZWF0dXJl VGVzdCk6CiAgICAgICAgIHNlbGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKCJzZWxl Y3QgJzxpbWcgc3JjPVwieFwiIG9uZXJyb3I9XCJjb25zb2xlLmxvZygxKVwiPiciKQogICAgICAg ICB0aW1lLnNsZWVwKDEpCiAgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZmxhc2gi KS5jbGljaygpCi0gICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgd2FpdCA9IFdlYkRyaXZl cldhaXQoc2VsZi5wYWdlLmRyaXZlciwgNSkKIAotICAgICAgICBzb3VyY2VfY29kZSA9IHNlbGYu cGFnZS5maW5kX2J5X3hwYXRoKAotICAgICAgICAgICAgIi8vKltAaWQ9JzAnXS8vKltAaWQ9J2Rh dGFncmlkJ10vZGl2WzVdL2Rpdi9kaXZbMV0vZGl2WzJdIgotICAgICAgICApLmdldF9hdHRyaWJ1 dGUoJ2lubmVySFRNTCcpCisgICAgICAgIHJlc3VsdF9yb3cgPSBzZWxmLnBhZ2UuZmluZF9ieV94 cGF0aCgKKyAgICAgICAgICAgICIvLypbY29udGFpbnMoQGNsYXNzLCAndWktd2lkZ2V0LWNvbnRl bnQnKSBhbmQgY29udGFpbnMoQHN0eWxlLCAndG9wOjBweCcpXSIKKyAgICAgICAgKQorCisgICAg ICAgIGNlbGxzID0gcmVzdWx0X3Jvdy5maW5kX2VsZW1lbnRzX2J5X3RhZ19uYW1lKCdkaXYnKQor CisgICAgICAgICMgcmVtb3ZlIGZpcnN0IGVsZW1lbnQgYXMgaXQgaXMgcm93IG51bWJlci4KKyAg ICAgICAgc291cmNlX2NvZGUgPSBjZWxsc1sxXS5nZXRfYXR0cmlidXRlKCdpbm5lckhUTUwnKQog CiAgICAgICAgIHNlbGYuX2NoZWNrX2VzY2FwZWRfY2hhcmFjdGVycygKICAgICAgICAgICAgIHNv dXJjZV9jb2RlLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy94c3NfY2hl Y2tzX3BnYWRtaW5fZGVidWdnZXJfdGVzdC5weSBiL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMv eHNzX2NoZWNrc19wZ2FkbWluX2RlYnVnZ2VyX3Rlc3QucHkKaW5kZXggMDk0ZGZlZC4uZTg0NzA0 MCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy94c3NfY2hlY2tzX3BnYWRt aW5fZGVidWdnZXJfdGVzdC5weQorKysgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL3hzc19j aGVja3NfcGdhZG1pbl9kZWJ1Z2dlcl90ZXN0LnB5CkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIENo ZWNrRGVidWdnZXJGb3JYc3NGZWF0dXJlVGVzdChCYXNlRmVhdHVyZVRlc3QpOgogCiAgICAgZGVm IF9jb25uZWN0c190b19zZXJ2ZXIoc2VsZik6CiAgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X3hw YXRoKCIvLypbQGNsYXNzPSdhY2lUcmVlVGV4dCcgYW5kIC49J1NlcnZlcnMnXSIpLmNsaWNrKCkK KyAgICAgICAgdGltZS5zbGVlcCgyKQogICAgICAgICBzZWxmLnBhZ2UuZHJpdmVyLmZpbmRfZWxl bWVudF9ieV9saW5rX3RleHQoIk9iamVjdCIpLmNsaWNrKCkKICAgICAgICAgQWN0aW9uQ2hhaW5z KHNlbGYucGFnZS5kcml2ZXIpIFwKICAgICAgICAgICAgIC5tb3ZlX3RvX2VsZW1lbnQoc2VsZi5w YWdlLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJDcmVhdGUiKSkgXApkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2J1bmRsZS9zbGlja2dyaWQuanMgYi93ZWIvcGdhZG1p bi9zdGF0aWMvYnVuZGxlL3NsaWNrZ3JpZC5qcwppbmRleCAwZDgyYTZiLi5kZDdmODcwIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvYnVuZGxlL3NsaWNrZ3JpZC5qcworKysgYi93ZWIv cGdhZG1pbi9zdGF0aWMvYnVuZGxlL3NsaWNrZ3JpZC5qcwpAQCAtMyw2ICszLDcgQEAgaW1wb3J0 ICdzbGlja2dyaWQvc2xpY2stZGVmYXVsdC10aGVtZS5jc3MnOwogaW1wb3J0ICdzbGlja2dyaWQv Y3NzL3Ntb290aG5lc3MvanF1ZXJ5LXVpLTEuMTEuMy5jdXN0b20uY3NzJzsKIGltcG9ydCAnc2xp Y2tncmlkL3NsaWNrLmNvcmUnOwogaW1wb3J0ICdzbGlja2dyaWQvc2xpY2suZ3JpZCc7CitpbXBv cnQgJ3NsaWNrZ3JpZC9zbGljay5kYXRhdmlldyc7CiBpbXBvcnQgJ3NsaWNrZ3JpZC9zbGljay5l ZGl0b3JzJzsKIGltcG9ydCAnc2xpY2tncmlkL3NsaWNrLmZvcm1hdHRlcnMnOwogaW1wb3J0ICdz bGlja2dyaWQvcGx1Z2lucy9zbGljay5hdXRvdG9vbHRpcHMnOwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9jb2x1bW5fc2VsZWN0b3IuanMgYi93ZWIvcGdhZG1p bi9zdGF0aWMvanMvc2VsZWN0aW9uL2NvbHVtbl9zZWxlY3Rvci5qcwppbmRleCAzMDViNDM4Li5m M2NiNzI3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL2NvbHVt bl9zZWxlY3Rvci5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL2NvbHVt bl9zZWxlY3Rvci5qcwpAQCAtNCwxMyArNCwxOCBAQCBkZWZpbmUoWwogICAnc2xpY2tncmlkJywK IF0sIGZ1bmN0aW9uICgkLCBSYW5nZVNlbGVjdGlvbkhlbHBlcikgewogICB2YXIgQ29sdW1uU2Vs ZWN0b3IgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIFNsaWNrID0gd2luZG93LlNsaWNrOwotICAg IHZhciBncmlkRXZlbnRCdXMgPSBuZXcgU2xpY2suRXZlbnRIYW5kbGVyKCk7CisgICAgdmFyIFNs aWNrID0gd2luZG93LlNsaWNrLAorICAgICAgZ3JpZEV2ZW50QnVzID0gbmV3IFNsaWNrLkV2ZW50 SGFuZGxlcigpLAorICAgICAgb25CZWZvcmVDb2x1bW5TZWxlY3RBbGwgPSBuZXcgU2xpY2suRXZl bnQoKSwKKyAgICAgIG9uQ29sdW1uU2VsZWN0QWxsID0gbmV3IFNsaWNrLkV2ZW50KCk7CiAKICAg ICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChncmlkKSB7CiAgICAgICBncmlkRXZlbnRCdXMuc3Vic2Ny aWJlKGdyaWQub25IZWFkZXJDbGljaywgaGFuZGxlSGVhZGVyQ2xpY2suYmluZChudWxsLCBncmlk KSk7CiAgICAgICBncmlkLmdldFNlbGVjdGlvbk1vZGVsKCkub25TZWxlY3RlZFJhbmdlc0NoYW5n ZWQKICAgICAgICAgLnN1YnNjcmliZShoYW5kbGVTZWxlY3RlZFJhbmdlc0NoYW5nZWQuYmluZChu dWxsLCBncmlkKSk7CisgICAgICBvbkNvbHVtblNlbGVjdEFsbC5zdWJzY3JpYmUoZnVuY3Rpb24o ZSwgYXJncykgeworICAgICAgICB1cGRhdGVSYW5nZXMoYXJncy5ncmlkLCBhcmdzLmNvbHVtbi5p ZCk7CisgICAgICB9KTsKICAgICB9OwogCiAgICAgdmFyIGhhbmRsZUhlYWRlckNsaWNrID0gZnVu Y3Rpb24gKGdyaWQsIGV2ZW50LCBhcmdzKSB7CkBAIC0yMSwxMSArMjYsMjAgQEAgZGVmaW5lKFsK ICAgICAgIGlmIChpc0NvbHVtblNlbGVjdGFibGUoY29sdW1uRGVmaW5pdGlvbikpIHsKICAgICAg ICAgdmFyICRjb2x1bW5IZWFkZXIgPSAkKGV2ZW50LnRhcmdldCk7CiAgICAgICAgIGlmIChoYXND bGlja2VkQ2hpbGRPZkNvbHVtbkhlYWRlcihldmVudCkpIHsKKyAgICAgICAgICBpZiAoJChldmVu dC50YXJnZXQpLmhhc0NsYXNzKCdzbGljay1yZXNpemFibGUtaGFuZGxlJykpIHsKKyAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgICB9CiAgICAgICAgICAgJGNvbHVtbkhlYWRlciA9ICQoZXZl bnQudGFyZ2V0KS5wYXJlbnRzKCcuc2xpY2staGVhZGVyLWNvbHVtbicpOwogICAgICAgICB9CiAg ICAgICAgICRjb2x1bW5IZWFkZXIudG9nZ2xlQ2xhc3MoJ3NlbGVjdGVkJyk7CiAKLSAgICAgICAg dXBkYXRlUmFuZ2VzKGdyaWQsIGNvbHVtbkRlZmluaXRpb24uaWQpOworICAgICAgICBpZiAoJGNv bHVtbkhlYWRlci5oYXNDbGFzcygnc2VsZWN0ZWQnKSkgeworICAgICAgICAgIG9uQmVmb3JlQ29s dW1uU2VsZWN0QWxsLm5vdGlmeShhcmdzLCBldmVudCk7CisgICAgICAgIH0KKworICAgICAgICBp ZiAoIShldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IGV2ZW50LmlzSW1tZWRpYXRlUHJv cGFnYXRpb25TdG9wcGVkKCkpKSB7CisgICAgICAgICAgdXBkYXRlUmFuZ2VzKGdyaWQsIGNvbHVt bkRlZmluaXRpb24uaWQpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfTsKIApAQCAtMTA3LDYg KzEyMSw4IEBAIGRlZmluZShbCiAgICAgJC5leHRlbmQodGhpcywgewogICAgICAgJ2luaXQnOiBp bml0LAogICAgICAgJ2dldENvbHVtbkRlZmluaXRpb25zJzogZ2V0Q29sdW1uRGVmaW5pdGlvbnMs CisgICAgICAnb25CZWZvcmVDb2x1bW5TZWxlY3RBbGwnOiBvbkJlZm9yZUNvbHVtblNlbGVjdEFs bCwKKyAgICAgICdvbkNvbHVtblNlbGVjdEFsbCc6IG9uQ29sdW1uU2VsZWN0QWxsLAogICAgIH0p OwogICB9OwogICByZXR1cm4gQ29sdW1uU2VsZWN0b3I7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9zdGF0aWMvanMvc2VsZWN0aW9uL2NvcHlfZGF0YS5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy9zZWxlY3Rpb24vY29weV9kYXRhLmpzCmluZGV4IGMyMjYzMjMuLjM1MjU5NjYgMTAwNjQ0Ci0t LSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY29weV9kYXRhLmpzCisrKyBiL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY29weV9kYXRhLmpzCkBAIC0xMiwxOSArMTIs MTkgQEAgZnVuY3Rpb24gKCQsIF8sIGNsaXBib2FyZCwgUmFuZ2VTZWxlY3Rpb25IZWxwZXIsIHJh bmdlQm91bmRhcnlOYXZpZ2F0b3IpIHsKICAgICB2YXIgZ3JpZCA9IHNlbGYuc2xpY2tncmlkOwog ICAgIHZhciBjb2x1bW5EZWZpbml0aW9ucyA9IGdyaWQuZ2V0Q29sdW1ucygpOwogICAgIHZhciBz ZWxlY3RlZFJhbmdlcyA9IGdyaWQuZ2V0U2VsZWN0aW9uTW9kZWwoKS5nZXRTZWxlY3RlZFJhbmdl cygpOwotICAgIHZhciBkYXRhID0gZ3JpZC5nZXREYXRhKCk7CisgICAgdmFyIGRhdGFWaWV3ID0g Z3JpZC5nZXREYXRhKCk7CiAgICAgdmFyIHJvd3MgPSBncmlkLmdldFNlbGVjdGVkUm93cygpOwog CiAgICAgaWYgKFJhbmdlU2VsZWN0aW9uSGVscGVyLmFyZUFsbFJhbmdlc0NvbXBsZXRlUm93cyhn cmlkLCBzZWxlY3RlZFJhbmdlcykpIHsKICAgICAgIHNlbGYuY29waWVkX3Jvd3MgPSByb3dzLm1h cChmdW5jdGlvbiAocm93SW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIGRhdGFbcm93SW5kZXhdOwor ICAgICAgICByZXR1cm4gZ3JpZC5nZXREYXRhSXRlbShyb3dJbmRleCk7CiAgICAgICB9KTsKICAg ICAgIHNldFBhc3RlUm93QnV0dG9uRW5hYmxlbWVudChzZWxmLmNhbl9lZGl0LCB0cnVlKTsKICAg ICB9IGVsc2UgewogICAgICAgc2VsZi5jb3BpZWRfcm93cyA9IFtdOwogICAgICAgc2V0UGFzdGVS b3dCdXR0b25FbmFibGVtZW50KHNlbGYuY2FuX2VkaXQsIGZhbHNlKTsKICAgICB9Ci0gICAgdmFy IGNzdlRleHQgPSByYW5nZUJvdW5kYXJ5TmF2aWdhdG9yLnJhbmdlc1RvQ3N2KGRhdGEsIGNvbHVt bkRlZmluaXRpb25zLCBzZWxlY3RlZFJhbmdlcyk7CisgICAgdmFyIGNzdlRleHQgPSByYW5nZUJv dW5kYXJ5TmF2aWdhdG9yLnJhbmdlc1RvQ3N2KGRhdGFWaWV3LmdldEl0ZW1zKCksIGNvbHVtbkRl ZmluaXRpb25zLCBzZWxlY3RlZFJhbmdlcyk7CiAgICAgaWYgKGNzdlRleHQpIHsKICAgICAgIGNs aXBib2FyZC5jb3B5VGV4dFRvQ2xpcGJvYXJkKGNzdlRleHQpOwogICAgIH0KZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vZ3JpZF9zZWxlY3Rvci5qcyBiL3dlYi9w Z2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vZ3JpZF9zZWxlY3Rvci5qcwppbmRleCAyNGZkOWQ2 Li5kZGJiZTIzIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL2dy aWRfc2VsZWN0b3IuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9ncmlk X3NlbGVjdG9yLmpzCkBAIC02LDIxICs2LDMxIEBAIGRlZmluZShbJ2pxdWVyeScsCiAgICdzb3Vy Y2VzL3VybF9mb3InLAogXSwgZnVuY3Rpb24gKCQsIGdldHRleHQsIENvbHVtblNlbGVjdG9yLCBS b3dTZWxlY3RvciwgUmFuZ2VTZWxlY3Rpb25IZWxwZXIsIHVybF9mb3IpIHsKICAgdmFyIEdyaWRT ZWxlY3RvciA9IGZ1bmN0aW9uIChjb2x1bW5EZWZpbml0aW9ucykgewotICAgIHZhciByb3dTZWxl Y3RvciA9IG5ldyBSb3dTZWxlY3Rvcihjb2x1bW5EZWZpbml0aW9ucyk7Ci0gICAgdmFyIGNvbHVt blNlbGVjdG9yID0gbmV3IENvbHVtblNlbGVjdG9yKGNvbHVtbkRlZmluaXRpb25zKTsKKyAgICB2 YXIgU2xpY2sgPSB3aW5kb3cuU2xpY2ssCisgICAgICByb3dTZWxlY3RvciA9IG5ldyBSb3dTZWxl Y3Rvcihjb2x1bW5EZWZpbml0aW9ucyksCisgICAgICBjb2x1bW5TZWxlY3RvciA9IG5ldyBDb2x1 bW5TZWxlY3Rvcihjb2x1bW5EZWZpbml0aW9ucyksCisgICAgICBvbkJlZm9yZUdyaWRTZWxlY3RB bGwgPSBuZXcgU2xpY2suRXZlbnQoKSwKKyAgICAgIG9uR3JpZFNlbGVjdEFsbCA9IG5ldyBTbGlj ay5FdmVudCgpLAorICAgICAgb25CZWZvcmVHcmlkQ29sdW1uU2VsZWN0QWxsID0gY29sdW1uU2Vs ZWN0b3Iub25CZWZvcmVDb2x1bW5TZWxlY3RBbGwsCisgICAgICBvbkdyaWRDb2x1bW5TZWxlY3RB bGwgPSBjb2x1bW5TZWxlY3Rvci5vbkNvbHVtblNlbGVjdEFsbDsKIAogICAgIHZhciBpbml0ID0g ZnVuY3Rpb24gKGdyaWQpIHsKICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7CiAgICAgICBncmlkLm9u SGVhZGVyQ2xpY2suc3Vic2NyaWJlKGZ1bmN0aW9uIChldmVudCwgZXZlbnRBcmd1bWVudHMpIHsK LSAgICAgICAgaWYgKGV2ZW50QXJndW1lbnRzLmNvbHVtbi5zZWxlY3RBbGxPbkNsaWNrKSB7Ci0g ICAgICAgICAgdG9nZ2xlU2VsZWN0QWxsKGdyaWQpOworICAgICAgICBpZiAoZXZlbnRBcmd1bWVu dHMuY29sdW1uLnNlbGVjdEFsbE9uQ2xpY2sgJiYgISQoZXZlbnQudGFyZ2V0KS5oYXNDbGFzcygn c2xpY2stcmVzaXphYmxlLWhhbmRsZScpKSB7CisgICAgICAgICAgdG9nZ2xlU2VsZWN0QWxsKGdy aWQsIGV2ZW50LCBldmVudEFyZ3VtZW50cyk7CiAgICAgICAgIH0KICAgICAgIH0pOwogCiAgICAg ICBncmlkLmdldFNlbGVjdGlvbk1vZGVsKCkub25TZWxlY3RlZFJhbmdlc0NoYW5nZWQKLSAgICAg ICAgICAuc3Vic2NyaWJlKGhhbmRsZVNlbGVjdGVkUmFuZ2VzQ2hhbmdlZC5iaW5kKG51bGwsIGdy aWQpKTsKKyAgICAgICAgLnN1YnNjcmliZShoYW5kbGVTZWxlY3RlZFJhbmdlc0NoYW5nZWQuYmlu ZChudWxsLCBncmlkKSk7CisKICAgICAgIGdyaWQucmVnaXN0ZXJQbHVnaW4ocm93U2VsZWN0b3Ip OwogICAgICAgZ3JpZC5yZWdpc3RlclBsdWdpbihjb2x1bW5TZWxlY3Rvcik7CisKKyAgICAgIG9u R3JpZFNlbGVjdEFsbC5zdWJzY3JpYmUoZnVuY3Rpb24oZSwgYXJncykgeworICAgICAgICBSYW5n ZVNlbGVjdGlvbkhlbHBlci5zZWxlY3RBbGwoYXJncy5ncmlkKTsKKyAgICAgIH0pOwogICAgIH07 CiAKICAgICB2YXIgZ2V0Q29sdW1uRGVmaW5pdGlvbnMgPSBmdW5jdGlvbiAoY29sdW1uRGVmaW5p dGlvbnMpIHsKQEAgLTQ1LDExICs1NSwxNCBAQCBkZWZpbmUoWydqcXVlcnknLAogICAgICAgfQog ICAgIH0KIAotICAgIGZ1bmN0aW9uIHRvZ2dsZVNlbGVjdEFsbChncmlkKSB7CisgICAgZnVuY3Rp b24gdG9nZ2xlU2VsZWN0QWxsKGdyaWQsIGV2ZW50LCBldmVudEFyZ3VtZW50cykgewogICAgICAg aWYgKFJhbmdlU2VsZWN0aW9uSGVscGVyLmlzRW50aXJlR3JpZFNlbGVjdGVkKGdyaWQpKSB7CiAg ICAgICAgIHNlbGVjdE5vbmUoZ3JpZCk7CiAgICAgICB9IGVsc2UgewotICAgICAgICBSYW5nZVNl bGVjdGlvbkhlbHBlci5zZWxlY3RBbGwoZ3JpZCk7CisgICAgICAgIG9uQmVmb3JlR3JpZFNlbGVj dEFsbC5ub3RpZnkoZXZlbnRBcmd1bWVudHMsIGV2ZW50KTsKKyAgICAgICAgaWYgKCEoZXZlbnQu aXNQcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3Rv cHBlZCgpKSkgeworICAgICAgICAgIFJhbmdlU2VsZWN0aW9uSGVscGVyLnNlbGVjdEFsbChncmlk KTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIApAQCAtNjEsNiArNzQsMTAgQEAgZGVmaW5l KFsnanF1ZXJ5JywKICAgICAkLmV4dGVuZCh0aGlzLCB7CiAgICAgICAnaW5pdCc6IGluaXQsCiAg ICAgICAnZ2V0Q29sdW1uRGVmaW5pdGlvbnMnOiBnZXRDb2x1bW5EZWZpbml0aW9ucywKKyAgICAg ICdvbkJlZm9yZUdyaWRTZWxlY3RBbGwnOiBvbkJlZm9yZUdyaWRTZWxlY3RBbGwsCisgICAgICAn b25HcmlkU2VsZWN0QWxsJzogb25HcmlkU2VsZWN0QWxsLAorICAgICAgJ29uQmVmb3JlR3JpZENv bHVtblNlbGVjdEFsbCc6IG9uQmVmb3JlR3JpZENvbHVtblNlbGVjdEFsbCwKKyAgICAgICdvbkdy aWRDb2x1bW5TZWxlY3RBbGwnOiBvbkdyaWRDb2x1bW5TZWxlY3RBbGwsCiAgICAgfSk7CiAgIH07 CiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vcmFuZ2VfYm91 bmRhcnlfbmF2aWdhdG9yLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9yYW5n ZV9ib3VuZGFyeV9uYXZpZ2F0b3IuanMKaW5kZXggODAzZjc1YS4uMjc0YjYyMSAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9yYW5nZV9ib3VuZGFyeV9uYXZpZ2F0 b3IuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9yYW5nZV9ib3VuZGFy eV9uYXZpZ2F0b3IuanMKQEAgLTU4LDYgKzU4LDcgQEAgZnVuY3Rpb24gKFJhbmdlU2VsZWN0aW9u SGVscGVyKSB7CiAgICAgfSwKIAogICAgIHJhbmdlc1RvQ3N2OiBmdW5jdGlvbiAoZGF0YSwgY29s dW1uRGVmaW5pdGlvbnMsIHNlbGVjdGVkUmFuZ2VzKSB7CisKICAgICAgIHZhciByb3dSYW5nZUJv dW5kcyA9IHNlbGVjdGVkUmFuZ2VzLm1hcChmdW5jdGlvbiAocmFuZ2UpIHsKICAgICAgICAgcmV0 dXJuIFtyYW5nZS5mcm9tUm93LCByYW5nZS50b1Jvd107CiAgICAgICB9KTsKQEAgLTcyLDYgKzcz LDcgQEAgZnVuY3Rpb24gKFJhbmdlU2VsZWN0aW9uSGVscGVyKSB7CiAgICAgICB2YXIgY3N2Um93 cyA9IHRoaXMubWFwT3ZlcjJEQXJyYXkocm93UmFuZ2VCb3VuZHMsIGNvbFJhbmdlQm91bmRzLCB0 aGlzLmNzdkNlbGwuYmluZCh0aGlzLCBkYXRhLCBjb2x1bW5EZWZpbml0aW9ucyksIGZ1bmN0aW9u IChyb3dEYXRhKSB7CiAgICAgICAgIHJldHVybiByb3dEYXRhLmpvaW4oJywnKTsKICAgICAgIH0p OworCiAgICAgICByZXR1cm4gY3N2Um93cy5qb2luKCdcbicpOwogICAgIH0sCiAKQEAgLTEwMSw3 ICsxMDMsNyBAQCBmdW5jdGlvbiAoUmFuZ2VTZWxlY3Rpb25IZWxwZXIpIHsKICAgICB9LAogCiAg ICAgY3N2Q2VsbDogZnVuY3Rpb24gKGRhdGEsIGNvbHVtbkRlZmluaXRpb25zLCByb3dJZCwgY29s SWQpIHsKLSAgICAgIHZhciB2YWwgPSBkYXRhW3Jvd0lkXVtjb2x1bW5EZWZpbml0aW9uc1tjb2xJ ZF0ucG9zXTsKKyAgICAgIHZhciB2YWwgPSBkYXRhW3Jvd0lkXVtjb2x1bW5EZWZpbml0aW9uc1tj b2xJZF0uZmllbGRdOwogCiAgICAgICBpZiAodmFsICYmIF8uaXNPYmplY3QodmFsKSkgewogICAg ICAgICB2YWwgPSAnXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsKSArICdcJyc7CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL3Jvd19zZWxlY3Rvci5qcyBiL3dlYi9w Z2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vcm93X3NlbGVjdG9yLmpzCmluZGV4IDIzNmVkNjIu LjU5ZDJmYTIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vcm93 X3NlbGVjdG9yLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vcm93X3Nl bGVjdG9yLmpzCkBAIC04Miw3ICs4Miw4IEBAIGRlZmluZShbCiAgICAgICAgIGZvcm1hdHRlcjog ZnVuY3Rpb24gKHJvd0luZGV4KSB7CiAgICAgICAgICAgcmV0dXJuICc8c3BhbiAnICsKICAgICAg ICAgICAgICdkYXRhLXJvdz0iJyArIHJvd0luZGV4ICsgJyIgJyArCi0gICAgICAgICAgICAnZGF0 YS1jZWxsLXR5cGU9InJvdy1oZWFkZXItc2VsZWN0b3IiLz4nOworICAgICAgICAgICAgJ2RhdGEt Y2VsbC10eXBlPSJyb3ctaGVhZGVyLXNlbGVjdG9yIj4nICsKKyAgICAgICAgICAgIChyb3dJbmRl eCsxKSArICc8L3NwYW4+JzsKICAgICAgICAgfSwKICAgICAgICAgd2lkdGg6IDMwLAogICAgICAg fSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL3NldF9zdGFn ZWRfcm93cy5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vc2V0X3N0YWdlZF9y b3dzLmpzCmluZGV4IDQ2OTc3ZTMuLmJjMDdkZDUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9zZWxlY3Rpb24vc2V0X3N0YWdlZF9yb3dzLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9zZWxlY3Rpb24vc2V0X3N0YWdlZF9yb3dzLmpzCkBAIC0yMiw1MyArMjIsNDQgQEAg ZGVmaW5lKAogICAgICAgJChzZWxlY3RvcikucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAgICAg fQogCi0gICAgZnVuY3Rpb24gZ2V0Um93UHJpbWFyeUtleVZhbHVlc1RvU3RhZ2Uoc2VsZWN0ZWRS b3dzLCBwcmltYXJ5S2V5Q29sdW1uSW5kaWNlcywgZ3JpZERhdGEpIHsKKyAgICBmdW5jdGlvbiBn ZXRSb3dQcmltYXJ5S2V5VmFsdWVzVG9TdGFnZShzZWxlY3RlZFJvd3MsIHByaW1hcnlLZXlzLCBk YXRhVmlldywgY2xpZW50X3ByaW1hcnlfa2V5KSB7CiAgICAgICByZXR1cm4gXy5yZWR1Y2Uoc2Vs ZWN0ZWRSb3dzLCBmdW5jdGlvbiAocHJpbWFyeUtleVZhbHVlc1RvU3RhZ2UsIGRhdGFHcmlkUm93 SW5kZXgpIHsKLSAgICAgICAgdmFyIGdyaWRSb3cgPSBncmlkRGF0YVtkYXRhR3JpZFJvd0luZGV4 XTsKLQotICAgICAgICBpZiAoaXNSb3dNaXNzaW5nUHJpbWFyeUtleXMoZ3JpZFJvdywgcHJpbWFy eUtleUNvbHVtbkluZGljZXMpKSB7CisgICAgICAgIHZhciBncmlkUm93ID0gZGF0YVZpZXcuZ2V0 SXRlbShkYXRhR3JpZFJvd0luZGV4KTsKKyAgICAgICAgaWYgKGlzUm93TWlzc2luZ1ByaW1hcnlL ZXlzKGdyaWRSb3csIHByaW1hcnlLZXlzKSkgewogICAgICAgICAgIHJldHVybiBwcmltYXJ5S2V5 VmFsdWVzVG9TdGFnZTsKICAgICAgICAgfQotCi0gICAgICAgIHZhciB0ZW1wUEsgPSBncmlkUm93 Ll9fdGVtcF9QSzsKLSAgICAgICAgcHJpbWFyeUtleVZhbHVlc1RvU3RhZ2VbdGVtcFBLXSA9IGdl dFNpbmdsZVJvd1ByaW1hcnlLZXlWYWx1ZVRvU3RhZ2UocHJpbWFyeUtleUNvbHVtbkluZGljZXMs IGdyaWRSb3cpOwotCisgICAgICAgIHZhciB0ZW1wUEsgPSBncmlkUm93W2NsaWVudF9wcmltYXJ5 X2tleV07CisgICAgICAgIHByaW1hcnlLZXlWYWx1ZXNUb1N0YWdlW3RlbXBQS10gPSBnZXRTaW5n bGVSb3dQcmltYXJ5S2V5VmFsdWVUb1N0YWdlKHByaW1hcnlLZXlzLCBncmlkUm93KTsKICAgICAg ICAgcmV0dXJuIHByaW1hcnlLZXlWYWx1ZXNUb1N0YWdlOwogICAgICAgfSwge30pOwogICAgIH0K IAotICAgIGZ1bmN0aW9uIGlzUm93TWlzc2luZ1ByaW1hcnlLZXlzKGdyaWRSb3csIHByaW1hcnlL ZXlDb2x1bW5JbmRpY2VzKSB7CisgICAgZnVuY3Rpb24gaXNSb3dNaXNzaW5nUHJpbWFyeUtleXMo Z3JpZFJvdywgcHJpbWFyeUtleXMpIHsKICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGdyaWRSb3cp KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQogCiAgICAgICByZXR1cm4gIV8uaXNV bmRlZmluZWQoCi0gICAgICAgIF8uZmluZChwcmltYXJ5S2V5Q29sdW1uSW5kaWNlcywgZnVuY3Rp b24gKHBrSW5kZXgpIHsKLSAgICAgICAgICByZXR1cm4gXy5pc1VuZGVmaW5lZChncmlkUm93W3Br SW5kZXhdKTsKKyAgICAgICAgXy5maW5kKHByaW1hcnlLZXlzICwgZnVuY3Rpb24gKHBrKSB7Cisg ICAgICAgICAgcmV0dXJuIF8uaXNVbmRlZmluZWQoZ3JpZFJvd1twa10pOwogICAgICAgICB9KQog ICAgICAgKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBnZXRTaW5nbGVSb3dQcmltYXJ5S2V5VmFs dWVUb1N0YWdlKHByaW1hcnlLZXlDb2x1bW5JbmRpY2VzLCBncmlkUm93KSB7CisgICAgZnVuY3Rp b24gZ2V0U2luZ2xlUm93UHJpbWFyeUtleVZhbHVlVG9TdGFnZShwcmltYXJ5S2V5cywgZ3JpZFJv dykgewogICAgICAgdmFyIHJvd1RvU3RhZ2UgPSB7fTsKLSAgICAgIGlmIChwcmltYXJ5S2V5Q29s dW1uSW5kaWNlcy5sZW5ndGgpIHsKLSAgICAgICAgXy5lYWNoKF8ua2V5cyhncmlkUm93KSwgZnVu Y3Rpb24gKGNvbHVtblBvcykgewotICAgICAgICAgIGlmIChfLmNvbnRhaW5zKHByaW1hcnlLZXlD b2x1bW5JbmRpY2VzLCBOdW1iZXIoY29sdW1uUG9zKSkpCi0gICAgICAgICAgICByb3dUb1N0YWdl W2NvbHVtblBvc10gPSBncmlkUm93W2NvbHVtblBvc107CisgICAgICBpZiAocHJpbWFyeUtleXMg JiYgcHJpbWFyeUtleXMubGVuZ3RoKSB7CisgICAgICAgIF8uZWFjaChfLmtleXMoZ3JpZFJvdyks IGZ1bmN0aW9uIChjb2x1bW5OYW1lcykgeworICAgICAgICAgIGlmIChfLmNvbnRhaW5zKHByaW1h cnlLZXlzLCBjb2x1bW5OYW1lcykpCisgICAgICAgICAgICByb3dUb1N0YWdlW2NvbHVtbk5hbWVz XSA9IGdyaWRSb3dbY29sdW1uTmFtZXNdOwogICAgICAgICB9KTsKICAgICAgIH0KICAgICAgIHJl dHVybiByb3dUb1N0YWdlOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGdldFByaW1hcnlLZXlzRm9y U2VsZWN0ZWRSb3dzKHNlbGYsIHNlbGVjdGVkUm93cykgewotICAgICAgdmFyIHByaW1hcnlLZXlD b2x1bW5JbmRpY2VzID0gXy5tYXAoXy5rZXlzKHNlbGYua2V5cyksIGZ1bmN0aW9uIChjb2x1bW5O YW1lKSB7Ci0gICAgICAgIHZhciBjb2x1bW5JbmZvID0gXy5maW5kV2hlcmUoc2VsZi5jb2x1bW5z LCB7bmFtZTogY29sdW1uTmFtZX0pOwotICAgICAgICByZXR1cm4gY29sdW1uSW5mb1sncG9zJ107 Ci0gICAgICB9KTsKLQotICAgICAgdmFyIGdyaWREYXRhID0gc2VsZi5ncmlkLmdldERhdGEoKTsK LSAgICAgIHZhciBzdGFnZWRSb3dzID0gZ2V0Um93UHJpbWFyeUtleVZhbHVlc1RvU3RhZ2Uoc2Vs ZWN0ZWRSb3dzLCBwcmltYXJ5S2V5Q29sdW1uSW5kaWNlcywgZ3JpZERhdGEpOwotCisgICAgICB2 YXIgZGF0YVZpZXcgPSBzZWxmLmdyaWQuZ2V0RGF0YSgpOworICAgICAgdmFyIHN0YWdlZFJvd3Mg PSBnZXRSb3dQcmltYXJ5S2V5VmFsdWVzVG9TdGFnZShzZWxlY3RlZFJvd3MsIF8ua2V5cyhzZWxm LmtleXMpLCBkYXRhVmlldywgc2VsZi5jbGllbnRfcHJpbWFyeV9rZXkpOwogICAgICAgcmV0dXJu IHN0YWdlZFJvd3M7CiAgICAgfQogCkBAIC0xMTQsNCArMTA1LDQgQEAgZGVmaW5lKAogICAgIH07 CiAgICAgcmV0dXJuIHNldFN0YWdlZFJvd3M7CiAgIH0KLSk7CispOwpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQv c2xpY2sucGdhZG1pbi5lZGl0b3JzLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3Jp ZC9zbGljay5wZ2FkbWluLmVkaXRvcnMuanMKaW5kZXggZjJkYWJlMC4uMTViNWZlOSAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9zbGljay5wZ2FkbWluLmVkaXRv cnMuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9zbGljay5wZ2FkbWlu LmVkaXRvcnMuanMKQEAgLTc2LDE4ICs3NiwxOCBAQAogICAgICAgICAgIGxhc3RfdmFsdWUgPSAo Y29sdW1uX3R5cGUgPT09ICdudW1iZXInKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAoXy5p c0VtcHR5KGxhc3RfdmFsdWUpIHx8IGxhc3RfdmFsdWUpIDogbGFzdF92YWx1ZTsKIAotICAgICAg aXRlbVthcmdzLmNvbHVtbi5wb3NdID0gc3RhdGU7CisgICAgICBpdGVtW2FyZ3MuY29sdW1uLmZp ZWxkXSA9IHN0YXRlOwogICAgICAgaWYgKGxhc3RfdmFsdWUgJiYgXy5pc051bGwoc3RhdGUpICYm CiAgICAgICAgICAgKF8uaXNVbmRlZmluZWQoZ3JpZC5jb3BpZWRfcm93c1tyb3ddKSB8fAogICAg ICAgICAgIF8uaXNVbmRlZmluZWQoZ3JpZC5jb3BpZWRfcm93c1tyb3ddW2NlbGxdKSkKICAgICAg ICkgewotICAgICAgICBpdGVtW2FyZ3MuY29sdW1uLnBvc10gPSB1bmRlZmluZWQ7CisgICAgICAg IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0gdW5kZWZpbmVkOwogICAgICAgICBpZiAoZ3JpZC5j b3BpZWRfcm93c1tyb3ddID09IHVuZGVmaW5lZCkgZ3JpZC5jb3BpZWRfcm93c1tyb3ddID0gW107 CiAgICAgICAgIGdyaWQuY29waWVkX3Jvd3Nbcm93XVtjZWxsXSA9IDE7CiAgICAgICB9CiAgICAg fQogICAgIGVsc2UgewotICAgICAgaXRlbVthcmdzLmNvbHVtbi5wb3NdID0gc3RhdGU7CisgICAg ICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRlOwogICAgIH0KICAgfQogCkBAIC0xODks MTQgKzE4OSwxNCBAQAogICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsKICAg ICAgIHZhciBjb2wgPSBhcmdzLmNvbHVtbjsKIAotICAgICAgaWYgKF8uaXNVbmRlZmluZWQoaXRl bVthcmdzLmNvbHVtbi5wb3NdKSAmJiBjb2wuaGFzX2RlZmF1bHRfdmFsKSB7CisgICAgICBpZiAo Xy5pc1VuZGVmaW5lZChpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSkgJiYgY29sLmhhc19kZWZhdWx0 X3ZhbCkgewogICAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSA9ICIiKTsKICAgICAgIH0K LSAgICAgIGVsc2UgaWYgKGl0ZW1bYXJncy5jb2x1bW4ucG9zXSA9PT0gIiIpIHsKKyAgICAgIGVs c2UgaWYgKGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID09PSAiIikgewogICAgICAgICAkaW5wdXQu dmFsKGRlZmF1bHRWYWx1ZSA9ICInJyIpOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAg ICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdKTsKKyAgICAg ICAgJGlucHV0LnZhbChkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSk7CiAg ICAgICAgICRpbnB1dC5zZWxlY3QoKTsKICAgICAgIH0KICAgICB9OwpAQCAtMzIzLDcgKzMyMyw3 IEBACiAgICAgfTsKIAogICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsKLSAg ICAgIHZhciBkYXRhID0gZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAg ICAgdmFyIGRhdGEgPSBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKICAg ICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJh eShkYXRhKSkgewogICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CiAgICAgICB9 IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsKQEAgLTQ0Myw3ICs0NDMsNyBAQAogICAg IH07CiAKICAgICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAkaW5w dXQudmFsKGRlZmF1bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4ucG9zXSk7CisgICAgICAkaW5w dXQudmFsKGRlZmF1bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdKTsKICAgICAgICRp bnB1dC5zZWxlY3QoKTsKICAgICB9OwogCkBAIC00NTIsNyArNDUyLDcgQEAKICAgICB9OwogCiAg ICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24gKGl0ZW0sIHN0YXRlKSB7Ci0gICAgICBpdGVt W2FyZ3MuY29sdW1uLnBvc10gPSBzdGF0ZTsKKyAgICAgIGl0ZW1bYXJncy5jb2x1bW4uZmllbGRd ID0gc3RhdGU7CiAgICAgfTsKIAogICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAo KSB7CkBAIC01MzEsMTMgKzUzMSwxMyBAQAogICAgIH07CiAKICAgICB0aGlzLmxvYWRWYWx1ZSA9 IGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1u LnBvc107Ci0gICAgICBpZiAoXy5pc051bGwoZGVmYXVsdFZhbHVlKXx8IF8uaXNVbmRlZmluZWQo ZGVmYXVsdFZhbHVlKSkgeworICAgICAgZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5m aWVsZF07CisgICAgICBpZiAoXy5pc051bGwoZGVmYXVsdFZhbHVlKXx8Xy5pc1VuZGVmaW5lZChk ZWZhdWx0VmFsdWUpKSB7CiAgICAgICAgICRzZWxlY3QucHJvcCgnaW5kZXRlcm1pbmF0ZScsIHRy dWUpOwogICAgICAgICAkc2VsZWN0LmRhdGEoJ2NoZWNrZWQnLCAyKTsKICAgICAgIH0KICAgICAg IGVsc2UgewotICAgICAgICBkZWZhdWx0VmFsdWUgPSAhIWl0ZW1bYXJncy5jb2x1bW4ucG9zXTsK KyAgICAgICAgZGVmYXVsdFZhbHVlID0gISFpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKICAgICAg ICAgaWYgKGRlZmF1bHRWYWx1ZSkgewogICAgICAgICAgICRzZWxlY3QucHJvcCgnY2hlY2tlZCcs IHRydWUpOwogICAgICAgICAgICRzZWxlY3QuZGF0YSgnY2hlY2tlZCcsIDApOwpAQCAtNTU2LDcg KzU1Niw3IEBACiAgICAgfTsKIAogICAgIHRoaXMuYXBwbHlWYWx1ZSA9IGZ1bmN0aW9uIChpdGVt LCBzdGF0ZSkgewotICAgICAgaXRlbVthcmdzLmNvbHVtbi5wb3NdID0gc3RhdGU7CisgICAgICBp dGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRlOwogICAgIH07CiAKICAgICB0aGlzLmlzVmFs dWVDaGFuZ2VkID0gZnVuY3Rpb24gKCkgewpAQCAtNjQ4LDcgKzY0OCw3IEBACiAgICAgfTsKIAog ICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgIHZhciBkYXRhID0g ZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAgdmFyIGRhdGEgPSBk ZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKICAgICAgIGlmICh0eXBlb2Yg ZGF0YSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHsKICAgICAgICAgZGF0 YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOwogICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5 KGRhdGEpKSB7CkBAIC02NzEsNyArNjcxLDcgQEAKICAgICB9OwogCiAgICAgdGhpcy5hcHBseVZh bHVlID0gZnVuY3Rpb24gKGl0ZW0sIHN0YXRlKSB7Ci0gICAgICBpdGVtW2FyZ3MuY29sdW1uLnBv c10gPSBzdGF0ZTsKKyAgICAgIGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0gc3RhdGU7CiAgICAg fTsKIAogICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7CkBAIC03MjUsNyAr NzI1LDcgQEAKICAgICB9OwogCiAgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkg ewotICAgICAgdmFyIHZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAgdmFyIHZh bHVlID0gaXRlbVthcmdzLmNvbHVtbi5maWVsZF07CiAKICAgICAgIC8vIENoZWNrIGlmIHZhbHVl IGlzIG51bGwgb3IgdW5kZWZpbmVkCiAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiB0 eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7CkBAIC04NTgsNyArODU4LDcgQEAKICAgICB9 OwogCiAgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgewotICAgICAgZGVmYXVs dFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAgZGVmYXVsdFZhbHVlID0gaXRl bVthcmdzLmNvbHVtbi5maWVsZF07CiAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSk7CiAg ICAgICAkaW5wdXRbMF0uZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlOwogICAgICAgJGlucHV0 LnNlbGVjdCgpOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5p dF9fLnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5CmluZGV4IDlj MGJhMDAuLmM2ZmNkYzMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9f X2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvX19pbml0X18ucHkK QEAgLTI3LDcgKzI3LDcgQEAgZnJvbSBwZ2FkbWluLnV0aWxzLnNxbGF1dG9jb21wbGV0ZS5hdXRv Y29tcGxldGUgaW1wb3J0IFNRTEF1dG9Db21wbGV0ZQogZnJvbSBwZ2FkbWluLm1pc2MuZmlsZV9t YW5hZ2VyIGltcG9ydCBGaWxlbWFuYWdlcgogCiAKLWZyb20gY29uZmlnIGltcG9ydCBQR19ERUZB VUxUX0RSSVZFUgorZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJVkVSLCBPTl9ERU1B TkRfUkVDT1JEX0NPVU5UCiAKIE1PRFVMRV9OQU1FID0gJ3NxbGVkaXRvcicKIApAQCAtODIsOSAr ODIsOSBAQCBjbGFzcyBTcWxFZGl0b3JNb2R1bGUoUGdBZG1pbk1vZHVsZSk6CiAgICAgICAgICAg ICAnc3FsZWRpdG9yLnZpZXdfZGF0YV9zdGFydCcsCiAgICAgICAgICAgICAnc3FsZWRpdG9yLnF1 ZXJ5X3Rvb2xfc3RhcnQnLAogICAgICAgICAgICAgJ3NxbGVkaXRvci5xdWVyeV90b29sX3ByZWZl cmVuY2VzJywKLSAgICAgICAgICAgICdzcWxlZGl0b3IuZ2V0X2NvbHVtbnMnLAogICAgICAgICAg ICAgJ3NxbGVkaXRvci5wb2xsJywKLSAgICAgICAgICAgICdzcWxlZGl0b3IuZmV0Y2hfdHlwZXMn LAorICAgICAgICAgICAgJ3NxbGVkaXRvci5mZXRjaCcsCisgICAgICAgICAgICAnc3FsZWRpdG9y LmZldGNoX2FsbCcsCiAgICAgICAgICAgICAnc3FsZWRpdG9yLnNhdmUnLAogICAgICAgICAgICAg J3NxbGVkaXRvci5nZXRfZmlsdGVyJywKICAgICAgICAgICAgICdzcWxlZGl0b3IuYXBwbHlfZmls dGVyJywKQEAgLTI2MSwxMyArMjYxLDMyIEBAIGRlZiBzdGFydF92aWV3X2RhdGEodHJhbnNfaWQp OgogCiAgICAgIyBDaGVjayB0aGUgdHJhbnNhY3Rpb24gYW5kIGNvbm5lY3Rpb24gc3RhdHVzCiAg ICAgc3RhdHVzLCBlcnJvcl9tc2csIGNvbm4sIHRyYW5zX29iaiwgc2Vzc2lvbl9vYmogPSBjaGVj a190cmFuc2FjdGlvbl9zdGF0dXModHJhbnNfaWQpCisKKyAgICAjIGdldCB0aGUgZGVmYXVsdCBj b25uZWN0aW9uIGFzIGN1cnJlbnQgY29ubmVjdGlvbiB3aGljaCBpcyBhdHRhY2hlZCB0bworICAg ICMgdHJhbnMgaWQgaG9sZHMgdGhlIGN1cnNvciB3aGljaCBoYXMgcXVlcnkgcmVzdWx0IHNvIHdl IGNhbm5vdCB1c2UgdGhhdAorICAgICMgY29ubmVjdGlvbiB0byBleGVjdXRlIGFub3RoZXIgcXVl cnkgb3RoZXJ3aXNlIHdlJ2xsIGxvc2UgcXVlcnkgcmVzdWx0LgorCisgICAgbWFuYWdlciA9IGdl dF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcih0cmFuc19vYmou c2lkKQorICAgIGRlZmF1bHRfY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9dHJhbnNfb2Jq LmRpZCkKKworICAgICMgQ29ubmVjdCB0byB0aGUgU2VydmVyIGlmIG5vdCBjb25uZWN0ZWQuCisg ICAgaWYgbm90IGRlZmF1bHRfY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgc3RhdHVzLCBtc2cg PSBkZWZhdWx0X2Nvbm4uY29ubmVjdCgpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAgIGRhdGE9eydz dGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiB1Int9Ii5mb3JtYXQobXNnKX0KKyAgICAgICAgICAg ICkKKwogICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBcCiAgICAgICAgICAgICBh bmQgdHJhbnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKICAg ICAgICAgdHJ5OgorICAgICAgICAgICAgIyBzZXQgZmV0Y2hlZCByb3cgY291bnQgdG8gMCBhcyB3 ZSBhcmUgZXhlY3V0aW5nIHF1ZXJ5IGFnYWluLgorICAgICAgICAgICAgdHJhbnNfb2JqLnVwZGF0 ZV9mZXRjaGVkX3Jvd19jbnQoMCkKKyAgICAgICAgICAgIHNlc3Npb25fb2JqWydjb21tYW5kX29i aiddID0gcGlja2xlLmR1bXBzKHRyYW5zX29iaiwgLTEpCiAKICAgICAgICAgICAgICMgRmV0Y2gg dGhlIHNxbCBhbmQgcHJpbWFyeV9rZXlzIGZyb20gdGhlIG9iamVjdAogICAgICAgICAgICAgc3Fs ID0gdHJhbnNfb2JqLmdldF9zcWwoKQotICAgICAgICAgICAgcGtfbmFtZXMsIHByaW1hcnlfa2V5 cyA9IHRyYW5zX29iai5nZXRfcHJpbWFyeV9rZXlzKCkKKyAgICAgICAgICAgIHBrX25hbWVzLCBw cmltYXJ5X2tleXMgPSB0cmFuc19vYmouZ2V0X3ByaW1hcnlfa2V5cyhkZWZhdWx0X2Nvbm4pCiAK ICAgICAgICAgICAgICMgRmV0Y2ggdGhlIGFwcGxpZWQgZmlsdGVyLgogICAgICAgICAgICAgZmls dGVyX2FwcGxpZWQgPSB0cmFuc19vYmouaXNfZmlsdGVyX2FwcGxpZWQoKQpAQCAtMzM4LDYgKzM1 Nyw4IEBAIGRlZiBzdGFydF9xdWVyeV90b29sKHRyYW5zX2lkKToKICAgICAjIFVzZSBwaWNrbGUu bG9hZHMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21tYW5kIG9iamVjdAogICAgIHNlc3Npb25fb2Jq ID0gZ3JpZF9kYXRhW3N0cih0cmFuc19pZCldCiAgICAgdHJhbnNfb2JqID0gcGlja2xlLmxvYWRz KHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddKQorICAgICMgc2V0IGZldGNoZWQgcm93IGNvdW50 IHRvIDAgYXMgd2UgYXJlIGV4ZWN1dGluZyBxdWVyeSBhZ2Fpbi4KKyAgICB0cmFuc19vYmoudXBk YXRlX2ZldGNoZWRfcm93X2NudCgwKQogCiAgICAgY2FuX2VkaXQgPSBGYWxzZQogICAgIGNhbl9m aWx0ZXIgPSBGYWxzZQpAQCAtNDY3LDY2ICs0ODgsNiBAQCBkZWYgcHJlZmVyZW5jZXModHJhbnNf aWQpOgogICAgICAgICByZXR1cm4gc3VjY2Vzc19yZXR1cm4oKQogCiAKLUBibHVlcHJpbnQucm91 dGUoCi0gICAgJy9jb2x1bW5zLzxpbnQ6dHJhbnNfaWQ+JywgbWV0aG9kcz1bIkdFVCJdLCBlbmRw b2ludD0nZ2V0X2NvbHVtbnMnCi0pCi1AbG9naW5fcmVxdWlyZWQKLWRlZiBnZXRfY29sdW1ucyh0 cmFuc19pZCk6Ci0gICAgIiIiCi0gICAgVGhpcyBtZXRob2Qgd2lsbCByZXR1cm5zIGxpc3Qgb2Yg Y29sdW1ucyBvZiBsYXN0IGFzeW5jIHF1ZXJ5LgotCi0gICAgQXJnczoKLSAgICAgICAgdHJhbnNf aWQ6IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZAotICAgICIiIgotICAgIGNvbHVtbnMgPSBkaWN0KCkK LSAgICBjb2x1bW5zX2luZm8gPSBOb25lCi0gICAgcHJpbWFyeV9rZXlzID0gTm9uZQotICAgIHJz ZXQgPSBOb25lCi0gICAgc3RhdHVzLCBlcnJvcl9tc2csIGNvbm4sIHRyYW5zX29iaiwgc2Vzc2lv bl9vYmogPSBjaGVja190cmFuc2FjdGlvbl9zdGF0dXModHJhbnNfaWQpCi0gICAgaWYgc3RhdHVz IGFuZCBjb25uIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKLQotICAg ICAgICB2ZXIgPSBjb25uLm1hbmFnZXIudmVyc2lvbgotICAgICAgICAjIEdldCB0aGUgdGVtcGxh dGUgcGF0aCBmb3IgdGhlIGNvbHVtbgotICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2NvbHVtbi9z cWwvI3swfSMnLmZvcm1hdCh2ZXIpCi0gICAgICAgIGNvbW1hbmRfb2JqID0gcGlja2xlLmxvYWRz KHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddKQotICAgICAgICBpZiBoYXNhdHRyKGNvbW1hbmRf b2JqLCAnb2JqX2lkJyk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oW3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdub2Rlcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGlkPWNvbW1hbmRfb2JqLm9ial9pZCkKLSAgICAgICAgICAgICMgcm93cyB3aXRoIGF0dHJpYnV0 ZSBub3RfbnVsbAotICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gY29ubi5leGVjdXRlXzJkYXJy YXkoU1FMKQotICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCi0KLSAgICAgICAgIyBDaGVj ayBQSyBjb2x1bW4gaW5mbyBpcyBhdmFpbGFibGUgb3Igbm90Ci0gICAgICAgIGlmICdwcmltYXJ5 X2tleXMnIGluIHNlc3Npb25fb2JqOgotICAgICAgICAgICAgcHJpbWFyeV9rZXlzID0gc2Vzc2lv bl9vYmpbJ3ByaW1hcnlfa2V5cyddCi0KLSAgICAgICAgIyBGZXRjaCBjb2x1bW4gaW5mb3JtYXRp b24KLSAgICAgICAgY29sdW1uc19pbmZvID0gY29ubi5nZXRfY29sdW1uX2luZm8oKQotICAgICAg ICBpZiBjb2x1bW5zX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBmb3Iga2V5LCBjb2wg aW4gZW51bWVyYXRlKGNvbHVtbnNfaW5mbyk6Ci0gICAgICAgICAgICAgICAgY29sX3R5cGUgPSBk aWN0KCkKLSAgICAgICAgICAgICAgICBjb2xfdHlwZVsndHlwZV9jb2RlJ10gPSBjb2xbJ3R5cGVf Y29kZSddCi0gICAgICAgICAgICAgICAgY29sX3R5cGVbJ3R5cGVfbmFtZSddID0gTm9uZQotICAg ICAgICAgICAgICAgIGlmIHJzZXQ6Ci0gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlWydub3Rf bnVsbCddID0gY29sWydub3RfbnVsbCddID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgcnNl dFsncm93cyddW2tleV1bJ25vdF9udWxsJ10KLQotICAgICAgICAgICAgICAgICAgICBjb2xfdHlw ZVsnaGFzX2RlZmF1bHRfdmFsJ10gPSBjb2xbJ2hhc19kZWZhdWx0X3ZhbCddID0gXAotICAgICAg ICAgICAgICAgICAgICAgICAgcnNldFsncm93cyddW2tleV1bJ2hhc19kZWZhdWx0X3ZhbCddCi0K LSAgICAgICAgICAgICAgICBjb2x1bW5zW2NvbFsnbmFtZSddXSA9IGNvbF90eXBlCi0KLSAgICAg ICAgIyBBcyB3ZSBjaGFuZ2VkIHRoZSB0cmFuc2FjdGlvbiBvYmplY3Qgd2UgbmVlZCB0bwotICAg ICAgICAjIHJlc3RvcmUgaXQgYW5kIHVwZGF0ZSB0aGUgc2Vzc2lvbiB2YXJpYWJsZS4KLSAgICAg ICAgc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddID0gY29sdW1ucwotICAgICAgICB1cGRhdGVf c2Vzc2lvbl9ncmlkX3RyYW5zYWN0aW9uKHRyYW5zX2lkLCBzZXNzaW9uX29iaikKLQotICAgIHJl dHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IFRydWUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sdW1ucyc6IGNvbHVtbnNfaW5mbywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmltYXJ5X2tleXMnOiBwcmltYXJ5X2tl eXN9KQotCiAKIEBibHVlcHJpbnQucm91dGUoJy9wb2xsLzxpbnQ6dHJhbnNfaWQ+JywgbWV0aG9k cz1bIkdFVCJdLCBlbmRwb2ludD0ncG9sbCcpCiBAbG9naW5fcmVxdWlyZWQKQEAgLTUzOSwxMiAr NTAwLDIxIEBAIGRlZiBwb2xsKHRyYW5zX2lkKToKICAgICAiIiIKICAgICByZXN1bHQgPSBOb25l CiAgICAgcm93c19hZmZlY3RlZCA9IDAKKyAgICByb3dzX2ZldGNoZWRfZnJvbSA9IDAKKyAgICBy b3dzX2ZldGNoZWRfdG8gPSAwCisgICAgaGFzX21vcmVfcm93cyA9IEZhbHNlCiAgICAgYWRkaXRp b25hbF9yZXN1bHQgPSBbXQorICAgIGNvbHVtbnMgPSBkaWN0KCkKKyAgICBjb2x1bW5zX2luZm8g PSBOb25lCisgICAgcHJpbWFyeV9rZXlzID0gTm9uZQorICAgIHR5cGVzID0ge30KKyAgICBjbGll bnRfcHJpbWFyeV9rZXkgPSBOb25lCisgICAgcnNldCA9IE5vbmUKIAogICAgICMgQ2hlY2sgdGhl IHRyYW5zYWN0aW9uIGFuZCBjb25uZWN0aW9uIHN0YXR1cwogICAgIHN0YXR1cywgZXJyb3JfbXNn LCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVz KHRyYW5zX2lkKQogICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBhbmQgc2Vzc2lv bl9vYmogaXMgbm90IE5vbmU6Ci0gICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29ubi5wb2xsKGZv cm1hdHRlZF9leGNlcHRpb25fbXNnPVRydWUpCisgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gY29u bi5wb2xsKGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPVRydWUsIG5vX3Jlc3VsdD1UcnVlKQogICAg ICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihyZXN1bHQpCiAgICAgICAgIGVsaWYgc3RhdHVzID09IEFTWU5DX09LOgpAQCAtNTU5LDYg KzUyOSw4MCBAQCBkZWYgcG9sbCh0cmFuc19pZCk6CiAgICAgICAgICAgICAgICAgaWYgKHRyYW5z X3N0YXR1cyA9PSBUWF9TVEFUVVNfSU5FUlJPUiBhbmQKICAgICAgICAgICAgICAgICAgICAgICAg IHRyYW5zX29iai5hdXRvX3JvbGxiYWNrKToKICAgICAgICAgICAgICAgICAgICAgY29ubi5leGVj dXRlX3ZvaWQoIlJPTExCQUNLOyIpCisKKyAgICAgICAgICAgIHN0LCByZXN1bHQgPSBjb25uLmFz eW5jX2ZldGNobWFueV8yZGFycmF5KE9OX0RFTUFORF9SRUNPUkRfQ09VTlQpCisgICAgICAgICAg ICBpZiBzdDoKKyAgICAgICAgICAgICAgICBpZiAncHJpbWFyeV9rZXlzJyBpbiBzZXNzaW9uX29i ajoKKyAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzID0gc2Vzc2lvbl9vYmpbJ3ByaW1h cnlfa2V5cyddCisKKyAgICAgICAgICAgICAgICAjIEZldGNoIGNvbHVtbiBpbmZvcm1hdGlvbgor ICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mbyA9IGNvbm4uZ2V0X2NvbHVtbl9pbmZvKCkKKyAg ICAgICAgICAgICAgICBjbGllbnRfcHJpbWFyeV9rZXkgPSBnZW5lcmF0ZV9jbGllbnRfcHJpbWFy eV9rZXlfbmFtZSgKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uc19pbmZvCisgICAgICAgICAg ICAgICAgKQorICAgICAgICAgICAgICAgIHNlc3Npb25fb2JqWydjbGllbnRfcHJpbWFyeV9rZXkn XSA9IGNsaWVudF9wcmltYXJ5X2tleQorCisgICAgICAgICAgICAgICAgaWYgY29sdW1uc19pbmZv IGlzIG5vdCBOb25lOgorCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfb2JqID0gcGlja2xl LmxvYWRzKHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddKQorICAgICAgICAgICAgICAgICAgICBp ZiBoYXNhdHRyKGNvbW1hbmRfb2JqLCAnb2JqX2lkJyk6CisgICAgICAgICAgICAgICAgICAgICAg ICAjIEdldCB0aGUgdGVtcGxhdGUgcGF0aCBmb3IgdGhlIGNvbHVtbgorICAgICAgICAgICAgICAg ICAgICAgICAgdGVtcGxhdGVfcGF0aCA9ICdjb2x1bW4vc3FsLyN7MH0jJy5mb3JtYXQoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5tYW5hZ2VyLnZlcnNpb24KKyAgICAgICAgICAg ICAgICAgICAgICAgICkKKworICAgICAgICAgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9kZXMuc3FsJ10pLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1jb21tYW5kX29iai5vYmpf aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAjIHJvd3Mgd2l0aCBhdHRyaWJ1dGUgbm90X251 bGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHN0LCByc2V0ID0gY29ubi5leGVjdXRlXzJk YXJyYXkoU1FMKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbHN0OgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9cnNldCkKKworICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBjb2wgaW4gZW51bWVyYXRl KGNvbHVtbnNfaW5mbyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZSA9IGRpY3Qo KQorICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVbJ3R5cGVfY29kZSddID0gY29sWyd0 eXBlX2NvZGUnXQorICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVbJ3R5cGVfbmFtZSdd ID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1tjb2xbJ25hbWUnXV0gPSBj b2xfdHlwZQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByc2V0OgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbF90eXBlWydub3RfbnVsbCddID0gY29sWydub3RfbnVsbCddID0g XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc2V0Wydyb3dzJ11ba2V5XVsnbm90 X251bGwnXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVbJ2hhc19kZWZh dWx0X3ZhbCddID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xbJ2hhc19k ZWZhdWx0X3ZhbCddID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc2V0Wydy b3dzJ11ba2V5XVsnaGFzX2RlZmF1bHRfdmFsJ10KKworICAgICAgICAgICAgICAgIGlmIGNvbHVt bnM6CisgICAgICAgICAgICAgICAgICAgIHN0LCB0eXBlcyA9IGZldGNoX3BnX3R5cGVzKGNvbHVt bnMsIHRyYW5zX29iaikKKworICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3Q6CisgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKHR5cGVzKQorCisg ICAgICAgICAgICAgICAgICAgIGZvciBjb2xfaW5mbyBpbiBjb2x1bW5zLnZhbHVlcygpOgorICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbF90eXBlIGluIHR5cGVzOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIGNvbF90eXBlWydvaWQnXSA9PSBjb2xfaW5mb1sndHlwZV9jb2Rl J106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF9pbmZvWyd0eXBlX25hbWUn XSA9IGNvbF90eXBlWyd0eXBuYW1lJ10KKworICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX29i alsnY29sdW1uc19pbmZvJ10gPSBjb2x1bW5zCisgICAgICAgICAgICAgICAgIyBzdGF0dXMgb2Yg YXN5bmNfZmV0Y2htYW55XzJkYXJyYXkgaXMgVHJ1ZSBhbmQgcmVzdWx0IGlzIG5vbmUKKyAgICAg ICAgICAgICAgICAjIG1lYW5zIG5vdGhpbmcgdG8gZmV0Y2gKKyAgICAgICAgICAgICAgICBpZiBy ZXN1bHQgYW5kIHJvd3NfYWZmZWN0ZWQgPiAtMToKKyAgICAgICAgICAgICAgICAgICAgcmVzX2xl biA9IGxlbihyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc19sZW4gPT0gT05fREVN QU5EX1JFQ09SRF9DT1VOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19tb3JlX3Jvd3Mg PSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzX2xlbiA+IDA6CisgICAgICAgICAg ICAgICAgICAgICAgICByb3dzX2ZldGNoZWRfZnJvbSA9IHRyYW5zX29iai5nZXRfZmV0Y2hlZF9y b3dfY250KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zX29iai51cGRhdGVfZmV0Y2hl ZF9yb3dfY250KHJvd3NfZmV0Y2hlZF9mcm9tICsgcmVzX2xlbikKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJvd3NfZmV0Y2hlZF9mcm9tICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJv d3NfZmV0Y2hlZF90byA9IHRyYW5zX29iai5nZXRfZmV0Y2hlZF9yb3dfY250KCkKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddID0gcGlja2xlLmR1bXBz KHRyYW5zX29iaiwgLTEpCisKKyAgICAgICAgICAgICAgICAjIEFzIHdlIGNoYW5nZWQgdGhlIHRy YW5zYWN0aW9uIG9iamVjdCB3ZSBuZWVkIHRvCisgICAgICAgICAgICAgICAgIyByZXN0b3JlIGl0 IGFuZCB1cGRhdGUgdGhlIHNlc3Npb24gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgdXBkYXRl X3Nlc3Npb25fZ3JpZF90cmFuc2FjdGlvbih0cmFuc19pZCwgc2Vzc2lvbl9vYmopCisKICAgICAg ICAgZWxpZiBzdGF0dXMgPT0gQVNZTkNfRVhFQ1VUSU9OX0FCT1JURUQ6CiAgICAgICAgICAgICBz dGF0dXMgPSAnQ2FuY2VsJwogICAgICAgICBlbHNlOgpAQCAtNTk5LDUzICs2NDMsMTIzIEBAIGRl ZiBwb2xsKHRyYW5zX2lkKToKICAgICAgICAgZGF0YT17CiAgICAgICAgICAgICAnc3RhdHVzJzog c3RhdHVzLCAncmVzdWx0JzogcmVzdWx0LAogICAgICAgICAgICAgJ3Jvd3NfYWZmZWN0ZWQnOiBy b3dzX2FmZmVjdGVkLAotICAgICAgICAgICAgJ2FkZGl0aW9uYWxfbWVzc2FnZXMnOiBhZGRpdGlv bmFsX21lc3NhZ2VzCisgICAgICAgICAgICAncm93c19mZXRjaGVkX2Zyb20nOiByb3dzX2ZldGNo ZWRfZnJvbSwKKyAgICAgICAgICAgICdyb3dzX2ZldGNoZWRfdG8nOiByb3dzX2ZldGNoZWRfdG8s CisgICAgICAgICAgICAnYWRkaXRpb25hbF9tZXNzYWdlcyc6IGFkZGl0aW9uYWxfbWVzc2FnZXMs CisgICAgICAgICAgICAnaGFzX21vcmVfcm93cyc6IGhhc19tb3JlX3Jvd3MsCisgICAgICAgICAg ICAnY29saW5mbyc6IGNvbHVtbnNfaW5mbywKKyAgICAgICAgICAgICdwcmltYXJ5X2tleXMnOiBw cmltYXJ5X2tleXMsCisgICAgICAgICAgICAndHlwZXMnOiB0eXBlcywKKyAgICAgICAgICAgICdj bGllbnRfcHJpbWFyeV9rZXknOiBjbGllbnRfcHJpbWFyeV9rZXkKICAgICAgICAgfQogICAgICkK IAogCi1AYmx1ZXByaW50LnJvdXRlKAotICAgICcvZmV0Y2gvdHlwZXMvPGludDp0cmFuc19pZD4n LCBtZXRob2RzPVsiR0VUIl0sIGVuZHBvaW50PSdmZXRjaF90eXBlcycKLSkKK0BibHVlcHJpbnQu cm91dGUoJy9mZXRjaC88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJHRVQiXSwgZW5kcG9pbnQ9 J2ZldGNoJykKK0BibHVlcHJpbnQucm91dGUoJy9mZXRjaC88aW50OnRyYW5zX2lkPi88aW50OmZl dGNoX2FsbD4nLCBtZXRob2RzPVsiR0VUIl0sIGVuZHBvaW50PSdmZXRjaF9hbGwnKQogQGxvZ2lu X3JlcXVpcmVkCi1kZWYgZmV0Y2hfcGdfdHlwZXModHJhbnNfaWQpOgorZGVmIGZldGNoKHRyYW5z X2lkLCBmZXRjaF9hbGw9Tm9uZSk6CisgICAgcmVzdWx0ID0gTm9uZQorICAgIGhhc19tb3JlX3Jv d3MgPSBGYWxzZQorICAgIHJvd3NfZmV0Y2hlZF9mcm9tID0gMAorICAgIHJvd3NfZmV0Y2hlZF90 byA9IDAKKyAgICBmZXRjaF9yb3dfY250ID0gLTEgaWYgZmV0Y2hfYWxsID09IDEgZWxzZSBPTl9E RU1BTkRfUkVDT1JEX0NPVU5UCisKKyAgICAjIENoZWNrIHRoZSB0cmFuc2FjdGlvbiBhbmQgY29u bmVjdGlvbiBzdGF0dXMKKyAgICBzdGF0dXMsIGVycm9yX21zZywgY29ubiwgdHJhbnNfb2JqLCBz ZXNzaW9uX29iaiA9IGNoZWNrX3RyYW5zYWN0aW9uX3N0YXR1cyh0cmFuc19pZCkKKyAgICBpZiBz dGF0dXMgYW5kIGNvbm4gaXMgbm90IE5vbmUgYW5kIHNlc3Npb25fb2JqIGlzIG5vdCBOb25lOgor ICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IGNvbm4uYXN5bmNfZmV0Y2htYW55XzJkYXJyYXkoZmV0 Y2hfcm93X2NudCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHN0YXR1cyA9 ICdFcnJvcicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1cyA9ICdTdWNjZXNzJwor ICAgICAgICAgICAgcmVzX2xlbiA9IGxlbihyZXN1bHQpCisgICAgICAgICAgICBpZiBmZXRjaF9y b3dfY250ICE9IC0xIGFuZCByZXNfbGVuID09IE9OX0RFTUFORF9SRUNPUkRfQ09VTlQ6CisgICAg ICAgICAgICAgICAgaGFzX21vcmVfcm93cyA9IFRydWUKKworICAgICAgICAgICAgaWYgcmVzX2xl bjoKKyAgICAgICAgICAgICAgICByb3dzX2ZldGNoZWRfZnJvbSA9IHRyYW5zX29iai5nZXRfZmV0 Y2hlZF9yb3dfY250KCkKKyAgICAgICAgICAgICAgICB0cmFuc19vYmoudXBkYXRlX2ZldGNoZWRf cm93X2NudChyb3dzX2ZldGNoZWRfZnJvbSArIHJlc19sZW4pCisgICAgICAgICAgICAgICAgcm93 c19mZXRjaGVkX2Zyb20gKz0gMQorICAgICAgICAgICAgICAgIHJvd3NfZmV0Y2hlZF90byA9IHRy YW5zX29iai5nZXRfZmV0Y2hlZF9yb3dfY250KCkKKyAgICAgICAgICAgICAgICBzZXNzaW9uX29i alsnY29tbWFuZF9vYmonXSA9IHBpY2tsZS5kdW1wcyh0cmFuc19vYmosIC0xKQorICAgICAgICAg ICAgICAgIHVwZGF0ZV9zZXNzaW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNlc3Npb25f b2JqKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9ICdOb3RDb25uZWN0ZWQnCisgICAgICAg IHJlc3VsdCA9IGVycm9yX21zZworCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAg ICAgICAgZGF0YT17CisgICAgICAgICAgICAnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVz dWx0LAorICAgICAgICAgICAgJ2hhc19tb3JlX3Jvd3MnOiBoYXNfbW9yZV9yb3dzLAorICAgICAg ICAgICAgJ3Jvd3NfZmV0Y2hlZF9mcm9tJzogcm93c19mZXRjaGVkX2Zyb20sCisgICAgICAgICAg ICAncm93c19mZXRjaGVkX3RvJzogcm93c19mZXRjaGVkX3RvCisgICAgICAgIH0KKyAgICApCisK KworZGVmIGZldGNoX3BnX3R5cGVzKGNvbHVtbnNfaW5mbywgdHJhbnNfb2JqKToKICAgICAiIiIK ICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZldGNoIHRoZSBwZyB0eXBlcywgd2hpY2ggaXMg cmVxdWlyZWQKICAgICB0byBtYXAgdGhlIGRhdGEgdHlwZSBjb21lcyBhcyBhIHJlc3VsdCBvZiB0 aGUgcXVlcnkuCiAKICAgICBBcmdzOgotICAgICAgICB0cmFuc19pZDogdW5pcXVlIHRyYW5zYWN0 aW9uIGlkCisgICAgICAgIGNvbHVtbnNfaW5mbzoKICAgICAiIiIKIAotICAgICMgQ2hlY2sgdGhl IHRyYW5zYWN0aW9uIGFuZCBjb25uZWN0aW9uIHN0YXR1cwotICAgIHN0YXR1cywgZXJyb3JfbXNn LCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVz KHRyYW5zX2lkKQotICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBcCi0gICAgICAg ICAgICBhbmQgdHJhbnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9u ZToKLSAgICAgICAgcmVzID0ge30KLSAgICAgICAgaWYgJ2NvbHVtbnNfaW5mbycgaW4gc2Vzc2lv bl9vYmogXAotICAgICAgICAgICAgICAgIGFuZCBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10g aXMgbm90IE5vbmU6CisgICAgIyBnZXQgdGhlIGRlZmF1bHQgY29ubmVjdGlvbiBhcyBjdXJyZW50 IGNvbm5lY3Rpb24gYXR0YWNoZWQgdG8gdHJhbnMgaWQKKyAgICAjIGhvbGRzIHRoZSBjdXJzb3Ig d2hpY2ggaGFzIHF1ZXJ5IHJlc3VsdCBzbyB3ZSBjYW5ub3QgdXNlIHRoYXQgY29ubmVjdGlvbgor ICAgICMgdG8gZXhlY3V0ZSBhbm90aGVyIHF1ZXJ5IG90aGVyd2lzZSB3ZSdsbCBsb3NlIHF1ZXJ5 IHJlc3VsdC4KKworICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5j b25uZWN0aW9uX21hbmFnZXIodHJhbnNfb2JqLnNpZCkKKyAgICBkZWZhdWx0X2Nvbm4gPSBtYW5h Z2VyLmNvbm5lY3Rpb24oZGlkPXRyYW5zX29iai5kaWQpCiAKLSAgICAgICAgICAgIG9pZHMgPSBb c2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddW2NvbF1bJ3R5cGVfY29kZSddIGZvciBjb2wgaW4g c2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddXQorICAgICMgQ29ubmVjdCB0byB0aGUgU2VydmVy IGlmIG5vdCBjb25uZWN0ZWQuCisgICAgcmVzID0gW10KKyAgICBpZiBub3QgZGVmYXVsdF9jb25u LmNvbm5lY3RlZCgpOgorICAgICAgICBzdGF0dXMsIG1zZyA9IGRlZmF1bHRfY29ubi5jb25uZWN0 KCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIG1z ZwogCi0gICAgICAgICAgICBpZiBvaWRzOgotICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0g Y29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgICAgIHUiIiJTRUxFQ1Qgb2lkLCBm b3JtYXRfdHlwZShvaWQsbnVsbCkgYXMgdHlwbmFtZSBGUk9NIHBnX3R5cGUgV0hFUkUgb2lkIElO ICVzIE9SREVSIEJZIG9pZDsKKyAgICBvaWRzID0gW2NvbHVtbnNfaW5mb1tjb2xdWyd0eXBlX2Nv ZGUnXSBmb3IgY29sIGluIGNvbHVtbnNfaW5mb10KKworICAgIGlmIG9pZHM6CisgICAgICAgIHN0 YXR1cywgcmVzID0gZGVmYXVsdF9jb25uLmV4ZWN1dGVfZGljdCgKKyAgICAgICAgICAgIHUiIiJT RUxFQ1Qgb2lkLCBmb3JtYXRfdHlwZShvaWQsbnVsbCkgYXMgdHlwbmFtZSBGUk9NIHBnX3R5cGUg V0hFUkUgb2lkIElOICVzIE9SREVSIEJZIG9pZDsKICIiIiwgW3R1cGxlKG9pZHMpXSkKIAotICAg ICAgICAgICAgICAgIGlmIHN0YXR1czoKLSAgICAgICAgICAgICAgICAgICAgIyBpdGVyYXRlIHRo cm91Z2ggcGdfdHlwZXMgYW5kIHVwZGF0ZSB0aGUgdHlwZSBuYW1lIGluIHNlc3Npb24gb2JqZWN0 Ci0gICAgICAgICAgICAgICAgICAgIGZvciByZWNvcmQgaW4gcmVzWydyb3dzJ106Ci0gICAgICAg ICAgICAgICAgICAgICAgICBmb3IgY29sIGluIHNlc3Npb25fb2JqWydjb2x1bW5zX2luZm8nXToK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX29iaiA9IHNlc3Npb25fb2JqWydjb2x1 bW5zX2luZm8nXVtjb2xdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZV9vYmpb J3R5cGVfY29kZSddID09IHJlY29yZFsnb2lkJ106Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVfb2JqWyd0eXBlX25hbWUnXSA9IHJlY29yZFsndHlwbmFtZSddCisgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIHJlcwogCi0gICAgICAg ICAgICAgICAgICAgIHVwZGF0ZV9zZXNzaW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNl c3Npb25fb2JqKQorICAgICAgICByZXR1cm4gc3RhdHVzLCByZXNbJ3Jvd3MnXQogICAgIGVsc2U6 Ci0gICAgICAgIHN0YXR1cyA9IEZhbHNlCi0gICAgICAgIHJlcyA9IGVycm9yX21zZwotCi0gICAg cmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0 JzogcmVzfSkKKyAgICAgICAgcmV0dXJuIFRydWUsIFtdCisKKworZGVmIGdlbmVyYXRlX2NsaWVu dF9wcmltYXJ5X2tleV9uYW1lKGNvbHVtbnNfaW5mbyk6CisgICAgdGVtcF9rZXkgPSAnX190ZW1w X1BLJworICAgIGlmIG5vdCBjb2x1bW5zX2luZm86CisgICAgICAgIHJldHVybiB0ZW1wX2tleQor CisgICAgaW5pdGlhbF90ZW1wX2tleV9sZW4gPSBsZW4odGVtcF9rZXkpCisgICAgZHVwbGljYXRl ID0gRmFsc2UKKyAgICBzdWZmaXggPSAxCisgICAgd2hpbGUgMToKKyAgICAgICAgZm9yIGNvbCBp biBjb2x1bW5zX2luZm86CisgICAgICAgICAgICBpZiBjb2xbJ25hbWUnXSA9PSB0ZW1wX2tleToK KyAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsK KyAgICAgICAgaWYgZHVwbGljYXRlOgorICAgICAgICAgICAgaWYgaW5pdGlhbF90ZW1wX2tleV9s ZW4gPT0gbGVuKHRlbXBfa2V5KToKKyAgICAgICAgICAgICAgICB0ZW1wX2tleSArPSBzdHIoc3Vm Zml4KQorICAgICAgICAgICAgICAgIHN1ZmZpeCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAg ICAgICAgICAgICAgIHRlbXBfa2V5ID0gdGVtcF9rZXlbOi0xXSArIHN0cihzdWZmaXgpCisgICAg ICAgICAgICAgICAgc3VmZml4ICs9IDEKKyAgICAgICAgICAgIGR1cGxpY2F0ZSA9IEZhbHNlCisg ICAgICAgIGVsc2U6CisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0ZW1wX2tleQogCiAK IEBibHVlcHJpbnQucm91dGUoCkBAIC02NTksNyArNzczLDYgQEAgZGVmIHNhdmUodHJhbnNfaWQp OgogICAgIEFyZ3M6CiAgICAgICAgIHRyYW5zX2lkOiB1bmlxdWUgdHJhbnNhY3Rpb24gaWQKICAg ICAiIiIKLQogICAgIGlmIHJlcXVlc3QuZGF0YToKICAgICAgICAgY2hhbmdlZF9kYXRhID0ganNv bi5sb2FkcyhyZXF1ZXN0LmRhdGEsIGVuY29kaW5nPSd1dGYtOCcpCiAgICAgZWxzZToKQEAgLTY2 OSw3ICs3ODIsNiBAQCBkZWYgc2F2ZSh0cmFuc19pZCk6CiAgICAgc3RhdHVzLCBlcnJvcl9tc2cs IGNvbm4sIHRyYW5zX29iaiwgc2Vzc2lvbl9vYmogPSBjaGVja190cmFuc2FjdGlvbl9zdGF0dXMo dHJhbnNfaWQpCiAgICAgaWYgc3RhdHVzIGFuZCBjb25uIGlzIG5vdCBOb25lIFwKICAgICAgICAg ICAgIGFuZCB0cmFuc19vYmogaXMgbm90IE5vbmUgYW5kIHNlc3Npb25fb2JqIGlzIG5vdCBOb25l OgotICAgICAgICBzZXRhdHRyKHRyYW5zX29iaiwgJ2NvbHVtbnNfaW5mbycsIHNlc3Npb25fb2Jq Wydjb2x1bW5zX2luZm8nXSkKIAogICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHByaW1hcnkga2V5 IGZvdW5kIHRoZW4gcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uLgogICAgICAgICBpZiBsZW4oc2Vz c2lvbl9vYmpbJ3ByaW1hcnlfa2V5cyddKSA8PSAwIG9yIGxlbihjaGFuZ2VkX2RhdGEpIDw9IDA6 CkBAIC02ODAsNyArNzkyLDIyIEBAIGRlZiBzYXZlKHRyYW5zX2lkKToKICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICApCiAKLSAgICAgICAgc3RhdHVzLCByZXMsIHF1ZXJ5X3JlcywgX3Jv d2lkID0gdHJhbnNfb2JqLnNhdmUoY2hhbmdlZF9kYXRhKQorICAgICAgICBtYW5hZ2VyID0gZ2V0 X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKHRyYW5zX29iai5z aWQpCisgICAgICAgIGRlZmF1bHRfY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9dHJhbnNf b2JqLmRpZCkKKworICAgICAgICAjIENvbm5lY3QgdG8gdGhlIFNlcnZlciBpZiBub3QgY29ubmVj dGVkLgorICAgICAgICBpZiBub3QgZGVmYXVsdF9jb25uLmNvbm5lY3RlZCgpOgorICAgICAgICAg ICAgc3RhdHVzLCBtc2cgPSBkZWZhdWx0X2Nvbm4uY29ubmVjdCgpCisgICAgICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisg ICAgICAgICAgICAgICAgICAgIGRhdGE9eydzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiB1Int9 Ii5mb3JtYXQobXNnKX0KKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc3RhdHVzLCByZXMs IHF1ZXJ5X3JlcywgX3Jvd2lkID0gdHJhbnNfb2JqLnNhdmUoCisgICAgICAgICAgICBjaGFuZ2Vk X2RhdGEsCisgICAgICAgICAgICBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10sCisgICAgICAg ICAgICBzZXNzaW9uX29ialsnY2xpZW50X3ByaW1hcnlfa2V5J10sCisgICAgICAgICAgICBkZWZh dWx0X2Nvbm4pCiAgICAgZWxzZToKICAgICAgICAgc3RhdHVzID0gRmFsc2UKICAgICAgICAgcmVz ID0gZXJyb3JfbXNnCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29t bWFuZC5weSBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9jb21tYW5kLnB5CmluZGV4IGI3 ZDhhNzguLjNiN2VmZDAgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9j b21tYW5kLnB5CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9jb21tYW5kLnB5CkBA IC0yNTgsNyArMjU4LDIxIEBAIGNsYXNzIFNRTEZpbHRlcihvYmplY3QpOgogICAgICAgICByZXR1 cm4gc3RhdHVzLCByZXN1bHQKIAogCi1jbGFzcyBHcmlkQ29tbWFuZChCYXNlQ29tbWFuZCwgU1FM RmlsdGVyKToKK2NsYXNzIEZldGNoZWRSb3dUcmFja2VyKG9iamVjdCk6CisgICAgIiIiCisgICAg S2VlcHMgdHJhY2sgb2YgZmV0Y2hlZCByb3cgY291bnQuCisgICAgIiIiCisgICAgZGVmIF9faW5p dF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mZXRjaGVkX3Jvd3MgPSAwCisKKyAg ICBkZWYgZ2V0X2ZldGNoZWRfcm93X2NudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmV0 Y2hlZF9yb3dzCisKKyAgICBkZWYgdXBkYXRlX2ZldGNoZWRfcm93X2NudChzZWxmLCByb3dzX2Nu dCk6CisgICAgICAgIHNlbGYuZmV0Y2hlZF9yb3dzID0gcm93c19jbnQKKworCitjbGFzcyBHcmlk Q29tbWFuZChCYXNlQ29tbWFuZCwgU1FMRmlsdGVyLCBGZXRjaGVkUm93VHJhY2tlcik6CiAgICAg IiIiCiAgICAgY2xhc3MgR3JpZENvbW1hbmQob2JqZWN0KQogCkBAIC0yOTAsNiArMzA0LDcgQEAg Y2xhc3MgR3JpZENvbW1hbmQoQmFzZUNvbW1hbmQsIFNRTEZpbHRlcik6CiAgICAgICAgICIiIgog ICAgICAgICBCYXNlQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKICAgICAgICAgU1FM RmlsdGVyLl9faW5pdF9fKHNlbGYsICoqa3dhcmdzKQorICAgICAgICBGZXRjaGVkUm93VHJhY2tl ci5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKIAogICAgICAgICAjIFNhdmUgdGhlIGNvbm5lY3Rp b24gaWQsIGNvbW1hbmQgdHlwZQogICAgICAgICBzZWxmLmNvbm5faWQgPSBrd2FyZ3NbJ2Nvbm5f aWQnXSBpZiAnY29ubl9pZCcgaW4ga3dhcmdzIGVsc2UgTm9uZQpAQCAtMjk5LDEwICszMTQsMTAg QEAgY2xhc3MgR3JpZENvbW1hbmQoQmFzZUNvbW1hbmQsIFNRTEZpbHRlcik6CiAgICAgICAgIGlm IHNlbGYuY21kX3R5cGUgPT0gVklFV19GSVJTVF8xMDBfUk9XUyBvciBzZWxmLmNtZF90eXBlID09 IFZJRVdfTEFTVF8xMDBfUk9XUzoKICAgICAgICAgICAgIHNlbGYubGltaXQgPSAxMDAKIAotICAg IGRlZiBnZXRfcHJpbWFyeV9rZXlzKHNlbGYpOgorICAgIGRlZiBnZXRfcHJpbWFyeV9rZXlzKHNl bGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBOb25lLCBOb25lCiAKLSAgICBk ZWYgc2F2ZShzZWxmLCBjaGFuZ2VkX2RhdGEpOgorICAgIGRlZiBzYXZlKHNlbGYsIGNoYW5nZWRf ZGF0YSwgZGVmYXVsdF9jb25uPU5vbmUpOgogICAgICAgICByZXR1cm4gZm9yYmlkZGVuKGVycm1z Zz1nZXR0ZXh0KCJEYXRhIGNhbm5vdCBiZSBzYXZlZCBmb3IgdGhlIGN1cnJlbnQgb2JqZWN0LiIp KQogCiAgICAgZGVmIGdldF9saW1pdChzZWxmKToKQEAgLTM0MCwxNCArMzU1LDE0IEBAIGNsYXNz IFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6CiAgICAgICAgICMgY2FsbCBiYXNlIGNsYXNzIGlu aXQgdG8gZmV0Y2ggdGhlIHRhYmxlIG5hbWUKICAgICAgICAgc3VwZXIoVGFibGVDb21tYW5kLCBz ZWxmKS5fX2luaXRfXygqKmt3YXJncykKIAotICAgIGRlZiBnZXRfc3FsKHNlbGYpOgorICAgIGRl ZiBnZXRfc3FsKHNlbGYsIGRlZmF1bHRfY29ubj1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAg IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIGEgcHJvcGVyIFNRTCBxdWVyeQogICAgICAg ICB0byBmZXRjaCB0aGUgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCB0YWJsZQogICAgICAgICAiIiIK IAogICAgICAgICAjIEZldGNoIHRoZSBwcmltYXJ5IGtleXMgZm9yIHRoZSB0YWJsZQotICAgICAg ICBwa19uYW1lcywgcHJpbWFyeV9rZXlzID0gc2VsZi5nZXRfcHJpbWFyeV9rZXlzKCkKKyAgICAg ICAgcGtfbmFtZXMsIHByaW1hcnlfa2V5cyA9IHNlbGYuZ2V0X3ByaW1hcnlfa2V5cyhkZWZhdWx0 X2Nvbm4pCiAKICAgICAgICAgc3FsX2ZpbHRlciA9IHNlbGYuZ2V0X2ZpbHRlcigpCiAKQEAgLTM2 MiwxMyArMzc3LDE2IEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6CiAKICAgICAg ICAgcmV0dXJuIHNxbAogCi0gICAgZGVmIGdldF9wcmltYXJ5X2tleXMoc2VsZik6CisgICAgZGVm IGdldF9wcmltYXJ5X2tleXMoc2VsZiwgZGVmYXVsdF9jb25uPU5vbmUpOgogICAgICAgICAiIiIK ICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZldGNoIHRoZSBwcmltYXJ5IGtleSBj b2x1bW5zLgogICAgICAgICAiIiIKICAgICAgICAgZHJpdmVyID0gZ2V0X2RyaXZlcihQR19ERUZB VUxUX0RSSVZFUikKLSAgICAgICAgbWFuYWdlciA9IGRyaXZlci5jb25uZWN0aW9uX21hbmFnZXIo c2VsZi5zaWQpCi0gICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXNlbGYuZGlk LCBjb25uX2lkPXNlbGYuY29ubl9pZCkKKyAgICAgICAgaWYgZGVmYXVsdF9jb25uIGlzIE5vbmU6 CisgICAgICAgICAgICBtYW5hZ2VyID0gZHJpdmVyLmNvbm5lY3Rpb25fbWFuYWdlcihzZWxmLnNp ZCkKKyAgICAgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXNlbGYuZGlkLCBj b25uX2lkPXNlbGYuY29ubl9pZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm4gPSBk ZWZhdWx0X2Nvbm4KIAogICAgICAgICBwa19uYW1lcyA9ICcnCiAgICAgICAgIHByaW1hcnlfa2V5 cyA9IE9yZGVyZWREaWN0KCkKQEAgLTQwMCw3ICs0MTgsMTEgQEAgY2xhc3MgVGFibGVDb21tYW5k KEdyaWRDb21tYW5kKToKICAgICBkZWYgY2FuX2ZpbHRlcihzZWxmKToKICAgICAgICAgcmV0dXJu IFRydWUKIAotICAgIGRlZiBzYXZlKHNlbGYsIGNoYW5nZWRfZGF0YSk6CisgICAgZGVmIHNhdmUo c2VsZiwKKyAgICAgICAgICAgICBjaGFuZ2VkX2RhdGEsCisgICAgICAgICAgICAgY29sdW1uc19p bmZvLAorICAgICAgICAgICAgIGNsaWVudF9wcmltYXJ5X2tleT0nX190ZW1wX1BLJywKKyAgICAg ICAgICAgICBkZWZhdWx0X2Nvbm49Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIGZ1 bmN0aW9uIGlzIHVzZWQgdG8gc2F2ZSB0aGUgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZS4KICAgICAg ICAgRGVwZW5kaW5nIG9uIGNvbmRpdGlvbiBpdCB3aWxsIGVpdGhlciB1cGRhdGUgb3IgaW5zZXJ0 IHRoZQpAQCAtNDA4LDEwICs0MzAsMTYgQEAgY2xhc3MgVGFibGVDb21tYW5kKEdyaWRDb21tYW5k KToKIAogICAgICAgICBBcmdzOgogICAgICAgICAgICAgY2hhbmdlZF9kYXRhOiBDb250YWlucyBk YXRhIHRvIGJlIHNhdmVkCisgICAgICAgICAgICBjb2x1bW5zX2luZm86CisgICAgICAgICAgICBk ZWZhdWx0X2Nvbm46CisgICAgICAgICAgICBjbGllbnRfcHJpbWFyeV9rZXk6CiAgICAgICAgICIi IgotCi0gICAgICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25u ZWN0aW9uX21hbmFnZXIoc2VsZi5zaWQpCi0gICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rp b24oZGlkPXNlbGYuZGlkLCBjb25uX2lkPXNlbGYuY29ubl9pZCkKKyAgICAgICAgZHJpdmVyID0g Z2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikKKyAgICAgICAgaWYgZGVmYXVsdF9jb25uIGlz IE5vbmU6CisgICAgICAgICAgICBtYW5hZ2VyID0gZHJpdmVyLmNvbm5lY3Rpb25fbWFuYWdlcihz ZWxmLnNpZCkKKyAgICAgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXNlbGYu ZGlkLCBjb25uX2lkPXNlbGYuY29ubl9pZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNv bm4gPSBkZWZhdWx0X2Nvbm4KIAogICAgICAgICBzdGF0dXMgPSBGYWxzZQogICAgICAgICByZXMg PSBOb25lCkBAIC00MjEsMTQgKzQ0OSw2IEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFu ZCk6CiAgICAgICAgIGxpc3Rfb2Zfc3FsID0gW10KICAgICAgICAgX3Jvd2lkID0gTm9uZQogCi0g ICAgICAgICMgUmVwbGFjZSBjb2x1bW4gcG9zaXRpb25zIHdpdGggbmFtZXMKLSAgICAgICAgZGVm IHNldF9jb2x1bW5fbmFtZXMoZGF0YSk6Ci0gICAgICAgICAgICBuZXdfZGF0YSA9IHt9Ci0gICAg ICAgICAgICBmb3Iga2V5IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgbmV3X2RhdGFbY2hhbmdl ZF9kYXRhWydjb2x1bW5zJ11baW50KGtleSldWyduYW1lJ11dID0gZGF0YVtrZXldCi0KLSAgICAg ICAgICAgIHJldHVybiBuZXdfZGF0YQotCiAgICAgICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CiAK ICAgICAgICAgICAgICMgU3RhcnQgdGhlIHRyYW5zYWN0aW9uCkBAIC00NDMsNiArNDYzLDIwIEBA IGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6CiAgICAgICAgICAgICAgICAgaWYgbGVu KGNoYW5nZWRfZGF0YVtvZl90eXBlXSkgPCAxOgogICAgICAgICAgICAgICAgICAgICBjb250aW51 ZQogCisgICAgICAgICAgICAgICAgY29sdW1uX3R5cGUgPSB7fQorICAgICAgICAgICAgICAgIGZv ciBlYWNoX2NvbCBpbiBjb2x1bW5zX2luZm86CisgICAgICAgICAgICAgICAgICAgIGlmICgKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mb1tlYWNoX2NvbF1bJ25vdF9udWxsJ10g YW5kCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29sdW1uc19pbmZvW2VhY2hfY29sXVsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzX2RlZmF1bHRfdmFsJ10KKyAgICAgICAg ICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhW2VhY2hf Y29sXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90eXBlW2VhY2hfY29s XSA9XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mb1tlYWNoX2NvbF1b J3R5cGVfbmFtZSddCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg ICAgICAgICBjb2x1bW5fdHlwZVtlYWNoX2NvbF0gPSBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29sdW1uc19pbmZvW2VhY2hfY29sXVsndHlwZV9uYW1lJ10KKwogICAgICAgICAgICAg ICAgICMgRm9yIG5ld2x5IGFkZGVkIHJvd3MKICAgICAgICAgICAgICAgICBpZiBvZl90eXBlID09 ICdhZGRlZCc6CiAKQEAgLTQ1MSwzNyArNDg1LDE4IEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlk Q29tbWFuZCk6CiAgICAgICAgICAgICAgICAgICAgICMgbm9fZGVmYXVsdF92YWx1ZSwgc2V0IGNv bHVtbiB0byBibGFuaywgaW5zdGVhZAogICAgICAgICAgICAgICAgICAgICAjIG9mIG5vdCBudWxs IHdoaWNoIGlzIHNldCBieSBkZWZhdWx0LgogICAgICAgICAgICAgICAgICAgICBjb2x1bW5fZGF0 YSA9IHt9Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbl90eXBlID0ge30KICAgICAgICAgICAg ICAgICAgICAgcGtfbmFtZXMsIHByaW1hcnlfa2V5cyA9IHNlbGYuZ2V0X3ByaW1hcnlfa2V5cygp CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2hfY29sIGluIHNlbGYuY29sdW1uc19pbmZv OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuY29sdW1uc19pbmZvW2VhY2hfY29sXVsnbm90X251bGwnXSBhbmQKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5jb2x1bW5zX2luZm9bZWFjaF9jb2xdWwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzX2RlZmF1bHRfdmFsJ10KLSAgICAgICAg ICAgICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX2Rh dGFbZWFjaF9jb2xdID0gTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90 eXBlW2VhY2hfY29sXSA9XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNv bHVtbnNfaW5mb1tlYWNoX2NvbF1bJ3R5cGVfbmFtZSddCi0gICAgICAgICAgICAgICAgICAgICAg ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90eXBlW2VhY2hfY29s XSA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW5zX2luZm9b ZWFjaF9jb2xdWyd0eXBlX25hbWUnXQotCi0KICAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2hf cm93IGluIGNoYW5nZWRfZGF0YVtvZl90eXBlXToKICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGEgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydkYXRhJ10KICAgICAgICAgICAg ICAgICAgICAgICAgICMgUmVtb3ZlIG91ciB1bmlxdWUgdHJhY2tpbmcga2V5Ci0gICAgICAgICAg ICAgICAgICAgICAgICBkYXRhLnBvcCgnX190ZW1wX1BLJywgTm9uZSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGEucG9wKGNsaWVudF9wcmltYXJ5X2tleSwgTm9uZSkKICAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGEucG9wKCdpc19yb3dfY29waWVkJywgTm9uZSkKLSAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGEgPSBzZXRfY29sdW1uX25hbWVzKGRhdGEpCi0gICAgICAgICAgICAg ICAgICAgICAgICBkYXRhX3R5cGUgPSBzZXRfY29sdW1uX25hbWVzKGNoYW5nZWRfZGF0YVtvZl90 eXBlXVtlYWNoX3Jvd11bJ2RhdGFfdHlwZSddKQotICAgICAgICAgICAgICAgICAgICAgICAgbGlz dF9vZl9yb3dpZC5hcHBlbmQoZGF0YS5nZXQoJ19fdGVtcF9QSycpKQorICAgICAgICAgICAgICAg ICAgICAgICAgbGlzdF9vZl9yb3dpZC5hcHBlbmQoZGF0YS5nZXQoY2xpZW50X3ByaW1hcnlfa2V5 KSkKIAotICAgICAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgY29sdW1ucyB2YWx1ZSBhbmQg ZGF0YSB0eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHdpdGggY29sdW1ucyBoYXZpbmcg bm90X251bGw9RmFsc2UgYW5kIGhhcwotICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBkZWZh dWx0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAjIFVwZGF0ZSBjb2x1bW5zIHZhbHVl IHdpdGggY29sdW1ucyBoYXZpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbm90X251bGw9 RmFsc2UgYW5kIGhhcyBubyBkZWZhdWx0IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICBj b2x1bW5fZGF0YS51cGRhdGUoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90 eXBlLnVwZGF0ZShkYXRhX3R5cGUpCiAKICAgICAgICAgICAgICAgICAgICAgICAgIHNxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ2luc2VydC5zcWwnXSksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19iZV9z YXZlZD1jb2x1bW5fZGF0YSwKQEAgLTQ5NywxNSArNTEyLDE0IEBAIGNsYXNzIFRhYmxlQ29tbWFu ZChHcmlkQ29tbWFuZCk6CiAgICAgICAgICAgICAgICAgIyBGb3IgdXBkYXRlZCByb3dzCiAgICAg ICAgICAgICAgICAgZWxpZiBvZl90eXBlID09ICd1cGRhdGVkJzoKICAgICAgICAgICAgICAgICAg ICAgZm9yIGVhY2hfcm93IGluIGNoYW5nZWRfZGF0YVtvZl90eXBlXToKLSAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGEgPSBzZXRfY29sdW1uX25hbWVzKGNoYW5nZWRfZGF0YVtvZl90eXBlXVtl YWNoX3Jvd11bJ2RhdGEnXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrID0gc2V0X2NvbHVt bl9uYW1lcyhjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydwcmltYXJ5X2tleXMnXSkK LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZSA9IHNldF9jb2x1bW5fbmFtZXMoY2hh bmdlZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XVsnZGF0YV90eXBlJ10pCisgICAgICAgICAgICAg ICAgICAgICAgICBkYXRhID0gY2hhbmdlZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XVsnZGF0YSdd CisgICAgICAgICAgICAgICAgICAgICAgICBwayA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNo X3Jvd11bJ3ByaW1hcnlfa2V5cyddCiAgICAgICAgICAgICAgICAgICAgICAgICBzcWwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICd1cGRhdGUuc3FsJ10pLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9fYmVfc2F2 ZWQ9ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmltYXJ5X2tleXM9cGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb2JqZWN0X25hbWU9c2VsZi5vYmplY3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1zZWxmLm5zcF9uYW1lLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZT1kYXRhX3R5 cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90 eXBlPWNvbHVtbl90eXBlKQogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9vZl9zcWwuYXBw ZW5kKHNxbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfcm93aWQuYXBwZW5kKGRh dGEpCiAKQEAgLTUxOSwxOCArNTMzLDE5IEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFu ZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICByb3dzX3RvX2RlbGV0ZS5hcHBlbmQoY2hhbmdl ZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XSkKICAgICAgICAgICAgICAgICAgICAgICAgICMgRmV0 Y2ggdGhlIGtleXMgZm9yIFNRTCBnZW5lcmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICBp ZiBpc19maXJzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gY292 ZXJ0IGRpY3Rfa2V5cyB0byBub3JtYWwgbGlzdCBpbiBQeXRob24zCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBJbiBQeXRob24yLCBpdCdzIGFscmVhZHkgYSBsaXN0ICYgV2Ugd2lsbCBh bHNvIGZldGNoIGNvbHVtbiBuYW1lcyB1c2luZyBpbmRleAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGtleXMgPSBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRf ZGF0YVsnY29sdW1ucyddW2ludChrKV1bJ25hbWUnXQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIGsgaW4gbGlzdChjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9y b3ddLmtleXMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNvdmVydCBkaWN0X2tleXMgdG8gbm9ybWFsIGxp c3QgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFB5dGhvbjMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIEluIFB5dGhvbjIsIGl0J3MgYWxyZWFkeSBhIGxpc3QgJiBXZSB3 aWxsIGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZldGNoIGNvbHVtbiBuYW1l cyB1c2luZyBpbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSBsaXN0KGNo YW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd10ua2V5cygpKQorCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbm9fb2Zfa2V5cyA9IGxlbihrZXlzKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlzX2ZpcnN0ID0gRmFsc2UKICAgICAgICAgICAgICAgICAgICAgIyBNYXAgaW5kZXgg d2l0aCBjb2x1bW4gbmFtZSBmb3IgZWFjaCByb3cKICAgICAgICAgICAgICAgICAgICAgZm9yIHJv dyBpbiByb3dzX3RvX2RlbGV0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGlu IHJvdy5pdGVtcygpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2V0IHByaW1hcnkg a2V5IHdpdGggbGFiZWwgJiBkZWxldGUgaW5kZXggYmFzZWQgbWFwcGVkIGtleQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgU2V0IHByaW1hcnkga2V5IHdpdGggbGFiZWwgJiBkZWxldGUg aW5kZXggYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1hcHBlZCBrZXkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJvd1tjaGFuZ2VkX2RhdGFbJ2NvbHVtbnMnXVtpbnQoayldWyduYW1lJ11dID0gdgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgpAQCAtNTk3LDcg KzYxMiw3IEBAIGNsYXNzIFZpZXdDb21tYW5kKEdyaWRDb21tYW5kKToKICAgICAgICAgIyBjYWxs IGJhc2UgY2xhc3MgaW5pdCB0byBmZXRjaCB0aGUgdGFibGUgbmFtZQogICAgICAgICBzdXBlcihW aWV3Q29tbWFuZCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAKLSAgICBkZWYgZ2V0X3NxbChz ZWxmKToKKyAgICBkZWYgZ2V0X3NxbChzZWxmLCBkZWZhdWx0X2Nvbm49Tm9uZSk6CiAgICAgICAg ICIiIgogICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSBhIHByb3BlciBTUUwg cXVlcnkKICAgICAgICAgdG8gZmV0Y2ggdGhlIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgdmlldwpA QCAtNjUyLDcgKzY2Nyw3IEBAIGNsYXNzIEZvcmVpZ25UYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQp OgogICAgICAgICAjIGNhbGwgYmFzZSBjbGFzcyBpbml0IHRvIGZldGNoIHRoZSB0YWJsZSBuYW1l CiAgICAgICAgIHN1cGVyKEZvcmVpZ25UYWJsZUNvbW1hbmQsIHNlbGYpLl9faW5pdF9fKCoqa3dh cmdzKQogCi0gICAgZGVmIGdldF9zcWwoc2VsZik6CisgICAgZGVmIGdldF9zcWwoc2VsZiwgZGVm YXVsdF9jb25uPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNl ZCB0byBjcmVhdGUgYSBwcm9wZXIgU1FMIHF1ZXJ5CiAgICAgICAgIHRvIGZldGNoIHRoZSBkYXRh IGZvciB0aGUgc3BlY2lmaWVkIGZvcmVpZ24gdGFibGUKQEAgLTY5Nyw3ICs3MTIsNyBAQCBjbGFz cyBDYXRhbG9nQ29tbWFuZChHcmlkQ29tbWFuZCk6CiAgICAgICAgICMgY2FsbCBiYXNlIGNsYXNz IGluaXQgdG8gZmV0Y2ggdGhlIHRhYmxlIG5hbWUKICAgICAgICAgc3VwZXIoQ2F0YWxvZ0NvbW1h bmQsIHNlbGYpLl9faW5pdF9fKCoqa3dhcmdzKQogCi0gICAgZGVmIGdldF9zcWwoc2VsZik6Cisg ICAgZGVmIGdldF9zcWwoc2VsZiwgZGVmYXVsdF9jb25uPU5vbmUpOgogICAgICAgICAiIiIKICAg ICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjcmVhdGUgYSBwcm9wZXIgU1FMIHF1ZXJ5CiAg ICAgICAgIHRvIGZldGNoIHRoZSBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGNhdGFsb2cgb2JqZWN0 CkBAIC03MjIsNyArNzM3LDcgQEAgY2xhc3MgQ2F0YWxvZ0NvbW1hbmQoR3JpZENvbW1hbmQpOgog ICAgICAgICByZXR1cm4gVHJ1ZQogCiAKLWNsYXNzIFF1ZXJ5VG9vbENvbW1hbmQoQmFzZUNvbW1h bmQpOgorY2xhc3MgUXVlcnlUb29sQ29tbWFuZChCYXNlQ29tbWFuZCwgRmV0Y2hlZFJvd1RyYWNr ZXIpOgogICAgICIiIgogICAgIGNsYXNzIFF1ZXJ5VG9vbENvbW1hbmQoQmFzZUNvbW1hbmQpCiAK QEAgLTczMiwxMyArNzQ3LDE1IEBAIGNsYXNzIFF1ZXJ5VG9vbENvbW1hbmQoQmFzZUNvbW1hbmQp OgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgIyBjYWxsIGJh c2UgY2xhc3MgaW5pdCB0byBmZXRjaCB0aGUgdGFibGUgbmFtZQotICAgICAgICBzdXBlcihRdWVy eVRvb2xDb21tYW5kLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKKworICAgICAgICBCYXNlQ29t bWFuZC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKKyAgICAgICAgRmV0Y2hlZFJvd1RyYWNrZXIu X19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAKICAgICAgICAgc2VsZi5jb25uX2lkID0gTm9uZQog ICAgICAgICBzZWxmLmF1dG9fcm9sbGJhY2sgPSBGYWxzZQogICAgICAgICBzZWxmLmF1dG9fY29t bWl0ID0gVHJ1ZQogCi0gICAgZGVmIGdldF9zcWwoc2VsZik6CisgICAgZGVmIGdldF9zcWwoc2Vs ZiwgZGVmYXVsdF9jb25uPU5vbmUpOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGNh bl9lZGl0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0 YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0 aWMvY3NzL3NxbGVkaXRvci5jc3MKaW5kZXggNzI2NmIzNC4uZDhmNDg4MSAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcworKysg Yi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3IuY3NzCkBA IC00MjMsNyArNDIzLDcgQEAgaW5wdXQuZWRpdG9yLWNoZWNrYm94OmZvY3VzIHsKIAogLyogVG8g aGlnaGxpZ2h0IGFsbCBuZXdseSBpbnNlcnRlZCByb3dzICovCiAuZ3JpZC1jYW52YXMgLm5ld19y b3cgewotICBiYWNrZ3JvdW5kOiAjZGZmMGQ3OworICBiYWNrZ3JvdW5kOiAjZGZmMGQ3ICFpbXBv cnRhbnQ7CiB9CiAKIC8qIFRvIGhpZ2hsaWdodCBhbGwgdGhlIHVwZGF0ZWQgcm93cyAqLwpAQCAt NDMzLDcgKzQzMyw3IEBAIGlucHV0LmVkaXRvci1jaGVja2JveDpmb2N1cyB7CiAKIC8qIFRvIGhp Z2hsaWdodCByb3cgYXQgZmF1bHQgKi8KIC5ncmlkLWNhbnZhcyAubmV3X3Jvdy5lcnJvciwgLmdy aWQtY2FudmFzIC51cGRhdGVkX3Jvdy5lcnJvciB7Ci0gIGJhY2tncm91bmQ6ICNmMmRlZGU7Cisg IGJhY2tncm91bmQ6ICNmMmRlZGUgIWltcG9ydGFudDsKIH0KIAogLyogRGlzYWJsZWQgcm93ICov CkBAIC00NjAsNiArNDYwLDExIEBAIGlucHV0LmVkaXRvci1jaGVja2JveDpmb2N1cyB7CiAgIGJh Y2tncm91bmQtY29sb3I6ICMyQzc2QjQ7CiB9CiAKKy5zbGljay1jZWxsIHNwYW5bZGF0YS1jZWxs LXR5cGU9InJvdy1oZWFkZXItc2VsZWN0b3IiXSB7CisgIGRpc3BsYXk6IGJsb2NrOworICB0ZXh0 LWFsaWduOiByaWdodDsKK30KKwogI2RhdGFncmlkIGRpdi5zbGljay1oZWFkZXIudWktc3RhdGUt ZGVmYXVsdCB7CiAgIGJhY2tncm91bmQ6ICNmZmZmZmY7CiAgIGJvcmRlci1ib3R0b206IG5vbmU7 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVk aXRvci9qcy9zcWxlZGl0b3IuanMgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxh dGVzL3NxbGVkaXRvci9qcy9zcWxlZGl0b3IuanMKaW5kZXggY2FjMmU1NS4uZWViMzIwZSAxMDA2 NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Iv anMvc3FsZWRpdG9yLmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0 ZXMvc3FsZWRpdG9yL2pzL3NxbGVkaXRvci5qcwpAQCAtNDYzLDcgKzQ2Myw3IEBAIGRlZmluZShb CiAgICAgICAgICAtIHN0YWdlZF9yb3dzOgogICAgICAgICAgICBUaGlzIHdpbGwgaG9sZCBhbGwg dGhlIGRhdGEgd2hpY2ggdXNlciBjb3BpZXMvcGFzdGVzL2RlbGV0ZXMgaW4gZ3JpZAogICAgICAg ICAgLSBkZWxldGVkOgotICAgICAgICAgICBUaGlzIHdpbGwgaG9sZCBhbGwgdGhlIGRhdGEgd2hp Y2ggdXNlciBkZWxldHMgaW4gZ3JpZAorICAgICAgICAgICBUaGlzIHdpbGwgaG9sZCBhbGwgdGhl IGRhdGEgd2hpY2ggdXNlciBkZWxldGVzIGluIGdyaWQKIAogICAgICAgIEV2ZW50cyBoYW5kbGlu ZzoKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tCkBAIC00NzksMzQgKzQ3OSwxMCBAQCBkZWZpbmUo WwogICAgICAgICAgICAtIFdlIGFyZSB1c2luZyB0aGlzIGV2ZW50IGZvciBDb3B5IG9wZXJhdGlv biBvbiBncmlkCiAgICAgICAgKi8KIAotICAgICAgLy8gR2V0IHRoZSBpdGVtIGNvbHVtbiB2YWx1 ZSB1c2luZyBhIGN1c3RvbSAnZmllbGRJZHgnIGNvbHVtbiBwYXJhbQotICAgICAgZ2V0X2l0ZW1f Y29sdW1uX3ZhbHVlOiBmdW5jdGlvbiAoaXRlbSwgY29sdW1uKSB7Ci0gICAgICAgIGlmIChjb2x1 bW4ucG9zICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICByZXR1cm4gaXRlbVtjb2x1bW4ucG9z XTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQot ICAgICAgfSwKLQogICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byBjcmVh dGUgYW5kIHJlbmRlciB0aGUgU2xpY2tHcmlkLgotICAgICAgcmVuZGVyX2dyaWQ6IGZ1bmN0aW9u KGNvbGxlY3Rpb24sIGNvbHVtbnMsIGlzX2VkaXRhYmxlKSB7CisgICAgICByZW5kZXJfZ3JpZDog ZnVuY3Rpb24oY29sbGVjdGlvbiwgY29sdW1ucywgaXNfZWRpdGFibGUsIGNsaWVudF9wcmltYXJ5 X2tleSwgcm93c19hZmZlY3RlZCkgewogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAKLSAgICAg ICAgLy8gcmV0dXJucyBwcmltYXJ5IGtleXMKLSAgICAgICAgc2VsZi5oYW5kbGVyLmdldF9yb3df cHJpbWFyeV9rZXkgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCi0g ICAgICAgICAgICB0bXBfa2V5cyA9IFtdOwotICAgICAgICAgIF8uZWFjaChzZWxmLnByaW1hcnlf a2V5cywgZnVuY3Rpb24ocCwgaWR4KSB7Ci0gICAgICAgICAgICAvLyBGb3IgZWFjaCBjb2x1bW5z IHNlYXJjaCBwcmltYXJ5IGtleSBwb3NpdGlvbgotICAgICAgICAgICAgXy5lYWNoKHNlbGYuY29s dW1ucywgZnVuY3Rpb24oYykgewotICAgICAgICAgICAgICAgaWYoYy5uYW1lID09IGlkeCkgewot ICAgICAgICAgICAgICAgICB0bXBfa2V5cy5wdXNoKGMucG9zKTsKLSAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0pOwotICAgICAgICAgIH0pOwotICAgICAgICAgIHJldHVybiB0bXBfa2V5 czsKLSAgICAgICAgfTsKLQogICAgICAgICAvLyBUaGlzIHdpbGwgd29yayBhcyBkYXRhIHN0b3Jl IGFuZCBob2xkcyBhbGwgdGhlCiAgICAgICAgIC8vIGluc2VydGVkL3VwZGF0ZWQvZGVsZXRlZCBk YXRhIGZyb20gZ3JpZAogICAgICAgICBzZWxmLmhhbmRsZXIuZGF0YV9zdG9yZSA9IHsKQEAgLTUy MSw4ICs0OTcsOSBAQCBkZWZpbmUoWwogICAgICAgICAvLyBUbyBzdG9yZSBwcmltYXJ5IGtleXMg YmVmb3JlIHRoZXkgZ2V0cyBjaGFuZ2VkCiAgICAgICAgIHNlbGYuaGFuZGxlci5wcmltYXJ5X2tl eXNfZGF0YSA9IHt9OwogCi0gICAgICAgIC8vIEFkZCBnZXRJdGVtTWV0YWRhdGEgaW50byBoYW5k bGVyIGZvciBsYXRlciB1c2UKLSAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfdmlldyA9IGNvbGxl Y3Rpb247CisgICAgICAgIHNlbGYuY2xpZW50X3ByaW1hcnlfa2V5ID0gY2xpZW50X3ByaW1hcnlf a2V5OworCisgICAgICAgIHNlbGYuY2xpZW50X3ByaW1hcnlfa2V5X2NvdW50ZXIgPSAwOwogCiAg ICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgZ3JpZCBmaXJzdAogICAgICAgICBpZiAoc2Vs Zi5oYW5kbGVyLnNsaWNrZ3JpZCkgewpAQCAtNjAxLDcgKzU3OCwxMiBAQCBkZWZpbmUoWwogICAg ICAgICB9KTsKIAogICAgICAgICB2YXIgZ3JpZFNlbGVjdG9yID0gbmV3IEdyaWRTZWxlY3Rvcigp OwotICAgICAgICBncmlkX2NvbHVtbnMgPSBncmlkU2VsZWN0b3IuZ2V0Q29sdW1uRGVmaW5pdGlv bnMoZ3JpZF9jb2x1bW5zKTsKKyAgICAgICAgZ3JpZF9jb2x1bW5zID0gc2VsZi5ncmlkX2NvbHVt bnMgPSBncmlkU2VsZWN0b3IuZ2V0Q29sdW1uRGVmaW5pdGlvbnMoZ3JpZF9jb2x1bW5zKTsKKwor ICAgICAgICBpZiAocm93c19hZmZlY3RlZCkgeworICAgICAgICAgIC8vIGNhbGN1bGF0ZSB3aXRo IGZvciBoZWFkZXIgcm93IGNvbHVtbi4KKyAgICAgICAgZ3JpZF9jb2x1bW5zWzBdWyd3aWR0aCdd ID0gU3FsRWRpdG9yVXRpbHMuY2FsY3VsYXRlQ29sdW1uV2lkdGgocm93c19hZmZlY3RlZCk7Cisg ICAgICAgIH0KIAogICAgICAgICB2YXIgZ3JpZF9vcHRpb25zID0gewogICAgICAgICAgIGVkaXRh YmxlOiB0cnVlLApAQCAtNjA5LDggKzU5MSw3IEBAIGRlZmluZShbCiAgICAgICAgICAgZW5hYmxl Q2VsbE5hdmlnYXRpb246IHRydWUsCiAgICAgICAgICAgZW5hYmxlQ29sdW1uUmVvcmRlcjogZmFs c2UsCiAgICAgICAgICAgYXN5bmNFZGl0b3JMb2FkaW5nOiBmYWxzZSwKLSAgICAgICAgICBhdXRv RWRpdDogZmFsc2UsCi0gICAgICAgICAgZGF0YUl0ZW1Db2x1bW5WYWx1ZUV4dHJhY3RvcjogdGhp cy5nZXRfaXRlbV9jb2x1bW5fdmFsdWUKKyAgICAgICAgICBhdXRvRWRpdDogZmFsc2UKICAgICAg ICAgfTsKIAogICAgICAgICB2YXIgJGRhdGFfZ3JpZCA9IHNlbGYuJGVsLmZpbmQoJyNkYXRhZ3Jp ZCcpOwpAQCAtNjE4LDE3ICs1OTksMTUgQEAgZGVmaW5lKFsKICAgICAgICAgdmFyIGdyaWRfaGVp Z2h0ID0gJCgkKCcjZWRpdG9yLXBhbmVsJykuZmluZCgnLndjRnJhbWUnKVsxXSkuaGVpZ2h0KCkg LSAzNTsKICAgICAgICAgJGRhdGFfZ3JpZC5oZWlnaHQoZ3JpZF9oZWlnaHQpOwogCi0gICAgICAg IC8vIEFkZCBvdXIgb3duIGN1c3RvbSBwcmltYXJ5IGtleSB0byBrZWVwIHRyYWNrIG9mIGNoYW5n ZXMKLSAgICAgICAgXy5lYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHJvdyl7Ci0gICAgICAgICAg cm93WydfX3RlbXBfUEsnXSA9IFNxbEVkaXRvclV0aWxzLmVwaWNSYW5kb21TdHJpbmcoMTUpOwot ICAgICAgICB9KTsKKyAgICAgICAgdmFyIGRhdGFWaWV3ID0gc2VsZi5kYXRhVmlldyA9IG5ldyBT bGljay5EYXRhLkRhdGFWaWV3KCksCisgICAgICAgICAgICBncmlkID0gc2VsZi5ncmlkID0gbmV3 IFNsaWNrLkdyaWQoJGRhdGFfZ3JpZCwgZGF0YVZpZXcsIGdyaWRfY29sdW1ucywgZ3JpZF9vcHRp b25zKTsKIAogICAgICAgICAvLyBBZGQtb24gZnVuY3Rpb24gd2hpY2ggYWxsb3cgdXMgdG8gaWRl bnRpZnkgdGhlIGZhdWx0eSByb3cgYWZ0ZXIgaW5zZXJ0L3VwZGF0ZQogICAgICAgICAvLyBhbmQg YXBwbHkgY3NzIGFjY29yZGluZ2x5Ci0gICAgICAgIGNvbGxlY3Rpb24uZ2V0SXRlbU1ldGFkYXRh ID0gZnVuY3Rpb24oaSkgewotICAgICAgICAgIHZhciByZXMgPSB7fSwKLSAgICAgICAgICAgIGNz c0NsYXNzID0gJycsCi0gICAgICAgICAgICBkYXRhX3N0b3JlID0gc2VsZi5oYW5kbGVyLmRhdGFf c3RvcmU7CisKKyAgICAgICAgZGF0YVZpZXcuZ2V0SXRlbU1ldGFkYXRhID0gZnVuY3Rpb24oaSkg eworICAgICAgICAgIHZhciByZXMgPSB7fSwgY3NzQ2xhc3MgPSAnJywKKyAgICAgICAgICAgICAg ZGF0YV9zdG9yZSA9IHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlOwogCiAgICAgICAgICAgaWYgKF8u aGFzKHNlbGYuaGFuZGxlciwgJ2RhdGFfc3RvcmUnKSkgewogICAgICAgICAgICAgaWYgKGkgaW4g ZGF0YV9zdG9yZS5hZGRlZF9pbmRleCAmJgpAQCAtNjUxLDkgKzYzMCw4IEBAIGRlZmluZShbCiAg ICAgICAgICAgICBjc3NDbGFzcyArPSAnIGRpc2FibGVkX3Jvdyc7CiAgICAgICAgICAgfQogICAg ICAgICAgIHJldHVybiB7J2Nzc0NsYXNzZXMnOiBjc3NDbGFzc307Ci0gICAgICAgIH0KKyAgICAg ICAgfTsKIAotICAgICAgICB2YXIgZ3JpZCA9IG5ldyBTbGljay5HcmlkKCRkYXRhX2dyaWQsIGNv bGxlY3Rpb24sIGdyaWRfY29sdW1ucywgZ3JpZF9vcHRpb25zKTsKICAgICAgICAgZ3JpZC5yZWdp c3RlclBsdWdpbiggbmV3IFNsaWNrLkF1dG9Ub29sdGlwcyh7IGVuYWJsZUZvckhlYWRlckNlbGxz OiBmYWxzZSB9KSApOwogICAgICAgICBncmlkLnJlZ2lzdGVyUGx1Z2luKG5ldyBBY3RpdmVDZWxs Q2FwdHVyZSgpKTsKICAgICAgICAgZ3JpZC5zZXRTZWxlY3Rpb25Nb2RlbChuZXcgWENlbGxTZWxl Y3Rpb25Nb2RlbCgpKTsKQEAgLTY2NSw3ICs2NDMsOCBAQCBkZWZpbmUoWwogICAgICAgICAgIGNv bHVtbnM6IGNvbHVtbnMsCiAgICAgICAgICAgZ3JpZDogZ3JpZCwKICAgICAgICAgICBzZWxlY3Rp b246IGdyaWQuZ2V0U2VsZWN0aW9uTW9kZWwoKSwKLSAgICAgICAgICBlZGl0b3I6IHNlbGYKKyAg ICAgICAgICBlZGl0b3I6IHNlbGYsCisgICAgICAgICAgY2xpZW50X3ByaW1hcnlfa2V5OiBzZWxm LmNsaWVudF9wcmltYXJ5X2tleQogICAgICAgICB9OwogCiAgICAgICAgIHNlbGYuaGFuZGxlci5z bGlja2dyaWQgPSBncmlkOwpAQCAtNjg0LDYgKzY2Myw0MiBAQCBkZWZpbmUoWwogICAgICAgICAg ICAgfSk7CiAgICAgICAgIH0pOwogCisgICAgICAgIGdyaWRTZWxlY3Rvci5vbkJlZm9yZUdyaWRT ZWxlY3RBbGwuc3Vic2NyaWJlKGZ1bmN0aW9uKGUsIGFyZ3MpIHsKKyAgICAgICAgICBpZiAoc2Vs Zi5oYW5kbGVyLmhhc19tb3JlX3Jvd3MpIHsKKyAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBwcmV2 ZW50IHNlbGVjdGlvbiB1bi10aWxsIHdlIGxvYWQgYWxsIGRhdGEKKyAgICAgICAgICAgIGUuc3Rv cEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgICBzZWxmLmZldGNoX25leHRfYWxs KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSd2ZSBzdG9wcGVkIGV2ZW50 IHByb3BhZ2F0aW9uIHdlIG5lZWQgdG8KKyAgICAgICAgICAgICAgLy8gdHJpZ2dlciBvbkdyaWRT ZWxlY3RBbGwgbWFudWFsbHkgd2l0aCBuZXcgZXZlbnQgZGF0YS4KKyAgICAgICAgICAgICAgZ3Jp ZFNlbGVjdG9yLm9uR3JpZFNlbGVjdEFsbC5ub3RpZnkoYXJncywgbmV3IFNsaWNrLkV2ZW50RGF0 YSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAg ICAgZ3JpZFNlbGVjdG9yLm9uQmVmb3JlR3JpZENvbHVtblNlbGVjdEFsbC5zdWJzY3JpYmUoZnVu Y3Rpb24oZSwgYXJncykgeworICAgICAgICAgIGlmIChzZWxmLmhhbmRsZXIuaGFzX21vcmVfcm93 cykgeworICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHByZXZlbnQgc2VsZWN0aW9uIHVuLXRpbGwg d2UgbG9hZCBhbGwgZGF0YQorICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24o KTsKKyAgICAgICAgICAgIHNlbGYuZmV0Y2hfbmV4dF9hbGwoZnVuY3Rpb24oKSB7CisgICAgICAg ICAgICAgIC8vIHNpbmNlIHdlJ3ZlIHN0b3BwZWQgZXZlbnQgcHJvcGFnYXRpb24gd2UgbmVlZCB0 bworICAgICAgICAgICAgICAvLyB0cmlnZ2VyIG9uR3JpZENvbHVtblNlbGVjdEFsbCBtYW51YWxs eSB3aXRoIG5ldyBldmVudCBkYXRhLgorICAgICAgICAgICAgICBncmlkU2VsZWN0b3Iub25Hcmlk Q29sdW1uU2VsZWN0QWxsLm5vdGlmeShhcmdzLCBuZXcgU2xpY2suRXZlbnREYXRhKCkpOworICAg ICAgICAgICAgfSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBsaXN0 ZW4gZm9yIHJvdyBjb3VudCBjaGFuZ2UuCisgICAgICAgIGRhdGFWaWV3Lm9uUm93Q291bnRDaGFu Z2VkLnN1YnNjcmliZShmdW5jdGlvbiAoZSwgYXJncykgeworICAgICAgICAgIGdyaWQudXBkYXRl Um93Q291bnQoKTsKKyAgICAgICAgICBncmlkLnJlbmRlcigpOworICAgICAgICB9KTsKKworICAg ICAgICAvLyBsaXN0ZW4gZm9yIHJvd3MgY2hhbmdlLgorICAgICAgICBkYXRhVmlldy5vblJvd3ND aGFuZ2VkLnN1YnNjcmliZShmdW5jdGlvbiAoZSwgYXJncykgeworICAgICAgICAgIGdyaWQuaW52 YWxpZGF0ZVJvd3MoYXJncy5yb3dzKTsKKyAgICAgICAgICBncmlkLnJlbmRlcigpOworICAgICAg ICB9KTsKKwogICAgICAgICAvLyBMaXN0ZW5lciBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxl ZCBiZWZvcmUgdXNlciB1cGRhdGVzIGV4aXN0aW5nIGNlbGwKICAgICAgICAgLy8gVGhpcyB3aWxs IGJlIHVzZWQgdG8gY29sbGVjdCBwcmltYXJ5IGtleSBmb3IgdGhhdCByb3cKICAgICAgICAgZ3Jp ZC5vbkJlZm9yZUVkaXRDZWxsLnN1YnNjcmliZShmdW5jdGlvbiAoZSwgYXJncykgewpAQCAtNjk2 LDggKzcxMSw4IEBAIGRlZmluZShbCiAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg ICAgICAgIH0KIAotICAgICAgICAgICAgaWYoc2VsZi5oYW5kbGVyLmNhbl9lZGl0ICYmIGJlZm9y ZV9kYXRhICYmICdfX3RlbXBfUEsnIGluIGJlZm9yZV9kYXRhKSB7Ci0gICAgICAgICAgICAgIHZh ciBfcGsgPSBiZWZvcmVfZGF0YS5fX3RlbXBfUEssCisgICAgICAgICAgICBpZihzZWxmLmhhbmRs ZXIuY2FuX2VkaXQgJiYgYmVmb3JlX2RhdGEgJiYgc2VsZi5jbGllbnRfcHJpbWFyeV9rZXkgaW4g YmVmb3JlX2RhdGEpIHsKKyAgICAgICAgICAgICAgdmFyIF9wayA9IGJlZm9yZV9kYXRhW3NlbGYu Y2xpZW50X3ByaW1hcnlfa2V5XSwKICAgICAgICAgICAgICAgICBfa2V5cyA9IHNlbGYuaGFuZGxl ci5wcmltYXJ5X2tleXMsCiAgICAgICAgICAgICAgICAgY3VycmVudF9wayA9IHt9LCBlYWNoX3Br X2tleSA9IHt9OwogCkBAIC03MDksMjIgKzcyNCwzNCBAQCBkZWZpbmUoWwogICAgICAgICAgICAg ICAvLyBGZXRjaCBwcmltYXJ5IGtleXMgZm9yIHRoZSByb3cgYmVmb3JlIHRoZXkgZ2V0cyBtb2Rp ZmllZAogICAgICAgICAgICAgICB2YXIgX2NvbHVtbnMgPSBzZWxmLmhhbmRsZXIuY29sdW1uczsK ICAgICAgICAgICAgICAgXy5lYWNoKF9rZXlzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7Ci0gICAg ICAgICAgICAgICAgcG9zID0gXy53aGVyZShfY29sdW1ucywge25hbWU6IGtleX0pWzBdWydwb3Mn XQotICAgICAgICAgICAgICAgIGN1cnJlbnRfcGtbcG9zXSA9IGJlZm9yZV9kYXRhW3Bvc107Cisg ICAgICAgICAgICAgICAgY3VycmVudF9wa1trZXldID0gYmVmb3JlX2RhdGFba2V5XTsKICAgICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgIC8vIFBsYWNlIGl0IGluIG1haW4gdmFyaWFibGUg Zm9yIGxhdGVyIHVzZQogICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIucHJpbWFyeV9rZXlzX2Rh dGFbX3BrXSA9IGN1cnJlbnRfcGsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICAg ICAgZ3JpZC5vbktleURvd24uc3Vic2NyaWJlKGhhbmRsZVF1ZXJ5T3V0cHV0S2V5Ym9hcmRFdmVu dCk7CisgICAgICAgIGdyaWQub25LZXlEb3duLnN1YnNjcmliZShmdW5jdGlvbihldmVudCwgYXJn cykgeworICAgICAgICAgIHZhciBLRVlfQSA9IDY1OworICAgICAgICAgIHZhciBtb2RpZmllZEtl eSA9IGV2ZW50LmtleUNvZGU7CisgICAgICAgICAgdmFyIGlzTW9kaWZpZXJEb3duID0gZXZlbnQu Y3RybEtleSB8fCBldmVudC5tZXRhS2V5OworICAgICAgICAgIC8vIEludGVyY2VwdCBDdHJsL0Nt ZCArIEEga2V5IGJvYXJkIGV2ZW50LgorICAgICAgICAgIC8vIEFzIHdlIG1pZ2h0IHdhbnQgdG8g bG9hZCBhbGwgcm93cyBiZWZvcmUgc2VsZWN0aW5nIGFsbC4KKyAgICAgICAgICBpZiAoaXNNb2Rp ZmllckRvd24gJiYgbW9kaWZpZWRLZXkgPT0gS0VZX0EgJiYgc2VsZi5oYW5kbGVyLmhhc19tb3Jl X3Jvd3MpIHsKKyAgICAgICAgICAgIHNlbGYuZmV0Y2hfbmV4dF9hbGwoZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgIGhhbmRsZVF1ZXJ5T3V0cHV0S2V5Ym9hcmRFdmVudChldmVudCwgYXJncyk7 CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGFuZGxl UXVlcnlPdXRwdXRLZXlib2FyZEV2ZW50KGV2ZW50LCBhcmdzKTsKKyAgICAgICAgICB9CisgICAg ICAgIH0pOwogCiAgICAgICAgIC8vIExpc3RlbmVyIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2Fs bGVkIHdoZW4gdXNlciB1cGRhdGVzIGV4aXN0aW5nIHJvd3MKICAgICAgICAgZ3JpZC5vbkNlbGxD aGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uIChlLCBhcmdzKSB7CiAgICAgICAgICAgLy8gc2VsZi5o YW5kbGVyLmRhdGFfc3RvcmUudXBkYXRlZCB3aWxsIGhvbGRzIGFsbCB0aGUgdXBkYXRlZCBkYXRh Ci0gICAgICAgICAgdmFyIGNoYW5nZWRfY29sdW1uID0gYXJncy5ncmlkLmdldENvbHVtbnMoKVth cmdzLmNlbGxdLnBvcywgLy8gQ3VycmVudCBmaWVsZCBwb3MKKyAgICAgICAgICB2YXIgY2hhbmdl ZF9jb2x1bW4gPSBhcmdzLmdyaWQuZ2V0Q29sdW1ucygpW2FyZ3MuY2VsbF0uZmllbGQsCiAgICAg ICAgICAgICB1cGRhdGVkX2RhdGEgPSBhcmdzLml0ZW1bY2hhbmdlZF9jb2x1bW5dLCAgICAgICAg ICAgICAgICAgICAvLyBOZXcgdmFsdWUgZm9yIGN1cnJlbnQgZmllbGQKLSAgICAgICAgICAgIF9w ayA9IGFyZ3MuaXRlbS5fX3RlbXBfUEsgfHwgbnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIFVuaXF1ZSBrZXkgdG8gaWRlbnRpZnkgcm93CisgICAgICAgICAgICBfcGsgPSBhcmdzLml0 ZW1bc2VsZi5jbGllbnRfcHJpbWFyeV9rZXldIHx8IG51bGwsICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBVbmlxdWUga2V5IHRvIGlkZW50aWZ5IHJvdwogICAgICAgICAgICAgY29sdW1uX2Rh dGEgPSB7fSwKICAgICAgICAgICAgIF90eXBlOwogCkBAIC03MzQsMTEgKzc2MSwxNiBAQCBkZWZp bmUoWwogICAgICAgICAgIC8vIHNvIHRoYXQgY2VsbCBlZGl0IGlzIGVuYWJsZWQgZm9yIHRoYXQg cm93LgogICAgICAgICAgIHZhciBncmlkID0gYXJncy5ncmlkLAogICAgICAgICAgICAgcm93X2Rh dGEgPSBncmlkLmdldERhdGFJdGVtKGFyZ3Mucm93KSwKLSAgICAgICAgICAgIHBfa2V5c19saXN0 ID0gXy5waWNrKAotICAgICAgICAgICAgICByb3dfZGF0YSwgc2VsZi5oYW5kbGVyLmdldF9yb3df cHJpbWFyeV9rZXkoKQotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgIGlzX3ByaW1hcnlfa2V5 ID0gT2JqZWN0LmtleXMocF9rZXlzX2xpc3QpLmxlbmd0aCA/Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBfa2V5c19saXN0WzBdIDogdW5kZWZpbmVkOworICAgICAgICAgICAgaXNfcHJp bWFyeV9rZXkgPSBfLmFsbCgKKyAgICAgICAgICAgICAgICBfLnZhbHVlcygKKyAgICAgICAgICAg ICAgICAgIF8ucGljaygKKyAgICAgICAgICAgICAgICAgICAgICByb3dfZGF0YSwgc2VsZi5wcmlt YXJ5X2tleXMKKyAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApLAorICAgICAg ICAgICAgICAgIGZ1bmN0aW9uKHZhbCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbCAh PSB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICk7CiAKICAgICAg ICAgICAvLyB0ZW1wX25ld19yb3dzIGlzIGF2YWlsYWJsZSBvbmx5IGZvciB2aWV3IGRhdGEuCiAg ICAgICAgICAgaWYgKGlzX3ByaW1hcnlfa2V5ICYmIHNlbGYuaGFuZGxlci50ZW1wX25ld19yb3dz KSB7CkBAIC03NTgsNyArNzkwLDYgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgIGNvbHVt bl9kYXRhKTsKICAgICAgICAgICAgICAgLy9GaW5kIHR5cGUgZm9yIGN1cnJlbnQgY29sdW1uCiAg ICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlLmFkZGVkW19wa11bJ2VyciddID0g ZmFsc2UKLSAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUuYWRkZWRbX3BrXVsn ZGF0YV90eXBlJ11bY2hhbmdlZF9jb2x1bW5dID0gXy53aGVyZSh0aGlzLmNvbHVtbnMsIHtwb3M6 IGNoYW5nZWRfY29sdW1ufSlbMF1bJ3R5cGUnXTsKICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0 IGlzIHVwZGF0ZWQgZGF0YSBmcm9tIGV4aXN0aW5nIHJvd3M/CiAgICAgICAgICAgICB9IGVsc2Ug aWYoX3BrIGluIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlLnVwZGF0ZWQpIHsKICAgICAgICAgICAg ICAgXy5leHRlbmQoCkBAIC03NjYsOSArNzk3LDYgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAg ICBjb2x1bW5fZGF0YQogICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICBzZWxmLmhhbmRs ZXIuZGF0YV9zdG9yZS51cGRhdGVkW19wa11bJ2VyciddID0gZmFsc2UKLQotICAgICAgICAgICAg IC8vRmluZCB0eXBlIGZvciBjdXJyZW50IGNvbHVtbgotICAgICAgICAgICAgIHNlbGYuaGFuZGxl ci5kYXRhX3N0b3JlLnVwZGF0ZWRbX3BrXVsnZGF0YV90eXBlJ11bY2hhbmdlZF9jb2x1bW5dID0g Xy53aGVyZSh0aGlzLmNvbHVtbnMsIHtwb3M6IGNoYW5nZWRfY29sdW1ufSlbMF1bJ3R5cGUnXTsK ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC8vIEZpcnN0IHVwZGF0ZWQgZGF0 YSBmb3IgdGhpcyBwcmltYXJ5IGtleQogICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuZGF0YV9z dG9yZS51cGRhdGVkW19wa10gPSB7CkBAIC03NzYsMzIgKzgwNCwxOSBAQCBkZWZpbmUoWwogICAg ICAgICAgICAgICAgICdwcmltYXJ5X2tleXMnOiBzZWxmLmhhbmRsZXIucHJpbWFyeV9rZXlzX2Rh dGFbX3BrXQogICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuZGF0 YV9zdG9yZS51cGRhdGVkX2luZGV4W2FyZ3Mucm93XSA9IF9wazsKLSAgICAgICAgICAgICAgLy8g RmluZCAmIGFkZCBjb2x1bW4gZGF0YSB0eXBlIGZvciBjdXJyZW50IGNoYW5nZWQgY29sdW1uCi0g ICAgICAgICAgICAgIHZhciB0ZW1wID0ge307Ci0gICAgICAgICAgICAgIHRlbXBbY2hhbmdlZF9j b2x1bW5dID0gXy53aGVyZSh0aGlzLmNvbHVtbnMsIHtwb3M6IGNoYW5nZWRfY29sdW1ufSlbMF1b J3R5cGUnXTsKLSAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUudXBkYXRlZFtf cGtdWydkYXRhX3R5cGUnXSA9IHRlbXA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAg ICAgICAgIC8vIEVuYWJsZSBzYXZlIGJ1dHRvbgogICAgICAgICAgICQoIiNidG4tc2F2ZSIpLnBy b3AoJ2Rpc2FibGVkJywgZmFsc2UpOwogICAgICAgICB9LmJpbmQoZWRpdG9yX2RhdGEpKTsKIAot ICAgICAgICBncmlkLmFkZEJsYW5rUm93ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgLy8gQWRk IGEgYmxhbmsgcm93IGluIHRoZSBlbmQgb2YgZ3JpZAotICAgICAgICAgIHRoaXMuc2V0RGF0YSh0 aGlzLmdldERhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgICAgdGhpcy51cGRhdGVSb3dDb3VudCgpOwot ICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZUFsbFJvd3MoKTsKLSAgICAgICAgICB0aGlzLnJlbmRl cigpOwotICAgICAgICB9OwotCiAgICAgICAgIC8vIExpc3RlbmVyIGZ1bmN0aW9uIHdoaWNoIHdp bGwgYmUgY2FsbGVkIHdoZW4gdXNlciBhZGRzIG5ldyByb3dzCiAgICAgICAgIGdyaWQub25BZGRO ZXdSb3cuc3Vic2NyaWJlKGZ1bmN0aW9uIChlLCBhcmdzKSB7CiAgICAgICAgICAgLy8gc2VsZi5o YW5kbGVyLmRhdGFfc3RvcmUuYWRkZWQgd2lsbCBob2xkcyBhbGwgdGhlIG5ld2x5IGFkZGVkIHJv d3MvZGF0YQotICAgICAgICAgIHZhciBfa2V5ID0gU3FsRWRpdG9yVXRpbHMuZXBpY1JhbmRvbVN0 cmluZygxMCksCi0gICAgICAgICAgICBjb2x1bW4gPSBhcmdzLmNvbHVtbiwKLSAgICAgICAgICAg IGl0ZW0gPSBhcmdzLml0ZW0sCi0gICAgICAgICAgICBkYXRhX2xlbmd0aCA9IHRoaXMuZ3JpZC5n ZXREYXRhTGVuZ3RoKCksCi0gICAgICAgICAgICBuZXdfY29sbGVjdGlvbiA9IGFyZ3MuZ3JpZC5n ZXREYXRhKCk7CisgICAgICAgICAgdmFyIGNvbHVtbiA9IGFyZ3MuY29sdW1uLAorICAgICAgICAg ICAgaXRlbSA9IGFyZ3MuaXRlbSwgZGF0YV9sZW5ndGggPSB0aGlzLmdyaWQuZ2V0RGF0YUxlbmd0 aCgpLAorICAgICAgICAgICAgX2tleSA9IChzZWxmLmNsaWVudF9wcmltYXJ5X2tleV9jb3VudGVy KyspLnRvU3RyaW5nKCksCisgICAgICAgICAgICBkYXRhVmlldyA9IHRoaXMuZ3JpZC5nZXREYXRh KCk7CiAKICAgICAgICAgICAvLyBBZGQgbmV3IHJvdyBpbiBsaXN0IHRvIGtlZXAgdHJhY2sgb2Yg aXQKICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChpdGVtWzBdKSkgewpAQCAtODEwLDI5ICs4 MjUsMzIgQEAgZGVmaW5lKFsKIAogICAgICAgICAgIC8vIElmIGNvcGllZCBpdGVtIGhhcyBhbHJl YWR5IHByaW1hcnkga2V5LCB1c2UgaXQuCiAgICAgICAgICAgaWYoaXRlbSkgewotICAgICAgICAg ICAgaXRlbS5fX3RlbXBfUEsgPSBfa2V5OworICAgICAgICAgICAgaXRlbVtzZWxmLmNsaWVudF9w cmltYXJ5X2tleV0gPSBfa2V5OwogICAgICAgICAgIH0KLSAgICAgICAgICBuZXdfY29sbGVjdGlv bi5wdXNoKGl0ZW0pOwogCisgICAgICAgICAgZGF0YVZpZXcuYWRkSXRlbShpdGVtKTsKICAgICAg ICAgICBzZWxmLmhhbmRsZXIuZGF0YV9zdG9yZS5hZGRlZFtfa2V5XSA9IHsnZXJyJzogZmFsc2Us ICdkYXRhJzogaXRlbX07CiAgICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUuYWRkZWRf aW5kZXhbZGF0YV9sZW5ndGhdID0gX2tleTsKICAgICAgICAgICAvLyBGZXRjaCBkYXRhIHR5cGUg JiBhZGQgaXQgZm9yIHRoZSBjb2x1bW4KICAgICAgICAgICB2YXIgdGVtcCA9IHt9OwotICAgICAg ICAgIHRlbXBbY29sdW1uLnBvc10gPSBfLndoZXJlKHRoaXMuY29sdW1ucywge3BvczogY29sdW1u LnBvc30pWzBdWyd0eXBlJ107Ci0gICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUuYWRk ZWRbX2tleV1bJ2RhdGFfdHlwZSddID0gIHRlbXA7Ci0gICAgICAgICAgZ3JpZC5pbnZhbGlkYXRl Um93cyhbbmV3X2NvbGxlY3Rpb24ubGVuZ3RoIC0gMV0pOworICAgICAgICAgIHRlbXBbY29sdW1u Lm5hbWVdID0gXy53aGVyZSh0aGlzLmNvbHVtbnMsIHtwb3M6IGNvbHVtbi5wb3N9KVswXVsndHlw ZSddOwogICAgICAgICAgIGdyaWQudXBkYXRlUm93Q291bnQoKTsKICAgICAgICAgICBncmlkLnJl bmRlcigpOwogCi0gICAgICAgICAgLy8gQWRkIGEgYmxhbmsgcm93IGFmdGVyIGFkZCByb3cKLSAg ICAgICAgICBpZiAoIWFyZ3MuaXNfY29weV9yb3cpIHsKLSAgICAgICAgICAgIGdyaWQuYWRkQmxh bmtSb3coKTsKLSAgICAgICAgICB9Ci0KICAgICAgICAgICAvLyBFbmFibGUgc2F2ZSBidXR0b24K ICAgICAgICAgICAkKCIjYnRuLXNhdmUiKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKICAgICAg ICAgfS5iaW5kKGVkaXRvcl9kYXRhKSk7CiAKKyAgICAgICAgLy8gTGlzdGVuIGdyaWQgdmlld3Bv cnRDaGFuZ2VkIGV2ZW50IHRvIGxvYWQgbmV4dCBjaHVuayBvZiBkYXRhLgorICAgICAgICBncmlk Lm9uVmlld3BvcnRDaGFuZ2VkLnN1YnNjcmliZShmdW5jdGlvbihlLCBhcmdzKSB7CisgICAgICAg ICAgdmFyIHJlbmRlcmVkX3JhbmdlID0gYXJncy5ncmlkLmdldFJlbmRlcmVkUmFuZ2UoKSwKKyAg ICAgICAgICAgICAgZGF0YV9sZW4gPSBhcmdzLmdyaWQuZ2V0RGF0YUxlbmd0aCgpOworICAgICAg ICAgIC8vIHN0YXJ0IGZldGNoaW5nIG5leHQgYmF0Y2ggb2YgcmVjb3JkcyBiZWZvcmUgcmVhY2hp bmcgdG8gYm90dG9tLgorICAgICAgICAgIGlmIChzZWxmLmhhbmRsZXIuaGFzX21vcmVfcm93cyAm JiAhc2VsZi5oYW5kbGVyLmZldGNoaW5nX3Jvd3MgJiYgcmVuZGVyZWRfcmFuZ2UuYm90dG9tID4g ZGF0YV9sZW4gLSAxMDApIHsKKyAgICAgICAgICAgIC8vIGZldGNoIGFzeW5jaHJvbm91cworICAg ICAgICAgICAgc2V0VGltZW91dChzZWxmLmZldGNoX25leHQuYmluZChzZWxmKSk7CisgICAgICAg ICAgfQorICAgICAgICB9KQogICAgICAgICAvLyBSZXNpemUgU2xpY2tHcmlkIHdoZW4gd2luZG93 IHJlc2l6ZQogICAgICAgICAkKCB3aW5kb3cgKS5yZXNpemUoIGZ1bmN0aW9uKCkgewogICAgICAg ICAgIC8vIFJlc2l6ZSBncmlkIG9ubHkgd2hlbiAnRGF0YSBPdXRwdXQnIHBhbmVsIGlzIHZpc2li bGUuCkBAIC04NTUsNiArODczLDg3IEBAIGRlZmluZShbCiAgICAgICAgICAgaWYoc2VsZi5kYXRh X291dHB1dF9wYW5lbC5pc1Zpc2libGUoKSkKICAgICAgICAgICAgIHNlbGYuZ3JpZF9yZXNpemUo Z3JpZCk7CiAgICAgICAgIH0pOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sbGVj dGlvbi5sZW5ndGg7IGkrKykgeworICAgICAgICAgIC8vIENvbnZlcnQgdG8gZGljdCBmcm9tIDJk YXJyYXkKKyAgICAgICAgICB2YXIgaXRlbSA9IHt9OworICAgICAgICAgIGZvciAodmFyIGogPSAx OyBqIDwgZ3JpZF9jb2x1bW5zLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICBpdGVtW2dyaWRf Y29sdW1uc1tqXVsnZmllbGQnXV0gPSBjb2xsZWN0aW9uW2ldW2dyaWRfY29sdW1uc1tqXVsncG9z J11dCisgICAgICAgICAgfQorCisgICAgICAgICAgaXRlbVtzZWxmLmNsaWVudF9wcmltYXJ5X2tl eV0gPSAoc2VsZi5jbGllbnRfcHJpbWFyeV9rZXlfY291bnRlcisrKS50b1N0cmluZygpOworICAg ICAgICAgIGNvbGxlY3Rpb25baV0gPSBpdGVtOworICAgICAgICB9CisgICAgICAgIGRhdGFWaWV3 LnNldEl0ZW1zKGNvbGxlY3Rpb24sIHNlbGYuY2xpZW50X3ByaW1hcnlfa2V5KTsKKyAgICAgIH0s CisgICAgICBmZXRjaF9uZXh0X2FsbChjYikgeworICAgICAgICB0aGlzLmZldGNoX25leHQodHJ1 ZSwgY2IpOworICAgICAgfSwKKyAgICAgIGZldGNoX25leHQ6IGZ1bmN0aW9uKGZldGNoX2FsbCwg Y2IpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzLCB1cmwgPSAnJzsKKworICAgICAgICAvLyBU aGlzIHdpbGwgcHJldmVudCBmZXRjaCBvcGVyYXRpb24gaWYgcHJldmlvdXMgZmV0Y2ggb3BlcmF0 aW9uIGlzCisgICAgICAgIC8vIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCisgICAgICAgIHNlbGYuaGFu ZGxlci5mZXRjaGluZ19yb3dzID0gdHJ1ZTsKKworICAgICAgICAkKCIjYnRuLWZsYXNoIikucHJv cCgnZGlzYWJsZWQnLCB0cnVlKTsKKworICAgICAgICBpZiAoZmV0Y2hfYWxsKSB7CisgICAgICAg ICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6 bG9hZGluZy1pY29uOnNob3cnLAorICAgICAgICAgICAgZ2V0dGV4dCgnRmV0Y2hpbmcgYWxsIHJl Y29yZHMuLi4nKQorICAgICAgICAgICk7CisgICAgICAgICAgdXJsID0gdXJsX2Zvcignc3FsZWRp dG9yLmZldGNoX2FsbCcsIHsndHJhbnNfaWQnOiBzZWxmLnRyYW5zSWQsICdmZXRjaF9hbGwnOiAx fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdXJsID0gdXJsID0gdXJsX2Zvcignc3Fs ZWRpdG9yLmZldGNoJywgeyd0cmFuc19pZCc6IHNlbGYudHJhbnNJZH0pOworICAgICAgICB9CisK KyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgICBtZXRob2Q6 ICdHRVQnLAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAg c2VsZi5oYW5kbGVyLmhhc19tb3JlX3Jvd3MgPSByZXMuZGF0YS5oYXNfbW9yZV9yb3dzOworICAg ICAgICAgICAgJCgiI2J0bi1mbGFzaCIpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAg ICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNv bjpoaWRlJyk7CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9ncmlkX2RhdGEocmVzLmRhdGEucmVz dWx0KTsKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5mZXRjaGluZ19yb3dzID0gZmFsc2U7Cisg ICAgICAgICAgICBpZiAodHlwZW9mIGNiID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAg Y2IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5j dGlvbihlKSB7CisgICAgICAgICAgICAkKCIjYnRuLWZsYXNoIikucHJvcCgnZGlzYWJsZWQnLCBm YWxzZSk7CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIudHJpZ2dlcigncGdhZG1pbi1zcWxlZGl0 b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5oYXNfbW9y ZV9yb3dzID0gZmFsc2U7CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuZmV0Y2hpbmdfcm93cyA9 IGZhbHNlOworICAgICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PSAiZnVuY3Rpb24iKSB7CisgICAg ICAgICAgICAgIGNiKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZS5yZWFkeVN0 YXRlID09IDApIHsKKyAgICAgICAgICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2Us CisgICAgICAgICAgICAgICAgZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyIG9y IHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpCisgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICAgIH0pOworICAgICAgfSwKKworICAgICAgdXBkYXRlX2dyaWRfZGF0YTogZnVu Y3Rpb24oZGF0YSkgeworICAgICAgICB0aGlzLmRhdGFWaWV3LmJlZ2luVXBkYXRlKCk7CisKKyAg ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg Ly8gQ29udmVydCAyZGFycmF5IHRvIGRpY3QuCisgICAgICAgICAgdmFyIGl0ZW0gPSB7fTsKKyAg ICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuZ3JpZF9jb2x1bW5zLmxlbmd0aDsgaisr KSB7CisgICAgICAgICAgICBpdGVtW3RoaXMuZ3JpZF9jb2x1bW5zW2pdWydmaWVsZCddXSA9IGRh dGFbaV1bdGhpcy5ncmlkX2NvbHVtbnNbal1bJ3BvcyddXQorICAgICAgICAgIH0KKworICAgICAg ICAgIGl0ZW1bdGhpcy5jbGllbnRfcHJpbWFyeV9rZXldID0gKHRoaXMuY2xpZW50X3ByaW1hcnlf a2V5X2NvdW50ZXIrKykudG9TdHJpbmcoKTsKKyAgICAgICAgICB0aGlzLmRhdGFWaWV3LmFkZEl0 ZW0oaXRlbSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmRhdGFWaWV3LmVuZFVwZGF0ZSgp OwogICAgICAgfSwKIAogICAgICAgLyogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byBy ZW5kZXIgb3V0cHV0IGdyaWQgKi8KQEAgLTEzOTYsNiArMTQ5NSw4IEBAIGRlZmluZShbCiAgICAg ICAgICAgc2VsZi5leHBsYWluX2J1ZmZlcnMgPSBmYWxzZTsKICAgICAgICAgICBzZWxmLmV4cGxh aW5fdGltaW5nID0gZmFsc2U7CiAgICAgICAgICAgc2VsZi5pc19uZXdfYnJvd3Nlcl90YWIgPSBp c19uZXdfYnJvd3Nlcl90YWI7CisgICAgICAgICAgc2VsZi5oYXNfbW9yZV9yb3dzID0gZmFsc2U7 CisgICAgICAgICAgc2VsZi5mZXRjaGluZ19yb3dzID0gZmFsc2U7CiAKICAgICAgICAgICAvLyBX ZSBkbyBub3QgYWxsb3cgdG8gY2FsbCB0aGUgc3RhcnQgbXVsdGlwbGUgdGltZXMuCiAgICAgICAg ICAgaWYgKHNlbGYuZ3JpZFZpZXcpCkBAIC0xNTAzLDYgKzE2MDQsOCBAQCBkZWZpbmUoWwogICAg ICAgICAgIHNlbGYucm93c190b19kaXNhYmxlID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgLy8g VGVtcG9yYXJpbHkgaG9sZCBuZXcgcm93cyBhZGRlZAogICAgICAgICAgIHNlbGYudGVtcF9uZXdf cm93cyA9IG5ldyBBcnJheSgpOworICAgICAgICAgIHNlbGYuaGFzX21vcmVfcm93cyA9IGZhbHNl OworICAgICAgICAgIHNlbGYuZmV0Y2hpbmdfcm93cyA9IGZhbHNlOwogCiAgICAgICAgICAgc2Vs Zi50cmlnZ2VyKAogICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpz aG93JywKQEAgLTE1ODEsNDUgKzE2ODQsMTQgQEAgZGVmaW5lKFsKICAgICAgICAgICB9KTsKICAg ICAgICAgfSwKIAotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1ha2VzIHRoZSBhamF4IGNhbGwg dG8gZmV0Y2ggY29sdW1ucyBmb3IgbGFzdCBhc3luYyBxdWVyeSwKLSAgICAgICAgZ2V0X2NvbHVt bnM6IGZ1bmN0aW9uKHBvbGxfcmVzdWx0KSB7Ci0gICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwot ICAgICAgICAgIC8vIENoZWNrIHRoZSBmbGFnIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBmZXRj aCBjb2x1bW5zIGZyb20gc2VydmVyCi0gICAgICAgICAgLy8gb3IgdXNlIHRoZSBjb2x1bW5zIGRh dGEgc3RvcmVkIGxvY2FsbHkgZnJvbSBwcmV2aW91cyBjYWxsPwotICAgICAgICAgIGlmIChzZWxm LkZFVENIX0NPTFVNTlNfRlJPTV9TRVJWRVIpIHsKLSAgICAgICAgICAgICQuYWpheCh7Ci0gICAg ICAgICAgICAgIHVybDogdXJsX2Zvcignc3FsZWRpdG9yLmdldF9jb2x1bW5zJywgeyd0cmFuc19p ZCc6IHNlbGYudHJhbnNJZH0pLAotICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLAotICAgICAg ICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKLSAgICAgICAgICAgICAgICBwb2xsX3Jl c3VsdC5jb2xpbmZvID0gcmVzLmRhdGEuY29sdW1uczsKLSAgICAgICAgICAgICAgICBwb2xsX3Jl c3VsdC5wcmltYXJ5X2tleXMgPSByZXMuZGF0YS5wcmltYXJ5X2tleXM7Ci0gICAgICAgICAgICAg ICAgc2VsZi5jYWxsX3JlbmRlcl9hZnRlcl9wb2xsKHBvbGxfcmVzdWx0KTsKLSAgICAgICAgICAg ICAgICAvLyBTZXQgYSBmbGFnIHRvIGdldCBjb2x1bW5zIHRvIGZhbHNlICYgc2V0IHRoZSB2YWx1 ZSBmb3IgZnV0dXJlIHVzZQotICAgICAgICAgICAgICAgIHNlbGYuRkVUQ0hfQ09MVU1OU19GUk9N X1NFUlZFUiA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHNlbGYuQ09MVU1OU19EQVRBID0gcmVz OwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgewot ICAgICAgICAgICAgICAgIHZhciBtc2cgPSBlLnJlc3BvbnNlVGV4dDsKLSAgICAgICAgICAgICAg ICBpZiAoZS5yZXNwb25zZUpTT04gIT0gdW5kZWZpbmVkICYmIGUucmVzcG9uc2VKU09OLmVycm9y bXNnICE9IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICAgIG1zZyA9IGUucmVzcG9uc2VKU09O LmVycm9ybXNnOwotICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuZXJyb3IobXNnLCA1KTsKLSAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIC8vIFVzZSB0aGUgcHJldmlvdXNseSBzYXZlZCBjb2x1bW5zIGRhdGEKLSAgICAgICAg ICAgIHBvbGxfcmVzdWx0LmNvbGluZm8gPSBzZWxmLkNPTFVNTlNfREFUQS5kYXRhLmNvbHVtbnM7 Ci0gICAgICAgICAgICBwb2xsX3Jlc3VsdC5wcmltYXJ5X2tleXMgPSBzZWxmLkNPTFVNTlNfREFU QS5kYXRhLnByaW1hcnlfa2V5czsKLSAgICAgICAgICAgIHNlbGYuY2FsbF9yZW5kZXJfYWZ0ZXJf cG9sbChwb2xsX3Jlc3VsdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9LAotCiAgICAgICAgIC8v IFRoaXMgaXMgYSB3cmFwcGVyIHRvIGNhbGwgX3JlbmRlciBmdW5jdGlvbgogICAgICAgICAvLyBX ZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBoYXZlIHNlcGFyYXRlZCBjb2x1bW5zIHJvdXRlICYgcmVz dWx0IHJvdXRlCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY29tYmluZSBib3RoIHJlc3VsdCBoZXJl IGluIHdyYXBwZXIgYmVmb3JlIHJlbmRlcmluZyBncmlkCiAgICAgICAgIGNhbGxfcmVuZGVyX2Fm dGVyX3BvbGw6IGZ1bmN0aW9uKHJlcykgewogICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKICAg ICAgICAgICBzZWxmLnF1ZXJ5X2VuZF90aW1lID0gbmV3IERhdGUoKTsKLSAgICAgICAgICBzZWxm LnJvd3NfYWZmZWN0ZWQgPSByZXMucm93c19hZmZlY3RlZDsKKyAgICAgICAgICBzZWxmLnJvd3Nf YWZmZWN0ZWQgPSByZXMucm93c19hZmZlY3RlZCwKKyAgICAgICAgICBzZWxmLmhhc19tb3JlX3Jv d3MgPSByZXMuaGFzX21vcmVfcm93czsKIAogICAgICAgICAgIC8qIElmIG5vIGNvbHVtbiBpbmZv cm1hdGlvbiBpcyBhdmFpbGFibGUgaXQgbWVhbnMgcXVlcnkKICAgICAgICAgICAgICBydW5zIHN1 Y2Nlc3NmdWxseSB3aXRoIG5vIHJlc3VsdCB0byBkaXNwbGF5LiBJbiB0aGlzCkBAIC0xNjY4LDcg KzE3NDAsOCBAQCBkZWZpbmUoWwogICAgICAgICAgICAgICAgICAgICAgICdwZ2FkbWluLXNxbGVk aXRvcjpsb2FkaW5nLWljb246bWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4 dCgiTG9hZGluZyBkYXRhIGZyb20gdGhlIGRhdGFiYXNlIHNlcnZlciBhbmQgcmVuZGVyaW5nLi4u IikKICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRf Y29sdW1ucyhyZXMuZGF0YSk7CisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsX3JlbmRl cl9hZnRlcl9wb2xsKHJlcy5kYXRhKTsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gJ0J1c3knKSB7CiAgICAgICAgICAg ICAgICAgICAgIC8vIElmIHN0YXR1cyBpcyBCdXN5IHRoZW4gcG9sbCB0aGUgcmVzdWx0IGJ5IHJl Y3Vyc2l2ZSBjYWxsIHRvIHRoZSBwb2xsIGZ1bmN0aW9uCkBAIC0xNzI4LDYgKzE4MDEsNyBAQCBk ZWZpbmUoWwogICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICAgICBzZWxmLmNvbGlu Zm8gPSBkYXRhLmNvbF9pbmZvOwogICAgICAgICAgIHNlbGYucHJpbWFyeV9rZXlzID0gZGF0YS5w cmltYXJ5X2tleXM7CisgICAgICAgICAgc2VsZi5jbGllbnRfcHJpbWFyeV9rZXkgPSBkYXRhLmNs aWVudF9wcmltYXJ5X2tleTsKICAgICAgICAgICBzZWxmLmNlbGxfc2VsZWN0ZWQgPSBmYWxzZTsK ICAgICAgICAgICBzZWxmLnNlbGVjdGVkX21vZGVsID0gbnVsbDsKICAgICAgICAgICBzZWxmLmNo YW5nZWRNb2RlbHMgPSBbXTsKQEAgLTE3ODAsNyArMTg1NCw3IEBAIGRlZmluZShbCiAgICAgICAg ICAgICAgIHNlbGYudG90YWxfdGltZSA9IHNlbGYuZ2V0X3F1ZXJ5X3J1bl90aW1lKHNlbGYucXVl cnlfc3RhcnRfdGltZSwgc2VsZi5xdWVyeV9lbmRfdGltZSk7CiAgICAgICAgICAgICAgIHNlbGYu dXBkYXRlX21zZ19oaXN0b3J5KHRydWUsICIiLCBmYWxzZSk7CiAgICAgICAgICAgICAgIHZhciBt c2cxID0gUyhnZXR0ZXh0KCJUb3RhbCBxdWVyeSBydW50aW1lOiAlcy4iKSkuc3ByaW50ZihzZWxm LnRvdGFsX3RpbWUpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgIHZhciBtc2cyID0gUyhnZXR0ZXh0 KCIlcyByb3dzIHJldHJpZXZlZC4iKSkuc3ByaW50ZihzZWxmLnJvd3NfYWZmZWN0ZWQpLnZhbHVl KCk7CisgICAgICAgICAgICAgIHZhciBtc2cyID0gUyhnZXR0ZXh0KCIlcyByb3dzIGFmZmVjdGVk LiIpKS5zcHJpbnRmKHNlbGYucm93c19hZmZlY3RlZCkudmFsdWUoKTsKIAogICAgICAgICAgICAg ICAvLyBEaXNwbGF5IHRoZSBub3RpZmllciBpZiB0aGUgdGltZW91dCBpcyBzZXQgdG8gPj0gMAog ICAgICAgICAgICAgICBpZiAoc2VsZi5pbmZvX25vdGlmaWVyX3RpbWVvdXQgPj0gMCkgewpAQCAt MTgxNiw3ICsxODkwLDggQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KAog ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlbGYu Z3JpZFZpZXcucmVuZGVyX2dyaWQoCi0gICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl9kYXRh X2FycmF5LCBzZWxmLmNvbHVtbnMsIHNlbGYuY2FuX2VkaXQKKyAgICAgICAgICAgICAgICAgICAg ICBleHBsYWluX2RhdGFfYXJyYXksIHNlbGYuY29sdW1ucywgc2VsZi5jYW5fZWRpdCwKKyAgICAg ICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9wcmltYXJ5X2tleQogICAgICAgICAgICAgICAg ICAgICApOwogICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgLSB0aGUgJ0V4cGxhaW4n IHBhbmVsIGlzIHZpc2libGUsIGJlZm9yZSAtIHdlCiAgICAgICAgICAgICAgICAgICAgIC8vIHN0 YXJ0IHJlbmRlcmluZyB0aGUgZ3JpZC4KQEAgLTE4MzIsNyArMTkwNyw4IEBAIGRlZmluZShbCiAg ICAgICAgICAgICAgICAgc2VsZi5ncmlkVmlldy5kYXRhX291dHB1dF9wYW5lbC5mb2N1cygpOwog ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoCiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigp IHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5ncmlkVmlldy5yZW5kZXJfZ3JpZChkYXRhLnJl c3VsdCwgc2VsZi5jb2x1bW5zLCBzZWxmLmNhbl9lZGl0KTsKKyAgICAgICAgICAgICAgICAgICAg c2VsZi5ncmlkVmlldy5yZW5kZXJfZ3JpZChkYXRhLnJlc3VsdCwgc2VsZi5jb2x1bW5zLAorICAg ICAgICAgICAgICAgICAgICBzZWxmLmNhbl9lZGl0LCBzZWxmLmNsaWVudF9wcmltYXJ5X2tleSwg ZGF0YS5yb3dzX2FmZmVjdGVkKTsKICAgICAgICAgICAgICAgICAgIH0sIDEwCiAgICAgICAgICAg ICAgICAgKTsKICAgICAgICAgICAgICAgfQpAQCAtMTg0MCwxMzggKzE5MTYsMTE0IEBAIGRlZmlu ZShbCiAgICAgICAgICAgICAgIC8vIEhpZGUgdGhlIGxvYWRpbmcgaWNvbgogICAgICAgICAgICAg ICBzZWxmLnRyaWdnZXIoJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRlJyk7CiAg ICAgICAgICAgICAgICQoIiNidG4tZmxhc2giKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKLSAg ICAgICAgICAgIH0uYmluZChzZWxmKSwKLSAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAg ICAgICAgICB0aGlzLnRyaWdnZXIoJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRl Jyk7Ci0gICAgICAgICAgICAgICQoIiNidG4tZmxhc2giKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNl KTsKICAgICAgICAgICAgIH0uYmluZChzZWxmKQogICAgICAgICAgICk7CiAgICAgICAgIH0sCiAK ICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBjb2x1bW5zIGFzIHJlcXVpcmVk IGJ5IHRoZSBiYWNrZ3JpZAotICAgICAgICBfZmV0Y2hfY29sdW1uX21ldGFkYXRhOiBmdW5jdGlv bihkYXRhLCBjYiwgX2ZhaWwpIHsKKyAgICAgICAgX2ZldGNoX2NvbHVtbl9tZXRhZGF0YTogZnVu Y3Rpb24oZGF0YSwgY2IpIHsKICAgICAgICAgICB2YXIgY29saW5mbyA9IGRhdGEuY29saW5mbywK ICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzID0gZGF0YS5wcmltYXJ5X2tleXMsCiAgICAgICAg ICAgICAgIHJlc3VsdCA9IGRhdGEucmVzdWx0LAogICAgICAgICAgICAgICBjb2x1bW5zID0gW10s CiAgICAgICAgICAgICAgIHNlbGYgPSB0aGlzOworICAgICAgICAgIC8vIFN0b3JlIHBnX3R5cGVz IGluIGFuIGFycmF5CisgICAgICAgICAgdmFyIHBnX3R5cGVzID0gbmV3IEFycmF5KCk7CisgICAg ICAgICAgXy5lYWNoKGRhdGEudHlwZXMsIGZ1bmN0aW9uKHIpIHsKKyAgICAgICAgICAgIHBnX3R5 cGVzW3Iub2lkXSA9IFtyLnR5cG5hbWVdOworICAgICAgICAgIH0pOwogCi0gICAgICAgICAgc2Vs Zi50cmlnZ2VyKAotICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpt ZXNzYWdlJywKLSAgICAgICAgICAgIGdldHRleHQoIlJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGNvbHVtbnMgcmV0dXJuZWQuLi4iKQotICAgICAgICAgICk7Ci0KLSAgICAgICAgICAv LyBNYWtlIGFqYXggY2FsbCB0byBmZXRjaCB0aGUgcGcgdHlwZXMgdG8gbWFwIG51bWVyaWMgZGF0 YSB0eXBlCi0gICAgICAgICAgJC5hamF4KHsKLSAgICAgICAgICAgIHVybDogdXJsX2Zvcignc3Fs ZWRpdG9yLmZldGNoX3R5cGVzJywgeyd0cmFuc19pZCc6IHNlbGYudHJhbnNJZH0pLAotICAgICAg ICAgICAgbWV0aG9kOiAnR0VUJywKLSAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykg ewotICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAg Ly8gU3RvcmUgcGdfdHlwZXMgaW4gYW4gYXJyYXkKLSAgICAgICAgICAgICAgICB2YXIgcGdfdHlw ZXMgPSBuZXcgQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBfLmVhY2gocmVzLmRhdGEucmVzdWx0 LnJvd3MsIGZ1bmN0aW9uKHIpIHsKLSAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3Iub2lkXSA9 IFtyLnR5cG5hbWVdOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgLy8g Q3JlYXRlIGNvbHVtbnMgcmVxdWlyZWQgYnkgYmFja2dyaWQgdG8gcmVuZGVyCi0gICAgICAgICAg ICAgICAgXy5lYWNoKGNvbGluZm8sIGZ1bmN0aW9uKGMpIHsKLSAgICAgICAgICAgICAgICAgIHZh ciBpc19wcmltYXJ5X2tleSA9IGZhbHNlOworICAgICAgICAgIC8vIENyZWF0ZSBjb2x1bW5zIHJl cXVpcmVkIGJ5IHNsaWNrIGdyaWQgdG8gcmVuZGVyCisgICAgICAgICAgXy5lYWNoKGNvbGluZm8s IGZ1bmN0aW9uKGMpIHsKKyAgICAgICAgICAgIHZhciBpc19wcmltYXJ5X2tleSA9IGZhbHNlOwog Ci0gICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRhYmxlIGhhdmUgcHJpbWFyeSBr ZXkKLSAgICAgICAgICAgICAgICAgIGlmIChfLnNpemUocHJpbWFyeV9rZXlzKSA+IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgXy5lYWNoKHByaW1hcnlfa2V5cywgZnVuY3Rpb24gKHZhbHVlLCBr ZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBjLm5hbWUpCi0gICAgICAg ICAgICAgICAgICAgICAgICBpc19wcmltYXJ5X2tleSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg ICAgIH0pOwotICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhl ciB0YWJsZSBoYXZlIHByaW1hcnkga2V5CisgICAgICAgICAgICBpZiAoXy5zaXplKHByaW1hcnlf a2V5cykgPiAwKSB7CisgICAgICAgICAgICAgIF8uZWFjaChwcmltYXJ5X2tleXMsIGZ1bmN0aW9u ICh2YWx1ZSwga2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gYy5uYW1lKQorICAg ICAgICAgICAgICAgICAgaXNfcHJpbWFyeV9rZXkgPSB0cnVlOworICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgLy8gVG8gc2hvdyBjb2x1bW4gbGFi ZWwgYW5kIGRhdGEgdHlwZSBpbiBtdWx0aWxpbmUsCi0gICAgICAgICAgICAgICAgICAvLyBUaGUg ZWxlbWVudHMgc2hvdWxkIGJlIHB1dCBpbnNpZGUgdGhlIGRpdi4KLSAgICAgICAgICAgICAgICAg IC8vIENyZWF0ZSBjb2x1bW4gbGFiZWwgYW5kIHR5cGUuCi0gICAgICAgICAgICAgICAgICB2YXIg Y29sX3R5cGUgPSAnJywKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uX2xhYmVsID0gJycsCi0g ICAgICAgICAgICAgICAgICAgIGNvbF9jZWxsOwotICAgICAgICAgICAgICAgICAgdmFyIHR5cGUg PSBwZ190eXBlc1tjLnR5cGVfY29kZV0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX3R5cGVzW2MudHlwZV9jb2RlXVswXSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB1c2VyIG1pZ2h0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gaGF2ZSB1c2UgY2FzdGluZyBzbyB3ZSB3aWxsIHVzZSB0eXBlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYnkgY2FzdCBmdW5jdGlv bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3BnX3R5cGVzLmxlbmd0 aCAtIDFdWzBdID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3Bn X3R5cGVzLmxlbmd0aCAtIDFdWzBdIDogJ3Vua25vd24nOwotCi0gICAgICAgICAgICAgICAgICBp ZiAoIWlzX3ByaW1hcnlfa2V5KQotICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZSArPSAnICcg KyB0eXBlOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjb2xf dHlwZSArPSAnIFtQS10gJyArIHR5cGU7CisgICAgICAgICAgICAvLyBUbyBzaG93IGNvbHVtbiBs YWJlbCBhbmQgZGF0YSB0eXBlIGluIG11bHRpbGluZSwKKyAgICAgICAgICAgIC8vIFRoZSBlbGVt ZW50cyBzaG91bGQgYmUgcHV0IGluc2lkZSB0aGUgZGl2LgorICAgICAgICAgICAgLy8gQ3JlYXRl IGNvbHVtbiBsYWJlbCBhbmQgdHlwZS4KKyAgICAgICAgICAgIHZhciBjb2xfdHlwZSA9IGNvbHVt bl9sYWJlbCA9ICcnOworICAgICAgICAgICAgdmFyIHR5cGUgPSBwZ190eXBlc1tjLnR5cGVfY29k ZV0gPworICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW2MudHlwZV9jb2RlXVswXSA6 CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB1c2Vy IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB1c2UgY2FzdGluZyBzbyB3 ZSB3aWxsIHVzZSB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYnkg Y2FzdCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3BnX3R5cGVz Lmxlbmd0aCAtIDFdWzBdID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3Bn X3R5cGVzLmxlbmd0aCAtIDFdWzBdIDogJ3Vua25vd24nOworCisgICAgICAgICAgICBpZiAoIWlz X3ByaW1hcnlfa2V5KQorICAgICAgICAgICAgICBjb2xfdHlwZSArPSAnICcgKyB0eXBlOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBjb2xfdHlwZSArPSAnIFtQS10gJyArIHR5cGU7 CiAKLSAgICAgICAgICAgICAgICAgIGlmIChjLnByZWNpc2lvbiAmJiBjLnByZWNpc2lvbiA+PSAw ICYmIGMucHJlY2lzaW9uICE9IDY1NTM1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbF90eXBl ICs9ICcgKCcgKyBjLnByZWNpc2lvbjsKLSAgICAgICAgICAgICAgICAgICAgY29sX3R5cGUgKz0g Yy5zY2FsZSAmJiBjLnNjYWxlICE9IDY1NTM1ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJywnICsgYy5zY2FsZSArICcpJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJyknOwotICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMucHJlY2lzaW9u ICYmIGMucHJlY2lzaW9uID49IDAgJiYgYy5wcmVjaXNpb24gIT0gNjU1MzUpIHsKKyAgICAgICAg ICAgICAgY29sX3R5cGUgKz0gJyAoJyArIGMucHJlY2lzaW9uOworICAgICAgICAgICAgICBjb2xf dHlwZSArPSBjLnNjYWxlICYmIGMuc2NhbGUgIT0gNjU1MzUgPworICAgICAgICAgICAgICAgICAg ICAgICAgICAnLCcgKyBjLnNjYWxlICsgJyknOgorICAgICAgICAgICAgICAgICAgICAgICAgICAn KSc7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgIC8vIElkZW50aWZ5IGNlbGwg dHlwZSBvZiBjb2x1bW4uCi0gICAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAg ICAgICAgICAgICAgICBjYXNlICJqc29uIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAianNv bltdIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAianNvbmIiOgotICAgICAgICAgICAgICAg ICAgICBjYXNlICJqc29uYltdIjoKLSAgICAgICAgICAgICAgICAgICAgICBjb2xfY2VsbCA9ICdK c29uJzsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg Y2FzZSAic21hbGxpbnQiOgotICAgICAgICAgICAgICAgICAgICBjYXNlICJpbnRlZ2VyIjoKLSAg ICAgICAgICAgICAgICAgICAgY2FzZSAiYmlnaW50IjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz ZSAiZGVjaW1hbCI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIm51bWVyaWMiOgotICAgICAg ICAgICAgICAgICAgICBjYXNlICJyZWFsIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiZG91 YmxlIHByZWNpc2lvbiI6Ci0gICAgICAgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnbnVtYmVy JzsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz ZSAiYm9vbGVhbiI6Ci0gICAgICAgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnYm9vbGVhbic7 Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug ImNoYXJhY3RlciI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImNoYXJhY3RlcltdIjoKLSAg ICAgICAgICAgICAgICAgICAgY2FzZSAiY2hhcmFjdGVyIHZhcnlpbmciOgotICAgICAgICAgICAg ICAgICAgICBjYXNlICJjaGFyYWN0ZXIgdmFyeWluZ1tdIjoKLSAgICAgICAgICAgICAgICAgICAg ICBpZiAoYy5pbnRlcm5hbF9zaXplICYmIGMuaW50ZXJuYWxfc2l6ZSA+PSAwICYmIGMuaW50ZXJu YWxfc2l6ZSAhPSA2NTUzNSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNv bHVtbiB0eXBlIHRvIGRpc3BsYXkgbGVuZ3RoIG9uIGNvbHVtbiBoZWFkZXIKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNvbF90eXBlICs9ICcgKCcgKyBjLmludGVybmFsX3NpemUgKyAnKSc7Ci0g ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGNvbF9jZWxsID0g J3N0cmluZyc7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnc3RyaW5nJzsK LSAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElkZW50aWZ5IGNlbGwgdHlwZSBv ZiBjb2x1bW4uCisgICAgICAgICAgICBzd2l0Y2godHlwZSkgeworICAgICAgICAgICAgICBjYXNl ICJqc29uIjoKKyAgICAgICAgICAgICAgY2FzZSAianNvbltdIjoKKyAgICAgICAgICAgICAgY2Fz ZSAianNvbmIiOgorICAgICAgICAgICAgICBjYXNlICJqc29uYltdIjoKKyAgICAgICAgICAgICAg ICBjb2xfY2VsbCA9ICdKc29uJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSAic21hbGxpbnQiOgorICAgICAgICAgICAgICBjYXNlICJpbnRlZ2VyIjoKKyAgICAg ICAgICAgICAgY2FzZSAiYmlnaW50IjoKKyAgICAgICAgICAgICAgY2FzZSAiZGVjaW1hbCI6Cisg ICAgICAgICAgICAgIGNhc2UgIm51bWVyaWMiOgorICAgICAgICAgICAgICBjYXNlICJyZWFsIjoK KyAgICAgICAgICAgICAgY2FzZSAiZG91YmxlIHByZWNpc2lvbiI6CisgICAgICAgICAgICAgICAg Y29sX2NlbGwgPSAnbnVtYmVyJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSAiYm9vbGVhbiI6CisgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnYm9vbGVhbic7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgImNoYXJhY3RlciI6 CisgICAgICAgICAgICAgIGNhc2UgImNoYXJhY3RlcltdIjoKKyAgICAgICAgICAgICAgY2FzZSAi Y2hhcmFjdGVyIHZhcnlpbmciOgorICAgICAgICAgICAgICBjYXNlICJjaGFyYWN0ZXIgdmFyeWlu Z1tdIjoKKyAgICAgICAgICAgICAgICBpZiAoYy5pbnRlcm5hbF9zaXplICYmIGMuaW50ZXJuYWxf c2l6ZSA+PSAwICYmIGMuaW50ZXJuYWxfc2l6ZSAhPSA2NTUzNSkgeworICAgICAgICAgICAgICAg ICAgLy8gVXBkYXRlIGNvbHVtbiB0eXBlIHRvIGRpc3BsYXkgbGVuZ3RoIG9uIGNvbHVtbiBoZWFk ZXIKKyAgICAgICAgICAgICAgICAgIGNvbF90eXBlICs9ICcgKCcgKyBjLmludGVybmFsX3NpemUg KyAnKSc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbF9jZWxsID0gJ3N0 cmluZyc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnc3RyaW5nJzsKKyAgICAgICAgICAgIH0KIAotICAg ICAgICAgICAgICAgICAgY29sdW1uX2xhYmVsID0gYy5kaXNwbGF5X25hbWUgKyAnPGJyPicgKyBj b2xfdHlwZTsKLQotICAgICAgICAgICAgICAgICAgdmFyIGNvbCA9IHsKLSAgICAgICAgICAgICAg ICAgICAgJ25hbWUnOiBjLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwb3MnOiBjLnBvcywK LSAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogY29sdW1uX2xhYmVsLAotICAgICAgICAgICAg ICAgICAgICAnY2VsbCc6IGNvbF9jZWxsLAotICAgICAgICAgICAgICAgICAgICAnY2FuX2VkaXQn OiBzZWxmLmNhbl9lZGl0LAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6IHR5cGUsCi0gICAg ICAgICAgICAgICAgICAgICdkaXNwbGF5X25hbWUnOiBjLmRpc3BsYXlfbmFtZSwKLSAgICAgICAg ICAgICAgICAgICAgJ2NvbHVtbl90eXBlJzogY29sX3R5cGUsCi0gICAgICAgICAgICAgICAgICAg ICdub3RfbnVsbCc6IGMubm90X251bGwsCi0gICAgICAgICAgICAgICAgICAgICdoYXNfZGVmYXVs dF92YWwnOiBjLmhhc19kZWZhdWx0X3ZhbAotICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg ICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgYWxlcnRpZnku YWxlcnQoJ0ZldGNoaW5nIFR5cGUgRXJyb3InLCByZXMuZGF0YS5yZXN1bHQpOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIHNlbGYuY29sdW1ucyA9IGNvbHVtbnM7Ci0gICAgICAgICAg ICAgIGlmIChjYiAmJiB0eXBlb2YoY2IpID09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAg ICBjYigpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZmFp bDogX2ZhaWwKKyAgICAgICAgICAgIGNvbHVtbl9sYWJlbCA9IGMuZGlzcGxheV9uYW1lICsgJzxi cj4nICsgY29sX3R5cGU7CisKKyAgICAgICAgICAgIHZhciBjb2wgPSB7CisgICAgICAgICAgICAg ICduYW1lJzogYy5uYW1lLAorICAgICAgICAgICAgICAnZGlzcGxheV9uYW1lJzogYy5kaXNwbGF5 X25hbWUsCisgICAgICAgICAgICAgICdjb2x1bW5fdHlwZSc6IGNvbF90eXBlLAorICAgICAgICAg ICAgICAncG9zJzogYy5wb3MsCisgICAgICAgICAgICAgICdsYWJlbCc6IGNvbHVtbl9sYWJlbCwK KyAgICAgICAgICAgICAgJ2NlbGwnOiBjb2xfY2VsbCwKKyAgICAgICAgICAgICAgJ2Nhbl9lZGl0 Jzogc2VsZi5jYW5fZWRpdCwKKyAgICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLAorICAgICAgICAg ICAgICAnbm90X251bGwnOiBjLm5vdF9udWxsLAorICAgICAgICAgICAgICAnaGFzX2RlZmF1bHRf dmFsJzogYy5oYXNfZGVmYXVsdF92YWwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb2x1 bW5zLnB1c2goY29sKTsKICAgICAgICAgICB9KTsKKworICAgICAgICAgIHNlbGYuY29sdW1ucyA9 IGNvbHVtbnM7CisgICAgICAgICAgaWYgKGNiICYmIHR5cGVvZihjYikgPT0gJ2Z1bmN0aW9uJykg eworICAgICAgICAgICAgY2IoKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0sCiAKICAgICAgICAg Ly8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJhaXNlIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCkBA IC0xOTgyLDIyICsyMDM0LDIxIEBAIGRlZmluZShbCiAKICAgICAgICAgICBzZWxmLmdyaWRWaWV3 Lm1lc3NhZ2VzX3BhbmVsLmZvY3VzKCk7CiAKLSAgICAgICAgICBpZiAoc2VsZi5pc19xdWVyeV90 b29sKSB7Ci0gICAgICAgICAgICBpZiAoY2xlYXJfZ3JpZCkgewotICAgICAgICAgICAgICAvLyBE ZWxldGUgZ3JpZAotICAgICAgICAgICAgICBpZiAoc2VsZi5ncmlkVmlldy5oYW5kbGVyLnNsaWNr Z3JpZCkgewotICAgICAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcuaGFuZGxlci5zbGlja2dyaWQu ZGVzdHJveSgpOwotCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gTWlzYyBjbGVh bmluZwotICAgICAgICAgICAgICBzZWxmLmNvbHVtbnMgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAg ICAgIHNlbGYuY29sbGVjdGlvbiA9IHVuZGVmaW5lZDsKKyAgICAgICAgICBpZiAoY2xlYXJfZ3Jp ZCkgeworICAgICAgICAgICAgLy8gRGVsZXRlIGdyaWQKKyAgICAgICAgICAgIGlmIChzZWxmLmdy aWRWaWV3LmhhbmRsZXIuc2xpY2tncmlkKSB7CisgICAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcu aGFuZGxlci5zbGlja2dyaWQuZGVzdHJveSgpOwogCi0gICAgICAgICAgICAgICQoJy5zcWwtZWRp dG9yLW1lc3NhZ2UnKS50ZXh0KG1zZyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAkKCcuc3FsLWVkaXRvci1tZXNzYWdlJykuYXBwZW5kKG1zZyk7CiAgICAgICAgICAgICB9 CisgICAgICAgICAgICAvLyBNaXNjIGNsZWFuaW5nCisgICAgICAgICAgICBzZWxmLmNvbHVtbnMg PSB1bmRlZmluZWQ7CisgICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSB1bmRlZmluZWQ7CisK KyAgICAgICAgICAgICQoJy5zcWwtZWRpdG9yLW1lc3NhZ2UnKS50ZXh0KG1zZyk7CisgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQoJy5zcWwtZWRpdG9yLW1lc3NhZ2UnKS5hcHBlbmQo bXNnKTsKICAgICAgICAgICB9CisKICAgICAgICAgICAvLyBTY3JvbGwgYXV0b21hdGljYWxseSB3 aGVuIG1zZ3MgYXBwZW5kcyB0byBlbGVtZW50CiAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv bigpewogICAgICAgICAgICAgJCgiLnNxbC1lZGl0b3ItbWVzc2FnZSIpLnNjcm9sbFRvcCgkKCIu c3FsLWVkaXRvci1tZXNzYWdlIilbMF0uc2Nyb2xsSGVpZ2h0KTs7CkBAIC0yMDUyLDcgKzIxMDMs NyBAQCBkZWZpbmUoWwogCiAgICAgICAgIHJvd3NfdG9fZGVsZXRlOiBmdW5jdGlvbihkYXRhKSB7 CiAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgICAgICAgdG1wX2tleXMgPSBzZWxm LmdldF9yb3dfcHJpbWFyeV9rZXkuY2FsbChzZWxmKTsKKyAgICAgICAgICAgIHRtcF9rZXlzID0g c2VsZi5wcmltYXJ5X2tleXM7CiAKICAgICAgICAgICAvLyByZS1jYWxjdWxhdGUgcm93cyB3aXRo IG5vIHByaW1hcnkga2V5cwogICAgICAgICAgIHNlbGYudGVtcF9uZXdfcm93cyA9IFtdOwpAQCAt MjA2NSw3ICsyMTE2LDYgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgc2VsZi50ZW1wX25ld19y b3dzLnB1c2goaWR4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9KTsKLSAgICAgICAgICBk YXRhLmdldEl0ZW1NZXRhZGF0YSA9IHNlbGYuZGF0YV92aWV3LmdldEl0ZW1NZXRhZGF0YTsKICAg ICAgICAgICBzZWxmLnJvd3NfdG9fZGlzYWJsZSA9IF8uY2xvbmUoc2VsZi50ZW1wX25ld19yb3dz KTsKICAgICAgICAgfSwKIApAQCAtMjA3Niw2OSArMjEyNiw3MyBAQCBkZWZpbmUoWwogICAgICAg ICAgICAgICBpc19hZGRlZCA9IF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUuYWRkZWQpLAogICAgICAg ICAgICAgICBpc191cGRhdGVkID0gXy5zaXplKHNlbGYuZGF0YV9zdG9yZS51cGRhdGVkKTsKIAot ICAgICAgICAgICAgICAvLyBSZW1vdmUgbmV3bHkgYWRkZWQgcm93cyBmcm9tIHN0YWdlZCByb3dz IGFzIHdlIGRvbid0IHdhbnQgdG8gc2VuZCB0aGVtIG9uIHNlcnZlcgotICAgICAgICAgICAgICBp Zihpc19hZGRlZCkgewotICAgICAgICAgICAgICAgICAgXy5lYWNoKHNlbGYuZGF0YV9zdG9yZS5h ZGRlZCwgZnVuY3Rpb24odmFsLCBrZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoa2V5IGlu IHNlbGYuZGF0YV9zdG9yZS5zdGFnZWRfcm93cykgewotICAgICAgICAgICAgICAgICAgICAgIC8v IFJlbW92ZSB0aGUgcm93IGZyb20gZGF0YSBzdG9yZSBzbyB0aGF0IHdlIGRvIG5vdCBzZW5kIGl0 IG9uIHNlcnZlcgotICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRfa2V5cy5wdXNoKGtleSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuZGF0YV9zdG9yZS5zdGFnZWRfcm93 c1trZXldOwotICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmRhdGFfc3RvcmUuYWRk ZWRba2V5XQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAvLyBSZW1vdmUgbmV3bHkgYWRkZWQgcm93cyBmcm9tIHN0YWdlZCByb3dzIGFzIHdl IGRvbid0IHdhbnQgdG8gc2VuZCB0aGVtIG9uIHNlcnZlcgorICAgICAgICAgIGlmKGlzX2FkZGVk KSB7CisgICAgICAgICAgICBfLmVhY2goc2VsZi5kYXRhX3N0b3JlLmFkZGVkLCBmdW5jdGlvbih2 YWwsIGtleSkgeworICAgICAgICAgICAgICBpZihrZXkgaW4gc2VsZi5kYXRhX3N0b3JlLnN0YWdl ZF9yb3dzKSB7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSByb3cgZnJvbSBkYXRhIHN0 b3JlIHNvIHRoYXQgd2UgZG8gbm90IHNlbmQgaXQgb24gc2VydmVyCisgICAgICAgICAgICAgICAg ZGVsZXRlZF9rZXlzLnB1c2goa2V5KTsKKyAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5kYXRh X3N0b3JlLnN0YWdlZF9yb3dzW2tleV07CisgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuZGF0 YV9zdG9yZS5hZGRlZFtrZXldOworICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmRhdGFfc3Rv cmUuYWRkZWRfaW5kZXhba2V5XTsKICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8v IElmIG9ubHkgbmV3bHkgcm93cyB0byBkZWxldGUgYW5kIG5vIGRhdGEgaXMgdGhlcmUgdG8gc2Vu ZCBvbiBzZXJ2ZXIKLSAgICAgICAgICAgICAgLy8gdGhlbiBqdXN0IHJlLXJlbmRlciB0aGUgZ3Jp ZAotICAgICAgICAgICAgICBpZihfLnNpemUoc2VsZi5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKSA9 PSAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGdyaWQgPSBzZWxmLnNsaWNrZ3JpZCwgZGF0YSA9 IGdyaWQuZ2V0RGF0YSgpLCBpZHggPSAwOwotICAgICAgICAgICAgICAgICAgaWYoZGVsZXRlZF9r ZXlzLmxlbmd0aCl7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBuZXcgcm93cyBmcm9t IGdyaWQgZGF0YSB1c2luZyBkZWxldGVkIGtleXMKLSAgICAgICAgICAgICAgICAgICBkYXRhID0g Xy5yZWplY3QoZGF0YSwgZnVuY3Rpb24oZCl7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4g KGQgJiYgXy5pbmRleE9mKGRlbGV0ZWRfa2V5cywgZC5fX3RlbXBfUEspID4gLTEpCi0gICAgICAg ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBz ZWxmLnJvd3NfdG9fZGVsZXRlLmFwcGx5KHNlbGYsIFtkYXRhXSk7Ci0gICAgICAgICAgICAgICAg ICBncmlkLnJlc2V0QWN0aXZlQ2VsbCgpOwotICAgICAgICAgICAgICAgICAgZ3JpZC5zZXREYXRh KGRhdGEsIHRydWUpOwotICAgICAgICAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3MoW10p OwotICAgICAgICAgICAgICAgICAgZ3JpZC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICAgICAg ICAvLyBOb3RoaW5nIHRvIGNvcHkgb3IgZGVsZXRlIGhlcmUKLSAgICAgICAgICAgICAgICAgICQo IiNidG4tZGVsZXRlLXJvdyIpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Ci0gICAgICAgICAgICAg ICAgICAkKCIjYnRuLWNvcHktcm93IikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKLSAgICAgICAg ICAgICAgICAgIGlmKF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUuYWRkZWQpIHx8IGlzX3VwZGF0ZWQp IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGRpc2FibGUgc2F2ZSBidXR0b24gaWYg dGhlcmUgYXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFueSBvdGhlciBjaGFuZ2VzIHByZXNl bnQgaW4gZ3JpZCBkYXRhCi0gICAgICAgICAgICAgICAgICAgICQoIiNidG4tc2F2ZSIpLnByb3Ao J2Rpc2FibGVkJywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgJCgiI2J0bi1zYXZlIikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKLSAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MoZ2V0dGV4 dCgiUm93KHMpIGRlbGV0ZWQiKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9CisgICAg ICAgICAgLy8gSWYgb25seSBuZXdseSByb3dzIHRvIGRlbGV0ZSBhbmQgbm8gZGF0YSBpcyB0aGVy ZSB0byBzZW5kIG9uIHNlcnZlcgorICAgICAgICAgIC8vIHRoZW4ganVzdCByZS1yZW5kZXIgdGhl IGdyaWQKKyAgICAgICAgICBpZihfLnNpemUoc2VsZi5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKSA9 PSAwKSB7CisgICAgICAgICAgICAgIHZhciBncmlkID0gc2VsZi5zbGlja2dyaWQsCisgICAgICAg ICAgICAgIGRhdGFWaWV3ID0gZ3JpZC5nZXREYXRhKCksCisgICAgICAgICAgICAgIGRhdGEgPSBk YXRhVmlldy5nZXRJdGVtcygpLAorICAgICAgICAgICAgICBpZHggPSAwOworCisgICAgICAgICAg ICAgIGdyaWQucmVzZXRBY3RpdmVDZWxsKCk7CisKKyAgICAgICAgICAgICAgZGF0YVZpZXcuYmVn aW5VcGRhdGUoKTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVkX2tl eXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBkYXRhVmlldy5kZWxldGVJdGVtKGRl bGV0ZWRfa2V5c1tpXSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZGF0YVZpZXcu ZW5kVXBkYXRlKCk7CisgICAgICAgICAgICAgIHNlbGYucm93c190b19kZWxldGUuYXBwbHkoc2Vs ZiwgW2RhdGFWaWV3LmdldEl0ZW1zKCldKTsKKyAgICAgICAgICAgICAgZ3JpZC5yZXNldEFjdGl2 ZUNlbGwoKTsKKyAgICAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3MoW10pOworICAgICAg ICAgICAgICBncmlkLmludmFsaWRhdGUoKTsKKworICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRv IGNvcHkgb3IgZGVsZXRlIGhlcmUKKyAgICAgICAgICAgICAgJCgiI2J0bi1kZWxldGUtcm93Iiku cHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAgICAgICAgICAgJCgiI2J0bi1jb3B5LXJvdyIp LnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICAgICAgIGlmKF8uc2l6ZShzZWxmLmRh dGFfc3RvcmUuYWRkZWQpIHx8IGlzX3VwZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBEbyBu b3QgZGlzYWJsZSBzYXZlIGJ1dHRvbiBpZiB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICAvLyBh bnkgb3RoZXIgY2hhbmdlcyBwcmVzZW50IGluIGdyaWQgZGF0YQorICAgICAgICAgICAgICAgICQo IiNidG4tc2F2ZSIpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOwogICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBvdGhlciBkYXRhIHRvIG5lZWRzIHRv IGJlIHVwZGF0ZWQgb24gc2VydmVyCi0gICAgICAgICAgICAgICAgaWYoaXNfdXBkYXRlZCkgewot ICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgiT3BlcmF0aW9uIGZhaWxl ZCIpLAorICAgICAgICAgICAgICAgICQoIiNidG4tc2F2ZSIpLnByb3AoJ2Rpc2FibGVkJywgdHJ1 ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhnZXR0 ZXh0KCJSb3cocykgZGVsZXRlZCIpKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg Ly8gVGhlcmUgYXJlIG90aGVyIGRhdGEgdG8gbmVlZHMgdG8gYmUgdXBkYXRlZCBvbiBzZXJ2ZXIK KyAgICAgICAgICAgIGlmKGlzX3VwZGF0ZWQpIHsKKyAgICAgICAgICAgICAgYWxlcnRpZnkuYWxl cnQoZ2V0dGV4dCgiT3BlcmF0aW9uIGZhaWxlZCIpLAogICAgICAgICAgICAgICAgICAgICBnZXR0 ZXh0KCJUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIGluIGdyaWQsIFBsZWFzZSBzYXZlIHRoZW0g Zmlyc3QgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSBpbiBkYXRhIikKICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGFsZXJ0aWZ5LmNvbmZpcm0oZ2V0dGV4dCgiRGVsZXRlIFJvdyhzKSIpLAorICAg ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhbGVydGlmeS5j b25maXJtKGdldHRleHQoIkRlbGV0ZSBSb3cocykiKSwKICAgICAgICAgICAgICAgICAgIGdldHRl eHQoIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBkZWxldGUgc2VsZWN0ZWQgcm93KHMpPyIpLAot ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoIiNi dG4tZGVsZXRlLXJvdyIpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAg ICAgICQoIiNidG4tY29weS1yb3ciKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOwotICAgICAgICAg ICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYu ZGF0YV9zdG9yZS5kZWxldGVkID0gc2VsZi5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzOwotICAgICAg ICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUuc3RhZ2VkX3Jvd3MgPSB7fTsKLSAgICAgICAg ICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY2hhbmdlcyBvbiBzZXJ2ZXIKLSAgICAgICAgICAgICAg ICAgICAgc2VsZi5fc2F2ZSgpOwotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAg ICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHVz ZXIgY2FuY2VsZWQgdGhlIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICApLnNldCgnbGFiZWxzJywge29rOidZZXMnLCBjYW5jZWw6J05vJ30pOworICAgICAg ICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAkKCIjYnRuLWRlbGV0ZS1yb3ci KS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAgICAgICAgICQoIiNidG4tY29weS1y b3ciKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0 aGUgc3RhdGUKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUuZGVsZXRlZCA9IHNlbGYu ZGF0YV9zdG9yZS5zdGFnZWRfcm93czsKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUu c3RhZ2VkX3Jvd3MgPSB7fTsKKyAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjaGFuZ2VzIG9u IHNlcnZlcgorICAgICAgICAgICAgICAgIHNlbGYuX3NhdmUoKTsKKyAgICAgICAgICAgICAgfSwK KyAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgLy8gRG8gbm90aGlu ZyBhcyB1c2VyIGNhbmNlbGVkIHRoZSBvcGVyYXRpb24uCiAgICAgICAgICAgICAgIH0KLQorICAg ICAgICAgICAgKS5zZXQoJ2xhYmVscycsIHtvazogZ2V0dGV4dCgiWWVzIiksIGNhbmNlbDpnZXR0 ZXh0KCJObyIpfSk7CisgICAgICAgICAgfQogICAgICAgICB9LAogCiAgICAgICAgIC8qIFRoaXMg ZnVuY3Rpb24gd2lsbCBmZXRjaCB0aGUgbGlzdCBvZiBjaGFuZ2VkIG1vZGVscyBhbmQgbWFrZQpA QCAtMjIwMCw3ICsyMjU0LDkgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgZGF0YTogSlNPTi5z dHJpbmdpZnkocmVxX2RhdGEpLAogICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMp IHsKICAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IHNlbGYuc2xpY2tncmlkLAotICAgICAgICAg ICAgICAgICAgZGF0YSA9IGdyaWQuZ2V0RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBkYXRh VmlldyA9IGdyaWQuZ2V0RGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCA9 IGRhdGFWaWV3LmdldExlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICBkYXRhID0gW107CiAg ICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cykgewogICAgICAgICAgICAgICAgICAg ICAvLyBSZW1vdmUgZmxhZyBpc19yb3dfY29waWVkIGZyb20gY29waWVkIHJvd3MKICAgICAgICAg ICAgICAgICAgICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKHJvdywgaWR4KSB7CkBAIC0yMjE3LDIy ICsyMjczLDIwIEBAIGRlZmluZShbCiAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBkZWxl dGVkIHJvd3MgZnJvbSBjbGllbnQgYXMgd2VsbAogICAgICAgICAgICAgICAgICAgICBpZihpc19k ZWxldGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSBncmlkLmdldFNlbGVj dGVkUm93cygpOwotICAgICAgICAgICAgICAgICAgICAgIC8qIEluIEphdmFTY3JpcHQgc29ydGlu ZyBieSBkZWZhdWx0IGlzIGxleGljYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICogVG8gbWFr ZSBzb3J0aW5nIG51bWVyaWNhbCB3ZSBuZWVkIHRvIHBhc3MgZnVuY3Rpb24KLSAgICAgICAgICAg ICAgICAgICAgICAgKiBBZnRlciB0aGF0IHdlIHdpbGwgUmV2ZXJzZSB0aGUgb3JkZXIgb2Ygc29y dGVkIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICogc28gdGhhdCB3aGVuIHdlIHJlbW92 ZSBpdCBkb2VzIG5vdCBhZmZlY3QgYXJyYXkgaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAg Ki8KLSAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSByb3dzLmxlbmd0aCkg eworICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFfbGVuZ3RoID09IHJvd3MubGVuZ3RoKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIGFsbCB0aGUgcm93cyBhcmUg c2VsZWN0ZWQsIGNsZWFyIGFsbCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0g W107CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVmlldy5zZXRJdGVtcyhkYXRhLCBzZWxm LmNsaWVudF9wcmltYXJ5X2tleSk7CiAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHJvd3MgPSByb3dzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1 cm4gYSAtIGJ9KS5yZXZlcnNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3dzLmZvckVh Y2goZnVuY3Rpb24oaWR4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNl KGlkeCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGFWaWV3LmJlZ2luVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgaXRlbSA9IGdyaWQuZ2V0RGF0YUl0ZW0ocm93c1tpXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGEucHVzaChpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YVZpZXcuZGVsZXRlSXRlbShpdGVtW3NlbGYuY2xpZW50X3ByaW1hcnlfa2V5XSk7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVmlldy5l bmRVcGRhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5yb3dzX3RvX2RlbGV0ZS5hcHBseShzZWxmLCBbZGF0YV0pOwotICAgICAgICAgICAg ICAgICAgICAgIGdyaWQuc2V0RGF0YShkYXRhLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAg ICBncmlkLnNldFNlbGVjdGVkUm93cyhbXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAt MjI0NSw2ICsyMjk5LDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5y b3dzX3RvX2Rpc2FibGUgPSBfLmNsb25lKHNlbGYudGVtcF9uZXdfcm93cyk7CiAgICAgICAgICAg ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgICBncmlkLnNldFNlbGVjdGVkUm93cyhb XSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgc3RvcmUKICAgICAgICAgICAg ICAgICAgICAgc2VsZi5kYXRhX3N0b3JlID0gewogICAgICAgICAgICAgICAgICAgICAgICdhZGRl ZCc6IHt9LApAQCAtMjI2NSw3ICsyMzIwLDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAg ICQoJy5zcWwtZWRpdG9yLW1lc3NhZ2UnKS50ZXh0KHJlcy5kYXRhLnJlc3VsdCk7CiAgICAgICAg ICAgICAgICAgICB2YXIgZXJyX21zZyA9IFMoZ2V0dGV4dCgiJXMuIikpLnNwcmludGYocmVzLmRh dGEucmVzdWx0KS52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgYWxlcnRpZnkubm90aWZ5KGVy cl9tc2csICdlcnJvcicsIDIwKTsKLQorICAgICAgICAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3Rl ZFJvd3MoW10pOwogICAgICAgICAgICAgICAgICAgLy8gVG8gaGlnaGxpZ2h0IHRoZSByb3cgYXQg ZmF1bHQKICAgICAgICAgICAgICAgICAgIGlmKF8uaGFzKHJlcy5kYXRhLCAnX3Jvd2lkJykgJiYK ICAgICAgICAgICAgICAgICAgICAgICAoIV8uaXNVbmRlZmluZWQocmVzLmRhdGEuX3Jvd2lkKXx8 ICFfLmlzTnVsbChyZXMuZGF0YS5fcm93aWQpKSkgewpAQCAtMjMyMSwxNCArMjM3NiwyMSBAQCBk ZWZpbmUoWwogCiAgICAgICAgIC8vIEZpbmQgaW5kZXggb2Ygcm93IGF0IGZhdWx0IGZyb20gZ3Jp ZCBkYXRhCiAgICAgICAgIF9maW5kX3Jvd2luZGV4OiBmdW5jdGlvbihyb3dpZCkgewotICAgICAg ICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICB2YXIgZ3JpZCA9IHNlbGYuc2xpY2tncmlk LAotICAgICAgICAgICAgZGF0YSA9IGdyaWQuZ2V0RGF0YSgpLCBfcm93aWQsIGNvdW50ID0gMCwg X2lkeCA9IC0xOworICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICAgIGdyaWQg PSBzZWxmLnNsaWNrZ3JpZCwKKyAgICAgICAgICAgIGRhdGFWaWV3ID0gZ3JpZC5nZXREYXRhKCks CisgICAgICAgICAgICBkYXRhID0gZGF0YVZpZXcuZ2V0SXRlbXMoKSwKKyAgICAgICAgICAgIF9y b3dpZCwKKyAgICAgICAgICAgIGNvdW50ID0gMCwKKyAgICAgICAgICAgIF9pZHggPSAtMTsKKwog ICAgICAgICAgIC8vIElmIF9yb3dpZCBpcyBvYmplY3QgdGhlbiBpdCdzIHVwZGF0ZS9kZWxldGUg b3BlcmF0aW9uCiAgICAgICAgICAgaWYoXy5pc09iamVjdChyb3dpZCkpIHsKICAgICAgICAgICAg ICAgX3Jvd2lkID0gcm93aWQ7Ci0gICAgICAgICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHJvd2lk KSkgeyAvLyBJbnNlcnQgb3ByYXRpb24KLSAgICAgICAgICAgIF9yb3dpZCA9IHsgJ19fdGVtcF9Q Syc6IHJvd2lkIH07CisgICAgICAgICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHJvd2lkKSkgeyAv LyBJbnNlcnQgb3BlcmF0aW9uCisgICAgICAgICAgICB2YXIgcm93aWQgPSB7fTsKKyAgICAgICAg ICAgIHJvd2lkW3NlbGYuY2xpZW50X3ByaW1hcnlfa2V5XT0gcm93aWQ7CisgICAgICAgICAgICBf cm93aWQgPSByb3dpZDsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU29tZXRo aW5nIGlzIHdyb25nIHdpdGggdW5pcXVlIGlkCiAgICAgICAgICAgICByZXR1cm4gX2lkeDsKQEAg LTI1NTAsMTEgKzI2MTIsNiBAQCBkZWZpbmUoWwogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdp bGwgc2V0IHRoZSByZXF1aXJlZCBmbGFnIGZvciBwb2xsaW5nIHJlc3BvbnNlIGRhdGEKICAgICAg ICAgX2luaXRfcG9sbGluZ19mbGFnczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdmFyIHNlbGYg PSB0aGlzOwotICAgICAgICAgIC8vIFNldCBhIGZsYWcgdG8gZ2V0IGNvbHVtbnMKLSAgICAgICAg ICBzZWxmLkZFVENIX0NPTFVNTlNfRlJPTV9TRVJWRVIgPSB0cnVlOwotICAgICAgICAgIC8vIFdl IHdpbGwgc2V0IGNvbHVtbnMgZGF0YSBpbiB0aGlzIHZhcmlhYmxlIGZvciBmdXR1cmUgdXNlIG9u Y2Ugd2UgZmV0Y2ggaXQKLSAgICAgICAgICAvLyBmcm9tIHNlcnZlcgotICAgICAgICAgIHNlbGYu Q09MVU1OU19EQVRBID0ge307CiAKICAgICAgICAgICAvLyBUbyBnZXQgYSB0aW1lb3V0IGZvciBw b2xsaW5nIGZhbGxiYWNrIHRpbWVyIGluIHNlY29uZHMgaW4KICAgICAgICAgICAvLyByZWdhcmRz IHRvIGVsYXBzZWQgdGltZQpAQCAtMjY1MCw3ICsyNzA3LDcgQEAgZGVmaW5lKFsKICAgICAgICAg ICAgIHJldHVybjsKIAogICAgICAgICAgIC8vIEFkZCBjb2x1bW4gcG9zaXRpb24gYW5kIGl0J3Mg dmFsdWUgdG8gZGF0YQotICAgICAgICAgIGRhdGFbY29sdW1uX2luZm8uZmllbGRdID0gX3ZhbHVl c1tjb2x1bW5faW5mby5wb3NdIHx8ICcnOworICAgICAgICAgIGRhdGFbY29sdW1uX2luZm8uZmll bGRdID0gX3ZhbHVlc1tjb2x1bW5faW5mby5maWVsZF0gfHwgJyc7CiAKICAgICAgICAgICBzZWxm LnRyaWdnZXIoCiAgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOnNo b3cnLApAQCAtMjcyMCw3ICsyNzc3LDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgIHJldHVybjsK IAogICAgICAgICAgIC8vIEFkZCBjb2x1bW4gcG9zaXRpb24gYW5kIGl0J3MgdmFsdWUgdG8gZGF0 YQotICAgICAgICAgIGRhdGFbY29sdW1uX2luZm8uZmllbGRdID0gX3ZhbHVlc1tjb2x1bW5faW5m by5wb3NdIHx8ICcnOworICAgICAgICAgIGRhdGFbY29sdW1uX2luZm8uZmllbGRdID0gX3ZhbHVl c1tjb2x1bW5faW5mby5maWVsZF0gfHwgJyc7CiAKICAgICAgICAgICBzZWxmLnRyaWdnZXIoCiAg ICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOnNob3cnLApAQCAtMjg4 MywxNiArMjk0MCwxOCBAQCBkZWZpbmUoWwogICAgICAgICBfcGFzdGVfcm93OiBmdW5jdGlvbigp IHsKICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsIGNvbF9pbmZvID0ge30sCiAgICAgICAgICAg ICBncmlkID0gc2VsZi5zbGlja2dyaWQsCi0gICAgICAgICAgICBkYXRhID0gZ3JpZC5nZXREYXRh KCksCi0gICAgICAgICAgICBjb3VudCA9IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aC0xOwotCi0g ICAgICAgICAgdmFyIHJvd3MgPSBncmlkLmdldFNlbGVjdGVkUm93cygpLnNvcnQoCisgICAgICAg ICAgICBkYXRhVmlldyA9IGdyaWQuZ2V0RGF0YSgpLAorICAgICAgICAgICAgZGF0YSA9IGRhdGFW aWV3LmdldEl0ZW1zKCksCisgICAgICAgICAgICBjb3VudCA9IGRhdGFWaWV3LmdldExlbmd0aCgp LAorICAgICAgICAgICAgcm93cyA9IGdyaWQuZ2V0U2VsZWN0ZWRSb3dzKCkuc29ydCgKICAgICAg ICAgICAgICAgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9CiAgICAgICAgICAgICAp LAotICAgICAgICAgICAgcm93cyA9IHJvd3MubGVuZ3RoID09IDAgPyBzZWxmLmxhc3RfY29waWVk X3Jvd3MgOiByb3dzLAogICAgICAgICAgICAgY29waWVkX3Jvd3MgPSByb3dzLm1hcChmdW5jdGlv biAocm93SW5kZXgpIHsKICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbcm93SW5kZXhdOwogICAg ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHJvd3MgPSByb3dzLmxlbmd0aCA9PSAwID8gc2Vs Zi5sYXN0X2NvcGllZF9yb3dzIDogcm93cworCiAgICAgICAgICAgICBzZWxmLmxhc3RfY29waWVk X3Jvd3MgPSByb3dzOwogCiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgcm93cyB0byBwYXN0 ZT8KQEAgLTI5MjUsMjIgKzI5ODQsMjIgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgLy8gQWRk IGluZGV4IG9mIGNvcGllZCByb3cgaW50byB0ZW1wX25ld19yb3dzCiAgICAgICAgICAgICAgIC8v IFRyaWdnZXIgZ3JpZC5vbkFkZE5ld1JvdyB3aGVuIGEgcm93IGlzIGNvcGllZAogICAgICAgICAg ICAgICAvLyBSZXNldCBzZWxlY3Rpb24KKworICAgICAgICAgICAgICBkYXRhVmlldy5iZWdpblVw ZGF0ZSgpOwogICAgICAgICAgICAgICBfLmVhY2goY29waWVkX3Jvd3MsIGZ1bmN0aW9uKHJvdykg ewotICAgICAgICAgICAgICAgICAgdmFyIG5ld19yb3cgPSBhcnJfdG9fb2JqZWN0KHJvdyk7Cisg ICAgICAgICAgICAgICAgICB2YXIgbmV3X3JvdyA9IGFycl90b19vYmplY3Qocm93KSwKKyAgICAg ICAgICAgICAgICAgIF9rZXkgPSAoc2VsZi5ncmlkVmlldy5jbGllbnRfcHJpbWFyeV9rZXlfY291 bnRlcisrKS50b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgbmV3X3Jvdy5pc19yb3dfY29w aWVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIHJvdyA9IG5ld19yb3c7CiAgICAgICAgICAg ICAgICAgICBzZWxmLnRlbXBfbmV3X3Jvd3MucHVzaChjb3VudCk7Ci0gICAgICAgICAgICAgICAg ICBncmlkLm9uQWRkTmV3Um93Lm5vdGlmeSgKLSAgICAgICAgICAgICAgICAgICAgeyBpdGVtOiBu ZXdfcm93LAotICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogc2VsZi5jb2x1bW5zWzBdLAot ICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IGdyaWQsCi0gICAgICAgICAgICAgICAgICAgICAg aXNfY29weV9yb3c6IHRydWUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgKQorICAgICAgICAgICAgICAgICAgbmV3X3Jvd1tzZWxmLmNsaWVudF9wcmltYXJ5X2tleV0g PSBfa2V5OworICAgICAgICAgICAgICAgICAgZGF0YVZpZXcuYWRkSXRlbShuZXdfcm93KTsKKyAg ICAgICAgICAgICAgICAgIHNlbGYuZGF0YV9zdG9yZS5hZGRlZFtfa2V5XSA9IHsnZXJyJzogZmFs c2UsICdkYXRhJzogbmV3X3Jvd307CisgICAgICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUu YWRkZWRfaW5kZXhbY291bnRdID0gX2tleTsKICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAg ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAvLyBBZGQgYSBibGFuayByb3cgYWZ0ZXIg Y29weS9wYXN0ZSByb3cKLSAgICAgICAgICAgICAgZ3JpZC5hZGRCbGFua1JvdygpOworICAgICAg ICAgICAgICBkYXRhVmlldy5lbmRVcGRhdGUoKTsKKyAgICAgICAgICAgICAgZ3JpZC51cGRhdGVS b3dDb3VudCgpOworICAgICAgICAgICAgICBncmlkLnJlbmRlcigpOwogICAgICAgICAgICAgICBn cmlkLnNldFNlbGVjdGVkUm93cyhbXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCkBAIC0z MDEyLDYgKzMwNzEsOSBAQCBkZWZpbmUoWwogICAgICAgICAgICAgICBzcWwgPSAnJywKICAgICAg ICAgICAgICAgaGlzdG9yeV9tc2cgPSAnJzsKIAorICAgICAgICAgIHNlbGYuaGFzX21vcmVfcm93 cyA9IGZhbHNlOworICAgICAgICAgIHNlbGYuZmV0Y2hpbmdfcm93cyA9IGZhbHNlOworCiAgICAg ICAgICAgLyogSWYgY29kZSBpcyBzZWxlY3RlZCBpbiB0aGUgY29kZSBtaXJyb3IgdGhlbiBleGVj dXRlCiAgICAgICAgICAgICogdGhlIHNlbGVjdGVkIHBhcnQgZWxzZSBleGVjdXRlIHRoZSBjb21w bGV0ZSBjb2RlLgogICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMv ZHJpdmVyL2Fic3RyYWN0LnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL2Fic3RyYWN0LnB5 CmluZGV4IDliMjM2M2MuLjdkYjNlMzcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL2Ry aXZlci9hYnN0cmFjdC5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvYWJzdHJhY3Qu cHkKQEAgLTEwMSw2ICsxMDEsMTIgQEAgY2xhc3MgQmFzZUNvbm5lY3Rpb24ob2JqZWN0KToKICAg ICAgIC0gSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGV4ZWN1dGUgdGhlIGdpdmVuIHF1ZXJ5IGFu ZCByZXR1cm5zIHRoZSByZXN1bHQKICAgICAgICAgYXMgYW4gYXJyYXkgb2YgZGljdCAoY29sdW1u IG5hbWUgLT4gdmFsdWUpIGZvcm1hdC4KIAorICAgICogZGVmIGFzeW5jX2ZldGNobWFueV8yZGFy cmF5KHJlY29yZHM9LTEsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlKToKKyAgICAgIC0g SW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHJldHJpZXZlIHJlc3VsdCBvZiBhc3luY2hyb25vdXMg Y29ubmVjdGlvbiBhbmQKKyAgICAgICAgcG9sbGluZyB3aXRoIG5vX3Jlc3VsdCBmbGFnIHNldCB0 byBUcnVlLgorICAgICAgICBUaGlzIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhIDIgZGltZW5zaW9u YWwgYXJyYXkuCisgICAgICAgIElmIHJlY29yZHMgaXMgLTEgdGhlbiBmZXRjaG1hbnkgd2lsbCBi ZWhhdmUgYXMgZmV0Y2hhbGwuCisKICAgICAqIGNvbm5lY3RlZCgpCiAgICAgICAtIEltcGxlbWVu dCB0aGlzIG1ldGhvZCB0byBnZXQgdGhlIHN0YXR1cyBvZiB0aGUgY29ubmVjdGlvbi4gSXQgc2hv dWxkCiAgICAgICAgIHJldHVybiBUcnVlIGZvciBjb25uZWN0ZWQsIG90aGVyd2lzZSBGYWxzZQpA QCAtMTMzLDcgKzEzOSw3IEBAIGNsYXNzIEJhc2VDb25uZWN0aW9uKG9iamVjdCk6CiAgICAgICAt IEltcGxlbWVudCB0aGlzIG1ldGhvZCB0byB3YWl0IGZvciBhc3luY2hyb25vdXMgY29ubmVjdGlv biB3aXRoIHRpbWVvdXQuCiAgICAgICAgIFRoaXMgbXVzdCBiZSBhIG5vbiBibG9ja2luZyBjYWxs LgogCi0gICAgKiBwb2xsKGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQorICAgICogcG9sbChmb3Jt YXR0ZWRfZXhjZXB0aW9uX21zZywgbm9fcmVzdWx0KQogICAgICAgLSBJbXBsZW1lbnQgdGhpcyBt ZXRob2QgdG8gcG9sbCB0aGUgZGF0YSBvZiBxdWVyeSBydW5uaW5nIG9uIGFzeW5jaHJvbm91cwog ICAgICAgICBjb25uZWN0aW9uLgogCkBAIC0xODAsNiArMTg2LDEwIEBAIGNsYXNzIEJhc2VDb25u ZWN0aW9uKG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAogICAgIEBhYnN0cmFjdG1ldGhvZAorICAg IGRlZiBhc3luY19mZXRjaG1hbnlfMmRhcnJheShzZWxmLCByZWNvcmRzPS0xLCBmb3JtYXR0ZWRf ZXhjZXB0aW9uX21zZz1GYWxzZSk6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhv ZAogICAgIGRlZiBjb25uZWN0ZWQoc2VsZik6CiAgICAgICAgIHBhc3MKIApAQCAtMjA4LDcgKzIx OCw3IEBAIGNsYXNzIEJhc2VDb25uZWN0aW9uKG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAogICAg IEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBwb2xsKHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25f bXNnPVRydWUpOgorICAgIGRlZiBwb2xsKHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPVRy dWUsIG5vX3Jlc3VsdD1GYWxzZSk6CiAgICAgICAgIHBhc3MKIAogICAgIEBhYnN0cmFjdG1ldGhv ZApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL19faW5pdF9f LnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL19faW5pdF9fLnB5CmluZGV4 IDE2MzQyZDQuLjhhMjA1MjEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9w c3ljb3BnMi9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29w ZzIvX19pbml0X18ucHkKQEAgLTEwNzksNiArMTA3OSw1NSBAQCBGYWlsZWQgdG8gZXhlY3V0ZSBx dWVyeSAoZXhlY3V0ZV92b2lkKSBmb3IgdGhlIHNlcnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9p ZH0KIAogICAgICAgICByZXR1cm4gVHJ1ZSwgeydjb2x1bW5zJzogY29sdW1ucywgJ3Jvd3MnOiBy b3dzfQogCisgICAgZGVmIGFzeW5jX2ZldGNobWFueV8yZGFycmF5KHNlbGYsIHJlY29yZHM9MjAw MCwgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAg VXNlciBzaG91bGQgcG9sbCBhbmQgY2hlY2sgaWYgc3RhdHVzIGlzIEFTWU5DX09LIGJlZm9yZSBj YWxsaW5nIHRoaXMKKyAgICAgICAgZnVuY3Rpb24KKyAgICAgICAgQXJnczoKKyAgICAgICAgICBy ZWNvcmRzOiBubyBvZiByZWNvcmRzIHRvIGZldGNoLiB1c2UgLTEgdG8gZmV0Y2hhbGwuCisgICAg ICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c6CisKKyAgICAgICAgUmV0dXJuczoKKworICAg ICAgICAiIiIKKyAgICAgICAgY3VyID0gc2VsZi5fX2FzeW5jX2N1cnNvcgorICAgICAgICBpZiBu b3QgY3VyOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBnZXR0ZXh0KAorICAgICAgICAgICAg ICAgICJDdXJzb3IgY291bGQgbm90IGJlIGZvdW5kIGZvciB0aGUgYXN5bmMgY29ubmVjdGlvbi4i CisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgc2VsZi5jb25uLmlzZXhlY3V0aW5nKCk6Cisg ICAgICAgICAgICByZXR1cm4gRmFsc2UsIGdldHRleHQoCisgICAgICAgICAgICAgICAgIkFzeW5j aHJvbm91cyBxdWVyeSBleGVjdXRpb24vb3BlcmF0aW9uIHVuZGVyd2F5LiIKKyAgICAgICAgICAg ICkKKworICAgICAgICBpZiBzZWxmLnJvd19jb3VudCA+IDA6CisgICAgICAgICAgICByZXN1bHQg PSBbXQorICAgICAgICAgICAgIyBGb3IgRERMIG9wZXJhdGlvbiwgd2UgbWF5IG5vdCBoYXZlIHJl c3VsdC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgQmVjYXVzZSAtIHRoZXJlIGlzIG5v dCBkaXJlY3Qgd2F5IHRvIGRpZmZlcmVudGlhdGUgRE1MIGFuZAorICAgICAgICAgICAgIyBEREwg b3BlcmF0aW9ucywgd2UgbmVlZCB0byByZWx5IG9uIGV4Y2VwdGlvbiB0byBmaWd1cmUKKyAgICAg ICAgICAgICMgdGhhdCBvdXQgYXQgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIHRyeToKKyAgICAg ICAgICAgICAgICBpZiByZWNvcmRzID09IC0xOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBj dXIuZmV0Y2hhbGwoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg IHJlcyA9IGN1ci5mZXRjaG1hbnkocmVjb3JkcykKKyAgICAgICAgICAgICAgICBmb3Igcm93IGlu IHJlczoKKyAgICAgICAgICAgICAgICAgICAgbmV3X3JvdyA9IFtdCisgICAgICAgICAgICAgICAg ICAgIGZvciBjb2wgaW4gc2VsZi5jb2x1bW5faW5mbzoKKyAgICAgICAgICAgICAgICAgICAgICAg IG5ld19yb3cuYXBwZW5kKHJvd1tjb2xbJ25hbWUnXV0pCisgICAgICAgICAgICAgICAgICAgIHJl c3VsdC5hcHBlbmQobmV3X3JvdykKKyAgICAgICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5Qcm9ncmFt bWluZ0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICBl bHNlOgorICAgICAgICAgICAgIyBVc2VyIHBlcmZvcm1lZCBvcGVyYXRpb24gd2hpY2ggZG9zZSBu b3QgcHJvZHVjZSByZWNvcmQvcyBhcworICAgICAgICAgICAgIyByZXN1bHQuCisgICAgICAgICAg ICAjIGZvciBlZy4gRERMIG9wZXJhdGlvbnMuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgTm9u ZQorCisgICAgICAgIHJldHVybiBUcnVlLCByZXN1bHQKKwogICAgIGRlZiBjb25uZWN0ZWQoc2Vs Zik6CiAgICAgICAgIGlmIHNlbGYuY29ubjoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvbm4u Y2xvc2VkOgpAQCAtMTIyNiw3ICsxMjc1LDcgQEAgRmFpbGVkIHRvIHJlc2V0IHRoZSBjb25uZWN0 aW9uIHRvIHRoZSBzZXJ2ZXIgZHVlIHRvIGZvbGxvd2luZyBlcnJvcjoKICAgICAgICAgICAgICAg ICAicG9sbCgpIHJldHVybmVkICVzIGZyb20gX3dhaXRfdGltZW91dCBmdW5jdGlvbiIgJSBzdGF0 ZQogICAgICAgICAgICAgKQogCi0gICAgZGVmIHBvbGwoc2VsZiwgZm9ybWF0dGVkX2V4Y2VwdGlv bl9tc2c9RmFsc2UpOgorICAgIGRlZiBwb2xsKHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNn PUZhbHNlLCBub19yZXN1bHQ9RmFsc2UpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5j dGlvbiBpcyBhIHdyYXBwZXIgYXJvdW5kIGNvbm5lY3Rpb24ncyBwb2xsIGZ1bmN0aW9uLgogICAg ICAgICBJdCBpbnRlcm5hbGx5IHVzZXMgdGhlIF93YWl0X3RpbWVvdXQgbWV0aG9kIHRvIHBvbGwg dGhlCkBAIC0xMjM2LDYgKzEyODUsNyBAQCBGYWlsZWQgdG8gcmVzZXQgdGhlIGNvbm5lY3Rpb24g dG8gdGhlIHNlcnZlciBkdWUgdG8gZm9sbG93aW5nIGVycm9yOgogICAgICAgICBBcmdzOgogICAg ICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c6IGlmIFRydWUgdGhlbiBmdW5jdGlvbiBy ZXR1cm4gdGhlIGZvcm1hdHRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV4Y2VwdGlvbiBtZXNzYWdlLCBvdGhlcndpc2UgZXJyb3Igc3RyaW5nLgorICAgICAgICAgICAg bm9fcmVzdWx0OiBJZiBUcnVlIHRoZW4gb25seSBwb2xsIHN0YXR1cyB3aWxsIGJlIHJldHVybmVk LgogICAgICAgICAiIiIKIAogICAgICAgICBjdXIgPSBzZWxmLl9fYXN5bmNfY3Vyc29yCkBAIC0x MjkxLDIzICsxMzQxLDIzIEBAIEZhaWxlZCB0byByZXNldCB0aGUgY29ubmVjdGlvbiB0byB0aGUg c2VydmVyIGR1ZSB0byBmb2xsb3dpbmcgZXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBvcyAr PSAxCiAKICAgICAgICAgICAgIHNlbGYucm93X2NvdW50ID0gY3VyLnJvd2NvdW50Ci0KLSAgICAg ICAgICAgIGlmIGN1ci5yb3djb3VudCA+IDA6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gW10K LSAgICAgICAgICAgICAgICAjIEZvciBEREwgb3BlcmF0aW9uLCB3ZSBtYXkgbm90IGhhdmUgcmVz dWx0LgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIEJlY2F1c2UgLSB0aGVy ZSBpcyBub3QgZGlyZWN0IHdheSB0byBkaWZmZXJlbnRpYXRlIERNTCBhbmQKLSAgICAgICAgICAg ICAgICAjIERETCBvcGVyYXRpb25zLCB3ZSBuZWVkIHRvIHJlbHkgb24gZXhjZXB0aW9uIHRvIGZp Z3VyZSB0aGF0Ci0gICAgICAgICAgICAgICAgIyBvdXQgYXQgdGhlIG1vbWVudC4KLSAgICAgICAg ICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gY3VyOgotICAgICAg ICAgICAgICAgICAgICAgICAgbmV3X3JvdyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICBm b3IgY29sIGluIHNlbGYuY29sdW1uX2luZm86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg bmV3X3Jvdy5hcHBlbmQocm93W2NvbFsnbmFtZSddXSkKLSAgICAgICAgICAgICAgICAgICAgICAg IHJlc3VsdC5hcHBlbmQobmV3X3JvdykKLQotICAgICAgICAgICAgICAgIGV4Y2VwdCBwc3ljb3Bn Mi5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb25lCisg ICAgICAgICAgICBpZiBub3Qgbm9fcmVzdWx0OgorICAgICAgICAgICAgICAgIGlmIGN1ci5yb3dj b3VudCA+IDA6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgICAgICAg ICAgICAgICMgRm9yIERETCBvcGVyYXRpb24sIHdlIG1heSBub3QgaGF2ZSByZXN1bHQuCisgICAg ICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgIyBCZWNhdXNlIC0gdGhlcmUg aXMgbm90IGRpcmVjdCB3YXkgdG8gZGlmZmVyZW50aWF0ZSBETUwgYW5kCisgICAgICAgICAgICAg ICAgICAgICMgRERMIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gcmVseSBvbiBleGNlcHRpb24gdG8g ZmlndXJlCisgICAgICAgICAgICAgICAgICAgICMgdGhhdCBvdXQgYXQgdGhlIG1vbWVudC4KKyAg ICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJvdyBp biBjdXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3JvdyA9IFtdCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbCBpbiBzZWxmLmNvbHVtbl9pbmZvOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcm93LmFwcGVuZChyb3dbY29sWyduYW1lJ11d KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3X3JvdykKKwor ICAgICAgICAgICAgICAgICAgICBleGNlcHQgcHN5Y29wZzIuUHJvZ3JhbW1pbmdFcnJvcjoKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKIAogICAgICAgICByZXR1cm4gc3Rh dHVzLCByZXN1bHQKIApkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vZmVhdHVyZV91dGlscy9w Z2FkbWluX3BhZ2UucHkgYi93ZWIvcmVncmVzc2lvbi9mZWF0dXJlX3V0aWxzL3BnYWRtaW5fcGFn ZS5weQppbmRleCBjNjE2NjNhLi4wMmMzNWVkIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9m ZWF0dXJlX3V0aWxzL3BnYWRtaW5fcGFnZS5weQorKysgYi93ZWIvcmVncmVzc2lvbi9mZWF0dXJl X3V0aWxzL3BnYWRtaW5fcGFnZS5weQpAQCAtODUsNyArODUsNyBAQCBjbGFzcyBQZ2FkbWluUGFn ZToKIAogICAgICAgICAgICAgaWYgJ21lbnUtaXRlbScgPT0gc3RyKG1lbnVfaXRlbS5nZXRfYXR0 cmlidXRlKCdjbGFzcycpKToKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAg IHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIGVs c2U6CiAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICInVG9vbHMgLT4gUXVlcnkgVG9vbCcgbWVu dSBkaWQgbm90IGVuYWJsZS4iCiAKQEAgLTE0NCw3ICsxNDQsNiBAQCBjbGFzcyBQZ2FkbWluUGFn ZToKICAgICAgICAgZXhjZXB0IFdlYkRyaXZlckV4Y2VwdGlvbjoKICAgICAgICAgICAgIHJldHVy bgogCi0KICAgICBkZWYgZmluZF9ieV94cGF0aChzZWxmLCB4cGF0aCk6CiAgICAgICAgIHJldHVy biBzZWxmLndhaXRfZm9yX2VsZW1lbnQobGFtYmRhIGRyaXZlcjogZHJpdmVyLmZpbmRfZWxlbWVu dF9ieV94cGF0aCh4cGF0aCkpCiAKQEAgLTI1MSw2ICsyNTAsMjAgQEAgY2xhc3MgUGdhZG1pblBh Z2U6CiAKICAgICAgICAgc2VsZi5fd2FpdF9mb3IoInNwaW5uZXIgdG8gZGlzYXBwZWFyIiwgc3Bp bm5lcl9oYXNfZGlzYXBwZWFyZWQpCiAKKyAgICBkZWYgd2FpdF9mb3JfcXVlcnlfdG9vbF9sb2Fk aW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoc2VsZik6CisgICAgICAgIGRlZiBzcGlubmVyX2hh c19kaXNhcHBlYXJlZChkcml2ZXIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg IGRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAgICAgICAgICAgICAgICIvLypb QGlkPSdmZXRjaGluZ19kYXRhJyBhbmQgQGNsYXNzPSdoaWRlJ10iCisgICAgICAgICAgICAgICAg KQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IE5vU3Vj aEVsZW1lbnRFeGNlcHRpb246CisgICAgICAgICAgICAgICAgIyB3YWl0IGZvciBsb2FkaW5nIGlu ZGljYXRvciBkaXNhcHBlYXIgYW5pbWF0aW9uIHRvIGNvbXBsZXRlLgorICAgICAgICAgICAgICAg IHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAg c2VsZi5fd2FpdF9mb3IoInNwaW5uZXIgdG8gZGlzYXBwZWFyIiwgc3Bpbm5lcl9oYXNfZGlzYXBw ZWFyZWQpCisKICAgICBkZWYgd2FpdF9mb3JfYXBwKHNlbGYpOgogICAgICAgICBkZWYgcGFnZV9z aG93c19hcHAoZHJpdmVyKToKICAgICAgICAgICAgIGlmIGRyaXZlci50aXRsZSA9PSBzZWxmLmFw cF9jb25maWcuQVBQX05BTUU6CkBAIC0yNjYsMTkgKzI3OSwzIEBAIGNsYXNzIFBnYWRtaW5QYWdl OgogICAgICAgICAgICAgdGltZW91dCA9IHNlbGYudGltZW91dAogICAgICAgICByZXR1cm4gV2Vi RHJpdmVyV2FpdChzZWxmLmRyaXZlciwgdGltZW91dCwgMC4wMSkudW50aWwoY29uZGl0aW9uX21l dF9mdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiICsgd2FpdGlu Z19mb3JfbWVzc2FnZSkKLQotICAgIGRlZiB3YWl0X2Zvcl9lbGVtZW50X3RvX3N0YWxlKHNlbGYs IHhwYXRoKToKLSAgICAgICAgIyBSZWZlcmVuY2U6IGh0dHA6Ly93d3cub2JleXRoZXRlc3Rpbmdn b2F0LmNvbS8KLSAgICAgICAgIyBob3ctdG8tZ2V0LXNlbGVuaXVtLXRvLXdhaXQtZm9yLXBhZ2Ut bG9hZC1hZnRlci1hLWNsaWNrLmh0bWwKLSAgICAgICAgZWwgPSBzZWxmLmRyaXZlci5maW5kX2Vs ZW1lbnRfYnlfeHBhdGgoeHBhdGgpCi0KLSAgICAgICAgZGVmIGVsZW1lbnRfaGFzX2dvbmVfc3Rh bGUoZHJpdmVyKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIHBvbGwgYW4g YXJiaXRyYXJ5IGVsZW1lbnQKLSAgICAgICAgICAgICAgICBlbC5maW5kX2VsZW1lbnRzX2J5X2lk KCdlbGVtZW50LWRvbnQtZXhpc3QnKQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAg ICAgICAgICAgZXhjZXB0IFN0YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbjoKLSAgICAgICAg ICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIHNlbGYuX3dhaXRfZm9yKCJlbGVtZW50IHRv IGF0dGFjaCB0byB0aGUgcGFnZSBkb2N1bWVudCIsCi0gICAgICAgICAgICAgICAgICAgICAgIGVs ZW1lbnRfaGFzX2dvbmVfc3RhbGUpCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2Ny aXB0L3NlbGVjdGlvbi9jb3B5X2RhdGFfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3Jp cHQvc2VsZWN0aW9uL2NvcHlfZGF0YV9zcGVjLmpzCmluZGV4IDllMDVlODQuLjJiNjIzYjMgMTAw NjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL2NvcHlfZGF0YV9z cGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL2NvcHlfZGF0 YV9zcGVjLmpzCkBAIC0xNiwxNiArMTYsMTYgQEAgaW1wb3J0IGNsaXBib2FyZCBmcm9tICcuLi8u Li8uLi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY2xpcGJvYXJkJzsKIGltcG9ydCBjb3B5 RGF0YSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY29weV9kYXRh JzsKIGltcG9ydCBSYW5nZVNlbGVjdGlvbkhlbHBlciBmcm9tICdzb3VyY2VzL3NlbGVjdGlvbi9y YW5nZV9zZWxlY3Rpb25faGVscGVyJzsKIGltcG9ydCBYQ2VsbFNlbGVjdGlvbk1vZGVsIGZyb20g J3NvdXJjZXMvc2VsZWN0aW9uL3hjZWxsX3NlbGVjdGlvbl9tb2RlbCc7Ci0KIGRlc2NyaWJlKCdj b3B5RGF0YScsIGZ1bmN0aW9uICgpIHsKICAgdmFyIGdyaWQsIHNxbEVkaXRvciwgZ3JpZENvbnRh aW5lciwgYnV0dG9uUGFzdGVSb3c7CiAgIHZhciBTbGlja0dyaWQ7CiAKICAgYmVmb3JlRWFjaChm dW5jdGlvbiAoKSB7CiAgICAgU2xpY2tHcmlkID0gU2xpY2suR3JpZDsKLSAgICB2YXIgZGF0YSA9 IFtbMSwgJ2xlb3BvcmQnLCAnMTInXSwKLSAgICAgIFsyLCAnbGlvbicsICcxMyddLAotICAgICAg WzMsICdwdW1hJywgJzknXV07CisgICAgdmFyIGRhdGEgPSBbeydpZCc6IDEsICdicmFuZCc6J2xl b3BvcmQnLCAnc2l6ZSc6JzEyJywgJ19fdGVtcF9QSyc6ICcxMjMnfSwKKyAgICAgICAgICAgICAg ICB7J2lkJzogMiwgJ2JyYW5kJzonbGlvbicsICdzaXplJzonMTMnLCAnX190ZW1wX1BLJzogJzQ1 Nid9LAorICAgICAgICAgICAgICAgIHsnaWQnOiAzLCAnYnJhbmQnOidwdW1hJywgJ3NpemUnOic5 JywgJ19fdGVtcF9QSyc6ICc3ODknfV0sCisgICAgICBkYXRhVmlldyA9IG5ldyBTbGljay5EYXRh LkRhdGFWaWV3KCk7CiAKICAgICB2YXIgY29sdW1ucyA9IFsKICAgICAgIHsKQEAgLTM3LDYgKzM3 LDcgQEAgZGVzY3JpYmUoJ2NvcHlEYXRhJywgZnVuY3Rpb24gKCkgewogICAgICAgfSwKICAgICAg IHsKICAgICAgICAgbmFtZTogJ2lkJywKKyAgICAgICAgZmllbGQ6ICdpZCcsCiAgICAgICAgIHBv czogMCwKICAgICAgICAgbGFiZWw6ICdpZDxicj4gbnVtZXJpYycsCiAgICAgICAgIGNlbGw6ICdu dW1iZXInLApAQCAtNDQsNiArNDUsNyBAQCBkZXNjcmliZSgnY29weURhdGEnLCBmdW5jdGlvbiAo KSB7CiAgICAgICAgIHR5cGU6ICdudW1lcmljJywKICAgICAgIH0sIHsKICAgICAgICAgbmFtZTog J2JyYW5kJywKKyAgICAgICAgZmllbGQ6ICdicmFuZCcsCiAgICAgICAgIHBvczogMSwKICAgICAg ICAgbGFiZWw6ICdmbGF2b3I8YnI+IGNoYXJhY3RlciB2YXJ5aW5nJywKICAgICAgICAgY2VsbDog J3N0cmluZycsCkBAIC01MSwyNCArNTMsMjYgQEAgZGVzY3JpYmUoJ2NvcHlEYXRhJywgZnVuY3Rp b24gKCkgewogICAgICAgICB0eXBlOiAnY2hhcmFjdGVyIHZhcnlpbmcnLAogICAgICAgfSwgewog ICAgICAgICBuYW1lOiAnc2l6ZScsCisgICAgICAgIGZpZWxkOiAnc2l6ZScsCiAgICAgICAgIHBv czogMiwKICAgICAgICAgbGFiZWw6ICdzaXplPGJyPiBudW1lcmljJywKICAgICAgICAgY2VsbDog J251bWJlcicsCiAgICAgICAgIGNhbl9lZGl0OiBmYWxzZSwKICAgICAgICAgdHlwZTogJ251bWVy aWMnLAogICAgICAgfSwKLSAgICBdCi0gICAgOwotICAgIGdyaWRDb250YWluZXIgPSAkKCc8ZGl2 IGlkPVwnZ3JpZFwnPjwvZGl2PicpOworICAgIF07CisgICAgZ3JpZENvbnRhaW5lciA9ICQoJzxk aXYgaWQ9ImdyaWQiPjwvZGl2PicpOwogICAgICQoJ2JvZHknKS5hcHBlbmQoZ3JpZENvbnRhaW5l cik7Ci0gICAgYnV0dG9uUGFzdGVSb3cgPSAkKCc8YnV0dG9uIGlkPVwnYnRuLXBhc3RlLXJvd1wn IGRpc2FibGVkPjwvYnV0dG9uPicpOworICAgIGJ1dHRvblBhc3RlUm93ID0gJCgnPGJ1dHRvbiBp ZD0iYnRuLXBhc3RlLXJvdyIgZGlzYWJsZWQ+PC9idXR0b24+Jyk7CiAgICAgJCgnYm9keScpLmFw cGVuZChidXR0b25QYXN0ZVJvdyk7Ci0gICAgZ3JpZCA9IG5ldyBTbGlja0dyaWQoJyNncmlkJywg ZGF0YSwgY29sdW1ucywge30pOworICAgIGdyaWQgPSBuZXcgU2xpY2tHcmlkKCcjZ3JpZCcsIGRh dGFWaWV3LCBjb2x1bW5zLCB7fSk7CisgICAgZGF0YVZpZXcuc2V0SXRlbXMoZGF0YSwgJ19fdGVt cF9QSycpOwogICAgIGdyaWQuc2V0U2VsZWN0aW9uTW9kZWwobmV3IFhDZWxsU2VsZWN0aW9uTW9k ZWwoKSk7CiAgICAgc3FsRWRpdG9yID0ge3NsaWNrZ3JpZDogZ3JpZH07CiAgIH0pOwogCi0gIGFm dGVyRWFjaChmdW5jdGlvbiAoKSB7CisgIGFmdGVyRWFjaChmdW5jdGlvbigpIHsKKyAgICBncmlk LmRlc3Ryb3koKTsKICAgICBncmlkQ29udGFpbmVyLnJlbW92ZSgpOwogICAgIGJ1dHRvblBhc3Rl Um93LnJlbW92ZSgpOwogICB9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3Jp cHQvc2VsZWN0aW9uL3JhbmdlX2JvdW5kYXJ5X25hdmlnYXRvcl9zcGVjLmpzIGIvd2ViL3JlZ3Jl c3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcmFuZ2VfYm91bmRhcnlfbmF2aWdhdG9yX3NwZWMu anMKaW5kZXggMWRlNmQ4MS4uMmQ1NmIwNSAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2 YXNjcmlwdC9zZWxlY3Rpb24vcmFuZ2VfYm91bmRhcnlfbmF2aWdhdG9yX3NwZWMuanMKKysrIGIv d2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcmFuZ2VfYm91bmRhcnlfbmF2aWdh dG9yX3NwZWMuanMKQEAgLTEzNCwxNyArMTM0LDE5IEBAIGRlc2NyaWJlKCdSYW5nZUJvdW5kYXJ5 TmF2aWdhdG9yJywgZnVuY3Rpb24gKCkgewogICBkZXNjcmliZSgnI3Jhbmdlc1RvQ3N2JywgZnVu Y3Rpb24gKCkgewogICAgIHZhciBkYXRhLCBjb2x1bW5EZWZpbml0aW9ucywgcmFuZ2VzOwogICAg IGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewotICAgICAgZGF0YSA9IFtbMSwgJ2xlb3BhcmQnLCAn MTInXSwKLSAgICAgICAgWzIsICdsaW9uJywgJzEzJ10sCi0gICAgICAgIFszLCAnY291Z2FyJywg JzknXSwKLSAgICAgICAgWzQsICd0aWdlcicsICcxMCddXTsKLSAgICAgIGNvbHVtbkRlZmluaXRp b25zID0gW3tuYW1lOiAnaWQnLCBwb3M6IDB9LCB7bmFtZTogJ2FuaW1hbCcsIHBvczogMX0sIHtu YW1lOiAnc2l6ZScsIHBvczogMn1dOworICAgICAgZGF0YSA9IFt7J2lkJzoxLCAnYW5pbWFsJzon bGVvcGFyZCcsICdzaXplJzonMTInfSwKKyAgICAgICAgICAgICAgeydpZCc6MiwgJ2FuaW1hbCc6 J2xpb24nLCAnc2l6ZSc6JzEzJ30sCisgICAgICAgICAgICAgIHsnaWQnOjMsICdhbmltYWwnOidj b3VnYXInLCAnc2l6ZSc6JzknfSwKKyAgICAgICAgICAgICAgeydpZCc6NCwgJ2FuaW1hbCc6J3Rp Z2VyJywgJ3NpemUnOicxMCd9XTsKKworICAgICAgY29sdW1uRGVmaW5pdGlvbnMgPSBbe25hbWU6 ICdpZCcsIGZpZWxkOiAnaWQnLCBwb3M6IDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHtuYW1lOiAnYW5pbWFsJywgZmllbGQ6ICdhbmltYWwnLCBwb3M6IDF9LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHtuYW1lOiAnc2l6ZScsIGZpZWxkOiAnc2l6ZScsIHBvczogMn1dOwog ICAgICAgcmFuZ2VzID0gW25ldyBTbGljay5SYW5nZSgwLCAwLCAwLCAyKSwgbmV3IFNsaWNrLlJh bmdlKDMsIDAsIDMsIDIpXTsKICAgICB9KTsKIAogICAgIGl0KCdyZXR1cm5zIGNzdiBmb3IgdGhl IHByb3ZpZGVkIHJhbmdlcycsIGZ1bmN0aW9uICgpIHsKICAgICAgIHZhciBjc3ZSZXN1bHQgPSBy YW5nZUJvdW5kYXJ5TmF2aWdhdG9yLnJhbmdlc1RvQ3N2KGRhdGEsIGNvbHVtbkRlZmluaXRpb25z LCByYW5nZXMpOwotCiAgICAgICBleHBlY3QoY3N2UmVzdWx0KS50b0VxdWFsKCcxLFwnbGVvcGFy ZFwnLFwnMTJcJ1xuNCxcJ3RpZ2VyXCcsXCcxMFwnJyk7CiAgICAgfSk7CiAKQEAgLTE1OCwxMCAr MTYwLDEwIEBAIGRlc2NyaWJlKCdSYW5nZUJvdW5kYXJ5TmF2aWdhdG9yJywgZnVuY3Rpb24gKCkg ewogCiAgICAgZGVzY3JpYmUoJ3doZW4gdGhlcmUgaXMgYW4gZXh0cmEgY29sdW1uIHdpdGggY2hl Y2tib3hlcycsIGZ1bmN0aW9uICgpIHsKICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewot ICAgICAgICBjb2x1bW5EZWZpbml0aW9ucyA9IFt7bmFtZTogJ25vdC1hLWRhdGEtY29sdW1uJ30s IHtuYW1lOiAnaWQnLCBwb3M6IDB9LCB7bmFtZTogJ2FuaW1hbCcsIHBvczogMX0sIHsKLSAgICAg ICAgICBuYW1lOiAnc2l6ZScsCi0gICAgICAgICAgcG9zOiAyLAotICAgICAgICB9XTsKKyAgICAg ICAgY29sdW1uRGVmaW5pdGlvbnMgPSBbe25hbWU6ICdub3QtYS1kYXRhLWNvbHVtbid9LAorICAg ICAgICAgIHtuYW1lOiAnaWQnLCBmaWVsZDogJ2lkJywgcG9zOiAwfSwKKyAgICAgICAgICB7bmFt ZTogJ2FuaW1hbCcsIGZpZWxkOiAnYW5pbWFsJywgcG9zOiAxfSwKKyAgICAgICAgICB7bmFtZTog J3NpemUnLCBmaWVsZDogJ3NpemUnLHBvczogMn1dOwogICAgICAgICByYW5nZXMgPSBbbmV3IFNs aWNrLlJhbmdlKDAsIDAsIDAsIDMpLCBuZXcgU2xpY2suUmFuZ2UoMywgMCwgMywgMyldOwogICAg ICAgfSk7CiAKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9u L3Jvd19zZWxlY3Rvcl9zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxlY3Rp b24vcm93X3NlbGVjdG9yX3NwZWMuanMKaW5kZXggZGIzYzBiNC4uYjZkNGQwMSAxMDA2NDQKLS0t IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcm93X3NlbGVjdG9yX3NwZWMu anMKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcm93X3NlbGVjdG9y X3NwZWMuanMKQEAgLTYsNyArNiw2IEBACiAvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVu ZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKIC8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCiBpbXBv cnQgJCBmcm9tICdqcXVlcnknOwogCiBpbXBvcnQgU2xpY2sgZnJvbSAnc2xpY2tncmlkJzsKQEAg LTIzLDcgKzIyLDcgQEAgZGVzY3JpYmUoJ1Jvd1NlbGVjdG9yJywgZnVuY3Rpb24gKCkgewogICAg IFVQOiAzOCwKICAgICBET1dOOiA0MCwKICAgfTsKLSAgdmFyIGNvbnRhaW5lciwgZGF0YSwgY29s dW1uRGVmaW5pdGlvbnMsIGdyaWQsIGNlbGxTZWxlY3Rpb25Nb2RlbDsKKyAgdmFyIGNvbnRhaW5l ciwgZGF0YVZpZXcsIGNvbHVtbkRlZmluaXRpb25zLCBncmlkLCBjZWxsU2VsZWN0aW9uTW9kZWw7 CiAgIHZhciBTbGlja0dyaWQgPSBTbGljay5HcmlkOwogCiAgIGJlZm9yZUVhY2goZnVuY3Rpb24g KCkgewpAQCAtNDMsMTQgKzQyLDE1IEBAIGRlc2NyaWJlKCdSb3dTZWxlY3RvcicsIGZ1bmN0aW9u ICgpIHsKICAgICAgIHBvczogMSwKICAgICB9XTsKIAorICAgIGRhdGFWaWV3ID0gbmV3IFNsaWNr LkRhdGEuRGF0YVZpZXcoKTsKICAgICB2YXIgcm93U2VsZWN0b3IgPSBuZXcgUm93U2VsZWN0b3Io KTsKLSAgICBkYXRhID0gW107CisgICAgdmFyIGRhdGEgPSBbXTsKICAgICBmb3IgKHZhciBpID0g MDsgaSA8IDEwOyBpKyspIHsKLSAgICAgIGRhdGEucHVzaChbJ3NvbWUtdmFsdWUtJyArIGksICdz ZWNvbmQgdmFsdWUgJyArIGldKTsKKyAgICAgIGRhdGEucHVzaCh7J3NvbWUtY29sdW1uLW5hbWUn Oidzb21lLXZhbHVlLScgKyBpLCAnc2Vjb25kIGNvbHVtbic6J3NlY29uZCB2YWx1ZSAnICsgaX0p OwogICAgIH0KICAgICBjb2x1bW5EZWZpbml0aW9ucyA9IHJvd1NlbGVjdG9yLmdldENvbHVtbkRl ZmluaXRpb25zKGNvbHVtbkRlZmluaXRpb25zKTsKLSAgICBncmlkID0gbmV3IFNsaWNrR3JpZChj b250YWluZXIsIGRhdGEsIGNvbHVtbkRlZmluaXRpb25zKTsKLQorICAgIGRhdGFWaWV3LnNldEl0 ZW1zKGRhdGEsICdzb21lLWNvbHVtbi1uYW1lJyk7CisgICAgZ3JpZCA9IG5ldyBTbGlja0dyaWQo Y29udGFpbmVyLCBkYXRhVmlldywgY29sdW1uRGVmaW5pdGlvbnMpOwogICAgIGdyaWQucmVnaXN0 ZXJQbHVnaW4obmV3IEFjdGl2ZUNlbGxDYXB0dXJlKCkpOwogICAgIGNlbGxTZWxlY3Rpb25Nb2Rl bCA9IG5ldyBYQ2VsbFNlbGVjdGlvbk1vZGVsKCk7CiAgICAgZ3JpZC5zZXRTZWxlY3Rpb25Nb2Rl bChjZWxsU2VsZWN0aW9uTW9kZWwpOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNj cmlwdC9zZWxlY3Rpb24vc2V0X3N0YWdlZF9yb3dzX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9q YXZhc2NyaXB0L3NlbGVjdGlvbi9zZXRfc3RhZ2VkX3Jvd3Nfc3BlYy5qcwppbmRleCA2NzM1MzE0 Li42ZmQ3ODBhIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NlbGVjdGlv bi9zZXRfc3RhZ2VkX3Jvd3Nfc3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0 L3NlbGVjdGlvbi9zZXRfc3RhZ2VkX3Jvd3Nfc3BlYy5qcwpAQCAtNywyMzYgKzcsMjQ3IEBACiAv LwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8KIAotZGVmaW5lKFsKLSAgJ2pxdWVyeScsCi0gICd1bmRlcnNjb3JlJywKLSAgJ3Nv dXJjZXMvc2VsZWN0aW9uL3NldF9zdGFnZWRfcm93cycsCi1dLCBmdW5jdGlvbiAoJCwgXywgU2V0 U3RhZ2VkUm93cykgewotICBkZXNjcmliZSgnc2V0X3N0YWdlZF9yb3dzJywgZnVuY3Rpb24gKCkg ewotICAgIHZhciBzcWxFZGl0b3JPYmosIGdyaWRTcHksIGRlbGV0ZUJ1dHRvbiwgY29weUJ1dHRv biwgc2VsZWN0aW9uU3B5OwotICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewotICAgICAgZ3Jp ZFNweSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdncmlkU3B5JywgWydnZXREYXRhJywgJ2dldENl bGxOb2RlJywgJ2dldENvbHVtbnMnXSk7Ci0gICAgICBncmlkU3B5LmdldERhdGEuYW5kLnJldHVy blZhbHVlKFsKLSAgICAgICAgezA6ICdvbmUnLCAxOiAndHdvJywgX190ZW1wX1BLOiAnMTIzJ30s Ci0gICAgICAgIHswOiAndGhyZWUnLCAxOiAnZm91cicsIF9fdGVtcF9QSzogJzQ1Nid9LAotICAg ICAgICB7MDogJ2ZpdmUnLCAxOiAnc2l4JywgX190ZW1wX1BLOiAnNzg5J30sCi0gICAgICAgIHsw OiAnc2V2ZW4nLCAxOiAnZWlnaHQnLCBfX3RlbXBfUEs6ICc0MzInfSwKLSAgICAgIF0pOwotICAg ICAgZ3JpZFNweS5nZXRDb2x1bW5zLmFuZC5yZXR1cm5WYWx1ZShbCitpbXBvcnQgJCBmcm9tICdq cXVlcnknOworaW1wb3J0ICdzbGlja2dyaWQuZ3JpZCc7CitpbXBvcnQgU2xpY2sgZnJvbSAnc2xp Y2tncmlkJzsKK2ltcG9ydCBTZXRTdGFnZWRSb3dzIGZyb20gJ3NvdXJjZXMvc2VsZWN0aW9uL3Nl dF9zdGFnZWRfcm93cyc7CisKK2Rlc2NyaWJlKCdzZXRfc3RhZ2VkX3Jvd3MnLCBmdW5jdGlvbiAo KSB7CisgIHZhciBzcWxFZGl0b3JPYmosIGdyaWRTcHksIGRlbGV0ZUJ1dHRvbiwgY29weUJ1dHRv biwgc2VsZWN0aW9uU3B5OworICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZGF0 YSA9IFt7J2EgcGsgY29sdW1uJzogJ29uZScsICdzb21lIGNvbHVtbic6ICd0d28nLCAnX190ZW1w X1BLJzogJzEyMyd9LAorICAgICAgICB7J2EgcGsgY29sdW1uJzogJ3RocmVlJywgJ3NvbWUgY29s dW1uJzogJ2ZvdXInLCAnX190ZW1wX1BLJzogJzQ1Nid9LAorICAgICAgICB7J2EgcGsgY29sdW1u JzogJ2ZpdmUnLCAnc29tZSBjb2x1bW4nOiAnc2l4JywgJ19fdGVtcF9QSyc6ICc3ODknfSwKKyAg ICAgICAgeydhIHBrIGNvbHVtbic6ICdzZXZlbicsICdzb21lIGNvbHVtbic6ICdlaWdodCcsICdf X3RlbXBfUEsnOiAnNDMyJ31dLAorICAgICAgZGF0YVZpZXcgPSBuZXcgU2xpY2suRGF0YS5EYXRh VmlldygpOworCisgICAgZGF0YVZpZXcuc2V0SXRlbXMoZGF0YSwgJ19fdGVtcF9QSycpOworCisg ICAgZ3JpZFNweSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdncmlkU3B5JywgWydnZXREYXRhJywg J2dldENlbGxOb2RlJywgJ2dldENvbHVtbnMnXSk7CisgICAgZ3JpZFNweS5nZXREYXRhLmFuZC5y ZXR1cm5WYWx1ZShkYXRhVmlldyk7CisgICAgZ3JpZFNweS5nZXRDb2x1bW5zLmFuZC5yZXR1cm5W YWx1ZShbCisgICAgICB7CisgICAgICAgIG5hbWU6ICdhIHBrIGNvbHVtbicsCisgICAgICAgIGZp ZWxkOiAnYSBwayBjb2x1bW4nLAorICAgICAgICBwb3M6IDAsCisgICAgICAgIHNlbGVjdGFibGU6 IHRydWUsCisgICAgICB9LCB7CisgICAgICAgIG5hbWU6ICdzb21lIGNvbHVtbicsCisgICAgICAg IGZpZWxkOiAnc29tZSBjb2x1bW4nLAorICAgICAgICBwb3M6IDEsCisgICAgICAgIHNlbGVjdGFi bGU6IHRydWUsCisgICAgICB9LAorICAgIF0pOworICAgIHNlbGVjdGlvblNweSA9IGphc21pbmUu Y3JlYXRlU3B5T2JqKCdzZWxlY3Rpb25TcHknLCBbJ3NldFNlbGVjdGVkUm93cycsICdnZXRTZWxl Y3RlZFJhbmdlcyddKTsKKyAgICBkZWxldGVCdXR0b24gPSAkKCc8YnV0dG9uIGlkPSJidG4tZGVs ZXRlLXJvdyI+PC9idXR0b24+Jyk7CisgICAgY29weUJ1dHRvbiA9ICQoJzxidXR0b24gaWQ9ImJ0 bi1jb3B5LXJvdyI+PC9idXR0b24+Jyk7CisKKyAgICBzcWxFZGl0b3JPYmogPSB7CisgICAgICBn cmlkOiBncmlkU3B5LAorICAgICAgZWRpdG9yOiB7CisgICAgICAgIGhhbmRsZXI6IHsKKyAgICAg ICAgICBkYXRhX3N0b3JlOiB7CisgICAgICAgICAgICBzdGFnZWRfcm93czogeyc0NTYnOiB7fX0s CisgICAgICAgICAgfSwKKyAgICAgICAgICBjYW5fZWRpdDogZmFsc2UsCisgICAgICAgIH0sCisg ICAgICB9LAorICAgICAga2V5czogbnVsbCwKKyAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uU3B5 LAorICAgICAgY29sdW1uczogWwogICAgICAgICB7CisgICAgICAgICAgbmFtZTogJ2EgcGsgY29s dW1uJywKKyAgICAgICAgICBmaWVsZDogJ2EgcGsgY29sdW1uJywKICAgICAgICAgICBwb3M6IDAs Ci0gICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwKLSAgICAgICAgfSwgeworICAgICAgICB9LAor ICAgICAgICB7CisgICAgICAgICAgbmFtZTogJ3NvbWUgY29sdW1uJywKKyAgICAgICAgICBmaWVs ZDogJ3NvbWUgY29sdW1uJywKICAgICAgICAgICBwb3M6IDEsCi0gICAgICAgICAgc2VsZWN0YWJs ZTogdHJ1ZSwKICAgICAgICAgfSwKLSAgICAgIF0pOworICAgICAgXSwKKyAgICAgIGNsaWVudF9w cmltYXJ5X2tleTogJ19fdGVtcF9QSycsCisgICAgfTsKIAotICAgICAgc2VsZWN0aW9uU3B5ID0g amFzbWluZS5jcmVhdGVTcHlPYmooJ3NlbGVjdGlvblNweScsIFsnc2V0U2VsZWN0ZWRSb3dzJywg J2dldFNlbGVjdGVkUmFuZ2VzJ10pOworICAgICQoJ2JvZHknKS5hcHBlbmQoZGVsZXRlQnV0dG9u KTsKKyAgICAkKCdib2R5JykuYXBwZW5kKGNvcHlCdXR0b24pOwogCi0gICAgICBkZWxldGVCdXR0 b24gPSAkKCc8YnV0dG9uIGlkPSJidG4tZGVsZXRlLXJvdyI+PC9idXR0b24+Jyk7Ci0gICAgICBj b3B5QnV0dG9uID0gJCgnPGJ1dHRvbiBpZD0iYnRuLWNvcHktcm93Ij48L2J1dHRvbj4nKTsKKyAg ICBkZWxldGVCdXR0b24ucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICBjb3B5QnV0dG9uLnBy b3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAKLSAgICAgIHNxbEVkaXRvck9iaiA9IHsKLSAgICAgICAg Z3JpZDogZ3JpZFNweSwKLSAgICAgICAgZWRpdG9yOiB7Ci0gICAgICAgICAgaGFuZGxlcjogewot ICAgICAgICAgICAgZGF0YV9zdG9yZTogewotICAgICAgICAgICAgICBzdGFnZWRfcm93czogeyc0 NTYnOiB7fX0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgY2FuX2VkaXQ6IGZhbHNlLAot ICAgICAgICAgIH0sCi0gICAgICAgIH0sCi0gICAgICAgIGtleXM6IG51bGwsCi0gICAgICAgIHNl bGVjdGlvbjogc2VsZWN0aW9uU3B5LAotICAgICAgICBjb2x1bW5zOiBbCi0gICAgICAgICAgewot ICAgICAgICAgICAgbmFtZTogJ2EgcGsgY29sdW1uJywKLSAgICAgICAgICAgIHBvczogMCwKLSAg ICAgICAgICB9LAotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWU6ICdzb21lIGNvbHVtbics Ci0gICAgICAgICAgICBwb3M6IDEsCi0gICAgICAgICAgfSwKLSAgICAgICAgXSwKLSAgICAgIH07 CisgICAgc2VsZWN0aW9uU3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ3NlbGVjdGlvblNweScs IFsKKyAgICAgICdzZXRTZWxlY3RlZFJvd3MnLAorICAgICAgJ2dldFNlbGVjdGVkUmFuZ2VzJywK KyAgICBdKTsKKyAgfSk7CiAKLSAgICAgICQoJ2JvZHknKS5hcHBlbmQoZGVsZXRlQnV0dG9uKTsK LSAgICAgICQoJ2JvZHknKS5hcHBlbmQoY29weUJ1dHRvbik7CisgIGFmdGVyRWFjaChmdW5jdGlv biAoKSB7CisgICAgY29weUJ1dHRvbi5yZW1vdmUoKTsKKyAgICBkZWxldGVCdXR0b24ucmVtb3Zl KCk7CisgIH0pOworICBkZXNjcmliZSgnd2hlbiBubyBmdWxsIHJvd3MgYXJlIHNlbGVjdGVkJywg ZnVuY3Rpb24gKCkgeworICAgIGRlc2NyaWJlKCd3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQnLCBm dW5jdGlvbiAoKSB7CisgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2Vs ZWN0aW9uU3B5LmdldFNlbGVjdGVkUmFuZ2VzLmFuZC5yZXR1cm5WYWx1ZShbXSk7CisgICAgICAg IHNxbEVkaXRvck9iai5zZWxlY3Rpb24gPSBzZWxlY3Rpb25TcHk7CisgICAgICAgIFNldFN0YWdl ZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7CisgICAgICB9KTsKIAotICAgICAgZGVs ZXRlQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Ci0gICAgICBjb3B5QnV0dG9uLnByb3Ao J2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhlIGRlbGV0ZSBy b3cgYnV0dG9uJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoJCgnI2J0bi1kZWxldGUt cm93JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpOworICAgICAgfSk7CiAKLSAgICAg IHNlbGVjdGlvblNweSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdzZWxlY3Rpb25TcHknLCBbCi0g ICAgICAgICdzZXRTZWxlY3RlZFJvd3MnLAotICAgICAgICAnZ2V0U2VsZWN0ZWRSYW5nZXMnLAot ICAgICAgXSk7Ci0gICAgfSk7CisgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhlIGNvcHkgcm93 IGJ1dHRvbicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KCQoJyNidG4tY29weS1yb3cn KS5wcm9wKCdkaXNhYmxlZCcpKS50b0JlVHJ1dGh5KCk7CisgICAgICB9KTsKIAotICAgIGFmdGVy RWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICBjb3B5QnV0dG9uLnJlbW92ZSgpOwotICAgICAgZGVs ZXRlQnV0dG9uLnJlbW92ZSgpOworICAgICAgaXQoJ3Nob3VsZCBjbGVhciBzdGFnZWQgcm93cycs IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxl ci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKKyAgICAgIH0pOwogICAgIH0p OwotICAgIGRlc2NyaWJlKCd3aGVuIG5vIGZ1bGwgcm93cyBhcmUgc2VsZWN0ZWQnLCBmdW5jdGlv biAoKSB7Ci0gICAgICBkZXNjcmliZSgnd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkJywgZnVuY3Rp b24gKCkgewotICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBzZWxl Y3Rpb25TcHkuZ2V0U2VsZWN0ZWRSYW5nZXMuYW5kLnJldHVyblZhbHVlKFtdKTsKLSAgICAgICAg ICBzcWxFZGl0b3JPYmouc2VsZWN0aW9uID0gc2VsZWN0aW9uU3B5OwotICAgICAgICAgIFNldFN0 YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7Ci0gICAgICAgIH0pOwogCi0gICAg ICAgIGl0KCdzaG91bGQgZGlzYWJsZSB0aGUgZGVsZXRlIHJvdyBidXR0b24nLCBmdW5jdGlvbiAo KSB7Ci0gICAgICAgICAgZXhwZWN0KCQoJyNidG4tZGVsZXRlLXJvdycpLnByb3AoJ2Rpc2FibGVk JykpLnRvQmVUcnV0aHkoKTsKLSAgICAgICAgfSk7CisgICAgZGVzY3JpYmUoJ3doZW4gdGhlcmUg aXMgYSBzZWxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7CisgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgdmFyIHJhbmdlID0geworICAgICAgICAgIGZyb21DZWxsOiAwLAorICAg ICAgICAgIHRvQ2VsbDogMCwKKyAgICAgICAgICBmcm9tUm93OiAxLAorICAgICAgICAgIHRvUm93 OiAxLAorICAgICAgICB9OwogCi0gICAgICAgIGl0KCdzaG91bGQgZGlzYWJsZSB0aGUgY29weSBy b3cgYnV0dG9uJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgIGV4cGVjdCgkKCcjYnRuLWNvcHkt cm93JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpOwotICAgICAgICB9KTsKKyAgICAg ICAgc2VsZWN0aW9uU3B5LmdldFNlbGVjdGVkUmFuZ2VzLmFuZC5yZXR1cm5WYWx1ZShbcmFuZ2Vd KTsKKyAgICAgICAgc3FsRWRpdG9yT2JqLnNlbGVjdGlvbiA9IHNlbGVjdGlvblNweTsKKyAgICAg ICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9KTsKKyAgICAgIH0pOwog Ci0gICAgICAgIGl0KCdzaG91bGQgY2xlYXIgc3RhZ2VkIHJvd3MnLCBmdW5jdGlvbiAoKSB7Ci0g ICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0 YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKLSAgICAgICAgfSk7CisgICAgICBpdCgnc2hvdWxkIGRp c2FibGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBl Y3QoJCgnI2J0bi1kZWxldGUtcm93JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpOwog ICAgICAgfSk7CiAKLSAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZXJlIGlzIGEgc2VsZWN0aW9uJywg ZnVuY3Rpb24gKCkgewotICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg ICB2YXIgcmFuZ2UgPSB7Ci0gICAgICAgICAgICBmcm9tQ2VsbDogMCwKLSAgICAgICAgICAgIHRv Q2VsbDogMCwKLSAgICAgICAgICAgIGZyb21Sb3c6IDEsCi0gICAgICAgICAgICB0b1JvdzogMSwK LSAgICAgICAgICB9OwotCi0gICAgICAgICAgc2VsZWN0aW9uU3B5LmdldFNlbGVjdGVkUmFuZ2Vz LmFuZC5yZXR1cm5WYWx1ZShbcmFuZ2VdKTsKLSAgICAgICAgICBzcWxFZGl0b3JPYmouc2VsZWN0 aW9uID0gc2VsZWN0aW9uU3B5OwotICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0 b3JPYmosIHt9LCB7fSk7Ci0gICAgICAgIH0pOworICAgICAgaXQoJ3Nob3VsZCBkaXNhYmxlIHRo ZSBjb3B5IHJvdyBidXR0b24nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGVjdCgkKCcjYnRu LWNvcHktcm93JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZUZhbHN5KCk7CisgICAgICB9KTsKIAot ICAgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uJywgZnVuY3Rp b24gKCkgewotICAgICAgICAgIGV4cGVjdCgkKCcjYnRuLWRlbGV0ZS1yb3cnKS5wcm9wKCdkaXNh YmxlZCcpKS50b0JlVHJ1dGh5KCk7Ci0gICAgICAgIH0pOworICAgICAgaXQoJ3Nob3VsZCBjbGVh ciBzdGFnZWQgcm93cycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9i ai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKKyAg ICAgIH0pOworICAgIH0pOworICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhl IGNvcHkgcm93IGJ1dHRvbicsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBleHBlY3QoJCgnI2J0 bi1jb3B5LXJvdycpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVGYWxzeSgpOwotICAgICAgICB9KTsK KyAgZGVzY3JpYmUoJ3doZW4gMiBmdWxsIHJvd3MgYXJlIHNlbGVjdGVkJywgZnVuY3Rpb24gKCkg eworICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHJhbmdlMSA9IHsKKyAg ICAgICAgZnJvbUNlbGw6IDAsCisgICAgICAgIHRvQ2VsbDogMSwKKyAgICAgICAgZnJvbVJvdzog MSwKKyAgICAgICAgdG9Sb3c6IDEsCisgICAgICB9OworICAgICAgdmFyIHJhbmdlMiA9IHsKKyAg ICAgICAgZnJvbUNlbGw6IDAsCisgICAgICAgIHRvQ2VsbDogMSwKKyAgICAgICAgZnJvbVJvdzog MiwKKyAgICAgICAgdG9Sb3c6IDIsCisgICAgICB9OwogCi0gICAgICAgIGl0KCdzaG91bGQgY2xl YXIgc3RhZ2VkIHJvd3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgZXhwZWN0KHNxbEVkaXRv ck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsK LSAgICAgICAgfSk7Ci0gICAgICB9KTsKKyAgICAgIHNlbGVjdGlvblNweS5nZXRTZWxlY3RlZFJh bmdlcy5hbmQucmV0dXJuVmFsdWUoW3JhbmdlMSwgcmFuZ2UyXSk7CisgICAgICBzcWxFZGl0b3JP Ymouc2VsZWN0aW9uID0gc2VsZWN0aW9uU3B5OwogICAgIH0pOwogCi0gICAgZGVzY3JpYmUoJ3do ZW4gMiBmdWxsIHJvd3MgYXJlIHNlbGVjdGVkJywgZnVuY3Rpb24gKCkgewotICAgICAgYmVmb3Jl RWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciByYW5nZTEgPSB7Ci0gICAgICAgICAgZnJv bUNlbGw6IDAsCi0gICAgICAgICAgdG9DZWxsOiAxLAotICAgICAgICAgIGZyb21Sb3c6IDEsCi0g ICAgICAgICAgdG9Sb3c6IDEsCi0gICAgICAgIH07Ci0gICAgICAgIHZhciByYW5nZTIgPSB7Ci0g ICAgICAgICAgZnJvbUNlbGw6IDAsCi0gICAgICAgICAgdG9DZWxsOiAxLAotICAgICAgICAgIGZy b21Sb3c6IDIsCi0gICAgICAgICAgdG9Sb3c6IDIsCi0gICAgICAgIH07CisgICAgZGVzY3JpYmUo J3doZW4gdGFibGUgZG9lcyBub3QgaGF2ZSBwcmltYXJ5IGtleXMnLCBmdW5jdGlvbiAoKSB7Cisg ICAgICBpdCgnc2hvdWxkIGVuYWJsZSB0aGUgY29weSByb3cgYnV0dG9uJywgZnVuY3Rpb24gKCkg eworICAgICAgICBTZXRTdGFnZWRSb3dzLmNhbGwoc3FsRWRpdG9yT2JqLCB7fSwge30pOworICAg ICAgICBleHBlY3QoJCgnI2J0bi1jb3B5LXJvdycpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVGYWxz eSgpOworICAgICAgfSk7CiAKLSAgICAgICAgc2VsZWN0aW9uU3B5LmdldFNlbGVjdGVkUmFuZ2Vz LmFuZC5yZXR1cm5WYWx1ZShbcmFuZ2UxLCByYW5nZTJdKTsKLSAgICAgICAgc3FsRWRpdG9yT2Jq LnNlbGVjdGlvbiA9IHNlbGVjdGlvblNweTsKKyAgICAgIGl0KCdzaG91bGQgbm90IGVuYWJsZSB0 aGUgZGVsZXRlIHJvdyBidXR0b24nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIFNldFN0YWdlZFJv d3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7CisgICAgICAgIGV4cGVjdCgkKCcjYnRuLWRl bGV0ZS1yb3cnKS5wcm9wKCdkaXNhYmxlZCcpKS50b0JlVHJ1dGh5KCk7CiAgICAgICB9KTsKIAot ICAgICAgZGVzY3JpYmUoJ3doZW4gdGFibGUgZG9lcyBub3QgaGF2ZSBwcmltYXJ5IGtleXMnLCBm dW5jdGlvbiAoKSB7Ci0gICAgICAgIGl0KCdzaG91bGQgZW5hYmxlIHRoZSBjb3B5IHJvdyBidXR0 b24nLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRv ck9iaiwge30sIHt9KTsKLSAgICAgICAgICBleHBlY3QoJCgnI2J0bi1jb3B5LXJvdycpLnByb3Ao J2Rpc2FibGVkJykpLnRvQmVGYWxzeSgpOwotICAgICAgICB9KTsKKyAgICAgIGl0KCdzaG91bGQg dXBkYXRlIHN0YWdlZCByb3dzIHdpdGggdGhlIF9fdGVtcF9QSyB2YWx1ZSBvZiB0aGUgbmV3IFNl bGVjdGVkIFJvd3MnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChz cWxFZGl0b3JPYmosIHt9LCB7fSk7CisgICAgICAgIGV4cGVjdChzcWxFZGl0b3JPYmouZWRpdG9y LmhhbmRsZXIuZGF0YV9zdG9yZS5zdGFnZWRfcm93cykudG9FcXVhbCh7JzQ1Nic6IHt9LCAnNzg5 Jzoge319KTsKKyAgICAgIH0pOwogCi0gICAgICAgIGl0KCdzaG91bGQgbm90IGVuYWJsZSB0aGUg ZGVsZXRlIHJvdyBidXR0b24nLCBmdW5jdGlvbiAoKSB7CisgICAgICBkZXNjcmliZSgndGhlIHVz ZXIgY2FuIGVkaXQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGl0KCdzaG91bGQgZW5hYmxlIHRo ZSBkZWxldGUgcm93IGJ1dHRvbicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBzcWxFZGl0b3JP YmouZWRpdG9yLmhhbmRsZXIuY2FuX2VkaXQgPSB0cnVlOwogICAgICAgICAgIFNldFN0YWdlZFJv d3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7Ci0gICAgICAgICAgZXhwZWN0KCQoJyNidG4t ZGVsZXRlLXJvdycpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgICBl eHBlY3QoJCgnI2J0bi1kZWxldGUtcm93JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZUZhbHN5KCk7 CiAgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCB1 cGRhdGUgc3RhZ2VkIHJvd3Mgd2l0aCB0aGUgX190ZW1wX1BLIHZhbHVlIG9mIHRoZSBuZXcgU2Vs ZWN0ZWQgUm93cycsIGZ1bmN0aW9uICgpIHsKKyAgICBkZXNjcmliZSgnd2hlbiB0YWJsZSBoYXMg cHJpbWFyeSBrZXlzJywgZnVuY3Rpb24gKCkgeworICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAo KSB7CisgICAgICAgIHNxbEVkaXRvck9iai5rZXlzID0geydhIHBrIGNvbHVtbic6ICd2YXJjaGFy J307CisgICAgICAgIHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0YWdl ZF9yb3dzID0geyc0NTYnOiB7J2EgcGsgY29sdW1uJzogJ3RocmVlJ319OworICAgICAgfSk7CisK KyAgICAgIGRlc2NyaWJlKCdzZWxlY3RlZCByb3dzIGhhdmUgcHJpbWFyeSBrZXknLCBmdW5jdGlv biAoKSB7CisgICAgICAgIGl0KCdzaG91bGQgc2V0IHRoZSBzdGFnZWQgcm93cyBjb3JyZWN0bHkn LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9i aiwge30sIHt9KTsKLSAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLmVkaXRvci5oYW5kbGVy LmRhdGFfc3RvcmUuc3RhZ2VkX3Jvd3MpLnRvRXF1YWwoeyc0NTYnOiB7fSwgJzc4OSc6IHt9fSk7 CisgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3Jl LnN0YWdlZF9yb3dzKS50b0VxdWFsKAorICAgICAgICAgICAgeyc0NTYnOiB7J2EgcGsgY29sdW1u JzogJ3RocmVlJ30sICc3ODknOiB7J2EgcGsgY29sdW1uJzogJ2ZpdmUnfX0pOwogICAgICAgICB9 KTsKIAotICAgICAgICBkZXNjcmliZSgndGhlIHVzZXIgY2FuIGVkaXQnLCBmdW5jdGlvbiAoKSB7 Ci0gICAgICAgICAgaXQoJ3Nob3VsZCBlbmFibGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uJywgZnVu Y3Rpb24gKCkgewotICAgICAgICAgICAgc3FsRWRpdG9yT2JqLmVkaXRvci5oYW5kbGVyLmNhbl9l ZGl0ID0gdHJ1ZTsKLSAgICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmos IHt9LCB7fSk7Ci0gICAgICAgICAgICBleHBlY3QoJCgnI2J0bi1kZWxldGUtcm93JykucHJvcCgn ZGlzYWJsZWQnKSkudG9CZUZhbHN5KCk7Ci0gICAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91 bGQgbm90IGNsZWFyIHNlbGVjdGVkIHJvd3MgaW4gQ2VsbCBTZWxlY3Rpb24gTW9kZWwnLCBmdW5j dGlvbiAoKSB7CisgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30s IHt9KTsKKyAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLnNlbGVjdGlvbi5zZXRTZWxlY3Rl ZFJvd3MpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgpOwogICAgICAgICB9KTsKICAgICAgIH0p OwogCi0gICAgICBkZXNjcmliZSgnd2hlbiB0YWJsZSBoYXMgcHJpbWFyeSBrZXlzJywgZnVuY3Rp b24gKCkgeworICAgICAgZGVzY3JpYmUoJ3NlbGVjdGVkIHJvd3MgbWlzc2luZyBwcmltYXJ5IGtl eScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAg ICAgICAgc3FsRWRpdG9yT2JqLmtleXMgPSB7J2EgcGsgY29sdW1uJzogJ3ZhcmNoYXInfTsKLSAg ICAgICAgICBzcWxFZGl0b3JPYmouZWRpdG9yLmhhbmRsZXIuZGF0YV9zdG9yZS5zdGFnZWRfcm93 cyA9IHsnNDU2JzogezA6ICd0aHJlZSd9fTsKLSAgICAgICAgfSk7CisgICAgICAgICAgdmFyIGRh dGEgPSBbeydhIHBrIGNvbHVtbic6ICdvbmUnLCAnc29tZSBjb2x1bW4nOiAndHdvJywgJ19fdGVt cF9QSyc6ICcxMjMnfSwKKyAgICAgICAgICAgICAgICB7J3NvbWUgY29sdW1uJzogJ2ZvdXInLCAn X190ZW1wX1BLJzogJzQ1Nid9LAorICAgICAgICAgICAgICAgIHsnc29tZSBjb2x1bW4nOiAnc2l4 JywgJ19fdGVtcF9QSyc6ICc3ODknfSwKKyAgICAgICAgICAgICAgICB7J2EgcGsgY29sdW1uJzog J3NldmVuJywgJ3NvbWUgY29sdW1uJzogJ2VpZ2h0JywgJ19fdGVtcF9QSyc6ICc0MzInfV0sCisg ICAgICAgICAgICBkYXRhVmlldyA9IG5ldyBTbGljay5EYXRhLkRhdGFWaWV3KCk7CiAKLSAgICAg ICAgZGVzY3JpYmUoJ3NlbGVjdGVkIHJvd3MgaGF2ZSBwcmltYXJ5IGtleScsIGZ1bmN0aW9uICgp IHsKLSAgICAgICAgICBpdCgnc2hvdWxkIHNldCB0aGUgc3RhZ2VkIHJvd3MgY29ycmVjdGx5Jywg ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9i aiwge30sIHt9KTsKLSAgICAgICAgICAgIGV4cGVjdChzcWxFZGl0b3JPYmouZWRpdG9yLmhhbmRs ZXIuZGF0YV9zdG9yZS5zdGFnZWRfcm93cykudG9FcXVhbCgKLSAgICAgICAgICAgICAgeyc0NTYn OiB7MDogJ3RocmVlJ30sICc3ODknOiB7MDogJ2ZpdmUnfX0pOwotICAgICAgICAgIH0pOworICAg ICAgICAgIGRhdGFWaWV3LnNldEl0ZW1zKGRhdGEsICdfX3RlbXBfUEsnKTsKIAotICAgICAgICAg IGl0KCdzaG91bGQgbm90IGNsZWFyIHNlbGVjdGVkIHJvd3MgaW4gQ2VsbCBTZWxlY3Rpb24gTW9k ZWwnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBTZXRTdGFnZWRSb3dzLmNhbGwoc3FsRWRp dG9yT2JqLCB7fSwge30pOwotICAgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5zZWxlY3Rp b24uc2V0U2VsZWN0ZWRSb3dzKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoKTsKLSAgICAgICAg ICB9KTsKKyAgICAgICAgICBncmlkU3B5LmdldERhdGEuYW5kLnJldHVyblZhbHVlKGRhdGFWaWV3 KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgZGVzY3JpYmUoJ3NlbGVjdGVkIHJvd3MgbWlzc2lu ZyBwcmltYXJ5IGtleScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0 aW9uICgpIHsKLSAgICAgICAgICAgIGdyaWRTcHkuZ2V0RGF0YS5hbmQucmV0dXJuVmFsdWUoWwot ICAgICAgICAgICAgICB7MDogJ29uZScsIDE6ICd0d28nLCBfX3RlbXBfUEs6ICcxMjMnfSwKLSAg ICAgICAgICAgICAgezE6ICdmb3VyJywgX190ZW1wX1BLOiAnNDU2J30sCi0gICAgICAgICAgICAg IHsxOiAnc2l4JywgX190ZW1wX1BLOiAnNzg5J30sCi0gICAgICAgICAgICAgIHswOiAnc2V2ZW4n LCAxOiAnZWlnaHQnLCBfX3RlbXBfUEs6ICc0MzInfSwKLSAgICAgICAgICAgIF0pOwotICAgICAg ICAgIH0pOwotCi0gICAgICAgICAgaXQoJ3Nob3VsZCBjbGVhciB0aGUgc3RhZ2VkIHJvd3MnLCBm dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBTZXRTdGFnZWRSb3dzLmNhbGwoc3FsRWRpdG9yT2Jq LCB7fSwge30pOwotICAgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxl ci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKLSAgICAgICAgICB9KTsKKyAg ICAgICAgaXQoJ3Nob3VsZCBjbGVhciB0aGUgc3RhZ2VkIHJvd3MnLCBmdW5jdGlvbiAoKSB7Cisg ICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9KTsKKyAgICAg ICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLmVkaXRvci5oYW5kbGVyLmRhdGFfc3RvcmUuc3RhZ2Vk X3Jvd3MpLnRvRXF1YWwoe30pOworICAgICAgICB9KTsKIAotICAgICAgICAgIGl0KCdzaG91bGQg Y2xlYXIgc2VsZWN0ZWQgcm93cyBpbiBDZWxsIFNlbGVjdGlvbiBNb2RlbCcsIGZ1bmN0aW9uICgp IHsKLSAgICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7 Ci0gICAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLnNlbGVjdGlvbi5zZXRTZWxlY3RlZFJv d3MpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtdKTsKLSAgICAgICAgICB9KTsKKyAgICAgICAgaXQo J3Nob3VsZCBjbGVhciBzZWxlY3RlZCByb3dzIGluIENlbGwgU2VsZWN0aW9uIE1vZGVsJywgZnVu Y3Rpb24gKCkgeworICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9 LCB7fSk7CisgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5zZWxlY3Rpb24uc2V0U2VsZWN0 ZWRSb3dzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXSk7CiAgICAgICAgIH0pOworICAgICAgfSk7 CiAKLSAgICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIHNlbGVjdGVkIHJvdyBpcyBhIG5ldyByb3cn LCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgdmFyIHBhcmVudERpdjsKLSAgICAgICAgICBiZWZv cmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBjaGlsZERpdiA9ICQoJzxkaXY+ PC9kaXY+Jyk7Ci0gICAgICAgICAgICBwYXJlbnREaXYgPSAkKCc8ZGl2IGNsYXNzPSJuZXdfcm93 Ij48L2Rpdj4nKTsKLSAgICAgICAgICAgIHBhcmVudERpdi5hcHBlbmQoY2hpbGREaXYpOwotICAg ICAgICAgICAgJCgnYm9keScpLmFwcGVuZChwYXJlbnREaXYpOwotICAgICAgICAgICAgZ3JpZFNw eS5nZXRDZWxsTm9kZS5hbmQucmV0dXJuVmFsdWUoY2hpbGREaXYpOwotICAgICAgICAgICAgU2V0 U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9KTsKLSAgICAgICAgICB9KTsKKyAg ICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBzZWxlY3RlZCByb3cgaXMgYSBuZXcgcm93JywgZnVuY3Rp b24gKCkgeworICAgICAgICB2YXIgcGFyZW50RGl2OworICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgICB2YXIgY2hpbGREaXYgPSAkKCc8ZGl2PjwvZGl2PicpOworICAg ICAgICAgIHBhcmVudERpdiA9ICQoJzxkaXYgY2xhc3M9Im5ld19yb3ciPjwvZGl2PicpOworICAg ICAgICAgIHBhcmVudERpdi5hcHBlbmQoY2hpbGREaXYpOworICAgICAgICAgICQoJ2JvZHknKS5h cHBlbmQocGFyZW50RGl2KTsKKyAgICAgICAgICBncmlkU3B5LmdldENlbGxOb2RlLmFuZC5yZXR1 cm5WYWx1ZShjaGlsZERpdik7CisgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRv ck9iaiwge30sIHt9KTsKKyAgICAgICAgfSk7CiAKLSAgICAgICAgICBhZnRlckVhY2goZnVuY3Rp b24gKCkgewotICAgICAgICAgICAgcGFyZW50RGl2LnJlbW92ZSgpOwotICAgICAgICAgIH0pOwor ICAgICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICAgIHBhcmVudERpdi5yZW1v dmUoKTsKKyAgICAgICAgfSk7CiAKLSAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBjbGVhciB0aGUg c3RhZ2VkIHJvd3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9y T2JqLmVkaXRvci5oYW5kbGVyLmRhdGFfc3RvcmUuc3RhZ2VkX3Jvd3MpLnRvRXF1YWwoewotICAg ICAgICAgICAgICAnNDU2JzogezA6ICd0aHJlZSd9LAotICAgICAgICAgICAgICAnNzg5JzogezA6 ICdmaXZlJ30sCi0gICAgICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBub3QgY2xlYXIg dGhlIHN0YWdlZCByb3dzJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgIGV4cGVjdChzcWxFZGl0 b3JPYmouZWRpdG9yLmhhbmRsZXIuZGF0YV9zdG9yZS5zdGFnZWRfcm93cykudG9FcXVhbCh7Cisg ICAgICAgICAgICAnNDU2JzogeydhIHBrIGNvbHVtbic6ICd0aHJlZSd9LAorICAgICAgICAgICAg Jzc4OSc6IHsnYSBwayBjb2x1bW4nOiAnZml2ZSd9LAogICAgICAgICAgIH0pOworICAgICAgICB9 KTsKIAotICAgICAgICAgIGl0KCdzaG91bGQgbm90IGNsZWFyIHNlbGVjdGVkIHJvd3MgaW4gQ2Vs bCBTZWxlY3Rpb24gTW9kZWwnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBleHBlY3Qoc3Fs RWRpdG9yT2JqLnNlbGVjdGlvbi5zZXRTZWxlY3RlZFJvd3MpLm5vdC50b0hhdmVCZWVuQ2FsbGVk KCk7Ci0gICAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IGNsZWFyIHNlbGVjdGVk IHJvd3MgaW4gQ2VsbCBTZWxlY3Rpb24gTW9kZWwnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg ZXhwZWN0KHNxbEVkaXRvck9iai5zZWxlY3Rpb24uc2V0U2VsZWN0ZWRSb3dzKS5ub3QudG9IYXZl QmVlbkNhbGxlZCgpOwogICAgICAgICB9KTsKICAgICAgIH0pOwogICAgIH0pOwogICB9KTsKIH0p OworCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NlbGVjdGlvbi94Y2Vs bF9zZWxlY3Rpb25fbW9kZWxfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2Vs ZWN0aW9uL3hjZWxsX3NlbGVjdGlvbl9tb2RlbF9zcGVjLmpzCmluZGV4IGY0MWQ5NmMuLmE3ZjE5 YWEgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL3hjZWxs X3NlbGVjdGlvbl9tb2RlbF9zcGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQv c2VsZWN0aW9uL3hjZWxsX3NlbGVjdGlvbl9tb2RlbF9zcGVjLmpzCkBAIC0zMywxNCArMzMsMTcg QEAgZGVzY3JpYmUoJ1hDZWxsU2VsZWN0aW9uTW9kZWwnLCBmdW5jdGlvbiAoKSB7CiAgICAgfSwg ewogICAgICAgaWQ6ICcxJywKICAgICAgIG5hbWU6ICdzb21lLWNvbHVtbi1uYW1lJywKKyAgICAg IGZpZWxkOiAnc29tZS1jb2x1bW4tbmFtZScsCiAgICAgICBwb3M6IDAsCiAgICAgfSwgewogICAg ICAgaWQ6ICdzZWNvbmQtY29sdW1uLWlkJywKICAgICAgIG5hbWU6ICdzZWNvbmQgY29sdW1uJywK KyAgICAgIGZpZWxkOiAnc2Vjb25kIGNvbHVtbicsCiAgICAgICBwb3M6IDEsCiAgICAgfSwgewog ICAgICAgaWQ6ICd0aGlyZC1jb2x1bW4taWQnLAogICAgICAgbmFtZTogJ3RoaXJkIGNvbHVtbics CisgICAgICBmaWVsZDogJ3RoaXJkIGNvbHVtbicsCiAgICAgICBwb3M6IDIsCiAgICAgfSwKICAg ICBdOwpAQCAtNTIsMTMgKzU1LDE1IEBAIGRlc2NyaWJlKCdYQ2VsbFNlbGVjdGlvbk1vZGVsJywg ZnVuY3Rpb24gKCkgewogICAgICAgICAnc2Vjb25kIGNvbHVtbic6ICdzZWNvbmQgdmFsdWUgJyAr IGksCiAgICAgICAgICd0aGlyZCBjb2x1bW4nOiAndGhpcmQgdmFsdWUgJyArIGksCiAgICAgICAg ICdmb3VydGggY29sdW1uJzogJ2ZvdXJ0aCB2YWx1ZSAnICsgaSwKKyAgICAgICAgJ19fdGVtcF9Q Syc6ICcxMjMnICsgaSwKICAgICAgIH0pOwogICAgIH0KICAgICBjb250YWluZXIgPSAkKCc8ZGl2 PjwvZGl2PicpOworICAgIHZhciBkYXRhVmlldyA9IG5ldyBTbGljay5EYXRhLkRhdGFWaWV3KCk7 CiAgICAgY29udGFpbmVyLmhlaWdodCg5OTk5KTsKICAgICBjb250YWluZXIud2lkdGgoOTk5OSk7 Ci0KLSAgICBncmlkID0gbmV3IFNsaWNrR3JpZChjb250YWluZXIsIGRhdGEsIGNvbHVtbnMpOwor ICAgIGRhdGFWaWV3LnNldEl0ZW1zKGRhdGEsICdfX3RlbXBfUEsnKTsKKyAgICBncmlkID0gbmV3 IFNsaWNrR3JpZChjb250YWluZXIsIGRhdGFWaWV3LCBjb2x1bW5zKTsKICAgICBncmlkLnNldFNl bGVjdGlvbk1vZGVsKG5ldyBYQ2VsbFNlbGVjdGlvbk1vZGVsKCkpOwogICAgICQoJ2JvZHknKS5h cHBlbmQoY29udGFpbmVyKTsKICAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L3NsaWNrZ3JpZC9ldmVudF9oYW5kbGVycy9oYW5kbGVfcXVlcnlfb3V0cHV0X2tleWJv YXJkX2V2ZW50X3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NsaWNrZ3JpZC9l dmVudF9oYW5kbGVycy9oYW5kbGVfcXVlcnlfb3V0cHV0X2tleWJvYXJkX2V2ZW50X3NwZWMuanMK aW5kZXggZTJlZGFmNy4uODA3ZTQ2OCAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNj cmlwdC9zbGlja2dyaWQvZXZlbnRfaGFuZGxlcnMvaGFuZGxlX3F1ZXJ5X291dHB1dF9rZXlib2Fy ZF9ldmVudF9zcGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2xpY2tncmlk L2V2ZW50X2hhbmRsZXJzL2hhbmRsZV9xdWVyeV9vdXRwdXRfa2V5Ym9hcmRfZXZlbnRfc3BlYy5q cwpAQCAtMjgsMjEgKzI4LDIyIEBAIGRlc2NyaWJlKCcjaGFuZGxlUXVlcnlPdXRwdXRLZXlib2Fy ZEV2ZW50JywgZnVuY3Rpb24gKCkgewogICAgICAgbWV0YUtleTogZmFsc2UsCiAgICAgICB3aGlj aDogLTEsCiAgICAgICBrZXlDb2RlOiAtMSwKLSAgICAgIHByZXZlbnREZWZhdWx0OiBqYXNtaW5l LmNyZWF0ZVNweSgncHJldmVudERlZmF1bHQnKSwKKyAgICAgIHByZXZlbnREZWZhdWx0OiBqYXNt aW5lLmNyZWF0ZVNweSgncHJldmVudERlZmF1bHQnKQogICAgIH07CiAKLSAgICB2YXIgZGF0YSA9 IFtbJycsICcwLDAtY2VsbC1jb250ZW50JywgJzAsMS1jZWxsLWNvbnRlbnQnXSwKLSAgICAgIFsn JywgJzEsMC1jZWxsLWNvbnRlbnQnLCAnMSwxLWNlbGwtY29udGVudCddLAotICAgICAgWycnLCAn MiwwLWNlbGwtY29udGVudCcsICcyLDEtY2VsbC1jb250ZW50J11dOwotICAgIHZhciBjb2x1bW5E ZWZpbml0aW9ucyA9IFt7bmFtZTogJ2NoZWNrYm94Q29sdW1uJ30sIHtwb3M6IDEsIG5hbWU6ICdm aXJzdENvbHVtbid9LCB7Ci0gICAgICBwb3M6IDIsCi0gICAgICBuYW1lOiAnc2Vjb25kQ29sdW1u JywKLSAgICB9XTsKLSAgICBncmlkID0gbmV3IFNsaWNrR3JpZCgkKCc8ZGl2PjwvZGl2PicpLCBk YXRhLCBjb2x1bW5EZWZpbml0aW9ucyk7Ci0gICAgZ3JpZC5zZXRTZWxlY3Rpb25Nb2RlbChuZXcg WENlbGxTZWxlY3Rpb25Nb2RlbCgpKTsKKyAgICB2YXIgZGF0YSA9IFt7J2NoZWNrYm94Q29sdW1u JzogJycsICdmaXJzdENvbHVtbic6ICcwLDAtY2VsbC1jb250ZW50JywgJ3NlY29uZENvbHVtbic6 ICcwLDEtY2VsbC1jb250ZW50JywgJ19fdGVtcF9QSyc6ICcxMjMnfSwKKyAgICAgICAgeydjaGVj a2JveENvbHVtbic6ICcnLCAnZmlyc3RDb2x1bW4nOiAnMSwwLWNlbGwtY29udGVudCcsICdzZWNv bmRDb2x1bW4nOiAnMSwxLWNlbGwtY29udGVudCcsICdfX3RlbXBfUEsnOiAnNDU2J30sCisgICAg ICAgIHsnY2hlY2tib3hDb2x1bW4nOiAnJywgJ2ZpcnN0Q29sdW1uJzogJzIsMC1jZWxsLWNvbnRl bnQnLCAnc2Vjb25kQ29sdW1uJzogJzIsMS1jZWxsLWNvbnRlbnQnLCAnX190ZW1wX1BLJzogJzc4 OSd9XSwKKyAgICAgIGNvbHVtbkRlZmluaXRpb25zID0gW3tuYW1lOiAnY2hlY2tib3hDb2x1bW4n fSwKKyAgICAgICAge3BvczogMSwgbmFtZTogJ2ZpcnN0Q29sdW1uJywgZmllbGQ6ICdmaXJzdENv bHVtbid9LAorICAgICAgICB7IHBvczogMiwgbmFtZTogJ3NlY29uZENvbHVtbicsIGZpZWxkOiAn c2Vjb25kQ29sdW1uJ31dLAorICAgICAgZGF0YVZpZXcgPSBuZXcgU2xpY2suRGF0YS5EYXRhVmll dygpOwogCisgICAgZ3JpZCA9IG5ldyBTbGljay5HcmlkKCQoJzxkaXY+PC9kaXY+JyksIGRhdGFW aWV3LCBjb2x1bW5EZWZpbml0aW9ucyk7CisgICAgZ3JpZC5zZXRTZWxlY3Rpb25Nb2RlbChuZXcg WENlbGxTZWxlY3Rpb25Nb2RlbCgpKTsKKyAgICBkYXRhVmlldy5zZXRJdGVtcyhkYXRhLCAnX190 ZW1wX1BLJyk7CiAgICAgc2xpY2tFdmVudCA9IHsKLSAgICAgIGdyaWQ6IGdyaWQsCisgICAgICBn cmlkOiBncmlkCiAgICAgfTsKIAogICAgIHNweU9uKGNsaXBib2FyZCwgJ2NvcHlUZXh0VG9DbGlw Ym9hcmQnKTsK --001a114fc0fac35e220552ebfcd2--