<?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>66156</bug_id>
          
          <creation_ts>2011-08-12 12:34:11 -0700</creation_ts>
          <short_desc>Switch RenderBox to to new layout types</short_desc>
          <delta_ts>2011-08-17 23:37:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>450570</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-12 12:34:11 -0700</bug_when>
    <thetext>Convert *** to new layout abstraction as a part of the ongoing conversion work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450763</commentid>
    <comment_count>1</comment_count>
      <attachid>103844</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-12 17:02:49 -0700</bug_when>
    <thetext>Created attachment 103844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450769</commentid>
    <comment_count>2</comment_count>
      <attachid>103844</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 17:33:05 -0700</bug_when>
    <thetext>Comment on attachment 103844
Patch

Attachment 103844 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9378061

New failing tests:
fast/block/float/overhanging-tall-block.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450771</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-12 17:37:49 -0700</bug_when>
    <thetext>The test overhanging-tall-block.html seems to be missing expected results for cr-linux.

Will investigate before I submit but please go ahead and review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450772</commentid>
    <comment_count>4</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-12 17:40:04 -0700</bug_when>
    <thetext>Actually, the output suggests that the failing test is the following rather than the float test.

Regressions: Unexpected image and text mismatch : (1)
  svg/custom/svg-fonts-word-spacing.html = IMAGE+TEXT

Looking into why now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450781</commentid>
    <comment_count>5</comment_count>
      <attachid>103851</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-12 18:33:54 -0700</bug_when>
    <thetext>Created attachment 103851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451411</commentid>
    <comment_count>6</comment_count>
      <attachid>103984</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-15 17:22:23 -0700</bug_when>
    <thetext>Created attachment 103984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452409</commentid>
    <comment_count>7</comment_count>
      <attachid>103984</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-17 11:30:56 -0700</bug_when>
    <thetext>Comment on attachment 103984
Patch

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

&gt; Source/WebCore/rendering/RenderBox.cpp:1151
&gt; +    LayoutRect clipRect(location + LayoutSize(borderLeft(), borderTop()),

Isn&apos;t this borderRect().location?

&gt; Source/WebCore/rendering/RenderBox.cpp:1864
&gt; -            logicalHeight = h.value();
&gt; +            logicalHeight = h.calcFloatValue(0);

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452474</commentid>
    <comment_count>8</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-17 12:34:57 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 103984 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103984&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBox.cpp:1151
&gt; &gt; +    LayoutRect clipRect(location + LayoutSize(borderLeft(), borderTop()),
&gt; 
&gt; Isn&apos;t this borderRect().location?

No, borderBoxRect.location is in the local coordinate space (i.e. does not include the location offset).

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBox.cpp:1864
&gt; &gt; -            logicalHeight = h.value();
&gt; &gt; +            logicalHeight = h.calcFloatValue(0);
&gt; 
&gt; Why?

Good catch, reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452523</commentid>
    <comment_count>9</comment_count>
      <attachid>104227</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-17 13:41:41 -0700</bug_when>
    <thetext>Created attachment 104227
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452869</commentid>
    <comment_count>10</comment_count>
      <attachid>104227</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 23:37:37 -0700</bug_when>
    <thetext>Comment on attachment 104227
Patch for landing

Rejecting attachment 104227 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-03&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
.
creating empty directory: LayoutTests/platform/chromium-mac-leopard
creating empty directory: LayoutTests/platform/chromium-mac/fast/events
creating empty directory: LayoutTests/platform/chromium-mac/http/tests/workers
creating empty directory: LayoutTests/platform/chromium-mac/storage/domstorage
Updating chromium port dependencies using gclient...

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/9423376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452870</commentid>
    <comment_count>11</comment_count>
      <attachid>104227</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 23:37:45 -0700</bug_when>
    <thetext>Comment on attachment 104227
Patch for landing

Clearing flags on attachment: 104227

Committed r93284: &lt;http://trac.webkit.org/changeset/93284&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452871</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 23:37:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103844</attachid>
            <date>2011-08-12 17:02:49 -0700</date>
            <delta_ts>2011-08-12 18:19:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66156-20110812170248.patch</filename>
            <type>text/plain</type>
            <size>65948</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMDA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDgtMTIgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCb3ggdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb252ZXJ0IFJlbmRlckJveCB0byBuZXcgbGF5b3V0IGFic3RyYWN0aW9uIGFz
IGEgcGFydCBvZiB0aGUgb25nb2luZworICAgICAgICBjb252ZXJzaW9uIHdvcmsuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgor
CiAyMDExLTA4LTEyICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIEZpeCBjb21pbGUgd2FybmluZyBvbiBDQ0xheWVyVHJlZUhvc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA5MzAwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTYsNyArNDE2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNsaWVudEhlaWdodCgpIGNvbgog
ICAgIHJldHVybiBoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiB9CiAKLWludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRo
KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7CiAg
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xs
V2lkdGgoKTsKQEAgLTQyNCwxMCArNDI0LDEwIEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRo
KCkgY29uc3QKICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBt
b2Rlcy4KICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAg
ICByZXR1cm4gbWF4KGNsaWVudFdpZHRoKCksIG1heFhMYXlvdXRPdmVyZmxvdygpIC0gYm9yZGVy
TGVmdCgpKTsKLSAgICByZXR1cm4gY2xpZW50V2lkdGgoKSAtIG1pbigwLCBtaW5YTGF5b3V0T3Zl
cmZsb3coKSAtIGJvcmRlckxlZnQoKSk7CisgICAgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBtaW48
TGF5b3V0VW5pdD4oMCwgbWluWExheW91dE92ZXJmbG93KCkgLSBib3JkZXJMZWZ0KCkpOwogfQog
Ci1pbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJC
b3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7CiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQog
ICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7CkBAIC00MzYsMjkgKzQzNiwy
OSBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogICAgIHJldHVybiBtYXgo
Y2xpZW50SGVpZ2h0KCksIG1heFlMYXlvdXRPdmVyZmxvdygpIC0gYm9yZGVyVG9wKCkpOwogfQog
Ci1pbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94
OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBs
YXllcigpLT5zY3JvbGxYT2Zmc2V0KCkgOiAwOwogfQogCi1pbnQgUmVuZGVyQm94OjpzY3JvbGxU
b3AoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpIDog
MDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCit2b2lk
IFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChMYXlvdXRVbml0IG5ld0xlZnQpCiB7CiAgICAgaWYg
KGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBsYXllcigpLT5zY3JvbGxUb1hPZmZzZXQobmV3
TGVmdCwgUmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQpOwogfQogCi12b2lkIFJlbmRl
ckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3ApCit2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xs
VG9wKExheW91dFVuaXQgbmV3VG9wKQogewogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAg
ICAgICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1RvcCwgUmVuZGVyTGF5ZXI6OlNjcm9s
bE9mZnNldENsYW1wZWQpOwogfQogCi12b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0
b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQpCit2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCiB7CiAgICAgcmVjdHMuYXBw
ZW5kKExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIHNpemUoKSkpOwogfQpAQCAtNDc1LDkg
KzQ3NSw5IEBAIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVMYXllclRyYW5zZm9ybSgpCiAgICAgICAg
IGxheWVyKCktPnVwZGF0ZVRyYW5zZm9ybSgpOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6YWJz
b2x1dGVDb250ZW50Qm94KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZUNv
bnRlbnRCb3goKSBjb25zdAogewotICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7
CisgICAgTGF5b3V0UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICBGbG9hdFBvaW50
IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOwogICAgIHJlY3QubW92ZShh
YnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICByZXR1cm4gcmVjdDsKQEAgLTQ4NSwxMyArNDg1
LDEzIEBAIEludFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3goKSAKIAogRmxvYXRR
dWFkIFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0CiB7Ci0gICAgSW50UmVj
dCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBjb250ZW50
Qm94UmVjdCgpOwogICAgIHJldHVybiBsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZWN0
KSk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UG9pbnQqIGNhY2hlZE9mZnNl
dFRvUmVwYWludENvbnRhaW5lcikgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpvdXRsaW5l
Qm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwg
TGF5b3V0UG9pbnQqIGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3QKIHsKLSAg
ICBJbnRSZWN0IGJveCA9IGJvcmRlckJvdW5kaW5nQm94KCk7CisgICAgTGF5b3V0UmVjdCBib3gg
PSBib3JkZXJCb3VuZGluZ0JveCgpOwogICAgIGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93
KGJveCk7CiAKICAgICBGbG9hdFF1YWQgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gRmxvYXRSZWN0
KGJveCk7CkBAIC01MTUsMTIgKzUxNSwxMiBAQCB2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yCiAgICAgICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFkZGl0aW9uYWxP
ZmZzZXQsIHNpemUoKSkpOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgp
IGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgpIGNvbnN0CiB7Ci0g
ICAgSW50UmVjdCByZXN1bHQ7CisgICAgTGF5b3V0UmVjdCByZXN1bHQ7CiAgICAgaWYgKCFzdHls
ZSgpLT5ib3hSZWZsZWN0KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgSW50UmVjdCBi
b3ggPSBib3JkZXJCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0
KCk7CiAgICAgcmVzdWx0ID0gYm94OwogICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgp
LT5kaXJlY3Rpb24oKSkgewogICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKQEAgLTU0OCwx
MyArNTQ4LDEzIEBAIGludCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdAogICAg
IHJldHVybiBzdHlsZSgpLT5ib3hSZWZsZWN0KCktPm9mZnNldCgpLmNhbGNWYWx1ZShib3JkZXJC
b3hSZWN0KCkuaGVpZ2h0KCkpOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGVkUmVj
dChjb25zdCBJbnRSZWN0JiByKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3Rl
ZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmJv
eFJlZmxlY3QoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIAotICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm94UmVjdCgpOwotICAgIElu
dFJlY3QgcmVzdWx0ID0gcjsKKyAgICBMYXlvdXRSZWN0IGJveCA9IGJvcmRlckJveFJlY3QoKTsK
KyAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IHI7CiAgICAgc3dpdGNoIChzdHlsZSgpLT5ib3hSZWZs
ZWN0KCktPmRpcmVjdGlvbigpKSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgogICAg
ICAgICAgICAgcmVzdWx0LnNldFkoYm94Lm1heFkoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChi
b3gubWF4WSgpIC0gci5tYXhZKCkpKTsKQEAgLTU4NCwxMiArNTg0LDEyIEBAIGJvb2wgUmVuZGVy
Qm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGIKICAgICAgICAgJiYgKHN0eWxlKCktPm92ZXJm
bG93WCgpID09IE9TQ1JPTEwgfHwgc3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT0FVVE8pOwogfQog
Ci1pbnQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKK0xheW91dFVu
aXQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKIHsKICAgICByZXR1
cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpIDogMDsKIH0KIAotaW50IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFy
U2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KQEAg
LTczOCwxNCArNzM4LDE0IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlQ29udGVudEJv
eEwKIHsKICAgICBpZiAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWCkKICAgICAg
ICAgd2lkdGggLT0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwotICAgIHJldHVybiBt
YXgoMCwgd2lkdGgpOworICAgIHJldHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgd2lkdGgpOwogfQog
CiBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KExh
eW91dFVuaXQgaGVpZ2h0KSBjb25zdAogewogICAgIGlmIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9
PSBCT1JERVJfQk9YKQogICAgICAgICBoZWlnaHQgLT0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxI
ZWlnaHQoKTsKLSAgICByZXR1cm4gbWF4KDAsIGhlaWdodCk7CisgICAgcmV0dXJuIG1heDxMYXlv
dXRVbml0PigwLCBoZWlnaHQpOwogfQogCiAvLyBIaXQgVGVzdGluZwpAQCAtOTY5LDEzICs5Njks
MTMgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50TWFza0ltYWdlcyhjb25zdCBQYQogICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotSW50UmVjdCBS
ZW5kZXJCb3g6Om1hc2tDbGlwUmVjdCgpCitMYXlvdXRSZWN0IFJlbmRlckJveDo6bWFza0NsaXBS
ZWN0KCkKIHsKLSAgICBJbnRSZWN0IGJib3ggPSBib3JkZXJCb3hSZWN0KCk7CisgICAgTGF5b3V0
UmVjdCBiYm94ID0gYm9yZGVyQm94UmVjdCgpOwogICAgIGlmIChzdHlsZSgpLT5tYXNrQm94SW1h
Z2UoKS5pbWFnZSgpKQogICAgICAgICByZXR1cm4gYmJveDsKICAgICAKLSAgICBJbnRSZWN0IHJl
c3VsdDsKKyAgICBMYXlvdXRSZWN0IHJlc3VsdDsKICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciog
bWFza0xheWVyID0gc3R5bGUoKS0+bWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9
IG1hc2tMYXllci0+bmV4dCgpKSB7CiAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkpIHsK
ICAgICAgICAgICAgIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5IGdlb21ldHJ5OwpAQCAtOTgzLDcg
Kzk4Myw3IEBAIEludFJlY3QgUmVuZGVyQm94OjptYXNrQ2xpcFJlY3QoKQogICAgICAgICAgICAg
cmVzdWx0LnVuaXRlKGdlb21ldHJ5LmRlc3RSZWN0KCkpOwogICAgICAgICB9CiAgICAgfQotICAg
IHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGVuY2xvc2luZ0xheW91dFJlY3QocmVzdWx0KTsK
IH0KIAogdm9pZCBSZW5kZXJCb3g6OnBhaW50RmlsbExheWVycyhjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgQ29sb3ImIGMsIGNvbnN0IEZpbGxMYXllciogZmlsbExheWVyLCBjb25z
dCBMYXlvdXRSZWN0JiByZWN0LApAQCAtMTAzOCw3ICsxMDM4LDcgQEAgdm9pZCBSZW5kZXJCb3g6
OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZwogCiBib29sIFJlbmRlckJveDo6cmVwYWludExheWVy
UmVjdHNGb3JJbWFnZShXcmFwcGVkSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IEZpbGxMYXllciogbGF5
ZXJzLCBib29sIGRyYXdpbmdCYWNrZ3JvdW5kKQogewotICAgIEludFJlY3QgcmVuZGVyZXJSZWN0
OworICAgIExheW91dFJlY3QgcmVuZGVyZXJSZWN0OwogICAgIFJlbmRlckJveCogbGF5ZXJSZW5k
ZXJlciA9IDA7CiAKICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyTGF5ZXIgPSBsYXllcnM7
IGN1ckxheWVyOyBjdXJMYXllciA9IGN1ckxheWVyLT5uZXh0KCkpIHsKQEAgLTEwNTAsOCArMTA1
MCw4IEBAIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWcKICAgICAgICAg
ICAgICAgICBpZiAoZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
IGxheWVyUmVuZGVyZXIgPSB2aWV3KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaW50IHJ3Owot
ICAgICAgICAgICAgICAgICAgICBpbnQgcmg7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgcnc7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcmg7CiAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9SZW5kZXJWaWV3KGxheWVyUmVu
ZGVyZXIpLT5mcmFtZVZpZXcoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcncgPSBmcmFt
ZVZpZXctPmNvbnRlbnRzV2lkdGgoKTsKQEAgLTEwNjAsNyArMTA2MCw3IEBAIGJvb2wgUmVuZGVy
Qm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWcKICAgICAgICAgICAgICAgICAgICAgICAgIHJ3
ID0gbGF5ZXJSZW5kZXJlci0+d2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJoID0g
bGF5ZXJSZW5kZXJlci0+aGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgcmVuZGVyZXJSZWN0ID0gSW50UmVjdCgtbGF5ZXJSZW5kZXJlci0+bWFyZ2lu
TGVmdCgpLAorICAgICAgICAgICAgICAgICAgICByZW5kZXJlclJlY3QgPSBMYXlvdXRSZWN0KC1s
YXllclJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAtbGF5
ZXJSZW5kZXJlci0+bWFyZ2luVG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXgobGF5
ZXJSZW5kZXJlci0+d2lkdGgoKSArIGxheWVyUmVuZGVyZXItPm1hcmdpbkxlZnQoKSArIGxheWVy
UmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBs
YXllclJlbmRlcmVyLT5ib3JkZXJSaWdodCgpLCBydyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXgobGF5ZXJSZW5kZXJlci0+aGVpZ2h0KCkgKyBsYXllclJlbmRlcmVyLT5tYXJnaW5Ub3Ao
KSArIGxheWVyUmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpICsgbGF5ZXJSZW5kZXJlci0+Ym9yZGVy
VG9wKCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJCb3R0b20oKSwgcmgpKTsKQEAgLTExMjYsNyAr
MTEyNiw3IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKFBhaW50SW4KICAgICBJ
bnRSZWN0IGNsaXBSZWN0KGlzQ29udHJvbENsaXAgPyBjb250cm9sQ2xpcFJlY3QoYWNjdW11bGF0
ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkpOwogICAgIHBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlclJhZGl1
cygpKQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHN0eWxl
KCktPmdldFJvdW5kZWRCb3JkZXJGb3IoSW50UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgp
KSkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHN0eWxl
KCktPmdldFJvdW5kZWRCb3JkZXJGb3IoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6
ZSgpKSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTExNDQsMjUgKzExNDQsMjUgQEAgdm9pZCBSZW5kZXJCb3g6OnBvcENv
bnRlbnRzQ2xpcChQYWludEluZgogICAgICAgICBwYWludEluZm8ucGhhc2UgPSBvcmlnaW5hbFBo
YXNlOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBJbnRQ
b2ludCYgbG9jYXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkK
K0xheW91dFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50
JiBsb2NhdGlvbiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KQogewog
ICAgIC8vIEZJWE1FOiBXaGVuIG92ZXJmbG93LWNsaXAgKENTUzMpIGlzIGltcGxlbWVudGVkLCB3
ZSdsbCBvYnRhaW4gdGhlIHByb3BlcnR5CiAgICAgLy8gaGVyZS4KLSAgICBJbnRSZWN0IGNsaXBS
ZWN0KGxvY2F0aW9uICsgSW50U2l6ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSwKLSAgICAg
ICAgc2l6ZSgpIC0gSW50U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJU
b3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdChsb2NhdGlv
biArIExheW91dFNpemUoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSksCisgICAgICAgIHNpemUo
KSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkg
KyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYg
d2UgaGF2ZSB0aGVtLgogICAgIGlmIChsYXllcigpKQogICAgICAgICBjbGlwUmVjdC5jb250cmFj
dChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxheWVyKCktPmhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CiAKLSAgICByZXR1cm4gY2xpcFJl
Y3Q7CisgICAgcmV0dXJuIGVuY2xvc2luZ0xheW91dFJlY3QoY2xpcFJlY3QpOwogfQogCi1JbnRS
ZWN0IFJlbmRlckJveDo6Y2xpcFJlY3QoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQorTGF5b3V0
UmVjdCBSZW5kZXJCb3g6OmNsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbikKIHsK
LSAgICBJbnRSZWN0IGNsaXBSZWN0KGxvY2F0aW9uLCBzaXplKCkpOworICAgIExheW91dFJlY3Qg
Y2xpcFJlY3QobG9jYXRpb24sIHNpemUoKSk7CiAgICAgaWYgKCFzdHlsZSgpLT5jbGlwTGVmdCgp
LmlzQXV0bygpKSB7Ci0gICAgICAgIGludCBjID0gc3R5bGUoKS0+Y2xpcExlZnQoKS5jYWxjVmFs
dWUod2lkdGgoKSk7CisgICAgICAgIExheW91dFVuaXQgYyA9IHN0eWxlKCktPmNsaXBMZWZ0KCku
Y2FsY1ZhbHVlKHdpZHRoKCkpOwogICAgICAgICBjbGlwUmVjdC5tb3ZlKGMsIDApOwogICAgICAg
ICBjbGlwUmVjdC5jb250cmFjdChjLCAwKTsKICAgICB9CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBJ
bnRSZWN0IFJlbmRlckJveDo6Y2xpcFJlY3QoY29uc3QgSW50UG9pCiAgICAgICAgIGNsaXBSZWN0
LmNvbnRyYWN0KHdpZHRoKCkgLSBzdHlsZSgpLT5jbGlwUmlnaHQoKS5jYWxjVmFsdWUod2lkdGgo
KSksIDApOwogCiAgICAgaWYgKCFzdHlsZSgpLT5jbGlwVG9wKCkuaXNBdXRvKCkpIHsKLSAgICAg
ICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjID0gc3R5bGUoKS0+Y2xpcFRvcCgpLmNhbGNWYWx1ZShoZWlnaHQoKSk7
CiAgICAgICAgIGNsaXBSZWN0Lm1vdmUoMCwgYyk7CiAgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0
KDAsIGMpOwogICAgIH0KQEAgLTExNzksMTAgKzExNzksMTAgQEAgSW50UmVjdCBSZW5kZXJCb3g6
OmNsaXBSZWN0KGNvbnN0IEludFBvaQogICAgIGlmICghc3R5bGUoKS0+Y2xpcEJvdHRvbSgpLmlz
QXV0bygpKQogICAgICAgICBjbGlwUmVjdC5jb250cmFjdCgwLCBoZWlnaHQoKSAtIHN0eWxlKCkt
PmNsaXBCb3R0b20oKS5jYWxjVmFsdWUoaGVpZ2h0KCkpKTsKIAotICAgIHJldHVybiBjbGlwUmVj
dDsKKyAgICByZXR1cm4gZW5jbG9zaW5nTGF5b3V0UmVjdChjbGlwUmVjdCk7CiB9CiAKLWludCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdAor
TGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRl
bnQoKSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkpCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBpbnQg
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkCiAgICAgcmV0dXJuIGNiLT5hdmFp
bGFibGVMb2dpY2FsV2lkdGgoKTsKIH0KIAotaW50IFJlbmRlckJveDo6cGVycGVuZGljdWxhckNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OnBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAg
ICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBSZW5kZXJTdHlsZSog
Y29udGFpbmluZ0Jsb2NrU3R5bGUgPSBjYi0+c3R5bGUoKTsKQEAgLTEzNjYsNyArMTM2Niw3IEBA
IHZvaWQgUmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3goSW5saW5lQm8KICAgICAgICAgYm94LT5y
ZW1vdmUoKTsKICAgICAgICAgYm94LT5kZXN0cm95KHJlbmRlckFyZW5hKCkpOwogICAgIH0gZWxz
ZSBpZiAoaXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIHNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2lu
dChGbG9hdFBvaW50KGJveC0+eCgpLCBib3gtPnkoKSkpKTsKKyAgICAgICAgc2V0TG9jYXRpb24o
cm91bmRlZExheW91dFBvaW50KEZsb2F0UG9pbnQoYm94LT54KCksIGJveC0+eSgpKSkpOwogICAg
ICAgICBtX2lubGluZUJveFdyYXBwZXIgPSBib3g7CiAgICAgfQogfQpAQCAtMTM4MSwxMiArMTM4
MSwxMiBAQCB2b2lkIFJlbmRlckJveDo6ZGVsZXRlTGluZUJveFdyYXBwZXIoKQogICAgIH0KIH0K
IAotSW50UmVjdCBSZW5kZXJCb3g6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdAorTGF5b3V0UmVjdCBSZW5k
ZXJCb3g6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyKSBjb25zdAogewogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSAmJiAhZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkK
LSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsK
IAotICAgIEludFJlY3QgciA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOworICAgIExheW91dFJlY3Qg
ciA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogCiAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsK
ICAgICBpZiAodikgewpAQCAtMTQwOSwxMCArMTQwOSwxMCBAQCBJbnRSZWN0IFJlbmRlckJveDo6
Y2xpcHBlZE92ZXJmbG93UmVjdEZvCiAgICAgfQogICAgIAogICAgIGNvbXB1dGVSZWN0Rm9yUmVw
YWludChyZXBhaW50Q29udGFpbmVyLCByKTsKLSAgICByZXR1cm4gcjsKKyAgICByZXR1cm4gZW5j
bG9zaW5nTGF5b3V0UmVjdChyKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYg
cmVjdCwgYm9vbCBmaXhlZCkgY29uc3QKK3ZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3Qm
IHJlY3QsIGJvb2wgZml4ZWQpIGNvbnN0CiB7CiAgICAgLy8gVGhlIHJlY3Qgd2UgY29tcHV0ZSBh
dCBlYWNoIHN0ZXAgaXMgc2hpZnRlZCBieSBvdXIgeC95IG9mZnNldCBpbiB0aGUgcGFyZW50IGNv
bnRhaW5lcidzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgLy8gT25seSB3aGVuIHdlIGNyb3NzIGEg
d3JpdGluZyBtb2RlIGJvdW5kYXJ5IHdpbGwgd2UgaGF2ZSB0byBwb3NzaWJseSBmbGlwRm9yV3Jp
dGluZ01vZGUgKHRvIGNvbnZlcnQgaW50byBhIG1vcmUgYXBwcm9wcmlhdGUKQEAgLTE0NTcsNyAr
MTQ1Nyw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmUKIAogICAg
IGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgZmxp
cEZvcldyaXRpbmdNb2RlKHJlY3QpOwotICAgIEludFBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0
aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKICAgICB0
b3BMZWZ0Lm1vdmUoeCgpLCB5KCkpOwogCiAgICAgRVBvc2l0aW9uIHBvc2l0aW9uID0gc3R5bGUo
KS0+cG9zaXRpb24oKTsKQEAgLTE0ODUsNyArMTQ4NSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUmVjdEZvclJlcGFpbnQoUmUKICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBwb3NpdGlv
biAhPSBBYnNvbHV0ZVBvc2l0aW9uICYmIHBvc2l0aW9uICE9IEZpeGVkUG9zaXRpb24pIHsKICAg
ICAgICAgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhvKTsKICAgICAgICAgaWYgKGNi
LT5oYXNDb2x1bW5zKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3QodG9wTGVm
dCwgcmVjdC5zaXplKCkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCh0b3BM
ZWZ0LCByZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMo
cmVwYWludFJlY3QpOwogICAgICAgICAgICAgdG9wTGVmdCA9IHJlcGFpbnRSZWN0LmxvY2F0aW9u
KCk7CiAgICAgICAgICAgICByZWN0ID0gcmVwYWludFJlY3Q7CkBAIC0xNTAyLDggKzE1MDIsOCBA
QCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAgICAgICAgIC8vIGFu
eXdheSBpZiBpdHMgc2l6ZSBkb2VzIGNoYW5nZS4KICAgICAgICAgdG9wTGVmdCAtPSBjb250YWlu
ZXJCb3gtPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOyAvLyBGb3Igb3ZlcmZsb3c6
YXV0by9zY3JvbGwvaGlkZGVuLgogCi0gICAgICAgIEludFJlY3QgcmVwYWludFJlY3QodG9wTGVm
dCwgcmVjdC5zaXplKCkpOwotICAgICAgICBJbnRSZWN0IGJveFJlY3QoSW50UG9pbnQoKSwgY29u
dGFpbmVyQm94LT5sYXllcigpLT5zaXplKCkpOworICAgICAgICBMYXlvdXRSZWN0IHJlcGFpbnRS
ZWN0KHRvcExlZnQsIHJlY3Quc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBib3hSZWN0KExh
eW91dFBvaW50KCksIGNvbnRhaW5lckJveC0+bGF5ZXIoKS0+c2l6ZSgpKTsKICAgICAgICAgcmVj
dCA9IGludGVyc2VjdGlvbihyZXBhaW50UmVjdCwgYm94UmVjdCk7CiAgICAgICAgIGlmIChyZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MTIsNyArMTUxMiw3IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmUKIAogICAgIGlmIChjb250YWlu
ZXJTa2lwcGVkKSB7CiAgICAgICAgIC8vIElmIHRoZSByZXBhaW50Q29udGFpbmVyIGlzIGJlbG93
IG8sIHRoZW4gd2UgbmVlZCB0byBtYXAgdGhlIHJlY3QgaW50byByZXBhaW50Q29udGFpbmVyJ3Mg
Y29vcmRpbmF0ZXMuCi0gICAgICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0gcmVwYWludENv
bnRhaW5lci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKG8pOworICAgICAgICBMYXlvdXRT
aXplIGNvbnRhaW5lck9mZnNldCA9IHJlcGFpbnRDb250YWluZXItPm9mZnNldEZyb21BbmNlc3Rv
ckNvbnRhaW5lcihvKTsKICAgICAgICAgcmVjdC5tb3ZlKC1jb250YWluZXJPZmZzZXQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU3Nyw5ICsxNTc3LDkgQEAgdm9pZCBSZW5kZXJCb3g6
OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQogICAgIExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndGggPSAo
dHJlYXRBc1JlcGxhY2VkKSA/IExlbmd0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwg
Rml4ZWQpIDogc3R5bGUoKS0+bG9naWNhbFdpZHRoKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2Ig
PSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpbnQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gbWF4
KDAsIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSk7CisgICAgTGF5b3V0
VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgY29udGFpbmlu
Z0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpKTsKICAgICBib29sIGhhc1BlcnBlbmRpY3Vs
YXJDb250YWluaW5nQmxvY2sgPSBjYi0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpOwotICAgIGludCBjb250YWluZXJXaWR0aEluSW5saW5lRGly
ZWN0aW9uID0gY29udGFpbmVyTG9naWNhbFdpZHRoOworICAgIExheW91dFVuaXQgY29udGFpbmVy
V2lkdGhJbklubGluZURpcmVjdGlvbiA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKICAgICBpZiAo
aGFzUGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9jaykKICAgICAgICAgY29udGFpbmVyV2lkdGhJ
bklubGluZURpcmVjdGlvbiA9IHBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVp
Z2h0KCk7CiAgICAgCkBAIC0xNTg4LDcgKzE1ODgsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIHNldE1hcmdpblN0YXJ0KHN0eWxlKCktPm1hcmdpblN0
YXJ0KCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkpOwogICAgICAgICBzZXRN
YXJnaW5FbmQoc3R5bGUoKS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2lj
YWxXaWR0aCkpOwogICAgICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQotICAgICAgICAgICAgc2V0
TG9naWNhbFdpZHRoKG1heChsb2dpY2FsV2lkdGhMZW5ndGgudmFsdWUoKSArIGJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsV2lkdGgoKSwgbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpKTsKKyAgICAg
ICAgICAgIHNldExvZ2ljYWxXaWR0aChtYXg8TGF5b3V0VW5pdD4obG9naWNhbFdpZHRoTGVuZ3Ro
LmNhbGNGbG9hdFZhbHVlKDApICsgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpLCBtaW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
NjAxLDcgKzE2MDEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAK
ICAgICAgICAgLy8gQ2FsY3VsYXRlIE1heExvZ2ljYWxXaWR0aAogICAgICAgICBpZiAoIXN0eWxl
KCktPmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIGludCBt
YXhMb2dpY2FsV2lkdGggPSBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTWF4TG9naWNhbFdpZHRo
LCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uKTsKKyAgICAgICAgICAgIExheW91dFVu
aXQgbWF4TG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKE1heExvZ2ljYWxX
aWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7CiAgICAgICAgICAgICBpZiAo
bG9naWNhbFdpZHRoKCkgPiBtYXhMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgICAgICBzZXRM
b2dpY2FsV2lkdGgobWF4TG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICBsb2dpY2FsV2lk
dGhMZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKTsKQEAgLTE2MDksNyArMTYwOSw3
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIENhbGN1bGF0ZSBNaW5Mb2dpY2FsV2lkdGgKLSAgICAgICAgaW50IG1pbkxvZ2lj
YWxXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhNaW5Mb2dpY2FsV2lkdGgsIGNvbnRh
aW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24pOworICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2lj
YWxXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhNaW5Mb2dpY2FsV2lkdGgsIGNvbnRh
aW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24pOwogICAgICAgICBpZiAobG9naWNhbFdpZHRoKCkg
PCBtaW5Mb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIHNldExvZ2ljYWxXaWR0aChtaW5Mb2dp
Y2FsV2lkdGgpOwogICAgICAgICAgICAgbG9naWNhbFdpZHRoTGVuZ3RoID0gc3R5bGUoKS0+bG9n
aWNhbE1pbldpZHRoKCk7CkBAIC0xNzIwLDcgKzE3MjAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29t
cHV0ZUlubGluZURpcmVjdGlvbk1hCiAgICAgLy8gQ2FzZSBPbmU6IFRoZSBvYmplY3QgaXMgYmVp
bmcgY2VudGVyZWQgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBhdmFpbGFibGUgbG9naWNhbCB3
aWR0aC4KICAgICBpZiAoKG1hcmdpblN0YXJ0TGVuZ3RoLmlzQXV0bygpICYmIG1hcmdpbkVuZExl
bmd0aC5pc0F1dG8oKSAmJiBjaGlsZFdpZHRoIDwgY29udGFpbmVyV2lkdGgpCiAgICAgICAgIHx8
ICghbWFyZ2luU3RhcnRMZW5ndGguaXNBdXRvKCkgJiYgIW1hcmdpbkVuZExlbmd0aC5pc0F1dG8o
KSAmJiBjb250YWluaW5nQmxvY2stPnN0eWxlKCktPnRleHRBbGlnbigpID09IFdFQktJVF9DRU5U
RVIpKSB7Ci0gICAgICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luU3RhcnRGb3JDaGlsZCh0
aGlzLCBtYXgoMCwgKGNvbnRhaW5lcldpZHRoIC0gY2hpbGRXaWR0aCkgLyAyKSk7CisgICAgICAg
IGNvbnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luU3RhcnRGb3JDaGlsZCh0aGlzLCBtYXg8TGF5b3V0
VW5pdD4oMCwgKGNvbnRhaW5lcldpZHRoIC0gY2hpbGRXaWR0aCkgLyAyKSk7CiAgICAgICAgIGNv
bnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luRW5kRm9yQ2hpbGQodGhpcywgY29udGFpbmVyV2lkdGgg
LSBjaGlsZFdpZHRoIC0gY29udGFpbmluZ0Jsb2NrLT5tYXJnaW5TdGFydEZvckNoaWxkKHRoaXMp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCkBAIC0xODA1LDYgKzE4MDUsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogICAgICAgICBMYXlvdXRVbml0IGhlaWdo
dFJlc3VsdDsKICAgICAgICAgaWYgKGNoZWNrTWluTWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICBo
ZWlnaHRSZXN1bHQgPSBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxI
ZWlnaHQoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIDwgMCBvciByb3VnaGx5RXF1YWxz
IHdoZW4gd2UgbW92ZSB0byBmbG9hdCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjE0OAogICAgICAgICAgICAgaWYgKGhlaWdodFJlc3VsdCA9PSAtMSkKICAg
ICAgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgICAg
ICBMYXlvdXRVbml0IG1pbkggPSBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxv
Z2ljYWxNaW5IZWlnaHQoKSk7IC8vIExlYXZlIGFzIC0xIGlmIHVuc2V0LgpAQCAtMTg2MCw5ICsx
ODYxLDEwIEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWcKICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAtMTsKICAgICBpZiAoIWguaXNBdXRvKCkpIHsKICAg
ICAgICAgaWYgKGguaXNGaXhlZCgpKQotICAgICAgICAgICAgbG9naWNhbEhlaWdodCA9IGgudmFs
dWUoKTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBoLmNhbGNGbG9hdFZhbHVlKDApOwog
ICAgICAgICBlbHNlIGlmIChoLmlzUGVyY2VudCgpKQogICAgICAgICAgICAgbG9naWNhbEhlaWdo
dCA9IGNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChoKTsKKyAgICAgICAgLy8gRklYTUU6
IFVzZSA8IDAgb3Igcm91Z2hseUVxdWFscyB3aGVuIHdlIG1vdmUgdG8gZmxvYXQsIHNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICAgICAgaWYgKGxv
Z2ljYWxIZWlnaHQgIT0gLTEpIHsKICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBjb21wdXRl
Qm9yZGVyQm94TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIHJldHVy
biBsb2dpY2FsSGVpZ2h0OwpAQCAtMTkyNyw2ICsxOTI5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
b3g6OmNvbXB1dGVQZXJjZW50YWdlTAogICAgIGVsc2UgaWYgKGNiLT5zdHlsZSgpLT5sb2dpY2Fs
SGVpZ2h0KCkuaXNQZXJjZW50KCkgJiYgIWlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQp
IHsKICAgICAgICAgLy8gV2UgbmVlZCB0byByZWN1ciBhbmQgY29tcHV0ZSB0aGUgcGVyY2VudGFn
ZSBoZWlnaHQgZm9yIG91ciBjb250YWluaW5nIGJsb2NrLgogICAgICAgICByZXN1bHQgPSBjYi0+
Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNiLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0
KCkpOworICAgICAgICAvLyBGSVhNRTogVXNlIDwgMCBvciByb3VnaGx5RXF1YWxzIHdoZW4gd2Ug
bW92ZSB0byBmbG9hdCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NjE0OAogICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQogICAgICAgICAgICAgcmVzdWx0ID0g
Y2ItPmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChyZXN1bHQpOwogICAgIH0gZWxzZSBp
ZiAoY2ItPmlzUmVuZGVyVmlldygpIHx8IChjYi0+aXNCb2R5KCkgJiYgZG9jdW1lbnQoKS0+aW5R
dWlya3NNb2RlKCkpIHx8IGlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKQEAgLTE5
NDEsNiArMTk0NCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUwK
ICAgICAgICAgLy8gYWx3YXlzLiAgTm90ZSB3ZSBjb3VsZCBvbmx5IGhpdCB0aGlzIGNhc2UgYnkg
cmVjdXJyaW5nIGludG8gY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0IG9uIGEgcG9zaXRp
b25lZCBjb250YWluaW5nIGJsb2NrLgogICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsSGVpZ2h0KGNiLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KCkpOwogCisgICAg
Ly8gRklYTUU6IFVzZSA8IDAgb3Igcm91Z2hseUVxdWFscyB3aGVuIHdlIG1vdmUgdG8gZmxvYXQs
IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICBp
ZiAocmVzdWx0ICE9IC0xKSB7CiAgICAgICAgIHJlc3VsdCA9IGhlaWdodC5jYWxjVmFsdWUocmVz
dWx0KTsKICAgICAgICAgaWYgKGluY2x1ZGVCb3JkZXJQYWRkaW5nKSB7CkBAIC0yMTA5LDcgKzIx
MTMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyCiAKICAgICAv
LyBNYXJnaW5zIGFyZSBjYWxjdWxhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgbG9naWNhbCB3aWR0
aCBvZgogICAgIC8vIHRoZSBjb250YWluaW5nIGJsb2NrICg4LjMpCi0gICAgaW50IGN3ID0gY29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOworICAgIExheW91dFVuaXQgY3cg
PSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCk7CiAKICAgICBSZW5kZXJT
dHlsZSogY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBjb250YWluaW5nQmxvY2stPnN0eWxlKCk7CiAg
ICAgY29udGFpbmluZ0Jsb2NrLT5zZXRNYXJnaW5CZWZvcmVGb3JDaGlsZCh0aGlzLCBzdHlsZSgp
LT5tYXJnaW5CZWZvcmVVc2luZyhjb250YWluaW5nQmxvY2tTdHlsZSkuY2FsY01pblZhbHVlKGN3
KSk7CkBAIC0yMTM0LDggKzIxMzgsOCBAQCBpbnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkCiAgICAgaWYgKCFmaXJzdCB8fCAhbGFzdCkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBpbnQgZnJvbUxlZnQ7Ci0gICAgaW50IGZyb21SaWdodDsKKyAgICBMYXlvdXRVbml0IGZy
b21MZWZ0OworICAgIExheW91dFVuaXQgZnJvbVJpZ2h0OwogICAgIGlmIChjb250YWluaW5nQmxv
Y2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICBmcm9tTGVm
dCA9IGZpcnN0LT5sb2dpY2FsTGVmdCgpICsgZmlyc3QtPmJvcmRlckxvZ2ljYWxMZWZ0KCk7CiAg
ICAgICAgIGZyb21SaWdodCA9IGxhc3QtPmxvZ2ljYWxMZWZ0KCkgKyBsYXN0LT5sb2dpY2FsV2lk
dGgoKSAtIGxhc3QtPmJvcmRlckxvZ2ljYWxSaWdodCgpOwpAQCAtMjE0NCw3ICsyMTQ4LDcgQEAg
aW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZAogICAgICAgICBmcm9tTGVm
dCA9IGxhc3QtPmxvZ2ljYWxMZWZ0KCkgKyBsYXN0LT5ib3JkZXJMb2dpY2FsTGVmdCgpOwogICAg
IH0KIAotICAgIHJldHVybiBtYXgoMCwgKGZyb21SaWdodCAtIGZyb21MZWZ0KSk7CisgICAgcmV0
dXJuIG1heDxMYXlvdXRVbml0PigwLCBmcm9tUmlnaHQgLSBmcm9tTGVmdCk7CiB9CiAKIGludCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnN0
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2ssIGJvb2wgY2hlY2tGb3JQZXJw
ZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0CkBAIC0yMTY1LDggKzIxNjksOCBAQCBpbnQgUmVu
ZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpCiAgICAgaWYgKCFmaXJzdCB8fCAhbGFz
dCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgaGVpZ2h0UmVzdWx0OwotICAgIEludFJl
Y3QgYm91bmRpbmdCb3ggPSBmbG93LT5saW5lc0JvdW5kaW5nQm94KCk7CisgICAgTGF5b3V0VW5p
dCBoZWlnaHRSZXN1bHQ7CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGZsb3ctPmxpbmVz
Qm91bmRpbmdCb3goKTsKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQogICAgICAgICBoZWlnaHRSZXN1bHQgPSBib3VuZGluZ0JveC5oZWlnaHQoKTsK
ICAgICBlbHNlCkBAIC0yMTgzLDcgKzIxODcsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlSW5saW5l
U3RhdGljRGlzdGFuY2UoCiAKICAgICAvLyBGSVhNRTogVGhlIHN0YXRpYyBkaXN0YW5jZSBjb21w
dXRhdGlvbiBoYXMgbm90IGJlZW4gcGF0Y2hlZCBmb3IgbWl4ZWQgd3JpdGluZyBtb2RlcyB5ZXQu
CiAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBMVFIpIHsKLSAgICAgICAgaW50IHN0YXRp
Y1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCkgLSBjb250
YWluZXJCbG9jay0+Ym9yZGVyTG9naWNhbExlZnQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGF0
aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpIC0gY29u
dGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyID0gY2hpbGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxv
Y2s7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewogICAgICAgICAgICAgaWYgKGN1cnItPmlz
Qm94KCkpCiAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gdG9SZW5kZXJCb3goY3Vy
ciktPmxvZ2ljYWxMZWZ0KCk7CkBAIC0yMTkxLDcgKzIxOTUsNyBAQCBzdGF0aWMgdm9pZCBjb21w
dXRlSW5saW5lU3RhdGljRGlzdGFuY2UoCiAgICAgICAgIGxvZ2ljYWxMZWZ0LnNldFZhbHVlKEZp
eGVkLCBzdGF0aWNQb3NpdGlvbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVuZGVyQm94KiBl
bmNsb3NpbmdCb3ggPSBjaGlsZC0+cGFyZW50KCktPmVuY2xvc2luZ0JveCgpOwotICAgICAgICBp
bnQgc3RhdGljUG9zaXRpb24gPSBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljSW5saW5lUG9zaXRpb24o
KSArIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMb2dpY2Fs
UmlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXll
cigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpICsgY29udGFpbmVyTG9naWNhbFdpZHRoICsgY29u
dGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxSaWdodCgpOwogICAgICAgICBzdGF0aWNQb3NpdGlv
biAtPSBlbmNsb3NpbmdCb3gtPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBmb3IgKFJlbmRlck9i
amVjdCogY3VyciA9IGVuY2xvc2luZ0JveDsgY3VyciAmJiBjdXJyICE9IGNvbnRhaW5lckJsb2Nr
OyBjdXJyID0gY3Vyci0+Y29udGFpbmVyKCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc0Jv
eCgpKQpAQCAtMjIzNywxOCArMjI0MSwxOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsCiAgICAgLy8gcmVsYXRpdmUgcG9zaXRpb25lZCBpbmxpbmUuCiAgICAgY29u
c3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChjb250YWluZXIoKSk7CiAgICAgCi0gICAgY29uc3QgaW50IGNvbnRhaW5lckxvZ2lj
YWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFp
bmVyQmxvY2spOworICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoID0g
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7
CiAKICAgICAvLyBUbyBtYXRjaCBXaW5JRSwgaW4gcXVpcmtzIG1vZGUgdXNlIHRoZSBwYXJlbnQn
cyAnZGlyZWN0aW9uJyBwcm9wZXJ0eQogICAgIC8vIGluc3RlYWQgb2YgdGhlIHRoZSBjb250YWlu
ZXIgYmxvY2sncy4KICAgICBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IChkb2N1
bWVudCgpLT5pblF1aXJrc01vZGUoKSkgPyBwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkg
OiBjb250YWluZXJCbG9jay0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7CiAKICAgICBib29sIGlzSG9y
aXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgY29uc3QgaW50IGJvcmRl
cnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKKyAgICBjb25z
dCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2Fs
V2lkdGgoKTsKICAgICBjb25zdCBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQgPSBpc0hvcml6b250
YWwgPyBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkgOiBzdHlsZSgpLT5tYXJnaW5Ub3AoKTsKICAgICBj
b25zdCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0ID0gaXNIb3Jpem9udGFsID8gc3R5bGUoKS0+
bWFyZ2luUmlnaHQoKSA6IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpOwotICAgIGludCYgbWFyZ2lu
TG9naWNhbExlZnRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luTGVmdCA6IG1fbWFyZ2lu
VG9wOwotICAgIGludCYgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXMgPSBpc0hvcml6b250YWwgPyBt
X21hcmdpblJpZ2h0IDogbV9tYXJnaW5Cb3R0b207CisgICAgTGF5b3V0VW5pdCYgbWFyZ2luTG9n
aWNhbExlZnRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luTGVmdCA6IG1fbWFyZ2luVG9w
OworICAgIExheW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxSaWdodEFsaWFzID0gaXNIb3Jpem9udGFs
ID8gbV9tYXJnaW5SaWdodCA6IG1fbWFyZ2luQm90dG9tOwogCiAgICAgTGVuZ3RoIGxvZ2ljYWxM
ZWZ0ID0gc3R5bGUoKS0+bG9naWNhbExlZnQoKTsKICAgICBMZW5ndGggbG9naWNhbFJpZ2h0ID0g
c3R5bGUoKS0+bG9naWNhbFJpZ2h0KCk7CkBAIC0yMjgyLDggKzIyODYsOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgY29tcHV0ZUlubGluZVN0YXRpY0Rp
c3RhbmNlKGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQsIHRoaXMsIGNvbnRhaW5lckJsb2NrLCBj
b250YWluZXJMb2dpY2FsV2lkdGgsIGNvbnRhaW5lckRpcmVjdGlvbik7CiAgICAgCiAgICAgLy8g
Q2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnd2lkdGgnIGNhc2UuCi0g
ICAgaW50IGxvZ2ljYWxXaWR0aFJlc3VsdDsKLSAgICBpbnQgbG9naWNhbExlZnRSZXN1bHQ7Cisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhSZXN1bHQ7CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdFJlc3VsdDsKICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxl
KCktPmxvZ2ljYWxXaWR0aCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9naWNhbFdp
ZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0LCBtYXJnaW5Mb2dpY2FsTGVmdCwgbWFy
Z2luTG9naWNhbFJpZ2h0LApAQCAtMjI5MywxMCArMjI5NywxMCBAQCB2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBl
cXVhdGlvbiB2YWx1ZXMgZm9yICdtYXgtd2lkdGgnIGNhc2UuCiAgICAgaWYgKCFzdHlsZSgpLT5s
b2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGludCBtYXhMb2dpY2Fs
V2lkdGg7Ci0gICAgICAgIGludCBtYXhNYXJnaW5Mb2dpY2FsTGVmdDsKLSAgICAgICAgaW50IG1h
eE1hcmdpbkxvZ2ljYWxSaWdodDsKLSAgICAgICAgaW50IG1heExvZ2ljYWxMZWZ0UG9zOworICAg
ICAgICBMYXlvdXRVbml0IG1heExvZ2ljYWxXaWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhN
YXJnaW5Mb2dpY2FsTGVmdDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhNYXJnaW5Mb2dpY2FsUmln
aHQ7CisgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbExlZnRQb3M7CiAKICAgICAgICAgY29t
cHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgo
KSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGgsIGJvcmRlcnNQ
bHVzUGFkZGluZywKQEAgLTIzMTMsMTAgKzIzMTcsMTAgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVQb3NpdGlvbmVkTG9naWNhbAogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRp
b24gdmFsdWVzIGZvciAnbWluLXdpZHRoJyBjYXNlLgogICAgIGlmICghc3R5bGUoKS0+bG9naWNh
bE1pbldpZHRoKCkuaXNaZXJvKCkpIHsKLSAgICAgICAgaW50IG1pbkxvZ2ljYWxXaWR0aDsKLSAg
ICAgICAgaW50IG1pbk1hcmdpbkxvZ2ljYWxMZWZ0OwotICAgICAgICBpbnQgbWluTWFyZ2luTG9n
aWNhbFJpZ2h0OwotICAgICAgICBpbnQgbWluTG9naWNhbExlZnRQb3M7CisgICAgICAgIExheW91
dFVuaXQgbWluTG9naWNhbFdpZHRoOworICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkxvZ2lj
YWxMZWZ0OworICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkxvZ2ljYWxSaWdodDsKKyAgICAg
ICAgTGF5b3V0VW5pdCBtaW5Mb2dpY2FsTGVmdFBvczsKIAogICAgICAgICBjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpLCBjb250YWlu
ZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5n
LApAQCAtMjM0NCw3ICsyMzQ4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVk
TG9naWNhbAogICAgIHNldExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgoKSArIGJvcmRlcnNQbHVz
UGFkZGluZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsTGVmdFBvc2l0aW9uZWRP
ZmZzZXQoaW50JiBsb2dpY2FsTGVmdFBvcywgY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgaW50IGxv
Z2ljYWxXaWR0aFZhbHVlLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxv
Y2ssIGludCBjb250YWluZXJMb2dpY2FsV2lkdGgpCitzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNh
bExlZnRQb3NpdGlvbmVkT2Zmc2V0KExheW91dFVuaXQmIGxvZ2ljYWxMZWZ0UG9zLCBjb25zdCBS
ZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aFZhbHVlLCBjb25zdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2ssIExheW91dFVuaXQgY29udGFpbmVyTG9n
aWNhbFdpZHRoKQogewogICAgIC8vIERlYWwgd2l0aCBkaWZmZXJpbmcgd3JpdGluZyBtb2RlcyBo
ZXJlLiAgT3VyIG9mZnNldCBuZWVkcyB0byBiZSBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIGNv
b3JkaW5hdGUgc3BhY2UuIElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZsaXBwZWQKICAgICAv
LyBhbG9uZyB0aGlzIGF4aXMsIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBjb29yZGluYXRlLiAg
VGhpcyBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgYm90aCBhIGZs
aXBwZWQgbW9kZSBhbmQgcGVycGVuZGljdWxhciB0byB1cy4KQEAgLTIzNTYsMTUgKzIzNjAsMTUg
QEAgc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZAogfQogCiB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhMZW5ndGggbG9naWNh
bFdpZHRoLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2ssIFRleHRE
aXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgaW50IGJv
cmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0
IGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExlbmd0aCBsb2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdodCwg
TGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsb2dp
Y2FsV2lkdGhWYWx1ZSwgaW50JiBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlLCBpbnQmIG1hcmdpbkxv
Z2ljYWxSaWdodFZhbHVlLCBpbnQmIGxvZ2ljYWxMZWZ0UG9zKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbFdpZHRo
VmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUsIExheW91dFVuaXQmIG1h
cmdpbkxvZ2ljYWxSaWdodFZhbHVlLCBMYXlvdXRVbml0JiBsb2dpY2FsTGVmdFBvcykKIHsKICAg
ICAvLyAnbGVmdCcgYW5kICdyaWdodCcgY2Fubm90IGJvdGggYmUgJ2F1dG8nIGJlY2F1c2Ugb25l
IHdvdWxkIG9mIGJlZW4KICAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBh
bHJlYWR5CiAgICAgQVNTRVJUKCEobG9naWNhbExlZnQuaXNBdXRvKCkgJiYgbG9naWNhbFJpZ2h0
LmlzQXV0bygpKSk7CiAKLSAgICBpbnQgbG9naWNhbExlZnRWYWx1ZSA9IDA7CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdFZhbHVlID0gMDsKIAogICAgIGJvb2wgbG9naWNhbFdpZHRoSXNBdXRv
ID0gbG9naWNhbFdpZHRoLmlzSW50cmluc2ljT3JBdXRvKCk7CiAgICAgYm9vbCBsb2dpY2FsTGVm
dElzQXV0byA9IGxvZ2ljYWxMZWZ0LmlzQXV0bygpOwpAQCAtMjM4OSw3ICsyMzkzLDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAgICBsb2dpY2FsTGVm
dFZhbHVlID0gbG9naWNhbExlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7CiAg
ICAgICAgIGxvZ2ljYWxXaWR0aFZhbHVlID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
bG9naWNhbFdpZHRoLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpKTsKIAotICAgICAg
ICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJMb2dpY2FsV2lkdGggLSAobG9n
aWNhbExlZnRWYWx1ZSArIGxvZ2ljYWxXaWR0aFZhbHVlICsgbG9naWNhbFJpZ2h0LmNhbGNWYWx1
ZShjb250YWluZXJMb2dpY2FsV2lkdGgpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKKyAgICAgICAg
Y29uc3QgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAt
IChsb2dpY2FsTGVmdFZhbHVlICsgbG9naWNhbFdpZHRoVmFsdWUgKyBsb2dpY2FsUmlnaHQuY2Fs
Y1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogCiAg
ICAgICAgIC8vIE1hcmdpbnMgYXJlIG5vdyB0aGUgb25seSB1bmtub3duCiAgICAgICAgIGlmICht
YXJnaW5Mb2dpY2FsTGVmdC5pc0F1dG8oKSAmJiBtYXJnaW5Mb2dpY2FsUmlnaHQuaXNBdXRvKCkp
IHsKQEAgLTI0NzAsMTggKzI0NzQsMTggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbAogICAgICAgICBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlID0gbWFyZ2luTG9naWNh
bExlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIG1hcmdp
bkxvZ2ljYWxSaWdodFZhbHVlID0gbWFyZ2luTG9naWNhbFJpZ2h0LmNhbGNNaW5WYWx1ZShjb250
YWluZXJMb2dpY2FsV2lkdGgpOwogCi0gICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9
IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtIChtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlICsgbWFyZ2lu
TG9naWNhbFJpZ2h0VmFsdWUgKyBib3JkZXJzUGx1c1BhZGRpbmcpOworICAgICAgICBjb25zdCBM
YXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKG1hcmdp
bkxvZ2ljYWxMZWZ0VmFsdWUgKyBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSArIGJvcmRlcnNQbHVz
UGFkZGluZyk7CiAKICAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgZmFzdGVyIHdheSB0byBm
aW5kIHRoZSBjb3JyZWN0IGNhc2U/CiAgICAgICAgIC8vIFVzZSBydWxlL2Nhc2UgdGhhdCBhcHBs
aWVzLgogICAgICAgICBpZiAobG9naWNhbExlZnRJc0F1dG8gJiYgbG9naWNhbFdpZHRoSXNBdXRv
ICYmICFsb2dpY2FsUmlnaHRJc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgMTogKHVzZSBz
aHJpbmstdG8tZml0IGZvciB3aWR0aCwgYW5kIHNvbHZlIG9mIGxlZnQpCi0gICAgICAgICAgICBp
bnQgbG9naWNhbFJpZ2h0VmFsdWUgPSBsb2dpY2FsUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZhbHVlID0g
bG9naWNhbFJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpOwogCiAgICAgICAg
ICAgICAvLyBGSVhNRTogd291bGQgaXQgYmUgYmV0dGVyIHRvIGhhdmUgc2hyaW5rLXRvLWZpdCBp
biBvbmUgc3RlcD8KLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwotICAgICAgICAgICAgaW50IHBy
ZWZlcnJlZE1pbldpZHRoID0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1
c1BhZGRpbmc7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVTcGFj
ZSAtIGxvZ2ljYWxSaWdodFZhbHVlOworICAgICAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRX
aWR0aCA9IG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwor
ICAgICAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNhbFJpZ2h0VmFsdWU7CiAg
ICAgICAgICAgICBsb2dpY2FsV2lkdGhWYWx1ZSA9IG1pbihtYXgocHJlZmVycmVkTWluV2lkdGgs
IGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVkV2lkdGgpOwogICAgICAgICAgICAgbG9naWNhbExl
ZnRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxvZ2ljYWxXaWR0aFZhbHVlICsgbG9naWNhbFJp
Z2h0VmFsdWUpOwogICAgICAgICB9IGVsc2UgaWYgKCFsb2dpY2FsTGVmdElzQXV0byAmJiBsb2dp
Y2FsV2lkdGhJc0F1dG8gJiYgbG9naWNhbFJpZ2h0SXNBdXRvKSB7CkBAIC0yNDg5LDkgKzI0OTMs
OSBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgICAg
ICBsb2dpY2FsTGVmdFZhbHVlID0gbG9naWNhbExlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2lj
YWxXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8g
aGF2ZSBzaHJpbmstdG8tZml0IGluIG9uZSBzdGVwPwotICAgICAgICAgICAgaW50IHByZWZlcnJl
ZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7
Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBhdmFpbGFibGVX
aWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNhbExlZnRWYWx1ZTsKKyAgICAgICAgICAgIExh
eW91dFVuaXQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJv
cmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIExheW91dFVuaXQgcHJlZmVycmVkTWluV2lk
dGggPSBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVTcGFjZSAtIGxv
Z2ljYWxMZWZ0VmFsdWU7CiAgICAgICAgICAgICBsb2dpY2FsV2lkdGhWYWx1ZSA9IG1pbihtYXgo
cHJlZmVycmVkTWluV2lkdGgsIGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVkV2lkdGgpOwogICAg
ICAgICB9IGVsc2UgaWYgKGxvZ2ljYWxMZWZ0SXNBdXRvICYmICFsb2dpY2FsV2lkdGhJc0F1dG8g
JiYgIWxvZ2ljYWxSaWdodElzQXV0bykgewogICAgICAgICAgICAgLy8gUlVMRSA0OiAoc29sdmUg
Zm9yIGxlZnQpCkBAIC0yNTM0LDcgKzI1MzgsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlQmxvY2tT
dGF0aWNEaXN0YW5jZShMCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBGSVhNRTogVGhl
IHN0YXRpYyBkaXN0YW5jZSBjb21wdXRhdGlvbiBoYXMgbm90IGJlZW4gcGF0Y2hlZCBmb3IgbWl4
ZWQgd3JpdGluZyBtb2Rlcy4KLSAgICBpbnQgc3RhdGljTG9naWNhbFRvcCA9IGNoaWxkLT5sYXll
cigpLT5zdGF0aWNCbG9ja1Bvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyQmVmb3Jl
KCk7CisgICAgTGF5b3V0VW5pdCBzdGF0aWNMb2dpY2FsVG9wID0gY2hpbGQtPmxheWVyKCktPnN0
YXRpY0Jsb2NrUG9zaXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJCZWZvcmUoKTsKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGNoaWxkLT5wYXJlbnQoKTsgY3VyciAmJiBjdXJy
ICE9IGNvbnRhaW5lckJsb2NrOyBjdXJyID0gY3Vyci0+Y29udGFpbmVyKCkpIHsKICAgICAgICAg
aWYgKGN1cnItPmlzQm94KCkgJiYgIWN1cnItPmlzVGFibGVSb3coKSkKICAgICAgICAgICAgIHN0
YXRpY0xvZ2ljYWxUb3AgKz0gdG9SZW5kZXJCb3goY3VyciktPmxvZ2ljYWxUb3AoKTsKQEAgLTI1
NTksMTUgKzI1NjMsMTUgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNh
bAogICAgIC8vIFdlIGRvbid0IHVzZSBjb250YWluaW5nQmxvY2soKSwgc2luY2Ugd2UgbWF5IGJl
IHBvc2l0aW9uZWQgYnkgYW4gZW5jbG9zaW5nIHJlbHBvc2l0aW9uZWQgaW5saW5lLgogICAgIGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoY29udGFpbmVyKCkpOwogCi0gICAgY29uc3QgaW50IGNvbnRhaW5lckxvZ2ljYWxI
ZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb250YWlu
ZXJCbG9jayk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsSGVpZ2h0ID0g
Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2sp
OwogCiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwog
ICAgIGJvb2wgaXNGbGlwcGVkID0gc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KTsKLSAgICBjb25zdCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxIZWlnaHQoKTsKKyAgICBjb25zdCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZyA9
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CiAgICAgY29uc3QgTGVuZ3RoIG1hcmdp
bkJlZm9yZSA9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJn
aW5BZnRlciA9IHN0eWxlKCktPm1hcmdpbkFmdGVyKCk7Ci0gICAgaW50JiBtYXJnaW5CZWZvcmVB
bGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpbkJvdHRvbSA6IG1fbWFy
Z2luVG9wKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpblJpZ2h0OiBtX21hcmdpbkxlZnQpOwotICAg
IGludCYgbWFyZ2luQWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21h
cmdpblRvcCA6IG1fbWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpbkxlZnQ6IG1f
bWFyZ2luUmlnaHQpOworICAgIExheW91dFVuaXQmIG1hcmdpbkJlZm9yZUFsaWFzID0gaXNIb3Jp
em9udGFsID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5Ub3ApIDogKGlz
RmxpcHBlZCA/IG1fbWFyZ2luUmlnaHQ6IG1fbWFyZ2luTGVmdCk7CisgICAgTGF5b3V0VW5pdCYg
bWFyZ2luQWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpblRv
cCA6IG1fbWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpbkxlZnQ6IG1fbWFyZ2lu
UmlnaHQpOwogCiAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AgPSBzdHlsZSgpLT5sb2dpY2FsVG9wKCk7
CiAgICAgTGVuZ3RoIGxvZ2ljYWxCb3R0b20gPSBzdHlsZSgpLT5sb2dpY2FsQm90dG9tKCk7CkBA
IC0yNTkzLDggKzI1OTcsOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGF0aWMgZGlzdGFuY2UgaWYgbmVlZGVkLgogICAg
IGNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20sIHRo
aXMsIGNvbnRhaW5lckJsb2NrKTsKIAotICAgIGludCBsb2dpY2FsSGVpZ2h0UmVzdWx0OyAvLyBO
ZWVkZWQgdG8gY29tcHV0ZSBvdmVyZmxvdy4KLSAgICBpbnQgbG9naWNhbFRvcFBvczsKKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRSZXN1bHQ7IC8vIE5lZWRlZCB0byBjb21wdXRlIG92ZXJm
bG93LgorICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvczsKIAogICAgIC8vIENhbGN1bGF0ZSBj
b25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ2hlaWdodCcgY2FzZS4KICAgICBjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCksIGNv
bnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcs
CkBAIC0yNjA3LDEwICsyNjExLDEwIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWwKIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBm
b3IgJ21heC1oZWlnaHQnIGNhc2UuCiAgICAgaWYgKCFzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0
KCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBpbnQgbWF4TG9naWNhbEhlaWdodDsKLSAgICAg
ICAgaW50IG1heE1hcmdpbkJlZm9yZTsKLSAgICAgICAgaW50IG1heE1hcmdpbkFmdGVyOwotICAg
ICAgICBpbnQgbWF4TG9naWNhbFRvcFBvczsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhMb2dpY2Fs
SGVpZ2h0OworICAgICAgICBMYXlvdXRVbml0IG1heE1hcmdpbkJlZm9yZTsKKyAgICAgICAgTGF5
b3V0VW5pdCBtYXhNYXJnaW5BZnRlcjsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhMb2dpY2FsVG9w
UG9zOwogCiAgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxl
KCktPmxvZ2ljYWxNYXhIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxI
ZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSwgbWFyZ2luQmVmb3JlLCBt
YXJnaW5BZnRlciwKQEAgLTI2MjYsMTAgKzI2MzAsMTAgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVQb3NpdGlvbmVkTG9naWNhbAogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRp
b24gdmFsdWVzIGZvciAnbWluLWhlaWdodCcgY2FzZS4KICAgICBpZiAoIXN0eWxlKCktPmxvZ2lj
YWxNaW5IZWlnaHQoKS5pc1plcm8oKSkgewotICAgICAgICBpbnQgbWluTG9naWNhbEhlaWdodDsK
LSAgICAgICAgaW50IG1pbk1hcmdpbkJlZm9yZTsKLSAgICAgICAgaW50IG1pbk1hcmdpbkFmdGVy
OwotICAgICAgICBpbnQgbWluTG9naWNhbFRvcFBvczsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5M
b2dpY2FsSGVpZ2h0OworICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkJlZm9yZTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5BZnRlcjsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5Mb2dp
Y2FsVG9wUG9zOwogCiAgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5n
KHN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxv
Z2ljYWxIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSwgbWFyZ2luQmVm
b3JlLCBtYXJnaW5BZnRlciwKQEAgLTI2NDcsNyArMjY1MSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWln
aHRSZXN1bHQgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRl
TG9naWNhbFRvcFBvc2l0aW9uZWRPZmZzZXQoaW50JiBsb2dpY2FsVG9wUG9zLCBjb25zdCBSZW5k
ZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbEhlaWdodFZhbHVlLCBjb25zdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY29udGFpbmVyQmxvY2ssIGludCBjb250YWluZXJMb2dpY2FsSGVpZ2h0KQorc3Rh
dGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KExheW91dFVuaXQmIGxv
Z2ljYWxUb3BQb3MsIGNvbnN0IFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodFZhbHVlLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2ssIExh
eW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdodCkKIHsKICAgICAvLyBEZWFsIHdpdGggZGlm
ZmVyaW5nIHdyaXRpbmcgbW9kZXMgaGVyZS4gIE91ciBvZmZzZXQgbmVlZHMgdG8gYmUgaW4gdGhl
IGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHNwYWNlLiBJZiB0aGUgY29udGFpbmluZyBi
bG9jayBpcyBmbGlwcGVkCiAgICAgLy8gYWxvbmcgdGhpcyBheGlzLCB0aGVuIHdlIG5lZWQgdG8g
ZmxpcCB0aGUgY29vcmRpbmF0ZS4gIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBjb250YWlu
aW5nIGJsb2NrIGlzIGJvdGggYSBmbGlwcGVkIG1vZGUgYW5kIHBlcnBlbmRpY3VsYXIgdG8gdXMu
CkBAIC0yNjcwLDE3ICsyNjc0LDE3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsVG9wUG9z
aXRpb25lZE8KIH0KIAogdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhl
aWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0TGVuZ3RoLCBjb25zdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY29udGFpbmVyQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIGludCBib3Jk
ZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0
IGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMZW5ndGggbG9naWNhbFRvcCwgTGVuZ3RoIGxvZ2ljYWxCb3R0b20s
IExlbmd0aCBtYXJnaW5CZWZvcmUsIExlbmd0aCBtYXJnaW5BZnRlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxvZ2ljYWxIZWlnaHRW
YWx1ZSwgaW50JiBtYXJnaW5CZWZvcmVWYWx1ZSwgaW50JiBtYXJnaW5BZnRlclZhbHVlLCBpbnQm
IGxvZ2ljYWxUb3BQb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbEhlaWdodFZhbHVlLCBMYXlvdXRVbml0JiBt
YXJnaW5CZWZvcmVWYWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luQWZ0ZXJWYWx1ZSwgTGF5b3V0VW5p
dCYgbG9naWNhbFRvcFBvcykKIHsKICAgICAvLyAndG9wJyBhbmQgJ2JvdHRvbScgY2Fubm90IGJv
dGggYmUgJ2F1dG8nIGJlY2F1c2UgJ3RvcCB3b3VsZCBvZiBiZWVuCiAgICAgLy8gY29udmVydGVk
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gaW4gY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0
KCkKICAgICBBU1NFUlQoIShsb2dpY2FsVG9wLmlzQXV0bygpICYmIGxvZ2ljYWxCb3R0b20uaXNB
dXRvKCkpKTsKIAotICAgIGludCBjb250ZW50TG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQo
KSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsSGVp
Z2h0ID0gbG9naWNhbEhlaWdodCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwogCi0gICAgaW50IGxv
Z2ljYWxUb3BWYWx1ZSA9IDA7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wVmFsdWUgPSAwOwog
CiAgICAgYm9vbCBsb2dpY2FsSGVpZ2h0SXNBdXRvID0gbG9naWNhbEhlaWdodExlbmd0aC5pc0F1
dG8oKTsKICAgICBib29sIGxvZ2ljYWxUb3BJc0F1dG8gPSBsb2dpY2FsVG9wLmlzQXV0bygpOwpA
QCAtMjcwNyw3ICsyNzExLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbAogICAgICAgICBsb2dpY2FsSGVpZ2h0VmFsdWUgPSBjb21wdXRlQ29udGVudEJveExvZ2lj
YWxIZWlnaHQobG9naWNhbEhlaWdodExlbmd0aC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbEhl
aWdodCkpOwogICAgICAgICBsb2dpY2FsVG9wVmFsdWUgPSBsb2dpY2FsVG9wLmNhbGNWYWx1ZShj
b250YWluZXJMb2dpY2FsSGVpZ2h0KTsKIAotICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3Bh
Y2UgPSBjb250YWluZXJMb2dpY2FsSGVpZ2h0IC0gKGxvZ2ljYWxUb3BWYWx1ZSArIGxvZ2ljYWxI
ZWlnaHRWYWx1ZSArIGxvZ2ljYWxCb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxIZWln
aHQpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKKyAgICAgICAgY29uc3QgTGF5b3V0VW5pdCBhdmFp
bGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSAobG9naWNhbFRvcFZhbHVlICsg
bG9naWNhbEhlaWdodFZhbHVlICsgbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVyTG9n
aWNhbEhlaWdodCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogCiAgICAgICAgIC8vIE1hcmdpbnMg
YXJlIG5vdyB0aGUgb25seSB1bmtub3duCiAgICAgICAgIGlmIChtYXJnaW5CZWZvcmUuaXNBdXRv
KCkgJiYgbWFyZ2luQWZ0ZXIuaXNBdXRvKCkpIHsKQEAgLTI3NTgsNyArMjc2Miw3IEBAIHZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgbWFyZ2luQmVmb3Jl
VmFsdWUgPSBtYXJnaW5CZWZvcmUuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQp
OwogICAgICAgICBtYXJnaW5BZnRlclZhbHVlID0gbWFyZ2luQWZ0ZXIuY2FsY01pblZhbHVlKGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQpOwogCi0gICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFj
ZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSAobWFyZ2luQmVmb3JlVmFsdWUgKyBtYXJnaW5B
ZnRlclZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKKyAgICAgICAgY29uc3QgTGF5b3V0VW5p
dCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSAobWFyZ2luQmVmb3Jl
VmFsdWUgKyBtYXJnaW5BZnRlclZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIAogICAgICAg
ICAvLyBVc2UgcnVsZS9jYXNlIHRoYXQgYXBwbGllcy4KICAgICAgICAgaWYgKGxvZ2ljYWxUb3BJ
c0F1dG8gJiYgbG9naWNhbEhlaWdodElzQXV0byAmJiAhbG9naWNhbEJvdHRvbUlzQXV0bykgewpA
QCAtMjc3Niw3ICsyNzgwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbAogICAgICAgICB9IGVsc2UgaWYgKCFsb2dpY2FsVG9wSXNBdXRvICYmIGxvZ2ljYWxIZWln
aHRJc0F1dG8gJiYgIWxvZ2ljYWxCb3R0b21Jc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUg
NTogKHNvbHZlIG9mIGhlaWdodCkKICAgICAgICAgICAgIGxvZ2ljYWxUb3BWYWx1ZSA9IGxvZ2lj
YWxUb3AuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgbG9n
aWNhbEhlaWdodFZhbHVlID0gbWF4KDAsIGF2YWlsYWJsZVNwYWNlIC0gKGxvZ2ljYWxUb3BWYWx1
ZSArIGxvZ2ljYWxCb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpKSk7Cisg
ICAgICAgICAgICBsb2dpY2FsSGVpZ2h0VmFsdWUgPSBtYXg8TGF5b3V0VW5pdD4oMCwgYXZhaWxh
YmxlU3BhY2UgLSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUoY29u
dGFpbmVyTG9naWNhbEhlaWdodCkpKTsKICAgICAgICAgfSBlbHNlIGlmICghbG9naWNhbFRvcElz
QXV0byAmJiAhbG9naWNhbEhlaWdodElzQXV0byAmJiBsb2dpY2FsQm90dG9tSXNBdXRvKSB7CiAg
ICAgICAgICAgICAvLyBSVUxFIDY6IChubyBuZWVkIHNvbHZlIG9mIGJvdHRvbSkKICAgICAgICAg
ICAgIGxvZ2ljYWxIZWlnaHRWYWx1ZSA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChs
b2dpY2FsSGVpZ2h0TGVuZ3RoLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSk7CkBA
IC0yODAxLDcgKzI4MDUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsCiAgICAgLy8gcmVsYXRpdmUgcG9zaXRpb25lZCBpbmxpbmUuCiAgICAgY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChj
b250YWluZXIoKSk7CiAKLSAgICBjb25zdCBpbnQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7Cisg
ICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKIAogICAgIC8vIFRv
IG1hdGNoIFdpbklFLCBpbiBxdWlya3MgbW9kZSB1c2UgdGhlIHBhcmVudCdzICdkaXJlY3Rpb24n
IHByb3BlcnR5CiAgICAgLy8gaW5zdGVhZCBvZiB0aGUgdGhlIGNvbnRhaW5lciBibG9jaydzLgpA
QCAtMjgxMyw4ICsyODE3LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbAogICAgIExlbmd0aCBsb2dpY2FsUmlnaHQgPSBzdHlsZSgpLT5sb2dpY2FsUmlnaHQoKTsK
ICAgICBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQgPSBpc0hvcml6b250YWwgPyBzdHlsZSgpLT5t
YXJnaW5MZWZ0KCkgOiBzdHlsZSgpLT5tYXJnaW5Ub3AoKTsKICAgICBMZW5ndGggbWFyZ2luTG9n
aWNhbFJpZ2h0ID0gaXNIb3Jpem9udGFsID8gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKSA6IHN0eWxl
KCktPm1hcmdpbkJvdHRvbSgpOwotICAgIGludCYgbWFyZ2luTG9naWNhbExlZnRBbGlhcyA9IGlz
SG9yaXpvbnRhbCA/IG1fbWFyZ2luTGVmdCA6IG1fbWFyZ2luVG9wOwotICAgIGludCYgbWFyZ2lu
TG9naWNhbFJpZ2h0QWxpYXMgPSBpc0hvcml6b250YWwgPyBtX21hcmdpblJpZ2h0IDogbV9tYXJn
aW5Cb3R0b207CisgICAgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbExlZnRBbGlhcyA9IGlzSG9y
aXpvbnRhbCA/IG1fbWFyZ2luTGVmdCA6IG1fbWFyZ2luVG9wOworICAgIExheW91dFVuaXQmIG1h
cmdpbkxvZ2ljYWxSaWdodEFsaWFzID0gaXNIb3Jpem9udGFsID8gbV9tYXJnaW5SaWdodCA6IG1f
bWFyZ2luQm90dG9tOwogCiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCiAgICAgICogMS4gVGhlIHVz
ZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQK
QEAgLTI4MjQsNyArMjgyOCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWwKICAgICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBjb21wdXRlUmVwbGFjZWRXaWR0aCgpLiAg
VGhpcyBtZWFucyB0aGF0IHRoZSBzdGVwcyB0byBwcm9kdWNlCiAgICAgLy8gY29ycmVjdCBtYXgv
bWluIGluIHRoZSBub24tcmVwbGFjZWQgdmVyc2lvbiwgYXJlIG5vdCBuZWNlc3NhcnkuCiAgICAg
c2V0TG9naWNhbFdpZHRoKGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aCgpICsgYm9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxXaWR0aCgpKTsKLSAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBj
b250YWluZXJMb2dpY2FsV2lkdGggLSBsb2dpY2FsV2lkdGgoKTsKKyAgICBjb25zdCBMYXlvdXRV
bml0IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gbG9naWNhbFdpZHRo
KCk7CiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKICAgICAgKiAyLiBJZiBib3RoICdsZWZ0JyBh
bmQgJ3JpZ2h0JyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycsIHRoZW4gaWYgJ2RpcmVjdGlvbicKQEAg
LTI4NTMsOCArMjg1Nyw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWwKICAgICAgKiAgICAoJ3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcp
IHRvIHplcm8gYW5kIHNvbHZlIGZvcgogICAgICAqICAgICdtYXJnaW4tcmlnaHQnICgnbWFyZ2lu
LWxlZnQnKS4KICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICBpbnQgbG9naWNhbExlZnRWYWx1
ZSA9IDA7Ci0gICAgaW50IGxvZ2ljYWxSaWdodFZhbHVlID0gMDsKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0VmFsdWUgPSAwOworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0VmFsdWUgPSAw
OwogCiAgICAgaWYgKG1hcmdpbkxvZ2ljYWxMZWZ0LmlzQXV0bygpICYmIG1hcmdpbkxvZ2ljYWxS
aWdodC5pc0F1dG8oKSkgewogICAgICAgICAvLyAnbGVmdCcgYW5kICdyaWdodCcgY2Fubm90IGJl
ICdhdXRvJyBkdWUgdG8gc3RlcCAzCkBAIC0yODYzLDcgKzI4NjcsNyBAQCB2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBs
b2dpY2FsTGVmdC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKICAgICAgICAgbG9n
aWNhbFJpZ2h0VmFsdWUgPSBsb2dpY2FsUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxX
aWR0aCk7CiAKLSAgICAgICAgaW50IGRpZmZlcmVuY2UgPSBhdmFpbGFibGVTcGFjZSAtIChsb2dp
Y2FsTGVmdFZhbHVlICsgbG9naWNhbFJpZ2h0VmFsdWUpOworICAgICAgICBMYXlvdXRVbml0IGRp
ZmZlcmVuY2UgPSBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsTGVmdFZhbHVlICsgbG9naWNhbFJp
Z2h0VmFsdWUpOwogICAgICAgICBpZiAoZGlmZmVyZW5jZSA+IDApIHsKICAgICAgICAgICAgIG1h
cmdpbkxvZ2ljYWxMZWZ0QWxpYXMgPSBkaWZmZXJlbmNlIC8gMjsgLy8gc3BsaXQgdGhlIGRpZmZl
cmVuY2UKICAgICAgICAgICAgIG1hcmdpbkxvZ2ljYWxSaWdodEFsaWFzID0gZGlmZmVyZW5jZSAt
IG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXM7IC8vIGFjY291bnQgZm9yIG9kZCB2YWx1ZWQgZGlmZmVy
ZW5jZXMKQEAgLTI5MjYsNyArMjkzMCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWwKICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICAvLyBOT1RFOiAgSXQgaXMg
bm90IG5lY2Vzc2FyeSB0byBzb2x2ZSBmb3IgJ3JpZ2h0JyB3aGVuIHRoZSBkaXJlY3Rpb24gaXMK
ICAgICAvLyBMVFIgYmVjYXVzZSB0aGUgdmFsdWUgaXMgbm90IHVzZWQuCi0gICAgaW50IHRvdGFs
TG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoKCkgKyBsb2dpY2FsTGVmdFZhbHVlICsgbG9naWNh
bFJpZ2h0VmFsdWUgKyAgbWFyZ2luTG9naWNhbExlZnRBbGlhcyArIG1hcmdpbkxvZ2ljYWxSaWdo
dEFsaWFzOworICAgIExheW91dFVuaXQgdG90YWxMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGgo
KSArIGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSArICBtYXJnaW5Mb2dpY2Fs
TGVmdEFsaWFzICsgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXM7CiAgICAgaWYgKHRvdGFsTG9naWNh
bFdpZHRoID4gY29udGFpbmVyTG9naWNhbFdpZHRoICYmIChjb250YWluZXJEaXJlY3Rpb24gPT0g
UlRMKSkKICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAt
ICh0b3RhbExvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxMZWZ0VmFsdWUpOwogCkBAIC0yOTQ5LDcgKzI5
NTMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpbnQgbG9naWNhbExlZnRQb3MgPSBsb2dpY2FsTGVmdFZhbHVlICsg
bWFyZ2luTG9naWNhbExlZnRBbGlhczsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UG9zID0g
bG9naWNhbExlZnRWYWx1ZSArIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXM7CiAgICAgY29tcHV0ZUxv
Z2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldChsb2dpY2FsTGVmdFBvcywgdGhpcywgbG9naWNhbFdp
ZHRoKCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2FsV2lkdGgpOyAgICAKICAgICBz
ZXRMb2dpY2FsTGVmdChsb2dpY2FsTGVmdFBvcyk7CiB9CkBAIC0yOTY1LDE1ICsyOTY5LDE1IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyBXZSBkb24n
dCB1c2UgY29udGFpbmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFu
IGVuY2xvc2luZyByZWxwb3NpdGlvbmVkIGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY29udGFpbmVyQmxvY2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5l
cigpKTsKIAotICAgIGNvbnN0IGludCBjb250YWluZXJMb2dpY2FsSGVpZ2h0ID0gY29udGFpbmlu
Z0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2spOworICAgIGNv
bnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKIAogICAgIC8vIFZhcmlh
YmxlcyB0byBzb2x2ZS4KICAgICBib29sIGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCk7CiAgICAgYm9vbCBpc0ZsaXBwZWQgPSBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpOwogICAgIExlbmd0aCBtYXJnaW5CZWZvcmUgPSBzdHlsZSgpLT5tYXJnaW5C
ZWZvcmUoKTsKICAgICBMZW5ndGggbWFyZ2luQWZ0ZXIgPSBzdHlsZSgpLT5tYXJnaW5BZnRlcigp
OwotICAgIGludCYgbWFyZ2luQmVmb3JlQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVk
ID8gbV9tYXJnaW5Cb3R0b20gOiBtX21hcmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5S
aWdodDogbV9tYXJnaW5MZWZ0KTsKLSAgICBpbnQmIG1hcmdpbkFmdGVyQWxpYXMgPSBpc0hvcml6
b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5Ub3AgOiBtX21hcmdpbkJvdHRvbSkgOiAoaXNG
bGlwcGVkID8gbV9tYXJnaW5MZWZ0OiBtX21hcmdpblJpZ2h0KTsKKyAgICBMYXlvdXRVbml0JiBt
YXJnaW5CZWZvcmVBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpbkJv
dHRvbSA6IG1fbWFyZ2luVG9wKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpblJpZ2h0OiBtX21hcmdp
bkxlZnQpOworICAgIExheW91dFVuaXQmIG1hcmdpbkFmdGVyQWxpYXMgPSBpc0hvcml6b250YWwg
PyAoaXNGbGlwcGVkID8gbV9tYXJnaW5Ub3AgOiBtX21hcmdpbkJvdHRvbSkgOiAoaXNGbGlwcGVk
ID8gbV9tYXJnaW5MZWZ0OiBtX21hcmdpblJpZ2h0KTsKIAogICAgIExlbmd0aCBsb2dpY2FsVG9w
ID0gc3R5bGUoKS0+bG9naWNhbFRvcCgpOwogICAgIExlbmd0aCBsb2dpY2FsQm90dG9tID0gc3R5
bGUoKS0+bG9naWNhbEJvdHRvbSgpOwpAQCAtMjk4Niw3ICsyOTkwLDcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIC8vIGFyZSBkZWFsdCB3aXRoIGluIGNv
bXB1dGVSZXBsYWNlZEhlaWdodCgpLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBzdGVwcyB0byBwcm9k
dWNlCiAgICAgLy8gY29ycmVjdCBtYXgvbWluIGluIHRoZSBub24tcmVwbGFjZWQgdmVyc2lvbiwg
YXJlIG5vdCBuZWNlc3NhcnkuCiAgICAgc2V0TG9naWNhbEhlaWdodChjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0KCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKTsKLSAgICBj
b25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJMb2dpY2FsSGVpZ2h0IC0gbG9naWNh
bEhlaWdodCgpOworICAgIGNvbnN0IExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWlu
ZXJMb2dpY2FsSGVpZ2h0IC0gbG9naWNhbEhlaWdodCgpOwogCiAgICAgLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSpcCiAgICAgICogMi4gSWYgYm90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0aGUgdmFsdWUg
J2F1dG8nLCByZXBsYWNlICd0b3AnCkBAIC0zMDEzLDggKzMwMTcsOCBAQCB2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICogICAgJ2F1dG8nLCBzb2x2ZSB0aGUg
ZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvCiAgICAgICog
ICAgbWFyZ2lucyBtdXN0IGdldCBlcXVhbCB2YWx1ZXMuCiAgICAgXCotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci0gICAgaW50IGxvZ2ljYWxUb3BWYWx1ZSA9IDA7Ci0gICAgaW50IGxvZ2ljYWxCb3R0b21WYWx1
ZSA9IDA7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wVmFsdWUgPSAwOworICAgIExheW91dFVu
aXQgbG9naWNhbEJvdHRvbVZhbHVlID0gMDsKIAogICAgIGlmIChtYXJnaW5CZWZvcmUuaXNBdXRv
KCkgJiYgbWFyZ2luQWZ0ZXIuaXNBdXRvKCkpIHsKICAgICAgICAgLy8gJ3RvcCcgYW5kICdib3R0
b20nIGNhbm5vdCBiZSAnYXV0bycgZHVlIHRvIHN0ZXAgMiBhbmQgMyBjb21iaW5lZC4KQEAgLTMw
MjMsNyArMzAyNyw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwK
ICAgICAgICAgbG9naWNhbFRvcFZhbHVlID0gbG9naWNhbFRvcC5jYWxjVmFsdWUoY29udGFpbmVy
TG9naWNhbEhlaWdodCk7CiAgICAgICAgIGxvZ2ljYWxCb3R0b21WYWx1ZSA9IGxvZ2ljYWxCb3R0
b20uY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpOwogCi0gICAgICAgIGludCBkaWZm
ZXJlbmNlID0gYXZhaWxhYmxlU3BhY2UgLSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEJvdHRv
bVZhbHVlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkaWZmZXJlbmNlID0gYXZhaWxhYmxlU3BhY2Ug
LSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEJvdHRvbVZhbHVlKTsKICAgICAgICAgLy8gTk9U
RTogVGhpcyBtYXkgcmVzdWx0IGluIG5lZ2F0aXZlIHZhbHVlcy4KICAgICAgICAgbWFyZ2luQmVm
b3JlQWxpYXMgPSAgZGlmZmVyZW5jZSAvIDI7IC8vIHNwbGl0IHRoZSBkaWZmZXJlbmNlCiAgICAg
ICAgIG1hcmdpbkFmdGVyQWxpYXMgPSBkaWZmZXJlbmNlIC0gbWFyZ2luQmVmb3JlQWxpYXM7IC8v
IGFjY291bnQgZm9yIG9kZCB2YWx1ZWQgZGlmZmVyZW5jZXMKQEAgLTMwNzksMTIgKzMwODMsMTIg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIC8vIG9yIG5v
dC4KIAogICAgIC8vIFVzZSBjb21wdXRlZCB2YWx1ZXMgdG8gY2FsY3VsYXRlIHRoZSB2ZXJ0aWNh
bCBwb3NpdGlvbi4KLSAgICBpbnQgbG9naWNhbFRvcFBvcyA9IGxvZ2ljYWxUb3BWYWx1ZSArIG1h
cmdpbkJlZm9yZUFsaWFzOworICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvcyA9IGxvZ2ljYWxU
b3BWYWx1ZSArIG1hcmdpbkJlZm9yZUFsaWFzOwogICAgIGNvbXB1dGVMb2dpY2FsVG9wUG9zaXRp
b25lZE9mZnNldChsb2dpY2FsVG9wUG9zLCB0aGlzLCBsb2dpY2FsSGVpZ2h0KCksIGNvbnRhaW5l
ckJsb2NrLCBjb250YWluZXJMb2dpY2FsSGVpZ2h0KTsKICAgICBzZXRMb2dpY2FsVG9wKGxvZ2lj
YWxUb3BQb3MpOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiBib3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitM
YXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIGludCBj
YXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8v
IFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkg
cmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKICAgICAvLyB0aG9zZSBjb250YWlu
ZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0
aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4KQEAgLTMwOTIsMTUgKzMwOTYsMTUgQEAgSW50UmVj
dCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZQogICAgIC8vIEZJWE1FOiBQYWludCB0
aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgY2FyZXRz
IGJlZm9yZS9hZnRlciBlbGVtZW50cy4KIAogICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IGJvcmRl
ciBhbmQgcGFkZGluZz8KLSAgICBJbnRSZWN0IHJlY3QoeCgpLCB5KCksIGNhcmV0V2lkdGgsIGhl
aWdodCgpKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QoeCgpLCB5KCksIGNhcmV0V2lkdGgsIGhlaWdo
dCgpKTsKICAgICBib29sIGx0ciA9IGJveCA/IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
IDogc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCiAgICAgaWYgKCghY2FyZXRP
ZmZzZXQpIF4gbHRyKQotICAgICAgICByZWN0Lm1vdmUoSW50U2l6ZSh3aWR0aCgpIC0gY2FyZXRX
aWR0aCwgMCkpOworICAgICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRX
aWR0aCwgMCkpOwogCiAgICAgaWYgKGJveCkgewogICAgICAgICBSb290SW5saW5lQm94KiByb290
Qm94ID0gYm94LT5yb290KCk7Ci0gICAgICAgIGludCB0b3AgPSByb290Qm94LT5saW5lVG9wKCk7
CisgICAgICAgIExheW91dFVuaXQgdG9wID0gcm9vdEJveC0+bGluZVRvcCgpOwogICAgICAgICBy
ZWN0LnNldFkodG9wKTsKICAgICAgICAgcmVjdC5zZXRIZWlnaHQocm9vdEJveC0+bGluZUJvdHRv
bSgpIC0gdG9wKTsKICAgICB9CkBAIC0zMTEzLDcgKzMxMTcsNyBAQCBJbnRSZWN0IFJlbmRlckJv
eDo6bG9jYWxDYXJldFJlY3QoSW5saW5lCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM3Nzc4MDQ+
IERlbGV0aW5nIGFsbCBjb250ZW50IGluIGEgZG9jdW1lbnQgY2FuIHJlc3VsdCBpbiBnaWFudCB0
YWxsLWFzLXdpbmRvdyBpbnNlcnRpb24gcG9pbnQKICAgICAvLwogICAgIC8vIEZJWE1FOiBpZ25v
cmluZyA6Zmlyc3QtbGluZSwgbWlzc2luZyBnb29kIHJlYXNvbiB0byB0YWtlIGNhcmUgb2YKLSAg
ICBpbnQgZm9udEhlaWdodCA9IHN0eWxlKCktPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAg
TGF5b3V0VW5pdCBmb250SGVpZ2h0ID0gc3R5bGUoKS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsK
ICAgICBpZiAoZm9udEhlaWdodCA+IHJlY3QuaGVpZ2h0KCkgfHwgKCFpc1JlcGxhY2VkKCkgJiYg
IWlzVGFibGUoKSkpCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGZvbnRIZWlnaHQpOwogCkBAIC0z
MzE5LDE3ICszMzIzLDE3IEBAIHZvaWQgUmVuZGVyQm94OjpjbGVhckxheW91dE92ZXJmbG93KCkK
ICAgICBtX292ZXJmbG93LT5yZXNldExheW91dE92ZXJmbG93KGJvcmRlckJveFJlY3QoKSk7CiB9
CiAKLWludCBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoYm9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGly
ZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2Rl
Ki8pIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6bGluZUhlaWdodChib29sIC8qZmlyc3RM
aW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSAvKmxp
bmVQb3NpdGlvbk1vZGUqLykgY29uc3QKIHsKICAgICBpZiAoaXNSZXBsYWNlZCgpKQogICAgICAg
ICByZXR1cm4gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gbV9tYXJnaW5Ub3AgKyBoZWln
aHQoKSArIG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5SaWdodCArIHdpZHRoKCkgKyBtX21hcmdp
bkxlZnQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRp
b24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGly
ZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2Rl
Ki8pIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFz
ZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2Rl
IGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QK
IHsKICAgICBpZiAoaXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIGludCByZXN1bHQgPSBkaXJlY3Rp
b24gPT0gSG9yaXpvbnRhbExpbmUgPyBtX21hcmdpblRvcCArIGhlaWdodCgpICsgbV9tYXJnaW5C
b3R0b20gOiBtX21hcmdpblJpZ2h0ICsgd2lkdGgoKSArIG1fbWFyZ2luTGVmdDsKKyAgICAgICAg
TGF5b3V0VW5pdCByZXN1bHQgPSBkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtX21hcmdp
blRvcCArIGhlaWdodCgpICsgbV9tYXJnaW5Cb3R0b20gOiBtX21hcmdpblJpZ2h0ICsgd2lkdGgo
KSArIG1fbWFyZ2luTGVmdDsKICAgICAgICAgaWYgKGJhc2VsaW5lVHlwZSA9PSBBbHBoYWJldGlj
QmFzZWxpbmUpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gcmVz
dWx0IC0gcmVzdWx0IC8gMjsKQEAgLTMzNTAsMTkgKzMzNTQsMTkgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckJveDo6ZW5jbG9zaW5nRmxvYXRQYQogICAgIHJldHVybiAwOwogfQogCi1JbnRSZWN0IFJl
bmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94Ojpsb2dpY2FsVmlz
dWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBj
b25zdAogewotICAgIEludFJlY3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKHBhcmVudFN0eWxlKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSB2aXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlY3QudHJhbnNwb3NlZFJl
Y3QoKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QK
K0xheW91dFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdyaXRpbmcg
bW9kZXMgb2YgdGhlIGNoaWxkIGFuZCBwYXJlbnQgbWF0Y2gsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0
byAKICAgICAvLyBkbyBhbnl0aGluZyBmYW5jeS4gSnVzdCByZXR1cm4gdGhlIHJlc3VsdC4KLSAg
ICBJbnRSZWN0IHJlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAgICBMYXlvdXRSZWN0IHJl
Y3QgPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKICAgICBpZiAocGFyZW50U3R5bGUtPndyaXRpbmdN
b2RlKCkgPT0gc3R5bGUoKS0+d3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlY3Q7CiAg
ICAgCkBAIC0zMzc2LDE4ICszMzgwLDE4IEBAIEludFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVy
Zmxvd1JlY3RGb3IKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6Omxv
Z2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmbG93
UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKLSAg
ICBJbnRSZWN0IHJlY3QgPSBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihwYXJlbnRT
dHlsZSk7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFn
YXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7CiAgICAg
cmV0dXJuIHJlY3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RG
b3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0
IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxh
eW91dCBvdmVyZmxvdyBpZiB3ZSBkb24ndCBjbGlwIGl0LgotICAgIEludFJlY3QgcmVjdCA9IGJv
cmRlckJveFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBib3JkZXJCb3hSZWN0KCk7CiAg
ICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmVjdC51bml0ZShsYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7CiAKQEAgLTM0OTIsMTUgKzM0OTYsMTUgQEAgdm9pZCBSZW5kZXJCb3g6OmZs
aXBGb3JXcml0aW5nTW9kZShGbG9hdAogICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3Qu
bWF4WCgpKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJCb3g6OmxvY2F0aW9uT2Zmc2V0SW5jbHVkaW5n
RmxpcHBpbmcoKSBjb25zdAorTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmxvY2F0aW9uT2Zmc2V0SW5j
bHVkaW5nRmxpcHBpbmcoKSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjb250YWluZXJCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmICghY29udGFpbmVyQmxvY2sgfHwgY29udGFp
bmVyQmxvY2sgPT0gdGhpcykKICAgICAgICAgcmV0dXJuIGxvY2F0aW9uT2Zmc2V0KCk7CiAgICAg
Ci0gICAgSW50UmVjdCByZWN0KGZyYW1lUmVjdCgpKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QoZnJh
bWVSZWN0KCkpOwogICAgIGNvbnRhaW5lckJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7
IC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGlmIHdlIGFyZSBhbiBhYnNvbHV0ZWx5IHBvc2l0aW9u
ZWQgb2JqZWN0IGVuY2xvc2VkIGJ5IGEgcmVsYXRpdmUtcG9zaXRpb25lZCBpbmxpbmUuCi0gICAg
cmV0dXJuIEludFNpemUocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6
ZShyZWN0LngoKSwgcmVjdC55KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA5MzAwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTI3
LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFF1YWQgYWJzb2x1dGVDb250ZW50UXVhZCgp
IGNvbnN0OwogCiAgICAgLy8gQm91bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBpbiBhYnNvbHV0ZSBj
b29yZHMuIFJlc3BlY3RzIHRyYW5zZm9ybXMKLSAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciov
LCBJbnRQb2ludCogY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdDsKKyAgICB2
aXJ0dWFsIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBMYXlvdXRQb2ludCogY2FjaGVkT2Zmc2V0VG9S
ZXBhaW50Q29udGFpbmVyKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIC8vIFVz
ZSB0aGlzIHdpdGggY2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBpcyBkb25lIQpAQCAtMTkyLDEy
ICsxOTIsMTIgQEAgcHVibGljOgogICAgIC8vIHNjcm9sbExlZnQvVG9wIHJldHVybiB0aGUgY3Vy
cmVudCBzY3JvbGwgcG9zaXRpb24uICBUaGVzZSBtZXRob2RzIGFyZSB2aXJ0dWFsIHNvIHRoYXQg
b2JqZWN0cyBsaWtlCiAgICAgLy8gdGV4dGFyZWFzIGNhbiBzY3JvbGwgc2hhZG93IGNvbnRlbnQg
KGJ1dCBwcmV0ZW5kIHRoYXQgdGhleSBhcmUgdGhlIG9iamVjdHMgdGhhdCBhcmUKICAgICAvLyBz
Y3JvbGxpbmcpLgotICAgIHZpcnR1YWwgaW50IHNjcm9sbExlZnQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGludCBzY3JvbGxUb3AoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxXaWR0aCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRv
cChpbnQpOworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxMZWZ0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbFRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxI
ZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChMYXlvdXRVbml0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKExheW91dFVuaXQpOwogCiAgICAgdmly
dHVhbCBMYXlvdXRVbml0IG1hcmdpblRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luVG9wOyB9
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1hcmdpbkJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFyZ2luQm90dG9tOyB9CkBAIC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogICAgIEludFJlY3Qg
cmVmbGVjdGlvbkJveCgpIGNvbnN0OwogICAgIGludCByZWZsZWN0aW9uT2Zmc2V0KCkgY29uc3Q7
CiAgICAgLy8gR2l2ZW4gYSByZWN0IGluIHRoZSBvYmplY3QncyBjb29yZGluYXRlIHNwYWNlLCBy
ZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlY3QgaW4gdGhlIHJlZmxlY3Rpb24uCi0gICAgSW50
UmVjdCByZWZsZWN0ZWRSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0
IHJlZmxlY3RlZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpOwpAQCAtMjU1LDcgKzI1NSw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0
IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKExheW91dFVuaXQgd2lkdGgpIGNvbnN0Owog
ICAgIExheW91dFVuaXQgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQg
aGVpZ2h0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBib3JkZXJGaXRBZGp1c3QoSW50UmVj
dCYpIGNvbnN0IHsgfSAvLyBTaHJpbmsgdGhlIGJveCBpbiB3aGljaCB0aGUgYm9yZGVyIHBhaW50
cyBpZiBib3JkZXItZml0IGlzIHNldC4KKyAgICB2aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRqdXN0
KExheW91dFJlY3QmKSBjb25zdCB7IH0gLy8gU2hyaW5rIHRoZSBib3ggaW4gd2hpY2ggdGhlIGJv
cmRlciBwYWludHMgaWYgYm9yZGVyLWZpdCBpcyBzZXQuCiAKICAgICAvLyBSZXNvbHZlIGF1dG8g
bWFyZ2lucyBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBibG9jayBz
byB0aGF0IG9iamVjdHMgY2FuIGJlIHB1c2hlZCB0byB0aGUgc3RhcnQsIG1pZGRsZSBvciBlbmQK
ICAgICAvLyBvZiB0aGUgY29udGFpbmluZyBibG9jay4KQEAgLTI3NiwxMyArMjc2LDEzIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldElubGluZUJveFdyYXBwZXIoSW5saW5lQm94KiBib3hXcmFwcGVy
KSB7IG1faW5saW5lQm94V3JhcHBlciA9IGJveFdyYXBwZXI7IH0KICAgICB2b2lkIGRlbGV0ZUxp
bmVCb3hXcmFwcGVyKCk7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNv
bnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgTGF5b3V0UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludER1cmluZ0xheW91dElmTW92ZWQoY29uc3QgTGF5b3V0
UmVjdCYpOwogCi0gICAgdmlydHVhbCBpbnQgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9y
Q29udGVudCgpIGNvbnN0OwotICAgIGludCBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9n
aWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBwZXJwZW5k
aWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0OwogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbFdpZHRoKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1
dGVMb2dpY2FsSGVpZ2h0KCk7CkBAIC0yOTIsOSArMjkyLDkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkgJiYgc3R5bGUoKS0+bG9naWNhbEhlaWdo
dCgpLmlzQXV0bygpICYmICFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgKGlzUm9vdCgpIHx8
IGlzQm9keSgpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIEludFNpemUgaW50cmluc2ljU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQotICAgIGludCBpbnRyaW5zaWNMb2dpY2FsV2lk
dGgoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
aW50cmluc2ljU2l6ZSgpLndpZHRoKCkgOiBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCk7IH0KLSAg
ICBpbnQgaW50cmluc2ljTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCkgOiBpbnRy
aW5zaWNTaXplKCkud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBpbnRyaW5zaWNT
aXplKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0U2l6ZSgpOyB9CisgICAgTGF5b3V0VW5pdCBpbnRy
aW5zaWNMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gaW50cmluc2ljU2l6ZSgpLndpZHRoKCkgOiBpbnRyaW5zaWNTaXplKCku
aGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IGludHJpbnNpY0xvZ2ljYWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaW50cmluc2lj
U2l6ZSgpLmhlaWdodCgpIDogaW50cmluc2ljU2l6ZSgpLndpZHRoKCk7IH0KIAogICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHNocmlua3MgdG8gaXRzIGludHJpbnNpYyB3aWR0aCAo
cmF0aGVyIHRoYW4gZmlsbGluZyB0aGUgd2lkdGgKICAgICAvLyBvZiBhIGNvbnRhaW5pbmcgYmxv
Y2spLiAgSFRNTDQgYnV0dG9ucywgPHNlbGVjdD5zLCA8aW5wdXQ+cywgbGVnZW5kcywgYW5kIGZs
b2F0aW5nL2NvbXBhY3QgZWxlbWVudHMgZG8gdGhpcy4KQEAgLTMyMyw5ICszMjMsOSBAQCBwdWJs
aWM6CiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSA6
IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoKTsgfQogICAgIExheW91dFVuaXQgYXZhaWxhYmxlSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoKSA6IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOyB9CiAK
LSAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25zdDsKLSAgICBpbnQgc2Nyb2xsYmFyTG9n
aWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFVuaXQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
IGNvbnN0OworICAgIExheW91dFVuaXQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0
OworICAgIExheW91dFVuaXQgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCkgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNj
cm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogICAgIGJvb2wgY2FuQmVTY3JvbGxl
ZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkgY29uc3Q7CkBAIC0zMzksMTIgKzMzOSwxMiBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3dYKCkgY29uc3QgeyByZXR1cm4gaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgKHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9TQ1JPTEwgfHwgaGFzQXV0b0hv
cml6b250YWxTY3JvbGxiYXIoKSk7IH0KICAgICBib29sIHNjcm9sbHNPdmVyZmxvd1koKSBjb25z
dCB7IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiAoc3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0g
T1NDUk9MTCB8fCBoYXNBdXRvVmVydGljYWxTY3JvbGxiYXIoKSk7IH0KICAgICAKLSAgICB2aXJ0
dWFsIEludFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBp
bnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBs
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IG92ZXJmbG93
Q2xpcFJlY3QoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKLSAgICBJbnRSZWN0IGNsaXBS
ZWN0KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbik7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92
ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICBMYXlv
dXRSZWN0IGNsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbik7CiAgICAgdmlydHVh
bCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JikgY29uc3QgeyByZXR1
cm4gSW50UmVjdCgpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChj
b25zdCBMYXlvdXRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQogICAgIGJv
b2wgcHVzaENvbnRlbnRzQ2xpcChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpOwogICAgIHZvaWQgcG9wQ29udGVudHNDbGlwKFBhaW50SW5mbyYsIFBhaW50
UGhhc2Ugb3JpZ2luYWxQaGFzZSwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
KTsKIApAQCAtMzY2LDcgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgSW50UmVjdCBtYXNrQ2xpcFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IG1hc2tD
bGlwUmVjdCgpOwogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2lu
dChjb25zdCBMYXlvdXRQb2ludCYpOwogCkBAIC0zNzQsOCArMzc0LDggQEAgcHVibGljOgogICAg
IAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIoKSBjb25zdDsK
ICAgICAKLSAgICB2aXJ0dWFsIGludCBmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0IHsgcmV0
dXJuIC0xOyB9Ci0gICAgdmlydHVhbCBpbnQgbGFzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0IHsg
cmV0dXJuIC0xOyB9CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGZpcnN0TGluZUJveEJhc2VsaW5l
KCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICB2aXJ0dWFsIExheW91dFVuaXQgbGFzdExpbmVC
b3hCYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CiAKICAgICBib29sIHNocmlua1RvQXZv
aWRGbG9hdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29uc3Q7
CkBAIC0zODYsOCArMzg2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0RlcHJlY2F0ZWRGbGV4
SXRlbSgpIGNvbnN0IHsgcmV0dXJuICFpc0lubGluZSgpICYmICFpc0Zsb2F0aW5nT3JQb3NpdGlv
bmVkKCkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCk7
IH0KICAgICAKLSAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGlu
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUs
IGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBv
c2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGxp
bmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25N
b2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91
dFVuaXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGlu
ZSkgY29uc3Q7CiAKICAgICBlbnVtIEZsaXBwaW5nQWRqdXN0bWVudCB7IENoaWxkVG9QYXJlbnRG
bGlwcGluZ0FkanVzdG1lbnQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQgfTsKICAg
ICBMYXlvdXRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQm94KiBjaGlsZCwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBGbGlwcGluZ0FkanVzdG1lbnQpIGNvbnN0OwpAQCAtMzk4LDEy
ICszOTgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlKEludFJlY3Qm
KSBjb25zdDsKICAgICBGbG9hdFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7CiAgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoRmxvYXRSZWN0JikgY29u
c3Q7Ci0gICAgSW50U2l6ZSBsb2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCkgY29uc3Q7
CisgICAgTGF5b3V0U2l6ZSBsb2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCkgY29uc3Q7
CiAKLSAgICBJbnRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihS
ZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIEludFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJv
cGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBJbnRSZWN0IGxvZ2ljYWxMYXlvdXRP
dmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIEludFJl
Y3QgbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsK
KyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihS
ZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0Rm9y
UHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxM
YXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUq
KSBjb25zdDsKIAogICAgIFJlbmRlck92ZXJmbG93KiBoYXNSZW5kZXJPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIG1fb3ZlcmZsb3cuZ2V0KCk7IH0KIApAQCAtNDUwLDEzICs0NTAsMTMgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0KCk7CiAgICAg
dm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKExlbmd0aCBsb2dpY2FsV2lk
dGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgVGV4dERpcmVj
dGlvbiBjb250YWluZXJEaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjb250YWluZXJMb2dpY2FsV2lkdGgsIGludCBib3JkZXJzUGx1c1Bh
ZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxv
Z2ljYWxMZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQs
IExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCYgbG9naWNhbFdpZHRoVmFsdWUsIGludCYgbWFyZ2luTG9naWNh
bExlZnRWYWx1ZSwgaW50JiBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSwgaW50JiBsb2dpY2FsTGVm
dFBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQmIGxvZ2ljYWxXaWR0aFZhbHVlLCBMYXlvdXRVbml0JiBtYXJnaW5Mb2dpY2FsTGVmdFZh
bHVlLCBMYXlvdXRVbml0JiBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSwgTGF5b3V0VW5pdCYgbG9n
aWNhbExlZnRQb3MpOwogICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNp
bmcoTGVuZ3RoIGxvZ2ljYWxIZWlnaHQsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250
YWluZXJCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250
YWluZXJMb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dpY2FsVG9w
LCBMZW5ndGggbG9naWNhbEJvdHRvbSwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxUb3AsIExlbmd0aCBt
YXJnaW5Mb2dpY2FsQm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBsb2dpY2FsSGVpZ2h0VmFsdWUsIGludCYgbWFyZ2luTG9naWNhbFRvcFZh
bHVlLCBpbnQmIG1hcmdpbkxvZ2ljYWxCb3R0b21WYWx1ZSwgaW50JiBsb2dpY2FsVG9wUG9zKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQm
IGxvZ2ljYWxIZWlnaHRWYWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbFRvcFZhbHVlLCBM
YXlvdXRVbml0JiBtYXJnaW5Mb2dpY2FsQm90dG9tVmFsdWUsIExheW91dFVuaXQmIGxvZ2ljYWxU
b3BQb3MpOwogCiAgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNl
ZCgpOwogICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103851</attachid>
            <date>2011-08-12 18:33:54 -0700</date>
            <delta_ts>2011-08-15 17:22:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66156-20110812183353.patch</filename>
            <type>text/plain</type>
            <size>68628</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMDEwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDgtMTIgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCb3ggdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb252ZXJ0IFJlbmRlckJveCB0byBuZXcgbGF5b3V0IGFic3RyYWN0aW9uIGFz
IGEgcGFydCBvZiB0aGUgb25nb2luZworICAgICAgICBjb252ZXJzaW9uIHdvcmsuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9s
bFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNl
dFNjcm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3Ap
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6cmVmbGVjdGlvbkJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJl
ZmxlY3RlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50
Qm94TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUNv
bnRlbnRCb3hMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWFz
a0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVwYWludExheWVyUmVj
dHNGb3JJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1c2hDb250ZW50c0Ns
aXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlv
bk1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aFJlcGxhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsSGVpZ2h0UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojps
b2NhbENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxpbmVIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsTGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmxvY2F0aW9uT2Zmc2V0SW5jbHVkaW5nRmxpcHBpbmcpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9y
ZGVyRml0QWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY0xvZ2ljYWxXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY0xvZ2ljYWxIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udHJvbENsaXBSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Zmlyc3RMaW5lQm94QmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpsYXN0TGluZUJveEJhc2VsaW5lKToKKwogMjAxMS0wOC0xMiAgRmFkeSBT
YW11ZWwgIDxmc2FtdWVsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZWZhY3RvcmluZyBvZiBQ
b3B1cE1lbnVDaHJvbWl1bSBGb3IgUmVhZGFiaWxpdHkgYW5kIE1haW50YWluYWJpbGl0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDkzMDEwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxNiw3ICs0MTYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkg
Y29uCiAgICAgcmV0dXJuIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAt
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKIH0KIAotaW50IFJlbmRlckJveDo6c2Nyb2xs
V2lkdGgoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QK
IHsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiBsYXllcigpLT5z
Y3JvbGxXaWR0aCgpOwpAQCAtNDI0LDEwICs0MjQsMTAgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xs
V2lkdGgoKSBjb25zdAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0
aW5nIG1vZGVzLgogICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBtYXgoY2xpZW50V2lkdGgoKSwgbWF4WExheW91dE92ZXJmbG93KCkgLSBi
b3JkZXJMZWZ0KCkpOwotICAgIHJldHVybiBjbGllbnRXaWR0aCgpIC0gbWluKDAsIG1pblhMYXlv
dXRPdmVyZmxvdygpIC0gYm9yZGVyTGVmdCgpKTsKKyAgICByZXR1cm4gY2xpZW50V2lkdGgoKSAt
IG1pbjxMYXlvdXRVbml0PigwLCBtaW5YTGF5b3V0T3ZlcmZsb3coKSAtIGJvcmRlckxlZnQoKSk7
CiB9CiAKLWludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJl
bmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkpCiAgICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKQEAgLTQzNiwyOSAr
NDM2LDI5IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1heChjbGllbnRIZWlnaHQoKSwgbWF4WUxheW91dE92ZXJmbG93KCkgLSBib3JkZXJUb3AoKSk7
CiB9CiAKLWludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAogewogICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAo
KSA/IGxheWVyKCktPnNjcm9sbFhPZmZzZXQoKSA6IDA7CiB9CiAKLWludCBSZW5kZXJCb3g6OnNj
cm9sbFRvcCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QK
IHsKICAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBsYXllcigpLT5zY3JvbGxZT2Zmc2V0
KCkgOiAwOwogfQogCi12b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkK
K3ZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KExheW91dFVuaXQgbmV3TGVmdCkKIHsKICAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIGxheWVyKCktPnNjcm9sbFRvWE9mZnNl
dChuZXdMZWZ0LCBSZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCk7CiB9CiAKLXZvaWQg
UmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKK3ZvaWQgUmVuZGVyQm94OjpzZXRT
Y3JvbGxUb3AoTGF5b3V0VW5pdCBuZXdUb3ApCiB7CiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgp
KQogICAgICAgICBsYXllcigpLT5zY3JvbGxUb1lPZmZzZXQobmV3VG9wLCBSZW5kZXJMYXllcjo6
U2Nyb2xsT2Zmc2V0Q2xhbXBlZCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCkKK3ZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICByZWN0
cy5hcHBlbmQoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSk7CiB9CkBAIC00
NzUsOSArNDc1LDkgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKICAg
ICAgICAgbGF5ZXIoKS0+dXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94
OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmFic29s
dXRlQ29udGVudEJveCgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJl
Y3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwogICAgIEZsb2F0
UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CiAgICAgcmVjdC5t
b3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0OwpAQCAtNDg1LDEz
ICs0ODUsMTMgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgpIAogCiBG
bG9hdFF1YWQgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QKIHsKLSAgICBJ
bnRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIExheW91dFJlY3QgcmVjdCA9IGNv
bnRlbnRCb3hSZWN0KCk7CiAgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0
KHJlY3QpKTsKIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRQb2ludCogY2FjaGVk
T2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om91
dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBMYXlvdXRQb2ludCogY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdAog
ewotICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm91bmRpbmdCb3goKTsKKyAgICBMYXlvdXRSZWN0
IGJveCA9IGJvcmRlckJvdW5kaW5nQm94KCk7CiAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRT
aGFkb3coYm94KTsKIAogICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBGbG9h
dFJlY3QoYm94KTsKQEAgLTUxNSwxMiArNTE1LDEyIEBAIHZvaWQgUmVuZGVyQm94OjphZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3IKICAgICAgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3QoYWRkaXRp
b25hbE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0aW9u
Qm94KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0aW9uQm94KCkgY29uc3QK
IHsKLSAgICBJbnRSZWN0IHJlc3VsdDsKKyAgICBMYXlvdXRSZWN0IHJlc3VsdDsKICAgICBpZiAo
IXN0eWxlKCktPmJveFJlZmxlY3QoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBJbnRS
ZWN0IGJveCA9IGJvcmRlckJveFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IGJveCA9IGJvcmRlckJv
eFJlY3QoKTsKICAgICByZXN1bHQgPSBib3g7CiAgICAgc3dpdGNoIChzdHlsZSgpLT5ib3hSZWZs
ZWN0KCktPmRpcmVjdGlvbigpKSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgpAQCAt
NTQ4LDEzICs1NDgsMTMgQEAgaW50IFJlbmRlckJveDo6cmVmbGVjdGlvbk9mZnNldCgpIGNvbnN0
CiAgICAgcmV0dXJuIHN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkuY2FsY1ZhbHVlKGJv
cmRlckJveFJlY3QoKS5oZWlnaHQoKSk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0
ZWRSZWN0KGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6cmVm
bGVjdGVkUmVjdChjb25zdCBMYXlvdXRSZWN0JiByKSBjb25zdAogewogICAgIGlmICghc3R5bGUo
KS0+Ym94UmVmbGVjdCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7Ci0g
ICAgSW50UmVjdCByZXN1bHQgPSByOworICAgIExheW91dFJlY3QgYm94ID0gYm9yZGVyQm94UmVj
dCgpOworICAgIExheW91dFJlY3QgcmVzdWx0ID0gcjsKICAgICBzd2l0Y2ggKHN0eWxlKCktPmJv
eFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkpIHsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQmVsb3c6
CiAgICAgICAgICAgICByZXN1bHQuc2V0WShib3gubWF4WSgpICsgcmVmbGVjdGlvbk9mZnNldCgp
ICsgKGJveC5tYXhZKCkgLSByLm1heFkoKSkpOwpAQCAtNTg0LDEyICs1ODQsMTIgQEAgYm9vbCBS
ZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYgogICAgICAgICAmJiAoc3R5bGUoKS0+
b3ZlcmZsb3dYKCkgPT0gT1NDUk9MTCB8fCBzdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPQVVUTyk7
CiB9CiAKLWludCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewogICAg
IHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCkgOiAwOwogfQogCi1pbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3Jv
bGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwog
fQpAQCAtNzM4LDE0ICs3MzgsMTQgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVDb250
ZW50Qm94TAogewogICAgIGlmIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YKQog
ICAgICAgICB3aWR0aCAtPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7Ci0gICAgcmV0
dXJuIG1heCgwLCB3aWR0aCk7CisgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCB3aWR0aCk7
CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWln
aHQoTGF5b3V0VW5pdCBoZWlnaHQpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmJveFNpemlu
ZygpID09IEJPUkRFUl9CT1gpCiAgICAgICAgIGhlaWdodCAtPSBib3JkZXJBbmRQYWRkaW5nTG9n
aWNhbEhlaWdodCgpOwotICAgIHJldHVybiBtYXgoMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gbWF4
PExheW91dFVuaXQ+KDAsIGhlaWdodCk7CiB9CiAKIC8vIEhpdCBUZXN0aW5nCkBAIC05NjksMTMg
Kzk2OSwxMyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRNYXNrSW1hZ2VzKGNvbnN0IFBhCiAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi1JbnRS
ZWN0IFJlbmRlckJveDo6bWFza0NsaXBSZWN0KCkKK0xheW91dFJlY3QgUmVuZGVyQm94OjptYXNr
Q2xpcFJlY3QoKQogewotICAgIEludFJlY3QgYmJveCA9IGJvcmRlckJveFJlY3QoKTsKKyAgICBM
YXlvdXRSZWN0IGJib3ggPSBib3JkZXJCb3hSZWN0KCk7CiAgICAgaWYgKHN0eWxlKCktPm1hc2tC
b3hJbWFnZSgpLmltYWdlKCkpCiAgICAgICAgIHJldHVybiBiYm94OwogICAgIAotICAgIEludFJl
Y3QgcmVzdWx0OworICAgIExheW91dFJlY3QgcmVzdWx0OwogICAgIGZvciAoY29uc3QgRmlsbExh
eWVyKiBtYXNrTGF5ZXIgPSBzdHlsZSgpLT5tYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xh
eWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2Uo
KSkgewogICAgICAgICAgICAgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkgZ2VvbWV0cnk7CkBAIC0x
MDM4LDcgKzEwMzgsNyBAQCB2b2lkIFJlbmRlckJveDo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFn
CiAKIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKFdyYXBwZWRJbWFn
ZVB0ciBpbWFnZSwgY29uc3QgRmlsbExheWVyKiBsYXllcnMsIGJvb2wgZHJhd2luZ0JhY2tncm91
bmQpCiB7Ci0gICAgSW50UmVjdCByZW5kZXJlclJlY3Q7CisgICAgTGF5b3V0UmVjdCByZW5kZXJl
clJlY3Q7CiAgICAgUmVuZGVyQm94KiBsYXllclJlbmRlcmVyID0gMDsKIAogICAgIGZvciAoY29u
c3QgRmlsbExheWVyKiBjdXJMYXllciA9IGxheWVyczsgY3VyTGF5ZXI7IGN1ckxheWVyID0gY3Vy
TGF5ZXItPm5leHQoKSkgewpAQCAtMTA1MCw4ICsxMDUwLDggQEAgYm9vbCBSZW5kZXJCb3g6OnJl
cGFpbnRMYXllclJlY3RzRm9ySW1hZwogICAgICAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJh
Y2tncm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IHZpZXcoKTsK
IAotICAgICAgICAgICAgICAgICAgICBpbnQgcnc7Ci0gICAgICAgICAgICAgICAgICAgIGludCBy
aDsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBydzsKKyAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCByaDsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB0b1JlbmRlclZpZXcobGF5ZXJSZW5kZXJlciktPmZyYW1lVmlldygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBydyA9IGZyYW1lVmlldy0+Y29udGVudHNXaWR0aCgpOwpA
QCAtMTA2MCw3ICsxMDYwLDcgQEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9y
SW1hZwogICAgICAgICAgICAgICAgICAgICAgICAgcncgPSBsYXllclJlbmRlcmVyLT53aWR0aCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgcmggPSBsYXllclJlbmRlcmVyLT5oZWlnaHQoKTsK
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZW5kZXJlclJlY3Qg
PSBJbnRSZWN0KC1sYXllclJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksCisgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyUmVjdCA9IExheW91dFJlY3QoLWxheWVyUmVuZGVyZXItPm1hcmdpbkxlZnQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIC1sYXllclJlbmRlcmVyLT5tYXJnaW5Ub3AoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1heChsYXllclJlbmRlcmVyLT53aWR0aCgpICsgbGF5
ZXJSZW5kZXJlci0+bWFyZ2luTGVmdCgpICsgbGF5ZXJSZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAr
IGxheWVyUmVuZGVyZXItPmJvcmRlckxlZnQoKSArIGxheWVyUmVuZGVyZXItPmJvcmRlclJpZ2h0
KCksIHJ3KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1heChsYXllclJlbmRlcmVyLT5oZWln
aHQoKSArIGxheWVyUmVuZGVyZXItPm1hcmdpblRvcCgpICsgbGF5ZXJSZW5kZXJlci0+bWFyZ2lu
Qm90dG9tKCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGxheWVyUmVuZGVyZXItPmJv
cmRlckJvdHRvbSgpLCByaCkpOwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAgYm9vbCBSZW5kZXJCb3g6
OnB1c2hDb250ZW50c0NsaXAoUGFpbnRJbgogICAgIEludFJlY3QgY2xpcFJlY3QoaXNDb250cm9s
Q2xpcCA/IGNvbnRyb2xDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkgOiBvdmVyZmxvd0NsaXBS
ZWN0KGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsK
ICAgICBpZiAoc3R5bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpCi0gICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihJ
bnRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKSk7CisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihM
YXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKSk7CiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmNsaXAoY2xpcFJlY3QpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE0NCwxMiAr
MTE0NCwxMiBAQCB2b2lkIFJlbmRlckJveDo6cG9wQ29udGVudHNDbGlwKFBhaW50SW5mCiAgICAg
ICAgIHBhaW50SW5mby5waGFzZSA9IG9yaWdpbmFsUGhhc2U7CiB9CiAKLUludFJlY3QgUmVuZGVy
Qm94OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92
ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpCiB7CiAgICAgLy8gRklYTUU6IFdoZW4gb3ZlcmZs
b3ctY2xpcCAoQ1NTMykgaXMgaW1wbGVtZW50ZWQsIHdlJ2xsIG9idGFpbiB0aGUgcHJvcGVydHkK
ICAgICAvLyBoZXJlLgotICAgIEludFJlY3QgY2xpcFJlY3QobG9jYXRpb24gKyBJbnRTaXplKGJv
cmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpLAotICAgICAgICBzaXplKCkgLSBJbnRTaXplKGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsK
KyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0KGxvY2F0aW9uICsgTGF5b3V0U2l6ZShib3JkZXJMZWZ0
KCksIGJvcmRlclRvcCgpKSwKKyAgICAgICAgc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0
KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAg
ICAvLyBTdWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCiAgICAgaWYgKGxh
eWVyKCkpCkBAIC0xMTU4LDExICsxMTU4LDExIEBAIEludFJlY3QgUmVuZGVyQm94OjpvdmVyZmxv
d0NsaXBSZWN0KGNvbnMKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CiAKLUludFJlY3QgUmVuZGVy
Qm94OjpjbGlwUmVjdChjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCitMYXlvdXRSZWN0IFJlbmRl
ckJveDo6Y2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKQogewotICAgIEludFJl
Y3QgY2xpcFJlY3QobG9jYXRpb24sIHNpemUoKSk7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdChs
b2NhdGlvbiwgc2l6ZSgpKTsKICAgICBpZiAoIXN0eWxlKCktPmNsaXBMZWZ0KCkuaXNBdXRvKCkp
IHsKLSAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwTGVmdCgpLmNhbGNWYWx1ZSh3aWR0aCgp
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjID0gc3R5bGUoKS0+Y2xpcExlZnQoKS5jYWxjVmFsdWUo
d2lkdGgoKSk7CiAgICAgICAgIGNsaXBSZWN0Lm1vdmUoYywgMCk7CiAgICAgICAgIGNsaXBSZWN0
LmNvbnRyYWN0KGMsIDApOwogICAgIH0KQEAgLTExNzEsNyArMTE3MSw3IEBAIEludFJlY3QgUmVu
ZGVyQm94OjpjbGlwUmVjdChjb25zdCBJbnRQb2kKICAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qo
d2lkdGgoKSAtIHN0eWxlKCktPmNsaXBSaWdodCgpLmNhbGNWYWx1ZSh3aWR0aCgpKSwgMCk7CiAK
ICAgICBpZiAoIXN0eWxlKCktPmNsaXBUb3AoKS5pc0F1dG8oKSkgewotICAgICAgICBpbnQgYyA9
IHN0eWxlKCktPmNsaXBUb3AoKS5jYWxjVmFsdWUoaGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRV
bml0IGMgPSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsKICAgICAgICAg
Y2xpcFJlY3QubW92ZSgwLCBjKTsKICAgICAgICAgY2xpcFJlY3QuY29udHJhY3QoMCwgYyk7CiAg
ICAgfQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmNsaXBSZWN0KGNv
bnN0IEludFBvaQogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotaW50IFJlbmRlckJveDo6Y29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0CitMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0CiB7
CiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKHNocmlu
a1RvQXZvaWRGbG9hdHMoKSkKQEAgLTExOTAsNyArMTE5MCw3IEBAIGludCBSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWQKICAgICByZXR1cm4gY2ItPmF2YWlsYWJsZUxvZ2ljYWxX
aWR0aCgpOwogfQogCi1pbnQgUmVuZGVyQm94OjpwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6cGVycGVuZGljdWxh
ckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdAogewogICAgIFJlbmRlckJsb2Nr
KiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIFJlbmRlclN0eWxlKiBjb250YWluaW5nQmxv
Y2tTdHlsZSA9IGNiLT5zdHlsZSgpOwpAQCAtMTM2Niw3ICsxMzY2LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OnBvc2l0aW9uTGluZUJveChJbmxpbmVCbwogICAgICAgICBib3gtPnJlbW92ZSgpOwogICAg
ICAgICBib3gtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7CiAgICAgfSBlbHNlIGlmIChpc1JlcGxh
Y2VkKCkpIHsKLSAgICAgICAgc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQo
Ym94LT54KCksIGJveC0+eSgpKSkpOworICAgICAgICBzZXRMb2NhdGlvbihyb3VuZGVkTGF5b3V0
UG9pbnQoRmxvYXRQb2ludChib3gtPngoKSwgYm94LT55KCkpKSk7CiAgICAgICAgIG1faW5saW5l
Qm94V3JhcHBlciA9IGJveDsKICAgICB9CiB9CkBAIC0xMzgxLDEyICsxMzgxLDEyIEBAIHZvaWQg
UmVuZGVyQm94OjpkZWxldGVMaW5lQm94V3JhcHBlcigpCiAgICAgfQogfQogCi1JbnRSZWN0IFJl
bmRlckJveDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6Y2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
ICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKQotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgSW50UmVj
dCByID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgTGF5b3V0UmVjdCByID0gdmlzdWFsT3Zl
cmZsb3dSZWN0KCk7CiAKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgIGlmICh2KSB7
CkBAIC0xNDEyLDcgKzE0MTIsNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6Y2xpcHBlZE92ZXJmbG93
UmVjdEZvCiAgICAgcmV0dXJuIHI7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qm
IHJlY3QsIGJvb2wgZml4ZWQpIGNvbnN0Cit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JS
ZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0
JiByZWN0LCBib29sIGZpeGVkKSBjb25zdAogewogICAgIC8vIFRoZSByZWN0IHdlIGNvbXB1dGUg
YXQgZWFjaCBzdGVwIGlzIHNoaWZ0ZWQgYnkgb3VyIHgveSBvZmZzZXQgaW4gdGhlIHBhcmVudCBj
b250YWluZXIncyBjb29yZGluYXRlIHNwYWNlLgogICAgIC8vIE9ubHkgd2hlbiB3ZSBjcm9zcyBh
IHdyaXRpbmcgbW9kZSBib3VuZGFyeSB3aWxsIHdlIGhhdmUgdG8gcG9zc2libHkgZmxpcEZvcldy
aXRpbmdNb2RlICh0byBjb252ZXJ0IGludG8gYSBtb3JlIGFwcHJvcHJpYXRlCkBAIC0xNDU3LDcg
KzE0NTcsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAKICAg
ICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgIGZs
aXBGb3JXcml0aW5nTW9kZShyZWN0KTsKLSAgICBJbnRQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2Nh
dGlvbigpOworICAgIExheW91dFBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CiAgICAg
dG9wTGVmdC5tb3ZlKHgoKSwgeSgpKTsKIAogICAgIEVQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxl
KCktPnBvc2l0aW9uKCk7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29t
cHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAgICAgaWYgKG8tPmlzQmxvY2tGbG93KCkgJiYgcG9zaXRp
b24gIT0gQWJzb2x1dGVQb3NpdGlvbiAmJiBwb3NpdGlvbiAhPSBGaXhlZFBvc2l0aW9uKSB7CiAg
ICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2sobyk7CiAgICAgICAgIGlmIChj
Yi0+aGFzQ29sdW1ucygpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHRvcExl
ZnQsIHJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcmVwYWludFJlY3QodG9w
TGVmdCwgcmVjdC5zaXplKCkpOwogICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1bW5z
KHJlcGFpbnRSZWN0KTsKICAgICAgICAgICAgIHRvcExlZnQgPSByZXBhaW50UmVjdC5sb2NhdGlv
bigpOwogICAgICAgICAgICAgcmVjdCA9IHJlcGFpbnRSZWN0OwpAQCAtMTUwMiw4ICsxNTAyLDgg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZQogICAgICAgICAvLyBh
bnl3YXkgaWYgaXRzIHNpemUgZG9lcyBjaGFuZ2UuCiAgICAgICAgIHRvcExlZnQgLT0gY29udGFp
bmVyQm94LT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsgLy8gRm9yIG92ZXJmbG93
OmF1dG8vc2Nyb2xsL2hpZGRlbi4KIAotICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHRvcExl
ZnQsIHJlY3Quc2l6ZSgpKTsKLSAgICAgICAgSW50UmVjdCBib3hSZWN0KEludFBvaW50KCksIGNv
bnRhaW5lckJveC0+bGF5ZXIoKS0+c2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50
UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7CisgICAgICAgIExheW91dFJlY3QgYm94UmVjdChM
YXlvdXRQb2ludCgpLCBjb250YWluZXJCb3gtPmxheWVyKCktPnNpemUoKSk7CiAgICAgICAgIHJl
Y3QgPSBpbnRlcnNlY3Rpb24ocmVwYWludFJlY3QsIGJveFJlY3QpOwogICAgICAgICBpZiAocmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTEyLDcgKzE1MTIsNyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAKICAgICBpZiAoY29udGFp
bmVyU2tpcHBlZCkgewogICAgICAgICAvLyBJZiB0aGUgcmVwYWludENvbnRhaW5lciBpcyBiZWxv
dyBvLCB0aGVuIHdlIG5lZWQgdG8gbWFwIHRoZSByZWN0IGludG8gcmVwYWludENvbnRhaW5lcidz
IGNvb3JkaW5hdGVzLgotICAgICAgICBJbnRTaXplIGNvbnRhaW5lck9mZnNldCA9IHJlcGFpbnRD
b250YWluZXItPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihvKTsKKyAgICAgICAgTGF5b3V0
U2l6ZSBjb250YWluZXJPZmZzZXQgPSByZXBhaW50Q29udGFpbmVyLT5vZmZzZXRGcm9tQW5jZXN0
b3JDb250YWluZXIobyk7CiAgICAgICAgIHJlY3QubW92ZSgtY29udGFpbmVyT2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NzcsOSArMTU3Nyw5IEBAIHZvaWQgUmVuZGVyQm94
Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICBMZW5ndGggbG9naWNhbFdpZHRoTGVuZ3RoID0g
KHRyZWF0QXNSZXBsYWNlZCkgPyBMZW5ndGgoY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKCks
IEZpeGVkKSA6IHN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNi
ID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1h
eCgwLCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkpOworICAgIExheW91
dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIGNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSk7CiAgICAgYm9vbCBoYXNQZXJwZW5kaWN1
bGFyQ29udGFpbmluZ0Jsb2NrID0gY2ItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKTsKLSAgICBpbnQgY29udGFpbmVyV2lkdGhJbklubGluZURp
cmVjdGlvbiA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5l
cldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gPSBjb250YWluZXJMb2dpY2FsV2lkdGg7CiAgICAgaWYg
KGhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spCiAgICAgICAgIGNvbnRhaW5lcldpZHRo
SW5JbmxpbmVEaXJlY3Rpb24gPSBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhl
aWdodCgpOwogICAgIApAQCAtMTU4OCw3ICsxNTg4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVMb2dpY2FsV2lkdGgoKQogICAgICAgICBzZXRNYXJnaW5TdGFydChzdHlsZSgpLT5tYXJnaW5T
dGFydCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpKTsKICAgICAgICAgc2V0
TWFyZ2luRW5kKHN0eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dp
Y2FsV2lkdGgpKTsKICAgICAgICAgaWYgKHRyZWF0QXNSZXBsYWNlZCkKLSAgICAgICAgICAgIHNl
dExvZ2ljYWxXaWR0aChtYXgobG9naWNhbFdpZHRoTGVuZ3RoLnZhbHVlKCkgKyBib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbFdpZHRoKCksIG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpKSk7CisgICAg
ICAgICAgICBzZXRMb2dpY2FsV2lkdGgobWF4PExheW91dFVuaXQ+KGxvZ2ljYWxXaWR0aExlbmd0
aC5jYWxjRmxvYXRWYWx1ZSgwKSArIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTYwMSw3ICsxNjAxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQog
CiAgICAgICAgIC8vIENhbGN1bGF0ZSBNYXhMb2dpY2FsV2lkdGgKICAgICAgICAgaWYgKCFzdHls
ZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBpbnQg
bWF4TG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKE1heExvZ2ljYWxXaWR0
aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7CisgICAgICAgICAgICBMYXlvdXRV
bml0IG1heExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhNYXhMb2dpY2Fs
V2lkdGgsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24pOwogICAgICAgICAgICAgaWYg
KGxvZ2ljYWxXaWR0aCgpID4gbWF4TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgc2V0
TG9naWNhbFdpZHRoKG1heExvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgbG9naWNhbFdp
ZHRoTGVuZ3RoID0gc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCk7CkBAIC0xNjA5LDcgKzE2MDks
NyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBDYWxjdWxhdGUgTWluTG9naWNhbFdpZHRoCi0gICAgICAgIGludCBtaW5Mb2dp
Y2FsV2lkdGggPSBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTWluTG9naWNhbFdpZHRoLCBjb250
YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5Mb2dp
Y2FsV2lkdGggPSBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTWluTG9naWNhbFdpZHRoLCBjb250
YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aCgp
IDwgbWluTG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICBzZXRMb2dpY2FsV2lkdGgobWluTG9n
aWNhbFdpZHRoKTsKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aExlbmd0aCA9IHN0eWxlKCktPmxv
Z2ljYWxNaW5XaWR0aCgpOwpAQCAtMTcyMCw3ICsxNzIwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVJbmxpbmVEaXJlY3Rpb25NYQogICAgIC8vIENhc2UgT25lOiBUaGUgb2JqZWN0IGlzIGJl
aW5nIGNlbnRlcmVkIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgYXZhaWxhYmxlIGxvZ2ljYWwg
d2lkdGguCiAgICAgaWYgKChtYXJnaW5TdGFydExlbmd0aC5pc0F1dG8oKSAmJiBtYXJnaW5FbmRM
ZW5ndGguaXNBdXRvKCkgJiYgY2hpbGRXaWR0aCA8IGNvbnRhaW5lcldpZHRoKQogICAgICAgICB8
fCAoIW1hcmdpblN0YXJ0TGVuZ3RoLmlzQXV0bygpICYmICFtYXJnaW5FbmRMZW5ndGguaXNBdXRv
KCkgJiYgY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VO
VEVSKSkgewotICAgICAgICBjb250YWluaW5nQmxvY2stPnNldE1hcmdpblN0YXJ0Rm9yQ2hpbGQo
dGhpcywgbWF4KDAsIChjb250YWluZXJXaWR0aCAtIGNoaWxkV2lkdGgpIC8gMikpOworICAgICAg
ICBjb250YWluaW5nQmxvY2stPnNldE1hcmdpblN0YXJ0Rm9yQ2hpbGQodGhpcywgbWF4PExheW91
dFVuaXQ+KDAsIChjb250YWluZXJXaWR0aCAtIGNoaWxkV2lkdGgpIC8gMikpOwogICAgICAgICBj
b250YWluaW5nQmxvY2stPnNldE1hcmdpbkVuZEZvckNoaWxkKHRoaXMsIGNvbnRhaW5lcldpZHRo
IC0gY2hpbGRXaWR0aCAtIGNvbnRhaW5pbmdCbG9jay0+bWFyZ2luU3RhcnRGb3JDaGlsZCh0aGlz
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IApAQCAtMTgwNSw2ICsxODA1LDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgTGF5b3V0VW5pdCBoZWln
aHRSZXN1bHQ7CiAgICAgICAgIGlmIChjaGVja01pbk1heEhlaWdodCkgewogICAgICAgICAgICAg
aGVpZ2h0UmVzdWx0ID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSA8IDAgb3Igcm91Z2hseUVxdWFs
cyB3aGVuIHdlIG1vdmUgdG8gZmxvYXQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNDgKICAgICAgICAgICAgIGlmIChoZWlnaHRSZXN1bHQgPT0gLTEpCiAg
ICAgICAgICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gbG9naWNhbEhlaWdodCgpOwogICAgICAgICAg
ICAgTGF5b3V0VW5pdCBtaW5IID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5s
b2dpY2FsTWluSGVpZ2h0KCkpOyAvLyBMZWF2ZSBhcyAtMSBpZiB1bnNldC4KQEAgLTE4NjAsOSAr
MTg2MSwxMCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnCiAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gLTE7CiAgICAgaWYgKCFoLmlzQXV0bygpKSB7CiAg
ICAgICAgIGlmIChoLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBoLnZh
bHVlKCk7CisgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gaC5jYWxjRmxvYXRWYWx1ZSgwKTsK
ICAgICAgICAgZWxzZSBpZiAoaC5pc1BlcmNlbnQoKSkKICAgICAgICAgICAgIGxvZ2ljYWxIZWln
aHQgPSBjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoaCk7CisgICAgICAgIC8vIEZJWE1F
OiBVc2UgPCAwIG9yIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgIGlmIChs
b2dpY2FsSGVpZ2h0ICE9IC0xKSB7CiAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gY29tcHV0
ZUJvcmRlckJveExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICByZXR1
cm4gbG9naWNhbEhlaWdodDsKQEAgLTE5MjcsNiArMTkyOSw3IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94Ojpjb21wdXRlUGVyY2VudGFnZUwKICAgICBlbHNlIGlmIChjYi0+c3R5bGUoKS0+bG9naWNh
bEhlaWdodCgpLmlzUGVyY2VudCgpICYmICFpc1Bvc2l0aW9uZWRXaXRoU3BlY2lmaWVkSGVpZ2h0
KSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVjdXIgYW5kIGNvbXB1dGUgdGhlIHBlcmNlbnRh
Z2UgaGVpZ2h0IGZvciBvdXIgY29udGFpbmluZyBibG9jay4KICAgICAgICAgcmVzdWx0ID0gY2It
PmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjYi0+c3R5bGUoKS0+bG9naWNhbEhlaWdo
dCgpKTsKKyAgICAgICAgLy8gRklYTUU6IFVzZSA8IDAgb3Igcm91Z2hseUVxdWFscyB3aGVuIHdl
IG1vdmUgdG8gZmxvYXQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjYxNDgKICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKICAgICAgICAgICAgIHJlc3VsdCA9
IGNiLT5jb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQocmVzdWx0KTsKICAgICB9IGVsc2Ug
aWYgKGNiLT5pc1JlbmRlclZpZXcoKSB8fCAoY2ItPmlzQm9keSgpICYmIGRvY3VtZW50KCktPmlu
UXVpcmtzTW9kZSgpKSB8fCBpc1Bvc2l0aW9uZWRXaXRoU3BlY2lmaWVkSGVpZ2h0KSB7CkBAIC0x
OTQxLDYgKzE5NDQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VM
CiAgICAgICAgIC8vIGFsd2F5cy4gIE5vdGUgd2UgY291bGQgb25seSBoaXQgdGhpcyBjYXNlIGJ5
IHJlY3VycmluZyBpbnRvIGNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodCBvbiBhIHBvc2l0
aW9uZWQgY29udGFpbmluZyBibG9jay4KICAgICAgICAgcmVzdWx0ID0gY2ItPmNvbXB1dGVDb250
ZW50Qm94TG9naWNhbEhlaWdodChjYi0+YXZhaWxhYmxlTG9naWNhbEhlaWdodCgpKTsKIAorICAg
IC8vIEZJWE1FOiBVc2UgPCAwIG9yIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0
LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAg
aWYgKHJlc3VsdCAhPSAtMSkgewogICAgICAgICByZXN1bHQgPSBoZWlnaHQuY2FsY1ZhbHVlKHJl
c3VsdCk7CiAgICAgICAgIGlmIChpbmNsdWRlQm9yZGVyUGFkZGluZykgewpAQCAtMjEwOSw3ICsy
MTEzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcgogCiAgICAg
Ly8gTWFyZ2lucyBhcmUgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGxvZ2ljYWwgd2lk
dGggb2YKICAgICAvLyB0aGUgY29udGFpbmluZyBibG9jayAoOC4zKQotICAgIGludCBjdyA9IGNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKTsKKyAgICBMYXlvdXRVbml0IGN3
ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwogCiAgICAgUmVuZGVy
U3R5bGUqIGNvbnRhaW5pbmdCbG9ja1N0eWxlID0gY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpOwog
ICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luQmVmb3JlRm9yQ2hpbGQodGhpcywgc3R5bGUo
KS0+bWFyZ2luQmVmb3JlVXNpbmcoY29udGFpbmluZ0Jsb2NrU3R5bGUpLmNhbGNNaW5WYWx1ZShj
dykpOwpAQCAtMjEzNCw4ICsyMTM4LDggQEAgaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZAogICAgIGlmICghZmlyc3QgfHwgIWxhc3QpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgaW50IGZyb21MZWZ0OwotICAgIGludCBmcm9tUmlnaHQ7CisgICAgTGF5b3V0VW5pdCBm
cm9tTGVmdDsKKyAgICBMYXlvdXRVbml0IGZyb21SaWdodDsKICAgICBpZiAoY29udGFpbmluZ0Js
b2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgZnJvbUxl
ZnQgPSBmaXJzdC0+bG9naWNhbExlZnQoKSArIGZpcnN0LT5ib3JkZXJMb2dpY2FsTGVmdCgpOwog
ICAgICAgICBmcm9tUmlnaHQgPSBsYXN0LT5sb2dpY2FsTGVmdCgpICsgbGFzdC0+bG9naWNhbFdp
ZHRoKCkgLSBsYXN0LT5ib3JkZXJMb2dpY2FsUmlnaHQoKTsKQEAgLTIxNDQsNyArMjE0OCw3IEBA
IGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWQKICAgICAgICAgZnJvbUxl
ZnQgPSBsYXN0LT5sb2dpY2FsTGVmdCgpICsgbGFzdC0+Ym9yZGVyTG9naWNhbExlZnQoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gbWF4KDAsIChmcm9tUmlnaHQgLSBmcm9tTGVmdCkpOworICAgIHJl
dHVybiBtYXg8TGF5b3V0VW5pdD4oMCwgZnJvbVJpZ2h0IC0gZnJvbUxlZnQpOwogfQogCiBpbnQg
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmluZ0Jsb2NrLCBib29sIGNoZWNrRm9yUGVy
cGVuZGljdWxhcldyaXRpbmdNb2RlKSBjb25zdApAQCAtMjE2NSw4ICsyMTY5LDggQEAgaW50IFJl
bmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaQogICAgIGlmICghZmlyc3QgfHwgIWxh
c3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGhlaWdodFJlc3VsdDsKLSAgICBJbnRS
ZWN0IGJvdW5kaW5nQm94ID0gZmxvdy0+bGluZXNCb3VuZGluZ0JveCgpOworICAgIExheW91dFVu
aXQgaGVpZ2h0UmVzdWx0OworICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBmbG93LT5saW5l
c0JvdW5kaW5nQm94KCk7CiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gYm91bmRpbmdCb3guaGVpZ2h0KCk7
CiAgICAgZWxzZQpAQCAtMjE4Myw3ICsyMTg3LDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGlu
ZVN0YXRpY0Rpc3RhbmNlKAogCiAgICAgLy8gRklYTUU6IFRoZSBzdGF0aWMgZGlzdGFuY2UgY29t
cHV0YXRpb24gaGFzIG5vdCBiZWVuIHBhdGNoZWQgZm9yIG1peGVkIHdyaXRpbmcgbW9kZXMgeWV0
LgogICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0gTFRSKSB7Ci0gICAgICAgIGludCBzdGF0
aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpIC0gY29u
dGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxMZWZ0KCk7CisgICAgICAgIExheW91dFVuaXQgc3Rh
dGljUG9zaXRpb24gPSBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljSW5saW5lUG9zaXRpb24oKSAtIGNv
bnRhaW5lckJsb2NrLT5ib3JkZXJMb2dpY2FsTGVmdCgpOwogICAgICAgICBmb3IgKFJlbmRlck9i
amVjdCogY3VyciA9IGNoaWxkLT5wYXJlbnQoKTsgY3VyciAmJiBjdXJyICE9IGNvbnRhaW5lckJs
b2NrOyBjdXJyID0gY3Vyci0+Y29udGFpbmVyKCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyLT5p
c0JveCgpKQogICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IHRvUmVuZGVyQm94KGN1
cnIpLT5sb2dpY2FsTGVmdCgpOwpAQCAtMjE5MSw3ICsyMTk1LDcgQEAgc3RhdGljIHZvaWQgY29t
cHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKAogICAgICAgICBsb2dpY2FsTGVmdC5zZXRWYWx1ZShG
aXhlZCwgc3RhdGljUG9zaXRpb24pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlbmRlckJveCog
ZW5jbG9zaW5nQm94ID0gY2hpbGQtPnBhcmVudCgpLT5lbmNsb3NpbmdCb3goKTsKLSAgICAgICAg
aW50IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9u
KCkgKyBjb250YWluZXJMb2dpY2FsV2lkdGggKyBjb250YWluZXJCbG9jay0+Ym9yZGVyTG9naWNh
bFJpZ2h0KCk7CisgICAgICAgIExheW91dFVuaXQgc3RhdGljUG9zaXRpb24gPSBjaGlsZC0+bGF5
ZXIoKS0+c3RhdGljSW5saW5lUG9zaXRpb24oKSArIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCArIGNv
bnRhaW5lckJsb2NrLT5ib3JkZXJMb2dpY2FsUmlnaHQoKTsKICAgICAgICAgc3RhdGljUG9zaXRp
b24gLT0gZW5jbG9zaW5nQm94LT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGN1cnIgPSBlbmNsb3NpbmdCb3g7IGN1cnIgJiYgY3VyciAhPSBjb250YWluZXJCbG9j
azsgY3VyciA9IGN1cnItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNC
b3goKSkKQEAgLTIyMzcsMTggKzIyNDEsMTggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbAogICAgIC8vIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5lLgogICAgIGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoY29udGFpbmVyKCkpOwogICAgIAotICAgIGNvbnN0IGludCBjb250YWluZXJMb2dp
Y2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRh
aW5lckJsb2NrKTsKKyAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9
IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2sp
OwogCiAgICAgLy8gVG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2RlIHVzZSB0aGUgcGFyZW50
J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9mIHRoZSB0aGUgY29udGFp
bmVyIGJsb2NrJ3MuCiAgICAgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSAoZG9j
dW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpID8gcGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigp
IDogY29udGFpbmVyQmxvY2stPnN0eWxlKCktPmRpcmVjdGlvbigpOwogCiAgICAgYm9vbCBpc0hv
cml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgIGNvbnN0IGludCBib3Jk
ZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CisgICAgY29u
c3QgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNh
bFdpZHRoKCk7CiAgICAgY29uc3QgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0ID0gaXNIb3Jpem9u
dGFsID8gc3R5bGUoKS0+bWFyZ2luTGVmdCgpIDogc3R5bGUoKS0+bWFyZ2luVG9wKCk7CiAgICAg
Y29uc3QgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxSaWdodCA9IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCkt
Pm1hcmdpblJpZ2h0KCkgOiBzdHlsZSgpLT5tYXJnaW5Cb3R0b20oKTsKLSAgICBpbnQmIG1hcmdp
bkxvZ2ljYWxMZWZ0QWxpYXMgPSBpc0hvcml6b250YWwgPyBtX21hcmdpbkxlZnQgOiBtX21hcmdp
blRvcDsKLSAgICBpbnQmIG1hcmdpbkxvZ2ljYWxSaWdodEFsaWFzID0gaXNIb3Jpem9udGFsID8g
bV9tYXJnaW5SaWdodCA6IG1fbWFyZ2luQm90dG9tOworICAgIExheW91dFVuaXQmIG1hcmdpbkxv
Z2ljYWxMZWZ0QWxpYXMgPSBpc0hvcml6b250YWwgPyBtX21hcmdpbkxlZnQgOiBtX21hcmdpblRv
cDsKKyAgICBMYXlvdXRVbml0JiBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGlzSG9yaXpvbnRh
bCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsKIAogICAgIExlbmd0aCBsb2dpY2Fs
TGVmdCA9IHN0eWxlKCktPmxvZ2ljYWxMZWZ0KCk7CiAgICAgTGVuZ3RoIGxvZ2ljYWxSaWdodCA9
IHN0eWxlKCktPmxvZ2ljYWxSaWdodCgpOwpAQCAtMjI4Miw4ICsyMjg2LDggQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIGNvbXB1dGVJbmxpbmVTdGF0aWNE
aXN0YW5jZShsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0LCB0aGlzLCBjb250YWluZXJCbG9jaywg
Y29udGFpbmVyTG9naWNhbFdpZHRoLCBjb250YWluZXJEaXJlY3Rpb24pOwogICAgIAogICAgIC8v
IENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ3dpZHRoJyBjYXNlLgot
ICAgIGludCBsb2dpY2FsV2lkdGhSZXN1bHQ7Ci0gICAgaW50IGxvZ2ljYWxMZWZ0UmVzdWx0Owor
ICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoUmVzdWx0OworICAgIExheW91dFVuaXQgbG9naWNh
bExlZnRSZXN1bHQ7CiAgICAgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhzdHls
ZSgpLT5sb2dpY2FsV2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxX
aWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9naWNhbExlZnQsIGxvZ2ljYWxSaWdodCwgbWFyZ2luTG9naWNhbExlZnQsIG1h
cmdpbkxvZ2ljYWxSaWdodCwKQEAgLTIyOTMsMTAgKzIyOTcsMTAgQEAgdm9pZCBSZW5kZXJCb3g6
OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQg
ZXF1YXRpb24gdmFsdWVzIGZvciAnbWF4LXdpZHRoJyBjYXNlLgogICAgIGlmICghc3R5bGUoKS0+
bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBpbnQgbWF4TG9naWNh
bFdpZHRoOwotICAgICAgICBpbnQgbWF4TWFyZ2luTG9naWNhbExlZnQ7Ci0gICAgICAgIGludCBt
YXhNYXJnaW5Mb2dpY2FsUmlnaHQ7Ci0gICAgICAgIGludCBtYXhMb2dpY2FsTGVmdFBvczsKKyAg
ICAgICAgTGF5b3V0VW5pdCBtYXhMb2dpY2FsV2lkdGg7CisgICAgICAgIExheW91dFVuaXQgbWF4
TWFyZ2luTG9naWNhbExlZnQ7CisgICAgICAgIExheW91dFVuaXQgbWF4TWFyZ2luTG9naWNhbFJp
Z2h0OworICAgICAgICBMYXlvdXRVbml0IG1heExvZ2ljYWxMZWZ0UG9zOwogCiAgICAgICAgIGNv
bXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRo
KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9naWNhbFdpZHRoLCBib3JkZXJz
UGx1c1BhZGRpbmcsCkBAIC0yMzEzLDEwICsyMzE3LDEwIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWwKIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0
aW9uIHZhbHVlcyBmb3IgJ21pbi13aWR0aCcgY2FzZS4KICAgICBpZiAoIXN0eWxlKCktPmxvZ2lj
YWxNaW5XaWR0aCgpLmlzWmVybygpKSB7Ci0gICAgICAgIGludCBtaW5Mb2dpY2FsV2lkdGg7Ci0g
ICAgICAgIGludCBtaW5NYXJnaW5Mb2dpY2FsTGVmdDsKLSAgICAgICAgaW50IG1pbk1hcmdpbkxv
Z2ljYWxSaWdodDsKLSAgICAgICAgaW50IG1pbkxvZ2ljYWxMZWZ0UG9zOworICAgICAgICBMYXlv
dXRVbml0IG1pbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5Mb2dp
Y2FsTGVmdDsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5Mb2dpY2FsUmlnaHQ7CisgICAg
ICAgIExheW91dFVuaXQgbWluTG9naWNhbExlZnRQb3M7CiAKICAgICAgICAgY29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKSwgY29udGFp
bmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGgsIGJvcmRlcnNQbHVzUGFkZGlu
ZywKQEAgLTIzNDQsNyArMjM0OCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWwKICAgICBzZXRMb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKCkgKyBib3JkZXJzUGx1
c1BhZGRpbmcpOwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVk
T2Zmc2V0KGludCYgbG9naWNhbExlZnRQb3MsIGNvbnN0IFJlbmRlckJveCogY2hpbGQsIGludCBs
b2dpY2FsV2lkdGhWYWx1ZSwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJs
b2NrLCBpbnQgY29udGFpbmVyTG9naWNhbFdpZHRoKQorc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2lj
YWxMZWZ0UG9zaXRpb25lZE9mZnNldChMYXlvdXRVbml0JiBsb2dpY2FsTGVmdFBvcywgY29uc3Qg
UmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhWYWx1ZSwgY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLCBMYXlvdXRVbml0IGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCkKIHsKICAgICAvLyBEZWFsIHdpdGggZGlmZmVyaW5nIHdyaXRpbmcgbW9kZXMg
aGVyZS4gIE91ciBvZmZzZXQgbmVlZHMgdG8gYmUgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBj
b29yZGluYXRlIHNwYWNlLiBJZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBmbGlwcGVkCiAgICAg
Ly8gYWxvbmcgdGhpcyBheGlzLCB0aGVuIHdlIG5lZWQgdG8gZmxpcCB0aGUgY29vcmRpbmF0ZS4g
IFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGJvdGggYSBm
bGlwcGVkIG1vZGUgYW5kIHBlcnBlbmRpY3VsYXIgdG8gdXMuCkBAIC0yMzU2LDE1ICsyMzYwLDE1
IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsTGVmdFBvc2l0aW9uZWQKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2lj
YWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLCBUZXh0
RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb250YWluZXJMb2dpY2FsV2lkdGgsIGludCBi
b3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5p
dCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMZW5ndGggbG9naWNhbExlZnQsIExlbmd0aCBsb2dpY2FsUmlnaHQs
IExlbmd0aCBtYXJnaW5Mb2dpY2FsTGVmdCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxSaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbG9n
aWNhbFdpZHRoVmFsdWUsIGludCYgbWFyZ2luTG9naWNhbExlZnRWYWx1ZSwgaW50JiBtYXJnaW5M
b2dpY2FsUmlnaHRWYWx1ZSwgaW50JiBsb2dpY2FsTGVmdFBvcykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQmIGxvZ2ljYWxXaWR0
aFZhbHVlLCBMYXlvdXRVbml0JiBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlLCBMYXlvdXRVbml0JiBt
YXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSwgTGF5b3V0VW5pdCYgbG9naWNhbExlZnRQb3MpCiB7CiAg
ICAgLy8gJ2xlZnQnIGFuZCAncmlnaHQnIGNhbm5vdCBib3RoIGJlICdhdXRvJyBiZWNhdXNlIG9u
ZSB3b3VsZCBvZiBiZWVuCiAgICAgLy8gY29udmVydGVkIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24g
YWxyZWFkeQogICAgIEFTU0VSVCghKGxvZ2ljYWxMZWZ0LmlzQXV0bygpICYmIGxvZ2ljYWxSaWdo
dC5pc0F1dG8oKSkpOwogCi0gICAgaW50IGxvZ2ljYWxMZWZ0VmFsdWUgPSAwOworICAgIExheW91
dFVuaXQgbG9naWNhbExlZnRWYWx1ZSA9IDA7CiAKICAgICBib29sIGxvZ2ljYWxXaWR0aElzQXV0
byA9IGxvZ2ljYWxXaWR0aC5pc0ludHJpbnNpY09yQXV0bygpOwogICAgIGJvb2wgbG9naWNhbExl
ZnRJc0F1dG8gPSBsb2dpY2FsTGVmdC5pc0F1dG8oKTsKQEAgLTIzODksNyArMjM5Myw3IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgbG9naWNhbExl
ZnRWYWx1ZSA9IGxvZ2ljYWxMZWZ0LmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpOwog
ICAgICAgICBsb2dpY2FsV2lkdGhWYWx1ZSA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRo
KGxvZ2ljYWxXaWR0aC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKSk7CiAKLSAgICAg
ICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKGxv
Z2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsV2lkdGhWYWx1ZSArIGxvZ2ljYWxSaWdodC5jYWxjVmFs
dWUoY29udGFpbmVyTG9naWNhbFdpZHRoKSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CisgICAgICAg
IGNvbnN0IExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJMb2dpY2FsV2lkdGgg
LSAobG9naWNhbExlZnRWYWx1ZSArIGxvZ2ljYWxXaWR0aFZhbHVlICsgbG9naWNhbFJpZ2h0LmNh
bGNWYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIAog
ICAgICAgICAvLyBNYXJnaW5zIGFyZSBub3cgdGhlIG9ubHkgdW5rbm93bgogICAgICAgICBpZiAo
bWFyZ2luTG9naWNhbExlZnQuaXNBdXRvKCkgJiYgbWFyZ2luTG9naWNhbFJpZ2h0LmlzQXV0bygp
KSB7CkBAIC0yNDcwLDE4ICsyNDc0LDE4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWwKICAgICAgICAgbWFyZ2luTG9naWNhbExlZnRWYWx1ZSA9IG1hcmdpbkxvZ2lj
YWxMZWZ0LmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpOwogICAgICAgICBtYXJn
aW5Mb2dpY2FsUmlnaHRWYWx1ZSA9IG1hcmdpbkxvZ2ljYWxSaWdodC5jYWxjTWluVmFsdWUoY29u
dGFpbmVyTG9naWNhbFdpZHRoKTsKIAotICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2Ug
PSBjb250YWluZXJMb2dpY2FsV2lkdGggLSAobWFyZ2luTG9naWNhbExlZnRWYWx1ZSArIG1hcmdp
bkxvZ2ljYWxSaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKKyAgICAgICAgY29uc3Qg
TGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtIChtYXJn
aW5Mb2dpY2FsTGVmdFZhbHVlICsgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUgKyBib3JkZXJzUGx1
c1BhZGRpbmcpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGZhc3RlciB3YXkgdG8g
ZmluZCB0aGUgY29ycmVjdCBjYXNlPwogICAgICAgICAvLyBVc2UgcnVsZS9jYXNlIHRoYXQgYXBw
bGllcy4KICAgICAgICAgaWYgKGxvZ2ljYWxMZWZ0SXNBdXRvICYmIGxvZ2ljYWxXaWR0aElzQXV0
byAmJiAhbG9naWNhbFJpZ2h0SXNBdXRvKSB7CiAgICAgICAgICAgICAvLyBSVUxFIDE6ICh1c2Ug
c2hyaW5rLXRvLWZpdCBmb3Igd2lkdGgsIGFuZCBzb2x2ZSBvZiBsZWZ0KQotICAgICAgICAgICAg
aW50IGxvZ2ljYWxSaWdodFZhbHVlID0gbG9naWNhbFJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJM
b2dpY2FsV2lkdGgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRWYWx1ZSA9
IGxvZ2ljYWxSaWdodC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKIAogICAgICAg
ICAgICAgLy8gRklYTUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmluay10by1maXQg
aW4gb25lIHN0ZXA/Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBw
cmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1Bs
dXNQYWRkaW5nOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3Bh
Y2UgLSBsb2dpY2FsUmlnaHRWYWx1ZTsKKyAgICAgICAgICAgIExheW91dFVuaXQgcHJlZmVycmVk
V2lkdGggPSBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsK
KyAgICAgICAgICAgIExheW91dFVuaXQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIExheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVTcGFjZSAtIGxvZ2ljYWxSaWdodFZhbHVlOwog
ICAgICAgICAgICAgbG9naWNhbFdpZHRoVmFsdWUgPSBtaW4obWF4KHByZWZlcnJlZE1pbldpZHRo
LCBhdmFpbGFibGVXaWR0aCksIHByZWZlcnJlZFdpZHRoKTsKICAgICAgICAgICAgIGxvZ2ljYWxM
ZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsV2lkdGhWYWx1ZSArIGxvZ2ljYWxS
aWdodFZhbHVlKTsKICAgICAgICAgfSBlbHNlIGlmICghbG9naWNhbExlZnRJc0F1dG8gJiYgbG9n
aWNhbFdpZHRoSXNBdXRvICYmIGxvZ2ljYWxSaWdodElzQXV0bykgewpAQCAtMjQ4OSw5ICsyNDkz
LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAgICAg
ICAgbG9naWNhbExlZnRWYWx1ZSA9IGxvZ2ljYWxMZWZ0LmNhbGNWYWx1ZShjb250YWluZXJMb2dp
Y2FsV2lkdGgpOwogCiAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgaXQgYmUgYmV0dGVyIHRv
IGhhdmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8KLSAgICAgICAgICAgIGludCBwcmVmZXJy
ZWRXaWR0aCA9IG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5n
OwotICAgICAgICAgICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxl
V2lkdGggPSBhdmFpbGFibGVTcGFjZSAtIGxvZ2ljYWxMZWZ0VmFsdWU7CisgICAgICAgICAgICBM
YXlvdXRVbml0IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBi
b3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBMYXlvdXRVbml0IHByZWZlcnJlZE1pbldp
ZHRoID0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7Cisg
ICAgICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBs
b2dpY2FsTGVmdFZhbHVlOwogICAgICAgICAgICAgbG9naWNhbFdpZHRoVmFsdWUgPSBtaW4obWF4
KHByZWZlcnJlZE1pbldpZHRoLCBhdmFpbGFibGVXaWR0aCksIHByZWZlcnJlZFdpZHRoKTsKICAg
ICAgICAgfSBlbHNlIGlmIChsb2dpY2FsTGVmdElzQXV0byAmJiAhbG9naWNhbFdpZHRoSXNBdXRv
ICYmICFsb2dpY2FsUmlnaHRJc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgNDogKHNvbHZl
IGZvciBsZWZ0KQpAQCAtMjUzNCw3ICsyNTM4LDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUJsb2Nr
U3RhdGljRGlzdGFuY2UoTAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gRklYTUU6IFRo
ZSBzdGF0aWMgZGlzdGFuY2UgY29tcHV0YXRpb24gaGFzIG5vdCBiZWVuIHBhdGNoZWQgZm9yIG1p
eGVkIHdyaXRpbmcgbW9kZXMuCi0gICAgaW50IHN0YXRpY0xvZ2ljYWxUb3AgPSBjaGlsZC0+bGF5
ZXIoKS0+c3RhdGljQmxvY2tQb3NpdGlvbigpIC0gY29udGFpbmVyQmxvY2stPmJvcmRlckJlZm9y
ZSgpOworICAgIExheW91dFVuaXQgc3RhdGljTG9naWNhbFRvcCA9IGNoaWxkLT5sYXllcigpLT5z
dGF0aWNCbG9ja1Bvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyQmVmb3JlKCk7CiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBjaGlsZC0+cGFyZW50KCk7IGN1cnIgJiYgY3Vy
ciAhPSBjb250YWluZXJCbG9jazsgY3VyciA9IGN1cnItPmNvbnRhaW5lcigpKSB7CiAgICAgICAg
IGlmIChjdXJyLT5pc0JveCgpICYmICFjdXJyLT5pc1RhYmxlUm93KCkpCiAgICAgICAgICAgICBz
dGF0aWNMb2dpY2FsVG9wICs9IHRvUmVuZGVyQm94KGN1cnIpLT5sb2dpY2FsVG9wKCk7CkBAIC0y
NTU5LDE1ICsyNTYzLDE1IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWwKICAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBi
ZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVkIGlubGluZS4KICAgICBj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2sgPSB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAotICAgIGNvbnN0IGludCBjb250YWluZXJMb2dpY2Fs
SGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFp
bmVyQmxvY2spOworICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9
IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2Nr
KTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsK
ICAgICBib29sIGlzRmxpcHBlZCA9IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCk7Ci0gICAgY29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcg
PSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJn
aW5CZWZvcmUgPSBzdHlsZSgpLT5tYXJnaW5CZWZvcmUoKTsKICAgICBjb25zdCBMZW5ndGggbWFy
Z2luQWZ0ZXIgPSBzdHlsZSgpLT5tYXJnaW5BZnRlcigpOwotICAgIGludCYgbWFyZ2luQmVmb3Jl
QWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5Cb3R0b20gOiBtX21h
cmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDogbV9tYXJnaW5MZWZ0KTsKLSAg
ICBpbnQmIG1hcmdpbkFmdGVyQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9t
YXJnaW5Ub3AgOiBtX21hcmdpbkJvdHRvbSkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5MZWZ0OiBt
X21hcmdpblJpZ2h0KTsKKyAgICBMYXlvdXRVbml0JiBtYXJnaW5CZWZvcmVBbGlhcyA9IGlzSG9y
aXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2luVG9wKSA6IChp
c0ZsaXBwZWQgPyBtX21hcmdpblJpZ2h0OiBtX21hcmdpbkxlZnQpOworICAgIExheW91dFVuaXQm
IG1hcmdpbkFmdGVyQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5U
b3AgOiBtX21hcmdpbkJvdHRvbSkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5MZWZ0OiBtX21hcmdp
blJpZ2h0KTsKIAogICAgIExlbmd0aCBsb2dpY2FsVG9wID0gc3R5bGUoKS0+bG9naWNhbFRvcCgp
OwogICAgIExlbmd0aCBsb2dpY2FsQm90dG9tID0gc3R5bGUoKS0+bG9naWNhbEJvdHRvbSgpOwpA
QCAtMjU5Myw4ICsyNTk3LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbAogICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhdGljIGRpc3RhbmNlIGlmIG5lZWRlZC4KICAg
ICBjb21wdXRlQmxvY2tTdGF0aWNEaXN0YW5jZShsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tLCB0
aGlzLCBjb250YWluZXJCbG9jayk7CiAKLSAgICBpbnQgbG9naWNhbEhlaWdodFJlc3VsdDsgLy8g
TmVlZGVkIHRvIGNvbXB1dGUgb3ZlcmZsb3cuCi0gICAgaW50IGxvZ2ljYWxUb3BQb3M7CisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0UmVzdWx0OyAvLyBOZWVkZWQgdG8gY29tcHV0ZSBvdmVy
Zmxvdy4KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BQb3M7CiAKICAgICAvLyBDYWxjdWxhdGUg
Y29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdoZWlnaHQnIGNhc2UuCiAgICAgY29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpLCBj
b250YWluZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5n
LApAQCAtMjYwNywxMCArMjYxMSwxMCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsCiAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMg
Zm9yICdtYXgtaGVpZ2h0JyBjYXNlLgogICAgIGlmICghc3R5bGUoKS0+bG9naWNhbE1heEhlaWdo
dCgpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgaW50IG1heExvZ2ljYWxIZWlnaHQ7Ci0gICAg
ICAgIGludCBtYXhNYXJnaW5CZWZvcmU7Ci0gICAgICAgIGludCBtYXhNYXJnaW5BZnRlcjsKLSAg
ICAgICAgaW50IG1heExvZ2ljYWxUb3BQb3M7CisgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNh
bEhlaWdodDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhNYXJnaW5CZWZvcmU7CisgICAgICAgIExh
eW91dFVuaXQgbWF4TWFyZ2luQWZ0ZXI7CisgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbFRv
cFBvczsKIAogICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhzdHls
ZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2Fs
SGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20sIG1hcmdpbkJlZm9yZSwg
bWFyZ2luQWZ0ZXIsCkBAIC0yNjI2LDEwICsyNjMwLDEwIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWwKIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0
aW9uIHZhbHVlcyBmb3IgJ21pbi1oZWlnaHQnIGNhc2UuCiAgICAgaWYgKCFzdHlsZSgpLT5sb2dp
Y2FsTWluSGVpZ2h0KCkuaXNaZXJvKCkpIHsKLSAgICAgICAgaW50IG1pbkxvZ2ljYWxIZWlnaHQ7
Ci0gICAgICAgIGludCBtaW5NYXJnaW5CZWZvcmU7Ci0gICAgICAgIGludCBtaW5NYXJnaW5BZnRl
cjsKLSAgICAgICAgaW50IG1pbkxvZ2ljYWxUb3BQb3M7CisgICAgICAgIExheW91dFVuaXQgbWlu
TG9naWNhbEhlaWdodDsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5CZWZvcmU7CisgICAg
ICAgIExheW91dFVuaXQgbWluTWFyZ2luQWZ0ZXI7CisgICAgICAgIExheW91dFVuaXQgbWluTG9n
aWNhbFRvcFBvczsKIAogICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2lu
ZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJM
b2dpY2FsSGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20sIG1hcmdpbkJl
Zm9yZSwgbWFyZ2luQWZ0ZXIsCkBAIC0yNjQ3LDcgKzI2NTEsNyBAQCB2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVp
Z2h0UmVzdWx0ICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIH0KIAotc3RhdGljIHZvaWQgY29tcHV0
ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KGludCYgbG9naWNhbFRvcFBvcywgY29uc3QgUmVu
ZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxIZWlnaHRWYWx1ZSwgY29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLCBpbnQgY29udGFpbmVyTG9naWNhbEhlaWdodCkKK3N0
YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsVG9wUG9zaXRpb25lZE9mZnNldChMYXlvdXRVbml0JiBs
b2dpY2FsVG9wUG9zLCBjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHRWYWx1ZSwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLCBM
YXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpCiB7CiAgICAgLy8gRGVhbCB3aXRoIGRp
ZmZlcmluZyB3cml0aW5nIG1vZGVzIGhlcmUuICBPdXIgb2Zmc2V0IG5lZWRzIHRvIGJlIGluIHRo
ZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzcGFjZS4gSWYgdGhlIGNvbnRhaW5pbmcg
YmxvY2sgaXMgZmxpcHBlZAogICAgIC8vIGFsb25nIHRoaXMgYXhpcywgdGhlbiB3ZSBuZWVkIHRv
IGZsaXAgdGhlIGNvb3JkaW5hdGUuICBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgY29udGFp
bmluZyBibG9jayBpcyBib3RoIGEgZmxpcHBlZCBtb2RlIGFuZCBwZXJwZW5kaWN1bGFyIHRvIHVz
LgpAQCAtMjY3MCwxNyArMjY3NCwxNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbFRvcFBv
c2l0aW9uZWRPCiB9CiAKIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxI
ZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodExlbmd0aCwgY29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBpbnQgYm9y
ZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdodCwgTGF5b3V0VW5p
dCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AsIExlbmd0aCBsb2dpY2FsQm90dG9t
LCBMZW5ndGggbWFyZ2luQmVmb3JlLCBMZW5ndGggbWFyZ2luQWZ0ZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsb2dpY2FsSGVpZ2h0
VmFsdWUsIGludCYgbWFyZ2luQmVmb3JlVmFsdWUsIGludCYgbWFyZ2luQWZ0ZXJWYWx1ZSwgaW50
JiBsb2dpY2FsVG9wUG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQmIGxvZ2ljYWxIZWlnaHRWYWx1ZSwgTGF5b3V0VW5pdCYg
bWFyZ2luQmVmb3JlVmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkFmdGVyVmFsdWUsIExheW91dFVu
aXQmIGxvZ2ljYWxUb3BQb3MpCiB7CiAgICAgLy8gJ3RvcCcgYW5kICdib3R0b20nIGNhbm5vdCBi
b3RoIGJlICdhdXRvJyBiZWNhdXNlICd0b3Agd291bGQgb2YgYmVlbgogICAgIC8vIGNvbnZlcnRl
ZCB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGluIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdo
dCgpCiAgICAgQVNTRVJUKCEobG9naWNhbFRvcC5pc0F1dG8oKSAmJiBsb2dpY2FsQm90dG9tLmlz
QXV0bygpKSk7CiAKLSAgICBpbnQgY29udGVudExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0
KCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbEhl
aWdodCA9IGxvZ2ljYWxIZWlnaHQoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKIAotICAgIGludCBs
b2dpY2FsVG9wVmFsdWUgPSAwOworICAgIExheW91dFVuaXQgbG9naWNhbFRvcFZhbHVlID0gMDsK
IAogICAgIGJvb2wgbG9naWNhbEhlaWdodElzQXV0byA9IGxvZ2ljYWxIZWlnaHRMZW5ndGguaXNB
dXRvKCk7CiAgICAgYm9vbCBsb2dpY2FsVG9wSXNBdXRvID0gbG9naWNhbFRvcC5pc0F1dG8oKTsK
QEAgLTI3MDcsNyArMjcxMSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWwKICAgICAgICAgbG9naWNhbEhlaWdodFZhbHVlID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHRMZW5ndGguY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxI
ZWlnaHQpKTsKICAgICAgICAgbG9naWNhbFRvcFZhbHVlID0gbG9naWNhbFRvcC5jYWxjVmFsdWUo
Y29udGFpbmVyTG9naWNhbEhlaWdodCk7CiAKLSAgICAgICAgY29uc3QgaW50IGF2YWlsYWJsZVNw
YWNlID0gY29udGFpbmVyTG9naWNhbEhlaWdodCAtIChsb2dpY2FsVG9wVmFsdWUgKyBsb2dpY2Fs
SGVpZ2h0VmFsdWUgKyBsb2dpY2FsQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVp
Z2h0KSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CisgICAgICAgIGNvbnN0IExheW91dFVuaXQgYXZh
aWxhYmxlU3BhY2UgPSBjb250YWluZXJMb2dpY2FsSGVpZ2h0IC0gKGxvZ2ljYWxUb3BWYWx1ZSAr
IGxvZ2ljYWxIZWlnaHRWYWx1ZSArIGxvZ2ljYWxCb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckxv
Z2ljYWxIZWlnaHQpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIAogICAgICAgICAvLyBNYXJnaW5z
IGFyZSBub3cgdGhlIG9ubHkgdW5rbm93bgogICAgICAgICBpZiAobWFyZ2luQmVmb3JlLmlzQXV0
bygpICYmIG1hcmdpbkFmdGVyLmlzQXV0bygpKSB7CkBAIC0yNzU4LDcgKzI3NjIsNyBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIG1hcmdpbkJlZm9y
ZVZhbHVlID0gbWFyZ2luQmVmb3JlLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0
KTsKICAgICAgICAgbWFyZ2luQWZ0ZXJWYWx1ZSA9IG1hcmdpbkFmdGVyLmNhbGNNaW5WYWx1ZShj
b250YWluZXJMb2dpY2FsSGVpZ2h0KTsKIAotICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3Bh
Y2UgPSBjb250YWluZXJMb2dpY2FsSGVpZ2h0IC0gKG1hcmdpbkJlZm9yZVZhbHVlICsgbWFyZ2lu
QWZ0ZXJWYWx1ZSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CisgICAgICAgIGNvbnN0IExheW91dFVu
aXQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJMb2dpY2FsSGVpZ2h0IC0gKG1hcmdpbkJlZm9y
ZVZhbHVlICsgbWFyZ2luQWZ0ZXJWYWx1ZSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CiAKICAgICAg
ICAgLy8gVXNlIHJ1bGUvY2FzZSB0aGF0IGFwcGxpZXMuCiAgICAgICAgIGlmIChsb2dpY2FsVG9w
SXNBdXRvICYmIGxvZ2ljYWxIZWlnaHRJc0F1dG8gJiYgIWxvZ2ljYWxCb3R0b21Jc0F1dG8pIHsK
QEAgLTI3NzYsNyArMjc4MCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWwKICAgICAgICAgfSBlbHNlIGlmICghbG9naWNhbFRvcElzQXV0byAmJiBsb2dpY2FsSGVp
Z2h0SXNBdXRvICYmICFsb2dpY2FsQm90dG9tSXNBdXRvKSB7CiAgICAgICAgICAgICAvLyBSVUxF
IDU6IChzb2x2ZSBvZiBoZWlnaHQpCiAgICAgICAgICAgICBsb2dpY2FsVG9wVmFsdWUgPSBsb2dp
Y2FsVG9wLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgICAgIGxv
Z2ljYWxIZWlnaHRWYWx1ZSA9IG1heCgwLCBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsVG9wVmFs
dWUgKyBsb2dpY2FsQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSkpOwor
ICAgICAgICAgICAgbG9naWNhbEhlaWdodFZhbHVlID0gbWF4PExheW91dFVuaXQ+KDAsIGF2YWls
YWJsZVNwYWNlIC0gKGxvZ2ljYWxUb3BWYWx1ZSArIGxvZ2ljYWxCb3R0b20uY2FsY1ZhbHVlKGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIWxvZ2ljYWxUb3BJ
c0F1dG8gJiYgIWxvZ2ljYWxIZWlnaHRJc0F1dG8gJiYgbG9naWNhbEJvdHRvbUlzQXV0bykgewog
ICAgICAgICAgICAgLy8gUlVMRSA2OiAobm8gbmVlZCBzb2x2ZSBvZiBib3R0b20pCiAgICAgICAg
ICAgICBsb2dpY2FsSGVpZ2h0VmFsdWUgPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQo
bG9naWNhbEhlaWdodExlbmd0aC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdodCkpOwpA
QCAtMjgwMSw3ICsyODA1LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbAogICAgIC8vIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5lLgogICAgIGNvbnN0IFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
Y29udGFpbmVyKCkpOwogCi0gICAgY29uc3QgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IGNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2spOwor
ICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7CiAKICAgICAvLyBU
byBtYXRjaCBXaW5JRSwgaW4gcXVpcmtzIG1vZGUgdXNlIHRoZSBwYXJlbnQncyAnZGlyZWN0aW9u
JyBwcm9wZXJ0eQogICAgIC8vIGluc3RlYWQgb2YgdGhlIHRoZSBjb250YWluZXIgYmxvY2sncy4K
QEAgLTI4MTMsOCArMjgxNyw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWwKICAgICBMZW5ndGggbG9naWNhbFJpZ2h0ID0gc3R5bGUoKS0+bG9naWNhbFJpZ2h0KCk7
CiAgICAgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0ID0gaXNIb3Jpem9udGFsID8gc3R5bGUoKS0+
bWFyZ2luTGVmdCgpIDogc3R5bGUoKS0+bWFyZ2luVG9wKCk7CiAgICAgTGVuZ3RoIG1hcmdpbkxv
Z2ljYWxSaWdodCA9IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCktPm1hcmdpblJpZ2h0KCkgOiBzdHls
ZSgpLT5tYXJnaW5Cb3R0b20oKTsKLSAgICBpbnQmIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXMgPSBp
c0hvcml6b250YWwgPyBtX21hcmdpbkxlZnQgOiBtX21hcmdpblRvcDsKLSAgICBpbnQmIG1hcmdp
bkxvZ2ljYWxSaWdodEFsaWFzID0gaXNIb3Jpem9udGFsID8gbV9tYXJnaW5SaWdodCA6IG1fbWFy
Z2luQm90dG9tOworICAgIExheW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXMgPSBpc0hv
cml6b250YWwgPyBtX21hcmdpbkxlZnQgOiBtX21hcmdpblRvcDsKKyAgICBMYXlvdXRVbml0JiBt
YXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luUmlnaHQgOiBt
X21hcmdpbkJvdHRvbTsKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAogICAgICAqIDEuIFRoZSB1
c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2Vk
CkBAIC0yODI0LDcgKzI4MjgsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsCiAgICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY29tcHV0ZVJlcGxhY2VkV2lkdGgoKS4g
IFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVjZQogICAgIC8vIGNvcnJlY3QgbWF4
L21pbiBpbiB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5LgogICAg
IHNldExvZ2ljYWxXaWR0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSArIGJvcmRlckFu
ZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSk7Ci0gICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0g
Y29udGFpbmVyTG9naWNhbFdpZHRoIC0gbG9naWNhbFdpZHRoKCk7CisgICAgY29uc3QgTGF5b3V0
VW5pdCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxXaWR0
aCgpOwogCiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCiAgICAgICogMi4gSWYgYm90aCAnbGVmdCcg
YW5kICdyaWdodCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCB0aGVuIGlmICdkaXJlY3Rpb24nCkBA
IC0yODUzLDggKzI4NTcsOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsCiAgICAgICogICAgKCdydGwnKSwgc2V0ICdtYXJnaW4tbGVmdCcgKCdtYXJnaW4tcmlnaHQn
KSB0byB6ZXJvIGFuZCBzb2x2ZSBmb3IKICAgICAgKiAgICAnbWFyZ2luLXJpZ2h0JyAoJ21hcmdp
bi1sZWZ0JykuCiAgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgaW50IGxvZ2ljYWxMZWZ0VmFs
dWUgPSAwOwotICAgIGludCBsb2dpY2FsUmlnaHRWYWx1ZSA9IDA7CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdFZhbHVlID0gMDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZhbHVlID0g
MDsKIAogICAgIGlmIChtYXJnaW5Mb2dpY2FsTGVmdC5pc0F1dG8oKSAmJiBtYXJnaW5Mb2dpY2Fs
UmlnaHQuaXNBdXRvKCkpIHsKICAgICAgICAgLy8gJ2xlZnQnIGFuZCAncmlnaHQnIGNhbm5vdCBi
ZSAnYXV0bycgZHVlIHRvIHN0ZXAgMwpAQCAtMjg2Myw3ICsyODY3LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAgICBsb2dpY2FsTGVmdFZhbHVlID0g
bG9naWNhbExlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGxv
Z2ljYWxSaWdodFZhbHVlID0gbG9naWNhbFJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2Fs
V2lkdGgpOwogCi0gICAgICAgIGludCBkaWZmZXJlbmNlID0gYXZhaWxhYmxlU3BhY2UgLSAobG9n
aWNhbExlZnRWYWx1ZSArIGxvZ2ljYWxSaWdodFZhbHVlKTsKKyAgICAgICAgTGF5b3V0VW5pdCBk
aWZmZXJlbmNlID0gYXZhaWxhYmxlU3BhY2UgLSAobG9naWNhbExlZnRWYWx1ZSArIGxvZ2ljYWxS
aWdodFZhbHVlKTsKICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPiAwKSB7CiAgICAgICAgICAgICBt
YXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gZGlmZmVyZW5jZSAvIDI7IC8vIHNwbGl0IHRoZSBkaWZm
ZXJlbmNlCiAgICAgICAgICAgICBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGRpZmZlcmVuY2Ug
LSBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzOyAvLyBhY2NvdW50IGZvciBvZGQgdmFsdWVkIGRpZmZl
cmVuY2VzCkBAIC0yOTI2LDcgKzI5MzAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsCiAgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgLy8gTk9URTogIEl0IGlz
IG5vdCBuZWNlc3NhcnkgdG8gc29sdmUgZm9yICdyaWdodCcgd2hlbiB0aGUgZGlyZWN0aW9uIGlz
CiAgICAgLy8gTFRSIGJlY2F1c2UgdGhlIHZhbHVlIGlzIG5vdCB1c2VkLgotICAgIGludCB0b3Rh
bExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpICsgbG9naWNhbExlZnRWYWx1ZSArIGxvZ2lj
YWxSaWdodFZhbHVlICsgIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXMgKyBtYXJnaW5Mb2dpY2FsUmln
aHRBbGlhczsKKyAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRo
KCkgKyBsb2dpY2FsTGVmdFZhbHVlICsgbG9naWNhbFJpZ2h0VmFsdWUgKyAgbWFyZ2luTG9naWNh
bExlZnRBbGlhcyArIG1hcmdpbkxvZ2ljYWxSaWdodEFsaWFzOwogICAgIGlmICh0b3RhbExvZ2lj
YWxXaWR0aCA+IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAmJiAoY29udGFpbmVyRGlyZWN0aW9uID09
IFJUTCkpCiAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBjb250YWluZXJMb2dpY2FsV2lkdGgg
LSAodG90YWxMb2dpY2FsV2lkdGggLSBsb2dpY2FsTGVmdFZhbHVlKTsKIApAQCAtMjk0OSw3ICsy
OTUzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaW50IGxvZ2ljYWxMZWZ0UG9zID0gbG9naWNhbExlZnRWYWx1ZSAr
IG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXM7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFBvcyA9
IGxvZ2ljYWxMZWZ0VmFsdWUgKyBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzOwogICAgIGNvbXB1dGVM
b2dpY2FsTGVmdFBvc2l0aW9uZWRPZmZzZXQobG9naWNhbExlZnRQb3MsIHRoaXMsIGxvZ2ljYWxX
aWR0aCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyTG9naWNhbFdpZHRoKTsgICAgCiAgICAg
c2V0TG9naWNhbExlZnQobG9naWNhbExlZnRQb3MpOwogfQpAQCAtMjk2NSwxNSArMjk2OSwxNSBA
QCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgLy8gV2UgZG9u
J3QgdXNlIGNvbnRhaW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBh
biBlbmNsb3NpbmcgcmVscG9zaXRpb25lZCBpbmxpbmUuCiAgICAgY29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWlu
ZXIoKSk7CiAKLSAgICBjb25zdCBpbnQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKKyAgICBj
b25zdCBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluaW5nQmxvY2tM
b2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7CiAKICAgICAvLyBWYXJp
YWJsZXMgdG8gc29sdmUuCiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpOwogICAgIGJvb2wgaXNGbGlwcGVkID0gc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKTsKICAgICBMZW5ndGggbWFyZ2luQmVmb3JlID0gc3R5bGUoKS0+bWFyZ2lu
QmVmb3JlKCk7CiAgICAgTGVuZ3RoIG1hcmdpbkFmdGVyID0gc3R5bGUoKS0+bWFyZ2luQWZ0ZXIo
KTsKLSAgICBpbnQmIG1hcmdpbkJlZm9yZUFsaWFzID0gaXNIb3Jpem9udGFsID8gKGlzRmxpcHBl
ZCA/IG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5Ub3ApIDogKGlzRmxpcHBlZCA/IG1fbWFyZ2lu
UmlnaHQ6IG1fbWFyZ2luTGVmdCk7Ci0gICAgaW50JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jp
em9udGFsID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlz
RmxpcHBlZCA/IG1fbWFyZ2luTGVmdDogbV9tYXJnaW5SaWdodCk7CisgICAgTGF5b3V0VW5pdCYg
bWFyZ2luQmVmb3JlQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5C
b3R0b20gOiBtX21hcmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDogbV9tYXJn
aW5MZWZ0KTsKKyAgICBMYXlvdXRVbml0JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jpem9udGFs
ID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlzRmxpcHBl
ZCA/IG1fbWFyZ2luTGVmdDogbV9tYXJnaW5SaWdodCk7CiAKICAgICBMZW5ndGggbG9naWNhbFRv
cCA9IHN0eWxlKCktPmxvZ2ljYWxUb3AoKTsKICAgICBMZW5ndGggbG9naWNhbEJvdHRvbSA9IHN0
eWxlKCktPmxvZ2ljYWxCb3R0b20oKTsKQEAgLTI5ODYsNyArMjk5MCw3IEBAIHZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBj
b21wdXRlUmVwbGFjZWRIZWlnaHQoKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJv
ZHVjZQogICAgIC8vIGNvcnJlY3QgbWF4L21pbiBpbiB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24s
IGFyZSBub3QgbmVjZXNzYXJ5LgogICAgIHNldExvZ2ljYWxIZWlnaHQoY29tcHV0ZVJlcGxhY2Vk
TG9naWNhbEhlaWdodCgpICsgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAg
Y29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbEhlaWdodCAtIGxvZ2lj
YWxIZWlnaHQoKTsKKyAgICBjb25zdCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY29udGFp
bmVyTG9naWNhbEhlaWdodCAtIGxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIC8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qXAogICAgICAqIDIuIElmIGJvdGggJ3RvcCcgYW5kICdib3R0b20nIGhhdmUgdGhlIHZhbHVl
ICdhdXRvJywgcmVwbGFjZSAndG9wJwpAQCAtMzAxMyw4ICszMDE3LDggQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAqICAgICdhdXRvJywgc29sdmUgdGhl
IGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3bwogICAgICAq
ICAgIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLgogICAgIFwqLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwotICAgIGludCBsb2dpY2FsVG9wVmFsdWUgPSAwOwotICAgIGludCBsb2dpY2FsQm90dG9tVmFs
dWUgPSAwOworICAgIExheW91dFVuaXQgbG9naWNhbFRvcFZhbHVlID0gMDsKKyAgICBMYXlvdXRV
bml0IGxvZ2ljYWxCb3R0b21WYWx1ZSA9IDA7CiAKICAgICBpZiAobWFyZ2luQmVmb3JlLmlzQXV0
bygpICYmIG1hcmdpbkFmdGVyLmlzQXV0bygpKSB7CiAgICAgICAgIC8vICd0b3AnIGFuZCAnYm90
dG9tJyBjYW5ub3QgYmUgJ2F1dG8nIGR1ZSB0byBzdGVwIDIgYW5kIDMgY29tYmluZWQuCkBAIC0z
MDIzLDcgKzMwMjcsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2Fs
CiAgICAgICAgIGxvZ2ljYWxUb3BWYWx1ZSA9IGxvZ2ljYWxUb3AuY2FsY1ZhbHVlKGNvbnRhaW5l
ckxvZ2ljYWxIZWlnaHQpOwogICAgICAgICBsb2dpY2FsQm90dG9tVmFsdWUgPSBsb2dpY2FsQm90
dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KTsKIAotICAgICAgICBpbnQgZGlm
ZmVyZW5jZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxvZ2ljYWxUb3BWYWx1ZSArIGxvZ2ljYWxCb3R0
b21WYWx1ZSk7CisgICAgICAgIExheW91dFVuaXQgZGlmZmVyZW5jZSA9IGF2YWlsYWJsZVNwYWNl
IC0gKGxvZ2ljYWxUb3BWYWx1ZSArIGxvZ2ljYWxCb3R0b21WYWx1ZSk7CiAgICAgICAgIC8vIE5P
VEU6IFRoaXMgbWF5IHJlc3VsdCBpbiBuZWdhdGl2ZSB2YWx1ZXMuCiAgICAgICAgIG1hcmdpbkJl
Zm9yZUFsaWFzID0gIGRpZmZlcmVuY2UgLyAyOyAvLyBzcGxpdCB0aGUgZGlmZmVyZW5jZQogICAg
ICAgICBtYXJnaW5BZnRlckFsaWFzID0gZGlmZmVyZW5jZSAtIG1hcmdpbkJlZm9yZUFsaWFzOyAv
LyBhY2NvdW50IGZvciBvZGQgdmFsdWVkIGRpZmZlcmVuY2VzCkBAIC0zMDc5LDEyICszMDgzLDEy
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyBvciBu
b3QuCiAKICAgICAvLyBVc2UgY29tcHV0ZWQgdmFsdWVzIHRvIGNhbGN1bGF0ZSB0aGUgdmVydGlj
YWwgcG9zaXRpb24uCi0gICAgaW50IGxvZ2ljYWxUb3BQb3MgPSBsb2dpY2FsVG9wVmFsdWUgKyBt
YXJnaW5CZWZvcmVBbGlhczsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BQb3MgPSBsb2dpY2Fs
VG9wVmFsdWUgKyBtYXJnaW5CZWZvcmVBbGlhczsKICAgICBjb21wdXRlTG9naWNhbFRvcFBvc2l0
aW9uZWRPZmZzZXQobG9naWNhbFRvcFBvcywgdGhpcywgbG9naWNhbEhlaWdodCgpLCBjb250YWlu
ZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCk7CiAgICAgc2V0TG9naWNhbFRvcChsb2dp
Y2FsVG9wUG9zKTsKIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQor
TGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQg
Y2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICAv
LyBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldHMgaW5zaWRlIGNvbnRhaW5lcnMgZWl0aGVyIGEp
IHJlZmVyIHRvIHRoZSBwb3NpdGlvbnMgYmVmb3JlL2FmdGVyCiAgICAgLy8gdGhvc2UgY29udGFp
bmVycyAodGFibGVzIGFuZCBzZWxlY3QgZWxlbWVudHMpIG9yIGIpIHJlZmVyIHRvIHRoZSBwb3Np
dGlvbiBpbnNpZGUgYW4gZW1wdHkgYmxvY2suCkBAIC0zMDkyLDE1ICszMDk2LDE1IEBAIEludFJl
Y3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKICAgICAvLyBGSVhNRTogUGFpbnQg
dGhlIGNhcmV0cyBpbnNpZGUgZW1wdHkgYmxvY2tzIGRpZmZlcmVudGx5IHRoYW4gdGhlIGNhcmV0
cyBiZWZvcmUvYWZ0ZXIgZWxlbWVudHMuCiAKICAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBib3Jk
ZXIgYW5kIHBhZGRpbmc/Ci0gICAgSW50UmVjdCByZWN0KHgoKSwgeSgpLCBjYXJldFdpZHRoLCBo
ZWlnaHQoKSk7CisgICAgTGF5b3V0UmVjdCByZWN0KHgoKSwgeSgpLCBjYXJldFdpZHRoLCBoZWln
aHQoKSk7CiAgICAgYm9vbCBsdHIgPSBib3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA6IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKIAogICAgIGlmICgoIWNhcmV0
T2Zmc2V0KSBeIGx0cikKLSAgICAgICAgcmVjdC5tb3ZlKEludFNpemUod2lkdGgoKSAtIGNhcmV0
V2lkdGgsIDApKTsKKyAgICAgICAgcmVjdC5tb3ZlKExheW91dFNpemUod2lkdGgoKSAtIGNhcmV0
V2lkdGgsIDApKTsKIAogICAgIGlmIChib3gpIHsKICAgICAgICAgUm9vdElubGluZUJveCogcm9v
dEJveCA9IGJveC0+cm9vdCgpOwotICAgICAgICBpbnQgdG9wID0gcm9vdEJveC0+bGluZVRvcCgp
OworICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHJvb3RCb3gtPmxpbmVUb3AoKTsKICAgICAgICAg
cmVjdC5zZXRZKHRvcCk7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KHJvb3RCb3gtPmxpbmVCb3R0
b20oKSAtIHRvcCk7CiAgICAgfQpAQCAtMzExMyw3ICszMTE3LDcgQEAgSW50UmVjdCBSZW5kZXJC
b3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZQogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zNzc3ODA0
PiBEZWxldGluZyBhbGwgY29udGVudCBpbiBhIGRvY3VtZW50IGNhbiByZXN1bHQgaW4gZ2lhbnQg
dGFsbC1hcy13aW5kb3cgaW5zZXJ0aW9uIHBvaW50CiAgICAgLy8KICAgICAvLyBGSVhNRTogaWdu
b3JpbmcgOmZpcnN0LWxpbmUsIG1pc3NpbmcgZ29vZCByZWFzb24gdG8gdGFrZSBjYXJlIG9mCi0g
ICAgaW50IGZvbnRIZWlnaHQgPSBzdHlsZSgpLT5mb250TWV0cmljcygpLmhlaWdodCgpOworICAg
IExheW91dFVuaXQgZm9udEhlaWdodCA9IHN0eWxlKCktPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7
CiAgICAgaWYgKGZvbnRIZWlnaHQgPiByZWN0LmhlaWdodCgpIHx8ICghaXNSZXBsYWNlZCgpICYm
ICFpc1RhYmxlKCkpKQogICAgICAgICByZWN0LnNldEhlaWdodChmb250SGVpZ2h0KTsKIApAQCAt
MzMxOSwxNyArMzMyMywxNyBAQCB2b2lkIFJlbmRlckJveDo6Y2xlYXJMYXlvdXRPdmVyZmxvdygp
CiAgICAgbV9vdmVyZmxvdy0+cmVzZXRMYXlvdXRPdmVyZmxvdyhib3JkZXJCb3hSZWN0KCkpOwog
fQogCi1pbnQgUmVuZGVyQm94OjpsaW5lSGVpZ2h0KGJvb2wgLypmaXJzdExpbmUqLywgTGluZURp
cmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9k
ZSovKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoYm9vbCAvKmZpcnN0
TGluZSovLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgLyps
aW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0CiB7CiAgICAgaWYgKGlzUmVwbGFjZWQoKSkKICAgICAg
ICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2luVG9wICsgaGVp
Z2h0KCkgKyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0aCgpICsgbV9tYXJn
aW5MZWZ0OwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyQm94OjpiYXNlbGluZVBvc2l0
aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgLypmaXJzdExpbmUqLywgTGluZURp
cmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9k
ZSovKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJh
c2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGlyZWN0aW9uTW9k
ZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0
CiB7CiAgICAgaWYgKGlzUmVwbGFjZWQoKSkgewotICAgICAgICBpbnQgcmVzdWx0ID0gZGlyZWN0
aW9uID09IEhvcml6b250YWxMaW5lID8gbV9tYXJnaW5Ub3AgKyBoZWlnaHQoKSArIG1fbWFyZ2lu
Qm90dG9tIDogbV9tYXJnaW5SaWdodCArIHdpZHRoKCkgKyBtX21hcmdpbkxlZnQ7CisgICAgICAg
IExheW91dFVuaXQgcmVzdWx0ID0gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gbV9tYXJn
aW5Ub3AgKyBoZWlnaHQoKSArIG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5SaWdodCArIHdpZHRo
KCkgKyBtX21hcmdpbkxlZnQ7CiAgICAgICAgIGlmIChiYXNlbGluZVR5cGUgPT0gQWxwaGFiZXRp
Y0Jhc2VsaW5lKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHJl
c3VsdCAtIHJlc3VsdCAvIDI7CkBAIC0zMzUwLDE5ICszMzU0LDE5IEBAIFJlbmRlckxheWVyKiBS
ZW5kZXJCb3g6OmVuY2xvc2luZ0Zsb2F0UGEKICAgICByZXR1cm4gMDsKIH0KIAotSW50UmVjdCBS
ZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbFZp
c3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkg
Y29uc3QKIHsKLSAgICBJbnRSZWN0IHJlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihwYXJlbnRTdHlsZSk7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZWN0LnRyYW5zcG9zZWRS
ZWN0KCk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxP
dmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0
CitMYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24o
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIC8vIElmIHRoZSB3cml0aW5n
IG1vZGVzIG9mIHRoZSBjaGlsZCBhbmQgcGFyZW50IG1hdGNoLCB0aGVuIHdlIGRvbid0IGhhdmUg
dG8gCiAgICAgLy8gZG8gYW55dGhpbmcgZmFuY3kuIEp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCi0g
ICAgSW50UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBy
ZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgaWYgKHBhcmVudFN0eWxlLT53cml0aW5n
TW9kZSgpID09IHN0eWxlKCktPndyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZWN0Owog
ICAgIApAQCAtMzM3NiwxOCArMzM4MCwxOCBAQCBJbnRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3Zl
cmZsb3dSZWN0Rm9yCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94Ojps
b2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZmxv
d1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7Ci0g
ICAgSW50UmVjdCByZWN0ID0gbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24ocGFyZW50
U3R5bGUpOworICAgIExheW91dFJlY3QgcmVjdCA9IGxheW91dE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uKHBhcmVudFN0eWxlKTsKICAgICBpZiAoIXBhcmVudFN0eWxlLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogICAg
IHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVj
dCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICAvLyBPbmx5IHByb3BhZ2F0ZSBpbnRlcmlvciBs
YXlvdXQgb3ZlcmZsb3cgaWYgd2UgZG9uJ3QgY2xpcCBpdC4KLSAgICBJbnRSZWN0IHJlY3QgPSBi
b3JkZXJCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gYm9yZGVyQm94UmVjdCgpOwog
ICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJlY3QudW5pdGUobGF5b3V0T3Zl
cmZsb3dSZWN0KCkpOwogCkBAIC0zNDkyLDE1ICszNDk2LDE1IEBAIHZvaWQgUmVuZGVyQm94Ojpm
bGlwRm9yV3JpdGluZ01vZGUoRmxvYXQKICAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0
Lm1heFgoKSk7CiB9CiAKLUludFNpemUgUmVuZGVyQm94Ojpsb2NhdGlvbk9mZnNldEluY2x1ZGlu
Z0ZsaXBwaW5nKCkgY29uc3QKK0xheW91dFNpemUgUmVuZGVyQm94Ojpsb2NhdGlvbk9mZnNldElu
Y2x1ZGluZ0ZsaXBwaW5nKCkgY29uc3QKIHsKICAgICBSZW5kZXJCbG9jayogY29udGFpbmVyQmxv
Y2sgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoIWNvbnRhaW5lckJsb2NrIHx8IGNvbnRh
aW5lckJsb2NrID09IHRoaXMpCiAgICAgICAgIHJldHVybiBsb2NhdGlvbk9mZnNldCgpOwogICAg
IAotICAgIEludFJlY3QgcmVjdChmcmFtZVJlY3QoKSk7CisgICAgTGF5b3V0UmVjdCByZWN0KGZy
YW1lUmVjdCgpKTsKICAgICBjb250YWluZXJCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlY3Qp
OyAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBpZiB3ZSBhcmUgYW4gYWJzb2x1dGVseSBwb3NpdGlv
bmVkIG9iamVjdCBlbmNsb3NlZCBieSBhIHJlbGF0aXZlLXBvc2l0aW9uZWQgaW5saW5lLgotICAg
IHJldHVybiBJbnRTaXplKHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgcmV0dXJuIExheW91dFNp
emUocmVjdC54KCksIHJlY3QueSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gOTMwMTApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRRdWFkIGFic29sdXRlQ29udGVudFF1YWQo
KSBjb25zdDsKIAogICAgIC8vIEJvdW5kcyBvZiB0aGUgb3V0bGluZSBib3ggaW4gYWJzb2x1dGUg
Y29vcmRzLiBSZXNwZWN0cyB0cmFuc2Zvcm1zCi0gICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVC
b3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIq
LywgSW50UG9pbnQqIGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3Q7CisgICAg
dmlydHVhbCBMYXlvdXRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgTGF5b3V0UG9pbnQqIGNhY2hlZE9mZnNldFRv
UmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKICAgICAvLyBV
c2UgdGhpcyB3aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hlY2tpbmcgaXMgZG9uZSEKQEAgLTE5Miwx
MiArMTkyLDEyIEBAIHB1YmxpYzoKICAgICAvLyBzY3JvbGxMZWZ0L1RvcCByZXR1cm4gdGhlIGN1
cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhlc2UgbWV0aG9kcyBhcmUgdmlydHVhbCBzbyB0aGF0
IG9iamVjdHMgbGlrZQogICAgIC8vIHRleHRhcmVhcyBjYW4gc2Nyb2xsIHNoYWRvdyBjb250ZW50
IChidXQgcHJldGVuZCB0aGF0IHRoZXkgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlCiAgICAgLy8g
c2Nyb2xsaW5nKS4KLSAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgc2Nyb2xsVG9wKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxU
b3AoaW50KTsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsTGVmdCgpIGNvbnN0OworICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxUb3AoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91
dFVuaXQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xs
SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoTGF5b3V0VW5p
dCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChMYXlvdXRVbml0KTsKIAogICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBtYXJnaW5Ub3AoKSBjb25zdCB7IHJldHVybiBtX21hcmdpblRvcDsg
fQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXJnaW5Cb3R0b20oKSBjb25zdCB7IHJldHVybiBt
X21hcmdpbkJvdHRvbTsgfQpAQCAtMjMzLDcgKzIzMyw3IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0
IHJlZmxlY3Rpb25Cb3goKSBjb25zdDsKICAgICBpbnQgcmVmbGVjdGlvbk9mZnNldCgpIGNvbnN0
OwogICAgIC8vIEdpdmVuIGEgcmVjdCBpbiB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBzcGFjZSwg
cmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZWN0IGluIHRoZSByZWZsZWN0aW9uLgotICAgIElu
dFJlY3QgcmVmbGVjdGVkUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgTGF5b3V0UmVj
dCByZWZsZWN0ZWRSZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5p
dCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHdpZHRoKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChMYXlvdXRVbml0
IGhlaWdodCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRqdXN0KEludFJl
Y3QmKSBjb25zdCB7IH0gLy8gU2hyaW5rIHRoZSBib3ggaW4gd2hpY2ggdGhlIGJvcmRlciBwYWlu
dHMgaWYgYm9yZGVyLWZpdCBpcyBzZXQuCisgICAgdmlydHVhbCB2b2lkIGJvcmRlckZpdEFkanVz
dChMYXlvdXRSZWN0JikgY29uc3QgeyB9IC8vIFNocmluayB0aGUgYm94IGluIHdoaWNoIHRoZSBi
b3JkZXIgcGFpbnRzIGlmIGJvcmRlci1maXQgaXMgc2V0LgogCiAgICAgLy8gUmVzb2x2ZSBhdXRv
IG1hcmdpbnMgaW4gdGhlIGlubGluZSBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
c28gdGhhdCBvYmplY3RzIGNhbiBiZSBwdXNoZWQgdG8gdGhlIHN0YXJ0LCBtaWRkbGUgb3IgZW5k
CiAgICAgLy8gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2suCkBAIC0yNzYsMTMgKzI3NiwxMyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRJbmxpbmVCb3hXcmFwcGVyKElubGluZUJveCogYm94V3JhcHBl
cikgeyBtX2lubGluZUJveFdyYXBwZXIgPSBib3hXcmFwcGVyOyB9CiAgICAgdm9pZCBkZWxldGVM
aW5lQm94V3JhcHBlcigpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBj
b25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIExheW91dFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKGNvbnN0IExheW91
dFJlY3QmKTsKIAotICAgIHZpcnR1YWwgaW50IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQoKSBjb25zdDsKLSAgICBpbnQgcGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0OworICAgIExheW91dFVuaXQgcGVycGVu
ZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdDsKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21w
dXRlTG9naWNhbEhlaWdodCgpOwpAQCAtMjkyLDkgKzI5Miw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpICYmIHN0eWxlKCktPmxvZ2ljYWxIZWln
aHQoKS5pc0F1dG8oKSAmJiAhaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIChpc1Jvb3QoKSB8
fCBpc0JvZHkoKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBJbnRTaXplIGludHJpbnNpY1NpemUo
KSBjb25zdCB7IHJldHVybiBJbnRTaXplKCk7IH0KLSAgICBpbnQgaW50cmluc2ljTG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGludHJpbnNpY1NpemUoKS53aWR0aCgpIDogaW50cmluc2ljU2l6ZSgpLmhlaWdodCgpOyB9Ci0g
ICAgaW50IGludHJpbnNpY0xvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaW50cmluc2ljU2l6ZSgpLmhlaWdodCgpIDogaW50
cmluc2ljU2l6ZSgpLndpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIExheW91dFNpemUgaW50cmluc2lj
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIExheW91dFNpemUoKTsgfQorICAgIExheW91dFVuaXQgaW50
cmluc2ljTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGludHJpbnNpY1NpemUoKS53aWR0aCgpIDogaW50cmluc2ljU2l6ZSgp
LmhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBpbnRyaW5zaWNMb2dpY2FsSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGludHJpbnNp
Y1NpemUoKS5oZWlnaHQoKSA6IGludHJpbnNpY1NpemUoKS53aWR0aCgpOyB9CiAKICAgICAvLyBX
aGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCBzaHJpbmtzIHRvIGl0cyBpbnRyaW5zaWMgd2lkdGgg
KHJhdGhlciB0aGFuIGZpbGxpbmcgdGhlIHdpZHRoCiAgICAgLy8gb2YgYSBjb250YWluaW5nIGJs
b2NrKS4gIEhUTUw0IGJ1dHRvbnMsIDxzZWxlY3Q+cywgPGlucHV0PnMsIGxlZ2VuZHMsIGFuZCBm
bG9hdGluZy9jb21wYWN0IGVsZW1lbnRzIGRvIHRoaXMuCkBAIC0zMjMsOSArMzIzLDkgQEAgcHVi
bGljOgogICAgIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCkg
OiBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0KCk7IH0KICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0KCkgOiBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsgfQog
Ci0gICAgdmlydHVhbCBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwotICAgIGlu
dCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7Ci0gICAgaW50IHNjcm9sbGJhckxv
Z2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogdmVydGljYWxTY3JvbGxiYXJX
aWR0aCgpOyB9CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgo
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCgpIDogdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOyB9CiAgICAgdmlydHVhbCBib29s
IHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CiAgICAgdmlydHVhbCBib29sIGxvZ2ljYWxT
Y3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNhbkJlU2Nyb2xs
ZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwpAQCAtMzM5LDEyICszMzksMTIgQEAgcHVi
bGljOgogICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93WCgpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJm
bG93Q2xpcCgpICYmIChzdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMIHx8IGhhc0F1dG9I
b3Jpem9udGFsU2Nyb2xsYmFyKCkpOyB9CiAgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3dZKCkgY29u
c3QgeyByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHN0eWxlKCktPm92ZXJmbG93WSgpID09
IE9TQ1JPTEwgfHwgaGFzQXV0b1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOyB9CiAgICAgCi0gICAgdmly
dHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwg
aW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qg
bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAotICAgIHZpcnR1YWwgSW50UmVjdCBvdmVyZmxv
d0NsaXBSZWN0KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7Ci0gICAgSW50UmVjdCBjbGlw
UmVjdChjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBv
dmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgTGF5
b3V0UmVjdCBjbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24pOwogICAgIHZpcnR1
YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBJbnRQb2ludCYpIGNvbnN0IHsgcmV0
dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb250cm9sQ2xpcFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KICAgICBi
b29sIHB1c2hDb250ZW50c0NsaXAoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0KTsKICAgICB2b2lkIHBvcENvbnRlbnRzQ2xpcChQYWludEluZm8mLCBQYWlu
dFBoYXNlIG9yaWdpbmFsUGhhc2UsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCk7CiAKQEAgLTM2Niw3ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIEludFJlY3QgbWFza0NsaXBSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBtYXNr
Q2xpcFJlY3QoKTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKIApAQCAtMzc0LDggKzM3NCw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVyKCkgY29uc3Q7
CiAgICAgCi0gICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCB7IHJl
dHVybiAtMTsgfQotICAgIHZpcnR1YWwgaW50IGxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCB7
IHJldHVybiAtMTsgfQorICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBmaXJzdExpbmVCb3hCYXNlbGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGxhc3RMaW5l
Qm94QmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiAtMTsgfQogCiAgICAgYm9vbCBzaHJpbmtUb0F2
b2lkRmxvYXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0
OwpAQCAtMzg2LDggKzM4Niw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNEZXByZWNhdGVkRmxl
eEl0ZW0oKSBjb25zdCB7IHJldHVybiAhaXNJbmxpbmUoKSAmJiAhaXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgp
OyB9CiAgICAgCi0gICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQ
b3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OwogCiAgICAgZW51bSBGbGlwcGluZ0FkanVzdG1lbnQgeyBDaGlsZFRvUGFyZW50
RmxpcHBpbmdBZGp1c3RtZW50LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50IH07CiAg
ICAgTGF5b3V0UG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IFJlbmRlckJveCogY2hpbGQs
IGNvbnN0IExheW91dFBvaW50JiwgRmxpcHBpbmdBZGp1c3RtZW50KSBjb25zdDsKQEAgLTM5OCwx
MiArMzk4LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShJbnRSZWN0
JikgY29uc3Q7CiAgICAgRmxvYXRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0OwogICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYpIGNv
bnN0OwotICAgIEludFNpemUgbG9jYXRpb25PZmZzZXRJbmNsdWRpbmdGbGlwcGluZygpIGNvbnN0
OworICAgIExheW91dFNpemUgbG9jYXRpb25PZmZzZXRJbmNsdWRpbmdGbGlwcGluZygpIGNvbnN0
OwogCi0gICAgSW50UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24o
UmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBJbnRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEZvclBy
b3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgSW50UmVjdCBsb2dpY2FsTGF5b3V0
T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBJbnRS
ZWN0IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7
CisgICAgTGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24o
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEZv
clByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsb2dpY2Fs
TGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxl
KikgY29uc3Q7CiAKICAgICBSZW5kZXJPdmVyZmxvdyogaGFzUmVuZGVyT3ZlcmZsb3coKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93LmdldCgpOyB9CiAKQEAgLTQ1MCwxMyArNDUwLDEzIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodCgpOwogICAg
IHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhMZW5ndGggbG9naWNhbFdp
ZHRoLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2ssIFRleHREaXJl
Y3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY29udGFpbmVyTG9naWNhbFdpZHRoLCBpbnQgYm9yZGVyc1BsdXNQ
YWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRp
bmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBs
b2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdodCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0
LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQmIGxvZ2ljYWxXaWR0aFZhbHVlLCBpbnQmIG1hcmdpbkxvZ2lj
YWxMZWZ0VmFsdWUsIGludCYgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUsIGludCYgbG9naWNhbExl
ZnRQb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0JiBsb2dpY2FsV2lkdGhWYWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbExlZnRW
YWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUsIExheW91dFVuaXQmIGxv
Z2ljYWxMZWZ0UG9zKTsKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVz
aW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29u
dGFpbmVyQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY29udGFpbmVyTG9naWNhbEhlaWdodCwgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgY29u
dGFpbmVyTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggbG9naWNhbFRv
cCwgTGVuZ3RoIGxvZ2ljYWxCb3R0b20sIExlbmd0aCBtYXJnaW5Mb2dpY2FsVG9wLCBMZW5ndGgg
bWFyZ2luTG9naWNhbEJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCYgbG9naWNhbEhlaWdodFZhbHVlLCBpbnQmIG1hcmdpbkxvZ2ljYWxUb3BW
YWx1ZSwgaW50JiBtYXJnaW5Mb2dpY2FsQm90dG9tVmFsdWUsIGludCYgbG9naWNhbFRvcFBvcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
JiBsb2dpY2FsSGVpZ2h0VmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxUb3BWYWx1ZSwg
TGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbEJvdHRvbVZhbHVlLCBMYXlvdXRVbml0JiBsb2dpY2Fs
VG9wUG9zKTsKIAogICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0UmVwbGFj
ZWQoKTsKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103984</attachid>
            <date>2011-08-15 17:22:23 -0700</date>
            <delta_ts>2011-08-17 13:41:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66156-20110815172222.patch</filename>
            <type>text/plain</type>
            <size>68653</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMDY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDgtMTUgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCb3ggdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb252ZXJ0IFJlbmRlckJveCB0byBuZXcgbGF5b3V0IGFic3RyYWN0aW9uIGFz
IGEgcGFydCBvZiB0aGUgb25nb2luZworICAgICAgICBjb252ZXJzaW9uIHdvcmsuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9s
bFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNl
dFNjcm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3Ap
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6cmVmbGVjdGlvbkJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJl
ZmxlY3RlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50
Qm94TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUNv
bnRlbnRCb3hMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWFz
a0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVwYWludExheWVyUmVj
dHNGb3JJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1c2hDb250ZW50c0Ns
aXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlv
bk1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aFJlcGxhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsSGVpZ2h0UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojps
b2NhbENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxpbmVIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsTGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmxvY2F0aW9uT2Zmc2V0SW5jbHVkaW5nRmxpcHBpbmcpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9y
ZGVyRml0QWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY0xvZ2ljYWxXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY0xvZ2ljYWxIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udHJvbENsaXBSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Zmlyc3RMaW5lQm94QmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpsYXN0TGluZUJveEJhc2VsaW5lKToKKwogMjAxMS0wOC0xNSAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWdpb25hbCBpbmRpY2F0
b3Igc3ltYm9scyB0aGF0IGFyZSBjb21iaW5lZCBzaG91bGQgYmVoYXZlIGFzIGEgc2luZ2xlIGNo
YXJhY3RlciB3aGVuIGVkaXRpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCShyZXZpc2lvbiA5MzA2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNsaWVudEhlaWdodCgpIGNvbgogICAgIHJldHVybiBoZWlnaHQoKSAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiB9
CiAKLWludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVy
Qm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7CiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQog
ICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKQEAgLTQyNCwxMCArNDI0LDEw
IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKICAgICAvLyBGSVhNRTogTmVl
ZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICBpZiAoc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICByZXR1cm4gbWF4KGNsaWVudFdpZHRoKCks
IG1heFhMYXlvdXRPdmVyZmxvdygpIC0gYm9yZGVyTGVmdCgpKTsKLSAgICByZXR1cm4gY2xpZW50
V2lkdGgoKSAtIG1pbigwLCBtaW5YTGF5b3V0T3ZlcmZsb3coKSAtIGJvcmRlckxlZnQoKSk7Cisg
ICAgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBtaW48TGF5b3V0VW5pdD4oMCwgbWluWExheW91dE92
ZXJmbG93KCkgLSBib3JkZXJMZWZ0KCkpOwogfQogCi1pbnQgUmVuZGVyQm94OjpzY3JvbGxIZWln
aHQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7
CiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Ny
b2xsSGVpZ2h0KCk7CkBAIC00MzYsMjkgKzQzNiwyOSBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxI
ZWlnaHQoKSBjb25zdAogICAgIHJldHVybiBtYXgoY2xpZW50SGVpZ2h0KCksIG1heFlMYXlvdXRP
dmVyZmxvdygpIC0gYm9yZGVyVG9wKCkpOwogfQogCi1pbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0
KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBsYXllcigpLT5zY3JvbGxYT2Zmc2V0KCkgOiAw
OwogfQogCi1pbnQgUmVuZGVyQm94OjpzY3JvbGxUb3AoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgp
ID8gbGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNl
dFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCit2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChM
YXlvdXRVbml0IG5ld0xlZnQpCiB7CiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAg
ICBsYXllcigpLT5zY3JvbGxUb1hPZmZzZXQobmV3TGVmdCwgUmVuZGVyTGF5ZXI6OlNjcm9sbE9m
ZnNldENsYW1wZWQpOwogfQogCi12b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdU
b3ApCit2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKExheW91dFVuaXQgbmV3VG9wKQogewog
ICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZT2Zm
c2V0KG5ld1RvcCwgUmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQpOwogfQogCi12b2lk
IFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCit2b2lkIFJlbmRlckJveDo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpCiB7CiAgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3QoYWNjdW11bGF0ZWRP
ZmZzZXQsIHNpemUoKSkpOwogfQpAQCAtNDc1LDkgKzQ3NSw5IEBAIHZvaWQgUmVuZGVyQm94Ojp1
cGRhdGVMYXllclRyYW5zZm9ybSgpCiAgICAgICAgIGxheWVyKCktPnVwZGF0ZVRyYW5zZm9ybSgp
OwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKK0xh
eW91dFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdAogewotICAgIElu
dFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gY29u
dGVudEJveFJlY3QoKTsKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KCkpOwogICAgIHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAg
ICByZXR1cm4gcmVjdDsKQEAgLTQ4NSwxMyArNDg1LDEzIEBAIEludFJlY3QgUmVuZGVyQm94Ojph
YnNvbHV0ZUNvbnRlbnRCb3goKSAKIAogRmxvYXRRdWFkIFJlbmRlckJveDo6YWJzb2x1dGVDb250
ZW50UXVhZCgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsK
KyAgICBMYXlvdXRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwogICAgIHJldHVybiBsb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZWN0KSk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94
OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgSW50UG9pbnQqIGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3QK
K0xheW91dFJlY3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UG9pbnQqIGNhY2hlZE9mZnNldFRv
UmVwYWludENvbnRhaW5lcikgY29uc3QKIHsKLSAgICBJbnRSZWN0IGJveCA9IGJvcmRlckJvdW5k
aW5nQm94KCk7CisgICAgTGF5b3V0UmVjdCBib3ggPSBib3JkZXJCb3VuZGluZ0JveCgpOwogICAg
IGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KGJveCk7CiAKICAgICBGbG9hdFF1YWQgY29u
dGFpbmVyUmVsYXRpdmVRdWFkID0gRmxvYXRSZWN0KGJveCk7CkBAIC01MTUsMTIgKzUxNSwxMiBA
QCB2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yCiAgICAgICAgIHJlY3Rz
LmFwcGVuZChMYXlvdXRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOwogfQogCi1JbnRS
ZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJv
eDo6cmVmbGVjdGlvbkJveCgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZXN1bHQ7CisgICAgTGF5
b3V0UmVjdCByZXN1bHQ7CiAgICAgaWYgKCFzdHlsZSgpLT5ib3hSZWZsZWN0KCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7CisgICAg
TGF5b3V0UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7CiAgICAgcmVzdWx0ID0gYm94OwogICAg
IHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkgewogICAgICAgICBj
YXNlIFJlZmxlY3Rpb25CZWxvdzoKQEAgLTU0OCwxMyArNTQ4LDEzIEBAIGludCBSZW5kZXJCb3g6
OnJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdAogICAgIHJldHVybiBzdHlsZSgpLT5ib3hSZWZsZWN0
KCktPm9mZnNldCgpLmNhbGNWYWx1ZShib3JkZXJCb3hSZWN0KCkuaGVpZ2h0KCkpOwogfQogCi1J
bnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGVkUmVjdChjb25zdCBJbnRSZWN0JiByKSBjb25zdAor
TGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3RlZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikg
Y29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmJveFJlZmxlY3QoKSkKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAgIEludFJlY3Qg
Ym94ID0gYm9yZGVyQm94UmVjdCgpOwotICAgIEludFJlY3QgcmVzdWx0ID0gcjsKKyAgICBMYXlv
dXRSZWN0IGJveCA9IGJvcmRlckJveFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IHI7
CiAgICAgc3dpdGNoIChzdHlsZSgpLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpKSB7CiAgICAg
ICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgogICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94Lm1h
eFkoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3gubWF4WSgpIC0gci5tYXhZKCkpKTsKQEAg
LTU4NCwxMiArNTg0LDEyIEBAIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9s
bGIKICAgICAgICAgJiYgKHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9TQ1JPTEwgfHwgc3R5bGUo
KS0+b3ZlcmZsb3dYKCkgPT0gT0FVVE8pOwogfQogCi1pbnQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFy
U2l6ZSgpID8gbGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDogMDsKIH0KIAotaW50
IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KQEAgLTczOCwxNCArNzM4LDE0IEBAIExheW91dFVu
aXQgUmVuZGVyQm94Ojpjb21wdXRlQ29udGVudEJveEwKIHsKICAgICBpZiAoc3R5bGUoKS0+Ym94
U2l6aW5nKCkgPT0gQk9SREVSX0JPWCkKICAgICAgICAgd2lkdGggLT0gYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxXaWR0aCgpOwotICAgIHJldHVybiBtYXgoMCwgd2lkdGgpOworICAgIHJldHVybiBt
YXg8TGF5b3V0VW5pdD4oMCwgd2lkdGgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSBjb25zdAogewog
ICAgIGlmIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YKQogICAgICAgICBoZWln
aHQgLT0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKLSAgICByZXR1cm4gbWF4KDAs
IGhlaWdodCk7CisgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBoZWlnaHQpOwogfQogCiAv
LyBIaXQgVGVzdGluZwpAQCAtOTY5LDEzICs5NjksMTMgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50
TWFza0ltYWdlcyhjb25zdCBQYQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6Om1hc2tDbGlwUmVjdCgpCitM
YXlvdXRSZWN0IFJlbmRlckJveDo6bWFza0NsaXBSZWN0KCkKIHsKLSAgICBJbnRSZWN0IGJib3gg
PSBib3JkZXJCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBiYm94ID0gYm9yZGVyQm94UmVjdCgp
OwogICAgIGlmIChzdHlsZSgpLT5tYXNrQm94SW1hZ2UoKS5pbWFnZSgpKQogICAgICAgICByZXR1
cm4gYmJveDsKICAgICAKLSAgICBJbnRSZWN0IHJlc3VsdDsKKyAgICBMYXlvdXRSZWN0IHJlc3Vs
dDsKICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogbWFza0xheWVyID0gc3R5bGUoKS0+bWFza0xh
eWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAgICAg
ICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkpIHsKICAgICAgICAgICAgIEJhY2tncm91bmRJbWFn
ZUdlb21ldHJ5IGdlb21ldHJ5OwpAQCAtMTAzOCw3ICsxMDM4LDcgQEAgdm9pZCBSZW5kZXJCb3g6
OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZwogCiBib29sIFJlbmRlckJveDo6cmVwYWludExheWVy
UmVjdHNGb3JJbWFnZShXcmFwcGVkSW1hZ2VQdHIgaW1hZ2UsIGNvbnN0IEZpbGxMYXllciogbGF5
ZXJzLCBib29sIGRyYXdpbmdCYWNrZ3JvdW5kKQogewotICAgIEludFJlY3QgcmVuZGVyZXJSZWN0
OworICAgIExheW91dFJlY3QgcmVuZGVyZXJSZWN0OwogICAgIFJlbmRlckJveCogbGF5ZXJSZW5k
ZXJlciA9IDA7CiAKICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyTGF5ZXIgPSBsYXllcnM7
IGN1ckxheWVyOyBjdXJMYXllciA9IGN1ckxheWVyLT5uZXh0KCkpIHsKQEAgLTEwNTAsOCArMTA1
MCw4IEBAIGJvb2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWcKICAgICAgICAg
ICAgICAgICBpZiAoZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
IGxheWVyUmVuZGVyZXIgPSB2aWV3KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaW50IHJ3Owot
ICAgICAgICAgICAgICAgICAgICBpbnQgcmg7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgcnc7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcmg7CiAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9SZW5kZXJWaWV3KGxheWVyUmVu
ZGVyZXIpLT5mcmFtZVZpZXcoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcncgPSBmcmFt
ZVZpZXctPmNvbnRlbnRzV2lkdGgoKTsKQEAgLTEwNjAsNyArMTA2MCw3IEBAIGJvb2wgUmVuZGVy
Qm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWcKICAgICAgICAgICAgICAgICAgICAgICAgIHJ3
ID0gbGF5ZXJSZW5kZXJlci0+d2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJoID0g
bGF5ZXJSZW5kZXJlci0+aGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgcmVuZGVyZXJSZWN0ID0gSW50UmVjdCgtbGF5ZXJSZW5kZXJlci0+bWFyZ2lu
TGVmdCgpLAorICAgICAgICAgICAgICAgICAgICByZW5kZXJlclJlY3QgPSBMYXlvdXRSZWN0KC1s
YXllclJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAtbGF5
ZXJSZW5kZXJlci0+bWFyZ2luVG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXgobGF5
ZXJSZW5kZXJlci0+d2lkdGgoKSArIGxheWVyUmVuZGVyZXItPm1hcmdpbkxlZnQoKSArIGxheWVy
UmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBs
YXllclJlbmRlcmVyLT5ib3JkZXJSaWdodCgpLCBydyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXgobGF5ZXJSZW5kZXJlci0+aGVpZ2h0KCkgKyBsYXllclJlbmRlcmVyLT5tYXJnaW5Ub3Ao
KSArIGxheWVyUmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpICsgbGF5ZXJSZW5kZXJlci0+Ym9yZGVy
VG9wKCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJCb3R0b20oKSwgcmgpKTsKQEAgLTExMjYsNyAr
MTEyNiw3IEBAIGJvb2wgUmVuZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKFBhaW50SW4KICAgICBJ
bnRSZWN0IGNsaXBSZWN0KGlzQ29udHJvbENsaXAgPyBjb250cm9sQ2xpcFJlY3QoYWNjdW11bGF0
ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkpOwogICAgIHBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlclJhZGl1
cygpKQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHN0eWxl
KCktPmdldFJvdW5kZWRCb3JkZXJGb3IoSW50UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgp
KSkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHN0eWxl
KCktPmdldFJvdW5kZWRCb3JkZXJGb3IoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6
ZSgpKSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTExNDQsMTIgKzExNDQsMTIgQEAgdm9pZCBSZW5kZXJCb3g6OnBvcENv
bnRlbnRzQ2xpcChQYWludEluZgogICAgICAgICBwYWludEluZm8ucGhhc2UgPSBvcmlnaW5hbFBo
YXNlOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBJbnRQ
b2ludCYgbG9jYXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkK
K0xheW91dFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50
JiBsb2NhdGlvbiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KQogewog
ICAgIC8vIEZJWE1FOiBXaGVuIG92ZXJmbG93LWNsaXAgKENTUzMpIGlzIGltcGxlbWVudGVkLCB3
ZSdsbCBvYnRhaW4gdGhlIHByb3BlcnR5CiAgICAgLy8gaGVyZS4KLSAgICBJbnRSZWN0IGNsaXBS
ZWN0KGxvY2F0aW9uICsgSW50U2l6ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSwKLSAgICAg
ICAgc2l6ZSgpIC0gSW50U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJU
b3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdChsb2NhdGlv
biArIExheW91dFNpemUoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSksCisgICAgICAgIHNpemUo
KSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkg
KyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYg
d2UgaGF2ZSB0aGVtLgogICAgIGlmIChsYXllcigpKQpAQCAtMTE1OCwxMSArMTE1OCwxMSBAQCBJ
bnRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zCiAgICAgcmV0dXJuIGNsaXBS
ZWN0OwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6Y2xpcFJlY3QoY29uc3QgSW50UG9pbnQmIGxv
Y2F0aW9uKQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmNsaXBSZWN0KGNvbnN0IExheW91dFBvaW50
JiBsb2NhdGlvbikKIHsKLSAgICBJbnRSZWN0IGNsaXBSZWN0KGxvY2F0aW9uLCBzaXplKCkpOwor
ICAgIExheW91dFJlY3QgY2xpcFJlY3QobG9jYXRpb24sIHNpemUoKSk7CiAgICAgaWYgKCFzdHls
ZSgpLT5jbGlwTGVmdCgpLmlzQXV0bygpKSB7Ci0gICAgICAgIGludCBjID0gc3R5bGUoKS0+Y2xp
cExlZnQoKS5jYWxjVmFsdWUod2lkdGgoKSk7CisgICAgICAgIExheW91dFVuaXQgYyA9IHN0eWxl
KCktPmNsaXBMZWZ0KCkuY2FsY1ZhbHVlKHdpZHRoKCkpOwogICAgICAgICBjbGlwUmVjdC5tb3Zl
KGMsIDApOwogICAgICAgICBjbGlwUmVjdC5jb250cmFjdChjLCAwKTsKICAgICB9CkBAIC0xMTcx
LDcgKzExNzEsNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6Y2xpcFJlY3QoY29uc3QgSW50UG9pCiAg
ICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHdpZHRoKCkgLSBzdHlsZSgpLT5jbGlwUmlnaHQoKS5j
YWxjVmFsdWUod2lkdGgoKSksIDApOwogCiAgICAgaWYgKCFzdHlsZSgpLT5jbGlwVG9wKCkuaXNB
dXRvKCkpIHsKLSAgICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKGhl
aWdodCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjID0gc3R5bGUoKS0+Y2xpcFRvcCgpLmNhbGNW
YWx1ZShoZWlnaHQoKSk7CiAgICAgICAgIGNsaXBSZWN0Lm1vdmUoMCwgYyk7CiAgICAgICAgIGNs
aXBSZWN0LmNvbnRyYWN0KDAsIGMpOwogICAgIH0KQEAgLTExODIsNyArMTE4Miw3IEBAIEludFJl
Y3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBJbnRQb2kKICAgICByZXR1cm4gY2xpcFJlY3Q7
CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRl
bnQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxX
aWR0aEZvckNvbnRlbnQoKSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5p
bmdCbG9jaygpOwogICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkpCkBAIC0xMTkwLDcgKzEx
OTAsNyBAQCBpbnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkCiAgICAgcmV0
dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKIH0KIAotaW50IFJlbmRlckJveDo6cGVy
cGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJCb3g6OnBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkg
Y29uc3QKIHsKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBS
ZW5kZXJTdHlsZSogY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBjYi0+c3R5bGUoKTsKQEAgLTEzNjYs
NyArMTM2Niw3IEBAIHZvaWQgUmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3goSW5saW5lQm8KICAg
ICAgICAgYm94LT5yZW1vdmUoKTsKICAgICAgICAgYm94LT5kZXN0cm95KHJlbmRlckFyZW5hKCkp
OwogICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIHNldExvY2F0aW9uKHJv
dW5kZWRJbnRQb2ludChGbG9hdFBvaW50KGJveC0+eCgpLCBib3gtPnkoKSkpKTsKKyAgICAgICAg
c2V0TG9jYXRpb24ocm91bmRlZExheW91dFBvaW50KEZsb2F0UG9pbnQoYm94LT54KCksIGJveC0+
eSgpKSkpOwogICAgICAgICBtX2lubGluZUJveFdyYXBwZXIgPSBib3g7CiAgICAgfQogfQpAQCAt
MTM4MSwxMiArMTM4MSwxMiBAQCB2b2lkIFJlbmRlckJveDo6ZGVsZXRlTGluZUJveFdyYXBwZXIo
KQogICAgIH0KIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdAorTGF5
b3V0UmVjdCBSZW5kZXJCb3g6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdAogewogICAgIGlmIChzdHlsZSgp
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiAhZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJs
ZUNvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIAotICAgIEludFJlY3QgciA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOworICAg
IExheW91dFJlY3QgciA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogCiAgICAgUmVuZGVyVmlldyog
diA9IHZpZXcoKTsKICAgICBpZiAodikgewpAQCAtMTQxMiw3ICsxNDEyLDcgQEAgSW50UmVjdCBS
ZW5kZXJCb3g6OmNsaXBwZWRPdmVyZmxvd1JlY3RGbwogICAgIHJldHVybiByOwogfQogCi12b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZWN0LCBib29sIGZpeGVkKSBjb25zdAordm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgTGF5b3V0UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkgY29uc3QKIHsKICAg
ICAvLyBUaGUgcmVjdCB3ZSBjb21wdXRlIGF0IGVhY2ggc3RlcCBpcyBzaGlmdGVkIGJ5IG91ciB4
L3kgb2Zmc2V0IGluIHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgY29vcmRpbmF0ZSBzcGFjZS4KICAg
ICAvLyBPbmx5IHdoZW4gd2UgY3Jvc3MgYSB3cml0aW5nIG1vZGUgYm91bmRhcnkgd2lsbCB3ZSBo
YXZlIHRvIHBvc3NpYmx5IGZsaXBGb3JXcml0aW5nTW9kZSAodG8gY29udmVydCBpbnRvIGEgbW9y
ZSBhcHByb3ByaWF0ZQpAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVSZWN0Rm9yUmVwYWludChSZQogCiAgICAgaWYgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlz
UG9zaXRpb25lZCgpKQogICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7Ci0gICAgSW50
UG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBMYXlvdXRQb2ludCB0b3BMZWZ0
ID0gcmVjdC5sb2NhdGlvbigpOwogICAgIHRvcExlZnQubW92ZSh4KCksIHkoKSk7CiAKICAgICBF
UG9zaXRpb24gcG9zaXRpb24gPSBzdHlsZSgpLT5wb3NpdGlvbigpOwpAQCAtMTQ4NSw3ICsxNDg1
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZQogICAgIGlmIChv
LT5pc0Jsb2NrRmxvdygpICYmIHBvc2l0aW9uICE9IEFic29sdXRlUG9zaXRpb24gJiYgcG9zaXRp
b24gIT0gRml4ZWRQb3NpdGlvbikgewogICAgICAgICBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRl
ckJsb2NrKG8pOwogICAgICAgICBpZiAoY2ItPmhhc0NvbHVtbnMoKSkgewotICAgICAgICAgICAg
SW50UmVjdCByZXBhaW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7CisgICAgICAgICAgICBM
YXlvdXRSZWN0IHJlcGFpbnRSZWN0KHRvcExlZnQsIHJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAg
IGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7CiAgICAgICAgICAgICB0b3BM
ZWZ0ID0gcmVwYWludFJlY3QubG9jYXRpb24oKTsKICAgICAgICAgICAgIHJlY3QgPSByZXBhaW50
UmVjdDsKQEAgLTE1MDIsOCArMTUwMiw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZv
clJlcGFpbnQoUmUKICAgICAgICAgLy8gYW55d2F5IGlmIGl0cyBzaXplIGRvZXMgY2hhbmdlLgog
ICAgICAgICB0b3BMZWZ0IC09IGNvbnRhaW5lckJveC0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50
T2Zmc2V0KCk7IC8vIEZvciBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4uCiAKLSAgICAgICAg
SW50UmVjdCByZXBhaW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7Ci0gICAgICAgIEludFJl
Y3QgYm94UmVjdChJbnRQb2ludCgpLCBjb250YWluZXJCb3gtPmxheWVyKCktPnNpemUoKSk7Cisg
ICAgICAgIExheW91dFJlY3QgcmVwYWludFJlY3QodG9wTGVmdCwgcmVjdC5zaXplKCkpOworICAg
ICAgICBMYXlvdXRSZWN0IGJveFJlY3QoTGF5b3V0UG9pbnQoKSwgY29udGFpbmVyQm94LT5sYXll
cigpLT5zaXplKCkpOwogICAgICAgICByZWN0ID0gaW50ZXJzZWN0aW9uKHJlcGFpbnRSZWN0LCBi
b3hSZWN0KTsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTUxMiw3ICsxNTEyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVw
YWludChSZQogCiAgICAgaWYgKGNvbnRhaW5lclNraXBwZWQpIHsKICAgICAgICAgLy8gSWYgdGhl
IHJlcGFpbnRDb250YWluZXIgaXMgYmVsb3cgbywgdGhlbiB3ZSBuZWVkIHRvIG1hcCB0aGUgcmVj
dCBpbnRvIHJlcGFpbnRDb250YWluZXIncyBjb29yZGluYXRlcy4KLSAgICAgICAgSW50U2l6ZSBj
b250YWluZXJPZmZzZXQgPSByZXBhaW50Q29udGFpbmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250
YWluZXIobyk7CisgICAgICAgIExheW91dFNpemUgY29udGFpbmVyT2Zmc2V0ID0gcmVwYWludENv
bnRhaW5lci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKG8pOwogICAgICAgICByZWN0Lm1v
dmUoLWNvbnRhaW5lck9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTc3LDkg
KzE1NzcsOSBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgTGVu
Z3RoIGxvZ2ljYWxXaWR0aExlbmd0aCA9ICh0cmVhdEFzUmVwbGFjZWQpID8gTGVuZ3RoKGNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxXaWR0aCgpLCBGaXhlZCkgOiBzdHlsZSgpLT5sb2dpY2FsV2lkdGgo
KTsKIAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGludCBj
b250YWluZXJMb2dpY2FsV2lkdGggPSBtYXgoMCwgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudCgpKTsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1h
eDxMYXlvdXRVbml0PigwLCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkp
OwogICAgIGJvb2wgaGFzUGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9jayA9IGNiLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgaW50
IGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gPSBjb250YWluZXJMb2dpY2FsV2lkdGg7
CisgICAgTGF5b3V0VW5pdCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uID0gY29udGFp
bmVyTG9naWNhbFdpZHRoOwogICAgIGlmIChoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2Nr
KQogICAgICAgICBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uID0gcGVycGVuZGljdWxh
ckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKTsKICAgICAKQEAgLTE1ODgsNyArMTU4OCw3
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICAgICAgc2V0TWFy
Z2luU3RhcnQoc3R5bGUoKS0+bWFyZ2luU3RhcnQoKS5jYWxjTWluVmFsdWUoY29udGFpbmVyTG9n
aWNhbFdpZHRoKSk7CiAgICAgICAgIHNldE1hcmdpbkVuZChzdHlsZSgpLT5tYXJnaW5FbmQoKS5j
YWxjTWluVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKSk7CiAgICAgICAgIGlmICh0cmVhdEFz
UmVwbGFjZWQpCi0gICAgICAgICAgICBzZXRMb2dpY2FsV2lkdGgobWF4KGxvZ2ljYWxXaWR0aExl
bmd0aC52YWx1ZSgpICsgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpLCBtaW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSkpOworICAgICAgICAgICAgc2V0TG9naWNhbFdpZHRoKG1heDxMYXlv
dXRVbml0Pihsb2dpY2FsV2lkdGhMZW5ndGguY2FsY0Zsb2F0VmFsdWUoMCkgKyBib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbFdpZHRoKCksIG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE2MDEsNyArMTYwMSw3IEBAIHZvaWQgUmVuZGVyQm94
Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKIAogICAgICAgICAvLyBDYWxjdWxhdGUgTWF4TG9naWNh
bFdpZHRoCiAgICAgICAgIGlmICghc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmlu
ZWQoKSkgewotICAgICAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVMb2dpY2Fs
V2lkdGhVc2luZyhNYXhMb2dpY2FsV2lkdGgsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rp
b24pOworICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhMb2dpY2FsV2lkdGggPSBjb21wdXRlTG9n
aWNhbFdpZHRoVXNpbmcoTWF4TG9naWNhbFdpZHRoLCBjb250YWluZXJXaWR0aEluSW5saW5lRGly
ZWN0aW9uKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGgoKSA+IG1heExvZ2ljYWxXaWR0
aCkgewogICAgICAgICAgICAgICAgIHNldExvZ2ljYWxXaWR0aChtYXhMb2dpY2FsV2lkdGgpOwog
ICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aExlbmd0aCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhX
aWR0aCgpOwpAQCAtMTYwOSw3ICsxNjA5LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dp
Y2FsV2lkdGgoKQogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIE1pbkxvZ2ljYWxX
aWR0aAotICAgICAgICBpbnQgbWluTG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVz
aW5nKE1pbkxvZ2ljYWxXaWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7Cisg
ICAgICAgIExheW91dFVuaXQgbWluTG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVz
aW5nKE1pbkxvZ2ljYWxXaWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7CiAg
ICAgICAgIGlmIChsb2dpY2FsV2lkdGgoKSA8IG1pbkxvZ2ljYWxXaWR0aCkgewogICAgICAgICAg
ICAgc2V0TG9naWNhbFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBsb2dpY2Fs
V2lkdGhMZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKTsKQEAgLTE3MjAsNyArMTcy
MCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWEKICAgICAvLyBD
YXNlIE9uZTogVGhlIG9iamVjdCBpcyBiZWluZyBjZW50ZXJlZCBpbiB0aGUgY29udGFpbmluZyBi
bG9jaydzIGF2YWlsYWJsZSBsb2dpY2FsIHdpZHRoLgogICAgIGlmICgobWFyZ2luU3RhcnRMZW5n
dGguaXNBdXRvKCkgJiYgbWFyZ2luRW5kTGVuZ3RoLmlzQXV0bygpICYmIGNoaWxkV2lkdGggPCBj
b250YWluZXJXaWR0aCkKICAgICAgICAgfHwgKCFtYXJnaW5TdGFydExlbmd0aC5pc0F1dG8oKSAm
JiAhbWFyZ2luRW5kTGVuZ3RoLmlzQXV0bygpICYmIGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS0+
dGV4dEFsaWduKCkgPT0gV0VCS0lUX0NFTlRFUikpIHsKLSAgICAgICAgY29udGFpbmluZ0Jsb2Nr
LT5zZXRNYXJnaW5TdGFydEZvckNoaWxkKHRoaXMsIG1heCgwLCAoY29udGFpbmVyV2lkdGggLSBj
aGlsZFdpZHRoKSAvIDIpKTsKKyAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5zZXRNYXJnaW5TdGFy
dEZvckNoaWxkKHRoaXMsIG1heDxMYXlvdXRVbml0PigwLCAoY29udGFpbmVyV2lkdGggLSBjaGls
ZFdpZHRoKSAvIDIpKTsKICAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5zZXRNYXJnaW5FbmRGb3JD
aGlsZCh0aGlzLCBjb250YWluZXJXaWR0aCAtIGNoaWxkV2lkdGggLSBjb250YWluaW5nQmxvY2st
Pm1hcmdpblN0YXJ0Rm9yQ2hpbGQodGhpcykpOwogICAgICAgICByZXR1cm47CiAgICAgfSAKQEAg
LTE4MDUsNiArMTgwNSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodCgp
CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVzdWx0OwogICAgICAgICBpZiAoY2hlY2tNaW5N
YXhIZWlnaHQpIHsKICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNvbXB1dGVMb2dpY2FsSGVp
Z2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBVc2UgPCAwIG9yIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgICAgICBp
ZiAoaGVpZ2h0UmVzdWx0ID09IC0xKQogICAgICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGxv
Z2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgbWluSCA9IGNvbXB1dGVMb2dp
Y2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsgLy8gTGVhdmUgYXMg
LTEgaWYgdW5zZXQuCkBAIC0xODYwLDkgKzE4NjEsMTAgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OmNvbXB1dGVMb2dpY2FsSGVpZwogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IC0xOwog
ICAgIGlmICghaC5pc0F1dG8oKSkgewogICAgICAgICBpZiAoaC5pc0ZpeGVkKCkpCi0gICAgICAg
ICAgICBsb2dpY2FsSGVpZ2h0ID0gaC52YWx1ZSgpOworICAgICAgICAgICAgbG9naWNhbEhlaWdo
dCA9IGguY2FsY0Zsb2F0VmFsdWUoMCk7CiAgICAgICAgIGVsc2UgaWYgKGguaXNQZXJjZW50KCkp
CiAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVp
Z2h0KGgpOworICAgICAgICAvLyBGSVhNRTogVXNlIDwgMCBvciByb3VnaGx5RXF1YWxzIHdoZW4g
d2UgbW92ZSB0byBmbG9hdCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NjE0OAogICAgICAgICBpZiAobG9naWNhbEhlaWdodCAhPSAtMSkgewogICAgICAgICAg
ICAgbG9naWNhbEhlaWdodCA9IGNvbXB1dGVCb3JkZXJCb3hMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxI
ZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxIZWlnaHQ7CkBAIC0xOTI3LDYgKzE5
MjksNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMCiAgICAgZWxz
ZSBpZiAoY2ItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSAmJiAhaXNQb3Np
dGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIHJlY3Vy
IGFuZCBjb21wdXRlIHRoZSBwZXJjZW50YWdlIGhlaWdodCBmb3Igb3VyIGNvbnRhaW5pbmcgYmxv
Y2suCiAgICAgICAgIHJlc3VsdCA9IGNiLT5jb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQo
Y2ItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBVc2UgPCAw
IG9yIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgIGlmIChyZXN1bHQgIT0g
LTEpCiAgICAgICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVp
Z2h0KHJlc3VsdCk7CiAgICAgfSBlbHNlIGlmIChjYi0+aXNSZW5kZXJWaWV3KCkgfHwgKGNiLT5p
c0JvZHkoKSAmJiBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgfHwgaXNQb3NpdGlvbmVkV2l0
aFNwZWNpZmllZEhlaWdodCkgewpAQCAtMTk0MSw2ICsxOTQ0LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTAogICAgICAgICAvLyBhbHdheXMuICBOb3RlIHdlIGNv
dWxkIG9ubHkgaGl0IHRoaXMgY2FzZSBieSByZWN1cnJpbmcgaW50byBjb21wdXRlUGVyY2VudGFn
ZUxvZ2ljYWxIZWlnaHQgb24gYSBwb3NpdGlvbmVkIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgICAg
IHJlc3VsdCA9IGNiLT5jb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoY2ItPmF2YWlsYWJs
ZUxvZ2ljYWxIZWlnaHQoKSk7CiAKKyAgICAvLyBGSVhNRTogVXNlIDwgMCBvciByb3VnaGx5RXF1
YWxzIHdoZW4gd2UgbW92ZSB0byBmbG9hdCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjE0OAogICAgIGlmIChyZXN1bHQgIT0gLTEpIHsKICAgICAgICAgcmVz
dWx0ID0gaGVpZ2h0LmNhbGNWYWx1ZShyZXN1bHQpOwogICAgICAgICBpZiAoaW5jbHVkZUJvcmRl
clBhZGRpbmcpIHsKQEAgLTIxMDksNyArMjExMyw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
QmxvY2tEaXJlY3Rpb25NYXIKIAogICAgIC8vIE1hcmdpbnMgYXJlIGNhbGN1bGF0ZWQgd2l0aCBy
ZXNwZWN0IHRvIHRoZSBsb2dpY2FsIHdpZHRoIG9mCiAgICAgLy8gdGhlIGNvbnRhaW5pbmcgYmxv
Y2sgKDguMykKLSAgICBpbnQgY3cgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250
ZW50KCk7CisgICAgTGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQoKTsKIAogICAgIFJlbmRlclN0eWxlKiBjb250YWluaW5nQmxvY2tTdHlsZSA9IGNv
bnRhaW5pbmdCbG9jay0+c3R5bGUoKTsKICAgICBjb250YWluaW5nQmxvY2stPnNldE1hcmdpbkJl
Zm9yZUZvckNoaWxkKHRoaXMsIHN0eWxlKCktPm1hcmdpbkJlZm9yZVVzaW5nKGNvbnRhaW5pbmdC
bG9ja1N0eWxlKS5jYWxjTWluVmFsdWUoY3cpKTsKQEAgLTIxMzQsOCArMjEzOCw4IEBAIGludCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWQKICAgICBpZiAoIWZpcnN0IHx8ICFs
YXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBmcm9tTGVmdDsKLSAgICBpbnQgZnJv
bVJpZ2h0OworICAgIExheW91dFVuaXQgZnJvbUxlZnQ7CisgICAgTGF5b3V0VW5pdCBmcm9tUmln
aHQ7CiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKSB7CiAgICAgICAgIGZyb21MZWZ0ID0gZmlyc3QtPmxvZ2ljYWxMZWZ0KCkgKyBmaXJz
dC0+Ym9yZGVyTG9naWNhbExlZnQoKTsKICAgICAgICAgZnJvbVJpZ2h0ID0gbGFzdC0+bG9naWNh
bExlZnQoKSArIGxhc3QtPmxvZ2ljYWxXaWR0aCgpIC0gbGFzdC0+Ym9yZGVyTG9naWNhbFJpZ2h0
KCk7CkBAIC0yMTQ0LDcgKzIxNDgsNyBAQCBpbnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkCiAgICAgICAgIGZyb21MZWZ0ID0gbGFzdC0+bG9naWNhbExlZnQoKSArIGxhc3Qt
PmJvcmRlckxvZ2ljYWxMZWZ0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1heCgwLCAoZnJvbVJp
Z2h0IC0gZnJvbUxlZnQpKTsKKyAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGZyb21SaWdo
dCAtIGZyb21MZWZ0KTsKIH0KIAogaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNh
bEhlaWdodEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5p
bmdCbG9jaywgYm9vbCBjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSkgY29uc3QKQEAg
LTIxNjUsOCArMjE2OSw4IEBAIGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxI
ZWkKICAgICBpZiAoIWZpcnN0IHx8ICFsYXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlu
dCBoZWlnaHRSZXN1bHQ7Ci0gICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGZsb3ctPmxpbmVzQm91
bmRpbmdCb3goKTsKKyAgICBMYXlvdXRVbml0IGhlaWdodFJlc3VsdDsKKyAgICBMYXlvdXRSZWN0
IGJvdW5kaW5nQm94ID0gZmxvdy0+bGluZXNCb3VuZGluZ0JveCgpOwogICAgIGlmIChjb250YWlu
aW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIGhlaWdodFJlc3Vs
dCA9IGJvdW5kaW5nQm94LmhlaWdodCgpOwogICAgIGVsc2UKQEAgLTIxODMsNyArMjE4Nyw3IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZSgKIAogICAgIC8vIEZJWE1F
OiBUaGUgc3RhdGljIGRpc3RhbmNlIGNvbXB1dGF0aW9uIGhhcyBub3QgYmVlbiBwYXRjaGVkIGZv
ciBtaXhlZCB3cml0aW5nIG1vZGVzIHlldC4KICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09
IExUUikgewotICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24gPSBjaGlsZC0+bGF5ZXIoKS0+c3Rh
dGljSW5saW5lUG9zaXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMb2dpY2FsTGVmdCgp
OworICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0
YXRpY0lubGluZVBvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyTG9naWNhbExlZnQo
KTsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBjaGlsZC0+cGFyZW50KCk7IGN1
cnIgJiYgY3VyciAhPSBjb250YWluZXJCbG9jazsgY3VyciA9IGN1cnItPmNvbnRhaW5lcigpKSB7
CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkKICAgICAgICAgICAgICAgICBzdGF0aWNQ
b3NpdGlvbiArPSB0b1JlbmRlckJveChjdXJyKS0+bG9naWNhbExlZnQoKTsKQEAgLTIxOTEsNyAr
MjE5NSw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZSgKICAgICAg
ICAgbG9naWNhbExlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKICAgICB9IGVs
c2UgewogICAgICAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IGNoaWxkLT5wYXJlbnQoKS0+
ZW5jbG9zaW5nQm94KCk7Ci0gICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5sYXll
cigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpICsgY29udGFpbmVyTG9naWNhbFdpZHRoICsgY29u
dGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxSaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IHN0
YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCkgKyBj
b250YWluZXJMb2dpY2FsV2lkdGggKyBjb250YWluZXJCbG9jay0+Ym9yZGVyTG9naWNhbFJpZ2h0
KCk7CiAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGVuY2xvc2luZ0JveC0+bG9naWNhbFdpZHRo
KCk7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZW5jbG9zaW5nQm94OyBjdXJy
ICYmIGN1cnIgIT0gY29udGFpbmVyQmxvY2s7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkgewog
ICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpCkBAIC0yMjM3LDE4ICsyMjQxLDE4IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyByZWxhdGl2ZSBw
b3NpdGlvbmVkIGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFp
bmVyQmxvY2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKICAgICAKLSAg
ICBjb25zdCBpbnQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7CisgICAgY29uc3QgTGF5b3V0VW5p
dCBjb250YWluZXJMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQ
b3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKIAogICAgIC8vIFRvIG1hdGNoIFdpbklFLCBpbiBx
dWlya3MgbW9kZSB1c2UgdGhlIHBhcmVudCdzICdkaXJlY3Rpb24nIHByb3BlcnR5CiAgICAgLy8g
aW5zdGVhZCBvZiB0aGUgdGhlIGNvbnRhaW5lciBibG9jaydzLgogICAgIFRleHREaXJlY3Rpb24g
Y29udGFpbmVyRGlyZWN0aW9uID0gKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSA/IHBhcmVu
dCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA6IGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKTsKLSAgICBjb25zdCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxXaWR0aCgpOworICAgIGNvbnN0IExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5n
ID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJn
aW5Mb2dpY2FsTGVmdCA9IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCktPm1hcmdpbkxlZnQoKSA6IHN0
eWxlKCktPm1hcmdpblRvcCgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQg
PSBpc0hvcml6b250YWwgPyBzdHlsZSgpLT5tYXJnaW5SaWdodCgpIDogc3R5bGUoKS0+bWFyZ2lu
Qm90dG9tKCk7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFs
ID8gbV9tYXJnaW5MZWZ0IDogbV9tYXJnaW5Ub3A7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsUmln
aHRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsK
KyAgICBMYXlvdXRVbml0JiBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFsID8g
bV9tYXJnaW5MZWZ0IDogbV9tYXJnaW5Ub3A7CisgICAgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNh
bFJpZ2h0QWxpYXMgPSBpc0hvcml6b250YWwgPyBtX21hcmdpblJpZ2h0IDogbV9tYXJnaW5Cb3R0
b207CiAKICAgICBMZW5ndGggbG9naWNhbExlZnQgPSBzdHlsZSgpLT5sb2dpY2FsTGVmdCgpOwog
ICAgIExlbmd0aCBsb2dpY2FsUmlnaHQgPSBzdHlsZSgpLT5sb2dpY2FsUmlnaHQoKTsKQEAgLTIy
ODIsOCArMjI4Niw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwK
ICAgICBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UobG9naWNhbExlZnQsIGxvZ2ljYWxSaWdo
dCwgdGhpcywgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgY29udGFpbmVy
RGlyZWN0aW9uKTsKICAgICAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2
YWx1ZXMgZm9yICd3aWR0aCcgY2FzZS4KLSAgICBpbnQgbG9naWNhbFdpZHRoUmVzdWx0OwotICAg
IGludCBsb2dpY2FsTGVmdFJlc3VsdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aFJlc3Vs
dDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UmVzdWx0OwogICAgIGNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbFdpZHRoKCksIGNvbnRhaW5lckJs
b2NrLCBjb250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGgsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmln
aHQsIG1hcmdpbkxvZ2ljYWxMZWZ0LCBtYXJnaW5Mb2dpY2FsUmlnaHQsCkBAIC0yMjkzLDEwICsy
Mjk3LDEwIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKIAogICAg
IC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ21heC13aWR0aCcg
Y2FzZS4KICAgICBpZiAoIXN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkp
IHsKLSAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aDsKLSAgICAgICAgaW50IG1heE1hcmdpbkxv
Z2ljYWxMZWZ0OwotICAgICAgICBpbnQgbWF4TWFyZ2luTG9naWNhbFJpZ2h0OwotICAgICAgICBp
bnQgbWF4TG9naWNhbExlZnRQb3M7CisgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbFdpZHRo
OworICAgICAgICBMYXlvdXRVbml0IG1heE1hcmdpbkxvZ2ljYWxMZWZ0OworICAgICAgICBMYXlv
dXRVbml0IG1heE1hcmdpbkxvZ2ljYWxSaWdodDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhMb2dp
Y2FsTGVmdFBvczsKIAogICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5n
KHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyRGly
ZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5lckxvZ2ljYWxXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLApAQCAtMjMxMywxMCArMjMxNywx
MCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAKICAgICAvLyBD
YWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4td2lkdGgnIGNhc2Uu
CiAgICAgaWYgKCFzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKS5pc1plcm8oKSkgewotICAgICAg
ICBpbnQgbWluTG9naWNhbFdpZHRoOwotICAgICAgICBpbnQgbWluTWFyZ2luTG9naWNhbExlZnQ7
Ci0gICAgICAgIGludCBtaW5NYXJnaW5Mb2dpY2FsUmlnaHQ7Ci0gICAgICAgIGludCBtaW5Mb2dp
Y2FsTGVmdFBvczsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5Mb2dpY2FsV2lkdGg7CisgICAgICAg
IExheW91dFVuaXQgbWluTWFyZ2luTG9naWNhbExlZnQ7CisgICAgICAgIExheW91dFVuaXQgbWlu
TWFyZ2luTG9naWNhbFJpZ2h0OworICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxMZWZ0UG9z
OwogCiAgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+
bG9naWNhbE1pbldpZHRoKCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9naWNh
bFdpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCkBAIC0yMzQ0LDcgKzIzNDgsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgc2V0TG9naWNhbFdpZHRoKGxv
Z2ljYWxXaWR0aCgpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIH0KIAotc3RhdGljIHZvaWQgY29t
cHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldChpbnQmIGxvZ2ljYWxMZWZ0UG9zLCBjb25z
dCBSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbFdpZHRoVmFsdWUsIGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkK
K3N0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsTGVmdFBvc2l0aW9uZWRPZmZzZXQoTGF5b3V0VW5p
dCYgbG9naWNhbExlZnRQb3MsIGNvbnN0IFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9n
aWNhbFdpZHRoVmFsdWUsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9j
aywgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgpCiB7CiAgICAgLy8gRGVhbCB3aXRo
IGRpZmZlcmluZyB3cml0aW5nIG1vZGVzIGhlcmUuICBPdXIgb2Zmc2V0IG5lZWRzIHRvIGJlIGlu
IHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzcGFjZS4gSWYgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgZmxpcHBlZAogICAgIC8vIGFsb25nIHRoaXMgYXhpcywgdGhlbiB3ZSBuZWVk
IHRvIGZsaXAgdGhlIGNvb3JkaW5hdGUuICBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyBib3RoIGEgZmxpcHBlZCBtb2RlIGFuZCBwZXJwZW5kaWN1bGFyIHRv
IHVzLgpAQCAtMjM1NiwxNSArMjM2MCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbExl
ZnRQb3NpdGlvbmVkCiB9CiAKIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxXaWR0aFVzaW5nKExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29u
dGFpbmVyTG9naWNhbFdpZHRoLCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250YWlu
ZXJMb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxM
ZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQsIExlbmd0
aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQmIGxvZ2ljYWxXaWR0aFZhbHVlLCBpbnQmIG1hcmdpbkxvZ2lj
YWxMZWZ0VmFsdWUsIGludCYgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUsIGludCYgbG9naWNhbExl
ZnRQb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0JiBsb2dpY2FsV2lkdGhWYWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNh
bExlZnRWYWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUsIExheW91dFVu
aXQmIGxvZ2ljYWxMZWZ0UG9zKQogewogICAgIC8vICdsZWZ0JyBhbmQgJ3JpZ2h0JyBjYW5ub3Qg
Ym90aCBiZSAnYXV0bycgYmVjYXVzZSBvbmUgd291bGQgb2YgYmVlbgogICAgIC8vIGNvbnZlcnRl
ZCB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGFscmVhZHkKICAgICBBU1NFUlQoIShsb2dpY2FsTGVm
dC5pc0F1dG8oKSAmJiBsb2dpY2FsUmlnaHQuaXNBdXRvKCkpKTsKIAotICAgIGludCBsb2dpY2Fs
TGVmdFZhbHVlID0gMDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmFsdWUgPSAwOwogCiAg
ICAgYm9vbCBsb2dpY2FsV2lkdGhJc0F1dG8gPSBsb2dpY2FsV2lkdGguaXNJbnRyaW5zaWNPckF1
dG8oKTsKICAgICBib29sIGxvZ2ljYWxMZWZ0SXNBdXRvID0gbG9naWNhbExlZnQuaXNBdXRvKCk7
CkBAIC0yMzg5LDcgKzIzOTMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsCiAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBsb2dpY2FsTGVmdC5jYWxjVmFsdWUo
Y29udGFpbmVyTG9naWNhbFdpZHRoKTsKICAgICAgICAgbG9naWNhbFdpZHRoVmFsdWUgPSBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGguY2FsY1ZhbHVlKGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aCkpOwogCi0gICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNv
bnRhaW5lckxvZ2ljYWxXaWR0aCAtIChsb2dpY2FsTGVmdFZhbHVlICsgbG9naWNhbFdpZHRoVmFs
dWUgKyBsb2dpY2FsUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkgKyBib3Jk
ZXJzUGx1c1BhZGRpbmcpOworICAgICAgICBjb25zdCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNl
ID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsV2lk
dGhWYWx1ZSArIGxvZ2ljYWxSaWdodC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKSAr
IGJvcmRlcnNQbHVzUGFkZGluZyk7CiAKICAgICAgICAgLy8gTWFyZ2lucyBhcmUgbm93IHRoZSBv
bmx5IHVua25vd24KICAgICAgICAgaWYgKG1hcmdpbkxvZ2ljYWxMZWZ0LmlzQXV0bygpICYmIG1h
cmdpbkxvZ2ljYWxSaWdodC5pc0F1dG8oKSkgewpAQCAtMjQ3MCwxOCArMjQ3NCwxOCBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIG1hcmdpbkxvZ2lj
YWxMZWZ0VmFsdWUgPSBtYXJnaW5Mb2dpY2FsTGVmdC5jYWxjTWluVmFsdWUoY29udGFpbmVyTG9n
aWNhbFdpZHRoKTsKICAgICAgICAgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUgPSBtYXJnaW5Mb2dp
Y2FsUmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7CiAKLSAgICAgICAg
Y29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKG1hcmdp
bkxvZ2ljYWxMZWZ0VmFsdWUgKyBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSArIGJvcmRlcnNQbHVz
UGFkZGluZyk7CisgICAgICAgIGNvbnN0IExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UgPSBjb250
YWluZXJMb2dpY2FsV2lkdGggLSAobWFyZ2luTG9naWNhbExlZnRWYWx1ZSArIG1hcmdpbkxvZ2lj
YWxSaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIAogICAgICAgICAvLyBGSVhNRTog
SXMgdGhlcmUgYSBmYXN0ZXIgd2F5IHRvIGZpbmQgdGhlIGNvcnJlY3QgY2FzZT8KICAgICAgICAg
Ly8gVXNlIHJ1bGUvY2FzZSB0aGF0IGFwcGxpZXMuCiAgICAgICAgIGlmIChsb2dpY2FsTGVmdElz
QXV0byAmJiBsb2dpY2FsV2lkdGhJc0F1dG8gJiYgIWxvZ2ljYWxSaWdodElzQXV0bykgewogICAg
ICAgICAgICAgLy8gUlVMRSAxOiAodXNlIHNocmluay10by1maXQgZm9yIHdpZHRoLCBhbmQgc29s
dmUgb2YgbGVmdCkKLSAgICAgICAgICAgIGludCBsb2dpY2FsUmlnaHRWYWx1ZSA9IGxvZ2ljYWxS
aWdodC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIExheW91
dFVuaXQgbG9naWNhbFJpZ2h0VmFsdWUgPSBsb2dpY2FsUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBpdCBiZSBiZXR0
ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGluIG9uZSBzdGVwPwotICAgICAgICAgICAgaW50IHBy
ZWZlcnJlZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1Bh
ZGRpbmc7Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBhdmFp
bGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNhbFJpZ2h0VmFsdWU7CisgICAgICAg
ICAgICBMYXlvdXRVbml0IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBMYXlvdXRVbml0IHByZWZlcnJl
ZE1pbldpZHRoID0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRp
bmc7CisgICAgICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3Bh
Y2UgLSBsb2dpY2FsUmlnaHRWYWx1ZTsKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aFZhbHVlID0g
bWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0
aCk7CiAgICAgICAgICAgICBsb2dpY2FsTGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAobG9n
aWNhbFdpZHRoVmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
IWxvZ2ljYWxMZWZ0SXNBdXRvICYmIGxvZ2ljYWxXaWR0aElzQXV0byAmJiBsb2dpY2FsUmlnaHRJ
c0F1dG8pIHsKQEAgLTI0ODksOSArMjQ5Myw5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9z
aXRpb25lZExvZ2ljYWwKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBsb2dpY2FsTGVm
dC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKIAogICAgICAgICAgICAgLy8gRklY
TUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmluay10by1maXQgaW4gb25lIHN0ZXA/
Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5X
aWR0aCA9IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwot
ICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBsb2dpY2Fs
TGVmdFZhbHVlOworICAgICAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0aCA9IG1heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAg
TGF5b3V0VW5pdCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
IC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVX
aWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNhbExlZnRWYWx1ZTsKICAgICAgICAgICAgIGxv
Z2ljYWxXaWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lk
dGgpLCBwcmVmZXJyZWRXaWR0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAobG9naWNhbExlZnRJc0F1
dG8gJiYgIWxvZ2ljYWxXaWR0aElzQXV0byAmJiAhbG9naWNhbFJpZ2h0SXNBdXRvKSB7CiAgICAg
ICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBmb3IgbGVmdCkKQEAgLTI1MzQsNyArMjUzOCw3IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKEwKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGUgc3RhdGljIGRpc3RhbmNlIGNvbXB1dGF0aW9uIGhh
cyBub3QgYmVlbiBwYXRjaGVkIGZvciBtaXhlZCB3cml0aW5nIG1vZGVzLgotICAgIGludCBzdGF0
aWNMb2dpY2FsVG9wID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0Jsb2NrUG9zaXRpb24oKSAtIGNv
bnRhaW5lckJsb2NrLT5ib3JkZXJCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IHN0YXRpY0xvZ2lj
YWxUb3AgPSBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljQmxvY2tQb3NpdGlvbigpIC0gY29udGFpbmVy
QmxvY2stPmJvcmRlckJlZm9yZSgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gY2hp
bGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxvY2s7IGN1cnIgPSBjdXJy
LT5jb250YWluZXIoKSkgewogICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSAmJiAhY3Vyci0+aXNU
YWJsZVJvdygpKQogICAgICAgICAgICAgc3RhdGljTG9naWNhbFRvcCArPSB0b1JlbmRlckJveChj
dXJyKS0+bG9naWNhbFRvcCgpOwpAQCAtMjU1OSwxNSArMjU2MywxNSBAQCB2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRhaW5p
bmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3NpbmcgcmVs
cG9zaXRpb25lZCBpbmxpbmUuCiAgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRh
aW5lckJsb2NrID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWluZXIoKSk7CiAKLSAgICBj
b25zdCBpbnQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxI
ZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKKyAgICBjb25zdCBMYXlvdXRVbml0
IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9y
UG9zaXRpb25lZChjb250YWluZXJCbG9jayk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgYm9vbCBpc0ZsaXBwZWQgPSBzdHlsZSgpLT5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpOwotICAgIGNvbnN0IGludCBib3JkZXJzUGx1c1Bh
ZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOworICAgIGNvbnN0IExheW91
dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQo
KTsKICAgICBjb25zdCBMZW5ndGggbWFyZ2luQmVmb3JlID0gc3R5bGUoKS0+bWFyZ2luQmVmb3Jl
KCk7CiAgICAgY29uc3QgTGVuZ3RoIG1hcmdpbkFmdGVyID0gc3R5bGUoKS0+bWFyZ2luQWZ0ZXIo
KTsKLSAgICBpbnQmIG1hcmdpbkJlZm9yZUFsaWFzID0gaXNIb3Jpem9udGFsID8gKGlzRmxpcHBl
ZCA/IG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5Ub3ApIDogKGlzRmxpcHBlZCA/IG1fbWFyZ2lu
UmlnaHQ6IG1fbWFyZ2luTGVmdCk7Ci0gICAgaW50JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jp
em9udGFsID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlz
RmxpcHBlZCA/IG1fbWFyZ2luTGVmdDogbV9tYXJnaW5SaWdodCk7CisgICAgTGF5b3V0VW5pdCYg
bWFyZ2luQmVmb3JlQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5C
b3R0b20gOiBtX21hcmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDogbV9tYXJn
aW5MZWZ0KTsKKyAgICBMYXlvdXRVbml0JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jpem9udGFs
ID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlzRmxpcHBl
ZCA/IG1fbWFyZ2luTGVmdDogbV9tYXJnaW5SaWdodCk7CiAKICAgICBMZW5ndGggbG9naWNhbFRv
cCA9IHN0eWxlKCktPmxvZ2ljYWxUb3AoKTsKICAgICBMZW5ndGggbG9naWNhbEJvdHRvbSA9IHN0
eWxlKCktPmxvZ2ljYWxCb3R0b20oKTsKQEAgLTI1OTMsOCArMjU5Nyw4IEBAIHZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXRp
YyBkaXN0YW5jZSBpZiBuZWVkZWQuCiAgICAgY29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2UobG9n
aWNhbFRvcCwgbG9naWNhbEJvdHRvbSwgdGhpcywgY29udGFpbmVyQmxvY2spOwogCi0gICAgaW50
IGxvZ2ljYWxIZWlnaHRSZXN1bHQ7IC8vIE5lZWRlZCB0byBjb21wdXRlIG92ZXJmbG93LgotICAg
IGludCBsb2dpY2FsVG9wUG9zOworICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodFJlc3VsdDsg
Ly8gTmVlZGVkIHRvIGNvbXB1dGUgb3ZlcmZsb3cuCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
UG9zOwogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAn
aGVpZ2h0JyBjYXNlLgogICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5nKHN0
eWxlKCktPmxvZ2ljYWxIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxI
ZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKQEAgLTI2MDcsMTAgKzI2MTEsMTAgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogCiAgICAgLy8gQ2FsY3VsYXRlIGNv
bnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnbWF4LWhlaWdodCcgY2FzZS4KICAgICBpZiAo
IXN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGlu
dCBtYXhMb2dpY2FsSGVpZ2h0OwotICAgICAgICBpbnQgbWF4TWFyZ2luQmVmb3JlOwotICAgICAg
ICBpbnQgbWF4TWFyZ2luQWZ0ZXI7Ci0gICAgICAgIGludCBtYXhMb2dpY2FsVG9wUG9zOworICAg
ICAgICBMYXlvdXRVbml0IG1heExvZ2ljYWxIZWlnaHQ7CisgICAgICAgIExheW91dFVuaXQgbWF4
TWFyZ2luQmVmb3JlOworICAgICAgICBMYXlvdXRVbml0IG1heE1hcmdpbkFmdGVyOworICAgICAg
ICBMYXlvdXRVbml0IG1heExvZ2ljYWxUb3BQb3M7CiAKICAgICAgICAgY29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpLCBjb250YWlu
ZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wLCBsb2dp
Y2FsQm90dG9tLCBtYXJnaW5CZWZvcmUsIG1hcmdpbkFmdGVyLApAQCAtMjYyNiwxMCArMjYzMCwx
MCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAKICAgICAvLyBD
YWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4taGVpZ2h0JyBjYXNl
LgogICAgIGlmICghc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzWmVybygpKSB7Ci0gICAg
ICAgIGludCBtaW5Mb2dpY2FsSGVpZ2h0OwotICAgICAgICBpbnQgbWluTWFyZ2luQmVmb3JlOwot
ICAgICAgICBpbnQgbWluTWFyZ2luQWZ0ZXI7Ci0gICAgICAgIGludCBtaW5Mb2dpY2FsVG9wUG9z
OworICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxIZWlnaHQ7CisgICAgICAgIExheW91dFVu
aXQgbWluTWFyZ2luQmVmb3JlOworICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVyOwor
ICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxUb3BQb3M7CiAKICAgICAgICAgY29tcHV0ZVBv
c2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLCBj
b250YWluZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9w
LCBsb2dpY2FsQm90dG9tLCBtYXJnaW5CZWZvcmUsIG1hcmdpbkFmdGVyLApAQCAtMjY0Nyw3ICsy
NjUxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIHNl
dExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodFJlc3VsdCArIGJvcmRlcnNQbHVzUGFkZGluZyk7
CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsVG9wUG9zaXRpb25lZE9mZnNldChpbnQm
IGxvZ2ljYWxUb3BQb3MsIGNvbnN0IFJlbmRlckJveCogY2hpbGQsIGludCBsb2dpY2FsSGVpZ2h0
VmFsdWUsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgaW50IGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQpCitzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbFRvcFBvc2l0
aW9uZWRPZmZzZXQoTGF5b3V0VW5pdCYgbG9naWNhbFRvcFBvcywgY29uc3QgUmVuZGVyQm94KiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0VmFsdWUsIGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjb250YWluZXJCbG9jaywgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsSGVpZ2h0
KQogewogICAgIC8vIERlYWwgd2l0aCBkaWZmZXJpbmcgd3JpdGluZyBtb2RlcyBoZXJlLiAgT3Vy
IG9mZnNldCBuZWVkcyB0byBiZSBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUg
c3BhY2UuIElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZsaXBwZWQKICAgICAvLyBhbG9uZyB0
aGlzIGF4aXMsIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBjb29yZGluYXRlLiAgVGhpcyBjYW4g
b25seSBoYXBwZW4gaWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgYm90aCBhIGZsaXBwZWQgbW9k
ZSBhbmQgcGVycGVuZGljdWxhciB0byB1cy4KQEAgLTI2NzAsMTcgKzI2NzQsMTcgQEAgc3RhdGlj
IHZvaWQgY29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkTwogfQogCiB2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGxvZ2ljYWxIZWlnaHRM
ZW5ndGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udGFp
bmVyTG9naWNhbEhlaWdodCwgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5l
ckxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dpY2Fs
VG9wLCBMZW5ndGggbG9naWNhbEJvdHRvbSwgTGVuZ3RoIG1hcmdpbkJlZm9yZSwgTGVuZ3RoIG1h
cmdpbkFmdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgbG9naWNhbEhlaWdodFZhbHVlLCBpbnQmIG1hcmdpbkJlZm9yZVZhbHVlLCBp
bnQmIG1hcmdpbkFmdGVyVmFsdWUsIGludCYgbG9naWNhbFRvcFBvcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0JiBsb2dpY2Fs
SGVpZ2h0VmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkJlZm9yZVZhbHVlLCBMYXlvdXRVbml0JiBt
YXJnaW5BZnRlclZhbHVlLCBMYXlvdXRVbml0JiBsb2dpY2FsVG9wUG9zKQogewogICAgIC8vICd0
b3AnIGFuZCAnYm90dG9tJyBjYW5ub3QgYm90aCBiZSAnYXV0bycgYmVjYXVzZSAndG9wIHdvdWxk
IG9mIGJlZW4KICAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBpbiBjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQogICAgIEFTU0VSVCghKGxvZ2ljYWxUb3AuaXNB
dXRvKCkgJiYgbG9naWNhbEJvdHRvbS5pc0F1dG8oKSkpOwogCi0gICAgaW50IGNvbnRlbnRMb2dp
Y2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCkgLSBib3JkZXJz
UGx1c1BhZGRpbmc7CiAKLSAgICBpbnQgbG9naWNhbFRvcFZhbHVlID0gMDsKKyAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3BWYWx1ZSA9IDA7CiAKICAgICBib29sIGxvZ2ljYWxIZWlnaHRJc0F1dG8g
PSBsb2dpY2FsSGVpZ2h0TGVuZ3RoLmlzQXV0bygpOwogICAgIGJvb2wgbG9naWNhbFRvcElzQXV0
byA9IGxvZ2ljYWxUb3AuaXNBdXRvKCk7CkBAIC0yNzA3LDcgKzI3MTEsNyBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIGxvZ2ljYWxIZWlnaHRWYWx1
ZSA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0TGVuZ3RoLmNh
bGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgIGxvZ2ljYWxUb3BWYWx1
ZSA9IGxvZ2ljYWxUb3AuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpOwogCi0gICAg
ICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSAo
bG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEhlaWdodFZhbHVlICsgbG9naWNhbEJvdHRvbS5jYWxj
VmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdodCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOworICAg
ICAgICBjb25zdCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbEhl
aWdodCAtIChsb2dpY2FsVG9wVmFsdWUgKyBsb2dpY2FsSGVpZ2h0VmFsdWUgKyBsb2dpY2FsQm90
dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSArIGJvcmRlcnNQbHVzUGFkZGlu
Zyk7CiAKICAgICAgICAgLy8gTWFyZ2lucyBhcmUgbm93IHRoZSBvbmx5IHVua25vd24KICAgICAg
ICAgaWYgKG1hcmdpbkJlZm9yZS5pc0F1dG8oKSAmJiBtYXJnaW5BZnRlci5pc0F1dG8oKSkgewpA
QCAtMjc1OCw3ICsyNzYyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbAogICAgICAgICBtYXJnaW5CZWZvcmVWYWx1ZSA9IG1hcmdpbkJlZm9yZS5jYWxjTWluVmFs
dWUoY29udGFpbmVyTG9naWNhbEhlaWdodCk7CiAgICAgICAgIG1hcmdpbkFmdGVyVmFsdWUgPSBt
YXJnaW5BZnRlci5jYWxjTWluVmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdodCk7CiAKLSAgICAg
ICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbEhlaWdodCAtICht
YXJnaW5CZWZvcmVWYWx1ZSArIG1hcmdpbkFmdGVyVmFsdWUgKyBib3JkZXJzUGx1c1BhZGRpbmcp
OworICAgICAgICBjb25zdCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9n
aWNhbEhlaWdodCAtIChtYXJnaW5CZWZvcmVWYWx1ZSArIG1hcmdpbkFmdGVyVmFsdWUgKyBib3Jk
ZXJzUGx1c1BhZGRpbmcpOwogCiAgICAgICAgIC8vIFVzZSBydWxlL2Nhc2UgdGhhdCBhcHBsaWVz
LgogICAgICAgICBpZiAobG9naWNhbFRvcElzQXV0byAmJiBsb2dpY2FsSGVpZ2h0SXNBdXRvICYm
ICFsb2dpY2FsQm90dG9tSXNBdXRvKSB7CkBAIC0yNzc2LDcgKzI3ODAsNyBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIH0gZWxzZSBpZiAoIWxvZ2lj
YWxUb3BJc0F1dG8gJiYgbG9naWNhbEhlaWdodElzQXV0byAmJiAhbG9naWNhbEJvdHRvbUlzQXV0
bykgewogICAgICAgICAgICAgLy8gUlVMRSA1OiAoc29sdmUgb2YgaGVpZ2h0KQogICAgICAgICAg
ICAgbG9naWNhbFRvcFZhbHVlID0gbG9naWNhbFRvcC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNh
bEhlaWdodCk7Ci0gICAgICAgICAgICBsb2dpY2FsSGVpZ2h0VmFsdWUgPSBtYXgoMCwgYXZhaWxh
YmxlU3BhY2UgLSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUoY29u
dGFpbmVyTG9naWNhbEhlaWdodCkpKTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHRWYWx1ZSA9
IG1heDxMYXlvdXRVbml0PigwLCBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsVG9wVmFsdWUgKyBs
b2dpY2FsQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSkpOwogICAgICAg
ICB9IGVsc2UgaWYgKCFsb2dpY2FsVG9wSXNBdXRvICYmICFsb2dpY2FsSGVpZ2h0SXNBdXRvICYm
IGxvZ2ljYWxCb3R0b21Jc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgNjogKG5vIG5lZWQg
c29sdmUgb2YgYm90dG9tKQogICAgICAgICAgICAgbG9naWNhbEhlaWdodFZhbHVlID0gY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHRMZW5ndGguY2FsY1ZhbHVlKGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQpKTsKQEAgLTI4MDEsNyArMjgwNSw3IEBAIHZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyByZWxhdGl2ZSBwb3NpdGlvbmVk
IGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2sg
PSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAotICAgIGNvbnN0IGludCBj
b250YWluZXJMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3Np
dGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKKyAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29u
dGFpbmVyQmxvY2spOwogCiAgICAgLy8gVG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2RlIHVz
ZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9mIHRo
ZSB0aGUgY29udGFpbmVyIGJsb2NrJ3MuCkBAIC0yODEzLDggKzI4MTcsOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgTGVuZ3RoIGxvZ2ljYWxSaWdodCA9
IHN0eWxlKCktPmxvZ2ljYWxSaWdodCgpOwogICAgIExlbmd0aCBtYXJnaW5Mb2dpY2FsTGVmdCA9
IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCktPm1hcmdpbkxlZnQoKSA6IHN0eWxlKCktPm1hcmdpblRv
cCgpOwogICAgIExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQgPSBpc0hvcml6b250YWwgPyBzdHls
ZSgpLT5tYXJnaW5SaWdodCgpIDogc3R5bGUoKS0+bWFyZ2luQm90dG9tKCk7Ci0gICAgaW50JiBt
YXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFsID8gbV9tYXJnaW5MZWZ0IDogbV9t
YXJnaW5Ub3A7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGlzSG9yaXpvbnRh
bCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsKKyAgICBMYXlvdXRVbml0JiBtYXJn
aW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFsID8gbV9tYXJnaW5MZWZ0IDogbV9tYXJn
aW5Ub3A7CisgICAgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXMgPSBpc0hvcml6
b250YWwgPyBtX21hcmdpblJpZ2h0IDogbV9tYXJnaW5Cb3R0b207CiAKICAgICAvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKlwKICAgICAgKiAxLiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWlu
ZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZApAQCAtMjgyNCw3ICsyODI4LDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIC8vIGFyZSBkZWFsdCB3aXRoIGlu
IGNvbXB1dGVSZXBsYWNlZFdpZHRoKCkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0ZXBzIHRvIHBy
b2R1Y2UKICAgICAvLyBjb3JyZWN0IG1heC9taW4gaW4gdGhlIG5vbi1yZXBsYWNlZCB2ZXJzaW9u
LCBhcmUgbm90IG5lY2Vzc2FyeS4KICAgICBzZXRMb2dpY2FsV2lkdGgoY29tcHV0ZVJlcGxhY2Vk
TG9naWNhbFdpZHRoKCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkpOwotICAgIGNv
bnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxX
aWR0aCgpOworICAgIGNvbnN0IExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJM
b2dpY2FsV2lkdGggLSBsb2dpY2FsV2lkdGgoKTsKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAog
ICAgICAqIDIuIElmIGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGhhdmUgdGhlIHZhbHVlICdhdXRv
JywgdGhlbiBpZiAnZGlyZWN0aW9uJwpAQCAtMjg1Myw4ICsyODU3LDggQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAqICAgICgncnRsJyksIHNldCAnbWFy
Z2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQgc29sdmUgZm9yCiAgICAgICog
ICAgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLgogICAgIFwqLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwotICAgIGludCBsb2dpY2FsTGVmdFZhbHVlID0gMDsKLSAgICBpbnQgbG9naWNhbFJpZ2h0VmFs
dWUgPSAwOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRWYWx1ZSA9IDA7CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHRWYWx1ZSA9IDA7CiAKICAgICBpZiAobWFyZ2luTG9naWNhbExlZnQu
aXNBdXRvKCkgJiYgbWFyZ2luTG9naWNhbFJpZ2h0LmlzQXV0bygpKSB7CiAgICAgICAgIC8vICds
ZWZ0JyBhbmQgJ3JpZ2h0JyBjYW5ub3QgYmUgJ2F1dG8nIGR1ZSB0byBzdGVwIDMKQEAgLTI4NjMs
NyArMjg2Nyw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAg
ICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IGxvZ2ljYWxMZWZ0LmNhbGNWYWx1ZShjb250YWluZXJM
b2dpY2FsV2lkdGgpOwogICAgICAgICBsb2dpY2FsUmlnaHRWYWx1ZSA9IGxvZ2ljYWxSaWdodC5j
YWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKIAotICAgICAgICBpbnQgZGlmZmVyZW5j
ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1
ZSk7CisgICAgICAgIExheW91dFVuaXQgZGlmZmVyZW5jZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxv
Z2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSk7CiAgICAgICAgIGlmIChkaWZmZXJl
bmNlID4gMCkgewogICAgICAgICAgICAgbWFyZ2luTG9naWNhbExlZnRBbGlhcyA9IGRpZmZlcmVu
Y2UgLyAyOyAvLyBzcGxpdCB0aGUgZGlmZmVyZW5jZQogICAgICAgICAgICAgbWFyZ2luTG9naWNh
bFJpZ2h0QWxpYXMgPSBkaWZmZXJlbmNlIC0gbWFyZ2luTG9naWNhbExlZnRBbGlhczsgLy8gYWNj
b3VudCBmb3Igb2RkIHZhbHVlZCBkaWZmZXJlbmNlcwpAQCAtMjkyNiw3ICsyOTMwLDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIFwqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogICAgIC8vIE5PVEU6ICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNvbHZlIGZvciAncmln
aHQnIHdoZW4gdGhlIGRpcmVjdGlvbiBpcwogICAgIC8vIExUUiBiZWNhdXNlIHRoZSB2YWx1ZSBp
cyBub3QgdXNlZC4KLSAgICBpbnQgdG90YWxMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGgoKSAr
IGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSArICBtYXJnaW5Mb2dpY2FsTGVm
dEFsaWFzICsgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXM7CisgICAgTGF5b3V0VW5pdCB0b3RhbExv
Z2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpICsgbG9naWNhbExlZnRWYWx1ZSArIGxvZ2ljYWxS
aWdodFZhbHVlICsgIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXMgKyBtYXJnaW5Mb2dpY2FsUmlnaHRB
bGlhczsKICAgICBpZiAodG90YWxMb2dpY2FsV2lkdGggPiBjb250YWluZXJMb2dpY2FsV2lkdGgg
JiYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBSVEwpKQogICAgICAgICBsb2dpY2FsTGVmdFZhbHVl
ID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKHRvdGFsTG9naWNhbFdpZHRoIC0gbG9naWNhbExl
ZnRWYWx1ZSk7CiAKQEAgLTI5NDksNyArMjk1Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgfQogICAgIH0KIAotICAgIGludCBsb2dpY2FsTGVm
dFBvcyA9IGxvZ2ljYWxMZWZ0VmFsdWUgKyBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzOworICAgIExh
eW91dFVuaXQgbG9naWNhbExlZnRQb3MgPSBsb2dpY2FsTGVmdFZhbHVlICsgbWFyZ2luTG9naWNh
bExlZnRBbGlhczsKICAgICBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zmc2V0KGxvZ2lj
YWxMZWZ0UG9zLCB0aGlzLCBsb2dpY2FsV2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aCk7ICAgIAogICAgIHNldExvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0UG9zKTsK
IH0KQEAgLTI5NjUsMTUgKzI5NjksMTUgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbAogICAgIC8vIFdlIGRvbid0IHVzZSBjb250YWluaW5nQmxvY2soKSwgc2luY2Ug
d2UgbWF5IGJlIHBvc2l0aW9uZWQgYnkgYW4gZW5jbG9zaW5nIHJlbHBvc2l0aW9uZWQgaW5saW5l
LgogICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyKCkpOwogCi0gICAgY29uc3QgaW50IGNvbnRhaW5l
ckxvZ2ljYWxIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25l
ZChjb250YWluZXJCbG9jayk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2Fs
SGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFp
bmVyQmxvY2spOwogCiAgICAgLy8gVmFyaWFibGVzIHRvIHNvbHZlLgogICAgIGJvb2wgaXNIb3Jp
em9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBib29sIGlzRmxpcHBlZCA9
IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CiAgICAgTGVuZ3RoIG1hcmdp
bkJlZm9yZSA9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpOwogICAgIExlbmd0aCBtYXJnaW5BZnRl
ciA9IHN0eWxlKCktPm1hcmdpbkFmdGVyKCk7Ci0gICAgaW50JiBtYXJnaW5CZWZvcmVBbGlhcyA9
IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2luVG9w
KSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpblJpZ2h0OiBtX21hcmdpbkxlZnQpOwotICAgIGludCYg
bWFyZ2luQWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpblRv
cCA6IG1fbWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpbkxlZnQ6IG1fbWFyZ2lu
UmlnaHQpOworICAgIExheW91dFVuaXQmIG1hcmdpbkJlZm9yZUFsaWFzID0gaXNIb3Jpem9udGFs
ID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5Ub3ApIDogKGlzRmxpcHBl
ZCA/IG1fbWFyZ2luUmlnaHQ6IG1fbWFyZ2luTGVmdCk7CisgICAgTGF5b3V0VW5pdCYgbWFyZ2lu
QWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpblRvcCA6IG1f
bWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpbkxlZnQ6IG1fbWFyZ2luUmlnaHQp
OwogCiAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AgPSBzdHlsZSgpLT5sb2dpY2FsVG9wKCk7CiAgICAg
TGVuZ3RoIGxvZ2ljYWxCb3R0b20gPSBzdHlsZSgpLT5sb2dpY2FsQm90dG9tKCk7CkBAIC0yOTg2
LDcgKzI5OTAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAg
ICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY29tcHV0ZVJlcGxhY2VkSGVpZ2h0KCkuICBUaGlzIG1l
YW5zIHRoYXQgdGhlIHN0ZXBzIHRvIHByb2R1Y2UKICAgICAvLyBjb3JyZWN0IG1heC9taW4gaW4g
dGhlIG5vbi1yZXBsYWNlZCB2ZXJzaW9uLCBhcmUgbm90IG5lY2Vzc2FyeS4KICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSArIGJvcmRlckFuZFBhZGRp
bmdMb2dpY2FsSGVpZ2h0KCkpOwotICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRh
aW5lckxvZ2ljYWxIZWlnaHQgLSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgY29uc3QgTGF5b3V0VW5p
dCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSBsb2dpY2FsSGVpZ2h0
KCk7CiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKICAgICAgKiAyLiBJZiBib3RoICd0b3AnIGFu
ZCAnYm90dG9tJyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycsIHJlcGxhY2UgJ3RvcCcKQEAgLTMwMTMs
OCArMzAxNyw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAg
ICAgKiAgICAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3Ry
YWludCB0aGF0IHRoZSB0d28KICAgICAgKiAgICBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVl
cy4KICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICBpbnQgbG9naWNhbFRvcFZhbHVlID0gMDsK
LSAgICBpbnQgbG9naWNhbEJvdHRvbVZhbHVlID0gMDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxU
b3BWYWx1ZSA9IDA7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tVmFsdWUgPSAwOwogCiAg
ICAgaWYgKG1hcmdpbkJlZm9yZS5pc0F1dG8oKSAmJiBtYXJnaW5BZnRlci5pc0F1dG8oKSkgewog
ICAgICAgICAvLyAndG9wJyBhbmQgJ2JvdHRvbScgY2Fubm90IGJlICdhdXRvJyBkdWUgdG8gc3Rl
cCAyIGFuZCAzIGNvbWJpbmVkLgpAQCAtMzAyMyw3ICszMDI3LDcgQEAgdm9pZCBSZW5kZXJCb3g6
OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAgICBsb2dpY2FsVG9wVmFsdWUgPSBsb2dp
Y2FsVG9wLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgbG9naWNh
bEJvdHRvbVZhbHVlID0gbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbEhl
aWdodCk7CiAKLSAgICAgICAgaW50IGRpZmZlcmVuY2UgPSBhdmFpbGFibGVTcGFjZSAtIChsb2dp
Y2FsVG9wVmFsdWUgKyBsb2dpY2FsQm90dG9tVmFsdWUpOworICAgICAgICBMYXlvdXRVbml0IGRp
ZmZlcmVuY2UgPSBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsVG9wVmFsdWUgKyBsb2dpY2FsQm90
dG9tVmFsdWUpOwogICAgICAgICAvLyBOT1RFOiBUaGlzIG1heSByZXN1bHQgaW4gbmVnYXRpdmUg
dmFsdWVzLgogICAgICAgICBtYXJnaW5CZWZvcmVBbGlhcyA9ICBkaWZmZXJlbmNlIC8gMjsgLy8g
c3BsaXQgdGhlIGRpZmZlcmVuY2UKICAgICAgICAgbWFyZ2luQWZ0ZXJBbGlhcyA9IGRpZmZlcmVu
Y2UgLSBtYXJnaW5CZWZvcmVBbGlhczsgLy8gYWNjb3VudCBmb3Igb2RkIHZhbHVlZCBkaWZmZXJl
bmNlcwpAQCAtMzA3OSwxMiArMzA4MywxMiBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsCiAgICAgLy8gb3Igbm90LgogCiAgICAgLy8gVXNlIGNvbXB1dGVkIHZhbHVl
cyB0byBjYWxjdWxhdGUgdGhlIHZlcnRpY2FsIHBvc2l0aW9uLgotICAgIGludCBsb2dpY2FsVG9w
UG9zID0gbG9naWNhbFRvcFZhbHVlICsgbWFyZ2luQmVmb3JlQWxpYXM7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wUG9zID0gbG9naWNhbFRvcFZhbHVlICsgbWFyZ2luQmVmb3JlQWxpYXM7CiAg
ICAgY29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KGxvZ2ljYWxUb3BQb3MsIHRoaXMs
IGxvZ2ljYWxIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQp
OwogICAgIHNldExvZ2ljYWxUb3AobG9naWNhbFRvcFBvcyk7CiB9CiAKLUludFJlY3QgUmVuZGVy
Qm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXRzIGlu
c2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25zIGJlZm9yZS9h
ZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1lbnRz
KSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJsb2NrLgpAQCAt
MzA5MiwxNSArMzA5NiwxNSBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5s
aW5lCiAgICAgLy8gRklYTUU6IFBhaW50IHRoZSBjYXJldHMgaW5zaWRlIGVtcHR5IGJsb2NrcyBk
aWZmZXJlbnRseSB0aGFuIHRoZSBjYXJldHMgYmVmb3JlL2FmdGVyIGVsZW1lbnRzLgogCiAgICAg
Ly8gRklYTUU6IFdoYXQgYWJvdXQgYm9yZGVyIGFuZCBwYWRkaW5nPwotICAgIEludFJlY3QgcmVj
dCh4KCksIHkoKSwgY2FyZXRXaWR0aCwgaGVpZ2h0KCkpOworICAgIExheW91dFJlY3QgcmVjdCh4
KCksIHkoKSwgY2FyZXRXaWR0aCwgaGVpZ2h0KCkpOwogICAgIGJvb2wgbHRyID0gYm94ID8gYm94
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgOiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCk7CiAKICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiBsdHIpCi0gICAgICAgIHJlY3QubW92
ZShJbnRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwKSk7CisgICAgICAgIHJlY3QubW92ZShM
YXlvdXRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwKSk7CiAKICAgICBpZiAoYm94KSB7CiAg
ICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKLSAgICAgICAgaW50
IHRvcCA9IHJvb3RCb3gtPmxpbmVUb3AoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSByb290
Qm94LT5saW5lVG9wKCk7CiAgICAgICAgIHJlY3Quc2V0WSh0b3ApOwogICAgICAgICByZWN0LnNl
dEhlaWdodChyb290Qm94LT5saW5lQm90dG9tKCkgLSB0b3ApOwogICAgIH0KQEAgLTMxMTMsNyAr
MzExNyw3IEBAIEludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKICAgICAv
LyA8cmRhcjovL3Byb2JsZW0vMzc3NzgwND4gRGVsZXRpbmcgYWxsIGNvbnRlbnQgaW4gYSBkb2N1
bWVudCBjYW4gcmVzdWx0IGluIGdpYW50IHRhbGwtYXMtd2luZG93IGluc2VydGlvbiBwb2ludAog
ICAgIC8vCiAgICAgLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJzdC1saW5lLCBtaXNzaW5nIGdvb2Qg
cmVhc29uIHRvIHRha2UgY2FyZSBvZgotICAgIGludCBmb250SGVpZ2h0ID0gc3R5bGUoKS0+Zm9u
dE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGZvbnRIZWlnaHQgPSBzdHlsZSgp
LT5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgIGlmIChmb250SGVpZ2h0ID4gcmVjdC5oZWln
aHQoKSB8fCAoIWlzUmVwbGFjZWQoKSAmJiAhaXNUYWJsZSgpKSkKICAgICAgICAgcmVjdC5zZXRI
ZWlnaHQoZm9udEhlaWdodCk7CiAKQEAgLTMzMTksMTcgKzMzMjMsMTcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNsZWFyTGF5b3V0T3ZlcmZsb3coKQogICAgIG1fb3ZlcmZsb3ctPnJlc2V0TGF5b3V0T3Zl
cmZsb3coYm9yZGVyQm94UmVjdCgpKTsKIH0KIAotaW50IFJlbmRlckJveDo6bGluZUhlaWdodChi
b29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0
aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94
OjpsaW5lSGVpZ2h0KGJvb2wgLypmaXJzdExpbmUqLywgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0
aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAogewogICAg
IGlmIChpc1JlcGxhY2VkKCkpCiAgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gSG9yaXpvbnRh
bExpbmUgPyBtX21hcmdpblRvcCArIGhlaWdodCgpICsgbV9tYXJnaW5Cb3R0b20gOiBtX21hcmdp
blJpZ2h0ICsgd2lkdGgoKSArIG1fbWFyZ2luTGVmdDsKICAgICByZXR1cm4gMDsKIH0KIAotaW50
IFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBi
b29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0
aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94
OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgLypmaXJz
dExpbmUqLywgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8q
bGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAogewogICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKLSAg
ICAgICAgaW50IHJlc3VsdCA9IGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2lu
VG9wICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0aCgp
ICsgbV9tYXJnaW5MZWZ0OworICAgICAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGRpcmVjdGlvbiA9
PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2luVG9wICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJvdHRv
bSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0aCgpICsgbV9tYXJnaW5MZWZ0OwogICAgICAgICBpZiAo
YmFzZWxpbmVUeXBlID09IEFscGhhYmV0aWNCYXNlbGluZSkKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQgLSByZXN1bHQgLyAyOwpAQCAtMzM1MCwxOSAr
MzM1NCwxOSBAQCBSZW5kZXJMYXllciogUmVuZGVyQm94OjplbmNsb3NpbmdGbG9hdFBhCiAgICAg
cmV0dXJuIDA7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94Ojpsb2dpY2FsVmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0
UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZWN0ID0gdmlz
dWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOworICAgIExheW91dFJl
Y3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsK
ICAgICBpZiAoIXBhcmVudFN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAg
ICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogICAgIHJldHVybiByZWN0OwogfQogCi1J
bnRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QK
IHsKICAgICAvLyBJZiB0aGUgd3JpdGluZyBtb2RlcyBvZiB0aGUgY2hpbGQgYW5kIHBhcmVudCBt
YXRjaCwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIAogICAgIC8vIGRvIGFueXRoaW5nIGZhbmN5LiBK
dXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIEludFJlY3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93
UmVjdCgpOworICAgIExheW91dFJlY3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAg
IGlmIChwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBzdHlsZSgpLT53cml0aW5nTW9kZSgp
KQogICAgICAgICByZXR1cm4gcmVjdDsKICAgICAKQEAgLTMzNzYsMTggKzMzODAsMTggQEAgSW50
UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdEZvcgogICAgIHJldHVybiByZWN0Owog
fQogCi1JbnRSZWN0IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVy
Qm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKSBjb25zdAogewotICAgIEludFJlY3QgcmVjdCA9IGxheW91dE92ZXJmbG93
UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBs
YXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFw
YXJlbnRTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJl
Y3QudHJhbnNwb3NlZFJlY3QoKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBSZW5k
ZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RG
b3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgLy8g
T25seSBwcm9wYWdhdGUgaW50ZXJpb3IgbGF5b3V0IG92ZXJmbG93IGlmIHdlIGRvbid0IGNsaXAg
aXQuCi0gICAgSW50UmVjdCByZWN0ID0gYm9yZGVyQm94UmVjdCgpOworICAgIExheW91dFJlY3Qg
cmVjdCA9IGJvcmRlckJveFJlY3QoKTsKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAg
ICAgICByZWN0LnVuaXRlKGxheW91dE92ZXJmbG93UmVjdCgpKTsKIApAQCAtMzQ5MiwxNSArMzQ5
NiwxNSBAQCB2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0CiAgICAgICAg
IHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogfQogCi1JbnRTaXplIFJlbmRlckJv
eDo6bG9jYXRpb25PZmZzZXRJbmNsdWRpbmdGbGlwcGluZygpIGNvbnN0CitMYXlvdXRTaXplIFJl
bmRlckJveDo6bG9jYXRpb25PZmZzZXRJbmNsdWRpbmdGbGlwcGluZygpIGNvbnN0CiB7CiAgICAg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lckJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYg
KCFjb250YWluZXJCbG9jayB8fCBjb250YWluZXJCbG9jayA9PSB0aGlzKQogICAgICAgICByZXR1
cm4gbG9jYXRpb25PZmZzZXQoKTsKICAgICAKLSAgICBJbnRSZWN0IHJlY3QoZnJhbWVSZWN0KCkp
OworICAgIExheW91dFJlY3QgcmVjdChmcmFtZVJlY3QoKSk7CiAgICAgY29udGFpbmVyQmxvY2st
PmZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYgd2Ug
YXJlIGFuIGFic29sdXRlbHkgcG9zaXRpb25lZCBvYmplY3QgZW5jbG9zZWQgYnkgYSByZWxhdGl2
ZS1wb3NpdGlvbmVkIGlubGluZS4KLSAgICByZXR1cm4gSW50U2l6ZShyZWN0LngoKSwgcmVjdC55
KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKHJlY3QueCgpLCByZWN0LnkoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgJKHJldmlzaW9uIDkzMDY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIEZsb2F0
UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3Q7CiAKICAgICAvLyBCb3VuZHMgb2YgdGhl
IG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3JtcwotICAg
IHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIEludFBvaW50KiBjYWNoZWRPZmZzZXRUb1JlcGFp
bnRDb250YWluZXIpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIExh
eW91dFBvaW50KiBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBM
YXlvdXRQb2ludCYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0eXBlIGNo
ZWNraW5nIGlzIGRvbmUhCkBAIC0xOTIsMTIgKzE5MiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gc2Ny
b2xsTGVmdC9Ub3AgcmV0dXJuIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gIFRoZXNlIG1l
dGhvZHMgYXJlIHZpcnR1YWwgc28gdGhhdCBvYmplY3RzIGxpa2UKICAgICAvLyB0ZXh0YXJlYXMg
Y2FuIHNjcm9sbCBzaGFkb3cgY29udGVudCAoYnV0IHByZXRlbmQgdGhhdCB0aGV5IGFyZSB0aGUg
b2JqZWN0cyB0aGF0IGFyZQogICAgIC8vIHNjcm9sbGluZykuCi0gICAgdmlydHVhbCBpbnQgc2Ny
b2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xs
SGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7CisgICAgdmlydHVhbCBMYXlvdXRVbml0
IHNjcm9sbExlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsVG9wKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAg
dmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxMZWZ0KExheW91dFVuaXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxU
b3AoTGF5b3V0VW5pdCk7CiAKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWFyZ2luVG9wKCkgY29u
c3QgeyByZXR1cm4gbV9tYXJnaW5Ub3A7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWFyZ2lu
Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5Cb3R0b207IH0KQEAgLTIzMyw3ICsyMzMs
NyBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCByZWZsZWN0aW9uQm94KCkgY29uc3Q7CiAgICAgaW50
IHJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdDsKICAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9i
amVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVjdCBp
biB0aGUgcmVmbGVjdGlvbi4KLSAgICBJbnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIExheW91dFJlY3QgcmVmbGVjdGVkUmVjdChjb25zdCBMYXlvdXRSZWN0
JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CkBAIC0yNTUsNyArMjU1LDcg
QEAgcHVibGljOgogICAgIExheW91dFVuaXQgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
TGF5b3V0VW5pdCB3aWR0aCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlQ29udGVudEJv
eExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2
b2lkIGJvcmRlckZpdEFkanVzdChJbnRSZWN0JikgY29uc3QgeyB9IC8vIFNocmluayB0aGUgYm94
IGluIHdoaWNoIHRoZSBib3JkZXIgcGFpbnRzIGlmIGJvcmRlci1maXQgaXMgc2V0LgorICAgIHZp
cnR1YWwgdm9pZCBib3JkZXJGaXRBZGp1c3QoTGF5b3V0UmVjdCYpIGNvbnN0IHsgfSAvLyBTaHJp
bmsgdGhlIGJveCBpbiB3aGljaCB0aGUgYm9yZGVyIHBhaW50cyBpZiBib3JkZXItZml0IGlzIHNl
dC4KIAogICAgIC8vIFJlc29sdmUgYXV0byBtYXJnaW5zIGluIHRoZSBpbmxpbmUgZGlyZWN0aW9u
IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcHVzaGVkIHRv
IHRoZSBzdGFydCwgbWlkZGxlIG9yIGVuZAogICAgIC8vIG9mIHRoZSBjb250YWluaW5nIGJsb2Nr
LgpAQCAtMjc2LDEzICsyNzYsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5saW5lQm94V3Jh
cHBlcihJbmxpbmVCb3gqIGJveFdyYXBwZXIpIHsgbV9pbmxpbmVCb3hXcmFwcGVyID0gYm94V3Jh
cHBlcjsgfQogICAgIHZvaWQgZGVsZXRlTGluZUJveFdyYXBwZXIoKTsKIAotICAgIHZpcnR1YWwg
SW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVj
dCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0JiwgYm9v
bCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50RHVyaW5n
TGF5b3V0SWZNb3ZlZChjb25zdCBMYXlvdXRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGludCBjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29uc3Q7Ci0gICAgaW50IHBlcnBl
bmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IHBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVp
Z2h0KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGgo
KTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKQEAgLTI5Miw5ICsy
OTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUo
KSAmJiBzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgIWlzRmxvYXRpbmdPclBv
c2l0aW9uZWQoKSAmJiAoaXNSb290KCkgfHwgaXNCb2R5KCkpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgSW50U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgpOyB9Ci0g
ICAgaW50IGludHJpbnNpY0xvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCkud2lkdGgoKSA6IGludHJp
bnNpY1NpemUoKS5oZWlnaHQoKTsgfQotICAgIGludCBpbnRyaW5zaWNMb2dpY2FsSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGludHJp
bnNpY1NpemUoKS5oZWlnaHQoKSA6IGludHJpbnNpY1NpemUoKS53aWR0aCgpOyB9CisgICAgdmly
dHVhbCBMYXlvdXRTaXplIGludHJpbnNpY1NpemUoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXpl
KCk7IH0KKyAgICBMYXlvdXRVbml0IGludHJpbnNpY0xvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCku
d2lkdGgoKSA6IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgaW50
cmluc2ljTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCkgOiBpbnRyaW5zaWNTaXpl
KCkud2lkdGgoKTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hyaW5r
cyB0byBpdHMgaW50cmluc2ljIHdpZHRoIChyYXRoZXIgdGhhbiBmaWxsaW5nIHRoZSB3aWR0aAog
ICAgIC8vIG9mIGEgY29udGFpbmluZyBibG9jaykuICBIVE1MNCBidXR0b25zLCA8c2VsZWN0PnMs
IDxpbnB1dD5zLCBsZWdlbmRzLCBhbmQgZmxvYXRpbmcvY29tcGFjdCBlbGVtZW50cyBkbyB0aGlz
LgpAQCAtMzIzLDkgKzMyMyw5IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpIDogYXZhaWxhYmxlTG9naWNhbEhlaWdodCgpOyB9CiAg
ICAgTGF5b3V0VW5pdCBhdmFpbGFibGVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYXZhaWxhYmxlTG9naWNhbEhlaWdodCgpIDogYXZh
aWxhYmxlTG9naWNhbFdpZHRoKCk7IH0KIAotICAgIHZpcnR1YWwgaW50IHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNv
bnN0OwotICAgIGludCBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoKSA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJMb2dp
Y2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwog
ICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0g
MCk7CiAgICAgYm9vbCBjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsK
QEAgLTMzOSwxMiArMzM5LDEyIEBAIHB1YmxpYzoKICAgICBib29sIHNjcm9sbHNPdmVyZmxvd1go
KSBjb25zdCB7IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiAoc3R5bGUoKS0+b3ZlcmZsb3dY
KCkgPT0gT1NDUk9MTCB8fCBoYXNBdXRvSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsgfQogICAgIGJv
b2wgc2Nyb2xsc092ZXJmbG93WSgpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IChzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMIHx8IGhhc0F1dG9WZXJ0aWNhbFNjcm9s
bGJhcigpKTsgfQogICAgIAotICAgIHZpcnR1YWwgSW50UmVjdCBsb2NhbENhcmV0UmVjdChJbmxp
bmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7
CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBj
YXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKLSAg
ICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBJbnRQb2ludCYgbG9jYXRp
b24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUpOwotICAgIEludFJlY3QgY2xpcFJlY3QoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKTsK
KyAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2lu
dCYgbG9jYXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUpOworICAgIExheW91dFJlY3QgY2xpcFJlY3QoY29uc3QgTGF5b3V0UG9p
bnQmIGxvY2F0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgSW50UmVjdCBjb250cm9sQ2xpcFJlY3QoY29u
c3QgSW50UG9pbnQmKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIExh
eW91dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3QgeyByZXR1
cm4gTGF5b3V0UmVjdCgpOyB9CiAgICAgYm9vbCBwdXNoQ29udGVudHNDbGlwKFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgdm9pZCBwb3BDb250
ZW50c0NsaXAoUGFpbnRJbmZvJiwgUGFpbnRQaGFzZSBvcmlnaW5hbFBoYXNlLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCkBAIC0zNjYsNyArMzY2LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBJbnRSZWN0IG1hc2tDbGlwUmVj
dCgpOworICAgIExheW91dFJlY3QgbWFza0NsaXBSZWN0KCk7CiAKICAgICB2aXJ0dWFsIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CiAKQEAgLTM3
NCw4ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0Zs
b2F0UGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgaW50IGZpcnN0TGlu
ZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KLSAgICB2aXJ0dWFsIGludCBsYXN0
TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICB2aXJ0dWFsIExheW91
dFVuaXQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBsYXN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7
IH0KIAogICAgIGJvb2wgc2hyaW5rVG9Bdm9pZEZsb2F0cygpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdDsKQEAgLTM4Niw4ICszODYsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzRGVwcmVjYXRlZEZsZXhJdGVtKCkgY29uc3QgeyByZXR1cm4gIWlzSW5saW5l
KCkgJiYgIWlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+
aXNEZXByZWNhdGVkRmxleGlibGVCb3goKTsgfQogICAgIAotICAgIHZpcnR1YWwgaW50IGxpbmVI
ZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
ID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBiYXNl
bGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25N
b2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExheW91dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURp
cmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUp
IGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNl
bGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
ID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKIAogICAgIGVudW0gRmxpcHBpbmdB
ZGp1c3RtZW50IHsgQ2hpbGRUb1BhcmVudEZsaXBwaW5nQWRqdXN0bWVudCwgUGFyZW50VG9DaGls
ZEZsaXBwaW5nQWRqdXN0bWVudCB9OwogICAgIExheW91dFBvaW50IGZsaXBGb3JXcml0aW5nTW9k
ZShjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBMYXlvdXRQb2ludCYsIEZsaXBwaW5nQWRq
dXN0bWVudCkgY29uc3Q7CkBAIC0zOTgsMTIgKzM5OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
bGlwRm9yV3JpdGluZ01vZGUoSW50UmVjdCYpIGNvbnN0OwogICAgIEZsb2F0UG9pbnQgZmxpcEZv
cldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGZsaXBGb3JX
cml0aW5nTW9kZShGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBJbnRTaXplIGxvY2F0aW9uT2Zmc2V0
SW5jbHVkaW5nRmxpcHBpbmcoKSBjb25zdDsKKyAgICBMYXlvdXRTaXplIGxvY2F0aW9uT2Zmc2V0
SW5jbHVkaW5nRmxpcHBpbmcoKSBjb25zdDsKIAotICAgIEludFJlY3QgbG9naWNhbFZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgSW50UmVj
dCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0Owot
ICAgIEludFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgSW50UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0
UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9u
KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RG
b3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgUmVuZGVyT3ZlcmZsb3cq
IGhhc1JlbmRlck92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdy5nZXQoKTsgfQog
CkBAIC00NTAsMTMgKzQ1MCwxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxIZWlnaHQoKTsKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdp
ZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGNvbnRhaW5lckJsb2NrLCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRhaW5lckxvZ2lj
YWxXaWR0aCwgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgsIExh
eW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMZW5ndGggbG9naWNhbExlZnQsIExlbmd0aCBsb2dpY2FsUmlnaHQs
IExlbmd0aCBtYXJnaW5Mb2dpY2FsTGVmdCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxSaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsb2dpY2FsV2lk
dGhWYWx1ZSwgaW50JiBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlLCBpbnQmIG1hcmdpbkxvZ2ljYWxS
aWdodFZhbHVlLCBpbnQmIGxvZ2ljYWxMZWZ0UG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbFdpZHRoVmFsdWUsIExheW91
dFVuaXQmIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxS
aWdodFZhbHVlLCBMYXlvdXRVbml0JiBsb2dpY2FsTGVmdFBvcyk7CiAgICAgdm9pZCBjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCwgY29uc3Qg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIGlu
dCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQg
Ym9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AsIExlbmd0aCBsb2dpY2FsQm90dG9tLCBMZW5ndGgg
bWFyZ2luTG9naWNhbFRvcCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxCb3R0b20sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxvZ2ljYWxIZWlnaHRWYWx1
ZSwgaW50JiBtYXJnaW5Mb2dpY2FsVG9wVmFsdWUsIGludCYgbWFyZ2luTG9naWNhbEJvdHRvbVZh
bHVlLCBpbnQmIGxvZ2ljYWxUb3BQb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbEhlaWdodFZhbHVlLCBMYXlvdXRVbml0
JiBtYXJnaW5Mb2dpY2FsVG9wVmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxCb3R0b21W
YWx1ZSwgTGF5b3V0VW5pdCYgbG9naWNhbFRvcFBvcyk7CiAKICAgICB2b2lkIGNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKCk7CiAgICAgdm9pZCBjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxXaWR0aFJlcGxhY2VkKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104227</attachid>
            <date>2011-08-17 13:41:41 -0700</date>
            <delta_ts>2011-08-17 23:37:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-66156-20110817134139.patch</filename>
            <type>text/plain</type>
            <size>68485</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMjMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDgtMTcgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCb3ggdG8g
dG8gbmV3IGxheW91dCB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYxNTYKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKwor
ICAgICAgICBDb252ZXJ0IFJlbmRlckJveCB0byBuZXcgbGF5b3V0IGFic3RyYWN0aW9uIGFzIGEg
cGFydCBvZiB0aGUgb25nb2luZworICAgICAgICBjb252ZXJzaW9uIHdvcmsuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6cmVmbGVjdGlvbkJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlZmxl
Y3RlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94
TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWFza0Ns
aXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNG
b3JJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6cGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1h
cmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29u
dGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJl
cGxhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsSGVpZ2h0UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2Nh
bENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxpbmVIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9y
UHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0
T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmxvY2F0aW9uT2Zmc2V0SW5jbHVkaW5nRmxpcHBpbmcpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9yZGVy
Rml0QWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY0xvZ2ljYWxXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY0xvZ2ljYWxIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udHJvbENsaXBSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Zmlyc3RMaW5lQm94QmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpsYXN0TGluZUJveEJhc2VsaW5lKToKKwogMjAxMS0wOC0xNyAgVG9ueSBDaGFu
ZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBjaHJvbWl1bSBtYWMgY29tcGls
ZS4gIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuKiBtb3ZlZApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDkzMjMzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
Niw3ICs0MTYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkgY29uCiAg
ICAgcmV0dXJuIGhlaWdodCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKIH0KIAotaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgo
KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKICAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxX
aWR0aCgpOwpAQCAtNDI0LDEwICs0MjQsMTAgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgo
KSBjb25zdAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1v
ZGVzLgogICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAg
IHJldHVybiBtYXgoY2xpZW50V2lkdGgoKSwgbWF4WExheW91dE92ZXJmbG93KCkgLSBib3JkZXJM
ZWZ0KCkpOwotICAgIHJldHVybiBjbGllbnRXaWR0aCgpIC0gbWluKDAsIG1pblhMYXlvdXRPdmVy
ZmxvdygpIC0gYm9yZGVyTGVmdCgpKTsKKyAgICByZXR1cm4gY2xpZW50V2lkdGgoKSAtIG1pbjxM
YXlvdXRVbml0PigwLCBtaW5YTGF5b3V0T3ZlcmZsb3coKSAtIGJvcmRlckxlZnQoKSk7CiB9CiAK
LWludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJv
eDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAg
ICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKQEAgLTQzNiwyOSArNDM2LDI5
IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIG1heChj
bGllbnRIZWlnaHQoKSwgbWF4WUxheW91dE92ZXJmbG93KCkgLSBib3JkZXJUb3AoKSk7CiB9CiAK
LWludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OnNjcm9sbExlZnQoKSBjb25zdAogewogICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSA/IGxh
eWVyKCktPnNjcm9sbFhPZmZzZXQoKSA6IDA7CiB9CiAKLWludCBSZW5kZXJCb3g6OnNjcm9sbFRv
cCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgPyBsYXllcigpLT5zY3JvbGxZT2Zmc2V0KCkgOiAw
OwogfQogCi12b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKK3ZvaWQg
UmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KExheW91dFVuaXQgbmV3TGVmdCkKIHsKICAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIGxheWVyKCktPnNjcm9sbFRvWE9mZnNldChuZXdM
ZWZ0LCBSZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCk7CiB9CiAKLXZvaWQgUmVuZGVy
Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKK3ZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxU
b3AoTGF5b3V0VW5pdCBuZXdUb3ApCiB7CiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAg
ICAgICBsYXllcigpLT5zY3JvbGxUb1lPZmZzZXQobmV3VG9wLCBSZW5kZXJMYXllcjo6U2Nyb2xs
T2Zmc2V0Q2xhbXBlZCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCkKK3ZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICByZWN0cy5hcHBl
bmQoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSk7CiB9CkBAIC00NzUsOSAr
NDc1LDkgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKICAgICAgICAg
bGF5ZXIoKS0+dXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjphYnNv
bHV0ZUNvbnRlbnRCb3goKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29u
dGVudEJveCgpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsK
KyAgICBMYXlvdXRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwogICAgIEZsb2F0UG9pbnQg
YWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CiAgICAgcmVjdC5tb3ZlKGFi
c1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0OwpAQCAtNDg1LDEzICs0ODUs
MTMgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgpIAogCiBGbG9hdFF1
YWQgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QKIHsKLSAgICBJbnRSZWN0
IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIExheW91dFJlY3QgcmVjdCA9IGNvbnRlbnRC
b3hSZWN0KCk7CiAgICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlY3Qp
KTsKIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRQb2ludCogY2FjaGVkT2Zmc2V0
VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVC
b3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBM
YXlvdXRQb2ludCogY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdAogewotICAg
IEludFJlY3QgYm94ID0gYm9yZGVyQm91bmRpbmdCb3goKTsKKyAgICBMYXlvdXRSZWN0IGJveCA9
IGJvcmRlckJvdW5kaW5nQm94KCk7CiAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3co
Ym94KTsKIAogICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBGbG9hdFJlY3Qo
Ym94KTsKQEAgLTUxNSwxMiArNTE1LDEyIEBAIHZvaWQgUmVuZGVyQm94OjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3IKICAgICAgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3QoYWRkaXRpb25hbE9m
ZnNldCwgc2l6ZSgpKSk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0aW9uQm94KCkg
Y29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0aW9uQm94KCkgY29uc3QKIHsKLSAg
ICBJbnRSZWN0IHJlc3VsdDsKKyAgICBMYXlvdXRSZWN0IHJlc3VsdDsKICAgICBpZiAoIXN0eWxl
KCktPmJveFJlZmxlY3QoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBJbnRSZWN0IGJv
eCA9IGJvcmRlckJveFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IGJveCA9IGJvcmRlckJveFJlY3Qo
KTsKICAgICByZXN1bHQgPSBib3g7CiAgICAgc3dpdGNoIChzdHlsZSgpLT5ib3hSZWZsZWN0KCkt
PmRpcmVjdGlvbigpKSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgpAQCAtNTQ4LDEz
ICs1NDgsMTMgQEAgaW50IFJlbmRlckJveDo6cmVmbGVjdGlvbk9mZnNldCgpIGNvbnN0CiAgICAg
cmV0dXJuIHN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkuY2FsY1ZhbHVlKGJvcmRlckJv
eFJlY3QoKS5oZWlnaHQoKSk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0ZWRSZWN0
KGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGVk
UmVjdChjb25zdCBMYXlvdXRSZWN0JiByKSBjb25zdAogewogICAgIGlmICghc3R5bGUoKS0+Ym94
UmVmbGVjdCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCgpOwogCi0gICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7Ci0gICAgSW50
UmVjdCByZXN1bHQgPSByOworICAgIExheW91dFJlY3QgYm94ID0gYm9yZGVyQm94UmVjdCgpOwor
ICAgIExheW91dFJlY3QgcmVzdWx0ID0gcjsKICAgICBzd2l0Y2ggKHN0eWxlKCktPmJveFJlZmxl
Y3QoKS0+ZGlyZWN0aW9uKCkpIHsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQmVsb3c6CiAgICAg
ICAgICAgICByZXN1bHQuc2V0WShib3gubWF4WSgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJv
eC5tYXhZKCkgLSByLm1heFkoKSkpOwpAQCAtNTg0LDEyICs1ODQsMTIgQEAgYm9vbCBSZW5kZXJC
b3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYgogICAgICAgICAmJiAoc3R5bGUoKS0+b3ZlcmZs
b3dYKCkgPT0gT1NDUk9MTCB8fCBzdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPQVVUTyk7CiB9CiAK
LWludCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewogICAgIHJldHVy
biBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCkgOiAwOwogfQogCi1pbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJT
aXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQpAQCAt
NzM4LDE0ICs3MzgsMTQgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94
TAogewogICAgIGlmIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YKQogICAgICAg
ICB3aWR0aCAtPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7Ci0gICAgcmV0dXJuIG1h
eCgwLCB3aWR0aCk7CisgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCB3aWR0aCk7CiB9CiAK
IExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoTGF5
b3V0VW5pdCBoZWlnaHQpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmJveFNpemluZygpID09
IEJPUkRFUl9CT1gpCiAgICAgICAgIGhlaWdodCAtPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhl
aWdodCgpOwotICAgIHJldHVybiBtYXgoMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gbWF4PExheW91
dFVuaXQ+KDAsIGhlaWdodCk7CiB9CiAKIC8vIEhpdCBUZXN0aW5nCkBAIC05NjksMTMgKzk2OSwx
MyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRNYXNrSW1hZ2VzKGNvbnN0IFBhCiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi1JbnRSZWN0IFJl
bmRlckJveDo6bWFza0NsaXBSZWN0KCkKK0xheW91dFJlY3QgUmVuZGVyQm94OjptYXNrQ2xpcFJl
Y3QoKQogewotICAgIEludFJlY3QgYmJveCA9IGJvcmRlckJveFJlY3QoKTsKKyAgICBMYXlvdXRS
ZWN0IGJib3ggPSBib3JkZXJCb3hSZWN0KCk7CiAgICAgaWYgKHN0eWxlKCktPm1hc2tCb3hJbWFn
ZSgpLmltYWdlKCkpCiAgICAgICAgIHJldHVybiBiYm94OwogICAgIAotICAgIEludFJlY3QgcmVz
dWx0OworICAgIExheW91dFJlY3QgcmVzdWx0OwogICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBt
YXNrTGF5ZXIgPSBzdHlsZSgpLT5tYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0g
bWFza0xheWVyLT5uZXh0KCkpIHsKICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSkgewog
ICAgICAgICAgICAgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkgZ2VvbWV0cnk7CkBAIC0xMDM4LDcg
KzEwMzgsNyBAQCB2b2lkIFJlbmRlckJveDo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnCiAKIGJv
b2wgUmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKFdyYXBwZWRJbWFnZVB0ciBp
bWFnZSwgY29uc3QgRmlsbExheWVyKiBsYXllcnMsIGJvb2wgZHJhd2luZ0JhY2tncm91bmQpCiB7
Ci0gICAgSW50UmVjdCByZW5kZXJlclJlY3Q7CisgICAgTGF5b3V0UmVjdCByZW5kZXJlclJlY3Q7
CiAgICAgUmVuZGVyQm94KiBsYXllclJlbmRlcmVyID0gMDsKIAogICAgIGZvciAoY29uc3QgRmls
bExheWVyKiBjdXJMYXllciA9IGxheWVyczsgY3VyTGF5ZXI7IGN1ckxheWVyID0gY3VyTGF5ZXIt
Pm5leHQoKSkgewpAQCAtMTA1MCw4ICsxMDUwLDggQEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRM
YXllclJlY3RzRm9ySW1hZwogICAgICAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJhY2tncm91
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IHZpZXcoKTsKIAotICAg
ICAgICAgICAgICAgICAgICBpbnQgcnc7Ci0gICAgICAgICAgICAgICAgICAgIGludCByaDsKKyAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBydzsKKyAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCByaDsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSB0b1JlbmRlclZpZXcobGF5ZXJSZW5kZXJlciktPmZyYW1lVmlldygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBydyA9IGZyYW1lVmlldy0+Y29udGVudHNXaWR0aCgpOwpAQCAtMTA2
MCw3ICsxMDYwLDcgQEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZwog
ICAgICAgICAgICAgICAgICAgICAgICAgcncgPSBsYXllclJlbmRlcmVyLT53aWR0aCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmggPSBsYXllclJlbmRlcmVyLT5oZWlnaHQoKTsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZW5kZXJlclJlY3QgPSBJbnRS
ZWN0KC1sYXllclJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksCisgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyUmVjdCA9IExheW91dFJlY3QoLWxheWVyUmVuZGVyZXItPm1hcmdpbkxlZnQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIC1sYXllclJlbmRlcmVyLT5tYXJnaW5Ub3AoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heChsYXllclJlbmRlcmVyLT53aWR0aCgpICsgbGF5ZXJSZW5k
ZXJlci0+bWFyZ2luTGVmdCgpICsgbGF5ZXJSZW5kZXJlci0+bWFyZ2luUmlnaHQoKSArIGxheWVy
UmVuZGVyZXItPmJvcmRlckxlZnQoKSArIGxheWVyUmVuZGVyZXItPmJvcmRlclJpZ2h0KCksIHJ3
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1heChsYXllclJlbmRlcmVyLT5oZWlnaHQoKSAr
IGxheWVyUmVuZGVyZXItPm1hcmdpblRvcCgpICsgbGF5ZXJSZW5kZXJlci0+bWFyZ2luQm90dG9t
KCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGxheWVyUmVuZGVyZXItPmJvcmRlckJv
dHRvbSgpLCByaCkpOwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnB1c2hD
b250ZW50c0NsaXAoUGFpbnRJbgogICAgIEludFJlY3QgY2xpcFJlY3QoaXNDb250cm9sQ2xpcCA/
IGNvbnRyb2xDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkgOiBvdmVyZmxvd0NsaXBSZWN0KGFj
Y3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBp
ZiAoc3R5bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihJbnRSZWN0
KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihMYXlvdXRS
ZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmNsaXAoY2xpcFJlY3QpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE0NCwxMiArMTE0NCwx
MiBAQCB2b2lkIFJlbmRlckJveDo6cG9wQ29udGVudHNDbGlwKFBhaW50SW5mCiAgICAgICAgIHBh
aW50SW5mby5waGFzZSA9IG9yaWdpbmFsUGhhc2U7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94Ojpv
dmVyZmxvd0NsaXBSZWN0KGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgcmVsZXZhbmN5KQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93
Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSByZWxldmFuY3kpCiB7CiAgICAgLy8gRklYTUU6IFdoZW4gb3ZlcmZsb3ctY2xp
cCAoQ1NTMykgaXMgaW1wbGVtZW50ZWQsIHdlJ2xsIG9idGFpbiB0aGUgcHJvcGVydHkKICAgICAv
LyBoZXJlLgotICAgIEludFJlY3QgY2xpcFJlY3QobG9jYXRpb24gKyBJbnRTaXplKGJvcmRlckxl
ZnQoKSwgYm9yZGVyVG9wKCkpLAotICAgICAgICBzaXplKCkgLSBJbnRTaXplKGJvcmRlckxlZnQo
KSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsKKyAgICBM
YXlvdXRSZWN0IGNsaXBSZWN0KGxvY2F0aW9uICsgTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCksIGJv
cmRlclRvcCgpKSwKKyAgICAgICAgc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBi
b3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBT
dWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCiAgICAgaWYgKGxheWVyKCkp
CkBAIC0xMTU4LDExICsxMTU4LDExIEBAIEludFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBS
ZWN0KGNvbnMKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94Ojpj
bGlwUmVjdChjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCitMYXlvdXRSZWN0IFJlbmRlckJveDo6
Y2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKQogewotICAgIEludFJlY3QgY2xp
cFJlY3QobG9jYXRpb24sIHNpemUoKSk7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdChsb2NhdGlv
biwgc2l6ZSgpKTsKICAgICBpZiAoIXN0eWxlKCktPmNsaXBMZWZ0KCkuaXNBdXRvKCkpIHsKLSAg
ICAgICAgaW50IGMgPSBzdHlsZSgpLT5jbGlwTGVmdCgpLmNhbGNWYWx1ZSh3aWR0aCgpKTsKKyAg
ICAgICAgTGF5b3V0VW5pdCBjID0gc3R5bGUoKS0+Y2xpcExlZnQoKS5jYWxjVmFsdWUod2lkdGgo
KSk7CiAgICAgICAgIGNsaXBSZWN0Lm1vdmUoYywgMCk7CiAgICAgICAgIGNsaXBSZWN0LmNvbnRy
YWN0KGMsIDApOwogICAgIH0KQEAgLTExNzEsNyArMTE3MSw3IEBAIEludFJlY3QgUmVuZGVyQm94
OjpjbGlwUmVjdChjb25zdCBJbnRQb2kKICAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qod2lkdGgo
KSAtIHN0eWxlKCktPmNsaXBSaWdodCgpLmNhbGNWYWx1ZSh3aWR0aCgpKSwgMCk7CiAKICAgICBp
ZiAoIXN0eWxlKCktPmNsaXBUb3AoKS5pc0F1dG8oKSkgewotICAgICAgICBpbnQgYyA9IHN0eWxl
KCktPmNsaXBUb3AoKS5jYWxjVmFsdWUoaGVpZ2h0KCkpOworICAgICAgICBMYXlvdXRVbml0IGMg
PSBzdHlsZSgpLT5jbGlwVG9wKCkuY2FsY1ZhbHVlKGhlaWdodCgpKTsKICAgICAgICAgY2xpcFJl
Y3QubW92ZSgwLCBjKTsKICAgICAgICAgY2xpcFJlY3QuY29udHJhY3QoMCwgYyk7CiAgICAgfQpA
QCAtMTE4Miw3ICsxMTgyLDcgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmNsaXBSZWN0KGNvbnN0IElu
dFBvaQogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotaW50IFJlbmRlckJveDo6Y29udGFpbmlu
Z0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJv
eDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0CiB7CiAgICAg
UmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKHNocmlua1RvQXZv
aWRGbG9hdHMoKSkKQEAgLTExOTAsNyArMTE5MCw3IEBAIGludCBSZW5kZXJCb3g6OmNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWQKICAgICByZXR1cm4gY2ItPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgp
OwogfQogCi1pbnQgUmVuZGVyQm94OjpwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNh
bEhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6cGVycGVuZGljdWxhckNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9
IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIFJlbmRlclN0eWxlKiBjb250YWluaW5nQmxvY2tTdHls
ZSA9IGNiLT5zdHlsZSgpOwpAQCAtMTM2Niw3ICsxMzY2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBv
c2l0aW9uTGluZUJveChJbmxpbmVCbwogICAgICAgICBib3gtPnJlbW92ZSgpOwogICAgICAgICBi
b3gtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7CiAgICAgfSBlbHNlIGlmIChpc1JlcGxhY2VkKCkp
IHsKLSAgICAgICAgc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoYm94LT54
KCksIGJveC0+eSgpKSkpOworICAgICAgICBzZXRMb2NhdGlvbihyb3VuZGVkTGF5b3V0UG9pbnQo
RmxvYXRQb2ludChib3gtPngoKSwgYm94LT55KCkpKSk7CiAgICAgICAgIG1faW5saW5lQm94V3Jh
cHBlciA9IGJveDsKICAgICB9CiB9CkBAIC0xMzgxLDEyICsxMzgxLDEyIEBAIHZvaWQgUmVuZGVy
Qm94OjpkZWxldGVMaW5lQm94V3JhcHBlcigpCiAgICAgfQogfQogCi1JbnRSZWN0IFJlbmRlckJv
eDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6Y2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIp
IGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFICYmICFl
bmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKQotICAgICAgICByZXR1cm4gSW50
UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgSW50UmVjdCByID0g
dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgTGF5b3V0UmVjdCByID0gdmlzdWFsT3ZlcmZsb3dS
ZWN0KCk7CiAKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgIGlmICh2KSB7CkBAIC0x
NDEyLDcgKzE0MTIsNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZv
CiAgICAgcmV0dXJuIHI7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlY3Qs
IGJvb2wgZml4ZWQpIGNvbnN0Cit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0JiByZWN0
LCBib29sIGZpeGVkKSBjb25zdAogewogICAgIC8vIFRoZSByZWN0IHdlIGNvbXB1dGUgYXQgZWFj
aCBzdGVwIGlzIHNoaWZ0ZWQgYnkgb3VyIHgveSBvZmZzZXQgaW4gdGhlIHBhcmVudCBjb250YWlu
ZXIncyBjb29yZGluYXRlIHNwYWNlLgogICAgIC8vIE9ubHkgd2hlbiB3ZSBjcm9zcyBhIHdyaXRp
bmcgbW9kZSBib3VuZGFyeSB3aWxsIHdlIGhhdmUgdG8gcG9zc2libHkgZmxpcEZvcldyaXRpbmdN
b2RlICh0byBjb252ZXJ0IGludG8gYSBtb3JlIGFwcHJvcHJpYXRlCkBAIC0xNDU3LDcgKzE0NTcs
NyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAKICAgICBpZiAo
aXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgIGZsaXBGb3JX
cml0aW5nTW9kZShyZWN0KTsKLSAgICBJbnRQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigp
OworICAgIExheW91dFBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CiAgICAgdG9wTGVm
dC5tb3ZlKHgoKSwgeSgpKTsKIAogICAgIEVQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlKCktPnBv
c2l0aW9uKCk7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJl
Y3RGb3JSZXBhaW50KFJlCiAgICAgaWYgKG8tPmlzQmxvY2tGbG93KCkgJiYgcG9zaXRpb24gIT0g
QWJzb2x1dGVQb3NpdGlvbiAmJiBwb3NpdGlvbiAhPSBGaXhlZFBvc2l0aW9uKSB7CiAgICAgICAg
IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2sobyk7CiAgICAgICAgIGlmIChjYi0+aGFz
Q29sdW1ucygpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHRvcExlZnQsIHJl
Y3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgcmVwYWludFJlY3QodG9wTGVmdCwg
cmVjdC5zaXplKCkpOwogICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1bW5zKHJlcGFp
bnRSZWN0KTsKICAgICAgICAgICAgIHRvcExlZnQgPSByZXBhaW50UmVjdC5sb2NhdGlvbigpOwog
ICAgICAgICAgICAgcmVjdCA9IHJlcGFpbnRSZWN0OwpAQCAtMTUwMiw4ICsxNTAyLDggQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZQogICAgICAgICAvLyBhbnl3YXkg
aWYgaXRzIHNpemUgZG9lcyBjaGFuZ2UuCiAgICAgICAgIHRvcExlZnQgLT0gY29udGFpbmVyQm94
LT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsgLy8gRm9yIG92ZXJmbG93OmF1dG8v
c2Nyb2xsL2hpZGRlbi4KIAotICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHRvcExlZnQsIHJl
Y3Quc2l6ZSgpKTsKLSAgICAgICAgSW50UmVjdCBib3hSZWN0KEludFBvaW50KCksIGNvbnRhaW5l
ckJveC0+bGF5ZXIoKS0+c2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCh0
b3BMZWZ0LCByZWN0LnNpemUoKSk7CisgICAgICAgIExheW91dFJlY3QgYm94UmVjdChMYXlvdXRQ
b2ludCgpLCBjb250YWluZXJCb3gtPmxheWVyKCktPnNpemUoKSk7CiAgICAgICAgIHJlY3QgPSBp
bnRlcnNlY3Rpb24ocmVwYWludFJlY3QsIGJveFJlY3QpOwogICAgICAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTEyLDcgKzE1MTIsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAKICAgICBpZiAoY29udGFpbmVyU2tp
cHBlZCkgewogICAgICAgICAvLyBJZiB0aGUgcmVwYWludENvbnRhaW5lciBpcyBiZWxvdyBvLCB0
aGVuIHdlIG5lZWQgdG8gbWFwIHRoZSByZWN0IGludG8gcmVwYWludENvbnRhaW5lcidzIGNvb3Jk
aW5hdGVzLgotICAgICAgICBJbnRTaXplIGNvbnRhaW5lck9mZnNldCA9IHJlcGFpbnRDb250YWlu
ZXItPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihvKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBj
b250YWluZXJPZmZzZXQgPSByZXBhaW50Q29udGFpbmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250
YWluZXIobyk7CiAgICAgICAgIHJlY3QubW92ZSgtY29udGFpbmVyT2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTE1NzcsOSArMTU3Nyw5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlTG9naWNhbFdpZHRoKCkKICAgICBMZW5ndGggbG9naWNhbFdpZHRoTGVuZ3RoID0gKHRyZWF0
QXNSZXBsYWNlZCkgPyBMZW5ndGgoY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKCksIEZpeGVk
KSA6IHN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heCgwLCBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkpOworICAgIExheW91dFVuaXQg
Y29udGFpbmVyTG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSk7CiAgICAgYm9vbCBoYXNQZXJwZW5kaWN1bGFyQ29u
dGFpbmluZ0Jsb2NrID0gY2ItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKTsKLSAgICBpbnQgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlv
biA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5lcldpZHRo
SW5JbmxpbmVEaXJlY3Rpb24gPSBjb250YWluZXJMb2dpY2FsV2lkdGg7CiAgICAgaWYgKGhhc1Bl
cnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spCiAgICAgICAgIGNvbnRhaW5lcldpZHRoSW5Jbmxp
bmVEaXJlY3Rpb24gPSBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgp
OwogICAgIApAQCAtMTU4OCw3ICsxNTg4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dp
Y2FsV2lkdGgoKQogICAgICAgICBzZXRNYXJnaW5TdGFydChzdHlsZSgpLT5tYXJnaW5TdGFydCgp
LmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpKTsKICAgICAgICAgc2V0TWFyZ2lu
RW5kKHN0eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsV2lk
dGgpKTsKICAgICAgICAgaWYgKHRyZWF0QXNSZXBsYWNlZCkKLSAgICAgICAgICAgIHNldExvZ2lj
YWxXaWR0aChtYXgobG9naWNhbFdpZHRoTGVuZ3RoLnZhbHVlKCkgKyBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbFdpZHRoKCksIG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpKSk7CisgICAgICAgICAg
ICBzZXRMb2dpY2FsV2lkdGgobWF4PExheW91dFVuaXQ+KGxvZ2ljYWxXaWR0aExlbmd0aC5jYWxj
RmxvYXRWYWx1ZSgwKSArIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTYwMSw3
ICsxNjAxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQogCiAgICAg
ICAgIC8vIENhbGN1bGF0ZSBNYXhMb2dpY2FsV2lkdGgKICAgICAgICAgaWYgKCFzdHlsZSgpLT5s
b2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBpbnQgbWF4TG9n
aWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKE1heExvZ2ljYWxXaWR0aCwgY29u
dGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7CisgICAgICAgICAgICBMYXlvdXRVbml0IG1h
eExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhNYXhMb2dpY2FsV2lkdGgs
IGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24pOwogICAgICAgICAgICAgaWYgKGxvZ2lj
YWxXaWR0aCgpID4gbWF4TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICAgICAgc2V0TG9naWNh
bFdpZHRoKG1heExvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgbG9naWNhbFdpZHRoTGVu
Z3RoID0gc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCk7CkBAIC0xNjA5LDcgKzE2MDksNyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBDYWxjdWxhdGUgTWluTG9naWNhbFdpZHRoCi0gICAgICAgIGludCBtaW5Mb2dpY2FsV2lk
dGggPSBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTWluTG9naWNhbFdpZHRoLCBjb250YWluZXJX
aWR0aEluSW5saW5lRGlyZWN0aW9uKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5Mb2dpY2FsV2lk
dGggPSBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTWluTG9naWNhbFdpZHRoLCBjb250YWluZXJX
aWR0aEluSW5saW5lRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aCgpIDwgbWlu
TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICBzZXRMb2dpY2FsV2lkdGgobWluTG9naWNhbFdp
ZHRoKTsKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aExlbmd0aCA9IHN0eWxlKCktPmxvZ2ljYWxN
aW5XaWR0aCgpOwpAQCAtMTcyMCw3ICsxNzIwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVJ
bmxpbmVEaXJlY3Rpb25NYQogICAgIC8vIENhc2UgT25lOiBUaGUgb2JqZWN0IGlzIGJlaW5nIGNl
bnRlcmVkIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgYXZhaWxhYmxlIGxvZ2ljYWwgd2lkdGgu
CiAgICAgaWYgKChtYXJnaW5TdGFydExlbmd0aC5pc0F1dG8oKSAmJiBtYXJnaW5FbmRMZW5ndGgu
aXNBdXRvKCkgJiYgY2hpbGRXaWR0aCA8IGNvbnRhaW5lcldpZHRoKQogICAgICAgICB8fCAoIW1h
cmdpblN0YXJ0TGVuZ3RoLmlzQXV0bygpICYmICFtYXJnaW5FbmRMZW5ndGguaXNBdXRvKCkgJiYg
Y29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSKSkg
ewotICAgICAgICBjb250YWluaW5nQmxvY2stPnNldE1hcmdpblN0YXJ0Rm9yQ2hpbGQodGhpcywg
bWF4KDAsIChjb250YWluZXJXaWR0aCAtIGNoaWxkV2lkdGgpIC8gMikpOworICAgICAgICBjb250
YWluaW5nQmxvY2stPnNldE1hcmdpblN0YXJ0Rm9yQ2hpbGQodGhpcywgbWF4PExheW91dFVuaXQ+
KDAsIChjb250YWluZXJXaWR0aCAtIGNoaWxkV2lkdGgpIC8gMikpOwogICAgICAgICBjb250YWlu
aW5nQmxvY2stPnNldE1hcmdpbkVuZEZvckNoaWxkKHRoaXMsIGNvbnRhaW5lcldpZHRoIC0gY2hp
bGRXaWR0aCAtIGNvbnRhaW5pbmdCbG9jay0+bWFyZ2luU3RhcnRGb3JDaGlsZCh0aGlzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9IApAQCAtMTgwNSw2ICsxODA1LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZXN1
bHQ7CiAgICAgICAgIGlmIChjaGVja01pbk1heEhlaWdodCkgewogICAgICAgICAgICAgaGVpZ2h0
UmVzdWx0ID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0
KCkpOworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSA8IDAgb3Igcm91Z2hseUVxdWFscyB3aGVu
IHdlIG1vdmUgdG8gZmxvYXQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjYxNDgKICAgICAgICAgICAgIGlmIChoZWlnaHRSZXN1bHQgPT0gLTEpCiAgICAgICAg
ICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gbG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgTGF5
b3V0VW5pdCBtaW5IID0gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2Fs
TWluSGVpZ2h0KCkpOyAvLyBMZWF2ZSBhcyAtMSBpZiB1bnNldC4KQEAgLTE4NjMsNiArMTg2NCw3
IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWcKICAgICAgICAgICAg
IGxvZ2ljYWxIZWlnaHQgPSBoLnZhbHVlKCk7CiAgICAgICAgIGVsc2UgaWYgKGguaXNQZXJjZW50
KCkpCiAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2Fs
SGVpZ2h0KGgpOworICAgICAgICAvLyBGSVhNRTogVXNlIDwgMCBvciByb3VnaGx5RXF1YWxzIHdo
ZW4gd2UgbW92ZSB0byBmbG9hdCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjE0OAogICAgICAgICBpZiAobG9naWNhbEhlaWdodCAhPSAtMSkgewogICAgICAg
ICAgICAgbG9naWNhbEhlaWdodCA9IGNvbXB1dGVCb3JkZXJCb3hMb2dpY2FsSGVpZ2h0KGxvZ2lj
YWxIZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxIZWlnaHQ7CkBAIC0xOTI3LDYg
KzE5MjksNyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMCiAgICAg
ZWxzZSBpZiAoY2ItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSAmJiAhaXNQ
b3NpdGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIHJl
Y3VyIGFuZCBjb21wdXRlIHRoZSBwZXJjZW50YWdlIGhlaWdodCBmb3Igb3VyIGNvbnRhaW5pbmcg
YmxvY2suCiAgICAgICAgIHJlc3VsdCA9IGNiLT5jb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWln
aHQoY2ItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBVc2Ug
PCAwIG9yIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgIGlmIChyZXN1bHQg
IT0gLTEpCiAgICAgICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
SGVpZ2h0KHJlc3VsdCk7CiAgICAgfSBlbHNlIGlmIChjYi0+aXNSZW5kZXJWaWV3KCkgfHwgKGNi
LT5pc0JvZHkoKSAmJiBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgfHwgaXNQb3NpdGlvbmVk
V2l0aFNwZWNpZmllZEhlaWdodCkgewpAQCAtMTk0MSw2ICsxOTQ0LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50YWdlTAogICAgICAgICAvLyBhbHdheXMuICBOb3RlIHdl
IGNvdWxkIG9ubHkgaGl0IHRoaXMgY2FzZSBieSByZWN1cnJpbmcgaW50byBjb21wdXRlUGVyY2Vu
dGFnZUxvZ2ljYWxIZWlnaHQgb24gYSBwb3NpdGlvbmVkIGNvbnRhaW5pbmcgYmxvY2suCiAgICAg
ICAgIHJlc3VsdCA9IGNiLT5jb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoY2ItPmF2YWls
YWJsZUxvZ2ljYWxIZWlnaHQoKSk7CiAKKyAgICAvLyBGSVhNRTogVXNlIDwgMCBvciByb3VnaGx5
RXF1YWxzIHdoZW4gd2UgbW92ZSB0byBmbG9hdCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NjE0OAogICAgIGlmIChyZXN1bHQgIT0gLTEpIHsKICAgICAgICAg
cmVzdWx0ID0gaGVpZ2h0LmNhbGNWYWx1ZShyZXN1bHQpOwogICAgICAgICBpZiAoaW5jbHVkZUJv
cmRlclBhZGRpbmcpIHsKQEAgLTIxMDksNyArMjExMyw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlQmxvY2tEaXJlY3Rpb25NYXIKIAogICAgIC8vIE1hcmdpbnMgYXJlIGNhbGN1bGF0ZWQgd2l0
aCByZXNwZWN0IHRvIHRoZSBsb2dpY2FsIHdpZHRoIG9mCiAgICAgLy8gdGhlIGNvbnRhaW5pbmcg
YmxvY2sgKDguMykKLSAgICBpbnQgY3cgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JD
b250ZW50KCk7CisgICAgTGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvckNvbnRlbnQoKTsKIAogICAgIFJlbmRlclN0eWxlKiBjb250YWluaW5nQmxvY2tTdHlsZSA9
IGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKTsKICAgICBjb250YWluaW5nQmxvY2stPnNldE1hcmdp
bkJlZm9yZUZvckNoaWxkKHRoaXMsIHN0eWxlKCktPm1hcmdpbkJlZm9yZVVzaW5nKGNvbnRhaW5p
bmdCbG9ja1N0eWxlKS5jYWxjTWluVmFsdWUoY3cpKTsKQEAgLTIxMzQsOCArMjEzOCw4IEBAIGlu
dCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWQKICAgICBpZiAoIWZpcnN0IHx8
ICFsYXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBmcm9tTGVmdDsKLSAgICBpbnQg
ZnJvbVJpZ2h0OworICAgIExheW91dFVuaXQgZnJvbUxlZnQ7CisgICAgTGF5b3V0VW5pdCBmcm9t
UmlnaHQ7CiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKSB7CiAgICAgICAgIGZyb21MZWZ0ID0gZmlyc3QtPmxvZ2ljYWxMZWZ0KCkgKyBm
aXJzdC0+Ym9yZGVyTG9naWNhbExlZnQoKTsKICAgICAgICAgZnJvbVJpZ2h0ID0gbGFzdC0+bG9n
aWNhbExlZnQoKSArIGxhc3QtPmxvZ2ljYWxXaWR0aCgpIC0gbGFzdC0+Ym9yZGVyTG9naWNhbFJp
Z2h0KCk7CkBAIC0yMTQ0LDcgKzIxNDgsNyBAQCBpbnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkCiAgICAgICAgIGZyb21MZWZ0ID0gbGFzdC0+bG9naWNhbExlZnQoKSArIGxh
c3QtPmJvcmRlckxvZ2ljYWxMZWZ0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1heCgwLCAoZnJv
bVJpZ2h0IC0gZnJvbUxlZnQpKTsKKyAgICByZXR1cm4gbWF4PExheW91dFVuaXQ+KDAsIGZyb21S
aWdodCAtIGZyb21MZWZ0KTsKIH0KIAogaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9n
aWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRh
aW5pbmdCbG9jaywgYm9vbCBjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSkgY29uc3QK
QEAgLTIxNjUsOCArMjE2OSw4IEBAIGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxIZWkKICAgICBpZiAoIWZpcnN0IHx8ICFsYXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IGludCBoZWlnaHRSZXN1bHQ7Ci0gICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGZsb3ctPmxpbmVz
Qm91bmRpbmdCb3goKTsKKyAgICBMYXlvdXRVbml0IGhlaWdodFJlc3VsdDsKKyAgICBMYXlvdXRS
ZWN0IGJvdW5kaW5nQm94ID0gZmxvdy0+bGluZXNCb3VuZGluZ0JveCgpOwogICAgIGlmIChjb250
YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIGhlaWdodFJl
c3VsdCA9IGJvdW5kaW5nQm94LmhlaWdodCgpOwogICAgIGVsc2UKQEAgLTIxODMsNyArMjE4Nyw3
IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZSgKIAogICAgIC8vIEZJ
WE1FOiBUaGUgc3RhdGljIGRpc3RhbmNlIGNvbXB1dGF0aW9uIGhhcyBub3QgYmVlbiBwYXRjaGVk
IGZvciBtaXhlZCB3cml0aW5nIG1vZGVzIHlldC4KICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9u
ID09IExUUikgewotICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24gPSBjaGlsZC0+bGF5ZXIoKS0+
c3RhdGljSW5saW5lUG9zaXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMb2dpY2FsTGVm
dCgpOworICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCkt
PnN0YXRpY0lubGluZVBvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyTG9naWNhbExl
ZnQoKTsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBjaGlsZC0+cGFyZW50KCk7
IGN1cnIgJiYgY3VyciAhPSBjb250YWluZXJCbG9jazsgY3VyciA9IGN1cnItPmNvbnRhaW5lcigp
KSB7CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkKICAgICAgICAgICAgICAgICBzdGF0
aWNQb3NpdGlvbiArPSB0b1JlbmRlckJveChjdXJyKS0+bG9naWNhbExlZnQoKTsKQEAgLTIxOTEs
NyArMjE5NSw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZSgKICAg
ICAgICAgbG9naWNhbExlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKICAgICB9
IGVsc2UgewogICAgICAgICBSZW5kZXJCb3gqIGVuY2xvc2luZ0JveCA9IGNoaWxkLT5wYXJlbnQo
KS0+ZW5jbG9zaW5nQm94KCk7Ci0gICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IGNoaWxkLT5s
YXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpICsgY29udGFpbmVyTG9naWNhbFdpZHRoICsg
Y29udGFpbmVyQmxvY2stPmJvcmRlckxvZ2ljYWxSaWdodCgpOworICAgICAgICBMYXlvdXRVbml0
IHN0YXRpY1Bvc2l0aW9uID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCkg
KyBjb250YWluZXJMb2dpY2FsV2lkdGggKyBjb250YWluZXJCbG9jay0+Ym9yZGVyTG9naWNhbFJp
Z2h0KCk7CiAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IGVuY2xvc2luZ0JveC0+bG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZW5jbG9zaW5nQm94OyBj
dXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxvY2s7IGN1cnIgPSBjdXJyLT5jb250YWluZXIoKSkg
ewogICAgICAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpCkBAIC0yMjM3LDE4ICsyMjQxLDE4IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyByZWxhdGl2
ZSBwb3NpdGlvbmVkIGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29u
dGFpbmVyQmxvY2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKICAgICAK
LSAgICBjb25zdCBpbnQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7CisgICAgY29uc3QgTGF5b3V0
VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhG
b3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKIAogICAgIC8vIFRvIG1hdGNoIFdpbklFLCBp
biBxdWlya3MgbW9kZSB1c2UgdGhlIHBhcmVudCdzICdkaXJlY3Rpb24nIHByb3BlcnR5CiAgICAg
Ly8gaW5zdGVhZCBvZiB0aGUgdGhlIGNvbnRhaW5lciBibG9jaydzLgogICAgIFRleHREaXJlY3Rp
b24gY29udGFpbmVyRGlyZWN0aW9uID0gKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSA/IHBh
cmVudCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA6IGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKTsKLSAgICBjb25zdCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxXaWR0aCgpOworICAgIGNvbnN0IExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRk
aW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAgIGNvbnN0IExlbmd0aCBt
YXJnaW5Mb2dpY2FsTGVmdCA9IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCktPm1hcmdpbkxlZnQoKSA6
IHN0eWxlKCktPm1hcmdpblRvcCgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJnaW5Mb2dpY2FsUmln
aHQgPSBpc0hvcml6b250YWwgPyBzdHlsZSgpLT5tYXJnaW5SaWdodCgpIDogc3R5bGUoKS0+bWFy
Z2luQm90dG9tKCk7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9u
dGFsID8gbV9tYXJnaW5MZWZ0IDogbV9tYXJnaW5Ub3A7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2Fs
UmlnaHRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRv
bTsKKyAgICBMYXlvdXRVbml0JiBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFs
ID8gbV9tYXJnaW5MZWZ0IDogbV9tYXJnaW5Ub3A7CisgICAgTGF5b3V0VW5pdCYgbWFyZ2luTG9n
aWNhbFJpZ2h0QWxpYXMgPSBpc0hvcml6b250YWwgPyBtX21hcmdpblJpZ2h0IDogbV9tYXJnaW5C
b3R0b207CiAKICAgICBMZW5ndGggbG9naWNhbExlZnQgPSBzdHlsZSgpLT5sb2dpY2FsTGVmdCgp
OwogICAgIExlbmd0aCBsb2dpY2FsUmlnaHQgPSBzdHlsZSgpLT5sb2dpY2FsUmlnaHQoKTsKQEAg
LTIyODIsOCArMjI4Niw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWwKICAgICBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UobG9naWNhbExlZnQsIGxvZ2ljYWxS
aWdodCwgdGhpcywgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgY29udGFp
bmVyRGlyZWN0aW9uKTsKICAgICAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlv
biB2YWx1ZXMgZm9yICd3aWR0aCcgY2FzZS4KLSAgICBpbnQgbG9naWNhbFdpZHRoUmVzdWx0Owot
ICAgIGludCBsb2dpY2FsTGVmdFJlc3VsdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aFJl
c3VsdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UmVzdWx0OwogICAgIGNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbFdpZHRoKCksIGNvbnRhaW5l
ckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGgsIGJvcmRlcnNQbHVzUGFkZGluZywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0LCBsb2dpY2Fs
UmlnaHQsIG1hcmdpbkxvZ2ljYWxMZWZ0LCBtYXJnaW5Mb2dpY2FsUmlnaHQsCkBAIC0yMjkzLDEw
ICsyMjk3LDEwIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKIAog
ICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ21heC13aWR0
aCcgY2FzZS4KICAgICBpZiAoIXN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVk
KCkpIHsKLSAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aDsKLSAgICAgICAgaW50IG1heE1hcmdp
bkxvZ2ljYWxMZWZ0OwotICAgICAgICBpbnQgbWF4TWFyZ2luTG9naWNhbFJpZ2h0OwotICAgICAg
ICBpbnQgbWF4TG9naWNhbExlZnRQb3M7CisgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbFdp
ZHRoOworICAgICAgICBMYXlvdXRVbml0IG1heE1hcmdpbkxvZ2ljYWxMZWZ0OworICAgICAgICBM
YXlvdXRVbml0IG1heE1hcmdpbkxvZ2ljYWxSaWdodDsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhM
b2dpY2FsTGVmdFBvczsKIAogICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVz
aW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVy
RGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5lckxvZ2ljYWxXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLApAQCAtMjMxMywxMCArMjMx
NywxMCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAKICAgICAv
LyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4td2lkdGgnIGNh
c2UuCiAgICAgaWYgKCFzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKS5pc1plcm8oKSkgewotICAg
ICAgICBpbnQgbWluTG9naWNhbFdpZHRoOwotICAgICAgICBpbnQgbWluTWFyZ2luTG9naWNhbExl
ZnQ7Ci0gICAgICAgIGludCBtaW5NYXJnaW5Mb2dpY2FsUmlnaHQ7Ci0gICAgICAgIGludCBtaW5M
b2dpY2FsTGVmdFBvczsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5Mb2dpY2FsV2lkdGg7CisgICAg
ICAgIExheW91dFVuaXQgbWluTWFyZ2luTG9naWNhbExlZnQ7CisgICAgICAgIExheW91dFVuaXQg
bWluTWFyZ2luTG9naWNhbFJpZ2h0OworICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxMZWZ0
UG9zOwogCiAgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUo
KS0+bG9naWNhbE1pbldpZHRoKCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9n
aWNhbFdpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCkBAIC0yMzQ0LDcgKzIzNDgsNyBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgc2V0TG9naWNhbFdpZHRo
KGxvZ2ljYWxXaWR0aCgpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIH0KIAotc3RhdGljIHZvaWQg
Y29tcHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldChpbnQmIGxvZ2ljYWxMZWZ0UG9zLCBj
b25zdCBSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbFdpZHRoVmFsdWUsIGNvbnN0IFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0
aCkKK3N0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsTGVmdFBvc2l0aW9uZWRPZmZzZXQoTGF5b3V0
VW5pdCYgbG9naWNhbExlZnRQb3MsIGNvbnN0IFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQg
bG9naWNhbFdpZHRoVmFsdWUsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJC
bG9jaywgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgpCiB7CiAgICAgLy8gRGVhbCB3
aXRoIGRpZmZlcmluZyB3cml0aW5nIG1vZGVzIGhlcmUuICBPdXIgb2Zmc2V0IG5lZWRzIHRvIGJl
IGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzcGFjZS4gSWYgdGhlIGNvbnRh
aW5pbmcgYmxvY2sgaXMgZmxpcHBlZAogICAgIC8vIGFsb25nIHRoaXMgYXhpcywgdGhlbiB3ZSBu
ZWVkIHRvIGZsaXAgdGhlIGNvb3JkaW5hdGUuICBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUg
Y29udGFpbmluZyBibG9jayBpcyBib3RoIGEgZmxpcHBlZCBtb2RlIGFuZCBwZXJwZW5kaWN1bGFy
IHRvIHVzLgpAQCAtMjM1NiwxNSArMjM2MCwxNSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNh
bExlZnRQb3NpdGlvbmVkCiB9CiAKIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxXaWR0aFVzaW5nKExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Y29udGFpbmVyTG9naWNhbFdpZHRoLCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250
YWluZXJMb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxvZ2lj
YWxMZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQsIExl
bmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIGxvZ2ljYWxXaWR0aFZhbHVlLCBpbnQmIG1hcmdpbkxv
Z2ljYWxMZWZ0VmFsdWUsIGludCYgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUsIGludCYgbG9naWNh
bExlZnRQb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0JiBsb2dpY2FsV2lkdGhWYWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luTG9n
aWNhbExlZnRWYWx1ZSwgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUsIExheW91
dFVuaXQmIGxvZ2ljYWxMZWZ0UG9zKQogewogICAgIC8vICdsZWZ0JyBhbmQgJ3JpZ2h0JyBjYW5u
b3QgYm90aCBiZSAnYXV0bycgYmVjYXVzZSBvbmUgd291bGQgb2YgYmVlbgogICAgIC8vIGNvbnZl
cnRlZCB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGFscmVhZHkKICAgICBBU1NFUlQoIShsb2dpY2Fs
TGVmdC5pc0F1dG8oKSAmJiBsb2dpY2FsUmlnaHQuaXNBdXRvKCkpKTsKIAotICAgIGludCBsb2dp
Y2FsTGVmdFZhbHVlID0gMDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmFsdWUgPSAwOwog
CiAgICAgYm9vbCBsb2dpY2FsV2lkdGhJc0F1dG8gPSBsb2dpY2FsV2lkdGguaXNJbnRyaW5zaWNP
ckF1dG8oKTsKICAgICBib29sIGxvZ2ljYWxMZWZ0SXNBdXRvID0gbG9naWNhbExlZnQuaXNBdXRv
KCk7CkBAIC0yMzg5LDcgKzIzOTMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsCiAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBsb2dpY2FsTGVmdC5jYWxjVmFs
dWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKICAgICAgICAgbG9naWNhbFdpZHRoVmFsdWUgPSBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGguY2FsY1ZhbHVlKGNvbnRh
aW5lckxvZ2ljYWxXaWR0aCkpOwogCi0gICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9
IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtIChsb2dpY2FsTGVmdFZhbHVlICsgbG9naWNhbFdpZHRo
VmFsdWUgKyBsb2dpY2FsUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkgKyBi
b3JkZXJzUGx1c1BhZGRpbmcpOworICAgICAgICBjb25zdCBMYXlvdXRVbml0IGF2YWlsYWJsZVNw
YWNlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2Fs
V2lkdGhWYWx1ZSArIGxvZ2ljYWxSaWdodC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRo
KSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CiAKICAgICAgICAgLy8gTWFyZ2lucyBhcmUgbm93IHRo
ZSBvbmx5IHVua25vd24KICAgICAgICAgaWYgKG1hcmdpbkxvZ2ljYWxMZWZ0LmlzQXV0bygpICYm
IG1hcmdpbkxvZ2ljYWxSaWdodC5pc0F1dG8oKSkgewpAQCAtMjQ3MCwxOCArMjQ3NCwxOCBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIG1hcmdpbkxv
Z2ljYWxMZWZ0VmFsdWUgPSBtYXJnaW5Mb2dpY2FsTGVmdC5jYWxjTWluVmFsdWUoY29udGFpbmVy
TG9naWNhbFdpZHRoKTsKICAgICAgICAgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUgPSBtYXJnaW5M
b2dpY2FsUmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7CiAKLSAgICAg
ICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKG1h
cmdpbkxvZ2ljYWxMZWZ0VmFsdWUgKyBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSArIGJvcmRlcnNQ
bHVzUGFkZGluZyk7CisgICAgICAgIGNvbnN0IExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UgPSBj
b250YWluZXJMb2dpY2FsV2lkdGggLSAobWFyZ2luTG9naWNhbExlZnRWYWx1ZSArIG1hcmdpbkxv
Z2ljYWxSaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIAogICAgICAgICAvLyBGSVhN
RTogSXMgdGhlcmUgYSBmYXN0ZXIgd2F5IHRvIGZpbmQgdGhlIGNvcnJlY3QgY2FzZT8KICAgICAg
ICAgLy8gVXNlIHJ1bGUvY2FzZSB0aGF0IGFwcGxpZXMuCiAgICAgICAgIGlmIChsb2dpY2FsTGVm
dElzQXV0byAmJiBsb2dpY2FsV2lkdGhJc0F1dG8gJiYgIWxvZ2ljYWxSaWdodElzQXV0bykgewog
ICAgICAgICAgICAgLy8gUlVMRSAxOiAodXNlIHNocmluay10by1maXQgZm9yIHdpZHRoLCBhbmQg
c29sdmUgb2YgbGVmdCkKLSAgICAgICAgICAgIGludCBsb2dpY2FsUmlnaHRWYWx1ZSA9IGxvZ2lj
YWxSaWdodC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIExh
eW91dFVuaXQgbG9naWNhbFJpZ2h0VmFsdWUgPSBsb2dpY2FsUmlnaHQuY2FsY1ZhbHVlKGNvbnRh
aW5lckxvZ2ljYWxXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBpdCBiZSBi
ZXR0ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGluIG9uZSBzdGVwPwotICAgICAgICAgICAgaW50
IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1
c1BhZGRpbmc7Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBh
dmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNhbFJpZ2h0VmFsdWU7CisgICAg
ICAgICAgICBMYXlvdXRVbml0IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBMYXlvdXRVbml0IHByZWZl
cnJlZE1pbldpZHRoID0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1Bh
ZGRpbmc7CisgICAgICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxl
U3BhY2UgLSBsb2dpY2FsUmlnaHRWYWx1ZTsKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aFZhbHVl
ID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRX
aWR0aCk7CiAgICAgICAgICAgICBsb2dpY2FsTGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAo
bG9naWNhbFdpZHRoVmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoIWxvZ2ljYWxMZWZ0SXNBdXRvICYmIGxvZ2ljYWxXaWR0aElzQXV0byAmJiBsb2dpY2FsUmln
aHRJc0F1dG8pIHsKQEAgLTI0ODksOSArMjQ5Myw5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBsb2dpY2Fs
TGVmdC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKIAogICAgICAgICAgICAgLy8g
RklYTUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmluay10by1maXQgaW4gb25lIHN0
ZXA/Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRN
aW5XaWR0aCA9IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5n
OwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBsb2dp
Y2FsTGVmdFZhbHVlOworICAgICAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0aCA9IG1h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAg
ICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNhbExlZnRWYWx1ZTsKICAgICAgICAgICAg
IGxvZ2ljYWxXaWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxl
V2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAobG9naWNhbExlZnRJ
c0F1dG8gJiYgIWxvZ2ljYWxXaWR0aElzQXV0byAmJiAhbG9naWNhbFJpZ2h0SXNBdXRvKSB7CiAg
ICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBmb3IgbGVmdCkKQEAgLTI1MzQsNyArMjUzOCw3
IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKEwKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGUgc3RhdGljIGRpc3RhbmNlIGNvbXB1dGF0aW9u
IGhhcyBub3QgYmVlbiBwYXRjaGVkIGZvciBtaXhlZCB3cml0aW5nIG1vZGVzLgotICAgIGludCBz
dGF0aWNMb2dpY2FsVG9wID0gY2hpbGQtPmxheWVyKCktPnN0YXRpY0Jsb2NrUG9zaXRpb24oKSAt
IGNvbnRhaW5lckJsb2NrLT5ib3JkZXJCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IHN0YXRpY0xv
Z2ljYWxUb3AgPSBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljQmxvY2tQb3NpdGlvbigpIC0gY29udGFp
bmVyQmxvY2stPmJvcmRlckJlZm9yZSgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0g
Y2hpbGQtPnBhcmVudCgpOyBjdXJyICYmIGN1cnIgIT0gY29udGFpbmVyQmxvY2s7IGN1cnIgPSBj
dXJyLT5jb250YWluZXIoKSkgewogICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSAmJiAhY3Vyci0+
aXNUYWJsZVJvdygpKQogICAgICAgICAgICAgc3RhdGljTG9naWNhbFRvcCArPSB0b1JlbmRlckJv
eChjdXJyKS0+bG9naWNhbFRvcCgpOwpAQCAtMjU1OSwxNSArMjU2MywxNSBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRh
aW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3Npbmcg
cmVscG9zaXRpb25lZCBpbmxpbmUuCiAgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNv
bnRhaW5lckJsb2NrID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWluZXIoKSk7CiAKLSAg
ICBjb25zdCBpbnQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2lj
YWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKKyAgICBjb25zdCBMYXlvdXRV
bml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0
Rm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jayk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgYm9vbCBpc0ZsaXBwZWQgPSBzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpOwotICAgIGNvbnN0IGludCBib3JkZXJzUGx1
c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOworICAgIGNvbnN0IExh
eW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWln
aHQoKTsKICAgICBjb25zdCBMZW5ndGggbWFyZ2luQmVmb3JlID0gc3R5bGUoKS0+bWFyZ2luQmVm
b3JlKCk7CiAgICAgY29uc3QgTGVuZ3RoIG1hcmdpbkFmdGVyID0gc3R5bGUoKS0+bWFyZ2luQWZ0
ZXIoKTsKLSAgICBpbnQmIG1hcmdpbkJlZm9yZUFsaWFzID0gaXNIb3Jpem9udGFsID8gKGlzRmxp
cHBlZCA/IG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5Ub3ApIDogKGlzRmxpcHBlZCA/IG1fbWFy
Z2luUmlnaHQ6IG1fbWFyZ2luTGVmdCk7Ci0gICAgaW50JiBtYXJnaW5BZnRlckFsaWFzID0gaXNI
b3Jpem9udGFsID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDog
KGlzRmxpcHBlZCA/IG1fbWFyZ2luTGVmdDogbV9tYXJnaW5SaWdodCk7CisgICAgTGF5b3V0VW5p
dCYgbWFyZ2luQmVmb3JlQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJn
aW5Cb3R0b20gOiBtX21hcmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDogbV9t
YXJnaW5MZWZ0KTsKKyAgICBMYXlvdXRVbml0JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jpem9u
dGFsID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlzRmxp
cHBlZCA/IG1fbWFyZ2luTGVmdDogbV9tYXJnaW5SaWdodCk7CiAKICAgICBMZW5ndGggbG9naWNh
bFRvcCA9IHN0eWxlKCktPmxvZ2ljYWxUb3AoKTsKICAgICBMZW5ndGggbG9naWNhbEJvdHRvbSA9
IHN0eWxlKCktPmxvZ2ljYWxCb3R0b20oKTsKQEAgLTI1OTMsOCArMjU5Nyw4IEBAIHZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyBDYWxjdWxhdGUgdGhlIHN0
YXRpYyBkaXN0YW5jZSBpZiBuZWVkZWQuCiAgICAgY29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2Uo
bG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSwgdGhpcywgY29udGFpbmVyQmxvY2spOwogCi0gICAg
aW50IGxvZ2ljYWxIZWlnaHRSZXN1bHQ7IC8vIE5lZWRlZCB0byBjb21wdXRlIG92ZXJmbG93Lgot
ICAgIGludCBsb2dpY2FsVG9wUG9zOworICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodFJlc3Vs
dDsgLy8gTmVlZGVkIHRvIGNvbXB1dGUgb3ZlcmZsb3cuCisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wUG9zOwogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZv
ciAnaGVpZ2h0JyBjYXNlLgogICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5n
KHN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2lj
YWxIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKQEAgLTI2MDcsMTAgKzI2MTEsMTAgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogCiAgICAgLy8gQ2FsY3VsYXRl
IGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnbWF4LWhlaWdodCcgY2FzZS4KICAgICBp
ZiAoIXN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IGludCBtYXhMb2dpY2FsSGVpZ2h0OwotICAgICAgICBpbnQgbWF4TWFyZ2luQmVmb3JlOwotICAg
ICAgICBpbnQgbWF4TWFyZ2luQWZ0ZXI7Ci0gICAgICAgIGludCBtYXhMb2dpY2FsVG9wUG9zOwor
ICAgICAgICBMYXlvdXRVbml0IG1heExvZ2ljYWxIZWlnaHQ7CisgICAgICAgIExheW91dFVuaXQg
bWF4TWFyZ2luQmVmb3JlOworICAgICAgICBMYXlvdXRVbml0IG1heE1hcmdpbkFmdGVyOworICAg
ICAgICBMYXlvdXRVbml0IG1heExvZ2ljYWxUb3BQb3M7CiAKICAgICAgICAgY29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpLCBjb250
YWluZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wLCBs
b2dpY2FsQm90dG9tLCBtYXJnaW5CZWZvcmUsIG1hcmdpbkFmdGVyLApAQCAtMjYyNiwxMCArMjYz
MCwxMCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAKICAgICAv
LyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4taGVpZ2h0JyBj
YXNlLgogICAgIGlmICghc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzWmVybygpKSB7Ci0g
ICAgICAgIGludCBtaW5Mb2dpY2FsSGVpZ2h0OwotICAgICAgICBpbnQgbWluTWFyZ2luQmVmb3Jl
OwotICAgICAgICBpbnQgbWluTWFyZ2luQWZ0ZXI7Ci0gICAgICAgIGludCBtaW5Mb2dpY2FsVG9w
UG9zOworICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxIZWlnaHQ7CisgICAgICAgIExheW91
dFVuaXQgbWluTWFyZ2luQmVmb3JlOworICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVy
OworICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxUb3BQb3M7CiAKICAgICAgICAgY29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgp
LCBjb250YWluZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCwgYm9yZGVyc1BsdXNQYWRk
aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2Fs
VG9wLCBsb2dpY2FsQm90dG9tLCBtYXJnaW5CZWZvcmUsIG1hcmdpbkFmdGVyLApAQCAtMjY0Nyw3
ICsyNjUxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAg
IHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodFJlc3VsdCArIGJvcmRlcnNQbHVzUGFkZGlu
Zyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsVG9wUG9zaXRpb25lZE9mZnNldChp
bnQmIGxvZ2ljYWxUb3BQb3MsIGNvbnN0IFJlbmRlckJveCogY2hpbGQsIGludCBsb2dpY2FsSGVp
Z2h0VmFsdWUsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgaW50
IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpCitzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbFRvcFBv
c2l0aW9uZWRPZmZzZXQoTGF5b3V0VW5pdCYgbG9naWNhbFRvcFBvcywgY29uc3QgUmVuZGVyQm94
KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0VmFsdWUsIGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsSGVp
Z2h0KQogewogICAgIC8vIERlYWwgd2l0aCBkaWZmZXJpbmcgd3JpdGluZyBtb2RlcyBoZXJlLiAg
T3VyIG9mZnNldCBuZWVkcyB0byBiZSBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5h
dGUgc3BhY2UuIElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZsaXBwZWQKICAgICAvLyBhbG9u
ZyB0aGlzIGF4aXMsIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBjb29yZGluYXRlLiAgVGhpcyBj
YW4gb25seSBoYXBwZW4gaWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgYm90aCBhIGZsaXBwZWQg
bW9kZSBhbmQgcGVycGVuZGljdWxhciB0byB1cy4KQEAgLTI2NzAsMTcgKzI2NzQsMTcgQEAgc3Rh
dGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkTwogfQogCiB2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGxvZ2ljYWxIZWln
aHRMZW5ndGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29u
dGFpbmVyTG9naWNhbEhlaWdodCwgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRh
aW5lckxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dp
Y2FsVG9wLCBMZW5ndGggbG9naWNhbEJvdHRvbSwgTGVuZ3RoIG1hcmdpbkJlZm9yZSwgTGVuZ3Ro
IG1hcmdpbkFmdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCYgbG9naWNhbEhlaWdodFZhbHVlLCBpbnQmIG1hcmdpbkJlZm9yZVZhbHVl
LCBpbnQmIG1hcmdpbkFmdGVyVmFsdWUsIGludCYgbG9naWNhbFRvcFBvcykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0JiBsb2dp
Y2FsSGVpZ2h0VmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkJlZm9yZVZhbHVlLCBMYXlvdXRVbml0
JiBtYXJnaW5BZnRlclZhbHVlLCBMYXlvdXRVbml0JiBsb2dpY2FsVG9wUG9zKQogewogICAgIC8v
ICd0b3AnIGFuZCAnYm90dG9tJyBjYW5ub3QgYm90aCBiZSAnYXV0bycgYmVjYXVzZSAndG9wIHdv
dWxkIG9mIGJlZW4KICAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBpbiBj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQogICAgIEFTU0VSVCghKGxvZ2ljYWxUb3Au
aXNBdXRvKCkgJiYgbG9naWNhbEJvdHRvbS5pc0F1dG8oKSkpOwogCi0gICAgaW50IGNvbnRlbnRM
b2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAg
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCkgLSBib3Jk
ZXJzUGx1c1BhZGRpbmc7CiAKLSAgICBpbnQgbG9naWNhbFRvcFZhbHVlID0gMDsKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3BWYWx1ZSA9IDA7CiAKICAgICBib29sIGxvZ2ljYWxIZWlnaHRJc0F1
dG8gPSBsb2dpY2FsSGVpZ2h0TGVuZ3RoLmlzQXV0bygpOwogICAgIGJvb2wgbG9naWNhbFRvcElz
QXV0byA9IGxvZ2ljYWxUb3AuaXNBdXRvKCk7CkBAIC0yNzA3LDcgKzI3MTEsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIGxvZ2ljYWxIZWlnaHRW
YWx1ZSA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0TGVuZ3Ro
LmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgIGxvZ2ljYWxUb3BW
YWx1ZSA9IGxvZ2ljYWxUb3AuY2FsY1ZhbHVlKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpOwogCi0g
ICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQg
LSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEhlaWdodFZhbHVlICsgbG9naWNhbEJvdHRvbS5j
YWxjVmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdodCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwor
ICAgICAgICBjb25zdCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNh
bEhlaWdodCAtIChsb2dpY2FsVG9wVmFsdWUgKyBsb2dpY2FsSGVpZ2h0VmFsdWUgKyBsb2dpY2Fs
Qm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSArIGJvcmRlcnNQbHVzUGFk
ZGluZyk7CiAKICAgICAgICAgLy8gTWFyZ2lucyBhcmUgbm93IHRoZSBvbmx5IHVua25vd24KICAg
ICAgICAgaWYgKG1hcmdpbkJlZm9yZS5pc0F1dG8oKSAmJiBtYXJnaW5BZnRlci5pc0F1dG8oKSkg
ewpAQCAtMjc1OCw3ICsyNzYyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVk
TG9naWNhbAogICAgICAgICBtYXJnaW5CZWZvcmVWYWx1ZSA9IG1hcmdpbkJlZm9yZS5jYWxjTWlu
VmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdodCk7CiAgICAgICAgIG1hcmdpbkFmdGVyVmFsdWUg
PSBtYXJnaW5BZnRlci5jYWxjTWluVmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdodCk7CiAKLSAg
ICAgICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyTG9naWNhbEhlaWdodCAt
IChtYXJnaW5CZWZvcmVWYWx1ZSArIG1hcmdpbkFmdGVyVmFsdWUgKyBib3JkZXJzUGx1c1BhZGRp
bmcpOworICAgICAgICBjb25zdCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVy
TG9naWNhbEhlaWdodCAtIChtYXJnaW5CZWZvcmVWYWx1ZSArIG1hcmdpbkFmdGVyVmFsdWUgKyBi
b3JkZXJzUGx1c1BhZGRpbmcpOwogCiAgICAgICAgIC8vIFVzZSBydWxlL2Nhc2UgdGhhdCBhcHBs
aWVzLgogICAgICAgICBpZiAobG9naWNhbFRvcElzQXV0byAmJiBsb2dpY2FsSGVpZ2h0SXNBdXRv
ICYmICFsb2dpY2FsQm90dG9tSXNBdXRvKSB7CkBAIC0yNzc2LDcgKzI3ODAsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICAgIH0gZWxzZSBpZiAoIWxv
Z2ljYWxUb3BJc0F1dG8gJiYgbG9naWNhbEhlaWdodElzQXV0byAmJiAhbG9naWNhbEJvdHRvbUlz
QXV0bykgewogICAgICAgICAgICAgLy8gUlVMRSA1OiAoc29sdmUgb2YgaGVpZ2h0KQogICAgICAg
ICAgICAgbG9naWNhbFRvcFZhbHVlID0gbG9naWNhbFRvcC5jYWxjVmFsdWUoY29udGFpbmVyTG9n
aWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBsb2dpY2FsSGVpZ2h0VmFsdWUgPSBtYXgoMCwgYXZh
aWxhYmxlU3BhY2UgLSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUo
Y29udGFpbmVyTG9naWNhbEhlaWdodCkpKTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHRWYWx1
ZSA9IG1heDxMYXlvdXRVbml0PigwLCBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsVG9wVmFsdWUg
KyBsb2dpY2FsQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSkpOwogICAg
ICAgICB9IGVsc2UgaWYgKCFsb2dpY2FsVG9wSXNBdXRvICYmICFsb2dpY2FsSGVpZ2h0SXNBdXRv
ICYmIGxvZ2ljYWxCb3R0b21Jc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgNjogKG5vIG5l
ZWQgc29sdmUgb2YgYm90dG9tKQogICAgICAgICAgICAgbG9naWNhbEhlaWdodFZhbHVlID0gY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHRMZW5ndGguY2FsY1ZhbHVl
KGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpKTsKQEAgLTI4MDEsNyArMjgwNSw3IEBAIHZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAvLyByZWxhdGl2ZSBwb3NpdGlv
bmVkIGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxv
Y2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAotICAgIGNvbnN0IGlu
dCBjb250YWluZXJMb2dpY2FsV2lkdGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQ
b3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrKTsKKyAgICBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQo
Y29udGFpbmVyQmxvY2spOwogCiAgICAgLy8gVG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2Rl
IHVzZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9m
IHRoZSB0aGUgY29udGFpbmVyIGJsb2NrJ3MuCkBAIC0yODEzLDggKzI4MTcsOCBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgTGVuZ3RoIGxvZ2ljYWxSaWdo
dCA9IHN0eWxlKCktPmxvZ2ljYWxSaWdodCgpOwogICAgIExlbmd0aCBtYXJnaW5Mb2dpY2FsTGVm
dCA9IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCktPm1hcmdpbkxlZnQoKSA6IHN0eWxlKCktPm1hcmdp
blRvcCgpOwogICAgIExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQgPSBpc0hvcml6b250YWwgPyBz
dHlsZSgpLT5tYXJnaW5SaWdodCgpIDogc3R5bGUoKS0+bWFyZ2luQm90dG9tKCk7Ci0gICAgaW50
JiBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFsID8gbV9tYXJnaW5MZWZ0IDog
bV9tYXJnaW5Ub3A7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGlzSG9yaXpv
bnRhbCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsKKyAgICBMYXlvdXRVbml0JiBt
YXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFsID8gbV9tYXJnaW5MZWZ0IDogbV9t
YXJnaW5Ub3A7CisgICAgTGF5b3V0VW5pdCYgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXMgPSBpc0hv
cml6b250YWwgPyBtX21hcmdpblJpZ2h0IDogbV9tYXJnaW5Cb3R0b207CiAKICAgICAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKlwKICAgICAgKiAxLiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVy
bWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZApAQCAtMjgyNCw3ICsyODI4LDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIC8vIGFyZSBkZWFsdCB3aXRo
IGluIGNvbXB1dGVSZXBsYWNlZFdpZHRoKCkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0ZXBzIHRv
IHByb2R1Y2UKICAgICAvLyBjb3JyZWN0IG1heC9taW4gaW4gdGhlIG5vbi1yZXBsYWNlZCB2ZXJz
aW9uLCBhcmUgbm90IG5lY2Vzc2FyeS4KICAgICBzZXRMb2dpY2FsV2lkdGgoY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoKCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkpOwotICAg
IGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtIGxvZ2lj
YWxXaWR0aCgpOworICAgIGNvbnN0IExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWlu
ZXJMb2dpY2FsV2lkdGggLSBsb2dpY2FsV2lkdGgoKTsKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
XAogICAgICAqIDIuIElmIGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGhhdmUgdGhlIHZhbHVlICdh
dXRvJywgdGhlbiBpZiAnZGlyZWN0aW9uJwpAQCAtMjg1Myw4ICsyODU3LDggQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAqICAgICgncnRsJyksIHNldCAn
bWFyZ2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQgc29sdmUgZm9yCiAgICAg
ICogICAgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLgogICAgIFwqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwotICAgIGludCBsb2dpY2FsTGVmdFZhbHVlID0gMDsKLSAgICBpbnQgbG9naWNhbFJpZ2h0
VmFsdWUgPSAwOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRWYWx1ZSA9IDA7CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsUmlnaHRWYWx1ZSA9IDA7CiAKICAgICBpZiAobWFyZ2luTG9naWNhbExl
ZnQuaXNBdXRvKCkgJiYgbWFyZ2luTG9naWNhbFJpZ2h0LmlzQXV0bygpKSB7CiAgICAgICAgIC8v
ICdsZWZ0JyBhbmQgJ3JpZ2h0JyBjYW5ub3QgYmUgJ2F1dG8nIGR1ZSB0byBzdGVwIDMKQEAgLTI4
NjMsNyArMjg2Nyw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwK
ICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IGxvZ2ljYWxMZWZ0LmNhbGNWYWx1ZShjb250YWlu
ZXJMb2dpY2FsV2lkdGgpOwogICAgICAgICBsb2dpY2FsUmlnaHRWYWx1ZSA9IGxvZ2ljYWxSaWdo
dC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsKIAotICAgICAgICBpbnQgZGlmZmVy
ZW5jZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRW
YWx1ZSk7CisgICAgICAgIExheW91dFVuaXQgZGlmZmVyZW5jZSA9IGF2YWlsYWJsZVNwYWNlIC0g
KGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSk7CiAgICAgICAgIGlmIChkaWZm
ZXJlbmNlID4gMCkgewogICAgICAgICAgICAgbWFyZ2luTG9naWNhbExlZnRBbGlhcyA9IGRpZmZl
cmVuY2UgLyAyOyAvLyBzcGxpdCB0aGUgZGlmZmVyZW5jZQogICAgICAgICAgICAgbWFyZ2luTG9n
aWNhbFJpZ2h0QWxpYXMgPSBkaWZmZXJlbmNlIC0gbWFyZ2luTG9naWNhbExlZnRBbGlhczsgLy8g
YWNjb3VudCBmb3Igb2RkIHZhbHVlZCBkaWZmZXJlbmNlcwpAQCAtMjkyNiw3ICsyOTMwLDcgQEAg
dm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIFwqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogICAgIC8vIE5PVEU6ICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNvbHZlIGZvciAn
cmlnaHQnIHdoZW4gdGhlIGRpcmVjdGlvbiBpcwogICAgIC8vIExUUiBiZWNhdXNlIHRoZSB2YWx1
ZSBpcyBub3QgdXNlZC4KLSAgICBpbnQgdG90YWxMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGgo
KSArIGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSArICBtYXJnaW5Mb2dpY2Fs
TGVmdEFsaWFzICsgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXM7CisgICAgTGF5b3V0VW5pdCB0b3Rh
bExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpICsgbG9naWNhbExlZnRWYWx1ZSArIGxvZ2lj
YWxSaWdodFZhbHVlICsgIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXMgKyBtYXJnaW5Mb2dpY2FsUmln
aHRBbGlhczsKICAgICBpZiAodG90YWxMb2dpY2FsV2lkdGggPiBjb250YWluZXJMb2dpY2FsV2lk
dGggJiYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBSVEwpKQogICAgICAgICBsb2dpY2FsTGVmdFZh
bHVlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKHRvdGFsTG9naWNhbFdpZHRoIC0gbG9naWNh
bExlZnRWYWx1ZSk7CiAKQEAgLTI5NDksNyArMjk1Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgfQogICAgIH0KIAotICAgIGludCBsb2dpY2Fs
TGVmdFBvcyA9IGxvZ2ljYWxMZWZ0VmFsdWUgKyBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzOworICAg
IExheW91dFVuaXQgbG9naWNhbExlZnRQb3MgPSBsb2dpY2FsTGVmdFZhbHVlICsgbWFyZ2luTG9n
aWNhbExlZnRBbGlhczsKICAgICBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zmc2V0KGxv
Z2ljYWxMZWZ0UG9zLCB0aGlzLCBsb2dpY2FsV2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRh
aW5lckxvZ2ljYWxXaWR0aCk7ICAgIAogICAgIHNldExvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0UG9z
KTsKIH0KQEAgLTI5NjUsMTUgKzI5NjksMTUgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbAogICAgIC8vIFdlIGRvbid0IHVzZSBjb250YWluaW5nQmxvY2soKSwgc2lu
Y2Ugd2UgbWF5IGJlIHBvc2l0aW9uZWQgYnkgYW4gZW5jbG9zaW5nIHJlbHBvc2l0aW9uZWQgaW5s
aW5lLgogICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jayA9IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyKCkpOwogCi0gICAgY29uc3QgaW50IGNvbnRh
aW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRp
b25lZChjb250YWluZXJCbG9jayk7CisgICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dp
Y2FsSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29u
dGFpbmVyQmxvY2spOwogCiAgICAgLy8gVmFyaWFibGVzIHRvIHNvbHZlLgogICAgIGJvb2wgaXNI
b3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBib29sIGlzRmxpcHBl
ZCA9IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CiAgICAgTGVuZ3RoIG1h
cmdpbkJlZm9yZSA9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpOwogICAgIExlbmd0aCBtYXJnaW5B
ZnRlciA9IHN0eWxlKCktPm1hcmdpbkFmdGVyKCk7Ci0gICAgaW50JiBtYXJnaW5CZWZvcmVBbGlh
cyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2lu
VG9wKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpblJpZ2h0OiBtX21hcmdpbkxlZnQpOwotICAgIGlu
dCYgbWFyZ2luQWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdp
blRvcCA6IG1fbWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpbkxlZnQ6IG1fbWFy
Z2luUmlnaHQpOworICAgIExheW91dFVuaXQmIG1hcmdpbkJlZm9yZUFsaWFzID0gaXNIb3Jpem9u
dGFsID8gKGlzRmxpcHBlZCA/IG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5Ub3ApIDogKGlzRmxp
cHBlZCA/IG1fbWFyZ2luUmlnaHQ6IG1fbWFyZ2luTGVmdCk7CisgICAgTGF5b3V0VW5pdCYgbWFy
Z2luQWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpblRvcCA6
IG1fbWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpbkxlZnQ6IG1fbWFyZ2luUmln
aHQpOwogCiAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AgPSBzdHlsZSgpLT5sb2dpY2FsVG9wKCk7CiAg
ICAgTGVuZ3RoIGxvZ2ljYWxCb3R0b20gPSBzdHlsZSgpLT5sb2dpY2FsQm90dG9tKCk7CkBAIC0y
OTg2LDcgKzI5OTAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2Fs
CiAgICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY29tcHV0ZVJlcGxhY2VkSGVpZ2h0KCkuICBUaGlz
IG1lYW5zIHRoYXQgdGhlIHN0ZXBzIHRvIHByb2R1Y2UKICAgICAvLyBjb3JyZWN0IG1heC9taW4g
aW4gdGhlIG5vbi1yZXBsYWNlZCB2ZXJzaW9uLCBhcmUgbm90IG5lY2Vzc2FyeS4KICAgICBzZXRM
b2dpY2FsSGVpZ2h0KGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSArIGJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsSGVpZ2h0KCkpOwotICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQgLSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgY29uc3QgTGF5b3V0
VW5pdCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSBsb2dpY2FsSGVp
Z2h0KCk7CiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKICAgICAgKiAyLiBJZiBib3RoICd0b3An
IGFuZCAnYm90dG9tJyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycsIHJlcGxhY2UgJ3RvcCcKQEAgLTMw
MTMsOCArMzAxNyw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwK
ICAgICAgKiAgICAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29u
c3RyYWludCB0aGF0IHRoZSB0d28KICAgICAgKiAgICBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZh
bHVlcy4KICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICBpbnQgbG9naWNhbFRvcFZhbHVlID0g
MDsKLSAgICBpbnQgbG9naWNhbEJvdHRvbVZhbHVlID0gMDsKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxUb3BWYWx1ZSA9IDA7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tVmFsdWUgPSAwOwog
CiAgICAgaWYgKG1hcmdpbkJlZm9yZS5pc0F1dG8oKSAmJiBtYXJnaW5BZnRlci5pc0F1dG8oKSkg
ewogICAgICAgICAvLyAndG9wJyBhbmQgJ2JvdHRvbScgY2Fubm90IGJlICdhdXRvJyBkdWUgdG8g
c3RlcCAyIGFuZCAzIGNvbWJpbmVkLgpAQCAtMzAyMyw3ICszMDI3LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgICAgICBsb2dpY2FsVG9wVmFsdWUgPSBs
b2dpY2FsVG9wLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgbG9n
aWNhbEJvdHRvbVZhbHVlID0gbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNh
bEhlaWdodCk7CiAKLSAgICAgICAgaW50IGRpZmZlcmVuY2UgPSBhdmFpbGFibGVTcGFjZSAtIChs
b2dpY2FsVG9wVmFsdWUgKyBsb2dpY2FsQm90dG9tVmFsdWUpOworICAgICAgICBMYXlvdXRVbml0
IGRpZmZlcmVuY2UgPSBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsVG9wVmFsdWUgKyBsb2dpY2Fs
Qm90dG9tVmFsdWUpOwogICAgICAgICAvLyBOT1RFOiBUaGlzIG1heSByZXN1bHQgaW4gbmVnYXRp
dmUgdmFsdWVzLgogICAgICAgICBtYXJnaW5CZWZvcmVBbGlhcyA9ICBkaWZmZXJlbmNlIC8gMjsg
Ly8gc3BsaXQgdGhlIGRpZmZlcmVuY2UKICAgICAgICAgbWFyZ2luQWZ0ZXJBbGlhcyA9IGRpZmZl
cmVuY2UgLSBtYXJnaW5CZWZvcmVBbGlhczsgLy8gYWNjb3VudCBmb3Igb2RkIHZhbHVlZCBkaWZm
ZXJlbmNlcwpAQCAtMzA3OSwxMiArMzA4MywxMiBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBv
c2l0aW9uZWRMb2dpY2FsCiAgICAgLy8gb3Igbm90LgogCiAgICAgLy8gVXNlIGNvbXB1dGVkIHZh
bHVlcyB0byBjYWxjdWxhdGUgdGhlIHZlcnRpY2FsIHBvc2l0aW9uLgotICAgIGludCBsb2dpY2Fs
VG9wUG9zID0gbG9naWNhbFRvcFZhbHVlICsgbWFyZ2luQmVmb3JlQWxpYXM7CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wUG9zID0gbG9naWNhbFRvcFZhbHVlICsgbWFyZ2luQmVmb3JlQWxpYXM7
CiAgICAgY29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KGxvZ2ljYWxUb3BQb3MsIHRo
aXMsIGxvZ2ljYWxIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxIZWln
aHQpOwogICAgIHNldExvZ2ljYWxUb3AobG9naWNhbFRvcFBvcyk7CiB9CiAKLUludFJlY3QgUmVu
ZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBp
bnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXRz
IGluc2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25zIGJlZm9y
ZS9hZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1l
bnRzKSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJsb2NrLgpA
QCAtMzA5MiwxNSArMzA5NiwxNSBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lCiAgICAgLy8gRklYTUU6IFBhaW50IHRoZSBjYXJldHMgaW5zaWRlIGVtcHR5IGJsb2Nr
cyBkaWZmZXJlbnRseSB0aGFuIHRoZSBjYXJldHMgYmVmb3JlL2FmdGVyIGVsZW1lbnRzLgogCiAg
ICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgYm9yZGVyIGFuZCBwYWRkaW5nPwotICAgIEludFJlY3Qg
cmVjdCh4KCksIHkoKSwgY2FyZXRXaWR0aCwgaGVpZ2h0KCkpOworICAgIExheW91dFJlY3QgcmVj
dCh4KCksIHkoKSwgY2FyZXRXaWR0aCwgaGVpZ2h0KCkpOwogICAgIGJvb2wgbHRyID0gYm94ID8g
Ym94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgOiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7CiAKICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiBsdHIpCi0gICAgICAgIHJlY3Qu
bW92ZShJbnRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwKSk7CisgICAgICAgIHJlY3QubW92
ZShMYXlvdXRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwKSk7CiAKICAgICBpZiAoYm94KSB7
CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKLSAgICAgICAg
aW50IHRvcCA9IHJvb3RCb3gtPmxpbmVUb3AoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBy
b290Qm94LT5saW5lVG9wKCk7CiAgICAgICAgIHJlY3Quc2V0WSh0b3ApOwogICAgICAgICByZWN0
LnNldEhlaWdodChyb290Qm94LT5saW5lQm90dG9tKCkgLSB0b3ApOwogICAgIH0KQEAgLTMxMTMs
NyArMzExNyw3IEBAIEludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vMzc3NzgwND4gRGVsZXRpbmcgYWxsIGNvbnRlbnQgaW4gYSBk
b2N1bWVudCBjYW4gcmVzdWx0IGluIGdpYW50IHRhbGwtYXMtd2luZG93IGluc2VydGlvbiBwb2lu
dAogICAgIC8vCiAgICAgLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJzdC1saW5lLCBtaXNzaW5nIGdv
b2QgcmVhc29uIHRvIHRha2UgY2FyZSBvZgotICAgIGludCBmb250SGVpZ2h0ID0gc3R5bGUoKS0+
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGZvbnRIZWlnaHQgPSBzdHls
ZSgpLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgIGlmIChmb250SGVpZ2h0ID4gcmVjdC5o
ZWlnaHQoKSB8fCAoIWlzUmVwbGFjZWQoKSAmJiAhaXNUYWJsZSgpKSkKICAgICAgICAgcmVjdC5z
ZXRIZWlnaHQoZm9udEhlaWdodCk7CiAKQEAgLTMzMTksMTcgKzMzMjMsMTcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNsZWFyTGF5b3V0T3ZlcmZsb3coKQogICAgIG1fb3ZlcmZsb3ctPnJlc2V0TGF5b3V0
T3ZlcmZsb3coYm9yZGVyQm94UmVjdCgpKTsKIH0KIAotaW50IFJlbmRlckJveDo6bGluZUhlaWdo
dChib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBv
c2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVy
Qm94OjpsaW5lSGVpZ2h0KGJvb2wgLypmaXJzdExpbmUqLywgTGluZURpcmVjdGlvbk1vZGUgZGly
ZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAogewog
ICAgIGlmIChpc1JlcGxhY2VkKCkpCiAgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gSG9yaXpv
bnRhbExpbmUgPyBtX21hcmdpblRvcCArIGhlaWdodCgpICsgbV9tYXJnaW5Cb3R0b20gOiBtX21h
cmdpblJpZ2h0ICsgd2lkdGgoKSArIG1fbWFyZ2luTGVmdDsKICAgICByZXR1cm4gMDsKIH0KIAot
aW50IFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBl
LCBib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBv
c2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVy
Qm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgLypm
aXJzdExpbmUqLywgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2Rl
IC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAogewogICAgIGlmIChpc1JlcGxhY2VkKCkpIHsK
LSAgICAgICAgaW50IHJlc3VsdCA9IGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IG1fbWFy
Z2luVG9wICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0
aCgpICsgbV9tYXJnaW5MZWZ0OworICAgICAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGRpcmVjdGlv
biA9PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2luVG9wICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJv
dHRvbSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0aCgpICsgbV9tYXJnaW5MZWZ0OwogICAgICAgICBp
ZiAoYmFzZWxpbmVUeXBlID09IEFscGhhYmV0aWNCYXNlbGluZSkKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQgLSByZXN1bHQgLyAyOwpAQCAtMzM1MCwx
OSArMzM1NCwxOSBAQCBSZW5kZXJMYXllciogUmVuZGVyQm94OjplbmNsb3NpbmdGbG9hdFBhCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94Ojpsb2dpY2FsVmlzdWFsT3ZlcmZs
b3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5
b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZWN0ID0g
dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOworICAgIExheW91
dFJlY3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxl
KTsKICAgICBpZiAoIXBhcmVudFN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAg
ICAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogICAgIHJldHVybiByZWN0OwogfQog
Ci1JbnRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnZpc3Vh
bE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29u
c3QKIHsKICAgICAvLyBJZiB0aGUgd3JpdGluZyBtb2RlcyBvZiB0aGUgY2hpbGQgYW5kIHBhcmVu
dCBtYXRjaCwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIAogICAgIC8vIGRvIGFueXRoaW5nIGZhbmN5
LiBKdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIEludFJlY3QgcmVjdCA9IHZpc3VhbE92ZXJm
bG93UmVjdCgpOworICAgIExheW91dFJlY3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwog
ICAgIGlmIChwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBzdHlsZSgpLT53cml0aW5nTW9k
ZSgpKQogICAgICAgICByZXR1cm4gcmVjdDsKICAgICAKQEAgLTMzNzYsMTggKzMzODAsMTggQEAg
SW50UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdEZvcgogICAgIHJldHVybiByZWN0
OwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclBy
b3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVu
ZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewotICAgIEludFJlY3QgcmVjdCA9IGxheW91dE92ZXJm
bG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKKyAgICBMYXlvdXRSZWN0IHJlY3Qg
PSBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihwYXJlbnRTdHlsZSk7CiAgICAgaWYg
KCFwYXJlbnRTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJu
IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBS
ZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAg
Ly8gT25seSBwcm9wYWdhdGUgaW50ZXJpb3IgbGF5b3V0IG92ZXJmbG93IGlmIHdlIGRvbid0IGNs
aXAgaXQuCi0gICAgSW50UmVjdCByZWN0ID0gYm9yZGVyQm94UmVjdCgpOworICAgIExheW91dFJl
Y3QgcmVjdCA9IGJvcmRlckJveFJlY3QoKTsKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQog
ICAgICAgICByZWN0LnVuaXRlKGxheW91dE92ZXJmbG93UmVjdCgpKTsKIApAQCAtMzQ5MiwxNSAr
MzQ5NiwxNSBAQCB2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0CiAgICAg
ICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogfQogCi1JbnRTaXplIFJlbmRl
ckJveDo6bG9jYXRpb25PZmZzZXRJbmNsdWRpbmdGbGlwcGluZygpIGNvbnN0CitMYXlvdXRTaXpl
IFJlbmRlckJveDo6bG9jYXRpb25PZmZzZXRJbmNsdWRpbmdGbGlwcGluZygpIGNvbnN0CiB7CiAg
ICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lckJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAg
aWYgKCFjb250YWluZXJCbG9jayB8fCBjb250YWluZXJCbG9jayA9PSB0aGlzKQogICAgICAgICBy
ZXR1cm4gbG9jYXRpb25PZmZzZXQoKTsKICAgICAKLSAgICBJbnRSZWN0IHJlY3QoZnJhbWVSZWN0
KCkpOworICAgIExheW91dFJlY3QgcmVjdChmcmFtZVJlY3QoKSk7CiAgICAgY29udGFpbmVyQmxv
Y2stPmZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYg
d2UgYXJlIGFuIGFic29sdXRlbHkgcG9zaXRpb25lZCBvYmplY3QgZW5jbG9zZWQgYnkgYSByZWxh
dGl2ZS1wb3NpdGlvbmVkIGlubGluZS4KLSAgICByZXR1cm4gSW50U2l6ZShyZWN0LngoKSwgcmVj
dC55KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKHJlY3QueCgpLCByZWN0LnkoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHJldmlzaW9uIDkzMjMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIEZs
b2F0UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3Q7CiAKICAgICAvLyBCb3VuZHMgb2Yg
dGhlIG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3Jtcwot
ICAgIHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIEludFBvaW50KiBjYWNoZWRPZmZzZXRUb1Jl
cGFpbnRDb250YWluZXIpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91
bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8s
IExheW91dFBvaW50KiBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0eXBl
IGNoZWNraW5nIGlzIGRvbmUhCkBAIC0xOTIsMTIgKzE5MiwxMiBAQCBwdWJsaWM6CiAgICAgLy8g
c2Nyb2xsTGVmdC9Ub3AgcmV0dXJuIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gIFRoZXNl
IG1ldGhvZHMgYXJlIHZpcnR1YWwgc28gdGhhdCBvYmplY3RzIGxpa2UKICAgICAvLyB0ZXh0YXJl
YXMgY2FuIHNjcm9sbCBzaGFkb3cgY29udGVudCAoYnV0IHByZXRlbmQgdGhhdCB0aGV5IGFyZSB0
aGUgb2JqZWN0cyB0aGF0IGFyZQogICAgIC8vIHNjcm9sbGluZykuCi0gICAgdmlydHVhbCBpbnQg
c2Nyb2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Ny
b2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7CisgICAgdmlydHVhbCBMYXlvdXRV
bml0IHNjcm9sbExlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsVG9w
KCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbFdpZHRoKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxMZWZ0KExheW91dFVuaXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3Jv
bGxUb3AoTGF5b3V0VW5pdCk7CiAKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWFyZ2luVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXJnaW5Ub3A7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWFy
Z2luQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5Cb3R0b207IH0KQEAgLTIzMyw3ICsy
MzMsNyBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCByZWZsZWN0aW9uQm94KCkgY29uc3Q7CiAgICAg
aW50IHJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdDsKICAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhl
IG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVj
dCBpbiB0aGUgcmVmbGVjdGlvbi4KLSAgICBJbnRSZWN0IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50
UmVjdCYpIGNvbnN0OworICAgIExheW91dFJlY3QgcmVmbGVjdGVkUmVjdChjb25zdCBMYXlvdXRS
ZWN0JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CkBAIC0yNTUsNyArMjU1
LDcgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoTGF5b3V0VW5pdCB3aWR0aCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlQ29udGVu
dEJveExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB2b2lkIGJvcmRlckZpdEFkanVzdChJbnRSZWN0JikgY29uc3QgeyB9IC8vIFNocmluayB0aGUg
Ym94IGluIHdoaWNoIHRoZSBib3JkZXIgcGFpbnRzIGlmIGJvcmRlci1maXQgaXMgc2V0LgorICAg
IHZpcnR1YWwgdm9pZCBib3JkZXJGaXRBZGp1c3QoTGF5b3V0UmVjdCYpIGNvbnN0IHsgfSAvLyBT
aHJpbmsgdGhlIGJveCBpbiB3aGljaCB0aGUgYm9yZGVyIHBhaW50cyBpZiBib3JkZXItZml0IGlz
IHNldC4KIAogICAgIC8vIFJlc29sdmUgYXV0byBtYXJnaW5zIGluIHRoZSBpbmxpbmUgZGlyZWN0
aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcHVzaGVk
IHRvIHRoZSBzdGFydCwgbWlkZGxlIG9yIGVuZAogICAgIC8vIG9mIHRoZSBjb250YWluaW5nIGJs
b2NrLgpAQCAtMjc2LDEzICsyNzYsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5saW5lQm94
V3JhcHBlcihJbmxpbmVCb3gqIGJveFdyYXBwZXIpIHsgbV9pbmxpbmVCb3hXcmFwcGVyID0gYm94
V3JhcHBlcjsgfQogICAgIHZvaWQgZGVsZXRlTGluZUJveFdyYXBwZXIoKTsKIAotICAgIHZpcnR1
YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50
UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0
IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBh
aW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0Jiwg
Ym9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50RHVy
aW5nTGF5b3V0SWZNb3ZlZChjb25zdCBMYXlvdXRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGludCBj
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29uc3Q7Ci0gICAgaW50IHBl
cnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBj
b25zdDsKKyAgICBMYXlvdXRVbml0IHBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsV2lk
dGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKQEAgLTI5Miw5
ICsyOTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBkb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKSAmJiBzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgIWlzRmxvYXRpbmdP
clBvc2l0aW9uZWQoKSAmJiAoaXNSb290KCkgfHwgaXNCb2R5KCkpOwogICAgIH0KIAotICAgIHZp
cnR1YWwgSW50U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgpOyB9
Ci0gICAgaW50IGludHJpbnNpY0xvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCkud2lkdGgoKSA6IGlu
dHJpbnNpY1NpemUoKS5oZWlnaHQoKTsgfQotICAgIGludCBpbnRyaW5zaWNMb2dpY2FsSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGlu
dHJpbnNpY1NpemUoKS5oZWlnaHQoKSA6IGludHJpbnNpY1NpemUoKS53aWR0aCgpOyB9CisgICAg
dmlydHVhbCBMYXlvdXRTaXplIGludHJpbnNpY1NpemUoKSBjb25zdCB7IHJldHVybiBMYXlvdXRT
aXplKCk7IH0KKyAgICBMYXlvdXRVbml0IGludHJpbnNpY0xvZ2ljYWxXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXpl
KCkud2lkdGgoKSA6IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQg
aW50cmluc2ljTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCkgOiBpbnRyaW5zaWNT
aXplKCkud2lkdGgoKTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hy
aW5rcyB0byBpdHMgaW50cmluc2ljIHdpZHRoIChyYXRoZXIgdGhhbiBmaWxsaW5nIHRoZSB3aWR0
aAogICAgIC8vIG9mIGEgY29udGFpbmluZyBibG9jaykuICBIVE1MNCBidXR0b25zLCA8c2VsZWN0
PnMsIDxpbnB1dD5zLCBsZWdlbmRzLCBhbmQgZmxvYXRpbmcvY29tcGFjdCBlbGVtZW50cyBkbyB0
aGlzLgpAQCAtMzIzLDkgKzMyMyw5IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGF2YWlsYWJs
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpIDogYXZhaWxhYmxlTG9naWNhbEhlaWdodCgpOyB9
CiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYXZhaWxhYmxlTG9naWNhbEhlaWdodCgpIDog
YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7IH0KIAotICAgIHZpcnR1YWwgaW50IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgp
IGNvbnN0OwotICAgIGludCBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQoKSA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzY3JvbGxiYXJM
b2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDAp
OwogICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2Rl
ID0gMCk7CiAgICAgYm9vbCBjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSBjb25z
dDsKQEAgLTMzOSwxMiArMzM5LDEyIEBAIHB1YmxpYzoKICAgICBib29sIHNjcm9sbHNPdmVyZmxv
d1goKSBjb25zdCB7IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiAoc3R5bGUoKS0+b3ZlcmZs
b3dYKCkgPT0gT1NDUk9MTCB8fCBoYXNBdXRvSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsgfQogICAg
IGJvb2wgc2Nyb2xsc092ZXJmbG93WSgpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgp
ICYmIChzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMIHx8IGhhc0F1dG9WZXJ0aWNhbFNj
cm9sbGJhcigpKTsgfQogICAgIAotICAgIHZpcnR1YWwgSW50UmVjdCBsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0g
MCk7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGlu
dCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAK
LSAgICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBJbnRQb2ludCYgbG9j
YXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUpOwotICAgIEludFJlY3QgY2xpcFJlY3QoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9u
KTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQ
b2ludCYgbG9jYXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUpOworICAgIExheW91dFJlY3QgY2xpcFJlY3QoY29uc3QgTGF5b3V0
UG9pbnQmIGxvY2F0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgSW50UmVjdCBjb250cm9sQ2xpcFJlY3Qo
Y29uc3QgSW50UG9pbnQmKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICB2aXJ0dWFs
IExheW91dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3QgeyBy
ZXR1cm4gTGF5b3V0UmVjdCgpOyB9CiAgICAgYm9vbCBwdXNoQ29udGVudHNDbGlwKFBhaW50SW5m
byYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgdm9pZCBwb3BD
b250ZW50c0NsaXAoUGFpbnRJbmZvJiwgUGFpbnRQaGFzZSBvcmlnaW5hbFBoYXNlLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCkBAIC0zNjYsNyArMzY2LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBJbnRSZWN0IG1hc2tDbGlw
UmVjdCgpOworICAgIExheW91dFJlY3QgbWFza0NsaXBSZWN0KCk7CiAKICAgICB2aXJ0dWFsIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CiAKQEAg
LTM3NCw4ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z0Zsb2F0UGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgaW50IGZpcnN0
TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KLSAgICB2aXJ0dWFsIGludCBs
YXN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAgICB2aXJ0dWFsIExh
eW91dFVuaXQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBsYXN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4g
LTE7IH0KIAogICAgIGJvb2wgc2hyaW5rVG9Bdm9pZEZsb2F0cygpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdDsKQEAgLTM4Niw4ICszODYsOCBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzRGVwcmVjYXRlZEZsZXhJdGVtKCkgY29uc3QgeyByZXR1cm4gIWlzSW5s
aW5lKCkgJiYgIWlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQo
KS0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKTsgfQogICAgIAotICAgIHZpcnR1YWwgaW50IGxp
bmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25N
b2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBi
YXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rp
b25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25z
dDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRC
YXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25N
b2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKIAogICAgIGVudW0gRmxpcHBp
bmdBZGp1c3RtZW50IHsgQ2hpbGRUb1BhcmVudEZsaXBwaW5nQWRqdXN0bWVudCwgUGFyZW50VG9D
aGlsZEZsaXBwaW5nQWRqdXN0bWVudCB9OwogICAgIExheW91dFBvaW50IGZsaXBGb3JXcml0aW5n
TW9kZShjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBMYXlvdXRQb2ludCYsIEZsaXBwaW5n
QWRqdXN0bWVudCkgY29uc3Q7CkBAIC0zOTgsMTIgKzM5OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UmVjdCYpIGNvbnN0OwogICAgIEZsb2F0UG9pbnQgZmxp
cEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGZsaXBG
b3JXcml0aW5nTW9kZShGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBJbnRTaXplIGxvY2F0aW9uT2Zm
c2V0SW5jbHVkaW5nRmxpcHBpbmcoKSBjb25zdDsKKyAgICBMYXlvdXRTaXplIGxvY2F0aW9uT2Zm
c2V0SW5jbHVkaW5nRmxpcHBpbmcoKSBjb25zdDsKIAotICAgIEludFJlY3QgbG9naWNhbFZpc3Vh
bE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgSW50
UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0
OwotICAgIEludFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJl
bmRlclN0eWxlKikgY29uc3Q7Ci0gICAgSW50UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9w
YWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3QgbG9naWNhbFZpc3Vh
bE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5
b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNv
bnN0OworICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgUmVuZGVyT3ZlcmZs
b3cqIGhhc1JlbmRlck92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdy5nZXQoKTsg
fQogCkBAIC00NTAsMTMgKzQ1MCwxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21wdXRlUG9z
aXRpb25lZExvZ2ljYWxIZWlnaHQoKTsKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNh
bFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGNvbnRhaW5lckJsb2NrLCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCwgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgs
IExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMZW5ndGggbG9naWNhbExlZnQsIExlbmd0aCBsb2dpY2FsUmln
aHQsIExlbmd0aCBtYXJnaW5Mb2dpY2FsTGVmdCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxSaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsb2dpY2Fs
V2lkdGhWYWx1ZSwgaW50JiBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlLCBpbnQmIG1hcmdpbkxvZ2lj
YWxSaWdodFZhbHVlLCBpbnQmIGxvZ2ljYWxMZWZ0UG9zKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbFdpZHRoVmFsdWUsIExh
eW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkxvZ2lj
YWxSaWdodFZhbHVlLCBMYXlvdXRVbml0JiBsb2dpY2FsTGVmdFBvcyk7CiAgICAgdm9pZCBjb21w
dXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCwgY29u
c3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQs
IGludCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIExheW91dFVu
aXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AsIExlbmd0aCBsb2dpY2FsQm90dG9tLCBMZW5n
dGggbWFyZ2luTG9naWNhbFRvcCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxCb3R0b20sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxvZ2ljYWxIZWlnaHRW
YWx1ZSwgaW50JiBtYXJnaW5Mb2dpY2FsVG9wVmFsdWUsIGludCYgbWFyZ2luTG9naWNhbEJvdHRv
bVZhbHVlLCBpbnQmIGxvZ2ljYWxUb3BQb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCYgbG9naWNhbEhlaWdodFZhbHVlLCBMYXlvdXRV
bml0JiBtYXJnaW5Mb2dpY2FsVG9wVmFsdWUsIExheW91dFVuaXQmIG1hcmdpbkxvZ2ljYWxCb3R0
b21WYWx1ZSwgTGF5b3V0VW5pdCYgbG9naWNhbFRvcFBvcyk7CiAKICAgICB2b2lkIGNvbXB1dGVQ
b3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKCk7CiAgICAgdm9pZCBjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxXaWR0aFJlcGxhY2VkKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>