<?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>89448</bug_id>
          
          <creation_ts>2012-06-19 02:18:46 -0700</creation_ts>
          <short_desc>Use HitTestPoint instead of LayoutPoint for nodeAtPoint</short_desc>
          <delta_ts>2012-06-20 08:42:18 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>85792</blocked>
    
    <blocked>89454</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>leviw</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>652250</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-19 02:18:46 -0700</bug_when>
    <thetext>The HitTestPoint class introduced in bug #85965, is supposed to replace LayoutPoint as the point tested in nodeAtPoint. This is necessary to fix area-based hittesting on transformed elements, bug #85792.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652255</commentid>
    <comment_count>1</comment_count>
      <attachid>148293</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-19 02:24:34 -0700</bug_when>
    <thetext>Created attachment 148293
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652378</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-19 06:41:35 -0700</bug_when>
    <thetext>The answers to https://bugs.webkit.org/show_bug.cgi?id=85792#c27 will make reviewing this patch trivial. :)

You&apos;ll likely find eae, leviw and smfr to be good reviewers for these sorts of patches as they&apos;re familiar with both the subpixel rendering support and rendering tree transformations/hittesting.  I&apos;m also happy to help with these reviews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653482</commentid>
    <comment_count>3</comment_count>
      <attachid>148293</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-20 08:13:03 -0700</bug_when>
    <thetext>Comment on attachment 148293
Patch

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

Thank you again for hte long explanations both on the bugs, and over IRC.

I have real concern about the long-term readability of this code due to the really port class, function and variable namings.  These new objects are more than points, and naming them HitTestPoint is just confusing.

HitRegion would be one possible suggested replacement.

In eithe rcase, this patch is OK, but we really need to fix this code to read more clearly before we&apos;re done here.

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:969
&gt; -    if (!overflowRect.intersects(result.rectForPoint(pointInContainer)))
&gt; +    if (!pointInContainer.intersects(overflowRect))

So we&apos;re going to remove rectForPoint in this new model?

&gt; Source/WebCore/rendering/RenderLayer.cpp:3631
&gt; -    if (bgRect.intersects(hitTestArea) &amp;&amp; isSelfPaintingLayer()) {
&gt; +    if (bgRect.intersects(hitTestPoint) &amp;&amp; isSelfPaintingLayer()) {

Seems like a sad name change. :(

&gt; Source/WebCore/rendering/RenderLayer.h:118
&gt; +    bool intersects(const HitTestPoint&amp;);

Unclear to me if this what it&apos;s going to look like in the end.  It seems that clipRect and HitTestPoint both represent possibly non-rectilinear shapes.

&gt; Source/WebCore/rendering/RenderLineBoxList.cpp:287
&gt; +    LayoutPoint point = pointInContainer.point();

This and many similar renames could hav been avoided by changing the argument to something else and using a pointInContainer local which was actually a LayoutPOint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653487</commentid>
    <comment_count>4</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-20 08:18:12 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I have real concern about the long-term readability of this code due to the really port class, function and variable namings.  These new objects are more than points, and naming them HitTestPoint is just confusing.
&gt; 
&gt; HitRegion would be one possible suggested replacement.
&gt; 
The term point here is a point the same way a touch-point is, since touch points also has an area, but I can see how it might be confusing. 

Unfortunately Region is also a really overloaded name in WebKit rendering terms, so maybe HitTestArea or TouchPoint would work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653495</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-20 08:21:56 -0700</bug_when>
    <thetext>I guess I dont&apos; like TouchPoint either, since it&apos;s not a point. :)

It would be nice if while you&apos;re in here you came up with a cohenent vision for what hit testing should look like.  it appears to me that he hit testing code hasn&apos;t had someone come and love it in a long time. :)

I would be fine with HitTestArea or HitArea.  Region is definitely an overloaded term, but I&apos;m not sure that HitRegion makes that overloading any worse. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653507</commentid>
    <comment_count>6</comment_count>
      <attachid>148293</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 08:42:13 -0700</bug_when>
    <thetext>Comment on attachment 148293
Patch

Clearing flags on attachment: 148293

Committed r120824: &lt;http://trac.webkit.org/changeset/120824&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653508</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 08:42:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148293</attachid>
            <date>2012-06-19 02:24:34 -0700</date>
            <delta_ts>2012-06-20 08:42:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Change-to-use-hitTestPoint-instead-of-LayoutPoint.patch</filename>
            <type>text/plain</type>
            <size>102119</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZjY1ZmVmLi43NmY2ZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ5
IEBACisyMDEyLTA2LTE5ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9r
aWEuY29tPgorCisgICAgICAgIFVzZSBIaXRUZXN0UG9pbnQgaW5zdGVhZCBvZiBMYXlvdXRQb2lu
dCBmb3Igbm9kZUF0UG9pbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgQVBJIG9mIG5vZGVBdFBvaW50IHdpdGhv
dXQgY2hhbmdpbmcgYW55IAorICAgICAgICBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGxhcmdlc3Qg
Y2hhbmdlIG5lY2Vzc2FyeSB0byBzdXBwb3J0CisgICAgICAgIHRyYW5zZm9ybXMgaW4gYXJlYS1i
YXNlZCBoaXQtdGVzdGluZywgYnV0IGlzIG9ubHkgYm9pbGVycGxhdGUuCisKKyAgICAgICAgTm8g
Y2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuIE5vIG5ldyB0ZXN0cy4gCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5v
ZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guaDoKKyAgICAgICAg
KEVsbGlwc2lzQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVz
dWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFBvaW50OjppbnRlcnNlY3RzKToKKyAgICAgICAgKEhpdFRlc3RQb2ludCk6
CisgICAgICAgIChIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKElubGluZUJveCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Rmxvd0JveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94
Lmg6CisgICAgICAgIChJbmxpbmVGbG93Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKElubGlu
ZVRleHRCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmhpdFRlc3RDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRU
ZXN0Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAg
ICAoUmVuZGVyQmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveC5oOgorICAgICAgICAoUmVuZGVyQm94KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1i
ZWRkZWRPYmplY3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlckVtYmVkZGVkT2JqZWN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93VGhyZWFkOjpoaXRUZXN0UmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oOgorICAgICAgICAoUmVuZGVyRnJhbWVTZXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oOgorICAgICAgICAoUmVuZGVySW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpub2RlQXRQb2ludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAgICAgICAoUmVuZGVySW5s
aW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcFJlY3Q6OmludGVyc2VjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2Fs
VHJhbnNmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChDbGlwUmVjdCk6CisgICAg
ICAgIChSZW5kZXJMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaDoKKyAgICAgICAgKFJlbmRlckxp
bmVCb3hMaXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKFJlbmRlckxpc3RCb3gpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJl
bmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUmVnaW9uLmg6CisgICAgICAgIChSZW5kZXJSZWdpb24pOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAg
ICAgICAoUmVuZGVyVGFibGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oOgorICAgICAgICAoUmVuZGVyVGFibGVS
b3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAoUmVuZGVyVGFibGVTZWN0
aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAoUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5oOgorICAgICAgICAoUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcldpZGdldDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuaDoKKyAgICAgICAgKFJlbmRlcldpZGdldCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6CisgICAgICAgIChSb290
SW5saW5lQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0
RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0Lmg6CisgICAgICAgIChSZW5kZXJTVkdGb3JlaWduT2JqZWN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAoUmVuZGVyU1ZHTW9kZWxPYmplY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgIChSZW5kZXJTVkdSb290KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdUZXh0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
ZXh0Lmg6CisgICAgICAgIChSZW5kZXJTVkdUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oOgorICAgICAgICAoU1ZHSW5saW5lVGV4dEJveCk6CisKIDIwMTItMDYtMTIgIEtpbnVrbyBZ
YXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN1cHBvcnQgRmlsZS9EaXJl
Y3RvcnlFbnRyeSBhY2Nlc3MgZm9yIDxpbnB1dCB0eXBlPWZpbGU+IGlmIEZpbGVTeXN0ZW0gQVBJ
IGlzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCmluZGV4
IDEzMDEwM2MuLjhjMDBmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgY29u
dGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWls
aW5nRXhwYW5zaW9uKSwgcm91bmRlZEludFBvaW50KExheW91dFBvaW50KHgoKSArIHBhaW50T2Zm
c2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQueSgpICsgdG9wKSksIGgsIGMsIHN0eWxlLT5jb2xv
clNwYWNlKCkpOwogfQogCi1ib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCkKK2Jvb2wgRWxsaXBzaXNCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RQb2ludCYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRWxsaXBzaXNCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oCmluZGV4IDE0ZWQ0Y2QuLjM1ZDYzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxp
cHNpc0JveC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tKSBPVkVSUklERTsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQogICAgIEludFJl
Y3Qgc2VsZWN0aW9uUmVjdCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAKaW5kZXggNWZmYjY1OS4uNjU3YjZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNjA2LDcgKzYwNiw3IEBAIGJvb2wgSGl0VGVzdFJl
c3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAogICAgIHJldHVybiBtX2lubmVyTm9uU2hh
cmVkTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiB9CiAKLWJvb2wgSGl0VGVzdFJlc3VsdDo6
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgSGl0VGVzdFJl
c3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBIaXRU
ZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
Ly8gSWYgaXQgaXMgbm90IGEgcmVjdC1iYXNlZCBoaXQgdGVzdCwgdGhpcyBtZXRob2QgaGFzIHRv
IGJlIG5vLW9wLgogICAgIC8vIFJldHVybiBmYWxzZSwgc28gdGhlIGhpdCB0ZXN0IHN0b3BzLgpA
QCAtNjIyLDcgKzYyMiw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2Vk
VGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBMYXlvdXRQb2ludCYKIAogICAgIG11dGFibGVS
ZWN0QmFzZWRUZXN0UmVzdWx0KCkuYWRkKG5vZGUpOwogCi0gICAgYm9vbCByZWdpb25GaWxsZWQg
PSByZWN0LmNvbnRhaW5zKHJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSk7CisgICAgYm9v
bCByZWdpb25GaWxsZWQgPSByZWN0LmNvbnRhaW5zKHJlY3RGb3JQb2ludChwb2ludEluQ29udGFp
bmVyLnBvaW50KCkpKTsKICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIChpbmNvcnJlY3RseSkgYXR0
ZW1wdHMgdG8gY29ycmVjdCBmb3IgY3VsbGVkIGlubGluZSBub2Rlcy4gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTg0OS4KICAgICBpZiAobm9kZS0+cmVuZGVy
ZXIoKS0+aXNJbmxpbmUoKSAmJiAhcmVnaW9uRmlsbGVkKSB7CiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyID0gbm9kZS0+cmVuZGVyZXIoKS0+cGFyZW50KCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5wYXJlbnQoKSkgewpAQCAtNjQxLDcgKzY0MSw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBMYXlvdXRQb2lu
dCYKICAgICByZXR1cm4gIXJlZ2lvbkZpbGxlZDsKIH0KIAotYm9vbCBIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEhpdFRlc3RS
ZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAg
ICAgLy8gSWYgaXQgaXMgbm90IGEgcmVjdC1iYXNlZCBoaXQgdGVzdCwgdGhpcyBtZXRob2QgaGFz
IHRvIGJlIG5vLW9wLgogICAgIC8vIFJldHVybiBmYWxzZSwgc28gdGhlIGhpdCB0ZXN0IHN0b3Bz
LgpAQCAtNjU3LDcgKzY1Nyw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJh
c2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBMYXlvdXRQb2ludCYKIAogICAgIG11dGFi
bGVSZWN0QmFzZWRUZXN0UmVzdWx0KCkuYWRkKG5vZGUpOwogCi0gICAgYm9vbCByZWdpb25GaWxs
ZWQgPSByZWN0LmNvbnRhaW5zKHJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSk7CisgICAg
Ym9vbCByZWdpb25GaWxsZWQgPSByZWN0LmNvbnRhaW5zKHJlY3RGb3JQb2ludChwb2ludEluQ29u
dGFpbmVyLnBvaW50KCkpKTsKICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIChpbmNvcnJlY3RseSkg
YXR0ZW1wdHMgdG8gY29ycmVjdCBmb3IgY3VsbGVkIGlubGluZSBub2Rlcy4gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTg0OS4KICAgICBpZiAobm9kZS0+cmVu
ZGVyZXIoKS0+aXNJbmxpbmUoKSAmJiAhcmVnaW9uRmlsbGVkKSB7CiAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gbm9kZS0+cmVuZGVyZXIoKS0+cGFyZW50KCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5wYXJlbnQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmgKaW5kZXggMTlkZGJkMS4uMTBmZjU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oCkBAIC03MSw2ICs3MSw5IEBAIHB1YmxpYzoKICAgICBpbnQgYm90dG9tUGFk
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tUGFkZGluZzsgfQogICAgIGludCBsZWZ0UGFk
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdFBhZGRpbmc7IH0KIAorICAgIGJvb2wgaW50ZXJz
ZWN0cyhjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiByZWN0LmludGVyc2Vj
dHMocmVjdEZvclBvaW50KG1fcG9pbnQpKTsgfQorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIHJlY3QuaW50ZXJzZWN0cyhyZWN0Rm9yUG9p
bnQobV9wb2ludCkpOyB9CisKIHByaXZhdGU6CiAgICAgTGF5b3V0UG9pbnQgbV9wb2ludDsKIApA
QCAtMTQ4LDggKzE1MSw4IEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBp
cyByZWN0LWJhc2VkIGhpdCB0ZXN0IGFuZCBuZWVkcyB0byBjb250aW51ZSB1bnRpbCB0aGUgcmVj
dCBpcyBmdWxseQogICAgIC8vIGVuY2xvc2VkIGJ5IHRoZSBib3VuZGFyaWVzIG9mIGEgbm9kZS4K
LSAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IExheW91
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiA9IEludFJlY3QoKSk7Ci0g
ICAgYm9vbCBhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBhZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKKyAgICBib29sIGFkZE5v
ZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgSGl0
VGVzdFJlc3VsdCYpOwogCiAgICAgLy8gSWYgbV9yZWN0QmFzZWRUZXN0UmVzdWx0IGlzIDAgdGhl
biBzZXQgaXQgdG8gYSBuZXcgTm9kZVNldC4gUmV0dXJuICptX3JlY3RCYXNlZFRlc3RSZXN1bHQu
IExhenkgYWxsb2NhdGlvbiBtYWtlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNw
cAppbmRleCA2ZjMyOGMxLi5iNzcxM2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgSW5saW5lQm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvCiAgICAg
fQogfQogCi1ib29sIElubGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0
VW5pdCAvKiBsaW5lVG9wICovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSovKQorYm9vbCBJbmxp
bmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IC8qIGxpbmVUb3Ag
Ki8sIExheW91dFVuaXQgLypsaW5lQm90dG9tKi8pCiB7CiAgICAgLy8gSGl0IHRlc3QgYWxsIHBo
YXNlcyBvZiByZXBsYWNlZCBlbGVtZW50cyBhdG9taWNhbGx5LCBhcyB0aG91Z2ggdGhlIHJlcGxh
Y2VkIGVsZW1lbnQgZXN0YWJsaXNoZWQgaXRzCiAgICAgLy8gb3duIHN0YWNraW5nIGNvbnRleHQu
ICAoU2VlIEFwcGVuZGl4IEUuMiwgc2VjdGlvbiA2LjQgb24gaW5saW5lIGJsb2NrL3RhYmxlIGVs
ZW1lbnRzIGluIHRoZSBDU1MyLjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAppbmRl
eCAyZWQ5Y2Q0Li5jYTJiYTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCkBA
IC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVu
aXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKIAog
ICAgIC8vIE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3QsIFJlbmRlckFyZW5hKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKaW5kZXggYzEwOTQxOC4uYzliYzllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtOTYxLDE4ICs5NjEsMTggQEAgdm9pZCBJbmxpbmVG
bG93Qm94OjpzZXRPdmVyZmxvd0Zyb21Mb2dpY2FsUmVjdHMoY29uc3QgTGF5b3V0UmVjdCYgbG9n
aWNhbExheW91dE8KICAgICBzZXRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVyZmxvdywgbGluZVRv
cCwgbGluZUJvdHRvbSk7CiB9CiAKLWJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiti
b29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0
IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICBMYXlvdXRSZWN0IG92ZXJm
bG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSkpOwogICAgIGZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIG92ZXJmbG93UmVjdC5tb3ZlQnko
YWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIGlmICghb3ZlcmZsb3dSZWN0LmludGVyc2VjdHMocmVz
dWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCisgICAgaWYgKCFwb2ludEluQ29u
dGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dSZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gQ2hlY2sgY2hpbGRyZW4gZmlyc3QuCiAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIg
PSBsYXN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZPbkxpbmUoKSkgewogICAgICAg
ICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpIHx8ICFjdXJyLT5ib3hNb2RlbE9iamVj
dCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBs
aW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZz
ZXQpKTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZz
ZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtOTk0
LDE4ICs5OTQsMTggQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgdG9wID0gbWF4
KHJvb3RCb3gtPmxpbmVUb3AoKSwgdG9wKTsKICAgICAgICAgbG9naWNhbEhlaWdodCA9IGJvdHRv
bSAtIHRvcDsKICAgICB9Ci0gICAgCisKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0
ZXMuCiAgICAgTGF5b3V0UmVjdCByZWN0KG1pblgsIG1pblksIHdpZHRoLCBoZWlnaHQpOwogICAg
IGZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsKICAgICByZWN0Lm1vdmVCeShhY2N1bXVsYXRlZE9m
ZnNldCk7CiAKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBv
aW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERv
bid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWlu
aW5nIGJsb2NrJ3Mgc3BhY2UuCisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBwb2lu
dEluQ29udGFpbmVyLmludGVyc2VjdHMocmVjdCkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0
IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5n
IGJsb2NrJ3Mgc3BhY2UuCiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRl
c3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCByZWN0KSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKaW5kZXggMjA2OGU3
OC4uYjgyMWRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCkBA
IC0xMTIsNyArMTEyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRGaWxsTGF5ZXIoY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBMYXlvdXRS
ZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB2b2lk
IHBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYsIFJlbmRlclN0eWxlKiwgU2hhZG93U3R5
bGUsIGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKIAog
ICAgIGJvb2wgYm94U2hhZG93Q2FuQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IEZpbGxMYXll
ciYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
aW5kZXggOWU3MzFkNi4uMjE0NzhhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNM
aW5lQnJlYWsoKSBjb25zdAogICAgIHJldHVybiByZW5kZXJlcigpLT5pc0JSKCkgfHwgKHJlbmRl
cmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmIGxlbigpID09IDEgJiYgKCp0ZXh0
UmVuZGVyZXIoKS0+dGV4dCgpKVtzdGFydCgpXSA9PSAnXG4nKTsKIH0KIAotYm9vbCBJbmxpbmVU
ZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCAvKiBsaW5lVG9wICovLCBMYXlv
dXRVbml0IC8qbGluZUJvdHRvbSovKQorYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVz
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20q
LykKIHsKICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzU0LDggKzM1NCw4IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvCiAgICAgRmxvYXRQb2ludCBi
b3hPcmlnaW4gPSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CiAgICAgYm94T3JpZ2luLm1v
dmVCeShhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBz
aXplKCkpOwotICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9MYXlv
dXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1
bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBwb2ludEluQ29udGFpbmVy
LmludGVyc2VjdHMocmVjdCkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyLnBvaW50KCkg
LSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiAgICAgICAgIGlmICghcmVzdWx0
LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludElu
Q29udGFpbmVyLCByZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IGUxZTg1NTQuLmZmMWFlNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTE1LDcgKzEx
NSw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURF
OwogCiBwdWJsaWM6CiAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyKCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBlMjQ1ZWQ1Li5iY2E1OThl
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTQ1MDksNyAr
NDUwOSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvCiAgICAgcmV0dXJuIGxheWVyKCktPmhp
dFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KHBvaW50SW5Db250
YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKLWJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVz
dEFjdGlvbikKK2Jvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRM
b2NhdGlvbihhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgIExheW91dFNpemUg
bG9jYWxPZmZzZXQgPSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbik7CkBAIC00NTE5LDEy
ICs0NTE5LDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIExheW91dFJlY3Qg
b3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKICAgICAgICAgZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFkanVzdGVk
TG9jYXRpb24pOwotICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMocmVzdWx0LnJl
Y3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCisgICAgICAgIGlmICghcG9pbnRJbkNvbnRh
aW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Qm94KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBpZiAoKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3Vu
ZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaXNQ
b2ludEluT3ZlcmZsb3dDb250cm9sKHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWRqdXN0ZWRM
b2NhdGlvbikpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5D
b250YWluZXIgLSBsb2NhbE9mZnNldCk7CisgICAgaWYgKChoaXRUZXN0QWN0aW9uID09IEhpdFRl
c3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0Jh
Y2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIHBvaW50SW5Db250
YWluZXIucG9pbnQoKSwgYWRqdXN0ZWRMb2NhdGlvbikpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zmc2V0KTsK
ICAgICAgICAgLy8gRklYTUU6IGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCgpIGRvZXNuJ3QgaGFu
ZGxlIHJlY3QtYmFzZWQgdGVzdHMgeWV0LgogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9S
ZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lcikpCiAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDUzMyw4ICs0NTMzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3UKICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55IHNw
aWxsb3V0LgogICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xD
bGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKLSAgICBMYXlvdXRSZWN0IGhpdFRlc3RBcmVhKHJl
c3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpOwotICAgIGJvb2wgY2hlY2tDaGls
ZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KGFk
anVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpIDogb3ZlcmZsb3dDbGlwUmVj
dChhZGp1c3RlZExvY2F0aW9uLCByZXN1bHQucmVnaW9uKCksIEluY2x1ZGVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJl
biA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gcG9pbnRJbkNvbnRhaW5lci5pbnRl
cnNlY3RzKGNvbnRyb2xDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uKSkgOiBwb2ludEluQ29udGFp
bmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCByZXN1bHQu
cmVnaW9uKCksIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKICAgICBpZiAoY2hlY2tD
aGlsZHJlbikgewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAg
ICAgTGF5b3V0U2l6ZSBzY3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCk7CkBAIC00NTQ0LDEzICs0
NTQzLDEzIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIC8vIEhpdCB0ZXN0IGNv
bnRlbnRzIGlmIHdlIGRvbid0IGhhdmUgY29sdW1ucy4KICAgICAgICAgaWYgKCFoYXNDb2x1bW5z
KCkpIHsKICAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVzdEFj
dGlvbikpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gbG9jYWxPZmZzZXQp
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMocmVx
dWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zm
c2V0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAo
aGl0VGVzdENvbHVtbnMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0b0xheW91
dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVzdEFjdGlvbikpIHsKLSAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRh
aW5lciAtIGxvY2FsT2Zmc2V0KSk7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2Fs
T2Zmc2V0KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAg
LTQ1NTgsOCArNDU1Nyw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgLy8gTm93IGhp
dCB0ZXN0IG91ciBiYWNrZ3JvdW5kCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJs
b2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dy
b3VuZCkgewogICAgICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwg
c2l6ZSgpKTsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0
LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUo
cG9pbnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KSk7CisgICAgICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7
CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdN
b2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zmc2V0KSk7CiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJ
bkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTQ1NjgsNyArNDU2Nyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpCitib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KQogewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ1ODgsNyArNDU4Nyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAg
ICAgICBMYXlvdXRVbml0IHlPZmZzZXQgPSB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdp
bihmbG9hdGluZ09iamVjdCkgLSBmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+eSgpOwogICAg
ICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGbG9hdEZvcldyaXRpbmdNb2Rl
Rm9yQ2hpbGQoZmxvYXRpbmdPYmplY3QsIGFkanVzdGVkTG9jYXRpb24gKyBMYXlvdXRTaXplKHhP
ZmZzZXQsIHlPZmZzZXQpKTsKICAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+bV9yZW5k
ZXJlci0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9p
bnQpKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50
SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoY2hpbGRQb2ludCkpOworICAgICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0
b0xheW91dFNpemUoY2hpbGRQb2ludCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NjU2LDE3ICs0NjU1LDE3IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0UmVjdCBtX2NvbFJlY3Q7CiB9OwogCi1ib29sIFJlbmRlckJsb2NrOjpoaXRU
ZXN0Q29sdW1ucyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIC8vIFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUgcGFz
c2VzLCBicmVha2luZyB1cCBvdXIgaGl0IHRlc3RpbmcgaW50byBzdHJpcHMuCiAgICAgaWYgKCFo
YXNDb2x1bW5zKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoQ29sdW1uUmVj
dEl0ZXJhdG9yIGl0KCp0aGlzKTsgaXQuaGFzTW9yZSgpOyBpdC5hZHZhbmNlKCkpIHsKLSAgICAg
ICAgTGF5b3V0UmVjdCBoaXRSZWN0ID0gcmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFp
bmVyKTsKKyAgICAgICAgTGF5b3V0UmVjdCBoaXRSZWN0ID0gcmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyLnBvaW50KCkpOwogICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBp
dC5jb2x1bW5SZWN0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0
KTsKLSAgICAgICAgaWYgKGNvbFJlY3QuaW50ZXJzZWN0cyhoaXRSZWN0KSkgeworICAgICAgICBp
ZiAocG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGNvbFJlY3QpKSB7CiAgICAgICAgICAgICAv
LyBUaGUgcG9pbnQgaXMgaW5zaWRlIHRoaXMgY29sdW1uLgogICAgICAgICAgICAgLy8gQWRqdXN0
IGFjY3VtdWxhdGVkT2Zmc2V0IHRvIGNoYW5nZSB3aGVyZSB3ZSBoaXQgdGVzdC4KICAgICAgICAg
ICAgIExheW91dFNpemUgb2Zmc2V0OwpAQCAtNDY5Myw3ICs0NjkyLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0Rm9yQ29sdW1uUmVjdChMYXlvdXRTaXplJiBvZmZzZXQsIGNvbnN0IExheW91
dFBvaW50JiBwb2kKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50
cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
ckJsb2NrOjpoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKIHsKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSAmJiAhaXNUYWJsZSgpKSB7
CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gaGl0LXRlc3Qgb3VyIGxpbmUgYm94ZXMuCkBAIC00NzEw
LDcgKzQ3MDksNyBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggZWQ4MGY4OS4uNDRm
Y2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTQxOCw3ICs0
MTgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRG
b3JMaW5lKGJvb2wgZW5kc1dpdGhTb2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbmxpbmVEaXJlY3Rpb25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50ICovLCBmbG9hdCYgLyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lk
dGggKi8pIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZF
UlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KTsKIApAQCAtNzU2LDkgKzc1Niw5IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUgPSBGbG9hdGluZ09iamVjdDo6
RmxvYXRMZWZ0UmlnaHQpIGNvbnN0OyAKICAgICBMYXlvdXRVbml0IG5leHRGbG9hdExvZ2ljYWxC
b3R0b21CZWxvdyhMYXlvdXRVbml0KSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGl0
VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Ci0gICAgdmlydHVhbCBib29sIGhpdFRlc3RDb250
ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uKTsKLSAgICBib29sIGhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgdmlydHVh
bCBib29sIGhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICBib29sIGhpdFRlc3RGbG9hdHMo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
OwogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVz
dWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKaW5kZXggZGRjYTA3ZC4uYmVlYTVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKQEAgLTc0MCwxNCArNzQwLDE0IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpj
b21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpIGNvbnN0CiB9
CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIExheW91dFBvaW50
IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAg
ICAvLyBDaGVjayBraWRzIGZpcnN0LgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxh
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAg
ICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhZGp1c3RlZExvY2F0aW9uLCBhY3Rpb24pKSB7
Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5l
ciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRT
aXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNzU2LDggKzc1Niw4IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0CiAg
ICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVu
dHMgbGlrZSBpbWFnZXMpLgogICAgIExheW91dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJl
Y3RJblJlZ2lvbihyZXN1bHQucmVnaW9uKCkpOwogICAgIGJvdW5kc1JlY3QubW92ZUJ5KGFkanVz
dGVkTG9jYXRpb24pOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09
IEhpdFRlc3RGb3JlZ3JvdW5kICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZv
clBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9u
KSk7CisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZv
cmVncm91bmQgJiYgcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7Cisg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50
KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAgICBpZiAoIXJlc3Vs
dC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwg
Ym91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggNGJlYmY3ZS4uZmNhNzE0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMjYzLDcgKzI2Myw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
KSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtaW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmNwcAppbmRleCAzMTVjMTZmLi5hMzY1N2ZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKQEAgLTI2Myw3ICsy
NjMsNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojp2aWV3Q2xlYXJlZCgpCiAgICAgfQog
fQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewogICAgIGlmICghUmVuZGVyUGFydDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTI3Miw3ICsyNzIsNyBAQCBib29sIFJlbmRlckVtYmVkZGVk
T2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlcwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFBsdWdpblZpZXdCYXNlKiB2aWV3ID0g
c3RhdGljX2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPih3aWRnZXQoKSk7Ci0gICAgSW50UG9pbnQgcm91
bmRlZFBvaW50ID0gcm91bmRlZEludFBvaW50KHBvaW50SW5Db250YWluZXIpOworICAgIEludFBv
aW50IHJvdW5kZWRQb2ludCA9IHBvaW50SW5Db250YWluZXIucm91bmRlZFBvaW50KCk7CiAKICAg
ICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gdmlldy0+aG9yaXpvbnRhbFNj
cm9sbGJhcigpKSB7CiAgICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpICYmIGhvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgp
LmNvbnRhaW5zKHJvdW5kZWRQb2ludCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKaW5kZXggMWUwYmZmYi4uN2RhNmZjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKQEAgLTY5LDcg
KzY5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHZpZXdDbGVhcmVkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
KSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKTsKICAg
ICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAppbmRleCBmZGMyZTZi
Zi4uNjY5ZDQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcApAQCAtMjk5LDI0ICsyOTksMjQgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpwYWlu
dEludG9SZWdpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlclJlZ2lvbiogcmVnaW8KICAg
ICB9CiB9CiAKLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6aGl0VGVzdFJlZ2lvbihSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6aGl0VGVz
dFJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCiB7CiAgICAgTGF5
b3V0UmVjdCByZWdpb25SZWN0KHJlZ2lvbi0+cmVnaW9uUmVjdCgpKTsKICAgICBMYXlvdXRSZWN0
IHJlZ2lvbk92ZXJmbG93UmVjdCA9IHJlZ2lvbi0+cmVnaW9uT3ZlcmZsb3dSZWN0KCk7CiAgICAg
TGF5b3V0UmVjdCByZWdpb25DbGlwcGluZ1JlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyAocmVnaW9u
T3ZlcmZsb3dSZWN0LmxvY2F0aW9uKCkgLSByZWdpb25SZWN0LmxvY2F0aW9uKCkpLCByZWdpb25P
dmVyZmxvd1JlY3Quc2l6ZSgpKTsKLSAgICBpZiAoIXJlZ2lvbkNsaXBwaW5nUmVjdC5jb250YWlu
cyhwb2ludEluQ29udGFpbmVyKSkKKyAgICBpZiAoIXJlZ2lvbkNsaXBwaW5nUmVjdC5jb250YWlu
cyhwb2ludEluQ29udGFpbmVyLnBvaW50KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgTGF5b3V0UG9pbnQgcmVuZGVyRmxvd1RocmVhZE9mZnNldDsKKworICAgIExheW91dFNp
emUgcmVuZGVyRmxvd1RocmVhZE9mZnNldDsKICAgICBpZiAoc3R5bGUoKS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSkgewogICAgICAgICBMYXlvdXRSZWN0IGZsaXBwZWRSZWdpb25SZWN0
KHJlZ2lvblJlY3QpOwogICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBlZFJlZ2lvblJl
Y3QpOwotICAgICAgICByZW5kZXJGbG93VGhyZWFkT2Zmc2V0ID0gTGF5b3V0UG9pbnQoYWNjdW11
bGF0ZWRPZmZzZXQgLSBmbGlwcGVkUmVnaW9uUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgcmVu
ZGVyRmxvd1RocmVhZE9mZnNldCA9IGFjY3VtdWxhdGVkT2Zmc2V0IC0gZmxpcHBlZFJlZ2lvblJl
Y3QubG9jYXRpb24oKTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVuZGVyRmxvd1RocmVhZE9mZnNl
dCA9IExheW91dFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0IC0gcmVnaW9uUmVjdC5sb2NhdGlvbigp
KTsKKyAgICAgICAgcmVuZGVyRmxvd1RocmVhZE9mZnNldCA9IGFjY3VtdWxhdGVkT2Zmc2V0IC0g
cmVnaW9uUmVjdC5sb2NhdGlvbigpOworCisgICAgTGF5b3V0UG9pbnQgdHJhbnNmb3JtZWRQb2lu
dCA9IHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHJlbmRlckZsb3dUaHJlYWRPZmZzZXQ7CiAK
LSAgICBMYXlvdXRQb2ludCB0cmFuc2Zvcm1lZFBvaW50KHBvaW50SW5Db250YWluZXIueCgpIC0g
cmVuZGVyRmxvd1RocmVhZE9mZnNldC54KCksIHBvaW50SW5Db250YWluZXIueSgpIC0gcmVuZGVy
Rmxvd1RocmVhZE9mZnNldC55KCkpOwotICAgIAogICAgIC8vIEFsd2F5cyBpZ25vcmUgY2xpcHBp
bmcsIHNpbmNlIHRoZSBSZW5kZXJGbG93VGhyZWFkIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhl
IGJvdW5kcyBvZiB0aGUgRnJhbWVWaWV3LgogICAgIEhpdFRlc3RSZXF1ZXN0IG5ld1JlcXVlc3Qo
cmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAppbmRleCBhZWE3NDFlLi5j
NzZlZTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgK
QEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQo
KTsKIAogICAgIHZvaWQgcGFpbnRJbnRvUmVnaW9uKFBhaW50SW5mbyYsIFJlbmRlclJlZ2lvbios
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7Ci0gICAgYm9vbCBoaXRUZXN0UmVnaW9u
KFJlbmRlclJlZ2lvbiosIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQpOworICAgIGJvb2wgaGl0VGVzdFJlZ2lvbihSZW5kZXJSZWdpb24qLCBj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7
CiAKICAgICBib29sIGhhc1JlZ2lvbnMoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbkxpc3Quc2l6
ZSgpOyB9CiAgICAgYm9vbCBoYXNWYWxpZFJlZ2lvbnMoKSBjb25zdCB7IEFTU0VSVCghbV9yZWdp
b25zSW52YWxpZGF0ZWQpOyByZXR1cm4gbV9oYXNWYWxpZFJlZ2lvbnM7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCmluZGV4IDdjODlkOGQuLmM4OTU0Nzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcApAQCAtMTU4
LDcgKzE1OCw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB9CiAKIGJvb2wgUmVuZGVyRnJh
bWVTZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsCi0gICAgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rp
b24pCisgICAgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAg
IGlmIChhY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKaW5kZXggOTdiZTk3NC4u
N2Q2OTc3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1l
U2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKQEAg
LTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZVNldCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wg
aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2
aXJ0dWFsIEN1cnNvckRpcmVjdGl2ZSBnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9pbnQmLCBDdXJz
b3ImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4
IGI3ZDcxMDUuLmI0NWExYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcApAQCAtNDgyLDE4ICs0ODIsMTggQEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjpp
bWFnZU1hcCgpIGNvbnN0CiAgICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS0+Z2V0SW1hZ2VN
YXAoaS0+ZmFzdEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKSkgOiAwOwogfQogCi1ib29sIFJlbmRl
ckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCitib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3Vs
dChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnRvcFBhZGRpbmcoKSwgcmVzdWx0LnJpZ2h0UGFkZGlu
ZygpLCByZXN1bHQuYm90dG9tUGFkZGluZygpLCByZXN1bHQubGVmdFBhZGRpbmcoKSwgcmVzdWx0
LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7CisgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVz
dWx0KHJlc3VsdC5oaXRUZXN0UG9pbnQoKSwgcmVzdWx0LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xp
Y3koKSk7CiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVx
dWVzdCwgdGVtcFJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhp
dFRlc3RBY3Rpb24pOwogCiAgICAgaWYgKHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgp
KSB7CiAgICAgICAgIGlmIChIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAg
ICAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAgICAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMSAvIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsK
LSAgICAgICAgICAgIExheW91dFBvaW50IG1hcExvY2F0aW9uKHBvaW50SW5Db250YWluZXIueCgp
IC0gYWNjdW11bGF0ZWRPZmZzZXQueCgpIC0gdGhpcy0+eCgpIC0gY29udGVudEJveC54KCksIHBv
aW50SW5Db250YWluZXIueSgpIC0gYWNjdW11bGF0ZWRPZmZzZXQueSgpIC0gdGhpcy0+eSgpIC0g
Y29udGVudEJveC55KCkpOworICAgICAgICAgICAgTGF5b3V0UG9pbnQgbWFwTG9jYXRpb24gPSBw
b2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQp
IC0gTGF5b3V0U2l6ZSh0aGlzLT54KCksIHRoaXMtPnkoKSkgLSB0b0xheW91dFNpemUoY29udGVu
dEJveC5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIG1hcExvY2F0aW9uLnNjYWxlKHNjYWxlRmFj
dG9yLCBzY2FsZUZhY3Rvcik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKG1hcC0+
bWFwTW91c2VFdmVudChtYXBMb2NhdGlvbiwgY29udGVudEJveC5zaXplKCksIHRlbXBSZXN1bHQp
KQogICAgICAgICAgICAgICAgIHRlbXBSZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUo
KSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKaW5kZXgg
MTExOTdjYy4uZTcwOTJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgK
QEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFj
ZWRIZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSopOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURF
OwogCiAgICAgSW50U2l6ZSBpbWFnZVNpemVGb3JFcnJvcihDYWNoZWRJbWFnZSopIGNvbnN0Owog
ICAgIHZvaWQgaW1hZ2VEaW1lbnNpb25zQ2hhbmdlZChib29sIGltYWdlU2l6ZUNoYW5nZWQsIGNv
bnN0IEludFJlY3QqID0gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCmluZGV4IDkxYTA1YWQuLjU5ZWJlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCkBAIC03NTMsNyArNzUzLDcgQEAgY29uc3QgY2hhciogUmVuZGVySW5s
aW5lOjpyZW5kZXJOYW1lKCkgY29uc3QKIH0KIAogYm9vbCBSZW5kZXJJbmxpbmU6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBy
ZXR1cm4gbV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCBhNzA3YTY0Li43MjIzMDBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCkBAIC0xMjIsNyArMTIyLDcgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzUmVs
UG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNNYXNrKCkgfHwgaGFzRmlsdGVy
KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZWMz
NjMyYy4uYmYyOTBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC0xMjUsNiArMTI1LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBjb25zdCBp
bnQgTWluaW11bVdpZHRoV2hpbGVSZXNpemluZyA9IDEwMDsKIGNvbnN0IGludCBNaW5pbXVtSGVp
Z2h0V2hpbGVSZXNpemluZyA9IDQwOwogCitib29sIENsaXBSZWN0OjppbnRlcnNlY3RzKGNvbnN0
IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50KQoreworICAgIHJldHVybiBoaXRUZXN0UG9pbnQu
aW50ZXJzZWN0cyhtX3JlY3QpOworfQorCiBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKQogICAgIDogbV9pblJlc2l6ZU1vZGUoZmFsc2UpCiAg
ICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQpAQCAtMzM1OCw3ICszMzYzLDcgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIGlmICghcmVxdWVzdC5pZ25vcmVDbGlwcGluZygp
KQogICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoZnJhbWVWaXNpYmxlUmVjdChyZW5kZXJl
cigpKSk7CiAKLSAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhp
cywgMCwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgcmVzdWx0LnBvaW50KCksIGZhbHNl
KTsKKyAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywgMCwg
cmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgcmVzdWx0LmhpdFRlc3RQb2ludCgpLCBmYWxz
ZSk7CiAgICAgaWYgKCFpbnNpZGVMYXllcikgewogICAgICAgICAvLyBXZSBkaWRuJ3QgaGl0IGFu
eSBsYXllci4gSWYgd2UgYXJlIHRoZSByb290IGxheWVyIGFuZCB0aGUgbW91c2UgaXMgLS0gb3Ig
anVzdCB3YXMgLS0gZG93biwgCiAgICAgICAgIC8vIHJldHVybiBvdXJzZWx2ZXMuIFdlIGRvIHRo
aXMgc28gbW91c2UgZXZlbnRzIGNvbnRpbnVlIGdldHRpbmcgZGVsaXZlcmVkIGFmdGVyIGEgZHJh
ZyBoYXMgCkBAIC0zNDEwLDcgKzM0MTUsNyBAQCBzdGF0aWMgZG91YmxlIGNvbXB1dGVaT2Zmc2V0
KGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpCiB9CiAKIFBh
c3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBSZW5kZXJMYXllcjo6Y3JlYXRlTG9j
YWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29u
dGFpbmVyTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IExheW91dFBvaW50JiBoaXRUZXN0UG9p
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gdHJhbnNmb3JtU3RhdGU7CkBAIC0zNDIyLDcgKzM0
MjcsNyBAQCBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVyTGF5ZXI6
OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUoUmVuZAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgbmVlZCB0byBtYWtlIHRyYW5zZm9ybSBzdGF0
ZSwgdGhlbiBiYXNlIGl0IG9mZiBvZiBoaXRUZXN0UG9pbnQsCiAgICAgICAgIC8vIHdoaWNoIGlz
IHJlbGF0aXZlIHRvIHJvb3RMYXllci4KLSAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZShoaXRUZXN0UG9pbnQsIEZsb2F0UXVhZChoaXRUZXN0
UmVjdCkpOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZTo6Y3JlYXRlKGhpdFRlc3RQb2ludC5wb2ludCgpLCBGbG9hdFF1YWQoaGl0VGVzdFJlY3QpKTsK
ICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXQpOwogICAgIH0K
ICAgICAKQEAgLTM0NzIsMjIgKzM0NzcsMjAgQEAgc3RhdGljIGJvb2wgaXNIaXRDYW5kaWRhdGUo
Y29uc3QgUmVuZGVyTGF5ZXIqIGhpdExheWVyLCBib29sIGNhbkRlcHRoU29ydCwgZG91YmwKIC8v
IElmIHpPZmZzZXQgaXMgbm9uLW51bGwgKHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsZXIg
d2FudHMgeiBvZmZzZXQgaW5mb3JtYXRpb24pLCAKIC8vICAqek9mZnNldCBvbiByZXR1cm4gaXMg
dGhlIHogb2Zmc2V0IG9mIHRoZSBoaXQgcG9pbnQgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5pbmcg
ZmxhdHRlbmluZyBsYXllci4KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgaGl0VGVzdFBvaW50LCBib29sIGFwcGxpZWRUcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlv
dXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsIGJv
b2wgYXBwbGllZFRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJs
ZSogek9mZnNldCkKIHsKICAgICAvLyBUaGUgbmF0dXJhbCB0aGluZyB3b3VsZCBiZSB0byBrZWVw
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSBvbiB0aGUgc3RhY2ssIGJ1dCBpdCdzIGJpZywgc28g
d2UgaGVhcC1hbGxvY2F0ZS4KIAogICAgIGJvb2wgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzID0gcmVu
ZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKS0+Y29udGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhP
dmVybGF5U2Nyb2xsYmFycygpOwogCi0gICAgTGF5b3V0UmVjdCBoaXRUZXN0QXJlYSA9IHJlc3Vs
dC5yZWN0Rm9yUG9pbnQoaGl0VGVzdFBvaW50KTsKLQogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3Jt
IGlmIHdlIGhhdmUgb25lLgogICAgIGlmICh0cmFuc2Zvcm0oKSAmJiAhYXBwbGllZFRyYW5zZm9y
bSkgewogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBi
ZWVuIGNhbGN1bGF0ZWQuCiAgICAgICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAgICAgQ2xp
cFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVyLCByZXN1bHQucmVn
aW9uKCksIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFJvb3RS
ZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAgICAgICAg
ICAgIC8vIEdvIGFoZWFkIGFuZCB0ZXN0IHRoZSBlbmNsb3NpbmcgY2xpcCBub3cuCi0gICAgICAg
ICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKQorICAgICAgICAgICAg
aWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIH0KIApAQCAtMzUwNiwxNSArMzUwOSwxNyBAQCBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5k
ZXJMYXllciogY29udAogICAgICAgICAvLyBieSBvdXIgY29udGFpbmVyLgogICAgICAgICBMYXlv
dXRQb2ludCBsb2NhbFBvaW50ID0gcm91bmRlZExheW91dFBvaW50KG5ld1RyYW5zZm9ybVN0YXRl
LT5tYXBwZWRQb2ludCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEhpdFRlc3RSZWN0ID0g
bmV3VHJhbnNmb3JtU3RhdGUtPmJvdW5kc09mTWFwcGVkUXVhZCgpOworICAgICAgICBIaXRUZXN0
UG9pbnQgbmV3SGl0VGVzdFBvaW50KHJlc3VsdC5oaXRUZXN0UG9pbnQoKSk7CisgICAgICAgIG5l
d0hpdFRlc3RQb2ludC5zZXRQb2ludChsb2NhbFBvaW50KTsKIAogICAgICAgICAvLyBOb3cgZG8g
YSBoaXQgdGVzdCB3aXRoIHRoZSByb290IGxheWVyIHNoaWZ0ZWQgdG8gYmUgdXMuCi0gICAgICAg
IHJldHVybiBoaXRUZXN0TGF5ZXIodGhpcywgY29udGFpbmVyTGF5ZXIsIHJlcXVlc3QsIHJlc3Vs
dCwgbG9jYWxIaXRUZXN0UmVjdCwgbG9jYWxQb2ludCwgdHJ1ZSwgbmV3VHJhbnNmb3JtU3RhdGUu
Z2V0KCksIHpPZmZzZXQpOworICAgICAgICByZXR1cm4gaGl0VGVzdExheWVyKHRoaXMsIGNvbnRh
aW5lckxheWVyLCByZXF1ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJlY3QsIG5ld0hpdFRlc3RQ
b2ludCwgdHJ1ZSwgbmV3VHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXQpOwogICAgIH0KIAog
ICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYW5kIDNkIHN0YXR1cyBhcmUgdXAtdG8tZGF0ZS4KICAg
ICB1cGRhdGVDb21wb3NpdGluZ0FuZExheWVyTGlzdHNJZk5lZWRlZCgpOwogICAgIHVwZGF0ZTNE
VHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzKCk7Ci0gICAgCisKICAgICBSZWZQdHI8SGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlPiBsb2NhbFRyYW5zZm9ybVN0YXRlOwogICAgIGlmIChhcHBsaWVk
VHJhbnNmb3JtKSB7CiAgICAgICAgIC8vIFdlIGNvbXB1dGVkIHRoZSBjb3JyZWN0IHN0YXRlIGlu
IHRoZSBjYWxsZXIgKGFib3ZlIGNvZGUpLCBzbyBqdXN0IHJlZmVyZW5jZSBpdC4KQEAgLTM1NzAs
OCArMzU3NSw4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIC8vIENvbnRhaW5l
ciBuZWVkcyB1cyB0byBnaXZlIGJhY2sgYSB6IG9mZnNldCBmb3IgdGhlIGhpdCBsYXllci4KICAg
ICAgICAgek9mZnNldEZvckNvbnRlbnRzUHRyID0gek9mZnNldDsKICAgICB9Ci0gICAgCi0gICAg
Ly8gVGhpcyB2YXJpYWJsZSB0cmFja3Mgd2hpY2ggbGF5ZXIgdGhlIG1vdXNlIGVuZHMgdXAgYmVp
bmcgaW5zaWRlLiAKKworICAgIC8vIFRoaXMgdmFyaWFibGUgdHJhY2tzIHdoaWNoIGxheWVyIHRo
ZSBtb3VzZSBlbmRzIHVwIGJlaW5nIGluc2lkZS4KICAgICBSZW5kZXJMYXllciogY2FuZGlkYXRl
TGF5ZXIgPSAwOwogCiAgICAgLy8gQmVnaW4gYnkgd2Fsa2luZyBvdXIgbGlzdCBvZiBwb3NpdGl2
ZSBsYXllcnMgZnJvbSBoaWdoZXN0IHotaW5kZXggZG93biB0byB0aGUgbG93ZXN0IHotaW5kZXgu
CkBAIC0zNTkzLDcgKzM1OTgsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
YXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIH0KIAog
ICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhl
IGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuaW50ZXJz
ZWN0cyhoaXRUZXN0QXJlYSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgaWYgKGZn
UmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7
CiAgICAgICAgIC8vIEhpdCB0ZXN0IHdpdGggYSB0ZW1wb3JhcnkgSGl0VGVzdFJlc3VsdCwgYmVj
YXVzZSB3ZSBvbmx5IHdhbnQgdG8gY29tbWl0IHRvICdyZXN1bHQnIGlmIHdlIGtub3cgd2UncmUg
ZnJvbnRtb3N0LgogICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRl
c3RQb2ludCgpLCByZXN1bHQuc2hhZG93Q29udGVudEZpbHRlclBvbGljeSgpKTsKICAgICAgICAg
aWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0
VGVzdFBvaW50LCBIaXRUZXN0RGVzY2VuZGFudHMpICYmCkBAIC0zNjIzLDcgKzM2MjgsNyBAQCBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExh
eWVyLCBSZW5kZXJMYXllciogY29udAogICAgIGlmIChjYW5kaWRhdGVMYXllcikKICAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZUxheWVyOwogCi0gICAgaWYgKGJnUmVjdC5pbnRlcnNlY3RzKGhpdFRl
c3RBcmVhKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICBpZiAoYmdSZWN0LmludGVy
c2VjdHMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAg
SGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0UG9pbnQoKSwgcmVzdWx0LnNo
YWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7CiAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMo
cmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdFNl
bGYpICYmCiAgICAgICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZv
ckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewpAQCAtMzYz
NSwxMSArMzY0MCwxMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
ZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
dGVtcFJlc3VsdCk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29u
c3QgTGF5b3V0UG9pbnQmIGhpdFRlc3RQb2ludCwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVy
KSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQb2ludCwgSGl0VGVzdEZp
bHRlciBoaXRUZXN0RmlsdGVyKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKS0+aGl0VGVz
dChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b0xheW91dFBvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2Nh
dGlvbigpKSwKQEAgLTM2NjcsNyArMzY3Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RD
b250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYKIAog
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIq
PiogbGlzdCwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IExheW91dFBvaW50JiBoaXRUZXN0UG9pbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3Qm
IGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQb2ludCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUqIHpPZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZSogdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZSwKQEAgLTM2OTksMTIgKzM3MDQsMTIg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5
ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIqIHIKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiByZXN1bHRMYXllcjsKIH0KIAogUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihSZW5kZXJMYXll
ciogY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVz
dFJlY3QsIGNvbnN0IExheW91dFBvaW50JiBoaXRUZXN0UG9pbnQsIGNvbnN0IEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50LCBjb25z
dCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZz
ZXQpCiB7CiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4gY29sdW1uTGF5ZXJzOwogICAgIFJlbmRl
ckxheWVyKiBhbmNlc3RvckxheWVyID0gaXNOb3JtYWxGbG93T25seSgpID8gcGFyZW50KCkgOiBz
dGFja2luZ0NvbnRleHQoKTsKQEAgLTM3MjEsNyArMzcyNiw3IEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5
ZXIsIFJlCiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJD
b2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IExheW91dFBvaW50JiBoaXRUZXN0UG9pbnQsIGNv
bnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRl
c3RQb2ludCwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwg
ZG91YmxlKiB6T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6
ZV90IGNvbHVtbkluZGV4KQogewogICAgIFJlbmRlckJsb2NrKiBjb2x1bW5CbG9jayA9IHRvUmVu
ZGVyQmxvY2soY29sdW1uTGF5ZXJzW2NvbHVtbkluZGV4XS0+cmVuZGVyZXIoKSk7CkBAIC0zNzMy
LDEwICszNzM3LDEwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5
ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kCiAKICAgICBMYXlvdXRQb2lu
dCBsYXllck9mZnNldDsKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJD
b29yZHMocm9vdExheWVyLCBsYXllck9mZnNldCk7Ci0gICAgCisKICAgICBDb2x1bW5JbmZvKiBj
b2xJbmZvID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8oKTsKICAgICBpbnQgY29sQ291bnQgPSBj
b2x1bW5CbG9jay0+Y29sdW1uQ291bnQoY29sSW5mbyk7Ci0gICAgCisKICAgICAvLyBXZSBoYXZl
IHRvIGdvIGJhY2t3YXJkcyBmcm9tIHRoZSBsYXN0IGNvbHVtbiB0byB0aGUgZmlyc3QuCiAgICAg
Ym9vbCBpc0hvcml6b250YWwgPSBjb2x1bW5CbG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gY29sdW1uQmxvY2stPmxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwpAQCAtMzc3OCw3ICszNzgzLDcgQEAgUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMoUmVuZGVyTGF5ZXIq
IGNoaWxkTGF5ZXIsIFJlbmQKICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbENsaXBSZWN0KGhpdFRl
c3RSZWN0KTsKICAgICAgICAgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CiAKLSAg
ICAgICAgaWYgKCFsb2NhbENsaXBSZWN0LmlzRW1wdHkoKSAmJiBsb2NhbENsaXBSZWN0LmludGVy
c2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChoaXRUZXN0UG9pbnQpKSkgeworICAgICAgICBpZiAo
IWxvY2FsQ2xpcFJlY3QuaXNFbXB0eSgpICYmIGhpdFRlc3RQb2ludC5pbnRlcnNlY3RzKGxvY2Fs
Q2xpcFJlY3QpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAg
ICAgICAgICAgaWYgKCFjb2x1bW5JbmRleCkgewogICAgICAgICAgICAgICAgIC8vIEFwcGx5IGEg
dHJhbnNsYXRpb24gdHJhbnNmb3JtIHRvIGNoYW5nZSB3aGVyZSB0aGUgbGF5ZXIgcGFpbnRzLgpA
QCAtMzc4OCw3ICszNzkzLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hp
bGRMYXllckNvbHVtbnMoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmQKICAgICAgICAgICAg
ICAgICAgICAgb2xkVHJhbnNmb3JtID0gKmNoaWxkTGF5ZXItPnRyYW5zZm9ybSgpOwogICAgICAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5ld1RyYW5zZm9ybShvbGRUcmFuc2Zvcm0p
OwogICAgICAgICAgICAgICAgIG5ld1RyYW5zZm9ybS50cmFuc2xhdGVSaWdodChvZmZzZXQud2lk
dGgoKSwgb2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAg
ICAgIGNoaWxkTGF5ZXItPm1fdHJhbnNmb3JtID0gYWRvcHRQdHIobmV3IFRyYW5zZm9ybWF0aW9u
TWF0cml4KG5ld1RyYW5zZm9ybSkpOwogICAgICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRM
YXllci0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgY29sdW1uTGF5ZXJzWzBdLCByZXF1ZXN0LCBy
ZXN1bHQsIGxvY2FsQ2xpcFJlY3QsIGhpdFRlc3RQb2ludCwgZmFsc2UsIHRyYW5zZm9ybVN0YXRl
LCB6T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAob2xkSGFzVHJhbnNmb3JtKQpAQCAtMzgw
Myw5ICszODA4LDExIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5
ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kCiAgICAgICAgICAgICAgICAg
bmV3VHJhbnNmb3JtU3RhdGUtPnRyYW5zbGF0ZShvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdo
dCgpLCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0pOwogICAg
ICAgICAgICAgICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQgPSByb3VuZGVkTGF5b3V0UG9pbnQo
bmV3VHJhbnNmb3JtU3RhdGUtPm1hcHBlZFBvaW50KCkpOwogICAgICAgICAgICAgICAgIExheW91
dFJlY3QgbG9jYWxIaXRUZXN0UmVjdCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRRdWFkKCku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICBIaXRUZXN0UG9pbnQgbmV3
SGl0VGVzdFBvaW50KHJlc3VsdC5oaXRUZXN0UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgbmV3
SGl0VGVzdFBvaW50LnNldFBvaW50KGxvY2FsUG9pbnQpOwogICAgICAgICAgICAgICAgIG5ld1Ry
YW5zZm9ybVN0YXRlLT5mbGF0dGVuKCk7CiAKLSAgICAgICAgICAgICAgICBoaXRMYXllciA9IGhp
dFRlc3RDaGlsZExheWVyQ29sdW1ucyhjaGlsZExheWVyLCBjb2x1bW5MYXllcnNbY29sdW1uSW5k
ZXggLSAxXSwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRlc3RSZWN0LCBsb2NhbFBvaW50LAor
ICAgICAgICAgICAgICAgIGhpdExheWVyID0gaGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxk
TGF5ZXIsIGNvbHVtbkxheWVyc1tjb2x1bW5JbmRleCAtIDFdLCByZXF1ZXN0LCByZXN1bHQsIGxv
Y2FsSGl0VGVzdFJlY3QsIG5ld0hpdFRlc3RQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9m
ZnNldCwgY29sdW1uTGF5ZXJzLCBjb2x1bW5JbmRleCAtIDEpOwogICAgICAgICAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDVhNWUyNDQuLmZmNDMxNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0xMTUsNiArMTE1LDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0Lmlz
RW1wdHkoKTsgfQogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0JiByZWN0KSB7
IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQorICAgIGJvb2wgaW50ZXJzZWN0cyhj
b25zdCBIaXRUZXN0UG9pbnQmKTsKIAogcHJpdmF0ZToKICAgICBMYXlvdXRSZWN0IG1fcmVjdDsK
QEAgLTcxNiwyNiArNzE3LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYWludExheWVyRmxhZ3MsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBj
b2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7CiAKICAgICBSZW5kZXJMYXllciogaGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJM
YXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgaGl0VGVzdFBvaW50LCBib29sIGFwcGxpZWRUcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBo
aXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlKiB0cmFuc2Zvcm1TdGF0ZSA9IDAsIGRvdWJsZSogek9mZnNldCA9IDApOwogICAgIFJlbmRl
ckxheWVyKiBoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiosIFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhp
dFRlc3RSZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgaGl0VGVzdFBvaW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0
VGVzdFBvaW50JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2Vu
ZGFudHMsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBi
b29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFBhZ2lu
YXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmRlckxheWVyKiByb290
TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgaGl0VGVzdFBvaW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
KiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KTsKICAgICBSZW5kZXJMYXllciogaGl0
VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IExheW91dFBvaW50JiBoaXRUZXN0UG9p
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlv
dXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5M
YXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKwogICAgIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVh
dGVMb2NhbFRyYW5zZm9ybVN0YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVy
KiBjb250YWluZXJMYXllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlv
dXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgTGF5b3V0UG9pbnQmIGhpdFRlc3RQb2ludCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwg
Y29uc3QgSGl0VGVzdFBvaW50JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdDsK
ICAgICAKLSAgICBib29sIGhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5b3V0
UG9pbnQmIGhpdFRlc3RQb2ludCwgSGl0VGVzdEZpbHRlcikgY29uc3Q7Ci0gICAgCisgICAgYm9v
bCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RQb2ludCYsIEhpdFRl
c3RGaWx0ZXIpIGNvbnN0OworCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwog
ICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWZXJ0
aWNhbE92ZXJmbG93KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJveExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcAppbmRleCBkZjhhNTQ1Li4wMDUwOGQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTI3Myw4ICsyNzMsNyBA
QCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVu
ZGVyZXIsIFBhaW50SW5mbyYgcGFpbnRJbgogICAgIH0KIH0KIAotCi1ib29sIFJlbmRlckxpbmVC
b3hMaXN0OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKSBjb25zdAorYm9vbCBSZW5kZXJMaW5l
Qm94TGlzdDo6aGl0VGVzdChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRl
c3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKGhp
dFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTI4NSw5ICsyODQsMTAgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpdFRlc3RSZXEKICAgICBpZiAoIWZp
cnN0TGluZUJveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBMYXlvdXRQb2ludCBw
b2ludCA9IHBvaW50SW5Db250YWluZXIucG9pbnQoKTsKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBm
aXJzdExpbmVCb3goKS0+aXNIb3Jpem9udGFsKCkgPwotICAgICAgICBJbnRSZWN0KHBvaW50SW5D
b250YWluZXIueCgpLCBwb2ludEluQ29udGFpbmVyLnkoKSAtIHJlc3VsdC50b3BQYWRkaW5nKCks
IDEsIHJlc3VsdC50b3BQYWRkaW5nKCkgKyByZXN1bHQuYm90dG9tUGFkZGluZygpICsgMSkgOgot
ICAgICAgICBJbnRSZWN0KHBvaW50SW5Db250YWluZXIueCgpIC0gcmVzdWx0LmxlZnRQYWRkaW5n
KCksIHBvaW50SW5Db250YWluZXIueSgpLCByZXN1bHQucmlnaHRQYWRkaW5nKCkgKyByZXN1bHQu
bGVmdFBhZGRpbmcoKSArIDEsIDEpOworICAgICAgICBJbnRSZWN0KHBvaW50LngoKSwgcG9pbnQu
eSgpIC0gcG9pbnRJbkNvbnRhaW5lci50b3BQYWRkaW5nKCksIDEsIHBvaW50SW5Db250YWluZXIu
dG9wUGFkZGluZygpICsgcG9pbnRJbkNvbnRhaW5lci5ib3R0b21QYWRkaW5nKCkgKyAxKSA6Cisg
ICAgICAgIEludFJlY3QocG9pbnQueCgpIC0gcG9pbnRJbkNvbnRhaW5lci5sZWZ0UGFkZGluZygp
LCBwb2ludC55KCksIHBvaW50SW5Db250YWluZXIucmlnaHRQYWRkaW5nKCkgKyBwb2ludEluQ29u
dGFpbmVyLmxlZnRQYWRkaW5nKCkgKyAxLCAxKTsKIAogICAgIGlmICghYW55TGluZUludGVyc2Vj
dHNSZWN0KHJlbmRlcmVyLCByZWN0LCBhY2N1bXVsYXRlZE9mZnNldCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTMwMCwxMiArMzAwLDEyIEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6Omhp
dFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxCiAg
ICAgICAgIGlmIChyYW5nZUludGVyc2VjdHNSZWN0KHJlbmRlcmVyLCBjdXJyLT5sb2dpY2FsVG9w
VmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZVRvcCgpKSwgY3Vyci0+bG9naWNhbEJvdHRvbVZpc3Vh
bE92ZXJmbG93KHJvb3QtPmxpbmVCb3R0b20oKSksIHJlY3QsIGFjY3VtdWxhdGVkT2Zmc2V0KSkg
ewogICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCByb290LT5saW5lVG9w
KCksIHJvb3QtPmxpbmVCb3R0b20oKSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7Ci0gICAg
ICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuaAppbmRleCBlNGM2ODAzLi4yYzIwMzgyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaApAQCAtNjQsOCArNjQsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5kZXJPYmplY3Qq
IHBhcmVudCwgUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAKICAgICB2b2lkIHBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKLSAg
ICBib29sIGhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBjb25z
dDsKLSAgICAKKyAgICBib29sIGhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgYm9vbCBhbnlMaW5lSW50ZXJzZWN0c1Jl
Y3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBib29sIHVzZVByaW50UmVjdCA9IGZhbHNlLCBMYXlvdXRVbml0IG91dGxpbmVTaXpl
ID0gMCkgY29uc3Q7CiAgICAgYm9vbCBsaW5lSW50ZXJzZWN0c0RpcnR5UmVjdChSZW5kZXJCb3hN
b2RlbE9iamVjdCosIElubGluZUZsb3dCb3gqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCmluZGV4IDUxNjQ0OWYuLjQwYjVmNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKQEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihWZXJ0aWNhbFNjcm9sbGJhciwgaW5kZXgpOwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
K2Jvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBo
aXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjg2LDEyICs2ODYsMTIg
QEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0
aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1Cb3VuZGluZ0JveFJlY3QoYWRq
dXN0ZWRMb2NhdGlvbiwgaSkuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lcikpIHsKKyAgICAgICAg
aWYgKGl0ZW1Cb3VuZGluZ0JveFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgaSkuY29udGFpbnMocG9p
bnRJbkNvbnRhaW5lci5wb2ludCgpKSkgewogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIG5vZGUg
PSBsaXN0SXRlbXNbaV0pIHsKICAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5v
ZGUpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHBvaW50SW5Db250YWluZXIgLSB0
b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgICAgIHJlc3VsdC5z
ZXRMb2NhbFBvaW50KHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1
c3RlZExvY2F0aW9uKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCmluZGV4IDcw
N2I2MWQ0Li4xMGIxOTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
TGVmdChpbnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKIAotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgLy8gU2Nyb2xsYWJs
ZUFyZWEgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAppbmRleCA3ODBlYjhjLi5jYWRhYmIwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcApAQCAtMjQwNiw3ICsyNDA2LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Omlz
Q29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhc0xheWVyKCkgJiYgdG9SZW5kZXJCb3hN
b2RlbE9iamVjdCh0aGlzKS0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7CiB9CiAKLWJvb2wgUmVu
ZGVyT2JqZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZp
bHRlcikKK2Jvb2wgUmVuZGVyT2JqZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
RmlsdGVyIGhpdFRlc3RGaWx0ZXIpCiB7CiAgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKICAgICBp
ZiAoaGl0VGVzdEZpbHRlciAhPSBIaXRUZXN0U2VsZikgewpAQCAtMjQ0Myw3ICsyNDQzLDcgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBM
YXlvdXRQb2ludCYgLypwb2ludEluQ29udGFpbmVyKi8sIGNvbnN0IExheW91dFBvaW50JiAvKmFj
Y3VtdWxhdGVkT2Zmc2V0Ki8sIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlck9iamVjdDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdFBvaW50JiAvKnBvaW50SW5Db250YWluZXIqLywgY29uc3QgTGF5b3V0UG9pbnQmIC8qYWNj
dW11bGF0ZWRPZmZzZXQqLywgSGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMmY1YTUwNC4uM2I4
YTBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNDYsNiAr
NDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFz
cyBBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ3Vyc29yOworY2xhc3MgSGl0VGVzdFBvaW50
OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIElubGluZUJveDsKIGNsYXNzIElubGluZUZs
b3dCb3g7CkBAIC02NDcsOSArNjQ4LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0NvbXBvc2l0
ZWQoKSBjb25zdDsKIAotICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0RmlsdGVyID0gSGl0VGVzdEFs
bCk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIGJv
b2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEZpbHRlciA9IEhpdFRlc3RBbGwpOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYp
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2
aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
Jik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbihpbnQgb2Zmc2V0
LCBFQWZmaW5pdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApp
bmRleCBlYTlkNTJjLi45OTM4ZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVnaW9uLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpwYWludFJl
cGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPCiB9
CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclJlZ2lvbjo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclJlZ2lvbjo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIGlmICgh
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjksMTEgKzEyOSwxMSBAQCBi
b29sIFJlbmRlclJlZ2lvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlcwogICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlz
IHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KICAgICBMYXlvdXRSZWN0
IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVzdWx0LnJlZ2lvbigpKTsKICAg
ICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKLSAgICBpZiAodmlzaWJsZVRv
SGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBib3VuZHNSZWN0
LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAg
ICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3Vu
ZCAmJiBwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKICAgICAgICAg
Ly8gQ2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBSZW5kZXJGbG93VGhyZWFkLgogICAgICAgICBp
ZiAobV9mbG93VGhyZWFkICYmIG1fZmxvd1RocmVhZC0+aGl0VGVzdFJlZ2lvbih0aGlzLCByZXF1
ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIExheW91dFBvaW50KGFkanVzdGVkTG9jYXRp
b24ueCgpICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYWRqdXN0ZWRMb2NhdGlvbi55
KCkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSkpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVy
IC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKKyAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShh
ZGp1c3RlZExvY2F0aW9uKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZWdpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZWdpb24uaAppbmRleCAwODZjNjNjLi44MjZlOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlZ2lvbi5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXgg
NDc5ZTNkNi4uZDk4ZmQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCkBAIC0xMjc1LDE3ICsxMjc1LDE3IEBAIExheW91dFJlY3QgUmVuZGVyVGFibGU6Om92ZXJm
bG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJSZWdpCiAgICAg
cmV0dXJuIHJlY3Q7CiB9CiAKLWJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIExheW91dFBv
aW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAK
ICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
b3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCByZXN1bHQucmVnaW9uKCkpLmludGVy
c2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKKyAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8IHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxv
d0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIHJlc3VsdC5yZWdpb24oKSkpKSB7CiAgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3go
KSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGls
ZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZC0+aXNUYWJsZUNhcHRpb24oKSkpIHsKICAgICAg
ICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9y
Q2hpbGQodG9SZW5kZXJCb3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uKTsKICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgY2hpbGRQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyIC0gY2hp
bGRQb2ludCkpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSBjaGlsZFBvaW50KSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTEyOTQsOCArMTI5NCw4IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuCiAgICAgTGF5b3V0UmVjdCBib3VuZHNS
ZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7Ci0gICAgaWYgKHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhp
dFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3Vs
dC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRv
TGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSkpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBI
aXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0
cyhib3VuZHNSZWN0KSkgeworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxp
cEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShh
ZGp1c3RlZExvY2F0aW9uKSkpOwogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFz
ZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCmluZGV4IGMzZWIwNzIuLmI2ZDI1MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5oCkBAIC0yNDMsOCArMjQzLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRNYXNrKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNh
bFdpZHRocygpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsK
LSAgICAKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJS
SURFOworCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGxhc3RMaW5lQm94QmFzZWxpbmUo
KSBjb25zdCBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVJvdy5jcHAKaW5kZXggM2NhYTdiNC4uMGU0MjRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0x
OTMsNyArMTk0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUYWJsZVJvdzo6Y2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHIKIH0KIAogLy8gSGl0IFRlc3Rp
bmcKLWJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIC8vIFRhYmxlIHJvd3MgY2Fu
bm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4gIEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0Lgog
ICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgpAQCAtMjA1LDEyICsy
MDYsMTIgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHIKICAgICAgICAgaWYgKGNoaWxkLT5pc1Rh
YmxlQ2VsbCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkp
IHsKICAgICAgICAgICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZUZvckNoaWxkKHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKSwgYWNjdW11bGF0ZWRPZmZzZXQpOwog
ICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGNl
bGxQb2ludCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoY2VsbFBvaW50KSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmgKaW5kZXggYzAxY2Q0NS4uYWZhODM4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2
aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5
ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBoYXNN
YXNrKCkgfHwgaGFzRmlsdGVyKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBhMTZlMGY2Li4wYWZlM2YzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTM4Myw3
ICsxMzgzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKHVuc2lnbmVk
IHBvcywgdW5zaWduZWQgZmlyc3QpCiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRh
YmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rp
b24pCitib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIC8vIElmIHdlIGhhdmUgbm8gY2hpbGRyZW4g
dGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCkBAIC0x
MzkzLDcgKzEzOTMsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIC8vIEp1c3QgZm9y
d2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgogICAgIExheW91dFBvaW50IGFkanVzdGVkTG9j
YXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKLSAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgcmVzdWx0
LnJlZ2lvbigpKS5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5l
cikpKQorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhcG9pbnRJbkNvbnRhaW5lci5pbnRl
cnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgcmVzdWx0LnJlZ2lvbigp
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChoYXNPdmVyZmxvd2luZ0NlbGwo
KSkgewpAQCAtMTQwNSw3ICsxNDA1LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAg
ICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxm
UGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2lu
dCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0
ZWRMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGFjdGlvbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9p
bnQocG9pbnRJbkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKKyAgICAgICAgICAgICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5l
ci5wb2ludCgpIC0gY2hpbGRQb2ludCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNDE1LDcgKzE0MTUsNyBA
QCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogCiAgICAgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwog
Ci0gICAgTGF5b3V0UmVjdCBoaXRUZXN0UmVjdCA9IHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJ
bkNvbnRhaW5lcik7CisgICAgTGF5b3V0UmVjdCBoaXRUZXN0UmVjdCA9IHJlc3VsdC5yZWN0Rm9y
UG9pbnQocG9pbnRJbkNvbnRhaW5lci5wb2ludCgpKTsKICAgICBoaXRUZXN0UmVjdC5tb3ZlQnko
LWFkanVzdGVkTG9jYXRpb24pOwogCiAgICAgTGF5b3V0UmVjdCB0YWJsZUFsaWduZWRSZWN0ID0g
bG9naWNhbFJlY3RGb3JXcml0aW5nTW9kZUFuZERpcmVjdGlvbihoaXRUZXN0UmVjdCk7CkBAIC0x
NDM2LDcgKzE0MzYsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgICAgICAgICAgICAg
IFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQuY2VsbHNbaV07CiAgICAgICAgICAgICAg
ICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoY2Vs
bCwgYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFJl
bmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyIC0g
Y2VsbFBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoY2VsbFBvaW50KSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaAppbmRleCBkMzhmMWQ1Li40NzhlNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0yMTQsNyArMjE0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRS
ZWN0KiA9IDApOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7
CiAKICAgICB2b2lkIGVuc3VyZVJvd3ModW5zaWduZWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuaAppbmRleCA4MTU3ZTM3Li5iOTZlY2E3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmgKQEAgLTE1Niw3ICsxNTYsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQm
LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIHZvaWQgZGVsZXRlVGV4dEJveGVzKCk7CiAgICAgYm9vbCBjb250YWlu
c09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcAppbmRleCA5YjRmZmU1Li5hNDYzMjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKQEAgLTQyLDEz
ICs0MiwxMyBAQCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6flJlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lKCkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KG5v
ZGUoKSktPnJlbmRlcmVyV2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAg
aWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpIHx8
IHJlc3VsdC5pbm5lck5vZGUoKSA9PSBpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAgIGhpdElu
bmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNl
dCk7CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVy
LnBvaW50KCksIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuaAppbmRleCAzYWUxZWEyLi41Yzg0YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaApAQCAtMzQsNyArMzQsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRBcmVhKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZF
UlJJREU7CiAKICAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcg
ZmFtaWx5KTsKICAgICB2aXJ0dWFsIExheW91dFVuaXQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZs
b2F0IGNoYXJXaWR0aCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDMxZjFmMjguLmM0M2Jm
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAg
ICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTIxNCw3ICsyMTQsNyBAQCBib29sIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdAogICAgIC8vICAtIHdlIGhpdCByZWdpb25zIG5vdCBpbiBhbnkgZGVjb3JhdGlvbiBidXR0
b25zLgogICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7CiAg
ICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaW5uZXJUZXh0RWxlbWVu
dCgpKSB8fCByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpIHx8IChjb250YWluZXIgJiYgY29u
dGFpbmVyID09IHJlc3VsdC5pbm5lck5vZGUoKSkpIHsKLSAgICAgICAgTGF5b3V0UG9pbnQgcG9p
bnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXI7CisgICAgICAgIExheW91dFBvaW50IHBvaW50
SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyLnBvaW50KCk7CiAgICAgICAgIGlmIChjb250YWlu
ZXIgJiYgaW5uZXJCbG9ja0VsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKGlubmVyQmxvY2tF
bGVtZW50KCktPnJlbmRlckJveCgpKQogICAgICAgICAgICAgICAgIHBvaW50SW5QYXJlbnQgLT0g
dG9MYXlvdXRTaXplKGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpLT5sb2NhdGlvbigp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaAppbmRleCBmZmM1MGEzLi4xMTVjNDgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCkBAIC01
Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXV0b3Njcm9sbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwCmluZGV4IGM0OWQ4ZjIuLjNhMzAyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwCkBAIC0zODUsMTEgKzM4NSwxMSBAQCBSZW5kZXJXaWRnZXQqIFJlbmRl
cldpZGdldDo6ZmluZChjb25zdCBXaWRnZXQqIHdpZGdldCkKICAgICByZXR1cm4gd2lkZ2V0UmVu
ZGVyZXJNYXAoKS5nZXQod2lkZ2V0KTsKIH0KIAotYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJXaWRn
ZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsK
ICAgICBib29sIGhhZFJlc3VsdCA9IHJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBib29sIGluc2lk
ZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pOwotICAgIAorCiAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5v
dCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhKS4KICAgICBpZiAoKGluc2lkZSB8fCBy
ZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9k
ZSgpID09IG5vZGUoKSkKICAgICAgICAgcmVzdWx0LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94
UmVjdCgpLmNvbnRhaW5zKHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuaAppbmRleCA1NGE3YTc3Li5iOTNhZTdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCkBAIC02MCw3ICs2MCw3IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCBDdXJzb3JEaXJlY3RpdmUg
Z2V0Q3Vyc29yKGNvbnN0IExheW91dFBvaW50JiwgQ3Vyc29yJikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IGJjYmU3YmQuLmE1MDAwYjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTIxMiwxMSArMjEy
LDExIEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICNlbmRpZgogfQogCi1ib29sIFJvb3RJbmxp
bmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lQm90dG9tKQorYm9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7
CiAgICAgaWYgKGhhc0VsbGlwc2lzQm94KCkgJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpKSB7CiAg
ICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkg
ewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBv
aW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmgKaW5kZXggMmVkYmRkYi4uYTE1MDdhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCkBAIC0xMTMsNyArMTEzLDcgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7Ci0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQg
bGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKIAogICAgIHVzaW5nIElu
bGluZUJveDo6aGFzU2VsZWN0ZWRDaGlsZHJlbjsKICAgICB1c2luZyBJbmxpbmVCb3g6OnNldEhh
c1NlbGVjdGVkQ2hpbGRyZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAppbmRleCAwNzQ5NDQwLi5kNjYwNTY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25P
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdGb3Jl
aWduT2JqZWN0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKQEAgLTE3Nywx
MiArMTc4LDEzIEBAIGJvb2wgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIEZPcyBlc3RhYmxpc2ggYSBzdGFja2luZyBjb250ZXh0LCBzbyB3ZSBuZWVk
IHRvIGhpdC10ZXN0IGFsbCBsYXllcnMuCi0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSwgTGF5
b3V0UG9pbnQoKSwgSGl0VGVzdEZvcmVncm91bmQpCi0gICAgICAgIHx8IFJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50
KSwgTGF5b3V0UG9pbnQoKSwgSGl0VGVzdEZsb2F0KQotICAgICAgICB8fCBSZW5kZXJCbG9jazo6
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2lu
dCksIExheW91dFBvaW50KCksIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOworICAgIEhp
dFRlc3RQb2ludCBoaXRUZXN0UG9pbnQocm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsK
KyAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0
VGVzdFBvaW50LCBMYXlvdXRQb2ludCgpLCBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAgfHwg
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFBvaW50LCBM
YXlvdXRQb2ludCgpLCBIaXRUZXN0RmxvYXQpCisgICAgICAgIHx8IFJlbmRlckJsb2NrOjpub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwgTGF5b3V0UG9pbnQoKSwgSGl0
VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYsIGNvbnN0IExheW91dFBv
aW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ZvcmVpZ25PYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdC5oCmluZGV4IDhmZTA4NjQuLjgwZGRmZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5o
CkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIG1fdmlld3BvcnQuc2l6ZSgpKTsgfQogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZs
b2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWln
bk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBtYXBM
b2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBi
b29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiwgQXBwbHlDb250
YWluZXJGbGlwT3JOb3QgPSBBcHBseUNvbnRhaW5lckZsaXAsIGJvb2wqIHdhc0ZpeGVkID0gMCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwCmluZGV4IGMxYzI3YjAuLjk1OWMxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0x
MTEsNyArMTExLDcgQEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWwKICAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOwogfQogCi1ib29s
IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFBvaW50Jiwg
SGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYs
IGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKaW5kZXggZDgyNjAwZi4uMGQ4MTkyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaApAQCAtNzEsNyArNzEsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCwgU1ZHIHVzZXMgYSBkaWZmZXJlbnQg
bm9kZUF0UG9pbnQgbWV0aG9kCi0gICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsK
KyAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4
IDU4YTcxNTMuLjk1NTI4OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmNwcApAQCAtNDA5LDkgKzQwOSw5IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6
dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3guaW5mbGF0
ZShib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9v
bCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQogewotICAgIExheW91dFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2lu
dEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICBMYXlv
dXRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlv
dXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICBMYXlvdXRQb2ludCBwb2ludEluQm9yZGVy
Qm94KHBvaW50SW5QYXJlbnQueCgpIC0geCgpLCBwb2ludEluUGFyZW50LnkoKSAtIHkoKSk7CiAK
ICAgICAvLyBOb3RlOiBGb3Igbm93LCB3ZSdyZSBpZ25vcmluZyBoaXRzIHRvIGJvcmRlciBhbmQg
cGFkZGluZyBmb3IgPHN2Zz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmgKaW5kZXggNmZiNTY5NC4uOWFhN2U3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9
CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNv
bXB1dGVGbG9hdFJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IGEyY2Fl
N2QuLmY1MTRlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgog
I2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lu
bGluZVRleHQuaCIKQEAgLTQ1MCwxNCArNDUxLDE1IEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9k
ZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
CiAgICAgICAgICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEo
dGhpcywgbG9jYWxQb2ludCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAK
IAotICAgICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIGZsb29yZWRJbnRQb2ludChsb2NhbFBvaW50KSwgSW50UG9pbnQoKSwgaGl0VGVzdEFj
dGlvbik7CisgICAgICAgICAgICBIaXRUZXN0UG9pbnQgaGl0VGVzdFBvaW50KGZsb29yZWRJbnRQ
b2ludChsb2NhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFBvaW50LCBMYXlvdXRQb2ludCgpLCBoaXRU
ZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0
VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmgKaW5kZXggYWY5NTBjMy4uOTNjYjY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29s
IG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmly
dHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAppbmRleCA5MzAyYWVmLi5kMWEwOTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTczOCw3ICs3MzgsNyBAQCBGbG9h
dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0CiAgICAg
cmV0dXJuIHRleHRSZWN0OwogfQogCi1ib29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQsIExheW91dFVuaXQpCitib29sIFNWR0lubGluZVRl
eHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0LCBMYXlvdXRVbml0
KQogewogICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUgd2l0aCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQ
b2ludCBiZXR0ZXIuCiAgICAgQVNTRVJUKCFpc0xpbmVCcmVhaygpKTsKQEAgLTc1MSw4ICs3NTEs
OCBAQCBib29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgICAgICAgICAgRmxvYXRQb2ludCBib3hP
cmlnaW4oeCgpLCB5KCkpOwogICAgICAgICAgICAgYm94T3JpZ2luLm1vdmVCeShhY2N1bXVsYXRl
ZE9mZnNldCk7CiAgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7
Ci0gICAgICAgICAgICBpZiAocmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9p
bnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11
bGF0ZWRPZmZzZXQpKTsKKyAgICAgICAgICAgIGlmIChwb2ludEluQ29udGFpbmVyLmludGVyc2Vj
dHMocmVjdCkpIHsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3Vt
dWxhdGVkT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVj
dEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJl
Y3QpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCmluZGV4
IDA3OTYwMWQuLmE0ZTAzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5oCkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFRleHRS
dW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBv
c2l0aW9uKTsKICAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50Jiwg
Ym9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKIAotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgZmxv
YXQgbV9sb2dpY2FsSGVpZ2h0OwotLSAKMS43LjEwCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>