<?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>64386</bug_id>
          
          <creation_ts>2011-07-12 13:24:42 -0700</creation_ts>
          <short_desc>Extract model-like TestExpectationLine and TestExpectationFile from TestExpectations.</short_desc>
          <delta_ts>2011-07-13 08:49:17 -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>New Bugs</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>64385</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>abarth</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>435908</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-12 13:24:42 -0700</bug_when>
    <thetext>Extract model-like TestExpectationLine and TestExpectationFile from TestExpectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435914</commentid>
    <comment_count>1</comment_count>
      <attachid>100553</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-12 13:26:45 -0700</bug_when>
    <thetext>Created attachment 100553
WIP: Needs tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436022</commentid>
    <comment_count>2</comment_count>
      <attachid>100575</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-12 15:34:24 -0700</bug_when>
    <thetext>Created attachment 100575
With tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436029</commentid>
    <comment_count>3</comment_count>
      <attachid>100575</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-12 15:39:18 -0700</bug_when>
    <thetext>Comment on attachment 100575
With tests.

this is wrong. fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436043</commentid>
    <comment_count>4</comment_count>
      <attachid>100579</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-12 16:10:34 -0700</bug_when>
    <thetext>Created attachment 100579
Much better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436056</commentid>
    <comment_count>5</comment_count>
      <attachid>100579</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-12 16:24:46 -0700</bug_when>
    <thetext>Comment on attachment 100579
Much better.

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

This looks fantastic.  Some detail nits below.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:208
&gt; +        comment_index = line.find(&quot;//&quot;)
&gt; +        comment = &apos;&apos;
&gt; +        if comment_index == -1:
&gt; +            comment_index = len(line)
&gt; +            comment = None
&gt; +        else:
&gt; +            comment = line[comment_index + 2:]

You can&apos;t split on substrings in python?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:217
&gt; +            return (None, None, None, None)

Consider using a dictionary instead of a tuple.  That&apos;s more self-documenting / self-error-correcting.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:233
&gt; +class TestExpectationLine:

Seems like _split_expectation_string could unpack into TestExpectationLine directly.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:260
&gt; +            (expectation, errors) = TestExpectationParser.parse(line)

Note: You don&apos;t need the ( or ) when making a destructuring assignment, which you might view as prettier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436097</commentid>
    <comment_count>6</comment_count>
      <attachid>100579</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-07-12 17:19:26 -0700</bug_when>
    <thetext>Comment on attachment 100579
Much better.

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

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:152
&gt; +                    result.append(expectation.comment)

See comment, below.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:171
&gt; +        [[&lt;modifiers&gt;] : &lt;name&gt; = &lt;expectations&gt;][ //&lt;comment&gt;]

Historically, comments are  only allowed on a line by themselves. Do you mean to change this? I don&apos;t know that I see a real advantage to supporting it, but I don&apos;t feel strongly about it either way.

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:173
&gt; +        Any errant whitespace is not preserved.

Do you wish to preserve blank lines? If you don&apos;t, round-tripping the file might make the file a lot harder for people to read.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:208
&gt;&gt; +            comment = line[comment_index + 2:]
&gt; 
&gt; You can&apos;t split on substrings in python?

line, comment_part = [x.strip() for x in line.split(&apos;//&apos;)] ?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:247
&gt; +class TestExpectationsFile:

I wouldn&apos;t use the name &quot;File&quot; here, if it&apos;s not actually pointing to a file (and it doesn&apos;t have to point to a file). Maybe Sequence or List?

Also, we used to have a TestExpectationsFile class that was basically the whole giant thing; calling it this might confuse the old-timers used to the earlier code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436207</commentid>
    <comment_count>7</comment_count>
      <attachid>100579</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-12 20:40:35 -0700</bug_when>
    <thetext>Comment on attachment 100579
Much better.

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:171
&gt;&gt; +        [[&lt;modifiers&gt;] : &lt;name&gt; = &lt;expectations&gt;][ //&lt;comment&gt;]
&gt; 
&gt; Historically, comments are  only allowed on a line by themselves. Do you mean to change this? I don&apos;t know that I see a real advantage to supporting it, but I don&apos;t feel strongly about it either way.

No, that was existing behavior. There are actually a couple of uses of this syntax in test_expectations today. I was really tempted to just get rid of them, but decided against it to minimize change.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:173
&gt;&gt; +        Any errant whitespace is not preserved.
&gt; 
&gt; Do you wish to preserve blank lines? If you don&apos;t, round-tripping the file might make the file a lot harder for people to read.

Blank lines are preserved. In fact, line = TestExpectationLine() produces a blank line :)

The errant whitespace is the extra spacing around modifiers, name, expectations, and comment (see the test_string_whitespace_stripping unit test for examples)

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:208
&gt;&gt;&gt; +            comment = line[comment_index + 2:]
&gt;&gt; 
&gt;&gt; You can&apos;t split on substrings in python?
&gt; 
&gt; line, comment_part = [x.strip() for x in line.split(&apos;//&apos;)] ?

D&apos;oi! :) I&apos;ll fix that up. Thanks, Python gurus!

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:217
&gt;&gt; +            return (None, None, None, None)
&gt; 
&gt; Consider using a dictionary instead of a tuple.  That&apos;s more self-documenting / self-error-correcting.

Yeah, I&apos;ll rework this.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:233
&gt;&gt; +class TestExpectationLine:
&gt; 
&gt; Seems like _split_expectation_string could unpack into TestExpectationLine directly.

Yep.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:247
&gt;&gt; +class TestExpectationsFile:
&gt; 
&gt; I wouldn&apos;t use the name &quot;File&quot; here, if it&apos;s not actually pointing to a file (and it doesn&apos;t have to point to a file). Maybe Sequence or List?
&gt; 
&gt; Also, we used to have a TestExpectationsFile class that was basically the whole giant thing; calling it this might confuse the old-timers used to the earlier code.

TestExpectationsList sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436456</commentid>
    <comment_count>8</comment_count>
      <attachid>100579</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-13 08:39:18 -0700</bug_when>
    <thetext>Comment on attachment 100579
Much better.

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

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:208
&gt;&gt;&gt;&gt; +            comment = line[comment_index + 2:]
&gt;&gt;&gt; 
&gt;&gt;&gt; You can&apos;t split on substrings in python?
&gt;&gt; 
&gt;&gt; line, comment_part = [x.strip() for x in line.split(&apos;//&apos;)] ?
&gt; 
&gt; D&apos;oi! :) I&apos;ll fix that up. Thanks, Python gurus!

Ah, turns out it&apos;s not that easy. We should allow for a comment consisting of eight slashes, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436458</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-13 08:42:04 -0700</bug_when>
    <thetext>I am gonna land this and polish with follow-up patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436464</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-13 08:49:17 -0700</bug_when>
    <thetext>Committed r90920: &lt;http://trac.webkit.org/changeset/90920&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100553</attachid>
            <date>2011-07-12 13:26:45 -0700</date>
            <delta_ts>2011-07-12 15:34:21 -0700</delta_ts>
            <desc>WIP: Needs tests.</desc>
            <filename>bug-64386-20110712132644.patch</filename>
            <type>text/plain</type>
            <size>14619</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA4NDIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NDk3MGU0Y2U3MTMyNzI2YjA3ZDg1MWExNTg2OGE5MDc3
ZWZkYzlkLi4xNTg2NzY5YzAwOGJmOTVjYmMwNTk3NWZjYzdjY2FkYjI5MjA5YzdhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDctMTIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBFeHRyYWN0IG1vZGVsLWxpa2UgVGVzdEV4cGVjdGF0aW9uTGluZSBhbmQgVGVz
dEV4cGVjdGF0aW9uRmlsZSBmcm9tIFRlc3RFeHBlY3RhdGlvbnMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDM4NgorCisgICAgICAgIFRoaXMgaXMg
dGhlIGZpcnN0IHN0ZXAgaW4gY29udmVydGluZyBUZXN0RXhwZWN0YXRpb25zIHRvIGEgcmVhbCBt
b2RlbC4KKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zTGluZSByZXByZXNlbnRzIGEgbGluZSBp
biB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0IGZpbGUsIGFuZAorICAgICAgICAqIFRlc3RFeHBl
Y3RhdGlvbnNGaWxlIHJlcHJlc2VudHMgdGhlIGZpbGUsIHdoaWNoIGlzIGEgY29sbGVjdGlvbiBv
ZiBsaW5lcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9u
cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVz
dF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weToKKwogMjAxMS0wNy0x
MiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIHNoZXJpZmZib3Qg
Y2FuJ3QgcGVyZm9ybSByb2xsb3V0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4
IGQ1YWIwYWRhMGEzZDk2M2E1MjczMWQwZWJhZTk5NWJhMTBjMjAxMDQuLjg4YTBmMGJhMjdlOTZh
NGEyYmQyOTg3Y2E1YzM5MmI2ODI4MzRhNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkKQEAgLTg4LDIyICs4OCw2IEBAIGRlZiBoYXNfcGl4ZWxfZmFpbHVyZXMoYWN0dWFsX3Jlc3Vs
dHMpOgogICAgIHJldHVybiBJTUFHRSBpbiBhY3R1YWxfcmVzdWx0cyBvciBJTUFHRV9QTFVTX1RF
WFQgaW4gYWN0dWFsX3Jlc3VsdHMKIAogCi1kZWYgc3RyaXBfY29tbWVudHMobGluZSk6Ci0gICAg
IiIiU3RyaXBzIGNvbW1lbnRzIGZyb20gYSBsaW5lIGFuZCByZXR1cm4gTm9uZSBpZiB0aGUgbGlu
ZSBpcyBlbXB0eQotICAgIG9yIGVsc2UgdGhlIGNvbnRlbnRzIG9mIGxpbmUgd2l0aCBsZWFkaW5n
IGFuZCB0cmFpbGluZyBzcGFjZXMgcmVtb3ZlZAotICAgIGFuZCBhbGwgb3RoZXIgd2hpdGVzcGFj
ZSBjb2xsYXBzZWQiIiIKLQotICAgIGNvbW1lbnRJbmRleCA9IGxpbmUuZmluZCgnLy8nKQotICAg
IGlmIGNvbW1lbnRJbmRleCBpcyAtMToKLSAgICAgICAgY29tbWVudEluZGV4ID0gbGVuKGxpbmUp
Ci0KLSAgICBsaW5lID0gcmUuc3ViKHInXHMrJywgJyAnLCBsaW5lWzpjb21tZW50SW5kZXhdLnN0
cmlwKCkpCi0gICAgaWYgbGluZSA9PSAnJzoKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBlbHNl
OgotICAgICAgICByZXR1cm4gbGluZQotCi0KIGNsYXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgZmF0YWwsIGVycm9ycyk6CiAgICAgICAgIHNlbGYuZmF0
YWwgPSBmYXRhbApAQCAtMTM3LDYgKzEyMSwxMjUgQEAgY2xhc3MgRXhwZWN0YXRpb25zSnNvbkVu
Y29kZXIoc2ltcGxlanNvbi5KU09ORW5jb2Rlcik6CiAgICAgICAgICAgICAgICAgImV4cGVjdGF0
aW9ucyI6IG9iai5leHBlY3RhdGlvbnN9CiAKIAorY2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2Vy
OgorICAgICIiIlByb3ZpZGVzIHBhcnNpbmcgZmFjaWxpdGllcyBmb3IgbGluZXMgaW4gdGhlIHRl
c3RfZXhwZWN0YXRpb24udHh0IGZpbGUuIiIiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
cGFyc2UoY2xzLCBleHBlY3RhdGlvbl9zdHJpbmcpOgorICAgICAgICAiIiJQYXJzZXMgYSBsaW5l
IGZyb20gdGVzdF9leHBlY3RhdGlvbnMudHh0IGFuZCByZXR1cm5zIGEgdHVwbGUsIGNvbnRhaW5p
bmcgYSBUZXN0RXhwZWN0YXRpb25MaW5lIGluc3RhbmNlCisgICAgICAgIGFuZCBhIGxpc3Qgc3lu
dGF4IGVycm9zLCBpZiBhbnkuCisKKyAgICAgICAgVGhlIGZvcm1hdCBvZiB0ZXN0IGV4cGVjdGF0
aW9uIGlzOgorCisgICAgICAgIFtbPG1vZGlmaWVycz5dIDogPG5hbWU+ID0gPGV4cGVjdGF0aW9u
cz5dWyAvLzxjb21tZW50Pl0KKworICAgICAgICBBbnkgZXJyYW50IHdoaXRlc3BhY2UgaXMgbm90
IHByZXNlcnZlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0
aW9uTGluZSgpCisgICAgICAgIGVycm9ycyA9IFtdCisgICAgICAgIChtb2RpZmllcnMsIG5hbWUs
IGV4cGVjdGF0aW9ucywgY29tbWVudCkgPSBjbHMuX3NwbGl0X2V4cGVjdGF0aW9uX3N0cmluZyhl
eHBlY3RhdGlvbl9zdHJpbmcsIGVycm9ycykKKyAgICAgICAgaWYgbGVuKGVycm9ycykgPiAwOgor
ICAgICAgICAgICAgcmVzdWx0Lm1hbGZvcm1lZCA9IFRydWUKKyAgICAgICAgICAgIHJlc3VsdC5j
b21tZW50ID0gZXhwZWN0YXRpb25fc3RyaW5nCisgICAgICAgICAgICByZXN1bHQudmFsaWQgPSBG
YWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0Lm1hbGZvcm1lZCA9IEZhbHNl
CisgICAgICAgICAgICByZXN1bHQuY29tbWVudCA9IGNvbW1lbnQKKyAgICAgICAgICAgIGlmIG5h
bWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsaWQgPSBGYWxzZQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQubmFtZSA9IG5hbWUKKyAgICAgICAg
ICAgICAgICAjIEZJWE1FOiBNb2RpZmllcnMgc2hvdWxkIGJlIGl0cyBvd24gY2xhc3MgZXZlbnR1
YWxseS4KKyAgICAgICAgICAgICAgICByZXN1bHQubW9kaWZpZXJzID0gY2xzLl9zcGxpdF9zcGFj
ZV9zZXBhcmF0ZWQobW9kaWZpZXJzKQorICAgICAgICAgICAgICAgICMgRklYTUU6IEV4cGVjdGF0
aW9ucyBzaG91bGQgYmUgaXRzIG93biBjbGFzcyBldmVudHVhbGx5LgorICAgICAgICAgICAgICAg
IHJlc3VsdC5leHBlY3RhdGlvbnMgPSBjbHMuX3NwbGl0X3NwYWNlX3NlcGFyYXRlZChleHBlY3Rh
dGlvbnMpCisgICAgICAgICAgICAgICAgcmVzdWx0LmNvbW1lbnQgPSBjb21tZW50CisKKyAgICAg
ICAgcmV0dXJuIChyZXN1bHQsIGVycm9ycykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBf
c3BsaXRfZXhwZWN0YXRpb25fc3RyaW5nKGNscywgbGluZSwgZXJyb3JzKToKKyAgICAgICAgIiIi
U3BsaXRzIGxpbmUgaW50byBhIHN0cmluZyBvZiBtb2RpZmllcnMsIGEgdGVzdCBuYW1lLCBhIHN0
cmluZyBvZiBleHBlY3RhdGlvbnMsIGFuZCBhIGNvbW1lbnQsCisgICAgICAgIHJldHVybmluZyB0
aGVtIGFzIGEgdHVwbGUuIEluIGNhc2UgcGFyc2luZyBlcnJvciwgcmV0dXJucyBlbXB0eSB0dXBs
ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1lbnRfaW5kZXggPSBsaW5lLmZpbmQoIi8vIikK
KyAgICAgICAgaWYgY29tbWVudF9pbmRleCA9PSAtMToKKyAgICAgICAgICAgIGNvbW1lbnRfaW5k
ZXggPSBsZW4obGluZSkKKworICAgICAgICBjb21tZW50ID0gbGluZVtjb21tZW50X2luZGV4ICsg
MjpdCisgICAgICAgIGxpbmUgPSByZS5zdWIociJccysiLCAiICIsIGxpbmVbOmNvbW1lbnRfaW5k
ZXhdLnN0cmlwKCkpCisgICAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgorICAgICAgICAgICAgcmV0
dXJuIChOb25lLCBOb25lLCBOb25lLCBjb21tZW50KQorCisgICAgICAgIHBhcnRzID0gbGluZS5z
cGxpdCgnOicpCisgICAgICAgIGlmIGxlbihwYXJ0cykgIT0gMjoKKyAgICAgICAgICAgIGVycm9y
cy5hcHBlbmQoKCJNaXNzaW5nIGEgJzonIGluIiBpZiBsZW4ocGFydHMpIDwgMiBlbHNlICJFeHRy
YW5lb3VzICc6JyBpbiIsICInIiArIGxpbmUgKyAiJyIpKQorICAgICAgICAgICAgcmV0dXJuIChO
b25lLCBOb25lLCBOb25lLCBOb25lKQorCisgICAgICAgIHRlc3RfYW5kX2V4cGVjdGF0aW9uID0g
cGFydHNbMV0uc3BsaXQoJz0nKQorICAgICAgICBpZiBsZW4odGVzdF9hbmRfZXhwZWN0YXRpb24p
ICE9IDI6CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCgiTWlzc2luZyBleHBlY3RhdGlvbnMg
aW4iIGlmIGxlbih0ZXN0X2FuZF9leHBlY3RhdGlvbikgPCAyIGVsc2UgIkV4dHJhbmVvdXMgJz0n
IGluIiwgIiciICsgbGluZSArICInIikpCisgICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUs
IE5vbmUsIE5vbmUpCisKKyAgICAgICAgcmV0dXJuIChwYXJ0c1swXS5zdHJpcCgpLCB0ZXN0X2Fu
ZF9leHBlY3RhdGlvblswXS5zdHJpcCgpLCB0ZXN0X2FuZF9leHBlY3RhdGlvblsxXS5zdHJpcCgp
LCBjb21tZW50KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zcGxpdF9zcGFjZV9zZXBh
cmF0ZWQoY2xzLCBzcGFjZV9zZXBhcmF0ZWRfc3RyaW5nKToKKyAgICAgICAgIiIiU3BsaXRzIGEg
c3BhY2Utc2VwYXJhdGVkIHN0cmluZyBpbnRvIGFuIGFycmF5LiIiIgorICAgICAgICAjIEZJWE1F
OiBMb3dlci1jYXNpbmcgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgbGVnYWN5IGNvZGUuIE5lZWQg
dG8gZWxpbWluYXRlLgorICAgICAgICByZXR1cm4gW3BhcnQuc3RyaXAoKS5sb3dlcigpIGZvciBw
YXJ0IGluIHNwYWNlX3NlcGFyYXRlZF9zdHJpbmcuc3RyaXAoKS5zcGxpdCgnICcpXQorCisKK2Ns
YXNzIFRlc3RFeHBlY3RhdGlvbkxpbmU6CisgICAgIiIiUmVwcmVzZW50cyBhIGxpbmUgaW4gdGVz
dCBleHBlY3RhdGlvbnMgZmlsZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAg
ICAgc2VsZi5uYW1lID0gTm9uZQorICAgICAgICBzZWxmLm1vZGlmaWVycyA9IFtdCisgICAgICAg
IHNlbGYuZXhwZWN0YXRpb25zID0gW10KKyAgICAgICAgc2VsZi5jb21tZW50ID0gTm9uZQorICAg
ICAgICAjIEZJWE1FOiBTaG91bGQgdmFsaWQgYW5kIG1hbGZvcm1lZCBiZSBzdGF0ZSBmbGFnPwor
ICAgICAgICBzZWxmLnZhbGlkID0gTm9uZQorICAgICAgICBzZWxmLm1hbGZvcm1lZCA9IE5vbmUK
KworICAgICMgRklYTUU6IE1ha2UgaW50byBhIHNlcGFyYXRlIHNlcmlhbGl6ZXIgY2xhc3MuCisg
ICAgZGVmIGdldF9hc19zdHJpbmcoc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICIiCisgICAgICAg
IGlmIHNlbGYudmFsaWQ6CisgICAgICAgICAgICByZXN1bHQgPSAiJXMgOiAlcyA9ICVzIiAlICgi
ICIuam9pbihzZWxmLm1vZGlmaWVycykudXBwZXIoKSwgc2VsZi5uYW1lLCAiICIuam9pbihzZWxm
LmV4cGVjdGF0aW9ucykudXBwZXIoKSkKKyAgICAgICAgIyBGSVhNRTogVGhpcyBhdXRvbWFnaWNh
bGx5IGZpeGVzIHN5bnRheCBlcnJvcnMgYnkgY29tbWVudGluZyB0aGVtIG91dC4gUGVyaGFwcyB0
aGF0J3MgdG9vIHNtYXJ0PworICAgICAgICBpZiBzZWxmLmNvbW1lbnQ6CisgICAgICAgICAgICBy
ZXN1bHQgPSByZXN1bHQgKyAoIiAvLyVzIiAlIChzZWxmLmNvbW1lbnQpKQorCisgICAgICAgIHJl
dHVybiByZXN1bHQKKworCitjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKKyAgICAiIiJSZXBy
ZXNlbnRzIGEgdGVzdCBleHBlY3RhdGlvbiBmaWxlLCB3aGljaCBpcyBhIG11dGFibGUgY29sbGVj
dGlvbiBvZiBjb21tZW50cyBhbmQgdGVzdCBleHBlY3RhdGlvbnMuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IFtdCisKKyAgICBkZWYg
X19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnMuX19pdGVy
X18oKQorCisgICAgIyBGSVhNRTogU2hvdWxkIGFjY2VwdCBhbiBpdGVyYWJsZS4KKyAgICBkZWYg
YXBwZW5kKHNlbGYsIGV4cGVjdGF0aW9uc19zdHJpbmcsIHZhbGlkYXRvcik6CisgICAgICAgICIi
IkFkZCBhIFRlc3RFeHBlY3RhdGlvbkxpbmUgZm9yIGVhY2ggaXRlbSBpbiBleHBlY3RhdGlvbnNf
c3RyaW5nLiIiIgorICAgICAgICBsaW5lX251bWJlciA9IDAKKyAgICAgICAgZm9yIGxpbmUgaW4g
ZXhwZWN0YXRpb25zX3N0cmluZy5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIChleHBlY3RhdGlv
biwgZXJyb3JzKSA9IFRlc3RFeHBlY3RhdGlvblBhcnNlci5wYXJzZShsaW5lKQorICAgICAgICAg
ICAgbGluZV9udW1iZXIgKz0gMQorICAgICAgICAgICAgZXhwZWN0YXRpb24udmFsaWQgPSB2YWxp
ZGF0b3IudmFsaWRhdGUobGluZV9udW1iZXIsIGV4cGVjdGF0aW9uLCBlcnJvcnMpCisgICAgICAg
ICAgICBzZWxmLl9leHBlY3RhdGlvbnMuYXBwZW5kKGV4cGVjdGF0aW9uKQorCisgICAgZGVmIHdy
aXRlKHNlbGYsIG91dHB1dCk6CisgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBzZWxmLl9leHBl
Y3RhdGlvbnM6CisgICAgICAgICAgICBleHBlY3RhdGlvbi53cml0ZShvdXRwdXQpCisgICAgICAg
ICAgICBvdXRwdXQud3JpdGUoJ1xuJykKKworCiBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAg
ICIiIlRlc3QgZXhwZWN0YXRpb25zIGNvbnNpc3Qgb2YgbGluZXMgd2l0aCBzcGVjaWZpY2F0aW9u
cyBvZiB3aGF0CiAgICAgdG8gZXhwZWN0IGZyb20gbGF5b3V0IHRlc3QgY2FzZXMuIFRoZSB0ZXN0
IGNhc2VzIGNhbiBiZSBkaXJlY3RvcmllcwpAQCAtMjQwLDcgKzM0Myw2IEBAIGNsYXNzIFRlc3RF
eHBlY3RhdGlvbnM6CiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAg
ICAgICBzZWxmLl9mcyA9IHBvcnQuX2ZpbGVzeXN0ZW0KLSAgICAgICAgc2VsZi5fZXhwZWN0YXRp
b25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX2Z1bGxfdGVzdF9saXN0ID0gdGVzdHMK
ICAgICAgICAgc2VsZi5fdGVzdF9jb25maWcgPSB0ZXN0X2NvbmZpZwogICAgICAgICBzZWxmLl9p
c19saW50X21vZGUgPSBpc19saW50X21vZGUKQEAgLTI3NCw4ICszNzYsMTAgQEAgY2xhc3MgVGVz
dEV4cGVjdGF0aW9uczoKICAgICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxmLl9k
aWN0X29mX3NldHMoc2VsZi5USU1FTElORVMpCiAgICAgICAgIHNlbGYuX3Jlc3VsdF90eXBlX3Rv
X3Rlc3RzID0gc2VsZi5fZGljdF9vZl9zZXRzKHNlbGYuUkVTVUxUX1RZUEVTKQogCi0gICAgICAg
IHNlbGYuX3JlYWQoc2VsZi5fZ2V0X2l0ZXJhYmxlX2V4cGVjdGF0aW9ucyhzZWxmLl9leHBlY3Rh
dGlvbnMpLAotICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlc19hbGxvd2VkPUZhbHNlKQorICAg
ICAgICBzZWxmLl9tYXRjaGVyID0gTW9kaWZpZXJNYXRjaGVyKHNlbGYuX3Rlc3RfY29uZmlnKQor
ICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZSgpCisgICAg
ICAgIHNlbGYuX292ZXJyaWRlc19hbGxvd2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZXhwZWN0
YXRpb25zLmFwcGVuZChleHBlY3RhdGlvbnMsIHNlbGYpCiAKICAgICAgICAgIyBMaXN0IG9mIHRl
c3RzIHRoYXQgYXJlIGluIHRoZSBvdmVycmlkZXMgZmlsZSAodXNlZCBmb3IgY2hlY2tpbmcgZm9y
CiAgICAgICAgICMgZHVwbGljYXRlcyBpbnNpZGUgdGhlIG92ZXJyaWRlcyBmaWxlIGl0c2VsZiku
IE5vdGUgdGhhdCBqdXN0IGJlY2F1c2UKQEAgLTI4NSw4ICszODksOSBAQCBjbGFzcyBUZXN0RXhw
ZWN0YXRpb25zOgogICAgICAgICBzZWxmLl9vdmVycmlkZGluZ190ZXN0cyA9IHNldCgpCiAKICAg
ICAgICAgaWYgb3ZlcnJpZGVzOgotICAgICAgICAgICAgc2VsZi5fcmVhZChzZWxmLl9nZXRfaXRl
cmFibGVfZXhwZWN0YXRpb25zKHNlbGYuX292ZXJyaWRlcyksCi0gICAgICAgICAgICAgICAgICAg
ICAgIG92ZXJyaWRlc19hbGxvd2VkPVRydWUpCisgICAgICAgICAgICBzZWxmLl9vdmVycmlkZXNf
YWxsb3dlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fb3ZlcnJpZGVzLCBzZWxmKQorICAgICAgICAgICAgc2VsZi5fb3ZlcnJpZGVzX2FsbG93ZWQg
PSBGYWxzZQogCiAgICAgICAgIHNlbGYuX2hhbmRsZV9hbnlfcmVhZF9lcnJvcnMoKQogICAgICAg
ICBzZWxmLl9wcm9jZXNzX3Rlc3RzX3dpdGhvdXRfZXhwZWN0YXRpb25zKCkKQEAgLTQxNCwzOSAr
NTE5LDEwIEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgZGVmIHJlbW92ZV9yZWJhc2Vs
aW5lZF90ZXN0cyhzZWxmLCB0ZXN0cyk6CiAgICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRo
ZSBleHBlY3RhdGlvbnMgd2l0aCB0aGUgdGVzdHMgcmVtb3ZlZC4iIiIKICAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBmb3IgKGxpbmVubywgbGluZSkgaW4gZW51bWVyYXRlKHNlbGYuX2dldF9p
dGVyYWJsZV9leHBlY3RhdGlvbnMoc2VsZi5fZXhwZWN0YXRpb25zKSk6Ci0gICAgICAgICAgICB0
ZXN0LCBvcHRpb25zLCBfID0gc2VsZi5wYXJzZV9leHBlY3RhdGlvbnNfbGluZShsaW5lLCBsaW5l
bm8pCi0gICAgICAgICAgICBpZiBub3QgKHRlc3QgYW5kIHRlc3QgaW4gdGVzdHMgYW5kICdyZWJh
c2VsaW5lJyBpbiBvcHRpb25zKToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkK
LSAgICAgICAgcmV0dXJuICcnLmpvaW4obGluZXMpCi0KLSAgICBkZWYgcGFyc2VfZXhwZWN0YXRp
b25zX2xpbmUoc2VsZiwgbGluZSwgbGluZW5vKToKLSAgICAgICAgIiIiUGFyc2VzIGEgbGluZSBm
cm9tIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBhbmQgcmV0dXJucyBhIHR1cGxlCi0gICAgICAgIHdp
dGggdGhlIHRlc3QgcGF0aCwgb3B0aW9ucyBhcyBhIGxpc3QsIGV4cGVjdGF0aW9ucyBhcyBhIGxp
c3QuIiIiCi0gICAgICAgIGxpbmUgPSBzdHJpcF9jb21tZW50cyhsaW5lKQotICAgICAgICBpZiBu
b3QgbGluZToKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKLQotICAgICAg
ICBvcHRpb25zID0gW10KLSAgICAgICAgaWYgbGluZS5maW5kKCI6IikgaXMgLTE6Ci0gICAgICAg
ICAgICBzZWxmLl9hZGRfZXJyb3IobGluZW5vLCAiTWlzc2luZyBhICc6JyIsIGxpbmUpCi0gICAg
ICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUsIE5vbmUpCi0KLSAgICAgICAgcGFydHMgPSBsaW5l
LnNwbGl0KCc6JykKLQotICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBleGFj
dGx5IG9uZSBjb2xvbiBpbiB0aGUgbGluZS4KLQotICAgICAgICBvcHRpb25zID0gc2VsZi5fZ2V0
X29wdGlvbnNfbGlzdChwYXJ0c1swXSkKLSAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb24gPSBw
YXJ0c1sxXS5zcGxpdCgnPScpCi0gICAgICAgIHRlc3QgPSB0ZXN0X2FuZF9leHBlY3RhdGlvblsw
XS5zdHJpcCgpCi0gICAgICAgIGlmIChsZW4odGVzdF9hbmRfZXhwZWN0YXRpb24pIGlzIG5vdCAy
KToKLSAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sICJNaXNzaW5nIGV4cGVjdGF0
aW9ucy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb24p
Ci0gICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9nZXRfb3B0aW9uc19saXN0KHRlc3RfYW5kX2V4cGVj
dGF0aW9uWzFdKQotCi0gICAgICAgIHJldHVybiAodGVzdCwgb3B0aW9ucywgZXhwZWN0YXRpb25z
KQorICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gc2VsZi5fZXhwZWN0YXRpb25zOgorICAgICAg
ICAgICAgaWYgbm90IChleHBlY3RhdGlvbi52YWxpZCBhbmQgZXhwZWN0YXRpb24ubmFtZSBpbiB0
ZXN0cyBhbmQgInJlYmFzZWxpbmUiIGluIGV4cGVjdGF0aW9uLm1vZGlmaWVycyk6CisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKGV4cGVjdGF0aW9uLmdldF9hc19zdHJpbmcoKSkKKyAgICAg
ICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKIAogICAgIGRlZiBfYWRkX3RvX2FsbF9leHBlY3Rh
dGlvbnMoc2VsZiwgdGVzdCwgb3B0aW9ucywgZXhwZWN0YXRpb25zKToKICAgICAgICAgaWYgbm90
IHRlc3QgaW4gc2VsZi5fYWxsX2V4cGVjdGF0aW9uczoKQEAgLTQ1NCwyMCArNTMwLDE4IEBAIGNs
YXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgICAgIHNlbGYuX2FsbF9leHBlY3RhdGlvbnNbdGVz
dF0uYXBwZW5kKAogICAgICAgICAgICAgTW9kaWZpZXJzQW5kRXhwZWN0YXRpb25zKG9wdGlvbnMs
IGV4cGVjdGF0aW9ucykpCiAKLSAgICBkZWYgX3JlYWQoc2VsZiwgZXhwZWN0YXRpb25zLCBvdmVy
cmlkZXNfYWxsb3dlZCk6Ci0gICAgICAgICIiIkZvciBlYWNoIHRlc3QgaW4gYW4gZXhwZWN0YXRp
b25zIGl0ZXJhYmxlLCBnZW5lcmF0ZSB0aGUKLSAgICAgICAgZXhwZWN0YXRpb25zIGZvciBpdC4i
IiIKLSAgICAgICAgbGluZW5vID0gMAotICAgICAgICBtYXRjaGVyID0gTW9kaWZpZXJNYXRjaGVy
KHNlbGYuX3Rlc3RfY29uZmlnKQotICAgICAgICBmb3IgbGluZSBpbiBleHBlY3RhdGlvbnM6Ci0g
ICAgICAgICAgICBsaW5lbm8gKz0gMQotICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19saW5lKGxp
bmUsIGxpbmVubywgbWF0Y2hlciwgb3ZlcnJpZGVzX2FsbG93ZWQpCi0KLSAgICBkZWYgX3Byb2Nl
c3NfbGluZShzZWxmLCBsaW5lLCBsaW5lbm8sIG1hdGNoZXIsIG92ZXJyaWRlc19hbGxvd2VkKToK
LSAgICAgICAgdGVzdF9saXN0X3BhdGgsIG9wdGlvbnMsIGV4cGVjdGF0aW9ucyA9IFwKLSAgICAg
ICAgICAgIHNlbGYucGFyc2VfZXhwZWN0YXRpb25zX2xpbmUobGluZSwgbGluZW5vKQorICAgIGRl
ZiB2YWxpZGF0ZShzZWxmLCBsaW5lbm8sIGV4cGVjdGF0aW9uLCBzeW50YXhfZXJyb3JzKToKKyAg
ICAgICAgdGVzdF9saXN0X3BhdGggPSBleHBlY3RhdGlvbi5uYW1lCisgICAgICAgIG9wdGlvbnMg
PSBleHBlY3RhdGlvbi5tb2RpZmllcnMKKyAgICAgICAgZXhwZWN0YXRpb25zID0gZXhwZWN0YXRp
b24uZXhwZWN0YXRpb25zCisgICAgICAgIG1hdGNoZXIgPSBzZWxmLl9tYXRjaGVyCisgICAgICAg
IG92ZXJyaWRlc19hbGxvd2VkID0gc2VsZi5fb3ZlcnJpZGVzX2FsbG93ZWQKKworICAgICAgICBm
b3IgKG1lc3NhZ2UsIHNvdXJjZSkgaW4gc3ludGF4X2Vycm9yczoKKyAgICAgICAgICAgIHNlbGYu
X2FkZF9lcnJvcihsaW5lbm8sIG1lc3NhZ2UsIHNvdXJjZSkKKwogICAgICAgICBpZiBub3QgZXhw
ZWN0YXRpb25zOgotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
IAogICAgICAgICBzZWxmLl9hZGRfdG9fYWxsX2V4cGVjdGF0aW9ucyh0ZXN0X2xpc3RfcGF0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIuam9pbihvcHRpb25z
KS51cHBlcigpLApAQCAtNDc2LDcgKzU1MCw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAg
ICAgICAgIG51bV9tYXRjaGVzID0gc2VsZi5fY2hlY2tfb3B0aW9ucyhtYXRjaGVyLCBvcHRpb25z
LCBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X2xpc3RfcGF0aCkKICAgICAgICAgaWYgbnVtX21hdGNoZXMgPT0gTW9kaWZpZXJNYXRjaGVyLk5P
X01BVENIOgotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAog
ICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9wYXJzZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRp
b25zLCBsaW5lbm8sCiAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKQEAgLTQ4NSw3ICs1NTks
NyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAgICAgICAgICAgbGluZW5vLCB0ZXN0X2xp
c3RfcGF0aCkKIAogICAgICAgICBpZiBzZWxmLl9jaGVja19wYXRoX2RvZXNfbm90X2V4aXN0KGxp
bmVubywgdGVzdF9saXN0X3BhdGgpOgotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKIAogICAgICAgICBpZiBub3Qgc2VsZi5fZnVsbF90ZXN0X2xpc3Q6CiAgICAg
ICAgICAgICB0ZXN0cyA9IFt0ZXN0X2xpc3RfcGF0aF0KQEAgLTQ5NSw2ICs1NjksOCBAQCBjbGFz
cyBUZXN0RXhwZWN0YXRpb25zOgogICAgICAgICBtb2RpZmllcnMgPSBbbyBmb3IgbyBpbiBvcHRp
b25zIGlmIG8gaW4gc2VsZi5NT0RJRklFUlNdCiAgICAgICAgIHNlbGYuX2FkZF90ZXN0cyh0ZXN0
cywgZXhwZWN0YXRpb25zLCB0ZXN0X2xpc3RfcGF0aCwgbGluZW5vLCBtb2RpZmllcnMsIG51bV9t
YXRjaGVzLCBvcHRpb25zLCBvdmVycmlkZXNfYWxsb3dlZCkKIAorICAgICAgICByZXR1cm4gVHJ1
ZQorCiAgICAgZGVmIF9nZXRfb3B0aW9uc19saXN0KHNlbGYsIGxpc3RTdHJpbmcpOgogICAgICAg
ICByZXR1cm4gW3BhcnQuc3RyaXAoKS5sb3dlcigpIGZvciBwYXJ0IGluIGxpc3RTdHJpbmcuc3Ry
aXAoKS5zcGxpdCgnICcpXQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnNfdW5p
dHRlc3QucHkKaW5kZXggODg4MjNlZGZhYzk3NjVjZjAwMzRmMGVhODEzNjg1MGQyODYxNTNiMy4u
M2MxNDAzNDY3NTZmOWUyYjQyYmYzMTcwY2Y5NzNhYzNkZTlkZDBlNiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25z
X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21v
ZGVscy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weQpAQCAtMTk1LDcgKzE5NSw3IEBAIFNL
SVAgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sIiIiKQogICAgICAgICBleGNlcHQgUGFy
c2VFcnJvciwgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmZhdGFsKQogICAgICAg
ICAgICAgZXhwX2Vycm9ycyA9IFt1IkxpbmU6MSBVbnJlY29nbml6ZWQgb3B0aW9uICdmb28nIGZh
aWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHUi
TGluZToyIE1pc3NpbmcgZXhwZWN0YXRpb25zLiBbJyBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5o
dG1sJ10iXQorICAgICAgICAgICAgICAgICAgICAgICAgICB1IkxpbmU6MiBNaXNzaW5nIGV4cGVj
dGF0aW9ucyBpbiAnU0tJUCA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwnIl0KICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnXG4nLmpvaW4obWFwKHN0ciwgZXhwX2Vy
cm9ycykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm9ycywgZXhwX2Vycm9y
cykKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90
ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkKaW5kZXggMmY2YWU1Mjg4
ZGJjMmZmNWU4ODE5ZDM3ZTdkZmRjYmMxNzJkYmY4OS4uYTUzNWVmMWIwY2M2ZmQ2MDdkZWU4OWJl
NjU2OTdlMmM0ZjVhOWMxMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5
CkBAIC0xMjIsNyArMTIyLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc1Rlc3RDYXNlKHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbl9lcnJvcnMoc2VsZik6CiAg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbmVzX2xpbnQoCiAgICAgICAgICAgICBbIm1pc3NpbmcgZXhw
ZWN0YXRpb25zIl0sCi0gICAgICAgICAgICAiTWlzc2luZyBhICc6JyBtaXNzaW5nIGV4cGVjdGF0
aW9ucyAgW3Rlc3QvZXhwZWN0YXRpb25zXSBbNV0iKQorICAgICAgICAgICAgIk1pc3NpbmcgYSAn
OicgaW4gJ21pc3NpbmcgZXhwZWN0YXRpb25zJyAgW3Rlc3QvZXhwZWN0YXRpb25zXSBbNV0iKQog
ICAgICAgICBzZWxmLmFzc2VydF9saW5lc19saW50KAogICAgICAgICAgICAgWyJTTE9XIDogcGFz
c2VzL3RleHQuaHRtbCA9IFRJTUVPVVQiXSwKICAgICAgICAgICAgICJBIHRlc3QgY2FuIG5vdCBi
ZSBib3RoIFNMT1cgYW5kIFRJTUVPVVQuICIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100575</attachid>
            <date>2011-07-12 15:34:24 -0700</date>
            <delta_ts>2011-07-12 16:10:31 -0700</delta_ts>
            <desc>With tests.</desc>
            <filename>bug-64386-20110712153423.patch</filename>
            <type>text/plain</type>
            <size>23891</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA4NDIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NDk3MGU0Y2U3MTMyNzI2YjA3ZDg1MWExNTg2OGE5MDc3
ZWZkYzlkLi4xNTg2NzY5YzAwOGJmOTVjYmMwNTk3NWZjYzdjY2FkYjI5MjA5YzdhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDctMTIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBFeHRyYWN0IG1vZGVsLWxpa2UgVGVzdEV4cGVjdGF0aW9uTGluZSBhbmQgVGVz
dEV4cGVjdGF0aW9uRmlsZSBmcm9tIFRlc3RFeHBlY3RhdGlvbnMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDM4NgorCisgICAgICAgIFRoaXMgaXMg
dGhlIGZpcnN0IHN0ZXAgaW4gY29udmVydGluZyBUZXN0RXhwZWN0YXRpb25zIHRvIGEgcmVhbCBt
b2RlbC4KKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zTGluZSByZXByZXNlbnRzIGEgbGluZSBp
biB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0IGZpbGUsIGFuZAorICAgICAgICAqIFRlc3RFeHBl
Y3RhdGlvbnNGaWxlIHJlcHJlc2VudHMgdGhlIGZpbGUsIHdoaWNoIGlzIGEgY29sbGVjdGlvbiBv
ZiBsaW5lcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9u
cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVz
dF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weToKKwogMjAxMS0wNy0x
MiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIHNoZXJpZmZib3Qg
Y2FuJ3QgcGVyZm9ybSByb2xsb3V0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4
IGQ1YWIwYWRhMGEzZDk2M2E1MjczMWQwZWJhZTk5NWJhMTBjMjAxMDQuLmJiYjczYmY1ZjVmZmVi
MWM3M2YyN2ZhNDhhMTM1ZDU2YTBiZjdmMjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkKQEAgLTg4LDYgKzg4LDcgQEAgZGVmIGhhc19waXhlbF9mYWlsdXJlcyhhY3R1YWxfcmVzdWx0
cyk6CiAgICAgcmV0dXJuIElNQUdFIGluIGFjdHVhbF9yZXN1bHRzIG9yIElNQUdFX1BMVVNfVEVY
VCBpbiBhY3R1YWxfcmVzdWx0cwogCiAKKyMgRklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vIGxvbmdl
ciB1c2VkIGhlcmUgaW4gdGhpcyBtb2R1bGUuIFJlbW92ZSByZW1haW5pbmcgY2FsbHNpdGUgaW4g
bWFuYWdlci5weSBhbmQgdGhpcyBtZXRob2QuCiBkZWYgc3RyaXBfY29tbWVudHMobGluZSk6CiAg
ICAgIiIiU3RyaXBzIGNvbW1lbnRzIGZyb20gYSBsaW5lIGFuZCByZXR1cm4gTm9uZSBpZiB0aGUg
bGluZSBpcyBlbXB0eQogICAgIG9yIGVsc2UgdGhlIGNvbnRlbnRzIG9mIGxpbmUgd2l0aCBsZWFk
aW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgcmVtb3ZlZApAQCAtMTM3LDYgKzEzOCwxMzIgQEAgY2xh
c3MgRXhwZWN0YXRpb25zSnNvbkVuY29kZXIoc2ltcGxlanNvbi5KU09ORW5jb2Rlcik6CiAgICAg
ICAgICAgICAgICAgImV4cGVjdGF0aW9ucyI6IG9iai5leHBlY3RhdGlvbnN9CiAKIAorY2xhc3Mg
VGVzdEV4cGVjdGF0aW9uU2VyaWFsaXplcjoKKyAgICAiIiJQcm92aWRlcyBtZWFucyBvZiBzZXJp
YWxpemluZyBUZXN0RXhwZWN0YXRpb25MaW5lIGluc3RhbmNlcy4iIiIKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgdG9fc3RyaW5nKGNscywgZXhwZWN0YXRpb24pOgorICAgICAgICByZXN1bHQg
PSBbXQorICAgICAgICBpZiBleHBlY3RhdGlvbi52YWxpZDoKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoIiVzIDogJXMgPSAlcyIgJSAoIiAiLmpvaW4oZXhwZWN0YXRpb24ubW9kaWZpZXJzKS51
cHBlcigpLCBleHBlY3RhdGlvbi5uYW1lLCAiICIuam9pbihleHBlY3RhdGlvbi5leHBlY3RhdGlv
bnMpLnVwcGVyKCkpKQorICAgICAgICAgICAgaWYgZXhwZWN0YXRpb24uY29tbWVudCBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIgLy8lcyIgJSAoZXhwZWN0YXRp
b24uY29tbWVudCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBleHBlY3RhdGlvbi5t
YWxmb3JtZWQ6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChleHBlY3RhdGlvbi5jb21t
ZW50KQorICAgICAgICAgICAgZWxpZiBleHBlY3RhdGlvbi5jb21tZW50IGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8vJykKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGV4cGVjdGF0aW9uLmNvbW1lbnQpCisKKyAgICAgICAgcmV0dXJuICcnLmpvaW4o
cmVzdWx0KQorCisKK2NsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcjoKKyAgICAiIiJQcm92aWRl
cyBwYXJzaW5nIGZhY2lsaXRpZXMgZm9yIGxpbmVzIGluIHRoZSB0ZXN0X2V4cGVjdGF0aW9uLnR4
dCBmaWxlLiIiIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlKGNscywgZXhwZWN0
YXRpb25fc3RyaW5nKToKKyAgICAgICAgIiIiUGFyc2VzIGEgbGluZSBmcm9tIHRlc3RfZXhwZWN0
YXRpb25zLnR4dCBhbmQgcmV0dXJucyBhIHR1cGxlLCBjb250YWluaW5nIGEgVGVzdEV4cGVjdGF0
aW9uTGluZSBpbnN0YW5jZQorICAgICAgICBhbmQgYSBsaXN0IHN5bnRheCBlcnJvcywgaWYgYW55
LgorCisgICAgICAgIFRoZSBmb3JtYXQgb2YgdGVzdCBleHBlY3RhdGlvbiBpczoKKworICAgICAg
ICBbWzxtb2RpZmllcnM+XSA6IDxuYW1lPiA9IDxleHBlY3RhdGlvbnM+XVsgLy88Y29tbWVudD5d
CisKKyAgICAgICAgQW55IGVycmFudCB3aGl0ZXNwYWNlIGlzIG5vdCBwcmVzZXJ2ZWQuCisKKyAg
ICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbkxpbmUoKQorICAgICAg
ICBlcnJvcnMgPSBbXQorICAgICAgICAobW9kaWZpZXJzLCBuYW1lLCBleHBlY3RhdGlvbnMsIGNv
bW1lbnQpID0gY2xzLl9zcGxpdF9leHBlY3RhdGlvbl9zdHJpbmcoZXhwZWN0YXRpb25fc3RyaW5n
LCBlcnJvcnMpCisgICAgICAgIGlmIGxlbihlcnJvcnMpID4gMDoKKyAgICAgICAgICAgIHJlc3Vs
dC5tYWxmb3JtZWQgPSBUcnVlCisgICAgICAgICAgICByZXN1bHQuY29tbWVudCA9IGV4cGVjdGF0
aW9uX3N0cmluZworICAgICAgICAgICAgcmVzdWx0LnZhbGlkID0gRmFsc2UKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJlc3VsdC5tYWxmb3JtZWQgPSBGYWxzZQorICAgICAgICAgICAgcmVz
dWx0LmNvbW1lbnQgPSBjb21tZW50CisgICAgICAgICAgICByZXN1bHQudmFsaWQgPSBUcnVlCisg
ICAgICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0LnZhbGlk
ID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUg
PSBuYW1lCisgICAgICAgICAgICAgICAgIyBGSVhNRTogTW9kaWZpZXJzIHNob3VsZCBiZSBpdHMg
b3duIGNsYXNzIGV2ZW50dWFsbHkuCisgICAgICAgICAgICAgICAgcmVzdWx0Lm1vZGlmaWVycyA9
IGNscy5fc3BsaXRfc3BhY2Vfc2VwYXJhdGVkKG1vZGlmaWVycykKKyAgICAgICAgICAgICAgICAj
IEZJWE1FOiBFeHBlY3RhdGlvbnMgc2hvdWxkIGJlIGl0cyBvd24gY2xhc3MgZXZlbnR1YWxseS4K
KyAgICAgICAgICAgICAgICByZXN1bHQuZXhwZWN0YXRpb25zID0gY2xzLl9zcGxpdF9zcGFjZV9z
ZXBhcmF0ZWQoZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgICAgIHJlc3VsdC5jb21tZW50ID0g
Y29tbWVudAorCisgICAgICAgIHJldHVybiAocmVzdWx0LCBlcnJvcnMpCisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgX3NwbGl0X2V4cGVjdGF0aW9uX3N0cmluZyhjbHMsIGxpbmUsIGVycm9y
cyk6CisgICAgICAgICIiIlNwbGl0cyBsaW5lIGludG8gYSBzdHJpbmcgb2YgbW9kaWZpZXJzLCBh
IHRlc3QgbmFtZSwgYSBzdHJpbmcgb2YgZXhwZWN0YXRpb25zLCBhbmQgYSBjb21tZW50LAorICAg
ICAgICByZXR1cm5pbmcgdGhlbSBhcyBhIHR1cGxlLiBJbiBjYXNlIHBhcnNpbmcgZXJyb3IsIHJl
dHVybnMgZW1wdHkgdHVwbGUuCisgICAgICAgICIiIgorICAgICAgICBjb21tZW50X2luZGV4ID0g
bGluZS5maW5kKCIvLyIpCisgICAgICAgIGNvbW1lbnQgPSAnJworICAgICAgICBpZiBjb21tZW50
X2luZGV4ID09IC0xOgorICAgICAgICAgICAgY29tbWVudF9pbmRleCA9IGxlbihsaW5lKQorICAg
ICAgICAgICAgY29tbWVudCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1l
bnQgPSBsaW5lW2NvbW1lbnRfaW5kZXggKyAyOl0KKworICAgICAgICBsaW5lID0gcmUuc3ViKHIi
XHMrIiwgIiAiLCBsaW5lWzpjb21tZW50X2luZGV4XS5zdHJpcCgpKQorICAgICAgICBpZiBsZW4o
bGluZSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSwgY29tbWVu
dCkKKworICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKQorICAgICAgICBpZiBsZW4ocGFy
dHMpICE9IDI6CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCgiTWlzc2luZyBhICc6JyBpbiIg
aWYgbGVuKHBhcnRzKSA8IDIgZWxzZSAiRXh0cmFuZW91cyAnOicgaW4iLCAiJyIgKyBsaW5lICsg
IiciKSkKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkKKworICAg
ICAgICB0ZXN0X2FuZF9leHBlY3RhdGlvbiA9IHBhcnRzWzFdLnNwbGl0KCc9JykKKyAgICAgICAg
aWYgbGVuKHRlc3RfYW5kX2V4cGVjdGF0aW9uKSAhPSAyOgorICAgICAgICAgICAgZXJyb3JzLmFw
cGVuZCgoIk1pc3NpbmcgZXhwZWN0YXRpb25zIGluIiBpZiBsZW4odGVzdF9hbmRfZXhwZWN0YXRp
b24pIDwgMiBlbHNlICJFeHRyYW5lb3VzICc9JyBpbiIsICInIiArIGxpbmUgKyAiJyIpKQorICAg
ICAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBOb25lLCBOb25lKQorCisgICAgICAgIHJldHVy
biAocGFydHNbMF0uc3RyaXAoKSwgdGVzdF9hbmRfZXhwZWN0YXRpb25bMF0uc3RyaXAoKSwgdGVz
dF9hbmRfZXhwZWN0YXRpb25bMV0uc3RyaXAoKSwgY29tbWVudCkKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBfc3BsaXRfc3BhY2Vfc2VwYXJhdGVkKGNscywgc3BhY2Vfc2VwYXJhdGVkX3N0
cmluZyk6CisgICAgICAgICIiIlNwbGl0cyBhIHNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgaW50byBh
biBhcnJheS4iIiIKKyAgICAgICAgIyBGSVhNRTogTG93ZXItY2FzaW5nIGlzIG5lY2Vzc2FyeSB0
byBzdXBwb3J0IGxlZ2FjeSBjb2RlLiBOZWVkIHRvIGVsaW1pbmF0ZS4KKyAgICAgICAgcmV0dXJu
IFtwYXJ0LnN0cmlwKCkubG93ZXIoKSBmb3IgcGFydCBpbiBzcGFjZV9zZXBhcmF0ZWRfc3RyaW5n
LnN0cmlwKCkuc3BsaXQoJyAnKV0KKworCitjbGFzcyBUZXN0RXhwZWN0YXRpb25MaW5lOgorICAg
ICIiIlJlcHJlc2VudHMgYSBsaW5lIGluIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICIiIkluaXRpYWxpemVzIGEgYmxhbmstbGlu
ZSBlcXVpdmFsZW50IG9mIGFuIGV4cGVjdGF0aW9uLiIiIgorICAgICAgICBzZWxmLm5hbWUgPSBO
b25lCisgICAgICAgIHNlbGYubW9kaWZpZXJzID0gW10KKyAgICAgICAgc2VsZi5leHBlY3RhdGlv
bnMgPSBbXQorICAgICAgICBzZWxmLmNvbW1lbnQgPSBOb25lCisgICAgICAgICMgRklYTUU6IFNo
b3VsZCB2YWxpZCBhbmQgbWFsZm9ybWVkIGJlIGEgc2luZ2xlIHN0YXRlIGZsYWc/IFByb2JhYmx5
IG5vdCwgc2luY2UgIm1hbGZvcm1lZCIgaXMgYWxzbyAibm90IHZhbGlkIi4KKyAgICAgICAgc2Vs
Zi52YWxpZCA9IEZhbHNlCisgICAgICAgIHNlbGYubWFsZm9ybWVkID0gRmFsc2UKKworCitjbGFz
cyBUZXN0RXhwZWN0YXRpb25zRmlsZToKKyAgICAiIiJSZXByZXNlbnRzIGEgdGVzdCBleHBlY3Rh
dGlvbiBmaWxlLCB3aGljaCBpcyBhIG11dGFibGUgY29sbGVjdGlvbiBvZiBjb21tZW50cyBhbmQg
dGVzdCBleHBlY3RhdGlvbnMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg
IHNlbGYuX2V4cGVjdGF0aW9ucyA9IFtdCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnMuX19pdGVyX18oKQorCisgICAgZGVmIGFwcGVu
ZChzZWxmLCBleHBlY3RhdGlvbnNfc3RyaW5nLCB2YWxpZGF0b3IpOgorICAgICAgICAiIiJBZGQg
YSBUZXN0RXhwZWN0YXRpb25MaW5lIGZvciBlYWNoIGl0ZW0gaW4gZXhwZWN0YXRpb25zX3N0cmlu
Zy4iIiIKKyAgICAgICAgbGluZV9udW1iZXIgPSAwCisgICAgICAgIGZvciBsaW5lIGluIGV4cGVj
dGF0aW9uc19zdHJpbmcuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAoZXhwZWN0YXRpb24sIGVy
cm9ycykgPSBUZXN0RXhwZWN0YXRpb25QYXJzZXIucGFyc2UobGluZSkKKyAgICAgICAgICAgIGxp
bmVfbnVtYmVyICs9IDEKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uLnZhbGlkID0gdmFsaWRhdG9y
LnZhbGlkYXRlKGxpbmVfbnVtYmVyLCBleHBlY3RhdGlvbiwgZXJyb3JzKQorICAgICAgICAgICAg
c2VsZi5fZXhwZWN0YXRpb25zLmFwcGVuZChleHBlY3RhdGlvbikKKworCiBjbGFzcyBUZXN0RXhw
ZWN0YXRpb25zOgogICAgICIiIlRlc3QgZXhwZWN0YXRpb25zIGNvbnNpc3Qgb2YgbGluZXMgd2l0
aCBzcGVjaWZpY2F0aW9ucyBvZiB3aGF0CiAgICAgdG8gZXhwZWN0IGZyb20gbGF5b3V0IHRlc3Qg
Y2FzZXMuIFRoZSB0ZXN0IGNhc2VzIGNhbiBiZSBkaXJlY3RvcmllcwpAQCAtMjQwLDcgKzM2Nyw2
IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9mcyA9IHBvcnQuX2ZpbGVzeXN0ZW0KLSAgICAgICAg
c2VsZi5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX2Z1bGxfdGVz
dF9saXN0ID0gdGVzdHMKICAgICAgICAgc2VsZi5fdGVzdF9jb25maWcgPSB0ZXN0X2NvbmZpZwog
ICAgICAgICBzZWxmLl9pc19saW50X21vZGUgPSBpc19saW50X21vZGUKQEAgLTI3NCw4ICs0MDAs
MTAgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uczoKICAgICAgICAgc2VsZi5fdGltZWxpbmVfdG9f
dGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoc2VsZi5USU1FTElORVMpCiAgICAgICAgIHNlbGYu
X3Jlc3VsdF90eXBlX3RvX3Rlc3RzID0gc2VsZi5fZGljdF9vZl9zZXRzKHNlbGYuUkVTVUxUX1RZ
UEVTKQogCi0gICAgICAgIHNlbGYuX3JlYWQoc2VsZi5fZ2V0X2l0ZXJhYmxlX2V4cGVjdGF0aW9u
cyhzZWxmLl9leHBlY3RhdGlvbnMpLAotICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlc19hbGxv
d2VkPUZhbHNlKQorICAgICAgICBzZWxmLl9tYXRjaGVyID0gTW9kaWZpZXJNYXRjaGVyKHNlbGYu
X3Rlc3RfY29uZmlnKQorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0YXRp
b25zRmlsZSgpCisgICAgICAgIHNlbGYuX292ZXJyaWRlc19hbGxvd2VkID0gRmFsc2UKKyAgICAg
ICAgc2VsZi5fZXhwZWN0YXRpb25zLmFwcGVuZChleHBlY3RhdGlvbnMsIHNlbGYpCiAKICAgICAg
ICAgIyBMaXN0IG9mIHRlc3RzIHRoYXQgYXJlIGluIHRoZSBvdmVycmlkZXMgZmlsZSAodXNlZCBm
b3IgY2hlY2tpbmcgZm9yCiAgICAgICAgICMgZHVwbGljYXRlcyBpbnNpZGUgdGhlIG92ZXJyaWRl
cyBmaWxlIGl0c2VsZikuIE5vdGUgdGhhdCBqdXN0IGJlY2F1c2UKQEAgLTI4NSw4ICs0MTMsOSBA
QCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAgICAgICBzZWxmLl9vdmVycmlkZGluZ190ZXN0
cyA9IHNldCgpCiAKICAgICAgICAgaWYgb3ZlcnJpZGVzOgotICAgICAgICAgICAgc2VsZi5fcmVh
ZChzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKHNlbGYuX292ZXJyaWRlcyksCi0gICAg
ICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlc19hbGxvd2VkPVRydWUpCisgICAgICAgICAgICBz
ZWxmLl9vdmVycmlkZXNfYWxsb3dlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0
aW9ucy5hcHBlbmQoc2VsZi5fb3ZlcnJpZGVzLCBzZWxmKQorICAgICAgICAgICAgc2VsZi5fb3Zl
cnJpZGVzX2FsbG93ZWQgPSBGYWxzZQogCiAgICAgICAgIHNlbGYuX2hhbmRsZV9hbnlfcmVhZF9l
cnJvcnMoKQogICAgICAgICBzZWxmLl9wcm9jZXNzX3Rlc3RzX3dpdGhvdXRfZXhwZWN0YXRpb25z
KCkKQEAgLTM2MiwxNyArNDkxLDYgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uczoKICAgICAgICAg
ICAgIGRbY10gPSBzZXQoKQogICAgICAgICByZXR1cm4gZAogCi0gICAgZGVmIF9nZXRfaXRlcmFi
bGVfZXhwZWN0YXRpb25zKHNlbGYsIGV4cGVjdGF0aW9uc19zdHIpOgotICAgICAgICAiIiJSZXR1
cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSBpdGVyYXRlZCBvdmVyLiBBbGxvd3MgZm9yIG5vdCBj
YXJpbmcKLSAgICAgICAgYWJvdXQgd2hldGhlciB3ZSdyZSBpdGVyYXRpbmcgb3ZlciBhIGZpbGUg
b3IgYSBuZXctbGluZSBzZXBhcmF0ZWQKLSAgICAgICAgc3RyaW5nLiIiIgotICAgICAgICBpdGVy
YWJsZSA9IFt4ICsgIlxuIiBmb3IgeCBpbiBleHBlY3RhdGlvbnNfc3RyLnNwbGl0KCJcbiIpXQot
ICAgICAgICAjIFN0cmlwIGZpbmFsIGVudHJ5IGlmIGl0J3MgZW1wdHkgdG8gYXZvaWQgYWRkZWQg
aW4gYW4gZXh0cmEKLSAgICAgICAgIyBuZXdsaW5lLgotICAgICAgICBpZiBpdGVyYWJsZVstMV0g
PT0gIlxuIjoKLSAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZVs6LTFdCi0gICAgICAgIHJldHVy
biBpdGVyYWJsZQotCiAgICAgZGVmIGdldF90ZXN0X3NldChzZWxmLCBtb2RpZmllciwgZXhwZWN0
YXRpb249Tm9uZSwgaW5jbHVkZV9za2lwcz1UcnVlKToKICAgICAgICAgaWYgZXhwZWN0YXRpb24g
aXMgTm9uZToKICAgICAgICAgICAgIHRlc3RzID0gc2VsZi5fbW9kaWZpZXJfdG9fdGVzdHNbbW9k
aWZpZXJdCkBAIC00MTQsMzkgKzUzMiwxMCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAg
IGRlZiByZW1vdmVfcmViYXNlbGluZWRfdGVzdHMoc2VsZiwgdGVzdHMpOgogICAgICAgICAiIiJS
ZXR1cm5zIGEgY29weSBvZiB0aGUgZXhwZWN0YXRpb25zIHdpdGggdGhlIHRlc3RzIHJlbW92ZWQu
IiIiCiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIChsaW5lbm8sIGxpbmUpIGluIGVu
dW1lcmF0ZShzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKHNlbGYuX2V4cGVjdGF0aW9u
cykpOgotICAgICAgICAgICAgdGVzdCwgb3B0aW9ucywgXyA9IHNlbGYucGFyc2VfZXhwZWN0YXRp
b25zX2xpbmUobGluZSwgbGluZW5vKQotICAgICAgICAgICAgaWYgbm90ICh0ZXN0IGFuZCB0ZXN0
IGluIHRlc3RzIGFuZCAncmViYXNlbGluZScgaW4gb3B0aW9ucyk6Ci0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKGxpbmUpCi0gICAgICAgIHJldHVybiAnJy5qb2luKGxpbmVzKQotCi0gICAg
ZGVmIHBhcnNlX2V4cGVjdGF0aW9uc19saW5lKHNlbGYsIGxpbmUsIGxpbmVubyk6Ci0gICAgICAg
ICIiIlBhcnNlcyBhIGxpbmUgZnJvbSB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgYW5kIHJldHVybnMg
YSB0dXBsZQotICAgICAgICB3aXRoIHRoZSB0ZXN0IHBhdGgsIG9wdGlvbnMgYXMgYSBsaXN0LCBl
eHBlY3RhdGlvbnMgYXMgYSBsaXN0LiIiIgotICAgICAgICBsaW5lID0gc3RyaXBfY29tbWVudHMo
bGluZSkKLSAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5v
bmUsIE5vbmUpCi0KLSAgICAgICAgb3B0aW9ucyA9IFtdCi0gICAgICAgIGlmIGxpbmUuZmluZCgi
OiIpIGlzIC0xOgotICAgICAgICAgICAgc2VsZi5fYWRkX2Vycm9yKGxpbmVubywgIk1pc3Npbmcg
YSAnOiciLCBsaW5lKQotICAgICAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBOb25lKQotCi0g
ICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgnOicpCi0KLSAgICAgICAgIyBGSVhNRTogdmVyaWZ5
IHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUgY29sb24gaW4gdGhlIGxpbmUuCi0KLSAgICAgICAg
b3B0aW9ucyA9IHNlbGYuX2dldF9vcHRpb25zX2xpc3QocGFydHNbMF0pCi0gICAgICAgIHRlc3Rf
YW5kX2V4cGVjdGF0aW9uID0gcGFydHNbMV0uc3BsaXQoJz0nKQotICAgICAgICB0ZXN0ID0gdGVz
dF9hbmRfZXhwZWN0YXRpb25bMF0uc3RyaXAoKQotICAgICAgICBpZiAobGVuKHRlc3RfYW5kX2V4
cGVjdGF0aW9uKSBpcyBub3QgMik6Ci0gICAgICAgICAgICBzZWxmLl9hZGRfZXJyb3IobGluZW5v
LCAiTWlzc2luZyBleHBlY3RhdGlvbnMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfYW5kX2V4cGVjdGF0aW9uKQotICAgICAgICAgICAgZXhwZWN0YXRpb25zID0gTm9uZQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgZXhwZWN0YXRpb25zID0gc2VsZi5fZ2V0X29wdGlvbnNf
bGlzdCh0ZXN0X2FuZF9leHBlY3RhdGlvblsxXSkKLQotICAgICAgICByZXR1cm4gKHRlc3QsIG9w
dGlvbnMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgZm9yIGV4cGVjdGF0aW9uIGluIHNlbGYuX2V4
cGVjdGF0aW9uczoKKyAgICAgICAgICAgIGlmIG5vdCAoZXhwZWN0YXRpb24udmFsaWQgYW5kIGV4
cGVjdGF0aW9uLm5hbWUgaW4gdGVzdHMgYW5kICJyZWJhc2VsaW5lIiBpbiBleHBlY3RhdGlvbi5t
b2RpZmllcnMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZXN0RXhwZWN0YXRpb25T
ZXJpYWxpemVyLnRvX3N0cmluZyhleHBlY3RhdGlvbikpCisgICAgICAgIHJldHVybiAiXG4iLmpv
aW4obGluZXMpCiAKICAgICBkZWYgX2FkZF90b19hbGxfZXhwZWN0YXRpb25zKHNlbGYsIHRlc3Qs
IG9wdGlvbnMsIGV4cGVjdGF0aW9ucyk6CiAgICAgICAgIGlmIG5vdCB0ZXN0IGluIHNlbGYuX2Fs
bF9leHBlY3RhdGlvbnM6CkBAIC00NTQsMjAgKzU0MywxOCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRp
b25zOgogICAgICAgICBzZWxmLl9hbGxfZXhwZWN0YXRpb25zW3Rlc3RdLmFwcGVuZCgKICAgICAg
ICAgICAgIE1vZGlmaWVyc0FuZEV4cGVjdGF0aW9ucyhvcHRpb25zLCBleHBlY3RhdGlvbnMpKQog
Ci0gICAgZGVmIF9yZWFkKHNlbGYsIGV4cGVjdGF0aW9ucywgb3ZlcnJpZGVzX2FsbG93ZWQpOgot
ICAgICAgICAiIiJGb3IgZWFjaCB0ZXN0IGluIGFuIGV4cGVjdGF0aW9ucyBpdGVyYWJsZSwgZ2Vu
ZXJhdGUgdGhlCi0gICAgICAgIGV4cGVjdGF0aW9ucyBmb3IgaXQuIiIiCi0gICAgICAgIGxpbmVu
byA9IDAKLSAgICAgICAgbWF0Y2hlciA9IE1vZGlmaWVyTWF0Y2hlcihzZWxmLl90ZXN0X2NvbmZp
ZykKLSAgICAgICAgZm9yIGxpbmUgaW4gZXhwZWN0YXRpb25zOgotICAgICAgICAgICAgbGluZW5v
ICs9IDEKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfbGluZShsaW5lLCBsaW5lbm8sIG1hdGNo
ZXIsIG92ZXJyaWRlc19hbGxvd2VkKQotCi0gICAgZGVmIF9wcm9jZXNzX2xpbmUoc2VsZiwgbGlu
ZSwgbGluZW5vLCBtYXRjaGVyLCBvdmVycmlkZXNfYWxsb3dlZCk6Ci0gICAgICAgIHRlc3RfbGlz
dF9wYXRoLCBvcHRpb25zLCBleHBlY3RhdGlvbnMgPSBcCi0gICAgICAgICAgICBzZWxmLnBhcnNl
X2V4cGVjdGF0aW9uc19saW5lKGxpbmUsIGxpbmVubykKKyAgICBkZWYgdmFsaWRhdGUoc2VsZiwg
bGluZW5vLCBleHBlY3RhdGlvbiwgc3ludGF4X2Vycm9ycyk6CisgICAgICAgIHRlc3RfbGlzdF9w
YXRoID0gZXhwZWN0YXRpb24ubmFtZQorICAgICAgICBvcHRpb25zID0gZXhwZWN0YXRpb24ubW9k
aWZpZXJzCisgICAgICAgIGV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uLmV4cGVjdGF0aW9ucwor
ICAgICAgICBtYXRjaGVyID0gc2VsZi5fbWF0Y2hlcgorICAgICAgICBvdmVycmlkZXNfYWxsb3dl
ZCA9IHNlbGYuX292ZXJyaWRlc19hbGxvd2VkCisKKyAgICAgICAgZm9yIChtZXNzYWdlLCBzb3Vy
Y2UpIGluIHN5bnRheF9lcnJvcnM6CisgICAgICAgICAgICBzZWxmLl9hZGRfZXJyb3IobGluZW5v
LCBtZXNzYWdlLCBzb3VyY2UpCisKICAgICAgICAgaWYgbm90IGV4cGVjdGF0aW9uczoKLSAgICAg
ICAgICAgIHJldHVybgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgc2VsZi5f
YWRkX3RvX2FsbF9leHBlY3RhdGlvbnModGVzdF9saXN0X3BhdGgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAiLmpvaW4ob3B0aW9ucykudXBwZXIoKSwKQEAgLTQ3
Niw3ICs1NjMsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAgICAgICBudW1fbWF0Y2hl
cyA9IHNlbGYuX2NoZWNrX29wdGlvbnMobWF0Y2hlciwgb3B0aW9ucywgbGluZW5vLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0X3BhdGgpCiAgICAg
ICAgIGlmIG51bV9tYXRjaGVzID09IE1vZGlmaWVyTWF0Y2hlci5OT19NQVRDSDoKLSAgICAgICAg
ICAgIHJldHVybgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgZXhwZWN0YXRp
b25zID0gc2VsZi5fcGFyc2VfZXhwZWN0YXRpb25zKGV4cGVjdGF0aW9ucywgbGluZW5vLAogICAg
ICAgICAgICAgdGVzdF9saXN0X3BhdGgpCkBAIC00ODUsNyArNTcyLDcgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9uczoKICAgICAgICAgICAgIGxpbmVubywgdGVzdF9saXN0X3BhdGgpCiAKICAgICAg
ICAgaWYgc2VsZi5fY2hlY2tfcGF0aF9kb2VzX25vdF9leGlzdChsaW5lbm8sIHRlc3RfbGlzdF9w
YXRoKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAg
ICAgICAgaWYgbm90IHNlbGYuX2Z1bGxfdGVzdF9saXN0OgogICAgICAgICAgICAgdGVzdHMgPSBb
dGVzdF9saXN0X3BhdGhdCkBAIC00OTUsNiArNTgyLDggQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9u
czoKICAgICAgICAgbW9kaWZpZXJzID0gW28gZm9yIG8gaW4gb3B0aW9ucyBpZiBvIGluIHNlbGYu
TU9ESUZJRVJTXQogICAgICAgICBzZWxmLl9hZGRfdGVzdHModGVzdHMsIGV4cGVjdGF0aW9ucywg
dGVzdF9saXN0X3BhdGgsIGxpbmVubywgbW9kaWZpZXJzLCBudW1fbWF0Y2hlcywgb3B0aW9ucywg
b3ZlcnJpZGVzX2FsbG93ZWQpCiAKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIGRlZiBfZ2V0
X29wdGlvbnNfbGlzdChzZWxmLCBsaXN0U3RyaW5nKToKICAgICAgICAgcmV0dXJuIFtwYXJ0LnN0
cmlwKCkubG93ZXIoKSBmb3IgcGFydCBpbiBsaXN0U3RyaW5nLnN0cmlwKCkuc3BsaXQoJyAnKV0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxz
L3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5CmluZGV4IDg4
ODIzZWRmYWM5NzY1Y2YwMDM0ZjBlYTgxMzY4NTBkMjg2MTUzYjMuLmVmMTk2NGZmMWE2NDE5MTMy
MWU2NDE0M2RjODU0YmU5ZjZiZmQwZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3Rh
dGlvbnNfdW5pdHRlc3QucHkKQEAgLTE5NSw3ICsxOTUsNyBAQCBTS0lQIDogZmFpbHVyZXMvZXhw
ZWN0ZWQvaW1hZ2UuaHRtbCIiIikKICAgICAgICAgZXhjZXB0IFBhcnNlRXJyb3IsIGU6CiAgICAg
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5mYXRhbCkKICAgICAgICAgICAgIGV4cF9lcnJvcnMg
PSBbdSJMaW5lOjEgVW5yZWNvZ25pemVkIG9wdGlvbiAnZm9vJyBmYWlsdXJlcy9leHBlY3RlZC90
ZXh0Lmh0bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1IkxpbmU6MiBNaXNzaW5nIGV4
cGVjdGF0aW9ucy4gWycgZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCddIl0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgdSJMaW5lOjIgTWlzc2luZyBleHBlY3RhdGlvbnMgaW4gJ1NLSVAg
OiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sJyJdCiAgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHN0cihlKSwgJ1xuJy5qb2luKG1hcChzdHIsIGV4cF9lcnJvcnMpKSkKICAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJvcnMsIGV4cF9lcnJvcnMpCiAKQEAgLTQ2MSw1ICs0
NjEsMTgxIEBAIGNsYXNzIE1vZGlmaWVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBzZWxmLm1hdGNoKFsnbm9uZSddLCBudW1fZXJyb3JzPTEpCiAKIAorY2xhc3MgVGVzdEV4cGVj
dGF0aW9uUGFyc2VyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2JsYW5r
KHNlbGYpOgorICAgICAgICAoZXhwZWN0YXRpb24sIGVycm9ycykgPSBUZXN0RXhwZWN0YXRpb25Q
YXJzZXIucGFyc2UoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24ubWFs
Zm9ybWVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi52YWxp
ZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24uY29tbWVudCwg
Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMCkKKworICAgIGRl
ZiB0ZXN0X21pc3NpbmdfY29sb24oc2VsZik6CisgICAgICAgIChleHBlY3RhdGlvbiwgZXJyb3Jz
KSA9IFRlc3RFeHBlY3RhdGlvblBhcnNlci5wYXJzZSgnUXV4LicpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXhwZWN0YXRpb24ubWFsZm9ybWVkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGV4cGVjdGF0aW9uLnZhbGlkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChleHBlY3RhdGlvbi5jb21tZW50LCAnUXV4LicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c3RyKGVycm9ycyksICdbKCJNaXNzaW5nIGEgXCc6XCcgaW4iLCAiXCdRdXguXCciKV0nKQorCisg
ICAgZGVmIHRlc3RfZXh0cmFfY29sb24oc2VsZik6CisgICAgICAgIChleHBlY3RhdGlvbiwgZXJy
b3JzKSA9IFRlc3RFeHBlY3RhdGlvblBhcnNlci5wYXJzZSgnRk9PIDogOiBiYXInKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLm1hbGZvcm1lZCwgVHJ1ZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi52YWxpZCwgRmFsc2UpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24uY29tbWVudCwgJ0ZPTyA6IDogYmFyJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3JzKSwgJ1soIkV4dHJhbmVvdXMgXCc6XCcgaW4iLCAi
XCdGT08gOiA6IGJhclwnIildJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X2NvbW1lbnQoc2VsZik6
CisgICAgICAgIChleHBlY3RhdGlvbiwgZXJyb3JzKSA9IFRlc3RFeHBlY3RhdGlvblBhcnNlci5w
YXJzZSgnLy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLm1hbGZvcm1l
ZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24udmFsaWQsIEZh
bHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLmNvbW1lbnQsICcnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3Rf
Y29tbWVudChzZWxmKToKKyAgICAgICAgKGV4cGVjdGF0aW9uLCBlcnJvcnMpID0gVGVzdEV4cGVj
dGF0aW9uUGFyc2VyLnBhcnNlKCcvL1F1eC4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4
cGVjdGF0aW9uLm1hbGZvcm1lZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhw
ZWN0YXRpb24udmFsaWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0
aW9uLmNvbW1lbnQsICdRdXguJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3Jz
KSwgMCkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZXF1YWwoc2VsZik6CisgICAgICAgIChleHBl
Y3RhdGlvbiwgZXJyb3JzKSA9IFRlc3RFeHBlY3RhdGlvblBhcnNlci5wYXJzZSgnRk9PIDogYmFy
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi5tYWxmb3JtZWQsIFRydWUp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24udmFsaWQsIEZhbHNlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLmNvbW1lbnQsICdGT08gOiBiYXInKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvcnMpLCAnWyhcJ01pc3NpbmcgZXhwZWN0
YXRpb25zIGluXCcsICJcJ0ZPTyA6IGJhclwnIildJykKKworICAgIGRlZiB0ZXN0X2V4dHJhX2Vx
dWFsKHNlbGYpOgorICAgICAgICAoZXhwZWN0YXRpb24sIGVycm9ycykgPSBUZXN0RXhwZWN0YXRp
b25QYXJzZXIucGFyc2UoJ0ZPTyA6IGJhciA9IEJBWiA9IFF1eC4nKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGV4cGVjdGF0aW9uLm1hbGZvcm1lZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChleHBlY3RhdGlvbi52YWxpZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZXhwZWN0YXRpb24uY29tbWVudCwgJ0ZPTyA6IGJhciA9IEJBWiA9IFF1eC4nKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvcnMpLCAnWygiRXh0cmFuZW91cyBcJz1cJyBpbiIs
ICJcJ0ZPTyA6IGJhciA9IEJBWiA9IFF1eC5cJyIpXScpCisKKyAgICBkZWYgdGVzdF92YWxpZChz
ZWxmKToKKyAgICAgICAgKGV4cGVjdGF0aW9uLCBlcnJvcnMpID0gVGVzdEV4cGVjdGF0aW9uUGFy
c2VyLnBhcnNlKCdGT08gOiBiYXIgPSBCQVonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4
cGVjdGF0aW9uLm1hbGZvcm1lZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhw
ZWN0YXRpb24udmFsaWQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRp
b24uY29tbWVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwg
MCkKKworICAgIGRlZiB0ZXN0X3ZhbGlkX3dpdGhfY29tbWVudChzZWxmKToKKyAgICAgICAgKGV4
cGVjdGF0aW9uLCBlcnJvcnMpID0gVGVzdEV4cGVjdGF0aW9uUGFyc2VyLnBhcnNlKCdGT08gOiBi
YXIgPSBCQVogLy9RdXguJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi5t
YWxmb3JtZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLnZh
bGlkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLmNvbW1lbnQs
ICdRdXguJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhwZWN0YXRpb24ubW9kaWZp
ZXJzKSwgJ1tcJ2Zvb1wnXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4cGVjdGF0
aW9uLmV4cGVjdGF0aW9ucyksICdbXCdiYXpcJ10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbihlcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3RfdmFsaWRfd2l0aF9tdWx0aXBsZV9tb2Rp
ZmllcnMoc2VsZik6CisgICAgICAgIChleHBlY3RhdGlvbiwgZXJyb3JzKSA9IFRlc3RFeHBlY3Rh
dGlvblBhcnNlci5wYXJzZSgnRk9PMSBGT08yIDogYmFyID0gQkFaIC8vUXV4LicpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24ubWFsZm9ybWVkLCBGYWxzZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi52YWxpZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChleHBlY3RhdGlvbi5jb21tZW50LCAnUXV4LicpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc3RyKGV4cGVjdGF0aW9uLm1vZGlmaWVycyksICdbXCdmb28xXCcsIFwnZm9vMlwn
XScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4cGVjdGF0aW9uLmV4cGVjdGF0aW9u
cyksICdbXCdiYXpcJ10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnJvcnMpLCAw
KQorCisKK2NsYXNzIFRlc3RFeHBlY3RhdGlvblNlcmlhbGl6ZXJUZXN0cyh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIGFzc2VydF9yb3VuZF90cmlwKHNlbGYsIGluX3N0cmluZywgZXhwZWN0
ZWRfc3RyaW5nPU5vbmUpOgorICAgICAgICAoZXhwZWN0YXRpb24sIF8pID0gVGVzdEV4cGVjdGF0
aW9uUGFyc2VyLnBhcnNlKGluX3N0cmluZykKKyAgICAgICAgaWYgZXhwZWN0ZWRfc3RyaW5nIGlz
IE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZF9zdHJpbmcgPSBpbl9zdHJpbmcKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9zdHJpbmcsIFRlc3RFeHBlY3RhdGlvblNlcmlhbGl6
ZXIudG9fc3RyaW5nKGV4cGVjdGF0aW9uKSkKKworICAgIGRlZiBhc3NlcnRfdG9fc3RyaW5nKHNl
bGYsIGV4cGVjdGF0aW9uLCBleHBlY3RlZF9zdHJpbmcpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFRlc3RFeHBlY3RhdGlvblNlcmlhbGl6ZXIudG9fc3RyaW5nKGV4cGVjdGF0aW9uKSwgZXhw
ZWN0ZWRfc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX3NlcmlhbGl6ZXIoc2VsZik6Cisg
ICAgICAgIGV4cGVjdGF0aW9uID0gVGVzdEV4cGVjdGF0aW9uTGluZSgpCisgICAgICAgIHNlbGYu
YXNzZXJ0X3RvX3N0cmluZyhleHBlY3RhdGlvbiwgJycpCisgICAgICAgIGV4cGVjdGF0aW9uLmNv
bW1lbnQgPSAnUXV4LicKKyAgICAgICAgc2VsZi5hc3NlcnRfdG9fc3RyaW5nKGV4cGVjdGF0aW9u
LCAnLy9RdXguJykKKyAgICAgICAgZXhwZWN0YXRpb24ubmFtZSA9ICdiYXInCisgICAgICAgIHNl
bGYuYXNzZXJ0X3RvX3N0cmluZyhleHBlY3RhdGlvbiwgJy8vUXV4LicpCisgICAgICAgIGV4cGVj
dGF0aW9uLnZhbGlkID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydF90b19zdHJpbmcoZXhwZWN0
YXRpb24sICcgOiBiYXIgPSAgLy9RdXguJykKKyAgICAgICAgZXhwZWN0YXRpb24ubW9kaWZpZXJz
ID0gWydmb28nXQorICAgICAgICBzZWxmLmFzc2VydF90b19zdHJpbmcoZXhwZWN0YXRpb24sICdG
T08gOiBiYXIgPSAgLy9RdXguJykKKyAgICAgICAgZXhwZWN0YXRpb24uZXhwZWN0YXRpb25zID0g
WydiQXonXQorICAgICAgICBzZWxmLmFzc2VydF90b19zdHJpbmcoZXhwZWN0YXRpb24sICdGT08g
OiBiYXIgPSBCQVogLy9RdXguJykKKyAgICAgICAgZXhwZWN0YXRpb24uZXhwZWN0YXRpb25zID0g
WydiQXoxJywgJ2JhWjInXQorICAgICAgICBzZWxmLmFzc2VydF90b19zdHJpbmcoZXhwZWN0YXRp
b24sICdGT08gOiBiYXIgPSBCQVoxIEJBWjIgLy9RdXguJykKKyAgICAgICAgZXhwZWN0YXRpb24u
bW9kaWZpZXJzID0gWydmb28xJywgJ2ZvTzInXQorICAgICAgICBzZWxmLmFzc2VydF90b19zdHJp
bmcoZXhwZWN0YXRpb24sICdGT08xIEZPTzIgOiBiYXIgPSBCQVoxIEJBWjIgLy9RdXguJykKKyAg
ICAgICAgZXhwZWN0YXRpb24udmFsaWQgPSBGYWxzZQorICAgICAgICBzZWxmLmFzc2VydF90b19z
dHJpbmcoZXhwZWN0YXRpb24sICcvL1F1eC4nKQorICAgICAgICBleHBlY3RhdGlvbi5tYWxmb3Jt
ZWQgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0X3RvX3N0cmluZyhleHBlY3RhdGlvbiwgJ1F1
eC4nKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfcm91bmRfdHJpcCgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJpcCgn
Rk9PJykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJpcCgnOicpCisgICAgICAgIHNlbGYu
YXNzZXJ0X3JvdW5kX3RyaXAoJ0ZPTyA6JykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJp
cCgnRk9PIDogYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJpcCgnICBGT08gOicp
CisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJyAgICBGT08gOiBiYXInKQorICAgICAg
ICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08gOiBiYXIgPSBCQVonKQorICAgICAgICBzZWxm
LmFzc2VydF9yb3VuZF90cmlwKCdGT08gOiBiYXIgPSBCQVogLy9RdXguJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfcm91bmRfdHJpcCgnRk9PIDogYmFyID0gQkFaIC8vIFF1eC4nKQorICAgICAgICBz
ZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08gOiBiYXIgPSBCQVogLy8gUXV4LiAgICAgJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJpcCgnRk9PIDogYmFyID0gQkFaIC8vICAgICAgICBR
dXguICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08gOiA6IGJhciA9
IEJBWicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJ0ZPTyA6IDogYmFyID0gQkFa
JykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJpcCgnRk9PIDogOiBiYXIgPT09PSBCQVon
KQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCc9JykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfcm91bmRfdHJpcCgnLy8nKQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCcvLyAn
KQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCcvLyBGb28nKQorICAgICAgICBzZWxm
LmFzc2VydF9yb3VuZF90cmlwKCcvLyBGb28nKQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90
cmlwKCcvLyBGb28gOicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJy8vIEZvbyA6
ID0nKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX3doaXRlc3BhY2Vfc3RyaXBwaW5nKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdcbicsICcnKQorICAgICAgICBzZWxmLmFz
c2VydF9yb3VuZF90cmlwKCcgIEZPTyA6IGJhciA9IEJBWicsICdGT08gOiBiYXIgPSBCQVonKQor
ICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08gICAgOiBiYXIgPSBCQVonLCAnRk9P
IDogYmFyID0gQkFaJykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJpcCgnRk9PIDogYmFy
ID0gQkFaICAgICAgIC8vIFF1eC4nLCAnRk9PIDogYmFyID0gQkFaIC8vIFF1eC4nKQorICAgICAg
ICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08gOiBiYXIgPSAgICAgICAgQkFaIC8vIFF1eC4n
LCAnRk9PIDogYmFyID0gQkFaIC8vIFF1eC4nKQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90
cmlwKCdGT08gOiAgICAgICBiYXIgPSAgICBCQVogLy8gUXV4LicsICdGT08gOiBiYXIgPSBCQVog
Ly8gUXV4LicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJ0ZPTyA6ICAgICAgIGJh
ciAgICAgPSAgICBCQVogLy8gUXV4LicsICdGT08gOiBiYXIgPSBCQVogLy8gUXV4LicpCisKKwor
Y2xhc3MgVGVzdFZhbGlkYXRvcjoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNl
bGYubGluZV9udW1iZXJzID0gW10KKworICAgIGRlZiB2YWxpZGF0ZShzZWxmLCBsaW5lX251bWJl
ciwgZXhwZWN0YXRpb24sIGVycm9ycyk6CisgICAgICAgIHNlbGYubGluZV9udW1iZXJzLmFwcGVu
ZChsaW5lX251bWJlcikKKyAgICAgICAgcmV0dXJuIGxpbmVfbnVtYmVyICUgMiA9PSAwCisKKwor
Y2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHRlc3RfbGluZV9udW1iZXJfaW5jcmVtZW50KHNlbGYpOgorICAgICAgICB2YWxpZGF0b3Ig
PSBUZXN0VmFsaWRhdG9yKCkKKyAgICAgICAgZXhwZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0aW9u
c0ZpbGUoKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCcvLyBCYXJcbkZPTyA6IGJhciA9
IEJBWlxuXG4nLCB2YWxpZGF0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbGlk
YXRvci5saW5lX251bWJlcnMpLCAnWzEsIDIsIDMsIDRdJykKKworICAgIGRlZiB0ZXN0X2l0ZXJh
dG9yKHNlbGYpOgorICAgICAgICB2YWxpZGF0b3IgPSBUZXN0VmFsaWRhdG9yKCkKKyAgICAgICAg
ZXhwZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUoKQorICAgICAgICBleHBlY3RhdGlv
bnMuYXBwZW5kKCdcblxuXG5cbicsIHZhbGlkYXRvcikKKyAgICAgICAgbGluZV9udW1iZXIgPSAw
CisgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBleHBlY3RhdGlvbnM6CisgICAgICAgICAgICBs
aW5lX251bWJlciArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZV9udW1iZXIsIDUp
CisKKyAgICBkZWYgdGVzdF92YWxpZGF0b3JfZmVlZGJhY2soc2VsZik6CisgICAgICAgIHZhbGlk
YXRvciA9IFRlc3RWYWxpZGF0b3IoKQorICAgICAgICBleHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0
YXRpb25zRmlsZSgpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0ZPTyA6IGJhcjEgPSBC
QVpcbkZPTyA6IGJhcjIgPSBCQVpcbkZPTyA6IGJhcjMgPSBCQVonLCB2YWxpZGF0b3IpCisgICAg
ICAgIGxpbmVfbnVtYmVyID0gMAorICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gZXhwZWN0YXRp
b25zOgorICAgICAgICAgICAgbGluZV9udW1iZXIgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsaW5lX251bWJlciAlIDIgPT0gMCwgZXhwZWN0YXRpb24udmFsaWQpCisKIGlmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zX3Vu
aXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4
cGVjdGF0aW9uc191bml0dGVzdC5weQppbmRleCAyZjZhZTUyODhkYmMyZmY1ZTg4MTlkMzdlN2Rm
ZGNiYzE3MmRiZjg5Li5hNTM1ZWYxYjBjYzZmZDYwN2RlZTg5YmU2NTY5N2UyYzRmNWE5YzExIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhw
ZWN0YXRpb25zX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkKQEAgLTEyMiw3ICsxMjIsNyBA
QCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
IGRlZiB0ZXN0X2V4cGVjdGF0aW9uX2Vycm9ycyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRf
bGluZXNfbGludCgKICAgICAgICAgICAgIFsibWlzc2luZyBleHBlY3RhdGlvbnMiXSwKLSAgICAg
ICAgICAgICJNaXNzaW5nIGEgJzonIG1pc3NpbmcgZXhwZWN0YXRpb25zICBbdGVzdC9leHBlY3Rh
dGlvbnNdIFs1XSIpCisgICAgICAgICAgICAiTWlzc2luZyBhICc6JyBpbiAnbWlzc2luZyBleHBl
Y3RhdGlvbnMnICBbdGVzdC9leHBlY3RhdGlvbnNdIFs1XSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0
X2xpbmVzX2xpbnQoCiAgICAgICAgICAgICBbIlNMT1cgOiBwYXNzZXMvdGV4dC5odG1sID0gVElN
RU9VVCJdLAogICAgICAgICAgICAgIkEgdGVzdCBjYW4gbm90IGJlIGJvdGggU0xPVyBhbmQgVElN
RU9VVC4gIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100579</attachid>
            <date>2011-07-12 16:10:34 -0700</date>
            <delta_ts>2011-07-13 08:39:18 -0700</delta_ts>
            <desc>Much better.</desc>
            <filename>bug-64386-20110712161033.patch</filename>
            <type>text/plain</type>
            <size>23695</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA4NDIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NDk3MGU0Y2U3MTMyNzI2YjA3ZDg1MWExNTg2OGE5MDc3
ZWZkYzlkLi4xNTg2NzY5YzAwOGJmOTVjYmMwNTk3NWZjYzdjY2FkYjI5MjA5YzdhIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDctMTIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBFeHRyYWN0IG1vZGVsLWxpa2UgVGVzdEV4cGVjdGF0aW9uTGluZSBhbmQgVGVz
dEV4cGVjdGF0aW9uRmlsZSBmcm9tIFRlc3RFeHBlY3RhdGlvbnMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDM4NgorCisgICAgICAgIFRoaXMgaXMg
dGhlIGZpcnN0IHN0ZXAgaW4gY29udmVydGluZyBUZXN0RXhwZWN0YXRpb25zIHRvIGEgcmVhbCBt
b2RlbC4KKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zTGluZSByZXByZXNlbnRzIGEgbGluZSBp
biB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0IGZpbGUsIGFuZAorICAgICAgICAqIFRlc3RFeHBl
Y3RhdGlvbnNGaWxlIHJlcHJlc2VudHMgdGhlIGZpbGUsIHdoaWNoIGlzIGEgY29sbGVjdGlvbiBv
ZiBsaW5lcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9u
cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVz
dF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weToKKwogMjAxMS0wNy0x
MiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIHNoZXJpZmZib3Qg
Y2FuJ3QgcGVyZm9ybSByb2xsb3V0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4
IGQ1YWIwYWRhMGEzZDk2M2E1MjczMWQwZWJhZTk5NWJhMTBjMjAxMDQuLjI3ODE3NjU4MjAzOWI1
NWYwNDBjZWFkZTBhMTY5MWUwOTc5MmQyOWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMu
cHkKQEAgLTg4LDYgKzg4LDcgQEAgZGVmIGhhc19waXhlbF9mYWlsdXJlcyhhY3R1YWxfcmVzdWx0
cyk6CiAgICAgcmV0dXJuIElNQUdFIGluIGFjdHVhbF9yZXN1bHRzIG9yIElNQUdFX1BMVVNfVEVY
VCBpbiBhY3R1YWxfcmVzdWx0cwogCiAKKyMgRklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vIGxvbmdl
ciB1c2VkIGhlcmUgaW4gdGhpcyBtb2R1bGUuIFJlbW92ZSByZW1haW5pbmcgY2FsbHNpdGUgaW4g
bWFuYWdlci5weSBhbmQgdGhpcyBtZXRob2QuCiBkZWYgc3RyaXBfY29tbWVudHMobGluZSk6CiAg
ICAgIiIiU3RyaXBzIGNvbW1lbnRzIGZyb20gYSBsaW5lIGFuZCByZXR1cm4gTm9uZSBpZiB0aGUg
bGluZSBpcyBlbXB0eQogICAgIG9yIGVsc2UgdGhlIGNvbnRlbnRzIG9mIGxpbmUgd2l0aCBsZWFk
aW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgcmVtb3ZlZApAQCAtMTM3LDYgKzEzOCwxMzEgQEAgY2xh
c3MgRXhwZWN0YXRpb25zSnNvbkVuY29kZXIoc2ltcGxlanNvbi5KU09ORW5jb2Rlcik6CiAgICAg
ICAgICAgICAgICAgImV4cGVjdGF0aW9ucyI6IG9iai5leHBlY3RhdGlvbnN9CiAKIAorY2xhc3Mg
VGVzdEV4cGVjdGF0aW9uU2VyaWFsaXplcjoKKyAgICAiIiJQcm92aWRlcyBtZWFucyBvZiBzZXJp
YWxpemluZyBUZXN0RXhwZWN0YXRpb25MaW5lIGluc3RhbmNlcy4iIiIKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgdG9fc3RyaW5nKGNscywgZXhwZWN0YXRpb24pOgorICAgICAgICByZXN1bHQg
PSBbXQorICAgICAgICBpZiBleHBlY3RhdGlvbi5tYWxmb3JtZWQ6CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGV4cGVjdGF0aW9uLmNvbW1lbnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBpZiBleHBlY3RhdGlvbi5uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgZXhwZWN0
YXRpb24uY29tbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnLy8nKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGV4cGVjdGF0aW9u
LmNvbW1lbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIiVzIDogJXMgPSAlcyIgJSAoIiAiLmpvaW4oZXhwZWN0YXRpb24ubW9kaWZpZXJzKS51cHBl
cigpLCBleHBlY3RhdGlvbi5uYW1lLCAiICIuam9pbihleHBlY3RhdGlvbi5leHBlY3RhdGlvbnMp
LnVwcGVyKCkpKQorICAgICAgICAgICAgICAgIGlmIGV4cGVjdGF0aW9uLmNvbW1lbnQgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAvLyVzIiAlIChleHBl
Y3RhdGlvbi5jb21tZW50KSkKKworICAgICAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCisKKwor
Y2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2VyOgorICAgICIiIlByb3ZpZGVzIHBhcnNpbmcgZmFj
aWxpdGllcyBmb3IgbGluZXMgaW4gdGhlIHRlc3RfZXhwZWN0YXRpb24udHh0IGZpbGUuIiIiCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2UoY2xzLCBleHBlY3RhdGlvbl9zdHJpbmcp
OgorICAgICAgICAiIiJQYXJzZXMgYSBsaW5lIGZyb20gdGVzdF9leHBlY3RhdGlvbnMudHh0IGFu
ZCByZXR1cm5zIGEgdHVwbGUsIGNvbnRhaW5pbmcgYSBUZXN0RXhwZWN0YXRpb25MaW5lIGluc3Rh
bmNlCisgICAgICAgIGFuZCBhIGxpc3Qgc3ludGF4IGVycm9zLCBpZiBhbnkuCisKKyAgICAgICAg
VGhlIGZvcm1hdCBvZiB0ZXN0IGV4cGVjdGF0aW9uIGlzOgorCisgICAgICAgIFtbPG1vZGlmaWVy
cz5dIDogPG5hbWU+ID0gPGV4cGVjdGF0aW9ucz5dWyAvLzxjb21tZW50Pl0KKworICAgICAgICBB
bnkgZXJyYW50IHdoaXRlc3BhY2UgaXMgbm90IHByZXNlcnZlZC4KKworICAgICAgICAiIiIKKyAg
ICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9uTGluZSgpCisgICAgICAgIGVycm9ycyA9IFtd
CisgICAgICAgIChtb2RpZmllcnMsIG5hbWUsIGV4cGVjdGF0aW9ucywgY29tbWVudCkgPSBjbHMu
X3NwbGl0X2V4cGVjdGF0aW9uX3N0cmluZyhleHBlY3RhdGlvbl9zdHJpbmcsIGVycm9ycykKKyAg
ICAgICAgaWYgbGVuKGVycm9ycykgPiAwOgorICAgICAgICAgICAgcmVzdWx0Lm1hbGZvcm1lZCA9
IFRydWUKKyAgICAgICAgICAgIHJlc3VsdC5jb21tZW50ID0gZXhwZWN0YXRpb25fc3RyaW5nCisg
ICAgICAgICAgICByZXN1bHQudmFsaWQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmVzdWx0Lm1hbGZvcm1lZCA9IEZhbHNlCisgICAgICAgICAgICByZXN1bHQuY29tbWVudCA9
IGNvbW1lbnQKKyAgICAgICAgICAgIHJlc3VsdC52YWxpZCA9IFRydWUKKyAgICAgICAgICAgIHJl
c3VsdC5uYW1lID0gbmFtZQorICAgICAgICAgICAgIyBGSVhNRTogTW9kaWZpZXJzIHNob3VsZCBi
ZSBpdHMgb3duIGNsYXNzIGV2ZW50dWFsbHkuCisgICAgICAgICAgICBpZiBtb2RpZmllcnMgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1vZGlmaWVycyA9IGNscy5fc3BsaXRf
c3BhY2Vfc2VwYXJhdGVkKG1vZGlmaWVycykKKyAgICAgICAgICAgICMgRklYTUU6IEV4cGVjdGF0
aW9ucyBzaG91bGQgYmUgaXRzIG93biBjbGFzcyBldmVudHVhbGx5LgorICAgICAgICAgICAgaWYg
ZXhwZWN0YXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdC5leHBlY3Rh
dGlvbnMgPSBjbHMuX3NwbGl0X3NwYWNlX3NlcGFyYXRlZChleHBlY3RhdGlvbnMpCisKKyAgICAg
ICAgcmV0dXJuIChyZXN1bHQsIGVycm9ycykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBf
c3BsaXRfZXhwZWN0YXRpb25fc3RyaW5nKGNscywgbGluZSwgZXJyb3JzKToKKyAgICAgICAgIiIi
U3BsaXRzIGxpbmUgaW50byBhIHN0cmluZyBvZiBtb2RpZmllcnMsIGEgdGVzdCBuYW1lLCBhIHN0
cmluZyBvZiBleHBlY3RhdGlvbnMsIGFuZCBhIGNvbW1lbnQsCisgICAgICAgIHJldHVybmluZyB0
aGVtIGFzIGEgdHVwbGUuIEluIGNhc2UgcGFyc2luZyBlcnJvciwgcmV0dXJucyBlbXB0eSB0dXBs
ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1lbnRfaW5kZXggPSBsaW5lLmZpbmQoIi8vIikK
KyAgICAgICAgY29tbWVudCA9ICcnCisgICAgICAgIGlmIGNvbW1lbnRfaW5kZXggPT0gLTE6Cisg
ICAgICAgICAgICBjb21tZW50X2luZGV4ID0gbGVuKGxpbmUpCisgICAgICAgICAgICBjb21tZW50
ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWVudCA9IGxpbmVbY29tbWVu
dF9pbmRleCArIDI6XQorCisgICAgICAgIGxpbmUgPSByZS5zdWIociJccysiLCAiICIsIGxpbmVb
OmNvbW1lbnRfaW5kZXhdLnN0cmlwKCkpCisgICAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgorICAg
ICAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBOb25lLCBjb21tZW50KQorCisgICAgICAgIHBh
cnRzID0gbGluZS5zcGxpdCgnOicpCisgICAgICAgIGlmIGxlbihwYXJ0cykgIT0gMjoKKyAgICAg
ICAgICAgIGVycm9ycy5hcHBlbmQoKCJNaXNzaW5nIGEgJzonIGluIiBpZiBsZW4ocGFydHMpIDwg
MiBlbHNlICJFeHRyYW5lb3VzICc6JyBpbiIsICInIiArIGxpbmUgKyAiJyIpKQorICAgICAgICAg
ICAgcmV0dXJuIChOb25lLCBOb25lLCBOb25lLCBOb25lKQorCisgICAgICAgIHRlc3RfYW5kX2V4
cGVjdGF0aW9uID0gcGFydHNbMV0uc3BsaXQoJz0nKQorICAgICAgICBpZiBsZW4odGVzdF9hbmRf
ZXhwZWN0YXRpb24pICE9IDI6CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCgiTWlzc2luZyBl
eHBlY3RhdGlvbnMgaW4iIGlmIGxlbih0ZXN0X2FuZF9leHBlY3RhdGlvbikgPCAyIGVsc2UgIkV4
dHJhbmVvdXMgJz0nIGluIiwgIiciICsgbGluZSArICInIikpCisgICAgICAgICAgICByZXR1cm4g
KE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgcmV0dXJuIChwYXJ0c1swXS5zdHJp
cCgpLCB0ZXN0X2FuZF9leHBlY3RhdGlvblswXS5zdHJpcCgpLCB0ZXN0X2FuZF9leHBlY3RhdGlv
blsxXS5zdHJpcCgpLCBjb21tZW50KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zcGxp
dF9zcGFjZV9zZXBhcmF0ZWQoY2xzLCBzcGFjZV9zZXBhcmF0ZWRfc3RyaW5nKToKKyAgICAgICAg
IiIiU3BsaXRzIGEgc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBpbnRvIGFuIGFycmF5LiIiIgorICAg
ICAgICAjIEZJWE1FOiBMb3dlci1jYXNpbmcgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgbGVnYWN5
IGNvZGUuIE5lZWQgdG8gZWxpbWluYXRlLgorICAgICAgICByZXR1cm4gW3BhcnQuc3RyaXAoKS5s
b3dlcigpIGZvciBwYXJ0IGluIHNwYWNlX3NlcGFyYXRlZF9zdHJpbmcuc3RyaXAoKS5zcGxpdCgn
ICcpXQorCisKK2NsYXNzIFRlc3RFeHBlY3RhdGlvbkxpbmU6CisgICAgIiIiUmVwcmVzZW50cyBh
IGxpbmUgaW4gdGVzdCBleHBlY3RhdGlvbnMgZmlsZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBibGFuay1saW5lIGVxdWl2YWxlbnQgb2Yg
YW4gZXhwZWN0YXRpb24uIiIiCisgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5tb2RpZmllcnMgPSBbXQorICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IFtdCisgICAgICAg
IHNlbGYuY29tbWVudCA9IE5vbmUKKyAgICAgICAgIyBGSVhNRTogU2hvdWxkIHZhbGlkIGFuZCBt
YWxmb3JtZWQgYmUgYSBzaW5nbGUgc3RhdGUgZmxhZz8gUHJvYmFibHkgbm90LCBzaW5jZSAibWFs
Zm9ybWVkIiBpcyBhbHNvICJub3QgdmFsaWQiLgorICAgICAgICBzZWxmLnZhbGlkID0gRmFsc2UK
KyAgICAgICAgc2VsZi5tYWxmb3JtZWQgPSBGYWxzZQorCisKK2NsYXNzIFRlc3RFeHBlY3RhdGlv
bnNGaWxlOgorICAgICIiIlJlcHJlc2VudHMgYSB0ZXN0IGV4cGVjdGF0aW9uIGZpbGUsIHdoaWNo
IGlzIGEgbXV0YWJsZSBjb2xsZWN0aW9uIG9mIGNvbW1lbnRzIGFuZCB0ZXN0IGV4cGVjdGF0aW9u
cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fZXhwZWN0YXRp
b25zID0gW10KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2V4cGVjdGF0aW9ucy5fX2l0ZXJfXygpCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIGV4cGVjdGF0
aW9uc19zdHJpbmcsIHZhbGlkYXRvcik6CisgICAgICAgICIiIkFkZCBhIFRlc3RFeHBlY3RhdGlv
bkxpbmUgZm9yIGVhY2ggaXRlbSBpbiBleHBlY3RhdGlvbnNfc3RyaW5nLiIiIgorICAgICAgICBs
aW5lX251bWJlciA9IDAKKyAgICAgICAgZm9yIGxpbmUgaW4gZXhwZWN0YXRpb25zX3N0cmluZy5z
cGxpdCgiXG4iKToKKyAgICAgICAgICAgIChleHBlY3RhdGlvbiwgZXJyb3JzKSA9IFRlc3RFeHBl
Y3RhdGlvblBhcnNlci5wYXJzZShsaW5lKQorICAgICAgICAgICAgbGluZV9udW1iZXIgKz0gMQor
ICAgICAgICAgICAgZXhwZWN0YXRpb24udmFsaWQgPSB2YWxpZGF0b3IudmFsaWRhdGUobGluZV9u
dW1iZXIsIGV4cGVjdGF0aW9uLCBlcnJvcnMpCisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlv
bnMuYXBwZW5kKGV4cGVjdGF0aW9uKQorCisKIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAg
IiIiVGVzdCBleHBlY3RhdGlvbnMgY29uc2lzdCBvZiBsaW5lcyB3aXRoIHNwZWNpZmljYXRpb25z
IG9mIHdoYXQKICAgICB0byBleHBlY3QgZnJvbSBsYXlvdXQgdGVzdCBjYXNlcy4gVGhlIHRlc3Qg
Y2FzZXMgY2FuIGJlIGRpcmVjdG9yaWVzCkBAIC0yNDAsNyArMzY2LDYgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9uczoKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAg
ICAgIHNlbGYuX2ZzID0gcG9ydC5fZmlsZXN5c3RlbQotICAgICAgICBzZWxmLl9leHBlY3RhdGlv
bnMgPSBleHBlY3RhdGlvbnMKICAgICAgICAgc2VsZi5fZnVsbF90ZXN0X2xpc3QgPSB0ZXN0cwog
ICAgICAgICBzZWxmLl90ZXN0X2NvbmZpZyA9IHRlc3RfY29uZmlnCiAgICAgICAgIHNlbGYuX2lz
X2xpbnRfbW9kZSA9IGlzX2xpbnRfbW9kZQpAQCAtMjc0LDggKzM5OSwxMCBAQCBjbGFzcyBUZXN0
RXhwZWN0YXRpb25zOgogICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0cyA9IHNlbGYuX2Rp
Y3Rfb2Zfc2V0cyhzZWxmLlRJTUVMSU5FUykKICAgICAgICAgc2VsZi5fcmVzdWx0X3R5cGVfdG9f
dGVzdHMgPSBzZWxmLl9kaWN0X29mX3NldHMoc2VsZi5SRVNVTFRfVFlQRVMpCiAKLSAgICAgICAg
c2VsZi5fcmVhZChzZWxmLl9nZXRfaXRlcmFibGVfZXhwZWN0YXRpb25zKHNlbGYuX2V4cGVjdGF0
aW9ucyksCi0gICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzX2FsbG93ZWQ9RmFsc2UpCisgICAg
ICAgIHNlbGYuX21hdGNoZXIgPSBNb2RpZmllck1hdGNoZXIoc2VsZi5fdGVzdF9jb25maWcpCisg
ICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlKCkKKyAgICAg
ICAgc2VsZi5fb3ZlcnJpZGVzX2FsbG93ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9leHBlY3Rh
dGlvbnMuYXBwZW5kKGV4cGVjdGF0aW9ucywgc2VsZikKIAogICAgICAgICAjIExpc3Qgb2YgdGVz
dHMgdGhhdCBhcmUgaW4gdGhlIG92ZXJyaWRlcyBmaWxlICh1c2VkIGZvciBjaGVja2luZyBmb3IK
ICAgICAgICAgIyBkdXBsaWNhdGVzIGluc2lkZSB0aGUgb3ZlcnJpZGVzIGZpbGUgaXRzZWxmKS4g
Tm90ZSB0aGF0IGp1c3QgYmVjYXVzZQpAQCAtMjg1LDggKzQxMiw5IEBAIGNsYXNzIFRlc3RFeHBl
Y3RhdGlvbnM6CiAgICAgICAgIHNlbGYuX292ZXJyaWRkaW5nX3Rlc3RzID0gc2V0KCkKIAogICAg
ICAgICBpZiBvdmVycmlkZXM6Ci0gICAgICAgICAgICBzZWxmLl9yZWFkKHNlbGYuX2dldF9pdGVy
YWJsZV9leHBlY3RhdGlvbnMoc2VsZi5fb3ZlcnJpZGVzKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgb3ZlcnJpZGVzX2FsbG93ZWQ9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX292ZXJyaWRlc19h
bGxvd2VkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLmFwcGVuZChzZWxm
Ll9vdmVycmlkZXMsIHNlbGYpCisgICAgICAgICAgICBzZWxmLl9vdmVycmlkZXNfYWxsb3dlZCA9
IEZhbHNlCiAKICAgICAgICAgc2VsZi5faGFuZGxlX2FueV9yZWFkX2Vycm9ycygpCiAgICAgICAg
IHNlbGYuX3Byb2Nlc3NfdGVzdHNfd2l0aG91dF9leHBlY3RhdGlvbnMoKQpAQCAtMzYyLDE3ICs0
OTAsNiBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAgICAgICAgICAgZFtjXSA9IHNldCgp
CiAgICAgICAgIHJldHVybiBkCiAKLSAgICBkZWYgX2dldF9pdGVyYWJsZV9leHBlY3RhdGlvbnMo
c2VsZiwgZXhwZWN0YXRpb25zX3N0cik6Ci0gICAgICAgICIiIlJldHVybnMgYW4gb2JqZWN0IHRo
YXQgY2FuIGJlIGl0ZXJhdGVkIG92ZXIuIEFsbG93cyBmb3Igbm90IGNhcmluZwotICAgICAgICBh
Ym91dCB3aGV0aGVyIHdlJ3JlIGl0ZXJhdGluZyBvdmVyIGEgZmlsZSBvciBhIG5ldy1saW5lIHNl
cGFyYXRlZAotICAgICAgICBzdHJpbmcuIiIiCi0gICAgICAgIGl0ZXJhYmxlID0gW3ggKyAiXG4i
IGZvciB4IGluIGV4cGVjdGF0aW9uc19zdHIuc3BsaXQoIlxuIildCi0gICAgICAgICMgU3RyaXAg
ZmluYWwgZW50cnkgaWYgaXQncyBlbXB0eSB0byBhdm9pZCBhZGRlZCBpbiBhbiBleHRyYQotICAg
ICAgICAjIG5ld2xpbmUuCi0gICAgICAgIGlmIGl0ZXJhYmxlWy0xXSA9PSAiXG4iOgotICAgICAg
ICAgICAgcmV0dXJuIGl0ZXJhYmxlWzotMV0KLSAgICAgICAgcmV0dXJuIGl0ZXJhYmxlCi0KICAg
ICBkZWYgZ2V0X3Rlc3Rfc2V0KHNlbGYsIG1vZGlmaWVyLCBleHBlY3RhdGlvbj1Ob25lLCBpbmNs
dWRlX3NraXBzPVRydWUpOgogICAgICAgICBpZiBleHBlY3RhdGlvbiBpcyBOb25lOgogICAgICAg
ICAgICAgdGVzdHMgPSBzZWxmLl9tb2RpZmllcl90b190ZXN0c1ttb2RpZmllcl0KQEAgLTQxNCwz
OSArNTMxLDEwIEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgZGVmIHJlbW92ZV9yZWJh
c2VsaW5lZF90ZXN0cyhzZWxmLCB0ZXN0cyk6CiAgICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9m
IHRoZSBleHBlY3RhdGlvbnMgd2l0aCB0aGUgdGVzdHMgcmVtb3ZlZC4iIiIKICAgICAgICAgbGlu
ZXMgPSBbXQotICAgICAgICBmb3IgKGxpbmVubywgbGluZSkgaW4gZW51bWVyYXRlKHNlbGYuX2dl
dF9pdGVyYWJsZV9leHBlY3RhdGlvbnMoc2VsZi5fZXhwZWN0YXRpb25zKSk6Ci0gICAgICAgICAg
ICB0ZXN0LCBvcHRpb25zLCBfID0gc2VsZi5wYXJzZV9leHBlY3RhdGlvbnNfbGluZShsaW5lLCBs
aW5lbm8pCi0gICAgICAgICAgICBpZiBub3QgKHRlc3QgYW5kIHRlc3QgaW4gdGVzdHMgYW5kICdy
ZWJhc2VsaW5lJyBpbiBvcHRpb25zKToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGlu
ZSkKLSAgICAgICAgcmV0dXJuICcnLmpvaW4obGluZXMpCi0KLSAgICBkZWYgcGFyc2VfZXhwZWN0
YXRpb25zX2xpbmUoc2VsZiwgbGluZSwgbGluZW5vKToKLSAgICAgICAgIiIiUGFyc2VzIGEgbGlu
ZSBmcm9tIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBhbmQgcmV0dXJucyBhIHR1cGxlCi0gICAgICAg
IHdpdGggdGhlIHRlc3QgcGF0aCwgb3B0aW9ucyBhcyBhIGxpc3QsIGV4cGVjdGF0aW9ucyBhcyBh
IGxpc3QuIiIiCi0gICAgICAgIGxpbmUgPSBzdHJpcF9jb21tZW50cyhsaW5lKQotICAgICAgICBp
ZiBub3QgbGluZToKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKLQotICAg
ICAgICBvcHRpb25zID0gW10KLSAgICAgICAgaWYgbGluZS5maW5kKCI6IikgaXMgLTE6Ci0gICAg
ICAgICAgICBzZWxmLl9hZGRfZXJyb3IobGluZW5vLCAiTWlzc2luZyBhICc6JyIsIGxpbmUpCi0g
ICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUsIE5vbmUpCi0KLSAgICAgICAgcGFydHMgPSBs
aW5lLnNwbGl0KCc6JykKLQotICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBl
eGFjdGx5IG9uZSBjb2xvbiBpbiB0aGUgbGluZS4KLQotICAgICAgICBvcHRpb25zID0gc2VsZi5f
Z2V0X29wdGlvbnNfbGlzdChwYXJ0c1swXSkKLSAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRpb24g
PSBwYXJ0c1sxXS5zcGxpdCgnPScpCi0gICAgICAgIHRlc3QgPSB0ZXN0X2FuZF9leHBlY3RhdGlv
blswXS5zdHJpcCgpCi0gICAgICAgIGlmIChsZW4odGVzdF9hbmRfZXhwZWN0YXRpb24pIGlzIG5v
dCAyKToKLSAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sICJNaXNzaW5nIGV4cGVj
dGF0aW9ucy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hbmRfZXhwZWN0YXRp
b24pCi0gICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9nZXRfb3B0aW9uc19saXN0KHRlc3RfYW5kX2V4
cGVjdGF0aW9uWzFdKQotCi0gICAgICAgIHJldHVybiAodGVzdCwgb3B0aW9ucywgZXhwZWN0YXRp
b25zKQorICAgICAgICBmb3IgZXhwZWN0YXRpb24gaW4gc2VsZi5fZXhwZWN0YXRpb25zOgorICAg
ICAgICAgICAgaWYgbm90IChleHBlY3RhdGlvbi52YWxpZCBhbmQgZXhwZWN0YXRpb24ubmFtZSBp
biB0ZXN0cyBhbmQgInJlYmFzZWxpbmUiIGluIGV4cGVjdGF0aW9uLm1vZGlmaWVycyk6CisgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlc3RFeHBlY3RhdGlvblNlcmlhbGl6ZXIudG9fc3Ry
aW5nKGV4cGVjdGF0aW9uKSkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKIAogICAg
IGRlZiBfYWRkX3RvX2FsbF9leHBlY3RhdGlvbnMoc2VsZiwgdGVzdCwgb3B0aW9ucywgZXhwZWN0
YXRpb25zKToKICAgICAgICAgaWYgbm90IHRlc3QgaW4gc2VsZi5fYWxsX2V4cGVjdGF0aW9uczoK
QEAgLTQ1NCwyMCArNTQyLDE4IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgICAgIHNl
bGYuX2FsbF9leHBlY3RhdGlvbnNbdGVzdF0uYXBwZW5kKAogICAgICAgICAgICAgTW9kaWZpZXJz
QW5kRXhwZWN0YXRpb25zKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykpCiAKLSAgICBkZWYgX3JlYWQo
c2VsZiwgZXhwZWN0YXRpb25zLCBvdmVycmlkZXNfYWxsb3dlZCk6Ci0gICAgICAgICIiIkZvciBl
YWNoIHRlc3QgaW4gYW4gZXhwZWN0YXRpb25zIGl0ZXJhYmxlLCBnZW5lcmF0ZSB0aGUKLSAgICAg
ICAgZXhwZWN0YXRpb25zIGZvciBpdC4iIiIKLSAgICAgICAgbGluZW5vID0gMAotICAgICAgICBt
YXRjaGVyID0gTW9kaWZpZXJNYXRjaGVyKHNlbGYuX3Rlc3RfY29uZmlnKQotICAgICAgICBmb3Ig
bGluZSBpbiBleHBlY3RhdGlvbnM6Ci0gICAgICAgICAgICBsaW5lbm8gKz0gMQotICAgICAgICAg
ICAgc2VsZi5fcHJvY2Vzc19saW5lKGxpbmUsIGxpbmVubywgbWF0Y2hlciwgb3ZlcnJpZGVzX2Fs
bG93ZWQpCi0KLSAgICBkZWYgX3Byb2Nlc3NfbGluZShzZWxmLCBsaW5lLCBsaW5lbm8sIG1hdGNo
ZXIsIG92ZXJyaWRlc19hbGxvd2VkKToKLSAgICAgICAgdGVzdF9saXN0X3BhdGgsIG9wdGlvbnMs
IGV4cGVjdGF0aW9ucyA9IFwKLSAgICAgICAgICAgIHNlbGYucGFyc2VfZXhwZWN0YXRpb25zX2xp
bmUobGluZSwgbGluZW5vKQorICAgIGRlZiB2YWxpZGF0ZShzZWxmLCBsaW5lbm8sIGV4cGVjdGF0
aW9uLCBzeW50YXhfZXJyb3JzKToKKyAgICAgICAgdGVzdF9saXN0X3BhdGggPSBleHBlY3RhdGlv
bi5uYW1lCisgICAgICAgIG9wdGlvbnMgPSBleHBlY3RhdGlvbi5tb2RpZmllcnMKKyAgICAgICAg
ZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb24uZXhwZWN0YXRpb25zCisgICAgICAgIG1hdGNoZXIg
PSBzZWxmLl9tYXRjaGVyCisgICAgICAgIG92ZXJyaWRlc19hbGxvd2VkID0gc2VsZi5fb3ZlcnJp
ZGVzX2FsbG93ZWQKKworICAgICAgICBmb3IgKG1lc3NhZ2UsIHNvdXJjZSkgaW4gc3ludGF4X2Vy
cm9yczoKKyAgICAgICAgICAgIHNlbGYuX2FkZF9lcnJvcihsaW5lbm8sIG1lc3NhZ2UsIHNvdXJj
ZSkKKwogICAgICAgICBpZiBub3QgZXhwZWN0YXRpb25zOgotICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBzZWxmLl9hZGRfdG9fYWxsX2V4cGVj
dGF0aW9ucyh0ZXN0X2xpc3RfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICIuam9pbihvcHRpb25zKS51cHBlcigpLApAQCAtNDc2LDcgKzU2Miw3IEBAIGNs
YXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgICAgIG51bV9tYXRjaGVzID0gc2VsZi5fY2hlY2tf
b3B0aW9ucyhtYXRjaGVyLCBvcHRpb25zLCBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKICAgICAgICAgaWYgbnVtX21hdGNo
ZXMgPT0gTW9kaWZpZXJNYXRjaGVyLk5PX01BVENIOgotICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9wYXJz
ZV9leHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zLCBsaW5lbm8sCiAgICAgICAgICAgICB0ZXN0X2xp
c3RfcGF0aCkKQEAgLTQ4NSw3ICs1NzEsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAg
ICAgICAgICAgbGluZW5vLCB0ZXN0X2xpc3RfcGF0aCkKIAogICAgICAgICBpZiBzZWxmLl9jaGVj
a19wYXRoX2RvZXNfbm90X2V4aXN0KGxpbmVubywgdGVzdF9saXN0X3BhdGgpOgotICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBpZiBub3Qgc2Vs
Zi5fZnVsbF90ZXN0X2xpc3Q6CiAgICAgICAgICAgICB0ZXN0cyA9IFt0ZXN0X2xpc3RfcGF0aF0K
QEAgLTQ5NSw2ICs1ODEsOCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zOgogICAgICAgICBtb2Rp
ZmllcnMgPSBbbyBmb3IgbyBpbiBvcHRpb25zIGlmIG8gaW4gc2VsZi5NT0RJRklFUlNdCiAgICAg
ICAgIHNlbGYuX2FkZF90ZXN0cyh0ZXN0cywgZXhwZWN0YXRpb25zLCB0ZXN0X2xpc3RfcGF0aCwg
bGluZW5vLCBtb2RpZmllcnMsIG51bV9tYXRjaGVzLCBvcHRpb25zLCBvdmVycmlkZXNfYWxsb3dl
ZCkKIAorICAgICAgICByZXR1cm4gVHJ1ZQorCiAgICAgZGVmIF9nZXRfb3B0aW9uc19saXN0KHNl
bGYsIGxpc3RTdHJpbmcpOgogICAgICAgICByZXR1cm4gW3BhcnQuc3RyaXAoKS5sb3dlcigpIGZv
ciBwYXJ0IGluIGxpc3RTdHJpbmcuc3RyaXAoKS5zcGxpdCgnICcpXQogCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlv
bnNfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2Rl
bHMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkKaW5kZXggODg4MjNlZGZhYzk3NjVjZjAw
MzRmMGVhODEzNjg1MGQyODYxNTNiMy4uMjhhZDEzMWFjYzlhNTRiYTc5NTUyYTIzOWM4NWI5NjAx
YmZiYjlkOSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5w
eQpAQCAtMTk1LDcgKzE5NSw3IEBAIFNLSVAgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1s
IiIiKQogICAgICAgICBleGNlcHQgUGFyc2VFcnJvciwgZToKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShlLmZhdGFsKQogICAgICAgICAgICAgZXhwX2Vycm9ycyA9IFt1IkxpbmU6MSBVbnJl
Y29nbml6ZWQgb3B0aW9uICdmb28nIGZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHUiTGluZToyIE1pc3NpbmcgZXhwZWN0YXRpb25zLiBbJyBm
YWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sJ10iXQorICAgICAgICAgICAgICAgICAgICAgICAg
ICB1IkxpbmU6MiBNaXNzaW5nIGV4cGVjdGF0aW9ucyBpbiAnU0tJUCA6IGZhaWx1cmVzL2V4cGVj
dGVkL2ltYWdlLmh0bWwnIl0KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAn
XG4nLmpvaW4obWFwKHN0ciwgZXhwX2Vycm9ycykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChlLmVycm9ycywgZXhwX2Vycm9ycykKIApAQCAtNDYxLDUgKzQ2MSwxNzcgQEAgY2xhc3Mg
TW9kaWZpZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYubWF0Y2goWydu
b25lJ10sIG51bV9lcnJvcnM9MSkKIAogCitjbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXJUZXN0
cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmxhbmsoc2VsZik6CisgICAgICAg
IChleHBlY3RhdGlvbiwgZXJyb3JzKSA9IFRlc3RFeHBlY3RhdGlvblBhcnNlci5wYXJzZSgnJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi5tYWxmb3JtZWQsIEZhbHNlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLnZhbGlkLCBUcnVlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLmNvbW1lbnQsIE5vbmUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobGVuKGVycm9ycyksIDApCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2Nv
bG9uKHNlbGYpOgorICAgICAgICAoZXhwZWN0YXRpb24sIGVycm9ycykgPSBUZXN0RXhwZWN0YXRp
b25QYXJzZXIucGFyc2UoJ1F1eC4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0
aW9uLm1hbGZvcm1lZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlv
bi52YWxpZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24uY29t
bWVudCwgJ1F1eC4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvcnMpLCAnWygi
TWlzc2luZyBhIFwnOlwnIGluIiwgIlwnUXV4LlwnIildJykKKworICAgIGRlZiB0ZXN0X2V4dHJh
X2NvbG9uKHNlbGYpOgorICAgICAgICAoZXhwZWN0YXRpb24sIGVycm9ycykgPSBUZXN0RXhwZWN0
YXRpb25QYXJzZXIucGFyc2UoJ0ZPTyA6IDogYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChleHBlY3RhdGlvbi5tYWxmb3JtZWQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZXhwZWN0YXRpb24udmFsaWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVj
dGF0aW9uLmNvbW1lbnQsICdGT08gOiA6IGJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c3RyKGVycm9ycyksICdbKCJFeHRyYW5lb3VzIFwnOlwnIGluIiwgIlwnRk9PIDogOiBiYXJcJyIp
XScpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9jb21tZW50KHNlbGYpOgorICAgICAgICAoZXhwZWN0
YXRpb24sIGVycm9ycykgPSBUZXN0RXhwZWN0YXRpb25QYXJzZXIucGFyc2UoJy8vJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi5tYWxmb3JtZWQsIEZhbHNlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLnZhbGlkLCBUcnVlKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLmNvbW1lbnQsICcnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGxlbihlcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3RfY29tbWVudChzZWxmKToKKyAg
ICAgICAgKGV4cGVjdGF0aW9uLCBlcnJvcnMpID0gVGVzdEV4cGVjdGF0aW9uUGFyc2VyLnBhcnNl
KCcvL1F1eC4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLm1hbGZvcm1l
ZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24udmFsaWQsIFRy
dWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24uY29tbWVudCwgJ1F1eC4n
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnJvcnMpLCAwKQorCisgICAgZGVmIHRl
c3RfbWlzc2luZ19lcXVhbChzZWxmKToKKyAgICAgICAgKGV4cGVjdGF0aW9uLCBlcnJvcnMpID0g
VGVzdEV4cGVjdGF0aW9uUGFyc2VyLnBhcnNlKCdGT08gOiBiYXInKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGV4cGVjdGF0aW9uLm1hbGZvcm1lZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChleHBlY3RhdGlvbi52YWxpZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZXhwZWN0YXRpb24uY29tbWVudCwgJ0ZPTyA6IGJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3RyKGVycm9ycyksICdbKFwnTWlzc2luZyBleHBlY3RhdGlvbnMgaW5cJywgIlwnRk9P
IDogYmFyXCciKV0nKQorCisgICAgZGVmIHRlc3RfZXh0cmFfZXF1YWwoc2VsZik6CisgICAgICAg
IChleHBlY3RhdGlvbiwgZXJyb3JzKSA9IFRlc3RFeHBlY3RhdGlvblBhcnNlci5wYXJzZSgnRk9P
IDogYmFyID0gQkFaID0gUXV4LicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRp
b24ubWFsZm9ybWVkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9u
LnZhbGlkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi5jb21t
ZW50LCAnRk9PIDogYmFyID0gQkFaID0gUXV4LicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c3RyKGVycm9ycyksICdbKCJFeHRyYW5lb3VzIFwnPVwnIGluIiwgIlwnRk9PIDogYmFyID0gQkFa
ID0gUXV4LlwnIildJykKKworICAgIGRlZiB0ZXN0X3ZhbGlkKHNlbGYpOgorICAgICAgICAoZXhw
ZWN0YXRpb24sIGVycm9ycykgPSBUZXN0RXhwZWN0YXRpb25QYXJzZXIucGFyc2UoJ0ZPTyA6IGJh
ciA9IEJBWicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24ubWFsZm9ybWVk
LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi52YWxpZCwgVHJ1
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RhdGlvbi5jb21tZW50LCBOb25lKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3Rf
dmFsaWRfd2l0aF9jb21tZW50KHNlbGYpOgorICAgICAgICAoZXhwZWN0YXRpb24sIGVycm9ycykg
PSBUZXN0RXhwZWN0YXRpb25QYXJzZXIucGFyc2UoJ0ZPTyA6IGJhciA9IEJBWiAvL1F1eC4nKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0aW9uLm1hbGZvcm1lZCwgRmFsc2UpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24udmFsaWQsIFRydWUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0YXRpb24uY29tbWVudCwgJ1F1eC4nKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHN0cihleHBlY3RhdGlvbi5tb2RpZmllcnMpLCAnW1wnZm9vXCddJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhwZWN0YXRpb24uZXhwZWN0YXRpb25zKSwg
J1tcJ2JhelwnXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVycm9ycyksIDApCisK
KyAgICBkZWYgdGVzdF92YWxpZF93aXRoX211bHRpcGxlX21vZGlmaWVycyhzZWxmKToKKyAgICAg
ICAgKGV4cGVjdGF0aW9uLCBlcnJvcnMpID0gVGVzdEV4cGVjdGF0aW9uUGFyc2VyLnBhcnNlKCdG
T08xIEZPTzIgOiBiYXIgPSBCQVogLy9RdXguJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChl
eHBlY3RhdGlvbi5tYWxmb3JtZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4
cGVjdGF0aW9uLnZhbGlkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGF0
aW9uLmNvbW1lbnQsICdRdXguJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhwZWN0
YXRpb24ubW9kaWZpZXJzKSwgJ1tcJ2ZvbzFcJywgXCdmb28yXCddJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzdHIoZXhwZWN0YXRpb24uZXhwZWN0YXRpb25zKSwgJ1tcJ2JhelwnXScpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVycm9ycyksIDApCisKKworY2xhc3MgVGVzdEV4
cGVjdGF0aW9uU2VyaWFsaXplclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNz
ZXJ0X3JvdW5kX3RyaXAoc2VsZiwgaW5fc3RyaW5nLCBleHBlY3RlZF9zdHJpbmc9Tm9uZSk6Cisg
ICAgICAgIChleHBlY3RhdGlvbiwgXykgPSBUZXN0RXhwZWN0YXRpb25QYXJzZXIucGFyc2UoaW5f
c3RyaW5nKQorICAgICAgICBpZiBleHBlY3RlZF9zdHJpbmcgaXMgTm9uZToKKyAgICAgICAgICAg
IGV4cGVjdGVkX3N0cmluZyA9IGluX3N0cmluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4
cGVjdGVkX3N0cmluZywgVGVzdEV4cGVjdGF0aW9uU2VyaWFsaXplci50b19zdHJpbmcoZXhwZWN0
YXRpb24pKQorCisgICAgZGVmIGFzc2VydF90b19zdHJpbmcoc2VsZiwgZXhwZWN0YXRpb24sIGV4
cGVjdGVkX3N0cmluZyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdEV4cGVjdGF0aW9u
U2VyaWFsaXplci50b19zdHJpbmcoZXhwZWN0YXRpb24pLCBleHBlY3RlZF9zdHJpbmcpCisKKyAg
ICBkZWYgdGVzdF9zdHJpbmdfc2VyaWFsaXplcihzZWxmKToKKyAgICAgICAgZXhwZWN0YXRpb24g
PSBUZXN0RXhwZWN0YXRpb25MaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRfdG9fc3RyaW5nKGV4
cGVjdGF0aW9uLCAnJykKKyAgICAgICAgZXhwZWN0YXRpb24uY29tbWVudCA9ICdRdXguJworICAg
ICAgICBzZWxmLmFzc2VydF90b19zdHJpbmcoZXhwZWN0YXRpb24sICcvL1F1eC4nKQorICAgICAg
ICBleHBlY3RhdGlvbi5uYW1lID0gJ2JhcicKKyAgICAgICAgc2VsZi5hc3NlcnRfdG9fc3RyaW5n
KGV4cGVjdGF0aW9uLCAnIDogYmFyID0gIC8vUXV4LicpCisgICAgICAgIGV4cGVjdGF0aW9uLm1v
ZGlmaWVycyA9IFsnZm9vJ10KKyAgICAgICAgc2VsZi5hc3NlcnRfdG9fc3RyaW5nKGV4cGVjdGF0
aW9uLCAnRk9PIDogYmFyID0gIC8vUXV4LicpCisgICAgICAgIGV4cGVjdGF0aW9uLmV4cGVjdGF0
aW9ucyA9IFsnYkF6J10KKyAgICAgICAgc2VsZi5hc3NlcnRfdG9fc3RyaW5nKGV4cGVjdGF0aW9u
LCAnRk9PIDogYmFyID0gQkFaIC8vUXV4LicpCisgICAgICAgIGV4cGVjdGF0aW9uLmV4cGVjdGF0
aW9ucyA9IFsnYkF6MScsICdiYVoyJ10KKyAgICAgICAgc2VsZi5hc3NlcnRfdG9fc3RyaW5nKGV4
cGVjdGF0aW9uLCAnRk9PIDogYmFyID0gQkFaMSBCQVoyIC8vUXV4LicpCisgICAgICAgIGV4cGVj
dGF0aW9uLm1vZGlmaWVycyA9IFsnZm9vMScsICdmb08yJ10KKyAgICAgICAgc2VsZi5hc3NlcnRf
dG9fc3RyaW5nKGV4cGVjdGF0aW9uLCAnRk9PMSBGT08yIDogYmFyID0gQkFaMSBCQVoyIC8vUXV4
LicpCisgICAgICAgIGV4cGVjdGF0aW9uLm1hbGZvcm1lZCA9IFRydWUKKyAgICAgICAgc2VsZi5h
c3NlcnRfdG9fc3RyaW5nKGV4cGVjdGF0aW9uLCAnUXV4LicpCisKKyAgICBkZWYgdGVzdF9zdHJp
bmdfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCcnKQor
ICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08nKQorICAgICAgICBzZWxmLmFzc2Vy
dF9yb3VuZF90cmlwKCc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91bmRfdHJpcCgnRk9PIDon
KQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08gOiBiYXInKQorICAgICAgICBz
ZWxmLmFzc2VydF9yb3VuZF90cmlwKCcgIEZPTyA6JykKKyAgICAgICAgc2VsZi5hc3NlcnRfcm91
bmRfdHJpcCgnICAgIEZPTyA6IGJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAo
J0ZPTyA6IGJhciA9IEJBWicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJ0ZPTyA6
IGJhciA9IEJBWiAvL1F1eC4nKQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08g
OiBiYXIgPSBCQVogLy8gUXV4LicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJ0ZP
TyA6IGJhciA9IEJBWiAvLyBRdXguICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90
cmlwKCdGT08gOiBiYXIgPSBCQVogLy8gICAgICAgIFF1eC4gICAgICcpCisgICAgICAgIHNlbGYu
YXNzZXJ0X3JvdW5kX3RyaXAoJ0ZPTyA6IDogYmFyID0gQkFaJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRfcm91bmRfdHJpcCgnRk9PIDogOiBiYXIgPSBCQVonKQorICAgICAgICBzZWxmLmFzc2VydF9y
b3VuZF90cmlwKCdGT08gOiA6IGJhciA9PT09IEJBWicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3Jv
dW5kX3RyaXAoJz0nKQorICAgICAgICBzZWxmLmFzc2VydF9yb3VuZF90cmlwKCcvLycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJy8vICcpCisgICAgICAgIHNlbGYuYXNzZXJ0X3Jv
dW5kX3RyaXAoJy8vIEZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJy8vIEZv
bycpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJy8vIEZvbyA6JykKKyAgICAgICAg
c2VsZi5hc3NlcnRfcm91bmRfdHJpcCgnLy8gRm9vIDogPScpCisKKyAgICBkZWYgdGVzdF9zdHJp
bmdfd2hpdGVzcGFjZV9zdHJpcHBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5k
X3RyaXAoJ1xuJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJyAgRk9PIDog
YmFyID0gQkFaJywgJ0ZPTyA6IGJhciA9IEJBWicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5k
X3RyaXAoJ0ZPTyAgICA6IGJhciA9IEJBWicsICdGT08gOiBiYXIgPSBCQVonKQorICAgICAgICBz
ZWxmLmFzc2VydF9yb3VuZF90cmlwKCdGT08gOiBiYXIgPSBCQVogICAgICAgLy8gUXV4LicsICdG
T08gOiBiYXIgPSBCQVogLy8gUXV4LicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAo
J0ZPTyA6IGJhciA9ICAgICAgICBCQVogLy8gUXV4LicsICdGT08gOiBiYXIgPSBCQVogLy8gUXV4
LicpCisgICAgICAgIHNlbGYuYXNzZXJ0X3JvdW5kX3RyaXAoJ0ZPTyA6ICAgICAgIGJhciA9ICAg
IEJBWiAvLyBRdXguJywgJ0ZPTyA6IGJhciA9IEJBWiAvLyBRdXguJykKKyAgICAgICAgc2VsZi5h
c3NlcnRfcm91bmRfdHJpcCgnRk9PIDogICAgICAgYmFyICAgICA9ICAgIEJBWiAvLyBRdXguJywg
J0ZPTyA6IGJhciA9IEJBWiAvLyBRdXguJykKKworCitjbGFzcyBUZXN0VmFsaWRhdG9yOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5saW5lX251bWJlcnMgPSBbXQorCisg
ICAgZGVmIHZhbGlkYXRlKHNlbGYsIGxpbmVfbnVtYmVyLCBleHBlY3RhdGlvbiwgZXJyb3JzKToK
KyAgICAgICAgc2VsZi5saW5lX251bWJlcnMuYXBwZW5kKGxpbmVfbnVtYmVyKQorICAgICAgICBy
ZXR1cm4gbGluZV9udW1iZXIgJSAyID09IDAKKworCitjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmls
ZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9saW5lX251bWJlcl9pbmNy
ZW1lbnQoc2VsZik6CisgICAgICAgIHZhbGlkYXRvciA9IFRlc3RWYWxpZGF0b3IoKQorICAgICAg
ICBleHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZSgpCisgICAgICAgIGV4cGVjdGF0
aW9ucy5hcHBlbmQoJy8vIEJhclxuRk9PIDogYmFyID0gQkFaXG5cbicsIHZhbGlkYXRvcikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsaWRhdG9yLmxpbmVfbnVtYmVycyksICdbMSwg
MiwgMywgNF0nKQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgIHZhbGlk
YXRvciA9IFRlc3RWYWxpZGF0b3IoKQorICAgICAgICBleHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0
YXRpb25zRmlsZSgpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ1xuXG5cblxuJywgdmFs
aWRhdG9yKQorICAgICAgICBsaW5lX251bWJlciA9IDAKKyAgICAgICAgZm9yIGV4cGVjdGF0aW9u
IGluIGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIGxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChsaW5lX251bWJlciwgNSkKKworICAgIGRlZiB0ZXN0X3ZhbGlkYXRv
cl9mZWVkYmFjayhzZWxmKToKKyAgICAgICAgdmFsaWRhdG9yID0gVGVzdFZhbGlkYXRvcigpCisg
ICAgICAgIGV4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlKCkKKyAgICAgICAgZXhw
ZWN0YXRpb25zLmFwcGVuZCgnRk9PIDogYmFyMSA9IEJBWlxuRk9PIDogYmFyMiA9IEJBWlxuRk9P
IDogYmFyMyA9IEJBWicsIHZhbGlkYXRvcikKKyAgICAgICAgbGluZV9udW1iZXIgPSAwCisgICAg
ICAgIGZvciBleHBlY3RhdGlvbiBpbiBleHBlY3RhdGlvbnM6CisgICAgICAgICAgICBsaW5lX251
bWJlciArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVfbnVtYmVyICUgMiA9
PSAwLCBleHBlY3RhdGlvbi52YWxpZCkKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAg
ICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDJmNmFlNTI4OGRiYzJmZjVlODgxOWQzN2U3ZGZkY2JjMTcyZGJmODkuLmE1MzVlZjFiMGNj
NmZkNjA3ZGVlODliZTY1Njk3ZTJjNGY1YTljMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy90ZXN0X2V4cGVjdGF0aW9u
c191bml0dGVzdC5weQpAQCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNU
ZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZXhwZWN0YXRpb25fZXJy
b3JzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9saW5lc19saW50KAogICAgICAgICAgICAg
WyJtaXNzaW5nIGV4cGVjdGF0aW9ucyJdLAotICAgICAgICAgICAgIk1pc3NpbmcgYSAnOicgbWlz
c2luZyBleHBlY3RhdGlvbnMgIFt0ZXN0L2V4cGVjdGF0aW9uc10gWzVdIikKKyAgICAgICAgICAg
ICJNaXNzaW5nIGEgJzonIGluICdtaXNzaW5nIGV4cGVjdGF0aW9ucycgIFt0ZXN0L2V4cGVjdGF0
aW9uc10gWzVdIikKICAgICAgICAgc2VsZi5hc3NlcnRfbGluZXNfbGludCgKICAgICAgICAgICAg
IFsiU0xPVyA6IHBhc3Nlcy90ZXh0Lmh0bWwgPSBUSU1FT1VUIl0sCiAgICAgICAgICAgICAiQSB0
ZXN0IGNhbiBub3QgYmUgYm90aCBTTE9XIGFuZCBUSU1FT1VULiAiCg==
</data>
<flag name="review"
          id="95249"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>