<?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>150908</bug_id>
          
          <creation_ts>2015-11-04 15:33:00 -0800</creation_ts>
          <short_desc>Continuations with anonymous wrappers inside misplaces child renderers.</short_desc>
          <delta_ts>2015-11-11 08:57: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>Layout and Rendering</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139463</commentid>
    <comment_count>0</comment_count>
      <attachid>264821</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-11-04 15:33:00 -0800</bug_when>
    <thetext>Created attachment 264821
test reduction

see attached test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139464</commentid>
    <comment_count>1</comment_count>
      <attachid>264822</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-11-04 15:34:15 -0800</bug_when>
    <thetext>Created attachment 264822
testing remove permutation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139540</commentid>
    <comment_count>2</comment_count>
      <attachid>264840</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-11-04 20:19:05 -0800</bug_when>
    <thetext>Created attachment 264840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139983</commentid>
    <comment_count>3</comment_count>
      <attachid>264840</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-06 09:29:06 -0800</bug_when>
    <thetext>Comment on attachment 264840
Patch

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

I can’t review, Hyatt probably needs to, but I have spelling and other similar comments.

&gt; Source/WebCore/rendering/RenderInline.cpp:433
&gt; +            RenderElement* anonymousParent = rendererToMove-&gt;parent();

I would consider auto* here instead of naming the type, since we’d like to use as specific a type as possible.

&gt; Source/WebCore/rendering/RenderInline.cpp:444
&gt; +                // Reparent the whole anon wrapper tree.

I don’t think “anon” is a helpful abbreviation here. Lets spell out the word.

&gt; Source/WebCore/rendering/RenderInline.cpp:455
&gt; +            // FIXME: When the anon wrapper has mutliple children, we end up traversing up to the topmost wrapper

Typo: &quot;mutliple&quot; instead of &quot;multiple&quot;.

&gt; Source/WebCore/rendering/RenderInline.cpp:497
&gt; +            RenderObject* renderer = currentChild-&gt;nextSibling();
&gt;              while (renderer) {

I suggest we write this as a for loop, even if the “advance to next” part is empty because it’s done inside the end of the loop rather than at the end:

    for (auto* renderer = currentChild-&gt;nextSibling(); renderer; ) {

&gt; Source/WebCore/rendering/RenderInline.cpp:498
&gt;                  RenderObject* tmp = renderer;

The name “tmp” here is really lame.

&gt; Source/WebCore/rendering/RenderInline.cpp:522
&gt; +    RenderObject* renderer = currentChild-&gt;nextSibling();
&gt;      while (renderer) {
&gt;          RenderObject* tmp = renderer;

Same comment, for loop is better, tmp is lame.

&gt; Source/WebCore/rendering/RenderInline.cpp:598
&gt; +    RenderBoxModelObject* beforeChildAnchestor = nullptr;

Typo here: &quot;anchestor&quot; instead of &quot;ancestor&quot;.

&gt; Source/WebCore/rendering/RenderInline.cpp:599
&gt; +    // In case of anon wrappers, the parent of the beforeChild is mostly irrelevant. What we need is

More &quot;anon&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140016</commentid>
    <comment_count>4</comment_count>
      <attachid>264840</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-11-06 11:42:47 -0800</bug_when>
    <thetext>Comment on attachment 264840
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderInline.cpp:497
&gt;&gt;              while (renderer) {
&gt; 
&gt; I suggest we write this as a for loop, even if the “advance to next” part is empty because it’s done inside the end of the loop rather than at the end:
&gt; 
&gt;     for (auto* renderer = currentChild-&gt;nextSibling(); renderer; ) {

I also like to delete the nodes from the end if possible. Since current is not null and it is the parent of currentChild, this loop may be written like this:

for (auto* renderer = current-&gt;lastChild(); renderer != currentChild; renderer = renderer-&gt;previousSibling()) {
    currentInline.removeChildInternal(*renderer, NotifyChildren);
    cloneInline-&gt;addChildIgnoringContinuation(renderer);
    renderer-&gt;setNeedsLayoutAndPrefWidthsRecalc();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140233</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-11-07 21:06:26 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 264840 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264840&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/RenderInline.cpp:497
&gt; &gt;&gt;              while (renderer) {
&gt; &gt; 
&gt; &gt; I suggest we write this as a for loop, even if the “advance to next” part is empty because it’s done inside the end of the loop rather than at the end:
&gt; &gt; 
&gt; &gt;     for (auto* renderer = currentChild-&gt;nextSibling(); renderer; ) {
&gt; 
&gt; I also like to delete the nodes from the end if possible. Since current is
&gt; not null and it is the parent of currentChild, this loop may be written like
&gt; this:
&gt; 
&gt; for (auto* renderer = current-&gt;lastChild(); renderer != currentChild;
&gt; renderer = renderer-&gt;previousSibling()) {
&gt;     currentInline.removeChildInternal(*renderer, NotifyChildren);
&gt;     cloneInline-&gt;addChildIgnoringContinuation(renderer);
&gt;     renderer-&gt;setNeedsLayoutAndPrefWidthsRecalc();
&gt; }
I don&apos;t see any reason why removing from the end is better. -and since we are reparenting the renderers, it would revers the sibling order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140274</commentid>
    <comment_count>6</comment_count>
      <attachid>265023</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-11-08 14:36:16 -0800</bug_when>
    <thetext>Created attachment 265023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140275</commentid>
    <comment_count>7</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-11-08 14:37:30 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 264840 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264840&amp;action=review
&gt; 
&gt; I can’t review, Hyatt probably needs to, but I have spelling and other
&gt; similar comments.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:433
&gt; &gt; +            RenderElement* anonymousParent = rendererToMove-&gt;parent();
&gt; 
&gt; I would consider auto* here instead of naming the type, since we’d like to
&gt; use as specific a type as possible.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:444
&gt; &gt; +                // Reparent the whole anon wrapper tree.
&gt; 
&gt; I don’t think “anon” is a helpful abbreviation here. Lets spell out the word.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:455
&gt; &gt; +            // FIXME: When the anon wrapper has mutliple children, we end up traversing up to the topmost wrapper
&gt; 
&gt; Typo: &quot;mutliple&quot; instead of &quot;multiple&quot;.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:497
&gt; &gt; +            RenderObject* renderer = currentChild-&gt;nextSibling();
&gt; &gt;              while (renderer) {
&gt; 
&gt; I suggest we write this as a for loop, even if the “advance to next” part is
&gt; empty because it’s done inside the end of the loop rather than at the end:
&gt; 
&gt;     for (auto* renderer = currentChild-&gt;nextSibling(); renderer; ) {
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:498
&gt; &gt;                  RenderObject* tmp = renderer;
&gt; 
&gt; The name “tmp” here is really lame.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:522
&gt; &gt; +    RenderObject* renderer = currentChild-&gt;nextSibling();
&gt; &gt;      while (renderer) {
&gt; &gt;          RenderObject* tmp = renderer;
&gt; 
&gt; Same comment, for loop is better, tmp is lame.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:598
&gt; &gt; +    RenderBoxModelObject* beforeChildAnchestor = nullptr;
&gt; 
&gt; Typo here: &quot;anchestor&quot; instead of &quot;ancestor&quot;.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:599
&gt; &gt; +    // In case of anon wrappers, the parent of the beforeChild is mostly irrelevant. What we need is
&gt; 
&gt; More &quot;anon&quot;.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140377</commentid>
    <comment_count>8</comment_count>
      <attachid>265023</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-09 08:49:59 -0800</bug_when>
    <thetext>Comment on attachment 265023
Patch

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

&gt; Source/WebCore/rendering/RenderInline.cpp:429
&gt; +    RenderObject* rendererToMove = beforeChild;
&gt; +    RenderObject* nextSibling = nullptr;
&gt; +    while (rendererToMove) {

For loop would work well here.

    for (RenderObject* rendererToMove = beforeChild; rendererToMove; rendererToMove = nextSibling) {

But note that this works only because the nextSibling local variable is outside the loop, and I don’t understand why it is. It does not seem to be used after the loop. Instead we could declare it inside the loop and then leave off the third clause of the for. That would be just like the other loops.

&gt; Source/WebCore/rendering/RenderInline.cpp:623
&gt; -    bool bcpInline = beforeChildParent-&gt;isInline();
&gt; +    bool bcpInline = beforeChildAncestor-&gt;isInline();

The name of this local variable, &quot;bcpInline&quot; was short for “before child parent is inline”. But it’s now “before child ancestor”, this relatively poor name is even worse. How about just writing it all the way out:

    bool beforeChildAncestorIsInline = beforeChildAncestor-&gt;isInline();

Or maybe not even using local variable at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140920</commentid>
    <comment_count>9</comment_count>
      <attachid>265224</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-11-10 13:35:24 -0800</bug_when>
    <thetext>Created attachment 265224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140921</commentid>
    <comment_count>10</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-11-10 13:35:56 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 265023 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265023&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:429
&gt; &gt; +    RenderObject* rendererToMove = beforeChild;
&gt; &gt; +    RenderObject* nextSibling = nullptr;
&gt; &gt; +    while (rendererToMove) {
&gt; 
&gt; For loop would work well here.
&gt; 
&gt;     for (RenderObject* rendererToMove = beforeChild; rendererToMove;
&gt; rendererToMove = nextSibling) {
&gt; 
&gt; But note that this works only because the nextSibling local variable is
&gt; outside the loop, and I don’t understand why it is. It does not seem to be
&gt; used after the loop. Instead we could declare it inside the loop and then
&gt; leave off the third clause of the for. That would be just like the other
&gt; loops.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:623
&gt; &gt; -    bool bcpInline = beforeChildParent-&gt;isInline();
&gt; &gt; +    bool bcpInline = beforeChildAncestor-&gt;isInline();
&gt; 
&gt; The name of this local variable, &quot;bcpInline&quot; was short for “before child
&gt; parent is inline”. But it’s now “before child ancestor”, this relatively
&gt; poor name is even worse. How about just writing it all the way out:
&gt; 
&gt;     bool beforeChildAncestorIsInline = beforeChildAncestor-&gt;isInline();
&gt; 
&gt; Or maybe not even using local variable at all?
Done. Thanks for the reviews!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140969</commentid>
    <comment_count>11</comment_count>
      <attachid>265224</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 15:16:18 -0800</bug_when>
    <thetext>Comment on attachment 265224
Patch

Rejecting attachment 265224 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 265224, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

/Volumes/Data/EWS/WebKit/LayoutTests/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://webkit-queues.webkit.org/results/411951</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140970</commentid>
    <comment_count>12</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-11-10 15:18:51 -0800</bug_when>
    <thetext>Committed r192275: &lt;http://trac.webkit.org/changeset/192275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141116</commentid>
    <comment_count>13</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-11-11 08:57:50 -0800</bug_when>
    <thetext>rdar://problem/23251240</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>264821</attachid>
            <date>2015-11-04 15:33:00 -0800</date>
            <delta_ts>2015-11-04 15:33:00 -0800</delta_ts>
            <desc>test reduction</desc>
            <filename>conti-with-anon.html</filename>
            <type>text/html</type>
            <size>344</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">PHN0eWxlPgoJLmNlbGwgewoJCWRpc3BsYXk6IHRhYmxlLWNlbGw7Cgl9Cjwvc3R5bGU+CjxzcGFu
Pls8ZGl2IGNsYXNzPWNlbGw+MTwvZGl2PjxkaXYgaWQ9Zm9vIGNsYXNzPWNlbGw+MjwvZGl2Pjxk
aXYgaWQ9Zm9vMSBjbGFzcz1jZWxsPjM8L2Rpdj48ZGl2IGNsYXNzPWNlbGw+NDwvZGl2Pl08L3Nw
YW4+CjxzY3JpcHQ+CnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cglkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiZm9vIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7IAoJZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImZvbzEiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsgCgl9LCAxMDApOwo8L3Njcmlw
dD4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>264822</attachid>
            <date>2015-11-04 15:34:15 -0800</date>
            <delta_ts>2015-11-04 15:34:15 -0800</delta_ts>
            <desc>testing remove permutation</desc>
            <filename>anon-table-continuation.html</filename>
            <type>text/html</type>
            <size>4098</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">PHN0eWxlPgouY2VsbCB7CiAgZGlzcGxheTogdGFibGUtY2VsbDsKfQo8L3N0eWxlPgo8Ym9keT48
cHJlIGlkPWluZm8+PC9wcmU+CjxkaXYgaWQ9cm9vdD48L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0Pgp2
YXIgcGVybUFyciA9IFtdOwp2YXIgdXNlZENoYXJzID0gW107CnZhciBzdGVwcyA9IFtdOwp2YXIg
bnVtYmVyT2ZSdW5zID0gMDsKdmFyIGN1cnJlbnRSdW5JbmRleCA9IC0xOwp2YXIgY3VycmVudERp
dkluZGV4ID0gMDsKdmFyIG51bWJlck9mRGl2cyA9IDAKdmFyIHRpbWVySWQgPSAtMTsKdmFyIGZh
aWxlZEl0ZXJhdGlvbnMgPSBbXTsKdmFyIG11bHRpcGxpZXIgPSAxMDA7Cgp2YXIgZGVidWdnaW5n
SW5kZXggPSAtMTsKdmFyIG5vcGFzc0RlbGF5ID0gMDsKCmZ1bmN0aW9uIGdlbmVyYXRlRGl2TW92
ZU9yZGVyKGlucHV0KSB7Cgl2YXIgaSwgY2g7CiAgCWZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5n
dGg7IGkrKykgewogICAgCWNoID0gaW5wdXQuc3BsaWNlKGksIDEpWzBdOwogICAgCXVzZWRDaGFy
cy5wdXNoKGNoKTsKICAgIAlpZiAoaW5wdXQubGVuZ3RoID09IDApCiAgICAgIAkJcGVybUFyci5w
dXNoKHVzZWRDaGFycy5zbGljZSgpKTsKICAgIAlnZW5lcmF0ZURpdk1vdmVPcmRlcihpbnB1dCk7
CiAgICAJaW5wdXQuc3BsaWNlKGksIDAsIGNoKTsKICAgIAl1c2VkQ2hhcnMucG9wKCk7CiAgCX0K
ICByZXR1cm4gcGVybUFycjsKfQoKZnVuY3Rpb24gZ2V0Q3VycmVudERpdkJ5T3JkZXIob3JkZXIp
IHsKCXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtdWx0aXBsaWVyICogY3VycmVudFJ1
bkluZGV4ICsgb3JkZXIpOyAKfQoKZnVuY3Rpb24gY3JlYXRlSW5saW5lQ29udGFpbmVyKG5lc3Rl
ZERpdnMpIHsKCXZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKTsKCXZh
ciBpbmxpbmVDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Cglpbmxp
bmVDb250YWluZXIuaWQgPSAiY29udGFpbmVyIiArIGN1cnJlbnRSdW5JbmRleDsKCWlubGluZUNv
bnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiWygiICsgY3VycmVu
dFJ1bkluZGV4ICsgIilzdGFydC0+IikpOwoJZm9yIChpID0gMDsgaSA8IG51bWJlck9mRGl2czsg
KytpKSB7CgkJdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
CQlkaXZFbGVtZW50LmNsYXNzTmFtZSA9ICdjZWxsJzsKCQlkaXZFbGVtZW50LmlkID0gbXVsdGlw
bGllciAqIGN1cnJlbnRSdW5JbmRleCArIGk7CgkJZGl2RWxlbWVudC5pbm5lckhUTUwgPSBpOwoJ
CWlubGluZUNvbnRhaW5lci5hcHBlbmRDaGlsZChkaXZFbGVtZW50KTsKCX0KCWlubGluZUNvbnRh
aW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPC1lbmRdIikpOwoJcm9v
dC5hcHBlbmRDaGlsZChpbmxpbmVDb250YWluZXIpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZURpdnNQ
b3NpdGlvbigpCnsKCXZhciBmaXJzdERpdiA9IGdldEN1cnJlbnREaXZCeU9yZGVyKDApOwoJdmFy
IHByZXZPZmZzZXRMZWZ0ID0gZmlyc3REaXYub2Zmc2V0TGVmdDsKCXZhciBwcmV2T2Zmc2V0VG9w
ID0gZmlyc3REaXYub2Zmc2V0VG9wOwoJZm9yIChpID0gMTsgaSA8IG51bWJlck9mRGl2czsgKytp
KSB7CgkJdmFyIGN1cnJlbnREaXYgPSBnZXRDdXJyZW50RGl2QnlPcmRlcihpKTsKCQl2YXIgcGFz
cyA9IChwcmV2T2Zmc2V0TGVmdCA8IGN1cnJlbnREaXYub2Zmc2V0TGVmdCAmJiBwcmV2T2Zmc2V0
VG9wID09IGN1cnJlbnREaXYub2Zmc2V0VG9wKSAKCQkJfHwgKHByZXZPZmZzZXRMZWZ0ID09IGN1
cnJlbnREaXYub2Zmc2V0TGVmdCAmJiBwcmV2T2Zmc2V0VG9wIDwgY3VycmVudERpdi5vZmZzZXRU
b3ApCgkJCXx8IChwcmV2T2Zmc2V0TGVmdCA+IGN1cnJlbnREaXYub2Zmc2V0TGVmdCAmJiBwcmV2
T2Zmc2V0VG9wIDwgY3VycmVudERpdi5vZmZzZXRUb3ApOwoJCWNvbnNvbGUubG9nKGkgLSAxICsg
IigiICsgcHJldk9mZnNldExlZnQgKyAiICIgKyBwcmV2T2Zmc2V0VG9wICsgIikgIiArIGkgKyAi
ICgiICsgY3VycmVudERpdi5vZmZzZXRMZWZ0ICsgIiAiICsgY3VycmVudERpdi5vZmZzZXRUb3Ag
KyAiKSIpOwoJCWlmICghcGFzcykKCQkJcmV0dXJuIGZhbHNlOwoJCXByZXZPZmZzZXRMZWZ0ID0g
Y3VycmVudERpdi5vZmZzZXRMZWZ0OwoJCXByZXZPZmZzZXRUb3AgPSBjdXJyZW50RGl2Lm9mZnNl
dFRvcDsKCX0KCXJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiB0b0Jsb2NrQW5kVmFsaWRhdGUoaWQp
CnsKCWNvbnNvbGUubG9nKCJtb3ZpbmcgZGl2IGlkOiAiICsgaWQpOwoJZ2V0Q3VycmVudERpdkJ5
T3JkZXIoaWQpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwoJcmV0dXJuIHZhbGlkYXRlRGl2c1Bv
c2l0aW9uKCk7Cn0KCmZ1bmN0aW9uIGNlbGxUb0Jsb2NrKCkKewoJY29uc29sZS5sb2coInN0YXJ0
aW5nICIgKyAoY3VycmVudFJ1bkluZGV4ICsgMSkgKyAidGggaXRlcmF0aW9uIik7Cgl0aW1lcklk
ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CgkJdmFyIHBhc3NlZCA9IHRvQmxvY2tBbmRWYWxp
ZGF0ZShzdGVwc1tjdXJyZW50UnVuSW5kZXhdW2N1cnJlbnREaXZJbmRleF0pOwoJCWlmICghcGFz
c2VkKSB7CgkJCWZhaWxlZEl0ZXJhdGlvbnMucHVzaChjdXJyZW50UnVuSW5kZXgpOwoJCQljb25z
b2xlLmxvZygiZmFpbGVkIGF0OiAiICsgY3VycmVudFJ1bkluZGV4KTsKCQl9CgkJdmFyIGVuZE9m
UnVuID0gY3VycmVudERpdkluZGV4ID09IG51bWJlck9mRGl2cyAtIDE7CgkJaWYgKCFwYXNzZWQg
fHwgZW5kT2ZSdW4pIHsKCQkJaWYgKHBhc3NlZCkgewoJCQkJdmFyIGlubGluZUNvbnRhaW5lciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiICsgY3VycmVudFJ1bkluZGV4KTsK
CQkJCWlubGluZUNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGlubGluZUNvbnRhaW5l
cik7CgkJCX0KCQkJY3VycmVudERpdkluZGV4ID0gMDsKCQkJY2xlYXJJbnRlcnZhbCh0aW1lcklk
KTsKCQkJc2V0VGltZW91dChydW5OZXh0SXRlcmF0aW9uLCBwYXNzZWQgPyAwIDogbm9wYXNzRGVs
YXkpOwoJCQlyZXR1cm47CgkJfQoJCSsrY3VycmVudERpdkluZGV4OwoJfSwgZGVidWdnaW5nSW5k
ZXggPj0gMCA/IDQwMDA6IDApOwp9CgpmdW5jdGlvbiBydW5OZXh0SXRlcmF0aW9uKCkgewoJZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImluZm8iKS5pbm5lckhUTUwgPSAiSXRlcmF0aW9uOiAiICsg
KGN1cnJlbnRSdW5JbmRleCArIDEpICsgIiBvdXQgb2YgIiArIG51bWJlck9mUnVucyArICJbZmFp
bGVkOiAiICsgZmFpbGVkSXRlcmF0aW9ucy5sZW5ndGggKyAiXSI7CiAJaWYgKCsrY3VycmVudFJ1
bkluZGV4IDwgbnVtYmVyT2ZSdW5zKSB7IAoJCWNyZWF0ZUlubGluZUNvbnRhaW5lcigpOwoJCWNl
bGxUb0Jsb2NrKCk7Cgl9IGVsc2UgewoJCWNvbnNvbGUubG9nKGZhaWxlZEl0ZXJhdGlvbnMpOwoJ
CXZhciByZXN1bHQgPSAiPGJyPiIgKyAiRmFpbGVkIHRlc3RzOiBbIjsKCQlmb3IgKGkgPSAwOyBp
IDwgZmFpbGVkSXRlcmF0aW9ucy5sZW5ndGg7ICsraSkKCQkJcmVzdWx0ICs9IGZhaWxlZEl0ZXJh
dGlvbnNbaV0gKyAiICI7CgkJcmVzdWx0ICs9ICJdIjsKCQljb25zb2xlLmxvZyhyZXN1bHQpOwoJ
CWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbmZvIikuaW5uZXJIVE1MICs9IHJlc3VsdDsKCX0K
fQoKLy8gQ2hhbmdlIHRoZSBuZXh0IDIgbGluZXMgdG8gaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9m
IGRpdnMuCm51bWJlck9mRGl2cyA9IDU7CnN0ZXBzID0gZ2VuZXJhdGVEaXZNb3ZlT3JkZXIoWzAs
IDEsIDIsIDMsIDRdKTsKLy8vLy8KCm51bWJlck9mUnVucyA9IHN0ZXBzLmxlbmd0aDsKY29uc29s
ZS5sb2coInBlcm11dGF0aW9uIG51bWJlcjogIiArIG51bWJlck9mUnVucyArICJcbiBudW1iZXIg
b2YgZGl2czogIiArIG51bWJlck9mRGl2cyk7CgppZiAoZGVidWdnaW5nSW5kZXggPj0gMCkgewoJ
bnVtYmVyT2ZSdW5zID0gZGVidWdnaW5nSW5kZXggKyAxOwoJY3VycmVudFJ1bkluZGV4ID0gZGVi
dWdnaW5nSW5kZXggLSAxOwp9CgpydW5OZXh0SXRlcmF0aW9uKCk7Cjwvc2NyaXB0PgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264840</attachid>
            <date>2015-11-04 20:19:05 -0800</date>
            <delta_ts>2015-11-08 14:36:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150908-20151104201807.patch</filename>
            <type>text/plain</type>
            <size>14496</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxODg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjgwMmY5YTgzYzFmMmQ4
Y2E4MTBiMWE1ZjM1ODBjZWNiNDA0NDMwZS4uMjc1MGFhNmFiY2Q0YTg4MGRhOWJkZDRlZDZkMjQy
ZDYzNGIwZWY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE1LTExLTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29udGludWF0aW9ucyB3aXRo
IGFub255bW91cyB3cmFwcGVycyBpbnNpZGUgbWlzcGxhY2VzIGNoaWxkIHJlbmRlcmVycy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkwOAorCisg
ICAgICAgIFdoZW4gYSBjaGlsZCBpcyBhcHBlbmRlZCB0byBhbiBpbmxpbmUgY29udGFpbmVyIGFu
ZCB0aGUgYmVmb3JlQ2hpbGQgaXMgbm90IGEgZGlyZWN0IGNoaWxkLCBidXQgCisgICAgICAgIGl0
IGlzIGluc2lkZSBhIGdlbmVyYXRlZCBzdWJ0cmVlLCB3ZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSB0
aGUgaW5saW5lIHNwbGl0IHRvIGZvcm0gY29udGludWF0aW9uLgorCisgICAgICAgIFJlbmRlcklu
bGluZTo6c3BsaXRJbmxpbmVzKCkgYXNzdW1lcyB0aGF0IGJlZm9yZUNoaWxkIGlzIGFsd2F5cyBh
IGRpcmVjdCBjaGlsZCBvZiB0aGUgY3VycmVudAorICAgICAgICBpbmxpbmUgY29udGFpbmVyLiBI
b3dldmVyIHdoZW4gYmVmb3JlQ2hpbGQgdHlwZSByZXF1aXJlcyB3cmFwcGVyIGNvbnRlbnQgKHN1
Y2ggYXMgdGFibGUgY2VsbHMpLCB0aGUgRE9NIGFuZCB0aGUKKyAgICAgICAgcmVuZGVyIHRyZWUg
Z2V0IG91dCBvZiBzeW5jLiBJbiBzdWNoIGNhc2VzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJv
dGggdGhlIGJlZm9yZUNoaWxkIGFuZCBpdHMgc2libGluZ3MgZW5kIHVwCisgICAgICAgIGluIHRo
ZSBjb3JyZWN0IGdlbmVyYXRlZCBibG9jay4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2lubGluZS9jb250aW51YXRpb24td2l0aC1h
bm9uLXdyYXBwZXJzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzcGxpdElubGluZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRDaGlsZFRvQ29udGludWF0aW9uKToKKwogMjAx
NS0xMS0wMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAg
ICAgICAgIFJlbmFtZSBKU0RPTVdyYXBwZXIuaW1wbCB0byBKU0RPTVdyYXBwZXIud3JhcHBlZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCAwNTE2NmUzNmM1
ZGZjOThjMDczMDEwNmZmZjNjZmMyNWIyNTljN2JjLi5iOGNhNzhmNDc0NWQ1N2E0MWE3OGUxNzY0
MTUxZjMyZTg4MDg3OTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcApAQCAtNDEyLDggKzQxMiw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMo
UmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssCiB7CiAgICAgLy8g
Q3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBpbmxpbmUuCiAgICAgUmVuZGVyUHRyPFJlbmRlcklubGlu
ZT4gY2xvbmVJbmxpbmUgPSBjbG9uZSgpOwotICAgIGNsb25lSW5saW5lLT5zZXRDb250aW51YXRp
b24ob2xkQ29udCk7Ci0KICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgLy8gSWYgd2Un
cmUgc3BsaXR0aW5nIHRoZSBpbmxpbmUgY29udGFpbmluZyB0aGUgZnVsbHNjcmVlbmVkIGVsZW1l
bnQsCiAgICAgLy8gfGJlZm9yZUNoaWxkfCBtYXkgYmUgdGhlIHJlbmRlcmVyIGZvciB0aGUgZnVs
bHNjcmVlbmVkIGVsZW1lbnQuIEhvd2V2ZXIsCkBAIC00MjQsMTggKzQyMiw0NSBAQCB2b2lkIFJl
bmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJs
b2NrKiB0b0Jsb2NrLAogICAgIGlmIChmdWxsU2NyZWVuRWxlbWVudCAmJiBiZWZvcmVDaGlsZCAm
JiBiZWZvcmVDaGlsZC0+bm9kZSgpID09IGZ1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICBiZWZv
cmVDaGlsZCA9IGRvY3VtZW50KCkuZnVsbFNjcmVlblJlbmRlcmVyKCk7CiAjZW5kaWYKLQogICAg
IC8vIE5vdyB0YWtlIGFsbCBvZiB0aGUgY2hpbGRyZW4gZnJvbSBiZWZvcmVDaGlsZCB0byB0aGUg
ZW5kIGFuZCByZW1vdmUKICAgICAvLyB0aGVtIGZyb20gfHRoaXN8IGFuZCBwbGFjZSB0aGVtIGlu
IHRoZSBjbG9uZS4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gYmVmb3JlQ2hpbGQ7Ci0g
ICAgd2hpbGUgKHJlbmRlcmVyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogdG1wID0gcmVuZGVy
ZXI7Ci0gICAgICAgIHJlbmRlcmVyID0gdG1wLT5uZXh0U2libGluZygpOwotICAgICAgICByZW1v
dmVDaGlsZEludGVybmFsKCp0bXAsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAgY2xvbmVJbmxp
bmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24odG1wKTsKLSAgICAgICAgdG1wLT5zZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyVG9Nb3ZlID0gYmVmb3JlQ2hpbGQ7CisgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9
IG51bGxwdHI7CisgICAgd2hpbGUgKHJlbmRlcmVyVG9Nb3ZlKSB7CisgICAgICAgIG5leHRTaWJs
aW5nID0gcmVuZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIC8vIFdoZW4gYW5v
bnltb3VzIHdyYXBwZXIgaXMgcHJlc2VudCwgd2UgbWlnaHQgbmVlZCB0byBtb3ZlIHRoZSB3aG9s
ZSBzdWJ0cmVlIGluc3RlYWQuCisgICAgICAgIGlmIChyZW5kZXJlclRvTW92ZS0+cGFyZW50KCkg
IT0gdGhpcykgeworICAgICAgICAgICAgUmVuZGVyRWxlbWVudCogYW5vbnltb3VzUGFyZW50ID0g
cmVuZGVyZXJUb01vdmUtPnBhcmVudCgpOworICAgICAgICAgICAgd2hpbGUgKGFub255bW91c1Bh
cmVudCAmJiBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgpICE9IHRoaXMpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoYW5vbnltb3VzUGFyZW50LT5pc0Fub255bW91cygpKTsKKyAgICAgICAgICAg
ICAgICBhbm9ueW1vdXNQYXJlbnQgPSBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFhbm9ueW1vdXNQYXJlbnQpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIGJlZm9yZUNoaWxkIGlzIHRoZSBmaXJzdCBjaGls
ZCBpbiB0aGUgc3VidHJlZSwgd2UgY291bGQganVzdCBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlLgor
ICAgICAgICAgICAgaWYgKCFyZW5kZXJlclRvTW92ZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBSZXBhcmVudCB0aGUgd2hvbGUgYW5vbiB3cmFwcGVyIHRyZWUuCisg
ICAgICAgICAgICAgICAgcmVuZGVyZXJUb01vdmUgPSBhbm9ueW1vdXNQYXJlbnQ7CisgICAgICAg
ICAgICAgICAgLy8gU2tpcCB0byB0aGUgbmV4dCBzaWJsaW5nIHRoYXQgaXMgbm90IGluIHRoaXMg
c3VidHJlZS4KKyAgICAgICAgICAgICAgICBuZXh0U2libGluZyA9IGFub255bW91c1BhcmVudC0+
bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyVG9Nb3ZlLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbGFzdCByZW5k
ZXJlciBpbiB0aGUgc3VidHJlZS4gV2UgbmVlZCB0byBqdW1wIG91dCBvZiB0aGUgd3JhcHBlciBz
dWJ0cmVlLCBzbyB0aGF0CisgICAgICAgICAgICAgICAgLy8gdGhlIHNpYmxpbmdzIGFyZSBnZXR0
aW5nIHJlcGFyZW50ZWQgdG9vLgorICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gYW5vbnlt
b3VzUGFyZW50LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlIGp1c3QgbW92ZSB0aGUgcmVuZGVyZXIgdG8gdGhlIGlubGluZSBjbG9uZS4gU2hv
dWxkIHRoZSByZW5kZXJlciBuZWVkIGFuIGFub24KKyAgICAgICAgICAgIC8vIHdyYXBwZXIsIHRo
ZSBhZGRDaGlsZCgpIHdpbGwgZ2VuZXJhdGUgb25lIGZvciBpdC4KKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaGVuIHRoZSBhbm9uIHdyYXBwZXIgaGFzIG11dGxpcGxlIGNoaWxkcmVuLCB3ZSBlbmQg
dXAgdHJhdmVyc2luZyB1cCB0byB0aGUgdG9wbW9zdCB3cmFwcGVyCisgICAgICAgICAgICAvLyBl
dmVyeSB0aW1lLCB3aGljaCBpcyBhIGJpdCB3YXN0ZWZ1bC4KKyAgICAgICAgfQorICAgICAgICBy
ZW5kZXJlclRvTW92ZS0+cGFyZW50KCktPnJlbW92ZUNoaWxkSW50ZXJuYWwoKnJlbmRlcmVyVG9N
b3ZlLCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKHJlbmRlcmVyVG9Nb3ZlKTsKKyAgICAgICAgcmVuZGVyZXJUb01vdmUt
PnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAgICAgICByZW5kZXJlclRv
TW92ZSA9IG5leHRTaWJsaW5nOwogICAgIH0KLQorICAgIGNsb25lSW5saW5lLT5zZXRDb250aW51
YXRpb24ob2xkQ29udCk7CiAgICAgLy8gSG9vayB8Y2xvbmV8IHVwIGFzIHRoZSBjb250aW51YXRp
b24gb2YgdGhlIG1pZGRsZSBibG9jay4KICAgICBtaWRkbGVCbG9jay0+c2V0Q29udGludWF0aW9u
KGNsb25lSW5saW5lLmdldCgpKTsKIApAQCAtNDY4LDcgKzQ5Myw3IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRv
QmxvY2ssCiAKICAgICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHRha2UgYWxsIG9mIHRoZSBj
aGlsZHJlbiBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBjaGlsZAogICAgICAgICAgICAgLy8gKmFm
dGVyKiBjdXJyZW50Q2hpbGQgYW5kIGFwcGVuZCB0aGVtIGFsbCB0byB0aGUgY2xvbmUuCi0gICAg
ICAgICAgICByZW5kZXJlciA9IGN1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7
CiAgICAgICAgICAgICB3aGlsZSAocmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJP
YmplY3QqIHRtcCA9IHJlbmRlcmVyOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gdG1wLT5u
ZXh0U2libGluZygpOwpAQCAtNDkyLDcgKzUxNyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxp
dElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssCiAK
ICAgICAvLyBOb3cgdGFrZSBhbGwgdGhlIGNoaWxkcmVuIGFmdGVyIGN1cnJlbnRDaGlsZCBhbmQg
cmVtb3ZlIHRoZW0gZnJvbSB0aGUgZnJvbUJsb2NrCiAgICAgLy8gYW5kIHB1dCB0aGVtIGluIHRo
ZSB0b0Jsb2NrLgotICAgIHJlbmRlcmVyID0gY3VycmVudENoaWxkLT5uZXh0U2libGluZygpOwor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7
CiAgICAgd2hpbGUgKHJlbmRlcmVyKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogdG1wID0gcmVu
ZGVyZXI7CiAgICAgICAgIHJlbmRlcmVyID0gdG1wLT5uZXh0U2libGluZygpOwpAQCAtNTY5LDM4
ICs1OTQsNDYgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkLCBSZW5kZXJCbG9jayogbmV3QmxvY2tCb3gKIHZvaWQgUmVuZGVySW5saW5lOjph
ZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZsb3cgPSBjb250
aW51YXRpb25CZWZvcmUoYmVmb3JlQ2hpbGQpOwotICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwg
aXM8UmVuZGVyQmxvY2s+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkpIHx8IGlzPFJlbmRlcklubGlu
ZT4oKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSkpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBi
ZWZvcmVDaGlsZFBhcmVudCA9IG51bGxwdHI7Ci0gICAgaWYgKGJlZm9yZUNoaWxkKQotICAgICAg
ICBiZWZvcmVDaGlsZFBhcmVudCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihiZWZv
cmVDaGlsZC0+cGFyZW50KCkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGNvbnRpbnVhdGlvbiA9IG5leHRDb250aW51YXRpb24oZmxvdykpCi0gICAgICAg
ICAgICBiZWZvcmVDaGlsZFBhcmVudCA9IGNvbnRpbnVhdGlvbjsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBmbG93OworICAgIC8vIEl0IG1heSBvciBtYXkg
bm90IGJlIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBiZWZvcmVDaGlsZC4KKyAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogYmVmb3JlQ2hpbGRBbmNoZXN0b3IgPSBudWxscHRyOworICAgIC8vIElu
IGNhc2Ugb2YgYW5vbiB3cmFwcGVycywgdGhlIHBhcmVudCBvZiB0aGUgYmVmb3JlQ2hpbGQgaXMg
bW9zdGx5IGlycmVsZXZhbnQuIFdoYXQgd2UgbmVlZCBpcworICAgIC8vIHRoZSB0b3Btb3N0IHdy
YXBwZXIuCisgICAgaWYgKGJlZm9yZUNoaWxkICYmICFpczxSZW5kZXJCbG9jaz4oYmVmb3JlQ2hp
bGQtPnBhcmVudCgpKSAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCktPmlzQW5vbnltb3VzKCkpIHsK
KyAgICAgICAgUmVuZGVyRWxlbWVudCogYW5vbnltb3VzUGFyZW50ID0gYmVmb3JlQ2hpbGQtPnBh
cmVudCgpOworICAgICAgICB3aGlsZSAoYW5vbnltb3VzUGFyZW50ICYmIGFub255bW91c1BhcmVu
dC0+cGFyZW50KCkgJiYgYW5vbnltb3VzUGFyZW50LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSkK
KyAgICAgICAgICAgIGFub255bW91c1BhcmVudCA9IGFub255bW91c1BhcmVudC0+cGFyZW50KCk7
CisgICAgICAgIEFTU0VSVChhbm9ueW1vdXNQYXJlbnQgJiYgYW5vbnltb3VzUGFyZW50LT5wYXJl
bnQoKSk7CisgICAgICAgIGJlZm9yZUNoaWxkQW5jaGVzdG9yID0gZG93bmNhc3Q8UmVuZGVyQm94
TW9kZWxPYmplY3Q+KGFub255bW91c1BhcmVudC0+cGFyZW50KCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyQmxvY2s+KCpiZWZvcmVDaGls
ZC0+cGFyZW50KCkpIHx8IGlzPFJlbmRlcklubGluZT4oKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSkp
OworICAgICAgICBpZiAoYmVmb3JlQ2hpbGQpCisgICAgICAgICAgICBiZWZvcmVDaGlsZEFuY2hl
c3RvciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihiZWZvcmVDaGlsZC0+cGFyZW50
KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVj
dCogY29udGludWF0aW9uID0gbmV4dENvbnRpbnVhdGlvbihmbG93KSkKKyAgICAgICAgICAgICAg
ICBiZWZvcmVDaGlsZEFuY2hlc3RvciA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZEFuY2hlc3RvciA9IGZsb3c7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAobmV3Q2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZv
cmVDaGlsZEFuY2hlc3Rvci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwg
YmVmb3JlQ2hpbGQpOwogCiAgICAgLy8gQSBjb250aW51YXRpb24gYWx3YXlzIGNvbnNpc3RzIG9m
IHR3byBwb3RlbnRpYWwgY2FuZGlkYXRlczogYW4gaW5saW5lIG9yIGFuIGFub255bW91cwogICAg
IC8vIGJsb2NrIGJveCBob2xkaW5nIGJsb2NrIGNoaWxkcmVuLgogICAgIGJvb2wgY2hpbGRJbmxp
bmUgPSBuZXdDaGlsZElzSW5saW5lKCpuZXdDaGlsZCwgKnRoaXMpOwotICAgIGJvb2wgYmNwSW5s
aW5lID0gYmVmb3JlQ2hpbGRQYXJlbnQtPmlzSW5saW5lKCk7CisgICAgYm9vbCBiY3BJbmxpbmUg
PSBiZWZvcmVDaGlsZEFuY2hlc3Rvci0+aXNJbmxpbmUoKTsKICAgICBib29sIGZsb3dJbmxpbmUg
PSBmbG93LT5pc0lubGluZSgpOwogCi0gICAgaWYgKGZsb3cgPT0gYmVmb3JlQ2hpbGRQYXJlbnQp
CisgICAgaWYgKGZsb3cgPT0gYmVmb3JlQ2hpbGRBbmNoZXN0b3IpCiAgICAgICAgIHJldHVybiBm
bG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAgaWYg
d2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQotICAgICAgICAv
LyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCi0gICAg
ICAgIGlmIChjaGlsZElubGluZSA9PSBiY3BJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gYmVm
b3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkKTsKLSAgICAgICAgZWxzZSBpZiAoZmxvd0lubGluZSA9PSBjaGlsZElubGluZSkK
LSAgICAgICAgICAgIHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5l
d0NoaWxkKTsgLy8gSnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgfQorICAgIC8vIFRoZSBnb2FsIGhl
cmUgaXMgdG8gbWF0Y2ggdXAgaWYgd2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQg
Y3JlYXRlIHRoZQorICAgIC8vIG1pbmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3Ig
dGhlIGlubGluZS4KKyAgICBpZiAoY2hpbGRJbmxpbmUgPT0gYmNwSW5saW5lKQorICAgICAgICBy
ZXR1cm4gYmVmb3JlQ2hpbGRBbmNoZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24o
bmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBpZiAoZmxvd0lubGluZSA9PSBjaGlsZElubGlu
ZSkKKyAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3
Q2hpbGQpOyAvLyBKdXN0IHRyZWF0IGxpa2UgYW4gYXBwZW5kLgorICAgIHJldHVybiBiZWZvcmVD
aGlsZEFuY2hlc3Rvci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVm
b3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhMjY3ZGI2NjE0
ZGRjYjljMDY0MjI4YWZlZDEyN2Y2NTM1N2ZmZTE3Li5mOGZkMDJhYzgwNTI4Y2Y2NmU3ZDczMmE0
MGRjY2IzMzhiNmYwNDA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTEtMDQgIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBDb250aW51YXRpb25zIHdpdGgg
YW5vbnltb3VzIHdyYXBwZXJzIGluc2lkZSBtaXNwbGFjZXMgY2hpbGQgcmVuZGVyZXJzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTA4CisKKyAg
ICAgICAgV2hlbiBhIGNoaWxkIGlzIGFwcGVuZGVkIHRvIGFuIGlubGluZSBjb250YWluZXIgYW5k
IHRoZSBiZWZvcmVDaGlsZCBpcyBub3QgYSBkaXJlY3QgY2hpbGQsIGJ1dCAKKyAgICAgICAgaXQg
aXMgaW5zaWRlIGEgZ2VuZXJhdGVkIHN1YnRyZWUsIHdlIG5lZWQgdG8gc3BlY2lhbCBjYXNlIHRo
ZSBpbmxpbmUgc3BsaXQgdG8gZm9ybSBjb250aW51YXRpb24uCisKKyAgICAgICAgUmVuZGVySW5s
aW5lOjpzcGxpdElubGluZXMoKSBhc3N1bWVzIHRoYXQgYmVmb3JlQ2hpbGQgaXMgYWx3YXlzIGEg
ZGlyZWN0IGNoaWxkIG9mIHRoZSBjdXJyZW50CisgICAgICAgIGlubGluZSBjb250YWluZXIuIEhv
d2V2ZXIgd2hlbiBiZWZvcmVDaGlsZCB0eXBlIHJlcXVpcmVzIHdyYXBwZXIgY29udGVudCAoc3Vj
aCBhcyB0YWJsZSBjZWxscyksIHRoZSBET00gYW5kIHRoZQorICAgICAgICByZW5kZXIgdHJlZSBn
ZXQgb3V0IG9mIHN5bmMuIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYm90
aCB0aGUgYmVmb3JlQ2hpbGQgYW5kIGl0cyBzaWJsaW5ncyBlbmQgdXAKKyAgICAgICAgaW4gdGhl
IGNvcnJlY3QgZ2VuZXJhdGVkIGJsb2NrLgorCisgICAgICAgICogZmFzdC9pbmxpbmUvY29udGlu
dWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvaW5saW5lL2NvbnRpbnVhdGlvbi13aXRoLWFub24td3JhcHBlcnMuaHRtbDogQWRkZWQu
CisKIDIwMTUtMTAtMjkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gbWluLWNvbnRlbnQgcm93IGRvZXMgbm90IGFs
d2F5cyBzaHJpbmsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVh
dGlvbi13aXRoLWFub24td3JhcHBlcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9p
bmxpbmUvY29udGludWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjA5M2Q2ODI5Njk0MTM3ZTZmOTg4ZTljYmUyZDY3YmVmMjViZDdhNwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVhdGlvbi13aXRoLWFub24t
d3JhcHBlcnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorVGVzdCBydW46IDcyMAorQWxs
IHBhc3NlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVhdGlv
bi13aXRoLWFub24td3JhcHBlcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRp
bnVhdGlvbi13aXRoLWFub24td3JhcHBlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjdmODcxNTRiODkx
MjYwZGVhZTA4YmRmMzU1MDRiYmQ2MDA5OTI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9pbmxpbmUvY29udGludWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy5odG1sCkBAIC0w
LDAgKzEsODMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UaGlz
IHRlc3RzIHRoYXQgYW5vbiB0YWJsZSBjb250ZW50IHdvcmtzIHdlbGwgd2l0aCBjb250aW51YXRp
b24uIEl0IGdlbmVyYXRlcyBkaXZzIHdpdGggZGlzcGxheTogdGFibGUtY2VsbCBpbnNpZGUgYSBz
cGFuIGFuZCBtb3ZlcyB0aG9zZSBjZWxscyBvdXQgb2YgdGhlIGdlbmVyYXRlZCB0YWJsZXMgYnkg
c2V0dGluZyBkaXNwbGF5OmJsb2NrIG9uIHRoZW0uIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBubyBt
YXR0ZXIgaG93IHRoZXkgZm9ybSB0aGUgY29udGludWF0aW9uIHRoZWlyIG9yZGVyIHNob3VsZCBh
bHdheXMgYmUgMSAyIDMgNCBldGMuPC90aXRsZT4KKzxzdHlsZT4KKyAgICAuY2VsbCB7CisgICAg
ICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
PgorPC9ib2R5PgorPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKwordmFyIHBlcm1BcnIgPSBbXTsKK3ZhciB1c2VkQ2hhcnMgPSBb
XTsKKworZnVuY3Rpb24gcGVybXV0YXRlRGl2TW92ZU9yZGVyKGlucHV0KSB7CisgICAgdmFyIGNo
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
Y2ggPSBpbnB1dC5zcGxpY2UoaSwgMSlbMF07CisgICAgICAgIHVzZWRDaGFycy5wdXNoKGNoKTsK
KyAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgcGVybUFyci5wdXNo
KHVzZWRDaGFycy5zbGljZSgpKTsKKyAgICAgICAgcGVybXV0YXRlRGl2TW92ZU9yZGVyKGlucHV0
KTsKKyAgICAgICAgaW5wdXQuc3BsaWNlKGksIDAsIGNoKTsKKyAgICAgICAgdXNlZENoYXJzLnBv
cCgpOworICAgIH0KKyAgICByZXR1cm4gcGVybUFycjsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVD
b250ZW50KCkgeworICAgIHZhciBjb250ZW50ID0gIjxzcGFuPlsiOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbnVtYmVyT2ZEaXZzOyArK2kpCisgICAgICAgIGNvbnRlbnQgKz0gIjxkaXYgaWQ9
IiArIGkgKyAiIGNsYXNzPSdjZWxsJz4iICsgaSArICI8L2Rpdj4iOworICAgIGNvbnRlbnQgKz0g
Il08L3NwYW4+IjsKKyAgICByZXR1cm4gY29udGVudDsKK30KKworZnVuY3Rpb24gdmFsaWRhdGVE
aXZzUG9zaXRpb24oKQoreworICAgIHZhciBmaXJzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCIwIik7CisgICAgdmFyIHByZXZPZmZzZXRMZWZ0ID0gZmlyc3REaXYub2Zmc2V0TGVmdDsK
KyAgICB2YXIgcHJldk9mZnNldFRvcCA9IGZpcnN0RGl2Lm9mZnNldFRvcDsKKyAgICBmb3IgKHZh
ciBpID0gMTsgaSA8IG51bWJlck9mRGl2czsgKytpKSB7CisgICAgICAgIHZhciBjdXJyZW50RGl2
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7CisgICAgICAgIHZhciBwYXNzID0gKHByZXZP
ZmZzZXRMZWZ0IDwgY3VycmVudERpdi5vZmZzZXRMZWZ0ICYmIHByZXZPZmZzZXRUb3AgPT0gY3Vy
cmVudERpdi5vZmZzZXRUb3ApIAorICAgICAgICAgICAgfHwgKHByZXZPZmZzZXRMZWZ0ID09IGN1
cnJlbnREaXYub2Zmc2V0TGVmdCAmJiBwcmV2T2Zmc2V0VG9wIDwgY3VycmVudERpdi5vZmZzZXRU
b3ApCisgICAgICAgICAgICB8fCAocHJldk9mZnNldExlZnQgPiBjdXJyZW50RGl2Lm9mZnNldExl
ZnQgJiYgcHJldk9mZnNldFRvcCA8IGN1cnJlbnREaXYub2Zmc2V0VG9wKTsKKyAgICAgICAgaWYg
KCFwYXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBwcmV2T2Zmc2V0TGVm
dCA9IGN1cnJlbnREaXYub2Zmc2V0TGVmdDsKKyAgICAgICAgcHJldk9mZnNldFRvcCA9IGN1cnJl
bnREaXYub2Zmc2V0VG9wOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24g
cnVuVGVzdCh0ZXN0cykgeworICAgIHZhciBmYWlsZWQgPSAiIjsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MID0gZ2VuZXJhdGVDb250ZW50KCk7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVt
YmVyT2ZEaXZzOyArK2opIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRl
c3RzW2ldW2pdKS5jbGFzc0xpc3QudG9nZ2xlKCJjZWxsIik7CisgICAgICAgICAgICBpZiAoIXZh
bGlkYXRlRGl2c1Bvc2l0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQgKz0gIiAiICsg
aTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICB2YXIgcmVzdWx0ID0gIlRlc3QgcnVuOiAiICsgdGVzdHMubGVuZ3RoOworICAgIGlm
IChmYWlsZWQubGVuZ3RoKQorICAgICAgICByZXN1bHQgKz0gICI8YnI+RmFpbGVkIGNhc2VzOiAi
ICsgZmFpbGVkOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ICs9ICI8YnI+QWxsIHBhc3NlZC4i
OworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gcmVzdWx0OworfQorCit2YXIgbnVtYmVy
T2ZEaXZzID0gNjsgLy8gNiEgPSA3MjAgdGVzdHMuCitydW5UZXN0KHBlcm11dGF0ZURpdk1vdmVP
cmRlcihbMCwgMSwgMiwgMywgNCwgNV0pKTsKKzwvc2NyaXB0PgorPC9odG1sPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265023</attachid>
            <date>2015-11-08 14:36:16 -0800</date>
            <delta_ts>2015-11-10 13:35:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150908-20151108143617.patch</filename>
            <type>text/plain</type>
            <size>15399</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTcwODQ4MjU0ZDIzMTM4
NWUwNTYxNzVmOGY2NzM3NzNjOWZlNzdlNi4uNzhlMWYyN2NhYzZhNDg5MWNiMzkyN2I2NjI1MWM0
ZDQyMTE3YmM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE1LTExLTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29udGludWF0aW9ucyB3aXRo
IGFub255bW91cyB3cmFwcGVycyBpbnNpZGUgbWlzcGxhY2VzIGNoaWxkIHJlbmRlcmVycy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkwOAorCisg
ICAgICAgIFdoZW4gYSBjaGlsZCBpcyBhcHBlbmRlZCB0byBhbiBpbmxpbmUgY29udGFpbmVyIGFu
ZCB0aGUgYmVmb3JlQ2hpbGQgaXMgbm90IGEgZGlyZWN0IGNoaWxkLCBidXQgCisgICAgICAgIGl0
IGlzIGluc2lkZSBhIGdlbmVyYXRlZCBzdWJ0cmVlLCB3ZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSB0
aGUgaW5saW5lIHNwbGl0IHRvIGZvcm0gY29udGludWF0aW9uLgorCisgICAgICAgIFJlbmRlcklu
bGluZTo6c3BsaXRJbmxpbmVzKCkgYXNzdW1lcyB0aGF0IGJlZm9yZUNoaWxkIGlzIGFsd2F5cyBh
IGRpcmVjdCBjaGlsZCBvZiB0aGUgY3VycmVudAorICAgICAgICBpbmxpbmUgY29udGFpbmVyLiBI
b3dldmVyIHdoZW4gYmVmb3JlQ2hpbGQgdHlwZSByZXF1aXJlcyB3cmFwcGVyIGNvbnRlbnQgKHN1
Y2ggYXMgdGFibGUgY2VsbHMpLCB0aGUgRE9NIGFuZCB0aGUKKyAgICAgICAgcmVuZGVyIHRyZWUg
Z2V0IG91dCBvZiBzeW5jLiBJbiBzdWNoIGNhc2VzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJv
dGggdGhlIGJlZm9yZUNoaWxkIGFuZCBpdHMgc2libGluZ3MgZW5kIHVwCisgICAgICAgIGluIHRo
ZSBjb3JyZWN0IGdlbmVyYXRlZCBibG9jay4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2lubGluZS9jb250aW51YXRpb24td2l0aC1h
bm9uLXdyYXBwZXJzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzcGxpdElubGluZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRDaGlsZFRvQ29udGludWF0aW9uKToKKwogMjAx
NS0xMS0wNyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNo
IHdoZW4gc3VidHJlZSBsYXlvdXQgaXMgc2V0IG9uIEZyYW1lVmlldyB3aGlsZSBhdXRvIHNpemUg
bW9kZSBpcyBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAppbmRleCAwNTE2NmUzNmM1ZGZjOThjMDczMDEwNmZmZjNjZmMyNWIyNTljN2JjLi4xYmIzYjNl
YTZjNTNjODVjNGUzZmJkODk3ODA3NzNlOTZmZWIyMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtNDEyLDggKzQxMiw2IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRv
QmxvY2ssCiB7CiAgICAgLy8gQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBpbmxpbmUuCiAgICAgUmVu
ZGVyUHRyPFJlbmRlcklubGluZT4gY2xvbmVJbmxpbmUgPSBjbG9uZSgpOwotICAgIGNsb25lSW5s
aW5lLT5zZXRDb250aW51YXRpb24ob2xkQ29udCk7Ci0KICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCiAgICAgLy8gSWYgd2UncmUgc3BsaXR0aW5nIHRoZSBpbmxpbmUgY29udGFpbmluZyB0aGUg
ZnVsbHNjcmVlbmVkIGVsZW1lbnQsCiAgICAgLy8gfGJlZm9yZUNoaWxkfCBtYXkgYmUgdGhlIHJl
bmRlcmVyIGZvciB0aGUgZnVsbHNjcmVlbmVkIGVsZW1lbnQuIEhvd2V2ZXIsCkBAIC00MjQsMTgg
KzQyMiw0NSBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsb2NrKiBm
cm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLAogICAgIGlmIChmdWxsU2NyZWVuRWxlbWVu
dCAmJiBiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+bm9kZSgpID09IGZ1bGxTY3JlZW5FbGVt
ZW50KQogICAgICAgICBiZWZvcmVDaGlsZCA9IGRvY3VtZW50KCkuZnVsbFNjcmVlblJlbmRlcmVy
KCk7CiAjZW5kaWYKLQogICAgIC8vIE5vdyB0YWtlIGFsbCBvZiB0aGUgY2hpbGRyZW4gZnJvbSBi
ZWZvcmVDaGlsZCB0byB0aGUgZW5kIGFuZCByZW1vdmUKICAgICAvLyB0aGVtIGZyb20gfHRoaXN8
IGFuZCBwbGFjZSB0aGVtIGluIHRoZSBjbG9uZS4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gYmVmb3JlQ2hpbGQ7Ci0gICAgd2hpbGUgKHJlbmRlcmVyKSB7Ci0gICAgICAgIFJlbmRlck9i
amVjdCogdG1wID0gcmVuZGVyZXI7Ci0gICAgICAgIHJlbmRlcmVyID0gdG1wLT5uZXh0U2libGlu
ZygpOwotICAgICAgICByZW1vdmVDaGlsZEludGVybmFsKCp0bXAsIE5vdGlmeUNoaWxkcmVuKTsK
LSAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24odG1wKTsK
LSAgICAgICAgdG1wLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyVG9Nb3ZlID0gYmVmb3JlQ2hpbGQ7CisgICAgUmVuZGVyT2Jq
ZWN0KiBuZXh0U2libGluZyA9IG51bGxwdHI7CisgICAgd2hpbGUgKHJlbmRlcmVyVG9Nb3ZlKSB7
CisgICAgICAgIG5leHRTaWJsaW5nID0gcmVuZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgIC8vIFdoZW4gYW5vbnltb3VzIHdyYXBwZXIgaXMgcHJlc2VudCwgd2UgbWlnaHQgbmVl
ZCB0byBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlIGluc3RlYWQuCisgICAgICAgIGlmIChyZW5kZXJl
clRvTW92ZS0+cGFyZW50KCkgIT0gdGhpcykgeworICAgICAgICAgICAgYXV0byogYW5vbnltb3Vz
UGFyZW50ID0gcmVuZGVyZXJUb01vdmUtPnBhcmVudCgpOworICAgICAgICAgICAgd2hpbGUgKGFu
b255bW91c1BhcmVudCAmJiBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgpICE9IHRoaXMpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYW5vbnltb3VzUGFyZW50LT5pc0Fub255bW91cygpKTsKKyAg
ICAgICAgICAgICAgICBhbm9ueW1vdXNQYXJlbnQgPSBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhbm9ueW1vdXNQYXJlbnQpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIGJlZm9yZUNoaWxkIGlzIHRoZSBm
aXJzdCBjaGlsZCBpbiB0aGUgc3VidHJlZSwgd2UgY291bGQganVzdCBtb3ZlIHRoZSB3aG9sZSBz
dWJ0cmVlLgorICAgICAgICAgICAgaWYgKCFyZW5kZXJlclRvTW92ZS0+cHJldmlvdXNTaWJsaW5n
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBSZXBhcmVudCB0aGUgd2hvbGUgYW5vbnltb3VzIHdy
YXBwZXIgdHJlZS4KKyAgICAgICAgICAgICAgICByZW5kZXJlclRvTW92ZSA9IGFub255bW91c1Bh
cmVudDsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHRvIHRoZSBuZXh0IHNpYmxpbmcgdGhhdCBp
cyBub3QgaW4gdGhpcyBzdWJ0cmVlLgorICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gYW5v
bnltb3VzUGFyZW50LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfSBlbHNlIGlmICghcmVu
ZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSBsYXN0IHJlbmRlcmVyIGluIHRoZSBzdWJ0cmVlLiBXZSBuZWVkIHRvIGp1bXAgb3V0IG9m
IHRoZSB3cmFwcGVyIHN1YnRyZWUsIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB0aGUgc2li
bGluZ3MgYXJlIGdldHRpbmcgcmVwYXJlbnRlZCB0b28uCisgICAgICAgICAgICAgICAgbmV4dFNp
YmxpbmcgPSBhbm9ueW1vdXNQYXJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBtb3ZlIHRoZSByZW5kZXJlciB0byB0aGUgaW5s
aW5lIGNsb25lLiBTaG91bGQgdGhlIHJlbmRlcmVyIG5lZWQgYW4gYW5vbgorICAgICAgICAgICAg
Ly8gd3JhcHBlciwgdGhlIGFkZENoaWxkKCkgd2lsbCBnZW5lcmF0ZSBvbmUgZm9yIGl0LgorICAg
ICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGFub255bW91cyB3cmFwcGVyIGhhcyBtdWx0aXBs
ZSBjaGlsZHJlbiwgd2UgZW5kIHVwIHRyYXZlcnNpbmcgdXAgdG8gdGhlIHRvcG1vc3Qgd3JhcHBl
cgorICAgICAgICAgICAgLy8gZXZlcnkgdGltZSwgd2hpY2ggaXMgYSBiaXQgd2FzdGVmdWwuCisg
ICAgICAgIH0KKyAgICAgICAgcmVuZGVyZXJUb01vdmUtPnBhcmVudCgpLT5yZW1vdmVDaGlsZElu
dGVybmFsKCpyZW5kZXJlclRvTW92ZSwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBjbG9uZUlu
bGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihyZW5kZXJlclRvTW92ZSk7CisgICAg
ICAgIHJlbmRlcmVyVG9Nb3ZlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
KyAgICAgICAgcmVuZGVyZXJUb01vdmUgPSBuZXh0U2libGluZzsKICAgICB9Ci0KKyAgICBjbG9u
ZUlubGluZS0+c2V0Q29udGludWF0aW9uKG9sZENvbnQpOwogICAgIC8vIEhvb2sgfGNsb25lfCB1
cCBhcyB0aGUgY29udGludWF0aW9uIG9mIHRoZSBtaWRkbGUgYmxvY2suCiAgICAgbWlkZGxlQmxv
Y2stPnNldENvbnRpbnVhdGlvbihjbG9uZUlubGluZS5nZXQoKSk7CiAKQEAgLTQ2OCwxMyArNDkz
LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmxvY2sqIGZyb21C
bG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssCiAKICAgICAgICAgICAgIC8vIE5vdyB3ZSBuZWVk
IHRvIHRha2UgYWxsIG9mIHRoZSBjaGlsZHJlbiBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBjaGls
ZAogICAgICAgICAgICAgLy8gKmFmdGVyKiBjdXJyZW50Q2hpbGQgYW5kIGFwcGVuZCB0aGVtIGFs
bCB0byB0aGUgY2xvbmUuCi0gICAgICAgICAgICByZW5kZXJlciA9IGN1cnJlbnRDaGlsZC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHdoaWxlIChyZW5kZXJlcikgewotICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogdG1wID0gcmVuZGVyZXI7Ci0gICAgICAgICAgICAgICAgcmVuZGVy
ZXIgPSB0bXAtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudElubGluZS5y
ZW1vdmVDaGlsZEludGVybmFsKCp0bXAsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAgICAgICAg
ICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbih0bXApOwotICAgICAg
ICAgICAgICAgIHRtcC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAg
ICAgICAgICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7
IGN1cnJlbnQ7KSB7CisgICAgICAgICAgICAgICAgYXV0byogbmV4dCA9IGN1cnJlbnQtPm5leHRT
aWJsaW5nKCk7CisgICAgICAgICAgICAgICAgY3VycmVudElubGluZS5yZW1vdmVDaGlsZEludGVy
bmFsKCpjdXJyZW50LCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAgICAgICAgY2xvbmVJbmxp
bmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oY3VycmVudCk7CisgICAgICAgICAgICAg
ICAgY3VycmVudC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgICAg
ICAgICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC00OTIsMTIgKzUxNiwxMSBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVz
KFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLAogCiAgICAgLy8g
Tm93IHRha2UgYWxsIHRoZSBjaGlsZHJlbiBhZnRlciBjdXJyZW50Q2hpbGQgYW5kIHJlbW92ZSB0
aGVtIGZyb20gdGhlIGZyb21CbG9jawogICAgIC8vIGFuZCBwdXQgdGhlbSBpbiB0aGUgdG9CbG9j
ay4KLSAgICByZW5kZXJlciA9IGN1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICB3aGls
ZSAocmVuZGVyZXIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiB0bXAgPSByZW5kZXJlcjsKLSAg
ICAgICAgcmVuZGVyZXIgPSB0bXAtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGZyb21CbG9jay0+
cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqdG1wLCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgIHRvQmxv
Y2stPmluc2VydENoaWxkSW50ZXJuYWwodG1wLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7Cisg
ICAgZm9yIChhdXRvKiBjdXJyZW50ID0gY3VycmVudENoaWxkLT5uZXh0U2libGluZygpOyBjdXJy
ZW50OykgeworICAgICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgZnJvbUJsb2NrLT5yZW1vdmVDaGlsZEludGVybmFsKCpjdXJyZW50LCBOb3RpZnlDaGls
ZHJlbik7CisgICAgICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoY3VycmVudCwgbnVs
bHB0ciwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICB9CiB9
CiAKQEAgLTU2OSwzOCArNTkyLDQ2IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94CiB2b2lkIFJl
bmRlcklubGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBmbG93ID0gY29udGludWF0aW9uQmVmb3JlKGJlZm9yZUNoaWxkKTsKLSAgICBBU1NFUlQoIWJl
Zm9yZUNoaWxkIHx8IGlzPFJlbmRlckJsb2NrPigqYmVmb3JlQ2hpbGQtPnBhcmVudCgpKSB8fCBp
czxSZW5kZXJJbmxpbmU+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkpKTsKLSAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogYmVmb3JlQ2hpbGRQYXJlbnQgPSBudWxscHRyOwotICAgIGlmIChiZWZvcmVD
aGlsZCkKLSAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2Rl
bE9iamVjdD4oYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYg
KFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24gPSBuZXh0Q29udGludWF0aW9uKGZs
b3cpKQotICAgICAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBjb250aW51YXRpb247Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZmxvdzsKKyAgICAvLyBJ
dCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgZGlyZWN0IHBhcmVudCBvZiB0aGUgYmVmb3JlQ2hpbGQu
CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJlZm9yZUNoaWxkQW5jZXN0b3IgPSBudWxscHRy
OworICAgIC8vIEluIGNhc2Ugb2YgYW5vbnltb3VzIHdyYXBwZXJzLCB0aGUgcGFyZW50IG9mIHRo
ZSBiZWZvcmVDaGlsZCBpcyBtb3N0bHkgaXJyZWxldmFudC4gV2hhdCB3ZSBuZWVkIGlzCisgICAg
Ly8gdGhlIHRvcG1vc3Qgd3JhcHBlci4KKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzPFJlbmRl
ckJsb2NrPihiZWZvcmVDaGlsZC0+cGFyZW50KCkpICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+
aXNBbm9ueW1vdXMoKSkgeworICAgICAgICBSZW5kZXJFbGVtZW50KiBhbm9ueW1vdXNQYXJlbnQg
PSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlIChhbm9ueW1vdXNQYXJlbnQg
JiYgYW5vbnltb3VzUGFyZW50LT5wYXJlbnQoKSAmJiBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgp
LT5pc0Fub255bW91cygpKQorICAgICAgICAgICAgYW5vbnltb3VzUGFyZW50ID0gYW5vbnltb3Vz
UGFyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKGFub255bW91c1BhcmVudCAmJiBhbm9u
eW1vdXNQYXJlbnQtPnBhcmVudCgpKTsKKyAgICAgICAgYmVmb3JlQ2hpbGRBbmNlc3RvciA9IGRv
d25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pihhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGlzPFJlbmRlckJs
b2NrPigqYmVmb3JlQ2hpbGQtPnBhcmVudCgpKSB8fCBpczxSZW5kZXJJbmxpbmU+KCpiZWZvcmVD
aGlsZC0+cGFyZW50KCkpKTsKKyAgICAgICAgaWYgKGJlZm9yZUNoaWxkKQorICAgICAgICAgICAg
YmVmb3JlQ2hpbGRBbmNlc3RvciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihiZWZv
cmVDaGlsZC0+cGFyZW50KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9uID0gbmV4dENvbnRpbnVhdGlvbihmbG93KSkK
KyAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZEFuY2VzdG9yID0gY29udGludWF0aW9uOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkQW5jZXN0b3IgPSBmbG93
OworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBiZWZvcmVDaGlsZFBhcmVudC0+YWRk
Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAg
ICByZXR1cm4gYmVmb3JlQ2hpbGRBbmNlc3Rvci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogCiAgICAgLy8gQSBjb250aW51YXRpb24gYWx3YXlz
IGNvbnNpc3RzIG9mIHR3byBwb3RlbnRpYWwgY2FuZGlkYXRlczogYW4gaW5saW5lIG9yIGFuIGFu
b255bW91cwogICAgIC8vIGJsb2NrIGJveCBob2xkaW5nIGJsb2NrIGNoaWxkcmVuLgogICAgIGJv
b2wgY2hpbGRJbmxpbmUgPSBuZXdDaGlsZElzSW5saW5lKCpuZXdDaGlsZCwgKnRoaXMpOwotICAg
IGJvb2wgYmNwSW5saW5lID0gYmVmb3JlQ2hpbGRQYXJlbnQtPmlzSW5saW5lKCk7CisgICAgYm9v
bCBiY3BJbmxpbmUgPSBiZWZvcmVDaGlsZEFuY2VzdG9yLT5pc0lubGluZSgpOwogICAgIGJvb2wg
Zmxvd0lubGluZSA9IGZsb3ctPmlzSW5saW5lKCk7CiAKLSAgICBpZiAoZmxvdyA9PSBiZWZvcmVD
aGlsZFBhcmVudCkKKyAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGlsZEFuY2VzdG9yKQogICAgICAg
ICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVm
b3JlQ2hpbGQpOwotICAgIGVsc2UgewotICAgICAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1h
dGNoIHVwIGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUK
LSAgICAgICAgLy8gbWluaW1hbCAjIG9mIGNvbnRpbnVhdGlvbnMgbmVlZGVkIGZvciB0aGUgaW5s
aW5lLgotICAgICAgICBpZiAoY2hpbGRJbmxpbmUgPT0gYmNwSW5saW5lKQotICAgICAgICAgICAg
cmV0dXJuIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5l
d0NoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgIGVsc2UgaWYgKGZsb3dJbmxpbmUgPT0gY2hp
bGRJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihuZXdDaGlsZCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCi0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwotICAgIH0KKyAgICAvLyBU
aGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29h
bGVzY2UgYW5kIGNyZWF0ZSB0aGUKKyAgICAvLyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBu
ZWVkZWQgZm9yIHRoZSBpbmxpbmUuCisgICAgaWYgKGNoaWxkSW5saW5lID09IGJjcElubGluZSkK
KyAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBpZiAoZmxvd0lubGluZSA9PSBj
aGlsZElubGluZSkKKyAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51
YXRpb24obmV3Q2hpbGQpOyAvLyBKdXN0IHRyZWF0IGxpa2UgYW4gYXBwZW5kLgorICAgIHJldHVy
biBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0No
aWxkLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVySW5saW5lOjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJj
NGU3YmRmYjhhOGVkZGRiYTczMjJiMWQyOGRlNTBiMGViNDdlMjIuLjkwYWJmMWU1ZDcyMTc3OTQ2
YjJmNjFhYmY1ZjVjYTAyOTQ5NzFhY2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0xMS0w
NCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIENvbnRpbnVhdGlv
bnMgd2l0aCBhbm9ueW1vdXMgd3JhcHBlcnMgaW5zaWRlIG1pc3BsYWNlcyBjaGlsZCByZW5kZXJl
cnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5
MDgKKworICAgICAgICBXaGVuIGEgY2hpbGQgaXMgYXBwZW5kZWQgdG8gYW4gaW5saW5lIGNvbnRh
aW5lciBhbmQgdGhlIGJlZm9yZUNoaWxkIGlzIG5vdCBhIGRpcmVjdCBjaGlsZCwgYnV0IAorICAg
ICAgICBpdCBpcyBpbnNpZGUgYSBnZW5lcmF0ZWQgc3VidHJlZSwgd2UgbmVlZCB0byBzcGVjaWFs
IGNhc2UgdGhlIGlubGluZSBzcGxpdCB0byBmb3JtIGNvbnRpbnVhdGlvbi4KKworICAgICAgICBS
ZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcygpIGFzc3VtZXMgdGhhdCBiZWZvcmVDaGlsZCBpcyBh
bHdheXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgaW5saW5lIGNvbnRh
aW5lci4gSG93ZXZlciB3aGVuIGJlZm9yZUNoaWxkIHR5cGUgcmVxdWlyZXMgd3JhcHBlciBjb250
ZW50IChzdWNoIGFzIHRhYmxlIGNlbGxzKSwgdGhlIERPTSBhbmQgdGhlCisgICAgICAgIHJlbmRl
ciB0cmVlIGdldCBvdXQgb2Ygc3luYy4gSW4gc3VjaCBjYXNlcywgd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCBib3RoIHRoZSBiZWZvcmVDaGlsZCBhbmQgaXRzIHNpYmxpbmdzIGVuZCB1cAorICAgICAg
ICBpbiB0aGUgY29ycmVjdCBnZW5lcmF0ZWQgYmxvY2suCisKKyAgICAgICAgKiBmYXN0L2lubGlu
ZS9jb250aW51YXRpb24td2l0aC1hbm9uLXdyYXBwZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9pbmxpbmUvY29udGludWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy5odG1s
OiBBZGRlZC4KKwogMjAxNS0xMS0wNyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIERSVCBkb2VzIG5vdCByZXNldCB0aGUgZnJhbWUgcmVjdCBiZXR3ZWVuIDIgcnVu
cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVhdGlvbi13aXRo
LWFub24td3JhcHBlcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9pbmxpbmUvY29u
dGludWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjA5
M2Q2ODI5Njk0MTM3ZTZmOTg4ZTljYmUyZDY3YmVmMjViZDdhNwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVhdGlvbi13aXRoLWFub24td3JhcHBlcnMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorVGVzdCBydW46IDcyMAorQWxsIHBhc3NlZC4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVhdGlvbi13aXRoLWFu
b24td3JhcHBlcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVhdGlvbi13
aXRoLWFub24td3JhcHBlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjdmODcxNTRiODkxMjYwZGVhZTA4
YmRmMzU1MDRiYmQ2MDA5OTI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9p
bmxpbmUvY29udGludWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy5odG1sCkBAIC0wLDAgKzEsODMg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UaGlzIHRlc3RzIHRo
YXQgYW5vbiB0YWJsZSBjb250ZW50IHdvcmtzIHdlbGwgd2l0aCBjb250aW51YXRpb24uIEl0IGdl
bmVyYXRlcyBkaXZzIHdpdGggZGlzcGxheTogdGFibGUtY2VsbCBpbnNpZGUgYSBzcGFuIGFuZCBt
b3ZlcyB0aG9zZSBjZWxscyBvdXQgb2YgdGhlIGdlbmVyYXRlZCB0YWJsZXMgYnkgc2V0dGluZyBk
aXNwbGF5OmJsb2NrIG9uIHRoZW0uIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBubyBtYXR0ZXIgaG93
IHRoZXkgZm9ybSB0aGUgY29udGludWF0aW9uIHRoZWlyIG9yZGVyIHNob3VsZCBhbHdheXMgYmUg
MSAyIDMgNCBldGMuPC90aXRsZT4KKzxzdHlsZT4KKyAgICAuY2VsbCB7CisgICAgICAgIGRpc3Bs
YXk6IHRhYmxlLWNlbGw7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKKwordmFyIHBlcm1BcnIgPSBbXTsKK3ZhciB1c2VkQ2hhcnMgPSBbXTsKKworZnVu
Y3Rpb24gcGVybXV0YXRlRGl2TW92ZU9yZGVyKGlucHV0KSB7CisgICAgdmFyIGNoOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgY2ggPSBpbnB1
dC5zcGxpY2UoaSwgMSlbMF07CisgICAgICAgIHVzZWRDaGFycy5wdXNoKGNoKTsKKyAgICAgICAg
aWYgKGlucHV0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgcGVybUFyci5wdXNoKHVzZWRDaGFy
cy5zbGljZSgpKTsKKyAgICAgICAgcGVybXV0YXRlRGl2TW92ZU9yZGVyKGlucHV0KTsKKyAgICAg
ICAgaW5wdXQuc3BsaWNlKGksIDAsIGNoKTsKKyAgICAgICAgdXNlZENoYXJzLnBvcCgpOworICAg
IH0KKyAgICByZXR1cm4gcGVybUFycjsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVDb250ZW50KCkg
eworICAgIHZhciBjb250ZW50ID0gIjxzcGFuPlsiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVyT2ZEaXZzOyArK2kpCisgICAgICAgIGNvbnRlbnQgKz0gIjxkaXYgaWQ9IiArIGkgKyAi
IGNsYXNzPSdjZWxsJz4iICsgaSArICI8L2Rpdj4iOworICAgIGNvbnRlbnQgKz0gIl08L3NwYW4+
IjsKKyAgICByZXR1cm4gY29udGVudDsKK30KKworZnVuY3Rpb24gdmFsaWRhdGVEaXZzUG9zaXRp
b24oKQoreworICAgIHZhciBmaXJzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIwIik7
CisgICAgdmFyIHByZXZPZmZzZXRMZWZ0ID0gZmlyc3REaXYub2Zmc2V0TGVmdDsKKyAgICB2YXIg
cHJldk9mZnNldFRvcCA9IGZpcnN0RGl2Lm9mZnNldFRvcDsKKyAgICBmb3IgKHZhciBpID0gMTsg
aSA8IG51bWJlck9mRGl2czsgKytpKSB7CisgICAgICAgIHZhciBjdXJyZW50RGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaSk7CisgICAgICAgIHZhciBwYXNzID0gKHByZXZPZmZzZXRMZWZ0
IDwgY3VycmVudERpdi5vZmZzZXRMZWZ0ICYmIHByZXZPZmZzZXRUb3AgPT0gY3VycmVudERpdi5v
ZmZzZXRUb3ApIAorICAgICAgICAgICAgfHwgKHByZXZPZmZzZXRMZWZ0ID09IGN1cnJlbnREaXYu
b2Zmc2V0TGVmdCAmJiBwcmV2T2Zmc2V0VG9wIDwgY3VycmVudERpdi5vZmZzZXRUb3ApCisgICAg
ICAgICAgICB8fCAocHJldk9mZnNldExlZnQgPiBjdXJyZW50RGl2Lm9mZnNldExlZnQgJiYgcHJl
dk9mZnNldFRvcCA8IGN1cnJlbnREaXYub2Zmc2V0VG9wKTsKKyAgICAgICAgaWYgKCFwYXNzKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBwcmV2T2Zmc2V0TGVmdCA9IGN1cnJl
bnREaXYub2Zmc2V0TGVmdDsKKyAgICAgICAgcHJldk9mZnNldFRvcCA9IGN1cnJlbnREaXYub2Zm
c2V0VG9wOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCh0
ZXN0cykgeworICAgIHZhciBmYWlsZWQgPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRl
c3RzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gZ2Vu
ZXJhdGVDb250ZW50KCk7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtYmVyT2ZEaXZz
OyArK2opIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRlc3RzW2ldW2pd
KS5jbGFzc0xpc3QudG9nZ2xlKCJjZWxsIik7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlRGl2
c1Bvc2l0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQgKz0gIiAiICsgaTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2
YXIgcmVzdWx0ID0gIlRlc3QgcnVuOiAiICsgdGVzdHMubGVuZ3RoOworICAgIGlmIChmYWlsZWQu
bGVuZ3RoKQorICAgICAgICByZXN1bHQgKz0gICI8YnI+RmFpbGVkIGNhc2VzOiAiICsgZmFpbGVk
OworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ICs9ICI8YnI+QWxsIHBhc3NlZC4iOworICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MID0gcmVzdWx0OworfQorCit2YXIgbnVtYmVyT2ZEaXZzID0g
NjsgLy8gNiEgPSA3MjAgdGVzdHMuCitydW5UZXN0KHBlcm11dGF0ZURpdk1vdmVPcmRlcihbMCwg
MSwgMiwgMywgNCwgNV0pKTsKKzwvc2NyaXB0PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265224</attachid>
            <date>2015-11-10 13:35:24 -0800</date>
            <delta_ts>2015-11-10 15:16:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150908-20151110133520.patch</filename>
            <type>text/plain</type>
            <size>15417</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVhMDk0ZDQ3NzI1NmFm
OWIxZGFjMDdjZThkYzdiYjI1NzI5ZTY1Yi4uMGMwNzA0Mzk2MzBkNjI3NWViM2Y1OWNlNjgxZTg1
ZGNlYWViNTgyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE1LTExLTEwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29udGludWF0aW9ucyB3aXRo
IGFub255bW91cyB3cmFwcGVycyBpbnNpZGUgbWlzcGxhY2VzIGNoaWxkIHJlbmRlcmVycy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkwOAorCisg
ICAgICAgIFdoZW4gYSBjaGlsZCBpcyBhcHBlbmRlZCB0byBhbiBpbmxpbmUgY29udGFpbmVyIGFu
ZCB0aGUgYmVmb3JlQ2hpbGQgaXMgbm90IGEgZGlyZWN0IGNoaWxkLCBidXQgCisgICAgICAgIGl0
IGlzIGluc2lkZSBhIGdlbmVyYXRlZCBzdWJ0cmVlLCB3ZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSB0
aGUgaW5saW5lIHNwbGl0IHRvIGZvcm0gY29udGludWF0aW9uLgorCisgICAgICAgIFJlbmRlcklu
bGluZTo6c3BsaXRJbmxpbmVzKCkgYXNzdW1lcyB0aGF0IGJlZm9yZUNoaWxkIGlzIGFsd2F5cyBh
IGRpcmVjdCBjaGlsZCBvZiB0aGUgY3VycmVudAorICAgICAgICBpbmxpbmUgY29udGFpbmVyLiBI
b3dldmVyIHdoZW4gYmVmb3JlQ2hpbGQgdHlwZSByZXF1aXJlcyB3cmFwcGVyIGNvbnRlbnQgKHN1
Y2ggYXMgdGFibGUgY2VsbHMpLCB0aGUgRE9NIGFuZCB0aGUKKyAgICAgICAgcmVuZGVyIHRyZWUg
Z2V0IG91dCBvZiBzeW5jLiBJbiBzdWNoIGNhc2VzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJv
dGggdGhlIGJlZm9yZUNoaWxkIGFuZCBpdHMgc2libGluZ3MgZW5kIHVwCisgICAgICAgIGluIHRo
ZSBjb3JyZWN0IGdlbmVyYXRlZCBibG9jay4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBUZXN0OiBmYXN0L2lubGluZS9jb250aW51YXRpb24td2l0aC1hbm9u
LXdyYXBwZXJzLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzcGxpdElubGluZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRDaGlsZFRvQ29udGludWF0aW9uKToKKwogMjAxNS0x
MS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAg
IFRhdGVjaHV5b2tvIHRleHQgaXMgbm90IHZlcnRpY2FsbHkgY2VudGVyZWQgaW4gaXRzIHZlcnRp
Y2FsIGFkdmFuY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5k
ZXggMDUxNjZlMzZjNWRmYzk4YzA3MzAxMDZmZmYzY2ZjMjViMjU5YzdiYy4uZGYyYTUyZTE1Njk5
OWM2M2Q2NTEyMDkwOTA5MmFjMmU3YTA0NmE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKQEAgLTQxMiw4ICs0MTIsNiBAQCB2b2lkIFJlbmRlcklubGluZTo6
c3BsaXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2Nr
LAogewogICAgIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgaW5saW5lLgogICAgIFJlbmRlclB0
cjxSZW5kZXJJbmxpbmU+IGNsb25lSW5saW5lID0gY2xvbmUoKTsKLSAgICBjbG9uZUlubGluZS0+
c2V0Q29udGludWF0aW9uKG9sZENvbnQpOwotCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQog
ICAgIC8vIElmIHdlJ3JlIHNwbGl0dGluZyB0aGUgaW5saW5lIGNvbnRhaW5pbmcgdGhlIGZ1bGxz
Y3JlZW5lZCBlbGVtZW50LAogICAgIC8vIHxiZWZvcmVDaGlsZHwgbWF5IGJlIHRoZSByZW5kZXJl
ciBmb3IgdGhlIGZ1bGxzY3JlZW5lZCBlbGVtZW50LiBIb3dldmVyLApAQCAtNDI0LDE4ICs0MjIs
NDMgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbG9jayogZnJvbUJs
b2NrLCBSZW5kZXJCbG9jayogdG9CbG9jaywKICAgICBpZiAoZnVsbFNjcmVlbkVsZW1lbnQgJiYg
YmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPm5vZGUoKSA9PSBmdWxsU2NyZWVuRWxlbWVudCkK
ICAgICAgICAgYmVmb3JlQ2hpbGQgPSBkb2N1bWVudCgpLmZ1bGxTY3JlZW5SZW5kZXJlcigpOwog
I2VuZGlmCi0KICAgICAvLyBOb3cgdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIGZyb20gYmVmb3Jl
Q2hpbGQgdG8gdGhlIGVuZCBhbmQgcmVtb3ZlCiAgICAgLy8gdGhlbSBmcm9tIHx0aGlzfCBhbmQg
cGxhY2UgdGhlbSBpbiB0aGUgY2xvbmUuCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGJl
Zm9yZUNoaWxkOwotICAgIHdoaWxlIChyZW5kZXJlcikgewotICAgICAgICBSZW5kZXJPYmplY3Qq
IHRtcCA9IHJlbmRlcmVyOwotICAgICAgICByZW5kZXJlciA9IHRtcC0+bmV4dFNpYmxpbmcoKTsK
LSAgICAgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbCgqdG1wLCBOb3RpZnlDaGlsZHJlbik7Ci0gICAg
ICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKHRtcCk7Ci0gICAg
ICAgIHRtcC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgZm9yIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyVG9Nb3ZlID0gYmVmb3JlQ2hpbGQ7IHJlbmRlcmVyVG9Nb3Zl
OykgeworICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gcmVuZGVyZXJUb01vdmUt
Pm5leHRTaWJsaW5nKCk7CisgICAgICAgIC8vIFdoZW4gYW5vbnltb3VzIHdyYXBwZXIgaXMgcHJl
c2VudCwgd2UgbWlnaHQgbmVlZCB0byBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlIGluc3RlYWQuCisg
ICAgICAgIGlmIChyZW5kZXJlclRvTW92ZS0+cGFyZW50KCkgIT0gdGhpcykgeworICAgICAgICAg
ICAgYXV0byogYW5vbnltb3VzUGFyZW50ID0gcmVuZGVyZXJUb01vdmUtPnBhcmVudCgpOworICAg
ICAgICAgICAgd2hpbGUgKGFub255bW91c1BhcmVudCAmJiBhbm9ueW1vdXNQYXJlbnQtPnBhcmVu
dCgpICE9IHRoaXMpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYW5vbnltb3VzUGFyZW50LT5p
c0Fub255bW91cygpKTsKKyAgICAgICAgICAgICAgICBhbm9ueW1vdXNQYXJlbnQgPSBhbm9ueW1v
dXNQYXJlbnQtPnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhbm9u
eW1vdXNQYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIGJl
Zm9yZUNoaWxkIGlzIHRoZSBmaXJzdCBjaGlsZCBpbiB0aGUgc3VidHJlZSwgd2UgY291bGQganVz
dCBtb3ZlIHRoZSB3aG9sZSBzdWJ0cmVlLgorICAgICAgICAgICAgaWYgKCFyZW5kZXJlclRvTW92
ZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBSZXBhcmVudCB0aGUg
d2hvbGUgYW5vbnltb3VzIHdyYXBwZXIgdHJlZS4KKyAgICAgICAgICAgICAgICByZW5kZXJlclRv
TW92ZSA9IGFub255bW91c1BhcmVudDsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHRvIHRoZSBu
ZXh0IHNpYmxpbmcgdGhhdCBpcyBub3QgaW4gdGhpcyBzdWJ0cmVlLgorICAgICAgICAgICAgICAg
IG5leHRTaWJsaW5nID0gYW5vbnltb3VzUGFyZW50LT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgfSBlbHNlIGlmICghcmVuZGVyZXJUb01vdmUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IHJlbmRlcmVyIGluIHRoZSBzdWJ0cmVlLiBXZSBu
ZWVkIHRvIGp1bXAgb3V0IG9mIHRoZSB3cmFwcGVyIHN1YnRyZWUsIHNvIHRoYXQKKyAgICAgICAg
ICAgICAgICAvLyB0aGUgc2libGluZ3MgYXJlIGdldHRpbmcgcmVwYXJlbnRlZCB0b28uCisgICAg
ICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBhbm9ueW1vdXNQYXJlbnQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBtb3ZlIHRoZSBy
ZW5kZXJlciB0byB0aGUgaW5saW5lIGNsb25lLiBTaG91bGQgdGhlIHJlbmRlcmVyIG5lZWQgYW4g
YW5vbgorICAgICAgICAgICAgLy8gd3JhcHBlciwgdGhlIGFkZENoaWxkKCkgd2lsbCBnZW5lcmF0
ZSBvbmUgZm9yIGl0LgorICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGFub255bW91cyB3
cmFwcGVyIGhhcyBtdWx0aXBsZSBjaGlsZHJlbiwgd2UgZW5kIHVwIHRyYXZlcnNpbmcgdXAgdG8g
dGhlIHRvcG1vc3Qgd3JhcHBlcgorICAgICAgICAgICAgLy8gZXZlcnkgdGltZSwgd2hpY2ggaXMg
YSBiaXQgd2FzdGVmdWwuCisgICAgICAgIH0KKyAgICAgICAgcmVuZGVyZXJUb01vdmUtPnBhcmVu
dCgpLT5yZW1vdmVDaGlsZEludGVybmFsKCpyZW5kZXJlclRvTW92ZSwgTm90aWZ5Q2hpbGRyZW4p
OworICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihyZW5k
ZXJlclRvTW92ZSk7CisgICAgICAgIHJlbmRlcmVyVG9Nb3ZlLT5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgcmVuZGVyZXJUb01vdmUgPSBuZXh0U2libGluZzsK
ICAgICB9Ci0KKyAgICBjbG9uZUlubGluZS0+c2V0Q29udGludWF0aW9uKG9sZENvbnQpOwogICAg
IC8vIEhvb2sgfGNsb25lfCB1cCBhcyB0aGUgY29udGludWF0aW9uIG9mIHRoZSBtaWRkbGUgYmxv
Y2suCiAgICAgbWlkZGxlQmxvY2stPnNldENvbnRpbnVhdGlvbihjbG9uZUlubGluZS5nZXQoKSk7
CiAKQEAgLTQ2OCwxMyArNDkxLDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMo
UmVuZGVyQmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssCiAKICAgICAgICAg
ICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHRha2UgYWxsIG9mIHRoZSBjaGlsZHJlbiBzdGFydGluZyBm
cm9tIHRoZSBmaXJzdCBjaGlsZAogICAgICAgICAgICAgLy8gKmFmdGVyKiBjdXJyZW50Q2hpbGQg
YW5kIGFwcGVuZCB0aGVtIGFsbCB0byB0aGUgY2xvbmUuCi0gICAgICAgICAgICByZW5kZXJlciA9
IGN1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHdoaWxlIChyZW5kZXJl
cikgewotICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogdG1wID0gcmVuZGVyZXI7Ci0gICAg
ICAgICAgICAgICAgcmVuZGVyZXIgPSB0bXAtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgY3VycmVudElubGluZS5yZW1vdmVDaGlsZEludGVybmFsKCp0bXAsIE5vdGlmeUNoaWxkcmVu
KTsKLSAgICAgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbih0bXApOwotICAgICAgICAgICAgICAgIHRtcC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBjdXJyZW50Q2hp
bGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7CisgICAgICAgICAgICAgICAgYXV0byogbmV4
dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgY3VycmVudElubGlu
ZS5yZW1vdmVDaGlsZEludGVybmFsKCpjdXJyZW50LCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAg
ICAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oY3VycmVu
dCk7CisgICAgICAgICAgICAgICAgY3VycmVudC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00OTIsMTIgKzUxNCwxMSBAQCB2b2lkIFJlbmRlcklu
bGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0
b0Jsb2NrLAogCiAgICAgLy8gTm93IHRha2UgYWxsIHRoZSBjaGlsZHJlbiBhZnRlciBjdXJyZW50
Q2hpbGQgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIGZyb21CbG9jawogICAgIC8vIGFuZCBwdXQg
dGhlbSBpbiB0aGUgdG9CbG9jay4KLSAgICByZW5kZXJlciA9IGN1cnJlbnRDaGlsZC0+bmV4dFNp
YmxpbmcoKTsKLSAgICB3aGlsZSAocmVuZGVyZXIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiB0
bXAgPSByZW5kZXJlcjsKLSAgICAgICAgcmVuZGVyZXIgPSB0bXAtPm5leHRTaWJsaW5nKCk7Ci0g
ICAgICAgIGZyb21CbG9jay0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqdG1wLCBOb3RpZnlDaGlsZHJl
bik7Ci0gICAgICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwodG1wLCBudWxscHRyLCBO
b3RpZnlDaGlsZHJlbik7CisgICAgZm9yIChhdXRvKiBjdXJyZW50ID0gY3VycmVudENoaWxkLT5u
ZXh0U2libGluZygpOyBjdXJyZW50OykgeworICAgICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+
bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgZnJvbUJsb2NrLT5yZW1vdmVDaGlsZEludGVybmFsKCpj
dXJyZW50LCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50
ZXJuYWwoY3VycmVudCwgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBjdXJyZW50
ID0gbmV4dDsKICAgICB9CiB9CiAKQEAgLTU2OSwzOCArNTkwLDQzIEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5l
d0Jsb2NrQm94CiB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBmbG93ID0gY29udGludWF0aW9uQmVmb3JlKGJlZm9yZUNoaWxk
KTsKLSAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGlzPFJlbmRlckJsb2NrPigqYmVmb3JlQ2hp
bGQtPnBhcmVudCgpKSB8fCBpczxSZW5kZXJJbmxpbmU+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkp
KTsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYmVmb3JlQ2hpbGRQYXJlbnQgPSBudWxscHRy
OwotICAgIGlmIChiZWZvcmVDaGlsZCkKLSAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBkb3du
Y2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24gPSBu
ZXh0Q29udGludWF0aW9uKGZsb3cpKQotICAgICAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBj
b250aW51YXRpb247Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50
ID0gZmxvdzsKKyAgICAvLyBJdCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgZGlyZWN0IHBhcmVudCBv
ZiB0aGUgYmVmb3JlQ2hpbGQuCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJlZm9yZUNoaWxk
QW5jZXN0b3IgPSBudWxscHRyOworICAgIC8vIEluIGNhc2Ugb2YgYW5vbnltb3VzIHdyYXBwZXJz
LCB0aGUgcGFyZW50IG9mIHRoZSBiZWZvcmVDaGlsZCBpcyBtb3N0bHkgaXJyZWxldmFudC4gV2hh
dCB3ZSBuZWVkIGlzCisgICAgLy8gdGhlIHRvcG1vc3Qgd3JhcHBlci4KKyAgICBpZiAoYmVmb3Jl
Q2hpbGQgJiYgIWlzPFJlbmRlckJsb2NrPihiZWZvcmVDaGlsZC0+cGFyZW50KCkpICYmIGJlZm9y
ZUNoaWxkLT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSkgeworICAgICAgICBSZW5kZXJFbGVtZW50
KiBhbm9ueW1vdXNQYXJlbnQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxl
IChhbm9ueW1vdXNQYXJlbnQgJiYgYW5vbnltb3VzUGFyZW50LT5wYXJlbnQoKSAmJiBhbm9ueW1v
dXNQYXJlbnQtPnBhcmVudCgpLT5pc0Fub255bW91cygpKQorICAgICAgICAgICAgYW5vbnltb3Vz
UGFyZW50ID0gYW5vbnltb3VzUGFyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKGFub255
bW91c1BhcmVudCAmJiBhbm9ueW1vdXNQYXJlbnQtPnBhcmVudCgpKTsKKyAgICAgICAgYmVmb3Jl
Q2hpbGRBbmNlc3RvciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pihhbm9ueW1vdXNQ
YXJlbnQtPnBhcmVudCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIWJlZm9yZUNo
aWxkIHx8IGlzPFJlbmRlckJsb2NrPigqYmVmb3JlQ2hpbGQtPnBhcmVudCgpKSB8fCBpczxSZW5k
ZXJJbmxpbmU+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkpKTsKKyAgICAgICAgaWYgKGJlZm9yZUNo
aWxkKQorICAgICAgICAgICAgYmVmb3JlQ2hpbGRBbmNlc3RvciA9IGRvd25jYXN0PFJlbmRlckJv
eE1vZGVsT2JqZWN0PihiZWZvcmVDaGlsZC0+cGFyZW50KCkpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9uID0gbmV4dENv
bnRpbnVhdGlvbihmbG93KSkKKyAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZEFuY2VzdG9yID0g
Y29udGludWF0aW9uOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZm9yZUNo
aWxkQW5jZXN0b3IgPSBmbG93OworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG5ld0NoaWxk
LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBiZWZv
cmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVm
b3JlQ2hpbGQpOworICAgICAgICByZXR1cm4gYmVmb3JlQ2hpbGRBbmNlc3Rvci0+YWRkQ2hpbGRJ
Z25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogCisgICAgaWYgKGZs
b3cgPT0gYmVmb3JlQ2hpbGRBbmNlc3RvcikKKyAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAvLyBBIGNv
bnRpbnVhdGlvbiBhbHdheXMgY29uc2lzdHMgb2YgdHdvIHBvdGVudGlhbCBjYW5kaWRhdGVzOiBh
biBpbmxpbmUgb3IgYW4gYW5vbnltb3VzCiAgICAgLy8gYmxvY2sgYm94IGhvbGRpbmcgYmxvY2sg
Y2hpbGRyZW4uCiAgICAgYm9vbCBjaGlsZElubGluZSA9IG5ld0NoaWxkSXNJbmxpbmUoKm5ld0No
aWxkLCAqdGhpcyk7Ci0gICAgYm9vbCBiY3BJbmxpbmUgPSBiZWZvcmVDaGlsZFBhcmVudC0+aXNJ
bmxpbmUoKTsKLSAgICBib29sIGZsb3dJbmxpbmUgPSBmbG93LT5pc0lubGluZSgpOwotCi0gICAg
aWYgKGZsb3cgPT0gYmVmb3JlQ2hpbGRQYXJlbnQpCi0gICAgICAgIHJldHVybiBmbG93LT5hZGRD
aGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAgaWYgd2UgY2FuLCBz
byB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQotICAgICAgICAvLyBtaW5pbWFs
ICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCi0gICAgICAgIGlmIChj
aGlsZElubGluZSA9PSBiY3BJbmxpbmUpCi0gICAgICAgICAgICByZXR1cm4gYmVmb3JlQ2hpbGRQ
YXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxk
KTsKLSAgICAgICAgZWxzZSBpZiAoZmxvd0lubGluZSA9PSBjaGlsZElubGluZSkKLSAgICAgICAg
ICAgIHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkKTsg
Ly8gSnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmV0dXJuIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5l
d0NoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgfQorICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8g
bWF0Y2ggdXAgaWYgd2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRo
ZQorICAgIC8vIG1pbmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGlu
ZS4KKyAgICBpZiAoY2hpbGRJbmxpbmUgPT0gYmVmb3JlQ2hpbGRBbmNlc3Rvci0+aXNJbmxpbmUo
KSkKKyAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBpZiAoZmxvdy0+aXNJbmxp
bmUoKSA9PSBjaGlsZElubGluZSkKKyAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENoaWxkSWdub3Jp
bmdDb250aW51YXRpb24obmV3Q2hpbGQpOyAvLyBKdXN0IHRyZWF0IGxpa2UgYW4gYXBwZW5kLgor
ICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVySW5saW5lOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDA0ZDY2ZDZkYjA0ZDNlOWNjNzdkMmEyYTU4ODFkNWU4MmJiOTU0NzEuLmMxNmQ2N2Yx
MGM4NGVmNWYwMjU1MTEwOWE2YTgxYTdmOTRmNWI0MzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAor
MjAxNS0xMS0xMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIENv
bnRpbnVhdGlvbnMgd2l0aCBhbm9ueW1vdXMgd3JhcHBlcnMgaW5zaWRlIG1pc3BsYWNlcyBjaGls
ZCByZW5kZXJlcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA5MDgKKworICAgICAgICBXaGVuIGEgY2hpbGQgaXMgYXBwZW5kZWQgdG8gYW4gaW5s
aW5lIGNvbnRhaW5lciBhbmQgdGhlIGJlZm9yZUNoaWxkIGlzIG5vdCBhIGRpcmVjdCBjaGlsZCwg
YnV0IAorICAgICAgICBpdCBpcyBpbnNpZGUgYSBnZW5lcmF0ZWQgc3VidHJlZSwgd2UgbmVlZCB0
byBzcGVjaWFsIGNhc2UgdGhlIGlubGluZSBzcGxpdCB0byBmb3JtIGNvbnRpbnVhdGlvbi4KKwor
ICAgICAgICBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcygpIGFzc3VtZXMgdGhhdCBiZWZvcmVD
aGlsZCBpcyBhbHdheXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgaW5s
aW5lIGNvbnRhaW5lci4gSG93ZXZlciB3aGVuIGJlZm9yZUNoaWxkIHR5cGUgcmVxdWlyZXMgd3Jh
cHBlciBjb250ZW50IChzdWNoIGFzIHRhYmxlIGNlbGxzKSwgdGhlIERPTSBhbmQgdGhlCisgICAg
ICAgIHJlbmRlciB0cmVlIGdldCBvdXQgb2Ygc3luYy4gSW4gc3VjaCBjYXNlcywgd2UgbmVlZCB0
byBlbnN1cmUgdGhhdCBib3RoIHRoZSBiZWZvcmVDaGlsZCBhbmQgaXRzIHNpYmxpbmdzIGVuZCB1
cAorICAgICAgICBpbiB0aGUgY29ycmVjdCBnZW5lcmF0ZWQgYmxvY2suCisKKyAgICAgICAgKiBm
YXN0L2lubGluZS9jb250aW51YXRpb24td2l0aC1hbm9uLXdyYXBwZXJzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9pbmxpbmUvY29udGludWF0aW9uLXdpdGgtYW5vbi13cmFw
cGVycy5odG1sOiBBZGRlZC4KKwogMjAxNS0xMS0xMCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFk
QGFwcGxlLmNvbT4KIAogICAgICAgICBCcm9hZGVuaW5nIHRoZSBzY29wZSBvZiBza2lwcGVkIGlu
c3BlY3RvciB0ZXN0cyBvbiBXaW4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW5saW5l
L2NvbnRpbnVhdGlvbi13aXRoLWFub24td3JhcHBlcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9pbmxpbmUvY29udGludWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjA5M2Q2ODI5Njk0MTM3ZTZmOTg4ZTljYmUyZDY3YmVmMjViZDdhNwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2NvbnRpbnVhdGlvbi13
aXRoLWFub24td3JhcHBlcnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorVGVzdCBydW46
IDcyMAorQWxsIHBhc3NlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2Nv
bnRpbnVhdGlvbi13aXRoLWFub24td3JhcHBlcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaW5s
aW5lL2NvbnRpbnVhdGlvbi13aXRoLWFub24td3JhcHBlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjdm
ODcxNTRiODkxMjYwZGVhZTA4YmRmMzU1MDRiYmQ2MDA5OTI2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9pbmxpbmUvY29udGludWF0aW9uLXdpdGgtYW5vbi13cmFwcGVycy5o
dG1sCkBAIC0wLDAgKzEsODMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5UaGlzIHRlc3RzIHRoYXQgYW5vbiB0YWJsZSBjb250ZW50IHdvcmtzIHdlbGwgd2l0aCBj
b250aW51YXRpb24uIEl0IGdlbmVyYXRlcyBkaXZzIHdpdGggZGlzcGxheTogdGFibGUtY2VsbCBp
bnNpZGUgYSBzcGFuIGFuZCBtb3ZlcyB0aG9zZSBjZWxscyBvdXQgb2YgdGhlIGdlbmVyYXRlZCB0
YWJsZXMgYnkgc2V0dGluZyBkaXNwbGF5OmJsb2NrIG9uIHRoZW0uIFRoaXMgdGVzdCBjaGVja3Mg
dGhhdCBubyBtYXR0ZXIgaG93IHRoZXkgZm9ybSB0aGUgY29udGludWF0aW9uIHRoZWlyIG9yZGVy
IHNob3VsZCBhbHdheXMgYmUgMSAyIDMgNCBldGMuPC90aXRsZT4KKzxzdHlsZT4KKyAgICAuY2Vs
bCB7CisgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgfQorPC9zdHlsZT4KKzwvaGVh
ZD4KKzxib2R5PgorPC9ib2R5PgorPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwordmFyIHBlcm1BcnIgPSBbXTsKK3ZhciB1c2Vk
Q2hhcnMgPSBbXTsKKworZnVuY3Rpb24gcGVybXV0YXRlRGl2TW92ZU9yZGVyKGlucHV0KSB7Cisg
ICAgdmFyIGNoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgY2ggPSBpbnB1dC5zcGxpY2UoaSwgMSlbMF07CisgICAgICAgIHVzZWRDaGFycy5w
dXNoKGNoKTsKKyAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgcGVy
bUFyci5wdXNoKHVzZWRDaGFycy5zbGljZSgpKTsKKyAgICAgICAgcGVybXV0YXRlRGl2TW92ZU9y
ZGVyKGlucHV0KTsKKyAgICAgICAgaW5wdXQuc3BsaWNlKGksIDAsIGNoKTsKKyAgICAgICAgdXNl
ZENoYXJzLnBvcCgpOworICAgIH0KKyAgICByZXR1cm4gcGVybUFycjsKK30KKworZnVuY3Rpb24g
Z2VuZXJhdGVDb250ZW50KCkgeworICAgIHZhciBjb250ZW50ID0gIjxzcGFuPlsiOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZEaXZzOyArK2kpCisgICAgICAgIGNvbnRlbnQgKz0g
IjxkaXYgaWQ9IiArIGkgKyAiIGNsYXNzPSdjZWxsJz4iICsgaSArICI8L2Rpdj4iOworICAgIGNv
bnRlbnQgKz0gIl08L3NwYW4+IjsKKyAgICByZXR1cm4gY29udGVudDsKK30KKworZnVuY3Rpb24g
dmFsaWRhdGVEaXZzUG9zaXRpb24oKQoreworICAgIHZhciBmaXJzdERpdiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCIwIik7CisgICAgdmFyIHByZXZPZmZzZXRMZWZ0ID0gZmlyc3REaXYub2Zm
c2V0TGVmdDsKKyAgICB2YXIgcHJldk9mZnNldFRvcCA9IGZpcnN0RGl2Lm9mZnNldFRvcDsKKyAg
ICBmb3IgKHZhciBpID0gMTsgaSA8IG51bWJlck9mRGl2czsgKytpKSB7CisgICAgICAgIHZhciBj
dXJyZW50RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7CisgICAgICAgIHZhciBwYXNz
ID0gKHByZXZPZmZzZXRMZWZ0IDwgY3VycmVudERpdi5vZmZzZXRMZWZ0ICYmIHByZXZPZmZzZXRU
b3AgPT0gY3VycmVudERpdi5vZmZzZXRUb3ApIAorICAgICAgICAgICAgfHwgKHByZXZPZmZzZXRM
ZWZ0ID09IGN1cnJlbnREaXYub2Zmc2V0TGVmdCAmJiBwcmV2T2Zmc2V0VG9wIDwgY3VycmVudERp
di5vZmZzZXRUb3ApCisgICAgICAgICAgICB8fCAocHJldk9mZnNldExlZnQgPiBjdXJyZW50RGl2
Lm9mZnNldExlZnQgJiYgcHJldk9mZnNldFRvcCA8IGN1cnJlbnREaXYub2Zmc2V0VG9wKTsKKyAg
ICAgICAgaWYgKCFwYXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBwcmV2
T2Zmc2V0TGVmdCA9IGN1cnJlbnREaXYub2Zmc2V0TGVmdDsKKyAgICAgICAgcHJldk9mZnNldFRv
cCA9IGN1cnJlbnREaXYub2Zmc2V0VG9wOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdCh0ZXN0cykgeworICAgIHZhciBmYWlsZWQgPSAiIjsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MID0gZ2VuZXJhdGVDb250ZW50KCk7CisgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgbnVtYmVyT2ZEaXZzOyArK2opIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKHRlc3RzW2ldW2pdKS5jbGFzc0xpc3QudG9nZ2xlKCJjZWxsIik7CisgICAgICAgICAg
ICBpZiAoIXZhbGlkYXRlRGl2c1Bvc2l0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQg
Kz0gIiAiICsgaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICB2YXIgcmVzdWx0ID0gIlRlc3QgcnVuOiAiICsgdGVzdHMubGVuZ3Ro
OworICAgIGlmIChmYWlsZWQubGVuZ3RoKQorICAgICAgICByZXN1bHQgKz0gICI8YnI+RmFpbGVk
IGNhc2VzOiAiICsgZmFpbGVkOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ICs9ICI8YnI+QWxs
IHBhc3NlZC4iOworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gcmVzdWx0OworfQorCit2
YXIgbnVtYmVyT2ZEaXZzID0gNjsgLy8gNiEgPSA3MjAgdGVzdHMuCitydW5UZXN0KHBlcm11dGF0
ZURpdk1vdmVPcmRlcihbMCwgMSwgMiwgMywgNCwgNV0pKTsKKzwvc2NyaXB0PgorPC9odG1sPgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="commit-queue"
          id="290300"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>