<?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>37754</bug_id>
          
          <creation_ts>2010-04-17 09:59:51 -0700</creation_ts>
          <short_desc>check-webkit-style: Create a class to encapsulate reading text files</short_desc>
          <delta_ts>2010-04-20 06:30:25 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>37066</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>cjerdonek</cc>
    
    <cc>hamaji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213609</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-17 09:59:51 -0700</bug_when>
    <thetext>This is a step towards separating our style-checking code from the code that iterates over paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213618</commentid>
    <comment_count>1</comment_count>
      <attachid>53597</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-17 10:55:26 -0700</bug_when>
    <thetext>Created attachment 53597
Proposed patch

Rather than changing the working code incrementally, I decided to add the class we&apos;ll be switching to as a whole, with more or less full unit test coverage.  I believe this will make the subsequent steps smaller and a bit easier to understand -- since we&apos;ll just need to start using a class that already exists and is fully tested.  (I&apos;m not sure the existing code actually tests reading files anyways.  I think it tests with mock methods in all cases.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213629</commentid>
    <comment_count>2</comment_count>
      <attachid>53599</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-17 11:21:54 -0700</bug_when>
    <thetext>Created attachment 53599
Proposed patch 2

Added docstrings to ProcessorBase and included more docstring information elsewhere about **kwargs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213875</commentid>
    <comment_count>3</comment_count>
      <attachid>53599</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-18 18:26:41 -0700</bug_when>
    <thetext>Comment on attachment 53599
Proposed patch 2

Looks good! Sorry for the latency. A few comments:

How about changing all single quotes to double quotes at this chance?

&gt; +    class TestProcessor(ProcessorBase):

How about naming this as MockProcessor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213876</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-18 19:09:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 53599 [details])
&gt; Looks good! Sorry for the latency. A few comments:

Thanks!  No problem -- especially since it was the weekend.

&gt; How about changing all single quotes to double quotes at this chance?

I was actually making an effort to use single quotes. :)  I don&apos;t think we ever decided this as a group.  Personally, I started out preferring double quotes but then changed to preferring single quotes for the reason I mentioned here:

http://trac.webkit.org/wiki/PythonGuidelines

Also see--

https://bugs.webkit.org/show_bug.cgi?id=37062

Feel free to edit the wiki page, by the way, if you disagree or have additional thoughts.

&gt; &gt; +    class TestProcessor(ProcessorBase):
&gt; 
&gt; How about naming this as MockProcessor?

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213881</commentid>
    <comment_count>5</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-18 19:43:57 -0700</bug_when>
    <thetext>&gt; I was actually making an effort to use single quotes. :)  I don&apos;t think we ever
&gt; decided this as a group.  Personally, I started out preferring double quotes
&gt; but then changed to preferring single quotes for the reason I mentioned here:

Ah, I see. I didn&apos;t notice you changed your mind :) So, let me comment again - how about changing double quotes to single quotes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213883</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-18 20:09:17 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I was actually making an effort to use single quotes. :)  I don&apos;t think we ever
&gt; &gt; decided this as a group.  Personally, I started out preferring double quotes
&gt; &gt; but then changed to preferring single quotes for the reason I mentioned here:
&gt; 
&gt; Ah, I see. I didn&apos;t notice you changed your mind :) So, let me comment again -
&gt; how about changing double quotes to single quotes?

Did you see any spots in my patch that I missed aside from this?

&gt; +        dir = os.path.join(self._temp_dir, &quot;foo_dir&quot;)

I&apos;m starting to realize there are many distinct cases where the choice between double/single needs to be made -- not just when enclosing string literals, but also inside code comments and log messages, for example.  For those I don&apos;t pretend to have a rule yet. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213886</commentid>
    <comment_count>7</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-18 20:16:24 -0700</bug_when>
    <thetext>&gt; Did you see any spots in my patch that I missed aside from this?
&gt; 
&gt; &gt; +        dir = os.path.join(self._temp_dir, &quot;foo_dir&quot;)

Yeah, I agree this is the only literal which uses double-quotes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213901</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-18 21:30:40 -0700</bug_when>
    <thetext>Committed: http://trac.webkit.org/changeset/57803

(I will change the code in the above patch to match the logic discussed here:

https://bugs.webkit.org/show_bug.cgi?id=37122#c21

in the patch to make this patch &quot;live&quot;.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53597</attachid>
            <date>2010-04-17 10:55:26 -0700</date>
            <delta_ts>2010-04-17 11:21:54 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-37754-1.diff</filename>
            <type>text/plain</type>
            <size>15413</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxY2RkMmMyLi5kMzhlMTkyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMDQt
MTYgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlZCBhIGNsYXNzIGZvciBj
aGVjay13ZWJraXQtc3R5bGUgdGhhdCBlbmNhcHN1bGF0ZXMgaXRlcmF0aW5nCisgICAgICAgIG92
ZXIgdGV4dCBmaWxlcyBhbmQgcmVhZGluZyB0aGVtLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzc1NAorCisgICAgICAgIFRoaXMgcmV2aXNpb24g
aXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAgdG93YXJkcyBzZXBhcmF0aW5nIG91cgorICAgICAgICBz
dHlsZS1jaGVja2luZyBjb2RlIGZyb20gdGhlIGxvZ2ljIG9mIGl0ZXJhdGluZyBvdmVyIGZpbGVz
IGFuZAorICAgICAgICByZWFkaW5nIHRoZW0uCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vbG9ndGVzdGluZy5weToKKyAgICAgICAgICAtIEFkZGVkIGEgbG9nTWVz
c2FnZXMoKSBtZXRob2QgdG8gdGhlIExvZ2dpbmdUZXN0Q2FzZSBjbGFzcy4KKyAgICAgICAgICAg
IFRoaXMgbWV0aG9kIHByb3ZpZGVzIHVuaXQgdGVzdHMgd2l0aCBhY2Nlc3MgdG8gdGhlIHJhdyBs
aXN0CisgICAgICAgICAgICBvZiBsb2cgbWVzc2FnZXMgaW4gY2FzZSB0aGUgdGVzdGVyIG5lZWRz
IHRvIGRvIHNvbWV0aGluZyBtb3JlCisgICAgICAgICAgICB0aGFuIHNpbXBseSBhc3NlcnQgdGhl
IGxpc3Qgb2YgZXhpc3RpbmcgbWVzc2FnZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICAgLSBBZGRlZCBhIFByb2Nlc3NvckJhc2UgY2xh
c3MgdGhhdCBwcm9jZXNzb3JzIG9mIGxpc3RzIG9mIGxpbmVzCisgICAgICAgICAgICBzaG91bGQg
ZXZlbnR1YWxseSBpbmhlcml0IGZyb20uCisgICAgICAgICAgLSBBbHNvIGFkZGVkIGEgRklYTUUg
dG8gdXNlIHRoZSBQcm9jZXNzb3JCYXNlIGNsYXNzIGFuZCB0aGUKKyAgICAgICAgICAgIFRleHRG
aWxlUmVhZGVyIGNsYXNzIGFkZGVkIGJlbG93LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9maWxlcmVhZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIENyZWF0ZWQgYSBUZXh0
RmlsZVJlYWRlciBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyByZWFkaW5nCisgICAgICAgICAgICBh
bmQgaXRlcmF0aW5nIG92ZXIgdGV4dCBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvc3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICAgLSBBZGRl
ZCBhIFRleHRGaWxlUmVhZGVyVGVzdCBjbGFzcyB0byB1bml0LXRlc3QgdGhlCisgICAgICAgICAg
ICBuZXcgVGV4dEZpbGVSZWFkZXIgY2xhc3MuCisKIDIwMTAtMDQtMTcgIEVyaWMgU2VpZGVsICA8
ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vbG9ndGVz
dGluZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9sb2d0
ZXN0aW5nLnB5CmluZGV4IGVkNGJkYTMuLmUzNjFjYjUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9sb2d0ZXN0aW5nLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9sb2d0ZXN0aW5nLnB5CkBAIC0x
NzMsNiArMTczLDEwIEBAIGNsYXNzIExvZ1Rlc3Rpbmcob2JqZWN0KToKICAgICAgICAgbG9nZ2Vy
ID0gTG9nVGVzdGluZy5fZ2V0TG9nZ2VyKCkKICAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIo
c2VsZi5faGFuZGxlcikKIAorICAgIGRlZiBtZXNzYWdlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0
dXJuIHRoZSBjdXJyZW50IGxpc3Qgb2YgbG9nIG1lc3NhZ2VzLiIiIgorICAgICAgICByZXR1cm4g
c2VsZi5fdGVzdF9zdHJlYW0ubWVzc2FnZXMKKwogICAgICMgRklYTUU6IEFkZCBhIGNsZWFyTWVz
c2FnZXMoKSBtZXRob2QgZm9yIGNhc2VzIHdoZXJlIHRoZSBjYWxsZXIKICAgICAjICAgICAgICBk
ZWxpYmVyYXRlbHkgZG9lc24ndCB3YW50IHRvIGFzc2VydCBldmVyeSBtZXNzYWdlLgogCkBAIC0y
MzQsNiArMjM4LDEwIEBAIGNsYXNzIExvZ2dpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLl9sb2cudGVhckRvd24oKQog
CisgICAgZGVmIGxvZ01lc3NhZ2VzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJl
bnQgbGlzdCBvZiBsb2cgbWVzc2FnZXMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9sb2cubWVz
c2FnZXMoKQorCiAgICAgIyBGSVhNRTogQWRkIGEgY2xlYXJNZXNzYWdlcygpIG1ldGhvZCBmb3Ig
Y2FzZXMgd2hlcmUgdGhlIGNhbGxlcgogICAgICMgICAgICAgIGRlbGliZXJhdGVseSBkb2Vzbid0
IHdhbnQgdG8gYXNzZXJ0IGV2ZXJ5IG1lc3NhZ2UuCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCAyNDlhYjRjLi41MDI5YmE4IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC01MjMsNiAr
NTIzLDIwIEBAIGNsYXNzIFN0eWxlQ2hlY2tlckNvbmZpZ3VyYXRpb24ob2JqZWN0KToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWRlbmNlX2luX2Vycm9y
KSkKIAogCitjbGFzcyBQcm9jZXNzb3JCYXNlKG9iamVjdCk6CisKKyAgICAiIiJUaGUgYmFzZSBj
bGFzcyBmb3IgcHJvY2Vzc29ycyBvZiBsaXN0cyBvZiBsaW5lcy4iIiIKKworICAgIGRlZiBzaG91
bGRfcHJvY2VzcyhzZWxmLCBmaWxlX3BhdGgpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCdTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQuJykKKworICAgIGRlZiBwcm9jZXNz
KHNlbGYsIGxpbmVzLCBmaWxlX3BhdGgsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcignU3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50LicpCisKKworIyBGSVhN
RTogTW9kaWZ5IHRoaXMgY2xhc3MgdG8gc3RhcnQgdXNpbmcgdGhlIFRleHRGaWxlUmVhZGVyIGNs
YXNzIGluCisjICAgICAgICB3ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyLnB5LiAgVGhpcyBwcm9i
YWJseSBtZWFucyBjcmVhdGluZworIyAgICAgICAgYSBTdHlsZVByb2Nlc3NvciBjbGFzcyB0aGF0
IGluaGVyaXRzIGZyb20gUHJvY2Vzc29yQmFzZS4KIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3Qp
OgogCiAgICAgIiIiU3VwcG9ydHMgY2hlY2tpbmcgc3R5bGUgaW4gZmlsZXMgYW5kIHBhdGNoZXMu
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFk
ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE2Yzg1ZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlci5weQpA
QCAtMCwwICsxLDE0NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjaHJp
cy5qZXJkb25la0BnbWFpbC5jb20pCisjIENvcHlyaWdodCAoQykgMjAxMCBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcworIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiU3VwcG9ydHMgcmVhZGluZyBh
bmQgcHJvY2Vzc2luZyB0ZXh0IGZpbGVzLiIiIgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KF9fbmFtZV9fKQorCisKK2NsYXNzIFRleHRGaWxlUmVhZGVyKG9iamVjdCk6CisKKyAgICAiIiJT
dXBwb3J0cyByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRleHQgZmlsZXMuCisKKyAgICAgICBBdHRy
aWJ1dGVzOgorICAgICAgICAgZmlsZV9jb3VudDogVGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyBw
YXNzZWQgdG8gdGhpcyBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgZm9yIHByb2Nlc3Np
bmcsIGluY2x1ZGluZyBub24tdGV4dCBmaWxlcyBhbmQgZmlsZXMKKyAgICAgICAgICAgICAgICAg
ICAgIHRoYXQgc2hvdWxkIGJlIHNraXBwZWQuCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwcm9jZXNzb3IpOgorICAgICAgICAiIiJDcmVhdGUgYW4gaW5zdGFuY2UuCisKKyAg
ICAgICAgQXJndW1lbnRzOgorICAgICAgICAgIHByb2Nlc3NvcjogQSBQcm9jZXNzb3JCYXNlIGlu
c3RhbmNlLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9wcm9jZXNzb3IgPSBwcm9jZXNz
b3IKKworICAgICAgICBzZWxmLmZpbGVfY291bnQgPSAwCisKKyAgICBkZWYgX3JlYWRfbGluZXMo
c2VsZiwgZmlsZV9wYXRoKToKKyAgICAgICAgIiIiUmVhZCB0aGUgZmlsZSBhdCBhIHBhdGgsIGFu
ZCByZXR1cm4gaXRzIGxpbmVzLgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICBJT0Vycm9y
OiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBjYW5ub3QgYmUgcmVhZC4KKworICAgICAg
ICAiIiIKKyAgICAgICAgIyBTdXBwb3J0IHRoZSBVTklYIGNvbnZlbnRpb24gb2YgdXNpbmcgIi0i
IGZvciBzdGRpbi4KKyAgICAgICAgaWYgZmlsZV9wYXRoID09ICctJzoKKyAgICAgICAgICAgIGZp
bGUgPSBjb2RlY3MuU3RyZWFtUmVhZGVyV3JpdGVyKHN5cy5zdGRpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5nZXRyZWFkZXIoJ3V0ZjgnKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5nZXR3
cml0ZXIoJ3V0ZjgnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdyZXBsYWNlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2UgZG8gbm90IG9w
ZW4gdGhlIGZpbGUgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0CisgICAgICAgICAgICAj
IChjb2RlY3MgZG9lcyBub3Qgc3VwcG9ydCBpdCBhbnl3YXkpLCBzbyB0aGUgcmVzdWx0aW5nCisg
ICAgICAgICAgICAjIGxpbmVzIGNvbnRhaW4gdHJhaWxpbmcgIlxyIiBjaGFyYWN0ZXJzIGlmIHdl
IGFyZSByZWFkaW5nCisgICAgICAgICAgICAjIGEgZmlsZSB3aXRoIENSTEYgZW5kaW5ncy4KKyAg
ICAgICAgICAgIGZpbGUgPSBjb2RlY3Mub3BlbihmaWxlX3BhdGgsICdyJywgJ3V0ZjgnLCAncmVw
bGFjZScpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGVudHMgPSBmaWxlLnJlYWQo
KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICAgICAg
bGluZXMgPSBjb250ZW50cy5zcGxpdCgnXG4nKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAg
IGRlZiBwcm9jZXNzX2ZpbGUoc2VsZiwgZmlsZV9wYXRoLCAqKmt3YXJncyk6CisgICAgICAgICIi
IlByb2Nlc3MgdGhlIGdpdmVuIGZpbGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBmaWxl
X3BhdGg6IFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIHByb2Nlc3MuCisKKyAgICAgICAgUmFpc2Vz
OgorICAgICAgICAgIFN5c3RlbUV4aXQ6IElmIG5vIGZpbGUgYXQgZmlsZV9wYXRoIGV4aXN0cy4K
KworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5maWxlX2NvdW50ICs9IDEKKworICAgICAgICBp
ZiBub3Qgc2VsZi5fcHJvY2Vzc29yLnNob3VsZF9wcm9jZXNzKGZpbGVfcGF0aCk6CisgICAgICAg
ICAgICBfbG9nLmRlYnVnKCJTa2lwcGluZyBmaWxlOiAnJXMnIiAlIGZpbGVfcGF0aCkKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBfbG9nLmRlYnVnKCJQcm9jZXNzaW5nIGZpbGU6ICclcyci
ICUgZmlsZV9wYXRoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpbmVzID0gc2VsZi5f
cmVhZF9saW5lcyhmaWxlX3BhdGgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlcnI6CisgICAg
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAg
ICBfbG9nLmVycm9yKCJGaWxlIGRvZXMgbm90IGV4aXN0OiAnJXMnIiAlIGZpbGVfcGF0aCkKKyAg
ICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICBtZXNzYWdlID0gKCJDb3Vs
ZCBub3QgcmVhZCBmaWxlLiBTa2lwcGluZzogJyVzJ1xuICAlcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgJSAoZmlsZV9wYXRoLCBlcnIpKQorICAgICAgICAgICAgX2xvZy53YXJuKG1lc3NhZ2Up
CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9wcm9jZXNzb3IucHJvY2Vzcyhs
aW5lcywgZmlsZV9wYXRoLCAqKmt3YXJncykKKworICAgIGRlZiBfcHJvY2Vzc19kaXJlY3Rvcnko
c2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgIiIiUHJvY2VzcyBhbGwgZmlsZXMgaW4gdGhlIGdp
dmVuIGRpcmVjdG9yeSwgcmVjdXJzaXZlbHkuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBk
aXJlY3Rvcnk6IEEgZGlyZWN0b3J5IHBhdGguCisKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBk
aXJfcGF0aCwgZGlyX25hbWVzLCBmaWxlX25hbWVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKKyAg
ICAgICAgICAgIGZvciBmaWxlX25hbWUgaW4gZmlsZV9uYW1lczoKKyAgICAgICAgICAgICAgICBm
aWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAg
ICAgICBzZWxmLnByb2Nlc3NfZmlsZShmaWxlX3BhdGgpCisKKyAgICBkZWYgcHJvY2Vzc19wYXRo
cyhzZWxmLCBwYXRocyk6CisgICAgICAgICIiIlByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYW5kIGRp
cmVjdG9yeSBwYXRocy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgIHBhdGhzOiBBIGxpc3Qg
b2YgZmlsZSBhbmQgZGlyZWN0b3J5IHBhdGhzLgorCisgICAgICAgICIiIgorICAgICAgICBmb3Ig
cGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAg
ICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19kaXJlY3RvcnkoZGlyZWN0b3J5PXBhdGgpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19maWxlKHBhdGgpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXJf
dW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFk
ZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2Mjlk
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
ZmlsZXJlYWRlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDE1MSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJDb250YWlucyB1bml0IHRlc3RzIGZv
ciBmaWxlcmVhZGVyLnB5LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5s
b2d0ZXN0aW5nIGltcG9ydCBMb2dnaW5nVGVzdENhc2UKK2Zyb20gd2Via2l0cHkuc3R5bGUuY2hl
Y2tlciBpbXBvcnQgUHJvY2Vzc29yQmFzZQorZnJvbSB3ZWJraXRweS5zdHlsZS5maWxlcmVhZGVy
IGltcG9ydCBUZXh0RmlsZVJlYWRlcgorCisKK2NsYXNzIFRleHRGaWxlUmVhZGVyVGVzdChMb2dn
aW5nVGVzdENhc2UpOgorCisgICAgY2xhc3MgVGVzdFByb2Nlc3NvcihQcm9jZXNzb3JCYXNlKToK
KworICAgICAgICAiIiJBIHByb2Nlc3NvciBmb3IgdGVzdCBwdXJwb3Nlcy4KKworICAgICAgICBU
aGlzIHByb2Nlc3NvciBzaW1wbHkgcmVjb3JkcyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gaXRz
IHByb2Nlc3MoKQorICAgICAgICBtZXRob2QgZm9yIGxhdGVyIGNoZWNraW5nIGJ5IHRoZSB1bml0
dGVzdCB0ZXN0IG1ldGhvZHMuCisKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzZWQgPSBbXQorICAgICAgICAgICAgIiIi
VGhlIHBhcmFtZXRlcnMgcGFzc2VkIGZvciBhbGwgY2FsbHMgdG8gdGhlIHByb2Nlc3MoKSBtZXRo
b2QuIiIiCisKKyAgICAgICAgZGVmIHNob3VsZF9wcm9jZXNzKHNlbGYsIGZpbGVfcGF0aCk6Cisg
ICAgICAgICAgICByZXR1cm4gbm90IGZpbGVfcGF0aC5lbmRzd2l0aCgnc2hvdWxkX25vdF9wcm9j
ZXNzLnR4dCcpCisKKyAgICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgbGluZXMsIGZpbGVfcGF0aCwg
dGVzdF9rd2FyZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc2VkLmFwcGVuZCgobGlu
ZXMsIGZpbGVfcGF0aCwgdGVzdF9rd2FyZykpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAg
ICAgIExvZ2dpbmdUZXN0Q2FzZS5zZXRVcChzZWxmKQorICAgICAgICBwcm9jZXNzb3IgPSBUZXh0
RmlsZVJlYWRlclRlc3QuVGVzdFByb2Nlc3NvcigpCisKKyAgICAgICAgdGVtcF9kaXIgPSB0ZW1w
ZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICBzZWxmLl9maWxlX3JlYWRlciA9IFRleHRGaWxlUmVh
ZGVyKHByb2Nlc3NvcikKKyAgICAgICAgc2VsZi5fcHJvY2Vzc29yID0gcHJvY2Vzc29yCisgICAg
ICAgIHNlbGYuX3RlbXBfZGlyID0gdGVtcF9kaXIKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToK
KyAgICAgICAgTG9nZ2luZ1Rlc3RDYXNlLnRlYXJEb3duKHNlbGYpCisgICAgICAgIHNodXRpbC5y
bXRyZWUoc2VsZi5fdGVtcF9kaXIpCisKKyAgICBkZWYgX2NyZWF0ZV9maWxlKHNlbGYsIHJlbF9w
YXRoLCB0ZXh0KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgZmlsZSB3aXRoIGdpdmVuIHRleHQgYW5k
IHJldHVybiB0aGUgcGF0aCB0byB0aGUgZmlsZS4iIiIKKyAgICAgICAgZmlsZV9wYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuX3RlbXBfZGlyLCByZWxfcGF0aCkKKworICAgICAgICBmaWxlID0gb3Bl
bihmaWxlX3BhdGgsICd3JykKKyAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQorICAgICAgICBmaWxl
LmNsb3NlKCkKKworICAgICAgICByZXR1cm4gZmlsZV9wYXRoCisKKyAgICBkZWYgX3Bhc3NlZF90
b19wcm9jZXNzb3Ioc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcGFyYW1ldGVycyBwYXNz
ZWQgdG8gVGVzdFByb2Nlc3Nvci5wcm9jZXNzKCkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9w
cm9jZXNzb3IucHJvY2Vzc2VkCisKKyAgICBkZWYgX2Fzc2VydF9maWxlX3JlYWRlcihzZWxmLCBw
YXNzZWRfdG9fcHJvY2Vzc29yLCBmaWxlX2NvdW50KToKKyAgICAgICAgIiIiQXNzZXJ0IHRoZSBz
dGF0ZSBvZiB0aGUgZmlsZSByZWFkZXIuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBh
c3NlZF90b19wcm9jZXNzb3IsIHNlbGYuX3Bhc3NlZF90b19wcm9jZXNzb3IoKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoZmlsZV9jb3VudCwgc2VsZi5fZmlsZV9yZWFkZXIuZmlsZV9jb3Vu
dCkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZmlsZV9fc2hvdWxkX25vdF9wcm9jZXNzKHNlbGYp
OgorICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5wcm9jZXNzX2ZpbGUoJ3Nob3VsZF9ub3RfcHJv
Y2Vzcy50eHQnKQorICAgICAgICBzZWxmLl9hc3NlcnRfZmlsZV9yZWFkZXIoW10sIDEpCisKKyAg
ICBkZWYgdGVzdF9wcm9jZXNzX2ZpbGVfX2RvZXNfbm90X2V4aXN0KHNlbGYpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5wcm9jZXNzX2ZpbGUoJ2RvZXNfbm90
X2V4aXN0LnR4dCcpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBlcnI6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZXJyKSwgJzEnKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5mYWlsKCdObyBFeGNlcHRpb24gcmFpc2VkLicpCisgICAgICAgIHNlbGYuX2Fz
c2VydF9maWxlX3JlYWRlcihbXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMb2coWyJFUlJPUjog
RmlsZSBkb2VzIG5vdCBleGlzdDogJ2RvZXNfbm90X2V4aXN0LnR4dCdcbiJdKQorCisgICAgZGVm
IHRlc3RfcHJvY2Vzc19maWxlX19pc19kaXIoc2VsZik6CisgICAgICAgIHRlbXBfZGlyID0gb3Mu
cGF0aC5qb2luKHNlbGYuX3RlbXBfZGlyLCAndGVzdF9kaXInKQorICAgICAgICBvcy5ta2Rpcih0
ZW1wX2RpcikKKworICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5wcm9jZXNzX2ZpbGUodGVtcF9k
aXIpCisKKyAgICAgICAgIyBCZWNhdXNlIHRoZSBsb2cgbWVzc2FnZSBiZWxvdyBjb250YWlucyBl
eGNlcHRpb24gdGV4dCwgaXQgaXMKKyAgICAgICAgIyBwb3NzaWJsZSB0aGF0IHRoZSB0ZXh0IHZh
cmllcyBhY3Jvc3MgcGxhdGZvcm1zLiAgRm9yIHRoaXMgcmVhc29uLAorICAgICAgICAjIHdlIGNo
ZWNrIG9ubHkgdGhlIHBvcnRpb24gb2YgdGhlIGxvZyBtZXNzYWdlIHRoYXQgd2UgY29udHJvbCwK
KyAgICAgICAgIyBuYW1lbHkgdGhlIHRleHQgYXQgdGhlIGJlZ2lubmluZy4KKyAgICAgICAgbG9n
X21lc3NhZ2VzID0gc2VsZi5sb2dNZXNzYWdlcygpCisgICAgICAgICMgV2UgcmVtb3ZlIHRoZSBt
ZXNzYWdlIHdlIGFyZSBsb29raW5nIGF0IHRvIHByZXZlbnQgdGhlIHRlYXJEb3duKCkKKyAgICAg
ICAgIyBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIHdoZW4gaXQgYXNzZXJ0cyB0aGF0IG5vIGxv
ZyBtZXNzYWdlcworICAgICAgICAjIHJlbWFpbi4KKyAgICAgICAgbWVzc2FnZSA9IGxvZ19tZXNz
YWdlcy5wb3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLnN0YXJ0c3dpdGgo
J1dBUk5JTkc6IENvdWxkIG5vdCByZWFkIGZpbGUuICcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmc6ICclcydcbiAgIiAlIHRlbXBfZGlyKSkKKwor
ICAgICAgICBzZWxmLl9hc3NlcnRfZmlsZV9yZWFkZXIoW10sIDEpCisKKyAgICBkZWYgdGVzdF9w
cm9jZXNzX2ZpbGVfX211bHRpcGxlX2xpbmVzKHNlbGYpOgorICAgICAgICBmaWxlX3BhdGggPSBz
ZWxmLl9jcmVhdGVfZmlsZSgnZm9vLnR4dCcsICdsaW5lIG9uZVxyXG5saW5lIHR3b1xuJykKKwor
ICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5wcm9jZXNzX2ZpbGUoZmlsZV9wYXRoKQorICAgICAg
ICBwcm9jZXNzZWQgPSBbKFsnbGluZSBvbmVccicsICdsaW5lIHR3bycsICcnXSwgZmlsZV9wYXRo
LCBOb25lKV0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X2ZpbGVfcmVhZGVyKHByb2Nlc3NlZCwgMSkK
KworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZmlsZV9fd2l0aF9rd2FyZyhzZWxmKToKKyAgICAgICAg
ZmlsZV9wYXRoID0gc2VsZi5fY3JlYXRlX2ZpbGUoJ2Zvby50eHQnLCAnZmlsZSBjb250ZW50cycp
CisKKyAgICAgICAgc2VsZi5fZmlsZV9yZWFkZXIucHJvY2Vzc19maWxlKGZpbGVfcGF0aCwgdGVz
dF9rd2FyZz0nZm9vJykKKyAgICAgICAgcHJvY2Vzc2VkID0gWyhbJ2ZpbGUgY29udGVudHMnXSwg
ZmlsZV9wYXRoLCAnZm9vJyldCisgICAgICAgIHNlbGYuX2Fzc2VydF9maWxlX3JlYWRlcihwcm9j
ZXNzZWQsIDEpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX3BhdGhzKHNlbGYpOgorICAgICAgICAj
IFdlIHRlc3QgYSBsaXN0IG9mIHBhdGhzIHRoYXQgY29udGFpbnMgYm90aCBhIGZpbGUgYW5kIGEg
ZGlyZWN0b3J5LgorICAgICAgICBkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVtcF9kaXIsICJm
b29fZGlyIikKKyAgICAgICAgb3MubWtkaXIoZGlyKQorCisgICAgICAgIGZpbGVfcGF0aDEgPSBz
ZWxmLl9jcmVhdGVfZmlsZSgnZmlsZTEudHh0JywgJ2ZvbycpCisKKyAgICAgICAgcmVsX3BhdGgg
PSBvcy5wYXRoLmpvaW4oJ2Zvb19kaXInLCAnZmlsZTIudHh0JykKKyAgICAgICAgZmlsZV9wYXRo
MiA9IHNlbGYuX2NyZWF0ZV9maWxlKHJlbF9wYXRoLCAnYmFyJykKKworICAgICAgICBzZWxmLl9m
aWxlX3JlYWRlci5wcm9jZXNzX3BhdGhzKFtkaXIsIGZpbGVfcGF0aDFdKQorICAgICAgICBwcm9j
ZXNzZWQgPSBbKFsnYmFyJ10sIGZpbGVfcGF0aDIsIE5vbmUpLAorICAgICAgICAgICAgICAgICAg
ICAgKFsnZm9vJ10sIGZpbGVfcGF0aDEsIE5vbmUpXQorICAgICAgICBzZWxmLl9hc3NlcnRfZmls
ZV9yZWFkZXIocHJvY2Vzc2VkLCAyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53599</attachid>
            <date>2010-04-17 11:21:54 -0700</date>
            <delta_ts>2010-04-20 06:30:25 -0700</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-37754-2.diff</filename>
            <type>text/plain</type>
            <size>16403</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxY2RkMmMyLi5kMzhlMTkyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMDQt
MTYgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlZCBhIGNsYXNzIGZvciBj
aGVjay13ZWJraXQtc3R5bGUgdGhhdCBlbmNhcHN1bGF0ZXMgaXRlcmF0aW5nCisgICAgICAgIG92
ZXIgdGV4dCBmaWxlcyBhbmQgcmVhZGluZyB0aGVtLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzc1NAorCisgICAgICAgIFRoaXMgcmV2aXNpb24g
aXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAgdG93YXJkcyBzZXBhcmF0aW5nIG91cgorICAgICAgICBz
dHlsZS1jaGVja2luZyBjb2RlIGZyb20gdGhlIGxvZ2ljIG9mIGl0ZXJhdGluZyBvdmVyIGZpbGVz
IGFuZAorICAgICAgICByZWFkaW5nIHRoZW0uCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vbG9ndGVzdGluZy5weToKKyAgICAgICAgICAtIEFkZGVkIGEgbG9nTWVz
c2FnZXMoKSBtZXRob2QgdG8gdGhlIExvZ2dpbmdUZXN0Q2FzZSBjbGFzcy4KKyAgICAgICAgICAg
IFRoaXMgbWV0aG9kIHByb3ZpZGVzIHVuaXQgdGVzdHMgd2l0aCBhY2Nlc3MgdG8gdGhlIHJhdyBs
aXN0CisgICAgICAgICAgICBvZiBsb2cgbWVzc2FnZXMgaW4gY2FzZSB0aGUgdGVzdGVyIG5lZWRz
IHRvIGRvIHNvbWV0aGluZyBtb3JlCisgICAgICAgICAgICB0aGFuIHNpbXBseSBhc3NlcnQgdGhl
IGxpc3Qgb2YgZXhpc3RpbmcgbWVzc2FnZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICAgLSBBZGRlZCBhIFByb2Nlc3NvckJhc2UgY2xh
c3MgdGhhdCBwcm9jZXNzb3JzIG9mIGxpc3RzIG9mIGxpbmVzCisgICAgICAgICAgICBzaG91bGQg
ZXZlbnR1YWxseSBpbmhlcml0IGZyb20uCisgICAgICAgICAgLSBBbHNvIGFkZGVkIGEgRklYTUUg
dG8gdXNlIHRoZSBQcm9jZXNzb3JCYXNlIGNsYXNzIGFuZCB0aGUKKyAgICAgICAgICAgIFRleHRG
aWxlUmVhZGVyIGNsYXNzIGFkZGVkIGJlbG93LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9maWxlcmVhZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgICAtIENyZWF0ZWQgYSBUZXh0
RmlsZVJlYWRlciBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyByZWFkaW5nCisgICAgICAgICAgICBh
bmQgaXRlcmF0aW5nIG92ZXIgdGV4dCBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvc3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICAgLSBBZGRl
ZCBhIFRleHRGaWxlUmVhZGVyVGVzdCBjbGFzcyB0byB1bml0LXRlc3QgdGhlCisgICAgICAgICAg
ICBuZXcgVGV4dEZpbGVSZWFkZXIgY2xhc3MuCisKIDIwMTAtMDQtMTcgIEVyaWMgU2VpZGVsICA8
ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vbG9ndGVz
dGluZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9sb2d0
ZXN0aW5nLnB5CmluZGV4IGVkNGJkYTMuLmUzNjFjYjUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9sb2d0ZXN0aW5nLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9sb2d0ZXN0aW5nLnB5CkBAIC0x
NzMsNiArMTczLDEwIEBAIGNsYXNzIExvZ1Rlc3Rpbmcob2JqZWN0KToKICAgICAgICAgbG9nZ2Vy
ID0gTG9nVGVzdGluZy5fZ2V0TG9nZ2VyKCkKICAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIo
c2VsZi5faGFuZGxlcikKIAorICAgIGRlZiBtZXNzYWdlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0
dXJuIHRoZSBjdXJyZW50IGxpc3Qgb2YgbG9nIG1lc3NhZ2VzLiIiIgorICAgICAgICByZXR1cm4g
c2VsZi5fdGVzdF9zdHJlYW0ubWVzc2FnZXMKKwogICAgICMgRklYTUU6IEFkZCBhIGNsZWFyTWVz
c2FnZXMoKSBtZXRob2QgZm9yIGNhc2VzIHdoZXJlIHRoZSBjYWxsZXIKICAgICAjICAgICAgICBk
ZWxpYmVyYXRlbHkgZG9lc24ndCB3YW50IHRvIGFzc2VydCBldmVyeSBtZXNzYWdlLgogCkBAIC0y
MzQsNiArMjM4LDEwIEBAIGNsYXNzIExvZ2dpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLl9sb2cudGVhckRvd24oKQog
CisgICAgZGVmIGxvZ01lc3NhZ2VzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJl
bnQgbGlzdCBvZiBsb2cgbWVzc2FnZXMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9sb2cubWVz
c2FnZXMoKQorCiAgICAgIyBGSVhNRTogQWRkIGEgY2xlYXJNZXNzYWdlcygpIG1ldGhvZCBmb3Ig
Y2FzZXMgd2hlcmUgdGhlIGNhbGxlcgogICAgICMgICAgICAgIGRlbGliZXJhdGVseSBkb2Vzbid0
IHdhbnQgdG8gYXNzZXJ0IGV2ZXJ5IG1lc3NhZ2UuCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCAyNDlhYjRjLi4xMDEwMGQ4IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC01MjMsNiAr
NTIzLDM1IEBAIGNsYXNzIFN0eWxlQ2hlY2tlckNvbmZpZ3VyYXRpb24ob2JqZWN0KToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWRlbmNlX2luX2Vycm9y
KSkKIAogCitjbGFzcyBQcm9jZXNzb3JCYXNlKG9iamVjdCk6CisKKyAgICAiIiJUaGUgYmFzZSBj
bGFzcyBmb3IgcHJvY2Vzc29ycyBvZiBsaXN0cyBvZiBsaW5lcy4iIiIKKworICAgIGRlZiBzaG91
bGRfcHJvY2VzcyhzZWxmLCBmaWxlX3BhdGgpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0
aGUgZmlsZSBhdCBmaWxlX3BhdGggc2hvdWxkIGJlIHByb2Nlc3NlZC4iIiIKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcignU3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50LicpCisK
KyAgICBkZWYgcHJvY2VzcyhzZWxmLCBsaW5lcywgZmlsZV9wYXRoLCAqKmt3YXJncyk6CisgICAg
ICAgICIiIlByb2Nlc3MgbGluZXMgb2YgdGV4dCByZWFkIGZyb20gYSBmaWxlLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgbGluZXM6IEEgbGlzdCBvZiBsaW5lcyBvZiB0ZXh0IHRvIHByb2Nl
c3MuCisgICAgICAgICAgZmlsZV9wYXRoOiBUaGUgcGF0aCBmcm9tIHdoaWNoIHRoZSBsaW5lcyB3
ZXJlIHJlYWQuCisgICAgICAgICAgKiprd2FyZ3M6IFRoaXMgYXJndW1lbnQgc2lnbmlmaWVzIHRo
YXQgdGhlIHByb2Nlc3MoKSBtZXRob2Qgb2YKKyAgICAgICAgICAgICAgICAgICAgc3ViY2xhc3Nl
cyBvZiBQcm9jZXNzb3JCYXNlIG1heSBzdXBwb3J0IGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAg
ICAgICAga2V5d29yZCBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhh
bXBsZSwgYSBzdHlsZSBwcm9jZXNzb3IncyBwcm9jZXNzKCkgbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgIG1heSBzdXBwb3J0IGEgInJlcG9ydGFibGVfbGluZXMiIHBhcmFtZXRlciB0aGF0IHJl
cHJlc2VudHMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgbGlu
ZXMgZm9yIHdoaWNoIHN0eWxlIGVycm9ycworICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUg
cmVwb3J0ZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoJ1N1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudC4nKQorCisKKyMgRklYTUU6IE1vZGlmeSB0
aGlzIGNsYXNzIHRvIHN0YXJ0IHVzaW5nIHRoZSBUZXh0RmlsZVJlYWRlciBjbGFzcyBpbgorIyAg
ICAgICAgd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlci5weS4gIFRoaXMgcHJvYmFibHkgbWVhbnMg
Y3JlYXRpbmcKKyMgICAgICAgIGEgU3R5bGVQcm9jZXNzb3IgY2xhc3MgdGhhdCBpbmhlcml0cyBm
cm9tIFByb2Nlc3NvckJhc2UuCiBjbGFzcyBTdHlsZUNoZWNrZXIob2JqZWN0KToKIAogICAgICIi
IlN1cHBvcnRzIGNoZWNraW5nIHN0eWxlIGluIGZpbGVzIGFuZCBwYXRjaGVzLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWxlcmVhZGVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWU2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXIucHkKQEAgLTAsMCArMSwx
NDggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtA
Z21haWwuY29tKQorIyBDb3B5cmlnaHQgKEMpIDIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlN1cHBvcnRzIHJlYWRpbmcgYW5kIHByb2Nlc3Np
bmcgdGV4dCBmaWxlcy4iIiIKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBvcworaW1wb3J0IHN5cworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
KworCitjbGFzcyBUZXh0RmlsZVJlYWRlcihvYmplY3QpOgorCisgICAgIiIiU3VwcG9ydHMgcmVh
ZGluZyBhbmQgcHJvY2Vzc2luZyB0ZXh0IGZpbGVzLgorCisgICAgICAgQXR0cmlidXRlczoKKyAg
ICAgICAgIGZpbGVfY291bnQ6IFRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMgcGFzc2VkIHRvIHRo
aXMgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9jZXNzaW5nLCBpbmNsdWRp
bmcgbm9uLXRleHQgZmlsZXMgYW5kIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICB0aGF0IHNo
b3VsZCBiZSBza2lwcGVkLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJv
Y2Vzc29yKToKKyAgICAgICAgIiIiQ3JlYXRlIGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3Vt
ZW50czoKKyAgICAgICAgICBwcm9jZXNzb3I6IEEgUHJvY2Vzc29yQmFzZSBpbnN0YW5jZS4KKwor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcHJvY2Vzc29yID0gcHJvY2Vzc29yCisgICAgICAg
IHNlbGYuZmlsZV9jb3VudCA9IDAKKworICAgIGRlZiBfcmVhZF9saW5lcyhzZWxmLCBmaWxlX3Bh
dGgpOgorICAgICAgICAiIiJSZWFkIHRoZSBmaWxlIGF0IGEgcGF0aCwgYW5kIHJldHVybiBpdHMg
bGluZXMuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgIElPRXJyb3I6IElmIHRoZSBmaWxl
IGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZSByZWFkLgorCisgICAgICAgICIiIgorICAgICAg
ICAjIFN1cHBvcnQgdGhlIFVOSVggY29udmVudGlvbiBvZiB1c2luZyAiLSIgZm9yIHN0ZGluLgor
ICAgICAgICBpZiBmaWxlX3BhdGggPT0gJy0nOgorICAgICAgICAgICAgZmlsZSA9IGNvZGVjcy5T
dHJlYW1SZWFkZXJXcml0ZXIoc3lzLnN0ZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZWNzLmdldHJlYWRlcigndXRmOCcpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLmdldHdyaXRlcigndXRmOCcp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxhY2Un
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXZSBkbyBub3Qgb3BlbiB0aGUgZmlsZSB3
aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgICAgICAgICAgICMgKGNvZGVjcyBkb2Vz
IG5vdCBzdXBwb3J0IGl0IGFueXdheSksIHNvIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICMg
bGluZXMgY29udGFpbiB0cmFpbGluZyAiXHIiIGNoYXJhY3RlcnMgaWYgd2UgYXJlIHJlYWRpbmcK
KyAgICAgICAgICAgICMgYSBmaWxlIHdpdGggQ1JMRiBlbmRpbmdzLgorICAgICAgICAgICAgZmls
ZSA9IGNvZGVjcy5vcGVuKGZpbGVfcGF0aCwgJ3InLCAndXRmOCcsICdyZXBsYWNlJykKKworICAg
ICAgICB0cnk6CisgICAgICAgICAgICBjb250ZW50cyA9IGZpbGUucmVhZCgpCisgICAgICAgIGZp
bmFsbHk6CisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgICAgICBsaW5lcyA9IGNvbnRl
bnRzLnNwbGl0KCdcbicpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIHByb2Nlc3Nf
ZmlsZShzZWxmLCBmaWxlX3BhdGgsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUHJvY2VzcyB0aGUg
Z2l2ZW4gZmlsZSBieSBjYWxsaW5nIHRoZSBwcm9jZXNzb3IncyBwcm9jZXNzKCkgbWV0aG9kLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgZmlsZV9wYXRoOiBUaGUgcGF0aCBvZiB0aGUgZmls
ZSB0byBwcm9jZXNzLgorICAgICAgICAgICoqa3dhcmdzOiBBbnkgYWRkaXRpb25hbCBrZXl3b3Jk
IHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRv
IHRoZSBwcm9jZXNzb3IncyBwcm9jZXNzKCkgbWV0aG9kLiAgVGhlIHByb2Nlc3MoKQorICAgICAg
ICAgICAgICAgICAgICBtZXRob2Qgc2hvdWxkIHN1cHBvcnQgdGhlc2Uga2V5d29yZCBhcmd1bWVu
dHMuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgIFN5c3RlbUV4aXQ6IElmIG5vIGZpbGUg
YXQgZmlsZV9wYXRoIGV4aXN0cy4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5maWxlX2Nv
dW50ICs9IDEKKworICAgICAgICBpZiBub3Qgc2VsZi5fcHJvY2Vzc29yLnNob3VsZF9wcm9jZXNz
KGZpbGVfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCJTa2lwcGluZyBmaWxlOiAnJXMn
IiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBfbG9nLmRlYnVnKCJQ
cm9jZXNzaW5nIGZpbGU6ICclcyciICUgZmlsZV9wYXRoKQorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGxpbmVzID0gc2VsZi5fcmVhZF9saW5lcyhmaWxlX3BhdGgpCisgICAgICAgIGV4Y2Vw
dCBJT0Vycm9yLCBlcnI6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9w
YXRoKToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJGaWxlIGRvZXMgbm90IGV4aXN0OiAn
JXMnIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAg
ICAgICBtZXNzYWdlID0gKCJDb3VsZCBub3QgcmVhZCBmaWxlLiBTa2lwcGluZzogJyVzJ1xuICAl
cyIKKyAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZV9wYXRoLCBlcnIpKQorICAgICAgICAg
ICAgX2xvZy53YXJuKG1lc3NhZ2UpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxm
Ll9wcm9jZXNzb3IucHJvY2VzcyhsaW5lcywgZmlsZV9wYXRoLCAqKmt3YXJncykKKworICAgIGRl
ZiBfcHJvY2Vzc19kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgIiIiUHJvY2Vz
cyBhbGwgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSwgcmVjdXJzaXZlbHkuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICBkaXJlY3Rvcnk6IEEgZGlyZWN0b3J5IHBhdGguCisKKyAgICAg
ICAgIiIiCisgICAgICAgIGZvciBkaXJfcGF0aCwgZGlyX25hbWVzLCBmaWxlX25hbWVzIGluIG9z
LndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGZvciBmaWxlX25hbWUgaW4gZmlsZV9uYW1l
czoKKyAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZp
bGVfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfZmlsZShmaWxlX3BhdGgpCisK
KyAgICBkZWYgcHJvY2Vzc19wYXRocyhzZWxmLCBwYXRocyk6CisgICAgICAgICIiIlByb2Nlc3Mg
dGhlIGdpdmVuIGZpbGUgYW5kIGRpcmVjdG9yeSBwYXRocy4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgIHBhdGhzOiBBIGxpc3Qgb2YgZmlsZSBhbmQgZGlyZWN0b3J5IHBhdGhzLgorCisgICAg
ICAgICIiIgorICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIGlmIG9zLnBh
dGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19kaXJlY3Rvcnko
ZGlyZWN0b3J5PXBhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYu
cHJvY2Vzc19maWxlKHBhdGgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2ZpbGVyZWFkZXJfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2ZpbGVyZWFkZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWM2MjlkZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsZXJlYWRlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDE1
MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJr
aXQub3JnKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJD
b250YWlucyB1bml0IHRlc3RzIGZvciBmaWxlcmVhZGVyLnB5LiIiIgorCitpbXBvcnQgb3MKK2lt
cG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5sb2d0ZXN0aW5nIGltcG9ydCBMb2dnaW5nVGVzdENhc2UKK2Zy
b20gd2Via2l0cHkuc3R5bGUuY2hlY2tlciBpbXBvcnQgUHJvY2Vzc29yQmFzZQorZnJvbSB3ZWJr
aXRweS5zdHlsZS5maWxlcmVhZGVyIGltcG9ydCBUZXh0RmlsZVJlYWRlcgorCisKK2NsYXNzIFRl
eHRGaWxlUmVhZGVyVGVzdChMb2dnaW5nVGVzdENhc2UpOgorCisgICAgY2xhc3MgVGVzdFByb2Nl
c3NvcihQcm9jZXNzb3JCYXNlKToKKworICAgICAgICAiIiJBIHByb2Nlc3NvciBmb3IgdGVzdCBw
dXJwb3Nlcy4KKworICAgICAgICBUaGlzIHByb2Nlc3NvciBzaW1wbHkgcmVjb3JkcyB0aGUgcGFy
YW1ldGVycyBwYXNzZWQgdG8gaXRzIHByb2Nlc3MoKQorICAgICAgICBtZXRob2QgZm9yIGxhdGVy
IGNoZWNraW5nIGJ5IHRoZSB1bml0dGVzdCB0ZXN0IG1ldGhvZHMuCisKKyAgICAgICAgIiIiCisK
KyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzZWQg
PSBbXQorICAgICAgICAgICAgIiIiVGhlIHBhcmFtZXRlcnMgcGFzc2VkIGZvciBhbGwgY2FsbHMg
dG8gdGhlIHByb2Nlc3MoKSBtZXRob2QuIiIiCisKKyAgICAgICAgZGVmIHNob3VsZF9wcm9jZXNz
KHNlbGYsIGZpbGVfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gbm90IGZpbGVfcGF0aC5lbmRz
d2l0aCgnc2hvdWxkX25vdF9wcm9jZXNzLnR4dCcpCisKKyAgICAgICAgZGVmIHByb2Nlc3Moc2Vs
ZiwgbGluZXMsIGZpbGVfcGF0aCwgdGVzdF9rd2FyZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYu
cHJvY2Vzc2VkLmFwcGVuZCgobGluZXMsIGZpbGVfcGF0aCwgdGVzdF9rd2FyZykpCisKKyAgICBk
ZWYgc2V0VXAoc2VsZik6CisgICAgICAgIExvZ2dpbmdUZXN0Q2FzZS5zZXRVcChzZWxmKQorICAg
ICAgICBwcm9jZXNzb3IgPSBUZXh0RmlsZVJlYWRlclRlc3QuVGVzdFByb2Nlc3NvcigpCisKKyAg
ICAgICAgdGVtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICBzZWxmLl9maWxl
X3JlYWRlciA9IFRleHRGaWxlUmVhZGVyKHByb2Nlc3NvcikKKyAgICAgICAgc2VsZi5fcHJvY2Vz
c29yID0gcHJvY2Vzc29yCisgICAgICAgIHNlbGYuX3RlbXBfZGlyID0gdGVtcF9kaXIKKworICAg
IGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgTG9nZ2luZ1Rlc3RDYXNlLnRlYXJEb3duKHNl
bGYpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fdGVtcF9kaXIpCisKKyAgICBkZWYgX2Ny
ZWF0ZV9maWxlKHNlbGYsIHJlbF9wYXRoLCB0ZXh0KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgZmls
ZSB3aXRoIGdpdmVuIHRleHQgYW5kIHJldHVybiB0aGUgcGF0aCB0byB0aGUgZmlsZS4iIiIKKyAg
ICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3RlbXBfZGlyLCByZWxfcGF0aCkK
KworICAgICAgICBmaWxlID0gb3BlbihmaWxlX3BhdGgsICd3JykKKyAgICAgICAgZmlsZS53cml0
ZSh0ZXh0KQorICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gZmlsZV9wYXRo
CisKKyAgICBkZWYgX3Bhc3NlZF90b19wcm9jZXNzb3Ioc2VsZik6CisgICAgICAgICIiIlJldHVy
biB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gVGVzdFByb2Nlc3Nvci5wcm9jZXNzKCkuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzb3IucHJvY2Vzc2VkCisKKyAgICBkZWYgX2Fzc2Vy
dF9maWxlX3JlYWRlcihzZWxmLCBwYXNzZWRfdG9fcHJvY2Vzc29yLCBmaWxlX2NvdW50KToKKyAg
ICAgICAgIiIiQXNzZXJ0IHRoZSBzdGF0ZSBvZiB0aGUgZmlsZSByZWFkZXIuIiIiCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHBhc3NlZF90b19wcm9jZXNzb3IsIHNlbGYuX3Bhc3NlZF90b19w
cm9jZXNzb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmlsZV9jb3VudCwgc2VsZi5f
ZmlsZV9yZWFkZXIuZmlsZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZmlsZV9fc2hv
dWxkX25vdF9wcm9jZXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5wcm9jZXNz
X2ZpbGUoJ3Nob3VsZF9ub3RfcHJvY2Vzcy50eHQnKQorICAgICAgICBzZWxmLl9hc3NlcnRfZmls
ZV9yZWFkZXIoW10sIDEpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2ZpbGVfX2RvZXNfbm90X2V4
aXN0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5w
cm9jZXNzX2ZpbGUoJ2RvZXNfbm90X2V4aXN0LnR4dCcpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1F
eGl0LCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZXJyKSwgJzEnKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBFeGNlcHRpb24gcmFpc2Vk
LicpCisgICAgICAgIHNlbGYuX2Fzc2VydF9maWxlX3JlYWRlcihbXSwgMSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRMb2coWyJFUlJPUjogRmlsZSBkb2VzIG5vdCBleGlzdDogJ2RvZXNfbm90X2V4aXN0
LnR4dCdcbiJdKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19maWxlX19pc19kaXIoc2VsZik6Cisg
ICAgICAgIHRlbXBfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX3RlbXBfZGlyLCAndGVzdF9kaXIn
KQorICAgICAgICBvcy5ta2Rpcih0ZW1wX2RpcikKKworICAgICAgICBzZWxmLl9maWxlX3JlYWRl
ci5wcm9jZXNzX2ZpbGUodGVtcF9kaXIpCisKKyAgICAgICAgIyBCZWNhdXNlIHRoZSBsb2cgbWVz
c2FnZSBiZWxvdyBjb250YWlucyBleGNlcHRpb24gdGV4dCwgaXQgaXMKKyAgICAgICAgIyBwb3Nz
aWJsZSB0aGF0IHRoZSB0ZXh0IHZhcmllcyBhY3Jvc3MgcGxhdGZvcm1zLiAgRm9yIHRoaXMgcmVh
c29uLAorICAgICAgICAjIHdlIGNoZWNrIG9ubHkgdGhlIHBvcnRpb24gb2YgdGhlIGxvZyBtZXNz
YWdlIHRoYXQgd2UgY29udHJvbCwKKyAgICAgICAgIyBuYW1lbHkgdGhlIHRleHQgYXQgdGhlIGJl
Z2lubmluZy4KKyAgICAgICAgbG9nX21lc3NhZ2VzID0gc2VsZi5sb2dNZXNzYWdlcygpCisgICAg
ICAgICMgV2UgcmVtb3ZlIHRoZSBtZXNzYWdlIHdlIGFyZSBsb29raW5nIGF0IHRvIHByZXZlbnQg
dGhlIHRlYXJEb3duKCkKKyAgICAgICAgIyBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIHdoZW4g
aXQgYXNzZXJ0cyB0aGF0IG5vIGxvZyBtZXNzYWdlcworICAgICAgICAjIHJlbWFpbi4KKyAgICAg
ICAgbWVzc2FnZSA9IGxvZ19tZXNzYWdlcy5wb3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtZXNzYWdlLnN0YXJ0c3dpdGgoJ1dBUk5JTkc6IENvdWxkIG5vdCByZWFkIGZpbGUuICcKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmc6ICclcydc
biAgIiAlIHRlbXBfZGlyKSkKKworICAgICAgICBzZWxmLl9hc3NlcnRfZmlsZV9yZWFkZXIoW10s
IDEpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2ZpbGVfX211bHRpcGxlX2xpbmVzKHNlbGYpOgor
ICAgICAgICBmaWxlX3BhdGggPSBzZWxmLl9jcmVhdGVfZmlsZSgnZm9vLnR4dCcsICdsaW5lIG9u
ZVxyXG5saW5lIHR3b1xuJykKKworICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5wcm9jZXNzX2Zp
bGUoZmlsZV9wYXRoKQorICAgICAgICBwcm9jZXNzZWQgPSBbKFsnbGluZSBvbmVccicsICdsaW5l
IHR3bycsICcnXSwgZmlsZV9wYXRoLCBOb25lKV0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X2ZpbGVf
cmVhZGVyKHByb2Nlc3NlZCwgMSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZmlsZV9fd2l0aF9r
d2FyZyhzZWxmKToKKyAgICAgICAgZmlsZV9wYXRoID0gc2VsZi5fY3JlYXRlX2ZpbGUoJ2Zvby50
eHQnLCAnZmlsZSBjb250ZW50cycpCisKKyAgICAgICAgc2VsZi5fZmlsZV9yZWFkZXIucHJvY2Vz
c19maWxlKGZpbGVfcGF0aCwgdGVzdF9rd2FyZz0nZm9vJykKKyAgICAgICAgcHJvY2Vzc2VkID0g
WyhbJ2ZpbGUgY29udGVudHMnXSwgZmlsZV9wYXRoLCAnZm9vJyldCisgICAgICAgIHNlbGYuX2Fz
c2VydF9maWxlX3JlYWRlcihwcm9jZXNzZWQsIDEpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX3Bh
dGhzKHNlbGYpOgorICAgICAgICAjIFdlIHRlc3QgYSBsaXN0IG9mIHBhdGhzIHRoYXQgY29udGFp
bnMgYm90aCBhIGZpbGUgYW5kIGEgZGlyZWN0b3J5LgorICAgICAgICBkaXIgPSBvcy5wYXRoLmpv
aW4oc2VsZi5fdGVtcF9kaXIsICJmb29fZGlyIikKKyAgICAgICAgb3MubWtkaXIoZGlyKQorCisg
ICAgICAgIGZpbGVfcGF0aDEgPSBzZWxmLl9jcmVhdGVfZmlsZSgnZmlsZTEudHh0JywgJ2Zvbycp
CisKKyAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oJ2Zvb19kaXInLCAnZmlsZTIudHh0
JykKKyAgICAgICAgZmlsZV9wYXRoMiA9IHNlbGYuX2NyZWF0ZV9maWxlKHJlbF9wYXRoLCAnYmFy
JykKKworICAgICAgICBzZWxmLl9maWxlX3JlYWRlci5wcm9jZXNzX3BhdGhzKFtkaXIsIGZpbGVf
cGF0aDFdKQorICAgICAgICBwcm9jZXNzZWQgPSBbKFsnYmFyJ10sIGZpbGVfcGF0aDIsIE5vbmUp
LAorICAgICAgICAgICAgICAgICAgICAgKFsnZm9vJ10sIGZpbGVfcGF0aDEsIE5vbmUpXQorICAg
ICAgICBzZWxmLl9hc3NlcnRfZmlsZV9yZWFkZXIocHJvY2Vzc2VkLCAyKQo=
</data>
<flag name="review"
          id="37366"
          type_id="1"
          status="+"
          setter="hamaji"
    />
          </attachment>
      

    </bug>

</bugzilla>