<?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>107719</bug_id>
          
          <creation_ts>2013-01-23 12:22:43 -0800</creation_ts>
          <short_desc>[EFL][WK2] Rename EwkViewImpl class to EwkView</short_desc>
          <delta_ts>2013-01-24 08:22:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</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>107662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>benjamin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>naginenis</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>814496</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-23 12:22:43 -0800</bug_when>
    <thetext>SSIA.
The rational behind the renaming is described at https://bugs.webkit.org/show_bug.cgi?id=107662#c1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814557</commentid>
    <comment_count>1</comment_count>
      <attachid>184295</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-23 13:20:20 -0800</bug_when>
    <thetext>Created attachment 184295
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815178</commentid>
    <comment_count>2</comment_count>
      <attachid>184424</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-24 00:31:52 -0800</bug_when>
    <thetext>Created attachment 184424
patch

Added some more renaming inside EwkView (m_view -&gt; m_evasObject)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815181</commentid>
    <comment_count>3</comment_count>
      <attachid>184424</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-24 00:35:38 -0800</bug_when>
    <thetext>Comment on attachment 184424
patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815336</commentid>
    <comment_count>4</comment_count>
      <attachid>184424</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-24 04:46:42 -0800</bug_when>
    <thetext>Comment on attachment 184424
patch

Rejecting attachment 184424 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-04&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 184424, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
ate file /tmp/ppp4abyG : No space left on device
patch: **** Can&apos;t create file /tmp/ppgjwsko : No space left on device
fatal: pathspec &apos;Source/WebKit2/UIProcess/API/efl/EwkView.cpp&apos; did not match any files
Failed to git add Source/WebKit2/UIProcess/API/efl/EwkView.cpp. at /mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply line 448.

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, &apos;Andreas Kling&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/16080641</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815456</commentid>
    <comment_count>5</comment_count>
      <attachid>184424</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-24 07:33:25 -0800</bug_when>
    <thetext>Comment on attachment 184424
patch

Seems like a cq problem, retry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815461</commentid>
    <comment_count>6</comment_count>
      <attachid>184424</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-24 07:45:07 -0800</bug_when>
    <thetext>Comment on attachment 184424
patch

Rejecting attachment 184424 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-04&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 184424, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
ate file /tmp/ppQPaFde : No space left on device
patch: **** Can&apos;t create file /tmp/ppbhK7FJ : No space left on device
fatal: pathspec &apos;Source/WebKit2/UIProcess/API/efl/EwkView.cpp&apos; did not match any files
Failed to git add Source/WebKit2/UIProcess/API/efl/EwkView.cpp. at /mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply line 448.

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, &apos;Andreas Kling&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/16074779</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815499</commentid>
    <comment_count>7</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-24 08:22:50 -0800</bug_when>
    <thetext>Committed r140686: &lt;http://trac.webkit.org/changeset/140686&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184295</attachid>
            <date>2013-01-23 13:20:20 -0800</date>
            <delta_ts>2013-01-24 00:31:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug107719</filename>
            <type>text/plain</type>
            <size>195679</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDAzYTEyZTk5YTE0YjU5OGM2YzdmNjc3ZDZmZjk5NmMwNzdlMzMxYTYKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAyMyAyMzoxNTowNSAyMDEzICswMjAwCgogICAgYnVnMTA3NzE5CgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDVkNjJkOWYuLmU2YTcwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMTkgQEAKKzIwMTMt
MDEtMjMgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV0syXSBSZW5hbWUgRXdrVmlld0ltcGwgY2xhc3MgdG8gRXdrVmll
dworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NzE5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1l
IEV3a1ZpZXdJbXBsIGNsYXNzIHRvIEV3a1ZpZXcsIGR1ZSB0byBld2sgdmlldworICAgICAgICBy
ZWZhY3RvcmluZyBwbGFuIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NjYyI2MxKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0NyZWF0ZSk6Cisg
ICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgorICAgICAgICAoV0tWaWV3R2V0
UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAuCisgICAgICAgIChwYWdlVmlld01hcCk6Cisg
ICAgICAgIChFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFwKToKKyAgICAgICAgKEV3a1ZpZXc6OnJl
bW92ZUZyb21QYWdlVmlld01hcCk6CisgICAgICAgIChFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3
TWFwKToKKyAgICAgICAgKEV3a1ZpZXc6OkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6fkV3
a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6c21hcnREYXRhKToKKyAgICAgICAgKEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KToKKyAgICAgICAgKEV3a1ZpZXc6OndrUGFnZSk6CisgICAgICAgIChF
d2tWaWV3OjpzZXRDdXJzb3IpOgorICAgICAgICAoRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoRXdr
Vmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKToKKyAgICAgICAgKEV3a1ZpZXc6OnRyYW5zZm9ybVRv
U2NlbmUpOgorICAgICAgICAoRXdrVmlldzo6dHJhbnNmb3JtVG9TY3JlZW4pOgorICAgICAgICAo
RXdrVmlldzo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoRXdrVmlldzo6ZGlzcGxheVRp
bWVyRmlyZWQpOgorICAgICAgICAoRXdrVmlldzo6dXBkYXRlKToKKyAgICAgICAgKEV3a1ZpZXc6
OmVudGVyRnVsbFNjcmVlbik6CisgICAgICAgIChFd2tWaWV3OjpleGl0RnVsbFNjcmVlbik6Cisg
ICAgICAgIChFd2tWaWV3Ojp3aW5kb3dHZW9tZXRyeSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRX
aW5kb3dHZW9tZXRyeSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRJbWFnZURhdGEpOgorICAgICAg
ICAoRXdrVmlldzo6c2l6ZSk6CisgICAgICAgIChFd2tWaWV3Ojppc0ZvY3VzZWQpOgorICAgICAg
ICAoRXdrVmlldzo6aXNWaXNpYmxlKToKKyAgICAgICAgKEV3a1ZpZXc6OnRpdGxlKToKKyAgICAg
ICAgKEV3a1ZpZXc6OmlucHV0TWV0aG9kQ29udGV4dCk6CisgICAgICAgIChFd2tWaWV3Ojp0aGVt
ZVBhdGgpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKEV3a1Zp
ZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAgICAoRXdrVmlldzo6c2V0Q3VzdG9t
VGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRNb3VzZUV2ZW50c0VuYWJs
ZWQpOgorICAgICAgICAoRXdrVmlldzo6c2V0VG91Y2hFdmVudHNFbmFibGVkKToKKyAgICAgICAg
KEV3a1ZpZXc6OmluZm9ybUljb25DaGFuZ2UpOgorICAgICAgICAoRXdrVmlldzo6Y3JlYXRlR0xT
dXJmYWNlKToKKyAgICAgICAgKEV3a1ZpZXc6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUpOgorICAgICAgICAoRXdrVmlldzo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToK
KyAgICAgICAgKEV3a1ZpZXc6OnJlcXVlc3RDb2xvclBpY2tlcik6CisgICAgICAgIChFd2tWaWV3
OjpkaXNtaXNzQ29sb3JQaWNrZXIpOgorICAgICAgICAoRXdrVmlldzo6c2hvd0NvbnRleHRNZW51
KToKKyAgICAgICAgKEV3a1ZpZXc6OmhpZGVDb250ZXh0TWVudSk6CisgICAgICAgIChFd2tWaWV3
OjpyZXF1ZXN0UG9wdXBNZW51KToKKyAgICAgICAgKEV3a1ZpZXc6OmNsb3NlUG9wdXBNZW51KToK
KyAgICAgICAgKEV3a1ZpZXc6OnJlcXVlc3RKU0FsZXJ0UG9wdXApOgorICAgICAgICAoRXdrVmll
dzo6cmVxdWVzdEpTQ29uZmlybVBvcHVwKToKKyAgICAgICAgKEV3a1ZpZXc6OnJlcXVlc3RKU1By
b21wdFBvcHVwKToKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVk
KToKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3
Ojp3aW5kb3dGZWF0dXJlcyk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVOZXdQYWdlKToKKyAg
ICAgICAgKEV3a1ZpZXc6OmNsb3NlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uTW91c2VEb3duKToK
KyAgICAgICAgKEV3a1ZpZXc6Om9uTW91c2VVcCk6CisgICAgICAgIChFd2tWaWV3Ojpvbk1vdXNl
TW92ZSk6CisgICAgICAgIChFd2tWaWV3OjpmZWVkVG91Y2hFdmVudHMpOgorICAgICAgICAoRXdr
Vmlldzo6b25Ub3VjaERvd24pOgorICAgICAgICAoRXdrVmlldzo6b25Ub3VjaFVwKToKKyAgICAg
ICAgKEV3a1ZpZXc6Om9uVG91Y2hNb3ZlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRmF2aWNvbkNo
YW5nZWQpOgorICAgICAgICAoRXdrVmlldzo6dGFrZVNuYXBzaG90KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoRXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp2aWV3KToK
KyAgICAgICAgKEV3a1ZpZXc6OnBhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZXdrQ29udGV4dCk6
CisgICAgICAgIChFd2tWaWV3OjpzZXR0aW5ncyk6CisgICAgICAgIChFd2tWaWV3OjpiYWNrRm9y
d2FyZExpc3QpOgorICAgICAgICAoRXdrVmlldzo6dXJsKToKKyAgICAgICAgKEV3a1ZpZXc6OmZh
dmljb25VUkwpOgorICAgICAgICAoRXdrVmlldzo6bW91c2VFdmVudHNFbmFibGVkKToKKyAgICAg
ICAgKEV3a1ZpZXc6OnRvdWNoRXZlbnRzRW5hYmxlZCk6CisgICAgICAgIChFd2tWaWV3OjpzZXRO
ZWVkc1N1cmZhY2VSZXNpemUpOgorICAgICAgICAoRXdrVmlldzo6c21hcnRDYWxsYmFjayk6Cisg
ICAgICAgIChFd2tWaWV3OjpwYWdlQ2xpZW50KToKKyAgICAgICAgKEV3a1ZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3Rvcik6CisgICAgICAgIChFd2tWaWV3OjpwYWdlU2NhbGVGYWN0b3IpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0UGFnZVBvc2l0aW9uKToKKyAgICAgICAgKEV3a1ZpZXc6OnBhZ2VQb3Np
dGlvbik6CisgICAgICAgIChFd2tWaWV3Ojppc0hhcmR3YXJlQWNjZWxlcmF0ZWQpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKEV3a1ZpZXc6OmV2YXNH
TENvbnRleHQpOgorICAgICAgICAoRXdrVmlldzo6ZXZhc0dMU3VyZmFjZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudS5jcHA6CisgICAgICAgIChFd2tDb250
ZXh0TWVudTo6RXdrQ29udGV4dE1lbnUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X21lbnVfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrQ29udGV4dE1lbnU6OmNyZWF0
ZSk6CisgICAgICAgIChFd2tDb250ZXh0TWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHA6CisgICAgICAgIChFd2tEb3dubG9hZEpvYjo6RXdrRG93
bmxvYWRKb2IpOgorICAgICAgICAoRXdrRG93bmxvYWRKb2I6OnZpZXcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oOgorICAgICAgICAoRXdr
RG93bmxvYWRKb2I6OmNyZWF0ZSk6CisgICAgICAgIChFd2tEb3dubG9hZEpvYik6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnUuY3BwOgorICAgICAgICAoRXdrUG9w
dXBNZW51OjpFd2tQb3B1cE1lbnUpOgorICAgICAgICAoRXdrUG9wdXBNZW51OjpjbG9zZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfcHJpdmF0ZS5oOgorICAg
ICAgICAoRXdrUG9wdXBNZW51OjpjcmVhdGUpOgorICAgICAgICAoRXdrUG9wdXBNZW51KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAoRXdr
U2V0dGluZ3M6OnByZWZlcmVuY2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c2V0dGluZ3NfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrU2V0dGluZ3M6OmNyZWF0ZSk6CisgICAg
ICAgIChFd2tTZXR0aW5nczo6RXdrU2V0dGluZ3MpOgorICAgICAgICAoRXdrU2V0dGluZ3MpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGNyZWF0
ZUV3a1ZpZXcpOgorICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXdfcHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3df
ZmVhdHVyZXMuY3BwOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1
cmVzKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRUb29sYmFyVmlzaWJsZSk6Cisg
ICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6c2V0U3RhdHVzQmFyVmlzaWJsZSk6CisgICAgICAg
IChFd2tXaW5kb3dGZWF0dXJlczo6c2V0TWVudUJhclZpc2libGUpOgorICAgICAgICAoRXdrV2lu
ZG93RmVhdHVyZXM6OnNldFJlc2l6YWJsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmg6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJl
czo6Y3JlYXRlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpCYWNr
aW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0Nv
bnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dEhpc3Rv
cnlDbGllbnRFZmw6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKFdl
YktpdDo6Q29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtU2Vy
dmVyUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6
ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0NvbnRleHRN
ZW51Q2xpZW50RWZsLmNwcDoKKyAgICAgICAgKENvbnRleHRNZW51Q2xpZW50RWZsOjpDb250ZXh0
TWVudUNsaWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVu
dEVmbC5oOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudEVmbDo6Y3JlYXRlKToK
KyAgICAgICAgKENvbnRleHRNZW51Q2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L0Rvd25sb2FkTWFuYWdlckVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdl
ckVmbDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZE1hbmFnZXJFZmw6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1hbmFnZXJFZmw6OmRpZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
TWFuYWdlckVmbDo6ZGlkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2Vy
RWZsOjpyZWdpc3RlckRvd25sb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0Rvd25sb2Fk
TWFuYWdlckVmbC5oOgorICAgICAgICAoRG93bmxvYWRNYW5hZ2VyRWZsKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZWZsL0ZpbmRDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ2xp
ZW50RWZsOjpkaWRGaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudEVmbDo6
ZGlkRmFpbFRvRmluZFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDbGllbnRFZmw6OkZp
bmRDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvRmluZENsaWVudEVmbC5oOgor
ICAgICAgICAoV2ViS2l0OjpGaW5kQ2xpZW50RWZsOjpjcmVhdGUpOgorICAgICAgICAoRmluZENs
aWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Rm9ybUNsaWVudEVmbDo6d2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAo
V2ViS2l0OjpGb3JtQ2xpZW50RWZsOjpGb3JtQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL0Zvcm1DbGllbnRFZmwuaDoKKyAgICAgICAgKFdlYktpdDo6Rm9ybUNsaWVudEVmbDo6
Y3JlYXRlKToKKyAgICAgICAgKEZvcm1DbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvSW5wdXRNZXRob2RDb250ZXh0RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRo
b2RDb250ZXh0RWZsOjpJbnB1dE1ldGhvZENvbnRleHRFZmwpOgorICAgICAgICAoV2ViS2l0OjpJ
bnB1dE1ldGhvZENvbnRleHRFZmw6Om9uSU1GSW5wdXRTZXF1ZW5jZUNvbXBsZXRlKToKKyAgICAg
ICAgKFdlYktpdDo6SW5wdXRNZXRob2RDb250ZXh0RWZsOjpvbklNRlByZWVkaXRTZXF1ZW5jZUNo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZENvbnRleHRFZmw6OnVwZGF0ZVRl
eHRJbnB1dFN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0lucHV0TWV0aG9kQ29udGV4
dEVmbC5oOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZENvbnRleHRFZmw6OmNyZWF0ZSk6
CisgICAgICAgIChJbnB1dE1ldGhvZENvbnRleHRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvUGFnZUNsaWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6
UGFnZUNsaWVudEJhc2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6dmlldyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEJhc2U6OnNldFZpZXdOZWVkc0Rpc3BsYXkp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6dmlld1NpemUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRCYXNlOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRC
YXNlOjpkaWRSZWxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFz
ZTo6dG9vbFRpcENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6c2V0
Q3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEJhc2U6OmNyZWF0ZVBvcHVwTWVu
dVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEJhc2U6OmNyZWF0ZUNvbnRleHRN
ZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50QmFzZTo6dXBkYXRlVGV4dElucHV0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50QmFzZTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L1BhZ2VDbGllbnRCYXNlLmg6CisgICAgICAgIChQYWdlQ2xpZW50QmFzZSk6CisgICAgICAgICog
VUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50RGVmYXVsdEltcGw6OlBhZ2VDbGllbnREZWZhdWx0SW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnREZWZhdWx0SW1wbDo6dXBkYXRlVmlld3BvcnRTaXplKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudERlZmF1bHRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y29udmVydFRvVXNl
clNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudERlZmF1bHRJbXBsOjpkaWRDaGFu
Z2VDb250ZW50c1NpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1
bHRJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRl
KToKKyAgICAgICAgKFBhZ2VDbGllbnREZWZhdWx0SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNz
L2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRMZWdhY3lJbXBsOjpQYWdlQ2xpZW50TGVnYWN5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRMZWdhY3lJbXBsOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudExlZ2FjeUltcGw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRMZWdhY3lJbXBsOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXpl
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VEaWRSZXF1ZXN0
U2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudExlZ2FjeUltcGw6OmRpZFJlbmRl
ckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VUcmFu
c2l0aW9uVmlld3BvcnRSZWFkeSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50
TGVnYWN5SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3Jl
YXRlKToKKyAgICAgICAgKFBhZ2VDbGllbnRMZWdhY3lJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRD
bGllbnRFZmw6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUxvYWRDbGllbnRFZmw6OmRpZFJlY2VpdmVJbnRlbnRGb3JGcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpyZWdpc3RlckludGVudFNlcnZpY2VGb3JGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VQcm9ncmVzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbDo6ZGlkRmFpbExvYWRXaXRoRXJy
b3JGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRDbGll
bnRFZmw6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw6OmRpZEZhaWxQcm92aXNpb25h
bExvYWRXaXRoRXJyb3JGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50
RWZsOjpkaWRDb21taXRMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENs
aWVudEVmbDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUxvYWRDbGllbnRFZmw6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VJbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw6OlBh
Z2VMb2FkQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50
RWZsLmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUpOgorICAg
ICAgICAoUGFnZUxvYWRDbGllbnRFZmwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVu
dEVmbDo6dmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlUG9saWN5Q2xpZW50RWZs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVmbDo6ZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRF
Zmw6OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VQb2xpY3lDbGllbnRFZmw6OlBhZ2VQb2xpY3lDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9lZmwvUGFnZVBvbGljeUNsaWVudEVmbC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlUG9s
aWN5Q2xpZW50RWZsOjpjcmVhdGUpOgorICAgICAgICAoUGFnZVBvbGljeUNsaWVudEVmbCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VVSUNsaWVudEVmbDo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRF
Zmw6OnRha2VGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6Zm9jdXMp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnVuZm9jdXMpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJ
Q2xpZW50RWZsOjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVu
dEVmbDo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6
OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVm
bDo6cnVuT3BlblBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpjcmVh
dGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzaG93Q29sb3JQ
aWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OmhpZGVDb2xvclBpY2tl
cik6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaDoKKyAgICAgICAg
KFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUpOgorICAgICAgICAoUGFnZVVJQ2xpZW50
RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZHJhd2luZ0FyZWEpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNp
emUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpk
aWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50RWZsOjpzZXRWaWV3cG9ydFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlkUmVzdW1l
Q29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRF
Zmw6OmRpZENoYW5nZVZpc2libGVDb250ZW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Q
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmNyZWF0ZSk6CisgICAgICAgIChQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1ZpYnJhdGlv
bkNsaWVudEVmbC5jcHA6CisgICAgICAgIChWaWJyYXRpb25DbGllbnRFZmw6OnZpYnJhdGVDYWxs
YmFjayk6CisgICAgICAgIChWaWJyYXRpb25DbGllbnRFZmw6OmNhbmNlbFZpYnJhdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKToKKyAgICAgICAgKFZp
YnJhdGlvbkNsaWVudEVmbDo6VmlicmF0aW9uQ2xpZW50RWZsKToKKyAgICAgICAgKFZpYnJhdGlv
bkNsaWVudEVmbDo6flZpYnJhdGlvbkNsaWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2Vm
bC9WaWJyYXRpb25DbGllbnRFZmwuaDoKKyAgICAgICAgKFZpYnJhdGlvbkNsaWVudEVmbCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0TWVudVByb3h5RWZsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUVmbDo6V2ViQ29udGV4dE1lbnVQcm94eUVm
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlFZmw6OnNob3dDb250ZXh0
TWVudSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlFZmw6OmhpZGVDb250
ZXh0TWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0TWVudVByb3h5RWZs
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlFZmw6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb250ZXh0TWVudVByb3h5RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAoV2ViS2l0
OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbik6CisgICAgICAgICog
VUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5Ojp2aWV3V2lkZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlBv
cHVwTWVudVByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlF
Zmw6OldlYlBvcHVwTWVudVByb3h5RWZsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
UHJveHlFZmw6OnNob3dQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQ
cm94eUVmbDo6aGlkZVBvcHVwTWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJQb3B1
cE1lbnVQcm94eUVmbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYlBvcHVwTWVudVByb3h5RWZsKToKKwogMjAxMy0wMS0yMiAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBhIHBs
YXRmb3JvbSBzdHJhdGVneSBmb3IgbG9jYWwgc3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBiNjdiZjJhLi41NTUxNmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
MzksNyArMzksNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3Mv
QVBJL0Mvc291cC9XS0NvbnRleHRTb3VwLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9zb3VwL1dL
U291cFJlcXVlc3RNYW5hZ2VyLmNwcAogCi0gICAgVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0lt
cGwuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9FdmFzR0xDb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0V2YXNHTFN1
cmZhY2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvU25hcHNob3RJbWFnZUdMLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IGEwNjIw
NTIuLjBjOTQ1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9l
ZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dL
Vmlldy5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXS1ZpZXcuaCIKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdrVmll
dy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUu
aCIKICNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgpAQCAtMjksMjQgKzI5LDI0IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyog
Y2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
UmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRl
eHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlld0ltcGw6OkxlZ2FjeUJlaGF2aW9yKSk7CisgICAg
cmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOwogfQogCiBXS1ZpZXdSZWYgV0tWaWV3
Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoZXdr
X3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXdJ
bXBsOjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9h
ZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhh
dmlvcikpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikK
IHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmpl
Y3QodG9JbXBsKHZpZXdSZWYpKTsKKyAgICBFd2tWaWV3KiB2aWV3SW1wbCA9IEV3a1ZpZXc6OmZy
b21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CiAKICAgICByZXR1cm4gdmlld0ltcGwtPndr
UGFnZSgpOwogfQogCiBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2
aWV3UmVmKQogewotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9t
RXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOworICAgIEV3a1ZpZXcqIHZpZXdJbXBsID0gRXdr
Vmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsKIAogICAgIHJldHVybiBXS0lt
YWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZSh2aWV3SW1wbC0+dGFrZVNuYXBzaG90KCkuZ2V0KCks
IDAgLyogb3B0aW9ucyAqLyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmQ3NTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmNwcApAQCAtMCwwICsxLDEwNTcgQEAKKy8qCisgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJFd2tWaWV3LmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEVmbC5oIgorI2luY2x1
ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiRWZsU2NyZWVu
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgorI2luY2x1ZGUgIkZvcm1D
bGllbnRFZmwuaCIKKyNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKKyNpbmNsdWRl
ICJMYXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCisjaW5j
bHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudExlZ2Fj
eUltcGwuaCIKKyNpbmNsdWRlICJQYWdlTG9hZENsaWVudEVmbC5oIgorI2luY2x1ZGUgIlBhZ2VQ
b2xpY3lDbGllbnRFZmwuaCIKKyNpbmNsdWRlICJQYWdlVUlDbGllbnRFZmwuaCIKKyNpbmNsdWRl
ICJTbmFwc2hvdEltYWdlR0wuaCIKKyNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKKyNpbmNsdWRl
ICJXS0dlb21ldHJ5LmgiCisjaW5jbHVkZSAiV0tOdW1iZXIuaCIKKyNpbmNsdWRlICJXS1N0cmlu
Zy5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJJbWFnZS5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1
ZGUgIldlYlBvcHVwTWVudVByb3h5RWZsLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIK
KyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3
a19jb2xvcl9waWNrZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X21lbnVfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tf
ZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRl
bV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgImV3a19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRl
LmgiCisjaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdmll
dy5oIgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93
X2ZlYXR1cmVzX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVkZSA8
RWNvcmVfWC5oPgorI2luY2x1ZGUgPEVkamUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRp
bGl0aWVzRWZsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KKyNpbmNsdWRlIDxXZWJL
aXQyL1dLSW1hZ2VDYWlyby5oPgorCisjaWYgRU5BQkxFKFZJQlJBVElPTikKKyNpbmNsdWRlICJW
aWJyYXRpb25DbGllbnRFZmwuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNlbmRpZgorCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgPEV2YXNfR0wuaD4KKyNlbmRp
ZgorCit1c2luZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0Q3Vyc29yU2l6ZSA9IDE2OworCit0eXBlZGVmIEhhc2hNYXA8V0tQYWdlUmVmLCBFdmFzX09i
amVjdCo+IFBhZ2VWaWV3TWFwOworCitzdGF0aWMgaW5saW5lIFBhZ2VWaWV3TWFwJiBwYWdlVmll
d01hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYWdlVmlld01hcCwgbWFwLCAoKSk7
CisgICAgcmV0dXJuIG1hcDsKK30KKwordm9pZCBFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFwKEV3
a1ZpZXcqIHZpZXdJbXBsKQoreworICAgIFBhZ2VWaWV3TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
cGFnZVZpZXdNYXAoKS5hZGQodmlld0ltcGwtPndrUGFnZSgpLCB2aWV3SW1wbC0+dmlldygpKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lk
IEV3a1ZpZXc6OnJlbW92ZUZyb21QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3SW1wbCkKK3sKKyAg
ICBBU1NFUlQocGFnZVZpZXdNYXAoKS5jb250YWlucyh2aWV3SW1wbC0+d2tQYWdlKCkpKTsKKyAg
ICBwYWdlVmlld01hcCgpLnJlbW92ZSh2aWV3SW1wbC0+d2tQYWdlKCkpOworfQorCitjb25zdCBF
dmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYg
cGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7CisKKyAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5n
ZXQocGFnZSk7Cit9CisKK0V3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VH
cm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV92aWV3KHZpZXcpCisgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
LCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3BhZ2VDbGll
bnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBsOjpj
cmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQorICAgICwg
bV9wYWdlUHJveHkobV9jb250ZXh0LT53ZWJDb250ZXh0KCktPmNyZWF0ZVdlYlBhZ2UobV9wYWdl
Q2xpZW50LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV9wYWdlTG9hZENsaWVudChQ
YWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9wYWdlUG9saWN5Q2xpZW50
KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fcGFnZVVJQ2xpZW50
KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9jb250ZXh0TWVudUNsaWVu
dChDb250ZXh0TWVudUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9maW5kQ2xpZW50
KEZpbmRDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fZm9ybUNsaWVudChGb3JtQ2xp
ZW50RWZsOjpjcmVhdGUodGhpcykpCisjaWYgRU5BQkxFKFZJQlJBVElPTikKKyAgICAsIG1fdmli
cmF0aW9uQ2xpZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorI2VuZGlmCisg
ICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0b0FQSSht
X3BhZ2VQcm94eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkKKyNpZiBVU0UoVElMRURfQkFDS0lOR19T
VE9SRSkKKyAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCisjZW5kaWYKKyAgICAsIG1fc2V0dGlu
Z3MoRXdrU2V0dGluZ3M6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fY3Vyc29ySWRlbnRpZmllcigw
KQorICAgICwgbV9tb3VzZUV2ZW50c0VuYWJsZWQoZmFsc2UpCisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKKyAgICAsIG1fdG91Y2hFdmVudHNFbmFibGVkKGZhbHNlKQorI2VuZGlmCisgICAgLCBt
X2Rpc3BsYXlUaW1lcih0aGlzLCAmRXdrVmlldzo6ZGlzcGxheVRpbWVyRmlyZWQpCisgICAgLCBt
X2lucHV0TWV0aG9kQ29udGV4dChJbnB1dE1ldGhvZENvbnRleHRFZmw6OmNyZWF0ZSh0aGlzLCBz
bWFydERhdGEoKS0+YmFzZS5ldmFzKSkKKyAgICAsIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKHRy
dWUpCisgICAgLCBtX3NldERyYXdzQmFja2dyb3VuZChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV92
aWV3KTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBBU1NFUlQobV9wYWdlUHJveHkpOwor
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIG1fcGFnZVByb3h5LT5wYWdlR3Jv
dXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1
ZSk7CisgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3Jj
ZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgbV9wYWdlUHJv
eHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Cisj
ZW5kaWYKKyAgICBpZiAoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKQorICAgICAgICBtX3Bh
Z2VQcm94eS0+c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7CisjZW5kaWYKKworICAgIG1fcGFnZVBy
b3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
ICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1fdmlldyk7
CisgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGdWxsU2Ny
ZWVuRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgbV9w
YWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJBdWRpb0VuYWJsZWQo
dHJ1ZSk7CisjZW5kaWYKKworICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5j
ZXMoKS0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOworCisgICAg
Ly8gRW5hYmxlIG1vdXNlIGV2ZW50cyBieSBkZWZhdWx0CisgICAgc2V0TW91c2VFdmVudHNFbmFi
bGVkKHRydWUpOworCisgICAgLy8gTGlzdGVuIGZvciBmYXZpY29uIGNoYW5nZXMuCisgICAgRXdr
RmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFz
ZSgpOworICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOworCisgICAgaWNvbkRhdGFiYXNlLT53YXRj
aENoYW5nZXMoSWNvbkNoYW5nZUNhbGxiYWNrRGF0YShFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2Vk
LCB0aGlzKSk7CisKKyAgICBFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFwKHRoaXMpOworfQorCitF
d2tWaWV3Ojp+RXdrVmlldygpCit7CisgICAgbV9wYWdlUHJveHktPmNsb3NlKCk7CisKKyAgICAv
LyBVbnJlZ2lzdGVyIGljb24gY2hhbmdlIGNhbGxiYWNrLgorICAgIEV3a0Zhdmljb25EYXRhYmFz
ZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKKyAgICBBU1NF
UlQoaWNvbkRhdGFiYXNlKTsKKworICAgIGljb25EYXRhYmFzZS0+dW53YXRjaENoYW5nZXMoRXdr
Vmlldzo6b25GYXZpY29uQ2hhbmdlZCk7CisKKyAgICBFd2tWaWV3OjpyZW1vdmVGcm9tUGFnZVZp
ZXdNYXAodGhpcyk7Cit9CisKK0V3a19WaWV3X1NtYXJ0X0RhdGEqIEV3a1ZpZXc6OnNtYXJ0RGF0
YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChtX3ZpZXcpKTsKK30KKworRXdrVmlldyogRXdr
Vmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpCit7CisgICAgQVNT
RVJUKHZpZXcpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KHZpZXcpKTsKKyAg
ICBBU1NFUlQoc2QpOworICAgIEFTU0VSVChzZC0+cHJpdik7CisgICAgcmV0dXJuIHNkLT5wcml2
OworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmVzIHRoZSBpbnRlcm5hbCBXS1Bh
Z2UgZm9yIHRoaXMgdmlldy4KKyAqLworV0tQYWdlUmVmIEV3a1ZpZXc6OndrUGFnZSgpCit7Cisg
ICAgcmV0dXJuIHRvQVBJKG1fcGFnZVByb3h5LmdldCgpKTsKK30KKwordm9pZCBFd2tWaWV3Ojpz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgaWYgKGN1cnNvci5pbWFnZSgp
KSB7CisgICAgICAgIC8vIEN1c3RvbSBjdXJzb3IuCisgICAgICAgIGlmIChjdXJzb3IuaW1hZ2Uo
KSA9PSBtX2N1cnNvcklkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
bV9jdXJzb3JJZGVudGlmaWVyID0gY3Vyc29yLmltYWdlKCk7CisKKyAgICAgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICAgICAgUmVmUHRyPEV2YXNfT2JqZWN0
PiBjdXJzb3JPYmplY3QgPSBhZG9wdFJlZihjdXJzb3IuaW1hZ2UoKS0+Z2V0RXZhc09iamVjdChz
ZC0+YmFzZS5ldmFzKSk7CisgICAgICAgIGlmICghY3Vyc29yT2JqZWN0KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIC8vIFJlc2l6ZSBjdXJzb3IuCisgICAgICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShjdXJzb3JPYmplY3QuZ2V0KCksIGN1cnNvci5pbWFnZSgpLT5zaXplKCkud2lkdGgo
KSwgY3Vyc29yLmltYWdlKCktPnNpemUoKS5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gR2V0IGN1
cnNvciBob3Qgc3BvdC4KKyAgICAgICAgSW50UG9pbnQgaG90U3BvdDsKKyAgICAgICAgY3Vyc29y
LmltYWdlKCktPmdldEhvdFNwb3QoaG90U3BvdCk7CisKKyAgICAgICAgRWNvcmVfRXZhcyogZWNv
cmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKKyAgICAg
ICAgLy8gZWNvcmVfZXZhcyB0YWtlcyBjYXJlIG9mIGZyZWVpbmcgdGhlIGN1cnNvciBvYmplY3Qu
CisgICAgICAgIGVjb3JlX2V2YXNfb2JqZWN0X2N1cnNvcl9zZXQoZWNvcmVFdmFzLCBjdXJzb3JP
YmplY3QucmVsZWFzZSgpLmxlYWtSZWYoKSwgRVZBU19MQVlFUl9NQVgsIGhvdFNwb3QueCgpLCBo
b3RTcG90LnkoKSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN0YW5kYXJk
IGN1cnNvci4KKyAgICBjb25zdCBjaGFyKiBncm91cCA9IGN1cnNvci5wbGF0Zm9ybUN1cnNvcigp
OworICAgIGlmICghZ3JvdXAgfHwgZ3JvdXAgPT0gbV9jdXJzb3JJZGVudGlmaWVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2N1cnNvcklkZW50aWZpZXIgPSBncm91cDsKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAgIFJlZlB0cjxFdmFzX09iamVjdD4g
Y3Vyc29yT2JqZWN0ID0gYWRvcHRSZWYoZWRqZV9vYmplY3RfYWRkKHNkLT5iYXNlLmV2YXMpKTsK
KworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQo
c2QtPmJhc2UuZXZhcyk7CisgICAgaWYgKCFtX3RoZW1lIHx8ICFlZGplX29iamVjdF9maWxlX3Nl
dChjdXJzb3JPYmplY3QuZ2V0KCksIG1fdGhlbWUsIGdyb3VwKSkgeworICAgICAgICBlY29yZV9l
dmFzX29iamVjdF9jdXJzb3Jfc2V0KGVjb3JlRXZhcywgMCwgMCwgMCwgMCk7CisjaWZkZWYgSEFW
RV9FQ09SRV9YCisgICAgICAgIGlmIChXZWJDb3JlOjppc1VzaW5nRWNvcmVYKHNkLT5iYXNlLmV2
YXMpKQorICAgICAgICAgICAgV2ViQ29yZTo6YXBwbHlGYWxsYmFja0N1cnNvcihlY29yZUV2YXMs
IGdyb3VwKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2V0IGN1
cnNvciBzaXplLgorICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKKyAgICBlZGplX29iamVj
dF9zaXplX21pbl9nZXQoY3Vyc29yT2JqZWN0LmdldCgpLCAmd2lkdGgsICZoZWlnaHQpOworICAg
IGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQorICAgICAgICBlZGplX29iamVjdF9zaXpl
X21pbl9jYWxjKGN1cnNvck9iamVjdC5nZXQoKSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBpZiAo
d2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkgeworICAgICAgICB3aWR0aCA9IGRlZmF1bHRDdXJz
b3JTaXplOworICAgICAgICBoZWlnaHQgPSBkZWZhdWx0Q3Vyc29yU2l6ZTsKKyAgICB9CisgICAg
ZXZhc19vYmplY3RfcmVzaXplKGN1cnNvck9iamVjdC5nZXQoKSwgd2lkdGgsIGhlaWdodCk7CisK
KyAgICAvLyBHZXQgY3Vyc29yIGhvdCBzcG90LgorICAgIGNvbnN0IGNoYXIqIGRhdGE7CisgICAg
aW50IGhvdHNwb3RYID0gMDsKKyAgICBkYXRhID0gZWRqZV9vYmplY3RfZGF0YV9nZXQoY3Vyc29y
T2JqZWN0LmdldCgpLCAiaG90LngiKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgaG90c3BvdFgg
PSBhdG9pKGRhdGEpOworCisgICAgaW50IGhvdHNwb3RZID0gMDsKKyAgICBkYXRhID0gZWRqZV9v
YmplY3RfZGF0YV9nZXQoY3Vyc29yT2JqZWN0LmdldCgpLCAiaG90LnkiKTsKKyAgICBpZiAoZGF0
YSkKKyAgICAgICAgaG90c3BvdFkgPSBhdG9pKGRhdGEpOworCisgICAgLy8gZWNvcmVfZXZhcyB0
YWtlcyBjYXJlIG9mIGZyZWVpbmcgdGhlIGN1cnNvciBvYmplY3QuCisgICAgZWNvcmVfZXZhc19v
YmplY3RfY3Vyc29yX3NldChlY29yZUV2YXMsIGN1cnNvck9iamVjdC5yZWxlYXNlKCkubGVha1Jl
ZigpLCBFVkFTX0xBWUVSX01BWCwgaG90c3BvdFgsIGhvdHNwb3RZKTsKK30KKwordm9pZCBFd2tW
aWV3OjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkKK3sKKyAgICBwYWdlKCktPnNl
dEludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yKHNjYWxlKTsKK30KKworZmxvYXQgRXdrVmlldzo6
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2VQcm94eS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIEV3a1ZpZXc6OnRyYW5zZm9y
bUZyb21TY2VuZSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKwor
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIC8vIE5vdGUgdGhhdCB3ZSBhcHBseSBi
b3RoIHBhZ2UgYW5kIGRldmljZSBzY2FsZSBmYWN0b3JzLgorICAgIHRyYW5zZm9ybS5zY2FsZSgx
IC8gcGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHRyYW5zZm9ybS5zY2FsZSgxIC8gZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwYWdlUG9zaXRpb24oKS54KCks
IHBhZ2VQb3NpdGlvbigpLnkoKSk7CisjZW5kaWYKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkID0gc21hcnREYXRhKCk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtc2QtPnZpZXcueCwg
LXNkLT52aWV3LnkpOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKworQWZmaW5lVHJhbnNm
b3JtIEV3a1ZpZXc6OnRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdAoreworICAgIHJldHVybiB0cmFu
c2Zvcm1Gcm9tU2NlbmUoKS5pbnZlcnNlKCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBFd2tWaWV3
Ojp0cmFuc2Zvcm1Ub1NjcmVlbigpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybTsKKworICAgIGludCB3aW5kb3dHbG9iYWxYID0gMDsKKyAgICBpbnQgd2luZG93R2xvYmFs
WSA9IDA7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworCisj
aWZkZWYgSEFWRV9FQ09SRV9YCisgICAgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0gZWNvcmVfZXZh
c19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKKworICAgIEVjb3JlX1hfV2luZG93IHdp
bmRvdzsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgd2luZG93ID0gZWNv
cmVfZXZhc19nbF94MTFfd2luZG93X2dldChlY29yZUV2YXMpOworICAgIC8vIEZhbGxiYWNrIHRv
IHNvZnR3YXJlIG1vZGUgaWYgbmVjZXNzYXJ5LgorICAgIGlmICghd2luZG93KQorI2VuZGlmCisg
ICAgd2luZG93ID0gZWNvcmVfZXZhc19zb2Z0d2FyZV94MTFfd2luZG93X2dldChlY29yZUV2YXMp
OyAvLyBSZXR1cm5zIDAgaWYgbm9uZS4KKworICAgIGludCB4LCB5OyAvLyB4LCB5IGFyZSByZWxh
dGl2ZSB0byBwYXJlbnQgKGluIGEgcmVwYXJlbnRpbmcgd2luZG93IG1hbmFnZXIpLgorICAgIHdo
aWxlICh3aW5kb3cpIHsKKyAgICAgICAgZWNvcmVfeF93aW5kb3dfZ2VvbWV0cnlfZ2V0KHdpbmRv
dywgJngsICZ5LCAwLCAwKTsKKyAgICAgICAgd2luZG93R2xvYmFsWCArPSB4OworICAgICAgICB3
aW5kb3dHbG9iYWxZICs9IHk7CisgICAgICAgIHdpbmRvdyA9IGVjb3JlX3hfd2luZG93X3BhcmVu
dF9nZXQod2luZG93KTsKKyAgICB9CisjZW5kaWYKKworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
LXNkLT52aWV3LngsIC1zZC0+dmlldy55KTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHdpbmRv
d0dsb2JhbFgsIHdpbmRvd0dsb2JhbFkpOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK0xheWVyVHJlZVJlbmRlcmVyKiBFd2tWaWV3
OjpsYXllclRyZWVSZW5kZXJlcigpCit7CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWEgPSBwYWdlKCktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKCFkcmF3aW5nQXJlYSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
KiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGRyYXdpbmdBcmVhLT5jb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSgpOworICAgIGlmICghY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworfQorI2VuZGlmCisKK3ZvaWQgRXdr
Vmlldzo6ZGlzcGxheVRpbWVyRmlyZWQoVGltZXI8RXdrVmlldz4qKQoreworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0
YSgpOworCisgICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNpemUpIHsKKyAgICAgICAgLy8gQ3Jl
YXRlIGEgR0wgc3VyZmFjZSBoZXJlIHNvIHRoYXQgRXZhcyBoYXMgbm8gY2hhbmNlIG9mIHBhaW50
aW5nIHRvIGFuIGVtcHR5IEdMIHN1cmZhY2UuCisgICAgICAgIGNyZWF0ZUdMU3VyZmFjZShJbnRT
aXplKHNkLT52aWV3LncsIHNkLT52aWV3LmgpKTsKKyAgICAgICAgaWYgKCFtX2V2YXNHTFN1cmZh
Y2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9wZW5kaW5nU3VyZmFjZVJlc2l6
ZSA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBldmFzX2dsX21ha2VfY3VycmVudChtX2V2
YXNHTC5nZXQoKSwgZXZhc0dMU3VyZmFjZSgpLCBldmFzR0xDb250ZXh0KCkpOworCisgICAgLy8g
V2UgYXJlIHN1cHBvc2VkIHRvIGNsaXAgdG8gdGhlIGFjdHVhbCB2aWV3cG9ydCwgbm90aGluZyBs
ZXNzLgorICAgIEludFJlY3Qgdmlld3BvcnQoc2QtPnZpZXcueCwgc2QtPnZpZXcueSwgc2QtPnZp
ZXcudywgc2QtPnZpZXcuaCk7CisKKyAgICBMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBs
YXllclRyZWVSZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgcmVuZGVyZXItPnNldERyYXdz
QmFja2dyb3VuZChtX3NldERyYXdzQmFja2dyb3VuZCk7CisgICAgaWYgKG1faXNIYXJkd2FyZUFj
Y2VsZXJhdGVkKSB7CisgICAgICAgIHJlbmRlcmVyLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCh0
cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAvKiBvcGFjaXR5ICov
IDEsIHZpZXdwb3J0KTsKKyAgICAgICAgLy8gc2QtPmltYWdlIGlzIHRpZWQgdG8gYSBuYXRpdmUg
c3VyZmFjZS4gVGhlIG5hdGl2ZSBzdXJmYWNlIGlzIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRl
cywKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgdmlld3BvcnQgcG9z
aXRpb24gd2hlbiBjYWxsaW5nIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZC4KKyAg
ICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNkLT5pbWFnZSwgdmlld3Bv
cnQueCgpLCB2aWV3cG9ydC55KCksIHZpZXdwb3J0LndpZHRoKCksIHZpZXdwb3J0LmhlaWdodCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNl
ID0gY3JlYXRlU3VyZmFjZUZvckltYWdlKHNkLT5pbWFnZSk7CisgICAgICAgIGlmICghc3VyZmFj
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gZ3JhcGhp
Y3NDb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UuZ2V0KCkpKTsKKyAgICAg
ICAgY2Fpcm9fdHJhbnNsYXRlKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgLSBwYWdlUG9zaXRpb24o
KS54KCksIC0gcGFnZVBvc2l0aW9uKCkueSgpKTsKKyAgICAgICAgY2Fpcm9fc2NhbGUoZ3JhcGhp
Y3NDb250ZXh0LmdldCgpLCBwYWdlU2NhbGVGYWN0b3IoKSwgcGFnZVNjYWxlRmFjdG9yKCkpOwor
ICAgICAgICBjYWlyb19zY2FsZShncmFwaGljc0NvbnRleHQuZ2V0KCksIGRldmljZVNjYWxlRmFj
dG9yKCksIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZW5kZXJlci0+cGFpbnRUb0dy
YXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQuZ2V0KCkpOworICAgICAgICBldmFzX29iamVj
dF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2QtPmltYWdlLCAwLCAwLCB2aWV3cG9ydC53aWR0aCgp
LCB2aWV3cG9ydC5oZWlnaHQoKSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgRXdrVmlldzo6
dXBkYXRlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QgPSBzbWFydERhdGEoKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgLy8g
Q29vcmRpbmF0ZWQgZ3JhcGhpY2VzIG5lZWRzIHRvIHNjaGVkdWxlIGFuIGZ1bGwgdXBkYXRlLCBu
b3QKKyAgICAvLyByZXBhaW50aW5nIG9mIGEgcmVnaW9uLiBVcGRhdGUgaW4gdGhlIGV2ZW50IGxv
b3AuCisgICAgVU5VU0VEX1BBUkFNKHJlY3QpOworCisgICAgLy8gR3VhcmQgZm9yIHplcm8gc2l6
ZWQgdmlld3BvcnQuCisgICAgaWYgKCEoc2QtPnZpZXcudyAmJiBzZC0+dmlldy5oKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgpKQorICAgICAg
ICBtX2Rpc3BsYXlUaW1lci5zdGFydE9uZVNob3QoMCk7CisjZWxzZQorICAgIGlmICghc2QtPmlt
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0
ZV9hZGQoc2QtPmltYWdlLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKy8qKgor
ICogQGludGVybmFsCisgKiBDYWxscyBmdWxsc2NyZWVuX2VudGVyIGNhbGxiYWNrIG9yIGZhbGxz
IGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvciBhbmQgZW5hYmxlcyBmdWxsc2NyZWVuIG1vZGUuCisg
Ki8KK3ZvaWQgRXdrVmlldzo6ZW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworCisgICAgUmVmUHRyPEV3a1NlY3VyaXR5T3JpZ2lu
PiBvcmlnaW4gPSBFd2tTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoUGFyc2VkVVJMU3RyaW5n
LCBTdHJpbmc6OmZyb21VVEY4KG1fdXJsKSkpOworCisgICAgaWYgKCFzZC0+YXBpLT5mdWxsc2Ny
ZWVuX2VudGVyIHx8ICFzZC0+YXBpLT5mdWxsc2NyZWVuX2VudGVyKHNkLCBvcmlnaW4uZ2V0KCkp
KSB7CisgICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZh
c19nZXQoc2QtPmJhc2UuZXZhcyk7CisgICAgICAgIGVjb3JlX2V2YXNfZnVsbHNjcmVlbl9zZXQo
ZWNvcmVFdmFzLCB0cnVlKTsKKyAgICB9Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBDYWxs
cyBmdWxsc2NyZWVuX2V4aXQgY2FsbGJhY2sgb3IgZmFsbHMgYmFjayB0byBkZWZhdWx0IGJlaGF2
aW9yIGFuZCBkaXNhYmxlcyBmdWxsc2NyZWVuIG1vZGUuCisgKi8KK3ZvaWQgRXdrVmlldzo6ZXhp
dEZ1bGxTY3JlZW4oKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRh
KCk7CisKKyAgICBpZiAoIXNkLT5hcGktPmZ1bGxzY3JlZW5fZXhpdCB8fCAhc2QtPmFwaS0+ZnVs
bHNjcmVlbl9leGl0KHNkKSkgeworICAgICAgICBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29y
ZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5iYXNlLmV2YXMpOworICAgICAgICBlY29yZV9ldmFz
X2Z1bGxzY3JlZW5fc2V0KGVjb3JlRXZhcywgZmFsc2UpOworICAgIH0KK30KKyNlbmRpZgorCitX
S1JlY3QgRXdrVmlldzo6d2luZG93R2VvbWV0cnkoKSBjb25zdAoreworICAgIEV2YXNfQ29vcmQg
eCwgeSwgd2lkdGgsIGhlaWdodDsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0
RGF0YSgpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfZ2VvbWV0cnlfZ2V0IHx8ICFzZC0+
YXBpLT53aW5kb3dfZ2VvbWV0cnlfZ2V0KHNkLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCkpIHsK
KyAgICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5i
YXNlLmV2YXMpOworICAgICAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KGVlLCAm
eCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuIFdLUmVjdE1ha2Uo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgRXdrVmlldzo6c2V0V2luZG93R2VvbWV0
cnkoY29uc3QgV0tSZWN0JiByZWN0KQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0g
c21hcnREYXRhKCk7CisKKyAgICBpZiAoIXNkLT5hcGktPndpbmRvd19nZW9tZXRyeV9zZXQgfHwg
IXNkLT5hcGktPndpbmRvd19nZW9tZXRyeV9zZXQoc2QsIHJlY3Qub3JpZ2luLngsIHJlY3Qub3Jp
Z2luLnksIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdodCkpIHsKKyAgICAgICAgRWNv
cmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5iYXNlLmV2YXMpOwor
ICAgICAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKGVlLCByZWN0Lm9yaWdpbi54LCByZWN0Lm9y
aWdpbi55LCByZWN0LnNpemUud2lkdGgsIHJlY3Quc2l6ZS5oZWlnaHQpOworICAgIH0KK30KKwor
dm9pZCBFd2tWaWV3OjpzZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Cisg
ICAgaWYgKCFpbWFnZURhdGEgfHwgIXNkLT5pbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZXZhc19vYmplY3RfcmVzaXplKHNkLT5pbWFnZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzZC0+aW1hZ2UsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9jb3B5X3NldChz
ZC0+aW1hZ2UsIGltYWdlRGF0YSk7Cit9CisKK0ludFNpemUgRXdrVmlldzo6c2l6ZSgpIGNvbnN0
Cit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0
KG1fdmlldywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKK30KKworYm9vbCBFd2tWaWV3Ojppc0ZvY3VzZWQoKSBjb25zdAoreworICAg
IHJldHVybiBldmFzX29iamVjdF9mb2N1c19nZXQobV92aWV3KTsKK30KKworYm9vbCBFd2tWaWV3
Ojppc1Zpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBldmFzX29iamVjdF92aXNpYmxlX2dl
dChtX3ZpZXcpOworfQorCitjb25zdCBjaGFyKiBFd2tWaWV3Ojp0aXRsZSgpIGNvbnN0Cit7Cisg
ICAgbV90aXRsZSA9IG1fcGFnZVByb3h5LT5wYWdlVGl0bGUoKS51dGY4KCkuZGF0YSgpOworCisg
ICAgcmV0dXJuIG1fdGl0bGU7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBUaGlzIGZ1bmN0
aW9uIG1heSByZXR1cm4gQGMgTlVMTC4KKyAqLworSW5wdXRNZXRob2RDb250ZXh0RWZsKiBFd2tW
aWV3OjppbnB1dE1ldGhvZENvbnRleHQoKQoreworICAgIHJldHVybiBtX2lucHV0TWV0aG9kQ29u
dGV4dC5nZXQoKTsKK30KKworY29uc3QgY2hhciogRXdrVmlldzo6dGhlbWVQYXRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90aGVtZTsKK30KKwordm9pZCBFd2tWaWV3OjpzZXRUaGVtZVBhdGgo
Y29uc3QgY2hhciogdGhlbWUpCit7CisgICAgaWYgKG1fdGhlbWUgIT0gdGhlbWUpIHsKKyAgICAg
ICAgbV90aGVtZSA9IHRoZW1lOworICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRo
ZW1lKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGlu
Z05hbWUoKSBjb25zdAoreworICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9IG1fcGFnZVByb3h5
LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7CisgICAgaWYgKGN1c3RvbUVuY29kaW5nLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2N1c3RvbUVuY29kaW5nID0gY3VzdG9t
RW5jb2RpbmcudXRmOCgpLmRhdGEoKTsKKworICAgIHJldHVybiBtX2N1c3RvbUVuY29kaW5nOwor
fQorCit2b2lkIEV3a1ZpZXc6OnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5n
JiBlbmNvZGluZykKK3sKKyAgICBtX3BhZ2VQcm94eS0+c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFt
ZShlbmNvZGluZyk7Cit9CisKK3ZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV9tb3VzZUV2ZW50c0VuYWJsZWQgPT0gZW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb3VzZUV2ZW50c0VuYWJsZWQgPSBlbmFibGVkOwor
ICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21h
cnREYXRhKCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcs
IEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwgb25Nb3VzZURvd24sIHNkKTsKKyAgICAgICAgZXZh
c19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9V
UCwgb25Nb3VzZVVwLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Fk
ZChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Nb3VzZU1vdmUsIHNkKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3
LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uTW91c2VEb3duKTsKKyAgICAgICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwg
b25Nb3VzZVVwKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmll
dywgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSk7CisgICAgfQorfQorCisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQgRXdrVmlldzo6c2V0VG91Y2hFdmVudHNFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV90b3VjaEV2ZW50c0VuYWJsZWQgPT0gZW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90b3VjaEV2ZW50c0VuYWJsZWQgPSBlbmFi
bGVkOworCisgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgdG8g
Y29ubmVjdCB0b3VjaCBjYWxsYmFja3Mgd2l0aCBtb3VzZSBhbmQgbXVsdGkgZXZlbnRzCisgICAg
ICAgIC8vIGJlY2F1c2UgdGhlIEV2YXMgY3JlYXRlcyBtb3VzZSBldmVudHMgZm9yIGZpcnN0IHRv
dWNoIGFuZCBtdWx0aSBldmVudHMKKyAgICAgICAgLy8gZm9yIHNlY29uZCBhbmQgdGhpcmQgdG91
Y2hlcy4gQmVsb3cgY29kZXMgc2hvdWxkIGJlIGZpeGVkIHdoZW4gdGhlIEV2YXMKKyAgICAgICAg
Ly8gc3VwcG9ydHMgdGhlIHRvdWNoIGV2ZW50cy4KKyAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzc4NSBmb3IgZGV0YWlscy4KKyAgICAgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBv
blRvdWNoRG93biwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQo
bV92aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX1VQLCBvblRvdWNoVXAsIHNkKTsKKyAgICAgICAg
ZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VT
RV9NT1ZFLCBvblRvdWNoTW92ZSwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxs
YmFja19hZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duLCBz
ZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcsIEVWQVNf
Q0FMTEJBQ0tfTVVMVElfVVAsIG9uVG91Y2hVcCwgc2QpOworICAgICAgICBldmFzX29iamVjdF9l
dmVudF9jYWxsYmFja19hZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01VTFRJX01PVkUsIG9uVG91
Y2hNb3ZlLCBzZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2Fs
bGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvblRvdWNoRG93bik7
CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX3ZpZXcsIEVWQVNfQ0FM
TEJBQ0tfTU9VU0VfVVAsIG9uVG91Y2hVcCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2Nh
bGxiYWNrX2RlbChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Ub3VjaE1vdmUp
OworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3LCBFVkFTX0NB
TExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxMQkFDS19NVUxUSV9VUCwgb25Ub3VjaFVw
KTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19D
QUxMQkFDS19NVUxUSV9NT1ZFLCBvblRvdWNoTW92ZSk7CisgICAgfQorfQorI2VuZGlmCisKKy8q
KgorICogQGludGVybmFsCisgKiBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uIGFuZCBlbWl0cyBh
ICJpY29uLGNoYW5nZWQiIHNpZ25hbCBpZiBpdCBoYXMKKyAqIGNoYW5nZWQuCisgKgorICogVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIFVSTCBoYXMgY2hhbmdlZCBvciB3aGVu
IHRoZSBpY29uIGZvcgorICogdGhlIGN1cnJlbnQgcGFnZSBVUkwgaGFzIGNoYW5nZWQuCisgKi8K
K3ZvaWQgRXdrVmlldzo6aW5mb3JtSWNvbkNoYW5nZSgpCit7CisgICAgRXdrRmF2aWNvbkRhdGFi
YXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOworICAgIEFT
U0VSVChpY29uRGF0YWJhc2UpOworCisgICAgbV9mYXZpY29uVVJMID0gZXdrX2Zhdmljb25fZGF0
YWJhc2VfaWNvbl91cmxfZ2V0KGljb25EYXRhYmFzZSwgbV91cmwpOworICAgIHNtYXJ0Q2FsbGJh
Y2s8SWNvbkNoYW5nZWQ+KCkuY2FsbCgpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgdmll
d1NpemUpCit7CisgICAgaWYgKCFtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoIW1fZXZhc0dMKSB7CisgICAgICAgIEV2YXMqIGV2YXMgPSBl
dmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpOworICAgICAgICBtX2V2YXNHTCA9IGFkb3B0UHRy
KGV2YXNfZ2xfbmV3KGV2YXMpKTsKKyAgICAgICAgaWYgKCFtX2V2YXNHTCkgeworICAgICAgICAg
ICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sgdG8gc29mdHdh
cmUgbW9kZS4iKTsKKyAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkID0gZmFsc2U7
CisjaWYgRU5BQkxFKFdFQkdMKQorICAgICAgICAgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOworI2VuZGlmCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fZXZhc0dM
Q29udGV4dCkgeworICAgICAgICBtX2V2YXNHTENvbnRleHQgPSBFdmFzR0xDb250ZXh0OjpjcmVh
dGUobV9ldmFzR0wuZ2V0KCkpOworICAgICAgICBpZiAoIW1fZXZhc0dMQ29udGV4dCkgeworICAg
ICAgICAgICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBHTENvbnRleHQuIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworCisgICAgRXZhc19HTF9Db25maWcgZXZhc0dMQ29uZmln
ID0geworICAgICAgICBFVkFTX0dMX1JHQkFfODg4OCwKKyAgICAgICAgRVZBU19HTF9ERVBUSF9C
SVRfOCwKKyAgICAgICAgRVZBU19HTF9TVEVOQ0lMX05PTkUsCisgICAgICAgIEVWQVNfR0xfT1BU
SU9OU19OT05FLAorICAgICAgICBFVkFTX0dMX01VTFRJU0FNUExFX05PTkUKKyAgICB9OworCisg
ICAgLy8gUmVwbGFjZXMgaWYgbm9uLW51bGwsIGFuZCBmcmVlcyBleGlzdGluZyBzdXJmYWNlIGFm
dGVyIChPd25QdHIpLgorICAgIG1fZXZhc0dMU3VyZmFjZSA9IEV2YXNHTFN1cmZhY2U6OmNyZWF0
ZShtX2V2YXNHTC5nZXQoKSwgJmV2YXNHTENvbmZpZywgdmlld1NpemUpOworICAgIGlmICghbV9l
dmFzR0xTdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFdmFzX05hdGl2ZV9T
dXJmYWNlIG5hdGl2ZVN1cmZhY2U7CisgICAgZXZhc19nbF9uYXRpdmVfc3VyZmFjZV9nZXQobV9l
dmFzR0wuZ2V0KCksIGV2YXNHTFN1cmZhY2UoKSwgJm5hdGl2ZVN1cmZhY2UpOworICAgIGV2YXNf
b2JqZWN0X2ltYWdlX25hdGl2ZV9zdXJmYWNlX3NldChzZC0+aW1hZ2UsICZuYXRpdmVTdXJmYWNl
KTsKKworICAgIGV2YXNfZ2xfbWFrZV9jdXJyZW50KG1fZXZhc0dMLmdldCgpLCBldmFzR0xTdXJm
YWNlKCksIGV2YXNHTENvbnRleHQoKSk7CisKKyAgICBFdmFzX0dMX0FQSSogZ2wgPSBldmFzX2ds
X2FwaV9nZXQobV9ldmFzR0wuZ2V0KCkpOworICAgIGdsLT5nbFZpZXdwb3J0KDAsIDAsIHZpZXdT
aXplLndpZHRoKCkgKyBzZC0+dmlldy54LCB2aWV3U2l6ZS5oZWlnaHQoKSArIHNkLT52aWV3Lnkp
OworICAgIGdsLT5nbENsZWFyQ29sb3IoMS4wLCAxLjAsIDEuMCwgMCk7CisgICAgZ2wtPmdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBF
d2tWaWV3OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKK3sKKyAgICBsYXllclRy
ZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CisKKyAgICBpZiAoIW1faXNIYXJkd2FyZUFj
Y2VsZXJhdGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9ldmFzR0xTdXJm
YWNlKSB7CisgICAgICAgIGlmICghY3JlYXRlR0xTdXJmYWNlKHNpemUoKSkpIHsKKyAgICAgICAg
ICAgIFdBUk4oIkZhaWxlZCB0byBjcmVhdGUgR0xTdXJmYWNlLiIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRXdrVmlldzo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCisvKioK
KyAqIEBpbnRlcm5hbAorICogUmVxdWVzdHMgdG8gc2hvdyBleHRlcm5hbCBjb2xvciBwaWNrZXIu
CisgKi8KK3ZvaWQgRXdrVmlldzo6cmVxdWVzdENvbG9yUGlja2VyKFdLQ29sb3JQaWNrZXJSZXN1
bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQorewor
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+aW5wdXRfcGlja2VyX2NvbG9yX3JlcXVlc3QpOwor
CisgICAgaWYgKCFzZC0+YXBpLT5pbnB1dF9waWNrZXJfY29sb3JfcmVxdWVzdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fY29sb3JQaWNrZXIpCisgICAgICAgIGRpc21pc3NDb2xvclBp
Y2tlcigpOworCisgICAgbV9jb2xvclBpY2tlciA9IEV3a0NvbG9yUGlja2VyOjpjcmVhdGUobGlz
dGVuZXIsIGNvbG9yKTsKKworICAgIHNkLT5hcGktPmlucHV0X3BpY2tlcl9jb2xvcl9yZXF1ZXN0
KHNkLCBtX2NvbG9yUGlja2VyLmdldCgpKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJl
cXVlc3RzIHRvIGhpZGUgZXh0ZXJuYWwgY29sb3IgcGlja2VyLgorICovCit2b2lkIEV3a1ZpZXc6
OmRpc21pc3NDb2xvclBpY2tlcigpCit7CisgICAgaWYgKCFtX2NvbG9yUGlja2VyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmlucHV0X3BpY2tlcl9jb2xv
cl9kaXNtaXNzKTsKKworICAgIGlmIChzZC0+YXBpLT5pbnB1dF9waWNrZXJfY29sb3JfZGlzbWlz
cykKKyAgICAgICAgc2QtPmFwaS0+aW5wdXRfcGlja2VyX2NvbG9yX2Rpc21pc3Moc2QpOworCisg
ICAgbV9jb2xvclBpY2tlci5jbGVhcigpOworfQorI2VuZGlmCisKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oRVdLX1RFWFRfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQsIFJUTCk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKEVXS19URVhUX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hU
LCBMVFIpOworCit2b2lkIEV3a1ZpZXc6OnNob3dDb250ZXh0TWVudShXZWJDb250ZXh0TWVudVBy
b3h5RWZsKiBjb250ZXh0TWVudVByb3h5LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMpCit7CisgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFw
aSk7CisKKyAgICBBU1NFUlQoY29udGV4dE1lbnVQcm94eSk7CisKKyAgICBpZiAoIXNkLT5hcGkt
PmNvbnRleHRfbWVudV9zaG93KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb250ZXh0
TWVudSkKKyAgICAgICAgaGlkZUNvbnRleHRNZW51KCk7CisKKyAgICBtX2NvbnRleHRNZW51ID0g
RXdrX0NvbnRleHRfTWVudTo6Y3JlYXRlKHRoaXMsIGNvbnRleHRNZW51UHJveHksIGl0ZW1zKTsK
KworICAgIHNkLT5hcGktPmNvbnRleHRfbWVudV9zaG93KHNkLCBwb3NpdGlvbi54KCksIHBvc2l0
aW9uLnkoKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6aGlkZUNv
bnRleHRNZW51KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dE1lbnUpCisgICAgICAgIHJldHVybjsK
KworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJU
KHNkLT5hcGkpOworCisgICAgaWYgKHNkLT5hcGktPmNvbnRleHRfbWVudV9oaWRlKQorICAgICAg
ICBzZC0+YXBpLT5jb250ZXh0X21lbnVfaGlkZShzZCk7CisKKyAgICBtX2NvbnRleHRNZW51LmNs
ZWFyKCk7Cit9CisKK3ZvaWQgRXdrVmlldzo6cmVxdWVzdFBvcHVwTWVudShXZWJQb3B1cE1lbnVQ
cm94eUVmbCogcG9wdXBNZW51UHJveHksIGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdl
YlBvcHVwSXRlbT4mIGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CisK
KyAgICBBU1NFUlQocG9wdXBNZW51UHJveHkpOworCisgICAgaWYgKCFzZC0+YXBpLT5wb3B1cF9t
ZW51X3Nob3cpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BvcHVwTWVudSkKKyAgICAg
ICAgY2xvc2VQb3B1cE1lbnUoKTsKKworICAgIG1fcG9wdXBNZW51ID0gRXdrUG9wdXBNZW51Ojpj
cmVhdGUodGhpcywgcG9wdXBNZW51UHJveHksIGl0ZW1zLCBzZWxlY3RlZEluZGV4KTsKKworICAg
IHNkLT5hcGktPnBvcHVwX21lbnVfc2hvdyhzZCwgcmVjdCwgc3RhdGljX2Nhc3Q8RXdrX1RleHRf
RGlyZWN0aW9uPih0ZXh0RGlyZWN0aW9uKSwgcGFnZVNjYWxlRmFjdG9yLCBtX3BvcHVwTWVudS5n
ZXQoKSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6Y2xvc2VQb3B1cE1lbnUoKQoreworICAgIGlmICgh
bV9wb3B1cE1lbnUpCisgICAgICAgIHJldHVybjsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKHNkLT5h
cGktPnBvcHVwX21lbnVfaGlkZSkKKyAgICAgICAgc2QtPmFwaS0+cG9wdXBfbWVudV9oaWRlKHNk
KTsKKworICAgIG1fcG9wdXBNZW51LmNsZWFyKCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisg
KiBDYWxscyBhIHNtYXJ0IG1lbWJlciBmdW5jdGlvbiBmb3IgamF2YXNjcmlwdCBhbGVydCgpLgor
ICovCit2b2lkIEV3a1ZpZXc6OnJlcXVlc3RKU0FsZXJ0UG9wdXAoY29uc3QgV0tFaW5hU2hhcmVk
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnRE
YXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2
YXNjcmlwdF9hbGVydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2QtPmFwaS0+cnVuX2phdmFz
Y3JpcHRfYWxlcnQoc2QsIG1lc3NhZ2UpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQ2Fs
bHMgYSBzbWFydCBtZW1iZXIgZnVuY3Rpb24gZm9yIGphdmFzY3JpcHQgY29uZmlybSgpIGFuZCBy
ZXR1cm5zIGEgdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24uIFJldHVybnMgZmFsc2UgYnkgZGVmYXVs
dC4KKyAqLworYm9vbCBFd2tWaWV3OjpyZXF1ZXN0SlNDb25maXJtUG9wdXAoY29uc3QgV0tFaW5h
U2hhcmVkU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0g
c21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT5y
dW5famF2YXNjcmlwdF9jb25maXJtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybShzZCwgbWVzc2FnZSk7Cit9CisKKy8q
KgorICogQGludGVybmFsCisgKiBDYWxscyBhIHNtYXJ0IG1lbWJlciBmdW5jdGlvbiBmb3IgamF2
YXNjcmlwdCBwcm9tcHQoKSBhbmQgcmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uLiBS
ZXR1cm5zIG51bGwgc3RyaW5nIGJ5IGRlZmF1bHQuCisgKi8KK1dLRWluYVNoYXJlZFN0cmluZyBF
d2tWaWV3OjpyZXF1ZXN0SlNQcm9tcHRQb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmluZyYgZGVmYXVsdFZhbHVlKQoreworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkp
OworCisgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCisgICAgICAgIHJl
dHVybiBXS0VpbmFTaGFyZWRTdHJpbmcoKTsKKworICAgIHJldHVybiBXS0VpbmFTaGFyZWRTdHJp
bmc6OmFkb3B0KHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdChzZCwgbWVzc2FnZSwgZGVm
YXVsdFZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLyoqCisgKiBAaW50
ZXJuYWwKKyAqIENhbGxzIGV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhIGNhbGxiYWNrIG9yIGZhbGxz
IGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvciByZXR1cm5zIGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEu
CisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBFd2tWaWV3OjppbmZvcm1EYXRhYmFzZVF1b3RhUmVh
Y2hlZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1
cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdl
LCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRVc2FnZSkKK3sKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAgIEFTU0VSVChzZC0+YXBpKTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAx
MjA0OyAvLyA1IE1CCisgICAgaWYgKHNkLT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKQor
ICAgICAgICByZXR1cm4gc2QtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoc2QsIGRhdGFi
YXNlTmFtZS51dGY4KCkuZGF0YSgpLCBkaXNwbGF5TmFtZS51dGY4KCkuZGF0YSgpLCBjdXJyZW50
UXVvdGEsIGN1cnJlbnRPcmlnaW5Vc2FnZSwgY3VycmVudERhdGFiYXNlVXNhZ2UsIGV4cGVjdGVk
VXNhZ2UpOworCisgICAgcmV0dXJuIGRlZmF1bHRRdW90YTsKK30KKyNlbmRpZgorCisvKioKKyAq
IEBpbnRlcm5hbAorICogVGhlIHVybCBvZiB2aWV3IHdhcyBjaGFuZ2VkIGJ5IHRoZSBmcmFtZSBs
b2FkZXIuCisgKgorICogRW1pdHMgc2lnbmFsOiAidXJsLGNoYW5nZWQiIHdpdGggcG9pbnRlciB0
byBuZXcgdXJsIHN0cmluZy4KKyAqLwordm9pZCBFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UoKQor
eworICAgIFN0cmluZyBhY3RpdmVVUkwgPSBtX3BhZ2VQcm94eS0+YWN0aXZlVVJMKCk7CisgICAg
aWYgKGFjdGl2ZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTdHJpbmcg
cmF3QWN0aXZlVVJMID0gYWN0aXZlVVJMLnV0ZjgoKTsKKyAgICBpZiAobV91cmwgPT0gcmF3QWN0
aXZlVVJMLmRhdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV91cmwgPSByYXdBY3RpdmVV
UkwuZGF0YSgpOworICAgIHNtYXJ0Q2FsbGJhY2s8VVJMQ2hhbmdlZD4oKS5jYWxsKG1fdXJsKTsK
KworICAgIC8vIFVwZGF0ZSB0aGUgdmlldydzIGZhdmljb24uCisgICAgaW5mb3JtSWNvbkNoYW5n
ZSgpOworfQorCitFd2tXaW5kb3dGZWF0dXJlcyogRXdrVmlldzo6d2luZG93RmVhdHVyZXMoKQor
eworICAgIGlmICghbV93aW5kb3dGZWF0dXJlcykKKyAgICAgICAgbV93aW5kb3dGZWF0dXJlcyA9
IEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUoMCwgdGhpcyk7CisKKyAgICByZXR1cm4gbV93aW5k
b3dGZWF0dXJlcy5nZXQoKTsKK30KKworV0tQYWdlUmVmIEV3a1ZpZXc6OmNyZWF0ZU5ld1BhZ2Uo
UGFzc1JlZlB0cjxFd2tVcmxSZXF1ZXN0PiByZXF1ZXN0LCBJbW11dGFibGVEaWN0aW9uYXJ5KiB3
aW5kb3dGZWF0dXJlcykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0
YSgpOworICAgIEFTU0VSVChzZC0+YXBpKTsKKworICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Ny
ZWF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+
IGV3a1dpbmRvd0ZlYXR1cmVzID0gRXdrV2luZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0
dXJlcywgdGhpcyk7CisKKyAgICBFdmFzX09iamVjdCogbmV3RXdrVmlldyA9IHNkLT5hcGktPndp
bmRvd19jcmVhdGUoc2QsIHJlcXVlc3QtPnVybCgpLCBld2tXaW5kb3dGZWF0dXJlcy5nZXQoKSk7
CisgICAgaWYgKCFuZXdFd2tWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV3a1ZpZXcq
IG5ld1ZpZXdJbXBsID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobmV3RXdrVmlldyk7CisgICAg
QVNTRVJUKG5ld1ZpZXdJbXBsKTsKKworICAgIG5ld1ZpZXdJbXBsLT5tX3dpbmRvd0ZlYXR1cmVz
ID0gZXdrV2luZG93RmVhdHVyZXM7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVm
PihXS1JldGFpbihuZXdWaWV3SW1wbC0+cGFnZSgpKSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6Y2xv
c2UoKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAg
QVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xvc2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7Cit9CisKK3ZvaWQg
RXdrVmlldzo6b25Nb3VzZURvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50ID0g
c3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKKyAgICBzZC0+YXBp
LT5tb3VzZV9kb3duKHNkLCBkb3duRXZlbnQpOworfQorCit2b2lkIEV3a1ZpZXc6Om9uTW91c2VV
cCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7Cisg
ICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRf
TW91c2VfVXAqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGktPm1vdXNlX3VwKTsKKyAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgdXBFdmVudCk7Cit9
CisKK3ZvaWQgRXdrVmlldzo6b25Nb3VzZU1vdmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92
ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZlbnRJbmZvKTsK
KyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9tb3ZlKTsKKyAg
ICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBtb3ZlRXZlbnQpOworfQorCisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKK3ZvaWQgRXdrVmlldzo6ZmVlZFRvdWNoRXZlbnRzKEV3a19Ub3VjaF9FdmVu
dF9UeXBlIHR5cGUpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEo
KTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gZXZhc190b3VjaF9wb2ludF9saXN0X2NvdW50KHNk
LT5iYXNlLmV2YXMpOworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEVp
bmFfTGlzdCogcG9pbnRzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBFd2tfVG91Y2hfUG9pbnQqIHBvaW50ID0gbmV3IEV3a19Ub3VjaF9Q
b2ludDsKKyAgICAgICAgcG9pbnQtPmlkID0gZXZhc190b3VjaF9wb2ludF9saXN0X250aF9pZF9n
ZXQoc2QtPmJhc2UuZXZhcywgaSk7CisgICAgICAgIGV2YXNfdG91Y2hfcG9pbnRfbGlzdF9udGhf
eHlfZ2V0KHNkLT5iYXNlLmV2YXMsIGksICZwb2ludC0+eCwgJnBvaW50LT55KTsKKyAgICAgICAg
cG9pbnQtPnN0YXRlID0gZXZhc190b3VjaF9wb2ludF9saXN0X250aF9zdGF0ZV9nZXQoc2QtPmJh
c2UuZXZhcywgaSk7CisgICAgICAgIHBvaW50cyA9IGVpbmFfbGlzdF9hcHBlbmQocG9pbnRzLCBw
b2ludCk7CisgICAgfQorCisgICAgZXdrX3ZpZXdfZmVlZF90b3VjaF9ldmVudChtX3ZpZXcsIHR5
cGUsIHBvaW50cywgZXZhc19rZXlfbW9kaWZpZXJfZ2V0KHNkLT5iYXNlLmV2YXMpKTsKKworICAg
IHZvaWQqIGRhdGE7CisgICAgRUlOQV9MSVNUX0ZSRUUocG9pbnRzLCBkYXRhKQorICAgICAgICBk
ZWxldGUgc3RhdGljX2Nhc3Q8RXdrX1RvdWNoX1BvaW50Kj4oZGF0YSk7Cit9CisKK3ZvaWQgRXdr
Vmlldzo6b25Ub3VjaERvd24odm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICovLCBF
dmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQoreworICAgIEV3a1Zp
ZXcqIHZpZXdJbXBsID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7CisgICAgdmll
d0ltcGwtPmZlZWRUb3VjaEV2ZW50cyhFV0tfVE9VQ0hfU1RBUlQpOworfQorCit2b2lkIEV3a1Zp
ZXc6Om9uVG91Y2hVcCh2b2lkKiAvKiBkYXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNf
T2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVudEluZm8gKi8pCit7CisgICAgRXdrVmlldyog
dmlld0ltcGwgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3KTsKKyAgICB2aWV3SW1w
bC0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9FTkQpOworfQorCit2b2lkIEV3a1ZpZXc6Om9u
VG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5mbyAqLykKK3sKKyAgICBFd2tWaWV3KiB2aWV3
SW1wbCA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGV3a1ZpZXcpOworICAgIHZpZXdJbXBsLT5m
ZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX01PVkUpOworfQorI2VuZGlmCisKK3ZvaWQgRXdrVmll
dzo6b25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8p
Cit7CisgICAgRXdrVmlldyogdmlld0ltcGwgPSBzdGF0aWNfY2FzdDxFd2tWaWV3Kj4oZXZlbnRJ
bmZvKTsKKworICAgIGlmICghdmlld0ltcGwtPnVybCgpIHx8IHN0cmNhc2VjbXAodmlld0ltcGwt
PnVybCgpLCBwYWdlVVJMKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlld0ltcGwtPmluZm9y
bUljb25DaGFuZ2UoKTsKK30KKworUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6
OnRha2VTbmFwc2hvdCgpCit7CisgICAgLy8gU3VzcGVuZCBhbGwgYW5pbWF0aW9ucyBiZWZvcmUg
dGFraW5nIHRoZSBzbmFwc2hvdC4KKyAgICBtX3BhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHNBbmRBbmltYXRpb25zKCk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgcGVuZGluZyByZXBh
aW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCisgICAgd2hpbGUgKG1fZGlzcGxheVRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBpZiAoIW1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKSB7CisjZW5kaWYK
KyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBjcmVhdGVTdXJmYWNl
Rm9ySW1hZ2Uoc2QtPmltYWdlKTsKKyAgICAgICAgLy8gUmVzdW1lIGFsbCBhbmltYXRpb25zLgor
ICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KTsKKworICAgICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICB9CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBz
bmFwc2hvdCA9IGdldEltYWdlU3VyZmFjZUZyb21GcmFtZUJ1ZmZlcigwLCAwLCBzZC0+dmlldy53
LCBzZC0+dmlldy5oKTsKKyAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCisgICAgbV9wYWdl
UHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisKKyAgICByZXR1
cm4gc25hcHNob3QucmVsZWFzZSgpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZDhkNWVmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaApAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAgIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBFd2tWaWV3X2gKKyNkZWZp
bmUgRXdrVmlld19oCisKKyNpbmNsdWRlICJFd2tWaWV3Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAi
SW1tdXRhYmxlRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIlJlZlB0ckVmbC5oIgorI2luY2x1ZGUg
IldLRWluYVNoYXJlZFN0cmluZy5oIgorI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKKyNpbmNsdWRl
ICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgiCisj
aW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1RleHREaXJlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Rp
bWVyLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorI2luY2x1ZGUgImV3a190b3VjaC5oIgorI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjaW5jbHVkZSAiRXZhc0dMQ29udGV4dC5oIgorI2luY2x1ZGUgIkV2YXNH
TFN1cmZhY2UuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIENvbnRleHRN
ZW51Q2xpZW50RWZsOworY2xhc3MgRmluZENsaWVudEVmbDsKK2NsYXNzIEZvcm1DbGllbnRFZmw7
CitjbGFzcyBJbnB1dE1ldGhvZENvbnRleHRFZmw7CitjbGFzcyBQYWdlQ2xpZW50QmFzZTsKK2Ns
YXNzIFBhZ2VMb2FkQ2xpZW50RWZsOworY2xhc3MgUGFnZVBvbGljeUNsaWVudEVmbDsKK2NsYXNz
IFBhZ2VVSUNsaWVudEVmbDsKK2NsYXNzIFdlYkNvbnRleHRNZW51SXRlbURhdGE7CitjbGFzcyBX
ZWJDb250ZXh0TWVudVByb3h5RWZsOworY2xhc3MgV2ViUGFnZUdyb3VwOworY2xhc3MgV2ViUGFn
ZVByb3h5OworY2xhc3MgV2ViUG9wdXBJdGVtOworY2xhc3MgV2ViUG9wdXBNZW51UHJveHlFZmw7
CisKKyNpZiBFTkFCTEUoVklCUkFUSU9OKQorY2xhc3MgVmlicmF0aW9uQ2xpZW50RWZsOworI2Vu
ZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCitjbGFzcyBMYXllclRyZWVSZW5k
ZXJlcjsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CitjbGFzcyBDb2xvcjsKK2NsYXNzIEN1cnNvcjsKK2NsYXNzIEludFNpemU7Cit9CisK
K2NsYXNzIEV3a0NvbnRleHQ7CitjbGFzcyBFd2tCYWNrRm9yd2FyZExpc3Q7CitjbGFzcyBFd2tD
b2xvclBpY2tlcjsKK2NsYXNzIEV3a0NvbnRleHRNZW51OworY2xhc3MgRXdrUG9wdXBNZW51Owor
Y2xhc3MgRXdrU2V0dGluZ3M7CitjbGFzcyBFd2tXaW5kb3dGZWF0dXJlczsKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQg
RXZhc19HTF9Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dM
X1N1cmZhY2U7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfRGF0YSBF
d2tfVmlld19TbWFydF9EYXRhOworCitjbGFzcyBFd2tWaWV3IHsKK3B1YmxpYzoKKworICAgIGVu
dW0gVmlld0JlaGF2aW9yIHsKKyAgICAgICAgTGVnYWN5QmVoYXZpb3IsCisgICAgICAgIERlZmF1
bHRCZWhhdmlvcgorICAgIH07CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZUdyb3Vw
PiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAgfkV3a1ZpZXcoKTsKKworICAgIHN0YXRp
YyBFd2tWaWV3KiBmcm9tRXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCogdmlldyk7CisgICAg
RXZhc19PYmplY3QqIHZpZXcoKSB7IHJldHVybiBtX3ZpZXc7IH0KKworICAgIFdLUGFnZVJlZiB3
a1BhZ2UoKTsKKyAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fcGFn
ZVByb3h5LmdldCgpOyB9CisgICAgRXdrQ29udGV4dCogZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsgfQorICAgIEV3a1NldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1f
c2V0dGluZ3MuZ2V0KCk7IH0KKyAgICBFd2tCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlz
dCgpIHsgcmV0dXJuIG1fYmFja0ZvcndhcmRMaXN0LmdldCgpOyB9CisgICAgRXdrV2luZG93RmVh
dHVyZXMqIHdpbmRvd0ZlYXR1cmVzKCk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBj
b25zdDsKKyAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0OworICAgIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3Q7CisKKyAgICB2b2lkIHNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKTsKKyAg
ICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0OworCisgICAgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtRnJvbVNjZW5lKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybVRvU2NyZWVuKCkgY29uc3Q7CisKKyAgICBjb25zdCBjaGFyKiB1
cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGNvbnN0IGNoYXIqIGZhdmljb25VUkwo
KSBjb25zdCB7IHJldHVybiBtX2Zhdmljb25VUkw7IH0KKyAgICBjb25zdCBjaGFyKiB0aXRsZSgp
IGNvbnN0OworICAgIFdlYktpdDo6SW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENv
bnRleHQoKTsKKworICAgIGNvbnN0IGNoYXIqIHRoZW1lUGF0aCgpIGNvbnN0OworICAgIHZvaWQg
c2V0VGhlbWVQYXRoKGNvbnN0IGNoYXIqIHRoZW1lKTsKKyAgICBjb25zdCBjaGFyKiBjdXN0b21U
ZXh0RW5jb2RpbmdOYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXN0b21UZXh0RW5jb2RpbmdO
YW1lKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpOworCisgICAgYm9vbCBtb3VzZUV2ZW50c0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX21vdXNlRXZlbnRzRW5hYmxlZDsgfQorICAgIHZvaWQgc2V0
TW91c2VFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCk7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKKyAgICBib29sIHRvdWNoRXZlbnRzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hF
dmVudHNFbmFibGVkOyB9CisgICAgdm9pZCBzZXRUb3VjaEV2ZW50c0VuYWJsZWQoYm9vbCBlbmFi
bGVkKTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29y
JiBjdXJzb3IpOworICAgIHZvaWQgc2V0SW1hZ2VEYXRhKHZvaWQqIGltYWdlRGF0YSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSk7CisKKyAgICB2b2lkIHVwZGF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgpKTsKKworICAgIHN0YXRpYyB2b2lk
IGFkZFRvUGFnZVZpZXdNYXAoRXdrVmlldyogdmlld0ltcGwpOworICAgIHN0YXRpYyB2b2lkIHJl
bW92ZUZyb21QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3SW1wbCk7CisgICAgc3RhdGljIGNvbnN0
IEV2YXNfT2JqZWN0KiB2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZik7CisKKyNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKKyAg
ICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisjZW5kaWYKKworICAgIFdLUmVjdCB3aW5kb3dHZW9t
ZXRyeSgpIGNvbnN0OworICAgIHZvaWQgc2V0V2luZG93R2VvbWV0cnkoY29uc3QgV0tSZWN0Jik7
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgYm9vbCBjcmVhdGVHTFN1
cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUpOworICAgIGJvb2wgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCk7CisgICAgdm9pZCBzZXROZWVkc1N1cmZhY2VSZXNpemUoKSB7IG1fcGVu
ZGluZ1N1cmZhY2VSZXNpemUgPSB0cnVlOyB9CisjZW5kaWYKKworI2lmIEVOQUJMRShJTlBVVF9U
WVBFX0NPTE9SKQorICAgIHZvaWQgcmVxdWVzdENvbG9yUGlja2VyKFdLQ29sb3JQaWNrZXJSZXN1
bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2b2lk
IGRpc21pc3NDb2xvclBpY2tlcigpOworI2VuZGlmCisKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3
UGFnZShQYXNzUmVmUHRyPEV3a1VybFJlcXVlc3Q+LCBXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25h
cnkqIHdpbmRvd0ZlYXR1cmVzKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIHJlcXVl
c3RQb3B1cE1lbnUoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9y
LCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBzZWxl
Y3RlZEluZGV4KTsKKyAgICB2b2lkIGNsb3NlUG9wdXBNZW51KCk7CisgICAgCisgICAgdm9pZCBz
aG93Q29udGV4dE1lbnUoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5RWZsKiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiYgaXRlbXMpOworICAgIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7CisKKyAg
ICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RKU0FsZXJ0
UG9wdXAoY29uc3QgV0tFaW5hU2hhcmVkU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBib29sIHJlcXVl
c3RKU0NvbmZpcm1Qb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UpOworICAg
IFdLRWluYVNoYXJlZFN0cmluZyByZXF1ZXN0SlNQcm9tcHRQb3B1cChjb25zdCBXS0VpbmFTaGFy
ZWRTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmluZyYgZGVmYXVsdFZhbHVl
KTsKKworICAgIHRlbXBsYXRlPEV3a1ZpZXdDYWxsYmFja3M6OkNhbGxiYWNrVHlwZSBjYWxsYmFj
a1R5cGU+CisgICAgRXdrVmlld0NhbGxiYWNrczo6Q2FsbEJhY2s8Y2FsbGJhY2tUeXBlPiBzbWFy
dENhbGxiYWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBFd2tWaWV3Q2FsbGJhY2tz
OjpDYWxsQmFjazxjYWxsYmFja1R5cGU+KG1fdmlldyk7CisgICAgfQorCisgICAgdW5zaWduZWQg
bG9uZyBsb25nIGluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VOYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3Vy
cmVudFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25l
ZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBl
Y3RlZFVzYWdlKTsKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIFdlYktpdDo6
UGFnZUNsaWVudEJhc2UqIHBhZ2VDbGllbnQoKSB7IHJldHVybiBtX3BhZ2VDbGllbnQuZ2V0KCk7
IH0KKworICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1f
cGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KKyAgICBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQorCisgICAgdm9pZCBzZXRQ
YWdlUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wYWdl
UG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFn
ZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUG9zaXRpb247IH0KKyNlbmRpZgorCisg
ICAgLy8gRklYTUU6IG5lZWRzIHJlZmFjdG9yaW5nIChzcGxpdCBjYWxsYmFjayBpbnZva2UpCisg
ICAgdm9pZCBpbmZvcm1VUkxDaGFuZ2UoKTsKKworICAgIGJvb2wgaXNIYXJkd2FyZUFjY2VsZXJh
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQ7IH0KKyAgICB2b2lk
IHNldERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9
IGVuYWJsZTsgfQorCisgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hv
dCgpOworCitwcml2YXRlOgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBF
dmFzX0dMX0NvbnRleHQqIGV2YXNHTENvbnRleHQoKSB7IHJldHVybiBtX2V2YXNHTENvbnRleHQg
PyBtX2V2YXNHTENvbnRleHQtPmNvbnRleHQoKSA6IDA7IH0KKyAgICBFdmFzX0dMX1N1cmZhY2Uq
IGV2YXNHTFN1cmZhY2UoKSB7IHJldHVybiBtX2V2YXNHTFN1cmZhY2UgPyBtX2V2YXNHTFN1cmZh
Y2UtPnN1cmZhY2UoKSA6IDA7IH0KKyNlbmRpZgorCisgICAgaW5saW5lIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworICAgIHZvaWQgZGlzcGxheVRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8RXdrVmlldz4qKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyAgICBXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpOworI2Vu
ZGlmCisKKyAgICB2b2lkIGluZm9ybUljb25DaGFuZ2UoKTsKKworICAgIHN0YXRpYyB2b2lkIG9u
TW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5m
byk7CisgICAgc3RhdGljIHZvaWQgb25Nb3VzZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgb25Nb3VzZU1vdmUodm9p
ZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgZmVlZFRvdWNoRXZlbnRzKEV3a19Ub3VjaF9FdmVu
dF9UeXBlIHR5cGUpOworICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hEb3duKHZvaWQqIC8qIGRhdGEg
Ki8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2
ZW50SW5mbyAqLyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaFVwKHZvaWQqIC8qIGRhdGEgKi8s
IEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50
SW5mbyAqLyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaE1vdmUodm9pZCogLyogZGF0YSAqLywg
RXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJ
bmZvICovKTsKKyNlbmRpZgorICAgIHN0YXRpYyB2b2lkIG9uRmF2aWNvbkNoYW5nZWQoY29uc3Qg
Y2hhciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKTsKKworICAgIC8vIE5vdGUsIGluaXRpYWxp
emF0aW9uIG9yZGVyIG1hdHRlcnMuCisgICAgRXZhc19PYmplY3QqIG1fdmlldzsKKyAgICBSZWZQ
dHI8RXdrQ29udGV4dD4gbV9jb250ZXh0OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICBPd25QdHI8RXZhc19HTD4gbV9ldmFzR0w7CisgICAgT3duUHRyPFdlYktpdDo6RXZh
c0dMQ29udGV4dD4gbV9ldmFzR0xDb250ZXh0OworICAgIE93blB0cjxXZWJLaXQ6OkV2YXNHTFN1
cmZhY2U+IG1fZXZhc0dMU3VyZmFjZTsKKyAgICBib29sIG1fcGVuZGluZ1N1cmZhY2VSZXNpemU7
CisjZW5kaWYKKyAgICBPd25QdHI8V2ViS2l0OjpQYWdlQ2xpZW50QmFzZT4gbV9wYWdlQ2xpZW50
OworICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gbV9wYWdlUHJveHk7CisgICAgT3du
UHRyPFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CisgICAgT3du
UHRyPFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OworICAg
IE93blB0cjxXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CisgICAgT3du
UHRyPFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRFZmw+IG1fY29udGV4dE1lbnVDbGllbnQ7Cisg
ICAgT3duUHRyPFdlYktpdDo6RmluZENsaWVudEVmbD4gbV9maW5kQ2xpZW50OworICAgIE93blB0
cjxXZWJLaXQ6OkZvcm1DbGllbnRFZmw+IG1fZm9ybUNsaWVudDsKKyNpZiBFTkFCTEUoVklCUkFU
SU9OKQorICAgIE93blB0cjxXZWJLaXQ6OlZpYnJhdGlvbkNsaWVudEVmbD4gbV92aWJyYXRpb25D
bGllbnQ7CisjZW5kaWYKKyAgICBPd25QdHI8RXdrQmFja0ZvcndhcmRMaXN0PiBtX2JhY2tGb3J3
YXJkTGlzdDsKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBmbG9hdCBtX3BhZ2VT
Y2FsZUZhY3RvcjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fcGFnZVBvc2l0aW9uOworI2Vu
ZGlmCisgICAgT3duUHRyPEV3a1NldHRpbmdzPiBtX3NldHRpbmdzOworICAgIFJlZlB0cjxFd2tX
aW5kb3dGZWF0dXJlcz4gbV93aW5kb3dGZWF0dXJlczsKKyAgICBjb25zdCB2b2lkKiBtX2N1cnNv
cklkZW50aWZpZXI7IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywgZG8gbm90IGZyZWUgaXQuCisgICAg
V0tFaW5hU2hhcmVkU3RyaW5nIG1fZmF2aWNvblVSTDsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcg
bV91cmw7CisgICAgbXV0YWJsZSBXS0VpbmFTaGFyZWRTdHJpbmcgbV90aXRsZTsKKyAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgbV90aGVtZTsKKyAgICBtdXRhYmxlIFdLRWluYVNoYXJlZFN0cmluZyBt
X2N1c3RvbUVuY29kaW5nOworICAgIGJvb2wgbV9tb3VzZUV2ZW50c0VuYWJsZWQ7CisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBib29sIG1fdG91Y2hFdmVudHNFbmFibGVkOworI2VuZGlm
CisgICAgV2ViQ29yZTo6VGltZXI8RXdrVmlldz4gbV9kaXNwbGF5VGltZXI7CisgICAgT3duUHRy
PEV3a0NvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OworICAgIE93blB0cjxFd2tQb3B1cE1lbnU+
IG1fcG9wdXBNZW51OworICAgIE93blB0cjxXZWJLaXQ6OklucHV0TWV0aG9kQ29udGV4dEVmbD4g
bV9pbnB1dE1ldGhvZENvbnRleHQ7CisjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCisgICAg
T3duUHRyPEV3a0NvbG9yUGlja2VyPiBtX2NvbG9yUGlja2VyOworI2VuZGlmCisgICAgYm9vbCBt
X2lzSGFyZHdhcmVBY2NlbGVyYXRlZDsKKyAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3JvdW5kOwor
fTsKKworI2VuZGlmIC8vIEV3a1ZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
NWZiMWQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXdJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNTcgKzAsMCBAQAotLyoKLSAgIENv
cHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCi0KLSNpbmNsdWRlICJDb250ZXh0
TWVudUNsaWVudEVmbC5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
LmgiCi0jaW5jbHVkZSAiRWZsU2NyZWVuVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRmluZENsaWVu
dEVmbC5oIgotI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKLSNpbmNsdWRlICJJbnB1dE1ldGhv
ZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgotI2luY2x1ZGUg
IlBhZ2VDbGllbnRCYXNlLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCi0j
aW5jbHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIKLSNpbmNsdWRlICJQYWdlTG9hZENsaWVu
dEVmbC5oIgotI2luY2x1ZGUgIlBhZ2VQb2xpY3lDbGllbnRFZmwuaCIKLSNpbmNsdWRlICJQYWdl
VUlDbGllbnRFZmwuaCIKLSNpbmNsdWRlICJTbmFwc2hvdEltYWdlR0wuaCIKLSNpbmNsdWRlICJX
S0RpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCi0jaW5jbHVkZSAiV0tOdW1i
ZXIuaCIKLSNpbmNsdWRlICJXS1N0cmluZy5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKLSNp
bmNsdWRlICJXZWJJbWFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5RWZsLmgiCi0jaW5j
bHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3Rf
cHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19jb2xvcl9waWNrZXJfcHJpdmF0ZS5oIgotI2luY2x1
ZGUgImV3a19jb250ZXh0X21lbnVfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19jb250ZXh0X3By
aXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCi0jaW5j
bHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbV9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3BvcHVw
X21lbnVfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdr
X3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZh
dGUuaCIKLSNpbmNsdWRlICJld2tfdmlldy5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUu
aCIKLSNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxF
Y29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RWNvcmVfWC5oPgotI2luY2x1ZGUgPEVkamUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9D
dXJzb3IuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgotCi0jaWYgRU5BQkxF
KFZJQlJBVElPTikKLSNpbmNsdWRlICJWaWJyYXRpb25DbGllbnRFZmwuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHkuaCIKLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2lu
Y2x1ZGUgPEV2YXNfR0wuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxi
YWNrczsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LQotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6ZSA9IDE2OwotCi10eXBlZGVmIEhh
c2hNYXA8V0tQYWdlUmVmLCBFdmFzX09iamVjdCo+IFBhZ2VWaWV3TWFwOwotCi1zdGF0aWMgaW5s
aW5lIFBhZ2VWaWV3TWFwJiBwYWdlVmlld01hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChQYWdlVmlld01hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdm9pZCBFd2tW
aWV3SW1wbDo6YWRkVG9QYWdlVmlld01hcChFd2tWaWV3SW1wbCogdmlld0ltcGwpCi17Ci0gICAg
UGFnZVZpZXdNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBwYWdlVmlld01hcCgpLmFkZCh2aWV3SW1w
bC0+d2tQYWdlKCksIHZpZXdJbXBsLT52aWV3KCkpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnJlbW92ZUZyb21Q
YWdlVmlld01hcChFd2tWaWV3SW1wbCogdmlld0ltcGwpCi17Ci0gICAgQVNTRVJUKHBhZ2VWaWV3
TWFwKCkuY29udGFpbnModmlld0ltcGwtPndrUGFnZSgpKSk7Ci0gICAgcGFnZVZpZXdNYXAoKS5y
ZW1vdmUodmlld0ltcGwtPndrUGFnZSgpKTsKLX0KLQotY29uc3QgRXZhc19PYmplY3QqIEV3a1Zp
ZXdJbXBsOjp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZiBwYWdlKQotewotICAg
IEFTU0VSVChwYWdlKTsKLQotICAgIHJldHVybiBwYWdlVmlld01hcCgpLmdldChwYWdlKTsKLX0K
LQotRXdrVmlld0ltcGw6OkV3a1ZpZXdJbXBsKEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAs
IFZpZXdCZWhhdmlvciBiZWhhdmlvcikKLSAgICA6IG1fdmlldyh2aWV3KQotICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICwgbV9w
ZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKLSNlbmRpZgotICAgICwgbV9wYWdlQ2xpZW50KGJl
aGF2aW9yID09IERlZmF1bHRCZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRl
KHRoaXMpIDogUGFnZUNsaWVudExlZ2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fcGFn
ZVByb3h5KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNsaWVu
dC5nZXQoKSwgcGFnZUdyb3VwLmdldCgpKSkKLSAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxv
YWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdl
UG9saWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3BhZ2VVSUNsaWVudChQYWdl
VUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fY29udGV4dE1lbnVDbGllbnQoQ29u
dGV4dE1lbnVDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fZmluZENsaWVudChGaW5k
Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2Zvcm1DbGllbnQoRm9ybUNsaWVudEVm
bDo6Y3JlYXRlKHRoaXMpKQotI2lmIEVOQUJMRShWSUJSQVRJT04pCi0gICAgLCBtX3ZpYnJhdGlv
bkNsaWVudChWaWJyYXRpb25DbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSNlbmRpZgotICAgICwg
bV9iYWNrRm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUodG9BUEkobV9wYWdl
UHJveHktPmJhY2tGb3J3YXJkTGlzdCgpKSkpCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQotI2VuZGlmCi0gICAgLCBtX3NldHRpbmdzKEV3
a1NldHRpbmdzOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2N1cnNvcklkZW50aWZpZXIoMCkKLSAg
ICAsIG1fbW91c2VFdmVudHNFbmFibGVkKGZhbHNlKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgLCBtX3RvdWNoRXZlbnRzRW5hYmxlZChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9kaXNw
bGF5VGltZXIodGhpcywgJkV3a1ZpZXdJbXBsOjpkaXNwbGF5VGltZXJGaXJlZCkKLSAgICAsIG1f
aW5wdXRNZXRob2RDb250ZXh0KElucHV0TWV0aG9kQ29udGV4dEVmbDo6Y3JlYXRlKHRoaXMsIHNt
YXJ0RGF0YSgpLT5iYXNlLmV2YXMpKQotICAgICwgbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQodHJ1
ZSkKLSAgICAsIG1fc2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNlKQotewotICAgIEFTU0VSVChtX3Zp
ZXcpOwotICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIEFTU0VSVChtX3BhZ2VQcm94eSk7Ci0K
LSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVl
KTsKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZvcmNl
Q29tcG9zaXRpbmdNb2RlKHRydWUpOwotI2lmIEVOQUJMRShXRUJHTCkKLSAgICBtX3BhZ2VQcm94
eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldFdlYkdMRW5hYmxlZCh0cnVlKTsKLSNl
bmRpZgotICAgIGlmIChiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpCi0gICAgICAgIG1fcGFn
ZVByb3h5LT5zZXRVc2VGaXhlZExheW91dCh0cnVlKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlUHJv
eHktPmluaXRpYWxpemVXZWJQYWdlKCk7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0g
ICAgbV9wYWdlUHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcobV92aWV3KTsK
LSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZ1bGxTY3Jl
ZW5FbmFibGVkKHRydWUpOwotI2VuZGlmCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICBtX3Bh
Z2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldFdlYkF1ZGlvRW5hYmxlZCh0
cnVlKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNl
cygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7Ci0KLSAgICAv
LyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1bHQKLSAgICBzZXRNb3VzZUV2ZW50c0VuYWJs
ZWQodHJ1ZSk7Ci0KLSAgICAvLyBMaXN0ZW4gZm9yIGZhdmljb24gY2hhbmdlcy4KLSAgICBFd2tG
YXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNl
KCk7Ci0gICAgQVNTRVJUKGljb25EYXRhYmFzZSk7Ci0KLSAgICBpY29uRGF0YWJhc2UtPndhdGNo
Q2hhbmdlcyhJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKEV3a1ZpZXdJbXBsOjpvbkZhdmljb25DaGFu
Z2VkLCB0aGlzKSk7Ci0KLSAgICBFd2tWaWV3SW1wbDo6YWRkVG9QYWdlVmlld01hcCh0aGlzKTsK
LX0KLQotRXdrVmlld0ltcGw6On5Fd2tWaWV3SW1wbCgpCi17Ci0gICAgbV9wYWdlUHJveHktPmNs
b3NlKCk7Ci0KLSAgICAvLyBVbnJlZ2lzdGVyIGljb24gY2hhbmdlIGNhbGxiYWNrLgotICAgIEV3
a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJh
c2UoKTsKLSAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsKLQotICAgIGljb25EYXRhYmFzZS0+dW53
YXRjaENoYW5nZXMoRXdrVmlld0ltcGw6Om9uRmF2aWNvbkNoYW5nZWQpOwotCi0gICAgRXdrVmll
d0ltcGw6OnJlbW92ZUZyb21QYWdlVmlld01hcCh0aGlzKTsKLX0KLQotRXdrX1ZpZXdfU21hcnRf
RGF0YSogRXdrVmlld0ltcGw6OnNtYXJ0RGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldCht
X3ZpZXcpKTsKLX0KLQotRXdrVmlld0ltcGwqIEV3a1ZpZXdJbXBsOjpmcm9tRXZhc09iamVjdChj
b25zdCBFdmFzX09iamVjdCogdmlldykKLXsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZh
c19vYmplY3Rfc21hcnRfZGF0YV9nZXQodmlldykpOwotICAgIEFTU0VSVChzZCk7Ci0gICAgQVNT
RVJUKHNkLT5wcml2KTsKLSAgICByZXR1cm4gc2QtPnByaXY7Ci19Ci0KLS8qKgotICogQGludGVy
bmFsCi0gKiBSZXRyaWV2ZXMgdGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2aWV3LgotICov
Ci1XS1BhZ2VSZWYgRXdrVmlld0ltcGw6OndrUGFnZSgpCi17Ci0gICAgcmV0dXJuIHRvQVBJKG1f
cGFnZVByb3h5LmdldCgpKTsKLX0KLQotdm9pZCBFd2tWaWV3SW1wbDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3Vyc29yKQotewotICAgIGlmIChjdXJzb3IuaW1hZ2UoKSkgewotICAgICAgICAv
LyBDdXN0b20gY3Vyc29yLgotICAgICAgICBpZiAoY3Vyc29yLmltYWdlKCkgPT0gbV9jdXJzb3JJ
ZGVudGlmaWVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fY3Vyc29ySWRlbnRp
ZmllciA9IGN1cnNvci5pbWFnZSgpOwotCi0gICAgICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
ID0gc21hcnREYXRhKCk7Ci0gICAgICAgIFJlZlB0cjxFdmFzX09iamVjdD4gY3Vyc29yT2JqZWN0
ID0gYWRvcHRSZWYoY3Vyc29yLmltYWdlKCktPmdldEV2YXNPYmplY3Qoc2QtPmJhc2UuZXZhcykp
OwotICAgICAgICBpZiAoIWN1cnNvck9iamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAvLyBSZXNpemUgY3Vyc29yLgotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY3Vyc29y
T2JqZWN0LmdldCgpLCBjdXJzb3IuaW1hZ2UoKS0+c2l6ZSgpLndpZHRoKCksIGN1cnNvci5pbWFn
ZSgpLT5zaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIEdldCBjdXJzb3IgaG90IHNwb3Qu
Ci0gICAgICAgIEludFBvaW50IGhvdFNwb3Q7Ci0gICAgICAgIGN1cnNvci5pbWFnZSgpLT5nZXRI
b3RTcG90KGhvdFNwb3QpOwotCi0gICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3Jl
X2V2YXNfZWNvcmVfZXZhc19nZXQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgICAgIC8vIGVjb3JlX2V2
YXMgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHRoZSBjdXJzb3Igb2JqZWN0LgotICAgICAgICBlY29y
ZV9ldmFzX29iamVjdF9jdXJzb3Jfc2V0KGVjb3JlRXZhcywgY3Vyc29yT2JqZWN0LnJlbGVhc2Uo
KS5sZWFrUmVmKCksIEVWQVNfTEFZRVJfTUFYLCBob3RTcG90LngoKSwgaG90U3BvdC55KCkpOwot
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdGFuZGFyZCBjdXJzb3IuCi0gICAg
Y29uc3QgY2hhciogZ3JvdXAgPSBjdXJzb3IucGxhdGZvcm1DdXJzb3IoKTsKLSAgICBpZiAoIWdy
b3VwIHx8IGdyb3VwID09IG1fY3Vyc29ySWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9jdXJzb3JJZGVudGlmaWVyID0gZ3JvdXA7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QgPSBzbWFydERhdGEoKTsKLSAgICBSZWZQdHI8RXZhc19PYmplY3Q+IGN1cnNvck9iamVjdCA9
IGFkb3B0UmVmKGVkamVfb2JqZWN0X2FkZChzZC0+YmFzZS5ldmFzKSk7Ci0KLSAgICBFY29yZV9F
dmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5iYXNlLmV2YXMp
OwotICAgIGlmICghbV90aGVtZSB8fCAhZWRqZV9vYmplY3RfZmlsZV9zZXQoY3Vyc29yT2JqZWN0
LmdldCgpLCBtX3RoZW1lLCBncm91cCkpIHsKLSAgICAgICAgZWNvcmVfZXZhc19vYmplY3RfY3Vy
c29yX3NldChlY29yZUV2YXMsIDAsIDAsIDAsIDApOwotI2lmZGVmIEhBVkVfRUNPUkVfWAotICAg
ICAgICBpZiAoV2ViQ29yZTo6aXNVc2luZ0Vjb3JlWChzZC0+YmFzZS5ldmFzKSkKLSAgICAgICAg
ICAgIFdlYkNvcmU6OmFwcGx5RmFsbGJhY2tDdXJzb3IoZWNvcmVFdmFzLCBncm91cCk7Ci0jZW5k
aWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNldCBjdXJzb3Igc2l6ZS4KLSAg
ICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7Ci0gICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5fZ2V0
KGN1cnNvck9iamVjdC5nZXQoKSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBpZiAod2lkdGggPD0g
MCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5fY2FsYyhjdXJz
b3JPYmplY3QuZ2V0KCksICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDApIHsKLSAgICAgICAgd2lkdGggPSBkZWZhdWx0Q3Vyc29yU2l6ZTsKLSAgICAg
ICAgaGVpZ2h0ID0gZGVmYXVsdEN1cnNvclNpemU7Ci0gICAgfQotICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShjdXJzb3JPYmplY3QuZ2V0KCksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gR2V0IGN1
cnNvciBob3Qgc3BvdC4KLSAgICBjb25zdCBjaGFyKiBkYXRhOwotICAgIGludCBob3RzcG90WCA9
IDA7Ci0gICAgZGF0YSA9IGVkamVfb2JqZWN0X2RhdGFfZ2V0KGN1cnNvck9iamVjdC5nZXQoKSwg
ImhvdC54Iik7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGhvdHNwb3RYID0gYXRvaShkYXRhKTsK
LQotICAgIGludCBob3RzcG90WSA9IDA7Ci0gICAgZGF0YSA9IGVkamVfb2JqZWN0X2RhdGFfZ2V0
KGN1cnNvck9iamVjdC5nZXQoKSwgImhvdC55Iik7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGhv
dHNwb3RZID0gYXRvaShkYXRhKTsKLQotICAgIC8vIGVjb3JlX2V2YXMgdGFrZXMgY2FyZSBvZiBm
cmVlaW5nIHRoZSBjdXJzb3Igb2JqZWN0LgotICAgIGVjb3JlX2V2YXNfb2JqZWN0X2N1cnNvcl9z
ZXQoZWNvcmVFdmFzLCBjdXJzb3JPYmplY3QucmVsZWFzZSgpLmxlYWtSZWYoKSwgRVZBU19MQVlF
Ul9NQVgsIGhvdHNwb3RYLCBob3RzcG90WSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnNldERl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQotewotICAgIHBhZ2UoKS0+c2V0SW50cmluc2lj
RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGUpOwotfQotCi1mbG9hdCBFd2tWaWV3SW1wbDo6ZGV2aWNl
U2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2VQcm94eS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEV3a1ZpZXdJbXBsOjp0cmFuc2Zvcm1G
cm9tU2NlbmUoKSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0KLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgYm90
aCBwYWdlIGFuZCBkZXZpY2Ugc2NhbGUgZmFjdG9ycy4KLSAgICB0cmFuc2Zvcm0uc2NhbGUoMSAv
IHBhZ2VTY2FsZUZhY3RvcigpKTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoMSAvIGRldmljZVNjYWxl
RmFjdG9yKCkpOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUocGFnZVBvc2l0aW9uKCkueCgpLCBw
YWdlUG9zaXRpb24oKS55KCkpOwotI2VuZGlmCi0KLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCA9IHNtYXJ0RGF0YSgpOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXNkLT52aWV3LngsIC1z
ZC0+dmlldy55KTsKLQotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KLUFmZmluZVRyYW5zZm9y
bSBFd2tWaWV3SW1wbDo6dHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRy
YW5zZm9ybUZyb21TY2VuZSgpLmludmVyc2UoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEV3a1Zp
ZXdJbXBsOjp0cmFuc2Zvcm1Ub1NjcmVlbigpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybTsKLQotICAgIGludCB3aW5kb3dHbG9iYWxYID0gMDsKLSAgICBpbnQgd2luZG93
R2xvYmFsWSA9IDA7Ci0KLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgp
OwotCi0jaWZkZWYgSEFWRV9FQ09SRV9YCi0gICAgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0gZWNv
cmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKLQotICAgIEVjb3JlX1hfV2lu
ZG93IHdpbmRvdzsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgd2luZG93
ID0gZWNvcmVfZXZhc19nbF94MTFfd2luZG93X2dldChlY29yZUV2YXMpOwotICAgIC8vIEZhbGxi
YWNrIHRvIHNvZnR3YXJlIG1vZGUgaWYgbmVjZXNzYXJ5LgotICAgIGlmICghd2luZG93KQotI2Vu
ZGlmCi0gICAgd2luZG93ID0gZWNvcmVfZXZhc19zb2Z0d2FyZV94MTFfd2luZG93X2dldChlY29y
ZUV2YXMpOyAvLyBSZXR1cm5zIDAgaWYgbm9uZS4KLQotICAgIGludCB4LCB5OyAvLyB4LCB5IGFy
ZSByZWxhdGl2ZSB0byBwYXJlbnQgKGluIGEgcmVwYXJlbnRpbmcgd2luZG93IG1hbmFnZXIpLgot
ICAgIHdoaWxlICh3aW5kb3cpIHsKLSAgICAgICAgZWNvcmVfeF93aW5kb3dfZ2VvbWV0cnlfZ2V0
KHdpbmRvdywgJngsICZ5LCAwLCAwKTsKLSAgICAgICAgd2luZG93R2xvYmFsWCArPSB4OwotICAg
ICAgICB3aW5kb3dHbG9iYWxZICs9IHk7Ci0gICAgICAgIHdpbmRvdyA9IGVjb3JlX3hfd2luZG93
X3BhcmVudF9nZXQod2luZG93KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUoLXNkLT52aWV3LngsIC1zZC0+dmlldy55KTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRl
KHdpbmRvd0dsb2JhbFgsIHdpbmRvd0dsb2JhbFkpOwotCi0gICAgcmV0dXJuIHRyYW5zZm9ybTsK
LX0KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLUxheWVyVHJlZVJlbmRlcmVyKiBF
d2tWaWV3SW1wbDo6bGF5ZXJUcmVlUmVuZGVyZXIoKQotewotICAgIERyYXdpbmdBcmVhUHJveHkq
IGRyYXdpbmdBcmVhID0gcGFnZSgpLT5kcmF3aW5nQXJlYSgpOwotICAgIGlmICghZHJhd2luZ0Fy
ZWEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSogY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBkcmF3aW5nQXJlYS0+
Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICBpZiAoIWNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKLX0KLSNlbmRpZgot
Ci12b2lkIEV3a1ZpZXdJbXBsOjpkaXNwbGF5VGltZXJGaXJlZChUaW1lcjxFd2tWaWV3SW1wbD4q
KQotewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotCi0gICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNpemUp
IHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgR0wgc3VyZmFjZSBoZXJlIHNvIHRoYXQgRXZhcyBoYXMg
bm8gY2hhbmNlIG9mIHBhaW50aW5nIHRvIGFuIGVtcHR5IEdMIHN1cmZhY2UuCi0gICAgICAgIGNy
ZWF0ZUdMU3VyZmFjZShJbnRTaXplKHNkLT52aWV3LncsIHNkLT52aWV3LmgpKTsKLSAgICAgICAg
aWYgKCFtX2V2YXNHTFN1cmZhY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9w
ZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IGZhbHNlOwotICAgIH0gZWxzZQotICAgICAgICBldmFzX2ds
X21ha2VfY3VycmVudChtX2V2YXNHTC5nZXQoKSwgZXZhc0dMU3VyZmFjZSgpLCBldmFzR0xDb250
ZXh0KCkpOwotCi0gICAgLy8gV2UgYXJlIHN1cHBvc2VkIHRvIGNsaXAgdG8gdGhlIGFjdHVhbCB2
aWV3cG9ydCwgbm90aGluZyBsZXNzLgotICAgIEludFJlY3Qgdmlld3BvcnQoc2QtPnZpZXcueCwg
c2QtPnZpZXcueSwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7Ci0KLSAgICBMYXllclRyZWVSZW5k
ZXJlciogcmVuZGVyZXIgPSBsYXllclRyZWVSZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAg
cmVuZGVyZXItPnNldERyYXdzQmFja2dyb3VuZChtX3NldERyYXdzQmFja2dyb3VuZCk7Ci0gICAg
aWYgKG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5wYWludFRv
Q3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCAvKiBvcGFjaXR5ICovIDEsIHZpZXdwb3J0KTsKLSAgICAgICAgLy8gc2QtPmltYWdlIGlz
IHRpZWQgdG8gYSBuYXRpdmUgc3VyZmFjZS4gVGhlIG5hdGl2ZSBzdXJmYWNlIGlzIGluIHRoZSBw
YXJlbnQncyBjb29yZGluYXRlcywKLSAgICAgICAgLy8gc28gd2UgbmVlZCB0byBhY2NvdW50IGZv
ciB0aGUgdmlld3BvcnQgcG9zaXRpb24gd2hlbiBjYWxsaW5nIGV2YXNfb2JqZWN0X2ltYWdlX2Rh
dGFfdXBkYXRlX2FkZC4KLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRk
KHNkLT5pbWFnZSwgdmlld3BvcnQueCgpLCB2aWV3cG9ydC55KCksIHZpZXdwb3J0LndpZHRoKCks
IHZpZXdwb3J0LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBzdXJmYWNlID0gY3JlYXRlU3VyZmFjZUZvckltYWdlKHNkLT5pbWFnZSk7Ci0g
ICAgICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQ
dHI8Y2Fpcm9fdD4gZ3JhcGhpY3NDb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZh
Y2UuZ2V0KCkpKTsKLSAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGdyYXBoaWNzQ29udGV4dC5nZXQo
KSwgLSBwYWdlUG9zaXRpb24oKS54KCksIC0gcGFnZVBvc2l0aW9uKCkueSgpKTsKLSAgICAgICAg
Y2Fpcm9fc2NhbGUoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCBwYWdlU2NhbGVGYWN0b3IoKSwgcGFn
ZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBjYWlyb19zY2FsZShncmFwaGljc0NvbnRleHQuZ2V0
KCksIGRldmljZVNjYWxlRmFjdG9yKCksIGRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBy
ZW5kZXJlci0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQuZ2V0KCkpOwot
ICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2QtPmltYWdlLCAwLCAw
LCB2aWV3cG9ydC53aWR0aCgpLCB2aWV3cG9ydC5oZWlnaHQoKSk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnVwZGF0ZShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgIC8vIENvb3JkaW5hdGVkIGdyYXBoaWNlcyBuZWVkcyB0byBzY2hl
ZHVsZSBhbiBmdWxsIHVwZGF0ZSwgbm90Ci0gICAgLy8gcmVwYWludGluZyBvZiBhIHJlZ2lvbi4g
VXBkYXRlIGluIHRoZSBldmVudCBsb29wLgotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLQotICAg
IC8vIEd1YXJkIGZvciB6ZXJvIHNpemVkIHZpZXdwb3J0LgotICAgIGlmICghKHNkLT52aWV3Lncg
JiYgc2QtPnZpZXcuaCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kaXNwbGF5VGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDApOwot
I2Vsc2UKLSAgICBpZiAoIXNkLT5pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNkLT5pbWFnZSwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCi0vKioKLSAqIEBpbnRlcm5hbAotICogQ2FsbHMgZnVsbHNjcmVlbl9l
bnRlciBjYWxsYmFjayBvciBmYWxscyBiYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3IgYW5kIGVuYWJs
ZXMgZnVsbHNjcmVlbiBtb2RlLgotICovCi12b2lkIEV3a1ZpZXdJbXBsOjplbnRlckZ1bGxTY3Jl
ZW4oKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0KLSAg
ICBSZWZQdHI8RXdrU2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IEV3a1NlY3VyaXR5T3JpZ2luOjpj
cmVhdGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIFN0cmluZzo6ZnJvbVVURjgobV91cmwpKSk7Ci0K
LSAgICBpZiAoIXNkLT5hcGktPmZ1bGxzY3JlZW5fZW50ZXIgfHwgIXNkLT5hcGktPmZ1bGxzY3Jl
ZW5fZW50ZXIoc2QsIG9yaWdpbi5nZXQoKSkpIHsKLSAgICAgICAgRWNvcmVfRXZhcyogZWNvcmVF
dmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKLSAgICAgICAg
ZWNvcmVfZXZhc19mdWxsc2NyZWVuX3NldChlY29yZUV2YXMsIHRydWUpOwotICAgIH0KLX0KLQot
LyoqCi0gKiBAaW50ZXJuYWwKLSAqIENhbGxzIGZ1bGxzY3JlZW5fZXhpdCBjYWxsYmFjayBvciBm
YWxscyBiYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3IgYW5kIGRpc2FibGVzIGZ1bGxzY3JlZW4gbW9k
ZS4KLSAqLwotdm9pZCBFd2tWaWV3SW1wbDo6ZXhpdEZ1bGxTY3JlZW4oKQotewotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0KLSAgICBpZiAoIXNkLT5hcGktPmZ1
bGxzY3JlZW5fZXhpdCB8fCAhc2QtPmFwaS0+ZnVsbHNjcmVlbl9leGl0KHNkKSkgewotICAgICAg
ICBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5i
YXNlLmV2YXMpOwotICAgICAgICBlY29yZV9ldmFzX2Z1bGxzY3JlZW5fc2V0KGVjb3JlRXZhcywg
ZmFsc2UpOwotICAgIH0KLX0KLSNlbmRpZgotCi1XS1JlY3QgRXdrVmlld0ltcGw6OndpbmRvd0dl
b21ldHJ5KCkgY29uc3QKLXsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0g
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLQotICAgIGlmICghc2Qt
PmFwaS0+d2luZG93X2dlb21ldHJ5X2dldCB8fCAhc2QtPmFwaS0+d2luZG93X2dlb21ldHJ5X2dl
dChzZCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIEVjb3JlX0V2YXMqIGVl
ID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKLSAgICAgICAgZWNv
cmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChlZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQp
OwotICAgIH0KLQotICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
fQotCi12b2lkIEV3a1ZpZXdJbXBsOjpzZXRXaW5kb3dHZW9tZXRyeShjb25zdCBXS1JlY3QmIHJl
Y3QpCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLQotICAg
IGlmICghc2QtPmFwaS0+d2luZG93X2dlb21ldHJ5X3NldCB8fCAhc2QtPmFwaS0+d2luZG93X2dl
b21ldHJ5X3NldChzZCwgcmVjdC5vcmlnaW4ueCwgcmVjdC5vcmlnaW4ueSwgcmVjdC5zaXplLndp
ZHRoLCByZWN0LnNpemUuaGVpZ2h0KSkgewotICAgICAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3Jl
X2V2YXNfZWNvcmVfZXZhc19nZXQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgICAgIGVjb3JlX2V2YXNf
bW92ZV9yZXNpemUoZWUsIHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6ZS53
aWR0aCwgcmVjdC5zaXplLmhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIEV3a1ZpZXdJbXBsOjpz
ZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0gICAgaWYgKCFpbWFnZURh
dGEgfHwgIXNkLT5pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19vYmplY3RfcmVz
aXplKHNkLT5pbWFnZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICBldmFzX29i
amVjdF9pbWFnZV9zaXplX3NldChzZC0+aW1hZ2UsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9jb3B5X3NldChzZC0+aW1hZ2UsIGltYWdl
RGF0YSk7Ci19Ci0KLUludFNpemUgRXdrVmlld0ltcGw6OnNpemUoKSBjb25zdAotewotICAgIGlu
dCB3aWR0aCwgaGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChtX3ZpZXcsIDAs
IDAsICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7
Ci19Ci0KLWJvb2wgRXdrVmlld0ltcGw6OmlzRm9jdXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGV2YXNfb2JqZWN0X2ZvY3VzX2dldChtX3ZpZXcpOwotfQotCi1ib29sIEV3a1ZpZXdJbXBsOjpp
c1Zpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBldmFzX29iamVjdF92aXNpYmxlX2dldCht
X3ZpZXcpOwotfQotCi1jb25zdCBjaGFyKiBFd2tWaWV3SW1wbDo6dGl0bGUoKSBjb25zdAotewot
ICAgIG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRhdGEoKTsKLQot
ICAgIHJldHVybiBtX3RpdGxlOwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogVGhpcyBmdW5j
dGlvbiBtYXkgcmV0dXJuIEBjIE5VTEwuCi0gKi8KLUlucHV0TWV0aG9kQ29udGV4dEVmbCogRXdr
Vmlld0ltcGw6OmlucHV0TWV0aG9kQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIG1faW5wdXRNZXRo
b2RDb250ZXh0LmdldCgpOwotfQotCi1jb25zdCBjaGFyKiBFd2tWaWV3SW1wbDo6dGhlbWVQYXRo
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90aGVtZTsKLX0KLQotdm9pZCBFd2tWaWV3SW1wbDo6
c2V0VGhlbWVQYXRoKGNvbnN0IGNoYXIqIHRoZW1lKQotewotICAgIGlmIChtX3RoZW1lICE9IHRo
ZW1lKSB7Ci0gICAgICAgIG1fdGhlbWUgPSB0aGVtZTsKLSAgICAgICAgbV9wYWdlUHJveHktPnNl
dFRoZW1lUGF0aCh0aGVtZSk7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyKiBFd2tWaWV3SW1wbDo6
Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGN1c3RvbUVuY29k
aW5nID0gbV9wYWdlUHJveHktPmN1c3RvbVRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBpZiAoY3Vz
dG9tRW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fY3VzdG9t
RW5jb2RpbmcgPSBjdXN0b21FbmNvZGluZy51dGY4KCkuZGF0YSgpOwotCi0gICAgcmV0dXJuIG1f
Y3VzdG9tRW5jb2Rpbmc7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnNldEN1c3RvbVRleHRFbmNv
ZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKLXsKLSAgICBtX3BhZ2VQcm94eS0+c2V0
Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShlbmNvZGluZyk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6
OnNldE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1fbW91c2VF
dmVudHNFbmFibGVkID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbW91c2VF
dmVudHNFbmFibGVkID0gZW5hYmxlZDsKLSAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgICAgICBldmFzX29iamVjdF9l
dmVudF9jYWxsYmFja19hZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uTW91
c2VEb3duLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3Zp
ZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uTW91c2VVcCwgc2QpOwotICAgICAgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX01P
VkUsIG9uTW91c2VNb3ZlLCBzZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvbk1v
dXNlRG93bik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX3ZpZXcs
IEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uTW91c2VVcCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2RlbChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25N
b3VzZU1vdmUpOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIEV3
a1ZpZXdJbXBsOjpzZXRUb3VjaEV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIGlm
IChtX3RvdWNoRXZlbnRzRW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3RvdWNoRXZlbnRzRW5hYmxlZCA9IGVuYWJsZWQ7Ci0KLSAgICBpZiAoZW5hYmxlZCkgewot
ICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBjb25uZWN0IHRvdWNoIGNhbGxiYWNrcyB3aXRo
IG1vdXNlIGFuZCBtdWx0aSBldmVudHMKLSAgICAgICAgLy8gYmVjYXVzZSB0aGUgRXZhcyBjcmVh
dGVzIG1vdXNlIGV2ZW50cyBmb3IgZmlyc3QgdG91Y2ggYW5kIG11bHRpIGV2ZW50cwotICAgICAg
ICAvLyBmb3Igc2Vjb25kIGFuZCB0aGlyZCB0b3VjaGVzLiBCZWxvdyBjb2RlcyBzaG91bGQgYmUg
Zml4ZWQgd2hlbiB0aGUgRXZhcwotICAgICAgICAvLyBzdXBwb3J0cyB0aGUgdG91Y2ggZXZlbnRz
LgotICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk3Nzg1IGZvciBkZXRhaWxzLgotICAgICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNt
YXJ0RGF0YSgpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92aWV3
LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0Vf
VVAsIG9uVG91Y2hVcCwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19h
ZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uVG91Y2hNb3ZlLCBzZCk7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcsIEVWQVNfQ0FMTEJB
Q0tfTVVMVElfRE9XTiwgb25Ub3VjaERvd24sIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfYWRkKG1fdmlldywgRVZBU19DQUxMQkFDS19NVUxUSV9VUCwgb25Ub3VjaFVw
LCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcsIEVW
QVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgb25Ub3VjaE1vdmUsIHNkKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3LCBFVkFTX0NBTExC
QUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgb25Ub3VjaFVwKTsK
LSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxM
QkFDS19NT1VTRV9NT1ZFLCBvblRvdWNoTW92ZSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50
X2NhbGxiYWNrX2RlbChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3VjaERv
d24pOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3LCBFVkFT
X0NBTExCQUNLX01VTFRJX1VQLCBvblRvdWNoVXApOwotICAgICAgICBldmFzX29iamVjdF9ldmVu
dF9jYWxsYmFja19kZWwobV92aWV3LCBFVkFTX0NBTExCQUNLX01VTFRJX01PVkUsIG9uVG91Y2hN
b3ZlKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIFVwZGF0ZSB0
aGUgdmlldydzIGZhdmljb24gYW5kIGVtaXRzIGEgImljb24sY2hhbmdlZCIgc2lnbmFsIGlmIGl0
IGhhcwotICogY2hhbmdlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZl
ciB0aGUgVVJMIGhhcyBjaGFuZ2VkIG9yIHdoZW4gdGhlIGljb24gZm9yCi0gKiB0aGUgY3VycmVu
dCBwYWdlIFVSTCBoYXMgY2hhbmdlZC4KLSAqLwotdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtSWNv
bkNoYW5nZSgpCi17Ci0gICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2Nv
bnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwotICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwotCi0g
ICAgbV9mYXZpY29uVVJMID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KGljb25E
YXRhYmFzZSwgbV91cmwpOwotICAgIHNtYXJ0Q2FsbGJhY2s8SWNvbkNoYW5nZWQ+KCkuY2FsbCgp
OwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotYm9vbCBFd2tWaWV3SW1w
bDo6Y3JlYXRlR0xTdXJmYWNlKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQotewotICAgIGlmICgh
bV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KCFtX2V2YXNHTCkgewotICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQo
bV92aWV3KTsKLSAgICAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzKSk7
Ci0gICAgICAgIGlmICghbV9ldmFzR0wpIHsKLSAgICAgICAgICAgIFdBUk4oIkZhaWxlZCB0byBj
cmVhdGUgRXZhc19HTCwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIG1vZGUuIik7Ci0gICAgICAg
ICAgICBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCA9IGZhbHNlOwotI2lmIEVOQUJMRShXRUJHTCkK
LSAgICAgICAgICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0
V2ViR0xFbmFibGVkKGZhbHNlKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2V2YXNHTENvbnRleHQpIHsKLSAgICAgICAg
bV9ldmFzR0xDb250ZXh0ID0gRXZhc0dMQ29udGV4dDo6Y3JlYXRlKG1fZXZhc0dMLmdldCgpKTsK
LSAgICAgICAgaWYgKCFtX2V2YXNHTENvbnRleHQpIHsKLSAgICAgICAgICAgIFdBUk4oIkZhaWxl
ZCB0byBjcmVhdGUgR0xDb250ZXh0LiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEo
KTsKLQotICAgIEV2YXNfR0xfQ29uZmlnIGV2YXNHTENvbmZpZyA9IHsKLSAgICAgICAgRVZBU19H
TF9SR0JBXzg4ODgsCi0gICAgICAgIEVWQVNfR0xfREVQVEhfQklUXzgsCi0gICAgICAgIEVWQVNf
R0xfU1RFTkNJTF9OT05FLAotICAgICAgICBFVkFTX0dMX09QVElPTlNfTk9ORSwKLSAgICAgICAg
RVZBU19HTF9NVUxUSVNBTVBMRV9OT05FCi0gICAgfTsKLQotICAgIC8vIFJlcGxhY2VzIGlmIG5v
bi1udWxsLCBhbmQgZnJlZXMgZXhpc3Rpbmcgc3VyZmFjZSBhZnRlciAoT3duUHRyKS4KLSAgICBt
X2V2YXNHTFN1cmZhY2UgPSBFdmFzR0xTdXJmYWNlOjpjcmVhdGUobV9ldmFzR0wuZ2V0KCksICZl
dmFzR0xDb25maWcsIHZpZXdTaXplKTsKLSAgICBpZiAoIW1fZXZhc0dMU3VyZmFjZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRXZhc19OYXRpdmVfU3VyZmFjZSBuYXRpdmVTdXJmYWNl
OwotICAgIGV2YXNfZ2xfbmF0aXZlX3N1cmZhY2VfZ2V0KG1fZXZhc0dMLmdldCgpLCBldmFzR0xT
dXJmYWNlKCksICZuYXRpdmVTdXJmYWNlKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9uYXRpdmVf
c3VyZmFjZV9zZXQoc2QtPmltYWdlLCAmbmF0aXZlU3VyZmFjZSk7Ci0KLSAgICBldmFzX2dsX21h
a2VfY3VycmVudChtX2V2YXNHTC5nZXQoKSwgZXZhc0dMU3VyZmFjZSgpLCBldmFzR0xDb250ZXh0
KCkpOwotCi0gICAgRXZhc19HTF9BUEkqIGdsID0gZXZhc19nbF9hcGlfZ2V0KG1fZXZhc0dMLmdl
dCgpKTsKLSAgICBnbC0+Z2xWaWV3cG9ydCgwLCAwLCB2aWV3U2l6ZS53aWR0aCgpICsgc2QtPnZp
ZXcueCwgdmlld1NpemUuaGVpZ2h0KCkgKyBzZC0+dmlldy55KTsKLSAgICBnbC0+Z2xDbGVhckNv
bG9yKDEuMCwgMS4wLCAxLjAsIDApOwotICAgIGdsLT5nbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9C
SVQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXdrVmlld0ltcGw6OmVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAgIGxheWVyVHJlZVJlbmRlcmVyKCktPnNl
dEFjdGl2ZSh0cnVlKTsKLQotICAgIGlmICghbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2V2YXNHTFN1cmZhY2UpIHsKLSAgICAgICAg
aWYgKCFjcmVhdGVHTFN1cmZhY2Uoc2l6ZSgpKSkgewotICAgICAgICAgICAgV0FSTigiRmFpbGVk
IHRvIGNyZWF0ZSBHTFN1cmZhY2UuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFd2tWaWV3SW1wbDo6
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0vKioKLSAqIEBpbnRlcm5h
bAotICogUmVxdWVzdHMgdG8gc2hvdyBleHRlcm5hbCBjb2xvciBwaWNrZXIuCi0gKi8KLXZvaWQg
RXdrVmlld0ltcGw6OnJlcXVlc3RDb2xvclBpY2tlcihXS0NvbG9yUGlja2VyUmVzdWx0TGlzdGVu
ZXJSZWYgbGlzdGVuZXIsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKLXsKLSAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNkLT5hcGktPmlucHV0X3BpY2tlcl9jb2xvcl9yZXF1ZXN0KTsKLQotICAgIGlm
ICghc2QtPmFwaS0+aW5wdXRfcGlja2VyX2NvbG9yX3JlcXVlc3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2NvbG9yUGlja2VyKQotICAgICAgICBkaXNtaXNzQ29sb3JQaWNrZXIoKTsK
LQotICAgIG1fY29sb3JQaWNrZXIgPSBFd2tDb2xvclBpY2tlcjo6Y3JlYXRlKGxpc3RlbmVyLCBj
b2xvcik7Ci0KLSAgICBzZC0+YXBpLT5pbnB1dF9waWNrZXJfY29sb3JfcmVxdWVzdChzZCwgbV9j
b2xvclBpY2tlci5nZXQoKSk7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBSZXF1ZXN0cyB0
byBoaWRlIGV4dGVybmFsIGNvbG9yIHBpY2tlci4KLSAqLwotdm9pZCBFd2tWaWV3SW1wbDo6ZGlz
bWlzc0NvbG9yUGlja2VyKCkKLXsKLSAgICBpZiAoIW1fY29sb3JQaWNrZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+aW5wdXRfcGlja2VyX2NvbG9yX2Rp
c21pc3MpOwotCi0gICAgaWYgKHNkLT5hcGktPmlucHV0X3BpY2tlcl9jb2xvcl9kaXNtaXNzKQot
ICAgICAgICBzZC0+YXBpLT5pbnB1dF9waWNrZXJfY29sb3JfZGlzbWlzcyhzZCk7Ci0KLSAgICBt
X2NvbG9yUGlja2VyLmNsZWFyKCk7Ci19Ci0jZW5kaWYKLQotQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShFV0tfVEVYVF9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVCwgUlRMKTsKLUNPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oRVdLX1RFWFRfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQsIExU
Uik7Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnNob3dDb250ZXh0TWVudShXZWJDb250ZXh0TWVudVBy
b3h5RWZsKiBjb250ZXh0TWVudVByb3h5LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMpCi17Ci0gICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBBU1NFUlQoc2QtPmFw
aSk7Ci0KLSAgICBBU1NFUlQoY29udGV4dE1lbnVQcm94eSk7Ci0KLSAgICBpZiAoIXNkLT5hcGkt
PmNvbnRleHRfbWVudV9zaG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb250ZXh0
TWVudSkKLSAgICAgICAgaGlkZUNvbnRleHRNZW51KCk7Ci0KLSAgICBtX2NvbnRleHRNZW51ID0g
RXdrX0NvbnRleHRfTWVudTo6Y3JlYXRlKHRoaXMsIGNvbnRleHRNZW51UHJveHksIGl0ZW1zKTsK
LQotICAgIHNkLT5hcGktPmNvbnRleHRfbWVudV9zaG93KHNkLCBwb3NpdGlvbi54KCksIHBvc2l0
aW9uLnkoKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Omhp
ZGVDb250ZXh0TWVudSgpCi17Ci0gICAgaWYgKCFtX2NvbnRleHRNZW51KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFT
U0VSVChzZC0+YXBpKTsKLQotICAgIGlmIChzZC0+YXBpLT5jb250ZXh0X21lbnVfaGlkZSkKLSAg
ICAgICAgc2QtPmFwaS0+Y29udGV4dF9tZW51X2hpZGUoc2QpOwotCi0gICAgbV9jb250ZXh0TWVu
dS5jbGVhcigpOwotfQotCi12b2lkIEV3a1ZpZXdJbXBsOjpyZXF1ZXN0UG9wdXBNZW51KFdlYlBv
cHVwTWVudVByb3h5RWZsKiBwb3B1cE1lbnVQcm94eSwgY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBW
ZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKLXsKLSAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VSVChzZC0+
YXBpKTsKLQotICAgIEFTU0VSVChwb3B1cE1lbnVQcm94eSk7Ci0KLSAgICBpZiAoIXNkLT5hcGkt
PnBvcHVwX21lbnVfc2hvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcG9wdXBNZW51
KQotICAgICAgICBjbG9zZVBvcHVwTWVudSgpOwotCi0gICAgbV9wb3B1cE1lbnUgPSBFd2tQb3B1
cE1lbnU6OmNyZWF0ZSh0aGlzLCBwb3B1cE1lbnVQcm94eSwgaXRlbXMsIHNlbGVjdGVkSW5kZXgp
OwotCi0gICAgc2QtPmFwaS0+cG9wdXBfbWVudV9zaG93KHNkLCByZWN0LCBzdGF0aWNfY2FzdDxF
d2tfVGV4dF9EaXJlY3Rpb24+KHRleHREaXJlY3Rpb24pLCBwYWdlU2NhbGVGYWN0b3IsIG1fcG9w
dXBNZW51LmdldCgpKTsKLX0KLQotdm9pZCBFd2tWaWV3SW1wbDo6Y2xvc2VQb3B1cE1lbnUoKQot
ewotICAgIGlmICghbV9wb3B1cE1lbnUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0gICAgQVNTRVJUKHNkLT5hcGkpOwotCi0g
ICAgaWYgKHNkLT5hcGktPnBvcHVwX21lbnVfaGlkZSkKLSAgICAgICAgc2QtPmFwaS0+cG9wdXBf
bWVudV9oaWRlKHNkKTsKLQotICAgIG1fcG9wdXBNZW51LmNsZWFyKCk7Ci19Ci0KLS8qKgotICog
QGludGVybmFsCi0gKiBDYWxscyBhIHNtYXJ0IG1lbWJlciBmdW5jdGlvbiBmb3IgamF2YXNjcmlw
dCBhbGVydCgpLgotICovCi12b2lkIEV3a1ZpZXdJbXBsOjpyZXF1ZXN0SlNBbGVydFBvcHVwKGNv
bnN0IFdLRWluYVNoYXJlZFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VSVChzZC0+YXBpKTsKLQotICAgIGlmICgh
c2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNk
LT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KHNkLCBtZXNzYWdlKTsKLX0KLQotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqIENhbGxzIGEgc21hcnQgbWVtYmVyIGZ1bmN0aW9uIGZvciBqYXZhc2NyaXB0
IGNvbmZpcm0oKSBhbmQgcmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uLiBSZXR1cm5z
IGZhbHNlIGJ5IGRlZmF1bHQuCi0gKi8KLWJvb2wgRXdrVmlld0ltcGw6OnJlcXVlc3RKU0NvbmZp
cm1Qb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBBU1NFUlQoc2QtPmFwaSk7Ci0K
LSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKHNk
LCBtZXNzYWdlKTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIENhbGxzIGEgc21hcnQgbWVt
YmVyIGZ1bmN0aW9uIGZvciBqYXZhc2NyaXB0IHByb21wdCgpIGFuZCByZXR1cm5zIGEgdmFsdWUg
ZnJvbSB0aGUgZnVuY3Rpb24uIFJldHVybnMgbnVsbCBzdHJpbmcgYnkgZGVmYXVsdC4KLSAqLwot
V0tFaW5hU2hhcmVkU3RyaW5nIEV3a1ZpZXdJbXBsOjpyZXF1ZXN0SlNQcm9tcHRQb3B1cChjb25z
dCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmluZyYg
ZGVmYXVsdFZhbHVlKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRh
KCk7Ci0gICAgQVNTRVJUKHNkLT5hcGkpOwotCi0gICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNj
cmlwdF9wcm9tcHQpCi0gICAgICAgIHJldHVybiBXS0VpbmFTaGFyZWRTdHJpbmcoKTsKLQotICAg
IHJldHVybiBXS0VpbmFTaGFyZWRTdHJpbmc6OmFkb3B0KHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0
X3Byb21wdChzZCwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSk7Ci19Ci0KLSNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIENhbGxzIGV4Y2VlZGVkX2RhdGFiYXNl
X3F1b3RhIGNhbGxiYWNrIG9yIGZhbGxzIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvciByZXR1cm5z
IGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBFd2tWaWV3
SW1wbDo6aW5mb3JtRGF0YWJhc2VRdW90YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5h
bWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50
UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxv
bmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVk
VXNhZ2UpCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAg
ICBBU1NFUlQoc2QtPmFwaSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25n
IGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTIwNDsgLy8gNSBNQgotICAgIGlmIChzZC0+YXBp
LT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YSkKLSAgICAgICAgcmV0dXJuIHNkLT5hcGktPmV4Y2Vl
ZGVkX2RhdGFiYXNlX3F1b3RhKHNkLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgZGlzcGxh
eU5hbWUudXRmOCgpLmRhdGEoKSwgY3VycmVudFF1b3RhLCBjdXJyZW50T3JpZ2luVXNhZ2UsIGN1
cnJlbnREYXRhYmFzZVVzYWdlLCBleHBlY3RlZFVzYWdlKTsKLQotICAgIHJldHVybiBkZWZhdWx0
UXVvdGE7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIFRoZSB1cmwgb2Ygdmll
dyB3YXMgY2hhbmdlZCBieSB0aGUgZnJhbWUgbG9hZGVyLgotICoKLSAqIEVtaXRzIHNpZ25hbDog
InVybCxjaGFuZ2VkIiB3aXRoIHBvaW50ZXIgdG8gbmV3IHVybCBzdHJpbmcuCi0gKi8KLXZvaWQg
RXdrVmlld0ltcGw6OmluZm9ybVVSTENoYW5nZSgpCi17Ci0gICAgU3RyaW5nIGFjdGl2ZVVSTCA9
IG1fcGFnZVByb3h5LT5hY3RpdmVVUkwoKTsKLSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1N0cmluZyByYXdBY3RpdmVVUkwgPSBhY3RpdmVVUkwu
dXRmOCgpOwotICAgIGlmIChtX3VybCA9PSByYXdBY3RpdmVVUkwuZGF0YSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3VybCA9IHJhd0FjdGl2ZVVSTC5kYXRhKCk7Ci0gICAgc21hcnRDYWxs
YmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwotCi0gICAgLy8gVXBkYXRlIHRoZSB2aWV3
J3MgZmF2aWNvbi4KLSAgICBpbmZvcm1JY29uQ2hhbmdlKCk7Ci19Ci0KLUV3a1dpbmRvd0ZlYXR1
cmVzKiBFd2tWaWV3SW1wbDo6d2luZG93RmVhdHVyZXMoKQotewotICAgIGlmICghbV93aW5kb3dG
ZWF0dXJlcykKLSAgICAgICAgbV93aW5kb3dGZWF0dXJlcyA9IEV3a1dpbmRvd0ZlYXR1cmVzOjpj
cmVhdGUoMCwgdGhpcyk7Ci0KLSAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsKLX0K
LQotV0tQYWdlUmVmIEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdlKFBhc3NSZWZQdHI8RXdrVXJs
UmVxdWVzdD4gcmVxdWVzdCwgSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpCi17
Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBBU1NFUlQo
c2QtPmFwaSk7Ci0KLSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgUmVmUHRyPEV3a1dpbmRvd0ZlYXR1cmVzPiBld2tXaW5kb3dGZWF0dXJl
cyA9IEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVyZXMsIHRoaXMpOwotCi0g
ICAgRXZhc19PYmplY3QqIG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNkLCBy
ZXF1ZXN0LT51cmwoKSwgZXdrV2luZG93RmVhdHVyZXMuZ2V0KCkpOwotICAgIGlmICghbmV3RXdr
VmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBFd2tWaWV3SW1wbCogbmV3Vmlld0ltcGwg
PSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobmV3RXdrVmlldyk7Ci0gICAgQVNTRVJUKG5l
d1ZpZXdJbXBsKTsKLQotICAgIG5ld1ZpZXdJbXBsLT5tX3dpbmRvd0ZlYXR1cmVzID0gZXdrV2lu
ZG93RmVhdHVyZXM7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS1JldGFp
bihuZXdWaWV3SW1wbC0+cGFnZSgpKSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OmNsb3NlKCkK
LXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VS
VChzZC0+YXBpKTsKLQotICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Nsb3NlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwotfQotCi12b2lkIEV3a1Zp
ZXdJbXBsOjpvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lk
KiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQgPSBz
dGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRh
dGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX2Rvd24pOwotICAgIHNkLT5hcGkt
Pm1vdXNlX2Rvd24oc2QsIGRvd25FdmVudCk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9uTW91
c2VVcCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17
Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfTW91c2VfVXAqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGktPm1vdXNlX3VwKTsKLSAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgdXBFdmVudCk7
Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9uTW91c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X01vdXNlX01v
dmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50
SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfbW92
ZSk7Ci0gICAgc2QtPmFwaS0+bW91c2VfbW92ZShzZCwgbW92ZUV2ZW50KTsKLX0KLQotI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIEV3a1ZpZXdJbXBsOjpmZWVkVG91Y2hFdmVudHMoRXdr
X1RvdWNoX0V2ZW50X1R5cGUgdHlwZSkKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9
IHNtYXJ0RGF0YSgpOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBldmFzX3RvdWNoX3BvaW50X2xp
c3RfY291bnQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRWluYV9MaXN0KiBwb2ludHMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIEV3a19Ub3VjaF9Qb2ludCogcG9pbnQgPSBuZXcg
RXdrX1RvdWNoX1BvaW50OwotICAgICAgICBwb2ludC0+aWQgPSBldmFzX3RvdWNoX3BvaW50X2xp
c3RfbnRoX2lkX2dldChzZC0+YmFzZS5ldmFzLCBpKTsKLSAgICAgICAgZXZhc190b3VjaF9wb2lu
dF9saXN0X250aF94eV9nZXQoc2QtPmJhc2UuZXZhcywgaSwgJnBvaW50LT54LCAmcG9pbnQtPnkp
OwotICAgICAgICBwb2ludC0+c3RhdGUgPSBldmFzX3RvdWNoX3BvaW50X2xpc3RfbnRoX3N0YXRl
X2dldChzZC0+YmFzZS5ldmFzLCBpKTsKLSAgICAgICAgcG9pbnRzID0gZWluYV9saXN0X2FwcGVu
ZChwb2ludHMsIHBvaW50KTsKLSAgICB9Ci0KLSAgICBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50
KG1fdmlldywgdHlwZSwgcG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoc2QtPmJhc2UuZXZh
cykpOwotCi0gICAgdm9pZCogZGF0YTsKLSAgICBFSU5BX0xJU1RfRlJFRShwb2ludHMsIGRhdGEp
Ci0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxFd2tfVG91Y2hfUG9pbnQqPihkYXRhKTsKLX0K
LQotdm9pZCBFd2tWaWV3SW1wbDo6b25Ub3VjaERvd24odm9pZCogLyogZGF0YSAqLywgRXZhcyog
LyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICov
KQotewotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZhc09i
amVjdChld2tWaWV3KTsKLSAgICB2aWV3SW1wbC0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VDSF9T
VEFSVCk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9uVG91Y2hVcCh2b2lkKiAvKiBkYXRhICov
LCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVu
dEluZm8gKi8pCi17Ci0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gRXdrVmlld0ltcGw6OmZy
b21FdmFzT2JqZWN0KGV3a1ZpZXcpOwotICAgIHZpZXdJbXBsLT5mZWVkVG91Y2hFdmVudHMoRVdL
X1RPVUNIX0VORCk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9uVG91Y2hNb3ZlKHZvaWQqIC8q
IGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQq
IC8qIGV2ZW50SW5mbyAqLykKLXsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSBFd2tWaWV3
SW1wbDo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7Ci0gICAgdmlld0ltcGwtPmZlZWRUb3VjaEV2
ZW50cyhFV0tfVE9VQ0hfTU9WRSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBFd2tWaWV3SW1wbDo6b25G
YXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCi17Ci0g
ICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gc3RhdGljX2Nhc3Q8RXdrVmlld0ltcGwqPihldmVu
dEluZm8pOwotCi0gICAgaWYgKCF2aWV3SW1wbC0+dXJsKCkgfHwgc3RyY2FzZWNtcCh2aWV3SW1w
bC0+dXJsKCksIHBhZ2VVUkwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aWV3SW1wbC0+aW5m
b3JtSWNvbkNoYW5nZSgpOwotfQotCi1QYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmll
d0ltcGw6OnRha2VTbmFwc2hvdCgpCi17Ci0gICAgLy8gU3VzcGVuZCBhbGwgYW5pbWF0aW9ucyBi
ZWZvcmUgdGFraW5nIHRoZSBzbmFwc2hvdC4KLSAgICBtX3BhZ2VQcm94eS0+c3VzcGVuZEFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0KLSAgICAvLyBXYWl0IGZvciB0aGUgcGVuZGlu
ZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCi0gICAgd2hpbGUgKG1fZGlzcGxheVRp
bWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7Ci0KLSAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIW1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKSB7Ci0j
ZW5kaWYKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBjcmVhdGVT
dXJmYWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKLSAgICAgICAgLy8gUmVzdW1lIGFsbCBhbmltYXRp
b25zLgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKLQotICAgICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB9Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBzbmFwc2hvdCA9IGdldEltYWdlU3VyZmFjZUZyb21GcmFtZUJ1ZmZlcigwLCAwLCBzZC0+
dmlldy53LCBzZC0+dmlldy5oKTsKLSAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAg
bV9wYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0KLSAg
ICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjU1ODNmNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAKLS8q
Ci0gICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
Zm5kZWYgRXdrVmlld0ltcGxfaAotI2RlZmluZSBFd2tWaWV3SW1wbF9oCi0KLSNpbmNsdWRlICJF
d2tWaWV3Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgotI2lu
Y2x1ZGUgIlJlZlB0ckVmbC5oIgotI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgotI2lu
Y2x1ZGUgIldLR2VvbWV0cnkuaCIKLSNpbmNsdWRlICJXS1JldGFpblB0ci5oIgotI2luY2x1ZGUg
ImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHREaXJl
Y3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9X
S0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotI2luY2x1ZGUgImV3a190b3VjaC5oIgot
I2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiRXZh
c0dMQ29udGV4dC5oIgotI2luY2x1ZGUgIkV2YXNHTFN1cmZhY2UuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLWNsYXNzIENvbnRleHRNZW51Q2xpZW50RWZsOwotY2xhc3MgRmluZENs
aWVudEVmbDsKLWNsYXNzIEZvcm1DbGllbnRFZmw7Ci1jbGFzcyBJbnB1dE1ldGhvZENvbnRleHRF
Zmw7Ci1jbGFzcyBQYWdlQ2xpZW50QmFzZTsKLWNsYXNzIFBhZ2VMb2FkQ2xpZW50RWZsOwotY2xh
c3MgUGFnZVBvbGljeUNsaWVudEVmbDsKLWNsYXNzIFBhZ2VVSUNsaWVudEVmbDsKLWNsYXNzIFdl
YkNvbnRleHRNZW51SXRlbURhdGE7Ci1jbGFzcyBXZWJDb250ZXh0TWVudVByb3h5RWZsOwotY2xh
c3MgV2ViUGFnZUdyb3VwOwotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUG9wdXBJdGVt
OwotY2xhc3MgV2ViUG9wdXBNZW51UHJveHlFZmw7Ci0KLSNpZiBFTkFCTEUoVklCUkFUSU9OKQot
Y2xhc3MgVmlicmF0aW9uQ2xpZW50RWZsOwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKLSNlbmRpZgotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDb2xvcjsKLWNsYXNz
IEN1cnNvcjsKLWNsYXNzIEludFNpemU7Ci19Ci0KLWNsYXNzIEV3a0NvbnRleHQ7Ci1jbGFzcyBF
d2tCYWNrRm9yd2FyZExpc3Q7Ci1jbGFzcyBFd2tDb2xvclBpY2tlcjsKLWNsYXNzIEV3a0NvbnRl
eHRNZW51OwotY2xhc3MgRXdrUG9wdXBNZW51OwotY2xhc3MgRXdrU2V0dGluZ3M7Ci1jbGFzcyBF
d2tXaW5kb3dGZWF0dXJlczsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXR5
cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQgRXZhc19HTF9Db250ZXh0OwotdHlwZWRlZiBz
dHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7Ci0jZW5kaWYKLQotdHlwZWRl
ZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfRGF0YSBFd2tfVmlld19TbWFydF9EYXRhOwotCi1jbGFz
cyBFd2tWaWV3SW1wbCB7Ci1wdWJsaWM6Ci0KLSAgICBlbnVtIFZpZXdCZWhhdmlvciB7Ci0gICAg
ICAgIExlZ2FjeUJlaGF2aW9yLAotICAgICAgICBEZWZhdWx0QmVoYXZpb3IKLSAgICB9OwotICAg
IEV3a1ZpZXdJbXBsKEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNv
bnRleHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0Jl
aGF2aW9yKTsKLSAgICB+RXdrVmlld0ltcGwoKTsKLQotICAgIHN0YXRpYyBFd2tWaWV3SW1wbCog
ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwotICAgIEV2YXNfT2JqZWN0
KiB2aWV3KCkgeyByZXR1cm4gbV92aWV3OyB9Ci0KLSAgICBXS1BhZ2VSZWYgd2tQYWdlKCk7Ci0g
ICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2VQcm94eS5nZXQo
KTsgfQotICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7IH0KLSAgICBFd2tTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdl
dCgpOyB9Ci0gICAgRXdrQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVy
biBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsgfQotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiB3aW5k
b3dGZWF0dXJlcygpOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwotCi0g
ICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSk7Ci0gICAgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsKLQotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3Q7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0OwotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm1Ub1NjcmVlbigpIGNvbnN0OwotCi0gICAgY29uc3QgY2hhciogdXJsKCkgY29uc3Qg
eyByZXR1cm4gbV91cmw7IH0KLSAgICBjb25zdCBjaGFyKiBmYXZpY29uVVJMKCkgY29uc3QgeyBy
ZXR1cm4gbV9mYXZpY29uVVJMOyB9Ci0gICAgY29uc3QgY2hhciogdGl0bGUoKSBjb25zdDsKLSAg
ICBXZWJLaXQ6OklucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0KCk7Ci0K
LSAgICBjb25zdCBjaGFyKiB0aGVtZVBhdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFRoZW1lUGF0
aChjb25zdCBjaGFyKiB0aGVtZSk7Ci0gICAgY29uc3QgY2hhciogY3VzdG9tVGV4dEVuY29kaW5n
TmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShjb25zdCBT
dHJpbmcmIGVuY29kaW5nKTsKLQotICAgIGJvb2wgbW91c2VFdmVudHNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9tb3VzZUV2ZW50c0VuYWJsZWQ7IH0KLSAgICB2b2lkIHNldE1vdXNlRXZlbnRz
RW5hYmxlZChib29sIGVuYWJsZWQpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgYm9v
bCB0b3VjaEV2ZW50c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRzRW5hYmxl
ZDsgfQotICAgIHZvaWQgc2V0VG91Y2hFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCk7Ci0jZW5k
aWYKLQotICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKTsK
LSAgICB2b2lkIHNldEltYWdlRGF0YSh2b2lkKiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpOwotCi0gICAgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoKSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhZGRUb1BhZ2VW
aWV3TWFwKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlRnJv
bVBhZ2VWaWV3TWFwKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7Ci0gICAgc3RhdGljIGNvbnN0IEV2
YXNfT2JqZWN0KiB2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZik7Ci0KLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKLSAgICB2
b2lkIGV4aXRGdWxsU2NyZWVuKCk7Ci0jZW5kaWYKLQotICAgIFdLUmVjdCB3aW5kb3dHZW9tZXRy
eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2luZG93R2VvbWV0cnkoY29uc3QgV0tSZWN0Jik7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgYm9vbCBjcmVhdGVHTFN1cmZh
Y2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUpOwotICAgIGJvb2wgZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCk7Ci0gICAgdm9pZCBzZXROZWVkc1N1cmZhY2VSZXNpemUoKSB7IG1fcGVuZGlu
Z1N1cmZhY2VSZXNpemUgPSB0cnVlOyB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKQotICAgIHZvaWQgcmVxdWVzdENvbG9yUGlja2VyKFdLQ29sb3JQaWNrZXJSZXN1bHRM
aXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKLSAgICB2b2lkIGRp
c21pc3NDb2xvclBpY2tlcigpOwotI2VuZGlmCi0KLSAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFn
ZShQYXNzUmVmUHRyPEV3a1VybFJlcXVlc3Q+LCBXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkq
IHdpbmRvd0ZlYXR1cmVzKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RQ
b3B1cE1lbnUoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBj
b25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBzZWxlY3Rl
ZEluZGV4KTsKLSAgICB2b2lkIGNsb3NlUG9wdXBNZW51KCk7Ci0gICAgCi0gICAgdm9pZCBzaG93
Q29udGV4dE1lbnUoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5RWZsKiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhPiYgaXRlbXMpOwotICAgIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7Ci0KLSAgICB2
b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RKU0FsZXJ0UG9w
dXAoY29uc3QgV0tFaW5hU2hhcmVkU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHJlcXVlc3RK
U0NvbmZpcm1Qb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UpOwotICAgIFdL
RWluYVNoYXJlZFN0cmluZyByZXF1ZXN0SlNQcm9tcHRQb3B1cChjb25zdCBXS0VpbmFTaGFyZWRT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmluZyYgZGVmYXVsdFZhbHVlKTsK
LQotICAgIHRlbXBsYXRlPEV3a1ZpZXdDYWxsYmFja3M6OkNhbGxiYWNrVHlwZSBjYWxsYmFja1R5
cGU+Ci0gICAgRXdrVmlld0NhbGxiYWNrczo6Q2FsbEJhY2s8Y2FsbGJhY2tUeXBlPiBzbWFydENh
bGxiYWNrKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBFd2tWaWV3Q2FsbGJhY2tzOjpD
YWxsQmFjazxjYWxsYmFja1R5cGU+KG1fdmlldyk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbG9u
ZyBsb25nIGluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VO
YW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVu
dFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25lZCBs
b25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3Rl
ZFVzYWdlKTsKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFdlYktpdDo6UGFn
ZUNsaWVudEJhc2UqIHBhZ2VDbGllbnQoKSB7IHJldHVybiBtX3BhZ2VDbGllbnQuZ2V0KCk7IH0K
LQotICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1fcGFn
ZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KLSAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQotCi0gICAgdm9pZCBzZXRQYWdl
UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wYWdlUG9z
aXRpb24gPSBwb3NpdGlvbjsgfQotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFnZVBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUG9zaXRpb247IH0KLSNlbmRpZgotCi0gICAg
Ly8gRklYTUU6IG5lZWRzIHJlZmFjdG9yaW5nIChzcGxpdCBjYWxsYmFjayBpbnZva2UpCi0gICAg
dm9pZCBpbmZvcm1VUkxDaGFuZ2UoKTsKLQotICAgIGJvb2wgaXNIYXJkd2FyZUFjY2VsZXJhdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQ7IH0KLSAgICB2b2lkIHNl
dERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVu
YWJsZTsgfQotCi0gICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgp
OwotCi1wcml2YXRlOgotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBFdmFz
X0dMX0NvbnRleHQqIGV2YXNHTENvbnRleHQoKSB7IHJldHVybiBtX2V2YXNHTENvbnRleHQgPyBt
X2V2YXNHTENvbnRleHQtPmNvbnRleHQoKSA6IDA7IH0KLSAgICBFdmFzX0dMX1N1cmZhY2UqIGV2
YXNHTFN1cmZhY2UoKSB7IHJldHVybiBtX2V2YXNHTFN1cmZhY2UgPyBtX2V2YXNHTFN1cmZhY2Ut
PnN1cmZhY2UoKSA6IDA7IH0KLSNlbmRpZgotCi0gICAgaW5saW5lIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSgpIGNvbnN0OwotICAgIHZvaWQgZGlzcGxheVRpbWVyRmlyZWQoV2ViQ29y
ZTo6VGltZXI8RXdrVmlld0ltcGw+Kik7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKTsKLSNl
bmRpZgotCi0gICAgdm9pZCBpbmZvcm1JY29uQ2hhbmdlKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBv
bk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VVcCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19P
YmplY3QqLCB2b2lkKiBldmVudEluZm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VNb3ZlKHZv
aWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Ci0jaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKLSAgICB2b2lkIGZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hfRXZl
bnRfVHlwZSB0eXBlKTsKLSAgICBzdGF0aWMgdm9pZCBvblRvdWNoRG93bih2b2lkKiAvKiBkYXRh
ICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBl
dmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hVcCh2b2lkKiAvKiBkYXRhICov
LCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBldmVu
dEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEgKi8s
IEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50
SW5mbyAqLyk7Ci0jZW5kaWYKLSAgICBzdGF0aWMgdm9pZCBvbkZhdmljb25DaGFuZ2VkKGNvbnN0
IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbyk7Ci0KLSAgICAvLyBOb3RlLCBpbml0aWFs
aXphdGlvbiBvcmRlciBtYXR0ZXJzLgotICAgIEV2YXNfT2JqZWN0KiBtX3ZpZXc7Ci0gICAgUmVm
UHRyPEV3a0NvbnRleHQ+IG1fY29udGV4dDsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgT3duUHRyPEV2YXNfR0w+IG1fZXZhc0dMOwotICAgIE93blB0cjxXZWJLaXQ6OkV2
YXNHTENvbnRleHQ+IG1fZXZhc0dMQ29udGV4dDsKLSAgICBPd25QdHI8V2ViS2l0OjpFdmFzR0xT
dXJmYWNlPiBtX2V2YXNHTFN1cmZhY2U7Ci0gICAgYm9vbCBtX3BlbmRpbmdTdXJmYWNlUmVzaXpl
OwotI2VuZGlmCi0gICAgT3duUHRyPFdlYktpdDo6UGFnZUNsaWVudEJhc2U+IG1fcGFnZUNsaWVu
dDsKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IG1fcGFnZVByb3h5OwotICAgIE93
blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50OwotICAgIE93
blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNsaWVudDsKLSAg
ICBPd25QdHI8V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50OwotICAgIE93
blB0cjxXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50RWZsPiBtX2NvbnRleHRNZW51Q2xpZW50Owot
ICAgIE93blB0cjxXZWJLaXQ6OkZpbmRDbGllbnRFZmw+IG1fZmluZENsaWVudDsKLSAgICBPd25Q
dHI8V2ViS2l0OjpGb3JtQ2xpZW50RWZsPiBtX2Zvcm1DbGllbnQ7Ci0jaWYgRU5BQkxFKFZJQlJB
VElPTikKLSAgICBPd25QdHI8V2ViS2l0OjpWaWJyYXRpb25DbGllbnRFZmw+IG1fdmlicmF0aW9u
Q2xpZW50OwotI2VuZGlmCi0gICAgT3duUHRyPEV3a0JhY2tGb3J3YXJkTGlzdD4gbV9iYWNrRm9y
d2FyZExpc3Q7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgZmxvYXQgbV9wYWdl
U2NhbGVGYWN0b3I7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3BhZ2VQb3NpdGlvbjsKLSNl
bmRpZgotICAgIE93blB0cjxFd2tTZXR0aW5ncz4gbV9zZXR0aW5nczsKLSAgICBSZWZQdHI8RXdr
V2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7Ci0gICAgY29uc3Qgdm9pZCogbV9jdXJz
b3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0LgotICAg
IFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7Ci0gICAgV0tFaW5hU2hhcmVkU3RyaW5n
IG1fdXJsOwotICAgIG11dGFibGUgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdGl0bGU7Ci0gICAgV0tF
aW5hU2hhcmVkU3RyaW5nIG1fdGhlbWU7Ci0gICAgbXV0YWJsZSBXS0VpbmFTaGFyZWRTdHJpbmcg
bV9jdXN0b21FbmNvZGluZzsKLSAgICBib29sIG1fbW91c2VFdmVudHNFbmFibGVkOwotI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3RvdWNoRXZlbnRzRW5hYmxlZDsKLSNlbmRp
ZgotICAgIFdlYkNvcmU6OlRpbWVyPEV3a1ZpZXdJbXBsPiBtX2Rpc3BsYXlUaW1lcjsKLSAgICBP
d25QdHI8RXdrQ29udGV4dE1lbnU+IG1fY29udGV4dE1lbnU7Ci0gICAgT3duUHRyPEV3a1BvcHVw
TWVudT4gbV9wb3B1cE1lbnU7Ci0gICAgT3duUHRyPFdlYktpdDo6SW5wdXRNZXRob2RDb250ZXh0
RWZsPiBtX2lucHV0TWV0aG9kQ29udGV4dDsKLSNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikK
LSAgICBPd25QdHI8RXdrQ29sb3JQaWNrZXI+IG1fY29sb3JQaWNrZXI7Ci0jZW5kaWYKLSAgICBi
b29sIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkOwotICAgIGJvb2wgbV9zZXREcmF3c0JhY2tncm91
bmQ7Ci19OwotCi0jZW5kaWYgLy8gRXdrVmlld0ltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9tZW51LmNwcAppbmRleCAwYTRlNTQ3
Li45OGE0MzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dF9tZW51LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9tZW51LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImV3a19j
b250ZXh0X21lbnUuaCIKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkV3a1Zp
ZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51
SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5RWZsLmgiCiAjaW5jbHVk
ZSAiZXdrX2NvbnRleHRfbWVudV9pdGVtLmgiCkBAIC0zNiw4ICszNiw4IEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKLUV3a0NvbnRleHRNZW51OjpFd2tDb250ZXh0TWVudShFd2tWaWV3
SW1wbCogdmlld0ltcGwsIFdlYkNvbnRleHRNZW51UHJveHlFZmwqIGNvbnRleHRNZW51UHJveHks
IGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcykKLSAg
ICA6IG1fdmlld0ltcGwodmlld0ltcGwpCitFd2tDb250ZXh0TWVudTo6RXdrQ29udGV4dE1lbnUo
RXdrVmlldyogdmlldywgV2ViQ29udGV4dE1lbnVQcm94eUVmbCogY29udGV4dE1lbnVQcm94eSwg
Y29uc3QgVmVjdG9yPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQorICAg
IDogbV92aWV3SW1wbCh2aWV3KQogICAgICwgbV9jb250ZXh0TWVudVByb3h5KGNvbnRleHRNZW51
UHJveHkpCiAgICAgLCBtX2NvbnRleHRNZW51SXRlbXMoMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X21lbnVfcHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudV9wcml2YXRl
LmgKaW5kZXggMjlmNWM5MC4uYjllMTEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudV9wcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudV9wcml2YXRlLmgKQEAgLTM3
LDExICszNywxMSBAQCBjbGFzcyBXZWJDb250ZXh0TWVudUl0ZW1EYXRhOwogY2xhc3MgV2ViQ29u
dGV4dE1lbnVQcm94eUVmbDsKIH0KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tWaWV3
OwogCiBjbGFzcyBFd2tDb250ZXh0TWVudSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8RXdrQ29udGV4dE1lbnU+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwsIFdlYktpdDo6
V2ViQ29udGV4dE1lbnVQcm94eUVmbCogY29udGV4dE1lbnVQcm94eSwgY29uc3QgVmVjdG9yPFdl
YktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEV3a0NvbnRleHRNZW51PiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGwsIFdlYktpdDo6V2Vi
Q29udGV4dE1lbnVQcm94eUVmbCogY29udGV4dE1lbnVQcm94eSwgY29uc3QgVmVjdG9yPFdlYktp
dDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBFd2tDb250ZXh0TWVudSh2aWV3SW1wbCwgY29udGV4dE1lbnVQcm94eSwg
aXRlbXMpKTsKICAgICB9CkBAIC02OCw5ICs2OCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
RXdrQ29udGV4dE1lbnUoKTsKICAgICBFd2tDb250ZXh0TWVudShFaW5hX0xpc3QqIGl0ZW1zKTsK
LSAgICBFd2tDb250ZXh0TWVudShFd2tWaWV3SW1wbCogdmlld0ltcGwsIFdlYktpdDo6V2ViQ29u
dGV4dE1lbnVQcm94eUVmbCosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRl
bURhdGE+JiBpdGVtcyk7CisgICAgRXdrQ29udGV4dE1lbnUoRXdrVmlldyogdmlld0ltcGwsIFdl
YktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUVmbCosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYkNv
bnRleHRNZW51SXRlbURhdGE+JiBpdGVtcyk7CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1w
bDsKKyAgICBFd2tWaWV3KiBtX3ZpZXdJbXBsOwogICAgIFdlYktpdDo6V2ViQ29udGV4dE1lbnVQ
cm94eUVmbCogbV9jb250ZXh0TWVudVByb3h5OwogICAgIEVpbmFfTGlzdCogbV9jb250ZXh0TWVu
dUl0ZW1zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZF9qb2IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Rvd25sb2FkX2pvYi5jcHAKaW5kZXggM2FkN2Q0ZC4uOTgwNzJjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAK
QEAgLTM2LDcgKzM2LDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotRXdrRG93bmxv
YWRKb2I6OkV3a0Rvd25sb2FkSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV3
a1ZpZXdJbXBsKiB2aWV3SW1wbCkKK0V3a0Rvd25sb2FkSm9iOjpFd2tEb3dubG9hZEpvYihXZWJL
aXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3KiB2aWV3SW1wbCkKICAgICA6IG1f
ZG93bmxvYWRQcm94eShkb3dubG9hZCkKICAgICAsIG1fdmlld0ltcGwodmlld0ltcGwpCiAgICAg
LCBtX3N0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfTk9UX1NUQVJURUQpCkBAIC01OSw3ICs1
OSw3IEBAIHVpbnQ2NF90IEV3a0Rvd25sb2FkSm9iOjppZCgpIGNvbnN0CiAgKiBSZXR1cm5zIHRo
ZSB2aWV3IHRoaXMgZG93bmxvYWQgaXMgYXR0YWNoZWQgdG8uCiAgKiBUaGUgdmlldyBpcyBuZWVk
ZWQgdG8gc2VuZCBub3RpZmljYXRpb24gc2lnbmFscy4KICAqLwotRXdrVmlld0ltcGwqIEV3a0Rv
d25sb2FkSm9iOjp2aWV3SW1wbCgpIGNvbnN0CitFd2tWaWV3KiBFd2tEb3dubG9hZEpvYjo6dmll
dygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdmlld0ltcGw7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0
ZS5oCmluZGV4IDViNmE1M2YuLjc2YTQ4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCkBAIC0z
OCwxOSArMzgsMTkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5Owog
fQogCi1jbGFzcyBFd2tWaWV3SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAKIGNsYXNzIEV3a0Rvd25s
b2FkSm9iIDogcHVibGljIEV3a09iamVjdCB7CiBwdWJsaWM6CiAgICAgRVdLX09CSkVDVF9ERUNM
QVJFKEV3a0Rvd25sb2FkSm9iKQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrRG93bmxvYWRK
b2I+IGNyZWF0ZShXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3SW1wbCog
dmlld0ltcGwpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrRG93bmxvYWRKb2I+IGNyZWF0ZShX
ZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3KiB2aWV3SW1wbCkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXdrRG93bmxvYWRKb2IoZG93bmxvYWQsIHZp
ZXdJbXBsKSk7CiAgICAgfQogCiAgICAgdWludDY0X3QgaWQoKSBjb25zdDsKLSAgICBFd2tWaWV3
SW1wbCogdmlld0ltcGwoKSBjb25zdDsKKyAgICBFd2tWaWV3KiB2aWV3KCkgY29uc3Q7CiAKICAg
ICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdGF0
ZShFd2tfRG93bmxvYWRfSm9iX1N0YXRlKTsKQEAgLTcyLDEwICs3MiwxMCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBpbmNyZW1lbnRSZWNlaXZlZERhdGEodWludDY0X3QgbGVuZ3RoKTsKIAogcHJpdmF0
ZToKLSAgICBFd2tEb3dubG9hZEpvYihXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBF
d2tWaWV3SW1wbCogdmlld0ltcGwpOworICAgIEV3a0Rvd25sb2FkSm9iKFdlYktpdDo6RG93bmxv
YWRQcm94eSogZG93bmxvYWQsIEV3a1ZpZXcqIHZpZXcpOwogCiAgICAgV2ViS2l0OjpEb3dubG9h
ZFByb3h5KiBtX2Rvd25sb2FkUHJveHk7Ci0gICAgRXdrVmlld0ltcGwqIG1fdmlld0ltcGw7Cisg
ICAgRXdrVmlldyogbV92aWV3SW1wbDsKICAgICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIG1fc3Rh
dGU7CiAgICAgbXV0YWJsZSBSZWZQdHI8RXdrVXJsUmVxdWVzdD4gbV9yZXF1ZXN0OwogICAgIFJl
ZlB0cjxFd2tVcmxSZXNwb25zZT4gbV9yZXNwb25zZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51LmNwcAppbmRleCA0ZWU5ZWFkLi4wMzk2
ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9w
dXBfbWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Bv
cHVwX21lbnUuY3BwCkBAIC0yNywxNSArMjcsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJld2tfcG9wdXBfbWVudS5oIgogCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNp
bmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlFZmwuaCIKICNp
bmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfcG9w
dXBfbWVudV9wcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLUV3a1BvcHVw
TWVudTo6RXdrUG9wdXBNZW51KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUG9wdXBNZW51UHJv
eHlFZmwqIHBvcHVwTWVudVByb3h5LCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+
JiBpdGVtcywgdW5zaWduZWQgc2VsZWN0ZWRJbmRleCkKLSAgICA6IG1fdmlld0ltcGwodmlld0lt
cGwpCitFd2tQb3B1cE1lbnU6OkV3a1BvcHVwTWVudShFd2tWaWV3KiB2aWV3LCBXZWJQb3B1cE1l
bnVQcm94eUVmbCogcG9wdXBNZW51UHJveHksIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVw
SXRlbT4mIGl0ZW1zLCB1bnNpZ25lZCBzZWxlY3RlZEluZGV4KQorICAgIDogbV92aWV3KHZpZXcp
CiAgICAgLCBtX3BvcHVwTWVudVByb3h5KHBvcHVwTWVudVByb3h5KQogICAgICwgbV9wb3B1cE1l
bnVJdGVtcygwKQogICAgICwgbV9zZWxlY3RlZEluZGV4KHNlbGVjdGVkSW5kZXgpCkBAIC01NCw3
ICs1NCw3IEBAIEV3a1BvcHVwTWVudTo6fkV3a1BvcHVwTWVudSgpCiAKIHZvaWQgRXdrUG9wdXBN
ZW51OjpjbG9zZSgpCiB7Ci0gICAgbV92aWV3SW1wbC0+Y2xvc2VQb3B1cE1lbnUoKTsKKyAgICBt
X3ZpZXctPmNsb3NlUG9wdXBNZW51KCk7CiB9CiAKIGNvbnN0IEVpbmFfTGlzdCogRXdrUG9wdXBN
ZW51OjppdGVtcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfcG9wdXBfbWVudV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9wcml2YXRlLmgKaW5kZXggMmI1ZGUwNi4uNTI0ZjU5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVw
X21lbnVfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19wb3B1cF9tZW51X3ByaXZhdGUuaApAQCAtMzYsMTMgKzM2LDEzIEBAIGNsYXNzIFdlYlBvcHVw
SXRlbTsKIGNsYXNzIFdlYlBvcHVwTWVudVByb3h5RWZsOwogfQogCi1jbGFzcyBFd2tWaWV3SW1w
bDsKK2NsYXNzIEV3a1ZpZXc7CiAKIGNsYXNzIEV3a1BvcHVwTWVudSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8RXdrUG9wdXBNZW51PiBjcmVhdGUoRXdrVmlld0ltcGwqIHZpZXdJ
bXBsLCBXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5RWZsKiBwb3B1cE1lbnVQcm94eSwgY29uc3Qg
VmVjdG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRlbXMsIHVuc2lnbmVkIHNlbGVjdGVkSW5k
ZXgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RXdrUG9wdXBNZW51PiBjcmVhdGUoRXdrVmlldyog
dmlldywgV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCogcG9wdXBNZW51UHJveHksIGNvbnN0
IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVwSXRlbT4mIGl0ZW1zLCB1bnNpZ25lZCBzZWxlY3RlZElu
ZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tQb3B1cE1lbnUodmll
d0ltcGwsIHBvcHVwTWVudVByb3h5LCBpdGVtcywgc2VsZWN0ZWRJbmRleCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEV3a1BvcHVwTWVudSh2aWV3LCBwb3B1cE1lbnVQcm94eSwgaXRl
bXMsIHNlbGVjdGVkSW5kZXgpKTsKICAgICB9CiAgICAgfkV3a1BvcHVwTWVudSgpOwogCkBAIC01
NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgRXdrUG9wdXBNZW51KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2Vi
S2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVw
SXRlbT4mIGl0ZW1zLCB1bnNpZ25lZCBzZWxlY3RlZEluZGV4KTsKKyAgICBFd2tQb3B1cE1lbnUo
RXdrVmlldyogdmlld0ltcGwsIFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwqLCBjb25zdCBW
ZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgdW5zaWduZWQgc2VsZWN0ZWRJbmRl
eCk7CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1wbDsKKyAgICBFd2tWaWV3KiBtX3ZpZXc7
CiAgICAgV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCogbV9wb3B1cE1lbnVQcm94eTsKICAg
ICBFaW5hX0xpc3QqIG1fcG9wdXBNZW51SXRlbXM7CiAgICAgdW5zaWduZWQgbV9zZWxlY3RlZElu
ZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Nl
dHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5n
cy5jcHAKaW5kZXggNzM2MTExMi4uM2Q0MzRkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgogCi0jaW5jbHVkZSAi
RXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiZXdrX3NldHRp
bmdzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJLaXQyL1dlYlBhZ2VHcm91cC5oPgogI2luY2x1
ZGUgPFdlYktpdDIvV2ViUGFnZVByb3h5Lmg+CkBAIC00NSwxMiArNDUsMTIgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAogY29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlcyogRXdrU2V0dGlu
Z3M6OnByZWZlcmVuY2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV92aWV3SW1wbC0+cGFnZSgp
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKKyAgICByZXR1cm4gbV92aWV3LT5wYWdlKCkt
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOwogfQogCiBXZWJLaXQ6OldlYlByZWZlcmVuY2Vz
KiBFd2tTZXR0aW5nczo6cHJlZmVyZW5jZXMoKQogewotICAgIHJldHVybiBtX3ZpZXdJbXBsLT5w
YWdlKCktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOworICAgIHJldHVybiBtX3ZpZXctPnBh
Z2UoKS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCk7CiB9CiAKICNpZiBFTkFCTEUoU1BFTExD
SEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19z
ZXR0aW5nc19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c2V0dGluZ3NfcHJpdmF0ZS5oCmluZGV4IDMzMzVhYWQuLjBiODVkOWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5nc19wcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzX3ByaXZhdGUu
aApAQCAtMzIsMTQgKzMyLDE0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlByZWZl
cmVuY2VzOwogfQotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tWaWV3OwogLyoqCiAgKiBc
c3RydWN0ICBFd2tfU2V0dGluZ3MKICAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBzZXR0aW5ncyBk
YXRhLgogICovCiBjbGFzcyBFd2tTZXR0aW5ncyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8RXdrU2V0dGluZ3M+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RXdrU2V0dGluZ3M+IGNyZWF0ZShFd2tWaWV3KiB2aWV3SW1wbCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXdrU2V0dGluZ3Modmlld0ltcGwpKTsK
ICAgICB9CkBAIC00OCwxMyArNDgsMTMgQEAgcHVibGljOgogICAgIFdlYktpdDo6V2ViUHJlZmVy
ZW5jZXMqIHByZWZlcmVuY2VzKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRXdrU2V0dGlu
Z3MoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQotICAgICAgICA6IG1fdmlld0ltcGwodmlld0ltcGwp
CisgICAgZXhwbGljaXQgRXdrU2V0dGluZ3MoRXdrVmlldyogdmlld0ltcGwpCisgICAgICAgIDog
bV92aWV3KHZpZXdJbXBsKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdmlld0ltcGwpOworICAg
ICAgICBBU1NFUlQobV92aWV3KTsKICAgICB9CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1w
bDsKKyAgICBFd2tWaWV3KiBtX3ZpZXc7CiB9OwogCiAjZW5kaWYgLy8gZXdrX3NldHRpbmdzX3By
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CmluZGV4IDk3ODI1MDYuLmE4YjJkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJld2tfdmlldy5oIgogCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNp
bmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1ZGUg
IkZvcm1DbGllbnRFZmwuaCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKQEAg
LTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBFV0tfVklFV19UWVBFX1NUUltdID0g
IkVXSzJfVmlldyI7CiAgICAgICAgIEVJTkFfTE9HX0NSSVQoInNtYXJ0IGRhdGEgaXMgbnVsbCIp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICByZXR1cm4gX19W
QV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrVmlld0ltcGwqIGltcGwgPSBz
bWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEV3a1ZpZXcqIGltcGwgPSBzbWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg
IGlmICghaW1wbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0ZSBk
YXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgIFwKQEAgLTEzNCw3ICsxMzQs
NyBAQCBzdGF0aWMgY29uc3QgY2hhciBFV0tfVklFV19UWVBFX1NUUltdID0gIkVXSzJfVmlldyI7
CiAgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBFV0tfVklFV19JTVBMX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgaW1wbCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tWaWV3
SW1wbCogaW1wbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgRXdrVmlldyogaW1wbCA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIF9fVkFfQVJHU19fKTsgICAgICAgICAgICBcCiAgICAgICAgIGltcGwgPSBzbWFydERhdGEt
PnByaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApA
QCAtNTAzLDcgKzUwMyw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmll
d1NtYXJ0Q2xhc3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
RXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYgPSAwLCBFd2tWaWV3SW1wbDo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlld0lt
cGw6OkRlZmF1bHRCZWhhdmlvcikKK3N0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3
a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250
ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpW
aWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKQEAgLTUyMiw3ICs1MjIsNyBAQCBzdGF0
aWMgaW5saW5lIEV2YXNfT2JqZWN0KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZhc19T
bWFydCogc21hcnQsIFBhc3NSZQogCiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3Jl
YXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwK
ICAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KLSAgICBzbWFydERh
dGEtPnByaXYgPSBuZXcgRXdrVmlld0ltcGwoZXdrVmlldywgY29udGV4dCwgdG9JbXBsKHBhZ2VH
cm91cFJlZiksIGJlaGF2aW9yKTsKKyAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhl
d2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3IpOwogICAgIHJl
dHVybiBld2tWaWV3OwogfQogCkBAIC01MzAsNyArNTMwLDcgQEAgc3RhdGljIGlubGluZSBFdmFz
X09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQ
YXNzUmUKICAqIEBpbnRlcm5hbAogICogQ29uc3RydWN0cyBhIGV3a192aWV3IEV2YXNfT2JqZWN0
IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNl
X2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXdJbXBsOjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFdmFz
X09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZp
b3IgYmVoYXZpb3IpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBjcmVhdGVF
d2tWaWV3U21hcnRDbGFzcygpLCBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKHRvSW1w
bChjb250ZXh0UmVmKSkgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpLCBwYWdlR3JvdXBS
ZWYsIGJlaGF2aW9yKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5oCmluZGV4IDEyNDYyMDQuLjdkMWRmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtMjAyLDcgKzIwMiw3IEBAIHN0cnVjdCBFd2tfVmll
d19TbWFydF9DbGFzcyB7CiAgKi8KICNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9O
QU1FX1ZFUlNJT04obmFtZSkgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChFVkFTX1NNQVJUX0NM
QVNTX0lOSVRfTkFNRV9WRVJTSU9OKG5hbWUpKQogCi10eXBlZGVmIHN0cnVjdCBFd2tWaWV3SW1w
bCBFd2tWaWV3SW1wbDsKK3R5cGVkZWYgc3RydWN0IEV3a1ZpZXcgRXdrVmlldzsKIC8qKgogICog
QGJyaWVmIENvbnRhaW5zIGFuIGludGVybmFsIFZpZXcgZGF0YS4KICAqCkBAIC0yMTQsNyArMjE0
LDcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgewogICAgIGNvbnN0IEV3a19WaWV3X1Nt
YXJ0X0NsYXNzKiBhcGk7IC8qKjwgcmVmZXJlbmNlIHRvIGNhc3RlZCBjbGFzcyBpbnN0YW5jZSAq
LwogICAgIEV2YXNfT2JqZWN0KiBzZWxmOyAvKio8IHJlZmVyZW5jZSB0byBvd25lciBvYmplY3Qg
Ki8KICAgICBFdmFzX09iamVjdCogaW1hZ2U7IC8qKjwgcmVmZXJlbmNlIHRvIGV2YXNfb2JqZWN0
X2ltYWdlIGZvciBkcmF3aW5nIHdlYiBjb250ZW50cyAqLwotICAgIEV3a1ZpZXdJbXBsKiBwcml2
OyAvKio8IHNob3VsZCBuZXZlciBiZSBhY2Nlc3NlZCwgYysrIHN0dWZmICovCisgICAgRXdrVmll
dyogcHJpdjsgLyoqPCBzaG91bGQgbmV2ZXIgYmUgYWNjZXNzZWQsIGMrKyBzdHVmZiAqLwogICAg
IHN0cnVjdCB7CiAgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsgLyoqPCBsYXN0IHVzZWQg
dmlld3BvcnQgKi8KICAgICB9IHZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggOWE1MWVmMi4uODNiNGM5NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZh
dGUuaApAQCAtMjEsMTAgKzIxLDEwIEBACiAjaWZuZGVmIGV3a192aWV3X3ByaXZhdGVfaAogI2Rl
ZmluZSBld2tfdmlld19wcml2YXRlX2gKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5j
bHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dL
QmFzZS5oPgogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBX
S0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3SW1wbDo6Vmlld0JlaGF2aW9yKTsK
K0V2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJl
ZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7CiAKICNlbmRpZiAvLyBl
d2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKaW5kZXggNjZhNmM5MS4uZTMwNTgzMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19m
ZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dp
bmRvd19mZWF0dXJlcy5jcHAKQEAgLTMyLDggKzMyLDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIAotRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKEltbXV0YWJsZURp
Y3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwpCi0gICAgOiBt
X3ZpZXdJbXBsKHZpZXdJbXBsKQorRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVz
KEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3KiB2aWV3KQorICAg
IDogbV92aWV3KHZpZXcpCiAgICAgLCBtX2dlb21ldHJ5KDAsIDAsIDEwMCwgMTAwKQogICAgICwg
bV90b29sYmFyVmlzaWJsZSh0cnVlKQogICAgICwgbV9zdGF0dXNCYXJWaXNpYmxlKHRydWUpCkBA
IC03MywyNSArNzMsMjUgQEAgVDEgRXdrV2luZG93RmVhdHVyZXM6OmdldFdpbmRvd0ZlYXR1cmVW
YWx1ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywKIHZvaWQgRXdrV2luZG93
RmVhdHVyZXM6OnNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpCiB7CiAgICAg
bV90b29sYmFyVmlzaWJsZSA9IHRvb2xiYXJWaXNpYmxlOwotICAgIG1fdmlld0ltcGwtPnNtYXJ0
Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6VG9vbGJhclZpc2libGU+KCkuY2FsbCgmdG9vbGJh
clZpc2libGUpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpU
b29sYmFyVmlzaWJsZT4oKS5jYWxsKCZ0b29sYmFyVmlzaWJsZSk7CiB9CiAKIHZvaWQgRXdrV2lu
ZG93RmVhdHVyZXM6OnNldFN0YXR1c0JhclZpc2libGUoYm9vbCBzdGF0dXNCYXJWaXNpYmxlKQog
ewogICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IHN0YXR1c0JhclZpc2libGU7Ci0gICAgbV92aWV3
SW1wbC0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpTdGF0dXNCYXJWaXNpYmxlPigp
LmNhbGwoJnN0YXR1c0JhclZpc2libGUpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxFd2tW
aWV3Q2FsbGJhY2tzOjpTdGF0dXNCYXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c0JhclZpc2libGUp
OwogfQogCiB2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRNZW51QmFyVmlzaWJsZShib29sIG1l
bnVCYXJWaXNpYmxlKQogewogICAgIG1fbWVudUJhclZpc2libGUgPSBtZW51QmFyVmlzaWJsZTsK
LSAgICBtX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6Ok1lbnVCYXJW
aXNpYmxlPigpLmNhbGwoJm1lbnVCYXJWaXNpYmxlKTsKKyAgICBtX3ZpZXctPnNtYXJ0Q2FsbGJh
Y2s8RXdrVmlld0NhbGxiYWNrczo6TWVudUJhclZpc2libGU+KCkuY2FsbCgmbWVudUJhclZpc2li
bGUpOwogfQogCiB2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRSZXNpemFibGUoYm9vbCByZXNp
emFibGUpCiB7CiAgICAgbV9yZXNpemFibGUgPSByZXNpemFibGU7Ci0gICAgbV92aWV3SW1wbC0+
c21hcnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpXaW5kb3dSZXNpemFibGU+KCkuY2FsbCgm
cmVzaXphYmxlKTsKKyAgICBtX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6
V2luZG93UmVzaXphYmxlPigpLmNhbGwoJnJlc2l6YWJsZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
d2luZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0
dXJlcyogd2luZG93X2ZlYXR1cmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaAppbmRleCBj
NmJmODkyLi40NTMyZDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaApAQCAtMjYsMjAg
KzI2LDIwIEBACiAjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCiAjZGVmaW5l
IGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1wbC5o
IgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5Lmgi
CiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKICNpbmNsdWRlICJld2tfb2JqZWN0X3ByaXZh
dGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKLWNsYXNzIEV3a1ZpZXdJbXBsOworY2xhc3MgRXdrVmlldzsKIAogY2xhc3Mg
RXdrV2luZG93RmVhdHVyZXMgOiBwdWJsaWMgRXdrT2JqZWN0IHsKIHB1YmxpYzoKICAgICBFV0tf
T0JKRUNUX0RFQ0xBUkUoRXdrV2luZG93RmVhdHVyZXMpCiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxFd2tXaW5kb3dGZWF0dXJlcz4gY3JlYXRlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFyeSog
d2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gY3JlYXRlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFy
eSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXcqIHZpZXdJbXBsKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBFd2tXaW5kb3dGZWF0dXJlcyh3aW5kb3dGZWF0dXJlcywgdmlld0lt
cGwpKTsKICAgICB9CkBAIC02OSwxMSArNjksMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RnVs
bFNjcmVlbihib29sIGZ1bGxTY3JlZW4pIHsgbV9mdWxsU2NyZWVuID0gZnVsbFNjcmVlbjsgfQog
CiBwcml2YXRlOgotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKFdlYktpdDo6SW1tdXRhYmxlRGljdGlv
bmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7CisgICAgRXdrV2lu
ZG93RmVhdHVyZXMoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywg
RXdrVmlldyogdmlld0ltcGwpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDI+CiAgICAgc3RhdGljIFQxIGdldFdpbmRvd0ZlYXR1cmVWYWx1ZShXZWJLaXQ6OkltbXV0YWJs
ZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBjb25zdCBTdHJpbmcmIGZlYXR1cmVOYW1lKTsK
IAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKIAog
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2dlb21ldHJ5OwogICAgIGJvb2wgbV90b29sYmFyVmlz
aWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0
b3JlQ2Fpcm8uY3BwCmluZGV4IDcxZjQ4ZTcuLmVmZDZkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtMzQsNyAr
MzQsNyBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAKICNpZiBQTEFURk9STShFRkwpCi0jaW5jbHVk
ZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjZW5kaWYKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03MSw4ICs3MSw4IEBAIHZvaWQgQmFja2luZ1N0b3JlOjpp
bmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRlSW5m
byYKIAogI2lmIFBMQVRGT1JNKEVGTCkKICAgICAvLyBVcGRhdGUgZXdrX3ZpZXcgd2l0aCBuZXcg
YmFja2luZ1N0b3JlIGltYWdlLgotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IEV3a1ZpZXdJ
bXBsOjpmcm9tRXZhc09iamVjdChtX3dlYlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKLSAgICB2
aWV3SW1wbC0+c2V0SW1hZ2VEYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9iYWNr
aW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpKSwgbV9zaXplKTsKKyAgICBFd2tWaWV3KiB2aWV3ID0g
RXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJQYWdlUHJveHktPnZpZXdXaWRnZXQoKSk7Cisg
ICAgdmlldy0+c2V0SW1hZ2VEYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9iYWNr
aW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpKSwgbV9zaXplKTsKICNlbmRpZgogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5Q2xpZW50RWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRF
ZmwuY3BwCmluZGV4IDBlODAyNjguLmJlYWM3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuaCIKIAogI2luY2x1
ZGUgIkRvd25sb2FkUHJveHkuaCIKLSNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgorI2luY2x1ZGUg
IkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0NvbnRleHQu
aCIKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKQEAgLTU0LDcgKzU0LDcgQEAgdm9p
ZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEo
V0tDb250ZXh0UmVmLCBXS1BhZ2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEV3a05h
dmlnYXRpb25EYXRhPiBuYXZpZ2F0aW9uRGF0YUV3ayA9IEV3a05hdmlnYXRpb25EYXRhOjpjcmVh
dGUobmF2aWdhdGlvbkRhdGEpOwotICAgIGhpc3RvcnlDbGllbnQtPm1fbmF2aWdhdGUoRXdrVmll
d0ltcGw6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIG5hdmlnYXRpb25EYXRhRXdrLmdldCgp
LCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX25hdmln
YXRlKEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIG5hdmlnYXRpb25EYXRhRXdr
LmdldCgpLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKIH0KIAogdm9pZCBDb250ZXh0SGlz
dG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQ
YWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkws
IFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC02Nyw3ICs2Nyw3IEBAIHZv
aWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS0Nv
bnRleHRSZWYsIFdLUGFnZVJlZiBwCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNvdXJjZVVSTFN0
cmluZyhzb3VyY2VVUkwpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvblVSTFN0
cmluZyhkZXN0aW5hdGlvblVSTCk7CiAKLSAgICBoaXN0b3J5Q2xpZW50LT5tX2NsaWVudFJlZGly
ZWN0KEV3a1ZpZXdJbXBsOjp2aWV3RnJvbVBhZ2VWaWV3TWFwKHBhZ2UpLCBzb3VyY2VVUkxTdHJp
bmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAg
ICBoaXN0b3J5Q2xpZW50LT5tX2NsaWVudFJlZGlyZWN0KEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZp
ZXdNYXAocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3Rv
cnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZs
OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwg
V0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBDb250ZXh0SGlz
dG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQ
YWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVS
TCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0
aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fc2VydmVyUmVkaXJlY3QoRXdrVmlld0lt
cGw6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRp
b25VUkxTdHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGll
bnQtPm1fc2VydmVyUmVkaXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdlKSwg
c291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+bV91
c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFVwZGF0ZUhp
c3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRs
ZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAt
OTMsNyArOTMsNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRVcGRhdGVIaXN0
b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZQogICAgIFdLRWluYVNoYXJlZFN0
cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZ1VS
TChVUkwpOwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV90aXRsZVVwZGF0ZWQoRXdrVmlld0ltcGw6
OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhpc3Rv
cnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRhdGVk
KEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJpbmdV
UkwsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5
Q2xpZW50RWZsOjpwb3B1bGF0ZVZpc2l0ZWRMaW5rcyhXS0NvbnRleHRSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Nv
bnRleHRNZW51Q2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29u
dGV4dE1lbnVDbGllbnRFZmwuY3BwCmluZGV4IDdhODYwMjguLjkxMjNkMjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dE1lbnVDbGllbnRFZmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dE1lbnVDbGllbnRFZmwuY3Bw
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29udGV4
dE1lbnVDbGllbnRFZmwuaCIKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAi
RXdrVmlldy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV0tBcnJh
eS5oIgogI2luY2x1ZGUgIldLUGFnZS5oIgpAQCAtNDAsMTAgKzQwLDEwIEBAIHN0YXRpYyBpbmxp
bmUgQ29udGV4dE1lbnVDbGllbnRFZmwqIHRvQ29udGV4dENsaWVudEVmbChjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUNsaWVudEVmbCo+
KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKIH0KIAotQ29udGV4dE1lbnVDbGllbnRF
Zmw6OkNvbnRleHRNZW51Q2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1f
dmlld0ltcGwodmlld0ltcGwpCitDb250ZXh0TWVudUNsaWVudEVmbDo6Q29udGV4dE1lbnVDbGll
bnRFZmwoRXdrVmlldyogdmlldykKKyAgICA6IG1fdmlldyh2aWV3KQogewotICAgIFdLUGFnZVJl
ZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+d2tQYWdlKCk7CisgICAgV0tQYWdlUmVmIHBhZ2VSZWYg
PSBtX3ZpZXctPndrUGFnZSgpOwogICAgIEFTU0VSVChwYWdlUmVmKTsKIAogICAgIFdLUGFnZUNv
bnRleHRNZW51Q2xpZW50IGNvbnRleHRNZW51Q2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVudEVmbC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVudEVmbC5oCmluZGV4IGIyOWU0ZWQuLmIy
MTJlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dE1l
bnVDbGllbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0NvbnRleHRN
ZW51Q2xpZW50RWZsLmgKQEAgLTMzLDEzICszMywxMyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLWNsYXNzIEV3a1ZpZXdJ
bXBsOworY2xhc3MgRXdrVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENvbnRl
eHRNZW51Q2xpZW50RWZsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDb250ZXh0
TWVudUNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDb250ZXh0TWVudUNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXcqIHZpZXdJbXBs
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb250ZXh0TWVudUNsaWVudEVm
bCh2aWV3SW1wbCkpOwogICAgIH0KQEAgLTQ3LDkgKzQ3LDkgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYsIFdLQXJyYXlS
ZWYgcHJvcG9zZWRNZW51LCBXS0FycmF5UmVmKiBuZXdNZW51LCBXS0hpdFRlc3RSZXN1bHRSZWYs
IFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAKIHByaXZhdGU6
Ci0gICAgZXhwbGljaXQgQ29udGV4dE1lbnVDbGllbnRFZmwoRXdrVmlld0ltcGwqKTsKKyAgICBl
eHBsaWNpdCBDb250ZXh0TWVudUNsaWVudEVmbChFd2tWaWV3Kik7CiAKLSAgICBFd2tWaWV3SW1w
bCogbV92aWV3SW1wbDsKKyAgICBFd2tWaWV3KiBtX3ZpZXc7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRG93bmxv
YWRNYW5hZ2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRG93bmxvYWRN
YW5hZ2VyRWZsLmNwcAppbmRleCA5M2E3ZGIwLi40NTcwYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuY3BwCkBAIC0yNyw3ICsy
Nyw3IEBACiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyRWZsLmgiCiAKICNpbmNsdWRlICJEb3du
bG9hZFByb3h5LmgiCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3
LmgiCiAjaW5jbHVkZSAiV0tDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNs
dWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCkBAIC01Miw3ICs1Miw3IEBAIFdLU3RyaW5nUmVm
IERvd25sb2FkTWFuYWdlckVmbDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5h
bWUoV0tDb250ZXh0CiAKICAgICAvLyBXZSBzZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFsIG9u
IHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2UgaGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UKICAg
ICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUuCi0gICAgZG93bmxvYWQtPnZpZXdJbXBs
KCktPnNtYXJ0Q2FsbGJhY2s8RG93bmxvYWRKb2JSZXF1ZXN0ZWQ+KCkuY2FsbChkb3dubG9hZCk7
CisgICAgZG93bmxvYWQtPnZpZXcoKS0+c21hcnRDYWxsYmFjazxEb3dubG9hZEpvYlJlcXVlc3Rl
ZD4oKS5jYWxsKGRvd25sb2FkKTsKIAogICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRoZSBk
ZXN0aW5hdGlvbiB0byBiZSBhIFVSTC4KICAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBBU0NJSUxp
dGVyYWwoImZpbGU6Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZG93bmxvYWQtPmRlc3RpbmF0aW9u
KCkpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIERvd25sb2FkTWFuYWdlckVmbDo6ZGlkRmFpbChX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tFcnJvcgogICAgIE93blB0
cjxFd2tFcnJvcj4gZXdrRXJyb3IgPSBFd2tFcnJvcjo6Y3JlYXRlKGVycm9yKTsKICAgICBkb3du
bG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQpOwogICAgIEV3a19E
b3dubG9hZF9Kb2JfRXJyb3IgZG93bmxvYWRFcnJvciA9IHsgZG93bmxvYWQsIGV3a0Vycm9yLmdl
dCgpIH07Ci0gICAgZG93bmxvYWQtPnZpZXdJbXBsKCktPnNtYXJ0Q2FsbGJhY2s8RG93bmxvYWRK
b2JGYWlsZWQ+KCkuY2FsbCgmZG93bmxvYWRFcnJvcik7CisgICAgZG93bmxvYWQtPnZpZXcoKS0+
c21hcnRDYWxsYmFjazxEb3dubG9hZEpvYkZhaWxlZD4oKS5jYWxsKCZkb3dubG9hZEVycm9yKTsK
ICAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihkb3dubG9hZElkKTsK
IH0KIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRDYW5j
ZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0CiAgICAgQVNT
RVJUKGRvd25sb2FkKTsKIAogICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURfSk9C
X1NUQVRFX0NBTkNFTExFRCk7Ci0gICAgZG93bmxvYWQtPnZpZXdJbXBsKCktPnNtYXJ0Q2FsbGJh
Y2s8RG93bmxvYWRKb2JDYW5jZWxsZWQ+KCkuY2FsbChkb3dubG9hZCk7CisgICAgZG93bmxvYWQt
PnZpZXcoKS0+c21hcnRDYWxsYmFjazxEb3dubG9hZEpvYkNhbmNlbGxlZD4oKS5jYWxsKGRvd25s
b2FkKTsKICAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihkb3dubG9h
ZElkKTsKIH0KIApAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpk
aWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0CiAg
ICAgQVNTRVJUKGRvd25sb2FkKTsKIAogICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxP
QURfSk9CX1NUQVRFX0ZJTklTSEVEKTsKLSAgICBkb3dubG9hZC0+dmlld0ltcGwoKS0+c21hcnRD
YWxsYmFjazxEb3dubG9hZEpvYkZpbmlzaGVkPigpLmNhbGwoZG93bmxvYWQpOworICAgIGRvd25s
b2FkLT52aWV3KCktPnNtYXJ0Q2FsbGJhY2s8RG93bmxvYWRKb2JGaW5pc2hlZD4oKS5jYWxsKGRv
d25sb2FkKTsKICAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihkb3du
bG9hZElkKTsKIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIERvd25sb2FkTWFuYWdlckVmbDo6fkRv
d25sb2FkTWFuYWdlckVmbCgpCiAgICAgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQodG9BUEko
bV9jb250ZXh0LT53ZWJDb250ZXh0KCkuZ2V0KCkpLCAwKTsKIH0KIAotdm9pZCBEb3dubG9hZE1h
bmFnZXJFZmw6OnJlZ2lzdGVyRG93bmxvYWQoRG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV3a1Zp
ZXdJbXBsKiB2aWV3SW1wbCkKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpyZWdpc3RlckRvd25s
b2FkKERvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3KiB2aWV3SW1wbCkKIHsKICAgICB1
aW50NjRfdCBkb3dubG9hZElkID0gZG93bmxvYWQtPmRvd25sb2FkSUQoKTsKICAgICBpZiAobV9k
b3dubG9hZEpvYnMuY29udGFpbnMoZG93bmxvYWRJZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuaAppbmRleCBkMzcyOGMzLi4xNGJkNTQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdl
ckVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRG93bmxvYWRNYW5hZ2Vy
RWZsLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgfkRvd25sb2FkTWFuYWdlckVm
bCgpOwogCi0gICAgdm9pZCByZWdpc3RlckRvd25sb2FkKERvd25sb2FkUHJveHkqLCBFd2tWaWV3
SW1wbCopOworICAgIHZvaWQgcmVnaXN0ZXJEb3dubG9hZChEb3dubG9hZFByb3h5KiwgRXdrVmll
dyopOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERvd25sb2FkTWFuYWdlckVmbChFd2tDb250
ZXh0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0ZpbmRDbGll
bnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5kQ2xpZW50RWZsLmNw
cAppbmRleCA1YjJlODhlLi4zMzRiNGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL0ZpbmRDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvRmluZENsaWVudEVmbC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1w
bC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS1BhZ2UuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIEV3a1ZpZXdDYWxsYmFja3M7CkBAIC00MiwyMCArNDIsMjAgQEAgc3RhdGljIGlu
bGluZSBGaW5kQ2xpZW50RWZsKiB0b0ZpbmRDbGllbnRFZmwoY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKIHZvaWQgRmluZENsaWVudEVmbDo6ZGlkRmluZFN0cmluZyhXS1BhZ2VSZWYsIFdLU3RyaW5n
UmVmLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAg
IEZpbmRDbGllbnRFZmwqIGZpbmRDbGllbnQgPSB0b0ZpbmRDbGllbnRFZmwoY2xpZW50SW5mbyk7
Ci0gICAgZmluZENsaWVudC0+bV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxUZXh0Rm91bmQ+KCku
Y2FsbCgmbWF0Y2hDb3VudCk7CisgICAgZmluZENsaWVudC0+bV92aWV3LT5zbWFydENhbGxiYWNr
PFRleHRGb3VuZD4oKS5jYWxsKCZtYXRjaENvdW50KTsKIH0KIAogdm9pZCBGaW5kQ2xpZW50RWZs
OjpkaWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7CiAgICAgRmluZENsaWVudEVmbCogZmluZENsaWVudCA9IHRvRmluZENs
aWVudEVmbChjbGllbnRJbmZvKTsKICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKLSAgICBm
aW5kQ2xpZW50LT5tX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPFRleHRGb3VuZD4oKS5jYWxsKCZt
YXRjaENvdW50KTsKKyAgICBmaW5kQ2xpZW50LT5tX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8VGV4dEZv
dW5kPigpLmNhbGwoJm1hdGNoQ291bnQpOwogfQogCi1GaW5kQ2xpZW50RWZsOjpGaW5kQ2xpZW50
RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCitG
aW5kQ2xpZW50RWZsOjpGaW5kQ2xpZW50RWZsKEV3a1ZpZXcqIHZpZXdJbXBsKQorICAgIDogbV92
aWV3KHZpZXdJbXBsKQogewotICAgIFdLUGFnZVJlZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+d2tQ
YWdlKCk7CisgICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXctPndrUGFnZSgpOwogICAgIEFT
U0VSVChwYWdlUmVmKTsKIAogICAgIFdLUGFnZUZpbmRDbGllbnQgZmluZENsaWVudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRmluZENsaWVudEVmbC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5kQ2xpZW50RWZsLmgKaW5kZXggMjc0NDYwYi4u
ZGQxMmUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5kQ2xp
ZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5kQ2xpZW50RWZs
LmgKQEAgLTMwLDI0ICszMCwyNCBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tW
aWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRmluZENsaWVudEVmbCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RmluZENsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJ
bXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaW5kQ2xpZW50RWZsPiBjcmVh
dGUoRXdrVmlldyogdmlld0ltcGwpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEZpbmRDbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgRmluZENsaWVudEVmbChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IEZpbmRDbGllbnRF
ZmwoRXdrVmlldyopOwogCiAgICAgc3RhdGljIHZvaWQgZGlkRmluZFN0cmluZyhXS1BhZ2VSZWYs
IFdLU3RyaW5nUmVmLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiwgV0tTdHJp
bmdSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCi0gICAgRXdrVmlld0ltcGwqIG1fdmll
d0ltcGw7CisgICAgRXdrVmlldyogbV92aWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Zvcm1DbGllbnRFZmwu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZsLmNwcAppbmRl
eCAwMDFiYmE0Li4xNTViZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL0Zvcm1DbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
Rm9ybUNsaWVudEVmbC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGb3JtQ2xpZW50RWZsLmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgor
I2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS1BhZ2UuaCIKICNpbmNsdWRlICJld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfcHJpdmF0ZS5oIgogCkBAIC00NCwxMyArNDQsMTMgQEAg
dm9pZCBGb3JtQ2xpZW50RWZsOjp3aWxsU3VibWl0Rm9ybShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYg
LypmcmFtZSovLCBXS0ZyYW1lUmVmIC8KICAgICBGb3JtQ2xpZW50RWZsKiBmb3JtQ2xpZW50ID0g
dG9Gb3JtQ2xpZW50RWZsKGNsaWVudEluZm8pOwogCiAgICAgUmVmUHRyPEV3a0Zvcm1TdWJtaXNz
aW9uUmVxdWVzdD4gcmVxdWVzdCA9IEV3a0Zvcm1TdWJtaXNzaW9uUmVxdWVzdDo6Y3JlYXRlKHZh
bHVlcywgbGlzdGVuZXIpOwotICAgIGZvcm1DbGllbnQtPm1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJh
Y2s8TmV3Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0PigpLmNhbGwocmVxdWVzdC5nZXQoKSk7CisgICAg
Zm9ybUNsaWVudC0+bV92aWV3LT5zbWFydENhbGxiYWNrPE5ld0Zvcm1TdWJtaXNzaW9uUmVxdWVz
dD4oKS5jYWxsKHJlcXVlc3QuZ2V0KCkpOwogfQogCi1Gb3JtQ2xpZW50RWZsOjpGb3JtQ2xpZW50
RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCitG
b3JtQ2xpZW50RWZsOjpGb3JtQ2xpZW50RWZsKEV3a1ZpZXcqIHZpZXdJbXBsKQorICAgIDogbV92
aWV3KHZpZXdJbXBsKQogewotICAgIFdLUGFnZVJlZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+d2tQ
YWdlKCk7CisgICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXctPndrUGFnZSgpOwogICAgIEFT
U0VSVChwYWdlUmVmKTsKIAogICAgIFdLUGFnZUZvcm1DbGllbnQgZm9ybUNsaWVudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRm9ybUNsaWVudEVmbC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZsLmgKaW5kZXggNjZlMDYwYy4u
NjY2YzQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3JtQ2xp
ZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZs
LmgKQEAgLTI5LDIzICsyOSwyMyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tW
aWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRm9ybUNsaWVudEVmbCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Rm9ybUNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJ
bXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxGb3JtQ2xpZW50RWZsPiBjcmVh
dGUoRXdrVmlldyogdmlld0ltcGwpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEZvcm1DbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgRm9ybUNsaWVudEVmbChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IEZvcm1DbGllbnRF
ZmwoRXdrVmlldyopOwogCiAgICAgc3RhdGljIHZvaWQgd2lsbFN1Ym1pdEZvcm0oV0tQYWdlUmVm
LCBXS0ZyYW1lUmVmLCBXS0ZyYW1lUmVmLCBXS0RpY3Rpb25hcnlSZWYgdmFsdWVzLCBXS1R5cGVS
ZWYgdXNlckRhdGEsIFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1wbDsKKyAgICBFd2tWaWV3KiBt
X3ZpZXc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvSW5wdXRNZXRob2RDb250ZXh0RWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvSW5wdXRNZXRob2RDb250ZXh0RWZsLmNwcAppbmRleCA1MzFl
M2JlLi5kYTUyOTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0lu
cHV0TWV0aG9kQ29udGV4dEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9JbnB1dE1ldGhvZENvbnRleHRFZmwuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCiAKLSNpbmNsdWRl
ICJFd2tWaWV3SW1wbC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8RWNvcmVfSU1GX0V2
YXMuaD4KQEAgLTMwLDggKzMwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1JbnB1dE1ldGhvZENvbnRleHRFZmw6OklucHV0TWV0aG9kQ29udGV4
dEVmbChFd2tWaWV3SW1wbCogdmlld0ltcGwsIFBhc3NPd25QdHI8RWNvcmVfSU1GX0NvbnRleHQ+
IGNvbnRleHQpCi0gICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQorSW5wdXRNZXRob2RDb250ZXh0
RWZsOjpJbnB1dE1ldGhvZENvbnRleHRFZmwoRXdrVmlldyogdmlldywgUGFzc093blB0cjxFY29y
ZV9JTUZfQ29udGV4dD4gY29udGV4dCkKKyAgICA6IG1fdmlldyh2aWV3KQogICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCiAgICAgLCBtX2ZvY3VzZWQoZmFsc2UpCiB7CkBAIC01MCwxNCArNTAsMTQg
QEAgdm9pZCBJbnB1dE1ldGhvZENvbnRleHRFZmw6Om9uSU1GSW5wdXRTZXF1ZW5jZUNvbXBsZXRl
KHZvaWQqIGRhdGEsIEVjb3JlX0lNRl9Db24KICAgICBpZiAoIWV2ZW50SW5mbyB8fCAhaW5wdXRN
ZXRob2RDb250ZXh0LT5tX2ZvY3VzZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlucHV0TWV0
aG9kQ29udGV4dC0+bV92aWV3SW1wbC0+cGFnZSgpLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5n
Ojpmcm9tVVRGOChzdGF0aWNfY2FzdDxjaGFyKj4oZXZlbnRJbmZvKSkpOworICAgIGlucHV0TWV0
aG9kQ29udGV4dC0+bV92aWV3LT5wYWdlKCktPmNvbmZpcm1Db21wb3NpdGlvbihTdHJpbmc6OmZy
b21VVEY4KHN0YXRpY19jYXN0PGNoYXIqPihldmVudEluZm8pKSk7CiB9CiAKIHZvaWQgSW5wdXRN
ZXRob2RDb250ZXh0RWZsOjpvbklNRlByZWVkaXRTZXF1ZW5jZUNoYW5nZWQodm9pZCogZGF0YSwg
RWNvcmVfSU1GX0NvbnRleHQqIGNvbnRleHQsIHZvaWQqKQogewogICAgIElucHV0TWV0aG9kQ29u
dGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SW5wdXRNZXRob2RDb250
ZXh0RWZsKj4oZGF0YSk7CiAKLSAgICBpZiAoIWlucHV0TWV0aG9kQ29udGV4dC0+bV92aWV3SW1w
bC0+cGFnZSgpLT5mb2N1c2VkRnJhbWUoKSB8fCAhaW5wdXRNZXRob2RDb250ZXh0LT5tX2ZvY3Vz
ZWQpCisgICAgaWYgKCFpbnB1dE1ldGhvZENvbnRleHQtPm1fdmlldy0+cGFnZSgpLT5mb2N1c2Vk
RnJhbWUoKSB8fCAhaW5wdXRNZXRob2RDb250ZXh0LT5tX2ZvY3VzZWQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNoYXIqIGJ1ZmZlciA9IDA7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW5wdXRN
ZXRob2RDb250ZXh0RWZsOjpvbklNRlByZWVkaXRTZXF1ZW5jZUNoYW5nZWQodm9pZCogZGF0YSwg
RWNvcmVfSU1GX0NvCiAgICAgZnJlZShidWZmZXIpOwogICAgIFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluZT4gdW5kZXJsaW5lczsKICAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVu
ZGVybGluZSgwLCBwcmVlZGl0U3RyaW5nLmxlbmd0aCgpLCBDb2xvcigwLCAwLCAwKSwgZmFsc2Up
KTsKLSAgICBpbnB1dE1ldGhvZENvbnRleHQtPm1fdmlld0ltcGwtPnBhZ2UoKS0+c2V0Q29tcG9z
aXRpb24ocHJlZWRpdFN0cmluZywgdW5kZXJsaW5lcywgMCk7CisgICAgaW5wdXRNZXRob2RDb250
ZXh0LT5tX3ZpZXctPnBhZ2UoKS0+c2V0Q29tcG9zaXRpb24ocHJlZWRpdFN0cmluZywgdW5kZXJs
aW5lcywgMCk7CiB9CiAKIFBhc3NPd25QdHI8RWNvcmVfSU1GX0NvbnRleHQ+IElucHV0TWV0aG9k
Q29udGV4dEVmbDo6Y3JlYXRlSU1GQ29udGV4dChFdmFzKiBjYW52YXMpCkBAIC0xMDcsNyArMTA3
LDcgQEAgdm9pZCBJbnB1dE1ldGhvZENvbnRleHRFZmw6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkK
ICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRWRpdG9y
U3RhdGUmIGVkaXRvciA9IG1fdmlld0ltcGwtPnBhZ2UoKS0+ZWRpdG9yU3RhdGUoKTsKKyAgICBj
b25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yID0gbV92aWV3LT5wYWdlKCktPmVkaXRvclN0YXRlKCk7
CiAKICAgICBpZiAoZWRpdG9yLmlzQ29udGVudEVkaXRhYmxlKSB7CiAgICAgICAgIGlmIChtX2Zv
Y3VzZWQpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBJbnB1dE1ldGhvZENvbnRleHRFZmw6OnVw
ZGF0ZVRleHRJbnB1dFN0YXRlKCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAo
ZWRpdG9yLmhhc0NvbXBvc2l0aW9uKQotICAgICAgICAgICAgbV92aWV3SW1wbC0+cGFnZSgpLT5j
YW5jZWxDb21wb3NpdGlvbigpOworICAgICAgICAgICAgbV92aWV3LT5wYWdlKCktPmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAKICAgICAgICAgbV9mb2N1c2VkID0gZmFsc2U7CiAgICAgICAgIGVjb3Jl
X2ltZl9jb250ZXh0X3Jlc2V0KG1fY29udGV4dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0lucHV0TWV0aG9kQ29udGV4dEVmbC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9JbnB1dE1ldGhvZENvbnRleHRFZmwuaAppbmRleCBhYWY1MWI5
Li4xMmRlMGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0lucHV0
TWV0aG9kQ29udGV4dEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvSW5w
dXRNZXRob2RDb250ZXh0RWZsLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAotY2xhc3MgRXdrVmlld0ltcGw7
CitjbGFzcyBFd2tWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzQsNyArMzQsNyBA
QCBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIElucHV0TWV0aG9kQ29udGV4dEVmbCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRNZXRob2RDb250ZXh0RWZsPiBjcmVh
dGUoRXdrVmlld0ltcGwqIHZpZXdJbXBsLCBFdmFzKiBjYW52YXMpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8SW5wdXRNZXRob2RDb250ZXh0RWZsPiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGwsIEV2
YXMqIGNhbnZhcykKICAgICB7CiAgICAgICAgIE93blB0cjxFY29yZV9JTUZfQ29udGV4dD4gY29u
dGV4dCA9IGNyZWF0ZUlNRkNvbnRleHQoY2FudmFzKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQpA
QCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRl
KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKEV3a1ZpZXdJbXBsKiwg
UGFzc093blB0cjxFY29yZV9JTUZfQ29udGV4dD4pOworICAgIElucHV0TWV0aG9kQ29udGV4dEVm
bChFd2tWaWV3KiwgUGFzc093blB0cjxFY29yZV9JTUZfQ29udGV4dD4pOwogCiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8RWNvcmVfSU1GX0NvbnRleHQ+IGNyZWF0ZUlNRkNvbnRleHQoRXZhcyogY2Fu
dmFzKTsKICAgICBzdGF0aWMgdm9pZCBvbklNRklucHV0U2VxdWVuY2VDb21wbGV0ZSh2b2lkKiBk
YXRhLCBFY29yZV9JTUZfQ29udGV4dCosIHZvaWQqIGV2ZW50SW5mbyk7CiAgICAgc3RhdGljIHZv
aWQgb25JTUZQcmVlZGl0U2VxdWVuY2VDaGFuZ2VkKHZvaWQqIGRhdGEsIEVjb3JlX0lNRl9Db250
ZXh0Kiwgdm9pZCogZXZlbnRJbmZvKTsKIAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOwor
ICAgIEV3a1ZpZXcqIG1fdmlldzsKICAgICBPd25QdHI8RWNvcmVfSU1GX0NvbnRleHQ+IG1fY29u
dGV4dDsKICAgICBib29sIG1fZm9jdXNlZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCmluZGV4IDI3M2QwNjQuLmY1MDg0NDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCkBAIC0y
OCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5o
IgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiRXdrVmlld0lt
cGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0
RWZsLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50LmgiCkBAIC01Miw4ICs1Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBFd2tW
aWV3Q2FsbGJhY2tzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFnZUNsaWVudEJhc2U6OlBh
Z2VDbGllbnRCYXNlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwodmll
d0ltcGwpCitQYWdlQ2xpZW50QmFzZTo6UGFnZUNsaWVudEJhc2UoRXdrVmlldyogdmlldykKKyAg
ICA6IG1fdmlldyh2aWV3KQogewogfQogCkBAIC02MSwyMSArNjEsMjEgQEAgUGFnZUNsaWVudEJh
c2U6On5QYWdlQ2xpZW50QmFzZSgpCiB7CiB9CiAKLUV3a1ZpZXdJbXBsKiBQYWdlQ2xpZW50QmFz
ZTo6dmlld0ltcGwoKSBjb25zdAorRXdrVmlldyogUGFnZUNsaWVudEJhc2U6OnZpZXcoKSBjb25z
dAogewotICAgIHJldHVybiBtX3ZpZXdJbXBsOworICAgIHJldHVybiBtX3ZpZXc7CiB9CiAKIC8v
IFBhZ2VDbGllbnQKIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEJhc2U6
OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQogewotICAgIE93blB0cjxEcmF3aW5nQXJlYVByb3h5
PiBkcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhUHJveHlJbXBsOjpjcmVhdGUobV92aWV3SW1wbC0+
cGFnZSgpKTsKKyAgICBPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gZHJhd2luZ0FyZWEgPSBEcmF3
aW5nQXJlYVByb3h5SW1wbDo6Y3JlYXRlKG1fdmlldy0+cGFnZSgpKTsKICAgICByZXR1cm4gZHJh
d2luZ0FyZWEucmVsZWFzZSgpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRWaWV3TmVl
ZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgbV92aWV3SW1w
bC0+dXBkYXRlKHJlY3QpOworICAgIG1fdmlldy0+dXBkYXRlKHJlY3QpOwogfQogCiB2b2lkIFBh
Z2VDbGllbnRCYXNlOjpkaXNwbGF5VmlldygpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgUGFnZUNs
aWVudEJhc2U6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwg
Y29uc3QgV2ViQ29yCiAKIFdlYkNvcmU6OkludFNpemUgUGFnZUNsaWVudEJhc2U6OnZpZXdTaXpl
KCkKIHsKLSAgICByZXR1cm4gbV92aWV3SW1wbC0+c2l6ZSgpOworICAgIHJldHVybiBtX3ZpZXct
PnNpemUoKTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50QmFzZTo6aXNWaWV3V2luZG93QWN0aXZlKCkK
QEAgLTEwMSwxMiArMTAxLDEyIEBAIGJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld1dpbmRvd0Fj
dGl2ZSgpCiAKIGJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld0ZvY3VzZWQoKQogewotICAgIHJl
dHVybiBtX3ZpZXdJbXBsLT5pc0ZvY3VzZWQoKTsKKyAgICByZXR1cm4gbV92aWV3LT5pc0ZvY3Vz
ZWQoKTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50QmFzZTo6aXNWaWV3VmlzaWJsZSgpCiB7Ci0gICAg
cmV0dXJuIG1fdmlld0ltcGwtPmlzVmlzaWJsZSgpOworICAgIHJldHVybiBtX3ZpZXctPmlzVmlz
aWJsZSgpOwogfQogCiBib29sIFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCkBAIC0x
MTgsMzEgKzExOCwzMSBAQCBib29sIFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCiB2
b2lkIFBhZ2VDbGllbnRCYXNlOjpwcm9jZXNzRGlkQ3Jhc2goKQogewogICAgIC8vIENoZWNrIGlm
IGxvYWRpbmcgd2FzIG9uZ29pbmcsIHdoZW4gd2ViIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBkb3Vi
bGUgbG9hZFByb2dyZXNzID0gZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQobV92aWV3SW1wbC0+
dmlldygpKTsKKyAgICBkb3VibGUgbG9hZFByb2dyZXNzID0gZXdrX3ZpZXdfbG9hZF9wcm9ncmVz
c19nZXQobV92aWV3LT52aWV3KCkpOwogICAgIGlmIChsb2FkUHJvZ3Jlc3MgPj0gMCAmJiBsb2Fk
UHJvZ3Jlc3MgPCAxKSB7CiAgICAgICAgIGxvYWRQcm9ncmVzcyA9IDE7Ci0gICAgICAgIG1fdmll
d0ltcGwtPnNtYXJ0Q2FsbGJhY2s8TG9hZFByb2dyZXNzPigpLmNhbGwoJmxvYWRQcm9ncmVzcyk7
CisgICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxMb2FkUHJvZ3Jlc3M+KCkuY2FsbCgmbG9h
ZFByb2dyZXNzKTsKICAgICB9CiAKLSAgICBtX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPFRvb2x0
aXBUZXh0VW5zZXQ+KCkuY2FsbCgpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxUb29sdGlw
VGV4dFVuc2V0PigpLmNhbGwoKTsKIAogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIG1f
dmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8V2ViUHJvY2Vzc0NyYXNoZWQ+KCkuY2FsbCgmaGFuZGxl
ZCk7CisgICAgbV92aWV3LT5zbWFydENhbGxiYWNrPFdlYlByb2Nlc3NDcmFzaGVkPigpLmNhbGwo
JmhhbmRsZWQpOwogCiAgICAgaWYgKCFoYW5kbGVkKSB7Ci0gICAgICAgIENTdHJpbmcgdXJsID0g
bV92aWV3SW1wbC0+cGFnZSgpLT51cmxBdFByb2Nlc3NFeGl0KCkudXRmOCgpOworICAgICAgICBD
U3RyaW5nIHVybCA9IG1fdmlldy0+cGFnZSgpLT51cmxBdFByb2Nlc3NFeGl0KCkudXRmOCgpOwog
ICAgICAgICBXQVJOKCJXQVJOSU5HOiBUaGUgd2ViIHByb2Nlc3MgZXhwZXJpZW5jZWQgYSBjcmFz
aCBvbiAnJXMnLlxuIiwgdXJsLmRhdGEoKSk7CiAKICAgICAgICAgLy8gRGlzcGxheSBhbiBlcnJv
ciBwYWdlCi0gICAgICAgIGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQobV92aWV3SW1wbC0+dmll
dygpLCAiVGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOworICAg
ICAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKG1fdmlldy0+dmlldygpLCAiVGhlIHdlYiBw
cm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOwogICAgIH0KIH0KIAogdm9pZCBQ
YWdlQ2xpZW50QmFzZTo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKIHsKLSAgICBjb25zdCBjaGFyKiB0
aGVtZVBhdGggPSBtX3ZpZXdJbXBsLT50aGVtZVBhdGgoKTsKKyAgICBjb25zdCBjaGFyKiB0aGVt
ZVBhdGggPSBtX3ZpZXctPnRoZW1lUGF0aCgpOwogICAgIGlmICh0aGVtZVBhdGgpCi0gICAgICAg
IG1fdmlld0ltcGwtPnBhZ2UoKS0+c2V0VGhlbWVQYXRoKHRoZW1lUGF0aCk7CisgICAgICAgIG1f
dmlldy0+cGFnZSgpLT5zZXRUaGVtZVBhdGgodGhlbWVQYXRoKTsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50QmFzZTo6cGFnZUNsb3NlZCgpCkBAIC0xNTMsMTQgKzE1MywxNCBAQCB2b2lkIFBhZ2VDbGll
bnRCYXNlOjpwYWdlQ2xvc2VkKCkKIHZvaWQgUGFnZUNsaWVudEJhc2U6OnRvb2xUaXBDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkKIHsKICAgICBpZiAobmV3
VG9vbFRpcC5pc0VtcHR5KCkpCi0gICAgICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8VG9v
bHRpcFRleHRVbnNldD4oKS5jYWxsKCk7CisgICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxU
b29sdGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKICAgICBlbHNlCi0gICAgICAgIG1fdmlld0ltcGwt
PnNtYXJ0Q2FsbGJhY2s8VG9vbHRpcFRleHRTZXQ+KCkuY2FsbChuZXdUb29sVGlwKTsKKyAgICAg
ICAgbV92aWV3LT5zbWFydENhbGxiYWNrPFRvb2x0aXBUZXh0U2V0PigpLmNhbGwobmV3VG9vbFRp
cCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEJhc2U6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1
cnNvcikKIHsKLSAgICBtX3ZpZXdJbXBsLT5zZXRDdXJzb3IoY3Vyc29yKTsKKyAgICBtX3ZpZXct
PnNldEN1cnNvcihjdXJzb3IpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRDdXJzb3JI
aWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkKQEAgLTIxNCwxMiArMjE0LDEyIEBAIHZvaWQgUGFn
ZUNsaWVudEJhc2U6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50
JiwgYm9vbCAvKndhc0V2CiAKIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGll
bnRCYXNlOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAg
cmV0dXJuIFdlYlBvcHVwTWVudVByb3h5RWZsOjpjcmVhdGUobV92aWV3SW1wbCwgcGFnZSk7Cisg
ICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5RWZsOjpjcmVhdGUobV92aWV3LCBwYWdlKTsKIH0K
IAogUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50QmFzZTo6Y3JlYXRl
Q29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIFdlYkNv
bnRleHRNZW51UHJveHlFZmw6OmNyZWF0ZShtX3ZpZXdJbXBsLCBwYWdlKTsKKyAgICByZXR1cm4g
V2ViQ29udGV4dE1lbnVQcm94eUVmbDo6Y3JlYXRlKG1fdmlldywgcGFnZSk7CiB9CiAKICNpZiBF
TkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKQEAgLTIzOCwxMiArMjM4LDEyIEBAIHZvaWQgUGFnZUNs
aWVudEJhc2U6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9v
bCwgYm9vbCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFBhZ2VDbGll
bnRCYXNlOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNv
bnRleHQmKQogewotICAgIG1fdmlld0ltcGwtPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKTsKKyAgICBtX3ZpZXctPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIH0K
IAogdm9pZCBQYWdlQ2xpZW50QmFzZTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkK
IHsKLSAgICBtX3ZpZXdJbXBsLT5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAg
ICBtX3ZpZXctPmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogfQogCiB2b2lkIFBh
Z2VDbGllbnRCYXNlOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0JikKQEAgLTI5MCwxNSArMjkwLDE1IEBAIHZvaWQgUGFnZUNsaWVudEJhc2U6
OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwg
RmluCiAKIHZvaWQgUGFnZUNsaWVudEJhc2U6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKIHsKLSAg
ICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9IG1fdmlld0ltcGwt
PmlucHV0TWV0aG9kQ29udGV4dCgpOworICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRN
ZXRob2RDb250ZXh0ID0gbV92aWV3LT5pbnB1dE1ldGhvZENvbnRleHQoKTsKICAgICBpZiAoaW5w
dXRNZXRob2RDb250ZXh0KQogICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPnVwZGF0ZVRleHRJ
bnB1dFN0YXRlKCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEJhc2U6OmhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKIHsKLSAgICBFd2tDb250ZXh0KiBjb250ZXh0
ID0gbV92aWV3SW1wbC0+ZXdrQ29udGV4dCgpOwotICAgIGNvbnRleHQtPmRvd25sb2FkTWFuYWdl
cigpLT5yZWdpc3RlckRvd25sb2FkKGRvd25sb2FkLCBtX3ZpZXdJbXBsKTsKKyAgICBFd2tDb250
ZXh0KiBjb250ZXh0ID0gbV92aWV3LT5ld2tDb250ZXh0KCk7CisgICAgY29udGV4dC0+ZG93bmxv
YWRNYW5hZ2VyKCktPnJlZ2lzdGVyRG93bmxvYWQoZG93bmxvYWQsIG1fdmlldyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9QYWdlQ2xpZW50QmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
Q2xpZW50QmFzZS5oCmluZGV4IDk3MGQ3YWYuLjRhMDIyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNs
dWRlICJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSA8RXZhcy5oPgogCi1jbGFzcyBFd2tWaWV3SW1w
bDsKK2NsYXNzIEV3a1ZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00MiwxMCArNDIs
MTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikgPSAwOwogCi0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsKCkgY29uc3Q7CisgICAg
RXdrVmlldyogdmlldygpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGFnZUNs
aWVudEJhc2UoRXdrVmlld0ltcGwqKTsKKyAgICBleHBsaWNpdCBQYWdlQ2xpZW50QmFzZShFd2tW
aWV3Kik7CiAKICAgICAvLyBQYWdlQ2xpZW50CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPERyYXdp
bmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKQEAgLTExNiw3ICsxMTYsNyBA
QCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIEV3a1ZpZXdJbXBsKiBtX3Zp
ZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKICAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIg
bV91bmRvQ29udHJvbGxlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmNwcAppbmRleCA3NGQwMGNiLi4yNjBmMTIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnREZWZh
dWx0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50
RGVmYXVsdEltcGwuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1w
bC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgogCiAjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC00MCw4ICs0MCw4IEBAIHVzaW5nIG5hbWVzcGFj
ZSBFd2tWaWV3Q2FsbGJhY2tzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFnZUNsaWVudERl
ZmF1bHRJbXBsOjpQYWdlQ2xpZW50RGVmYXVsdEltcGwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQot
ICAgIDogUGFnZUNsaWVudEJhc2Uodmlld0ltcGwpCitQYWdlQ2xpZW50RGVmYXVsdEltcGw6OlBh
Z2VDbGllbnREZWZhdWx0SW1wbChFd2tWaWV3KiB2aWV3KQorICAgIDogUGFnZUNsaWVudEJhc2Uo
dmlldykKIHsKIH0KIApAQCAtNTcsOCArNTcsOCBAQCB2b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1w
bDo6dXBkYXRlVmlld3BvcnRTaXplKCkKIHsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
ICAgICBpZiAoIW1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCkgewotICAgICAgICBtX3Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQgPSBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOjpjcmVhdGUobV92aWV3SW1wbCk7Ci0gICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxl
ciA9IGFkb3B0UHRyKG5ldyBQYWdlVmlld3BvcnRDb250cm9sbGVyKG1fdmlld0ltcGwtPnBhZ2Uo
KSwgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmdldCgpKSk7CisgICAgICAgIG1fcGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCA9IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRF
Zmw6OmNyZWF0ZShtX3ZpZXcpOworICAgICAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIgPSBh
ZG9wdFB0cihuZXcgUGFnZVZpZXdwb3J0Q29udHJvbGxlcihtX3ZpZXctPnBhZ2UoKSwgbV9wYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmdldCgpKSk7CiAgICAgfQogICAgIG1fcGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudC0+dXBkYXRlVmlld3BvcnRTaXplKCk7CiAjZW5kaWYKQEAgLTY3
LDE0ICs2NywxNCBAQCB2b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6dXBkYXRlVmlld3BvcnRT
aXplKCkKIEZsb2F0UmVjdCBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNvbnZlcnRUb0RldmljZVNw
YWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3QpCiB7CiAgICAgRmxvYXRSZWN0IHJlc3VsdCA9
IHVzZXJSZWN0OwotICAgIHJlc3VsdC5zY2FsZShtX3ZpZXdJbXBsLT5wYWdlKCktPmRldmljZVNj
YWxlRmFjdG9yKCkpOworICAgIHJlc3VsdC5zY2FsZShtX3ZpZXctPnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRmxvYXRSZWN0IFBhZ2VDbGll
bnREZWZhdWx0SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGV2aWNl
UmVjdCkKIHsKICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gZGV2aWNlUmVjdDsKLSAgICByZXN1bHQu
c2NhbGUoMSAvIG1fdmlld0ltcGwtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
cmVzdWx0LnNjYWxlKDEgLyBtX3ZpZXctPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFBhZ2VDbGllbnRE
ZWZhdWx0SW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUpCiAgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50c1Np
emUoc2l6ZSk7CiAjZW5kaWYKIAotICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8Q29udGVu
dHNTaXplQ2hhbmdlZD4oKS5jYWxsKHNpemUpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxD
b250ZW50c1NpemVDaGFuZ2VkPigpLmNhbGwoc2l6ZSk7CiB9CiAKICNpZiBVU0UoVElMRURfQkFD
S0lOR19TVE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZUNsaWVudERlZmF1bHRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VD
bGllbnREZWZhdWx0SW1wbC5oCmluZGV4IDMxYWU5MGQuLjIxYmU2OWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuaApAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUGFnZUNsaWVudERlZmF1
bHRJbXBsIDogcHVibGljIFBhZ2VDbGllbnRCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxQYWdlQ2xpZW50QmFzZT4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxQYWdlQ2xpZW50QmFzZT4gY3JlYXRlKEV3a1ZpZXcqIHZpZXdJ
bXBsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlQ2xpZW50RGVmYXVs
dEltcGwodmlld0ltcGwpKTsKICAgICB9CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZUNsaWVudERlZmF1
bHRJbXBsKEV3a1ZpZXdJbXBsKik7CisgICAgZXhwbGljaXQgUGFnZUNsaWVudERlZmF1bHRJbXBs
KEV3a1ZpZXcqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRp
ZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3Bw
CmluZGV4IGEwOGZlOTYuLmViMDcyNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAj
aW5jbHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRl
ICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJld2tf
dmlldy5oIgogCkBAIC0zNywyMCArMzcsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEV3a1ZpZXdDYWxs
YmFja3M7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYWdlQ2xpZW50TGVnYWN5SW1wbDo6UGFn
ZUNsaWVudExlZ2FjeUltcGwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQotICAgIDogUGFnZUNsaWVu
dEJhc2Uodmlld0ltcGwpCitQYWdlQ2xpZW50TGVnYWN5SW1wbDo6UGFnZUNsaWVudExlZ2FjeUlt
cGwoRXdrVmlldyogdmlldykKKyAgICA6IFBhZ2VDbGllbnRCYXNlKHZpZXcpCiB7CiB9CiAKIHZv
aWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OmRpZENvbW1pdExvYWQoKQogewotICAgIG1fdmlld0lt
cGwtPnVwZGF0ZSgpOworICAgIG1fdmlldy0+dXBkYXRlKCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVu
dExlZ2FjeUltcGw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCiB7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgbV92aWV3SW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRWaXNp
YmxlQ29udGVudHNSZWN0KEludFJlY3Qocm91bmRlZEludFBvaW50KG1fdmlld0ltcGwtPnBhZ2VQ
b3NpdGlvbigpKSwgbV92aWV3SW1wbC0+c2l6ZSgpKSwgbV92aWV3SW1wbC0+cGFnZVNjYWxlRmFj
dG9yKCksIEZsb2F0UG9pbnQoKSk7CisgICAgbV92aWV3LT5wYWdlKCktPmRyYXdpbmdBcmVhKCkt
PnNldFZpc2libGVDb250ZW50c1JlY3QoSW50UmVjdChyb3VuZGVkSW50UG9pbnQobV92aWV3LT5w
YWdlUG9zaXRpb24oKSksIG1fdmlldy0+c2l6ZSgpKSwgbV92aWV3LT5wYWdlU2NhbGVGYWN0b3Io
KSwgRmxvYXRQb2ludCgpKTsKICNlbmRpZgogfQogCkBAIC02OCwzNCArNjgsMzQgQEAgRmxvYXRS
ZWN0IFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRS
ZWN0JiB2aWV3UmVjdCkKIAogdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdlVmll
d3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpCiB7Ci0g
ICAgbV92aWV3SW1wbC0+dXBkYXRlKCk7CisgICAgbV92aWV3LT51cGRhdGUoKTsKIH0KIAogdm9p
ZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUpCiB7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAg
bV92aWV3SW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSgpLT5zZXRDb250ZW50c1NpemUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSkpOwotICAgIG1fdmlld0ltcGwtPnVwZGF0ZSgpOworICAgIG1fdmlldy0+cGFnZSgp
LT5kcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRDb250
ZW50c1NpemUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgIG1f
dmlldy0+dXBkYXRlKCk7CiAjZW5kaWYKIAotICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8
Q29udGVudHNTaXplQ2hhbmdlZD4oKS5jYWxsKHNpemUpOworICAgIG1fdmlldy0+c21hcnRDYWxs
YmFjazxDb250ZW50c1NpemVDaGFuZ2VkPigpLmNhbGwoc2l6ZSk7CiB9CiAKICNpZiBVU0UoVElM
RURfQkFDS0lOR19TVE9SRSkKIHZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VEaWRSZXF1
ZXN0U2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBtX3ZpZXdJbXBsLT5z
ZXRQYWdlUG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbikpOwotICAgIG1fdmlld0ltcGwtPnVw
ZGF0ZSgpOworICAgIG1fdmlldy0+c2V0UGFnZVBvc2l0aW9uKEZsb2F0UG9pbnQocG9zaXRpb24p
KTsKKyAgICBtX3ZpZXctPnVwZGF0ZSgpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRMZWdhY3lJbXBs
OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpCiB7Ci0gICAgbV92aWV3SW1wbC0+dXBkYXRlKCk7CisgICAgbV92aWV3LT51cGRh
dGUoKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6cGFnZVRyYW5zaXRpb25WaWV3
cG9ydFJlYWR5KCkKIHsKLSAgICBtX3ZpZXdJbXBsLT51cGRhdGUoKTsKKyAgICBtX3ZpZXctPnVw
ZGF0ZSgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuaAppbmRleCBlYjlmYmIyLi4zMDEwNDc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5o
CkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBQYWdlQ2xpZW50
TGVnYWN5SW1wbCA6IHB1YmxpYyBQYWdlQ2xpZW50QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8UGFnZUNsaWVudEJhc2U+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwp
CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUNsaWVudEJhc2U+IGNyZWF0ZShFd2tWaWV3KiB2
aWV3KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlQ2xpZW50TGVnYWN5
SW1wbCh2aWV3SW1wbCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VDbGllbnRM
ZWdhY3lJbXBsKHZpZXcpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50TGVnYWN5
SW1wbCgpIHsgfQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFBhZ2VDbGllbnRMZWdhY3lJbXBsKEV3a1ZpZXdJ
bXBsKik7CisgICAgZXhwbGljaXQgUGFnZUNsaWVudExlZ2FjeUltcGwoRXdrVmlldyopOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3Jl
OjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVu
dHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggYmIyNzUxZC4uNzQ5NTEx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVu
dEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVu
dEVmbC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJQYWdlTG9hZENsaWVudEVmbC5oIgogCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNs
dWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKICNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0ZyYW1lLmgiCkBAIC01MiwzMyArNTIsMzMgQEAgdm9p
ZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tQYWdlUmVmLCBX
S1N0cmluZ1JlZiB0aXRsZSwgV0sKICAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxv
YWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXdJbXBsKCk7Ci0gICAgdmlld0ltcGwtPnNtYXJ0
Q2FsbGJhY2s8VGl0bGVDaGFuZ2U+KCkuY2FsbCh0b0ltcGwodGl0bGUpLT5zdHJpbmcoKSk7Cisg
ICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXco
KTsKKyAgICB2aWV3LT5zbWFydENhbGxiYWNrPFRpdGxlQ2hhbmdlPigpLmNhbGwodG9JbXBsKHRp
dGxlKS0+c3RyaW5nKCkpOwogfQogCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogdm9pZCBQYWdl
TG9hZENsaWVudEVmbDo6ZGlkUmVjZWl2ZUludGVudEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFt
ZVJlZiwgV0tJbnRlbnREYXRhUmVmIGludGVudCwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQogewotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGllbnRF
ZmwoY2xpZW50SW5mbyktPnZpZXdJbXBsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxv
YWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKICAgICBSZWZQdHI8RXdrSW50ZW50PiBl
d2tJbnRlbnQgPSBFd2tJbnRlbnQ6OmNyZWF0ZShpbnRlbnQpOwotICAgIHZpZXdJbXBsLT5zbWFy
dENhbGxiYWNrPEludGVudFJlcXVlc3Q+KCkuY2FsbChld2tJbnRlbnQuZ2V0KCkpOworICAgIHZp
ZXctPnNtYXJ0Q2FsbGJhY2s8SW50ZW50UmVxdWVzdD4oKS5jYWxsKGV3a0ludGVudC5nZXQoKSk7
CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfSU5URU5UU19UQUcpCiB2b2lkIFBhZ2VMb2Fk
Q2xpZW50RWZsOjpyZWdpc3RlckludGVudFNlcnZpY2VGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJh
bWVSZWYsIFdLSW50ZW50U2VydmljZUluZm9SZWYgc2VydmljZUluZm8sIFdLVHlwZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1Bh
Z2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3SW1wbCgpOworICAgIEV3a1ZpZXcqIHZp
ZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3KCk7CiAgICAgUmVmUHRy
PEV3a0ludGVudFNlcnZpY2U+IGV3a0ludGVudFNlcnZpY2UgPSBFd2tJbnRlbnRTZXJ2aWNlOjpj
cmVhdGUoc2VydmljZUluZm8pOwotICAgIHZpZXdJbXBsLT5zbWFydENhbGxiYWNrPEludGVudFNl
cnZpY2VSZWdpc3RyYXRpb24+KCkuY2FsbChld2tJbnRlbnRTZXJ2aWNlLmdldCgpKTsKKyAgICB2
aWV3LT5zbWFydENhbGxiYWNrPEludGVudFNlcnZpY2VSZWdpc3RyYXRpb24+KCkuY2FsbChld2tJ
bnRlbnRTZXJ2aWNlLmdldCgpKTsKIH0KICNlbmRpZgogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZs
OjpkaWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKIHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNs
aWVudEluZm8pLT52aWV3SW1wbCgpOworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VMb2FkQ2xp
ZW50RWZsKGNsaWVudEluZm8pLT52aWV3KCk7CiAgICAgZG91YmxlIHByb2dyZXNzID0gV0tQYWdl
R2V0RXN0aW1hdGVkUHJvZ3Jlc3MocGFnZSk7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8
TG9hZFByb2dyZXNzPigpLmNhbGwoJnByb2dyZXNzKTsKKyAgICB2aWV3LT5zbWFydENhbGxiYWNr
PExvYWRQcm9ncmVzcz4oKS5jYWxsKCZwcm9ncmVzcyk7CiB9CiAKIHZvaWQgUGFnZUxvYWRDbGll
bnRFZmw6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWUs
IFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC04Niw4
ICs4Niw4IEBAIHZvaWQgUGFnZUxvYWRDbGllbnRFZmw6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShX
S1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwCiAgICAgaWYgKCFXS0ZyYW1lSXNNYWlu
RnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBFd2tWaWV3SW1wbCogdmlld0lt
cGwgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3SW1wbCgpOwotICAgIHZp
ZXdJbXBsLT5zbWFydENhbGxiYWNrPExvYWRGaW5pc2hlZD4oKS5jYWxsKCk7CisgICAgRXdrVmll
dyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICB2
aWV3LT5zbWFydENhbGxiYWNrPExvYWRGaW5pc2hlZD4oKS5jYWxsKCk7CiB9CiAKIHZvaWQgUGFn
ZUxvYWRDbGllbnRFZmw6OmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVmLCBX
S0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCkBAIC05NSwxMCArOTUsMTAgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6
ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWUK
ICAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5m
byktPnZpZXdJbXBsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwo
Y2xpZW50SW5mbyktPnZpZXcoKTsKICAgICBPd25QdHI8RXdrRXJyb3I+IGV3a0Vycm9yID0gRXdr
RXJyb3I6OmNyZWF0ZShlcnJvcik7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8TG9hZEVy
cm9yPigpLmNhbGwoZXdrRXJyb3IuZ2V0KCkpOwotICAgIHZpZXdJbXBsLT5zbWFydENhbGxiYWNr
PExvYWRGaW5pc2hlZD4oKS5jYWxsKCk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxMb2FkRXJy
b3I+KCkuY2FsbChld2tFcnJvci5nZXQoKSk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxMb2Fk
RmluaXNoZWQ+KCkuY2FsbCgpOwogfQogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiBmcmFtZSwgV0tU
eXBlUmVmIC8qdXNlckRhdGEqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTEwNiw5ICsx
MDYsOSBAQCB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZv
ckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiBmcgogICAgIGlmICghV0tGcmFtZUlzTWFpbkZy
YW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBs
ID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlld0ltcGwoKTsKLSAgICB2aWV3
SW1wbC0+aW5mb3JtVVJMQ2hhbmdlKCk7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZD4oKS5jYWxsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFn
ZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICB2aWV3LT5pbmZvcm1VUkxD
aGFuZ2UoKTsKKyAgICB2aWV3LT5zbWFydENhbGxiYWNrPFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQ+
KCkuY2FsbCgpOwogfQogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYg
ZnJhbWUsIFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBA
IC0xMTYsOSArMTE2LDkgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWcKICAgICBpZiAoIVdLRnJh
bWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV3a1ZpZXdJbXBs
KiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXdJbXBsKCk7
Ci0gICAgdmlld0ltcGwtPmluZm9ybVVSTENoYW5nZSgpOwotICAgIHZpZXdJbXBsLT5zbWFydENh
bGxiYWNrPFByb3Zpc2lvbmFsTG9hZFJlZGlyZWN0PigpLmNhbGwoKTsKKyAgICBFd2tWaWV3KiB2
aWV3ID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlldygpOworICAgIHZpZXct
PmluZm9ybVVSTENoYW5nZSgpOworICAgIHZpZXctPnNtYXJ0Q2FsbGJhY2s8UHJvdmlzaW9uYWxM
b2FkUmVkaXJlY3Q+KCkuY2FsbCgpOwogfQogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRG
YWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVm
IGZyYW1lLCBXS0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCkBAIC0xMjYsOSArMTI2LDkgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmEKICAgICBpZiAo
IVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV3a1Zp
ZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXdJ
bXBsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5m
byktPnZpZXcoKTsKICAgICBPd25QdHI8RXdrRXJyb3I+IGV3a0Vycm9yID0gRXdrRXJyb3I6OmNy
ZWF0ZShlcnJvcik7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8UHJvdmlzaW9uYWxMb2Fk
RmFpbGVkPigpLmNhbGwoZXdrRXJyb3IuZ2V0KCkpOworICAgIHZpZXctPnNtYXJ0Q2FsbGJhY2s8
UHJvdmlzaW9uYWxMb2FkRmFpbGVkPigpLmNhbGwoZXdrRXJyb3IuZ2V0KCkpOwogfQogCiAjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xMzcsMjEgKzEzNywyMSBAQCB2b2lkIFBhZ2VM
b2FkQ2xpZW50RWZsOjpkaWRDb21taXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVm
IGZyYW1lLCBXS1R5cAogICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlTG9hZENsaWVu
dEVmbChjbGllbnRJbmZvKS0+dmlld0ltcGwoKTsKLSAgICB2aWV3SW1wbC0+cGFnZUNsaWVudCgp
LT5kaWRDb21taXRMb2FkKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRF
ZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICB2aWV3LT5wYWdlQ2xpZW50KCktPmRpZENvbW1p
dExvYWQoKTsKIH0KICNlbmRpZgogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJ
dGVtLCBXS0FycmF5UmVmIHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsK
LSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT52aWV3SW1wbCgpOwotICAgIEFTU0VSVCh2aWV3SW1wbCk7CisgICAgRXdrVmlldyogdmll
dyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICBBU1NFUlQo
dmlldyk7CiAKLSAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QgPSBld2tfdmlld19iYWNr
X2ZvcndhcmRfbGlzdF9nZXQodmlld0ltcGwtPnZpZXcoKSk7CisgICAgRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZpZXco
KSk7CiAgICAgQVNTRVJUKGxpc3QpOwogICAgIGxpc3QtPnVwZGF0ZShhZGRlZEl0ZW0sIHJlbW92
ZWRJdGVtcyk7CiAKLSAgICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxCYWNrRm9yd2FyZExpc3RD
aGFuZ2U+KCkuY2FsbCgpOworICAgIHZpZXctPnNtYXJ0Q2FsbGJhY2s8QmFja0ZvcndhcmRMaXN0
Q2hhbmdlPigpLmNhbGwoKTsKIH0KIAogdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkU2FtZURv
Y3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiBmcmFtZSwgV0tT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQpAQCAtMTU5LDIyICsxNTksMjIgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZgogICAgIGlm
ICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXdr
Vmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmll
d0ltcGwoKTsKLSAgICB2aWV3SW1wbC0+aW5mb3JtVVJMQ2hhbmdlKCk7CisgICAgRXdrVmlldyog
dmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICB2aWV3
LT5pbmZvcm1VUkxDaGFuZ2UoKTsKIH0KIAogdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSW5GcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYs
IFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VSZWYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9Q
YWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlld0ltcGwoKTsKKyAgICBFd2tWaWV3KiB2
aWV3ID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlldygpOwogCiAgICAgUmVm
UHRyPEV3a0F1dGhSZXF1ZXN0PiBhdXRoZW50aWNhdGlvblJlcXVlc3QgPSBFd2tBdXRoUmVxdWVz
dDo6Y3JlYXRlKHRvSW1wbChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpOwotICAgIHZpZXdJbXBs
LT5zbWFydENhbGxiYWNrPEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4oKS5jYWxsKGF1dGhlbnRpY2F0
aW9uUmVxdWVzdC5nZXQoKSk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxBdXRoZW50aWNhdGlv
blJlcXVlc3Q+KCkuY2FsbChhdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCkpOwogfQogCi1QYWdl
TG9hZENsaWVudEVmbDo6UGFnZUxvYWRDbGllbnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQot
ICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKK1BhZ2VMb2FkQ2xpZW50RWZsOjpQYWdlTG9hZENs
aWVudEVmbChFd2tWaWV3KiB2aWV3KQorICAgIDogbV92aWV3KHZpZXcpCiB7Ci0gICAgV0tQYWdl
UmVmIHBhZ2VSZWYgPSBtX3ZpZXdJbXBsLT53a1BhZ2UoKTsKKyAgICBXS1BhZ2VSZWYgcGFnZVJl
ZiA9IG1fdmlldy0+d2tQYWdlKCk7CiAgICAgQVNTRVJUKHBhZ2VSZWYpOwogCiAgICAgV0tQYWdl
TG9hZGVyQ2xpZW50IGxvYWRDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmgKaW5kZXggY2Q3MTNhMy4uYThlMTIzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuaApAQCAtMzAs
MjEgKzMwLDIxIEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogCi1jbGFzcyBFd2tWaWV3SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBQYWdlTG9hZENsaWVudEVmbCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUxvYWRDbGllbnRFZmw+IGNyZWF0ZShFd2tWaWV3SW1w
bCogdmlld0ltcGwpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUxvYWRDbGllbnRFZmw+IGNy
ZWF0ZShFd2tWaWV3KiB2aWV3SW1wbCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUGFnZUxvYWRDbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgUGFnZUxvYWRDbGllbnRFZmwoRXdrVmlld0ltcGwqKTsKKyAgICBleHBsaWNpdCBQ
YWdlTG9hZENsaWVudEVmbChFd2tWaWV3Kik7CiAKLSAgICBpbmxpbmUgRXdrVmlld0ltcGwqIHZp
ZXdJbXBsKCkgY29uc3QgeyByZXR1cm4gbV92aWV3SW1wbDsgfQorICAgIGlubGluZSBFd2tWaWV3
KiB2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9CiAKICAgICBzdGF0aWMgdm9pZCBkaWRS
ZWNlaXZlVGl0bGVGb3JGcmFtZShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS0ZyYW1l
UmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogI2lmIEVOQUJMRShXRUJf
SU5URU5UUykKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1Nh
bWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUlu
RnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBs
OworICAgIEV3a1ZpZXcqIG1fdmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlUG9saWN5Q2xpZW50RWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVBvbGljeUNsaWVudEVmbC5j
cHAKaW5kZXggMDI1M2ZhYS4uZWZjYmMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlUG9saWN5Q2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VQb2xpY3lDbGllbnRFZmwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgogCi0j
aW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAi
V0tGcmFtZS5oIgogI2luY2x1ZGUgIldLRnJhbWVQb2xpY3lMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IldlYkZyYW1lUHJveHkuaCIKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQYWdlUG9saWN5Q2xpZW50
RWZsOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJl
ZiwKICAgICBQYWdlUG9saWN5Q2xpZW50RWZsKiBwb2xpY3lDbGllbnQgPSB0b1BhZ2VQb2xpY3lD
bGllbnRFZmwoY2xpZW50SW5mbyk7CiAKICAgICBSZWZQdHI8RXdrTmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uPiBkZWNpc2lvbiA9IEV3a05hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjo6Y3JlYXRlKG5h
dmlnYXRpb25UeXBlLCBtb3VzZUJ1dHRvbiwgbW9kaWZpZXJzLCByZXF1ZXN0LCAwLCBsaXN0ZW5l
cik7Ci0gICAgcG9saWN5Q2xpZW50LT5tX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbj4oKS5jYWxsKGRlY2lzaW9uLmdldCgpKTsKKyAgICBwb2xpY3lDbGll
bnQtPm1fdmlldy0+c21hcnRDYWxsYmFjazxOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24+KCkuY2Fs
bChkZWNpc2lvbi5nZXQoKSk7CiB9CiAKIHZvaWQgUGFnZVBvbGljeUNsaWVudEVmbDo6ZGVjaWRl
UG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tGcmFtZU5h
dmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywg
V0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwg
V0tTdHJpbmdSZWYgZnJhbWVOYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIs
IFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC01Nyw3
ICs1Nyw3IEBAIHZvaWQgUGFnZVBvbGljeUNsaWVudEVmbDo6ZGVjaWRlUG9saWN5Rm9yTmV3V2lu
ZG93QWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwKICAgICBQYWdlUG9saWN5Q2xpZW50RWZs
KiBwb2xpY3lDbGllbnQgPSB0b1BhZ2VQb2xpY3lDbGllbnRFZmwoY2xpZW50SW5mbyk7CiAKICAg
ICBSZWZQdHI8RXdrTmF2aWdhdGlvblBvbGljeURlY2lzaW9uPiBkZWNpc2lvbiA9IEV3a05hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbjo6Y3JlYXRlKG5hdmlnYXRpb25UeXBlLCBtb3VzZUJ1dHRvbiwg
bW9kaWZpZXJzLCByZXF1ZXN0LCB0b0ltcGwoZnJhbWVOYW1lKS0+c3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgbGlzdGVuZXIpOwotICAgIHBvbGljeUNsaWVudC0+bV92aWV3SW1wbC0+c21hcnRDYWxs
YmFjazxOZXdXaW5kb3dQb2xpY3lEZWNpc2lvbj4oKS5jYWxsKGRlY2lzaW9uLmdldCgpKTsKKyAg
ICBwb2xpY3lDbGllbnQtPm1fdmlldy0+c21hcnRDYWxsYmFjazxOZXdXaW5kb3dQb2xpY3lEZWNp
c2lvbj4oKS5jYWxsKGRlY2lzaW9uLmdldCgpKTsKIH0KIAogdm9pZCBQYWdlUG9saWN5Q2xpZW50
RWZsOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZUNhbGxiYWNrKFdLUGFnZVJlZiwgV0tGcmFtZVJl
ZiBmcmFtZSwgV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgV0tVUkxSZXF1ZXN0UmVmLCBXS0Zy
YW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8sIGNv
bnN0IHZvaWQqIC8qY2xpZW50SW5mbyovKQpAQCAtMTAyLDEwICsxMDIsMTAgQEAgdm9pZCBQYWdl
UG9saWN5Q2xpZW50RWZsOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZUNhbGxiYWNrKFdLUGFnZVJl
ZiwgV0tGcmFtZVJlZgogICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZShsaXN0ZW5lcik7CiB9
CiAKLVBhZ2VQb2xpY3lDbGllbnRFZmw6OlBhZ2VQb2xpY3lDbGllbnRFZmwoRXdrVmlld0ltcGwq
IHZpZXdJbXBsKQotICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKK1BhZ2VQb2xpY3lDbGllbnRF
Zmw6OlBhZ2VQb2xpY3lDbGllbnRFZmwoRXdrVmlldyogdmlldykKKyAgICA6IG1fdmlldyh2aWV3
KQogewotICAgIFdLUGFnZVJlZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+d2tQYWdlKCk7CisgICAg
V0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXctPndrUGFnZSgpOwogICAgIEFTU0VSVChwYWdlUmVm
KTsKIAogICAgIFdLUGFnZVBvbGljeUNsaWVudCBwb2xpY3lDbGllbnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VQb2xpY3lDbGllbnRFZmwuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVBvbGljeUNsaWVudEVmbC5oCmluZGV4IDY4ZDlh
OWUuLjBkMDViNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZVBvbGljeUNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFn
ZVBvbGljeUNsaWVudEVmbC5oCkBAIC0zMSwyNSArMzEsMjUgQEAKICNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKLWNsYXNzIEV3a1ZpZXdJ
bXBsOworY2xhc3MgRXdrVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFBhZ2VQ
b2xpY3lDbGllbnRFZmwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VQb2xp
Y3lDbGllbnRFZmw+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8UGFnZVBvbGljeUNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXcqIHZpZXcpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VQb2xpY3lDbGllbnRFZmwodmlld0lt
cGwpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlUG9saWN5Q2xpZW50RWZsKHZp
ZXcpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZVBvbGljeUNsaWVudEVm
bChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IFBhZ2VQb2xpY3lDbGllbnRFZmwoRXdrVmll
dyopOwogCiAgICAgc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihX
S1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vZGlm
aWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBXS1VSTFJlcXVlc3RSZWYsIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgZGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tGcmFt
ZU5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24sIFdL
VVJMUmVxdWVzdFJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiwgV0tU
eXBlUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yUmVz
cG9uc2VDYWxsYmFjayhXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVVJMUmVzcG9uc2VSZWYsIFdL
VVJMUmVxdWVzdFJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0
IHZvaWQqKTsKIAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1f
dmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmluZGV4IDg2NDNkNWMuLjgxMWRiMDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5j
cHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdl
VUlDbGllbnRFZmwuaCIKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdr
Vmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLRXZlbnQuaCIKICNp
bmNsdWRlICJXS1N0cmluZy5oIgpAQCAtNDUsMTAgKzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgUGFn
ZVVJQ2xpZW50RWZsKiB0b1BhZ2VVSUNsaWVudEVmbChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlVUlDbGllbnRFZmwqPihjb25zdF9jYXN0PHZvaWQq
PihjbGllbnRJbmZvKSk7CiB9CiAKLVBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZsKEV3
a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCitQYWdlVUlD
bGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbChFd2tWaWV3KiB2aWV3KQorICAgIDogbV92aWV3KHZp
ZXcpCiB7Ci0gICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXdJbXBsLT53a1BhZ2UoKTsKKyAg
ICBXS1BhZ2VSZWYgcGFnZVJlZiA9IG1fdmlldy0+d2tQYWdlKCk7CiAgICAgQVNTRVJUKHBhZ2VS
ZWYpOwogCiAgICAgV0tQYWdlVUlDbGllbnQgdWlDbGllbnQ7CkBAIC04OCwxMjYgKzg4LDEyNiBA
QCBQYWdlVUlDbGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbChFd2tWaWV3SW1wbCogdmlld0ltcGwp
CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpjbG9zZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCiB7Ci0gICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0lt
cGwtPmNsb3NlKCk7CisgICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+
Y2xvc2UoKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnRha2VGb2N1cyhXS1BhZ2VSZWYs
IFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgLy8gRklY
TUU6IHRoaXMgaXMgb25seSBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uCi0gICAgZXZhc19vYmpl
Y3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT52
aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRF
ZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFnZVVJ
Q2xpZW50RWZsOjpmb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0g
ICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5t
X3ZpZXdJbXBsLT52aWV3KCksIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0b1Bh
Z2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT52aWV3KCksIHRydWUpOwogfQogCiB2
b2lkIFBhZ2VVSUNsaWVudEVmbDo6dW5mb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiB7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNs
aWVudEluZm8pLT5tX3ZpZXdJbXBsLT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9m
b2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBm
YWxzZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQoV0tQ
YWdlUmVmLCBXS1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCiB7Ci0gICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0lt
cGwtPnJlcXVlc3RKU0FsZXJ0UG9wdXAoV0tFaW5hU2hhcmVkU3RyaW5nKGFsZXJ0VGV4dCkpOwor
ICAgIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnJlcXVlc3RKU0FsZXJ0
UG9wdXAoV0tFaW5hU2hhcmVkU3RyaW5nKGFsZXJ0VGV4dCkpOwogfQogCiBib29sIFBhZ2VVSUNs
aWVudEVmbDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNz
YWdlLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVybiB0
b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+cmVxdWVzdEpTQ29uZmly
bVBvcHVwKFdLRWluYVNoYXJlZFN0cmluZyhtZXNzYWdlKSk7CisgICAgcmV0dXJuIHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnJlcXVlc3RKU0NvbmZpcm1Qb3B1cChXS0Vp
bmFTaGFyZWRTdHJpbmcobWVzc2FnZSkpOwogfQogCiBXS1N0cmluZ1JlZiBQYWdlVUlDbGllbnRF
Zmw6OnJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBX
S1N0cmluZ1JlZiBkZWZhdWx0VmFsdWUsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7Ci0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIHZhbHVlID0gdG9QYWdlVUlDbGllbnRFZmwo
Y2xpZW50SW5mbyktPm1fdmlld0ltcGwtPnJlcXVlc3RKU1Byb21wdFBvcHVwKFdLRWluYVNoYXJl
ZFN0cmluZyhtZXNzYWdlKSwgV0tFaW5hU2hhcmVkU3RyaW5nKGRlZmF1bHRWYWx1ZSkpOworICAg
IFdLRWluYVNoYXJlZFN0cmluZyB2YWx1ZSA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXctPnJlcXVlc3RKU1Byb21wdFBvcHVwKFdLRWluYVNoYXJlZFN0cmluZyhtZXNzYWdl
KSwgV0tFaW5hU2hhcmVkU3RyaW5nKGRlZmF1bHRWYWx1ZSkpOwogICAgIHJldHVybiB2YWx1ZSA/
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKIGJvb2wgUGFn
ZVVJQ2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAg
IEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXctPndpbmRvd0ZlYXR1cmVzKCk7CiAgICAgQVNTRVJUKGZlYXR1cmVzKTsKICAg
ICByZXR1cm4gZmVhdHVyZXMtPnRvb2xiYXJWaXNpYmxlKCk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xp
ZW50RWZsOjpzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sIHRvb2xiYXJWaXNp
YmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBm
ZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5k
b3dGZWF0dXJlcygpOworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPndpbmRvd0ZlYXR1cmVzKCk7CiAgICAgQVNT
RVJUKGZlYXR1cmVzKTsKICAgICBmZWF0dXJlcy0+c2V0VG9vbGJhclZpc2libGUodG9vbGJhclZp
c2libGUpOwogfQogCiBib29sIFBhZ2VVSUNsaWVudEVmbDo6bWVudUJhcklzVmlzaWJsZShXS1Bh
Z2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrV2luZG93RmVhdHVyZXMq
IGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndp
bmRvd0ZlYXR1cmVzKCk7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdl
VUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+d2luZG93RmVhdHVyZXMoKTsKICAgICBB
U1NFUlQoZmVhdHVyZXMpOwogICAgIHJldHVybiBmZWF0dXJlcy0+bWVudUJhclZpc2libGUoKTsK
IH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVm
LCBib29sIG1lbnVCYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIEV3
a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBm
ZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPndpbmRvd0Zl
YXR1cmVzKCk7CiAgICAgQVNTRVJUKGZlYXR1cmVzKTsKICAgICBmZWF0dXJlcy0+c2V0TWVudUJh
clZpc2libGUobWVudUJhclZpc2libGUpOwogfQogCiBib29sIFBhZ2VVSUNsaWVudEVmbDo6c3Rh
dHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAg
ICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJ
bmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBFd2tXaW5kb3dGZWF0dXJl
cyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT53aW5k
b3dGZWF0dXJlcygpOwogICAgIEFTU0VSVChmZWF0dXJlcyk7CiAgICAgcmV0dXJuIGZlYXR1cmVz
LT5zdGF0dXNCYXJWaXNpYmxlKCk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRTdGF0
dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIHN0YXR1c0JhclZpc2libGUsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9Q
YWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVzKCk7
CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xp
ZW50SW5mbyktPm1fdmlldy0+d2luZG93RmVhdHVyZXMoKTsKICAgICBBU1NFUlQoZmVhdHVyZXMp
OwogICAgIGZlYXR1cmVzLT5zZXRTdGF0dXNCYXJWaXNpYmxlKHN0YXR1c0JhclZpc2libGUpOwog
fQogCiBib29sIFBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQogewotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRv
UGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygp
OworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNs
aWVudEluZm8pLT5tX3ZpZXctPndpbmRvd0ZlYXR1cmVzKCk7CiAgICAgQVNTRVJUKGZlYXR1cmVz
KTsKICAgICByZXR1cm4gZmVhdHVyZXMtPnJlc2l6YWJsZSgpOwogfQogCiB2b2lkIFBhZ2VVSUNs
aWVudEVmbDo6c2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBib29sIHJlc2l6YWJsZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0
b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMo
KTsKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChj
bGllbnRJbmZvKS0+bV92aWV3LT53aW5kb3dGZWF0dXJlcygpOwogICAgIEFTU0VSVChmZWF0dXJl
cyk7CiAgICAgZmVhdHVyZXMtPnNldFJlc2l6YWJsZShyZXNpemFibGUpOwogfQogCiBXS1JlY3Qg
UGFnZVVJQ2xpZW50RWZsOjpnZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCiB7Ci0gICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5t
X3ZpZXdJbXBsLT53aW5kb3dHZW9tZXRyeSgpOworICAgIHJldHVybiB0b1BhZ2VVSUNsaWVudEVm
bChjbGllbnRJbmZvKS0+bV92aWV3LT53aW5kb3dHZW9tZXRyeSgpOwogfQogCiB2b2lkIFBhZ2VV
SUNsaWVudEVmbDo6c2V0V2luZG93RnJhbWUoV0tQYWdlUmVmLCBXS1JlY3QgZnJhbWUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbykt
Pm1fdmlld0ltcGwtPnNldFdpbmRvd0dlb21ldHJ5KGZyYW1lKTsKKyAgICB0b1BhZ2VVSUNsaWVu
dEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT5zZXRXaW5kb3dHZW9tZXRyeShmcmFtZSk7CiB9CiAK
ICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogdW5zaWduZWQgbG9uZyBsb25nIFBhZ2VVSUNsaWVu
dEVmbDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1
cml0eU9yaWdpblJlZiwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0cmluZ1JlZiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBs
b25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFz
ZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRVc2FnZSwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKIHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVudEVm
bChjbGllbnRJbmZvKS0+bV92aWV3SW1wbDsKLSAgICByZXR1cm4gdmlld0ltcGwtPmluZm9ybURh
dGFiYXNlUXVvdGFSZWFjaGVkKHRvSW1wbChkYXRhYmFzZU5hbWUpLT5zdHJpbmcoKSwgdG9JbXBs
KGRpc3BsYXlOYW1lKS0+c3RyaW5nKCksIGN1cnJlbnRRdW90YSwgY3VycmVudE9yaWdpblVzYWdl
LCBjdXJyZW50RGF0YWJhc2VVc2FnZSwgZXhwZWN0ZWRVc2FnZSk7CisgICAgRXdrVmlldyogdmll
dyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXc7CisgICAgcmV0dXJuIHZp
ZXctPmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKHRvSW1wbChkYXRhYmFzZU5hbWUpLT5zdHJp
bmcoKSwgdG9JbXBsKGRpc3BsYXlOYW1lKS0+c3RyaW5nKCksIGN1cnJlbnRRdW90YSwgY3VycmVu
dE9yaWdpblVzYWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSwgZXhwZWN0ZWRVc2FnZSk7CiB9CiAj
ZW5kaWYKIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYsIFdL
RnJhbWVSZWYsIFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiBwYXJhbWV0ZXJzLCBXS09wZW5QYW5l
bFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewot
ICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGll
bnRJbmZvKS0+bV92aWV3OwogICAgIFJlZlB0cjxFd2tGaWxlQ2hvb3NlclJlcXVlc3Q+IGZpbGVD
aG9vc2VyUmVxdWVzdCA9IEV3a0ZpbGVDaG9vc2VyUmVxdWVzdDo6Y3JlYXRlKHRvSW1wbChwYXJh
bWV0ZXJzKSwgdG9JbXBsKGxpc3RlbmVyKSk7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8
RmlsZUNob29zZXJSZXF1ZXN0PigpLmNhbGwoZmlsZUNob29zZXJSZXF1ZXN0LmdldCgpKTsKKyAg
ICB2aWV3LT5zbWFydENhbGxiYWNrPEZpbGVDaG9vc2VyUmVxdWVzdD4oKS5jYWxsKGZpbGVDaG9v
c2VyUmVxdWVzdC5nZXQoKSk7CiB9CiAKIFdLUGFnZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNyZWF0
ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVlc3RSZWYgd2tSZXF1ZXN0LCBXS0RpY3Rpb25h
cnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0
dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIFJlZlB0cjxFd2tVcmxSZXF1ZXN0
PiByZXF1ZXN0ID0gRXdrVXJsUmVxdWVzdDo6Y3JlYXRlKHdrUmVxdWVzdCk7Ci0gICAgcmV0dXJu
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQYWdl
KHJlcXVlc3QsIHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CisgICAgcmV0dXJuIHRvUGFnZVVJ
Q2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPmNyZWF0ZU5ld1BhZ2UocmVxdWVzdCwgdG9J
bXBsKHdrV2luZG93RmVhdHVyZXMpKTsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQpAQCAtMjE1LDEzICsyMTUsMTMgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OnNob3dDb2xvclBp
Y2tlcihXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIGluaXRpYWxDb2xvciwgV0tDb2wKIHsKICAgICBQ
YWdlVUlDbGllbnRFZmwqIHBhZ2VVSUNsaWVudCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pOwogICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yID0gV2ViQ29yZTo6Q29sb3IoV2ViS2l0Ojp0
b1dURlN0cmluZyhpbml0aWFsQ29sb3IpKTsKLSAgICBwYWdlVUlDbGllbnQtPm1fdmlld0ltcGwt
PnJlcXVlc3RDb2xvclBpY2tlcihsaXN0ZW5lciwgY29sb3IpOworICAgIHBhZ2VVSUNsaWVudC0+
bV92aWV3LT5yZXF1ZXN0Q29sb3JQaWNrZXIobGlzdGVuZXIsIGNvbG9yKTsKIH0KIAogdm9pZCBQ
YWdlVUlDbGllbnRFZmw6OmhpZGVDb2xvclBpY2tlcihXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCiB7CiAgICAgUGFnZVVJQ2xpZW50RWZsKiBwYWdlVUlDbGllbnQgPSB0b1BhZ2VV
SUNsaWVudEVmbChjbGllbnRJbmZvKTsKLSAgICBwYWdlVUlDbGllbnQtPm1fdmlld0ltcGwtPmRp
c21pc3NDb2xvclBpY2tlcigpOworICAgIHBhZ2VVSUNsaWVudC0+bV92aWV3LT5kaXNtaXNzQ29s
b3JQaWNrZXIoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlVUlDbGllbnRFZmwuaAppbmRleCAwZmI3ODgyLi5iNDE1ZTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKQEAgLTMxLDE5ICszMSwx
OSBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tWaWV3OwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgUGFnZVVJQ2xpZW50RWZsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxQYWdlVUlDbGllbnRFZmw+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwp
CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZVVJQ2xpZW50RWZsPiBjcmVhdGUoRXdrVmlldyog
dmlldykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZVVJQ2xpZW50RWZs
KHZpZXdJbXBsKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZVVJQ2xpZW50RWZs
KHZpZXcpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZVVJQ2xpZW50RWZs
KEV3a1ZpZXdJbXBsKik7CisgICAgZXhwbGljaXQgUGFnZVVJQ2xpZW50RWZsKEV3a1ZpZXcqKTsK
IAogICAgIHN0YXRpYyB2b2lkIGNsb3NlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCopOwogICAgIHN0
YXRpYyB2b2lkIHRha2VGb2N1cyhXS1BhZ2VSZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0IHZv
aWQqKTsKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBoaWRlQ29s
b3JQaWNrZXIoV0tQYWdlUmVmLCBjb25zdCB2b2lkKik7CiAjZW5kaWYKIAotICAgIEV3a1ZpZXdJ
bXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKaW5kZXggN2Y2ZDdiNi4u
ZjExZDA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCkBAIC0yOSw3ICsyOSw3
IEBACiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAKICNpbmNsdWRlICJDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5oIgotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVk
ZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
UGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCkBAIC0zOCwxMSArMzgsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1f
dmlld0ltcGwodmlld0ltcGwpCitQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKEV3a1ZpZXcqIHZpZXcpCisgICAgOiBtX3ZpZXco
dmlldykKICAgICAsIG1fY29udHJvbGxlcigwKQogewotICAgIEFTU0VSVChtX3ZpZXdJbXBsKTsK
KyAgICBBU1NFUlQobV92aWV3KTsKIH0KIAogUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bDo6flBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwoKQpAQCAtNTEsNyArNTEsNyBAQCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp+UGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudEVmbCgpCiAKIERyYXdpbmdBcmVhUHJveHkqIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRFZmw6OmRyYXdpbmdBcmVhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV92aWV3SW1wbC0+cGFn
ZSgpLT5kcmF3aW5nQXJlYSgpOworICAgIHJldHVybiBtX3ZpZXctPnBhZ2UoKS0+ZHJhd2luZ0Fy
ZWEoKTsKIH0KIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRSZW5k
ZXJlckFjdGl2ZShib29sIGFjdGl2ZSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRSZW5kZXJlckFjdGl2ZShib29sIGFjdGl2ZSkKIHZv
aWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6dXBkYXRlVmlld3BvcnRTaXplKCkK
IHsKICAgICBBU1NFUlQobV9jb250cm9sbGVyKTsKLSAgICBGbG9hdFNpemUgc2l6ZSA9IG1fdmll
d0ltcGwtPnNpemUoKTsKKyAgICBGbG9hdFNpemUgc2l6ZSA9IG1fdmlldy0+c2l6ZSgpOwogICAg
IC8vIFRoZSB2aWV3cG9ydCBjb250cm9sbGVyIGV4cGVjdHMgc2l6ZXMgaW4gVUkgdW5pdHMsIGFu
ZCBub3QgcmF3IGRldmljZSB1bml0cy4KICAgICBzaXplLnNjYWxlKDEgLyBtX2NvbnRyb2xsZXIt
PmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlVmlld3Bv
cnRTaXplKHNpemUpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCiB2b2lkIFBhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjb250ZW50c1NpemUpCiB7CiAgICAgZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7Ci0gICAgbV92
aWV3SW1wbC0+dXBkYXRlKCk7CisgICAgbV92aWV3LT51cGRhdGUoKTsKIH0KIAogdm9pZCBQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRWaWV3cG9ydFBvc2l0aW9uKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIGNvbnRlbnRzUG9pbnQpCkBAIC03OSwyNyArNzksMjcgQEAgdm9p
ZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRWaWV3cG9ydFBvc2l0aW9uKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG8KICAgICBtX2NvbnRlbnRQb3NpdGlvbiA9IGNvbnRlbnRzUG9p
bnQ7CiAKICAgICBGbG9hdFBvaW50IHBvcyhjb250ZW50c1BvaW50KTsKLSAgICBwb3Muc2NhbGUo
bV92aWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCksIG1fdmlld0ltcGwtPnBhZ2VTY2FsZUZhY3Rv
cigpKTsKLSAgICBwb3Muc2NhbGUobV92aWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV92
aWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgbV92aWV3SW1wbC0+c2V0UGFnZVBv
c2l0aW9uKHBvcyk7CisgICAgcG9zLnNjYWxlKG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCksIG1f
dmlldy0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHBvcy5zY2FsZShtX3ZpZXctPmRldmljZVNj
YWxlRmFjdG9yKCksIG1fdmlldy0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV92aWV3LT5z
ZXRQYWdlUG9zaXRpb24ocG9zKTsKIAotICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQ29udGVu
dHNWaXNpYmlsaXR5KG1fY29udGVudFBvc2l0aW9uLCBtX3ZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0
b3IoKSk7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHkobV9j
b250ZW50UG9zaXRpb24sIG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCkpOwogfQogCiB2b2lkIFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFBhZ2VTY2FsZUZhY3RvcihmbG9hdCBu
ZXdTY2FsZSkKIHsKLSAgICBtX3ZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3IobmV3U2NhbGUp
OworICAgIG1fdmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKG5ld1NjYWxlKTsKIH0KIAogdm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkaWRSZXN1bWVDb250ZW50KCkKIHsKICAg
ICBBU1NFUlQobV9jb250cm9sbGVyKTsKLSAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZUNvbnRl
bnRzVmlzaWJpbGl0eShtX2NvbnRlbnRQb3NpdGlvbiwgbV92aWV3SW1wbC0+cGFnZVNjYWxlRmFj
dG9yKCkpOworICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQ29udGVudHNWaXNpYmlsaXR5KG1f
Y29udGVudFBvc2l0aW9uLCBtX3ZpZXctPnBhZ2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkaWRDaGFuZ2VWaXNpYmxlQ29udGVudHMo
KQogewotICAgIG1fdmlld0ltcGwtPnVwZGF0ZSgpOworICAgIG1fdmlldy0+dXBkYXRlKCk7CiB9
CiAKIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlkQ2hhbmdlVmlld3Bv
cnRBdHRyaWJ1dGVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKaW5kZXggNWY4Mzg4ZC4u
Yjg3YTBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwu
aCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKICNp
bmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwgOiBwdWJsaWMgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsPiBjcmVh
dGUoRXdrVmlldyogdmlld0ltcGwpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CkBAIC02
MSw5ICs2MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihQYWdl
Vmlld3BvcnRDb250cm9sbGVyKik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudEVmbChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwoRXdrVmlldyopOwogCi0gICAgRXdrVmlld0ltcGwq
IG1fdmlld0ltcGw7CisgICAgRXdrVmlldyogbV92aWV3OwogICAgIFdlYkNvcmU6OkludFNpemUg
bV92aWV3cG9ydFNpemU7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2NvbnRlbnRQb3NpdGlv
bjsKICAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKaW5kZXgg
NGUxMDEwZC4uNTY2MmE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9WaWJyYXRpb25DbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvVmlicmF0aW9uQ2xpZW50RWZsLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KFZJQlJBVElPTikKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdrVmll
dy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLVmlicmF0aW9uLmgiCiAK
QEAgLTQyLDI1ICs0MiwyNSBAQCBzdGF0aWMgaW5saW5lIFZpYnJhdGlvbkNsaWVudEVmbCogdG9W
aWJyYXRpb25DbGllbnQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIAogdm9pZCBWaWJyYXRpb25D
bGllbnRFZmw6OnZpYnJhdGVDYWxsYmFjayhXS1ZpYnJhdGlvblJlZiwgdWludDMyX3QgdmlicmF0
aW9uVGltZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICB0b1ZpYnJhdGlvbkNsaWVu
dChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxWaWJyYXRlPigpLmNhbGwo
JnZpYnJhdGlvblRpbWUpOworICAgIHRvVmlicmF0aW9uQ2xpZW50KGNsaWVudEluZm8pLT5tX3Zp
ZXctPnNtYXJ0Q2FsbGJhY2s8VmlicmF0ZT4oKS5jYWxsKCZ2aWJyYXRpb25UaW1lKTsKIH0KIAog
dm9pZCBWaWJyYXRpb25DbGllbnRFZmw6OmNhbmNlbFZpYnJhdGlvbkNhbGxiYWNrKFdLVmlicmF0
aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHRvVmlicmF0aW9uQ2xpZW50
KGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPENhbmNlbFZpYnJhdGlvbj4o
KS5jYWxsKCk7CisgICAgdG9WaWJyYXRpb25DbGllbnQoY2xpZW50SW5mbyktPm1fdmlldy0+c21h
cnRDYWxsYmFjazxDYW5jZWxWaWJyYXRpb24+KCkuY2FsbCgpOwogfQogCi1QYXNzT3duUHRyPFZp
YnJhdGlvbkNsaWVudEVmbD4gVmlicmF0aW9uQ2xpZW50RWZsOjpjcmVhdGUoRXdrVmlld0ltcGwq
IHZpZXdJbXBsKQorUGFzc093blB0cjxWaWJyYXRpb25DbGllbnRFZmw+IFZpYnJhdGlvbkNsaWVu
dEVmbDo6Y3JlYXRlKEV3a1ZpZXcqIHZpZXdJbXBsKQogewogICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgVmlicmF0aW9uQ2xpZW50RWZsKHZpZXdJbXBsKSk7CiB9CiAKLVZpYnJhdGlvbkNsaWVudEVm
bDo6VmlicmF0aW9uQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmll
d0ltcGwodmlld0ltcGwpCitWaWJyYXRpb25DbGllbnRFZmw6OlZpYnJhdGlvbkNsaWVudEVmbChF
d2tWaWV3KiB2aWV3KQorICAgIDogbV92aWV3KHZpZXcpCiB7Ci0gICAgQVNTRVJUKG1fdmlld0lt
cGwpOworICAgIEFTU0VSVChtX3ZpZXcpOwogCi0gICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3Zp
ZXdJbXBsLT53a1BhZ2UoKTsKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZiA9IG1fdmlldy0+d2tQYWdl
KCk7CiAgICAgQVNTRVJUKHBhZ2VSZWYpOwogCiAgICAgV0tWaWJyYXRpb25SZWYgd2tWaWJyYXRp
b24gPSBXS1BhZ2VHZXRWaWJyYXRpb24ocGFnZVJlZik7CkBAIC03Nyw3ICs3Nyw3IEBAIFZpYnJh
dGlvbkNsaWVudEVmbDo6VmlicmF0aW9uQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkK
IAogVmlicmF0aW9uQ2xpZW50RWZsOjp+VmlicmF0aW9uQ2xpZW50RWZsKCkKIHsKLSAgICBXS1Bh
Z2VSZWYgcGFnZVJlZiA9IG1fdmlld0ltcGwtPndrUGFnZSgpOworICAgIFdLUGFnZVJlZiBwYWdl
UmVmID0gbV92aWV3LT53a1BhZ2UoKTsKICAgICBBU1NFUlQocGFnZVJlZik7CiAKICAgICBXS1Zp
YnJhdGlvblJlZiB3a1ZpYnJhdGlvbiA9IFdLUGFnZUdldFZpYnJhdGlvbihwYWdlUmVmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50RWZs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5oCmlu
ZGV4IDBmYWEwYmUuLmVjNDllOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9WaWJyYXRpb25DbGllbnRFZmwuaApAQCAtMzEsMjMgKzMxLDIzIEBACiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCi1jbGFzcyBF
d2tWaWV3SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFz
cyBWaWJyYXRpb25DbGllbnRFZmwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFZp
YnJhdGlvbkNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8VmlicmF0aW9uQ2xpZW50RWZsPiBjcmVhdGUoRXdrVmlldyopOwogCiAgICAgdmlydHVh
bCB+VmlicmF0aW9uQ2xpZW50RWZsKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgVmlicmF0
aW9uQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKik7CisgICAgZXhwbGljaXQgVmlicmF0aW9uQ2xpZW50
RWZsKEV3a1ZpZXcqKTsKIAogICAgIHN0YXRpYyB2b2lkIHZpYnJhdGVDYWxsYmFjayhXS1ZpYnJh
dGlvblJlZiwgdWludDMyX3QgdmlicmF0aW9uVGltZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
CiAgICAgc3RhdGljIHZvaWQgY2FuY2VsVmlicmF0aW9uQ2FsbGJhY2soV0tWaWJyYXRpb25SZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCi0gICAgRXdrVmlld0ltcGwqIG1fdmlld0ltcGw7
CisgICAgRXdrVmlldyogbV92aWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlF
ZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0TWVudVByb3h5
RWZsLmNwcAppbmRleCBlYzdlMGViLi42OGU3NWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dE1lbnVQcm94eUVmbC5jcHAKQEAgLTI4LDcg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogCi0jaW5jbHVkZSAiRXdrVmll
d0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJ
dGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KQEAgLTM3LDggKzM3LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJDb250ZXh0TWVudVByb3h5RWZsOjpXZWJDb250ZXh0
TWVudVByb3h5RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUGFnZVByb3h5KiBwYWdlKQot
ICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKK1dlYkNvbnRleHRNZW51UHJveHlFZmw6OldlYkNv
bnRleHRNZW51UHJveHlFZmwoRXdrVmlldyogdmlldywgV2ViUGFnZVByb3h5KiBwYWdlKQorICAg
IDogbV92aWV3KHZpZXcpCiAgICAgLCBtX3BhZ2UocGFnZSkKIHsKIH0KQEAgLTQ5LDEyICs0OSwx
MiBAQCBXZWJDb250ZXh0TWVudVByb3h5RWZsOjp+V2ViQ29udGV4dE1lbnVQcm94eUVmbCgpCiAK
IHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eUVmbDo6c2hvd0NvbnRleHRNZW51KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURh
dGE+JiBpdGVtcykKIHsKLSAgICBtX3ZpZXdJbXBsLT5zaG93Q29udGV4dE1lbnUodGhpcywgcG9z
aXRpb24sIGl0ZW1zKTsKKyAgICBtX3ZpZXctPnNob3dDb250ZXh0TWVudSh0aGlzLCBwb3NpdGlv
biwgaXRlbXMpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlFZmw6OmhpZGVDb250ZXh0
TWVudSgpCiB7Ci0gICAgbV92aWV3SW1wbC0+aGlkZUNvbnRleHRNZW51KCk7CisgICAgbV92aWV3
LT5oaWRlQ29udGV4dE1lbnUoKTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVByb3h5RWZsOjpj
b250ZXh0TWVudUl0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVt
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0TWVu
dVByb3h5RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51
UHJveHlFZmwuaAppbmRleCBlN2JlMmFiLi5lYTQyYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlFZmwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlFZmwuaApAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFBvaW50Lmg+CiAKLWNsYXNzIEV3a1ZpZXdJbXBsOworY2xhc3MgRXdrVmlldzsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZVByb3h5
OwogCiBjbGFzcyBXZWJDb250ZXh0TWVudVByb3h5RWZsIDogcHVibGljIFdlYkNvbnRleHRNZW51
UHJveHkgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJv
eHlFZmw+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwsIFdlYlBhZ2VQcm94eSogcGFnZSkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5RWZsPiBjcmVhdGUoRXdr
Vmlldyogdmlld0ltcGwsIFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eUVmbCh2aWV3SW1wbCwgcGFnZSkpOwog
ICAgIH0KQEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgogICAgIHZvaWQgY29udGV4dE1lbnVJdGVt
U2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpOwogCiBwcml2YXRlOgotICAg
IFdlYkNvbnRleHRNZW51UHJveHlFZmwoRXdrVmlld0ltcGwqLCBXZWJQYWdlUHJveHkqKTsKKyAg
ICBXZWJDb250ZXh0TWVudVByb3h5RWZsKEV3a1ZpZXcqLCBXZWJQYWdlUHJveHkqKTsKIAotICAg
IEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKICAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCmluZGV4IDQ2
OGNiZjguLjAwNTAyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogCi0jaW5jbHVkZSAiRXdrVmlld0lt
cGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTU3LDcgKzU3LDcgQEAgdm9p
ZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4oKQogICAgICAgICBy
ZXR1cm47CiAKICAgICB3aWxsRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgRXdrVmlld0ltcGw6OmZy
b21FdmFzT2JqZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOworICAgIEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOwogICAgIGRpZEVu
dGVyRnVsbFNjcmVlbigpOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgV2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4oKQogCiAKICAgICB3aWxsRXhpdEZ1bGxTY3Jl
ZW4oKTsKLSAgICBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZXhpdEZ1
bGxTY3JlZW4oKTsKKyAgICBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX3dlYlZpZXcpLT5leGl0
RnVsbFNjcmVlbigpOwogICAgIGRpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5k
ZXggZjk4MTg2OS4uNDYyYjI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgorI2luY2x1ZGUg
IkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJld2tf
c2V0dGluZ3MuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgpAQCAtOTgsOCArOTgsOCBAQCBXZWJQ
YWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2Uo
KQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
bV9pbnNwZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNw
ZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEko
aW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3SW1wbDo6TGVnYWN5QmVoYXZpb3IpOwotICAg
IEV3a1ZpZXdJbXBsKiBpbnNwZWN0b3JWaWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZhc09i
amVjdChtX2luc3BlY3RvclZpZXcpOworICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2Jh
c2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5w
cm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmll
dzo6TGVnYWN5QmVoYXZpb3IpOworICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBsID0gRXdr
Vmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKICAgICBpbnNwZWN0b3JWaWV3
SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKIAogICAg
IEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0dGluZ3MoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcApp
bmRleCBiZWZhMjQ3Li5hMzMyNzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1w
bC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2
ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50
QmFzZS5oIgpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRXZhc19PYmpl
Y3QqIFdlYlBhZ2VQcm94eTo6dmlld1dpZGdldCgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+dmlld0ltcGwoKS0+dmlldygpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50QmFzZSo+KG1fcGFnZUNsaWVudCktPnZpZXco
KS0+dmlldygpOwogfQogCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChj
b25zdCBTdHJpbmcmIC8qYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ki8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBvcHVwTWVudVByb3h5RWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuY3BwCmlu
ZGV4IGY1YjEwNGQuLmE1OTU1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlFZmwuaCIKIAotI2lu
Y2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIk5h
dGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJQb3B1cEl0ZW0uaCIKICNpbmNsdWRl
ICJld2tfdmlldy5oIgpAQCAtMzYsMjAgKzM2LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViUG9wdXBNZW51UHJveHlFZmw6OldlYlBvcHVw
TWVudVByb3h5RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUG9wdXBNZW51UHJveHk6OkNs
aWVudCogY2xpZW50KQorV2ViUG9wdXBNZW51UHJveHlFZmw6OldlYlBvcHVwTWVudVByb3h5RWZs
KEV3a1ZpZXcqIHZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQqIGNsaWVudCkKICAgICA6
IFdlYlBvcHVwTWVudVByb3h5KGNsaWVudCkKLSAgICAsIG1fdmlld0ltcGwodmlld0ltcGwpCisg
ICAgLCBtX3ZpZXcodmlldykKIHsKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnVQcm94eUVmbDo6c2hv
d1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBp
dGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4
KQogewotICAgIG1fdmlld0ltcGwtPnJlcXVlc3RQb3B1cE1lbnUodGhpcywgcmVjdCwgdGV4dERp
cmVjdGlvbiwgcGFnZVNjYWxlRmFjdG9yLCBpdGVtcywgc2VsZWN0ZWRJbmRleCk7CisgICAgbV92
aWV3LT5yZXF1ZXN0UG9wdXBNZW51KHRoaXMsIHJlY3QsIHRleHREaXJlY3Rpb24sIHBhZ2VTY2Fs
ZUZhY3RvciwgaXRlbXMsIHNlbGVjdGVkSW5kZXgpOwogfQogCiB2b2lkIFdlYlBvcHVwTWVudVBy
b3h5RWZsOjpoaWRlUG9wdXBNZW51KCkKIHsKLSAgICBtX3ZpZXdJbXBsLT5jbG9zZVBvcHVwTWVu
dSgpOworICAgIG1fdmlldy0+Y2xvc2VQb3B1cE1lbnUoKTsKIH0KIAogdm9pZCBXZWJQb3B1cE1l
bnVQcm94eUVmbDo6dmFsdWVDaGFuZ2VkKGludCBuZXdTZWxlY3RlZEluZGV4KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQb3B1cE1lbnVQcm94eUVmbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQb3B1cE1lbnVQcm94eUVmbC5oCmluZGV4
IDRjMGNhZmUuLjAxOTMzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlBvcHVwTWVudVByb3h5RWZsLmgKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgSW50UmVjdDsKIH0KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBF
d2tWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBX
ZWJQYWdlUHJveHk7CiAKIGNsYXNzIFdlYlBvcHVwTWVudVByb3h5RWZsIDogcHVibGljIFdlYlBv
cHVwTWVudVByb3h5IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQb3B1cE1l
bnVQcm94eUVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUG9wdXBNZW51UHJv
eHk6OkNsaWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVBy
b3h5RWZsPiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGwsIFdlYlBvcHVwTWVudVByb3h5OjpDbGll
bnQqIGNsaWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUG9wdXBN
ZW51UHJveHlFZmwodmlld0ltcGwsIGNsaWVudCkpOwogICAgIH0KQEAgLTUxLDkgKzUxLDkgQEAg
cHVibGljOgogICAgIHZvaWQgdmFsdWVDaGFuZ2VkKGludCBuZXdTZWxlY3RlZEluZGV4KTsKIAog
cHJpdmF0ZToKLSAgICBXZWJQb3B1cE1lbnVQcm94eUVmbChFd2tWaWV3SW1wbCosIFdlYlBvcHVw
TWVudVByb3h5OjpDbGllbnQqKTsKKyAgICBXZWJQb3B1cE1lbnVQcm94eUVmbChFd2tWaWV3Kiwg
V2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCopOwogCi0gICAgRXdrVmlld0ltcGwqIG1fdmlld0lt
cGw7CisgICAgRXdrVmlldyogbV92aWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184424</attachid>
            <date>2013-01-24 00:31:52 -0800</date>
            <delta_ts>2013-01-24 07:45:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug107662</filename>
            <type>text/plain</type>
            <size>195910</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDViYjIxNWI1YjMxZmQwODNkNjE4YTViMzM4OThjYjU3NDk3MWE1NzUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIEphbiAyMyAyMzoxNTowNSAyMDEzICswMjAwCgogICAgYnVnMTA3NjYyCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDIzMGM0NjguLjU0MTRiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMTkgQEAKKzIwMTMt
MDEtMjMgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV0syXSBSZW5hbWUgRXdrVmlld0ltcGwgY2xhc3MgdG8gRXdrVmll
dworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NzE5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1l
IEV3a1ZpZXdJbXBsIGNsYXNzIHRvIEV3a1ZpZXcsIGR1ZSB0byBld2sgdmlldworICAgICAgICBy
ZWZhY3RvcmluZyBwbGFuIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NjYyI2MxKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0NyZWF0ZSk6Cisg
ICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgorICAgICAgICAoV0tWaWV3R2V0
UGFnZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAuCisgICAgICAgIChwYWdlVmlld01hcCk6Cisg
ICAgICAgIChFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFwKToKKyAgICAgICAgKEV3a1ZpZXc6OnJl
bW92ZUZyb21QYWdlVmlld01hcCk6CisgICAgICAgIChFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3
TWFwKToKKyAgICAgICAgKEV3a1ZpZXc6OkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6fkV3
a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6c21hcnREYXRhKToKKyAgICAgICAgKEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KToKKyAgICAgICAgKEV3a1ZpZXc6OndrUGFnZSk6CisgICAgICAgIChF
d2tWaWV3OjpzZXRDdXJzb3IpOgorICAgICAgICAoRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoRXdr
Vmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKToKKyAgICAgICAgKEV3a1ZpZXc6OnRyYW5zZm9ybVRv
U2NlbmUpOgorICAgICAgICAoRXdrVmlldzo6dHJhbnNmb3JtVG9TY3JlZW4pOgorICAgICAgICAo
RXdrVmlldzo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoRXdrVmlldzo6ZGlzcGxheVRp
bWVyRmlyZWQpOgorICAgICAgICAoRXdrVmlldzo6dXBkYXRlKToKKyAgICAgICAgKEV3a1ZpZXc6
OmVudGVyRnVsbFNjcmVlbik6CisgICAgICAgIChFd2tWaWV3OjpleGl0RnVsbFNjcmVlbik6Cisg
ICAgICAgIChFd2tWaWV3Ojp3aW5kb3dHZW9tZXRyeSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRX
aW5kb3dHZW9tZXRyeSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRJbWFnZURhdGEpOgorICAgICAg
ICAoRXdrVmlldzo6c2l6ZSk6CisgICAgICAgIChFd2tWaWV3Ojppc0ZvY3VzZWQpOgorICAgICAg
ICAoRXdrVmlldzo6aXNWaXNpYmxlKToKKyAgICAgICAgKEV3a1ZpZXc6OnRpdGxlKToKKyAgICAg
ICAgKEV3a1ZpZXc6OmlucHV0TWV0aG9kQ29udGV4dCk6CisgICAgICAgIChFd2tWaWV3Ojp0aGVt
ZVBhdGgpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKEV3a1Zp
ZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAgICAoRXdrVmlldzo6c2V0Q3VzdG9t
VGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRNb3VzZUV2ZW50c0VuYWJs
ZWQpOgorICAgICAgICAoRXdrVmlldzo6c2V0VG91Y2hFdmVudHNFbmFibGVkKToKKyAgICAgICAg
KEV3a1ZpZXc6OmluZm9ybUljb25DaGFuZ2UpOgorICAgICAgICAoRXdrVmlldzo6Y3JlYXRlR0xT
dXJmYWNlKToKKyAgICAgICAgKEV3a1ZpZXc6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUpOgorICAgICAgICAoRXdrVmlldzo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToK
KyAgICAgICAgKEV3a1ZpZXc6OnJlcXVlc3RDb2xvclBpY2tlcik6CisgICAgICAgIChFd2tWaWV3
OjpkaXNtaXNzQ29sb3JQaWNrZXIpOgorICAgICAgICAoRXdrVmlldzo6c2hvd0NvbnRleHRNZW51
KToKKyAgICAgICAgKEV3a1ZpZXc6OmhpZGVDb250ZXh0TWVudSk6CisgICAgICAgIChFd2tWaWV3
OjpyZXF1ZXN0UG9wdXBNZW51KToKKyAgICAgICAgKEV3a1ZpZXc6OmNsb3NlUG9wdXBNZW51KToK
KyAgICAgICAgKEV3a1ZpZXc6OnJlcXVlc3RKU0FsZXJ0UG9wdXApOgorICAgICAgICAoRXdrVmll
dzo6cmVxdWVzdEpTQ29uZmlybVBvcHVwKToKKyAgICAgICAgKEV3a1ZpZXc6OnJlcXVlc3RKU1By
b21wdFBvcHVwKToKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVk
KToKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3
Ojp3aW5kb3dGZWF0dXJlcyk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVOZXdQYWdlKToKKyAg
ICAgICAgKEV3a1ZpZXc6OmNsb3NlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uTW91c2VEb3duKToK
KyAgICAgICAgKEV3a1ZpZXc6Om9uTW91c2VVcCk6CisgICAgICAgIChFd2tWaWV3Ojpvbk1vdXNl
TW92ZSk6CisgICAgICAgIChFd2tWaWV3OjpmZWVkVG91Y2hFdmVudHMpOgorICAgICAgICAoRXdr
Vmlldzo6b25Ub3VjaERvd24pOgorICAgICAgICAoRXdrVmlldzo6b25Ub3VjaFVwKToKKyAgICAg
ICAgKEV3a1ZpZXc6Om9uVG91Y2hNb3ZlKToKKyAgICAgICAgKEV3a1ZpZXc6Om9uRmF2aWNvbkNo
YW5nZWQpOgorICAgICAgICAoRXdrVmlldzo6dGFrZVNuYXBzaG90KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoRXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp2aWV3KToK
KyAgICAgICAgKEV3a1ZpZXc6OnBhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZXdrQ29udGV4dCk6
CisgICAgICAgIChFd2tWaWV3OjpzZXR0aW5ncyk6CisgICAgICAgIChFd2tWaWV3OjpiYWNrRm9y
d2FyZExpc3QpOgorICAgICAgICAoRXdrVmlldzo6dXJsKToKKyAgICAgICAgKEV3a1ZpZXc6OmZh
dmljb25VUkwpOgorICAgICAgICAoRXdrVmlldzo6bW91c2VFdmVudHNFbmFibGVkKToKKyAgICAg
ICAgKEV3a1ZpZXc6OnRvdWNoRXZlbnRzRW5hYmxlZCk6CisgICAgICAgIChFd2tWaWV3OjpzZXRO
ZWVkc1N1cmZhY2VSZXNpemUpOgorICAgICAgICAoRXdrVmlldzo6c21hcnRDYWxsYmFjayk6Cisg
ICAgICAgIChFd2tWaWV3OjpwYWdlQ2xpZW50KToKKyAgICAgICAgKEV3a1ZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3Rvcik6CisgICAgICAgIChFd2tWaWV3OjpwYWdlU2NhbGVGYWN0b3IpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0UGFnZVBvc2l0aW9uKToKKyAgICAgICAgKEV3a1ZpZXc6OnBhZ2VQb3Np
dGlvbik6CisgICAgICAgIChFd2tWaWV3Ojppc0hhcmR3YXJlQWNjZWxlcmF0ZWQpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKEV3a1ZpZXc6OmV2YXNH
TENvbnRleHQpOgorICAgICAgICAoRXdrVmlldzo6ZXZhc0dMU3VyZmFjZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudS5jcHA6CisgICAgICAgIChFd2tDb250
ZXh0TWVudTo6RXdrQ29udGV4dE1lbnUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X21lbnVfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrQ29udGV4dE1lbnU6OmNyZWF0
ZSk6CisgICAgICAgIChFd2tDb250ZXh0TWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHA6CisgICAgICAgIChFd2tEb3dubG9hZEpvYjo6RXdrRG93
bmxvYWRKb2IpOgorICAgICAgICAoRXdrRG93bmxvYWRKb2I6OnZpZXcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oOgorICAgICAgICAoRXdr
RG93bmxvYWRKb2I6OmNyZWF0ZSk6CisgICAgICAgIChFd2tEb3dubG9hZEpvYik6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnUuY3BwOgorICAgICAgICAoRXdrUG9w
dXBNZW51OjpFd2tQb3B1cE1lbnUpOgorICAgICAgICAoRXdrUG9wdXBNZW51OjpjbG9zZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfcHJpdmF0ZS5oOgorICAg
ICAgICAoRXdrUG9wdXBNZW51OjpjcmVhdGUpOgorICAgICAgICAoRXdrUG9wdXBNZW51KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAoRXdr
U2V0dGluZ3M6OnByZWZlcmVuY2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
c2V0dGluZ3NfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrU2V0dGluZ3M6OmNyZWF0ZSk6CisgICAg
ICAgIChFd2tTZXR0aW5nczo6RXdrU2V0dGluZ3MpOgorICAgICAgICAoRXdrU2V0dGluZ3MpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGNyZWF0
ZUV3a1ZpZXcpOgorICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXdfcHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a193aW5kb3df
ZmVhdHVyZXMuY3BwOgorICAgICAgICAoRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1
cmVzKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRUb29sYmFyVmlzaWJsZSk6Cisg
ICAgICAgIChFd2tXaW5kb3dGZWF0dXJlczo6c2V0U3RhdHVzQmFyVmlzaWJsZSk6CisgICAgICAg
IChFd2tXaW5kb3dGZWF0dXJlczo6c2V0TWVudUJhclZpc2libGUpOgorICAgICAgICAoRXdrV2lu
ZG93RmVhdHVyZXM6OnNldFJlc2l6YWJsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmg6CisgICAgICAgIChFd2tXaW5kb3dGZWF0dXJl
czo6Y3JlYXRlKToKKyAgICAgICAgKEV3a1dpbmRvd0ZlYXR1cmVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpCYWNr
aW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0Nv
bnRleHRIaXN0b3J5Q2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dEhpc3Rv
cnlDbGllbnRFZmw6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKFdl
YktpdDo6Q29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRQZXJmb3JtU2Vy
dmVyUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6
ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0NvbnRleHRN
ZW51Q2xpZW50RWZsLmNwcDoKKyAgICAgICAgKENvbnRleHRNZW51Q2xpZW50RWZsOjpDb250ZXh0
TWVudUNsaWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVu
dEVmbC5oOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudEVmbDo6Y3JlYXRlKToK
KyAgICAgICAgKENvbnRleHRNZW51Q2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L0Rvd25sb2FkTWFuYWdlckVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdl
ckVmbDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZE1hbmFnZXJFZmw6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1hbmFnZXJFZmw6OmRpZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
TWFuYWdlckVmbDo6ZGlkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2Vy
RWZsOjpyZWdpc3RlckRvd25sb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0Rvd25sb2Fk
TWFuYWdlckVmbC5oOgorICAgICAgICAoRG93bmxvYWRNYW5hZ2VyRWZsKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZWZsL0ZpbmRDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ2xp
ZW50RWZsOjpkaWRGaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudEVmbDo6
ZGlkRmFpbFRvRmluZFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDbGllbnRFZmw6OkZp
bmRDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvRmluZENsaWVudEVmbC5oOgor
ICAgICAgICAoV2ViS2l0OjpGaW5kQ2xpZW50RWZsOjpjcmVhdGUpOgorICAgICAgICAoRmluZENs
aWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Rm9ybUNsaWVudEVmbDo6d2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAo
V2ViS2l0OjpGb3JtQ2xpZW50RWZsOjpGb3JtQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL0Zvcm1DbGllbnRFZmwuaDoKKyAgICAgICAgKFdlYktpdDo6Rm9ybUNsaWVudEVmbDo6
Y3JlYXRlKToKKyAgICAgICAgKEZvcm1DbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvSW5wdXRNZXRob2RDb250ZXh0RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRo
b2RDb250ZXh0RWZsOjpJbnB1dE1ldGhvZENvbnRleHRFZmwpOgorICAgICAgICAoV2ViS2l0OjpJ
bnB1dE1ldGhvZENvbnRleHRFZmw6Om9uSU1GSW5wdXRTZXF1ZW5jZUNvbXBsZXRlKToKKyAgICAg
ICAgKFdlYktpdDo6SW5wdXRNZXRob2RDb250ZXh0RWZsOjpvbklNRlByZWVkaXRTZXF1ZW5jZUNo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZENvbnRleHRFZmw6OnVwZGF0ZVRl
eHRJbnB1dFN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL0lucHV0TWV0aG9kQ29udGV4
dEVmbC5oOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZENvbnRleHRFZmw6OmNyZWF0ZSk6
CisgICAgICAgIChJbnB1dE1ldGhvZENvbnRleHRFZmwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvUGFnZUNsaWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6
UGFnZUNsaWVudEJhc2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6dmlldyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEJhc2U6OnNldFZpZXdOZWVkc0Rpc3BsYXkp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6dmlld1NpemUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRCYXNlOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEJhc2U6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRC
YXNlOjpkaWRSZWxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFz
ZTo6dG9vbFRpcENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6c2V0
Q3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEJhc2U6OmNyZWF0ZVBvcHVwTWVu
dVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEJhc2U6OmNyZWF0ZUNvbnRleHRN
ZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50QmFzZTo6ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50QmFzZTo6dXBkYXRlVGV4dElucHV0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50QmFzZTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L1BhZ2VDbGllbnRCYXNlLmg6CisgICAgICAgIChQYWdlQ2xpZW50QmFzZSk6CisgICAgICAgICog
VUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50RGVmYXVsdEltcGw6OlBhZ2VDbGllbnREZWZhdWx0SW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnREZWZhdWx0SW1wbDo6dXBkYXRlVmlld3BvcnRTaXplKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudERlZmF1bHRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y29udmVydFRvVXNl
clNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudERlZmF1bHRJbXBsOjpkaWRDaGFu
Z2VDb250ZW50c1NpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1
bHRJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRl
KToKKyAgICAgICAgKFBhZ2VDbGllbnREZWZhdWx0SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNz
L2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRMZWdhY3lJbXBsOjpQYWdlQ2xpZW50TGVnYWN5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRMZWdhY3lJbXBsOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudExlZ2FjeUltcGw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRMZWdhY3lJbXBsOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXpl
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VEaWRSZXF1ZXN0
U2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudExlZ2FjeUltcGw6OmRpZFJlbmRl
ckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VUcmFu
c2l0aW9uVmlld3BvcnRSZWFkeSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50
TGVnYWN5SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3Jl
YXRlKToKKyAgICAgICAgKFBhZ2VDbGllbnRMZWdhY3lJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRD
bGllbnRFZmw6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUxvYWRDbGllbnRFZmw6OmRpZFJlY2VpdmVJbnRlbnRGb3JGcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpyZWdpc3RlckludGVudFNlcnZpY2VGb3JGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VQcm9ncmVzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbDo6ZGlkRmFpbExvYWRXaXRoRXJy
b3JGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRDbGll
bnRFZmw6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw6OmRpZEZhaWxQcm92aXNpb25h
bExvYWRXaXRoRXJyb3JGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50
RWZsOjpkaWRDb21taXRMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENs
aWVudEVmbDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUxvYWRDbGllbnRFZmw6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VJbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw6OlBh
Z2VMb2FkQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50
RWZsLmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUpOgorICAg
ICAgICAoUGFnZUxvYWRDbGllbnRFZmwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlTG9hZENsaWVu
dEVmbDo6dmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlUG9saWN5Q2xpZW50RWZs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVmbDo6ZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRF
Zmw6OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VQb2xpY3lDbGllbnRFZmw6OlBhZ2VQb2xpY3lDbGllbnRFZmwpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9lZmwvUGFnZVBvbGljeUNsaWVudEVmbC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlUG9s
aWN5Q2xpZW50RWZsOjpjcmVhdGUpOgorICAgICAgICAoUGFnZVBvbGljeUNsaWVudEVmbCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VVSUNsaWVudEVmbDo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRF
Zmw6OnRha2VGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6Zm9jdXMp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnVuZm9jdXMpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OnRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjptZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzZXRNZW51QmFySXNWaXNpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzdGF0dXNCYXJJc1Zpc2libGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVUlDbGllbnRFZmw6OnNldFN0YXR1c0JhcklzVmlzaWJsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlVUlDbGllbnRFZmw6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJ
Q2xpZW50RWZsOjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVu
dEVmbDo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6
OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VVSUNsaWVudEVm
bDo6cnVuT3BlblBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpjcmVh
dGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpzaG93Q29sb3JQ
aWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVUlDbGllbnRFZmw6OmhpZGVDb2xvclBpY2tl
cik6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuaDoKKyAgICAgICAg
KFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUpOgorICAgICAgICAoUGFnZVVJQ2xpZW50
RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZHJhd2luZ0FyZWEpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNp
emUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpk
aWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50RWZsOjpzZXRWaWV3cG9ydFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlkUmVzdW1l
Q29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRF
Zmw6OmRpZENoYW5nZVZpc2libGVDb250ZW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Q
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmNyZWF0ZSk6CisgICAgICAgIChQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1ZpYnJhdGlv
bkNsaWVudEVmbC5jcHA6CisgICAgICAgIChWaWJyYXRpb25DbGllbnRFZmw6OnZpYnJhdGVDYWxs
YmFjayk6CisgICAgICAgIChWaWJyYXRpb25DbGllbnRFZmw6OmNhbmNlbFZpYnJhdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKToKKyAgICAgICAgKFZp
YnJhdGlvbkNsaWVudEVmbDo6VmlicmF0aW9uQ2xpZW50RWZsKToKKyAgICAgICAgKFZpYnJhdGlv
bkNsaWVudEVmbDo6flZpYnJhdGlvbkNsaWVudEVmbCk6CisgICAgICAgICogVUlQcm9jZXNzL2Vm
bC9WaWJyYXRpb25DbGllbnRFZmwuaDoKKyAgICAgICAgKFZpYnJhdGlvbkNsaWVudEVmbCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0TWVudVByb3h5RWZsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUVmbDo6V2ViQ29udGV4dE1lbnVQcm94eUVm
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlFZmw6OnNob3dDb250ZXh0
TWVudSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlFZmw6OmhpZGVDb250
ZXh0TWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0TWVudVByb3h5RWZs
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlFZmw6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb250ZXh0TWVudVByb3h5RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZs
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAoV2ViS2l0
OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbik6CisgICAgICAgICog
VUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5Ojp2aWV3V2lkZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlBv
cHVwTWVudVByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlF
Zmw6OldlYlBvcHVwTWVudVByb3h5RWZsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
UHJveHlFZmw6OnNob3dQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQ
cm94eUVmbDo6aGlkZVBvcHVwTWVudSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJQb3B1
cE1lbnVQcm94eUVmbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYlBvcHVwTWVudVByb3h5RWZsKToKKwogMjAxMy0wMS0yMyAg
U2Vva2p1IEt3b24gIDxzZW9ranUua3dvbkBnbWFpbC5jb20+CiAKICAgICAgICAgW0VGTF0gVW5y
ZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjE0MDYwNQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpp
bmRleCAzNWViOTNjLi42MmVlMzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNDAs
NyArNDAsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJ
L0Mvc291cC9XS0Nvb2tpZU1hbmFnZXJTb3VwLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9zb3Vw
L1dLU291cFJlcXVlc3RNYW5hZ2VyLmNwcAogCi0gICAgVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
d0ltcGwuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9FdmFzR0xDb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL0V2YXNH
TFN1cmZhY2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvU25hcHNob3RJbWFnZUdMLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IGEw
NjIwNTIuLjMyYjlkOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZs
L1dLVmlldy5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJXS1ZpZXcuaCIKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdr
Vmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgImV3a192aWV3X3ByaXZh
dGUuaCIKICNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgpAQCAtMjksMjQgKzI5LDI0
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZh
cyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNv
bnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlld0ltcGw6OkxlZ2FjeUJlaGF2aW9yKSk7Cisg
ICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFn
ZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOwogfQogCiBXS1ZpZXdSZWYgV0tW
aWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEko
ZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1Zp
ZXdJbXBsOjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFz
ZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRC
ZWhhdmlvcikpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1Jl
ZikKIHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNP
YmplY3QodG9JbXBsKHZpZXdSZWYpKTsKKyAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJv
bUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsKIAotICAgIHJldHVybiB2aWV3SW1wbC0+d2tQ
YWdlKCk7CisgICAgcmV0dXJuIHZpZXctPndrUGFnZSgpOwogfQogCiBXS0ltYWdlUmVmIFdLVmll
d0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXdJbXBsKiB2
aWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOwor
ICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1Jl
ZikpOwogCi0gICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKHZpZXdJbXBs
LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKKyAgICByZXR1cm4gV0tJ
bWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2Uodmlldy0+dGFrZVNuYXBzaG90KCkuZ2V0KCksIDAg
Lyogb3B0aW9ucyAqLyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NzhhODYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcApAQCAtMCwwICsxLDEwNTcgQEAKKy8qCisgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJF
d2tWaWV3LmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEVmbC5oIgorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiRWZsU2NyZWVuVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgorI2luY2x1ZGUgIkZvcm1DbGll
bnRFZmwuaCIKKyNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKKyNpbmNsdWRlICJM
YXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCisjaW5jbHVk
ZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudExlZ2FjeUlt
cGwuaCIKKyNpbmNsdWRlICJQYWdlTG9hZENsaWVudEVmbC5oIgorI2luY2x1ZGUgIlBhZ2VQb2xp
Y3lDbGllbnRFZmwuaCIKKyNpbmNsdWRlICJQYWdlVUlDbGllbnRFZmwuaCIKKyNpbmNsdWRlICJT
bmFwc2hvdEltYWdlR0wuaCIKKyNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJX
S0dlb21ldHJ5LmgiCisjaW5jbHVkZSAiV0tOdW1iZXIuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5o
IgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJJbWFnZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
IldlYlBvcHVwTWVudVByb3h5RWZsLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKyNp
bmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19j
b2xvcl9waWNrZXJfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X21lbnVfcHJpdmF0
ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZmF2
aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbV9w
cml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgi
CisjaW5jbHVkZSAiZXdrX3NldHRpbmdzX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdmlldy5o
IgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfd2luZG93X2Zl
YXR1cmVzX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVkZSA8RWNv
cmVfWC5oPgorI2luY2x1ZGUgPEVkamUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0
aWVzRWZsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L1dLSW1hZ2VDYWlyby5oPgorCisjaWYgRU5BQkxFKFZJQlJBVElPTikKKyNpbmNsdWRlICJWaWJy
YXRpb25DbGllbnRFZmwuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
I2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNlbmRpZgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgPEV2YXNfR0wuaD4KKyNlbmRpZgor
Cit1c2luZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IGludCBkZWZhdWx0
Q3Vyc29yU2l6ZSA9IDE2OworCit0eXBlZGVmIEhhc2hNYXA8V0tQYWdlUmVmLCBFdmFzX09iamVj
dCo+IFBhZ2VWaWV3TWFwOworCitzdGF0aWMgaW5saW5lIFBhZ2VWaWV3TWFwJiBwYWdlVmlld01h
cCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYWdlVmlld01hcCwgbWFwLCAoKSk7Cisg
ICAgcmV0dXJuIG1hcDsKK30KKwordm9pZCBFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFwKEV3a1Zp
ZXcqIHZpZXcpCit7CisgICAgUGFnZVZpZXdNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBwYWdlVmll
d01hcCgpLmFkZCh2aWV3LT53a1BhZ2UoKSwgdmlldy0+dmlldygpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIEV3a1ZpZXc6OnJlbW92
ZUZyb21QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3KQoreworICAgIEFTU0VSVChwYWdlVmlld01h
cCgpLmNvbnRhaW5zKHZpZXctPndrUGFnZSgpKSk7CisgICAgcGFnZVZpZXdNYXAoKS5yZW1vdmUo
dmlldy0+d2tQYWdlKCkpOworfQorCitjb25zdCBFdmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zy
b21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYgcGFnZSkKK3sKKyAgICBBU1NFUlQocGFnZSk7
CisKKyAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7Cit9CisKK0V3a1ZpZXc6OkV3
a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJl
aGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCisgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLCBtX3BlbmRp
bmdTdXJmYWNlUmVzaXplKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3BhZ2VDbGllbnQoYmVoYXZp
b3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBsOjpjcmVhdGUodGhp
cykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9wYWdlUHJv
eHkobV9jb250ZXh0LT53ZWJDb250ZXh0KCktPmNyZWF0ZVdlYlBhZ2UobV9wYWdlQ2xpZW50Lmdl
dCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV9wYWdlTG9hZENsaWVudChQYWdlTG9hZENs
aWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9wYWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xp
Y3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNs
aWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9jb250ZXh0TWVudUNsaWVudChDb250ZXh0
TWVudUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9maW5kQ2xpZW50KEZpbmRDbGll
bnRFZmw6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fZm9ybUNsaWVudChGb3JtQ2xpZW50RWZsOjpj
cmVhdGUodGhpcykpCisjaWYgRU5BQkxFKFZJQlJBVElPTikKKyAgICAsIG1fdmlicmF0aW9uQ2xp
ZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQorI2VuZGlmCisgICAgLCBtX2Jh
Y2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0b0FQSShtX3BhZ2VQcm94
eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAg
ICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCisjZW5kaWYKKyAgICAsIG1fc2V0dGluZ3MoRXdrU2V0
dGluZ3M6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fY3Vyc29ySWRlbnRpZmllcigwKQorICAgICwg
bV9tb3VzZUV2ZW50c0VuYWJsZWQoZmFsc2UpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAg
ICAsIG1fdG91Y2hFdmVudHNFbmFibGVkKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2Rpc3BsYXlU
aW1lcih0aGlzLCAmRXdrVmlldzo6ZGlzcGxheVRpbWVyRmlyZWQpCisgICAgLCBtX2lucHV0TWV0
aG9kQ29udGV4dChJbnB1dE1ldGhvZENvbnRleHRFZmw6OmNyZWF0ZSh0aGlzLCBzbWFydERhdGEo
KS0+YmFzZS5ldmFzKSkKKyAgICAsIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKHRydWUpCisgICAg
LCBtX3NldERyYXdzQmFja2dyb3VuZChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9ldmFzT2JqZWN0
KTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBBU1NFUlQobV9wYWdlUHJveHkpOworCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAo
KS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7
CisgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNv
bXBvc2l0aW5nTW9kZSh0cnVlKTsKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgbV9wYWdlUHJveHkt
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7CisjZW5k
aWYKKyAgICBpZiAoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKQorICAgICAgICBtX3BhZ2VQ
cm94eS0+c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7CisjZW5kaWYKKworICAgIG1fcGFnZVByb3h5
LT5pbml0aWFsaXplV2ViUGFnZSgpOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAg
IG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1fZXZhc09iamVj
dCk7CisgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGdWxs
U2NyZWVuRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAg
bV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJBdWRpb0VuYWJs
ZWQodHJ1ZSk7CisjZW5kaWYKKworICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVy
ZW5jZXMoKS0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOworCisg
ICAgLy8gRW5hYmxlIG1vdXNlIGV2ZW50cyBieSBkZWZhdWx0CisgICAgc2V0TW91c2VFdmVudHNF
bmFibGVkKHRydWUpOworCisgICAgLy8gTGlzdGVuIGZvciBmYXZpY29uIGNoYW5nZXMuCisgICAg
RXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRh
YmFzZSgpOworICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOworCisgICAgaWNvbkRhdGFiYXNlLT53
YXRjaENoYW5nZXMoSWNvbkNoYW5nZUNhbGxiYWNrRGF0YShFd2tWaWV3OjpvbkZhdmljb25DaGFu
Z2VkLCB0aGlzKSk7CisKKyAgICBFd2tWaWV3OjphZGRUb1BhZ2VWaWV3TWFwKHRoaXMpOworfQor
CitFd2tWaWV3Ojp+RXdrVmlldygpCit7CisgICAgbV9wYWdlUHJveHktPmNsb3NlKCk7CisKKyAg
ICAvLyBVbnJlZ2lzdGVyIGljb24gY2hhbmdlIGNhbGxiYWNrLgorICAgIEV3a0Zhdmljb25EYXRh
YmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKKyAgICBB
U1NFUlQoaWNvbkRhdGFiYXNlKTsKKworICAgIGljb25EYXRhYmFzZS0+dW53YXRjaENoYW5nZXMo
RXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZCk7CisKKyAgICBFd2tWaWV3OjpyZW1vdmVGcm9tUGFn
ZVZpZXdNYXAodGhpcyk7Cit9CisKK0V3a19WaWV3X1NtYXJ0X0RhdGEqIEV3a1ZpZXc6OnNtYXJ0
RGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChtX2V2YXNPYmplY3QpKTsKK30KKworRXdr
VmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpCit7
CisgICAgQVNTRVJUKHZpZXcpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KHZp
ZXcpKTsKKyAgICBBU1NFUlQoc2QpOworICAgIEFTU0VSVChzZC0+cHJpdik7CisgICAgcmV0dXJu
IHNkLT5wcml2OworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmVzIHRoZSBpbnRl
cm5hbCBXS1BhZ2UgZm9yIHRoaXMgdmlldy4KKyAqLworV0tQYWdlUmVmIEV3a1ZpZXc6OndrUGFn
ZSgpCit7CisgICAgcmV0dXJuIHRvQVBJKG1fcGFnZVByb3h5LmdldCgpKTsKK30KKwordm9pZCBF
d2tWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgaWYgKGN1cnNv
ci5pbWFnZSgpKSB7CisgICAgICAgIC8vIEN1c3RvbSBjdXJzb3IuCisgICAgICAgIGlmIChjdXJz
b3IuaW1hZ2UoKSA9PSBtX2N1cnNvcklkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgbV9jdXJzb3JJZGVudGlmaWVyID0gY3Vyc29yLmltYWdlKCk7CisKKyAgICAgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICAgICAgUmVmUHRyPEV2
YXNfT2JqZWN0PiBjdXJzb3JPYmplY3QgPSBhZG9wdFJlZihjdXJzb3IuaW1hZ2UoKS0+Z2V0RXZh
c09iamVjdChzZC0+YmFzZS5ldmFzKSk7CisgICAgICAgIGlmICghY3Vyc29yT2JqZWN0KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFJlc2l6ZSBjdXJzb3IuCisgICAgICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShjdXJzb3JPYmplY3QuZ2V0KCksIGN1cnNvci5pbWFnZSgpLT5zaXpl
KCkud2lkdGgoKSwgY3Vyc29yLmltYWdlKCktPnNpemUoKS5oZWlnaHQoKSk7CisKKyAgICAgICAg
Ly8gR2V0IGN1cnNvciBob3Qgc3BvdC4KKyAgICAgICAgSW50UG9pbnQgaG90U3BvdDsKKyAgICAg
ICAgY3Vyc29yLmltYWdlKCktPmdldEhvdFNwb3QoaG90U3BvdCk7CisKKyAgICAgICAgRWNvcmVf
RXZhcyogZWNvcmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFz
KTsKKyAgICAgICAgLy8gZWNvcmVfZXZhcyB0YWtlcyBjYXJlIG9mIGZyZWVpbmcgdGhlIGN1cnNv
ciBvYmplY3QuCisgICAgICAgIGVjb3JlX2V2YXNfb2JqZWN0X2N1cnNvcl9zZXQoZWNvcmVFdmFz
LCBjdXJzb3JPYmplY3QucmVsZWFzZSgpLmxlYWtSZWYoKSwgRVZBU19MQVlFUl9NQVgsIGhvdFNw
b3QueCgpLCBob3RTcG90LnkoKSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFN0YW5kYXJkIGN1cnNvci4KKyAgICBjb25zdCBjaGFyKiBncm91cCA9IGN1cnNvci5wbGF0Zm9y
bUN1cnNvcigpOworICAgIGlmICghZ3JvdXAgfHwgZ3JvdXAgPT0gbV9jdXJzb3JJZGVudGlmaWVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnNvcklkZW50aWZpZXIgPSBncm91cDsKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAgIFJlZlB0cjxFdmFz
X09iamVjdD4gY3Vyc29yT2JqZWN0ID0gYWRvcHRSZWYoZWRqZV9vYmplY3RfYWRkKHNkLT5iYXNl
LmV2YXMpKTsKKworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVf
ZXZhc19nZXQoc2QtPmJhc2UuZXZhcyk7CisgICAgaWYgKCFtX3RoZW1lIHx8ICFlZGplX29iamVj
dF9maWxlX3NldChjdXJzb3JPYmplY3QuZ2V0KCksIG1fdGhlbWUsIGdyb3VwKSkgeworICAgICAg
ICBlY29yZV9ldmFzX29iamVjdF9jdXJzb3Jfc2V0KGVjb3JlRXZhcywgMCwgMCwgMCwgMCk7Cisj
aWZkZWYgSEFWRV9FQ09SRV9YCisgICAgICAgIGlmIChXZWJDb3JlOjppc1VzaW5nRWNvcmVYKHNk
LT5iYXNlLmV2YXMpKQorICAgICAgICAgICAgV2ViQ29yZTo6YXBwbHlGYWxsYmFja0N1cnNvcihl
Y29yZUV2YXMsIGdyb3VwKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gU2V0IGN1cnNvciBzaXplLgorICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKKyAgICBl
ZGplX29iamVjdF9zaXplX21pbl9nZXQoY3Vyc29yT2JqZWN0LmdldCgpLCAmd2lkdGgsICZoZWln
aHQpOworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQorICAgICAgICBlZGplX29i
amVjdF9zaXplX21pbl9jYWxjKGN1cnNvck9iamVjdC5nZXQoKSwgJndpZHRoLCAmaGVpZ2h0KTsK
KyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkgeworICAgICAgICB3aWR0aCA9IGRl
ZmF1bHRDdXJzb3JTaXplOworICAgICAgICBoZWlnaHQgPSBkZWZhdWx0Q3Vyc29yU2l6ZTsKKyAg
ICB9CisgICAgZXZhc19vYmplY3RfcmVzaXplKGN1cnNvck9iamVjdC5nZXQoKSwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICAvLyBHZXQgY3Vyc29yIGhvdCBzcG90LgorICAgIGNvbnN0IGNoYXIqIGRh
dGE7CisgICAgaW50IGhvdHNwb3RYID0gMDsKKyAgICBkYXRhID0gZWRqZV9vYmplY3RfZGF0YV9n
ZXQoY3Vyc29yT2JqZWN0LmdldCgpLCAiaG90LngiKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAg
aG90c3BvdFggPSBhdG9pKGRhdGEpOworCisgICAgaW50IGhvdHNwb3RZID0gMDsKKyAgICBkYXRh
ID0gZWRqZV9vYmplY3RfZGF0YV9nZXQoY3Vyc29yT2JqZWN0LmdldCgpLCAiaG90LnkiKTsKKyAg
ICBpZiAoZGF0YSkKKyAgICAgICAgaG90c3BvdFkgPSBhdG9pKGRhdGEpOworCisgICAgLy8gZWNv
cmVfZXZhcyB0YWtlcyBjYXJlIG9mIGZyZWVpbmcgdGhlIGN1cnNvciBvYmplY3QuCisgICAgZWNv
cmVfZXZhc19vYmplY3RfY3Vyc29yX3NldChlY29yZUV2YXMsIGN1cnNvck9iamVjdC5yZWxlYXNl
KCkubGVha1JlZigpLCBFVkFTX0xBWUVSX01BWCwgaG90c3BvdFgsIGhvdHNwb3RZKTsKK30KKwor
dm9pZCBFd2tWaWV3OjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkKK3sKKyAgICBw
YWdlKCktPnNldEludHJpbnNpY0RldmljZVNjYWxlRmFjdG9yKHNjYWxlKTsKK30KKworZmxvYXQg
RXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2VQ
cm94eS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIEV3a1ZpZXc6
OnRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybTsKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIC8vIE5vdGUgdGhhdCB3
ZSBhcHBseSBib3RoIHBhZ2UgYW5kIGRldmljZSBzY2FsZSBmYWN0b3JzLgorICAgIHRyYW5zZm9y
bS5zY2FsZSgxIC8gcGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHRyYW5zZm9ybS5zY2FsZSgxIC8g
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwYWdlUG9zaXRp
b24oKS54KCksIHBhZ2VQb3NpdGlvbigpLnkoKSk7CisjZW5kaWYKKworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtc2Qt
PnZpZXcueCwgLXNkLT52aWV3LnkpOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKworQWZm
aW5lVHJhbnNmb3JtIEV3a1ZpZXc6OnRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdAoreworICAgIHJl
dHVybiB0cmFuc2Zvcm1Gcm9tU2NlbmUoKS5pbnZlcnNlKCk7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSBFd2tWaWV3Ojp0cmFuc2Zvcm1Ub1NjcmVlbigpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybTsKKworICAgIGludCB3aW5kb3dHbG9iYWxYID0gMDsKKyAgICBpbnQgd2lu
ZG93R2xvYmFsWSA9IDA7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0
YSgpOworCisjaWZkZWYgSEFWRV9FQ09SRV9YCisgICAgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKKworICAgIEVjb3JlX1hf
V2luZG93IHdpbmRvdzsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgd2lu
ZG93ID0gZWNvcmVfZXZhc19nbF94MTFfd2luZG93X2dldChlY29yZUV2YXMpOworICAgIC8vIEZh
bGxiYWNrIHRvIHNvZnR3YXJlIG1vZGUgaWYgbmVjZXNzYXJ5LgorICAgIGlmICghd2luZG93KQor
I2VuZGlmCisgICAgd2luZG93ID0gZWNvcmVfZXZhc19zb2Z0d2FyZV94MTFfd2luZG93X2dldChl
Y29yZUV2YXMpOyAvLyBSZXR1cm5zIDAgaWYgbm9uZS4KKworICAgIGludCB4LCB5OyAvLyB4LCB5
IGFyZSByZWxhdGl2ZSB0byBwYXJlbnQgKGluIGEgcmVwYXJlbnRpbmcgd2luZG93IG1hbmFnZXIp
LgorICAgIHdoaWxlICh3aW5kb3cpIHsKKyAgICAgICAgZWNvcmVfeF93aW5kb3dfZ2VvbWV0cnlf
Z2V0KHdpbmRvdywgJngsICZ5LCAwLCAwKTsKKyAgICAgICAgd2luZG93R2xvYmFsWCArPSB4Owor
ICAgICAgICB3aW5kb3dHbG9iYWxZICs9IHk7CisgICAgICAgIHdpbmRvdyA9IGVjb3JlX3hfd2lu
ZG93X3BhcmVudF9nZXQod2luZG93KTsKKyAgICB9CisjZW5kaWYKKworICAgIHRyYW5zZm9ybS50
cmFuc2xhdGUoLXNkLT52aWV3LngsIC1zZC0+dmlldy55KTsKKyAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKHdpbmRvd0dsb2JhbFgsIHdpbmRvd0dsb2JhbFkpOworCisgICAgcmV0dXJuIHRyYW5zZm9y
bTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK0xheWVyVHJlZVJlbmRlcmVy
KiBFd2tWaWV3OjpsYXllclRyZWVSZW5kZXJlcigpCit7CisgICAgRHJhd2luZ0FyZWFQcm94eSog
ZHJhd2luZ0FyZWEgPSBwYWdlKCktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKCFkcmF3aW5nQXJl
YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGRyYXdpbmdBcmVhLT5j
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOworICAgIGlmICghY29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworfQorI2VuZGlmCisK
K3ZvaWQgRXdrVmlldzo6ZGlzcGxheVRpbWVyRmlyZWQoVGltZXI8RXdrVmlldz4qKQoreworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9
IHNtYXJ0RGF0YSgpOworCisgICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNpemUpIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgR0wgc3VyZmFjZSBoZXJlIHNvIHRoYXQgRXZhcyBoYXMgbm8gY2hhbmNl
IG9mIHBhaW50aW5nIHRvIGFuIGVtcHR5IEdMIHN1cmZhY2UuCisgICAgICAgIGNyZWF0ZUdMU3Vy
ZmFjZShJbnRTaXplKHNkLT52aWV3LncsIHNkLT52aWV3LmgpKTsKKyAgICAgICAgaWYgKCFtX2V2
YXNHTFN1cmZhY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9wZW5kaW5nU3Vy
ZmFjZVJlc2l6ZSA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBldmFzX2dsX21ha2VfY3Vy
cmVudChtX2V2YXNHTC5nZXQoKSwgZXZhc0dMU3VyZmFjZSgpLCBldmFzR0xDb250ZXh0KCkpOwor
CisgICAgLy8gV2UgYXJlIHN1cHBvc2VkIHRvIGNsaXAgdG8gdGhlIGFjdHVhbCB2aWV3cG9ydCwg
bm90aGluZyBsZXNzLgorICAgIEludFJlY3Qgdmlld3BvcnQoc2QtPnZpZXcueCwgc2QtPnZpZXcu
eSwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7CisKKyAgICBMYXllclRyZWVSZW5kZXJlciogcmVu
ZGVyZXIgPSBsYXllclRyZWVSZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgcmVuZGVyZXIt
PnNldERyYXdzQmFja2dyb3VuZChtX3NldERyYXdzQmFja2dyb3VuZCk7CisgICAgaWYgKG1faXNI
YXJkd2FyZUFjY2VsZXJhdGVkKSB7CisgICAgICAgIHJlbmRlcmVyLT5wYWludFRvQ3VycmVudEdM
Q29udGV4dCh0cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAvKiBv
cGFjaXR5ICovIDEsIHZpZXdwb3J0KTsKKyAgICAgICAgLy8gc2QtPmltYWdlIGlzIHRpZWQgdG8g
YSBuYXRpdmUgc3VyZmFjZS4gVGhlIG5hdGl2ZSBzdXJmYWNlIGlzIGluIHRoZSBwYXJlbnQncyBj
b29yZGluYXRlcywKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgdmll
d3BvcnQgcG9zaXRpb24gd2hlbiBjYWxsaW5nIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRl
X2FkZC4KKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNkLT5pbWFn
ZSwgdmlld3BvcnQueCgpLCB2aWV3cG9ydC55KCksIHZpZXdwb3J0LndpZHRoKCksIHZpZXdwb3J0
LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBzdXJmYWNlID0gY3JlYXRlU3VyZmFjZUZvckltYWdlKHNkLT5pbWFnZSk7CisgICAgICAgIGlm
ICghc3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8Y2Fpcm9f
dD4gZ3JhcGhpY3NDb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UuZ2V0KCkp
KTsKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgLSBwYWdl
UG9zaXRpb24oKS54KCksIC0gcGFnZVBvc2l0aW9uKCkueSgpKTsKKyAgICAgICAgY2Fpcm9fc2Nh
bGUoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCBwYWdlU2NhbGVGYWN0b3IoKSwgcGFnZVNjYWxlRmFj
dG9yKCkpOworICAgICAgICBjYWlyb19zY2FsZShncmFwaGljc0NvbnRleHQuZ2V0KCksIGRldmlj
ZVNjYWxlRmFjdG9yKCksIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZW5kZXJlci0+
cGFpbnRUb0dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQuZ2V0KCkpOworICAgICAgICBl
dmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2QtPmltYWdlLCAwLCAwLCB2aWV3cG9y
dC53aWR0aCgpLCB2aWV3cG9ydC5oZWlnaHQoKSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQg
RXdrVmlldzo6dXBkYXRlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisgICAgLy8gQ29vcmRpbmF0ZWQgZ3JhcGhpY2VzIG5lZWRzIHRvIHNjaGVkdWxlIGFuIGZ1bGwg
dXBkYXRlLCBub3QKKyAgICAvLyByZXBhaW50aW5nIG9mIGEgcmVnaW9uLiBVcGRhdGUgaW4gdGhl
IGV2ZW50IGxvb3AuCisgICAgVU5VU0VEX1BBUkFNKHJlY3QpOworCisgICAgLy8gR3VhcmQgZm9y
IHplcm8gc2l6ZWQgdmlld3BvcnQuCisgICAgaWYgKCEoc2QtPnZpZXcudyAmJiBzZC0+dmlldy5o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICBtX2Rpc3BsYXlUaW1lci5zdGFydE9uZVNob3QoMCk7CisjZWxzZQorICAgIGlm
ICghc2QtPmltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9k
YXRhX3VwZGF0ZV9hZGQoc2QtPmltYWdlLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKy8qKgorICogQGludGVybmFsCisgKiBDYWxscyBmdWxsc2NyZWVuX2VudGVyIGNhbGxiYWNr
IG9yIGZhbGxzIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvciBhbmQgZW5hYmxlcyBmdWxsc2NyZWVu
IG1vZGUuCisgKi8KK3ZvaWQgRXdrVmlldzo6ZW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworCisgICAgUmVmUHRyPEV3a1NlY3Vy
aXR5T3JpZ2luPiBvcmlnaW4gPSBFd2tTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCBTdHJpbmc6OmZyb21VVEY4KG1fdXJsKSkpOworCisgICAgaWYgKCFzZC0+YXBp
LT5mdWxsc2NyZWVuX2VudGVyIHx8ICFzZC0+YXBpLT5mdWxsc2NyZWVuX2VudGVyKHNkLCBvcmln
aW4uZ2V0KCkpKSB7CisgICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNf
ZWNvcmVfZXZhc19nZXQoc2QtPmJhc2UuZXZhcyk7CisgICAgICAgIGVjb3JlX2V2YXNfZnVsbHNj
cmVlbl9zZXQoZWNvcmVFdmFzLCB0cnVlKTsKKyAgICB9Cit9CisKKy8qKgorICogQGludGVybmFs
CisgKiBDYWxscyBmdWxsc2NyZWVuX2V4aXQgY2FsbGJhY2sgb3IgZmFsbHMgYmFjayB0byBkZWZh
dWx0IGJlaGF2aW9yIGFuZCBkaXNhYmxlcyBmdWxsc2NyZWVuIG1vZGUuCisgKi8KK3ZvaWQgRXdr
Vmlldzo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0g
c21hcnREYXRhKCk7CisKKyAgICBpZiAoIXNkLT5hcGktPmZ1bGxzY3JlZW5fZXhpdCB8fCAhc2Qt
PmFwaS0+ZnVsbHNjcmVlbl9leGl0KHNkKSkgeworICAgICAgICBFY29yZV9FdmFzKiBlY29yZUV2
YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5iYXNlLmV2YXMpOworICAgICAgICBl
Y29yZV9ldmFzX2Z1bGxzY3JlZW5fc2V0KGVjb3JlRXZhcywgZmFsc2UpOworICAgIH0KK30KKyNl
bmRpZgorCitXS1JlY3QgRXdrVmlldzo6d2luZG93R2VvbWV0cnkoKSBjb25zdAoreworICAgIEV2
YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCA9IHNtYXJ0RGF0YSgpOworCisgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfZ2VvbWV0cnlfZ2V0
IHx8ICFzZC0+YXBpLT53aW5kb3dfZ2VvbWV0cnlfZ2V0KHNkLCAmeCwgJnksICZ3aWR0aCwgJmhl
aWdodCkpIHsKKyAgICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNf
Z2V0KHNkLT5iYXNlLmV2YXMpOworICAgICAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlf
Z2V0KGVlLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuIFdL
UmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgRXdrVmlldzo6c2V0V2lu
ZG93R2VvbWV0cnkoY29uc3QgV0tSZWN0JiByZWN0KQoreworICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkID0gc21hcnREYXRhKCk7CisKKyAgICBpZiAoIXNkLT5hcGktPndpbmRvd19nZW9tZXRy
eV9zZXQgfHwgIXNkLT5hcGktPndpbmRvd19nZW9tZXRyeV9zZXQoc2QsIHJlY3Qub3JpZ2luLngs
IHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdodCkpIHsKKyAg
ICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5iYXNl
LmV2YXMpOworICAgICAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKGVlLCByZWN0Lm9yaWdpbi54
LCByZWN0Lm9yaWdpbi55LCByZWN0LnNpemUud2lkdGgsIHJlY3Quc2l6ZS5oZWlnaHQpOworICAg
IH0KK30KKwordm9pZCBFd2tWaWV3OjpzZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25z
dCBJbnRTaXplJiBzaXplKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnRE
YXRhKCk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIXNkLT5pbWFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5pbWFnZSwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzZC0+aW1hZ2UsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9j
b3B5X3NldChzZC0+aW1hZ2UsIGltYWdlRGF0YSk7Cit9CisKK0ludFNpemUgRXdrVmlldzo6c2l6
ZSgpIGNvbnN0Cit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZXZhc19vYmplY3RfZ2Vv
bWV0cnlfZ2V0KG1fZXZhc09iamVjdCwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICByZXR1
cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBFd2tWaWV3Ojppc0ZvY3VzZWQo
KSBjb25zdAoreworICAgIHJldHVybiBldmFzX29iamVjdF9mb2N1c19nZXQobV9ldmFzT2JqZWN0
KTsKK30KKworYm9vbCBFd2tWaWV3Ojppc1Zpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBl
dmFzX29iamVjdF92aXNpYmxlX2dldChtX2V2YXNPYmplY3QpOworfQorCitjb25zdCBjaGFyKiBF
d2tWaWV3Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgbV90aXRsZSA9IG1fcGFnZVByb3h5LT5wYWdl
VGl0bGUoKS51dGY4KCkuZGF0YSgpOworCisgICAgcmV0dXJuIG1fdGl0bGU7Cit9CisKKy8qKgor
ICogQGludGVybmFsCisgKiBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gQGMgTlVMTC4KKyAqLwor
SW5wdXRNZXRob2RDb250ZXh0RWZsKiBFd2tWaWV3OjppbnB1dE1ldGhvZENvbnRleHQoKQorewor
ICAgIHJldHVybiBtX2lucHV0TWV0aG9kQ29udGV4dC5nZXQoKTsKK30KKworY29uc3QgY2hhciog
RXdrVmlldzo6dGhlbWVQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aGVtZTsKK30KKwor
dm9pZCBFd2tWaWV3OjpzZXRUaGVtZVBhdGgoY29uc3QgY2hhciogdGhlbWUpCit7CisgICAgaWYg
KG1fdGhlbWUgIT0gdGhlbWUpIHsKKyAgICAgICAgbV90aGVtZSA9IHRoZW1lOworICAgICAgICBt
X3BhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIq
IEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUoKSBjb25zdAoreworICAgIFN0cmluZyBj
dXN0b21FbmNvZGluZyA9IG1fcGFnZVByb3h5LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Cisg
ICAgaWYgKGN1c3RvbUVuY29kaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBtX2N1c3RvbUVuY29kaW5nID0gY3VzdG9tRW5jb2RpbmcudXRmOCgpLmRhdGEoKTsKKworICAg
IHJldHVybiBtX2N1c3RvbUVuY29kaW5nOworfQorCit2b2lkIEV3a1ZpZXc6OnNldEN1c3RvbVRl
eHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKK3sKKyAgICBtX3BhZ2VQcm94
eS0+c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShlbmNvZGluZyk7Cit9CisKK3ZvaWQgRXdrVmll
dzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV9tb3Vz
ZUV2ZW50c0VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb3Vz
ZUV2ZW50c0VuYWJsZWQgPSBlbmFibGVkOworICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgICAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9X
Tiwgb25Nb3VzZURvd24sIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tf
YWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgb25Nb3VzZVVwLCBzZCk7
CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVW
QVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Nb3VzZU1vdmUsIHNkKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0LCBFVkFT
X0NBTExCQUNLX01PVVNFX0RPV04sIG9uTW91c2VEb3duKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwg
b25Nb3VzZVVwKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZh
c09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvbk1vdXNlTW92ZSk7CisgICAgfQor
fQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQgRXdrVmlldzo6c2V0VG91Y2hFdmVu
dHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV90b3VjaEV2ZW50c0VuYWJsZWQg
PT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90b3VjaEV2ZW50c0VuYWJsZWQg
PSBlbmFibGVkOworCisgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGhh
dmUgdG8gY29ubmVjdCB0b3VjaCBjYWxsYmFja3Mgd2l0aCBtb3VzZSBhbmQgbXVsdGkgZXZlbnRz
CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIEV2YXMgY3JlYXRlcyBtb3VzZSBldmVudHMgZm9yIGZp
cnN0IHRvdWNoIGFuZCBtdWx0aSBldmVudHMKKyAgICAgICAgLy8gZm9yIHNlY29uZCBhbmQgdGhp
cmQgdG91Y2hlcy4gQmVsb3cgY29kZXMgc2hvdWxkIGJlIGZpeGVkIHdoZW4gdGhlIEV2YXMKKyAg
ICAgICAgLy8gc3VwcG9ydHMgdGhlIHRvdWNoIGV2ZW50cy4KKyAgICAgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzc4NSBmb3IgZGV0YWlscy4KKyAg
ICAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKyAgICAgICAgZXZh
c19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19N
T1VTRV9ET1dOLCBvblRvdWNoRG93biwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9j
YWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01PVVNFX1VQLCBvblRvdWNo
VXAsIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKG1fZXZhc09i
amVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9NT1ZFLCBvblRvdWNoTW92ZSwgc2QpOworICAgICAg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9ldmFzT2JqZWN0LCBFVkFTX0NBTExC
QUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfVVAsIG9u
VG91Y2hVcCwgc2QpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV9l
dmFzT2JqZWN0LCBFVkFTX0NBTExCQUNLX01VTFRJX01PVkUsIG9uVG91Y2hNb3ZlLCBzZCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZh
c09iamVjdCwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvblRvdWNoRG93bik7CisgICAgICAg
IGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJB
Q0tfTU9VU0VfVVAsIG9uVG91Y2hVcCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxi
YWNrX2RlbChtX2V2YXNPYmplY3QsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwgb25Ub3VjaE1v
dmUpOworICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV9ldmFzT2JqZWN0
LCBFVkFTX0NBTExCQUNLX01VTFRJX0RPV04sIG9uVG91Y2hEb3duKTsKKyAgICAgICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxU
SV9VUCwgb25Ub3VjaFVwKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVs
KG1fZXZhc09iamVjdCwgRVZBU19DQUxMQkFDS19NVUxUSV9NT1ZFLCBvblRvdWNoTW92ZSk7Cisg
ICAgfQorfQorI2VuZGlmCisKKy8qKgorICogQGludGVybmFsCisgKiBVcGRhdGUgdGhlIHZpZXcn
cyBmYXZpY29uIGFuZCBlbWl0cyBhICJpY29uLGNoYW5nZWQiIHNpZ25hbCBpZiBpdCBoYXMKKyAq
IGNoYW5nZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIFVS
TCBoYXMgY2hhbmdlZCBvciB3aGVuIHRoZSBpY29uIGZvcgorICogdGhlIGN1cnJlbnQgcGFnZSBV
UkwgaGFzIGNoYW5nZWQuCisgKi8KK3ZvaWQgRXdrVmlldzo6aW5mb3JtSWNvbkNoYW5nZSgpCit7
CisgICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmlj
b25EYXRhYmFzZSgpOworICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOworCisgICAgbV9mYXZpY29u
VVJMID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KGljb25EYXRhYmFzZSwgbV91
cmwpOworICAgIHNtYXJ0Q2FsbGJhY2s8SWNvbkNoYW5nZWQ+KCkuY2FsbCgpOworfQorCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZh
Y2UoY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCit7CisgICAgaWYgKCFtX2lzSGFyZHdhcmVBY2Nl
bGVyYXRlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1fZXZhc0dMKSB7Cisg
ICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX2V2YXNPYmplY3QpOwor
ICAgICAgICBtX2V2YXNHTCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXMpKTsKKyAgICAgICAg
aWYgKCFtX2V2YXNHTCkgeworICAgICAgICAgICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFz
X0dMLCBmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgbW9kZS4iKTsKKyAgICAgICAgICAgIG1faXNI
YXJkd2FyZUFjY2VsZXJhdGVkID0gZmFsc2U7CisjaWYgRU5BQkxFKFdFQkdMKQorICAgICAgICAg
ICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJs
ZWQoZmFsc2UpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIW1fZXZhc0dMQ29udGV4dCkgeworICAgICAgICBtX2V2YXNHTENv
bnRleHQgPSBFdmFzR0xDb250ZXh0OjpjcmVhdGUobV9ldmFzR0wuZ2V0KCkpOworICAgICAgICBp
ZiAoIW1fZXZhc0dMQ29udGV4dCkgeworICAgICAgICAgICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0
ZSBHTENvbnRleHQuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworCisgICAg
RXZhc19HTF9Db25maWcgZXZhc0dMQ29uZmlnID0geworICAgICAgICBFVkFTX0dMX1JHQkFfODg4
OCwKKyAgICAgICAgRVZBU19HTF9ERVBUSF9CSVRfOCwKKyAgICAgICAgRVZBU19HTF9TVEVOQ0lM
X05PTkUsCisgICAgICAgIEVWQVNfR0xfT1BUSU9OU19OT05FLAorICAgICAgICBFVkFTX0dMX01V
TFRJU0FNUExFX05PTkUKKyAgICB9OworCisgICAgLy8gUmVwbGFjZXMgaWYgbm9uLW51bGwsIGFu
ZCBmcmVlcyBleGlzdGluZyBzdXJmYWNlIGFmdGVyIChPd25QdHIpLgorICAgIG1fZXZhc0dMU3Vy
ZmFjZSA9IEV2YXNHTFN1cmZhY2U6OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSwgJmV2YXNHTENvbmZp
Zywgdmlld1NpemUpOworICAgIGlmICghbV9ldmFzR0xTdXJmYWNlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBFdmFzX05hdGl2ZV9TdXJmYWNlIG5hdGl2ZVN1cmZhY2U7CisgICAgZXZh
c19nbF9uYXRpdmVfc3VyZmFjZV9nZXQobV9ldmFzR0wuZ2V0KCksIGV2YXNHTFN1cmZhY2UoKSwg
Jm5hdGl2ZVN1cmZhY2UpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX25hdGl2ZV9zdXJmYWNlX3Nl
dChzZC0+aW1hZ2UsICZuYXRpdmVTdXJmYWNlKTsKKworICAgIGV2YXNfZ2xfbWFrZV9jdXJyZW50
KG1fZXZhc0dMLmdldCgpLCBldmFzR0xTdXJmYWNlKCksIGV2YXNHTENvbnRleHQoKSk7CisKKyAg
ICBFdmFzX0dMX0FQSSogZ2wgPSBldmFzX2dsX2FwaV9nZXQobV9ldmFzR0wuZ2V0KCkpOworICAg
IGdsLT5nbFZpZXdwb3J0KDAsIDAsIHZpZXdTaXplLndpZHRoKCkgKyBzZC0+dmlldy54LCB2aWV3
U2l6ZS5oZWlnaHQoKSArIHNkLT52aWV3LnkpOworICAgIGdsLT5nbENsZWFyQ29sb3IoMS4wLCAx
LjAsIDEuMCwgMCk7CisgICAgZ2wtPmdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFd2tWaWV3OjplbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkKK3sKKyAgICBsYXllclRyZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUodHJ1ZSk7
CisKKyAgICBpZiAoIW1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICghbV9ldmFzR0xTdXJmYWNlKSB7CisgICAgICAgIGlmICghY3JlYXRlR0xT
dXJmYWNlKHNpemUoKSkpIHsKKyAgICAgICAgICAgIFdBUk4oIkZhaWxlZCB0byBjcmVhdGUgR0xT
dXJmYWNlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRXdrVmlldzo6ZXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCisjaWYgRU5B
QkxFKElOUFVUX1RZUEVfQ09MT1IpCisvKioKKyAqIEBpbnRlcm5hbAorICogUmVxdWVzdHMgdG8g
c2hvdyBleHRlcm5hbCBjb2xvciBwaWNrZXIuCisgKi8KK3ZvaWQgRXdrVmlldzo6cmVxdWVzdENv
bG9yUGlja2VyKFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImIGNvbG9yKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0g
c21hcnREYXRhKCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+aW5w
dXRfcGlja2VyX2NvbG9yX3JlcXVlc3QpOworCisgICAgaWYgKCFzZC0+YXBpLT5pbnB1dF9waWNr
ZXJfY29sb3JfcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29sb3JQaWNr
ZXIpCisgICAgICAgIGRpc21pc3NDb2xvclBpY2tlcigpOworCisgICAgbV9jb2xvclBpY2tlciA9
IEV3a0NvbG9yUGlja2VyOjpjcmVhdGUobGlzdGVuZXIsIGNvbG9yKTsKKworICAgIHNkLT5hcGkt
PmlucHV0X3BpY2tlcl9jb2xvcl9yZXF1ZXN0KHNkLCBtX2NvbG9yUGlja2VyLmdldCgpKTsKK30K
KworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJlcXVlc3RzIHRvIGhpZGUgZXh0ZXJuYWwgY29sb3Ig
cGlja2VyLgorICovCit2b2lkIEV3a1ZpZXc6OmRpc21pc3NDb2xvclBpY2tlcigpCit7CisgICAg
aWYgKCFtX2NvbG9yUGlja2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGktPmlucHV0X3BpY2tlcl9jb2xvcl9kaXNtaXNzKTsKKworICAgIGlmIChzZC0+YXBp
LT5pbnB1dF9waWNrZXJfY29sb3JfZGlzbWlzcykKKyAgICAgICAgc2QtPmFwaS0+aW5wdXRfcGlj
a2VyX2NvbG9yX2Rpc21pc3Moc2QpOworCisgICAgbV9jb2xvclBpY2tlci5jbGVhcigpOworfQor
I2VuZGlmCisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRVdLX1RFWFRfRElSRUNUSU9O
X1JJR0hUX1RPX0xFRlQsIFJUTCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKEVXS19U
RVhUX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hULCBMVFIpOworCit2b2lkIEV3a1ZpZXc6OnNob3dD
b250ZXh0TWVudShXZWJDb250ZXh0TWVudVByb3h5RWZsKiBjb250ZXh0TWVudVByb3h5LCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhPiYgaXRlbXMpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFy
dERhdGEoKTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CisKKyAgICBBU1NFUlQoY29udGV4dE1lbnVQ
cm94eSk7CisKKyAgICBpZiAoIXNkLT5hcGktPmNvbnRleHRfbWVudV9zaG93KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9jb250ZXh0TWVudSkKKyAgICAgICAgaGlkZUNvbnRleHRNZW51
KCk7CisKKyAgICBtX2NvbnRleHRNZW51ID0gRXdrX0NvbnRleHRfTWVudTo6Y3JlYXRlKHRoaXMs
IGNvbnRleHRNZW51UHJveHksIGl0ZW1zKTsKKworICAgIHNkLT5hcGktPmNvbnRleHRfbWVudV9z
aG93KHNkLCBwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7
Cit9CisKK3ZvaWQgRXdrVmlldzo6aGlkZUNvbnRleHRNZW51KCkKK3sKKyAgICBpZiAoIW1fY29u
dGV4dE1lbnUpCisgICAgICAgIHJldHVybjsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
ID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKHNkLT5hcGkt
PmNvbnRleHRfbWVudV9oaWRlKQorICAgICAgICBzZC0+YXBpLT5jb250ZXh0X21lbnVfaGlkZShz
ZCk7CisKKyAgICBtX2NvbnRleHRNZW51LmNsZWFyKCk7Cit9CisKK3ZvaWQgRXdrVmlldzo6cmVx
dWVzdFBvcHVwTWVudShXZWJQb3B1cE1lbnVQcm94eUVmbCogcG9wdXBNZW51UHJveHksIGNvbnN0
IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VT
Y2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBpbnQzMl90IHNl
bGVjdGVkSW5kZXgpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEo
KTsKKyAgICBBU1NFUlQoc2QtPmFwaSk7CisKKyAgICBBU1NFUlQocG9wdXBNZW51UHJveHkpOwor
CisgICAgaWYgKCFzZC0+YXBpLT5wb3B1cF9tZW51X3Nob3cpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3BvcHVwTWVudSkKKyAgICAgICAgY2xvc2VQb3B1cE1lbnUoKTsKKworICAgIG1f
cG9wdXBNZW51ID0gRXdrUG9wdXBNZW51OjpjcmVhdGUodGhpcywgcG9wdXBNZW51UHJveHksIGl0
ZW1zLCBzZWxlY3RlZEluZGV4KTsKKworICAgIHNkLT5hcGktPnBvcHVwX21lbnVfc2hvdyhzZCwg
cmVjdCwgc3RhdGljX2Nhc3Q8RXdrX1RleHRfRGlyZWN0aW9uPih0ZXh0RGlyZWN0aW9uKSwgcGFn
ZVNjYWxlRmFjdG9yLCBtX3BvcHVwTWVudS5nZXQoKSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6Y2xv
c2VQb3B1cE1lbnUoKQoreworICAgIGlmICghbV9wb3B1cE1lbnUpCisgICAgICAgIHJldHVybjsK
KworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJU
KHNkLT5hcGkpOworCisgICAgaWYgKHNkLT5hcGktPnBvcHVwX21lbnVfaGlkZSkKKyAgICAgICAg
c2QtPmFwaS0+cG9wdXBfbWVudV9oaWRlKHNkKTsKKworICAgIG1fcG9wdXBNZW51LmNsZWFyKCk7
Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBDYWxscyBhIHNtYXJ0IG1lbWJlciBmdW5jdGlv
biBmb3IgamF2YXNjcmlwdCBhbGVydCgpLgorICovCit2b2lkIEV3a1ZpZXc6OnJlcXVlc3RKU0Fs
ZXJ0UG9wdXAoY29uc3QgV0tFaW5hU2hhcmVkU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOwor
CisgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQoc2QsIG1lc3NhZ2UpOworfQor
CisvKioKKyAqIEBpbnRlcm5hbAorICogQ2FsbHMgYSBzbWFydCBtZW1iZXIgZnVuY3Rpb24gZm9y
IGphdmFzY3JpcHQgY29uZmlybSgpIGFuZCByZXR1cm5zIGEgdmFsdWUgZnJvbSB0aGUgZnVuY3Rp
b24uIFJldHVybnMgZmFsc2UgYnkgZGVmYXVsdC4KKyAqLworYm9vbCBFd2tWaWV3OjpyZXF1ZXN0
SlNDb25maXJtUG9wdXAoY29uc3QgV0tFaW5hU2hhcmVkU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5h
cGkpOworCisgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29u
ZmlybShzZCwgbWVzc2FnZSk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBDYWxscyBhIHNt
YXJ0IG1lbWJlciBmdW5jdGlvbiBmb3IgamF2YXNjcmlwdCBwcm9tcHQoKSBhbmQgcmV0dXJucyBh
IHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uLiBSZXR1cm5zIG51bGwgc3RyaW5nIGJ5IGRlZmF1bHQu
CisgKi8KK1dLRWluYVNoYXJlZFN0cmluZyBFd2tWaWV3OjpyZXF1ZXN0SlNQcm9tcHRQb3B1cChj
b25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmlu
ZyYgZGVmYXVsdFZhbHVlKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnRE
YXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2
YXNjcmlwdF9wcm9tcHQpCisgICAgICAgIHJldHVybiBXS0VpbmFTaGFyZWRTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBXS0VpbmFTaGFyZWRTdHJpbmc6OmFkb3B0KHNkLT5hcGktPnJ1bl9qYXZhc2Ny
aXB0X3Byb21wdChzZCwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorLyoqCisgKiBAaW50ZXJuYWwKKyAqIENhbGxzIGV4Y2VlZGVkX2RhdGFi
YXNlX3F1b3RhIGNhbGxiYWNrIG9yIGZhbGxzIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvciByZXR1
cm5zIGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBFd2tW
aWV3OjppbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
ZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRR
dW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWduZWQgbG9u
ZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRV
c2FnZSkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAg
IEFTU0VSVChzZC0+YXBpKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcg
ZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMjA0OyAvLyA1IE1CCisgICAgaWYgKHNkLT5hcGkt
PmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKQorICAgICAgICByZXR1cm4gc2QtPmFwaS0+ZXhjZWVk
ZWRfZGF0YWJhc2VfcXVvdGEoc2QsIGRhdGFiYXNlTmFtZS51dGY4KCkuZGF0YSgpLCBkaXNwbGF5
TmFtZS51dGY4KCkuZGF0YSgpLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRPcmlnaW5Vc2FnZSwgY3Vy
cmVudERhdGFiYXNlVXNhZ2UsIGV4cGVjdGVkVXNhZ2UpOworCisgICAgcmV0dXJuIGRlZmF1bHRR
dW90YTsKK30KKyNlbmRpZgorCisvKioKKyAqIEBpbnRlcm5hbAorICogVGhlIHVybCBvZiB2aWV3
IHdhcyBjaGFuZ2VkIGJ5IHRoZSBmcmFtZSBsb2FkZXIuCisgKgorICogRW1pdHMgc2lnbmFsOiAi
dXJsLGNoYW5nZWQiIHdpdGggcG9pbnRlciB0byBuZXcgdXJsIHN0cmluZy4KKyAqLwordm9pZCBF
d2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UoKQoreworICAgIFN0cmluZyBhY3RpdmVVUkwgPSBtX3Bh
Z2VQcm94eS0+YWN0aXZlVVJMKCk7CisgICAgaWYgKGFjdGl2ZVVSTC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIENTdHJpbmcgcmF3QWN0aXZlVVJMID0gYWN0aXZlVVJMLnV0Zjgo
KTsKKyAgICBpZiAobV91cmwgPT0gcmF3QWN0aXZlVVJMLmRhdGEoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV91cmwgPSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIHNtYXJ0Q2FsbGJhY2s8
VVJMQ2hhbmdlZD4oKS5jYWxsKG1fdXJsKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmlldydzIGZh
dmljb24uCisgICAgaW5mb3JtSWNvbkNoYW5nZSgpOworfQorCitFd2tXaW5kb3dGZWF0dXJlcyog
RXdrVmlldzo6d2luZG93RmVhdHVyZXMoKQoreworICAgIGlmICghbV93aW5kb3dGZWF0dXJlcykK
KyAgICAgICAgbV93aW5kb3dGZWF0dXJlcyA9IEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUoMCwg
dGhpcyk7CisKKyAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsKK30KKworV0tQYWdl
UmVmIEV3a1ZpZXc6OmNyZWF0ZU5ld1BhZ2UoUGFzc1JlZlB0cjxFd2tVcmxSZXF1ZXN0PiByZXF1
ZXN0LCBJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcykKK3sKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAgIEFTU0VSVChzZC0+YXBpKTsKKwor
ICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IGV3a1dpbmRvd0ZlYXR1cmVzID0gRXdrV2luZG93
RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcywgdGhpcyk7CisKKyAgICBFdmFzX09iamVj
dCogbmV3RXdrVmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGUoc2QsIHJlcXVlc3QtPnVybCgp
LCBld2tXaW5kb3dGZWF0dXJlcy5nZXQoKSk7CisgICAgaWYgKCFuZXdFd2tWaWV3KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIEV3a1ZpZXcqIG5ld1ZpZXdJbXBsID0gRXdrVmlldzo6ZnJvbUV2
YXNPYmplY3QobmV3RXdrVmlldyk7CisgICAgQVNTRVJUKG5ld1ZpZXdJbXBsKTsKKworICAgIG5l
d1ZpZXdJbXBsLT5tX3dpbmRvd0ZlYXR1cmVzID0gZXdrV2luZG93RmVhdHVyZXM7CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS1JldGFpbihuZXdWaWV3SW1wbC0+cGFnZSgp
KSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6Y2xvc2UoKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgQVNTRVJUKHNkLT5hcGkpOworCisgICAgaWYgKCFz
ZC0+YXBpLT53aW5kb3dfY2xvc2UpCisgICAgICAgIHJldHVybjsKKworICAgIHNkLT5hcGktPndp
bmRvd19jbG9zZShzZCk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25Nb3VzZURvd24odm9pZCogZGF0
YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV2YXNfRXZl
bnRfTW91c2VfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9E
b3duKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBp
LT5tb3VzZV9kb3duKTsKKyAgICBzZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBkb3duRXZlbnQpOwor
fQorCit2b2lkIEV3a1ZpZXc6Om9uTW91c2VVcCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVu
dCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOworICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX3VwKTsKKyAgICBzZC0+YXBp
LT5tb3VzZV91cChzZCwgdXBFdmVudCk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25Nb3VzZU1vdmUo
dm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAg
IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVu
dF9Nb3VzZV9Nb3ZlKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzZC0+YXBpLT5tb3VzZV9tb3ZlKTsKKyAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBtb3Zl
RXZlbnQpOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQgRXdrVmlldzo6ZmVl
ZFRvdWNoRXZlbnRzKEV3a19Ub3VjaF9FdmVudF9UeXBlIHR5cGUpCit7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gZXZh
c190b3VjaF9wb2ludF9saXN0X2NvdW50KHNkLT5iYXNlLmV2YXMpOworICAgIGlmICghY291bnQp
CisgICAgICAgIHJldHVybjsKKworICAgIEVpbmFfTGlzdCogcG9pbnRzID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBFd2tfVG91Y2hfUG9p
bnQqIHBvaW50ID0gbmV3IEV3a19Ub3VjaF9Qb2ludDsKKyAgICAgICAgcG9pbnQtPmlkID0gZXZh
c190b3VjaF9wb2ludF9saXN0X250aF9pZF9nZXQoc2QtPmJhc2UuZXZhcywgaSk7CisgICAgICAg
IGV2YXNfdG91Y2hfcG9pbnRfbGlzdF9udGhfeHlfZ2V0KHNkLT5iYXNlLmV2YXMsIGksICZwb2lu
dC0+eCwgJnBvaW50LT55KTsKKyAgICAgICAgcG9pbnQtPnN0YXRlID0gZXZhc190b3VjaF9wb2lu
dF9saXN0X250aF9zdGF0ZV9nZXQoc2QtPmJhc2UuZXZhcywgaSk7CisgICAgICAgIHBvaW50cyA9
IGVpbmFfbGlzdF9hcHBlbmQocG9pbnRzLCBwb2ludCk7CisgICAgfQorCisgICAgZXdrX3ZpZXdf
ZmVlZF90b3VjaF9ldmVudChtX2V2YXNPYmplY3QsIHR5cGUsIHBvaW50cywgZXZhc19rZXlfbW9k
aWZpZXJfZ2V0KHNkLT5iYXNlLmV2YXMpKTsKKworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9M
SVNUX0ZSRUUocG9pbnRzLCBkYXRhKQorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8RXdrX1Rv
dWNoX1BvaW50Kj4oZGF0YSk7Cit9CisKK3ZvaWQgRXdrVmlldzo6b25Ub3VjaERvd24odm9pZCog
LyogZGF0YSAqLywgRXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9p
ZCogLyogZXZlbnRJbmZvICovKQoreworICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9t
RXZhc09iamVjdChld2tWaWV3KTsKKyAgICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNI
X1NUQVJUKTsKK30KKwordm9pZCBFd2tWaWV3OjpvblRvdWNoVXAodm9pZCogLyogZGF0YSAqLywg
RXZhcyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJ
bmZvICovKQoreworICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChl
d2tWaWV3KTsKKyAgICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX0VORCk7Cit9CisK
K3ZvaWQgRXdrVmlldzo6b25Ub3VjaE1vdmUodm9pZCogLyogZGF0YSAqLywgRXZhcyogLyogY2Fu
dmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZvICovKQorewor
ICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChld2tWaWV3KTsKKyAg
ICB2aWV3LT5mZWVkVG91Y2hFdmVudHMoRVdLX1RPVUNIX01PVkUpOworfQorI2VuZGlmCisKK3Zv
aWQgRXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBl
dmVudEluZm8pCit7CisgICAgRXdrVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEV3a1ZpZXcqPihl
dmVudEluZm8pOworCisgICAgaWYgKCF2aWV3LT51cmwoKSB8fCBzdHJjYXNlY21wKHZpZXctPnVy
bCgpLCBwYWdlVVJMKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlldy0+aW5mb3JtSWNvbkNo
YW5nZSgpOworfQorCitQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNu
YXBzaG90KCkKK3sKKyAgICAvLyBTdXNwZW5kIGFsbCBhbmltYXRpb25zIGJlZm9yZSB0YWtpbmcg
dGhlIHNuYXBzaG90LgorICAgIG1fcGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSBwZW5kaW5nIHJlcGFpbnQgZXZl
bnRzIHRvIGJlIHByb2Nlc3NlZC4KKyAgICB3aGlsZSAobV9kaXNwbGF5VGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKKworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgIGlmICghbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQpIHsKKyNlbmRpZgorICAgICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFn
ZShzZC0+aW1hZ2UpOworICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCisgICAgICAg
IG1fcGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworCisg
ICAgICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIH0KKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNuYXBzaG90
ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNkLT52aWV3LncsIHNkLT52
aWV3LmgpOworICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KKyAgICBtX3BhZ2VQcm94eS0+
cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKworICAgIHJldHVybiBzbmFw
c2hvdC5yZWxlYXNlKCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA1NTYz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdr
Vmlldy5oCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEV3a1ZpZXdfaAorI2RlZmluZSBFd2tW
aWV3X2gKKworI2luY2x1ZGUgIkV3a1ZpZXdDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJbW11dGFi
bGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiUmVmUHRyRWZsLmgiCisjaW5jbHVkZSAiV0tFaW5h
U2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgorI2luY2x1ZGUgIldLUmV0
YWluUHRyLmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRl
IDxFdmFzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dERpcmVjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisjaW5j
bHVkZSAiZXdrX3RvdWNoLmgiCisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyNpbmNsdWRlICJFdmFzR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiRXZhc0dMU3VyZmFj
ZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgQ29udGV4dE1lbnVDbGll
bnRFZmw7CitjbGFzcyBGaW5kQ2xpZW50RWZsOworY2xhc3MgRm9ybUNsaWVudEVmbDsKK2NsYXNz
IElucHV0TWV0aG9kQ29udGV4dEVmbDsKK2NsYXNzIFBhZ2VDbGllbnRCYXNlOworY2xhc3MgUGFn
ZUxvYWRDbGllbnRFZmw7CitjbGFzcyBQYWdlUG9saWN5Q2xpZW50RWZsOworY2xhc3MgUGFnZVVJ
Q2xpZW50RWZsOworY2xhc3MgV2ViQ29udGV4dE1lbnVJdGVtRGF0YTsKK2NsYXNzIFdlYkNvbnRl
eHRNZW51UHJveHlFZmw7CitjbGFzcyBXZWJQYWdlR3JvdXA7CitjbGFzcyBXZWJQYWdlUHJveHk7
CitjbGFzcyBXZWJQb3B1cEl0ZW07CitjbGFzcyBXZWJQb3B1cE1lbnVQcm94eUVmbDsKKworI2lm
IEVOQUJMRShWSUJSQVRJT04pCitjbGFzcyBWaWJyYXRpb25DbGllbnRFZmw7CisjZW5kaWYKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK2NsYXNzIExheWVyVHJlZVJlbmRlcmVyOwor
I2VuZGlmCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsK
K2NsYXNzIENvbG9yOworY2xhc3MgQ3Vyc29yOworY2xhc3MgSW50U2l6ZTsKK30KKworY2xhc3Mg
RXdrQ29udGV4dDsKK2NsYXNzIEV3a0JhY2tGb3J3YXJkTGlzdDsKK2NsYXNzIEV3a0NvbG9yUGlj
a2VyOworY2xhc3MgRXdrQ29udGV4dE1lbnU7CitjbGFzcyBFd2tQb3B1cE1lbnU7CitjbGFzcyBF
d2tTZXR0aW5nczsKK2NsYXNzIEV3a1dpbmRvd0ZlYXR1cmVzOworCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29udGV4dCBFdmFzX0dM
X0NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2YXNfR0xfU3VyZmFj
ZTsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3
X1NtYXJ0X0RhdGE7CisKK2NsYXNzIEV3a1ZpZXcgeworcHVibGljOgorCisgICAgZW51bSBWaWV3
QmVoYXZpb3IgeworICAgICAgICBMZWdhY3lCZWhhdmlvciwKKyAgICAgICAgRGVmYXVsdEJlaGF2
aW9yCisgICAgfTsKKyAgICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3
a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBhZ2VH
cm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICB+RXdrVmlldygpOworCisgICAgc3RhdGljIEV3a1Zp
ZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKKyAgICBFdmFzX09i
amVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorCisgICAgV0tQYWdlUmVmIHdr
UGFnZSgpOworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdl
UHJveHkuZ2V0KCk7IH0KKyAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0LmdldCgpOyB9CisgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdzKCkgeyByZXR1cm4gbV9z
ZXR0aW5ncy5nZXQoKTsgfQorICAgIEV3a0JhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0
KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KKyAgICBFd2tXaW5kb3dGZWF0
dXJlcyogd2luZG93RmVhdHVyZXMoKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNv
bnN0OworICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Q7CisgICAgYm9vbCBpc1Zpc2libGUoKSBj
b25zdDsKKworICAgIHZvaWQgc2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpOworICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0OworICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtVG9TY3JlZW4oKSBjb25zdDsKKworICAgIGNvbnN0IGNoYXIqIHVy
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgY29uc3QgY2hhciogZmF2aWNvblVSTCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmF2aWNvblVSTDsgfQorICAgIGNvbnN0IGNoYXIqIHRpdGxlKCkg
Y29uc3Q7CisgICAgV2ViS2l0OjpJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29u
dGV4dCgpOworCisgICAgY29uc3QgY2hhciogdGhlbWVQYXRoKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRUaGVtZVBhdGgoY29uc3QgY2hhciogdGhlbWUpOworICAgIGNvbnN0IGNoYXIqIGN1c3RvbVRl
eHRFbmNvZGluZ05hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1c3RvbVRleHRFbmNvZGluZ05h
bWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZyk7CisKKyAgICBib29sIG1vdXNlRXZlbnRzRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW91c2VFdmVudHNFbmFibGVkOyB9CisgICAgdm9pZCBzZXRN
b3VzZUV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgIGJvb2wgdG91Y2hFdmVudHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaEV2
ZW50c0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFRvdWNoRXZlbnRzRW5hYmxlZChib29sIGVuYWJs
ZWQpOworI2VuZGlmCisKKyAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3Im
IGN1cnNvcik7CisgICAgdm9pZCBzZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplKTsKKworICAgIHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KCkpOworCisgICAgc3RhdGljIHZvaWQg
YWRkVG9QYWdlVmlld01hcChFd2tWaWV3KiB2aWV3KTsKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVG
cm9tUGFnZVZpZXdNYXAoRXdrVmlldyogdmlldyk7CisgICAgc3RhdGljIGNvbnN0IEV2YXNfT2Jq
ZWN0KiB2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZik7CisKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIGV4
aXRGdWxsU2NyZWVuKCk7CisjZW5kaWYKKworICAgIFdLUmVjdCB3aW5kb3dHZW9tZXRyeSgpIGNv
bnN0OworICAgIHZvaWQgc2V0V2luZG93R2VvbWV0cnkoY29uc3QgV0tSZWN0Jik7CisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgYm9vbCBjcmVhdGVHTFN1cmZhY2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUpOworICAgIGJvb2wgZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSgpOworICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCk7CisgICAgdm9pZCBzZXROZWVkc1N1cmZhY2VSZXNpemUoKSB7IG1fcGVuZGluZ1N1cmZh
Y2VSZXNpemUgPSB0cnVlOyB9CisjZW5kaWYKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQorICAgIHZvaWQgcmVxdWVzdENvbG9yUGlja2VyKFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5l
clJlZiBsaXN0ZW5lciwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2b2lkIGRpc21pc3ND
b2xvclBpY2tlcigpOworI2VuZGlmCisKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShQYXNz
UmVmUHRyPEV3a1VybFJlcXVlc3Q+LCBXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRv
d0ZlYXR1cmVzKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RQb3B1cE1l
bnUoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBW
ZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBzZWxlY3RlZEluZGV4
KTsKKyAgICB2b2lkIGNsb3NlUG9wdXBNZW51KCk7CisgICAgCisgICAgdm9pZCBzaG93Q29udGV4
dE1lbnUoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5RWZsKiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW1E
YXRhPiYgaXRlbXMpOworICAgIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7CisKKyAgICB2b2lkIHVw
ZGF0ZVRleHRJbnB1dFN0YXRlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RKU0FsZXJ0UG9wdXAoY29u
c3QgV0tFaW5hU2hhcmVkU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBib29sIHJlcXVlc3RKU0NvbmZp
cm1Qb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UpOworICAgIFdLRWluYVNo
YXJlZFN0cmluZyByZXF1ZXN0SlNQcm9tcHRQb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmluZyYgZGVmYXVsdFZhbHVlKTsKKworICAg
IHRlbXBsYXRlPEV3a1ZpZXdDYWxsYmFja3M6OkNhbGxiYWNrVHlwZSBjYWxsYmFja1R5cGU+Cisg
ICAgRXdrVmlld0NhbGxiYWNrczo6Q2FsbEJhY2s8Y2FsbGJhY2tUeXBlPiBzbWFydENhbGxiYWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBFd2tWaWV3Q2FsbGJhY2tzOjpDYWxsQmFj
azxjYWxsYmFja1R5cGU+KG1fZXZhc09iamVjdCk7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9u
ZyBsb25nIGluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VO
YW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVu
dFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25lZCBs
b25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3Rl
ZFVzYWdlKTsKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIFdlYktpdDo6UGFn
ZUNsaWVudEJhc2UqIHBhZ2VDbGllbnQoKSB7IHJldHVybiBtX3BhZ2VDbGllbnQuZ2V0KCk7IH0K
KworICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1fcGFn
ZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KKyAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQorCisgICAgdm9pZCBzZXRQYWdl
UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wYWdlUG9z
aXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFnZVBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUG9zaXRpb247IH0KKyNlbmRpZgorCisgICAg
Ly8gRklYTUU6IG5lZWRzIHJlZmFjdG9yaW5nIChzcGxpdCBjYWxsYmFjayBpbnZva2UpCisgICAg
dm9pZCBpbmZvcm1VUkxDaGFuZ2UoKTsKKworICAgIGJvb2wgaXNIYXJkd2FyZUFjY2VsZXJhdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQ7IH0KKyAgICB2b2lkIHNl
dERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVu
YWJsZTsgfQorCisgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgp
OworCitwcml2YXRlOgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBFdmFz
X0dMX0NvbnRleHQqIGV2YXNHTENvbnRleHQoKSB7IHJldHVybiBtX2V2YXNHTENvbnRleHQgPyBt
X2V2YXNHTENvbnRleHQtPmNvbnRleHQoKSA6IDA7IH0KKyAgICBFdmFzX0dMX1N1cmZhY2UqIGV2
YXNHTFN1cmZhY2UoKSB7IHJldHVybiBtX2V2YXNHTFN1cmZhY2UgPyBtX2V2YXNHTFN1cmZhY2Ut
PnN1cmZhY2UoKSA6IDA7IH0KKyNlbmRpZgorCisgICAgaW5saW5lIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSgpIGNvbnN0OworICAgIHZvaWQgZGlzcGxheVRpbWVyRmlyZWQoV2ViQ29y
ZTo6VGltZXI8RXdrVmlldz4qKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICBXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpOworI2VuZGlm
CisKKyAgICB2b2lkIGluZm9ybUljb25DaGFuZ2UoKTsKKworICAgIHN0YXRpYyB2b2lkIG9uTW91
c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7
CisgICAgc3RhdGljIHZvaWQgb25Nb3VzZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVj
dCosIHZvaWQqIGV2ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgb25Nb3VzZU1vdmUodm9pZCog
ZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgZmVlZFRvdWNoRXZlbnRzKEV3a19Ub3VjaF9FdmVudF9U
eXBlIHR5cGUpOworICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hEb3duKHZvaWQqIC8qIGRhdGEgKi8s
IEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50
SW5mbyAqLyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaFVwKHZvaWQqIC8qIGRhdGEgKi8sIEV2
YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2ZW50SW5m
byAqLyk7CisgICAgc3RhdGljIHZvaWQgb25Ub3VjaE1vdmUodm9pZCogLyogZGF0YSAqLywgRXZh
cyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZv
ICovKTsKKyNlbmRpZgorICAgIHN0YXRpYyB2b2lkIG9uRmF2aWNvbkNoYW5nZWQoY29uc3QgY2hh
ciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKTsKKworICAgIC8vIE5vdGUsIGluaXRpYWxpemF0
aW9uIG9yZGVyIG1hdHRlcnMuCisgICAgRXZhc19PYmplY3QqIG1fZXZhc09iamVjdDsKKyAgICBS
ZWZQdHI8RXdrQ29udGV4dD4gbV9jb250ZXh0OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICBPd25QdHI8RXZhc19HTD4gbV9ldmFzR0w7CisgICAgT3duUHRyPFdlYktpdDo6
RXZhc0dMQ29udGV4dD4gbV9ldmFzR0xDb250ZXh0OworICAgIE93blB0cjxXZWJLaXQ6OkV2YXNH
TFN1cmZhY2U+IG1fZXZhc0dMU3VyZmFjZTsKKyAgICBib29sIG1fcGVuZGluZ1N1cmZhY2VSZXNp
emU7CisjZW5kaWYKKyAgICBPd25QdHI8V2ViS2l0OjpQYWdlQ2xpZW50QmFzZT4gbV9wYWdlQ2xp
ZW50OworICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gbV9wYWdlUHJveHk7CisgICAg
T3duUHRyPFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CisgICAg
T3duUHRyPFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50Owor
ICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CisgICAg
T3duUHRyPFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRFZmw+IG1fY29udGV4dE1lbnVDbGllbnQ7
CisgICAgT3duUHRyPFdlYktpdDo6RmluZENsaWVudEVmbD4gbV9maW5kQ2xpZW50OworICAgIE93
blB0cjxXZWJLaXQ6OkZvcm1DbGllbnRFZmw+IG1fZm9ybUNsaWVudDsKKyNpZiBFTkFCTEUoVklC
UkFUSU9OKQorICAgIE93blB0cjxXZWJLaXQ6OlZpYnJhdGlvbkNsaWVudEVmbD4gbV92aWJyYXRp
b25DbGllbnQ7CisjZW5kaWYKKyAgICBPd25QdHI8RXdrQmFja0ZvcndhcmRMaXN0PiBtX2JhY2tG
b3J3YXJkTGlzdDsKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBmbG9hdCBtX3Bh
Z2VTY2FsZUZhY3RvcjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fcGFnZVBvc2l0aW9uOwor
I2VuZGlmCisgICAgT3duUHRyPEV3a1NldHRpbmdzPiBtX3NldHRpbmdzOworICAgIFJlZlB0cjxF
d2tXaW5kb3dGZWF0dXJlcz4gbV93aW5kb3dGZWF0dXJlczsKKyAgICBjb25zdCB2b2lkKiBtX2N1
cnNvcklkZW50aWZpZXI7IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywgZG8gbm90IGZyZWUgaXQuCisg
ICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fZmF2aWNvblVSTDsKKyAgICBXS0VpbmFTaGFyZWRTdHJp
bmcgbV91cmw7CisgICAgbXV0YWJsZSBXS0VpbmFTaGFyZWRTdHJpbmcgbV90aXRsZTsKKyAgICBX
S0VpbmFTaGFyZWRTdHJpbmcgbV90aGVtZTsKKyAgICBtdXRhYmxlIFdLRWluYVNoYXJlZFN0cmlu
ZyBtX2N1c3RvbUVuY29kaW5nOworICAgIGJvb2wgbV9tb3VzZUV2ZW50c0VuYWJsZWQ7CisjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBib29sIG1fdG91Y2hFdmVudHNFbmFibGVkOworI2Vu
ZGlmCisgICAgV2ViQ29yZTo6VGltZXI8RXdrVmlldz4gbV9kaXNwbGF5VGltZXI7CisgICAgT3du
UHRyPEV3a0NvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OworICAgIE93blB0cjxFd2tQb3B1cE1l
bnU+IG1fcG9wdXBNZW51OworICAgIE93blB0cjxXZWJLaXQ6OklucHV0TWV0aG9kQ29udGV4dEVm
bD4gbV9pbnB1dE1ldGhvZENvbnRleHQ7CisjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCisg
ICAgT3duUHRyPEV3a0NvbG9yUGlja2VyPiBtX2NvbG9yUGlja2VyOworI2VuZGlmCisgICAgYm9v
bCBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZDsKKyAgICBib29sIG1fc2V0RHJhd3NCYWNrZ3JvdW5k
OworfTsKKworI2VuZGlmIC8vIEV3a1ZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3NWZiMWQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXdJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNTcgKzAsMCBAQAotLyoKLSAg
IENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCi0KLSNpbmNsdWRlICJDb250
ZXh0TWVudUNsaWVudEVmbC5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5LmgiCi0jaW5jbHVkZSAiRWZsU2NyZWVuVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRmluZENs
aWVudEVmbC5oIgotI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKLSNpbmNsdWRlICJJbnB1dE1l
dGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgotI2luY2x1
ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgi
Ci0jaW5jbHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIKLSNpbmNsdWRlICJQYWdlTG9hZENs
aWVudEVmbC5oIgotI2luY2x1ZGUgIlBhZ2VQb2xpY3lDbGllbnRFZmwuaCIKLSNpbmNsdWRlICJQ
YWdlVUlDbGllbnRFZmwuaCIKLSNpbmNsdWRlICJTbmFwc2hvdEltYWdlR0wuaCIKLSNpbmNsdWRl
ICJXS0RpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCi0jaW5jbHVkZSAiV0tO
dW1iZXIuaCIKLSNpbmNsdWRlICJXS1N0cmluZy5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIK
LSNpbmNsdWRlICJXZWJJbWFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5RWZsLmgiCi0j
aW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xp
c3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19jb2xvcl9waWNrZXJfcHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgImV3a19jb250ZXh0X21lbnVfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19jb250ZXh0
X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCi0j
aW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbV9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3Bv
cHVwX21lbnVfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5jbHVkZSAi
ZXdrX3NlY3VyaXR5X29yaWdpbl9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3NldHRpbmdzX3By
aXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdmlldy5oIgotI2luY2x1ZGUgImV3a192aWV3X3ByaXZh
dGUuaCIKLSNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaCIKLSNpbmNsdWRl
IDxFY29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RWNvcmVfWC5oPgotI2luY2x1ZGUgPEVkamUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9DdXJzb3IuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgotCi0jaWYgRU5B
QkxFKFZJQlJBVElPTikKLSNpbmNsdWRlICJWaWJyYXRpb25DbGllbnRFZmwuaCIKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHkuaCIKLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
I2luY2x1ZGUgPEV2YXNfR0wuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgRXdrVmlld0Nh
bGxiYWNrczsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKLQotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6ZSA9IDE2OwotCi10eXBlZGVm
IEhhc2hNYXA8V0tQYWdlUmVmLCBFdmFzX09iamVjdCo+IFBhZ2VWaWV3TWFwOwotCi1zdGF0aWMg
aW5saW5lIFBhZ2VWaWV3TWFwJiBwYWdlVmlld01hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChQYWdlVmlld01hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdm9pZCBF
d2tWaWV3SW1wbDo6YWRkVG9QYWdlVmlld01hcChFd2tWaWV3SW1wbCogdmlld0ltcGwpCi17Ci0g
ICAgUGFnZVZpZXdNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBwYWdlVmlld01hcCgpLmFkZCh2aWV3
SW1wbC0+d2tQYWdlKCksIHZpZXdJbXBsLT52aWV3KCkpOwotICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnJlbW92ZUZy
b21QYWdlVmlld01hcChFd2tWaWV3SW1wbCogdmlld0ltcGwpCi17Ci0gICAgQVNTRVJUKHBhZ2VW
aWV3TWFwKCkuY29udGFpbnModmlld0ltcGwtPndrUGFnZSgpKSk7Ci0gICAgcGFnZVZpZXdNYXAo
KS5yZW1vdmUodmlld0ltcGwtPndrUGFnZSgpKTsKLX0KLQotY29uc3QgRXZhc19PYmplY3QqIEV3
a1ZpZXdJbXBsOjp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZiBwYWdlKQotewot
ICAgIEFTU0VSVChwYWdlKTsKLQotICAgIHJldHVybiBwYWdlVmlld01hcCgpLmdldChwYWdlKTsK
LX0KLQotRXdrVmlld0ltcGw6OkV3a1ZpZXdJbXBsKEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3Jv
dXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKLSAgICA6IG1fdmlldyh2aWV3KQotICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICwg
bV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKLSNlbmRpZgotICAgICwgbV9wYWdlQ2xpZW50
KGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3Jl
YXRlKHRoaXMpIDogUGFnZUNsaWVudExlZ2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1f
cGFnZVByb3h5KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNs
aWVudC5nZXQoKSwgcGFnZUdyb3VwLmdldCgpKSkKLSAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFn
ZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQ
YWdlUG9saWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3BhZ2VVSUNsaWVudChQ
YWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fY29udGV4dE1lbnVDbGllbnQo
Q29udGV4dE1lbnVDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fZmluZENsaWVudChG
aW5kQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2Zvcm1DbGllbnQoRm9ybUNsaWVu
dEVmbDo6Y3JlYXRlKHRoaXMpKQotI2lmIEVOQUJMRShWSUJSQVRJT04pCi0gICAgLCBtX3ZpYnJh
dGlvbkNsaWVudChWaWJyYXRpb25DbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKLSNlbmRpZgotICAg
ICwgbV9iYWNrRm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUodG9BUEkobV9w
YWdlUHJveHktPmJhY2tGb3J3YXJkTGlzdCgpKSkpCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCi0gICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQotI2VuZGlmCi0gICAgLCBtX3NldHRpbmdz
KEV3a1NldHRpbmdzOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2N1cnNvcklkZW50aWZpZXIoMCkK
LSAgICAsIG1fbW91c2VFdmVudHNFbmFibGVkKGZhbHNlKQotI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCi0gICAgLCBtX3RvdWNoRXZlbnRzRW5hYmxlZChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9k
aXNwbGF5VGltZXIodGhpcywgJkV3a1ZpZXdJbXBsOjpkaXNwbGF5VGltZXJGaXJlZCkKLSAgICAs
IG1faW5wdXRNZXRob2RDb250ZXh0KElucHV0TWV0aG9kQ29udGV4dEVmbDo6Y3JlYXRlKHRoaXMs
IHNtYXJ0RGF0YSgpLT5iYXNlLmV2YXMpKQotICAgICwgbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQo
dHJ1ZSkKLSAgICAsIG1fc2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNlKQotewotICAgIEFTU0VSVCht
X3ZpZXcpOwotICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIEFTU0VSVChtX3BhZ2VQcm94eSk7
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VH
cm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0
cnVlKTsKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZv
cmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwotI2lmIEVOQUJMRShXRUJHTCkKLSAgICBtX3BhZ2VQ
cm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldFdlYkdMRW5hYmxlZCh0cnVlKTsK
LSNlbmRpZgotICAgIGlmIChiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpCi0gICAgICAgIG1f
cGFnZVByb3h5LT5zZXRVc2VGaXhlZExheW91dCh0cnVlKTsKLSNlbmRpZgotCi0gICAgbV9wYWdl
UHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
Ci0gICAgbV9wYWdlUHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcobV92aWV3
KTsKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZ1bGxT
Y3JlZW5FbmFibGVkKHRydWUpOwotI2VuZGlmCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICBt
X3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldFdlYkF1ZGlvRW5hYmxl
ZCh0cnVlKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJl
bmNlcygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7Ci0KLSAg
ICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1bHQKLSAgICBzZXRNb3VzZUV2ZW50c0Vu
YWJsZWQodHJ1ZSk7Ci0KLSAgICAvLyBMaXN0ZW4gZm9yIGZhdmljb24gY2hhbmdlcy4KLSAgICBF
d2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFi
YXNlKCk7Ci0gICAgQVNTRVJUKGljb25EYXRhYmFzZSk7Ci0KLSAgICBpY29uRGF0YWJhc2UtPndh
dGNoQ2hhbmdlcyhJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKEV3a1ZpZXdJbXBsOjpvbkZhdmljb25D
aGFuZ2VkLCB0aGlzKSk7Ci0KLSAgICBFd2tWaWV3SW1wbDo6YWRkVG9QYWdlVmlld01hcCh0aGlz
KTsKLX0KLQotRXdrVmlld0ltcGw6On5Fd2tWaWV3SW1wbCgpCi17Ci0gICAgbV9wYWdlUHJveHkt
PmNsb3NlKCk7Ci0KLSAgICAvLyBVbnJlZ2lzdGVyIGljb24gY2hhbmdlIGNhbGxiYWNrLgotICAg
IEV3a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0
YWJhc2UoKTsKLSAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsKLQotICAgIGljb25EYXRhYmFzZS0+
dW53YXRjaENoYW5nZXMoRXdrVmlld0ltcGw6Om9uRmF2aWNvbkNoYW5nZWQpOwotCi0gICAgRXdr
Vmlld0ltcGw6OnJlbW92ZUZyb21QYWdlVmlld01hcCh0aGlzKTsKLX0KLQotRXdrX1ZpZXdfU21h
cnRfRGF0YSogRXdrVmlld0ltcGw6OnNtYXJ0RGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dl
dChtX3ZpZXcpKTsKLX0KLQotRXdrVmlld0ltcGwqIEV3a1ZpZXdJbXBsOjpmcm9tRXZhc09iamVj
dChjb25zdCBFdmFzX09iamVjdCogdmlldykKLXsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQodmlldykpOwotICAgIEFTU0VSVChzZCk7Ci0gICAg
QVNTRVJUKHNkLT5wcml2KTsKLSAgICByZXR1cm4gc2QtPnByaXY7Ci19Ci0KLS8qKgotICogQGlu
dGVybmFsCi0gKiBSZXRyaWV2ZXMgdGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2aWV3Lgot
ICovCi1XS1BhZ2VSZWYgRXdrVmlld0ltcGw6OndrUGFnZSgpCi17Ci0gICAgcmV0dXJuIHRvQVBJ
KG1fcGFnZVByb3h5LmdldCgpKTsKLX0KLQotdm9pZCBFd2tWaWV3SW1wbDo6c2V0Q3Vyc29yKGNv
bnN0IEN1cnNvciYgY3Vyc29yKQotewotICAgIGlmIChjdXJzb3IuaW1hZ2UoKSkgewotICAgICAg
ICAvLyBDdXN0b20gY3Vyc29yLgotICAgICAgICBpZiAoY3Vyc29yLmltYWdlKCkgPT0gbV9jdXJz
b3JJZGVudGlmaWVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fY3Vyc29ySWRl
bnRpZmllciA9IGN1cnNvci5pbWFnZSgpOwotCi0gICAgICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkID0gc21hcnREYXRhKCk7Ci0gICAgICAgIFJlZlB0cjxFdmFzX09iamVjdD4gY3Vyc29yT2Jq
ZWN0ID0gYWRvcHRSZWYoY3Vyc29yLmltYWdlKCktPmdldEV2YXNPYmplY3Qoc2QtPmJhc2UuZXZh
cykpOwotICAgICAgICBpZiAoIWN1cnNvck9iamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAvLyBSZXNpemUgY3Vyc29yLgotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY3Vy
c29yT2JqZWN0LmdldCgpLCBjdXJzb3IuaW1hZ2UoKS0+c2l6ZSgpLndpZHRoKCksIGN1cnNvci5p
bWFnZSgpLT5zaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIEdldCBjdXJzb3IgaG90IHNw
b3QuCi0gICAgICAgIEludFBvaW50IGhvdFNwb3Q7Ci0gICAgICAgIGN1cnNvci5pbWFnZSgpLT5n
ZXRIb3RTcG90KGhvdFNwb3QpOwotCi0gICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVj
b3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgICAgIC8vIGVjb3Jl
X2V2YXMgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHRoZSBjdXJzb3Igb2JqZWN0LgotICAgICAgICBl
Y29yZV9ldmFzX29iamVjdF9jdXJzb3Jfc2V0KGVjb3JlRXZhcywgY3Vyc29yT2JqZWN0LnJlbGVh
c2UoKS5sZWFrUmVmKCksIEVWQVNfTEFZRVJfTUFYLCBob3RTcG90LngoKSwgaG90U3BvdC55KCkp
OwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdGFuZGFyZCBjdXJzb3IuCi0g
ICAgY29uc3QgY2hhciogZ3JvdXAgPSBjdXJzb3IucGxhdGZvcm1DdXJzb3IoKTsKLSAgICBpZiAo
IWdyb3VwIHx8IGdyb3VwID09IG1fY3Vyc29ySWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jdXJzb3JJZGVudGlmaWVyID0gZ3JvdXA7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBSZWZQdHI8RXZhc19PYmplY3Q+IGN1cnNvck9iamVj
dCA9IGFkb3B0UmVmKGVkamVfb2JqZWN0X2FkZChzZC0+YmFzZS5ldmFzKSk7Ci0KLSAgICBFY29y
ZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNkLT5iYXNlLmV2
YXMpOwotICAgIGlmICghbV90aGVtZSB8fCAhZWRqZV9vYmplY3RfZmlsZV9zZXQoY3Vyc29yT2Jq
ZWN0LmdldCgpLCBtX3RoZW1lLCBncm91cCkpIHsKLSAgICAgICAgZWNvcmVfZXZhc19vYmplY3Rf
Y3Vyc29yX3NldChlY29yZUV2YXMsIDAsIDAsIDAsIDApOwotI2lmZGVmIEhBVkVfRUNPUkVfWAot
ICAgICAgICBpZiAoV2ViQ29yZTo6aXNVc2luZ0Vjb3JlWChzZC0+YmFzZS5ldmFzKSkKLSAgICAg
ICAgICAgIFdlYkNvcmU6OmFwcGx5RmFsbGJhY2tDdXJzb3IoZWNvcmVFdmFzLCBncm91cCk7Ci0j
ZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNldCBjdXJzb3Igc2l6ZS4K
LSAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7Ci0gICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5f
Z2V0KGN1cnNvck9iamVjdC5nZXQoKSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBpZiAod2lkdGgg
PD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5fY2FsYyhj
dXJzb3JPYmplY3QuZ2V0KCksICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAg
fHwgaGVpZ2h0IDw9IDApIHsKLSAgICAgICAgd2lkdGggPSBkZWZhdWx0Q3Vyc29yU2l6ZTsKLSAg
ICAgICAgaGVpZ2h0ID0gZGVmYXVsdEN1cnNvclNpemU7Ci0gICAgfQotICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShjdXJzb3JPYmplY3QuZ2V0KCksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gR2V0
IGN1cnNvciBob3Qgc3BvdC4KLSAgICBjb25zdCBjaGFyKiBkYXRhOwotICAgIGludCBob3RzcG90
WCA9IDA7Ci0gICAgZGF0YSA9IGVkamVfb2JqZWN0X2RhdGFfZ2V0KGN1cnNvck9iamVjdC5nZXQo
KSwgImhvdC54Iik7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGhvdHNwb3RYID0gYXRvaShkYXRh
KTsKLQotICAgIGludCBob3RzcG90WSA9IDA7Ci0gICAgZGF0YSA9IGVkamVfb2JqZWN0X2RhdGFf
Z2V0KGN1cnNvck9iamVjdC5nZXQoKSwgImhvdC55Iik7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAg
IGhvdHNwb3RZID0gYXRvaShkYXRhKTsKLQotICAgIC8vIGVjb3JlX2V2YXMgdGFrZXMgY2FyZSBv
ZiBmcmVlaW5nIHRoZSBjdXJzb3Igb2JqZWN0LgotICAgIGVjb3JlX2V2YXNfb2JqZWN0X2N1cnNv
cl9zZXQoZWNvcmVFdmFzLCBjdXJzb3JPYmplY3QucmVsZWFzZSgpLmxlYWtSZWYoKSwgRVZBU19M
QVlFUl9NQVgsIGhvdHNwb3RYLCBob3RzcG90WSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnNl
dERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQotewotICAgIHBhZ2UoKS0+c2V0SW50cmlu
c2ljRGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGUpOwotfQotCi1mbG9hdCBFd2tWaWV3SW1wbDo6ZGV2
aWNlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2VQcm94eS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEV3a1ZpZXdJbXBsOjp0cmFuc2Zv
cm1Gcm9tU2NlbmUoKSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0K
LSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkg
Ym90aCBwYWdlIGFuZCBkZXZpY2Ugc2NhbGUgZmFjdG9ycy4KLSAgICB0cmFuc2Zvcm0uc2NhbGUo
MSAvIHBhZ2VTY2FsZUZhY3RvcigpKTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoMSAvIGRldmljZVNj
YWxlRmFjdG9yKCkpOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUocGFnZVBvc2l0aW9uKCkueCgp
LCBwYWdlUG9zaXRpb24oKS55KCkpOwotI2VuZGlmCi0KLSAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXNkLT52aWV3Lngs
IC1zZC0+dmlldy55KTsKLQotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KLUFmZmluZVRyYW5z
Zm9ybSBFd2tWaWV3SW1wbDo6dHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHRyYW5zZm9ybUZyb21TY2VuZSgpLmludmVyc2UoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEV3
a1ZpZXdJbXBsOjp0cmFuc2Zvcm1Ub1NjcmVlbigpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybTsKLQotICAgIGludCB3aW5kb3dHbG9iYWxYID0gMDsKLSAgICBpbnQgd2lu
ZG93R2xvYmFsWSA9IDA7Ci0KLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0
YSgpOwotCi0jaWZkZWYgSEFWRV9FQ09SRV9YCi0gICAgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKLQotICAgIEVjb3JlX1hf
V2luZG93IHdpbmRvdzsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgd2lu
ZG93ID0gZWNvcmVfZXZhc19nbF94MTFfd2luZG93X2dldChlY29yZUV2YXMpOwotICAgIC8vIEZh
bGxiYWNrIHRvIHNvZnR3YXJlIG1vZGUgaWYgbmVjZXNzYXJ5LgotICAgIGlmICghd2luZG93KQot
I2VuZGlmCi0gICAgd2luZG93ID0gZWNvcmVfZXZhc19zb2Z0d2FyZV94MTFfd2luZG93X2dldChl
Y29yZUV2YXMpOyAvLyBSZXR1cm5zIDAgaWYgbm9uZS4KLQotICAgIGludCB4LCB5OyAvLyB4LCB5
IGFyZSByZWxhdGl2ZSB0byBwYXJlbnQgKGluIGEgcmVwYXJlbnRpbmcgd2luZG93IG1hbmFnZXIp
LgotICAgIHdoaWxlICh3aW5kb3cpIHsKLSAgICAgICAgZWNvcmVfeF93aW5kb3dfZ2VvbWV0cnlf
Z2V0KHdpbmRvdywgJngsICZ5LCAwLCAwKTsKLSAgICAgICAgd2luZG93R2xvYmFsWCArPSB4Owot
ICAgICAgICB3aW5kb3dHbG9iYWxZICs9IHk7Ci0gICAgICAgIHdpbmRvdyA9IGVjb3JlX3hfd2lu
ZG93X3BhcmVudF9nZXQod2luZG93KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHRyYW5zZm9ybS50
cmFuc2xhdGUoLXNkLT52aWV3LngsIC1zZC0+dmlldy55KTsKLSAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKHdpbmRvd0dsb2JhbFgsIHdpbmRvd0dsb2JhbFkpOwotCi0gICAgcmV0dXJuIHRyYW5zZm9y
bTsKLX0KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLUxheWVyVHJlZVJlbmRlcmVy
KiBFd2tWaWV3SW1wbDo6bGF5ZXJUcmVlUmVuZGVyZXIoKQotewotICAgIERyYXdpbmdBcmVhUHJv
eHkqIGRyYXdpbmdBcmVhID0gcGFnZSgpLT5kcmF3aW5nQXJlYSgpOwotICAgIGlmICghZHJhd2lu
Z0FyZWEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSogY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBkcmF3aW5nQXJl
YS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICBpZiAoIWNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKLX0KLSNlbmRp
ZgotCi12b2lkIEV3a1ZpZXdJbXBsOjpkaXNwbGF5VGltZXJGaXJlZChUaW1lcjxFd2tWaWV3SW1w
bD4qKQotewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotCi0gICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNp
emUpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgR0wgc3VyZmFjZSBoZXJlIHNvIHRoYXQgRXZhcyBo
YXMgbm8gY2hhbmNlIG9mIHBhaW50aW5nIHRvIGFuIGVtcHR5IEdMIHN1cmZhY2UuCi0gICAgICAg
IGNyZWF0ZUdMU3VyZmFjZShJbnRTaXplKHNkLT52aWV3LncsIHNkLT52aWV3LmgpKTsKLSAgICAg
ICAgaWYgKCFtX2V2YXNHTFN1cmZhY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
bV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IGZhbHNlOwotICAgIH0gZWxzZQotICAgICAgICBldmFz
X2dsX21ha2VfY3VycmVudChtX2V2YXNHTC5nZXQoKSwgZXZhc0dMU3VyZmFjZSgpLCBldmFzR0xD
b250ZXh0KCkpOwotCi0gICAgLy8gV2UgYXJlIHN1cHBvc2VkIHRvIGNsaXAgdG8gdGhlIGFjdHVh
bCB2aWV3cG9ydCwgbm90aGluZyBsZXNzLgotICAgIEludFJlY3Qgdmlld3BvcnQoc2QtPnZpZXcu
eCwgc2QtPnZpZXcueSwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7Ci0KLSAgICBMYXllclRyZWVS
ZW5kZXJlciogcmVuZGVyZXIgPSBsYXllclRyZWVSZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1ZSk7Ci0g
ICAgcmVuZGVyZXItPnNldERyYXdzQmFja2dyb3VuZChtX3NldERyYXdzQmFja2dyb3VuZCk7Ci0g
ICAgaWYgKG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5wYWlu
dFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpLCAvKiBvcGFjaXR5ICovIDEsIHZpZXdwb3J0KTsKLSAgICAgICAgLy8gc2QtPmltYWdl
IGlzIHRpZWQgdG8gYSBuYXRpdmUgc3VyZmFjZS4gVGhlIG5hdGl2ZSBzdXJmYWNlIGlzIGluIHRo
ZSBwYXJlbnQncyBjb29yZGluYXRlcywKLSAgICAgICAgLy8gc28gd2UgbmVlZCB0byBhY2NvdW50
IGZvciB0aGUgdmlld3BvcnQgcG9zaXRpb24gd2hlbiBjYWxsaW5nIGV2YXNfb2JqZWN0X2ltYWdl
X2RhdGFfdXBkYXRlX2FkZC4KLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVf
YWRkKHNkLT5pbWFnZSwgdmlld3BvcnQueCgpLCB2aWV3cG9ydC55KCksIHZpZXdwb3J0LndpZHRo
KCksIHZpZXdwb3J0LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBzdXJmYWNlID0gY3JlYXRlU3VyZmFjZUZvckltYWdlKHNkLT5pbWFnZSk7
Ci0gICAgICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBS
ZWZQdHI8Y2Fpcm9fdD4gZ3JhcGhpY3NDb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1
cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGdyYXBoaWNzQ29udGV4dC5n
ZXQoKSwgLSBwYWdlUG9zaXRpb24oKS54KCksIC0gcGFnZVBvc2l0aW9uKCkueSgpKTsKLSAgICAg
ICAgY2Fpcm9fc2NhbGUoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCBwYWdlU2NhbGVGYWN0b3IoKSwg
cGFnZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBjYWlyb19zY2FsZShncmFwaGljc0NvbnRleHQu
Z2V0KCksIGRldmljZVNjYWxlRmFjdG9yKCksIGRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAg
ICByZW5kZXJlci0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQuZ2V0KCkp
OwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2QtPmltYWdlLCAw
LCAwLCB2aWV3cG9ydC53aWR0aCgpLCB2aWV3cG9ydC5oZWlnaHQoKSk7Ci0gICAgfQotI2VuZGlm
Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnVwZGF0ZShjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotICAgIC8vIENvb3JkaW5hdGVkIGdyYXBoaWNlcyBuZWVkcyB0byBz
Y2hlZHVsZSBhbiBmdWxsIHVwZGF0ZSwgbm90Ci0gICAgLy8gcmVwYWludGluZyBvZiBhIHJlZ2lv
bi4gVXBkYXRlIGluIHRoZSBldmVudCBsb29wLgotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLQot
ICAgIC8vIEd1YXJkIGZvciB6ZXJvIHNpemVkIHZpZXdwb3J0LgotICAgIGlmICghKHNkLT52aWV3
LncgJiYgc2QtPnZpZXcuaCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9kaXNwbGF5
VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDAp
OwotI2Vsc2UKLSAgICBpZiAoIXNkLT5pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNkLT5pbWFnZSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCi0vKioKLSAqIEBpbnRlcm5hbAotICogQ2FsbHMgZnVsbHNjcmVl
bl9lbnRlciBjYWxsYmFjayBvciBmYWxscyBiYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3IgYW5kIGVu
YWJsZXMgZnVsbHNjcmVlbiBtb2RlLgotICovCi12b2lkIEV3a1ZpZXdJbXBsOjplbnRlckZ1bGxT
Y3JlZW4oKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0K
LSAgICBSZWZQdHI8RXdrU2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IEV3a1NlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIFN0cmluZzo6ZnJvbVVURjgobV91cmwpKSk7
Ci0KLSAgICBpZiAoIXNkLT5hcGktPmZ1bGxzY3JlZW5fZW50ZXIgfHwgIXNkLT5hcGktPmZ1bGxz
Y3JlZW5fZW50ZXIoc2QsIG9yaWdpbi5nZXQoKSkpIHsKLSAgICAgICAgRWNvcmVfRXZhcyogZWNv
cmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKLSAgICAg
ICAgZWNvcmVfZXZhc19mdWxsc2NyZWVuX3NldChlY29yZUV2YXMsIHRydWUpOwotICAgIH0KLX0K
LQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIENhbGxzIGZ1bGxzY3JlZW5fZXhpdCBjYWxsYmFjayBv
ciBmYWxscyBiYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3IgYW5kIGRpc2FibGVzIGZ1bGxzY3JlZW4g
bW9kZS4KLSAqLwotdm9pZCBFd2tWaWV3SW1wbDo6ZXhpdEZ1bGxTY3JlZW4oKQotewotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0KLSAgICBpZiAoIXNkLT5hcGkt
PmZ1bGxzY3JlZW5fZXhpdCB8fCAhc2QtPmFwaS0+ZnVsbHNjcmVlbl9leGl0KHNkKSkgewotICAg
ICAgICBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KHNk
LT5iYXNlLmV2YXMpOwotICAgICAgICBlY29yZV9ldmFzX2Z1bGxzY3JlZW5fc2V0KGVjb3JlRXZh
cywgZmFsc2UpOwotICAgIH0KLX0KLSNlbmRpZgotCi1XS1JlY3QgRXdrVmlld0ltcGw6OndpbmRv
d0dlb21ldHJ5KCkgY29uc3QKLXsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7
Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLQotICAgIGlmICgh
c2QtPmFwaS0+d2luZG93X2dlb21ldHJ5X2dldCB8fCAhc2QtPmFwaS0+d2luZG93X2dlb21ldHJ5
X2dldChzZCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIEVjb3JlX0V2YXMq
IGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChzZC0+YmFzZS5ldmFzKTsKLSAgICAgICAg
ZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChlZSwgJngsICZ5LCAmd2lkdGgsICZoZWln
aHQpOwotICAgIH0KLQotICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotfQotCi12b2lkIEV3a1ZpZXdJbXBsOjpzZXRXaW5kb3dHZW9tZXRyeShjb25zdCBXS1JlY3Qm
IHJlY3QpCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLQot
ICAgIGlmICghc2QtPmFwaS0+d2luZG93X2dlb21ldHJ5X3NldCB8fCAhc2QtPmFwaS0+d2luZG93
X2dlb21ldHJ5X3NldChzZCwgcmVjdC5vcmlnaW4ueCwgcmVjdC5vcmlnaW4ueSwgcmVjdC5zaXpl
LndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KSkgewotICAgICAgICBFY29yZV9FdmFzKiBlZSA9IGVj
b3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgICAgIGVjb3JlX2V2
YXNfbW92ZV9yZXNpemUoZWUsIHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6
ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIEV3a1ZpZXdJbXBs
OjpzZXRJbWFnZURhdGEodm9pZCogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQotewot
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0gICAgaWYgKCFpbWFn
ZURhdGEgfHwgIXNkLT5pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19vYmplY3Rf
cmVzaXplKHNkLT5pbWFnZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICBldmFz
X29iamVjdF9pbWFnZV9zaXplX3NldChzZC0+aW1hZ2UsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9jb3B5X3NldChzZC0+aW1hZ2UsIGlt
YWdlRGF0YSk7Ci19Ci0KLUludFNpemUgRXdrVmlld0ltcGw6OnNpemUoKSBjb25zdAotewotICAg
IGludCB3aWR0aCwgaGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChtX3ZpZXcs
IDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdo
dCk7Ci19Ci0KLWJvb2wgRXdrVmlld0ltcGw6OmlzRm9jdXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGV2YXNfb2JqZWN0X2ZvY3VzX2dldChtX3ZpZXcpOwotfQotCi1ib29sIEV3a1ZpZXdJbXBs
Ojppc1Zpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBldmFzX29iamVjdF92aXNpYmxlX2dl
dChtX3ZpZXcpOwotfQotCi1jb25zdCBjaGFyKiBFd2tWaWV3SW1wbDo6dGl0bGUoKSBjb25zdAot
ewotICAgIG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRhdGEoKTsK
LQotICAgIHJldHVybiBtX3RpdGxlOwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogVGhpcyBm
dW5jdGlvbiBtYXkgcmV0dXJuIEBjIE5VTEwuCi0gKi8KLUlucHV0TWV0aG9kQ29udGV4dEVmbCog
RXdrVmlld0ltcGw6OmlucHV0TWV0aG9kQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIG1faW5wdXRN
ZXRob2RDb250ZXh0LmdldCgpOwotfQotCi1jb25zdCBjaGFyKiBFd2tWaWV3SW1wbDo6dGhlbWVQ
YXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90aGVtZTsKLX0KLQotdm9pZCBFd2tWaWV3SW1w
bDo6c2V0VGhlbWVQYXRoKGNvbnN0IGNoYXIqIHRoZW1lKQotewotICAgIGlmIChtX3RoZW1lICE9
IHRoZW1lKSB7Ci0gICAgICAgIG1fdGhlbWUgPSB0aGVtZTsKLSAgICAgICAgbV9wYWdlUHJveHkt
PnNldFRoZW1lUGF0aCh0aGVtZSk7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyKiBFd2tWaWV3SW1w
bDo6Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGN1c3RvbUVu
Y29kaW5nID0gbV9wYWdlUHJveHktPmN1c3RvbVRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBpZiAo
Y3VzdG9tRW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fY3Vz
dG9tRW5jb2RpbmcgPSBjdXN0b21FbmNvZGluZy51dGY4KCkuZGF0YSgpOwotCi0gICAgcmV0dXJu
IG1fY3VzdG9tRW5jb2Rpbmc7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnNldEN1c3RvbVRleHRF
bmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKLXsKLSAgICBtX3BhZ2VQcm94eS0+
c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShlbmNvZGluZyk7Ci19Ci0KLXZvaWQgRXdrVmlld0lt
cGw6OnNldE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1fbW91
c2VFdmVudHNFbmFibGVkID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbW91
c2VFdmVudHNFbmFibGVkID0gZW5hYmxlZDsKLSAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgICAgICBldmFzX29iamVj
dF9ldmVudF9jYWxsYmFja19hZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9u
TW91c2VEb3duLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCht
X3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uTW91c2VVcCwgc2QpOwotICAgICAgICBl
dmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01PVVNF
X01PVkUsIG9uTW91c2VNb3ZlLCBzZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBv
bk1vdXNlRG93bik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX3Zp
ZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfVVAsIG9uTW91c2VVcCk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfTU9WRSwg
b25Nb3VzZU1vdmUpOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lk
IEV3a1ZpZXdJbXBsOjpzZXRUb3VjaEV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAg
IGlmIChtX3RvdWNoRXZlbnRzRW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3RvdWNoRXZlbnRzRW5hYmxlZCA9IGVuYWJsZWQ7Ci0KLSAgICBpZiAoZW5hYmxlZCkg
ewotICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBjb25uZWN0IHRvdWNoIGNhbGxiYWNrcyB3
aXRoIG1vdXNlIGFuZCBtdWx0aSBldmVudHMKLSAgICAgICAgLy8gYmVjYXVzZSB0aGUgRXZhcyBj
cmVhdGVzIG1vdXNlIGV2ZW50cyBmb3IgZmlyc3QgdG91Y2ggYW5kIG11bHRpIGV2ZW50cwotICAg
ICAgICAvLyBmb3Igc2Vjb25kIGFuZCB0aGlyZCB0b3VjaGVzLiBCZWxvdyBjb2RlcyBzaG91bGQg
YmUgZml4ZWQgd2hlbiB0aGUgRXZhcwotICAgICAgICAvLyBzdXBwb3J0cyB0aGUgdG91Y2ggZXZl
bnRzLgotICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk3Nzg1IGZvciBkZXRhaWxzLgotICAgICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9
IHNtYXJ0RGF0YSgpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQobV92
aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duLCBzZCk7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTU9V
U0VfVVAsIG9uVG91Y2hVcCwgc2QpOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFj
a19hZGQobV92aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX01PVkUsIG9uVG91Y2hNb3ZlLCBzZCk7
Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcsIEVWQVNfQ0FM
TEJBQ0tfTVVMVElfRE9XTiwgb25Ub3VjaERvd24sIHNkKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZXZlbnRfY2FsbGJhY2tfYWRkKG1fdmlldywgRVZBU19DQUxMQkFDS19NVUxUSV9VUCwgb25Ub3Vj
aFVwLCBzZCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChtX3ZpZXcs
IEVWQVNfQ0FMTEJBQ0tfTVVMVElfTU9WRSwgb25Ub3VjaE1vdmUsIHNkKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3LCBFVkFTX0NB
TExCQUNLX01PVVNFX0RPV04sIG9uVG91Y2hEb3duKTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZl
bnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9VUCwgb25Ub3VjaFVw
KTsKLSAgICAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKG1fdmlldywgRVZBU19D
QUxMQkFDS19NT1VTRV9NT1ZFLCBvblRvdWNoTW92ZSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2RlbChtX3ZpZXcsIEVWQVNfQ0FMTEJBQ0tfTVVMVElfRE9XTiwgb25Ub3Vj
aERvd24pOwotICAgICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwobV92aWV3LCBF
VkFTX0NBTExCQUNLX01VTFRJX1VQLCBvblRvdWNoVXApOwotICAgICAgICBldmFzX29iamVjdF9l
dmVudF9jYWxsYmFja19kZWwobV92aWV3LCBFVkFTX0NBTExCQUNLX01VTFRJX01PVkUsIG9uVG91
Y2hNb3ZlKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIFVwZGF0
ZSB0aGUgdmlldydzIGZhdmljb24gYW5kIGVtaXRzIGEgImljb24sY2hhbmdlZCIgc2lnbmFsIGlm
IGl0IGhhcwotICogY2hhbmdlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVu
ZXZlciB0aGUgVVJMIGhhcyBjaGFuZ2VkIG9yIHdoZW4gdGhlIGljb24gZm9yCi0gKiB0aGUgY3Vy
cmVudCBwYWdlIFVSTCBoYXMgY2hhbmdlZC4KLSAqLwotdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3Jt
SWNvbkNoYW5nZSgpCi17Ci0gICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBt
X2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwotICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwot
Ci0gICAgbV9mYXZpY29uVVJMID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KGlj
b25EYXRhYmFzZSwgbV91cmwpOwotICAgIHNtYXJ0Q2FsbGJhY2s8SWNvbkNoYW5nZWQ+KCkuY2Fs
bCgpOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotYm9vbCBFd2tWaWV3
SW1wbDo6Y3JlYXRlR0xTdXJmYWNlKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQotewotICAgIGlm
ICghbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKCFtX2V2YXNHTCkgewotICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19n
ZXQobV92aWV3KTsKLSAgICAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFz
KSk7Ci0gICAgICAgIGlmICghbV9ldmFzR0wpIHsKLSAgICAgICAgICAgIFdBUk4oIkZhaWxlZCB0
byBjcmVhdGUgRXZhc19HTCwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIG1vZGUuIik7Ci0gICAg
ICAgICAgICBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCA9IGZhbHNlOwotI2lmIEVOQUJMRShXRUJH
TCkKLSAgICAgICAgICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0V2ViR0xFbmFibGVkKGZhbHNlKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2V2YXNHTENvbnRleHQpIHsKLSAgICAg
ICAgbV9ldmFzR0xDb250ZXh0ID0gRXZhc0dMQ29udGV4dDo6Y3JlYXRlKG1fZXZhc0dMLmdldCgp
KTsKLSAgICAgICAgaWYgKCFtX2V2YXNHTENvbnRleHQpIHsKLSAgICAgICAgICAgIFdBUk4oIkZh
aWxlZCB0byBjcmVhdGUgR0xDb250ZXh0LiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERh
dGEoKTsKLQotICAgIEV2YXNfR0xfQ29uZmlnIGV2YXNHTENvbmZpZyA9IHsKLSAgICAgICAgRVZB
U19HTF9SR0JBXzg4ODgsCi0gICAgICAgIEVWQVNfR0xfREVQVEhfQklUXzgsCi0gICAgICAgIEVW
QVNfR0xfU1RFTkNJTF9OT05FLAotICAgICAgICBFVkFTX0dMX09QVElPTlNfTk9ORSwKLSAgICAg
ICAgRVZBU19HTF9NVUxUSVNBTVBMRV9OT05FCi0gICAgfTsKLQotICAgIC8vIFJlcGxhY2VzIGlm
IG5vbi1udWxsLCBhbmQgZnJlZXMgZXhpc3Rpbmcgc3VyZmFjZSBhZnRlciAoT3duUHRyKS4KLSAg
ICBtX2V2YXNHTFN1cmZhY2UgPSBFdmFzR0xTdXJmYWNlOjpjcmVhdGUobV9ldmFzR0wuZ2V0KCks
ICZldmFzR0xDb25maWcsIHZpZXdTaXplKTsKLSAgICBpZiAoIW1fZXZhc0dMU3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRXZhc19OYXRpdmVfU3VyZmFjZSBuYXRpdmVTdXJm
YWNlOwotICAgIGV2YXNfZ2xfbmF0aXZlX3N1cmZhY2VfZ2V0KG1fZXZhc0dMLmdldCgpLCBldmFz
R0xTdXJmYWNlKCksICZuYXRpdmVTdXJmYWNlKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9uYXRp
dmVfc3VyZmFjZV9zZXQoc2QtPmltYWdlLCAmbmF0aXZlU3VyZmFjZSk7Ci0KLSAgICBldmFzX2ds
X21ha2VfY3VycmVudChtX2V2YXNHTC5nZXQoKSwgZXZhc0dMU3VyZmFjZSgpLCBldmFzR0xDb250
ZXh0KCkpOwotCi0gICAgRXZhc19HTF9BUEkqIGdsID0gZXZhc19nbF9hcGlfZ2V0KG1fZXZhc0dM
LmdldCgpKTsKLSAgICBnbC0+Z2xWaWV3cG9ydCgwLCAwLCB2aWV3U2l6ZS53aWR0aCgpICsgc2Qt
PnZpZXcueCwgdmlld1NpemUuaGVpZ2h0KCkgKyBzZC0+dmlldy55KTsKLSAgICBnbC0+Z2xDbGVh
ckNvbG9yKDEuMCwgMS4wLCAxLjAsIDApOwotICAgIGdsLT5nbENsZWFyKEdMX0NPTE9SX0JVRkZF
Ul9CSVQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXdrVmlld0ltcGw6OmVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAgIGxheWVyVHJlZVJlbmRlcmVyKCkt
PnNldEFjdGl2ZSh0cnVlKTsKLQotICAgIGlmICghbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2V2YXNHTFN1cmZhY2UpIHsKLSAgICAg
ICAgaWYgKCFjcmVhdGVHTFN1cmZhY2Uoc2l6ZSgpKSkgewotICAgICAgICAgICAgV0FSTigiRmFp
bGVkIHRvIGNyZWF0ZSBHTFN1cmZhY2UuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFd2tWaWV3SW1w
bDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0vKioKLSAqIEBpbnRl
cm5hbAotICogUmVxdWVzdHMgdG8gc2hvdyBleHRlcm5hbCBjb2xvciBwaWNrZXIuCi0gKi8KLXZv
aWQgRXdrVmlld0ltcGw6OnJlcXVlc3RDb2xvclBpY2tlcihXS0NvbG9yUGlja2VyUmVzdWx0TGlz
dGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKLXsKLSAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGktPmlucHV0X3BpY2tlcl9jb2xvcl9yZXF1ZXN0KTsKLQotICAg
IGlmICghc2QtPmFwaS0+aW5wdXRfcGlja2VyX2NvbG9yX3JlcXVlc3QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2NvbG9yUGlja2VyKQotICAgICAgICBkaXNtaXNzQ29sb3JQaWNrZXIo
KTsKLQotICAgIG1fY29sb3JQaWNrZXIgPSBFd2tDb2xvclBpY2tlcjo6Y3JlYXRlKGxpc3RlbmVy
LCBjb2xvcik7Ci0KLSAgICBzZC0+YXBpLT5pbnB1dF9waWNrZXJfY29sb3JfcmVxdWVzdChzZCwg
bV9jb2xvclBpY2tlci5nZXQoKSk7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBSZXF1ZXN0
cyB0byBoaWRlIGV4dGVybmFsIGNvbG9yIHBpY2tlci4KLSAqLwotdm9pZCBFd2tWaWV3SW1wbDo6
ZGlzbWlzc0NvbG9yUGlja2VyKCkKLXsKLSAgICBpZiAoIW1fY29sb3JQaWNrZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+aW5wdXRfcGlja2VyX2NvbG9y
X2Rpc21pc3MpOwotCi0gICAgaWYgKHNkLT5hcGktPmlucHV0X3BpY2tlcl9jb2xvcl9kaXNtaXNz
KQotICAgICAgICBzZC0+YXBpLT5pbnB1dF9waWNrZXJfY29sb3JfZGlzbWlzcyhzZCk7Ci0KLSAg
ICBtX2NvbG9yUGlja2VyLmNsZWFyKCk7Ci19Ci0jZW5kaWYKLQotQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShFV0tfVEVYVF9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVCwgUlRMKTsKLUNPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oRVdLX1RFWFRfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQs
IExUUik7Ci0KLXZvaWQgRXdrVmlld0ltcGw6OnNob3dDb250ZXh0TWVudShXZWJDb250ZXh0TWVu
dVByb3h5RWZsKiBjb250ZXh0TWVudVByb3h5LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMpCi17Ci0g
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBBU1NFUlQoc2Qt
PmFwaSk7Ci0KLSAgICBBU1NFUlQoY29udGV4dE1lbnVQcm94eSk7Ci0KLSAgICBpZiAoIXNkLT5h
cGktPmNvbnRleHRfbWVudV9zaG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb250
ZXh0TWVudSkKLSAgICAgICAgaGlkZUNvbnRleHRNZW51KCk7Ci0KLSAgICBtX2NvbnRleHRNZW51
ID0gRXdrX0NvbnRleHRfTWVudTo6Y3JlYXRlKHRoaXMsIGNvbnRleHRNZW51UHJveHksIGl0ZW1z
KTsKLQotICAgIHNkLT5hcGktPmNvbnRleHRfbWVudV9zaG93KHNkLCBwb3NpdGlvbi54KCksIHBv
c2l0aW9uLnkoKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6
OmhpZGVDb250ZXh0TWVudSgpCi17Ci0gICAgaWYgKCFtX2NvbnRleHRNZW51KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAg
IEFTU0VSVChzZC0+YXBpKTsKLQotICAgIGlmIChzZC0+YXBpLT5jb250ZXh0X21lbnVfaGlkZSkK
LSAgICAgICAgc2QtPmFwaS0+Y29udGV4dF9tZW51X2hpZGUoc2QpOwotCi0gICAgbV9jb250ZXh0
TWVudS5jbGVhcigpOwotfQotCi12b2lkIEV3a1ZpZXdJbXBsOjpyZXF1ZXN0UG9wdXBNZW51KFdl
YlBvcHVwTWVudVByb3h5RWZsKiBwb3B1cE1lbnVQcm94eSwgY29uc3QgSW50UmVjdCYgcmVjdCwg
VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25z
dCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKLXsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VSVChz
ZC0+YXBpKTsKLQotICAgIEFTU0VSVChwb3B1cE1lbnVQcm94eSk7Ci0KLSAgICBpZiAoIXNkLT5h
cGktPnBvcHVwX21lbnVfc2hvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcG9wdXBN
ZW51KQotICAgICAgICBjbG9zZVBvcHVwTWVudSgpOwotCi0gICAgbV9wb3B1cE1lbnUgPSBFd2tQ
b3B1cE1lbnU6OmNyZWF0ZSh0aGlzLCBwb3B1cE1lbnVQcm94eSwgaXRlbXMsIHNlbGVjdGVkSW5k
ZXgpOwotCi0gICAgc2QtPmFwaS0+cG9wdXBfbWVudV9zaG93KHNkLCByZWN0LCBzdGF0aWNfY2Fz
dDxFd2tfVGV4dF9EaXJlY3Rpb24+KHRleHREaXJlY3Rpb24pLCBwYWdlU2NhbGVGYWN0b3IsIG1f
cG9wdXBNZW51LmdldCgpKTsKLX0KLQotdm9pZCBFd2tWaWV3SW1wbDo6Y2xvc2VQb3B1cE1lbnUo
KQotewotICAgIGlmICghbV9wb3B1cE1lbnUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7Ci0gICAgQVNTRVJUKHNkLT5hcGkpOwot
Ci0gICAgaWYgKHNkLT5hcGktPnBvcHVwX21lbnVfaGlkZSkKLSAgICAgICAgc2QtPmFwaS0+cG9w
dXBfbWVudV9oaWRlKHNkKTsKLQotICAgIG1fcG9wdXBNZW51LmNsZWFyKCk7Ci19Ci0KLS8qKgot
ICogQGludGVybmFsCi0gKiBDYWxscyBhIHNtYXJ0IG1lbWJlciBmdW5jdGlvbiBmb3IgamF2YXNj
cmlwdCBhbGVydCgpLgotICovCi12b2lkIEV3a1ZpZXdJbXBsOjpyZXF1ZXN0SlNBbGVydFBvcHVw
KGNvbnN0IFdLRWluYVNoYXJlZFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFTU0VSVChzZC0+YXBpKTsKLQotICAgIGlm
ICghc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KHNkLCBtZXNzYWdlKTsKLX0KLQotLyoqCi0g
KiBAaW50ZXJuYWwKLSAqIENhbGxzIGEgc21hcnQgbWVtYmVyIGZ1bmN0aW9uIGZvciBqYXZhc2Ny
aXB0IGNvbmZpcm0oKSBhbmQgcmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uLiBSZXR1
cm5zIGZhbHNlIGJ5IGRlZmF1bHQuCi0gKi8KLWJvb2wgRXdrVmlld0ltcGw6OnJlcXVlc3RKU0Nv
bmZpcm1Qb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBBU1NFUlQoc2QtPmFwaSk7
Ci0KLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJt
KHNkLCBtZXNzYWdlKTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIENhbGxzIGEgc21hcnQg
bWVtYmVyIGZ1bmN0aW9uIGZvciBqYXZhc2NyaXB0IHByb21wdCgpIGFuZCByZXR1cm5zIGEgdmFs
dWUgZnJvbSB0aGUgZnVuY3Rpb24uIFJldHVybnMgbnVsbCBzdHJpbmcgYnkgZGVmYXVsdC4KLSAq
LwotV0tFaW5hU2hhcmVkU3RyaW5nIEV3a1ZpZXdJbXBsOjpyZXF1ZXN0SlNQcm9tcHRQb3B1cChj
b25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmlu
ZyYgZGVmYXVsdFZhbHVlKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnRE
YXRhKCk7Ci0gICAgQVNTRVJUKHNkLT5hcGkpOwotCi0gICAgaWYgKCFzZC0+YXBpLT5ydW5famF2
YXNjcmlwdF9wcm9tcHQpCi0gICAgICAgIHJldHVybiBXS0VpbmFTaGFyZWRTdHJpbmcoKTsKLQot
ICAgIHJldHVybiBXS0VpbmFTaGFyZWRTdHJpbmc6OmFkb3B0KHNkLT5hcGktPnJ1bl9qYXZhc2Ny
aXB0X3Byb21wdChzZCwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSk7Ci19Ci0KLSNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIENhbGxzIGV4Y2VlZGVkX2RhdGFi
YXNlX3F1b3RhIGNhbGxiYWNrIG9yIGZhbGxzIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvciByZXR1
cm5zIGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBFd2tW
aWV3SW1wbDo6aW5mb3JtRGF0YWJhc2VRdW90YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJy
ZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVk
IGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVj
dGVkVXNhZ2UpCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsK
LSAgICBBU1NFUlQoc2QtPmFwaSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBs
b25nIGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTIwNDsgLy8gNSBNQgotICAgIGlmIChzZC0+
YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YSkKLSAgICAgICAgcmV0dXJuIHNkLT5hcGktPmV4
Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKHNkLCBkYXRhYmFzZU5hbWUudXRmOCgpLmRhdGEoKSwgZGlz
cGxheU5hbWUudXRmOCgpLmRhdGEoKSwgY3VycmVudFF1b3RhLCBjdXJyZW50T3JpZ2luVXNhZ2Us
IGN1cnJlbnREYXRhYmFzZVVzYWdlLCBleHBlY3RlZFVzYWdlKTsKLQotICAgIHJldHVybiBkZWZh
dWx0UXVvdGE7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIFRoZSB1cmwgb2Yg
dmlldyB3YXMgY2hhbmdlZCBieSB0aGUgZnJhbWUgbG9hZGVyLgotICoKLSAqIEVtaXRzIHNpZ25h
bDogInVybCxjaGFuZ2VkIiB3aXRoIHBvaW50ZXIgdG8gbmV3IHVybCBzdHJpbmcuCi0gKi8KLXZv
aWQgRXdrVmlld0ltcGw6OmluZm9ybVVSTENoYW5nZSgpCi17Ci0gICAgU3RyaW5nIGFjdGl2ZVVS
TCA9IG1fcGFnZVByb3h5LT5hY3RpdmVVUkwoKTsKLSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1N0cmluZyByYXdBY3RpdmVVUkwgPSBhY3RpdmVV
UkwudXRmOCgpOwotICAgIGlmIChtX3VybCA9PSByYXdBY3RpdmVVUkwuZGF0YSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3VybCA9IHJhd0FjdGl2ZVVSTC5kYXRhKCk7Ci0gICAgc21hcnRD
YWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwotCi0gICAgLy8gVXBkYXRlIHRoZSB2
aWV3J3MgZmF2aWNvbi4KLSAgICBpbmZvcm1JY29uQ2hhbmdlKCk7Ci19Ci0KLUV3a1dpbmRvd0Zl
YXR1cmVzKiBFd2tWaWV3SW1wbDo6d2luZG93RmVhdHVyZXMoKQotewotICAgIGlmICghbV93aW5k
b3dGZWF0dXJlcykKLSAgICAgICAgbV93aW5kb3dGZWF0dXJlcyA9IEV3a1dpbmRvd0ZlYXR1cmVz
OjpjcmVhdGUoMCwgdGhpcyk7Ci0KLSAgICByZXR1cm4gbV93aW5kb3dGZWF0dXJlcy5nZXQoKTsK
LX0KLQotV0tQYWdlUmVmIEV3a1ZpZXdJbXBsOjpjcmVhdGVOZXdQYWdlKFBhc3NSZWZQdHI8RXdr
VXJsUmVxdWVzdD4gcmVxdWVzdCwgSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMp
Ci17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERhdGEoKTsKLSAgICBBU1NF
UlQoc2QtPmFwaSk7Ci0KLSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgUmVmUHRyPEV3a1dpbmRvd0ZlYXR1cmVzPiBld2tXaW5kb3dGZWF0
dXJlcyA9IEV3a1dpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVyZXMsIHRoaXMpOwot
Ci0gICAgRXZhc19PYmplY3QqIG5ld0V3a1ZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNk
LCByZXF1ZXN0LT51cmwoKSwgZXdrV2luZG93RmVhdHVyZXMuZ2V0KCkpOwotICAgIGlmICghbmV3
RXdrVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBFd2tWaWV3SW1wbCogbmV3Vmlld0lt
cGwgPSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobmV3RXdrVmlldyk7Ci0gICAgQVNTRVJU
KG5ld1ZpZXdJbXBsKTsKLQotICAgIG5ld1ZpZXdJbXBsLT5tX3dpbmRvd0ZlYXR1cmVzID0gZXdr
V2luZG93RmVhdHVyZXM7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS1Jl
dGFpbihuZXdWaWV3SW1wbC0+cGFnZSgpKSk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6OmNsb3Nl
KCkKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotICAgIEFT
U0VSVChzZC0+YXBpKTsKLQotICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Nsb3NlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwotfQotCi12b2lkIEV3
a1ZpZXdJbXBsOjpvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2
b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQg
PSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOwotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX2Rvd24pOwotICAgIHNkLT5h
cGktPm1vdXNlX2Rvd24oc2QsIGRvd25FdmVudCk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9u
TW91c2VVcCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8p
Ci17Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNf
RXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGktPm1vdXNlX3VwKTsKLSAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgdXBFdmVu
dCk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9uTW91c2VNb3ZlKHZvaWQqIGRhdGEsIEV2YXMq
LCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X01vdXNl
X01vdmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2
ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2Vf
bW92ZSk7Ci0gICAgc2QtPmFwaS0+bW91c2VfbW92ZShzZCwgbW92ZUV2ZW50KTsKLX0KLQotI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIEV3a1ZpZXdJbXBsOjpmZWVkVG91Y2hFdmVudHMo
RXdrX1RvdWNoX0V2ZW50X1R5cGUgdHlwZSkKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCA9IHNtYXJ0RGF0YSgpOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBldmFzX3RvdWNoX3BvaW50
X2xpc3RfY291bnQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRWluYV9MaXN0KiBwb2ludHMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIEV3a19Ub3VjaF9Qb2ludCogcG9pbnQgPSBu
ZXcgRXdrX1RvdWNoX1BvaW50OwotICAgICAgICBwb2ludC0+aWQgPSBldmFzX3RvdWNoX3BvaW50
X2xpc3RfbnRoX2lkX2dldChzZC0+YmFzZS5ldmFzLCBpKTsKLSAgICAgICAgZXZhc190b3VjaF9w
b2ludF9saXN0X250aF94eV9nZXQoc2QtPmJhc2UuZXZhcywgaSwgJnBvaW50LT54LCAmcG9pbnQt
PnkpOwotICAgICAgICBwb2ludC0+c3RhdGUgPSBldmFzX3RvdWNoX3BvaW50X2xpc3RfbnRoX3N0
YXRlX2dldChzZC0+YmFzZS5ldmFzLCBpKTsKLSAgICAgICAgcG9pbnRzID0gZWluYV9saXN0X2Fw
cGVuZChwb2ludHMsIHBvaW50KTsKLSAgICB9Ci0KLSAgICBld2tfdmlld19mZWVkX3RvdWNoX2V2
ZW50KG1fdmlldywgdHlwZSwgcG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoc2QtPmJhc2Uu
ZXZhcykpOwotCi0gICAgdm9pZCogZGF0YTsKLSAgICBFSU5BX0xJU1RfRlJFRShwb2ludHMsIGRh
dGEpCi0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxFd2tfVG91Y2hfUG9pbnQqPihkYXRhKTsK
LX0KLQotdm9pZCBFd2tWaWV3SW1wbDo6b25Ub3VjaERvd24odm9pZCogLyogZGF0YSAqLywgRXZh
cyogLyogY2FudmFzICovLCBFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogLyogZXZlbnRJbmZv
ICovKQotewotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZh
c09iamVjdChld2tWaWV3KTsKLSAgICB2aWV3SW1wbC0+ZmVlZFRvdWNoRXZlbnRzKEVXS19UT1VD
SF9TVEFSVCk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9uVG91Y2hVcCh2b2lkKiAvKiBkYXRh
ICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBl
dmVudEluZm8gKi8pCi17Ci0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gRXdrVmlld0ltcGw6
OmZyb21FdmFzT2JqZWN0KGV3a1ZpZXcpOwotICAgIHZpZXdJbXBsLT5mZWVkVG91Y2hFdmVudHMo
RVdLX1RPVUNIX0VORCk7Ci19Ci0KLXZvaWQgRXdrVmlld0ltcGw6Om9uVG91Y2hNb3ZlKHZvaWQq
IC8qIGRhdGEgKi8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZv
aWQqIC8qIGV2ZW50SW5mbyAqLykKLXsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSBFd2tW
aWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QoZXdrVmlldyk7Ci0gICAgdmlld0ltcGwtPmZlZWRUb3Vj
aEV2ZW50cyhFV0tfVE9VQ0hfTU9WRSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBFd2tWaWV3SW1wbDo6
b25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCi17
Ci0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gc3RhdGljX2Nhc3Q8RXdrVmlld0ltcGwqPihl
dmVudEluZm8pOwotCi0gICAgaWYgKCF2aWV3SW1wbC0+dXJsKCkgfHwgc3RyY2FzZWNtcCh2aWV3
SW1wbC0+dXJsKCksIHBhZ2VVUkwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aWV3SW1wbC0+
aW5mb3JtSWNvbkNoYW5nZSgpOwotfQotCi1QYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdr
Vmlld0ltcGw6OnRha2VTbmFwc2hvdCgpCi17Ci0gICAgLy8gU3VzcGVuZCBhbGwgYW5pbWF0aW9u
cyBiZWZvcmUgdGFraW5nIHRoZSBzbmFwc2hvdC4KLSAgICBtX3BhZ2VQcm94eS0+c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0KLSAgICAvLyBXYWl0IGZvciB0aGUgcGVu
ZGluZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCi0gICAgd2hpbGUgKG1fZGlzcGxh
eVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7Ci0K
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOwotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIW1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKSB7
Ci0jZW5kaWYKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBjcmVh
dGVTdXJmYWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKLSAgICAgICAgLy8gUmVzdW1lIGFsbCBhbmlt
YXRpb25zLgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMoKTsKLQotICAgICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB9Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBzbmFwc2hvdCA9IGdldEltYWdlU3VyZmFjZUZyb21GcmFtZUJ1ZmZlcigwLCAwLCBz
ZC0+dmlldy53LCBzZC0+dmlldy5oKTsKLSAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0g
ICAgbV9wYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0K
LSAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjU1ODNmNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAK
LS8qCi0gICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpZm5kZWYgRXdrVmlld0ltcGxfaAotI2RlZmluZSBFd2tWaWV3SW1wbF9oCi0KLSNpbmNsdWRl
ICJFd2tWaWV3Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgot
I2luY2x1ZGUgIlJlZlB0ckVmbC5oIgotI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgot
I2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKLSNpbmNsdWRlICJXS1JldGFpblB0ci5oIgotI2luY2x1
ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRE
aXJlY3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0
Mi9XS0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotI2luY2x1ZGUgImV3a190b3VjaC5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAi
RXZhc0dMQ29udGV4dC5oIgotI2luY2x1ZGUgIkV2YXNHTFN1cmZhY2UuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIENvbnRleHRNZW51Q2xpZW50RWZsOwotY2xhc3MgRmlu
ZENsaWVudEVmbDsKLWNsYXNzIEZvcm1DbGllbnRFZmw7Ci1jbGFzcyBJbnB1dE1ldGhvZENvbnRl
eHRFZmw7Ci1jbGFzcyBQYWdlQ2xpZW50QmFzZTsKLWNsYXNzIFBhZ2VMb2FkQ2xpZW50RWZsOwot
Y2xhc3MgUGFnZVBvbGljeUNsaWVudEVmbDsKLWNsYXNzIFBhZ2VVSUNsaWVudEVmbDsKLWNsYXNz
IFdlYkNvbnRleHRNZW51SXRlbURhdGE7Ci1jbGFzcyBXZWJDb250ZXh0TWVudVByb3h5RWZsOwot
Y2xhc3MgV2ViUGFnZUdyb3VwOwotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUG9wdXBJ
dGVtOwotY2xhc3MgV2ViUG9wdXBNZW51UHJveHlFZmw7Ci0KLSNpZiBFTkFCTEUoVklCUkFUSU9O
KQotY2xhc3MgVmlicmF0aW9uQ2xpZW50RWZsOwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKLSNlbmRpZgotfQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDb2xvcjsKLWNs
YXNzIEN1cnNvcjsKLWNsYXNzIEludFNpemU7Ci19Ci0KLWNsYXNzIEV3a0NvbnRleHQ7Ci1jbGFz
cyBFd2tCYWNrRm9yd2FyZExpc3Q7Ci1jbGFzcyBFd2tDb2xvclBpY2tlcjsKLWNsYXNzIEV3a0Nv
bnRleHRNZW51OwotY2xhc3MgRXdrUG9wdXBNZW51OwotY2xhc3MgRXdrU2V0dGluZ3M7Ci1jbGFz
cyBFd2tXaW5kb3dGZWF0dXJlczsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LXR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQgRXZhc19HTF9Db250ZXh0OwotdHlwZWRl
ZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7Ci0jZW5kaWYKLQotdHlw
ZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfRGF0YSBFd2tfVmlld19TbWFydF9EYXRhOwotCi1j
bGFzcyBFd2tWaWV3SW1wbCB7Ci1wdWJsaWM6Ci0KLSAgICBlbnVtIFZpZXdCZWhhdmlvciB7Ci0g
ICAgICAgIExlZ2FjeUJlaGF2aW9yLAotICAgICAgICBEZWZhdWx0QmVoYXZpb3IKLSAgICB9Owot
ICAgIEV3a1ZpZXdJbXBsKEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+
IGNvbnRleHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmll
d0JlaGF2aW9yKTsKLSAgICB+RXdrVmlld0ltcGwoKTsKLQotICAgIHN0YXRpYyBFd2tWaWV3SW1w
bCogZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwotICAgIEV2YXNfT2Jq
ZWN0KiB2aWV3KCkgeyByZXR1cm4gbV92aWV3OyB9Ci0KLSAgICBXS1BhZ2VSZWYgd2tQYWdlKCk7
Ci0gICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2VQcm94eS5n
ZXQoKTsgfQotICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KLSAgICBFd2tTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdz
LmdldCgpOyB9Ci0gICAgRXdrQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJl
dHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsgfQotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiB3
aW5kb3dGZWF0dXJlcygpOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0Owot
Ci0gICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSk7Ci0gICAgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsKLQotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3Q7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0OwotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm1Ub1NjcmVlbigpIGNvbnN0OwotCi0gICAgY29uc3QgY2hhciogdXJsKCkgY29u
c3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICBjb25zdCBjaGFyKiBmYXZpY29uVVJMKCkgY29uc3Qg
eyByZXR1cm4gbV9mYXZpY29uVVJMOyB9Ci0gICAgY29uc3QgY2hhciogdGl0bGUoKSBjb25zdDsK
LSAgICBXZWJLaXQ6OklucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0KCk7
Ci0KLSAgICBjb25zdCBjaGFyKiB0aGVtZVBhdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFRoZW1l
UGF0aChjb25zdCBjaGFyKiB0aGVtZSk7Ci0gICAgY29uc3QgY2hhciogY3VzdG9tVGV4dEVuY29k
aW5nTmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShjb25z
dCBTdHJpbmcmIGVuY29kaW5nKTsKLQotICAgIGJvb2wgbW91c2VFdmVudHNFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9tb3VzZUV2ZW50c0VuYWJsZWQ7IH0KLSAgICB2b2lkIHNldE1vdXNlRXZl
bnRzRW5hYmxlZChib29sIGVuYWJsZWQpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAg
Ym9vbCB0b3VjaEV2ZW50c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRzRW5h
YmxlZDsgfQotICAgIHZvaWQgc2V0VG91Y2hFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCk7Ci0j
ZW5kaWYKLQotICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29y
KTsKLSAgICB2b2lkIHNldEltYWdlRGF0YSh2b2lkKiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpOwotCi0gICAgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCA9IFdlYkNvcmU6OkludFJlY3QoKSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhZGRUb1Bh
Z2VWaWV3TWFwKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3Zl
RnJvbVBhZ2VWaWV3TWFwKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7Ci0gICAgc3RhdGljIGNvbnN0
IEV2YXNfT2JqZWN0KiB2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZik7Ci0KLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKLSAg
ICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7Ci0jZW5kaWYKLQotICAgIFdLUmVjdCB3aW5kb3dHZW9t
ZXRyeSgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2luZG93R2VvbWV0cnkoY29uc3QgV0tSZWN0Jik7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgYm9vbCBjcmVhdGVHTFN1
cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUpOwotICAgIGJvb2wgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCk7Ci0gICAgdm9pZCBzZXROZWVkc1N1cmZhY2VSZXNpemUoKSB7IG1fcGVu
ZGluZ1N1cmZhY2VSZXNpemUgPSB0cnVlOyB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlBVVF9U
WVBFX0NPTE9SKQotICAgIHZvaWQgcmVxdWVzdENvbG9yUGlja2VyKFdLQ29sb3JQaWNrZXJSZXN1
bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKLSAgICB2b2lk
IGRpc21pc3NDb2xvclBpY2tlcigpOwotI2VuZGlmCi0KLSAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3
UGFnZShQYXNzUmVmUHRyPEV3a1VybFJlcXVlc3Q+LCBXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25h
cnkqIHdpbmRvd0ZlYXR1cmVzKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICB2b2lkIHJlcXVl
c3RQb3B1cE1lbnUoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9y
LCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgaW50MzJfdCBzZWxl
Y3RlZEluZGV4KTsKLSAgICB2b2lkIGNsb3NlUG9wdXBNZW51KCk7Ci0gICAgCi0gICAgdm9pZCBz
aG93Q29udGV4dE1lbnUoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5RWZsKiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiYgaXRlbXMpOwotICAgIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7Ci0KLSAg
ICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RKU0FsZXJ0
UG9wdXAoY29uc3QgV0tFaW5hU2hhcmVkU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHJlcXVl
c3RKU0NvbmZpcm1Qb3B1cChjb25zdCBXS0VpbmFTaGFyZWRTdHJpbmcmIG1lc3NhZ2UpOwotICAg
IFdLRWluYVNoYXJlZFN0cmluZyByZXF1ZXN0SlNQcm9tcHRQb3B1cChjb25zdCBXS0VpbmFTaGFy
ZWRTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdLRWluYVNoYXJlZFN0cmluZyYgZGVmYXVsdFZhbHVl
KTsKLQotICAgIHRlbXBsYXRlPEV3a1ZpZXdDYWxsYmFja3M6OkNhbGxiYWNrVHlwZSBjYWxsYmFj
a1R5cGU+Ci0gICAgRXdrVmlld0NhbGxiYWNrczo6Q2FsbEJhY2s8Y2FsbGJhY2tUeXBlPiBzbWFy
dENhbGxiYWNrKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBFd2tWaWV3Q2FsbGJhY2tz
OjpDYWxsQmFjazxjYWxsYmFja1R5cGU+KG1fdmlldyk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bG9uZyBsb25nIGluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VOYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3Vy
cmVudFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25l
ZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBl
Y3RlZFVzYWdlKTsKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFdlYktpdDo6
UGFnZUNsaWVudEJhc2UqIHBhZ2VDbGllbnQoKSB7IHJldHVybiBtX3BhZ2VDbGllbnQuZ2V0KCk7
IH0KLQotICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1f
cGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KLSAgICBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQotCi0gICAgdm9pZCBzZXRQ
YWdlUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wYWdl
UG9zaXRpb24gPSBwb3NpdGlvbjsgfQotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFn
ZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUG9zaXRpb247IH0KLSNlbmRpZgotCi0g
ICAgLy8gRklYTUU6IG5lZWRzIHJlZmFjdG9yaW5nIChzcGxpdCBjYWxsYmFjayBpbnZva2UpCi0g
ICAgdm9pZCBpbmZvcm1VUkxDaGFuZ2UoKTsKLQotICAgIGJvb2wgaXNIYXJkd2FyZUFjY2VsZXJh
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQ7IH0KLSAgICB2b2lk
IHNldERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9
IGVuYWJsZTsgfQotCi0gICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hv
dCgpOwotCi1wcml2YXRlOgotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBF
dmFzX0dMX0NvbnRleHQqIGV2YXNHTENvbnRleHQoKSB7IHJldHVybiBtX2V2YXNHTENvbnRleHQg
PyBtX2V2YXNHTENvbnRleHQtPmNvbnRleHQoKSA6IDA7IH0KLSAgICBFdmFzX0dMX1N1cmZhY2Uq
IGV2YXNHTFN1cmZhY2UoKSB7IHJldHVybiBtX2V2YXNHTFN1cmZhY2UgPyBtX2V2YXNHTFN1cmZh
Y2UtPnN1cmZhY2UoKSA6IDA7IH0KLSNlbmRpZgotCi0gICAgaW5saW5lIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSgpIGNvbnN0OwotICAgIHZvaWQgZGlzcGxheVRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8RXdrVmlld0ltcGw+Kik7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKTsK
LSNlbmRpZgotCi0gICAgdm9pZCBpbmZvcm1JY29uQ2hhbmdlKCk7Ci0KLSAgICBzdGF0aWMgdm9p
ZCBvbk1vdXNlRG93bih2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVu
dEluZm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VVcCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZh
c19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOwotICAgIHN0YXRpYyB2b2lkIG9uTW91c2VNb3Zl
KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7Ci0jaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2b2lkIGZlZWRUb3VjaEV2ZW50cyhFd2tfVG91Y2hf
RXZlbnRfVHlwZSB0eXBlKTsKLSAgICBzdGF0aWMgdm9pZCBvblRvdWNoRG93bih2b2lkKiAvKiBk
YXRhICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAv
KiBldmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hVcCh2b2lkKiAvKiBkYXRh
ICovLCBFdmFzKiAvKiBjYW52YXMgKi8sIEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiAvKiBl
dmVudEluZm8gKi8pOwotICAgIHN0YXRpYyB2b2lkIG9uVG91Y2hNb3ZlKHZvaWQqIC8qIGRhdGEg
Ki8sIEV2YXMqIC8qIGNhbnZhcyAqLywgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIC8qIGV2
ZW50SW5mbyAqLyk7Ci0jZW5kaWYKLSAgICBzdGF0aWMgdm9pZCBvbkZhdmljb25DaGFuZ2VkKGNv
bnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbyk7Ci0KLSAgICAvLyBOb3RlLCBpbml0
aWFsaXphdGlvbiBvcmRlciBtYXR0ZXJzLgotICAgIEV2YXNfT2JqZWN0KiBtX3ZpZXc7Ci0gICAg
UmVmUHRyPEV3a0NvbnRleHQ+IG1fY29udGV4dDsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgT3duUHRyPEV2YXNfR0w+IG1fZXZhc0dMOwotICAgIE93blB0cjxXZWJLaXQ6
OkV2YXNHTENvbnRleHQ+IG1fZXZhc0dMQ29udGV4dDsKLSAgICBPd25QdHI8V2ViS2l0OjpFdmFz
R0xTdXJmYWNlPiBtX2V2YXNHTFN1cmZhY2U7Ci0gICAgYm9vbCBtX3BlbmRpbmdTdXJmYWNlUmVz
aXplOwotI2VuZGlmCi0gICAgT3duUHRyPFdlYktpdDo6UGFnZUNsaWVudEJhc2U+IG1fcGFnZUNs
aWVudDsKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IG1fcGFnZVByb3h5OwotICAg
IE93blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50OwotICAg
IE93blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNsaWVudDsK
LSAgICBPd25QdHI8V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50OwotICAg
IE93blB0cjxXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50RWZsPiBtX2NvbnRleHRNZW51Q2xpZW50
OwotICAgIE93blB0cjxXZWJLaXQ6OkZpbmRDbGllbnRFZmw+IG1fZmluZENsaWVudDsKLSAgICBP
d25QdHI8V2ViS2l0OjpGb3JtQ2xpZW50RWZsPiBtX2Zvcm1DbGllbnQ7Ci0jaWYgRU5BQkxFKFZJ
QlJBVElPTikKLSAgICBPd25QdHI8V2ViS2l0OjpWaWJyYXRpb25DbGllbnRFZmw+IG1fdmlicmF0
aW9uQ2xpZW50OwotI2VuZGlmCi0gICAgT3duUHRyPEV3a0JhY2tGb3J3YXJkTGlzdD4gbV9iYWNr
Rm9yd2FyZExpc3Q7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgZmxvYXQgbV9w
YWdlU2NhbGVGYWN0b3I7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3BhZ2VQb3NpdGlvbjsK
LSNlbmRpZgotICAgIE93blB0cjxFd2tTZXR0aW5ncz4gbV9zZXR0aW5nczsKLSAgICBSZWZQdHI8
RXdrV2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7Ci0gICAgY29uc3Qgdm9pZCogbV9j
dXJzb3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0Lgot
ICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7Ci0gICAgV0tFaW5hU2hhcmVkU3Ry
aW5nIG1fdXJsOwotICAgIG11dGFibGUgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdGl0bGU7Ci0gICAg
V0tFaW5hU2hhcmVkU3RyaW5nIG1fdGhlbWU7Ci0gICAgbXV0YWJsZSBXS0VpbmFTaGFyZWRTdHJp
bmcgbV9jdXN0b21FbmNvZGluZzsKLSAgICBib29sIG1fbW91c2VFdmVudHNFbmFibGVkOwotI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3RvdWNoRXZlbnRzRW5hYmxlZDsKLSNl
bmRpZgotICAgIFdlYkNvcmU6OlRpbWVyPEV3a1ZpZXdJbXBsPiBtX2Rpc3BsYXlUaW1lcjsKLSAg
ICBPd25QdHI8RXdrQ29udGV4dE1lbnU+IG1fY29udGV4dE1lbnU7Ci0gICAgT3duUHRyPEV3a1Bv
cHVwTWVudT4gbV9wb3B1cE1lbnU7Ci0gICAgT3duUHRyPFdlYktpdDo6SW5wdXRNZXRob2RDb250
ZXh0RWZsPiBtX2lucHV0TWV0aG9kQ29udGV4dDsKLSNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xP
UikKLSAgICBPd25QdHI8RXdrQ29sb3JQaWNrZXI+IG1fY29sb3JQaWNrZXI7Ci0jZW5kaWYKLSAg
ICBib29sIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkOwotICAgIGJvb2wgbV9zZXREcmF3c0JhY2tn
cm91bmQ7Ci19OwotCi0jZW5kaWYgLy8gRXdrVmlld0ltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9tZW51LmNwcAppbmRleCAwYTRl
NTQ3Li45OGE0MzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9tZW51LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9tZW51LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImV3
a19jb250ZXh0X21lbnUuaCIKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkV3
a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRN
ZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5RWZsLmgiCiAjaW5j
bHVkZSAiZXdrX2NvbnRleHRfbWVudV9pdGVtLmgiCkBAIC0zNiw4ICszNiw4IEBACiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CiAKLUV3a0NvbnRleHRNZW51OjpFd2tDb250ZXh0TWVudShFd2tW
aWV3SW1wbCogdmlld0ltcGwsIFdlYkNvbnRleHRNZW51UHJveHlFZmwqIGNvbnRleHRNZW51UHJv
eHksIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcykK
LSAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCitFd2tDb250ZXh0TWVudTo6RXdrQ29udGV4dE1l
bnUoRXdrVmlldyogdmlldywgV2ViQ29udGV4dE1lbnVQcm94eUVmbCogY29udGV4dE1lbnVQcm94
eSwgY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQor
ICAgIDogbV92aWV3SW1wbCh2aWV3KQogICAgICwgbV9jb250ZXh0TWVudVByb3h5KGNvbnRleHRN
ZW51UHJveHkpCiAgICAgLCBtX2NvbnRleHRNZW51SXRlbXMoMCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X21lbnVfcHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudV9wcml2
YXRlLmgKaW5kZXggMjlmNWM5MC4uYjllMTEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudV9wcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfbWVudV9wcml2YXRlLmgKQEAg
LTM3LDExICszNywxMSBAQCBjbGFzcyBXZWJDb250ZXh0TWVudUl0ZW1EYXRhOwogY2xhc3MgV2Vi
Q29udGV4dE1lbnVQcm94eUVmbDsKIH0KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tW
aWV3OwogCiBjbGFzcyBFd2tDb250ZXh0TWVudSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8RXdrQ29udGV4dE1lbnU+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwsIFdlYktp
dDo6V2ViQ29udGV4dE1lbnVQcm94eUVmbCogY29udGV4dE1lbnVQcm94eSwgY29uc3QgVmVjdG9y
PFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQorICAgIHN0YXRpYyBQYXNz
T3duUHRyPEV3a0NvbnRleHRNZW51PiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGwsIFdlYktpdDo6
V2ViQ29udGV4dE1lbnVQcm94eUVmbCogY29udGV4dE1lbnVQcm94eSwgY29uc3QgVmVjdG9yPFdl
YktpdDo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBFd2tDb250ZXh0TWVudSh2aWV3SW1wbCwgY29udGV4dE1lbnVQcm94
eSwgaXRlbXMpKTsKICAgICB9CkBAIC02OCw5ICs2OCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgRXdrQ29udGV4dE1lbnUoKTsKICAgICBFd2tDb250ZXh0TWVudShFaW5hX0xpc3QqIGl0ZW1z
KTsKLSAgICBFd2tDb250ZXh0TWVudShFd2tWaWV3SW1wbCogdmlld0ltcGwsIFdlYktpdDo6V2Vi
Q29udGV4dE1lbnVQcm94eUVmbCosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYkNvbnRleHRNZW51
SXRlbURhdGE+JiBpdGVtcyk7CisgICAgRXdrQ29udGV4dE1lbnUoRXdrVmlldyogdmlld0ltcGws
IFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUVmbCosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6Oldl
YkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcyk7CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3
SW1wbDsKKyAgICBFd2tWaWV3KiBtX3ZpZXdJbXBsOwogICAgIFdlYktpdDo6V2ViQ29udGV4dE1l
bnVQcm94eUVmbCogbV9jb250ZXh0TWVudVByb3h5OwogICAgIEVpbmFfTGlzdCogbV9jb250ZXh0
TWVudUl0ZW1zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAKaW5kZXggM2FkN2Q0ZC4uOTgwNzJjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5j
cHAKQEAgLTM2LDcgKzM2LDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotRXdrRG93
bmxvYWRKb2I6OkV3a0Rvd25sb2FkSm9iKFdlYktpdDo6RG93bmxvYWRQcm94eSogZG93bmxvYWQs
IEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKK0V3a0Rvd25sb2FkSm9iOjpFd2tEb3dubG9hZEpvYihX
ZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3KiB2aWV3SW1wbCkKICAgICA6
IG1fZG93bmxvYWRQcm94eShkb3dubG9hZCkKICAgICAsIG1fdmlld0ltcGwodmlld0ltcGwpCiAg
ICAgLCBtX3N0YXRlKEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfTk9UX1NUQVJURUQpCkBAIC01OSw3
ICs1OSw3IEBAIHVpbnQ2NF90IEV3a0Rvd25sb2FkSm9iOjppZCgpIGNvbnN0CiAgKiBSZXR1cm5z
IHRoZSB2aWV3IHRoaXMgZG93bmxvYWQgaXMgYXR0YWNoZWQgdG8uCiAgKiBUaGUgdmlldyBpcyBu
ZWVkZWQgdG8gc2VuZCBub3RpZmljYXRpb24gc2lnbmFscy4KICAqLwotRXdrVmlld0ltcGwqIEV3
a0Rvd25sb2FkSm9iOjp2aWV3SW1wbCgpIGNvbnN0CitFd2tWaWV3KiBFd2tEb3dubG9hZEpvYjo6
dmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdmlld0ltcGw7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJp
dmF0ZS5oCmluZGV4IDViNmE1M2YuLjc2YTQ4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCkBA
IC0zOCwxOSArMzgsMTkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5
OwogfQogCi1jbGFzcyBFd2tWaWV3SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAKIGNsYXNzIEV3a0Rv
d25sb2FkSm9iIDogcHVibGljIEV3a09iamVjdCB7CiBwdWJsaWM6CiAgICAgRVdLX09CSkVDVF9E
RUNMQVJFKEV3a0Rvd25sb2FkSm9iKQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrRG93bmxv
YWRKb2I+IGNyZWF0ZShXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3SW1w
bCogdmlld0ltcGwpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXdrRG93bmxvYWRKb2I+IGNyZWF0
ZShXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3KiB2aWV3SW1wbCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXdrRG93bmxvYWRKb2IoZG93bmxvYWQs
IHZpZXdJbXBsKSk7CiAgICAgfQogCiAgICAgdWludDY0X3QgaWQoKSBjb25zdDsKLSAgICBFd2tW
aWV3SW1wbCogdmlld0ltcGwoKSBjb25zdDsKKyAgICBFd2tWaWV3KiB2aWV3KCkgY29uc3Q7CiAK
ICAgICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRT
dGF0ZShFd2tfRG93bmxvYWRfSm9iX1N0YXRlKTsKQEAgLTcyLDEwICs3MiwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBpbmNyZW1lbnRSZWNlaXZlZERhdGEodWludDY0X3QgbGVuZ3RoKTsKIAogcHJp
dmF0ZToKLSAgICBFd2tEb3dubG9hZEpvYihXZWJLaXQ6OkRvd25sb2FkUHJveHkqIGRvd25sb2Fk
LCBFd2tWaWV3SW1wbCogdmlld0ltcGwpOworICAgIEV3a0Rvd25sb2FkSm9iKFdlYktpdDo6RG93
bmxvYWRQcm94eSogZG93bmxvYWQsIEV3a1ZpZXcqIHZpZXcpOwogCiAgICAgV2ViS2l0OjpEb3du
bG9hZFByb3h5KiBtX2Rvd25sb2FkUHJveHk7Ci0gICAgRXdrVmlld0ltcGwqIG1fdmlld0ltcGw7
CisgICAgRXdrVmlldyogbV92aWV3SW1wbDsKICAgICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIG1f
c3RhdGU7CiAgICAgbXV0YWJsZSBSZWZQdHI8RXdrVXJsUmVxdWVzdD4gbV9yZXF1ZXN0OwogICAg
IFJlZlB0cjxFd2tVcmxSZXNwb25zZT4gbV9yZXNwb25zZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51LmNwcAppbmRleCA0ZWU5ZWFkLi4w
Mzk2ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
cG9wdXBfbWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3BvcHVwX21lbnUuY3BwCkBAIC0yNywxNSArMjcsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJld2tfcG9wdXBfbWVudS5oIgogCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIK
KyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlFZmwuaCIK
ICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tf
cG9wdXBfbWVudV9wcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLUV3a1Bv
cHVwTWVudTo6RXdrUG9wdXBNZW51KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUG9wdXBNZW51
UHJveHlFZmwqIHBvcHVwTWVudVByb3h5LCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0
ZW0+JiBpdGVtcywgdW5zaWduZWQgc2VsZWN0ZWRJbmRleCkKLSAgICA6IG1fdmlld0ltcGwodmll
d0ltcGwpCitFd2tQb3B1cE1lbnU6OkV3a1BvcHVwTWVudShFd2tWaWV3KiB2aWV3LCBXZWJQb3B1
cE1lbnVQcm94eUVmbCogcG9wdXBNZW51UHJveHksIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBv
cHVwSXRlbT4mIGl0ZW1zLCB1bnNpZ25lZCBzZWxlY3RlZEluZGV4KQorICAgIDogbV92aWV3KHZp
ZXcpCiAgICAgLCBtX3BvcHVwTWVudVByb3h5KHBvcHVwTWVudVByb3h5KQogICAgICwgbV9wb3B1
cE1lbnVJdGVtcygwKQogICAgICwgbV9zZWxlY3RlZEluZGV4KHNlbGVjdGVkSW5kZXgpCkBAIC01
NCw3ICs1NCw3IEBAIEV3a1BvcHVwTWVudTo6fkV3a1BvcHVwTWVudSgpCiAKIHZvaWQgRXdrUG9w
dXBNZW51OjpjbG9zZSgpCiB7Ci0gICAgbV92aWV3SW1wbC0+Y2xvc2VQb3B1cE1lbnUoKTsKKyAg
ICBtX3ZpZXctPmNsb3NlUG9wdXBNZW51KCk7CiB9CiAKIGNvbnN0IEVpbmFfTGlzdCogRXdrUG9w
dXBNZW51OjppdGVtcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9wcml2YXRlLmgKaW5kZXggMmI1ZGUwNi4uNTI0
ZjU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Bv
cHVwX21lbnVfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19wb3B1cF9tZW51X3ByaXZhdGUuaApAQCAtMzYsMTMgKzM2LDEzIEBAIGNsYXNzIFdlYlBv
cHVwSXRlbTsKIGNsYXNzIFdlYlBvcHVwTWVudVByb3h5RWZsOwogfQogCi1jbGFzcyBFd2tWaWV3
SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAKIGNsYXNzIEV3a1BvcHVwTWVudSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8RXdrUG9wdXBNZW51PiBjcmVhdGUoRXdrVmlld0ltcGwqIHZp
ZXdJbXBsLCBXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5RWZsKiBwb3B1cE1lbnVQcm94eSwgY29u
c3QgVmVjdG9yPFdlYktpdDo6V2ViUG9wdXBJdGVtPiYgaXRlbXMsIHVuc2lnbmVkIHNlbGVjdGVk
SW5kZXgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RXdrUG9wdXBNZW51PiBjcmVhdGUoRXdrVmll
dyogdmlldywgV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCogcG9wdXBNZW51UHJveHksIGNv
bnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBvcHVwSXRlbT4mIGl0ZW1zLCB1bnNpZ25lZCBzZWxlY3Rl
ZEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFd2tQb3B1cE1lbnUo
dmlld0ltcGwsIHBvcHVwTWVudVByb3h5LCBpdGVtcywgc2VsZWN0ZWRJbmRleCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEV3a1BvcHVwTWVudSh2aWV3LCBwb3B1cE1lbnVQcm94eSwg
aXRlbXMsIHNlbGVjdGVkSW5kZXgpKTsKICAgICB9CiAgICAgfkV3a1BvcHVwTWVudSgpOwogCkBA
IC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzZWxlY3RlZEluZGV4KCkgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgRXdrUG9wdXBNZW51KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwg
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCosIGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlBv
cHVwSXRlbT4mIGl0ZW1zLCB1bnNpZ25lZCBzZWxlY3RlZEluZGV4KTsKKyAgICBFd2tQb3B1cE1l
bnUoRXdrVmlldyogdmlld0ltcGwsIFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlFZmwqLCBjb25z
dCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1cEl0ZW0+JiBpdGVtcywgdW5zaWduZWQgc2VsZWN0ZWRJ
bmRleCk7CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1wbDsKKyAgICBFd2tWaWV3KiBtX3Zp
ZXc7CiAgICAgV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eUVmbCogbV9wb3B1cE1lbnVQcm94eTsK
ICAgICBFaW5hX0xpc3QqIG1fcG9wdXBNZW51SXRlbXM7CiAgICAgdW5zaWduZWQgbV9zZWxlY3Rl
ZEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0
aW5ncy5jcHAKaW5kZXggNzM2MTExMi4uM2Q0MzRkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzLmNwcApAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgogCi0jaW5jbHVk
ZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiZXdrX3Nl
dHRpbmdzX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJLaXQyL1dlYlBhZ2VHcm91cC5oPgogI2lu
Y2x1ZGUgPFdlYktpdDIvV2ViUGFnZVByb3h5Lmg+CkBAIC00NSwxMiArNDUsMTIgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogY29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlcyogRXdrU2V0
dGluZ3M6OnByZWZlcmVuY2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV92aWV3SW1wbC0+cGFn
ZSgpLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKKyAgICByZXR1cm4gbV92aWV3LT5wYWdl
KCktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOwogfQogCiBXZWJLaXQ6OldlYlByZWZlcmVu
Y2VzKiBFd2tTZXR0aW5nczo6cHJlZmVyZW5jZXMoKQogewotICAgIHJldHVybiBtX3ZpZXdJbXBs
LT5wYWdlKCktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOworICAgIHJldHVybiBtX3ZpZXct
PnBhZ2UoKS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCk7CiB9CiAKICNpZiBFTkFCTEUoU1BF
TExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19zZXR0aW5nc19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfc2V0dGluZ3NfcHJpdmF0ZS5oCmluZGV4IDMzMzVhYWQuLjBiODVkOWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19zZXR0aW5nc19wcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3NldHRpbmdzX3ByaXZh
dGUuaApAQCAtMzIsMTQgKzMyLDE0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlBy
ZWZlcmVuY2VzOwogfQotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tWaWV3OwogLyoqCiAg
KiBcc3RydWN0ICBFd2tfU2V0dGluZ3MKICAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBzZXR0aW5n
cyBkYXRhLgogICovCiBjbGFzcyBFd2tTZXR0aW5ncyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8RXdrU2V0dGluZ3M+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAg
c3RhdGljIFBhc3NPd25QdHI8RXdrU2V0dGluZ3M+IGNyZWF0ZShFd2tWaWV3KiB2aWV3SW1wbCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXdrU2V0dGluZ3Modmlld0ltcGwp
KTsKICAgICB9CkBAIC00OCwxMyArNDgsMTMgQEAgcHVibGljOgogICAgIFdlYktpdDo6V2ViUHJl
ZmVyZW5jZXMqIHByZWZlcmVuY2VzKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRXdrU2V0
dGluZ3MoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQotICAgICAgICA6IG1fdmlld0ltcGwodmlld0lt
cGwpCisgICAgZXhwbGljaXQgRXdrU2V0dGluZ3MoRXdrVmlldyogdmlld0ltcGwpCisgICAgICAg
IDogbV92aWV3KHZpZXdJbXBsKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdmlld0ltcGwpOwor
ICAgICAgICBBU1NFUlQobV92aWV3KTsKICAgICB9CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3
SW1wbDsKKyAgICBFd2tWaWV3KiBtX3ZpZXc7CiB9OwogCiAjZW5kaWYgLy8gZXdrX3NldHRpbmdz
X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCmluZGV4IDRiYmU0ZTcuLjcyYTZhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgogCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIK
KyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1
ZGUgIkZvcm1DbGllbnRFZmwuaCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIK
QEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBFV0tfVklFV19UWVBFX1NUUltd
ID0gIkVXSzJfVmlldyI7CiAgICAgICAgIEVJTkFfTE9HX0NSSVQoInNtYXJ0IGRhdGEgaXMgbnVs
bCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICByZXR1cm4g
X19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrVmlld0ltcGwqIGltcGwg
PSBzbWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIEV3a1ZpZXcqIGltcGwgPSBzbWFydERhdGEtPnByaXY7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgIGlmICghaW1wbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCgibm8gcHJpdmF0
ZSBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAgICAgICAgICAgICAgIFwKQEAgLTEzNiw3ICsx
MzYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBFV0tfVklFV19UWVBFX1NUUltdID0gIkVXSzJfVmll
dyI7CiAgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBFV0tfVklFV19JTVBMX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgaW1wbCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tW
aWV3SW1wbCogaW1wbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgRXdrVmlldyogaW1wbCA9IDA7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIF9fVkFfQVJHU19fKTsgICAgICAgICAgICBcCiAgICAgICAgIGltcGwgPSBzbWFydERh
dGEtPnByaXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XApAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdr
Vmlld1NtYXJ0Q2xhc3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBz
bWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYgPSAwLCBFd2tWaWV3SW1wbDo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmll
d0ltcGw6OkRlZmF1bHRCZWhhdmlvcikKK3N0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0
ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3
OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKQEAgLTUyNCw3ICs1MjQsNyBAQCBz
dGF0aWMgaW5saW5lIEV2YXNfT2JqZWN0KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZh
c19TbWFydCogc21hcnQsIFBhc3NSZQogCiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMg
Y3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMg
MCwKICAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KLSAgICBzbWFy
dERhdGEtPnByaXYgPSBuZXcgRXdrVmlld0ltcGwoZXdrVmlldywgY29udGV4dCwgdG9JbXBsKHBh
Z2VHcm91cFJlZiksIGJlaGF2aW9yKTsKKyAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmll
dyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3IpOwogICAg
IHJldHVybiBld2tWaWV3OwogfQogCkBAIC01MzIsNyArNTMyLDcgQEAgc3RhdGljIGlubGluZSBF
dmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0
LCBQYXNzUmUKICAqIEBpbnRlcm5hbAogICogQ29uc3RydWN0cyBhIGV3a192aWV3IEV2YXNfT2Jq
ZWN0IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfdmlld19i
YXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXdJbXBsOjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitF
dmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVo
YXZpb3IgYmVoYXZpb3IpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBjcmVh
dGVFd2tWaWV3U21hcnRDbGFzcygpLCBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKHRv
SW1wbChjb250ZXh0UmVmKSkgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpLCBwYWdlR3Jv
dXBSZWYsIGJlaGF2aW9yKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5oCmluZGV4IDEyNDYyMDQuLjdkMWRmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtMjAyLDcgKzIwMiw3IEBAIHN0cnVjdCBFd2tf
Vmlld19TbWFydF9DbGFzcyB7CiAgKi8KICNkZWZpbmUgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5J
VF9OQU1FX1ZFUlNJT04obmFtZSkgRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVChFVkFTX1NNQVJU
X0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKG5hbWUpKQogCi10eXBlZGVmIHN0cnVjdCBFd2tWaWV3
SW1wbCBFd2tWaWV3SW1wbDsKK3R5cGVkZWYgc3RydWN0IEV3a1ZpZXcgRXdrVmlldzsKIC8qKgog
ICogQGJyaWVmIENvbnRhaW5zIGFuIGludGVybmFsIFZpZXcgZGF0YS4KICAqCkBAIC0yMTQsNyAr
MjE0LDcgQEAgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgewogICAgIGNvbnN0IEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGk7IC8qKjwgcmVmZXJlbmNlIHRvIGNhc3RlZCBjbGFzcyBpbnN0YW5j
ZSAqLwogICAgIEV2YXNfT2JqZWN0KiBzZWxmOyAvKio8IHJlZmVyZW5jZSB0byBvd25lciBvYmpl
Y3QgKi8KICAgICBFdmFzX09iamVjdCogaW1hZ2U7IC8qKjwgcmVmZXJlbmNlIHRvIGV2YXNfb2Jq
ZWN0X2ltYWdlIGZvciBkcmF3aW5nIHdlYiBjb250ZW50cyAqLwotICAgIEV3a1ZpZXdJbXBsKiBw
cml2OyAvKio8IHNob3VsZCBuZXZlciBiZSBhY2Nlc3NlZCwgYysrIHN0dWZmICovCisgICAgRXdr
VmlldyogcHJpdjsgLyoqPCBzaG91bGQgbmV2ZXIgYmUgYWNjZXNzZWQsIGMrKyBzdHVmZiAqLwog
ICAgIHN0cnVjdCB7CiAgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsgLyoqPCBsYXN0IHVz
ZWQgdmlld3BvcnQgKi8KICAgICB9IHZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggOWE1MWVmMi4uODNiNGM5NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3By
aXZhdGUuaApAQCAtMjEsMTAgKzIxLDEwIEBACiAjaWZuZGVmIGV3a192aWV3X3ByaXZhdGVfaAog
I2RlZmluZSBld2tfdmlld19wcml2YXRlX2gKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisj
aW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFzZS5oPgogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFz
LCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3SW1wbDo6Vmlld0JlaGF2aW9y
KTsKK0V2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4
dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7CiAKICNlbmRpZiAv
LyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKaW5kZXggNjZhNmM5MS4uZTMwNTgz
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRv
d19mZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTMyLDggKzMyLDggQEAKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIAotRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1cmVzKEltbXV0YWJs
ZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3SW1wbCogdmlld0ltcGwpCi0gICAg
OiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQorRXdrV2luZG93RmVhdHVyZXM6OkV3a1dpbmRvd0ZlYXR1
cmVzKEltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBFd2tWaWV3KiB2aWV3KQor
ICAgIDogbV92aWV3KHZpZXcpCiAgICAgLCBtX2dlb21ldHJ5KDAsIDAsIDEwMCwgMTAwKQogICAg
ICwgbV90b29sYmFyVmlzaWJsZSh0cnVlKQogICAgICwgbV9zdGF0dXNCYXJWaXNpYmxlKHRydWUp
CkBAIC03MywyNSArNzMsMjUgQEAgVDEgRXdrV2luZG93RmVhdHVyZXM6OmdldFdpbmRvd0ZlYXR1
cmVWYWx1ZShJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcywKIHZvaWQgRXdrV2lu
ZG93RmVhdHVyZXM6OnNldFRvb2xiYXJWaXNpYmxlKGJvb2wgdG9vbGJhclZpc2libGUpCiB7CiAg
ICAgbV90b29sYmFyVmlzaWJsZSA9IHRvb2xiYXJWaXNpYmxlOwotICAgIG1fdmlld0ltcGwtPnNt
YXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNrczo6VG9vbGJhclZpc2libGU+KCkuY2FsbCgmdG9v
bGJhclZpc2libGUpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tz
OjpUb29sYmFyVmlzaWJsZT4oKS5jYWxsKCZ0b29sYmFyVmlzaWJsZSk7CiB9CiAKIHZvaWQgRXdr
V2luZG93RmVhdHVyZXM6OnNldFN0YXR1c0JhclZpc2libGUoYm9vbCBzdGF0dXNCYXJWaXNpYmxl
KQogewogICAgIG1fc3RhdHVzQmFyVmlzaWJsZSA9IHN0YXR1c0JhclZpc2libGU7Ci0gICAgbV92
aWV3SW1wbC0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpTdGF0dXNCYXJWaXNpYmxl
PigpLmNhbGwoJnN0YXR1c0JhclZpc2libGUpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxF
d2tWaWV3Q2FsbGJhY2tzOjpTdGF0dXNCYXJWaXNpYmxlPigpLmNhbGwoJnN0YXR1c0JhclZpc2li
bGUpOwogfQogCiB2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRNZW51QmFyVmlzaWJsZShib29s
IG1lbnVCYXJWaXNpYmxlKQogewogICAgIG1fbWVudUJhclZpc2libGUgPSBtZW51QmFyVmlzaWJs
ZTsKLSAgICBtX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPEV3a1ZpZXdDYWxsYmFja3M6Ok1lbnVC
YXJWaXNpYmxlPigpLmNhbGwoJm1lbnVCYXJWaXNpYmxlKTsKKyAgICBtX3ZpZXctPnNtYXJ0Q2Fs
bGJhY2s8RXdrVmlld0NhbGxiYWNrczo6TWVudUJhclZpc2libGU+KCkuY2FsbCgmbWVudUJhclZp
c2libGUpOwogfQogCiB2b2lkIEV3a1dpbmRvd0ZlYXR1cmVzOjpzZXRSZXNpemFibGUoYm9vbCBy
ZXNpemFibGUpCiB7CiAgICAgbV9yZXNpemFibGUgPSByZXNpemFibGU7Ci0gICAgbV92aWV3SW1w
bC0+c21hcnRDYWxsYmFjazxFd2tWaWV3Q2FsbGJhY2tzOjpXaW5kb3dSZXNpemFibGU+KCkuY2Fs
bCgmcmVzaXphYmxlKTsKKyAgICBtX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8RXdrVmlld0NhbGxiYWNr
czo6V2luZG93UmVzaXphYmxlPigpLmNhbGwoJnJlc2l6YWJsZSk7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfd2luZG93X2ZlYXR1cmVzX3Rvb2xiYXJfdmlzaWJsZV9nZXQoY29uc3QgRXdrX1dpbmRvd19G
ZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlc19wcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaAppbmRl
eCBjNmJmODkyLi40NTMyZDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfd2luZG93X2ZlYXR1cmVzX3ByaXZhdGUuaApAQCAtMjYs
MjAgKzI2LDIwIEBACiAjaWZuZGVmIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCiAjZGVm
aW5lIGV3a193aW5kb3dfZmVhdHVyZXNfcHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1w
bC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5
LmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKICNpbmNsdWRlICJld2tfb2JqZWN0X3By
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKLWNsYXNzIEV3a1ZpZXdJbXBsOworY2xhc3MgRXdrVmlldzsKIAogY2xh
c3MgRXdrV2luZG93RmVhdHVyZXMgOiBwdWJsaWMgRXdrT2JqZWN0IHsKIHB1YmxpYzoKICAgICBF
V0tfT0JKRUNUX0RFQ0xBUkUoRXdrV2luZG93RmVhdHVyZXMpCiAKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gY3JlYXRlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFy
eSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gY3JlYXRlKFdlYktpdDo6SW1tdXRhYmxlRGljdGlv
bmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXcqIHZpZXdJbXBsKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBFd2tXaW5kb3dGZWF0dXJlcyh3aW5kb3dGZWF0dXJlcywgdmll
d0ltcGwpKTsKICAgICB9CkBAIC02OSwxMSArNjksMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
RnVsbFNjcmVlbihib29sIGZ1bGxTY3JlZW4pIHsgbV9mdWxsU2NyZWVuID0gZnVsbFNjcmVlbjsg
fQogCiBwcml2YXRlOgotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKFdlYktpdDo6SW1tdXRhYmxlRGlj
dGlvbmFyeSogd2luZG93RmVhdHVyZXMsIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCk7CisgICAgRXdr
V2luZG93RmVhdHVyZXMoV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJl
cywgRXdrVmlldyogdmlld0ltcGwpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDI+CiAgICAgc3RhdGljIFQxIGdldFdpbmRvd0ZlYXR1cmVWYWx1ZShXZWJLaXQ6OkltbXV0
YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzLCBjb25zdCBTdHJpbmcmIGZlYXR1cmVOYW1l
KTsKIAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsK
IAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2dlb21ldHJ5OwogICAgIGJvb2wgbV90b29sYmFy
VmlzaWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNr
aW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2lu
Z1N0b3JlQ2Fpcm8uY3BwCmluZGV4IDcxZjQ4ZTcuLmVmZDZkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtMzQs
NyArMzQsNyBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAKICNpZiBQTEFURk9STShFRkwpCi0jaW5j
bHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03MSw4ICs3MSw4IEBAIHZvaWQgQmFja2luZ1N0b3Jl
OjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRl
SW5mbyYKIAogI2lmIFBMQVRGT1JNKEVGTCkKICAgICAvLyBVcGRhdGUgZXdrX3ZpZXcgd2l0aCBu
ZXcgYmFja2luZ1N0b3JlIGltYWdlLgotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IEV3a1Zp
ZXdJbXBsOjpmcm9tRXZhc09iamVjdChtX3dlYlBhZ2VQcm94eS0+dmlld1dpZGdldCgpKTsKLSAg
ICB2aWV3SW1wbC0+c2V0SW1hZ2VEYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9i
YWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpKSwgbV9zaXplKTsKKyAgICBFd2tWaWV3KiB2aWV3
ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV93ZWJQYWdlUHJveHktPnZpZXdXaWRnZXQoKSk7
CisgICAgdmlldy0+c2V0SW1hZ2VEYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9i
YWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpKSwgbV9zaXplKTsKICNlbmRpZgogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5Q2xpZW50
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGll
bnRFZmwuY3BwCmluZGV4IDBlODAyNjguLmJlYWM3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuaCIKIAogI2lu
Y2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKLSNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgorI2luY2x1
ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0NvbnRl
eHQuaCIKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKQEAgLTU0LDcgKzU0LDcgQEAg
dm9pZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRh
dGEoV0tDb250ZXh0UmVmLCBXS1BhZ2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEV3
a05hdmlnYXRpb25EYXRhPiBuYXZpZ2F0aW9uRGF0YUV3ayA9IEV3a05hdmlnYXRpb25EYXRhOjpj
cmVhdGUobmF2aWdhdGlvbkRhdGEpOwotICAgIGhpc3RvcnlDbGllbnQtPm1fbmF2aWdhdGUoRXdr
Vmlld0ltcGw6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIG5hdmlnYXRpb25EYXRhRXdrLmdl
dCgpLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKKyAgICBoaXN0b3J5Q2xpZW50LT5tX25h
dmlnYXRlKEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIG5hdmlnYXRpb25EYXRh
RXdrLmdldCgpLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsKIH0KIAogdm9pZCBDb250ZXh0
SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwg
V0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25V
UkwsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC02Nyw3ICs2Nyw3IEBA
IHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChX
S0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwCiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNvdXJjZVVS
TFN0cmluZyhzb3VyY2VVUkwpOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvblVS
TFN0cmluZyhkZXN0aW5hdGlvblVSTCk7CiAKLSAgICBoaXN0b3J5Q2xpZW50LT5tX2NsaWVudFJl
ZGlyZWN0KEV3a1ZpZXdJbXBsOjp2aWV3RnJvbVBhZ2VWaWV3TWFwKHBhZ2UpLCBzb3VyY2VVUkxT
dHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5Q2xpZW50LT5tX3VzZXJEYXRhKTsK
KyAgICBoaXN0b3J5Q2xpZW50LT5tX2NsaWVudFJlZGlyZWN0KEV3a1ZpZXc6OnZpZXdGcm9tUGFn
ZVZpZXdNYXAocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhp
c3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50
RWZsOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFn
ZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBDb250ZXh0
SGlzdG9yeUNsaWVudEVmbDo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29udGV4dFJlZiwg
V0tQYWdlUmVmIHAKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJj
ZVVSTCk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3Rp
bmF0aW9uVVJMKTsKIAotICAgIGhpc3RvcnlDbGllbnQtPm1fc2VydmVyUmVkaXJlY3QoRXdrVmll
d0ltcGw6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGlu
YXRpb25VUkxTdHJpbmcsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlD
bGllbnQtPm1fc2VydmVyUmVkaXJlY3QoRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChwYWdl
KSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeUNsaWVudC0+
bV91c2VyRGF0YSk7CiB9CiAKIHZvaWQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmw6OmRpZFVwZGF0
ZUhpc3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0
aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpA
QCAtOTMsNyArOTMsNyBAQCB2b2lkIENvbnRleHRIaXN0b3J5Q2xpZW50RWZsOjpkaWRVcGRhdGVI
aXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZQogICAgIFdLRWluYVNoYXJl
ZFN0cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0cmlu
Z1VSTChVUkwpOwogCi0gICAgaGlzdG9yeUNsaWVudC0+bV90aXRsZVVwZGF0ZWQoRXdrVmlld0lt
cGw6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhp
c3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOworICAgIGhpc3RvcnlDbGllbnQtPm1fdGl0bGVVcGRh
dGVkKEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAocGFnZSksIHRpdGxlU3RyaW5nLCBzdHJp
bmdVUkwsIGhpc3RvcnlDbGllbnQtPm1fdXNlckRhdGEpOwogfQogCiB2b2lkIENvbnRleHRIaXN0
b3J5Q2xpZW50RWZsOjpwb3B1bGF0ZVZpc2l0ZWRMaW5rcyhXS0NvbnRleHRSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L0NvbnRleHRNZW51Q2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
Q29udGV4dE1lbnVDbGllbnRFZmwuY3BwCmluZGV4IDdhODYwMjguLjkxMjNkMjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dE1lbnVDbGllbnRFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4dE1lbnVDbGllbnRFZmwu
Y3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29u
dGV4dE1lbnVDbGllbnRFZmwuaCIKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVk
ZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV0tB
cnJheS5oIgogI2luY2x1ZGUgIldLUGFnZS5oIgpAQCAtNDAsMTAgKzQwLDEwIEBAIHN0YXRpYyBp
bmxpbmUgQ29udGV4dE1lbnVDbGllbnRFZmwqIHRvQ29udGV4dENsaWVudEVmbChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUNsaWVudEVm
bCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKIH0KIAotQ29udGV4dE1lbnVDbGll
bnRFZmw6OkNvbnRleHRNZW51Q2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6
IG1fdmlld0ltcGwodmlld0ltcGwpCitDb250ZXh0TWVudUNsaWVudEVmbDo6Q29udGV4dE1lbnVD
bGllbnRFZmwoRXdrVmlldyogdmlldykKKyAgICA6IG1fdmlldyh2aWV3KQogewotICAgIFdLUGFn
ZVJlZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+d2tQYWdlKCk7CisgICAgV0tQYWdlUmVmIHBhZ2VS
ZWYgPSBtX3ZpZXctPndrUGFnZSgpOwogICAgIEFTU0VSVChwYWdlUmVmKTsKIAogICAgIFdLUGFn
ZUNvbnRleHRNZW51Q2xpZW50IGNvbnRleHRNZW51Q2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVudEVmbC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVudEVmbC5oCmluZGV4IGIyOWU0ZWQu
LmIyMTJlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQ29udGV4
dE1lbnVDbGllbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0NvbnRl
eHRNZW51Q2xpZW50RWZsLmgKQEAgLTMzLDEzICszMywxMyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLWNsYXNzIEV3a1Zp
ZXdJbXBsOworY2xhc3MgRXdrVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENv
bnRleHRNZW51Q2xpZW50RWZsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDb250
ZXh0TWVudUNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDb250ZXh0TWVudUNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXcqIHZpZXdJ
bXBsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb250ZXh0TWVudUNsaWVu
dEVmbCh2aWV3SW1wbCkpOwogICAgIH0KQEAgLTQ3LDkgKzQ3LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYsIFdLQXJy
YXlSZWYgcHJvcG9zZWRNZW51LCBXS0FycmF5UmVmKiBuZXdNZW51LCBXS0hpdFRlc3RSZXN1bHRS
ZWYsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAKIHByaXZh
dGU6Ci0gICAgZXhwbGljaXQgQ29udGV4dE1lbnVDbGllbnRFZmwoRXdrVmlld0ltcGwqKTsKKyAg
ICBleHBsaWNpdCBDb250ZXh0TWVudUNsaWVudEVmbChFd2tWaWV3Kik7CiAKLSAgICBFd2tWaWV3
SW1wbCogbV92aWV3SW1wbDsKKyAgICBFd2tWaWV3KiBtX3ZpZXc7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRG93
bmxvYWRNYW5hZ2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRG93bmxv
YWRNYW5hZ2VyRWZsLmNwcAppbmRleCA5M2E3ZGIwLi40NTcwYWFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyRWZsLmgiCiAKICNpbmNsdWRlICJE
b3dubG9hZFByb3h5LmgiCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tW
aWV3LmgiCiAjaW5jbHVkZSAiV0tDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNp
bmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCkBAIC01Miw3ICs1Miw3IEBAIFdLU3RyaW5n
UmVmIERvd25sb2FkTWFuYWdlckVmbDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmls
ZW5hbWUoV0tDb250ZXh0CiAKICAgICAvLyBXZSBzZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFs
IG9uIHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2UgaGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UK
ICAgICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUuCi0gICAgZG93bmxvYWQtPnZpZXdJ
bXBsKCktPnNtYXJ0Q2FsbGJhY2s8RG93bmxvYWRKb2JSZXF1ZXN0ZWQ+KCkuY2FsbChkb3dubG9h
ZCk7CisgICAgZG93bmxvYWQtPnZpZXcoKS0+c21hcnRDYWxsYmFjazxEb3dubG9hZEpvYlJlcXVl
c3RlZD4oKS5jYWxsKGRvd25sb2FkKTsKIAogICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRo
ZSBkZXN0aW5hdGlvbiB0byBiZSBhIFVSTC4KICAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBBU0NJ
SUxpdGVyYWwoImZpbGU6Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZG93bmxvYWQtPmRlc3RpbmF0
aW9uKCkpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIERvd25sb2FkTWFuYWdlckVmbDo6ZGlkRmFp
bChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tFcnJvcgogICAgIE93
blB0cjxFd2tFcnJvcj4gZXdrRXJyb3IgPSBFd2tFcnJvcjo6Y3JlYXRlKGVycm9yKTsKICAgICBk
b3dubG9hZC0+c2V0U3RhdGUoRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQpOwogICAgIEV3
a19Eb3dubG9hZF9Kb2JfRXJyb3IgZG93bmxvYWRFcnJvciA9IHsgZG93bmxvYWQsIGV3a0Vycm9y
LmdldCgpIH07Ci0gICAgZG93bmxvYWQtPnZpZXdJbXBsKCktPnNtYXJ0Q2FsbGJhY2s8RG93bmxv
YWRKb2JGYWlsZWQ+KCkuY2FsbCgmZG93bmxvYWRFcnJvcik7CisgICAgZG93bmxvYWQtPnZpZXco
KS0+c21hcnRDYWxsYmFjazxEb3dubG9hZEpvYkZhaWxlZD4oKS5jYWxsKCZkb3dubG9hZEVycm9y
KTsKICAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihkb3dubG9hZElk
KTsKIH0KIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpkaWRD
YW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0CiAgICAg
QVNTRVJUKGRvd25sb2FkKTsKIAogICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9XTkxPQURf
Sk9CX1NUQVRFX0NBTkNFTExFRCk7Ci0gICAgZG93bmxvYWQtPnZpZXdJbXBsKCktPnNtYXJ0Q2Fs
bGJhY2s8RG93bmxvYWRKb2JDYW5jZWxsZWQ+KCkuY2FsbChkb3dubG9hZCk7CisgICAgZG93bmxv
YWQtPnZpZXcoKS0+c21hcnRDYWxsYmFjazxEb3dubG9hZEpvYkNhbmNlbGxlZD4oKS5jYWxsKGRv
d25sb2FkKTsKICAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihkb3du
bG9hZElkKTsKIH0KIApAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyRWZs
OjpkaWRGaW5pc2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0
CiAgICAgQVNTRVJUKGRvd25sb2FkKTsKIAogICAgIGRvd25sb2FkLT5zZXRTdGF0ZShFV0tfRE9X
TkxPQURfSk9CX1NUQVRFX0ZJTklTSEVEKTsKLSAgICBkb3dubG9hZC0+dmlld0ltcGwoKS0+c21h
cnRDYWxsYmFjazxEb3dubG9hZEpvYkZpbmlzaGVkPigpLmNhbGwoZG93bmxvYWQpOworICAgIGRv
d25sb2FkLT52aWV3KCktPnNtYXJ0Q2FsbGJhY2s8RG93bmxvYWRKb2JGaW5pc2hlZD4oKS5jYWxs
KGRvd25sb2FkKTsKICAgICBkb3dubG9hZE1hbmFnZXItPnVucmVnaXN0ZXJEb3dubG9hZEpvYihk
b3dubG9hZElkKTsKIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIERvd25sb2FkTWFuYWdlckVmbDo6
fkRvd25sb2FkTWFuYWdlckVmbCgpCiAgICAgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQodG9B
UEkobV9jb250ZXh0LT53ZWJDb250ZXh0KCkuZ2V0KCkpLCAwKTsKIH0KIAotdm9pZCBEb3dubG9h
ZE1hbmFnZXJFZmw6OnJlZ2lzdGVyRG93bmxvYWQoRG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV3
a1ZpZXdJbXBsKiB2aWV3SW1wbCkKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyRWZsOjpyZWdpc3RlckRv
d25sb2FkKERvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFd2tWaWV3KiB2aWV3SW1wbCkKIHsKICAg
ICB1aW50NjRfdCBkb3dubG9hZElkID0gZG93bmxvYWQtPmRvd25sb2FkSUQoKTsKICAgICBpZiAo
bV9kb3dubG9hZEpvYnMuY29udGFpbnMoZG93bmxvYWRJZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFuYWdlckVmbC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9Eb3dubG9hZE1hbmFnZXJFZmwuaAppbmRleCBkMzcyOGMzLi4xNGJk
NTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Rvd25sb2FkTWFu
YWdlckVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRG93bmxvYWRNYW5h
Z2VyRWZsLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgfkRvd25sb2FkTWFuYWdl
ckVmbCgpOwogCi0gICAgdm9pZCByZWdpc3RlckRvd25sb2FkKERvd25sb2FkUHJveHkqLCBFd2tW
aWV3SW1wbCopOworICAgIHZvaWQgcmVnaXN0ZXJEb3dubG9hZChEb3dubG9hZFByb3h5KiwgRXdr
VmlldyopOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERvd25sb2FkTWFuYWdlckVmbChFd2tD
b250ZXh0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0ZpbmRD
bGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5kQ2xpZW50RWZs
LmNwcAppbmRleCA1YjJlODhlLi4zMzRiNGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL0ZpbmRDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvRmluZENsaWVudEVmbC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3
SW1wbC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS1BhZ2UuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEV3a1ZpZXdDYWxsYmFja3M7CkBAIC00MiwyMCArNDIsMjAgQEAgc3RhdGlj
IGlubGluZSBGaW5kQ2xpZW50RWZsKiB0b0ZpbmRDbGllbnRFZmwoY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHZvaWQgRmluZENsaWVudEVmbDo6ZGlkRmluZFN0cmluZyhXS1BhZ2VSZWYsIFdLU3Ry
aW5nUmVmLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewog
ICAgIEZpbmRDbGllbnRFZmwqIGZpbmRDbGllbnQgPSB0b0ZpbmRDbGllbnRFZmwoY2xpZW50SW5m
byk7Ci0gICAgZmluZENsaWVudC0+bV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxUZXh0Rm91bmQ+
KCkuY2FsbCgmbWF0Y2hDb3VudCk7CisgICAgZmluZENsaWVudC0+bV92aWV3LT5zbWFydENhbGxi
YWNrPFRleHRGb3VuZD4oKS5jYWxsKCZtYXRjaENvdW50KTsKIH0KIAogdm9pZCBGaW5kQ2xpZW50
RWZsOjpkaWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCiB7CiAgICAgRmluZENsaWVudEVmbCogZmluZENsaWVudCA9IHRvRmlu
ZENsaWVudEVmbChjbGllbnRJbmZvKTsKICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKLSAg
ICBmaW5kQ2xpZW50LT5tX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPFRleHRGb3VuZD4oKS5jYWxs
KCZtYXRjaENvdW50KTsKKyAgICBmaW5kQ2xpZW50LT5tX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8VGV4
dEZvdW5kPigpLmNhbGwoJm1hdGNoQ291bnQpOwogfQogCi1GaW5kQ2xpZW50RWZsOjpGaW5kQ2xp
ZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwodmlld0ltcGwp
CitGaW5kQ2xpZW50RWZsOjpGaW5kQ2xpZW50RWZsKEV3a1ZpZXcqIHZpZXdJbXBsKQorICAgIDog
bV92aWV3KHZpZXdJbXBsKQogewotICAgIFdLUGFnZVJlZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+
d2tQYWdlKCk7CisgICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXctPndrUGFnZSgpOwogICAg
IEFTU0VSVChwYWdlUmVmKTsKIAogICAgIFdLUGFnZUZpbmRDbGllbnQgZmluZENsaWVudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRmluZENsaWVudEVmbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5kQ2xpZW50RWZsLmgKaW5kZXggMjc0NDYw
Yi4uZGQxMmUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5k
Q2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9GaW5kQ2xpZW50
RWZsLmgKQEAgLTMwLDI0ICszMCwyNCBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBF
d2tWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRmluZENsaWVudEVmbCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RmluZENsaWVudEVmbD4gY3JlYXRlKEV3a1Zp
ZXdJbXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxGaW5kQ2xpZW50RWZsPiBj
cmVhdGUoRXdrVmlldyogdmlld0ltcGwpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEZpbmRDbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhw
bGljaXQgRmluZENsaWVudEVmbChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IEZpbmRDbGll
bnRFZmwoRXdrVmlldyopOwogCiAgICAgc3RhdGljIHZvaWQgZGlkRmluZFN0cmluZyhXS1BhZ2VS
ZWYsIFdLU3RyaW5nUmVmLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiwgV0tT
dHJpbmdSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCi0gICAgRXdrVmlld0ltcGwqIG1f
dmlld0ltcGw7CisgICAgRXdrVmlldyogbV92aWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0Zvcm1DbGllbnRF
ZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZsLmNwcApp
bmRleCAwMDFiYmE0Li4xNTViZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL0Zvcm1DbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvRm9ybUNsaWVudEVmbC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGb3JtQ2xpZW50RWZsLmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1wbC5o
IgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXS1BhZ2UuaCIKICNpbmNsdWRlICJl
d2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfcHJpdmF0ZS5oIgogCkBAIC00NCwxMyArNDQsMTMg
QEAgdm9pZCBGb3JtQ2xpZW50RWZsOjp3aWxsU3VibWl0Rm9ybShXS1BhZ2VSZWYsIFdLRnJhbWVS
ZWYgLypmcmFtZSovLCBXS0ZyYW1lUmVmIC8KICAgICBGb3JtQ2xpZW50RWZsKiBmb3JtQ2xpZW50
ID0gdG9Gb3JtQ2xpZW50RWZsKGNsaWVudEluZm8pOwogCiAgICAgUmVmUHRyPEV3a0Zvcm1TdWJt
aXNzaW9uUmVxdWVzdD4gcmVxdWVzdCA9IEV3a0Zvcm1TdWJtaXNzaW9uUmVxdWVzdDo6Y3JlYXRl
KHZhbHVlcywgbGlzdGVuZXIpOwotICAgIGZvcm1DbGllbnQtPm1fdmlld0ltcGwtPnNtYXJ0Q2Fs
bGJhY2s8TmV3Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0PigpLmNhbGwocmVxdWVzdC5nZXQoKSk7Cisg
ICAgZm9ybUNsaWVudC0+bV92aWV3LT5zbWFydENhbGxiYWNrPE5ld0Zvcm1TdWJtaXNzaW9uUmVx
dWVzdD4oKS5jYWxsKHJlcXVlc3QuZ2V0KCkpOwogfQogCi1Gb3JtQ2xpZW50RWZsOjpGb3JtQ2xp
ZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwodmlld0ltcGwp
CitGb3JtQ2xpZW50RWZsOjpGb3JtQ2xpZW50RWZsKEV3a1ZpZXcqIHZpZXdJbXBsKQorICAgIDog
bV92aWV3KHZpZXdJbXBsKQogewotICAgIFdLUGFnZVJlZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+
d2tQYWdlKCk7CisgICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXctPndrUGFnZSgpOwogICAg
IEFTU0VSVChwYWdlUmVmKTsKIAogICAgIFdLUGFnZUZvcm1DbGllbnQgZm9ybUNsaWVudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRm9ybUNsaWVudEVmbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZsLmgKaW5kZXggNjZlMDYw
Yy4uNjY2YzQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3Jt
Q2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50
RWZsLmgKQEAgLTI5LDIzICsyOSwyMyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBF
d2tWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRm9ybUNsaWVudEVmbCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Rm9ybUNsaWVudEVmbD4gY3JlYXRlKEV3a1Zp
ZXdJbXBsKiB2aWV3SW1wbCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxGb3JtQ2xpZW50RWZsPiBj
cmVhdGUoRXdrVmlldyogdmlld0ltcGwpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEZvcm1DbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhw
bGljaXQgRm9ybUNsaWVudEVmbChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IEZvcm1DbGll
bnRFZmwoRXdrVmlldyopOwogCiAgICAgc3RhdGljIHZvaWQgd2lsbFN1Ym1pdEZvcm0oV0tQYWdl
UmVmLCBXS0ZyYW1lUmVmLCBXS0ZyYW1lUmVmLCBXS0RpY3Rpb25hcnlSZWYgdmFsdWVzLCBXS1R5
cGVSZWYgdXNlckRhdGEsIFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CiAKLSAgICBFd2tWaWV3SW1wbCogbV92aWV3SW1wbDsKKyAgICBFd2tWaWV3
KiBtX3ZpZXc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvSW5wdXRNZXRob2RDb250ZXh0RWZsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvSW5wdXRNZXRob2RDb250ZXh0RWZsLmNwcAppbmRleCA1
MzFlM2JlLi5kYTUyOTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L0lucHV0TWV0aG9kQ29udGV4dEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9JbnB1dE1ldGhvZENvbnRleHRFZmwuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCiAKLSNpbmNs
dWRlICJFd2tWaWV3SW1wbC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5jbHVkZSA8RWNvcmVfSU1G
X0V2YXMuaD4KQEAgLTMwLDggKzMwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1JbnB1dE1ldGhvZENvbnRleHRFZmw6OklucHV0TWV0aG9kQ29u
dGV4dEVmbChFd2tWaWV3SW1wbCogdmlld0ltcGwsIFBhc3NPd25QdHI8RWNvcmVfSU1GX0NvbnRl
eHQ+IGNvbnRleHQpCi0gICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQorSW5wdXRNZXRob2RDb250
ZXh0RWZsOjpJbnB1dE1ldGhvZENvbnRleHRFZmwoRXdrVmlldyogdmlldywgUGFzc093blB0cjxF
Y29yZV9JTUZfQ29udGV4dD4gY29udGV4dCkKKyAgICA6IG1fdmlldyh2aWV3KQogICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2ZvY3VzZWQoZmFsc2UpCiB7CkBAIC01MCwxNCArNTAs
MTQgQEAgdm9pZCBJbnB1dE1ldGhvZENvbnRleHRFZmw6Om9uSU1GSW5wdXRTZXF1ZW5jZUNvbXBs
ZXRlKHZvaWQqIGRhdGEsIEVjb3JlX0lNRl9Db24KICAgICBpZiAoIWV2ZW50SW5mbyB8fCAhaW5w
dXRNZXRob2RDb250ZXh0LT5tX2ZvY3VzZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlucHV0
TWV0aG9kQ29udGV4dC0+bV92aWV3SW1wbC0+cGFnZSgpLT5jb25maXJtQ29tcG9zaXRpb24oU3Ry
aW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjaGFyKj4oZXZlbnRJbmZvKSkpOworICAgIGlucHV0
TWV0aG9kQ29udGV4dC0+bV92aWV3LT5wYWdlKCktPmNvbmZpcm1Db21wb3NpdGlvbihTdHJpbmc6
OmZyb21VVEY4KHN0YXRpY19jYXN0PGNoYXIqPihldmVudEluZm8pKSk7CiB9CiAKIHZvaWQgSW5w
dXRNZXRob2RDb250ZXh0RWZsOjpvbklNRlByZWVkaXRTZXF1ZW5jZUNoYW5nZWQodm9pZCogZGF0
YSwgRWNvcmVfSU1GX0NvbnRleHQqIGNvbnRleHQsIHZvaWQqKQogewogICAgIElucHV0TWV0aG9k
Q29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SW5wdXRNZXRob2RD
b250ZXh0RWZsKj4oZGF0YSk7CiAKLSAgICBpZiAoIWlucHV0TWV0aG9kQ29udGV4dC0+bV92aWV3
SW1wbC0+cGFnZSgpLT5mb2N1c2VkRnJhbWUoKSB8fCAhaW5wdXRNZXRob2RDb250ZXh0LT5tX2Zv
Y3VzZWQpCisgICAgaWYgKCFpbnB1dE1ldGhvZENvbnRleHQtPm1fdmlldy0+cGFnZSgpLT5mb2N1
c2VkRnJhbWUoKSB8fCAhaW5wdXRNZXRob2RDb250ZXh0LT5tX2ZvY3VzZWQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGNoYXIqIGJ1ZmZlciA9IDA7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW5w
dXRNZXRob2RDb250ZXh0RWZsOjpvbklNRlByZWVkaXRTZXF1ZW5jZUNoYW5nZWQodm9pZCogZGF0
YSwgRWNvcmVfSU1GX0NvCiAgICAgZnJlZShidWZmZXIpOwogICAgIFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluZT4gdW5kZXJsaW5lczsKICAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlv
blVuZGVybGluZSgwLCBwcmVlZGl0U3RyaW5nLmxlbmd0aCgpLCBDb2xvcigwLCAwLCAwKSwgZmFs
c2UpKTsKLSAgICBpbnB1dE1ldGhvZENvbnRleHQtPm1fdmlld0ltcGwtPnBhZ2UoKS0+c2V0Q29t
cG9zaXRpb24ocHJlZWRpdFN0cmluZywgdW5kZXJsaW5lcywgMCk7CisgICAgaW5wdXRNZXRob2RD
b250ZXh0LT5tX3ZpZXctPnBhZ2UoKS0+c2V0Q29tcG9zaXRpb24ocHJlZWRpdFN0cmluZywgdW5k
ZXJsaW5lcywgMCk7CiB9CiAKIFBhc3NPd25QdHI8RWNvcmVfSU1GX0NvbnRleHQ+IElucHV0TWV0
aG9kQ29udGV4dEVmbDo6Y3JlYXRlSU1GQ29udGV4dChFdmFzKiBjYW52YXMpCkBAIC0xMDcsNyAr
MTA3LDcgQEAgdm9pZCBJbnB1dE1ldGhvZENvbnRleHRFZmw6OnVwZGF0ZVRleHRJbnB1dFN0YXRl
KCkKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRWRp
dG9yU3RhdGUmIGVkaXRvciA9IG1fdmlld0ltcGwtPnBhZ2UoKS0+ZWRpdG9yU3RhdGUoKTsKKyAg
ICBjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yID0gbV92aWV3LT5wYWdlKCktPmVkaXRvclN0YXRl
KCk7CiAKICAgICBpZiAoZWRpdG9yLmlzQ29udGVudEVkaXRhYmxlKSB7CiAgICAgICAgIGlmICht
X2ZvY3VzZWQpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBJbnB1dE1ldGhvZENvbnRleHRFZmw6
OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAoZWRpdG9yLmhhc0NvbXBvc2l0aW9uKQotICAgICAgICAgICAgbV92aWV3SW1wbC0+cGFnZSgp
LT5jYW5jZWxDb21wb3NpdGlvbigpOworICAgICAgICAgICAgbV92aWV3LT5wYWdlKCktPmNhbmNl
bENvbXBvc2l0aW9uKCk7CiAKICAgICAgICAgbV9mb2N1c2VkID0gZmFsc2U7CiAgICAgICAgIGVj
b3JlX2ltZl9jb250ZXh0X3Jlc2V0KG1fY29udGV4dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0lucHV0TWV0aG9kQ29udGV4dEVmbC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9JbnB1dE1ldGhvZENvbnRleHRFZmwuaAppbmRleCBhYWY1
MWI5Li4xMmRlMGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0lu
cHV0TWV0aG9kQ29udGV4dEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
SW5wdXRNZXRob2RDb250ZXh0RWZsLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAotY2xhc3MgRXdrVmlld0lt
cGw7CitjbGFzcyBFd2tWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzQsNyArMzQs
NyBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIElucHV0TWV0aG9kQ29udGV4dEVmbCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRNZXRob2RDb250ZXh0RWZsPiBj
cmVhdGUoRXdrVmlld0ltcGwqIHZpZXdJbXBsLCBFdmFzKiBjYW52YXMpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8SW5wdXRNZXRob2RDb250ZXh0RWZsPiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGws
IEV2YXMqIGNhbnZhcykKICAgICB7CiAgICAgICAgIE93blB0cjxFY29yZV9JTUZfQ29udGV4dD4g
Y29udGV4dCA9IGNyZWF0ZUlNRkNvbnRleHQoY2FudmFzKTsKICAgICAgICAgaWYgKCFjb250ZXh0
KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0
YXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKEV3a1ZpZXdJbXBs
KiwgUGFzc093blB0cjxFY29yZV9JTUZfQ29udGV4dD4pOworICAgIElucHV0TWV0aG9kQ29udGV4
dEVmbChFd2tWaWV3KiwgUGFzc093blB0cjxFY29yZV9JTUZfQ29udGV4dD4pOwogCiAgICAgc3Rh
dGljIFBhc3NPd25QdHI8RWNvcmVfSU1GX0NvbnRleHQ+IGNyZWF0ZUlNRkNvbnRleHQoRXZhcyog
Y2FudmFzKTsKICAgICBzdGF0aWMgdm9pZCBvbklNRklucHV0U2VxdWVuY2VDb21wbGV0ZSh2b2lk
KiBkYXRhLCBFY29yZV9JTUZfQ29udGV4dCosIHZvaWQqIGV2ZW50SW5mbyk7CiAgICAgc3RhdGlj
IHZvaWQgb25JTUZQcmVlZGl0U2VxdWVuY2VDaGFuZ2VkKHZvaWQqIGRhdGEsIEVjb3JlX0lNRl9D
b250ZXh0Kiwgdm9pZCogZXZlbnRJbmZvKTsKIAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBs
OworICAgIEV3a1ZpZXcqIG1fdmlldzsKICAgICBPd25QdHI8RWNvcmVfSU1GX0NvbnRleHQ+IG1f
Y29udGV4dDsKICAgICBib29sIG1fZm9jdXNlZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCmluZGV4IDI3M2QwNjQuLmY1MDg0NDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiRXdrVmll
d0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250
ZXh0RWZsLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJOYXRp
dmVXZWJLZXlib2FyZEV2ZW50LmgiCkBAIC01Miw4ICs1Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBF
d2tWaWV3Q2FsbGJhY2tzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFnZUNsaWVudEJhc2U6
OlBhZ2VDbGllbnRCYXNlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwo
dmlld0ltcGwpCitQYWdlQ2xpZW50QmFzZTo6UGFnZUNsaWVudEJhc2UoRXdrVmlldyogdmlldykK
KyAgICA6IG1fdmlldyh2aWV3KQogewogfQogCkBAIC02MSwyMSArNjEsMjEgQEAgUGFnZUNsaWVu
dEJhc2U6On5QYWdlQ2xpZW50QmFzZSgpCiB7CiB9CiAKLUV3a1ZpZXdJbXBsKiBQYWdlQ2xpZW50
QmFzZTo6dmlld0ltcGwoKSBjb25zdAorRXdrVmlldyogUGFnZUNsaWVudEJhc2U6OnZpZXcoKSBj
b25zdAogewotICAgIHJldHVybiBtX3ZpZXdJbXBsOworICAgIHJldHVybiBtX3ZpZXc7CiB9CiAK
IC8vIFBhZ2VDbGllbnQKIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEJh
c2U6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQogewotICAgIE93blB0cjxEcmF3aW5nQXJlYVBy
b3h5PiBkcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhUHJveHlJbXBsOjpjcmVhdGUobV92aWV3SW1w
bC0+cGFnZSgpKTsKKyAgICBPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gZHJhd2luZ0FyZWEgPSBE
cmF3aW5nQXJlYVByb3h5SW1wbDo6Y3JlYXRlKG1fdmlldy0+cGFnZSgpKTsKICAgICByZXR1cm4g
ZHJhd2luZ0FyZWEucmVsZWFzZSgpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRWaWV3
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgbV92aWV3
SW1wbC0+dXBkYXRlKHJlY3QpOworICAgIG1fdmlldy0+dXBkYXRlKHJlY3QpOwogfQogCiB2b2lk
IFBhZ2VDbGllbnRCYXNlOjpkaXNwbGF5VmlldygpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgUGFn
ZUNsaWVudEJhc2U6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVj
dCwgY29uc3QgV2ViQ29yCiAKIFdlYkNvcmU6OkludFNpemUgUGFnZUNsaWVudEJhc2U6OnZpZXdT
aXplKCkKIHsKLSAgICByZXR1cm4gbV92aWV3SW1wbC0+c2l6ZSgpOworICAgIHJldHVybiBtX3Zp
ZXctPnNpemUoKTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50QmFzZTo6aXNWaWV3V2luZG93QWN0aXZl
KCkKQEAgLTEwMSwxMiArMTAxLDEyIEBAIGJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld1dpbmRv
d0FjdGl2ZSgpCiAKIGJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld0ZvY3VzZWQoKQogewotICAg
IHJldHVybiBtX3ZpZXdJbXBsLT5pc0ZvY3VzZWQoKTsKKyAgICByZXR1cm4gbV92aWV3LT5pc0Zv
Y3VzZWQoKTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50QmFzZTo6aXNWaWV3VmlzaWJsZSgpCiB7Ci0g
ICAgcmV0dXJuIG1fdmlld0ltcGwtPmlzVmlzaWJsZSgpOworICAgIHJldHVybiBtX3ZpZXctPmlz
VmlzaWJsZSgpOwogfQogCiBib29sIFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCkBA
IC0xMTgsMzEgKzExOCwzMSBAQCBib29sIFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygp
CiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpwcm9jZXNzRGlkQ3Jhc2goKQogewogICAgIC8vIENoZWNr
IGlmIGxvYWRpbmcgd2FzIG9uZ29pbmcsIHdoZW4gd2ViIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBk
b3VibGUgbG9hZFByb2dyZXNzID0gZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQobV92aWV3SW1w
bC0+dmlldygpKTsKKyAgICBkb3VibGUgbG9hZFByb2dyZXNzID0gZXdrX3ZpZXdfbG9hZF9wcm9n
cmVzc19nZXQobV92aWV3LT52aWV3KCkpOwogICAgIGlmIChsb2FkUHJvZ3Jlc3MgPj0gMCAmJiBs
b2FkUHJvZ3Jlc3MgPCAxKSB7CiAgICAgICAgIGxvYWRQcm9ncmVzcyA9IDE7Ci0gICAgICAgIG1f
dmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8TG9hZFByb2dyZXNzPigpLmNhbGwoJmxvYWRQcm9ncmVz
cyk7CisgICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxMb2FkUHJvZ3Jlc3M+KCkuY2FsbCgm
bG9hZFByb2dyZXNzKTsKICAgICB9CiAKLSAgICBtX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPFRv
b2x0aXBUZXh0VW5zZXQ+KCkuY2FsbCgpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxUb29s
dGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKIAogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAg
IG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8V2ViUHJvY2Vzc0NyYXNoZWQ+KCkuY2FsbCgmaGFu
ZGxlZCk7CisgICAgbV92aWV3LT5zbWFydENhbGxiYWNrPFdlYlByb2Nlc3NDcmFzaGVkPigpLmNh
bGwoJmhhbmRsZWQpOwogCiAgICAgaWYgKCFoYW5kbGVkKSB7Ci0gICAgICAgIENTdHJpbmcgdXJs
ID0gbV92aWV3SW1wbC0+cGFnZSgpLT51cmxBdFByb2Nlc3NFeGl0KCkudXRmOCgpOworICAgICAg
ICBDU3RyaW5nIHVybCA9IG1fdmlldy0+cGFnZSgpLT51cmxBdFByb2Nlc3NFeGl0KCkudXRmOCgp
OwogICAgICAgICBXQVJOKCJXQVJOSU5HOiBUaGUgd2ViIHByb2Nlc3MgZXhwZXJpZW5jZWQgYSBj
cmFzaCBvbiAnJXMnLlxuIiwgdXJsLmRhdGEoKSk7CiAKICAgICAgICAgLy8gRGlzcGxheSBhbiBl
cnJvciBwYWdlCi0gICAgICAgIGV3a192aWV3X2h0bWxfc3RyaW5nX2xvYWQobV92aWV3SW1wbC0+
dmlldygpLCAiVGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOwor
ICAgICAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKG1fdmlldy0+dmlldygpLCAiVGhlIHdl
YiBwcm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOwogICAgIH0KIH0KIAogdm9p
ZCBQYWdlQ2xpZW50QmFzZTo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKIHsKLSAgICBjb25zdCBjaGFy
KiB0aGVtZVBhdGggPSBtX3ZpZXdJbXBsLT50aGVtZVBhdGgoKTsKKyAgICBjb25zdCBjaGFyKiB0
aGVtZVBhdGggPSBtX3ZpZXctPnRoZW1lUGF0aCgpOwogICAgIGlmICh0aGVtZVBhdGgpCi0gICAg
ICAgIG1fdmlld0ltcGwtPnBhZ2UoKS0+c2V0VGhlbWVQYXRoKHRoZW1lUGF0aCk7CisgICAgICAg
IG1fdmlldy0+cGFnZSgpLT5zZXRUaGVtZVBhdGgodGhlbWVQYXRoKTsKIH0KIAogdm9pZCBQYWdl
Q2xpZW50QmFzZTo6cGFnZUNsb3NlZCgpCkBAIC0xNTMsMTQgKzE1MywxNCBAQCB2b2lkIFBhZ2VD
bGllbnRCYXNlOjpwYWdlQ2xvc2VkKCkKIHZvaWQgUGFnZUNsaWVudEJhc2U6OnRvb2xUaXBDaGFu
Z2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkKIHsKICAgICBpZiAo
bmV3VG9vbFRpcC5pc0VtcHR5KCkpCi0gICAgICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8
VG9vbHRpcFRleHRVbnNldD4oKS5jYWxsKCk7CisgICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFj
azxUb29sdGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKICAgICBlbHNlCi0gICAgICAgIG1fdmlld0lt
cGwtPnNtYXJ0Q2FsbGJhY2s8VG9vbHRpcFRleHRTZXQ+KCkuY2FsbChuZXdUb29sVGlwKTsKKyAg
ICAgICAgbV92aWV3LT5zbWFydENhbGxiYWNrPFRvb2x0aXBUZXh0U2V0PigpLmNhbGwobmV3VG9v
bFRpcCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEJhc2U6OnNldEN1cnNvcihjb25zdCBDdXJzb3Im
IGN1cnNvcikKIHsKLSAgICBtX3ZpZXdJbXBsLT5zZXRDdXJzb3IoY3Vyc29yKTsKKyAgICBtX3Zp
ZXctPnNldEN1cnNvcihjdXJzb3IpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRDdXJz
b3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkKQEAgLTIxNCwxMiArMjE0LDEyIEBAIHZvaWQg
UGFnZUNsaWVudEJhc2U6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2
ZW50JiwgYm9vbCAvKndhc0V2CiAKIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VD
bGllbnRCYXNlOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0g
ICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5RWZsOjpjcmVhdGUobV92aWV3SW1wbCwgcGFnZSk7
CisgICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5RWZsOjpjcmVhdGUobV92aWV3LCBwYWdlKTsK
IH0KIAogUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50QmFzZTo6Y3Jl
YXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvbnRleHRNZW51UHJveHlFZmw6OmNyZWF0ZShtX3ZpZXdJbXBsLCBwYWdlKTsKKyAgICByZXR1
cm4gV2ViQ29udGV4dE1lbnVQcm94eUVmbDo6Y3JlYXRlKG1fdmlldywgcGFnZSk7CiB9CiAKICNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKQEAgLTIzOCwxMiArMjM4LDEyIEBAIHZvaWQgUGFn
ZUNsaWVudEJhc2U6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwg
Ym9vbCwgYm9vbCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFBhZ2VD
bGllbnRCYXNlOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKQogewotICAgIG1fdmlld0ltcGwtPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKTsKKyAgICBtX3ZpZXctPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsK
IH0KIAogdm9pZCBQYWdlQ2xpZW50QmFzZTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KCkKIHsKLSAgICBtX3ZpZXdJbXBsLT5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsK
KyAgICBtX3ZpZXctPmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogfQogCiB2b2lk
IFBhZ2VDbGllbnRCYXNlOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0JikKQEAgLTI5MCwxNSArMjkwLDE1IEBAIHZvaWQgUGFnZUNsaWVudEJh
c2U6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5n
JiwgRmluCiAKIHZvaWQgUGFnZUNsaWVudEJhc2U6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKIHsK
LSAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9IG1fdmlld0lt
cGwtPmlucHV0TWV0aG9kQ29udGV4dCgpOworICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5w
dXRNZXRob2RDb250ZXh0ID0gbV92aWV3LT5pbnB1dE1ldGhvZENvbnRleHQoKTsKICAgICBpZiAo
aW5wdXRNZXRob2RDb250ZXh0KQogICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPnVwZGF0ZVRl
eHRJbnB1dFN0YXRlKCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEJhc2U6OmhhbmRsZURvd25sb2Fk
UmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKIHsKLSAgICBFd2tDb250ZXh0KiBjb250
ZXh0ID0gbV92aWV3SW1wbC0+ZXdrQ29udGV4dCgpOwotICAgIGNvbnRleHQtPmRvd25sb2FkTWFu
YWdlcigpLT5yZWdpc3RlckRvd25sb2FkKGRvd25sb2FkLCBtX3ZpZXdJbXBsKTsKKyAgICBFd2tD
b250ZXh0KiBjb250ZXh0ID0gbV92aWV3LT5ld2tDb250ZXh0KCk7CisgICAgY29udGV4dC0+ZG93
bmxvYWRNYW5hZ2VyKCktPnJlZ2lzdGVyRG93bmxvYWQoZG93bmxvYWQsIG1fdmlldyk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Q
YWdlQ2xpZW50QmFzZS5oCmluZGV4IDk3MGQ3YWYuLjRhMDIyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNp
bmNsdWRlICJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSA8RXZhcy5oPgogCi1jbGFzcyBFd2tWaWV3
SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00MiwxMCAr
NDIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJikgPSAwOwogCi0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsKCkgY29uc3Q7Cisg
ICAgRXdrVmlldyogdmlldygpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGFn
ZUNsaWVudEJhc2UoRXdrVmlld0ltcGwqKTsKKyAgICBleHBsaWNpdCBQYWdlQ2xpZW50QmFzZShF
d2tWaWV3Kik7CiAKICAgICAvLyBQYWdlQ2xpZW50CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPERy
YXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKQEAgLTExNiw3ICsxMTYs
NyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIEV3a1ZpZXdJbXBsKiBt
X3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKICAgICBEZWZhdWx0VW5kb0NvbnRyb2xs
ZXIgbV91bmRvQ29udHJvbGxlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmNwcAppbmRleCA3NGQwMGNiLi4yNjBm
MTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRE
ZWZhdWx0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xp
ZW50RGVmYXVsdEltcGwuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3
SW1wbC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgogCiAj
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC00MCw4ICs0MCw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFnZUNsaWVu
dERlZmF1bHRJbXBsOjpQYWdlQ2xpZW50RGVmYXVsdEltcGwoRXdrVmlld0ltcGwqIHZpZXdJbXBs
KQotICAgIDogUGFnZUNsaWVudEJhc2Uodmlld0ltcGwpCitQYWdlQ2xpZW50RGVmYXVsdEltcGw6
OlBhZ2VDbGllbnREZWZhdWx0SW1wbChFd2tWaWV3KiB2aWV3KQorICAgIDogUGFnZUNsaWVudEJh
c2UodmlldykKIHsKIH0KIApAQCAtNTcsOCArNTcsOCBAQCB2b2lkIFBhZ2VDbGllbnREZWZhdWx0
SW1wbDo6dXBkYXRlVmlld3BvcnRTaXplKCkKIHsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKICAgICBpZiAoIW1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCkgewotICAgICAgICBt
X3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQgPSBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50RWZsOjpjcmVhdGUobV92aWV3SW1wbCk7Ci0gICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJv
bGxlciA9IGFkb3B0UHRyKG5ldyBQYWdlVmlld3BvcnRDb250cm9sbGVyKG1fdmlld0ltcGwtPnBh
Z2UoKSwgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmdldCgpKSk7CisgICAgICAgIG1f
cGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCA9IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRFZmw6OmNyZWF0ZShtX3ZpZXcpOworICAgICAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIg
PSBhZG9wdFB0cihuZXcgUGFnZVZpZXdwb3J0Q29udHJvbGxlcihtX3ZpZXctPnBhZ2UoKSwgbV9w
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmdldCgpKSk7CiAgICAgfQogICAgIG1fcGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudC0+dXBkYXRlVmlld3BvcnRTaXplKCk7CiAjZW5kaWYKQEAg
LTY3LDE0ICs2NywxNCBAQCB2b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6dXBkYXRlVmlld3Bv
cnRTaXplKCkKIEZsb2F0UmVjdCBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNvbnZlcnRUb0Rldmlj
ZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3QpCiB7CiAgICAgRmxvYXRSZWN0IHJlc3Vs
dCA9IHVzZXJSZWN0OwotICAgIHJlc3VsdC5zY2FsZShtX3ZpZXdJbXBsLT5wYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworICAgIHJlc3VsdC5zY2FsZShtX3ZpZXctPnBhZ2UoKS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRmxvYXRSZWN0IFBhZ2VD
bGllbnREZWZhdWx0SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGV2
aWNlUmVjdCkKIHsKICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gZGV2aWNlUmVjdDsKLSAgICByZXN1
bHQuc2NhbGUoMSAvIG1fdmlld0ltcGwtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgcmVzdWx0LnNjYWxlKDEgLyBtX3ZpZXctPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFBhZ2VDbGll
bnREZWZhdWx0SW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNpemUpCiAgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50
c1NpemUoc2l6ZSk7CiAjZW5kaWYKIAotICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8Q29u
dGVudHNTaXplQ2hhbmdlZD4oKS5jYWxsKHNpemUpOworICAgIG1fdmlldy0+c21hcnRDYWxsYmFj
azxDb250ZW50c1NpemVDaGFuZ2VkPigpLmNhbGwoc2l6ZSk7CiB9CiAKICNpZiBVU0UoVElMRURf
QkFDS0lOR19TVE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudERlZmF1bHRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VDbGllbnREZWZhdWx0SW1wbC5oCmluZGV4IDMxYWU5MGQuLjIxYmU2OWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuaApA
QCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUGFnZUNsaWVudERl
ZmF1bHRJbXBsIDogcHVibGljIFBhZ2VDbGllbnRCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxQYWdlQ2xpZW50QmFzZT4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkK
KyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlQ2xpZW50QmFzZT4gY3JlYXRlKEV3a1ZpZXcqIHZp
ZXdJbXBsKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlQ2xpZW50RGVm
YXVsdEltcGwodmlld0ltcGwpKTsKICAgICB9CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZUNsaWVudERl
ZmF1bHRJbXBsKEV3a1ZpZXdJbXBsKik7CisgICAgZXhwbGljaXQgUGFnZUNsaWVudERlZmF1bHRJ
bXBsKEV3a1ZpZXcqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3Bl
cnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwu
Y3BwCmluZGV4IGEwOGZlOTYuLmViMDcyNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCkBAIC0yOCw3ICsyOCw3IEBA
CiAjaW5jbHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIKIAogI2luY2x1ZGUgIkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNs
dWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJl
d2tfdmlldy5oIgogCkBAIC0zNywyMCArMzcsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEV3a1ZpZXdD
YWxsYmFja3M7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYWdlQ2xpZW50TGVnYWN5SW1wbDo6
UGFnZUNsaWVudExlZ2FjeUltcGwoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQotICAgIDogUGFnZUNs
aWVudEJhc2Uodmlld0ltcGwpCitQYWdlQ2xpZW50TGVnYWN5SW1wbDo6UGFnZUNsaWVudExlZ2Fj
eUltcGwoRXdrVmlldyogdmlldykKKyAgICA6IFBhZ2VDbGllbnRCYXNlKHZpZXcpCiB7CiB9CiAK
IHZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OmRpZENvbW1pdExvYWQoKQogewotICAgIG1fdmll
d0ltcGwtPnVwZGF0ZSgpOworICAgIG1fdmlldy0+dXBkYXRlKCk7CiB9CiAKIHZvaWQgUGFnZUNs
aWVudExlZ2FjeUltcGw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCiB7CiAjaWYgVVNFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCi0gICAgbV92aWV3SW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRW
aXNpYmxlQ29udGVudHNSZWN0KEludFJlY3Qocm91bmRlZEludFBvaW50KG1fdmlld0ltcGwtPnBh
Z2VQb3NpdGlvbigpKSwgbV92aWV3SW1wbC0+c2l6ZSgpKSwgbV92aWV3SW1wbC0+cGFnZVNjYWxl
RmFjdG9yKCksIEZsb2F0UG9pbnQoKSk7CisgICAgbV92aWV3LT5wYWdlKCktPmRyYXdpbmdBcmVh
KCktPnNldFZpc2libGVDb250ZW50c1JlY3QoSW50UmVjdChyb3VuZGVkSW50UG9pbnQobV92aWV3
LT5wYWdlUG9zaXRpb24oKSksIG1fdmlldy0+c2l6ZSgpKSwgbV92aWV3LT5wYWdlU2NhbGVGYWN0
b3IoKSwgRmxvYXRQb2ludCgpKTsKICNlbmRpZgogfQogCkBAIC02OCwzNCArNjgsMzQgQEAgRmxv
YXRSZWN0IFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxv
YXRSZWN0JiB2aWV3UmVjdCkKIAogdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdl
Vmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpCiB7
Ci0gICAgbV92aWV3SW1wbC0+dXBkYXRlKCk7CisgICAgbV92aWV3LT51cGRhdGUoKTsKIH0KIAog
dm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUpCiB7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgbV92aWV3SW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSgpLT5zZXRDb250ZW50c1NpemUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOwotICAgIG1fdmlld0ltcGwtPnVwZGF0ZSgpOworICAgIG1fdmlldy0+cGFn
ZSgpLT5kcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRD
b250ZW50c1NpemUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAg
IG1fdmlldy0+dXBkYXRlKCk7CiAjZW5kaWYKIAotICAgIG1fdmlld0ltcGwtPnNtYXJ0Q2FsbGJh
Y2s8Q29udGVudHNTaXplQ2hhbmdlZD4oKS5jYWxsKHNpemUpOworICAgIG1fdmlldy0+c21hcnRD
YWxsYmFjazxDb250ZW50c1NpemVDaGFuZ2VkPigpLmNhbGwoc2l6ZSk7CiB9CiAKICNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKIHZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VEaWRS
ZXF1ZXN0U2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBtX3ZpZXdJbXBs
LT5zZXRQYWdlUG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbikpOwotICAgIG1fdmlld0ltcGwt
PnVwZGF0ZSgpOworICAgIG1fdmlldy0+c2V0UGFnZVBvc2l0aW9uKEZsb2F0UG9pbnQocG9zaXRp
b24pKTsKKyAgICBtX3ZpZXctPnVwZGF0ZSgpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRMZWdhY3lJ
bXBsOjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpCiB7Ci0gICAgbV92aWV3SW1wbC0+dXBkYXRlKCk7CisgICAgbV92aWV3LT51
cGRhdGUoKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6cGFnZVRyYW5zaXRpb25W
aWV3cG9ydFJlYWR5KCkKIHsKLSAgICBtX3ZpZXdJbXBsLT51cGRhdGUoKTsKKyAgICBtX3ZpZXct
PnVwZGF0ZSgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuaAppbmRleCBlYjlmYmIyLi4zMDEwNDc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1w
bC5oCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBQYWdlQ2xp
ZW50TGVnYWN5SW1wbCA6IHB1YmxpYyBQYWdlQ2xpZW50QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8UGFnZUNsaWVudEJhc2U+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0lt
cGwpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUNsaWVudEJhc2U+IGNyZWF0ZShFd2tWaWV3
KiB2aWV3KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlQ2xpZW50TGVn
YWN5SW1wbCh2aWV3SW1wbCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VDbGll
bnRMZWdhY3lJbXBsKHZpZXcpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50TGVn
YWN5SW1wbCgpIHsgfQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJD
b3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFBhZ2VDbGllbnRMZWdhY3lJbXBsKEV3a1Zp
ZXdJbXBsKik7CisgICAgZXhwbGljaXQgUGFnZUNsaWVudExlZ2FjeUltcGwoRXdrVmlldyopOwog
CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggYmIyNzUxZC4uNzQ5
NTExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENs
aWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENs
aWVudEVmbC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJQYWdlTG9hZENsaWVudEVmbC5oIgogCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNp
bmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKICNpbmNsdWRl
ICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0ZyYW1lLmgiCkBAIC01MiwzMyArNTIsMzMgQEAg
dm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tQYWdlUmVm
LCBXS1N0cmluZ1JlZiB0aXRsZSwgV0sKICAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFt
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFn
ZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXdJbXBsKCk7Ci0gICAgdmlld0ltcGwtPnNt
YXJ0Q2FsbGJhY2s8VGl0bGVDaGFuZ2U+KCkuY2FsbCh0b0ltcGwodGl0bGUpLT5zdHJpbmcoKSk7
CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZp
ZXcoKTsKKyAgICB2aWV3LT5zbWFydENhbGxiYWNrPFRpdGxlQ2hhbmdlPigpLmNhbGwodG9JbXBs
KHRpdGxlKS0+c3RyaW5nKCkpOwogfQogCiAjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQogdm9pZCBQ
YWdlTG9hZENsaWVudEVmbDo6ZGlkUmVjZWl2ZUludGVudEZvckZyYW1lKFdLUGFnZVJlZiwgV0tG
cmFtZVJlZiwgV0tJbnRlbnREYXRhUmVmIGludGVudCwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGll
bnRFZmwoY2xpZW50SW5mbyktPnZpZXdJbXBsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFn
ZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKICAgICBSZWZQdHI8RXdrSW50ZW50
PiBld2tJbnRlbnQgPSBFd2tJbnRlbnQ6OmNyZWF0ZShpbnRlbnQpOwotICAgIHZpZXdJbXBsLT5z
bWFydENhbGxiYWNrPEludGVudFJlcXVlc3Q+KCkuY2FsbChld2tJbnRlbnQuZ2V0KCkpOworICAg
IHZpZXctPnNtYXJ0Q2FsbGJhY2s8SW50ZW50UmVxdWVzdD4oKS5jYWxsKGV3a0ludGVudC5nZXQo
KSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfSU5URU5UU19UQUcpCiB2b2lkIFBhZ2VM
b2FkQ2xpZW50RWZsOjpyZWdpc3RlckludGVudFNlcnZpY2VGb3JGcmFtZShXS1BhZ2VSZWYsIFdL
RnJhbWVSZWYsIFdLSW50ZW50U2VydmljZUluZm9SZWYgc2VydmljZUluZm8sIFdLVHlwZVJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0
b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3SW1wbCgpOworICAgIEV3a1ZpZXcq
IHZpZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3KCk7CiAgICAgUmVm
UHRyPEV3a0ludGVudFNlcnZpY2U+IGV3a0ludGVudFNlcnZpY2UgPSBFd2tJbnRlbnRTZXJ2aWNl
OjpjcmVhdGUoc2VydmljZUluZm8pOwotICAgIHZpZXdJbXBsLT5zbWFydENhbGxiYWNrPEludGVu
dFNlcnZpY2VSZWdpc3RyYXRpb24+KCkuY2FsbChld2tJbnRlbnRTZXJ2aWNlLmdldCgpKTsKKyAg
ICB2aWV3LT5zbWFydENhbGxiYWNrPEludGVudFNlcnZpY2VSZWdpc3RyYXRpb24+KCkuY2FsbChl
d2tJbnRlbnRTZXJ2aWNlLmdldCgpKTsKIH0KICNlbmRpZgogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50
RWZsOjpkaWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VMb2FkQ2xpZW50RWZs
KGNsaWVudEluZm8pLT52aWV3SW1wbCgpOworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VMb2Fk
Q2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3KCk7CiAgICAgZG91YmxlIHByb2dyZXNzID0gV0tQ
YWdlR2V0RXN0aW1hdGVkUHJvZ3Jlc3MocGFnZSk7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJh
Y2s8TG9hZFByb2dyZXNzPigpLmNhbGwoJnByb2dyZXNzKTsKKyAgICB2aWV3LT5zbWFydENhbGxi
YWNrPExvYWRQcm9ncmVzcz4oKS5jYWxsKCZwcm9ncmVzcyk7CiB9CiAKIHZvaWQgUGFnZUxvYWRD
bGllbnRFZmw6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJh
bWUsIFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC04
Niw4ICs4Niw4IEBAIHZvaWQgUGFnZUxvYWRDbGllbnRFZmw6OmRpZEZpbmlzaExvYWRGb3JGcmFt
ZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwCiAgICAgaWYgKCFXS0ZyYW1lSXNN
YWluRnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBFd2tWaWV3SW1wbCogdmll
d0ltcGwgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3SW1wbCgpOwotICAg
IHZpZXdJbXBsLT5zbWFydENhbGxiYWNrPExvYWRGaW5pc2hlZD4oKS5jYWxsKCk7CisgICAgRXdr
VmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAg
ICB2aWV3LT5zbWFydENhbGxiYWNrPExvYWRGaW5pc2hlZD4oKS5jYWxsKCk7CiB9CiAKIHZvaWQg
UGFnZUxvYWRDbGllbnRFZmw6OmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVm
LCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCkBAIC05NSwxMCArOTUsMTAgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVm
bDo6ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJh
bWUKICAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50
SW5mbyktPnZpZXdJbXBsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRF
ZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKICAgICBPd25QdHI8RXdrRXJyb3I+IGV3a0Vycm9yID0g
RXdrRXJyb3I6OmNyZWF0ZShlcnJvcik7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8TG9h
ZEVycm9yPigpLmNhbGwoZXdrRXJyb3IuZ2V0KCkpOwotICAgIHZpZXdJbXBsLT5zbWFydENhbGxi
YWNrPExvYWRGaW5pc2hlZD4oKS5jYWxsKCk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxMb2Fk
RXJyb3I+KCkuY2FsbChld2tFcnJvci5nZXQoKSk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxM
b2FkRmluaXNoZWQ+KCkuY2FsbCgpOwogfQogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiBmcmFtZSwg
V0tUeXBlUmVmIC8qdXNlckRhdGEqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTEwNiw5
ICsxMDYsOSBAQCB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiBmcgogICAgIGlmICghV0tGcmFtZUlzTWFp
bkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXdrVmlld0ltcGwqIHZpZXdJ
bXBsID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlld0ltcGwoKTsKLSAgICB2
aWV3SW1wbC0+aW5mb3JtVVJMQ2hhbmdlKCk7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZD4oKS5jYWxsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRv
UGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICB2aWV3LT5pbmZvcm1V
UkxDaGFuZ2UoKTsKKyAgICB2aWV3LT5zbWFydENhbGxiYWNrPFByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQ+KCkuY2FsbCgpOwogfQogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRSZWNlaXZlU2Vy
dmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVS
ZWYgZnJhbWUsIFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CkBAIC0xMTYsOSArMTE2LDkgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWcKICAgICBpZiAoIVdL
RnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV3a1ZpZXdJ
bXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXdJbXBs
KCk7Ci0gICAgdmlld0ltcGwtPmluZm9ybVVSTENoYW5nZSgpOwotICAgIHZpZXdJbXBsLT5zbWFy
dENhbGxiYWNrPFByb3Zpc2lvbmFsTG9hZFJlZGlyZWN0PigpLmNhbGwoKTsKKyAgICBFd2tWaWV3
KiB2aWV3ID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlldygpOworICAgIHZp
ZXctPmluZm9ybVVSTENoYW5nZSgpOworICAgIHZpZXctPnNtYXJ0Q2FsbGJhY2s8UHJvdmlzaW9u
YWxMb2FkUmVkaXJlY3Q+KCkuY2FsbCgpOwogfQogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1l
UmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCkBAIC0xMjYsOSArMTI2LDkgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmEKICAgICBp
ZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV3
a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZp
ZXdJbXBsKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50
SW5mbyktPnZpZXcoKTsKICAgICBPd25QdHI8RXdrRXJyb3I+IGV3a0Vycm9yID0gRXdrRXJyb3I6
OmNyZWF0ZShlcnJvcik7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJhY2s8UHJvdmlzaW9uYWxM
b2FkRmFpbGVkPigpLmNhbGwoZXdrRXJyb3IuZ2V0KCkpOworICAgIHZpZXctPnNtYXJ0Q2FsbGJh
Y2s8UHJvdmlzaW9uYWxMb2FkRmFpbGVkPigpLmNhbGwoZXdrRXJyb3IuZ2V0KCkpOwogfQogCiAj
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xMzcsMjEgKzEzNywyMSBAQCB2b2lkIFBh
Z2VMb2FkQ2xpZW50RWZsOjpkaWRDb21taXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1l
UmVmIGZyYW1lLCBXS1R5cAogICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlTG9hZENs
aWVudEVmbChjbGllbnRJbmZvKS0+dmlld0ltcGwoKTsKLSAgICB2aWV3SW1wbC0+cGFnZUNsaWVu
dCgpLT5kaWRDb21taXRMb2FkKCk7CisgICAgRXdrVmlldyogdmlldyA9IHRvUGFnZUxvYWRDbGll
bnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICB2aWV3LT5wYWdlQ2xpZW50KCktPmRpZENv
bW1pdExvYWQoKTsKIH0KICNlbmRpZgogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFu
Z2VCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRk
ZWRJdGVtLCBXS0FycmF5UmVmIHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
IHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT52aWV3SW1wbCgpOwotICAgIEFTU0VSVCh2aWV3SW1wbCk7CisgICAgRXdrVmlldyog
dmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICBBU1NF
UlQodmlldyk7CiAKLSAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QgPSBld2tfdmlld19i
YWNrX2ZvcndhcmRfbGlzdF9nZXQodmlld0ltcGwtPnZpZXcoKSk7CisgICAgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0KiBsaXN0ID0gZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KHZpZXctPnZp
ZXcoKSk7CiAgICAgQVNTRVJUKGxpc3QpOwogICAgIGxpc3QtPnVwZGF0ZShhZGRlZEl0ZW0sIHJl
bW92ZWRJdGVtcyk7CiAKLSAgICB2aWV3SW1wbC0+c21hcnRDYWxsYmFjazxCYWNrRm9yd2FyZExp
c3RDaGFuZ2U+KCkuY2FsbCgpOworICAgIHZpZXctPnNtYXJ0Q2FsbGJhY2s8QmFja0ZvcndhcmRM
aXN0Q2hhbmdlPigpLmNhbGwoKTsKIH0KIAogdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlkU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiBmcmFtZSwg
V0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQpAQCAtMTU5LDIyICsxNTksMjIgQEAgdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlk
U2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZgogICAg
IGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RXdrVmlld0ltcGwqIHZpZXdJbXBsID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+
dmlld0ltcGwoKTsKLSAgICB2aWV3SW1wbC0+aW5mb3JtVVJMQ2hhbmdlKCk7CisgICAgRXdrVmll
dyogdmlldyA9IHRvUGFnZUxvYWRDbGllbnRFZmwoY2xpZW50SW5mbyktPnZpZXcoKTsKKyAgICB2
aWV3LT5pbmZvcm1VUkxDaGFuZ2UoKTsKIH0KIAogdm9pZCBQYWdlTG9hZENsaWVudEVmbDo6ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSW5GcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVS
ZWYsIFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VSZWYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2Us
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrVmlld0ltcGwqIHZpZXdJbXBsID0g
dG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlld0ltcGwoKTsKKyAgICBFd2tWaWV3
KiB2aWV3ID0gdG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlldygpOwogCiAgICAg
UmVmUHRyPEV3a0F1dGhSZXF1ZXN0PiBhdXRoZW50aWNhdGlvblJlcXVlc3QgPSBFd2tBdXRoUmVx
dWVzdDo6Y3JlYXRlKHRvSW1wbChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpOwotICAgIHZpZXdJ
bXBsLT5zbWFydENhbGxiYWNrPEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4oKS5jYWxsKGF1dGhlbnRp
Y2F0aW9uUmVxdWVzdC5nZXQoKSk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxBdXRoZW50aWNh
dGlvblJlcXVlc3Q+KCkuY2FsbChhdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCkpOwogfQogCi1Q
YWdlTG9hZENsaWVudEVmbDo6UGFnZUxvYWRDbGllbnRFZmwoRXdrVmlld0ltcGwqIHZpZXdJbXBs
KQotICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKK1BhZ2VMb2FkQ2xpZW50RWZsOjpQYWdlTG9h
ZENsaWVudEVmbChFd2tWaWV3KiB2aWV3KQorICAgIDogbV92aWV3KHZpZXcpCiB7Ci0gICAgV0tQ
YWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXdJbXBsLT53a1BhZ2UoKTsKKyAgICBXS1BhZ2VSZWYgcGFn
ZVJlZiA9IG1fdmlldy0+d2tQYWdlKCk7CiAgICAgQVNTRVJUKHBhZ2VSZWYpOwogCiAgICAgV0tQ
YWdlTG9hZGVyQ2xpZW50IGxvYWRDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmgKaW5kZXggY2Q3MTNhMy4uYThlMTIzNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuaApAQCAt
MzAsMjEgKzMwLDIxIEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCi1jbGFzcyBFd2tWaWV3SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBQYWdlTG9hZENsaWVudEVmbCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUxvYWRDbGllbnRFZmw+IGNyZWF0ZShFd2tWaWV3
SW1wbCogdmlld0ltcGwpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUxvYWRDbGllbnRFZmw+
IGNyZWF0ZShFd2tWaWV3KiB2aWV3SW1wbCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgUGFnZUxvYWRDbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgUGFnZUxvYWRDbGllbnRFZmwoRXdrVmlld0ltcGwqKTsKKyAgICBleHBsaWNp
dCBQYWdlTG9hZENsaWVudEVmbChFd2tWaWV3Kik7CiAKLSAgICBpbmxpbmUgRXdrVmlld0ltcGwq
IHZpZXdJbXBsKCkgY29uc3QgeyByZXR1cm4gbV92aWV3SW1wbDsgfQorICAgIGlubGluZSBFd2tW
aWV3KiB2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9CiAKICAgICBzdGF0aWMgdm9pZCBk
aWRSZWNlaXZlVGl0bGVGb3JGcmFtZShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS0Zy
YW1lUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogI2lmIEVOQUJMRShX
RUJfSU5URU5UUykKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBk
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBX
S1NhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUluRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJ
bXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlUG9saWN5Q2xpZW50
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVBvbGljeUNsaWVudEVm
bC5jcHAKaW5kZXggMDI1M2ZhYS4uZWZjYmMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlUG9saWN5Q2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VQb2xpY3lDbGllbnRFZmwuY3BwCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgog
Ci0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVk
ZSAiV0tGcmFtZS5oIgogI2luY2x1ZGUgIldLRnJhbWVQb2xpY3lMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIldlYkZyYW1lUHJveHkuaCIKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBQYWdlUG9saWN5Q2xp
ZW50RWZsOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFt
ZVJlZiwKICAgICBQYWdlUG9saWN5Q2xpZW50RWZsKiBwb2xpY3lDbGllbnQgPSB0b1BhZ2VQb2xp
Y3lDbGllbnRFZmwoY2xpZW50SW5mbyk7CiAKICAgICBSZWZQdHI8RXdrTmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uPiBkZWNpc2lvbiA9IEV3a05hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbjo6Y3JlYXRl
KG5hdmlnYXRpb25UeXBlLCBtb3VzZUJ1dHRvbiwgbW9kaWZpZXJzLCByZXF1ZXN0LCAwLCBsaXN0
ZW5lcik7Ci0gICAgcG9saWN5Q2xpZW50LT5tX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbj4oKS5jYWxsKGRlY2lzaW9uLmdldCgpKTsKKyAgICBwb2xpY3lD
bGllbnQtPm1fdmlldy0+c21hcnRDYWxsYmFjazxOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24+KCku
Y2FsbChkZWNpc2lvbi5nZXQoKSk7CiB9CiAKIHZvaWQgUGFnZVBvbGljeUNsaWVudEVmbDo6ZGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tGcmFt
ZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
cywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVz
dCwgV0tTdHJpbmdSZWYgZnJhbWVOYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVu
ZXIsIFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC01
Nyw3ICs1Nyw3IEBAIHZvaWQgUGFnZVBvbGljeUNsaWVudEVmbDo6ZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwKICAgICBQYWdlUG9saWN5Q2xpZW50
RWZsKiBwb2xpY3lDbGllbnQgPSB0b1BhZ2VQb2xpY3lDbGllbnRFZmwoY2xpZW50SW5mbyk7CiAK
ICAgICBSZWZQdHI8RXdrTmF2aWdhdGlvblBvbGljeURlY2lzaW9uPiBkZWNpc2lvbiA9IEV3a05h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbjo6Y3JlYXRlKG5hdmlnYXRpb25UeXBlLCBtb3VzZUJ1dHRv
biwgbW9kaWZpZXJzLCByZXF1ZXN0LCB0b0ltcGwoZnJhbWVOYW1lKS0+c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgbGlzdGVuZXIpOwotICAgIHBvbGljeUNsaWVudC0+bV92aWV3SW1wbC0+c21hcnRD
YWxsYmFjazxOZXdXaW5kb3dQb2xpY3lEZWNpc2lvbj4oKS5jYWxsKGRlY2lzaW9uLmdldCgpKTsK
KyAgICBwb2xpY3lDbGllbnQtPm1fdmlldy0+c21hcnRDYWxsYmFjazxOZXdXaW5kb3dQb2xpY3lE
ZWNpc2lvbj4oKS5jYWxsKGRlY2lzaW9uLmdldCgpKTsKIH0KIAogdm9pZCBQYWdlUG9saWN5Q2xp
ZW50RWZsOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZUNhbGxiYWNrKFdLUGFnZVJlZiwgV0tGcmFt
ZVJlZiBmcmFtZSwgV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgV0tVUkxSZXF1ZXN0UmVmLCBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiAvKnVzZXJEYXRhKi8s
IGNvbnN0IHZvaWQqIC8qY2xpZW50SW5mbyovKQpAQCAtMTAyLDEwICsxMDIsMTAgQEAgdm9pZCBQ
YWdlUG9saWN5Q2xpZW50RWZsOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZUNhbGxiYWNrKFdLUGFn
ZVJlZiwgV0tGcmFtZVJlZgogICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZShsaXN0ZW5lcik7
CiB9CiAKLVBhZ2VQb2xpY3lDbGllbnRFZmw6OlBhZ2VQb2xpY3lDbGllbnRFZmwoRXdrVmlld0lt
cGwqIHZpZXdJbXBsKQotICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKK1BhZ2VQb2xpY3lDbGll
bnRFZmw6OlBhZ2VQb2xpY3lDbGllbnRFZmwoRXdrVmlldyogdmlldykKKyAgICA6IG1fdmlldyh2
aWV3KQogewotICAgIFdLUGFnZVJlZiBwYWdlUmVmID0gbV92aWV3SW1wbC0+d2tQYWdlKCk7Cisg
ICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXctPndrUGFnZSgpOwogICAgIEFTU0VSVChwYWdl
UmVmKTsKIAogICAgIFdLUGFnZVBvbGljeUNsaWVudCBwb2xpY3lDbGllbnQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VQb2xpY3lDbGllbnRFZmwuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVBvbGljeUNsaWVudEVmbC5oCmluZGV4IDY4
ZDlhOWUuLjBkMDViNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVBvbGljeUNsaWVudEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVBvbGljeUNsaWVudEVmbC5oCkBAIC0zMSwyNSArMzEsMjUgQEAKICNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKLWNsYXNzIEV3a1Zp
ZXdJbXBsOworY2xhc3MgRXdrVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFBh
Z2VQb2xpY3lDbGllbnRFZmwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VQ
b2xpY3lDbGllbnRFZmw+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwpCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8UGFnZVBvbGljeUNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXcqIHZpZXcpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VQb2xpY3lDbGllbnRFZmwodmll
d0ltcGwpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlUG9saWN5Q2xpZW50RWZs
KHZpZXcpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZVBvbGljeUNsaWVu
dEVmbChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IFBhZ2VQb2xpY3lDbGllbnRFZmwoRXdr
VmlldyopOwogCiAgICAgc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1v
ZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBXS1VSTFJlcXVlc3RSZWYsIFdLRnJhbWVQb2xp
Y3lMaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tG
cmFtZU5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24s
IFdLVVJMUmVxdWVzdFJlZiwgV0tTdHJpbmdSZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiwg
V0tUeXBlUmVmLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9y
UmVzcG9uc2VDYWxsYmFjayhXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVVJMUmVzcG9uc2VSZWYs
IFdLVVJMUmVxdWVzdFJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNv
bnN0IHZvaWQqKTsKIAotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcq
IG1fdmlldzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmluZGV4IDg2NDNkNWMuLjgxMWRi
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50
RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVm
bC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQ
YWdlVUlDbGllbnRFZmwuaCIKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAi
RXdrVmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLRXZlbnQuaCIK
ICNpbmNsdWRlICJXS1N0cmluZy5oIgpAQCAtNDUsMTAgKzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUg
UGFnZVVJQ2xpZW50RWZsKiB0b1BhZ2VVSUNsaWVudEVmbChjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlVUlDbGllbnRFZmwqPihjb25zdF9jYXN0PHZv
aWQqPihjbGllbnRJbmZvKSk7CiB9CiAKLVBhZ2VVSUNsaWVudEVmbDo6UGFnZVVJQ2xpZW50RWZs
KEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCitQYWdl
VUlDbGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbChFd2tWaWV3KiB2aWV3KQorICAgIDogbV92aWV3
KHZpZXcpCiB7Ci0gICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBtX3ZpZXdJbXBsLT53a1BhZ2UoKTsK
KyAgICBXS1BhZ2VSZWYgcGFnZVJlZiA9IG1fdmlldy0+d2tQYWdlKCk7CiAgICAgQVNTRVJUKHBh
Z2VSZWYpOwogCiAgICAgV0tQYWdlVUlDbGllbnQgdWlDbGllbnQ7CkBAIC04OCwxMjYgKzg4LDEy
NiBAQCBQYWdlVUlDbGllbnRFZmw6OlBhZ2VVSUNsaWVudEVmbChFd2tWaWV3SW1wbCogdmlld0lt
cGwpCiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpjbG9zZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7Ci0gICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmll
d0ltcGwtPmNsb3NlKCk7CisgICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmll
dy0+Y2xvc2UoKTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnRha2VGb2N1cyhXS1BhZ2VS
ZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgLy8g
RklYTUU6IHRoaXMgaXMgb25seSBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uCi0gICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBs
LT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQodG9QYWdlVUlDbGll
bnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygpLCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFn
ZVVJQ2xpZW50RWZsOjpmb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7
Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT52aWV3KCksIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh0
b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT52aWV3KCksIHRydWUpOwogfQog
CiB2b2lkIFBhZ2VVSUNsaWVudEVmbDo6dW5mb2N1cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCiB7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHRvUGFnZVVJQ2xpZW50RWZs
KGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT52aWV3KCksIGZhbHNlKTsKKyAgICBldmFzX29iamVj
dF9mb2N1c19zZXQodG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+dmlldygp
LCBmYWxzZSk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpydW5KYXZhU2NyaXB0QWxlcnQo
V0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBhbGVydFRleHQsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7Ci0gICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmll
d0ltcGwtPnJlcXVlc3RKU0FsZXJ0UG9wdXAoV0tFaW5hU2hhcmVkU3RyaW5nKGFsZXJ0VGV4dCkp
OworICAgIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnJlcXVlc3RKU0Fs
ZXJ0UG9wdXAoV0tFaW5hU2hhcmVkU3RyaW5nKGFsZXJ0VGV4dCkpOwogfQogCiBib29sIFBhZ2VV
SUNsaWVudEVmbDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBt
ZXNzYWdlLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHJldHVy
biB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+cmVxdWVzdEpTQ29u
ZmlybVBvcHVwKFdLRWluYVNoYXJlZFN0cmluZyhtZXNzYWdlKSk7CisgICAgcmV0dXJuIHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPnJlcXVlc3RKU0NvbmZpcm1Qb3B1cChX
S0VpbmFTaGFyZWRTdHJpbmcobWVzc2FnZSkpOwogfQogCiBXS1N0cmluZ1JlZiBQYWdlVUlDbGll
bnRFZmw6OnJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdl
LCBXS1N0cmluZ1JlZiBkZWZhdWx0VmFsdWUsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiB7Ci0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIHZhbHVlID0gdG9QYWdlVUlDbGllbnRF
ZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPnJlcXVlc3RKU1Byb21wdFBvcHVwKFdLRWluYVNo
YXJlZFN0cmluZyhtZXNzYWdlKSwgV0tFaW5hU2hhcmVkU3RyaW5nKGRlZmF1bHRWYWx1ZSkpOwor
ICAgIFdLRWluYVNoYXJlZFN0cmluZyB2YWx1ZSA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXctPnJlcXVlc3RKU1Byb21wdFBvcHVwKFdLRWluYVNoYXJlZFN0cmluZyhtZXNz
YWdlKSwgV0tFaW5hU2hhcmVkU3RyaW5nKGRlZmF1bHRWYWx1ZSkpOwogICAgIHJldHVybiB2YWx1
ZSA/IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSA6IDA7CiB9CiAKIGJvb2wg
UGFnZVVJQ2xpZW50RWZsOjp0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQogewotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOwor
ICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pLT5tX3ZpZXctPndpbmRvd0ZlYXR1cmVzKCk7CiAgICAgQVNTRVJUKGZlYXR1cmVzKTsK
ICAgICByZXR1cm4gZmVhdHVyZXMtPnRvb2xiYXJWaXNpYmxlKCk7CiB9CiAKIHZvaWQgUGFnZVVJ
Q2xpZW50RWZsOjpzZXRUb29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sIHRvb2xiYXJW
aXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIEV3a1dpbmRvd0ZlYXR1cmVz
KiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53
aW5kb3dGZWF0dXJlcygpOworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPndpbmRvd0ZlYXR1cmVzKCk7CiAgICAg
QVNTRVJUKGZlYXR1cmVzKTsKICAgICBmZWF0dXJlcy0+c2V0VG9vbGJhclZpc2libGUodG9vbGJh
clZpc2libGUpOwogfQogCiBib29sIFBhZ2VVSUNsaWVudEVmbDo6bWVudUJhcklzVmlzaWJsZShX
S1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrV2luZG93RmVhdHVy
ZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwt
PndpbmRvd0ZlYXR1cmVzKCk7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9Q
YWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlldy0+d2luZG93RmVhdHVyZXMoKTsKICAg
ICBBU1NFUlQoZmVhdHVyZXMpOwogICAgIHJldHVybiBmZWF0dXJlcy0+bWVudUJhclZpc2libGUo
KTsKIH0KIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdl
UmVmLCBib29sIG1lbnVCYXJWaXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAg
IEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJlcygpOworICAgIEV3a1dpbmRvd0ZlYXR1cmVz
KiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPndpbmRv
d0ZlYXR1cmVzKCk7CiAgICAgQVNTRVJUKGZlYXR1cmVzKTsKICAgICBmZWF0dXJlcy0+c2V0TWVu
dUJhclZpc2libGUobWVudUJhclZpc2libGUpOwogfQogCiBib29sIFBhZ2VVSUNsaWVudEVmbDo6
c3RhdHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsK
LSAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGll
bnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVyZXMoKTsKKyAgICBFd2tXaW5kb3dGZWF0
dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT53
aW5kb3dGZWF0dXJlcygpOwogICAgIEFTU0VSVChmZWF0dXJlcyk7CiAgICAgcmV0dXJuIGZlYXR1
cmVzLT5zdGF0dXNCYXJWaXNpYmxlKCk7CiB9CiAKIHZvaWQgUGFnZVVJQ2xpZW50RWZsOjpzZXRT
dGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIHN0YXR1c0JhclZpc2libGUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0g
dG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5mbyktPm1fdmlld0ltcGwtPndpbmRvd0ZlYXR1cmVz
KCk7CisgICAgRXdrV2luZG93RmVhdHVyZXMqIGZlYXR1cmVzID0gdG9QYWdlVUlDbGllbnRFZmwo
Y2xpZW50SW5mbyktPm1fdmlldy0+d2luZG93RmVhdHVyZXMoKTsKICAgICBBU1NFUlQoZmVhdHVy
ZXMpOwogICAgIGZlYXR1cmVzLT5zZXRTdGF0dXNCYXJWaXNpYmxlKHN0YXR1c0JhclZpc2libGUp
OwogfQogCiBib29sIFBhZ2VVSUNsaWVudEVmbDo6aXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9
IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT53aW5kb3dGZWF0dXJl
cygpOworICAgIEV3a1dpbmRvd0ZlYXR1cmVzKiBmZWF0dXJlcyA9IHRvUGFnZVVJQ2xpZW50RWZs
KGNsaWVudEluZm8pLT5tX3ZpZXctPndpbmRvd0ZlYXR1cmVzKCk7CiAgICAgQVNTRVJUKGZlYXR1
cmVzKTsKICAgICByZXR1cm4gZmVhdHVyZXMtPnJlc2l6YWJsZSgpOwogfQogCiB2b2lkIFBhZ2VV
SUNsaWVudEVmbDo6c2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBib29sIHJlc2l6YWJsZSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMg
PSB0b1BhZ2VVSUNsaWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+d2luZG93RmVhdHVy
ZXMoKTsKKyAgICBFd2tXaW5kb3dGZWF0dXJlcyogZmVhdHVyZXMgPSB0b1BhZ2VVSUNsaWVudEVm
bChjbGllbnRJbmZvKS0+bV92aWV3LT53aW5kb3dGZWF0dXJlcygpOwogICAgIEFTU0VSVChmZWF0
dXJlcyk7CiAgICAgZmVhdHVyZXMtPnNldFJlc2l6YWJsZShyZXNpemFibGUpOwogfQogCiBXS1Jl
Y3QgUGFnZVVJQ2xpZW50RWZsOjpnZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7Ci0gICAgcmV0dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8p
LT5tX3ZpZXdJbXBsLT53aW5kb3dHZW9tZXRyeSgpOworICAgIHJldHVybiB0b1BhZ2VVSUNsaWVu
dEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT53aW5kb3dHZW9tZXRyeSgpOwogfQogCiB2b2lkIFBh
Z2VVSUNsaWVudEVmbDo6c2V0V2luZG93RnJhbWUoV0tQYWdlUmVmLCBXS1JlY3QgZnJhbWUsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgdG9QYWdlVUlDbGllbnRFZmwoY2xpZW50SW5m
byktPm1fdmlld0ltcGwtPnNldFdpbmRvd0dlb21ldHJ5KGZyYW1lKTsKKyAgICB0b1BhZ2VVSUNs
aWVudEVmbChjbGllbnRJbmZvKS0+bV92aWV3LT5zZXRXaW5kb3dHZW9tZXRyeShmcmFtZSk7CiB9
CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogdW5zaWduZWQgbG9uZyBsb25nIFBhZ2VVSUNs
aWVudEVmbDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tT
ZWN1cml0eU9yaWdpblJlZiwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0cmluZ1JlZiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9u
ZyBsb25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRh
YmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRVc2FnZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKIHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSB0b1BhZ2VVSUNsaWVu
dEVmbChjbGllbnRJbmZvKS0+bV92aWV3SW1wbDsKLSAgICByZXR1cm4gdmlld0ltcGwtPmluZm9y
bURhdGFiYXNlUXVvdGFSZWFjaGVkKHRvSW1wbChkYXRhYmFzZU5hbWUpLT5zdHJpbmcoKSwgdG9J
bXBsKGRpc3BsYXlOYW1lKS0+c3RyaW5nKCksIGN1cnJlbnRRdW90YSwgY3VycmVudE9yaWdpblVz
YWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSwgZXhwZWN0ZWRVc2FnZSk7CisgICAgRXdrVmlldyog
dmlldyA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXc7CisgICAgcmV0dXJu
IHZpZXctPmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKHRvSW1wbChkYXRhYmFzZU5hbWUpLT5z
dHJpbmcoKSwgdG9JbXBsKGRpc3BsYXlOYW1lKS0+c3RyaW5nKCksIGN1cnJlbnRRdW90YSwgY3Vy
cmVudE9yaWdpblVzYWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSwgZXhwZWN0ZWRVc2FnZSk7CiB9
CiAjZW5kaWYKIAogdm9pZCBQYWdlVUlDbGllbnRFZmw6OnJ1bk9wZW5QYW5lbChXS1BhZ2VSZWYs
IFdLRnJhbWVSZWYsIFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiBwYXJhbWV0ZXJzLCBXS09wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQog
ewotICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudElu
Zm8pLT5tX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VVSUNsaWVudEVmbChj
bGllbnRJbmZvKS0+bV92aWV3OwogICAgIFJlZlB0cjxFd2tGaWxlQ2hvb3NlclJlcXVlc3Q+IGZp
bGVDaG9vc2VyUmVxdWVzdCA9IEV3a0ZpbGVDaG9vc2VyUmVxdWVzdDo6Y3JlYXRlKHRvSW1wbChw
YXJhbWV0ZXJzKSwgdG9JbXBsKGxpc3RlbmVyKSk7Ci0gICAgdmlld0ltcGwtPnNtYXJ0Q2FsbGJh
Y2s8RmlsZUNob29zZXJSZXF1ZXN0PigpLmNhbGwoZmlsZUNob29zZXJSZXF1ZXN0LmdldCgpKTsK
KyAgICB2aWV3LT5zbWFydENhbGxiYWNrPEZpbGVDaG9vc2VyUmVxdWVzdD4oKS5jYWxsKGZpbGVD
aG9vc2VyUmVxdWVzdC5nZXQoKSk7CiB9CiAKIFdLUGFnZVJlZiBQYWdlVUlDbGllbnRFZmw6OmNy
ZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVlc3RSZWYgd2tSZXF1ZXN0LCBXS0RpY3Rp
b25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNl
QnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIFJlZlB0cjxFd2tVcmxSZXF1
ZXN0PiByZXF1ZXN0ID0gRXdrVXJsUmVxdWVzdDo6Y3JlYXRlKHdrUmVxdWVzdCk7Ci0gICAgcmV0
dXJuIHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5jcmVhdGVOZXdQ
YWdlKHJlcXVlc3QsIHRvSW1wbCh3a1dpbmRvd0ZlYXR1cmVzKSk7CisgICAgcmV0dXJuIHRvUGFn
ZVVJQ2xpZW50RWZsKGNsaWVudEluZm8pLT5tX3ZpZXctPmNyZWF0ZU5ld1BhZ2UocmVxdWVzdCwg
dG9JbXBsKHdrV2luZG93RmVhdHVyZXMpKTsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NP
TE9SKQpAQCAtMjE1LDEzICsyMTUsMTMgQEAgdm9pZCBQYWdlVUlDbGllbnRFZmw6OnNob3dDb2xv
clBpY2tlcihXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIGluaXRpYWxDb2xvciwgV0tDb2wKIHsKICAg
ICBQYWdlVUlDbGllbnRFZmwqIHBhZ2VVSUNsaWVudCA9IHRvUGFnZVVJQ2xpZW50RWZsKGNsaWVu
dEluZm8pOwogICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yID0gV2ViQ29yZTo6Q29sb3IoV2ViS2l0
Ojp0b1dURlN0cmluZyhpbml0aWFsQ29sb3IpKTsKLSAgICBwYWdlVUlDbGllbnQtPm1fdmlld0lt
cGwtPnJlcXVlc3RDb2xvclBpY2tlcihsaXN0ZW5lciwgY29sb3IpOworICAgIHBhZ2VVSUNsaWVu
dC0+bV92aWV3LT5yZXF1ZXN0Q29sb3JQaWNrZXIobGlzdGVuZXIsIGNvbG9yKTsKIH0KIAogdm9p
ZCBQYWdlVUlDbGllbnRFZmw6OmhpZGVDb2xvclBpY2tlcihXS1BhZ2VSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCiB7CiAgICAgUGFnZVVJQ2xpZW50RWZsKiBwYWdlVUlDbGllbnQgPSB0b1Bh
Z2VVSUNsaWVudEVmbChjbGllbnRJbmZvKTsKLSAgICBwYWdlVUlDbGllbnQtPm1fdmlld0ltcGwt
PmRpc21pc3NDb2xvclBpY2tlcigpOworICAgIHBhZ2VVSUNsaWVudC0+bV92aWV3LT5kaXNtaXNz
Q29sb3JQaWNrZXIoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9QYWdlVUlDbGllbnRFZmwuaAppbmRleCAwZmI3ODgyLi5iNDE1ZTBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VVSUNsaWVudEVmbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVVJQ2xpZW50RWZsLmgKQEAgLTMxLDE5ICsz
MSwxOSBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFzcyBFd2tWaWV3OwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgUGFnZVVJQ2xpZW50RWZsIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxQYWdlVUlDbGllbnRFZmw+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0lt
cGwpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZVVJQ2xpZW50RWZsPiBjcmVhdGUoRXdrVmll
dyogdmlldykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZVVJQ2xpZW50
RWZsKHZpZXdJbXBsKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZVVJQ2xpZW50
RWZsKHZpZXcpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZVVJQ2xpZW50
RWZsKEV3a1ZpZXdJbXBsKik7CisgICAgZXhwbGljaXQgUGFnZVVJQ2xpZW50RWZsKEV3a1ZpZXcq
KTsKIAogICAgIHN0YXRpYyB2b2lkIGNsb3NlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCopOwogICAg
IHN0YXRpYyB2b2lkIHRha2VGb2N1cyhXS1BhZ2VSZWYsIFdLRm9jdXNEaXJlY3Rpb24sIGNvbnN0
IHZvaWQqKTsKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBoaWRl
Q29sb3JQaWNrZXIoV0tQYWdlUmVmLCBjb25zdCB2b2lkKik7CiAjZW5kaWYKIAotICAgIEV3a1Zp
ZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Q
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKaW5kZXggN2Y2ZDdi
Ni4uZjExZDA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCkBAIC0yOSw3ICsy
OSw3IEBACiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAKICNpbmNsdWRlICJDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5j
bHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVk
ZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCkBAIC0zOCwxMSArMzgsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6
IG1fdmlld0ltcGwodmlld0ltcGwpCitQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsKEV3a1ZpZXcqIHZpZXcpCisgICAgOiBtX3Zp
ZXcodmlldykKICAgICAsIG1fY29udHJvbGxlcigwKQogewotICAgIEFTU0VSVChtX3ZpZXdJbXBs
KTsKKyAgICBBU1NFUlQobV92aWV3KTsKIH0KIAogUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbDo6flBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwoKQpAQCAtNTEsNyArNTEsNyBA
QCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp+UGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudEVmbCgpCiAKIERyYXdpbmdBcmVhUHJveHkqIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRFZmw6OmRyYXdpbmdBcmVhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV92aWV3SW1wbC0+
cGFnZSgpLT5kcmF3aW5nQXJlYSgpOworICAgIHJldHVybiBtX3ZpZXctPnBhZ2UoKS0+ZHJhd2lu
Z0FyZWEoKTsKIH0KIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRS
ZW5kZXJlckFjdGl2ZShib29sIGFjdGl2ZSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRSZW5kZXJlckFjdGl2ZShib29sIGFjdGl2ZSkK
IHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6dXBkYXRlVmlld3BvcnRTaXpl
KCkKIHsKICAgICBBU1NFUlQobV9jb250cm9sbGVyKTsKLSAgICBGbG9hdFNpemUgc2l6ZSA9IG1f
dmlld0ltcGwtPnNpemUoKTsKKyAgICBGbG9hdFNpemUgc2l6ZSA9IG1fdmlldy0+c2l6ZSgpOwog
ICAgIC8vIFRoZSB2aWV3cG9ydCBjb250cm9sbGVyIGV4cGVjdHMgc2l6ZXMgaW4gVUkgdW5pdHMs
IGFuZCBub3QgcmF3IGRldmljZSB1bml0cy4KICAgICBzaXplLnNjYWxlKDEgLyBtX2NvbnRyb2xs
ZXItPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlVmll
d3BvcnRTaXplKHNpemUpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCiB2b2lkIFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1NpemUpCiB7CiAgICAgZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7Ci0gICAg
bV92aWV3SW1wbC0+dXBkYXRlKCk7CisgICAgbV92aWV3LT51cGRhdGUoKTsKIH0KIAogdm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRWaWV3cG9ydFBvc2l0aW9uKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGNvbnRlbnRzUG9pbnQpCkBAIC03OSwyNyArNzksMjcgQEAg
dm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRWaWV3cG9ydFBvc2l0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG8KICAgICBtX2NvbnRlbnRQb3NpdGlvbiA9IGNvbnRlbnRz
UG9pbnQ7CiAKICAgICBGbG9hdFBvaW50IHBvcyhjb250ZW50c1BvaW50KTsKLSAgICBwb3Muc2Nh
bGUobV92aWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCksIG1fdmlld0ltcGwtPnBhZ2VTY2FsZUZh
Y3RvcigpKTsKLSAgICBwb3Muc2NhbGUobV92aWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwg
bV92aWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgbV92aWV3SW1wbC0+c2V0UGFn
ZVBvc2l0aW9uKHBvcyk7CisgICAgcG9zLnNjYWxlKG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCks
IG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHBvcy5zY2FsZShtX3ZpZXctPmRldmlj
ZVNjYWxlRmFjdG9yKCksIG1fdmlldy0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV92aWV3
LT5zZXRQYWdlUG9zaXRpb24ocG9zKTsKIAotICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQ29u
dGVudHNWaXNpYmlsaXR5KG1fY29udGVudFBvc2l0aW9uLCBtX3ZpZXdJbXBsLT5wYWdlU2NhbGVG
YWN0b3IoKSk7CisgICAgbV9jb250cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHko
bV9jb250ZW50UG9zaXRpb24sIG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCkpOwogfQogCiB2b2lk
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFBhZ2VTY2FsZUZhY3RvcihmbG9h
dCBuZXdTY2FsZSkKIHsKLSAgICBtX3ZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3IobmV3U2Nh
bGUpOworICAgIG1fdmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKG5ld1NjYWxlKTsKIH0KIAogdm9p
ZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkaWRSZXN1bWVDb250ZW50KCkKIHsK
ICAgICBBU1NFUlQobV9jb250cm9sbGVyKTsKLSAgICBtX2NvbnRyb2xsZXItPmRpZENoYW5nZUNv
bnRlbnRzVmlzaWJpbGl0eShtX2NvbnRlbnRQb3NpdGlvbiwgbV92aWV3SW1wbC0+cGFnZVNjYWxl
RmFjdG9yKCkpOworICAgIG1fY29udHJvbGxlci0+ZGlkQ2hhbmdlQ29udGVudHNWaXNpYmlsaXR5
KG1fY29udGVudFBvc2l0aW9uLCBtX3ZpZXctPnBhZ2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9p
ZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkaWRDaGFuZ2VWaXNpYmxlQ29udGVu
dHMoKQogewotICAgIG1fdmlld0ltcGwtPnVwZGF0ZSgpOworICAgIG1fdmlldy0+dXBkYXRlKCk7
CiB9CiAKIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlkQ2hhbmdlVmll
d3BvcnRBdHRyaWJ1dGVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKaW5kZXggNWY4Mzg4
ZC4uYjg3YTBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgKQEAgLTI4LDcgKzI4LDcg
QEAKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCi0jaW5jbHVkZSAiRXdrVmlld0lt
cGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIK
ICNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwgOiBwdWJsaWMgUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkK
KyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsPiBj
cmVhdGUoRXdrVmlldyogdmlld0ltcGwpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwodmlld0ltcGwpKTsKICAgICB9CkBA
IC02MSw5ICs2MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihQ
YWdlVmlld3BvcnRDb250cm9sbGVyKik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbChFd2tWaWV3SW1wbCopOworICAgIGV4cGxpY2l0IFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwoRXdrVmlldyopOwogCi0gICAgRXdrVmlld0lt
cGwqIG1fdmlld0ltcGw7CisgICAgRXdrVmlldyogbV92aWV3OwogICAgIFdlYkNvcmU6OkludFNp
emUgbV92aWV3cG9ydFNpemU7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2NvbnRlbnRQb3Np
dGlvbjsKICAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyKiBtX2NvbnRyb2xsZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKaW5k
ZXggNGUxMDEwZC4uNTY2MmE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9WaWJyYXRpb25DbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKFZJQlJBVElPTikKIAotI2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdr
Vmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLVmlicmF0aW9uLmgi
CiAKQEAgLTQyLDI1ICs0MiwyNSBAQCBzdGF0aWMgaW5saW5lIFZpYnJhdGlvbkNsaWVudEVmbCog
dG9WaWJyYXRpb25DbGllbnQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIAogdm9pZCBWaWJyYXRp
b25DbGllbnRFZmw6OnZpYnJhdGVDYWxsYmFjayhXS1ZpYnJhdGlvblJlZiwgdWludDMyX3Qgdmli
cmF0aW9uVGltZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICB0b1ZpYnJhdGlvbkNs
aWVudChjbGllbnRJbmZvKS0+bV92aWV3SW1wbC0+c21hcnRDYWxsYmFjazxWaWJyYXRlPigpLmNh
bGwoJnZpYnJhdGlvblRpbWUpOworICAgIHRvVmlicmF0aW9uQ2xpZW50KGNsaWVudEluZm8pLT5t
X3ZpZXctPnNtYXJ0Q2FsbGJhY2s8VmlicmF0ZT4oKS5jYWxsKCZ2aWJyYXRpb25UaW1lKTsKIH0K
IAogdm9pZCBWaWJyYXRpb25DbGllbnRFZmw6OmNhbmNlbFZpYnJhdGlvbkNhbGxiYWNrKFdLVmli
cmF0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHRvVmlicmF0aW9uQ2xp
ZW50KGNsaWVudEluZm8pLT5tX3ZpZXdJbXBsLT5zbWFydENhbGxiYWNrPENhbmNlbFZpYnJhdGlv
bj4oKS5jYWxsKCk7CisgICAgdG9WaWJyYXRpb25DbGllbnQoY2xpZW50SW5mbyktPm1fdmlldy0+
c21hcnRDYWxsYmFjazxDYW5jZWxWaWJyYXRpb24+KCkuY2FsbCgpOwogfQogCi1QYXNzT3duUHRy
PFZpYnJhdGlvbkNsaWVudEVmbD4gVmlicmF0aW9uQ2xpZW50RWZsOjpjcmVhdGUoRXdrVmlld0lt
cGwqIHZpZXdJbXBsKQorUGFzc093blB0cjxWaWJyYXRpb25DbGllbnRFZmw+IFZpYnJhdGlvbkNs
aWVudEVmbDo6Y3JlYXRlKEV3a1ZpZXcqIHZpZXdJbXBsKQogewogICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVmlicmF0aW9uQ2xpZW50RWZsKHZpZXdJbXBsKSk7CiB9CiAKLVZpYnJhdGlvbkNsaWVu
dEVmbDo6VmlicmF0aW9uQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICA6IG1f
dmlld0ltcGwodmlld0ltcGwpCitWaWJyYXRpb25DbGllbnRFZmw6OlZpYnJhdGlvbkNsaWVudEVm
bChFd2tWaWV3KiB2aWV3KQorICAgIDogbV92aWV3KHZpZXcpCiB7Ci0gICAgQVNTRVJUKG1fdmll
d0ltcGwpOworICAgIEFTU0VSVChtX3ZpZXcpOwogCi0gICAgV0tQYWdlUmVmIHBhZ2VSZWYgPSBt
X3ZpZXdJbXBsLT53a1BhZ2UoKTsKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZiA9IG1fdmlldy0+d2tQ
YWdlKCk7CiAgICAgQVNTRVJUKHBhZ2VSZWYpOwogCiAgICAgV0tWaWJyYXRpb25SZWYgd2tWaWJy
YXRpb24gPSBXS1BhZ2VHZXRWaWJyYXRpb24ocGFnZVJlZik7CkBAIC03Nyw3ICs3Nyw3IEBAIFZp
YnJhdGlvbkNsaWVudEVmbDo6VmlicmF0aW9uQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1w
bCkKIAogVmlicmF0aW9uQ2xpZW50RWZsOjp+VmlicmF0aW9uQ2xpZW50RWZsKCkKIHsKLSAgICBX
S1BhZ2VSZWYgcGFnZVJlZiA9IG1fdmlld0ltcGwtPndrUGFnZSgpOworICAgIFdLUGFnZVJlZiBw
YWdlUmVmID0gbV92aWV3LT53a1BhZ2UoKTsKICAgICBBU1NFUlQocGFnZVJlZik7CiAKICAgICBX
S1ZpYnJhdGlvblJlZiB3a1ZpYnJhdGlvbiA9IFdLUGFnZUdldFZpYnJhdGlvbihwYWdlUmVmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50
RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5o
CmluZGV4IDBmYWEwYmUuLmVjNDllOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9WaWJyYXRpb25DbGllbnRFZmwuaApAQCAtMzEsMjMgKzMxLDIzIEBACiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCi1jbGFz
cyBFd2tWaWV3SW1wbDsKK2NsYXNzIEV3a1ZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBWaWJyYXRpb25DbGllbnRFZmwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFZpYnJhdGlvbkNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKik7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8VmlicmF0aW9uQ2xpZW50RWZsPiBjcmVhdGUoRXdrVmlldyopOwogCiAgICAgdmly
dHVhbCB+VmlicmF0aW9uQ2xpZW50RWZsKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgVmli
cmF0aW9uQ2xpZW50RWZsKEV3a1ZpZXdJbXBsKik7CisgICAgZXhwbGljaXQgVmlicmF0aW9uQ2xp
ZW50RWZsKEV3a1ZpZXcqKTsKIAogICAgIHN0YXRpYyB2b2lkIHZpYnJhdGVDYWxsYmFjayhXS1Zp
YnJhdGlvblJlZiwgdWludDMyX3QgdmlicmF0aW9uVGltZSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7CiAgICAgc3RhdGljIHZvaWQgY2FuY2VsVmlicmF0aW9uQ2FsbGJhY2soV0tWaWJyYXRpb25S
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCi0gICAgRXdrVmlld0ltcGwqIG1fdmlld0lt
cGw7CisgICAgRXdrVmlldyogbV92aWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJv
eHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0TWVudVBy
b3h5RWZsLmNwcAppbmRleCBlYzdlMGViLi42OGU3NWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlFZmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dE1lbnVQcm94eUVmbC5jcHAKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogCi0jaW5jbHVkZSAiRXdr
Vmlld0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1l
bnVJdGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KQEAgLTM3LDggKzM3LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJDb250ZXh0TWVudVByb3h5RWZsOjpXZWJDb250
ZXh0TWVudVByb3h5RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUGFnZVByb3h5KiBwYWdl
KQotICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKK1dlYkNvbnRleHRNZW51UHJveHlFZmw6Oldl
YkNvbnRleHRNZW51UHJveHlFZmwoRXdrVmlldyogdmlldywgV2ViUGFnZVByb3h5KiBwYWdlKQor
ICAgIDogbV92aWV3KHZpZXcpCiAgICAgLCBtX3BhZ2UocGFnZSkKIHsKIH0KQEAgLTQ5LDEyICs0
OSwxMiBAQCBXZWJDb250ZXh0TWVudVByb3h5RWZsOjp+V2ViQ29udGV4dE1lbnVQcm94eUVmbCgp
CiAKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eUVmbDo6c2hvd0NvbnRleHRNZW51KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRl
bURhdGE+JiBpdGVtcykKIHsKLSAgICBtX3ZpZXdJbXBsLT5zaG93Q29udGV4dE1lbnUodGhpcywg
cG9zaXRpb24sIGl0ZW1zKTsKKyAgICBtX3ZpZXctPnNob3dDb250ZXh0TWVudSh0aGlzLCBwb3Np
dGlvbiwgaXRlbXMpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlFZmw6OmhpZGVDb250
ZXh0TWVudSgpCiB7Ci0gICAgbV92aWV3SW1wbC0+aGlkZUNvbnRleHRNZW51KCk7CisgICAgbV92
aWV3LT5oaWRlQ29udGV4dE1lbnUoKTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVByb3h5RWZs
Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBp
dGVtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0
TWVudVByb3h5RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRN
ZW51UHJveHlFZmwuaAppbmRleCBlN2JlMmFiLi5lYTQyYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlFZmwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlFZmwuaApAQCAtMzIs
NyArMzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ludFBvaW50Lmg+CiAKLWNsYXNzIEV3a1ZpZXdJbXBsOworY2xhc3MgRXdrVmlldzsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZVBy
b3h5OwogCiBjbGFzcyBXZWJDb250ZXh0TWVudVByb3h5RWZsIDogcHVibGljIFdlYkNvbnRleHRN
ZW51UHJveHkgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51
UHJveHlFZmw+IGNyZWF0ZShFd2tWaWV3SW1wbCogdmlld0ltcGwsIFdlYlBhZ2VQcm94eSogcGFn
ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5RWZsPiBjcmVhdGUo
RXdrVmlldyogdmlld0ltcGwsIFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eUVmbCh2aWV3SW1wbCwgcGFnZSkp
OwogICAgIH0KQEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgogICAgIHZvaWQgY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpOwogCiBwcml2YXRlOgot
ICAgIFdlYkNvbnRleHRNZW51UHJveHlFZmwoRXdrVmlld0ltcGwqLCBXZWJQYWdlUHJveHkqKTsK
KyAgICBXZWJDb250ZXh0TWVudVByb3h5RWZsKEV3a1ZpZXcqLCBXZWJQYWdlUHJveHkqKTsKIAot
ICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIEV3a1ZpZXcqIG1fdmlldzsKICAgICBX
ZWJQYWdlUHJveHkqIG1fcGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCmluZGV4
IDQ2OGNiZjguLjAwNTAyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcApAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogCi0jaW5jbHVkZSAiRXdrVmll
d0ltcGwuaCIKKyNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTU3LDcgKzU3LDcgQEAg
dm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4oKQogICAgICAg
ICByZXR1cm47CiAKICAgICB3aWxsRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgRXdrVmlld0ltcGw6
OmZyb21FdmFzT2JqZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOworICAgIEV3a1Zp
ZXc6OmZyb21FdmFzT2JqZWN0KG1fd2ViVmlldyktPmVudGVyRnVsbFNjcmVlbigpOwogICAgIGRp
ZEVudGVyRnVsbFNjcmVlbigpOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgV2ViRnVsbFNj
cmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4oKQogCiAKICAgICB3aWxsRXhpdEZ1bGxT
Y3JlZW4oKTsKLSAgICBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmplY3QobV93ZWJWaWV3KS0+ZXhp
dEZ1bGxTY3JlZW4oKTsKKyAgICBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX3dlYlZpZXcpLT5l
eGl0RnVsbFNjcmVlbigpOwogICAgIGRpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAK
aW5kZXggZjk4MTg2OS4uNDYyYjI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKLSNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgorI2luY2x1
ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJl
d2tfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgpAQCAtOTgsOCArOTgsOCBAQCBX
ZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBh
Z2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9p
bnNwZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9B
UEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3SW1wbDo6TGVnYWN5QmVoYXZpb3IpOwot
ICAgIEV3a1ZpZXdJbXBsKiBpbnNwZWN0b3JWaWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZh
c09iamVjdChtX2luc3BlY3RvclZpZXcpOworICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3
X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgp
LT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdr
Vmlldzo6TGVnYWN5QmVoYXZpb3IpOworICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBsID0g
RXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKICAgICBpbnNwZWN0b3JW
aWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKIAog
ICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0dGluZ3Mo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNw
cAppbmRleCBiZWZhMjQ3Li5hMzMyNzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKLSNpbmNsdWRlICJFd2tWaWV3
SW1wbC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlQ2xp
ZW50QmFzZS5oIgpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRXZhc19P
YmplY3QqIFdlYlBhZ2VQcm94eTo6dmlld1dpZGdldCgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFBhZ2VDbGllbnRCYXNlKj4obV9wYWdlQ2xpZW50KS0+dmlld0ltcGwoKS0+dmlldygpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50QmFzZSo+KG1fcGFnZUNsaWVudCktPnZp
ZXcoKS0+dmlldygpOwogfQogCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2Vu
dChjb25zdCBTdHJpbmcmIC8qYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ki8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBvcHVwTWVudVByb3h5RWZsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuY3Bw
CmluZGV4IGY1YjEwNGQuLmE1OTU1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlFZmwuaCIKIAot
I2luY2x1ZGUgIkV3a1ZpZXdJbXBsLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUg
Ik5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJQb3B1cEl0ZW0uaCIKICNpbmNs
dWRlICJld2tfdmlldy5oIgpAQCAtMzYsMjAgKzM2LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViUG9wdXBNZW51UHJveHlFZmw6OldlYlBv
cHVwTWVudVByb3h5RWZsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUG9wdXBNZW51UHJveHk6
OkNsaWVudCogY2xpZW50KQorV2ViUG9wdXBNZW51UHJveHlFZmw6OldlYlBvcHVwTWVudVByb3h5
RWZsKEV3a1ZpZXcqIHZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQqIGNsaWVudCkKICAg
ICA6IFdlYlBvcHVwTWVudVByb3h5KGNsaWVudCkKLSAgICAsIG1fdmlld0ltcGwodmlld0ltcGwp
CisgICAgLCBtX3ZpZXcodmlldykKIHsKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnVQcm94eUVmbDo6
c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJl
Y3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+
JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiwgaW50MzJfdCBzZWxlY3RlZElu
ZGV4KQogewotICAgIG1fdmlld0ltcGwtPnJlcXVlc3RQb3B1cE1lbnUodGhpcywgcmVjdCwgdGV4
dERpcmVjdGlvbiwgcGFnZVNjYWxlRmFjdG9yLCBpdGVtcywgc2VsZWN0ZWRJbmRleCk7CisgICAg
bV92aWV3LT5yZXF1ZXN0UG9wdXBNZW51KHRoaXMsIHJlY3QsIHRleHREaXJlY3Rpb24sIHBhZ2VT
Y2FsZUZhY3RvciwgaXRlbXMsIHNlbGVjdGVkSW5kZXgpOwogfQogCiB2b2lkIFdlYlBvcHVwTWVu
dVByb3h5RWZsOjpoaWRlUG9wdXBNZW51KCkKIHsKLSAgICBtX3ZpZXdJbXBsLT5jbG9zZVBvcHVw
TWVudSgpOworICAgIG1fdmlldy0+Y2xvc2VQb3B1cE1lbnUoKTsKIH0KIAogdm9pZCBXZWJQb3B1
cE1lbnVQcm94eUVmbDo6dmFsdWVDaGFuZ2VkKGludCBuZXdTZWxlY3RlZEluZGV4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQb3B1cE1lbnVQcm94eUVmbC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQb3B1cE1lbnVQcm94eUVmbC5oCmlu
ZGV4IDRjMGNhZmUuLjAxOTMzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViUG9wdXBNZW51UHJveHlFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlBvcHVwTWVudVByb3h5RWZsLmgKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKIH0KIAotY2xhc3MgRXdrVmlld0ltcGw7CitjbGFz
cyBFd2tWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDAsNyArNDAsNyBAQCBjbGFz
cyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIFdlYlBvcHVwTWVudVByb3h5RWZsIDogcHVibGljIFdl
YlBvcHVwTWVudVByb3h5IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQb3B1
cE1lbnVQcm94eUVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUG9wdXBNZW51
UHJveHk6OkNsaWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBvcHVwTWVu
dVByb3h5RWZsPiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGwsIFdlYlBvcHVwTWVudVByb3h5OjpD
bGllbnQqIGNsaWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUG9w
dXBNZW51UHJveHlFZmwodmlld0ltcGwsIGNsaWVudCkpOwogICAgIH0KQEAgLTUxLDkgKzUxLDkg
QEAgcHVibGljOgogICAgIHZvaWQgdmFsdWVDaGFuZ2VkKGludCBuZXdTZWxlY3RlZEluZGV4KTsK
IAogcHJpdmF0ZToKLSAgICBXZWJQb3B1cE1lbnVQcm94eUVmbChFd2tWaWV3SW1wbCosIFdlYlBv
cHVwTWVudVByb3h5OjpDbGllbnQqKTsKKyAgICBXZWJQb3B1cE1lbnVQcm94eUVmbChFd2tWaWV3
KiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCopOwogCi0gICAgRXdrVmlld0ltcGwqIG1fdmll
d0ltcGw7CisgICAgRXdrVmlldyogbV92aWV3OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Cg==
</data>
<flag name="review"
          id="203154"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="203205"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>