<?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>139914</bug_id>
          
          <creation_ts>2014-12-23 14:12:20 -0800</creation_ts>
          <short_desc>[Mac] Cannot scroll when a non-scrollable iframe is contained inside a scrollable iframe</short_desc>
          <delta_ts>2015-01-16 14:18:07 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140564</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>jberlin</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1057647</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-12-23 14:12:20 -0800</bug_when>
    <thetext>Simon and Jessie discovered a problem with scrolling when a non-scrollable iframe is nested inside a scrollable one. We latch to the non-scrollable frame and don&apos;t recognize that we need to relay scroll events to the parent.

As Simon wrote to me:
&quot;The latching logic is broken for a non-scrollable iframe inside a scrollable iframe. It happens to work for a non-scrollable iframe in the main frame because, after EventHandler::platformCompleteWheelEvent() does latchingState-&gt;setFrame(nullptr), the mainframe&apos;s view then gets returned from frameViewForLatchingState() on the next event.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057648</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-12-23 14:12:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/18750910&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057660</commentid>
    <comment_count>2</comment_count>
      <attachid>243696</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-12-23 14:47:35 -0800</bug_when>
    <thetext>Created attachment 243696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057772</commentid>
    <comment_count>3</comment_count>
      <attachid>243696</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-24 12:44:54 -0800</bug_when>
    <thetext>Comment on attachment 243696
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2751
&gt; +    Element* stopElement = (latchedState) ? latchedState-&gt;previousWheelScrolledElement() : nullptr;

I think this would read better without the parentheses around latchedState. I can understand a coding style where we’d use parentheses in contexts like that to emphasize that ? : is like an if statement, but that is not the coding style we have been using in WebKit up until this point.

&gt; Source/WebCore/page/MainFrame.cpp:92
&gt; +    if (!m_latchingState.size())

Nicer to use isEmpty here.

&gt; Source/WebCore/page/MainFrame.h:74
&gt; +    Vector&lt;std::unique_ptr&lt;ScrollLatchingState&gt;&gt; m_latchingState;

Why do these need to be allocated on the heap? Can’t this just be Vector&lt;ScrollLatchingState&gt; instead?

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:828
&gt; +static bool latchingIsLockedToParentOfThisFrame(const Frame&amp; frame)

I think the name should say &quot;ancestor&quot;, not &quot;parent&quot;, since a grandparent or great grandparent also causes this function to return true.

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:832
&gt; +    if (!latchedState || !latchedState-&gt;frame())
&gt; +        return false;

Do we need to null check latchedState-&gt;frame()? Code below works even if it’s null. Is that a case we need to optimize?

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:848
&gt; +    FrameTree* frameTree = &amp;frame.tree();
&gt; +
&gt; +    while (frameTree) {
&gt; +        Frame* parent = frameTree-&gt;parent();
&gt; +        if (!parent)
&gt; +            break;
&gt; +
&gt; +        if (parent == latchedState-&gt;frame())
&gt; +            return true;
&gt; +
&gt; +        frameTree = &amp;parent-&gt;tree();
&gt; +    }

Lets write this as a for loop. This would be the conventional way to write it:

    for (Frame* ancestor = &amp;frame.tree().parent(); ancestor; ancestor = ancestor-&gt;tree().parent()) {
        if (ancestor == latchedState-&gt;frame())
            return true;
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058714</commentid>
    <comment_count>4</comment_count>
      <attachid>243696</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-05 09:27:34 -0800</bug_when>
    <thetext>Comment on attachment 243696
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2751
&gt;&gt; +    Element* stopElement = (latchedState) ? latchedState-&gt;previousWheelScrolledElement() : nullptr;
&gt; 
&gt; I think this would read better without the parentheses around latchedState. I can understand a coding style where we’d use parentheses in contexts like that to emphasize that ? : is like an if statement, but that is not the coding style we have been using in WebKit up until this point.

Understood. I will change it.

&gt;&gt; Source/WebCore/page/MainFrame.cpp:92
&gt;&gt; +    if (!m_latchingState.size())
&gt; 
&gt; Nicer to use isEmpty here.

Done.

&gt;&gt; Source/WebCore/page/MainFrame.h:74
&gt;&gt; +    Vector&lt;std::unique_ptr&lt;ScrollLatchingState&gt;&gt; m_latchingState;
&gt; 
&gt; Why do these need to be allocated on the heap? Can’t this just be Vector&lt;ScrollLatchingState&gt; instead?

You are right. I&apos;ll change the implementation.

&gt;&gt; Source/WebCore/page/mac/EventHandlerMac.mm:828
&gt;&gt; +static bool latchingIsLockedToParentOfThisFrame(const Frame&amp; frame)
&gt; 
&gt; I think the name should say &quot;ancestor&quot;, not &quot;parent&quot;, since a grandparent or great grandparent also causes this function to return true.

Done.

&gt;&gt; Source/WebCore/page/mac/EventHandlerMac.mm:832
&gt;&gt; +        return false;
&gt; 
&gt; Do we need to null check latchedState-&gt;frame()? Code below works even if it’s null. Is that a case we need to optimize?

I think it&apos;s worth checking. If no latching has taken place yet, the latchedState-&gt;frame() will be null and we should immediately return false. There&apos;s no sense walking up the chain of ancestors and comparing each of them to null when we can just bail out early.

&gt;&gt; Source/WebCore/page/mac/EventHandlerMac.mm:848
&gt;&gt; +    }
&gt; 
&gt; Lets write this as a for loop. This would be the conventional way to write it:
&gt; 
&gt;     for (Frame* ancestor = &amp;frame.tree().parent(); ancestor; ancestor = ancestor-&gt;tree().parent()) {
&gt;         if (ancestor == latchedState-&gt;frame())
&gt;             return true;
&gt;     }

Done. That is much nicer!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058726</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-05 10:11:54 -0800</bug_when>
    <thetext>Committed r177912: &lt;http://trac.webkit.org/changeset/177912&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243696</attachid>
            <date>2014-12-23 14:47:35 -0800</date>
            <delta_ts>2014-12-24 12:44:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139914-20141223144736.patch</filename>
            <type>text/plain</type>
            <size>20022</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzY5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE0LTEyLTIzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIENhbm5vdCBzY3Jv
bGwgd2hlbiBhIG5vbi1zY3JvbGxhYmxlIGlmcmFtZSBpcyBjb250YWluZWQgaW5zaWRlIGEgc2Ny
b2xsYWJsZSBpZnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzOTkxNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg3NTA5MTA+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHBsYXRmb3Jt
L21hYy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtbmVzdGVkLWlmcmFtZS5odG1sCisKKyAgICAgICAg
VGhlIGxhdGNoaW5nIGxvZ2ljIHdhcyBicmVha2luZyBkb3duIHdoZW4gYSBub24tc2Nyb2xsYWJs
ZSBpZnJhbWUgd2FzIHRoZSBjbG9zZXN0IHRhcmdldCBvZgorICAgICAgICBhIHdoZWVsIGV2ZW50
LiBFdmVudEhhbmRsZXIgd291bGQgbGF0Y2ggdG8gdGhlIGVuY2xvc2luZyBzY3JvbGxhYmxlIHJl
Z2lvbiAoaW4gdGhpcyBjYXNlLCB0aGUKKyAgICAgICAgbm9uLXNjcm9sbGFibGUgaWZyYW1lKSBh
bmQgd291bGQgZWF0IHNjcm9sbCBldmVudHMsIHByZXZlbnRpbmcgYW55dGhpbmcgZnJvbSB3b3Jr
aW5nLgorICAgICAgICAKKyAgICAgICAgVGhlIGZpeCBpcyBhcyBmb2xsb3dzOgorICAgICAgICAx
LiBNb2RpZnkgdGhlIGxvZ2ljIHRvIHVuZGVyc3RhbmQgYSBzdGFjayBvZiBsYXRjaGVkIHN0YXRl
cywgc28gdGhhdCB3ZSBjYW4gZGlzY2FyZWQgJ2ludmFsaWQnCisgICAgICAgICAgIGxhdGNoZWQg
c3RhdGVzIGFzIHdlIGRpc2NvdmVyIHRoZW0uCisgICAgICAgIDIuIFJldmlzZSB0aGUgbGF0Y2hp
bmcgbG9naWMgc28gdGhhdCBpdCB1bmRlcnN0YW5kcyB0aGUgY2FzZSB3aGVyZSB0aGUgJ2xhdGNo
ZWQnIG5vZGUgZm9yIHdoZWVsCisgICAgICAgICAgIGV2ZW50cyBpcyBpbiBhIHBhcmVudCBmcmFt
ZSBvZiB0aGUgY3VycmVudCB3aGVlbCBldmVudCB0YXJnZXQuIEZvciBleGFtcGxlLCB3aGVuIHRo
ZSBtb3VzZSBpcyBvdmVyCisgICAgICAgICAgIGFuIGVsZW1lbnQgaW4gYW4gdW5zY3JvbGxhYmxl
IGlmcmFtZSB0aGF0IGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBzY3JvbGxhYmxlIGlmcmFtZS4gV2Ug
c2hvdWxkCisgICAgICAgICAgIGJlIGxhdGNoZWQgdG8gdGhlIHNjcm9sbGFibGUgaWZyYW1lIHNv
IGV2ZW50cyBnbyB0byB0aGUgcmlnaHQgcGxhY2UuCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFu
ZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZl
bnQpOiBVcGRhdGUgdG8gY2FsbCBuZXcgJ3N0YWNrJyB2ZXJzaW9ucyBvZiBsYXRjaAorICAgICAg
ICBzdGF0ZSBtZXRob2RzLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhckxh
dGNoZWRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZh
dWx0V2hlZWxFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL01haW5GcmFtZS5j
cHA6IFVwZGF0ZSB0byBzdG9yZSBhIHN0YWNrIG9mIGxhdGNoZWQgc3RhdGVzLiBQcm92aWRlIG1l
dGhvZHMgdG8gY29udHJvbAorICAgICAgICB0aGUgbGlmZXRpbWUgb2YgdGhlIHN0YWNrIGFuZCBp
dHMgZWxlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpNYWluRnJhbWU6Ok1haW5GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYWluRnJhbWU6OmxhdGNoaW5nU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpbkZyYW1lOjpwdXNoTmV3TGF0Y2hpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNYWluRnJhbWU6OnJlc2V0TGF0Y2hpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
RnJhbWU6OnBvcExhdGNoaW5nU3RhdGUpOgorICAgICAgICAqIHBhZ2UvTWFpbkZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
bGF0Y2hpbmdJc0xvY2tlZFRvUGFyZW50T2ZUaGlzRnJhbWUpOiBBZGRlZCBoZWxwZXIgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFyZUZvcldo
ZWVsRXZlbnRzKTogVXBkYXRlIHRvIHVzZSBuZXcgJ3N0YWNrJyBzdHlsZSBsYXRjaAorICAgICAg
ICBtZXRob2RzLiBBbHNvLCBpZiB3ZSBhcmUgbGF0Y2hlZCB0byBhIGZyYW1lIHRoYXQgY29udGFp
bnMgdGhlIGZyYW1lIHdlIGFyZSBjdXJyZW50bHkgZXZhbHVhdGluZywKKyAgICAgICAgZG9uJ3Qg
cmVwbGFjZSB0aGUgY3VycmVudCBldmVudCB0YXJnZXQgd2l0aCB0aGUgbGF0Y2hlZCB0YXJnZXRz
IGJlY2F1c2UgKDEpIHRoZXkgd2lsbCBiZSBwcm9jZXNzZWQKKyAgICAgICAgaW4gdGhlIGVuY2xv
c2luZyBzY29wZSB3aGVuIHdlIGxlYXZlIHRoaXMgcm91dGluZSwgYW5kICgyKSBpZiB3ZSBkbyBj
aGFuZ2UgdGFyZ2V0cyB0byB0aGUgbGF0Y2hlZAorICAgICAgICBlbGVtZW50cyB3ZSBjcmVhdGUg
YW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZv
cm1Db21wbGV0ZVdoZWVsRXZlbnQpOiBXZSB3YW50IHRvIG1hcmsgdGhlIGVsZW1lbnQgYXMgaGF2
aW5nIHN0YXJ0ZWQKKyAgICAgICAgYXQgdGhlIHNjcm9sbCBsaW1pdCByZWdhcmRsZXNzIG9mIHdo
YXQgdGhlIHdoZWVsIGV2ZW50IGhhbmRsZXIgcmV0dXJucyBhcyBpdHMgc3VjY2VzcyBzdGF0ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3Jt
V2lkZ2V0V2hlZWxFdmVudCk6IFJldmlzZSB0byBoYW5kbGUgdGhlIG5ldworICAgICAgICBzdGFj
ay1iYXNlZCBsYXRjaGluZyBtZXRob2RzLgorCiAyMDE0LTEyLTIzICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIFdlYkNvbnRleHQgdG8gV2ViUHJvY2Vzc1Bv
b2wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDE3NzY1
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjY4Nyw3ICsyNjg3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZl
bnQoY29ucwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChldmVudC5waGFzZSgpID09IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAmJiBldmVudC5tb21lbnR1bVBoYXNlKCkgPT0gUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQotICAgICAgICBtX2ZyYW1lLm1haW5GcmFtZSgpLmxh
dGNoaW5nU3RhdGUoKS0+Y2xlYXIoKTsKKyAgICAgICAgbV9mcmFtZS5tYWluRnJhbWUoKS5yZXNl
dExhdGNoaW5nU3RhdGUoKTsKICNlbmRpZgogCiAgICAgLy8gRklYTUU6IEl0IHNob3VsZCBub3Qg
YmUgbmVjZXNzYXJ5IHRvIGRvIHRoaXMgbXV0YXRpb24gaGVyZS4KQEAgLTI3MzQsNyArMjczNCw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnMKIHZvaWQgRXZlbnRI
YW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIG1f
ZnJhbWUubWFpbkZyYW1lKCkubGF0Y2hpbmdTdGF0ZSgpLT5jbGVhcigpOworICAgIG1fZnJhbWUu
bWFpbkZyYW1lKCkucmVzZXRMYXRjaGluZ1N0YXRlKCk7CiAjZW5kaWYKICAgICBtX2ZyYW1lLm1h
aW5GcmFtZSgpLndoZWVsRXZlbnREZWx0YVRyYWNrZXIoKS0+ZW5kVHJhY2tpbmdEZWx0YXMoKTsK
IH0KQEAgLTI3NDgsOCArMjc0OCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0V2hlZWxF
dmVudEhhbmQKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBTY3JvbGxMYXRjaGluZ1N0YXRlKiBs
YXRjaGVkU3RhdGUgPSBtX2ZyYW1lLm1haW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKLSAgICBB
U1NFUlQobGF0Y2hlZFN0YXRlKTsKLSAgICBFbGVtZW50KiBzdG9wRWxlbWVudCA9IGxhdGNoZWRT
dGF0ZS0+cHJldmlvdXNXaGVlbFNjcm9sbGVkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHN0b3BF
bGVtZW50ID0gKGxhdGNoZWRTdGF0ZSkgPyBsYXRjaGVkU3RhdGUtPnByZXZpb3VzV2hlZWxTY3Jv
bGxlZEVsZW1lbnQoKSA6IG51bGxwdHI7CiAKICAgICAvLyBXb3JrYXJvdW5kIGZvciBzY3JvbGxp
bmcgaXNzdWVzIDxyZGFyOi8vcHJvYmxlbS8xNDc1ODYxNT4uCiAgICAgaWYgKG1fZnJhbWUubWFp
bkZyYW1lKCkud2hlZWxFdmVudERlbHRhVHJhY2tlcigpLT5pc1RyYWNraW5nRGVsdGFzKCkpCkBA
IC0yNzY3LDcgKzI3NjYsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVsRXZlbnRI
YW5kCiAgICAgICAgIHdoZWVsRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgCiAjaWYg
UExBVEZPUk0oTUFDKQotICAgIGlmICghbGF0Y2hlZFN0YXRlLT53aGVlbEV2ZW50RWxlbWVudCgp
KQorICAgIGlmIChsYXRjaGVkU3RhdGUgJiYgIWxhdGNoZWRTdGF0ZS0+d2hlZWxFdmVudEVsZW1l
bnQoKSkKICAgICAgICAgbGF0Y2hlZFN0YXRlLT5zZXRQcmV2aW91c1doZWVsU2Nyb2xsZWRFbGVt
ZW50KHN0b3BFbGVtZW50KTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9N
YWluRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmNwcAkocmV2aXNpb24gMTc3NjUxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw2IEBAIGlubGluZSBNYWluRnJhbWU6Ok1h
aW5GcmFtZShQYWdlJiBwYWdlLCAKICAgICA6IEZyYW1lKHBhZ2UsIG51bGxwdHIsICpjb25maWd1
cmF0aW9uLmxvYWRlckNsaWVudEZvck1haW5GcmFtZSkKICAgICAsIG1fc2VsZk9ubHlSZWZDb3Vu
dCgwKQogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAsIG1fbGF0Y2hpbmdTdGF0ZShzdGQ6Om1ha2Vf
dW5pcXVlPFNjcm9sbExhdGNoaW5nU3RhdGU+KCkpCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJP
TFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKICAgICAsIG1fc2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI+KCp0aGlzKSkKICNlbmRpZgpAQCAtODgsMTMgKzg3LDI5IEBAIHZvaWQgTWFpbkZyYW1l
Ojpkcm9wQ2hpbGRyZW4oKQogfQogCiAjaWYgUExBVEZPUk0oTUFDKQotdm9pZCBNYWluRnJhbWU6
OnJlc2V0TGF0Y2hpbmdTdGF0ZSgpCitTY3JvbGxMYXRjaGluZ1N0YXRlKiBNYWluRnJhbWU6Omxh
dGNoaW5nU3RhdGUoKQogewotICAgIGlmICghbV9sYXRjaGluZ1N0YXRlKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKCFtX2xhdGNoaW5nU3RhdGUuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBtX2xhdGNoaW5nU3RhdGUubGFzdCgpLmdldCgpOworfQorCit2
b2lkIE1haW5GcmFtZTo6cHVzaE5ld0xhdGNoaW5nU3RhdGUoKQoreworICAgIG1fbGF0Y2hpbmdT
dGF0ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxMYXRjaGluZ1N0YXRlPigpKTsKK30K
IAotICAgIG1fbGF0Y2hpbmdTdGF0ZS0+Y2xlYXIoKTsKK3ZvaWQgTWFpbkZyYW1lOjpyZXNldExh
dGNoaW5nU3RhdGUoKQoreworICAgIG1fbGF0Y2hpbmdTdGF0ZS5jbGVhcigpOwogfQorICAgIAor
dm9pZCBNYWluRnJhbWU6OnBvcExhdGNoaW5nU3RhdGUoKQoreworICAgIG1fbGF0Y2hpbmdTdGF0
ZS5yZW1vdmVMYXN0KCk7Cit9CisKICNlbmRpZgogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL01haW5GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZy
YW1lLmgJKHJldmlzaW9uIDE3NzY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgTWFpbkZyYW1lX2gK
IAogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTU0LDcgKzU1LDkgQEAgcHVibGljOgogICAgIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXImIHNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKSB7IHJldHVybiAqbV9z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOyB9CiAjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKIAotICAgIFNjcm9s
bExhdGNoaW5nU3RhdGUqIGxhdGNoaW5nU3RhdGUoKSB7IHJldHVybiBtX2xhdGNoaW5nU3RhdGUu
Z2V0KCk7IH0KKyAgICBTY3JvbGxMYXRjaGluZ1N0YXRlKiBsYXRjaGluZ1N0YXRlKCk7CisgICAg
dm9pZCBwdXNoTmV3TGF0Y2hpbmdTdGF0ZSgpOworICAgIHZvaWQgcG9wTGF0Y2hpbmdTdGF0ZSgp
OwogICAgIHZvaWQgcmVzZXRMYXRjaGluZ1N0YXRlKCk7CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQogCkBAIC02OCw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zZWxmT25seVJl
ZkNvdW50OwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxM
YXRjaGluZ1N0YXRlPiBtX2xhdGNoaW5nU3RhdGU7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxMYXRjaGluZ1N0YXRlPj4gbV9sYXRjaGluZ1N0YXRlOwogI2lmIEVOQUJMRShTRVJW
SUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fc2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMTc3NjUxKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MjQsNyArODI0LDMy
IEBAIHN0YXRpYyBib29sIGxhdGNoaW5nSXNMb2NrZWRUb1BsYXRmb3JtRnIKIAogICAgIHJldHVy
biBmYWxzZTsKIH0KKworc3RhdGljIGJvb2wgbGF0Y2hpbmdJc0xvY2tlZFRvUGFyZW50T2ZUaGlz
RnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lKQoreworICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxh
dGNoZWRTdGF0ZSA9IGZyYW1lLm1haW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKKyAgICBpZiAo
IWxhdGNoZWRTdGF0ZSB8fCAhbGF0Y2hlZFN0YXRlLT5mcmFtZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoJmZyYW1lID09IGxhdGNoZWRTdGF0ZS0+ZnJhbWUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgRnJhbWVUcmVlKiBmcmFtZVRyZWUgPSAmZnJhbWUudHJl
ZSgpOworCisgICAgd2hpbGUgKGZyYW1lVHJlZSkgeworICAgICAgICBGcmFtZSogcGFyZW50ID0g
ZnJhbWVUcmVlLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBpZiAocGFyZW50ID09IGxhdGNoZWRTdGF0ZS0+ZnJhbWUoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGZyYW1lVHJlZSA9ICZwYXJlbnQtPnRy
ZWUoKTsKKyAgICB9CiAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEV2ZW50SGFu
ZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlZWxFdmVudHMoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFJlZlB0cjxFbGVt
ZW50PiYgd2hlZWxFdmVudFRhcmdldCwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiBzY3JvbGxhYmxl
Q29udGFpbmVyLCBTY3JvbGxhYmxlQXJlYSomIHNjcm9sbGFibGVBcmVhLCBib29sJiBpc092ZXJX
aWRnZXQpCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CkBAIC04NTIs
OCArODc3LDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFyZUZvcldoZQogICAg
IH0KICAgICAKICAgICBTY3JvbGxMYXRjaGluZ1N0YXRlKiBsYXRjaGluZ1N0YXRlID0gbV9mcmFt
ZS5tYWluRnJhbWUoKS5sYXRjaGluZ1N0YXRlKCk7Ci0gICAgQVNTRVJUKGxhdGNoaW5nU3RhdGUp
OwogICAgIGlmICh3aGVlbEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKSkgeworICAgICAg
ICBtX2ZyYW1lLm1haW5GcmFtZSgpLnB1c2hOZXdMYXRjaGluZ1N0YXRlKCk7CisgICAgICAgIGxh
dGNoaW5nU3RhdGUgPSBtX2ZyYW1lLm1haW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKICAgICAg
ICAgaWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVDb250YWluZXIpCiAgICAgICAgICAg
ICBsYXRjaGluZ1N0YXRlLT5zZXRTdGFydGVkR2VzdHVyZUF0U2Nyb2xsTGltaXQoc2Nyb2xsZWRU
b0VkZ2VJbkRvbWluYW50RGlyZWN0aW9uKCpzY3JvbGxhYmxlQ29udGFpbmVyLCAqc2Nyb2xsYWJs
ZUFyZWEsIHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpKTsKICAgICAg
ICAgZWxzZQpAQCAtODY4LDEwICs4OTQsMTMgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3Jt
UHJlcGFyZUZvcldoZQogICAgIH0gZWxzZSBpZiAod2hlZWxFdmVudC5zaG91bGRSZXNldExhdGNo
aW5nKCkpCiAgICAgICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7CiAKLSAgICBpZiAoIXdoZWVsRXZl
bnQuc2hvdWxkUmVzZXRMYXRjaGluZygpICYmIGxhdGNoaW5nU3RhdGUtPndoZWVsRXZlbnRFbGVt
ZW50KCkpIHsKKyAgICBpZiAoIXdoZWVsRXZlbnQuc2hvdWxkUmVzZXRMYXRjaGluZygpICYmIGxh
dGNoaW5nU3RhdGUgJiYgbGF0Y2hpbmdTdGF0ZS0+d2hlZWxFdmVudEVsZW1lbnQoKSkgewogICAg
ICAgICBpZiAobGF0Y2hpbmdJc0xvY2tlZFRvUGxhdGZvcm1GcmFtZShtX2ZyYW1lKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAorICAgICAgICBpZiAobGF0Y2hpbmdJc0xvY2tlZFRvUGFyZW50T2ZU
aGlzRnJhbWUobV9mcmFtZSkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgd2hlZWxF
dmVudFRhcmdldCA9IGxhdGNoaW5nU3RhdGUtPndoZWVsRXZlbnRFbGVtZW50KCk7CiAgICAgICAg
IGlzT3ZlcldpZGdldCA9IGxhdGNoaW5nU3RhdGUtPndpZGdldElzTGF0Y2hlZCgpOwogICAgIH0K
QEAgLTkwNywxNyArOTM2LDE2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRl
V2hlZWwKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsKIAogICAgIFNjcm9s
bExhdGNoaW5nU3RhdGUqIGxhdGNoaW5nU3RhdGUgPSBtX2ZyYW1lLm1haW5GcmFtZSgpLmxhdGNo
aW5nU3RhdGUoKTsKLSAgICBBU1NFUlQobGF0Y2hpbmdTdGF0ZSk7Ci0gICAgaWYgKHdoZWVsRXZl
bnQudXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpICYmIGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVD
b250YWluZXIoKSkgeworICAgIGlmICh3aGVlbEV2ZW50LnVzZUxhdGNoZWRFdmVudEVsZW1lbnQo
KSAmJiBsYXRjaGluZ1N0YXRlICYmIGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIo
KSkgewogICAgICAgICB2aWV3ID0gZnJhbWVWaWV3Rm9yTGF0Y2hpbmdTdGF0ZShtX2ZyYW1lLCBs
YXRjaGluZ1N0YXRlKTsKICAgICAgICAgaWYgKCF2aWV3IHx8ICF2aWV3LT5mcmFtZSgpLmlzTWFp
bkZyYW1lKCkpIHsKICAgICAgICAgICAgIGJvb2wgZGlkSGFuZGxlV2hlZWxFdmVudCA9IHZpZXcg
JiYgdmlldy0+d2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAgICAgICAgICAgIGlmICghZGlkSGFu
ZGxlV2hlZWxFdmVudCAmJiBzY3JvbGxhYmxlQ29udGFpbmVyID09IGxhdGNoaW5nU3RhdGUtPnNj
cm9sbGFibGVDb250YWluZXIoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVDb250YWlu
ZXIgPT0gbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgYSBzY3JvbGwgZXZlbnQsIGFuZCBoYXZl
IG5vd2hlcmUgbGVmdCB0byBzY3JvbGwsIGFsbG93CiAgICAgICAgICAgICAgICAgLy8gdGhlIGVu
Y2xvc2luZyBmcmFtZSB0byBoYW5kbGUgdGhlIHNjcm9sbC4KICAgICAgICAgICAgICAgICBkaWRI
YW5kbGVXaGVlbEV2ZW50ID0gIWxhdGNoaW5nU3RhdGUtPnN0YXJ0ZWRHZXN0dXJlQXRTY3JvbGxM
aW1pdCgpOwogICAgICAgICAgICAgICAgIGlmICghZGlkSGFuZGxlV2hlZWxFdmVudCkKLSAgICAg
ICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS0+c2V0RnJhbWUobnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWUubWFpbkZyYW1lKCkucG9wTGF0Y2hpbmdTdGF0ZSgpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJZiB0aGUgcGxhdGZvcm0gd2lkZ2V0IGlzIGhh
bmRsaW5nIHRoZSBldmVudCwgd2UgYWx3YXlzIHdhbnQgdG8gcmV0dXJuIGZhbHNlCkBAIC05NTAs
NyArOTc4LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0ZgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxhdGNoaW5nU3Rh
dGUgPSBtX2ZyYW1lLm1haW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKLSAgICBBU1NFUlQobGF0
Y2hpbmdTdGF0ZSk7CisgICAgaWYgKCFsYXRjaGluZ1N0YXRlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICBpZiAod2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgJiYgbGF0
Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigpICYmIHNjcm9sbGFibGVDb250YWluZXIg
PT0gbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4g
IWxhdGNoaW5nU3RhdGUtPnN0YXJ0ZWRHZXN0dXJlQXRTY3JvbGxMaW1pdCgpOwogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzc2OTcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNC0xMi0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBDYW5ub3Qgc2Nyb2xsIHdoZW4gYSBub24tc2Ny
b2xsYWJsZSBpZnJhbWUgaXMgY29udGFpbmVkIGluc2lkZSBhIHNjcm9sbGFibGUgaWZyYW1lCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk5MTQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NzUwOTEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3Qvc2Nyb2xsaW5nL3Nj
cm9sbC1uZXN0ZWQtaWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1uZXN0ZWQtaWZyYW1lLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L3Njcm9sbGluZy9zY3JvbGxfbmVzdGVkX2lmcmFt
ZV90ZXN0X2lubmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L3Nj
cm9sbGluZy9zY3JvbGxfbmVzdGVkX2lmcmFtZV90ZXN0X291dGVyLmh0bWw6IEFkZGVkLgorCiAy
MDE0LTEyLTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW5j
b3JyZWN0IGRhc2hlZCBhbmQgZG90dGVkIGJvcmRlciBwYWludGluZy4KSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtbmVzdGVkLWlmcmFtZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qvc2Ny
b2xsaW5nL3Njcm9sbC1uZXN0ZWQtaWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtbmVzdGVkLWlm
cmFtZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorUHV0IG1v
dXNlIGluc2lkZSB0aGUgaWZyYW1lIChiZWxvdykgYW5kIGZsaWNrIGRvd253YXJkcworCitUZXN0
cyB0aGF0IGlmcmFtZSBkb2VzIHNjcm9sbCB3aGVuIGlubmVyIGlmcmFtZSBpcyBOT1Qgc2Nyb2xs
YWJsZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorSUZyYW1lIGRpc3BsYXkgaGVpZ2h0ID0g
MTAwMAorTW91c2UgbW92ZWQgdG8gKDI4LCA4OCkKK1BBU1MgaWZyYW1lIGRpZCBzY3JvbGwuCisK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtbmVz
dGVkLWlmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L3Njcm9sbGluZy9zY3JvbGwtbmVzdGVkLWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1uZXN0ZWQtaWZy
YW1lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwOi8vd3d3LnczLm9y
Zy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1XaGVlbEV2ZW50Ij4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxz
dHlsZT4KKyAgICBpZnJhbWUgeworICAgICAgICB3aWR0aDogODAwcHg7CisgICAgICAgIGhlaWdo
dDogMTAwMHB4OworICAgIH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
PgorCit2YXIgaWZyYW1lVGFyZ2V0OwordmFyIHBhZ2VTY3JvbGxQb3NpdGlvbkJlZm9yZTsKK3Zh
ciBpRnJhbWVTY3JvbGxQb3NpdGlvbkJlZm9yZTsKK3ZhciBjb250aW51ZUNvdW50ID0gNTsKKwor
ZnVuY3Rpb24gY2hlY2tGb3JTY3JvbGwoKSB7CisKKyAgICAvLyBUaGUgSUZyYW1lIHNob3VsZCBu
b3QgaGF2ZSBzY3JvbGxlZCBhdCBhbGwuCisgICAgdmFyIHBhZ2VTY3JvbGxQb3NpdGlvbkFmdGVy
ID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7CisgICAgdmFyIGlGcmFtZVNjcm9sbFBvc2l0aW9u
QWZ0ZXIgPSB3aW5kb3cuZnJhbWVzWydzY3JvbGxhYmxlX2lmcmFtZSddLmRvY3VtZW50LmJvZHku
c2Nyb2xsVG9wOworCisgICAgaWYgKGlGcmFtZVNjcm9sbFBvc2l0aW9uQmVmb3JlICE9IGlGcmFt
ZVNjcm9sbFBvc2l0aW9uQWZ0ZXIpCisgICAgICAgIHRlc3RQYXNzZWQoImlmcmFtZSBkaWQgc2Ny
b2xsLiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiaWZyYW1lIGRpZCBOT1Qgc2Ny
b2xsLiIpOworCisgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHNj
cm9sbFRlc3QoKSB7CisgICAgLy8gU2VlIHdoZXJlIG91ciBJRnJhbWUgbGl2ZXM6CisgICAgcGFn
ZVNjcm9sbFBvc2l0aW9uQmVmb3JlID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7CisKKyAgICBp
ZnJhbWVUYXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Nyb2xsYWJsZV9pZnJhbWUn
KTsKKworICAgIHZhciBpRnJhbWVCb2R5ID0gd2luZG93LmZyYW1lc1snc2Nyb2xsYWJsZV9pZnJh
bWUnXS5kb2N1bWVudC5ib2R5OworICAgIGlGcmFtZUJvZHkuc2Nyb2xsVG9wID0gaUZyYW1lQm9k
eS5zY3JvbGxIZWlnaHQgLSBpZnJhbWVUYXJnZXQuY2xpZW50SGVpZ2h0IC0gMTAwOworCisgICAg
aUZyYW1lU2Nyb2xsUG9zaXRpb25CZWZvcmUgPSBpRnJhbWVCb2R5LnNjcm9sbFRvcDsKKworICAg
IC8vIFNjcm9sbCB0aGUgI3NvdXJjZSB1bnRpbCB3ZSByZWFjaCB0aGUgI3RhcmdldC4KKyAgICB2
YXIgc3RhcnRQb3NYID0gaWZyYW1lVGFyZ2V0Lm9mZnNldExlZnQgKyAyMDsKKyAgICBkZWJ1Zygi
SUZyYW1lIGRpc3BsYXkgaGVpZ2h0ID0gIiArIGlmcmFtZVRhcmdldC5jbGllbnRIZWlnaHQpOwor
ICAgIHZhciBzdGFydFBvc1kgPSBpZnJhbWVUYXJnZXQub2Zmc2V0VG9wICsgNjA7IC8vIE9uZSB3
aGVlbCB0dXJuIGJlZm9yZSBlbmQuCisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oc3RhcnRQ
b3NYLCBzdGFydFBvc1kpOyAvLyBNYWtlIHN1cmUgd2UgYXJlIGp1c3Qgb3V0c2lkZSB0aGUgaUZy
YW1lCisgICAgZGVidWcoIk1vdXNlIG1vdmVkIHRvICgiICsgc3RhcnRQb3NYICsgIiwgIiArIHN0
YXJ0UG9zWSArICIpIik7CisgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFu
ZE1vbWVudHVtUGhhc2VzKDAsIC0xLCAnYmVnYW4nLCAnbm9uZScsIHRydWUpOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgJ2No
YW5nZWQnLCAnbm9uZScsIHRydWUpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRo
V2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgJ2NoYW5nZWQnLCAnbm9uZScsIHRydWUpOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygw
LCAwLCAnZW5kZWQnLCAnbm9uZScsIHRydWUpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xs
QnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgJ25vbmUnLCAnYmVnaW4nLCB0cnVl
KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFz
ZXMoMCwgLTEsICdub25lJywgJ2NvbnRpbnVlJywgdHJ1ZSk7CisgICAgZXZlbnRTZW5kZXIubW91
c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIC0xLCAnbm9uZScsICdjb250
aW51ZScsIHRydWUpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRN
b21lbnR1bVBoYXNlcygwLCAtMSwgJ25vbmUnLCAnY29udGludWUnLCB0cnVlKTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgLTEsICdu
b25lJywgJ2NvbnRpbnVlJywgdHJ1ZSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdp
dGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIDAsICdub25lJywgJ2VuZCcsIHRydWUpOworICAg
IHNldFRpbWVvdXQoY2hlY2tGb3JTY3JvbGwsIDEwMCk7Cit9CisKK2Z1bmN0aW9uIHNldHVwVG9w
TGV2ZWwoKSB7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgICAgIHNldFRpbWVvdXQoc2Nyb2xsVGVzdCwg
MTAwMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIG1lc3NhZ2VMb2NhdGlvbiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdwYXJlbnQnKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAi
PHA+VGhpcyB0ZXN0IGlzIGJldHRlciBydW4gdW5kZXIgRHVtcFJlbmRlclRyZWUuIFRvIG1hbnVh
bGx5IHRlc3QgaXQsIHBsYWNlIHRoZSBtb3VzZSBwb2ludGVyPGJyLz4iCisgICAgICAgICAgICAr
ICJpbnNpZGUgdGhlIElGcmFtZSwgdGhlbiB1c2UgdGhlIG1vdXNlIHdoZWVsIG9yIGEgdHdvLWZp
bmdlciBzd2lwZSB0byBzY3JvbGwgdGhlIElGcmFtZSB0byB0aGUgYm90dG9tIChhbmQgYmV5b25k
KS48YnIvPiIKKyAgICAgICAgICAgICsgIjxici8+PGJyLz4iCisgICAgICAgICAgICArICJUaGUg
dGVzdCBwYXNzZXMgaWYgeW91IHNjcm9sbCBmYXIgZW5vdWdoIHRvIHNlZSB0aGUgcm93IG9mIEVO
RCBsYWJlbHMgYnV0IHRoZSBtYWluIHBhZ2UgZG9lcyBub3Qgc2Nyb2xsLjwvcD4iOworICAgICAg
ICBtZXNzYWdlTG9jYXRpb24uYXBwZW5kQ2hpbGQobWVzc2FnZSk7CisgICAgfQorfQorCis8L3Nj
cmlwdD4KKzxkaXYgaWQ9InBhcmVudCIgc3R5bGU9ImhlaWdodDogMjAwMHB4Ij4KKyAgICA8ZGl2
IGlkPSJzb3VyY2UiIHN0eWxlPSJoZWlnaHQ6IDIwcHgiPgorICAgICAgICBQdXQgbW91c2UgaW5z
aWRlIHRoZSBpZnJhbWUgKGJlbG93KSBhbmQgZmxpY2sgZG93bndhcmRzCisgICAgPC9kaXY+Cisg
ICAgPGlmcmFtZSBpZD0ic2Nyb2xsYWJsZV9pZnJhbWUiIHNyYz0ic2Nyb2xsX25lc3RlZF9pZnJh
bWVfdGVzdF9vdXRlci5odG1sIiBvbmxvYWQ9InNldHVwVG9wTGV2ZWwoKTsiPgorICAgIDwvaWZy
YW1lPgorPC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiVGVzdHMgdGhhdCBpZnJhbWUgZG9lcyBzY3JvbGwgd2hlbiBpbm5lciBpZnJhbWUgaXMg
Tk9UIHNjcm9sbGFibGUuIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Njcm9sbGluZy9zY3JvbGxfbmVzdGVk
X2lmcmFtZV90ZXN0X2lubmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbF9uZXN0ZWRfaWZyYW1lX3Rlc3RfaW5uZXIuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3Njcm9sbGlu
Zy9zY3JvbGxfbmVzdGVkX2lmcmFtZV90ZXN0X2lubmVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPHN0
eWxlPgorICAgICAgICAKKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBoZWlnaHQ6IDIwMDBw
eDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHA+TG9yZW0g
aXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBk
byBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxp
cXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1
bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBE
dWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQg
ZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNp
bnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2Zm
aWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS48L3A+CisKKzxwPkxvcmVt
IGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQg
ZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFs
aXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24g
dWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4g
RHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0
IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBz
aW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9m
ZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9wPgorCis8cD5Mb3Jl
bSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBh
bGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9u
IHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQu
IER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxp
dCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIg
c2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBv
ZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLjwvcD4KKworPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qvc2Nyb2xsaW5n
L3Njcm9sbF9uZXN0ZWRfaWZyYW1lX3Rlc3Rfb3V0ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsX25lc3RlZF9pZnJhbWVf
dGVzdF9vdXRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbF9uZXN0ZWRfaWZyYW1lX3Rlc3Rfb3V0ZXIuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8
aGVhZD4KKyAgICA8c3R5bGU+CisgICAgYm9keSB7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6
IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB3aGl0ZSwgc2lsdmVyIDQwMHB4
KTsKKyAgICB9CisgICAgaWZyYW1lIHsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg
ICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgIGhlaWdodDogMzAwMHB4OworICAgICAgICBwYWRk
aW5nOiAwOworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OworICAgIH0KKyAgICA8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lICBpZD0ibm9uc2Nyb2xsYWJsZV9pZnJhbWUi
IHNyYz0ic2Nyb2xsX25lc3RlZF9pZnJhbWVfdGVzdF9pbm5lci5odG1sIj48L2lmcmFtZT4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="268611"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>