<?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>106429</bug_id>
          
          <creation_ts>2013-01-09 01:48:17 -0800</creation_ts>
          <short_desc>webkitpy&apos;s SCM unit tests fail</short_desc>
          <delta_ts>2013-01-20 20:39:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>104198</dependson>
          <blocked>79404</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim &apos;mithro&apos; Ansell">mithro</reporter>
          <assigned_to name="Tim &apos;mithro&apos; Ansell">mithro</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>803152</commentid>
    <comment_count>0</comment_count>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 01:48:17 -0800</bug_when>
    <thetext>Fix both working_directory and commit_with_message functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803154</commentid>
    <comment_count>1</comment_count>
      <attachid>181878</attachid>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 01:49:15 -0800</bug_when>
    <thetext>Created attachment 181878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803155</commentid>
    <comment_count>2</comment_count>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 01:50:28 -0800</bug_when>
    <thetext>tansell@tansell-z620-l:/fast/chrome/src/third_party/WebKit/Tools/Scripts$ ./test-webkitpy webkitpy.common.checkout.scm.scm_unittest.GitSVNTest
Suppressing most webkitpy logging while running unit tests.
[12/63] webkitpy.common.checkout.scm.scm_unittest.GitSVNTest.test_commit_with_message_git_commit erred:                
  Traceback (most recent call last):
    File &quot;/fast/chrome/src/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py&quot;, line 1205, in test_commit_with_message_git_commit
      commit_text = self.scm.commit_with_message(&quot;another test commit&quot;, git_commit=&quot;HEAD^&quot;)
    File &quot;/fast/chrome/src/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 364, in commit_with_message
      raise ScriptError(message=&quot;Working copy is modified. Cannot commit individual git_commits.&quot;)
  ScriptError: Working copy is modified. Cannot commit individual git_commits.
  
[18/63] webkitpy.common.checkout.scm.scm_unittest.GitSVNTest.test_commit_with_message_git_commit_range erred: 
  Traceback (most recent call last):
    File &quot;/fast/chrome/src/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py&quot;, line 1215, in test_commit_with_message_git_commit_range
      commit_text = self.scm.commit_with_message(&quot;another test commit&quot;, git_commit=&quot;HEAD~2..HEAD&quot;)
    File &quot;/fast/chrome/src/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 364, in commit_with_message
      raise ScriptError(message=&quot;Working copy is modified. Cannot commit individual git_commits.&quot;)
  ScriptError: Working copy is modified. Cannot commit individual git_commits.
  
[28/63] webkitpy.common.checkout.scm.scm_unittest.GitSVNTest.test_commit_with_message_only_local_commit erred:
  Traceback (most recent call last):
    File &quot;/fast/chrome/src/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py&quot;, line 1225, in test_commit_with_message_only_local_commit
      commit_text = self.scm.commit_with_message(&quot;another test commit&quot;)
    File &quot;/fast/chrome/src/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 368, in commit_with_message
      self._assert_can_squash(working_directory_is_clean)
    File &quot;/fast/chrome/src/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 345, in _assert_can_squash
      raise AmbiguousCommitError(num_local_commits, working_directory_is_clean)
  AmbiguousCommitError
  
Ran 63 tests in 34.061s                                                                                                             
FAILED (failures=0, errors=3)


after

$ ./test-webkitpy webkitpy.common.checkout.scm.scm_unittest.GitSVNTest
Suppressing most webkitpy logging while running unit tests.
Ran 63 tests in 36.501s                                                                                                             

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803156</commentid>
    <comment_count>3</comment_count>
      <attachid>181878</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-09 01:51:42 -0800</bug_when>
    <thetext>Comment on attachment 181878
Patch

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

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:152
&gt; -        return self._run_git([&apos;diff&apos;, self.remote_merge_base(), &apos;--no-renames&apos;, &apos;--name-only&apos;]) == &quot;&quot;
&gt; +        return self._run_git([&apos;diff&apos;, &apos;HEAD&apos;, &apos;--no-renames&apos;, &apos;--name-only&apos;]) == &quot;&quot;

Its possible this change was intentional, but the tests wer never updated to reflect it (since they were slow/busted).  You&apos;d have to ask dpranke.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803161</commentid>
    <comment_count>4</comment_count>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 02:12:03 -0800</bug_when>
    <thetext>If I understand this correctly the following changes have occured.

The working_directory_is_clean and clean_working_directory functions now deal with the normal meaning of &quot;working directory&quot;, IE stuff which has yet to be committed.

The commit_with_message function has been modify so it does one of the following options (which is what the tests are currently testing for):

If you give it a commit range, then it&apos;ll dcommit the git commits referred too.

If you have asked it to squash (via either the force_squash or the webkit-patch.commit-should-always-squash config) then it will squash all yet to dcommitted git commits and anything in the working directory together, then dcommit the result.

Otherwise, it will check there is only a single thing to dcommit, either a single git commit, or stuff in the working directory, and dcommit that.

Does that match what you actually want it to do?

Tim</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803162</commentid>
    <comment_count>5</comment_count>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 02:13:19 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; If I understand this correctly the following changes have occured.
&gt; 
&gt; The working_directory_is_clean and clean_working_directory functions now deal with the normal meaning of &quot;working directory&quot;, IE stuff which has yet to be committed.

To be clear, I actually mean changes which have yet to be committed to EITHER subversion OR git.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803763</commentid>
    <comment_count>6</comment_count>
      <attachid>181878</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-01-09 15:06:14 -0800</bug_when>
    <thetext>Comment on attachment 181878
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:152
&gt;&gt; +        return self._run_git([&apos;diff&apos;, &apos;HEAD&apos;, &apos;--no-renames&apos;, &apos;--name-only&apos;]) == &quot;&quot;
&gt; 
&gt; Its possible this change was intentional, but the tests wer never updated to reflect it (since they were slow/busted).  You&apos;d have to ask dpranke.

Right, this change was intentional and we need to fix the tests. The issue comes up when the CQ is ahead of the remote for one reason or another. I think abarth actually made this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803770</commentid>
    <comment_count>7</comment_count>
      <attachid>181878</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-09 15:15:46 -0800</bug_when>
    <thetext>Comment on attachment 181878
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:152
&gt;&gt;&gt; +        return self._run_git([&apos;diff&apos;, &apos;HEAD&apos;, &apos;--no-renames&apos;, &apos;--name-only&apos;]) == &quot;&quot;
&gt;&gt; 
&gt;&gt; Its possible this change was intentional, but the tests wer never updated to reflect it (since they were slow/busted).  You&apos;d have to ask dpranke.
&gt; 
&gt; Right, this change was intentional and we need to fix the tests. The issue comes up when the CQ is ahead of the remote for one reason or another. I think abarth actually made this change.

Yeah, the problem is that if we have local commits (i.e., HEAD points to something we&apos;ve committed locally), then clean_working_directory will leave those commits around instead of blowing them away.

This happens all the time on the commit-queue because the way it lands patches is to first commit them locally and then dcommit them to svn.  If the dcommit fails, it will have the local commit.  If clean doesn&apos;t blow the local commit away, it will bork the queue until it does its big working copy reset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803814</commentid>
    <comment_count>8</comment_count>
      <attachid>181878</attachid>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 16:35:48 -0800</bug_when>
    <thetext>Comment on attachment 181878
Patch

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

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:152
&gt;&gt;&gt;&gt; +        return self._run_git([&apos;diff&apos;, &apos;HEAD&apos;, &apos;--no-renames&apos;, &apos;--name-only&apos;]) == &quot;&quot;
&gt;&gt;&gt; 
&gt;&gt;&gt; Its possible this change was intentional, but the tests wer never updated to reflect it (since they were slow/busted).  You&apos;d have to ask dpranke.
&gt;&gt; 
&gt;&gt; Right, this change was intentional and we need to fix the tests. The issue comes up when the CQ is ahead of the remote for one reason or another. I think abarth actually made this change.
&gt; 
&gt; Yeah, the problem is that if we have local commits (i.e., HEAD points to something we&apos;ve committed locally), then clean_working_directory will leave those commits around instead of blowing them away.
&gt; 
&gt; This happens all the time on the commit-queue because the way it lands patches is to first commit them locally and then dcommit them to svn.  If the dcommit fails, it will have the local commit.  If clean doesn&apos;t blow the local commit away, it will bork the queue until it does its big working copy reset.

Your change is redefining &quot;working_directory&quot; to be something very unexpected (at least for experienced git users). It seems like you also want a &quot;reset to remote_merge_base&quot; type thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803880</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-09 17:35:45 -0800</bug_when>
    <thetext>Yes, the SCM API name should likely change.  SCM was &quot;designed&quot; to be an abstraction around the current checkout&apos;s scm system, and is thus a strange compromise between svn and git.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803934</commentid>
    <comment_count>10</comment_count>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 18:53:51 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Yes, the SCM API name should likely change.  SCM was &quot;designed&quot; to be an abstraction around the current checkout&apos;s scm system, and is thus a strange compromise between svn and git.

You already have the ability to discard local commits using Git.discard_local_commits?

Maybe we should change the caller to do a &quot;if self.supports_local_commits(): self.discard_local_commits()&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803954</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-01-09 19:16:01 -0800</bug_when>
    <thetext>You should probably check out the previous discussion in bug 104032 (and bug 104198 that we filed about the fact that the method name is now confusing and/or wrong ;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803985</commentid>
    <comment_count>12</comment_count>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 19:48:22 -0800</bug_when>
    <thetext>The right path forward I think is to revert 104032 and use the following to functions;

    def ensure_clean_working_directory(self, force_clean):
        if self.working_directory_is_clean():
            return
        if not force_clean:
            print self.run(self.status_command(), error_handler=Executive.ignore_error, cwd=self.checkout_root)
            raise ScriptError(message=&quot;Working directory has modifications, pass --force-clean or --no-clean to continue.&quot;)
        _log.info(&quot;Cleaning working directory&quot;)
        self.clean_working_directory()



    def ensure_no_local_commits(self, force):
        if not self.supports_local_commits():
            return
        commits = self.local_commits()
        if not len(commits):
            return
        if not force:
            _log.error(&quot;Working directory has local commits, pass --force-clean to continue.&quot;)
            sys.exit(1) #### WHY!? Oh god why!?
        self.discard_local_commits()



??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803989</commentid>
    <comment_count>13</comment_count>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-09 19:54:02 -0800</bug_when>
    <thetext>Scripts/webkitpy/tool/steps/cleanworkingdirectory.py then should be change to something like &quot;resettoupstream&quot; or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804202</commentid>
    <comment_count>14</comment_count>
      <attachid>182099</attachid>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-10 02:38:51 -0800</bug_when>
    <thetext>Created attachment 182099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804629</commentid>
    <comment_count>15</comment_count>
      <attachid>182099</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-10 12:21:27 -0800</bug_when>
    <thetext>Comment on attachment 182099
Patch

Won&apos;t this patch break the commit-queue as described above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804630</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-10 12:22:26 -0800</bug_when>
    <thetext>I don&apos;t really understand what problem you&apos;re trying to solve.  &quot;Fix both working_directory and commit_with_message functions&quot; doesn&apos;t mean anything to me and your change log does not provide any additional information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804695</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-01-10 13:56:23 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I don&apos;t really understand what problem you&apos;re trying to solve.  &quot;Fix both working_directory and commit_with_message functions&quot; doesn&apos;t mean anything to me and your change log does not provide any additional information.

I think the subject refers to the failing tests and then the belief that the working_directory_is_clean() function was doing the wrong thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804701</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-10 13:59:56 -0800</bug_when>
    <thetext>Perhaps we should retitle the bug them?  These functions are working as intended (even if they could benefit from more git-centric names).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804703</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-01-10 14:00:36 -0800</bug_when>
    <thetext>sure :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808991</commentid>
    <comment_count>20</comment_count>
      <attachid>183099</attachid>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-16 19:23:19 -0800</bug_when>
    <thetext>Created attachment 183099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810069</commentid>
    <comment_count>21</comment_count>
      <attachid>183099</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-17 18:32:38 -0800</bug_when>
    <thetext>Comment on attachment 183099
Patch

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

OK.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:129
&gt; +        executive = executive or Executive()

This is still a FIXME, but way better, thank you!

&gt; Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py:1551
&gt; +    maxDiff = None

Was this intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810081</commentid>
    <comment_count>22</comment_count>
      <attachid>183346</attachid>
    <who name="Tim &apos;mithro&apos; Ansell">mithro</who>
    <bug_when>2013-01-17 18:44:17 -0800</bug_when>
    <thetext>Created attachment 183346
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810110</commentid>
    <comment_count>23</comment_count>
      <attachid>183346</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-17 19:21:55 -0800</bug_when>
    <thetext>Comment on attachment 183346
Patch

Clearing flags on attachment: 183346

Committed r140089: &lt;http://trac.webkit.org/changeset/140089&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810111</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-17 19:22:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181878</attachid>
            <date>2013-01-09 01:49:15 -0800</date>
            <delta_ts>2013-01-10 02:38:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106429-20130109204617.patch</filename>
            <type>text/plain</type>
            <size>5504</size>
            <attacher name="Tim &apos;mithro&apos; Ansell">mithro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MDQyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQppbmRleCA2YjhmMzhmNjYwZmU2YTQxYzIyZDQ2
N2QxYTdmNmYxN2JiMTI1ZDQwLi5mMzU0ODRiMGY3ZjYzNjk5NGIyNGMyMzgyMzJmNGMwNWM5NWU3
M2ZjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9z
Y20vZ2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9naXQucHkKQEAgLTQ5LDYgKzQ5LDggQEAgZGVmIHJ1bl9jb21tYW5kKCphcmdzLCAqKmt3YXJn
cyk6CiAKIGNsYXNzIEFtYmlndW91c0NvbW1pdEVycm9yKEV4Y2VwdGlvbik6CiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG51bV9sb2NhbF9jb21taXRzLCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVh
bik6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCAiRm91bmQgJXMgbG9jYWwgY29t
bWl0cyBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzICVzIiAlICgKKyAgICAgICAgICAgIG51
bV9sb2NhbF9jb21taXRzLCBbIm5vdCBjbGVhbiIsICJjbGVhbiJdW3dvcmtpbmdfZGlyZWN0b3J5
X2lzX2NsZWFuXSkpCiAgICAgICAgIHNlbGYubnVtX2xvY2FsX2NvbW1pdHMgPSBudW1fbG9jYWxf
Y29tbWl0cwogICAgICAgICBzZWxmLndvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuID0gd29ya2lu
Z19kaXJlY3RvcnlfaXNfY2xlYW4KIApAQCAtMTQ3LDExICsxNDksMTEgQEAgY2xhc3MgR2l0KFND
TSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0
cyhzZWxmLmFic29sdXRlX3BhdGgoc2VsZi5fZmlsZXN5c3RlbS5qb2luKCcuZ2l0JywgJ3JlYmFz
ZS1hcHBseScpKSkKIAogICAgIGRlZiB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbihzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydkaWZmJywgc2VsZi5yZW1vdGVfbWVyZ2Vf
YmFzZSgpLCAnLS1uby1yZW5hbWVzJywgJy0tbmFtZS1vbmx5J10pID09ICIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fZ2l0KFsnZGlmZicsICdIRUFEJywgJy0tbm8tcmVuYW1lcycsICctLW5h
bWUtb25seSddKSA9PSAiIgogCiAgICAgZGVmIGNsZWFuX3dvcmtpbmdfZGlyZWN0b3J5KHNlbGYp
OgogICAgICAgICAjIENvdWxkIHJ1biBnaXQgY2xlYW4gaGVyZSB0b28sIGJ1dCB0aGF0IHdvdWxk
bid0IG1hdGNoIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuCi0gICAgICAgIHNlbGYuX3J1bl9n
aXQoWydyZXNldCcsICctLWhhcmQnLCBzZWxmLnJlbW90ZV9tZXJnZV9iYXNlKCldKQorICAgICAg
ICBzZWxmLl9ydW5fZ2l0KFsncmVzZXQnLCAnSEVBRCcsICctLWhhcmQnXSkKICAgICAgICAgIyBB
Ym9ydGluZyByZWJhc2UgZXZlbiB0aG91Z2ggdGhpcyBkb2VzIG5vdCBtYXRjaCB3b3JraW5nX2Rp
cmVjdG9yeV9pc19jbGVhbgogICAgICAgICBpZiBzZWxmLnJlYmFzZV9pbl9wcm9ncmVzcygpOgog
ICAgICAgICAgICAgc2VsZi5fcnVuX2dpdChbJ3JlYmFzZScsICctLWFib3J0J10pCkBAIC0zMzQs
MjAgKzMzNiwxMiBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgcmV2
ZXJ0X2ZpbGVzKHNlbGYsIGZpbGVfcGF0aHMpOgogICAgICAgICBzZWxmLl9ydW5fZ2l0KFsnY2hl
Y2tvdXQnLCAnSEVBRCddICsgZmlsZV9wYXRocykKIAotICAgIGRlZiBfYXNzZXJ0X2Nhbl9zcXVh
c2goc2VsZiwgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4pOgotICAgICAgICBzcXVhc2ggPSBH
aXQucmVhZF9naXRfY29uZmlnKCd3ZWJraXQtcGF0Y2guY29tbWl0LXNob3VsZC1hbHdheXMtc3F1
YXNoJywgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCkKLSAgICAgICAgc2hvdWxkX3NxdWFzaCA9IHNx
dWFzaCBhbmQgc3F1YXNoLmxvd2VyKCkgPT0gInRydWUiCi0KLSAgICAgICAgaWYgbm90IHNob3Vs
ZF9zcXVhc2g6Ci0gICAgICAgICAgICAjIE9ubHkgd2FybiBpZiB0aGVyZSBhcmUgYWN0dWFsbHkg
bXVsdGlwbGUgY29tbWl0cyB0byBzcXVhc2guCi0gICAgICAgICAgICBudW1fbG9jYWxfY29tbWl0
cyA9IGxlbihzZWxmLmxvY2FsX2NvbW1pdHMoKSkKLSAgICAgICAgICAgIGlmIG51bV9sb2NhbF9j
b21taXRzID4gMSBvciAobnVtX2xvY2FsX2NvbW1pdHMgPiAwIGFuZCBub3Qgd29ya2luZ19kaXJl
Y3RvcnlfaXNfY2xlYW4pOgotICAgICAgICAgICAgICAgIHJhaXNlIEFtYmlndW91c0NvbW1pdEVy
cm9yKG51bV9sb2NhbF9jb21taXRzLCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbikKLQogICAg
IGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIHBh
c3N3b3JkPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2Vk
X2ZpbGVzPU5vbmUpOgogICAgICAgICAjIFVzZXJuYW1lIGlzIGlnbm9yZWQgZHVyaW5nIEdpdCBj
b21taXRzLgorCiAgICAgICAgIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuID0gc2VsZi53b3Jr
aW5nX2RpcmVjdG9yeV9pc19jbGVhbigpCiAKKyAgICAgICAgIyBQYXRjaGVzIHRvIGNvbW1pdCBo
YXZlIGJlZW4gc3BlY2lmaWVkLCBzbyBhY3R1YWxseSBjb21taXQgdGhlbQogICAgICAgICBpZiBn
aXRfY29tbWl0OgogICAgICAgICAgICAgIyBTcGVjaWFsLWNhc2UgSEVBRC4uIHRvIG1lYW4gd29y
a2luZy1jb3B5IGNoYW5nZXMgb25seS4KICAgICAgICAgICAgIGlmIGdpdF9jb21taXQudXBwZXIo
KSA9PSAnSEVBRC4uJzoKQEAgLTM2NCwxMSArMzU4LDIyIEBAIGNsYXNzIEdpdChTQ00sIFNWTlJl
cG9zaXRvcnkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9Ildv
cmtpbmcgY29weSBpcyBtb2RpZmllZC4gQ2Fubm90IGNvbW1pdCBpbmRpdmlkdWFsIGdpdF9jb21t
aXRzLiIpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29tbWl0X29uX2JyYW5jaChtZXNzYWdl
LCBnaXRfY29tbWl0LCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQpCiAKLSAg
ICAgICAgaWYgbm90IGZvcmNlX3NxdWFzaDoKLSAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9jYW5f
c3F1YXNoKHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKQotICAgICAgICBzZWxmLl9ydW5fZ2l0
KFsncmVzZXQnLCAnLS1zb2Z0Jywgc2VsZi5yZW1vdGVfbWVyZ2VfYmFzZSgpXSkKLSAgICAgICAg
c2VsZi5jb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgcmV0dXJu
IHNlbGYucHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcih1c2VybmFtZT11c2VybmFtZSwgcGFz
c3dvcmQ9cGFzc3dvcmQpCisgICAgICAgICMgSGF2ZW4ndCBnaXZlbiB1cyB3aGljaCBjb21taXRz
LCBzbyB1c2UgdGhlIGRpZmZlcmVuY2UgdG8gcmVtb3RlIGJhc2UuCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAjIFNob3VsZCB3ZSBhbGxvdyB0aGUgY29tbWl0IHRvIHNxdWFzaCBtdWx0aXBs
ZSBjaGFuZ2VzIHRvZ3RoZXI/CisgICAgICAgICAgICBpZiBub3QgZm9yY2Vfc3F1YXNoOgorICAg
ICAgICAgICAgICAgICMgSGF2ZSB0aGV5IGFza2VkIHVzIHRvIGFsd2F5cyBzcXVhc2g/CisgICAg
ICAgICAgICAgICAgc3F1YXNoID0gR2l0LnJlYWRfZ2l0X2NvbmZpZygnd2Via2l0LXBhdGNoLmNv
bW1pdC1zaG91bGQtYWx3YXlzLXNxdWFzaCcsIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QpCisgICAg
ICAgICAgICAgICAgZm9yY2Vfc3F1YXNoID0gc3F1YXNoIGFuZCBzcXVhc2gubG93ZXIoKSA9PSAi
dHJ1ZSIKKworICAgICAgICAgICAgIyBDaGVjayB3ZSBhcmUgbm90IGdvaW5nIHRvIHNxdWFzaAor
ICAgICAgICAgICAgbnVtX2NoYW5nZXMgPSBsZW4oc2VsZi5sb2NhbF9jb21taXRzKCkpICsgaW50
KG5vdCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbikKKyAgICAgICAgICAgIGlmIG51bV9jaGFu
Z2VzID4gMSBhbmQgbm90IGZvcmNlX3NxdWFzaDoKKyAgICAgICAgICAgICAgICByYWlzZSBBbWJp
Z3VvdXNDb21taXRFcnJvcihsZW4oc2VsZi5sb2NhbF9jb21taXRzKCkpLCB3b3JraW5nX2RpcmVj
dG9yeV9pc19jbGVhbikKKworICAgICAgICAgICAgc2VsZi5fcnVuX2dpdChbJ3Jlc2V0JywgJy0t
c29mdCcsIHNlbGYucmVtb3RlX21lcmdlX2Jhc2UoKV0pCisgICAgICAgICAgICBzZWxmLmNvbW1p
dF9sb2NhbGx5X3dpdGhfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
cHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcih1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9
cGFzc3dvcmQpCiAKICAgICBkZWYgX2NvbW1pdF9vbl9icmFuY2goc2VsZiwgbWVzc2FnZSwgZ2l0
X2NvbW1pdCwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSk6CiAgICAgICAgIGJyYW5jaF9u
YW1lID0gc2VsZi5fY3VycmVudF9icmFuY2goKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkKaW5kZXggZGY0
MDA1MzM1OWZiNjgwNDU1M2JmZWM1NzcxNzYzZGM0Y2M2Y2FlMS4uMWZiZDJkY2I3MWM3OGY4NmEy
MzExN2UzY2Y1MTg2NjU0YTFhYmRhMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CkBAIC0xMjQ0LDgg
KzEyNDQsOCBAQCBjbGFzcyBHaXRTVk5UZXN0KFNDTVRlc3QpOgogICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhTY3JpcHRFcnJvciwgc2VsZi5zY20uY29tbWl0X3dpdGhfbWVzc2FnZSwgImFub3Ro
ZXIgdGVzdCBjb21taXQiLCBnaXRfY29tbWl0PSJIRUFEXiIpCiAKICAgICBkZWYgdGVzdF9jb21t
aXRfd2l0aF9tZXNzYWdlX211bHRpcGxlX2xvY2FsX2NvbW1pdHNfYWx3YXlzX3NxdWFzaChzZWxm
KToKKyAgICAgICAgcnVuX2NvbW1hbmQoWydnaXQnLCAnY29uZmlnJywgJ3dlYmtpdC1wYXRjaC5j
b21taXQtc2hvdWxkLWFsd2F5cy1zcXVhc2gnLCAndHJ1ZSddKQogICAgICAgICBzZWxmLl90d29f
bG9jYWxfY29tbWl0cygpCi0gICAgICAgIHNlbGYuc2NtLl9hc3NlcnRfY2FuX3NxdWFzaCA9IGxh
bWJkYSB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjogVHJ1ZQogICAgICAgICBjb21taXRfdGV4
dCA9IHNlbGYuc2NtLmNvbW1pdF93aXRoX21lc3NhZ2UoInlldCBhbm90aGVyIHRlc3QgY29tbWl0
IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5zdm5fcmV2aXNpb25fZnJvbV9j
b21taXRfdGV4dChjb21taXRfdGV4dCksICc2JykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182099</attachid>
            <date>2013-01-10 02:38:51 -0800</date>
            <delta_ts>2013-01-16 19:23:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106429-20130110213554.patch</filename>
            <type>text/plain</type>
            <size>6813</size>
            <attacher name="Tim &apos;mithro&apos; Ansell">mithro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MzAwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODBmZDQwNGNhZmY5MzA0ZmQ1ZDM3NjhlMGUzZTdiZGY0
ZDUxMGE3MC4uZTg0NzMzNWUzMmRjZTA1MjU3MWY5ZjIyYzU0MDcxZDkyNWZlNzU3MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5
IEBACisyMDEzLTAxLTA5ICBUaW0gJ21pdGhybycgQW5zZWxsICA8bWl0aHJvQG1pdGhpcy5jb20+
CisKKyAgICAgICAgRml4IGJvdGggd29ya2luZ19kaXJlY3RvcnkgYW5kIGNvbW1pdF93aXRoX21l
c3NhZ2UgZnVuY3Rpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2NDI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5Ogor
ICAgICAgICAoQW1iaWd1b3VzQ29tbWl0RXJyb3IuX19pbml0X18pOgorICAgICAgICAoR2l0Lndv
cmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKToKKyAgICAgICAgKEdpdC5jbGVhbl93b3JraW5nX2Rp
cmVjdG9yeSk6CisgICAgICAgIChHaXQucmV2ZXJ0X2ZpbGVzKToKKyAgICAgICAgKEdpdC5jb21t
aXRfd2l0aF9tZXNzYWdlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc2NtX3VuaXR0ZXN0LnB5OgorICAgICAgICAoR2l0U1ZOVGVzdC50ZXN0X2NvbW1p
dF93aXRoX21lc3NhZ2VfbXVsdGlwbGVfbG9jYWxfY29tbWl0c19hbHdheXNfc3F1YXNoKToKKwor
MjAxMy0wMS0xMCAgVGltICdtaXRocm8nIEFuc2VsbCAgPG1pdGhyb0BtaXRoaXMuY29tPgorCisg
ICAgICAgIENoYW5naW5nIHRlc3RzIHRvIGJlIGNvbnNpc3RlbnQgYW5kIHVzZSBzZWxmLnNjbSBy
YXRoZXIgdGhlbiByZWNyZWF0aW5nIHRoZSBzY20gb2JqZWN0LgorICAgICAgICAoTWlzc2VkIGEg
Y291cGxlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2NTM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5Ogor
CiAyMDEzLTAxLTA4ICBUaW0gJ21pdGhybycgQW5zZWxsICA8bWl0aHJvQG1pdGhpcy5jb20+CiAK
ICAgICAgICAgRml4aW5nIEF1dGhlbnRpY2F0aW9uRXJyb3Igd2hlbiBydW5uaW5nIHRlc3Qtd2Vi
a2l0cHkgYXMgYSBub24tY29tbWl0dGVyLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKaW5kZXggNmI4ZjM4ZjY2MGZlNmE0MWMyMmQ0Njdk
MWE3ZjZmMTdiYjEyNWQ0MC4uZjM1NDg0YjBmN2Y2MzY5OTRiMjRjMjM4MjMyZjRjMDVjOTVlNzNm
YyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L2dpdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20v
Z2l0LnB5CkBAIC00OSw2ICs0OSw4IEBAIGRlZiBydW5fY29tbWFuZCgqYXJncywgKiprd2FyZ3Mp
OgogCiBjbGFzcyBBbWJpZ3VvdXNDb21taXRFcnJvcihFeGNlcHRpb24pOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBudW1fbG9jYWxfY29tbWl0cywgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4p
OgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgIkZvdW5kICVzIGxvY2FsIGNvbW1p
dHMgYW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyAlcyIgJSAoCisgICAgICAgICAgICBudW1f
bG9jYWxfY29tbWl0cywgWyJub3QgY2xlYW4iLCAiY2xlYW4iXVt3b3JraW5nX2RpcmVjdG9yeV9p
c19jbGVhbl0pKQogICAgICAgICBzZWxmLm51bV9sb2NhbF9jb21taXRzID0gbnVtX2xvY2FsX2Nv
bW1pdHMKICAgICAgICAgc2VsZi53b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbiA9IHdvcmtpbmdf
ZGlyZWN0b3J5X2lzX2NsZWFuCiAKQEAgLTE0NywxMSArMTQ5LDExIEBAIGNsYXNzIEdpdChTQ00s
IFNWTlJlcG9zaXRvcnkpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMo
c2VsZi5hYnNvbHV0ZV9wYXRoKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbignLmdpdCcsICdyZWJhc2Ut
YXBwbHknKSkpCiAKICAgICBkZWYgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4oc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsnZGlmZicsIHNlbGYucmVtb3RlX21lcmdlX2Jh
c2UoKSwgJy0tbm8tcmVuYW1lcycsICctLW5hbWUtb25seSddKSA9PSAiIgorICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX2dpdChbJ2RpZmYnLCAnSEVBRCcsICctLW5vLXJlbmFtZXMnLCAnLS1uYW1l
LW9ubHknXSkgPT0gIiIKIAogICAgIGRlZiBjbGVhbl93b3JraW5nX2RpcmVjdG9yeShzZWxmKToK
ICAgICAgICAgIyBDb3VsZCBydW4gZ2l0IGNsZWFuIGhlcmUgdG9vLCBidXQgdGhhdCB3b3VsZG4n
dCBtYXRjaCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbgotICAgICAgICBzZWxmLl9ydW5fZ2l0
KFsncmVzZXQnLCAnLS1oYXJkJywgc2VsZi5yZW1vdGVfbWVyZ2VfYmFzZSgpXSkKKyAgICAgICAg
c2VsZi5fcnVuX2dpdChbJ3Jlc2V0JywgJ0hFQUQnLCAnLS1oYXJkJ10pCiAgICAgICAgICMgQWJv
cnRpbmcgcmViYXNlIGV2ZW4gdGhvdWdoIHRoaXMgZG9lcyBub3QgbWF0Y2ggd29ya2luZ19kaXJl
Y3RvcnlfaXNfY2xlYW4KICAgICAgICAgaWYgc2VsZi5yZWJhc2VfaW5fcHJvZ3Jlc3MoKToKICAg
ICAgICAgICAgIHNlbGYuX3J1bl9naXQoWydyZWJhc2UnLCAnLS1hYm9ydCddKQpAQCAtMzM0LDIw
ICszMzYsMTIgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIHJldmVy
dF9maWxlcyhzZWxmLCBmaWxlX3BhdGhzKToKICAgICAgICAgc2VsZi5fcnVuX2dpdChbJ2NoZWNr
b3V0JywgJ0hFQUQnXSArIGZpbGVfcGF0aHMpCiAKLSAgICBkZWYgX2Fzc2VydF9jYW5fc3F1YXNo
KHNlbGYsIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKToKLSAgICAgICAgc3F1YXNoID0gR2l0
LnJlYWRfZ2l0X2NvbmZpZygnd2Via2l0LXBhdGNoLmNvbW1pdC1zaG91bGQtYWx3YXlzLXNxdWFz
aCcsIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIHNob3VsZF9zcXVhc2ggPSBzcXVh
c2ggYW5kIHNxdWFzaC5sb3dlcigpID09ICJ0cnVlIgotCi0gICAgICAgIGlmIG5vdCBzaG91bGRf
c3F1YXNoOgotICAgICAgICAgICAgIyBPbmx5IHdhcm4gaWYgdGhlcmUgYXJlIGFjdHVhbGx5IG11
bHRpcGxlIGNvbW1pdHMgdG8gc3F1YXNoLgotICAgICAgICAgICAgbnVtX2xvY2FsX2NvbW1pdHMg
PSBsZW4oc2VsZi5sb2NhbF9jb21taXRzKCkpCi0gICAgICAgICAgICBpZiBudW1fbG9jYWxfY29t
bWl0cyA+IDEgb3IgKG51bV9sb2NhbF9jb21taXRzID4gMCBhbmQgbm90IHdvcmtpbmdfZGlyZWN0
b3J5X2lzX2NsZWFuKToKLSAgICAgICAgICAgICAgICByYWlzZSBBbWJpZ3VvdXNDb21taXRFcnJv
cihudW1fbG9jYWxfY29tbWl0cywgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4pCi0KICAgICBk
ZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCB1c2VybmFtZT1Ob25lLCBwYXNz
d29yZD1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1GYWxzZSwgY2hhbmdlZF9m
aWxlcz1Ob25lKToKICAgICAgICAgIyBVc2VybmFtZSBpcyBpZ25vcmVkIGR1cmluZyBHaXQgY29t
bWl0cy4KKwogICAgICAgICB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbiA9IHNlbGYud29ya2lu
Z19kaXJlY3RvcnlfaXNfY2xlYW4oKQogCisgICAgICAgICMgUGF0Y2hlcyB0byBjb21taXQgaGF2
ZSBiZWVuIHNwZWNpZmllZCwgc28gYWN0dWFsbHkgY29tbWl0IHRoZW0KICAgICAgICAgaWYgZ2l0
X2NvbW1pdDoKICAgICAgICAgICAgICMgU3BlY2lhbC1jYXNlIEhFQUQuLiB0byBtZWFuIHdvcmtp
bmctY29weSBjaGFuZ2VzIG9ubHkuCiAgICAgICAgICAgICBpZiBnaXRfY29tbWl0LnVwcGVyKCkg
PT0gJ0hFQUQuLic6CkBAIC0zNjQsMTEgKzM1OCwyMiBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBv
c2l0b3J5KToKICAgICAgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSJXb3Jr
aW5nIGNvcHkgaXMgbW9kaWZpZWQuIENhbm5vdCBjb21taXQgaW5kaXZpZHVhbCBnaXRfY29tbWl0
cy4iKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1pdF9vbl9icmFuY2gobWVzc2FnZSwg
Z2l0X2NvbW1pdCwgdXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkKQogCi0gICAg
ICAgIGlmIG5vdCBmb3JjZV9zcXVhc2g6Ci0gICAgICAgICAgICBzZWxmLl9hc3NlcnRfY2FuX3Nx
dWFzaCh3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbikKLSAgICAgICAgc2VsZi5fcnVuX2dpdChb
J3Jlc2V0JywgJy0tc29mdCcsIHNlbGYucmVtb3RlX21lcmdlX2Jhc2UoKV0pCi0gICAgICAgIHNl
bGYuY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgIHJldHVybiBz
ZWxmLnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIodXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3
b3JkPXBhc3N3b3JkKQorICAgICAgICAjIEhhdmVuJ3QgZ2l2ZW4gdXMgd2hpY2ggY29tbWl0cywg
c28gdXNlIHRoZSBkaWZmZXJlbmNlIHRvIHJlbW90ZSBiYXNlLgorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgIyBTaG91bGQgd2UgYWxsb3cgdGhlIGNvbW1pdCB0byBzcXVhc2ggbXVsdGlwbGUg
Y2hhbmdlcyB0b2d0aGVyPworICAgICAgICAgICAgaWYgbm90IGZvcmNlX3NxdWFzaDoKKyAgICAg
ICAgICAgICAgICAjIEhhdmUgdGhleSBhc2tlZCB1cyB0byBhbHdheXMgc3F1YXNoPworICAgICAg
ICAgICAgICAgIHNxdWFzaCA9IEdpdC5yZWFkX2dpdF9jb25maWcoJ3dlYmtpdC1wYXRjaC5jb21t
aXQtc2hvdWxkLWFsd2F5cy1zcXVhc2gnLCBjd2Q9c2VsZi5jaGVja291dF9yb290KQorICAgICAg
ICAgICAgICAgIGZvcmNlX3NxdWFzaCA9IHNxdWFzaCBhbmQgc3F1YXNoLmxvd2VyKCkgPT0gInRy
dWUiCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2UgYXJlIG5vdCBnb2luZyB0byBzcXVhc2gKKyAg
ICAgICAgICAgIG51bV9jaGFuZ2VzID0gbGVuKHNlbGYubG9jYWxfY29tbWl0cygpKSArIGludChu
b3Qgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4pCisgICAgICAgICAgICBpZiBudW1fY2hhbmdl
cyA+IDEgYW5kIG5vdCBmb3JjZV9zcXVhc2g6CisgICAgICAgICAgICAgICAgcmFpc2UgQW1iaWd1
b3VzQ29tbWl0RXJyb3IobGVuKHNlbGYubG9jYWxfY29tbWl0cygpKSwgd29ya2luZ19kaXJlY3Rv
cnlfaXNfY2xlYW4pCisKKyAgICAgICAgICAgIHNlbGYuX3J1bl9naXQoWydyZXNldCcsICctLXNv
ZnQnLCBzZWxmLnJlbW90ZV9tZXJnZV9iYXNlKCldKQorICAgICAgICAgICAgc2VsZi5jb21taXRf
bG9jYWxseV93aXRoX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnB1
c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIodXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBh
c3N3b3JkKQogCiAgICAgZGVmIF9jb21taXRfb25fYnJhbmNoKHNlbGYsIG1lc3NhZ2UsIGdpdF9j
b21taXQsIHVzZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5vbmUpOgogICAgICAgICBicmFuY2hfbmFt
ZSA9IHNlbGYuX2N1cnJlbnRfYnJhbmNoKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CmluZGV4IGU1ZGRj
ZTBmMWFhN2E1YjY2MzdjMDM5YTg3Y2NjOGQzZjg1OWQ0ODIuLmViZDg1OWY0MDA0MGU5NDQxNjY1
YWVkOWM1NDdjOTdkOTI0ZThjYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQpAQCAtMTIzOSw4ICsx
MjM5LDggQEAgY2xhc3MgR2l0U1ZOVGVzdChTQ01UZXN0KToKICAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoU2NyaXB0RXJyb3IsIHNlbGYuc2NtLmNvbW1pdF93aXRoX21lc3NhZ2UsICJhbm90aGVy
IHRlc3QgY29tbWl0IiwgZ2l0X2NvbW1pdD0iSEVBRF4iKQogCiAgICAgZGVmIHRlc3RfY29tbWl0
X3dpdGhfbWVzc2FnZV9tdWx0aXBsZV9sb2NhbF9jb21taXRzX2Fsd2F5c19zcXVhc2goc2VsZik6
CisgICAgICAgIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ2NvbmZpZycsICd3ZWJraXQtcGF0Y2guY29t
bWl0LXNob3VsZC1hbHdheXMtc3F1YXNoJywgJ3RydWUnXSkKICAgICAgICAgc2VsZi5fdHdvX2xv
Y2FsX2NvbW1pdHMoKQotICAgICAgICBzZWxmLnNjbS5fYXNzZXJ0X2Nhbl9zcXVhc2ggPSBsYW1i
ZGEgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW46IFRydWUKICAgICAgICAgY29tbWl0X3RleHQg
PSBzZWxmLnNjbS5jb21taXRfd2l0aF9tZXNzYWdlKCJ5ZXQgYW5vdGhlciB0ZXN0IGNvbW1pdCIp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uc3ZuX3JldmlzaW9uX2Zyb21fY29t
bWl0X3RleHQoY29tbWl0X3RleHQpLCAnNicpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183099</attachid>
            <date>2013-01-16 19:23:19 -0800</date>
            <delta_ts>2013-01-17 18:44:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106429-20130117142019.patch</filename>
            <type>text/plain</type>
            <size>13151</size>
            <attacher name="Tim &apos;mithro&apos; Ansell">mithro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5OTQxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzk0M2Y1YjM0ZGFlMTk5OTAwZjAyMWE1ZGVlYTRkMzlk
Mjc0MzAxMC4uYmRhOTM0ZTExZjc2ZWUzNWUyYTkxZGVlNWYzZDA0Zjc4Y2I4YzZiZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDEzLTAxLTE2ICBUaW0gJ21pdGhybycgQW5zZWxsICA8bWl0aHJvQG1pdGhpcy5jb20+
CisKKyAgICAgICAgRml4aW5nIHdlYmtpdHB5J3MgU0NNIHVuaXQgdGVzdHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9kZXRlY3Rpb25fdW5pdHRlc3QucHk6CisgICAgICAgIChTQ01E
ZXRlY3RvclRlc3QudGVzdF9kZXRlY3Rfc2NtX3N5c3RlbSk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weToKKyAgICAgICAgKEdpdC5pbl93b3Jr
aW5nX2RpcmVjdG9yeSk6CisgICAgICAgIChHaXQucmVhZF9naXRfY29uZmlnKToKKyAgICAgICAg
KEdpdC5fYXNzZXJ0X2Nhbl9zcXVhc2gpOgorICAgICAgICAoR2l0LnJlbW90ZV9icmFuY2hfcmVm
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAoR2l0U1ZOVGVzdC50ZXN0X2NvbW1pdF93aXRoX21lc3NhZ2Vf
bXVsdGlwbGVfbG9jYWxfY29tbWl0c19hbHdheXNfc3F1YXNoKToKKyAgICAgICAgKEdpdFRlc3RX
aXRoTW9jayk6CisgICAgICAgIChHaXRUZXN0V2l0aE1vY2subWFrZV9zY20pOgorICAgICAgICAo
R2l0VGVzdFdpdGhNb2NrLnRlc3RfY3JlYXRlX3BhdGNoKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weToKKyAgICAgICAgKE91dHB1dENh
cHR1cmUuYXNzZXJ0X291dHB1dHMpOgorICAgICAgICAoT3V0cHV0Q2FwdHVyZVRlc3RDYXNlQmFz
ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L3ByaW50ZXIucHk6CisgICAgICAg
IChQcmludGVyLmNvbmZpZ3VyZSk6CisKIDIwMTMtMDEtMTYgIEFsYW4gQ3V0dGVyICA8YWxhbmN1
dHRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgc3RhcnQtcXVldWUuc2ggZG9lcyBub3QgcGFz
cyByZW1haW5pbmcgcGFyYW1ldGVycyBjb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9kZXRlY3Rpb25fdW5pdHRlc3QucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZGV0ZWN0aW9uX3VuaXR0
ZXN0LnB5CmluZGV4IDFkNzQ4NDgyNmQwYTYyNDczNTU4NWExMDgzMTFjZDQ3NGRhNjE4YzMuLjNh
MTU0NjZmYWE1YmY1YjJkZWQwOWNkZjkxMzBlOWMxYmY1NWVhMjkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9kZXRlY3Rpb25fdW5pdHRlc3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2RldGVj
dGlvbl91bml0dGVzdC5weQpAQCAtMjgsNyArMjgsNyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0
CiAKIGZyb20gLmRldGVjdGlvbiBpbXBvcnQgU0NNRGV0ZWN0b3IKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCkBAIC00Miw3
ICs0MiwxMCBAQCBjbGFzcyBTQ01EZXRlY3RvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBleGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSkKICAgICAgICAg
ZGV0ZWN0b3IgPSBTQ01EZXRlY3RvcihmaWxlc3lzdGVtLCBleGVjdXRpdmUpCiAKLSAgICAgICAg
ZXhwZWN0ZWRfbG9ncyA9ICJNT0NLIHJ1bl9jb21tYW5kOiBbJ3N2bicsICdpbmZvJ10sIGN3ZD0v
XG5NT0NLIHJ1bl9jb21tYW5kOiBbJ2dpdCcsICdyZXYtcGFyc2UnLCAnLS1pcy1pbnNpZGUtd29y
ay10cmVlJ10sIGN3ZD0vXG4iCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJcCitNT0NLIHJ1
bl9jb21tYW5kOiBbJ3N2bicsICdpbmZvJ10sIGN3ZD0vCitNT0NLIHJ1bl9jb21tYW5kOiBbJ2dp
dCcsICdyZXYtcGFyc2UnLCAnLS1pcy1pbnNpZGUtd29yay10cmVlJ10sIGN3ZD0vCisiIiIKICAg
ICAgICAgc2NtID0gT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGRldGVjdG9y
LmRldGVjdF9zY21fc3lzdGVtLCBbIi8iXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjbSwgTm9uZSkKICAgICAgICAgIyBGSVhNRTogVGhp
cyBzaG91bGQgbWFrZSBhIHN5bnRoZXRpYyB0cmVlIGFuZCB0ZXN0IFNWTiBhbmQgR2l0IGRldGVj
dGlvbiBpbiB0aGF0IHRyZWUuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL2dpdC5weQppbmRleCA0ZTE4YTVmNTMyNDZmZTFiMTZhNWVhZjczZDQ2OTAx
YTNiYzI4OTZiLi5jMDk5MDYxYmY4OTIyMzhjYjMwNWRmZTQ4ZmNhY2FmZmIwNTMwNmM2IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkK
QEAgLTQxLDEyICs0MSw2IEBAIGZyb20gLnN2biBpbXBvcnQgU1ZOLCBTVk5SZXBvc2l0b3J5CiBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotZGVmIHJ1bl9jb21tYW5kKCph
cmdzLCAqKmt3YXJncyk6Ci0gICAgIyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlIGEgZ2xvYmFs
IHN0YXRpYy4KLSAgICAjIE5ldyBjb2RlIHNob3VsZCB1c2UgRXhlY3V0aXZlLnJ1bl9jb21tYW5k
IGRpcmVjdGx5IGluc3RlYWQKLSAgICByZXR1cm4gRXhlY3V0aXZlKCkucnVuX2NvbW1hbmQoKmFy
Z3MsICoqa3dhcmdzKQotCi0KIGNsYXNzIEFtYmlndW91c0NvbW1pdEVycm9yKEV4Y2VwdGlvbik6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bV9sb2NhbF9jb21taXRzLCBoYXNfd29ya2luZ19k
aXJlY3RvcnlfY2hhbmdlcyk6CiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCAiRm91
bmQgJXMgbG9jYWwgY29tbWl0cyBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzICVzIiAlICgK
QEAgLTEyOCwxMiArMTIyLDEyIEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAg
ICAgICByZXR1cm4gZmlsZXBhdGgucmVwbGFjZShyb290X2VuZF93aXRoX3NsYXNoLCAnJykKIAog
ICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiByZWFkX2dpdF9jb25maWcoY2xzLCBrZXksIGN3ZD1O
b25lKToKKyAgICBkZWYgcmVhZF9naXRfY29uZmlnKGNscywga2V5LCBjd2Q9Tm9uZSwgZXhlY3V0
aXZlPU5vbmUpOgogICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgY3dk
PXNlbGYuY2hlY2tvdXRfcm9vdC4KICAgICAgICAgIyBQYXNzIC0tZ2V0LWFsbCBmb3IgY2FzZXMg
d2hlcmUgdGhlIGNvbmZpZyBoYXMgbXVsdGlwbGUgdmFsdWVzCiAgICAgICAgICMgUGFzcyB0aGUg
Y3dkIGlmIHByb3ZpZGVkIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSB0aGUgY2FzZSBvZiBydW5uaW5n
IHdlYmtpdC1wYXRjaCBvdXRzaWRlIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KLSAgICAgICAg
IyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGFuIEV4ZWN1dGl2ZS4KLSAgICAgICAgcmV0dXJuIHJ1
bl9jb21tYW5kKFtjbHMuZXhlY3V0YWJsZV9uYW1lLCAiY29uZmlnIiwgIi0tZ2V0LWFsbCIsIGtl
eV0sIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvciwgY3dkPWN3ZCkucnN0cmlw
KCdcbicpCisgICAgICAgIGV4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZSBvciBFeGVjdXRpdmUoKQorICAg
ICAgICByZXR1cm4gZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtjbHMuZXhlY3V0YWJsZV9uYW1lLCAi
Y29uZmlnIiwgIi0tZ2V0LWFsbCIsIGtleV0sIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9y
ZV9lcnJvciwgY3dkPWN3ZCkucnN0cmlwKCdcbicpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ZGVmIGNvbW1pdF9zdWNjZXNzX3JlZ2V4cCgpOgpAQCAtMTg0LDcgKzE3OCw3IEBAIGNsYXNzIEdp
dChTQ00sIFNWTlJlcG9zaXRvcnkpOgogCiAgICAgZGVmIF91cHN0cmVhbV9icmFuY2goc2VsZik6
CiAgICAgICAgIGN1cnJlbnRfYnJhbmNoID0gc2VsZi5fY3VycmVudF9icmFuY2goKQotICAgICAg
ICByZXR1cm4gc2VsZi5fYnJhbmNoX2Zyb21fcmVmKHNlbGYucmVhZF9naXRfY29uZmlnKCdicmFu
Y2guJXMubWVyZ2UnICUgY3VycmVudF9icmFuY2gsIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QpLnN0
cmlwKCkpCisgICAgICAgIHJldHVybiBzZWxmLl9icmFuY2hfZnJvbV9yZWYoc2VsZi5yZWFkX2dp
dF9jb25maWcoJ2JyYW5jaC4lcy5tZXJnZScgJSBjdXJyZW50X2JyYW5jaCwgY3dkPXNlbGYuY2hl
Y2tvdXRfcm9vdCwgZXhlY3V0aXZlPXNlbGYuX2V4ZWN1dGl2ZSkuc3RyaXAoKSkKIAogICAgIGRl
ZiBtZXJnZV9iYXNlKHNlbGYsIGdpdF9jb21taXQpOgogICAgICAgICBpZiBnaXRfY29tbWl0OgpA
QCAtMzM3LDcgKzMzMSw3IEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAg
ICBzZWxmLl9ydW5fZ2l0KFsnY2hlY2tvdXQnLCAnSEVBRCddICsgZmlsZV9wYXRocykKIAogICAg
IGRlZiBfYXNzZXJ0X2Nhbl9zcXVhc2goc2VsZiwgaGFzX3dvcmtpbmdfZGlyZWN0b3J5X2NoYW5n
ZXMpOgotICAgICAgICBzcXVhc2ggPSBHaXQucmVhZF9naXRfY29uZmlnKCd3ZWJraXQtcGF0Y2gu
Y29tbWl0LXNob3VsZC1hbHdheXMtc3F1YXNoJywgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCkKKyAg
ICAgICAgc3F1YXNoID0gc2VsZi5yZWFkX2dpdF9jb25maWcoJ3dlYmtpdC1wYXRjaC5jb21taXQt
c2hvdWxkLWFsd2F5cy1zcXVhc2gnLCBjd2Q9c2VsZi5jaGVja291dF9yb290LCBleGVjdXRpdmU9
c2VsZi5fZXhlY3V0aXZlKQogICAgICAgICBzaG91bGRfc3F1YXNoID0gc3F1YXNoIGFuZCBzcXVh
c2gubG93ZXIoKSA9PSAidHJ1ZSIKIAogICAgICAgICBpZiBub3Qgc2hvdWxkX3NxdWFzaDoKQEAg
LTQzNyw3ICs0MzEsNyBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKIAogICAgIGRl
ZiByZW1vdGVfYnJhbmNoX3JlZihzZWxmKToKICAgICAgICAgIyBVc2UgcmVmZXJlbmNlcyBzbyB0
aGF0IHdlIGNhbiBhdm9pZCBjb2xsaXNpb25zLCBlLmcuIHdlIGRvbid0IHdhbnQgdG8gb3BlcmF0
ZSBvbiByZWZzL2hlYWRzL3RydW5rIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgcmVtb3RlX2JyYW5j
aF9yZWZzID0gR2l0LnJlYWRfZ2l0X2NvbmZpZygnc3ZuLXJlbW90ZS5zdm4uZmV0Y2gnLCBjd2Q9
c2VsZi5jaGVja291dF9yb290KQorICAgICAgICByZW1vdGVfYnJhbmNoX3JlZnMgPSBzZWxmLnJl
YWRfZ2l0X2NvbmZpZygnc3ZuLXJlbW90ZS5zdm4uZmV0Y2gnLCBjd2Q9c2VsZi5jaGVja291dF9y
b290LCBleGVjdXRpdmU9c2VsZi5fZXhlY3V0aXZlKQogICAgICAgICBpZiBub3QgcmVtb3RlX2Jy
YW5jaF9yZWZzOgogICAgICAgICAgICAgcmVtb3RlX21hc3Rlcl9yZWYgPSAncmVmcy9yZW1vdGVz
L29yaWdpbi9tYXN0ZXInCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYnJhbmNoX3JlZl9leGlz
dHMocmVtb3RlX21hc3Rlcl9yZWYpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkKaW5kZXggMDAyMzQwOWVj
ZTgwYjBkMDlmMzAyZGExZGE3MGZiYjg4ZjdiMDYwOC4uN2JlYmMyOGYxZjUwOWU1M2ZjMzZkOGZk
YTYwN2FkNDRkOGY2Yzg2MyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CkBAIC00OSw2ICs0OSw3IEBA
IGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoZWNrb3V0IGltcG9ydCBDaGVja291dAog
ZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRlciAg
IyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZAogZnJvbSB3ZWJraXRweS5jb21tb24u
bmV0LmJ1Z3ppbGxhIGltcG9ydCBBdHRhY2htZW50ICMgRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBi
ZSBuZWVkZWQKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4
ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lz
dGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlCiBmcm9tIC5naXQg
aW1wb3J0IEdpdCwgQW1iaWd1b3VzQ29tbWl0RXJyb3IKQEAgLTEyMzksOCArMTI0MCw4IEBAIGNs
YXNzIEdpdFNWTlRlc3QoU0NNVGVzdCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNjcmlw
dEVycm9yLCBzZWxmLnNjbS5jb21taXRfd2l0aF9tZXNzYWdlLCAiYW5vdGhlciB0ZXN0IGNvbW1p
dCIsIGdpdF9jb21taXQ9IkhFQUReIikKIAogICAgIGRlZiB0ZXN0X2NvbW1pdF93aXRoX21lc3Nh
Z2VfbXVsdGlwbGVfbG9jYWxfY29tbWl0c19hbHdheXNfc3F1YXNoKHNlbGYpOgorICAgICAgICBy
dW5fY29tbWFuZChbJ2dpdCcsICdjb25maWcnLCAnd2Via2l0LXBhdGNoLmNvbW1pdC1zaG91bGQt
YWx3YXlzLXNxdWFzaCcsICd0cnVlJ10pCiAgICAgICAgIHNlbGYuX3R3b19sb2NhbF9jb21taXRz
KCkKLSAgICAgICAgc2VsZi5zY20uX2Fzc2VydF9jYW5fc3F1YXNoID0gbGFtYmRhIHdvcmtpbmdf
ZGlyZWN0b3J5X2lzX2NsZWFuOiBUcnVlCiAgICAgICAgIGNvbW1pdF90ZXh0ID0gc2VsZi5zY20u
Y29tbWl0X3dpdGhfbWVzc2FnZSgieWV0IGFub3RoZXIgdGVzdCBjb21taXQiKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NtLnN2bl9yZXZpc2lvbl9mcm9tX2NvbW1pdF90ZXh0KGNv
bW1pdF90ZXh0KSwgJzYnKQogCkBAIC0xNTQ3LDE2ICsxNTQ4LDIzIEBAIGNsYXNzIEdpdFNWTlRl
c3QoU0NNVGVzdCk6CiAjIFdlIG5lZWQgdG8gc3BsaXQgb2ZmIG1vcmUgb2YgdGhlc2UgU0NNIHRl
c3RzIHRvIHVzZSBtb2NrcyBpbnN0ZWFkIG9mIHRoZSBmaWxlc3lzdGVtLgogIyBUaGlzIGNsYXNz
IGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoYXQuCiBjbGFzcyBHaXRUZXN0V2l0aE1vY2sodW5pdHRl
c3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSBOb25lCisKICAgICBkZWYgbWFrZV9zY20oc2Vs
ZiwgbG9nZ2luZ19leGVjdXRpdmU9RmFsc2UpOgogICAgICAgICAjIFdlIGRvIHRoaXMgc2hvdWxk
X2xvZyBkYW5jZSB0byBhdm9pZCBsb2dnaW5nIHdoZW4gR2l0Ll9faW5pdF9fIHJ1bnMgc3lzY3Rs
IG9uIG1hYyB0byBjaGVjayBmb3IgNjQtYml0IHN1cHBvcnQuCi0gICAgICAgIHNjbSA9IEdpdChj
d2Q9Tm9uZSwgZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUoKSkKKyAgICAgICAgc2NtID0gR2l0KGN3
ZD0iLiIsIGV4ZWN1dGl2ZT1Nb2NrRXhlY3V0aXZlKCksIGZpbGVzeXN0ZW09TW9ja0ZpbGVTeXN0
ZW0oKSkKKyAgICAgICAgc2NtLnJlYWRfZ2l0X2NvbmZpZyA9IGxhbWJkYSAqYXJncywgKiprdzog
Ik1PQ0tLRVk6TU9DS1ZBTFVFIgogICAgICAgICBzY20uX2V4ZWN1dGl2ZS5fc2hvdWxkX2xvZyA9
IGxvZ2dpbmdfZXhlY3V0aXZlCiAgICAgICAgIHJldHVybiBzY20KIAogICAgIGRlZiB0ZXN0X2Ny
ZWF0ZV9wYXRjaChzZWxmKToKICAgICAgICAgc2NtID0gc2VsZi5tYWtlX3NjbShsb2dnaW5nX2V4
ZWN1dGl2ZT1UcnVlKQotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiTU9DSyBydW5fY29tbWFu
ZDogWydnaXQnLCAnbWVyZ2UtYmFzZScsIHUncmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXInLCAn
SEVBRCddLCBjd2Q9JShjaGVja291dClzXG5NT0NLIHJ1bl9jb21tYW5kOiBbJ2dpdCcsICdkaWZm
JywgJy0tYmluYXJ5JywgJy0tbm8tZXh0LWRpZmYnLCAnLS1mdWxsLWluZGV4JywgJy1NJywgJ01P
Q0sgb3V0cHV0IG9mIGNoaWxkIHByb2Nlc3MnLCAnLS0nXSwgY3dkPSUoY2hlY2tvdXQpc1xuTU9D
SyBydW5fY29tbWFuZDogWydnaXQnLCAnbG9nJywgJy0yNSddLCBjd2Q9Tm9uZVxuIiAlIHsnY2hl
Y2tvdXQnOiBzY20uY2hlY2tvdXRfcm9vdH0KLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2Vy
dF9vdXRwdXRzKHNlbGYsIHNjbS5jcmVhdGVfcGF0Y2gsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3Rl
ZF9zdGRlcnIpCisgICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIiIlwKK01PQ0sgcnVuX2NvbW1h
bmQ6IFsnZ2l0JywgJ21lcmdlLWJhc2UnLCAnTU9DS1ZBTFVFJywgJ0hFQUQnXSwgY3dkPSUoY2hl
Y2tvdXQpcworTU9DSyBydW5fY29tbWFuZDogWydnaXQnLCAnZGlmZicsICctLWJpbmFyeScsICct
LW5vLWNvbG9yJywgJy0tbm8tZXh0LWRpZmYnLCAnLS1mdWxsLWluZGV4JywgJy0tbm8tcmVuYW1l
cycsICcnLCAnTU9DSyBvdXRwdXQgb2YgY2hpbGQgcHJvY2VzcycsICctLSddLCBjd2Q9JShjaGVj
a291dClzCitNT0NLIHJ1bl9jb21tYW5kOiBbJ2dpdCcsICdsb2cnLCAnLTI1JywgJy4vTU9DSyBv
dXRwdXQgb2YgY2hpbGQgcHJvY2VzcyddLCBjd2Q9JShjaGVja291dClzCisiIiIgJSB7J2NoZWNr
b3V0Jzogc2NtLmNoZWNrb3V0X3Jvb3R9CisgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRf
b3V0cHV0cyhzZWxmLCBzY20uY3JlYXRlX3BhdGNoLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX3N0
ZGVycikKIAogICAgIGRlZiB0ZXN0X3B1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXJfd2l0aF91
c2VybmFtZV9hbmRfcGFzc3dvcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5tYWtlX3NjbSgpLnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIodXNlcm5hbWU9J2RiYXRl
c0B3ZWJraXQub3JnJywgcGFzc3dvcmQ9J2JsYWgnKSwgIk1PQ0sgb3V0cHV0IG9mIGNoaWxkIHBy
b2Nlc3MiKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL3N2bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9zdm4ucHkKaW5kZXggODdmNzE3YjI4Y2IxYmJjMGJlYTI1NTIyMGZiNGY1ZDAwNDIwMDE5Zi4u
OTFlMzBjYjM5MzY1ODkwNDc4MWZhYjhkNzlhYmE0MjUxMzkwOTkzNyAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CkBAIC0yOSw4ICsy
OSwxMCBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCiBpbXBv
cnQgcmUKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJpbmcKIGltcG9ydCBzeXMKIGltcG9ydCB0
ZW1wZmlsZQogCkBAIC0yNzEsMTEgKzI3MywxMiBAQCBjbGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0
b3J5KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9zdm4oWydkaWZmJywgJy1jJywgcmV2aXNp
b25dKQogCiAgICAgZGVmIF9ib2d1c19kaXJfbmFtZShzZWxmKToKKyAgICAgICAgcm5kID0gJycu
am9pbihyYW5kb20uc2FtcGxlKHN0cmluZy5hc2NpaV9sZXR0ZXJzLCA1KSkKICAgICAgICAgaWYg
c3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgogICAgICAgICAgICAgcGFyZW50X2RpciA9
IHRlbXBmaWxlLmdldHRlbXBkaXIoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGFyZW50
X2RpciA9IHN5cy5wYXRoWzBdICAjIHRlbXBkaXIgaXMgbm90IHNlY3VyZS4KLSAgICAgICAgcmV0
dXJuIG9zLnBhdGguam9pbihwYXJlbnRfZGlyLCAidGVtcF9zdm5fY29uZmlnIikKKyAgICAgICAg
cmV0dXJuIG9zLnBhdGguam9pbihwYXJlbnRfZGlyLCAidGVtcF9zdm5fY29uZmlnXyIgKyBybmQp
CiAKICAgICBkZWYgX3NldHVwX2JvZ3VzX2RpcihzZWxmLCBsb2cpOgogICAgICAgICBzZWxmLl9i
b2d1c19kaXIgPSBzZWxmLl9ib2d1c19kaXJfbmFtZSgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5CmluZGV4IDI2NjcwZDIx
NDZmMjdiNTFlMjQ4ODk5ZWYwY2I0NzU4OWYwYWM4NzEuLjUxNmFiYTI4ZTM1YTQ5ODNkMDE5NDYw
YzM1ZjI3ZmNkZmI2Y2ZkNDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5CkBAIC0yOSw4ICsyOSw4IEBACiAjIENsYXNz
IGZvciB1bml0dGVzdCBzdXBwb3J0LiAgVXNlZCBmb3IgY2FwdHVyaW5nIHN0ZGVyci9zdGRvdXQu
CiAKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CiBpbXBvcnQg
c3lzCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAKIApA
QCAtOTQsMTUgKzk0LDIyIEBAIGNsYXNzIE91dHB1dENhcHR1cmUob2JqZWN0KToKICAgICAgICAg
ZmluYWxseToKICAgICAgICAgICAgIChzdGRvdXRfc3RyaW5nLCBzdGRlcnJfc3RyaW5nLCBsb2dz
X3N0cmluZykgPSBzZWxmLnJlc3RvcmVfb3V0cHV0KCkKIAotICAgICAgICB0ZXN0Y2FzZS5hc3Nl
cnRFcXVhbChzdGRvdXRfc3RyaW5nLCBleHBlY3RlZF9zdGRvdXQpCi0gICAgICAgIHRlc3RjYXNl
LmFzc2VydEVxdWFsKHN0ZGVycl9zdHJpbmcsIGV4cGVjdGVkX3N0ZGVycikKKyAgICAgICAgaWYg
aGFzYXR0cih0ZXN0Y2FzZSwgJ2Fzc2VydE11bHRpTGluZUVxdWFsJyk6CisgICAgICAgICAgICB0
ZXN0YXNzZXJ0ID0gdGVzdGNhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWwKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHRlc3Rhc3NlcnQgPSB0ZXN0Y2FzZS5hc3NlcnRFcXVhbAorCisgICAgICAg
IHRlc3Rhc3NlcnQoc3Rkb3V0X3N0cmluZywgZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICB0ZXN0
YXNzZXJ0KHN0ZGVycl9zdHJpbmcsIGV4cGVjdGVkX3N0ZGVycikKICAgICAgICAgaWYgZXhwZWN0
ZWRfbG9ncyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRlc3RjYXNlLmFzc2VydEVxdWFsKGxv
Z3Nfc3RyaW5nLCBleHBlY3RlZF9sb2dzKQorICAgICAgICAgICAgdGVzdGFzc2VydChsb2dzX3N0
cmluZywgZXhwZWN0ZWRfbG9ncykKICAgICAgICAgIyBUaGlzIGlzIGEgbGl0dGxlIHN0cmFuZ2Us
IGJ1dCBJIGRvbid0IGtub3cgd2hlcmUgZWxzZSB0byByZXR1cm4gdGhpcyBpbmZvcm1hdGlvbi4K
ICAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQogCiAKIGNsYXNzIE91dHB1dENhcHR1cmVUZXN0
Q2FzZUJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSBOb25lCisKICAgICBk
ZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnNldFVwKHNlbGYpCiAg
ICAgICAgIHNlbGYub3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9wcmludGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L3ByaW50ZXIucHkKaW5kZXggMDQ5MDU4ZDhiNmM5YjZkZGRjMGEzNzA2YTRh
Y2ZkOGZlZWVhM2EyYS4uZjRhNGIwNmFjYjU3NWZjZTE5ZTI3NjVmNDZkZGVkMGViZGEyMjFiYyAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3ByaW50ZXIucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3ByaW50ZXIucHkKQEAgLTI0LDcgKzI0LDYgQEAK
IGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgU3RyaW5nSU8KIAotZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
c3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
dmlld3MubWV0ZXJlZF9zdHJlYW0gaW1wb3J0IE1ldGVyZWRTdHJlYW0KIApAQCAtMTA0LDYgKzEw
Myw4IEBAIGNsYXNzIFByaW50ZXIob2JqZWN0KToKICAgICAgICAgaGFuZGxlci5hZGRGaWx0ZXIo
dGVzdGluZ19maWx0ZXIpCiAKICAgICAgICAgaWYgc2VsZi5vcHRpb25zLnBhc3NfdGhyb3VnaDoK
KyAgICAgICAgICAgICMgRklYTUU6IENhbid0IGltcG9ydCBhdCB0b3Agb2YgZmlsZSwgYXMgb3V0
cHV0Y2FwdHVyZSBuZWVkcyB1bml0dGVzdDIKKyAgICAgICAgICAgIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQogICAgICAgICAgICAgb3V0cHV0Y2FwdHVy
ZS5PdXRwdXRDYXB0dXJlLnN0cmVhbV93cmFwcGVyID0gX0NhcHR1cmVBbmRQYXNzVGhyb3VnaFN0
cmVhbQogCiAgICAgZGVmIHdyaXRlX3VwZGF0ZShzZWxmLCBtc2cpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183346</attachid>
            <date>2013-01-17 18:44:17 -0800</date>
            <delta_ts>2013-01-17 19:21:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106429-20130118134117.patch</filename>
            <type>text/plain</type>
            <size>13131</size>
            <attacher name="Tim &apos;mithro&apos; Ansell">mithro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5OTY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGIyYjE2MTE2NWJmODA5OWQ4MWE0OTA0ZDczYWQ5Yjk2
MWM0NWU1Zi4uZGM0NWY0ODZkMGVkOGMwYjVlYjc4ZWZkODM3YTUwZWZiZmVjOTk4MSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDEzLTAxLTE2ICBUaW0gJ21pdGhybycgQW5zZWxsICA8bWl0aHJvQG1pdGhpcy5jb20+
CisKKyAgICAgICAgRml4aW5nIHdlYmtpdHB5J3MgU0NNIHVuaXQgdGVzdHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9kZXRlY3Rpb25fdW5pdHRlc3QucHk6CisgICAgICAgIChTQ01E
ZXRlY3RvclRlc3QudGVzdF9kZXRlY3Rfc2NtX3N5c3RlbSk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weToKKyAgICAgICAgKEdpdC5pbl93b3Jr
aW5nX2RpcmVjdG9yeSk6CisgICAgICAgIChHaXQucmVhZF9naXRfY29uZmlnKToKKyAgICAgICAg
KEdpdC5fYXNzZXJ0X2Nhbl9zcXVhc2gpOgorICAgICAgICAoR2l0LnJlbW90ZV9icmFuY2hfcmVm
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAoR2l0U1ZOVGVzdC50ZXN0X2NvbW1pdF93aXRoX21lc3NhZ2Vf
bXVsdGlwbGVfbG9jYWxfY29tbWl0c19hbHdheXNfc3F1YXNoKToKKyAgICAgICAgKEdpdFRlc3RX
aXRoTW9jayk6CisgICAgICAgIChHaXRUZXN0V2l0aE1vY2subWFrZV9zY20pOgorICAgICAgICAo
R2l0VGVzdFdpdGhNb2NrLnRlc3RfY3JlYXRlX3BhdGNoKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weToKKyAgICAgICAgKE91dHB1dENh
cHR1cmUuYXNzZXJ0X291dHB1dHMpOgorICAgICAgICAoT3V0cHV0Q2FwdHVyZVRlc3RDYXNlQmFz
ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L3ByaW50ZXIucHk6CisgICAgICAg
IChQcmludGVyLmNvbmZpZ3VyZSk6CisKIDIwMTMtMDEtMTYgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgeGNydW4gdG8gZmluZCBwYXRoIHRvIG1ha2Ug
Zm9yIE1hYyBwb3J0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vZGV0ZWN0aW9uX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL2RldGVjdGlvbl91bml0dGVzdC5weQppbmRleCAxZDc0ODQ4
MjZkMGE2MjQ3MzU1ODVhMTA4MzExY2Q0NzRkYTYxOGMzLi4zYTE1NDY2ZmFhNWJmNWIyZGVkMDlj
ZGY5MTMwZTljMWJmNTVlYTI5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZGV0ZWN0aW9uX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9kZXRlY3Rpb25fdW5pdHRlc3QucHkKQEAg
LTI4LDcgKzI4LDcgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCB1
bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAogCiBmcm9tIC5kZXRlY3Rpb24g
aW1wb3J0IFNDTURldGVjdG9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3Rl
bV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQpAQCAtNDIsNyArNDIsMTAgQEAgY2xhc3MgU0NN
RGV0ZWN0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZXhlY3V0aXZlID0gTW9j
a0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUpCiAgICAgICAgIGRldGVjdG9yID0gU0NNRGV0ZWN0
b3IoZmlsZXN5c3RlbSwgZXhlY3V0aXZlKQogCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiTU9D
SyBydW5fY29tbWFuZDogWydzdm4nLCAnaW5mbyddLCBjd2Q9L1xuTU9DSyBydW5fY29tbWFuZDog
WydnaXQnLCAncmV2LXBhcnNlJywgJy0taXMtaW5zaWRlLXdvcmstdHJlZSddLCBjd2Q9L1xuIgor
ICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIiXAorTU9DSyBydW5fY29tbWFuZDogWydzdm4nLCAn
aW5mbyddLCBjd2Q9LworTU9DSyBydW5fY29tbWFuZDogWydnaXQnLCAncmV2LXBhcnNlJywgJy0t
aXMtaW5zaWRlLXdvcmstdHJlZSddLCBjd2Q9LworIiIiCiAgICAgICAgIHNjbSA9IE91dHB1dENh
cHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBkZXRlY3Rvci5kZXRlY3Rfc2NtX3N5c3RlbSwg
WyIvIl0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzY20sIE5vbmUpCiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIG1ha2UgYSBzeW50
aGV0aWMgdHJlZSBhbmQgdGVzdCBTVk4gYW5kIEdpdCBkZXRlY3Rpb24gaW4gdGhhdCB0cmVlLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dp
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkK
aW5kZXggNGUxOGE1ZjUzMjQ2ZmUxYjE2YTVlYWY3M2Q0NjkwMWEzYmMyODk2Yi4uZmQzNTk3ZjRj
Y2FkYzcwM2EyZWM0MDZhYThlODYwN2M1ZTkxMTliNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CkBAIC00MSwxMiArNDEsNiBAQCBm
cm9tIC5zdm4gaW1wb3J0IFNWTiwgU1ZOUmVwb3NpdG9yeQogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQogCiAKLWRlZiBydW5fY29tbWFuZCgqYXJncywgKiprd2FyZ3MpOgotICAg
ICMgRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBhIGdsb2JhbCBzdGF0aWMuCi0gICAgIyBOZXcg
Y29kZSBzaG91bGQgdXNlIEV4ZWN1dGl2ZS5ydW5fY29tbWFuZCBkaXJlY3RseSBpbnN0ZWFkCi0g
ICAgcmV0dXJuIEV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5kKCphcmdzLCAqKmt3YXJncykKLQotCiBj
bGFzcyBBbWJpZ3VvdXNDb21taXRFcnJvcihFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBudW1fbG9jYWxfY29tbWl0cywgaGFzX3dvcmtpbmdfZGlyZWN0b3J5X2NoYW5nZXMpOgog
ICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgIkZvdW5kICVzIGxvY2FsIGNvbW1pdHMg
YW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyAlcyIgJSAoCkBAIC0xMjgsMTIgKzEyMiwxMyBA
QCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgcmV0dXJuIGZpbGVwYXRo
LnJlcGxhY2Uocm9vdF9lbmRfd2l0aF9zbGFzaCwgJycpCiAKICAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgcmVhZF9naXRfY29uZmlnKGNscywga2V5LCBjd2Q9Tm9uZSk6CisgICAgZGVmIHJlYWRf
Z2l0X2NvbmZpZyhjbHMsIGtleSwgY3dkPU5vbmUsIGV4ZWN1dGl2ZT1Ob25lKToKICAgICAgICAg
IyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3Qu
CiAgICAgICAgICMgUGFzcyAtLWdldC1hbGwgZm9yIGNhc2VzIHdoZXJlIHRoZSBjb25maWcgaGFz
IG11bHRpcGxlIHZhbHVlcwogICAgICAgICAjIFBhc3MgdGhlIGN3ZCBpZiBwcm92aWRlZCBzbyB0
aGF0IHdlIGNhbiBoYW5kbGUgdGhlIGNhc2Ugb2YgcnVubmluZyB3ZWJraXQtcGF0Y2ggb3V0c2lk
ZSBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSBhbiBFeGVjdXRpdmUuCi0gICAgICAgIHJldHVybiBydW5fY29tbWFuZChbY2xzLmV4ZWN1
dGFibGVfbmFtZSwgImNvbmZpZyIsICItLWdldC1hbGwiLCBrZXldLCBlcnJvcl9oYW5kbGVyPUV4
ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIGN3ZD1jd2QpLnJzdHJpcCgnXG4nKQorICAgICAgICBleGVj
dXRpdmUgPSBleGVjdXRpdmUgb3IgRXhlY3V0aXZlKCkKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbY2xzLmV4ZWN1dGFibGVfbmFtZSwgImNvbmZpZyIsICItLWdldC1hbGwi
LCBrZXldLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IsIGN3ZD1jd2QpLnJz
dHJpcCgnXG4nKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjb21taXRfc3VjY2Vzc19y
ZWdleHAoKToKQEAgLTE4NCw3ICsxNzksNyBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5
KToKIAogICAgIGRlZiBfdXBzdHJlYW1fYnJhbmNoKHNlbGYpOgogICAgICAgICBjdXJyZW50X2Jy
YW5jaCA9IHNlbGYuX2N1cnJlbnRfYnJhbmNoKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2JyYW5j
aF9mcm9tX3JlZihzZWxmLnJlYWRfZ2l0X2NvbmZpZygnYnJhbmNoLiVzLm1lcmdlJyAlIGN1cnJl
bnRfYnJhbmNoLCBjd2Q9c2VsZi5jaGVja291dF9yb290KS5zdHJpcCgpKQorICAgICAgICByZXR1
cm4gc2VsZi5fYnJhbmNoX2Zyb21fcmVmKHNlbGYucmVhZF9naXRfY29uZmlnKCdicmFuY2guJXMu
bWVyZ2UnICUgY3VycmVudF9icmFuY2gsIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QsIGV4ZWN1dGl2
ZT1zZWxmLl9leGVjdXRpdmUpLnN0cmlwKCkpCiAKICAgICBkZWYgbWVyZ2VfYmFzZShzZWxmLCBn
aXRfY29tbWl0KToKICAgICAgICAgaWYgZ2l0X2NvbW1pdDoKQEAgLTMzNyw3ICszMzIsNyBAQCBj
bGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgc2VsZi5fcnVuX2dpdChbJ2No
ZWNrb3V0JywgJ0hFQUQnXSArIGZpbGVfcGF0aHMpCiAKICAgICBkZWYgX2Fzc2VydF9jYW5fc3F1
YXNoKHNlbGYsIGhhc193b3JraW5nX2RpcmVjdG9yeV9jaGFuZ2VzKToKLSAgICAgICAgc3F1YXNo
ID0gR2l0LnJlYWRfZ2l0X2NvbmZpZygnd2Via2l0LXBhdGNoLmNvbW1pdC1zaG91bGQtYWx3YXlz
LXNxdWFzaCcsIGN3ZD1zZWxmLmNoZWNrb3V0X3Jvb3QpCisgICAgICAgIHNxdWFzaCA9IHNlbGYu
cmVhZF9naXRfY29uZmlnKCd3ZWJraXQtcGF0Y2guY29tbWl0LXNob3VsZC1hbHdheXMtc3F1YXNo
JywgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCwgZXhlY3V0aXZlPXNlbGYuX2V4ZWN1dGl2ZSkKICAg
ICAgICAgc2hvdWxkX3NxdWFzaCA9IHNxdWFzaCBhbmQgc3F1YXNoLmxvd2VyKCkgPT0gInRydWUi
CiAKICAgICAgICAgaWYgbm90IHNob3VsZF9zcXVhc2g6CkBAIC00MzcsNyArNDMyLDcgQEAgY2xh
c3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAKICAgICBkZWYgcmVtb3RlX2JyYW5jaF9yZWYo
c2VsZik6CiAgICAgICAgICMgVXNlIHJlZmVyZW5jZXMgc28gdGhhdCB3ZSBjYW4gYXZvaWQgY29s
bGlzaW9ucywgZS5nLiB3ZSBkb24ndCB3YW50IHRvIG9wZXJhdGUgb24gcmVmcy9oZWFkcy90cnVu
ayBpZiBpdCBleGlzdHMuCi0gICAgICAgIHJlbW90ZV9icmFuY2hfcmVmcyA9IEdpdC5yZWFkX2dp
dF9jb25maWcoJ3N2bi1yZW1vdGUuc3ZuLmZldGNoJywgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCkK
KyAgICAgICAgcmVtb3RlX2JyYW5jaF9yZWZzID0gc2VsZi5yZWFkX2dpdF9jb25maWcoJ3N2bi1y
ZW1vdGUuc3ZuLmZldGNoJywgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdCwgZXhlY3V0aXZlPXNlbGYu
X2V4ZWN1dGl2ZSkKICAgICAgICAgaWYgbm90IHJlbW90ZV9icmFuY2hfcmVmczoKICAgICAgICAg
ICAgIHJlbW90ZV9tYXN0ZXJfcmVmID0gJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJwogICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX2JyYW5jaF9yZWZfZXhpc3RzKHJlbW90ZV9tYXN0ZXJfcmVm
KToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9zY21fdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20vc2NtX3VuaXR0ZXN0LnB5CmluZGV4IDAwMjM0MDllY2U4MGIwZDA5ZjMwMmRhMWRhNzBm
YmI4OGY3YjA2MDguLjdiZWJjMjhmMWY1MDllNTNmYzM2ZDhmZGE2MDdhZDQ0ZDhmNmM4NjMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21f
dW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtL3NjbV91bml0dGVzdC5weQpAQCAtNDksNiArNDksNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5jaGVja291dC5jaGVja291dCBpbXBvcnQgQ2hlY2tvdXQKIGZyb20gd2Via2l0cHkuY29tbW9u
LmNvbmZpZy5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXIgICMgRklYTUU6IFRoaXMgc2hvdWxk
IG5vdCBiZSBuZWVkZWQKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQg
QXR0YWNobWVudCAjIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVkCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9y
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2Nr
RmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1w
b3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVf
bW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZQogZnJvbSAuZ2l0IGltcG9ydCBHaXQsIEFtYmlndW91
c0NvbW1pdEVycm9yCkBAIC0xMjM5LDggKzEyNDAsOCBAQCBjbGFzcyBHaXRTVk5UZXN0KFNDTVRl
c3QpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTY3JpcHRFcnJvciwgc2VsZi5zY20uY29t
bWl0X3dpdGhfbWVzc2FnZSwgImFub3RoZXIgdGVzdCBjb21taXQiLCBnaXRfY29tbWl0PSJIRUFE
XiIpCiAKICAgICBkZWYgdGVzdF9jb21taXRfd2l0aF9tZXNzYWdlX211bHRpcGxlX2xvY2FsX2Nv
bW1pdHNfYWx3YXlzX3NxdWFzaChzZWxmKToKKyAgICAgICAgcnVuX2NvbW1hbmQoWydnaXQnLCAn
Y29uZmlnJywgJ3dlYmtpdC1wYXRjaC5jb21taXQtc2hvdWxkLWFsd2F5cy1zcXVhc2gnLCAndHJ1
ZSddKQogICAgICAgICBzZWxmLl90d29fbG9jYWxfY29tbWl0cygpCi0gICAgICAgIHNlbGYuc2Nt
Ll9hc3NlcnRfY2FuX3NxdWFzaCA9IGxhbWJkYSB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjog
VHJ1ZQogICAgICAgICBjb21taXRfdGV4dCA9IHNlbGYuc2NtLmNvbW1pdF93aXRoX21lc3NhZ2Uo
InlldCBhbm90aGVyIHRlc3QgY29tbWl0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LnNjbS5zdm5fcmV2aXNpb25fZnJvbV9jb21taXRfdGV4dChjb21taXRfdGV4dCksICc2JykKIApA
QCAtMTU0NywxNiArMTU0OCwyMyBAQCBjbGFzcyBHaXRTVk5UZXN0KFNDTVRlc3QpOgogIyBXZSBu
ZWVkIHRvIHNwbGl0IG9mZiBtb3JlIG9mIHRoZXNlIFNDTSB0ZXN0cyB0byB1c2UgbW9ja3MgaW5z
dGVhZCBvZiB0aGUgZmlsZXN5c3RlbS4KICMgVGhpcyBjbGFzcyBpcyB0aGUgZmlyc3QgcGFydCBv
ZiB0aGF0LgogY2xhc3MgR2l0VGVzdFdpdGhNb2NrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBt
YXhEaWZmID0gTm9uZQorCiAgICAgZGVmIG1ha2Vfc2NtKHNlbGYsIGxvZ2dpbmdfZXhlY3V0aXZl
PUZhbHNlKToKICAgICAgICAgIyBXZSBkbyB0aGlzIHNob3VsZF9sb2cgZGFuY2UgdG8gYXZvaWQg
bG9nZ2luZyB3aGVuIEdpdC5fX2luaXRfXyBydW5zIHN5c2N0bCBvbiBtYWMgdG8gY2hlY2sgZm9y
IDY0LWJpdCBzdXBwb3J0LgotICAgICAgICBzY20gPSBHaXQoY3dkPU5vbmUsIGV4ZWN1dGl2ZT1N
b2NrRXhlY3V0aXZlKCkpCisgICAgICAgIHNjbSA9IEdpdChjd2Q9Ii4iLCBleGVjdXRpdmU9TW9j
a0V4ZWN1dGl2ZSgpLCBmaWxlc3lzdGVtPU1vY2tGaWxlU3lzdGVtKCkpCisgICAgICAgIHNjbS5y
ZWFkX2dpdF9jb25maWcgPSBsYW1iZGEgKmFyZ3MsICoqa3c6ICJNT0NLS0VZOk1PQ0tWQUxVRSIK
ICAgICAgICAgc2NtLl9leGVjdXRpdmUuX3Nob3VsZF9sb2cgPSBsb2dnaW5nX2V4ZWN1dGl2ZQog
ICAgICAgICByZXR1cm4gc2NtCiAKICAgICBkZWYgdGVzdF9jcmVhdGVfcGF0Y2goc2VsZik6CiAg
ICAgICAgIHNjbSA9IHNlbGYubWFrZV9zY20obG9nZ2luZ19leGVjdXRpdmU9VHJ1ZSkKLSAgICAg
ICAgZXhwZWN0ZWRfc3RkZXJyID0gIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZ2l0JywgJ21lcmdlLWJh
c2UnLCB1J3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJywgJ0hFQUQnXSwgY3dkPSUoY2hlY2tv
dXQpc1xuTU9DSyBydW5fY29tbWFuZDogWydnaXQnLCAnZGlmZicsICctLWJpbmFyeScsICctLW5v
LWV4dC1kaWZmJywgJy0tZnVsbC1pbmRleCcsICctTScsICdNT0NLIG91dHB1dCBvZiBjaGlsZCBw
cm9jZXNzJywgJy0tJ10sIGN3ZD0lKGNoZWNrb3V0KXNcbk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZ2l0
JywgJ2xvZycsICctMjUnXSwgY3dkPU5vbmVcbiIgJSB7J2NoZWNrb3V0Jzogc2NtLmNoZWNrb3V0
X3Jvb3R9Ci0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBzY20u
Y3JlYXRlX3BhdGNoLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQorICAgICAgICBl
eHBlY3RlZF9zdGRlcnIgPSAiIiJcCitNT0NLIHJ1bl9jb21tYW5kOiBbJ2dpdCcsICdtZXJnZS1i
YXNlJywgJ01PQ0tWQUxVRScsICdIRUFEJ10sIGN3ZD0lKGNoZWNrb3V0KXMKK01PQ0sgcnVuX2Nv
bW1hbmQ6IFsnZ2l0JywgJ2RpZmYnLCAnLS1iaW5hcnknLCAnLS1uby1jb2xvcicsICctLW5vLWV4
dC1kaWZmJywgJy0tZnVsbC1pbmRleCcsICctLW5vLXJlbmFtZXMnLCAnJywgJ01PQ0sgb3V0cHV0
IG9mIGNoaWxkIHByb2Nlc3MnLCAnLS0nXSwgY3dkPSUoY2hlY2tvdXQpcworTU9DSyBydW5fY29t
bWFuZDogWydnaXQnLCAnbG9nJywgJy0yNScsICcuL01PQ0sgb3V0cHV0IG9mIGNoaWxkIHByb2Nl
c3MnXSwgY3dkPSUoY2hlY2tvdXQpcworIiIiICUgeydjaGVja291dCc6IHNjbS5jaGVja291dF9y
b290fQorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgc2NtLmNy
ZWF0ZV9wYXRjaCwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9zdGRlcnIpCiAKICAgICBkZWYgdGVz
dF9wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyX3dpdGhfdXNlcm5hbWVfYW5kX3Bhc3N3b3Jk
KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9zY20oKS5wdXNoX2xv
Y2FsX2NvbW1pdHNfdG9fc2VydmVyKHVzZXJuYW1lPSdkYmF0ZXNAd2Via2l0Lm9yZycsIHBhc3N3
b3JkPSdibGFoJyksICJNT0NLIG91dHB1dCBvZiBjaGlsZCBwcm9jZXNzIikKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CmluZGV4IDg3Zjcx
N2IyOGNiMWJiYzBiZWEyNTUyMjBmYjRmNWQwMDQyMDAxOWYuLjkxZTMwY2IzOTM2NTg5MDQ3ODFm
YWI4ZDc5YWJhNDI1MTM5MDk5MzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQpAQCAtMjksOCArMjksMTAgQEAKIAogaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBvcworaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJlCiBpbXBvcnQgc2h1dGls
CitpbXBvcnQgc3RyaW5nCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIApAQCAtMjcxLDEx
ICsyNzMsMTIgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fc3ZuKFsnZGlmZicsICctYycsIHJldmlzaW9uXSkKIAogICAgIGRlZiBfYm9n
dXNfZGlyX25hbWUoc2VsZik6CisgICAgICAgIHJuZCA9ICcnLmpvaW4ocmFuZG9tLnNhbXBsZShz
dHJpbmcuYXNjaWlfbGV0dGVycywgNSkpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3
aXRoKCJ3aW4iKToKICAgICAgICAgICAgIHBhcmVudF9kaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGly
KCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBhcmVudF9kaXIgPSBzeXMucGF0aFswXSAg
IyB0ZW1wZGlyIGlzIG5vdCBzZWN1cmUuCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGFy
ZW50X2RpciwgInRlbXBfc3ZuX2NvbmZpZyIpCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4o
cGFyZW50X2RpciwgInRlbXBfc3ZuX2NvbmZpZ18iICsgcm5kKQogCiAgICAgZGVmIF9zZXR1cF9i
b2d1c19kaXIoc2VsZiwgbG9nKToKICAgICAgICAgc2VsZi5fYm9ndXNfZGlyID0gc2VsZi5fYm9n
dXNfZGlyX25hbWUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL291dHB1dGNhcHR1cmUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vb3V0cHV0Y2FwdHVyZS5weQppbmRleCAyNjY3MGQyMTQ2ZjI3YjUxZTI0ODg5OWVmMGNi
NDc1ODlmMGFjODcxLi41MTZhYmEyOGUzNWE0OTgzZDAxOTQ2MGMzNWYyN2ZjZGZiNmNmZDQxIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2Fw
dHVyZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0
Y2FwdHVyZS5weQpAQCAtMjksOCArMjksOCBAQAogIyBDbGFzcyBmb3IgdW5pdHRlc3Qgc3VwcG9y
dC4gIFVzZWQgZm9yIGNhcHR1cmluZyBzdGRlcnIvc3Rkb3V0LgogCiBpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0dGVzdAogaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0
CiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCiAKQEAgLTk0LDE1ICs5NCwyMiBAQCBj
bGFzcyBPdXRwdXRDYXB0dXJlKG9iamVjdCk6CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAg
ICAoc3Rkb3V0X3N0cmluZywgc3RkZXJyX3N0cmluZywgbG9nc19zdHJpbmcpID0gc2VsZi5yZXN0
b3JlX291dHB1dCgpCiAKLSAgICAgICAgdGVzdGNhc2UuYXNzZXJ0RXF1YWwoc3Rkb3V0X3N0cmlu
ZywgZXhwZWN0ZWRfc3Rkb3V0KQotICAgICAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbChzdGRlcnJf
c3RyaW5nLCBleHBlY3RlZF9zdGRlcnIpCisgICAgICAgIGlmIGhhc2F0dHIodGVzdGNhc2UsICdh
c3NlcnRNdWx0aUxpbmVFcXVhbCcpOgorICAgICAgICAgICAgdGVzdGFzc2VydCA9IHRlc3RjYXNl
LmFzc2VydE11bHRpTGluZUVxdWFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0YXNz
ZXJ0ID0gdGVzdGNhc2UuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0YXNzZXJ0KHN0ZG91dF9z
dHJpbmcsIGV4cGVjdGVkX3N0ZG91dCkKKyAgICAgICAgdGVzdGFzc2VydChzdGRlcnJfc3RyaW5n
LCBleHBlY3RlZF9zdGRlcnIpCiAgICAgICAgIGlmIGV4cGVjdGVkX2xvZ3MgaXMgbm90IE5vbmU6
Ci0gICAgICAgICAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbChsb2dzX3N0cmluZywgZXhwZWN0ZWRf
bG9ncykKKyAgICAgICAgICAgIHRlc3Rhc3NlcnQobG9nc19zdHJpbmcsIGV4cGVjdGVkX2xvZ3Mp
CiAgICAgICAgICMgVGhpcyBpcyBhIGxpdHRsZSBzdHJhbmdlLCBidXQgSSBkb24ndCBrbm93IHdo
ZXJlIGVsc2UgdG8gcmV0dXJuIHRoaXMgaW5mb3JtYXRpb24uCiAgICAgICAgIHJldHVybiByZXR1
cm5fdmFsdWUKIAogCiBjbGFzcyBPdXRwdXRDYXB0dXJlVGVzdENhc2VCYXNlKHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBtYXhEaWZmID0gTm9uZQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAg
ICAgICB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcChzZWxmKQogICAgICAgICBzZWxmLm91dHB1dF9j
YXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rlc3QvcHJpbnRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9wcmludGVy
LnB5CmluZGV4IDA0OTA1OGQ4YjZjOWI2ZGRkYzBhMzcwNmE0YWNmZDhmZWVlYTNhMmEuLmY0YTRi
MDZhY2I1NzVmY2UxOWUyNzY1ZjQ2ZGRlZDBlYmRhMjIxYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9wcmludGVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGVzdC9wcmludGVyLnB5CkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgbG9nZ2luZwogaW1w
b3J0IFN0cmluZ0lPCiAKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0
Y2FwdHVyZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5
c3RlbUhvc3QKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzLm1ldGVyZWRfc3RyZWFt
IGltcG9ydCBNZXRlcmVkU3RyZWFtCiAKQEAgLTEwNCw2ICsxMDMsOCBAQCBjbGFzcyBQcmludGVy
KG9iamVjdCk6CiAgICAgICAgIGhhbmRsZXIuYWRkRmlsdGVyKHRlc3RpbmdfZmlsdGVyKQogCiAg
ICAgICAgIGlmIHNlbGYub3B0aW9ucy5wYXNzX3Rocm91Z2g6CisgICAgICAgICAgICAjIEZJWE1F
OiBDYW4ndCBpbXBvcnQgYXQgdG9wIG9mIGZpbGUsIGFzIG91dHB1dGNhcHR1cmUgbmVlZHMgdW5p
dHRlc3QyCisgICAgICAgICAgICBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91
dHB1dGNhcHR1cmUKICAgICAgICAgICAgIG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZS5zdHJl
YW1fd3JhcHBlciA9IF9DYXB0dXJlQW5kUGFzc1Rocm91Z2hTdHJlYW0KIAogICAgIGRlZiB3cml0
ZV91cGRhdGUoc2VsZiwgbXNnKToK
</data>

          </attachment>
      

    </bug>

</bugzilla>