<?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>76611</bug_id>
          
          <creation_ts>2012-01-19 01:56:25 -0800</creation_ts>
          <short_desc>Content element should be able to be dynamically added/removed/replaced in a shadow tree.</short_desc>
          <delta_ts>2012-02-01 05:50:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76262</dependson>
    
    <dependson>77529</dependson>
          <blocked>75301</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Shinya Kawanaka">shinyak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>hayato</cc>
    
    <cc>morrita</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>shinyak</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>538559</commentid>
    <comment_count>0</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-19 01:56:25 -0800</bug_when>
    <thetext>When a shadow root exists in an element, the order of attach is:
  (1) attaches all children of the element
  (2) attaches shadow root.

When the shadow tree has a content element, the elements selected by the content element is re-attached in the content element.
Maybe the light children of elements having a shadow tree should be attached only in the shadow tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539401</commentid>
    <comment_count>1</comment_count>
      <attachid>123284</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-20 04:08:13 -0800</bug_when>
    <thetext>Created attachment 123284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539541</commentid>
    <comment_count>2</comment_count>
      <attachid>123284</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-01-20 08:45:05 -0800</bug_when>
    <thetext>Comment on attachment 123284
Patch

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

It looks this is rather complicated than we originally thought...

&gt; Source/WebCore/ChangeLog:8
&gt; +        Children of an element having a shadow root were to be attached in Element::attach(),

How about to say &quot;Each child&quot; instead of &quot;Children&quot;?

&gt; Source/WebCore/ChangeLog:12
&gt; +        a HTMLContentElement must detach them before attaching them.

a -&gt; an

&gt; Source/WebCore/ChangeLog:13
&gt; +

The point here is that we&apos;ve been attaching each light child twice when it has a parent with shadow root.

&gt; Source/WebCore/ChangeLog:17
&gt; +        No new tests, no change in behavior.

You mentioned above that this changes the behavior...

&gt; Source/WebCore/dom/ShadowRoot.cpp:157
&gt; +    Element* host = shadowHost();

We don&apos;t need the |host| local variable.

&gt; Source/WebCore/html/shadow/HTMLContentElement.cpp:81
&gt; +

Seeing this, now I start wondering whether this is correct or not.
What does happen if we remove HTMLContentElement from the shadow tree?
In that case, we will detach the selected nodes regardless that they are staying in the light DOM.
That looks wrong. But it&apos;s not clear what is the right thing to do here...

Apparently we need to do something here. But maybe it&apos;s not dettach(). But I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542082</commentid>
    <comment_count>3</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-25 01:49:23 -0800</bug_when>
    <thetext>I reuse this bug to  track of adding/removing/replacing content element dynamically in a shadow tree.

When removing a content element in a shadow tree, the elements included in the content element are not detached. So they are rendered, though they are light children not included in a content element.

We should reconstruct shadow tree when adding/removing/replacing content element in shadow tree.
To track which elements are attached or not, I want to have light tree to be managed by a shadow root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542084</commentid>
    <comment_count>4</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-25 01:51:14 -0800</bug_when>
    <thetext>This bug does not care about adding/removing/replacing nodes in light child. I will attack the bug in Bug 76262.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542180</commentid>
    <comment_count>5</comment_count>
      <attachid>123920</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-25 04:22:32 -0800</bug_when>
    <thetext>Created attachment 123920
(Fake) Patch for shadow tree recalc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542181</commentid>
    <comment_count>6</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-25 04:24:56 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=123920) [details]
&gt; (Fake) Patch for shadow tree recalc

I wanted to do this, but this doesn&apos;t pass my tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542184</commentid>
    <comment_count>7</comment_count>
      <attachid>123922</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-25 04:27:00 -0800</bug_when>
    <thetext>Created attachment 123922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542186</commentid>
    <comment_count>8</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-25 04:31:12 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=123922) [details]
&gt; Patch

This passes all my tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544851</commentid>
    <comment_count>9</comment_count>
      <attachid>123922</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-01-29 20:16:24 -0800</bug_when>
    <thetext>Comment on attachment 123922
Patch

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

&gt; Source/WebCore/dom/ContainerNode.cpp:790
&gt; +void ContainerNode::attachWithoutChildren()

Could you inline this?

&gt; Source/WebCore/dom/ContainerNode.cpp:806
&gt; +}

And this?

&gt; Source/WebCore/dom/ContainerNode.h:78
&gt; +    void detachWithoutChildren();

&quot;WithoutChildren&quot; sounds a bit confusing as many negative-adjectives are. Maybe attachAsNode() ?

&gt; Source/WebCore/dom/ShadowRoot.h:75
&gt; +    bool m_needsShadowTreeStyleRecalc;

Let&apos;s turn these boolean variables bit-fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544982</commentid>
    <comment_count>10</comment_count>
      <attachid>124516</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-30 03:31:24 -0800</bug_when>
    <thetext>Created attachment 124516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544988</commentid>
    <comment_count>11</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-30 03:36:20 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 123922 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123922&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNode.cpp:790
&gt; &gt; +void ContainerNode::attachWithoutChildren()
&gt; 
&gt; Could you inline this?
&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNode.cpp:806
&gt; &gt; +}
&gt; 
&gt; And this?

Done.

&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNode.h:78
&gt; &gt; +    void detachWithoutChildren();
&gt; 
&gt; &quot;WithoutChildren&quot; sounds a bit confusing as many negative-adjectives are. Maybe attachAsNode() ?

Done.

&gt; 
&gt; &gt; Source/WebCore/dom/ShadowRoot.h:75
&gt; &gt; +    bool m_needsShadowTreeStyleRecalc;
&gt; 
&gt; Let&apos;s turn these boolean variables bit-fields.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545168</commentid>
    <comment_count>12</comment_count>
      <attachid>124516</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-01-30 09:36:44 -0800</bug_when>
    <thetext>Comment on attachment 124516
Patch

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

&gt; Source/WebCore/dom/Element.cpp:945
&gt; +    // When a shadow root exists, attaching all children is due for the shadow root.

Did you mean to say: &quot;When a shadow root exists, it does the work of attaching the children.&quot; perhaps? Otherwise, the comment is a bit unclear.

&gt; Source/WebCore/dom/Element.cpp:947
&gt; +        ContainerNode::attachAsNode();

Can you not just call Node::attach() here?

&gt; Source/WebCore/dom/Element.cpp:978
&gt; +        ContainerNode::detachAsNode();

Node::detach()?

&gt; Source/WebCore/dom/ShadowRoot.h:46
&gt; +    void setNeedsShadowTreeStyleRecalc() { m_needsShadowTreeStyleRecalc = true; }
&gt; +    void clearNeedsShadowTreeStyleRecalc() { m_needsShadowTreeStyleRecalc = false; }
&gt; +    bool needsShadowTreeStyleRecalc() { return m_needsShadowTreeStyleRecalc; }

Usually, we implement inlines as full class function definition right below the class declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545705</commentid>
    <comment_count>13</comment_count>
      <attachid>124654</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-30 18:41:33 -0800</bug_when>
    <thetext>Created attachment 124654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545707</commentid>
    <comment_count>14</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-30 18:42:08 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 124516 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124516&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:945
&gt; &gt; +    // When a shadow root exists, attaching all children is due for the shadow root.
&gt; 
&gt; Did you mean to say: &quot;When a shadow root exists, it does the work of attaching the children.&quot; perhaps? Otherwise, the comment is a bit unclear.

Done.

&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:947
&gt; &gt; +        ContainerNode::attachAsNode();
&gt; 
&gt; Can you not just call Node::attach() here?
&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:978
&gt; &gt; +        ContainerNode::detachAsNode();
&gt; 
&gt; Node::detach()?

Done.

&gt; 
&gt; &gt; Source/WebCore/dom/ShadowRoot.h:46
&gt; &gt; +    void setNeedsShadowTreeStyleRecalc() { m_needsShadowTreeStyleRecalc = true; }
&gt; &gt; +    void clearNeedsShadowTreeStyleRecalc() { m_needsShadowTreeStyleRecalc = false; }
&gt; &gt; +    bool needsShadowTreeStyleRecalc() { return m_needsShadowTreeStyleRecalc; }
&gt; 
&gt; Usually, we implement inlines as full class function definition right below the class declaration.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545936</commentid>
    <comment_count>15</comment_count>
      <attachid>124705</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-31 04:09:44 -0800</bug_when>
    <thetext>Created attachment 124705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545939</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 04:12:44 -0800</bug_when>
    <thetext>Attachment 124705 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
From git://git.webkit.org/WebKit
   148477e..09fbdf8  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 106352 = 148477e5d717c315b77d4ba9b95d975c9bae1c82
r106353 = c3d2bcbb9a713bb3fe06174be7b46d706f6ae407
r106354 = 09fbdf8bc1525cf6c284e230088f23103db232bd
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546191</commentid>
    <comment_count>17</comment_count>
      <attachid>124705</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-01-31 10:13:28 -0800</bug_when>
    <thetext>Comment on attachment 124705
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +          Attaches only child elements if they are not attached.

&quot;only&quot; is in the wrong place here. Should be &quot;Attaches child elements only if they are not attached&quot;.

&gt; Source/WebCore/ChangeLog:21
&gt; +          Detaches only child elements if they are attached.

ditto.

&gt; Source/WebCore/dom/Element.cpp:950
&gt; +        attachChildrenIfNotAttached();

Why are we attaching children anyway here? Can you explain?

&gt; Source/WebCore/dom/Element.cpp:976
&gt; +void Element::attachChildrenIfNotAttached()
&gt; +{
&gt; +    for (Node* child = firstChild(); child; child = child-&gt;nextSibling()) {
&gt; +        if (!child-&gt;attached())
&gt; +            child-&gt;attach();
&gt; +    }
&gt; +}

Unless we still need this callsite above, we can probably fold this into reattachChildrenAndShadow()

&gt; Source/WebCore/dom/Element.cpp:998
&gt; +void Element::detachChildrenIfAttached()
&gt; +{
&gt; +    for (Node* child = firstChild(); child; child = child-&gt;nextSibling()) {
&gt; +        if (child-&gt;attached())
&gt; +            child-&gt;detach();
&gt; +    }
&gt; +}

Ditto. While it&apos;s nice to break things up into the functions, the API surface of Element is already ginormous. Perhaps a static local function?

&gt; Source/WebCore/dom/ShadowRoot.cpp:104
&gt; +            host()-&gt;reattachChildrenAndShadow();

reattachChildrenAndShadow() has one callsite and when invoked, reaches back to grab its callee. This seems weird. Can we just unroll this here? Or perhaps make it a local function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546698</commentid>
    <comment_count>18</comment_count>
      <attachid>124862</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-31 17:54:29 -0800</bug_when>
    <thetext>Created attachment 124862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546702</commentid>
    <comment_count>19</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-31 18:02:05 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 124705 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124705&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:19
&gt; &gt; +          Attaches only child elements if they are not attached.
&gt; 
&gt; &quot;only&quot; is in the wrong place here. Should be &quot;Attaches child elements only if they are not attached&quot;.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:21
&gt; &gt; +          Detaches only child elements if they are attached.
&gt; 
&gt; ditto.

They were removed.

&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:950
&gt; &gt; +        attachChildrenIfNotAttached();
&gt; 
&gt; Why are we attaching children anyway here? Can you explain?

I&apos;ve added comments in the patch.

We have to attach children. Some of children are attached in shadow tree (in content element), but there might be unattached children. So attach them here anyway.

&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:976
&gt; &gt; +void Element::attachChildrenIfNotAttached()
&gt; &gt; +{
&gt; &gt; +    for (Node* child = firstChild(); child; child = child-&gt;nextSibling()) {
&gt; &gt; +        if (!child-&gt;attached())
&gt; &gt; +            child-&gt;attach();
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; Unless we still need this callsite above, we can probably fold this into reattachChildrenAndShadow()

Done.

&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:998
&gt; &gt; +void Element::detachChildrenIfAttached()
&gt; &gt; +{
&gt; &gt; +    for (Node* child = firstChild(); child; child = child-&gt;nextSibling()) {
&gt; &gt; +        if (child-&gt;attached())
&gt; &gt; +            child-&gt;detach();
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; Ditto. While it&apos;s nice to break things up into the functions, the API surface of Element is already ginormous. Perhaps a static local function?

Done.

&gt; 
&gt; &gt; Source/WebCore/dom/ShadowRoot.cpp:104
&gt; &gt; +            host()-&gt;reattachChildrenAndShadow();
&gt; 
&gt; reattachChildrenAndShadow() has one callsite and when invoked, reaches back to grab its callee. This seems weird. Can we just unroll this here? Or perhaps make it a local function?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546740</commentid>
    <comment_count>20</comment_count>
      <attachid>124862</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-01-31 19:28:52 -0800</bug_when>
    <thetext>Comment on attachment 124862
Patch

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

&gt; Source/WebCore/dom/Element.cpp:953
&gt; +        // In a shadow tree, some of light children may be attached by &apos;content&apos; element.
&gt; +        // However, when there is no content element or content element does not select
&gt; +        // all light children, we have to attach the rest of light children here.

Won&apos;t this cause the children to appear in rendering? This seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546754</commentid>
    <comment_count>21</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-31 20:02:32 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 124862 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124862&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:953
&gt; &gt; +        // In a shadow tree, some of light children may be attached by &apos;content&apos; element.
&gt; &gt; +        // However, when there is no content element or content element does not select
&gt; &gt; +        // all light children, we have to attach the rest of light children here.
&gt; 
&gt; Won&apos;t this cause the children to appear in rendering? This seems wrong.

No, the children won&apos;t appear in rendering.

In WebCore::NodeRenderingContext, rendering of these elements are skipped.
You can find the code to skip them if m_phase is AttachContentLight.

And let me mention that actually the light children have been attached before this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546755</commentid>
    <comment_count>22</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-01-31 20:03:52 -0800</bug_when>
    <thetext>&gt; And let me mention that actually the light children have been attached before this change.

This means ContainerNode::attach(). It attaches all the children also even if they are light children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546756</commentid>
    <comment_count>23</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-01-31 20:06:27 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; And let me mention that actually the light children have been attached before this change.
&gt; 
&gt; This means ContainerNode::attach(). It attaches all the children also even if they are light children.

Ohhh, I remember now. Apologies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546817</commentid>
    <comment_count>24</comment_count>
      <attachid>124862</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 22:39:25 -0800</bug_when>
    <thetext>Comment on attachment 124862
Patch

Clearing flags on attachment: 124862

Committed r106432: &lt;http://trac.webkit.org/changeset/106432&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546818</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 22:39:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546929</commentid>
    <comment_count>26</comment_count>
      <attachid>124862</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-01 02:06:43 -0800</bug_when>
    <thetext>Comment on attachment 124862
Patch

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

&gt; Source/WebCore/dom/Element.cpp:947
&gt; +        Node::attach();

Wow, here bug is. This should be after parentPusher.push().
Could you write a test to capture this?

&gt; Source/WebCore/dom/ShadowRoot.cpp:177
&gt; +    for (Node* child = host()-&gt;firstChild(); child; child = child-&gt;nextSibling()) {

Could you cache host() value for efficiency?

&gt; Source/WebCore/dom/ShadowRoot.h:77
&gt; +    bool m_needsShadowTreeStyleRecalc : 1;

This flag name looks confusing. What we need is not only recalculating style, but also invoking reattach.
The name should imply the fact.

&gt; Source/WebCore/dom/ShadowRoot.h:98
&gt; +    return m_needsShadowTreeStyleRecalc;

hasContentElement() check could be moved here.

&gt; Source/WebCore/html/shadow/HTMLContentElement.cpp:99
&gt; +        if (root-&gt;shadowHost())

This change is also can be moved to the flag setter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546987</commentid>
    <comment_count>27</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-02-01 03:56:55 -0800</bug_when>
    <thetext>Since rolled out, reopen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546988</commentid>
    <comment_count>28</comment_count>
      <attachid>124924</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-02-01 03:58:32 -0800</bug_when>
    <thetext>Created attachment 124924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547032</commentid>
    <comment_count>29</comment_count>
      <attachid>124924</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 05:50:41 -0800</bug_when>
    <thetext>Comment on attachment 124924
Patch

Clearing flags on attachment: 124924

Committed r106465: &lt;http://trac.webkit.org/changeset/106465&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547033</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 05:50:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123284</attachid>
            <date>2012-01-20 04:08:13 -0800</date>
            <delta_ts>2012-01-25 04:22:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76611-20120120210812.patch</filename>
            <type>text/plain</type>
            <size>7997</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRlNTYwYzY3YzU2MWY2
NmM0MmE4MmFkNDNhNGZjMzIzNGI0ZWU1MS4uYjgxOTMxNjdhNmQzNTBiNTE3NmQ5NDU5ZjQ0YWZj
MzgwNWRkMGQyZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAxLTIwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Jpbmc6
IFJlY29uc2lkZXIgdGhlIGF0dGFjaCBvcmRlciBvZiBsaWdodCBjaGlsZHJlbiB3aGVuIGEgc2hh
ZG93IHRyZWUgZXhpc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY2MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDaGlsZHJlbiBvZiBhbiBlbGVtZW50IGhhdmluZyBhIHNoYWRvdyByb290IHdlcmUg
dG8gYmUgYXR0YWNoZWQgaW4gRWxlbWVudDo6YXR0YWNoKCksCisgICAgICAgIGhvd2V2ZXIgaXQg
aXMgbmF0dXJhbCB0aGF0IHRoZXkgd2VyZSBhdHRhY2hlZCBpbiBhIHNoYWRvdyB0cmVlCisgICAg
ICAgIGJlY2F1c2UgdGhlaXIgc2hvdyBhbmQgbm8gc2hvdyBpcyBkZXRlcm1pbmVkIGluIGEgc2hh
ZG93IHRyZWUuCisgICAgICAgIFNpbmNlIHRoZSBjaGlsZHJlbiB3ZXJlIGF0dGFjaGVkIGluIENv
bnRhaW5lck5vZGU6OmF0dGFjaCgpLAorICAgICAgICBhIEhUTUxDb250ZW50RWxlbWVudCBtdXN0
IGRldGFjaCB0aGVtIGJlZm9yZSBhdHRhY2hpbmcgdGhlbS4KKworICAgICAgICBUaGlzIHBhdGNo
IGNoYW5nZXMgaXRzIGJlaGF2aW9yLiBBbiBlbGVtZW50IGhhdmluZyBhIHNoYWRvdyByb290IGRv
ZXMgbm90IGF0dGFjaCB0aGVpcgorICAgICAgICBjaGlsZHJlbi4gVGhleSBzaG91bGQgYmUgYXR0
YWNoZWQgaW4gYSBzaGFkb3cgdHJlZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5n
ZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmF0dGFjaFdpdGhvdXRDaGlsZHJlbik6CisgICAg
ICAgICAgQXR0YWNoZXMgb25seSBDb250YWluZXJOb2RlLiBEb2VzIG5vdCBhdHRhY2ggaXRzIGNo
aWxkcmVuLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6ZGV0YWNoV2l0aG91dENo
aWxkcmVuKToKKyAgICAgICAgICBEZXRhY2hlcyBvbmx5IENvbnRhaW5lck5vZGUuIERvZXMgbm90
IGRldGFjaCBpdHMgY2hpbGRyZW4uCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRh
Y2gpOgorICAgICAgICAgIElmIEVsZW1lbnQgaGFzIGEgc2hhZG93IHJvb3QsIGF0dGFjaGluZyBj
aGlsZHJlbiBpcyBkdWUgZm9yIHRoZSBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OmRldGFjaCk6CisgICAgICAgICAgSWYgRWxlbWVudCBoYXMgYSBzaGFkb3cgcm9vdCwg
ZGV0YWNoaW5nIGNoaWxkcmVuIGlzIGR1ZSBmb3IgdGhlIHNoYWRvdyByb290LgorICAgICAgICAq
IGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmF0dGFj
aCk6CisgICAgICAgICAgQXR0YWNoZXMgc2hhZG93IGhvc3RzIGNoaWxkcmVuIHdoZW4gdGhleSBh
cmUgbm90IGF0dGFjaGVkIGluIHNoYWRvdyB0cmVlLgorICAgICAgICAgIEl0cyBjaGlsZHJlbiBt
YXkgYmUgYXR0YWNoZWQgaW4gSFRNTENvbnRlbnRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6
U2hhZG93Um9vdDo6ZGV0YWNoKToKKyAgICAgICAgICBEZXRhY2hlcyBzaGFkb3cgaG9zdHMgY2hp
bGRyZW4gd2hlbiB0aGV5IGFyZSBub3QgZGV0YWNoZWQgaW4gc2hhZG93IHRyZWUuCisgICAgICAg
ICAgSXRzIGNoaWxkcmVuIG1heSBiZSBkZXRhY2hlZCBpbiBIVE1MQ29udGVudEVsZW1lbnQuCisg
ICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MQ29u
dGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnRlbnRFbGVtZW50Ojph
dHRhY2gpOgorICAgICAgICAgIERvZXMgbm90IG5lZWQgdG8gYXR0YWNoIGluY2x1ZGVkIGVsZW1l
bnRzLCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhdHRhY2hlZCBpbiBDb250YWluZXJOb2RlIGFueW1v
cmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29udGVudEVsZW1lbnQ6OmRldGFjaCk6CisgICAg
ICAgICAgTmVlZHMgdG8gZGV0YWNoIGluY2x1ZGVkIGVsZW1lbnRzLCBiZWNhdXNlIHRoZXkgd29u
J3QgZGV0YWNoZWQgaW4gQ29udGFpbmVyTm9kZSBhbnltb3JlLgorCiAyMDEyLTAxLTIwICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgU2hhZG93Um9vdC5p
ZGwgd2hpY2ggaXMgZW5hYmxlZCBieSBuZXdseSBpbnRyb2R1Y2VkIFNIQURPV19ET00gZmxhZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCBkNWNkMDliOWZkYWY5OTdmNDc4
MGYyM2YxNjVjYmU3YmNhNDcwOGY2Li5kNGQ0ZjhkZjJiNjc4NzM0ZDg3ZGFhMGY4NDA3Nzg4NDNi
ZDg1ZDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC03ODcsNiArNzg3
LDExIEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCkKICAgICBOb2RlOjphdHRhY2goKTsK
IH0KIAordm9pZCBDb250YWluZXJOb2RlOjphdHRhY2hXaXRob3V0Q2hpbGRyZW4oKQoreworICAg
IE5vZGU6OmF0dGFjaCgpOworfQorCiB2b2lkIENvbnRhaW5lck5vZGU6OmRldGFjaCgpCiB7CiAg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCkBAIC03OTUsNiArODAwLDExIEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6
ZGV0YWNoKCkKICAgICBOb2RlOjpkZXRhY2goKTsKIH0KIAordm9pZCBDb250YWluZXJOb2RlOjpk
ZXRhY2hXaXRob3V0Q2hpbGRyZW4oKQoreworICAgIE5vZGU6OmRldGFjaCgpOworfQorCiB2b2lk
IENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBSZWZQdHI8Tm9k
ZT4gcHJvdGVjdCh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCmluZGV4IDJhNWQ3
M2UzYmEwNDQ2MjQ3YzI4YzEyMjIxNTY4MGQ4ZTg1ZTAzOTcuLjI0ZTFmMTkxZGRiMTQ2YjExN2Vj
NWIwYmRlMWVlNzFjMTQyODYzNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaApAQCAt
NzMsNyArNzMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudChj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgp
IE9WRVJSSURFOworICAgIHZvaWQgYXR0YWNoV2l0aG91dENoaWxkcmVuKCk7CiAgICAgdmlydHVh
bCB2b2lkIGRldGFjaCgpIE9WRVJSSURFOworICAgIHZvaWQgZGV0YWNoV2l0aG91dENoaWxkcmVu
KCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IExheW91dFJlY3QgZ2V0UmVjdCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb2N1cyhib29sID0gdHJ1ZSkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXgg
MzdmYjdhMDU0N2UzMWY5MTkxNmRiODU2ZjMxNDJkNDUzOWM4NzA5MS4uMTQ1NDlkMWM0ODlhZmE2
ODdmMzc0YzMwNzhmN2M0Njc2Y2NiODI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtOTQw
LDE4ICs5NDAsMjAgQEAgdm9pZCBFbGVtZW50OjphdHRhY2goKQogICAgIFJlbmRlcldpZGdldDo6
c3VzcGVuZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXMoKTsKIAogICAgIGNyZWF0ZVJlbmRlcmVySWZO
ZWVkZWQoKTsKLSAgICAKICAgICBTdHlsZVNlbGVjdG9yUGFyZW50UHVzaGVyIHBhcmVudFB1c2hl
cih0aGlzKTsKIAotICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAgICAgIHBhcmVudFB1c2hlci5w
dXNoKCk7Ci0gICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7Ci0KKyAgICAvLyBXaGVuIGEgc2hh
ZG93IHJvb3QgZXhpc3RzLCBhdHRhY2hpbmcgYWxsIGNoaWxkcmVuIGlzIGR1ZSBmb3IgdGhlIHNo
YWRvdyByb290LgogICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBzaGFkb3dSb290KCkpIHsK
KyAgICAgICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoV2l0aG91dENoaWxkcmVuKCk7CiAgICAgICAg
IHBhcmVudFB1c2hlci5wdXNoKCk7CiAgICAgICAgIHNoYWRvdy0+YXR0YWNoKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHBhcmVudFB1c2hl
ci5wdXNoKCk7CisgICAgICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwogICAgIH0KIAorCiAg
ICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsgICAKICAgICAgICAgRWxlbWVudFJhcmVEYXRhKiBkYXRh
ID0gcmFyZURhdGEoKTsKICAgICAgICAgaWYgKGRhdGEtPm5lZWRzRm9jdXNBcHBlYXJhbmNlVXBk
YXRlU29vbkFmdGVyQXR0YWNoKCkpIHsKQEAgLTk3Miw5ICs5NzQsMTIgQEAgdm9pZCBFbGVtZW50
OjpkZXRhY2goKQogICAgIGNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwogICAgIGlmICho
YXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUoKTsK
LSAgICBDb250YWluZXJOb2RlOjpkZXRhY2goKTsKLSAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93
ID0gc2hhZG93Um9vdCgpKQorCisgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9IHNoYWRvd1Jv
b3QoKSkgeworICAgICAgICBDb250YWluZXJOb2RlOjpkZXRhY2hXaXRob3V0Q2hpbGRyZW4oKTsK
ICAgICAgICAgc2hhZG93LT5kZXRhY2goKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQ29udGFpbmVy
Tm9kZTo6ZGV0YWNoKCk7CiAKICAgICBSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdldEhpZXJhcmNo
eVVwZGF0ZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCAyMjlkNTU4MTVh
N2ZhZWVlNDc4YWQyOWE3MDhiMjU4OTZiMjRlYTZjLi45MDJkMzM5ZjBlYWVjMDk4OTQyMzFiNzAw
NTU4NTRkY2M2MWE3MTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC0xNTMsNiAr
MTUzLDIzIEBAIHZvaWQgU2hhZG93Um9vdDo6YXR0YWNoKCkKICAgICBUcmVlU2NvcGU6OmF0dGFj
aCgpOwogICAgIGlmIChtX2luY2x1c2lvbnMpCiAgICAgICAgIG1faW5jbHVzaW9ucy0+ZGlkU2Vs
ZWN0KCk7CisKKyAgICBFbGVtZW50KiBob3N0ID0gc2hhZG93SG9zdCgpOworICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBob3N0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIGlmICghY2hpbGQtPmF0dGFjaGVkKCkpCisgICAgICAgICAg
ICBjaGlsZC0+YXR0YWNoKCk7CisgICAgfQorfQorCit2b2lkIFNoYWRvd1Jvb3Q6OmRldGFjaCgp
Cit7CisgICAgVHJlZVNjb3BlOjpkZXRhY2goKTsKKworICAgIEVsZW1lbnQqIGhvc3QgPSBzaGFk
b3dIb3N0KCk7CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IGhvc3QtPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5h
dHRhY2hlZCgpKQorICAgICAgICAgICAgY2hpbGQtPmRldGFjaCgpOworICAgIH0KIH0KIAogQ29u
dGVudEluY2x1c2lvblNlbGVjdG9yKiBTaGFkb3dSb290OjppbmNsdXNpb25zKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IGRhZTg5NWNhNzM3MjZkNGQ0Y2NhOTk4NDdiOTA5ZTAx
ZDc4NTgzZTguLjM3ZTJlNWNjZmJiYjRiYzIwZWE3NGViNTU0MzFlNTA1ZWIzN2Q0NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0luY2x1c2lvblNlbGVjdG9yQWN0aXZlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogCiAgICAgdmlydHVhbCBib29sIGFw
cGx5QXV0aG9yU2hlZXRzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBcHBseUF1dGhvclNoZWV0cyhi
b29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1l
bnQuY3BwCmluZGV4IGQ0MTY1MmYwZjI0MzgyM2Y2NGI2NzQxY2QxZWM1MzE0OGZlMjFlZWYuLmIz
ZDc4NjQwNWRmYzFkZWRiMTEzYTI3NzY5Njc3MmM1YTI2ZDQ1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcApAQCAtNjksOCArNjks
NiBAQCB2b2lkIEhUTUxDb250ZW50RWxlbWVudDo6YXR0YWNoKCkKIAogICAgIGlmIChyb290KSB7
CiAgICAgICAgIGZvciAoU2hhZG93SW5jbHVzaW9uKiBpbmNsdXNpb24gPSBtX2luY2x1c2lvbnMt
PmZpcnN0KCk7IGluY2x1c2lvbjsgaW5jbHVzaW9uID0gaW5jbHVzaW9uLT5uZXh0KCkpCi0gICAg
ICAgICAgICBpbmNsdXNpb24tPmNvbnRlbnQoKS0+ZGV0YWNoKCk7Ci0gICAgICAgIGZvciAoU2hh
ZG93SW5jbHVzaW9uKiBpbmNsdXNpb24gPSBtX2luY2x1c2lvbnMtPmZpcnN0KCk7IGluY2x1c2lv
bjsgaW5jbHVzaW9uID0gaW5jbHVzaW9uLT5uZXh0KCkpCiAgICAgICAgICAgICBpbmNsdXNpb24t
PmNvbnRlbnQoKS0+YXR0YWNoKCk7CiAgICAgfQogfQpAQCAtNzgsNiArNzYsOSBAQCB2b2lkIEhU
TUxDb250ZW50RWxlbWVudDo6YXR0YWNoKCkKIHZvaWQgSFRNTENvbnRlbnRFbGVtZW50OjpkZXRh
Y2goKQogewogICAgIGlmIChTaGFkb3dSb290KiByb290ID0gdG9TaGFkb3dSb290KHNoYWRvd1Ry
ZWVSb290Tm9kZSgpKSkgeworICAgICAgICBmb3IgKFNoYWRvd0luY2x1c2lvbiogaW5jbHVzaW9u
ID0gbV9pbmNsdXNpb25zLT5maXJzdCgpOyBpbmNsdXNpb247IGluY2x1c2lvbiA9IGluY2x1c2lv
bi0+bmV4dCgpKQorICAgICAgICAgICAgaW5jbHVzaW9uLT5jb250ZW50KCktPmRldGFjaCgpOwor
CiAgICAgICAgIGlmIChDb250ZW50SW5jbHVzaW9uU2VsZWN0b3IqIHNlbGVjdG9yID0gcm9vdC0+
aW5jbHVzaW9ucygpKQogICAgICAgICAgICAgc2VsZWN0b3ItPnVuc2VsZWN0KG1faW5jbHVzaW9u
cy5nZXQoKSk7CiAgICAgfQo=
</data>
<flag name="review"
          id="124316"
          type_id="1"
          status="-"
          setter="morrita"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123920</attachid>
            <date>2012-01-25 04:22:32 -0800</date>
            <delta_ts>2012-01-25 04:26:52 -0800</delta_ts>
            <desc>(Fake) Patch for shadow tree recalc</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>2356</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCAyMjlkNTU4Li41OTFkZjY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC04Niw3ICs4Niw3IEBAIGJvb2wgU2hhZG93Um9vdDo6
Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSB0eXBlKSBjb25zdAogCiB2b2lkIFNoYWRvd1Jvb3Q6
OnJlY2FsY1NoYWRvd1RyZWVTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgaWYgKGhh
c0NvbnRlbnRFbGVtZW50KCkpCisgICAgaWYgKG5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCkg
fHwgaGFzQ29udGVudEVsZW1lbnQoKSkKICAgICAgICAgcmVhdHRhY2goKTsKICAgICBlbHNlIHsK
ICAgICAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkgewpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1Ry
ZWVTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBjbGVh
ck5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CiAgICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxj
KCk7CiAgICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5oCmluZGV4IGRhZTg5NWMuLjkzOGFlYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApA
QCAtNDEsNiArNDEsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNhbGNTaGFkb3dUcmVlU3R5
bGUoU3R5bGVDaGFuZ2UpOwogCisgICAgdm9pZCBzZXROZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2Fs
YygpIHsgbV9uZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYyA9IHRydWU7IH0KKyAgICB2b2lkIGNs
ZWFyTmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKSB7IG1fbmVlZHNTaGFkb3dUcmVlU3R5bGVS
ZWNhbGMgPSBmYWxzZTsgfQorICAgIGJvb2wgbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKSB7
IHJldHVybiBtX25lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjOyB9CisKICAgICBIVE1MQ29udGVu
dEVsZW1lbnQqIGluY2x1ZGVyRm9yKE5vZGUqKSBjb25zdDsKICAgICB2b2lkIGhvc3RDaGlsZHJl
bkNoYW5nZWQoKTsKICAgICBib29sIGlzSW5jbHVzaW9uU2VsZWN0b3JBY3RpdmUoKSBjb25zdDsK
QEAgLTY3LDYgKzcxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc0NvbnRlbnRFbGVtZW50KCkg
Y29uc3Q7CiAKICAgICBib29sIG1fYXBwbHlBdXRob3JTaGVldHM7CisgICAgYm9vbCBtX25lZWRz
U2hhZG93VHJlZVN0eWxlUmVjYWxjOwogICAgIE93blB0cjxDb250ZW50SW5jbHVzaW9uU2VsZWN0
b3I+IG1faW5jbHVzaW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9IVE1MQ29udGVudEVsZW1lbnQuY3BwCmluZGV4IGQ0MTY1MmYuLjVkMjI0ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcApAQCAt
ODAsNiArODAsMTEgQEAgdm9pZCBIVE1MQ29udGVudEVsZW1lbnQ6OmRldGFjaCgpCiAgICAgaWYg
KFNoYWRvd1Jvb3QqIHJvb3QgPSB0b1NoYWRvd1Jvb3Qoc2hhZG93VHJlZVJvb3ROb2RlKCkpKSB7
CiAgICAgICAgIGlmIChDb250ZW50SW5jbHVzaW9uU2VsZWN0b3IqIHNlbGVjdG9yID0gcm9vdC0+
aW5jbHVzaW9ucygpKQogICAgICAgICAgICAgc2VsZWN0b3ItPnVuc2VsZWN0KG1faW5jbHVzaW9u
cy5nZXQoKSk7CisKKyAgICAgICAgLy8gV2hlbiBjb250ZW50IGVsZW1lbnQgaXMgZGV0YWNoZWQs
IHNoYWRvdyB0cmVlIHNob3VsZCBiZSByZWNyZWF0ZWQgdG8gcmUtY2FsY3VsYXRlIGluY2x1c2lv
bnMgZm9yCisgICAgICAgIC8vIG90aGVyIGNvbnRlbnQgZWxlbWVudHMuCisgICAgICAgIHJvb3Qt
PnNldE5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CisgICAgICAgIHJvb3QtPnNoYWRvd0hv
c3QoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KIAogICAgIEFTU0VSVChtX2luY2x1
c2lvbnMtPmlzRW1wdHkoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123922</attachid>
            <date>2012-01-25 04:27:00 -0800</date>
            <delta_ts>2012-01-30 03:31:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76611-20120125212658.patch</filename>
            <type>text/plain</type>
            <size>27239</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDcwNTBjYmU0MDU3NTJl
ZDhkMDlhZjU4Yzg3ZGYwZDUwODViNDNjMy4uMGIzNDMyMWFhZTZhZGEyYzM0ODIxMmY1MWJmMTgy
NmRkNzJiZTYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAxLTI1ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ29udGVudCBlbGVt
ZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFj
ZWQgaW4gYSBzaGFkb3cgdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hlbiBhIGNvbnRlbnQgZWxlbWVudCBpcyBhZGRlZC9yZW1vdmVkL3JlcGxh
Y2VkIGluIGEgc2hhZG93IHRyZWUsIHdlIGhhdmUgdG8gcmVjcmVhdGUKKyAgICAgICAgdGhlIHNo
YWRvdyB0cmVlIHRvIHJlY2FsY3VsYXRlIGluY2x1c2lvbnMgb2YgY29udGVudCBlbGVtZW50cy4g
Q3VycmVudGx5IHdlIGRpZG4ndCByZWNhbGN1bGF0ZSBpdAorICAgICAgICB3aGVuIGNvbnRlbnQg
ZWxlbWVudCBpcyByZW1vdmVkLiAoV2hlbiBhZGRlZCwgaXQgaXMgcmVjYWxjdWxhdGVkLikKKyAg
ICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHVzIHRvIHJlY2FsY3VyYXRlIHRoZSBzaGFkb3cgdHJl
ZSB3aGVuIGNvbnRlbnQgZWxlbWVudCBpcyByZW1vdmVkLgorCisgICAgICAgIEFsc28sIHRoaXMg
cGF0Y2ggaGFzIG1hZGUgbGlnaHQgY2hpbGRyZW4gdG8gYmUgbWFuYWdlZCBieSBhIHNoYWRvdyBy
b290LiBUaGlzIGlzIHJlcXVpcmVkIHRvIHJlY2FsY3VsYXRlCisgICAgICAgIHNoYWRvdyB0cmVl
IGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVt
ZW50LW1vdmUuaHRtbAorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXR0YWNoV2l0aG91dENoaWxkcmVuKToKKyAgICAg
ICAgICBBdHRhY2hlcyBvbmx5IHRoZSBDb250YWluZXIgbm9kZS4gRG9lcyBub3QgYXR0YWNoIGl0
cyBjaGlsZHJlbi4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmRldGFjaFdpdGhv
dXRDaGlsZHJlbik6CisgICAgICAgICAgRGV0YWNoZXMgb25seSB0aGUgQ29udGFpbmVyIG5vZGUu
IERvZXMgbm90IGRldGFjaCBpdHMgY2hpbGRyZW4uCisgICAgICAgICogZG9tL0NvbnRhaW5lck5v
ZGUuaDoKKyAgICAgICAgKENvbnRhaW5lck5vZGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgICBDaGFuZ2VkIGhvdyBsaWdodCB0cmVlIGlzIGF0dGFjaGVkLiBUaGUgbGln
aHQgdHJlZSBpcyBhdHRhY2hlZC9kZXRhY2hlZCBpbiBhIHNoYWRvdyB0cmVlLgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRl
dGFjaCk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhZG93Um9vdDo6cmVjYWxjU2hhZG93VHJlZVN0eWxlKToKKyAgICAgICAgICBSZWNyZWF0ZXMg
YSBzaGFkb3cgdHJlZSB3aGVuIGEgZmxhZyB0byByZWNhbGN1bGF0ZSB0cmVlIHN0eWxlIGlzIE9O
LgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYWRvd1Jvb3Q6OmRldGFjaCk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAg
ICAgICAgICBBZGRlZCBhIGZsYWcgdG8gcmVjYWxjdWxhdGUgdHJlZSBzdHlsZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnNldE5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmNsZWFyTmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNh
bGMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6bmVlZHNTaGFkb3dUcmVlU3R5bGVS
ZWNhbGMpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29udGVudEVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgICAg
RG9lcyBub3QgbmVlZCB0byBkZXRhY2ggaW5jbHVkZWQgZWxlbWVudHMsIGJlY2F1c2UgdGhleSBh
cmUgbm90IGF0dGFjaGVkIGluIENvbnRhaW5lck5vZGUgYW55bW9yZS4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb250ZW50RWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgICBXaGVuIGEgY29udGVu
dCBlbGVtZW50IGRldGFjaGVkLCByZWF0dGFjaCBhIHNoYWRvdyB0cmVlLgorCiAyMDEyLTAxLTI0
ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBBdHRlbXB0IHRv
IGZpeCBNYWMgYnVpbGQgYWZ0ZXIgY2hhbmdlc2V0IDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8xMDU4NDM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZDVj
ZDA5YjlmZGFmOTk3ZjQ3ODBmMjNmMTY1Y2JlN2JjYTQ3MDhmNi4uZDRkNGY4ZGYyYjY3ODczNGQ4
N2RhYTBmODQwNzc4ODQzYmQ4NWQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cApAQCAtNzg3LDYgKzc4NywxMSBAQCB2b2lkIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpCiAgICAg
Tm9kZTo6YXR0YWNoKCk7CiB9CiAKK3ZvaWQgQ29udGFpbmVyTm9kZTo6YXR0YWNoV2l0aG91dENo
aWxkcmVuKCkKK3sKKyAgICBOb2RlOjphdHRhY2goKTsKK30KKwogdm9pZCBDb250YWluZXJOb2Rl
OjpkZXRhY2goKQogewogICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQpAQCAtNzk1LDYgKzgwMCwxMSBAQCB2b2lk
IENvbnRhaW5lck5vZGU6OmRldGFjaCgpCiAgICAgTm9kZTo6ZGV0YWNoKCk7CiB9CiAKK3ZvaWQg
Q29udGFpbmVyTm9kZTo6ZGV0YWNoV2l0aG91dENoaWxkcmVuKCkKK3sKKyAgICBOb2RlOjpkZXRh
Y2goKTsKK30KKwogdm9pZCBDb250YWluZXJOb2RlOjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7
CiAgICAgUmVmUHRyPE5vZGU+IHByb3RlY3QodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuaAppbmRleCAyYTVkNzNlM2JhMDQ0NjI0N2MyOGMxMjIyMTU2ODBkOGU4NWUwMzk3Li4yNGUx
ZjE5MWRkYjE0NmIxMTdlYzViMGJkZTFlZTcxYzE0Mjg2MzVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmgKQEAgLTczLDcgKzczLDkgQEAgcHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hC
ZWZvcmVMb2FkRXZlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIAogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKSBPVkVSUklERTsKKyAgICB2b2lkIGF0dGFjaFdpdGhvdXRDaGlsZHJl
bigpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKSBPVkVSUklERTsKKyAgICB2b2lkIGRldGFj
aFdpdGhvdXRDaGlsZHJlbigpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCkgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGdldFJlY3QoKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCA9IHRydWUpIE9WRVJSSURFOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCmluZGV4IDM3ZmI3YTA1NDdlMzFmOTE5MTZkYjg1NmYzMTQyZDQ1MzljODcwOTEu
LjNhNWRiOWM4NDY3MzBmMWQ1N2ZkZWI4Zjk2ODVkZDA4YjcyNDNhNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTk0MCwxNiArOTQwLDE3IEBAIHZvaWQgRWxlbWVudDo6YXR0YWNoKCkKICAg
ICBSZW5kZXJXaWRnZXQ6OnN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCk7CiAKICAgICBj
cmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7Ci0gICAgCiAgICAgU3R5bGVTZWxlY3RvclBhcmVudFB1
c2hlciBwYXJlbnRQdXNoZXIodGhpcyk7CiAKLSAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAg
ICBwYXJlbnRQdXNoZXIucHVzaCgpOwotICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwotCisg
ICAgLy8gV2hlbiBhIHNoYWRvdyByb290IGV4aXN0cywgYXR0YWNoaW5nIGFsbCBjaGlsZHJlbiBp
cyBkdWUgZm9yIHRoZSBzaGFkb3cgcm9vdC4KICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0g
c2hhZG93Um9vdCgpKSB7CisgICAgICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaFdpdGhvdXRDaGls
ZHJlbigpOwogICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOwogICAgICAgICBzaGFkb3ctPmF0
dGFjaCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmaXJzdENoaWxkKCkpCisgICAgICAg
ICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOworICAgICAgICBDb250YWluZXJOb2RlOjphdHRhY2go
KTsKICAgICB9CiAKICAgICBpZiAoaGFzUmFyZURhdGEoKSkgeyAgIApAQCAtOTcyLDkgKzk3Mywx
MiBAQCB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiAgICAgY2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBk
YXRlKCk7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCiAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0
Q29tcHV0ZWRTdHlsZSgpOwotICAgIENvbnRhaW5lck5vZGU6OmRldGFjaCgpOwotICAgIGlmIChT
aGFkb3dSb290KiBzaGFkb3cgPSBzaGFkb3dSb290KCkpCisKKyAgICBpZiAoU2hhZG93Um9vdCog
c2hhZG93ID0gc2hhZG93Um9vdCgpKSB7CisgICAgICAgIENvbnRhaW5lck5vZGU6OmRldGFjaFdp
dGhvdXRDaGlsZHJlbigpOwogICAgICAgICBzaGFkb3ctPmRldGFjaCgpOworICAgIH0gZWxzZQor
ICAgICAgICBDb250YWluZXJOb2RlOjpkZXRhY2goKTsKIAogICAgIFJlbmRlcldpZGdldDo6cmVz
dW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3Bw
CmluZGV4IDIyOWQ1NTgxNWE3ZmFlZWU0NzhhZDI5YTcwOGIyNTg5NmIyNGVhNmMuLjQ3NDVlYTU4
YmViYjVmMDc0NmNhNGQxNTU0Y2U0MzliNzcwYjlkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgYm9vbCBTaGFkb3dSb290OjpjaGlsZFR5cGVBbGxvd2Vk
KE5vZGVUeXBlIHR5cGUpIGNvbnN0CiAKIHZvaWQgU2hhZG93Um9vdDo6cmVjYWxjU2hhZG93VHJl
ZVN0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKIHsKLSAgICBpZiAoaGFzQ29udGVudEVsZW1lbnQo
KSkKKyAgICBpZiAobmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKSB8fCBoYXNDb250ZW50RWxl
bWVudCgpKQogICAgICAgICByZWF0dGFjaCgpOwogICAgIGVsc2UgewogICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CkBAIC05Nyw2
ICs5Nyw3IEBAIHZvaWQgU2hhZG93Um9vdDo6cmVjYWxjU2hhZG93VHJlZVN0eWxlKFN0eWxlQ2hh
bmdlIGNoYW5nZSkKICAgICAgICAgfQogICAgIH0KIAorICAgIGNsZWFyTmVlZHNTaGFkb3dUcmVl
U3R5bGVSZWNhbGMoKTsKICAgICBjbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBjbGVhckNo
aWxkTmVlZHNTdHlsZVJlY2FsYygpOwogfQpAQCAtMTUzLDYgKzE1NCwyMSBAQCB2b2lkIFNoYWRv
d1Jvb3Q6OmF0dGFjaCgpCiAgICAgVHJlZVNjb3BlOjphdHRhY2goKTsKICAgICBpZiAobV9pbmNs
dXNpb25zKQogICAgICAgICBtX2luY2x1c2lvbnMtPmRpZFNlbGVjdCgpOworCisgICAgZm9yIChO
b2RlKiBjaGlsZCA9IHNoYWRvd0hvc3QoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWNoaWxkLT5hdHRhY2hlZCgpKQor
ICAgICAgICAgICAgY2hpbGQtPmF0dGFjaCgpOworICAgIH0KK30KKwordm9pZCBTaGFkb3dSb290
OjpkZXRhY2goKQoreworICAgIFRyZWVTY29wZTo6ZGV0YWNoKCk7CisKKyAgICBmb3IgKE5vZGUq
IGNoaWxkID0gc2hhZG93SG9zdCgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+YXR0YWNoZWQoKSkKKyAgICAg
ICAgICAgIGNoaWxkLT5kZXRhY2goKTsKKyAgICB9CiB9CiAKIENvbnRlbnRJbmNsdXNpb25TZWxl
Y3RvciogU2hhZG93Um9vdDo6aW5jbHVzaW9ucygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2hhZG93Um9vdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3Qu
aAppbmRleCBkYWU4OTVjYTczNzI2ZDRkNGNjYTk5ODQ3YjkwOWUwMWQ3ODU4M2U4Li41NzJkNmE4
ZTMxYTRmYjQ1MzEzOTM3NTM3N2RmMTY0ZDlmOWRiYjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2hhZG93Um9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmgKQEAgLTQxLDExICs0MSwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlY2FsY1NoYWRvd1Ry
ZWVTdHlsZShTdHlsZUNoYW5nZSk7CiAKKyAgICB2b2lkIHNldE5lZWRzU2hhZG93VHJlZVN0eWxl
UmVjYWxjKCkgeyBtX25lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjID0gdHJ1ZTsgfQorICAgIHZv
aWQgY2xlYXJOZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpIHsgbV9uZWVkc1NoYWRvd1RyZWVT
dHlsZVJlY2FsYyA9IGZhbHNlOyB9CisgICAgYm9vbCBuZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2Fs
YygpIHsgcmV0dXJuIG1fbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGM7IH0KKwogICAgIEhUTUxD
b250ZW50RWxlbWVudCogaW5jbHVkZXJGb3IoTm9kZSopIGNvbnN0OwogICAgIHZvaWQgaG9zdENo
aWxkcmVuQ2hhbmdlZCgpOwogICAgIGJvb2wgaXNJbmNsdXNpb25TZWxlY3RvckFjdGl2ZSgpIGNv
bnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseUF1dGhvclNoZWV0cygpIGNvbnN0OwogICAg
IHZvaWQgc2V0QXBwbHlBdXRob3JTaGVldHMoYm9vbCk7CkBAIC02Nyw2ICs3Miw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBoYXNDb250ZW50RWxlbWVudCgpIGNvbnN0OwogCiAgICAgYm9vbCBtX2Fw
cGx5QXV0aG9yU2hlZXRzOworICAgIGJvb2wgbV9uZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYzsK
ICAgICBPd25QdHI8Q29udGVudEluY2x1c2lvblNlbGVjdG9yPiBtX2luY2x1c2lvbnM7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNw
cAppbmRleCBkNDE2NTJmMGYyNDM4MjNmNjRiNjc0MWNkMWVjNTMxNDhmZTIxZWVmLi41ZTM5NGM1
ZjA1MDkxZDM2ZWUyMzM2YjhiNTc1MDlkNGU3MjY5M2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAKQEAgLTY5LDggKzY5LDYgQEAg
dm9pZCBIVE1MQ29udGVudEVsZW1lbnQ6OmF0dGFjaCgpCiAKICAgICBpZiAocm9vdCkgewogICAg
ICAgICBmb3IgKFNoYWRvd0luY2x1c2lvbiogaW5jbHVzaW9uID0gbV9pbmNsdXNpb25zLT5maXJz
dCgpOyBpbmNsdXNpb247IGluY2x1c2lvbiA9IGluY2x1c2lvbi0+bmV4dCgpKQotICAgICAgICAg
ICAgaW5jbHVzaW9uLT5jb250ZW50KCktPmRldGFjaCgpOwotICAgICAgICBmb3IgKFNoYWRvd0lu
Y2x1c2lvbiogaW5jbHVzaW9uID0gbV9pbmNsdXNpb25zLT5maXJzdCgpOyBpbmNsdXNpb247IGlu
Y2x1c2lvbiA9IGluY2x1c2lvbi0+bmV4dCgpKQogICAgICAgICAgICAgaW5jbHVzaW9uLT5jb250
ZW50KCktPmF0dGFjaCgpOwogICAgIH0KIH0KQEAgLTgwLDYgKzc4LDExIEBAIHZvaWQgSFRNTENv
bnRlbnRFbGVtZW50OjpkZXRhY2goKQogICAgIGlmIChTaGFkb3dSb290KiByb290ID0gdG9TaGFk
b3dSb290KHNoYWRvd1RyZWVSb290Tm9kZSgpKSkgewogICAgICAgICBpZiAoQ29udGVudEluY2x1
c2lvblNlbGVjdG9yKiBzZWxlY3RvciA9IHJvb3QtPmluY2x1c2lvbnMoKSkKICAgICAgICAgICAg
IHNlbGVjdG9yLT51bnNlbGVjdChtX2luY2x1c2lvbnMuZ2V0KCkpOworCisgICAgICAgIC8vIFdo
ZW4gY29udGVudCBlbGVtZW50IGlzIGRldGFjaGVkLCBzaGFkb3cgdHJlZSBzaG91bGQgYmUgcmVj
cmVhdGVkIHRvIHJlLWNhbGN1bGF0ZSBpbmNsdXNpb25zIGZvcgorICAgICAgICAvLyBvdGhlciBj
b250ZW50IGVsZW1lbnRzLgorICAgICAgICByb290LT5zZXROZWVkc1NoYWRvd1RyZWVTdHlsZVJl
Y2FsYygpOworICAgICAgICByb290LT5zaGFkb3dIb3N0KCktPnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKICAgICB9CiAKICAgICBBU1NFUlQobV9pbmNsdXNpb25zLT5pc0VtcHR5KCkpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDc4MTIxZGRmYTg4OGI5NmY4MjlmMjc1ZWUzNzQ1NWZmNTA3NDE1MjIuLmU0NTc1NWVhZDZlY2Yx
M2U3OTc3OGZmYzI1Y2ZiY2NhNGI1MGVjMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0w
MS0yNSAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgorCisgICAgICAgIFc3
NjYxMS1hdHRhY2hvcmRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY2MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0IGNhc2VzIGZvciBhcHBlbmRpbmcvcmVtb3ZpbmcvcmVwbGFjaW5nIGNvbnRl
bnQgZWxlbWVudCBpbiBhIHNoYWRvdyB0cmVlLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93
L2NvbnRlbnQtZWxlbWVudC1tb3ZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAx
LTI0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFyayB0ZXN0
IGFzIGZsYWt5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRl
bnQtZWxlbWVudC1tb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9jb250ZW50LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlmZWUxZDEw
YmVjNzJmM2MyY2RlZTdlM2VkOGJjNzZkYTQ3NmE2NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyNCBAQAordGVzdFJlbW92ZUNvbnRlbnQKK1BBU1MKK3Rlc3RSZW1vdmVDb250
ZW50VG9SZWNhbGMxCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMgorUEFTUwordGVz
dFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVMaWdodENoaWxkcmVuCitQQVNTCit0ZXN0UmVtb3ZlQ29u
dGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QxCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92
ZVNoYWRvd1Jvb3QyCitQQVNTCit0ZXN0QXBwZW5kQ29udGVudDEKK1BBU1MKK3Rlc3RBcHBlbmRD
b250ZW50MgorUEFTUwordGVzdEFwcGVuZENvbnRlbnQzCitQQVNTCit0ZXN0Q2hhbmdlT3JkZXJP
ZkNvbnRlbnQKK1BBU1MKK3Rlc3RNb3ZlTGlnaHRDaGlsZE91dAorUEFTUworVEVTVCBDT01QTEVU
RUQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxl
bWVudC1tb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVt
ZW50LW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjE3YjM1MzI4ZTYwMjUzM2Q2MTE4NGFlMjU1Mzkx
MTA4ODQ5ZGMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L2NvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwKQEAgLTAsMCArMSw1MDQgQEAKKyA8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisvKiByZWxhdGl2ZSBwb3NpdGlvbmluZyBl
bnN1cmVzIHVuZGVybHlpbmcgUmVuZGVyTGF5ZXIgKi8KKy5jb250YWluZXIgeworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKK30KKworLnNwYW4geworICAgIGRpc3BsYXk6IGJveGVkLWlubGluZTsK
KyAgICBtYXJnaW46IDJweDsKKyAgICBib3JkZXI6IHNvbGlkOworfQorPC9zdHlsZT4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb25zb2xlJykuaW5uZXJIVE1MICs9IChtZXNzYWdlICsgIlxuIik7Cit9CisKK2Z1bmN0aW9u
IHJlbW92ZUFsbENoaWxkcmVuKGVsZW0pIHsKKyAgICB3aGlsZSAoZWxlbS5maXJzdENoaWxkKQor
ICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKGVsZW0uZmlyc3RDaGlsZCk7Cit9CisKK2Z1bmN0aW9u
IGNsZWFuVXAoKSB7CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2FjdHVhbC1jb250YWluZXInKSk7CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKSk7Cit9CisKK2Z1bmN0aW9uIHJlbW92
ZUNvbnRhaW5lckxpbmVzKHRleHQpIHsKKyAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcbicp
OworICAgIGxpbmVzLnNwbGljZSgwLCAyKTsKKyAgICByZXR1cm4gbGluZXMuam9pbignXG4nKTsK
K30KKworZnVuY3Rpb24gY2hlY2soKSB7CisgICAgdmFyIHJlZkNvbnRhaW5lclJlbmRlclRyZWUg
PSBpbnRlcm5hbHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2V4cGVjdC1jb250YWluZXInKSk7CisgICAgdmFyIHJlZlJlbmRlclRyZWUgPSByZW1vdmVD
b250YWluZXJMaW5lcyhyZWZDb250YWluZXJSZW5kZXJUcmVlKTsKKworICAgIHZhciB0YXJnZXRD
b250YWluZXJSZW5kZXJUcmVlID0gaW50ZXJuYWxzLmVsZW1lbnRSZW5kZXJUcmVlQXNUZXh0KGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykpOworICAgIHZhciB0YXJn
ZXRSZW5kZXJUcmVlID0gcmVtb3ZlQ29udGFpbmVyTGluZXModGFyZ2V0Q29udGFpbmVyUmVuZGVy
VHJlZSk7CisKKyAgICBpZiAodGFyZ2V0UmVuZGVyVHJlZSA9PSByZWZSZW5kZXJUcmVlKQorICAg
ICAgICBsb2coIlBBU1MiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9nKCJGQUlMIik7CisgICAg
ICAgIGxvZygiRXhwZWN0ZWQ6ICIpOworICAgICAgICBsb2cocmVmUmVuZGVyVHJlZSk7CisgICAg
ICAgIGxvZygiQWN0dWFsOiAiKTsKKyAgICAgICAgbG9nKHRhcmdldFJlbmRlclRyZWUpOworICAg
IH0KK30KKworZnVuY3Rpb24gY3JlYXRlU3BhbldpdGhUZXh0KHRleHQpIHsKKyAgICB2YXIgc3Bh
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBzcGFuLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICByZXR1cm4gc3BhbjsKK30KKwor
ZnVuY3Rpb24gY3JlYXRlQ29udGVudFdpdGhTZWxlY3Qoc2VsZWN0LCBmYWxsYmFjaykgeworICAg
IHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KGRvY3VtZW50KTsK
KyAgICBjb250ZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0Jywgc2VsZWN0KTsKKyAgICBpZiAoIWZh
bGxiYWNrKQorICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgi
RkFMTEJBQ0siKSk7CisKKyAgICByZXR1cm4gY29udGVudDsKK30KKworZnVuY3Rpb24gYXBwZW5k
U2hhZG93KHRhcmdldCwgc2VsZWN0KSB7CisgICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJl
U2hhZG93Um9vdCh0YXJnZXQpOworCisgICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRl
Q29udGVudEVsZW1lbnQoZG9jdW1lbnQpOworICAgIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdzZWxl
Y3QnLCBzZWxlY3QpOworICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0
KCJGQUxMQkFDSyIpKTsKKworICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIntTSEFET1c6ICIpKTsKKyAgICByb290LmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAg
IHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIn0iKSk7Cit9CisKK2Z1
bmN0aW9uIGFwcGVuZFNoYWRvd0RlZXAodGFyZ2V0LCBzZWxlY3QpIHsKKyAgICB2YXIgcm9vdCA9
IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHRhcmdldCk7CisKKyAgICB2YXIgY2hpbGQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgeworICAgICAgICB2YXIgY29udGVu
dCA9IGludGVybmFscy5jcmVhdGVDb250ZW50RWxlbWVudChkb2N1bWVudCk7CisgICAgICAgIGNv
bnRlbnQuc2V0QXR0cmlidXRlKCdzZWxlY3QnLCBzZWxlY3QpOworICAgICAgICBjb250ZW50LmFw
cGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0siKSk7CisKKyAgICAgICAgY2hp
bGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIntJTk5FUjogIikpOworICAg
ICAgICBjaGlsZC5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAgICAgICAgY2hpbGQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIn0iKSk7CisgICAgfQorCisgICAgcm9vdC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie1NIQURPVzogIikpOworICAgIHJvb3Qu
YXBwZW5kQ2hpbGQoY2hpbGQpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIn0iKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRlc3QgRnVuY3Rpb25z
LgorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlQ29udGVudChjYWxsSWZEb25lKSB7CisgICAgdmFyIHJv
b3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdo
dCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisKKyAg
ICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50
V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dS
b290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JF
IikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNy
ZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAo
ZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29u
dGVudCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRh
aW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5BRlRFUjwv
c3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAg
IH0pKHJvb3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsK
K30KKworZnVuY3Rpb24gdGVzdFJlbW92ZUNvbnRlbnRUb1JlY2FsYzEoY2FsbElmRG9uZSkgewor
ICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBD
cmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3BhbiBjbGFzcz0nYzEn
PkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNo
YWRvdyB0cmVlLgorICAgIHZhciBjb250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCcu
YzEnKTsKKyAgICB2YXIgY29udGVudDIgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bhbicp
OworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNy
LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVu
ZENoaWxkKGNvbnRlbnQxKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQo
Ik1JRCIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50Mik7CisgICAgc3IuYXBwZW5kQ2hp
bGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIg
ZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50MSwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1
cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50MS5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKGNvbnRlbnQxKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBl
Y3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFu
Pk1JRDwvc3Bhbj48c3Bhbj5MSUdIVCAxPC9zcGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+PHNwYW4+
QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAg
fTsKKyAgICB9KShyb290LCBjb250ZW50MSwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0
KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMihjYWxsSWZE
b25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKwor
ICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJ
R0hUIDE8L3NwYW4+PHNwYW4gY2xhc3M9J2MxJz5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBD
cmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQxID0gY3JlYXRlQ29udGVudFdpdGhT
ZWxlY3QoJy5jMScpOworICAgIHZhciBjb250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0
KCdzcGFuJyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAg
c3IuYXBwZW5kQ2hpbGQoY29udGVudDEpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5X
aXRoVGV4dCgiTUlEIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQyKTsKKyAgICBzci5h
cHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKwor
ICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKSB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQxLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQoY29udGVudDEpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3Nw
YW4+PHNwYW4+TUlEPC9zcGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bh
bj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOwor
ICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKTsKKworICAgIHNl
dFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3Zl
TGlnaHRDaGlsZHJlbihjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3Qu
aW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93
IHRyZWUuCisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bhbicp
OworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNy
LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVu
ZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgi
QUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5l
cicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29u
dGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudCk7CisgICAgICAgICAg
ICByZW1vdmVBbGxDaGlsZHJlbihyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JF
PC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25l
KCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSk7CisKKyAg
ICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlU2hhZG93Um9vdChj
YWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxz
cGFuPkxJR0hUPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFy
IGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZhciBzciA9
IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNy
ZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQp
OworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxk
KHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElmRG9u
ZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnRlcm5hbHMu
cmVtb3ZlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQ8L3Nw
YW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9
KShyb290LCBjb250ZW50LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDEoY2FsbElm
RG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisK
KyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5M
SUdIVDwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBjb250
ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICB2YXIgc3IgPSBpbnRl
cm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVT
cGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAg
ICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290
KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUpIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29udGVudC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGNvbnRlbnQpOworICAgICAgICAgICAgaW50ZXJuYWxzLnJlbW92ZVNo
YWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhw
ZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkxJR0hUPC9zcGFuPjwvZGl2
PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwg
Y29udGVudCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5j
dGlvbiB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QyKGNhbGxJZkRvbmUpIHsK
KyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8g
Q3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQgMTwv
c3Bhbj48c3BhbiBjbGFzcz0nYzEnPkxJR0hUIDI8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBz
aGFkb3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCcu
YzEnKTsKKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAg
ICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5h
cHBlbmRDaGlsZChjb250ZW50KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRl
eHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250
YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3Qs
IGNvbnRlbnQsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRlbnQpOworICAgICAg
ICAgICAgaW50ZXJuYWxzLnJlbW92ZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2
PjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48L2Rpdj4iOworICAgICAg
ICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQsIGNh
bGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdEFw
cGVuZENvbnRlbnQxKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5p
bm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cg
dHJlZS4KKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAg
ICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5h
cHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKwor
ICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0
aFNlbGVjdCgnc3BhbicpOworICAgICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNo
YWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29udGVudCwgc3Iu
bGFzdENoaWxkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3Qt
Y29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxTUEFOPkxJ
R0hUPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZE
b25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRU
aW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0QXBwZW5kQ29udGVudDIoY2FsbElmRG9u
ZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAg
ICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5MSUdI
VCAxPC9zcGFuPjxzcGFuIGNsYXNzPSdjMic+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3Jl
YXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290
KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikp
OworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxk
KHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY2FsbElmRG9uZSkgeworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGVudDEgPSBjcmVh
dGVDb250ZW50V2l0aFNlbGVjdCgnLmMyJyk7CisgICAgICAgICAgICB2YXIgY29udGVudDIgPSBj
cmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgICAgICAgICAgdmFyIHNyID0gaW50
ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZv
cmUoY29udGVudDEsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUo
Y29udGVudDIsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9SRTwv
c3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+QUZURVI8
L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAg
ICB9KShyb290LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RBcHBlbmRDb250ZW50MyhjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVl
LgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4gY2xhc3M9
J2MyJz5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAg
dmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgdmFyIG1pZCA9
IGNyZWF0ZVNwYW5XaXRoVGV4dCgiTUlEIik7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3Bh
bldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQobWlkKTsKKyAgICBzci5h
cHBlbmRDaGlsZChjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnLmMyJykpOworICAgIHNyLmFwcGVu
ZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAg
dmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgbWlkLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVudFdp
dGhTZWxlY3QoJ3NwYW4nKTsKKyAgICAgICAgICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVT
aGFkb3dSb290KHJvb3QpOworICAgICAgICAgICAgc3IuaW5zZXJ0QmVmb3JlKGNvbnRlbnQsIG1p
ZCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5l
cicpLmlubmVySFRNTCA9CisgICAgICAgICAgICAgICAgIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFu
PjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48c3Bhbj5NSUQ8L3NwYW4+
PHNwYW4+RkFMTEJBQ0s8L3NwYW4+PHNwYW4+QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAg
ICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBtaWQsIGNhbGxJZkRv
bmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdENoYW5nZU9y
ZGVyT2ZDb250ZW50KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5p
bm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J2MxJz5MSUdIVCAxPC9zcGFuPjxzcGFuPkxJR0hUIDI8
L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgc3IgPSBpbnRl
cm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICB2YXIgY29udGVudDEgPSBjcmVhdGVD
b250ZW50V2l0aFNlbGVjdCgnLmMxJyk7CisgICAgdmFyIGNvbnRlbnQyID0gY3JlYXRlQ29udGVu
dFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRl
eHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50MSk7CisgICAgc3IuYXBw
ZW5kQ2hpbGQoY29udGVudDIpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4
dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRh
aW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwg
Y29udGVudDEsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAg
ICAgICAgICBzci5yZW1vdmVDaGlsZChjb250ZW50MSk7CisgICAgICAgICAgICBzci5pbnNlcnRC
ZWZvcmUoY29udGVudDEsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9CisgICAgICAgICAgICAg
ICAgIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxTUEFOPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElH
SFQgMjwvc3Bhbj48c3Bhbj5GQUxMQkFDSzwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4i
OworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNv
bnRlbnQxLCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RNb3ZlTGlnaHRDaGlsZE91dChjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVl
LgorICAgIHZhciBuMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIG4xLnNl
dEF0dHJpYnV0ZSgnaWQnLCAnbjEnKTsKKyAgICBuMS5pbm5lckhUTUwgPSAiPHNwYW4gaWQ9J2xp
Z2h0MSc+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPiI7CisgICAgdmFyIG4yID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgbjIuc2V0QXR0cmlidXRlKCdpZCcs
ICduMicpOworCisgICAgcm9vdC5hcHBlbmRDaGlsZChuMSk7CisgICAgcm9vdC5hcHBlbmRDaGls
ZChuMik7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUgaW4gJ24xJworICAgIHZhciBzciA9
IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KG4xKTsKKyAgICB2YXIgY29udGVudCA9IGNyZWF0
ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3Bh
bldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAg
c3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7
CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBuMiwgY2FsbElmRG9uZSkgeworICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdsaWdodDEnKTsKKyAgICAgICAgICAgIGUucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZChlKTsKKyAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKGUpOworCisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9CisgICAg
ICAgICAgICAgICAgIjxkaXY+PGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+TElHSFQgMjwv
c3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPkxJR0hUIDE8L3NwYW4+PC9k
aXY+PC9kaXY+IgorICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0p
KHJvb3QsIG4yLCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFRlc3QgRHJpdmVycy4KKwordmFyIHRlc3RGdW5jcyA9IFsKKyAg
ICB0ZXN0UmVtb3ZlQ29udGVudCwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMSwKKyAg
ICB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMiwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFuZFJl
bW92ZUxpZ2h0Q2hpbGRyZW4sCisgICAgdGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVTaGFkb3dS
b290MSwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QyLAorICAgIHRl
c3RBcHBlbmRDb250ZW50MSwKKyAgICB0ZXN0QXBwZW5kQ29udGVudDIsCisgICAgdGVzdEFwcGVu
ZENvbnRlbnQzLAorICAgIHRlc3RDaGFuZ2VPcmRlck9mQ29udGVudCwKKyAgICB0ZXN0TW92ZUxp
Z2h0Q2hpbGRPdXQKK107CisKK2Z1bmN0aW9uIGRvVGVzdElmTGVmdCgpIHsKKyAgICB2YXIgdGVz
dCA9IHRlc3RGdW5jcy5zaGlmdCgpOworICAgIGlmICh0ZXN0ID09IG51bGwpCisgICAgICAgIHJl
dHVybiBkb25lVGVzdCgpOworCisgICAgdmFyIGNhbGxJZkRvbmUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNoZWNrKCk7CisgICAg
ICAgICAgICBjbGVhblVwKCk7CisgICAgICAgICAgICBkb1Rlc3RJZkxlZnQoKTsKKyAgICAgICAg
fSwgMCk7CisgICAgfTsKKworICAgIGxvZyh0ZXN0Lm5hbWUpOworICAgIHRlc3QoY2FsbElmRG9u
ZSk7Cit9CisKK2Z1bmN0aW9uIGRvbmVUZXN0KCkgeworICAgIGxvZygiVEVTVCBDT01QTEVURUQi
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9u
IGRvVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKworICAgIGNsZWFuVXAoKTsKKyAg
ICBkb1Rlc3RJZkxlZnQoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJk
b1Rlc3QoKSI+CisKKzxkaXYgaWQ9ImFjdHVhbC1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIi
PjwvZGl2PgorPGRpdiBpZD0iZXhwZWN0LWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciI+PC9k
aXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124516</attachid>
            <date>2012-01-30 03:31:24 -0800</date>
            <delta_ts>2012-01-30 18:41:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76611-20120130203123.patch</filename>
            <type>text/plain</type>
            <size>26501</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ0MjYxN2UzZGNkYWJj
YWRkNGUwM2NjZjI0ZDVmYTU2ZmNjYThjOS4uM2ZiZjM3ZTRlOWUyNzIyNTJkOTFhM2JjZjVjMmZi
YmM1YmFhZjI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAxLTMwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ29udGVudCBlbGVt
ZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFj
ZWQgaW4gYSBzaGFkb3cgdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hlbiBhIGNvbnRlbnQgZWxlbWVudCBpcyBhZGRlZC9yZW1vdmVkL3JlcGxh
Y2VkIGluIGEgc2hhZG93IHRyZWUsIHdlIGhhdmUgdG8gcmVjcmVhdGUKKyAgICAgICAgdGhlIHNo
YWRvdyB0cmVlIHRvIHJlY2FsY3VsYXRlIGluY2x1c2lvbnMgb2YgY29udGVudCBlbGVtZW50cy4g
Q3VycmVudGx5IHdlIGRpZG4ndCByZWNhbGN1bGF0ZSBpdAorICAgICAgICB3aGVuIGNvbnRlbnQg
ZWxlbWVudCBpcyByZW1vdmVkLiAoV2hlbiBhZGRlZCwgaXQgaXMgcmVjYWxjdWxhdGVkLikKKyAg
ICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHVzIHRvIHJlY2FsY3VyYXRlIHRoZSBzaGFkb3cgdHJl
ZSB3aGVuIGNvbnRlbnQgZWxlbWVudCBpcyByZW1vdmVkLgorCisgICAgICAgIEFsc28sIHRoaXMg
cGF0Y2ggaGFzIG1hZGUgbGlnaHQgY2hpbGRyZW4gdG8gYmUgbWFuYWdlZCBieSBhIHNoYWRvdyBy
b290LiBUaGlzIGlzIHJlcXVpcmVkIHRvIHJlY2FsY3VsYXRlCisgICAgICAgIHNoYWRvdyB0cmVl
IGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVt
ZW50LW1vdmUuaHRtbAorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXR0YWNoQXNOb2RlKToKKyAgICAgICAgICBBdHRh
Y2hlcyBsaWtlIGFzIE5vZGUuIERvZXMgbm90IGF0dGFjaCBpdHMgY2hpbGRyZW4uCisgICAgICAg
IChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpkZXRhY2hBc05vZGUpOgorICAgICAgICAgIERldGFj
aGVzIGxpa2UgYXMgTm9kZS4gRG9lcyBub3QgZGV0YWNoIGl0cyBjaGlsZHJlbi4KKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAoQ29udGFpbmVyTm9kZSk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAgIENoYW5nZWQgaG93IGxpZ2h0IHRyZWUgaXMg
YXR0YWNoZWQuIFRoZSBsaWdodCB0cmVlIGlzIGF0dGFjaGVkL2RldGFjaGVkIGluIGEgc2hhZG93
IHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpyZWNhbGNTaGFkb3dUcmVlU3R5bGUpOgorICAg
ICAgICAgIFJlY3JlYXRlcyBhIHNoYWRvdyB0cmVlIHdoZW4gYSBmbGFnIHRvIHJlY2FsY3VsYXRl
IHRyZWUgc3R5bGUgaXMgT04uCisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjphdHRhY2gp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6ZGV0YWNoKToKKyAgICAgICAgKiBkb20v
U2hhZG93Um9vdC5oOgorICAgICAgICAgIEFkZGVkIGEgZmxhZyB0byByZWNhbGN1bGF0ZSB0cmVl
IHN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6c2V0TmVlZHNTaGFkb3dUcmVl
U3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6Y2xlYXJOZWVkc1No
YWRvd1RyZWVTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpuZWVk
c1NoYWRvd1RyZWVTdHlsZVJlY2FsYyk6CisgICAgICAgICogaHRtbC9zaGFkb3cvSFRNTENvbnRl
bnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb250ZW50RWxlbWVudDo6YXR0
YWNoKToKKyAgICAgICAgICBEb2VzIG5vdCBuZWVkIHRvIGRldGFjaCBpbmNsdWRlZCBlbGVtZW50
cywgYmVjYXVzZSB0aGV5IGFyZSBub3QgYXR0YWNoZWQgaW4gQ29udGFpbmVyTm9kZSBhbnltb3Jl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnRlbnRFbGVtZW50OjpkZXRhY2gpOgorICAgICAg
ICAgIFdoZW4gYSBjb250ZW50IGVsZW1lbnQgZGV0YWNoZWQsIHJlYXR0YWNoIGEgc2hhZG93IHRy
ZWUuCisKIDIwMTItMDEtMjkgIE5vZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgog
CiAgICAgICAgIFtjaHJvbWl1bV0gVXNlIGRlY29kaW5nIHN3aXp6bGUgb25seSBvbiBsaWJqcGVn
LXR1cmJvIDEuMS45MCsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCmluZGV4IDJhNWQ3M2Uz
YmEwNDQ2MjQ3YzI4YzEyMjIxNTY4MGQ4ZTg1ZTAzOTcuLjNhMjIzNTAwNTZkYzdlNThmZTVlZTE0
ZTcyMjRhY2MxYzRlNGM4MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaApAQCAtNzMs
NyArNzMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpIE9W
RVJSSURFOworICAgIHZvaWQgYXR0YWNoQXNOb2RlKCkgeyBOb2RlOjphdHRhY2goKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2goKSBPVkVSUklERTsKKyAgICB2b2lkIGRldGFjaEFzTm9kZSgp
IHsgTm9kZTo6ZGV0YWNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBnZXRSZWN0KCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgPSB0cnVlKSBPVkVSUklERTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAppbmRleCAwMTFlMjU4OTdjMTU1ZTM1MmY1YzE1NDhlNzkzY2YzYjc1ZDBjMmZi
Li5hM2MzZWExMGE4YzUzYmU5ODc2YzExYjhjOTkzNDA1M2RkZDBhNjZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCkBAIC05NDAsMTYgKzk0MCwxNyBAQCB2b2lkIEVsZW1lbnQ6OmF0dGFjaCgpCiAg
ICAgUmVuZGVyV2lkZ2V0OjpzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpOwogCiAgICAg
Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwotICAgIAogICAgIFN0eWxlU2VsZWN0b3JQYXJlbnRQ
dXNoZXIgcGFyZW50UHVzaGVyKHRoaXMpOwogCi0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAg
ICAgcGFyZW50UHVzaGVyLnB1c2goKTsKLSAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKLQor
ICAgIC8vIFdoZW4gYSBzaGFkb3cgcm9vdCBleGlzdHMsIGF0dGFjaGluZyBhbGwgY2hpbGRyZW4g
aXMgZHVlIGZvciB0aGUgc2hhZG93IHJvb3QuCiAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9
IHNoYWRvd1Jvb3QoKSkgeworICAgICAgICBDb250YWluZXJOb2RlOjphdHRhY2hBc05vZGUoKTsK
ICAgICAgICAgcGFyZW50UHVzaGVyLnB1c2goKTsKICAgICAgICAgc2hhZG93LT5hdHRhY2goKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgcGFy
ZW50UHVzaGVyLnB1c2goKTsKKyAgICAgICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7CiAgICAg
fQogCiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsgICAKQEAgLTk3Miw5ICs5NzMsMTIgQEAgdm9p
ZCBFbGVtZW50OjpkZXRhY2goKQogICAgIGNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwog
ICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVk
U3R5bGUoKTsKLSAgICBDb250YWluZXJOb2RlOjpkZXRhY2goKTsKLSAgICBpZiAoU2hhZG93Um9v
dCogc2hhZG93ID0gc2hhZG93Um9vdCgpKQorCisgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9
IHNoYWRvd1Jvb3QoKSkgeworICAgICAgICBDb250YWluZXJOb2RlOjpkZXRhY2hBc05vZGUoKTsK
ICAgICAgICAgc2hhZG93LT5kZXRhY2goKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQ29udGFpbmVy
Tm9kZTo6ZGV0YWNoKCk7CiAKICAgICBSZW5kZXJXaWRnZXQ6OnJlc3VtZVdpZGdldEhpZXJhcmNo
eVVwZGF0ZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCAyMjlkNTU4MTVh
N2ZhZWVlNDc4YWQyOWE3MDhiMjU4OTZiMjRlYTZjLi40NzQ1ZWE1OGJlYmI1ZjA3NDZjYTRkMTU1
NGNlNDM5Yjc3MGI5ZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC04Niw3ICs4
Niw3IEBAIGJvb2wgU2hhZG93Um9vdDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSB0eXBlKSBj
b25zdAogCiB2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHlsZShTdHlsZUNoYW5n
ZSBjaGFuZ2UpCiB7Ci0gICAgaWYgKGhhc0NvbnRlbnRFbGVtZW50KCkpCisgICAgaWYgKG5lZWRz
U2hhZG93VHJlZVN0eWxlUmVjYWxjKCkgfHwgaGFzQ29udGVudEVsZW1lbnQoKSkKICAgICAgICAg
cmVhdHRhY2goKTsKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGls
ZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIFNo
YWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBjbGVhck5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CiAg
ICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNh
bGMoKTsKIH0KQEAgLTE1Myw2ICsxNTQsMjEgQEAgdm9pZCBTaGFkb3dSb290OjphdHRhY2goKQog
ICAgIFRyZWVTY29wZTo6YXR0YWNoKCk7CiAgICAgaWYgKG1faW5jbHVzaW9ucykKICAgICAgICAg
bV9pbmNsdXNpb25zLT5kaWRTZWxlY3QoKTsKKworICAgIGZvciAoTm9kZSogY2hpbGQgPSBzaGFk
b3dIb3N0KCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+YXR0YWNoZWQoKSkKKyAgICAgICAgICAgIGNoaWxk
LT5hdHRhY2goKTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZG93Um9vdDo6ZGV0YWNoKCkKK3sKKyAg
ICBUcmVlU2NvcGU6OmRldGFjaCgpOworCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IHNoYWRvd0hv
c3QoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkg
eworICAgICAgICBpZiAoY2hpbGQtPmF0dGFjaGVkKCkpCisgICAgICAgICAgICBjaGlsZC0+ZGV0
YWNoKCk7CisgICAgfQogfQogCiBDb250ZW50SW5jbHVzaW9uU2VsZWN0b3IqIFNoYWRvd1Jvb3Q6
OmluY2x1c2lvbnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggZGFlODk1Y2E3
MzcyNmQ0ZDRjY2E5OTg0N2I5MDllMDFkNzg1ODNlOC4uMTIzNjViYmI3YjkzZjM5ZDAzZDJlMzE5
NGE4ODg3MjAxYzNmZDFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC00MSwxMSArNDEs
MTYgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFu
Z2UpOwogCisgICAgdm9pZCBzZXROZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpIHsgbV9uZWVk
c1NoYWRvd1RyZWVTdHlsZVJlY2FsYyA9IHRydWU7IH0KKyAgICB2b2lkIGNsZWFyTmVlZHNTaGFk
b3dUcmVlU3R5bGVSZWNhbGMoKSB7IG1fbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMgPSBmYWxz
ZTsgfQorICAgIGJvb2wgbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKSB7IHJldHVybiBtX25l
ZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjOyB9CisKICAgICBIVE1MQ29udGVudEVsZW1lbnQqIGlu
Y2x1ZGVyRm9yKE5vZGUqKSBjb25zdDsKICAgICB2b2lkIGhvc3RDaGlsZHJlbkNoYW5nZWQoKTsK
ICAgICBib29sIGlzSW5jbHVzaW9uU2VsZWN0b3JBY3RpdmUoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlBdXRob3JTaGVldHMoKSBjb25zdDsKICAgICB2b2lkIHNldEFwcGx5QXV0
aG9yU2hlZXRzKGJvb2wpOwpAQCAtNjYsNyArNzEsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBo
YXNDb250ZW50RWxlbWVudCgpIGNvbnN0OwogCi0gICAgYm9vbCBtX2FwcGx5QXV0aG9yU2hlZXRz
OworICAgIGJvb2wgbV9hcHBseUF1dGhvclNoZWV0cyA6IDE7CisgICAgYm9vbCBtX25lZWRzU2hh
ZG93VHJlZVN0eWxlUmVjYWxjIDogMTsKICAgICBPd25QdHI8Q29udGVudEluY2x1c2lvblNlbGVj
dG9yPiBtX2luY2x1c2lvbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcAppbmRleCA5NzM1OTYwMjM4YTc0Nzk1NjQ4OWY1MGU4
OWJjNTk3N2IwMmFlNjNkLi5jMzRkZmZjYTJiZGQ3OTY0ODFlMGU4MTI4ZGRlNDk1M2ZmNWVjNDhl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVu
dC5jcHAKQEAgLTgzLDggKzgzLDYgQEAgdm9pZCBIVE1MQ29udGVudEVsZW1lbnQ6OmF0dGFjaCgp
CiAKICAgICBpZiAocm9vdCkgewogICAgICAgICBmb3IgKFNoYWRvd0luY2x1c2lvbiogaW5jbHVz
aW9uID0gbV9pbmNsdXNpb25zLT5maXJzdCgpOyBpbmNsdXNpb247IGluY2x1c2lvbiA9IGluY2x1
c2lvbi0+bmV4dCgpKQotICAgICAgICAgICAgaW5jbHVzaW9uLT5jb250ZW50KCktPmRldGFjaCgp
OwotICAgICAgICBmb3IgKFNoYWRvd0luY2x1c2lvbiogaW5jbHVzaW9uID0gbV9pbmNsdXNpb25z
LT5maXJzdCgpOyBpbmNsdXNpb247IGluY2x1c2lvbiA9IGluY2x1c2lvbi0+bmV4dCgpKQogICAg
ICAgICAgICAgaW5jbHVzaW9uLT5jb250ZW50KCktPmF0dGFjaCgpOwogICAgIH0KIH0KQEAgLTk0
LDYgKzkyLDExIEBAIHZvaWQgSFRNTENvbnRlbnRFbGVtZW50OjpkZXRhY2goKQogICAgIGlmIChT
aGFkb3dSb290KiByb290ID0gdG9TaGFkb3dSb290KHNoYWRvd1RyZWVSb290Tm9kZSgpKSkgewog
ICAgICAgICBpZiAoQ29udGVudEluY2x1c2lvblNlbGVjdG9yKiBzZWxlY3RvciA9IHJvb3QtPmlu
Y2x1c2lvbnMoKSkKICAgICAgICAgICAgIHNlbGVjdG9yLT51bnNlbGVjdChtX2luY2x1c2lvbnMu
Z2V0KCkpOworCisgICAgICAgIC8vIFdoZW4gY29udGVudCBlbGVtZW50IGlzIGRldGFjaGVkLCBz
aGFkb3cgdHJlZSBzaG91bGQgYmUgcmVjcmVhdGVkIHRvIHJlLWNhbGN1bGF0ZSBpbmNsdXNpb25z
IGZvcgorICAgICAgICAvLyBvdGhlciBjb250ZW50IGVsZW1lbnRzLgorICAgICAgICByb290LT5z
ZXROZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpOworICAgICAgICByb290LT5zaGFkb3dIb3N0
KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CiAKICAgICBBU1NFUlQobV9pbmNsdXNp
b25zLT5pc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDhhYjM0MjU1MzIzZWFkNDM0ZTcwNzdiZjUwYTBhOGU3
NTRhOTg1NmMuLjIzN2RkNTc5ZGI2YTg2Y2ZhNTVlMWZiMzgwNmM0YmYyYzFiMzFiNWMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0zMCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bn
b29nbGUuY29tPgorCisgICAgICAgIFc3NjYxMS1hdHRhY2hvcmRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IGNhc2VzIGZvciBhcHBlbmRpbmcv
cmVtb3ZpbmcvcmVwbGFjaW5nIGNvbnRlbnQgZWxlbWVudCBpbiBhIHNoYWRvdyB0cmVlLgorCisg
ICAgICAgICogZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3Zl
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTI5ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXNlcnZlZCBXb3JkIHRlc3RzIGZhaWwgb24gQ2hyb21pdW0g
YWZ0ZXIgcjEwNjE5OApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2Nv
bnRlbnQtZWxlbWVudC1tb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlmZWUx
ZDEwYmVjNzJmM2MyY2RlZTdlM2VkOGJjNzZkYTQ3NmE2NAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyNCBAQAordGVzdFJlbW92ZUNvbnRlbnQKK1BBU1MKK3Rlc3RSZW1vdmVD
b250ZW50VG9SZWNhbGMxCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMgorUEFTUwor
dGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVMaWdodENoaWxkcmVuCitQQVNTCit0ZXN0UmVtb3Zl
Q29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QxCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudEFuZFJl
bW92ZVNoYWRvd1Jvb3QyCitQQVNTCit0ZXN0QXBwZW5kQ29udGVudDEKK1BBU1MKK3Rlc3RBcHBl
bmRDb250ZW50MgorUEFTUwordGVzdEFwcGVuZENvbnRlbnQzCitQQVNTCit0ZXN0Q2hhbmdlT3Jk
ZXJPZkNvbnRlbnQKK1BBU1MKK3Rlc3RNb3ZlTGlnaHRDaGlsZE91dAorUEFTUworVEVTVCBDT01Q
TEVURUQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRlbnQt
ZWxlbWVudC1tb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1l
bGVtZW50LW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjE3YjM1MzI4ZTYwMjUzM2Q2MTE4NGFlMjU1
MzkxMTA4ODQ5ZGMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hh
ZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwKQEAgLTAsMCArMSw1MDQgQEAKKyA8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisvKiByZWxhdGl2ZSBwb3NpdGlvbmlu
ZyBlbnN1cmVzIHVuZGVybHlpbmcgUmVuZGVyTGF5ZXIgKi8KKy5jb250YWluZXIgeworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKK30KKworLnNwYW4geworICAgIGRpc3BsYXk6IGJveGVkLWlubGlu
ZTsKKyAgICBtYXJnaW46IDJweDsKKyAgICBib3JkZXI6IHNvbGlkOworfQorPC9zdHlsZT4KKzxz
Y3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykuaW5uZXJIVE1MICs9IChtZXNzYWdlICsgIlxuIik7Cit9CisKK2Z1bmN0
aW9uIHJlbW92ZUFsbENoaWxkcmVuKGVsZW0pIHsKKyAgICB3aGlsZSAoZWxlbS5maXJzdENoaWxk
KQorICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKGVsZW0uZmlyc3RDaGlsZCk7Cit9CisKK2Z1bmN0
aW9uIGNsZWFuVXAoKSB7CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKSk7CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKSk7Cit9CisKK2Z1bmN0aW9uIHJl
bW92ZUNvbnRhaW5lckxpbmVzKHRleHQpIHsKKyAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdc
bicpOworICAgIGxpbmVzLnNwbGljZSgwLCAyKTsKKyAgICByZXR1cm4gbGluZXMuam9pbignXG4n
KTsKK30KKworZnVuY3Rpb24gY2hlY2soKSB7CisgICAgdmFyIHJlZkNvbnRhaW5lclJlbmRlclRy
ZWUgPSBpbnRlcm5hbHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKSk7CisgICAgdmFyIHJlZlJlbmRlclRyZWUgPSByZW1v
dmVDb250YWluZXJMaW5lcyhyZWZDb250YWluZXJSZW5kZXJUcmVlKTsKKworICAgIHZhciB0YXJn
ZXRDb250YWluZXJSZW5kZXJUcmVlID0gaW50ZXJuYWxzLmVsZW1lbnRSZW5kZXJUcmVlQXNUZXh0
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykpOworICAgIHZhciB0
YXJnZXRSZW5kZXJUcmVlID0gcmVtb3ZlQ29udGFpbmVyTGluZXModGFyZ2V0Q29udGFpbmVyUmVu
ZGVyVHJlZSk7CisKKyAgICBpZiAodGFyZ2V0UmVuZGVyVHJlZSA9PSByZWZSZW5kZXJUcmVlKQor
ICAgICAgICBsb2coIlBBU1MiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9nKCJGQUlMIik7Cisg
ICAgICAgIGxvZygiRXhwZWN0ZWQ6ICIpOworICAgICAgICBsb2cocmVmUmVuZGVyVHJlZSk7Cisg
ICAgICAgIGxvZygiQWN0dWFsOiAiKTsKKyAgICAgICAgbG9nKHRhcmdldFJlbmRlclRyZWUpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gY3JlYXRlU3BhbldpdGhUZXh0KHRleHQpIHsKKyAgICB2YXIg
c3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBzcGFuLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICByZXR1cm4gc3BhbjsKK30K
KworZnVuY3Rpb24gY3JlYXRlQ29udGVudFdpdGhTZWxlY3Qoc2VsZWN0LCBmYWxsYmFjaykgewor
ICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KGRvY3VtZW50
KTsKKyAgICBjb250ZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0Jywgc2VsZWN0KTsKKyAgICBpZiAo
IWZhbGxiYWNrKQorICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4
dCgiRkFMTEJBQ0siKSk7CisKKyAgICByZXR1cm4gY29udGVudDsKK30KKworZnVuY3Rpb24gYXBw
ZW5kU2hhZG93KHRhcmdldCwgc2VsZWN0KSB7CisgICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5z
dXJlU2hhZG93Um9vdCh0YXJnZXQpOworCisgICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3Jl
YXRlQ29udGVudEVsZW1lbnQoZG9jdW1lbnQpOworICAgIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdz
ZWxlY3QnLCBzZWxlY3QpOworICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhU
ZXh0KCJGQUxMQkFDSyIpKTsKKworICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIntTSEFET1c6ICIpKTsKKyAgICByb290LmFwcGVuZENoaWxkKGNvbnRlbnQpOwor
ICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIn0iKSk7Cit9CisK
K2Z1bmN0aW9uIGFwcGVuZFNoYWRvd0RlZXAodGFyZ2V0LCBzZWxlY3QpIHsKKyAgICB2YXIgcm9v
dCA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHRhcmdldCk7CisKKyAgICB2YXIgY2hpbGQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgeworICAgICAgICB2YXIgY29u
dGVudCA9IGludGVybmFscy5jcmVhdGVDb250ZW50RWxlbWVudChkb2N1bWVudCk7CisgICAgICAg
IGNvbnRlbnQuc2V0QXR0cmlidXRlKCdzZWxlY3QnLCBzZWxlY3QpOworICAgICAgICBjb250ZW50
LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0siKSk7CisKKyAgICAgICAg
Y2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIntJTk5FUjogIikpOwor
ICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAgICAgICAgY2hpbGQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIn0iKSk7CisgICAgfQorCisgICAgcm9vdC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie1NIQURPVzogIikpOworICAgIHJv
b3QuYXBwZW5kQ2hpbGQoY2hpbGQpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoIn0iKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRlc3QgRnVuY3Rp
b25zLgorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlQ29udGVudChjYWxsSWZEb25lKSB7CisgICAgdmFy
IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBs
aWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisK
KyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250
ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFk
b3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVG
T1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYg
PSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
Y29udGVudCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNv
bnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5BRlRF
Ujwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9Owor
ICAgIH0pKHJvb3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAw
KTsKK30KKworZnVuY3Rpb24gdGVzdFJlbW92ZUNvbnRlbnRUb1JlY2FsYzEoY2FsbElmRG9uZSkg
eworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAv
LyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3BhbiBjbGFzcz0n
YzEnPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRl
IHNoYWRvdyB0cmVlLgorICAgIHZhciBjb250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0
KCcuYzEnKTsKKyAgICB2YXIgY29udGVudDIgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bh
bicpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAg
IHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFw
cGVuZENoaWxkKGNvbnRlbnQxKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRl
eHQoIk1JRCIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50Mik7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2
YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50MSwgY2FsbElmRG9uZSkgeworICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50MS5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKGNvbnRlbnQxKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdl
eHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxz
cGFuPk1JRDwvc3Bhbj48c3Bhbj5MSUdIVCAxPC9zcGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+PHNw
YW4+QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAg
ICAgfTsKKyAgICB9KShyb290LCBjb250ZW50MSwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1l
b3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMihjYWxs
SWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFu
PkxJR0hUIDE8L3NwYW4+PHNwYW4gY2xhc3M9J2MxJz5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAv
LyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQxID0gY3JlYXRlQ29udGVudFdp
dGhTZWxlY3QoJy5jMScpOworICAgIHZhciBjb250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRoU2Vs
ZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9v
dCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7Cisg
ICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudDEpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNw
YW5XaXRoVGV4dCgiTUlEIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQyKTsKKyAgICBz
ci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsK
KworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKSB7Cisg
ICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQxLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoY29udGVudDEpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8
L3NwYW4+PHNwYW4+TUlEPC9zcGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwv
c3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgp
OworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKTsKKworICAg
IHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50QW5kUmVt
b3ZlTGlnaHRDaGlsZHJlbihjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJv
b3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hh
ZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bh
bicpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAg
IHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFw
cGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4
dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRh
aW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwg
Y29udGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudCk7CisgICAgICAg
ICAgICByZW1vdmVBbGxDaGlsZHJlbihyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVG
T1JFPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZE
b25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSk7CisK
KyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlU2hhZG93Um9v
dChjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0g
IjxzcGFuPkxJR0hUPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAg
dmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZhciBz
ciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRl
bnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENo
aWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElm
RG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnRlcm5h
bHMucmVtb3ZlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQ8
L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAg
ICB9KShyb290LCBjb250ZW50LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDEoY2Fs
bElmRG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bh
bj5MSUdIVDwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBj
b250ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICB2YXIgc3IgPSBp
bnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVh
dGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50KTsK
KyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChy
b290KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29udGVudC5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKGNvbnRlbnQpOworICAgICAgICAgICAgaW50ZXJuYWxzLnJlbW92
ZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
ZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkxJR0hUPC9zcGFuPjwv
ZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9v
dCwgY29udGVudCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitm
dW5jdGlvbiB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QyKGNhbGxJZkRvbmUp
IHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAg
Ly8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQg
MTwvc3Bhbj48c3BhbiBjbGFzcz0nYzEnPkxJR0hUIDI8L3NwYW4+IjsKKworICAgIC8vIENyZWF0
ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0
KCcuYzEnKTsKKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsK
KyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBz
ci5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0
aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1j
b250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJv
b3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRlbnQpOworICAg
ICAgICAgICAgaW50ZXJuYWxzLnJlbW92ZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8
ZGl2PjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48L2Rpdj4iOworICAg
ICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQs
IGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVz
dEFwcGVuZENvbnRlbnQxKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9v
dC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFk
b3cgdHJlZS4KKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsK
KyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBz
ci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsK
KworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50
V2l0aFNlbGVjdCgnc3BhbicpOworICAgICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29udGVudCwg
c3IubGFzdENoaWxkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBl
Y3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxTUEFO
PkxJR0hUPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxs
SWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY2FsbElmRG9uZSk7CisKKyAgICBz
ZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0QXBwZW5kQ29udGVudDIoY2FsbElm
RG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisK
KyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5M
SUdIVCAxPC9zcGFuPjxzcGFuIGNsYXNzPSdjMic+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8g
Q3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dS
b290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JF
IikpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENo
aWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY2FsbElmRG9uZSkgewor
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGVudDEgPSBj
cmVhdGVDb250ZW50V2l0aFNlbGVjdCgnLmMyJyk7CisgICAgICAgICAgICB2YXIgY29udGVudDIg
PSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgICAgICAgICAgdmFyIHNyID0g
aW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBzci5pbnNlcnRC
ZWZvcmUoY29udGVudDEsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZv
cmUoY29udGVudDIsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9S
RTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+QUZU
RVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsK
KyAgICB9KShyb290LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisK
K2Z1bmN0aW9uIHRlc3RBcHBlbmRDb250ZW50MyhjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0
cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4gY2xh
c3M9J2MyJz5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisg
ICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgdmFyIG1p
ZCA9IGNyZWF0ZVNwYW5XaXRoVGV4dCgiTUlEIik7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRl
U3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQobWlkKTsKKyAgICBz
ci5hcHBlbmRDaGlsZChjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnLmMyJykpOworICAgIHNyLmFw
cGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisg
ICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgbWlkLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVu
dFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICAgICAgICAgIHZhciBzciA9IGludGVybmFscy5lbnN1
cmVTaGFkb3dSb290KHJvb3QpOworICAgICAgICAgICAgc3IuaW5zZXJ0QmVmb3JlKGNvbnRlbnQs
IG1pZCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRh
aW5lcicpLmlubmVySFRNTCA9CisgICAgICAgICAgICAgICAgIjxkaXY+PHNwYW4+QkVGT1JFPC9z
cGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48c3Bhbj5NSUQ8L3Nw
YW4+PHNwYW4+RkFMTEJBQ0s8L3NwYW4+PHNwYW4+QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAg
ICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBtaWQsIGNhbGxJ
ZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdENoYW5n
ZU9yZGVyT2ZDb250ZW50KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9v
dC5pbm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J2MxJz5MSUdIVCAxPC9zcGFuPjxzcGFuPkxJR0hU
IDI8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgc3IgPSBp
bnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICB2YXIgY29udGVudDEgPSBjcmVh
dGVDb250ZW50V2l0aFNlbGVjdCgnLmMxJyk7CisgICAgdmFyIGNvbnRlbnQyID0gY3JlYXRlQ29u
dGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0
aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50MSk7CisgICAgc3Iu
YXBwZW5kQ2hpbGQoY29udGVudDIpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRo
VGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNv
bnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9v
dCwgY29udGVudDEsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7Cisg
ICAgICAgICAgICBzci5yZW1vdmVDaGlsZChjb250ZW50MSk7CisgICAgICAgICAgICBzci5pbnNl
cnRCZWZvcmUoY29udGVudDEsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9CisgICAgICAgICAg
ICAgICAgIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxTUEFOPkxJR0hUIDE8L3NwYW4+PHNwYW4+
TElHSFQgMjwvc3Bhbj48c3Bhbj5GQUxMQkFDSzwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rp
dj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3Qs
IGNvbnRlbnQxLCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RNb3ZlTGlnaHRDaGlsZE91dChjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0
cmVlLgorICAgIHZhciBuMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIG4x
LnNldEF0dHJpYnV0ZSgnaWQnLCAnbjEnKTsKKyAgICBuMS5pbm5lckhUTUwgPSAiPHNwYW4gaWQ9
J2xpZ2h0MSc+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPiI7CisgICAgdmFyIG4y
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgbjIuc2V0QXR0cmlidXRlKCdp
ZCcsICduMicpOworCisgICAgcm9vdC5hcHBlbmRDaGlsZChuMSk7CisgICAgcm9vdC5hcHBlbmRD
aGlsZChuMik7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUgaW4gJ24xJworICAgIHZhciBz
ciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KG4xKTsKKyAgICB2YXIgY29udGVudCA9IGNy
ZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRl
U3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7Cisg
ICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9v
dCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBuMiwgY2FsbElmRG9uZSkgeworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsaWdodDEnKTsKKyAgICAgICAgICAgIGUucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChlKTsKKyAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKGUpOworCisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9Cisg
ICAgICAgICAgICAgICAgIjxkaXY+PGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+TElHSFQg
Mjwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPkxJR0hUIDE8L3NwYW4+
PC9kaXY+PC9kaXY+IgorICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAg
IH0pKHJvb3QsIG4yLCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRlc3QgRHJpdmVycy4KKwordmFyIHRlc3RGdW5jcyA9IFsK
KyAgICB0ZXN0UmVtb3ZlQ29udGVudCwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMSwK
KyAgICB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMiwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFu
ZFJlbW92ZUxpZ2h0Q2hpbGRyZW4sCisgICAgdGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVTaGFk
b3dSb290MSwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QyLAorICAg
IHRlc3RBcHBlbmRDb250ZW50MSwKKyAgICB0ZXN0QXBwZW5kQ29udGVudDIsCisgICAgdGVzdEFw
cGVuZENvbnRlbnQzLAorICAgIHRlc3RDaGFuZ2VPcmRlck9mQ29udGVudCwKKyAgICB0ZXN0TW92
ZUxpZ2h0Q2hpbGRPdXQKK107CisKK2Z1bmN0aW9uIGRvVGVzdElmTGVmdCgpIHsKKyAgICB2YXIg
dGVzdCA9IHRlc3RGdW5jcy5zaGlmdCgpOworICAgIGlmICh0ZXN0ID09IG51bGwpCisgICAgICAg
IHJldHVybiBkb25lVGVzdCgpOworCisgICAgdmFyIGNhbGxJZkRvbmUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNoZWNrKCk7Cisg
ICAgICAgICAgICBjbGVhblVwKCk7CisgICAgICAgICAgICBkb1Rlc3RJZkxlZnQoKTsKKyAgICAg
ICAgfSwgMCk7CisgICAgfTsKKworICAgIGxvZyh0ZXN0Lm5hbWUpOworICAgIHRlc3QoY2FsbElm
RG9uZSk7Cit9CisKK2Z1bmN0aW9uIGRvbmVUZXN0KCkgeworICAgIGxvZygiVEVTVCBDT01QTEVU
RUQiKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGRvVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKworICAgIGNsZWFuVXAoKTsK
KyAgICBkb1Rlc3RJZkxlZnQoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJkb1Rlc3QoKSI+CisKKzxkaXYgaWQ9ImFjdHVhbC1jb250YWluZXIiIGNsYXNzPSJjb250YWlu
ZXIiPjwvZGl2PgorPGRpdiBpZD0iZXhwZWN0LWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciI+
PC9kaXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124654</attachid>
            <date>2012-01-30 18:41:33 -0800</date>
            <delta_ts>2012-01-31 04:09:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76611-20120131114132.patch</filename>
            <type>text/plain</type>
            <size>26026</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI3ODJlYzhlNjk0YTFm
NzQwMTJhNWQwZTE1NjFlZWI0MmM3OWQ2Yi4uNTdiZDE2NjU3NmMzODMyNGZiNDYzMTM4OTlhYzM3
ZTA1NzVlMWQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAxLTMwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ29udGVudCBlbGVt
ZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFj
ZWQgaW4gYSBzaGFkb3cgdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hlbiBhIGNvbnRlbnQgZWxlbWVudCBpcyBhZGRlZC9yZW1vdmVkL3JlcGxh
Y2VkIGluIGEgc2hhZG93IHRyZWUsIHdlIGhhdmUgdG8gcmVjcmVhdGUKKyAgICAgICAgdGhlIHNo
YWRvdyB0cmVlIHRvIHJlY2FsY3VsYXRlIGluY2x1c2lvbnMgb2YgY29udGVudCBlbGVtZW50cy4g
Q3VycmVudGx5IHdlIGRpZG4ndCByZWNhbGN1bGF0ZSBpdAorICAgICAgICB3aGVuIGNvbnRlbnQg
ZWxlbWVudCBpcyByZW1vdmVkLiAoV2hlbiBhZGRlZCwgaXQgaXMgcmVjYWxjdWxhdGVkLikKKyAg
ICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHVzIHRvIHJlY2FsY3VyYXRlIHRoZSBzaGFkb3cgdHJl
ZSB3aGVuIGNvbnRlbnQgZWxlbWVudCBpcyByZW1vdmVkLgorCisgICAgICAgIEFsc28sIHRoaXMg
cGF0Y2ggaGFzIG1hZGUgbGlnaHQgY2hpbGRyZW4gdG8gYmUgbWFuYWdlZCBieSBhIHNoYWRvdyBy
b290LiBUaGlzIGlzIHJlcXVpcmVkIHRvIHJlY2FsY3VsYXRlCisgICAgICAgIHNoYWRvdyB0cmVl
IGNvcnJlY3RseS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVt
ZW50LW1vdmUuaHRtbAorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAgIENo
YW5nZWQgaG93IGxpZ2h0IHRyZWUgaXMgYXR0YWNoZWQuIFRoZSBsaWdodCB0cmVlIGlzIGF0dGFj
aGVkL2RldGFjaGVkIGluIGEgc2hhZG93IHJvb3QuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjphdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAg
KiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgICAgUmVjcmVhdGVzIGEgc2hhZG93IHRyZWUg
d2hlbiBhIGZsYWcgdG8gcmVjYWxjdWxhdGUgdHJlZSBzdHlsZSBpcyBPTi4KKyAgICAgICAgKFdl
YkNvcmU6OlNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFkb3dSb290OjphdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6
ZGV0YWNoKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAgIEFkZGVkIGEg
ZmxhZyB0byByZWNhbGN1bGF0ZSBzaGFkb3cgdHJlZS4KKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d1Jvb3Q6OnNldE5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYWRvd1Jvb3Q6OmNsZWFyTmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93Um9vdDo6bmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMpOgorICAgICAg
ICAqIGh0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29udGVudEVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgICAgRG9lcyBub3QgbmVlZCB0
byBkZXRhY2ggaW5jbHVkZWQgZWxlbWVudHMsIGJlY2F1c2UgdGhleSBhcmUgbm90IGF0dGFjaGVk
IGluIENvbnRhaW5lck5vZGUgYW55bW9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb250ZW50
RWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgICBXaGVuIGEgY29udGVudCBlbGVtZW50IGRldGFj
aGVkLCByZWF0dGFjaCBhIHNoYWRvdyB0cmVlLgorCiAyMDEyLTAxLTMwICBDaHJpc3RvcGhlciBI
dXR0ZW4tQ3phcHNraSAgPGNodXR0ZW5AcmltLmNvbT4KIAogICAgICAgICBCbGFja0JlcnJ5IC0g
U3VwcG9ydCBQcm94eS1BdXRoZW50aWNhdGUgaGVhZGVycyB3aGVuIGEgcHJveHkgaXMgY29uZmln
dXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDAxMWUyNTg5N2MxNTVlMzUyZjVjMTU0OGU3
OTNjZjNiNzVkMGMyZmIuLmE5MjNmZmMyMWE4NGMyOWMxY2EyYzllNWMxZGNlNGMxN2E2YzQwYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTk0MCwxNiArOTQwLDE3IEBAIHZvaWQgRWxlbWVu
dDo6YXR0YWNoKCkKICAgICBSZW5kZXJXaWRnZXQ6OnN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRh
dGVzKCk7CiAKICAgICBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7Ci0gICAgCiAgICAgU3R5bGVT
ZWxlY3RvclBhcmVudFB1c2hlciBwYXJlbnRQdXNoZXIodGhpcyk7CiAKLSAgICBpZiAoZmlyc3RD
aGlsZCgpKQotICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOwotICAgIENvbnRhaW5lck5vZGU6
OmF0dGFjaCgpOwotCisgICAgLy8gV2hlbiBhIHNoYWRvdyByb290IGV4aXN0cywgaXQgZG9lcyB0
aGUgd29yayBvZiBhdHRhY2hpbmcgdGhlIGNoaWxkcmVuLgogICAgIGlmIChTaGFkb3dSb290KiBz
aGFkb3cgPSBzaGFkb3dSb290KCkpIHsKKyAgICAgICAgTm9kZTo6YXR0YWNoKCk7CiAgICAgICAg
IHBhcmVudFB1c2hlci5wdXNoKCk7CiAgICAgICAgIHNoYWRvdy0+YXR0YWNoKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHBhcmVudFB1c2hl
ci5wdXNoKCk7CisgICAgICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwogICAgIH0KIAogICAg
IGlmIChoYXNSYXJlRGF0YSgpKSB7ICAgCkBAIC05NzIsOSArOTczLDEyIEBAIHZvaWQgRWxlbWVu
dDo6ZGV0YWNoKCkKICAgICBjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKICAgICBpZiAo
aGFzUmFyZURhdGEoKSkKICAgICAgICAgcmFyZURhdGEoKS0+cmVzZXRDb21wdXRlZFN0eWxlKCk7
Ci0gICAgQ29udGFpbmVyTm9kZTo6ZGV0YWNoKCk7Ci0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRv
dyA9IHNoYWRvd1Jvb3QoKSkKKworICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBzaGFkb3dS
b290KCkpIHsKKyAgICAgICAgTm9kZTo6ZGV0YWNoKCk7CiAgICAgICAgIHNoYWRvdy0+ZGV0YWNo
KCk7CisgICAgfSBlbHNlCisgICAgICAgIENvbnRhaW5lck5vZGU6OmRldGFjaCgpOwogCiAgICAg
UmVuZGVyV2lkZ2V0OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5jcHAKaW5kZXggNDAyMmU5YWVhMTc2ODQ4MTgyMjcyYjA3ODQyYzM5Yzk1
NDEyZjc4Yi4uZjNiZTRjYzdiMjdlMzZhMDIyZTIzNTA4NmQ2Mzc5NmZkZTJlM2Q1NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmNwcApAQCAtOTksNyArOTksNyBAQCBib29sIFNoYWRvd1Jvb3Q6
OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUgdHlwZSkgY29uc3QKIAogdm9pZCBTaGFkb3dSb290
OjpyZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQogewotICAgIGlmICho
YXNDb250ZW50RWxlbWVudCgpKQorICAgIGlmIChuZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygp
IHx8IGhhc0NvbnRlbnRFbGVtZW50KCkpCiAgICAgICAgIHJlYXR0YWNoKCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKQEAgLTExMCw2ICsxMTAsNyBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRv
d1RyZWVTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBj
bGVhck5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CiAgICAgY2xlYXJOZWVkc1N0eWxlUmVj
YWxjKCk7CiAgICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KQEAgLTE2Niw2ICsx
NjcsMjEgQEAgdm9pZCBTaGFkb3dSb290OjphdHRhY2goKQogICAgIFRyZWVTY29wZTo6YXR0YWNo
KCk7CiAgICAgaWYgKG1faW5jbHVzaW9ucykKICAgICAgICAgbV9pbmNsdXNpb25zLT5kaWRTZWxl
Y3QoKTsKKworICAgIGZvciAoTm9kZSogY2hpbGQgPSBzaGFkb3dIb3N0KCktPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFj
aGlsZC0+YXR0YWNoZWQoKSkKKyAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAgICB9Cit9
CisKK3ZvaWQgU2hhZG93Um9vdDo6ZGV0YWNoKCkKK3sKKyAgICBUcmVlU2NvcGU6OmRldGFjaCgp
OworCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IHNoYWRvd0hvc3QoKS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQt
PmF0dGFjaGVkKCkpCisgICAgICAgICAgICBjaGlsZC0+ZGV0YWNoKCk7CisgICAgfQogfQogCiBD
b250ZW50SW5jbHVzaW9uU2VsZWN0b3IqIFNoYWRvd1Jvb3Q6OmluY2x1c2lvbnMoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggODM2ZTRhYWFjZDRmNmNlMTVmN2NhZWNiYjhiZmI3
NjY0N2JmY2Q3YS4uOTQxY2JjMWUyZWUxMTI4NjkyNDM0MDAwZmVkZGI3ZjhhNDVjYTcwZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC00MywxMSArNDMsMTYgQEAgcHVibGljOgogCiAgICAg
dm9pZCByZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2UpOwogCisgICAgdm9pZCBzZXRO
ZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpOworICAgIHZvaWQgY2xlYXJOZWVkc1NoYWRvd1Ry
ZWVTdHlsZVJlY2FsYygpOworICAgIGJvb2wgbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKTsK
KwogICAgIEhUTUxDb250ZW50RWxlbWVudCogaW5jbHVkZXJGb3IoTm9kZSopIGNvbnN0OwogICAg
IHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGJvb2wgaXNJbmNsdXNpb25TZWxlY3Rv
ckFjdGl2ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2goKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseUF1dGhvclNoZWV0cygp
IGNvbnN0OwogICAgIHZvaWQgc2V0QXBwbHlBdXRob3JTaGVldHMoYm9vbCk7CkBAIC02OCw3ICs3
Myw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0NvbnRlbnRFbGVtZW50KCkgY29uc3Q7CiAK
LSAgICBib29sIG1fYXBwbHlBdXRob3JTaGVldHM7CisgICAgYm9vbCBtX2FwcGx5QXV0aG9yU2hl
ZXRzIDogMTsKKyAgICBib29sIG1fbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMgOiAxOwogICAg
IE93blB0cjxDb250ZW50SW5jbHVzaW9uU2VsZWN0b3I+IG1faW5jbHVzaW9uczsKIH07CiAKQEAg
LTc3LDYgKzgzLDIxIEBAIGlubGluZSBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IFNoYWRvd1Jvb3Q6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFk
b3dSb290KGRvY3VtZW50KSk7CiB9CiAKK2lubGluZSB2b2lkIFNoYWRvd1Jvb3Q6OnNldE5lZWRz
U2hhZG93VHJlZVN0eWxlUmVjYWxjKCkKK3sKKyAgICBtX25lZWRzU2hhZG93VHJlZVN0eWxlUmVj
YWxjID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgU2hhZG93Um9vdDo6Y2xlYXJOZWVkc1NoYWRv
d1RyZWVTdHlsZVJlY2FsYygpCit7CisgICAgbV9uZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYyA9
IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBTaGFkb3dSb290OjpuZWVkc1NoYWRvd1RyZWVTdHls
ZVJlY2FsYygpCit7CisgICAgcmV0dXJuIG1fbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGM7Cit9
CisKIGlubGluZSBTaGFkb3dSb290KiB0b1NoYWRvd1Jvb3QoTm9kZSogbm9kZSkKIHsKICAgICBB
U1NFUlQoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpTSEFET1dfUk9PVF9OT0RF
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQu
Y3BwCmluZGV4IDhjNmVkYjZlOGI3MTNmZGMxNDUwOTAxNzFjOTlkYzRjMzYxMjJlZjEuLjA3MmY2
MzU3YjY1NDQ0ZTk1ZmQ0YWMzOGU5YWI5NzBiOTlmYmE0ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcApAQCAtODMsOCArODMsNiBA
QCB2b2lkIEhUTUxDb250ZW50RWxlbWVudDo6YXR0YWNoKCkKIAogICAgIGlmIChyb290KSB7CiAg
ICAgICAgIGZvciAoU2hhZG93SW5jbHVzaW9uKiBpbmNsdXNpb24gPSBtX2luY2x1c2lvbnMtPmZp
cnN0KCk7IGluY2x1c2lvbjsgaW5jbHVzaW9uID0gaW5jbHVzaW9uLT5uZXh0KCkpCi0gICAgICAg
ICAgICBpbmNsdXNpb24tPmNvbnRlbnQoKS0+ZGV0YWNoKCk7Ci0gICAgICAgIGZvciAoU2hhZG93
SW5jbHVzaW9uKiBpbmNsdXNpb24gPSBtX2luY2x1c2lvbnMtPmZpcnN0KCk7IGluY2x1c2lvbjsg
aW5jbHVzaW9uID0gaW5jbHVzaW9uLT5uZXh0KCkpCiAgICAgICAgICAgICBpbmNsdXNpb24tPmNv
bnRlbnQoKS0+YXR0YWNoKCk7CiAgICAgfQogfQpAQCAtOTQsNiArOTIsMTEgQEAgdm9pZCBIVE1M
Q29udGVudEVsZW1lbnQ6OmRldGFjaCgpCiAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSB0b1No
YWRvd1Jvb3Qoc2hhZG93VHJlZVJvb3ROb2RlKCkpKSB7CiAgICAgICAgIGlmIChDb250ZW50SW5j
bHVzaW9uU2VsZWN0b3IqIHNlbGVjdG9yID0gcm9vdC0+aW5jbHVzaW9ucygpKQogICAgICAgICAg
ICAgc2VsZWN0b3ItPnVuc2VsZWN0KG1faW5jbHVzaW9ucy5nZXQoKSk7CisKKyAgICAgICAgLy8g
V2hlbiBjb250ZW50IGVsZW1lbnQgaXMgZGV0YWNoZWQsIHNoYWRvdyB0cmVlIHNob3VsZCBiZSBy
ZWNyZWF0ZWQgdG8gcmUtY2FsY3VsYXRlIGluY2x1c2lvbnMgZm9yCisgICAgICAgIC8vIG90aGVy
IGNvbnRlbnQgZWxlbWVudHMuCisgICAgICAgIHJvb3QtPnNldE5lZWRzU2hhZG93VHJlZVN0eWxl
UmVjYWxjKCk7CisgICAgICAgIHJvb3QtPnNoYWRvd0hvc3QoKS0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwogICAgIH0KIAogICAgIEFTU0VSVChtX2luY2x1c2lvbnMtPmlzRW1wdHkoKSk7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggZGQ1NWZjYmYzMjYzYmZiMjA3ZDYxNTAyYTU1MjE2MzRlN2IyNTAwMC4uMGMzMzU3ZjQ4YmVi
NWM3MzA3MjFkNDkyYTVlZTk3YTcwMjNlZjYwNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEy
LTAxLTMwICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAg
Q29udGVudCBlbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3Jl
bW92ZWQvcmVwbGFjZWQgaW4gYSBzaGFkb3cgdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBjYXNlcyBmb3IgYXBwZW5kaW5nL3JlbW92aW5n
L3JlcGxhY2luZyBjb250ZW50IGVsZW1lbnQgaW4gYSBzaGFkb3cgdHJlZS4KKworICAgICAgICAq
IGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS5odG1sOiBB
ZGRlZC4KKwogMjAxMi0wMS0zMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IHR5cG8gaW4gdGVzdCBuYW1lIGZyb20gbXkgbGFzdCBjb21taXQuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVu
dC1tb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWZlZTFkMTBiZWM3MmYzYzJjZGVlN2Uz
ZWQ4YmM3NmRhNDc2YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBA
Cit0ZXN0UmVtb3ZlQ29udGVudAorUEFTUwordGVzdFJlbW92ZUNvbnRlbnRUb1JlY2FsYzEKK1BB
U1MKK3Rlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMyCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudEFu
ZFJlbW92ZUxpZ2h0Q2hpbGRyZW4KK1BBU1MKK3Rlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hh
ZG93Um9vdDEKK1BBU1MKK3Rlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDIKK1BB
U1MKK3Rlc3RBcHBlbmRDb250ZW50MQorUEFTUwordGVzdEFwcGVuZENvbnRlbnQyCitQQVNTCit0
ZXN0QXBwZW5kQ29udGVudDMKK1BBU1MKK3Rlc3RDaGFuZ2VPcmRlck9mQ29udGVudAorUEFTUwor
dGVzdE1vdmVMaWdodENoaWxkT3V0CitQQVNTCitURVNUIENPTVBMRVRFRAorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA2MTdiMzUzMjhlNjAyNTMzZDYxMTg0YWUyNTUzOTExMDg4NDlkYzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50
LW1vdmUuaHRtbApAQCAtMCwwICsxLDUwNCBAQAorIDwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKy8qIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGVuc3VyZXMgdW5kZXJseWlu
ZyBSZW5kZXJMYXllciAqLworLmNvbnRhaW5lciB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOwor
fQorCisuc3BhbiB7CisgICAgZGlzcGxheTogYm94ZWQtaW5saW5lOworICAgIG1hcmdpbjogMnB4
OworICAgIGJvcmRlcjogc29saWQ7Cit9Cis8L3N0eWxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxv
ZyhtZXNzYWdlKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5l
ckhUTUwgKz0gKG1lc3NhZ2UgKyAiXG4iKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlQWxsQ2hpbGRy
ZW4oZWxlbSkgeworICAgIHdoaWxlIChlbGVtLmZpcnN0Q2hpbGQpCisgICAgICAgIGVsZW0ucmVt
b3ZlQ2hpbGQoZWxlbS5maXJzdENoaWxkKTsKK30KKworZnVuY3Rpb24gY2xlYW5VcCgpIHsKKyAg
ICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRh
aW5lcicpKTsKKyAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
ZXhwZWN0LWNvbnRhaW5lcicpKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVyTGluZXMo
dGV4dCkgeworICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7CisgICAgbGluZXMuc3Bs
aWNlKDAsIDIpOworICAgIHJldHVybiBsaW5lcy5qb2luKCdcbicpOworfQorCitmdW5jdGlvbiBj
aGVjaygpIHsKKyAgICB2YXIgcmVmQ29udGFpbmVyUmVuZGVyVHJlZSA9IGludGVybmFscy5lbGVt
ZW50UmVuZGVyVHJlZUFzVGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRh
aW5lcicpKTsKKyAgICB2YXIgcmVmUmVuZGVyVHJlZSA9IHJlbW92ZUNvbnRhaW5lckxpbmVzKHJl
ZkNvbnRhaW5lclJlbmRlclRyZWUpOworCisgICAgdmFyIHRhcmdldENvbnRhaW5lclJlbmRlclRy
ZWUgPSBpbnRlcm5hbHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKSk7CisgICAgdmFyIHRhcmdldFJlbmRlclRyZWUgPSBy
ZW1vdmVDb250YWluZXJMaW5lcyh0YXJnZXRDb250YWluZXJSZW5kZXJUcmVlKTsKKworICAgIGlm
ICh0YXJnZXRSZW5kZXJUcmVlID09IHJlZlJlbmRlclRyZWUpCisgICAgICAgIGxvZygiUEFTUyIp
OworICAgIGVsc2UgeworICAgICAgICBsb2coIkZBSUwiKTsKKyAgICAgICAgbG9nKCJFeHBlY3Rl
ZDogIik7CisgICAgICAgIGxvZyhyZWZSZW5kZXJUcmVlKTsKKyAgICAgICAgbG9nKCJBY3R1YWw6
ICIpOworICAgICAgICBsb2codGFyZ2V0UmVuZGVyVHJlZSk7CisgICAgfQorfQorCitmdW5jdGlv
biBjcmVhdGVTcGFuV2l0aFRleHQodGV4dCkgeworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3BhbicpOworICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodGV4dCkpOworICAgIHJldHVybiBzcGFuOworfQorCitmdW5jdGlvbiBjcmVhdGVD
b250ZW50V2l0aFNlbGVjdChzZWxlY3QsIGZhbGxiYWNrKSB7CisgICAgdmFyIGNvbnRlbnQgPSBp
bnRlcm5hbHMuY3JlYXRlQ29udGVudEVsZW1lbnQoZG9jdW1lbnQpOworICAgIGNvbnRlbnQuc2V0
QXR0cmlidXRlKCdzZWxlY3QnLCBzZWxlY3QpOworICAgIGlmICghZmFsbGJhY2spCisgICAgICAg
IGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJGQUxMQkFDSyIpKTsKKwor
ICAgIHJldHVybiBjb250ZW50OworfQorCitmdW5jdGlvbiBhcHBlbmRTaGFkb3codGFyZ2V0LCBz
ZWxlY3QpIHsKKyAgICB2YXIgcm9vdCA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHRhcmdl
dCk7CisKKyAgICB2YXIgY29udGVudCA9IGludGVybmFscy5jcmVhdGVDb250ZW50RWxlbWVudChk
b2N1bWVudCk7CisgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7Cisg
ICAgY29udGVudC5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkZBTExCQUNLIikpOwor
CisgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie1NIQURPVzog
IikpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgcm9vdC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKK30KKworZnVuY3Rpb24gYXBwZW5kU2hh
ZG93RGVlcCh0YXJnZXQsIHNlbGVjdCkgeworICAgIHZhciByb290ID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3QodGFyZ2V0KTsKKworICAgIHZhciBjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKKyAgICB7CisgICAgICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNy
ZWF0ZUNvbnRlbnRFbGVtZW50KGRvY3VtZW50KTsKKyAgICAgICAgY29udGVudC5zZXRBdHRyaWJ1
dGUoJ3NlbGVjdCcsIHNlbGVjdCk7CisgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRl
U3BhbldpdGhUZXh0KCJGQUxMQkFDSyIpKTsKKworICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie0lOTkVSOiAiKSk7CisgICAgICAgIGNoaWxkLmFwcGVu
ZENoaWxkKGNvbnRlbnQpOworICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgifSIpKTsKKyAgICB9CisKKyAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9XOiAiKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChjaGls
ZCk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsK
K30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGVzdCBGdW5jdGlvbnMuCisKK2Z1bmN0aW9uIHRl
c3RSZW1vdmVDb250ZW50KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9v
dC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFk
b3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFu
Jyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAg
c3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBw
ZW5kQ2hpbGQoY29udGVudCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0
KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFp
bmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBj
b250ZW50LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGNvbnRlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250ZW50KTsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1M
ID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7Cisg
ICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVu
dCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0
ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMShjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVl
LgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuIGNsYXNzPSdjMSc+TElHSFQgMTwvc3Bhbj48
c3Bhbj5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAg
dmFyIGNvbnRlbnQxID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJy5jMScpOworICAgIHZhciBj
b250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0g
aW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3Jl
YXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudDEp
OworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiTUlEIikpOworICAgIHNy
LmFwcGVuZENoaWxkKGNvbnRlbnQyKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0
aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1j
b250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJv
b3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGNvbnRlbnQxLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudDEpOwor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5p
bm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+TUlEPC9zcGFuPjxzcGFu
PkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rp
dj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3Qs
IGNvbnRlbnQxLCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMyKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIg
cm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxp
Z2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bh
biBjbGFzcz0nYzEnPkxJR0hUIDI8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJl
ZS4KKyAgICB2YXIgY29udGVudDEgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnLmMxJyk7Cisg
ICAgdmFyIGNvbnRlbnQyID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICB2
YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICBzci5hcHBlbmRD
aGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChj
b250ZW50MSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJNSUQiKSk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudDIpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0
ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
YWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVu
Y3Rpb24ocm9vdCwgY29udGVudDEsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgY29udGVudDEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250
ZW50MSk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRh
aW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5NSUQ8L3Nw
YW4+PHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkFGVEVSPC9z
cGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAg
fSkocm9vdCwgY29udGVudDEsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsK
K30KKworZnVuY3Rpb24gdGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVMaWdodENoaWxkcmVuKGNh
bGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNw
YW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIg
Y29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0g
aW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3Jl
YXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQo
cm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50LCBjYWxsSWZEb25l
KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChjb250ZW50KTsKKyAgICAgICAgICAgIHJlbW92ZUFsbENoaWxk
cmVuKHJvb3QpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1j
b250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+QUZU
RVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsK
KyAgICB9KShyb290LCBjb250ZW50LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwg
MCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVTaGFkb3dSb290KGNhbGxJZkRvbmUpIHsKKyAg
ICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3Jl
YXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+
IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0
ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0
KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2
YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGludGVybmFscy5yZW1vdmVTaGFkb3dSb290
KHJvb3QpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250
YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5MSUdIVDwvc3Bhbj48L2Rpdj4iOworICAg
ICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQs
IGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVz
dFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVTaGFkb3dSb290MShjYWxsSWZEb25lKSB7CisgICAgdmFy
IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBs
aWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisK
KyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250
ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFk
b3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVG
T1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYg
PSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
Y29udGVudCk7CisgICAgICAgICAgICBpbnRlcm5hbHMucmVtb3ZlU2hhZG93Um9vdChyb290KTsK
KyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJyku
aW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQ8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAg
IGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBjb250ZW50LCBjYWxsSWZE
b25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVD
b250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDIoY2FsbElmRG9uZSkgeworICAgIHZhciByb290ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJl
ZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5MSUdIVCAxPC9zcGFuPjxzcGFuIGNsYXNz
PSdjMSc+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAg
IHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJy5jMScpOworICAgIHZhciBz
ciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRl
bnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENo
aWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElm
RG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudCk7CisgICAgICAgICAgICBpbnRlcm5hbHMu
cmVtb3ZlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQgMTwv
c3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25l
KCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSk7CisKKyAg
ICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0QXBwZW5kQ29udGVudDEoY2Fs
bElmRG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bh
bj5MSUdIVDwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBz
ciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0
ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
YWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVu
Y3Rpb24ocm9vdCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7
CisgICAgICAgICAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsK
KyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50LCBzci5sYXN0Q2hpbGQpOworICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5l
ckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PFNQQU4+TElHSFQ8L3NwYW4+PHNwYW4+
QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAg
fTsKKyAgICB9KShyb290LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RBcHBlbmRDb250ZW50MihjYWxsSWZEb25lKSB7CisgICAgdmFyIHJv
b3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdo
dCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4g
Y2xhc3M9J2MyJz5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUu
CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3Iu
YXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2
YXIgZiA9IChmdW5jdGlvbihyb290LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2Vs
ZWN0KCcuYzInKTsKKyAgICAgICAgICAgIHZhciBjb250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRo
U2VsZWN0KCdzcGFuJyk7CisgICAgICAgICAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hh
ZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50MSwgc3Iu
bGFzdENoaWxkKTsKKyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50Miwgc3IubGFz
dENoaWxkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29u
dGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFuPkxJR0hU
IDI8L3NwYW4+PHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOwor
ICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNhbGxJ
ZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdEFwcGVu
ZENvbnRlbnQzKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5l
ckhUTUwgPSAiPHNwYW4+TElHSFQgMTwvc3Bhbj48c3BhbiBjbGFzcz0nYzInPkxJR0hUIDI8L3Nw
YW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgc3IgPSBpbnRlcm5h
bHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICB2YXIgbWlkID0gY3JlYXRlU3BhbldpdGhU
ZXh0KCJNSUQiKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9S
RSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChtaWQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0
ZUNvbnRlbnRXaXRoU2VsZWN0KCcuYzInKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3Bh
bldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1
YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlv
bihyb290LCBtaWQsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bhbicp
OworICAgICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7
CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29udGVudCwgbWlkKTsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0K
KyAgICAgICAgICAgICAgICAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+TElHSFQgMTwv
c3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPk1JRDwvc3Bhbj48c3Bhbj5GQUxMQkFDSzwv
c3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgp
OworICAgICAgICB9OworICAgIH0pKHJvb3QsIG1pZCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRU
aW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0Q2hhbmdlT3JkZXJPZkNvbnRlbnQoY2Fs
bElmRG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bh
biBjbGFzcz0nYzEnPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj4iOworCisgICAg
Ly8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFk
b3dSb290KHJvb3QpOworICAgIHZhciBjb250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0
KCcuYzEnKTsKKyAgICB2YXIgY29udGVudDIgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bh
bicpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOwor
ICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQxKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50
Mik7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKwor
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hp
bGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50MSwgY2FsbElm
RG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgc3Ig
PSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIHNyLnJlbW92
ZUNoaWxkKGNvbnRlbnQxKTsKKyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50MSwg
c3IubGFzdENoaWxkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBl
Y3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0KKyAgICAgICAgICAgICAgICAiPGRpdj48c3Bhbj5C
RUZPUkU8L3NwYW4+PFNQQU4+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFu
PkZBTExCQUNLPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBj
YWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudDEsIGNhbGxJZkRv
bmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdE1vdmVMaWdo
dENoaWxkT3V0KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgdmFyIG4xID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgbjEuc2V0QXR0cmlidXRlKCdpZCcs
ICduMScpOworICAgIG4xLmlubmVySFRNTCA9ICI8c3BhbiBpZD0nbGlnaHQxJz5MSUdIVCAxPC9z
cGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+IjsKKyAgICB2YXIgbjIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICBuMi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ24yJyk7CisKKyAgICBy
b290LmFwcGVuZENoaWxkKG4xKTsKKyAgICByb290LmFwcGVuZENoaWxkKG4yKTsKKworICAgIC8v
IENyZWF0ZSBzaGFkb3cgdHJlZSBpbiAnbjEnCisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3QobjEpOworICAgIHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxl
Y3QoJ3NwYW4nKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9S
RSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAgICBzci5hcHBlbmRDaGlsZChj
cmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0g
KGZ1bmN0aW9uKHJvb3QsIG4yLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpZ2h0
MScpOworICAgICAgICAgICAgZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOworICAgICAgICAg
ICAgbjIuYXBwZW5kQ2hpbGQoZSk7CisKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0KKyAgICAgICAgICAgICAgICAiPGRp
dj48ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkFGVEVS
PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+TElHSFQgMTwvc3Bhbj48L2Rpdj48L2Rpdj4iCisgICAg
ICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgbjIsIGNhbGxJ
ZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gVGVzdCBEcml2ZXJzLgorCit2YXIgdGVzdEZ1bmNzID0gWworICAgIHRlc3RSZW1vdmVDb250
ZW50LAorICAgIHRlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMxLAorICAgIHRlc3RSZW1vdmVDb250
ZW50VG9SZWNhbGMyLAorICAgIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlTGlnaHRDaGlsZHJl
biwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QxLAorICAgIHRlc3RS
ZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDIsCisgICAgdGVzdEFwcGVuZENvbnRlbnQx
LAorICAgIHRlc3RBcHBlbmRDb250ZW50MiwKKyAgICB0ZXN0QXBwZW5kQ29udGVudDMsCisgICAg
dGVzdENoYW5nZU9yZGVyT2ZDb250ZW50LAorICAgIHRlc3RNb3ZlTGlnaHRDaGlsZE91dAorXTsK
KworZnVuY3Rpb24gZG9UZXN0SWZMZWZ0KCkgeworICAgIHZhciB0ZXN0ID0gdGVzdEZ1bmNzLnNo
aWZ0KCk7CisgICAgaWYgKHRlc3QgPT0gbnVsbCkKKyAgICAgICAgcmV0dXJuIGRvbmVUZXN0KCk7
CisKKyAgICB2YXIgY2FsbElmRG9uZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY2hlY2soKTsKKyAgICAgICAgICAgIGNsZWFuVXAo
KTsKKyAgICAgICAgICAgIGRvVGVzdElmTGVmdCgpOworICAgICAgICB9LCAwKTsKKyAgICB9Owor
CisgICAgbG9nKHRlc3QubmFtZSk7CisgICAgdGVzdChjYWxsSWZEb25lKTsKK30KKworZnVuY3Rp
b24gZG9uZVRlc3QoKSB7CisgICAgbG9nKCJURVNUIENPTVBMRVRFRCIpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gZG9UZXN0KCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgfQorCisgICAgY2xlYW5VcCgpOworICAgIGRvVGVzdElmTGVmdCgp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKworPGRp
diBpZD0iYWN0dWFsLWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciI+PC9kaXY+Cis8ZGl2IGlk
PSJleHBlY3QtY29udGFpbmVyIiBjbGFzcz0iY29udGFpbmVyIj48L2Rpdj4KKzxwcmUgaWQ9ImNv
bnNvbGUiPjwvcHJlPgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124705</attachid>
            <date>2012-01-31 04:09:44 -0800</date>
            <delta_ts>2012-01-31 17:54:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76611-20120131210942.patch</filename>
            <type>text/plain</type>
            <size>26888</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI3ODJlYzhlNjk0YTFm
NzQwMTJhNWQwZTE1NjFlZWI0MmM3OWQ2Yi4uNTI3MDM5OGY4ZTk3NzExNGVhMzkyMGNjMDE2OTlm
YWQ0NWNiMDgxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAxLTMxICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ29udGVudCBlbGVt
ZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFj
ZWQgaW4gYSBzaGFkb3cgdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hlbiBhIGNvbnRlbnQgZWxlbWVudCBpcyBhZGRlZC9yZW1vdmVkL3JlcGxh
Y2VkIGluIGEgc2hhZG93IHRyZWUsIHdlIGhhdmUgdG8gcmVjcmVhdGUKKyAgICAgICAgdGhlIHNo
YWRvdyB0cmVlIHRvIHJlY2FsY3VsYXRlIGluY2x1c2lvbnMgb2YgY29udGVudCBlbGVtZW50cy4g
Q3VycmVudGx5IHdlIGRpZG4ndCByZWNhbGN1bGF0ZSBpdAorICAgICAgICB3aGVuIGNvbnRlbnQg
ZWxlbWVudCBpcyByZW1vdmVkLiAoV2hlbiBhZGRlZCwgaXQgaXMgcmVjYWxjdWxhdGVkLikKKyAg
ICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHVzIHRvIHJlY2FsY3VyYXRlIHRoZSBzaGFkb3cgdHJl
ZSB3aGVuIGNvbnRlbnQgZWxlbWVudCBpcyByZW1vdmVkLgorCisgICAgICAgIFRlc3Q6IGZhc3Qv
ZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS5odG1sCisKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAg
IElmIGEgc2hhZG93IHJvb3QgZXhpc3RzLCBhdHRhY2hlcyBzaGFkb3cgdHJlZSBiZWZvcmUgYXR0
YWNoaW5nIGNoaWxkIGVsZW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0YWNo
Q2hpbGRyZW5JZk5vdEF0dGFjaGVkKToKKyAgICAgICAgICBBdHRhY2hlcyBvbmx5IGNoaWxkIGVs
ZW1lbnRzIGlmIHRoZXkgYXJlIG5vdCBhdHRhY2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmRldGFjaENoaWxkcmVuSWZBdHRhY2hlZCk6CisgICAgICAgICAgRGV0YWNoZXMgb25seSBj
aGlsZCBlbGVtZW50cyBpZiB0aGV5IGFyZSBhdHRhY2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnJlYXR0YWNoQ2hpbGRyZW5BbmRTaGFkb3cpOgorICAgICAgICAgIFJlYXR0YWNoZXMg
b25seSBjaGlsZCBlbGVtZW50cyBhbmQgc2hhZG93IHRyZWUuCisgICAgICAgICogZG9tL0VsZW1l
bnQuaDoKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dSb290OjpyZWNhbGNTaGFkb3dUcmVlU3R5bGUpOgorICAgICAgICAgIFJlY2FsY3VsYXRl
cyBsaWdodCBjaGlsZHJlbiBhbmQgc2hhZG93IHRyZWUuCisgICAgICAgICogZG9tL1NoYWRvd1Jv
b3QuaDoKKyAgICAgICAgICBBZGRlZCBhIGZsYWcgdG8gcmVjYWxjdWxhdGUgc2hhZG93IHRyZWUu
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpzZXROZWVkc1NoYWRvd1RyZWVTdHlsZVJl
Y2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpjbGVhck5lZWRzU2hhZG93VHJl
ZVN0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6Om5lZWRzU2hhZG93
VHJlZVN0eWxlUmVjYWxjKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnRlbnRFbGVtZW50OjphdHRhY2gpOgor
ICAgICAgICAgIERvZXMgbm90IG5lZWQgdG8gZGV0YWNoIGluY2x1ZGVkIGVsZW1lbnRzLCBiZWNh
dXNlIHRoZXkgYXJlIG5vdCBhdHRhY2hlZCBpbiBDb250YWluZXJOb2RlIGFueW1vcmUuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29udGVudEVsZW1lbnQ6OmRldGFjaCk6CisgICAgICAgICAgV2hl
biBhIGNvbnRlbnQgZWxlbWVudCBkZXRhY2hlZCwgcmVhdHRhY2ggYSBzaGFkb3cgdHJlZS4KKwog
MjAxMi0wMS0zMCAgQ2hyaXN0b3BoZXIgSHV0dGVuLUN6YXBza2kgIDxjaHV0dGVuQHJpbS5jb20+
CiAKICAgICAgICAgQmxhY2tCZXJyeSAtIFN1cHBvcnQgUHJveHktQXV0aGVudGljYXRlIGhlYWRl
cnMgd2hlbiBhIHByb3h5IGlzIGNvbmZpZ3VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAw
MTFlMjU4OTdjMTU1ZTM1MmY1YzE1NDhlNzkzY2YzYjc1ZDBjMmZiLi4wYjgxMDU5NjUxYWFmNmQ5
NzhlYTM0ODNmMzdlNzJmNTQzMWZjYzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC05NDAs
MTYgKzk0MCwxOCBAQCB2b2lkIEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgUmVuZGVyV2lkZ2V0Ojpz
dXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpOwogCiAgICAgY3JlYXRlUmVuZGVyZXJJZk5l
ZWRlZCgpOwotICAgIAogICAgIFN0eWxlU2VsZWN0b3JQYXJlbnRQdXNoZXIgcGFyZW50UHVzaGVy
KHRoaXMpOwogCi0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcGFyZW50UHVzaGVyLnB1
c2goKTsKLSAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKLQorICAgIC8vIFdoZW4gYSBzaGFk
b3cgcm9vdCBleGlzdHMsIGl0IGRvZXMgdGhlIHdvcmsgb2YgYXR0YWNoaW5nIHRoZSBjaGlsZHJl
bi4KICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0gc2hhZG93Um9vdCgpKSB7CisgICAgICAg
IE5vZGU6OmF0dGFjaCgpOwogICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOwogICAgICAgICBz
aGFkb3ctPmF0dGFjaCgpOworICAgICAgICBhdHRhY2hDaGlsZHJlbklmTm90QXR0YWNoZWQoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgcGFy
ZW50UHVzaGVyLnB1c2goKTsKKyAgICAgICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7CiAgICAg
fQogCiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsgICAKQEAgLTk2NSw2ICs5NjcsMTQgQEAgdm9p
ZCBFbGVtZW50OjphdHRhY2goKQogICAgIHJlc3VtZVBvc3RBdHRhY2hDYWxsYmFja3MoKTsKIH0K
IAordm9pZCBFbGVtZW50OjphdHRhY2hDaGlsZHJlbklmTm90QXR0YWNoZWQoKQoreworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIGlmICghY2hpbGQtPmF0dGFjaGVkKCkpCisgICAgICAgICAg
ICBjaGlsZC0+YXR0YWNoKCk7CisgICAgfQorfQorCiB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiB7
CiAgICAgUmVuZGVyV2lkZ2V0OjpzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlcygpOwpAQCAt
OTc5LDYgKzk4OSwyNiBAQCB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiAgICAgUmVuZGVyV2lkZ2V0
OjpyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCk7CiB9CiAKK3ZvaWQgRWxlbWVudDo6ZGV0
YWNoQ2hpbGRyZW5JZkF0dGFjaGVkKCkKK3sKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBp
ZiAoY2hpbGQtPmF0dGFjaGVkKCkpCisgICAgICAgICAgICBjaGlsZC0+ZGV0YWNoKCk7CisgICAg
fQorfQorCit2b2lkIEVsZW1lbnQ6OnJlYXR0YWNoQ2hpbGRyZW5BbmRTaGFkb3coKQoreworICAg
IGRldGFjaENoaWxkcmVuSWZBdHRhY2hlZCgpOworCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3Qg
PSBzaGFkb3dSb290KCkpIHsKKyAgICAgICAgcm9vdC0+ZGV0YWNoKCk7CisgICAgICAgIHJvb3Qt
PmF0dGFjaCgpOworICAgIH0KKworICAgIGF0dGFjaENoaWxkcmVuSWZOb3RBdHRhY2hlZCgpOwor
fQorCiBib29sIEVsZW1lbnQ6OnBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQoY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewogICAgIEFTU0VS
VChjdXJyZW50U3R5bGUgPT0gcmVuZGVyU3R5bGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCAy
NWVjNzg1Njg1ZTBlMjk3ZWMwY2IyMmYwYjA2OTNiNDllZGM1ZWZjLi42MGU4MTMxN2U1Y2E2ZDA3
ODkwOTNmMjE5NmNlYTE1Y2YzMDdjYTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTIyOSw3ICsy
MjksMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVy
dGllcyhjb25zdCBFbGVtZW50KiBzb3VyY2UpOwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgp
OworICAgIHZvaWQgYXR0YWNoQ2hpbGRyZW5JZk5vdEF0dGFjaGVkKCk7CiAgICAgdmlydHVhbCB2
b2lkIGRldGFjaCgpOworICAgIHZvaWQgZGV0YWNoQ2hpbGRyZW5JZkF0dGFjaGVkKCk7CisgICAg
dm9pZCByZWF0dGFjaENoaWxkcmVuQW5kU2hhZG93KCk7CisKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAgIHZv
aWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgPSBOb0NoYW5nZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmNwcAppbmRleCA0MDIyZTlhZWExNzY4NDgxODIyNzJiMDc4NDJjMzljOTU0MTJmNzhi
Li43ZTdjYjUyMDM0ZDVlMDlkN2E2NGJkMzljYWY4ZDhjODM0MzdlM2I5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NoYWRvd1Jvb3QuY3BwCkBAIC05OSw5ICs5OSwxMCBAQCBib29sIFNoYWRvd1Jvb3Q6OmNoaWxk
VHlwZUFsbG93ZWQoTm9kZVR5cGUgdHlwZSkgY29uc3QKIAogdm9pZCBTaGFkb3dSb290OjpyZWNh
bGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQogewotICAgIGlmIChoYXNDb250
ZW50RWxlbWVudCgpKQotICAgICAgICByZWF0dGFjaCgpOwotICAgIGVsc2UgeworICAgIGlmIChu
ZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpIHx8IGhhc0NvbnRlbnRFbGVtZW50KCkpIHsKKyAg
ICAgICAgaWYgKGhvc3QoKSkKKyAgICAgICAgICAgIGhvc3QoKS0+cmVhdHRhY2hDaGlsZHJlbkFu
ZFNoYWRvdygpOworICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hp
bGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChuLT5pc0Vs
ZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5y
ZWNhbGNTdHlsZShjaGFuZ2UpOwpAQCAtMTEwLDYgKzExMSw3IEBAIHZvaWQgU2hhZG93Um9vdDo6
cmVjYWxjU2hhZG93VHJlZVN0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKICAgICAgICAgfQogICAg
IH0KIAorICAgIGNsZWFyTmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKTsKICAgICBjbGVhck5l
ZWRzU3R5bGVSZWNhbGMoKTsKICAgICBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggODM2ZTRhYWFjZDRmNmNlMTVmN2NhZWNiYjhiZmI3
NjY0N2JmY2Q3YS4uNzUxZTNmNTk2NWM5NzAwZTViMjI0ZGIzZjQzMmY5ODBjNmU5ODQ4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC00Myw2ICs0MywxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHJlY2FsY1NoYWRvd1RyZWVTdHlsZShTdHlsZUNoYW5nZSk7CiAKKyAgICB2b2lkIHNldE5l
ZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CisgICAgdm9pZCBjbGVhck5lZWRzU2hhZG93VHJl
ZVN0eWxlUmVjYWxjKCk7CisgICAgYm9vbCBuZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpOwor
CiAgICAgSFRNTENvbnRlbnRFbGVtZW50KiBpbmNsdWRlckZvcihOb2RlKikgY29uc3Q7CiAgICAg
dm9pZCBob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgYm9vbCBpc0luY2x1c2lvblNlbGVjdG9y
QWN0aXZlKCkgY29uc3Q7CkBAIC02OCw3ICs3Miw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhh
c0NvbnRlbnRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBib29sIG1fYXBwbHlBdXRob3JTaGVldHM7
CisgICAgYm9vbCBtX2FwcGx5QXV0aG9yU2hlZXRzIDogMTsKKyAgICBib29sIG1fbmVlZHNTaGFk
b3dUcmVlU3R5bGVSZWNhbGMgOiAxOwogICAgIE93blB0cjxDb250ZW50SW5jbHVzaW9uU2VsZWN0
b3I+IG1faW5jbHVzaW9uczsKIH07CiAKQEAgLTc3LDYgKzgyLDIxIEBAIGlubGluZSBQYXNzUmVm
UHRyPFNoYWRvd1Jvb3Q+IFNoYWRvd1Jvb3Q6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFkb3dSb290KGRvY3VtZW50KSk7CiB9CiAKK2lubGlu
ZSB2b2lkIFNoYWRvd1Jvb3Q6OnNldE5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCkKK3sKKyAg
ICBtX25lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQg
U2hhZG93Um9vdDo6Y2xlYXJOZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpCit7CisgICAgbV9u
ZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYyA9IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBTaGFk
b3dSb290OjpuZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpCit7CisgICAgcmV0dXJuIG1fbmVl
ZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGM7Cit9CisKIGlubGluZSBTaGFkb3dSb290KiB0b1NoYWRv
d1Jvb3QoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpTSEFET1dfUk9PVF9OT0RFKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwCmluZGV4IDhjNmVkYjZlOGI3MTNmZGMxNDUw
OTAxNzFjOTlkYzRjMzYxMjJlZjEuLmFlZjU3NjAxYzVkOGQwMDAxYWQ0ZTg4ZWFmZTI1MzhlZmM2
ZGE0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRF
bGVtZW50LmNwcApAQCAtODMsOCArODMsNiBAQCB2b2lkIEhUTUxDb250ZW50RWxlbWVudDo6YXR0
YWNoKCkKIAogICAgIGlmIChyb290KSB7CiAgICAgICAgIGZvciAoU2hhZG93SW5jbHVzaW9uKiBp
bmNsdXNpb24gPSBtX2luY2x1c2lvbnMtPmZpcnN0KCk7IGluY2x1c2lvbjsgaW5jbHVzaW9uID0g
aW5jbHVzaW9uLT5uZXh0KCkpCi0gICAgICAgICAgICBpbmNsdXNpb24tPmNvbnRlbnQoKS0+ZGV0
YWNoKCk7Ci0gICAgICAgIGZvciAoU2hhZG93SW5jbHVzaW9uKiBpbmNsdXNpb24gPSBtX2luY2x1
c2lvbnMtPmZpcnN0KCk7IGluY2x1c2lvbjsgaW5jbHVzaW9uID0gaW5jbHVzaW9uLT5uZXh0KCkp
CiAgICAgICAgICAgICBpbmNsdXNpb24tPmNvbnRlbnQoKS0+YXR0YWNoKCk7CiAgICAgfQogfQpA
QCAtOTQsNiArOTIsMTIgQEAgdm9pZCBIVE1MQ29udGVudEVsZW1lbnQ6OmRldGFjaCgpCiAgICAg
aWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSB0b1NoYWRvd1Jvb3Qoc2hhZG93VHJlZVJvb3ROb2RlKCkp
KSB7CiAgICAgICAgIGlmIChDb250ZW50SW5jbHVzaW9uU2VsZWN0b3IqIHNlbGVjdG9yID0gcm9v
dC0+aW5jbHVzaW9ucygpKQogICAgICAgICAgICAgc2VsZWN0b3ItPnVuc2VsZWN0KG1faW5jbHVz
aW9ucy5nZXQoKSk7CisKKyAgICAgICAgLy8gV2hlbiBjb250ZW50IGVsZW1lbnQgaXMgZGV0YWNo
ZWQsIHNoYWRvdyB0cmVlIHNob3VsZCBiZSByZWNyZWF0ZWQgdG8gcmUtY2FsY3VsYXRlIGluY2x1
c2lvbnMgZm9yCisgICAgICAgIC8vIG90aGVyIGNvbnRlbnQgZWxlbWVudHMuCisgICAgICAgIHJv
b3QtPnNldE5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CisgICAgICAgIGlmIChyb290LT5z
aGFkb3dIb3N0KCkpCisgICAgICAgICAgICByb290LT5zaGFkb3dIb3N0KCktPnNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICB9CiAKICAgICBBU1NFUlQobV9pbmNsdXNpb25zLT5pc0VtcHR5KCkp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IGRkNTVmY2JmMzI2M2JmYjIwN2Q2MTUwMmE1NTIxNjM0ZTdiMjUwMDAuLmY3ZmRi
ZjQ5Zjc4YTY0OTJjYTgzODE0OTZkN2VlZjRhODhmYjEyN2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxMi0wMS0zMSAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgorCisg
ICAgICAgIENvbnRlbnQgZWxlbWVudCBzaG91bGQgYmUgYWJsZSB0byBiZSBkeW5hbWljYWxseSBh
ZGRlZC9yZW1vdmVkL3JlcGxhY2VkIGluIGEgc2hhZG93IHRyZWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjYxMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgY2FzZXMgZm9yIGFwcGVuZGluZy9y
ZW1vdmluZy9yZXBsYWNpbmcgY29udGVudCBlbGVtZW50IGluIGEgc2hhZG93IHRyZWUuCisKKyAg
ICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUu
aHRtbDogQWRkZWQuCisKIDIwMTItMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0eXBvIGluIHRlc3QgbmFtZSBmcm9tIG15IGxhc3QgY29tbWl0
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVu
dC1tb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50
LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlmZWUxZDEwYmVjNzJmM2My
Y2RlZTdlM2VkOGJjNzZkYTQ3NmE2NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwyNCBAQAordGVzdFJlbW92ZUNvbnRlbnQKK1BBU1MKK3Rlc3RSZW1vdmVDb250ZW50VG9SZWNh
bGMxCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMgorUEFTUwordGVzdFJlbW92ZUNv
bnRlbnRBbmRSZW1vdmVMaWdodENoaWxkcmVuCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudEFuZFJl
bW92ZVNoYWRvd1Jvb3QxCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jv
b3QyCitQQVNTCit0ZXN0QXBwZW5kQ29udGVudDEKK1BBU1MKK3Rlc3RBcHBlbmRDb250ZW50Mgor
UEFTUwordGVzdEFwcGVuZENvbnRlbnQzCitQQVNTCit0ZXN0Q2hhbmdlT3JkZXJPZkNvbnRlbnQK
K1BBU1MKK3Rlc3RNb3ZlTGlnaHRDaGlsZE91dAorUEFTUworVEVTVCBDT01QTEVURUQKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3Zl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNjE3YjM1MzI4ZTYwMjUzM2Q2MTE4NGFlMjU1MzkxMTA4ODQ5ZGMz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRlbnQt
ZWxlbWVudC1tb3ZlLmh0bWwKQEAgLTAsMCArMSw1MDQgQEAKKyA8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c3R5bGU+CisvKiByZWxhdGl2ZSBwb3NpdGlvbmluZyBlbnN1cmVzIHVu
ZGVybHlpbmcgUmVuZGVyTGF5ZXIgKi8KKy5jb250YWluZXIgeworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKK30KKworLnNwYW4geworICAgIGRpc3BsYXk6IGJveGVkLWlubGluZTsKKyAgICBtYXJn
aW46IDJweDsKKyAgICBib3JkZXI6IHNvbGlkOworfQorPC9zdHlsZT4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBsb2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuaW5uZXJIVE1MICs9IChtZXNzYWdlICsgIlxuIik7Cit9CisKK2Z1bmN0aW9uIHJlbW92ZUFs
bENoaWxkcmVuKGVsZW0pIHsKKyAgICB3aGlsZSAoZWxlbS5maXJzdENoaWxkKQorICAgICAgICBl
bGVtLnJlbW92ZUNoaWxkKGVsZW0uZmlyc3RDaGlsZCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFuVXAo
KSB7CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVh
bC1jb250YWluZXInKSk7CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKSk7Cit9CisKK2Z1bmN0aW9uIHJlbW92ZUNvbnRhaW5l
ckxpbmVzKHRleHQpIHsKKyAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcbicpOworICAgIGxp
bmVzLnNwbGljZSgwLCAyKTsKKyAgICByZXR1cm4gbGluZXMuam9pbignXG4nKTsKK30KKworZnVu
Y3Rpb24gY2hlY2soKSB7CisgICAgdmFyIHJlZkNvbnRhaW5lclJlbmRlclRyZWUgPSBpbnRlcm5h
bHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVj
dC1jb250YWluZXInKSk7CisgICAgdmFyIHJlZlJlbmRlclRyZWUgPSByZW1vdmVDb250YWluZXJM
aW5lcyhyZWZDb250YWluZXJSZW5kZXJUcmVlKTsKKworICAgIHZhciB0YXJnZXRDb250YWluZXJS
ZW5kZXJUcmVlID0gaW50ZXJuYWxzLmVsZW1lbnRSZW5kZXJUcmVlQXNUZXh0KGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykpOworICAgIHZhciB0YXJnZXRSZW5kZXJU
cmVlID0gcmVtb3ZlQ29udGFpbmVyTGluZXModGFyZ2V0Q29udGFpbmVyUmVuZGVyVHJlZSk7CisK
KyAgICBpZiAodGFyZ2V0UmVuZGVyVHJlZSA9PSByZWZSZW5kZXJUcmVlKQorICAgICAgICBsb2co
IlBBU1MiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9nKCJGQUlMIik7CisgICAgICAgIGxvZygi
RXhwZWN0ZWQ6ICIpOworICAgICAgICBsb2cocmVmUmVuZGVyVHJlZSk7CisgICAgICAgIGxvZygi
QWN0dWFsOiAiKTsKKyAgICAgICAgbG9nKHRhcmdldFJlbmRlclRyZWUpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gY3JlYXRlU3BhbldpdGhUZXh0KHRleHQpIHsKKyAgICB2YXIgc3BhbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKHRleHQpKTsKKyAgICByZXR1cm4gc3BhbjsKK30KKworZnVuY3Rpb24g
Y3JlYXRlQ29udGVudFdpdGhTZWxlY3Qoc2VsZWN0LCBmYWxsYmFjaykgeworICAgIHZhciBjb250
ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KGRvY3VtZW50KTsKKyAgICBjb250
ZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0Jywgc2VsZWN0KTsKKyAgICBpZiAoIWZhbGxiYWNrKQor
ICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0si
KSk7CisKKyAgICByZXR1cm4gY29udGVudDsKK30KKworZnVuY3Rpb24gYXBwZW5kU2hhZG93KHRh
cmdldCwgc2VsZWN0KSB7CisgICAgdmFyIHJvb3QgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9v
dCh0YXJnZXQpOworCisgICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVudEVs
ZW1lbnQoZG9jdW1lbnQpOworICAgIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdzZWxlY3QnLCBzZWxl
Y3QpOworICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJGQUxMQkFD
SyIpKTsKKworICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIntT
SEFET1c6ICIpKTsKKyAgICByb290LmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHJvb3QuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIn0iKSk7Cit9CisKK2Z1bmN0aW9uIGFw
cGVuZFNoYWRvd0RlZXAodGFyZ2V0LCBzZWxlY3QpIHsKKyAgICB2YXIgcm9vdCA9IGludGVybmFs
cy5lbnN1cmVTaGFkb3dSb290KHRhcmdldCk7CisKKyAgICB2YXIgY2hpbGQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgeworICAgICAgICB2YXIgY29udGVudCA9IGludGVy
bmFscy5jcmVhdGVDb250ZW50RWxlbWVudChkb2N1bWVudCk7CisgICAgICAgIGNvbnRlbnQuc2V0
QXR0cmlidXRlKCdzZWxlY3QnLCBzZWxlY3QpOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiRkFMTEJBQ0siKSk7CisKKyAgICAgICAgY2hpbGQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIntJTk5FUjogIikpOworICAgICAgICBjaGls
ZC5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAgICAgICAgY2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoIn0iKSk7CisgICAgfQorCisgICAgcm9vdC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie1NIQURPVzogIikpOworICAgIHJvb3QuYXBwZW5kQ2hp
bGQoY2hpbGQpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
In0iKSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRlc3QgRnVuY3Rpb25zLgorCitmdW5j
dGlvbiB0ZXN0UmVtb3ZlQ29udGVudChjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgor
ICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisKKyAgICAvLyBDcmVh
dGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVj
dCgnc3BhbicpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3Qp
OworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAg
IHNyLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5X
aXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFs
LWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24o
cm9vdCwgY29udGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudCk7Cisg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlu
bmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rp
dj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3Qs
IGNvbnRlbnQsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVu
Y3Rpb24gdGVzdFJlbW92ZUNvbnRlbnRUb1JlY2FsYzEoY2FsbElmRG9uZSkgeworICAgIHZhciBy
b290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBDcmVhdGUgbGln
aHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3BhbiBjbGFzcz0nYzEnPkxJR0hUIDE8
L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVl
LgorICAgIHZhciBjb250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCcuYzEnKTsKKyAg
ICB2YXIgY29udGVudDIgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZh
ciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENo
aWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNv
bnRlbnQxKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIk1JRCIpKTsK
KyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50Mik7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRl
U3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdh
Y3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5j
dGlvbihyb290LCBjb250ZW50MSwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBjb250ZW50MS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRl
bnQxKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFp
bmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFuPk1JRDwvc3Bh
bj48c3Bhbj5MSUdIVCAxPC9zcGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+PHNwYW4+QUZURVI8L3Nw
YW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9
KShyb290LCBjb250ZW50MSwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOwor
fQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMihjYWxsSWZEb25lKSB7Cisg
ICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENy
ZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUIDE8L3Nw
YW4+PHNwYW4gY2xhc3M9J2MxJz5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hh
ZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQxID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJy5j
MScpOworICAgIHZhciBjb250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7
CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3Iu
YXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY29udGVudDEpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgi
TUlEIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQyKTsKKyAgICBzci5hcHBlbmRDaGls
ZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBm
ID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQxLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQoY29udGVudDEpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVj
dC1jb250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+
TUlEPC9zcGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48c3Bhbj5B
RlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9
OworICAgIH0pKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQo
ZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlTGlnaHRDaGls
ZHJlbihjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1M
ID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisg
ICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZh
ciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENo
aWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNv
bnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7
CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVu
ZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2Fs
bElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250
ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudCk7CisgICAgICAgICAgICByZW1vdmVB
bGxDaGlsZHJlbihyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdl
eHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxz
cGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAg
ICAgIH07CisgICAgfSkocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1l
b3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlU2hhZG93Um9vdChjYWxsSWZEb25l
KSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAg
IC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hU
PC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQg
PSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZhciBzciA9IGludGVybmFs
cy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5X
aXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNy
LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOwor
CisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSkgeworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnRlcm5hbHMucmVtb3ZlU2hh
ZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBl
Y3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQ8L3NwYW4+PC9kaXY+
IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBj
b250ZW50LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDEoY2FsbElmRG9uZSkgewor
ICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBD
cmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5MSUdIVDwvc3Bh
bj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBjb250ZW50ID0gY3Jl
YXRlQ29udGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5z
dXJlU2hhZG93Um9vdChyb290KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRl
eHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAgICBzci5hcHBl
bmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAg
IHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29udGVudC5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKGNvbnRlbnQpOworICAgICAgICAgICAgaW50ZXJuYWxzLnJlbW92ZVNoYWRvd1Jvb3Qo
cm9vdCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRh
aW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkxJR0hUPC9zcGFuPjwvZGl2PiI7CisgICAg
ICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudCwg
Y2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0
UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QyKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIg
cm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxp
Z2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bh
biBjbGFzcz0nYzEnPkxJR0hUIDI8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJl
ZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCcuYzEnKTsKKyAg
ICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICBzci5hcHBl
bmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGls
ZChjb250ZW50KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVS
IikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5h
cHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQs
IGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
Y29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRlbnQpOworICAgICAgICAgICAgaW50
ZXJuYWxzLnJlbW92ZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkxJ
R0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2Fs
bElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUp
OworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdEFwcGVuZENvbnRl
bnQxKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwg
PSAiPHNwYW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAg
ICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICBzci5hcHBl
bmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGls
ZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBm
ID0gKGZ1bmN0aW9uKHJvb3QsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgn
c3BhbicpOworICAgICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qo
cm9vdCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29udGVudCwgc3IubGFzdENoaWxk
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVy
JykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxTUEFOPkxJR0hUPC9zcGFu
PjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7Cisg
ICAgICAgIH07CisgICAgfSkocm9vdCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYs
IDApOworfQorCitmdW5jdGlvbiB0ZXN0QXBwZW5kQ29udGVudDIoY2FsbElmRG9uZSkgeworICAg
IHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBDcmVh
dGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5MSUdIVCAxPC9zcGFu
PjxzcGFuIGNsYXNzPSdjMic+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRv
dyB0cmVlLgorICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOwor
ICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNy
LmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOwor
CisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1
cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGVudDEgPSBjcmVhdGVDb250ZW50
V2l0aFNlbGVjdCgnLmMyJyk7CisgICAgICAgICAgICB2YXIgY29udGVudDIgPSBjcmVhdGVDb250
ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVu
c3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29udGVu
dDEsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29udGVudDIs
IHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhw
ZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bh
bj5MSUdIVCAyPC9zcGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+QUZURVI8L3NwYW4+PC9k
aXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290
LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRl
c3RBcHBlbmRDb250ZW50MyhjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJv
b3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4gY2xhc3M9J2MyJz5MSUdI
VCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIHNyID0g
aW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgdmFyIG1pZCA9IGNyZWF0ZVNw
YW5XaXRoVGV4dCgiTUlEIik7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0
KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQobWlkKTsKKyAgICBzci5hcHBlbmRDaGls
ZChjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnLmMyJykpOworICAgIHNyLmFwcGVuZENoaWxkKGNy
ZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAo
ZnVuY3Rpb24ocm9vdCwgbWlkLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3Qo
J3NwYW4nKTsKKyAgICAgICAgICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290
KHJvb3QpOworICAgICAgICAgICAgc3IuaW5zZXJ0QmVmb3JlKGNvbnRlbnQsIG1pZCk7CisgICAg
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVy
SFRNTCA9CisgICAgICAgICAgICAgICAgIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFuPkxJ
R0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48c3Bhbj5NSUQ8L3NwYW4+PHNwYW4+RkFM
TEJBQ0s8L3NwYW4+PHNwYW4+QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJ
ZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBtaWQsIGNhbGxJZkRvbmUpOworCisg
ICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdENoYW5nZU9yZGVyT2ZDb250
ZW50KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwg
PSAiPHNwYW4gY2xhc3M9J2MxJz5MSUdIVCAxPC9zcGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+IjsK
KworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5z
dXJlU2hhZG93Um9vdChyb290KTsKKyAgICB2YXIgY29udGVudDEgPSBjcmVhdGVDb250ZW50V2l0
aFNlbGVjdCgnLmMxJyk7CisgICAgdmFyIGNvbnRlbnQyID0gY3JlYXRlQ29udGVudFdpdGhTZWxl
Y3QoJ3NwYW4nKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9S
RSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50MSk7CisgICAgc3IuYXBwZW5kQ2hpbGQo
Y29udGVudDIpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIi
KSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFw
cGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudDEs
IGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
dmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBz
ci5yZW1vdmVDaGlsZChjb250ZW50MSk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29u
dGVudDEsIHNyLmxhc3RDaGlsZCk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9CisgICAgICAgICAgICAgICAgIjxkaXY+
PHNwYW4+QkVGT1JFPC9zcGFuPjxTUEFOPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bh
bj48c3Bhbj5GQUxMQkFDSzwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAg
ICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQxLCBj
YWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RN
b3ZlTGlnaHRDaGlsZE91dChjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHZh
ciBuMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIG4xLnNldEF0dHJpYnV0
ZSgnaWQnLCAnbjEnKTsKKyAgICBuMS5pbm5lckhUTUwgPSAiPHNwYW4gaWQ9J2xpZ2h0MSc+TElH
SFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPiI7CisgICAgdmFyIG4yID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgbjIuc2V0QXR0cmlidXRlKCdpZCcsICduMicpOwor
CisgICAgcm9vdC5hcHBlbmRDaGlsZChuMSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChuMik7CisK
KyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUgaW4gJ24xJworICAgIHZhciBzciA9IGludGVybmFs
cy5lbnN1cmVTaGFkb3dSb290KG4xKTsKKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRX
aXRoU2VsZWN0KCdzcGFuJyk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0
KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2
YXIgZiA9IChmdW5jdGlvbihyb290LCBuMiwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdsaWdodDEnKTsKKyAgICAgICAgICAgIGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTsKKyAg
ICAgICAgICAgIG4yLmFwcGVuZENoaWxkKGUpOworCisgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9CisgICAgICAgICAgICAg
ICAgIjxkaXY+PGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48c3Bh
bj5BRlRFUjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPkxJR0hUIDE8L3NwYW4+PC9kaXY+PC9kaXY+
IgorICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIG4y
LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFRlc3QgRHJpdmVycy4KKwordmFyIHRlc3RGdW5jcyA9IFsKKyAgICB0ZXN0UmVt
b3ZlQ29udGVudCwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMSwKKyAgICB0ZXN0UmVt
b3ZlQ29udGVudFRvUmVjYWxjMiwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZUxpZ2h0
Q2hpbGRyZW4sCisgICAgdGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVTaGFkb3dSb290MSwKKyAg
ICB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QyLAorICAgIHRlc3RBcHBlbmRD
b250ZW50MSwKKyAgICB0ZXN0QXBwZW5kQ29udGVudDIsCisgICAgdGVzdEFwcGVuZENvbnRlbnQz
LAorICAgIHRlc3RDaGFuZ2VPcmRlck9mQ29udGVudCwKKyAgICB0ZXN0TW92ZUxpZ2h0Q2hpbGRP
dXQKK107CisKK2Z1bmN0aW9uIGRvVGVzdElmTGVmdCgpIHsKKyAgICB2YXIgdGVzdCA9IHRlc3RG
dW5jcy5zaGlmdCgpOworICAgIGlmICh0ZXN0ID09IG51bGwpCisgICAgICAgIHJldHVybiBkb25l
VGVzdCgpOworCisgICAgdmFyIGNhbGxJZkRvbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNoZWNrKCk7CisgICAgICAgICAgICBj
bGVhblVwKCk7CisgICAgICAgICAgICBkb1Rlc3RJZkxlZnQoKTsKKyAgICAgICAgfSwgMCk7Cisg
ICAgfTsKKworICAgIGxvZyh0ZXN0Lm5hbWUpOworICAgIHRlc3QoY2FsbElmRG9uZSk7Cit9CisK
K2Z1bmN0aW9uIGRvbmVUZXN0KCkgeworICAgIGxvZygiVEVTVCBDT01QTEVURUQiKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCgp
IHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKworICAgIGNsZWFuVXAoKTsKKyAgICBkb1Rlc3RJ
ZkxlZnQoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+
CisKKzxkaXYgaWQ9ImFjdHVhbC1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIiPjwvZGl2Pgor
PGRpdiBpZD0iZXhwZWN0LWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciI+PC9kaXY+Cis8cHJl
IGlkPSJjb25zb2xlIj48L3ByZT4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124862</attachid>
            <date>2012-01-31 17:54:29 -0800</date>
            <delta_ts>2012-02-01 03:58:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76611-20120201105427.patch</filename>
            <type>text/plain</type>
            <size>25969</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ1NTI5ODczZDEwMTk5
MjgyZTQ4YmUwMDk5ZDI1OTllM2RmMjFmOS4uYTI0MjEwODY4ZWY2Mjc1ZWZjNTM2ZWU5NGQzMWNm
NzkyMjcyOGJiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAxLTMxICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ29udGVudCBlbGVt
ZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFj
ZWQgaW4gYSBzaGFkb3cgdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2hlbiBhIGNvbnRlbnQgZWxlbWVudCBpcyBhZGRlZC9yZW1vdmVkL3JlcGxh
Y2VkIGluIGEgc2hhZG93IHRyZWUsIHdlIGhhdmUgdG8gcmVjcmVhdGUKKyAgICAgICAgdGhlIHNo
YWRvdyB0cmVlIHRvIHJlY2FsY3VsYXRlIGluY2x1c2lvbnMgb2YgY29udGVudCBlbGVtZW50cy4g
Q3VycmVudGx5IHdlIGRpZG4ndCByZWNhbGN1bGF0ZSBpdAorICAgICAgICB3aGVuIGNvbnRlbnQg
ZWxlbWVudCBpcyByZW1vdmVkLiAoV2hlbiBhZGRlZCwgaXQgaXMgcmVjYWxjdWxhdGVkLikKKyAg
ICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHVzIHRvIHJlY2FsY3VyYXRlIHRoZSBzaGFkb3cgdHJl
ZSB3aGVuIGNvbnRlbnQgZWxlbWVudCBpcyByZW1vdmVkLgorCisgICAgICAgIFRlc3Q6IGZhc3Qv
ZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS5odG1sCisKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAg
IElmIGEgc2hhZG93IHJvb3QgZXhpc3RzLCBhdHRhY2hlcyBzaGFkb3cgdHJlZSBiZWZvcmUgYXR0
YWNoaW5nIGNoaWxkIGVsZW1lbnRzLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHlsZSk6CisgICAg
ICAgICAgUmVjYWxjdWxhdGVzIGxpZ2h0IGNoaWxkcmVuIGFuZCBzaGFkb3cgdHJlZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hhZG93KToK
KyAgICAgICAgICBEZXRhY2hlcyBzaGFkb3cgdHJlZSBhbmQgaG9zdCBsaWdodCBjaGlsZHJlbiwg
YW5kIGF0dGFjaGVzIHRoZW0gYWdhaW4uCisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAg
ICAgICAgICBBZGRlZCBhIGZsYWcgdG8gcmVjYWxjdWxhdGUgc2hhZG93IHRyZWUuCisgICAgICAg
IChXZWJDb3JlOjpTaGFkb3dSb290OjpzZXROZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpjbGVhck5lZWRzU2hhZG93VHJlZVN0eWxlUmVj
YWxjKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6Om5lZWRzU2hhZG93VHJlZVN0eWxl
UmVjYWxjKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnRlbnRFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAg
IERvZXMgbm90IG5lZWQgdG8gZGV0YWNoIGluY2x1ZGVkIGVsZW1lbnRzLCBiZWNhdXNlIHRoZXkg
YXJlIG5vdCBhdHRhY2hlZCBpbiBDb250YWluZXJOb2RlIGFueW1vcmUuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29udGVudEVsZW1lbnQ6OmRldGFjaCk6CisgICAgICAgICAgV2hlbiBhIGNvbnRl
bnQgZWxlbWVudCBkZXRhY2hlZCwgcmVhdHRhY2hlcyBhIHNoYWRvdyB0cmVlLgorCiAyMDEyLTAx
LTMxICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVGls
ZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QgY2xlYW51cApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IGUxYTYzNzZiZGRmMDljNmY5MDFlMzkwMGRkOThkMTEzYzRlY2VkMjIuLjQzNjczYTY2
NzUxMTFlMjE4N2VkM2I0NjdlMTBkMDViMTlkNjVmNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
QEAgLTk0MCwxNiArOTQwLDI1IEBAIHZvaWQgRWxlbWVudDo6YXR0YWNoKCkKICAgICBSZW5kZXJX
aWRnZXQ6OnN1c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRhdGVzKCk7CiAKICAgICBjcmVhdGVSZW5k
ZXJlcklmTmVlZGVkKCk7Ci0gICAgCiAgICAgU3R5bGVTZWxlY3RvclBhcmVudFB1c2hlciBwYXJl
bnRQdXNoZXIodGhpcyk7CiAKLSAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICBwYXJlbnRQ
dXNoZXIucHVzaCgpOwotICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwotCisgICAgLy8gV2hl
biBhIHNoYWRvdyByb290IGV4aXN0cywgaXQgZG9lcyB0aGUgd29yayBvZiBhdHRhY2hpbmcgdGhl
IGNoaWxkcmVuLgogICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBzaGFkb3dSb290KCkpIHsK
KyAgICAgICAgTm9kZTo6YXR0YWNoKCk7CiAgICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7CiAg
ICAgICAgIHNoYWRvdy0+YXR0YWNoKCk7CisKKyAgICAgICAgLy8gSW4gYSBzaGFkb3cgdHJlZSwg
c29tZSBvZiBsaWdodCBjaGlsZHJlbiBtYXkgYmUgYXR0YWNoZWQgYnkgJ2NvbnRlbnQnIGVsZW1l
bnQuCisgICAgICAgIC8vIEhvd2V2ZXIsIHdoZW4gdGhlcmUgaXMgbm8gY29udGVudCBlbGVtZW50
IG9yIGNvbnRlbnQgZWxlbWVudCBkb2VzIG5vdCBzZWxlY3QKKyAgICAgICAgLy8gYWxsIGxpZ2h0
IGNoaWxkcmVuLCB3ZSBoYXZlIHRvIGF0dGFjaCB0aGUgcmVzdCBvZiBsaWdodCBjaGlsZHJlbiBo
ZXJlLgorICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXR0
YWNoZWQoKSkKKyAgICAgICAgICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoZmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgcGFyZW50
UHVzaGVyLnB1c2goKTsKKyAgICAgICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7CiAgICAgfQog
CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApp
bmRleCA0MDIyZTlhZWExNzY4NDgxODIyNzJiMDc4NDJjMzljOTU0MTJmNzhiLi4zMTZiYzI4Mzky
ODhmZGVhYWQyZTliZWMwN2M4N2Y0NDM0YzdjN2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3Qu
Y3BwCkBAIC05OSw4ICs5OSw4IEBAIGJvb2wgU2hhZG93Um9vdDo6Y2hpbGRUeXBlQWxsb3dlZChO
b2RlVHlwZSB0eXBlKSBjb25zdAogCiB2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVT
dHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgaWYgKGhhc0NvbnRlbnRFbGVtZW50KCkp
Ci0gICAgICAgIHJlYXR0YWNoKCk7CisgICAgaWYgKG5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxj
KCkgfHwgaGFzQ29udGVudEVsZW1lbnQoKSkKKyAgICAgICAgcmVhdHRhY2hIb3N0Q2hpbGRyZW5B
bmRTaGFkb3coKTsKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGls
ZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSkKQEAgLTExMCw2ICsxMTAsNyBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1No
YWRvd1RyZWVTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICBjbGVhck5lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CiAgICAgY2xlYXJOZWVkc1N0eWxl
UmVjYWxjKCk7CiAgICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KQEAgLTE2OCw2
ICsxNjksMjQgQEAgdm9pZCBTaGFkb3dSb290OjphdHRhY2goKQogICAgICAgICBtX2luY2x1c2lv
bnMtPmRpZFNlbGVjdCgpOwogfQogCit2b2lkIFNoYWRvd1Jvb3Q6OnJlYXR0YWNoSG9zdENoaWxk
cmVuQW5kU2hhZG93KCkKK3sKKyAgICBpZiAoIWhvc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IGhvc3QoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmF0dGFjaGVkKCkp
CisgICAgICAgICAgICBjaGlsZC0+ZGV0YWNoKCk7CisgICAgfQorCisgICAgcmVhdHRhY2goKTsK
KworICAgIGZvciAoTm9kZSogY2hpbGQgPSBob3N0KCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+YXR0YWNo
ZWQoKSkKKyAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAgICB9Cit9CisKIENvbnRlbnRJ
bmNsdXNpb25TZWxlY3RvciogU2hhZG93Um9vdDo6aW5jbHVzaW9ucygpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1faW5jbHVzaW9ucy5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDgz
NmU0YWFhY2Q0ZjZjZTE1ZjdjYWVjYmI4YmZiNzY2NDdiZmNkN2EuLmY3MTFlNTZiMWRjMTRhMDQ2
OGZjN2EyMTZjZjdlNjA2YTFjNzJkY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtNDMs
MTEgKzQzLDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVjYWxjU2hhZG93VHJlZVN0eWxlKFN0
eWxlQ2hhbmdlKTsKIAorICAgIHZvaWQgc2V0TmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKTsK
KyAgICB2b2lkIGNsZWFyTmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKTsKKyAgICBib29sIG5l
ZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjKCk7CisKICAgICBIVE1MQ29udGVudEVsZW1lbnQqIGlu
Y2x1ZGVyRm9yKE5vZGUqKSBjb25zdDsKICAgICB2b2lkIGhvc3RDaGlsZHJlbkNoYW5nZWQoKTsK
ICAgICBib29sIGlzSW5jbHVzaW9uU2VsZWN0b3JBY3RpdmUoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKKyAgICB2b2lkIHJlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hhZG93
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlBdXRob3JTaGVldHMoKSBjb25zdDsKICAgICB2
b2lkIHNldEFwcGx5QXV0aG9yU2hlZXRzKGJvb2wpOwpAQCAtNjgsNyArNzMsOCBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBoYXNDb250ZW50RWxlbWVudCgpIGNvbnN0OwogCi0gICAgYm9vbCBtX2Fw
cGx5QXV0aG9yU2hlZXRzOworICAgIGJvb2wgbV9hcHBseUF1dGhvclNoZWV0cyA6IDE7CisgICAg
Ym9vbCBtX25lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjIDogMTsKICAgICBPd25QdHI8Q29udGVu
dEluY2x1c2lvblNlbGVjdG9yPiBtX2luY2x1c2lvbnM7CiB9OwogCkBAIC03Nyw2ICs4MywyMSBA
QCBpbmxpbmUgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBTaGFkb3dSb290OjpjcmVhdGUoRG9jdW1l
bnQqIGRvY3VtZW50KQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhZG93Um9vdChkb2N1bWVu
dCkpOwogfQogCitpbmxpbmUgdm9pZCBTaGFkb3dSb290OjpzZXROZWVkc1NoYWRvd1RyZWVTdHls
ZVJlY2FsYygpCit7CisgICAgbV9uZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYyA9IHRydWU7Cit9
CisKK2lubGluZSB2b2lkIFNoYWRvd1Jvb3Q6OmNsZWFyTmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNh
bGMoKQoreworICAgIG1fbmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMgPSBmYWxzZTsKK30KKwor
aW5saW5lIGJvb2wgU2hhZG93Um9vdDo6bmVlZHNTaGFkb3dUcmVlU3R5bGVSZWNhbGMoKQorewor
ICAgIHJldHVybiBtX25lZWRzU2hhZG93VHJlZVN0eWxlUmVjYWxjOworfQorCiBpbmxpbmUgU2hh
ZG93Um9vdCogdG9TaGFkb3dSb290KE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFub2RlIHx8
IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6U0hBRE9XX1JPT1RfTk9ERSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcAppbmRleCA4YzZl
ZGI2ZThiNzEzZmRjMTQ1MDkwMTcxYzk5ZGM0YzM2MTIyZWYxLi5hZWY1NzYwMWM1ZDhkMDAwMWFk
NGU4OGVhZmUyNTM4ZWZjNmRhNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAKQEAgLTgzLDggKzgzLDYgQEAgdm9pZCBIVE1MQ29u
dGVudEVsZW1lbnQ6OmF0dGFjaCgpCiAKICAgICBpZiAocm9vdCkgewogICAgICAgICBmb3IgKFNo
YWRvd0luY2x1c2lvbiogaW5jbHVzaW9uID0gbV9pbmNsdXNpb25zLT5maXJzdCgpOyBpbmNsdXNp
b247IGluY2x1c2lvbiA9IGluY2x1c2lvbi0+bmV4dCgpKQotICAgICAgICAgICAgaW5jbHVzaW9u
LT5jb250ZW50KCktPmRldGFjaCgpOwotICAgICAgICBmb3IgKFNoYWRvd0luY2x1c2lvbiogaW5j
bHVzaW9uID0gbV9pbmNsdXNpb25zLT5maXJzdCgpOyBpbmNsdXNpb247IGluY2x1c2lvbiA9IGlu
Y2x1c2lvbi0+bmV4dCgpKQogICAgICAgICAgICAgaW5jbHVzaW9uLT5jb250ZW50KCktPmF0dGFj
aCgpOwogICAgIH0KIH0KQEAgLTk0LDYgKzkyLDEyIEBAIHZvaWQgSFRNTENvbnRlbnRFbGVtZW50
OjpkZXRhY2goKQogICAgIGlmIChTaGFkb3dSb290KiByb290ID0gdG9TaGFkb3dSb290KHNoYWRv
d1RyZWVSb290Tm9kZSgpKSkgewogICAgICAgICBpZiAoQ29udGVudEluY2x1c2lvblNlbGVjdG9y
KiBzZWxlY3RvciA9IHJvb3QtPmluY2x1c2lvbnMoKSkKICAgICAgICAgICAgIHNlbGVjdG9yLT51
bnNlbGVjdChtX2luY2x1c2lvbnMuZ2V0KCkpOworCisgICAgICAgIC8vIFdoZW4gY29udGVudCBl
bGVtZW50IGlzIGRldGFjaGVkLCBzaGFkb3cgdHJlZSBzaG91bGQgYmUgcmVjcmVhdGVkIHRvIHJl
LWNhbGN1bGF0ZSBpbmNsdXNpb25zIGZvcgorICAgICAgICAvLyBvdGhlciBjb250ZW50IGVsZW1l
bnRzLgorICAgICAgICByb290LT5zZXROZWVkc1NoYWRvd1RyZWVTdHlsZVJlY2FsYygpOworICAg
ICAgICBpZiAocm9vdC0+c2hhZG93SG9zdCgpKQorICAgICAgICAgICAgcm9vdC0+c2hhZG93SG9z
dCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1faW5jbHVz
aW9ucy0+aXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzMzJkYmQ5NzM4NmY3NzBkOGE0OWRhMzFiODliMGFh
M2E1MGZiZjAwLi4xZDE0NjJlN2EwOGVlYjAzNjMxYjRjMzkzM2Y2Mzk1ZjhjOWFhYzJjIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMzEgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtA
Z29vZ2xlLmNvbT4KKworICAgICAgICBDb250ZW50IGVsZW1lbnQgc2hvdWxkIGJlIGFibGUgdG8g
YmUgZHluYW1pY2FsbHkgYWRkZWQvcmVtb3ZlZC9yZXBsYWNlZCBpbiBhIHNoYWRvdyB0cmVlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IGNhc2Vz
IGZvciBhcHBlbmRpbmcvcmVtb3ZpbmcvcmVwbGFjaW5nIGNvbnRlbnQgZWxlbWVudCBpbiBhIHNo
YWRvdyB0cmVlLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1t
b3ZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2NvbnRl
bnQtZWxlbWVudC1tb3ZlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTMxICBPbGl2ZXIgSHVudCAg
PG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IEVycm9yLnN0YWNrCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVu
dC1tb3ZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWZlZTFkMTBiZWM3MmYzYzJjZGVlN2Uz
ZWQ4YmM3NmRhNDc2YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBA
Cit0ZXN0UmVtb3ZlQ29udGVudAorUEFTUwordGVzdFJlbW92ZUNvbnRlbnRUb1JlY2FsYzEKK1BB
U1MKK3Rlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMyCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudEFu
ZFJlbW92ZUxpZ2h0Q2hpbGRyZW4KK1BBU1MKK3Rlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hh
ZG93Um9vdDEKK1BBU1MKK3Rlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDIKK1BB
U1MKK3Rlc3RBcHBlbmRDb250ZW50MQorUEFTUwordGVzdEFwcGVuZENvbnRlbnQyCitQQVNTCit0
ZXN0QXBwZW5kQ29udGVudDMKK1BBU1MKK3Rlc3RDaGFuZ2VPcmRlck9mQ29udGVudAorUEFTUwor
dGVzdE1vdmVMaWdodENoaWxkT3V0CitQQVNTCitURVNUIENPTVBMRVRFRAorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA2MTdiMzUzMjhlNjAyNTMzZDYxMTg0YWUyNTUzOTExMDg4NDlkYzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50
LW1vdmUuaHRtbApAQCAtMCwwICsxLDUwNCBAQAorIDwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKy8qIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGVuc3VyZXMgdW5kZXJseWlu
ZyBSZW5kZXJMYXllciAqLworLmNvbnRhaW5lciB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOwor
fQorCisuc3BhbiB7CisgICAgZGlzcGxheTogYm94ZWQtaW5saW5lOworICAgIG1hcmdpbjogMnB4
OworICAgIGJvcmRlcjogc29saWQ7Cit9Cis8L3N0eWxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxv
ZyhtZXNzYWdlKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5l
ckhUTUwgKz0gKG1lc3NhZ2UgKyAiXG4iKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlQWxsQ2hpbGRy
ZW4oZWxlbSkgeworICAgIHdoaWxlIChlbGVtLmZpcnN0Q2hpbGQpCisgICAgICAgIGVsZW0ucmVt
b3ZlQ2hpbGQoZWxlbS5maXJzdENoaWxkKTsKK30KKworZnVuY3Rpb24gY2xlYW5VcCgpIHsKKyAg
ICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRh
aW5lcicpKTsKKyAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
ZXhwZWN0LWNvbnRhaW5lcicpKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVyTGluZXMo
dGV4dCkgeworICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7CisgICAgbGluZXMuc3Bs
aWNlKDAsIDIpOworICAgIHJldHVybiBsaW5lcy5qb2luKCdcbicpOworfQorCitmdW5jdGlvbiBj
aGVjaygpIHsKKyAgICB2YXIgcmVmQ29udGFpbmVyUmVuZGVyVHJlZSA9IGludGVybmFscy5lbGVt
ZW50UmVuZGVyVHJlZUFzVGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRh
aW5lcicpKTsKKyAgICB2YXIgcmVmUmVuZGVyVHJlZSA9IHJlbW92ZUNvbnRhaW5lckxpbmVzKHJl
ZkNvbnRhaW5lclJlbmRlclRyZWUpOworCisgICAgdmFyIHRhcmdldENvbnRhaW5lclJlbmRlclRy
ZWUgPSBpbnRlcm5hbHMuZWxlbWVudFJlbmRlclRyZWVBc1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKSk7CisgICAgdmFyIHRhcmdldFJlbmRlclRyZWUgPSBy
ZW1vdmVDb250YWluZXJMaW5lcyh0YXJnZXRDb250YWluZXJSZW5kZXJUcmVlKTsKKworICAgIGlm
ICh0YXJnZXRSZW5kZXJUcmVlID09IHJlZlJlbmRlclRyZWUpCisgICAgICAgIGxvZygiUEFTUyIp
OworICAgIGVsc2UgeworICAgICAgICBsb2coIkZBSUwiKTsKKyAgICAgICAgbG9nKCJFeHBlY3Rl
ZDogIik7CisgICAgICAgIGxvZyhyZWZSZW5kZXJUcmVlKTsKKyAgICAgICAgbG9nKCJBY3R1YWw6
ICIpOworICAgICAgICBsb2codGFyZ2V0UmVuZGVyVHJlZSk7CisgICAgfQorfQorCitmdW5jdGlv
biBjcmVhdGVTcGFuV2l0aFRleHQodGV4dCkgeworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3BhbicpOworICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodGV4dCkpOworICAgIHJldHVybiBzcGFuOworfQorCitmdW5jdGlvbiBjcmVhdGVD
b250ZW50V2l0aFNlbGVjdChzZWxlY3QsIGZhbGxiYWNrKSB7CisgICAgdmFyIGNvbnRlbnQgPSBp
bnRlcm5hbHMuY3JlYXRlQ29udGVudEVsZW1lbnQoZG9jdW1lbnQpOworICAgIGNvbnRlbnQuc2V0
QXR0cmlidXRlKCdzZWxlY3QnLCBzZWxlY3QpOworICAgIGlmICghZmFsbGJhY2spCisgICAgICAg
IGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJGQUxMQkFDSyIpKTsKKwor
ICAgIHJldHVybiBjb250ZW50OworfQorCitmdW5jdGlvbiBhcHBlbmRTaGFkb3codGFyZ2V0LCBz
ZWxlY3QpIHsKKyAgICB2YXIgcm9vdCA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHRhcmdl
dCk7CisKKyAgICB2YXIgY29udGVudCA9IGludGVybmFscy5jcmVhdGVDb250ZW50RWxlbWVudChk
b2N1bWVudCk7CisgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7Cisg
ICAgY29udGVudC5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkZBTExCQUNLIikpOwor
CisgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie1NIQURPVzog
IikpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgcm9vdC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKK30KKworZnVuY3Rpb24gYXBwZW5kU2hh
ZG93RGVlcCh0YXJnZXQsIHNlbGVjdCkgeworICAgIHZhciByb290ID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3QodGFyZ2V0KTsKKworICAgIHZhciBjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKKyAgICB7CisgICAgICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNy
ZWF0ZUNvbnRlbnRFbGVtZW50KGRvY3VtZW50KTsKKyAgICAgICAgY29udGVudC5zZXRBdHRyaWJ1
dGUoJ3NlbGVjdCcsIHNlbGVjdCk7CisgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRl
U3BhbldpdGhUZXh0KCJGQUxMQkFDSyIpKTsKKworICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie0lOTkVSOiAiKSk7CisgICAgICAgIGNoaWxkLmFwcGVu
ZENoaWxkKGNvbnRlbnQpOworICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgifSIpKTsKKyAgICB9CisKKyAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9XOiAiKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChjaGls
ZCk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsK
K30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGVzdCBGdW5jdGlvbnMuCisKK2Z1bmN0aW9uIHRl
c3RSZW1vdmVDb250ZW50KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9v
dC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFk
b3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFu
Jyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAg
c3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBw
ZW5kQ2hpbGQoY29udGVudCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0
KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFp
bmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBj
b250ZW50LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGNvbnRlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250ZW50KTsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1M
ID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7Cisg
ICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVu
dCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0
ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMShjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVl
LgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuIGNsYXNzPSdjMSc+TElHSFQgMTwvc3Bhbj48
c3Bhbj5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAg
dmFyIGNvbnRlbnQxID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJy5jMScpOworICAgIHZhciBj
b250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0g
aW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3Jl
YXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudDEp
OworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiTUlEIikpOworICAgIHNy
LmFwcGVuZENoaWxkKGNvbnRlbnQyKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0
aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1j
b250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJv
b3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGNvbnRlbnQxLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudDEpOwor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5p
bm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+TUlEPC9zcGFuPjxzcGFu
PkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rp
dj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3Qs
IGNvbnRlbnQxLCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMyKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIg
cm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxp
Z2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bh
biBjbGFzcz0nYzEnPkxJR0hUIDI8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJl
ZS4KKyAgICB2YXIgY29udGVudDEgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnLmMxJyk7Cisg
ICAgdmFyIGNvbnRlbnQyID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICB2
YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICBzci5hcHBlbmRD
aGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChj
b250ZW50MSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJNSUQiKSk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudDIpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0
ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
YWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVu
Y3Rpb24ocm9vdCwgY29udGVudDEsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgY29udGVudDEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250
ZW50MSk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRh
aW5lcicpLmlubmVySFRNTCA9ICI8ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5NSUQ8L3Nw
YW4+PHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkFGVEVSPC9z
cGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAg
fSkocm9vdCwgY29udGVudDEsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsK
K30KKworZnVuY3Rpb24gdGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVMaWdodENoaWxkcmVuKGNh
bGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNw
YW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIg
Y29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0g
aW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3Jl
YXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQo
cm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50LCBjYWxsSWZEb25l
KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChjb250ZW50KTsKKyAgICAgICAgICAgIHJlbW92ZUFsbENoaWxk
cmVuKHJvb3QpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1j
b250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+QUZU
RVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsK
KyAgICB9KShyb290LCBjb250ZW50LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwg
MCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVTaGFkb3dSb290KGNhbGxJZkRvbmUpIHsKKyAg
ICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3Jl
YXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+
IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0
ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0
KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2
YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGludGVybmFscy5yZW1vdmVTaGFkb3dSb290
KHJvb3QpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250
YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5MSUdIVDwvc3Bhbj48L2Rpdj4iOworICAg
ICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQs
IGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVz
dFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVTaGFkb3dSb290MShjYWxsSWZEb25lKSB7CisgICAgdmFy
IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBs
aWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisK
KyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250
ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFk
b3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVG
T1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYg
PSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
Y29udGVudCk7CisgICAgICAgICAgICBpbnRlcm5hbHMucmVtb3ZlU2hhZG93Um9vdChyb290KTsK
KyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJyku
aW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQ8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAg
IGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBjb250ZW50LCBjYWxsSWZE
b25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVD
b250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDIoY2FsbElmRG9uZSkgeworICAgIHZhciByb290ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJl
ZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5MSUdIVCAxPC9zcGFuPjxzcGFuIGNsYXNz
PSdjMSc+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAg
IHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJy5jMScpOworICAgIHZhciBz
ciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRl
bnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENo
aWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElm
RG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudCk7CisgICAgICAgICAgICBpbnRlcm5hbHMu
cmVtb3ZlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQgMTwv
c3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25l
KCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSk7CisKKyAg
ICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0QXBwZW5kQ29udGVudDEoY2Fs
bElmRG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bh
bj5MSUdIVDwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBz
ciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxk
KGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0
ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
YWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVu
Y3Rpb24ocm9vdCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7
CisgICAgICAgICAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsK
KyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50LCBzci5sYXN0Q2hpbGQpOworICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5l
ckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PFNQQU4+TElHSFQ8L3NwYW4+PHNwYW4+
QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAg
fTsKKyAgICB9KShyb290LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RBcHBlbmRDb250ZW50MihjYWxsSWZEb25lKSB7CisgICAgdmFyIHJv
b3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdo
dCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4g
Y2xhc3M9J2MyJz5MSUdIVCAyPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUu
CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3Iu
YXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2
YXIgZiA9IChmdW5jdGlvbihyb290LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2Vs
ZWN0KCcuYzInKTsKKyAgICAgICAgICAgIHZhciBjb250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRo
U2VsZWN0KCdzcGFuJyk7CisgICAgICAgICAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hh
ZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50MSwgc3Iu
bGFzdENoaWxkKTsKKyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50Miwgc3IubGFz
dENoaWxkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29u
dGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFuPkxJR0hU
IDI8L3NwYW4+PHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOwor
ICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNhbGxJ
ZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdEFwcGVu
ZENvbnRlbnQzKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5l
ckhUTUwgPSAiPHNwYW4+TElHSFQgMTwvc3Bhbj48c3BhbiBjbGFzcz0nYzInPkxJR0hUIDI8L3Nw
YW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgc3IgPSBpbnRlcm5h
bHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICB2YXIgbWlkID0gY3JlYXRlU3BhbldpdGhU
ZXh0KCJNSUQiKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9S
RSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChtaWQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0
ZUNvbnRlbnRXaXRoU2VsZWN0KCcuYzInKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3Bh
bldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1
YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlv
bihyb290LCBtaWQsIGNhbGxJZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bhbicp
OworICAgICAgICAgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7
CisgICAgICAgICAgICBzci5pbnNlcnRCZWZvcmUoY29udGVudCwgbWlkKTsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0K
KyAgICAgICAgICAgICAgICAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+TElHSFQgMTwv
c3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPk1JRDwvc3Bhbj48c3Bhbj5GQUxMQkFDSzwv
c3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgp
OworICAgICAgICB9OworICAgIH0pKHJvb3QsIG1pZCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRU
aW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0Q2hhbmdlT3JkZXJPZkNvbnRlbnQoY2Fs
bElmRG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bh
biBjbGFzcz0nYzEnPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQgMjwvc3Bhbj4iOworCisgICAg
Ly8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFk
b3dSb290KHJvb3QpOworICAgIHZhciBjb250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0
KCcuYzEnKTsKKyAgICB2YXIgY29udGVudDIgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3Bh
bicpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOwor
ICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQxKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50
Mik7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKwor
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hp
bGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50MSwgY2FsbElm
RG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgc3Ig
PSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIHNyLnJlbW92
ZUNoaWxkKGNvbnRlbnQxKTsKKyAgICAgICAgICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50MSwg
c3IubGFzdENoaWxkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBl
Y3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0KKyAgICAgICAgICAgICAgICAiPGRpdj48c3Bhbj5C
RUZPUkU8L3NwYW4+PFNQQU4+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFu
PkZBTExCQUNLPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBj
YWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudDEsIGNhbGxJZkRv
bmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdE1vdmVMaWdo
dENoaWxkT3V0KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgdmFyIG4xID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgbjEuc2V0QXR0cmlidXRlKCdpZCcs
ICduMScpOworICAgIG4xLmlubmVySFRNTCA9ICI8c3BhbiBpZD0nbGlnaHQxJz5MSUdIVCAxPC9z
cGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+IjsKKyAgICB2YXIgbjIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICBuMi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ24yJyk7CisKKyAgICBy
b290LmFwcGVuZENoaWxkKG4xKTsKKyAgICByb290LmFwcGVuZENoaWxkKG4yKTsKKworICAgIC8v
IENyZWF0ZSBzaGFkb3cgdHJlZSBpbiAnbjEnCisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3Vy
ZVNoYWRvd1Jvb3QobjEpOworICAgIHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxl
Y3QoJ3NwYW4nKTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9S
RSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50KTsKKyAgICBzci5hcHBlbmRDaGlsZChj
cmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0g
KGZ1bmN0aW9uKHJvb3QsIG4yLCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpZ2h0
MScpOworICAgICAgICAgICAgZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOworICAgICAgICAg
ICAgbjIuYXBwZW5kQ2hpbGQoZSk7CisKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0KKyAgICAgICAgICAgICAgICAiPGRp
dj48ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkFGVEVS
PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+TElHSFQgMTwvc3Bhbj48L2Rpdj48L2Rpdj4iCisgICAg
ICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgbjIsIGNhbGxJ
ZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gVGVzdCBEcml2ZXJzLgorCit2YXIgdGVzdEZ1bmNzID0gWworICAgIHRlc3RSZW1vdmVDb250
ZW50LAorICAgIHRlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMxLAorICAgIHRlc3RSZW1vdmVDb250
ZW50VG9SZWNhbGMyLAorICAgIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlTGlnaHRDaGlsZHJl
biwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QxLAorICAgIHRlc3RS
ZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDIsCisgICAgdGVzdEFwcGVuZENvbnRlbnQx
LAorICAgIHRlc3RBcHBlbmRDb250ZW50MiwKKyAgICB0ZXN0QXBwZW5kQ29udGVudDMsCisgICAg
dGVzdENoYW5nZU9yZGVyT2ZDb250ZW50LAorICAgIHRlc3RNb3ZlTGlnaHRDaGlsZE91dAorXTsK
KworZnVuY3Rpb24gZG9UZXN0SWZMZWZ0KCkgeworICAgIHZhciB0ZXN0ID0gdGVzdEZ1bmNzLnNo
aWZ0KCk7CisgICAgaWYgKHRlc3QgPT0gbnVsbCkKKyAgICAgICAgcmV0dXJuIGRvbmVUZXN0KCk7
CisKKyAgICB2YXIgY2FsbElmRG9uZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY2hlY2soKTsKKyAgICAgICAgICAgIGNsZWFuVXAo
KTsKKyAgICAgICAgICAgIGRvVGVzdElmTGVmdCgpOworICAgICAgICB9LCAwKTsKKyAgICB9Owor
CisgICAgbG9nKHRlc3QubmFtZSk7CisgICAgdGVzdChjYWxsSWZEb25lKTsKK30KKworZnVuY3Rp
b24gZG9uZVRlc3QoKSB7CisgICAgbG9nKCJURVNUIENPTVBMRVRFRCIpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gZG9UZXN0KCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgfQorCisgICAgY2xlYW5VcCgpOworICAgIGRvVGVzdElmTGVmdCgp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKworPGRp
diBpZD0iYWN0dWFsLWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciI+PC9kaXY+Cis8ZGl2IGlk
PSJleHBlY3QtY29udGFpbmVyIiBjbGFzcz0iY29udGFpbmVyIj48L2Rpdj4KKzxwcmUgaWQ9ImNv
bnNvbGUiPjwvcHJlPgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124924</attachid>
            <date>2012-02-01 03:58:32 -0800</date>
            <delta_ts>2012-02-01 05:50:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76611-20120201205831.patch</filename>
            <type>text/plain</type>
            <size>26512</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWI5ZjZmMDNhZmU5Nzgw
M2MxZjBjNDkzMzE2MmMwN2EwNmFmNzIzZC4uNzllMzYwNjRhZDQyZDYxNmU5NzA3OTlhODFlZTY2
NmQ3NjZmYzgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAyLTAxICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQ29udGVudCBlbGVt
ZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQvcmVwbGFj
ZWQgaW4gYSBzaGFkb3cgdHJlZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkK
KworICAgICAgICBXaGVuIGEgY29udGVudCBlbGVtZW50IGlzIGFkZGVkL3JlbW92ZWQvcmVwbGFj
ZWQgaW4gYSBzaGFkb3cgdHJlZSwgd2UgaGF2ZSB0byByZWNyZWF0ZQorICAgICAgICB0aGUgc2hh
ZG93IHRyZWUgdG8gcmVjYWxjdWxhdGUgaW5jbHVzaW9ucyBvZiBjb250ZW50IGVsZW1lbnRzLiBD
dXJyZW50bHkgd2UgZGlkbid0IHJlY2FsY3VsYXRlIGl0CisgICAgICAgIHdoZW4gY29udGVudCBl
bGVtZW50IGlzIHJlbW92ZWQuIChXaGVuIGFkZGVkLCBpdCBpcyByZWNhbGN1bGF0ZWQuKQorICAg
ICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgdXMgdG8gcmVjYWxjdXJhdGUgdGhlIHNoYWRvdyB0cmVl
IHdoZW4gY29udGVudCBlbGVtZW50IGlzIHJlbW92ZWQuCisKKyAgICAgICAgVGVzdDogZmFzdC9k
b20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwKKworICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgICAg
SWYgYSBzaGFkb3cgcm9vdCBleGlzdHMsIGF0dGFjaGVzIHNoYWRvdyB0cmVlIGJlZm9yZSBhdHRh
Y2hpbmcgY2hpbGQgZWxlbWVudHMuCisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAg
ICAgICAgIEFkZGVkIGEgZmxhZyB0byByZWNhbGN1bGF0ZSBzaGFkb3cgdHJlZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Um9vdDo6cmVjYWxjU2hhZG93VHJlZVN0eWxlKToKKyAgICAgICAgICBSZWNhbGN1bGF0ZXMg
bGlnaHQgY2hpbGRyZW4gYW5kIHNoYWRvdyB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Um9vdDo6c2V0TmVlZHNSZWF0dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFkb3dSb290OjpyZWF0dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRvdyk6CisgICAg
ICAgICAgRGV0YWNoZXMgc2hhZG93IHRyZWUgYW5kIGhvc3QgbGlnaHQgY2hpbGRyZW4sIGFuZCBh
dHRhY2hlcyB0aGVtIGFnYWluLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTaGFkb3dSb290OjpjbGVhck5lZWRzUmVhdHRhY2hIb3N0Q2hpbGRyZW5BbmRT
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6bmVlZHNSZWF0dGFjaEhvc3RD
aGlsZHJlbkFuZFNoYWRvdyk6CisgICAgICAgICogaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb250ZW50RWxlbWVudDo6YXR0YWNoKToK
KyAgICAgICAgICBEb2VzIG5vdCBuZWVkIHRvIGRldGFjaCBpbmNsdWRlZCBlbGVtZW50cywgYmVj
YXVzZSB0aGV5IGFyZSBub3QgYXR0YWNoZWQgaW4gQ29udGFpbmVyTm9kZSBhbnltb3JlLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbnRlbnRFbGVtZW50OjpkZXRhY2gpOgorICAgICAgICAgIFdo
ZW4gYSBjb250ZW50IGVsZW1lbnQgZGV0YWNoZWQsIHJlYXR0YWNoZXMgYSBzaGFkb3cgdHJlZS4K
KwogMjAxMi0wMi0wMSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBGaXggdGhlIHNlbWFudGljcyBvZiBwYXNzaW5nIGNvbnRlbnRzVmlzaWJsZSBmbGFn
IHRvIEdyYXBoaWNzTGF5ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZTFhNjM3NmJkZGYw
OWM2ZjkwMWUzOTAwZGQ5OGQxMTNjNGVjZWQyMi4uOTFkODY2M2FjMDU4Y2E5MDI0NGUzYmFkOWQ1
NDUwZDAxZTZiNTMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtOTQwLDE2ICs5NDAsMjUg
QEAgdm9pZCBFbGVtZW50OjphdHRhY2goKQogICAgIFJlbmRlcldpZGdldDo6c3VzcGVuZFdpZGdl
dEhpZXJhcmNoeVVwZGF0ZXMoKTsKIAogICAgIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKLSAg
ICAKICAgICBTdHlsZVNlbGVjdG9yUGFyZW50UHVzaGVyIHBhcmVudFB1c2hlcih0aGlzKTsKIAot
ICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7Ci0gICAg
Q29udGFpbmVyTm9kZTo6YXR0YWNoKCk7Ci0KKyAgICAvLyBXaGVuIGEgc2hhZG93IHJvb3QgZXhp
c3RzLCBpdCBkb2VzIHRoZSB3b3JrIG9mIGF0dGFjaGluZyB0aGUgY2hpbGRyZW4uCiAgICAgaWYg
KFNoYWRvd1Jvb3QqIHNoYWRvdyA9IHNoYWRvd1Jvb3QoKSkgewogICAgICAgICBwYXJlbnRQdXNo
ZXIucHVzaCgpOworICAgICAgICBOb2RlOjphdHRhY2goKTsKICAgICAgICAgc2hhZG93LT5hdHRh
Y2goKTsKKworICAgICAgICAvLyBJbiBhIHNoYWRvdyB0cmVlLCBzb21lIG9mIGxpZ2h0IGNoaWxk
cmVuIG1heSBiZSBhdHRhY2hlZCBieSAnY29udGVudCcgZWxlbWVudC4KKyAgICAgICAgLy8gSG93
ZXZlciwgd2hlbiB0aGVyZSBpcyBubyBjb250ZW50IGVsZW1lbnQgb3IgY29udGVudCBlbGVtZW50
IGRvZXMgbm90IHNlbGVjdAorICAgICAgICAvLyBhbGwgbGlnaHQgY2hpbGRyZW4sIHdlIGhhdmUg
dG8gYXR0YWNoIHRoZSByZXN0IG9mIGxpZ2h0IGNoaWxkcmVuIGhlcmUuCisgICAgICAgIGZvciAo
Tm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7CisgICAgICAgICAgICBpZiAoIWNoaWxkLT5hdHRhY2hlZCgpKQorICAgICAgICAg
ICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChmaXJzdENoaWxkKCkpCisgICAgICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOworICAg
ICAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKICAgICB9CiAKICAgICBpZiAoaGFzUmFyZURh
dGEoKSkgeyAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCmluZGV4IDQwMjJlOWFlYTE3Njg0
ODE4MjI3MmIwNzg0MmMzOWM5NTQxMmY3OGIuLjIzMjM1YTM5OTM2Nzg1ZGIzNjRjMjNhY2M0N2Rj
N2ZkNGNkZDMyODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogU2hhZG93Um9vdDo6U2hhZG93Um9vdChEb2N1bWVudCog
ZG9jdW1lbnQpCiAgICAgOiBUcmVlU2NvcGUoZG9jdW1lbnQsIENyZWF0ZVNoYWRvd1Jvb3QpCiAg
ICAgLCBtX2FwcGx5QXV0aG9yU2hlZXRzKGZhbHNlKQorICAgICwgbV9uZWVkc1JlY2FsY3VsYXRl
Q29udGVudChmYWxzZSkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIApAQCAtOTksOCAr
MTAwLDggQEAgYm9vbCBTaGFkb3dSb290OjpjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlIHR5cGUp
IGNvbnN0CiAKIHZvaWQgU2hhZG93Um9vdDo6cmVjYWxjU2hhZG93VHJlZVN0eWxlKFN0eWxlQ2hh
bmdlIGNoYW5nZSkKIHsKLSAgICBpZiAoaGFzQ29udGVudEVsZW1lbnQoKSkKLSAgICAgICAgcmVh
dHRhY2goKTsKKyAgICBpZiAobmVlZHNSZWF0dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRvdygpKQor
ICAgICAgICByZWF0dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRvdygpOwogICAgIGVsc2UgewogICAg
ICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtMTEwLDEwICsxMTEs
MTggQEAgdm9pZCBTaGFkb3dSb290OjpyZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2Ug
Y2hhbmdlKQogICAgICAgICB9CiAgICAgfQogCisgICAgY2xlYXJOZWVkc1JlYXR0YWNoSG9zdENo
aWxkcmVuQW5kU2hhZG93KCk7CiAgICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgY2xl
YXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAordm9pZCBTaGFkb3dSb290OjpzZXROZWVk
c1JlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hhZG93KCkKK3sKKyAgICBtX25lZWRzUmVjYWxjdWxh
dGVDb250ZW50ID0gdHJ1ZTsKKyAgICBpZiAoc2hhZG93SG9zdCgpKQorICAgICAgICBzaGFkb3dI
b3N0KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwogSFRNTENvbnRlbnRFbGVtZW50KiBT
aGFkb3dSb290OjppbmNsdWRlckZvcihOb2RlKiBub2RlKSBjb25zdAogewogICAgIGlmICghbV9p
bmNsdXNpb25zKQpAQCAtMTY4LDYgKzE3NywyNSBAQCB2b2lkIFNoYWRvd1Jvb3Q6OmF0dGFjaCgp
CiAgICAgICAgIG1faW5jbHVzaW9ucy0+ZGlkU2VsZWN0KCk7CiB9CiAKK3ZvaWQgU2hhZG93Um9v
dDo6cmVhdHRhY2hIb3N0Q2hpbGRyZW5BbmRTaGFkb3coKQoreworICAgIE5vZGUqIGhvc3ROb2Rl
ID0gaG9zdCgpOworICAgIGlmICghaG9zdE5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBob3N0Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmF0dGFjaGVkKCkpCisg
ICAgICAgICAgICBjaGlsZC0+ZGV0YWNoKCk7CisgICAgfQorCisgICAgcmVhdHRhY2goKTsKKwor
ICAgIGZvciAoTm9kZSogY2hpbGQgPSBob3N0Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWNoaWxkLT5hdHRhY2hl
ZCgpKQorICAgICAgICAgICAgY2hpbGQtPmF0dGFjaCgpOworICAgIH0KK30KKwogQ29udGVudElu
Y2x1c2lvblNlbGVjdG9yKiBTaGFkb3dSb290OjppbmNsdXNpb25zKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9pbmNsdXNpb25zLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggODM2
ZTRhYWFjZDRmNmNlMTVmN2NhZWNiYjhiZmI3NjY0N2JmY2Q3YS4uYmI1NzM0Y2JkYmM3YmI2YWFi
Y2E2MDE0NTNjN2MwNzJmODM0NjFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC00Mywx
MSArNDMsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5
bGVDaGFuZ2UpOwogCisgICAgdm9pZCBzZXROZWVkc1JlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hh
ZG93KCk7CisgICAgdm9pZCBjbGVhck5lZWRzUmVhdHRhY2hIb3N0Q2hpbGRyZW5BbmRTaGFkb3co
KTsKKyAgICBib29sIG5lZWRzUmVhdHRhY2hIb3N0Q2hpbGRyZW5BbmRTaGFkb3coKTsKKwogICAg
IEhUTUxDb250ZW50RWxlbWVudCogaW5jbHVkZXJGb3IoTm9kZSopIGNvbnN0OwogICAgIHZvaWQg
aG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGJvb2wgaXNJbmNsdXNpb25TZWxlY3RvckFjdGl2
ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZvaWQgcmVhdHRh
Y2hIb3N0Q2hpbGRyZW5BbmRTaGFkb3coKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseUF1dGhv
clNoZWV0cygpIGNvbnN0OwogICAgIHZvaWQgc2V0QXBwbHlBdXRob3JTaGVldHMoYm9vbCk7CkBA
IC02OCw3ICs3Myw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0NvbnRlbnRFbGVtZW50KCkg
Y29uc3Q7CiAKLSAgICBib29sIG1fYXBwbHlBdXRob3JTaGVldHM7CisgICAgYm9vbCBtX2FwcGx5
QXV0aG9yU2hlZXRzIDogMTsKKyAgICBib29sIG1fbmVlZHNSZWNhbGN1bGF0ZUNvbnRlbnQgOiAx
OwogICAgIE93blB0cjxDb250ZW50SW5jbHVzaW9uU2VsZWN0b3I+IG1faW5jbHVzaW9uczsKIH07
CiAKQEAgLTc3LDYgKzgzLDE2IEBAIGlubGluZSBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IFNoYWRv
d1Jvb3Q6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTaGFkb3dSb290KGRvY3VtZW50KSk7CiB9CiAKK2lubGluZSB2b2lkIFNoYWRvd1Jvb3Q6OmNs
ZWFyTmVlZHNSZWF0dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRvdygpCit7CisgICAgbV9uZWVkc1Jl
Y2FsY3VsYXRlQ29udGVudCA9IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBTaGFkb3dSb290Ojpu
ZWVkc1JlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hhZG93KCkKK3sKKyAgICByZXR1cm4gbV9uZWVk
c1JlY2FsY3VsYXRlQ29udGVudCB8fCBoYXNDb250ZW50RWxlbWVudCgpOworfQorCiBpbmxpbmUg
U2hhZG93Um9vdCogdG9TaGFkb3dSb290KE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFub2Rl
IHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6U0hBRE9XX1JPT1RfTk9ERSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcAppbmRleCA4
YzZlZGI2ZThiNzEzZmRjMTQ1MDkwMTcxYzk5ZGM0YzM2MTIyZWYxLi40YWY0NWIyOTEwZWJkYWFi
NDhhOTViMjAxMDEyMWU4ZDNjN2FlNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAKQEAgLTgzLDggKzgzLDYgQEAgdm9pZCBIVE1M
Q29udGVudEVsZW1lbnQ6OmF0dGFjaCgpCiAKICAgICBpZiAocm9vdCkgewogICAgICAgICBmb3Ig
KFNoYWRvd0luY2x1c2lvbiogaW5jbHVzaW9uID0gbV9pbmNsdXNpb25zLT5maXJzdCgpOyBpbmNs
dXNpb247IGluY2x1c2lvbiA9IGluY2x1c2lvbi0+bmV4dCgpKQotICAgICAgICAgICAgaW5jbHVz
aW9uLT5jb250ZW50KCktPmRldGFjaCgpOwotICAgICAgICBmb3IgKFNoYWRvd0luY2x1c2lvbiog
aW5jbHVzaW9uID0gbV9pbmNsdXNpb25zLT5maXJzdCgpOyBpbmNsdXNpb247IGluY2x1c2lvbiA9
IGluY2x1c2lvbi0+bmV4dCgpKQogICAgICAgICAgICAgaW5jbHVzaW9uLT5jb250ZW50KCktPmF0
dGFjaCgpOwogICAgIH0KIH0KQEAgLTk0LDYgKzkyLDEwIEBAIHZvaWQgSFRNTENvbnRlbnRFbGVt
ZW50OjpkZXRhY2goKQogICAgIGlmIChTaGFkb3dSb290KiByb290ID0gdG9TaGFkb3dSb290KHNo
YWRvd1RyZWVSb290Tm9kZSgpKSkgewogICAgICAgICBpZiAoQ29udGVudEluY2x1c2lvblNlbGVj
dG9yKiBzZWxlY3RvciA9IHJvb3QtPmluY2x1c2lvbnMoKSkKICAgICAgICAgICAgIHNlbGVjdG9y
LT51bnNlbGVjdChtX2luY2x1c2lvbnMuZ2V0KCkpOworCisgICAgICAgIC8vIFdoZW4gY29udGVu
dCBlbGVtZW50IGlzIGRldGFjaGVkLCBzaGFkb3cgdHJlZSBzaG91bGQgYmUgcmVjcmVhdGVkIHRv
IHJlLWNhbGN1bGF0ZSBpbmNsdXNpb25zIGZvcgorICAgICAgICAvLyBvdGhlciBjb250ZW50IGVs
ZW1lbnRzLgorICAgICAgICByb290LT5zZXROZWVkc1JlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hh
ZG93KCk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1faW5jbHVzaW9ucy0+aXNFbXB0eSgpKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBmNzhjM2IxZGVmYTZiODdiOWFlMmFiZGJiZDk5ZTMxZDgzNDMwNzI4Li5jNjE5ZGY5ZDNl
YjYxNTM5YThlYTI4ODI5ZDJjZWE0Njc3ODA1MGRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDItMDEgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBDb250ZW50IGVsZW1lbnQgc2hvdWxkIGJlIGFibGUgdG8gYmUgZHluYW1pY2FsbHkgYWRkZWQv
cmVtb3ZlZC9yZXBsYWNlZCBpbiBhIHNoYWRvdyB0cmVlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKQorCisgICAgICAgIFRlc3QgY2FzZXMgZm9yIGFwcGVuZGluZy9yZW1vdmlu
Zy9yZXBsYWNpbmcgY29udGVudCBlbGVtZW50IGluIGEgc2hhZG93IHRyZWUuCisKKyAgICAgICAg
KiBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvY29udGVudC1lbGVtZW50LW1vdmUuaHRtbDog
QWRkZWQuCisKIDIwMTItMDItMDEgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRml4IHRoZSBzZW1hbnRpY3Mgb2YgcGFzc2luZyBjb250ZW50c1Zpc2li
bGUgZmxhZyB0byBHcmFwaGljc0xheWVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92ZS1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDlmZWUxZDEwYmVjNzJmM2MyY2RlZTdlM2VkOGJjNzZkYTQ3NmE2NAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1lbnQtbW92
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNCBAQAordGVzdFJlbW92ZUNvbnRlbnQKK1BBU1MK
K3Rlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMxCitQQVNTCit0ZXN0UmVtb3ZlQ29udGVudFRvUmVj
YWxjMgorUEFTUwordGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVMaWdodENoaWxkcmVuCitQQVNT
Cit0ZXN0UmVtb3ZlQ29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QxCitQQVNTCit0ZXN0UmVtb3Zl
Q29udGVudEFuZFJlbW92ZVNoYWRvd1Jvb3QyCitQQVNTCit0ZXN0QXBwZW5kQ29udGVudDEKK1BB
U1MKK3Rlc3RBcHBlbmRDb250ZW50MgorUEFTUwordGVzdEFwcGVuZENvbnRlbnQzCitQQVNTCit0
ZXN0Q2hhbmdlT3JkZXJPZkNvbnRlbnQKK1BBU1MKK3Rlc3RNb3ZlTGlnaHRDaGlsZE91dAorUEFT
UworVEVTVCBDT01QTEVURUQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hh
ZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvY29udGVudC1lbGVtZW50LW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGEyMjM0MDUzNTc0OTli
M2Q5ZWZhYWVkNDM4ZGE4YzE3NzUyODE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L2NvbnRlbnQtZWxlbWVudC1tb3ZlLmh0bWwKQEAgLTAsMCArMSw1MDQg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy8qIHJlbGF0aXZl
IHBvc2l0aW9uaW5nIGVuc3VyZXMgdW5kZXJseWluZyBSZW5kZXJMYXllciAqLworLmNvbnRhaW5l
ciB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworfQorCisuc3BhbiB7CisgICAgZGlzcGxheTog
Ym94ZWQtaW5saW5lOworICAgIG1hcmdpbjogMnB4OworICAgIGJvcmRlcjogc29saWQ7Cit9Cis8
L3N0eWxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgKz0gKG1lc3NhZ2UgKyAiXG4iKTsK
K30KKworZnVuY3Rpb24gcmVtb3ZlQWxsQ2hpbGRyZW4oZWxlbSkgeworICAgIHdoaWxlIChlbGVt
LmZpcnN0Q2hpbGQpCisgICAgICAgIGVsZW0ucmVtb3ZlQ2hpbGQoZWxlbS5maXJzdENoaWxkKTsK
K30KKworZnVuY3Rpb24gY2xlYW5VcCgpIHsKKyAgICByZW1vdmVBbGxDaGlsZHJlbihkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpKTsKKyAgICByZW1vdmVBbGxDaGls
ZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpKTsKK30KKwor
ZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVyTGluZXModGV4dCkgeworICAgIHZhciBsaW5lcyA9IHRl
eHQuc3BsaXQoJ1xuJyk7CisgICAgbGluZXMuc3BsaWNlKDAsIDIpOworICAgIHJldHVybiBsaW5l
cy5qb2luKCdcbicpOworfQorCitmdW5jdGlvbiBjaGVjaygpIHsKKyAgICB2YXIgcmVmQ29udGFp
bmVyUmVuZGVyVHJlZSA9IGludGVybmFscy5lbGVtZW50UmVuZGVyVHJlZUFzVGV4dChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpKTsKKyAgICB2YXIgcmVmUmVuZGVy
VHJlZSA9IHJlbW92ZUNvbnRhaW5lckxpbmVzKHJlZkNvbnRhaW5lclJlbmRlclRyZWUpOworCisg
ICAgdmFyIHRhcmdldENvbnRhaW5lclJlbmRlclRyZWUgPSBpbnRlcm5hbHMuZWxlbWVudFJlbmRl
clRyZWVBc1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKSk7
CisgICAgdmFyIHRhcmdldFJlbmRlclRyZWUgPSByZW1vdmVDb250YWluZXJMaW5lcyh0YXJnZXRD
b250YWluZXJSZW5kZXJUcmVlKTsKKworICAgIGlmICh0YXJnZXRSZW5kZXJUcmVlID09IHJlZlJl
bmRlclRyZWUpCisgICAgICAgIGxvZygiUEFTUyIpOworICAgIGVsc2UgeworICAgICAgICBsb2co
IkZBSUwiKTsKKyAgICAgICAgbG9nKCJFeHBlY3RlZDogIik7CisgICAgICAgIGxvZyhyZWZSZW5k
ZXJUcmVlKTsKKyAgICAgICAgbG9nKCJBY3R1YWw6ICIpOworICAgICAgICBsb2codGFyZ2V0UmVu
ZGVyVHJlZSk7CisgICAgfQorfQorCitmdW5jdGlvbiBjcmVhdGVTcGFuV2l0aFRleHQodGV4dCkg
eworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgIHNw
YW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOworICAgIHJldHVy
biBzcGFuOworfQorCitmdW5jdGlvbiBjcmVhdGVDb250ZW50V2l0aFNlbGVjdChzZWxlY3QsIGZh
bGxiYWNrKSB7CisgICAgdmFyIGNvbnRlbnQgPSBpbnRlcm5hbHMuY3JlYXRlQ29udGVudEVsZW1l
bnQoZG9jdW1lbnQpOworICAgIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdzZWxlY3QnLCBzZWxlY3Qp
OworICAgIGlmICghZmFsbGJhY2spCisgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRl
U3BhbldpdGhUZXh0KCJGQUxMQkFDSyIpKTsKKworICAgIHJldHVybiBjb250ZW50OworfQorCitm
dW5jdGlvbiBhcHBlbmRTaGFkb3codGFyZ2V0LCBzZWxlY3QpIHsKKyAgICB2YXIgcm9vdCA9IGlu
dGVybmFscy5lbnN1cmVTaGFkb3dSb290KHRhcmdldCk7CisKKyAgICB2YXIgY29udGVudCA9IGlu
dGVybmFscy5jcmVhdGVDb250ZW50RWxlbWVudChkb2N1bWVudCk7CisgICAgY29udGVudC5zZXRB
dHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7CisgICAgY29udGVudC5hcHBlbmRDaGlsZChjcmVh
dGVTcGFuV2l0aFRleHQoIkZBTExCQUNLIikpOworCisgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgie1NIQURPVzogIikpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQo
Y29udGVudCk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
fSIpKTsKK30KKworZnVuY3Rpb24gYXBwZW5kU2hhZG93RGVlcCh0YXJnZXQsIHNlbGVjdCkgewor
ICAgIHZhciByb290ID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3QodGFyZ2V0KTsKKworICAg
IHZhciBjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICB7CisgICAg
ICAgIHZhciBjb250ZW50ID0gaW50ZXJuYWxzLmNyZWF0ZUNvbnRlbnRFbGVtZW50KGRvY3VtZW50
KTsKKyAgICAgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdCcsIHNlbGVjdCk7CisgICAg
ICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJGQUxMQkFDSyIpKTsK
KworICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgie0lO
TkVSOiAiKSk7CisgICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgICAgICBj
aGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKKyAgICB9CisK
KyAgICByb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ7U0hBRE9XOiAi
KSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChjaGlsZCk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgifSIpKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
VGVzdCBGdW5jdGlvbnMuCisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50KGNhbGxJZkRvbmUp
IHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAg
Ly8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8
L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9
IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxz
LmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3Bhbldp
dGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgc3Iu
YXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisK
KyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250ZW50LCBjYWxsSWZEb25lKSB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZChjb250ZW50KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+QkVGT1JFPC9zcGFu
PjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7Cisg
ICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRU
aW1lb3V0KGYsIDApOworfQorCitmdW5jdGlvbiB0ZXN0UmVtb3ZlQ29udGVudFRvUmVjYWxjMShj
YWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1MID0gIjxz
cGFuIGNsYXNzPSdjMSc+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPiI7CisKKyAg
ICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIGNvbnRlbnQxID0gY3JlYXRlQ29udGVu
dFdpdGhTZWxlY3QoJy5jMScpOworICAgIHZhciBjb250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRo
U2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qo
cm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudDEpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0
ZVNwYW5XaXRoVGV4dCgiTUlEIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQyKTsKKyAg
ICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikpOworCisgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBlbmRDaGlsZChyb290
KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKSB7
CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQxLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudDEpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZP
UkU8L3NwYW4+PHNwYW4+TUlEPC9zcGFuPjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4+TElHSFQg
Mjwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9u
ZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQxLCBjYWxsSWZEb25lKTsKKwor
ICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50VG9S
ZWNhbGMyKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhU
TUwgPSAiPHNwYW4+TElHSFQgMTwvc3Bhbj48c3BhbiBjbGFzcz0nYzEnPkxJR0hUIDI8L3NwYW4+
IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgY29udGVudDEgPSBjcmVh
dGVDb250ZW50V2l0aFNlbGVjdCgnLmMxJyk7CisgICAgdmFyIGNvbnRlbnQyID0gY3JlYXRlQ29u
dGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hh
ZG93Um9vdChyb290KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJF
Rk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50MSk7CisgICAgc3IuYXBwZW5kQ2hp
bGQoY3JlYXRlU3BhbldpdGhUZXh0KCJNSUQiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVu
dDIpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENo
aWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudDEsIGNhbGxJ
ZkRvbmUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29udGVu
dDEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250ZW50MSk7CisgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZXhwZWN0LWNvbnRhaW5lcicpLmlubmVySFRNTCA9ICI8ZGl2Pjxz
cGFuPkJFRk9SRTwvc3Bhbj48c3Bhbj5NSUQ8L3NwYW4+PHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bh
bj5MSUdIVCAyPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBj
YWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9vdCwgY29udGVudDEsIGNhbGxJZkRv
bmUpOworCisgICAgc2V0VGltZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdFJlbW92ZUNv
bnRlbnRBbmRSZW1vdmVMaWdodENoaWxkcmVuKGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRy
ZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8v
IENyZWF0ZSBzaGFkb3cgdHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRo
U2VsZWN0KCdzcGFuJyk7CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qo
cm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY29udGVudCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRl
U3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdh
Y3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5j
dGlvbihyb290LCBjb250ZW50LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGNvbnRlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250ZW50
KTsKKyAgICAgICAgICAgIHJlbW92ZUFsbENoaWxkcmVuKHJvb3QpOworICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5lckhUTUwgPSAiPGRp
dj48c3Bhbj5CRUZPUkU8L3NwYW4+PHNwYW4+QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAg
ICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBjb250ZW50LCBjYWxs
SWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1v
dmVTaGFkb3dSb290KGNhbGxJZkRvbmUpIHsKKyAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3JlYXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5p
bm5lckhUTUwgPSAiPHNwYW4+TElHSFQ8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cg
dHJlZS4KKyAgICB2YXIgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7
CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3Iu
YXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5k
Q2hpbGQoY29udGVudCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJB
RlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVy
JykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBjb250
ZW50LCBjYWxsSWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGludGVybmFscy5yZW1vdmVTaGFkb3dSb290KHJvb3QpOworICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48
c3Bhbj5MSUdIVDwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAg
ICAgICB9OworICAgIH0pKHJvb3QsIGNvbnRlbnQsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGlt
ZW91dChmLCAwKTsKK30KKworZnVuY3Rpb24gdGVzdFJlbW92ZUNvbnRlbnRBbmRSZW1vdmVTaGFk
b3dSb290MShjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJI
VE1MID0gIjxzcGFuPkxJR0hUPC9zcGFuPiI7CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUu
CisgICAgdmFyIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAg
IHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHNyLmFwcGVu
ZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxk
KGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIi
KSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFw
cGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY29udGVudCwg
Y2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBj
b250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGVudCk7CisgICAgICAgICAgICBpbnRl
cm5hbHMucmVtb3ZlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+PHNwYW4+TElH
SFQ8L3NwYW4+PC9kaXY+IjsKKyAgICAgICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsK
KyAgICB9KShyb290LCBjb250ZW50LCBjYWxsSWZEb25lKTsKKworICAgIHNldFRpbWVvdXQoZiwg
MCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93Um9vdDIo
Y2FsbElmRG9uZSkgeworICAgIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJlZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8
c3Bhbj5MSUdIVCAxPC9zcGFuPjxzcGFuIGNsYXNzPSdjMSc+TElHSFQgMjwvc3Bhbj4iOworCisg
ICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBjb250ZW50ID0gY3JlYXRlQ29udGVu
dFdpdGhTZWxlY3QoJy5jMScpOworICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dS
b290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JF
IikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQpOworICAgIHNyLmFwcGVuZENoaWxkKGNy
ZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAo
ZnVuY3Rpb24ocm9vdCwgY29udGVudCwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBjb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29u
dGVudCk7CisgICAgICAgICAgICBpbnRlcm5hbHMucmVtb3ZlU2hhZG93Um9vdChyb290KTsKKyAg
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5u
ZXJIVE1MID0gIjxkaXY+PHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjwv
ZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07CisgICAgfSkocm9v
dCwgY29udGVudCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitm
dW5jdGlvbiB0ZXN0QXBwZW5kQ29udGVudDEoY2FsbElmRG9uZSkgeworICAgIHZhciByb290ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJl
ZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3Bhbj5MSUdIVDwvc3Bhbj4iOworCisgICAgLy8g
Q3JlYXRlIHNoYWRvdyB0cmVlLgorICAgIHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dS
b290KHJvb3QpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JF
IikpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZVNwYW5XaXRoVGV4dCgiQUZURVIiKSk7CisK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0dWFsLWNvbnRhaW5lcicpLmFwcGVuZENo
aWxkKHJvb3QpOworCisgICAgdmFyIGYgPSAoZnVuY3Rpb24ocm9vdCwgY2FsbElmRG9uZSkgewor
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGVudCA9IGNy
ZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgICAgICAgICB2YXIgc3IgPSBpbnRl
cm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAgIHNyLmluc2VydEJlZm9y
ZShjb250ZW50LCBzci5sYXN0Q2hpbGQpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2V4cGVjdC1jb250YWluZXInKS5pbm5lckhUTUwgPSAiPGRpdj48c3Bhbj5CRUZPUkU8
L3NwYW4+PFNQQU4+TElHSFQ8L3NwYW4+PHNwYW4+QUZURVI8L3NwYW4+PC9kaXY+IjsKKyAgICAg
ICAgICAgIGNhbGxJZkRvbmUoKTsKKyAgICAgICAgfTsKKyAgICB9KShyb290LCBjYWxsSWZEb25l
KTsKKworICAgIHNldFRpbWVvdXQoZiwgMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBcHBlbmRDb250
ZW50MihjYWxsSWZEb25lKSB7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKTsKKworICAgIC8vIENyZWF0ZSBsaWdodCB0cmVlLgorICAgIHJvb3QuaW5uZXJIVE1M
ID0gIjxzcGFuPkxJR0hUIDE8L3NwYW4+PHNwYW4gY2xhc3M9J2MyJz5MSUdIVCAyPC9zcGFuPiI7
CisKKyAgICAvLyBDcmVhdGUgc2hhZG93IHRyZWUuCisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVu
c3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhU
ZXh0KCJCRUZPUkUiKSk7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJB
RlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVy
JykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBjYWxs
SWZEb25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBj
b250ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCcuYzInKTsKKyAgICAgICAgICAgIHZh
ciBjb250ZW50MiA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCdzcGFuJyk7CisgICAgICAgICAg
ICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsKKyAgICAgICAgICAg
IHNyLmluc2VydEJlZm9yZShjb250ZW50MSwgc3IubGFzdENoaWxkKTsKKyAgICAgICAgICAgIHNy
Lmluc2VydEJlZm9yZShjb250ZW50Miwgc3IubGFzdENoaWxkKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0gIjxkaXY+
PHNwYW4+QkVGT1JFPC9zcGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+PHNwYW4+TElHSFQgMTwvc3Bh
bj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rpdj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOwor
ICAgICAgICB9OworICAgIH0pKHJvb3QsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChm
LCAwKTsKK30KKworZnVuY3Rpb24gdGVzdEFwcGVuZENvbnRlbnQzKGNhbGxJZkRvbmUpIHsKKyAg
ICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3Jl
YXRlIGxpZ2h0IHRyZWUuCisgICAgcm9vdC5pbm5lckhUTUwgPSAiPHNwYW4+TElHSFQgMTwvc3Bh
bj48c3BhbiBjbGFzcz0nYzInPkxJR0hUIDI8L3NwYW4+IjsKKworICAgIC8vIENyZWF0ZSBzaGFk
b3cgdHJlZS4KKyAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChyb290KTsK
KyAgICB2YXIgbWlkID0gY3JlYXRlU3BhbldpdGhUZXh0KCJNSUQiKTsKKyAgICBzci5hcHBlbmRD
aGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZCht
aWQpOworICAgIHNyLmFwcGVuZENoaWxkKGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCcuYzInKSk7
CisgICAgc3IuYXBwZW5kQ2hpbGQoY3JlYXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQo
cm9vdCk7CisKKyAgICB2YXIgZiA9IChmdW5jdGlvbihyb290LCBtaWQsIGNhbGxJZkRvbmUpIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBj
cmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgICAgICAgICAgdmFyIHNyID0gaW50
ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qocm9vdCk7CisgICAgICAgICAgICBzci5pbnNlcnRCZWZv
cmUoY29udGVudCwgbWlkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdl
eHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0KKyAgICAgICAgICAgICAgICAiPGRpdj48c3Bh
bj5CRUZPUkU8L3NwYW4+PHNwYW4+TElHSFQgMTwvc3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxz
cGFuPk1JRDwvc3Bhbj48c3Bhbj5GQUxMQkFDSzwvc3Bhbj48c3Bhbj5BRlRFUjwvc3Bhbj48L2Rp
dj4iOworICAgICAgICAgICAgY2FsbElmRG9uZSgpOworICAgICAgICB9OworICAgIH0pKHJvb3Qs
IG1pZCwgY2FsbElmRG9uZSk7CisKKyAgICBzZXRUaW1lb3V0KGYsIDApOworfQorCitmdW5jdGlv
biB0ZXN0Q2hhbmdlT3JkZXJPZkNvbnRlbnQoY2FsbElmRG9uZSkgeworICAgIHZhciByb290ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgICAvLyBDcmVhdGUgbGlnaHQgdHJl
ZS4KKyAgICByb290LmlubmVySFRNTCA9ICI8c3BhbiBjbGFzcz0nYzEnPkxJR0hUIDE8L3NwYW4+
PHNwYW4+TElHSFQgMjwvc3Bhbj4iOworCisgICAgLy8gQ3JlYXRlIHNoYWRvdyB0cmVlLgorICAg
IHZhciBzciA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHJvb3QpOworICAgIHZhciBjb250
ZW50MSA9IGNyZWF0ZUNvbnRlbnRXaXRoU2VsZWN0KCcuYzEnKTsKKyAgICB2YXIgY29udGVudDIg
PSBjcmVhdGVDb250ZW50V2l0aFNlbGVjdCgnc3BhbicpOworICAgIHNyLmFwcGVuZENoaWxkKGNy
ZWF0ZVNwYW5XaXRoVGV4dCgiQkVGT1JFIikpOworICAgIHNyLmFwcGVuZENoaWxkKGNvbnRlbnQx
KTsKKyAgICBzci5hcHBlbmRDaGlsZChjb250ZW50Mik7CisgICAgc3IuYXBwZW5kQ2hpbGQoY3Jl
YXRlU3BhbldpdGhUZXh0KCJBRlRFUiIpKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdhY3R1YWwtY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICB2YXIgZiA9IChm
dW5jdGlvbihyb290LCBjb250ZW50MSwgY2FsbElmRG9uZSkgeworICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgc3IgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9v
dChyb290KTsKKyAgICAgICAgICAgIHNyLnJlbW92ZUNoaWxkKGNvbnRlbnQxKTsKKyAgICAgICAg
ICAgIHNyLmluc2VydEJlZm9yZShjb250ZW50MSwgc3IubGFzdENoaWxkKTsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5uZXJIVE1MID0K
KyAgICAgICAgICAgICAgICAiPGRpdj48c3Bhbj5CRUZPUkU8L3NwYW4+PFNQQU4+TElHSFQgMTwv
c3Bhbj48c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkZBTExCQUNLPC9zcGFuPjxzcGFuPkFGVEVS
PC9zcGFuPjwvZGl2PiI7CisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAgICAgIH07Cisg
ICAgfSkocm9vdCwgY29udGVudDEsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChmLCAw
KTsKK30KKworZnVuY3Rpb24gdGVzdE1vdmVMaWdodENoaWxkT3V0KGNhbGxJZkRvbmUpIHsKKyAg
ICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCisgICAgLy8gQ3Jl
YXRlIGxpZ2h0IHRyZWUuCisgICAgdmFyIG4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisgICAgbjEuc2V0QXR0cmlidXRlKCdpZCcsICduMScpOworICAgIG4xLmlubmVySFRNTCA9
ICI8c3BhbiBpZD0nbGlnaHQxJz5MSUdIVCAxPC9zcGFuPjxzcGFuPkxJR0hUIDI8L3NwYW4+IjsK
KyAgICB2YXIgbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBuMi5zZXRB
dHRyaWJ1dGUoJ2lkJywgJ24yJyk7CisKKyAgICByb290LmFwcGVuZENoaWxkKG4xKTsKKyAgICBy
b290LmFwcGVuZENoaWxkKG4yKTsKKworICAgIC8vIENyZWF0ZSBzaGFkb3cgdHJlZSBpbiAnbjEn
CisgICAgdmFyIHNyID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3QobjEpOworICAgIHZhciBj
b250ZW50ID0gY3JlYXRlQ29udGVudFdpdGhTZWxlY3QoJ3NwYW4nKTsKKyAgICBzci5hcHBlbmRD
aGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkJFRk9SRSIpKTsKKyAgICBzci5hcHBlbmRDaGlsZChj
b250ZW50KTsKKyAgICBzci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuV2l0aFRleHQoIkFGVEVSIikp
OworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdHVhbC1jb250YWluZXInKS5hcHBl
bmRDaGlsZChyb290KTsKKworICAgIHZhciBmID0gKGZ1bmN0aW9uKHJvb3QsIG4yLCBjYWxsSWZE
b25lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpZ2h0MScpOworICAgICAgICAgICAgZS5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGUpOworICAgICAgICAgICAgbjIuYXBwZW5kQ2hpbGQoZSk7CisKKyAg
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlY3QtY29udGFpbmVyJykuaW5u
ZXJIVE1MID0KKyAgICAgICAgICAgICAgICAiPGRpdj48ZGl2PjxzcGFuPkJFRk9SRTwvc3Bhbj48
c3Bhbj5MSUdIVCAyPC9zcGFuPjxzcGFuPkFGVEVSPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+TElH
SFQgMTwvc3Bhbj48L2Rpdj48L2Rpdj4iCisgICAgICAgICAgICBjYWxsSWZEb25lKCk7CisgICAg
ICAgIH07CisgICAgfSkocm9vdCwgbjIsIGNhbGxJZkRvbmUpOworCisgICAgc2V0VGltZW91dChm
LCAwKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGVzdCBEcml2ZXJzLgorCit2YXIgdGVz
dEZ1bmNzID0gWworICAgIHRlc3RSZW1vdmVDb250ZW50LAorICAgIHRlc3RSZW1vdmVDb250ZW50
VG9SZWNhbGMxLAorICAgIHRlc3RSZW1vdmVDb250ZW50VG9SZWNhbGMyLAorICAgIHRlc3RSZW1v
dmVDb250ZW50QW5kUmVtb3ZlTGlnaHRDaGlsZHJlbiwKKyAgICB0ZXN0UmVtb3ZlQ29udGVudEFu
ZFJlbW92ZVNoYWRvd1Jvb3QxLAorICAgIHRlc3RSZW1vdmVDb250ZW50QW5kUmVtb3ZlU2hhZG93
Um9vdDIsCisgICAgdGVzdEFwcGVuZENvbnRlbnQxLAorICAgIHRlc3RBcHBlbmRDb250ZW50MiwK
KyAgICB0ZXN0QXBwZW5kQ29udGVudDMsCisgICAgdGVzdENoYW5nZU9yZGVyT2ZDb250ZW50LAor
ICAgIHRlc3RNb3ZlTGlnaHRDaGlsZE91dAorXTsKKworZnVuY3Rpb24gZG9UZXN0SWZMZWZ0KCkg
eworICAgIHZhciB0ZXN0ID0gdGVzdEZ1bmNzLnNoaWZ0KCk7CisgICAgaWYgKHRlc3QgPT0gbnVs
bCkKKyAgICAgICAgcmV0dXJuIGRvbmVUZXN0KCk7CisKKyAgICB2YXIgY2FsbElmRG9uZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
Y2hlY2soKTsKKyAgICAgICAgICAgIGNsZWFuVXAoKTsKKyAgICAgICAgICAgIGRvVGVzdElmTGVm
dCgpOworICAgICAgICB9LCAwKTsKKyAgICB9OworCisgICAgbG9nKHRlc3QubmFtZSk7CisgICAg
dGVzdChjYWxsSWZEb25lKTsKK30KKworZnVuY3Rpb24gZG9uZVRlc3QoKSB7CisgICAgbG9nKCJU
RVNUIENPTVBMRVRFRCIpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworZnVuY3Rpb24gZG9UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorCisgICAg
Y2xlYW5VcCgpOworICAgIGRvVGVzdElmTGVmdCgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKworPGRpdiBpZD0iYWN0dWFsLWNvbnRhaW5lciIgY2xh
c3M9ImNvbnRhaW5lciI+PC9kaXY+Cis8ZGl2IGlkPSJleHBlY3QtY29udGFpbmVyIiBjbGFzcz0i
Y29udGFpbmVyIj48L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorCis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>