<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>86690</bug_id>
          
          <creation_ts>2012-05-16 16:50:04 -0700</creation_ts>
          <short_desc>Rename test_expectations.txt to TestExpectations</short_desc>
          <delta_ts>2012-06-13 14:22:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>88164</blocked>
    
    <blocked>89038</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>626017</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-16 16:50:04 -0700</bug_when>
    <thetext>We should rename test_expectations.txt to TestExpectations to match WebKit&apos;s naming convention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626194</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-16 20:25:51 -0700</bug_when>
    <thetext>Other naming ideas:

* Expectations
* ExpectedResults
* CurrentResults

I&apos;m tempted by the last one because it avoids the confusing between this file and the -expected.txt files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626197</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-16 20:33:53 -0700</bug_when>
    <thetext>How about ExpectedOutcome to avoid confusion with -expected.* files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626214</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-16 20:49:28 -0700</bug_when>
    <thetext>Unless someone comes up with something massively better than what we have now this seems like semi-pointless bikeshedding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626218</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-16 20:52:11 -0700</bug_when>
    <thetext>@Dirk, you&apos;re no fun!  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626220</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-16 20:53:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Unless someone comes up with something massively better than what we have now this seems like semi-pointless bikeshedding.

I think it&apos;ll be nice to come up with a name other than TestExpectations because that directly conflict with -expected.* files for historical reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626240</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-16 21:44:53 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; @Dirk, you&apos;re no fun!  :)

Sorry :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626255</commentid>
    <comment_count>7</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-05-16 22:08:29 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Other naming ideas:
&gt; 
&gt; * Expectations
&gt; * ExpectedResults
&gt; * CurrentResults
&gt; 
&gt; I&apos;m tempted by the last one because it avoids the confusing between this file and the -expected.txt files.

I like CurrentResults for the same reason as Adam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626262</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-05-16 22:18:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Unless someone comes up with something massively better than what we have now this seems like semi-pointless bikeshedding.

As a counterpoint: WebKit has a long tradition of renaming and moving things for clarity and consistency. We try not to rename things willy-nilly but nearly every file in the project has been renamed at least once and has moved places in the directory structure at least twice. If we find a name that is genuinely better, we should try not to be held back by inertia alone. That is the WebKit Way as I understand it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626266</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-16 22:30:46 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #1)
&gt; &gt; Other naming ideas:
&gt; &gt; 
&gt; &gt; * Expectations
&gt; &gt; * ExpectedResults
&gt; &gt; * CurrentResults
&gt; &gt; 
&gt; &gt; I&apos;m tempted by the last one because it avoids the confusing between this file and the -expected.txt files.
&gt; 
&gt; I like CurrentResults for the same reason as Adam.

Is the confusion you&apos;re seeking to avoid the use of &quot;expect&quot; in both names? Or is it that &quot;test expectations&quot; sounds too much like &quot;text expectation&quot;? Can someone use these names in an example sentence or two to better illustrate the confusion? 

For example, I often ask someone &quot;what&apos;s in the test expectations&quot; or say &quot;I will add that to the expectations file&quot;; it seems like the meaning of both of those is reasonably clear, but I could see how the first one could be misheard.

Maybe something like &quot;suppressions&quot; is better, since we often talk about suppressing an error?

On a different note, I would like to note that there is a clear connection between the name of the file and the name of the classes that process the file in the code today (e.g., TestExpectaions{Parser,Serializer,Model}). If we change the one, we should probably change the others as well. To that end, I am somewhat leery of &quot;result&quot; insofar as that is already badly overloaded in the NRWT code (e.g., TestResult, ResultSummary).

(In reply to comment #8)
&gt; (In reply to comment #3)
&gt; &gt; Unless someone comes up with something massively better than what we have now this seems like semi-pointless bikeshedding.
&gt; 
&gt; As a counterpoint: WebKit has a long tradition of renaming and moving things for clarity and consistency. We try not to rename things willy-nilly but nearly every file in the project has been renamed at least once and has moved places in the directory structure at least twice. If we find a name that is genuinely better, we should try not to be held back by inertia alone. That is the WebKit Way as I understand it.

Sure, I agree with that. I think it&apos;s all in how one defines &quot;genuinely&quot; (or &quot;massively&quot;) better (and willy-nilly, for that matter).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626270</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-16 22:39:55 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Is the confusion you&apos;re seeking to avoid the use of &quot;expect&quot; in both names? Or is it that &quot;test expectations&quot; sounds too much like &quot;text expectation&quot;? Can someone use these names in an example sentence or two to better illustrate the confusion? 

&quot;Test expectations of my-test.html have changed since r12345, and we need to rebaseline them.&quot;  Here, the speaker is referring to expected results as test expectations.

&gt; For example, I often ask someone &quot;what&apos;s in the test expectations&quot; or say &quot;I will add that to the expectations file&quot;; it seems like the meaning of both of those is reasonably clear, but I could see how the first one could be misheard.

The problem is that people have used test expectations to mean expected results before nrwt existed.

&gt; Maybe something like &quot;suppressions&quot; is better, since we often talk about suppressing an error?

TestSuppressions? or FailureSuppressions? I like that!

&gt; On a different note, I would like to note that there is a clear connection between the name of the file and the name of the classes that process the file in the code today (e.g., TestExpectaions{Parser,Serializer,Model}). If we change the one, we should probably change the others as well. To that end, I am somewhat leery of &quot;result&quot; insofar as that is already badly overloaded in the NRWT code (e.g., TestResult, ResultSummary).

Yeah, I dislike CurrentResults for that reason. &quot;current results&quot; sound as if we&apos;re talking about the current result (i.e. -expected.* files in the sense of results we currently expect) of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626550</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-17 07:26:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #3)
&gt; &gt; Unless someone comes up with something massively better than what we have now this seems like semi-pointless bikeshedding.
&gt; 
&gt; As a counterpoint: WebKit has a long tradition of renaming and moving things for clarity and consistency. We try not to rename things willy-nilly but nearly every file in the project has been renamed at least once and has moved places in the directory structure at least twice. If we find a name that is genuinely better, we should try not to be held back by inertia alone. That is the WebKit Way as I understand it.

One thing to mention is that renaming this file will surely break tools -- some even in the WebKit base. So far, I can&apos;t see any reason beyond minor esthetics to rename this. Wouldn&apos;t we be better off spending our cycles making the file smaller? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626666</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-17 10:13:15 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; One thing to mention is that renaming this file will surely break tools -- some even in the WebKit base. So far, I can&apos;t see any reason beyond minor esthetics to rename this. Wouldn&apos;t we be better off spending our cycles making the file smaller? :)

We should update all those tools. My plan is to replace all instances of the word &quot;text_expectations.txt&quot; with a new file name.

Enforcing consistency is a good thing because it reduces the mental power I need to process them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626668</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-17 10:14:44 -0700</bug_when>
    <thetext>(In reply to comment #12)

&gt; Enforcing consistency is a good thing because it reduces the mental power I need to process them.

Please also consider the collective mental power that will go into learning this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626675</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-17 10:19:45 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Enforcing consistency is a good thing because it reduces the mental power I need to process them.
&gt; 
&gt; Please also consider the collective mental power that will go into learning this change.

Historically, project&apos;s assumption has been that this cost is lower than the collective mental power we&apos;ll require future contributors to pay. If that were not the case, we wouldn&apos;t be changing directory structure, moving source files around, etc... for the fear of one-time learning cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639136</commentid>
    <comment_count>15</comment_count>
      <attachid>145253</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 02:57:23 -0700</bug_when>
    <thetext>Created attachment 145253
Make tools aware of TestExpectations in addition to test_expectations.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639137</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-01 02:58:47 -0700</bug_when>
    <thetext>Attachment 145253 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy...&quot; exit_code: 1
Tools/Scripts/webkitpy/style/checkers/test_expectations_unittest.py:77:  too many blank lines (2)  [pep8/E303] [5]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639138</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 02:59:16 -0700</bug_when>
    <thetext>I&apos;ll rename files using &quot;svn mv&quot; once this patch is landed. I can&apos;t upload a patch for the actual rename, however, since it will conflict whenever someone modifies test_expectations.txt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639141</commentid>
    <comment_count>18</comment_count>
      <attachid>145254</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 03:01:53 -0700</bug_when>
    <thetext>Created attachment 145254
Make tools aware of TestExpectations in addition to test_expectations.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639440</commentid>
    <comment_count>19</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-01 09:29:42 -0700</bug_when>
    <thetext>I don&apos;t feel strongly about doing or not doing the rename, but if we do the rename, my vote goes for Suppressions. It looks analogous to Skipped and avoids using either the term &quot;results&quot; or &quot;expectations&quot; which are both heavily overloaded and have confused people time and time again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639526</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 11:04:29 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I don&apos;t feel strongly about doing or not doing the rename, but if we do the rename, my vote goes for Suppressions. It looks analogous to Skipped and avoids using either the term &quot;results&quot; or &quot;expectations&quot; which are both heavily overloaded and have confused people time and time again.

Would FailureSuppressions work for you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639543</commentid>
    <comment_count>21</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-01 11:28:19 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; I don&apos;t feel strongly about doing or not doing the rename, but if we do the rename, my vote goes for Suppressions. It looks analogous to Skipped and avoids using either the term &quot;results&quot; or &quot;expectations&quot; which are both heavily overloaded and have confused people time and time again.
&gt; 
&gt; Would FailureSuppressions work for you?

FailureSuppressions as opposed to what other kind of suppressions? But, meh, I don&apos;t really care if this bikeshed is red or pink. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639589</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 12:07:11 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; I don&apos;t feel strongly about doing or not doing the rename, but if we do the rename, my vote goes for Suppressions. It looks analogous to Skipped and avoids using either the term &quot;results&quot; or &quot;expectations&quot; which are both heavily overloaded and have confused people time and time again.
&gt; &gt; 
&gt; &gt; Would FailureSuppressions work for you?
&gt; 
&gt; FailureSuppressions as opposed to what other kind of suppressions? But, meh, I don&apos;t really care if this bikeshed is red or pink. :)

That&apos;s a good point. I wanted to avoid the auto-completion collision with &quot;Skipped&quot; but I guess it&apos;s not a big deal given we&apos;ve been talking about merging Skipped into TestExpectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639592</commentid>
    <comment_count>23</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-01 12:08:32 -0700</bug_when>
    <thetext>Suppressions works for me as well; if we are going to rename the file I prefer that to TestExpectations or FailureExpectations, but I don&apos;t much care about the name one way or another. 

Ojan, were you reviewing this otherwise, or did you want me to do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639596</commentid>
    <comment_count>24</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-06-01 12:11:22 -0700</bug_when>
    <thetext>After 5 different naming proposals have been suggested, the name must be immediately chosen as &quot;Purple&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639609</commentid>
    <comment_count>25</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-01 12:20:50 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Ojan, were you reviewing this otherwise, or did you want me to do it?

Go for it. Sounds like we have consensus on Suppressions?

(In reply to comment #24)
&gt; After 5 different naming proposals have been suggested, the name must be immediately chosen as &quot;Purple&quot;.

I prefer &quot;iframe&quot;. iframe needs to be a color, preferably one connoting doom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639691</commentid>
    <comment_count>26</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-06-01 13:49:21 -0700</bug_when>
    <thetext>I think it would be better to name the file after the information it contains than what effect it has. So I like the original suggestion of TestExpectations (or the alternate suggestion of CurrentResults) better than Suppressions (or similar). Yes, I realize Skipped does not meet this standard, I think that is one of its disadvantages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639757</commentid>
    <comment_count>27</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-01 15:00:54 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; I think it would be better to name the file after the information it contains than what effect it has. So I like the original suggestion of TestExpectations (or the alternate suggestion of CurrentResults) better than Suppressions (or similar). Yes, I realize Skipped does not meet this standard, I think that is one of its disadvantages.

I could argue that it contains suppressions, not expectations, given that it doesn&apos;t contain a list of &quot;PASS&quot; for all of the other files that we expect to just pass. But that, like most things in this bug, is quibbling :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639763</commentid>
    <comment_count>28</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-01 15:07:31 -0700</bug_when>
    <thetext>Just to be clear, don&apos;t hold anything up on my opinion. I have a vague preference for the color of this bikeshed, but don&apos;t really care.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639794</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 15:38:30 -0700</bug_when>
    <thetext>Given that Maciej appears to have a strong preference and everyone else doesn&apos;t care as much, I&apos;m inclined to use TestExpectations as I had initially planned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639862</commentid>
    <comment_count>30</comment_count>
      <attachid>145254</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-01 16:40:14 -0700</bug_when>
    <thetext>Comment on attachment 145254
Make tools aware of TestExpectations in addition to test_expectations.txt

View in context: https://bugs.webkit.org/attachment.cgi?id=145254&amp;action=review

The patch is generally fine and may be r+&apos;able as-is (with a couple of nits about reducing repetitive mentions of the path) but I&apos;d like to understand the answers to my questions before r+&apos;ing it

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:-677
&gt; -

Ick. I&apos;m glad this wasn&apos;t being used :).

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:688
&gt; +            port_name = &apos;chromium&apos;

Why are you pulling the logic out of webkit.py and chromium.py and pulling it into this routine? If it&apos;s to merge the logic of Port and WebKitPort, I&apos;d prefer that to be addressed in a different patch dedicated to that just to avoid confusion. 

Do you have a preference for avoiding overridden functions or something as well that&apos;s leading to this change?

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:694
&gt; +        return self._filesystem.join(baseline_path, &apos;TestExpectations&apos;)

Why are you doing this rather than just renaming all of the files?

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:251
&gt; +        filesystem.write_text_file(LAYOUT_TEST_DIR + &apos;/platform/test/TestExpectations&apos;, &quot;&quot;&quot;

Can you pull &apos;/platform/test/TestExpectations&apos; into a constant somewhere so that it is shared between this and line 343, below?

&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:97
&gt; +        self.assertEqual(port.path_to_test_expectations_file(), &apos;/mock-checkout/LayoutTests/platform/testwebkitport/TestExpectations&apos;)

We should pull &apos;/mock-checkout/LayoutTests/platform/testwebkitport/TestExpectations&apos; into a constant as well so it can be re-used across multiple tests.

&gt; Tools/Scripts/webkitpy/style/checker.py:527
&gt; +        elif basename == &apos;test_expectations.txt&apos; or basename == &apos;TestExpectations&apos;:

Here&apos;s another place where I don&apos;t know that we need to support both syntaxes simultaneously.

&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:64
&gt; +        self._output_regex = re.compile(&apos;.*(TestExpectations|test_expectations.txt):(?P&lt;line&gt;\d+)\s*(?P&lt;message&gt;.+)&apos;)

ditto.

&gt; Tools/Scripts/webkitpy/tool/steps/commit.py:59
&gt; +            if filename.endswith(&apos;test_expectations.txt&apos;) or filename.endswith(&apos;TestExpectations&apos;):

ditto.

&gt; Tools/TestResultServer/static-dashboards/dashboard_base.js:546
&gt; +var LEGACY_CHROMIUM_EXPECTATIONS_URL = &apos;http://svn.webkit.org/repository/webkit/trunk/LayoutTests/platform/chromium/test_expectations.txt&apos;;

Do we have to support both URLs for a reason other than the reason you want to support both filenames generally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639875</commentid>
    <comment_count>31</comment_count>
      <attachid>145254</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 17:00:43 -0700</bug_when>
    <thetext>Comment on attachment 145254
Make tools aware of TestExpectations in addition to test_expectations.txt

View in context: https://bugs.webkit.org/attachment.cgi?id=145254&amp;action=review

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:688
&gt;&gt; +            port_name = &apos;chromium&apos;
&gt; 
&gt; Why are you pulling the logic out of webkit.py and chromium.py and pulling it into this routine? If it&apos;s to merge the logic of Port and WebKitPort, I&apos;d prefer that to be addressed in a different patch dedicated to that just to avoid confusion. 
&gt; 
&gt; Do you have a preference for avoiding overridden functions or something as well that&apos;s leading to this change?

Okay. The reason I merged these two functions is so that I don&apos;t have to duplicate the if condition below in both WebKit and Chromium port code.
But I&apos;m fine with making duplicated changes in both classes.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:694
&gt;&gt; +        return self._filesystem.join(baseline_path, &apos;TestExpectations&apos;)
&gt; 
&gt; Why are you doing this rather than just renaming all of the files?

Okay, will do that.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:251
&gt;&gt; +        filesystem.write_text_file(LAYOUT_TEST_DIR + &apos;/platform/test/TestExpectations&apos;, &quot;&quot;&quot;
&gt; 
&gt; Can you pull &apos;/platform/test/TestExpectations&apos; into a constant somewhere so that it is shared between this and line 343, below?

Sure. Will do that.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit_unittest.py:97
&gt;&gt; +        self.assertEqual(port.path_to_test_expectations_file(), &apos;/mock-checkout/LayoutTests/platform/testwebkitport/TestExpectations&apos;)
&gt; 
&gt; We should pull &apos;/mock-checkout/LayoutTests/platform/testwebkitport/TestExpectations&apos; into a constant as well so it can be re-used across multiple tests.

Will do.

&gt;&gt; Tools/Scripts/webkitpy/style/checker.py:527
&gt;&gt; +        elif basename == &apos;test_expectations.txt&apos; or basename == &apos;TestExpectations&apos;:
&gt; 
&gt; Here&apos;s another place where I don&apos;t know that we need to support both syntaxes simultaneously.

Will do.

&gt;&gt; Tools/Scripts/webkitpy/style/checkers/test_expectations.py:64
&gt;&gt; +        self._output_regex = re.compile(&apos;.*(TestExpectations|test_expectations.txt):(?P&lt;line&gt;\d+)\s*(?P&lt;message&gt;.+)&apos;)
&gt; 
&gt; ditto.

Sure.

&gt;&gt; Tools/Scripts/webkitpy/tool/steps/commit.py:59
&gt;&gt; +            if filename.endswith(&apos;test_expectations.txt&apos;) or filename.endswith(&apos;TestExpectations&apos;):
&gt; 
&gt; ditto.

Will do.

&gt;&gt; Tools/TestResultServer/static-dashboards/dashboard_base.js:546
&gt;&gt; +var LEGACY_CHROMIUM_EXPECTATIONS_URL = &apos;http://svn.webkit.org/repository/webkit/trunk/LayoutTests/platform/chromium/test_expectations.txt&apos;;
&gt; 
&gt; Do we have to support both URLs for a reason other than the reason you want to support both filenames generally?

Yes, dashboard needs to be updated first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639877</commentid>
    <comment_count>32</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-01 17:03:50 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 145254 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145254&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:688
&gt; &gt;&gt; +            port_name = &apos;chromium&apos;
&gt; &gt; 
&gt; &gt; Why are you pulling the logic out of webkit.py and chromium.py and pulling it into this routine? If it&apos;s to merge the logic of Port and WebKitPort, I&apos;d prefer that to be addressed in a different patch dedicated to that just to avoid confusion. 
&gt; &gt; 
&gt; &gt; Do you have a preference for avoiding overridden functions or something as well that&apos;s leading to this change?
&gt; 
&gt; Okay. The reason I merged these two functions is so that I don&apos;t have to duplicate the if condition below in both WebKit and Chromium port code.
&gt; But I&apos;m fine with making duplicated changes in both classes.
&gt; 

Yeah, let&apos;s just duplicate the changes for now, it&apos;s slightly less confusing, to me at least.

&gt; &gt; Do we have to support both URLs for a reason other than the reason you want to support both filenames generally?
&gt; 
&gt; Yes, dashboard needs to be updated first.

As discussed, we could also just break the dashboard for the time it&apos;ll take to update the app, but it&apos;s up to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639965</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 23:44:14 -0700</bug_when>
    <thetext>Committed r119314: &lt;http://trac.webkit.org/changeset/119314&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145253</attachid>
            <date>2012-06-01 02:57:23 -0700</date>
            <delta_ts>2012-06-01 03:01:49 -0700</delta_ts>
            <desc>Make tools aware of TestExpectations in addition to test_expectations.txt</desc>
            <filename>bug-86690-20120601025722.patch</filename>
            <type>text/plain</type>
            <size>30811</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExOTIwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY2IEBACisyMDEyLTA2LTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgdG8gVGVzdEV4cGVjdGF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2OTAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHdl
YmtpdHB5IGF3YXJlIG9mIGJvdGggdGVzdF9leHBlY3RhdGlvbnMudHh0IGFuZCBUZXN0RXhwZWN0
YXRpb25zIHdoaWxlIHdlIHJlbmFtZSBmaWxlcy4KKyAgICAgICAgV2UgY2FuIHRoZSBjb2RlIHRv
IHJlYWQgdGVzdF9leHBlY3RhdGlvbnMudHh0IG9uY2Ugd2UndmUgc3VjY2Vzc2Z1bGx5IHRyYW5z
aXRpb25lZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVs
cy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvblBhcnNlci5f
Y2hlY2tfcGF0aF9kb2VzX25vdF9leGlzdCk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJz
ZXIuX3Rva2VuaXplKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMpOiBSZW1vdmVkIFRFU1Rf
TElTVCwgd2hpY2ggaXMgbm90IHVzZWQgYW55d2hlcmUuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5wYXRoX3RvX3Rl
c3RfZXhwZWN0YXRpb25zX2ZpbGUpOiBNb3ZlZCBmcm9tIFdlYktpdFBvcnQgYW5kIENocm9taXVt
UG9ydC4gUmV0dXJucyB0aGUgcGF0aCB0bworICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy50eHQg
aWYgb25lIGV4aXN0cyBhbmQgdGhlIHBhdGggdG8gVGVzdEV4cGVjdGF0aW9ucyBvdGhlcndpc2Uu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoUG9ydFRlc3QudGVzdF92aXJ0dWFsX21ldGhvZHMpOiBwYXRoX3Rv
X3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUgYW5kIHRlc3RfZXhwZWN0YXRpb25zIGFyZSBubyBsb25n
ZXIKKyAgICAgICAgdmlydHVhbC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0LnBhdGhfZnJvbV9j
aHJvbWl1bV9iYXNlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0LnRl
c3RfZXhwZWN0YXRpb25zKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHk6CisgICAgICAgIChhZGRfdW5pdF90ZXN0c190b19tb2NrX2ZpbGVzeXN0
ZW0pOiBVc2UgVGVzdEV4cGVjdGF0aW9ucyBpbnN0ZWFkIG9mIHRlc3RfZXhwZWN0YXRpb25zLnR4
dC4KKyAgICAgICAgKFRlc3RQb3J0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKyAgICAgICAgKFdlYktpdFBvcnQuYmFz
ZWxpbmVfc2VhcmNoX3BhdGgpOgorICAgICAgICAoV2ViS2l0UG9ydC50ZXN0X2V4cGVjdGF0aW9u
cyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRf
dW5pdHRlc3QucHk6IEFkZGVkIHNvbWUgdGVzdCBjYXNlcy4gV2Ugc2hvdWxkIG1vdmUgdGhlc2UK
KyAgICAgICAgdGVzdHMgdG8gYmFzZSBhcyBhIGZvbGxvdyB1cC4KKyAgICAgICAgKFdlYktpdFBv
cnRUZXN0LnRlc3RfcGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKToKKyAgICAgICAgKHRl
c3RfdGVzdF9leHBlY3RhdGlvbnMpOgorICAgICAgICAodGVzdF9sZWdhY3lfdGVzdF9leHBlY3Rh
dGlvbnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKyAg
ICAgICAgKENoZWNrZXJEaXNwYXRjaGVyLnNob3VsZF9za2lwX3dpdGhvdXRfd2FybmluZyk6IFJl
cGxhY2UgdGhlIGNoZWNrIGZvciBsZWdhY3kgZHJ0X2V4cGVjdGF0aW9ucy50eHQKKyAgICAgICAg
d2l0aCBvbmUgZm9yIFRlc3RFeHBlY3RhdGlvbnMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKFRlc3RFeHBl
Y3RhdGlvbnNDaGVja2VyKTogQWNjZXB0IGJvdGggdGVzdF9leHBlY3RhdGlvbnMudHh0IGFuZCBU
ZXN0RXhwZWN0YXRpb25zIGluIHdhcm5pbmcgb3V0cHV0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoVGVzdEV4cGVjdGF0aW9uc1Rlc3RDYXNlLl9leHBlY3RfcG9ydF9mb3JfZXhwZWN0YXRp
b25zX3BhdGgpOiBUZXN0IGJvdGggVGVzdEV4cGVjdGF0aW9ucyBhbmQKKyAgICAgICAgdGVzdF9l
eHBlY3RhdGlvbnMudHh0LgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc1Rlc3RDYXNlLnRlc3Rf
ZGV0ZXJtaW5lX3BvcnRfZnJvbV9leHBlY3RhdGlvbnNfcGF0aCk6CisgICAgICAgIChUZXN0RXhw
ZWN0YXRpb25zVGVzdENhc2UuYXNzZXJ0X2xpbmVzX2xpbnQpOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5OgorICAgICAgICAoUHJpbnRFeHBlY3Rh
dGlvbnMuX19pbml0X18pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9yZWJhc2VsaW5lLnB5OgorICAgICAgICAoUmViYXNlbGluZUV4cGVjdGF0aW9ucyk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5weToKKyAgICAgICAgKENv
bW1pdC5fY2hlY2tfdGVzdF9leHBlY3RhdGlvbnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdG9vbC9zdGVwcy9jb21taXRfdW5pdHRlc3QucHk6CisgICAgICAgIChDb21taXRUZXN0Ll90
ZXN0X2NoZWNrX3Rlc3RfZXhwZWN0YXRpb25zKTogRXh0cmFjdGVkIGZyb20gdGVzdF9jaGVja190
ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAgICAgKENvbW1pdFRlc3QudGVzdF9jaGVja190ZXN0X2V4
cGVjdGF0aW9ucyk6IEZvciBUZXN0RXhwZWN0YXRpb25zLgorICAgICAgICAoQ29tbWl0VGVzdC50
ZXN0X2NoZWNrX2xlZ2FjeV90ZXN0X2V4cGVjdGF0aW9ucyk6IEZvciB0ZXN0X2V4cGVjdGF0aW9u
cy50eHQKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hi
b2FyZF9iYXNlLmpzOgorICAgICAgICAocmVxdWVzdEV4cGVjdGF0aW9uc0ZpbGUpOiBMb29rIGZv
ciBUZXN0RXhwZWN0YXRpb25zIGZpcnN0LCBhbmQgZmFsbGJhY2sgdG8gdGVzdF9leHBlY3RhdGlv
bnMudHh0LgorICAgICAgICBFcnJvciBvbmx5IHdoZW4gbmVpdGhlciBleGlzdHMuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJk
LmpzOgorICAgICAgICAocHJvY2Vzc01pc3NpbmdBbmRFeHRyYUV4cGVjdGF0aW9ucyk6CisgICAg
ICAgIChodG1sRm9yVGVzdHNXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlcyk6CisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJk
X3VuaXR0ZXN0cy5qczoKKwogMjAxMi0wNi0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBBZGQgcHVibGljIHBhZ2UgbG9hZGluZyBwZXJmb3JtYW5jZSB0ZXN0
cyB1c2luZyB3ZWItcGFnZS1yZXBsYXkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcg
KzI5Miw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3QpOgogICAgICAgICBp
ZiAobm90IHNlbGYuX3BvcnQudGVzdF9leGlzdHMoZXhwZWN0YXRpb25fbGluZS5uYW1lKQogICAg
ICAgICAgICAgYW5kIG5vdCBzZWxmLl9wb3J0LnRlc3RfZXhpc3RzKGV4cGVjdGF0aW9uX2xpbmUu
bmFtZSArICctZGlzYWJsZWQnKSk6CiAgICAgICAgICAgICAjIExvZyBhIHdhcm5pbmcgaGVyZSBz
aW5jZSB5b3UgaGl0IHRoaXMgY2FzZSBhbnkKLSAgICAgICAgICAgICMgdGltZSB5b3UgdXBkYXRl
IHRlc3RfZXhwZWN0YXRpb25zLnR4dCB3aXRob3V0IHN5bmNpbmcKKyAgICAgICAgICAgICMgdGlt
ZSB5b3UgdXBkYXRlIFRlc3RFeHBlY3RhdGlvbnMgd2l0aG91dCBzeW5jaW5nCiAgICAgICAgICAg
ICAjIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xp
bmUud2FybmluZ3MuYXBwZW5kKCdQYXRoIGRvZXMgbm90IGV4aXN0LicpCiAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQpAQCAtMzIzLDcgKzMyMyw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNl
cihvYmplY3QpOgogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90b2tlbml6ZShjbHMsIGV4
cGVjdGF0aW9uX3N0cmluZywgbGluZV9udW1iZXI9Tm9uZSk6Ci0gICAgICAgICIiIlRva2VuaXpl
cyBhIGxpbmUgZnJvbSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgYW5kIHJldHVybnMgYW4gdW5wYXJz
ZWQgVGVzdEV4cGVjdGF0aW9uTGluZSBpbnN0YW5jZS4KKyAgICAgICAgIiIiVG9rZW5pemVzIGEg
bGluZSBmcm9tIFRlc3RFeHBlY3RhdGlvbnMgYW5kIHJldHVybnMgYW4gdW5wYXJzZWQgVGVzdEV4
cGVjdGF0aW9uTGluZSBpbnN0YW5jZS4KIAogICAgICAgICBUaGUgZm9ybWF0IG9mIGEgdGVzdCBl
eHBlY3RhdGlvbiBsaW5lIGlzOgogCkBAIC02NzMsOCArNjczLDYgQEAgY2xhc3MgVGVzdEV4cGVj
dGF0aW9ucyhvYmplY3QpOgogICAgICAgLUNSQVNIIHRlc3RzIGNhbm5vdCBiZSBXT05URklYCiAg
ICAgIiIiCiAKLSAgICBURVNUX0xJU1QgPSAidGVzdF9leHBlY3RhdGlvbnMudHh0IgotCiAgICAg
RVhQRUNUQVRJT05TID0geydwYXNzJzogUEFTUywKICAgICAgICAgICAgICAgICAgICAgJ2ZhaWwn
OiBGQUlMLAogICAgICAgICAgICAgICAgICAgICAndGV4dCc6IFRFWFQsCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CShyZXZpc2lv
biAxMTkxOTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTY3NSwxMiArNjc1LDIzIEBAIGNsYXNzIFBvcnQob2Jq
ZWN0KToKICAgICAgICAgV2ViS2l0IHNvdXJjZSB0cmVlIGFuZCB0aGUgbGlzdCBvZiBwYXRoIGNv
bXBvbmVudHMgaW4gfCpjb21wc3wuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcucGF0
aF9mcm9tX3dlYmtpdF9iYXNlKCpjb21wcykKIAorICAgIEBtZW1vaXplZAogICAgIGRlZiBwYXRo
X3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CiAgICAgICAgICIiIlVwZGF0ZSB0aGUg
dGVzdCBleHBlY3RhdGlvbnMgdG8gdGhlIHBhc3NlZC1pbiBzdHJpbmcuCiAKICAgICAgICAgVGhp
cyBpcyB1c2VkIGJ5IHRoZSByZWJhc2VsaW5pbmcgdG9vbC4gUmFpc2VzIE5vdEltcGxlbWVudGVk
RXJyb3IKICAgICAgICAgaWYgdGhlIHBvcnQgZG9lcyBub3QgdXNlIGV4cGVjdGF0aW9ucyBmaWxl
cy4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX3Rl
c3RfZXhwZWN0YXRpb25zX2ZpbGUnKQorCisgICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnMgYXJl
IGFsd2F5cyBpbiBtYWMvIG5vdCBtYWMtbGVvcGFyZC8gYnkgY29udmVudGlvbiwgaGVuY2Ugd2Ug
dXNlIHBvcnRfbmFtZSBpbnN0ZWFkIG9mIG5hbWUoKS4KKyAgICAgICAgcG9ydF9uYW1lID0gc2Vs
Zi5wb3J0X25hbWUKKyAgICAgICAgaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2Nocm9taXVtJyk6
CisgICAgICAgICAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0nCisKKyAgICAgICAgYmFzZWxpbmVf
cGF0aCA9IHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHBvcnRfbmFtZSkKKyAgICAgICAgb2xk
X2V4cGVjdGF0aW9uc19maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGJhc2VsaW5lX3BhdGgs
ICd0ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyhvbGRfZXhwZWN0YXRpb25zX2ZpbGUpOgorICAgICAgICAgICAgcmV0dXJuIG9sZF9leHBl
Y3RhdGlvbnNfZmlsZQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGJhc2Vs
aW5lX3BhdGgsICdUZXN0RXhwZWN0YXRpb25zJykKIAogICAgIGRlZiByZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiUmV0dXJucyBhIHRlc3RfbmFtZSBh
IHJlYWx0aXZlIHVuaXgtc3R5bGUgcGF0aCBmb3IgYSBmaWxlbmFtZSB1bmRlciB0aGUgTGF5b3V0
VGVzdHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtNDA2LDkgKzQwNiw3IEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuY2hlY2tfaW1hZ2VfZGlm
ZikKICAgICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuY3JlYXRlX2RyaXZlciwgMCkKICAg
ICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuZGlmZl9pbWFnZSwgTm9uZSwgTm9uZSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19m
aWxlKQogICAgICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC5kZWZhdWx0X3Jlc3VsdHNfZGly
ZWN0b3J5KQotICAgICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC50ZXN0X2V4cGVjdGF0aW9u
cykKICAgICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuX3BhdGhfdG9fYXBhY2hlKQogICAg
ICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC5fcGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUp
CiAgICAgICAgIHNlbGYuYXNzZXJ0VmlydHVhbChwb3J0Ll9wYXRoX3RvX2RyaXZlcikKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQkocmV2aXNpb24gMTE5MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkod29ya2luZyBjb3B5KQpAQCAtMjMyLDkgKzIzMiw2
IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAgICAgICAgICAgIHNlbGYuX2Nocm9taXVt
X2Jhc2VfZGlyX3BhdGggPSBzZWxmLl9jaHJvbWl1bV9iYXNlX2RpcihzZWxmLl9maWxlc3lzdGVt
KQogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2Nocm9taXVtX2Jh
c2VfZGlyX3BhdGgsICpjb21wcykKIAotICAgIGRlZiBwYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25z
X2ZpbGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
TGF5b3V0VGVzdHMnLCAncGxhdGZvcm0nLCAnY2hyb21pdW0nLCAndGVzdF9leHBlY3RhdGlvbnMu
dHh0JykKLQogICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25h
bWU9Tm9uZSk6CiAgICAgICAgIGNsZWFuX2VudiA9IHN1cGVyKENocm9taXVtUG9ydCwgc2VsZiku
c2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQogICAgICAgICAjIFdlYmtpdCBM
aW51eCAodmFsZ3JpbmQgbGF5b3V0KSBib3QgbmVlZHMgdGhlc2UgZW52dmFycy4KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX2FuZHJvaWQucHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQkod29ya2luZyBj
b3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21p
dW0uQ2hyb20KICAgICAgICAgIyBjaHJvbWl1bS1hbmRyb2lkLgogICAgICAgICAjIEZJWE1FOiBU
aGlzIGlzIGEgdGVtcG9yYXJ5IG1lYXN1cmUgdG8gcmVkdWNlIHRoZSBtYW51YWwgd29yayB3aGVu
CiAgICAgICAgICMgdXBkYXRpbmcgV2ViS2l0LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgcmVtb3Zl
ZCB3aGVuIHdlIG1lcmdlCi0gICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnNfYW5kcm9pZC50eHQg
aW50byB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCisgICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnNf
YW5kcm9pZC50eHQgaW50byBUZXN0RXhwZWN0YXRpb25zLgogICAgICAgICBleHBlY3RhdGlvbnMg
PSBjaHJvbWl1bS5DaHJvbWl1bVBvcnQudGVzdF9leHBlY3RhdGlvbnMoc2VsZikKICAgICAgICAg
cmV0dXJuIGV4cGVjdGF0aW9ucy5yZXBsYWNlKCdMSU5VWCAnLCAnTElOVVggQU5EUk9JRCAnKQog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90
ZXN0LnB5CShyZXZpc2lvbiAxMTkxOTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3Rlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw4ICsyNDcsOCBAQCBl
bHNlOgogZGVmIGFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbShmaWxlc3lzdGVtKToK
ICAgICAjIEFkZCB0aGUgdGVzdF9leHBlY3RhdGlvbnMgZmlsZS4KICAgICBmaWxlc3lzdGVtLm1h
eWJlX21ha2VfZGlyZWN0b3J5KExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0vdGVzdCcpCi0g
ICAgaWYgbm90IGZpbGVzeXN0ZW0uZXhpc3RzKExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0v
dGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnKToKLSAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90
ZXh0X2ZpbGUoTEFZT1VUX1RFU1RfRElSICsgJy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRp
b25zLnR4dCcsICIiIgorICAgIGlmIG5vdCBmaWxlc3lzdGVtLmV4aXN0cyhMQVlPVVRfVEVTVF9E
SVIgKyAnL3BsYXRmb3JtL3Rlc3QvVGVzdEV4cGVjdGF0aW9ucycpOgorICAgICAgICBmaWxlc3lz
dGVtLndyaXRlX3RleHRfZmlsZShMQVlPVVRfVEVTVF9ESVIgKyAnL3BsYXRmb3JtL3Rlc3QvVGVz
dEV4cGVjdGF0aW9ucycsICIiIgogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0
bWwgPSBDUkFTSAogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFH
RQogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2F1ZGlvLmh0bWwgPSBBVURJTwpAQCAtMzQw
LDcgKzM0MCw3IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgICAgICBQb3J0Ll9faW5pdF9f
KHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3Rlc3RzID0g
dW5pdF90ZXN0X2xpc3QoKQogICAgICAgICBzZWxmLl9mbGFrZXMgPSBzZXQoKQotICAgICAgICBz
ZWxmLl9leHBlY3RhdGlvbnNfcGF0aCA9IExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0vdGVz
dC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnCisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uc19wYXRo
ID0gTEFZT1VUX1RFU1RfRElSICsgJy9wbGF0Zm9ybS90ZXN0L1Rlc3RFeHBlY3RhdGlvbnMnCiAg
ICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gTm9uZQogCiAgICAgICAgIHNlbGYuX29w
ZXJhdGluZ19zeXN0ZW0gPSAnbWFjJwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJraXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC03NywxMCArNzcsNiBAQCBjbGFzcyBXZWJLaXRQb3J0KFBvcnQpOgogICAgICAg
ICAgICAgc2VhcmNoX3BhdGhzLmFwcGVuZChzZWxmLnBvcnRfbmFtZSkKICAgICAgICAgcmV0dXJu
IG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VhcmNoX3BhdGhzKQogCi0gICAgZGVm
IHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKLSAgICAgICAgIyB0ZXN0X2V4
cGVjdGF0aW9ucyBhcmUgYWx3YXlzIGluIG1hYy8gbm90IG1hYy1sZW9wYXJkLyBieSBjb252ZW50
aW9uLCBoZW5jZSB3ZSB1c2UgcG9ydF9uYW1lIGluc3RlYWQgb2YgbmFtZSgpLgotICAgICAgICBy
ZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNl
bGYucG9ydF9uYW1lKSwgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcpCi0KICAgICBkZWYgX3BvcnRf
ZmxhZ19mb3Jfc2NyaXB0cyhzZWxmKToKICAgICAgICAgIyBUaGlzIGlzIG92ZXJycmlkZW4gYnkg
cG9ydHMgd2hpY2ggbmVlZCBhIGZsYWcgcGFzc2VkIHRvIHNjcmlwdHMgdG8gZGlzdGluZ3Vpc2gg
dGhlIHVzZSBvZiB0aGF0IHBvcnQuCiAgICAgICAgICMgRm9yIGV4YW1wbGUgLS1xdCBvbiBsaW51
eCwgc2luY2UgYSB1c2VyIG1pZ2h0IGhhdmUgYm90aCBHdGsgYW5kIFF0IGxpYnJhcmllcyBpbnN0
YWxsZWQuCkBAIC0zNjEsMTEgKzM1NywxMSBAQCBjbGFzcyBXZWJLaXRQb3J0KFBvcnQpOgogICAg
ICAgICByZXR1cm4gc2VhcmNoX3BhdGhzCiAKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2Vs
Zik6Ci0gICAgICAgICMgVGhpcyBhbGxvd3MgcG9ydHMgdG8gdXNlIGEgY29tYmluYXRpb24gb2Yg
dGVzdF9leHBlY3RhdGlvbnMudHh0IGZpbGVzIGFuZCBTa2lwcGVkIGxpc3RzLgorICAgICAgICAj
IFRoaXMgYWxsb3dzIHBvcnRzIHRvIHVzZSBhIGNvbWJpbmF0aW9uIG9mIFRlc3RFeHBlY3RhdGlv
bnMgZmlsZXMgYW5kIFNraXBwZWQgbGlzdHMuCiAgICAgICAgIGV4cGVjdGF0aW9ucyA9ICcnCiAg
ICAgICAgIGV4cGVjdGF0aW9uc19wYXRoID0gc2VsZi5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25z
X2ZpbGUoKQogICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhleHBlY3RhdGlvbnNf
cGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJVc2luZyB0ZXN0X2V4cGVjdGF0aW9ucy50
eHQ6ICVzIiAlIGV4cGVjdGF0aW9uc19wYXRoKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVXNp
bmcgdGVzdCBleHBlY3RhdGlvbnM6ICVzIiAlIGV4cGVjdGF0aW9uc19wYXRoKQogICAgICAgICAg
ICAgZXhwZWN0YXRpb25zID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShleHBlY3Rh
dGlvbnNfcGF0aCkKICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9ucwogCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdF91bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dF91bml0dGVzdC5weQkocmV2aXNpb24gMTE5MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDggKzk0LDE1IEBAIGNsYXNzIFdlYktpdFBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFQK
ICAgICBkZWYgdGVzdF9wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CiAgICAg
ICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCiAgICAgICAgIHBvcnQuX29wdGlvbnMgPSBNb2Nr
T3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSwgJy9tb2NrLWNoZWNrb3V0
L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L3Rlc3RfZXhwZWN0YXRpb25zLnR4
dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRp
b25zX2ZpbGUoKSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJr
aXRwb3J0L1Rlc3RFeHBlY3RhdGlvbnMnKQorCisgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9y
dCgpCiAgICAgICAgIHBvcnQuX29wdGlvbnMgPSBNb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5u
ZXI9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnBhdGhfdG9fdGVzdF9leHBl
Y3RhdGlvbnNfZmlsZSgpLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVz
dHdlYmtpdHBvcnQvVGVzdEV4cGVjdGF0aW9ucycpCisKKyAgICAgICAgcG9ydCA9IFRlc3RXZWJL
aXRQb3J0KCkKKyAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNr
b3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L3Rlc3RfZXhwZWN0YXRpb25z
LnR4dCddID0gJ3NvbWUgY29udGVudCcKKyAgICAgICAgcG9ydC5fb3B0aW9ucyA9IE1vY2tPcHRp
b25zKHdlYmtpdF90ZXN0X3J1bm5lcj1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChw
b3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpLCAnL21vY2stY2hlY2tvdXQvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vdGVzdHdlYmtpdHBvcnQvdGVzdF9leHBlY3RhdGlvbnMudHh0JykK
IAogICAgIGRlZiB0ZXN0X3NraXBwZWRfZGlyZWN0b3JpZXNfZm9yX3N5bWJvbHMoc2VsZik6CkBA
IC0xNjUsOCArMTcyLDE4IEBAIGNsYXNzIFdlYktpdFBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9y
dFQKICAgICBkZWYgdGVzdF90ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToKICAgICAgICAgIyBDaGVj
ayB0aGF0IHdlIHJlYWQgdGhlIGV4cGVjdGF0aW9ucyBmaWxlCiAgICAgICAgIGhvc3QgPSBNb2Nr
U3lzdGVtSG9zdCgpCisgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L1Rlc3RFeHBl
Y3RhdGlvbnMnLAorICAgICAgICAgICAgJ0JVR19URVNURVhQRUNUQVRJT05TIFNLSVAgOiBmYXN0
L2h0bWwvYXJ0aWNsZS1lbGVtZW50Lmh0bWwgPSBGQUlMXG4nKQorICAgICAgICBwb3J0ID0gVGVz
dFdlYktpdFBvcnQoaG9zdD1ob3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQudGVz
dF9leHBlY3RhdGlvbnMoKSwgJ0JVR19URVNURVhQRUNUQVRJT05TIFNLSVAgOiBmYXN0L2h0bWwv
YXJ0aWNsZS1lbGVtZW50Lmh0bWwgPSBGQUlMXG4nKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X3Rl
c3RfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgd2UgcmVhZCB0aGUg
bGVnYWN5IHRlc3RfZXhwZWN0YXRpb25zLnR4dCBmaWxlCisgICAgICAgIGhvc3QgPSBNb2NrU3lz
dGVtSG9zdCgpCiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L3Rlc3RfZXhwZWN0
YXRpb25zLnR4dCcsCiAgICAgICAgICAgICAnQlVHX1RFU1RFWFBFQ1RBVElPTlMgU0tJUCA6IGZh
c3QvaHRtbC9hcnRpY2xlLWVsZW1lbnQuaHRtbCA9IEZBSUxcbicpCisgICAgICAgIGhvc3QuZmls
ZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRm
b3JtL3Rlc3R3ZWJraXRwb3J0L1Rlc3RFeHBlY3RhdGlvbnMnLAorICAgICAgICAgICAgJ0JVR19C
QURFWFBFQ1RBVElPTiBTS0lQIDogZmFzdC9odG1sL2FydGljbGUtZWxlbWVudC5odG1sID0gRkFJ
TFxuJykKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KGhvc3Q9aG9zdCkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwb3J0LnRlc3RfZXhwZWN0YXRpb25zKCksICdCVUdfVEVTVEVYUEVD
VEFUSU9OUyBTS0lQIDogZmFzdC9odG1sL2FydGljbGUtZWxlbWVudC5odG1sID0gRkFJTFxuJykK
IApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQkocmV2aXNpb24g
MTE5MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTcsMTUgKzUxNywxNCBAQCBjbGFzcyBDaGVja2VyRGlzcGF0Y2hlcihv
YmplY3QpOgogICAgICAgICAjIFNpbmNlICJMYXlvdXRUZXN0cyIgaXMgaW4gX1NLSVBQRURfRklM
RVNfV0lUSE9VVF9XQVJOSU5HLCBtYWtlCiAgICAgICAgICMgYW4gZXhjZXB0aW9uIHRvIHByZXZl
bnQgZmlsZXMgbGlrZSAiTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIiBhbmQKICAgICAgICAgIyAiTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nLTIwMDktMDYtMTYiIGZyb20gYmVpbmcgc2tpcHBlZC4KLSAgICAg
ICAgIyBGaWxlcyBsaWtlICd0ZXN0X2V4cGVjdGF0aW9ucy50eHQnIGFuZCAnZHJ0X2V4cGVjdGF0
aW9ucy50eHQnCi0gICAgICAgICMgYXJlIGFsc28gc2hvdWxkIG5vdCBiZSBza2lwcGVkLgorICAg
ICAgICAjIEZpbGVzIGxpa2UgJ1Rlc3RFeHBlY3RhdGlvbnMnIGFyZSBhbHNvIHNob3VsZCBub3Qg
YmUgc2tpcHBlZC4KICAgICAgICAgIwogICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGEgZ29v
ZCB3YXkgdG8gYXZvaWQgaGF2aW5nIHRvIGFkZCBzcGVjaWFsIGxvZ2ljCiAgICAgICAgICMgICAg
ICAgIGZvciB0aGlzIHNwZWNpYWwgY2FzZS4KICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJh
c2VuYW1lKGZpbGVfcGF0aCkKICAgICAgICAgaWYgYmFzZW5hbWUuc3RhcnRzd2l0aCgnQ2hhbmdl
TG9nJyk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxpZiBiYXNlbmFtZSA9
PSAndGVzdF9leHBlY3RhdGlvbnMudHh0JyBvciBiYXNlbmFtZSA9PSAnZHJ0X2V4cGVjdGF0aW9u
cy50eHQnOgorICAgICAgICBlbGlmIGJhc2VuYW1lID09ICd0ZXN0X2V4cGVjdGF0aW9ucy50eHQn
IG9yIGJhc2VuYW1lID09ICdUZXN0RXhwZWN0YXRpb25zJzoKICAgICAgICAgICAgIHJldHVybiBG
YWxzZQogICAgICAgICBmb3Igc2tpcHBlZF9maWxlIGluIF9TS0lQUEVEX0ZJTEVTX1dJVEhPVVRf
V0FSTklORzoKICAgICAgICAgICAgIGlmIHNlbGYuX3Nob3VsZF9za2lwX2ZpbGVfcGF0aChmaWxl
X3BhdGgsIHNraXBwZWRfZmlsZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnMucHkJKHJldmlzaW9u
IDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9l
eHBlY3RhdGlvbnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNDaGVj
a2VyKG9iamVjdCk6Ci0gICAgIiIiUHJvY2Vzc2VzIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBsaW5l
cyBmb3IgdmFsaWRhdGluZyB0aGUgc3ludGF4LiIiIgorICAgICIiIlByb2Nlc3NlcyBUZXN0RXhw
ZWN0YXRpb25zIGxpbmVzIGZvciB2YWxpZGF0aW5nIHRoZSBzeW50YXguIiIiCiAKICAgICBjYXRl
Z29yaWVzID0gc2V0KFsndGVzdC9leHBlY3RhdGlvbnMnXSkKIApAQCAtNjEsNyArNjEsNyBAQCBj
bGFzcyBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9oYW5k
bGVfc3R5bGVfZXJyb3IgPSBoYW5kbGVfc3R5bGVfZXJyb3IKICAgICAgICAgc2VsZi5faGFuZGxl
X3N0eWxlX2Vycm9yLnR1cm5fb2ZmX2xpbmVfZmlsdGVyaW5nKCkKICAgICAgICAgc2VsZi5fdGFi
X2NoZWNrZXIgPSBUYWJDaGVja2VyKGZpbGVfcGF0aCwgaGFuZGxlX3N0eWxlX2Vycm9yKQotICAg
ICAgICBzZWxmLl9vdXRwdXRfcmVnZXggPSByZS5jb21waWxlKCcuKnRlc3RfZXhwZWN0YXRpb25z
LnR4dDooP1A8bGluZT5cZCspXHMqKD9QPG1lc3NhZ2U+LispJykKKyAgICAgICAgc2VsZi5fb3V0
cHV0X3JlZ2V4ID0gcmUuY29tcGlsZSgnLiooVGVzdEV4cGVjdGF0aW9uc3x0ZXN0X2V4cGVjdGF0
aW9ucy50eHQpOig/UDxsaW5lPlxkKylccyooP1A8bWVzc2FnZT4uKyknKQogCiAgICAgICAgICMg
RklYTUU6IGhvc3Qgc2hvdWxkIGJlIGEgcmVxdWlyZWQgcGFyYW1ldGVyLCBub3QgYW4gb3B0aW9u
YWwgb25lLgogICAgICAgICBob3N0ID0gaG9zdCBvciBIb3N0KCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0
X2V4cGVjdGF0aW9uc191bml0dGVzdC5weQkocmV2aXNpb24gMTE5MTk0KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtNzMsMTggKzczLDM0IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlv
bnNUZXN0Q2FzZSh1bml0dGVzdC4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKE5vbmUsIGV4cGVjdGVkX3BvcnRfaW1wbGVtZW50YXRpb24pCiAKKworICAgICAg
ICBob3N0ID0gTW9ja0hvc3QoKQorICAgICAgICBleHBlY3RhdGlvbnNfcGF0aCA9IGV4cGVjdGF0
aW9uc19wYXRoLnJlcGxhY2UoJ1Rlc3RFeHBlY3RhdGlvbnMnLCAndGVzdF9leHBlY3RhdGlvbnMu
dHh0JykKKyAgICAgICAgaWYgbm90IGV4cGVjdGF0aW9uc19wYXRoLnN0YXJ0c3dpdGgoJy9tb2Nr
LWNoZWNrb3V0Jyk6CisgICAgICAgICAgICBleHBlY3RhdGlvbnNfZnVsbF9wYXRoID0gJy9tb2Nr
LWNoZWNrb3V0LycgKyBleHBlY3RhdGlvbnNfcGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgZXhwZWN0YXRpb25zX2Z1bGxfcGF0aCA9IGV4cGVjdGF0aW9uc19wYXRoCisgICAgICAgIGhv
c3QuZmlsZXN5c3RlbS5maWxlc1tleHBlY3RhdGlvbnNfZnVsbF9wYXRoXSA9ICdzb21lIGNvbnRl
bnQnCisKKyAgICAgICAgY2hlY2tlciA9IFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyKGV4cGVjdGF0
aW9uc19wYXRoLCBFcnJvckNvbGxlY3RvcigpLCBob3N0PWhvc3QpCisgICAgICAgIHBvcnQgPSBj
aGVja2VyLl9kZXRlcm1pbmVfcG9ydF9mcm9tX2V4cGVjdGF0aW9uc19wYXRoKGhvc3QsIGV4cGVj
dGF0aW9uc19wYXRoKQorICAgICAgICBpZiBwb3J0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHBvcnQubmFtZSgpLnN0YXJ0c3dpdGgoZXhwZWN0ZWRfcG9ydF9pbXBsZW1lbnRhdGlvbikp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBleHBl
Y3RlZF9wb3J0X2ltcGxlbWVudGF0aW9uKQorCiAgICAgZGVmIHRlc3RfZGV0ZXJtaW5lX3BvcnRf
ZnJvbV9leHBlY3RhdGlvbnNfcGF0aChzZWxmKToKICAgICAgICAgc2VsZi5fZXhwZWN0X3BvcnRf
Zm9yX2V4cGVjdGF0aW9uc19wYXRoKE5vbmUsICcvJykKLSAgICAgICAgc2VsZi5fZXhwZWN0X3Bv
cnRfZm9yX2V4cGVjdGF0aW9uc19wYXRoKE5vbmUsICdMYXlvdXRUZXN0cy9jaHJvbWl1bS1tYWMv
dGVzdF9leHBlY3RhdGlvbnMudHh0JykKLSAgICAgICAgc2VsZi5fZXhwZWN0X3BvcnRfZm9yX2V4
cGVjdGF0aW9uc19wYXRoKCdjaHJvbWl1bScsICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQotICAgICAgICBzZWxmLl9leHBlY3RfcG9ydF9mb3Jf
ZXhwZWN0YXRpb25zX3BhdGgoTm9uZSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi90ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQotICAgICAgICBzZWxmLl9leHBlY3RfcG9y
dF9mb3JfZXhwZWN0YXRpb25zX3BhdGgoJ3dpbicsICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
dGVzdF9leHBlY3RhdGlvbnMudHh0JykKKyAgICAgICAgc2VsZi5fZXhwZWN0X3BvcnRfZm9yX2V4
cGVjdGF0aW9uc19wYXRoKE5vbmUsICdMYXlvdXRUZXN0cy9jaHJvbWl1bS1tYWMvVGVzdEV4cGVj
dGF0aW9ucycpCisgICAgICAgIHNlbGYuX2V4cGVjdF9wb3J0X2Zvcl9leHBlY3RhdGlvbnNfcGF0
aCgnY2hyb21pdW0nLCAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9ucycpCisgICAgICAgIHNlbGYuX2V4cGVjdF9wb3J0X2Zvcl9leHBlY3RhdGlvbnNfcGF0aChO
b25lLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMnKQorICAgICAgICBzZWxmLl9leHBlY3RfcG9ydF9mb3JfZXhwZWN0YXRpb25zX3BhdGgo
J3dpbicsICdMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucycpCiAKICAg
ICBkZWYgYXNzZXJ0X2xpbmVzX2xpbnQoc2VsZiwgbGluZXMsIHNob3VsZF9wYXNzLCBleHBlY3Rl
ZF9vdXRwdXQ9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2Vycm9yX2NvbGxlY3Rvci5yZXNldF9lcnJv
cnMoKQogCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIGNoZWNrZXIgPSBUZXN0
RXhwZWN0YXRpb25zQ2hlY2tlcigndGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnLAorICAgICAg
ICBjaGVja2VyID0gVGVzdEV4cGVjdGF0aW9uc0NoZWNrZXIoJ3Rlc3QvVGVzdEV4cGVjdGF0aW9u
cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJv
cl9jb2xsZWN0b3IsIGhvc3Q9aG9zdCkKIAogICAgICAgICAjIFdlIHNob3VsZCBoYXZlIGZhaWxl
ZCB0byBmaW5kIGEgdmFsaWQgcG9ydCBvYmplY3QgZm9yIHRoYXQgcGF0aC4KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5CShyZXZpc2lv
biAxMTkxOTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmll
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMzk1LDcgKzM5NSw3IEBAIGNsYXNzIFByaW50RXhwZWN0
YXRpb25zKEFic3RyYWN0RGVjbGFyYXQKICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCctLWNzdics
IGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSdQcmludCBhIENTVi1zdHlsZSByZXBvcnQgdGhhdCBpbmNsdWRlcyB0aGUgcG9y
dCBuYW1lLCBtb2RpZmllcnMsIHRlc3RzLCBhbmQgZXhwZWN0YXRpb25zJyksCiAgICAgICAgICAg
ICBtYWtlX29wdGlvbignLWYnLCAnLS1mdWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVs
dD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ByaW50IGEgZnVsbCB0ZXN0
X2V4cGVjdGF0aW9ucy50eHQtc3R5bGUgbGluZSBmb3IgZXZlcnkgbWF0Y2gnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1ByaW50IGEgZnVsbCBUZXN0RXhwZWN0YXRpb25zLXN0eWxl
IGxpbmUgZm9yIGV2ZXJ5IG1hdGNoJyksCiAgICAgICAgIF0gKyBwb3J0X29wdGlvbnMocGxhdGZv
cm09J3BvcnQvcGxhdGZvcm0gdG8gdXNlLiBVc2UgZ2xvYi1zdHlsZSB3aWxkY2FyZHMgZm9yIG11
bHRpcGxlIHBvcnRzIChpbXBsaWVzIC0tY3N2KScpCiAKICAgICAgICAgQWJzdHJhY3REZWNsYXJh
dGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHkJKHJl
dmlzaW9uIDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9y
ZWJhc2VsaW5lLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgY2xhc3MgQW5h
bHl6ZUJhc2VsaW5lcyhBYnN0cmFjdFJlYmFzZWxpbgogCiBjbGFzcyBSZWJhc2VsaW5lRXhwZWN0
YXRpb25zKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICBuYW1lID0gInJlYmFzZWxp
bmUtZXhwZWN0YXRpb25zIgotICAgIGhlbHBfdGV4dCA9ICJSZWJhc2VsaW5lcyB0aGUgdGVzdHMg
aW5kaWNhdGVkIGluIHRlc3RfZXhwZWN0YXRpb25zLnR4dC4iCisgICAgaGVscF90ZXh0ID0gIlJl
YmFzZWxpbmVzIHRoZSB0ZXN0cyBpbmRpY2F0ZWQgaW4gVGVzdEV4cGVjdGF0aW9ucy4iCiAKICAg
ICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBbCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb21taXQucHkJKHJldmlzaW9uIDExOTE5NCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb21taXQucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgQ29tbWl0KEFic3RyYWN0U3RlcCk6CiAgICAg
ZGVmIF9jaGVja190ZXN0X2V4cGVjdGF0aW9ucyhzZWxmLCBjaGFuZ2VkX2ZpbGVzKToKICAgICAg
ICAgdGVzdF9leHBlY3RhdGlvbnNfZmlsZXMgPSBbXQogICAgICAgICBmb3IgZmlsZW5hbWUgaW4g
Y2hhbmdlZF9maWxlczoKLSAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0X2V4
cGVjdGF0aW9ucy50eHQnKToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0
X2V4cGVjdGF0aW9ucy50eHQnKSBvciBmaWxlbmFtZS5lbmRzd2l0aCgnVGVzdEV4cGVjdGF0aW9u
cycpOgogICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zX2ZpbGVzLmFwcGVuZChmaWxl
bmFtZSkKIAogICAgICAgICBpZiBub3QgdGVzdF9leHBlY3RhdGlvbnNfZmlsZXM6CkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0X3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb21taXRfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9z
dGVwcy9jb21taXRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
ZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLmNvbW1pdCBpbXBvcnQgQwogCiAKIGNsYXNzIENvbW1p
dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2NoZWNrX3Rlc3RfZXhwZWN0
YXRpb25zKHNlbGYpOgorICAgIGRlZiBfdGVzdF9jaGVja190ZXN0X2V4cGVjdGF0aW9ucyhzZWxm
LCBmaWxlbmFtZSk6CiAgICAgICAgIGNhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAg
b3B0aW9ucyA9IE1vY2tPcHRpb25zKCkKICAgICAgICAgb3B0aW9ucy5naXRfY29tbWl0ID0gIiIK
QEAgLTQ2LDE2ICs0NiwyMyBAQCBjbGFzcyBDb21taXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgdG9vbC51c2VyID0gTm9uZSAgIyBXaWxsIGNhdXNlIGFueSBhY2Nlc3Mgb2YgdG9v
bC51c2VyIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgc3RlcCA9IENvbW1pdCh0b29s
LCBvcHRpb25zKQogICAgICAgICBzdGF0ZSA9IHsKLSAgICAgICAgICAgICJjaGFuZ2VkX2ZpbGVz
IjogWyJ0ZXN0X2V4cGVjdGF0aW9ucy50eHRYWFgiXSwKKyAgICAgICAgICAgICJjaGFuZ2VkX2Zp
bGVzIjogW2ZpbGVuYW1lICsgIlhYWCJdLAogICAgICAgICB9CiAKICAgICAgICAgdG9vbC5leGVj
dXRpdmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSwgc2hvdWxkX3Rocm93X3doZW5f
cnVuPUZhbHNlKQogICAgICAgICBjYXB0dXJlLmFzc2VydF9vdXRwdXRzKHNlbGYsIHN0ZXAucnVu
LCBbc3RhdGVdLCBleHBlY3RlZF9zdGRlcnI9IkNvbW1pdHRlZCByNDk4MjQ6IDxodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC80OTgyND5cbiIpCiAKICAgICAgICAgc3RhdGUgPSB7Ci0g
ICAgICAgICAgICAiY2hhbmdlZF9maWxlcyI6IFsicGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0Il0sCisgICAgICAgICAgICAiY2hhbmdlZF9maWxlcyI6IFsicGxhdGZvcm0v
Y2hyb21pdW0vIiArIGZpbGVuYW1lXSwKICAgICAgICAgfQotICAgICAgICBjYXB0dXJlLmFzc2Vy
dF9vdXRwdXRzKHNlbGYsIHN0ZXAucnVuLCBbc3RhdGVdLCBleHBlY3RlZF9zdGRlcnI9Ik1PQ0sg
cnVuX2FuZF90aHJvd19pZl9mYWlsOiBbJ21vY2stY2hlY2std2Via2l0LXN0eWxlJywgJy0tZGlm
Zi1maWxlcycsICdwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQnXSwgY3dk
PS9tb2NrLWNoZWNrb3V0XG5Db21taXR0ZWQgcjQ5ODI0OiA8aHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvNDk4MjQ+XG4iKQorICAgICAgICBjYXB0dXJlLmFzc2VydF9vdXRwdXRzKHNl
bGYsIHN0ZXAucnVuLCBbc3RhdGVdLCBleHBlY3RlZF9zdGRlcnI9Ik1PQ0sgcnVuX2FuZF90aHJv
d19pZl9mYWlsOiBbJ21vY2stY2hlY2std2Via2l0LXN0eWxlJywgJy0tZGlmZi1maWxlcycsICdw
bGF0Zm9ybS9jaHJvbWl1bS8iCisgICAgICAgICAgICArIGZpbGVuYW1lICsgIiddLCBjd2Q9L21v
Y2stY2hlY2tvdXRcbkNvbW1pdHRlZCByNDk4MjQ6IDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC80OTgyND5cbiIpCiAKLSAgICAgICAgdG9vbC5leGVjdXRpdmUgPSBNb2NrRXhlY3V0
aXZlKHNob3VsZF9sb2c9VHJ1ZSwgc2hvdWxkX3Rocm93X3doZW5fcnVuPXNldChbInBsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCJdKSkKKyAgICAgICAgdG9vbC5leGVjdXRp
dmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSwgc2hvdWxkX3Rocm93X3doZW5fcnVu
PXNldChbInBsYXRmb3JtL2Nocm9taXVtLyIgKyBmaWxlbmFtZV0pKQogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhTY3JpcHRFcnJvciwgY2FwdHVyZS5hc3NlcnRfb3V0cHV0cywgc2VsZiwgc3Rl
cC5ydW4sIFtzdGF0ZV0pCisKKyAgICBkZWYgdGVzdF9jaGVja190ZXN0X2V4cGVjdGF0aW9ucyhz
ZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jaGVja190ZXN0X2V4cGVjdGF0aW9ucygnVGVzdEV4
cGVjdGF0aW9ucycpCisKKyAgICBkZWYgdGVzdF9jaGVja19sZWdhY3lfdGVzdF9leHBlY3RhdGlv
bnMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2hlY2tfdGVzdF9leHBlY3RhdGlvbnMoJ3Rl
c3RfZXhwZWN0YXRpb25zLnR4dCcpCkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMJKHJldmlzaW9u
IDExOTE5NCkKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFz
aGJvYXJkX2Jhc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTU0Miw3ICs1NDIsOCBAQCBmdW5jdGlv
biBwYXRoVG9CdWlsZGVyUmVzdWx0c0ZpbGUoYnVpbGRlCiB9CiAKIC8vIEZJWE1FOiBNYWtlIHRo
ZSBkYXNoYm9hcmQgdW5kZXJzdGFuZCBkaWZmZXJlbnQgcG9ydHMnIGV4cGVjdGF0aW9ucyBmaWxl
cy4KLXZhciBDSFJPTUlVTV9FWFBFQ1RBVElPTlNfVVJMID0gJ2h0dHA6Ly9zdm4ud2Via2l0Lm9y
Zy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQnOwordmFyIENIUk9NSVVNX0VYUEVDVEFUSU9OU19VUkwgPSAn
aHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMnOwordmFyIExFR0FDWV9DSFJPTUlV
TV9FWFBFQ1RBVElPTlNfVVJMID0gJ2h0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dl
YmtpdC90cnVuay9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQnOwogCiBmdW5jdGlvbiByZXF1ZXN0RXhwZWN0YXRpb25zRmlsZSgpCiB7CkBAIC01NTIs
NyArNTUzLDEzIEBAIGZ1bmN0aW9uIHJlcXVlc3RFeHBlY3RhdGlvbnNGaWxlKCkKICAgICAgICAg
aGFuZGxlUmVzb3VyY2VMb2FkKCk7CiAgICAgfSwKICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAg
Y29uc29sZS5lcnJvcignQ291bGQgbm90IGxvYWQgZXhwZWN0YXRpb25zIGZpbGUgZnJvbSAnICsg
Q0hST01JVU1fRVhQRUNUQVRJT05TX1VSTCk7CisgICAgICAgIHJlcXVlc3QoTEVHQUNZX0NIUk9N
SVVNX0VYUEVDVEFUSU9OU19VUkwsIGZ1bmN0aW9uKHhocikgeworICAgICAgICAgICAgZ193YWl0
aW5nT25FeHBlY3RhdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgICAgIGdfZXhwZWN0YXRpb25zID0g
eGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgIGhhbmRsZVJlc291cmNlTG9hZCgpOworICAg
ICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5v
dCBsb2FkIGV4cGVjdGF0aW9ucyBmaWxlIGZyb20gJyArIENIUk9NSVVNX0VYUEVDVEFUSU9OU19V
UkwgKyAnIG9yICcgKyBMRUdBQ1lfQ0hST01JVU1fRVhQRUNUQVRJT05TX1VSTCk7CisgICAgICAg
IH0pOwogICAgIH0pOwogfQogCkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCShy
ZXZpc2lvbiAxMTkxOTQpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgdmFyIFRFU1RfUkVTVUxUU19CQVNFX1BBVEggPSAnaHR0cDovL2J1aQogdmFyIEdQVV9SRVNV
TFRTX0JBU0VfUEFUSCA9ICdodHRwOi8vY2hyb21pdW0tYnJvd3Nlci1ncHUtdGVzdHMuY29tbW9u
ZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vcnVucy8nCiAKIC8vIEZJWE1FOiBUaGVzZSBwbGF0
Zm9ybSBuYW1lcyBzaG91bGQgcHJvYmFibHkgYmUgY2hhbmdlZCB0byBtYXRjaCB0aGUgZGlyZWN0
b3JpZXMgaW4gTGF5b3V0VGVzdHMvcGxhdGZvcm0KLS8vIGluc3RlYWQgb2YgbWF0Y2hpbmcgdGhl
IHZhbHVlcyB3ZSB1c2UgaW4gdGhlIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBmaWxlLgorLy8gaW5z
dGVhZCBvZiBtYXRjaGluZyB0aGUgdmFsdWVzIHdlIHVzZSBpbiB0aGUgVGVzdEV4cGVjdGF0aW9u
cyBmaWxlLgogdmFyIFBMQVRGT1JNUyA9IFsnTElPTicsICdTTk9XTEVPUEFSRCcsICdMRU9QQVJE
JywgJ1hQJywgJ1ZJU1RBJywgJ1dJTjcnLCAnTFVDSUQnLCAnQVBQTEVfTElPTicsICdBUFBMRV9M
RU9QQVJEJywgJ0FQUExFX1NOT1dMRU9QQVJEJywgJ0FQUExFX1hQJywgJ0FQUExFX1dJTjcnLCAn
R1RLX0xJTlVYJywgJ1FUX0xJTlVYJ107CiB2YXIgUExBVEZPUk1fVU5JT05TID0gewogICAgICdN
QUMnOiBbJ0xFT1BBUkQnLCAnU05PV0xFT1BBUkQnLCAnTElPTiddLApAQCAtMjExLDcgKzIxMSw3
IEBAIHZhciBnX3BlckJ1aWxkZXJGYWlsdXJlcyA9IHt9OwogLy8gYnV0IGhhdmUgZm9yIHRoYXQg
YnVpbGRlci4KIHZhciBnX3BlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlcyA9
IHt9OwogLy8gTWFwIG9mIGJ1aWxkZXIgdG8gYXJyYXlzIG9mIHBhdGhzIHRoYXQgYXJlIHNraXBw
ZWQuIFRoaXMgc2hvd3MgdGhlIHJhdwotLy8gcGF0aCB1c2VkIGluIHRlc3RfZXhwZWN0YXRpb25z
LnR4dCByYXRoZXIgdGhhbiB0aGUgdGVzdCBwYXRoIHNpbmNlIHdlCisvLyBwYXRoIHVzZWQgaW4g
VGVzdEV4cGVjdGF0aW9ucyByYXRoZXIgdGhhbiB0aGUgdGVzdCBwYXRoIHNpbmNlIHdlCiAvLyBk
b24ndCBhY3R1YWxseSBoYXZlIGFueSBkYXRhIGhlcmUgZm9yIHNraXBwZWQgdGVzdHMuCiB2YXIg
Z19wZXJCdWlsZGVyU2tpcHBlZFBhdGhzID0ge307CiAvLyBNYXBzIHRlc3QgcGF0aCB0byBhbiBh
cnJheSBvZiB7YnVpbGRlciwgdGVzdFJlc3VsdHN9IG9iamVjdHMuCkBAIC04MjAsNyArODIwLDcg
QEAgZnVuY3Rpb24gcHJvY2Vzc01pc3NpbmdBbmRFeHRyYUV4cGVjdGF0aQogICAgICAgICBleHRy
YUV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uc0FycmF5LmZpbHRlcigKICAgICAgICAgICAgIGZ1
bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBhbGwgdGhl
IEZBSUwgbGluZXMgYXJlIHJlbW92ZWQgZnJvbQotICAgICAgICAgICAgICAgIC8vIHRlc3RfZXhw
ZWN0YXRpb25zLnR4dCwgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNz
CisgICAgICAgICAgICAgICAgLy8gVGVzdEV4cGVjdGF0aW9ucywgZGVsZXRlIGFsbCB0aGUgbGVn
YWN5RXhwZWN0YXRpb25zU2VtYW50aWNzCiAgICAgICAgICAgICAgICAgLy8gY29kZS4KICAgICAg
ICAgICAgICAgICBpZiAoZ19jdXJyZW50U3RhdGUubGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNz
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICdGQUlMJykgewpAQCAtODQx
LDcgKzg0MSw3IEBAIGZ1bmN0aW9uIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGkKICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0YXRpb25zQXJyYXkubGVuZ3RoOyBp
KyspIHsKICAgICAgICAgICAgICAgICB2YXIgZXhwZWN0YXRpb24gPSBleHBlY3RhdGlvbnNBcnJh
eVtpXTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBhbGwgdGhlIEZBSUwgbGluZXMg
YXJlIHJlbW92ZWQgZnJvbQotICAgICAgICAgICAgICAgIC8vIHRlc3RfZXhwZWN0YXRpb25zLnR4
dCwgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzCisgICAgICAgICAg
ICAgICAgLy8gVGVzdEV4cGVjdGF0aW9ucywgZGVsZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRp
b25zU2VtYW50aWNzCiAgICAgICAgICAgICAgICAgLy8gY29kZS4KICAgICAgICAgICAgICAgICBp
ZiAoZ19jdXJyZW50U3RhdGUubGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChleHBlY3RhdGlvbiA9PSAnRkFJTCcpIHsKQEAgLTEwNzYsNyArMTA3
Niw3IEBAIGZ1bmN0aW9uIGh0bWxGb3JUZXN0c1dpdGhFeHBlY3RhdGlvbnNCdXQKICAgICB2YXIg
dGVzdHMgPSBnX3BlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlc1tidWlsZGVy
XTsKICAgICB2YXIgc2tpcHBlZFBhdGhzID0gZ19wZXJCdWlsZGVyU2tpcHBlZFBhdGhzW2J1aWxk
ZXJdOwogICAgIHZhciBzaG93VW5leHBlY3RlZFBhc3Nlc0xpbmsgPSAgbGlua0hUTUxUb1RvZ2ds
ZVN0YXRlKCdzaG93VW5leHBlY3RlZFBhc3NlcycsICd0ZXN0cyB0aGF0IGhhdmUgbm90IGZhaWxl
ZCBpbiBsYXN0ICcgKyBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uYnVpbGROdW1iZXJzLmxl
bmd0aCArICcgcnVucycpOwotICAgIHZhciBzaG93U2tpcHBlZExpbmsgPSBsaW5rSFRNTFRvVG9n
Z2xlU3RhdGUoJ3Nob3dTa2lwcGVkJywgJ3NraXBwZWQgdGVzdHMgaW4gdGVzdF9leHBlY3RhdGlv
bnMudHh0Jyk7CisgICAgdmFyIHNob3dTa2lwcGVkTGluayA9IGxpbmtIVE1MVG9Ub2dnbGVTdGF0
ZSgnc2hvd1NraXBwZWQnLCAnc2tpcHBlZCB0ZXN0cyBpbiBUZXN0RXhwZWN0YXRpb25zJyk7CiAg
ICAgCiAKICAgICB2YXIgaHRtbCA9ICcnOwpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVz
c19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzCShyZXZpc2lvbiAxMTkxOTQpCisrKyBUb29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRl
c3RzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgdGVzdCgncGxhdGZvcm1B
bmRCdWlsZFR5cGUnLCA4OCwgZnVuY3RpbwogICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVz
dCgnQ2hyb21pdW0gTGludXggUmVsZWFzZSAoVGVzdHMpJywgJ0xVQ0lEJywgJ1JFTEVBU0UnKTsK
ICAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0Nocm9taXVtIE1hYyBSZWxlYXNlIChU
ZXN0cyknLCAnU05PV0xFT1BBUkQnLCAnUkVMRUFTRScpOwogICAgIAotICAgIC8vIEZJWE1FOiBU
aGVzZSBwbGF0Zm9ybXMgc2hvdWxkIG1hdGNoIHdoYXRldmVyIHdlIHVzZSBpbiB0aGUgdGVzdF9l
eHBlY3RhdGlvbnMudHh0IGZvcm1hdC4KKyAgICAvLyBGSVhNRTogVGhlc2UgcGxhdGZvcm1zIHNo
b3VsZCBtYXRjaCB3aGF0ZXZlciB3ZSB1c2UgaW4gdGhlIFRlc3RFeHBlY3RhdGlvbnMgZm9ybWF0
LgogICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnTGlvbiBSZWxlYXNlIChUZXN0cykn
LCAnQVBQTEVfTElPTicsICdSRUxFQVNFJyk7CiAgICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVU
ZXN0KCdMaW9uIERlYnVnIChUZXN0cyknLCAnQVBQTEVfTElPTicsICdERUJVRycpOwogICAgIHJ1
blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnTGVvcGFyZCBJbnRlbCBSZWxlYXNlIChUZXN0cykn
LCAnQVBQTEVfTEVPUEFSRCcsICdSRUxFQVNFJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145254</attachid>
            <date>2012-06-01 03:01:53 -0700</date>
            <delta_ts>2012-06-01 17:03:59 -0700</delta_ts>
            <desc>Make tools aware of TestExpectations in addition to test_expectations.txt</desc>
            <filename>bug-86690-20120601030153.patch</filename>
            <type>text/plain</type>
            <size>30809</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExOTIwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY2IEBACisyMDEyLTA2LTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgdG8gVGVzdEV4cGVjdGF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2OTAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHdl
YmtpdHB5IGF3YXJlIG9mIGJvdGggdGVzdF9leHBlY3RhdGlvbnMudHh0IGFuZCBUZXN0RXhwZWN0
YXRpb25zIHdoaWxlIHdlIHJlbmFtZSBmaWxlcy4KKyAgICAgICAgV2UgY2FuIHRoZSBjb2RlIHRv
IHJlYWQgdGVzdF9leHBlY3RhdGlvbnMudHh0IG9uY2Ugd2UndmUgc3VjY2Vzc2Z1bGx5IHRyYW5z
aXRpb25lZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVs
cy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvblBhcnNlci5f
Y2hlY2tfcGF0aF9kb2VzX25vdF9leGlzdCk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJz
ZXIuX3Rva2VuaXplKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMpOiBSZW1vdmVkIFRFU1Rf
TElTVCwgd2hpY2ggaXMgbm90IHVzZWQgYW55d2hlcmUuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5wYXRoX3RvX3Rl
c3RfZXhwZWN0YXRpb25zX2ZpbGUpOiBNb3ZlZCBmcm9tIFdlYktpdFBvcnQgYW5kIENocm9taXVt
UG9ydC4gUmV0dXJucyB0aGUgcGF0aCB0bworICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy50eHQg
aWYgb25lIGV4aXN0cyBhbmQgdGhlIHBhdGggdG8gVGVzdEV4cGVjdGF0aW9ucyBvdGhlcndpc2Uu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoUG9ydFRlc3QudGVzdF92aXJ0dWFsX21ldGhvZHMpOiBwYXRoX3Rv
X3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUgYW5kIHRlc3RfZXhwZWN0YXRpb25zIGFyZSBubyBsb25n
ZXIKKyAgICAgICAgdmlydHVhbC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0LnBhdGhfZnJvbV9j
aHJvbWl1bV9iYXNlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0LnRl
c3RfZXhwZWN0YXRpb25zKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHk6CisgICAgICAgIChhZGRfdW5pdF90ZXN0c190b19tb2NrX2ZpbGVzeXN0
ZW0pOiBVc2UgVGVzdEV4cGVjdGF0aW9ucyBpbnN0ZWFkIG9mIHRlc3RfZXhwZWN0YXRpb25zLnR4
dC4KKyAgICAgICAgKFRlc3RQb3J0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKyAgICAgICAgKFdlYktpdFBvcnQuYmFz
ZWxpbmVfc2VhcmNoX3BhdGgpOgorICAgICAgICAoV2ViS2l0UG9ydC50ZXN0X2V4cGVjdGF0aW9u
cyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRf
dW5pdHRlc3QucHk6IEFkZGVkIHNvbWUgdGVzdCBjYXNlcy4gV2Ugc2hvdWxkIG1vdmUgdGhlc2UK
KyAgICAgICAgdGVzdHMgdG8gYmFzZSBhcyBhIGZvbGxvdyB1cC4KKyAgICAgICAgKFdlYktpdFBv
cnRUZXN0LnRlc3RfcGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKToKKyAgICAgICAgKHRl
c3RfdGVzdF9leHBlY3RhdGlvbnMpOgorICAgICAgICAodGVzdF9sZWdhY3lfdGVzdF9leHBlY3Rh
dGlvbnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKyAg
ICAgICAgKENoZWNrZXJEaXNwYXRjaGVyLnNob3VsZF9za2lwX3dpdGhvdXRfd2FybmluZyk6IFJl
cGxhY2UgdGhlIGNoZWNrIGZvciBsZWdhY3kgZHJ0X2V4cGVjdGF0aW9ucy50eHQKKyAgICAgICAg
d2l0aCBvbmUgZm9yIFRlc3RFeHBlY3RhdGlvbnMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKFRlc3RFeHBl
Y3RhdGlvbnNDaGVja2VyKTogQWNjZXB0IGJvdGggdGVzdF9leHBlY3RhdGlvbnMudHh0IGFuZCBU
ZXN0RXhwZWN0YXRpb25zIGluIHdhcm5pbmcgb3V0cHV0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoVGVzdEV4cGVjdGF0aW9uc1Rlc3RDYXNlLl9leHBlY3RfcG9ydF9mb3JfZXhwZWN0YXRp
b25zX3BhdGgpOiBUZXN0IGJvdGggVGVzdEV4cGVjdGF0aW9ucyBhbmQKKyAgICAgICAgdGVzdF9l
eHBlY3RhdGlvbnMudHh0LgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc1Rlc3RDYXNlLnRlc3Rf
ZGV0ZXJtaW5lX3BvcnRfZnJvbV9leHBlY3RhdGlvbnNfcGF0aCk6CisgICAgICAgIChUZXN0RXhw
ZWN0YXRpb25zVGVzdENhc2UuYXNzZXJ0X2xpbmVzX2xpbnQpOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5OgorICAgICAgICAoUHJpbnRFeHBlY3Rh
dGlvbnMuX19pbml0X18pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9yZWJhc2VsaW5lLnB5OgorICAgICAgICAoUmViYXNlbGluZUV4cGVjdGF0aW9ucyk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5weToKKyAgICAgICAgKENv
bW1pdC5fY2hlY2tfdGVzdF9leHBlY3RhdGlvbnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdG9vbC9zdGVwcy9jb21taXRfdW5pdHRlc3QucHk6CisgICAgICAgIChDb21taXRUZXN0Ll90
ZXN0X2NoZWNrX3Rlc3RfZXhwZWN0YXRpb25zKTogRXh0cmFjdGVkIGZyb20gdGVzdF9jaGVja190
ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAgICAgKENvbW1pdFRlc3QudGVzdF9jaGVja190ZXN0X2V4
cGVjdGF0aW9ucyk6IEZvciBUZXN0RXhwZWN0YXRpb25zLgorICAgICAgICAoQ29tbWl0VGVzdC50
ZXN0X2NoZWNrX2xlZ2FjeV90ZXN0X2V4cGVjdGF0aW9ucyk6IEZvciB0ZXN0X2V4cGVjdGF0aW9u
cy50eHQKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hi
b2FyZF9iYXNlLmpzOgorICAgICAgICAocmVxdWVzdEV4cGVjdGF0aW9uc0ZpbGUpOiBMb29rIGZv
ciBUZXN0RXhwZWN0YXRpb25zIGZpcnN0LCBhbmQgZmFsbGJhY2sgdG8gdGVzdF9leHBlY3RhdGlv
bnMudHh0LgorICAgICAgICBFcnJvciBvbmx5IHdoZW4gbmVpdGhlciBleGlzdHMuCisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJk
LmpzOgorICAgICAgICAocHJvY2Vzc01pc3NpbmdBbmRFeHRyYUV4cGVjdGF0aW9ucyk6CisgICAg
ICAgIChodG1sRm9yVGVzdHNXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlcyk6CisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJk
X3VuaXR0ZXN0cy5qczoKKwogMjAxMi0wNi0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBBZGQgcHVibGljIHBhZ2UgbG9hZGluZyBwZXJmb3JtYW5jZSB0ZXN0
cyB1c2luZyB3ZWItcGFnZS1yZXBsYXkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcg
KzI5Miw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3QpOgogICAgICAgICBp
ZiAobm90IHNlbGYuX3BvcnQudGVzdF9leGlzdHMoZXhwZWN0YXRpb25fbGluZS5uYW1lKQogICAg
ICAgICAgICAgYW5kIG5vdCBzZWxmLl9wb3J0LnRlc3RfZXhpc3RzKGV4cGVjdGF0aW9uX2xpbmUu
bmFtZSArICctZGlzYWJsZWQnKSk6CiAgICAgICAgICAgICAjIExvZyBhIHdhcm5pbmcgaGVyZSBz
aW5jZSB5b3UgaGl0IHRoaXMgY2FzZSBhbnkKLSAgICAgICAgICAgICMgdGltZSB5b3UgdXBkYXRl
IHRlc3RfZXhwZWN0YXRpb25zLnR4dCB3aXRob3V0IHN5bmNpbmcKKyAgICAgICAgICAgICMgdGlt
ZSB5b3UgdXBkYXRlIFRlc3RFeHBlY3RhdGlvbnMgd2l0aG91dCBzeW5jaW5nCiAgICAgICAgICAg
ICAjIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkKICAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xp
bmUud2FybmluZ3MuYXBwZW5kKCdQYXRoIGRvZXMgbm90IGV4aXN0LicpCiAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQpAQCAtMzIzLDcgKzMyMyw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNl
cihvYmplY3QpOgogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90b2tlbml6ZShjbHMsIGV4
cGVjdGF0aW9uX3N0cmluZywgbGluZV9udW1iZXI9Tm9uZSk6Ci0gICAgICAgICIiIlRva2VuaXpl
cyBhIGxpbmUgZnJvbSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgYW5kIHJldHVybnMgYW4gdW5wYXJz
ZWQgVGVzdEV4cGVjdGF0aW9uTGluZSBpbnN0YW5jZS4KKyAgICAgICAgIiIiVG9rZW5pemVzIGEg
bGluZSBmcm9tIFRlc3RFeHBlY3RhdGlvbnMgYW5kIHJldHVybnMgYW4gdW5wYXJzZWQgVGVzdEV4
cGVjdGF0aW9uTGluZSBpbnN0YW5jZS4KIAogICAgICAgICBUaGUgZm9ybWF0IG9mIGEgdGVzdCBl
eHBlY3RhdGlvbiBsaW5lIGlzOgogCkBAIC02NzMsOCArNjczLDYgQEAgY2xhc3MgVGVzdEV4cGVj
dGF0aW9ucyhvYmplY3QpOgogICAgICAgLUNSQVNIIHRlc3RzIGNhbm5vdCBiZSBXT05URklYCiAg
ICAgIiIiCiAKLSAgICBURVNUX0xJU1QgPSAidGVzdF9leHBlY3RhdGlvbnMudHh0IgotCiAgICAg
RVhQRUNUQVRJT05TID0geydwYXNzJzogUEFTUywKICAgICAgICAgICAgICAgICAgICAgJ2ZhaWwn
OiBGQUlMLAogICAgICAgICAgICAgICAgICAgICAndGV4dCc6IFRFWFQsCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CShyZXZpc2lv
biAxMTkxOTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTY3NSwxMiArNjc1LDIzIEBAIGNsYXNzIFBvcnQob2Jq
ZWN0KToKICAgICAgICAgV2ViS2l0IHNvdXJjZSB0cmVlIGFuZCB0aGUgbGlzdCBvZiBwYXRoIGNv
bXBvbmVudHMgaW4gfCpjb21wc3wuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcucGF0
aF9mcm9tX3dlYmtpdF9iYXNlKCpjb21wcykKIAorICAgIEBtZW1vaXplZAogICAgIGRlZiBwYXRo
X3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CiAgICAgICAgICIiIlVwZGF0ZSB0aGUg
dGVzdCBleHBlY3RhdGlvbnMgdG8gdGhlIHBhc3NlZC1pbiBzdHJpbmcuCiAKICAgICAgICAgVGhp
cyBpcyB1c2VkIGJ5IHRoZSByZWJhc2VsaW5pbmcgdG9vbC4gUmFpc2VzIE5vdEltcGxlbWVudGVk
RXJyb3IKICAgICAgICAgaWYgdGhlIHBvcnQgZG9lcyBub3QgdXNlIGV4cGVjdGF0aW9ucyBmaWxl
cy4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX3Rl
c3RfZXhwZWN0YXRpb25zX2ZpbGUnKQorCisgICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnMgYXJl
IGFsd2F5cyBpbiBtYWMvIG5vdCBtYWMtbGVvcGFyZC8gYnkgY29udmVudGlvbiwgaGVuY2Ugd2Ug
dXNlIHBvcnRfbmFtZSBpbnN0ZWFkIG9mIG5hbWUoKS4KKyAgICAgICAgcG9ydF9uYW1lID0gc2Vs
Zi5wb3J0X25hbWUKKyAgICAgICAgaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgoJ2Nocm9taXVtJyk6
CisgICAgICAgICAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0nCisKKyAgICAgICAgYmFzZWxpbmVf
cGF0aCA9IHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHBvcnRfbmFtZSkKKyAgICAgICAgb2xk
X2V4cGVjdGF0aW9uc19maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGJhc2VsaW5lX3BhdGgs
ICd0ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyhvbGRfZXhwZWN0YXRpb25zX2ZpbGUpOgorICAgICAgICAgICAgcmV0dXJuIG9sZF9leHBl
Y3RhdGlvbnNfZmlsZQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGJhc2Vs
aW5lX3BhdGgsICdUZXN0RXhwZWN0YXRpb25zJykKIAogICAgIGRlZiByZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiUmV0dXJucyBhIHRlc3RfbmFtZSBh
IHJlYWx0aXZlIHVuaXgtc3R5bGUgcGF0aCBmb3IgYSBmaWxlbmFtZSB1bmRlciB0aGUgTGF5b3V0
VGVzdHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtNDA2LDkgKzQwNiw3IEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuY2hlY2tfaW1hZ2VfZGlm
ZikKICAgICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuY3JlYXRlX2RyaXZlciwgMCkKICAg
ICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuZGlmZl9pbWFnZSwgTm9uZSwgTm9uZSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19m
aWxlKQogICAgICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC5kZWZhdWx0X3Jlc3VsdHNfZGly
ZWN0b3J5KQotICAgICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC50ZXN0X2V4cGVjdGF0aW9u
cykKICAgICAgICAgc2VsZi5hc3NlcnRWaXJ0dWFsKHBvcnQuX3BhdGhfdG9fYXBhY2hlKQogICAg
ICAgICBzZWxmLmFzc2VydFZpcnR1YWwocG9ydC5fcGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUp
CiAgICAgICAgIHNlbGYuYXNzZXJ0VmlydHVhbChwb3J0Ll9wYXRoX3RvX2RyaXZlcikKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQkocmV2aXNpb24gMTE5MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkod29ya2luZyBjb3B5KQpAQCAtMjMyLDkgKzIzMiw2
IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAgICAgICAgICAgIHNlbGYuX2Nocm9taXVt
X2Jhc2VfZGlyX3BhdGggPSBzZWxmLl9jaHJvbWl1bV9iYXNlX2RpcihzZWxmLl9maWxlc3lzdGVt
KQogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2Nocm9taXVtX2Jh
c2VfZGlyX3BhdGgsICpjb21wcykKIAotICAgIGRlZiBwYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25z
X2ZpbGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
TGF5b3V0VGVzdHMnLCAncGxhdGZvcm0nLCAnY2hyb21pdW0nLCAndGVzdF9leHBlY3RhdGlvbnMu
dHh0JykKLQogICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25h
bWU9Tm9uZSk6CiAgICAgICAgIGNsZWFuX2VudiA9IHN1cGVyKENocm9taXVtUG9ydCwgc2VsZiku
c2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQogICAgICAgICAjIFdlYmtpdCBM
aW51eCAodmFsZ3JpbmQgbGF5b3V0KSBib3QgbmVlZHMgdGhlc2UgZW52dmFycy4KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX2FuZHJvaWQucHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQkod29ya2luZyBj
b3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21p
dW0uQ2hyb20KICAgICAgICAgIyBjaHJvbWl1bS1hbmRyb2lkLgogICAgICAgICAjIEZJWE1FOiBU
aGlzIGlzIGEgdGVtcG9yYXJ5IG1lYXN1cmUgdG8gcmVkdWNlIHRoZSBtYW51YWwgd29yayB3aGVu
CiAgICAgICAgICMgdXBkYXRpbmcgV2ViS2l0LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgcmVtb3Zl
ZCB3aGVuIHdlIG1lcmdlCi0gICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnNfYW5kcm9pZC50eHQg
aW50byB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCisgICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnNf
YW5kcm9pZC50eHQgaW50byBUZXN0RXhwZWN0YXRpb25zLgogICAgICAgICBleHBlY3RhdGlvbnMg
PSBjaHJvbWl1bS5DaHJvbWl1bVBvcnQudGVzdF9leHBlY3RhdGlvbnMoc2VsZikKICAgICAgICAg
cmV0dXJuIGV4cGVjdGF0aW9ucy5yZXBsYWNlKCdMSU5VWCAnLCAnTElOVVggQU5EUk9JRCAnKQog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90
ZXN0LnB5CShyZXZpc2lvbiAxMTkxOTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3Rlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw4ICsyNDcsOCBAQCBl
bHNlOgogZGVmIGFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbShmaWxlc3lzdGVtKToK
ICAgICAjIEFkZCB0aGUgdGVzdF9leHBlY3RhdGlvbnMgZmlsZS4KICAgICBmaWxlc3lzdGVtLm1h
eWJlX21ha2VfZGlyZWN0b3J5KExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0vdGVzdCcpCi0g
ICAgaWYgbm90IGZpbGVzeXN0ZW0uZXhpc3RzKExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0v
dGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnKToKLSAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90
ZXh0X2ZpbGUoTEFZT1VUX1RFU1RfRElSICsgJy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRp
b25zLnR4dCcsICIiIgorICAgIGlmIG5vdCBmaWxlc3lzdGVtLmV4aXN0cyhMQVlPVVRfVEVTVF9E
SVIgKyAnL3BsYXRmb3JtL3Rlc3QvVGVzdEV4cGVjdGF0aW9ucycpOgorICAgICAgICBmaWxlc3lz
dGVtLndyaXRlX3RleHRfZmlsZShMQVlPVVRfVEVTVF9ESVIgKyAnL3BsYXRmb3JtL3Rlc3QvVGVz
dEV4cGVjdGF0aW9ucycsICIiIgogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0
bWwgPSBDUkFTSAogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFH
RQogV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2F1ZGlvLmh0bWwgPSBBVURJTwpAQCAtMzQw
LDcgKzM0MCw3IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgICAgICBQb3J0Ll9faW5pdF9f
KHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3Rlc3RzID0g
dW5pdF90ZXN0X2xpc3QoKQogICAgICAgICBzZWxmLl9mbGFrZXMgPSBzZXQoKQotICAgICAgICBz
ZWxmLl9leHBlY3RhdGlvbnNfcGF0aCA9IExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0vdGVz
dC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnCisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uc19wYXRo
ID0gTEFZT1VUX1RFU1RfRElSICsgJy9wbGF0Zm9ybS90ZXN0L1Rlc3RFeHBlY3RhdGlvbnMnCiAg
ICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gTm9uZQogCiAgICAgICAgIHNlbGYuX29w
ZXJhdGluZ19zeXN0ZW0gPSAnbWFjJwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJraXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkJKHJldmlzaW9uIDExOTE5NCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC03NywxMCArNzcsNiBAQCBjbGFzcyBXZWJLaXRQb3J0KFBvcnQpOgogICAgICAg
ICAgICAgc2VhcmNoX3BhdGhzLmFwcGVuZChzZWxmLnBvcnRfbmFtZSkKICAgICAgICAgcmV0dXJu
IG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VhcmNoX3BhdGhzKQogCi0gICAgZGVm
IHBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKLSAgICAgICAgIyB0ZXN0X2V4
cGVjdGF0aW9ucyBhcmUgYWx3YXlzIGluIG1hYy8gbm90IG1hYy1sZW9wYXJkLyBieSBjb252ZW50
aW9uLCBoZW5jZSB3ZSB1c2UgcG9ydF9uYW1lIGluc3RlYWQgb2YgbmFtZSgpLgotICAgICAgICBy
ZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNl
bGYucG9ydF9uYW1lKSwgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcpCi0KICAgICBkZWYgX3BvcnRf
ZmxhZ19mb3Jfc2NyaXB0cyhzZWxmKToKICAgICAgICAgIyBUaGlzIGlzIG92ZXJycmlkZW4gYnkg
cG9ydHMgd2hpY2ggbmVlZCBhIGZsYWcgcGFzc2VkIHRvIHNjcmlwdHMgdG8gZGlzdGluZ3Vpc2gg
dGhlIHVzZSBvZiB0aGF0IHBvcnQuCiAgICAgICAgICMgRm9yIGV4YW1wbGUgLS1xdCBvbiBsaW51
eCwgc2luY2UgYSB1c2VyIG1pZ2h0IGhhdmUgYm90aCBHdGsgYW5kIFF0IGxpYnJhcmllcyBpbnN0
YWxsZWQuCkBAIC0zNjEsMTEgKzM1NywxMSBAQCBjbGFzcyBXZWJLaXRQb3J0KFBvcnQpOgogICAg
ICAgICByZXR1cm4gc2VhcmNoX3BhdGhzCiAKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2Vs
Zik6Ci0gICAgICAgICMgVGhpcyBhbGxvd3MgcG9ydHMgdG8gdXNlIGEgY29tYmluYXRpb24gb2Yg
dGVzdF9leHBlY3RhdGlvbnMudHh0IGZpbGVzIGFuZCBTa2lwcGVkIGxpc3RzLgorICAgICAgICAj
IFRoaXMgYWxsb3dzIHBvcnRzIHRvIHVzZSBhIGNvbWJpbmF0aW9uIG9mIFRlc3RFeHBlY3RhdGlv
bnMgZmlsZXMgYW5kIFNraXBwZWQgbGlzdHMuCiAgICAgICAgIGV4cGVjdGF0aW9ucyA9ICcnCiAg
ICAgICAgIGV4cGVjdGF0aW9uc19wYXRoID0gc2VsZi5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25z
X2ZpbGUoKQogICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhleHBlY3RhdGlvbnNf
cGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJVc2luZyB0ZXN0X2V4cGVjdGF0aW9ucy50
eHQ6ICVzIiAlIGV4cGVjdGF0aW9uc19wYXRoKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVXNp
bmcgdGVzdCBleHBlY3RhdGlvbnM6ICVzIiAlIGV4cGVjdGF0aW9uc19wYXRoKQogICAgICAgICAg
ICAgZXhwZWN0YXRpb25zID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShleHBlY3Rh
dGlvbnNfcGF0aCkKICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9ucwogCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdF91bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dF91bml0dGVzdC5weQkocmV2aXNpb24gMTE5MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDggKzk0LDE1IEBAIGNsYXNzIFdlYktpdFBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFQK
ICAgICBkZWYgdGVzdF9wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CiAgICAg
ICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCiAgICAgICAgIHBvcnQuX29wdGlvbnMgPSBNb2Nr
T3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSwgJy9tb2NrLWNoZWNrb3V0
L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L3Rlc3RfZXhwZWN0YXRpb25zLnR4
dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRp
b25zX2ZpbGUoKSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJr
aXRwb3J0L1Rlc3RFeHBlY3RhdGlvbnMnKQorCisgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9y
dCgpCiAgICAgICAgIHBvcnQuX29wdGlvbnMgPSBNb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5u
ZXI9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnBhdGhfdG9fdGVzdF9leHBl
Y3RhdGlvbnNfZmlsZSgpLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVz
dHdlYmtpdHBvcnQvVGVzdEV4cGVjdGF0aW9ucycpCisKKyAgICAgICAgcG9ydCA9IFRlc3RXZWJL
aXRQb3J0KCkKKyAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNr
b3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L3Rlc3RfZXhwZWN0YXRpb25z
LnR4dCddID0gJ3NvbWUgY29udGVudCcKKyAgICAgICAgcG9ydC5fb3B0aW9ucyA9IE1vY2tPcHRp
b25zKHdlYmtpdF90ZXN0X3J1bm5lcj1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChw
b3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpLCAnL21vY2stY2hlY2tvdXQvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vdGVzdHdlYmtpdHBvcnQvdGVzdF9leHBlY3RhdGlvbnMudHh0JykK
IAogICAgIGRlZiB0ZXN0X3NraXBwZWRfZGlyZWN0b3JpZXNfZm9yX3N5bWJvbHMoc2VsZik6CkBA
IC0xNjUsOCArMTcyLDE4IEBAIGNsYXNzIFdlYktpdFBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9y
dFQKICAgICBkZWYgdGVzdF90ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToKICAgICAgICAgIyBDaGVj
ayB0aGF0IHdlIHJlYWQgdGhlIGV4cGVjdGF0aW9ucyBmaWxlCiAgICAgICAgIGhvc3QgPSBNb2Nr
U3lzdGVtSG9zdCgpCisgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L1Rlc3RFeHBl
Y3RhdGlvbnMnLAorICAgICAgICAgICAgJ0JVR19URVNURVhQRUNUQVRJT05TIFNLSVAgOiBmYXN0
L2h0bWwvYXJ0aWNsZS1lbGVtZW50Lmh0bWwgPSBGQUlMXG4nKQorICAgICAgICBwb3J0ID0gVGVz
dFdlYktpdFBvcnQoaG9zdD1ob3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQudGVz
dF9leHBlY3RhdGlvbnMoKSwgJ0JVR19URVNURVhQRUNUQVRJT05TIFNLSVAgOiBmYXN0L2h0bWwv
YXJ0aWNsZS1lbGVtZW50Lmh0bWwgPSBGQUlMXG4nKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X3Rl
c3RfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgd2UgcmVhZCB0aGUg
bGVnYWN5IHRlc3RfZXhwZWN0YXRpb25zLnR4dCBmaWxlCisgICAgICAgIGhvc3QgPSBNb2NrU3lz
dGVtSG9zdCgpCiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3R3ZWJraXRwb3J0L3Rlc3RfZXhwZWN0
YXRpb25zLnR4dCcsCiAgICAgICAgICAgICAnQlVHX1RFU1RFWFBFQ1RBVElPTlMgU0tJUCA6IGZh
c3QvaHRtbC9hcnRpY2xlLWVsZW1lbnQuaHRtbCA9IEZBSUxcbicpCisgICAgICAgIGhvc3QuZmls
ZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRm
b3JtL3Rlc3R3ZWJraXRwb3J0L1Rlc3RFeHBlY3RhdGlvbnMnLAorICAgICAgICAgICAgJ0JVR19C
QURFWFBFQ1RBVElPTiBTS0lQIDogZmFzdC9odG1sL2FydGljbGUtZWxlbWVudC5odG1sID0gRkFJ
TFxuJykKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KGhvc3Q9aG9zdCkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwb3J0LnRlc3RfZXhwZWN0YXRpb25zKCksICdCVUdfVEVTVEVYUEVD
VEFUSU9OUyBTS0lQIDogZmFzdC9odG1sL2FydGljbGUtZWxlbWVudC5odG1sID0gRkFJTFxuJykK
IApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQkocmV2aXNpb24g
MTE5MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTcsMTUgKzUxNywxNCBAQCBjbGFzcyBDaGVja2VyRGlzcGF0Y2hlcihv
YmplY3QpOgogICAgICAgICAjIFNpbmNlICJMYXlvdXRUZXN0cyIgaXMgaW4gX1NLSVBQRURfRklM
RVNfV0lUSE9VVF9XQVJOSU5HLCBtYWtlCiAgICAgICAgICMgYW4gZXhjZXB0aW9uIHRvIHByZXZl
bnQgZmlsZXMgbGlrZSAiTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIiBhbmQKICAgICAgICAgIyAiTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nLTIwMDktMDYtMTYiIGZyb20gYmVpbmcgc2tpcHBlZC4KLSAgICAg
ICAgIyBGaWxlcyBsaWtlICd0ZXN0X2V4cGVjdGF0aW9ucy50eHQnIGFuZCAnZHJ0X2V4cGVjdGF0
aW9ucy50eHQnCi0gICAgICAgICMgYXJlIGFsc28gc2hvdWxkIG5vdCBiZSBza2lwcGVkLgorICAg
ICAgICAjIEZpbGVzIGxpa2UgJ1Rlc3RFeHBlY3RhdGlvbnMnIGFyZSBhbHNvIHNob3VsZCBub3Qg
YmUgc2tpcHBlZC4KICAgICAgICAgIwogICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGEgZ29v
ZCB3YXkgdG8gYXZvaWQgaGF2aW5nIHRvIGFkZCBzcGVjaWFsIGxvZ2ljCiAgICAgICAgICMgICAg
ICAgIGZvciB0aGlzIHNwZWNpYWwgY2FzZS4KICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJh
c2VuYW1lKGZpbGVfcGF0aCkKICAgICAgICAgaWYgYmFzZW5hbWUuc3RhcnRzd2l0aCgnQ2hhbmdl
TG9nJyk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxpZiBiYXNlbmFtZSA9
PSAndGVzdF9leHBlY3RhdGlvbnMudHh0JyBvciBiYXNlbmFtZSA9PSAnZHJ0X2V4cGVjdGF0aW9u
cy50eHQnOgorICAgICAgICBlbGlmIGJhc2VuYW1lID09ICd0ZXN0X2V4cGVjdGF0aW9ucy50eHQn
IG9yIGJhc2VuYW1lID09ICdUZXN0RXhwZWN0YXRpb25zJzoKICAgICAgICAgICAgIHJldHVybiBG
YWxzZQogICAgICAgICBmb3Igc2tpcHBlZF9maWxlIGluIF9TS0lQUEVEX0ZJTEVTX1dJVEhPVVRf
V0FSTklORzoKICAgICAgICAgICAgIGlmIHNlbGYuX3Nob3VsZF9za2lwX2ZpbGVfcGF0aChmaWxl
X3BhdGgsIHNraXBwZWRfZmlsZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnMucHkJKHJldmlzaW9u
IDExOTE5NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9l
eHBlY3RhdGlvbnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNDaGVj
a2VyKG9iamVjdCk6Ci0gICAgIiIiUHJvY2Vzc2VzIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBsaW5l
cyBmb3IgdmFsaWRhdGluZyB0aGUgc3ludGF4LiIiIgorICAgICIiIlByb2Nlc3NlcyBUZXN0RXhw
ZWN0YXRpb25zIGxpbmVzIGZvciB2YWxpZGF0aW5nIHRoZSBzeW50YXguIiIiCiAKICAgICBjYXRl
Z29yaWVzID0gc2V0KFsndGVzdC9leHBlY3RhdGlvbnMnXSkKIApAQCAtNjEsNyArNjEsNyBAQCBj
bGFzcyBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9oYW5k
bGVfc3R5bGVfZXJyb3IgPSBoYW5kbGVfc3R5bGVfZXJyb3IKICAgICAgICAgc2VsZi5faGFuZGxl
X3N0eWxlX2Vycm9yLnR1cm5fb2ZmX2xpbmVfZmlsdGVyaW5nKCkKICAgICAgICAgc2VsZi5fdGFi
X2NoZWNrZXIgPSBUYWJDaGVja2VyKGZpbGVfcGF0aCwgaGFuZGxlX3N0eWxlX2Vycm9yKQotICAg
ICAgICBzZWxmLl9vdXRwdXRfcmVnZXggPSByZS5jb21waWxlKCcuKnRlc3RfZXhwZWN0YXRpb25z
LnR4dDooP1A8bGluZT5cZCspXHMqKD9QPG1lc3NhZ2U+LispJykKKyAgICAgICAgc2VsZi5fb3V0
cHV0X3JlZ2V4ID0gcmUuY29tcGlsZSgnLiooVGVzdEV4cGVjdGF0aW9uc3x0ZXN0X2V4cGVjdGF0
aW9ucy50eHQpOig/UDxsaW5lPlxkKylccyooP1A8bWVzc2FnZT4uKyknKQogCiAgICAgICAgICMg
RklYTUU6IGhvc3Qgc2hvdWxkIGJlIGEgcmVxdWlyZWQgcGFyYW1ldGVyLCBub3QgYW4gb3B0aW9u
YWwgb25lLgogICAgICAgICBob3N0ID0gaG9zdCBvciBIb3N0KCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0
X2V4cGVjdGF0aW9uc191bml0dGVzdC5weQkocmV2aXNpb24gMTE5MTk0KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtNzMsMTggKzczLDMzIEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlv
bnNUZXN0Q2FzZSh1bml0dGVzdC4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKE5vbmUsIGV4cGVjdGVkX3BvcnRfaW1wbGVtZW50YXRpb24pCiAKKyAgICAgICAg
aG9zdCA9IE1vY2tIb3N0KCkKKyAgICAgICAgZXhwZWN0YXRpb25zX3BhdGggPSBleHBlY3RhdGlv
bnNfcGF0aC5yZXBsYWNlKCdUZXN0RXhwZWN0YXRpb25zJywgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4
dCcpCisgICAgICAgIGlmIG5vdCBleHBlY3RhdGlvbnNfcGF0aC5zdGFydHN3aXRoKCcvbW9jay1j
aGVja291dCcpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zX2Z1bGxfcGF0aCA9ICcvbW9jay1j
aGVja291dC8nICsgZXhwZWN0YXRpb25zX3BhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGV4cGVjdGF0aW9uc19mdWxsX3BhdGggPSBleHBlY3RhdGlvbnNfcGF0aAorICAgICAgICBob3N0
LmZpbGVzeXN0ZW0uZmlsZXNbZXhwZWN0YXRpb25zX2Z1bGxfcGF0aF0gPSAnc29tZSBjb250ZW50
JworCisgICAgICAgIGNoZWNrZXIgPSBUZXN0RXhwZWN0YXRpb25zQ2hlY2tlcihleHBlY3RhdGlv
bnNfcGF0aCwgRXJyb3JDb2xsZWN0b3IoKSwgaG9zdD1ob3N0KQorICAgICAgICBwb3J0ID0gY2hl
Y2tlci5fZGV0ZXJtaW5lX3BvcnRfZnJvbV9leHBlY3RhdGlvbnNfcGF0aChob3N0LCBleHBlY3Rh
dGlvbnNfcGF0aCkKKyAgICAgICAgaWYgcG9ydDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwb3J0Lm5hbWUoKS5zdGFydHN3aXRoKGV4cGVjdGVkX3BvcnRfaW1wbGVtZW50YXRpb24pKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgZXhwZWN0
ZWRfcG9ydF9pbXBsZW1lbnRhdGlvbikKKwogICAgIGRlZiB0ZXN0X2RldGVybWluZV9wb3J0X2Zy
b21fZXhwZWN0YXRpb25zX3BhdGgoc2VsZik6CiAgICAgICAgIHNlbGYuX2V4cGVjdF9wb3J0X2Zv
cl9leHBlY3RhdGlvbnNfcGF0aChOb25lLCAnLycpCi0gICAgICAgIHNlbGYuX2V4cGVjdF9wb3J0
X2Zvcl9leHBlY3RhdGlvbnNfcGF0aChOb25lLCAnTGF5b3V0VGVzdHMvY2hyb21pdW0tbWFjL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dCcpCi0gICAgICAgIHNlbGYuX2V4cGVjdF9wb3J0X2Zvcl9leHBl
Y3RhdGlvbnNfcGF0aCgnY2hyb21pdW0nLCAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0JykKLSAgICAgICAgc2VsZi5fZXhwZWN0X3BvcnRfZm9yX2V4
cGVjdGF0aW9uc19wYXRoKE5vbmUsICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vdGVzdF9leHBlY3RhdGlvbnMudHh0JykKLSAgICAgICAgc2VsZi5fZXhwZWN0X3BvcnRf
Zm9yX2V4cGVjdGF0aW9uc19wYXRoKCd3aW4nLCAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dCcpCisgICAgICAgIHNlbGYuX2V4cGVjdF9wb3J0X2Zvcl9leHBl
Y3RhdGlvbnNfcGF0aChOb25lLCAnTGF5b3V0VGVzdHMvY2hyb21pdW0tbWFjL1Rlc3RFeHBlY3Rh
dGlvbnMnKQorICAgICAgICBzZWxmLl9leHBlY3RfcG9ydF9mb3JfZXhwZWN0YXRpb25zX3BhdGgo
J2Nocm9taXVtJywgJ0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlv
bnMnKQorICAgICAgICBzZWxmLl9leHBlY3RfcG9ydF9mb3JfZXhwZWN0YXRpb25zX3BhdGgoTm9u
ZSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRp
b25zJykKKyAgICAgICAgc2VsZi5fZXhwZWN0X3BvcnRfZm9yX2V4cGVjdGF0aW9uc19wYXRoKCd3
aW4nLCAnTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMnKQogCiAgICAg
ZGVmIGFzc2VydF9saW5lc19saW50KHNlbGYsIGxpbmVzLCBzaG91bGRfcGFzcywgZXhwZWN0ZWRf
b3V0cHV0PU5vbmUpOgogICAgICAgICBzZWxmLl9lcnJvcl9jb2xsZWN0b3IucmVzZXRfZXJyb3Jz
KCkKIAogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQotICAgICAgICBjaGVja2VyID0gVGVzdEV4
cGVjdGF0aW9uc0NoZWNrZXIoJ3Rlc3QvdGVzdF9leHBlY3RhdGlvbnMudHh0JywKKyAgICAgICAg
Y2hlY2tlciA9IFRlc3RFeHBlY3RhdGlvbnNDaGVja2VyKCd0ZXN0L1Rlc3RFeHBlY3RhdGlvbnMn
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3Jf
Y29sbGVjdG9yLCBob3N0PWhvc3QpCiAKICAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSBmYWlsZWQg
dG8gZmluZCBhIHZhbGlkIHBvcnQgb2JqZWN0IGZvciB0aGF0IHBhdGguCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQkocmV2aXNpb24g
MTE5MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTM5NSw3ICszOTUsNyBAQCBjbGFzcyBQcmludEV4cGVjdGF0
aW9ucyhBYnN0cmFjdERlY2xhcmF0CiAgICAgICAgICAgICBtYWtlX29wdGlvbignLS1jc3YnLCBh
Y3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0nUHJpbnQgYSBDU1Ytc3R5bGUgcmVwb3J0IHRoYXQgaW5jbHVkZXMgdGhlIHBvcnQg
bmFtZSwgbW9kaWZpZXJzLCB0ZXN0cywgYW5kIGV4cGVjdGF0aW9ucycpLAogICAgICAgICAgICAg
bWFrZV9vcHRpb24oJy1mJywgJy0tZnVsbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9
RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQcmludCBhIGZ1bGwgdGVzdF9l
eHBlY3RhdGlvbnMudHh0LXN0eWxlIGxpbmUgZm9yIGV2ZXJ5IG1hdGNoJyksCisgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdQcmludCBhIGZ1bGwgVGVzdEV4cGVjdGF0aW9ucy1zdHlsZSBs
aW5lIGZvciBldmVyeSBtYXRjaCcpLAogICAgICAgICBdICsgcG9ydF9vcHRpb25zKHBsYXRmb3Jt
PSdwb3J0L3BsYXRmb3JtIHRvIHVzZS4gVXNlIGdsb2Itc3R5bGUgd2lsZGNhcmRzIGZvciBtdWx0
aXBsZSBwb3J0cyAoaW1wbGllcyAtLWNzdiknKQogCiAgICAgICAgIEFic3RyYWN0RGVjbGFyYXRp
dmVDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5CShyZXZp
c2lvbiAxMTkxOTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmVi
YXNlbGluZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIGNsYXNzIEFuYWx5
emVCYXNlbGluZXMoQWJzdHJhY3RSZWJhc2VsaW4KIAogY2xhc3MgUmViYXNlbGluZUV4cGVjdGF0
aW9ucyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CiAgICAgbmFtZSA9ICJyZWJhc2VsaW5l
LWV4cGVjdGF0aW9ucyIKLSAgICBoZWxwX3RleHQgPSAiUmViYXNlbGluZXMgdGhlIHRlc3RzIGlu
ZGljYXRlZCBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuIgorICAgIGhlbHBfdGV4dCA9ICJSZWJh
c2VsaW5lcyB0aGUgdGVzdHMgaW5kaWNhdGVkIGluIFRlc3RFeHBlY3RhdGlvbnMuIgogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBvcHRpb25zID0gWwpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5CShyZXZpc2lvbiAxMTkxOTQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIENvbW1pdChBYnN0cmFjdFN0ZXApOgogICAgIGRl
ZiBfY2hlY2tfdGVzdF9leHBlY3RhdGlvbnMoc2VsZiwgY2hhbmdlZF9maWxlcyk6CiAgICAgICAg
IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGVzID0gW10KICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGNo
YW5nZWRfZmlsZXM6Ci0gICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgndGVzdF9leHBl
Y3RhdGlvbnMudHh0Jyk6CisgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgndGVzdF9l
eHBlY3RhdGlvbnMudHh0Jykgb3IgZmlsZW5hbWUuZW5kc3dpdGgoJ1Rlc3RFeHBlY3RhdGlvbnMn
KToKICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9uc19maWxlcy5hcHBlbmQoZmlsZW5h
bWUpCiAKICAgICAgICAgaWYgbm90IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGVzOgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdF91bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0X3VuaXR0ZXN0
LnB5CShyZXZpc2lvbiAxMTkxOTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3Rl
cHMvY29tbWl0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGZy
b20gd2Via2l0cHkudG9vbC5zdGVwcy5jb21taXQgaW1wb3J0IEMKIAogCiBjbGFzcyBDb21taXRU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9jaGVja190ZXN0X2V4cGVjdGF0
aW9ucyhzZWxmKToKKyAgICBkZWYgX3Rlc3RfY2hlY2tfdGVzdF9leHBlY3RhdGlvbnMoc2VsZiwg
ZmlsZW5hbWUpOgogICAgICAgICBjYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG9w
dGlvbnMgPSBNb2NrT3B0aW9ucygpCiAgICAgICAgIG9wdGlvbnMuZ2l0X2NvbW1pdCA9ICIiCkBA
IC00NiwxNiArNDYsMjMgQEAgY2xhc3MgQ29tbWl0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIHRvb2wudXNlciA9IE5vbmUgICMgV2lsbCBjYXVzZSBhbnkgYWNjZXNzIG9mIHRvb2wu
dXNlciB0byByYWlzZSBhbiBleGNlcHRpb24uCiAgICAgICAgIHN0ZXAgPSBDb21taXQodG9vbCwg
b3B0aW9ucykKICAgICAgICAgc3RhdGUgPSB7Ci0gICAgICAgICAgICAiY2hhbmdlZF9maWxlcyI6
IFsidGVzdF9leHBlY3RhdGlvbnMudHh0WFhYIl0sCisgICAgICAgICAgICAiY2hhbmdlZF9maWxl
cyI6IFtmaWxlbmFtZSArICJYWFgiXSwKICAgICAgICAgfQogCiAgICAgICAgIHRvb2wuZXhlY3V0
aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUsIHNob3VsZF90aHJvd193aGVuX3J1
bj1GYWxzZSkKICAgICAgICAgY2FwdHVyZS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBzdGVwLnJ1biwg
W3N0YXRlXSwgZXhwZWN0ZWRfc3RkZXJyPSJDb21taXR0ZWQgcjQ5ODI0OiA8aHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDk4MjQ+XG4iKQogCiAgICAgICAgIHN0YXRlID0gewotICAg
ICAgICAgICAgImNoYW5nZWRfZmlsZXMiOiBbInBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dCJdLAorICAgICAgICAgICAgImNoYW5nZWRfZmlsZXMiOiBbInBsYXRmb3JtL2No
cm9taXVtLyIgKyBmaWxlbmFtZV0sCiAgICAgICAgIH0KLSAgICAgICAgY2FwdHVyZS5hc3NlcnRf
b3V0cHV0cyhzZWxmLCBzdGVwLnJ1biwgW3N0YXRlXSwgZXhwZWN0ZWRfc3RkZXJyPSJNT0NLIHJ1
bl9hbmRfdGhyb3dfaWZfZmFpbDogWydtb2NrLWNoZWNrLXdlYmtpdC1zdHlsZScsICctLWRpZmYt
ZmlsZXMnLCAncGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0J10sIGN3ZD0v
bW9jay1jaGVja291dFxuQ29tbWl0dGVkIHI0OTgyNDogPGh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzQ5ODI0PlxuIikKKyAgICAgICAgY2FwdHVyZS5hc3NlcnRfb3V0cHV0cyhzZWxm
LCBzdGVwLnJ1biwgW3N0YXRlXSwgZXhwZWN0ZWRfc3RkZXJyPSJNT0NLIHJ1bl9hbmRfdGhyb3df
aWZfZmFpbDogWydtb2NrLWNoZWNrLXdlYmtpdC1zdHlsZScsICctLWRpZmYtZmlsZXMnLCAncGxh
dGZvcm0vY2hyb21pdW0vIgorICAgICAgICAgICAgKyBmaWxlbmFtZSArICInXSwgY3dkPS9tb2Nr
LWNoZWNrb3V0XG5Db21taXR0ZWQgcjQ5ODI0OiA8aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvNDk4MjQ+XG4iKQogCi0gICAgICAgIHRvb2wuZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2
ZShzaG91bGRfbG9nPVRydWUsIHNob3VsZF90aHJvd193aGVuX3J1bj1zZXQoWyJwbGF0Zm9ybS9j
aHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQiXSkpCisgICAgICAgIHRvb2wuZXhlY3V0aXZl
ID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUsIHNob3VsZF90aHJvd193aGVuX3J1bj1z
ZXQoWyJwbGF0Zm9ybS9jaHJvbWl1bS8iICsgZmlsZW5hbWVdKSkKICAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoU2NyaXB0RXJyb3IsIGNhcHR1cmUuYXNzZXJ0X291dHB1dHMsIHNlbGYsIHN0ZXAu
cnVuLCBbc3RhdGVdKQorCisgICAgZGVmIHRlc3RfY2hlY2tfdGVzdF9leHBlY3RhdGlvbnMoc2Vs
Zik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2hlY2tfdGVzdF9leHBlY3RhdGlvbnMoJ1Rlc3RFeHBl
Y3RhdGlvbnMnKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbGVnYWN5X3Rlc3RfZXhwZWN0YXRpb25z
KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NoZWNrX3Rlc3RfZXhwZWN0YXRpb25zKCd0ZXN0
X2V4cGVjdGF0aW9ucy50eHQnKQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCShyZXZpc2lvbiAx
MTkxOTQpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hi
b2FyZF9iYXNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NDIsNyArNTQyLDggQEAgZnVuY3Rpb24g
cGF0aFRvQnVpbGRlclJlc3VsdHNGaWxlKGJ1aWxkZQogfQogCiAvLyBGSVhNRTogTWFrZSB0aGUg
ZGFzaGJvYXJkIHVuZGVyc3RhbmQgZGlmZmVyZW50IHBvcnRzJyBleHBlY3RhdGlvbnMgZmlsZXMu
Ci12YXIgQ0hST01JVU1fRVhQRUNUQVRJT05TX1VSTCA9ICdodHRwOi8vc3ZuLndlYmtpdC5vcmcv
cmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0JzsKK3ZhciBDSFJPTUlVTV9FWFBFQ1RBVElPTlNfVVJMID0gJ2h0
dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zJzsKK3ZhciBMRUdBQ1lfQ0hST01JVU1f
RVhQRUNUQVRJT05TX1VSTCA9ICdodHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJr
aXQvdHJ1bmsvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0JzsKIAogZnVuY3Rpb24gcmVxdWVzdEV4cGVjdGF0aW9uc0ZpbGUoKQogewpAQCAtNTUyLDcg
KzU1MywxMyBAQCBmdW5jdGlvbiByZXF1ZXN0RXhwZWN0YXRpb25zRmlsZSgpCiAgICAgICAgIGhh
bmRsZVJlc291cmNlTG9hZCgpOwogICAgIH0sCiAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGNv
bnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBsb2FkIGV4cGVjdGF0aW9ucyBmaWxlIGZyb20gJyArIENI
Uk9NSVVNX0VYUEVDVEFUSU9OU19VUkwpOworICAgICAgICByZXF1ZXN0KExFR0FDWV9DSFJPTUlV
TV9FWFBFQ1RBVElPTlNfVVJMLCBmdW5jdGlvbih4aHIpIHsKKyAgICAgICAgICAgIGdfd2FpdGlu
Z09uRXhwZWN0YXRpb25zID0gZmFsc2U7CisgICAgICAgICAgICBnX2V4cGVjdGF0aW9ucyA9IHho
ci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICBoYW5kbGVSZXNvdXJjZUxvYWQoKTsKKyAgICAg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qg
bG9hZCBleHBlY3RhdGlvbnMgZmlsZSBmcm9tICcgKyBDSFJPTUlVTV9FWFBFQ1RBVElPTlNfVVJM
ICsgJyBvciAnICsgTEVHQUNZX0NIUk9NSVVNX0VYUEVDVEFUSU9OU19VUkwpOworICAgICAgICB9
KTsKICAgICB9KTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcwkocmV2
aXNpb24gMTE5MTk0KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
IHZhciBURVNUX1JFU1VMVFNfQkFTRV9QQVRIID0gJ2h0dHA6Ly9idWkKIHZhciBHUFVfUkVTVUxU
U19CQVNFX1BBVEggPSAnaHR0cDovL2Nocm9taXVtLWJyb3dzZXItZ3B1LXRlc3RzLmNvbW1vbmRh
dGFzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3J1bnMvJwogCiAvLyBGSVhNRTogVGhlc2UgcGxhdGZv
cm0gbmFtZXMgc2hvdWxkIHByb2JhYmx5IGJlIGNoYW5nZWQgdG8gbWF0Y2ggdGhlIGRpcmVjdG9y
aWVzIGluIExheW91dFRlc3RzL3BsYXRmb3JtCi0vLyBpbnN0ZWFkIG9mIG1hdGNoaW5nIHRoZSB2
YWx1ZXMgd2UgdXNlIGluIHRoZSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgZmlsZS4KKy8vIGluc3Rl
YWQgb2YgbWF0Y2hpbmcgdGhlIHZhbHVlcyB3ZSB1c2UgaW4gdGhlIFRlc3RFeHBlY3RhdGlvbnMg
ZmlsZS4KIHZhciBQTEFURk9STVMgPSBbJ0xJT04nLCAnU05PV0xFT1BBUkQnLCAnTEVPUEFSRCcs
ICdYUCcsICdWSVNUQScsICdXSU43JywgJ0xVQ0lEJywgJ0FQUExFX0xJT04nLCAnQVBQTEVfTEVP
UEFSRCcsICdBUFBMRV9TTk9XTEVPUEFSRCcsICdBUFBMRV9YUCcsICdBUFBMRV9XSU43JywgJ0dU
S19MSU5VWCcsICdRVF9MSU5VWCddOwogdmFyIFBMQVRGT1JNX1VOSU9OUyA9IHsKICAgICAnTUFD
JzogWydMRU9QQVJEJywgJ1NOT1dMRU9QQVJEJywgJ0xJT04nXSwKQEAgLTIxMSw3ICsyMTEsNyBA
QCB2YXIgZ19wZXJCdWlsZGVyRmFpbHVyZXMgPSB7fTsKIC8vIGJ1dCBoYXZlIGZvciB0aGF0IGJ1
aWxkZXIuCiB2YXIgZ19wZXJCdWlsZGVyV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMgPSB7
fTsKIC8vIE1hcCBvZiBidWlsZGVyIHRvIGFycmF5cyBvZiBwYXRocyB0aGF0IGFyZSBza2lwcGVk
LiBUaGlzIHNob3dzIHRoZSByYXcKLS8vIHBhdGggdXNlZCBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50
eHQgcmF0aGVyIHRoYW4gdGhlIHRlc3QgcGF0aCBzaW5jZSB3ZQorLy8gcGF0aCB1c2VkIGluIFRl
c3RFeHBlY3RhdGlvbnMgcmF0aGVyIHRoYW4gdGhlIHRlc3QgcGF0aCBzaW5jZSB3ZQogLy8gZG9u
J3QgYWN0dWFsbHkgaGF2ZSBhbnkgZGF0YSBoZXJlIGZvciBza2lwcGVkIHRlc3RzLgogdmFyIGdf
cGVyQnVpbGRlclNraXBwZWRQYXRocyA9IHt9OwogLy8gTWFwcyB0ZXN0IHBhdGggdG8gYW4gYXJy
YXkgb2Yge2J1aWxkZXIsIHRlc3RSZXN1bHRzfSBvYmplY3RzLgpAQCAtODIwLDcgKzgyMCw3IEBA
IGZ1bmN0aW9uIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGkKICAgICAgICAgZXh0cmFF
eHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnNBcnJheS5maWx0ZXIoCiAgICAgICAgICAgICBmdW5j
dGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE9uY2UgYWxsIHRoZSBG
QUlMIGxpbmVzIGFyZSByZW1vdmVkIGZyb20KLSAgICAgICAgICAgICAgICAvLyB0ZXN0X2V4cGVj
dGF0aW9ucy50eHQsIGRlbGV0ZSBhbGwgdGhlIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcwor
ICAgICAgICAgICAgICAgIC8vIFRlc3RFeHBlY3RhdGlvbnMsIGRlbGV0ZSBhbGwgdGhlIGxlZ2Fj
eUV4cGVjdGF0aW9uc1NlbWFudGljcwogICAgICAgICAgICAgICAgIC8vIGNvZGUuCiAgICAgICAg
ICAgICAgICAgaWYgKGdfY3VycmVudFN0YXRlLmxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcykg
ewogICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAnRkFJTCcpIHsKQEAgLTg0MSw3
ICs4NDEsNyBAQCBmdW5jdGlvbiBwcm9jZXNzTWlzc2luZ0FuZEV4dHJhRXhwZWN0YXRpCiAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGF0aW9uc0FycmF5Lmxlbmd0aDsgaSsr
KSB7CiAgICAgICAgICAgICAgICAgdmFyIGV4cGVjdGF0aW9uID0gZXhwZWN0YXRpb25zQXJyYXlb
aV07CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE9uY2UgYWxsIHRoZSBGQUlMIGxpbmVzIGFy
ZSByZW1vdmVkIGZyb20KLSAgICAgICAgICAgICAgICAvLyB0ZXN0X2V4cGVjdGF0aW9ucy50eHQs
IGRlbGV0ZSBhbGwgdGhlIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcworICAgICAgICAgICAg
ICAgIC8vIFRlc3RFeHBlY3RhdGlvbnMsIGRlbGV0ZSBhbGwgdGhlIGxlZ2FjeUV4cGVjdGF0aW9u
c1NlbWFudGljcwogICAgICAgICAgICAgICAgIC8vIGNvZGUuCiAgICAgICAgICAgICAgICAgaWYg
KGdfY3VycmVudFN0YXRlLmxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcykgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoZXhwZWN0YXRpb24gPT0gJ0ZBSUwnKSB7CkBAIC0xMDc2LDcgKzEwNzYs
NyBAQCBmdW5jdGlvbiBodG1sRm9yVGVzdHNXaXRoRXhwZWN0YXRpb25zQnV0CiAgICAgdmFyIHRl
c3RzID0gZ19wZXJCdWlsZGVyV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXNbYnVpbGRlcl07
CiAgICAgdmFyIHNraXBwZWRQYXRocyA9IGdfcGVyQnVpbGRlclNraXBwZWRQYXRoc1tidWlsZGVy
XTsKICAgICB2YXIgc2hvd1VuZXhwZWN0ZWRQYXNzZXNMaW5rID0gIGxpbmtIVE1MVG9Ub2dnbGVT
dGF0ZSgnc2hvd1VuZXhwZWN0ZWRQYXNzZXMnLCAndGVzdHMgdGhhdCBoYXZlIG5vdCBmYWlsZWQg
aW4gbGFzdCAnICsgZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVycy5sZW5n
dGggKyAnIHJ1bnMnKTsKLSAgICB2YXIgc2hvd1NraXBwZWRMaW5rID0gbGlua0hUTUxUb1RvZ2ds
ZVN0YXRlKCdzaG93U2tpcHBlZCcsICdza2lwcGVkIHRlc3RzIGluIHRlc3RfZXhwZWN0YXRpb25z
LnR4dCcpOworICAgIHZhciBzaG93U2tpcHBlZExpbmsgPSBsaW5rSFRNTFRvVG9nZ2xlU3RhdGUo
J3Nob3dTa2lwcGVkJywgJ3NraXBwZWQgdGVzdHMgaW4gVGVzdEV4cGVjdGF0aW9ucycpOwogICAg
IAogCiAgICAgdmFyIGh0bWwgPSAnJzsKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3Nf
ZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcwkocmV2aXNpb24gMTE5MTk0KQorKysgVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHRlc3QoJ3BsYXRmb3JtQW5k
QnVpbGRUeXBlJywgODgsIGZ1bmN0aW8KICAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3Qo
J0Nocm9taXVtIExpbnV4IFJlbGVhc2UgKFRlc3RzKScsICdMVUNJRCcsICdSRUxFQVNFJyk7CiAg
ICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdDaHJvbWl1bSBNYWMgUmVsZWFzZSAoVGVz
dHMpJywgJ1NOT1dMRU9QQVJEJywgJ1JFTEVBU0UnKTsKICAgICAKLSAgICAvLyBGSVhNRTogVGhl
c2UgcGxhdGZvcm1zIHNob3VsZCBtYXRjaCB3aGF0ZXZlciB3ZSB1c2UgaW4gdGhlIHRlc3RfZXhw
ZWN0YXRpb25zLnR4dCBmb3JtYXQuCisgICAgLy8gRklYTUU6IFRoZXNlIHBsYXRmb3JtcyBzaG91
bGQgbWF0Y2ggd2hhdGV2ZXIgd2UgdXNlIGluIHRoZSBUZXN0RXhwZWN0YXRpb25zIGZvcm1hdC4K
ICAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0xpb24gUmVsZWFzZSAoVGVzdHMpJywg
J0FQUExFX0xJT04nLCAnUkVMRUFTRScpOwogICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVz
dCgnTGlvbiBEZWJ1ZyAoVGVzdHMpJywgJ0FQUExFX0xJT04nLCAnREVCVUcnKTsKICAgICBydW5Q
bGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoVGVzdHMpJywg
J0FQUExFX0xFT1BBUkQnLCAnUkVMRUFTRScpOwo=
</data>
<flag name="review"
          id="152320"
          type_id="1"
          status="+"
          setter="dpranke"
    />
          </attachment>
      

    </bug>

</bugzilla>