<?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>37782</bug_id>
          
          <creation_ts>2010-04-18 16:26:38 -0700</creation_ts>
          <short_desc>new-run-webkit-tests: add a &quot;dryrun&quot; port that can be used to trace expectations on other platforms</short_desc>
          <delta_ts>2010-04-19 18:02:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213847</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-18 16:26:38 -0700</bug_when>
    <thetext>We should repurpose the Passing port to be able to stub out and run ports other than the one we&apos;re currently running on. Currently the Passing implementation still checks for a build and starts and stops the auxiliary services. If we stub that all out, then we can do a full dry run of any port, which can be useful for checking baselines, coverage testing, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213859</commentid>
    <comment_count>1</comment_count>
      <attachid>53643</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-18 16:40:59 -0700</bug_when>
    <thetext>Created attachment 53643
add unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213860</commentid>
    <comment_count>2</comment_count>
      <attachid>53644</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-18 16:42:53 -0700</bug_when>
    <thetext>Created attachment 53644
fix ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213861</commentid>
    <comment_count>3</comment_count>
      <attachid>53644</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-18 16:45:53 -0700</bug_when>
    <thetext>Comment on attachment 53644
fix ChangeLog

What encoding is the text_expectations.txt file in?  I would assume UTF8.  We&apos;ll need to be explicit in our open() calls, probably easiest to use codecs.open(name, mode, encoding) instead of having to convert each read into a unicode string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213864</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-18 16:53:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 53644 [details])
&gt; What encoding is the text_expectations.txt file in?  I would assume UTF8. 
&gt; We&apos;ll need to be explicit in our open() calls, probably easiest to use
&gt; codecs.open(name, mode, encoding) instead of having to convert each read into a
&gt; unicode string.

I think we generally assume test_expectations is in ASCII, like most source code. I don&apos;t think there&apos;s a strong reason to allow non-ASCII characters in it, in which case the default open() calls should work just fine.

I&apos;m also not sure what that comment has to do with this particular change ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213933</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-19 00:38:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 53644 [details] [details])
&gt; &gt; What encoding is the text_expectations.txt file in?  I would assume UTF8. 
&gt; &gt; We&apos;ll need to be explicit in our open() calls, probably easiest to use
&gt; &gt; codecs.open(name, mode, encoding) instead of having to convert each read into a
&gt; &gt; unicode string.
&gt; 
&gt; I think we generally assume test_expectations is in ASCII, like most source
&gt; code. I don&apos;t think there&apos;s a strong reason to allow non-ASCII characters in
&gt; it, in which case the default open() calls should work just fine.
&gt; 
&gt; I&apos;m also not sure what that comment has to do with this particular change ...

It was made simply because unicode() is on my mind at the moment after having written bug 37765.  The default open() calls will return a file object for which read() returns a str() (which is a byte-stream and not a really a &quot;string&quot;).  If test_expectations are all ascii then that&apos;s fine, but technically we should be chosing an encoding and converting to unicode either during or after read().

Either way, as you said, it doesn&apos;t necessarily pertain to the guts of this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213936</commentid>
    <comment_count>6</comment_count>
      <attachid>53644</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-19 00:44:46 -0700</bug_when>
    <thetext>Comment on attachment 53644
fix ChangeLog

I don&apos;t think &quot;dryrun&quot; is a word.  In which case, the class would be DryRun no?

This leaks a file handle, no?
+            text_output = open(text_filename, &apos;r&apos;).read()

And here?
+                image = file(image_filename, &apos;rb&apos;).read()

and several more...

I think in python 2.6 that might auto-cleanup for you, but I don&apos;t think earlier versions of python do.

You could use &quot;with&quot; to have 2.5+ auto-close the file for you.

I&apos;m not sure I understand what:
+    def _uri_to_test(self, uri):

is trying to do.

Does this not start up actual websocket/apache servers?  I would think those would be important for using this for profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214288</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 15:26:57 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 53644 [details])
&gt; I don&apos;t think &quot;dryrun&quot; is a word.  In which case, the class would be DryRun no?
&gt; 

Perhaps. I&apos;ll change it.

&gt; This leaks a file handle, no?
&gt; +            text_output = open(text_filename, &apos;r&apos;).read()
&gt; 
&gt; And here?
&gt; +                image = file(image_filename, &apos;rb&apos;).read()
&gt; 
&gt; and several more...
&gt;

I will fix those.
 
&gt; I&apos;m not sure I understand what:
&gt; +    def _uri_to_test(self, uri):
&gt;
&gt; is trying to do.
&gt;

It remaps full URIs to the actual underlying test names, so that we can then look up the expected baselines for the test. I will add better comments.
 
&gt; Does this not start up actual websocket/apache servers?  I would think those
&gt; would be important for using this for profiling.

No, it doesn&apos;t. That is one of the main differences between this implementation and the previous &quot;passing&quot; implementation. I&apos;m not sure how useful this is. I suppose if you wanted to time a test run that assumed an infinitely fast dumprendertree but regular execution of everything else, you might want that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214291</commentid>
    <comment_count>8</comment_count>
      <attachid>53730</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 15:41:29 -0700</bug_when>
    <thetext>Created attachment 53730
update w/ feedback from eseidel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214312</commentid>
    <comment_count>9</comment_count>
      <attachid>53730</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-19 16:10:15 -0700</bug_when>
    <thetext>Comment on attachment 53730
update w/ feedback from eseidel

read_file on port seems like the wrong abstraction.

You&apos;re clearly repeating the same pattern:
+        text_filename = self._port.expected_filename(test_name, &apos;.txt&apos;)
+        try:
+            text_output = self._port.read_file(text_filename)
+        except IOError:
+            text_output = &apos;&apos;

Why not just have a helper function which does that?  Just a free function in the same file.

Also, why not use the 2.5+ &quot;with&quot; sequence to make the explicit file.close() uneeded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214323</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 16:25:32 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 53730 [details])
&gt; read_file on port seems like the wrong abstraction.

I originally had it in the same file, but then I realized that other ports might want to be able to do the same thing, and the Port class is a nice place to hang platform-specific stuff of of.

&gt; 
&gt; You&apos;re clearly repeating the same pattern:
&gt; +        text_filename = self._port.expected_filename(test_name, &apos;.txt&apos;)
&gt; +        try:
&gt; +            text_output = self._port.read_file(text_filename)
&gt; +        except IOError:
&gt; +            text_output = &apos;&apos;
&gt; 
&gt; Why not just have a helper function which does that?  Just a free function in
&gt; the same file.
&gt;

Makes sense. I&apos;ll add that.
 
&gt; Also, why not use the 2.5+ &quot;with&quot; sequence to make the explicit file.close()
&gt; uneeded?

I haven&apos;t gotten used to using with yet. It feels wrong or clunky to me, somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214324</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 16:26:37 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 53730 [details] [details])
&gt; &gt; read_file on port seems like the wrong abstraction.
&gt; 
&gt; I originally had it in the same file, but then I realized that other ports
&gt; might want to be able to do the same thing, and the Port class is a nice place
&gt; to hang platform-specific stuff of of.

Also, you&apos;re right that it could be a free function instead of a method on the Port class, but we don&apos;t have a place for platform-specific functions lying around AFAIK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214327</commentid>
    <comment_count>12</comment_count>
      <attachid>53736</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 16:32:11 -0700</bug_when>
    <thetext>Created attachment 53736
more feedback from eseidel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214331</commentid>
    <comment_count>13</comment_count>
      <attachid>53736</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-19 16:36:24 -0700</bug_when>
    <thetext>Comment on attachment 53736
more feedback from eseidel

+ def read_file(self, path, mode=&apos;r&apos;):

I don&apos;t read_file and write_file should be on the Port object.  They don&apos;t have anything to do with WebKit ports.

In general, we shouldn&apos;t try to make Port the all-sing, all-dance wrapper for the world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214347</commentid>
    <comment_count>14</comment_count>
      <attachid>53742</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 17:03:01 -0700</bug_when>
    <thetext>Created attachment 53742
feedback from abarth - don&apos;t hang read_file() and write_file() off of the port object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214348</commentid>
    <comment_count>15</comment_count>
      <attachid>53743</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 17:06:18 -0700</bug_when>
    <thetext>Created attachment 53743
whoops. try again w/ correct patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214351</commentid>
    <comment_count>16</comment_count>
      <attachid>53744</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 17:10:32 -0700</bug_when>
    <thetext>Created attachment 53744
and yet again ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214354</commentid>
    <comment_count>17</comment_count>
      <attachid>53744</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-19 17:15:16 -0700</bug_when>
    <thetext>Comment on attachment 53744
and yet again ...

Nifty!

 58         f = open(path, mode)
 59         contents = f.read()
 60         f.close()

This might leak a file handle when an exception is thrown.  Please use the &quot;with&quot; construction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214386</commentid>
    <comment_count>18</comment_count>
      <attachid>53750</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 17:48:38 -0700</bug_when>
    <thetext>Created attachment 53750
final patch using &quot;with&quot; statement; no review needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214388</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-19 17:53:20 -0700</bug_when>
    <thetext> 62             contents = f.read()

I&apos;m surprised you don&apos;t need to declare contents in the top-most scope of this function, but I presume you ran this fine.  I guess I still don&apos;t quite understand Python scoping rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214390</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 17:53:31 -0700</bug_when>
    <thetext>Committed r57860: &lt;http://trac.webkit.org/changeset/57860&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214394</commentid>
    <comment_count>21</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 18:00:04 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt;  62             contents = f.read()
&gt; 
&gt; I&apos;m surprised you don&apos;t need to declare contents in the top-most scope of this
&gt; function, but I presume you ran this fine.  I guess I still don&apos;t quite
&gt; understand Python scoping rules.

contents was declared and initialized on line 59. I think it would&apos;ve worked in the regular (non-exceptional case) because the variable would&apos;ve still been live (I.e., neither the try nor the with introduce true block scopes like def does). But, it certainly would&apos;ve failed in the exception case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214400</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-19 18:02:24 -0700</bug_when>
    <thetext>Ah, i missed line 59.  That makes more sense.  :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53643</attachid>
            <date>2010-04-18 16:40:59 -0700</date>
            <delta_ts>2010-04-18 16:42:49 -0700</delta_ts>
            <desc>add unit tests</desc>
            <filename>bug-37782-20100418164058.patch</filename>
            <type>text/plain</type>
            <size>16741</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5OThhNmQzLi44Y2JkNjZkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDQt
MTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9u
IGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OiBSZW5hbWVkIGZyb20gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wYXNzaW5nLnB5LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
OgorCisyMDEwLTA0LTE4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG5ldy1ydW4td2Vi
a2l0LXRlc3RzIC0gcmVwdXJwb3NlIHRoZSAiUGFzc2luZyIgcG9ydCBhcyAiRHJ5cnVuIiBwb3J0
CisgICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0
aGUgb25lIHlvdSBhcmUgcnVubmluZworICAgICAgICBvbi4gVGhpcyBjYW4gYmUgdXNlZnVsIGZv
ciBjaGVja2luZyBiYXNlbGluZXMgYW5kIHRlc3RpbmcgY29kZQorICAgICAgICBjb3ZlcmFnZS4K
KworICAgICAgICBOb3RlIHRoYXQgcnVubmluZyB0aGUgY29kZSBvbiB0aGUgIndyb25nIiBwb3J0
IHJlcXVpcmVzIGVhY2gKKyAgICAgICAgcG9ydC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB0byBh
Y3R1YWxseSBub3QgcmVxdWlyZSBhbnkKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgcHl0aG9u
IGNvZGUgKGUuZy4sIHRoZSBjaHJvbWl1bS13aW4gcG9ydCBtdXN0CisgICAgICAgIHRlc3QgZm9y
IHRoZSBleGlzdGVuY2Ugb2Ygd2luZG93cyBmdW5jdGlvbnMgYmVmb3JlIGNhbGxpbmcgdGhlbSku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3Nzgy
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X3dpbi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Ry
eXJ1bi5weTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvcGFzc2luZy5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHk6CisKIDIwMTAtMDQtMTUgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX3dpbi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fd2luLnB5CmluZGV4IGFjNGZlNmYuLjJlM2RlODUgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
d2luLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW1fd2luLnB5CkBAIC04Nyw2ICs4Nyw4IEBAIGNsYXNzIENocm9taXVtV2luUG9y
dChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICByZXR1cm4gJ3dpbicgKyBzZWxmLnZl
cnNpb24oKQogCiAgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRy
KHN5cywgJ2dldHdpbmRvd3N2ZXJzaW9uJyk6CisgICAgICAgICAgICByZXR1cm4gJycKICAgICAg
ICAgd2ludmVyID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKICAgICAgICAgaWYgd2ludmVyWzBd
ID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMSk6CiAgICAgICAgICAgICByZXR1cm4gJy03JwpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9k
cnlydW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2RyeXJ1bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGUxZjUzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9kcnlydW4ucHkKQEAgLTAsMCArMSwxNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJUaGlzIGlzIGEgdGVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9y
dCBpbnRlcmZhY2UgdGhhdCBnZW5lcmF0ZXMgdGhlCisgICBjb3JyZWN0IG91dHB1dCBmb3IgZXZl
cnkgdGVzdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHBlcmYgdGVzdGluZywgYmVjYXVzZQorICAgaXQg
aXMgcHJldHR5IG11Y2ggYSBsb3dlciBsaW1pdCBvbiBob3cgZmFzdCBhIHBvcnQgY2FuIHBvc3Np
Ymx5IHJ1bi4KKworICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhY3RzIGFzIGEgd3JhcHBlciBhcm91
bmQgYSByZWFsIHBvcnQgKHRoZSByZWFsIHBvcnQKKyAgIGlzIGhlbGQgYXMgYSBkZWxlZ2F0ZSBv
YmplY3QpLiBUbyBzcGVjaWZ5IHdoaWNoIHBvcnQsIHVzZSB0aGUgcG9ydCBuYW1lCisgICAnZHJ5
cnVuLVhYWCcgKGUuZy4sICdkcnlydW4tY2hyb21pdW0tbWFjLWxlb3BhcmQnKS4gSWYgeW91IHVz
ZSBqdXN0CisgICAnZHJ5cnVuJywgaXQgdXNlcyB0aGUgZGVmYXVsdCBwb3J0LgorCisgICBOb3Rl
IHRoYXQgYmVjYXVzZSB0aGlzIGlzIHJlYWxseSBhY3RpbmcgYXMgYSB3cmFwcGVyIGFyb3VuZCB0
aGUgdW5kZXJseWluZworICAgcG9ydCwgeW91IG11c3QgYmUgYWJsZSB0byBydW4gdGhlIHVuZGVy
bHlpbmcgcG9ydCBhcyB3ZWxsCisgICAoY2hlY2tfYnVpbGQoKSBhbmQgY2hlY2tfc3lzX2RlcHMo
KSBtdXN0IHBhc3MgYW5kIGF1eGlsaWFyeSBiaW5hcmllcworICAgbGlrZSBsYXlvdXRfdGVzdF9o
ZWxwZXIgYW5kIGh0dHBkIG11c3Qgd29yaykuCisKKyAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxz
byBtb2RpZmllcyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgc28gdGhhdCBhbGwKKyAgIHRlc3RzIGFy
ZSBlaXRoZXIgU0tJUFBFRCBvciBleHBlY3RlZCB0byBQQVNTLiIiIgorCitpbXBvcnQgYmFzZQor
aW1wb3J0IGZhY3RvcnkKKworCitjbGFzcyBEcnlydW5Qb3J0KG9iamVjdCk6CisgICAgIiIiRHJ5
cnVuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgcGZ4
ID0gJ2RyeXJ1bi0nCisgICAgICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKHBmeCk6CisgICAg
ICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWVbbGVuKHBmeCk6XQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcG9ydF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBm
YWN0b3J5LmdldChwb3J0X25hbWUsIG9wdGlvbnMpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2Vs
ZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkK
KworICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAgICAgIHBh
c3MKKworICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisg
ICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAg
IGRlZiBzdG9wX2hlbHBlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BfaHR0
cF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX3dlYnNvY2tldF9z
ZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwg
aW1hZ2VfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgIHJldHVybiBEcnlydW5Ecml2ZXIoc2VsZiwg
aW1hZ2VfcGF0aCwgb3B0aW9ucykKKworCitjbGFzcyBEcnlydW5Ecml2ZXIoYmFzZS5Ecml2ZXIp
OgorICAgICIiIkRyeXJ1biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgLyBE
cml2ZXIgaW50ZXJmYWNlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdl
X3BhdGgsIHRlc3RfZHJpdmVyX29wdGlvbnMpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAor
ICAgICAgICBzZWxmLl9kcml2ZXJfb3B0aW9ucyA9IHRlc3RfZHJpdmVyX29wdGlvbnMKKyAgICAg
ICAgc2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKKyAgICAgICAgc2VsZi5fbGF5b3V0X3Rl
c3RzX2RpciA9IE5vbmUKKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgZGVmIHJldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBk
ZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gpOgorICAgICAgICB0
ZXN0X25hbWUgPSBzZWxmLl91cmlfdG9fdGVzdCh1cmkpCisKKyAgICAgICAgdGV4dF9maWxlbmFt
ZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnR4dCcpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHRleHRfb3V0cHV0ID0gb3Blbih0ZXh0X2ZpbGVuYW1lLCAn
cicpLnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHRleHRfb3V0
cHV0ID0gJycKKworICAgICAgICBpZiBpbWFnZV9oYXNoOgorICAgICAgICAgICAgaW1hZ2VfZmls
ZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy5wbmcnKQor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltYWdlID0gZmlsZShpbWFnZV9maWxl
bmFtZSwgJ3JiJykucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAg
ICAgICAgICBpbWFnZSA9ICcnCisgICAgICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgorICAg
ICAgICAgICAgICAgIG91dHB1dF9maWxlID0gZmlsZShzZWxmLl9pbWFnZV9wYXRoLCAndycpCisg
ICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoaW1hZ2UpCisgICAgICAgICAgICAgICAg
b3V0cHV0X2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgaGFzaF9maWxlbmFtZSA9IHNlbGYuX3Bv
cnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLAorICAgICAgICAgICAgICAgICcuY2hlY2tz
dW0nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGhhc2ggPSBmaWxlKGhhc2hf
ZmlsZW5hbWUsICdyJykucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAg
ICAgICAgICAgICBoYXNoID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhhc2ggPSBO
b25lCisgICAgICAgIHJldHVybiAoRmFsc2UsIEZhbHNlLCBoYXNoLCB0ZXh0X291dHB1dCwgTm9u
ZSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3VyaV90
b190ZXN0KHNlbGYsIHVyaSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9sYXlvdXRfdGVzdHNfZGly
OgorICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0
X3Rlc3RzX2RpcigpCisgICAgICAgIHRlc3QgPSB1cmkKKworICAgICAgICBpZiB1cmkuc3RhcnRz
d2l0aCgiZmlsZTovLy8iKToKKyAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2ZpbGU6
Ly8nLCAnJykKKyAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgIGVsaWYgdXJpLnN0YXJ0
c3dpdGgoImh0dHA6Ly8xMjcuMC4wLjE6ODg4MC8iKToKKyAgICAgICAgICAgICMgd2Vic29ja2V0
IHRlc3RzCisgICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwOi8vMTI3LjAuMC4x
Ojg4ODAvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rl
c3RzX2RpciArICcvJykKKyAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgIGVsaWYgdXJp
LnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToKKyAgICAgICAgICAgICMgcmVndWxhciBIVFRQIHRlc3QK
KyAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC8n
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGly
ICsgJy9odHRwL3Rlc3RzLycpCisgICAgICAgICAgICByZXR1cm4gdGVzdAorICAgICAgICBlbGlm
IHVyaS5zdGFydHN3aXRoKCJodHRwczovLyIpOgorICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVw
bGFjZSgnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My8nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy9odHRwL3Rlc3RzLycpCisgICAgICAg
ICAgICByZXR1cm4gdGVzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcigndW5rbm93biB1cmwgdHlwZTogJXMnICUgdXJpKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5
LnB5CmluZGV4IGNmMGNjNzIuLmQ5ZWQ5MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKQEAgLTU5LDkg
KzU5LDkgQEAgZGVmIGdldChwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKICAgICBpZiBw
b3J0X3RvX3VzZSA9PSAndGVzdCc6CiAgICAgICAgIGltcG9ydCB0ZXN0CiAgICAgICAgIHJldHVy
biB0ZXN0LlRlc3RQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKLSAgICBlbGlmIHBvcnRfdG9fdXNl
LnN0YXJ0c3dpdGgoJ3Bhc3NpbmcnKToKLSAgICAgICAgaW1wb3J0IHBhc3NpbmcKLSAgICAgICAg
cmV0dXJuIHBhc3NpbmcuUGFzc2luZ1BvcnQocG9ydF9uYW1lLCBvcHRpb25zKQorICAgIGVsaWYg
cG9ydF90b191c2Uuc3RhcnRzd2l0aCgnZHJ5cnVuJyk6CisgICAgICAgIGltcG9ydCBkcnlydW4K
KyAgICAgICAgcmV0dXJuIGRyeXJ1bi5EcnlydW5Qb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKICAg
ICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ21hYycpOgogICAgICAgICBpbXBvcnQgbWFj
CiAgICAgICAgIHJldHVybiBtYWMuTWFjUG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bhc3Np
bmcucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bh
c3NpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MzViNGIuLjAwMDAwMDAK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wYXNz
aW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5
dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1
dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0iIiJUaGlzIGlzIGEgdGVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
UG9ydCBpbnRlcmZhY2UgdGhhdCBnZW5lcmF0ZXMgdGhlCi0gICBjb3JyZWN0IG91dHB1dCBmb3Ig
ZXZlcnkgdGVzdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHBlcmYgdGVzdGluZywgYmVjYXVzZQotICAg
aXQgaXMgcHJldHR5IG11Y2ggYSBsb3dlciBsaW1pdCBvbiBob3cgZmFzdCBhIHBvcnQgY2FuIHBv
c3NpYmx5IHJ1bi4KLQotICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhY3RzIGFzIGEgd3JhcHBlciBh
cm91bmQgYSByZWFsIHBvcnQgKHRoZSByZWFsIHBvcnQKLSAgIGlzIGhlbGQgYXMgYSBkZWxlZ2F0
ZSBvYmplY3QpLiBUbyBzcGVjaWZ5IHdoaWNoIHBvcnQsIHVzZSB0aGUgcG9ydCBuYW1lCi0gICAn
cGFzc2luZy1YWFgnIChlLmcuLCAncGFzc2luZy1jaHJvbWl1bS1tYWMtbGVvcGFyZCcpLiBJZiB5
b3UgdXNlIGp1c3QKLSAgICdwYXNzaW5nJywgaXQgdXNlcyB0aGUgZGVmYXVsdCBwb3J0LgotCi0g
ICBOb3RlIHRoYXQgYmVjYXVzZSB0aGlzIGlzIHJlYWxseSBhY3RpbmcgYXMgYSB3cmFwcGVyIGFy
b3VuZCB0aGUgdW5kZXJseWluZwotICAgcG9ydCwgeW91IG11c3QgYmUgYWJsZSB0byBydW4gdGhl
IHVuZGVybHlpbmcgcG9ydCBhcyB3ZWxsCi0gICAoY2hlY2tfYnVpbGQoKSBhbmQgY2hlY2tfc3lz
X2RlcHMoKSBtdXN0IHBhc3MgYW5kIGF1eGlsaWFyeSBiaW5hcmllcwotICAgbGlrZSBsYXlvdXRf
dGVzdF9oZWxwZXIgYW5kIGh0dHBkIG11c3Qgd29yaykuCi0KLSAgIFRoaXMgaW1wbGVtZW50YXRp
b24gYWxzbyBtb2RpZmllcyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgc28gdGhhdCBhbGwKLSAgIHRl
c3RzIGFyZSBlaXRoZXIgU0tJUFBFRCBvciBleHBlY3RlZCB0byBQQVNTLiIiIgotCi1pbXBvcnQg
YmFzZQotaW1wb3J0IGZhY3RvcnkKLQotY2xhc3MgUGFzc2luZ1BvcnQob2JqZWN0KToKLSAgICAi
IiJQYXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKLQotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKLSAgICAg
ICAgcGZ4ID0gJ3Bhc3NpbmctJwotICAgICAgICBpZiBwb3J0X25hbWUuc3RhcnRzd2l0aChwZngp
OgotICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lW2xlbihwZngpOl0KLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9IE5vbmUKLSAgICAgICAgc2VsZi5fX2RlbGVn
YXRlID0gZmFjdG9yeS5nZXQocG9ydF9uYW1lLCBvcHRpb25zKQotCi0gICAgZGVmIF9fZ2V0YXR0
cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUs
IG5hbWUpCi0KLSAgICBkZWYgc3RhcnRfZHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlvbnMp
OgotICAgICAgICByZXR1cm4gUGFzc2luZ0RyaXZlcihzZWxmLCBpbWFnZV9wYXRoLCBvcHRpb25z
KQotCi0gICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgotICAgICAgICBleHBzID0gc2Vs
Zi5fX2RlbGVnYXRlLnRlc3RfZXhwZWN0YXRpb25zKCkKLSAgICAgICAgc2tpcHMgPSBbXQotICAg
ICAgICBmb3IgbGluZSBpbiBleHBzLnNwbGl0KCdcbicpOgotICAgICAgICAgICAgaWYgbGluZS5m
aW5kKCJTS0lQIikgIT0gLTE6Ci0gICAgICAgICAgICAgICAgc2tpcHMuYXBwZW5kKGxpbmUpCi0g
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2tpcHMpCi0KLWNsYXNzIFBhc3NpbmdEcml2ZXIoYmFz
ZS5Ecml2ZXIpOgotICAgICIiIlBhc3NpbmcgaW1wbGVtZW50YXRpb24gb2YgdGhlIER1bXBSZW5k
ZXJUcmVlIC8gRHJpdmVyIGludGVyZmFjZS4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBpbWFnZV9wYXRoLCB0ZXN0X2RyaXZlcl9vcHRpb25zKToKLSAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKLSAgICAgICAgc2VsZi5fZHJpdmVyX29wdGlvbnMgPSB0ZXN0X2RyaXZlcl9vcHRp
b25zCi0gICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCi0gICAgICAgIHNlbGYu
X2xheW91dF90ZXN0c19kaXIgPSBOb25lCi0KLSAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgIGRlZiByZXR1cm5jb2RlKHNlbGYpOgotICAgICAgICByZXR1cm4g
MAotCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHVyaSwgdGltZW91dG1zLCBpbWFnZV9oYXNoKToK
LSAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fdXJpX3RvX3Rlc3QodXJpKQotCi0gICAgICAgIHRl
eHRfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy50
eHQnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXh0X291dHB1dCA9IG9wZW4odGV4dF9m
aWxlbmFtZSwgJ3InKS5yZWFkKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAg
ICB0ZXh0X291dHB1dCA9ICcnCi0KLSAgICAgICAgaWYgaW1hZ2VfaGFzaDoKLSAgICAgICAgICAg
IGltYWdlX2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25hbWUs
ICcucG5nJykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbWFnZSA9IGZpbGUo
aW1hZ2VfZmlsZW5hbWUsICdyYicpLnJlYWQoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6
Ci0gICAgICAgICAgICAgICAgaW1hZ2UgPSAnJwotICAgICAgICAgICAgaWYgc2VsZi5faW1hZ2Vf
cGF0aDoKLSAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZSA9IGZpbGUoc2VsZi5faW1hZ2VfcGF0
aCwgJ3cnKQotICAgICAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKGltYWdlKQotICAgICAg
ICAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIGhhc2hfZmlsZW5hbWUg
PSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwKLSAgICAgICAgICAgICAg
ICAnLmNoZWNrc3VtJykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBoYXNoID0g
ZmlsZShoYXNoX2ZpbGVuYW1lLCAncicpLnJlYWQoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJy
b3I6Ci0gICAgICAgICAgICAgICAgaGFzaCA9ICcnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBoYXNoID0gTm9uZQotICAgICAgICByZXR1cm4gKEZhbHNlLCBGYWxzZSwgaGFzaCwgdGV4dF9v
dXRwdXQsIE5vbmUpCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAg
ZGVmIF91cmlfdG9fdGVzdChzZWxmLCB1cmkpOgotICAgICAgICBpZiBub3Qgc2VsZi5fbGF5b3V0
X3Rlc3RzX2RpcjoKLSAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgPSBzZWxmLl9w
b3J0LmxheW91dF90ZXN0c19kaXIoKQotICAgICAgICB0ZXN0ID0gdXJpCi0KLSAgICAgICAgaWYg
dXJpLnN0YXJ0c3dpdGgoImZpbGU6Ly8vIik6Ci0gICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBs
YWNlKCdmaWxlOi8vJywgJycpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAotICAgICAgICBlbGlm
IHVyaS5zdGFydHN3aXRoKCJodHRwOi8vMTI3LjAuMC4xOjg4ODAvIik6Ci0gICAgICAgICAgICAj
IHdlYnNvY2tldCB0ZXN0cwotICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnaHR0cDov
LzEyNy4wLjAuMTo4ODgwLycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2xheW91dF90ZXN0c19kaXIgKyAnLycpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAotICAgICAg
ICBlbGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vIik6Ci0gICAgICAgICAgICAjIHJlZ3VsYXIg
SFRUUCB0ZXN0Ci0gICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwOi8vMTI3LjAu
MC4xOjgwMDAvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0
X3Rlc3RzX2RpciArICcvaHR0cC90ZXN0cy8nKQotICAgICAgICAgICAgcmV0dXJuIHRlc3QKLSAg
ICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKLSAgICAgICAgICAgIHRlc3Qg
PSB0ZXN0LnJlcGxhY2UoJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciArICcvaHR0cC90ZXN0cy8n
KQotICAgICAgICAgICAgcmV0dXJuIHRlc3QKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vua25vd24gdXJsIHR5cGU6ICVzJyAlIHVyaSkKLQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggNmYwZmFhYy4u
ZjIwNmI2MCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBA
IC01Niw1ICs1NiwyMSBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tbG9nJywgJ3VuZXhwZWN0ZWQnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkpCiAKKwor
Y2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWNz
KHNlbGYpOgorICAgICAgICBpbXBvcnQgcGRiCisgICAgICAgIHBkYi5zZXRfdHJhY2UoKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bics
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICdkcnlydW4t
bWFjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10p
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2Ry
eXJ1bi1jaHJvbWl1bS1tYWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdmYXN0L2h0bWwnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0t
cGxhdGZvcm0nLCAnZHJ5cnVuLWNocm9taXVtLXdpbicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBh
c3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICdkcnlydW4tY2hyb21pdW0tbGludXgnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkpCisKIGlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53644</attachid>
            <date>2010-04-18 16:42:53 -0700</date>
            <delta_ts>2010-04-19 15:41:29 -0700</delta_ts>
            <desc>fix ChangeLog</desc>
            <filename>bug-37782-20100418164252.patch</filename>
            <type>text/plain</type>
            <size>16272</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5OThhNmQzLi5mMmNjYWI2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDQt
MTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHMgLSBy
ZXB1cnBvc2UgdGhlICJQYXNzaW5nIiBwb3J0IGFzICJEcnlydW4iIHBvcnQKKyAgICAgICAgdGhh
dCBjYW4gYmUgdXNlZCB0byB0ZXN0IHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGFy
ZSBydW5uaW5nCisgICAgICAgIG9uLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIGJh
c2VsaW5lcyBhbmQgdGVzdGluZyBjb2RlCisgICAgICAgIGNvdmVyYWdlLgorCisgICAgICAgIE5v
dGUgdGhhdCBydW5uaW5nIHRoZSBjb2RlIG9uIHRoZSAid3JvbmciIHBvcnQgcmVxdWlyZXMgZWFj
aAorICAgICAgICBwb3J0LXNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRvIGFjdHVhbGx5IG5vdCBy
ZXF1aXJlIGFueQorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBweXRob24gY29kZSAoZS5nLiwg
dGhlIGNocm9taXVtLXdpbiBwb3J0IG11c3QKKyAgICAgICAgdGVzdCBmb3IgdGhlIGV4aXN0ZW5j
ZSBvZiB3aW5kb3dzIGZ1bmN0aW9ucyBiZWZvcmUgY2FsbGluZyB0aGVtKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc3ODIKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OiBSZW5h
bWVkIGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9w
YXNzaW5nLnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeS5weToKKwogMjAxMC0wNC0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV93aW4ucHkKaW5kZXggYWM0ZmU2Zi4uMmUzZGU4NSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93
aW4ucHkKQEAgLTg3LDYgKzg3LDggQEAgY2xhc3MgQ2hyb21pdW1XaW5Qb3J0KGNocm9taXVtLkNo
cm9taXVtUG9ydCk6CiAgICAgICAgIHJldHVybiAnd2luJyArIHNlbGYudmVyc2lvbigpCiAKICAg
ICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc3lzLCAnZ2V0d2lu
ZG93c3ZlcnNpb24nKToKKyAgICAgICAgICAgIHJldHVybiAnJwogICAgICAgICB3aW52ZXIgPSBz
eXMuZ2V0d2luZG93c3ZlcnNpb24oKQogICAgICAgICBpZiB3aW52ZXJbMF0gPT0gNiBhbmQgKHdp
bnZlclsxXSA9PSAxKToKICAgICAgICAgICAgIHJldHVybiAnLTcnCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTFmNTMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1
bi5weQpAQCAtMCwwICsxLDE2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyIiIlRoaXMgaXMgYSB0ZXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZSB0
aGF0IGdlbmVyYXRlcyB0aGUKKyAgIGNvcnJlY3Qgb3V0cHV0IGZvciBldmVyeSB0ZXN0LiBJdCBj
YW4gYmUgdXNlZCBmb3IgcGVyZiB0ZXN0aW5nLCBiZWNhdXNlCisgICBpdCBpcyBwcmV0dHkgbXVj
aCBhIGxvd2VyIGxpbWl0IG9uIGhvdyBmYXN0IGEgcG9ydCBjYW4gcG9zc2libHkgcnVuLgorCisg
ICBUaGlzIGltcGxlbWVudGF0aW9uIGFjdHMgYXMgYSB3cmFwcGVyIGFyb3VuZCBhIHJlYWwgcG9y
dCAodGhlIHJlYWwgcG9ydAorICAgaXMgaGVsZCBhcyBhIGRlbGVnYXRlIG9iamVjdCkuIFRvIHNw
ZWNpZnkgd2hpY2ggcG9ydCwgdXNlIHRoZSBwb3J0IG5hbWUKKyAgICdkcnlydW4tWFhYJyAoZS5n
LiwgJ2RyeXJ1bi1jaHJvbWl1bS1tYWMtbGVvcGFyZCcpLiBJZiB5b3UgdXNlIGp1c3QKKyAgICdk
cnlydW4nLCBpdCB1c2VzIHRoZSBkZWZhdWx0IHBvcnQuCisKKyAgIE5vdGUgdGhhdCBiZWNhdXNl
IHRoaXMgaXMgcmVhbGx5IGFjdGluZyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSB1bmRlcmx5aW5n
CisgICBwb3J0LCB5b3UgbXVzdCBiZSBhYmxlIHRvIHJ1biB0aGUgdW5kZXJseWluZyBwb3J0IGFz
IHdlbGwKKyAgIChjaGVja19idWlsZCgpIGFuZCBjaGVja19zeXNfZGVwcygpIG11c3QgcGFzcyBh
bmQgYXV4aWxpYXJ5IGJpbmFyaWVzCisgICBsaWtlIGxheW91dF90ZXN0X2hlbHBlciBhbmQgaHR0
cGQgbXVzdCB3b3JrKS4KKworICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIG1vZGlmaWVzIHRo
ZSB0ZXN0IGV4cGVjdGF0aW9ucyBzbyB0aGF0IGFsbAorICAgdGVzdHMgYXJlIGVpdGhlciBTS0lQ
UEVEIG9yIGV4cGVjdGVkIHRvIFBBU1MuIiIiCisKK2ltcG9ydCBiYXNlCitpbXBvcnQgZmFjdG9y
eQorCisKK2NsYXNzIERyeXJ1blBvcnQob2JqZWN0KToKKyAgICAiIiJEcnlydW4gaW1wbGVtZW50
YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAgICAgICBwZnggPSAnZHJ5cnVuLScK
KyAgICAgICAgaWYgcG9ydF9uYW1lLnN0YXJ0c3dpdGgocGZ4KToKKyAgICAgICAgICAgIHBvcnRf
bmFtZSA9IHBvcnRfbmFtZVtsZW4ocGZ4KTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBw
b3J0X25hbWUgPSBOb25lCisgICAgICAgIHNlbGYuX19kZWxlZ2F0ZSA9IGZhY3RvcnkuZ2V0KHBv
cnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAg
ICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQorCisgICAgZGVmIGNo
ZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
ZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHApOgorICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVm
IHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRf
d2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BfaGVs
cGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9odHRwX3NlcnZlcihzZWxm
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcihzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0X2RyaXZlcihzZWxmLCBpbWFnZV9wYXRoLCBv
cHRpb25zKToKKyAgICAgICAgcmV0dXJuIERyeXJ1bkRyaXZlcihzZWxmLCBpbWFnZV9wYXRoLCBv
cHRpb25zKQorCisKK2NsYXNzIERyeXJ1bkRyaXZlcihiYXNlLkRyaXZlcik6CisgICAgIiIiRHJ5
cnVuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSAvIERyaXZlciBpbnRlcmZh
Y2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgaW1hZ2VfcGF0aCwgdGVzdF9k
cml2ZXJfb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYu
X2RyaXZlcl9vcHRpb25zID0gdGVzdF9kcml2ZXJfb3B0aW9ucworICAgICAgICBzZWxmLl9pbWFn
ZV9wYXRoID0gaW1hZ2VfcGF0aAorICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyID0gTm9u
ZQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYg
cmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBydW5fdGVzdChz
ZWxmLCB1cmksIHRpbWVvdXRtcywgaW1hZ2VfaGFzaCk6CisgICAgICAgIHRlc3RfbmFtZSA9IHNl
bGYuX3VyaV90b190ZXN0KHVyaSkKKworICAgICAgICB0ZXh0X2ZpbGVuYW1lID0gc2VsZi5fcG9y
dC5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25hbWUsICcudHh0JykKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgdGV4dF9vdXRwdXQgPSBvcGVuKHRleHRfZmlsZW5hbWUsICdyJykucmVhZCgpCisg
ICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgdGV4dF9vdXRwdXQgPSAnJworCisg
ICAgICAgIGlmIGltYWdlX2hhc2g6CisgICAgICAgICAgICBpbWFnZV9maWxlbmFtZSA9IHNlbGYu
X3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnBuZycpCisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgaW1hZ2UgPSBmaWxlKGltYWdlX2ZpbGVuYW1lLCAncmInKS5y
ZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGltYWdl
ID0gJycKKyAgICAgICAgICAgIGlmIHNlbGYuX2ltYWdlX3BhdGg6CisgICAgICAgICAgICAgICAg
b3V0cHV0X2ZpbGUgPSBmaWxlKHNlbGYuX2ltYWdlX3BhdGgsICd3JykKKyAgICAgICAgICAgICAg
ICBvdXRwdXRfZmlsZS53cml0ZShpbWFnZSkKKyAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZS5j
bG9zZSgpCisgICAgICAgICAgICBoYXNoX2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5leHBlY3RlZF9m
aWxlbmFtZSh0ZXN0X25hbWUsCisgICAgICAgICAgICAgICAgJy5jaGVja3N1bScpCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgaGFzaCA9IGZpbGUoaGFzaF9maWxlbmFtZSwgJ3In
KS5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGhh
c2ggPSAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFzaCA9IE5vbmUKKyAgICAgICAg
cmV0dXJuIChGYWxzZSwgRmFsc2UsIGhhc2gsIHRleHRfb3V0cHV0LCBOb25lKQorCisgICAgZGVm
IHN0b3Aoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfdXJpX3RvX3Rlc3Qoc2VsZiwg
dXJpKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2xheW91dF90ZXN0c19kaXI6CisgICAgICAgICAg
ICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkK
KyAgICAgICAgdGVzdCA9IHVyaQorCisgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8v
LyIpOgorICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnZmlsZTovLycsICcnKQorICAg
ICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDov
LzEyNy4wLjAuMTo4ODgwLyIpOgorICAgICAgICAgICAgIyB3ZWJzb2NrZXQgdGVzdHMKKyAgICAg
ICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODg4MC8nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy8n
KQorICAgICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgi
aHR0cDovLyIpOgorICAgICAgICAgICAgIyByZWd1bGFyIEhUVFAgdGVzdAorICAgICAgICAgICAg
dGVzdCA9IHRlc3QucmVwbGFjZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAwLycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgKyAnL2h0dHAvdGVz
dHMvJykKKyAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dp
dGgoImh0dHBzOi8vIik6CisgICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwczov
LzEyNy4wLjAuMTo4NDQzLycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2xheW91dF90ZXN0c19kaXIgKyAnL2h0dHAvdGVzdHMvJykKKyAgICAgICAgICAgIHJldHVybiB0
ZXN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCd1bmtub3duIHVybCB0eXBlOiAlcycgJSB1cmkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXggY2Yw
Y2M3Mi4uZDllZDkxMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtNTksOSArNTksOSBAQCBkZWYg
Z2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgogICAgIGlmIHBvcnRfdG9fdXNlID09
ICd0ZXN0JzoKICAgICAgICAgaW1wb3J0IHRlc3QKICAgICAgICAgcmV0dXJuIHRlc3QuVGVzdFBv
cnQocG9ydF9uYW1lLCBvcHRpb25zKQotICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgn
cGFzc2luZycpOgotICAgICAgICBpbXBvcnQgcGFzc2luZwotICAgICAgICByZXR1cm4gcGFzc2lu
Zy5QYXNzaW5nUG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgZWxpZiBwb3J0X3RvX3VzZS5z
dGFydHN3aXRoKCdkcnlydW4nKToKKyAgICAgICAgaW1wb3J0IGRyeXJ1bgorICAgICAgICByZXR1
cm4gZHJ5cnVuLkRyeXJ1blBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQogICAgIGVsaWYgcG9ydF90
b191c2Uuc3RhcnRzd2l0aCgnbWFjJyk6CiAgICAgICAgIGltcG9ydCBtYWMKICAgICAgICAgcmV0
dXJuIG1hYy5NYWNQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGFzc2luZy5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGFzc2luZy5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjczNWI0Yi4uMDAwMDAwMAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bhc3NpbmcucHkKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAg
KiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSIiIlRoaXMgaXMgYSB0ZXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFj
ZSB0aGF0IGdlbmVyYXRlcyB0aGUKLSAgIGNvcnJlY3Qgb3V0cHV0IGZvciBldmVyeSB0ZXN0LiBJ
dCBjYW4gYmUgdXNlZCBmb3IgcGVyZiB0ZXN0aW5nLCBiZWNhdXNlCi0gICBpdCBpcyBwcmV0dHkg
bXVjaCBhIGxvd2VyIGxpbWl0IG9uIGhvdyBmYXN0IGEgcG9ydCBjYW4gcG9zc2libHkgcnVuLgot
Ci0gICBUaGlzIGltcGxlbWVudGF0aW9uIGFjdHMgYXMgYSB3cmFwcGVyIGFyb3VuZCBhIHJlYWwg
cG9ydCAodGhlIHJlYWwgcG9ydAotICAgaXMgaGVsZCBhcyBhIGRlbGVnYXRlIG9iamVjdCkuIFRv
IHNwZWNpZnkgd2hpY2ggcG9ydCwgdXNlIHRoZSBwb3J0IG5hbWUKLSAgICdwYXNzaW5nLVhYWCcg
KGUuZy4sICdwYXNzaW5nLWNocm9taXVtLW1hYy1sZW9wYXJkJykuIElmIHlvdSB1c2UganVzdAot
ICAgJ3Bhc3NpbmcnLCBpdCB1c2VzIHRoZSBkZWZhdWx0IHBvcnQuCi0KLSAgIE5vdGUgdGhhdCBi
ZWNhdXNlIHRoaXMgaXMgcmVhbGx5IGFjdGluZyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSB1bmRl
cmx5aW5nCi0gICBwb3J0LCB5b3UgbXVzdCBiZSBhYmxlIHRvIHJ1biB0aGUgdW5kZXJseWluZyBw
b3J0IGFzIHdlbGwKLSAgIChjaGVja19idWlsZCgpIGFuZCBjaGVja19zeXNfZGVwcygpIG11c3Qg
cGFzcyBhbmQgYXV4aWxpYXJ5IGJpbmFyaWVzCi0gICBsaWtlIGxheW91dF90ZXN0X2hlbHBlciBh
bmQgaHR0cGQgbXVzdCB3b3JrKS4KLQotICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIG1vZGlm
aWVzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBzbyB0aGF0IGFsbAotICAgdGVzdHMgYXJlIGVpdGhl
ciBTS0lQUEVEIG9yIGV4cGVjdGVkIHRvIFBBU1MuIiIiCi0KLWltcG9ydCBiYXNlCi1pbXBvcnQg
ZmFjdG9yeQotCi1jbGFzcyBQYXNzaW5nUG9ydChvYmplY3QpOgotICAgICIiIlBhc3NpbmcgaW1w
bGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgotICAgICAgICBwZnggPSAncGFz
c2luZy0nCi0gICAgICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKHBmeCk6Ci0gICAgICAgICAg
ICBwb3J0X25hbWUgPSBwb3J0X25hbWVbbGVuKHBmeCk6XQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgcG9ydF9uYW1lID0gTm9uZQotICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5
LmdldChwb3J0X25hbWUsIG9wdGlvbnMpCi0KLSAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFt
ZSk6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKLQotICAg
IGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucyk6Ci0gICAgICAgIHJl
dHVybiBQYXNzaW5nRHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlvbnMpCi0KLSAgICBkZWYg
dGVzdF9leHBlY3RhdGlvbnMoc2VsZik6Ci0gICAgICAgIGV4cHMgPSBzZWxmLl9fZGVsZWdhdGUu
dGVzdF9leHBlY3RhdGlvbnMoKQotICAgICAgICBza2lwcyA9IFtdCi0gICAgICAgIGZvciBsaW5l
IGluIGV4cHMuc3BsaXQoJ1xuJyk6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQoIlNLSVAiKSAh
PSAtMToKLSAgICAgICAgICAgICAgICBza2lwcy5hcHBlbmQobGluZSkKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihza2lwcykKLQotY2xhc3MgUGFzc2luZ0RyaXZlcihiYXNlLkRyaXZlcik6Ci0g
ICAgIiIiUGFzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgLyBEcml2
ZXIgaW50ZXJmYWNlLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdlX3Bh
dGgsIHRlc3RfZHJpdmVyX29wdGlvbnMpOgotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAg
ICAgICBzZWxmLl9kcml2ZXJfb3B0aW9ucyA9IHRlc3RfZHJpdmVyX29wdGlvbnMKLSAgICAgICAg
c2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKLSAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3Rz
X2RpciA9IE5vbmUKLQotICAgIGRlZiBwb2xsKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQot
Ci0gICAgZGVmIHJldHVybmNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYg
cnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gpOgotICAgICAgICB0ZXN0
X25hbWUgPSBzZWxmLl91cmlfdG9fdGVzdCh1cmkpCi0KLSAgICAgICAgdGV4dF9maWxlbmFtZSA9
IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnR4dCcpCi0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIHRleHRfb3V0cHV0ID0gb3Blbih0ZXh0X2ZpbGVuYW1lLCAncicp
LnJlYWQoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHRleHRfb3V0cHV0
ID0gJycKLQotICAgICAgICBpZiBpbWFnZV9oYXNoOgotICAgICAgICAgICAgaW1hZ2VfZmlsZW5h
bWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy5wbmcnKQotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltYWdlID0gZmlsZShpbWFnZV9maWxlbmFt
ZSwgJ3JiJykucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAg
ICAgICBpbWFnZSA9ICcnCi0gICAgICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgotICAgICAg
ICAgICAgICAgIG91dHB1dF9maWxlID0gZmlsZShzZWxmLl9pbWFnZV9wYXRoLCAndycpCi0gICAg
ICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoaW1hZ2UpCi0gICAgICAgICAgICAgICAgb3V0
cHV0X2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgaGFzaF9maWxlbmFtZSA9IHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICcuY2hlY2tzdW0n
KQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGhhc2ggPSBmaWxlKGhhc2hfZmls
ZW5hbWUsICdyJykucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAg
ICAgICAgICBoYXNoID0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhhc2ggPSBOb25l
Ci0gICAgICAgIHJldHVybiAoRmFsc2UsIEZhbHNlLCBoYXNoLCB0ZXh0X291dHB1dCwgTm9uZSkK
LQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgX3VyaV90b190
ZXN0KHNlbGYsIHVyaSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyOgot
ICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpCi0gICAgICAgIHRlc3QgPSB1cmkKLQotICAgICAgICBpZiB1cmkuc3RhcnRzd2l0
aCgiZmlsZTovLy8iKToKLSAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2ZpbGU6Ly8n
LCAnJykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dp
dGgoImh0dHA6Ly8xMjcuMC4wLjE6ODg4MC8iKToKLSAgICAgICAgICAgICMgd2Vic29ja2V0IHRl
c3RzCi0gICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwOi8vMTI3LjAuMC4xOjg4
ODAvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3Rz
X2RpciArICcvJykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVsaWYgdXJpLnN0
YXJ0c3dpdGgoImh0dHA6Ly8iKToKLSAgICAgICAgICAgICMgcmVndWxhciBIVFRQIHRlc3QKLSAg
ICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC8nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsg
Jy9odHRwL3Rlc3RzLycpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAotICAgICAgICBlbGlmIHVy
aS5zdGFydHN3aXRoKCJodHRwczovLyIpOgotICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFj
ZSgnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy9odHRwL3Rlc3RzLycpCi0gICAgICAgICAg
ICByZXR1cm4gdGVzdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigndW5rbm93biB1cmwgdHlwZTogJXMnICUgdXJpKQotCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCA2ZjBmYWFjLi5mMjA2YjYwIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTU2LDUgKzU2LDIx
IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLS1sb2cnLCAndW5leHBlY3RlZCcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKIAorCitjbGFzcyBEcnlydW5U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAg
ICAgIGltcG9ydCBwZGIKKyAgICAgICAgcGRiLnNldF90cmFjZSgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1tYWMnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuLWNocm9taXVt
LW1hYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCdd
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICdk
cnlydW4tY2hyb21pdW0td2luJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZmFzdC9odG1sJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyct
LXBsYXRmb3JtJywgJ2RyeXJ1bi1jaHJvbWl1bS1saW51eCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKwogaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53730</attachid>
            <date>2010-04-19 15:41:29 -0700</date>
            <delta_ts>2010-04-19 16:32:11 -0700</delta_ts>
            <desc>update w/ feedback from eseidel</desc>
            <filename>wk37782_dryrun.diff</filename>
            <type>text/plain</type>
            <size>17729</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5OThhNmQzLi5mMmNjYWI2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDQt
MTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHMgLSBy
ZXB1cnBvc2UgdGhlICJQYXNzaW5nIiBwb3J0IGFzICJEcnlydW4iIHBvcnQKKyAgICAgICAgdGhh
dCBjYW4gYmUgdXNlZCB0byB0ZXN0IHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGFy
ZSBydW5uaW5nCisgICAgICAgIG9uLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIGJh
c2VsaW5lcyBhbmQgdGVzdGluZyBjb2RlCisgICAgICAgIGNvdmVyYWdlLgorCisgICAgICAgIE5v
dGUgdGhhdCBydW5uaW5nIHRoZSBjb2RlIG9uIHRoZSAid3JvbmciIHBvcnQgcmVxdWlyZXMgZWFj
aAorICAgICAgICBwb3J0LXNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRvIGFjdHVhbGx5IG5vdCBy
ZXF1aXJlIGFueQorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBweXRob24gY29kZSAoZS5nLiwg
dGhlIGNocm9taXVtLXdpbiBwb3J0IG11c3QKKyAgICAgICAgdGVzdCBmb3IgdGhlIGV4aXN0ZW5j
ZSBvZiB3aW5kb3dzIGZ1bmN0aW9ucyBiZWZvcmUgY2FsbGluZyB0aGVtKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc3ODIKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OiBSZW5h
bWVkIGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9w
YXNzaW5nLnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeS5weToKKwogMjAxMC0wNC0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCBm
YmQ2MjU0Li5jYmViMjY3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC0zMjUsNiArMzI1LDEzIEBAIGNsYXNz
IFBvcnQob2JqZWN0KToKICAgICAgICAgVGhpcyBpcyB1c2VkIGJ5IHRoZSByZWJhc2VsaW5pbmcg
dG9vbC4gUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKICAgICAgICAgaWYgdGhlIHBvcnQgZG9l
cyBub3QgdXNlIGV4cGVjdGF0aW9ucyBmaWxlcy4iIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUnKQorCisgICAg
ZGVmIHJlYWRfZmlsZShzZWxmLCBwYXRoLCBtb2RlPSdyJyk6CisgICAgICAgICIiIlJldHVybiB0
aGUgY29udGVudHMgb2YgYSBmaWxlIGFzIGEgc3RyaW5nLiIiIgorICAgICAgICBmID0gb3Blbihw
YXRoLCBtb2RlKQorICAgICAgICBjb250ZW50cyA9IGYucmVhZCgpCisgICAgICAgIGYuY2xvc2Uo
KQorICAgICAgICByZXR1cm4gY29udGVudHMKICAKICAgICBkZWYgcmVtb3ZlX2RpcmVjdG9yeShz
ZWxmLCAqcGF0aCk6CiAgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3Rvcnks
IGV2ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5LgpAQCAtNTc2LDYgKzU4MywxMiBAQCBjbGFz
cyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgZQogICAgICAgICByZXR1cm4g
cmVzdWx0CiAKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cywgbW9kZT0n
dycpOgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4i
IiIKKyAgICAgICAgZiA9IG9wZW4ocGF0aCwgbW9kZSkKKyAgICAgICAgZi53cml0ZShjb250ZW50
cykKKyAgICAgICAgZi5jbG9zZSgpCisKICAgICBfcHJldHR5X3BhdGNoX2Vycm9yX2h0bWwgPSAi
RmFpbGVkIHRvIHJ1biBQcmV0dHlQYXRjaCwgc2VlIGVycm9yIGNvbnNvbGUuIgogCiAgICAgZGVm
IHByZXR0eV9wYXRjaF90ZXh0KHNlbGYsIGRpZmZfcGF0aCk6CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
d2luLnB5CmluZGV4IGFjNGZlNmYuLjJlM2RlODUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2lu
LnB5CkBAIC04Nyw2ICs4Nyw4IEBAIGNsYXNzIENocm9taXVtV2luUG9ydChjaHJvbWl1bS5DaHJv
bWl1bVBvcnQpOgogICAgICAgICByZXR1cm4gJ3dpbicgKyBzZWxmLnZlcnNpb24oKQogCiAgICAg
ZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHN5cywgJ2dldHdpbmRv
d3N2ZXJzaW9uJyk6CisgICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgd2ludmVyID0gc3lz
LmdldHdpbmRvd3N2ZXJzaW9uKCkKICAgICAgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52
ZXJbMV0gPT0gMSk6CiAgICAgICAgICAgICByZXR1cm4gJy03JwpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzAxNWVlCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4u
cHkKQEAgLTAsMCArMSwxNjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisi
IiJUaGlzIGlzIGEgdGVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UgdGhh
dCBnZW5lcmF0ZXMgdGhlCisgICBjb3JyZWN0IG91dHB1dCBmb3IgZXZlcnkgdGVzdC4gSXQgY2Fu
IGJlIHVzZWQgZm9yIHBlcmYgdGVzdGluZywgYmVjYXVzZQorICAgaXQgaXMgcHJldHR5IG11Y2gg
YSBsb3dlciBsaW1pdCBvbiBob3cgZmFzdCBhIHBvcnQgY2FuIHBvc3NpYmx5IHJ1bi4KKworICAg
VGhpcyBpbXBsZW1lbnRhdGlvbiBhY3RzIGFzIGEgd3JhcHBlciBhcm91bmQgYSByZWFsIHBvcnQg
KHRoZSByZWFsIHBvcnQKKyAgIGlzIGhlbGQgYXMgYSBkZWxlZ2F0ZSBvYmplY3QpLiBUbyBzcGVj
aWZ5IHdoaWNoIHBvcnQsIHVzZSB0aGUgcG9ydCBuYW1lCisgICAnZHJ5cnVuLVhYWCcgKGUuZy4s
ICdkcnlydW4tY2hyb21pdW0tbWFjLWxlb3BhcmQnKS4gSWYgeW91IHVzZSBqdXN0CisgICAnZHJ5
cnVuJywgaXQgdXNlcyB0aGUgZGVmYXVsdCBwb3J0LgorCisgICBOb3RlIHRoYXQgYmVjYXVzZSB0
aGlzIGlzIHJlYWxseSBhY3RpbmcgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgdW5kZXJseWluZwor
ICAgcG9ydCwgeW91IG11c3QgYmUgYWJsZSB0byBydW4gdGhlIHVuZGVybHlpbmcgcG9ydCBhcyB3
ZWxsCisgICAoY2hlY2tfYnVpbGQoKSBhbmQgY2hlY2tfc3lzX2RlcHMoKSBtdXN0IHBhc3MgYW5k
IGF1eGlsaWFyeSBiaW5hcmllcworICAgbGlrZSBsYXlvdXRfdGVzdF9oZWxwZXIgYW5kIGh0dHBk
IG11c3Qgd29yaykuCisKKyAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBtb2RpZmllcyB0aGUg
dGVzdCBleHBlY3RhdGlvbnMgc28gdGhhdCBhbGwKKyAgIHRlc3RzIGFyZSBlaXRoZXIgU0tJUFBF
RCBvciBleHBlY3RlZCB0byBQQVNTLiIiIgorCitpbXBvcnQgYmFzZQoraW1wb3J0IGZhY3RvcnkK
KworCitjbGFzcyBEcnlSdW5Qb3J0KG9iamVjdCk6CisgICAgIiIiRHJ5UnVuIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgcGZ4ID0gJ2RyeXJ1bi0nCisg
ICAgICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKHBmeCk6CisgICAgICAgICAgICBwb3J0X25h
bWUgPSBwb3J0X25hbWVbbGVuKHBmeCk6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG9y
dF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5LmdldChwb3J0
X25hbWUsIG9wdGlvbnMpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAg
ICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKKworICAgIGRlZiBjaGVj
a19idWlsZChzZWxmLCBuZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBz
dGFydF9odHRwX3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0X3dl
YnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX2hlbHBl
cihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoc2VsZik6
CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6Cisg
ICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0
aW9ucyk6CisgICAgICAgIHJldHVybiBEcnlydW5Ecml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0
aW9ucykKKworCitjbGFzcyBEcnlydW5Ecml2ZXIoYmFzZS5Ecml2ZXIpOgorICAgICIiIkRyeXJ1
biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgLyBEcml2ZXIgaW50ZXJmYWNl
LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdlX3BhdGgsIHRlc3RfZHJp
dmVyX29wdGlvbnMpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9k
cml2ZXJfb3B0aW9ucyA9IHRlc3RfZHJpdmVyX29wdGlvbnMKKyAgICAgICAgc2VsZi5faW1hZ2Vf
cGF0aCA9IGltYWdlX3BhdGgKKyAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IE5vbmUK
KworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJl
dHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2Vs
ZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gpOgorICAgICAgICB0ZXN0X25hbWUgPSBzZWxm
Ll91cmlfdG9fdGVzdCh1cmkpCisKKyAgICAgICAgdGV4dF9maWxlbmFtZSA9IHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHRleHRfb3V0cHV0ID0gc2VsZi5fcG9ydC5yZWFkX2ZpbGUodGV4dF9maWxlbmFtZSkK
KyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICB0ZXh0X291dHB1dCA9ICcnCisK
KyAgICAgICAgaWYgaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGltYWdlX2ZpbGVuYW1lID0gc2Vs
Zi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25hbWUsICcucG5nJykKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBpbWFnZSA9IHNlbGYuX3BvcnQucmVhZF9maWxlKGltYWdl
X2ZpbGVuYW1lLCAncmInKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAg
ICAgICAgaW1hZ2UgPSAnJworICAgICAgICAgICAgaWYgc2VsZi5faW1hZ2VfcGF0aDoKKyAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0LndyaXRlX2ZpbGUoc2VsZi5faW1hZ2VfcGF0aCwgaW1hZ2Up
CisgICAgICAgICAgICBoYXNoX2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFt
ZSh0ZXN0X25hbWUsCisgICAgICAgICAgICAgICAgJy5jaGVja3N1bScpCisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgaGFzaCA9IHNlbGYuX3BvcnQucmVhZF9maWxlKGhhc2hfZmls
ZW5hbWUpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBoYXNo
ID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhhc2ggPSBOb25lCisgICAgICAgIHJl
dHVybiAoRmFsc2UsIEZhbHNlLCBoYXNoLCB0ZXh0X291dHB1dCwgTm9uZSkKKworICAgIGRlZiBz
dG9wKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3VyaV90b190ZXN0KHNlbGYsIHVy
aSk6CisgICAgICAgICIiIlJldHVybiB0aGUgYmFzZSBsYXlvdXQgdGVzdCBuYW1lIGZvciBhIGdp
dmVuIFVSSS4KKworICAgICAgICBUaGlzIHJldHVybnMgdGhlIHRlc3QgbmFtZSBmb3IgYSBnaXZl
biBVUkksIGUuZy4sIGlmIHlvdSBwYXNzZWQgaW4KKyAgICAgICAgImZpbGU6Ly8vc3JjL0xheW91
dFRlc3RzL2Zhc3QvaHRtbC9rZXlnZW4uaHRtbCIgaXQgd291bGQgcmV0dXJuCisgICAgICAgICJm
YXN0L2h0bWwva2V5Z2VuLmh0bWwiLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2Vs
Zi5fbGF5b3V0X3Rlc3RzX2RpcjoKKyAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIg
PSBzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKQorICAgICAgICB0ZXN0ID0gdXJpCisKKyAg
ICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImZpbGU6Ly8vIik6CisgICAgICAgICAgICB0ZXN0ID0g
dGVzdC5yZXBsYWNlKCdmaWxlOi8vJywgJycpCisgICAgICAgICAgICByZXR1cm4gdGVzdAorICAg
ICAgICBlbGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vMTI3LjAuMC4xOjg4ODAvIik6CisgICAg
ICAgICAgICAjIHdlYnNvY2tldCB0ZXN0cworICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFj
ZSgnaHR0cDovLzEyNy4wLjAuMTo4ODgwLycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgKyAnLycpCisgICAgICAgICAgICByZXR1cm4gdGVz
dAorICAgICAgICBlbGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vIik6CisgICAgICAgICAgICAj
IHJlZ3VsYXIgSFRUUCB0ZXN0CisgICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fbGF5b3V0X3Rlc3RzX2RpciArICcvaHR0cC90ZXN0cy8nKQorICAgICAgICAgICAgcmV0dXJu
IHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKKyAgICAgICAg
ICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciArICcvaHR0
cC90ZXN0cy8nKQorICAgICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vua25vd24gdXJsIHR5cGU6ICVzJyAl
IHVyaSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvZmFjdG9yeS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQppbmRleCBjZjBjYzcyLi45NWI5MGRhIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnku
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9m
YWN0b3J5LnB5CkBAIC01OSw5ICs1OSw5IEBAIGRlZiBnZXQocG9ydF9uYW1lPU5vbmUsIG9wdGlv
bnM9Tm9uZSk6CiAgICAgaWYgcG9ydF90b191c2UgPT0gJ3Rlc3QnOgogICAgICAgICBpbXBvcnQg
dGVzdAogICAgICAgICByZXR1cm4gdGVzdC5UZXN0UG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCi0g
ICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdwYXNzaW5nJyk6Ci0gICAgICAgIGltcG9y
dCBwYXNzaW5nCi0gICAgICAgIHJldHVybiBwYXNzaW5nLlBhc3NpbmdQb3J0KHBvcnRfbmFtZSwg
b3B0aW9ucykKKyAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2RyeXJ1bicpOgorICAg
ICAgICBpbXBvcnQgZHJ5cnVuCisgICAgICAgIHJldHVybiBkcnlydW4uRHJ5UnVuUG9ydChwb3J0
X25hbWUsIG9wdGlvbnMpCiAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtYWMnKToK
ICAgICAgICAgaW1wb3J0IG1hYwogICAgICAgICByZXR1cm4gbWFjLk1hY1BvcnQocG9ydF9uYW1l
LCBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9wYXNzaW5nLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9wYXNzaW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyNzM1YjRiLi4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvcGFzc2luZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0j
IG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1l
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGhpcyBpcyBhIHRlc3QgaW1w
bGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlIHRoYXQgZ2VuZXJhdGVzIHRoZQotICAg
Y29ycmVjdCBvdXRwdXQgZm9yIGV2ZXJ5IHRlc3QuIEl0IGNhbiBiZSB1c2VkIGZvciBwZXJmIHRl
c3RpbmcsIGJlY2F1c2UKLSAgIGl0IGlzIHByZXR0eSBtdWNoIGEgbG93ZXIgbGltaXQgb24gaG93
IGZhc3QgYSBwb3J0IGNhbiBwb3NzaWJseSBydW4uCi0KLSAgIFRoaXMgaW1wbGVtZW50YXRpb24g
YWN0cyBhcyBhIHdyYXBwZXIgYXJvdW5kIGEgcmVhbCBwb3J0ICh0aGUgcmVhbCBwb3J0Ci0gICBp
cyBoZWxkIGFzIGEgZGVsZWdhdGUgb2JqZWN0KS4gVG8gc3BlY2lmeSB3aGljaCBwb3J0LCB1c2Ug
dGhlIHBvcnQgbmFtZQotICAgJ3Bhc3NpbmctWFhYJyAoZS5nLiwgJ3Bhc3NpbmctY2hyb21pdW0t
bWFjLWxlb3BhcmQnKS4gSWYgeW91IHVzZSBqdXN0Ci0gICAncGFzc2luZycsIGl0IHVzZXMgdGhl
IGRlZmF1bHQgcG9ydC4KLQotICAgTm90ZSB0aGF0IGJlY2F1c2UgdGhpcyBpcyByZWFsbHkgYWN0
aW5nIGFzIGEgd3JhcHBlciBhcm91bmQgdGhlIHVuZGVybHlpbmcKLSAgIHBvcnQsIHlvdSBtdXN0
IGJlIGFibGUgdG8gcnVuIHRoZSB1bmRlcmx5aW5nIHBvcnQgYXMgd2VsbAotICAgKGNoZWNrX2J1
aWxkKCkgYW5kIGNoZWNrX3N5c19kZXBzKCkgbXVzdCBwYXNzIGFuZCBhdXhpbGlhcnkgYmluYXJp
ZXMKLSAgIGxpa2UgbGF5b3V0X3Rlc3RfaGVscGVyIGFuZCBodHRwZCBtdXN0IHdvcmspLgotCi0g
ICBUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gbW9kaWZpZXMgdGhlIHRlc3QgZXhwZWN0YXRpb25z
IHNvIHRoYXQgYWxsCi0gICB0ZXN0cyBhcmUgZWl0aGVyIFNLSVBQRUQgb3IgZXhwZWN0ZWQgdG8g
UEFTUy4iIiIKLQotaW1wb3J0IGJhc2UKLWltcG9ydCBmYWN0b3J5Ci0KLWNsYXNzIFBhc3NpbmdQ
b3J0KG9iamVjdCk6Ci0gICAgIiIiUGFzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBp
bnRlcmZhY2UuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9w
dGlvbnM9Tm9uZSk6Ci0gICAgICAgIHBmeCA9ICdwYXNzaW5nLScKLSAgICAgICAgaWYgcG9ydF9u
YW1lLnN0YXJ0c3dpdGgocGZ4KToKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZVts
ZW4ocGZ4KTpdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwb3J0X25hbWUgPSBOb25lCi0g
ICAgICAgIHNlbGYuX19kZWxlZ2F0ZSA9IGZhY3RvcnkuZ2V0KHBvcnRfbmFtZSwgb3B0aW9ucykK
LQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIGdldGF0
dHIoc2VsZi5fX2RlbGVnYXRlLCBuYW1lKQotCi0gICAgZGVmIHN0YXJ0X2RyaXZlcihzZWxmLCBp
bWFnZV9wYXRoLCBvcHRpb25zKToKLSAgICAgICAgcmV0dXJuIFBhc3NpbmdEcml2ZXIoc2VsZiwg
aW1hZ2VfcGF0aCwgb3B0aW9ucykKLQotICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToK
LSAgICAgICAgZXhwcyA9IHNlbGYuX19kZWxlZ2F0ZS50ZXN0X2V4cGVjdGF0aW9ucygpCi0gICAg
ICAgIHNraXBzID0gW10KLSAgICAgICAgZm9yIGxpbmUgaW4gZXhwcy5zcGxpdCgnXG4nKToKLSAg
ICAgICAgICAgIGlmIGxpbmUuZmluZCgiU0tJUCIpICE9IC0xOgotICAgICAgICAgICAgICAgIHNr
aXBzLmFwcGVuZChsaW5lKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNraXBzKQotCi1jbGFz
cyBQYXNzaW5nRHJpdmVyKGJhc2UuRHJpdmVyKToKLSAgICAiIiJQYXNzaW5nIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSAvIERyaXZlciBpbnRlcmZhY2UuIiIiCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgaW1hZ2VfcGF0aCwgdGVzdF9kcml2ZXJfb3B0aW9ucyk6
Ci0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX2RyaXZlcl9vcHRpb25z
ID0gdGVzdF9kcml2ZXJfb3B0aW9ucwotICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2Vf
cGF0aAotICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyID0gTm9uZQotCi0gICAgZGVmIHBv
bGwoc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgcmV0dXJuY29kZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIDAKLQotICAgIGRlZiBydW5fdGVzdChzZWxmLCB1cmksIHRpbWVv
dXRtcywgaW1hZ2VfaGFzaCk6Ci0gICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3VyaV90b190ZXN0
KHVyaSkKLQotICAgICAgICB0ZXh0X2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxl
bmFtZSh0ZXN0X25hbWUsICcudHh0JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGV4dF9v
dXRwdXQgPSBvcGVuKHRleHRfZmlsZW5hbWUsICdyJykucmVhZCgpCi0gICAgICAgIGV4Y2VwdCBJ
T0Vycm9yOgotICAgICAgICAgICAgdGV4dF9vdXRwdXQgPSAnJwotCi0gICAgICAgIGlmIGltYWdl
X2hhc2g6Ci0gICAgICAgICAgICBpbWFnZV9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRf
ZmlsZW5hbWUodGVzdF9uYW1lLCAnLnBuZycpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgaW1hZ2UgPSBmaWxlKGltYWdlX2ZpbGVuYW1lLCAncmInKS5yZWFkKCkKLSAgICAgICAg
ICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgIGltYWdlID0gJycKLSAgICAgICAg
ICAgIGlmIHNlbGYuX2ltYWdlX3BhdGg6Ci0gICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGUgPSBm
aWxlKHNlbGYuX2ltYWdlX3BhdGgsICd3JykKLSAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZS53
cml0ZShpbWFnZSkKLSAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZS5jbG9zZSgpCi0gICAgICAg
ICAgICBoYXNoX2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZSh0ZXN0X25h
bWUsCi0gICAgICAgICAgICAgICAgJy5jaGVja3N1bScpCi0gICAgICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICAgICAgaGFzaCA9IGZpbGUoaGFzaF9maWxlbmFtZSwgJ3InKS5yZWFkKCkKLSAgICAg
ICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgIGhhc2ggPSAnJwotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgaGFzaCA9IE5vbmUKLSAgICAgICAgcmV0dXJuIChGYWxzZSwg
RmFsc2UsIGhhc2gsIHRleHRfb3V0cHV0LCBOb25lKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0g
ICAgICAgIHBhc3MKLQotICAgIGRlZiBfdXJpX3RvX3Rlc3Qoc2VsZiwgdXJpKToKLSAgICAgICAg
aWYgbm90IHNlbGYuX2xheW91dF90ZXN0c19kaXI6Ci0gICAgICAgICAgICBzZWxmLl9sYXlvdXRf
dGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgdGVzdCA9
IHVyaQotCi0gICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8vLyIpOgotICAgICAgICAg
ICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnZmlsZTovLycsICcnKQotICAgICAgICAgICAgcmV0dXJu
IHRlc3QKLSAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLzEyNy4wLjAuMTo4ODgw
LyIpOgotICAgICAgICAgICAgIyB3ZWJzb2NrZXQgdGVzdHMKLSAgICAgICAgICAgIHRlc3QgPSB0
ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODg4MC8nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy8nKQotICAgICAgICAgICAg
cmV0dXJuIHRlc3QKLSAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLyIpOgotICAg
ICAgICAgICAgIyByZWd1bGFyIEhUVFAgdGVzdAotICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVw
bGFjZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAwLycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgKyAnL2h0dHAvdGVzdHMvJykKLSAgICAgICAg
ICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHBzOi8vIik6
Ci0gICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwczovLzEyNy4wLjAuMTo4NDQz
LycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19k
aXIgKyAnL2h0dHAvdGVzdHMvJykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1bmtub3duIHVybCB0
eXBlOiAlcycgJSB1cmkpCi0KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5CmluZGV4IDZmMGZhYWMuLmYyMDZiNjAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weQpAQCAtNTYsNSArNTYsMjEgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWxv
ZycsICd1bmV4cGVjdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
ZmFzdC9odG1sJ10pKQogCisKK2NsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHBkYgorICAgICAgICBw
ZGIuc2V0X3RyYWNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1w
bGF0Zm9ybScsICdkcnlydW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdmYXN0L2h0bWwnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0t
cGxhdGZvcm0nLCAnZHJ5cnVuLW1hYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2Zhc3QvaHRtbCddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVu
KFsnLS1wbGF0Zm9ybScsICdkcnlydW4tY2hyb21pdW0tbWFjJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1jaHJvbWl1bS13aW4nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuLWNocm9t
aXVtLWxpbnV4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9o
dG1sJ10pKQorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4o
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53736</attachid>
            <date>2010-04-19 16:32:11 -0700</date>
            <delta_ts>2010-04-19 17:03:01 -0700</delta_ts>
            <desc>more feedback from eseidel</desc>
            <filename>wk37782_dryrun.diff</filename>
            <type>text/plain</type>
            <size>17826</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5OThhNmQzLi5mMmNjYWI2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDQt
MTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHMgLSBy
ZXB1cnBvc2UgdGhlICJQYXNzaW5nIiBwb3J0IGFzICJEcnlydW4iIHBvcnQKKyAgICAgICAgdGhh
dCBjYW4gYmUgdXNlZCB0byB0ZXN0IHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGFy
ZSBydW5uaW5nCisgICAgICAgIG9uLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIGJh
c2VsaW5lcyBhbmQgdGVzdGluZyBjb2RlCisgICAgICAgIGNvdmVyYWdlLgorCisgICAgICAgIE5v
dGUgdGhhdCBydW5uaW5nIHRoZSBjb2RlIG9uIHRoZSAid3JvbmciIHBvcnQgcmVxdWlyZXMgZWFj
aAorICAgICAgICBwb3J0LXNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRvIGFjdHVhbGx5IG5vdCBy
ZXF1aXJlIGFueQorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBweXRob24gY29kZSAoZS5nLiwg
dGhlIGNocm9taXVtLXdpbiBwb3J0IG11c3QKKyAgICAgICAgdGVzdCBmb3IgdGhlIGV4aXN0ZW5j
ZSBvZiB3aW5kb3dzIGZ1bmN0aW9ucyBiZWZvcmUgY2FsbGluZyB0aGVtKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc3ODIKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OiBSZW5h
bWVkIGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9w
YXNzaW5nLnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeS5weToKKwogMjAxMC0wNC0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCBm
YmQ2MjU0Li4yMjUxZDgxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC0zMjUsNiArMzI1LDIwIEBAIGNsYXNz
IFBvcnQob2JqZWN0KToKICAgICAgICAgVGhpcyBpcyB1c2VkIGJ5IHRoZSByZWJhc2VsaW5pbmcg
dG9vbC4gUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKICAgICAgICAgaWYgdGhlIHBvcnQgZG9l
cyBub3QgdXNlIGV4cGVjdGF0aW9ucyBmaWxlcy4iIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUnKQorCisgICAg
ZGVmIHJlYWRfZmlsZShzZWxmLCBwYXRoLCBtb2RlPSdyJyk6CisgICAgICAgICIiIlJldHVybiB0
aGUgY29udGVudHMgb2YgYSBmaWxlIGFzIGEgc3RyaW5nLgorCisgICAgICAgIFJldHVybnMgJycg
aWYgYW55dGhpbmcgZ29lcyB3cm9uZywgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBJT0Vycm9yLgor
CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihwYXRoLCBt
b2RlKQorICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9z
ZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgY29udGVudHMgPSAnJwor
ICAgICAgICByZXR1cm4gY29udGVudHMKICAKICAgICBkZWYgcmVtb3ZlX2RpcmVjdG9yeShzZWxm
LCAqcGF0aCk6CiAgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3RvcnksIGV2
ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5LgpAQCAtNTc2LDYgKzU5MCwxOSBAQCBjbGFzcyBQ
b3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgZQogICAgICAgICByZXR1cm4gcmVz
dWx0CiAKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cywgbW9kZT0ndycp
OgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4KKwor
ICAgICAgICBSZXR1cm5zIG5vdGhpbmcgaWYgdGhlIHdyaXRlIGZhaWxzLCBpbnN0ZWFkIG9mIHJh
aXNpbmcgYW4gSU9FcnJvci4KKworICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgZiA9IG9wZW4ocGF0aCwgbW9kZSkKKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCisg
ICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAg
ICBwYXNzCisKICAgICBfcHJldHR5X3BhdGNoX2Vycm9yX2h0bWwgPSAiRmFpbGVkIHRvIHJ1biBQ
cmV0dHlQYXRjaCwgc2VlIGVycm9yIGNvbnNvbGUuIgogCiAgICAgZGVmIHByZXR0eV9wYXRjaF90
ZXh0KHNlbGYsIGRpZmZfcGF0aCk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CmluZGV4IGFj
NGZlNmYuLjJlM2RlODUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CkBAIC04Nyw2ICs4
Nyw4IEBAIGNsYXNzIENocm9taXVtV2luUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAg
ICAgICByZXR1cm4gJ3dpbicgKyBzZWxmLnZlcnNpb24oKQogCiAgICAgZGVmIHZlcnNpb24oc2Vs
Zik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHN5cywgJ2dldHdpbmRvd3N2ZXJzaW9uJyk6Cisg
ICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgd2ludmVyID0gc3lzLmdldHdpbmRvd3N2ZXJz
aW9uKCkKICAgICAgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMSk6CiAg
ICAgICAgICAgICByZXR1cm4gJy03JwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xMTc2OGU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKQEAgLTAsMCArMSwx
NTkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xl
IG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIGlzIGEgdGVz
dCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UgdGhhdCBnZW5lcmF0ZXMgdGhl
CisgICBjb3JyZWN0IG91dHB1dCBmb3IgZXZlcnkgdGVzdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHBl
cmYgdGVzdGluZywgYmVjYXVzZQorICAgaXQgaXMgcHJldHR5IG11Y2ggYSBsb3dlciBsaW1pdCBv
biBob3cgZmFzdCBhIHBvcnQgY2FuIHBvc3NpYmx5IHJ1bi4KKworICAgVGhpcyBpbXBsZW1lbnRh
dGlvbiBhY3RzIGFzIGEgd3JhcHBlciBhcm91bmQgYSByZWFsIHBvcnQgKHRoZSByZWFsIHBvcnQK
KyAgIGlzIGhlbGQgYXMgYSBkZWxlZ2F0ZSBvYmplY3QpLiBUbyBzcGVjaWZ5IHdoaWNoIHBvcnQs
IHVzZSB0aGUgcG9ydCBuYW1lCisgICAnZHJ5cnVuLVhYWCcgKGUuZy4sICdkcnlydW4tY2hyb21p
dW0tbWFjLWxlb3BhcmQnKS4gSWYgeW91IHVzZSBqdXN0CisgICAnZHJ5cnVuJywgaXQgdXNlcyB0
aGUgZGVmYXVsdCBwb3J0LgorCisgICBOb3RlIHRoYXQgYmVjYXVzZSB0aGlzIGlzIHJlYWxseSBh
Y3RpbmcgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgdW5kZXJseWluZworICAgcG9ydCwgeW91IG11
c3QgYmUgYWJsZSB0byBydW4gdGhlIHVuZGVybHlpbmcgcG9ydCBhcyB3ZWxsCisgICAoY2hlY2tf
YnVpbGQoKSBhbmQgY2hlY2tfc3lzX2RlcHMoKSBtdXN0IHBhc3MgYW5kIGF1eGlsaWFyeSBiaW5h
cmllcworICAgbGlrZSBsYXlvdXRfdGVzdF9oZWxwZXIgYW5kIGh0dHBkIG11c3Qgd29yaykuCisK
KyAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBtb2RpZmllcyB0aGUgdGVzdCBleHBlY3RhdGlv
bnMgc28gdGhhdCBhbGwKKyAgIHRlc3RzIGFyZSBlaXRoZXIgU0tJUFBFRCBvciBleHBlY3RlZCB0
byBQQVNTLiIiIgorCitpbXBvcnQgYmFzZQoraW1wb3J0IGZhY3RvcnkKKworCitjbGFzcyBEcnlS
dW5Qb3J0KG9iamVjdCk6CisgICAgIiIiRHJ5UnVuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0
IGludGVyZmFjZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lKToKKyAgICAgICAgcGZ4ID0gJ2RyeXJ1bi0nCisgICAgICAgIGlmIHBvcnRf
bmFtZS5zdGFydHN3aXRoKHBmeCk6CisgICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWVb
bGVuKHBmeCk6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG9ydF9uYW1lID0gTm9uZQor
ICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5LmdldChwb3J0X25hbWUsIG9wdGlvbnMp
CisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBnZXRh
dHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKKworICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBu
ZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja19zeXNfZGVw
cyhzZWxmLCBuZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdGFy
dF9oZWxwZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF9odHRwX3NlcnZl
cihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIo
c2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MK
KworICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucyk6CisgICAgICAg
IHJldHVybiBEcnlydW5Ecml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucykKKworCitjbGFz
cyBEcnlydW5Ecml2ZXIoYmFzZS5Ecml2ZXIpOgorICAgICIiIkRyeXJ1biBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgRHVtcFJlbmRlclRyZWUgLyBEcml2ZXIgaW50ZXJmYWNlLiIiIgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdlX3BhdGgsIHRlc3RfZHJpdmVyX29wdGlvbnMpOgor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9kcml2ZXJfb3B0aW9ucyA9
IHRlc3RfZHJpdmVyX29wdGlvbnMKKyAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3Bh
dGgKKyAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IE5vbmUKKworICAgIGRlZiBwb2xs
KHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJldHVybmNvZGUoc2VsZik6
CisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0
bXMsIGltYWdlX2hhc2gpOgorICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl91cmlfdG9fdGVzdCh1
cmkpCisKKyAgICAgICAgdGV4dF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5h
bWUodGVzdF9uYW1lLCAnLnR4dCcpCisgICAgICAgIHRleHRfb3V0cHV0ID0gc2VsZi5fcG9ydC5y
ZWFkX2ZpbGUodGV4dF9maWxlbmFtZSkKKworICAgICAgICBpZiBpbWFnZV9oYXNoOgorICAgICAg
ICAgICAgaW1hZ2VfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3Rf
bmFtZSwgJy5wbmcnKQorICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLl9wb3J0LnJlYWRfZmlsZShp
bWFnZV9maWxlbmFtZSwgJ3JiJykKKyAgICAgICAgICAgIGlmIHNlbGYuX2ltYWdlX3BhdGg6Cisg
ICAgICAgICAgICAgICAgc2VsZi5fcG9ydC53cml0ZV9maWxlKHNlbGYuX2ltYWdlX3BhdGgsIGlt
YWdlKQorICAgICAgICAgICAgaGFzaF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmls
ZW5hbWUodGVzdF9uYW1lLAorICAgICAgICAgICAgICAgICcuY2hlY2tzdW0nKQorICAgICAgICAg
ICAgaGFzaCA9IHNlbGYuX3BvcnQucmVhZF9maWxlKGhhc2hfZmlsZW5hbWUpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBoYXNoID0gTm9uZQorICAgICAgICByZXR1cm4gKEZhbHNlLCBGYWxz
ZSwgaGFzaCwgdGV4dF9vdXRwdXQsIE5vbmUpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIF91cmlfdG9fdGVzdChzZWxmLCB1cmkpOgorICAgICAgICAiIiJS
ZXR1cm4gdGhlIGJhc2UgbGF5b3V0IHRlc3QgbmFtZSBmb3IgYSBnaXZlbiBVUkkuCisKKyAgICAg
ICAgVGhpcyByZXR1cm5zIHRoZSB0ZXN0IG5hbWUgZm9yIGEgZ2l2ZW4gVVJJLCBlLmcuLCBpZiB5
b3UgcGFzc2VkIGluCisgICAgICAgICJmaWxlOi8vL3NyYy9MYXlvdXRUZXN0cy9mYXN0L2h0bWwv
a2V5Z2VuLmh0bWwiIGl0IHdvdWxkIHJldHVybgorICAgICAgICAiZmFzdC9odG1sL2tleWdlbi5o
dG1sIi4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2xheW91dF90ZXN0c19k
aXI6CisgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlv
dXRfdGVzdHNfZGlyKCkKKyAgICAgICAgdGVzdCA9IHVyaQorCisgICAgICAgIGlmIHVyaS5zdGFy
dHN3aXRoKCJmaWxlOi8vLyIpOgorICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnZmls
ZTovLycsICcnKQorICAgICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3Rh
cnRzd2l0aCgiaHR0cDovLzEyNy4wLjAuMTo4ODgwLyIpOgorICAgICAgICAgICAgIyB3ZWJzb2Nr
ZXQgdGVzdHMKKyAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4w
LjE6ODg4MC8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRf
dGVzdHNfZGlyICsgJy8nKQorICAgICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1
cmkuc3RhcnRzd2l0aCgiaHR0cDovLyIpOgorICAgICAgICAgICAgIyByZWd1bGFyIEhUVFAgdGVz
dAorICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAw
LycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19k
aXIgKyAnL2h0dHAvdGVzdHMvJykKKyAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgIGVs
aWYgdXJpLnN0YXJ0c3dpdGgoImh0dHBzOi8vIik6CisgICAgICAgICAgICB0ZXN0ID0gdGVzdC5y
ZXBsYWNlKCdodHRwczovLzEyNy4wLjAuMTo4NDQzLycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgKyAnL2h0dHAvdGVzdHMvJykKKyAgICAg
ICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yKCd1bmtub3duIHVybCB0eXBlOiAlcycgJSB1cmkpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnku
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rv
cnkucHkKaW5kZXggY2YwY2M3Mi4uOTViOTBkYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtNTks
OSArNTksOSBAQCBkZWYgZ2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgogICAgIGlm
IHBvcnRfdG9fdXNlID09ICd0ZXN0JzoKICAgICAgICAgaW1wb3J0IHRlc3QKICAgICAgICAgcmV0
dXJuIHRlc3QuVGVzdFBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQotICAgIGVsaWYgcG9ydF90b191
c2Uuc3RhcnRzd2l0aCgncGFzc2luZycpOgotICAgICAgICBpbXBvcnQgcGFzc2luZwotICAgICAg
ICByZXR1cm4gcGFzc2luZy5QYXNzaW5nUG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgZWxp
ZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdkcnlydW4nKToKKyAgICAgICAgaW1wb3J0IGRyeXJ1
bgorICAgICAgICByZXR1cm4gZHJ5cnVuLkRyeVJ1blBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQog
ICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgnbWFjJyk6CiAgICAgICAgIGltcG9ydCBt
YWMKICAgICAgICAgcmV0dXJuIG1hYy5NYWNQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGFz
c2luZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
cGFzc2luZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjczNWI0Yi4uMDAwMDAw
MAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bh
c3NpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJp
YnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRoaXMgaXMgYSB0ZXN0IGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBQb3J0IGludGVyZmFjZSB0aGF0IGdlbmVyYXRlcyB0aGUKLSAgIGNvcnJlY3Qgb3V0cHV0IGZv
ciBldmVyeSB0ZXN0LiBJdCBjYW4gYmUgdXNlZCBmb3IgcGVyZiB0ZXN0aW5nLCBiZWNhdXNlCi0g
ICBpdCBpcyBwcmV0dHkgbXVjaCBhIGxvd2VyIGxpbWl0IG9uIGhvdyBmYXN0IGEgcG9ydCBjYW4g
cG9zc2libHkgcnVuLgotCi0gICBUaGlzIGltcGxlbWVudGF0aW9uIGFjdHMgYXMgYSB3cmFwcGVy
IGFyb3VuZCBhIHJlYWwgcG9ydCAodGhlIHJlYWwgcG9ydAotICAgaXMgaGVsZCBhcyBhIGRlbGVn
YXRlIG9iamVjdCkuIFRvIHNwZWNpZnkgd2hpY2ggcG9ydCwgdXNlIHRoZSBwb3J0IG5hbWUKLSAg
ICdwYXNzaW5nLVhYWCcgKGUuZy4sICdwYXNzaW5nLWNocm9taXVtLW1hYy1sZW9wYXJkJykuIElm
IHlvdSB1c2UganVzdAotICAgJ3Bhc3NpbmcnLCBpdCB1c2VzIHRoZSBkZWZhdWx0IHBvcnQuCi0K
LSAgIE5vdGUgdGhhdCBiZWNhdXNlIHRoaXMgaXMgcmVhbGx5IGFjdGluZyBhcyBhIHdyYXBwZXIg
YXJvdW5kIHRoZSB1bmRlcmx5aW5nCi0gICBwb3J0LCB5b3UgbXVzdCBiZSBhYmxlIHRvIHJ1biB0
aGUgdW5kZXJseWluZyBwb3J0IGFzIHdlbGwKLSAgIChjaGVja19idWlsZCgpIGFuZCBjaGVja19z
eXNfZGVwcygpIG11c3QgcGFzcyBhbmQgYXV4aWxpYXJ5IGJpbmFyaWVzCi0gICBsaWtlIGxheW91
dF90ZXN0X2hlbHBlciBhbmQgaHR0cGQgbXVzdCB3b3JrKS4KLQotICAgVGhpcyBpbXBsZW1lbnRh
dGlvbiBhbHNvIG1vZGlmaWVzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBzbyB0aGF0IGFsbAotICAg
dGVzdHMgYXJlIGVpdGhlciBTS0lQUEVEIG9yIGV4cGVjdGVkIHRvIFBBU1MuIiIiCi0KLWltcG9y
dCBiYXNlCi1pbXBvcnQgZmFjdG9yeQotCi1jbGFzcyBQYXNzaW5nUG9ydChvYmplY3QpOgotICAg
ICIiIlBhc3NpbmcgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgotCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgotICAg
ICAgICBwZnggPSAncGFzc2luZy0nCi0gICAgICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKHBm
eCk6Ci0gICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWVbbGVuKHBmeCk6XQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgcG9ydF9uYW1lID0gTm9uZQotICAgICAgICBzZWxmLl9fZGVs
ZWdhdGUgPSBmYWN0b3J5LmdldChwb3J0X25hbWUsIG9wdGlvbnMpCi0KLSAgICBkZWYgX19nZXRh
dHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0
ZSwgbmFtZSkKLQotICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9u
cyk6Ci0gICAgICAgIHJldHVybiBQYXNzaW5nRHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlv
bnMpCi0KLSAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6Ci0gICAgICAgIGV4cHMgPSBz
ZWxmLl9fZGVsZWdhdGUudGVzdF9leHBlY3RhdGlvbnMoKQotICAgICAgICBza2lwcyA9IFtdCi0g
ICAgICAgIGZvciBsaW5lIGluIGV4cHMuc3BsaXQoJ1xuJyk6Ci0gICAgICAgICAgICBpZiBsaW5l
LmZpbmQoIlNLSVAiKSAhPSAtMToKLSAgICAgICAgICAgICAgICBza2lwcy5hcHBlbmQobGluZSkK
LSAgICAgICAgcmV0dXJuICdcbicuam9pbihza2lwcykKLQotY2xhc3MgUGFzc2luZ0RyaXZlcihi
YXNlLkRyaXZlcik6Ci0gICAgIiIiUGFzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJl
bmRlclRyZWUgLyBEcml2ZXIgaW50ZXJmYWNlLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIGltYWdlX3BhdGgsIHRlc3RfZHJpdmVyX29wdGlvbnMpOgotICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAotICAgICAgICBzZWxmLl9kcml2ZXJfb3B0aW9ucyA9IHRlc3RfZHJpdmVyX29w
dGlvbnMKLSAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKLSAgICAgICAgc2Vs
Zi5fbGF5b3V0X3Rlc3RzX2RpciA9IE5vbmUKLQotICAgIGRlZiBwb2xsKHNlbGYpOgotICAgICAg
ICByZXR1cm4gTm9uZQotCi0gICAgZGVmIHJldHVybmNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVy
biAwCi0KLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gp
OgotICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl91cmlfdG9fdGVzdCh1cmkpCi0KLSAgICAgICAg
dGV4dF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAn
LnR4dCcpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRleHRfb3V0cHV0ID0gb3Blbih0ZXh0
X2ZpbGVuYW1lLCAncicpLnJlYWQoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAg
ICAgIHRleHRfb3V0cHV0ID0gJycKLQotICAgICAgICBpZiBpbWFnZV9oYXNoOgotICAgICAgICAg
ICAgaW1hZ2VfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFt
ZSwgJy5wbmcnKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltYWdlID0gZmls
ZShpbWFnZV9maWxlbmFtZSwgJ3JiJykucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJv
cjoKLSAgICAgICAgICAgICAgICBpbWFnZSA9ICcnCi0gICAgICAgICAgICBpZiBzZWxmLl9pbWFn
ZV9wYXRoOgotICAgICAgICAgICAgICAgIG91dHB1dF9maWxlID0gZmlsZShzZWxmLl9pbWFnZV9w
YXRoLCAndycpCi0gICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoaW1hZ2UpCi0gICAg
ICAgICAgICAgICAgb3V0cHV0X2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgaGFzaF9maWxlbmFt
ZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLAotICAgICAgICAgICAg
ICAgICcuY2hlY2tzdW0nKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGhhc2gg
PSBmaWxlKGhhc2hfZmlsZW5hbWUsICdyJykucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9F
cnJvcjoKLSAgICAgICAgICAgICAgICBoYXNoID0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIGhhc2ggPSBOb25lCi0gICAgICAgIHJldHVybiAoRmFsc2UsIEZhbHNlLCBoYXNoLCB0ZXh0
X291dHB1dCwgTm9uZSkKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAg
ICBkZWYgX3VyaV90b190ZXN0KHNlbGYsIHVyaSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9sYXlv
dXRfdGVzdHNfZGlyOgotICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCi0gICAgICAgIHRlc3QgPSB1cmkKLQotICAgICAgICBp
ZiB1cmkuc3RhcnRzd2l0aCgiZmlsZTovLy8iKToKLSAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJl
cGxhY2UoJ2ZpbGU6Ly8nLCAnJykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVs
aWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8xMjcuMC4wLjE6ODg4MC8iKToKLSAgICAgICAgICAg
ICMgd2Vic29ja2V0IHRlc3RzCi0gICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRw
Oi8vMTI3LjAuMC4xOjg4ODAvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fbGF5b3V0X3Rlc3RzX2RpciArICcvJykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAg
ICAgIGVsaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToKLSAgICAgICAgICAgICMgcmVndWxh
ciBIVFRQIHRlc3QKLSAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcu
MC4wLjE6ODAwMC8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlv
dXRfdGVzdHNfZGlyICsgJy9odHRwL3Rlc3RzLycpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAot
ICAgICAgICBlbGlmIHVyaS5zdGFydHN3aXRoKCJodHRwczovLyIpOgotICAgICAgICAgICAgdGVz
dCA9IHRlc3QucmVwbGFjZSgnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My8nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy9odHRwL3Rlc3Rz
LycpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5rbm93biB1cmwgdHlwZTogJXMnICUgdXJpKQot
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCA2ZjBmYWFj
Li5mMjA2YjYwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkK
QEAgLTU2LDUgKzU2LDIxIEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1sb2cnLCAndW5leHBlY3RlZCcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKIAor
CitjbGFzcyBEcnlydW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNp
Y3Moc2VsZik6CisgICAgICAgIGltcG9ydCBwZGIKKyAgICAgICAgcGRiLnNldF90cmFjZSgpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVu
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1
bi1tYWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwn
XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAn
ZHJ5cnVuLWNocm9taXVtLW1hYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2Zhc3QvaHRtbCddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsn
LS1wbGF0Zm9ybScsICdkcnlydW4tY2hyb21pdW0td2luJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
cGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1jaHJvbWl1bS1saW51eCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKwogaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkK
</data>
<flag name="review"
          id="37529"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53742</attachid>
            <date>2010-04-19 17:03:01 -0700</date>
            <delta_ts>2010-04-19 17:06:18 -0700</delta_ts>
            <desc>feedback from abarth - don&apos;t hang read_file() and write_file() off of the port object</desc>
            <filename>wk37786_skip_build.diff</filename>
            <type>text/plain</type>
            <size>3011</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5OThhNmQzLi43ZjIxNGYwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQt
MTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFk
ZCAtLWJ1aWxkIChkZWZhdWx0KSBhbmQgLS1uby1idWlsZAorICAgICAgICBvcHRpb25zIHRvIG1h
a2UgdGhhdCBzdGVwIG9wdGlvbmFsLiBUaGlzIGZsYWcgbW9kaWZpZXMgd2hhdCBoYXBwZW5zCisg
ICAgICAgIGluIHBvcnQuY2hlY2tfYnVpbGQoKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc3ODYKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKwogMjAxMC0wNC0xNSAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBD
YXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGI2NjE4NGMuLjVhOGNmYmQgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW0ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bS5weQpAQCAtODAsNyArODAsNyBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoYmFz
ZS5Qb3J0KToKICAgICAgICAgZHVtcF9yZW5kZXJfdHJlZV9iaW5hcnlfcGF0aCA9IHNlbGYuX3Bh
dGhfdG9fZHJpdmVyKCkKICAgICAgICAgcmVzdWx0ID0gY2hlY2tfZmlsZV9leGlzdHMoZHVtcF9y
ZW5kZXJfdHJlZV9iaW5hcnlfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3QgZHJpdmVyJykKLSAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICBpZiByZXN1bHQg
YW5kIHNlbGYuX29wdGlvbnMuYnVpbGQ6CiAgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fY2hl
Y2tfZHJpdmVyX2J1aWxkX3VwX3RvX2RhdGUoc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uKQog
ICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXN1bHQpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtp
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vi
a2l0LnB5CmluZGV4IGQxMGZhOTAuLmNmNjE0NTUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBAIC04OSw3
ICs4OSw3IEBAIGNsYXNzIFdlYktpdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgcmV0dXJuIFRy
dWUKIAogICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKLSAgICAgICAgaWYg
bm90IHNlbGYuX2J1aWxkX2RyaXZlcigpOgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmJ1aWxk
IGFuZCBub3Qgc2VsZi5fYnVpbGRfZHJpdmVyKCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
ICAgICAgICAgaWYgbm90IHNlbGYuX2NoZWNrX2RyaXZlcigpOgogICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCAwNTlmZDA5Li45MDZlMjg4IDEw
MDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTE2MzgsNiArMTYzOCwxMyBAQCBkZWYgcGFy
c2VfYXJncyhhcmdzPU5vbmUpOgogICAgIF0KIAogICAgIHRlc3Rfb3B0aW9ucyA9IFsKKyAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tYnVpbGQiLCBkZXN0PSJidWlsZCIsCisgICAgICAg
ICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICBoZWxw
PSJDaGVjayB0byBlbnN1cmUgdGhlIER1bXBSZW5kZXJUcmVlIGJ1aWxkIGlzIHVwLXRvLWRhdGUg
IgorICAgICAgICAgICAgIihkZWZhdWx0KS4iKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0tbm8tYnVpbGQiLCBkZXN0PSJidWlsZCIsCisgICAgICAgICAgICBhY3Rpb249InN0b3Jl
X2ZhbHNlIiwgaGVscD0iRG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSAiCisgICAgICAgICAgICAi
RHVtcFJlbmRlclRyZWUgYnVpbGQgaXMgdXAtdG8tZGF0ZS4iKSwKICAgICAgICAgIyBvbGQtcnVu
LXdlYmtpdC10ZXN0cyBoYXMgLS12YWxncmluZCBpbnN0ZWFkIG9mIHdyYXBwZXIuCiAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdyYXBwZXIiLAogICAgICAgICAgICAgaGVscD0id3Jh
cHBlciBjb21tYW5kIHRvIGluc2VydCBiZWZvcmUgaW52b2NhdGlvbnMgb2YgIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53743</attachid>
            <date>2010-04-19 17:06:18 -0700</date>
            <delta_ts>2010-04-19 17:10:32 -0700</delta_ts>
            <desc>whoops. try again w/ correct patch</desc>
            <filename>wk37782_dryrun.diff</filename>
            <type>text/plain</type>
            <size>18426</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5OThhNmQzLi5mMmNjYWI2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDQt
MTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHMgLSBy
ZXB1cnBvc2UgdGhlICJQYXNzaW5nIiBwb3J0IGFzICJEcnlydW4iIHBvcnQKKyAgICAgICAgdGhh
dCBjYW4gYmUgdXNlZCB0byB0ZXN0IHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGFy
ZSBydW5uaW5nCisgICAgICAgIG9uLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIGJh
c2VsaW5lcyBhbmQgdGVzdGluZyBjb2RlCisgICAgICAgIGNvdmVyYWdlLgorCisgICAgICAgIE5v
dGUgdGhhdCBydW5uaW5nIHRoZSBjb2RlIG9uIHRoZSAid3JvbmciIHBvcnQgcmVxdWlyZXMgZWFj
aAorICAgICAgICBwb3J0LXNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRvIGFjdHVhbGx5IG5vdCBy
ZXF1aXJlIGFueQorICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBweXRob24gY29kZSAoZS5nLiwg
dGhlIGNocm9taXVtLXdpbiBwb3J0IG11c3QKKyAgICAgICAgdGVzdCBmb3IgdGhlIGV4aXN0ZW5j
ZSBvZiB3aW5kb3dzIGZ1bmN0aW9ucyBiZWZvcmUgY2FsbGluZyB0aGVtKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc3ODIKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5OiBSZW5h
bWVkIGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9w
YXNzaW5nLnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeS5weToKKwogMjAxMC0wNC0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCBm
YmQ2MjU0Li4yMjUxZDgxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC0zMjUsNiArMzI1LDIwIEBAIGNsYXNz
IFBvcnQob2JqZWN0KToKICAgICAgICAgVGhpcyBpcyB1c2VkIGJ5IHRoZSByZWJhc2VsaW5pbmcg
dG9vbC4gUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKICAgICAgICAgaWYgdGhlIHBvcnQgZG9l
cyBub3QgdXNlIGV4cGVjdGF0aW9ucyBmaWxlcy4iIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUnKQorCisgICAg
ZGVmIHJlYWRfZmlsZShzZWxmLCBwYXRoLCBtb2RlPSdyJyk6CisgICAgICAgICIiIlJldHVybiB0
aGUgY29udGVudHMgb2YgYSBmaWxlIGFzIGEgc3RyaW5nLgorCisgICAgICAgIFJldHVybnMgJycg
aWYgYW55dGhpbmcgZ29lcyB3cm9uZywgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBJT0Vycm9yLgor
CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihwYXRoLCBt
b2RlKQorICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9z
ZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgY29udGVudHMgPSAnJwor
ICAgICAgICByZXR1cm4gY29udGVudHMKICAKICAgICBkZWYgcmVtb3ZlX2RpcmVjdG9yeShzZWxm
LCAqcGF0aCk6CiAgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3RvcnksIGV2
ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5LgpAQCAtNTc2LDYgKzU5MCwxOSBAQCBjbGFzcyBQ
b3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgZQogICAgICAgICByZXR1cm4gcmVz
dWx0CiAKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cywgbW9kZT0ndycp
OgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4KKwor
ICAgICAgICBSZXR1cm5zIG5vdGhpbmcgaWYgdGhlIHdyaXRlIGZhaWxzLCBpbnN0ZWFkIG9mIHJh
aXNpbmcgYW4gSU9FcnJvci4KKworICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgZiA9IG9wZW4ocGF0aCwgbW9kZSkKKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCisg
ICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAg
ICBwYXNzCisKICAgICBfcHJldHR5X3BhdGNoX2Vycm9yX2h0bWwgPSAiRmFpbGVkIHRvIHJ1biBQ
cmV0dHlQYXRjaCwgc2VlIGVycm9yIGNvbnNvbGUuIgogCiAgICAgZGVmIHByZXR0eV9wYXRjaF90
ZXh0KHNlbGYsIGRpZmZfcGF0aCk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CmluZGV4IGFj
NGZlNmYuLjJlM2RlODUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CkBAIC04Nyw2ICs4
Nyw4IEBAIGNsYXNzIENocm9taXVtV2luUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAg
ICAgICByZXR1cm4gJ3dpbicgKyBzZWxmLnZlcnNpb24oKQogCiAgICAgZGVmIHZlcnNpb24oc2Vs
Zik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHN5cywgJ2dldHdpbmRvd3N2ZXJzaW9uJyk6Cisg
ICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgd2ludmVyID0gc3lzLmdldHdpbmRvd3N2ZXJz
aW9uKCkKICAgICAgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMSk6CiAg
ICAgICAgICAgICByZXR1cm4gJy03JwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyeXJ1bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wYTRiYzMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKQEAgLTAsMCArMSwx
ODggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xl
IG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIGlzIGEgdGVz
dCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UgdGhhdCBnZW5lcmF0ZXMgdGhl
CisgICBjb3JyZWN0IG91dHB1dCBmb3IgZXZlcnkgdGVzdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHBl
cmYgdGVzdGluZywgYmVjYXVzZQorICAgaXQgaXMgcHJldHR5IG11Y2ggYSBsb3dlciBsaW1pdCBv
biBob3cgZmFzdCBhIHBvcnQgY2FuIHBvc3NpYmx5IHJ1bi4KKworICAgVGhpcyBpbXBsZW1lbnRh
dGlvbiBhY3RzIGFzIGEgd3JhcHBlciBhcm91bmQgYSByZWFsIHBvcnQgKHRoZSByZWFsIHBvcnQK
KyAgIGlzIGhlbGQgYXMgYSBkZWxlZ2F0ZSBvYmplY3QpLiBUbyBzcGVjaWZ5IHdoaWNoIHBvcnQs
IHVzZSB0aGUgcG9ydCBuYW1lCisgICAnZHJ5cnVuLVhYWCcgKGUuZy4sICdkcnlydW4tY2hyb21p
dW0tbWFjLWxlb3BhcmQnKS4gSWYgeW91IHVzZSBqdXN0CisgICAnZHJ5cnVuJywgaXQgdXNlcyB0
aGUgZGVmYXVsdCBwb3J0LgorCisgICBOb3RlIHRoYXQgYmVjYXVzZSB0aGlzIGlzIHJlYWxseSBh
Y3RpbmcgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgdW5kZXJseWluZworICAgcG9ydCwgeW91IG11
c3QgYmUgYWJsZSB0byBydW4gdGhlIHVuZGVybHlpbmcgcG9ydCBhcyB3ZWxsCisgICAoY2hlY2tf
YnVpbGQoKSBhbmQgY2hlY2tfc3lzX2RlcHMoKSBtdXN0IHBhc3MgYW5kIGF1eGlsaWFyeSBiaW5h
cmllcworICAgbGlrZSBsYXlvdXRfdGVzdF9oZWxwZXIgYW5kIGh0dHBkIG11c3Qgd29yaykuCisK
KyAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBtb2RpZmllcyB0aGUgdGVzdCBleHBlY3RhdGlv
bnMgc28gdGhhdCBhbGwKKyAgIHRlc3RzIGFyZSBlaXRoZXIgU0tJUFBFRCBvciBleHBlY3RlZCB0
byBQQVNTLiIiIgorCitpbXBvcnQgYmFzZQoraW1wb3J0IGZhY3RvcnkKKworCitkZWYgX3JlYWRf
ZmlsZShzZWxmLCBwYXRoLCBtb2RlPSdyJyk6CisgICAgIiIiUmV0dXJuIHRoZSBjb250ZW50cyBv
ZiBhIGZpbGUgYXMgYSBzdHJpbmcuCisKKyAgICBSZXR1cm5zICcnIGlmIGFueXRoaW5nIGdvZXMg
d3JvbmcsIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gSU9FcnJvci4KKworICAgICIiIgorICAgIHRy
eToKKyAgICAgICAgZiA9IG9wZW4ocGF0aCwgbW9kZSkKKyAgICAgICAgY29udGVudHMgPSBmLnJl
YWQoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgY29u
dGVudHMgPSAnJworICAgIHJldHVybiBjb250ZW50cworCisKK2RlZiBfd3JpdGVfZmlsZShzZWxm
LCBwYXRoLCBjb250ZW50cywgbW9kZT0ndycpOgorICAgICIiIldyaXRlIHRoZSBzdHJpbmcgdG8g
dGhlIHNwZWNpZmllZCBwYXRoLgorCisgICAgUmV0dXJucyBub3RoaW5nIGlmIHRoZSB3cml0ZSBm
YWlscywgaW5zdGVhZCBvZiByYWlzaW5nIGFuIElPRXJyb3IuCisKKyAgICAiIiIKKyAgICB0cnk6
CisgICAgICAgIGYgPSBvcGVuKHBhdGgsIG1vZGUpCisgICAgICAgIGYud3JpdGUoY29udGVudHMp
CisgICAgICAgIGYuY2xvc2UoKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisK
KworY2xhc3MgRHJ5UnVuUG9ydChvYmplY3QpOgorICAgICIiIkRyeVJ1biBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIHBmeCA9ICdkcnlydW4tJworICAg
ICAgICBpZiBwb3J0X25hbWUuc3RhcnRzd2l0aChwZngpOgorICAgICAgICAgICAgcG9ydF9uYW1l
ID0gcG9ydF9uYW1lW2xlbihwZngpOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvcnRf
bmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gZmFjdG9yeS5nZXQocG9ydF9u
YW1lLCBvcHRpb25zKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAg
ICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUsIG5hbWUpCisKKyAgICBkZWYgY2hlY2tf
YnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
Y2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CisgICAgICAgIHJldHVybiBUcnVlCisK
KyAgICBkZWYgc3RhcnRfaGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3Rh
cnRfaHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF93ZWJz
b2NrZXRfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9oZWxwZXIo
c2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX2h0dHBfc2VydmVyKHNlbGYpOgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgorICAg
ICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRfZHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlv
bnMpOgorICAgICAgICByZXR1cm4gRHJ5cnVuRHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlv
bnMpCisKKworY2xhc3MgRHJ5cnVuRHJpdmVyKGJhc2UuRHJpdmVyKToKKyAgICAiIiJEcnlydW4g
aW1wbGVtZW50YXRpb24gb2YgdGhlIER1bXBSZW5kZXJUcmVlIC8gRHJpdmVyIGludGVyZmFjZS4i
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBpbWFnZV9wYXRoLCB0ZXN0X2RyaXZl
cl9vcHRpb25zKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZHJp
dmVyX29wdGlvbnMgPSB0ZXN0X2RyaXZlcl9vcHRpb25zCisgICAgICAgIHNlbGYuX2ltYWdlX3Bh
dGggPSBpbWFnZV9wYXRoCisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgPSBOb25lCisK
KyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiByZXR1
cm5jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYs
IHVyaSwgdGltZW91dG1zLCBpbWFnZV9oYXNoKToKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5f
dXJpX3RvX3Rlc3QodXJpKQorCisgICAgICAgIHRleHRfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4
cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy50eHQnKQorICAgICAgICB0ZXh0X291dHB1dCA9
IF9yZWFkX2ZpbGUodGV4dF9maWxlbmFtZSkKKworICAgICAgICBpZiBpbWFnZV9oYXNoOgorICAg
ICAgICAgICAgaW1hZ2VfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRl
c3RfbmFtZSwgJy5wbmcnKQorICAgICAgICAgICAgaW1hZ2UgPSBfcmVhZF9maWxlKGltYWdlX2Zp
bGVuYW1lLCAncmInKQorICAgICAgICAgICAgaWYgc2VsZi5faW1hZ2VfcGF0aDoKKyAgICAgICAg
ICAgICAgICBfd3JpdGVfZmlsZShzZWxmLl9pbWFnZV9wYXRoLCBpbWFnZSkKKyAgICAgICAgICAg
IGhhc2hfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwK
KyAgICAgICAgICAgICAgICAnLmNoZWNrc3VtJykKKyAgICAgICAgICAgIGhhc2ggPSBfcmVhZF9m
aWxlKGhhc2hfZmlsZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYXNoID0gTm9u
ZQorICAgICAgICByZXR1cm4gKEZhbHNlLCBGYWxzZSwgaGFzaCwgdGV4dF9vdXRwdXQsIE5vbmUp
CisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF91cmlfdG9f
dGVzdChzZWxmLCB1cmkpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGJhc2UgbGF5b3V0IHRlc3Qg
bmFtZSBmb3IgYSBnaXZlbiBVUkkuCisKKyAgICAgICAgVGhpcyByZXR1cm5zIHRoZSB0ZXN0IG5h
bWUgZm9yIGEgZ2l2ZW4gVVJJLCBlLmcuLCBpZiB5b3UgcGFzc2VkIGluCisgICAgICAgICJmaWxl
Oi8vL3NyYy9MYXlvdXRUZXN0cy9mYXN0L2h0bWwva2V5Z2VuLmh0bWwiIGl0IHdvdWxkIHJldHVy
bgorICAgICAgICAiZmFzdC9odG1sL2tleWdlbi5odG1sIi4KKworICAgICAgICAiIiIKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2xheW91dF90ZXN0c19kaXI6CisgICAgICAgICAgICBzZWxmLl9sYXlv
dXRfdGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgdGVz
dCA9IHVyaQorCisgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8vLyIpOgorICAgICAg
ICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnZmlsZTovLycsICcnKQorICAgICAgICAgICAgcmV0
dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLzEyNy4wLjAuMTo4
ODgwLyIpOgorICAgICAgICAgICAgIyB3ZWJzb2NrZXQgdGVzdHMKKyAgICAgICAgICAgIHRlc3Qg
PSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODg4MC8nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy8nKQorICAgICAgICAg
ICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLyIpOgor
ICAgICAgICAgICAgIyByZWd1bGFyIEhUVFAgdGVzdAorICAgICAgICAgICAgdGVzdCA9IHRlc3Qu
cmVwbGFjZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAwLycsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgKyAnL2h0dHAvdGVzdHMvJykKKyAgICAg
ICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHBzOi8v
Iik6CisgICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwczovLzEyNy4wLjAuMTo4
NDQzLycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0
c19kaXIgKyAnL2h0dHAvdGVzdHMvJykKKyAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1bmtub3duIHVy
bCB0eXBlOiAlcycgJSB1cmkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXggY2YwY2M3Mi4uOTViOTBk
YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9mYWN0b3J5LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtNTksOSArNTksOSBAQCBkZWYgZ2V0KHBvcnRfbmFt
ZT1Ob25lLCBvcHRpb25zPU5vbmUpOgogICAgIGlmIHBvcnRfdG9fdXNlID09ICd0ZXN0JzoKICAg
ICAgICAgaW1wb3J0IHRlc3QKICAgICAgICAgcmV0dXJuIHRlc3QuVGVzdFBvcnQocG9ydF9uYW1l
LCBvcHRpb25zKQotICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgncGFzc2luZycpOgot
ICAgICAgICBpbXBvcnQgcGFzc2luZwotICAgICAgICByZXR1cm4gcGFzc2luZy5QYXNzaW5nUG9y
dChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdk
cnlydW4nKToKKyAgICAgICAgaW1wb3J0IGRyeXJ1bgorICAgICAgICByZXR1cm4gZHJ5cnVuLkRy
eVJ1blBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQogICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRz
d2l0aCgnbWFjJyk6CiAgICAgICAgIGltcG9ydCBtYWMKICAgICAgICAgcmV0dXJuIG1hYy5NYWNQ
b3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGFzc2luZy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGFzc2luZy5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjczNWI0Yi4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bhc3NpbmcucHkKKysrIC9kZXYvbnVsbApAQCAt
MSwxNDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRoaXMg
aXMgYSB0ZXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZSB0aGF0IGdlbmVy
YXRlcyB0aGUKLSAgIGNvcnJlY3Qgb3V0cHV0IGZvciBldmVyeSB0ZXN0LiBJdCBjYW4gYmUgdXNl
ZCBmb3IgcGVyZiB0ZXN0aW5nLCBiZWNhdXNlCi0gICBpdCBpcyBwcmV0dHkgbXVjaCBhIGxvd2Vy
IGxpbWl0IG9uIGhvdyBmYXN0IGEgcG9ydCBjYW4gcG9zc2libHkgcnVuLgotCi0gICBUaGlzIGlt
cGxlbWVudGF0aW9uIGFjdHMgYXMgYSB3cmFwcGVyIGFyb3VuZCBhIHJlYWwgcG9ydCAodGhlIHJl
YWwgcG9ydAotICAgaXMgaGVsZCBhcyBhIGRlbGVnYXRlIG9iamVjdCkuIFRvIHNwZWNpZnkgd2hp
Y2ggcG9ydCwgdXNlIHRoZSBwb3J0IG5hbWUKLSAgICdwYXNzaW5nLVhYWCcgKGUuZy4sICdwYXNz
aW5nLWNocm9taXVtLW1hYy1sZW9wYXJkJykuIElmIHlvdSB1c2UganVzdAotICAgJ3Bhc3Npbmcn
LCBpdCB1c2VzIHRoZSBkZWZhdWx0IHBvcnQuCi0KLSAgIE5vdGUgdGhhdCBiZWNhdXNlIHRoaXMg
aXMgcmVhbGx5IGFjdGluZyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSB1bmRlcmx5aW5nCi0gICBw
b3J0LCB5b3UgbXVzdCBiZSBhYmxlIHRvIHJ1biB0aGUgdW5kZXJseWluZyBwb3J0IGFzIHdlbGwK
LSAgIChjaGVja19idWlsZCgpIGFuZCBjaGVja19zeXNfZGVwcygpIG11c3QgcGFzcyBhbmQgYXV4
aWxpYXJ5IGJpbmFyaWVzCi0gICBsaWtlIGxheW91dF90ZXN0X2hlbHBlciBhbmQgaHR0cGQgbXVz
dCB3b3JrKS4KLQotICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIG1vZGlmaWVzIHRoZSB0ZXN0
IGV4cGVjdGF0aW9ucyBzbyB0aGF0IGFsbAotICAgdGVzdHMgYXJlIGVpdGhlciBTS0lQUEVEIG9y
IGV4cGVjdGVkIHRvIFBBU1MuIiIiCi0KLWltcG9ydCBiYXNlCi1pbXBvcnQgZmFjdG9yeQotCi1j
bGFzcyBQYXNzaW5nUG9ydChvYmplY3QpOgotICAgICIiIlBhc3NpbmcgaW1wbGVtZW50YXRpb24g
b2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
bmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgotICAgICAgICBwZnggPSAncGFzc2luZy0nCi0gICAg
ICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKHBmeCk6Ci0gICAgICAgICAgICBwb3J0X25hbWUg
PSBwb3J0X25hbWVbbGVuKHBmeCk6XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcG9ydF9u
YW1lID0gTm9uZQotICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5LmdldChwb3J0X25h
bWUsIG9wdGlvbnMpCi0KLSAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgICAg
IHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKLQotICAgIGRlZiBzdGFydF9k
cml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucyk6Ci0gICAgICAgIHJldHVybiBQYXNzaW5n
RHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlvbnMpCi0KLSAgICBkZWYgdGVzdF9leHBlY3Rh
dGlvbnMoc2VsZik6Ci0gICAgICAgIGV4cHMgPSBzZWxmLl9fZGVsZWdhdGUudGVzdF9leHBlY3Rh
dGlvbnMoKQotICAgICAgICBza2lwcyA9IFtdCi0gICAgICAgIGZvciBsaW5lIGluIGV4cHMuc3Bs
aXQoJ1xuJyk6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQoIlNLSVAiKSAhPSAtMToKLSAgICAg
ICAgICAgICAgICBza2lwcy5hcHBlbmQobGluZSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihz
a2lwcykKLQotY2xhc3MgUGFzc2luZ0RyaXZlcihiYXNlLkRyaXZlcik6Ci0gICAgIiIiUGFzc2lu
ZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgLyBEcml2ZXIgaW50ZXJmYWNl
LiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdlX3BhdGgsIHRlc3RfZHJp
dmVyX29wdGlvbnMpOgotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLl9k
cml2ZXJfb3B0aW9ucyA9IHRlc3RfZHJpdmVyX29wdGlvbnMKLSAgICAgICAgc2VsZi5faW1hZ2Vf
cGF0aCA9IGltYWdlX3BhdGgKLSAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IE5vbmUK
LQotICAgIGRlZiBwb2xsKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIHJl
dHVybmNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgcnVuX3Rlc3Qoc2Vs
ZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gpOgotICAgICAgICB0ZXN0X25hbWUgPSBzZWxm
Ll91cmlfdG9fdGVzdCh1cmkpCi0KLSAgICAgICAgdGV4dF9maWxlbmFtZSA9IHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnR4dCcpCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHRleHRfb3V0cHV0ID0gb3Blbih0ZXh0X2ZpbGVuYW1lLCAncicpLnJlYWQoKQotICAg
ICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHRleHRfb3V0cHV0ID0gJycKLQotICAg
ICAgICBpZiBpbWFnZV9oYXNoOgotICAgICAgICAgICAgaW1hZ2VfZmlsZW5hbWUgPSBzZWxmLl9w
b3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy5wbmcnKQotICAgICAgICAgICAgdHJ5
OgotICAgICAgICAgICAgICAgIGltYWdlID0gZmlsZShpbWFnZV9maWxlbmFtZSwgJ3JiJykucmVh
ZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICBpbWFnZSA9
ICcnCi0gICAgICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgotICAgICAgICAgICAgICAgIG91
dHB1dF9maWxlID0gZmlsZShzZWxmLl9pbWFnZV9wYXRoLCAndycpCi0gICAgICAgICAgICAgICAg
b3V0cHV0X2ZpbGUud3JpdGUoaW1hZ2UpCi0gICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGUuY2xv
c2UoKQotICAgICAgICAgICAgaGFzaF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmls
ZW5hbWUodGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICcuY2hlY2tzdW0nKQotICAgICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgICAgIGhhc2ggPSBmaWxlKGhhc2hfZmlsZW5hbWUsICdyJyku
cmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICBoYXNo
ID0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhhc2ggPSBOb25lCi0gICAgICAgIHJl
dHVybiAoRmFsc2UsIEZhbHNlLCBoYXNoLCB0ZXh0X291dHB1dCwgTm9uZSkKLQotICAgIGRlZiBz
dG9wKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgX3VyaV90b190ZXN0KHNlbGYsIHVy
aSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyOgotICAgICAgICAgICAg
c2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpCi0g
ICAgICAgIHRlc3QgPSB1cmkKLQotICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiZmlsZTovLy8i
KToKLSAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnJykKLSAgICAg
ICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8x
MjcuMC4wLjE6ODg4MC8iKToKLSAgICAgICAgICAgICMgd2Vic29ja2V0IHRlc3RzCi0gICAgICAg
ICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwOi8vMTI3LjAuMC4xOjg4ODAvJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciArICcvJykK
LSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dpdGgoImh0
dHA6Ly8iKToKLSAgICAgICAgICAgICMgcmVndWxhciBIVFRQIHRlc3QKLSAgICAgICAgICAgIHRl
c3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC8nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy9odHRwL3Rlc3Rz
LycpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAotICAgICAgICBlbGlmIHVyaS5zdGFydHN3aXRo
KCJodHRwczovLyIpOgotICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnaHR0cHM6Ly8x
MjcuMC4wLjE6ODQ0My8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9s
YXlvdXRfdGVzdHNfZGlyICsgJy9odHRwL3Rlc3RzLycpCi0gICAgICAgICAgICByZXR1cm4gdGVz
dAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcign
dW5rbm93biB1cmwgdHlwZTogJXMnICUgdXJpKQotCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weQppbmRleCA2ZjBmYWFjLi5mMjA2YjYwIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3Vu
aXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTU2LDUgKzU2LDIxIEBAIGNsYXNzIE1h
aW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnLS1sb2cnLCAndW5leHBlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKIAorCitjbGFzcyBEcnlydW5UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGltcG9ydCBw
ZGIKKyAgICAgICAgcGRiLnNldF90cmFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNz
aW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFz
c2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1tYWMnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuLWNocm9taXVtLW1hYycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICdkcnlydW4tY2hyb21p
dW0td2luJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1s
J10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywg
J2RyeXJ1bi1jaHJvbWl1bS1saW51eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2Zhc3QvaHRtbCddKSkKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1
bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53744</attachid>
            <date>2010-04-19 17:10:32 -0700</date>
            <delta_ts>2010-04-19 17:48:38 -0700</delta_ts>
            <desc>and yet again ...</desc>
            <filename>wk37782_dryrun.diff</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="37541"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53750</attachid>
            <date>2010-04-19 17:48:38 -0700</date>
            <delta_ts>2010-04-19 17:48:38 -0700</delta_ts>
            <desc>final patch using &quot;with&quot; statement; no review needed</desc>
            <filename>wk37782_dryrun.diff</filename>
            <type>text/plain</type>
            <size>17538</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5OThhNmQzLi5iNjA0MDQzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDQt
MTggIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBuZXctcnVuLXdlYmtpdC10ZXN0cyAtIHJlcHVy
cG9zZSB0aGUgIlBhc3NpbmciIHBvcnQgYXMgIkRyeXJ1biIgcG9ydAorICAgICAgICB0aGF0IGNh
biBiZSB1c2VkIHRvIHRlc3QgcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UgYXJlIHJ1
bm5pbmcKKyAgICAgICAgb24uIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY2hlY2tpbmcgYmFzZWxp
bmVzIGFuZCB0ZXN0aW5nIGNvZGUKKyAgICAgICAgY292ZXJhZ2UuCisKKyAgICAgICAgTm90ZSB0
aGF0IHJ1bm5pbmcgdGhlIGNvZGUgb24gdGhlICJ3cm9uZyIgcG9ydCByZXF1aXJlcyBlYWNoCisg
ICAgICAgIHBvcnQtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdG8gYWN0dWFsbHkgbm90IHJlcXVp
cmUgYW55CisgICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIHB5dGhvbiBjb2RlIChlLmcuLCB0aGUg
Y2hyb21pdW0td2luIHBvcnQgbXVzdAorICAgICAgICB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9m
IHdpbmRvd3MgZnVuY3Rpb25zIGJlZm9yZSBjYWxsaW5nIHRoZW0pLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzc4MgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHk6IFJlbmFtZWQg
ZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bhc3Np
bmcucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0
b3J5LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMDQtMTUgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2Uu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2Uu
cHkKaW5kZXggZmJkNjI1NC4uZmI2ZmRkZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMzI1LDcgKzMyNSw3
IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgVGhpcyBpcyB1c2VkIGJ5IHRoZSByZWJh
c2VsaW5pbmcgdG9vbC4gUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKICAgICAgICAgaWYgdGhl
IHBvcnQgZG9lcyBub3QgdXNlIGV4cGVjdGF0aW9ucyBmaWxlcy4iIiIKICAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUn
KQotIAorCiAgICAgZGVmIHJlbW92ZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgogICAgICAgICAi
IiJSZWN1cnNpdmVseSByZW1vdmVzIGEgZGlyZWN0b3J5LCBldmVuIGlmIGl0J3MgbWFya2VkIHJl
YWQtb25seS4KIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weQppbmRleCBhYzRmZTZmLi4yZTNk
ZTg1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX3dpbi5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weQpAQCAtODcsNiArODcsOCBAQCBjbGFz
cyBDaHJvbWl1bVdpblBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgcmV0dXJu
ICd3aW4nICsgc2VsZi52ZXJzaW9uKCkKIAogICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgICAg
ICBpZiBub3QgaGFzYXR0cihzeXMsICdnZXR3aW5kb3dzdmVyc2lvbicpOgorICAgICAgICAgICAg
cmV0dXJuICcnCiAgICAgICAgIHdpbnZlciA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCiAgICAg
ICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09IDEpOgogICAgICAgICAgICAg
cmV0dXJuICctNycKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9kcnlydW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2E2NzE3ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJ5cnVuLnB5CkBAIC0wLDAgKzEsMTg5IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGhpcyBpcyBhIHRlc3QgaW1wbGVtZW50
YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlIHRoYXQgZ2VuZXJhdGVzIHRoZQorICAgY29ycmVj
dCBvdXRwdXQgZm9yIGV2ZXJ5IHRlc3QuIEl0IGNhbiBiZSB1c2VkIGZvciBwZXJmIHRlc3Rpbmcs
IGJlY2F1c2UKKyAgIGl0IGlzIHByZXR0eSBtdWNoIGEgbG93ZXIgbGltaXQgb24gaG93IGZhc3Qg
YSBwb3J0IGNhbiBwb3NzaWJseSBydW4uCisKKyAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWN0cyBh
cyBhIHdyYXBwZXIgYXJvdW5kIGEgcmVhbCBwb3J0ICh0aGUgcmVhbCBwb3J0CisgICBpcyBoZWxk
IGFzIGEgZGVsZWdhdGUgb2JqZWN0KS4gVG8gc3BlY2lmeSB3aGljaCBwb3J0LCB1c2UgdGhlIHBv
cnQgbmFtZQorICAgJ2RyeXJ1bi1YWFgnIChlLmcuLCAnZHJ5cnVuLWNocm9taXVtLW1hYy1sZW9w
YXJkJykuIElmIHlvdSB1c2UganVzdAorICAgJ2RyeXJ1bicsIGl0IHVzZXMgdGhlIGRlZmF1bHQg
cG9ydC4KKworICAgTm90ZSB0aGF0IGJlY2F1c2UgdGhpcyBpcyByZWFsbHkgYWN0aW5nIGFzIGEg
d3JhcHBlciBhcm91bmQgdGhlIHVuZGVybHlpbmcKKyAgIHBvcnQsIHlvdSBtdXN0IGJlIGFibGUg
dG8gcnVuIHRoZSB1bmRlcmx5aW5nIHBvcnQgYXMgd2VsbAorICAgKGNoZWNrX2J1aWxkKCkgYW5k
IGNoZWNrX3N5c19kZXBzKCkgbXVzdCBwYXNzIGFuZCBhdXhpbGlhcnkgYmluYXJpZXMKKyAgIGxp
a2UgbGF5b3V0X3Rlc3RfaGVscGVyIGFuZCBodHRwZCBtdXN0IHdvcmspLgorCisgICBUaGlzIGlt
cGxlbWVudGF0aW9uIGFsc28gbW9kaWZpZXMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIHNvIHRoYXQg
YWxsCisgICB0ZXN0cyBhcmUgZWl0aGVyIFNLSVBQRUQgb3IgZXhwZWN0ZWQgdG8gUEFTUy4iIiIK
KworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgYmFzZQor
aW1wb3J0IGZhY3RvcnkKKworCitkZWYgX3JlYWRfZmlsZShwYXRoLCBtb2RlPSdyJyk6CisgICAg
IiIiUmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgYXMgYSBzdHJpbmcuCisKKyAgICBSZXR1
cm5zICcnIGlmIGFueXRoaW5nIGdvZXMgd3JvbmcsIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gSU9F
cnJvci4KKworICAgICIiIgorICAgIGNvbnRlbnRzID0gJycKKyAgICB0cnk6CisgICAgICAgIHdp
dGggb3BlbihwYXRoLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQo
KQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIGNvbnRlbnRz
CisKKworZGVmIF93cml0ZV9maWxlKHBhdGgsIGNvbnRlbnRzLCBtb2RlPSd3Jyk6CisgICAgIiIi
V3JpdGUgdGhlIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIHBhdGguCisKKyAgICBSZXR1cm5zIG5v
dGhpbmcgaWYgdGhlIHdyaXRlIGZhaWxzLCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gSU9FcnJvci4K
KworICAgICIiIgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgsIG1vZGUpIGFzIGY6
CisgICAgICAgICAgICBmLndyaXRlKGNvbnRlbnRzKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAg
ICAgICBwYXNzCisKKworY2xhc3MgRHJ5UnVuUG9ydChvYmplY3QpOgorICAgICIiIkRyeVJ1biBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIHBmeCA9ICdk
cnlydW4tJworICAgICAgICBpZiBwb3J0X25hbWUuc3RhcnRzd2l0aChwZngpOgorICAgICAgICAg
ICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lW2xlbihwZngpOl0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHBvcnRfbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gZmFjdG9y
eS5nZXQocG9ydF9uYW1lLCBvcHRpb25zKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5h
bWUpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fZGVsZWdhdGUsIG5hbWUpCisKKyAg
ICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CisgICAgICAgIHJldHVybiBUcnVl
CisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgc3RhcnRfaGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisK
KyAgICBkZWYgc3RhcnRfaHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRl
ZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
c3RvcF9oZWxwZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wX2h0dHBfc2Vy
dmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVy
KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRfZHJpdmVyKHNlbGYsIGltYWdl
X3BhdGgsIG9wdGlvbnMpOgorICAgICAgICByZXR1cm4gRHJ5cnVuRHJpdmVyKHNlbGYsIGltYWdl
X3BhdGgsIG9wdGlvbnMpCisKKworY2xhc3MgRHJ5cnVuRHJpdmVyKGJhc2UuRHJpdmVyKToKKyAg
ICAiIiJEcnlydW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIER1bXBSZW5kZXJUcmVlIC8gRHJpdmVy
IGludGVyZmFjZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBpbWFnZV9wYXRo
LCB0ZXN0X2RyaXZlcl9vcHRpb25zKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAg
ICAgc2VsZi5fZHJpdmVyX29wdGlvbnMgPSB0ZXN0X2RyaXZlcl9vcHRpb25zCisgICAgICAgIHNl
bGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19k
aXIgPSBOb25lCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiByZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIHVyaSwgdGltZW91dG1zLCBpbWFnZV9oYXNoKToKKyAgICAgICAgdGVzdF9u
YW1lID0gc2VsZi5fdXJpX3RvX3Rlc3QodXJpKQorCisgICAgICAgIHRleHRfZmlsZW5hbWUgPSBz
ZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy50eHQnKQorICAgICAgICB0
ZXh0X291dHB1dCA9IF9yZWFkX2ZpbGUodGV4dF9maWxlbmFtZSkKKworICAgICAgICBpZiBpbWFn
ZV9oYXNoOgorICAgICAgICAgICAgaW1hZ2VfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVk
X2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy5wbmcnKQorICAgICAgICAgICAgaW1hZ2UgPSBfcmVhZF9m
aWxlKGltYWdlX2ZpbGVuYW1lLCAncmInKQorICAgICAgICAgICAgaWYgc2VsZi5faW1hZ2VfcGF0
aDoKKyAgICAgICAgICAgICAgICBfd3JpdGVfZmlsZShzZWxmLl9pbWFnZV9wYXRoLCBpbWFnZSkK
KyAgICAgICAgICAgIGhhc2hfZmlsZW5hbWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1l
KHRlc3RfbmFtZSwKKyAgICAgICAgICAgICAgICAnLmNoZWNrc3VtJykKKyAgICAgICAgICAgIGhh
c2ggPSBfcmVhZF9maWxlKGhhc2hfZmlsZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBoYXNoID0gTm9uZQorICAgICAgICByZXR1cm4gKEZhbHNlLCBGYWxzZSwgaGFzaCwgdGV4dF9v
dXRwdXQsIE5vbmUpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIF91cmlfdG9fdGVzdChzZWxmLCB1cmkpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGJhc2Ug
bGF5b3V0IHRlc3QgbmFtZSBmb3IgYSBnaXZlbiBVUkkuCisKKyAgICAgICAgVGhpcyByZXR1cm5z
IHRoZSB0ZXN0IG5hbWUgZm9yIGEgZ2l2ZW4gVVJJLCBlLmcuLCBpZiB5b3UgcGFzc2VkIGluCisg
ICAgICAgICJmaWxlOi8vL3NyYy9MYXlvdXRUZXN0cy9mYXN0L2h0bWwva2V5Z2VuLmh0bWwiIGl0
IHdvdWxkIHJldHVybgorICAgICAgICAiZmFzdC9odG1sL2tleWdlbi5odG1sIi4KKworICAgICAg
ICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2xheW91dF90ZXN0c19kaXI6CisgICAgICAgICAg
ICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyID0gc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkK
KyAgICAgICAgdGVzdCA9IHVyaQorCisgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8v
LyIpOgorICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgnZmlsZTovLycsICcnKQorICAg
ICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDov
LzEyNy4wLjAuMTo4ODgwLyIpOgorICAgICAgICAgICAgIyB3ZWJzb2NrZXQgdGVzdHMKKyAgICAg
ICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODg4MC8nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy8n
KQorICAgICAgICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgZWxpZiB1cmkuc3RhcnRzd2l0aCgi
aHR0cDovLyIpOgorICAgICAgICAgICAgIyByZWd1bGFyIEhUVFAgdGVzdAorICAgICAgICAgICAg
dGVzdCA9IHRlc3QucmVwbGFjZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAwLycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgKyAnL2h0dHAvdGVz
dHMvJykKKyAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dp
dGgoImh0dHBzOi8vIik6CisgICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwczov
LzEyNy4wLjAuMTo4NDQzLycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2xheW91dF90ZXN0c19kaXIgKyAnL2h0dHAvdGVzdHMvJykKKyAgICAgICAgICAgIHJldHVybiB0
ZXN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCd1bmtub3duIHVybCB0eXBlOiAlcycgJSB1cmkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKaW5kZXggY2Yw
Y2M3Mi4uOTViOTBkYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQpAQCAtNTksOSArNTksOSBAQCBkZWYg
Z2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgogICAgIGlmIHBvcnRfdG9fdXNlID09
ICd0ZXN0JzoKICAgICAgICAgaW1wb3J0IHRlc3QKICAgICAgICAgcmV0dXJuIHRlc3QuVGVzdFBv
cnQocG9ydF9uYW1lLCBvcHRpb25zKQotICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgn
cGFzc2luZycpOgotICAgICAgICBpbXBvcnQgcGFzc2luZwotICAgICAgICByZXR1cm4gcGFzc2lu
Zy5QYXNzaW5nUG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgZWxpZiBwb3J0X3RvX3VzZS5z
dGFydHN3aXRoKCdkcnlydW4nKToKKyAgICAgICAgaW1wb3J0IGRyeXJ1bgorICAgICAgICByZXR1
cm4gZHJ5cnVuLkRyeVJ1blBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQogICAgIGVsaWYgcG9ydF90
b191c2Uuc3RhcnRzd2l0aCgnbWFjJyk6CiAgICAgICAgIGltcG9ydCBtYWMKICAgICAgICAgcmV0
dXJuIG1hYy5NYWNQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGFzc2luZy5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGFzc2luZy5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjczNWI0Yi4uMDAwMDAwMAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bhc3NpbmcucHkKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAg
KiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSIiIlRoaXMgaXMgYSB0ZXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFj
ZSB0aGF0IGdlbmVyYXRlcyB0aGUKLSAgIGNvcnJlY3Qgb3V0cHV0IGZvciBldmVyeSB0ZXN0LiBJ
dCBjYW4gYmUgdXNlZCBmb3IgcGVyZiB0ZXN0aW5nLCBiZWNhdXNlCi0gICBpdCBpcyBwcmV0dHkg
bXVjaCBhIGxvd2VyIGxpbWl0IG9uIGhvdyBmYXN0IGEgcG9ydCBjYW4gcG9zc2libHkgcnVuLgot
Ci0gICBUaGlzIGltcGxlbWVudGF0aW9uIGFjdHMgYXMgYSB3cmFwcGVyIGFyb3VuZCBhIHJlYWwg
cG9ydCAodGhlIHJlYWwgcG9ydAotICAgaXMgaGVsZCBhcyBhIGRlbGVnYXRlIG9iamVjdCkuIFRv
IHNwZWNpZnkgd2hpY2ggcG9ydCwgdXNlIHRoZSBwb3J0IG5hbWUKLSAgICdwYXNzaW5nLVhYWCcg
KGUuZy4sICdwYXNzaW5nLWNocm9taXVtLW1hYy1sZW9wYXJkJykuIElmIHlvdSB1c2UganVzdAot
ICAgJ3Bhc3NpbmcnLCBpdCB1c2VzIHRoZSBkZWZhdWx0IHBvcnQuCi0KLSAgIE5vdGUgdGhhdCBi
ZWNhdXNlIHRoaXMgaXMgcmVhbGx5IGFjdGluZyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSB1bmRl
cmx5aW5nCi0gICBwb3J0LCB5b3UgbXVzdCBiZSBhYmxlIHRvIHJ1biB0aGUgdW5kZXJseWluZyBw
b3J0IGFzIHdlbGwKLSAgIChjaGVja19idWlsZCgpIGFuZCBjaGVja19zeXNfZGVwcygpIG11c3Qg
cGFzcyBhbmQgYXV4aWxpYXJ5IGJpbmFyaWVzCi0gICBsaWtlIGxheW91dF90ZXN0X2hlbHBlciBh
bmQgaHR0cGQgbXVzdCB3b3JrKS4KLQotICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIG1vZGlm
aWVzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBzbyB0aGF0IGFsbAotICAgdGVzdHMgYXJlIGVpdGhl
ciBTS0lQUEVEIG9yIGV4cGVjdGVkIHRvIFBBU1MuIiIiCi0KLWltcG9ydCBiYXNlCi1pbXBvcnQg
ZmFjdG9yeQotCi1jbGFzcyBQYXNzaW5nUG9ydChvYmplY3QpOgotICAgICIiIlBhc3NpbmcgaW1w
bGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgotICAgICAgICBwZnggPSAncGFz
c2luZy0nCi0gICAgICAgIGlmIHBvcnRfbmFtZS5zdGFydHN3aXRoKHBmeCk6Ci0gICAgICAgICAg
ICBwb3J0X25hbWUgPSBwb3J0X25hbWVbbGVuKHBmeCk6XQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgcG9ydF9uYW1lID0gTm9uZQotICAgICAgICBzZWxmLl9fZGVsZWdhdGUgPSBmYWN0b3J5
LmdldChwb3J0X25hbWUsIG9wdGlvbnMpCi0KLSAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFt
ZSk6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKLQotICAg
IGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucyk6Ci0gICAgICAgIHJl
dHVybiBQYXNzaW5nRHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlvbnMpCi0KLSAgICBkZWYg
dGVzdF9leHBlY3RhdGlvbnMoc2VsZik6Ci0gICAgICAgIGV4cHMgPSBzZWxmLl9fZGVsZWdhdGUu
dGVzdF9leHBlY3RhdGlvbnMoKQotICAgICAgICBza2lwcyA9IFtdCi0gICAgICAgIGZvciBsaW5l
IGluIGV4cHMuc3BsaXQoJ1xuJyk6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQoIlNLSVAiKSAh
PSAtMToKLSAgICAgICAgICAgICAgICBza2lwcy5hcHBlbmQobGluZSkKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihza2lwcykKLQotY2xhc3MgUGFzc2luZ0RyaXZlcihiYXNlLkRyaXZlcik6Ci0g
ICAgIiIiUGFzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgLyBEcml2
ZXIgaW50ZXJmYWNlLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdlX3Bh
dGgsIHRlc3RfZHJpdmVyX29wdGlvbnMpOgotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAg
ICAgICBzZWxmLl9kcml2ZXJfb3B0aW9ucyA9IHRlc3RfZHJpdmVyX29wdGlvbnMKLSAgICAgICAg
c2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKLSAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3Rz
X2RpciA9IE5vbmUKLQotICAgIGRlZiBwb2xsKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQot
Ci0gICAgZGVmIHJldHVybmNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYg
cnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gpOgotICAgICAgICB0ZXN0
X25hbWUgPSBzZWxmLl91cmlfdG9fdGVzdCh1cmkpCi0KLSAgICAgICAgdGV4dF9maWxlbmFtZSA9
IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAnLnR4dCcpCi0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIHRleHRfb3V0cHV0ID0gb3Blbih0ZXh0X2ZpbGVuYW1lLCAncicp
LnJlYWQoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHRleHRfb3V0cHV0
ID0gJycKLQotICAgICAgICBpZiBpbWFnZV9oYXNoOgotICAgICAgICAgICAgaW1hZ2VfZmlsZW5h
bWUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3RfbmFtZSwgJy5wbmcnKQotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltYWdlID0gZmlsZShpbWFnZV9maWxlbmFt
ZSwgJ3JiJykucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAg
ICAgICBpbWFnZSA9ICcnCi0gICAgICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgotICAgICAg
ICAgICAgICAgIG91dHB1dF9maWxlID0gZmlsZShzZWxmLl9pbWFnZV9wYXRoLCAndycpCi0gICAg
ICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoaW1hZ2UpCi0gICAgICAgICAgICAgICAgb3V0
cHV0X2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgaGFzaF9maWxlbmFtZSA9IHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICcuY2hlY2tzdW0n
KQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGhhc2ggPSBmaWxlKGhhc2hfZmls
ZW5hbWUsICdyJykucmVhZCgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAg
ICAgICAgICBoYXNoID0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhhc2ggPSBOb25l
Ci0gICAgICAgIHJldHVybiAoRmFsc2UsIEZhbHNlLCBoYXNoLCB0ZXh0X291dHB1dCwgTm9uZSkK
LQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgX3VyaV90b190
ZXN0KHNlbGYsIHVyaSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyOgot
ICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpCi0gICAgICAgIHRlc3QgPSB1cmkKLQotICAgICAgICBpZiB1cmkuc3RhcnRzd2l0
aCgiZmlsZTovLy8iKToKLSAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2ZpbGU6Ly8n
LCAnJykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVsaWYgdXJpLnN0YXJ0c3dp
dGgoImh0dHA6Ly8xMjcuMC4wLjE6ODg4MC8iKToKLSAgICAgICAgICAgICMgd2Vic29ja2V0IHRl
c3RzCi0gICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCdodHRwOi8vMTI3LjAuMC4xOjg4
ODAvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3Rz
X2RpciArICcvJykKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Ci0gICAgICAgIGVsaWYgdXJpLnN0
YXJ0c3dpdGgoImh0dHA6Ly8iKToKLSAgICAgICAgICAgICMgcmVndWxhciBIVFRQIHRlc3QKLSAg
ICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC8nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsg
Jy9odHRwL3Rlc3RzLycpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAotICAgICAgICBlbGlmIHVy
aS5zdGFydHN3aXRoKCJodHRwczovLyIpOgotICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFj
ZSgnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyICsgJy9odHRwL3Rlc3RzLycpCi0gICAgICAgICAg
ICByZXR1cm4gdGVzdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigndW5rbm93biB1cmwgdHlwZTogJXMnICUgdXJpKQotCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCA2ZjBmYWFjLi40MTc2ZDVkIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTU2LDUgKzU2LDE5
IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLS1sb2cnLCAndW5leHBlY3RlZCcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKIAorCitjbGFzcyBEcnlydW5U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5cnVuJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1t
YWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2h0bWwnXSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0nLCAnZHJ5
cnVuLWNocm9taXVtLW1hYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2Zhc3QvaHRtbCddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1w
bGF0Zm9ybScsICdkcnlydW4tY2hyb21pdW0td2luJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnZmFzdC9odG1sJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFz
c2luZ19ydW4oWyctLXBsYXRmb3JtJywgJ2RyeXJ1bi1jaHJvbWl1bS1saW51eCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaHRtbCddKSkKKwogaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>