<?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>62145</bug_id>
          
          <creation_ts>2011-06-06 13:42:50 -0700</creation_ts>
          <short_desc>Convert nodeAtPoint to IntPoint</short_desc>
          <delta_ts>2011-06-07 20:12:27 -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>
          <dependson>62144</dependson>
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>415983</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-06 13:42:50 -0700</bug_when>
    <thetext>Ongoing tx, ty removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416124</commentid>
    <comment_count>1</comment_count>
      <attachid>96153</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-06 16:56:09 -0700</bug_when>
    <thetext>Created attachment 96153
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416149</commentid>
    <comment_count>2</comment_count>
      <attachid>96153</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-06 17:16:30 -0700</bug_when>
    <thetext>Comment on attachment 96153
Patch

Attachment 96153 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8744012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416163</commentid>
    <comment_count>3</comment_count>
      <attachid>96163</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-06 17:30:04 -0700</bug_when>
    <thetext>Created attachment 96163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416165</commentid>
    <comment_count>4</comment_count>
      <attachid>96153</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-06 17:33:17 -0700</bug_when>
    <thetext>Comment on attachment 96153
Patch

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

The more I see of these, the less I like &quot;accumulatedOffset&quot;.  I conveys about as much meaning as &quot;addedInt&quot;.  I think we need a better name.  I am entertained that this patch had some (in my view) at least slightly better names for these values prior to this change.  r-, but only because of the red bots.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.h:70
&gt; -    bool nodeAtPoint(const HitTestRequest&amp;, HitTestResult&amp;, const IntPoint&amp; pointInContainer, int dxParentToContainer, int dyParentToContainer, HitTestAction);
&gt; +    bool nodeAtPoint(const HitTestRequest&amp;, HitTestResult&amp;, const IntPoint&amp; pointInContainer, const IntPoint&amp; accumulatedOffset, HitTestAction);

Again, more attempts by me to describe what I thought was going on as I wrote RenderSVGModelObject. :)

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:-442
&gt; -    IntPoint pointInParent = pointInContainer - containerToParentOffset;

This was my understanding at the time, was that this offset was from the container (of whatever form that is) to our parent.  I actually kinda think containerToParentOffset is more descriptive than accumulatedOffset. :)  I wish we had dug up this code earlier.

We can always of course rename accumulatedOffset everywhere now that we&apos;re slowly understanding what this is all doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416173</commentid>
    <comment_count>5</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-06 17:40:51 -0700</bug_when>
    <thetext>The name containerToParentOffset is much more descriptive than accumulatedOffset. How about I change it to containerToParentOffset in this patch and then go back and replace the existing uses of accumulatedOffset?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416174</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-06 17:42:05 -0700</bug_when>
    <thetext>I think you should run any naming by Simon since he&apos;s had opinions in the past.

But I&apos;m OK with &quot;containerToParentOffset&quot; used in this or other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416176</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-06 17:42:26 -0700</bug_when>
    <thetext>Please let the EWSes have their say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416768</commentid>
    <comment_count>8</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-07 13:53:34 -0700</bug_when>
    <thetext>Simon, what&apos;s your take on this? Do you prefer accumulatedOffset, containerToParentOffset or something else entirely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416770</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-07 13:55:02 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Simon, what&apos;s your take on this? Do you prefer accumulatedOffset, containerToParentOffset or something else entirely?

accumulatedOffset is more accurate than containerToParentOffset, but I&apos;m not sure that &apos;accumulated&apos; adds much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416772</commentid>
    <comment_count>10</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-07 13:58:18 -0700</bug_when>
    <thetext>&gt; accumulatedOffset is more accurate than containerToParentOffset, but I&apos;m not sure that &apos;accumulated&apos; adds much.

True, naming is hard. Just calling it offset seems confusing though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416801</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-07 14:48:47 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Simon, what&apos;s your take on this? Do you prefer accumulatedOffset, containerToParentOffset or something else entirely?
&gt; 
&gt; accumulatedOffset is more accurate than containerToParentOffset, but I&apos;m not sure that &apos;accumulated&apos; adds much.

containerToParentOffset is just describing what I thought the offset meant, when I wrote RenderSVGModelObject 2 years ago.

If we actually know what these offsets do... then we can name them better. :)  I still don&apos;t understand what they mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416898</commentid>
    <comment_count>12</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-07 16:18:20 -0700</bug_when>
    <thetext>I plan to land this with accumulatedOffset. I&apos;ll change it here and elsewhere if and when we come up with a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417043</commentid>
    <comment_count>13</comment_count>
      <attachid>96364</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-07 19:51:38 -0700</bug_when>
    <thetext>Created attachment 96364
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417048</commentid>
    <comment_count>14</comment_count>
      <attachid>96364</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 20:12:21 -0700</bug_when>
    <thetext>Comment on attachment 96364
Patch for landing

Clearing flags on attachment: 96364

Committed r88319: &lt;http://trac.webkit.org/changeset/88319&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417049</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 20:12:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96153</attachid>
            <date>2011-06-06 16:56:09 -0700</date>
            <delta_ts>2011-06-06 17:33:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62145-20110606165608.patch</filename>
            <type>text/plain</type>
            <size>62776</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDYtMDYgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvbnZlcnQgbm9kZUF0UG9pbnQgdG8gSW50UG9pbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTQ1CisKKyAgICAg
ICAgQ29udmVydCBub2RlQXRQb2ludCB0byB0YWtlIGFuIEludFBvaW50IGluc3RlYWQgb2YgYSBw
YWlyIG9mIGludHMgZm9yIHRoZQorICAgICAgICBhY2N1bXVsYXRlZCBvZmZzZXQuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6Om1vdmVCeSk6
CisgICAgICAgIEFkZCBtb3ZlQnkoSW50UG9pbnQpIG1ldGhvZAorICAgICAgICAKKyAgICAgICAg
KiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNC
b3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6bm9kZUF0UG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhp
dFRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
V2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2Rl
QXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25P
YmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgorCiAyMDExLTA2LTA2ICBFbWlsIEEgRWtsdW5k
ICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJ
KHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1feCArPSBkeDsKICAgICAgICAgbV95ICs9IGR5OwogICAgIH0KKyAgICB2b2lkIG1vdmVC
eShjb25zdCBJbnRQb2ludCYgYSkKKyAgICB7CisgICAgICAgIG1feCArPSBhLngoKTsKKyAgICAg
ICAgbV95ICs9IGEueSgpOworICAgIH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBz
eSkKICAgICB7CiAgICAgICAgIG1feCAqPSBzeDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMjUgKzEwMSwy
NCBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgY29udGV4
dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uKSwgSW50UG9pbnQoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWludE9m
ZnNldC55KCkgKyB0b3ApLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0KIAotYm9vbCBF
bGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGlu
dCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCitib29sIEVsbGlwc2lz
Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7
Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZExv
Y2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyByb3VuZGVkSW50UG9pbnQodG9wTGVmdCgpKTsK
IAogICAgIC8vIEhpdCB0ZXN0IHRoZSBtYXJrdXAgYm94LgogICAgIGlmIChtX21hcmt1cEJveCkg
ewogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0
TGluZSk7Ci0gICAgICAgIGludCBtdHggPSB0eCArIG1fbG9naWNhbFdpZHRoIC0gbV9tYXJrdXBC
b3gtPngoKTsKLSAgICAgICAgaW50IG10eSA9IHR5ICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkgLSAobV9tYXJrdXBCb3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHls
ZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICBpZiAobV9t
YXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
bXR4LCBtdHksIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7CisgICAgICAgIGludCBtdHggPSBhZGp1
c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKKyAg
ICAgICAgaW50IG10eSA9IGFkanVzdGVkTG9jYXRpb24ueSgpICsgc3R5bGUtPmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigp
LT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICBp
ZiAobV9tYXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgSW50UG9pbnQobXR4LCBtdHkpLCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgewogICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250
YWluZXIgLSBJbnRTaXplKG10eCwgbXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5
LCBtX2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQpOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IElu
dFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgSW50U2l6ZShtX2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQp
KTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIElu
dFNpemUodHgsIHR5KSk7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAg
ICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigp
LT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmgJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsK
ICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUg
cykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24g
ODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIwLDEyICsyMjAsMTIgQEAgdm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbgogICAgIH0KIH0KIAotYm9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVU
b3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKK2Jvb2wgSW5saW5lQm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50IC8qbGluZUJvdHRvbSovKQogewogICAgIC8v
IEhpdCB0ZXN0IGFsbCBwaGFzZXMgb2YgcmVwbGFjZWQgZWxlbWVudHMgYXRvbWljYWxseSwgYXMg
dGhvdWdoIHRoZSByZXBsYWNlZCBlbGVtZW50IGVzdGFibGlzaGVkIGl0cwogICAgIC8vIG93biBz
dGFja2luZyBjb250ZXh0LiAgKFNlZSBBcHBlbmRpeCBFLjIsIHNlY3Rpb24gNi40IG9uIGlubGlu
ZSBibG9jay90YWJsZSBlbGVtZW50cyBpbiB0aGUgQ1NTMi4xCiAgICAgLy8gc3BlY2lmaWNhdGlv
bi4pCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS0+
aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zm
c2V0KTsKIH0KIAogY29uc3QgUm9vdElubGluZUJveCogSW5saW5lQm94Ojpyb290KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDg4MTk3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgs
IGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIElubGluZUJveCogbmV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk4LDE4
ICs4OTgsMTggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpzZXRPdmVyZmxvd0Zyb21Mb2dpYwogICAg
IHNldFZpc3VhbE92ZXJmbG93KHZpc3VhbE92ZXJmbG93LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsK
IH0KIAotYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkK
K2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKQogewogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93
UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7Ci0gICAgb3ZlcmZsb3dSZWN0Lm1vdmUodHgsIHR5KTsKKyAgICBvdmVyZmxvd1Jl
Y3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICBpZiAoIW92ZXJmbG93UmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElu
bGluZUJveCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGlu
ZSgpKSB7Ci0gICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnIt
PmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBsaW5lVG9w
LCBsaW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOworICAgICAg
ICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpIHx8ICFjdXJyLT5ib3hNb2RlbE9iamVj
dCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBs
aW5lQm90dG9tKSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM1LDEwICs5
MzUsMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgIC8v
IE1vdmUgeC95IHRvIG91ciBjb29yZGluYXRlcy4KICAgICBJbnRSZWN0IHJlY3QobWluWCwgbWlu
WSwgd2lkdGgsIGhlaWdodCk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKHJlY3QpOwotICAgIHJl
Y3QubW92ZSh0eCwgdHkpOworICAgIHJlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAog
ICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRh
aW5lciAtIEludFNpemUodHgsIHR5KSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJl
LCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgorICAgICAg
ICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdN
b2RlKHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERv
bid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWlu
aW5nIGJsb2NrJ3Mgc3BhY2UuCiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCByZWN0KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRGaWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50Qm94U2hhZG93
KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgU2hhZG93U3R5bGUsIGNvbnN0IEludFJl
Y3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQm
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGlu
ZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckxpbmVCb3hMaXN0KiByZW5kZXJlckxpbmVCb3hl
cygpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDE2ICszNDIsMTYgQEAgYm9vbCBJ
bmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkt
PmlzQlIoKSB8fCAocmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVu
KCkgPT0gMSAmJiAoKnRleHRSZW5kZXJlcigpLT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwog
fQogCi1ib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgaW50IHR4LCBpbnQgdHksIGludCAvKiBsaW5lVG9wICovLCBpbnQgLypsaW5lQm90dG9tKi8p
Citib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50
IC8qbGluZUJvdHRvbSovKQogewogICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5n
RmxpcHBpbmcoKTsKLSAgICBib3hPcmlnaW4ubW92ZSh0eCwgdHkpOworICAgIGJveE9yaWdpbi5t
b3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIEZsb2F0UmVjdCByZWN0KGJveE9yaWdpbiwg
SW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1
bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2lu
dEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRh
aW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5D
b250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA4ODE5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKIHB1YmxpYzoK
ICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODk2
LDE0ICszODk2LDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHIK
ICAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgSW50U2l6
ZSBsb2NhbE9mZnNldCh0eCArIHgoKSwgdHkgKyB5KCkpOworICAgIEludFBvaW50IGFkanVzdGVk
TG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKKyAgICBJbnRTaXplIGxv
Y2FsT2Zmc2V0ID0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pOwogCiAgICAgaWYgKCFpc1JlbmRl
clZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0
IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgp
OwotICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKGxvY2FsT2Zmc2V0KTsKKyAgICAgICAgb3ZlcmZs
b3dCb3gubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwogICAgICAgICBpZiAoIW92ZXJmbG93Qm94
LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzkxOSw3ICszOTIwLDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIGJvb2wgdXNlT3ZlcmZsb3dD
bGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAg
Ym9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKICAg
ICBJbnRSZWN0IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5l
cikpOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xp
cCgpID8gY29udHJvbENsaXBSZWN0KHRvUG9pbnQobG9jYWxPZmZzZXQpKS5pbnRlcnNlY3RzKGhp
dFRlc3RBcmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QodG9Qb2ludChsb2NhbE9mZnNldCksIEluY2x1
ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOworICAgIGJv
b2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJv
bENsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpIDogb3Zl
cmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNp
emUpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikgewog
ICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAgICAgSW50U2l6ZSBz
Y3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCk7CkBAIC0zOTQzLDcgKzM5NDQsNyBAQCBib29sIFJl
bmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAKICAgICAvLyBOb3cgaGl0IHRlc3Qg
b3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNr
Z3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7
Ci0gICAgICAgIEludFJlY3QgYm91bmRzUmVjdChsb2NhbE9mZnNldC53aWR0aCgpLCBsb2NhbE9m
ZnNldC5oZWlnaHQoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGJvdW5k
c1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KSk7
CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5v
ZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCkBAIC00MDQzLDcgKzQwNDQsNyBA
QCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMoY29uc3QgCiAgICAgICAgICAgICBj
aGlsZEhpdFRlc3QgPSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQ7CiAgICAgICAgIGZvciAo
UmVuZGVyQm94KiBjaGlsZCA9IGxhc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQg
PSBmbGlwRm9yV3JpdGluZ01vZGUoY2hpbGQsIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hp
bGRGbGlwcGluZ0FkanVzdG1lbnQpOwotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LngoKSwgY2hp
bGRQb2ludC55KCksIGNoaWxkSGl0VGVzdCkpCisgICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkLT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGNo
aWxkSGl0VGVzdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24g
ODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEVUZXh0
QWxpZ24gdGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCBlbmRzV2l0aFNvZnRCcmVhaykgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubGluZURpcmVjdGlvbkxpbmVCb3VuZHMoaW50IC8q
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsTGVmdCAqLywg
ZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAqLykgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MCwyNCAr
NzQwLDIzIEBAIGludCBSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEgKIH0KIAog
Ly8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQor
Ym9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0
ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIENo
ZWNrIGtpZHMgZmlyc3QuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBp
ZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0
eSkpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFkanVzdGVkTG9jYXRpb24sIGFj
dGlvbikpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0
LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQg
aW4gdGhlCiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFj
ZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMpLgotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJl
Y3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgSW50UmVjdCBib3VuZHNSZWN0ID0g
SW50UmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwogICAgIGlmICh2aXNpYmxlVG9IaXRU
ZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUo
dHgsIHR5KSk7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJv
dW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDEyICsxNTgsMTIg
QEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogfQogCiBib29sIFJl
bmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCisgICAgY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYgKGFjdGlvbiAhPSBIaXRUZXN0Rm9y
ZWdyb3VuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpbnNpZGUgPSBSZW5k
ZXJCb3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgs
IHR5LCBhY3Rpb24pCisgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFjdGlv
bikKICAgICAgICAgfHwgbV9pc1Jlc2l6aW5nOwogCiAgICAgaWYgKGluc2lkZSAmJiBmcmFtZVNl
dCgpLT5ub1Jlc2l6ZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dl
ZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkx
LDE3ICszOTEsMTcgQEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpIAog
ICAgIHJldHVybiBpID8gaS0+dHJlZVNjb3BlKCktPmdldEltYWdlTWFwKGktPmZhc3RHZXRBdHRy
aWJ1dGUodXNlbWFwQXR0cikpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgSGl0VGVzdFJlc3VsdCB0
ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQudG9wUGFkZGluZygpLCByZXN1bHQucmln
aHRQYWRkaW5nKCksIHJlc3VsdC5ib3R0b21QYWRkaW5nKCksIHJlc3VsdC5sZWZ0UGFkZGluZygp
KTsKLSAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0
LCB0ZW1wUmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwor
ICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHRl
bXBSZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0
aW9uKTsKIAogICAgIGlmICh0ZW1wUmVzdWx0LmlubmVyTm9kZSgpICYmIG5vZGUoKSkgewogICAg
ICAgICBpZiAoSFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkpIHsKICAgICAgICAgICAg
IEludFJlY3QgY29udGVudEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgICAgICAgICBmbG9h
dCB6b29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgaW50IG1hcFgg
PSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLngoKSAtIHR4IC0gdGhpcy0+eCgpIC0gY29udGVu
dEJveC54KCkpIC8gem9vbSk7Ci0gICAgICAgICAgICBpbnQgbWFwWSA9IGxyb3VuZGYoKHBvaW50
SW5Db250YWluZXIueSgpIC0gdHkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29t
KTsKKyAgICAgICAgICAgIGludCBtYXBYID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci54KCkg
LSBhY2N1bXVsYXRlZE9mZnNldC54KCkgLSB0aGlzLT54KCkgLSBjb250ZW50Qm94LngoKSkgLyB6
b29tKTsKKyAgICAgICAgICAgIGludCBtYXBZID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci55
KCkgLSBhY2N1bXVsYXRlZE9mZnNldC55KCkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkg
LyB6b29tKTsKICAgICAgICAgICAgIGlmIChtYXAtPm1hcE1vdXNlRXZlbnQobWFwWCwgbWFwWSwg
Y29udGVudEJveC5zaXplKCksIHRlbXBSZXN1bHQpKQogICAgICAgICAgICAgICAgIHRlbXBSZXN1
bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgbWluaW11bVJlcGxhY2VkSGVpZ2h0
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UqKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
Ym9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEyLDkg
KzcxMiw5IEBAIGNvbnN0IGNoYXIqIFJlbmRlcklubGluZTo6cmVuZGVyTmFtZSgpIGMKIH0KIAog
Ym9vbCBSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgcmV0dXJu
IG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBJbnRQb2ludCh0eCwgdHkpLCBoaXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gbV9saW5l
Qm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJl
bmRlcklubGluZTo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA4ODE5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBib29sIHJl
cXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5z
cGFyZW50KCkgfHwgaGFzTWFzaygpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTgsNyArMjk4LDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdChSZW5kZXJC
bwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94KCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3Qg
PSBjdXJyLT5yb290KCk7CiAgICAgICAgIGlmIChyYW5nZUludGVyc2VjdHNSZWN0KHJlbmRlcmVy
LCBjdXJyLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZVRvcCgpKSwgY3Vyci0+
bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KHJvb3QtPmxpbmVCb3R0b20oKSksIHJlY3QsIGFj
Y3VtdWxhdGVkT2Zmc2V0KSkgewotICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zm
c2V0LngoKSwgYWNjdW11bGF0ZWRPZmZzZXQueSgpLCByb290LT5saW5lVG9wKCksIHJvb3QtPmxp
bmVCb3R0b20oKSk7CisgICAgICAgICAgICBib29sIGluc2lkZSA9IGN1cnItPm5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIHJv
b3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKICAgICAgICAgICAgIGlmIChpbnNp
ZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY0LDIxICs2NjQs
MjEgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ldwogICAgIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4KTsKIH0KIAot
Ym9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wg
UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQogewotICAgIGlmICghUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAo
IVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2VsZWN0RWxl
bWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpOwogICAgIGlu
dCBzaXplID0gbnVtSXRlbXMoKTsKLSAgICB0eCArPSB0aGlzLT54KCk7Ci0gICAgdHkgKz0gdGhp
cy0+eSgpOworICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNl
dCArIGxvY2F0aW9uKCk7CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdChJbnRQb2ludCh0eCwgdHkpLCBpKS5jb250
YWlucyhwb2ludEluQ29udGFpbmVyKSkgeworICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVj
dChhZGp1c3RlZExvY2F0aW9uLCBpKS5jb250YWlucyhwb2ludEluQ29udGFpbmVyKSkgewogICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIG5vZGUgPSBsaXN0SXRlbXNbaV0pIHsKICAgICAgICAgICAg
ICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwogICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0
SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2Nh
bFBvaW50KHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0
ZWRMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJl
dmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChp
bnQpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pOwogCiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlLgogICAgIHZpcnR1
YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNDcsMjAgKzIxNDcsMjAgQEAgYm9vbCBSZW5kZXJPYmplY3Q6
OmhpdFRlc3QoY29uc3QgSGl0VGVzdAogICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CiAgICAgaWYg
KGhpdFRlc3RGaWx0ZXIgIT0gSGl0VGVzdFNlbGYpIHsKICAgICAgICAgLy8gRmlyc3QgdGVzdCB0
aGUgZm9yZWdyb3VuZCBsYXllciAobGluZXMgYW5kIGlubGluZXMpLgotICAgICAgICBpbnNpZGUg
PSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LngoKSwgYWNjdW11bGF0ZWRPZmZzZXQueSgpLCBIaXRUZXN0Rm9yZWdyb3VuZCk7
CisgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGb3JlZ3JvdW5kKTsKIAogICAgICAg
ICAvLyBUZXN0IGZsb2F0cyBuZXh0LgogICAgICAgICBpZiAoIWluc2lkZSkKLSAgICAgICAgICAg
IGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQueCgpLCBhY2N1bXVsYXRlZE9mZnNldC55KCksIEhpdFRlc3RGbG9h
dCk7CisgICAgICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0RmxvYXQpOwogCiAgICAg
ICAgIC8vIEZpbmFsbHkgdGVzdCB0byBzZWUgaWYgdGhlIG1vdXNlIGlzIGluIHRoZSBiYWNrZ3Jv
dW5kICh3aXRoaW4gYSBjaGlsZCBibG9jaydzIGJhY2tncm91bmQpLgogICAgICAgICBpZiAoIWlu
c2lkZSkKLSAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQueCgpLCBhY2N1bXVsYXRlZE9mZnNl
dC55KCksIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOworICAgICAgICAgICAgaW5zaWRl
ID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CiAgICAgfQogCiAgICAg
Ly8gU2VlIGlmIHRoZSBtb3VzZSBpcyBpbnNpZGUgdXMgYnV0IG5vdCBhbnkgb2Ygb3VyIGRlc2Nl
bmRhbnRzCiAgICAgaWYgKGhpdFRlc3RGaWx0ZXIgIT0gSGl0VGVzdERlc2NlbmRhbnRzICYmICFp
bnNpZGUpCi0gICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQueCgpLCBhY2N1bXVsYXRlZE9mZnNldC55
KCksIEhpdFRlc3RCbG9ja0JhY2tncm91bmQpOworICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QmxvY2tCYWNrZ3JvdW5kKTsKIAogICAgIHJldHVybiBpbnNpZGU7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA4ODE5NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTQ2LDcgKzU0Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBoaXRUZXN0KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RG
aWx0ZXIgPSBIaXRUZXN0QWxsKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOTQsMTcgKzExOTQsMTYgQEAgSW50UmVjdCBSZW5kZXJUYWJsZTo6b3ZlcmZsb3dDbGlwUmVj
dChjbwogICAgIHJldHVybiByZWN0OwogfQogCi1ib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RB
Y3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAg
ICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlv
bigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xp
cCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QoSW50UG9pbnQodHgsIHR5KSkuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgeworICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uKS5pbnRlcnNlY3Rz
KHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAh
dG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAg
SW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGls
ZCksIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwot
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55KCksIGFjdGlvbikp
IHsKKyAgICAgICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdN
b2RlKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbiwgUGFyZW50VG9DaGlsZEZs
aXBwaW5nQWRqdXN0bWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGFjdGlvbikp
IHsKICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvUG9p
bnQocG9pbnRJbkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxMyw5ICsxMjEyLDkgQEAgYm9v
bCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIH0KIAogICAgIC8vIENo
ZWNrIG91ciBib3VuZHMgbmV4dC4KLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4
LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJl
Y3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGlu
ZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0
VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0
LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gSW50
U2l6ZSh0eCwgdHkpKSk7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlw
Rm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0aW9u
KSkpOwogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5v
ZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAko
cmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFzZWxp
bmUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Um93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBJbnRS
ZWN0IFJlbmRlclRhYmxlUm93OjpjbGlwcGVkT3ZlcmZsb3dSCiB9CiAKIC8vIEhpdCBUZXN0aW5n
Ci1ib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5k
ZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7
CiAgICAgLy8gVGFibGUgcm93cyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZl
bHkgdGhleSBkbyBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJl
biBhbHdheXMuCkBAIC0xOTcsOSArMTk3LDkgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0
UG9pbnQoY29uc3QgSAogICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2Qg
KHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAogICAg
ICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KICAgICAgICAgaWYgKGNoaWxk
LT5pc1RhYmxlQ2VsbCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xh
eWVyKCkpIHsKLSAgICAgICAgICAgIEludFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5n
TW9kZSh0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCksIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRv
Q2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwotICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludC54KCksIGNl
bGxQb2ludC55KCksIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUoY2VsbFBvaW50LngoKSwgY2Vs
bFBvaW50LnkoKSkpOworICAgICAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlKHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKSwgYWNjdW11bGF0ZWRPZmZzZXQsIFBh
cmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgICAgICAgICAgaWYgKGNoaWxkLT5u
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludCwg
YWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBw
b2ludEluQ29udGFpbmVyIC0gdG9TaXplKGNlbGxQb2ludCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Ci0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAg
ICAgLy8gVGhlIG9ubHkgdGltZSByb3dzIGdldCBhIGxheWVyIGlzIHdoZW4gdGhleSBoYXZlIHRy
YW5zcGFyZW5jeS4KICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0
dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0o
KSB8fCBoYXNNYXNrKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQy
LDcgKzExNDIsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4oaW50CiB9
CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0
aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGNoaWxkcmVu
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghZmlyc3RDaGlsZCgpKQpAQCAt
MTE1MCwxMCArMTE1MCw5IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChj
b24KIAogICAgIC8vIFRhYmxlIHNlY3Rpb25zIGNhbm5vdCBldmVyIGJlIGhpdCB0ZXN0ZWQuICBF
ZmZlY3RpdmVseSB0aGV5IGRvIG5vdCBleGlzdC4KICAgICAvLyBKdXN0IGZvcndhcmQgdG8gb3Vy
IGNoaWxkcmVuIGFsd2F5cy4KLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOworICAgIElu
dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7
CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QoSW50UG9p
bnQodHgsIHR5KSkuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWlu
ZXIpKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QoYWRq
dXN0ZWRMb2NhdGlvbikuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250
YWluZXIpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1faGFzT3ZlcmZsb3dp
bmdDZWxsKSB7CkBAIC0xMTYzLDggKzExNjIsOCBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6
bm9kZUF0UG9pbnQoY29uCiAgICAgICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBt
ZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkp
LAogICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCiAgICAgICAg
ICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBm
bGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBJbnRQb2ludCh0eCwgdHkpLCBQ
YXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hp
bGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2hpbGRQ
b2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgSW50
UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGlsZCks
IGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b1BvaW50KHBvaW50SW5Db250YWluZXIgLSBj
aGlsZFBvaW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTExNzMsNyArMTE3Miw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpu
b2RlQXRQb2ludChjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEludFBv
aW50IGxvY2F0aW9uID0gcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KTsKKyAgICBJ
bnRQb2ludCBsb2NhdGlvbiA9IHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRMb2Nh
dGlvbik7CiAgICAgaWYgKHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsK
ICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAg
ICAgICBsb2NhdGlvbi5zZXRZKGhlaWdodCgpIC0gbG9jYXRpb24ueSgpKTsKQEAgLTEyMDcsOCAr
MTIwNiw4IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KIAogICAg
IGZvciAoaW50IGkgPSBjdXJyZW50LmNlbGxzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAg
ICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQuY2VsbHNbaV07Ci0gICAgICAg
IEludFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxsLCBJbnRQb2ludCh0
eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAgaWYgKHN0
YXRpY19jYXN0PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludC54KCksIGNlbGxQb2ludC55KCksIGFjdGlv
bikpIHsKKyAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKGNl
bGwsIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwor
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7
CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9Qb2ludChwb2ludElu
Q29udGFpbmVyIC0gY2VsbFBvaW50KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0
IEludFJlY3QqID0gMCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICBib29sIGVuc3VyZVJvd3MoaW50KTsKICAgICB2
b2lkIGNsZWFyR3JpZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCwgaW50KSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgZGVsZXRlVGV4dEJveGVzKCk7
CiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IGxlbikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsMTMgKzY0LDEzIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmU6OnN1YnRyZWUKICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hhbmdlSW5U
ZXh0QXJlYSh0ZXh0QXJlYSk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewotICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAo
IVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSA9PSBub2RlKCkgfHwgcmVz
dWx0LmlubmVyTm9kZSgpID09IGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgaGl0SW5uZXJU
ZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSk7CisgICAgICAgIGhp
dElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9m
ZnNldC54KCksIGFjY3VtdWxhdGVkT2Zmc2V0LnkoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQo
KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmlu
ZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBj
aGFyV2lkdGgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDg4MTk3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw3ICszMjcsNyBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSdyZSB3aXRoaW4gdGhlIHRleHQgY29udHJv
bCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBpbm5lciB0ZXh0IGJsb2NrIGVs
ZW1lbnQsIGluIGNhc2UgdGhlIHBvaW50CiAgICAgLy8gd2FzIG9uIHRoZSBjb250cm9sIGJ1dCBu
b3Qgb24gdGhlIGlubmVyIGVsZW1lbnQgKHNlZSBSYWRhciA0NjE3ODQxKS4KQEAgLTMzNSwxNCAr
MzM1LDE0IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXQKICAgICAv
LyBJbiBhIHNlYXJjaCBmaWVsZCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBy
ZXN1bHRzIGJsb2NrIGlmIHdlJ3JlIHRvIHRoZSBsZWZ0IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2Nr
LAogICAgIC8vIGFuZCBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBjbG9zZSBibG9jayBpZiB3ZSdy
ZSB0byB0aGUgcmlnaHQgb2YgdGhlIGlubmVyIHRleHQgYmxvY2suCiAKLSAgICBpZiAoIVJlbmRl
clRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRl
ZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IElmIHdlIGhpdCBhIG5vZGUgaW5zaWRlIHRoZSBpbm5lciB0ZXh0IGVsZW1lbnQsIHNheSB0aGF0
IHdlIGhpdCB0aGF0IGVsZW1lbnQsCiAgICAgLy8gYW5kIGlmIHdlIGhpdCBvdXIgbm9kZSAoZS5n
LiB3ZSdyZSBvdmVyIHRoZSBib3JkZXIgb3IgcGFkZGluZyksIGFsc28gc2F5IHRoYXQgd2UgaGl0
IHRoZQogICAgIC8vIGlubmVyIHRleHQgZWxlbWVudCBzbyB0aGF0IGl0IGdhaW5zIGZvY3VzLgog
ICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCktPmlzRGVzY2VuZGFudE9mKGlubmVyVGV4dEVsZW1l
bnQoKSkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKLSAgICAgICAgaGl0SW5uZXJU
ZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSk7CisgICAgICAgIGhp
dElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9m
ZnNldC54KCksIGFjY3VtdWxhdGVkT2Zmc2V0LnkoKSk7CiAKICAgICAvLyBJZiB3ZSBmb3VuZCBh
IHNwaW4gYnV0dG9uLCB3ZSdyZSBkb25lLgogICAgIEhUTUxFbGVtZW50KiBpbm5lclNwaW5CdXR0
b24gPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CkBAIC0zNjcsMTMgKzM2NywxMyBAQCBib29s
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAgICAgSW50UG9pbnQgbG9jYWxQ
b2ludCA9IHJlc3VsdC5sb2NhbFBvaW50KCk7CiAgICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5lckJs
b2NrUmVuZGVyZXItPmxvY2F0aW9uKCkpOwogCi0gICAgaW50IHRleHRMZWZ0ID0gdHggKyB4KCkg
KyBpbm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyVGV4dFJlbmRlcmVyLT54KCk7CisgICAg
aW50IHRleHRMZWZ0ID0gYWNjdW11bGF0ZWRPZmZzZXQueCgpICsgeCgpICsgaW5uZXJCbG9ja1Jl
bmRlcmVyLT54KCkgKyBpbm5lclRleHRSZW5kZXJlci0+eCgpOwogICAgIGlmIChyZXN1bHRzQnV0
dG9uICYmIHJlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkgJiYgcG9pbnRJbkNvbnRhaW5lci54KCkg
PCB0ZXh0TGVmdCkKICAgICAgICAgaW5uZXJOb2RlID0gcmVzdWx0c0J1dHRvbjsKIAogI2lmIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgaWYgKCFpbm5lck5vZGUgJiYgc3BlZWNoQnV0dG9uRWxl
bWVudCgpICYmIHNwZWVjaEJ1dHRvbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSkgewotICAgICAgICBp
bnQgYnV0dG9uTGVmdCA9IHR4ICsgeCgpICsgaW5uZXJCbG9ja1JlbmRlcmVyLT54KCkgKyBpbm5l
ckJsb2NrUmVuZGVyZXItPndpZHRoKCkgLSBzcGVlY2hCdXR0b25FbGVtZW50KCktPnJlbmRlckJv
eCgpLT53aWR0aCgpOworICAgICAgICBpbnQgYnV0dG9uTGVmdCA9IGFjY3VtdWxhdGVkT2Zmc2V0
LngoKSArIHgoKSArIGlubmVyQmxvY2tSZW5kZXJlci0+eCgpICsgaW5uZXJCbG9ja1JlbmRlcmVy
LT53aWR0aCgpIC0gc3BlZWNoQnV0dG9uRWxlbWVudCgpLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsK
ICAgICAgICAgaWYgKHBvaW50SW5Db250YWluZXIueCgpID49IGJ1dHRvbkxlZnQpCiAgICAgICAg
ICAgICBpbm5lck5vZGUgPSBzcGVlY2hCdXR0b25FbGVtZW50KCk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBhdXRvc2Nyb2xsKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsMTAgKzM5MSwxMCBAQCBS
ZW5kZXJXaWRnZXQqIFJlbmRlcldpZGdldDo6ZmluZChjb25zdCBXCiAgICAgcmV0dXJuIHdpZGdl
dFJlbmRlcmVyTWFwKCkuZ2V0KHdpZGdldCk7CiB9CiAKLWJvb2wgUmVuZGVyV2lkZ2V0Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIGJvb2wgaGFkUmVzdWx0ID0gcmVzdWx0
LmlubmVyTm9kZSgpOwotICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBhY3Rpb24pOwor
ICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFjdGlvbik7CiAgICAg
CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0aGUgd2lkZ2V0IGl0
c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhKS4KICAgICBpZiAo
KGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFoYWRSZXN1bHQgJiYgcmVz
dWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCBzZXRP
dmVybGFwVGVzdFJlc3VsdChib29sKTsKIAogICAgIGJvb2wgc2V0V2lkZ2V0R2VvbWV0cnkoY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTUg
KzE4OSwxNSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAjZW5k
aWYKIH0KIAotYm9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSkKK2Jvb2wgUm9vdElubGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3As
IGludCBsaW5lQm90dG9tKQogewogICAgIGlmIChoYXNFbGxpcHNpc0JveCgpICYmIHZpc2libGVU
b0hpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGxpbmVUb3AsIGxpbmVC
b3R0b20pKSB7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSk7CisgICAgICAgIGlmIChl
bGxpcHNpc0JveCgpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAg
ICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgbGluZVRvcCwgbGlu
ZUJvdHRvbSk7CisgICAgcmV0dXJuIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxp
bmVCb3R0b20pOwogfQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0
IGR4LCBmbG9hdCBkeSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICNlbmRp
ZgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jiwg
aW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVC
b3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0
b20pOwogCiAgICAgYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbjsgfQogICAgIHZvaWQg
c2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4pIHsgbV9oYXNT
ZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbiA9IGhhc1NlbGVjdGVkQ2hp
bGRyZW47IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDksMTAgKzE0OSwxMCBAQCBib29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6
Om5vZGVBdEZsb2F0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFBvaW50IHJvdW5k
ZWRMb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpOwotICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3VuZGVkTG9jYWxQb2lu
dCwgMCwgMCwgaGl0VGVzdEFjdGlvbik7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMb2NhbFBvaW50LCBJbnRQb2ludCgpLCBoaXRU
ZXN0QWN0aW9uKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYs
IGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAkocmV2aXNp
b24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVp
Z25PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdwb3J0OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlz
U1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp1cGRhdGVGcm9t
RWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlz
LCBzdHlsZSgpKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBp
bnQsIGludCwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDg4MTk3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLCBTVkcgdXNlcyBhIGRpZmZl
cmVudCBub2RlQXRQb2ludCBtZXRob2QKLSAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBpbnQgZHhQYXJlbnRUb0NvbnRhaW5lciwgaW50IGR5UGFyZW50VG9Db250YWluZXIsIEhp
dFRlc3RBY3Rpb24pOworICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiB9OwogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJ
KHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDExICs0MzUsOSBAQCB2b2lkIFJlbmRl
clNWR1Jvb3Q6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpCiAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3gu
aW5mbGF0ZShib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUm9v
dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR1Jvb3Q6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBJ
bnRTaXplIGNvbnRhaW5lclRvUGFyZW50T2Zmc2V0KHR4LCB0eSk7Ci0KLSAgICBJbnRQb2ludCBw
b2ludEluUGFyZW50ID0gcG9pbnRJbkNvbnRhaW5lciAtIGNvbnRhaW5lclRvUGFyZW50T2Zmc2V0
OworICAgIEludFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyIC0gdG9TaXpl
KGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICBJbnRQb2ludCBwb2ludEluQm9yZGVyQm94ID0gcG9p
bnRJblBhcmVudCAtIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CiAKICAgICAvLyBOb3RlOiBG
b3Igbm93LCB3ZSdyZSBpZ25vcmluZyBoaXRzIHRvIGJvcmRlciBhbmQgcGFkZGluZyBmb3IgPHN2
Zz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5o
CShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0
cm9rZUJvdW5kaW5nQm94OyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQog
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDg4
MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk0LDE0ICsxOTQsMTQgQEAgYm9vbCBSZW5kZXJTVkdUZXh0Ojpu
b2RlQXRGbG9hdFBvaW50KGNvbgogICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpw
b2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAgICAgCiAKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBmbG9vcmVkSW50UG9pbnQobG9jYWxQb2ludCksIDAs
IDAsIGhpdFRlc3RBY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGZsb29yZWRJbnRQb2ludChsb2NhbFBvaW50KSwgSW50
UG9pbnQoKSwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0
VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2lu
dCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmgJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVz
dEFjdGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChj
b25zdCBJbnRQb2ludCYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96163</attachid>
            <date>2011-06-06 17:30:04 -0700</date>
            <delta_ts>2011-06-07 19:51:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62145-20110606173003.patch</filename>
            <type>text/plain</type>
            <size>63187</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDYtMDYgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvbnZlcnQgbm9kZUF0UG9pbnQgdG8gSW50UG9pbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTQ1CisKKyAgICAg
ICAgQ29udmVydCBub2RlQXRQb2ludCB0byB0YWtlIGFuIEludFBvaW50IGluc3RlYWQgb2YgYSBw
YWlyIG9mIGludHMgZm9yIHRoZQorICAgICAgICBhY2N1bXVsYXRlZCBvZmZzZXQuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6Om1vdmVCeSk6
CisgICAgICAgIEFkZCBtb3ZlQnkoSW50UG9pbnQpIG1ldGhvZAorICAgICAgICAKKyAgICAgICAg
KiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNC
b3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6bm9kZUF0UG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhp
dFRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
V2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2Rl
QXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25P
YmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgorCiAyMDExLTA2LTA2ICBFbWlsIEEgRWtsdW5k
ICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJ
KHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1feCArPSBkeDsKICAgICAgICAgbV95ICs9IGR5OwogICAgIH0KKyAgICB2b2lkIG1vdmVC
eShjb25zdCBJbnRQb2ludCYgYSkKKyAgICB7CisgICAgICAgIG1feCArPSBhLngoKTsKKyAgICAg
ICAgbV95ICs9IGEueSgpOworICAgIH0KICAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBz
eSkKICAgICB7CiAgICAgICAgIG1feCAqPSBzeDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMjUgKzEwMSwy
NCBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgY29udGV4
dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uKSwgSW50UG9pbnQoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWludE9m
ZnNldC55KCkgKyB0b3ApLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0KIAotYm9vbCBF
bGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGlu
dCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCitib29sIEVsbGlwc2lz
Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7
Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZExv
Y2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyByb3VuZGVkSW50UG9pbnQodG9wTGVmdCgpKTsK
IAogICAgIC8vIEhpdCB0ZXN0IHRoZSBtYXJrdXAgYm94LgogICAgIGlmIChtX21hcmt1cEJveCkg
ewogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0
TGluZSk7Ci0gICAgICAgIGludCBtdHggPSB0eCArIG1fbG9naWNhbFdpZHRoIC0gbV9tYXJrdXBC
b3gtPngoKTsKLSAgICAgICAgaW50IG10eSA9IHR5ICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkgLSAobV9tYXJrdXBCb3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHls
ZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICBpZiAobV9t
YXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
bXR4LCBtdHksIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7CisgICAgICAgIGludCBtdHggPSBhZGp1
c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKKyAg
ICAgICAgaW50IG10eSA9IGFkanVzdGVkTG9jYXRpb24ueSgpICsgc3R5bGUtPmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigp
LT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICBp
ZiAobV9tYXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgSW50UG9pbnQobXR4LCBtdHkpLCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgewogICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250
YWluZXIgLSBJbnRTaXplKG10eCwgbXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5
LCBtX2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQpOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IElu
dFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgSW50U2l6ZShtX2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQp
KTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIElu
dFNpemUodHgsIHR5KSk7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAg
ICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigp
LT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmgJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsK
ICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUg
cykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24g
ODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIwLDEyICsyMjAsMTIgQEAgdm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbgogICAgIH0KIH0KIAotYm9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IC8qIGxpbmVU
b3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKK2Jvb2wgSW5saW5lQm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50IC8qbGluZUJvdHRvbSovKQogewogICAgIC8v
IEhpdCB0ZXN0IGFsbCBwaGFzZXMgb2YgcmVwbGFjZWQgZWxlbWVudHMgYXRvbWljYWxseSwgYXMg
dGhvdWdoIHRoZSByZXBsYWNlZCBlbGVtZW50IGVzdGFibGlzaGVkIGl0cwogICAgIC8vIG93biBz
dGFja2luZyBjb250ZXh0LiAgKFNlZSBBcHBlbmRpeCBFLjIsIHNlY3Rpb24gNi40IG9uIGlubGlu
ZSBibG9jay90YWJsZSBlbGVtZW50cyBpbiB0aGUgQ1NTMi4xCiAgICAgLy8gc3BlY2lmaWNhdGlv
bi4pCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBJbnRQb2ludCh0eCwgdHkpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS0+
aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zm
c2V0KTsKIH0KIAogY29uc3QgUm9vdElubGluZUJveCogSW5saW5lQm94Ojpyb290KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDg4MTk3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgs
IGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIElubGluZUJveCogbmV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk4LDE4
ICs4OTgsMTggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpzZXRPdmVyZmxvd0Zyb21Mb2dpYwogICAg
IHNldFZpc3VhbE92ZXJmbG93KHZpc3VhbE92ZXJmbG93LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsK
IH0KIAotYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkK
K2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKQogewogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93
UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7Ci0gICAgb3ZlcmZsb3dSZWN0Lm1vdmUodHgsIHR5KTsKKyAgICBvdmVyZmxvd1Jl
Y3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICBpZiAoIW92ZXJmbG93UmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElu
bGluZUJveCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGlu
ZSgpKSB7Ci0gICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnIt
PmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBsaW5lVG9w
LCBsaW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOworICAgICAg
ICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpIHx8ICFjdXJyLT5ib3hNb2RlbE9iamVj
dCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBs
aW5lQm90dG9tKSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM1LDEwICs5
MzUsMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgIC8v
IE1vdmUgeC95IHRvIG91ciBjb29yZGluYXRlcy4KICAgICBJbnRSZWN0IHJlY3QobWluWCwgbWlu
WSwgd2lkdGgsIGhlaWdodCk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKHJlY3QpOwotICAgIHJl
Y3QubW92ZSh0eCwgdHkpOworICAgIHJlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAog
ICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRh
aW5lciAtIEludFNpemUodHgsIHR5KSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJl
LCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgorICAgICAg
ICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdN
b2RlKHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERv
bid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWlu
aW5nIGJsb2NrJ3Mgc3BhY2UuCiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCByZWN0KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRGaWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50Qm94U2hhZG93
KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgU2hhZG93U3R5bGUsIGNvbnN0IEludFJl
Y3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQm
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGlu
ZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckxpbmVCb3hMaXN0KiByZW5kZXJlckxpbmVCb3hl
cygpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDE2ICszNDIsMTYgQEAgYm9vbCBJ
bmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkt
PmlzQlIoKSB8fCAocmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVu
KCkgPT0gMSAmJiAoKnRleHRSZW5kZXJlcigpLT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwog
fQogCi1ib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgaW50IHR4LCBpbnQgdHksIGludCAvKiBsaW5lVG9wICovLCBpbnQgLypsaW5lQm90dG9tKi8p
Citib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50
IC8qbGluZUJvdHRvbSovKQogewogICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5n
RmxpcHBpbmcoKTsKLSAgICBib3hPcmlnaW4ubW92ZSh0eCwgdHkpOworICAgIGJveE9yaWdpbi5t
b3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIEZsb2F0UmVjdCByZWN0KGJveE9yaWdpbiwg
SW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1
bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2lu
dEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKSk7CisgICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRh
aW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5D
b250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA4ODE5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKIHB1YmxpYzoK
ICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODk2
LDE0ICszODk2LDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHIK
ICAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgSW50U2l6
ZSBsb2NhbE9mZnNldCh0eCArIHgoKSwgdHkgKyB5KCkpOworICAgIEludFBvaW50IGFkanVzdGVk
TG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKKyAgICBJbnRTaXplIGxv
Y2FsT2Zmc2V0ID0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pOwogCiAgICAgaWYgKCFpc1JlbmRl
clZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0
IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgp
OwotICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKGxvY2FsT2Zmc2V0KTsKKyAgICAgICAgb3ZlcmZs
b3dCb3gubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwogICAgICAgICBpZiAoIW92ZXJmbG93Qm94
LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzkxOSw3ICszOTIwLDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIGJvb2wgdXNlT3ZlcmZsb3dD
bGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAg
Ym9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKICAg
ICBJbnRSZWN0IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5l
cikpOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xp
cCgpID8gY29udHJvbENsaXBSZWN0KHRvUG9pbnQobG9jYWxPZmZzZXQpKS5pbnRlcnNlY3RzKGhp
dFRlc3RBcmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QodG9Qb2ludChsb2NhbE9mZnNldCksIEluY2x1
ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOworICAgIGJv
b2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJv
bENsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpIDogb3Zl
cmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNp
emUpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikgewog
ICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAgICAgSW50U2l6ZSBz
Y3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCk7CkBAIC0zOTQzLDcgKzM5NDQsNyBAQCBib29sIFJl
bmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAKICAgICAvLyBOb3cgaGl0IHRlc3Qg
b3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNr
Z3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7
Ci0gICAgICAgIEludFJlY3QgYm91bmRzUmVjdChsb2NhbE9mZnNldC53aWR0aCgpLCBsb2NhbE9m
ZnNldC5oZWlnaHQoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IGJvdW5k
c1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIGxvY2FsT2Zmc2V0KSk7
CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5v
ZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCkBAIC00MDQzLDcgKzQwNDQsNyBA
QCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMoY29uc3QgCiAgICAgICAgICAgICBj
aGlsZEhpdFRlc3QgPSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQ7CiAgICAgICAgIGZvciAo
UmVuZGVyQm94KiBjaGlsZCA9IGxhc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQg
PSBmbGlwRm9yV3JpdGluZ01vZGUoY2hpbGQsIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hp
bGRGbGlwcGluZ0FkanVzdG1lbnQpOwotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LngoKSwgY2hp
bGRQb2ludC55KCksIGNoaWxkSGl0VGVzdCkpCisgICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkLT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGNo
aWxkSGl0VGVzdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24g
ODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEVUZXh0
QWxpZ24gdGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCBlbmRzV2l0aFNvZnRCcmVhaykgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubGluZURpcmVjdGlvbkxpbmVCb3VuZHMoaW50IC8q
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsTGVmdCAqLywg
ZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAqLykgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MCwyNCAr
NzQwLDIzIEBAIGludCBSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEgKIH0KIAog
Ly8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQor
Ym9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0
ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIENo
ZWNrIGtpZHMgZmlyc3QuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBp
ZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0
eSkpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFkanVzdGVkTG9jYXRpb24sIGFj
dGlvbikpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0
LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQg
aW4gdGhlCiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFj
ZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMpLgotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJl
Y3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgSW50UmVjdCBib3VuZHNSZWN0ID0g
SW50UmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOwogICAgIGlmICh2aXNpYmxlVG9IaXRU
ZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewotICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUo
dHgsIHR5KSk7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJv
dW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDEyICsxNTgsMTIg
QEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogfQogCiBib29sIFJl
bmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCisgICAgY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYgKGFjdGlvbiAhPSBIaXRUZXN0Rm9y
ZWdyb3VuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpbnNpZGUgPSBSZW5k
ZXJCb3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgs
IHR5LCBhY3Rpb24pCisgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFjdGlv
bikKICAgICAgICAgfHwgbV9pc1Jlc2l6aW5nOwogCiAgICAgaWYgKGluc2lkZSAmJiBmcmFtZVNl
dCgpLT5ub1Jlc2l6ZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dl
ZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkx
LDE3ICszOTEsMTcgQEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpIAog
ICAgIHJldHVybiBpID8gaS0+dHJlZVNjb3BlKCktPmdldEltYWdlTWFwKGktPmZhc3RHZXRBdHRy
aWJ1dGUodXNlbWFwQXR0cikpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgSGl0VGVzdFJlc3VsdCB0
ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQudG9wUGFkZGluZygpLCByZXN1bHQucmln
aHRQYWRkaW5nKCksIHJlc3VsdC5ib3R0b21QYWRkaW5nKCksIHJlc3VsdC5sZWZ0UGFkZGluZygp
KTsKLSAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0
LCB0ZW1wUmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwor
ICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHRl
bXBSZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0
aW9uKTsKIAogICAgIGlmICh0ZW1wUmVzdWx0LmlubmVyTm9kZSgpICYmIG5vZGUoKSkgewogICAg
ICAgICBpZiAoSFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkpIHsKICAgICAgICAgICAg
IEludFJlY3QgY29udGVudEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgICAgICAgICBmbG9h
dCB6b29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgaW50IG1hcFgg
PSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLngoKSAtIHR4IC0gdGhpcy0+eCgpIC0gY29udGVu
dEJveC54KCkpIC8gem9vbSk7Ci0gICAgICAgICAgICBpbnQgbWFwWSA9IGxyb3VuZGYoKHBvaW50
SW5Db250YWluZXIueSgpIC0gdHkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29t
KTsKKyAgICAgICAgICAgIGludCBtYXBYID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci54KCkg
LSBhY2N1bXVsYXRlZE9mZnNldC54KCkgLSB0aGlzLT54KCkgLSBjb250ZW50Qm94LngoKSkgLyB6
b29tKTsKKyAgICAgICAgICAgIGludCBtYXBZID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci55
KCkgLSBhY2N1bXVsYXRlZE9mZnNldC55KCkgLSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkg
LyB6b29tKTsKICAgICAgICAgICAgIGlmIChtYXAtPm1hcE1vdXNlRXZlbnQobWFwWCwgbWFwWSwg
Y29udGVudEJveC5zaXplKCksIHRlbXBSZXN1bHQpKQogICAgICAgICAgICAgICAgIHRlbXBSZXN1
bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgbWluaW11bVJlcGxhY2VkSGVpZ2h0
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UqKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
Ym9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEyLDkg
KzcxMiw5IEBAIGNvbnN0IGNoYXIqIFJlbmRlcklubGluZTo6cmVuZGVyTmFtZSgpIGMKIH0KIAog
Ym9vbCBSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgcmV0dXJu
IG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBJbnRQb2ludCh0eCwgdHkpLCBoaXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gbV9saW5l
Qm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJl
bmRlcklubGluZTo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA4ODE5NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBib29sIHJl
cXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5z
cGFyZW50KCkgfHwgaGFzTWFzaygpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTgsNyArMjk4LDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdChSZW5kZXJC
bwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94KCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3Qg
PSBjdXJyLT5yb290KCk7CiAgICAgICAgIGlmIChyYW5nZUludGVyc2VjdHNSZWN0KHJlbmRlcmVy
LCBjdXJyLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZVRvcCgpKSwgY3Vyci0+
bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KHJvb3QtPmxpbmVCb3R0b20oKSksIHJlY3QsIGFj
Y3VtdWxhdGVkT2Zmc2V0KSkgewotICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zm
c2V0LngoKSwgYWNjdW11bGF0ZWRPZmZzZXQueSgpLCByb290LT5saW5lVG9wKCksIHJvb3QtPmxp
bmVCb3R0b20oKSk7CisgICAgICAgICAgICBib29sIGluc2lkZSA9IGN1cnItPm5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIHJv
b3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKICAgICAgICAgICAgIGlmIChpbnNp
ZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY0LDIxICs2NjQs
MjEgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ldwogICAgIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4KTsKIH0KIAot
Ym9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wg
UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQogewotICAgIGlmICghUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAo
IVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2VsZWN0RWxl
bWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpOwogICAgIGlu
dCBzaXplID0gbnVtSXRlbXMoKTsKLSAgICB0eCArPSB0aGlzLT54KCk7Ci0gICAgdHkgKz0gdGhp
cy0+eSgpOworICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNl
dCArIGxvY2F0aW9uKCk7CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdChJbnRQb2ludCh0eCwgdHkpLCBpKS5jb250
YWlucyhwb2ludEluQ29udGFpbmVyKSkgeworICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVj
dChhZGp1c3RlZExvY2F0aW9uLCBpKS5jb250YWlucyhwb2ludEluQ29udGFpbmVyKSkgewogICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIG5vZGUgPSBsaXN0SXRlbXNbaV0pIHsKICAgICAgICAgICAg
ICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwogICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0
SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRMb2Nh
bFBvaW50KHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0
ZWRMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJl
dmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChp
bnQpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pOwogCiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlLgogICAgIHZpcnR1
YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNDcsMjAgKzIxNDcsMjAgQEAgYm9vbCBSZW5kZXJPYmplY3Q6
OmhpdFRlc3QoY29uc3QgSGl0VGVzdAogICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CiAgICAgaWYg
KGhpdFRlc3RGaWx0ZXIgIT0gSGl0VGVzdFNlbGYpIHsKICAgICAgICAgLy8gRmlyc3QgdGVzdCB0
aGUgZm9yZWdyb3VuZCBsYXllciAobGluZXMgYW5kIGlubGluZXMpLgotICAgICAgICBpbnNpZGUg
PSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LngoKSwgYWNjdW11bGF0ZWRPZmZzZXQueSgpLCBIaXRUZXN0Rm9yZWdyb3VuZCk7
CisgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGb3JlZ3JvdW5kKTsKIAogICAgICAg
ICAvLyBUZXN0IGZsb2F0cyBuZXh0LgogICAgICAgICBpZiAoIWluc2lkZSkKLSAgICAgICAgICAg
IGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQueCgpLCBhY2N1bXVsYXRlZE9mZnNldC55KCksIEhpdFRlc3RGbG9h
dCk7CisgICAgICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0RmxvYXQpOwogCiAgICAg
ICAgIC8vIEZpbmFsbHkgdGVzdCB0byBzZWUgaWYgdGhlIG1vdXNlIGlzIGluIHRoZSBiYWNrZ3Jv
dW5kICh3aXRoaW4gYSBjaGlsZCBibG9jaydzIGJhY2tncm91bmQpLgogICAgICAgICBpZiAoIWlu
c2lkZSkKLSAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQueCgpLCBhY2N1bXVsYXRlZE9mZnNl
dC55KCksIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOworICAgICAgICAgICAgaW5zaWRl
ID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CiAgICAgfQogCiAgICAg
Ly8gU2VlIGlmIHRoZSBtb3VzZSBpcyBpbnNpZGUgdXMgYnV0IG5vdCBhbnkgb2Ygb3VyIGRlc2Nl
bmRhbnRzCiAgICAgaWYgKGhpdFRlc3RGaWx0ZXIgIT0gSGl0VGVzdERlc2NlbmRhbnRzICYmICFp
bnNpZGUpCi0gICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQueCgpLCBhY2N1bXVsYXRlZE9mZnNldC55
KCksIEhpdFRlc3RCbG9ja0JhY2tncm91bmQpOworICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QmxvY2tCYWNrZ3JvdW5kKTsKIAogICAgIHJldHVybiBpbnNpZGU7CiB9CkBAIC0yMTc5
LDcgKzIxNzksNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdChICiAg
ICAgfQogfQogCi1ib29sIFJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIC8qcG9pbnRJbkNvbnRhaW5l
ciovLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJP
YmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEludFBvaW50JiAvKnBvaW50SW5Db250YWluZXIqLywgY29uc3QgSW50UG9pbnQmIC8q
YWNjdW11bGF0ZWRPZmZzZXQqLywgSGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lv
biA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQ2LDcgKzU0Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9v
bCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RGaWx0ZXIgPSBIaXRUZXN0QWxsKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKICAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA4
ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExOTQsMTcgKzExOTQsMTYgQEAgSW50UmVjdCBSZW5kZXJUYWJsZTo6b3Zl
cmZsb3dDbGlwUmVjdChjbwogICAgIHJldHVybiByZWN0OwogfQogCi1ib29sIFJlbmRlclRhYmxl
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgdHggKz0geCgpOwotICAgIHR5
ICs9IHkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZz
ZXQgKyBsb2NhdGlvbigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhh
c092ZXJmbG93Q2xpcCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QoSW50UG9pbnQodHgsIHR5KSkuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgeworICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9u
KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAg
ICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYm
IChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1Jl
bmRlckJveChjaGlsZCksIEludFBvaW50KHR4LCB0eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0Fk
anVzdG1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LngoKSwgY2hpbGRQb2ludC55
KCksIGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxp
cEZvcldyaXRpbmdNb2RlKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbiwgUGFy
ZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9p
bnQsIGFjdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIxMyw5ICsx
MjEyLDkgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIH0K
IAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4KLSAgICBJbnRSZWN0IGJvdW5kc1JlY3Qg
PSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIEludFJlY3QgYm91bmRz
UmVjdCA9IEludFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKICAgICBpZiAodmlzaWJs
ZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBh
Y3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNSZWN0LmludGVy
c2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29u
dGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKSk7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1
c3RlZExvY2F0aW9uKSkpOwogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRU
ZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCBpbnQgZmlyc3RM
aW5lQm94QmFzZWxpbmUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsx
ODcsNyBAQCBJbnRSZWN0IFJlbmRlclRhYmxlUm93OjpjbGlwcGVkT3ZlcmZsb3dSCiB9CiAKIC8v
IEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQorYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
biBhY3Rpb24pCiB7CiAgICAgLy8gVGFibGUgcm93cyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVk
LiAgRWZmZWN0aXZlbHkgdGhleSBkbyBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRv
IG91ciBjaGlsZHJlbiBhbHdheXMuCkBAIC0xOTcsOSArMTk3LDkgQEAgYm9vbCBSZW5kZXJUYWJs
ZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSAogICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQt
dGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBh
bnl3YXkpLAogICAgICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KICAgICAg
ICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1Nl
bGZQYWludGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIEludFBvaW50IGNlbGxQb2ludCA9IGZs
aXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCksIEludFBvaW50KHR4LCB0
eSksIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwotICAgICAgICAgICAgaWYgKGNo
aWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQ
b2ludC54KCksIGNlbGxQb2ludC55KCksIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUoY2VsbFBv
aW50LngoKSwgY2VsbFBvaW50LnkoKSkpOworICAgICAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50
ID0gZmxpcEZvcldyaXRpbmdNb2RlKHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKSwgYWNjdW11bGF0
ZWRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgICAgICAgICAg
aWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IGNlbGxQb2ludCwgYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGNlbGxQb2ludCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gODgxOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
cik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOwogCiAgICAgLy8gVGhlIG9ubHkgdGltZSByb3dzIGdldCBhIGxheWVyIGlzIHdoZW4g
dGhleSBoYXZlIHRyYW5zcGFyZW5jeS4KICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBo
YXNUcmFuc2Zvcm0oKSB8fCBoYXNNYXNrKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQyLDcgKzExNDIsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRD
b2x1bW4oaW50CiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSBoYXZl
IG5vIGNoaWxkcmVuIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghZmlyc3RD
aGlsZCgpKQpAQCAtMTE1MCwxMCArMTE1MCw5IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpu
b2RlQXRQb2ludChjb24KIAogICAgIC8vIFRhYmxlIHNlY3Rpb25zIGNhbm5vdCBldmVyIGJlIGhp
dCB0ZXN0ZWQuICBFZmZlY3RpdmVseSB0aGV5IGRvIG5vdCBleGlzdC4KICAgICAvLyBKdXN0IGZv
cndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0g
eSgpOworICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCAr
IGxvY2F0aW9uKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xp
cFJlY3QoSW50UG9pbnQodHgsIHR5KSkuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBv
aW50SW5Db250YWluZXIpKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93
Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50
KHBvaW50SW5Db250YWluZXIpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1f
aGFzT3ZlcmZsb3dpbmdDZWxsKSB7CkBAIC0xMTYzLDggKzExNjIsOCBAQCBib29sIFJlbmRlclRh
YmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgICAgICAvLyB0YWJsZS1zcGVjaWZp
YyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVh
c29ucyBhbnl3YXkpLAogICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hl
Y2suCiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxk
KS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIEludFBvaW50IGNo
aWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBJbnRQb2lu
dCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBhY3Rpb24pKSB7CisgICAgICAg
ICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRl
ckJveChjaGlsZCksIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVz
dG1lbnQpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b1BvaW50KHBvaW50SW5D
b250YWluZXIgLSBjaGlsZFBvaW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH0KQEAgLTExNzMsNyArMTE3Miw3IEBAIGJvb2wgUmVuZGVyVGFi
bGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIEludFBvaW50IGxvY2F0aW9uID0gcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgs
IHR5KTsKKyAgICBJbnRQb2ludCBsb2NhdGlvbiA9IHBvaW50SW5Db250YWluZXIgLSB0b1NpemUo
YWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgaWYgKHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCiAgICAgICAgICAgICBsb2NhdGlvbi5zZXRZKGhlaWdodCgpIC0gbG9jYXRpb24ueSgpKTsK
QEAgLTEyMDcsOCArMTIwNiw4IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2lu
dChjb24KIAogICAgIGZvciAoaW50IGkgPSBjdXJyZW50LmNlbGxzLnNpemUoKSAtIDE7IGkgPj0g
MDsgLS1pKSB7CiAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQuY2VsbHNb
aV07Ci0gICAgICAgIEludFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxs
LCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludC54KCksIGNlbGxQb2lu
dC55KCksIGFjdGlvbikpIHsKKyAgICAgICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldy
aXRpbmdNb2RlKGNlbGwsIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0Fk
anVzdG1lbnQpOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCkt
Pm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50
LCBhY3Rpb24pKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9Q
b2ludChwb2ludEluQ29udGFpbmVyIC0gY2VsbFBvaW50KSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgs
NyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1h
Z2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICBib29sIGVuc3VyZVJvd3Mo
aW50KTsKICAgICB2b2lkIGNsZWFyR3JpZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5oCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCwgaW50KSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgSGl0
VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgZGVsZXRl
VGV4dEJveGVzKCk7CiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDg4
MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTMgKzY0LDEzIEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmU6OnN1YnRyZWUKICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0
RGlkQ2hhbmdlSW5UZXh0QXJlYSh0ZXh0QXJlYSk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQogewotICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5LCBoaXRUZXN0QWN0aW9u
KSkKKyAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSA9PSBu
b2RlKCkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09IGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAg
ICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSk7
CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldC54KCksIGFjY3VtdWxhdGVkT2Zmc2V0LnkoKSk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJl
ZUhhc0NoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hhcldpZHRo
KEF0b21pY1N0cmluZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50IHByZWZlcnJlZENvbnRlbnRX
aWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlz
aW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw3ICszMjcsNyBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAjZW5kaWYKIH0KIAotYm9vbCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
Ym9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBJZiB3ZSdyZSB3aXRoaW4gdGhl
IHRleHQgY29udHJvbCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBpbm5lciB0
ZXh0IGJsb2NrIGVsZW1lbnQsIGluIGNhc2UgdGhlIHBvaW50CiAgICAgLy8gd2FzIG9uIHRoZSBj
b250cm9sIGJ1dCBub3Qgb24gdGhlIGlubmVyIGVsZW1lbnQgKHNlZSBSYWRhciA0NjE3ODQxKS4K
QEAgLTMzNSwxNCArMzM1LDE0IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpu
b2RlQXQKICAgICAvLyBJbiBhIHNlYXJjaCBmaWVsZCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2Un
dmUgaGl0IHRoZSByZXN1bHRzIGJsb2NrIGlmIHdlJ3JlIHRvIHRoZSBsZWZ0IG9mIHRoZSBpbm5l
ciB0ZXh0IGJsb2NrLAogICAgIC8vIGFuZCBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBjbG9zZSBi
bG9jayBpZiB3ZSdyZSB0byB0aGUgcmlnaHQgb2YgdGhlIGlubmVyIHRleHQgYmxvY2suCiAKLSAg
ICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJU
ZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVy
LCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIElmIHdlIGhpdCBhIG5vZGUgaW5zaWRlIHRoZSBpbm5lciB0ZXh0IGVsZW1l
bnQsIHNheSB0aGF0IHdlIGhpdCB0aGF0IGVsZW1lbnQsCiAgICAgLy8gYW5kIGlmIHdlIGhpdCBv
dXIgbm9kZSAoZS5nLiB3ZSdyZSBvdmVyIHRoZSBib3JkZXIgb3IgcGFkZGluZyksIGFsc28gc2F5
IHRoYXQgd2UgaGl0IHRoZQogICAgIC8vIGlubmVyIHRleHQgZWxlbWVudCBzbyB0aGF0IGl0IGdh
aW5zIGZvY3VzLgogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCktPmlzRGVzY2VuZGFudE9mKGlu
bmVyVGV4dEVsZW1lbnQoKSkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKLSAgICAg
ICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSk7
CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldC54KCksIGFjY3VtdWxhdGVkT2Zmc2V0LnkoKSk7CiAKICAgICAvLyBJ
ZiB3ZSBmb3VuZCBhIHNwaW4gYnV0dG9uLCB3ZSdyZSBkb25lLgogICAgIEhUTUxFbGVtZW50KiBp
bm5lclNwaW5CdXR0b24gPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCk7CkBAIC0zNjcsMTMgKzM2
NywxMyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0CiAgICAgSW50
UG9pbnQgbG9jYWxQb2ludCA9IHJlc3VsdC5sb2NhbFBvaW50KCk7CiAgICAgbG9jYWxQb2ludC5t
b3ZlKC1pbm5lckJsb2NrUmVuZGVyZXItPmxvY2F0aW9uKCkpOwogCi0gICAgaW50IHRleHRMZWZ0
ID0gdHggKyB4KCkgKyBpbm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyVGV4dFJlbmRlcmVy
LT54KCk7CisgICAgaW50IHRleHRMZWZ0ID0gYWNjdW11bGF0ZWRPZmZzZXQueCgpICsgeCgpICsg
aW5uZXJCbG9ja1JlbmRlcmVyLT54KCkgKyBpbm5lclRleHRSZW5kZXJlci0+eCgpOwogICAgIGlm
IChyZXN1bHRzQnV0dG9uICYmIHJlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkgJiYgcG9pbnRJbkNv
bnRhaW5lci54KCkgPCB0ZXh0TGVmdCkKICAgICAgICAgaW5uZXJOb2RlID0gcmVzdWx0c0J1dHRv
bjsKIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgaWYgKCFpbm5lck5vZGUgJiYgc3Bl
ZWNoQnV0dG9uRWxlbWVudCgpICYmIHNwZWVjaEJ1dHRvbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSkg
ewotICAgICAgICBpbnQgYnV0dG9uTGVmdCA9IHR4ICsgeCgpICsgaW5uZXJCbG9ja1JlbmRlcmVy
LT54KCkgKyBpbm5lckJsb2NrUmVuZGVyZXItPndpZHRoKCkgLSBzcGVlY2hCdXR0b25FbGVtZW50
KCktPnJlbmRlckJveCgpLT53aWR0aCgpOworICAgICAgICBpbnQgYnV0dG9uTGVmdCA9IGFjY3Vt
dWxhdGVkT2Zmc2V0LngoKSArIHgoKSArIGlubmVyQmxvY2tSZW5kZXJlci0+eCgpICsgaW5uZXJC
bG9ja1JlbmRlcmVyLT53aWR0aCgpIC0gc3BlZWNoQnV0dG9uRWxlbWVudCgpLT5yZW5kZXJCb3go
KS0+d2lkdGgoKTsKICAgICAgICAgaWYgKHBvaW50SW5Db250YWluZXIueCgpID49IGJ1dHRvbkxl
ZnQpCiAgICAgICAgICAgICBpbm5lck5vZGUgPSBzcGVlY2hCdXR0b25FbGVtZW50KCk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xsKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsMTAg
KzM5MSwxMCBAQCBSZW5kZXJXaWRnZXQqIFJlbmRlcldpZGdldDo6ZmluZChjb25zdCBXCiAgICAg
cmV0dXJuIHdpZGdldFJlbmRlcmVyTWFwKCkuZ2V0KHdpZGdldCk7CiB9CiAKLWJvb2wgUmVuZGVy
V2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIGJvb2wgaGFkUmVz
dWx0ID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFj
ZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5
LCBhY3Rpb24pOworICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFj
dGlvbik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0
aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVh
KS4KICAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFoYWRS
ZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2
Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRPdmVybGFwVGVzdFJlc3VsdChib29sKTsKIAogICAgIGJvb2wgc2V0V2lkZ2V0
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODksMTUgKzE4OSwxNSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpCiAjZW5kaWYKIH0KIAotYm9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBp
bnQgbGluZUJvdHRvbSkKK2Jvb2wgUm9vdElubGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
aW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQogewogICAgIGlmIChoYXNFbGxpcHNpc0JveCgp
ICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGxp
bmVUb3AsIGxpbmVCb3R0b20pKSB7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSk7Cisg
ICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkg
eworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBv
aW50SW5Db250YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBJbmxpbmVGbG93Qm94
Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwg
bGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgcmV0dXJuIElubGluZUZsb3dCb3g6Om5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQs
IGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBv
c2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBkeSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRv
cCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pOwogCiAgICAgYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbjsg
fQogICAgIHZvaWQgc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihib29sIGhhc1NlbGVjdGVkQ2hpbGRy
ZW4pIHsgbV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbiA9IGhh
c1NlbGVjdGVkQ2hpbGRyZW47IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gODgxOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMTAgKzE0OSwxMCBAQCBib29sIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIElu
dFBvaW50IHJvdW5kZWRMb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpOwot
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3Vu
ZGVkTG9jYWxQb2ludCwgMCwgMCwgaGl0VGVzdEFjdGlvbik7CisgICAgcmV0dXJuIFJlbmRlckJs
b2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHJvdW5kZWRMb2NhbFBvaW50LCBJbnRQ
b2ludCgpLCBoaXRUZXN0QWN0aW9uKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdGb3Jl
aWduT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuaAkocmV2aXNpb24gODgxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ZvcmVpZ25PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmly
dHVhbCBib29sIGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFu
c2Zvcm1TdGF0ZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp1cGRhdGVGcm9tRWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9t
RWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmLCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJl
dmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLCBTVkcg
dXNlcyBhIGRpZmZlcmVudCBub2RlQXRQb2ludCBtZXRob2QKLSAgICBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBpbnQgZHhQYXJlbnRUb0NvbnRhaW5lciwgaW50IGR5UGFyZW50VG9D
b250YWluZXIsIEhpdFRlc3RBY3Rpb24pOworICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7
CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDExICs0MzUsOSBA
QCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpCiAgICAgbV9yZXBhaW50
Qm91bmRpbmdCb3guaW5mbGF0ZShib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiB9CiAKLWJvb2wg
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
clNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKIHsKLSAgICBJbnRTaXplIGNvbnRhaW5lclRvUGFyZW50T2Zmc2V0KHR4LCB0eSk7Ci0KLSAg
ICBJbnRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJbkNvbnRhaW5lciAtIGNvbnRhaW5lclRv
UGFyZW50T2Zmc2V0OworICAgIEludFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFp
bmVyIC0gdG9TaXplKGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICBJbnRQb2ludCBwb2ludEluQm9y
ZGVyQm94ID0gcG9pbnRJblBhcmVudCAtIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CiAKICAg
ICAvLyBOb3RlOiBGb3Igbm93LCB3ZSdyZSBpZ25vcmluZyBoaXRzIHRvIGJvcmRlciBhbmQgcGFk
ZGluZyBmb3IgPHN2Zz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA4ODE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3Vu
ZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDE0ICsxOTQsMTQgQEAgYm9vbCBSZW5k
ZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbgogICAgICAgICAgICAgaWYgKCFTVkdSZW5k
ZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgCiAKLSAgICAgICAgICAgIHJldHVybiBSZW5k
ZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBmbG9vcmVkSW50UG9pbnQobG9j
YWxQb2ludCksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIFJlbmRl
ckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGZsb29yZWRJbnRQb2ludChsb2Nh
bFBvaW50KSwgSW50UG9pbnQoKSwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBp
bnQsIGludCwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmLCBj
b25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDg4MTk3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96364</attachid>
            <date>2011-06-07 19:51:38 -0700</date>
            <delta_ts>2011-06-07 20:12:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-62145-20110607195136.patch</filename>
            <type>text/plain</type>
            <size>62677</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDYtMDcgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgorCisgICAgICAgIENvbnZlcnQgbm9kZUF0UG9pbnQgdG8gSW50UG9pbnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTQ1CisKKyAgICAgICAg
Q29udmVydCBub2RlQXRQb2ludCB0byB0YWtlIGFuIEludFBvaW50IGluc3RlYWQgb2YgYSBwYWly
IG9mIGludHMgZm9yIHRoZQorICAgICAgICBhY2N1bXVsYXRlZCBvZmZzZXQuCisKKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6Om1vdmVCeSk6Cisg
ICAgICAgIEFkZCBtb3ZlQnkoSW50UG9pbnQpIG1ldGhvZAorICAgICAgICAKKyAgICAgICAgKiBy
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJv
eDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpub2Rl
QXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmhpdFRl
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5v
ZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVSb3c6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lk
Z2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRG
bG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5v
ZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgorCiAyMDExLTA2LTA3ICBFbWlsIEEgRWtsdW5kICA8
ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gODgz
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsMjUgKzEwMSwyNCBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVj
dGlvbihHcmFwaGljCiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxl
LCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQoeCgpICsgcGFpbnRP
ZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyB0b3ApLCBoLCBjLCBzdHlsZS0+Y29s
b3JTcGFjZSgpKTsKIH0KIAotYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxp
bmVCb3R0b20pCitib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGlu
ZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsK
KyAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyByb3Vu
ZGVkSW50UG9pbnQodG9wTGVmdCgpKTsKIAogICAgIC8vIEhpdCB0ZXN0IHRoZSBtYXJrdXAgYm94
LgogICAgIGlmIChtX21hcmt1cEJveCkgewogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBt
X3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0TGluZSk7Ci0gICAgICAgIGludCBtdHggPSB0eCArIG1f
bG9naWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKLSAgICAgICAgaW50IG10eSA9IHR5ICsg
c3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnkoKSArIG1fbWFy
a3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpOwotICAgICAgICBpZiAobV9tYXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgbXR4LCBtdHksIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7
CisgICAgICAgIGludCBtdHggPSBhZGp1c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRo
IC0gbV9tYXJrdXBCb3gtPngoKTsKKyAgICAgICAgaW50IG10eSA9IGFkanVzdGVkTG9jYXRpb24u
eSgpICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnkoKSAr
IG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpOworICAgICAgICBpZiAobV9tYXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgSW50UG9pbnQobXR4LCBtdHkpLCBsaW5lVG9w
LCBsaW5lQm90dG9tKSkgewogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJbnRTaXplKG10eCwgbXR5KSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEludFJlY3QgYm91
bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCBtX2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQpOworICAg
IEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgSW50U2l6ZSht
X2xvZ2ljYWxXaWR0aCwgbV9oZWlnaHQpKTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygp
ICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250
YWluZXIpKSkgewotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgcG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSk7CisgICAgICAgIHJlbmRlcmVy
KCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXpl
KGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJh
c2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5k
c1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50
IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxp
bmVUb3AsIGludCBsaW5lQm90dG9tKTsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQogICAg
IEludFJlY3Qgc2VsZWN0aW9uUmVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmNwcAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDEyICsyMjAsMTIgQEAgdm9p
ZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbgogICAgIH0KIH0KIAotYm9vbCBJ
bmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0b20qLykKK2Jvb2wg
SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50IC8q
bGluZUJvdHRvbSovKQogewogICAgIC8vIEhpdCB0ZXN0IGFsbCBwaGFzZXMgb2YgcmVwbGFjZWQg
ZWxlbWVudHMgYXRvbWljYWxseSwgYXMgdGhvdWdoIHRoZSByZXBsYWNlZCBlbGVtZW50IGVzdGFi
bGlzaGVkIGl0cwogICAgIC8vIG93biBzdGFja2luZyBjb250ZXh0LiAgKFNlZSBBcHBlbmRpeCBF
LjIsIHNlY3Rpb24gNi40IG9uIGlubGluZSBibG9jay90YWJsZSBlbGVtZW50cyBpbiB0aGUgQ1NT
Mi4xCiAgICAgLy8gc3BlY2lmaWNhdGlvbi4pCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPmhpdFRl
c3QocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBJbnRQb2ludCh0eCwgdHkpKTsK
KyAgICByZXR1cm4gcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIH0KIAogY29uc3QgUm9vdElubGluZUJveCog
SW5saW5lQm94Ojpyb290KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmgJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGlu
dCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KTsKIAogICAgIElubGluZUJveCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lv
biA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODk4LDE4ICs4OTgsMTggQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpz
ZXRPdmVyZmxvd0Zyb21Mb2dpYwogICAgIHNldFZpc3VhbE92ZXJmbG93KHZpc3VhbE92ZXJmbG93
LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKIH0KIAotYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKK2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQogewogICAgIEludFJlY3Qgb3Zl
cmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAgICAg
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgb3ZlcmZsb3dSZWN0Lm1vdmUo
dHgsIHR5KTsKKyAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAg
ICBpZiAoIW92ZXJmbG93UmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJ
bkNvbnRhaW5lcikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGls
ZHJlbiBmaXJzdC4KICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+cHJldk9uTGluZSgpKSB7Ci0gICAgICAgIGlmICgoY3Vyci0+cmVuZGVy
ZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpICYmIGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciwgdHgsIHR5LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSBJ
bnRTaXplKHR4LCB0eSkpOworICAgICAgICBpZiAoKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgp
IHx8ICFjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSAmJiBj
dXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b1Np
emUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtOTM1LDEwICs5MzUsMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaQogICAgIC8vIE1vdmUgeC95IHRvIG91ciBjb29yZGluYXRlcy4KICAg
ICBJbnRSZWN0IHJlY3QobWluWCwgbWluWSwgd2lkdGgsIGhlaWdodCk7CiAgICAgZmxpcEZvcldy
aXRpbmdNb2RlKHJlY3QpOwotICAgIHJlY3QubW92ZSh0eCwgdHkpOworICAgIHJlY3QubW92ZUJ5
KGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYg
cmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7
Ci0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9y
V3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSkpOyAvLyBEb24n
dCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmlu
ZyBibG9jaydzIHNwYWNlLgorICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSB0b1NpemUoYWNj
dW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdh
bnQgY29vcmRzIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgc3BhY2UuCiAgICAgICAgIGlmICgh
cmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBw
b2ludEluQ29udGFpbmVyLCByZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24g
ODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRGaWxs
TGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBj
b25zdCBJbnRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsK
ICAgICB2b2lkIHBhaW50Qm94U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwg
U2hhZG93U3R5bGUsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwot
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQg
dHksIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckxpbmVC
b3hMaXN0KiByZW5kZXJlckxpbmVCb3hlcygpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQ1LDE2ICszNDUsMTYgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0
CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPmlzQlIoKSB8fCAocmVuZGVyZXIoKS0+c3R5bGUoKS0+
cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0gMSAmJiAoKnRleHRSZW5kZXJlcigpLT50ZXh0
KCkpW3N0YXJ0KCldID09ICdcbicpOwogfQogCi1ib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCAvKiBsaW5lVG9w
ICovLCBpbnQgLypsaW5lQm90dG9tKi8pCitib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBpbnQgLyogbGluZVRvcCAqLywgaW50IC8qbGluZUJvdHRvbSovKQogewogICAgIGlmIChpc0xp
bmVCcmVhaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IGJveE9y
aWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKLSAgICBib3hPcmlnaW4ubW92ZSh0
eCwgdHkpOworICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIEZs
b2F0UmVjdCByZWN0KGJveE9yaWdpbiwgSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOwogICAg
IGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFp
bmVyKSkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKSk7
CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9y
V3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50
UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBp
bnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQg
bGluZUJvdHRvbSk7CiAKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODk1LDE0ICszODk1LDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OmlzUG9pbnRJbk92ZXJmbG93Q29udHIKICAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJm
bG93Q29udHJvbHMocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsK
IH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCiB7Ci0gICAgSW50U2l6ZSBsb2NhbE9mZnNldCh0eCArIHgoKSwgdHkgKyB5KCkp
OworICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2Nh
dGlvbigpKTsKKyAgICBJbnRTaXplIGxvY2FsT2Zmc2V0ID0gdG9TaXplKGFkanVzdGVkTG9jYXRp
b24pOwogCiAgICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3
ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0Jv
eCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwotICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKGxvY2Fs
T2Zmc2V0KTsKKyAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwog
ICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAt
MzkxOCw3ICszOTE5LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VAogICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1Nl
bGZQYWludGluZ0xheWVyKCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkg
fHwgdXNlT3ZlcmZsb3dDbGlwKTsKICAgICBJbnRSZWN0IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0
Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1
c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHRvUG9pbnQobG9j
YWxPZmZzZXQpKS5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QodG9Q
b2ludChsb2NhbE9mZnNldCksIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkuaW50ZXJzZWN0
cyhoaXRUZXN0QXJlYSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8ICho
YXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVy
c2VjdHMoaGl0VGVzdEFyZWEpIDogb3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBJ
bmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKTsKICAg
ICBpZiAoY2hlY2tDaGlsZHJlbikgewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBm
aXJzdC4KICAgICAgICAgSW50U2l6ZSBzY3JvbGxlZE9mZnNldChsb2NhbE9mZnNldCk7CkBAIC0z
OTQyLDcgKzM5NDMsNyBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRU
CiAKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVzdEFj
dGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVz
dENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7Ci0gICAgICAgIEludFJlY3QgYm91bmRzUmVjdChsb2Nh
bE9mZnNldC53aWR0aCgpLCBsb2NhbE9mZnNldC5oZWlnaHQoKSwgd2lkdGgoKSwgaGVpZ2h0KCkp
OworICAgICAgICBJbnRSZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsK
ICAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2Vj
dHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNv
bnRhaW5lciAtIGxvY2FsT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVj
dCkpCkBAIC00MDQxLDcgKzQwNDIsNyBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVu
dHMoY29uc3QgCiAgICAgICAgICAgICBjaGlsZEhpdFRlc3QgPSBIaXRUZXN0Q2hpbGRCbG9ja0Jh
Y2tncm91bmQ7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGxhc3RDaGlsZEJveCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAgICAg
ICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUoY2hpbGQsIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAg
ICAgIGlmICghY2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWNoaWxkLT5pc0Zsb2F0
aW5nKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgY2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBjaGlsZEhpdFRlc3QpKQorICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlz
RmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludElu
Q29udGFpbmVyLCBjaGlsZFBvaW50LCBjaGlsZEhpdFRlc3QpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw3ICszMDEsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wg
ZW5kc1dpdGhTb2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbmxpbmVE
aXJlY3Rpb25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICovLCBm
bG9hdCYgLyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lkdGggKi8pIGNvbnN0
IHsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZp
c2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NDAsMjQgKzc0MCwyMyBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRl
Q29udGVudEJveExvZ2ljYWxICiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0g
eSgpOworICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCAr
IGxvY2F0aW9uKCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgogICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGFj
dGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5
ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBhZGp1c3RlZExvY2F0aW9uLCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0
aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAg
IC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1l
IHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVncm91bmQgcGhhc2Ug
KHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICBJ
bnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwor
ICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgp
KTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9y
ZWdyb3VuZCAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2lu
dEluQ29udGFpbmVyKSkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBv
aW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSkpOworICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExvY2F0aW9u
KSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9k
ZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlz
aW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gODgzMTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTYsMTIgKzE1NiwxMiBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludChQ
YWludEluZm8mIHBhCiB9CiAKIGJvb2wgUmVuZGVyRnJhbWVTZXQ6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgY29u
c3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0
aW9uIGFjdGlvbikKKyAgICBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
SW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAg
ICBpZiAoYWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBib29sIGluc2lkZSA9IFJlbmRlckJveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwgdHksIGFjdGlvbikKKyAgICBib29sIGluc2lkZSA9
IFJlbmRlckJveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVy
LCBhY2N1bXVsYXRlZE9mZnNldCwgYWN0aW9uKQogICAgICAgICB8fCBtX2lzUmVzaXppbmc7CiAK
ICAgICBpZiAoaW5zaWRlICYmIGZyYW1lU2V0KCktPm5vUmVzaXplKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCShyZXZpc2lvbiA4ODMxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRnJhbWVTZXQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwogICAg
IHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSop
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJ
KHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDE3ICszOTQsMTcgQEAgSFRNTE1hcEVsZW1lbnQq
IFJlbmRlckltYWdlOjppbWFnZU1hcCgpIAogICAgIHJldHVybiBpID8gaS0+dHJlZVNjb3BlKCkt
PmdldEltYWdlTWFwKGktPmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikpIDogMDsKIH0KIAot
Ym9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCiB7CiAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1
bHQudG9wUGFkZGluZygpLCByZXN1bHQucmlnaHRQYWRkaW5nKCksIHJlc3VsdC5ib3R0b21QYWRk
aW5nKCksIHJlc3VsdC5sZWZ0UGFkZGluZygpKTsKLSAgICBib29sIGluc2lkZSA9IFJlbmRlclJl
cGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBwb2ludEluQ29udGFpbmVy
LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOworICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFj
ZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHRlbXBSZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKIAogICAgIGlmICh0ZW1wUmVzdWx0Lmlu
bmVyTm9kZSgpICYmIG5vZGUoKSkgewogICAgICAgICBpZiAoSFRNTE1hcEVsZW1lbnQqIG1hcCA9
IGltYWdlTWFwKCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY29udGVudEJveCA9IGNvbnRlbnRC
b3hSZWN0KCk7CiAgICAgICAgICAgICBmbG9hdCB6b29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwotICAgICAgICAgICAgaW50IG1hcFggPSBscm91bmRmKChwb2ludEluQ29udGFpbmVyLngo
KSAtIHR4IC0gdGhpcy0+eCgpIC0gY29udGVudEJveC54KCkpIC8gem9vbSk7Ci0gICAgICAgICAg
ICBpbnQgbWFwWSA9IGxyb3VuZGYoKHBvaW50SW5Db250YWluZXIueSgpIC0gdHkgLSB0aGlzLT55
KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29tKTsKKyAgICAgICAgICAgIGludCBtYXBYID0gbHJv
dW5kZigocG9pbnRJbkNvbnRhaW5lci54KCkgLSBhY2N1bXVsYXRlZE9mZnNldC54KCkgLSB0aGlz
LT54KCkgLSBjb250ZW50Qm94LngoKSkgLyB6b29tKTsKKyAgICAgICAgICAgIGludCBtYXBZID0g
bHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci55KCkgLSBhY2N1bXVsYXRlZE9mZnNldC55KCkgLSB0
aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29tKTsKICAgICAgICAgICAgIGlmIChtYXAt
Pm1hcE1vdXNlRXZlbnQobWFwWCwgbWFwWSwgY29udGVudEJveC5zaXplKCksIHRlbXBSZXN1bHQp
KQogICAgICAgICAgICAgICAgIHRlbXBSZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUo
KSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5o
CShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBpbnQgbWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIGludCBj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBj
b25zdDsKICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2
aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEwLDkgKzcxMCw5IEBAIGNvbnN0IGNoYXIqIFJlbmRlcklu
bGluZTo6cmVuZGVyTmFtZSgpIGMKIH0KIAogYm9vbCBSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhp
dFRlc3RBY3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVx
dWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBJbnRQb2ludCh0eCwgdHkpLCBoaXRUZXN0
QWN0aW9uKTsKKyAgICByZXR1cm4gbV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9u
KTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRpb25Gb3JQb2ludChj
b25zdCBJbnRQb2ludCYgcG9pbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5oCShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4g
aXNSZWxQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc01hc2soKTsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJ
KHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
b3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIGJvb2wgUmVuZGVy
TGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm8KICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1
cnIgPSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkgewog
ICAgICAgICBSb290SW5saW5lQm94KiByb290ID0gY3Vyci0+cm9vdCgpOwogICAgICAgICBpZiAo
cmFuZ2VJbnRlcnNlY3RzUmVjdChyZW5kZXJlciwgY3Vyci0+bG9naWNhbFRvcFZpc3VhbE92ZXJm
bG93KHJvb3QtPmxpbmVUb3AoKSksIGN1cnItPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyhy
b290LT5saW5lQm90dG9tKCkpLCByZWN0LCBhY2N1bXVsYXRlZE9mZnNldCkpIHsKLSAgICAgICAg
ICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldC54KCksIGFjY3VtdWxhdGVkT2Zmc2V0Lnko
KSwgcm9vdC0+bGluZVRvcCgpLCByb290LT5saW5lQm90dG9tKCkpOworICAgICAgICAgICAgYm9v
bCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250
YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCByb290LT5saW5lVG9wKCksIHJvb3QtPmxpbmVCb3R0
b20oKSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7CiAgICAgICAgICAgICAgICAgcmVuZGVy
ZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b1BvaW50KHBvaW50SW5Db250YWluZXIg
LSBhY2N1bXVsYXRlZE9mZnNldCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24g
ODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2OSwyMSArNjY5LDIxIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6c2V0
U2Nyb2xsVG9wKGludCBuZXcKICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihpbmRleCk7CiB9CiAKLWJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBpZiAoIVJlbmRlckJs
b2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0
eSwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVz
dEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb25zdCBWZWN0b3I8RWxlbWVu
dCo+JiBsaXN0SXRlbXMgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUoKSkpLT5saXN0SXRlbXMoKTsKICAgICBpbnQgc2l6ZSA9IG51bUl0ZW1zKCk7Ci0gICAgdHgg
Kz0gdGhpcy0+eCgpOwotICAgIHR5ICs9IHRoaXMtPnkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3Rl
ZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworCiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1Cb3VuZGluZ0JveFJl
Y3QoSW50UG9pbnQodHgsIHR5KSwgaSkuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lcikpIHsKKyAg
ICAgICAgaWYgKGl0ZW1Cb3VuZGluZ0JveFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgaSkuY29udGFp
bnMocG9pbnRJbkNvbnRhaW5lcikpIHsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBub2RlID0g
bGlzdEl0ZW1zW2ldKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2Rl
KTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKTsKLSAg
ICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChwb2ludEluQ29udGFpbmVyIC0gSW50
U2l6ZSh0eCwgdHkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChwb2lu
dEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwor
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8vIFNjcm9sbGFi
bGVBcmVhIGludGVyZmFjZS4KICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ3LDIwICsy
MTQ3LDIwIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3QKICAgICBi
b29sIGluc2lkZSA9IGZhbHNlOwogICAgIGlmIChoaXRUZXN0RmlsdGVyICE9IEhpdFRlc3RTZWxm
KSB7CiAgICAgICAgIC8vIEZpcnN0IHRlc3QgdGhlIGZvcmVncm91bmQgbGF5ZXIgKGxpbmVzIGFu
ZCBpbmxpbmVzKS4KLSAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldC54KCksIGFjY3VtdWxhdGVkT2Zm
c2V0LnkoKSwgSGl0VGVzdEZvcmVncm91bmQpOworICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0Rm9yZWdyb3VuZCk7CiAKICAgICAgICAgLy8gVGVzdCBmbG9hdHMgbmV4dC4KICAgICAg
ICAgaWYgKCFpbnNpZGUpCi0gICAgICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LngoKSwgYWNjdW11
bGF0ZWRPZmZzZXQueSgpLCBIaXRUZXN0RmxvYXQpOworICAgICAgICAgICAgaW5zaWRlID0gbm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEZsb2F0KTsKIAogICAgICAgICAvLyBGaW5hbGx5IHRlc3QgdG8gc2VlIGlm
IHRoZSBtb3VzZSBpcyBpbiB0aGUgYmFja2dyb3VuZCAod2l0aGluIGEgY2hpbGQgYmxvY2sncyBi
YWNrZ3JvdW5kKS4KICAgICAgICAgaWYgKCFpbnNpZGUpCi0gICAgICAgICAgICBpbnNpZGUgPSBu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVk
T2Zmc2V0LngoKSwgYWNjdW11bGF0ZWRPZmZzZXQueSgpLCBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tn
cm91bmRzKTsKKyAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RDaGlsZEJsb2Nr
QmFja2dyb3VuZHMpOwogICAgIH0KIAogICAgIC8vIFNlZSBpZiB0aGUgbW91c2UgaXMgaW5zaWRl
IHVzIGJ1dCBub3QgYW55IG9mIG91ciBkZXNjZW5kYW50cwogICAgIGlmIChoaXRUZXN0RmlsdGVy
ICE9IEhpdFRlc3REZXNjZW5kYW50cyAmJiAhaW5zaWRlKQotICAgICAgICBpbnNpZGUgPSBub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zm
c2V0LngoKSwgYWNjdW11bGF0ZWRPZmZzZXQueSgpLCBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kKTsK
KyAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEJsb2NrQmFja2dyb3VuZCk7CiAKICAg
ICByZXR1cm4gaW5zaWRlOwogfQpAQCAtMjE3OSw3ICsyMTc5LDcgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFBvaW50JiAvKnBvaW50SW5Db250YWluZXIqLywgaW50IC8qdHgqLywgaW50IC8qdHkqLywg
SGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgLypwb2ludEluQ29u
dGFpbmVyKi8sIGNvbnN0IEludFBvaW50JiAvKmFjY3VtdWxhdGVkT2Zmc2V0Ki8sIEhpdFRlc3RB
Y3Rpb24pCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0Niw3ICs1NDYsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0RmlsdGVyID0gSGl0VGVzdEFs
bCk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
Q29vcmRpbmF0ZXMoaW50IHgsIGludCB5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkzLDE3ICsxMTkzLDE2
IEBAIEludFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QoY28KICAgICByZXR1cm4g
cmVjdDsKIH0KIAotYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jv
b2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCk7CisgICAgSW50UG9pbnQgYWRqdXN0
ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIENo
ZWNrIGtpZHMgZmlyc3QuCi0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0Ns
aXBSZWN0KEludFBvaW50KHR4LCB0eSkpLmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpIHsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92ZXJm
bG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBv
aW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hp
bGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygp
KSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxk
KS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwg
Y2hpbGQgPT0gbV9jYXB0aW9uKSkgewotICAgICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9p
bnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBJbnRQb2ludCh0eCwg
dHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKLSAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
Y2hpbGRQb2ludC54KCksIGNoaWxkUG9pbnQueSgpLCBhY3Rpb24pKSB7CisgICAgICAgICAgICAg
ICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChj
aGlsZCksIGFkanVzdGVkTG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQp
OworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b1BvaW50KHBvaW50SW5Db250YWlu
ZXIgLSBjaGlsZFBvaW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTEyMTIsOSArMTIxMSw5IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFQKICAgICB9CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5l
eHQuCi0gICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhl
aWdodCgpKTsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KGFkanVzdGVkTG9jYXRp
b24sIHNpemUoKSk7CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09
IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFj
a2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9p
bnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBm
bGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgsIHR5KSkpOwor
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBv
aW50SW5Db250YWluZXIgLSB0b1NpemUoYWRqdXN0ZWRMb2NhdGlvbikpKTsKICAgICAgICAgaWYg
KCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250
YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDg4MzE3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyMCw3ICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2so
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwog
ICAgIAogICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNp
b24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgSW50UmVjdCBSZW5kZXJUYWJsZVJv
dzo6Y2xpcHBlZE92ZXJmbG93UgogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5kZXJUYWJs
ZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIC8vIFRhYmxlIHJv
d3MgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4gIEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4
aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgpAQCAtMTk3
LDkgKzE5Nyw5IEBAIGJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEgKICAg
ICAgICAgLy8gdGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQg
ZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBj
YW4gcmVtb3ZlIHRoaXMgY2hlY2suCiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSAm
JiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAgICAg
ICAgICBJbnRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJUYWJs
ZUNlbGwoY2hpbGQpLCBJbnRQb2ludCh0eCwgdHkpLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1
c3RtZW50KTsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQueCgpLCBjZWxsUG9pbnQueSgpLCBhY3Rp
b24pKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50
SW5Db250YWluZXIgLSBJbnRTaXplKGNlbGxQb2ludC54KCksIGNlbGxQb2ludC55KCkpKTsKKyAg
ICAgICAgICAgIEludFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRl
clRhYmxlQ2VsbChjaGlsZCksIGFjY3VtdWxhdGVkT2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBp
bmdBZGp1c3RtZW50KTsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKKyAgICAg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAt
IHRvU2l6ZShjZWxsUG9pbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93LmgJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8vIFRoZSBvbmx5IHRp
bWUgcm93cyBnZXQgYSBsYXllciBpcyB3aGVuIHRoZXkgaGF2ZSB0cmFuc3BhcmVuY3kuCiAgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1RyYW5zcGFyZW50
KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFzaygpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKGludAogfQogCiAvLyBIaXQgVGVzdGlu
ZwotYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29s
IFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBh
Y3Rpb24pCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBubyBjaGlsZHJlbiB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKQEAgLTExNDksMTAgKzExNDksOSBA
QCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAKICAgICAvLyBUYWJs
ZSBzZWN0aW9ucyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhleSBk
byBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMu
Ci0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZExv
Y2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCi0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KEludFBvaW50KHR4LCB0eSkpLmludGVy
c2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCisgICAgaWYgKGhh
c092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmlu
dGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX2hhc092ZXJmbG93aW5nQ2VsbCkgewpAQCAtMTE2
Miw4ICsxMTYxLDggQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgog
ICAgICAgICAgICAgLy8gdGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBz
aG91bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgICAgIC8v
IHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgogICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
LSAgICAgICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2Rl
KHRvUmVuZGVyQm94KGNoaWxkKSwgSW50UG9pbnQodHgsIHR5KSwgUGFyZW50VG9DaGlsZEZsaXBw
aW5nQWRqdXN0bWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQueCgpLCBjaGlsZFBv
aW50LnkoKSwgYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQg
PSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9u
LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2hp
bGRQb2ludCwgYWN0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgdG9Qb2ludChwb2ludEluQ29udGFpbmVyIC0gY2hpbGRQb2ludCkpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTcy
LDcgKzExNzEsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IHBv
aW50SW5Db250YWluZXIgLSBJbnRTaXplKHR4LCB0eSk7CisgICAgSW50UG9pbnQgbG9jYXRpb24g
PSBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pOwogICAgIGlmIChz
dHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgbG9jYXRpb24uc2V0
WShoZWlnaHQoKSAtIGxvY2F0aW9uLnkoKSk7CkBAIC0xMjA2LDggKzEyMDUsOCBAQCBib29sIFJl
bmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAKICAgICBmb3IgKGludCBpID0gY3Vy
cmVudC5jZWxscy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOwotICAgICAgICBJbnRQb2ludCBjZWxsUG9p
bnQgPSBmbGlwRm9yV3JpdGluZ01vZGUoY2VsbCwgSW50UG9pbnQodHgsIHR5KSwgUGFyZW50VG9D
aGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJP
YmplY3QqPihjZWxsKS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBjZWxsUG9pbnQueCgpLCBjZWxsUG9pbnQueSgpLCBhY3Rpb24pKSB7CisgICAgICAgIElu
dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxsLCBhZGp1c3RlZExvY2F0
aW9uLCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKKyAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewogICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQ
b2ludCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDg4
MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
dm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwog
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pOwogCiAgICAgYm9vbCBlbnN1cmVSb3dzKGludCk7CiAgICAgdm9pZCBjbGVhckdyaWQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gODgzMTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAgICBib29s
IGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmNwcAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCwxMyArNjQsMTMgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3Vi
dHJlZQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHREaWRDaGFuZ2VJblRleHRBcmVhKHRl
eHRBcmVhKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAg
aWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4
dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSB8fCByZXN1bHQuaW5uZXJO
b2RlKCkgPT0gaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICBoaXRJbm5lclRleHRFbGVtZW50
KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgSW50UG9pbnQodHgsIHR5KSk7CisgICAgICAgIGhp
dElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9m
ZnNldCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA4
ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwor
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgZmxv
YXQgZ2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50
IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw3
ICszMjcsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAjZW5k
aWYKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBJ
ZiB3ZSdyZSB3aXRoaW4gdGhlIHRleHQgY29udHJvbCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2Un
dmUgaGl0IHRoZSBpbm5lciB0ZXh0IGJsb2NrIGVsZW1lbnQsIGluIGNhc2UgdGhlIHBvaW50CiAg
ICAgLy8gd2FzIG9uIHRoZSBjb250cm9sIGJ1dCBub3Qgb24gdGhlIGlubmVyIGVsZW1lbnQgKHNl
ZSBSYWRhciA0NjE3ODQxKS4KQEAgLTMzNSwxNCArMzM1LDE0IEBAIGJvb2wgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpub2RlQXQKICAgICAvLyBJbiBhIHNlYXJjaCBmaWVsZCwgd2Ugd2Fu
dCB0byBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSByZXN1bHRzIGJsb2NrIGlmIHdlJ3JlIHRvIHRo
ZSBsZWZ0IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2NrLAogICAgIC8vIGFuZCBhY3QgYXMgaWYgd2Un
dmUgaGl0IHRoZSBjbG9zZSBibG9jayBpZiB3ZSdyZSB0byB0aGUgcmlnaHQgb2YgdGhlIGlubmVy
IHRleHQgYmxvY2suCiAKLSAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikp
CisgICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHdlIGhpdCBhIG5vZGUgaW5zaWRlIHRo
ZSBpbm5lciB0ZXh0IGVsZW1lbnQsIHNheSB0aGF0IHdlIGhpdCB0aGF0IGVsZW1lbnQsCiAgICAg
Ly8gYW5kIGlmIHdlIGhpdCBvdXIgbm9kZSAoZS5nLiB3ZSdyZSBvdmVyIHRoZSBib3JkZXIgb3Ig
cGFkZGluZyksIGFsc28gc2F5IHRoYXQgd2UgaGl0IHRoZQogICAgIC8vIGlubmVyIHRleHQgZWxl
bWVudCBzbyB0aGF0IGl0IGdhaW5zIGZvY3VzLgogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkt
PmlzRGVzY2VuZGFudE9mKGlubmVyVGV4dEVsZW1lbnQoKSkgfHwgcmVzdWx0LmlubmVyTm9kZSgp
ID09IG5vZGUoKSkKLSAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIEludFBvaW50KHR4LCB0eSkpOworICAgICAgICBoaXRJbm5lclRleHRFbGVtZW50
KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQpOwogCiAgICAgLy8g
SWYgd2UgZm91bmQgYSBzcGluIGJ1dHRvbiwgd2UncmUgZG9uZS4KICAgICBIVE1MRWxlbWVudCog
aW5uZXJTcGluQnV0dG9uID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpOwpAQCAtMzY3LDEzICsz
NjcsMTMgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdAogICAgIElu
dFBvaW50IGxvY2FsUG9pbnQgPSByZXN1bHQubG9jYWxQb2ludCgpOwogICAgIGxvY2FsUG9pbnQu
bW92ZSgtaW5uZXJCbG9ja1JlbmRlcmVyLT5sb2NhdGlvbigpKTsKIAotICAgIGludCB0ZXh0TGVm
dCA9IHR4ICsgeCgpICsgaW5uZXJCbG9ja1JlbmRlcmVyLT54KCkgKyBpbm5lclRleHRSZW5kZXJl
ci0+eCgpOworICAgIGludCB0ZXh0TGVmdCA9IGFjY3VtdWxhdGVkT2Zmc2V0LngoKSArIHgoKSAr
IGlubmVyQmxvY2tSZW5kZXJlci0+eCgpICsgaW5uZXJUZXh0UmVuZGVyZXItPngoKTsKICAgICBp
ZiAocmVzdWx0c0J1dHRvbiAmJiByZXN1bHRzQnV0dG9uLT5yZW5kZXJlcigpICYmIHBvaW50SW5D
b250YWluZXIueCgpIDwgdGV4dExlZnQpCiAgICAgICAgIGlubmVyTm9kZSA9IHJlc3VsdHNCdXR0
b247CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIGlmICghaW5uZXJOb2RlICYmIHNw
ZWVjaEJ1dHRvbkVsZW1lbnQoKSAmJiBzcGVlY2hCdXR0b25FbGVtZW50KCktPnJlbmRlcmVyKCkp
IHsKLSAgICAgICAgaW50IGJ1dHRvbkxlZnQgPSB0eCArIHgoKSArIGlubmVyQmxvY2tSZW5kZXJl
ci0+eCgpICsgaW5uZXJCbG9ja1JlbmRlcmVyLT53aWR0aCgpIC0gc3BlZWNoQnV0dG9uRWxlbWVu
dCgpLT5yZW5kZXJCb3goKS0+d2lkdGgoKTsKKyAgICAgICAgaW50IGJ1dHRvbkxlZnQgPSBhY2N1
bXVsYXRlZE9mZnNldC54KCkgKyB4KCkgKyBpbm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVy
QmxvY2tSZW5kZXJlci0+d2lkdGgoKSAtIHNwZWVjaEJ1dHRvbkVsZW1lbnQoKS0+cmVuZGVyQm94
KCktPndpZHRoKCk7CiAgICAgICAgIGlmIChwb2ludEluQ29udGFpbmVyLngoKSA+PSBidXR0b25M
ZWZ0KQogICAgICAgICAgICAgaW5uZXJOb2RlID0gc3BlZWNoQnV0dG9uRWxlbWVudCgpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwog
CiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MCwx
MCArMzkwLDEwIEBAIFJlbmRlcldpZGdldCogUmVuZGVyV2lkZ2V0OjpmaW5kKGNvbnN0IFcKICAg
ICByZXR1cm4gd2lkZ2V0UmVuZGVyZXJNYXAoKS5nZXQod2lkZ2V0KTsKIH0KIAotYm9vbCBSZW5k
ZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlcldpZGdldDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgYm9vbCBoYWRS
ZXN1bHQgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBs
YWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCB0eCwg
dHksIGFjdGlvbik7CisgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwg
YWN0aW9uKTsKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHJlYWxseSBvdmVy
IHRoZSB3aWRnZXQgaXRzZWxmIChhbmQgbm90IGp1c3QgaW4gdGhlIGJvcmRlci9wYWRkaW5nIGFy
ZWEpLgogICAgIGlmICgoaW5zaWRlIHx8IHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkgJiYgIWhh
ZFJlc3VsdCAmJiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcg
KzY3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmly
dHVhbCB2b2lkIHNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wpOwogCiAgICAgYm9vbCBzZXRXaWRn
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gODgzMTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OSwxNSArMTg5LDE1IEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWkKICNlbmRpZgogfQogCi1ib29sIFJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3As
IGludCBsaW5lQm90dG9tKQorYm9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7CiAgICAgaWYgKGhhc0VsbGlwc2lzQm94
KCkgJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChlbGxpcHNpc0JveCgp
LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIHR4LCB0eSwg
bGluZVRvcCwgbGluZUJvdHRvbSkpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gSW50U2l6ZSh0eCwgdHkpKTsK
KyAgICAgICAgaWYgKGVsbGlwc2lzQm94KCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20p
KSB7CisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdHgsIHR5
LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKKyAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNl
dCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CiB9CiAKIHZvaWQgUm9vdElubGluZUJveDo6YWRqdXN0
UG9zaXRpb24oZmxvYXQgZHgsIGZsb2F0IGR5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5oCShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAg
cHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGludCBsaW5l
VG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9w
LCBpbnQgbGluZUJvdHRvbSk7CiAKICAgICBib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiBtX2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9u
OyB9CiAgICAgdm9pZCBzZXRIYXNTZWxlY3RlZENoaWxkcmVuKGJvb2wgaGFzU2VsZWN0ZWRDaGls
ZHJlbikgeyBtX2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uID0g
aGFzU2VsZWN0ZWRDaGlsZHJlbjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiA4ODMx
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxMCArMTQ5LDEwIEBAIGJvb2wgUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
SW50UG9pbnQgcm91bmRlZExvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCk7
Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHJv
dW5kZWRMb2NhbFBvaW50LCAwLCAwLCBoaXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gUmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcm91bmRlZExvY2FsUG9pbnQsIElu
dFBvaW50KCksIGhpdFRlc3RBY3Rpb24pOwogfQogCi1ib29sIFJlbmRlclNWR0ZvcmVpZ25PYmpl
Y3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQog
ewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5oCShyZXZpc2lvbiA4ODMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwotICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRy
YW5zZm9ybVN0YXRlJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gODgzMTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgUmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OnVwZGF0ZUZyb21FbGUKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZy
b21FbGVtZW50KHRoaXMsIHN0eWxlKCkpOwogfQogCi1ib29sIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAko
cmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBiZSBjYWxsZWQsIFNW
RyB1c2VzIGEgZGlmZmVyZW50IG5vZGVBdFBvaW50IG1ldGhvZAotICAgIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGludCBkeFBhcmVudFRvQ29udGFpbmVyLCBpbnQgZHlQYXJlbnRU
b0NvbnRhaW5lciwgSGl0VGVzdEFjdGlvbik7CisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmNwcAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsMTEgKzQzNCw5
IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRhcmkKICAgICBtX3JlcGFp
bnRCb3VuZGluZ0JveC5pbmZsYXRlKGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKIH0KIAotYm9v
bCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVu
ZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQogewotICAgIEludFNpemUgY29udGFpbmVyVG9QYXJlbnRPZmZzZXQodHgsIHR5KTsKLQot
ICAgIEludFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyIC0gY29udGFpbmVy
VG9QYXJlbnRPZmZzZXQ7CisgICAgSW50UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250
YWluZXIgLSB0b1NpemUoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIEludFBvaW50IHBvaW50SW5C
b3JkZXJCb3ggPSBwb2ludEluUGFyZW50IC0gcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsKIAog
ICAgIC8vIE5vdGU6IEZvciBub3csIHdlJ3JlIGlnbm9yaW5nIGhpdHMgdG8gYm9yZGVyIGFuZCBw
YWRkaW5nIGZvciA8c3ZnPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDg4MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJv
dW5kaW5nQm94OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNw
cAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTQgKzE5NCwxNCBAQCBib29sIFJl
bmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29uCiAgICAgICAgICAgICBpZiAoIVNWR1Jl
bmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAKIAotICAgICAgICAgICAgcmV0dXJuIFJl
bmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGZsb29yZWRJbnRQb2ludChs
b2NhbFBvaW50KSwgMCwgMCwgaGl0VGVzdEFjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgZmxvb3JlZEludFBvaW50KGxv
Y2FsUG9pbnQpLCBJbnRQb2ludCgpLCBoaXRUZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYs
IGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gODgzMTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
SW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJ
blBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>