<?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>209110</bug_id>
          
          <creation_ts>2020-03-14 12:16:26 -0700</creation_ts>
          <short_desc>Separate out adding node to hit test result from determining whether hit testing should continue</short_desc>
          <delta_ts>2022-10-25 08:50:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=209112</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=99656</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=89990</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>209107</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>beidson</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1630070</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 12:16:26 -0700</bug_when>
    <thetext>Separate out adding node to hit test result from determining whether hit testing should continue.

Motivation:

HitTestResult::m_listBasedTestResult must stay in sync with HitTestResult::m_innerNode: if code sets an inner node then it MUST also add that node to the list based result set, if list based hit testing is being performed. Currently only convention keeps them in sync and you will see code like:

[[
if (visibleToHitTesting() &amp;&amp; action == HitTestForeground &amp;&amp; locationInContainer.intersects(boundsRect)) {
    updateHitTestResult(result, locationInContainer.point() - toLayoutSize(adjustedLocation)); &lt;--- this updates HitTestResult::m_innerNode
    if (result.addNodeToListBasedTestResult(element(), request, locationInContainer, boundsRect) == HitTestProgress::Stop) &lt;-- this HitTestResult::m_listBasedTestResult 
        return true;
}
]]
&lt;https://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBox.cpp?rev=258400#L1252&gt;

scattered all over in the hit testing portion of the rendering code. My goal is to move result.addNodeToListBasedTestResult() inside updateHitTestResult() to ensure this invariant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630084</commentid>
    <comment_count>1</comment_count>
      <attachid>393591</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 13:48:58 -0700</bug_when>
    <thetext>Created attachment 393591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630106</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 15:50:10 -0700</bug_when>
    <thetext>Dang it! I hit a snag that may prevent me from moving addNodeToListBasedTestResult() into updateHitTestResult() in RenderSVGContainer::nodeAtFloatPoint():


[[
...       
    for (RenderObject* child = lastChild(); child; child = child-&gt;previousSibling()) {
        if (child-&gt;nodeAtFloatPoint(request, result, localPoint, hitTestAction)) {
            updateHitTestResult(result, LayoutPoint(localPoint));
            if (result.addNodeToListBasedTestResult(child-&gt;node(), request, localPoint) == HitTestProgress::Stop)
                return true;
        }
    }
...
]]
&lt;https://trac.webkit.org/browser/trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp?rev=258400#L174&gt;


This code is not like other code. updateHitTestResult() will call RenderObject::updateHitTestResult(), which will set inner node to RenderObject::node(), but addNodeToListBasedTestResult() is adding child-&gt;node() to the set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630135</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 21:12:40 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #2)
&gt; Dang it! I hit a snag that may prevent me from moving
&gt; addNodeToListBasedTestResult() into updateHitTestResult() in
&gt; RenderSVGContainer::nodeAtFloatPoint():
&gt; 
&gt; 
&gt; [[
&gt; ...       
&gt;     for (RenderObject* child = lastChild(); child; child =
&gt; child-&gt;previousSibling()) {
&gt;         if (child-&gt;nodeAtFloatPoint(request, result, localPoint,
&gt; hitTestAction)) {
&gt;             updateHitTestResult(result, LayoutPoint(localPoint));
&gt;             if (result.addNodeToListBasedTestResult(child-&gt;node(), request,
&gt; localPoint) == HitTestProgress::Stop)


From code inspection and thinking, I am leaning towards: it is a bug to pass child-&gt;node() here. The child should have added done that itself in its nodeAtFloatPoint.

Having said that, this bug likely has 0 visual manifestations because the node list is a ListHashSet. That means, if the child added itself as I expect with this design then adding the child again (a duplicate) will be ignored since ListHashSet guarantees unique elements.

As I type this, I am led to the conclusion that I am not snagged: it is ok to proceed and move the addNode...() code into updateHitTestResult(). Moreover, it will actually make the code correct. Anyway, I am going to try it BEFORE landing this patch just in case some misreading of the code reveals another problem. This way I avoid having to revert this patch.
&gt;                 return true;
&gt;         }
&gt;     }
&gt; ...
&gt; ]]
&gt; &lt;https://trac.webkit.org/browser/trunk/Source/WebCore/rendering/svg/
&gt; RenderSVGContainer.cpp?rev=258400#L174&gt;
&gt; 
&gt; 
&gt; This code is not like other code. updateHitTestResult() will call
&gt; RenderObject::updateHitTestResult(), which will set inner node to
&gt; RenderObject::node(), but addNodeToListBasedTestResult() is adding
&gt; child-&gt;node() to the set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1908113</commentid>
    <comment_count>4</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-10-25 08:50:40 -0700</bug_when>
    <thetext>I checked via BugID and it seems this r+ patch didn&apos;t landed and it seems that old code is still present:

e.g.,

https://github.com/WebKit/WebKit/blob/2b778871c42d1772cfe9a97af335b3361d446439/Source/WebCore/rendering/svg/RenderSVGRoot.cpp#L504

Is this something needed anymore? Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393591</attachid>
            <date>2020-03-14 13:48:58 -0700</date>
            <delta_ts>2020-03-14 14:17:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209110-20200314134857.patch</filename>
            <type>text/plain</type>
            <size>26204</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwYjIzYmJiZjQ4ZjJi
MGNmYTEwYzczN2Y5MGFkOWExOTA4N2Q3MC4uOWE1YmI2YjIxMWZlZmVlZmRhYWFlYjMzOGJkYTY5
MjEyZTVjM2Y0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIwLTAzLTE0ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBvdXQgYWRk
aW5nIG5vZGUgdG8gaGl0IHRlc3QgcmVzdWx0IGZyb20gZGV0ZXJtaW5pbmcgd2hldGhlciBoaXQg
dGVzdGluZyBzaG91bGQgY29udGludWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTExMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4dHJhY3QgdGhlIGxvZ2ljIGZvciBkZXRlcm1pbmluZyB3aGV0aGVy
IHRvIGNvbnRpbnVlIGhpdCB0ZXN0aW5nIGZyb20gdGhlIGxvZ2ljIHRvIGFkZCBhIG5vZGUKKyAg
ICAgICAgdG8gdGhlIGhpdCB0ZXN0IHJlc3VsdCBzZXQgKHdoZW4gbGlzdC1iYXNlZCBoaXQgdGVz
dGluZyBpcyB1c2VkLCBlLmcuIGluIGltcGwgb2YgZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQo
KSkuCisKKyAgICAgICAgTXkgcHJpbWFyeSBtb3RpdmF0aW9uIGZvciB0aGlzIGNoYW5nZSBpcyB0
byBtb3ZlIHRoZSBjYWxsIHRvIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RS
ZXN1bHQoKQorICAgICAgICBpbnRvIHRoZSBSZW5kZXJPYmplY3Qgb3ZlcnJpZGVzIG9mIHVwZGF0
ZUhpdFRlc3RSZXN1bHQoKSB0byBlbnN1cmUgdGhlIGludmFyaWFudCBIaXRUZXN0UmVzdWx0Ojpt
X2xpc3RCYXNlZFRlc3RSZXN1bHQKKyAgICAgICAgaXMgbm9uLWVtcHR5IHdoZW4gSGl0VGVzdFJl
c3VsdDo6bV9pbm5lck5vZGUgaXMgbm9uLW51bGwuIEN1cnJlbnRseSB0aGUgZW5naW5lIHJlbGll
cyBvbiBjb252ZW50aW9uCisgICAgICAgIHRvIG1haW50YWluIHRoaXMuIFRoYXQgaXMsIEhpdFRl
c3RSZXN1bHQ6OmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoKSBtdXN0IGJlIGNhbGxlZCBB
RlRFUiB1cGRhdGVIaXRUZXN0UmVzdWx0KCkuCisgICAgICAgIENvbnZlbnRpb25zIGFyZSBlcnJv
ciBwcm9uZSBhbmQgdGhpcyBvbmUgaW4gcGFydGljdWxhciBoYXMgYmVlbiB2aW9sYXRlZCBpbiB0
aGUgcGFzdCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NjU2Pgor
ICAgICAgICBhbmQgaXMgYmVpbmcgdmlvbGF0ZWQgbm93IDxodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MTEyPi4gVGhpcyBwYXRjaCBpcyBhIHN0ZXAKKyAgICAgICAg
dG93YXJkcyBmaXhpbmcgdGhlIGxhdHRlciBidWcgYW5kIHByZXZlbnRpbmcgdGhpcyBwcm9ibGVt
IGFsdG9nZXRoZXIgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBGb3Igbm93LCBldmVyeSBjYWxs
IHNpdGUgdGhhdCB1c2UgdG8gY2FsbCBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCkgbm93
IGNhbGxzIGl0ICsgY2FsbHMKKyAgICAgICAgSGl0VGVzdFJlc3VsdDo6c2hvdWxkQ29udGludWVI
aXRUZXN0aW5nKCkuIEluIGEgc3Vic2VxdWVudCBwYXRjaCBJIHdpbGwgcmVtb3ZlIHRoZSBjYWxs
IHRvIGFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoKSwKKyAgICAgICAgbW92aW5nIGl0IGlu
c2lkZSB1cGRhdGVIaXRUZXN0UmVzdWx0KCkuCisKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpoaXRUZXN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVB
dFBvaW50KToKKyAgICAgICAgVXBkYXRlIGNvZGUgdG8gY2FsbCBhZGROb2RlVG9MaXN0QmFzZWRU
ZXN0UmVzdWx0KCkgYW5kIGNoZWNrIHRoZSByZXN1bHQgb2YgSGl0VGVzdFJlc3VsdDo6c2hvdWxk
Q29udGludWVIaXRUZXN0aW5nKCksCisgICAgICAgIHdoYXQgYWRkTm9kZVRvTGlzdEJhc2VkVGVz
dFJlc3VsdCgpIHVzZSB0byByZXR1cm4sIGFzIHRvIHdoZXRoZXIgdG8gY29udGludWUgaGl0IHRl
c3RpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KTog
RXh0cmFjdCBvdXQgaGl0IHRlc3QgcHJvZ3Jlc3MgZGV0ZXJtaW5hdGlvbiBpbnRvLi4uCisgICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzaG91bGRDb250aW51ZUhpdFRlc3RpbmdDb21t
b24gY29uc3QpOiAuLi50aGlzIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6c2hvdWxkQ29udGludWVIaXRUZXN0aW5nIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6c2hvdWxkQ29udGludWVIaXRUZXN0aW5nKTogQWRk
ZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bm9k
ZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbmxpbmU6OmhpdFRlc3RDdWxsZWRJbmxpbmUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bm9k
ZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmhpdFRlc3RGbG93KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgVXBkYXRlIGNv
ZGUgdG8gY2FsbCBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCkgYW5kIGNoZWNrIHRoZSBy
ZXN1bHQgb2YgSGl0VGVzdFJlc3VsdDo6c2hvdWxkQ29udGludWVIaXRUZXN0aW5nKCksCisgICAg
ICAgIHdoYXQgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgpIHVzZSB0byByZXR1cm4sIGFz
IHRvIHdoZXRoZXIgdG8gY29udGludWUgaGl0IHRlc3RpbmcuCisKIDIwMjAtMDMtMTQgIERhbmll
bCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFNoYXJlIEhpdFRlc3RSZXN1
bHQ6OmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoKSBpbXBsIGZvciBMYXlvdXRSZWN0IGFu
ZCBGbG9hdFJlY3Qgb3ZlcmxvYWRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCmlu
ZGV4IGU4ZGIzNzgzNTgyODM0MjM5NWFkYjQwNWExNmQ1ZmU2NDdiNzFkOTYuLmI0ZmM4MDRiY2E2
NGZiZjQ3YzVlNzA5MmFiMzMwNTY4MjAwZjYxZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuY3BwCkBAIC0zNDksNyArMzQ5LDggQEAgYm9vbCBMaW5lTGF5b3V0OjpoaXRUZXN0KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGMKICAg
ICAgICAgYXV0byYgcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KCptX2JveFRy
ZWUucmVuZGVyZXJGb3JMYXlvdXRCb3gocnVuLmxheW91dEJveCgpKSk7CiAKICAgICAgICAgcmVu
ZGVyZXIudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9p
bnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwotICAgICAgICBpZiAocmVz
dWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIubm9kZSgpLCByZXF1ZXN0
LCBsb2NhdGlvbkluQ29udGFpbmVyLCBydW5SZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3Ap
CisgICAgICAgIHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyLm5v
ZGUoKSwgcmVxdWVzdCk7CisgICAgICAgIGlmIChyZXN1bHQuc2hvdWxkQ29udGludWVIaXRUZXN0
aW5nKHJlbmRlcmVyLm5vZGUoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgcnVuUmVj
dCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAppbmRleCBiNTg0
OTE5ZDRmZDcwMWZlMGNlMjBjZjZkMmFkM2QxNWY0ZWU0M2U2Li4wMThlMjc1N2ZiMDU0ZjU4YTVj
YjMwYjRmNzZlZGY2NzJjN2M0NmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHAKQEAgLTE2Myw3ICsxNjMsOCBAQCBib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAg
IExheW91dFJlY3QgYm91bmRzUmVjdCB7IGFkanVzdGVkTG9jYXRpb24sIExheW91dFNpemUoTGF5
b3V0VW5pdChsb2dpY2FsV2lkdGgoKSksIG1faGVpZ2h0KSB9OwogICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKEhpdFRlc3RMb2NhdGlvbjo6cmVj
dEZvclBvaW50KGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSwgMCwgMCwgMCwgMCkpKSB7CiAg
ICAgICAgIGJsb2NrRmxvdygpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbklu
Q29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwotICAg
ICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoYmxvY2tGbG93KCku
ZWxlbWVudCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBI
aXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgIHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRU
ZXN0UmVzdWx0KGJsb2NrRmxvdygpLmVsZW1lbnQoKSwgcmVxdWVzdCk7CisgICAgICAgIGlmIChy
ZXN1bHQuc2hvdWxkQ29udGludWVIaXRUZXN0aW5nKGJsb2NrRmxvdygpLmVsZW1lbnQoKSwgcmVx
dWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNz
OjpTdG9wKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggYzE1Yzc0ZDEyZmU0YzZiODEwNGE4
ZjljNTJmYmI3MTk3YmYxZjA2MS4uMjNlZjgyNWRmZGI1NWVlOThiMTAyYjA2OWQzMjE0YzZiNzYw
NTczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAt
NjE1LDEwICs2MTUsMjYgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSgp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5oYXNFZGl0YWJsZVN0eWxl
KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBlPgotaW5saW5lIEhpdFRlc3RQcm9n
cmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKE5v
ZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IFJlY3RUeXBlJiByZWN0KQordm9pZCBI
aXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIC8vIElmIGl0IGlzIG5vdCBhIGxp
c3QtYmFzZWQgaGl0IHRlc3QsIHRoaXMgbWV0aG9kIGhhcyB0byBiZSBuby1vcC4KKyAgICBpZiAo
IXJlcXVlc3QucmVzdWx0SXNFbGVtZW50TGlzdCgpKSB7CisgICAgICAgIEFTU0VSVCghaXNSZWN0
QmFzZWRUZXN0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWVzdC5kaXNhbGxvd3NVc2VyQWdlbnRTaGFk
b3dDb250ZW50KCkgJiYgbm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSkKKyAgICAgICAg
bm9kZSA9IG5vZGUtPmRvY3VtZW50KCkuYW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUobm9kZSk7CisK
KyAgICBtdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCgpLmFkZChub2RlKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgUmVjdFR5cGU+CitIaXRUZXN0UHJvZ3Jlc3MgSGl0VGVzdFJlc3VsdDo6c2hv
dWxkQ29udGludWVIaXRUZXN0aW5nQ29tbW9uKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IFJlY3RUeXBlJiByZWN0KSBjb25zdAoreworICAgIC8vIElmIGl0IGlzIG5v
dCBhIGxpc3QtYmFzZWQgaGl0IHRlc3QgdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbnRpbnVl
IGhpdCB0ZXN0aW5nLgogICAgIGlmICghcmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpIHsK
ICAgICAgICAgQVNTRVJUKCFpc1JlY3RCYXNlZFRlc3QoKSk7CiAgICAgICAgIHJldHVybiBIaXRU
ZXN0UHJvZ3Jlc3M6OlN0b3A7CkBAIC02MjcsMTEgKzY0Myw2IEBAIGlubGluZSBIaXRUZXN0UHJv
Z3Jlc3MgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihO
b2RlKiBuCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gSGl0VGVzdFByb2dyZXNzOjpD
b250aW51ZTsKIAotICAgIGlmIChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNoYWRvd0NvbnRl
bnQoKSAmJiBub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKQotICAgICAgICBub2RlID0g
bm9kZS0+ZG9jdW1lbnQoKS5hbmNlc3Rvck5vZGVJblRoaXNTY29wZShub2RlKTsKLQotICAgIG11
dGFibGVMaXN0QmFzZWRUZXN0UmVzdWx0KCkuYWRkKG5vZGUpOwotCiAgICAgaWYgKHJlcXVlc3Qu
aW5jbHVkZXNBbGxFbGVtZW50c1VuZGVyUG9pbnQoKSkKICAgICAgICAgcmV0dXJuIEhpdFRlc3RQ
cm9ncmVzczo6Q29udGludWU7CiAKQEAgLTYzOSwxNCArNjUwLDE0IEBAIGlubGluZSBIaXRUZXN0
UHJvZ3Jlc3MgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1v
bihOb2RlKiBuCiAgICAgcmV0dXJuIHJlZ2lvbkZpbGxlZCA/IEhpdFRlc3RQcm9ncmVzczo6U3Rv
cCA6IEhpdFRlc3RQcm9ncmVzczo6Q29udGludWU7CiB9CiAKLUhpdFRlc3RQcm9ncmVzcyBIaXRU
ZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9u
SW5Db250YWluZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCitIaXRUZXN0UHJvZ3Jlc3MgSGl0
VGVzdFJlc3VsdDo6c2hvdWxkQ29udGludWVIaXRUZXN0aW5nKGNvbnN0IE5vZGUqIG5vZGUsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0
aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHRDb21tb24obm9kZSwgcmVxdWVzdCwgbG9j
YXRpb25JbkNvbnRhaW5lciwgcmVjdCk7CisgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlSGl0VGVz
dGluZ0NvbW1vbihub2RlLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCByZWN0KTsKIH0K
IAotSGl0VGVzdFByb2dyZXNzIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RS
ZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorSGl0VGVzdFByb2dyZXNzIEhpdFRlc3RSZXN1bHQ6OnNob3VsZENvbnRpbnVlSGl0VGVzdGlu
Zyhjb25zdCBOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHRDb21t
b24obm9kZSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgcmVjdCk7CisgICAgcmV0dXJu
IHNob3VsZENvbnRpbnVlSGl0VGVzdGluZ0NvbW1vbihub2RlLCByZXF1ZXN0LCBsb2NhdGlvbklu
Q29udGFpbmVyLCByZWN0KTsKIH0KIAogdm9pZCBIaXRUZXN0UmVzdWx0OjphcHBlbmQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgb3RoZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKaW5kZXggMjVmOTIwMzk2NzJkMDc0
NzllMWQwMTEwYzExMzFlZWQ2ZDU2MDI2YS4uYzA4ZGU5OTNkMWQxMGEwMWUzN2U1MTE5YzVjODhm
YjAwNDllZGU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCkBA
IC0xMzIsOCArMTMyLDExIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRG93
bmxvYWRhYmxlTWVkaWEoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzT3ZlclRl
eHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdDsKIAotICAgIEhpdFRlc3RQcm9ncmVz
cyBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UmVjdCYgPSBMYXlvdXRSZWN0KCkpOwotICAgIEhpdFRlc3RQcm9ncmVzcyBhZGROb2RlVG9MaXN0
QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgSGl0
VGVzdFByb2dyZXNzIHNob3VsZENvbnRpbnVlSGl0VGVzdGluZyhjb25zdCBOb2RlKiwgY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRSZWN0
JiA9IHsgfSkgY29uc3Q7CisgICAgSGl0VGVzdFByb2dyZXNzIHNob3VsZENvbnRpbnVlSGl0VGVz
dGluZyhjb25zdCBOb2RlKiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIHZvaWQgYWRkTm9kZVRvTGlz
dEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmKTsKKwogICAgIHZv
aWQgYXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYpOwog
CiAgICAgLy8gSWYgbV9saXN0QmFzZWRUZXN0UmVzdWx0IGlzIDAgdGhlbiBzZXQgaXQgdG8gYSBu
ZXcgTm9kZVNldC4gUmV0dXJuICptX2xpc3RCYXNlZFRlc3RSZXN1bHQuIExhenkgYWxsb2NhdGlv
biBtYWtlcwpAQCAtMTQ5LDcgKzE1Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTm9kZVNl
dCYgbXV0YWJsZUxpc3RCYXNlZFRlc3RSZXN1bHQoKTsgLy8gU2VlIGFib3ZlLgogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgUmVjdFR5cGU+IEhpdFRlc3RQcm9ncmVzcyBhZGROb2RlVG9MaXN0QmFz
ZWRUZXN0UmVzdWx0Q29tbW9uKE5vZGUqLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIGNvbnN0IFJlY3RUeXBlJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
UmVjdFR5cGU+IEhpdFRlc3RQcm9ncmVzcyBzaG91bGRDb250aW51ZUhpdFRlc3RpbmdDb21tb24o
Y29uc3QgTm9kZSosIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiwgY29uc3QgUmVjdFR5cGUmKSBjb25zdDsKKwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IDNhYjFhOTViN2M1MDEyZDAwZWJhZTNkY2Y1
YmQ0MjJmZjUxYjFmNTEuLjNjMzIyNDk5MzQxZDAxY2RlMzkxNjYwMDlhZTdlYmFmNzExNmRjZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTExNDEs
NyArMTE0MSw4IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAKICAgICBpZiAobG9jYXRpb25J
bkNvbnRhaW5lci5pbnRlcnNlY3RzKHJlY3QpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhdGlvbkluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0
IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5n
IGJsb2NrJ3Mgc3BhY2UuCi0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVz
dFJlc3VsdChyZW5kZXJlcigpLmVsZW1lbnQoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5l
ciwgcmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAgICByZXN1bHQuYWRkTm9k
ZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLmVsZW1lbnQoKSwgcmVxdWVzdCk7Cisg
ICAgICAgIGlmIChyZXN1bHQuc2hvdWxkQ29udGludWVIaXRUZXN0aW5nKHJlbmRlcmVyKCkuZWxl
bWVudCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCByZWN0KSA9PSBIaXRUZXN0UHJv
Z3Jlc3M6OlN0b3ApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBhODc2MjFkZmYxMDgyMTRk
MTU3ZDg3Yjc4NWI2MTMwNWYyOTJhNjc4Li41MWEwYzA3NWI1YmVjNzUwNjlkYjk4OTFlYjJhYWI0
OWQ0NjcyZDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CkBAIC0zODUsNyArMzg1LDggQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKIAogICAgIGlmIChs
b2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMocmVjdCkpIHsKICAgICAgICAgcmVuZGVyZXIo
KS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2F0aW9u
SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsK
LSAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVy
KCkudGV4dE5vZGUoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgcmVjdCkgPT0gSGl0
VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVz
dFJlc3VsdChyZW5kZXJlcigpLnRleHROb2RlKCksIHJlcXVlc3QpOworICAgICAgICBpZiAocmVz
dWx0LnNob3VsZENvbnRpbnVlSGl0VGVzdGluZyhyZW5kZXJlcigpLnRleHROb2RlKCksIHJlcXVl
c3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBmMGZiODllNmNmNWFhNmM3
ZGE4Y2M4NGFlNmVhMTRmMzUwNjI5NzU4Li5lN2VhMTlhYmVjMTZlMzlkODVlYzVhYTFhOTNkOWNm
YjYwZWIyMTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAg
LTIwMTIsNyArMjAxMiw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgaWYgKChoaXRU
ZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBI
aXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChy
ZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSwgYWRqdXN0ZWRMb2NhdGlvbikpIHsK
ICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIu
cG9pbnQoKSAtIGxvY2FsT2Zmc2V0KTsKICAgICAgICAgLy8gRklYTUU6IGlzUG9pbnRJbk92ZXJm
bG93Q29udHJvbCgpIGRvZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgdGVzdHMgeWV0LgotICAgICAg
ICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQobm9kZUZvckhpdFRlc3Qo
KSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lcikgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9w
KQorICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0
VGVzdCgpLCByZXF1ZXN0KTsKKyAgICAgICAgaWYgKHJlc3VsdC5zaG91bGRDb250aW51ZUhpdFRl
c3Rpbmcobm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lcikgPT0g
SGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
QEAgLTIwOTMsNyArMjA5NCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIExh
eW91dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwogICAgICAgICBp
ZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0
cyhib3VuZHNSZWN0KSkgewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGZsaXBGb3JXcml0aW5nTW9kZShsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSBsb2NhbE9m
ZnNldCkpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVz
dWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5k
c1JlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgIHJlc3VsdC5hZGRO
b2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QpOworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5zaG91bGRDb250aW51ZUhpdFRlc3Rpbmcobm9kZUZvckhpdFRl
c3QoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVz
dFByb2dyZXNzOjpTdG9wKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA0OWMxZmZm
MDNiZTIxYWZlYjAwM2JkYmI2NGEwNDQ4YzJiMjg2NzAyLi44ODAxNzRkNzdkMjVmM2M2ZWY3YTVi
NzU3YjllZGJkYjIxN2RjZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cApAQCAtMTI1MSw3ICsxMjUxLDggQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQKICAgICBib3Vu
ZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVz
dGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBsb2NhdGlvbkluQ29udGFp
bmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1
c3RlZExvY2F0aW9uKSk7Ci0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVz
dFJlc3VsdChlbGVtZW50KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1Jl
Y3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgcmVzdWx0LmFkZE5vZGVUb0xp
c3RCYXNlZFRlc3RSZXN1bHQoZWxlbWVudCgpLCByZXF1ZXN0KTsKKyAgICAgICAgaWYgKHJlc3Vs
dC5zaG91bGRDb250aW51ZUhpdFRlc3RpbmcoZWxlbWVudCgpLCByZXF1ZXN0LCBsb2NhdGlvbklu
Q29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAKaW5kZXggNzM3MjEwYmFmNmViNmEzMGNkMjg2OTU1ZWRkNzUwZjBlNTk0MTc2
My4uMzQ3Yzk0YjZiN2U3OWMyODZlMWM3ZjBhNzExYThlOGI2MTdiNjE1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTU1OCw5ICs1NTgsOSBAQCBib29s
IFJlbmRlcklubGluZTo6aGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlcwogCiAgICAgaWYgKGNvbnRleHQuaW50ZXJzZWN0ZWQoKSkgewog
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG1wTG9jYXRpb24ucG9pbnQoKSk7
Ci0gICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCB0
byBkZXRlcm1pbmUgaWYgd2UgZnVsbHkgZW5jbG9zZSB0aGUgaGl0LXRlc3QgYXJlYQotICAgICAg
ICAvLyBiZWNhdXNlIGl0IGNhbiBvbmx5IGhhbmRsZSByZWN0YW5ndWxhciB0YXJnZXRzLgotICAg
ICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChlbGVtZW50KCksIHJlcXVl
c3QsIGxvY2F0aW9uSW5Db250YWluZXIpOworICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIEhpdFRl
c3RSZXN1bHQ6OnNob3VsZENvbnRpbnVlSGl0VGVzdGluZygpIHRvIGRldGVybWluZSBpZiB3ZSBm
dWxseSBlbmNsb3NlCisgICAgICAgIC8vIHRoZSBoaXQtdGVzdCBhcmVhIGJlY2F1c2UgaXQgY2Fu
IG9ubHkgaGFuZGxlIHJlY3Rhbmd1bGFyIHRhcmdldHMuCisgICAgICAgIHJlc3VsdC5hZGROb2Rl
VG9MaXN0QmFzZWRUZXN0UmVzdWx0KGVsZW1lbnQoKSwgcmVxdWVzdCk7CiAgICAgICAgIHJldHVy
biByZWdpb25SZXN1bHQuY29udGFpbnModG1wTG9jYXRpb24uYm91bmRpbmdCb3goKSk7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCmluZGV4IGYzMTEzYWZmODA0MDVlMmU0NjUwZjk2MWQwZGExM2RlM2EyMDg1ZjkuLmM1YjYy
NDBlYTRlNjBhZGQwYTBmODQwMWUyZjg1NjY3MmQ2OTNiMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMTU0NCw3ICsxNTQ0LDggQEAgYm9vbCBSZW5kZXJU
YWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3UKICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwg
c2l6ZSgpKTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0
VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3Jv
dW5kKSAmJiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShsb2Nh
dGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikp
KTsKLSAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KGVsZW1l
bnQoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVz
dFByb2dyZXNzOjpTdG9wKQorICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJl
c3VsdChlbGVtZW50KCksIHJlcXVlc3QpOworICAgICAgICBpZiAocmVzdWx0LnNob3VsZENvbnRp
bnVlSGl0VGVzdGluZyhlbGVtZW50KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJv
dW5kc1JlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCmluZGV4IDM3NzFiNjM0MGEzMGQ3YTBjM2UzNGFlNzY5
NWMzYmE4MDc3ZWQ1YTAuLmI3ZTE3MTBlMDZhYzM5ZTU1OTkyMDIyMDExOWE1NGM4ZTBhZDllZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVu
Y3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dEZ1bmN0aW9ucy5jcHAKQEAgLTE3MCw3ICsxNzAsOCBAQCBib29sIGhpdFRlc3RGbG93KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQsIGNvbnN0IEhpdFRl
cwogICAgICAgICBpZiAoIWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhsaW5lUmVjdCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVuZGVyZXIudXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShh
Y2N1bXVsYXRlZE9mZnNldCkpOwotICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNl
ZFRlc3RSZXN1bHQocmVuZGVyZXIubm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCBsaW5lUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAgICByZXN1bHQuYWRk
Tm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlci5ub2RlKCksIHJlcXVlc3QpOworICAg
ICAgICBpZiAocmVzdWx0LnNob3VsZENvbnRpbnVlSGl0VGVzdGluZyhyZW5kZXJlci5ub2RlKCks
IHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGxpbmVSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jl
c3M6OlN0b3ApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCmluZGV4IDk4YjMxNWQ2NzQ0M2U1NmJhNDA0YzI1MTJlYzEyNWE0NWE2MDhiZGMu
LjEyNjU5MWEyNDM3YzJhMGM4MjZkMjU4NzVhNTdiZWIxMTIzOGU0MDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAgLTE2
OSw3ICsxNjksOCBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0RmxvYXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdAogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUo
KSwgcmVxdWVzdCwgbG9jYWxQb2ludCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAg
ICAgICAgcmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwg
cmVxdWVzdCk7CisgICAgICAgICAgICBpZiAocmVzdWx0LnNob3VsZENvbnRpbnVlSGl0VGVzdGlu
ZyhjaGlsZC0+bm9kZSgpLCByZXF1ZXN0LCBsb2NhbFBvaW50KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6
OlN0b3ApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xNzcsNyArMTc4LDggQEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3QKICAgICAvLyBBY2Nlc3Np
YmlsaXR5IHdhbnRzIHRvIHJldHVybiBTVkcgY29udGFpbmVycywgaWYgYXBwcm9wcmlhdGUuCiAg
ICAgaWYgKHJlcXVlc3QudHlwZSgpICYgSGl0VGVzdFJlcXVlc3Q6OkFjY2Vzc2liaWxpdHlIaXRU
ZXN0ICYmIG1fb2JqZWN0Qm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsK
LSAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCZlbGVtZW50
KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAg
ICAgcmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoJmVsZW1lbnQoKSwgcmVxdWVz
dCk7CisgICAgICAgIGlmIChyZXN1bHQuc2hvdWxkQ29udGludWVIaXRUZXN0aW5nKCZlbGVtZW50
KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKaW5kZXggYzQ0ODQ4NTIwOTJkYmUwZjZkMzBi
ZjkxMzg3OTcxYjVjYzlmZGMwOS4uYTkyN2EyZmVhMjFiODk3NTM3NGMwYTI3ZmE1NGNlOWQwMDc1
ZDVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFn
ZS5jcHAKQEAgLTIyOSw3ICsyMjksOCBAQCBib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRGbG9h
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgICAg
ICBpZiAoaGl0UnVsZXMuY2FuSGl0RmlsbCkgewogICAgICAgICAgICAgaWYgKG1fb2JqZWN0Qm91
bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwotICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgmaW1hZ2VFbGVt
ZW50KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgmaW1hZ2VF
bGVtZW50KCksIHJlcXVlc3QpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc2hvdWxkQ29u
dGludWVIaXRUZXN0aW5nKCZpbWFnZUVsZW1lbnQoKSwgcmVxdWVzdCwgbG9jYWxQb2ludCkgPT0g
SGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5kZXggZGYwZWY2ZjZmM2VkOGUzZDQyMTI5OTRhOWUwMzM3
NjQyNTEwY2I1OS4uZWJjYWE3ODUyMTExMDhlYmNiZjhiODA0YWY2MzM0ODU4MWQ5ZDMxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC00
MTEsNyArNDExLDggQEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBub2RlQXRGbG9hdFBvaW50KCkgZG9lc24ndCBoYW5kbGUgcmVjdC1iYXNlZCBoaXQgdGVz
dHMgeWV0LgogICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5ub2Rl
KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIpID09IEhpdFRlc3RQcm9ncmVzczo6U3Rv
cCkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChj
aGlsZC0+bm9kZSgpLCByZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnNob3Vs
ZENvbnRpbnVlSGl0VGVzdGluZyhjaGlsZC0+bm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29u
dGFpbmVyKSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MjYsNyArNDI3LDggQEAg
Ym9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0KGFj
Y3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSwgc2l6ZSgpKTsKICAgICAgICAgaWYgKGxvY2F0
aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgewogICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOwotICAgICAgICAgICAg
aWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCZzdmdTVkdFbGVtZW50KCks
IHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpID09IEhpdFRlc3RQcm9n
cmVzczo6U3RvcCkKKyAgICAgICAgICAgIHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVz
dWx0KCZzdmdTVkdFbGVtZW50KCksIHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5z
aG91bGRDb250aW51ZUhpdFRlc3RpbmcoJnN2Z1NWR0VsZW1lbnQoKSwgcmVxdWVzdCwgbG9jYXRp
b25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAppbmRleCA4NDM4ZWRhYWUz
MGI5NTAxNjBiM2IxZWVjNWNkM2ZhMzE4MjliODk2Li42OGQ2NzA3M2U0MWQzMDFkNTIwYWM3NDIx
MzgwNmY2MDgxYTA2MzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmNwcApAQCAtMzc3LDcgKzM3Nyw4IEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6
Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1CiAgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUuaGFz
RmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9p
bnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpCiAgICAgICAgICAgICB8fCAoaGl0
UnVsZXMuY2FuSGl0Qm91bmRpbmdCb3ggJiYgb2JqZWN0Qm91bmRpbmdCb3goKS5jb250YWlucyhs
b2NhbFBvaW50KSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBM
YXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVU
b0xpc3RCYXNlZFRlc3RSZXN1bHQoJmdyYXBoaWNzRWxlbWVudCgpLCByZXF1ZXN0LCBsb2NhbFBv
aW50KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgICAgICByZXN1bHQuYWRkTm9k
ZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgmZ3JhcGhpY3NFbGVtZW50KCksIHJlcXVlc3QpOworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5zaG91bGRDb250aW51ZUhpdFRlc3RpbmcoJmdyYXBoaWNzRWxl
bWVudCgpLCByZXF1ZXN0LCBsb2NhbFBvaW50KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBmY2Vk
YjNiYTQ1ZDI3NWE0NTMyZTQ0MTE5Mjg4N2EwYjUyZmYwYzA1Li5jYjBmMWZiNTFiOGM3OWU3Y2Mx
ODc2MjY5Zjk1YzIzZGFhYTkxNjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTY2OCw3ICs2NjgsOCBAQCBib29sIFNWR0lu
bGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
aWYgKGZyYWdtZW50UXVhZC5jb250YWluc1BvaW50KGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShh
Y2N1bXVsYXRlZE9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5h
ZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCZyZW5kZXJlcigpLnRleHROb2RlKCksIHJlcXVl
c3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVz
dWx0KCZyZW5kZXJlcigpLnRleHROb2RlKCksIHJlcXVlc3QpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5zaG91bGRDb250aW51ZUhpdFRlc3RpbmcoJnJlbmRlcmVyKCkudGV4
dE5vZGUoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgcmVjdCkgPT0gSGl0VGVzdFBy
b2dyZXNzOjpTdG9wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQo=
</data>
<flag name="review"
          id="408990"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>