<?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>39136</bug_id>
          
          <creation_ts>2010-05-14 14:16:25 -0700</creation_ts>
          <short_desc>sheriffbot can&apos;t roll out security patches</short_desc>
          <delta_ts>2010-09-28 00:29:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>225998</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-14 14:16:25 -0700</bug_when>
    <thetext>sheriffbot can&apos;t roll out security patches

When it tries, all we get is:
Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;create-rollout&apos;, &apos;--force-clean&apos;, &apos;--parent-command=sheriff-bot&apos;, REVISION, &apos;REASON (Requested by abarth on #webkit).&apos;]&quot; exit_code: 1

Either we should giver sheriffbot access, or have him do something smarter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277794</commentid>
    <comment_count>1</comment_count>
      <attachid>67318</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-11 16:12:57 -0700</bug_when>
    <thetext>Created attachment 67318
Patch with unit tests

Patch to make Sheriffbot and webkit-patch print human-readable error messages when the person (or bot) cannot view a bug.

I&apos;m open to naming suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277795</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-11 16:17:20 -0700</bug_when>
    <thetext>I should note that for the unit tests included in this patch, I explicitly tested the exception as there does not seem to be analogous unitTest.TestCase.assertRaises() that can be used as a context manager in Python &lt; 2.7. I am open to suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277796</commentid>
    <comment_count>3</comment_count>
      <attachid>67318</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-11 16:21:30 -0700</bug_when>
    <thetext>Comment on attachment 67318
Patch with unit tests

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

&gt; WebKitTools/Scripts/webkitpy/common/net/bugzilla.py:516
&gt; +        bug_element = soup.find(&quot;bug&quot;)
&gt; +        if bug_element.has_key(&quot;error&quot;):
&gt; +            raise BugzillaError(bug_element[&quot;error&quot;])
Nice.

&gt; WebKitTools/Scripts/webkitpy/tool/multicommandtool.py:320
&gt; +            except BugzillaError, e:
&gt; +                if e.is_invalid_bug_id():
&gt; +                    log(&quot;Invalid bug number.&quot;)
&gt; +                if e.does_bug_exist():
&gt; +                    log(&quot;The bug does not exist.&quot;)
&gt; +                elif e.is_not_permitted_to_view_bug():
&gt; +                    log(&quot;You are not authorized to view this bug.&quot;)
&gt; +                sys.exit(1)
This seems like a very high level to catch this error.  Also, exit(1) is pretty severe...  Would it make sense to move this exception block lower down to where we actually fetch the bugs?  That might give us more context about what to do.

&gt; WebKitTools/Scripts/webkitpy/tool/bot/sheriff.py:71
&gt; +            if (e.is_not_permitted_to_view_bug()):
&gt; +                raise ScriptError(message=&quot;SheriffBot is not authorized to rollout a security bug.&quot;)
Instead of raising a ScriptError, should we just send a message to IRC?  I see that in other places in this file we raise ScriptErrors, so maybe this is the best thing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277797</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-11 16:25:05 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/multicommandtool.py:320
&gt; &gt; +            except BugzillaError, e:
&gt; &gt; +                if e.is_invalid_bug_id():
&gt; &gt; +                    log(&quot;Invalid bug number.&quot;)
&gt; &gt; +                if e.does_bug_exist():
&gt; &gt; +                    log(&quot;The bug does not exist.&quot;)
&gt; &gt; +                elif e.is_not_permitted_to_view_bug():
&gt; &gt; +                    log(&quot;You are not authorized to view this bug.&quot;)
&gt; &gt; +                sys.exit(1)
&gt; This seems like a very high level to catch this error.  Also, exit(1) is pretty severe...  Would it make sense to move this exception block lower down to where we actually fetch the bugs?  That might give us more context about what to do.

Will look into this.

&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/bot/sheriff.py:71
&gt; &gt; +            if (e.is_not_permitted_to_view_bug()):
&gt; &gt; +                raise ScriptError(message=&quot;SheriffBot is not authorized to rollout a security bug.&quot;)
&gt; Instead of raising a ScriptError, should we just send a message to IRC?  I see that in other places in this file we raise ScriptErrors, so maybe this is the best thing...

I was not familiar with how to send a message to IRC directly. As you notice, other places seem to use this approach. I&apos;ll look into this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277882</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-12 11:58:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/tool/bot/sheriff.py:71
&gt; &gt; &gt; +            if (e.is_not_permitted_to_view_bug()):
&gt; &gt; &gt; +                raise ScriptError(message=&quot;SheriffBot is not authorized to rollout a security bug.&quot;)
&gt; &gt; Instead of raising a ScriptError, should we just send a message to IRC?  I see that in other places in this file we raise ScriptErrors, so maybe this is the best thing...
&gt; 
&gt; I was not familiar with how to send a message to IRC directly. As you notice, other places seem to use this approach. I&apos;ll look into this as well.

The Rollout class (in irc_command.py), which implements the SheriffBot rollout command, has the necessary infrastructure to catch a ScriptError exception and post its message to IRC. You seem to be implying that we should explicitly post an IRC message and return with value None (or some other error code) and modify the caller Rollout.execute() to handle this instead of raising an exception in Sheriff.post_rollout_patch()  with the error message. I&apos;m unclear of the advantages of this approach as I would envision using a similar error message prefix of &quot;...: Failed to create rollout patch: ...&quot; for the Bugzilla error message (for consistency with the other failed rollout error messages). Can you elaborate on you how you envision this to work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277883</commentid>
    <comment_count>6</comment_count>
      <attachid>67340</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-12 12:03:50 -0700</bug_when>
    <thetext>Created attachment 67340
Patch with unit tests

Updated patch based on Adam Barth&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277884</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-12 12:09:18 -0700</bug_when>
    <thetext>Attachment 67340 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/tool/commands/download.py:166:  at least two spaces before inline comment  [pep8/E261] [5]
WebKitTools/Scripts/webkitpy/tool/commands/download.py:179:  at least two spaces before inline comment  [pep8/E261] [5]
WebKitTools/Scripts/webkitpy/common/net/bugzilla.py:47:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKitTools/Scripts/webkitpy/common/net/bugzilla.py:517:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277886</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-12 12:19:28 -0700</bug_when>
    <thetext>&gt; The Rollout class (in irc_command.py), which implements the SheriffBot rollout command, has the necessary infrastructure to catch a ScriptError exception and post its message to IRC.

Yeah.  It just looks kind of ugly.  I guess we could make it less ugly instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277887</commentid>
    <comment_count>9</comment_count>
      <attachid>67340</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-12 12:27:59 -0700</bug_when>
    <thetext>Comment on attachment 67340
Patch with unit tests

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

&gt; WebKitTools/Scripts/webkitpy/tool/bot/sheriff.py:73
&gt; +            elif (e.is_not_permitted_to_view_bug()):
&gt; +                ScriptError(message=&quot;SheriffBot is not authorized to rollout a security bug.&quot;)
It&apos;s kind of too bad that we&apos;ll announce to the whole channel that this patch fixes a security bug, but I guess we&apos;re kind of doing that already...  Maybe something like &quot;SheriffBot is not authorized to view https://bugs.webkit.org/show_bug.cgi?....&quot;

&gt; WebKitTools/Scripts/webkitpy/tool/commands/download.py:166
&gt;  class ProcessAttachmentsMixin(object):
&gt;      def _fetch_list_of_patches_to_process(self, options, args, tool):
&gt; -        return map(lambda patch_id: tool.bugs.fetch_attachment(patch_id), args)
&gt; +        all_patches = []
&gt; +        for patch_id in args:
&gt; +            try:
&gt; +                all_patches.append(tool.bugs.fetch_attachment(patch_id))
&gt; +            except BugzillaError, e:
&gt; +                continue # Ignore this patch.
Can we print a message so the user knows that one of the attachments was skipped?  Also, this behavior seems wrong when used by the bots because the command will appear to succeed when, in fact, it doesn&apos;t do anything...  Maybe check for options.non_interactive and error out?

&gt; WebKitTools/Scripts/webkitpy/tool/commands/download.py:179
&gt;  class ProcessBugsMixin(object):
&gt;      def _fetch_list_of_patches_to_process(self, options, args, tool):
&gt;          all_patches = []
&gt;          for bug_id in args:
&gt; -            patches = tool.bugs.fetch_bug(bug_id).reviewed_patches()
&gt; -            log(&quot;%s found on bug %s.&quot; % (pluralize(&quot;reviewed patch&quot;, len(patches)), bug_id))
&gt; -            all_patches += patches
&gt; +            try:
&gt; +                patches = tool.bugs.fetch_bug(bug_id).reviewed_patches()
&gt; +                log(&quot;%s found on bug %s.&quot; % (pluralize(&quot;reviewed patch&quot;, len(patches)), bug_id))
&gt; +                all_patches += patches
&gt; +            except BugzillaError, e:
&gt; +                continue # Ignore the patches for this bug.
Similar comments here.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/upload.py:91
&gt; +                # This may occur if the bug becomes a security bug between the time
&gt; +                # we fetched its ID from the pending commit list and now. We ignore
&gt; +                # this bug.
&gt; +                continue
Again, I&apos;d print a message here to explain what just happened.

&gt; WebKitTools/Scripts/webkitpy/tool/steps/obsoletepatches.py:56
&gt; +        try:
&gt; +            patches = self._tool.bugs.fetch_bug(bug_id).patches()
&gt; +        except BugzillaError, e:
&gt; +            if (e.is_invalid_bug_id()):
&gt; +                log(&quot;Bug %s is invalid.&quot; % bug_id)
&gt; +            elif (e.is_not_found()):
&gt; +                log(&quot;Bug %s does not exist.&quot; % bug_id)
&gt; +            elif (e.is_not_permitted_to_view_bug()):
&gt; +                log(&quot;You&apos;re not authorized to modify bug %s.&quot; % bug_id)
&gt; +            return
This code seems copy/pasted three times.  Is there some way we could share code between these instances?

&gt; WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py:59
&gt; +        except BugzillaError, e:
&gt; +            # We may not be authorized to retrieve the bug title if it&apos;s for
&gt; +            # a security bug. Therefore, we leave the change logs unchanged.
&gt; +            return
Again, we should tell the user what happened.  I think we need to error out in this case.  We can&apos;t really proceed with the commands that use this step without a ChangeLog.  We use the ChangeLog to store important state information (like the bug id).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279389</commentid>
    <comment_count>10</comment_count>
      <attachid>67642</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-14 22:36:24 -0700</bug_when>
    <thetext>Created attachment 67642
Patch with unit tests

Changed to raise an exception in ProcessAttachmentsMixin, and ProcessBugsMixin if we are running in non-interactive mode.
Added comment in PrepareChangeLog and just let the BugzillaError exception bubble instead of explicitly catching it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279393</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-14 22:43:05 -0700</bug_when>
    <thetext>Attachment 67642 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/common/net/bugzilla.py:535:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py:58:  at least two spaces before inline comment  [pep8/E261] [5]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282761</commentid>
    <comment_count>12</comment_count>
      <attachid>68336</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-21 21:15:35 -0700</bug_when>
    <thetext>Created attachment 68336
Patch with unit test

Updated patch as &lt;https://bugs.webkit.org/attachment.cgi?id=67642&gt; became stale.

Also fixed style issue: &quot;WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py:58:  at least two spaces before inline comment&quot;
After talking with Eric, decided to use has_key as the BeautifulSoup element object is not a native dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282762</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-21 21:21:38 -0700</bug_when>
    <thetext>Attachment 68336 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/common/net/bugzilla.py:548:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285316</commentid>
    <comment_count>14</comment_count>
      <attachid>68336</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-26 22:22:32 -0700</bug_when>
    <thetext>Comment on attachment 68336
Patch with unit test

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

&gt; WebKitTools/Scripts/webkitpy/tool/bot/sheriff.py:73
&gt; +                ScriptError(message=&quot;SheriffBot is not authorized to view %s.&quot; % self._tool.bugs.bug_url_for_bug_id(e.bug_id()))
&gt; +            else:
&gt; +                ScriptError(message=&quot;Could not determine the corresponding bug for r%s.&quot; % svn_revision)

Did you want to raise these errors?

&gt; WebKitTools/Scripts/webkitpy/tool/commands/download.py:167
&gt; +                    raise e

You just want to say &quot;raise&quot; without giving the exception again.  That will make the stack trace better.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/download.py:183
&gt; +                    raise e

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286051</commentid>
    <comment_count>15</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-27 21:34:05 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 68336 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68336&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/bot/sheriff.py:73
&gt; &gt; +                ScriptError(message=&quot;SheriffBot is not authorized to view %s.&quot; % self._tool.bugs.bug_url_for_bug_id(e.bug_id()))
&gt; &gt; +            else:
&gt; &gt; +                ScriptError(message=&quot;Could not determine the corresponding bug for r%s.&quot; % svn_revision)
&gt; 
&gt; Did you want to raise these errors?

Yes. I&apos;ll fix this before I land.

&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/download.py:167
&gt; &gt; +                    raise e
&gt; 
&gt; You just want to say &quot;raise&quot; without giving the exception again.  That will make the stack trace better.

Will change.

&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/download.py:183
&gt; &gt; +                    raise e
&gt; 
&gt; ditto

Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286096</commentid>
    <comment_count>16</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-27 23:39:42 -0700</bug_when>
    <thetext>Committed r68493: &lt;http://trac.webkit.org/changeset/68493&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286116</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-28 00:29:24 -0700</bug_when>
    <thetext>Unfortunately, this change regressed Sheriffbot&apos;s rollout feature. With Adam&apos;s help, we discovered that this change caused Sheriffbot to raise an exception in bugzilla.py:

abarth: File &quot;/mnt/git/webkit-sheriff-bot/WebKitTools/Scripts/webkitpy/common/net/bugzilla.py&quot;, line 547, in _parse_bug_page
[11:50pm] renato joined the chat room.
[11:50pm] abarth: bug_id = soup.find(&quot;bug_id&quot;).string
[11:50pm] abarth: AttributeError: &apos;NoneType&apos; object has no attribute &apos;string&apos;

Reverted changeset 68493 &lt;http://trac.webkit.org/changeset/68493&gt; in changeset 68496 &lt;http://trac.webkit.org/changeset/68496&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286117</commentid>
    <comment_count>18</comment_count>
      <attachid>68336</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-09-28 00:29:50 -0700</bug_when>
    <thetext>Comment on attachment 68336
Patch with unit test

Clearing review-queue and commit-queue flags.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67318</attachid>
            <date>2010-09-11 16:12:57 -0700</date>
            <delta_ts>2010-09-12 12:03:50 -0700</delta_ts>
            <desc>Patch with unit tests</desc>
            <filename>Bug39136.patch</filename>
            <type>text/plain</type>
            <size>9952</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY3MzA5KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTAtMDktMTEgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIHNoZXJpZmZib3QgY2FuJ3Qgcm9sbCBvdXQgc2VjdXJpdHkgcGF0Y2hlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxMzYKKworICAgICAg
ICBNYWtlIFNoZXJpZmZCb3QgZGV0ZXJtaW5lIGlmIGl0J3MgYXV0aG9yaXplZCB0byB2aWV3IGEg
YnVnCisgICAgICAgIHdob3NlIGNoYW5nZSBpdCB3YW50cyB0byByb2xsb3V0IGJlZm9yZSBpdCB0
cmllcyB0byByb2xsb3V0CisgICAgICAgIHRoZSBjaGFuZ2UuCisKKyAgICAgICAgTW9yZW92ZXIs
IG1ha2UgYm90aCB3ZWJraXQtcGF0Y2ggYW5kIFNoZXJpZmZib3QgcHJvdmlkZSBodW1hbi0KKyAg
ICAgICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGV5IGFyZSBub3QgYXV0aG9yaXpl
ZCB0byB2aWV3CisgICAgICAgIGEgYnVnIGFuZCB3aGVuIGEgYnVnIG51bWJlciBpcyBpbnZhbGlk
LgorCisgICAgICAgIEN1cnJlbnRseSwgU2hlcmlmZmJvdCBkb2VzIG5vdCBwYXJzZSBCdWd6aWxs
YSBidWdzIGZvcgorICAgICAgICA8YnVnIGVycm9yPSIuLi4iPiwgd2hpY2ggaW5kaWNhdGVzIGFu
IGVycm9yIHdoZW4gcmV0cmlldmluZworICAgICAgICBhIGJ1Zy4gSW4gcGFydGljdWxhciwgZXJy
b3I9Ik5vdFBlcm1pdHRlZCIgaWYgYSBwZXJzb24gKG9yIGJvdCkKKyAgICAgICAgaXMgbm90IGF1
dGhvcml6ZWQgdG8gdmlldyBhIGJ1Zy4gRm9yIHN1Y2ggZXJyb3I9Ik5vdFBlcm1pdHRlZCIgYnVn
cywKKyAgICAgICAgU2hlcmlmZmJvdCByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gcGFyc2luZyB0
aGUgYnVnIHJlcG9ydCBhbmQKKyAgICAgICAgdGhpcyBleGNlcHRpb24gZG9lcyBub3QgZXhwbGlj
aXRseSBpbmRpY2F0ZSBTaGVyaWZmYm90J3MgbGFjaworICAgICAgICBvZiBhdXRob3JpemF0aW9u
LiBJbnN0ZWFkLCBTaGVyaWZmYm90IHNob3VsZCBleHBsaWNpdGx5IGNoZWNrCisgICAgICAgIGZv
ciB0aGUgcHJlc2VuY2UgPGJ1ZyBlcnJvcj0iLi4uIj4gYmVmb3JlIG9wZXJhdGluZyBvbiBhIGJ1
ZworICAgICAgICBhbmQgZXJyb3Igd2l0aCBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaWYgaXQn
cyBub3QgcGVybWl0dGVkCisgICAgICAgIHRvIHZpZXcgaXQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHk6IEFkZGVkIEJ1Z3ppbGxhRXJyb3IgY2xh
c3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhX3VuaXR0
ZXN0LnB5OgorICAgICAgICAgIC0gQWRkZWQgdW5pdCB0ZXN0IHRlc3RfYnVnX3BhcnNpbmdfZm9y
X2J1Z3ppbGxhX25vdF9wZXJtaXR0ZWRfZXJyb3IoKS4KKyAgICAgICAgICAtIEFkZGVkIHVuaXQg
dGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9ub3RfZm91bmRfZXJyb3IoKS4KKyAg
ICAgICAgICAtIEFkZGVkIHVuaXQgdGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9p
bnZhbGlkX2J1Z19pZF9lcnJvcigpLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9i
b3Qvc2hlcmlmZi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbXVsdGljb21t
YW5kdG9vbC5weToKKyAgICAgICAgICAtIENhdGNoIEJ1Z3ppbGxhRXJyb3IgYW5kIHRlcm1pbmF0
ZSB3aXRoIGEgaHVtYW4gcmVhZGFibGUgZXJyb3IuCisKIDIwMTAtMDktMTEgIE1paGFpIFBhcnBh
cml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBC
YXJ0aC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWd6
aWxsYS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9uZXQvYnVnemlsbGEucHkJKHJldmlzaW9uIDY3MzA5KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCwyMCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgCiBmcm9t
IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5pemUgaW1wb3J0IEJyb3dz
ZXIKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlm
dWxTb3VwLCBTb3VwU3RyYWluZXIKIAorY2xhc3MgQnVnemlsbGFFcnJvcihFeGNlcHRpb24pOgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CisgICAgICAgIEV4
Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlcnJvcl9tZXNzYWdlKQorICAgICAgICBzZWxmLmVycm9y
X21lc3NhZ2UgPSBlcnJvcl9tZXNzYWdlCisKKyAgICBkZWYgaXNfaW52YWxpZF9idWdfaWQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLmVycm9yX21lc3NhZ2UgPT0gIkludmFsaWRCdWdJZCIK
KworICAgIGRlZiBkb2VzX2J1Z19leGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJy
b3JfbWVzc2FnZSA9PSAiTm90Rm91bmQiCisKKyAgICBkZWYgaXNfbm90X3Blcm1pdHRlZF90b192
aWV3X2J1ZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3JfbWVzc2FnZSA9PSAiTm90
UGVybWl0dGVkIgogCiBkZWYgcGFyc2VfYnVnX2lkKG1lc3NhZ2UpOgogICAgIGlmIG5vdCBtZXNz
YWdlOgpAQCAtNDk3LDYgKzUxMSw5IEBAIGNsYXNzIEJ1Z3ppbGxhKG9iamVjdCk6CiAKICAgICBk
ZWYgX3BhcnNlX2J1Z19wYWdlKHNlbGYsIHBhZ2UpOgogICAgICAgICBzb3VwID0gQmVhdXRpZnVs
U291cChwYWdlKQorICAgICAgICBidWdfZWxlbWVudCA9IHNvdXAuZmluZCgiYnVnIikKKyAgICAg
ICAgaWYgYnVnX2VsZW1lbnQuaGFzX2tleSgiZXJyb3IiKToKKyAgICAgICAgICAgIHJhaXNlIEJ1
Z3ppbGxhRXJyb3IoYnVnX2VsZW1lbnRbImVycm9yIl0pCiAgICAgICAgIGJ1ZyA9IHt9CiAgICAg
ICAgIGJ1Z1siaWQiXSA9IGludChzb3VwLmZpbmQoImJ1Z19pZCIpLnN0cmluZykKICAgICAgICAg
YnVnWyJ0aXRsZSJdID0gc2VsZi5fc3RyaW5nX2NvbnRlbnRzKHNvdXAuZmluZCgic2hvcnRfZGVz
YyIpKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3pp
bGxhX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL25ldC9idWd6aWxsYV91bml0dGVzdC5weQkocmV2aXNpb24gNjczMDkpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGFfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgaW1wb3J0IHVuaXR0ZXN0CiBpbXBv
cnQgZGF0ZXRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnMgaW1w
b3J0IENvbW1pdHRlckxpc3QsIFJldmlld2VyLCBDb21taXR0ZXIKLWZyb20gd2Via2l0cHkuY29t
bW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEsIEJ1Z3ppbGxhUXVlcmllcywgcGFyc2Vf
YnVnX2lkLCBDb21taXR0ZXJWYWxpZGF0b3IsIEJ1ZworZnJvbSB3ZWJraXRweS5jb21tb24ubmV0
LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYSwgQnVnemlsbGFFcnJvciwgQnVnemlsbGFRdWVyaWVz
LCBwYXJzZV9idWdfaWQsIENvbW1pdHRlclZhbGlkYXRvciwgQnVnCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3VwCkBAIC0xNDEsNiArMTQxLDU3IEBA
IGNsYXNzIEJ1Z3ppbGxhVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKE5vbmUsIHBhcnNlX2J1Z19pZCgiaHR0cDovL3d3dy53ZWJraXQub3JnL2IvMTIz
NDUiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgcGFyc2VfYnVnX2lkKCJodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9jdHlwZT14bWwmaWQ9MTIzNDUiKSkKIAor
ICAgIF9leGFtcGxlX3VuYXV0aG9yaXplZF9idWcgPSAiIiIKKyAgICA8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIiA/PgorICAgIDwhRE9DVFlQRSBi
dWd6aWxsYSBTWVNURU0gImh0dHBzOi8vYnVncy53ZWJraXQub3JnL2J1Z3ppbGxhLmR0ZCI+CisK
KyAgICA8YnVnemlsbGEgdmVyc2lvbj0iMy4yLjMiCisgICAgICAgICAgICAgIHVybGJhc2U9Imh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIKKyAgICAgICAgICAgICAgbWFpbnRhaW5lcj0iYWRtaW5A
d2Via2l0Lm9yZyIKKyAgICAgICAgICAgICAgZXhwb3J0ZXI9InVuYXV0aG9yaXplZF9wZXJzb25A
ZXhhbXBsZS5jb20iCisgICAgPgorCisgICAgICAgIDxidWcgZXJyb3I9Ik5vdFBlcm1pdHRlZCI+
CisgICAgICAgICAgPGJ1Z19pZD4xMjM0NTwvYnVnX2lkPgorICAgICAgICA8L2J1Zz4KKworICAg
IDwvYnVnemlsbGE+CisgICAgIiIiCisKKyAgICBfZXhhbXBsZV9ub3RfZm91bmRfYnVnID0gIiIi
CisgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Inll
cyIgPz4KKyAgICA8IURPQ1RZUEUgYnVnemlsbGEgU1lTVEVNICJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9idWd6aWxsYS5kdGQiPgorCisgICAgPGJ1Z3ppbGxhIHZlcnNpb249IjMuMi4zIgorICAg
ICAgICAgICAgICB1cmxiYXNlPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iCisgICAgICAgICAg
ICAgIG1haW50YWluZXI9ImFkbWluQHdlYmtpdC5vcmciCisgICAgICAgICAgICAgIGV4cG9ydGVy
PSJ1bmF1dGhvcml6ZWRfcGVyc29uQGV4YW1wbGUuY29tIgorICAgID4KKworICAgICAgICA8YnVn
IGVycm9yPSJOb3RGb3VuZCI+CisgICAgICAgICAgPGJ1Z19pZD4xMjM0NTwvYnVnX2lkPgorICAg
ICAgICA8L2J1Zz4KKworICAgIDwvYnVnemlsbGE+CisgICAgIiIiCisKKyAgICBfZXhhbXBsZV9p
bnZhbGlkX2J1Z19pZF9idWcgPSAiIiIKKyAgICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIiA/PgorICAgIDwhRE9DVFlQRSBidWd6aWxsYSBTWVNU
RU0gImh0dHBzOi8vYnVncy53ZWJraXQub3JnL2J1Z3ppbGxhLmR0ZCI+CisKKyAgICA8YnVnemls
bGEgdmVyc2lvbj0iMy4yLjMiCisgICAgICAgICAgICAgIHVybGJhc2U9Imh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIKKyAgICAgICAgICAgICAgbWFpbnRhaW5lcj0iYWRtaW5Ad2Via2l0Lm9yZyIK
KyAgICAgICAgICAgICAgZXhwb3J0ZXI9InVuYXV0aG9yaXplZF9wZXJzb25AZXhhbXBsZS5jb20i
CisgICAgPgorCisgICAgICAgIDxidWcgZXJyb3I9IkludmFsaWRCdWdJZCI+CisgICAgICAgICAg
PGJ1Z19pZD5BPC9idWdfaWQ+CisgICAgICAgIDwvYnVnPgorCisgICAgPC9idWd6aWxsYT4KKyAg
ICAiIiIKKwogICAgIF9leGFtcGxlX2J1ZyA9ICIiIgogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyIgPz4KIDwhRE9DVFlQRSBidWd6aWxsYSBTWVNU
RU0gImh0dHBzOi8vYnVncy53ZWJraXQub3JnL2J1Z3ppbGxhLmR0ZCI+CkBAIC0yMjcsNiArMjc4
LDMzIEBAIFpFWnBibWx6YUV4dllXUlhhWFJvVW1WaGMyOXVPbkpsWVhOdmJsMDcKICAgICAgICAg
fV0sCiAgICAgfQogCisgICAgZGVmIHRlc3RfYnVnX3BhcnNpbmdfZm9yX2J1Z3ppbGxhX25vdF9w
ZXJtaXR0ZWRfZXJyb3Ioc2VsZik6CisgICAgICAgIGRpZFBhc3NUZXN0ID0gRmFsc2UKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgQnVnemlsbGEoKS5fcGFyc2VfYnVnX3BhZ2Uoc2VsZi5fZXhh
bXBsZV91bmF1dGhvcml6ZWRfYnVnKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmlzX25vdF9wZXJtaXR0ZWRfdG9fdmlld19i
dWcoKSkKKyAgICAgICAgICAgIGRpZFBhc3NUZXN0ID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoZGlkUGFzc1Rlc3QsICJGYWlsZWQgdG8gcmFpc2UgZXhjZXB0aW9uLiIpCisKKyAgICBk
ZWYgdGVzdF9idWdfcGFyc2luZ19mb3JfYnVnemlsbGFfbm90X2ZvdW5kX2Vycm9yKHNlbGYpOgor
ICAgICAgICBkaWRQYXNzVGVzdCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEJ1
Z3ppbGxhKCkuX3BhcnNlX2J1Z19wYWdlKHNlbGYuX2V4YW1wbGVfbm90X2ZvdW5kX2J1ZykKKyAg
ICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUoZS5kb2VzX2J1Z19leGlzdCgpKQorICAgICAgICAgICAgZGlkUGFzc1Rlc3QgPSBUcnVlCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWRQYXNzVGVzdCwgIkZhaWxlZCB0byByYWlzZSBleGNl
cHRpb24uIikKKworICAgIGRlZiB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9pbnZhbGlk
X2J1Z19pZF9lcnJvcihzZWxmKToKKyAgICAgICAgZGlkUGFzc1Rlc3QgPSBGYWxzZQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBCdWd6aWxsYSgpLl9wYXJzZV9idWdfcGFnZShzZWxmLl9leGFt
cGxlX2ludmFsaWRfYnVnX2lkX2J1ZykKKyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6
CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5pc19pbnZhbGlkX2J1Z19pZCgpKQorICAg
ICAgICAgICAgZGlkUGFzc1Rlc3QgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWRQ
YXNzVGVzdCwgIkZhaWxlZCB0byByYWlzZSBleGNlcHRpb24uIikKKwogICAgICMgRklYTUU6IFRo
aXMgc2hvdWxkIG1vdmUgdG8gYSBjZW50cmFsIGxvY2F0aW9uIGFuZCBiZSBzaGFyZWQgYnkgbW9y
ZSB1bml0IHRlc3RzLgogICAgIGRlZiBfYXNzZXJ0X2RpY3Rpb25hcmllc19lcXVhbChzZWxmLCBh
Y3R1YWwsIGV4cGVjdGVkKToKICAgICAgICAgIyBNYWtlIHN1cmUgd2UgYXJlbid0IHBhcnNpbmcg
bW9yZSBvciBsZXNzIHRoYW4gd2UgZXhwZWN0CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvbXVsdGljb21tYW5kdG9vbC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbXVsdGljb21tYW5kdG9vbC5weQkocmV2aXNpb24gNjcz
MDkpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbXVsdGljb21tYW5kdG9v
bC5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIG9w
dHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIsIEluZGVudGVkSGVscEZvcm1hdHRlciwgU1VQUFJF
U1NfVVNBR0UsIG1ha2Vfb3B0aW9uCiAKIGZyb20gd2Via2l0cHkudG9vbC5ncmFtbWFyIGltcG9y
dCBwbHVyYWxpemUKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVn
emlsbGFFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2lu
ZyBpbXBvcnQgbG9nCiAKIApAQCAtMzA5LDYgKzMxMCwxNCBAQCBjbGFzcyBNdWx0aUNvbW1hbmRU
b29sKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBU
cnlBZ2FpbiwgZToKICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgQnVn
emlsbGFFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBlLmlzX2ludmFsaWRfYnVnX2lkKCk6
CisgICAgICAgICAgICAgICAgICAgIGxvZygiSW52YWxpZCBidWcgbnVtYmVyLiIpCisgICAgICAg
ICAgICAgICAgaWYgZS5kb2VzX2J1Z19leGlzdCgpOgorICAgICAgICAgICAgICAgICAgICBsb2co
IlRoZSBidWcgZG9lcyBub3QgZXhpc3QuIikKKyAgICAgICAgICAgICAgICBlbGlmIGUuaXNfbm90
X3Blcm1pdHRlZF90b192aWV3X2J1ZygpOgorICAgICAgICAgICAgICAgICAgICBsb2coIllvdSBh
cmUgbm90IGF1dGhvcml6ZWQgdG8gdmlldyB0aGlzIGJ1Zy4iKQorICAgICAgICAgICAgICAgIHN5
cy5leGl0KDEpCiAKICAgICAgICAgc2VsZi5jb21tYW5kX2NvbXBsZXRlZCgpCiAgICAgICAgIHJl
dHVybiByZXN1bHQKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3Qv
c2hlcmlmZi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvYm90L3NoZXJpZmYucHkJKHJldmlzaW9uIDY3MzA5KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2JvdC9zaGVyaWZmLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNo
YW5nZWxvZyBpbXBvcnQgdmlld19zb3VyY2VfdXJsCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQu
YnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1
Z3ppbGxhIGltcG9ydCBCdWd6aWxsYSwgQnVnemlsbGFFcnJvciwgcGFyc2VfYnVnX2lkCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBsb2cKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBm
cm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgam9pbl93aXRoX3NlcGFyYXRvcnMKQEAg
LTY0LDYgKzY0LDEyIEBAIGNsYXNzIFNoZXJpZmYob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNl
IFNjcmlwdEVycm9yKG1lc3NhZ2U9IlRoZSByb2xsb3V0IHJlYXNvbiBtYXkgbm90IGJlZ2luICIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIC0gKFwiJXNcIikuIiAlIHJvbGxv
dXRfcmVhc29uKQogCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Rvb2wuYnVncy5m
ZXRjaF9idWcoc2VsZi5fdG9vbC5jaGVja291dCgpLmNvbW1pdF9pbmZvX2Zvcl9yZXZpc2lvbihz
dm5fcmV2aXNpb24pKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAg
ICAgIGlmIChlLmlzX25vdF9wZXJtaXR0ZWRfdG9fdmlld19idWcoKSk6CisgICAgICAgICAgICAg
ICAgcmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0iU2hlcmlmZkJvdCBpcyBub3QgYXV0aG9yaXpl
ZCB0byByb2xsb3V0IGEgc2VjdXJpdHkgYnVnLiIpCisKICAgICAgICAgb3V0cHV0ID0gc2VsZi5f
c2hlcmlmZmJvdC5ydW5fd2Via2l0X3BhdGNoKFsKICAgICAgICAgICAgICJjcmVhdGUtcm9sbG91
dCIsCiAgICAgICAgICAgICAiLS1mb3JjZS1jbGVhbiIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67340</attachid>
            <date>2010-09-12 12:03:50 -0700</date>
            <delta_ts>2010-09-14 22:36:24 -0700</delta_ts>
            <desc>Patch with unit tests</desc>
            <filename>Bug39136.patch</filename>
            <type>text/plain</type>
            <size>22287</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY3MzMwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMDktMTIgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIHNoZXJpZmZib3QgY2FuJ3Qgcm9sbCBvdXQgc2VjdXJpdHkgcGF0Y2hlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxMzYKKworICAgICAg
ICBNYWtlIFNoZXJpZmZCb3QgZGV0ZXJtaW5lIGlmIGl0J3MgYXV0aG9yaXplZCB0byB2aWV3IGEg
YnVnCisgICAgICAgIHdob3NlIGNoYW5nZSBpdCB3YW50cyB0byByb2xsb3V0IGJlZm9yZSBpdCB0
cmllcyB0byByb2xsb3V0CisgICAgICAgIHRoZSBjaGFuZ2UuCisKKyAgICAgICAgTW9yZW92ZXIs
IG1ha2UgYm90aCB3ZWJraXQtcGF0Y2ggYW5kIFNoZXJpZmZib3QgcHJvdmlkZSBodW1hbi0KKyAg
ICAgICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGV5IGFyZSBub3QgYXV0aG9yaXpl
ZCB0byB2aWV3CisgICAgICAgIGEgYnVnIGFuZCB3aGVuIGEgYnVnIG51bWJlciBpcyBpbnZhbGlk
LgorCisgICAgICAgIEN1cnJlbnRseSwgU2hlcmlmZmJvdCBkb2VzIG5vdCBwYXJzZSBCdWd6aWxs
YSBidWdzIGZvcgorICAgICAgICA8YnVnIGVycm9yPSIuLi4iPiwgd2hpY2ggaW5kaWNhdGVzIGFu
IGVycm9yIHdoZW4gcmV0cmlldmluZworICAgICAgICBhIGJ1Zy4gSW4gcGFydGljdWxhciwgZXJy
b3I9Ik5vdFBlcm1pdHRlZCIgaWYgYSBwZXJzb24gKG9yIGJvdCkKKyAgICAgICAgaXMgbm90IGF1
dGhvcml6ZWQgdG8gdmlldyBhIGJ1Zy4gRm9yIHN1Y2ggZXJyb3I9Ik5vdFBlcm1pdHRlZCIgYnVn
cywKKyAgICAgICAgU2hlcmlmZmJvdCByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gcGFyc2luZyB0
aGUgYnVnIHJlcG9ydCBhbmQKKyAgICAgICAgdGhpcyBleGNlcHRpb24gZG9lcyBub3QgZXhwbGlj
aXRseSBpbmRpY2F0ZSBTaGVyaWZmYm90J3MgbGFjaworICAgICAgICBvZiBhdXRob3JpemF0aW9u
LiBJbnN0ZWFkLCBTaGVyaWZmYm90IHNob3VsZCBleHBsaWNpdGx5IGNoZWNrCisgICAgICAgIGZv
ciB0aGUgcHJlc2VuY2UgPGJ1ZyBlcnJvcj0iLi4uIj4gYmVmb3JlIG9wZXJhdGluZyBvbiBhIGJ1
ZworICAgICAgICBhbmQgZXJyb3Igd2l0aCBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaWYgaXQn
cyBub3QgcGVybWl0dGVkCisgICAgICAgIHRvIHZpZXcgaXQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHk6IEFkZGVkIEJ1Z3ppbGxhRXJyb3IgY2xh
c3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhX3VuaXR0
ZXN0LnB5OgorICAgICAgICAgIC0gQWRkZWQgdW5pdCB0ZXN0IHRlc3RfYnVnX3BhcnNpbmdfZm9y
X2J1Z3ppbGxhX25vdF9wZXJtaXR0ZWRfZXJyb3IoKS4KKyAgICAgICAgICAtIEFkZGVkIHVuaXQg
dGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9ub3RfZm91bmRfZXJyb3IoKS4KKyAg
ICAgICAgICAtIEFkZGVkIHVuaXQgdGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9p
bnZhbGlkX2J1Z19pZF9lcnJvcigpLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9i
b3Qvc2hlcmlmZi5weTogTW9kaWZpZWQgdG8gY2F0Y2ggQnVnemlsbGFFcnJvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWQucHk6IERpdHRvLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHk6IERpdHRvLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWQucHk6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jbG9zZWJ1Zy5weTogRGl0
dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL29ic29sZXRlcGF0Y2hl
cy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3ByZXBh
cmVjaGFuZ2Vsb2cucHk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9z
dGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld2VyLnB5OiBEaXR0by4KKwogMjAxMC0wOS0x
MSAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC9idWd6aWxsYS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHkJKHJldmlzaW9uIDY3MzMwKQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCwyMiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNl
ciBpbXBvcnQgCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5tZWNoYW5p
emUgaW1wb3J0IEJyb3dzZXIKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3Vw
IGltcG9ydCBCZWF1dGlmdWxTb3VwLCBTb3VwU3RyYWluZXIKIAorY2xhc3MgQnVnemlsbGFFcnJv
cihFeGNlcHRpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9yX21lc3NhZ2U9Tm9u
ZSk6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlcnJvcl9tZXNzYWdlKQorICAg
ICAgICBzZWxmLmVycm9yX21lc3NhZ2UgPSBlcnJvcl9tZXNzYWdlCisKKyAgICAjIFRoZSBmb2xs
b3dpbmcgZXJyb3IgbWVzc2FnZXMgd2VyZSBleHRyYWN0ZWQgZnJvbSA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvYnVnemlsbGEuZHRkPiBhcyBvZiAwOS8xMi8yMDEwLgorCisgICAgZGVmIGlzX2lu
dmFsaWRfYnVnX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcl9tZXNzYWdlID09
ICJJbnZhbGlkQnVnSWQiCisKKyAgICBkZWYgaXNfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5lcnJvcl9tZXNzYWdlID09ICJOb3RGb3VuZCIKKworICAgIGRlZiBpc19ub3Rf
cGVybWl0dGVkX3RvX3ZpZXdfYnVnKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcl9t
ZXNzYWdlID09ICJOb3RQZXJtaXR0ZWQiCiAKIGRlZiBwYXJzZV9idWdfaWQobWVzc2FnZSk6CiAg
ICAgaWYgbm90IG1lc3NhZ2U6CkBAIC00OTcsNiArNTEzLDkgQEAgY2xhc3MgQnVnemlsbGEob2Jq
ZWN0KToKIAogICAgIGRlZiBfcGFyc2VfYnVnX3BhZ2Uoc2VsZiwgcGFnZSk6CiAgICAgICAgIHNv
dXAgPSBCZWF1dGlmdWxTb3VwKHBhZ2UpCisgICAgICAgIGJ1Z19lbGVtZW50ID0gc291cC5maW5k
KCJidWciKQorICAgICAgICBpZiBidWdfZWxlbWVudC5oYXNfa2V5KCJlcnJvciIpOgorICAgICAg
ICAgICAgcmFpc2UgQnVnemlsbGFFcnJvcihidWdfZWxlbWVudFsiZXJyb3IiXSkKICAgICAgICAg
YnVnID0ge30KICAgICAgICAgYnVnWyJpZCJdID0gaW50KHNvdXAuZmluZCgiYnVnX2lkIikuc3Ry
aW5nKQogICAgICAgICBidWdbInRpdGxlIl0gPSBzZWxmLl9zdHJpbmdfY29udGVudHMoc291cC5m
aW5kKCJzaG9ydF9kZXNjIikpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9uZXQvYnVnemlsbGFfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biA2NzMzMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWd6
aWxsYV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbXBvcnQg
dW5pdHRlc3QKIGltcG9ydCBkYXRldGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcu
Y29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdCwgUmV2aWV3ZXIsIENvbW1pdHRlcgotZnJv
bSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYSwgQnVnemlsbGFR
dWVyaWVzLCBwYXJzZV9idWdfaWQsIENvbW1pdHRlclZhbGlkYXRvciwgQnVnCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhLCBCdWd6aWxsYUVycm9yLCBC
dWd6aWxsYVF1ZXJpZXMsIHBhcnNlX2J1Z19pZCwgQ29tbWl0dGVyVmFsaWRhdG9yLCBCdWcKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0
dXJlCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5LkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKQEAgLTE0
MSw2ICsxNDEsNTcgQEAgY2xhc3MgQnVnemlsbGFUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgcGFyc2VfYnVnX2lkKCJodHRwOi8vd3d3Lndl
YmtpdC5vcmcvYi8xMjM0NSIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBwYXJz
ZV9idWdfaWQoImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2N0eXBlPXhtbCZp
ZD0xMjM0NSIpKQogCisgICAgX2V4YW1wbGVfdW5hdXRob3JpemVkX2J1ZyA9ICIiIgorICAgIDw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiID8+Cisg
ICAgPCFET0NUWVBFIGJ1Z3ppbGxhIFNZU1RFTSAiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYnVn
emlsbGEuZHRkIj4KKworICAgIDxidWd6aWxsYSB2ZXJzaW9uPSIzLjIuMyIKKyAgICAgICAgICAg
ICAgdXJsYmFzZT0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIgorICAgICAgICAgICAgICBtYWlu
dGFpbmVyPSJhZG1pbkB3ZWJraXQub3JnIgorICAgICAgICAgICAgICBleHBvcnRlcj0idW5hdXRo
b3JpemVkX3BlcnNvbkBleGFtcGxlLmNvbSIKKyAgICA+CisKKyAgICAgICAgPGJ1ZyBlcnJvcj0i
Tm90UGVybWl0dGVkIj4KKyAgICAgICAgICA8YnVnX2lkPjEyMzQ1PC9idWdfaWQ+CisgICAgICAg
IDwvYnVnPgorCisgICAgPC9idWd6aWxsYT4KKyAgICAiIiIKKworICAgIF9leGFtcGxlX25vdF9m
b3VuZF9idWcgPSAiIiIKKyAgICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIg
c3RhbmRhbG9uZT0ieWVzIiA/PgorICAgIDwhRE9DVFlQRSBidWd6aWxsYSBTWVNURU0gImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL2J1Z3ppbGxhLmR0ZCI+CisKKyAgICA8YnVnemlsbGEgdmVyc2lv
bj0iMy4yLjMiCisgICAgICAgICAgICAgIHVybGJhc2U9Imh0dHBzOi8vYnVncy53ZWJraXQub3Jn
LyIKKyAgICAgICAgICAgICAgbWFpbnRhaW5lcj0iYWRtaW5Ad2Via2l0Lm9yZyIKKyAgICAgICAg
ICAgICAgZXhwb3J0ZXI9InVuYXV0aG9yaXplZF9wZXJzb25AZXhhbXBsZS5jb20iCisgICAgPgor
CisgICAgICAgIDxidWcgZXJyb3I9Ik5vdEZvdW5kIj4KKyAgICAgICAgICA8YnVnX2lkPjEyMzQ1
PC9idWdfaWQ+CisgICAgICAgIDwvYnVnPgorCisgICAgPC9idWd6aWxsYT4KKyAgICAiIiIKKwor
ICAgIF9leGFtcGxlX2ludmFsaWRfYnVnX2lkX2J1ZyA9ICIiIgorICAgIDw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiID8+CisgICAgPCFET0NUWVBF
IGJ1Z3ppbGxhIFNZU1RFTSAiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYnVnemlsbGEuZHRkIj4K
KworICAgIDxidWd6aWxsYSB2ZXJzaW9uPSIzLjIuMyIKKyAgICAgICAgICAgICAgdXJsYmFzZT0i
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIgorICAgICAgICAgICAgICBtYWludGFpbmVyPSJhZG1p
bkB3ZWJraXQub3JnIgorICAgICAgICAgICAgICBleHBvcnRlcj0idW5hdXRob3JpemVkX3BlcnNv
bkBleGFtcGxlLmNvbSIKKyAgICA+CisKKyAgICAgICAgPGJ1ZyBlcnJvcj0iSW52YWxpZEJ1Z0lk
Ij4KKyAgICAgICAgICA8YnVnX2lkPkE8L2J1Z19pZD4KKyAgICAgICAgPC9idWc+CisKKyAgICA8
L2J1Z3ppbGxhPgorICAgICIiIgorCiAgICAgX2V4YW1wbGVfYnVnID0gIiIiCiA8P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIiA/PgogPCFET0NUWVBF
IGJ1Z3ppbGxhIFNZU1RFTSAiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYnVnemlsbGEuZHRkIj4K
QEAgLTIyNyw2ICsyNzgsMzMgQEAgWkVacGJtbHphRXh2WVdSWGFYUm9VbVZoYzI5dU9uSmxZWE52
YmwwNwogICAgICAgICB9XSwKICAgICB9CiAKKyAgICBkZWYgdGVzdF9idWdfcGFyc2luZ19mb3Jf
YnVnemlsbGFfbm90X3Blcm1pdHRlZF9lcnJvcihzZWxmKToKKyAgICAgICAgZGlkUGFzc1Rlc3Qg
PSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBCdWd6aWxsYSgpLl9wYXJzZV9idWdf
cGFnZShzZWxmLl9leGFtcGxlX3VuYXV0aG9yaXplZF9idWcpCisgICAgICAgIGV4Y2VwdCBCdWd6
aWxsYUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuaXNfbm90X3Blcm1p
dHRlZF90b192aWV3X2J1ZygpKQorICAgICAgICAgICAgZGlkUGFzc1Rlc3QgPSBUcnVlCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWRQYXNzVGVzdCwgIkZhaWxlZCB0byByYWlzZSBleGNlcHRp
b24uIikKKworICAgIGRlZiB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9ub3RfZm91bmRf
ZXJyb3Ioc2VsZik6CisgICAgICAgIGRpZFBhc3NUZXN0ID0gRmFsc2UKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgQnVnemlsbGEoKS5fcGFyc2VfYnVnX3BhZ2Uoc2VsZi5fZXhhbXBsZV9ub3Rf
Zm91bmRfYnVnKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShlLmlzX25vdF9mb3VuZCgpKQorICAgICAgICAgICAgZGlkUGFzc1Rl
c3QgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWRQYXNzVGVzdCwgIkZhaWxlZCB0
byByYWlzZSBleGNlcHRpb24uIikKKworICAgIGRlZiB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6
aWxsYV9pbnZhbGlkX2J1Z19pZF9lcnJvcihzZWxmKToKKyAgICAgICAgZGlkUGFzc1Rlc3QgPSBG
YWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBCdWd6aWxsYSgpLl9wYXJzZV9idWdfcGFn
ZShzZWxmLl9leGFtcGxlX2ludmFsaWRfYnVnX2lkX2J1ZykKKyAgICAgICAgZXhjZXB0IEJ1Z3pp
bGxhRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5pc19pbnZhbGlkX2J1
Z19pZCgpKQorICAgICAgICAgICAgZGlkUGFzc1Rlc3QgPSBUcnVlCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShkaWRQYXNzVGVzdCwgIkZhaWxlZCB0byByYWlzZSBleGNlcHRpb24uIikKKwogICAg
ICMgRklYTUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gYSBjZW50cmFsIGxvY2F0aW9uIGFuZCBiZSBz
aGFyZWQgYnkgbW9yZSB1bml0IHRlc3RzLgogICAgIGRlZiBfYXNzZXJ0X2RpY3Rpb25hcmllc19l
cXVhbChzZWxmLCBhY3R1YWwsIGV4cGVjdGVkKToKICAgICAgICAgIyBNYWtlIHN1cmUgd2UgYXJl
bid0IHBhcnNpbmcgbW9yZSBvciBsZXNzIHRoYW4gd2UgZXhwZWN0CkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L3NoZXJpZmYucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9zaGVyaWZmLnB5CShyZXZpc2lvbiA2
NzMzMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3Qvc2hlcmlmZi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0IHZpZXdfc291cmNlX3Vy
bAotZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBwYXJzZV9idWdfaWQK
K2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEsIEJ1Z3pp
bGxhRXJyb3IsIHBhcnNlX2J1Z19pZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJl
Y2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9nCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1w
b3J0IGpvaW5fd2l0aF9zZXBhcmF0b3JzCkBAIC02NCw2ICs2NCwxNCBAQCBjbGFzcyBTaGVyaWZm
KG9iamVjdCk6CiAgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSJUaGUgcm9s
bG91dCByZWFzb24gbWF5IG5vdCBiZWdpbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAid2l0aCAtIChcIiVzXCIpLiIgJSByb2xsb3V0X3JlYXNvbikKIAorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfYnVnKHNlbGYuX3Rvb2wuY2hlY2tvdXQo
KS5jb21taXRfaW5mb19mb3JfcmV2aXNpb24oc3ZuX3JldmlzaW9uKSkKKyAgICAgICAgZXhjZXB0
IEJ1Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICBpZiAoZS5pc19pbnZhbGlkX2J1Z19pZCgp
IG9yIGUuaXNfbm90X2ZvdW5kKCkpOgorICAgICAgICAgICAgICAgIFNjcmlwdEVycm9yKG1lc3Nh
Z2U9IkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgYnVnIGZvciByJXMuIiAl
IHN2bl9yZXZpc2lvbikKKyAgICAgICAgICAgIGVsaWYgKGUuaXNfbm90X3Blcm1pdHRlZF90b192
aWV3X2J1ZygpKToKKyAgICAgICAgICAgICAgICBTY3JpcHRFcnJvcihtZXNzYWdlPSJTaGVyaWZm
Qm90IGlzIG5vdCBhdXRob3JpemVkIHRvIHJvbGxvdXQgYSBzZWN1cml0eSBidWcuIikKKwogICAg
ICAgICBvdXRwdXQgPSBzZWxmLl9zaGVyaWZmYm90LnJ1bl93ZWJraXRfcGF0Y2goWwogICAgICAg
ICAgICAgImNyZWF0ZS1yb2xsb3V0IiwKICAgICAgICAgICAgICItLWZvcmNlLWNsZWFuIiwKSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvZG93bmxvYWQucHkJKHJldmlzaW9uIDY3MzMwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBAIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBpbXBvcnQgd2Via2l0
cHkudG9vbC5zdGVwcyBhcyBzdGVwcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5j
aGFuZ2Vsb2cgaW1wb3J0IENoYW5nZUxvZywgdmlld19zb3VyY2VfdXJsCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhRXJyb3IKIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5
LnRvb2wuY29tbWFuZHMuYWJzdHJhY3RzZXF1ZW5jZWRjb21tYW5kIGltcG9ydCBBYnN0cmFjdFNl
cXVlbmNlZENvbW1hbmQKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5zdGVwc2VxdWVuY2Ug
aW1wb3J0IFN0ZXBTZXF1ZW5jZQpAQCAtMTU3LDE2ICsxNTgsMjUgQEAgY2xhc3MgQWJzdHJhY3RQ
YXRjaFNlcXVlbmNpbmdDb21tYW5kKEFicwogCiBjbGFzcyBQcm9jZXNzQXR0YWNobWVudHNNaXhp
bihvYmplY3QpOgogICAgIGRlZiBfZmV0Y2hfbGlzdF9vZl9wYXRjaGVzX3RvX3Byb2Nlc3Moc2Vs
Ziwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHJldHVybiBtYXAobGFtYmRhIHBhdGNo
X2lkOiB0b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChwYXRjaF9pZCksIGFyZ3MpCisgICAgICAg
IGFsbF9wYXRjaGVzID0gW10KKyAgICAgICAgZm9yIHBhdGNoX2lkIGluIGFyZ3M6CisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgYWxsX3BhdGNoZXMuYXBwZW5kKHRvb2wuYnVncy5m
ZXRjaF9hdHRhY2htZW50KHBhdGNoX2lkKSkKKyAgICAgICAgICAgIGV4Y2VwdCBCdWd6aWxsYUVy
cm9yLCBlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgSWdub3JlIHRoaXMgcGF0Y2guCisg
ICAgICAgIHJldHVybiBhbGxfcGF0Y2hlcwogCiAKIGNsYXNzIFByb2Nlc3NCdWdzTWl4aW4ob2Jq
ZWN0KToKICAgICBkZWYgX2ZldGNoX2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICBhbGxfcGF0Y2hlcyA9IFtdCiAgICAgICAgIGZv
ciBidWdfaWQgaW4gYXJnczoKLSAgICAgICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hf
YnVnKGJ1Z19pZCkucmV2aWV3ZWRfcGF0Y2hlcygpCi0gICAgICAgICAgICBsb2coIiVzIGZvdW5k
IG9uIGJ1ZyAlcy4iICUgKHBsdXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4ocGF0Y2hlcykp
LCBidWdfaWQpKQotICAgICAgICAgICAgYWxsX3BhdGNoZXMgKz0gcGF0Y2hlcworICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1
Z19pZCkucmV2aWV3ZWRfcGF0Y2hlcygpCisgICAgICAgICAgICAgICAgbG9nKCIlcyBmb3VuZCBv
biBidWcgJXMuIiAlIChwbHVyYWxpemUoInJldmlld2VkIHBhdGNoIiwgbGVuKHBhdGNoZXMpKSwg
YnVnX2lkKSkKKyAgICAgICAgICAgICAgICBhbGxfcGF0Y2hlcyArPSBwYXRjaGVzCisgICAgICAg
ICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgICAgICBjb250aW51ZSAj
IElnbm9yZSB0aGUgcGF0Y2hlcyBmb3IgdGhpcyBidWcuCiAgICAgICAgIHJldHVybiBhbGxfcGF0
Y2hlcwogCiAKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9xdWV1ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3F1ZXVlcy5weQkocmV2aXNpb24gNjczMzApCisrKyBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIG9wdHBh
cnNlIGltcG9ydCBtYWtlX29wdGlvbgogZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAot
ZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBDb21taXR0ZXJWYWxpZGF0
b3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGFFcnJv
ciwgQ29tbWl0dGVyVmFsaWRhdG9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuc3RhdHVzc2Vy
dmVyIGltcG9ydCBTdGF0dXNTZXJ2ZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVw
cmVjYXRlZF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCkBAIC0xNzgsNyArMTc4LDE1IEBAIGNs
YXNzIENvbW1pdFF1ZXVlKEFic3RyYWN0UGF0Y2hRdWV1ZSwgU3QKICAgICBkZWYgX3ZhbGlkYXRl
X3BhdGNoZXNfaW5fY29tbWl0X3F1ZXVlKHNlbGYpOgogICAgICAgICAjIE5vdCB1c2luZyBCdWd6
aWxsYVF1ZXJpZXMuZmV0Y2hfcGF0Y2hlc19mcm9tX2NvbW1pdF9xdWV1ZSgpIHNvIHdlIGNhbiBy
ZWplY3QgcGF0Y2hlcyB3aXRoIGludmFsaWQgY29tbWl0dGVycy9yZXZpZXdlcnMuCiAgICAgICAg
IGJ1Z19pZHMgPSBzZWxmLnRvb2wuYnVncy5xdWVyaWVzLmZldGNoX2J1Z19pZHNfZnJvbV9jb21t
aXRfcXVldWUoKQotICAgICAgICBhbGxfcGF0Y2hlcyA9IHN1bShbc2VsZi50b29sLmJ1Z3MuZmV0
Y2hfYnVnKGJ1Z19pZCkuY29tbWl0X3F1ZXVlZF9wYXRjaGVzKGluY2x1ZGVfaW52YWxpZD1UcnVl
KSBmb3IgYnVnX2lkIGluIGJ1Z19pZHNdLCBbXSkKKyAgICAgICAgYWxsX3BhdGNoZXMgPSBbXQor
ICAgICAgICBmb3IgYnVnX2lkIGluIGJ1Z19pZHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgYWxsX3BhdGNoZXMgKz0gc2VsZi50b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCku
Y29tbWl0X3F1ZXVlZF9wYXRjaGVzKGluY2x1ZGVfaW52YWxpZD1UcnVlKQorICAgICAgICAgICAg
ZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgIyBUaGlzIG1heSBvY2N1
ciBpZiB0aGUgYnVnIGJlY29tZXMgYSBzZWN1cml0eSBidWcgYmV0d2VlbiB0aGUgdGltZQorICAg
ICAgICAgICAgICAgICMgd2UgZmV0Y2hlZCBpdHMgSUQgZnJvbSB0aGUgY29tbWl0IHF1ZXVlIGFu
ZCBub3cuIFdlIGlnbm9yZSB0aGUKKyAgICAgICAgICAgICAgICAjIHBhdGNoZXMgZm9yIHRoaXMg
YnVnLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHJldHVybiBzZWxmLmNvbW1p
dHRlcl92YWxpZGF0b3IucGF0Y2hlc19hZnRlcl9yZWplY3RpbmdfaW52YWxpZF9jb21taXRlcnNf
YW5kX3Jldmlld2VycyhhbGxfcGF0Y2hlcykKIAogICAgIGRlZiBfcGF0Y2hfY21wKHNlbGYsIGEs
IGIpOgpAQCAtMzc3LDcgKzM4NSwxMyBAQCBjbGFzcyBBYnN0cmFjdFJldmlld1F1ZXVlKEFic3Ry
YWN0UGF0Y2hRCiAgICAgZGVmIG5leHRfd29ya19pdGVtKHNlbGYpOgogICAgICAgICBwYXRjaF9p
ZCA9IHNlbGYuX3BhdGNoZXMubmV4dCgpCiAgICAgICAgIGlmIHBhdGNoX2lkOgotICAgICAgICAg
ICAgcmV0dXJuIHNlbGYudG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQocGF0Y2hfaWQpCisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9vbC5idWdzLmZldGNo
X2F0dGFjaG1lbnQocGF0Y2hfaWQpCisgICAgICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwg
ZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IG9jY3VyIGlmIHRoZSBidWcgd2l0aCBhdHRh
Y2htZW50IElEIHBhdGNoX2lkIGJlY29tZXMgYSBzZWN1cml0eQorICAgICAgICAgICAgICAgICMg
YnVnIGJldHdlZW4gdGhlIHRpbWUgd2UgZmV0Y2hlZCBhbGwgYXR0YWNobWVudCBJRHMgZnJvbSB0
aGUgcmV2aWV3IHF1ZXVlCisgICAgICAgICAgICAgICAgIyBhbmQgbm93LiBTbywgd2UgaWdub3Jl
IHRoaXMgYXR0YWNobWVudC4KKyAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgc2hvdWxk
X3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgogICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWQucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3VwbG9hZC5w
eQkocmV2aXNpb24gNjczMzApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGZyb20g
b3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBpbXBvcnQgd2Via2l0cHkudG9vbC5zdGVwcyBh
cyBzdGVwcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0dGVycyBpbXBvcnQg
Q29tbWl0dGVyTGlzdAotZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBw
YXJzZV9idWdfaWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVn
emlsbGFFcnJvciwgcGFyc2VfYnVnX2lkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNl
ciBpbXBvcnQgVXNlcgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sK
IGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5hYnN0cmFjdHNlcXVlbmNlZGNvbW1hbmQgaW1w
b3J0IEFic3RyYWN0U2VxdWVuY2VkQ29tbWFuZApAQCAtODIsNyArODIsMTMgQEAgY2xhc3MgQ2xl
YW5QZW5kaW5nQ29tbWl0KEFic3RyYWN0RGVjbGFyYQogICAgIGRlZiBleGVjdXRlKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICBjb21taXR0ZXJzID0gQ29tbWl0dGVyTGlzdCgp
CiAgICAgICAgIGZvciBidWdfaWQgaW4gdG9vbC5idWdzLnF1ZXJpZXMuZmV0Y2hfYnVnX2lkc19m
cm9tX3BlbmRpbmdfY29tbWl0X2xpc3QoKToKLSAgICAgICAgICAgIGJ1ZyA9IHNlbGYudG9vbC5i
dWdzLmZldGNoX2J1ZyhidWdfaWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
YnVnID0gc2VsZi50b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkKKyAgICAgICAgICAgIGV4Y2Vw
dCBCdWd6aWxsYUVycm9yLCBlOgorICAgICAgICAgICAgICAgICMgVGhpcyBtYXkgb2NjdXIgaWYg
dGhlIGJ1ZyBiZWNvbWVzIGEgc2VjdXJpdHkgYnVnIGJldHdlZW4gdGhlIHRpbWUKKyAgICAgICAg
ICAgICAgICAjIHdlIGZldGNoZWQgaXRzIElEIGZyb20gdGhlIHBlbmRpbmcgY29tbWl0IGxpc3Qg
YW5kIG5vdy4gV2UgaWdub3JlCisgICAgICAgICAgICAgICAgIyB0aGlzIGJ1Zy4KKyAgICAgICAg
ICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcGF0Y2hlcyA9IGJ1Zy5wYXRjaGVzKGluY2x1
ZGVfb2Jzb2xldGU9VHJ1ZSkKICAgICAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgogICAg
ICAgICAgICAgICAgIGZsYWdzX3RvX2NsZWFyID0gc2VsZi5fZmxhZ3NfdG9fY2xlYXJfb25fcGF0
Y2gocGF0Y2gpCkBAIC0xMDQsNyArMTEwLDE2IEBAIGNsYXNzIEFzc2lnblRvQ29tbWl0dGVyKEFi
c3RyYWN0RGVjbGFyYXQKIAogICAgIGRlZiBfYXNzaWduX2J1Z190b19sYXN0X3BhdGNoX2F0dGFj
aGVyKHNlbGYsIGJ1Z19pZCk6CiAgICAgICAgIGNvbW1pdHRlcnMgPSBDb21taXR0ZXJMaXN0KCkK
LSAgICAgICAgYnVnID0gc2VsZi50b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgYnVnID0gc2VsZi50b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkK
KyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICBpZiAoZS5pc19p
bnZhbGlkX2J1Z19pZCgpKToKKyAgICAgICAgICAgICAgICBsb2coIkJ1ZyAlcyBpcyBpbnZhbGlk
LiIgJSBidWdfaWQpCisgICAgICAgICAgICBlbGlmIChlLmlzX25vdF9mb3VuZCgpKToKKyAgICAg
ICAgICAgICAgICBsb2coIkJ1ZyAlcyBkb2VzIG5vdCBleGlzdC4iICUgYnVnX2lkKQorICAgICAg
ICAgICAgZWxpZiAoZS5pc19ub3RfcGVybWl0dGVkX3RvX3ZpZXdfYnVnKCkpOgorICAgICAgICAg
ICAgICAgIGxvZygiWW91J3JlIG5vdCBhdXRob3JpemVkIHRvIG1vZGlmeSBidWcgJXMuIiAlIGJ1
Z19pZCkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBub3QgYnVnLmlzX3VuYXNzaWdu
ZWQoKToKICAgICAgICAgICAgIGFzc2lnbmVkX3RvX2VtYWlsID0gYnVnLmFzc2lnbmVkX3RvX2Vt
YWlsKCkKICAgICAgICAgICAgIGxvZygiQnVnICVzIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gJXMg
KCVzKS4iICUgKGJ1Z19pZCwgYXNzaWduZWRfdG9fZW1haWwsIGNvbW1pdHRlcnMuY29tbWl0dGVy
X2J5X2VtYWlsKGFzc2lnbmVkX3RvX2VtYWlsKSkpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvY2xvc2VidWcucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2Nsb3NlYnVnLnB5CShyZXZpc2lvbiA2NzMz
MCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jbG9zZWJ1Zy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiBmcm9tIHdlYmtpdHB5LnRvb2wu
c3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKIGZyb20gd2Via2l0cHkudG9v
bC5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQu
YnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhRXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZwogCiAKQEAgLTQzLDcgKzQ0LDE2IEBAIGNs
YXNzIENsb3NlQnVnKEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAg
IyBDaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHI/IG9yIHIrIHBhdGNoZXMgb24gdGhl
IGJ1ZyBiZWZvcmUgY2xvc2luZy4KICAgICAgICAgIyBBc3N1bWUgdGhhdCByLSBwYXRjaGVzIGFy
ZSBqdXN0IHByZXZpb3VzIHBhdGNoZXMgc29tZW9uZSBmb3Jnb3QgdG8gb2Jzb2xldGUuCi0gICAg
ICAgIHBhdGNoZXMgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfYnVnKHN0YXRlWyJwYXRjaCJdLmJ1
Z19pZCgpKS5wYXRjaGVzKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0Y2hlcyA9IHNl
bGYuX3Rvb2wuYnVncy5mZXRjaF9idWcoc3RhdGVbInBhdGNoIl0uYnVnX2lkKCkpLnBhdGNoZXMo
KQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgIGlmIChlLmlz
X2ludmFsaWRfYnVnX2lkKCkpOgorICAgICAgICAgICAgICAgIGxvZygiQnVnICVzIGlzIGludmFs
aWQuIiAlIHN0YXRlWyJwYXRjaCJdLmJ1Z19pZCgpKQorICAgICAgICAgICAgZWxpZiAoZS5pc19u
b3RfZm91bmQoKSk6CisgICAgICAgICAgICAgICAgbG9nKCJCdWcgJXMgZG9lcyBub3QgZXhpc3Qu
IiAlIHN0YXRlWyJwYXRjaCJdLmJ1Z19pZCgpKQorICAgICAgICAgICAgZWxpZiAoZS5pc19ub3Rf
cGVybWl0dGVkX3RvX3ZpZXdfYnVnKCkpOgorICAgICAgICAgICAgICAgIGxvZygiWW91J3JlIG5v
dCBhdXRob3JpemVkIHRvIG1vZGlmeSBidWcgJXMuIiAlIHN0YXRlWyJwYXRjaCJdLmJ1Z19pZCgp
KQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgogICAg
ICAgICAgICAgaWYgcGF0Y2gucmV2aWV3KCkgPT0gIj8iIG9yIHBhdGNoLnJldmlldygpID09ICIr
IjoKICAgICAgICAgICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50
ICVzIGhhcyByZXZpZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxh
bmQgZnJvbSB0aGlzIGJ1Zy4iICUgKHBhdGNoLmJ1Z19pZCgpLCBwYXRjaC5pZCgpLCBwYXRjaC5y
ZXZpZXcoKSkpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMv
b2Jzb2xldGVwYXRjaGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9zdGVwcy9vYnNvbGV0ZXBhdGNoZXMucHkJKHJldmlzaW9uIDY3MzMwKQorKysg
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL29ic29sZXRlcGF0Y2hlcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogZnJvbSB3ZWJraXRweS50b29sLmdy
YW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQogZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLmFic3RyYWN0
c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMub3B0aW9u
cyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9y
dCBCdWd6aWxsYUVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9s
b2dnaW5nIGltcG9ydCBsb2cKIAogCkBAIC00Myw3ICs0NCwxNiBAQCBjbGFzcyBPYnNvbGV0ZVBh
dGNoZXMoQWJzdHJhY3RTdGVwKToKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMub2Jzb2xl
dGVfcGF0Y2hlczoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBidWdfaWQgPSBzdGF0ZVsi
YnVnX2lkIl0KLSAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9idWcoYnVn
X2lkKS5wYXRjaGVzKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0Y2hlcyA9IHNlbGYu
X3Rvb2wuYnVncy5mZXRjaF9idWcoYnVnX2lkKS5wYXRjaGVzKCkKKyAgICAgICAgZXhjZXB0IEJ1
Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICBpZiAoZS5pc19pbnZhbGlkX2J1Z19pZCgpKToK
KyAgICAgICAgICAgICAgICBsb2coIkJ1ZyAlcyBpcyBpbnZhbGlkLiIgJSBidWdfaWQpCisgICAg
ICAgICAgICBlbGlmIChlLmlzX25vdF9mb3VuZCgpKToKKyAgICAgICAgICAgICAgICBsb2coIkJ1
ZyAlcyBkb2VzIG5vdCBleGlzdC4iICUgYnVnX2lkKQorICAgICAgICAgICAgZWxpZiAoZS5pc19u
b3RfcGVybWl0dGVkX3RvX3ZpZXdfYnVnKCkpOgorICAgICAgICAgICAgICAgIGxvZygiWW91J3Jl
IG5vdCBhdXRob3JpemVkIHRvIG1vZGlmeSBidWcgJXMuIiAlIGJ1Z19pZCkKKyAgICAgICAgICAg
IHJldHVybgogICAgICAgICBpZiBub3QgcGF0Y2hlczoKICAgICAgICAgICAgIHJldHVybgogICAg
ICAgICBsb2coIk9ic29sZXRpbmcgJXMgb24gYnVnICVzIiAlIChwbHVyYWxpemUoIm9sZCBwYXRj
aCIsIGxlbihwYXRjaGVzKSksIGJ1Z19pZCkpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZy5weQko
cmV2aXNpb24gNjczMzApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3Rl
cHMvcHJlcGFyZWNoYW5nZWxvZy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
aW1wb3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoYW5nZWxvZyBpbXBv
cnQgQ2hhbmdlTG9nCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1
Z3ppbGxhRXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0
IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9y
dCBBYnN0cmFjdFN0ZXAKIGZyb20gd2Via2l0cHkudG9vbC5zdGVwcy5vcHRpb25zIGltcG9ydCBP
cHRpb25zCkBAIC01MCwxMSArNTEsMTcgQEAgY2xhc3MgUHJlcGFyZUNoYW5nZUxvZyhBYnN0cmFj
dFN0ZXApOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGJ1Z19pZCA9IHN0YXRlLmdldCgi
YnVnX2lkIikKICAgICAgICAgY2hhbmdlbG9ncyA9IHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwg
ImNoYW5nZWxvZ3MiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBidWdfdGl0bGUgPSBzZWxm
LmNhY2hlZF9sb29rdXAoc3RhdGUsICJidWdfdGl0bGUiKQorICAgICAgICBleGNlcHQgQnVnemls
bGFFcnJvciwgZToKKyAgICAgICAgICAgICMgV2UgbWF5IG5vdCBiZSBhdXRob3JpemVkIHRvIHJl
dHJpZXZlIHRoZSBidWcgdGl0bGUgaWYgaXQncyBmb3IKKyAgICAgICAgICAgICMgYSBzZWN1cml0
eSBidWcuIFRoZXJlZm9yZSwgd2UgbGVhdmUgdGhlIGNoYW5nZSBsb2dzIHVuY2hhbmdlZC4KKyAg
ICAgICAgICAgIHJldHVybgogICAgICAgICBmb3IgY2hhbmdlbG9nX3BhdGggaW4gY2hhbmdlbG9n
czoKICAgICAgICAgICAgIGNoYW5nZWxvZyA9IENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkKICAg
ICAgICAgICAgIGlmIG5vdCBjaGFuZ2Vsb2cubGF0ZXN0X2VudHJ5KCkuYnVnX2lkKCk6CiAgICAg
ICAgICAgICAgICAgY2hhbmdlbG9nLnNldF9zaG9ydF9kZXNjcmlwdGlvbl9hbmRfYnVnX3VybCgK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiYnVnX3RpdGxl
IiksCisgICAgICAgICAgICAgICAgICAgIGJ1Z190aXRsZSwKICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fdG9vbC5idWdzLmJ1Z191cmxfZm9yX2J1Z19pZChidWdfaWQpKQogCiAgICAgZGVmIHJ1
bihzZWxmLCBzdGF0ZSk6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
c3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdlci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhy
ZXZpZXdlci5weQkocmV2aXNpb24gNjczMzApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvc3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdlci5weQkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFu
Z2Vsb2cgCiBmcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCiBmcm9t
IHdlYmtpdHB5LnRvb2wuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKIGZy
b20gd2Via2l0cHkudG9vbC5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhRXJyb3IKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZywgZXJyb3IKIAog
Y2xhc3MgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlcihBYnN0cmFjdFN0ZXApOgpAQCAtNDMs
NyArNDQsMTYgQEAgY2xhc3MgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlcihBYnN0cgogICAg
ICAgICBdCiAKICAgICBkZWYgX2d1ZXNzX3Jldmlld2VyX2Zyb21fYnVnKHNlbGYsIGJ1Z19pZCk6
Ci0gICAgICAgIHBhdGNoZXMgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkucmV2
aWV3ZWRfcGF0Y2hlcygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGNoZXMgPSBzZWxm
Ll90b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkucmV2aWV3ZWRfcGF0Y2hlcygpCisgICAgICAg
IGV4Y2VwdDoKKyAgICAgICAgICAgIGlmIChlLmlzX2ludmFsaWRfYnVnX2lkKCkpOgorICAgICAg
ICAgICAgICAgIGxvZygiQnVnICVzIGlzIGludmFsaWQuIiAlIGJ1Z19pZCkKKyAgICAgICAgICAg
IGVsaWYgKGUuaXNfbm90X2ZvdW5kKCkpOgorICAgICAgICAgICAgICAgIGxvZygiQnVnICVzIGRv
ZXMgbm90IGV4aXN0LiIgJSBidWdfaWQpCisgICAgICAgICAgICBlbGlmIChlLmlzX25vdF9wZXJt
aXR0ZWRfdG9fdmlld19idWcoKSk6CisgICAgICAgICAgICAgICAgbG9nKCJZb3UncmUgbm90IGF1
dGhvcml6ZWQgdG8gdmlldyBidWcgJXMuIiAlIGJ1Z19pZCkKKyAgICAgICAgICAgIHJldHVybiBO
b25lCiAgICAgICAgIGlmIGxlbihwYXRjaGVzKSAhPSAxOgogICAgICAgICAgICAgbG9nKCIlcyBv
biBidWcgJXMsIGNhbm5vdCBpbmZlciByZXZpZXdlci4iICUgKHBsdXJhbGl6ZSgicmV2aWV3ZWQg
cGF0Y2giLCBsZW4ocGF0Y2hlcykpLCBidWdfaWQpKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUK
</data>
<flag name="review"
          id="56612"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67642</attachid>
            <date>2010-09-14 22:36:24 -0700</date>
            <delta_ts>2010-09-21 21:15:35 -0700</delta_ts>
            <desc>Patch with unit tests</desc>
            <filename>Bug39136.patch</filename>
            <type>text/plain</type>
            <size>22745</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY3NTM0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMDktMTQgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIHNoZXJpZmZib3QgY2FuJ3Qgcm9sbCBvdXQgc2VjdXJpdHkgcGF0Y2hlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxMzYKKworICAgICAg
ICBNYWtlIFNoZXJpZmZCb3QgZGV0ZXJtaW5lIGlmIGl0J3MgYXV0aG9yaXplZCB0byB2aWV3IGEg
YnVnCisgICAgICAgIHdob3NlIGNoYW5nZSBpdCB3YW50cyB0byByb2xsb3V0IGJlZm9yZSBpdCB0
cmllcyB0byByb2xsb3V0CisgICAgICAgIHRoZSBjaGFuZ2UuCisKKyAgICAgICAgTW9yZW92ZXIs
IG1ha2UgYm90aCB3ZWJraXQtcGF0Y2ggYW5kIFNoZXJpZmZib3QgcHJvdmlkZSBodW1hbi0KKyAg
ICAgICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGV5IGFyZSBub3QgYXV0aG9yaXpl
ZCB0byB2aWV3CisgICAgICAgIGEgYnVnIGFuZCB3aGVuIGEgYnVnIG51bWJlciBpcyBpbnZhbGlk
LgorCisgICAgICAgIEN1cnJlbnRseSwgU2hlcmlmZmJvdCBkb2VzIG5vdCBwYXJzZSBCdWd6aWxs
YSBidWdzIGZvcgorICAgICAgICA8YnVnIGVycm9yPSIuLi4iPiwgd2hpY2ggaW5kaWNhdGVzIGFu
IGVycm9yIHdoZW4gcmV0cmlldmluZworICAgICAgICBhIGJ1Zy4gSW4gcGFydGljdWxhciwgZXJy
b3I9Ik5vdFBlcm1pdHRlZCIgaWYgYSBwZXJzb24gKG9yIGJvdCkKKyAgICAgICAgaXMgbm90IGF1
dGhvcml6ZWQgdG8gdmlldyBhIGJ1Zy4gRm9yIHN1Y2ggZXJyb3I9Ik5vdFBlcm1pdHRlZCIgYnVn
cywKKyAgICAgICAgU2hlcmlmZmJvdCByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gcGFyc2luZyB0
aGUgYnVnIHJlcG9ydCBhbmQKKyAgICAgICAgdGhpcyBleGNlcHRpb24gZG9lcyBub3QgZXhwbGlj
aXRseSBpbmRpY2F0ZSBTaGVyaWZmYm90J3MgbGFjaworICAgICAgICBvZiBhdXRob3JpemF0aW9u
LiBJbnN0ZWFkLCBTaGVyaWZmYm90IHNob3VsZCBleHBsaWNpdGx5IGNoZWNrCisgICAgICAgIGZv
ciB0aGUgcHJlc2VuY2UgPGJ1ZyBlcnJvcj0iLi4uIj4gYmVmb3JlIG9wZXJhdGluZyBvbiBhIGJ1
ZworICAgICAgICBhbmQgZXJyb3Igd2l0aCBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaWYgaXQn
cyBub3QgcGVybWl0dGVkCisgICAgICAgIHRvIHZpZXcgaXQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHk6IEFkZGVkIEJ1Z3ppbGxhRXJyb3IgY2xh
c3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhX3VuaXR0
ZXN0LnB5OgorICAgICAgICAgIC0gQWRkZWQgdW5pdCB0ZXN0IHRlc3RfYnVnX3BhcnNpbmdfZm9y
X2J1Z3ppbGxhX25vdF9wZXJtaXR0ZWRfZXJyb3IoKS4KKyAgICAgICAgICAtIEFkZGVkIHVuaXQg
dGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9ub3RfZm91bmRfZXJyb3IoKS4KKyAg
ICAgICAgICAtIEFkZGVkIHVuaXQgdGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9p
bnZhbGlkX2J1Z19pZF9lcnJvcigpLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9i
b3Qvc2hlcmlmZi5weTogTW9kaWZpZWQgdG8gY2F0Y2ggQnVnemlsbGFFcnJvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWQucHk6IERpdHRvLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHk6IERpdHRvLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWQucHk6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jbG9zZWJ1Zy5weTogRGl0
dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL29ic29sZXRlcGF0Y2hl
cy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3ByZXBh
cmVjaGFuZ2Vsb2cucHk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9z
dGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld2VyLnB5OiBEaXR0by4KKwogMjAxMC0wOS0x
NCAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vbmV0L2J1Z3ppbGxhLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL25ldC9idWd6aWxsYS5weQkocmV2aXNpb24gNjc1MzQpCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDM5IEBAIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5z
dGFsbGVkLm0KIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9ydCBC
ZWF1dGlmdWxTb3VwLCBTb3VwU3RyYWluZXIKIAogCitjbGFzcyBCdWd6aWxsYUVycm9yKEV4Y2Vw
dGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVnX2lkLCBlcnJvcl9tZXNzYWdlPU5v
bmUpOgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZXJyb3JfbWVzc2FnZSkKKyAg
ICAgICAgc2VsZi5idWdfaWQgPSBidWdfaWQKKyAgICAgICAgc2VsZi5lcnJvcl9tZXNzYWdlID0g
ZXJyb3JfbWVzc2FnZQorCisgICAgZGVmIGJ1Z19pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuYnVnX2lkCisKKyAgICBkZWYgZXJyb3JfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuZXJyb3JfbWVzc2FnZQorCisgICAgIyBUaGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2Vz
IHdlcmUgZXh0cmFjdGVkIGZyb20gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL2J1Z3ppbGxhLmR0
ZD4gYXMgb2YgMDkvMTIvMjAxMC4KKworICAgIGRlZiBpc19pbnZhbGlkX2J1Z19pZChzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3JfbWVzc2FnZSA9PSAiSW52YWxpZEJ1Z0lkIgorCisg
ICAgZGVmIGlzX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3JfbWVz
c2FnZSA9PSAiTm90Rm91bmQiCisKKyAgICBkZWYgaXNfbm90X3Blcm1pdHRlZF90b192aWV3X2J1
ZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3JfbWVzc2FnZSA9PSAiTm90UGVybWl0
dGVkIgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfaW52YWxp
ZF9idWdfaWQoKToKKyAgICAgICAgICAgIHJldHVybiAiQnVnICVzIGlzIGludmFsaWQiICUgc2Vs
Zi5idWdfaWQKKyAgICAgICAgaWYgc2VsZi5pc19ub3RfZm91bmQoKToKKyAgICAgICAgICAgIHJl
dHVybiAiQnVnICVzIGRvZXMgbm90IGV4aXN0IiAlIHNlbGYuYnVnX2lkCisgICAgICAgIGlmIHNl
bGYuaXNfbm90X3Blcm1pdHRlZF90b192aWV3X2J1ZygpOgorICAgICAgICAgICAgcmV0dXJuICJO
b3QgcGVybWl0dGVkIHRvIHZpZXcgYnVnICVzIiAlIHNlbGYuYnVnX2lkCisgICAgICAgIHJldHVy
biAiQnVnemlsbGEgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hlbiBwcm9jZXNzaW5nIGJ1ZyAlczog
JyVzJyIgJSAoc2VsZi5idWdfaWQsIHNlbGYuZXJyb3JfbWVzc2FnZSkKKwogZGVmIHBhcnNlX2J1
Z19pZChtZXNzYWdlKToKICAgICBpZiBub3QgbWVzc2FnZToKICAgICAgICAgcmV0dXJuIE5vbmUK
QEAgLTQ5Nyw4ICs1MzAsMTIgQEAgY2xhc3MgQnVnemlsbGEob2JqZWN0KToKIAogICAgIGRlZiBf
cGFyc2VfYnVnX3BhZ2Uoc2VsZiwgcGFnZSk6CiAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3Vw
KHBhZ2UpCisgICAgICAgIGJ1Z19lbGVtZW50ID0gc291cC5maW5kKCJidWciKQorICAgICAgICBi
dWdfaWQgPSBzb3VwLmZpbmQoImJ1Z19pZCIpLnN0cmluZworICAgICAgICBpZiBidWdfZWxlbWVu
dC5oYXNfa2V5KCJlcnJvciIpOgorICAgICAgICAgICAgcmFpc2UgQnVnemlsbGFFcnJvcihidWdf
aWQsIGJ1Z19lbGVtZW50WyJlcnJvciJdKQogICAgICAgICBidWcgPSB7fQotICAgICAgICBidWdb
ImlkIl0gPSBpbnQoc291cC5maW5kKCJidWdfaWQiKS5zdHJpbmcpCisgICAgICAgIGJ1Z1siaWQi
XSA9IGludChidWdfaWQpCiAgICAgICAgIGJ1Z1sidGl0bGUiXSA9IHNlbGYuX3N0cmluZ19jb250
ZW50cyhzb3VwLmZpbmQoInNob3J0X2Rlc2MiKSkKICAgICAgICAgYnVnWyJyZXBvcnRlcl9lbWFp
bCJdID0gc2VsZi5fc3RyaW5nX2NvbnRlbnRzKHNvdXAuZmluZCgicmVwb3J0ZXIiKSkKICAgICAg
ICAgYnVnWyJhc3NpZ25lZF90b19lbWFpbCJdID0gc2VsZi5fc3RyaW5nX2NvbnRlbnRzKHNvdXAu
ZmluZCgiYXNzaWduZWRfdG8iKSkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC9idWd6aWxsYV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGFfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDY3NTM0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1
Z3ppbGxhX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGltcG9y
dCB1bml0dGVzdAogaW1wb3J0IGRhdGV0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZp
Zy5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0LCBSZXZpZXdlciwgQ29tbWl0dGVyCi1m
cm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhLCBCdWd6aWxs
YVF1ZXJpZXMsIHBhcnNlX2J1Z19pZCwgQ29tbWl0dGVyVmFsaWRhdG9yLCBCdWcKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEsIEJ1Z3ppbGxhRXJyb3Is
IEJ1Z3ppbGxhUXVlcmllcywgcGFyc2VfYnVnX2lkLCBDb21taXR0ZXJWYWxpZGF0b3IsIEJ1Zwog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENh
cHR1cmUKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiBmcm9tIHdl
YmtpdHB5LnRoaXJkcGFydHkuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVsU291cApAQCAt
NzIsNiArNzIsMTQgQEAgY2xhc3MgQ29tbWl0dGVyVmFsaWRhdG9yVGVzdCh1bml0dGVzdC5UZQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbGlkYXRvci5fZmxhZ19wZXJtaXNzaW9uX3JlamVj
dGlvbl9tZXNzYWdlKCJmb29AZm9vLmNvbSIsICJyZXZpZXciKSwgZXhwZWN0ZWRfbWVzc3NhZ2Up
CiAKIAorY2xhc3MgQnVnemlsbGFFcnJvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRl
ZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCdWd6aWxsYUVycm9y
KGJ1Z19pZD0xMjM0NSwgZXJyb3JfbWVzc2FnZT0iSW52YWxpZEJ1Z0lkIikuX19zdHJfXygpLCAi
QnVnIDEyMzQ1IGlzIGludmFsaWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJ1Z3ppbGxh
RXJyb3IoYnVnX2lkPTEyMzQ1LCBlcnJvcl9tZXNzYWdlPSJOb3RGb3VuZCIpLl9fc3RyX18oKSwg
IkJ1ZyAxMjM0NSBkb2VzIG5vdCBleGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQnVn
emlsbGFFcnJvcihidWdfaWQ9MTIzNDUsIGVycm9yX21lc3NhZ2U9Ik5vdFBlcm1pdHRlZCIpLl9f
c3RyX18oKSwgIk5vdCBwZXJtaXR0ZWQgdG8gdmlldyBidWcgMTIzNDUiKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKEJ1Z3ppbGxhRXJyb3IoYnVnX2lkPTEyMzQ1LCBlcnJvcl9tZXNzYWdlPSJU
aGluZ2FtYWppZyBicm9rZSIpLl9fc3RyX18oKSwgIkJ1Z3ppbGxhIGVuY291bnRlcmVkIGFuIGVy
cm9yIHdoZW4gcHJvY2Vzc2luZyBidWcgMTIzNDU6ICdUaGluZ2FtYWppZyBicm9rZSciKQorCisK
IGNsYXNzIEJ1Z3ppbGxhVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgX2V4YW1wbGVfYXR0
YWNobWVudCA9ICcnJwogICAgICAgICA8YXR0YWNobWVudApAQCAtMTQxLDYgKzE0OSw1NyBAQCBj
bGFzcyBCdWd6aWxsYVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhOb25lLCBwYXJzZV9idWdfaWQoImh0dHA6Ly93d3cud2Via2l0Lm9yZy9iLzEyMzQ1
IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHBhcnNlX2J1Z19pZCgiaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/Y3R5cGU9eG1sJmlkPTEyMzQ1IikpCiAKKyAg
ICBfZXhhbXBsZV91bmF1dGhvcml6ZWRfYnVnID0gIiIiCisgICAgPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyIgPz4KKyAgICA8IURPQ1RZUEUgYnVn
emlsbGEgU1lTVEVNICJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9idWd6aWxsYS5kdGQiPgorCisg
ICAgPGJ1Z3ppbGxhIHZlcnNpb249IjMuMi4zIgorICAgICAgICAgICAgICB1cmxiYXNlPSJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iCisgICAgICAgICAgICAgIG1haW50YWluZXI9ImFkbWluQHdl
YmtpdC5vcmciCisgICAgICAgICAgICAgIGV4cG9ydGVyPSJ1bmF1dGhvcml6ZWRfcGVyc29uQGV4
YW1wbGUuY29tIgorICAgID4KKworICAgICAgICA8YnVnIGVycm9yPSJOb3RQZXJtaXR0ZWQiPgor
ICAgICAgICAgIDxidWdfaWQ+MTIzNDU8L2J1Z19pZD4KKyAgICAgICAgPC9idWc+CisKKyAgICA8
L2J1Z3ppbGxhPgorICAgICIiIgorCisgICAgX2V4YW1wbGVfbm90X2ZvdW5kX2J1ZyA9ICIiIgor
ICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMi
ID8+CisgICAgPCFET0NUWVBFIGJ1Z3ppbGxhIFNZU1RFTSAiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvYnVnemlsbGEuZHRkIj4KKworICAgIDxidWd6aWxsYSB2ZXJzaW9uPSIzLjIuMyIKKyAgICAg
ICAgICAgICAgdXJsYmFzZT0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIgorICAgICAgICAgICAg
ICBtYWludGFpbmVyPSJhZG1pbkB3ZWJraXQub3JnIgorICAgICAgICAgICAgICBleHBvcnRlcj0i
dW5hdXRob3JpemVkX3BlcnNvbkBleGFtcGxlLmNvbSIKKyAgICA+CisKKyAgICAgICAgPGJ1ZyBl
cnJvcj0iTm90Rm91bmQiPgorICAgICAgICAgIDxidWdfaWQ+MTIzNDU8L2J1Z19pZD4KKyAgICAg
ICAgPC9idWc+CisKKyAgICA8L2J1Z3ppbGxhPgorICAgICIiIgorCisgICAgX2V4YW1wbGVfaW52
YWxpZF9idWdfaWRfYnVnID0gIiIiCisgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
VVRGLTgiIHN0YW5kYWxvbmU9InllcyIgPz4KKyAgICA8IURPQ1RZUEUgYnVnemlsbGEgU1lTVEVN
ICJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9idWd6aWxsYS5kdGQiPgorCisgICAgPGJ1Z3ppbGxh
IHZlcnNpb249IjMuMi4zIgorICAgICAgICAgICAgICB1cmxiYXNlPSJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy8iCisgICAgICAgICAgICAgIG1haW50YWluZXI9ImFkbWluQHdlYmtpdC5vcmciCisg
ICAgICAgICAgICAgIGV4cG9ydGVyPSJ1bmF1dGhvcml6ZWRfcGVyc29uQGV4YW1wbGUuY29tIgor
ICAgID4KKworICAgICAgICA8YnVnIGVycm9yPSJJbnZhbGlkQnVnSWQiPgorICAgICAgICAgIDxi
dWdfaWQ+QTwvYnVnX2lkPgorICAgICAgICA8L2J1Zz4KKworICAgIDwvYnVnemlsbGE+CisgICAg
IiIiCisKICAgICBfZXhhbXBsZV9idWcgPSAiIiIKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiID8+CiA8IURPQ1RZUEUgYnVnemlsbGEgU1lTVEVN
ICJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9idWd6aWxsYS5kdGQiPgpAQCAtMjI3LDYgKzI4Niwz
MyBAQCBaRVpwYm1semFFeHZZV1JYYVhSb1VtVmhjMjl1T25KbFlYTnZibDA3CiAgICAgICAgIH1d
LAogICAgIH0KIAorICAgIGRlZiB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9ub3RfcGVy
bWl0dGVkX2Vycm9yKHNlbGYpOgorICAgICAgICBkaWRQYXNzVGVzdCA9IEZhbHNlCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIEJ1Z3ppbGxhKCkuX3BhcnNlX2J1Z19wYWdlKHNlbGYuX2V4YW1w
bGVfdW5hdXRob3JpemVkX2J1ZykKKyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5pc19ub3RfcGVybWl0dGVkX3RvX3ZpZXdfYnVn
KCkpCisgICAgICAgICAgICBkaWRQYXNzVGVzdCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGRpZFBhc3NUZXN0LCAiRmFpbGVkIHRvIHJhaXNlIGV4Y2VwdGlvbi4iKQorCisgICAgZGVm
IHRlc3RfYnVnX3BhcnNpbmdfZm9yX2J1Z3ppbGxhX25vdF9mb3VuZF9lcnJvcihzZWxmKToKKyAg
ICAgICAgZGlkUGFzc1Rlc3QgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBCdWd6
aWxsYSgpLl9wYXJzZV9idWdfcGFnZShzZWxmLl9leGFtcGxlX25vdF9mb3VuZF9idWcpCisgICAg
ICAgIGV4Y2VwdCBCdWd6aWxsYUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGUuaXNfbm90X2ZvdW5kKCkpCisgICAgICAgICAgICBkaWRQYXNzVGVzdCA9IFRydWUKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGRpZFBhc3NUZXN0LCAiRmFpbGVkIHRvIHJhaXNlIGV4Y2VwdGlv
bi4iKQorCisgICAgZGVmIHRlc3RfYnVnX3BhcnNpbmdfZm9yX2J1Z3ppbGxhX2ludmFsaWRfYnVn
X2lkX2Vycm9yKHNlbGYpOgorICAgICAgICBkaWRQYXNzVGVzdCA9IEZhbHNlCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIEJ1Z3ppbGxhKCkuX3BhcnNlX2J1Z19wYWdlKHNlbGYuX2V4YW1wbGVf
aW52YWxpZF9idWdfaWRfYnVnKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmlzX2ludmFsaWRfYnVnX2lkKCkpCisgICAgICAg
ICAgICBkaWRQYXNzVGVzdCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpZFBhc3NU
ZXN0LCAiRmFpbGVkIHRvIHJhaXNlIGV4Y2VwdGlvbi4iKQorCiAgICAgIyBGSVhNRTogVGhpcyBz
aG91bGQgbW92ZSB0byBhIGNlbnRyYWwgbG9jYXRpb24gYW5kIGJlIHNoYXJlZCBieSBtb3JlIHVu
aXQgdGVzdHMuCiAgICAgZGVmIF9hc3NlcnRfZGljdGlvbmFyaWVzX2VxdWFsKHNlbGYsIGFjdHVh
bCwgZXhwZWN0ZWQpOgogICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgcGFyc2luZyBtb3Jl
IG9yIGxlc3MgdGhhbiB3ZSBleHBlY3QKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9ib3Qvc2hlcmlmZi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvYm90L3NoZXJpZmYucHkJKHJldmlzaW9uIDY3NTM0KQorKysgV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9zaGVyaWZmLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGZyb20gd2Via2l0cHkuY29tbW9u
LmNoZWNrb3V0LmNoYW5nZWxvZyBpbXBvcnQgdmlld19zb3VyY2VfdXJsCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAorZnJvbSB3ZWJraXRweS5j
b21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYSwgQnVnemlsbGFFcnJvciwgcGFyc2Vf
YnVnX2lkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGlt
cG9ydCBsb2cKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNj
cmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgam9pbl93aXRoX3Nl
cGFyYXRvcnMKQEAgLTY0LDYgKzY0LDE0IEBAIGNsYXNzIFNoZXJpZmYob2JqZWN0KToKICAgICAg
ICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IlRoZSByb2xsb3V0IHJlYXNvbiBtYXkg
bm90IGJlZ2luICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIC0gKFwiJXNc
IikuIiAlIHJvbGxvdXRfcmVhc29uKQogCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYu
X3Rvb2wuYnVncy5mZXRjaF9idWcoc2VsZi5fdG9vbC5jaGVja291dCgpLmNvbW1pdF9pbmZvX2Zv
cl9yZXZpc2lvbihzdm5fcmV2aXNpb24pKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwg
ZToKKyAgICAgICAgICAgIGlmIChlLmlzX25vdF9wZXJtaXR0ZWRfdG9fdmlld19idWcoKSk6Cisg
ICAgICAgICAgICAgICAgU2NyaXB0RXJyb3IobWVzc2FnZT0iU2hlcmlmZkJvdCBpcyBub3QgYXV0
aG9yaXplZCB0byB2aWV3ICVzLiIgJSBzZWxmLl90b29sLmJ1Z3MuYnVnX3VybF9mb3JfYnVnX2lk
KGUuYnVnX2lkKCkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBTY3JpcHRF
cnJvcihtZXNzYWdlPSJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBjb3JyZXNwb25kaW5nIGJ1ZyBm
b3IgciVzLiIgJSBzdm5fcmV2aXNpb24pCisKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fc2hlcmlm
ZmJvdC5ydW5fd2Via2l0X3BhdGNoKFsKICAgICAgICAgICAgICJjcmVhdGUtcm9sbG91dCIsCiAg
ICAgICAgICAgICAiLS1mb3JjZS1jbGVhbiIsCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkLnB5CShyZXZpc2lvbiA2
NzUzNCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3du
bG9hZC5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIG9wdHBhcnNlIGlt
cG9ydCBtYWtlX29wdGlvbgogaW1wb3J0IHdlYmtpdHB5LnRvb2wuc3RlcHMgYXMgc3RlcHMKIAog
ZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY2hhbmdlbG9nIGltcG9ydCBDaGFuZ2VMb2cs
IHZpZXdfc291cmNlX3VybAorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9y
dCBCdWd6aWxsYUVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGlt
cG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFic3RyYWN0c2Vx
dWVuY2VkY29tbWFuZCBpbXBvcnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21tYW5kCiBmcm9tIHdlYmtp
dHB5LnRvb2wuY29tbWFuZHMuc3RlcHNlcXVlbmNlIGltcG9ydCBTdGVwU2VxdWVuY2UKQEAgLTE1
NywxNiArMTU4LDMxIEBAIGNsYXNzIEFic3RyYWN0UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZChBYnMK
IAogY2xhc3MgUHJvY2Vzc0F0dGFjaG1lbnRzTWl4aW4ob2JqZWN0KToKICAgICBkZWYgX2ZldGNo
X2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
ICAgICAgICByZXR1cm4gbWFwKGxhbWJkYSBwYXRjaF9pZDogdG9vbC5idWdzLmZldGNoX2F0dGFj
aG1lbnQocGF0Y2hfaWQpLCBhcmdzKQorICAgICAgICBhbGxfcGF0Y2hlcyA9IFtdCisgICAgICAg
IGZvciBwYXRjaF9pZCBpbiBhcmdzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IGFsbF9wYXRjaGVzLmFwcGVuZCh0b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChwYXRjaF9pZCkp
CisgICAgICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgICAgICBp
ZiBvcHRpb25zLm5vbl9pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQor
ICAgICAgICAgICAgICAgIGxvZygiRmFpbGVkIHRvIGZldGNoIGF0dGFjaG1lbnQgJXM6ICclcyc7
IGlnbm9yaW5nLiIgJSAocGF0Y2hfaWQsIGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg
ICAgICAgIHJldHVybiBhbGxfcGF0Y2hlcwogCiAKIGNsYXNzIFByb2Nlc3NCdWdzTWl4aW4ob2Jq
ZWN0KToKICAgICBkZWYgX2ZldGNoX2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICBhbGxfcGF0Y2hlcyA9IFtdCiAgICAgICAgIGZv
ciBidWdfaWQgaW4gYXJnczoKLSAgICAgICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hf
YnVnKGJ1Z19pZCkucmV2aWV3ZWRfcGF0Y2hlcygpCi0gICAgICAgICAgICBsb2coIiVzIGZvdW5k
IG9uIGJ1ZyAlcy4iICUgKHBsdXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4ocGF0Y2hlcykp
LCBidWdfaWQpKQotICAgICAgICAgICAgYWxsX3BhdGNoZXMgKz0gcGF0Y2hlcworICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1
Z19pZCkucmV2aWV3ZWRfcGF0Y2hlcygpCisgICAgICAgICAgICAgICAgbG9nKCIlcyBmb3VuZCBv
biBidWcgJXMuIiAlIChwbHVyYWxpemUoInJldmlld2VkIHBhdGNoIiwgbGVuKHBhdGNoZXMpKSwg
YnVnX2lkKSkKKyAgICAgICAgICAgICAgICBhbGxfcGF0Y2hlcyArPSBwYXRjaGVzCisgICAgICAg
ICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25z
Lm5vbl9pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAg
ICAgICAgIGxvZygiJyVzJzsgaWdub3JpbmcuIiAlIGUpCisgICAgICAgICAgICAgICAgY29udGlu
dWUKICAgICAgICAgcmV0dXJuIGFsbF9wYXRjaGVzCiAKIApJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzLnB5CShyZXZpc2lv
biA2NzUzNCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWV1ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgZnJvbSBkYXRldGltZSBp
bXBvcnQgZGF0ZXRpbWUKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBmcm9tIFN0
cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemls
bGEgaW1wb3J0IENvbW1pdHRlclZhbGlkYXRvcgorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1
Z3ppbGxhIGltcG9ydCBCdWd6aWxsYUVycm9yLCBDb21taXR0ZXJWYWxpZGF0b3IKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLm5ldC5zdGF0dXNzZXJ2ZXIgaW1wb3J0IFN0YXR1c1NlcnZlcgogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGVycm9yLCBs
b2cKQEAgLTE3OCw3ICsxNzgsMTYgQEAgY2xhc3MgQ29tbWl0UXVldWUoQWJzdHJhY3RQYXRjaFF1
ZXVlLCBTdAogICAgIGRlZiBfdmFsaWRhdGVfcGF0Y2hlc19pbl9jb21taXRfcXVldWUoc2VsZik6
CiAgICAgICAgICMgTm90IHVzaW5nIEJ1Z3ppbGxhUXVlcmllcy5mZXRjaF9wYXRjaGVzX2Zyb21f
Y29tbWl0X3F1ZXVlKCkgc28gd2UgY2FuIHJlamVjdCBwYXRjaGVzIHdpdGggaW52YWxpZCBjb21t
aXR0ZXJzL3Jldmlld2Vycy4KICAgICAgICAgYnVnX2lkcyA9IHNlbGYudG9vbC5idWdzLnF1ZXJp
ZXMuZmV0Y2hfYnVnX2lkc19mcm9tX2NvbW1pdF9xdWV1ZSgpCi0gICAgICAgIGFsbF9wYXRjaGVz
ID0gc3VtKFtzZWxmLnRvb2wuYnVncy5mZXRjaF9idWcoYnVnX2lkKS5jb21taXRfcXVldWVkX3Bh
dGNoZXMoaW5jbHVkZV9pbnZhbGlkPVRydWUpIGZvciBidWdfaWQgaW4gYnVnX2lkc10sIFtdKQor
ICAgICAgICBhbGxfcGF0Y2hlcyA9IFtdCisgICAgICAgIGZvciBidWdfaWQgaW4gYnVnX2lkczoK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhbGxfcGF0Y2hlcyArPSBzZWxmLnRv
b2wuYnVncy5mZXRjaF9idWcoYnVnX2lkKS5jb21taXRfcXVldWVkX3BhdGNoZXMoaW5jbHVkZV9p
bnZhbGlkPVRydWUpCisgICAgICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAg
ICAgICAgICAgICAjIFRoaXMgbWF5IG9jY3VyIGlmIHRoZSBidWcgYmVjb21lcyBhIHNlY3VyaXR5
IGJ1ZyBiZXR3ZWVuIHRoZSB0aW1lCisgICAgICAgICAgICAgICAgIyB3ZSBmZXRjaGVkIGl0cyBJ
RCBmcm9tIHRoZSBjb21taXQgcXVldWUgYW5kIG5vdy4gV2UgaWdub3JlIHRoZQorICAgICAgICAg
ICAgICAgICMgcGF0Y2hlcyBmb3IgdGhpcyBidWcuCisgICAgICAgICAgICAgICAgbG9nKCInJXMn
OyBpZ25vcmluZy4iICUgZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICByZXR1
cm4gc2VsZi5jb21taXR0ZXJfdmFsaWRhdG9yLnBhdGNoZXNfYWZ0ZXJfcmVqZWN0aW5nX2ludmFs
aWRfY29tbWl0ZXJzX2FuZF9yZXZpZXdlcnMoYWxsX3BhdGNoZXMpCiAKICAgICBkZWYgX3BhdGNo
X2NtcChzZWxmLCBhLCBiKToKQEAgLTM5OSw3ICs0MDgsMTQgQEAgY2xhc3MgQWJzdHJhY3RSZXZp
ZXdRdWV1ZShBYnN0cmFjdFBhdGNoUQogICAgIGRlZiBuZXh0X3dvcmtfaXRlbShzZWxmKToKICAg
ICAgICAgcGF0Y2hfaWQgPSBzZWxmLl9wYXRjaGVzLm5leHQoKQogICAgICAgICBpZiBwYXRjaF9p
ZDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnRvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50KHBh
dGNoX2lkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnRv
b2wuYnVncy5mZXRjaF9hdHRhY2htZW50KHBhdGNoX2lkKQorICAgICAgICAgICAgZXhjZXB0IEJ1
Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgIyBUaGlzIG1heSBvY2N1ciBpZiB0aGUg
YnVnIHdpdGggYXR0YWNobWVudCBJRCBwYXRjaF9pZCBiZWNvbWVzIGEgc2VjdXJpdHkKKyAgICAg
ICAgICAgICAgICAjIGJ1ZyBiZXR3ZWVuIHRoZSB0aW1lIHdlIGZldGNoZWQgYWxsIGF0dGFjaG1l
bnQgSURzIGZyb20gdGhlIHJldmlldyBxdWV1ZQorICAgICAgICAgICAgICAgICMgYW5kIG5vdy4g
U28sIHdlIGlnbm9yZSB0aGlzIGF0dGFjaG1lbnQuCisgICAgICAgICAgICAgICAgbG9nKCInJXMn
OyBpZ25vcmluZy4iICUgZSkKKyAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgc2hvdWxk
X3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgogICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWQucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3VwbG9hZC5w
eQkocmV2aXNpb24gNjc1MzQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGZyb20g
b3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBpbXBvcnQgd2Via2l0cHkudG9vbC5zdGVwcyBh
cyBzdGVwcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0dGVycyBpbXBvcnQg
Q29tbWl0dGVyTGlzdAotZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBw
YXJzZV9idWdfaWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVn
emlsbGFFcnJvciwgcGFyc2VfYnVnX2lkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNl
ciBpbXBvcnQgVXNlcgogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sK
IGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5hYnN0cmFjdHNlcXVlbmNlZGNvbW1hbmQgaW1w
b3J0IEFic3RyYWN0U2VxdWVuY2VkQ29tbWFuZApAQCAtODIsNyArODIsMTQgQEAgY2xhc3MgQ2xl
YW5QZW5kaW5nQ29tbWl0KEFic3RyYWN0RGVjbGFyYQogICAgIGRlZiBleGVjdXRlKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICBjb21taXR0ZXJzID0gQ29tbWl0dGVyTGlzdCgp
CiAgICAgICAgIGZvciBidWdfaWQgaW4gdG9vbC5idWdzLnF1ZXJpZXMuZmV0Y2hfYnVnX2lkc19m
cm9tX3BlbmRpbmdfY29tbWl0X2xpc3QoKToKLSAgICAgICAgICAgIGJ1ZyA9IHNlbGYudG9vbC5i
dWdzLmZldGNoX2J1ZyhidWdfaWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
YnVnID0gc2VsZi50b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkKKyAgICAgICAgICAgIGV4Y2Vw
dCBCdWd6aWxsYUVycm9yLCBlOgorICAgICAgICAgICAgICAgICMgVGhpcyBtYXkgb2NjdXIgaWYg
dGhlIGJ1ZyBiZWNvbWVzIGEgc2VjdXJpdHkgYnVnIGJldHdlZW4gdGhlIHRpbWUKKyAgICAgICAg
ICAgICAgICAjIHdlIGZldGNoZWQgaXRzIElEIGZyb20gdGhlIHBlbmRpbmcgY29tbWl0IGxpc3Qg
YW5kIG5vdy4gV2UgaWdub3JlCisgICAgICAgICAgICAgICAgIyB0aGlzIGJ1Zy4KKyAgICAgICAg
ICAgICAgICBsb2coZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcGF0
Y2hlcyA9IGJ1Zy5wYXRjaGVzKGluY2x1ZGVfb2Jzb2xldGU9VHJ1ZSkKICAgICAgICAgICAgIGZv
ciBwYXRjaCBpbiBwYXRjaGVzOgogICAgICAgICAgICAgICAgIGZsYWdzX3RvX2NsZWFyID0gc2Vs
Zi5fZmxhZ3NfdG9fY2xlYXJfb25fcGF0Y2gocGF0Y2gpCkBAIC0xMDQsNyArMTExLDExIEBAIGNs
YXNzIEFzc2lnblRvQ29tbWl0dGVyKEFic3RyYWN0RGVjbGFyYXQKIAogICAgIGRlZiBfYXNzaWdu
X2J1Z190b19sYXN0X3BhdGNoX2F0dGFjaGVyKHNlbGYsIGJ1Z19pZCk6CiAgICAgICAgIGNvbW1p
dHRlcnMgPSBDb21taXR0ZXJMaXN0KCkKLSAgICAgICAgYnVnID0gc2VsZi50b29sLmJ1Z3MuZmV0
Y2hfYnVnKGJ1Z19pZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnVnID0gc2VsZi50b29s
LmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkKKyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6
CisgICAgICAgICAgICBsb2coZSkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBub3Qg
YnVnLmlzX3VuYXNzaWduZWQoKToKICAgICAgICAgICAgIGFzc2lnbmVkX3RvX2VtYWlsID0gYnVn
LmFzc2lnbmVkX3RvX2VtYWlsKCkKICAgICAgICAgICAgIGxvZygiQnVnICVzIGlzIGFscmVhZHkg
YXNzaWduZWQgdG8gJXMgKCVzKS4iICUgKGJ1Z19pZCwgYXNzaWduZWRfdG9fZW1haWwsIGNvbW1p
dHRlcnMuY29tbWl0dGVyX2J5X2VtYWlsKGFzc2lnbmVkX3RvX2VtYWlsKSkpCkluZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY2xvc2VidWcucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2Nsb3NlYnVnLnB5
CShyZXZpc2lvbiA2NzUzNCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9z
dGVwcy9jbG9zZWJ1Zy5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiBmcm9t
IHdlYmtpdHB5LnRvb2wuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKIGZy
b20gd2Via2l0cHkudG9vbC5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhRXJyb3IKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZwogCiAKQEAgLTQz
LDcgKzQ0LDExIEBAIGNsYXNzIENsb3NlQnVnKEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICBy
ZXR1cm4KICAgICAgICAgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHI/IG9yIHIr
IHBhdGNoZXMgb24gdGhlIGJ1ZyBiZWZvcmUgY2xvc2luZy4KICAgICAgICAgIyBBc3N1bWUgdGhh
dCByLSBwYXRjaGVzIGFyZSBqdXN0IHByZXZpb3VzIHBhdGNoZXMgc29tZW9uZSBmb3Jnb3QgdG8g
b2Jzb2xldGUuCi0gICAgICAgIHBhdGNoZXMgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfYnVnKHN0
YXRlWyJwYXRjaCJdLmJ1Z19pZCgpKS5wYXRjaGVzKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9idWcoc3RhdGVbInBhdGNoIl0uYnVn
X2lkKCkpLnBhdGNoZXMoKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAg
ICAgICAgIGxvZyhlKQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGZvciBwYXRjaCBpbiBw
YXRjaGVzOgogICAgICAgICAgICAgaWYgcGF0Y2gucmV2aWV3KCkgPT0gIj8iIG9yIHBhdGNoLnJl
dmlldygpID09ICIrIjoKICAgICAgICAgICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBh
cyBhdHRhY2htZW50ICVzIGhhcyByZXZpZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBw
YXRjaGVzIHRvIGxhbmQgZnJvbSB0aGlzIGJ1Zy4iICUgKHBhdGNoLmJ1Z19pZCgpLCBwYXRjaC5p
ZCgpLCBwYXRjaC5yZXZpZXcoKSkpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc3RlcHMvb2Jzb2xldGVwYXRjaGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9vYnNvbGV0ZXBhdGNoZXMucHkJKHJldmlzaW9u
IDY3NTM0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL29ic29s
ZXRlcGF0Y2hlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogZnJvbSB3ZWJr
aXRweS50b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQogZnJvbSB3ZWJraXRweS50b29sLnN0
ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCiBmcm9tIHdlYmtpdHB5LnRvb2wu
c3RlcHMub3B0aW9ucyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1
Z3ppbGxhIGltcG9ydCBCdWd6aWxsYUVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBsb2cKIAogCkBAIC00Myw3ICs0NCwxMSBAQCBjbGFz
cyBPYnNvbGV0ZVBhdGNoZXMoQWJzdHJhY3RTdGVwKToKICAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMub2Jzb2xldGVfcGF0Y2hlczoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBidWdf
aWQgPSBzdGF0ZVsiYnVnX2lkIl0KLSAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVncy5m
ZXRjaF9idWcoYnVnX2lkKS5wYXRjaGVzKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0
Y2hlcyA9IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9idWcoYnVnX2lkKS5wYXRjaGVzKCkKKyAgICAg
ICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICBsb2coZSkKKyAgICAgICAg
ICAgIHJldHVybgogICAgICAgICBpZiBub3QgcGF0Y2hlczoKICAgICAgICAgICAgIHJldHVybgog
ICAgICAgICBsb2coIk9ic29sZXRpbmcgJXMgb24gYnVnICVzIiAlIChwbHVyYWxpemUoIm9sZCBw
YXRjaCIsIGxlbihwYXRjaGVzKSksIGJ1Z19pZCkpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZy5w
eQkocmV2aXNpb24gNjc1MzQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
c3RlcHMvcHJlcGFyZWNoYW5nZWxvZy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogaW1wb3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoYW5nZWxvZyBp
bXBvcnQgQ2hhbmdlTG9nCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0
IEJ1Z3ppbGxhRXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMuYWJzdHJhY3RzdGVwIGlt
cG9ydCBBYnN0cmFjdFN0ZXAKIGZyb20gd2Via2l0cHkudG9vbC5zdGVwcy5vcHRpb25zIGltcG9y
dCBPcHRpb25zCkBAIC01NCw3ICs1NSw3IEBAIGNsYXNzIFByZXBhcmVDaGFuZ2VMb2coQWJzdHJh
Y3RTdGVwKToKICAgICAgICAgICAgIGNoYW5nZWxvZyA9IENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0
aCkKICAgICAgICAgICAgIGlmIG5vdCBjaGFuZ2Vsb2cubGF0ZXN0X2VudHJ5KCkuYnVnX2lkKCk6
CiAgICAgICAgICAgICAgICAgY2hhbmdlbG9nLnNldF9zaG9ydF9kZXNjcmlwdGlvbl9hbmRfYnVn
X3VybCgKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiYnVn
X3RpdGxlIiksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwg
ImJ1Z190aXRsZSIpLCAjIFdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIG5vdCBhdXRob3JpemVk
IHRvIHJldHJpZXZlIHRoZSBidWcgdGl0bGUuCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rv
b2wuYnVncy5idWdfdXJsX2Zvcl9idWdfaWQoYnVnX2lkKSkKIAogICAgIGRlZiBydW4oc2VsZiwg
c3RhdGUpOgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3Vw
ZGF0ZWNoYW5nZWxvZ3N3aXRocmV2aWV3ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3VwZGF0ZWNoYW5nZWxvZ3N3aXRocmV2aWV3ZXIu
cHkJKHJldmlzaW9uIDY3NTM0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L3N0ZXBzL3VwZGF0ZWNoYW5nZWxvZ3N3aXRocmV2aWV3ZXIucHkJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY2hhbmdlbG9nIAog
ZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQogZnJvbSB3ZWJraXRw
eS50b29sLnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCiBmcm9tIHdlYmtp
dHB5LnRvb2wuc3RlcHMub3B0aW9ucyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS5jb21t
b24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYUVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBsb2csIGVycm9yCiAKIGNsYXNzIFVw
ZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXIoQWJzdHJhY3RTdGVwKToKQEAgLTQzLDcgKzQ0LDEx
IEBAIGNsYXNzIFVwZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXIoQWJzdHIKICAgICAgICAgXQog
CiAgICAgZGVmIF9ndWVzc19yZXZpZXdlcl9mcm9tX2J1ZyhzZWxmLCBidWdfaWQpOgotICAgICAg
ICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX2J1ZyhidWdfaWQpLnJldmlld2VkX3Bh
dGNoZXMoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRjaGVzID0gc2VsZi5fdG9vbC5i
dWdzLmZldGNoX2J1ZyhidWdfaWQpLnJldmlld2VkX3BhdGNoZXMoKQorICAgICAgICBleGNlcHQg
QnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgIGxvZyhlKQorICAgICAgICAgICAgcmV0dXJu
IE5vbmUKICAgICAgICAgaWYgbGVuKHBhdGNoZXMpICE9IDE6CiAgICAgICAgICAgICBsb2coIiVz
IG9uIGJ1ZyAlcywgY2Fubm90IGluZmVyIHJldmlld2VyLiIgJSAocGx1cmFsaXplKCJyZXZpZXdl
ZCBwYXRjaCIsIGxlbihwYXRjaGVzKSksIGJ1Z19pZCkpCiAgICAgICAgICAgICByZXR1cm4gTm9u
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68336</attachid>
            <date>2010-09-21 21:15:35 -0700</date>
            <delta_ts>2010-09-28 00:29:50 -0700</delta_ts>
            <desc>Patch with unit test</desc>
            <filename>Bug39136.patch</filename>
            <type>text/plain</type>
            <size>21642</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY4MDExKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMDktMjEgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIHNoZXJpZmZib3QgY2FuJ3Qgcm9sbCBvdXQgc2VjdXJpdHkgcGF0Y2hlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxMzYKKworICAgICAg
ICBNYWtlIFNoZXJpZmZCb3QgZGV0ZXJtaW5lIGlmIGl0J3MgYXV0aG9yaXplZCB0byB2aWV3IGEg
YnVnCisgICAgICAgIHdob3NlIGNoYW5nZSBpdCB3YW50cyB0byByb2xsb3V0IGJlZm9yZSBpdCB0
cmllcyB0byByb2xsb3V0CisgICAgICAgIHRoZSBjaGFuZ2UuCisKKyAgICAgICAgTW9yZW92ZXIs
IG1ha2UgYm90aCB3ZWJraXQtcGF0Y2ggYW5kIFNoZXJpZmZib3QgcHJvdmlkZSBodW1hbi0KKyAg
ICAgICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGV5IGFyZSBub3QgYXV0aG9yaXpl
ZCB0byB2aWV3CisgICAgICAgIGEgYnVnIGFuZCB3aGVuIGEgYnVnIG51bWJlciBpcyBpbnZhbGlk
LgorCisgICAgICAgIEN1cnJlbnRseSwgU2hlcmlmZmJvdCBkb2VzIG5vdCBwYXJzZSBCdWd6aWxs
YSBidWdzIGZvcgorICAgICAgICA8YnVnIGVycm9yPSIuLi4iPiwgd2hpY2ggaW5kaWNhdGVzIGFu
IGVycm9yIHdoZW4gcmV0cmlldmluZworICAgICAgICBhIGJ1Zy4gSW4gcGFydGljdWxhciwgZXJy
b3I9Ik5vdFBlcm1pdHRlZCIgaWYgYSBwZXJzb24gKG9yIGJvdCkKKyAgICAgICAgaXMgbm90IGF1
dGhvcml6ZWQgdG8gdmlldyBhIGJ1Zy4gRm9yIHN1Y2ggZXJyb3I9Ik5vdFBlcm1pdHRlZCIgYnVn
cywKKyAgICAgICAgU2hlcmlmZmJvdCByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gcGFyc2luZyB0
aGUgYnVnIHJlcG9ydCBhbmQKKyAgICAgICAgdGhpcyBleGNlcHRpb24gZG9lcyBub3QgZXhwbGlj
aXRseSBpbmRpY2F0ZSBTaGVyaWZmYm90J3MgbGFjaworICAgICAgICBvZiBhdXRob3JpemF0aW9u
LiBJbnN0ZWFkLCBTaGVyaWZmYm90IHNob3VsZCBleHBsaWNpdGx5IGNoZWNrCisgICAgICAgIGZv
ciB0aGUgcHJlc2VuY2UgPGJ1ZyBlcnJvcj0iLi4uIj4gYmVmb3JlIG9wZXJhdGluZyBvbiBhIGJ1
ZworICAgICAgICBhbmQgZXJyb3Igd2l0aCBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaWYgaXQn
cyBub3QgcGVybWl0dGVkCisgICAgICAgIHRvIHZpZXcgaXQuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEucHk6IEFkZGVkIEJ1Z3ppbGxhRXJyb3IgY2xh
c3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhX3VuaXR0
ZXN0LnB5OgorICAgICAgICAgIC0gQWRkZWQgdW5pdCB0ZXN0IHRlc3RfYnVnX3BhcnNpbmdfZm9y
X2J1Z3ppbGxhX25vdF9wZXJtaXR0ZWRfZXJyb3IoKS4KKyAgICAgICAgICAtIEFkZGVkIHVuaXQg
dGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9ub3RfZm91bmRfZXJyb3IoKS4KKyAg
ICAgICAgICAtIEFkZGVkIHVuaXQgdGVzdCB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9p
bnZhbGlkX2J1Z19pZF9lcnJvcigpLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9i
b3Qvc2hlcmlmZi5weTogTW9kaWZpZWQgdG8gY2F0Y2ggQnVnemlsbGFFcnJvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWQucHk6IERpdHRvLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHk6IERpdHRvLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWQucHk6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jbG9zZWJ1Zy5weTogRGl0
dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL29ic29sZXRlcGF0Y2hl
cy5weTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3ByZXBh
cmVjaGFuZ2Vsb2cucHk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9z
dGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld2VyLnB5OiBEaXR0by4KKwogMjAxMC0wOS0y
MSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCBidWlsZCBmaXguCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9uZXQvYnVnemlsbGEucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vbmV0L2J1Z3ppbGxhLnB5CShyZXZpc2lvbiA2ODAwOCkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWd6aWxsYS5weQkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsMzkgQEAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxs
ZWQubQogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0
aWZ1bFNvdXAsIFNvdXBTdHJhaW5lcgogCiAKK2NsYXNzIEJ1Z3ppbGxhRXJyb3IoRXhjZXB0aW9u
KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWdfaWQsIGVycm9yX21lc3NhZ2U9Tm9uZSk6
CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlcnJvcl9tZXNzYWdlKQorICAgICAg
ICBzZWxmLmJ1Z19pZCA9IGJ1Z19pZAorICAgICAgICBzZWxmLmVycm9yX21lc3NhZ2UgPSBlcnJv
cl9tZXNzYWdlCisKKyAgICBkZWYgYnVnX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5i
dWdfaWQKKworICAgIGRlZiBlcnJvcl9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5lcnJvcl9tZXNzYWdlCisKKyAgICAjIFRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZXMgd2Vy
ZSBleHRyYWN0ZWQgZnJvbSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYnVnemlsbGEuZHRkPiBh
cyBvZiAwOS8xMi8yMDEwLgorCisgICAgZGVmIGlzX2ludmFsaWRfYnVnX2lkKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5lcnJvcl9tZXNzYWdlID09ICJJbnZhbGlkQnVnSWQiCisKKyAgICBk
ZWYgaXNfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcl9tZXNzYWdl
ID09ICJOb3RGb3VuZCIKKworICAgIGRlZiBpc19ub3RfcGVybWl0dGVkX3RvX3ZpZXdfYnVnKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcl9tZXNzYWdlID09ICJOb3RQZXJtaXR0ZWQi
CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19pbnZhbGlkX2J1
Z19pZCgpOgorICAgICAgICAgICAgcmV0dXJuICJCdWcgJXMgaXMgaW52YWxpZCIgJSBzZWxmLmJ1
Z19pZAorICAgICAgICBpZiBzZWxmLmlzX25vdF9mb3VuZCgpOgorICAgICAgICAgICAgcmV0dXJu
ICJCdWcgJXMgZG9lcyBub3QgZXhpc3QiICUgc2VsZi5idWdfaWQKKyAgICAgICAgaWYgc2VsZi5p
c19ub3RfcGVybWl0dGVkX3RvX3ZpZXdfYnVnKCk6CisgICAgICAgICAgICByZXR1cm4gIk5vdCBw
ZXJtaXR0ZWQgdG8gdmlldyBidWcgJXMiICUgc2VsZi5idWdfaWQKKyAgICAgICAgcmV0dXJuICJC
dWd6aWxsYSBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGVuIHByb2Nlc3NpbmcgYnVnICVzOiAnJXMn
IiAlIChzZWxmLmJ1Z19pZCwgc2VsZi5lcnJvcl9tZXNzYWdlKQorCiBkZWYgcGFyc2VfYnVnX2lk
KG1lc3NhZ2UpOgogICAgIGlmIG5vdCBtZXNzYWdlOgogICAgICAgICByZXR1cm4gTm9uZQpAQCAt
NTEwLDggKzU0MywxMiBAQCBjbGFzcyBCdWd6aWxsYShvYmplY3QpOgogCiAgICAgZGVmIF9wYXJz
ZV9idWdfcGFnZShzZWxmLCBwYWdlKToKICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAocGFn
ZSkKKyAgICAgICAgYnVnX2VsZW1lbnQgPSBzb3VwLmZpbmQoImJ1ZyIpCisgICAgICAgIGJ1Z19p
ZCA9IHNvdXAuZmluZCgiYnVnX2lkIikuc3RyaW5nCisgICAgICAgIGlmIGJ1Z19lbGVtZW50Lmhh
c19rZXkoImVycm9yIik6CisgICAgICAgICAgICByYWlzZSBCdWd6aWxsYUVycm9yKGJ1Z19pZCwg
YnVnX2VsZW1lbnRbImVycm9yIl0pCiAgICAgICAgIGJ1ZyA9IHt9Ci0gICAgICAgIGJ1Z1siaWQi
XSA9IGludChzb3VwLmZpbmQoImJ1Z19pZCIpLnN0cmluZykKKyAgICAgICAgYnVnWyJpZCJdID0g
aW50KGJ1Z19pZCkKICAgICAgICAgYnVnWyJ0aXRsZSJdID0gc2VsZi5fc3RyaW5nX2NvbnRlbnRz
KHNvdXAuZmluZCgic2hvcnRfZGVzYyIpKQogICAgICAgICBidWdbImJ1Z19zdGF0dXMiXSA9IHNl
bGYuX3N0cmluZ19jb250ZW50cyhzb3VwLmZpbmQoImJ1Z19zdGF0dXMiKSkKICAgICAgICAgYnVn
WyJyZXBvcnRlcl9lbWFpbCJdID0gc2VsZi5fc3RyaW5nX2NvbnRlbnRzKHNvdXAuZmluZCgicmVw
b3J0ZXIiKSkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9i
dWd6aWxsYV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGFfdW5pdHRlc3QucHkJKHJldmlzaW9uIDY4MDA4KQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3ppbGxhX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGltcG9ydCB1bml0dGVzdAog
aW1wb3J0IGRhdGV0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZy5jb21taXR0ZXJz
IGltcG9ydCBDb21taXR0ZXJMaXN0LCBSZXZpZXdlciwgQ29tbWl0dGVyCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhLCBCdWd6aWxsYVF1ZXJpZXMsIHBh
cnNlX2J1Z19pZCwgQ29tbWl0dGVyVmFsaWRhdG9yLCBCdWcKK2Zyb20gd2Via2l0cHkuY29tbW9u
Lm5ldC5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEsIEJ1Z3ppbGxhRXJyb3IsIEJ1Z3ppbGxhUXVl
cmllcywgcGFyc2VfYnVnX2lkLCBDb21taXR0ZXJWYWxpZGF0b3IsIEJ1ZwogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20g
d2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiBmcm9tIHdlYmtpdHB5LnRoaXJk
cGFydHkuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVsU291cApAQCAtNzIsNiArNzIsMTQg
QEAgY2xhc3MgQ29tbWl0dGVyVmFsaWRhdG9yVGVzdCh1bml0dGVzdC5UZQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHZhbGlkYXRvci5fZmxhZ19wZXJtaXNzaW9uX3JlamVjdGlvbl9tZXNzYWdl
KCJmb29AZm9vLmNvbSIsICJyZXZpZXciKSwgZXhwZWN0ZWRfbWVzc3NhZ2UpCiAKIAorY2xhc3Mg
QnVnemlsbGFFcnJvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0cihz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCdWd6aWxsYUVycm9yKGJ1Z19pZD0xMjM0
NSwgZXJyb3JfbWVzc2FnZT0iSW52YWxpZEJ1Z0lkIikuX19zdHJfXygpLCAiQnVnIDEyMzQ1IGlz
IGludmFsaWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJ1Z3ppbGxhRXJyb3IoYnVnX2lk
PTEyMzQ1LCBlcnJvcl9tZXNzYWdlPSJOb3RGb3VuZCIpLl9fc3RyX18oKSwgIkJ1ZyAxMjM0NSBk
b2VzIG5vdCBleGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQnVnemlsbGFFcnJvcihi
dWdfaWQ9MTIzNDUsIGVycm9yX21lc3NhZ2U9Ik5vdFBlcm1pdHRlZCIpLl9fc3RyX18oKSwgIk5v
dCBwZXJtaXR0ZWQgdG8gdmlldyBidWcgMTIzNDUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KEJ1Z3ppbGxhRXJyb3IoYnVnX2lkPTEyMzQ1LCBlcnJvcl9tZXNzYWdlPSJUaGluZ2FtYWppZyBi
cm9rZSIpLl9fc3RyX18oKSwgIkJ1Z3ppbGxhIGVuY291bnRlcmVkIGFuIGVycm9yIHdoZW4gcHJv
Y2Vzc2luZyBidWcgMTIzNDU6ICdUaGluZ2FtYWppZyBicm9rZSciKQorCisKIGNsYXNzIEJ1Z3pp
bGxhVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgX2V4YW1wbGVfYXR0YWNobWVudCA9ICcn
JwogICAgICAgICA8YXR0YWNobWVudApAQCAtMTQxLDYgKzE0OSw1NyBAQCBjbGFzcyBCdWd6aWxs
YVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25l
LCBwYXJzZV9idWdfaWQoImh0dHA6Ly93d3cud2Via2l0Lm9yZy9iLzEyMzQ1IikpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHBhcnNlX2J1Z19pZCgiaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/Y3R5cGU9eG1sJmlkPTEyMzQ1IikpCiAKKyAgICBfZXhhbXBsZV91
bmF1dGhvcml6ZWRfYnVnID0gIiIiCisgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
VVRGLTgiIHN0YW5kYWxvbmU9InllcyIgPz4KKyAgICA8IURPQ1RZUEUgYnVnemlsbGEgU1lTVEVN
ICJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9idWd6aWxsYS5kdGQiPgorCisgICAgPGJ1Z3ppbGxh
IHZlcnNpb249IjMuMi4zIgorICAgICAgICAgICAgICB1cmxiYXNlPSJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy8iCisgICAgICAgICAgICAgIG1haW50YWluZXI9ImFkbWluQHdlYmtpdC5vcmciCisg
ICAgICAgICAgICAgIGV4cG9ydGVyPSJ1bmF1dGhvcml6ZWRfcGVyc29uQGV4YW1wbGUuY29tIgor
ICAgID4KKworICAgICAgICA8YnVnIGVycm9yPSJOb3RQZXJtaXR0ZWQiPgorICAgICAgICAgIDxi
dWdfaWQ+MTIzNDU8L2J1Z19pZD4KKyAgICAgICAgPC9idWc+CisKKyAgICA8L2J1Z3ppbGxhPgor
ICAgICIiIgorCisgICAgX2V4YW1wbGVfbm90X2ZvdW5kX2J1ZyA9ICIiIgorICAgIDw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiID8+CisgICAgPCFE
T0NUWVBFIGJ1Z3ppbGxhIFNZU1RFTSAiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYnVnemlsbGEu
ZHRkIj4KKworICAgIDxidWd6aWxsYSB2ZXJzaW9uPSIzLjIuMyIKKyAgICAgICAgICAgICAgdXJs
YmFzZT0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIgorICAgICAgICAgICAgICBtYWludGFpbmVy
PSJhZG1pbkB3ZWJraXQub3JnIgorICAgICAgICAgICAgICBleHBvcnRlcj0idW5hdXRob3JpemVk
X3BlcnNvbkBleGFtcGxlLmNvbSIKKyAgICA+CisKKyAgICAgICAgPGJ1ZyBlcnJvcj0iTm90Rm91
bmQiPgorICAgICAgICAgIDxidWdfaWQ+MTIzNDU8L2J1Z19pZD4KKyAgICAgICAgPC9idWc+CisK
KyAgICA8L2J1Z3ppbGxhPgorICAgICIiIgorCisgICAgX2V4YW1wbGVfaW52YWxpZF9idWdfaWRf
YnVnID0gIiIiCisgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5k
YWxvbmU9InllcyIgPz4KKyAgICA8IURPQ1RZUEUgYnVnemlsbGEgU1lTVEVNICJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9idWd6aWxsYS5kdGQiPgorCisgICAgPGJ1Z3ppbGxhIHZlcnNpb249IjMu
Mi4zIgorICAgICAgICAgICAgICB1cmxiYXNlPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iCisg
ICAgICAgICAgICAgIG1haW50YWluZXI9ImFkbWluQHdlYmtpdC5vcmciCisgICAgICAgICAgICAg
IGV4cG9ydGVyPSJ1bmF1dGhvcml6ZWRfcGVyc29uQGV4YW1wbGUuY29tIgorICAgID4KKworICAg
ICAgICA8YnVnIGVycm9yPSJJbnZhbGlkQnVnSWQiPgorICAgICAgICAgIDxidWdfaWQ+QTwvYnVn
X2lkPgorICAgICAgICA8L2J1Zz4KKworICAgIDwvYnVnemlsbGE+CisgICAgIiIiCisKICAgICBf
ZXhhbXBsZV9idWcgPSAiIiIKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBz
dGFuZGFsb25lPSJ5ZXMiID8+CiA8IURPQ1RZUEUgYnVnemlsbGEgU1lTVEVNICJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9idWd6aWxsYS5kdGQiPgpAQCAtMjI4LDYgKzI4NywzMyBAQCBaRVpwYm1s
emFFeHZZV1JYYVhSb1VtVmhjMjl1T25KbFlYTnZibDA3CiAgICAgICAgIH1dLAogICAgIH0KIAor
ICAgIGRlZiB0ZXN0X2J1Z19wYXJzaW5nX2Zvcl9idWd6aWxsYV9ub3RfcGVybWl0dGVkX2Vycm9y
KHNlbGYpOgorICAgICAgICBkaWRQYXNzVGVzdCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIEJ1Z3ppbGxhKCkuX3BhcnNlX2J1Z19wYWdlKHNlbGYuX2V4YW1wbGVfdW5hdXRob3Jp
emVkX2J1ZykKKyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZS5pc19ub3RfcGVybWl0dGVkX3RvX3ZpZXdfYnVnKCkpCisgICAgICAg
ICAgICBkaWRQYXNzVGVzdCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpZFBhc3NU
ZXN0LCAiRmFpbGVkIHRvIHJhaXNlIGV4Y2VwdGlvbi4iKQorCisgICAgZGVmIHRlc3RfYnVnX3Bh
cnNpbmdfZm9yX2J1Z3ppbGxhX25vdF9mb3VuZF9lcnJvcihzZWxmKToKKyAgICAgICAgZGlkUGFz
c1Rlc3QgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBCdWd6aWxsYSgpLl9wYXJz
ZV9idWdfcGFnZShzZWxmLl9leGFtcGxlX25vdF9mb3VuZF9idWcpCisgICAgICAgIGV4Y2VwdCBC
dWd6aWxsYUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuaXNfbm90X2Zv
dW5kKCkpCisgICAgICAgICAgICBkaWRQYXNzVGVzdCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGRpZFBhc3NUZXN0LCAiRmFpbGVkIHRvIHJhaXNlIGV4Y2VwdGlvbi4iKQorCisgICAg
ZGVmIHRlc3RfYnVnX3BhcnNpbmdfZm9yX2J1Z3ppbGxhX2ludmFsaWRfYnVnX2lkX2Vycm9yKHNl
bGYpOgorICAgICAgICBkaWRQYXNzVGVzdCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIEJ1Z3ppbGxhKCkuX3BhcnNlX2J1Z19wYWdlKHNlbGYuX2V4YW1wbGVfaW52YWxpZF9idWdf
aWRfYnVnKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShlLmlzX2ludmFsaWRfYnVnX2lkKCkpCisgICAgICAgICAgICBkaWRQYXNz
VGVzdCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpZFBhc3NUZXN0LCAiRmFpbGVk
IHRvIHJhaXNlIGV4Y2VwdGlvbi4iKQorCiAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0
byBhIGNlbnRyYWwgbG9jYXRpb24gYW5kIGJlIHNoYXJlZCBieSBtb3JlIHVuaXQgdGVzdHMuCiAg
ICAgZGVmIF9hc3NlcnRfZGljdGlvbmFyaWVzX2VxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0ZWQp
OgogICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgcGFyc2luZyBtb3JlIG9yIGxlc3MgdGhh
biB3ZSBleHBlY3QKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3Qv
c2hlcmlmZi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvYm90L3NoZXJpZmYucHkJKHJldmlzaW9uIDY4MDA4KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2JvdC9zaGVyaWZmLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNo
YW5nZWxvZyBpbXBvcnQgdmlld19zb3VyY2VfdXJsCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQu
YnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1
Z3ppbGxhIGltcG9ydCBCdWd6aWxsYSwgQnVnemlsbGFFcnJvciwgcGFyc2VfYnVnX2lkCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBsb2cKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBm
cm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgam9pbl93aXRoX3NlcGFyYXRvcnMKQEAg
LTY0LDYgKzY0LDE0IEBAIGNsYXNzIFNoZXJpZmYob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNl
IFNjcmlwdEVycm9yKG1lc3NhZ2U9IlRoZSByb2xsb3V0IHJlYXNvbiBtYXkgbm90IGJlZ2luICIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIC0gKFwiJXNcIikuIiAlIHJvbGxv
dXRfcmVhc29uKQogCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Rvb2wuYnVncy5m
ZXRjaF9idWcoc2VsZi5fdG9vbC5jaGVja291dCgpLmNvbW1pdF9pbmZvX2Zvcl9yZXZpc2lvbihz
dm5fcmV2aXNpb24pKQorICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAg
ICAgIGlmIChlLmlzX25vdF9wZXJtaXR0ZWRfdG9fdmlld19idWcoKSk6CisgICAgICAgICAgICAg
ICAgU2NyaXB0RXJyb3IobWVzc2FnZT0iU2hlcmlmZkJvdCBpcyBub3QgYXV0aG9yaXplZCB0byB2
aWV3ICVzLiIgJSBzZWxmLl90b29sLmJ1Z3MuYnVnX3VybF9mb3JfYnVnX2lkKGUuYnVnX2lkKCkp
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBTY3JpcHRFcnJvcihtZXNzYWdl
PSJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBjb3JyZXNwb25kaW5nIGJ1ZyBmb3IgciVzLiIgJSBz
dm5fcmV2aXNpb24pCisKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fc2hlcmlmZmJvdC5ydW5fd2Vi
a2l0X3BhdGNoKFsKICAgICAgICAgICAgICJjcmVhdGUtcm9sbG91dCIsCiAgICAgICAgICAgICAi
LS1mb3JjZS1jbGVhbiIsCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvZG93bmxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkLnB5CShyZXZpc2lvbiA2ODAwOCkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZC5weQkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29w
dGlvbgogaW1wb3J0IHdlYmtpdHB5LnRvb2wuc3RlcHMgYXMgc3RlcHMKIAogZnJvbSB3ZWJraXRw
eS5jb21tb24uY2hlY2tvdXQuY2hhbmdlbG9nIGltcG9ydCBDaGFuZ2VMb2csIHZpZXdfc291cmNl
X3VybAorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYUVy
cm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRF
cnJvcgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFic3RyYWN0c2VxdWVuY2VkY29tbWFu
ZCBpbXBvcnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21tYW5kCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29t
bWFuZHMuc3RlcHNlcXVlbmNlIGltcG9ydCBTdGVwU2VxdWVuY2UKQEAgLTE1NywxNiArMTU4LDMx
IEBAIGNsYXNzIEFic3RyYWN0UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZChBYnMKIAogY2xhc3MgUHJv
Y2Vzc0F0dGFjaG1lbnRzTWl4aW4ob2JqZWN0KToKICAgICBkZWYgX2ZldGNoX2xpc3Rfb2ZfcGF0
Y2hlc190b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICByZXR1
cm4gbWFwKGxhbWJkYSBwYXRjaF9pZDogdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQocGF0Y2hf
aWQpLCBhcmdzKQorICAgICAgICBhbGxfcGF0Y2hlcyA9IFtdCisgICAgICAgIGZvciBwYXRjaF9p
ZCBpbiBhcmdzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGFsbF9wYXRjaGVz
LmFwcGVuZCh0b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChwYXRjaF9pZCkpCisgICAgICAgICAg
ICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25zLm5v
bl9pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAg
ICAgIGxvZygiRmFpbGVkIHRvIGZldGNoIGF0dGFjaG1lbnQgJXM6ICclcyc7IGlnbm9yaW5nLiIg
JSAocGF0Y2hfaWQsIGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldHVy
biBhbGxfcGF0Y2hlcwogCiAKIGNsYXNzIFByb2Nlc3NCdWdzTWl4aW4ob2JqZWN0KToKICAgICBk
ZWYgX2ZldGNoX2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3Ms
IHRvb2wpOgogICAgICAgICBhbGxfcGF0Y2hlcyA9IFtdCiAgICAgICAgIGZvciBidWdfaWQgaW4g
YXJnczoKLSAgICAgICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCku
cmV2aWV3ZWRfcGF0Y2hlcygpCi0gICAgICAgICAgICBsb2coIiVzIGZvdW5kIG9uIGJ1ZyAlcy4i
ICUgKHBsdXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4ocGF0Y2hlcykpLCBidWdfaWQpKQot
ICAgICAgICAgICAgYWxsX3BhdGNoZXMgKz0gcGF0Y2hlcworICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19pZCkucmV2aWV3
ZWRfcGF0Y2hlcygpCisgICAgICAgICAgICAgICAgbG9nKCIlcyBmb3VuZCBvbiBidWcgJXMuIiAl
IChwbHVyYWxpemUoInJldmlld2VkIHBhdGNoIiwgbGVuKHBhdGNoZXMpKSwgYnVnX2lkKSkKKyAg
ICAgICAgICAgICAgICBhbGxfcGF0Y2hlcyArPSBwYXRjaGVzCisgICAgICAgICAgICBleGNlcHQg
QnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25zLm5vbl9pbnRlcmFj
dGl2ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAgICAgIGxvZygi
JyVzJzsgaWdub3JpbmcuIiAlIGUpCisgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAg
cmV0dXJuIGFsbF9wYXRjaGVzCiAKIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3F1ZXVlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzLnB5CShyZXZpc2lvbiA2ODAwOCkKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRp
bWUKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBmcm9tIFN0cmluZ0lPIGltcG9y
dCBTdHJpbmdJTwogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IENv
bW1pdHRlclZhbGlkYXRvcgorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9y
dCBCdWd6aWxsYUVycm9yLCBDb21taXR0ZXJWYWxpZGF0b3IKIGZyb20gd2Via2l0cHkuY29tbW9u
Lm5ldC5zdGF0dXNzZXJ2ZXIgaW1wb3J0IFN0YXR1c1NlcnZlcgogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGVycm9yLCBsb2cKQEAgLTQzNSw3
ICs0MzUsMTQgQEAgY2xhc3MgQWJzdHJhY3RSZXZpZXdRdWV1ZShBYnN0cmFjdFBhdGNoUQogICAg
IGRlZiBuZXh0X3dvcmtfaXRlbShzZWxmKToKICAgICAgICAgcGF0Y2hfaWQgPSBzZWxmLl9wYXRj
aGVzLm5leHQoKQogICAgICAgICBpZiBwYXRjaF9pZDoKLSAgICAgICAgICAgIHJldHVybiBzZWxm
Ll90b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChwYXRjaF9pZCkKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQo
cGF0Y2hfaWQpCisgICAgICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAg
ICAgICAgICAjIFRoaXMgbWF5IG9jY3VyIGlmIHRoZSBidWcgd2l0aCBhdHRhY2htZW50IElEIHBh
dGNoX2lkIGJlY29tZXMgYSBzZWN1cml0eQorICAgICAgICAgICAgICAgICMgYnVnIGJldHdlZW4g
dGhlIHRpbWUgd2UgZmV0Y2hlZCBhbGwgYXR0YWNobWVudCBJRHMgZnJvbSB0aGUgcmV2aWV3IHF1
ZXVlCisgICAgICAgICAgICAgICAgIyBhbmQgbm93LiBTbywgd2UgaWdub3JlIHRoaXMgYXR0YWNo
bWVudC4KKyAgICAgICAgICAgICAgICBsb2coIiclcyc7IGlnbm9yaW5nLiIgJSBlKQorICAgICAg
ICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBzaG91bGRfcHJvY2VlZF93aXRoX3dvcmtfaXRlbShz
ZWxmLCBwYXRjaCk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFz
c2VzIG11c3QgaW1wbGVtZW50IgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3VwbG9hZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvdXBsb2FkLnB5CShyZXZpc2lvbiA2ODAwOCkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWQucHkJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRp
b24KIGltcG9ydCB3ZWJraXRweS50b29sLnN0ZXBzIGFzIHN0ZXBzCiAKIGZyb20gd2Via2l0cHku
Y29tbW9uLmNvbmZpZy5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0Ci1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAorZnJvbSB3ZWJraXRw
eS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYUVycm9yLCBwYXJzZV9idWdfaWQK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS51c2VyIGltcG9ydCBVc2VyCiBmcm9tIHdlYmtp
dHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLmFic3RyYWN0c2VxdWVuY2VkY29tbWFuZCBpbXBvcnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21t
YW5kCkBAIC04Miw3ICs4MiwxNCBAQCBjbGFzcyBDbGVhblBlbmRpbmdDb21taXQoQWJzdHJhY3RE
ZWNsYXJhCiAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CiAgICAg
ICAgIGNvbW1pdHRlcnMgPSBDb21taXR0ZXJMaXN0KCkKICAgICAgICAgZm9yIGJ1Z19pZCBpbiB0
b29sLmJ1Z3MucXVlcmllcy5mZXRjaF9idWdfaWRzX2Zyb21fcGVuZGluZ19jb21taXRfbGlzdCgp
OgotICAgICAgICAgICAgYnVnID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX2J1ZyhidWdfaWQpCisg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnVnID0gc2VsZi5fdG9vbC5idWdzLmZl
dGNoX2J1ZyhidWdfaWQpCisgICAgICAgICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAg
ICAgICAgICAgICAgICAjIFRoaXMgbWF5IG9jY3VyIGlmIHRoZSBidWcgYmVjb21lcyBhIHNlY3Vy
aXR5IGJ1ZyBiZXR3ZWVuIHRoZSB0aW1lCisgICAgICAgICAgICAgICAgIyB3ZSBmZXRjaGVkIGl0
cyBJRCBmcm9tIHRoZSBwZW5kaW5nIGNvbW1pdCBsaXN0IGFuZCBub3cuIFdlIGlnbm9yZQorICAg
ICAgICAgICAgICAgICMgdGhpcyBidWcuCisgICAgICAgICAgICAgICAgbG9nKGUpCisgICAgICAg
ICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHBhdGNoZXMgPSBidWcucGF0Y2hlcyhpbmNs
dWRlX29ic29sZXRlPVRydWUpCiAgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKICAg
ICAgICAgICAgICAgICBmbGFnc190b19jbGVhciA9IHNlbGYuX2ZsYWdzX3RvX2NsZWFyX29uX3Bh
dGNoKHBhdGNoKQpAQCAtMTA0LDcgKzExMSwxMSBAQCBjbGFzcyBBc3NpZ25Ub0NvbW1pdHRlcihB
YnN0cmFjdERlY2xhcmF0CiAKICAgICBkZWYgX2Fzc2lnbl9idWdfdG9fbGFzdF9wYXRjaF9hdHRh
Y2hlcihzZWxmLCBidWdfaWQpOgogICAgICAgICBjb21taXR0ZXJzID0gQ29tbWl0dGVyTGlzdCgp
Ci0gICAgICAgIGJ1ZyA9IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9idWcoYnVnX2lkKQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBidWcgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfYnVnKGJ1Z19p
ZCkKKyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6CisgICAgICAgICAgICBsb2coZSkK
KyAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBub3QgYnVnLmlzX3VuYXNzaWduZWQoKToK
ICAgICAgICAgICAgIGFzc2lnbmVkX3RvX2VtYWlsID0gYnVnLmFzc2lnbmVkX3RvX2VtYWlsKCkK
ICAgICAgICAgICAgIGxvZygiQnVnICVzIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gJXMgKCVzKS4i
ICUgKGJ1Z19pZCwgYXNzaWduZWRfdG9fZW1haWwsIGNvbW1pdHRlcnMuY29tbWl0dGVyX2J5X2Vt
YWlsKGFzc2lnbmVkX3RvX2VtYWlsKSkpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvc3RlcHMvY2xvc2VidWcucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2Nsb3NlYnVnLnB5CShyZXZpc2lvbiA2ODAwOCkKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jbG9zZWJ1Zy5weQkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMu
YWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKIGZyb20gd2Via2l0cHkudG9vbC5zdGVw
cy5vcHRpb25zIGltcG9ydCBPcHRpb25zCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemls
bGEgaW1wb3J0IEJ1Z3ppbGxhRXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXBy
ZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGxvZwogCiAKQEAgLTQzLDcgKzQ0LDExIEBAIGNsYXNzIENs
b3NlQnVnKEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyBDaGVj
ayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHI/IG9yIHIrIHBhdGNoZXMgb24gdGhlIGJ1ZyBi
ZWZvcmUgY2xvc2luZy4KICAgICAgICAgIyBBc3N1bWUgdGhhdCByLSBwYXRjaGVzIGFyZSBqdXN0
IHByZXZpb3VzIHBhdGNoZXMgc29tZW9uZSBmb3Jnb3QgdG8gb2Jzb2xldGUuCi0gICAgICAgIHBh
dGNoZXMgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfYnVnKHN0YXRlWyJwYXRjaCJdLmJ1Z19pZCgp
KS5wYXRjaGVzKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rv
b2wuYnVncy5mZXRjaF9idWcoc3RhdGVbInBhdGNoIl0uYnVnX2lkKCkpLnBhdGNoZXMoKQorICAg
ICAgICBleGNlcHQgQnVnemlsbGFFcnJvciwgZToKKyAgICAgICAgICAgIGxvZyhlKQorICAgICAg
ICAgICAgcmV0dXJuCiAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgogICAgICAgICAgICAg
aWYgcGF0Y2gucmV2aWV3KCkgPT0gIj8iIG9yIHBhdGNoLnJldmlldygpID09ICIrIjoKICAgICAg
ICAgICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50ICVzIGhhcyBy
ZXZpZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxhbmQgZnJvbSB0
aGlzIGJ1Zy4iICUgKHBhdGNoLmJ1Z19pZCgpLCBwYXRjaC5pZCgpLCBwYXRjaC5yZXZpZXcoKSkp
CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvb2Jzb2xldGVw
YXRjaGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zdGVwcy9vYnNvbGV0ZXBhdGNoZXMucHkJKHJldmlzaW9uIDY4MDA4KQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL29ic29sZXRlcGF0Y2hlcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1w
b3J0IHBsdXJhbGl6ZQogZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBv
cnQgQWJzdHJhY3RTdGVwCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMub3B0aW9ucyBpbXBvcnQg
T3B0aW9ucworZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxs
YUVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5nIGlt
cG9ydCBsb2cKIAogCkBAIC00Myw3ICs0NCwxMSBAQCBjbGFzcyBPYnNvbGV0ZVBhdGNoZXMoQWJz
dHJhY3RTdGVwKToKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMub2Jzb2xldGVfcGF0Y2hl
czoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBidWdfaWQgPSBzdGF0ZVsiYnVnX2lkIl0K
LSAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9idWcoYnVnX2lkKS5wYXRj
aGVzKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVn
cy5mZXRjaF9idWcoYnVnX2lkKS5wYXRjaGVzKCkKKyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJy
b3IsIGU6CisgICAgICAgICAgICBsb2coZSkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBp
ZiBub3QgcGF0Y2hlczoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBsb2coIk9ic29sZXRp
bmcgJXMgb24gYnVnICVzIiAlIChwbHVyYWxpemUoIm9sZCBwYXRjaCIsIGxlbihwYXRjaGVzKSks
IGJ1Z19pZCkpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMv
cHJlcGFyZWNoYW5nZWxvZy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZy5weQkocmV2aXNpb24gNjgwMDgpCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvcHJlcGFyZWNoYW5nZWxv
Zy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IG9zCiAKIGZyb20g
d2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoYW5nZWxvZyBpbXBvcnQgQ2hhbmdlTG9nCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhRXJyb3IKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9t
IHdlYmtpdHB5LnRvb2wuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKIGZy
b20gd2Via2l0cHkudG9vbC5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCkBAIC01NCw3ICs1
NSw3IEBAIGNsYXNzIFByZXBhcmVDaGFuZ2VMb2coQWJzdHJhY3RTdGVwKToKICAgICAgICAgICAg
IGNoYW5nZWxvZyA9IENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkKICAgICAgICAgICAgIGlmIG5v
dCBjaGFuZ2Vsb2cubGF0ZXN0X2VudHJ5KCkuYnVnX2lkKCk6CiAgICAgICAgICAgICAgICAgY2hh
bmdlbG9nLnNldF9zaG9ydF9kZXNjcmlwdGlvbl9hbmRfYnVnX3VybCgKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiYnVnX3RpdGxlIiksCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwgImJ1Z190aXRsZSIpLCAgIyBXaWxs
IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBub3QgYXV0aG9yaXplZCB0byByZXRyaWV2ZSB0aGUgYnVn
IHRpdGxlLgogICAgICAgICAgICAgICAgICAgICBzZWxmLl90b29sLmJ1Z3MuYnVnX3VybF9mb3Jf
YnVnX2lkKGJ1Z19pZCkpCiAKICAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJl
dmlld2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zdGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld2VyLnB5CShyZXZpc2lvbiA2ODAwOCkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy91cGRhdGVjaGFuZ2Vs
b2dzd2l0aHJldmlld2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIGZyb20g
d2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoYW5nZWxvZyAKIGZyb20gd2Via2l0cHkudG9vbC5n
cmFtbWFyIGltcG9ydCBwbHVyYWxpemUKIGZyb20gd2Via2l0cHkudG9vbC5zdGVwcy5hYnN0cmFj
dHN0ZXAgaW1wb3J0IEFic3RyYWN0U3RlcAogZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLm9wdGlv
bnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBv
cnQgQnVnemlsbGFFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRf
bG9nZ2luZyBpbXBvcnQgbG9nLCBlcnJvcgogCiBjbGFzcyBVcGRhdGVDaGFuZ2VMb2dzV2l0aFJl
dmlld2VyKEFic3RyYWN0U3RlcCk6CkBAIC00Myw3ICs0NCwxMSBAQCBjbGFzcyBVcGRhdGVDaGFu
Z2VMb2dzV2l0aFJldmlld2VyKEFic3RyCiAgICAgICAgIF0KIAogICAgIGRlZiBfZ3Vlc3NfcmV2
aWV3ZXJfZnJvbV9idWcoc2VsZiwgYnVnX2lkKToKLSAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rv
b2wuYnVncy5mZXRjaF9idWcoYnVnX2lkKS5yZXZpZXdlZF9wYXRjaGVzKCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9idWcoYnVnX2lk
KS5yZXZpZXdlZF9wYXRjaGVzKCkKKyAgICAgICAgZXhjZXB0IEJ1Z3ppbGxhRXJyb3IsIGU6Cisg
ICAgICAgICAgICBsb2coZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGlmIGxl
bihwYXRjaGVzKSAhPSAxOgogICAgICAgICAgICAgbG9nKCIlcyBvbiBidWcgJXMsIGNhbm5vdCBp
bmZlciByZXZpZXdlci4iICUgKHBsdXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4ocGF0Y2hl
cykpLCBidWdfaWQpKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>