<?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>205233</bug_id>
          
          <creation_ts>2019-12-13 21:53:21 -0800</creation_ts>
          <short_desc>Move code out of WKWebView.mm into platform-specific files, for easier navigation</short_desc>
          <delta_ts>2019-12-14 12:19:17 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1598614</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-13 21:53:21 -0800</bug_when>
    <thetext>Move code out of WKWebView.mm into platform-specific files, for easier navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598615</commentid>
    <comment_count>1</comment_count>
      <attachid>385681</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-13 22:09:08 -0800</bug_when>
    <thetext>Created attachment 385681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598619</commentid>
    <comment_count>2</comment_count>
      <attachid>385683</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-13 22:46:38 -0800</bug_when>
    <thetext>Created attachment 385683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598657</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-14 11:25:47 -0800</bug_when>
    <thetext>rs=me because what else could it possibly be</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598660</commentid>
    <comment_count>4</comment_count>
      <attachid>385683</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-14 12:18:43 -0800</bug_when>
    <thetext>Comment on attachment 385683
Patch

Clearing flags on attachment: 385683

Committed r253527: &lt;https://trac.webkit.org/changeset/253527&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598661</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-14 12:18:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598662</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-14 12:19:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/57940484&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385681</attachid>
            <date>2019-12-13 22:09:08 -0800</date>
            <delta_ts>2019-12-13 22:46:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205233-20191213220907.patch</filename>
            <type>text/plain</type>
            <size>587321</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ1NzhjN2I1ZTMzMGMzYzNj
MDI3ZTZiNzRmMjMxYWViMzE3Mjk3Y2IuLmRjMGQxODExMGU2YWU1MjYwZDk2MWJiOWYxYTAwYTYy
NzM3OTc4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEzNCBAQAorMjAxOS0xMi0xMyAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNvZGUgb3V0
IG9mIFdLV2ViVmlldy5tbSBpbnRvIHBsYXRmb3JtLXNwZWNpZmljIGZpbGVzLCBmb3IgZWFzaWVy
IG5hdmlnYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNTIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgYXMgbXVjaCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIG91dCBvZiBXS1dlYlZpZXcu
bW0gYXMgcG9zc2libGUsIG1vdmluZyBpdCB0byBXS1dlYlZpZXdNYWMvV0tXZWJWaWV3SU9TLgor
ICAgICAgICBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkgaXMgc3BsaXQgaW50byBXS1dlYlZpZXcgKFdL
UHJpdmF0ZUlPUykgYW5kIFdLV2ViVmlldyAoV0tQcml2YXRlTWFjKSBzbyB0aGUgaW1wbGVtZW50
YXRpb25zCisgICAgICAgIG9mIHRob3NlIGZ1bmN0aW9ucyBjYW4gbW92ZS4KKyAgICAgICAgCisg
ICAgICAgIENvZGUgdGhhdCByZW1haW5zIGluIFdLV2ViVmlldy5tbSBpcyBlaXRoZXIgQ29jb2Et
Z2VuZXJpYywgb3IgaW1wbGVtZW50cyBBUEkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGVu
dGlyZWx5IGN1dC9wYXN0ZSwgb3RoZXIgdGhhbiB0aGUgYWRkaXRpb24gb2YgLV90YWtlRmluZFN0
cmluZ0Zyb21TZWxlY3Rpb25JbnRlcm5hbDogZm9yIG1hY09TCisgICAgICAgIHRvIGFsbG93IFdL
V2ViVmlldy5tbSB0byBjYWxsIC10YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246LgorCisgICAg
ICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbToKKyAgICAgICAgKGhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2Vk
Q2FsbGJhY2spOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QWxsb3dzQmFja0ZvcndhcmROYXZp
Z2F0aW9uR2VzdHVyZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBhbGxvd3NCYWNrRm9yd2Fy
ZE5hdmlnYXRpb25HZXN0dXJlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0UGFnZVpvb206
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBwYWdlWm9vbV0pOgorICAgICAgICAodG9GaW5kT3B0
aW9ucyk6CisgICAgICAgICgtW1dLV2ViVmlldyBmaW5kU3RyaW5nOndpdGhDb25maWd1cmF0aW9u
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgaGFuZGxlc1VSTFNj
aGVtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldE1lZGlhVHlwZTpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IG1lZGlhVHlwZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmll
d10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QWxsb3dzTWFnbmlmaWNhdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGFsbG93c01hZ25pZmljYXRpb25dKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IHNldE1hZ25pZmljYXRpb246Y2VudGVyZWRBdFBvaW50Ol0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgc2V0TWFnbmlmaWNhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1hZ25p
ZmljYXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByaW50T3BlcmF0aW9uV2l0aFByaW50
SW5mbzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhclNhZmVCcm93
c2luZ1dhcm5pbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhclNhZmVCcm93c2luZ1dh
cm5pbmdJZkZvck1haW5GcmFtZU5hdmlnYXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9p
bnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOndpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6d2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpdKToKKyAgICAgICAgKGRpY3Rp
b25hcnlSZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKToKKyAgICAgICAgKG5zVGV4dEFsaWdu
bWVudCk6CisgICAgICAgIChzZWxlY3Rpb25BdHRyaWJ1dGVzKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kaWRDaGFuZ2VFZGl0b3JTdGF0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvZ2ds
ZVN0cmlrZVRocm91Z2g6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5jcmVhc2VMaXN0TGV2
ZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGVjcmVhc2VMaXN0TGV2ZWw6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY2hhbmdlTGlzdFR5cGU6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBpbnB1dEFjY2Vzc29yeVZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGlucHV0Vmlld10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgaW5wdXRBc3Npc3RhbnRJdGVtXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2VsZWN0aW9uQXR0cmlidXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3ZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2luc3BlY3Rvcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21haW5GcmFtZV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2lzRWRpdGFibGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRFZGl0YWJsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9leGVjdXRlRWRpdENvbW1h
bmQ6YXJndW1lbnQ6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90ZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1
bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOl0pOgorICAgICAgICAoK1tX
S1dlYlZpZXcgX3N0cmluZ0ZvckZpbmRdKToKKyAgICAgICAgKCtbV0tXZWJWaWV3IF9zZXRTdHJp
bmdGb3JGaW5kOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW90ZU9iamVjdFJlZ2lzdHJ5
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGFuZGxlXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50c10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2hpc3RvcnlEZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhpc3RvcnlE
ZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVNZWRpYVBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuVG9nZ2xlUGljdHVyZUlu
UGljdHVyZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUGljdHVyZUluUGljdHVyZUFjdGl2
ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvZ2dsZVBpY3R1cmVJblBpY3R1cmVdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jbG9zZUFsbE1lZGlhUHJlc2VudGF0aW9uc10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3N0b3BNZWRpYUNhcHR1cmVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zdG9wQWxsTWVkaWFQbGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N1c3BlbmRB
bGxNZWRpYVBsYXliYWNrXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzdW1lQWxsTWVkaWFQ
bGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VucmVhY2hhYmxlVVJMXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfbWFpbkZyYW1lVVJMXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
bG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6YmFzZVVSTDpmb3JVbnJlYWNoYWJsZVVSTDpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9sb2FkRGF0YTpNSU1FVHlwZTpjaGFyYWN0ZXJFbmNvZGluZ05h
bWU6YmFzZVVSTDp1c2VyRGF0YTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9sb2FkUmVxdWVz
dDpzaG91bGRPcGVuRXh0ZXJuYWxVUkxzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NlcnRp
ZmljYXRlQ2hhaW5dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21taXR0ZWRVUkxdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9NSU1FVHlwZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vz
ZXJBZ2VudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FwcGxpY2F0aW9uTmFtZUZvclVzZXJB
Z2VudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJB
Z2VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jdXN0b21Vc2VyQWdlbnRdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9zZXRDdXN0b21Vc2VyQWdlbnQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm92
aXNpb25hbFdlYlByb2Nlc3NJZGVudGlmaWVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2Vi
UHJvY2Vzc0lzUmVzcG9uc2l2ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2tpbGxXZWJDb250
ZW50UHJvY2Vzc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbG9hZFdpdGhvdXRDb250ZW50
QmxvY2tlcnNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZWxvYWRFeHBpcmVkT25seV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGVd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb252ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5h
dGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nvb3Jk
aW5hdGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0
c0luUmVjdDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mb2N1
c1RleHRJbnB1dENvbnRleHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfdGFrZVBERlNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29tcGxldGlvbkhhbmRsZXI6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Vzc2lvblN0YXRlRGF0YV0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3Nlc3Npb25TdGF0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nlc3Np
b25TdGF0ZVdpdGhGaWx0ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzdG9yZUZyb21T
ZXNzaW9uU3RhdGVEYXRhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc3RvcmVTZXNzaW9u
U3RhdGU6YW5kTmF2aWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xvc2VdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOmNvbnRlbnRU
eXBlOmRhdGE6b3B0aW9uczpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lu
c2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Y29udGVudFR5cGU6b3B0aW9uczpjb21wbGV0
aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdy
YXBwZXI6Y29udGVudFR5cGU6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
dHRhY2htZW50Rm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0
ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlV2l0aEFscGhhOmJldGE6Z2FtbWE6XSk6CisgICAgICAg
ICgrW1dLV2ViVmlldyBfaGFuZGxlc1NhZmVCcm93c2luZ10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOndhcm5pbmc6ZGV0YWlsczpjb21w
bGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5n
V2FybmluZ1dpdGhVUkw6dGl0bGU6d2FybmluZzpkZXRhaWxzOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoK1tXS1dlYlZpZXcgX2NvbmZpcm1NYWx3YXJlU2VudGluZWxdKToKKyAgICAg
ICAgKCtbV0tXZWJWaWV3IF92aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbF0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2lzSklURW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9ldmFs
dWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2FsbG93c1JlbW90ZUluc3BlY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3JlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRSZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2FkZHNWaXNpdGVkTGlua3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBZGRzVmlzaXRl
ZExpbmtzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX25ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jl
c3NdKToKKyAgICAgICAgKGxheW91dE1pbGVzdG9uZXMpOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldE9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZ2V0TWFpblJlc291cmNlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9nZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2dldENvbnRlbnRzQXNBdHRyaWJ1
dGVkU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2dldEFwcGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcGFnaW5hdGlvbk1vZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRQYWdpbmF0aW9uTW9kZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdpbmF0aW9uQmVo
YXZlc0xpa2VDb2x1bW5zXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnaW5hdGlvbkJl
aGF2ZXNMaWtlQ29sdW1uczpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlTGVuZ3RoXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnZUxlbmd0aDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9nYXBCZXR3ZWVuUGFnZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRHYXBC
ZXR3ZWVuUGFnZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnaW5hdGlvbkxpbmVHcmlk
RW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFBhZ2luYXRpb25MaW5lR3JpZEVu
YWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZUNvdW50XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc3VwcG9ydHNUZXh0Wm9vbV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Rl
eHRab29tRmFjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VGV4dFpvb21GYWN0b3I6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVpvb21GYWN0b3JdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXRQYWdlWm9vbUZhY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
aWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGlh
Z25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9maW5kRGVs
ZWdhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGaW5kRGVsZWdhdGU6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY291bnRTdHJpbmdNYXRjaGVzOm9wdGlvbnM6bWF4Q291bnQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfZmluZFN0cmluZzpvcHRpb25zOm1heENvdW50Ol0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2hpZGVGaW5kVUldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckl0ZW06XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfaW5wdXREZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElucHV0RGVsZWdh
dGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdl
RG9jdW1lbnRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0Rpc3BsYXlpbmdTdGFuZGFsb25l
TWVkaWFEb2N1bWVudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUGxheWluZ0F1ZGlvXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hv
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2xheW91dE1vZGVdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRMYXlvdXRNb2RlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ZpeGVkTGF5
b3V0U2l6ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEZpeGVkTGF5b3V0U2l6ZTpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2U6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfdmlld1NjYWxlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0Vmlld1NjYWxlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1pbmltdW1FZmZlY3Rp
dmVEZXZpY2VXaWR0aDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9taW5pbXVtRWZmZWN0aXZl
RGV2aWNlV2lkdGhdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRTY3JvbGxQZXJmb3JtYW5j
ZURhdGFDb2xsZWN0aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxQ
ZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3Njcm9sbFBlcmZvcm1hbmNlRGF0YV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93c01l
ZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFs
bG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjazpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZnVsbHNj
cmVlbkRlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNJbkZ1bGxzY3JlZW5dKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9tZWRpYUNhcHR1cmVTdGF0ZV0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfbWVkaWFDYXB0dXJlRW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFBhZ2VN
dXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdp
dGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6XSk6CisgICAgICAgICh0b0FQSVNjcm9sbGJhclN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKHRvQ29yZVNjcm9sbGJhclN0eWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKGRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChkZXZpY2VPcmllbnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBzZXRGcmFtZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEJv
dW5kczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGxheW91dFN1YnZpZXdzXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaXNTaG93aW5nVmlkZW9QaWN0dXJlSW5Q
aWN0dXJlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9pbmNyZW1lbnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfZGVjcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudF0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc2V0Rm9jdXNQcmVzZXJ2YXRpb25Db3VudF0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0
YXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZWZmZWN0aXZlQXBwZWFyYW5j
ZUlzRGFya10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VmZmVjdGl2ZVVzZXJJ
bnRlcmZhY2VMZXZlbElzRWxldmF0ZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zaG91bGRBdm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0NoYW5nZV0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RyYWdJbnRlcmFjdGlvblBvbGljeV0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldERyYWdJbnRlcmFjdGlvblBvbGljeTpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wb3B1bGF0ZUFyY2hpdmVkU3Vidmlld3M6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaXNCYWNrZ3JvdW5kXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVyXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgY2FuQmVjb21lRmlyc3RSZXNwb25kZXJdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5QZXJmb3JtQWN0aW9uOndpdGhTZW5kZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB0YXJnZXRGb3JBY3Rpb246d2l0aFNlbmRlcjpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHdpbGxGaW5pc2hJZ25vcmluZ0NhbGxv
dXRCYXJGYWRlQWZ0ZXJQZXJmb3JtaW5nQWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgIChmbG9v
clRvRGV2aWNlUGl4ZWwpOiBEZWxldGVkLgorICAgICAgICAocG9pbnRzRXF1YWxJbkRldmljZVBp
eGVscyk6IERlbGV0ZWQuCisgICAgICAgIChyb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6ZSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY3VycmVudENvbnRlbnRWaWV3XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZWxlY3Rpb25HcmFudWxhcml0eV0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhhc0N1c3RvbUNvbnRlbnRWaWV3OmxvYWRl
ZE1JTUVUeXBlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEZpbmlzaExv
YWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOmRh
dGE6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFuZGxlS2V5VUlFdmVudDpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93aWxsSW52b2tlVUlTY3JvbGxWaWV3
RGVsZWdhdGVDYWxsYmFja10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZElu
dm9rZVVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2tdKTogRGVsZXRlZC4KKyAgICAgICAgKGNv
bnRlbnRab29tU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoYmFzZVNjcm9sbFZpZXdCYWNrZ3Jv
dW5kQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91
bmRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF92aWRlb0NvbnRyb2xzTWFuYWdl
ckRpZENoYW5nZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luaXRpYWxDb250
ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2NvbnRlbnRPZmZzZXRBZGp1c3RlZEZvck9ic2N1cmVkSW5zZXQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZWZmZWN0aXZlT2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNh
ZmVBcmVhXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29tcHV0ZWRPYnNjdXJl
ZEluc2V0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29tcHV0ZWRDb250ZW50
SW5zZXRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21wdXRlZFVub2JzY3Vy
ZWRTYWZlQXJlYUluc2V0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vz
c1dpbGxTd2FwT3JEaWRFeGl0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJv
Y2Vzc1dpbGxTd2FwXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc0Rp
ZEV4aXRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRSZWxhdW5jaFByb2Nl
c3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lXSk6IERlbGV0ZWQuCisgICAgICAgIChjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChjaGFuZ2VDb250ZW50T2Zmc2V0Qm91bmRlZEluVmFs
aWRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB2aXNpYmxlUmVjdEluVmll
d0Nvb3JkaW5hdGVzXSk6IERlbGV0ZWQuCisgICAgICAgIChhcmVFc3NlbnRpYWxseUVxdWFsQXNG
bG9hdCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkQ29tbWl0TGF5ZXJUcmVl
RHVyaW5nQW5pbWF0ZWRSZXNpemU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
ZGlkQ29tbWl0TGF5ZXJUcmVlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2xh
eWVyVHJlZUNvbW1pdENvbXBsZXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
Y291bGROb3RSZXN0b3JlUGFnZVN0YXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfcmVzdG9yZVBhZ2VTY3JvbGxQb3NpdGlvbjpzY3JvbGxPcmlnaW46cHJldmlvdXNPYnNjdXJl
ZEluc2V0OnNjYWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc3RvcmVQ
YWdlU3RhdGVUb1Vub2JzY3VyZWRDZW50ZXI6c2NhbGU6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfdGFrZVZpZXdTbmFwc2hvdF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3pvb21Ub1BvaW50OmF0U2NhbGU6YW5pbWF0ZWQ6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfem9vbVRvUmVjdDphdFNjYWxlOm9yaWdpbjphbmltYXRlZDpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKGNvbnN0cmFpbkNvbnRlbnRPZmZzZXQpOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Njcm9sbFRvQ29udGVudFNjcm9sbFBvc2l0aW9uOnNjcm9sbE9yaWdp
bjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxUb1JlY3Q6b3JpZ2lu
Om1pbmltdW1TY3JvbGxEaXN0YW5jZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF96b29tT3V0V2l0aE9yaWdpbjphbmltYXRlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF96b29tVG9Jbml0aWFsU2NhbGVXaXRoT3JpZ2luOmFuaW1hdGVkOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3pvb21Ub0ZvY3VzUmVjdDpzZWxlY3Rpb25SZWN0Omlu
c2lkZUZpeGVkOmZvbnRTaXplOm1pbmltdW1TY2FsZTptYXhpbXVtU2NhbGU6YWxsb3dTY2FsaW5n
OmZvcmNlU2Nyb2xsOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luaXRpYWxT
Y2FsZUZhY3Rvcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRab29t
U2NhbGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF90YXJnZXRDb250ZW50Wm9v
bVNjYWxlRm9yUmVjdDpjdXJyZW50U2NhbGU6Zml0RW50aXJlUmVjdDptaW5pbXVtU2NhbGU6bWF4
aW11bVNjYWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3pvb21Ub1JlY3Q6
d2l0aE9yaWdpbjpmaXRFbnRpcmVSZWN0Om1pbmltdW1TY2FsZTptYXhpbXVtU2NhbGU6bWluaW11
bVNjcm9sbERpc3RhbmNlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlkTW92
ZVRvV2luZG93XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3BhcXVlSW50
ZXJuYWw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRPcGFxdWU6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWxsb3dzRG91YmxlVGFwR2VzdHVyZXNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdHlsdXNUYXBHZXN0dXJlU2hvdWxkQ3JlYXRl
RWRpdGFibGVJbWFnZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdXNlc1N0YW5k
YXJkQ29udGVudFZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZp
ZXc6Y29udGVudFNpemVGb3Jab29tU2NhbGU6d2l0aFByb3Bvc2VkU2l6ZTpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdGb3Jab29taW5nSW5TY3JvbGxWaWV3Ol0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld1dpbGxCZWdpblpvb21pbmc6d2l0
aFZpZXc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3V2lsbEJl
Z2luRHJhZ2dpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNo
U2Nyb2xsaW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3V2ls
bEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOndpbGxEZWNl
bGVyYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZEVu
ZERlY2VsZXJhdGluZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZp
ZXdEaWRTY3JvbGxUb1RvcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3Jv
bGxWaWV3OmFkanVzdGVkT2Zmc2V0Rm9yT2Zmc2V0OnRyYW5zbGF0aW9uOnN0YXJ0UG9pbnQ6bG9j
YXRpb25JblZpZXc6aG9yaXpvbnRhbFZlbG9jaXR5OnZlcnRpY2FsVmVsb2NpdHk6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkU2Nyb2xsOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZFpvb206XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kWm9vbWluZzp3aXRoVmlldzphdFNj
YWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZEVuZFNj
cm9sbGluZ0FuaW1hdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3Jv
bGxWaWV3RGlkSW50ZXJydXB0RGVjZWxlcmF0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2VuY2xvc2luZ1ZpZXdGb3JFeHBvc2VkUmVjdENvbXB1dGF0aW9uXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZVJlY3RJbkVuY2xvc2luZ1ZpZXc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZUNvbnRlbnRSZWN0XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2Nyb2xsXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZW5jbG9zaW5nU2Nyb2xsZXJTY3JvbGxpbmdFbmRlZDpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxWaWV3U3lzdGVtQ29udGVudEluc2V0
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNwYXRjaFNldFZpZXdMYXlvdXRT
aXplOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3BhdGNoU2V0TWF4aW11
bVVub2JzY3VyZWRTaXplOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3Bh
dGNoU2V0RGV2aWNlT3JpZW50YXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfZnJhbWVPckJvdW5kc0NoYW5nZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jb250ZW50UmVjdEZvclVzZXJJbnRlcmFjdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3Njcm9sbFZpZXdJc1J1YmJlckJhbmRpbmddKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNhZmVBcmVhSW5zZXRzRGlkQ2hhbmdlXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxWaWV3SXNJblN0YWJsZVN0YXRlOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZFVwZGF0ZVZpc2libGVDb250ZW50UmVj
dFByZUNvbW1pdEhhbmRsZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY2hl
ZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3Ol0pOiBEZWxldGVk
LgorICAgICAgICAoc2Nyb2xsVmlld0NhblNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY29udGVudEJvdW5kc0V4dGVuZGVkRm9yUnViYmVyYmFuZGluZ1dpdGhTY2FsZTpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVWaXNpYmxlQ29udGVudFJl
Y3RzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JNYWluRnJhbWVdKTogRGVsZXRlZC4KKyAgICAgICAgKGFjdGl2ZU1heGltdW1Vbm9i
c2N1cmVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChhY3RpdmVPcmllbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNoTG9hZEZvck1haW5GcmFtZV0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEZhaWxMb2FkRm9yTWFpbkZyYW1l
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvck1haW5GcmFtZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXli
b2FyZENoYW5nZWRXaXRoSW5mbzphZGp1c3RTY3JvbGxWaWV3Ol0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Nob3VsZFVwZGF0ZUtleWJvYXJkV2l0aEluZm86XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5Ym9hcmRXaWxsQ2hhbmdlRnJhbWU6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5Ym9hcmREaWRDaGFuZ2VGcmFtZTpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxTaG93Ol0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2tleWJvYXJkRGlkU2hvdzpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxIaWRlOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3dpbmRvd0RpZFJvdGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9jb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRTaXplQ2F0ZWdvcnldKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2U6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaXNOYXZpZ2F0aW9uU3dpcGVHZXN0dXJlUmVjb2du
aXplcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVy
ZURpZEJlZ2luXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbmF2aWdhdGlvbkdl
c3R1cmVEaWRFbmRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93UGFzc3dv
cmRWaWV3V2l0aERvY3VtZW50TmFtZTpwYXNzd29yZEhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfaGlkZVBhc3N3b3JkVmlld10pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3Bhc3N3b3JkVmlld10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3VwZGF0ZVNjcm9sbFZpZXdJbnNldEFkanVzdG1lbnRCZWhhdmlvcl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEF2b2lkc1Vuc2FmZUFyZWE6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyB2aWV3RGlkRW5kTGl2ZVJlc2l6ZV0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgaXNGbGlwcGVkXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBpbnRyaW5zaWNDb250ZW50U2l6ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgcHJlcGFyZUNvbnRlbnRJblJlY3Q6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBzZXRGcmFtZVNpemU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2dy
YW50RE9NUGFzdGVBY2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcmVw
YXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25dKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQ6dHlwZXM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBjZW50
ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpyZXR1cm5UeXBlOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgY2hhbmdlRm9udDpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IGNoYW5nZUNvbG9yOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgY2hhbmdlQXR0cmlidXRlczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHN0
YXJ0U3BlYWtpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzdG9wU3BlYWtp
bmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzaG93R3Vlc3NQYW5lbDpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGNoZWNrU3BlbGxpbmc6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBjaGFuZ2VTcGVsbGluZzpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlR3JhbW1hckNoZWNraW5nOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgb3JkZXJGcm9udFN1YnN0
aXR1dGlvbnNQYW5lbDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZVNt
YXJ0SW5zZXJ0RGVsZXRlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IHNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uRW5hYmxlZF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QXV0b21hdGlj
RGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyB0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZF0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNBdXRvbWF0aWNUZXh0UmVw
bGFjZW1lbnRFbmFibGVkXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRBdXRv
bWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50Ol0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgdXBwZXJjYXNlV29yZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGxvd2VyY2FzZVdvcmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBj
YXBpdGFsaXplV29yZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93YW50c0tl
eURvd25Gb3JFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFdo
ZWVsOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc3dpcGVXaXRoRXZlbnQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZU1vdmVkOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEb3duOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgbW91c2VVcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNl
RHJhZ2dlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRW50ZXJlZDpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRXhpdGVkOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJNb3VzZURvd246XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRHJhZ2dlZDpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IG90aGVyTW91c2VVcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VEb3duOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgcmln
aHRNb3VzZURyYWdnZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyByaWdodE1v
dXNlVXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBwcmVzc3VyZUNoYW5nZVdp
dGhFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGFjY2VwdHNGaXJzdE1v
dXNlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2hvdWxkRGVsYXlXaW5kb3dP
cmRlcmluZ0ZvckV2ZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZG9Db21t
YW5kQnlTZWxlY3RvcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGluc2VydFRl
eHQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBpbnNlcnRUZXh0OnJlcGxhY2Vt
ZW50UmFuZ2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBpbnB1dENvbnRleHRd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5VXA6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBrZXlEb3duOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgZmxhZ3NDaGFuZ2VkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0TWFy
a2VkVGV4dDpzZWxlY3RlZFJhbmdlOnJlcGxhY2VtZW50UmFuZ2U6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyB1bm1hcmtUZXh0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBzZWxlY3RlZFJhbmdlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBoYXNN
YXJrZWRUZXh0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBtYXJrZWRSYW5nZV0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0ZvclBy
b3Bvc2VkUmFuZ2U6YWN0dWFsUmFuZ2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBjaGFyYWN0ZXJJbmRleEZvclBvaW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgdHlwaW5nQXR0cmlidXRlc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOmFjdHVhbFJhbmdl
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2VsZWN0ZWRSYW5nZVdpdGhDb21w
bGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1hcmtlZFJh
bmdlV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgaGFzTWFya2VkVGV4dFdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBjaGFyYWN0ZXJJbmRleEZvclBvaW50OmNvbXBsZXRpb25IYW5kbGVyOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2Vk
VGV4dF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dlZEltYWdlOmVuZGVk
QXQ6b3BlcmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdF
bnRlcmVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdVcGRhdGVk
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdFeGl0ZWQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBwcmVwYXJlRm9yRHJhZ09wZXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hpdFRlc3Q6ZHJhZ1R5cGVzOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dpbmRvd1Jlc2l6ZU1vdXNlTG9jYXRpb25Jc0lu
VmlzaWJsZVNjcm9sbGVyVGh1bWI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB2
aWV3V2lsbE1vdmVUb1dpbmRvdzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZp
ZXdEaWRNb3ZlVG9XaW5kb3ddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYXdS
ZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNPcGFxdWVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRG93bkNhbk1vdmVXaW5kb3ddKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdEaWRIaWRlXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyB2aWV3RGlkVW5oaWRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyB2aWV3RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXNdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hY3RpdmVTcGFjZURpZENoYW5nZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQ
YXJhbWV0ZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBoaXRUZXN0Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgY29udmVyc2F0aW9uSWRlbnRpZmllcl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgcXVpY2tMb29rV2l0aEV2ZW50Ol0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgYWRkVHJhY2tpbmdSZWN0Om93bmVyOnVzZXJEYXRh
OmFzc3VtZUluc2lkZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hZGRUcmFj
a2luZ1JlY3Q6b3duZXI6dXNlckRhdGE6YXNzdW1lSW5zaWRlOnVzZVRyYWNraW5nTnVtOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZFRyYWNraW5nUmVjdHM6b3duZXI6dXNl
ckRhdGFMaXN0OmFzc3VtZUluc2lkZUxpc3Q6dHJhY2tpbmdOdW1zOmNvdW50Ol0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgcmVtb3ZlVHJhY2tpbmdSZWN0Ol0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZVRyYWNraW5nUmVjdHM6Y291bnQ6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB2aWV3OnN0cmluZ0ZvclRvb2xUaXA6cG9pbnQ6dXNl
ckRhdGE6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBwYXN0ZWJvYXJkQ2hhbmdl
ZE93bmVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgcGFzdGVib2FyZDpwcm92
aWRlRGF0YUZvclR5cGU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBuYW1lc09m
UHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgd2FudHNVcGRhdGVMYXllcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgdXBkYXRlTGF5ZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNtYXJ0
TWFnbmlmeVdpdGhFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1hZ25p
ZnlXaXRoRXZlbnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyByb3RhdGVXaXRo
RXZlbnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdXNlUGxhdGZvcm1GaW5k
VUldKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVc2VQbGF0Zm9ybUZpbmRV
STpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbnN1cmVUZXh0RmluZGVyQ2xp
ZW50XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBmaW5kTWF0Y2hlc0ZvclN0cmlu
ZzpyZWxhdGl2ZVRvTWF0Y2g6ZmluZE9wdGlvbnM6bWF4UmVzdWx0czpyZXN1bHRDb2xsZWN0b3I6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyByZXBsYWNlTWF0Y2hlczp3aXRoU3Ry
aW5nOmluU2VsZWN0aW9uT25seTpyZXN1bHRDb2xsZWN0b3I6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBzY3JvbGxGaW5kTWF0Y2hUb1Zpc2libGU6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBkb2N1bWVudENvbnRhaW5lclZpZXddKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGdldFNlbGVjdGVkVGV4dDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IHNlbGVjdEZpbmRNYXRjaDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJJbnB1dENvbnRleHRdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJRdWlja0xvb2tXaXRoRXZlbnQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyU3dpcGVXaXRoRXZlbnQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyTWFnbmlmeVdpdGhFdmVu
dDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJTbWFydE1hZ25p
ZnlXaXRoRXZlbnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVy
UmVtb3ZlVHJhY2tpbmdSZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dl
Yl9zdXBlckFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJEb0NvbW1hbmRCeVNlbGVjdG9yOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlclBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlcktleURvd246XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVySGl0VGVzdDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlckZvckhpdFRlc3RSZXN1bHRJbnRlcm5hbDp3aXRoVHlwZTp1c2VyRGF0YTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9jYW5jZWxJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93
ZWJfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25dKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF93ZWJfZGlkQ2hhbmdlQ29udGVudFNpemU6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyYWdnaW5nSW5m
bzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZGlkUGVyZm9ybURyYWdP
cGVyYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2Rpc21pc3ND
b250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF93ZWJfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c1dpdGhBbmltYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2VkaXRvclN0YXRlRGlkQ2hh
bmdlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2dlc3R1cmVFdmVudFdh
c05vdEhhbmRsZWRCeVdlYkNvcmU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBm
aWxlUHJvbWlzZVByb3ZpZGVyOmZpbGVOYW1lRm9yVHlwZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IGZpbGVQcm9taXNlUHJvdmlkZXI6d3JpdGVQcm9taXNlVG9VUkw6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBkcmFnZ2luZ1Nl
c3Npb246c291cmNlT3BlcmF0aW9uTWFza0ZvckRyYWdnaW5nQ29udGV4dDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdnaW5nU2Vzc2lvbjplbmRlZEF0UG9pbnQ6b3BlcmF0
aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNN
YW5hZ2VyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVN
ZWRpYUNvbnRyb2xzTWFuYWdlcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lu
dGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfdXNlU3lzdGVtQXBwZWFyYW5jZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlld10pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbkNoYW5nZUZyYW1lTGF5b3V0Ol0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3RyeVRvU3dpcGVXaXRoRXZlbnQ6aWdub3JpbmdQaW5uZWRT
dGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pZ25vcmVzTm9uV2hlZWxF
dmVudHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRJZ25vcmVzTm9uV2hl
ZWxFdmVudHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFzQWN0aXZlVmlk
ZW9Gb3JDb250cm9sc01hbmFnZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
aXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxlRnJhbWVTaXplVXBkYXRlc10pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0No
YW5nZXNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmREZWZlcnJpbmdWaWV3
SW5XaW5kb3dDaGFuZ2VzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kRGVm
ZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfZnVsbFNjcmVlbldpbmRvd10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3VuZGVybGF5Q29sb3JdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRVbmRlcmxheUNvbG9yOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1
c3RvbVN3aXBlVmlld3M6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Q3Vz
dG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldEZyYW1lOmFuZFNjcm9sbEJ5Ol0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5n
ZXM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udDpzZW5kZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udFNpemU6c2VuZGVyOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRleHRDb2xvcjpzZW5kZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBv
c2l0aW9uOmNvbXBsZXRpb25CbG9jazpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jb250ZW50VmlzaWJsZVJlY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9j
b252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY29udmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdWlUZXh0Q2FyZXRSZWN0XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNl
bGVjdGlvbk9mZnNldDp3aXRoVGV4dDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25k
ZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXRhaW5BY3RpdmVGb2N1c2Vk
U3RhdGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWNvbWVGaXJzdFJlc3Bv
bmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3YXJkOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NuYXBzaG90TGF5ZXJDb250ZW50c0ZvckJhY2tG
b3J3YXJkTGlzdEl0ZW06XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGF0YURl
dGVjdGlvblJlc3VsdHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3Np
YmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rpb25Db250ZW50Ol0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmddKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRh
dGlvblVwZGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kZXRlY3REYXRh
V2l0aFR5cGVzOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX21pbmltdW1MYXlvdXRTaXplT3ZlcnJpZGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX29ic2N1cmVkSW5zZXRzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0T2JzY3VyZWRJbnNldHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVh
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vub2JzY3VyZWRTYWZlQXJlYUlu
c2V0c10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVub2JzY3VyZWRTYWZl
QXJlYUluc2V0czpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQXJlYVNo
b3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJJbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbWF4aW11bVVub2JzY3VyZWRTaXplT3Zl
cnJpZGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRNYXhpbXVtVW5vYnNj
dXJlZFNpemVPdmVycmlkZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRB
bGxvd3NWaWV3cG9ydFNocmlua1RvRml0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9iZWdpbkludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2VdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdl
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZUNvbnRlbnRVbnRpbE5leHRV
cGRhdGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVz
aXplV2l0aFVwZGF0ZXM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kQW5p
bWF0ZWRSZXNpemVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXNpemVXaGls
ZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0
aW9uQ2FsbGJhY2tzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3Zlcmxh
aWRBY2Nlc3NvcnlWaWV3c0luc2V0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NuYXBzaG90UmVjdDppbnRvSW1hZ2VPZldpZHRoOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhN
aW5pbXVtTGF5b3V0U2l6ZTptYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhck92ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc10p
OiBEZWxldGVkLgorICAgICAgICAodmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVu
dHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdmlld0ZvckZpbmRVSV0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzRGlzcGxheWluZ1BERl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RhdGFGb3JEaXNwbGF5ZWRQREZdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdWdnZXN0ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYlZpZXdQcmludEZvcm1hdHRlcl0p
OiBEZWxldGVkLgorICAgICAgICAodG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kcmF3c0JhY2tncm91bmRdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXREcmF3c0JhY2tncm91bmQ6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYmFja2dyb3VuZENvbG9yXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0QmFja2dyb3VuZENvbG9yOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc3BlY3RvckF0dGFjaG1lbnRWaWV3XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3ZlcmxheVNjcm9sbGJhclN0
eWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX292ZXJsYXlTY3JvbGxiYXJT
dHlsZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dpbmRvd09jY2x1c2lvbkRl
dGVjdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRXaW5k
b3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2hhcmVTaGVldERpZERpc21pc3M6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9vdmVycmlkZURldmljZVNjYWxlRmFjdG9yXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfc2V0VG9wQ29udGVudEluc2V0Ol0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNldF0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Bpbm5lZFN0YXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfcnViYmVyQmFuZGluZ0VuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3Vs
dDp3aXRoVHlwZTp1c2VyRGF0YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfYXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbWluaW11bUxheW91dFdpZHRoXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWluaW11bUxheW91dFdpZHRoOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRG
b3JBdXRvTGF5b3V0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxk
RXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXJdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxl
cjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbHdheXNTaG93c1ZlcnRpY2Fs
U2Nyb2xsZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdheXNTaG93
c1ZlcnRpY2FsU2Nyb2xsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJp
bnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzpmb3JGcmFtZTpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9wcmVwYXJlRm9yTW92ZVRvV2luZG93OmNvbXBsZXRpb25IYW5kbGVy
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRodW1ibmFpbFZpZXc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdGh1bWJuYWlsVmlld10pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElnbm9yZXNBbGxFdmVudHM6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfaWdub3Jlc0FsbEV2ZW50c10pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBoYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgY2xvc2VGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZhbGlkYXRlVXNlckludGVy
ZmFjZUl0ZW06XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBnb0JhY2s6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBnb0ZvcndhcmQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyByZWxvYWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyByZWxvYWRGcm9tT3JpZ2luOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc3Rv
cExvYWRpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJpbnRGb3JtYXR0
ZXJDbGFzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByaW50UHJvdmlkZXJd
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVy
bmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW06IEFkZGVkLgorICAgICAgICAo
ZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0aW9uKToKKyAgICAgICAgKGRl
dmljZU9yaWVudGF0aW9uKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEZyYW1lOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbGF5
b3V0U3Vidmlld3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc1Nob3dpbmdWaWRlb1BpY3R1
cmVJblBpY3R1cmVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9tYXlBdXRvbWF0aWNhbGx5U2hv
d1ZpZGVvUGljdHVyZUluUGljdHVyZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luY3JlbWVu
dEZvY3VzUHJlc2VydmF0aW9uQ291bnRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kZWNyZW1l
bnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzZXRG
b2N1c1ByZXNlcnZhdGlvbkNvdW50XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNSZXRhaW5p
bmdBY3RpdmVGb2N1c2VkU3RhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lZmZlY3RpdmVB
cHBlYXJhbmNlSXNEYXJrXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZWZmZWN0aXZlVXNlcklu
dGVyZmFjZUxldmVsSXNFbGV2YXRlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BvcHVsYXRl
QXJjaGl2ZWRTdWJ2aWV3czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0JhY2tncm91bmRd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBjYW5CZWNvbWVGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
cmVzaWduRmlyc3RSZXNwb25kZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGNhblBlcmZvcm1B
Y3Rpb246d2l0aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHRhcmdldEZvckFjdGlv
bjp3aXRoU2VuZGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgd2lsbEZpbmlzaElnbm9yaW5n
Q2FsbG91dEJhckZhZGVBZnRlclBlcmZvcm1pbmdBY3Rpb25dKToKKyAgICAgICAgKGZsb29yVG9E
ZXZpY2VQaXhlbCk6CisgICAgICAgIChwb2ludHNFcXVhbEluRGV2aWNlUGl4ZWxzKToKKyAgICAg
ICAgKHJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9j
dXJyZW50Q29udGVudFZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50UHJvdmlk
ZXJSZWdpc3RyeV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NlbGVjdGlvbkdyYW51bGFyaXR5
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SGFzQ3VzdG9tQ29udGVudFZpZXc6bG9hZGVk
TUlNRVR5cGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNoTG9hZGluZ0RhdGFG
b3JDdXN0b21Db250ZW50UHJvdmlkZXJXaXRoU3VnZ2VzdGVkRmlsZW5hbWU6ZGF0YTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVLZXlVSUV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3dpbGxJbnZva2VVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfZGlkSW52b2tlVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFja10pOgor
ICAgICAgICAoY29udGVudFpvb21TY2FsZSk6CisgICAgICAgIChiYXNlU2Nyb2xsVmlld0JhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChzY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF91cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3ZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaW5pdGlhbENvbnRlbnRPZmZzZXRGb3JTY3JvbGxWaWV3XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfY29udGVudE9mZnNldEFkanVzdGVkRm9yT2JzY3VyZWRJbnNldDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9lZmZlY3RpdmVPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3Rl
ZEJ5U2FmZUFyZWFdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21wdXRlZE9ic2N1cmVkSW5z
ZXRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21wdXRlZENvbnRlbnRJbnNldF0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzV2lsbFN3YXBPckRpZEV4aXRdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9wcm9jZXNzV2lsbFN3YXBdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9w
cm9jZXNzRGlkRXhpdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZFJlbGF1bmNoUHJvY2Vz
c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWVdKToK
KyAgICAgICAgKGNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKToKKyAgICAgICAgKGNo
YW5nZUNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHZpc2libGVSZWN0SW5WaWV3Q29vcmRpbmF0ZXNdKToKKyAgICAgICAgKGFyZUVzc2VudGlh
bGx5RXF1YWxBc0Zsb2F0KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21taXRMYXllclRy
ZWVEdXJpbmdBbmltYXRlZFJlc2l6ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21t
aXRMYXllclRyZWU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbGF5ZXJUcmVlQ29tbWl0Q29t
cGxldGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb3VsZE5vdFJlc3RvcmVQYWdlU3RhdGVd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXN0b3JlUGFnZVNjcm9sbFBvc2l0aW9uOnNjcm9s
bE9yaWdpbjpwcmV2aW91c09ic2N1cmVkSW5zZXQ6c2NhbGU6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcmVzdG9yZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjpzY2FsZTpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF90YWtlVmlld1NuYXBzaG90XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfem9vbVRvUG9pbnQ6YXRTY2FsZTphbmltYXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF96b29tVG9SZWN0OmF0U2NhbGU6b3JpZ2luOmFuaW1hdGVkOl0pOgorICAgICAgICAoY29uc3Ry
YWluQ29udGVudE9mZnNldCk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsVG9Db250ZW50
U2Nyb2xsUG9zaXRpb246c2Nyb2xsT3JpZ2luOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nj
cm9sbFRvUmVjdDpvcmlnaW46bWluaW11bVNjcm9sbERpc3RhbmNlOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3pvb21PdXRXaXRoT3JpZ2luOmFuaW1hdGVkOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3pvb21Ub0luaXRpYWxTY2FsZVdpdGhPcmlnaW46YW5pbWF0ZWQ6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfem9vbVRvRm9jdXNSZWN0OnNlbGVjdGlvblJlY3Q6aW5zaWRlRml4ZWQ6
Zm9udFNpemU6bWluaW11bVNjYWxlOm1heGltdW1TY2FsZTphbGxvd1NjYWxpbmc6Zm9yY2VTY3Jv
bGw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5pdGlhbFNjYWxlRmFjdG9yXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29udGVudFpvb21TY2FsZV0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3RhcmdldENvbnRlbnRab29tU2NhbGVGb3JSZWN0OmN1cnJlbnRTY2FsZTpmaXRFbnRpcmVS
ZWN0Om1pbmltdW1TY2FsZTptYXhpbXVtU2NhbGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
em9vbVRvUmVjdDp3aXRoT3JpZ2luOmZpdEVudGlyZVJlY3Q6bWluaW11bVNjYWxlOm1heGltdW1T
Y2FsZTptaW5pbXVtU2Nyb2xsRGlzdGFuY2U6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkaWRN
b3ZlVG9XaW5kb3ddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRPcGFxdWVJbnRlcm5hbDpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldE9wYXF1ZTpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHNldEJhY2tncm91bmRDb2xvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbGxvd3NE
b3VibGVUYXBHZXN0dXJlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N0eWx1c1RhcEdlc3R1
cmVTaG91bGRDcmVhdGVFZGl0YWJsZUltYWdlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyB1c2Vz
U3RhbmRhcmRDb250ZW50Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlldzpj
b250ZW50U2l6ZUZvclpvb21TY2FsZTp3aXRoUHJvcG9zZWRTaXplOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgdmlld0Zvclpvb21pbmdJblNjcm9sbFZpZXc6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBzY3JvbGxWaWV3V2lsbEJlZ2luWm9vbWluZzp3aXRoVmlldzpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kaWRGaW5pc2hTY3JvbGxpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9s
bFZpZXdXaWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6d2lsbERlY2Vs
ZXJhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0
aW5nOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZFNjcm9sbFRvVG9wOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbFZpZXc6YWRqdXN0ZWRPZmZzZXRGb3JPZmZz
ZXQ6dHJhbnNsYXRpb246c3RhcnRQb2ludDpsb2NhdGlvbkluVmlldzpob3Jpem9udGFsVmVsb2Np
dHk6dmVydGljYWxWZWxvY2l0eTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdE
aWRTY3JvbGw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkWm9vbTpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdEaWRFbmRab29taW5nOndpdGhWaWV3OmF0
U2NhbGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kU2Nyb2xsaW5n
QW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbFZpZXdEaWRJbnRlcnJ1
cHREZWNlbGVyYXRpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZVJlY3RJbkVu
Y2xvc2luZ1ZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZUNvbnRlbnRSZWN0
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2Nyb2xsXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZW5jbG9zaW5nU2Nyb2xsZXJTY3JvbGxpbmdFbmRlZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zY3JvbGxWaWV3U3lzdGVtQ29udGVudEluc2V0XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNw
YXRjaFNldFZpZXdMYXlvdXRTaXplOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3BhdGNo
U2V0TWF4aW11bVVub2JzY3VyZWRTaXplOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3Bh
dGNoU2V0RGV2aWNlT3JpZW50YXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZnJhbWVP
ckJvdW5kc0NoYW5nZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50UmVjdEZvclVz
ZXJJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbFZpZXdJc1J1YmJl
ckJhbmRpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNhZmVBcmVhSW5zZXRzRGlkQ2hhbmdl
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRh
dGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxWaWV3SXNJblN0YWJsZVN0YXRlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdFByZUNv
bW1pdEhhbmRsZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY2hlZHVsZVZpc2libGVDb250
ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3Ol0pOgorICAgICAgICAoc2Nyb2xsVmlld0Nh
blNjcm9sbCk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudEJvdW5kc0V4dGVuZGVkRm9y
UnViYmVyYmFuZGluZ1dpdGhTY2FsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVW
aXNpYmxlQ29udGVudFJlY3RzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JNYWluRnJhbWVdKToKKyAgICAgICAgKGFjdGl2ZU1heGltdW1Vbm9ic2N1
cmVkU2l6ZSk6CisgICAgICAgIChhY3RpdmVPcmllbnRhdGlvbik6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRD
b21wbGV0ZUFuaW1hdGVkUmVzaXplXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNo
TG9hZEZvck1haW5GcmFtZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEZhaWxMb2FkRm9y
TWFpbkZyYW1lXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvck1haW5GcmFtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZENoYW5n
ZWRXaXRoSW5mbzphZGp1c3RTY3JvbGxWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3No
b3VsZFVwZGF0ZUtleWJvYXJkV2l0aEluZm86XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5
Ym9hcmRXaWxsQ2hhbmdlRnJhbWU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5Ym9hcmRE
aWRDaGFuZ2VGcmFtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxTaG93
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2tleWJvYXJkRGlkU2hvdzpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxIaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3dpbmRvd0RpZFJvdGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50U2l6ZUNh
dGVnb3J5RGlkQ2hhbmdlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlT
ZXR0aW5nc0RpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50U2l6ZUNh
dGVnb3J5XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNOYXZpZ2F0aW9uU3dpcGVHZXN0dXJl
UmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVyZURp
ZEJlZ2luXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmRd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93UGFzc3dvcmRWaWV3V2l0aERvY3VtZW50TmFt
ZTpwYXNzd29yZEhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZVBhc3N3b3Jk
Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Bhc3N3b3JkVmlld10pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3VwZGF0ZVNjcm9sbFZpZXdJbnNldEFkanVzdG1lbnRCZWhhdmlvcl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEF2b2lkc1Vuc2FmZUFyZWE6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyByZW1vdmVGcm9tU3VwZXJ2aWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZmlyZVByZXNl
bnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc10p
OgorICAgICAgICAodG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9jb250ZW50VmlzaWJsZVJlY3RdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9taW5p
bXVtTGF5b3V0U2l6ZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Vmlld0xh
eW91dFNpemVPdmVycmlkZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9tYXhpbXVtVW5vYnNj
dXJlZFNpemVPdmVycmlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1heGltdW1Vbm9i
c2N1cmVkU2l6ZU92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX29ic2N1cmVkSW5z
ZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T2JzY3VyZWRJbnNldHM6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNh
ZmVBcmVhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0
c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0czpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5z
ZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5jbG9zaW5nVmlld0ZvckV4cG9zZWRSZWN0
Q29tcHV0YXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRJbnRlcmZhY2VPcmllbnRh
dGlvbk92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyZmFjZU9yaWVudGF0
aW9uT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhckludGVyZmFjZU9yaWVu
dGF0aW9uT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbGxvd3NWaWV3cG9y
dFNocmlua1RvRml0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93c1ZpZXdwb3J0U2hy
aW5rVG9GaXRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0Rpc3BsYXlpbmdQREZdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9kYXRhRm9yRGlzcGxheWVkUERGXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc3VnZ2VzdGVkRmlsZW5hbWVGb3JEaXNwbGF5ZWRQREZdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF93ZWJWaWV3UHJpbnRGb3JtYXR0ZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3ldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXREcmFn
SW50ZXJhY3Rpb25Qb2xpY3k6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvdWxkQXZvaWRS
ZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91
aVRleHRDYXJldFJlY3RdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJu
aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udmVydFBvaW50RnJvbUNvbnRlbnRzVG9W
aWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250
ZW50czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRh
dGlvblVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb250OnNlbmRlcjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb250U2l6ZTpzZW5kZXI6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0VGV4dENvbG9yOnNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9kZXRlY3REYXRhV2l0aFR5cGVzOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjpjb21wbGV0aW9uQmxv
Y2s6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkaWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rp
b25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb25d
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkludGVyYWN0aXZlT2JzY3VyZWRJbnNldHND
aGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5z
ZXRzQ2hhbmdlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZUNvbnRlbnRVbnRpbE5leHRV
cGRhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVw
ZGF0ZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kQW5pbWF0ZWRSZXNpemVdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zbmFwc2hvdFJlY3Q6aW50b0ltYWdlT2ZXaWR0aDpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9vdmVycmlkZUxheW91
dFBhcmFtZXRlcnNXaXRoTWluaW11bUxheW91dFNpemU6bWF4aW11bVVub2JzY3VyZWRTaXplT3Zl
cnJpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJPdmVycmlkZUxheW91dFBhcmFt
ZXRlcnNdKToKKyAgICAgICAgKHZpZXdwb3J0QXJndW1lbnRzRnJvbURpY3Rpb25hcnkpOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3ZpZXdGb3JGaW5kVUldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfcmV0YWluQWN0aXZlRm9jdXNlZFN0YXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYmVj
b21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zbmFwc2hvdExheWVyQ29udGVudHNGb3JC
YWNrRm9yd2FyZExpc3RJdGVtOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RhdGFEZXRlY3Rp
b25SZXN1bHRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZl
UmVjdHNBdFNlbGVjdGlvbk9mZnNldDp3aXRoVGV4dDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rp
b25Db250ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Z1bGxTY3JlZW5QbGFjZWhvbGRl
clZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBmdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByaW50Rm9ybWF0dGVyQ2xhc3NdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9wcmludFByb3ZpZGVyXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW06CisgICAgICAgICh0b0NvcmVTY3JvbGxiYXJTdHlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICh0b0FQSVNjcm9sbGJhclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1dlYlZpZXdNYWMuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tXZWJWaWV3TWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKHRvQVBJU2Nyb2xsYmFyU3R5bGUp
OgorICAgICAgICAodG9Db3JlU2Nyb2xsYmFyU3R5bGUpOgorICAgICAgICAoLVtXS1dlYlZpZXcg
YWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBiZWNvbWVGaXJz
dFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyB2aWV3RGlkRW5kTGl2ZVJlc2l6ZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgaXNGbGlwcGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpbnRyaW5zaWNDb250ZW50
U2l6ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcHJlcGFyZUNvbnRlbnRJblJlY3Q6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBzZXRGcmFtZVNpemU6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDp0eXBlczpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyB2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOnJldHVyblR5cGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyByZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBjaGFuZ2VGb250Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgY2hhbmdlQ29s
b3I6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjaGFuZ2VBdHRyaWJ1dGVzOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgc3RhcnRTcGVha2luZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHN0
b3BTcGVha2luZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNob3dHdWVzc1BhbmVsOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgY2hlY2tTcGVsbGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IGNoYW5nZVNwZWxsaW5nOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVk
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRp
b246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25F
bmFibGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUF1dG9tYXRpY0Rhc2hT
dWJzdGl0dXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZXRBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUF1dG9tYXRpY0xp
bmtEZXRlY3Rpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEF1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB1cHBlcmNhc2VXb3Jk
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbG93ZXJjYXNlV29yZDpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IGNhcGl0YWxpemVXb3JkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dhbnRz
S2V5RG93bkZvckV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsV2hlZWw6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
bW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFbnRlcmVkOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG90aGVyTW91c2VEcmFn
Z2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJNb3VzZVVwOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyByaWdo
dE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHJpZ2h0TW91c2VVcDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50Ol0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgYWNjZXB0c0ZpcnN0TW91c2U6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgaW5wdXRD
b250ZXh0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBwZXJmb3JtS2V5RXF1aXZhbGVudDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IGtleVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5
RG93bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGZsYWdzQ2hhbmdlZDpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpyZXBsYWNlbWVudFJhbmdl
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdW5tYXJrVGV4dF0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2VsZWN0ZWRSYW5nZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgaGFzTWFya2VkVGV4
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFya2VkUmFuZ2VdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmFjdHVhbFJhbmdlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgY2hhcmFjdGVySW5kZXhGb3JQb2ludDpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IHR5cGluZ0F0dHJpYnV0ZXNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTphY3R1YWxS
YW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNlbGVjdGVkUmFuZ2VXaXRoQ29tcGxldGlv
bkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtYXJrZWRSYW5nZVdpdGhDb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGhhc01hcmtlZFRleHRXaXRoQ29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBhdHRyaWJ1dGVkU3Vic3Ry
aW5nRm9yUHJvcG9zZWRSYW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgY2hhcmFjdGVySW5kZXhGb3JQb2ludDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRl
eHRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdnZWRJbWFnZTplbmRlZEF0Om9wZXJhdGlv
bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRy
YWdnaW5nRXhpdGVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcHJlcGFyZUZvckRyYWdPcGVy
YXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBwZXJmb3JtRHJhZ09wZXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9oaXRUZXN0OmRyYWdUeXBlczpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF93aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9uSXNJblZpc2libGVTY3JvbGxlclRo
dW1iOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlld1dpbGxNb3ZlVG9XaW5kb3c6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyB2aWV3RGlkTW92ZVRvV2luZG93XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGlzT3BhcXVlXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBtb3VzZURvd25DYW5Nb3ZlV2luZG93XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyB2aWV3RGlkSGlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlld0RpZFVu
aGlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlld0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0
aWVzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWN0aXZlU3BhY2VEaWRDaGFuZ2U6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgaGl0VGVzdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGNvbnZlcnNh
dGlvbklkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHF1aWNrTG9va1dpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGFkZFRyYWNraW5nUmVjdDpvd25lcjp1c2VyRGF0
YTphc3N1bWVJbnNpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWRkVHJhY2tpbmdSZWN0
Om93bmVyOnVzZXJEYXRhOmFzc3VtZUluc2lkZTp1c2VUcmFja2luZ051bTpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hZGRUcmFja2luZ1JlY3RzOm93bmVyOnVzZXJEYXRhTGlzdDphc3N1bWVJ
bnNpZGVMaXN0OnRyYWNraW5nTnVtczpjb3VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHJl
bW92ZVRyYWNraW5nUmVjdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVUcmFja2lu
Z1JlY3RzOmNvdW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlldzpzdHJpbmdGb3JUb29s
VGlwOnBvaW50OnVzZXJEYXRhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcGFzdGVib2FyZENo
YW5nZWRPd25lcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBhc3RlYm9hcmQ6cHJvdmlkZURh
dGFGb3JUeXBlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbmFtZXNPZlByb21pc2VkRmlsZXNE
cm9wcGVkQXREZXN0aW5hdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHdhbnRzVXBkYXRl
TGF5ZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHVwZGF0ZUxheWVyXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBzbWFydE1hZ25pZnlXaXRoRXZlbnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBtYWduaWZ5V2l0aEV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcm90YXRlV2l0aEV2
ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IGZpbmRNYXRjaGVzRm9yU3RyaW5nOnJlbGF0aXZlVG9NYXRj
aDpmaW5kT3B0aW9uczptYXhSZXN1bHRzOnJlc3VsdENvbGxlY3RvcjpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IHJlcGxhY2VNYXRjaGVzOndpdGhTdHJpbmc6aW5TZWxlY3Rpb25Pbmx5OnJlc3Vs
dENvbGxlY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbEZpbmRNYXRjaFRvVmlz
aWJsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRvY3VtZW50Q29udGFpbmVyVmlld10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgZ2V0U2VsZWN0ZWRUZXh0Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2VsZWN0RmluZE1hdGNoOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgZmlsZVByb21pc2VQcm92aWRlcjpmaWxlTmFtZUZvclR5cGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBmaWxlUHJvbWlzZVByb3ZpZGVyOndyaXRlUHJvbWlzZVRvVVJMOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdTZXNzaW9uOnNv
dXJjZU9wZXJhdGlvbk1hc2tGb3JEcmFnZ2luZ0NvbnRleHQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBkcmFnZ2luZ1Nlc3Npb246ZW5kZWRBdFBvaW50Om9wZXJhdGlvbjpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25dKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHNoYXJlU2hlZXREaWREaXNtaXNzOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlh
Q29udHJvbHNNYW5hZ2VyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVN
ZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyYWN0V2l0
aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyB2YWxpZGF0
ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZ29CYWNrOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgZ29Gb3J3YXJkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
cmVsb2FkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmVsb2FkRnJvbU9yaWdpbjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHN0b3BMb2FkaW5nOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3dlYl9zdXBlcklucHV0Q29udGV4dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBl
clF1aWNrTG9va1dpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJT
d2lwZVdpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJNYWduaWZ5
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlclNtYXJ0TWFnbmlm
eVdpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJSZW1vdmVUcmFj
a2luZ1JlY3Q6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyQWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlckRvQ29t
bWFuZEJ5U2VsZWN0b3I6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyUGVyZm9y
bUtleUVxdWl2YWxlbnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyS2V5RG93
bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJIaXRUZXN0Ol0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3dlYl9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9y
SGl0VGVzdFJlc3VsdEludGVybmFsOndpdGhUeXBlOnVzZXJEYXRhOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3dlYl9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfd2ViX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRDaGFuZ2VDb250ZW50U2l6ZTpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJhZ2dp
bmdJbmZvOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRQZXJmb3JtRHJhZ09wZXJh
dGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZGlzbWlzc0NvbnRlbnRSZWxhdGl2
ZUNoaWxkV2luZG93c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaXNtaXNzQ29udGVu
dFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF93ZWJfZWRpdG9yU3RhdGVEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93
ZWJfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF93ZWJfZ3JhbnRET01QYXN0ZUFjY2Vzc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3Rha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbkludGVybmFsOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgaW5zZXJ0VGV4dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGluc2VydFRleHQ6cmVw
bGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlUmVmRm9yVHJhbnNp
dGlvblRvV0tXZWJWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGFzQWN0aXZlVmlkZW9G
b3JDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pZ25vcmVzTm9uV2hl
ZWxFdmVudHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRJZ25vcmVzTm9uV2hlZWxFdmVu
dHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ10pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3Bpbm5lZFN0YXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
cnViYmVyQmFuZGluZ0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRSdWJiZXJC
YW5kaW5nRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlRXh0ZW5kZWRCYWNr
Z3JvdW5kQ29sb3JdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iYWNrZ3JvdW5kQ29sb3JdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRCYWNrZ3JvdW5kQ29sb3I6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfdW5kZXJsYXlDb2xvcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVu
ZGVybGF5Q29sb3I6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VG90YWxIZWlnaHRPZkJh
bm5lcnM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdG90YWxIZWlnaHRPZkJhbm5lcnNdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9kcmF3c0JhY2tncm91bmRdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXREcmF3c0JhY2tncm91bmQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
VG9wQ29udGVudEluc2V0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNl
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVu
dEluc2V0czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hdXRvbWF0aWNhbGx5QWRqdXN0c0Nv
bnRlbnRJbnNldHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRPdmVycmlkZURldmljZVNj
YWxlRmFjdG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX292ZXJyaWRlRGV2aWNlU2NhbGVG
YWN0b3JdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25F
bmFibGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0
aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zcGVsbENoZWNrZXJEb2N1bWVu
dFRhZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdI
ZWlnaHRGb3JBdXRvTGF5b3V0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkRXhw
YW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfbWluaW11bUxheW91dFdpZHRoXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWlu
aW11bUxheW91dFdpZHRoOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Fsd2F5c1Nob3dzSG9y
aXpvbnRhbFNjcm9sbGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QWx3YXlzU2hvd3NI
b3Jpem9udGFsU2Nyb2xsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWx3YXlzU2hvd3NW
ZXJ0aWNhbFNjcm9sbGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QWx3YXlzU2hvd3NW
ZXJ0aWNhbFNjcm9sbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VzZVN5c3RlbUFwcGVh
cmFuY2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9vdmVybGF5U2Nyb2xsYmFyU3R5bGVdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9pbnNwZWN0b3JBdHRhY2htZW50Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldEluc3BlY3RvckF0dGFjaG1lbnRWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldFRodW1ibmFpbFZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdGh1bWJuYWlsVmll
d10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElnbm9yZXNBbGxFdmVudHM6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfaWdub3Jlc0FsbEV2ZW50c10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3VzZVBsYXRmb3JtRmluZFVJXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VXNlUGxh
dGZvcm1GaW5kVUk6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkU3VwcHJlc3NG
aXJzdFJlc3BvbmRlckNoYW5nZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuQ2hhbmdl
RnJhbWVMYXlvdXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdHJ5VG9Td2lwZVdpdGhFdmVu
dDppZ25vcmluZ1Bpbm5lZFN0YXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc21pc3ND
b250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRG
cmFtZTphbmRTY3JvbGxCeTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9nZXN0dXJlRXZlbnRX
YXNOb3RIYW5kbGVkQnlXZWJDb3JlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc2FibGVG
cmFtZVNpemVVcGRhdGVzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5hYmxlRnJhbWVTaXpl
VXBkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2JlZ2luRGVmZXJyaW5nVmlld0luV2lu
ZG93Q2hhbmdlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuZERlZmVycmluZ1ZpZXdJbldp
bmRvd0NoYW5nZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmREZWZlcnJpbmdWaWV3SW5X
aW5kb3dDaGFuZ2VzU3luY10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3aXBl
Vmlld3M6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENv
bnRlbnRJbnNldDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXREaWRNb3ZlU3dpcGVTbmFw
c2hvdENhbGxiYWNrOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mdWxsU2NyZWVuV2luZG93XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZv
ckhpdFRlc3RSZXN1bHQ6d2l0aFR5cGU6dXNlckRhdGE6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzpmb3JGcmFtZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbToKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLUERGVmlldy5t
bToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLU2Nyb2xsVmlldy5tbToKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLU3lzdGVtUHJldmlld1ZpZXcubW06CisgICAgICAgICogV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMTItMTMgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIFNjcmlwdENvbnRyb2xsZXIncyBw
cm9saWZlcmF0aW9uIG9mIEV4Y2VwdGlvbkRldGFpbHMqLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IDM2ZjI5NWQzZjMwMjY4Y2U5MTIyMjRjMzM1ZTA4MDY3MGE0YmYyM2EuLjY1MTg0ZWRkZmY5
MmU1MzA4OGNlOTgxYTEyNWQ2Y2VhM2Q4YjllNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAg
LTMyOSw5ICszMjksMTEgQEAgVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0
aW9uLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2luZG93RmVhdHVyZXMubW0KIAorVUlQcm9jZXNzL0FQSS9pb3Mv
V0tXZWJWaWV3SU9TLm1tCiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1t
CiAKIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJW
aWV3TWFjLm1tCiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCiAKIFVJ
UHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9jb2NvYS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
Q29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCmluZGV4IGFiODk3ODBlMmVlMzZlZmNmM2JiMWIyNTI0YjM1ZDQ0ZmM2ZTFlNjEuLjA5MGQ1
NzEwMGZiOTJhZTIzYzUwOGJlZmNkNzhlY2EyYTY4ZjdlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMzIsNyArMzIsNiBAQAogI2lt
cG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAiQ29tcGxldGlvbkhhbmRsZXJDYWxs
Q2hlY2tlci5oIgogI2ltcG9ydCAiRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKLSNpbXBvcnQg
IkR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUuaCIKICNpbXBvcnQgIkZpbmRDbGllbnQuaCIKICNp
bXBvcnQgIkZ1bGxzY3JlZW5DbGllbnQuaCIKICNpbXBvcnQgIkdsb2JhbEZpbmRJblBhZ2VTdGF0
ZS5oIgpAQCAtNDUsMTcgKzQ0LDEzIEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0
ICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xs
aW5nUGVyZm9ybWFuY2VEYXRhLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bi5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90ZU9i
amVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIK
LSNpbXBvcnQgIlRleHRDaGVja2VyLmgiCi0jaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAj
aW1wb3J0ICJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJWZXJzaW9uQ2hlY2tzLmgiCiAjaW1wb3J0
ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlZpZXdHZXN0dXJlQ29u
dHJvbGxlci5oIgotI2ltcG9ydCAiVmlld1NuYXBzaG90U3RvcmUuaCIKICNpbXBvcnQgIldLQmFj
a0ZvcndhcmRMaXN0SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQmFja0ZvcndhcmRMaXN0SXRlbUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFsLmgiCkBA
IC04MCw2ICs3NSw4IEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uSW50ZXJuYWwu
aCIKICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlci5oIgogI2ltcG9ydCAiV0tXZWJW
aWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5oIgorI2lt
cG9ydCAiV0tXZWJWaWV3TWFjLmgiCiAjaW1wb3J0ICJXS1dlYnBhZ2VQcmVmZXJlbmNlc0ludGVy
bmFsLmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC0xMTEsOCArMTA4LDYgQEAKICNpbXBvcnQgIl9XS1Zp
c2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2Vic2l0ZVBvbGljaWVzSW50
ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudENvbnRleHQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVNjaGVtZVJlZ2lz
dHJ5Lmg+CkBAIC0xMjYsMTYgKzEyMSwxMyBAQAogI2ltcG9ydCA8V2ViQ29yZS9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TS2V5ZWRBcmNo
aXZlclNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNUZXh0RmluZGVyU1BJLmg+CiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3
dGYvTWF0aEV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0
IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi9TZXRGb3JTY29wZS5oPgogI2ltcG9ydCA8d3RmL1VVSUQuaD4KICNpbXBvcnQgPHd0Zi9zcGkv
ZGFyd2luL2R5bGRTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTE1
MCw3NCArMTQyLDMyIEBACiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiRnJv
bnRCb2FyZFNlcnZpY2VzU1BJLmgiCi0jaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbi5oIgotI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QuaCIKLSNp
bXBvcnQgIlByb2Nlc3NUaHJvdHRsZXIuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkuaCIKICNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHku
aCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCi0jaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaCIKICNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIgotI2ltcG9ydCAi
V0tQYXNzd29yZFZpZXcuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiV0tX
ZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKLSNpbXBvcnQgIl9XS1dlYlZpZXdQcmlu
dEZvcm1hdHRlci5oIgogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2
aWNlcy5oPgogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZUxvYWRlclR5cGVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXku
aD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxDdXJyZW50VHJhaXRDb2xsZWN0aW9uLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkJhY2tn
cm91bmRUYXNrQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJTUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQgPHBhbC9z
cGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9FbnRpdGxl
bWVudHMuaD4KIAogI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKC4uLikgUkVMRUFTRV9M
T0dfSUYoX3BhZ2UgJiYgX3BhZ2UtPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBWaWV3U3Rh
dGUsIF9fVkFfQVJHU19fKQotCi1AaW50ZXJmYWNlIFVJVmlldyAoVUlWaWV3SW50ZXJuYWwpCi0t
IChVSVZpZXdDb250cm9sbGVyICopX3ZpZXdDb250cm9sbGVyRm9yQW5jZXN0b3I7Ci1AZW5kCi0K
LUBpbnRlcmZhY2UgVUlXaW5kb3cgKFVJV2luZG93SW50ZXJuYWwpCi0tIChCT09MKV9pc0hvc3Rl
ZEluQW5vdGhlclByb2Nlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAo
VUlWaWV3Q29udHJvbGxlckludGVybmFsKQotLSAoVUlWaWV3Q29udHJvbGxlciAqKV9yb290QW5j
ZXN0b3JWaWV3Q29udHJvbGxlcjsKLS0gKFVJVmlld0NvbnRyb2xsZXIgKilfdmlld0NvbnRyb2xs
ZXJGb3JTdXBwb3J0ZWRJbnRlcmZhY2VPcmllbnRhdGlvbnM7Ci1AZW5kCi0KICNlbmRpZiAvLyBQ
TEFURk9STShJT1NfRkFNSUxZKQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXN0YXRpYyBj
b25zdCB1aW50MzJfdCBmaXJzdFNES1ZlcnNpb25XaXRoTGlua1ByZXZpZXdFbmFibGVkQnlEZWZh
dWx0ID0gMHhBMDAwMDsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIGRlbGF5QmVmb3JlTm9WaXNpYmxl
Q29udGVudHNSZWN0c0xvZ2dpbmcgPSAxX3M7Ci1zdGF0aWMgY29uc3QgU2Vjb25kcyBkZWxheUJl
Zm9yZU5vQ29tbWl0c0xvZ2dpbmcgPSA1X3M7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKE1BQykK
ICNpbXBvcnQgIkFwcEtpdFNQSS5oIgogI2ltcG9ydCAiV0tUZXh0RmluZGVyQ2xpZW50LmgiCiAj
aW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgor
I2VuZGlmCiAKLUBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxXZWJWaWV3SW1wbERlbGVnYXRlLCBO
U1RleHRJbnB1dENsaWVudCwgTlNUZXh0SW5wdXRDbGllbnRfQXN5bmM+Ci1AZW5kCi0KLSNpZiBI
QVZFKFRPVUNIX0JBUikKLUBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxOU1RvdWNoQmFyUHJvdmlk
ZXI+Ci1AZW5kCi0jZW5kaWYgLy8gSEFWRShUT1VDSF9CQVIpCi0jZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoRFJBR19TVVBQT1JUKQotCi1AaW50
ZXJmYWNlIFdLV2ViVmlldyAoKSA8TlNGaWxlUHJvbWlzZVByb3ZpZGVyRGVsZWdhdGUsIE5TRHJh
Z2dpbmdTb3VyY2U+Ci1AZW5kCi0KKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorc3RhdGljIGNv
bnN0IHVpbnQzMl90IGZpcnN0U0RLVmVyc2lvbldpdGhMaW5rUHJldmlld0VuYWJsZWRCeURlZmF1
bHQgPSAweEEwMDAwOwogI2VuZGlmCiAKIHN0YXRpYyBIYXNoTWFwPFdlYktpdDo6V2ViUGFnZVBy
b3h5KiwgX191bnNhZmVfdW5yZXRhaW5lZCBXS1dlYlZpZXcgKj4mIHBhZ2VUb1ZpZXdNYXAoKQpA
QCAtMjMxLDE2MiArMTgxLDcgQEAgV0tXZWJWaWV3KiBmcm9tV2ViUGFnZVByb3h5KFdlYktpdDo6
V2ViUGFnZVByb3h5JiBwYWdlKQogICAgIHJldHVybiBwYWdlVG9WaWV3TWFwKCkuZ2V0KCZwYWdl
KTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLXN0YXRpYyBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5
bGUgdG9BUElTY3JvbGxiYXJTdHlsZShPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5
U3R5bGU+IGNvcmVTY3JvbGxiYXJTdHlsZSkKLXsKLSAgICBpZiAoIWNvcmVTY3JvbGxiYXJTdHls
ZSkKLSAgICAgICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZUF1dG9tYXRpYzsKLSAg
ICAKLSAgICBzd2l0Y2ggKGNvcmVTY3JvbGxiYXJTdHlsZS52YWx1ZSgpKSB7Ci0gICAgY2FzZSBX
ZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVEYXJrOgotICAgICAgICByZXR1cm4gX1dLT3Zl
cmxheVNjcm9sbGJhclN0eWxlRGFyazsKLSAgICBjYXNlIFdlYkNvcmU6OlNjcm9sbGJhck92ZXJs
YXlTdHlsZUxpZ2h0OgotICAgICAgICByZXR1cm4gX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlTGln
aHQ7Ci0gICAgY2FzZSBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OgotICAg
ICAgICByZXR1cm4gX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlRGVmYXVsdDsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHls
ZUF1dG9tYXRpYzsKLX0KLQotc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJs
YXlTdHlsZT4gdG9Db3JlU2Nyb2xsYmFyU3R5bGUoX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlIHNj
cm9sbGJhclN0eWxlKQotewotICAgIHN3aXRjaCAoc2Nyb2xsYmFyU3R5bGUpIHsKLSAgICBjYXNl
IF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZURhcms6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpT
Y3JvbGxiYXJPdmVybGF5U3R5bGVEYXJrOwotICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0
eWxlTGlnaHQ6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVM
aWdodDsKLSAgICBjYXNlIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZURlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OwotICAgIGNhc2Ug
X1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlQXV0b21hdGljOgotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIEZPUldBUkRf
QUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcoX2FjdGlvbikgXAotICAgIC0gKHZvaWQpX2FjdGlvbjoo
aWQpc2VuZGVyIFwKLSAgICB7IFwKLSAgICAgICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVu
dFZpZXcpIFwKLSAgICAgICAgICAgIFtfY29udGVudFZpZXcgX2FjdGlvbiAjIyBGb3JXZWJWaWV3
OnNlbmRlcl07IFwKLSAgICB9Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgewotICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZT4gX25hdmlnYXRpb25TdGF0ZTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpVSURlbGVnYXRlPiBfdWlEZWxlZ2F0ZTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpJY29uTG9hZGluZ0RlbGVnYXRlPiBfaWNvbkxvYWRp
bmdEZWxlZ2F0ZTsKLQotICAgIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzIF9vYnNlcnZlZFJl
bmRlcmluZ1Byb2dyZXNzRXZlbnRzOwotCi0gICAgV2Vha09iakNQdHI8aWQgPF9XS0lucHV0RGVs
ZWdhdGU+PiBfaW5wdXREZWxlZ2F0ZTsKLQotICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dh
cm5pbmc+IF9zYWZlQnJvd3NpbmdXYXJuaW5nOwotCi0gICAgQk9PTCBfdXNlUGxhdGZvcm1GaW5k
VUk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFJldGFpblB0cjxfV0tSZW1vdGVP
YmplY3RSZWdpc3RyeT4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5OwotCi0gICAgT3B0aW9uYWw8Q0dT
aXplPiBfdmlld0xheW91dFNpemVPdmVycmlkZTsKLSAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9h
dFNpemU+IF9sYXN0U2VudFZpZXdMYXlvdXRTaXplOwotICAgIE9wdGlvbmFsPENHU2l6ZT4gX21h
eGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOwotICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0
U2l6ZT4gX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplOwotCi0gICAgQ0dGbG9hdCBfdmll
d3BvcnRNZXRhVGFnV2lkdGg7Ci0gICAgQk9PTCBfdmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBs
aWNpdDsKLSAgICBCT09MIF92aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1lbnQ7Ci0g
ICAgQ0dGbG9hdCBfaW5pdGlhbFNjYWxlRmFjdG9yOwotICAgIEJPT0wgX2Zhc3RDbGlja2luZ0lz
RGlzYWJsZWQ7Ci0KLSAgICBCT09MIF9hbGxvd3NMaW5rUHJldmlldzsKLQotICAgIFVJRWRnZUlu
c2V0cyBfb2JzY3VyZWRJbnNldHM7Ci0gICAgQk9PTCBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzOwot
ICAgIEJPT0wgX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHk7Ci0KLSAgICBV
SUVkZ2VJbnNldHMgX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKLSAgICBCT09MIF9oYXZlU2V0
VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOwotICAgIEJPT0wgX2F2b2lkc1Vuc2FmZUFyZWE7Ci0g
ICAgVUlSZWN0RWRnZSBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOwotCi0g
ICAgVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTsK
LSAgICBCT09MIF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbjsKLSAgICBPcHRpb25hbDxp
bnQzMl90PiBfbGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbjsKLQotICAgIEJPT0wgX2FsbG93c1Zp
ZXdwb3J0U2hyaW5rVG9GaXQ7Ci0KLSAgICBCT09MIF9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZy
YW1lOwotICAgIEJPT0wgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWlu
RnJhbWU7Ci0gICAgV2ViS2l0OjpUcmFuc2FjdGlvbklEIF9maXJzdFBhaW50QWZ0ZXJDb21taXRM
b2FkVHJhbnNhY3Rpb25JRDsKLSAgICBXZWJLaXQ6OlRyYW5zYWN0aW9uSUQgX2xhc3RUcmFuc2Fj
dGlvbklEOwotICAgIFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSBfZHluYW1pY1Zp
ZXdwb3J0VXBkYXRlTW9kZTsKLSAgICBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJ
RCBfY3VycmVudER5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJRDsKLSAgICBDQVRyYW5zZm9ybTNE
IF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50czsKLSAgICBDR0Zsb2F0IF9hbmlt
YXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoOwotICAgIFJldGFpblB0cjxVSVZpZXc+IF9y
ZXNpemVBbmltYXRpb25WaWV3OwotICAgIENHRmxvYXQgX2xhc3RBZGp1c3RtZW50Rm9yU2Nyb2xs
ZXI7Ci0gICAgT3B0aW9uYWw8Q0dSZWN0PiBfZnJvemVuVmlzaWJsZUNvbnRlbnRSZWN0OwotICAg
IE9wdGlvbmFsPENHUmVjdD4gX2Zyb3plblVub2JzY3VyZWRDb250ZW50UmVjdDsKLQotICAgIEJP
T0wgX2NvbW1pdERpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxXZWJDb3Jl
OjpGbG9hdFBvaW50PiBfc2Nyb2xsT2Zmc2V0VG9SZXN0b3JlOwotICAgIFdlYkNvcmU6OkZsb2F0
Qm94RXh0ZW50IF9vYnNjdXJlZEluc2V0c1doZW5TYXZlZDsKLQotICAgIE9wdGlvbmFsPFdlYkNv
cmU6OkZsb2F0UG9pbnQ+IF91bm9ic2N1cmVkQ2VudGVyVG9SZXN0b3JlOwotICAgIE9wdGlvbmFs
PFdlYktpdDo6VHJhbnNhY3Rpb25JRD4gX2ZpcnN0VHJhbnNhY3Rpb25JREFmdGVyUGFnZVJlc3Rv
cmU7Ci0gICAgZG91YmxlIF9zY2FsZVRvUmVzdG9yZTsKLQotICAgIEJPT0wgX2FsbG93c0JhY2tG
b3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOwotCi0gICAgUmV0YWluUHRyPFVJVmlldyA8V0tXZWJW
aWV3Q29udGVudFByb3ZpZGVyPj4gX2N1c3RvbUNvbnRlbnRWaWV3OwotICAgIFJldGFpblB0cjxV
SVZpZXc+IF9jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5VmlldzsKLQotICAgIFJldGFpblB0cjxO
U1RpbWVyPiBfZW5jbG9zaW5nU2Nyb2xsVmlld1Njcm9sbFRpbWVyOwotICAgIEJPT0wgX2RpZFNj
cm9sbFNpbmNlTGFzdFRpbWVyRmlyZTsKLQotICAgIFdlYkNvcmU6OkNvbG9yIF9zY3JvbGxWaWV3
QmFja2dyb3VuZENvbG9yOwotCi0gICAgLy8gVGhpcyB2YWx1ZSB0cmFja3MgdGhlIGN1cnJlbnQg
YWRqdXN0bWVudCBhZGRlZCB0byB0aGUgYm90dG9tIGluc2V0IGR1ZSB0byB0aGUga2V5Ym9hcmQg
c2xpZGluZyBvdXQgZnJvbSB0aGUgYm90dG9tCi0gICAgLy8gd2hlbiBjb21wdXRpbmcgb2JzY3Vy
ZWQgY29udGVudCBpbnNldHMuIFRoaXMgaXMgdXNlZCB3aGVuIHVwZGF0aW5nIHRoZSB2aXNpYmxl
IGNvbnRlbnQgcmVjdHMgd2hlcmUgd2Ugc2hvdWxkIG5vdAotICAgIC8vIGluY2x1ZGUgdGhpcyBh
ZGp1c3RtZW50LgotICAgIENHRmxvYXQgX3RvdGFsU2Nyb2xsVmlld0JvdHRvbUluc2V0QWRqdXN0
bWVudEZvcktleWJvYXJkOwotICAgIEJPT0wgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJ
bnNldHNGb3JLZXlib2FyZDsKLQotICAgIEJPT0wgX2ludm9raW5nVUlTY3JvbGxWaWV3RGVsZWdh
dGVDYWxsYmFjazsKLSAgICBCT09MIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNG
b3JVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrOwotICAgIEJPT0wgX2RpZERlZmVyVXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0c0ZvckFueVJlYXNvbjsKLSAgICBCT09MIF9kaWREZWZlclVwZGF0
ZVZpc2libGVDb250ZW50UmVjdHNGb3JVbnN0YWJsZVNjcm9sbFZpZXc7Ci0KLSAgICBCT09MIF93
YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemU7Ci0gICAgQk9PTCBfd2FpdGluZ0ZvckNvbW1pdEFm
dGVyQW5pbWF0ZWRSZXNpemU7Ci0KLSAgICBWZWN0b3I8V1RGOjpGdW5jdGlvbjx2b2lkICgpPj4g
X2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXplOwotICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzOwotCi0gICAgUmV0
YWluUHRyPFdLUGFzc3dvcmRWaWV3PiBfcGFzc3dvcmRWaWV3OwotCi0gICAgQk9PTCBfaGFzU2No
ZWR1bGVkVmlzaWJsZVJlY3RVcGRhdGU7Ci0gICAgQk9PTCBfdmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlU2NoZWR1bGVkRnJvbVNjcm9sbFZpZXdJblN0YWJsZVN0YXRlOwotCi0gICAgX1dLRHJhZ0lu
dGVyYWN0aW9uUG9saWN5IF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3k7Ci0KLSAgICAvLyBGb3IgcmVs
ZWFzZS1sb2dnaW5nIGZvciA8cmRhcjovL3Byb2JsZW0vMzkyODEyNjk+LgotICAgIE1vbm90b25p
Y1RpbWUgX3RpbWVPZlJlcXVlc3RGb3JWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU7Ci0gICAgTW9u
b3RvbmljVGltZSBfdGltZU9mTGFzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZTsKLQotICAgIE9w
dGlvbmFsPE1vbm90b25pY1RpbWU+IF90aW1lT2ZGaXJzdFZpc2libGVDb250ZW50UmVjdFVwZGF0
ZVdpdGhQZW5kaW5nQ29tbWl0OwotCi0gICAgTlNVSW50ZWdlciBfZm9jdXNQcmVzZXJ2YXRpb25D
b3VudDsKLSAgICBOU1VJbnRlZ2VyIF9hY3RpdmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKLQot
ICAgIEJPT0wgX2hhc0VudGVyZWREZWFsbG9jOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIFJldGFpblB0cjxXS1RleHRGaW5kZXJDbGllbnQ+IF90ZXh0RmluZGVyQ2xpZW50OwotI2Vu
ZGlmCi0gICAgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBfc2VsZWN0aW9uQXR0cmlidXRlczsKLX0K
K0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcKIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJh
bWU6KENHUmVjdClmcmFtZQogewpAQCAtMzk5LDI3ICsxOTQsNiBAQCAtIChCT09MKV9pc1ZhbGlk
CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotc3RhdGljIGludDMyX3QgZGV2aWNlT3Jp
ZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0aW9uKFVJSW50ZXJmYWNlT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCi17Ci0gICAgc3dpdGNoIChvcmllbnRhdGlvbikgewotICAgIGNhc2UgVUlJ
bnRlcmZhY2VPcmllbnRhdGlvblVua25vd246Ci0gICAgY2FzZSBVSUludGVyZmFjZU9yaWVudGF0
aW9uUG9ydHJhaXQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgVUlJbnRlcmZhY2VPcmll
bnRhdGlvblBvcnRyYWl0VXBzaWRlRG93bjoKLSAgICAgICAgcmV0dXJuIDE4MDsKLSAgICBjYXNl
IFVJSW50ZXJmYWNlT3JpZW50YXRpb25MYW5kc2NhcGVMZWZ0OgotICAgICAgICByZXR1cm4gLTkw
OwotICAgIGNhc2UgVUlJbnRlcmZhY2VPcmllbnRhdGlvbkxhbmRzY2FwZVJpZ2h0OgotICAgICAg
ICByZXR1cm4gOTA7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50MzJfdCBkZXZpY2VPcmllbnRhdGlv
bigpCi17Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIHJldHVybiBk
ZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNlT3JpZW50YXRpb24oW1tVSUFwcGxpY2F0aW9u
IHNoYXJlZEFwcGxpY2F0aW9uXSBzdGF0dXNCYXJPcmllbnRhdGlvbl0pOwotQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi19CiAKIHN0YXRpYyBib29sIHNob3VsZEFsbG93UGljdHVy
ZUluUGljdHVyZU1lZGlhUGxheWJhY2soKQogewpAQCAtNDkzLDYgKzI2NywxNiBAQCBzdGF0aWMg
dm9pZCB2YWxpZGF0ZShXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uKQogI2Vu
ZGlmCiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorc3RhdGljIHZvaWQgaGFyZHdhcmVL
ZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJl
Ziwgdm9pZCogb2JzZXJ2ZXIsIENGU3RyaW5nUmVmLCBjb25zdCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5
UmVmKQoreworICAgIEFTU0VSVChvYnNlcnZlcik7CisgICAgV0tXZWJWaWV3ICp3ZWJWaWV3ID0g
KF9fYnJpZGdlIFdLV2ViVmlldyAqKW9ic2VydmVyOworICAgIFt3ZWJWaWV3LT5fY29udGVudFZp
ZXcgX2hhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2VkXTsKKyAgICB3ZWJWaWV3Ll9w
YWdlLT5oYXJkd2FyZUtleWJvYXJkQXZhaWxhYmlsaXR5Q2hhbmdlZChHU0V2ZW50SXNIYXJkd2Fy
ZUtleWJvYXJkQXR0YWNoZWQoKSk7Cit9CisjZW5kaWYKKwogLSAodm9pZClfaW5pdGlhbGl6ZVdp
dGhDb25maWd1cmF0aW9uOihXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgog
ewogICAgIGlmICghY29uZmlndXJhdGlvbikKQEAgLTg1NCw3ICs2MzgsNyBAQCAtIChpZCl2YWx1
ZUZvclVuZGVmaW5lZEtleTooTlNTdHJpbmcgKilrZXkKICAgICByZXR1cm4gW3N1cGVyIHZhbHVl
Rm9yVW5kZWZpbmVkS2V5OmtleV07CiB9CiAKLSNwcmFnbWEgbWFyayAtIEFQSQorI3ByYWdtYSBt
YXJrIC0gbWFjT1MvaU9TIEFQSQogCiAtIChXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmln
dXJhdGlvbgogewpAQCAtMTE3NSw2ICs5NTksMzkgQEAgLSAodm9pZCl0YWtlU25hcHNob3RXaXRo
Q29uZmlndXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3UK
IH0KICNlbmRpZgogCistICh2b2lkKXNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1
cmVzOihCT09MKWFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzCit7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIF9pbXBsLT5zZXRBbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0
dXJlcyhhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyk7CisjZWxpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIGlmIChfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVy
ZXMgPT0gYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMpCisgICAgICAgIHJldHVy
bjsKKworICAgIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyA9IGFsbG93c0Jh
Y2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworCisgICAgaWYgKGFsbG93c0JhY2tGb3J3YXJk
TmF2aWdhdGlvbkdlc3R1cmVzICYmICFfZ2VzdHVyZUNvbnRyb2xsZXIpIHsKKyAgICAgICAgX2dl
c3R1cmVDb250cm9sbGVyID0gbWFrZVVuaXF1ZTxXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cj4oKl9wYWdlKTsKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5pbnN0YWxsU3dpcGVIYW5k
bGVyKHNlbGYsIFtzZWxmIHNjcm9sbFZpZXddKTsKKyAgICAgICAgaWYgKFdLV2ViVmlldyAqYWx0
ZXJuYXRlV2ViVmlldyA9IFtfY29uZmlndXJhdGlvbiBfYWx0ZXJuYXRlV2ViVmlld0Zvck5hdmln
YXRpb25HZXN0dXJlc10pCisgICAgICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPnNldEFsdGVy
bmF0ZUJhY2tGb3J3YXJkTGlzdFNvdXJjZVBhZ2UoYWx0ZXJuYXRlV2ViVmlldy0+X3BhZ2UuZ2V0
KCkpOworICAgIH0KKworICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0
dXJlQ29udHJvbGxlci0+c2V0U3dpcGVHZXN0dXJlRW5hYmxlZChhbGxvd3NCYWNrRm9yd2FyZE5h
dmlnYXRpb25HZXN0dXJlcyk7CisKKyAgICBfcGFnZS0+c2V0U2hvdWxkUmVjb3JkTmF2aWdhdGlv
blNuYXBzaG90cyhhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyk7CisjZW5kaWYK
K30KKworLSAoQk9PTClhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcworeworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPmFsbG93c0JhY2tGb3J3YXJkTmF2aWdh
dGlvbkdlc3R1cmVzKCk7CisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHJldHVybiBf
YWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CisjZW5kaWYKK30KKwogLSAoTlNT
dHJpbmcgKiljdXN0b21Vc2VyQWdlbnQKIHsKICAgICByZXR1cm4gX3BhZ2UtPmN1c3RvbVVzZXJB
Z2VudCgpOwpAQCAtMTIxNSwxMzQgKzEwMzIsMTU1IEBAIC0gKHZvaWQpc2V0QWxsb3dzTGlua1By
ZXZpZXc6KEJPT0wpYWxsb3dzTGlua1ByZXZpZXcKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFN
SUxZKQogfQogCi1zdGF0aWMgTlNUZXh0QWxpZ25tZW50IG5zVGV4dEFsaWdubWVudChXZWJLaXQ6
OlRleHRBbGlnbm1lbnQgYWxpZ25tZW50KQorLSAodm9pZClzZXRQYWdlWm9vbTooQ0dGbG9hdClw
YWdlWm9vbQogewotICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7Ci0gICAgY2FzZSBXZWJLaXQ6Ok5v
QWxpZ25tZW50OgotICAgICAgICByZXR1cm4gTlNUZXh0QWxpZ25tZW50TmF0dXJhbDsKLSAgICBj
YXNlIFdlYktpdDo6TGVmdEFsaWdubWVudDoKLSAgICAgICAgcmV0dXJuIE5TVGV4dEFsaWdubWVu
dExlZnQ7Ci0gICAgY2FzZSBXZWJLaXQ6OlJpZ2h0QWxpZ25tZW50OgotICAgICAgICByZXR1cm4g
TlNUZXh0QWxpZ25tZW50UmlnaHQ7Ci0gICAgY2FzZSBXZWJLaXQ6OkNlbnRlckFsaWdubWVudDoK
LSAgICAgICAgcmV0dXJuIE5TVGV4dEFsaWdubWVudENlbnRlcjsKLSAgICBjYXNlIFdlYktpdDo6
SnVzdGlmaWVkQWxpZ25tZW50OgotICAgICAgICByZXR1cm4gTlNUZXh0QWxpZ25tZW50SnVzdGlm
aWVkOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTlNUZXh0
QWxpZ25tZW50TmF0dXJhbDsKKyAgICBfcGFnZS0+c2V0UGFnZVpvb21GYWN0b3IocGFnZVpvb20p
OwogfQogCi1zdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25Gb3JF
ZGl0b3JTdGF0ZShjb25zdCBXZWJLaXQ6OkVkaXRvclN0YXRlJiBzdGF0ZSkKKy0gKENHRmxvYXQp
cGFnZVpvb20KIHsKLSAgICBpZiAoc3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpCi0gICAg
ICAgIHJldHVybiBAeyBAInBvc3QtbGF5b3V0LWRhdGEiIDogQE5PIH07Ci0KLSAgICBhdXRvJiBw
b3N0TGF5b3V0RGF0YSA9IHN0YXRlLnBvc3RMYXlvdXREYXRhKCk7Ci0gICAgcmV0dXJuIEB7Ci0g
ICAgICAgIEAicG9zdC1sYXlvdXQtZGF0YSIgOiBAWUVTLAotICAgICAgICBAImJvbGQiOiBwb3N0
TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzICYgV2ViS2l0OjpBdHRyaWJ1dGVCb2xkID8gQFlF
UyA6IEBOTywKLSAgICAgICAgQCJpdGFsaWMiOiBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1
dGVzICYgV2ViS2l0OjpBdHRyaWJ1dGVJdGFsaWNzID8gQFlFUyA6IEBOTywKLSAgICAgICAgQCJ1
bmRlcmxpbmUiOiBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzICYgV2ViS2l0OjpBdHRy
aWJ1dGVVbmRlcmxpbmUgPyBAWUVTIDogQE5PLAotICAgICAgICBAInRleHQtYWxpZ25tZW50Ijog
QChuc1RleHRBbGlnbm1lbnQoc3RhdGljX2Nhc3Q8V2ViS2l0OjpUZXh0QWxpZ25tZW50Pihwb3N0
TGF5b3V0RGF0YS50ZXh0QWxpZ25tZW50KSkpLAotICAgICAgICBAInRleHQtY29sb3IiOiAoTlNT
dHJpbmcgKilwb3N0TGF5b3V0RGF0YS50ZXh0Q29sb3IuY3NzVGV4dCgpCi0gICAgfTsKKyAgICBy
ZXR1cm4gX3BhZ2UtPnBhZ2Vab29tRmFjdG9yKCk7CiB9CiAKLXN0YXRpYyBfV0tTZWxlY3Rpb25B
dHRyaWJ1dGVzIHNlbGVjdGlvbkF0dHJpYnV0ZXMoY29uc3QgV2ViS2l0OjpFZGl0b3JTdGF0ZSYg
ZWRpdG9yU3RhdGUsIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgcHJldmlvdXNBdHRyaWJ1dGVzKQor
aW5saW5lIFdlYktpdDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhXS0ZpbmRDb25maWd1cmF0
aW9uICpjb25maWd1cmF0aW9uKQogewotICAgIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgYXR0cmli
dXRlcyA9IF9XS1NlbGVjdGlvbkF0dHJpYnV0ZU5vU2VsZWN0aW9uOwotICAgIGlmIChlZGl0b3JT
dGF0ZS5zZWxlY3Rpb25Jc05vbmUpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOwotCi0gICAg
aWYgKGVkaXRvclN0YXRlLnNlbGVjdGlvbklzUmFuZ2UpCi0gICAgICAgIGF0dHJpYnV0ZXMgfD0g
X1dLU2VsZWN0aW9uQXR0cmlidXRlSXNSYW5nZTsKLSAgICBlbHNlCi0gICAgICAgIGF0dHJpYnV0
ZXMgfD0gX1dLU2VsZWN0aW9uQXR0cmlidXRlSXNDYXJldDsKKyAgICB1bnNpZ25lZCBmaW5kT3B0
aW9ucyA9IDA7CiAKLSAgICBpZiAoIWVkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRh
KSB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGVkaXRvclN0YXRlLnBv
c3RMYXlvdXREYXRhKCkuYXRTdGFydE9mU2VudGVuY2UpCi0gICAgICAgICAgICBhdHRyaWJ1dGVz
IHw9IF9XS1NlbGVjdGlvbkF0dHJpYnV0ZUF0U3RhcnRPZlNlbnRlbmNlOwotI2VuZGlmCi0gICAg
fSBlbHNlIGlmIChwcmV2aW91c0F0dHJpYnV0ZXMgJiBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVBdFN0
YXJ0T2ZTZW50ZW5jZSkKLSAgICAgICAgYXR0cmlidXRlcyB8PSBfV0tTZWxlY3Rpb25BdHRyaWJ1
dGVBdFN0YXJ0T2ZTZW50ZW5jZTsKKyAgICBpZiAoIWNvbmZpZ3VyYXRpb24uY2FzZVNlbnNpdGl2
ZSkKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Nhc2VJbnNlbnNp
dGl2ZTsKKyAgICBpZiAoY29uZmlndXJhdGlvbi5iYWNrd2FyZHMpCisgICAgICAgIGZpbmRPcHRp
b25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNCYWNrd2FyZHM7CisgICAgaWYgKGNvbmZpZ3VyYXRp
b24ud3JhcHMpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNXcmFw
QXJvdW5kOwogCi0gICAgcmV0dXJuIGF0dHJpYnV0ZXM7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYktpdDo6RmluZE9wdGlvbnM+KGZpbmRPcHRpb25zKTsKIH0KIAotLSAodm9pZClfZGlkQ2hh
bmdlRWRpdG9yU3RhdGUKKy0gKHZvaWQpZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgd2l0
aENvbmZpZ3VyYXRpb246KFdLRmluZENvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShXS0ZpbmRSZXN1bHQgKnJlc3VsdCkpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBhdXRvIG5ld1NlbGVjdGlvbkF0dHJpYnV0ZXMgPSBzZWxlY3Rpb25BdHRy
aWJ1dGVzKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLCBfc2VsZWN0aW9uQXR0cmlidXRlcyk7Ci0gICAg
aWYgKF9zZWxlY3Rpb25BdHRyaWJ1dGVzICE9IG5ld1NlbGVjdGlvbkF0dHJpYnV0ZXMpIHsKLSAg
ICAgICAgTlNTdHJpbmcgKnNlbGVjdGlvbkF0dHJpYnV0ZXNLZXkgPSBOU1N0cmluZ0Zyb21TZWxl
Y3RvcihAc2VsZWN0b3IoX3NlbGVjdGlvbkF0dHJpYnV0ZXMpKTsKLSAgICAgICAgW3NlbGYgd2ls
bENoYW5nZVZhbHVlRm9yS2V5OnNlbGVjdGlvbkF0dHJpYnV0ZXNLZXldOwotICAgICAgICBfc2Vs
ZWN0aW9uQXR0cmlidXRlcyA9IG5ld1NlbGVjdGlvbkF0dHJpYnV0ZXM7Ci0gICAgICAgIFtzZWxm
IGRpZENoYW5nZVZhbHVlRm9yS2V5OnNlbGVjdGlvbkF0dHJpYnV0ZXNLZXldOworICAgIGlmICgh
c3RyaW5nLmxlbmd0aCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbW1tXS0ZpbmRSZXN1
bHQgYWxsb2NdIF9pbml0V2l0aE1hdGNoRm91bmQ6Tk9dIGF1dG9yZWxlYXNlXSk7CisgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGVpdGhlciByZW5hbWUg
LV93ZWJWaWV3OmVkaXRvclN0YXRlRGlkQ2hhbmdlOiB0byBjbGFyaWZ5IHRoYXQgaXQncyBvbmx5
IGludGVuZGVkIGZvciB1c2Ugd2hlbiB0ZXN0aW5nLAotICAgIC8vIG9yIHJlbW92ZSBpdCBlbnRp
cmVseSBhbmQgdXNlIC1fd2ViVmlldzpkaWRDaGFuZ2VGb250QXR0cmlidXRlczogaW5zdGVhZCBv
bmNlIHRleHQgYWxpZ25tZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgc2V0IG9mCi0gICAgLy8gZm9u
dCBhdHRyaWJ1dGVzLgotICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0g
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilzZWxmLlVJRGVsZWdhdGU7Ci0gICAgaWYgKFt1aURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZWRpdG9yU3RhdGVE
aWRDaGFuZ2U6KV0pCi0gICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3OnNlbGYgZWRpdG9yU3Rh
dGVEaWRDaGFuZ2U6ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uRm9yRWRpdG9yU3RhdGUoX3BhZ2Ut
PmVkaXRvclN0YXRlKCkpXTsKKyAgICBfcGFnZS0+ZmluZFN0cmluZyhzdHJpbmcsIHRvRmluZE9w
dGlvbnMoY29uZmlndXJhdGlvbiksIDEsIFtoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRp
b25IYW5kbGVyKV0oYm9vbCBmb3VuZCwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7CisgICAgICAgIGhhbmRsZXIoW1tbV0tGaW5kUmVzdWx0IGFsbG9jXSBfaW5pdFdpdGhNYXRj
aEZvdW5kOihlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUgJiYgZm91
bmQpXSBhdXRvcmVsZWFzZV0pOworICAgIH0pOwogfQogCi0tIChfV0tTZWxlY3Rpb25BdHRyaWJ1
dGVzKV9zZWxlY3Rpb25BdHRyaWJ1dGVzCisrIChCT09MKWhhbmRsZXNVUkxTY2hlbWU6KE5TU3Ry
aW5nICopdXJsU2NoZW1lCiB7Ci0gICAgcmV0dXJuIF9zZWxlY3Rpb25BdHRyaWJ1dGVzOworICAg
IHJldHVybiBXZWJDb3JlOjpMZWdhY3lTY2hlbWVSZWdpc3RyeTo6aXNCdWlsdGluU2NoZW1lKHVy
bFNjaGVtZSk7CiB9CiAKLS0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBX
ZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmcmKXdhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClzZXRNZWRpYVR5cGU6KE5TU3Ry
aW5nICopbWVkaWFTdHlsZQogewotICAgIF9zYWZlQnJvd3NpbmdXYXJuaW5nID0gYWRvcHROUyhb
W1dLU2FmZUJyb3dzaW5nV2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzZWxmLmJvdW5kcyBz
YWZlQnJvd3NpbmdXYXJuaW5nOndhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtTZWxmID0g
V2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwotICAgICAgICBhdXRvIHN0cm9uZ1Nl
bGYgPSB3ZWFrU2VsZi5nZXQoKTsKLSAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBib29sIG5hdmlnYXRlc0ZyYW1lID0gV1RGOjpzd2l0Y2hPbihy
ZXN1bHQsCi0gICAgICAgICAgICBbXSAoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQgY29udGlu
dWVVbnNhZmVMb2FkKSB7IHJldHVybiBjb250aW51ZVVuc2FmZUxvYWQgPT0gV2ViS2l0OjpDb250
aW51ZVVuc2FmZUxvYWQ6OlllczsgfSwKLSAgICAgICAgICAgIFtdIChjb25zdCBVUkwmKSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgICAgICk7Ci0gICAgICAgIGJvb2wgZm9yTWFpbkZyYW1lTmF2aWdh
dGlvbiA9IFtzdHJvbmdTZWxmLT5fc2FmZUJyb3dzaW5nV2FybmluZyBmb3JNYWluRnJhbWVOYXZp
Z2F0aW9uXTsKLSAgICAgICAgaWYgKG5hdmlnYXRlc0ZyYW1lICYmIGZvck1haW5GcmFtZU5hdmln
YXRpb24pIHsKLSAgICAgICAgICAgIC8vIFRoZSBzYWZlIGJyb3dzaW5nIHdhcm5pbmcgd2lsbCBi
ZSBoaWRkZW4gb25jZSB0aGUgbmV4dCBwYWdlIGlzIHNob3duLgotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGlmICghbmF2aWdhdGVzRnJhbWUgJiYgc3Ryb25nU2VsZi0+
X3NhZmVCcm93c2luZ1dhcm5pbmcgJiYgIWZvck1haW5GcmFtZU5hdmlnYXRpb24pIHsKLSAgICAg
ICAgICAgIHN0cm9uZ1NlbGYtPl9wYWdlLT5nb0JhY2soKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBbc3RkOjpleGNoYW5nZShzdHJvbmdTZWxmLT5fc2FmZUJyb3dz
aW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgfV0pOwotICAg
IFtzZWxmIGFkZFN1YnZpZXc6X3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCldOworICAgIF9wYWdl
LT5zZXRPdmVycmlkZGVuTWVkaWFUeXBlKG1lZGlhU3R5bGUpOwogfQogCi0tICh2b2lkKV9jbGVh
clNhZmVCcm93c2luZ1dhcm5pbmcKKy0gKE5TU3RyaW5nICopbWVkaWFUeXBlCiB7Ci0gICAgW3N0
ZDo6ZXhjaGFuZ2UoX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZyb21TdXBl
cnZpZXddOworICAgIHJldHVybiBfcGFnZS0+b3ZlcnJpZGRlbk1lZGlhVHlwZSgpLmlzTnVsbCgp
ID8gbmlsIDogKE5TU3RyaW5nICopX3BhZ2UtPm92ZXJyaWRkZW5NZWRpYVR5cGUoKTsKIH0KIAot
LSAodm9pZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9u
Ci17Ci0gICAgaWYgKFtfc2FmZUJyb3dzaW5nV2FybmluZyBmb3JNYWluRnJhbWVOYXZpZ2F0aW9u
XSkKLSAgICAgICAgW3NlbGYgX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZ107Ci19CisjcHJhZ21h
IG1hcmsgLSBpT1MgQVBJCiAKLS0gKHZvaWQpX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRp
b25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JQYWludGluZyB3aXRob3V0V2FpdGluZ0ZvckFu
aW1hdGVkUmVzaXplOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUKLXsKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVu
dFZpZXddKSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIHVwZGF0ZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorLSAoVUlT
Y3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIHJldHVybiBfc2Nyb2xsVmlldy5nZXQoKTsK
K30KKyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCi0gICAgaWYgKHdpdGhvdXRXYWl0
aW5nRm9yUGFpbnRpbmcpCi0gICAgICAgIF9wYWdlLT5zZXRTaG91bGRTa2lwV2FpdGluZ0ZvclBh
aW50QWZ0ZXJOZXh0Vmlld0RpZE1vdmVUb1dpbmRvdyh0cnVlKTsKKyNwcmFnbWEgbWFyayAtIG1h
Y09TIEFQSQogCi0gICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtlQmxvY2tQdHIodXBkYXRl
QmxvY2spOworI2lmIFBMQVRGT1JNKE1BQykKKworLSAodm9pZClzZXRBbGxvd3NNYWduaWZpY2F0
aW9uOihCT09MKWFsbG93c01hZ25pZmljYXRpb24KK3sKKyAgICBfaW1wbC0+c2V0QWxsb3dzTWFn
bmlmaWNhdGlvbihhbGxvd3NNYWduaWZpY2F0aW9uKTsKK30KKworLSAoQk9PTClhbGxvd3NNYWdu
aWZpY2F0aW9uCit7CisgICAgcmV0dXJuIF9pbXBsLT5hbGxvd3NNYWduaWZpY2F0aW9uKCk7Cit9
CisKKy0gKHZvaWQpc2V0TWFnbmlmaWNhdGlvbjooZG91YmxlKW1hZ25pZmljYXRpb24gY2VudGVy
ZWRBdFBvaW50OihOU1BvaW50KXBvaW50Cit7CisgICAgX2ltcGwtPnNldE1hZ25pZmljYXRpb24o
bWFnbmlmaWNhdGlvbiwgTlNQb2ludFRvQ0dQb2ludChwb2ludCkpOworfQorCistICh2b2lkKXNl
dE1hZ25pZmljYXRpb246KGRvdWJsZSltYWduaWZpY2F0aW9uCit7CisgICAgX2ltcGwtPnNldE1h
Z25pZmljYXRpb24obWFnbmlmaWNhdGlvbik7Cit9CisKKy0gKGRvdWJsZSltYWduaWZpY2F0aW9u
Cit7CisgICAgcmV0dXJuIF9pbXBsLT5tYWduaWZpY2F0aW9uKCk7Cit9CisKKy0gKE5TUHJpbnRP
cGVyYXRpb24gKilwcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJp
bnRJbmZvCit7CisgICAgaWYgKGF1dG8gd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5tYWluRnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuIF9pbXBsLT5wcmludE9wZXJhdGlvbldpdGhQcmludEluZm8ocHJp
bnRJbmZvLCAqd2ViRnJhbWVQcm94eSk7CisgICAgcmV0dXJuIG5pbDsKK30KKworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKworI3ByYWdtYSBtYXJrIC0gbWFjT1MvaU9TIGludGVybmFsCisKKy0g
KHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2lu
Z1dhcm5pbmcmKXdhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgVVJMPiYmKT4mJiljb21wbGV0
aW9uSGFuZGxlcgoreworICAgIF9zYWZlQnJvd3NpbmdXYXJuaW5nID0gYWRvcHROUyhbW1dLU2Fm
ZUJyb3dzaW5nV2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzZWxmLmJvdW5kcyBzYWZlQnJv
d3NpbmdXYXJuaW5nOndhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtTZWxmID0gV2Vha09i
akNQdHI8V0tXZWJWaWV3PihzZWxmKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3
ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBib29sIG5hdmlnYXRlc0ZyYW1lID0gV1RGOjpzd2l0Y2hPbihyZXN1bHQs
CisgICAgICAgICAgICBbXSAoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQgY29udGludWVVbnNh
ZmVMb2FkKSB7IHJldHVybiBjb250aW51ZVVuc2FmZUxvYWQgPT0gV2ViS2l0OjpDb250aW51ZVVu
c2FmZUxvYWQ6OlllczsgfSwKKyAgICAgICAgICAgIFtdIChjb25zdCBVUkwmKSB7IHJldHVybiB0
cnVlOyB9CisgICAgICAgICk7CisgICAgICAgIGJvb2wgZm9yTWFpbkZyYW1lTmF2aWdhdGlvbiA9
IFtzdHJvbmdTZWxmLT5fc2FmZUJyb3dzaW5nV2FybmluZyBmb3JNYWluRnJhbWVOYXZpZ2F0aW9u
XTsKKyAgICAgICAgaWYgKG5hdmlnYXRlc0ZyYW1lICYmIGZvck1haW5GcmFtZU5hdmlnYXRpb24p
IHsKKyAgICAgICAgICAgIC8vIFRoZSBzYWZlIGJyb3dzaW5nIHdhcm5pbmcgd2lsbCBiZSBoaWRk
ZW4gb25jZSB0aGUgbmV4dCBwYWdlIGlzIHNob3duLgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmICghbmF2aWdhdGVzRnJhbWUgJiYgc3Ryb25nU2VsZi0+X3NhZmVC
cm93c2luZ1dhcm5pbmcgJiYgIWZvck1haW5GcmFtZU5hdmlnYXRpb24pIHsKKyAgICAgICAgICAg
IHN0cm9uZ1NlbGYtPl9wYWdlLT5nb0JhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBbc3RkOjpleGNoYW5nZShzdHJvbmdTZWxmLT5fc2FmZUJyb3dzaW5nV2Fy
bmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgfV0pOworICAgIFtzZWxm
IGFkZFN1YnZpZXc6X3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCldOworfQorCistICh2b2lkKV9j
bGVhclNhZmVCcm93c2luZ1dhcm5pbmcKK3sKKyAgICBbc3RkOjpleGNoYW5nZShfc2FmZUJyb3dz
aW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107Cit9CisKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZ0lmRm9yTWFpbkZyYW1lTmF2aWdhdGlvbgoreworICAg
IGlmIChbX3NhZmVCcm93c2luZ1dhcm5pbmcgZm9yTWFpbkZyYW1lTmF2aWdhdGlvbl0pCisgICAg
ICAgIFtzZWxmIF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworfQorCistICh2b2lkKV9pbnRl
cm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVC
bG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmcgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGlu
Z0ZvckFuaW1hdGVkUmVzaXplCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAo
IVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICh3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nKQor
ICAgICAgICBfcGFnZS0+c2V0U2hvdWxkU2tpcFdhaXRpbmdGb3JQYWludEFmdGVyTmV4dFZpZXdE
aWRNb3ZlVG9XaW5kb3codHJ1ZSk7CisKKyAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VC
bG9ja1B0cih1cGRhdGVCbG9jayk7CiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdT
ZWxmID0gc2VsZjsKICAgICBfcGFnZS0+Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShb
dXBkYXRlQmxvY2tDb3B5LCB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplLCBzdHJvbmdT
ZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKQEAgLTEzOTAsOCArMTIy
OCw2IEBAIC0gKHZvaWQpX2RpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudDooQVBJOjpBdHRh
Y2htZW50JilhdHRhY2htZW50CiAKICNlbmRpZiAvLyBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5U
KQogCi0jcHJhZ21hIG1hcmsgLSBtYWNPUy9pT1MgaW1wbGVtZW50YXRpb24gbWV0aG9kcwotCiAt
IChXS1BhZ2VSZWYpX3BhZ2VGb3JUZXN0aW5nCiB7CiAgICAgcmV0dXJuIHRvQVBJKF9wYWdlLmdl
dCgpKTsKQEAgLTE0MDgsMTEgKzEyNDQsNiBAQCAtIChpZCA8V0tVUkxTY2hlbWVIYW5kbGVyPil1
cmxTY2hlbWVIYW5kbGVyRm9yVVJMU2NoZW1lOihOU1N0cmluZyAqKXVybFNjaGVtZQogICAgIHJl
dHVybiBoYW5kbGVyID8gaGFuZGxlci0+YXBpSGFuZGxlcigpIDogbmlsOwogfQogCi0rIChCT09M
KWhhbmRsZXNVUkxTY2hlbWU6KE5TU3RyaW5nICopdXJsU2NoZW1lCi17Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OkxlZ2FjeVNjaGVtZVJlZ2lzdHJ5Ojppc0J1aWx0aW5TY2hlbWUodXJsU2NoZW1lKTsK
LX0KLQogLSAoT3B0aW9uYWw8Qk9PTD4pX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRl
Q29tcGxldGlvbkZvclRlc3RpbmcKIHsKICAgICByZXR1cm4gX3Jlc29sdXRpb25Gb3JTaGFyZVNo
ZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3Rpbmc7CkBAIC0xNDU4LDU5NzIgKzEyODksMTQ3
OCBAQCAtICh2b2lkKWNyZWF0ZVdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKQogICAgIH0pOwogfQogCi1pbmxpbmUgV2ViS2l0
OjpGaW5kT3B0aW9ucyB0b0ZpbmRPcHRpb25zKFdLRmluZENvbmZpZ3VyYXRpb24gKmNvbmZpZ3Vy
YXRpb24pCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25Gb3JF
ZGl0b3JTdGF0ZShjb25zdCBXZWJLaXQ6OkVkaXRvclN0YXRlJiBzdGF0ZSkKIHsKLSAgICB1bnNp
Z25lZCBmaW5kT3B0aW9ucyA9IDA7Ci0KLSAgICBpZiAoIWNvbmZpZ3VyYXRpb24uY2FzZVNlbnNp
dGl2ZSkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Nhc2VJbnNl
bnNpdGl2ZTsKLSAgICBpZiAoY29uZmlndXJhdGlvbi5iYWNrd2FyZHMpCi0gICAgICAgIGZpbmRP
cHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNCYWNrd2FyZHM7Ci0gICAgaWYgKGNvbmZpZ3Vy
YXRpb24ud3JhcHMpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNX
cmFwQXJvdW5kOworICAgIGlmIChzdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKKyAgICAg
ICAgcmV0dXJuIEB7IEAicG9zdC1sYXlvdXQtZGF0YSIgOiBATk8gfTsKIAotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRPcHRpb25zPihmaW5kT3B0aW9ucyk7CisgICAgYXV0byYg
cG9zdExheW91dERhdGEgPSBzdGF0ZS5wb3N0TGF5b3V0RGF0YSgpOworICAgIHJldHVybiBAewor
ICAgICAgICBAInBvc3QtbGF5b3V0LWRhdGEiIDogQFlFUywKKyAgICAgICAgQCJib2xkIjogcG9z
dExheW91dERhdGEudHlwaW5nQXR0cmlidXRlcyAmIFdlYktpdDo6QXR0cmlidXRlQm9sZCA/IEBZ
RVMgOiBATk8sCisgICAgICAgIEAiaXRhbGljIjogcG9zdExheW91dERhdGEudHlwaW5nQXR0cmli
dXRlcyAmIFdlYktpdDo6QXR0cmlidXRlSXRhbGljcyA/IEBZRVMgOiBATk8sCisgICAgICAgIEAi
dW5kZXJsaW5lIjogcG9zdExheW91dERhdGEudHlwaW5nQXR0cmlidXRlcyAmIFdlYktpdDo6QXR0
cmlidXRlVW5kZXJsaW5lID8gQFlFUyA6IEBOTywKKyAgICAgICAgQCJ0ZXh0LWFsaWdubWVudCI6
IEAobnNUZXh0QWxpZ25tZW50KHN0YXRpY19jYXN0PFdlYktpdDo6VGV4dEFsaWdubWVudD4ocG9z
dExheW91dERhdGEudGV4dEFsaWdubWVudCkpKSwKKyAgICAgICAgQCJ0ZXh0LWNvbG9yIjogKE5T
U3RyaW5nICopcG9zdExheW91dERhdGEudGV4dENvbG9yLmNzc1RleHQoKQorICAgIH07CiB9CiAK
LS0gKHZvaWQpZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgd2l0aENvbmZpZ3VyYXRpb246
KFdLRmluZENvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0ZpbmRSZXN1bHQgKnJlc3VsdCkpY29tcGxldGlvbkhhbmRsZXIKK3N0YXRpYyBO
U1RleHRBbGlnbm1lbnQgbnNUZXh0QWxpZ25tZW50KFdlYktpdDo6VGV4dEFsaWdubWVudCBhbGln
bm1lbnQpCiB7Ci0gICAgaWYgKCFzdHJpbmcubGVuZ3RoKSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFtbW1dLRmluZFJlc3VsdCBhbGxvY10gX2luaXRXaXRoTWF0Y2hGb3VuZDpOT10gYXV0
b3JlbGVhc2VdKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7Cisg
ICAgY2FzZSBXZWJLaXQ6Ok5vQWxpZ25tZW50OgorICAgICAgICByZXR1cm4gTlNUZXh0QWxpZ25t
ZW50TmF0dXJhbDsKKyAgICBjYXNlIFdlYktpdDo6TGVmdEFsaWdubWVudDoKKyAgICAgICAgcmV0
dXJuIE5TVGV4dEFsaWdubWVudExlZnQ7CisgICAgY2FzZSBXZWJLaXQ6OlJpZ2h0QWxpZ25tZW50
OgorICAgICAgICByZXR1cm4gTlNUZXh0QWxpZ25tZW50UmlnaHQ7CisgICAgY2FzZSBXZWJLaXQ6
OkNlbnRlckFsaWdubWVudDoKKyAgICAgICAgcmV0dXJuIE5TVGV4dEFsaWdubWVudENlbnRlcjsK
KyAgICBjYXNlIFdlYktpdDo6SnVzdGlmaWVkQWxpZ25tZW50OgorICAgICAgICByZXR1cm4gTlNU
ZXh0QWxpZ25tZW50SnVzdGlmaWVkOwogICAgIH0KLQotICAgIF9wYWdlLT5maW5kU3RyaW5nKHN0
cmluZywgdG9GaW5kT3B0aW9ucyhjb25maWd1cmF0aW9uKSwgMSwgW2hhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShib29sIGZvdW5kLCBXZWJLaXQ6OkNhbGxiYWNrQmFz
ZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgaGFuZGxlcihbW1tXS0ZpbmRSZXN1bHQgYWxsb2Nd
IF9pbml0V2l0aE1hdGNoRm91bmQ6KGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
cjo6Tm9uZSAmJiBmb3VuZCldIGF1dG9yZWxlYXNlXSk7Ci0gICAgfSk7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5TVGV4dEFsaWdubWVudE5hdHVyYWw7CiB9CiAKLS0g
KHZvaWQpc2V0TWVkaWFUeXBlOihOU1N0cmluZyAqKW1lZGlhU3R5bGUKK3N0YXRpYyBfV0tTZWxl
Y3Rpb25BdHRyaWJ1dGVzIHNlbGVjdGlvbkF0dHJpYnV0ZXMoY29uc3QgV2ViS2l0OjpFZGl0b3JT
dGF0ZSYgZWRpdG9yU3RhdGUsIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgcHJldmlvdXNBdHRyaWJ1
dGVzKQogewotICAgIF9wYWdlLT5zZXRPdmVycmlkZGVuTWVkaWFUeXBlKG1lZGlhU3R5bGUpOwot
fQorICAgIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IF9XS1NlbGVjdGlvbkF0
dHJpYnV0ZU5vU2VsZWN0aW9uOworICAgIGlmIChlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmUp
CisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOwogCi0tIChOU1N0cmluZyAqKW1lZGlhVHlwZQot
ewotICAgIHJldHVybiBfcGFnZS0+b3ZlcnJpZGRlbk1lZGlhVHlwZSgpLmlzTnVsbCgpID8gbmls
IDogKE5TU3RyaW5nICopX3BhZ2UtPm92ZXJyaWRkZW5NZWRpYVR5cGUoKTsKLX0KKyAgICBpZiAo
ZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSkKKyAgICAgICAgYXR0cmlidXRlcyB8PSBfV0tT
ZWxlY3Rpb25BdHRyaWJ1dGVJc1JhbmdlOworICAgIGVsc2UKKyAgICAgICAgYXR0cmlidXRlcyB8
PSBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVJc0NhcmV0OwogCisgICAgaWYgKCFlZGl0b3JTdGF0ZS5p
c01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
ICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmF0U3RhcnRPZlNlbnRlbmNlKQor
ICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVBdFN0YXJ0T2ZT
ZW50ZW5jZTsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAocHJldmlvdXNBdHRyaWJ1dGVzICYgX1dL
U2VsZWN0aW9uQXR0cmlidXRlQXRTdGFydE9mU2VudGVuY2UpCisgICAgICAgIGF0dHJpYnV0ZXMg
fD0gX1dLU2VsZWN0aW9uQXR0cmlidXRlQXRTdGFydE9mU2VudGVuY2U7CiAKLSNwcmFnbWEgbWFy
ayAtIFVJVmlldyBvdmVycmlkZXMKLQotLSAodm9pZClzZXRGcmFtZTooQ0dSZWN0KWZyYW1lCi17
Ci0gICAgQ0dSZWN0IG9sZEZyYW1lID0gc2VsZi5mcmFtZTsKLSAgICBbc3VwZXIgc2V0RnJhbWU6
ZnJhbWVdOwotCi0gICAgaWYgKCFDR1NpemVFcXVhbFRvU2l6ZShvbGRGcmFtZS5zaXplLCBmcmFt
ZS5zaXplKSkKLSAgICAgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKKyAgICByZXR1
cm4gYXR0cmlidXRlczsKIH0KIAotLSAodm9pZClzZXRCb3VuZHM6KENHUmVjdClib3VuZHMKKy0g
KHZvaWQpX2RpZENoYW5nZUVkaXRvclN0YXRlCiB7Ci0gICAgQ0dSZWN0IG9sZEJvdW5kcyA9IHNl
bGYuYm91bmRzOwotICAgIFtzdXBlciBzZXRCb3VuZHM6Ym91bmRzXTsKLSAgICBbX2N1c3RvbUNv
bnRlbnRGaXhlZE92ZXJsYXlWaWV3IHNldEZyYW1lOnNlbGYuYm91bmRzXTsKKyAgICBhdXRvIG5l
d1NlbGVjdGlvbkF0dHJpYnV0ZXMgPSBzZWxlY3Rpb25BdHRyaWJ1dGVzKF9wYWdlLT5lZGl0b3JT
dGF0ZSgpLCBfc2VsZWN0aW9uQXR0cmlidXRlcyk7CisgICAgaWYgKF9zZWxlY3Rpb25BdHRyaWJ1
dGVzICE9IG5ld1NlbGVjdGlvbkF0dHJpYnV0ZXMpIHsKKyAgICAgICAgTlNTdHJpbmcgKnNlbGVj
dGlvbkF0dHJpYnV0ZXNLZXkgPSBOU1N0cmluZ0Zyb21TZWxlY3RvcihAc2VsZWN0b3IoX3NlbGVj
dGlvbkF0dHJpYnV0ZXMpKTsKKyAgICAgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OnNl
bGVjdGlvbkF0dHJpYnV0ZXNLZXldOworICAgICAgICBfc2VsZWN0aW9uQXR0cmlidXRlcyA9IG5l
d1NlbGVjdGlvbkF0dHJpYnV0ZXM7CisgICAgICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5
OnNlbGVjdGlvbkF0dHJpYnV0ZXNLZXldOworICAgIH0KIAotICAgIGlmICghQ0dTaXplRXF1YWxU
b1NpemUob2xkQm91bmRzLnNpemUsIGJvdW5kcy5zaXplKSkKLSAgICAgICAgW3NlbGYgX2ZyYW1l
T3JCb3VuZHNDaGFuZ2VkXTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGVpdGhlciByZW5hbWUg
LV93ZWJWaWV3OmVkaXRvclN0YXRlRGlkQ2hhbmdlOiB0byBjbGFyaWZ5IHRoYXQgaXQncyBvbmx5
IGludGVuZGVkIGZvciB1c2Ugd2hlbiB0ZXN0aW5nLAorICAgIC8vIG9yIHJlbW92ZSBpdCBlbnRp
cmVseSBhbmQgdXNlIC1fd2ViVmlldzpkaWRDaGFuZ2VGb250QXR0cmlidXRlczogaW5zdGVhZCBv
bmNlIHRleHQgYWxpZ25tZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgc2V0IG9mCisgICAgLy8gZm9u
dCBhdHRyaWJ1dGVzLgorICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0g
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilzZWxmLlVJRGVsZWdhdGU7CisgICAgaWYgKFt1aURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZWRpdG9yU3RhdGVE
aWRDaGFuZ2U6KV0pCisgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3OnNlbGYgZWRpdG9yU3Rh
dGVEaWRDaGFuZ2U6ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uRm9yRWRpdG9yU3RhdGUoX3BhZ2Ut
PmVkaXRvclN0YXRlKCkpXTsKIH0KIAotLSAodm9pZClsYXlvdXRTdWJ2aWV3cwotewotICAgIFtf
c2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107Ci0gICAgW3N1cGVyIGxh
eW91dFN1YnZpZXdzXTsKLSAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwotfQorQGVu
ZAogCi0tIChVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgcmV0dXJuIF9zY3JvbGxW
aWV3LmdldCgpOwotfQorI3ByYWdtYSBtYXJrIC0KIAotI3ByYWdtYSBtYXJrIC0gaU9TIGltcGxl
bWVudGF0aW9uIG1ldGhvZHMKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkK
IAotLSAoQk9PTClfaXNTaG93aW5nVmlkZW9QaWN0dXJlSW5QaWN0dXJlCi17Ci0jaWYgIUhBVkUo
QVZLSVQpCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICBpZiAoIV9wYWdlIHx8ICFfcGFn
ZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisjcHJh
Z21hIG1hcmsgLSBtYWNPUyBXS1ByaXZhdGUKIAotICAgIHJldHVybiBfcGFnZS0+dmlkZW9GdWxs
c2NyZWVuTWFuYWdlcigpLT5oYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpOwotI2VuZGlmCi19CisjaWYgUExB
VEZPUk0oTUFDKQogCi0tIChCT09MKV9tYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUlu
UGljdHVyZQotewotI2lmICFIQVZFKEFWS0lUKQotICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0g
ICAgaWYgKCFfcGFnZSB8fCAhX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworI2RlZmluZSBXRUJDT1JFX1BSSVZBVEVfQ09NTUFORChjb21tYW5k
KSAtICh2b2lkKV8jI2NvbW1hbmQ6KGlkKXNlbmRlciB7IF9wYWdlLT5leGVjdXRlRWRpdENvbW1h
bmQoI2NvbW1hbmQgIyMgX3MpOyB9CiAKLSAgICByZXR1cm4gX3BhZ2UtPnZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIoKS0+bWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKTsK
LSNlbmRpZgotfQorV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoYWxpZ25DZW50ZXIpCitXRUJDT1JF
X1BSSVZBVEVfQ09NTUFORChhbGlnbkp1c3RpZmllZCkKK1dFQkNPUkVfUFJJVkFURV9DT01NQU5E
KGFsaWduTGVmdCkKK1dFQkNPUkVfUFJJVkFURV9DT01NQU5EKGFsaWduUmlnaHQpCitXRUJDT1JF
X1BSSVZBVEVfQ09NTUFORChpbnNlcnRPcmRlcmVkTGlzdCkKK1dFQkNPUkVfUFJJVkFURV9DT01N
QU5EKGluc2VydFVub3JkZXJlZExpc3QpCitXRUJDT1JFX1BSSVZBVEVfQ09NTUFORChpbnNlcnRO
ZXN0ZWRPcmRlcmVkTGlzdCkKK1dFQkNPUkVfUFJJVkFURV9DT01NQU5EKGluc2VydE5lc3RlZFVu
b3JkZXJlZExpc3QpCitXRUJDT1JFX1BSSVZBVEVfQ09NTUFORChpbmRlbnQpCitXRUJDT1JFX1BS
SVZBVEVfQ09NTUFORChvdXRkZW50KQorV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQocGFzdGVBc1F1
b3RhdGlvbikKK1dFQkNPUkVfUFJJVkFURV9DT01NQU5EKHBhc3RlQW5kTWF0Y2hTdHlsZSkKIAot
LSAodm9pZClfaW5jcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudAotewotICAgICsrX2ZvY3Vz
UHJlc2VydmF0aW9uQ291bnQ7Ci19CisjdW5kZWYgV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQKIAot
LSAodm9pZClfZGVjcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudAorLSAodm9pZClfdG9nZ2xl
U3RyaWtlVGhyb3VnaDooaWQpc2VuZGVyCiB7Ci0gICAgaWYgKF9mb2N1c1ByZXNlcnZhdGlvbkNv
dW50KQotICAgICAgICAtLV9mb2N1c1ByZXNlcnZhdGlvbkNvdW50OworICAgIF9wYWdlLT5leGVj
dXRlRWRpdENvbW1hbmQoInN0cmlrZXRocm91Z2giX3MpOwogfQogCi0tICh2b2lkKV9yZXNldEZv
Y3VzUHJlc2VydmF0aW9uQ291bnQKKy0gKHZvaWQpX2luY3JlYXNlTGlzdExldmVsOihpZClzZW5k
ZXIKIHsKLSAgICBfZm9jdXNQcmVzZXJ2YXRpb25Db3VudCA9IDA7CisgICAgX3BhZ2UtPmluY3Jl
YXNlTGlzdExldmVsKCk7CiB9CiAKLS0gKEJPT0wpX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0
YXRlCistICh2b2lkKV9kZWNyZWFzZUxpc3RMZXZlbDooaWQpc2VuZGVyCiB7Ci0gICAgLy8gRm9j
dXMgcHJlc2VydmF0aW9uIGNvdW50IGZ1bGZpbGxzIHRoZSBzYW1lIHJvbGUgYXMgYWN0aXZlIGZv
Y3VzIHN0YXRlIGNvdW50LgotICAgIC8vIEhvd2V2ZXIsIHVubGlrZSBhY3RpdmUgZm9jdXMgc3Rh
dGUsIGl0IG1heSBiZSByZXNldCB0byAwIHdpdGhvdXQgaW1wYWN0aW5nIHRoZQotICAgIC8vIGJl
aGF2aW9yIG9mIC1fcmV0YWluQWN0aXZlRm9jdXNlZFN0YXRlLCBhbmQgaXQncyBoYXJtbGVzcyB0
byBpbnZva2UKLSAgICAvLyAtX2RlY3JlbWVudEZvY3VzUHJlc2VydmF0aW9uQ291bnQgYWZ0ZXIg
cmVzZXR0aW5nIHRoZSBjb3VudCB0byAwLgotICAgIHJldHVybiBfZm9jdXNQcmVzZXJ2YXRpb25D
b3VudCB8fCBfYWN0aXZlRm9jdXNlZFN0YXRlUmV0YWluQ291bnQ7CisgICAgX3BhZ2UtPmRlY3Jl
YXNlTGlzdExldmVsKCk7CiB9CiAKLS0gKEJPT0wpX2VmZmVjdGl2ZUFwcGVhcmFuY2VJc0RhcmsK
Ky0gKHZvaWQpX2NoYW5nZUxpc3RUeXBlOihpZClzZW5kZXIKIHsKLSAgICByZXR1cm4gc2VsZi50
cmFpdENvbGxlY3Rpb24udXNlckludGVyZmFjZVN0eWxlID09IFVJVXNlckludGVyZmFjZVN0eWxl
RGFyazsKKyAgICBfcGFnZS0+Y2hhbmdlTGlzdFR5cGUoKTsKIH0KIAotLSAoQk9PTClfZWZmZWN0
aXZlVXNlckludGVyZmFjZUxldmVsSXNFbGV2YXRlZAotewotI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpICYmICFQTEFURk9STShXQVRDSE9TKQotICAgIHJldHVybiBzZWxmLnRyYWl0Q29s
bGVjdGlvbi51c2VySW50ZXJmYWNlTGV2ZWwgPT0gVUlVc2VySW50ZXJmYWNlTGV2ZWxFbGV2YXRl
ZDsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCi19CisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQogCi0tIChCT09MKV9zaG91bGRBdm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0No
YW5nZQotewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF9zaG91bGRBdm9pZFJlc2l6aW5nV2hl
bklucHV0Vmlld0JvdW5kc0NoYW5nZV07Ci19CisjcHJhZ21hIG1hcmsgLSBpT1MgV0tQcml2YXRl
CiAKLS0gKF9XS0RyYWdJbnRlcmFjdGlvblBvbGljeSlfZHJhZ0ludGVyYWN0aW9uUG9saWN5Ci17
Ci0gICAgcmV0dXJuIF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3k7CisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKworI2RlZmluZSBGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9hY3Rpb24p
IFwKKy0gKHZvaWQpX2FjdGlvbjooaWQpc2VuZGVyIFwKK3sgXAorICAgIGlmIChzZWxmLnVzZXNT
dGFuZGFyZENvbnRlbnRWaWV3KSBcCisgICAgICAgIFtfY29udGVudFZpZXcgX2FjdGlvbiAjIyBG
b3JXZWJWaWV3OnNlbmRlcl07IFwKIH0KIAotLSAodm9pZClfc2V0RHJhZ0ludGVyYWN0aW9uUG9s
aWN5OihfV0tEcmFnSW50ZXJhY3Rpb25Qb2xpY3kpcG9saWN5Ci17Ci0gICAgaWYgKF9kcmFnSW50
ZXJhY3Rpb25Qb2xpY3kgPT0gcG9saWN5KQotICAgICAgICByZXR1cm47CitGT1JfRUFDSF9QUklW
QVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9OKEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcp
CiAKLSAgICBfZHJhZ0ludGVyYWN0aW9uUG9saWN5ID0gcG9saWN5OwotI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCi0gICAgW19jb250ZW50VmlldyBfZGlkQ2hhbmdlRHJhZ0ludGVyYWN0aW9uUG9s
aWN5XTsKLSNlbmRpZgotfQorI3VuZGVmIEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcK
IAotLSAodm9pZClfcG9wdWxhdGVBcmNoaXZlZFN1YnZpZXdzOihOU011dGFibGVTZXQgKillbmNv
ZGVkVmlld3MKKy0gKFVJVmlldyAqKWlucHV0QWNjZXNzb3J5VmlldwogewotICAgIFtzdXBlciBf
cG9wdWxhdGVBcmNoaXZlZFN1YnZpZXdzOmVuY29kZWRWaWV3c107Ci0KLSAgICBpZiAoX3Njcm9s
bFZpZXcpCi0gICAgICAgIFtlbmNvZGVkVmlld3MgcmVtb3ZlT2JqZWN0Ol9zY3JvbGxWaWV3Lmdl
dCgpXTsKLSAgICBpZiAoX2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3KQotICAgICAgICBb
ZW5jb2RlZFZpZXdzIHJlbW92ZU9iamVjdDpfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcu
Z2V0KCldOworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlucHV0QWNjZXNzb3J5Vmlld0Zvcldl
YlZpZXddOwogfQogCi0tIChCT09MKV9pc0JhY2tncm91bmQKKy0gKFVJVmlldyAqKWlucHV0Vmll
dwogewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddICYmIFtfY3VzdG9t
Q29udGVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJfaXNCYWNrZ3JvdW5k
KV0pCi0gICAgICAgIHJldHVybiBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9pc0JhY2tncm91bmRd
OwotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlzQmFja2dyb3VuZF07CisgICAgcmV0dXJuIFtf
Y29udGVudFZpZXcgaW5wdXRWaWV3Rm9yV2ViVmlld107CiB9CiAKLUFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCi0tIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilicm93
c2luZ0NvbnRleHRDb250cm9sbGVyCistIChVSVRleHRJbnB1dEFzc2lzdGFudEl0ZW0gKilpbnB1
dEFzc2lzdGFudEl0ZW0KIHsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBicm93c2luZ0NvbnRl
eHRDb250cm9sbGVyXTsKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dEFzc2lzdGFudEl0
ZW1Gb3JXZWJWaWV3XTsKIH0KLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCi0t
IChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCi17Ci0gICAgVUlWaWV3ICpjdXJyZW50Q29udGVu
dFZpZXcgPSBzZWxmLl9jdXJyZW50Q29udGVudFZpZXc7Ci0gICAgaWYgKGN1cnJlbnRDb250ZW50
VmlldyA9PSBfY29udGVudFZpZXcgJiYgW19jb250ZW50VmlldyBzdXBlcnZpZXddKQotICAgICAg
ICByZXR1cm4gW19jb250ZW50VmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlckZvcldlYlZpZXddIHx8
IFtzdXBlciBiZWNvbWVGaXJzdFJlc3BvbmRlcl07CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZB
TUlMWSkKIAotICAgIHJldHVybiBbY3VycmVudENvbnRlbnRWaWV3IGJlY29tZUZpcnN0UmVzcG9u
ZGVyXSB8fCBbc3VwZXIgYmVjb21lRmlyc3RSZXNwb25kZXJdOwotfQorI3ByYWdtYSBtYXJrIC0g
bWFjT1MvaU9TIFdLUHJpdmF0ZQogCi0tIChCT09MKWNhbkJlY29tZUZpcnN0UmVzcG9uZGVyCist
IChfV0tTZWxlY3Rpb25BdHRyaWJ1dGVzKV9zZWxlY3Rpb25BdHRyaWJ1dGVzCiB7Ci0gICAgaWYg
KHNlbGYuX2N1cnJlbnRDb250ZW50VmlldyA9PSBfY29udGVudFZpZXcpCi0gICAgICAgIHJldHVy
biBbX2NvbnRlbnRWaWV3IGNhbkJlY29tZUZpcnN0UmVzcG9uZGVyRm9yV2ViVmlld107Ci0KLSAg
ICByZXR1cm4gWUVTOworICAgIHJldHVybiBfc2VsZWN0aW9uQXR0cmlidXRlczsKIH0KIAotLSAo
Qk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgorLSAoQ0dTaXplKV92aWV3cG9ydFNpemVGb3JDU1NW
aWV3cG9ydFVuaXRzCiB7Ci0gICAgaWYgKFtfY29udGVudFZpZXcgaXNGaXJzdFJlc3BvbmRlcl0p
Ci0gICAgICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyRm9yV2Vi
Vmlld107Ci0KLSAgICByZXR1cm4gW3N1cGVyIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKKyAgICBy
ZXR1cm4gX3BhZ2UtPnZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoKTsKIH0KIAotRk9S
X0VBQ0hfV0tDT05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklF
VykKLQotLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uOihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlk
KXNlbmRlcgorLSAodm9pZClfc2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0czooQ0dT
aXplKXZpZXdwb3J0U2l6ZQogewotICAgICNkZWZpbmUgRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9O
X1RPX1dLQ09OVEVOVFZJRVcoX2FjdGlvbikgXAotICAgICAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihfYWN0aW9uOikpIFwKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnVzZXNTdGFuZGFyZENv
bnRlbnRWaWV3ICYmIFtfY29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldlYlZpZXc6YWN0
aW9uIHdpdGhTZW5kZXI6c2VuZGVyXTsKLQotICAgIEZPUl9FQUNIX1dLQ09OVEVOVFZJRVdfQUNU
SU9OKEZPUldBUkRfQ0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXKQotICAgIEZPUl9F
QUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9O
X1RPX1dLQ09OVEVOVFZJRVcpCi0gICAgRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9OX1RPX1dLQ09O
VEVOVFZJRVcoX3NldFRleHRDb2xvcjpzZW5kZXIpCi0gICAgRk9SV0FSRF9DQU5QRVJGT1JNQUNU
SU9OX1RPX1dLQ09OVEVOVFZJRVcoX3NldEZvbnRTaXplOnNlbmRlcikKLSAgICBGT1JXQVJEX0NB
TlBFUkZPUk1BQ1RJT05fVE9fV0tDT05URU5UVklFVyhfc2V0Rm9udDpzZW5kZXIpCi0KLSAgICAj
dW5kZWYgRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcKKyAgICBhdXRv
IHZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0VW5pdHMgPSBXZWJDb3JlOjpJbnRTaXplKHZpZXdwb3J0
U2l6ZSk7CisgICAgaWYgKHZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0VW5pdHMuaXNFbXB0eSgpKQor
ICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9y
bWF0OkAiVmlld3BvcnQgc2l6ZSBzaG91bGQgbm90IGJlIGVtcHR5Il07CiAKLSAgICByZXR1cm4g
W3N1cGVyIGNhblBlcmZvcm1BY3Rpb246YWN0aW9uIHdpdGhTZW5kZXI6c2VuZGVyXTsKKyAgICBf
cGFnZS0+c2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyh2aWV3cG9ydFNpemVGb3JW
aWV3cG9ydFVuaXRzKTsKIH0KIAotLSAoaWQpdGFyZ2V0Rm9yQWN0aW9uOihTRUwpYWN0aW9uIHdp
dGhTZW5kZXI6KGlkKXNlbmRlcgorLSAoX1dLSW5zcGVjdG9yICopX2luc3BlY3RvcgogewotICAg
ICNkZWZpbmUgRk9SV0FSRF9UQVJHRVRGT1JBQ1RJT05fVE9fV0tDT05URU5UVklFVyhfYWN0aW9u
KSBcCi0gICAgICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9hY3Rpb246KSAmJiBzZWxmLnVz
ZXNTdGFuZGFyZENvbnRlbnRWaWV3KSBcCi0gICAgICAgICAgICByZXR1cm4gW19jb250ZW50Vmll
dyB0YXJnZXRGb3JBY3Rpb25Gb3JXZWJWaWV3OmFjdGlvbiB3aXRoU2VuZGVyOnNlbmRlcl07Ci0K
LSAgICBGT1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX1RBUkdFVEZPUkFDVElP
Tl9UT19XS0NPTlRFTlRWSUVXKQotICAgIEZPUl9FQUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19B
Q1RJT04oRk9SV0FSRF9UQVJHRVRGT1JBQ1RJT05fVE9fV0tDT05URU5UVklFVykKLSAgICBGT1JX
QVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9zZXRUZXh0Q29sb3I6c2VuZGVy
KQotICAgIEZPUldBUkRfVEFSR0VURk9SQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcoX3NldEZvbnRT
aXplOnNlbmRlcikKLSAgICBGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NPTlRFTlRWSUVX
KF9zZXRGb250OnNlbmRlcikKLQotICAgICN1bmRlZiBGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9U
T19XS0NPTlRFTlRWSUVXCi0KLSAgICByZXR1cm4gW3N1cGVyIHRhcmdldEZvckFjdGlvbjphY3Rp
b24gd2l0aFNlbmRlcjpzZW5kZXJdOworICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBfcGFnZS0+
aW5zcGVjdG9yKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyKCppbnNwZWN0b3IpOworICAgIHJl
dHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpd2lsbEZpbmlzaElnbm9yaW5nQ2FsbG91dEJhckZhZGVB
ZnRlclBlcmZvcm1pbmdBY3Rpb24KKy0gKF9XS0ZyYW1lSGFuZGxlICopX21haW5GcmFtZQogewot
ICAgIFtfY29udGVudFZpZXcgd2lsbEZpbmlzaElnbm9yaW5nQ2FsbG91dEJhckZhZGVBZnRlclBl
cmZvcm1pbmdBY3Rpb25dOworICAgIGlmIChhdXRvKiBmcmFtZSA9IF9wYWdlLT5tYWluRnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKGZyYW1l
LT5mcmFtZUlEKCkpKTsKKyAgICByZXR1cm4gbmlsOwogfQogCi1zdGF0aWMgaW5saW5lIENHRmxv
YXQgZmxvb3JUb0RldmljZVBpeGVsKENHRmxvYXQgaW5wdXQsIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKQorLSAoQk9PTClfaXNFZGl0YWJsZQogewotICAgIHJldHVybiBDR0Zsb29yKGlucHV0ICog
ZGV2aWNlU2NhbGVGYWN0b3IpIC8gZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgcmV0dXJuIF9wYWdl
ICYmIF9wYWdlLT5pc0VkaXRhYmxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwb2ludHNF
cXVhbEluRGV2aWNlUGl4ZWxzKENHUG9pbnQgYSwgQ0dQb2ludCBiLCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvcikKKy0gKHZvaWQpX3NldEVkaXRhYmxlOihCT09MKWVkaXRhYmxlCiB7Ci0gICAgcmV0
dXJuIGZhYnMoYS54ICogZGV2aWNlU2NhbGVGYWN0b3IgLSBiLnggKiBkZXZpY2VTY2FsZUZhY3Rv
cikgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpCi0gICAgICAgICYmIGZh
YnMoYS55ICogZGV2aWNlU2NhbGVGYWN0b3IgLSBiLnkgKiBkZXZpY2VTY2FsZUZhY3RvcikgPCBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpOwotfQorICAgIGJvb2wgd2FzRWRp
dGFibGUgPSBfcGFnZS0+aXNFZGl0YWJsZSgpOworICAgIF9wYWdlLT5zZXRFZGl0YWJsZShlZGl0
YWJsZSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChlZGl0YWJsZSkKKyAgICAgICAgX2lt
cGwtPmRpZEJlY29tZUVkaXRhYmxlKCk7CisjZW5kaWYKIAotc3RhdGljIENHU2l6ZSByb3VuZFNj
cm9sbFZpZXdDb250ZW50U2l6ZShjb25zdCBXZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFnZSwgQ0dT
aXplIGNvbnRlbnRTaXplKQotewotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIHJldHVybiBDR1NpemVNYWtlKGZsb29yVG9EZXZpY2VQ
aXhlbChjb250ZW50U2l6ZS53aWR0aCwgZGV2aWNlU2NhbGVGYWN0b3IpLCBmbG9vclRvRGV2aWNl
UGl4ZWwoY29udGVudFNpemUuaGVpZ2h0LCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGlmICh3
YXNFZGl0YWJsZSA9PSBlZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBbX2NvbnRlbnRWaWV3IF9kaWRDaGFuZ2VXZWJWaWV3RWRpdGFiaWxp
dHldOworI2VuZGlmCiB9CiAKLS0gKFVJVmlldyAqKV9jdXJyZW50Q29udGVudFZpZXcKKy0gKHZv
aWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5kIGFyZ3VtZW50OihOU1N0
cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRpb24KIHsK
LSAgICByZXR1cm4gX2N1c3RvbUNvbnRlbnRWaWV3ID8gW19jdXN0b21Db250ZW50VmlldyB3ZWJf
Y29udGVudFZpZXddIDogX2NvbnRlbnRWaWV3LmdldCgpOworICAgIF9wYWdlLT5leGVjdXRlRWRp
dENvbW1hbmQoY29tbWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7CisgICAgICAgIGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKKyAgICAgICAgICAgIGNh
cHR1cmVkQ29tcGxldGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
cjo6Tm9uZSk7CisgICAgfSk7CiB9CiAKLS0gKFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lz
dHJ5ICopX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5CistIChpZCA8X1dLVGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlPilfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlCiB7Ci0gICAgcmV0dXJuIFtfY29u
ZmlndXJhdGlvbiBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldOworICAgIHJldHVybiBfdGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwogfQogCi0tIChXS1NlbGVjdGlv
bkdyYW51bGFyaXR5KV9zZWxlY3Rpb25HcmFudWxhcml0eQorLSAodm9pZClfc2V0VGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0
ZQogewotICAgIHJldHVybiBbX2NvbmZpZ3VyYXRpb24gc2VsZWN0aW9uR3JhbnVsYXJpdHldOwor
ICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIH0KIAotLSAodm9pZClf
c2V0SGFzQ3VzdG9tQ29udGVudFZpZXc6KEJPT0wpcGFnZUhhc0N1c3RvbUNvbnRlbnRWaWV3IGxv
YWRlZE1JTUVUeXBlOihjb25zdCBXVEY6OlN0cmluZyYpbWltZVR5cGUKKy0gKHZvaWQpX3N0YXJ0
VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNv
bmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXikoKSljb21wbGV0
aW9uSGFuZGxlcgogewotICAgIGlmIChwYWdlSGFzQ3VzdG9tQ29udGVudFZpZXcpIHsKLSAgICAg
ICAgW19jdXN0b21Db250ZW50VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgW19j
dXN0b21Db250ZW50Rml4ZWRPdmVybGF5VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICB1
c2luZyBFeGNsdXNpb25SdWxlID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OkV4Y2x1c2lvblJ1bGU7CisKKyAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgfHwg
IV9wYWdlKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OkV4Y2x1c2lvblJ1bGU+IGV4Y2x1c2lvblJ1bGVzOworICAgIGlmIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUgKndrUnVsZSBp
biBjb25maWd1cmF0aW9uLmV4Y2x1c2lvblJ1bGVzKSB7CisgICAgICAgICAgICBhdXRvIHR5cGUg
PSB3a1J1bGUuaXNFeGNsdXNpb24gPyBFeGNsdXNpb25SdWxlOjpUeXBlOjpFeGNsdWRlIDogRXhj
bHVzaW9uUnVsZTo6VHlwZTo6SW5jbHVkZTsKKyAgICAgICAgICAgIGlmICh3a1J1bGUuYXR0cmli
dXRlTmFtZSkKKyAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4
Y2x1c2lvblJ1bGU6OkF0dHJpYnV0ZVJ1bGUgeyB3a1J1bGUuYXR0cmlidXRlTmFtZSwgd2tSdWxl
LmF0dHJpYnV0ZVZhbHVlIH0gfSk7CisgICAgICAgICAgICBlbHNlIGlmICh3a1J1bGUuY2xhc3NO
YW1lKQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVz
aW9uUnVsZTo6Q2xhc3NSdWxlIHsgd2tSdWxlLmNsYXNzTmFtZSB9IH0pOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVz
aW9uUnVsZTo6RWxlbWVudFJ1bGUgeyB3a1J1bGUuZWxlbWVudE5hbWUgfSB9KTsKKyAgICAgICAg
fQorICAgIH0KIAotICAgICAgICBDbGFzcyByZXByZXNlbnRhdGlvbkNsYXNzID0gW1tfY29uZmln
dXJhdGlvbiBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldIHByb3ZpZGVyRm9yTUlNRVR5cGU6bWlt
ZVR5cGVdOwotICAgICAgICBBU1NFUlQocmVwcmVzZW50YXRpb25DbGFzcyk7Ci0gICAgICAgIF9j
dXN0b21Db250ZW50VmlldyA9IGFkb3B0TlMoW1tyZXByZXNlbnRhdGlvbkNsYXNzIGFsbG9jXSB3
ZWJfaW5pdFdpdGhGcmFtZTpzZWxmLmJvdW5kcyB3ZWJWaWV3OnNlbGYgbWltZVR5cGU6bWltZVR5
cGVdKTsKLSAgICAgICAgX2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3ID0gYWRvcHROUyhb
W1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzZWxmLmJvdW5kc10pOwotICAgICAgICBbX2N1
c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3IGxheWVyXS5uYW1lID0gQCJDdXN0b21Db250ZW50
Rml4ZWRPdmVybGF5IjsKLSAgICAgICAgW19jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5VmlldyBz
ZXRVc2VySW50ZXJhY3Rpb25FbmFibGVkOk5PXTsKKyAgICBfcGFnZS0+c3RhcnRUZXh0TWFuaXB1
bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3
PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRp
ZmllciBpdGVtSUQsCisgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAgICAgaWYg
KCF3ZWFrU2VsZikKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBbW19jb250ZW50Vmll
dyB1bnNjYWxlZFZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICBbX2NvbnRlbnRW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICBbX3Njcm9sbFZpZXcgYWRkU3Vidmll
dzpfY3VzdG9tQ29udGVudFZpZXcuZ2V0KCldOwotICAgICAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9j
dXN0b21Db250ZW50Rml4ZWRPdmVybGF5Vmlldy5nZXQoKV07CisgICAgICAgIGF1dG8gcmV0YWlu
ZWRTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSBbcmV0YWlu
ZWRTZWxmIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdOworICAgICAgICBpZiAoIWRlbGVnYXRl
KQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2Vi
X3NldE1pbmltdW1TaXplOnNlbGYuYm91bmRzLnNpemVdOwotICAgICAgICBbX2N1c3RvbUNvbnRl
bnRWaWV3IHdlYl9zZXRGaXhlZE92ZXJsYXlWaWV3Ol9jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5
Vmlldy5nZXQoKV07CisgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKKyAgICAgICAgZm9yIChh
dXRvJiB0b2tlbiA6IHRva2VucykgeworICAgICAgICAgICAgYXV0byB3a1Rva2VuID0gYWRvcHRO
UyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICAgICAg
W3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVyLnRv
VUludDY0KCkpXTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29udGVu
dF07CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tlbi5pc0V4Y2x1ZGVkXTsK
KyAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07CisgICAgICAg
IH0KIAotICAgICAgICBfc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6OkNvbG9y
KCk7Ci0gICAgICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OltzZWxmIF9pbml0aWFs
Q29udGVudE9mZnNldEZvclNjcm9sbFZpZXddXTsKLSAgICAgICAgW19zY3JvbGxWaWV3IF9zZXRT
Y3JvbGxFbmFibGVkSW50ZXJuYWw6WUVTXTsKKyAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhb
W19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5n
OjpudW1iZXIoaXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOworICAgICAgICBb
ZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0
aW9uSXRlbTppdGVtLmdldCgpXTsKKyAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7CisgICAgICAgIGNhcHR1cmVkQ29t
cGxldGlvbkJsb2NrKCk7CisgICAgfSk7Cit9CiAKLSAgICAgICAgW3NlbGYgX3NldEF2b2lkc1Vu
c2FmZUFyZWE6Tk9dOwotICAgIH0gZWxzZSBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7Ci0gICAg
ICAgIFtfY3VzdG9tQ29udGVudFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIF9j
dXN0b21Db250ZW50VmlldyA9IG51bGxwdHI7CistICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVs
YXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4p
KEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICB1c2luZyBNYW5pcHVsYXRp
b25SZXN1bHQgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uUmVzdWx0OwogCi0gICAgICAgIFtfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcgcmVt
b3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIF9jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5Vmll
dyA9IG51bGxwdHI7CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IFtfc2Nyb2xsVmlldyBhZGRTdWJ2aWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0gICAgICAgIFtf
c2Nyb2xsVmlldyBhZGRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5zY2FsZWRWaWV3XV07Ci0gICAg
ICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50U2l6ZTpyb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6
ZSgqX3BhZ2UsIFtfY29udGVudFZpZXcgZnJhbWVdLnNpemUpXTsKKyAgICBhdXRvIGl0ZW1JRCA9
IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUludDY0KCkp
OwogCi0gICAgICAgIFtfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwotICAgICAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9jdXN0b21Db250ZW50Rml4ZWRP
dmVybGF5Vmlldy5nZXQoKV07CisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAoX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8g
dG9rZW5JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVy
KS50b1VJbnQ2NCgpKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNv
bnRlbnQgfSk7CiAgICAgfQogCi0gICAgaWYgKHNlbGYuaXNGaXJzdFJlc3BvbmRlcikgewotICAg
ICAgICBVSVZpZXcgKmN1cnJlbnRDb250ZW50VmlldyA9IHNlbGYuX2N1cnJlbnRDb250ZW50Vmll
dzsKLSAgICAgICAgaWYgKGN1cnJlbnRDb250ZW50VmlldyA9PSBfY29udGVudFZpZXcgPyBbX2Nv
bnRlbnRWaWV3IGNhbkJlY29tZUZpcnN0UmVzcG9uZGVyRm9yV2ViVmlld10gOiBjdXJyZW50Q29u
dGVudFZpZXcuY2FuQmVjb21lRmlyc3RSZXNwb25kZXIpCi0gICAgICAgICAgICBbY3VycmVudENv
bnRlbnRWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKLSAgICB9CisgICAgX3BhZ2UtPmNvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJs
b2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKE1hbmlwdWxhdGlvblJlc3Vs
dCByZXN1bHQpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2socmVzdWx0ID09IE1h
bmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vzcyk7CisgICAgfSk7CiB9CiAKLS0gKHZvaWQpX2RpZEZp
bmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lOihjb25zdCBTdHJpbmcmKXN1Z2dlc3RlZEZpbGVuYW1lIGRhdGE6KE5TRGF0YSAqKWRhdGEK
Ky0gKHZvaWQpX3Rha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAg
QVNTRVJUKF9jdXN0b21Db250ZW50Vmlldyk7Ci0gICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJf
c2V0Q29udGVudFByb3ZpZGVyRGF0YTpkYXRhIHN1Z2dlc3RlZEZpbGVuYW1lOnN1Z2dlc3RlZEZp
bGVuYW1lXTsKLQotICAgIC8vIEZJWE1FOiBJdCBtYXkgbWFrZSBtb3JlIHNlbnNlIGZvciBjdXN0
b20gY29udGVudCBwcm92aWRlcnMgdG8gaW52b2tlIHRoaXMgd2hlbiB0aGV5J3JlIHJlYWR5LAot
ICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBhbGwgY3VzdG9tIGNvbnRl
bnQgcHJvdmlkZXJzIHdpbGwgbGF5IG91dCBzeW5jaHJvbm91c2x5LgotICAgIF9wYWdlLT5kaWRM
YXlvdXRGb3JDdXN0b21Db250ZW50UHJvdmlkZXIoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAg
W3NlbGYgX3Rha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbkludGVybmFsOnNlbmRlcl07CisjZWxz
ZQorICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlRha2VGaW5kU3RyaW5nRnJvbVNlbGVj
dGlvbiJfcyk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfaGFuZGxlS2V5VUlFdmVudDooOjpVSUV2
ZW50ICopZXZlbnQKKysgKE5TU3RyaW5nICopX3N0cmluZ0ZvckZpbmQKIHsKLSAgICAvLyBXZSBv
bmx5IHdhbnQgdG8gaGFuZGxlIGtleSBldmVudHMgZnJvbSB0aGUgaGFyZHdhcmUga2V5Ym9hcmQg
d2hlbiB3ZSBhcmUKLSAgICAvLyBmaXJzdCByZXNwb25kZXIgYW5kIGEgY3VzdG9tIGNvbnRlbnQg
dmlldyBpcyBpbnN0YWxsZWQ7IG90aGVyd2lzZSwKLSAgICAvLyBXS0NvbnRlbnRWaWV3IHdpbGwg
YmUgdGhlIGZpcnN0IHJlc3BvbmRlciBhbmQgZXhwZWN0cyB0byBnZXQga2V5IGV2ZW50cyBkaXJl
Y3RseS4KLSAgICBpZiAoW3NlbGYgaXNGaXJzdFJlc3BvbmRlcl0gJiYgZXZlbnQuX2hpZEV2ZW50
KSB7Ci0gICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViX2hhbmRsZUtleUV2ZW50OildKSB7Ci0gICAgICAgICAgICBpZiAoW19jdXN0
b21Db250ZW50VmlldyB3ZWJfaGFuZGxlS2V5RXZlbnQ6ZXZlbnRdKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFtzdXBlciBfaGFuZGxlS2V5VUlFdmVu
dDpldmVudF07CisgICAgcmV0dXJuIFdlYktpdDo6c3RyaW5nRm9yRmluZCgpOwogfQogCi0tICh2
b2lkKV93aWxsSW52b2tlVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjaworKyAodm9pZClfc2V0
U3RyaW5nRm9yRmluZDooTlNTdHJpbmcgKilmaW5kU3RyaW5nCiB7Ci0gICAgX2ludm9raW5nVUlT
Y3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayA9IFlFUzsKKyAgICBXZWJLaXQ6OnVwZGF0ZVN0cmlu
Z0ZvckZpbmQoZmluZFN0cmluZyk7CiB9CiAKLS0gKHZvaWQpX2RpZEludm9rZVVJU2Nyb2xsVmll
d0RlbGVnYXRlQ2FsbGJhY2sKKy0gKF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICopX3JlbW90ZU9i
amVjdFJlZ2lzdHJ5CiB7Ci0gICAgX2ludm9raW5nVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFj
ayA9IE5POwotICAgIGlmIChfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVUlT
Y3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjaykgewotICAgICAgICBfZGlkRGVmZXJVcGRhdGVWaXNp
YmxlQ29udGVudFJlY3RzRm9yVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayA9IE5POwotICAg
ICAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCk7CisjZWxz
ZQorICAgIGlmICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KSB7CisgICAgICAgIF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeSA9IGFkb3B0TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2lu
aXRXaXRoV2ViUGFnZVByb3h5OipfcGFnZV0pOworICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnBy
b2Nlc3NQb29sKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdp
c3RyeTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBfcGFnZS0+aWRlbnRpZmllcigpLCBbX3JlbW90
ZU9iamVjdFJlZ2lzdHJ5IHJlbW90ZU9iamVjdFJlZ2lzdHJ5XSk7CiAgICAgfQorCisgICAgcmV0
dXJuIF9yZW1vdGVPYmplY3RSZWdpc3RyeS5nZXQoKTsKKyNlbmRpZgogfQogCi1zdGF0aWMgQ0dG
bG9hdCBjb250ZW50Wm9vbVNjYWxlKFdLV2ViVmlldyAqd2ViVmlldykKKy0gKFdLQnJvd3NpbmdD
b250ZXh0SGFuZGxlICopX2hhbmRsZQogewotICAgIENHRmxvYXQgc2NhbGUgPSB3ZWJWaWV3Ll9j
dXJyZW50Q29udGVudFZpZXcubGF5ZXIuYWZmaW5lVHJhbnNmb3JtLmE7Ci0gICAgQVNTRVJUKHNj
YWxlID09IFt3ZWJWaWV3LT5fc2Nyb2xsVmlldyB6b29tU2NhbGVdKTsKLSAgICByZXR1cm4gc2Nh
bGU7CisgICAgcmV0dXJuIFtbW1dLQnJvd3NpbmdDb250ZXh0SGFuZGxlIGFsbG9jXSBfaW5pdFdp
dGhQYWdlUHJveHk6Kl9wYWdlXSBhdXRvcmVsZWFzZV07CiB9CiAKLXN0YXRpYyBXZWJDb3JlOjpD
b2xvciBiYXNlU2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcihXS1dlYlZpZXcgKndlYlZpZXcpCist
IChfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2
ZW50cwogewotICAgIGlmICh3ZWJWaWV3LT5fY3VzdG9tQ29udGVudFZpZXcpCi0gICAgICAgIHJl
dHVybiBbd2ViVmlldy0+X2N1c3RvbUNvbnRlbnRWaWV3IGJhY2tncm91bmRDb2xvcl0uQ0dDb2xv
cjsKLQotICAgIGlmICh3ZWJWaWV3LT5fZ2VzdHVyZUNvbnRyb2xsZXIpIHsKLSAgICAgICAgV2Vi
Q29yZTo6Q29sb3IgY29sb3IgPSB3ZWJWaWV3LT5fZ2VzdHVyZUNvbnRyb2xsZXItPmJhY2tncm91
bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCgpOwotICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIH0KLQotICAgIGlmICghd2ViVmlldy0+
X3BhZ2UpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIF9vYnNlcnZlZFJlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRzOworfQogCi0gICAgcmV0dXJuIHdlYlZpZXctPl9wYWdlLT5wYWdlRXh0
ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKTsKKy0gKGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU+
KV9oaXN0b3J5RGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX25hdmlnYXRpb25TdGF0ZS0+aGlzdG9y
eURlbGVnYXRlKCkuYXV0b3JlbGVhc2UoKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OkNvbG9yIHNj
cm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IoV0tXZWJWaWV3ICp3ZWJWaWV3KQorLSAodm9pZClfc2V0
SGlzdG9yeURlbGVnYXRlOihpZCA8V0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlPiloaXN0b3J5RGVs
ZWdhdGUKIHsKLSAgICBpZiAoIXdlYlZpZXcub3BhcXVlKQotICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6Q29sb3I6OnRyYW5zcGFyZW50OworICAgIF9wYWdlLT5zZXRIaXN0b3J5Q2xpZW50KF9uYXZp
Z2F0aW9uU3RhdGUtPmNyZWF0ZUhpc3RvcnlDbGllbnQoKSk7CisgICAgX25hdmlnYXRpb25TdGF0
ZS0+c2V0SGlzdG9yeURlbGVnYXRlKGhpc3RvcnlEZWxlZ2F0ZSk7Cit9CiAKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIFdlYkNvcmU6OkxvY2FsQ3VycmVudFRyYWl0Q29sbGVj
dGlvbiBsb2NhbFRyYWl0Q29sbGVjdGlvbih3ZWJWaWV3LnRyYWl0Q29sbGVjdGlvbik7CistICh2
b2lkKV91cGRhdGVNZWRpYVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyCit7CisjaWYgSEFWRShUT1VD
SF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICBfaW1w
bC0+dXBkYXRlTWVkaWFQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwogI2VuZGlmCit9CiAKLSAg
ICBXZWJDb3JlOjpDb2xvciBjb2xvciA9IGJhc2VTY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yKHdl
YlZpZXcpOwotCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkgJiYgd2ViVmlldy0+X2NvbnRlbnRW
aWV3KQotICAgICAgICBjb2xvciA9IFt3ZWJWaWV3LT5fY29udGVudFZpZXcgYmFja2dyb3VuZENv
bG9yXS5DR0NvbG9yOwotCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICBjb2xvciA9IFVJQ29sb3Iuc3lzdGVtQmFja2dy
b3VuZENvbG9yLkNHQ29sb3I7CistIChCT09MKV9jYW5Ub2dnbGVQaWN0dXJlSW5QaWN0dXJlCit7
CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9pbXBsLT5jYW5Ub2dnbGVQaWN0dXJl
SW5QaWN0dXJlKCk7CiAjZWxzZQotICAgICAgICBjb2xvciA9IFdlYkNvcmU6OkNvbG9yOjp3aGl0
ZTsKKyAgICByZXR1cm4gTk87CiAjZW5kaWYKLSAgICB9Ci0KLSAgICBDR0Zsb2F0IHpvb21TY2Fs
ZSA9IGNvbnRlbnRab29tU2NhbGUod2ViVmlldyk7Ci0gICAgQ0dGbG9hdCBtaW5pbXVtWm9vbVNj
YWxlID0gW3dlYlZpZXctPl9zY3JvbGxWaWV3IG1pbmltdW1ab29tU2NhbGVdOwotICAgIGlmICh6
b29tU2NhbGUgPCBtaW5pbXVtWm9vbVNjYWxlKSB7Ci0gICAgICAgIENHRmxvYXQgc2xvcGUgPSAx
MjsKLSAgICAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gc3RkOjptYXg8Q0dGbG9hdD4oMSAtIHNsb3Bl
ICogKG1pbmltdW1ab29tU2NhbGUgLSB6b29tU2NhbGUpLCAwKTsKLSAgICAgICAgY29sb3IgPSBX
ZWJDb3JlOjpjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJnYigpLCBvcGFjaXR5KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gY29sb3I7CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZVNjcm9sbFZpZXdC
YWNrZ3JvdW5kCistIChCT09MKV9pc1BpY3R1cmVJblBpY3R1cmVBY3RpdmUKIHsKLSAgICBXZWJD
b3JlOjpDb2xvciBjb2xvciA9IHNjcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3Ioc2VsZik7Ci0KLSAg
ICBpZiAoX3Njcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIF9zY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yID0gY29sb3I7Ci0KLSAgICBhdXRv
IHVpQmFja2dyb3VuZENvbG9yID0gYWRvcHROUyhbW1VJQ29sb3IgYWxsb2NdIGluaXRXaXRoQ0dD
b2xvcjpjYWNoZWRDR0NvbG9yKGNvbG9yKV0pOwotICAgIFtfc2Nyb2xsVmlldyBzZXRCYWNrZ3Jv
dW5kQ29sb3I6dWlCYWNrZ3JvdW5kQ29sb3IuZ2V0KCldOworI2lmIEhBVkUoVE9VQ0hfQkFSKSAm
JiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgcmV0dXJuIF9pbXBs
LT5pc1BpY3R1cmVJblBpY3R1cmVBY3RpdmUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2Vu
ZGlmCit9CiAKLSAgICAvLyBVcGRhdGUgdGhlIGluZGljYXRvciBzdHlsZSBiYXNlZCBvbiB0aGUg
bGlnaHRuZXNzL2RhcmtuZXNzIG9mIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgotICAgIGRvdWJsZSBo
dWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzczsKLSAgICBjb2xvci5nZXRIU0woaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MpOwotICAgIGlmIChsaWdodG5lc3MgPD0gLjUgJiYgY29sb3IuaXNWaXNp
YmxlKCkpCi0gICAgICAgIFtfc2Nyb2xsVmlldyBzZXRJbmRpY2F0b3JTdHlsZTpVSVNjcm9sbFZp
ZXdJbmRpY2F0b3JTdHlsZVdoaXRlXTsKLSAgICBlbHNlCi0gICAgICAgIFtfc2Nyb2xsVmlldyBz
ZXRJbmRpY2F0b3JTdHlsZTpVSVNjcm9sbFZpZXdJbmRpY2F0b3JTdHlsZUJsYWNrXTsKKy0gKHZv
aWQpX3RvZ2dsZVBpY3R1cmVJblBpY3R1cmUKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIF9pbXBsLT50b2dnbGVQaWN0
dXJlSW5QaWN0dXJlKCk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfdmlkZW9Db250cm9sc01hbmFn
ZXJEaWRDaGFuZ2UKKy0gKHZvaWQpX2Nsb3NlQWxsTWVkaWFQcmVzZW50YXRpb25zCiB7CiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGlmIChfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIpCi0gICAgICAgIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgdmlkZW9Db250cm9sc01h
bmFnZXJEaWRDaGFuZ2VdOworICAgIGlmIChhdXRvIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgPSBf
cGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpKSB7CisgICAgICAgIHZpZGVvRnVsbHNjcmVl
bk1hbmFnZXItPmZvckVhY2hTZXNzaW9uKFtdIChhdXRvJiBtb2RlbCwgYXV0byYgaW50ZXJmYWNl
KSB7CisgICAgICAgICAgICBtb2RlbC5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIGlmIChhdXRvIGZ1bGxTY3JlZW5NYW5hZ2VyID0gX3BhZ2UtPmZ1bGxT
Y3JlZW5NYW5hZ2VyKCk7IGZ1bGxTY3JlZW5NYW5hZ2VyICYmIGZ1bGxTY3JlZW5NYW5hZ2VyLT5p
c0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgZnVsbFNjcmVlbk1hbmFnZXItPmNsb3NlKCk7CiAjZW5k
aWYKIH0KIAotLSAoQ0dQb2ludClfaW5pdGlhbENvbnRlbnRPZmZzZXRGb3JTY3JvbGxWaWV3Cist
ICh2b2lkKV9zdG9wTWVkaWFDYXB0dXJlCiB7Ci0gICAgYXV0byBjb21iaW5lZFVub2JzY3VyZWRB
bmRTY3JvbGxWaWV3SW5zZXQgPSBbc2VsZiBfY29tcHV0ZWRDb250ZW50SW5zZXRdOwotICAgIHJl
dHVybiBDR1BvaW50TWFrZSgtY29tYmluZWRVbm9ic2N1cmVkQW5kU2Nyb2xsVmlld0luc2V0Lmxl
ZnQsIC1jb21iaW5lZFVub2JzY3VyZWRBbmRTY3JvbGxWaWV3SW5zZXQudG9wKTsKKyAgICBfcGFn
ZS0+c3RvcE1lZGlhQ2FwdHVyZSgpOwogfQogCi0tIChDR1BvaW50KV9jb250ZW50T2Zmc2V0QWRq
dXN0ZWRGb3JPYnNjdXJlZEluc2V0OihDR1BvaW50KXBvaW50CistICh2b2lkKV9zdG9wQWxsTWVk
aWFQbGF5YmFjawogewotICAgIENHUG9pbnQgcmVzdWx0ID0gcG9pbnQ7Ci0gICAgVUlFZGdlSW5z
ZXRzIGNvbnRlbnRJbnNldCA9IFtzZWxmIF9jb21wdXRlZE9ic2N1cmVkSW5zZXRdOwotCi0gICAg
cmVzdWx0LnggLT0gY29udGVudEluc2V0LmxlZnQ7Ci0gICAgcmVzdWx0LnkgLT0gY29udGVudElu
c2V0LnRvcDsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgX3BhZ2UtPnN0b3BBbGxNZWRpYVBs
YXliYWNrKCk7CiB9CiAKLS0gKFVJUmVjdEVkZ2UpX2VmZmVjdGl2ZU9ic2N1cmVkSW5zZXRFZGdl
c0FmZmVjdGVkQnlTYWZlQXJlYQorLSAodm9pZClfc3VzcGVuZEFsbE1lZGlhUGxheWJhY2sKIHsK
LSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkKLSAgICAgICAgcmV0dXJu
IFVJUmVjdEVkZ2VBbGw7Ci0gICAgcmV0dXJuIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5
U2FmZUFyZWE7CisgICAgX3BhZ2UtPnN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCk7CiB9CiAKLS0g
KFVJRWRnZUluc2V0cylfY29tcHV0ZWRPYnNjdXJlZEluc2V0CistICh2b2lkKV9yZXN1bWVBbGxN
ZWRpYVBsYXliYWNrCiB7Ci0gICAgaWYgKCFsaW5rZWRPbk9yQWZ0ZXIoV2ViS2l0OjpTREtWZXJz
aW9uOjpGaXJzdFdoZXJlU2Nyb2xsVmlld0NvbnRlbnRJbnNldHNBcmVOb3RPYnNjdXJpbmdJbnNl
dHMpKSB7Ci0gICAgICAgIC8vIEZvciBiaW5hcnkgY29tcGFiaWxpdHkgd2l0aCB0aGlyZCBwYXJ0
eSBhcHBzLCB0cmVhdCBzY3JvbGwgdmlldyBjb250ZW50IGluc2V0cyBhcyBvYnNjdXJpbmcgaW5z
ZXRzIHdoZW4gdGhlIGFwcCBpcyBjb21waWxlZAotICAgICAgICAvLyBhZ2FpbnN0IGEgV2ViS2l0
IHZlcnNpb24gd2l0aG91dCB0aGUgZml4IGluIHIyMjk2NDEuCi0gICAgICAgIHJldHVybiBbc2Vs
ZiBfY29tcHV0ZWRDb250ZW50SW5zZXRdOwotICAgIH0KLQotICAgIGlmIChfaGF2ZVNldE9ic2N1
cmVkSW5zZXRzKQotICAgICAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRzOwotCi0jaWYgUExBVEZP
Uk0oSU9TKQotICAgIGlmIChzZWxmLl9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRz
KQotICAgICAgICByZXR1cm4gVUlFZGdlSW5zZXRzQWRkKFVJRWRnZUluc2V0c1plcm8sIHNlbGYu
X3Njcm9sbFZpZXdTeXN0ZW1Db250ZW50SW5zZXQsIHNlbGYuX2VmZmVjdGl2ZU9ic2N1cmVkSW5z
ZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBVSUVkZ2VJ
bnNldHNaZXJvOworICAgIF9wYWdlLT5yZXN1bWVBbGxNZWRpYVBsYXliYWNrKCk7CiB9CiAKLS0g
KFVJRWRnZUluc2V0cylfY29tcHV0ZWRDb250ZW50SW5zZXQKKy0gKE5TVVJMICopX3VucmVhY2hh
YmxlVVJMCiB7Ci0gICAgaWYgKF9oYXZlU2V0T2JzY3VyZWRJbnNldHMpCi0gICAgICAgIHJldHVy
biBfb2JzY3VyZWRJbnNldHM7Ci0KLSAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gW19zY3JvbGxW
aWV3IGNvbnRlbnRJbnNldF07Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKHNlbGYuX3Nh
ZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHMpCi0gICAgICAgIGluc2V0cyA9IFVJRWRn
ZUluc2V0c0FkZChpbnNldHMsIHNlbGYuX3Njcm9sbFZpZXdTeXN0ZW1Db250ZW50SW5zZXQsIHNl
bGYuX2VmZmVjdGl2ZU9ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBpbnNldHM7CisgICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhX
VEZTdHJpbmc6X3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51bnJlYWNoYWJsZVVSTCgpXTsKIH0KIAot
LSAoVUlFZGdlSW5zZXRzKV9jb21wdXRlZFVub2JzY3VyZWRTYWZlQXJlYUluc2V0CistIChOU1VS
TCAqKV9tYWluRnJhbWVVUkwKIHsKLSAgICBpZiAoX2hhdmVTZXRVbm9ic2N1cmVkU2FmZUFyZWFJ
bnNldHMpCi0gICAgICAgIHJldHVybiBfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOwotCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGlmICghc2VsZi5fc2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJl
ZEluc2V0cykKLSAgICAgICAgcmV0dXJuIHNlbGYuc2FmZUFyZWFJbnNldHM7Ci0jZW5kaWYKLQot
ICAgIHJldHVybiBVSUVkZ2VJbnNldHNaZXJvOworICAgIGlmIChhdXRvKiBmcmFtZSA9IF9wYWdl
LT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT51cmwoKTsKKyAgICByZXR1cm4g
bmlsOwogfQogCi0tICh2b2lkKV9wcm9jZXNzV2lsbFN3YXBPckRpZEV4aXQKKy0gKHZvaWQpX2xv
YWRBbHRlcm5hdGVIVE1MU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBiYXNlVVJMOihOU1VSTCAq
KWJhc2VVUkwgZm9yVW5yZWFjaGFibGVVUkw6KE5TVVJMICopdW5yZWFjaGFibGVVUkwKIHsKLSAg
ICAvLyBGSVhNRTogV2hpY2ggb25lcyBvZiB0aGVzZSBuZWVkIHRvIGJlIGRvbmUgaW4gdGhlIHBy
b2Nlc3Mgc3dhcCBjYXNlIGFuZCB3aGljaCBvbmVzIGluIHRoZSBleGl0IGNhc2U/Ci0gICAgW3Nl
bGYgX2hpZGVQYXNzd29yZFZpZXddOwotICAgIFtzZWxmIF9jYW5jZWxBbmltYXRlZFJlc2l6ZV07
Ci0KLSAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICBfZ2VzdHVyZUNvbnRyb2xs
ZXItPmRpc2Nvbm5lY3RGcm9tUHJvY2VzcygpOwotCi0gICAgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRo
ID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBfaW5pdGlhbFNj
YWxlRmFjdG9yID0gMTsKLSAgICBfaGFzQ29tbWl0dGVkTG9hZEZvck1haW5GcmFtZSA9IE5POwot
ICAgIF9uZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lID0gTk87
Ci0gICAgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nOwotICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNp
emUgPSBOTzsKLSAgICBfd2FpdGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRSZXNpemUgPSBOTzsK
LSAgICBfYW5pbWF0ZWRSZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0aCA9IDA7Ci0gICAgW19jb250
ZW50VmlldyBzZXRIaWRkZW46Tk9dOwotICAgIF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmUgPSBXVEY6
Om51bGxvcHQ7Ci0gICAgX3Vub2JzY3VyZWRDZW50ZXJUb1Jlc3RvcmUgPSBXVEY6Om51bGxvcHQ7
Ci0gICAgX3Njcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcigpOwotICAg
IF9pbnZva2luZ1VJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2sgPSBOTzsKLSAgICBfZGlkRGVm
ZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFj
ayA9IE5POwotICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFz
b24gPSBOTzsKLSAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVW5zdGFi
bGVTY3JvbGxWaWV3ID0gTk87Ci0gICAgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNl
dHNGb3JLZXlib2FyZCA9IE5POwotICAgIF9sYXN0U2VudFZpZXdMYXlvdXRTaXplID0gV1RGOjpu
dWxsb3B0OwotICAgIF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IFdURjo6bnVsbG9w
dDsKLSAgICBfbGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiA9IFdURjo6bnVsbG9wdDsKLQotICAg
IF9mcm96ZW5WaXNpYmxlQ29udGVudFJlY3QgPSBXVEY6Om51bGxvcHQ7Ci0gICAgX2Zyb3plblVu
b2JzY3VyZWRDb250ZW50UmVjdCA9IFdURjo6bnVsbG9wdDsKLQotICAgIF9maXJzdFBhaW50QWZ0
ZXJDb21taXRMb2FkVHJhbnNhY3Rpb25JRCA9IHsgfTsKLSAgICBfZmlyc3RUcmFuc2FjdGlvbklE
QWZ0ZXJQYWdlUmVzdG9yZSA9IFdURjo6bnVsbG9wdDsKLQotICAgIF9sYXN0VHJhbnNhY3Rpb25J
RCA9IHsgfTsKLQotICAgIF9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVwZGF0ZSA9IE5POwotICAg
IF9jb21taXREaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24gPSBOTzsKLQotICAgIF9hdm9pZHNVbnNh
ZmVBcmVhID0gWUVTOworICAgIE5TRGF0YSAqZGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIF9wYWdlLT5sb2FkQWx0ZXJuYXRlSFRNTCh7
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwg
IlVURi04Il9zLCBiYXNlVVJMLCB1bnJlYWNoYWJsZVVSTCk7CiB9CiAKLS0gKHZvaWQpX3Byb2Nl
c3NXaWxsU3dhcAorLSAoV0tOYXZpZ2F0aW9uICopX2xvYWREYXRhOihOU0RhdGEgKilkYXRhIE1J
TUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIGNoYXJhY3RlckVuY29kaW5nTmFtZTooTlNTdHJp
bmcgKiljaGFyYWN0ZXJFbmNvZGluZ05hbWUgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJE
YXRhOihpZCl1c2VyRGF0YQogewotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tX
ZWJWaWV3IF9wcm9jZXNzV2lsbFN3YXBdIiwgc2VsZik7Ci0gICAgW3NlbGYgX3Byb2Nlc3NXaWxs
U3dhcE9yRGlkRXhpdF07CisgICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPmxvYWREYXRhKHsgc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCBNSU1F
VHlwZSwgY2hhcmFjdGVyRW5jb2RpbmdOYW1lLCBiYXNlVVJMLmFic29sdXRlU3RyaW5nLCBXZWJL
aXQ6Ok9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKS5wdHIoKSkpOwogfQogCi0tICh2
b2lkKV9wcm9jZXNzRGlkRXhpdAorLSAoV0tOYXZpZ2F0aW9uICopX2xvYWRSZXF1ZXN0OihOU1VS
TFJlcXVlc3QgKilyZXF1ZXN0IHNob3VsZE9wZW5FeHRlcm5hbFVSTHM6KEJPT0wpc2hvdWxkT3Bl
bkV4dGVybmFsVVJMcwogewotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJW
aWV3IF9wcm9jZXNzRGlkRXhpdF0iLCBzZWxmKTsKKyAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+
bG9hZFJlcXVlc3QocmVxdWVzdCwgc2hvdWxkT3BlbkV4dGVybmFsVVJMcyA/IFdlYkNvcmU6OlNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFsbG93IDogV2ViQ29yZTo6U2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpKTsKK30KIAotICAgIFtzZWxm
IF9wcm9jZXNzV2lsbFN3YXBPckRpZEV4aXRdOworLSAoTlNBcnJheSAqKV9jZXJ0aWZpY2F0ZUNo
YWluCit7CisgICAgaWYgKFdlYktpdDo6V2ViRnJhbWVQcm94eSogbWFpbkZyYW1lID0gX3BhZ2Ut
Pm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5jZXJ0aWZpY2F0ZUluZm8o
KSA/IChfX2JyaWRnZSBOU0FycmF5ICopbWFpbkZyYW1lLT5jZXJ0aWZpY2F0ZUluZm8oKS0+Y2Vy
dGlmaWNhdGVJbmZvKCkuY2VydGlmaWNhdGVDaGFpbigpIDogbmlsOwogCi0gICAgW19jb250ZW50
VmlldyBzZXRGcmFtZTpzZWxmLmJvdW5kc107Ci0gICAgW19zY3JvbGxWaWV3IHNldEJhY2tncm91
bmRDb2xvcjpbX2NvbnRlbnRWaWV3IGJhY2tncm91bmRDb2xvcl1dOwotICAgIFtfc2Nyb2xsVmll
dyBzZXRDb250ZW50T2Zmc2V0OltzZWxmIF9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9sbFZp
ZXddXTsKLSAgICBbX3Njcm9sbFZpZXcgc2V0Wm9vbVNjYWxlOjFdOworICAgIHJldHVybiBuaWw7
CiB9CiAKLS0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzcworLSAoTlNVUkwgKilfY29tbWl0dGVk
VVJMCiB7Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgLVtXS1dlYlZpZXcgX2RpZFJl
bGF1bmNoUHJvY2Vzc10iLCBzZWxmKTsKLSAgICBfaGFzU2NoZWR1bGVkVmlzaWJsZVJlY3RVcGRh
dGUgPSBOTzsKLSAgICBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlU2NoZWR1bGVkRnJvbVNjcm9s
bFZpZXdJblN0YWJsZVN0YXRlID0gWUVTOwotICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCi0g
ICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+Y29ubmVjdFRvUHJvY2VzcygpOworICAgIHJldHVy
biBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJs
KCldOwogfQogCi0tICh2b2lkKV9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lCistIChOU1N0cmlu
ZyAqKV9NSU1FVHlwZQogewotICAgIF9maXJzdFBhaW50QWZ0ZXJDb21taXRMb2FkVHJhbnNhY3Rp
b25JRCA9IGRvd25jYXN0PFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eT4o
Kl9wYWdlLT5kcmF3aW5nQXJlYSgpKS5uZXh0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpOwotCi0g
ICAgX2hhc0NvbW1pdHRlZExvYWRGb3JNYWluRnJhbWUgPSBZRVM7Ci0gICAgX25lZWRzUmVzZXRW
aWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUgPSBZRVM7CisgICAgaWYgKF9wYWdl
LT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIF9wYWdlLT5tYWluRnJhbWUoKS0+bWltZVR5
cGUoKTsKIAotICAgIFtfc2Nyb2xsVmlldyBfc3RvcFNjcm9sbGluZ0FuZFpvb21pbmdBbmltYXRp
b25zXTsKKyAgICByZXR1cm4gbmlsOwogfQogCi1zdGF0aWMgQ0dQb2ludCBjb250ZW50T2Zmc2V0
Qm91bmRlZEluVmFsaWRSYW5nZShVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcsIENHUG9pbnQgY29u
dGVudE9mZnNldCkKKy0gKE5TU3RyaW5nICopX3VzZXJBZ2VudAogewotI2lmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMAotICAgIFVJRWRnZUluc2V0cyBjb250ZW50
SW5zZXRzID0gc2Nyb2xsVmlldy5hZGp1c3RlZENvbnRlbnRJbnNldDsKLSNlbHNlCi0gICAgVUlF
ZGdlSW5zZXRzIGNvbnRlbnRJbnNldHMgPSBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldDsKLSNlbmRp
ZgotCi0gICAgQ0dTaXplIGNvbnRlbnRTaXplID0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZTsKLSAg
ICBDR1NpemUgc2Nyb2xsVmlld1NpemUgPSBzY3JvbGxWaWV3LmJvdW5kcy5zaXplOwotCi0gICAg
Q0dQb2ludCBtaW5pbXVtQ29udGVudE9mZnNldCA9IENHUG9pbnRNYWtlKC1jb250ZW50SW5zZXRz
LmxlZnQsIC1jb250ZW50SW5zZXRzLnRvcCk7Ci0gICAgQ0dQb2ludCBtYXhpbXVtQ29udGVudE9m
ZnNldCA9IENHUG9pbnRNYWtlKHN0ZDo6bWF4KG1pbmltdW1Db250ZW50T2Zmc2V0LngsIGNvbnRl
bnRTaXplLndpZHRoICsgY29udGVudEluc2V0cy5yaWdodCAtIHNjcm9sbFZpZXdTaXplLndpZHRo
KSwgc3RkOjptYXgobWluaW11bUNvbnRlbnRPZmZzZXQueSwgY29udGVudFNpemUuaGVpZ2h0ICsg
Y29udGVudEluc2V0cy5ib3R0b20gLSBzY3JvbGxWaWV3U2l6ZS5oZWlnaHQpKTsKLQotICAgIHJl
dHVybiBDR1BvaW50TWFrZShzdGQ6Om1heChzdGQ6Om1pbihjb250ZW50T2Zmc2V0LngsIG1heGlt
dW1Db250ZW50T2Zmc2V0LngpLCBtaW5pbXVtQ29udGVudE9mZnNldC54KSwgc3RkOjptYXgoc3Rk
OjptaW4oY29udGVudE9mZnNldC55LCBtYXhpbXVtQ29udGVudE9mZnNldC55KSwgbWluaW11bUNv
bnRlbnRPZmZzZXQueSkpOworICAgIHJldHVybiBfcGFnZS0+dXNlckFnZW50KCk7CiB9CiAKLXN0
YXRpYyB2b2lkIGNoYW5nZUNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKFVJU2Nyb2xs
VmlldyAqc2Nyb2xsVmlldywgV2ViQ29yZTo6RmxvYXRQb2ludCBjb250ZW50T2Zmc2V0KQorLSAo
TlNTdHJpbmcgKilfYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50CiB7Ci0gICAgc2Nyb2xsVmll
dy5jb250ZW50T2Zmc2V0ID0gY29udGVudE9mZnNldEJvdW5kZWRJblZhbGlkUmFuZ2Uoc2Nyb2xs
VmlldywgY29udGVudE9mZnNldCk7CisgICAgcmV0dXJuIF9wYWdlLT5hcHBsaWNhdGlvbk5hbWVG
b3JVc2VyQWdlbnQoKTsKIH0KIAotLSAoV2ViQ29yZTo6RmxvYXRSZWN0KXZpc2libGVSZWN0SW5W
aWV3Q29vcmRpbmF0ZXMKKy0gKHZvaWQpX3NldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDoo
TlNTdHJpbmcgKilhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQKIHsKLSAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgYm91bmRzID0gc2VsZi5ib3VuZHM7Ci0gICAgYm91bmRzLm1vdmVCeShbX3Njcm9s
bFZpZXcgY29udGVudE9mZnNldF0pOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb250ZW50Vmll
d0JvdW5kcyA9IFtfY29udGVudFZpZXcgYm91bmRzXTsKLSAgICBib3VuZHMuaW50ZXJzZWN0KGNv
bnRlbnRWaWV3Qm91bmRzKTsKLSAgICByZXR1cm4gYm91bmRzOworICAgIF9wYWdlLT5zZXRBcHBs
aWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKKyAg
ICBfcGFnZS0+c2V0QXBwbGljYXRpb25OYW1lRm9yRGVza3RvcFVzZXJBZ2VudChhcHBsaWNhdGlv
bk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCi0vLyBXZWJDb3JlIHN0b3JlcyB0aGUgcGFnZSBzY2Fs
ZSBmYWN0b3IgYXMgZmxvYXQgaW5zdGVhZCBvZiBkb3VibGUuIFdoZW4gd2UgZ2V0IGEgc2NhbGUg
ZnJvbSBXZWJDb3JlLAotLy8gd2UgbmVlZCB0byBpZ25vcmUgZGlmZmVyZW5jZXMgdGhhdCBhcmUg
d2l0aGluIGEgc21hbGwgcm91bmRpbmcgZXJyb3Igb24gZmxvYXRzLgotc3RhdGljIGlubGluZSBi
b29sIGFyZUVzc2VudGlhbGx5RXF1YWxBc0Zsb2F0KGZsb2F0IGEsIGZsb2F0IGIpCistIChOU1N0
cmluZyAqKV9jdXN0b21Vc2VyQWdlbnQKIHsKLSAgICByZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxs
eUVxdWFsKGEsIGIpOworICAgIHJldHVybiBzZWxmLmN1c3RvbVVzZXJBZ2VudDsKIH0KIAotLSAo
dm9pZClfZGlkQ29tbWl0TGF5ZXJUcmVlRHVyaW5nQW5pbWF0ZWRSZXNpemU6KGNvbnN0IFdlYktp
dDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRyYW5zYWN0aW9uCistICh2
b2lkKV9zZXRDdXN0b21Vc2VyQWdlbnQ6KE5TU3RyaW5nICopY3VzdG9tVXNlckFnZW50CiB7Ci0g
ICAgYXV0byB1cGRhdGVJRCA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLmR5bmFtaWNWaWV3cG9ydFNp
emVVcGRhdGVJRCgpOwotICAgIGlmICh1cGRhdGVJRCAmJiAqdXBkYXRlSUQgPT0gX2N1cnJlbnRE
eW5hbWljVmlld3BvcnRTaXplVXBkYXRlSUQpIHsKLSAgICAgICAgZG91YmxlIHBhZ2VTY2FsZSA9
IGxheWVyVHJlZVRyYW5zYWN0aW9uLnBhZ2VTY2FsZUZhY3RvcigpOwotICAgICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnNjcm9sbFBv
c2l0aW9uKCk7Ci0KLSAgICAgICAgQ0dGbG9hdCBhbmltYXRpbmdTY2FsZVRhcmdldCA9IFtbX3Jl
c2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJdIHRyYW5zZm9ybV0ubTExOwotICAgICAgICBkb3VibGUg
Y3VycmVudFRhcmdldFNjYWxlID0gYW5pbWF0aW5nU2NhbGVUYXJnZXQgKiBbW19jb250ZW50Vmll
dyBsYXllcl0gdHJhbnNmb3JtXS5tMTE7Ci0gICAgICAgIGRvdWJsZSBzY2FsZSA9IHBhZ2VTY2Fs
ZSAvIGN1cnJlbnRUYXJnZXRTY2FsZTsKLSAgICAgICAgX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9y
bUFkanVzdG1lbnRzID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShzY2FsZSwgc2NhbGUsIDEpOwot
Ci0gICAgICAgIENHUG9pbnQgbmV3Q29udGVudE9mZnNldCA9IFtzZWxmIF9jb250ZW50T2Zmc2V0
QWRqdXN0ZWRGb3JPYnNjdXJlZEluc2V0OkNHUG9pbnRNYWtlKHNjcm9sbFBvc2l0aW9uLngoKSAq
IHBhZ2VTY2FsZSwgc2Nyb2xsUG9zaXRpb24ueSgpICogcGFnZVNjYWxlKV07Ci0gICAgICAgIENH
UG9pbnQgY3VycmVudENvbnRlbnRPZmZzZXQgPSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07
CisgICAgc2VsZi5jdXN0b21Vc2VyQWdlbnQgPSBjdXN0b21Vc2VyQWdlbnQ7Cit9CiAKLSAgICAg
ICAgX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRzLm00MSA9IChjdXJyZW50Q29u
dGVudE9mZnNldC54IC0gbmV3Q29udGVudE9mZnNldC54KSAvIGFuaW1hdGluZ1NjYWxlVGFyZ2V0
OwotICAgICAgICBfcmVzaXplQW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMubTQyID0gKGN1
cnJlbnRDb250ZW50T2Zmc2V0LnkgLSBuZXdDb250ZW50T2Zmc2V0LnkpIC8gYW5pbWF0aW5nU2Nh
bGVUYXJnZXQ7Ci0KLSAgICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3IGxheWVyXS5zdWJsYXll
clRyYW5zZm9ybSA9IF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50czsKLQotICAg
ICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHBhc3NlZCBlbmRBbmltYXRlZFJlc2l6ZSwgaW1tZWRp
YXRlbHkgY29tcGxldGUKLSAgICAgICAgLy8gdGhlIHJlc2l6ZSB3aGVuIHdlIGhhdmUgYW4gdXAt
dG8tZGF0ZSBsYXllciB0cmVlLiBPdGhlcndpc2UsCi0gICAgICAgIC8vIHdlIHdpbGwgZGVmZXIg
Y29tcGxldGlvbiB1bnRpbCBlbmRBbmltYXRlZFJlc2l6ZS4KLSAgICAgICAgX3dhaXRpbmdGb3JD
b21taXRBZnRlckFuaW1hdGVkUmVzaXplID0gTk87Ci0gICAgICAgIGlmICghX3dhaXRpbmdGb3JF
bmRBbmltYXRlZFJlc2l6ZSkKLSAgICAgICAgICAgIFtzZWxmIF9kaWRDb21wbGV0ZUFuaW1hdGVk
UmVzaXplXTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgYSBjb21taXQg
YXJyaXZlcyBkdXJpbmcgdGhlIGxpdmUgcGFydCBvZiBhIHJlc2l6ZSBidXQgYmVmb3JlIHRoZQot
ICAgIC8vIGxheWVyIHRyZWUgdGFrZXMgdGhlIGN1cnJlbnQgcmVzaXplIGludG8gYWNjb3VudCwg
aXQgY291bGQgY2hhbmdlIHRoZQotICAgIC8vIFdLQ29udGVudFZpZXcncyBzaXplLiBVcGRhdGUg
dGhlIHJlc2l6ZUFuaW1hdGlvblZpZXcncyBzY2FsZSB0byBlbnN1cmUKLSAgICAvLyB3ZSBjb250
aW51ZSB0byBmaWxsIHRoZSB3aWR0aCBvZiB0aGUgcmVzaXplIHRhcmdldC4KLQotICAgIGlmIChf
d2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplKQotICAgICAgICByZXR1cm47CistICh2b2lkKV9z
ZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkOihCT09MKXVzZXJDb250ZW50RXh0ZW5zaW9u
c0VuYWJsZWQKK3sKKyAgICAvLyBUaGlzIGlzIGtlcHQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5
IHdpdGggaU9TIDkuCit9CiAKLSAgICBhdXRvIG5ld1ZpZXdMYXlvdXRTaXplID0gW3NlbGYgYWN0
aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdOwotICAgIENHRmxvYXQgcmVzaXplQW5pbWF0
aW9uVmlld1NjYWxlID0gX2FuaW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50V2lkdGggLyBuZXdW
aWV3TGF5b3V0U2l6ZS53aWR0aCgpOwotICAgIFtbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJd
IHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUocmVzaXplQW5pbWF0
aW9uVmlld1NjYWxlLCByZXNpemVBbmltYXRpb25WaWV3U2NhbGUsIDEpXTsKKy0gKEJPT0wpX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQKK3sKKyAgICAvLyBUaGlzIGlzIGtlcHQgZm9yIGJp
bmFyeSBjb21wYXRpYmlsaXR5IHdpdGggaU9TIDkuCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0g
KHZvaWQpX2RpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb24KKy0gKHBpZF90KV93ZWJQcm9jZXNzSWRl
bnRpZmllcgogewotICAgIGlmIChfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9y
VW5zdGFibGVTY3JvbGxWaWV3KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVw
IChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfZGlkQ29tbWl0TGF5ZXJUcmVlOl0gLSBy
ZWNlaXZlZCBhIGNvbW1pdCAoJWxsdSkgd2hpbGUgZGVmZXJyaW5nIHZpc2libGUgY29udGVudCBy
ZWN0IHVwZGF0ZXMgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICVkLCBfbmVlZHNSZXNldFZp
ZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZSAlZCAod2FudHMgY29tbWl0ICVsbHUp
LCBzaXplQ2hhbmdlZFNpbmNlTGFzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSAlZCwgW19zY3Jv
bGxWaWV3IGlzWm9vbUJvdW5jaW5nXSAlZCwgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJ
bnNldHNGb3JLZXlib2FyZCAlZCkiLAotICAgICAgICBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigp
LnRvVUludDY0KCksIGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKS50b1VJbnQ2
NCgpLCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSwgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRl
ckNvbW1pdExvYWRGb3JNYWluRnJhbWUsIF9maXJzdFBhaW50QWZ0ZXJDb21taXRMb2FkVHJhbnNh
Y3Rpb25JRC50b1VJbnQ2NCgpLCBbX2NvbnRlbnRWaWV3IHNpemVDaGFuZ2VkU2luY2VMYXN0Vmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlXSwgW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSwgX2N1
cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNldHNGb3JLZXlib2FyZCk7Ci0gICAgfQorICAg
IGlmICghW3NlbGYgX2lzVmFsaWRdKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChfdGlt
ZU9mRmlyc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVXaXRoUGVuZGluZ0NvbW1pdCkgewotICAg
ICAgICBhdXRvIHRpbWVTaW5jZUZpcnN0UmVxdWVzdFdpdGhQZW5kaW5nQ29tbWl0ID0gTW9ub3Rv
bmljVGltZTo6bm93KCkgLSAqX3RpbWVPZkZpcnN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0
aFBlbmRpbmdDb21taXQ7Ci0gICAgICAgIGlmICh0aW1lU2luY2VGaXJzdFJlcXVlc3RXaXRoUGVu
ZGluZ0NvbW1pdCA+IGRlbGF5QmVmb3JlTm9Db21taXRzTG9nZ2luZykKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBf
ZGlkQ29tbWl0TGF5ZXJUcmVlOl0gLSBmaW5hbGx5IHJlY2VpdmVkIGNvbW1pdCAlLjJmcyBhZnRl
ciB2aXNpYmxlIGNvbnRlbnQgcmVjdCB1cGRhdGUgcmVxdWVzdDsgdHJhbnNhY3Rpb25JRCAlbGx1
Iiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCB0aW1lU2luY2VGaXJzdFJl
cXVlc3RXaXRoUGVuZGluZ0NvbW1pdC52YWx1ZSgpLCBsYXllclRyZWVUcmFuc2FjdGlvbi50cmFu
c2FjdGlvbklEKCkudG9VSW50NjQoKSk7Ci0gICAgICAgIF90aW1lT2ZGaXJzdFZpc2libGVDb250
ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29tbWl0ID0gV1RGOjpudWxsb3B0OwotICAgIH0KKyAg
ICByZXR1cm4gX3BhZ2UtPnByb2Nlc3NJZGVudGlmaWVyKCk7Cit9CiAKLSAgICBfbGFzdFRyYW5z
YWN0aW9uSUQgPSBsYXllclRyZWVUcmFuc2FjdGlvbi50cmFuc2FjdGlvbklEKCk7CistIChwaWRf
dClfcHJvdmlzaW9uYWxXZWJQcm9jZXNzSWRlbnRpZmllcgoreworICAgIGlmICghW3NlbGYgX2lz
VmFsaWRdKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJk
Q29udGVudFZpZXddKQotICAgICAgICByZXR1cm47CisgICAgYXV0byogcHJvdmlzaW9uYWxQYWdl
ID0gX3BhZ2UtPnByb3Zpc2lvbmFsUGFnZVByb3h5KCk7CisgICAgaWYgKCFwcm92aXNpb25hbFBh
Z2UpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0
cywgc3RyZWFtIDw8ICItW1dLV2ViVmlldyAiIDw8IF9wYWdlLT5pZGVudGlmaWVyKCkgPDwgIiBf
ZGlkQ29tbWl0TGF5ZXJUcmVlOl0gdHJhbnNhY3Rpb25JRCAiIDw8IGxheWVyVHJlZVRyYW5zYWN0
aW9uLnRyYW5zYWN0aW9uSUQoKSA8PCAiIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICIgPDwg
KGludClfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSk7CisgICAgcmV0dXJuIHByb3Zpc2lvbmFs
UGFnZS0+cHJvY2VzcygpLnByb2Nlc3NJZGVudGlmaWVyKCk7Cit9CiAKLSAgICBib29sIG5lZWRV
cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzID0gX3BhZ2UtPnVwZGF0ZUxheW91dFZpZXdwb3J0UGFy
YW1ldGVycyhsYXllclRyZWVUcmFuc2FjdGlvbik7CistIChCT09MKV93ZWJQcm9jZXNzSXNSZXNw
b25zaXZlCit7CisgICAgcmV0dXJuIF9wYWdlLT5wcm9jZXNzKCkuaXNSZXNwb25zaXZlKCk7Cit9
CiAKLSAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWlj
Vmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykgewotICAgICAgICBbc2VsZiBfZGlkQ29t
bWl0TGF5ZXJUcmVlRHVyaW5nQW5pbWF0ZWRSZXNpemU6bGF5ZXJUcmVlVHJhbnNhY3Rpb25dOwor
LSAodm9pZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzCit7CisgICAgaWYgKCFbc2VsZiBfaXNWYWxp
ZF0pCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoX3Jlc2l6ZUFuaW1hdGlvblZp
ZXcpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJWaWV3IF9kaWRD
b21taXRMYXllclRyZWU6XSAtIGR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgaXMgTm90UmVzaXpp
bmcsIGJ1dCBzdGlsbCBoYXZlIGEgbGl2ZSByZXNpemVBbmltYXRpb25WaWV3ICh1bnBhaXJlZCBi
ZWdpbi9lbmRBbmltYXRlZFJlc2l6ZT8pIiwgc2VsZik7Ci0KLSAgICBDR1NpemUgbmV3Q29udGVu
dFNpemUgPSByb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6ZSgqX3BhZ2UsIFtfY29udGVudFZpZXcg
ZnJhbWVdLnNpemUpOwotICAgIFtfc2Nyb2xsVmlldyBfc2V0Q29udGVudFNpemVQcmVzZXJ2aW5n
Q29udGVudE9mZnNldER1cmluZ1J1YmJlcmJhbmQ6bmV3Q29udGVudFNpemVdOwotCi0gICAgW19z
Y3JvbGxWaWV3IHNldE1pbmltdW1ab29tU2NhbGU6bGF5ZXJUcmVlVHJhbnNhY3Rpb24ubWluaW11
bVNjYWxlRmFjdG9yKCldOwotICAgIFtfc2Nyb2xsVmlldyBzZXRNYXhpbXVtWm9vbVNjYWxlOmxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1heGltdW1TY2FsZUZhY3RvcigpXTsKLSAgICBbX3Njcm9sbFZp
ZXcgX3NldFpvb21FbmFibGVkSW50ZXJuYWw6bGF5ZXJUcmVlVHJhbnNhY3Rpb24uYWxsb3dzVXNl
clNjYWxpbmcoKV07Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBib29sIGhhc0Rv
Y2tlZElucHV0VmlldyA9ICFDR1JlY3RJc0VtcHR5KF9pbnB1dFZpZXdCb3VuZHMpOwotICAgIGJv
b2wgaXNab29tZWQgPSBsYXllclRyZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0b3IoKSA+IGxh
eWVyVHJlZVRyYW5zYWN0aW9uLmluaXRpYWxTY2FsZUZhY3RvcigpOwotCi0gICAgYm9vbCBzY3Jv
bGxpbmdOZWVkZWRUb1JldmVhbFVJID0gZmFsc2U7Ci0gICAgaWYgKF9tYXhpbXVtVW5vYnNjdXJl
ZFNpemVPdmVycmlkZSkgewotICAgICAgICBhdXRvIHVub2JzY3VyZWRDb250ZW50UmVjdCA9IF9w
YWdlLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKTsKLSAgICAgICAgYXV0byBtYXhVbm9ic2N1cmVk
U2l6ZSA9IF9wYWdlLT5tYXhpbXVtVW5vYnNjdXJlZFNpemUoKTsKLSAgICAgICAgc2Nyb2xsaW5n
TmVlZGVkVG9SZXZlYWxVSSA9IG1heFVub2JzY3VyZWRTaXplLndpZHRoKCkgPT0gdW5vYnNjdXJl
ZENvbnRlbnRSZWN0LndpZHRoKCkgJiYgbWF4VW5vYnNjdXJlZFNpemUuaGVpZ2h0KCkgPT0gdW5v
YnNjdXJlZENvbnRlbnRSZWN0LmhlaWdodCgpOwotICAgIH0KLQotICAgIGJvb2wgc2Nyb2xsaW5n
RW5hYmxlZCA9IF9wYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCktPmhhc1Njcm9sbGFi
bGVNYWluRnJhbWUoKSB8fCBoYXNEb2NrZWRJbnB1dFZpZXcgfHwgaXNab29tZWQgfHwgc2Nyb2xs
aW5nTmVlZGVkVG9SZXZlYWxVSTsKLSAgICBbX3Njcm9sbFZpZXcgX3NldFNjcm9sbEVuYWJsZWRJ
bnRlcm5hbDpzY3JvbGxpbmdFbmFibGVkXTsKLSNlbmRpZgotICAgIGlmICghbGF5ZXJUcmVlVHJh
bnNhY3Rpb24uc2NhbGVXYXNTZXRCeVVJUHJvY2VzcygpICYmICFbX3Njcm9sbFZpZXcgaXNab29t
aW5nXSAmJiAhW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSAmJiAhW19zY3JvbGxWaWV3IF9p
c0FuaW1hdGluZ1pvb21dICYmIFtfc2Nyb2xsVmlldyB6b29tU2NhbGVdICE9IGxheWVyVHJlZVRy
YW5zYWN0aW9uLnBhZ2VTY2FsZUZhY3RvcigpKSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShW
aXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiIHVwZGF0aW5nIHNjcm9sbCB2aWV3IHdpdGggcGFnZVNj
YWxlRmFjdG9yICIgPDwgbGF5ZXJUcmVlVHJhbnNhY3Rpb24ucGFnZVNjYWxlRmFjdG9yKCkpOwot
ICAgICAgICBbX3Njcm9sbFZpZXcgc2V0Wm9vbVNjYWxlOmxheWVyVHJlZVRyYW5zYWN0aW9uLnBh
Z2VTY2FsZUZhY3RvcigpXTsKLSAgICB9Ci0KLSAgICBfdmlld3BvcnRNZXRhVGFnV2lkdGggPSBs
YXllclRyZWVUcmFuc2FjdGlvbi52aWV3cG9ydE1ldGFUYWdXaWR0aCgpOwotICAgIF92aWV3cG9y
dE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0ID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24udmlld3BvcnRN
ZXRhVGFnV2lkdGhXYXNFeHBsaWNpdCgpOwotICAgIF92aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUlt
YWdlRG9jdW1lbnQgPSBsYXllclRyZWVUcmFuc2FjdGlvbi52aWV3cG9ydE1ldGFUYWdDYW1lRnJv
bUltYWdlRG9jdW1lbnQoKTsKLSAgICBfaW5pdGlhbFNjYWxlRmFjdG9yID0gbGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaW5pdGlhbFNjYWxlRmFjdG9yKCk7Ci0gICAgaWYgKF9wYWdlLT5pblN0YWJsZVN0
YXRlKCkgJiYgbGF5ZXJUcmVlVHJhbnNhY3Rpb24uaXNJblN0YWJsZVN0YXRlKCkgJiYgW19zdGFi
bGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyBjb3VudF0pIHsKLSAgICAgICAgZm9y
IChkaXNwYXRjaF9ibG9ja190IGFjdGlvbiBpbiBfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRh
dGVDYWxsYmFja3MuZ2V0KCkpCi0gICAgICAgICAgICBhY3Rpb24oKTsKLQotICAgICAgICBbX3N0
YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIHJlbW92ZUFsbE9iamVjdHNdOwot
ICAgICAgICBfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgPSBuaWw7Ci0g
ICAgfQotCi0gICAgaWYgKCFbX2NvbnRlbnRWaWV3IF9tYXlEaXNhYmxlRG91YmxlVGFwR2VzdHVy
ZXNEdXJpbmdTaW5nbGVUYXBdKQotICAgICAgICBbX2NvbnRlbnRWaWV3IF9zZXREb3VibGVUYXBH
ZXN0dXJlc0VuYWJsZWQ6c2VsZi5fYWxsb3dzRG91YmxlVGFwR2VzdHVyZXNdOwotCi0gICAgW3Nl
bGYgX3VwZGF0ZVNjcm9sbFZpZXdCYWNrZ3JvdW5kXTsKLSAgICBbc2VsZiBfc2V0QXZvaWRzVW5z
YWZlQXJlYTpsYXllclRyZWVUcmFuc2FjdGlvbi5hdm9pZHNVbnNhZmVBcmVhKCldOwotCi0gICAg
aWYgKF9nZXN0dXJlQ29udHJvbGxlcikKLSAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5zZXRS
ZW5kZXJUcmVlU2l6ZShsYXllclRyZWVUcmFuc2FjdGlvbi5yZW5kZXJUcmVlU2l6ZSgpKTsKLQot
ICAgIGlmIChfbmVlZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZSAm
JiBsYXllclRyZWVUcmFuc2FjdGlvbi50cmFuc2FjdGlvbklEKCkgPj0gX2ZpcnN0UGFpbnRBZnRl
ckNvbW1pdExvYWRUcmFuc2FjdGlvbklEKSB7Ci0gICAgICAgIF9uZWVkc1Jlc2V0Vmlld1N0YXRl
QWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lID0gTk87Ci0gICAgICAgIFtfc2Nyb2xsVmlldyBz
ZXRDb250ZW50T2Zmc2V0OltzZWxmIF9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9sbFZpZXdd
XTsKLSAgICAgICAgaWYgKF9vYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzICYgX1dLUmVu
ZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0UGFpbnQpCi0gICAgICAgICAgICBfbmF2aWdhdGlvblN0
YXRlLT5kaWRGaXJzdFBhaW50KCk7Ci0KLSAgICAgICAgbmVlZFVwZGF0ZVZpc2libGVDb250ZW50
UmVjdHMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChfZmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQ
YWdlUmVzdG9yZSAmJiBsYXllclRyZWVUcmFuc2FjdGlvbi50cmFuc2FjdGlvbklEKCkgPj0gX2Zp
cnN0VHJhbnNhY3Rpb25JREFmdGVyUGFnZVJlc3RvcmUudmFsdWUoKSkgewotICAgICAgICBpZiAo
X3Njcm9sbE9mZnNldFRvUmVzdG9yZSkgewotICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBzY2FsZWRTY3JvbGxPZmZzZXQgPSBfc2Nyb2xsT2Zmc2V0VG9SZXN0b3JlLnZhbHVlKCk7Ci0g
ICAgICAgICAgICBfc2Nyb2xsT2Zmc2V0VG9SZXN0b3JlID0gV1RGOjpudWxsb3B0OwotCi0gICAg
ICAgICAgICBpZiAoYXJlRXNzZW50aWFsbHlFcXVhbEFzRmxvYXQoY29udGVudFpvb21TY2FsZShz
ZWxmKSwgX3NjYWxlVG9SZXN0b3JlKSkgewotICAgICAgICAgICAgICAgIHNjYWxlZFNjcm9sbE9m
ZnNldC5zY2FsZShfc2NhbGVUb1Jlc3RvcmUpOwotICAgICAgICAgICAgICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgY29udGVudE9mZnNldEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzID0gc2NhbGVkU2Ny
b2xsT2Zmc2V0IC0gV2ViQ29yZTo6RmxvYXRTaXplKF9vYnNjdXJlZEluc2V0c1doZW5TYXZlZC5s
ZWZ0KCksIF9vYnNjdXJlZEluc2V0c1doZW5TYXZlZC50b3AoKSk7Ci0KLSAgICAgICAgICAgICAg
ICBjaGFuZ2VDb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5nZXQo
KSwgY29udGVudE9mZnNldEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgICAgICAg
ICBfY29tbWl0RGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uID0gWUVTOwotICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBuZWVkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyA9IHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoX3Vub2JzY3VyZWRDZW50ZXJUb1Jlc3RvcmUpIHsKLSAgICAg
ICAgICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSA9IF91
bm9ic2N1cmVkQ2VudGVyVG9SZXN0b3JlLnZhbHVlKCk7Ci0gICAgICAgICAgICBfdW5vYnNjdXJl
ZENlbnRlclRvUmVzdG9yZSA9IFdURjo6bnVsbG9wdDsKLQotICAgICAgICAgICAgaWYgKGFyZUVz
c2VudGlhbGx5RXF1YWxBc0Zsb2F0KGNvbnRlbnRab29tU2NhbGUoc2VsZiksIF9zY2FsZVRvUmVz
dG9yZSkpIHsKLSAgICAgICAgICAgICAgICBDR1JlY3QgdW5vYnNjdXJlZFJlY3QgPSBVSUVkZ2VJ
bnNldHNJbnNldFJlY3Qoc2VsZi5ib3VuZHMsIF9vYnNjdXJlZEluc2V0cyk7Ci0gICAgICAgICAg
ICAgICAgV2ViQ29yZTo6RmxvYXRTaXplIHVub2JzY3VyZWRDb250ZW50U2l6ZUF0TmV3U2NhbGUg
PSBXZWJDb3JlOjpGbG9hdFNpemUodW5vYnNjdXJlZFJlY3Quc2l6ZSkgLyBfc2NhbGVUb1Jlc3Rv
cmU7Ci0gICAgICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3BMZWZ0SW5Eb2N1bWVu
dENvb3JkaW5hdGVzID0gdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSAtIHVub2JzY3VyZWRDb250
ZW50U2l6ZUF0TmV3U2NhbGUgLyAyOwotCi0gICAgICAgICAgICAgICAgdG9wTGVmdEluRG9jdW1l
bnRDb29yZGluYXRlcy5zY2FsZShfc2NhbGVUb1Jlc3RvcmUpOwotICAgICAgICAgICAgICAgIHRv
cExlZnRJbkRvY3VtZW50Q29vcmRpbmF0ZXMubW92ZUJ5KFdlYkNvcmU6OkZsb2F0UG9pbnQoLV9v
YnNjdXJlZEluc2V0cy5sZWZ0LCAtX29ic2N1cmVkSW5zZXRzLnRvcCkpOworICAgIF9wYWdlLT5w
cm9jZXNzKCkudGVybWluYXRlKCk7Cit9CiAKLSAgICAgICAgICAgICAgICBjaGFuZ2VDb250ZW50
T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5nZXQoKSwgdG9wTGVmdEluRG9j
dW1lbnRDb29yZGluYXRlcyk7Ci0gICAgICAgICAgICB9CistIChXS05hdmlnYXRpb24gKilfcmVs
b2FkV2l0aG91dENvbnRlbnRCbG9ja2VycworeworICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5y
ZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNhYmxlQ29udGVudEJsb2NrZXJzKSk7Cit9
CiAKLSAgICAgICAgICAgIG5lZWRVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzID0gdHJ1ZTsKLSAg
ICAgICAgfQorLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZEV4cGlyZWRPbmx5Cit7CisgICAgcmV0
dXJuIHdyYXBwZXIoX3BhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRP
bmx5KSk7Cit9CiAKLSAgICAgICAgaWYgKF9nZXN0dXJlQ29udHJvbGxlcikKLSAgICAgICAgICAg
IF9nZXN0dXJlQ29udHJvbGxlci0+ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CistICh2b2lk
KV9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlCit7CisgICAgUmVmPFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0ZWRQcm9jZXNzUHJveHkoX3BhZ2UtPnByb2Nlc3MoKSk7
CisgICAgcHJvdGVjdGVkUHJvY2Vzc1Byb3h5LT5yZXF1ZXN0VGVybWluYXRpb24oV2ViS2l0OjpQ
cm9jZXNzVGVybWluYXRpb25SZWFzb246OlJlcXVlc3RlZEJ5Q2xpZW50KTsKIAotICAgICAgICBf
Zmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQYWdlUmVzdG9yZSA9IFdURjo6bnVsbG9wdDsKKyAgICBp
ZiAoYXV0byogcHJvdmlzaW9uYWxQYWdlUHJveHkgPSBfcGFnZS0+cHJvdmlzaW9uYWxQYWdlUHJv
eHkoKSkgeworICAgICAgICBSZWY8V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk+IHByb3RlY3RlZFBy
b2Nlc3NQcm94eShwcm92aXNpb25hbFBhZ2VQcm94eS0+cHJvY2VzcygpKTsKKyAgICAgICAgcHJv
dGVjdGVkUHJvY2Vzc1Byb3h5LT5yZXF1ZXN0VGVybWluYXRpb24oV2ViS2l0OjpQcm9jZXNzVGVy
bWluYXRpb25SZWFzb246OlJlcXVlc3RlZEJ5Q2xpZW50KTsKICAgICB9Ci0KLSAgICBpZiAobmVl
ZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMpCi0gICAgICAgIFtzZWxmIF9zY2hlZHVsZVZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZV07Ci0KLSAgICBpZiAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVT
Y3JvbGxpbmdQZXJmb3JtYW5jZURhdGEqIHNjcm9sbFBlcmZEYXRhID0gX3BhZ2UtPnNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YSgpKQotICAgICAgICBzY3JvbGxQZXJmRGF0YS0+ZGlkQ29tbWl0TGF5
ZXJUcmVlKFtzZWxmIHZpc2libGVSZWN0SW5WaWV3Q29vcmRpbmF0ZXNdKTsKIH0KIAotLSAodm9p
ZClfbGF5ZXJUcmVlQ29tbWl0Q29tcGxldGUKKy0gKENHUmVjdClfY29udmVydFJlY3RGcm9tUm9v
dFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMKIHsKLSAg
ICBfY29tbWl0RGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uID0gTk87CisgICAgLy8gRklYTUU6IEl0
IHNob3VsZCBiZSBlYXNpZXIgdG8gdGFsayBhYm91dCBXS1dlYlZpZXcgY29vcmRpbmF0ZXMgaW4g
YSBjb25zaXN0ZW50IGFuZCBjcm9zcy1wbGF0Zm9ybSB3YXkuCisgICAgLy8gQ3VycmVudGx5LCBu
ZWl0aGVyICJyb290IHZpZXciIG5vciAid2luZG93IiBtZWFuICJXS1dlYlZpZXcgY29vcmRpbmF0
ZXMiIG9uIGJvdGggcGxhdGZvcm1zLgorICAgIC8vIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi8x
OTM2NDkgYW5kIHJlbGF0ZWQgYnVncy4KKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHJl
dHVybiBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzIGZyb21WaWV3
Ol9jb250ZW50Vmlldy5nZXQoKV07CisjZWxzZQorICAgIHJldHVybiByZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzOworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX2NvdWxkTm90UmVzdG9yZVBhZ2VTdGF0
ZQorLSAoQ0dSZWN0KV9jb252ZXJ0UmVjdFRvUm9vdFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJl
Y3RJbldlYlZpZXdDb29yZGluYXRlcwogewotICAgIC8vIFRoZSBnZXN0dXJlQ29udHJvbGxlciBt
YXkgYmUgd2FpdGluZyBmb3IgdGhlIHNjcm9sbCBwb3NpdGlvbiB0byBiZSByZXN0b3JlZAotICAg
IC8vIGluIG9yZGVyIHRvIHJlbW92ZSB0aGUgc3dpcGUgc25hcHNob3QuIFNpbmNlIHRoZSBzY3Jv
bGwgcG9zaXRpb24gY291bGQgbm90IGJlCi0gICAgLy8gcmVzdG9yZWQsIHRlbGwgdGhlIGdlc3R1
cmVDb250cm9sbGVyIGl0IHdhcyByZXN0b3JlZCBzbyB0aGF0IGl0IG5vIGxvbmdlciB3YWl0cwot
ICAgIC8vIGZvciBpdC4KLSAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICBfZ2Vz
dHVyZUNvbnRyb2xsZXItPmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJbldlYlZpZXdD
b29yZGluYXRlcyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyNlbHNlCisgICAgcmV0dXJu
IHJlY3RJbldlYlZpZXdDb29yZGluYXRlczsKKyNlbmRpZgogfQogCi0tICh2b2lkKV9yZXN0b3Jl
UGFnZVNjcm9sbFBvc2l0aW9uOihPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PilzY3JvbGxQ
b3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpc2Nyb2xsT3JpZ2luIHBy
ZXZpb3VzT2JzY3VyZWRJbnNldDooV2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQpb2JzY3VyZWRJbnNl
dHMgc2NhbGU6KGRvdWJsZSlzY2FsZQorLSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRz
SW5SZWN0OihDR1JlY3QpcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqKSljb21wbGV0aW9uSGFu
ZGxlcgogewotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgIC8vIERlZmVy
IHNjcm9sbCBwb3NpdGlvbiByZXN0b3JhdGlvbiB1bnRpbCBhZnRlciB0aGUgY3VycmVudCByZXNp
emUgY29tcGxldGVzLgotICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiByZXRhaW5lZFNlbGYg
PSBzZWxmOwotICAgICAgICBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFty
ZXRhaW5lZFNlbGYsIHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxPcmlnaW4sIG9ic2N1cmVkSW5zZXRz
LCBzY2FsZV0gewotICAgICAgICAgICAgW3JldGFpbmVkU2VsZiBfcmVzdG9yZVBhZ2VTY3JvbGxQ
b3NpdGlvbjpzY3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46c2Nyb2xsT3JpZ2luIHByZXZpb3Vz
T2JzY3VyZWRJbnNldDpvYnNjdXJlZEluc2V0cyBzY2FsZTpzY2FsZV07Ci0gICAgICAgIH0pOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250
ZW50Vmlld10pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQFtdKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KKyNlbmRpZgogCi0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50
Vmlld10pCi0gICAgICAgIHJldHVybjsKKyAgICBDR1JlY3QgcmVjdEluUm9vdFZpZXdDb29yZGlu
YXRlcyA9IFtzZWxmIF9jb252ZXJ0UmVjdFRvUm9vdFZpZXdDb29yZGluYXRlczpyZWN0SW5XZWJW
aWV3Q29vcmRpbmF0ZXNdOworICAgIGF1dG8gd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZp
ZXc+KHNlbGYpOworICAgIF9wYWdlLT50ZXh0SW5wdXRDb250ZXh0c0luUmVjdChyZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzLCBbd2Vha1NlbGYsIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkVs
ZW1lbnRDb250ZXh0PiYgY29udGV4dHMpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFy
cmF5PiBlbGVtZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpjb250ZXh0cy5zaXplKCldKTsKIAotICAgIF9maXJzdFRyYW5zYWN0aW9uSURBZnRl
clBhZ2VSZXN0b3JlID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5PigqX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLm5leHRMYXllclRyZWVUcmFuc2FjdGlvbklE
KCk7Ci0gICAgaWYgKHNjcm9sbFBvc2l0aW9uKQotICAgICAgICBfc2Nyb2xsT2Zmc2V0VG9SZXN0
b3JlID0gV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihX
ZWJDb3JlOjpGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uLnZhbHVlKCkpLCBXZWJDb3JlOjp0b0Zs
b2F0U2l6ZShzY3JvbGxPcmlnaW4pKTsKLSAgICBlbHNlCi0gICAgICAgIF9zY3JvbGxPZmZzZXRU
b1Jlc3RvcmUgPSBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtT
ZWxmLmdldCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHQgOiBjb250ZXh0cykg
eworICAgICAgICAgICAgV2ViQ29yZTo6RWxlbWVudENvbnRleHQgY29udGV4dFdpdGhXZWJWaWV3
Qm91bmRpbmdSZWN0ID0gY29udGV4dDsKKyAgICAgICAgICAgIGNvbnRleHRXaXRoV2ViVmlld0Jv
dW5kaW5nUmVjdC5ib3VuZGluZ1JlY3QgPSBbc3Ryb25nU2VsZiBfY29udmVydFJlY3RGcm9tUm9v
dFZpZXdDb29yZGluYXRlczpjb250ZXh0LmJvdW5kaW5nUmVjdF07CisgICAgICAgICAgICBbZWxl
bWVudHMgYWRkT2JqZWN0OmFkb3B0TlMoW1tfV0tUZXh0SW5wdXRDb250ZXh0IGFsbG9jXSBfaW5p
dFdpdGhUZXh0SW5wdXRDb250ZXh0OmNvbnRleHRXaXRoV2ViVmlld0JvdW5kaW5nUmVjdF0pLmdl
dCgpXTsKKyAgICAgICAgfQogCi0gICAgX29ic2N1cmVkSW5zZXRzV2hlblNhdmVkID0gb2JzY3Vy
ZWRJbnNldHM7Ci0gICAgX3NjYWxlVG9SZXN0b3JlID0gc2NhbGU7CisgICAgICAgIGNhcHR1cmVk
Q29tcGxldGlvbkhhbmRsZXIoZWxlbWVudHMuZ2V0KCkpOworICAgIH0pOwogfQogCi0tICh2b2lk
KV9yZXN0b3JlUGFnZVN0YXRlVG9Vbm9ic2N1cmVkQ2VudGVyOihPcHRpb25hbDxXZWJDb3JlOjpG
bG9hdFBvaW50PiljZW50ZXIgc2NhbGU6KGRvdWJsZSlzY2FsZQorLSAodm9pZClfZm9jdXNUZXh0
SW5wdXRDb250ZXh0OihfV0tUZXh0SW5wdXRDb250ZXh0ICopdGV4dElucHV0Q29udGV4dCBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlm
IChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVw
ZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgIC8vIERlZmVyIHNjcm9sbCBwb3NpdGlv
biByZXN0b3JhdGlvbiB1bnRpbCBhZnRlciB0aGUgY3VycmVudCByZXNpemUgY29tcGxldGVzLgot
ICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiByZXRhaW5lZFNlbGYgPSBzZWxmOwotICAgICAg
ICBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFtyZXRhaW5lZFNlbGYsIGNl
bnRlciwgc2NhbGVdIHsKLSAgICAgICAgICAgIFtyZXRhaW5lZFNlbGYgX3Jlc3RvcmVQYWdlU3Rh
dGVUb1Vub2JzY3VyZWRDZW50ZXI6Y2VudGVyIHNjYWxlOnNjYWxlXTsKLSAgICAgICAgfSk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRl
bnRWaWV3XSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOTyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgX2ZpcnN0VHJhbnNhY3Rpb25JREFmdGVyUGFnZVJlc3RvcmUg
PSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpfcGFn
ZS0+ZHJhd2luZ0FyZWEoKSkubmV4dExheWVyVHJlZVRyYW5zYWN0aW9uSUQoKTsKLSAgICBfdW5v
YnNjdXJlZENlbnRlclRvUmVzdG9yZSA9IGNlbnRlcjsKLQotICAgIF9zY2FsZVRvUmVzdG9yZSA9
IHNjYWxlOwotfQotCi0tIChSZWZQdHI8V2ViS2l0OjpWaWV3U25hcHNob3Q+KV90YWtlVmlld1Nu
YXBzaG90Ci17Ci0jaWYgSEFWRShDT1JFX0FOSU1BVElPTl9SRU5ERVJfU0VSVkVSKQotICAgIGZs
b2F0IGRldmljZVNjYWxlID0gV2ViQ29yZTo6c2NyZWVuU2NhbGVGYWN0b3IoKTsKLSAgICBXZWJD
b3JlOjpGbG9hdFNpemUgc25hcHNob3RTaXplKHNlbGYuYm91bmRzLnNpemUpOwotICAgIHNuYXBz
aG90U2l6ZS5zY2FsZShkZXZpY2VTY2FsZSk7Ci0KLSAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9y
bSA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoZGV2aWNlU2NhbGUsIGRldmljZVNjYWxlLCAxKTsK
LQotI2lmIEhBVkUoSU9TVVJGQUNFKQotI2lmIEhBVkUoSU9TVVJGQUNFX1JHQjEwKQotICAgIFdl
YkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0IHNuYXBzaG90Rm9ybWF0ID0gV2ViQ29yZTo6c2NyZWVu
U3VwcG9ydHNFeHRlbmRlZENvbG9yKCkgPyBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdC
MTAgOiBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdCQTsKLSNlbHNlCi0gICAgV2ViQ29y
ZTo6SU9TdXJmYWNlOjpGb3JtYXQgc25hcHNob3RGb3JtYXQgPSBXZWJDb3JlOjpJT1N1cmZhY2U6
OkZvcm1hdDo6UkdCQTsKICNlbmRpZgotICAgIGF1dG8gc3VyZmFjZSA9IFdlYkNvcmU6OklPU3Vy
ZmFjZTo6Y3JlYXRlKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShzbmFwc2hvdFNpemUpLCBXZWJD
b3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpLCBzbmFwc2hvdEZvcm1hdCk7Ci0gICAgaWYgKCFzdXJm
YWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBDQVJlbmRlclNlcnZlclJlbmRlckxh
eWVyV2l0aFRyYW5zZm9ybShNQUNIX1BPUlRfTlVMTCwgc2VsZi5sYXllci5jb250ZXh0LmNvbnRl
eHRJZCwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oc2VsZi5sYXllciksIHN1cmZhY2UtPnN1
cmZhY2UoKSwgMCwgMCwgJnRyYW5zZm9ybSk7Ci0KLSNpZiBIQVZFKElPU1VSRkFDRV9BQ0NFTEVS
QVRPUikKLSAgICBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdCBjb21wcmVzc2VkRm9ybWF0ID0g
V2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OllVVjQyMjsKLSAgICBpZiAoV2ViQ29yZTo6SU9T
dXJmYWNlOjphbGxvd0NvbnZlcnNpb25Gcm9tRm9ybWF0VG9Gb3JtYXQoc25hcHNob3RGb3JtYXQs
IGNvbXByZXNzZWRGb3JtYXQpKSB7Ci0gICAgICAgIGF1dG8gdmlld1NuYXBzaG90ID0gV2ViS2l0
OjpWaWV3U25hcHNob3Q6OmNyZWF0ZShudWxscHRyKTsKLSAgICAgICAgV2ViQ29yZTo6SU9TdXJm
YWNlOjpjb252ZXJ0VG9Gb3JtYXQoV1RGTW92ZShzdXJmYWNlKSwgV2ViQ29yZTo6SU9TdXJmYWNl
OjpGb3JtYXQ6OllVVjQyMiwgW3ZpZXdTbmFwc2hvdCA9IHZpZXdTbmFwc2hvdC5jb3B5UmVmKCld
KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IGNvbnZlcnRlZFN1cmZhY2UpIHsK
LSAgICAgICAgICAgIGlmIChjb252ZXJ0ZWRTdXJmYWNlKQotICAgICAgICAgICAgICAgIHZpZXdT
bmFwc2hvdC0+c2V0U3VyZmFjZShXVEZNb3ZlKGNvbnZlcnRlZFN1cmZhY2UpKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgcmV0dXJuIHZpZXdTbmFwc2hvdDsKLSAgICB9Ci0jZW5kaWYgLy8gSEFW
RShJT1NVUkZBQ0VfQUNDRUxFUkFUT1IpCiAKLSAgICByZXR1cm4gV2ViS2l0OjpWaWV3U25hcHNo
b3Q6OmNyZWF0ZShXVEZNb3ZlKHN1cmZhY2UpKTsKLSNlbHNlIC8vIEhBVkUoSU9TVVJGQUNFKQot
ICAgIHVpbnQzMl90IHNsb3RJRCA9IFtXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hv
dHRpbmdDb250ZXh0KCkgY3JlYXRlSW1hZ2VTbG90OnNuYXBzaG90U2l6ZSBoYXNBbHBoYTpZRVNd
OworICAgIGF1dG8gd2ViQ29udGV4dCA9IFt0ZXh0SW5wdXRDb250ZXh0IF90ZXh0SW5wdXRDb250
ZXh0XTsKKyAgICBpZiAod2ViQ29udGV4dC53ZWJQYWdlSWRlbnRpZmllciAhPSBfcGFnZS0+d2Vi
UGFnZUlEKCkpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4
Y2VwdGlvbiBmb3JtYXQ6QCJUaGUgcHJvdmlkZWQgX1dLVGV4dElucHV0Q29udGV4dCB3YXMgbm90
IGNyZWF0ZWQgYnkgdGhpcyBXS1dlYlZpZXcuIl07CiAKLSAgICBpZiAoIXNsb3RJRCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgW3NlbGYgYmVjb21lRmlyc3RSZXNwb25kZXJdOwogCi0g
ICAgQ0FSZW5kZXJTZXJ2ZXJDYXB0dXJlTGF5ZXJXaXRoVHJhbnNmb3JtKE1BQ0hfUE9SVF9OVUxM
LCBzZWxmLmxheWVyLmNvbnRleHQuY29udGV4dElkLCAodWludDY0X3Qpc2VsZi5sYXllciwgc2xv
dElELCAwLCAwLCAmdHJhbnNmb3JtKTsKLSAgICBXZWJDb3JlOjpJbnRTaXplIGltYWdlU2l6ZSA9
IFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoc25hcHNob3RTaXpl
KSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6Vmlld1NuYXBzaG90OjpjcmVhdGUoc2xvdElELCBpbWFn
ZVNpemUsIChpbWFnZVNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOwotI2VuZGlmIC8vIEhB
VkUoSU9TVVJGQUNFKQotI2Vsc2UgLy8gSEFWRShDT1JFX0FOSU1BVElPTl9SRU5ERVJfU0VSVkVS
KQotICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCisgICAgX3BhZ2UtPmZvY3VzVGV4dElucHV0
Q29udGV4dCh3ZWJDb250ZXh0LCBbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgc3VjY2VzcykgeworICAgICAgICBjYXB0dXJl
ZENvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOworICAgIH0pOwogfQogCi0tICh2b2lkKV96b29t
VG9Qb2ludDooV2ViQ29yZTo6RmxvYXRQb2ludClwb2ludCBhdFNjYWxlOihkb3VibGUpc2NhbGUg
YW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKKy0gKHZvaWQpX3Rha2VQREZTbmFwc2hvdFdpdGhDb25m
aWd1cmF0aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlv
biBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiA9IDA7Ci0gICAgQ0dG
bG9hdCB6b29tU2NhbGUgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOwotCi0gICAgaWYgKGFuaW1h
dGVkKSB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBtYXhpbXVtWm9vbUR1cmF0aW9uID0gMC40Owot
ICAgICAgICBjb25zdCBkb3VibGUgbWluaW11bVpvb21EdXJhdGlvbiA9IDAuMTsKLSAgICAgICAg
Y29uc3QgZG91YmxlIHpvb21EdXJhdGlvbkZhY3RvciA9IDAuMzsKLQotICAgICAgICBkdXJhdGlv
biA9IHN0ZDo6bWluKGZhYnMobG9nKHpvb21TY2FsZSkgLSBsb2coc2NhbGUpKSAqIHpvb21EdXJh
dGlvbkZhY3RvciArIG1pbmltdW1ab29tRHVyYXRpb24sIG1heGltdW1ab29tRHVyYXRpb24pOwor
ICAgIFdLUERGQ29uZmlndXJhdGlvbiAqcGRmQ29uZmlndXJhdGlvbiA9IG5pbDsKKyAgICBpZiAo
c25hcHNob3RDb25maWd1cmF0aW9uKSB7CisgICAgICAgIHBkZkNvbmZpZ3VyYXRpb24gPSBbW1tX
S1BERkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgcGRm
Q29uZmlndXJhdGlvbi5yZWN0ID0gc25hcHNob3RDb25maWd1cmF0aW9uLnJlY3Q7CiAgICAgfQog
Ci0gICAgaWYgKHNjYWxlICE9IHpvb21TY2FsZSkKLSAgICAgICAgX3BhZ2UtPndpbGxTdGFydFVz
ZXJUcmlnZ2VyZWRab29taW5nKCk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3Rz
LCBzdHJlYW0gPDwgIl96b29tVG9Qb2ludDoiIDw8IHBvaW50IDw8ICIgc2NhbGU6ICIgPDwgc2Nh
bGUgPDwgIiBkdXJhdGlvbjoiIDw8IGR1cmF0aW9uKTsKLQotICAgIFtfc2Nyb2xsVmlldyBfem9v
bVRvQ2VudGVyOnBvaW50IHNjYWxlOnNjYWxlIGR1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBbc2Vs
ZiBjcmVhdGVQREZXaXRoQ29uZmlndXJhdGlvbjpwZGZDb25maWd1cmF0aW9uIGNvbXBsZXRpb25I
YW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAotLSAodm9pZClfem9vbVRvUmVjdDooV2Vi
Q29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3QgYXRTY2FsZTooZG91YmxlKXNjYWxlIG9yaWdpbjoo
V2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKKy0gKE5T
RGF0YSAqKV9zZXNzaW9uU3RhdGVEYXRhCiB7Ci0gICAgLy8gRklYTUU6IFNvbWUgb2YgdGhpcyBj
b3VsZCBiZSBzaGFyZWQgd2l0aCBfc2Nyb2xsVG9SZWN0LgotICAgIGNvbnN0IGRvdWJsZSB2aXNp
YmxlUmVjdFNjYWxlQ2hhbmdlID0gY29udGVudFpvb21TY2FsZShzZWxmKSAvIHNjYWxlOwotICAg
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlUmVjdChbc2VsZiBjb252ZXJ0UmVjdDpz
ZWxmLmJvdW5kcyB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XSk7Ci0gICAgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0IHVub2JzY3VyZWRSZWN0KFtzZWxmIF9jb250ZW50UmVjdEZvclVz
ZXJJbnRlcmFjdGlvbl0pOwotCi0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplIHRvcExlZnRP
YnNjdXJlZEluc2V0QWZ0ZXJab29tKCh1bm9ic2N1cmVkUmVjdC5taW5YTWluWUNvcm5lcigpIC0g
dmlzaWJsZVJlY3QubWluWE1pbllDb3JuZXIoKSkgKiB2aXNpYmxlUmVjdFNjYWxlQ2hhbmdlKTsK
LSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUgYm90dG9tUmlnaHRPYnNjdXJlZEluc2V0QWZ0
ZXJab29tKCh2aXNpYmxlUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gdW5vYnNjdXJlZFJlY3QubWF4
WE1heFlDb3JuZXIoKSkgKiB2aXNpYmxlUmVjdFNjYWxlQ2hhbmdlKTsKLQotICAgIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSB1bm9ic2N1cmVkUmVjdFNpemVBZnRlclpvb20odW5vYnNjdXJlZFJl
Y3Quc2l6ZSgpICogdmlzaWJsZVJlY3RTY2FsZUNoYW5nZSk7Ci0KLSAgICAvLyBDZW50ZXIgdG8g
dGhlIHRhcmdldCByZWN0LgotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdW5vYnNjdXJlZFJlY3RM
b2NhdGlvbkFmdGVyWm9vbSA9IHRhcmdldFJlY3QubG9jYXRpb24oKSAtICh1bm9ic2N1cmVkUmVj
dFNpemVBZnRlclpvb20gLSB0YXJnZXRSZWN0LnNpemUoKSkgKiAwLjU7Ci0KLSAgICAvLyBDZW50
ZXIgdG8gdGhlIHRhcCBwb2ludCBpbnN0ZWFkIGluIGNhc2UgdGhlIHRhcmdldCByZWN0IHdvbid0
IGZpdCBpbiBhIGRpcmVjdGlvbi4KLSAgICBpZiAodGFyZ2V0UmVjdC53aWR0aCgpID4gdW5vYnNj
dXJlZFJlY3RTaXplQWZ0ZXJab29tLndpZHRoKCkpCi0gICAgICAgIHVub2JzY3VyZWRSZWN0TG9j
YXRpb25BZnRlclpvb20uc2V0WChvcmlnaW4ueCgpIC0gdW5vYnNjdXJlZFJlY3RTaXplQWZ0ZXJa
b29tLndpZHRoKCkgLyAyKTsKLSAgICBpZiAodGFyZ2V0UmVjdC5oZWlnaHQoKSA+IHVub2JzY3Vy
ZWRSZWN0U2l6ZUFmdGVyWm9vbS5oZWlnaHQoKSkKLSAgICAgICAgdW5vYnNjdXJlZFJlY3RMb2Nh
dGlvbkFmdGVyWm9vbS5zZXRZKG9yaWdpbi55KCkgLSB1bm9ic2N1cmVkUmVjdFNpemVBZnRlclpv
b20uaGVpZ2h0KCkgLyAyKTsKLQotICAgIC8vIFdlIGhhdmUgY29tcHV0ZWQgd2hlcmUgd2Ugd2Fu
dCB0aGUgdW5vYnNjdXJlZCByZWN0IHRvIGJlLiBOb3cgYWRqdXN0IGZvciB0aGUgb2JzY3VyaW5n
IGluc2V0cy4KLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZVJlY3RBZnRlclpvb20odW5v
YnNjdXJlZFJlY3RMb2NhdGlvbkFmdGVyWm9vbSwgdW5vYnNjdXJlZFJlY3RTaXplQWZ0ZXJab29t
KTsKLSAgICB2aXNpYmxlUmVjdEFmdGVyWm9vbS5tb3ZlKC10b3BMZWZ0T2JzY3VyZWRJbnNldEFm
dGVyWm9vbSk7Ci0gICAgdmlzaWJsZVJlY3RBZnRlclpvb20uZXhwYW5kKHRvcExlZnRPYnNjdXJl
ZEluc2V0QWZ0ZXJab29tICsgYm90dG9tUmlnaHRPYnNjdXJlZEluc2V0QWZ0ZXJab29tKTsKLQot
ICAgIFtzZWxmIF96b29tVG9Qb2ludDp2aXNpYmxlUmVjdEFmdGVyWm9vbS5jZW50ZXIoKSBhdFNj
YWxlOnNjYWxlIGFuaW1hdGVkOmFuaW1hdGVkXTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
bm90IHVzZSB0aGUgbGVnYWN5IHNlc3Npb24gc3RhdGUgZW5jb2Rlci4KKyAgICByZXR1cm4gd3Jh
cHBlcihXZWJLaXQ6OmVuY29kZUxlZ2FjeVNlc3Npb25TdGF0ZShfcGFnZS0+c2Vzc2lvblN0YXRl
KCkpKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OkZsb2F0UG9pbnQgY29uc3RyYWluQ29udGVudE9m
ZnNldChXZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmZzZXQsIFdlYkNvcmU6OkZsb2F0U2l6
ZSBjb250ZW50U2l6ZSwgV2ViQ29yZTo6RmxvYXRTaXplIHVub2JzY3VyZWRDb250ZW50U2l6ZSkK
Ky0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGUKIHsKLSAgICBXZWJDb3JlOjpGbG9h
dFNpemUgbWF4aW11bUNvbnRlbnRPZmZzZXQgPSBjb250ZW50U2l6ZSAtIHVub2JzY3VyZWRDb250
ZW50U2l6ZTsKLSAgICByZXR1cm4gY29udGVudE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oV2Vi
Q29yZTo6RmxvYXRQb2ludCgpLCBXZWJDb3JlOjpGbG9hdFBvaW50KG1heGltdW1Db250ZW50T2Zm
c2V0KSk7CisgICAgcmV0dXJuIFtbW19XS1Nlc3Npb25TdGF0ZSBhbGxvY10gX2luaXRXaXRoU2Vz
c2lvblN0YXRlOl9wYWdlLT5zZXNzaW9uU3RhdGUoKV0gYXV0b3JlbGVhc2VdOwogfQogCi0tICh2
b2lkKV9zY3JvbGxUb0NvbnRlbnRTY3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQb2ludClz
Y3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9sbE9yaWdp
bgorLSAoX1dLU2Vzc2lvblN0YXRlICopX3Nlc3Npb25TdGF0ZVdpdGhGaWx0ZXI6KEJPT0wgKF4p
KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqaXRlbSkpZmlsdGVyCiB7Ci0gICAgaWYgKF9jb21taXRE
aWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24gfHwgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0g
V2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBjb250ZW50T2Zmc2V0ID0gV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlv
biwgdG9GbG9hdFNpemUoc2Nyb2xsT3JpZ2luKSk7Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IHNjYWxlZE9mZnNldCA9IGNvbnRlbnRPZmZzZXQ7Ci0gICAgQ0dGbG9hdCB6b29tU2NhbGUgPSBj
b250ZW50Wm9vbVNjYWxlKHNlbGYpOwotICAgIHNjYWxlZE9mZnNldC5zY2FsZSh6b29tU2NhbGUp
OwotCi0gICAgQ0dQb2ludCBjb250ZW50T2Zmc2V0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBb
c2VsZiBfY29udGVudE9mZnNldEFkanVzdGVkRm9yT2JzY3VyZWRJbnNldDpzY2FsZWRPZmZzZXRd
OwotICAgIGNvbnRlbnRPZmZzZXRJblNjcm9sbFZpZXdDb29yZGluYXRlcyA9IGNvbnRlbnRPZmZz
ZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxWaWV3LmdldCgpLCBjb250ZW50T2Zmc2V0SW5T
Y3JvbGxWaWV3Q29vcmRpbmF0ZXMpOworICAgIFdlYktpdDo6U2Vzc2lvblN0YXRlIHNlc3Npb25T
dGF0ZSA9IF9wYWdlLT5zZXNzaW9uU3RhdGUoW2ZpbHRlcl0oV2ViS2l0OjpXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJiBpdGVtKSB7CisgICAgICAgIGlmICghZmlsdGVyKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBbX3Njcm9sbFZpZXcgX3N0b3BTY3JvbGxpbmdBbmRab29taW5nQW5p
bWF0aW9uc107CisgICAgICAgIHJldHVybiAoYm9vbClmaWx0ZXIod3JhcHBlcihpdGVtKSk7Cisg
ICAgfSk7CiAKLSAgICBpZiAoIUNHUG9pbnRFcXVhbFRvUG9pbnQoY29udGVudE9mZnNldEluU2Ny
b2xsVmlld0Nvb3JkaW5hdGVzLCBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF0pKQotICAgICAg
ICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpjb250ZW50T2Zmc2V0SW5TY3JvbGxWaWV3
Q29vcmRpbmF0ZXNdOwotICAgIGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGNoYW5n
ZWQgYW55dGhpbmcsIHRoZXJlIHdvdWxkIG5vdCBiZSBhbnkgVmlzaWJsZUNvbnRlbnRSZWN0IHVw
ZGF0ZSBzZW50IHRvIHRoZSBjb250ZW50LgotICAgICAgICAvLyBUaGUgV2ViUHJvY2VzcyB3b3Vs
ZCBrZWVwIHRoZSBpbnZhbGlkIGNvbnRlbnRPZmZzZXQgYXMgaXRzIHNjcm9sbCBwb3NpdGlvbi4K
LSAgICAgICAgLy8gVG8gc3luY2hyb25pemUgdGhlIFdlYlByb2Nlc3Mgd2l0aCB3aGF0IGlzIG9u
IHNjcmVlbiwgd2Ugc2VuZCB0aGUgVmlzaWJsZUNvbnRlbnRSZWN0IGFnYWluLgotICAgICAgICBf
cGFnZS0+cmVzZW5kTGFzdFZpc2libGVDb250ZW50UmVjdHMoKTsKLSAgICB9CisgICAgcmV0dXJu
IFtbW19XS1Nlc3Npb25TdGF0ZSBhbGxvY10gX2luaXRXaXRoU2Vzc2lvblN0YXRlOnNlc3Npb25T
dGF0ZV0gYXV0b3JlbGVhc2VdOwogfQogCi0tIChCT09MKV9zY3JvbGxUb1JlY3Q6KFdlYkNvcmU6
OkZsb2F0UmVjdCl0YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4g
bWluaW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2UKKy0gKHZv
aWQpX3Jlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YTooTlNEYXRhICopc2Vzc2lvblN0YXRlRGF0
YQogewotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB1bm9ic2N1cmVkQ29udGVudFJlY3QoW3NlbGYg
X2NvbnRlbnRSZWN0Rm9yVXNlckludGVyYWN0aW9uXSk7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCB1bm9ic2N1cmVkQ29udGVudE9mZnNldCA9IHVub2JzY3VyZWRDb250ZW50UmVjdC5sb2NhdGlv
bigpOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBjb250ZW50U2l6ZShbc2VsZi5fY3VycmVudENv
bnRlbnRWaWV3IGJvdW5kc10uc2l6ZSk7Ci0KLSAgICAvLyBDZW50ZXIgdGhlIHRhcmdldCByZWN0
IGluIHRoZSBzY3JvbGwgdmlldy4KLSAgICAvLyBJZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgZml0IGlu
IHRoZSBzY3JvbGwgdmlldywgY2VudGVyIG9uIHRoZSBnZXN0dXJlIGxvY2F0aW9uIGluc3RlYWQu
Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldDsKLSAg
ICBpZiAodGFyZ2V0UmVjdC53aWR0aCgpIDw9IHVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgp
KQotICAgICAgICBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldC5zZXRYKHRhcmdldFJlY3QueCgp
IC0gKHVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpIC0gdGFyZ2V0UmVjdC53aWR0aCgpKSAv
IDIpOwotICAgIGVsc2UKLSAgICAgICAgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQuc2V0WChv
cmlnaW4ueCgpIC0gdW5vYnNjdXJlZENvbnRlbnRSZWN0LndpZHRoKCkgLyAyKTsKLSAgICBpZiAo
dGFyZ2V0UmVjdC5oZWlnaHQoKSA8PSB1bm9ic2N1cmVkQ29udGVudFJlY3QuaGVpZ2h0KCkpCi0g
ICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LnNldFkodGFyZ2V0UmVjdC55KCkgLSAo
dW5vYnNjdXJlZENvbnRlbnRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0UmVjdC5oZWlnaHQoKSkgLyAy
KTsKLSAgICBlbHNlCi0gICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LnNldFkob3Jp
Z2luLnkoKSAtIHVub2JzY3VyZWRDb250ZW50UmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIG5ld1Vu
b2JzY3VyZWRDb250ZW50T2Zmc2V0ID0gY29uc3RyYWluQ29udGVudE9mZnNldChuZXdVbm9ic2N1
cmVkQ29udGVudE9mZnNldCwgY29udGVudFNpemUsIHVub2JzY3VyZWRDb250ZW50UmVjdC5zaXpl
KCkpOwotCi0gICAgaWYgKHVub2JzY3VyZWRDb250ZW50T2Zmc2V0ID09IG5ld1Vub2JzY3VyZWRD
b250ZW50T2Zmc2V0KSB7Ci0gICAgICAgIGlmICh0YXJnZXRSZWN0LndpZHRoKCkgPiB1bm9ic2N1
cmVkQ29udGVudFJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50
T2Zmc2V0LnNldFgob3JpZ2luLngoKSAtIHVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpIC8g
Mik7Ci0gICAgICAgIGlmICh0YXJnZXRSZWN0LmhlaWdodCgpID4gdW5vYnNjdXJlZENvbnRlbnRS
ZWN0LmhlaWdodCgpKQotICAgICAgICAgICAgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQuc2V0
WShvcmlnaW4ueSgpIC0gdW5vYnNjdXJlZENvbnRlbnRSZWN0LmhlaWdodCgpIC8gMik7Ci0gICAg
ICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0ID0gY29uc3RyYWluQ29udGVudE9mZnNldChu
ZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldCwgY29udGVudFNpemUsIHVub2JzY3VyZWRDb250ZW50
UmVjdC5zaXplKCkpOwotICAgIH0KLQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzY3JvbGxWaWV3
T2Zmc2V0RGVsdGEgPSBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldCAtIHVub2JzY3VyZWRDb250
ZW50T2Zmc2V0OwotICAgIHNjcm9sbFZpZXdPZmZzZXREZWx0YS5zY2FsZShjb250ZW50Wm9vbVNj
YWxlKHNlbGYpKTsKLQotICAgIGZsb2F0IHNjcm9sbERpc3RhbmNlID0gc2Nyb2xsVmlld09mZnNl
dERlbHRhLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgaWYgKHNjcm9sbERpc3RhbmNlIDwgbWluaW11
bVNjcm9sbERpc3RhbmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBbX2NvbnRlbnRW
aWV3IHdpbGxTdGFydFpvb21PclNjcm9sbF07Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJs
ZVJlY3RzLCBzdHJlYW0gPDwgIl9zY3JvbGxUb1JlY3Q6IHNjcm9sbGluZyB0byAiIDw8IFtfc2Ny
b2xsVmlldyBjb250ZW50T2Zmc2V0XSArIHNjcm9sbFZpZXdPZmZzZXREZWx0YSk7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgdGhlIGxlZ2FjeSBzZXNzaW9uIHN0YXRlIGRlY29k
ZXIuCisgICAgV2ViS2l0OjpTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlOworICAgIGlmICghV2Vi
S2l0OjpkZWNvZGVMZWdhY3lTZXNzaW9uU3RhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHNlc3Npb25TdGF0ZURhdGEuYnl0ZXMpLCBzZXNzaW9uU3RhdGVEYXRhLmxlbmd0aCwgc2Vzc2lv
blN0YXRlKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRP
ZmZzZXQ6KFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XSArIHNjcm9sbFZpZXdPZmZzZXREZWx0
YSkgYW5pbWF0ZWQ6WUVTXTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBfcGFnZS0+cmVzdG9yZUZy
b21TZXNzaW9uU3RhdGUoV1RGTW92ZShzZXNzaW9uU3RhdGUpLCB0cnVlKTsKIH0KIAotLSAodm9p
ZClfem9vbU91dFdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGFuaW1hdGVk
OihCT09MKWFuaW1hdGVkCistIChXS05hdmlnYXRpb24gKilfcmVzdG9yZVNlc3Npb25TdGF0ZToo
X1dLU2Vzc2lvblN0YXRlICopc2Vzc2lvblN0YXRlIGFuZE5hdmlnYXRlOihCT09MKW5hdmlnYXRl
CiB7Ci0gICAgW3NlbGYgX3pvb21Ub1BvaW50Om9yaWdpbiBhdFNjYWxlOltfc2Nyb2xsVmlldyBt
aW5pbXVtWm9vbVNjYWxlXSBhbmltYXRlZDphbmltYXRlZF07CisgICAgcmV0dXJuIHdyYXBwZXIo
X3BhZ2UtPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSA/IHNlc3Npb25TdGF0
ZS0+X3Nlc3Npb25TdGF0ZSA6IFdlYktpdDo6U2Vzc2lvblN0YXRlIHsgfSwgbmF2aWdhdGUpKTsK
IH0KIAotLSAodm9pZClfem9vbVRvSW5pdGlhbFNjYWxlV2l0aE9yaWdpbjooV2ViQ29yZTo6Rmxv
YXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKKy0gKHZvaWQpX2Nsb3NlCiB7
Ci0gICAgQVNTRVJUKF9pbml0aWFsU2NhbGVGYWN0b3IgPiAwKTsKLSAgICBbc2VsZiBfem9vbVRv
UG9pbnQ6b3JpZ2luIGF0U2NhbGU6X2luaXRpYWxTY2FsZUZhY3RvciBhbmltYXRlZDphbmltYXRl
ZF07CisgICAgX3BhZ2UtPmNsb3NlKCk7CiB9CiAKLS8vIGZvY3VzZWRFbGVtZW50UmVjdCBhbmQg
c2VsZWN0aW9uUmVjdCBhcmUgYm90aCBpbiBkb2N1bWVudCBjb29yZGluYXRlcy4KLS0gKHZvaWQp
X3pvb21Ub0ZvY3VzUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jilmb2N1c2VkRWxlbWVu
dFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgc2VsZWN0aW9uUmVjdDooY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JilzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZpeGVk
OihCT09MKWluc2lkZUZpeGVkCi0gICAgZm9udFNpemU6KGZsb2F0KWZvbnRTaXplIG1pbmltdW1T
Y2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2Nh
bGUgYWxsb3dTY2FsaW5nOihCT09MKWFsbG93U2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClmb3Jj
ZVNjcm9sbAorLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1l
OihOU1N0cmluZyAqKWZpbGVuYW1lIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRlbnRUeXBl
IGRhdGE6KE5TRGF0YSAqKWRhdGEgb3B0aW9uczooX1dLQXR0YWNobWVudERpc3BsYXlPcHRpb25z
ICopb3B0aW9ucyBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIl96
b29tVG9Gb2N1c1JlY3Q6IiA8PCBmb2N1c2VkRWxlbWVudFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0
ZXMgPDwgIiBzZWxlY3Rpb25SZWN0OiIgPDwgc2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGlu
YXRlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKGluc2lkZUZpeGVkKTsKLQotICAgIGNvbnN0IGRvdWJs
ZSBtaW5pbXVtSGVpZ2h0VG9TaG93Q29udGVudEFib3ZlS2V5Ym9hcmQgPSAxMDY7Ci0gICAgY29u
c3QgQ0ZUaW1lSW50ZXJ2YWwgZm9ybUNvbnRyb2xab29tQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI1
OwotICAgIGNvbnN0IGRvdWJsZSBjYXJldE9mZnNldEZyb21XaW5kb3dFZGdlID0gODsKLQotICAg
IFVJV2luZG93ICp3aW5kb3cgPSBbX3Njcm9sbFZpZXcgd2luZG93XTsKLQotICAgIC8vIEZpbmQg
dGhlIHBvcnRpb24gb2YgdGhlIHZpZXcgdGhhdCBpcyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uCi0g
ICAgVUlWaWV3Q29udHJvbGxlciAqdG9wVmlld0NvbnRyb2xsZXIgPSBbW1tfc2Nyb2xsVmlldyBf
dmlld0NvbnRyb2xsZXJGb3JBbmNlc3Rvcl0gX3Jvb3RBbmNlc3RvclZpZXdDb250cm9sbGVyXSBf
dmlld0NvbnRyb2xsZXJGb3JTdXBwb3J0ZWRJbnRlcmZhY2VPcmllbnRhdGlvbnNdOwotICAgIFVJ
VmlldyAqZnVsbFNjcmVlblZpZXcgPSB0b3BWaWV3Q29udHJvbGxlci52aWV3OwotICAgIGlmICgh
ZnVsbFNjcmVlblZpZXcpCi0gICAgICAgIGZ1bGxTY3JlZW5WaWV3ID0gd2luZG93OwotCi0gICAg
Q0dSZWN0IHVub2JzY3VyZWRTY3JvbGxWaWV3UmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzID0gVUlF
ZGdlSW5zZXRzSW5zZXRSZWN0KFtzZWxmIGJvdW5kc10sIF9vYnNjdXJlZEluc2V0cyk7Ci0gICAg
Q0dSZWN0IHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBDR1Jl
Y3RJbnRlcnNlY3Rpb24odW5vYnNjdXJlZFNjcm9sbFZpZXdSZWN0SW5XZWJWaWV3Q29vcmRpbmF0
ZXMsIFtmdWxsU2NyZWVuVmlldyBjb252ZXJ0UmVjdDpbZnVsbFNjcmVlblZpZXcgYm91bmRzXSB0
b1ZpZXc6c2VsZl0pOwotICAgIENHUmVjdCBmb3JtQXNzaXN0YW50RnJhbWVJbldlYlZpZXdDb29y
ZGluYXRlcyA9IFt3aW5kb3cgY29udmVydFJlY3Q6X2lucHV0Vmlld0JvdW5kcyB0b1ZpZXc6c2Vs
Zl07Ci0gICAgQ0dSZWN0IGludGVyc2VjdGlvbkJldHdlZW5TY3JvbGxWaWV3QW5kRm9ybUFzc2lz
dGFudCA9IENHUmVjdEludGVyc2VjdGlvbih2aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmll
d0Nvb3JkaW5hdGVzLCBmb3JtQXNzaXN0YW50RnJhbWVJbldlYlZpZXdDb29yZGluYXRlcyk7Ci0g
ICAgQ0dTaXplIHZpc2libGVTaXplID0gdmlzaWJsZVNjcm9sbFZpZXdCb3VuZHNJbldlYlZpZXdD
b29yZGluYXRlcy5zaXplOwotCi0gICAgQ0dGbG9hdCB2aXNpYmxlT2Zmc2V0RnJvbVRvcCA9IDA7
Ci0gICAgQ0dGbG9hdCBtaW5pbXVtRGlzdGFuY2VGcm9tS2V5Ym9hcmRUb1RyaWdnZXJTY3JvbGwg
PSAwOwotICAgIGlmICghQ0dSZWN0SXNFbXB0eShpbnRlcnNlY3Rpb25CZXR3ZWVuU2Nyb2xsVmll
d0FuZEZvcm1Bc3Npc3RhbnQpKSB7Ci0gICAgICAgIENHRmxvYXQgaGVpZ2h0VmlzaWJsZUFib3Zl
Rm9ybUFzc2lzdGFudCA9IENHUmVjdEdldE1pblkoaW50ZXJzZWN0aW9uQmV0d2VlblNjcm9sbFZp
ZXdBbmRGb3JtQXNzaXN0YW50KSAtIENHUmVjdEdldE1pblkodmlzaWJsZVNjcm9sbFZpZXdCb3Vu
ZHNJbldlYlZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIENHRmxvYXQgaGVpZ2h0VmlzaWJsZUJl
bG93Rm9ybUFzc2lzdGFudCA9IENHUmVjdEdldE1heFkodmlzaWJsZVNjcm9sbFZpZXdCb3VuZHNJ
bldlYlZpZXdDb29yZGluYXRlcykgLSBDR1JlY3RHZXRNYXhZKGludGVyc2VjdGlvbkJldHdlZW5T
Y3JvbGxWaWV3QW5kRm9ybUFzc2lzdGFudCk7Ci0KLSAgICAgICAgaWYgKGhlaWdodFZpc2libGVB
Ym92ZUZvcm1Bc3Npc3RhbnQgPj0gbWluaW11bUhlaWdodFRvU2hvd0NvbnRlbnRBYm92ZUtleWJv
YXJkIHx8IGhlaWdodFZpc2libGVCZWxvd0Zvcm1Bc3Npc3RhbnQgPCBoZWlnaHRWaXNpYmxlQWJv
dmVGb3JtQXNzaXN0YW50KSB7Ci0gICAgICAgICAgICB2aXNpYmxlU2l6ZS5oZWlnaHQgPSBoZWln
aHRWaXNpYmxlQWJvdmVGb3JtQXNzaXN0YW50OwotICAgICAgICAgICAgbWluaW11bURpc3RhbmNl
RnJvbUtleWJvYXJkVG9UcmlnZ2VyU2Nyb2xsID0gNTA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB2aXNpYmxlU2l6ZS5oZWlnaHQgPSBoZWlnaHRWaXNpYmxlQmVsb3dGb3JtQXNzaXN0
YW50OwotICAgICAgICAgICAgdmlzaWJsZU9mZnNldEZyb21Ub3AgPSBDR1JlY3RHZXRNYXhZKGlu
dGVyc2VjdGlvbkJldHdlZW5TY3JvbGxWaWV3QW5kRm9ybUFzc2lzdGFudCkgLSBDR1JlY3RHZXRN
aW5ZKHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3Q29vcmRpbmF0ZXMpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gWm9vbSBhcm91bmQgdGhlIGVsZW1lbnQncyBib3VuZGluZyBm
cmFtZS4gV2UgdXNlIGEgInN0YW5kYXJkIiBzaXplIHRvIGRldGVybWluZSB0aGUgcHJvcGVyIGZy
YW1lLgotICAgIGRvdWJsZSBjdXJyZW50U2NhbGUgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOwot
ICAgIGRvdWJsZSBzY2FsZSA9IGN1cnJlbnRTY2FsZTsKLSAgICBpZiAoYWxsb3dTY2FsaW5nKSB7
Ci0jaWYgUExBVEZPUk0oV0FUQ0hPUykKLSAgICAgICAgY29uc3QgQ0dGbG9hdCBtaW5pbXVtTWFy
Z2luRm9yWm9vbWluZ1RvRW50aXJlRm9jdXNSZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSAxMDsK
LSAgICAgICAgY29uc3QgQ0dGbG9hdCBtYXhpbXVtTWFyZ2luRm9yWm9vbWluZ1RvRW50aXJlRm9j
dXNSZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSAzNTsKLQotICAgICAgICBDR1JlY3QgbWluaW11
bVRhcmdldFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgPSBVSVJlY3RJbnNldEVkZ2VzKGZvY3Vz
ZWRFbGVtZW50UmVjdEluRG9jdW1lbnRDb29yZGluYXRlcywgVUlSZWN0RWRnZUFsbCwgLW1pbmlt
dW1NYXJnaW5Gb3Jab29taW5nVG9FbnRpcmVGb2N1c1JlY3RJbldlYlZpZXdDb29yZGluYXRlcyAv
IGN1cnJlbnRTY2FsZSk7Ci0gICAgICAgIENHUmVjdCBtYXhpbXVtVGFyZ2V0UmVjdEluRG9jdW1l
bnRDb29yZGluYXRlcyA9IFVJUmVjdEluc2V0RWRnZXMoZm9jdXNlZEVsZW1lbnRSZWN0SW5Eb2N1
bWVudENvb3JkaW5hdGVzLCBVSVJlY3RFZGdlQWxsLCAtbWF4aW11bU1hcmdpbkZvclpvb21pbmdU
b0VudGlyZUZvY3VzUmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzIC8gY3VycmVudFNjYWxlKTsKLQot
ICAgICAgICBkb3VibGUgY2xhbXBlZE1heGltdW1UYXJnZXRTY2FsZSA9IGNsYW1wVG88ZG91Ymxl
PihzdGQ6Om1pbih2aXNpYmxlU2l6ZS53aWR0aCAvIENHUmVjdEdldFdpZHRoKG1pbmltdW1UYXJn
ZXRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzKSwgdmlzaWJsZVNpemUuaGVpZ2h0IC8gQ0dSZWN0
R2V0SGVpZ2h0KG1pbmltdW1UYXJnZXRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzKSksIG1pbmlt
dW1TY2FsZSwgbWF4aW11bVNjYWxlKTsKLSAgICAgICAgZG91YmxlIGNsYW1wZWRNaW5pbXVtVGFy
Z2V0U2NhbGUgPSBjbGFtcFRvPGRvdWJsZT4oc3RkOjptaW4odmlzaWJsZVNpemUud2lkdGggLyBD
R1JlY3RHZXRXaWR0aChtYXhpbXVtVGFyZ2V0UmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyksIHZp
c2libGVTaXplLmhlaWdodCAvIENHUmVjdEdldEhlaWdodChtYXhpbXVtVGFyZ2V0UmVjdEluRG9j
dW1lbnRDb29yZGluYXRlcykpLCBtaW5pbXVtU2NhbGUsIG1heGltdW1TY2FsZSk7Ci0gICAgICAg
IHNjYWxlID0gY2xhbXBUbzxkb3VibGU+KGN1cnJlbnRTY2FsZSwgY2xhbXBlZE1pbmltdW1UYXJn
ZXRTY2FsZSwgY2xhbXBlZE1heGltdW1UYXJnZXRTY2FsZSk7Ci0jZWxzZQotICAgICAgICBjb25z
dCBkb3VibGUgd2ViVmlld1N0YW5kYXJkRm9udFNpemUgPSAxNjsKLSAgICAgICAgc2NhbGUgPSBj
bGFtcFRvPGRvdWJsZT4od2ViVmlld1N0YW5kYXJkRm9udFNpemUgLyBmb250U2l6ZSwgbWluaW11
bVNjYWxlLCBtYXhpbXVtU2NhbGUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgQ0dGbG9hdCBkb2N1
bWVudFdpZHRoID0gW19jb250ZW50VmlldyBib3VuZHNdLnNpemUud2lkdGg7Ci0gICAgc2NhbGUg
PSBDR1JvdW5kKGRvY3VtZW50V2lkdGggKiBzY2FsZSkgLyBkb2N1bWVudFdpZHRoOwotCi0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUgPSBmb2N1c2Vk
RWxlbWVudFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXM7Ci0gICAgZm9jdXNlZEVsZW1lbnRSZWN0
SW5OZXdTY2FsZS5zY2FsZShzY2FsZSk7Ci0gICAgZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2Fs
ZS5tb3ZlQnkoW19jb250ZW50VmlldyBmcmFtZV0ub3JpZ2luKTsKLQotICAgIEJPT0wgc2VsZWN0
aW9uUmVjdElzTm90TnVsbCA9ICFzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzLmlz
WmVybygpOwotICAgIEJPT0wgZG9Ob3RTY3JvbGxXaGVuQ29udGVudElzQWxyZWFkeVZpc2libGUg
PSAhZm9yY2VTY3JvbGwgfHwgW19jb250ZW50VmlldyBfc2hvdWxkQXZvaWRTY3JvbGxpbmdXaGVu
Rm9jdXNlZENvbnRlbnRJc1Zpc2libGVdOwotICAgIGlmIChkb05vdFNjcm9sbFdoZW5Db250ZW50
SXNBbHJlYWR5VmlzaWJsZSkgewotICAgICAgICBDR1JlY3QgY3VycmVudGx5VmlzaWJsZVJlZ2lv
bkluV2ViVmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBjdXJyZW50bHlWaXNpYmxlUmVnaW9uSW5X
ZWJWaWV3Q29vcmRpbmF0ZXMub3JpZ2luID0gdW5vYnNjdXJlZFNjcm9sbFZpZXdSZWN0SW5XZWJW
aWV3Q29vcmRpbmF0ZXMub3JpZ2luOwotICAgICAgICBjdXJyZW50bHlWaXNpYmxlUmVnaW9uSW5X
ZWJWaWV3Q29vcmRpbmF0ZXMub3JpZ2luLnkgKz0gdmlzaWJsZU9mZnNldEZyb21Ub3A7Ci0gICAg
ICAgIGN1cnJlbnRseVZpc2libGVSZWdpb25JbldlYlZpZXdDb29yZGluYXRlcy5zaXplID0gdmlz
aWJsZVNpemU7Ci0gICAgICAgIGN1cnJlbnRseVZpc2libGVSZWdpb25JbldlYlZpZXdDb29yZGlu
YXRlcy5zaXplLmhlaWdodCAtPSBtaW5pbXVtRGlzdGFuY2VGcm9tS2V5Ym9hcmRUb1RyaWdnZXJT
Y3JvbGw7Ci0KLSAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHNjcm9sbGluZyBpZiB0aGUgZW50aXJl
IG5vZGUgaXMgYWxyZWFkeSB2aXNpYmxlLCB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgYSBzZWxlY3Rp
b25SZWN0LgotICAgICAgICBpZiAoQ0dSZWN0Q29udGFpbnNSZWN0KGN1cnJlbnRseVZpc2libGVS
ZWdpb25JbldlYlZpZXdDb29yZGluYXRlcywgW3NlbGYgY29udmVydFJlY3Q6Zm9jdXNlZEVsZW1l
bnRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV0p
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIERvbid0IGJvdGhlciBzY3JvbGxp
bmcgaWYgd2UgaGF2ZSBhIHZhbGlkIHNlbGVjdGlvblJlY3QgYW5kIGl0IGlzIGFscmVhZHkgdmlz
aWJsZS4KLSAgICAgICAgaWYgKHNlbGVjdGlvblJlY3RJc05vdE51bGwgJiYgQ0dSZWN0Q29udGFp
bnNSZWN0KGN1cnJlbnRseVZpc2libGVSZWdpb25JbldlYlZpZXdDb29yZGluYXRlcywgW3NlbGYg
Y29udmVydFJlY3Q6c2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyBmcm9tVmlldzpf
Y29udGVudFZpZXcuZ2V0KCldKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBXZSB3YW50IHRvIGNlbnRlciB0aGUgZm9jdXNlZCBlbGVtZW50IHdpdGhpbiB0aGUgdmlld3Bv
cnQsIHdpdGggYXMgbXVjaCBzcGFjaW5nIG9uIGFsbCBzaWRlcyBhcwotICAgIC8vIHdlIGNhbiBn
ZXQgYmFzZWQgb24gdGhlIHZpc2libGUgYXJlYSBhZnRlciB6b29taW5nLiBUaGUgc3BhY2luZyBp
biBlaXRoZXIgZGltZW5zaW9uIGlzIGhhbGYgdGhlCi0gICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSBzaXplIG9mIHRoZSBET00gbm9kZSBhbmQgdGhlIHNpemUgb2YgdGhlIHZpc2libGUgZnJh
bWUuCi0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgdG9vIHdpZGUgdG8gYmUgaG9yaXpvbnRhbGx5
IGNlbnRlcmVkIG9yIHRvbyB0YWxsIHRvIGJlIHZlcnRpY2FsbHkgY2VudGVyZWQsIHdlCi0gICAg
Ly8gaW5zdGVhZCBzY3JvbGwgc3VjaCB0aGF0IHRoZSBsZWZ0IGVkZ2Ugb3IgdG9wIGVkZ2Ugb2Yg
dGhlIGVsZW1lbnQgaXMgd2l0aGluIHRoZSBsZWZ0IGhhbGYgb3IgdG9wCi0gICAgLy8gaGFsZiBv
ZiB0aGUgdmlld3BvcnQsIHJlc3BlY3RpdmVseS4KLSAgICBDR0Zsb2F0IGhvcml6b250YWxTcGFj
ZUluV2ViVmlld0Nvb3JkaW5hdGVzID0gKHZpc2libGVTaXplLndpZHRoIC0gZm9jdXNlZEVsZW1l
bnRSZWN0SW5OZXdTY2FsZS53aWR0aCgpKSAvIDIuMDsKLSAgICBDR0Zsb2F0IHZlcnRpY2FsU3Bh
Y2VJbldlYlZpZXdDb29yZGluYXRlcyA9ICh2aXNpYmxlU2l6ZS5oZWlnaHQgLSBmb2N1c2VkRWxl
bWVudFJlY3RJbk5ld1NjYWxlLmhlaWdodCgpKSAvIDIuMDsKLQotICAgIGF1dG8gdG9wTGVmdCA9
IENHUG9pbnRaZXJvOwotICAgIGF1dG8gc2Nyb2xsVmlld0luc2V0cyA9IFtfc2Nyb2xsVmlldyBf
ZWZmZWN0aXZlQ29udGVudEluc2V0XTsKLSAgICBhdXRvIGN1cnJlbnRUb3BMZWZ0ID0gW19zY3Jv
bGxWaWV3IGNvbnRlbnRPZmZzZXRdOwotCi0gICAgaWYgKF9oYXZlU2V0T2JzY3VyZWRJbnNldHMp
IHsKLSAgICAgICAgY3VycmVudFRvcExlZnQueCArPSBfb2JzY3VyZWRJbnNldHMubGVmdDsKLSAg
ICAgICAgY3VycmVudFRvcExlZnQueSArPSBfb2JzY3VyZWRJbnNldHMudG9wOwotICAgIH0KLQot
ICAgIGlmIChob3Jpem9udGFsU3BhY2VJbldlYlZpZXdDb29yZGluYXRlcyA+IDApCi0gICAgICAg
IHRvcExlZnQueCA9IGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUueCgpIC0gaG9yaXpvbnRh
bFNwYWNlSW5XZWJWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gbWlu
aW11bU9mZnNldFRvUmV2ZWFsTGVmdEVkZ2UgPSBzdGQ6Om1heCgtc2Nyb2xsVmlld0luc2V0cy5s
ZWZ0LCBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLngoKSAtIHZpc2libGVTaXplLndpZHRo
IC8gMik7Ci0gICAgICAgIGF1dG8gbWF4aW11bU9mZnNldFRvUmV2ZWFsTGVmdEVkZ2UgPSBmb2N1
c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLngoKTsKLSAgICAgICAgdG9wTGVmdC54ID0gY2xhbXBU
bzxkb3VibGU+KGN1cnJlbnRUb3BMZWZ0LngsIG1pbmltdW1PZmZzZXRUb1JldmVhbExlZnRFZGdl
LCBtYXhpbXVtT2Zmc2V0VG9SZXZlYWxMZWZ0RWRnZSk7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRp
Y2FsU3BhY2VJbldlYlZpZXdDb29yZGluYXRlcyA+IDApCi0gICAgICAgIHRvcExlZnQueSA9IGZv
Y3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUueSgpIC0gdmVydGljYWxTcGFjZUluV2ViVmlld0Nv
b3JkaW5hdGVzOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIG1pbmltdW1PZmZzZXRUb1JldmVh
bFRvcEVkZ2UgPSBzdGQ6Om1heCgtc2Nyb2xsVmlld0luc2V0cy50b3AsIGZvY3VzZWRFbGVtZW50
UmVjdEluTmV3U2NhbGUueSgpIC0gdmlzaWJsZVNpemUuaGVpZ2h0IC8gMik7Ci0gICAgICAgIGF1
dG8gbWF4aW11bU9mZnNldFRvUmV2ZWFsVG9wRWRnZSA9IGZvY3VzZWRFbGVtZW50UmVjdEluTmV3
U2NhbGUueSgpOwotICAgICAgICB0b3BMZWZ0LnkgPSBjbGFtcFRvPGRvdWJsZT4oY3VycmVudFRv
cExlZnQueSwgbWluaW11bU9mZnNldFRvUmV2ZWFsVG9wRWRnZSwgbWF4aW11bU9mZnNldFRvUmV2
ZWFsVG9wRWRnZSk7Ci0gICAgfQotCi0gICAgdG9wTGVmdC55IC09IHZpc2libGVPZmZzZXRGcm9t
VG9wOwotCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRvY3VtZW50Qm91bmRzSW5OZXdTY2FsZSA9
IFtfY29udGVudFZpZXcgYm91bmRzXTsKLSAgICBkb2N1bWVudEJvdW5kc0luTmV3U2NhbGUuc2Nh
bGUoc2NhbGUpOwotICAgIGRvY3VtZW50Qm91bmRzSW5OZXdTY2FsZS5tb3ZlQnkoW19jb250ZW50
VmlldyBmcmFtZV0ub3JpZ2luKTsKLQotICAgIENHRmxvYXQgbWluaW11bUFsbG93YWJsZUhvcml6
b250YWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcyA9IC1JTkZJTklUWTsKLSAgICBDR0Zsb2F0
IG1pbmltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzID0gLUlO
RklOSVRZOwotICAgIENHRmxvYXQgbWF4aW11bUFsbG93YWJsZUhvcml6b250YWxPZmZzZXRJbldl
YlZpZXdDb29yZGluYXRlcyA9IENHUmVjdEdldE1heFgoZG9jdW1lbnRCb3VuZHNJbk5ld1NjYWxl
KSAtIHZpc2libGVTaXplLndpZHRoOwotICAgIENHRmxvYXQgbWF4aW11bUFsbG93YWJsZVZlcnRp
Y2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBDR1JlY3RHZXRNYXhZKGRvY3VtZW50Qm91
bmRzSW5OZXdTY2FsZSkgLSB2aXNpYmxlU2l6ZS5oZWlnaHQ7Ci0KLSAgICBpZiAoc2VsZWN0aW9u
UmVjdElzTm90TnVsbCkgewotICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVj
dEluTmV3U2NhbGUgPSBzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzOwotICAgICAg
ICBzZWxlY3Rpb25SZWN0SW5OZXdTY2FsZS5zY2FsZShzY2FsZSk7Ci0gICAgICAgIHNlbGVjdGlv
blJlY3RJbk5ld1NjYWxlLm1vdmVCeShbX2NvbnRlbnRWaWV3IGZyYW1lXS5vcmlnaW4pOwotICAg
ICAgICAvLyBBZGp1c3QgdGhlIG1pbiBhbmQgbWF4IGFsbG93YWJsZSBzY3JvbGwgb2Zmc2V0cywg
c3VjaCB0aGF0IHRoZSBzZWxlY3Rpb24gcmVjdCByZW1haW5zIHZpc2libGUuCi0gICAgICAgIG1p
bmltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBDR1Jl
Y3RHZXRNYXhYKHNlbGVjdGlvblJlY3RJbk5ld1NjYWxlKSArIGNhcmV0T2Zmc2V0RnJvbVdpbmRv
d0VkZ2UgLSB2aXNpYmxlU2l6ZS53aWR0aDsKLSAgICAgICAgbWluaW11bUFsbG93YWJsZVZlcnRp
Y2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBDR1JlY3RHZXRNYXhZKHNlbGVjdGlvblJl
Y3RJbk5ld1NjYWxlKSArIGNhcmV0T2Zmc2V0RnJvbVdpbmRvd0VkZ2UgLSB2aXNpYmxlU2l6ZS5o
ZWlnaHQgLSB2aXNpYmxlT2Zmc2V0RnJvbVRvcDsKLSAgICAgICAgbWF4aW11bUFsbG93YWJsZUhv
cml6b250YWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcyA9IHN0ZDo6bWluPENHRmxvYXQ+KG1h
eGltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMsIENHUmVj
dEdldE1pblgoc2VsZWN0aW9uUmVjdEluTmV3U2NhbGUpIC0gY2FyZXRPZmZzZXRGcm9tV2luZG93
RWRnZSk7Ci0gICAgICAgIG1heGltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldEluV2ViVmlld0Nv
b3JkaW5hdGVzID0gc3RkOjptaW48Q0dGbG9hdD4obWF4aW11bUFsbG93YWJsZVZlcnRpY2FsT2Zm
c2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMsIENHUmVjdEdldE1pblkoc2VsZWN0aW9uUmVjdEluTmV3
U2NhbGUpIC0gY2FyZXRPZmZzZXRGcm9tV2luZG93RWRnZSAtIHZpc2libGVPZmZzZXRGcm9tVG9w
KTsKLSAgICB9Ci0KLSAgICAvLyBDb25zdHJhaW4gdGhlIGxlZnQgZWRnZSBpbiBkb2N1bWVudCBj
b29yZGluYXRlcyBzbyB0aGF0OgotICAgIC8vICAtIGl0IGlzbid0IHNvIHNtYWxsIHRoYXQgdGhl
IHNjcm9sbFZpc2libGVSZWN0IGlzbid0IHZpc2libGUgb24gdGhlIHNjcmVlbgotICAgIC8vICAt
IGl0IGlzbid0IHNvIGdyZWF0IHRoYXQgdGhlIGRvY3VtZW50J3MgcmlnaHQgZWRnZSBpcyBsZXNz
IHRoYW4gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHNjcmVlbgotICAgIHRvcExlZnQueCA9IGNsYW1w
VG88Q0dGbG9hdD4odG9wTGVmdC54LCBtaW5pbXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9mZnNldElu
V2ViVmlld0Nvb3JkaW5hdGVzLCBtYXhpbXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9mZnNldEluV2Vi
Vmlld0Nvb3JkaW5hdGVzKTsKLQotICAgIC8vIENvbnN0cmFpbiB0aGUgdG9wIGVkZ2UgaW4gZG9j
dW1lbnQgY29vcmRpbmF0ZXMgc28gdGhhdDoKLSAgICAvLyAgLSBpdCBpc24ndCBzbyBzbWFsbCB0
aGF0IHRoZSBzY3JvbGxWaXNpYmxlUmVjdCBpc24ndCB2aXNpYmxlIG9uIHRoZSBzY3JlZW4KLSAg
ICAvLyAgLSBpdCBpc24ndCBzbyBncmVhdCB0aGF0IHRoZSBkb2N1bWVudCdzIGJvdHRvbSBlZGdl
IGlzIGhpZ2hlciB0aGFuIHRoZSB0b3Agb2YgdGhlIGZvcm0gYXNzaXN0YW50Ci0gICAgdG9wTGVm
dC55ID0gY2xhbXBUbzxDR0Zsb2F0Pih0b3BMZWZ0LnksIG1pbmltdW1BbGxvd2FibGVWZXJ0aWNh
bE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzLCBtYXhpbXVtQWxsb3dhYmxlVmVydGljYWxPZmZz
ZXRJbldlYlZpZXdDb29yZGluYXRlcyk7Ci0KLSAgICBpZiAoX2hhdmVTZXRPYnNjdXJlZEluc2V0
cykgewotICAgICAgICAvLyBUaGlzIGxvb2tzIHVuaW50dWl0aXZlLCBidXQgaXMgbmVjZXNzYXJ5
IGluIG9yZGVyIHRvIHByZWNpc2VseSBjZW50ZXIgdGhlIGZvY3VzZWQgZWxlbWVudCBpbiB0aGUg
dmlzaWJsZSBhcmVhLgotICAgICAgICAvLyBUaGUgdG9wIGxlZnQgcG9zaXRpb24gYWxyZWFkeSBh
Y2NvdW50cyBmb3IgdG9wIGFuZCBsZWZ0IG9ic2N1cmVkIGluc2V0cyAtIGkuZS4sIGEgdG9wTGVm
dCBvZiAoMCwgMCkgY29ycmVzcG9uZHMKLSAgICAgICAgLy8gdG8gdGhlIHRvcC0gYW5kIGxlZnQt
bW9zdCBwb2ludCBiZWxvdyAoYW5kIHRvIHRoZSByaWdodCBvZikgdGhlIHRvcCBpbnNldCBhcmVh
IGFuZCBsZWZ0IGluc2V0IGFyZWFzLCByZXNwZWN0aXZlbHkuCi0gICAgICAgIC8vIEhvd2V2ZXIs
IHdoZW4gdGVsbGluZyBXS1Njcm9sbFZpZXcgdG8gc2Nyb2xsIHRvIGEgZ2l2ZW4gY2VudGVyIHBv
c2l0aW9uLCB0aGlzIGNlbnRlciBwb3NpdGlvbiBpcyBjb21wdXRlZCByZWxhdGl2ZQotICAgICAg
ICAvLyB0byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgc2Nyb2xsIHZpZXcuIFRodXMsIHRv
IGNvbXB1dGUgb3VyIGNlbnRlciBwb3NpdGlvbiBmcm9tIHRoZSB0b3AgbGVmdCBwb3NpdGlvbiwg
d2UKLSAgICAgICAgLy8gbmVlZCB0byBmaXJzdCBtb3ZlIHRoZSB0b3AgbGVmdCBwb3NpdGlvbiB1
cCBhbmQgdG8gdGhlIGxlZnQsIGFuZCB0aGVuIGFkZCBoYWxmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IG9mIHRoZSBjb250ZW50Ci0gICAgICAgIC8vIGFyZWEgKGluY2x1ZGluZyBvYnNjdXJlZCBpbnNl
dHMpLgotICAgICAgICB0b3BMZWZ0LnggLT0gX29ic2N1cmVkSW5zZXRzLmxlZnQ7Ci0gICAgICAg
IHRvcExlZnQueSAtPSBfb2JzY3VyZWRJbnNldHMudG9wOwotICAgIH0KLQotICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgbmV3Q2VudGVyID0gQ0dQb2ludE1ha2UodG9wTGVmdC54ICsgQ0dSZWN0R2V0
V2lkdGgoc2VsZi5ib3VuZHMpIC8gMiwgdG9wTGVmdC55ICsgQ0dSZWN0R2V0SGVpZ2h0KHNlbGYu
Ym91bmRzKSAvIDIpOwotCi0gICAgaWYgKHNjYWxlICE9IGN1cnJlbnRTY2FsZSkKLSAgICAgICAg
X3BhZ2UtPndpbGxTdGFydFVzZXJUcmlnZ2VyZWRab29taW5nKCk7Ci0KLSAgICBMT0dfV0lUSF9T
VFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIl96b29tVG9Gb2N1c1JlY3Q6IHpvb21pbmcg
dG8gIiA8PCBuZXdDZW50ZXIgPDwgIiBzY2FsZToiIDw8IHNjYWxlKTsKLQotICAgIC8vIFRoZSBu
ZXdDZW50ZXIgaGFzIGJlZW4gY29tcHV0ZWQgaW4gdGhlIG5ldyBzY2FsZSwgYnV0IF96b29tVG9D
ZW50ZXIgZXhwZWN0ZWQgdGhlIGNlbnRlciB0byBiZSBpbiB0aGUgb3JpZ2luYWwgc2NhbGUuCi0g
ICAgbmV3Q2VudGVyLnNjYWxlKDEgLyBzY2FsZSk7Ci0gICAgW19zY3JvbGxWaWV3IF96b29tVG9D
ZW50ZXI6bmV3Q2VudGVyIHNjYWxlOnNjYWxlIGR1cmF0aW9uOmZvcm1Db250cm9sWm9vbUFuaW1h
dGlvbkR1cmF0aW9uIGZvcmNlOllFU107CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAg
IGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJl
Z3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdKTsKKyAgICBpZiAoZmlsZW5hbWUpCisgICAgICAg
IFtmaWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07CisgICAgcmV0dXJu
IFtzZWxmIF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgp
IGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNvbXBsZXRpb246Y29tcGxldGlvbkhhbmRsZXJdOwog
fQogCi0tIChkb3VibGUpX2luaXRpYWxTY2FsZUZhY3RvcgorLSAoX1dLQXR0YWNobWVudCAqKV9p
bnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBw
ZXIgY29udGVudFR5cGU6KE5TU3RyaW5nICopY29udGVudFR5cGUgb3B0aW9uczooX1dLQXR0YWNo
bWVudERpc3BsYXlPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3Vj
Y2VzcykpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICByZXR1cm4gX2luaXRpYWxTY2FsZUZhY3Rv
cjsKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgcmV0dXJuIFtzZWxmIF9pbnNlcnRB
dHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOmNvbnRlbnRU
eXBlIGNvbXBsZXRpb246Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCi0tIChkb3VibGUpX2NvbnRl
bnRab29tU2NhbGUKKy0gKF9XS0F0dGFjaG1lbnQgKilfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxl
V3JhcHBlcjooTlNGaWxlV3JhcHBlciAqKWZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOihOU1N0cmlu
ZyAqKWNvbnRlbnRUeXBlIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0
aW9uSGFuZGxlcgogewotICAgIHJldHVybiBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOwotfQotCi0t
IChkb3VibGUpX3RhcmdldENvbnRlbnRab29tU2NhbGVGb3JSZWN0Oihjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKXRhcmdldFJlY3QgY3VycmVudFNjYWxlOihkb3VibGUpY3VycmVudFNjYWxlIGZp
dEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5p
bXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlCi17Ci0gICAgV2ViQ29y
ZTo6RmxvYXRTaXplIHVub2JzY3VyZWRDb250ZW50U2l6ZShbc2VsZiBfY29udGVudFJlY3RGb3JV
c2VySW50ZXJhY3Rpb25dLnNpemUpOwotICAgIGRvdWJsZSBob3Jpem9udGFsU2NhbGUgPSB1bm9i
c2N1cmVkQ29udGVudFNpemUud2lkdGgoKSAqIGN1cnJlbnRTY2FsZSAvIHRhcmdldFJlY3Qud2lk
dGgoKTsKLSAgICBkb3VibGUgdmVydGljYWxTY2FsZSA9IHVub2JzY3VyZWRDb250ZW50U2l6ZS5o
ZWlnaHQoKSAqIGN1cnJlbnRTY2FsZSAvIHRhcmdldFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBob3Jp
em9udGFsU2NhbGUgPSBzdGQ6Om1pbihzdGQ6Om1heChob3Jpem9udGFsU2NhbGUsIG1pbmltdW1T
Y2FsZSksIG1heGltdW1TY2FsZSk7Ci0gICAgdmVydGljYWxTY2FsZSA9IHN0ZDo6bWluKHN0ZDo6
bWF4KHZlcnRpY2FsU2NhbGUsIG1pbmltdW1TY2FsZSksIG1heGltdW1TY2FsZSk7Ci0KLSAgICBy
ZXR1cm4gZml0RW50aXJlUmVjdCA/IHN0ZDo6bWluKGhvcml6b250YWxTY2FsZSwgdmVydGljYWxT
Y2FsZSkgOiBob3Jpem9udGFsU2NhbGU7Ci19Ci0KLS0gKEJPT0wpX3pvb21Ub1JlY3Q6KFdlYkNv
cmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IHdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQp
b3JpZ2luIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRv
dWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIG1pbmlt
dW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlCi17Ci0gICAgY29u
c3QgZmxvYXQgbWF4aW11bVNjYWxlRmFjdG9yRGVsdGFGb3JQYW5TY3JvbGwgPSAwLjAyOwotCi0g
ICAgZG91YmxlIGN1cnJlbnRTY2FsZSA9IGNvbnRlbnRab29tU2NhbGUoc2VsZik7Ci0gICAgZG91
YmxlIHRhcmdldFNjYWxlID0gW3NlbGYgX3RhcmdldENvbnRlbnRab29tU2NhbGVGb3JSZWN0OnRh
cmdldFJlY3QgY3VycmVudFNjYWxlOmN1cnJlbnRTY2FsZSBmaXRFbnRpcmVSZWN0OmZpdEVudGly
ZVJlY3QgbWluaW11bVNjYWxlOm1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6bWF4aW11bVNjYWxl
XTsKLQotICAgIGlmIChmYWJzKHRhcmdldFNjYWxlIC0gY3VycmVudFNjYWxlKSA8IG1heGltdW1T
Y2FsZUZhY3RvckRlbHRhRm9yUGFuU2Nyb2xsKSB7Ci0gICAgICAgIGlmIChbc2VsZiBfc2Nyb2xs
VG9SZWN0OnRhcmdldFJlY3Qgb3JpZ2luOm9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6bWlu
aW11bVNjcm9sbERpc3RhbmNlXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxz
ZSBpZiAodGFyZ2V0U2NhbGUgIT0gY3VycmVudFNjYWxlKSB7Ci0gICAgICAgIFtzZWxmIF96b29t
VG9SZWN0OnRhcmdldFJlY3QgYXRTY2FsZTp0YXJnZXRTY2FsZSBvcmlnaW46b3JpZ2luIGFuaW1h
dGVkOllFU107Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLSAodm9pZClkaWRNb3ZlVG9XaW5kb3cKLXsKLSAgICBfcGFnZS0+YWN0aXZpdHlT
dGF0ZURpZENoYW5nZShXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjphbGxGbGFncygpKTsKLSAgICBf
cGFnZS0+d2ViVmlld0RpZE1vdmVUb1dpbmRvdygpOwotfQotCi0tICh2b2lkKV9zZXRPcGFxdWVJ
bnRlcm5hbDooQk9PTClvcGFxdWUKLXsKLSAgICBbc3VwZXIgc2V0T3BhcXVlOm9wYXF1ZV07Ci0K
LSAgICBbX2NvbnRlbnRWaWV3IHNldE9wYXF1ZTpvcGFxdWVdOwotCi0gICAgaWYgKCFfcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgT3B0aW9uYWw8V2ViQ29yZTo6Q29sb3I+IGJhY2tncm91
bmRDb2xvcjsKLSAgICBpZiAoIW9wYXF1ZSkKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gV2Vi
Q29yZTo6Q29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBfcGFnZS0+c2V0
QmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRDb2xvcik7Ci0KLSAgICBbc2VsZiBfdXBkYXRlU2Ny
b2xsVmlld0JhY2tncm91bmRdOwotfQotCi0tICh2b2lkKXNldE9wYXF1ZTooQk9PTClvcGFxdWUK
LXsKLSAgICBpZiAob3BhcXVlID09IHNlbGYub3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbc2VsZiBfc2V0T3BhcXVlSW50ZXJuYWw6b3BhcXVlXTsKLX0KLQotLSAodm9pZClzZXRCYWNr
Z3JvdW5kQ29sb3I6KFVJQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3IKLXsKLSAgICBbc3VwZXIgc2V0
QmFja2dyb3VuZENvbG9yOmJhY2tncm91bmRDb2xvcl07Ci0gICAgW19jb250ZW50VmlldyBzZXRC
YWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKLSAgICBbc2VsZiBfdXBkYXRlU2Nyb2xs
Vmlld0JhY2tncm91bmRdOwotfQotCi0tIChCT09MKV9hbGxvd3NEb3VibGVUYXBHZXN0dXJlcwot
ewotICAgIGlmIChfZmFzdENsaWNraW5nSXNEaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuIFlFUzsK
LQotICAgIC8vIElmIHRoZSBwYWdlIGlzIG5vdCB1c2VyIHNjYWxhYmxlLCB3ZSBkb24ndCBhbGxv
dyBkb3VibGUgdGFwIGdlc3R1cmVzLgotICAgIGlmICghW19zY3JvbGxWaWV3IGlzWm9vbUVuYWJs
ZWRdIHx8IFtfc2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxlXSA+PSBbX3Njcm9sbFZpZXcgbWF4
aW11bVpvb21TY2FsZV0pCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIC8vIElmIHRoZSB2aWV3
cG9ydCB3aWR0aCB3YXMgbm90IGV4cGxpY2l0LCB3ZSBhbGxvdyBkb3VibGUgdGFwIGdlc3R1cmVz
LgotICAgIGlmICghX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhwbGljaXQgfHwgX3ZpZXdwb3J0
TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAg
IC8vIElmIHRoZSBwYWdlIHNldCBhIHZpZXdwb3J0IHdpZHRoIHRoYXQgd2Fzbid0IHRoZSBkZXZp
Y2Ugd2lkdGgsIHRoZW4gaXQgd2FzCi0gICAgLy8gc2NhbGVkIGFuZCB0aHVzIHdpbGwgcHJvYmFi
bHkgbmVlZCB0byB6b29tLgotICAgIGlmIChfdmlld3BvcnRNZXRhVGFnV2lkdGggIT0gV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlRGV2aWNlV2lkdGgpCi0gICAgICAgIHJldHVybiBZ
RVM7Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGEgcGFnZSB0aGF0IGFza2VkIGZv
ciB3aWR0aCA9IGRldmljZS13aWR0aC4gSG93ZXZlciwKLSAgICAvLyBpZiB0aGUgY29udGVudCdz
IHdpZHRoIGFuZCBoZWlnaHQgd2VyZSBsYXJnZSwgd2UgbWlnaHQgaGF2ZSBoYWQgdG8gc2hyaW5r
IGl0LgotICAgIC8vIFdlJ2xsIGVuYWJsZSBkb3VibGUgdGFwIHpvb20gd2hlbmV2ZXIgd2UncmUg
bm90IGF0IHRoZSBhY3R1YWwgaW5pdGlhbCBzY2FsZS4KLSAgICByZXR1cm4gIWFyZUVzc2VudGlh
bGx5RXF1YWxBc0Zsb2F0KGNvbnRlbnRab29tU2NhbGUoc2VsZiksIF9pbml0aWFsU2NhbGVGYWN0
b3IpOwotfQotCi0tIChCT09MKV9zdHlsdXNUYXBHZXN0dXJlU2hvdWxkQ3JlYXRlRWRpdGFibGVJ
bWFnZQotewotICAgIHJldHVybiBbX2NvbmZpZ3VyYXRpb24gX2VkaXRhYmxlSW1hZ2VzRW5hYmxl
ZF07Ci19Ci0KLSNwcmFnbWEgbWFyayBVSVNjcm9sbFZpZXdEZWxlZ2F0ZQotCi0tIChCT09MKXVz
ZXNTdGFuZGFyZENvbnRlbnRWaWV3Ci17Ci0gICAgcmV0dXJuICFfY3VzdG9tQ29udGVudFZpZXcg
JiYgIV9wYXNzd29yZFZpZXc7Ci19Ci0KLS0gKENHU2l6ZSlzY3JvbGxWaWV3OihVSVNjcm9sbFZp
ZXcqKXNjcm9sbFZpZXcgY29udGVudFNpemVGb3Jab29tU2NhbGU6KENHRmxvYXQpc2NhbGUgd2l0
aFByb3Bvc2VkU2l6ZTooQ0dTaXplKXByb3Bvc2VkU2l6ZQotewotICAgIHJldHVybiByb3VuZFNj
cm9sbFZpZXdDb250ZW50U2l6ZSgqX3BhZ2UsIHByb3Bvc2VkU2l6ZSk7Ci19Ci0KLS0gKFVJVmll
dyAqKXZpZXdGb3Jab29taW5nSW5TY3JvbGxWaWV3OihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3
Ci17Ci0gICAgQVNTRVJUKF9zY3JvbGxWaWV3ID09IHNjcm9sbFZpZXcpOwotICAgIHJldHVybiBz
ZWxmLl9jdXJyZW50Q29udGVudFZpZXc7Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdp
blpvb21pbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZpZXc6KFVJVmlldyAqKXZp
ZXcKLXsKLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgewotICAgICAg
ICBpZiAoW19jdXN0b21Db250ZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
Yl9zY3JvbGxWaWV3V2lsbEJlZ2luWm9vbWluZzp3aXRoVmlldzopXSkKLSAgICAgICAgICAgIFtf
Y3VzdG9tQ29udGVudFZpZXcgd2ViX3Njcm9sbFZpZXdXaWxsQmVnaW5ab29taW5nOnNjcm9sbFZp
ZXcgd2l0aFZpZXc6dmlld107Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc2Ny
b2xsVmlldy5waW5jaEdlc3R1cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZUJlZ2FuKSB7Ci0gICAgICAgIF9wYWdlLT53aWxsU3RhcnRVc2VyVHJpZ2dlcmVkWm9v
bWluZygpOwotICAgICAgICBbX2NvbnRlbnRWaWV3IHNjcm9sbFZpZXdXaWxsU3RhcnRQYW5PclBp
bmNoR2VzdHVyZV07Ci0gICAgfQotICAgIFtfY29udGVudFZpZXcgd2lsbFN0YXJ0Wm9vbU9yU2Ny
b2xsXTsKLQotI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKLSAgICBbX2NvbnRlbnRWaWV3IGNh
bmNlbFBvaW50ZXJzRm9yR2VzdHVyZVJlY29nbml6ZXI6c2Nyb2xsVmlldy5waW5jaEdlc3R1cmVS
ZWNvZ25pemVyXTsKLSNlbmRpZgotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdXaWxsQmVnaW5EcmFn
Z2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIGlmICghW3NlbGYgdXNlc1N0
YW5kYXJkQ29udGVudFZpZXddKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2Nyb2xsVmll
dy5wYW5HZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVC
ZWdhbikKLSAgICAgICAgW19jb250ZW50VmlldyBzY3JvbGxWaWV3V2lsbFN0YXJ0UGFuT3JQaW5j
aEdlc3R1cmVdOwotCi0gICAgW19jb250ZW50VmlldyB3aWxsU3RhcnRab29tT3JTY3JvbGxdOwot
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0g
ICAgLy8gRklYTUU6IFdlIHdpbGwgd2FudCB0byBkZXRlY3Qgd2hldGhlciBzbmFwcGluZyB3aWxs
IG9jY3VyIGJlZm9yZSBiZWdpbm5pbmcgdG8gZHJhZy4gU2VlIFdlYlBhZ2VQcm94eTo6ZGlkQ29t
bWl0TGF5ZXJUcmVlLgotICAgIFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eSogY29vcmRpbmF0b3IgPSBfcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpOwotICAg
IEFTU0VSVChzY3JvbGxWaWV3ID09IF9zY3JvbGxWaWV3LmdldCgpKTsKLSAgICBDR0Zsb2F0IHNj
cm9sbERlY2VsZXJhdGlvbkZhY3RvciA9IChjb29yZGluYXRvciAmJiBjb29yZGluYXRvci0+c2hv
dWxkU2V0U2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0KCkpID8gVUlTY3JvbGxWaWV3RGVj
ZWxlcmF0aW9uUmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlTm9ybWFsOwot
ICAgIHNjcm9sbFZpZXcuaG9yaXpvbnRhbFNjcm9sbERlY2VsZXJhdGlvbkZhY3RvciA9IHNjcm9s
bERlY2VsZXJhdGlvbkZhY3RvcjsKLSAgICBzY3JvbGxWaWV3LnZlcnRpY2FsU2Nyb2xsRGVjZWxl
cmF0aW9uRmFjdG9yID0gc2Nyb2xsRGVjZWxlcmF0aW9uRmFjdG9yOwotI2VuZGlmCi19Ci0KLS0g
KHZvaWQpX2RpZEZpbmlzaFNjcm9sbGluZwotewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJk
Q29udGVudFZpZXddKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVdOwotICAgIFtfY29udGVudFZpZXcgZGlkRmluaXNoU2Nyb2xs
aW5nXTsKLX0KLQotLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250
ZW50T2Zmc2V0Oihpbm91dCBDR1BvaW50ICopdGFyZ2V0Q29udGVudE9mZnNldAotewotICAgIC8v
IFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS8xNjM3NDc1Mz4gYnkgYXZvaWRpbmcgZGVjZWxl
cmF0aW9uIHdoaWxlCi0gICAgLy8gem9vbWluZy4gV2UnbGwgYW5pbWF0ZSB0byB0aGUgcmlnaHQg
cGxhY2Ugb25jZSB0aGUgem9vbSBmaW5pc2hlcy4KLSAgICBpZiAoW3Njcm9sbFZpZXcgaXNab29t
aW5nXSkKLSAgICAgICAgKnRhcmdldENvbnRlbnRPZmZzZXQgPSBbc2Nyb2xsVmlldyBjb250ZW50
T2Zmc2V0XTsKLSNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCi0gICAgZWxzZSB7Ci0gICAgICAg
IGlmIChbX2NvbnRlbnRWaWV3IHByZXZlbnRzUGFubmluZ0luWEF4aXNdKQotICAgICAgICAgICAg
dGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IHNjcm9sbFZpZXcuY29udGVudE9mZnNldC54OwotICAg
ICAgICBpZiAoW19jb250ZW50VmlldyBwcmV2ZW50c1Bhbm5pbmdJbllBeGlzXSkKLSAgICAgICAg
ICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQueTsK
LSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQotICAgIGlmIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKSkg
ewotICAgICAgICAvLyBGSVhNRTogSGVyZSwgSSdtIGZpbmRpbmcgdGhlIG1heGltdW0gaG9yaXpv
bnRhbC92ZXJ0aWNhbCBzY3JvbGwgb2Zmc2V0cy4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3
YXkgdG8gZG8gdGhpcy4KLSAgICAgICAgQ0dTaXplIG1heFNjcm9sbE9mZnNldHMgPSBDR1NpemVN
YWtlKHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGggLSBzY3JvbGxWaWV3LmJvdW5kcy5zaXpl
LndpZHRoLCBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdodCAtIHNjcm9sbFZpZXcuYm91bmRz
LnNpemUuaGVpZ2h0KTsKLQotICAgICAgICBVSUVkZ2VJbnNldHMgb2JzY3VyZWRJbnNldDsKLQot
ICAgICAgICBpZDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlUHJpdmF0ZSA9IHN0YXRp
Y19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oW3NlbGYgVUlEZWxlZ2F0ZV0pOwotICAg
ICAgICBpZiAoW3VpRGVsZWdhdGVQcml2YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6ZmluYWxPYnNjdXJlZEluc2V0c0ZvclNjcm9sbFZpZXc6d2l0aFZlbG9jaXR5OnRh
cmdldENvbnRlbnRPZmZzZXQ6KV0pCi0gICAgICAgICAgICBvYnNjdXJlZEluc2V0ID0gW3VpRGVs
ZWdhdGVQcml2YXRlIF93ZWJWaWV3OnNlbGYgZmluYWxPYnNjdXJlZEluc2V0c0ZvclNjcm9sbFZp
ZXc6c2Nyb2xsVmlldyB3aXRoVmVsb2NpdHk6dmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDp0
YXJnZXRDb250ZW50T2Zmc2V0XTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb2JzY3VyZWRJ
bnNldCA9IFtzZWxmIF9jb21wdXRlZE9ic2N1cmVkSW5zZXRdOwotCi0gICAgICAgIENHUmVjdCB1
bm9ic2N1cmVkUmVjdCA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgb2JzY3Vy
ZWRJbnNldCk7Ci0KLSAgICAgICAgY29vcmRpbmF0b3ItPmFkanVzdFRhcmdldENvbnRlbnRPZmZz
ZXRGb3JTbmFwcGluZyhtYXhTY3JvbGxPZmZzZXRzLCB2ZWxvY2l0eSwgdW5vYnNjdXJlZFJlY3Qu
b3JpZ2luLnksIHRhcmdldENvbnRlbnRPZmZzZXQpOwotICAgIH0KLSNlbmRpZgotfQotCi0tICh2
b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3
aWxsRGVjZWxlcmF0ZTooQk9PTClkZWNlbGVyYXRlCi17Ci0gICAgLy8gSWYgd2UncmUgZGVjZWxl
cmF0aW5nLCBzY3JvbGwgb2Zmc2V0IHdpbGwgYmUgdXBkYXRlZCB3aGVuIHNjcm9sbFZpZXdEaWRG
aW5pc2hEZWNlbGVyYXRpbmc6IGlzIGNhbGxlZC4KLSAgICBpZiAoIWRlY2VsZXJhdGUpCi0gICAg
ICAgIFtzZWxmIF9kaWRGaW5pc2hTY3JvbGxpbmddOwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdE
aWRFbmREZWNlbGVyYXRpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBbc2Vs
ZiBfZGlkRmluaXNoU2Nyb2xsaW5nXTsKLX0KLQotLSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xs
VG9Ub3A6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBbc2VsZiBfZGlkRmluaXNo
U2Nyb2xsaW5nXTsKLX0KLQotI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKLS0gKENHUG9pbnQp
X3Njcm9sbFZpZXc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgYWRqdXN0ZWRPZmZzZXRGb3JP
ZmZzZXQ6KENHUG9pbnQpb2Zmc2V0IHRyYW5zbGF0aW9uOihDR1BvaW50KXRyYW5zbGF0aW9uIHN0
YXJ0UG9pbnQ6KENHUG9pbnQpc3RhcnQgbG9jYXRpb25JblZpZXc6KENHUG9pbnQpbG9jYXRpb25J
blZpZXcgaG9yaXpvbnRhbFZlbG9jaXR5Oihpbm91dCBkb3VibGUgKilodiB2ZXJ0aWNhbFZlbG9j
aXR5Oihpbm91dCBkb3VibGUgKil2dgotewotICAgIGlmICghW19jb250ZW50VmlldyBwcmV2ZW50
c1Bhbm5pbmdJblhBeGlzXSAmJiAhW19jb250ZW50VmlldyBwcmV2ZW50c1Bhbm5pbmdJbllBeGlz
XSkgewotICAgICAgICBbX2NvbnRlbnRWaWV3IGNhbmNlbFBvaW50ZXJzRm9yR2VzdHVyZVJlY29n
bml6ZXI6c2Nyb2xsVmlldy5wYW5HZXN0dXJlUmVjb2duaXplcl07Ci0gICAgICAgIHJldHVybiBv
ZmZzZXQ7Ci0gICAgfQotCi0gICAgQ0dQb2ludCBhZGp1c3RlZENvbnRlbnRPZmZzZXQgPSBDR1Bv
aW50TWFrZShvZmZzZXQueCwgb2Zmc2V0LnkpOwotICAgIGlmIChbX2NvbnRlbnRWaWV3IHByZXZl
bnRzUGFubmluZ0luWEF4aXNdKQotICAgICAgICBhZGp1c3RlZENvbnRlbnRPZmZzZXQueCA9IHN0
YXJ0Lng7Ci0gICAgaWYgKFtfY29udGVudFZpZXcgcHJldmVudHNQYW5uaW5nSW5ZQXhpc10pCi0g
ICAgICAgIGFkanVzdGVkQ29udGVudE9mZnNldC55ID0gc3RhcnQueTsKLQotICAgIGlmICgoIVtf
Y29udGVudFZpZXcgcHJldmVudHNQYW5uaW5nSW5YQXhpc10gJiYgYWRqdXN0ZWRDb250ZW50T2Zm
c2V0LnggIT0gc3RhcnQueCkKLSAgICAgICAgfHwgKCFbX2NvbnRlbnRWaWV3IHByZXZlbnRzUGFu
bmluZ0luWUF4aXNdICYmIGFkanVzdGVkQ29udGVudE9mZnNldC55ICE9IHN0YXJ0LnkpKSB7Ci0g
ICAgICAgIFtfY29udGVudFZpZXcgY2FuY2VsUG9pbnRlcnNGb3JHZXN0dXJlUmVjb2duaXplcjpz
Y3JvbGxWaWV3LnBhbkdlc3R1cmVSZWNvZ25pemVyXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRq
dXN0ZWRDb250ZW50T2Zmc2V0OwotfQotI2VuZGlmCi0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZFNj
cm9sbDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIGlmICghW3NlbGYgdXNlc1N0
YW5kYXJkQ29udGVudFZpZXddICYmIFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih3ZWJfc2Nyb2xsVmlld0RpZFNjcm9sbDopXSkKLSAgICAgICAgW19jdXN0
b21Db250ZW50VmlldyB3ZWJfc2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICopc2Ny
b2xsVmlld107Ci0KLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVB
ZnRlclNjcm9sbEluVmlldzpzY3JvbGxWaWV3XTsKLQotICAgIGlmIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSogc2Nyb2xsUGVyZkRhdGEgPSBfcGFnZS0+
c2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhKCkpCi0gICAgICAgIHNjcm9sbFBlcmZEYXRhLT5kaWRT
Y3JvbGwoW3NlbGYgdmlzaWJsZVJlY3RJblZpZXdDb29yZGluYXRlc10pOwotfQotCi0tICh2b2lk
KXNjcm9sbFZpZXdEaWRab29tOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgaWYg
KCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10gJiYgW19jdXN0b21Db250ZW50VmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9zY3JvbGxWaWV3RGlkWm9vbTopXSkKLSAg
ICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfc2Nyb2xsVmlld0RpZFpvb206c2Nyb2xsVmll
d107Ci0KLSAgICBbc2VsZiBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOwotICAgIFtzZWxm
IF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3OnNjcm9s
bFZpZXddOwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmRab29taW5nOihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3IHdpdGhWaWV3OihVSVZpZXcgKil2aWV3IGF0U2NhbGU6KENHRmxvYXQp
c2NhbGUKLXsKLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSAmJiBbX2N1
c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViX3Njcm9sbFZp
ZXdEaWRFbmRab29taW5nOndpdGhWaWV3OmF0U2NhbGU6KV0pCi0gICAgICAgIFtfY3VzdG9tQ29u
dGVudFZpZXcgd2ViX3Njcm9sbFZpZXdEaWRFbmRab29taW5nOnNjcm9sbFZpZXcgd2l0aFZpZXc6
dmlldyBhdFNjYWxlOnNjYWxlXTsKLQotICAgIEFTU0VSVChzY3JvbGxWaWV3ID09IF9zY3JvbGxW
aWV3KTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHdoZW4gcmRhcjovL3Byb2JsZW0vMzYwNjU0OTUg
aXMgZml4ZWQuCi0gICAgLy8gV2hlbiByb3RhdGluZyB3aXRoIHR3byBmaW5nZXJzIGRvd24sIFVJ
U2Nyb2xsVmlldyBjYW4gc2V0IGEgYm9ndXMgY29udGVudCB2aWV3IHBvc2l0aW9uLgotICAgIC8v
ICJDZW50ZXIiIGlzIHRvcCBsZWZ0IGJlY2F1c2Ugd2Ugc2V0IHRoZSBhbmNob3JQb2ludCB0byAw
LDAuCi0gICAgW19jb250ZW50VmlldyBzZXRDZW50ZXI6c2VsZi5ib3VuZHMub3JpZ2luXTsKLQot
ICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5W
aWV3OnNjcm9sbFZpZXddOwotICAgIFtfY29udGVudFZpZXcgZGlkWm9vbVRvU2NhbGU6c2NhbGVd
OwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmRTY3JvbGxpbmdBbmltYXRpb246KFVJU2Ny
b2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBbc2VsZiBfZGlkRmluaXNoU2Nyb2xsaW5nXTsK
LX0KLQotLSAodm9pZClfc2Nyb2xsVmlld0RpZEludGVycnVwdERlY2VsZXJhdGluZzooVUlTY3Jv
bGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVu
dFZpZXddKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2NvbnRlbnRWaWV3IGRpZEludGVycnVw
dFNjcm9sbGluZ107Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
QWZ0ZXJTY3JvbGxJblZpZXc6c2Nyb2xsVmlld107Ci19Ci0KLSNwcmFnbWEgbWFyayBlbmQgVUlT
Y3JvbGxWaWV3RGVsZWdhdGUKLQotLSAoVUlWaWV3ICopX2VuY2xvc2luZ1ZpZXdGb3JFeHBvc2Vk
UmVjdENvbXB1dGF0aW9uCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9zY3JvbGxlcl07Ci19Ci0KLS0g
KENHUmVjdClfdmlzaWJsZVJlY3RJbkVuY2xvc2luZ1ZpZXc6KFVJVmlldyAqKWVuY2xvc2luZ1Zp
ZXcKLXsKLSAgICBpZiAoIWVuY2xvc2luZ1ZpZXcpCi0gICAgICAgIHJldHVybiBzZWxmLmJvdW5k
czsKLQotICAgIENHUmVjdCBleHBvc2VkUmVjdCA9IFtlbmNsb3NpbmdWaWV3IGNvbnZlcnRSZWN0
OmVuY2xvc2luZ1ZpZXcuYm91bmRzIHRvVmlldzpzZWxmXTsKLSAgICByZXR1cm4gQ0dSZWN0SW50
ZXJzZWN0c1JlY3QoZXhwb3NlZFJlY3QsIHNlbGYuYm91bmRzKSA/IENHUmVjdEludGVyc2VjdGlv
bihleHBvc2VkUmVjdCwgc2VsZi5ib3VuZHMpIDogQ0dSZWN0WmVybzsKLX0KLQotLSAoQ0dSZWN0
KV92aXNpYmxlQ29udGVudFJlY3QKLXsKLSAgICBpZiAoX2Zyb3plblZpc2libGVDb250ZW50UmVj
dCkKLSAgICAgICAgcmV0dXJuIF9mcm96ZW5WaXNpYmxlQ29udGVudFJlY3QudmFsdWUoKTsKLQot
ICAgIENHUmVjdCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVy
dFJlY3Q6c2VsZi5ib3VuZHMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0KLSAgICBpZiAo
VUlWaWV3ICplbmNsb3NpbmdWaWV3ID0gW3NlbGYgX2VuY2xvc2luZ1ZpZXdGb3JFeHBvc2VkUmVj
dENvbXB1dGF0aW9uXSkgewotICAgICAgICBDR1JlY3Qgdmlld1Zpc2libGVSZWN0ID0gW3NlbGYg
X3Zpc2libGVSZWN0SW5FbmNsb3NpbmdWaWV3OmVuY2xvc2luZ1ZpZXddOwotICAgICAgICBDR1Jl
Y3Qgdmlld1Zpc2libGVDb250ZW50UmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnZpZXdWaXNpYmxl
UmVjdCB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAgICAgICAgdmlzaWJsZVJlY3RJbkNv
bnRlbnRDb29yZGluYXRlcyA9IENHUmVjdEludGVyc2VjdGlvbih2aXNpYmxlUmVjdEluQ29udGVu
dENvb3JkaW5hdGVzLCB2aWV3VmlzaWJsZUNvbnRlbnRSZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlczsKLX0KLQotLy8gQ2FsbGVkIHdoZW4g
c29tZSBhbmNlc3RvciBVSVNjcm9sbFZpZXcgc2Nyb2xscy4KLS0gKHZvaWQpX2RpZFNjcm9sbAot
ewotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xs
SW5WaWV3OltzZWxmIF9zY3JvbGxlcl1dOwotCi0gICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgU2Ny
b2xsaW5nRW5kZWRUaW1lckludGVydmFsID0gMC4wMzI7Ci0gICAgaWYgKCFfZW5jbG9zaW5nU2Ny
b2xsVmlld1Njcm9sbFRpbWVyKSB7Ci0gICAgICAgIF9lbmNsb3NpbmdTY3JvbGxWaWV3U2Nyb2xs
VGltZXIgPSBhZG9wdE5TKFtbTlNUaW1lciBhbGxvY10gaW5pdFdpdGhGaXJlRGF0ZTpbTlNEYXRl
IGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6U2Nyb2xsaW5nRW5kZWRUaW1lckludGVydmFs
XQotICAgICAgICAgICAgaW50ZXJ2YWw6MCB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
X2VuY2xvc2luZ1Njcm9sbGVyU2Nyb2xsaW5nRW5kZWQ6KSB1c2VySW5mbzpuaWwgcmVwZWF0czpZ
RVNdKTsKLSAgICAgICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGFkZFRpbWVyOl9lbmNsb3Np
bmdTY3JvbGxWaWV3U2Nyb2xsVGltZXIuZ2V0KCkgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9k
ZV07Ci0gICAgfQotICAgIF9kaWRTY3JvbGxTaW5jZUxhc3RUaW1lckZpcmUgPSBZRVM7Ci19Ci0K
LS0gKHZvaWQpX2VuY2xvc2luZ1Njcm9sbGVyU2Nyb2xsaW5nRW5kZWQ6KE5TVGltZXIgKil0aW1l
cgotewotICAgIGlmIChfZGlkU2Nyb2xsU2luY2VMYXN0VGltZXJGaXJlKSB7Ci0gICAgICAgIF9k
aWRTY3JvbGxTaW5jZUxhc3RUaW1lckZpcmUgPSBOTzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Ci0gICAgW19l
bmNsb3NpbmdTY3JvbGxWaWV3U2Nyb2xsVGltZXIgaW52YWxpZGF0ZV07Ci0gICAgX2VuY2xvc2lu
Z1Njcm9sbFZpZXdTY3JvbGxUaW1lciA9IG5pbDsKLX0KLQotLSAoVUlFZGdlSW5zZXRzKV9zY3Jv
bGxWaWV3U3lzdGVtQ29udGVudEluc2V0Ci17Ci0gICAgLy8gSXQncyBub3Qgc2FmZSB0byBhY2Nl
c3MgdGhlIHNjcm9sbCB2aWV3J3Mgc2FmZUFyZWFJbnNldHMgb3IgX3N5c3RlbUNvbnRlbnRJbnNl
dCBmcm9tCi0gICAgLy8gaW5zaWRlIG91ciBsYXlvdXRTdWJ2aWV3cyBpbXBsZW1lbnRhdGlvbiwg
YmVjYXVzZSB0aGV5IGFyZW4ndCB1cGRhdGVkIHVudGlsIGFmdGVyd2FyZHMuCi0gICAgLy8gSW5z
dGVhZCwgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgdGhlIFVJU2Nyb2xsVmlldyBhbmQgV0tXZWJW
aWV3IGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlCi0gICAgLy8gc3BhY2UsIGFuZCBtYXAgdGhl
IFdLV2ViVmlldydzIG93biBpbnNldHMgaW50byB0aGUgc2Nyb2xsIHZpZXcgbWFudWFsbHkuCi0g
ICAgcmV0dXJuIFVJRWRnZUluc2V0c0FkZChbX3Njcm9sbFZpZXcgX2NvbnRlbnRTY3JvbGxJbnNl
dF0sIHNlbGYuc2FmZUFyZWFJbnNldHMsIFtfc2Nyb2xsVmlldyBfZWRnZXNBcHBseWluZ1NhZmVB
cmVhSW5zZXRzVG9Db250ZW50SW5zZXRdKTsKLX0KLQotLSAoV2ViQ29yZTo6RmxvYXRTaXplKWFj
dGl2ZVZpZXdMYXlvdXRTaXplOihjb25zdCBDR1JlY3QmKWJvdW5kcwotewotICAgIGlmIChfdmll
d0xheW91dFNpemVPdmVycmlkZSkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0U2l6ZShf
dmlld0xheW91dFNpemVPdmVycmlkZS52YWx1ZSgpKTsKLQotI2lmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDExMDAwMAotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUo
VUlFZGdlSW5zZXRzSW5zZXRSZWN0KENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLnNpemUud2lkdGgs
IGJvdW5kcy5zaXplLmhlaWdodCksIHNlbGYuX3Njcm9sbFZpZXdTeXN0ZW1Db250ZW50SW5zZXQp
LnNpemUpOwotI2Vsc2UKLSAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRTaXplIHsgYm91bmRzLnNp
emUgfTsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOihX
ZWJDb3JlOjpGbG9hdFNpemUpdmlld0xheW91dFNpemUKLXsKLSAgICBpZiAoX2xhc3RTZW50Vmll
d0xheW91dFNpemUgJiYgQ0dTaXplRXF1YWxUb1NpemUoX2xhc3RTZW50Vmlld0xheW91dFNpemUu
dmFsdWUoKSwgdmlld0xheW91dFNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lU
SF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1bV0tXZWJWaWV3ICIgPDwgX3BhZ2Ut
PmlkZW50aWZpZXIoKSA8PCAiIF9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOl0gIiA8PCB2aWV3
TGF5b3V0U2l6ZSA8PCAiIGNvbnRlbnRab29tU2NhbGUgIiA8PCBjb250ZW50Wm9vbVNjYWxlKHNl
bGYpKTsKLSAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uVmlld0xheW91dFNpemUo
dmlld0xheW91dFNpemUsIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKSwgX3BhZ2UtPm1p
bmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpKTsKLSAgICBfbGFzdFNlbnRWaWV3TGF5b3V0U2l6
ZSA9IHZpZXdMYXlvdXRTaXplOwotfQotCi0tICh2b2lkKV9kaXNwYXRjaFNldE1heGltdW1Vbm9i
c2N1cmVkU2l6ZTooV2ViQ29yZTo6RmxvYXRTaXplKW1heGltdW1Vbm9ic2N1cmVkU2l6ZQotewot
ICAgIGlmIChfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUgJiYgQ0dTaXplRXF1YWxUb1Np
emUoX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplLnZhbHVlKCksIG1heGltdW1Vbm9ic2N1
cmVkU2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wYWdlLT5zZXRNYXhpbXVtVW5vYnNj
dXJlZFNpemUobWF4aW11bVVub2JzY3VyZWRTaXplKTsKLSAgICBfbGFzdFNlbnRNYXhpbXVtVW5v
YnNjdXJlZFNpemUgPSBtYXhpbXVtVW5vYnNjdXJlZFNpemU7Ci19Ci0KLS0gKHZvaWQpX2Rpc3Bh
dGNoU2V0RGV2aWNlT3JpZW50YXRpb246KGludDMyX3QpZGV2aWNlT3JpZW50YXRpb24KLXsKLSAg
ICBpZiAoX2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gJiYgX2xhc3RTZW50RGV2aWNlT3JpZW50
YXRpb24udmFsdWUoKSA9PSBkZXZpY2VPcmllbnRhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgX3BhZ2UtPnNldERldmljZU9yaWVudGF0aW9uKGRldmljZU9yaWVudGF0aW9uKTsKLSAgICBf
bGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiA9IGRldmljZU9yaWVudGF0aW9uOwotfQotCi0tICh2
b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAotewotICAgIENHUmVjdCBib3VuZHMgPSBzZWxmLmJv
dW5kczsKLSAgICBbX3Njcm9sbFZpZXcgc2V0RnJhbWU6Ym91bmRzXTsKLQotICAgIGlmIChfZHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1v
ZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgIGlmICghX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUp
Ci0gICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpbc2VsZiBhY3Rp
dmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc11dOwotICAgICAgICBpZiAoIV9tYXhpbXVtVW5v
YnNjdXJlZFNpemVPdmVycmlkZSkKLSAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldE1heGlt
dW1Vbm9ic2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUoYm91bmRzLnNpemUpXTsKLQotICAg
ICAgICBCT09MIHNpemVDaGFuZ2VkID0gTk87Ci0gICAgICAgIGlmIChhdXRvIGRyYXdpbmdBcmVh
ID0gX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCi0gICAgICAgICAgICBzaXplQ2hhbmdlZCA9IGRyYXdp
bmdBcmVhLT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUoYm91bmRzLnNpemUpKTsKLQotICAgICAg
ICBpZiAoc2l6ZUNoYW5nZWQgJiBbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCi0gICAg
ICAgICAgICBbX2NvbnRlbnRWaWV3IHNldFNpemVDaGFuZ2VkU2luY2VMYXN0VmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlOllFU107Ci0gICAgfQotCi0gICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJf
c2V0TWluaW11bVNpemU6Ym91bmRzLnNpemVdOwotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVD
b250ZW50UmVjdFVwZGF0ZV07Ci19Ci0KLS8vIFVub2JzY3VyZWQgY29udGVudCByZWN0IHdoZXJl
IHRoZSB1c2VyIGNhbiBpbnRlcmFjdC4gV2hlbiB0aGUga2V5Ym9hcmQgaXMgdXAsIHRoaXMgc2hv
dWxkIGJlIHRoZSBhcmVhIGFib3ZlIG9yIGJlbG93IHRoZSBrZXlib2FyZCwgd2hlcmV2ZXIgdGhl
cmUgaXMgZW5vdWdoIHNwYWNlLgotLSAoQ0dSZWN0KV9jb250ZW50UmVjdEZvclVzZXJJbnRlcmFj
dGlvbgotewotICAgIC8vIEZJWE1FOiBoYW5kbGUgc3BsaXQga2V5Ym9hcmQuCi0gICAgVUlFZGdl
SW5zZXRzIG9ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVkSW5zZXRzOwotICAgIG9ic2N1cmVkSW5z
ZXRzLmJvdHRvbSA9IHN0ZDo6bWF4KF9vYnNjdXJlZEluc2V0cy5ib3R0b20sIF9pbnB1dFZpZXdC
b3VuZHMuc2l6ZS5oZWlnaHQpOwotICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdCA9IFVJRWRnZUlu
c2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgb2JzY3VyZWRJbnNldHMpOwotICAgIHJldHVybiBb
c2VsZiBjb252ZXJ0UmVjdDp1bm9ic2N1cmVkUmVjdCB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRl
bnRWaWV3XTsKLX0KLQotLy8gSWRlYWxseSBVSVNjcm9sbFZpZXcgd291bGQgZXhwb3NlIHRoaXMg
Zm9yIHVzOiA8cmRhcjovL3Byb2JsZW0vMjEzOTQ1Njc+LgotLSAoQk9PTClfc2Nyb2xsVmlld0lz
UnViYmVyQmFuZGluZwotewotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gX3BhZ2UtPmRl
dmljZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBDR1BvaW50IGNvbnRlbnRPZmZzZXQgPSBbX3Njcm9s
bFZpZXcgY29udGVudE9mZnNldF07Ci0gICAgQ0dQb2ludCBib3VuZGVkT2Zmc2V0ID0gY29udGVu
dE9mZnNldEJvdW5kZWRJblZhbGlkUmFuZ2UoX3Njcm9sbFZpZXcuZ2V0KCksIGNvbnRlbnRPZmZz
ZXQpOwotICAgIHJldHVybiAhcG9pbnRzRXF1YWxJbkRldmljZVBpeGVscyhjb250ZW50T2Zmc2V0
LCBib3VuZGVkT2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0KLSNpZiBfX0lQSE9ORV9P
U19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKLS0gKHZvaWQpc2FmZUFyZWFJbnNldHNE
aWRDaGFuZ2UKLXsKLSAgICBbc3VwZXIgc2FmZUFyZWFJbnNldHNEaWRDaGFuZ2VdOwotCi0gICAg
W3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKLX0KLSNlbmRpZgotCi0t
ICh2b2lkKV9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZQotewotICAgIC8vIEZvciB2
aXNpYmxlIHJlY3QgdXBkYXRlcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgVUlTY3Jv
bGxWaWV3LCBqdXN0IGNvbnNpZGVyIG91ciBvd24gc2Nyb2xsZXIuCi0gICAgW3NlbGYgX3NjaGVk
dWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJTY3JvbGxJblZpZXc6X3Njcm9sbFZpZXcu
Z2V0KCldOwotfQotCi0tIChCT09MKV9zY3JvbGxWaWV3SXNJblN0YWJsZVN0YXRlOihVSVNjcm9s
bFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgQk9PTCBpc1N0YWJsZVN0YXRlID0gIShbc2Nyb2xs
VmlldyBpc0RyYWdnaW5nXSB8fCBbc2Nyb2xsVmlldyBpc0RlY2VsZXJhdGluZ10gfHwgW3Njcm9s
bFZpZXcgaXNab29taW5nXSB8fCBbc2Nyb2xsVmlldyBfaXNBbmltYXRpbmdab29tXSB8fCBbc2Ny
b2xsVmlldyBfaXNTY3JvbGxpbmdUb1RvcF0pOwotCi0gICAgaWYgKGlzU3RhYmxlU3RhdGUgJiYg
c2Nyb2xsVmlldyA9PSBfc2Nyb2xsVmlldy5nZXQoKSkKLSAgICAgICAgaXNTdGFibGVTdGF0ZSA9
ICFfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseTsKLQotICAgIGlmIChpc1N0
YWJsZVN0YXRlICYmIHNjcm9sbFZpZXcgPT0gX3Njcm9sbFZpZXcuZ2V0KCkpCi0gICAgICAgIGlz
U3RhYmxlU3RhdGUgPSAhW3NlbGYgX3Njcm9sbFZpZXdJc1J1YmJlckJhbmRpbmddOwotCi0gICAg
aWYgKGlzU3RhYmxlU3RhdGUpCi0gICAgICAgIGlzU3RhYmxlU3RhdGUgPSAhc2Nyb2xsVmlldy5f
aXNJbnRlcnJ1cHRpbmdEZWNlbGVyYXRpb247Ci0KLSAgICBpZiAoTlNOdW1iZXIgKnN0YWJsZU92
ZXJyaWRlID0gc2VsZi5fc3RhYmxlU3RhdGVPdmVycmlkZSkKLSAgICAgICAgaXNTdGFibGVTdGF0
ZSA9IHN0YWJsZU92ZXJyaWRlLmJvb2xWYWx1ZTsKLQotICAgIHJldHVybiBpc1N0YWJsZVN0YXRl
OwotfQotCi0tICh2b2lkKV9hZGRVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RQcmVDb21taXRIYW5k
bGVyCi17Ci0gICAgaWYgKF9oYXNFbnRlcmVkRGVhbGxvYykgewotICAgICAgICBSRUxFQVNFX0xP
R19GQVVMVChWaWV3U3RhdGUsICItW1dLV2ViVmlldyAlcCBfYWRkVXBkYXRlVmlzaWJsZUNvbnRl
bnRSZWN0UHJlQ29tbWl0SGFuZGxlcl06IEF0dGVtcHRlZCB0byBhZGQgcHJlLWNvbW1pdCBoYW5k
bGVyIHVuZGVyIC1kZWFsbG9jLiBCYWlsaW5nLiIsIHNlbGYpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byByZXRhaW5lZFNlbGYgPSByZXRhaW5QdHIoc2VsZik7Ci0gICAgW0NB
VHJhbnNhY3Rpb24gYWRkQ29tbWl0SGFuZGxlcjpbcmV0YWluZWRTZWxmXSB7Ci0gICAgICAgIFdL
V2ViVmlldyAqd2ViVmlldyA9IHJldGFpbmVkU2VsZi5nZXQoKTsKLSAgICAgICAgaWYgKCFbd2Vi
VmlldyBfaXNWYWxpZF0pIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKHdlYlZpZXcuX3Bh
Z2UgJiYgd2ViVmlldy5fcGFnZS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIFZpZXdTdGF0
ZSwgIkluIENBVHJhbnNhY3Rpb24gcHJlQ29tbWl0SGFuZGxlciwgV0tXZWJWaWV3ICVwIGlzIGlu
dmFsaWQiLCB3ZWJWaWV3KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIEB0cnkgewotICAgICAgICAgICAgW3dlYlZpZXcgX3VwZGF0ZVZpc2libGVDb250ZW50UmVj
dHNdOwotICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSUYod2ViVmlldy5fcGFnZSAmJiB3ZWJWaWV3Ll9wYWdlLT5pc0Fs
d2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgVmlld1N0YXRlLCAiSW4gQ0FUcmFuc2FjdGlvbiBwcmVD
b21taXRIYW5kbGVyLCAtW1dLV2ViVmlldyAlcCBfdXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c10g
dGhyZXcgYW4gZXhjZXB0aW9uIiwgd2ViVmlldyk7Ci0gICAgICAgIH0KLSAgICAgICAgd2ViVmll
dy0+X2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRlID0gTk87Ci0gICAgfSBmb3JQaGFzZTpr
Q0FUcmFuc2FjdGlvblBoYXNlUHJlQ29tbWl0XTsKLX0KLQotLSAodm9pZClfc2NoZWR1bGVWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNjcm9sbEluVmlldzooVUlTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldwotewotICAgIF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVTY2hlZHVsZWRGcm9tU2Ny
b2xsVmlld0luU3RhYmxlU3RhdGUgPSBbc2VsZiBfc2Nyb2xsVmlld0lzSW5TdGFibGVTdGF0ZTpz
Y3JvbGxWaWV3XTsKLQotICAgIGlmIChfaGFzU2NoZWR1bGVkVmlzaWJsZVJlY3RVcGRhdGUpIHsK
LSAgICAgICAgYXV0byB0aW1lTm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgIGlm
ICgodGltZU5vdyAtIF90aW1lT2ZSZXF1ZXN0Rm9yVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKSA+
IGRlbGF5QmVmb3JlTm9WaXNpYmxlQ29udGVudHNSZWN0c0xvZ2dpbmcpIHsKLSAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIi1bV0tXZWJWaWV3ICVwIF9zY2hlZHVsZVZpc2libGVD
b250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3XTogX2hhc1NjaGVkdWxlZFZpc2libGVS
ZWN0VXBkYXRlIGlzIHRydWUgYnV0IGhhdmVuJ3QgdXBkYXRlZCB2aXNpYmxlIGNvbnRlbnQgcmVj
dHMgZm9yICUuMmZzIChsYXN0IHVwZGF0ZSB3YXMgJS4yZnMgYWdvKSAtIHZhbGlkICVkIiwKLSAg
ICAgICAgICAgICAgICBzZWxmLCAodGltZU5vdyAtIF90aW1lT2ZSZXF1ZXN0Rm9yVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlKS52YWx1ZSgpLCAodGltZU5vdyAtIF90aW1lT2ZMYXN0VmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlKS52YWx1ZSgpLCBbc2VsZiBfaXNWYWxpZF0pOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBfaGFzU2NoZWR1bGVkVmlzaWJsZVJlY3RVcGRh
dGUgPSBZRVM7Ci0gICAgX3RpbWVPZlJlcXVlc3RGb3JWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKLQotICAgIENBVHJhbnNhY3Rpb25QaGFzZSB0cmFuc2Fj
dGlvblBoYXNlID0gW0NBVHJhbnNhY3Rpb24gY3VycmVudFBoYXNlXTsKLSAgICBpZiAodHJhbnNh
Y3Rpb25QaGFzZSA9PSBrQ0FUcmFuc2FjdGlvblBoYXNlTnVsbCB8fCB0cmFuc2FjdGlvblBoYXNl
ID09IGtDQVRyYW5zYWN0aW9uUGhhc2VQcmVMYXlvdXQpIHsKLSAgICAgICAgW3NlbGYgX2FkZFVw
ZGF0ZVZpc2libGVDb250ZW50UmVjdFByZUNvbW1pdEhhbmRsZXJdOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3JldGFpbmVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gewotICAgICAgICBXS1dlYlZpZXcgKndl
YlZpZXcgPSByZXRhaW5lZFNlbGYuZ2V0KCk7Ci0gICAgICAgIGlmICghW3dlYlZpZXcgX2lzVmFs
aWRdKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBbd2ViVmlldyBfYWRkVXBkYXRlVmlz
aWJsZUNvbnRlbnRSZWN0UHJlQ29tbWl0SGFuZGxlcl07CisjaWYgRU5BQkxFKEFUVEFDSE1FTlRf
RUxFTUVOVCkKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5n
KCk7CisgICAgYXV0byBhdHRhY2htZW50ID0gQVBJOjpBdHRhY2htZW50OjpjcmVhdGUoaWRlbnRp
ZmllciwgKl9wYWdlKTsKKyAgICBhdHRhY2htZW50LT5zZXRGaWxlV3JhcHBlckFuZFVwZGF0ZUNv
bnRlbnRUeXBlKGZpbGVXcmFwcGVyLCBjb250ZW50VHlwZSk7CisgICAgX3BhZ2UtPmluc2VydEF0
dGFjaG1lbnQoYXR0YWNobWVudC5jb3B5UmVmKCksIFtjYXB0dXJlZEhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVy
cm9yKSB7CisgICAgICAgIGlmIChjYXB0dXJlZEhhbmRsZXIpCisgICAgICAgICAgICBjYXB0dXJl
ZEhhbmRsZXIoZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKICAg
ICB9KTsKLX0KLQotc3RhdGljIGJvb2wgc2Nyb2xsVmlld0NhblNjcm9sbChVSVNjcm9sbFZpZXcg
KnNjcm9sbFZpZXcpCi17Ci0gICAgaWYgKCFzY3JvbGxWaWV3KQotICAgICAgICByZXR1cm4gTk87
Ci0KLSAgICBVSUVkZ2VJbnNldHMgY29udGVudEluc2V0ID0gc2Nyb2xsVmlldy5jb250ZW50SW5z
ZXQ7Ci0gICAgQ0dTaXplIGNvbnRlbnRTaXplID0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZTsKLSAg
ICBDR1NpemUgYm91bmRzU2l6ZSA9IHNjcm9sbFZpZXcuYm91bmRzLnNpemU7Ci0KLSAgICByZXR1
cm4gKGNvbnRlbnRTaXplLndpZHRoICsgY29udGVudEluc2V0LmxlZnQgKyBjb250ZW50SW5zZXQu
cmlnaHQpID4gYm91bmRzU2l6ZS53aWR0aAotICAgICAgICB8fCAoY29udGVudFNpemUuaGVpZ2h0
ICsgY29udGVudEluc2V0LnRvcCArIGNvbnRlbnRJbnNldC5ib3R0b20pID4gYm91bmRzU2l6ZS5o
ZWlnaHQ7Ci19Ci0KLS0gKENHUmVjdClfY29udGVudEJvdW5kc0V4dGVuZGVkRm9yUnViYmVyYmFu
ZGluZ1dpdGhTY2FsZTooQ0dGbG9hdClzY2FsZUZhY3RvcgotewotICAgIENHUG9pbnQgY29udGVu
dE9mZnNldCA9IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKLSAgICBDR1BvaW50IGJvdW5k
ZWRPZmZzZXQgPSBjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5n
ZXQoKSwgY29udGVudE9mZnNldCk7Ci0KLSAgICBDR0Zsb2F0IGhvcmlvbnRhbFJ1YmJlcmJhbmRB
bW91bnRJbkNvbnRlbnRDb29yZGluYXRlcyA9IChjb250ZW50T2Zmc2V0LnggLSBib3VuZGVkT2Zm
c2V0LngpIC8gc2NhbGVGYWN0b3I7Ci0gICAgQ0dGbG9hdCB2ZXJ0aWNhbFJ1YmJlcmJhbmRBbW91
bnRJbkNvbnRlbnRDb29yZGluYXRlcyA9IChjb250ZW50T2Zmc2V0LnkgLSBib3VuZGVkT2Zmc2V0
LnkpIC8gc2NhbGVGYWN0b3I7Ci0KLSAgICBDR1JlY3QgZXh0ZW5kZWRCb3VuZHMgPSBbX2NvbnRl
bnRWaWV3IGJvdW5kc107Ci0KLSAgICBpZiAoaG9yaW9udGFsUnViYmVyYmFuZEFtb3VudEluQ29u
dGVudENvb3JkaW5hdGVzIDwgMCkgewotICAgICAgICBleHRlbmRlZEJvdW5kcy5vcmlnaW4ueCAr
PSBob3Jpb250YWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXM7Ci0gICAgICAg
IGV4dGVuZGVkQm91bmRzLnNpemUud2lkdGggLT0gaG9yaW9udGFsUnViYmVyYmFuZEFtb3VudElu
Q29udGVudENvb3JkaW5hdGVzOwotICAgIH0gZWxzZSBpZiAoaG9yaW9udGFsUnViYmVyYmFuZEFt
b3VudEluQ29udGVudENvb3JkaW5hdGVzID4gMCkKLSAgICAgICAgZXh0ZW5kZWRCb3VuZHMuc2l6
ZS53aWR0aCArPSBob3Jpb250YWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXM7
Ci0KLSAgICBpZiAodmVydGljYWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXMg
PCAwKSB7Ci0gICAgICAgIGV4dGVuZGVkQm91bmRzLm9yaWdpbi55ICs9IHZlcnRpY2FsUnViYmVy
YmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzOwotICAgICAgICBleHRlbmRlZEJvdW5kcy5z
aXplLmhlaWdodCAtPSB2ZXJ0aWNhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29yZGluYXRl
czsKLSAgICB9IGVsc2UgaWYgKHZlcnRpY2FsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENvb3Jk
aW5hdGVzID4gMCkKLSAgICAgICAgZXh0ZW5kZWRCb3VuZHMuc2l6ZS5oZWlnaHQgKz0gdmVydGlj
YWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXM7Ci0KLSAgICByZXR1cm4gZXh0
ZW5kZWRCb3VuZHM7Ci19CiAKLS0gKHZvaWQpX3VwZGF0ZVZpc2libGVDb250ZW50UmVjdHMKLXsK
LSAgICBCT09MIGluU3RhYmxlU3RhdGUgPSBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlU2NoZWR1
bGVkRnJvbVNjcm9sbFZpZXdJblN0YWJsZVN0YXRlOwotCi0gICAgaWYgKCFbc2VsZiB1c2VzU3Rh
bmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgW19wYXNzd29yZFZpZXcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9jb21wdXRlZENvbnRl
bnRJbnNldERpZENoYW5nZV07Ci0gICAgICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50
UmVjdHNGb3JBbnlSZWFzb24gPSBZRVM7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQo
IiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfdXBkYXRlVmlzaWJsZUNvbnRlbnRS
ZWN0czpdIC0gdXNlc1N0YW5kYXJkQ29udGVudFZpZXcgaXMgTk8sIGJhaWxpbmciLCBzZWxmLCBf
cGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXV0byB0aW1lTm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgaWYgKF90aW1l
T2ZGaXJzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29tbWl0KSB7Ci0gICAg
ICAgIGF1dG8gdGltZVNpbmNlRmlyc3RSZXF1ZXN0V2l0aFBlbmRpbmdDb21taXQgPSB0aW1lTm93
IC0gKl90aW1lT2ZGaXJzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29tbWl0
OwotICAgICAgICBpZiAodGltZVNpbmNlRmlyc3RSZXF1ZXN0V2l0aFBlbmRpbmdDb21taXQgPiBk
ZWxheUJlZm9yZU5vQ29tbWl0c0xvZ2dpbmcpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9B
TExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX3VwZGF0ZVZpc2libGVD
b250ZW50UmVjdHM6XSAtIGhhdmUgbm90IHJlY2VpdmVkIGEgY29tbWl0ICUuMmZzIGFmdGVyIHZp
c2libGUgY29udGVudCByZWN0IHVwZGF0ZTsgbGFzdFRyYW5zYWN0aW9uSUQgJWxsdSIsIHNlbGYs
IF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSwgdGltZVNpbmNlRmlyc3RSZXF1ZXN0V2l0
aFBlbmRpbmdDb21taXQudmFsdWUoKSwgX2xhc3RUcmFuc2FjdGlvbklELnRvVUludDY0KCkpOwot
ICAgIH0KLQotICAgIGlmIChfaW52b2tpbmdVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrKSB7
Ci0gICAgICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVSVNjcm9sbFZp
ZXdEZWxlZ2F0ZUNhbGxiYWNrID0gWUVTOwotICAgICAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxl
Q29udGVudFJlY3RzRm9yQW55UmVhc29uID0gWUVTOwotICAgICAgICBSRUxFQVNFX0xPR19JRl9B
TExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX3VwZGF0ZVZpc2libGVD
b250ZW50UmVjdHM6XSAtIF9pbnZva2luZ1VJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2sgaXMg
WUVTLCBiYWlsaW5nIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9k
ZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nCi0gICAg
ICAgIHx8IChfbmVlZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZSAm
JiAhW19jb250ZW50VmlldyBzaXplQ2hhbmdlZFNpbmNlTGFzdFZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZV0pCi0gICAgICAgIHx8IFtfc2Nyb2xsVmlldyBpc1pvb21Cb3VuY2luZ10KLSAgICAgICAg
fHwgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNldHNGb3JLZXlib2FyZCkgewotICAg
ICAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yQW55UmVhc29uID0gWUVT
OwotICAgICAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVW5zdGFibGVT
Y3JvbGxWaWV3ID0gWUVTOwotICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFn
ZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX3VwZGF0ZVZpc2libGVDb250ZW50UmVjdHM6XSAt
IHNjcm9sbCB2aWV3IHN0YXRlIGlzIG5vbi1zdGFibGUsIGJhaWxpbmcgKF9keW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlICVkLCBfbmVlZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1h
aW5GcmFtZSAlZCwgc2l6ZUNoYW5nZWRTaW5jZUxhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUg
JWQsIFtfc2Nyb2xsVmlldyBpc1pvb21Cb3VuY2luZ10gJWQsIF9jdXJyZW50bHlBZGp1c3RpbmdT
Y3JvbGxWaWV3SW5zZXRzRm9yS2V5Ym9hcmQgJWQpIiwKLSAgICAgICAgICAgIHNlbGYsIF9wYWdl
LT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSwgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUsIF9u
ZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lLCBbX2NvbnRlbnRW
aWV3IHNpemVDaGFuZ2VkU2luY2VMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXSwgW19zY3Jv
bGxWaWV3IGlzWm9vbUJvdW5jaW5nXSwgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNl
dHNGb3JLZXlib2FyZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoX2RpZERl
ZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvckFueVJlYXNvbikKLSAgICAgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF91cGRh
dGVWaXNpYmxlQ29udGVudFJlY3RzOl0gLSBwZXJmb3JtaW5nIGZpcnN0IHZpc2libGUgY29udGVu
dCByZWN0IHVwZGF0ZSBhZnRlciBkZWZlcnJpbmcgdXBkYXRlcyIsIHNlbGYsIF9wYWdlLT5pZGVu
dGlmaWVyKCkudG9VSW50NjQoKSk7Ci0KLSAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVu
dFJlY3RzRm9yVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayA9IE5POwotICAgIF9kaWREZWZl
clVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVbnN0YWJsZVNjcm9sbFZpZXcgPSBOTzsKLSAg
ICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yQW55UmVhc29uID0gTk87Ci0K
LSAgICBDR1JlY3QgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIF92aXNp
YmxlQ29udGVudFJlY3RdOwotCi0gICAgVUlFZGdlSW5zZXRzIGNvbXB1dGVkQ29udGVudEluc2V0
VW5hZGp1c3RlZEZvcktleWJvYXJkID0gW3NlbGYgX2NvbXB1dGVkT2JzY3VyZWRJbnNldF07Ci0g
ICAgaWYgKCFfaGF2ZVNldE9ic2N1cmVkSW5zZXRzKQotICAgICAgICBjb21wdXRlZENvbnRlbnRJ
bnNldFVuYWRqdXN0ZWRGb3JLZXlib2FyZC5ib3R0b20gLT0gX3RvdGFsU2Nyb2xsVmlld0JvdHRv
bUluc2V0QWRqdXN0bWVudEZvcktleWJvYXJkOwotCi0gICAgQ0dGbG9hdCBzY2FsZUZhY3RvciA9
IGNvbnRlbnRab29tU2NhbGUoc2VsZik7Ci0KLSAgICBDR1JlY3QgdW5vYnNjdXJlZFJlY3QgPSBV
SUVkZ2VJbnNldHNJbnNldFJlY3Qoc2VsZi5ib3VuZHMsIGNvbXB1dGVkQ29udGVudEluc2V0VW5h
ZGp1c3RlZEZvcktleWJvYXJkKTsKLSAgICBDR1JlY3QgdW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRD
b29yZGluYXRlcyA9IF9mcm96ZW5Vbm9ic2N1cmVkQ29udGVudFJlY3QgPyBfZnJvemVuVW5vYnNj
dXJlZENvbnRlbnRSZWN0LnZhbHVlKCkgOiBbc2VsZiBjb252ZXJ0UmVjdDp1bm9ic2N1cmVkUmVj
dCB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAgICB1bm9ic2N1cmVkUmVjdEluQ29udGVu
dENvb3JkaW5hdGVzID0gQ0dSZWN0SW50ZXJzZWN0aW9uKHVub2JzY3VyZWRSZWN0SW5Db250ZW50
Q29vcmRpbmF0ZXMsIFtzZWxmIF9jb250ZW50Qm91bmRzRXh0ZW5kZWRGb3JSdWJiZXJiYW5kaW5n
V2l0aFNjYWxlOnNjYWxlRmFjdG9yXSk7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGxvZ2ljIGNv
bXB1dGVzIHRoZSBleHRlbnQgdG8gd2hpY2ggdGhlIGJvdHRvbSwgdG9wLCBsZWZ0IGFuZCByaWdo
dCBjb250ZW50IGluc2V0cyBhcmUgdmlzaWJsZS4KLSAgICBhdXRvIHNjcm9sbFZpZXdJbnNldHMg
PSBbX3Njcm9sbFZpZXcgY29udGVudEluc2V0XTsKLSAgICBhdXRvIHNjcm9sbFZpZXdCb3VuZHMg
PSBbX3Njcm9sbFZpZXcgYm91bmRzXTsKLSAgICBhdXRvIHNjcm9sbFZpZXdDb250ZW50U2l6ZSA9
IFtfc2Nyb2xsVmlldyBjb250ZW50U2l6ZV07Ci0gICAgYXV0byBzY3JvbGxWaWV3T3JpZ2luSW5j
bHVkaW5nSW5zZXQgPSBVSUVkZ2VJbnNldHNJbnNldFJlY3Qoc2Nyb2xsVmlld0JvdW5kcywgY29t
cHV0ZWRDb250ZW50SW5zZXRVbmFkanVzdGVkRm9yS2V5Ym9hcmQpLm9yaWdpbjsKLSAgICBhdXRv
IG1heGltdW1WZXJ0aWNhbFNjcm9sbEV4dGVudFdpdGhvdXRSZXZlYWxpbmdCb3R0b21Db250ZW50
SW5zZXQgPSBzY3JvbGxWaWV3Q29udGVudFNpemUuaGVpZ2h0IC0gQ0dSZWN0R2V0SGVpZ2h0KHNj
cm9sbFZpZXdCb3VuZHMpOwotICAgIGF1dG8gbWF4aW11bUhvcml6b250YWxTY3JvbGxFeHRlbnRX
aXRob3V0UmV2ZWFsaW5nUmlnaHRDb250ZW50SW5zZXQgPSBzY3JvbGxWaWV3Q29udGVudFNpemUu
d2lkdGggLSBDR1JlY3RHZXRXaWR0aChzY3JvbGxWaWV3Qm91bmRzKTsKLSAgICBhdXRvIGNvbnRl
bnRJbnNldHMgPSBVSUVkZ2VJbnNldHNaZXJvOwotICAgIGlmIChzY3JvbGxWaWV3SW5zZXRzLmxl
ZnQgPiAwICYmIHNjcm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJbnNldC54IDwgMCkKLSAgICAgICAg
Y29udGVudEluc2V0cy5sZWZ0ID0gc3RkOjptaW4oLXNjcm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJ
bnNldC54LCBzY3JvbGxWaWV3SW5zZXRzLmxlZnQpIC8gc2NhbGVGYWN0b3I7Ci0KLSAgICBpZiAo
c2Nyb2xsVmlld0luc2V0cy50b3AgPiAwICYmIHNjcm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJbnNl
dC55IDwgMCkKLSAgICAgICAgY29udGVudEluc2V0cy50b3AgPSBzdGQ6Om1pbigtc2Nyb2xsVmll
d09yaWdpbkluY2x1ZGluZ0luc2V0LnksIHNjcm9sbFZpZXdJbnNldHMudG9wKSAvIHNjYWxlRmFj
dG9yOwotCi0gICAgaWYgKHNjcm9sbFZpZXdJbnNldHMucmlnaHQgPiAwICYmIHNjcm9sbFZpZXdP
cmlnaW5JbmNsdWRpbmdJbnNldC54ID4gbWF4aW11bUhvcml6b250YWxTY3JvbGxFeHRlbnRXaXRo
b3V0UmV2ZWFsaW5nUmlnaHRDb250ZW50SW5zZXQpCi0gICAgICAgIGNvbnRlbnRJbnNldHMucmln
aHQgPSBzdGQ6Om1pbihzY3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5nSW5zZXQueCAtIG1heGltdW1I
b3Jpem9udGFsU2Nyb2xsRXh0ZW50V2l0aG91dFJldmVhbGluZ1JpZ2h0Q29udGVudEluc2V0LCBz
Y3JvbGxWaWV3SW5zZXRzLnJpZ2h0KSAvIHNjYWxlRmFjdG9yOwotCi0gICAgaWYgKHNjcm9sbFZp
ZXdJbnNldHMuYm90dG9tID4gMCAmJiBzY3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5nSW5zZXQueSA+
IG1heGltdW1WZXJ0aWNhbFNjcm9sbEV4dGVudFdpdGhvdXRSZXZlYWxpbmdCb3R0b21Db250ZW50
SW5zZXQpCi0gICAgICAgIGNvbnRlbnRJbnNldHMuYm90dG9tID0gc3RkOjptaW4oc2Nyb2xsVmll
d09yaWdpbkluY2x1ZGluZ0luc2V0LnkgLSBtYXhpbXVtVmVydGljYWxTY3JvbGxFeHRlbnRXaXRo
b3V0UmV2ZWFsaW5nQm90dG9tQ29udGVudEluc2V0LCBzY3JvbGxWaWV3SW5zZXRzLmJvdHRvbSkg
LyBzY2FsZUZhY3RvcjsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKGluU3RhYmxlU3RhdGUpIHsKLSAgICAgICAgV2ViS2l0
OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KiBjb29yZGluYXRvciA9IF9wYWdlLT5z
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7Ci0gICAgICAgIGlmIChjb29yZGluYXRvciAmJiBj
b29yZGluYXRvci0+aGFzQWN0aXZlU25hcFBvaW50KCkpIHsKLSAgICAgICAgICAgIENHUG9pbnQg
Y3VycmVudFBvaW50ID0gW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOwotICAgICAgICAgICAg
Q0dQb2ludCBhY3RpdmVQb2ludCA9IGNvb3JkaW5hdG9yLT5uZWFyZXN0QWN0aXZlQ29udGVudElu
c2V0QWRqdXN0ZWRTbmFwUG9pbnQodW5vYnNjdXJlZFJlY3Qub3JpZ2luLnksIGN1cnJlbnRQb2lu
dCk7Ci0KLSAgICAgICAgICAgIGlmICghQ0dQb2ludEVxdWFsVG9Qb2ludChhY3RpdmVQb2ludCwg
Y3VycmVudFBvaW50KSkgewotICAgICAgICAgICAgICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+
IHN0cm9uZ1Njcm9sbFZpZXcgPSBfc2Nyb2xsVmlldzsKLSAgICAgICAgICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nU2Nyb2xsVmlldywgYWN0
aXZlUG9pbnRdIHsKLSAgICAgICAgICAgICAgICAgICAgW3N0cm9uZ1Njcm9sbFZpZXcgc2V0Q29u
dGVudE9mZnNldDphY3RpdmVQb2ludCBhbmltYXRlZDpOT107Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIFtfY29udGVu
dFZpZXcgZGlkVXBkYXRlVmlzaWJsZVJlY3Q6dmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRl
cwotICAgICAgICB1bm9ic2N1cmVkUmVjdDp1bm9ic2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5h
dGVzCi0gICAgICAgIGNvbnRlbnRJbnNldHM6Y29udGVudEluc2V0cwotICAgICAgICB1bm9ic2N1
cmVkUmVjdEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzOnVub2JzY3VyZWRSZWN0Ci0gICAgICAgIG9i
c2N1cmVkSW5zZXRzOl9vYnNjdXJlZEluc2V0cwotICAgICAgICB1bm9ic2N1cmVkU2FmZUFyZWFJ
bnNldHM6W3NlbGYgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRdCi0gICAgICAgIGlu
cHV0Vmlld0JvdW5kczpfaW5wdXRWaWV3Qm91bmRzCi0gICAgICAgIHNjYWxlOnNjYWxlRmFjdG9y
IG1pbmltdW1TY2FsZTpbX3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2FsZV0KLSAgICAgICAgaW5T
dGFibGVTdGF0ZTppblN0YWJsZVN0YXRlCi0gICAgICAgIGlzQ2hhbmdpbmdPYnNjdXJlZEluc2V0
c0ludGVyYWN0aXZlbHk6X2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkKLSAg
ICAgICAgZW5jbG9zZWRJblNjcm9sbGFibGVBbmNlc3RvclZpZXc6c2Nyb2xsVmlld0NhblNjcm9s
bChbc2VsZiBfc2Nyb2xsZXJdKV07Ci0KLSAgICB3aGlsZSAoIV92aXNpYmxlQ29udGVudFJlY3RV
cGRhdGVDYWxsYmFja3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gY2FsbGJhY2sgPSBfdmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzLnRha2VMYXN0KCk7Ci0gICAgICAgIGNhbGxi
YWNrKCk7Ci0gICAgfQotCi0gICAgaWYgKCh0aW1lTm93IC0gX3RpbWVPZlJlcXVlc3RGb3JWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGUpID4gZGVsYXlCZWZvcmVOb1Zpc2libGVDb250ZW50c1JlY3Rz
TG9nZ2luZykKLSAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgLVtXS1dlYlZpZXcg
X3VwZGF0ZVZpc2libGVDb250ZW50UmVjdHM6XSBmaW5hbGx5IHJhbiAlLjJmcyBhZnRlciBiZWlu
ZyBzY2hlZHVsZWQiLCBzZWxmLCAodGltZU5vdyAtIF90aW1lT2ZSZXF1ZXN0Rm9yVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlKS52YWx1ZSgpKTsKLQotICAgIF90aW1lT2ZMYXN0VmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlID0gdGltZU5vdzsKLSAgICBpZiAoIV90aW1lT2ZGaXJzdFZpc2libGVDb250
ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29tbWl0KQotICAgICAgICBfdGltZU9mRmlyc3RWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVXaXRoUGVuZGluZ0NvbW1pdCA9IHRpbWVOb3c7Ci19Ci0KLS0g
KHZvaWQpX2RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lCi17Ci0gICAgaWYgKF9n
ZXN0dXJlQ29udHJvbGxlcikKLSAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5kaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpOwotfQotCi1zdGF0aWMgV2ViQ29yZTo6RmxvYXRT
aXplIGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6ZShXS1dlYlZpZXcgKndlYlZpZXcsIGNvbnN0
IENHUmVjdCYgYm91bmRzKQotewotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUod2ViVmll
dy0+X21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlLnZhbHVlT3IoYm91bmRzLnNpemUpKTsK
LX0KLQotc3RhdGljIGludDMyX3QgYWN0aXZlT3JpZW50YXRpb24oV0tXZWJWaWV3ICp3ZWJWaWV3
KQotewotICAgIHJldHVybiB3ZWJWaWV3LT5fb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24g
PyBkZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNlT3JpZW50YXRpb24od2ViVmlldy0+X2lu
dGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUpIDogd2ViVmlldy0+X3BhZ2UtPmRldmljZU9yaWVu
dGF0aW9uKCk7Ci19Ci0KLS0gKHZvaWQpX2NhbmNlbEFuaW1hdGVkUmVzaXplCi17Ci0gICAgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9j
YW5jZWxBbmltYXRlZFJlc2l6ZV0gX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgJWQiLCBzZWxm
LCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIF9keW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlKTsKLQotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIV9jdXN0b21Db250ZW50VmlldykgewotICAgICAgICBpZiAoX3Jlc2l6ZUFuaW1h
dGlvblZpZXcpIHsKLSAgICAgICAgICAgIE5TVUludGVnZXIgaW5kZXhPZlJlc2l6ZUFuaW1hdGlv
blZpZXcgPSBbW19zY3JvbGxWaWV3IHN1YnZpZXdzXSBpbmRleE9mT2JqZWN0Ol9yZXNpemVBbmlt
YXRpb25WaWV3LmdldCgpXTsKLSAgICAgICAgICAgIFtfc2Nyb2xsVmlldyBpbnNlcnRTdWJ2aWV3
Ol9jb250ZW50Vmlldy5nZXQoKSBhdEluZGV4OmluZGV4T2ZSZXNpemVBbmltYXRpb25WaWV3XTsK
LSAgICAgICAgICAgIFtfc2Nyb2xsVmlldyBpbnNlcnRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5z
Y2FsZWRWaWV3XSBhdEluZGV4OmluZGV4T2ZSZXNpemVBbmltYXRpb25WaWV3ICsgMV07Ci0gICAg
ICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAg
ICAgICAgICBfcmVzaXplQW5pbWF0aW9uVmlldyA9IG5pbDsKLSAgICAgICAgfQotCi0gICAgICAg
IFtfY29udGVudFZpZXcgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgX3Jlc2l6ZUFuaW1hdGlvblRy
YW5zZm9ybUFkanVzdG1lbnRzID0gQ0FUcmFuc2Zvcm0zRElkZW50aXR5OwotICAgIH0KLQotICAg
IF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlOjpOb3RSZXNpemluZzsKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJl
Y3RVcGRhdGVdOwotfQotCi0tICh2b2lkKV9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplCi17Ci0g
ICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdw
b3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfY29u
dGVudFZpZXcgc2V0SGlkZGVuOk5PXTsKLQotICAgIGlmICghX3Jlc2l6ZUFuaW1hdGlvblZpZXcp
IHsKLSAgICAgICAgLy8gUGFyYW5vaWEuIElmIF9yZXNpemVBbmltYXRpb25WaWV3IGlzIG51bGwg
d2UnbGwgZW5kIHVwIHNldHRpbmcgYSB6ZXJvIHNjYWxlIG9uIHRoZSBjb250ZW50IHZpZXcuCi0g
ICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJWaWV3IF9kaWRDb21wbGV0
ZUFuaW1hdGVkUmVzaXplOl0gLSBfcmVzaXplQW5pbWF0aW9uVmlldyBpcyBuaWwiLCBzZWxmKTsK
LSAgICAgICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVkUmVzaXplXTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1
KSAtW1dLV2ViVmlldyBfZGlkQ29tcGxldGVBbmltYXRlZFJlc2l6ZV0iLCBzZWxmLCBfcGFnZS0+
aWRlbnRpZmllcigpLnRvVUludDY0KCkpOwotCi0gICAgTlNVSW50ZWdlciBpbmRleE9mUmVzaXpl
QW5pbWF0aW9uVmlldyA9IFtbX3Njcm9sbFZpZXcgc3Vidmlld3NdIGluZGV4T2ZPYmplY3Q6X3Jl
c2l6ZUFuaW1hdGlvblZpZXcuZ2V0KCldOwotICAgIFtfc2Nyb2xsVmlldyBpbnNlcnRTdWJ2aWV3
Ol9jb250ZW50Vmlldy5nZXQoKSBhdEluZGV4OmluZGV4T2ZSZXNpemVBbmltYXRpb25WaWV3XTsK
LSAgICBbX3Njcm9sbFZpZXcgaW5zZXJ0U3VidmlldzpbX2NvbnRlbnRWaWV3IHVuc2NhbGVkVmll
d10gYXRJbmRleDppbmRleE9mUmVzaXplQW5pbWF0aW9uVmlldyArIDFdOwotCi0gICAgQ0FMYXll
ciAqY29udGVudExheWVyID0gW19jb250ZW50VmlldyBsYXllcl07Ci0gICAgQ0dGbG9hdCBhZGp1
c3RtZW50U2NhbGUgPSBfcmVzaXplQW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMubTExOwot
ICAgIGNvbnRlbnRMYXllci5zdWJsYXllclRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RJZGVudGl0
eTsKLQotICAgIENHRmxvYXQgYW5pbWF0aW5nU2NhbGVUYXJnZXQgPSBbW19yZXNpemVBbmltYXRp
b25WaWV3IGxheWVyXSB0cmFuc2Zvcm1dLm0xMTsKLSAgICBDQVRyYW5zZm9ybTNEIGNvbnRlbnRM
YXllclRyYW5zZm9ybSA9IGNvbnRlbnRMYXllci50cmFuc2Zvcm07Ci0gICAgQ0dGbG9hdCBjdXJy
ZW50U2NhbGUgPSBbW19yZXNpemVBbmltYXRpb25WaWV3IGxheWVyXSB0cmFuc2Zvcm1dLm0xMSAq
IGNvbnRlbnRMYXllclRyYW5zZm9ybS5tMTE7Ci0KLSAgICAvLyBXZSBjYW5ub3QgdXNlIFtVSVNj
cm9sbFZpZXcgc2V0Wm9vbVNjYWxlOl0gZGlyZWN0bHkgYmVjYXVzZSB0aGUgVUlTY3JvbGxWaWV3
IGRlbGVnYXRlIHdvdWxkIGdldCBhIGNhbGxiYWNrIHdpdGgKLSAgICAvLyBhbiBpbnZhbGlkIGNv
bnRlbnRPZmZzZXQuIFRoZSByZWFsIGNvbnRlbnQgb2Zmc2V0IGlzIG9ubHkgc2V0IGJlbG93Lgot
ICAgIC8vIFNpbmNlIHRoZXJlIGlzIG5vIHB1YmxpYyBBUEkgZm9yIHNldHRpbmcgYm90aCB0aGUg
em9vbVNjYWxlIGFuZCB0aGUgY29udGVudE9mZnNldCwgd2Ugc2V0IHRoZSB6b29tU2NhbGUgbWFu
dWFsbHkKLSAgICAvLyBvbiB0aGUgem9vbSBsYXllciBhbmQgdGhlbiBvbmx5IGNoYW5nZSB0aGUg
Y29udGVudE9mZnNldC4KLSAgICBDR0Zsb2F0IGFkanVzdGVkU2NhbGUgPSBhZGp1c3RtZW50U2Nh
bGUgKiBjdXJyZW50U2NhbGU7Ci0gICAgY29udGVudExheWVyVHJhbnNmb3JtLm0xMSA9IGFkanVz
dGVkU2NhbGU7Ci0gICAgY29udGVudExheWVyVHJhbnNmb3JtLm0yMiA9IGFkanVzdGVkU2NhbGU7
Ci0gICAgY29udGVudExheWVyLnRyYW5zZm9ybSA9IGNvbnRlbnRMYXllclRyYW5zZm9ybTsKLQot
ICAgIENHUG9pbnQgY3VycmVudFNjcm9sbE9mZnNldCA9IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zm
c2V0XTsKLSAgICBkb3VibGUgaG9yaXpvbnRhbFNjcm9sbEFkanVzdGVtZW50ID0gX3Jlc2l6ZUFu
aW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRzLm00MSAqIGFuaW1hdGluZ1NjYWxlVGFyZ2V0Owot
ICAgIGRvdWJsZSB2ZXJ0aWNhbFNjcm9sbEFkanVzdG1lbnQgPSBfcmVzaXplQW5pbWF0aW9uVHJh
bnNmb3JtQWRqdXN0bWVudHMubTQyICogYW5pbWF0aW5nU2NhbGVUYXJnZXQ7Ci0KLSAgICBbX3Nj
cm9sbFZpZXcgc2V0Q29udGVudFNpemU6cm91bmRTY3JvbGxWaWV3Q29udGVudFNpemUoKl9wYWdl
LCBbX2NvbnRlbnRWaWV3IGZyYW1lXS5zaXplKV07Ci0gICAgW19zY3JvbGxWaWV3IHNldENvbnRl
bnRPZmZzZXQ6Q0dQb2ludE1ha2UoY3VycmVudFNjcm9sbE9mZnNldC54IC0gaG9yaXpvbnRhbFNj
cm9sbEFkanVzdGVtZW50LCBjdXJyZW50U2Nyb2xsT2Zmc2V0LnkgLSB2ZXJ0aWNhbFNjcm9sbEFk
anVzdG1lbnQpXTsKLQotICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKLSAgICBfcmVzaXplQW5pbWF0aW9uVmlldyA9IG5pbDsKLSAgICBfcmVzaXplQW5pbWF0
aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMgPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7Ci0KLSAgICBf
ZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRl
TW9kZTo6Tm90UmVzaXppbmc7Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlXTsKLQotICAgIENHUmVjdCBuZXdCb3VuZHMgPSBzZWxmLmJvdW5kczsKLSAgICBhdXRv
IG5ld1ZpZXdMYXlvdXRTaXplID0gW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6bmV3Qm91bmRz
XTsKLSAgICBhdXRvIG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IGFjdGl2ZU1heGltdW1Vbm9i
c2N1cmVkU2l6ZShzZWxmLCBuZXdCb3VuZHMpOwotICAgIGludDMyX3QgbmV3T3JpZW50YXRpb24g
PSBhY3RpdmVPcmllbnRhdGlvbihzZWxmKTsKLQotICAgIGlmICghX2xhc3RTZW50Vmlld0xheW91
dFNpemUgfHwgbmV3Vmlld0xheW91dFNpemUgIT0gX2xhc3RTZW50Vmlld0xheW91dFNpemUudmFs
dWUoKSkKLSAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0Vmlld0xheW91dFNpemU6bmV3Vmlld0xh
eW91dFNpemVdOwotCi0gICAgaWYgKCFfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUgfHwg
bmV3TWF4aW11bVVub2JzY3VyZWRTaXplICE9IF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6
ZS52YWx1ZSgpKQotICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRNYXhpbXVtVW5vYnNjdXJlZFNp
emU6V2ViQ29yZTo6RmxvYXRTaXplKG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZSldOwotCi0gICAg
aWYgKCFfbGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiB8fCBuZXdPcmllbnRhdGlvbiAhPSBfbGFz
dFNlbnREZXZpY2VPcmllbnRhdGlvbi52YWx1ZSgpKQotICAgICAgICBbc2VsZiBfZGlzcGF0Y2hT
ZXREZXZpY2VPcmllbnRhdGlvbjpuZXdPcmllbnRhdGlvbl07Ci0KLSAgICB3aGlsZSAoIV9jYWxs
YmFja3NEZWZlcnJlZER1cmluZ1Jlc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIF9jYWxsYmFja3NE
ZWZlcnJlZER1cmluZ1Jlc2l6ZS50YWtlTGFzdCgpKCk7Ci19Ci0KLS0gKHZvaWQpX2RpZEZpbmlz
aExvYWRGb3JNYWluRnJhbWUKLXsKLSAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAg
ICBfZ2VzdHVyZUNvbnRyb2xsZXItPmRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoKTsKLX0KLQot
LSAodm9pZClfZGlkRmFpbExvYWRGb3JNYWluRnJhbWUKLXsKLSAgICBpZiAoX2dlc3R1cmVDb250
cm9sbGVyKQotICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmRpZEZhaWxMb2FkRm9yTWFpbkZy
YW1lKCk7Ci19Ci0KLS0gKHZvaWQpX2RpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJh
bWU6KFdlYktpdDo6U2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUpbmF2aWdhdGlvblR5cGUKLXsK
LSAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uOnRv
QVBJKG5hdmlnYXRpb25UeXBlKV07Ci0KLSAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQotICAg
ICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWlu
RnJhbWUobmF2aWdhdGlvblR5cGUpOwotfQotCi0tICh2b2lkKV9rZXlib2FyZENoYW5nZWRXaXRo
SW5mbzooTlNEaWN0aW9uYXJ5ICopa2V5Ym9hcmRJbmZvIGFkanVzdFNjcm9sbFZpZXc6KEJPT0wp
YWRqdXN0U2Nyb2xsVmlldwotewotICAgIE5TVmFsdWUgKmVuZEZyYW1lVmFsdWUgPSBba2V5Ym9h
cmRJbmZvIG9iamVjdEZvcktleTpVSUtleWJvYXJkRnJhbWVFbmRVc2VySW5mb0tleV07Ci0gICAg
aWYgKCFlbmRGcmFtZVZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUga2V5Ym9h
cmQgcmVjdCBpcyBhbHdheXMgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLiBJbiB0aGUgdmlldyBzZXJ2
aWNlcyBjYXNlIHRoZSB3aW5kb3cgZG9lcyBub3QKLSAgICAvLyBoYXZlIHRoZSBpbnRlcmZhY2Ug
b3JpZW50YXRpb24gcm90YXRpb24gdHJhbnNmb3JtYXRpb247IGl0cyBob3N0IGRvZXMuIFNvLCBp
dCBtYWtlcyBubyBzZW5zZSB0bwotICAgIC8vIGNsaXAgdGhlIGtleWJvYXJkIHJlY3QgYWdhaW5z
dCBpdHMgc2NyZWVuLgotICAgIGlmIChbW3NlbGYgd2luZG93XSBfaXNIb3N0ZWRJbkFub3RoZXJQ
cm9jZXNzXSkKLSAgICAgICAgX2lucHV0Vmlld0JvdW5kcyA9IFtzZWxmLndpbmRvdyBjb252ZXJ0
UmVjdDpbZW5kRnJhbWVWYWx1ZSBDR1JlY3RWYWx1ZV0gZnJvbVdpbmRvdzpuaWxdOwotICAgIGVs
c2UKLSAgICAgICAgX2lucHV0Vmlld0JvdW5kcyA9IFtzZWxmLndpbmRvdyBjb252ZXJ0UmVjdDpD
R1JlY3RJbnRlcnNlY3Rpb24oW2VuZEZyYW1lVmFsdWUgQ0dSZWN0VmFsdWVdLCBzZWxmLndpbmRv
dy5zY3JlZW4uYm91bmRzKSBmcm9tV2luZG93Om5pbF07Ci0KLSAgICBpZiAoW1tVSVBlcmlwaGVy
YWxIb3N0IHNoYXJlZEluc3RhbmNlXSBpc1VuZG9ja2VkXSkKLSAgICAgICAgX2lucHV0Vmlld0Jv
dW5kcyA9IENHUmVjdFplcm87Ci0KLSAgICBpZiAoYWRqdXN0U2Nyb2xsVmlldykgewotICAgICAg
ICBDR0Zsb2F0IGJvdHRvbUluc2V0QmVmb3JlQWRqdXN0bWVudCA9IFtfc2Nyb2xsVmlldyBjb250
ZW50SW5zZXRdLmJvdHRvbTsKLSAgICAgICAgU2V0Rm9yU2NvcGU8Qk9PTD4gaW5zZXRBZGp1c3Rt
ZW50R3VhcmQoX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNldHNGb3JLZXlib2FyZCwg
WUVTKTsKLSAgICAgICAgW19zY3JvbGxWaWV3IF9hZGp1c3RGb3JBdXRvbWF0aWNLZXlib2FyZElu
Zm86a2V5Ym9hcmRJbmZvIGFuaW1hdGVkOllFUyBsYXN0QWRqdXN0bWVudDomX2xhc3RBZGp1c3Rt
ZW50Rm9yU2Nyb2xsZXJdOwotICAgICAgICBDR0Zsb2F0IGJvdHRvbUluc2V0QWZ0ZXJBZGp1c3Rt
ZW50ID0gW19zY3JvbGxWaWV3IGNvbnRlbnRJbnNldF0uYm90dG9tOwotICAgICAgICAvLyBGSVhN
RTogVGhpcyAidG90YWwgYm90dG9tIGNvbnRlbnQgaW5zZXQgYWRqdXN0bWVudCIgbWVjaGFuaXNt
IGhhc24ndCB3b3JrZWQgc2luY2UgaU9TIDExLCBzaW5jZSAtX2FkanVzdEZvckF1dG9tYXRpY0tl
eWJvYXJkSW5mbzphbmltYXRlZDpsYXN0QWRqdXN0bWVudDoKLSAgICAgICAgLy8gbm8gbG9uZ2Vy
IHNldHMgLVtVSVNjcm9sbFZpZXcgY29udGVudEluc2V0XSBmb3IgYXBwcyBsaW5rZWQgb24gb3Ig
YWZ0ZXIgaU9TIDExLiBXZSBzaG91bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyBsb2dpYywgc2lu
Y2UgdGhlIG9yaWdpbmFsIGJ1ZyB0aGlzIHdhcwotICAgICAgICAvLyBpbnRlbmRlZCB0byBmaXgs
IDxyZGFyOi8vcHJvYmxlbS8yMzIwMjI1ND4sIHJlbWFpbnMgZml4ZWQgdGhyb3VnaCBvdGhlciBt
ZWFucy4KLSAgICAgICAgaWYgKGJvdHRvbUluc2V0QmVmb3JlQWRqdXN0bWVudCAhPSBib3R0b21J
bnNldEFmdGVyQWRqdXN0bWVudCkKLSAgICAgICAgICAgIF90b3RhbFNjcm9sbFZpZXdCb3R0b21J
bnNldEFkanVzdG1lbnRGb3JLZXlib2FyZCArPSBib3R0b21JbnNldEFmdGVyQWRqdXN0bWVudCAt
IGJvdHRvbUluc2V0QmVmb3JlQWRqdXN0bWVudDsKLSAgICB9Ci0KLSAgICBbc2VsZiBfc2NoZWR1
bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwotfQotCi0tIChCT09MKV9zaG91bGRVcGRhdGVL
ZXlib2FyZFdpdGhJbmZvOihOU0RpY3Rpb25hcnkgKilrZXlib2FyZEluZm8KLXsKLSAgICBpZiAo
W19jb250ZW50VmlldyBpc0ZvY3VzaW5nRWxlbWVudF0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0K
LSAgICBOU051bWJlciAqaXNMb2NhbEtleWJvYXJkID0gW2tleWJvYXJkSW5mbyB2YWx1ZUZvcktl
eTpVSUtleWJvYXJkSXNMb2NhbFVzZXJJbmZvS2V5XTsKLSAgICByZXR1cm4gaXNMb2NhbEtleWJv
YXJkICYmICFpc0xvY2FsS2V5Ym9hcmQuYm9vbFZhbHVlOwotfQotCi0tICh2b2lkKV9rZXlib2Fy
ZFdpbGxDaGFuZ2VGcmFtZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBp
ZiAoW3NlbGYgX3Nob3VsZFVwZGF0ZUtleWJvYXJkV2l0aEluZm86bm90aWZpY2F0aW9uLnVzZXJJ
bmZvXSkKLSAgICAgICAgW3NlbGYgX2tleWJvYXJkQ2hhbmdlZFdpdGhJbmZvOm5vdGlmaWNhdGlv
bi51c2VySW5mbyBhZGp1c3RTY3JvbGxWaWV3OllFU107Ci19Ci0KLS0gKHZvaWQpX2tleWJvYXJk
RGlkQ2hhbmdlRnJhbWU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3Nl
bGYgX2tleWJvYXJkQ2hhbmdlZFdpdGhJbmZvOm5vdGlmaWNhdGlvbi51c2VySW5mbyBhZGp1c3RT
Y3JvbGxWaWV3Ok5PXTsKLX0KLQotLSAodm9pZClfa2V5Ym9hcmRXaWxsU2hvdzooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoW3NlbGYgX3Nob3VsZFVwZGF0ZUtleWJv
YXJkV2l0aEluZm86bm90aWZpY2F0aW9uLnVzZXJJbmZvXSkKLSAgICAgICAgW3NlbGYgX2tleWJv
YXJkQ2hhbmdlZFdpdGhJbmZvOm5vdGlmaWNhdGlvbi51c2VySW5mbyBhZGp1c3RTY3JvbGxWaWV3
OllFU107Ci0KLSAgICBfcGFnZS0+c2V0SXNLZXlib2FyZEFuaW1hdGluZ0luKHRydWUpOwotfQot
Ci0tICh2b2lkKV9rZXlib2FyZERpZFNob3c6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Ci17Ci0gICAgX3BhZ2UtPnNldElzS2V5Ym9hcmRBbmltYXRpbmdJbihmYWxzZSk7Ci19Ci0KLS0g
KHZvaWQpX2tleWJvYXJkV2lsbEhpZGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17
Ci0gICAgaWYgKFtfY29udGVudFZpZXcgc2hvdWxkSWdub3JlS2V5Ym9hcmRXaWxsSGlkZU5vdGlm
aWNhdGlvbl0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9rZXlib2FyZENoYW5nZWRX
aXRoSW5mbzpub3RpZmljYXRpb24udXNlckluZm8gYWRqdXN0U2Nyb2xsVmlldzpZRVNdOwotfQot
Ci1zdGF0aWMgdm9pZCBoYXJkd2FyZUtleWJvYXJkQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNr
KENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkKiBvYnNlcnZlciwgQ0ZTdHJpbmdSZWYsIGNv
bnN0IHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYpCi17Ci0gICAgQVNTRVJUKG9ic2VydmVyKTsKLSAg
ICBXS1dlYlZpZXcgKndlYlZpZXcgPSAoX19icmlkZ2UgV0tXZWJWaWV3ICopb2JzZXJ2ZXI7Ci0g
ICAgW3dlYlZpZXctPl9jb250ZW50VmlldyBfaGFyZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0eUNo
YW5nZWRdOwotICAgIHdlYlZpZXcuX3BhZ2UtPmhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlD
aGFuZ2VkKEdTRXZlbnRJc0hhcmR3YXJlS2V5Ym9hcmRBdHRhY2hlZCgpKTsKLX0KLQotLSAodm9p
ZClfd2luZG93RGlkUm90YXRlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAg
IGlmICghX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uKQotICAgICAgICBbc2VsZiBfZGlz
cGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjpkZXZpY2VPcmllbnRhdGlvbigpXTsKLX0KLQotLSAo
dm9pZClfY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KLXsKLSAgICBfcGFnZS0+Y29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZShbc2Vs
ZiBfY29udGVudFNpemVDYXRlZ29yeV0pOwotfQotCi0tIChOU1N0cmluZyAqKV9jb250ZW50U2l6
ZUNhdGVnb3J5Ci17Ci0gICAgcmV0dXJuIFtbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlv
bl0gcHJlZmVycmVkQ29udGVudFNpemVDYXRlZ29yeV07Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlTZXR0aW5nc0RpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsK
LSAgICBfcGFnZS0+YWNjZXNzaWJpbGl0eVNldHRpbmdzRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZv
aWQpc2V0QWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM6KEJPT0wpYWxsb3dzQmFj
a0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMKLXsKLSAgICBpZiAoX2FsbG93c0JhY2tGb3J3YXJk
TmF2aWdhdGlvbkdlc3R1cmVzID09IGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2Vz
dHVyZXMgPSBhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKLQotICAgIGlmIChh
bGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyAmJiAhX2dlc3R1cmVDb250cm9sbGVy
KSB7Ci0gICAgICAgIF9nZXN0dXJlQ29udHJvbGxlciA9IG1ha2VVbmlxdWU8V2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI+KCpfcGFnZSk7Ci0gICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+
aW5zdGFsbFN3aXBlSGFuZGxlcihzZWxmLCBbc2VsZiBzY3JvbGxWaWV3XSk7Ci0gICAgICAgIGlm
IChXS1dlYlZpZXcgKmFsdGVybmF0ZVdlYlZpZXcgPSBbX2NvbmZpZ3VyYXRpb24gX2FsdGVybmF0
ZVdlYlZpZXdGb3JOYXZpZ2F0aW9uR2VzdHVyZXNdKQotICAgICAgICAgICAgX2dlc3R1cmVDb250
cm9sbGVyLT5zZXRBbHRlcm5hdGVCYWNrRm9yd2FyZExpc3RTb3VyY2VQYWdlKGFsdGVybmF0ZVdl
YlZpZXctPl9wYWdlLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVy
KQotICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPnNldFN3aXBlR2VzdHVyZUVuYWJsZWQoYWxs
b3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMpOwotCi0gICAgX3BhZ2UtPnNldFNob3Vs
ZFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdHMoYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2Vz
dHVyZXMpOwotfQotCi0tIChCT09MKWFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVz
Ci17Ci0gICAgcmV0dXJuIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKLX0K
LQotLSAoQk9PTClfaXNOYXZpZ2F0aW9uU3dpcGVHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJl
UmVjb2duaXplciAqKXJlY29nbml6ZXIKLXsKLSAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikK
LSAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBfZ2VzdHVyZUNvbnRyb2xsZXItPmlzTmF2
aWdhdGlvblN3aXBlR2VzdHVyZVJlY29nbml6ZXIocmVjb2duaXplcik7Ci19Ci0KLS0gKHZvaWQp
X25hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4KLXsKLSAgICAvLyBEdXJpbmcgYSBiYWNrL2Zvcndh
cmQgc3dpcGUsIHRoZXJlJ3MgYSB2aWV3IGludGVycG9zZWQgYmV0d2VlbiB0aGlzIHZpZXcgYW5k
IHRoZSBjb250ZW50IHZpZXcgdGhhdCBoYXMKLSAgICAvLyBhbiBvZmZzZXQgYW5kIGFuaW1hdGlv
biBvbiBpdCwgd2hpY2ggcmVzdWx0cyBpbiBjb21wdXRpbmcgaW5jb3JyZWN0IHJlY3RhbmdsZXMu
IFdvcmsgYXJvdW5kIGJ5IHVzaW5nCi0gICAgLy8gZnJvemVuIHJlY3RzIGR1cmluZyBzd2lwZXMu
Ci0gICAgQ0dSZWN0IGZ1bGxWaWV3UmVjdCA9IHNlbGYuYm91bmRzOwotICAgIENHUmVjdCB1bm9i
c2N1cmVkUmVjdCA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChmdWxsVmlld1JlY3QsIFtzZWxmIF9j
b21wdXRlZE9ic2N1cmVkSW5zZXRdKTsKLQotICAgIF9mcm96ZW5WaXNpYmxlQ29udGVudFJlY3Qg
PSBbc2VsZiBjb252ZXJ0UmVjdDpmdWxsVmlld1JlY3QgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQo
KV07Ci0gICAgX2Zyb3plblVub2JzY3VyZWRDb250ZW50UmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0
OnVub2JzY3VyZWRSZWN0IHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICJfbmF2aWdhdGlvbkdlc3R1cmVEaWRC
ZWdpbjogZnJlZXppbmcgdmlzaWJsZUNvbnRlbnRSZWN0ICIgPDwgV2ViQ29yZTo6RmxvYXRSZWN0
KF9mcm96ZW5WaXNpYmxlQ29udGVudFJlY3QudmFsdWUoKSkgPDwgIiBVbm9ic2N1cmVkQ29udGVu
dFJlY3QgIiA8PCBXZWJDb3JlOjpGbG9hdFJlY3QoX2Zyb3plblVub2JzY3VyZWRDb250ZW50UmVj
dC52YWx1ZSgpKSk7Ci19Ci0KLS0gKHZvaWQpX25hdmlnYXRpb25HZXN0dXJlRGlkRW5kCi17Ci0g
ICAgX2Zyb3plblZpc2libGVDb250ZW50UmVjdCA9IFdURjo6bnVsbG9wdDsKLSAgICBfZnJvemVu
VW5vYnNjdXJlZENvbnRlbnRSZWN0ID0gV1RGOjpudWxsb3B0OwotfQotCi0tICh2b2lkKV9zaG93
UGFzc3dvcmRWaWV3V2l0aERvY3VtZW50TmFtZTooTlNTdHJpbmcgKilkb2N1bWVudE5hbWUgcGFz
c3dvcmRIYW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqKSlwYXNzd29yZEhhbmRsZXIKLXsKLSAg
ICBBU1NFUlQoIV9wYXNzd29yZFZpZXcpOwotICAgIF9wYXNzd29yZFZpZXcgPSBhZG9wdE5TKFtb
V0tQYXNzd29yZFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3VuZHMgZG9jdW1lbnRO
YW1lOmRvY3VtZW50TmFtZV0pOwotICAgIFtfcGFzc3dvcmRWaWV3IHNldFVzZXJEaWRFbnRlclBh
c3N3b3JkOnBhc3N3b3JkSGFuZGxlcl07Ci0gICAgW19wYXNzd29yZFZpZXcgc2hvd0luU2Nyb2xs
Vmlldzpfc2Nyb2xsVmlldy5nZXQoKV07Ci0gICAgc2VsZi5fY3VycmVudENvbnRlbnRWaWV3Lmhp
ZGRlbiA9IFlFUzsKLX0KLQotLSAodm9pZClfaGlkZVBhc3N3b3JkVmlldwotewotICAgIGlmICgh
X3Bhc3N3b3JkVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2VsZi5fY3VycmVudENvbnRl
bnRWaWV3LmhpZGRlbiA9IE5POwotICAgIFtfcGFzc3dvcmRWaWV3IGhpZGVdOwotICAgIF9wYXNz
d29yZFZpZXcgPSBuaWw7Ci19Ci0KLS0gKFdLUGFzc3dvcmRWaWV3ICopX3Bhc3N3b3JkVmlldwot
ewotICAgIHJldHVybiBfcGFzc3dvcmRWaWV3LmdldCgpOwotfQotCi0tICh2b2lkKV91cGRhdGVT
Y3JvbGxWaWV3SW5zZXRBZGp1c3RtZW50QmVoYXZpb3IKLXsKLSNpZiBfX0lQSE9ORV9PU19WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKLSAgICBpZiAoIVtfc2Nyb2xsVmlldyBfY29udGVu
dEluc2V0QWRqdXN0bWVudEJlaGF2aW9yV2FzRXh0ZXJuYWxseU92ZXJyaWRkZW5dKQotICAgICAg
ICBbX3Njcm9sbFZpZXcgX3NldENvbnRlbnRJbnNldEFkanVzdG1lbnRCZWhhdmlvckludGVybmFs
OnNlbGYuX3NhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHMgPyBVSVNjcm9sbFZpZXdD
b250ZW50SW5zZXRBZGp1c3RtZW50QWx3YXlzIDogVUlTY3JvbGxWaWV3Q29udGVudEluc2V0QWRq
dXN0bWVudE5ldmVyXTsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9zZXRBdm9pZHNVbnNhZmVBcmVh
OihCT09MKWF2b2lkc1Vuc2FmZUFyZWEKLXsKLSAgICBpZiAoX2F2b2lkc1Vuc2FmZUFyZWEgPT0g
YXZvaWRzVW5zYWZlQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2F2b2lkc1Vuc2FmZUFy
ZWEgPSBhdm9pZHNVbnNhZmVBcmVhOwotCi0gICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdJbnNl
dEFkanVzdG1lbnRCZWhhdmlvcl07Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlXTsKLQotICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0g
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilbc2VsZiBVSURlbGVnYXRlXTsKLSAgICBpZiAoW3Vp
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRDaGFuZ2VT
YWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzOildKQotICAgICAgICBbdWlEZWxlZ2F0
ZSBfd2ViVmlldzpzZWxmIGRpZENoYW5nZVNhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNl
dHM6YXZvaWRzVW5zYWZlQXJlYV07Ci19Ci0KLS0gKEJPT0wpX2hhdmVTZXRPYnNjdXJlZEluc2V0
cwotewotICAgIHJldHVybiBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzOwotfQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI3ByYWdtYSBtYXJrIC0gTlNWaWV3IG92ZXJyaWRlcwot
Ci0jaWYgUExBVEZPUk0oTUFDKQotCi0tIChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgotewot
ICAgIHJldHVybiBfaW1wbC0+YWNjZXB0c0ZpcnN0UmVzcG9uZGVyKCk7Ci19Ci0KLS0gKEJPT0wp
YmVjb21lRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gX2ltcGwtPmJlY29tZUZpcnN0UmVz
cG9uZGVyKCk7Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1
cm4gX2ltcGwtPnJlc2lnbkZpcnN0UmVzcG9uZGVyKCk7Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxT
dGFydExpdmVSZXNpemUKLXsKLSAgICBfaW1wbC0+dmlld1dpbGxTdGFydExpdmVSZXNpemUoKTsK
LX0KLQotLSAodm9pZCl2aWV3RGlkRW5kTGl2ZVJlc2l6ZQotewotICAgIF9pbXBsLT52aWV3RGlk
RW5kTGl2ZVJlc2l6ZSgpOwotfQotCi0tIChCT09MKWlzRmxpcHBlZAotewotICAgIHJldHVybiBZ
RVM7Ci19Ci0KLS0gKE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQotewotICAgIHJldHVybiBO
U1NpemVGcm9tQ0dTaXplKF9pbXBsLT5pbnRyaW5zaWNDb250ZW50U2l6ZSgpKTsKLX0KLQotLSAo
dm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBfaW1wbC0+cHJl
cGFyZUNvbnRlbnRJblJlY3QoTlNSZWN0VG9DR1JlY3QocmVjdCkpOwotfQotCi0tICh2b2lkKXNl
dEZyYW1lU2l6ZTooTlNTaXplKXNpemUKLXsKLSAgICBbc3VwZXIgc2V0RnJhbWVTaXplOnNpemVd
OwotICAgIFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107Ci0gICAg
X2ltcGwtPnNldEZyYW1lU2l6ZShOU1NpemVUb0NHU2l6ZShzaXplKSk7Ci19Ci0KLSNwcmFnbWEg
bWFyayAtIG1hY09TIGltcGxlbWVudGF0aW9uCi0KLS0gKHZvaWQpX3dlYl9ncmFudERPTVBhc3Rl
QWNjZXNzCi17Ci0gICAgX2ltcGwtPmhhbmRsZURPTVBhc3RlUmVxdWVzdFdpdGhSZXN1bHQoV2Vi
Q29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZTo6R3JhbnRlZEZvckdlc3R1cmUpOwotfQotCi0t
ICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci19Ci0KLS0gKHZv
aWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgotewotfQotCi0tICh2b2lkKV9jb21w
bGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgotewotfQotCi1BTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19CRUdJTgotLSAodm9pZClyZW5ld0dTdGF0ZQotQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECi17Ci0gICAgX2ltcGwtPnJlbmV3R1N0YXRlKCk7Ci0gICAg
W3N1cGVyIHJlbmV3R1N0YXRlXTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gbWFjT1MgSUJBY3Rpb24v
TlNSZXNwb25kZXIKLQotI2RlZmluZSBXRUJDT1JFX0NPTU1BTkQoY29tbWFuZCkgLSAodm9pZClj
b21tYW5kOihpZClzZW5kZXIgeyBfaW1wbC0+ZXhlY3V0ZUVkaXRDb21tYW5kRm9yU2VsZWN0b3Io
X2NtZCk7IH0KLQotV0VCQ09SRV9DT01NQU5EKGFsaWduQ2VudGVyKQotV0VCQ09SRV9DT01NQU5E
KGFsaWduSnVzdGlmaWVkKQotV0VCQ09SRV9DT01NQU5EKGFsaWduTGVmdCkKLVdFQkNPUkVfQ09N
TUFORChhbGlnblJpZ2h0KQotV0VCQ09SRV9DT01NQU5EKGNvcHkpCi1XRUJDT1JFX0NPTU1BTkQo
Y3V0KQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZSkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVCYWNr
d2FyZCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVCYWNrd2FyZEJ5RGVjb21wb3NpbmdQcmV2aW91
c0NoYXJhY3RlcikKLVdFQkNPUkVfQ09NTUFORChkZWxldGVGb3J3YXJkKQotV0VCQ09SRV9DT01N
QU5EKGRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVn
aW5uaW5nT2ZQYXJhZ3JhcGgpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9FbmRPZkxpbmUpCi1X
RUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9FbmRPZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChk
ZWxldGVUb01hcmspCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlV29yZEJhY2t3YXJkKQotV0VCQ09S
RV9DT01NQU5EKGRlbGV0ZVdvcmRGb3J3YXJkKQotV0VCQ09SRV9DT01NQU5EKGlnbm9yZVNwZWxs
aW5nKQotV0VCQ09SRV9DT01NQU5EKGluZGVudCkKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRCYWNr
dGFiKQotV0VCQ09SRV9DT01NQU5EKGluc2VydExpbmVCcmVhaykKLVdFQkNPUkVfQ09NTUFORChp
bnNlcnROZXdsaW5lKQotV0VCQ09SRV9DT01NQU5EKGluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxk
RWRpdG9yKQotV0VCQ09SRV9DT01NQU5EKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcikKLVdFQkNP
UkVfQ09NTUFORChpbnNlcnRUYWIpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiSWdub3JpbmdG
aWVsZEVkaXRvcikKLVdFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodCkKLVdFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFs
KQotV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KQot
V0VCQ09SRV9DT01NQU5EKG1vdmVCYWNrd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dh
cmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZURvd24pCi1XRUJDT1JF
X0NPTU1BTkQobW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92
ZUZvcndhcmQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24p
Ci1XRUJDT1JFX0NPTU1BTkQobW92ZUxlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUxlZnRBbmRN
b2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFncmFwaEJhY2t3YXJkQW5k
TW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5k
TW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVSaWdodCkKLVdFQkNPUkVfQ09N
TUFORChtb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRv
QmVnaW5uaW5nT2ZEb2N1bWVudCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkRv
Y3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmlu
Z09mTGluZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlT
ZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpCi1X
RUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rp
b24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZSkKLVdFQkNPUkVf
Q09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VC
Q09SRV9DT01NQU5EKG1vdmVUb0VuZE9mRG9jdW1lbnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRv
RW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9F
bmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0
aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mUGFyYWdyYXBoKQotV0VCQ09SRV9DT01N
QU5EKG1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01N
QU5EKG1vdmVUb0VuZE9mU2VudGVuY2UpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50
ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5kT2ZM
aW5lKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0xlZnRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvUmlnaHRFbmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1B
TkQobW92ZVRvUmlnaHRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1B
TkQobW92ZVVwKQotV0VCQ09SRV9DT01NQU5EKG1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbikKLVdF
QkNPUkVfQ09NTUFORChtb3ZlV29yZEJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3Jk
QmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3
YXJkKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikK
LVdFQkNPUkVfQ09NTUFORChtb3ZlV29yZExlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRM
ZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHQpCi1X
RUJDT1JFX0NPTU1BTkQobW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVf
Q09NTUFORChvdXRkZW50KQotV0VCQ09SRV9DT01NQU5EKHBhZ2VEb3duKQotV0VCQ09SRV9DT01N
QU5EKHBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKHBhZ2VVcCkK
LVdFQkNPUkVfQ09NTUFORChwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1B
TkQocGFzdGUpCi1XRUJDT1JFX0NPTU1BTkQocGFzdGVBc1BsYWluVGV4dCkKLVdFQkNPUkVfQ09N
TUFORChzY3JvbGxQYWdlRG93bikKLVdFQkNPUkVfQ09NTUFORChzY3JvbGxQYWdlVXApCi1XRUJD
T1JFX0NPTU1BTkQoc2Nyb2xsTGluZURvd24pCi1XRUJDT1JFX0NPTU1BTkQoc2Nyb2xsTGluZVVw
KQotV0VCQ09SRV9DT01NQU5EKHNjcm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudCkKLVdFQkNPUkVf
Q09NTUFORChzY3JvbGxUb0VuZE9mRG9jdW1lbnQpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0QWxs
KQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdExpbmUpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0UGFy
YWdyYXBoKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdFNlbnRlbmNlKQotV0VCQ09SRV9DT01NQU5E
KHNlbGVjdFRvTWFyaykKLVdFQkNPUkVfQ09NTUFORChzZWxlY3RXb3JkKQotV0VCQ09SRV9DT01N
QU5EKHNldE1hcmspCi1XRUJDT1JFX0NPTU1BTkQoc3Vic2NyaXB0KQotV0VCQ09SRV9DT01NQU5E
KHN1cGVyc2NyaXB0KQotV0VCQ09SRV9DT01NQU5EKHN3YXBXaXRoTWFyaykKLVdFQkNPUkVfQ09N
TUFORCh0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQodHJhbnNw
b3NlKQotV0VCQ09SRV9DT01NQU5EKHVuZGVybGluZSkKLVdFQkNPUkVfQ09NTUFORCh1bnNjcmlw
dCkKLVdFQkNPUkVfQ09NTUFORCh5YW5rKQotV0VCQ09SRV9DT01NQU5EKHlhbmtBbmRTZWxlY3Qp
Ci0KLSN1bmRlZiBXRUJDT1JFX0NPTU1BTkQKLQotLSAoQk9PTCl3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCB0eXBlczooTlNBcnJheSAqKXR5cGVz
Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT53cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChwYXN0ZWJv
YXJkLCB0eXBlcyk7Ci19Ci0KLS0gKHZvaWQpY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYToo
aWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPmNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKTsK
LX0KLQotLSAoaWQpdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTooTlNTdHJpbmcgKilzZW5kVHlw
ZSByZXR1cm5UeXBlOihOU1N0cmluZyAqKXJldHVyblR5cGUKLXsKLSAgICByZXR1cm4gX2ltcGwt
PnZhbGlkUmVxdWVzdG9yRm9yU2VuZEFuZFJldHVyblR5cGVzKHNlbmRUeXBlLCByZXR1cm5UeXBl
KTsKLX0KLQotLSAoQk9PTClyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQKLXsKLSAgICByZXR1cm4gX2ltcGwtPnJlYWRTZWxlY3Rpb25Gcm9tUGFz
dGVib2FyZChwYXN0ZWJvYXJkKTsKLX0KLQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfQkVHSU4KLS0gKHZvaWQpY2hhbmdlRm9udDooaWQpc2VuZGVyCi1BTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKLXsKLSAgICBfaW1wbC0+Y2hhbmdlRm9udEZyb21Gb250TWFu
YWdlcigpOwotfQotCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgotLSAo
dm9pZCljaGFuZ2VDb2xvcjooaWQpc2VuZGVyCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19CRUdJTgotewotICAgIF9pbXBsLT5jaGFuZ2VGb250Q29sb3JGcm9tU2VuZGVyKHNlbmRl
cik7Ci19Ci0KLS0gKHZvaWQpY2hhbmdlQXR0cmlidXRlczooaWQpc2VuZGVyCi17Ci0gICAgX2lt
cGwtPmNoYW5nZUZvbnRBdHRyaWJ1dGVzRnJvbVNlbmRlcihzZW5kZXIpOwotfQotCi0tIChJQkFj
dGlvbilzdGFydFNwZWFraW5nOihpZClzZW5kZXIKLXsKLSAgICBfaW1wbC0+c3RhcnRTcGVha2lu
ZygpOwotfQotCi0tIChJQkFjdGlvbilzdG9wU3BlYWtpbmc6KGlkKXNlbmRlcgotewotICAgIF9p
bXBsLT5zdG9wU3BlYWtpbmcoc2VuZGVyKTsKLX0KLQotLSAoSUJBY3Rpb24pc2hvd0d1ZXNzUGFu
ZWw6KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT5zaG93R3Vlc3NQYW5lbChzZW5kZXIpOwotfQot
Ci0tIChJQkFjdGlvbiljaGVja1NwZWxsaW5nOihpZClzZW5kZXIKLXsKLSAgICBfaW1wbC0+Y2hl
Y2tTcGVsbGluZygpOwotfQotCi0tICh2b2lkKWNoYW5nZVNwZWxsaW5nOihpZClzZW5kZXIKLXsK
LSAgICBfaW1wbC0+Y2hhbmdlU3BlbGxpbmcoc2VuZGVyKTsKLX0KLQotLSAoSUJBY3Rpb24pdG9n
Z2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmc6KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT50b2dn
bGVDb250aW51b3VzU3BlbGxDaGVja2luZygpOwotfQotCi0tIChCT09MKWlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZAotewotICAgIHJldHVybiBfaW1wbC0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCk7Ci19Ci0KLS0gKHZvaWQpc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDooQk9PTClmbGFnCi17
Ci0gICAgX2ltcGwtPnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoZmxhZyk7Ci19Ci0KLS0gKElC
QWN0aW9uKXRvZ2dsZUdyYW1tYXJDaGVja2luZzooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPnRv
Z2dsZUdyYW1tYXJDaGVja2luZygpOwotfQotCi0tIChJQkFjdGlvbil0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT50b2dnbGVBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKLX0KLQotLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0
aW9uc1BhbmVsOihpZClzZW5kZXIKLXsKLSAgICBfaW1wbC0+b3JkZXJGcm9udFN1YnN0aXR1dGlv
bnNQYW5lbChzZW5kZXIpOwotfQotCi0tIChJQkFjdGlvbil0b2dnbGVTbWFydEluc2VydERlbGV0
ZTooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPnRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlKCk7Ci19
Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQKLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCk7Ci19Ci0K
LS0gKHZvaWQpc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWcK
LXsKLSAgICBfaW1wbC0+c2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKGZsYWcp
OwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOihpZClzZW5k
ZXIKLXsKLSAgICBfaW1wbC0+dG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb24oKTsKLX0K
LQotLSAoQk9PTClpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkCi17Ci0gICAgcmV0
dXJuIF9pbXBsLT5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCk7Ci19Ci0KLS0g
KHZvaWQpc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZwotewot
ICAgIF9pbXBsLT5zZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZChmbGFnKTsKLX0K
LQotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOihpZClzZW5kZXIKLXsK
LSAgICBfaW1wbC0+dG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbigpOwotfQotCi0tIChC
T09MKWlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gX2ltcGwt
PmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKTsKLX0KLQotLSAodm9pZClzZXRBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgX2ltcGwtPnNldEF1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGZsYWcpOwotfQotCi0tICh2b2lkKXRvZ2dsZUF1
dG9tYXRpY0xpbmtEZXRlY3Rpb246KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT50b2dnbGVBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uKCk7Ci19Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNUZXh0UmVwbGFj
ZW1lbnRFbmFibGVkCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5pc0F1dG9tYXRpY1RleHRSZXBsYWNl
bWVudEVuYWJsZWQoKTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRF
bmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBfaW1wbC0+c2V0QXV0b21hdGljVGV4dFJlcGxhY2Vt
ZW50RW5hYmxlZChmbGFnKTsKLX0KLQotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFj
ZW1lbnQ6KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT50b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFj
ZW1lbnQoKTsKLX0KLQotLSAodm9pZCl1cHBlcmNhc2VXb3JkOihpZClzZW5kZXIKLXsKLSAgICBf
aW1wbC0+dXBwZXJjYXNlV29yZCgpOwotfQotCi0tICh2b2lkKWxvd2VyY2FzZVdvcmQ6KGlkKXNl
bmRlcgotewotICAgIF9pbXBsLT5sb3dlcmNhc2VXb3JkKCk7Ci19Ci0KLS0gKHZvaWQpY2FwaXRh
bGl6ZVdvcmQ6KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT5jYXBpdGFsaXplV29yZCgpOwotfQot
Ci0tIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAg
cmV0dXJuIF9pbXBsLT53YW50c0tleURvd25Gb3JFdmVudChldmVudCk7Ci19Ci0KLS0gKHZvaWQp
c2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5zY3JvbGxXaGVlbChl
dmVudCk7Ci19Ci0KLS0gKHZvaWQpc3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewot
ICAgIF9pbXBsLT5zd2lwZVdpdGhFdmVudChldmVudCk7Ci19Ci0KLS0gKHZvaWQpbW91c2VNb3Zl
ZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQpOwotfQot
Ci0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgX2ltcGwtPm1vdXNl
RG93bihldmVudCk7Ci19Ci0KLS0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0g
ICAgX2ltcGwtPm1vdXNlVXAoZXZlbnQpOwotfQotCi0tICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNF
dmVudCAqKWV2ZW50Ci17Ci0gICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7Ci19Ci0KLS0g
KHZvaWQpbW91c2VFbnRlcmVkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+bW91c2VF
bnRlcmVkKGV2ZW50KTsKLX0KLQotLSAodm9pZCltb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50
Ci17Ci0gICAgX2ltcGwtPm1vdXNlRXhpdGVkKGV2ZW50KTsKLX0KLQotLSAodm9pZClvdGhlck1v
dXNlRG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgX2ltcGwtPm90aGVyTW91c2VEb3duKGV2
ZW50KTsKLX0KLQotLSAodm9pZClvdGhlck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50Ci17
Ci0gICAgX2ltcGwtPm90aGVyTW91c2VEcmFnZ2VkKGV2ZW50KTsKLX0KLQotLSAodm9pZClvdGhl
ck1vdXNlVXA6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5vdGhlck1vdXNlVXAoZXZl
bnQpOwotfQotCi0tICh2b2lkKXJpZ2h0TW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwotfQotCi0tICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+cmlnaHRNb3VzZURyYWdnZWQo
ZXZlbnQpOwotfQotCi0tICh2b2lkKXJpZ2h0TW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0g
ICAgX2ltcGwtPnJpZ2h0TW91c2VVcChldmVudCk7Ci19Ci0KLS0gKHZvaWQpcHJlc3N1cmVDaGFu
Z2VXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5n
ZVdpdGhFdmVudChldmVudCk7Ci19Ci0KLS0gKEJPT0wpYWNjZXB0c0ZpcnN0TW91c2U6KE5TRXZl
bnQgKilldmVudAotewotICAgIHJldHVybiBfaW1wbC0+YWNjZXB0c0ZpcnN0TW91c2UoZXZlbnQp
OwotfQotCi0tIChCT09MKXNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91bGREZWxheVdpbmRvd09yZGVyaW5n
Rm9yRXZlbnQoZXZlbnQpOwotfQotCi0tICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClz
ZWxlY3RvcgotewotICAgIF9pbXBsLT5kb0NvbW1hbmRCeVNlbGVjdG9yKHNlbGVjdG9yKTsKLX0K
LQotLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcKLXsKLSAgICBfaW1wbC0+aW5zZXJ0VGV4
dChzdHJpbmcpOwotfQotCi0tICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVu
dFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UKLXsKLSAgICBfaW1wbC0+aW5zZXJ0VGV4
dChzdHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UpOwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQg
KilpbnB1dENvbnRleHQKLXsKLSAgICBpZiAoIV9pbXBsKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBfaW1wbC0+aW5wdXRDb250ZXh0KCk7Ci19Ci0KLS0gKEJPT0wpcGVyZm9ybUtl
eUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIHJldHVybiBfaW1wbC0+cGVyZm9y
bUtleUVxdWl2YWxlbnQoZXZlbnQpOwotfQotCi0tICh2b2lkKWtleVVwOihOU0V2ZW50ICopdGhl
RXZlbnQKLXsKLSAgICBfaW1wbC0+a2V5VXAodGhlRXZlbnQpOwotfQotCi0tICh2b2lkKWtleURv
d246KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIF9pbXBsLT5rZXlEb3duKHRoZUV2ZW50KTsK
LX0KLQotLSAodm9pZClmbGFnc0NoYW5nZWQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIF9p
bXBsLT5mbGFnc0NoYW5nZWQodGhlRXZlbnQpOwotfQotCi0tICh2b2lkKXNldE1hcmtlZFRleHQ6
KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbGVjdGVkUmFuZ2UgcmVwbGFj
ZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlCi17Ci0gICAgX2ltcGwtPnNldE1h
cmtlZFRleHQoc3RyaW5nLCBuZXdTZWxlY3RlZFJhbmdlLCByZXBsYWNlbWVudFJhbmdlKTsKLX0K
LQotLSAodm9pZCl1bm1hcmtUZXh0Ci17Ci0gICAgX2ltcGwtPnVubWFya1RleHQoKTsKLX0KLQot
LSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zZWxlY3RlZFJh
bmdlKCk7Ci19Ci0KLS0gKEJPT0wpaGFzTWFya2VkVGV4dAotewotICAgIHJldHVybiBfaW1wbC0+
aGFzTWFya2VkVGV4dCgpOwotfQotCi0tIChOU1JhbmdlKW1hcmtlZFJhbmdlCi17Ci0gICAgcmV0
dXJuIF9pbXBsLT5tYXJrZWRSYW5nZSgpOwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilh
dHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZTooTlNSYW5nZSluc1JhbmdlIGFjdHVh
bFJhbmdlOihOU1JhbmdlUG9pbnRlcilhY3R1YWxSYW5nZQotewotICAgIHJldHVybiBfaW1wbC0+
YXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFuZ2UobnNSYW5nZSwgYWN0dWFsUmFuZ2Up
OwotfQotCi0tIChOU1VJbnRlZ2VyKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQpdGhl
UG9pbnQKLXsKLSAgICByZXR1cm4gX2ltcGwtPmNoYXJhY3RlckluZGV4Rm9yUG9pbnQodGhlUG9p
bnQpOwotfQotCi0tICh2b2lkKXR5cGluZ0F0dHJpYnV0ZXNXaXRoQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQoXikoTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKSljb21wbGV0aW9uCi17Ci0g
ICAgX2ltcGwtPnR5cGluZ0F0dHJpYnV0ZXNXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlv
bik7Ci19Ci0KLS0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlNSYW5nZSl0
aGVSYW5nZSBhY3R1YWxSYW5nZTooTlNSYW5nZVBvaW50ZXIpYWN0dWFsUmFuZ2UKLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHRoZVJhbmdlLCBhY3R1YWxS
YW5nZSk7Ci19Ci0KLS0gKHZvaWQpc2VsZWN0ZWRSYW5nZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCheKShOU1JhbmdlIHNlbGVjdGVkUmFuZ2UpKWNvbXBsZXRpb25IYW5kbGVyUHRyCi17Ci0g
ICAgX2ltcGwtPnNlbGVjdGVkUmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhh
bmRsZXJQdHIpOwotfQotCi0tICh2b2lkKW1hcmtlZFJhbmdlV2l0aENvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKE5TUmFuZ2UgbWFya2VkUmFuZ2UpKWNvbXBsZXRpb25IYW5kbGVyUHRyCi17Ci0g
ICAgX2ltcGwtPm1hcmtlZFJhbmdlV2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5k
bGVyUHRyKTsKLX0KLQotLSAodm9pZCloYXNNYXJrZWRUZXh0V2l0aENvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKEJPT0wgaGFzTWFya2VkVGV4dCkpY29tcGxldGlvbkhhbmRsZXJQdHIKLXsKLSAg
ICBfaW1wbC0+aGFzTWFya2VkVGV4dFdpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9uSGFu
ZGxlclB0cik7Ci19Ci0KLS0gKHZvaWQpYXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFu
Z2U6KE5TUmFuZ2UpbnNSYW5nZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5TUmFuZ2UgYWN0dWFsUmFuZ2UpKWNvbXBsZXRpb25IYW5k
bGVyUHRyCi17Ci0gICAgX2ltcGwtPmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdl
KG5zUmFuZ2UsIGNvbXBsZXRpb25IYW5kbGVyUHRyKTsKLX0KLQotLSAodm9pZClmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZTooTlNSYW5nZSl0aGVSYW5nZSBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKShOU1JlY3QgZmlyc3RSZWN0LCBOU1JhbmdlIGFjdHVhbFJhbmdlKSljb21wbGV0aW9uSGFu
ZGxlclB0cgotewotICAgIF9pbXBsLT5maXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh0aGVSYW5n
ZSwgY29tcGxldGlvbkhhbmRsZXJQdHIpOwotfQotCi0tICh2b2lkKWNoYXJhY3RlckluZGV4Rm9y
UG9pbnQ6KE5TUG9pbnQpdGhlUG9pbnQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNVSW50
ZWdlcikpY29tcGxldGlvbkhhbmRsZXJQdHIKLXsKLSAgICBfaW1wbC0+Y2hhcmFjdGVySW5kZXhG
b3JQb2ludCh0aGVQb2ludCwgY29tcGxldGlvbkhhbmRsZXJQdHIpOwotfQotCi0tIChOU0FycmF5
ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dAotewotICAgIHJldHVybiBfaW1wbC0+dmFs
aWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dCgpOwotfQotCi0jaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKLUFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCi0tICh2b2lkKWRyYWdn
ZWRJbWFnZTooTlNJbWFnZSAqKWltYWdlIGVuZGVkQXQ6KE5TUG9pbnQpZW5kUG9pbnQgb3BlcmF0
aW9uOihOU0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKLXsKLSAgICBfaW1wbC0+ZHJhZ2dlZEltYWdlKGltYWdlLCBOU1BvaW50VG9D
R1BvaW50KGVuZFBvaW50KSwgb3BlcmF0aW9uKTsKLX0KLQotLSAoTlNEcmFnT3BlcmF0aW9uKWRy
YWdnaW5nRW50ZXJlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPmRyYWdnaW5nRW50ZXJlZChkcmFnZ2luZ0luZm8pOwotfQotCi0tIChOU0Ry
YWdPcGVyYXRpb24pZHJhZ2dpbmdVcGRhdGVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5n
SW5mbwotewotICAgIHJldHVybiBfaW1wbC0+ZHJhZ2dpbmdVcGRhdGVkKGRyYWdnaW5nSW5mbyk7
Ci19Ci0KLS0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dp
bmdJbmZvCi17Ci0gICAgX2ltcGwtPmRyYWdnaW5nRXhpdGVkKGRyYWdnaW5nSW5mbyk7Ci19Ci0K
LS0gKEJPT0wpcHJlcGFyZUZvckRyYWdPcGVyYXRpb246KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJh
Z2dpbmdJbmZvCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5wcmVwYXJlRm9yRHJhZ09wZXJhdGlvbihk
cmFnZ2luZ0luZm8pOwotfQotCi0tIChCT09MKXBlcmZvcm1EcmFnT3BlcmF0aW9uOihpZCA8TlNE
cmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwotewotICAgIHJldHVybiBfaW1wbC0+cGVyZm9ybURy
YWdPcGVyYXRpb24oZHJhZ2dpbmdJbmZvKTsKLX0KLQotLSAoTlNWaWV3ICopX2hpdFRlc3Q6KE5T
UG9pbnQgKilwb2ludCBkcmFnVHlwZXM6KE5TU2V0ICopdHlwZXMKLXsKLSAgICByZXR1cm4gX2lt
cGwtPmhpdFRlc3RGb3JEcmFnVHlwZXMoTlNQb2ludFRvQ0dQb2ludCgqcG9pbnQpLCB0eXBlcyk7
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKLQotLSAoQk9PTClfd2luZG93UmVz
aXplTW91c2VMb2NhdGlvbklzSW5WaXNpYmxlU2Nyb2xsZXJUaHVtYjooTlNQb2ludClwb2ludAot
ewotICAgIHJldHVybiBfaW1wbC0+d2luZG93UmVzaXplTW91c2VMb2NhdGlvbklzSW5WaXNpYmxl
U2Nyb2xsZXJUaHVtYihOU1BvaW50VG9DR1BvaW50KHBvaW50KSk7Ci19Ci0KLS0gKHZvaWQpdmll
d1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgX2ltcGwtPnZpZXdX
aWxsTW92ZVRvV2luZG93KHdpbmRvdyk7Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRv
dwotewotICAgIF9pbXBsLT52aWV3RGlkTW92ZVRvV2luZG93KCk7Ci19Ci0KLS0gKHZvaWQpZHJh
d1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgX2ltcGwtPmRyYXdSZWN0KE5TUmVjdFRvQ0dSZWN0
KHJlY3QpKTsKLX0KLQotLSAoQk9PTClpc09wYXF1ZQotewotICAgIHJldHVybiBfaW1wbC0+aXNP
cGFxdWUoKTsKLX0KLQotLSAoQk9PTCltb3VzZURvd25DYW5Nb3ZlV2luZG93Ci17Ci0gICAgcmV0
dXJuIFdlYktpdDo6V2ViVmlld0ltcGw6Om1vdXNlRG93bkNhbk1vdmVXaW5kb3coKTsKLX0KLQot
LSAodm9pZCl2aWV3RGlkSGlkZQotewotICAgIF9pbXBsLT52aWV3RGlkSGlkZSgpOwotfQotCi0t
ICh2b2lkKXZpZXdEaWRVbmhpZGUKLXsKLSAgICBfaW1wbC0+dmlld0RpZFVuaGlkZSgpOwotfQot
Ci0tICh2b2lkKXZpZXdEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllcwotewotICAgIF9pbXBsLT52
aWV3RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXMoKTsKLX0KLQotLSAodm9pZClfYWN0aXZlU3Bh
Y2VEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgX2ltcGwt
PmFjdGl2ZVNwYWNlRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2Vk
VUlFbGVtZW50Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5hY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxl
bWVudCgpOwotfQotCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgotLSAo
Qk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKLXsKLSAgICByZXR1cm4gX2ltcGwtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsK
LX0KLQotLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPmFjY2Vzc2liaWxpdHlIaXRUZXN0KE5TUG9pbnRUb0NHUG9pbnQocG9pbnQp
KTsKLX0KLQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KLS0gKGlkKWFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKLUFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAotewotICAgIHJldHVybiBfaW1wbC0+YWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSk7Ci19Ci0KLUFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0JFR0lOCi0tIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
KE5TU3RyaW5nICopYXR0cmlidXRlIGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyCi1BTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKLXsKLSAgICByZXR1cm4gX2ltcGwtPmFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci19Ci0KLUFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCi0tIChOU0FycmF5PE5TU3RyaW5nICo+
ICopYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcwotQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECi17Ci0gICAgTlNBcnJheTxOU1N0cmluZyAqPiAqbmFt
ZXMgPSBbc3VwZXIgYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc107Ci0g
ICAgcmV0dXJuIFtuYW1lcyBhcnJheUJ5QWRkaW5nT2JqZWN0OkAiQVhDb252ZXJ0UmVsYXRpdmVG
cmFtZSJdOwotfQotCi0tIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50Ci17Ci0gICAg
aWYgKCFfaW1wbCkKLSAgICAgICAgcmV0dXJuIFtzdXBlciBoaXRUZXN0OnBvaW50XTsKLSAgICBy
ZXR1cm4gX2ltcGwtPmhpdFRlc3QoTlNQb2ludFRvQ0dQb2ludChwb2ludCkpOwotfQotCi0tIChO
U0ludGVnZXIpY29udmVyc2F0aW9uSWRlbnRpZmllcgotewotICAgIHJldHVybiAoTlNJbnRlZ2Vy
KXNlbGY7Ci19Ci0KLS0gKHZvaWQpcXVpY2tMb29rV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQK
LXsKLSAgICBfaW1wbC0+cXVpY2tMb29rV2l0aEV2ZW50KGV2ZW50KTsKLX0KLQotLSAoTlNUcmFj
a2luZ1JlY3RUYWcpYWRkVHJhY2tpbmdSZWN0OihOU1JlY3QpcmVjdCBvd25lcjooaWQpb3duZXIg
dXNlckRhdGE6KHZvaWQgKilkYXRhIGFzc3VtZUluc2lkZTooQk9PTClhc3N1bWVJbnNpZGUKLXsK
LSAgICByZXR1cm4gX2ltcGwtPmFkZFRyYWNraW5nUmVjdChOU1JlY3RUb0NHUmVjdChyZWN0KSwg
b3duZXIsIGRhdGEsIGFzc3VtZUluc2lkZSk7Ci19Ci0KLS0gKE5TVHJhY2tpbmdSZWN0VGFnKV9h
ZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9p
ZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZSB1c2VUcmFja2luZ051bToo
aW50KXRhZwotewotICAgIHJldHVybiBfaW1wbC0+YWRkVHJhY2tpbmdSZWN0V2l0aFRyYWNraW5n
TnVtKE5TUmVjdFRvQ0dSZWN0KHJlY3QpLCBvd25lciwgZGF0YSwgYXNzdW1lSW5zaWRlLCB0YWcp
OwotfQotCi0tICh2b2lkKV9hZGRUcmFja2luZ1JlY3RzOihOU1JlY3QgKilyZWN0cyBvd25lcjoo
aWQpb3duZXIgdXNlckRhdGFMaXN0Oih2b2lkICoqKXVzZXJEYXRhTGlzdCBhc3N1bWVJbnNpZGVM
aXN0OihCT09MICopYXNzdW1lSW5zaWRlTGlzdCB0cmFja2luZ051bXM6KE5TVHJhY2tpbmdSZWN0
VGFnICopdHJhY2tpbmdOdW1zIGNvdW50OihpbnQpY291bnQKLXsKLSAgICBDR1JlY3QgKmNnUmVj
dHMgPSAoQ0dSZWN0ICopY2FsbG9jKDEsIHNpemVvZihDR1JlY3QpKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIGNnUmVjdHNbaV0gPSBOU1JlY3RUb0NHUmVj
dChyZWN0c1tpXSk7Ci0gICAgX2ltcGwtPmFkZFRyYWNraW5nUmVjdHNXaXRoVHJhY2tpbmdOdW1z
KGNnUmVjdHMsIG93bmVyLCB1c2VyRGF0YUxpc3QsIGFzc3VtZUluc2lkZUxpc3QsIHRyYWNraW5n
TnVtcywgY291bnQpOwotICAgIGZyZWUoY2dSZWN0cyk7Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVHJh
Y2tpbmdSZWN0OihOU1RyYWNraW5nUmVjdFRhZyl0YWcKLXsKLSAgICBpZiAoIV9pbXBsKQotICAg
ICAgICByZXR1cm47Ci0gICAgX2ltcGwtPnJlbW92ZVRyYWNraW5nUmVjdCh0YWcpOwotfQotCi0t
ICh2b2lkKV9yZW1vdmVUcmFja2luZ1JlY3RzOihOU1RyYWNraW5nUmVjdFRhZyAqKXRhZ3MgY291
bnQ6KGludCljb3VudAotewotICAgIGlmICghX2ltcGwpCi0gICAgICAgIHJldHVybjsKLSAgICBf
aW1wbC0+cmVtb3ZlVHJhY2tpbmdSZWN0cyh0YWdzLCBjb3VudCk7Ci19Ci0KLUFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCi0tIChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAq
KXZpZXcgc3RyaW5nRm9yVG9vbFRpcDooTlNUb29sVGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClw
b2ludCB1c2VyRGF0YToodm9pZCAqKWRhdGEKLUFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAotewotICAgIHJldHVybiBfaW1wbC0+c3RyaW5nRm9yVG9vbFRpcCh0YWcpOwotfQot
Ci1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgotLSAodm9pZClwYXN0ZWJv
YXJkQ2hhbmdlZE93bmVyOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi1BTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKLXsKLSAgICBfaW1wbC0+cGFzdGVib2FyZENoYW5nZWRP
d25lcihwYXN0ZWJvYXJkKTsKLX0KLQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
QkVHSU4KLS0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBwcm92
aWRlRGF0YUZvclR5cGU6KE5TU3RyaW5nICopdHlwZQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECi17Ci0gICAgX2ltcGwtPnByb3ZpZGVEYXRhRm9yUGFzdGVib2FyZChwYXN0
ZWJvYXJkLCB0eXBlKTsKLX0KLQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVH
SU4KLS0gKE5TQXJyYXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9u
OihOU1VSTCAqKWRyb3BEZXN0aW5hdGlvbgotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECi17Ci0gICAgcmV0dXJuIF9pbXBsLT5uYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRB
dERlc3RpbmF0aW9uKGRyb3BEZXN0aW5hdGlvbik7Ci19Ci0KLS0gKEJPT0wpd2FudHNVcGRhdGVM
YXllcgotewotICAgIHJldHVybiBXZWJLaXQ6OldlYlZpZXdJbXBsOjp3YW50c1VwZGF0ZUxheWVy
KCk7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlTGF5ZXIKLXsKLSAgICBfaW1wbC0+dXBkYXRlTGF5ZXIo
KTsKLX0KLQotLSAodm9pZClzZXRBbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczoo
Qk9PTClhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcwotewotICAgIF9pbXBsLT5z
ZXRBbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyhhbGxvd3NCYWNrRm9yd2FyZE5h
dmlnYXRpb25HZXN0dXJlcyk7Ci19Ci0KLS0gKEJPT0wpYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0
aW9uR2VzdHVyZXMKLXsKLSAgICByZXR1cm4gX2ltcGwtPmFsbG93c0JhY2tGb3J3YXJkTmF2aWdh
dGlvbkdlc3R1cmVzKCk7Ci19Ci0KLS0gKHZvaWQpc21hcnRNYWduaWZ5V2l0aEV2ZW50OihOU0V2
ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+c21hcnRNYWduaWZ5V2l0aEV2ZW50KGV2ZW50KTsK
LX0KLQotLSAodm9pZClzZXRNYWduaWZpY2F0aW9uOihkb3VibGUpbWFnbmlmaWNhdGlvbiBjZW50
ZXJlZEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICBfaW1wbC0+c2V0TWFnbmlmaWNhdGlv
bihtYWduaWZpY2F0aW9uLCBOU1BvaW50VG9DR1BvaW50KHBvaW50KSk7Ci19Ci0KLS0gKHZvaWQp
c2V0TWFnbmlmaWNhdGlvbjooZG91YmxlKW1hZ25pZmljYXRpb24KLXsKLSAgICBfaW1wbC0+c2V0
TWFnbmlmaWNhdGlvbihtYWduaWZpY2F0aW9uKTsKLX0KLQotLSAoZG91YmxlKW1hZ25pZmljYXRp
b24KLXsKLSAgICByZXR1cm4gX2ltcGwtPm1hZ25pZmljYXRpb24oKTsKLX0KLQotLSAodm9pZClz
ZXRBbGxvd3NNYWduaWZpY2F0aW9uOihCT09MKWFsbG93c01hZ25pZmljYXRpb24KLXsKLSAgICBf
aW1wbC0+c2V0QWxsb3dzTWFnbmlmaWNhdGlvbihhbGxvd3NNYWduaWZpY2F0aW9uKTsKLX0KLQot
LSAoQk9PTClhbGxvd3NNYWduaWZpY2F0aW9uCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5hbGxvd3NN
YWduaWZpY2F0aW9uKCk7Ci19Ci0KLS0gKHZvaWQpbWFnbmlmeVdpdGhFdmVudDooTlNFdmVudCAq
KWV2ZW50Ci17Ci0gICAgX2ltcGwtPm1hZ25pZnlXaXRoRXZlbnQoZXZlbnQpOwotfQotCi0jaWYg
RU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5UUykKLS0gKHZvaWQpcm90YXRlV2l0aEV2ZW50OihOU0V2
ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+cm90YXRlV2l0aEV2ZW50KGV2ZW50KTsKLX0KLSNl
bmRpZgotCi0tIChCT09MKV91c2VQbGF0Zm9ybUZpbmRVSQotewotICAgIHJldHVybiBfdXNlUGxh
dGZvcm1GaW5kVUk7Ci19Ci0KLS0gKHZvaWQpX3NldFVzZVBsYXRmb3JtRmluZFVJOihCT09MKXVz
ZVBsYXRmb3JtRmluZFVJCi17Ci0gICAgX3VzZVBsYXRmb3JtRmluZFVJID0gdXNlUGxhdGZvcm1G
aW5kVUk7Ci0KLSAgICBpZiAoX3RleHRGaW5kZXJDbGllbnQpCi0gICAgICAgIFtzZWxmIF9oaWRl
RmluZFVJXTsKLSAgICBfdGV4dEZpbmRlckNsaWVudCA9IG5pbDsKLX0KLQotLSAoV0tUZXh0Rmlu
ZGVyQ2xpZW50ICopX2Vuc3VyZVRleHRGaW5kZXJDbGllbnQKLXsKLSAgICBpZiAoIV90ZXh0Rmlu
ZGVyQ2xpZW50KQotICAgICAgICBfdGV4dEZpbmRlckNsaWVudCA9IGFkb3B0TlMoW1tXS1RleHRG
aW5kZXJDbGllbnQgYWxsb2NdIGluaXRXaXRoUGFnZToqX3BhZ2UgdmlldzpzZWxmIHVzZVBsYXRm
b3JtRmluZFVJOl91c2VQbGF0Zm9ybUZpbmRVSV0pOwotICAgIHJldHVybiBfdGV4dEZpbmRlckNs
aWVudC5nZXQoKTsKLX0KLQotLSAodm9pZClmaW5kTWF0Y2hlc0ZvclN0cmluZzooTlNTdHJpbmcg
Kil0YXJnZXRTdHJpbmcgcmVsYXRpdmVUb01hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9u
b3VzRG9jdW1lbnRGaW5kTWF0Y2g+KXJlbGF0aXZlTWF0Y2ggZmluZE9wdGlvbnM6KE5TVGV4dEZp
bmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnMpZmluZE9wdGlvbnMgbWF4UmVzdWx0
czooTlNVSW50ZWdlciltYXhSZXN1bHRzIHJlc3VsdENvbGxlY3Rvcjoodm9pZCAoXikoTlNBcnJh
eSAqbWF0Y2hlcywgQk9PTCBkaWRXcmFwKSlyZXN1bHRDb2xsZWN0b3IKLXsKLSAgICBbW3NlbGYg
X2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIGZpbmRNYXRjaGVzRm9yU3RyaW5nOnRhcmdldFN0cmlu
ZyByZWxhdGl2ZVRvTWF0Y2g6cmVsYXRpdmVNYXRjaCBmaW5kT3B0aW9uczpmaW5kT3B0aW9ucyBt
YXhSZXN1bHRzOm1heFJlc3VsdHMgcmVzdWx0Q29sbGVjdG9yOnJlc3VsdENvbGxlY3Rvcl07Ci19
Ci0KLS0gKHZvaWQpcmVwbGFjZU1hdGNoZXM6KE5TQXJyYXkgKiltYXRjaGVzIHdpdGhTdHJpbmc6
KE5TU3RyaW5nICopcmVwbGFjZW1lbnRTdHJpbmcgaW5TZWxlY3Rpb25Pbmx5OihCT09MKXNlbGVj
dGlvbk9ubHkgcmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShOU1VJbnRlZ2VyIHJlcGxhY2VtZW50
Q291bnQpKXJlc3VsdENvbGxlY3RvcgotewotICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNs
aWVudF0gcmVwbGFjZU1hdGNoZXM6bWF0Y2hlcyB3aXRoU3RyaW5nOnJlcGxhY2VtZW50U3RyaW5n
IGluU2VsZWN0aW9uT25seTpzZWxlY3Rpb25Pbmx5IHJlc3VsdENvbGxlY3RvcjpyZXN1bHRDb2xs
ZWN0b3JdOwotfQotCi0tICh2b2lkKXNjcm9sbEZpbmRNYXRjaFRvVmlzaWJsZTooaWQ8TlNUZXh0
RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KW1hdGNoCi17Ci0gICAgW1tzZWxm
IF9lbnN1cmVUZXh0RmluZGVyQ2xpZW50XSBzY3JvbGxGaW5kTWF0Y2hUb1Zpc2libGU6bWF0Y2hd
OwotfQotCi0tIChOU1ZpZXcgKilkb2N1bWVudENvbnRhaW5lclZpZXcKLXsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClnZXRTZWxlY3RlZFRleHQ6KHZvaWQgKF4pKE5TU3RyaW5nICpz
ZWxlY3RlZFRleHRTdHJpbmcpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgW1tzZWxmIF9lbnN1
cmVUZXh0RmluZGVyQ2xpZW50XSBnZXRTZWxlY3RlZFRleHQ6Y29tcGxldGlvbkhhbmRsZXJdOwot
fQotCi0tICh2b2lkKXNlbGVjdEZpbmRNYXRjaDooaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91
c0RvY3VtZW50RmluZE1hdGNoPilmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgW1tzZWxmIF9lbnN1cmVUZXh0RmluZGVy
Q2xpZW50XSBzZWxlY3RGaW5kTWF0Y2g6ZmluZE1hdGNoIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBs
ZXRpb25IYW5kbGVyXTsKLX0KLQotLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopX3dlYl9zdXBlcklu
cHV0Q29udGV4dAotewotICAgIHJldHVybiBbc3VwZXIgaW5wdXRDb250ZXh0XTsKLX0KLQotLSAo
dm9pZClfd2ViX3N1cGVyUXVpY2tMb29rV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAg
ICBbc3VwZXIgcXVpY2tMb29rV2l0aEV2ZW50OmV2ZW50XTsKLX0KLQotLSAodm9pZClfd2ViX3N1
cGVyU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIFtzdXBlciBzd2lwZVdp
dGhFdmVudDpldmVudF07Ci19Ci0KLS0gKHZvaWQpX3dlYl9zdXBlck1hZ25pZnlXaXRoRXZlbnQ6
KE5TRXZlbnQgKilldmVudAotewotICAgIFtzdXBlciBtYWduaWZ5V2l0aEV2ZW50OmV2ZW50XTsK
LX0KLQotLSAodm9pZClfd2ViX3N1cGVyU21hcnRNYWduaWZ5V2l0aEV2ZW50OihOU0V2ZW50ICop
ZXZlbnQKLXsKLSAgICBbc3VwZXIgc21hcnRNYWduaWZ5V2l0aEV2ZW50OmV2ZW50XTsKLX0KLQot
LSAodm9pZClfd2ViX3N1cGVyUmVtb3ZlVHJhY2tpbmdSZWN0OihOU1RyYWNraW5nUmVjdFRhZyl0
YWcKLXsKLSAgICBbc3VwZXIgcmVtb3ZlVHJhY2tpbmdSZWN0OnRhZ107Ci19Ci0KLS0gKGlkKV93
ZWJfc3VwZXJBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRl
Ci17Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICByZXR1cm4g
W3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGVdOwotICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotfQotCi0tICh2b2lkKV93ZWJfc3VwZXJEb0Nv
bW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBbc3VwZXIgZG9Db21tYW5kQnlT
ZWxlY3RvcjpzZWxlY3Rvcl07Ci19Ci0KLS0gKEJPT0wpX3dlYl9zdXBlclBlcmZvcm1LZXlFcXVp
dmFsZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICByZXR1cm4gW3N1cGVyIHBlcmZvcm1LZXlF
cXVpdmFsZW50OmV2ZW50XTsKLX0KLQotLSAodm9pZClfd2ViX3N1cGVyS2V5RG93bjooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgW3N1cGVyIGtleURvd246ZXZlbnRdOwotfQotCi0tIChOU1ZpZXcg
Kilfd2ViX3N1cGVySGl0VGVzdDooTlNQb2ludClwb2ludAotewotICAgIHJldHVybiBbc3VwZXIg
aGl0VGVzdDpwb2ludF07Ci19Ci0KLS0gKGlkKV93ZWJfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9u
Q29udHJvbGxlckZvckhpdFRlc3RSZXN1bHRJbnRlcm5hbDooQVBJOjpIaXRUZXN0UmVzdWx0Kilo
aXRUZXN0UmVzdWx0IHdpdGhUeXBlOih1aW50MzJfdCl0eXBlIHVzZXJEYXRhOihBUEk6Ok9iamVj
dCopdXNlckRhdGEKLXsKLSAgICBpZDxOU1NlY3VyZUNvZGluZz4gZGF0YSA9IHVzZXJEYXRhID8g
c3RhdGljX2Nhc3Q8aWQ8TlNTZWN1cmVDb2Rpbmc+Pih1c2VyRGF0YS0+d3JhcHBlcigpKSA6IG5p
bDsKLSAgICByZXR1cm4gW3NlbGYgX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JIaXRUZXN0UmVzdWx0OndyYXBwZXIoKmhpdFRlc3RSZXN1bHQpIHdpdGhUeXBlOihfV0tJbW1l
ZGlhdGVBY3Rpb25UeXBlKXR5cGUgdXNlckRhdGE6ZGF0YV07Ci19Ci0KLS0gKHZvaWQpX3dlYl9w
cmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci0gICAgaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KVtzZWxmIFVJ
RGVsZWdhdGVdOwotICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKF9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9yV2ViVmlldzopXSkKLSAg
ICAgICAgW3VpRGVsZWdhdGUgX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JX
ZWJWaWV3OnNlbGZdOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYgX3ByZXBhcmVGb3JJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb25dOwotfQotCi0tICh2b2lkKV93ZWJfY2FuY2VsSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uCi17Ci0gICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVsZWdhdGUg
PSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KVtzZWxmIFVJRGVsZWdhdGVdOwotICAgIGlmIChb
dWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9jYW5jZWxJbW1lZGlhdGVB
Y3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OildKQotICAgICAgICBbdWlEZWxlZ2F0ZSBfY2FuY2Vs
SW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9yV2ViVmlldzpzZWxmXTsKLSAgICBlbHNlCi0gICAg
ICAgIFtzZWxmIF9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25dOwotfQotCi0tICh2b2lk
KV93ZWJfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KLXsKLSAgICBpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pW3Nl
bGYgVUlEZWxlZ2F0ZV07Ci0gICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9yV2ViVmlldzopXSkK
LSAgICAgICAgW3VpRGVsZWdhdGUgX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uRm9y
V2ViVmlldzpzZWxmXTsKLSAgICBlbHNlCi0gICAgICAgIFtzZWxmIF9jb21wbGV0ZUltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpX3dlYl9kaWRDaGFuZ2VDb250ZW50U2l6
ZTooTlNTaXplKW5ld1NpemUKLXsKLX0KLQotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0KLS0g
KFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKV93ZWJfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJh
Z2dpbmdJbmZvOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwotewotICAgIGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
Pilbc2VsZiBVSURlbGVnYXRlXTsKLSAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dp
bmdJbmZvOildKQotICAgICAgICByZXR1cm4gW3VpRGVsZWdhdGUgX3dlYlZpZXc6c2VsZiBkcmFn
RGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb107Ci0KLSAg
ICBpZiAoIWxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6OlNES1ZlcnNpb246OkZpcnN0V2l0aERyb3BU
b05hdmlnYXRlRGlzYWxsb3dlZEJ5RGVmYXVsdCkpCi0gICAgICAgIHJldHVybiBXS0RyYWdEZXN0
aW5hdGlvbkFjdGlvbkFueTsKLQotICAgIHJldHVybiBXS0RyYWdEZXN0aW5hdGlvbkFjdGlvbkFu
eSAmIH5XS0RyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQ7Ci19Ci0KLS0gKHZvaWQpX3dlYl9kaWRQ
ZXJmb3JtRHJhZ09wZXJhdGlvbjooQk9PTCloYW5kbGVkCi17Ci0gICAgaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KXNlbGYuVUlE
ZWxlZ2F0ZTsKLSAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfd2ViVmlldzpkaWRQZXJmb3JtRHJhZ09wZXJhdGlvbjopXSkKLSAgICAgICAgW3VpRGVsZWdh
dGUgX3dlYlZpZXc6c2VsZiBkaWRQZXJmb3JtRHJhZ09wZXJhdGlvbjpoYW5kbGVkXTsKLX0KLQot
I2VuZGlmCi0KLS0gKHZvaWQpX3dlYl9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dz
Ci17Ci0gICAgX2ltcGwtPmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9tVmll
d09ubHkoKTsKLX0KLQotLSAodm9pZClfd2ViX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdp
bmRvd3NXaXRoQW5pbWF0aW9uOihCT09MKXdpdGhBbmltYXRpb24KLXsKLSAgICBfaW1wbC0+ZGlz
bWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c1dpdGhBbmltYXRpb25Gcm9tVmlld09ubHko
d2l0aEFuaW1hdGlvbik7Ci19Ci0KLS0gKHZvaWQpX3dlYl9lZGl0b3JTdGF0ZURpZENoYW5nZQot
ewotICAgIFtzZWxmIF9kaWRDaGFuZ2VFZGl0b3JTdGF0ZV07Ci19Ci0KLS0gKHZvaWQpX3dlYl9n
ZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKLXsKLSAg
ICBbc2VsZiBfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpldmVudF07Ci19Ci0K
LSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotCi0tIChOU1N0cmluZyAqKWZpbGVQcm9taXNlUHJv
dmlkZXI6KE5TRmlsZVByb21pc2VQcm92aWRlciAqKWZpbGVQcm9taXNlUHJvdmlkZXIgZmlsZU5h
bWVGb3JUeXBlOihOU1N0cmluZyAqKWZpbGVUeXBlCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5maWxl
TmFtZUZvckZpbGVQcm9taXNlUHJvdmlkZXIoZmlsZVByb21pc2VQcm92aWRlciwgZmlsZVR5cGUp
OwotfQotCi0tICh2b2lkKWZpbGVQcm9taXNlUHJvdmlkZXI6KE5TRmlsZVByb21pc2VQcm92aWRl
ciAqKWZpbGVQcm9taXNlUHJvdmlkZXIgd3JpdGVQcm9taXNlVG9VUkw6KE5TVVJMICopdXJsIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICplcnJvcikpY29tcGxldGlvbkhhbmRs
ZXIKLXsKLSAgICBfaW1wbC0+d3JpdGVUb1VSTEZvckZpbGVQcm9taXNlUHJvdmlkZXIoZmlsZVBy
b21pc2VQcm92aWRlciwgdXJsLCBjb21wbGV0aW9uSGFuZGxlcik7Ci19Ci0KLS0gKE5TRHJhZ09w
ZXJhdGlvbilkcmFnZ2luZ1Nlc3Npb246KE5TRHJhZ2dpbmdTZXNzaW9uICopc2Vzc2lvbiBzb3Vy
Y2VPcGVyYXRpb25NYXNrRm9yRHJhZ2dpbmdDb250ZXh0OihOU0RyYWdnaW5nQ29udGV4dCljb250
ZXh0Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5kcmFnU291cmNlT3BlcmF0aW9uTWFzayhzZXNzaW9u
LCBjb250ZXh0KTsKLX0KLQotLSAodm9pZClkcmFnZ2luZ1Nlc3Npb246KE5TRHJhZ2dpbmdTZXNz
aW9uICopc2Vzc2lvbiBlbmRlZEF0UG9pbnQ6KE5TUG9pbnQpc2NyZWVuUG9pbnQgb3BlcmF0aW9u
OihOU0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCi17Ci0gICAgX2ltcGwtPmRyYWdnaW5nU2Vzc2lv
bkVuZGVkKHNlc3Npb24sIHNjcmVlblBvaW50LCBvcGVyYXRpb24pOwotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkKLQotLSAoTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0
aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8KLXsKLSAgICBpZiAoYXV0
byB3ZWJGcmFtZVByb3h5ID0gX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gX2lt
cGwtPnByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbyhwcmludEluZm8sICp3ZWJGcmFtZVByb3h5
KTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jcHJh
Z21hIG1hcmsgLSB0b3VjaEJhciBtZXRob2RzCi0KLSNpZiBIQVZFKFRPVUNIX0JBUikKLQotQGR5
bmFtaWMgdG91Y2hCYXI7Ci0KLS0gKE5TVG91Y2hCYXIgKiltYWtlVG91Y2hCYXIKLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPm1ha2VUb3VjaEJhcigpOwotfQotCi0tIChOU0NhbmRpZGF0ZUxpc3RUb3Vj
aEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtCi17Ci0gICAgcmV0dXJuIF9pbXBs
LT5jYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtKCk7Ci19Ci0KLS0gKHZvaWQpX3dlYl9kaWRBZGRN
ZWRpYUNvbnRyb2xzTWFuYWdlcjooaWQpY29udHJvbHNNYW5hZ2VyCi17Ci0gICAgW3NlbGYgX2Fk
ZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6Y29udHJvbHNNYW5hZ2VyXTsKLX0KLQotLSAodm9p
ZClfd2ViX2RpZFJlbW92ZU1lZGlhQ29udHJvbHNNYW5hZ2VyCi17Ci0gICAgW3NlbGYgX3JlbW92
ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddOwotfQotCi0tICh2b2lkKV9pbnRlcmFjdFdpdGhN
ZWRpYUNvbnRyb2xzRm9yVGVzdGluZwotewotICAgIFtzZWxmIF9zZXRXYW50c01lZGlhUGxheWJh
Y2tDb250cm9sc1ZpZXc6WUVTXTsKLSAgICBbc2VsZiBtYWtlVG91Y2hCYXJdOwotfQotCi0jZW5k
aWYgLy8gSEFWRShUT1VDSF9CQVIpCi0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gV0tXZWJWaWV3
IChXS1ByaXZhdGUpCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkKLQot
I3ByYWdtYSBtYXJrIC0gbWFjT1MgV0tQcml2YXRlCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNk
ZWZpbmUgV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoY29tbWFuZCkgLSAodm9pZClfIyNjb21tYW5k
OihpZClzZW5kZXIgeyBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKCNjb21tYW5kICMjIF9zKTsg
fQotCi1XRUJDT1JFX1BSSVZBVEVfQ09NTUFORChhbGlnbkNlbnRlcikKLVdFQkNPUkVfUFJJVkFU
RV9DT01NQU5EKGFsaWduSnVzdGlmaWVkKQotV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoYWxpZ25M
ZWZ0KQotV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoYWxpZ25SaWdodCkKLVdFQkNPUkVfUFJJVkFU
RV9DT01NQU5EKGluc2VydE9yZGVyZWRMaXN0KQotV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoaW5z
ZXJ0VW5vcmRlcmVkTGlzdCkKLVdFQkNPUkVfUFJJVkFURV9DT01NQU5EKGluc2VydE5lc3RlZE9y
ZGVyZWRMaXN0KQotV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoaW5zZXJ0TmVzdGVkVW5vcmRlcmVk
TGlzdCkKLVdFQkNPUkVfUFJJVkFURV9DT01NQU5EKGluZGVudCkKLVdFQkNPUkVfUFJJVkFURV9D
T01NQU5EKG91dGRlbnQpCi1XRUJDT1JFX1BSSVZBVEVfQ09NTUFORChwYXN0ZUFzUXVvdGF0aW9u
KQotV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQocGFzdGVBbmRNYXRjaFN0eWxlKQotCi0jdW5kZWYg
V0VCQ09SRV9QUklWQVRFX0NPTU1BTkQKLQotLSAodm9pZClfdG9nZ2xlU3RyaWtlVGhyb3VnaDoo
aWQpc2VuZGVyCi17Ci0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZCgic3RyaWtldGhyb3Vn
aCJfcyk7Ci19Ci0KLS0gKHZvaWQpX2luY3JlYXNlTGlzdExldmVsOihpZClzZW5kZXIKLXsKLSAg
ICBfcGFnZS0+aW5jcmVhc2VMaXN0TGV2ZWwoKTsKLX0KLQotLSAodm9pZClfZGVjcmVhc2VMaXN0
TGV2ZWw6KGlkKXNlbmRlcgotewotICAgIF9wYWdlLT5kZWNyZWFzZUxpc3RMZXZlbCgpOwotfQot
Ci0tICh2b2lkKV9jaGFuZ2VMaXN0VHlwZTooaWQpc2VuZGVyCi17Ci0gICAgX3BhZ2UtPmNoYW5n
ZUxpc3RUeXBlKCk7Ci19Ci0KLS0gKEJPT0wpX3VzZVN5c3RlbUFwcGVhcmFuY2UKLXsKLSAgICBy
ZXR1cm4gX2ltcGwtPnVzZVN5c3RlbUFwcGVhcmFuY2UoKTsKLX0KLQotLSAodm9pZClfc2V0VXNl
U3lzdGVtQXBwZWFyYW5jZTooQk9PTCl1c2VTeXN0ZW1BcHBlYXJhbmNlCi17Ci0gICAgX2ltcGwt
PnNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSk7Ci19Ci0KLS0gKFdL
UGFnZVJlZilfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlldwotewotICAgIHJldHVybiB0
b0FQSShfcGFnZS5nZXQoKSk7Ci19Ci0KLS0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0Oihf
V0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlCi17Ci0gICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJv
eHkgPSBfcGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZy
b21JRChmcmFtZUhhbmRsZS5fZnJhbWVJRCkpKQotICAgICAgICByZXR1cm4gX2ltcGwtPmNhbkNo
YW5nZUZyYW1lTGF5b3V0KCp3ZWJGcmFtZVByb3h5KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LS0gKEJPT0wpX3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bp
bm5lZFN0YXRlOihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUKLXsKLSAgICByZXR1cm4gX2ltcGwt
PnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlubmVkU3RhdGUpOwotfQotCi0t
IChCT09MKV9pZ25vcmVzTm9uV2hlZWxFdmVudHMKLXsKLSAgICByZXR1cm4gX2ltcGwtPmlnbm9y
ZXNOb25XaGVlbEV2ZW50cygpOwotfQotCi0tICh2b2lkKV9zZXRJZ25vcmVzTm9uV2hlZWxFdmVu
dHM6KEJPT0wpaWdub3Jlc05vbldoZWVsRXZlbnRzCi17Ci0gICAgX2ltcGwtPnNldElnbm9yZXNO
b25XaGVlbEV2ZW50cyhpZ25vcmVzTm9uV2hlZWxFdmVudHMpOwotfQotCi0tIChCT09MKV9oYXNB
Y3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcgotewotICAgIHJldHVybiBfcGFnZSAmJiBfcGFn
ZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKLX0KLQotLSAodm9pZClfZGlz
bWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93cwotewotICAgIF9pbXBsLT5kaXNtaXNzQ29u
dGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzRnJvbVZpZXdPbmx5KCk7Ci19Ci0KLS0gKHZvaWQpX2dl
c3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudAotewotICAg
IF9pbXBsLT5nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlRnJvbVZpZXdPbmx5KGV2
ZW50KTsKLX0KLQotLSAodm9pZClfZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMKLXsKLSAgICBfaW1w
bC0+ZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKLX0KLQotLSAodm9pZClfZW5hYmxlRnJhbWVT
aXplVXBkYXRlcwotewotICAgIF9pbXBsLT5lbmFibGVGcmFtZVNpemVVcGRhdGVzKCk7Ci19Ci0K
LS0gKHZvaWQpX2JlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcwotewotICAgIF9pbXBs
LT5iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsKLX0KLQotLSAodm9pZClfZW5k
RGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcwotewotICAgIF9pbXBsLT5lbmREZWZlcnJpbmdW
aWV3SW5XaW5kb3dDaGFuZ2VzKCk7Ci19Ci0KLS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldp
bmRvd0NoYW5nZXNTeW5jCi17Ci0gICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRvd0No
YW5nZXNTeW5jKCk7Ci19Ci0KLS0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3
Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7Ci19Ci0K
LS0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKLXsKLSAgICByZXR1cm4gX2ltcGwtPmZ1
bGxTY3JlZW5XaW5kb3coKTsKLX0KLQotLSAoTlNDb2xvciAqKV91bmRlcmxheUNvbG9yCi17Ci0g
ICAgcmV0dXJuIF9pbXBsLT51bmRlcmxheUNvbG9yKCk7Ci19Ci0KLS0gKHZvaWQpX3NldFVuZGVy
bGF5Q29sb3I6KE5TQ29sb3IgKil1bmRlcmxheUNvbG9yCi17Ci0gICAgX2ltcGwtPnNldFVuZGVy
bGF5Q29sb3IodW5kZXJsYXlDb2xvcik7Ci19Ci0KLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmll
d3M6KE5TQXJyYXkgKiljdXN0b21Td2lwZVZpZXdzCi17Ci0gICAgX2ltcGwtPnNldEN1c3RvbVN3
aXBlVmlld3MoY3VzdG9tU3dpcGVWaWV3cyk7Ci19Ci0KLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBl
Vmlld3NUb3BDb250ZW50SW5zZXQ6KGZsb2F0KXRvcENvbnRlbnRJbnNldAotewotICAgIF9pbXBs
LT5zZXRDdXN0b21Td2lwZVZpZXdzVG9wQ29udGVudEluc2V0KHRvcENvbnRlbnRJbnNldCk7Ci19
Ci0KLS0gKHZvaWQpX3NldERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2s6KHZvaWQoXikoQ0dS
ZWN0KSljYWxsYmFjawotewotICAgIF9pbXBsLT5zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxi
YWNrKGNhbGxiYWNrKTsKLX0KLQotLSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdClyZWN0IGFuZFNj
cm9sbEJ5OihOU1NpemUpb2Zmc2V0Ci17Ci0gICAgX2ltcGwtPnNldEZyYW1lQW5kU2Nyb2xsQnko
TlNSZWN0VG9DR1JlY3QocmVjdCksIE5TU2l6ZVRvQ0dTaXplKG9mZnNldCkpOwotfQotCi0tICh2
b2lkKV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczooQ0dGbG9hdCl0b3RhbEhlaWdodE9mQmFubmVy
cwotewotICAgIF9pbXBsLT5zZXRUb3RhbEhlaWdodE9mQmFubmVycyh0b3RhbEhlaWdodE9mQmFu
bmVycyk7Ci19Ci0KLS0gKENHRmxvYXQpX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzCi17Ci0gICAgcmV0
dXJuIF9pbXBsLT50b3RhbEhlaWdodE9mQmFubmVycygpOwotfQotCi0tICh2b2lkKV9zZXRTaG91
bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlczooQk9PTClzaG91bGRTdXBwcmVzcwotewot
ICAgIF9pbXBsLT5zZXRTaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcyhzaG91bGRT
dXBwcmVzcyk7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNwcmFnbWEgbWFyayAt
IGlPUyBXS1ByaXZhdGUKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLUZPUl9FQUNIX1BS
SVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklF
VykKLQotLSAodm9pZClfc2V0Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlkKXNlbmRlcgot
ewotICAgIGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQotICAgICAgICBbX2NvbnRl
bnRWaWV3IF9zZXRGb250Rm9yV2ViVmlldzpmb250IHNlbmRlcjpzZW5kZXJdOwotfQotCi0tICh2
b2lkKV9zZXRGb250U2l6ZTooQ0dGbG9hdClmb250U2l6ZSBzZW5kZXI6KGlkKXNlbmRlcgotewot
ICAgIGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQotICAgICAgICBbX2NvbnRlbnRW
aWV3IF9zZXRGb250U2l6ZUZvcldlYlZpZXc6Zm9udFNpemUgc2VuZGVyOnNlbmRlcl07Ci19Ci0K
LS0gKHZvaWQpX3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQpc2VuZGVy
Ci17Ci0gICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCi0gICAgICAgIFtfY29u
dGVudFZpZXcgX3NldFRleHRDb2xvckZvcldlYlZpZXc6Y29sb3Igc2VuZGVyOnNlbmRlcl07Ci19
Ci0KLS0gKFVJVmlldyAqKWlucHV0QWNjZXNzb3J5VmlldwotewotICAgIHJldHVybiBbX2NvbnRl
bnRWaWV3IGlucHV0QWNjZXNzb3J5Vmlld0ZvcldlYlZpZXddOwotfQotCi0tIChVSVZpZXcgKilp
bnB1dFZpZXcKLXsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dFZpZXdGb3JXZWJWaWV3
XTsKLX0KLQotLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcKLXsKLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIgaXNGdWxsU2NyZWVuXSkKLSAgICAgICAgcmV0dXJuIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIgd2ViVmlld1BsYWNlaG9sZGVyXTsKLSNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1l
bnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXiko
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sKLXsKLSAgICBhdXRvIGluZm9SZXF1ZXN0
ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdChXZWJDb3JlOjpyb3VuZGVk
SW50UG9pbnQocG9zaXRpb24pKTsKLSAgICBpbmZvUmVxdWVzdC5pbmNsdWRlU25hcHNob3QgPSB0
cnVlOwotCi0gICAgW19jb250ZW50VmlldyBkb0FmdGVyUG9zaXRpb25JbmZvcm1hdGlvblVwZGF0
ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihibG9jayldIChXZWJLaXQ6OkludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKSB7Ci0gICAgICAgIGNhcHR1cmVk
QmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFjdGl2YXRlZEVsZW1lbnRJbmZvV2l0aElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOmluZm9ybWF0aW9uIHVzZXJJbmZvOm5pbF0p
OwotICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVzdF07Ci19Ci0KLS0gKENHUmVjdClfY29udGVu
dFZpc2libGVSZWN0Ci17Ci0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGJvdW5k
c10gdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Ci19Ci0KLS0gKENHUG9pbnQpX2Nv
bnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludAotewotICAgIHJldHVy
biBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRW
aWV3XTsKLX0KLQotLSAoQ0dQb2ludClfY29udmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihD
R1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1Zp
ZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKLX0KLQotLSAodm9pZClkaWRTdGFydEZvcm1D
b250cm9sSW50ZXJhY3Rpb24KLXsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4K
LX0KLQotLSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uCi17Ci0gICAgLy8gRm9y
IHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi19Ci0KLS0gKENHUmVjdClfdWlUZXh0Q2FyZXRSZWN0
Ci17Ci0gICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBuZWVkZWQu
Ci0gICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07Ci0KLSAgICByZXR1
cm4gW1tfY29udGVudFZpZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Npc3RhbnQu
c2VsZWN0aW9uVmlldy5zZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOwotfQotCi0t
ICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0lu
dGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyCi17
Ci0gICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlv
bk9mZnNldDpvZmZzZXQgd2l0aFRleHQ6dGV4dCBjb21wbGV0aW9uSGFuZGxlcjpbY2FwdHVyZWRD
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mIHNlbGVjdGlvblJlY3RzKSB7Ci0gICAg
ICAgIGlmICghY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgYXV0byByZWN0VmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5OnNlbGVjdGlvblJlY3RzLnNpemUoKV0pOwotICAgICAgICBmb3Ig
KGF1dG8mIHNlbGVjdGlvblJlY3QgOiBzZWxlY3Rpb25SZWN0cykKLSAgICAgICAgICAgIFtyZWN0
VmFsdWVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6c2VsZWN0aW9uUmVjdC5y
ZWN0KCldXTsKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihyZWN0VmFsdWVzLmdl
dCgpKTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9u
Ci17Ci0gICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uXTsKLX0K
LQotLSAodm9pZClfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uCi17Ci0gICAgW19jb250ZW50
VmlldyBfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uXTsKLX0KLQotLSAoQk9PTClfY29udGVu
dFZpZXdJc0ZpcnN0UmVzcG9uZGVyCi17Ci0gICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZW50
Vmlldy5pc0ZpcnN0UmVzcG9uZGVyOwotfQotCi0tICh2b2lkICheKSh2b2lkKSlfcmV0YWluQWN0
aXZlRm9jdXNlZFN0YXRlCi17Ci0gICAgKytfYWN0aXZlRm9jdXNlZFN0YXRlUmV0YWluQ291bnQ7
Ci0KLSAgICAvLyBGSVhNRTogVXNlIHNvbWV0aGluZyBsaWtlIENvbXBsZXRpb25IYW5kbGVyQ2Fs
bENoZWNrZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGJsb2NrIGlzIGNhbGxlZCBiZWZv
cmUgaXQncyByZWxlYXNlZC4KLSAgICByZXR1cm4gW1tbc2VsZl0gewotICAgICAgICAtLV9hY3Rp
dmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKLSAgICB9IGNvcHldIGF1dG9yZWxlYXNlXTsKLX0K
LQotLSAodm9pZClfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2Fy
ZDooQk9PTClzZWxlY3RpbmdGb3J3YXJkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09M
IGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIHR5cGVv
Zihjb21wbGV0aW9uSGFuZGxlcikgY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbmlsOwotICAgIGlm
IChjb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gQmxv
Y2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBbX2NvbnRlbnRWaWV3IF9iZWNvbWVG
aXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3YXJkOnNlbGVjdGluZ0ZvcndhcmQg
Y29tcGxldGlvbkhhbmRsZXI6W2NvbXBsZXRpb25IYW5kbGVyQ29weV0oQk9PTCBkaWRCZWNvbWVG
aXJzdFJlc3BvbmRlcikgewotICAgICAgICBpZiAoIWNvbXBsZXRpb25IYW5kbGVyQ29weSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkoZGlkQmVj
b21lRmlyc3RSZXNwb25kZXIpOwotICAgICAgICBCbG9ja19yZWxlYXNlKGNvbXBsZXRpb25IYW5k
bGVyQ29weSk7Ci0gICAgfV07Ci19Ci0KLS0gKGlkKV9zbmFwc2hvdExheWVyQ29udGVudHNGb3JC
YWNrRm9yd2FyZExpc3RJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCi17Ci0gICAg
aWYgKF9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgpID09ICZpdGVtLl9pdGVt
KQotICAgICAgICBfcGFnZS0+cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KCpfcGFnZS0+YmFja0Zv
cndhcmRMaXN0KCkuY3VycmVudEl0ZW0oKSk7Ci0KLSAgICBpZiAoYXV0byogdmlld1NuYXBzaG90
ID0gaXRlbS5faXRlbS5zbmFwc2hvdCgpKQotICAgICAgICByZXR1cm4gdmlld1NuYXBzaG90LT5h
c0xheWVyQ29udGVudHMoKTsKLQotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TQXJyYXkgKilf
ZGF0YURldGVjdGlvblJlc3VsdHMKLXsKLSNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0gICAg
cmV0dXJuIFtfY29udGVudFZpZXcgX2RhdGFEZXRlY3Rpb25SZXN1bHRzXTsKLSNlbHNlCi0gICAg
cmV0dXJuIG5pbDsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVT
cGVha1NlbGVjdGlvbkNvbnRlbnQKLXsKLSAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc2liaWxpdHlS
ZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudF07Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGZv
ciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotLy8gQ3VycmVudGx5IGl0J3Mgb25seSBpbiBUZXN0
UnVubmVyV0tXZWJWaWV3LgotLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0
aW9uQ29udGVudDooTlNTdHJpbmcgKiljb250ZW50Ci17Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShJT1NfRkFNSUxZKQotCi0jcHJhZ21hIG1hcmsgLSBtYWNPUy9pT1MgV0tQcml2YXRlCi0KLS0g
KENHU2l6ZSlfdmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cwotewotICAgIHJldHVybiBf
cGFnZS0+dmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cygpOwotfQotCi0tICh2b2lkKV9z
ZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzOihDR1NpemUpdmlld3BvcnRTaXplCi17
Ci0gICAgYXV0byB2aWV3cG9ydFNpemVGb3JWaWV3cG9ydFVuaXRzID0gV2ViQ29yZTo6SW50U2l6
ZSh2aWV3cG9ydFNpemUpOwotICAgIGlmICh2aWV3cG9ydFNpemVGb3JWaWV3cG9ydFVuaXRzLmlz
RW1wdHkoKSkKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhj
ZXB0aW9uIGZvcm1hdDpAIlZpZXdwb3J0IHNpemUgc2hvdWxkIG5vdCBiZSBlbXB0eSJdOwotCi0g
ICAgX3BhZ2UtPnNldFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHModmlld3BvcnRTaXpl
Rm9yVmlld3BvcnRVbml0cyk7Ci19Ci0KLS0gKF9XS0luc3BlY3RvciAqKV9pbnNwZWN0b3IKLXsK
LSAgICBpZiAoYXV0byogaW5zcGVjdG9yID0gX3BhZ2UtPmluc3BlY3RvcigpKQotICAgICAgICBy
ZXR1cm4gd3JhcHBlcigqaW5zcGVjdG9yKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChfV0tG
cmFtZUhhbmRsZSAqKV9tYWluRnJhbWUKLXsKLSAgICBpZiAoYXV0byogZnJhbWUgPSBfcGFnZS0+
bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6RnJhbWVIYW5kbGU6OmNy
ZWF0ZShmcmFtZS0+ZnJhbWVJRCgpKSk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoQk9PTClf
aXNFZGl0YWJsZQotewotICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+aXNFZGl0YWJsZSgpOwot
fQotCi0tICh2b2lkKV9zZXRFZGl0YWJsZTooQk9PTCllZGl0YWJsZQotewotICAgIGJvb2wgd2Fz
RWRpdGFibGUgPSBfcGFnZS0+aXNFZGl0YWJsZSgpOwotICAgIF9wYWdlLT5zZXRFZGl0YWJsZShl
ZGl0YWJsZSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChlZGl0YWJsZSkKLSAgICAgICAg
X2ltcGwtPmRpZEJlY29tZUVkaXRhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmICh3YXNFZGl0YWJs
ZSA9PSBlZGl0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBbX2NvbnRlbnRWaWV3IF9kaWRDaGFuZ2VXZWJWaWV3RWRpdGFiaWxpdHldOwotI2Vu
ZGlmCi19Ci0KLS0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5k
IGFyZ3VtZW50OihOU1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wp
KWNvbXBsZXRpb24KLXsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmQsIGFy
Z3VtZW50LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bildKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBpZiAoY2Fw
dHVyZWRDb21wbGV0aW9uQmxvY2spCi0gICAgICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9j
ayhlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOwotICAgIH0pOwot
fQotCi0tIChpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuZ2V0QXV0
b3JlbGVhc2VkKCk7Ci19Ci0KLS0gKHZvaWQpX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZToo
aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfdGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLS0gKHZvaWQpX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3Vy
YXRpb24gKiljb25maWd1cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXikoKSljb21wbGV0aW9uSGFu
ZGxlcgotewotICAgIHVzaW5nIEV4Y2x1c2lvblJ1bGUgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTsKLQotICAgIGlmICghX3RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZSB8fCAhX3BhZ2UpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZT4gZXhjbHVzaW9uUnVsZXM7Ci0gICAgaWYgKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9u
UnVsZSAqd2tSdWxlIGluIGNvbmZpZ3VyYXRpb24uZXhjbHVzaW9uUnVsZXMpIHsKLSAgICAgICAg
ICAgIGF1dG8gdHlwZSA9IHdrUnVsZS5pc0V4Y2x1c2lvbiA/IEV4Y2x1c2lvblJ1bGU6OlR5cGU6
OkV4Y2x1ZGUgOiBFeGNsdXNpb25SdWxlOjpUeXBlOjpJbmNsdWRlOwotICAgICAgICAgICAgaWYg
KHdrUnVsZS5hdHRyaWJ1dGVOYW1lKQotICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFw
cGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZSB7IHdrUnVsZS5hdHRyaWJ1
dGVOYW1lLCB3a1J1bGUuYXR0cmlidXRlVmFsdWUgfSB9KTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KHdrUnVsZS5jbGFzc05hbWUpCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5k
KHt0eXBlLCBFeGNsdXNpb25SdWxlOjpDbGFzc1J1bGUgeyB3a1J1bGUuY2xhc3NOYW1lIH0gfSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5k
KHt0eXBlLCBFeGNsdXNpb25SdWxlOjpFbGVtZW50UnVsZSB7IHdrUnVsZS5lbGVtZW50TmFtZSB9
IH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgX3BhZ2UtPnN0YXJ0VGV4dE1hbmlwdWxhdGlv
bnMoZXhjbHVzaW9uUnVsZXMsIFt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2Vs
ZildIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIg
aXRlbUlELAotICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5zKSB7Ci0gICAgICAgIGlmICghd2Vh
a1NlbGYpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byByZXRhaW5lZFNlbGYg
PSB3ZWFrU2VsZi5nZXQoKTsKLSAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IFtyZXRhaW5lZFNlbGYg
X3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZV07Ci0gICAgICAgIGlmICghZGVsZWdhdGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKndrVG9rZW5zID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnRva2Vucy5zaXplKCldOwotICAgICAgICBm
b3IgKGF1dG8mIHRva2VuIDogdG9rZW5zKSB7Ci0gICAgICAgICAgICBhdXRvIHdrVG9rZW4gPSBh
ZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7Ci0gICAgICAg
ICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZp
ZXIudG9VSW50NjQoKSldOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0Q29udGVudDp0b2tlbi5j
b250ZW50XTsKLSAgICAgICAgICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVk
ZWRdOwotICAgICAgICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0ZW1JRC50
b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKLSAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3
OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06aXRlbS5nZXQo
KV07Ci0gICAgfSwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgewotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jaygpOwot
ICAgIH0pOwotfQotCi0tICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRN
YW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2Vzcykp
Y29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICB1c2luZyBNYW5pcHVsYXRpb25SZXN1bHQgPSBXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0OwotCi0g
ICAgaWYgKCFfcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpdGVtSUQgPSBtYWtl
T2JqZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRl
bUlkZW50aWZpZXJUeXBlPihTdHJpbmcoaXRlbS5pZGVudGlmaWVyKS50b1VJbnQ2NCgpKTsKLQot
ICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+IHRva2VuczsKLSAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqd2tU
b2tlbiBpbiBpdGVtLnRva2VucykgewotICAgICAgICBhdXRvIHRva2VuSUQgPSBtYWtlT2JqZWN0
SWRlbnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VG9rZW5JZGVu
dGlmaWVyVHlwZT4oU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllcikudG9VSW50NjQoKSk7Ci0gICAg
ICAgIHRva2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1h
bmlwdWxhdGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5jb250ZW50IH0pOwotICAgIH0KLQot
ICAgIF9wYWdlLT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oaXRlbUlELCB0b2tlbnMsIFtjYXB0
dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChN
YW5pcHVsYXRpb25SZXN1bHQgcmVzdWx0KSB7Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJs
b2NrKHJlc3VsdCA9PSBNYW5pcHVsYXRpb25SZXN1bHQ6OlN1Y2Nlc3MpOwotICAgIH0pOwotfQot
LSAodm9pZClfdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIKLXsKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgW3NlbGYgdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOnNlbmRl
cl07Ci0jZWxzZQotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlRha2VGaW5kU3RyaW5n
RnJvbVNlbGVjdGlvbiJfcyk7Ci0jZW5kaWYKLX0KLQotKyAoTlNTdHJpbmcgKilfc3RyaW5nRm9y
RmluZAotewotICAgIHJldHVybiBXZWJLaXQ6OnN0cmluZ0ZvckZpbmQoKTsKLX0KLQotKyAodm9p
ZClfc2V0U3RyaW5nRm9yRmluZDooTlNTdHJpbmcgKilmaW5kU3RyaW5nCi17Ci0gICAgV2ViS2l0
Ojp1cGRhdGVTdHJpbmdGb3JGaW5kKGZpbmRTdHJpbmcpOwotfQotCi0tIChfV0tSZW1vdGVPYmpl
Y3RSZWdpc3RyeSAqKV9yZW1vdGVPYmplY3RSZWdpc3RyeQotewotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICByZXR1cm4gX2ltcGwtPnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCk7Ci0jZWxzZQotICAgIGlm
ICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KSB7Ci0gICAgICAgIF9yZW1vdGVPYmplY3RSZWdpc3Ry
eSA9IGFkb3B0TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRoV2Vi
UGFnZVByb3h5OipfcGFnZV0pOwotICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29s
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBfcGFnZS0+aWRlbnRpZmllcigpLCBbX3JlbW90ZU9iamVjdFJl
Z2lzdHJ5IHJlbW90ZU9iamVjdFJlZ2lzdHJ5XSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIF9yZW1v
dGVPYmplY3RSZWdpc3RyeS5nZXQoKTsKLSNlbmRpZgotfQotCi0tIChXS0Jyb3dzaW5nQ29udGV4
dEhhbmRsZSAqKV9oYW5kbGUKLXsKLSAgICByZXR1cm4gW1tbV0tCcm93c2luZ0NvbnRleHRIYW5k
bGUgYWxsb2NdIF9pbml0V2l0aFBhZ2VQcm94eToqX3BhZ2VdIGF1dG9yZWxlYXNlXTsKLX0KLQot
LSAoX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMpX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NF
dmVudHMKLXsKLSAgICByZXR1cm4gX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM7Ci19
Ci0KLS0gKGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU+KV9oaXN0b3J5RGVsZWdhdGUKLXsK
LSAgICByZXR1cm4gX25hdmlnYXRpb25TdGF0ZS0+aGlzdG9yeURlbGVnYXRlKCkuYXV0b3JlbGVh
c2UoKTsKLX0KLQotLSAodm9pZClfc2V0SGlzdG9yeURlbGVnYXRlOihpZCA8V0tIaXN0b3J5RGVs
ZWdhdGVQcml2YXRlPiloaXN0b3J5RGVsZWdhdGUKLXsKLSAgICBfcGFnZS0+c2V0SGlzdG9yeUNs
aWVudChfbmF2aWdhdGlvblN0YXRlLT5jcmVhdGVIaXN0b3J5Q2xpZW50KCkpOwotICAgIF9uYXZp
Z2F0aW9uU3RhdGUtPnNldEhpc3RvcnlEZWxlZ2F0ZShoaXN0b3J5RGVsZWdhdGUpOwotfQotCi0t
ICh2b2lkKV91cGRhdGVNZWRpYVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyCi17Ci0jaWYgSEFWRShU
T1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICBf
aW1wbC0+dXBkYXRlTWVkaWFQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOwotI2VuZGlmCi19Ci0K
LS0gKEJPT0wpX2NhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmUKLXsKLSNpZiBIQVZFKFRPVUNIX0JB
UikKLSAgICByZXR1cm4gX2ltcGwtPmNhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIE5POwotI2VuZGlmCi19Ci0KLS0gKEJPT0wpX2lzUGljdHVyZUluUGljdHVy
ZUFjdGl2ZQotewotI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NP
TlRST0xTX01BTkFHRVIpCi0gICAgcmV0dXJuIF9pbXBsLT5pc1BpY3R1cmVJblBpY3R1cmVBY3Rp
dmUoKTsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3RvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUKLXsKLSNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIF9pbXBsLT50b2dnbGVQaWN0dXJlSW5QaWN0
dXJlKCk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfY2xvc2VBbGxNZWRpYVByZXNlbnRhdGlvbnMK
LXsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGF1dG8gdmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciA9IF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkpIHsKLSAgICAgICAg
dmlkZW9GdWxsc2NyZWVuTWFuYWdlci0+Zm9yRWFjaFNlc3Npb24oW10gKGF1dG8mIG1vZGVsLCBh
dXRvJiBpbnRlcmZhY2UpIHsKLSAgICAgICAgICAgIG1vZGVsLnJlcXVlc3RGdWxsc2NyZWVuTW9k
ZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25l
KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gZnVsbFNjcmVlbk1hbmFnZXIg
PSBfcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKTsgZnVsbFNjcmVlbk1hbmFnZXIgJiYgZnVsbFNj
cmVlbk1hbmFnZXItPmlzRnVsbFNjcmVlbigpKQotICAgICAgICBmdWxsU2NyZWVuTWFuYWdlci0+
Y2xvc2UoKTsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9zdG9wTWVkaWFDYXB0dXJlCi17Ci0gICAg
X3BhZ2UtPnN0b3BNZWRpYUNhcHR1cmUoKTsKLX0KLQotLSAodm9pZClfc3RvcEFsbE1lZGlhUGxh
eWJhY2sKLXsKLSAgICBfcGFnZS0+c3RvcEFsbE1lZGlhUGxheWJhY2soKTsKLX0KLQotLSAodm9p
ZClfc3VzcGVuZEFsbE1lZGlhUGxheWJhY2sKLXsKLSAgICBfcGFnZS0+c3VzcGVuZEFsbE1lZGlh
UGxheWJhY2soKTsKLX0KLQotLSAodm9pZClfcmVzdW1lQWxsTWVkaWFQbGF5YmFjawotewotICAg
IF9wYWdlLT5yZXN1bWVBbGxNZWRpYVBsYXliYWNrKCk7Ci19Ci0KLS0gKE5TVVJMICopX3VucmVh
Y2hhYmxlVVJMCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X3Bh
Z2UtPnBhZ2VMb2FkU3RhdGUoKS51bnJlYWNoYWJsZVVSTCgpXTsKLX0KLQotLSAoTlNVUkwgKilf
bWFpbkZyYW1lVVJMCi17Ci0gICAgaWYgKGF1dG8qIGZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgp
KQotICAgICAgICByZXR1cm4gZnJhbWUtPnVybCgpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0g
KHZvaWQpX2xvYWRBbHRlcm5hdGVIVE1MU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBiYXNlVVJM
OihOU1VSTCAqKWJhc2VVUkwgZm9yVW5yZWFjaGFibGVVUkw6KE5TVVJMICopdW5yZWFjaGFibGVV
UkwKLXsKLSAgICBOU0RhdGEgKmRhdGEgPSBbc3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXTsKLSAgICBfcGFnZS0+bG9hZEFsdGVybmF0ZUhUTUwoeyBzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sICJVVEYtOCJf
cywgYmFzZVVSTCwgdW5yZWFjaGFibGVVUkwpOwotfQotCi0tIChXS05hdmlnYXRpb24gKilfbG9h
ZERhdGE6KE5TRGF0YSAqKWRhdGEgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgY2hhcmFj
dGVyRW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKWNoYXJhY3RlckVuY29kaW5nTmFtZSBiYXNlVVJM
OihOU1VSTCAqKWJhc2VVUkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhCi17Ci0gICAgcmV0dXJuIHdy
YXBwZXIoX3BhZ2UtPmxvYWREYXRhKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEu
Ynl0ZXMpLCBkYXRhLmxlbmd0aCB9LCBNSU1FVHlwZSwgY2hhcmFjdGVyRW5jb2RpbmdOYW1lLCBi
YXNlVVJMLmFic29sdXRlU3RyaW5nLCBXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVz
ZXJEYXRhKS5wdHIoKSkpOwotfQotCi0tIChXS05hdmlnYXRpb24gKilfbG9hZFJlcXVlc3Q6KE5T
VVJMUmVxdWVzdCAqKXJlcXVlc3Qgc2hvdWxkT3BlbkV4dGVybmFsVVJMczooQk9PTClzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzCi17Ci0gICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPmxvYWRSZXF1ZXN0
KHJlcXVlc3QsIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMgPyBXZWJDb3JlOjpTaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdyA6IFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93KSk7Ci19Ci0KLS0gKE5TQXJyYXkgKilfY2VydGlm
aWNhdGVDaGFpbgotewotICAgIGlmIChXZWJLaXQ6OldlYkZyYW1lUHJveHkqIG1haW5GcmFtZSA9
IF9wYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+Y2VydGlmaWNh
dGVJbmZvKCkgPyAoX19icmlkZ2UgTlNBcnJheSAqKW1haW5GcmFtZS0+Y2VydGlmaWNhdGVJbmZv
KCktPmNlcnRpZmljYXRlSW5mbygpLmNlcnRpZmljYXRlQ2hhaW4oKSA6IG5pbDsKLQotICAgIHJl
dHVybiBuaWw7Ci19Ci0KLS0gKE5TVVJMICopX2NvbW1pdHRlZFVSTAotewotICAgIHJldHVybiBb
TlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCld
OwotfQotCi0tIChOU1N0cmluZyAqKV9NSU1FVHlwZQotewotICAgIGlmIChfcGFnZS0+bWFpbkZy
YW1lKCkpCi0gICAgICAgIHJldHVybiBfcGFnZS0+bWFpbkZyYW1lKCktPm1pbWVUeXBlKCk7Ci0K
LSAgICByZXR1cm4gbmlsOwotfQotCi0tIChOU1N0cmluZyAqKV91c2VyQWdlbnQKLXsKLSAgICBy
ZXR1cm4gX3BhZ2UtPnVzZXJBZ2VudCgpOwotfQotCi0tIChOU1N0cmluZyAqKV9hcHBsaWNhdGlv
bk5hbWVGb3JVc2VyQWdlbnQKLXsKLSAgICByZXR1cm4gX3BhZ2UtPmFwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudCgpOwotfQotCi0tICh2b2lkKV9zZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdl
bnQ6KE5TU3RyaW5nICopYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ci17Ci0gICAgX3BhZ2Ut
PnNldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdl
bnQpOwotICAgIF9wYWdlLT5zZXRBcHBsaWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50KGFw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7Ci19Ci0KLS0gKE5TU3RyaW5nICopX2N1c3RvbVVz
ZXJBZ2VudAotewotICAgIHJldHVybiBzZWxmLmN1c3RvbVVzZXJBZ2VudDsKLX0KLQotLSAodm9p
ZClfc2V0Q3VzdG9tVXNlckFnZW50OihOU1N0cmluZyAqKWN1c3RvbVVzZXJBZ2VudAotewotICAg
IHNlbGYuY3VzdG9tVXNlckFnZW50ID0gY3VzdG9tVXNlckFnZW50OwotfQotCi0tICh2b2lkKV9z
ZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkOihCT09MKXVzZXJDb250ZW50RXh0ZW5zaW9u
c0VuYWJsZWQKLXsKLSAgICAvLyBUaGlzIGlzIGtlcHQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5
IHdpdGggaU9TIDkuCi19Ci0KLS0gKEJPT0wpX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQK
LXsKLSAgICAvLyBUaGlzIGlzIGtlcHQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggaU9T
IDkuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS0gKHBpZF90KV93ZWJQcm9jZXNzSWRlbnRpZmll
cgotewotICAgIGlmICghW3NlbGYgX2lzVmFsaWRdKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBfcGFnZS0+cHJvY2Vzc0lkZW50aWZpZXIoKTsKLX0KLQotLSAocGlkX3QpX3Byb3Zp
c2lvbmFsV2ViUHJvY2Vzc0lkZW50aWZpZXIKLXsKLSAgICBpZiAoIVtzZWxmIF9pc1ZhbGlkXSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBhdXRvKiBwcm92aXNpb25hbFBhZ2UgPSBfcGFnZS0+
cHJvdmlzaW9uYWxQYWdlUHJveHkoKTsKLSAgICBpZiAoIXByb3Zpc2lvbmFsUGFnZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gcHJvdmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkucHJv
Y2Vzc0lkZW50aWZpZXIoKTsKLX0KLQotLSAodm9pZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzCi17
Ci0gICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wYWdl
LT5wcm9jZXNzKCkudGVybWluYXRlKCk7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0tIChOU1Zp
ZXcgKilfc2FmZUJyb3dzaW5nV2FybmluZwotewotICAgIHJldHVybiBfaW1wbC0+c2FmZUJyb3dz
aW5nV2FybmluZygpOwotfQotI2Vsc2UKLS0gKFVJVmlldyAqKV9zYWZlQnJvd3NpbmdXYXJuaW5n
Ci17Ci0gICAgcmV0dXJuIF9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOwotfQotI2VuZGlmCi0K
LS0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzCi17Ci0gICAg
cmV0dXJuIHdyYXBwZXIoX3BhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkRpc2Fi
bGVDb250ZW50QmxvY2tlcnMpKTsKLX0KLQotLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZEV4cGly
ZWRPbmx5Ci17Ci0gICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxv
YWRPcHRpb246OkV4cGlyZWRPbmx5KSk7Ci19Ci0KLS0gKHZvaWQpX2tpbGxXZWJDb250ZW50UHJv
Y2Vzc0FuZFJlc2V0U3RhdGUKLXsKLSAgICBSZWY8V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk+IHBy
b3RlY3RlZFByb2Nlc3NQcm94eShfcGFnZS0+cHJvY2VzcygpKTsKLSAgICBwcm90ZWN0ZWRQcm9j
ZXNzUHJveHktPnJlcXVlc3RUZXJtaW5hdGlvbihXZWJLaXQ6OlByb2Nlc3NUZXJtaW5hdGlvblJl
YXNvbjo6UmVxdWVzdGVkQnlDbGllbnQpOwotCi0gICAgaWYgKGF1dG8qIHByb3Zpc2lvbmFsUGFn
ZVByb3h5ID0gX3BhZ2UtPnByb3Zpc2lvbmFsUGFnZVByb3h5KCkpIHsKLSAgICAgICAgUmVmPFdl
YktpdDo6V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0ZWRQcm9jZXNzUHJveHkocHJvdmlzaW9uYWxQ
YWdlUHJveHktPnByb2Nlc3MoKSk7Ci0gICAgICAgIHByb3RlY3RlZFByb2Nlc3NQcm94eS0+cmVx
dWVzdFRlcm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uOjpSZXF1ZXN0
ZWRCeUNsaWVudCk7Ci0gICAgfQotfQotCi0tIChDR1JlY3QpX2NvbnZlcnRSZWN0RnJvbVJvb3RW
aWV3Q29vcmRpbmF0ZXM6KENHUmVjdClyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzCi17Ci0gICAg
Ly8gRklYTUU6IEl0IHNob3VsZCBiZSBlYXNpZXIgdG8gdGFsayBhYm91dCBXS1dlYlZpZXcgY29v
cmRpbmF0ZXMgaW4gYSBjb25zaXN0ZW50IGFuZCBjcm9zcy1wbGF0Zm9ybSB3YXkuCi0gICAgLy8g
Q3VycmVudGx5LCBuZWl0aGVyICJyb290IHZpZXciIG5vciAid2luZG93IiBtZWFuICJXS1dlYlZp
ZXcgY29vcmRpbmF0ZXMiIG9uIGJvdGggcGxhdGZvcm1zLgotICAgIC8vIFNlZSBodHRwczovL3dl
YmtpdC5vcmcvYi8xOTM2NDkgYW5kIHJlbGF0ZWQgYnVncy4KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0jZWxzZQotICAgIHJldHVybiByZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzOwotI2VuZGlmCi19Ci0KLS0gKENHUmVjdClfY29udmVydFJl
Y3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6KENHUmVjdClyZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMK
LXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVj
dDpyZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0j
ZWxzZQotICAgIHJldHVybiByZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXM7Ci0jZW5kaWYKLX0KLQot
LSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdEluV2Vi
Vmlld0Nvb3JkaW5hdGVzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8X1dLVGV4
dElucHV0Q29udGV4dCAqPiAqKSljb21wbGV0aW9uSGFuZGxlcgotewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQFtdKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotCi0gICAgQ0dSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBbc2VsZiBfY29u
dmVydFJlY3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6cmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzXTsK
LSAgICBhdXRvIHdlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKTsKLSAgICBf
cGFnZS0+dGV4dElucHV0Q29udGV4dHNJblJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcywg
W3dlYWtTZWxmLCBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4mIGNv
bnRleHRzKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gZWxlbWVudHMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29udGV4dHMu
c2l6ZSgpXSk7Ci0KLSAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7Ci0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYgY29udGV4dCA6IGNvbnRleHRzKSB7Ci0gICAgICAgICAg
ICBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCBjb250ZXh0V2l0aFdlYlZpZXdCb3VuZGluZ1JlY3Qg
PSBjb250ZXh0OwotICAgICAgICAgICAgY29udGV4dFdpdGhXZWJWaWV3Qm91bmRpbmdSZWN0LmJv
dW5kaW5nUmVjdCA9IFtzdHJvbmdTZWxmIF9jb252ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5h
dGVzOmNvbnRleHQuYm91bmRpbmdSZWN0XTsKLSAgICAgICAgICAgIFtlbGVtZW50cyBhZGRPYmpl
Y3Q6YWRvcHROUyhbW19XS1RleHRJbnB1dENvbnRleHQgYWxsb2NdIF9pbml0V2l0aFRleHRJbnB1
dENvbnRleHQ6Y29udGV4dFdpdGhXZWJWaWV3Qm91bmRpbmdSZWN0XSkuZ2V0KCldOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihlbGVtZW50cy5nZXQoKSk7
Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX2ZvY3VzVGV4dElucHV0Q29udGV4dDooX1dLVGV4dElu
cHV0Q29udGV4dCAqKXRleHRJbnB1dENvbnRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXiko
Qk9PTCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKE5PKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0
byB3ZWJDb250ZXh0ID0gW3RleHRJbnB1dENvbnRleHQgX3RleHRJbnB1dENvbnRleHRdOwotICAg
IGlmICh3ZWJDb250ZXh0LndlYlBhZ2VJZGVudGlmaWVyICE9IF9wYWdlLT53ZWJQYWdlSUQoKSkK
LSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZv
cm1hdDpAIlRoZSBwcm92aWRlZCBfV0tUZXh0SW5wdXRDb250ZXh0IHdhcyBub3QgY3JlYXRlZCBi
eSB0aGlzIFdLV2ViVmlldy4iXTsKLQotICAgIFtzZWxmIGJlY29tZUZpcnN0UmVzcG9uZGVyXTsK
LQotICAgIF9wYWdlLT5mb2N1c1RleHRJbnB1dENvbnRleHQod2ViQ29udGV4dCwgW2NhcHR1cmVk
Q29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShib29s
IHN1Y2Nlc3MpIHsKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsK
LSAgICB9KTsKLX0KLQotLSAodm9pZClfdGFrZVBERlNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246
KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
cgotewotICAgIFdLUERGQ29uZmlndXJhdGlvbiAqcGRmQ29uZmlndXJhdGlvbiA9IG5pbDsKLSAg
ICBpZiAoc25hcHNob3RDb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIHBkZkNvbmZpZ3VyYXRpb24g
PSBbW1tXS1BERkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICAg
ICAgcGRmQ29uZmlndXJhdGlvbi5yZWN0ID0gc25hcHNob3RDb25maWd1cmF0aW9uLnJlY3Q7Ci0g
ICAgfQotCi0gICAgW3NlbGYgY3JlYXRlUERGV2l0aENvbmZpZ3VyYXRpb246cGRmQ29uZmlndXJh
dGlvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci19Ci0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotCi0tIChVSVRleHRJbnB1dEFzc2lzdGFudEl0ZW0gKilpbnB1dEFz
c2lzdGFudEl0ZW0KLXsKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dEFzc2lzdGFudEl0
ZW1Gb3JXZWJWaWV3XTsKLX0KLQotI2VuZGlmCi0KLS0gKE5TRGF0YSAqKV9zZXNzaW9uU3RhdGVE
YXRhCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgdGhlIGxlZ2FjeSBzZXNz
aW9uIHN0YXRlIGVuY29kZXIuCi0gICAgcmV0dXJuIHdyYXBwZXIoV2ViS2l0OjplbmNvZGVMZWdh
Y3lTZXNzaW9uU3RhdGUoX3BhZ2UtPnNlc3Npb25TdGF0ZSgpKSk7Ci19Ci0KLS0gKF9XS1Nlc3Np
b25TdGF0ZSAqKV9zZXNzaW9uU3RhdGUKLXsKLSAgICByZXR1cm4gW1tbX1dLU2Vzc2lvblN0YXRl
IGFsbG9jXSBfaW5pdFdpdGhTZXNzaW9uU3RhdGU6X3BhZ2UtPnNlc3Npb25TdGF0ZSgpXSBhdXRv
cmVsZWFzZV07Ci19Ci0KLS0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGVXaXRoRmls
dGVyOihCT09MICheKShXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKml0ZW0pKWZpbHRlcgotewotICAg
IFdlYktpdDo6U2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZSA9IF9wYWdlLT5zZXNzaW9uU3RhdGUo
W2ZpbHRlcl0oV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKSB7Ci0gICAgICAg
IGlmICghZmlsdGVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJu
IChib29sKWZpbHRlcih3cmFwcGVyKGl0ZW0pKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBbW1tf
V0tTZXNzaW9uU3RhdGUgYWxsb2NdIF9pbml0V2l0aFNlc3Npb25TdGF0ZTpzZXNzaW9uU3RhdGVd
IGF1dG9yZWxlYXNlXTsKLX0KLQotLSAodm9pZClfcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRh
OihOU0RhdGEgKilzZXNzaW9uU3RhdGVEYXRhCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IG5vdCB1c2UgdGhlIGxlZ2FjeSBzZXNzaW9uIHN0YXRlIGRlY29kZXIuCi0gICAgV2ViS2l0OjpT
ZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlOwotICAgIGlmICghV2ViS2l0OjpkZWNvZGVMZWdhY3lT
ZXNzaW9uU3RhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlc3Npb25TdGF0ZURhdGEu
Ynl0ZXMpLCBzZXNzaW9uU3RhdGVEYXRhLmxlbmd0aCwgc2Vzc2lvblN0YXRlKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgX3BhZ2UtPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdURk1vdmUoc2Vz
c2lvblN0YXRlKSwgdHJ1ZSk7Ci19Ci0KLS0gKFdLTmF2aWdhdGlvbiAqKV9yZXN0b3JlU2Vzc2lv
blN0YXRlOihfV0tTZXNzaW9uU3RhdGUgKilzZXNzaW9uU3RhdGUgYW5kTmF2aWdhdGU6KEJPT0wp
bmF2aWdhdGUKLXsKLSAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVzdG9yZUZyb21TZXNzaW9u
U3RhdGUoc2Vzc2lvblN0YXRlID8gc2Vzc2lvblN0YXRlLT5fc2Vzc2lvblN0YXRlIDogV2ViS2l0
OjpTZXNzaW9uU3RhdGUgeyB9LCBuYXZpZ2F0ZSkpOwotfQotCi0tICh2b2lkKV9jbG9zZQotewot
ICAgIF9wYWdlLT5jbG9zZSgpOwotfQotCi0tIChfV0tBdHRhY2htZW50ICopX2luc2VydEF0dGFj
aG1lbnRXaXRoRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgY29udGVudFR5cGU6KE5TU3Ry
aW5nICopY29udGVudFR5cGUgZGF0YTooTlNEYXRhICopZGF0YSBvcHRpb25zOihfV0tBdHRhY2ht
ZW50RGlzcGxheU9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNj
ZXNzKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAg
ICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRS
ZWd1bGFyRmlsZVdpdGhDb250ZW50czpkYXRhXSk7Ci0gICAgaWYgKGZpbGVuYW1lKQotICAgICAg
ICBbZmlsZVdyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwotICAgIHJldHVy
biBbc2VsZiBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQo
KSBjb250ZW50VHlwZTpjb250ZW50VHlwZSBjb21wbGV0aW9uOmNvbXBsZXRpb25IYW5kbGVyXTsK
LX0KLQotLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVy
OihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5cGU6KE5TU3RyaW5nICopY29u
dGVudFR5cGUgb3B0aW9uczooX1dLQXR0YWNobWVudERpc3BsYXlPcHRpb25zICopb3B0aW9ucyBj
b21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAg
ICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgcmV0dXJuIFtzZWxmIF9pbnNlcnRBdHRhY2ht
ZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNv
bXBsZXRpb246Y29tcGxldGlvbkhhbmRsZXJdOwotfQotCi0tIChfV0tBdHRhY2htZW50ICopX2lu
c2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBl
ciBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBjb21wbGV0aW9uOih2b2lkKF4p
KEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKLXsKLSNpZiBFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQotICAgIGF1dG8gaWRlbnRpZmllciA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJp
bmcoKTsKLSAgICBhdXRvIGF0dGFjaG1lbnQgPSBBUEk6OkF0dGFjaG1lbnQ6OmNyZWF0ZShpZGVu
dGlmaWVyLCAqX3BhZ2UpOwotICAgIGF0dGFjaG1lbnQtPnNldEZpbGVXcmFwcGVyQW5kVXBkYXRl
Q29udGVudFR5cGUoZmlsZVdyYXBwZXIsIGNvbnRlbnRUeXBlKTsKLSAgICBfcGFnZS0+aW5zZXJ0
QXR0YWNobWVudChhdHRhY2htZW50LmNvcHlSZWYoKSwgW2NhcHR1cmVkSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3Ig
ZXJyb3IpIHsKLSAgICAgICAgaWYgKGNhcHR1cmVkSGFuZGxlcikKLSAgICAgICAgICAgIGNhcHR1
cmVkSGFuZGxlcihlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOwot
ICAgIH0pOwotCi0gICAgcmV0dXJuIHdyYXBwZXIoYXR0YWNobWVudCk7Ci0jZWxzZQotICAgIHJl
dHVybiBuaWw7Ci0jZW5kaWYKLX0KLQotLSAoX1dLQXR0YWNobWVudCAqKV9hdHRhY2htZW50Rm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCi17Ci0jaWYgRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKLSAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gX3BhZ2UtPmF0dGFjaG1lbnRG
b3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gd3JhcHBlcihhdHRhY2ht
ZW50KTsKLSNlbmRpZgotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX3NpbXVsYXRlRGV2
aWNlT3JpZW50YXRpb25DaGFuZ2VXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUp
YmV0YSBnYW1tYTooZG91YmxlKWdhbW1hCi17Ci0gICAgX3BhZ2UtPnNpbXVsYXRlRGV2aWNlT3Jp
ZW50YXRpb25DaGFuZ2UoYWxwaGEsIGJldGEsIGdhbW1hKTsKLX0KLQotKyAoQk9PTClfaGFuZGxl
c1NhZmVCcm93c2luZwotewotICAgIHJldHVybiB0cnVlOwotfQotCi0tICh2b2lkKV9zaG93U2Fm
ZUJyb3dzaW5nV2FybmluZ1dpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3YXJuaW5nOihOU1N0
cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICopZGV0YWlscyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIC8v
IEZJWE1FOiBBZG9wdCBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMIGFuZCByZW1vdmUg
dGhpcyBmdW5jdGlvbi4KLSAgICBbc2VsZiBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJM
Om5pbCB0aXRsZTp0aXRsZSB3YXJuaW5nOndhcm5pbmcgZGV0YWlsczpkZXRhaWxzIGNvbXBsZXRp
b25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLX0KLQotLSAodm9pZClfc2hvd1NhZmVCcm93
c2luZ1dhcm5pbmdXaXRoVVJMOihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB3
YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICop
ZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxl
cgotewotICAgIGF1dG8gc2FmZUJyb3dzaW5nV2FybmluZyA9IFdlYktpdDo6U2FmZUJyb3dzaW5n
V2FybmluZzo6Y3JlYXRlKHVybCwgdGl0bGUsIHdhcm5pbmcsIGRldGFpbHMpOwotICAgIGF1dG8g
d3JhcHBlciA9IFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFu
ZGxlcildIChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBVUkw+JiYgdmFyaWFu
dCkgewotICAgICAgICBzd2l0Y2hPbih2YXJpYW50LCBbJl0gKFdlYktpdDo6Q29udGludWVVbnNh
ZmVMb2FkIGNvbnRpbnVlVW5zYWZlTG9hZCkgewotICAgICAgICAgICAgc3dpdGNoIChjb250aW51
ZVVuc2FmZUxvYWQpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQ6OlllczoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoWUVTKTsK
LSAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Ok5vOgotICAgICAg
ICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihOTyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0sIFsmXSAoVVJMKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKLSAgICAgICAgfSk7Ci0gICAgfTsK
LSNpZiBQTEFURk9STShNQUMpCi0gICAgX2ltcGwtPnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKHNh
ZmVCcm93c2luZ1dhcm5pbmcsIFdURk1vdmUod3JhcHBlcikpOwotI2Vsc2UKLSAgICBbc2VsZiBf
c2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6c2FmZUJyb3dzaW5nV2FybmluZyBjb21wbGV0aW9uSGFu
ZGxlcjpXVEZNb3ZlKHdyYXBwZXIpXTsKLSNlbmRpZgotfQotCi0rIChOU1VSTCAqKV9jb25maXJt
TWFsd2FyZVNlbnRpbmVsCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6U2FmZUJyb3dzaW5nV2Fybmlu
Zzo6Y29uZmlybU1hbHdhcmVTZW50aW5lbCgpOwotfQotCi0rIChOU1VSTCAqKV92aXNpdFVuc2Fm
ZVdlYnNpdGVTZW50aW5lbAotewotICAgIHJldHVybiBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5p
bmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCk7Ci19Ci0KLS0gKHZvaWQpX2lzSklURW5h
YmxlZDoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIF9wYWdlLT5pc0pJ
VEVuYWJsZWQoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5k
bGVyKV0gKGJvb2wgZW5hYmxlZCkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbmFibGVk
KTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfZXZhbHVhdGVKYXZhU2NyaXB0V2l0aG91dFVzZXJH
ZXN0dXJlOihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKGlkLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgW3NlbGYgX2V2
YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6Tk8gY29t
cGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotfQotCi0tICh2b2lkKV91cGRhdGVX
ZWJzaXRlUG9saWNpZXM6KF9XS1dlYnNpdGVQb2xpY2llcyAqKXdlYnNpdGVQb2xpY2llcwotewot
ICAgIGF1dG8gZGF0YSA9IHdlYnNpdGVQb2xpY2llcy53ZWJwYWdlUHJlZmVyZW5jZXMtPl93ZWJz
aXRlUG9saWNpZXMtPmRhdGEoKTsKLSAgICBpZiAoZGF0YS53ZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycykKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uIGZvcm1hdDpAIlVwZGF0aW5nIFdLV2Vic2l0ZURhdGFTdG9yZSBpcyBvbmx5IHN1cHBvcnRl
ZCBkdXJpbmcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbi4iXTsKLSAgICBfcGFnZS0+
dXBkYXRlV2Vic2l0ZVBvbGljaWVzKFdURk1vdmUoZGF0YSkpOwotfQotCi0tIChCT09MKV9hbGxv
d3NSZW1vdGVJbnNwZWN0aW9uCi17Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAg
cmV0dXJuIF9wYWdlLT5hbGxvd3NSZW1vdGVJbnNwZWN0aW9uKCk7Ci0jZWxzZQotICAgIHJldHVy
biBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9zZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uOihC
T09MKWFsbG93Ci17Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgX3BhZ2UtPnNl
dEFsbG93c1JlbW90ZUluc3BlY3Rpb24oYWxsb3cpOwotI2VuZGlmCi19Ci0KLS0gKE5TU3RyaW5n
ICopX3JlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGUKLXsKLSNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKLSAgICByZXR1cm4gX3BhZ2UtPnJlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGUo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG5pbDsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9zZXRSZW1v
dGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlOihOU1N0cmluZyAqKW5hbWUKLXsKLSNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLSAgICBfcGFnZS0+c2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVy
cmlkZShuYW1lKTsKLSNlbmRpZgotfQotCi0tIChCT09MKV9hZGRzVmlzaXRlZExpbmtzCi17Ci0g
ICAgcmV0dXJuIF9wYWdlLT5hZGRzVmlzaXRlZExpbmtzKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEFk
ZHNWaXNpdGVkTGlua3M6KEJPT0wpYWRkc1Zpc2l0ZWRMaW5rcwotewotICAgIF9wYWdlLT5zZXRB
ZGRzVmlzaXRlZExpbmtzKGFkZHNWaXNpdGVkTGlua3MpOwotfQotCi0tIChCT09MKV9uZXR3b3Jr
UmVxdWVzdHNJblByb2dyZXNzCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlTG9hZFN0YXRlKCku
bmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcygpOwotfQotCi1zdGF0aWMgaW5saW5lIE9wdGlvblNl
dDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IGxheW91dE1pbGVzdG9uZXMoX1dLUmVuZGVyaW5n
UHJvZ3Jlc3NFdmVudHMgZXZlbnRzKQotewotICAgIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRN
aWxlc3RvbmU+IG1pbGVzdG9uZXM7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJv
Z3Jlc3NFdmVudEZpcnN0TGF5b3V0KQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpE
aWRGaXJzdExheW91dCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NF
dmVudEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQo
V2ViQ29yZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKLQotICAgIGlmIChldmVu
dHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludFdpdGhTaWduaWZpY2FudEFy
ZWEpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEhpdFJlbGV2YW50UmVwYWlu
dGVkT2JqZWN0c0FyZWFUaHJlc2hvbGQpOwotCi0gICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRSZWFjaGVkU2Vzc2lvblJlc3RvcmF0aW9uUmVuZGVyVHJlZVNpemVUaHJl
c2hvbGQpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OlJlYWNoZWRTZXNzaW9uUmVz
dG9yYXRpb25SZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dL
UmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0TGF5b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50
YWxSZW5kZXJpbmcpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TGF5
b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpOwotCi0gICAgaWYgKGV2ZW50
cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50QWZ0ZXJTdXBwcmVzc2VkSW5j
cmVtZW50YWxSZW5kZXJpbmcpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZp
cnN0UGFpbnRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZyk7Ci0KLSAgICBpZiAo
ZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudERpZFJlbmRlclNpZ25pZmljYW50QW1v
dW50T2ZUZXh0KQotICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRSZW5kZXJTaWdu
aWZpY2FudEFtb3VudE9mVGV4dCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJv
Z3Jlc3NFdmVudEZpcnN0TWVhbmluZ2Z1bFBhaW50KQotICAgICAgICBtaWxlc3RvbmVzLmFkZChX
ZWJDb3JlOjpEaWRGaXJzdE1lYW5pbmdmdWxQYWludCk7Ci0KLSAgICByZXR1cm4gbWlsZXN0b25l
czsKLX0KLQotLSAodm9pZClfc2V0T2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czooX1dL
UmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMpb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cwot
ewotICAgIF9vYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzID0gb2JzZXJ2ZWRSZW5kZXJp
bmdQcm9ncmVzc0V2ZW50czsKLSAgICBfcGFnZS0+bGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyhs
YXlvdXRNaWxlc3RvbmVzKG9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMpKTsKLX0KLQot
LSAodm9pZClfZ2V0TWFpblJlc291cmNlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBhdXRvIGhh
bmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7Ci0KLSAgICBfcGFnZS0+
Z2V0TWFpblJlc291cmNlRGF0YU9mRnJhbWUoX3BhZ2UtPm1haW5GcmFtZSgpLCBbaGFuZGxlcl0o
QVBJOjpEYXRhKiBkYXRhLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAg
ICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyQmxvY2spKE5TRGF0YSAqLCBOU0Vycm9yICop
ID0gKHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAg
IGlmIChlcnJvciAhPSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBQaXBlIGEgcHJvcGVyIGVycm9yIGluIGZyb20gdGhlIFdlYlBhZ2VQ
cm94eS4KLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQmxvY2sobmlsLCBbTlNFcnJvciBl
cnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3Ip
IHVzZXJJbmZvOm5pbF0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyQmxvY2sod3JhcHBlcigqZGF0YSksIG5pbCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQp
X2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEg
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFtzZWxmIGNyZWF0ZVdlYkFy
Y2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLX0KLQot
LSAodm9pZClfZ2V0Q29udGVudHNBc1N0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNTdHJpbmcgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIGF1dG8g
aGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBfcGFnZS0+
Z2V0Q29udGVudHNBc1N0cmluZyhbaGFuZGxlcl0oU3RyaW5nIHN0cmluZywgV2ViS2l0OjpDYWxs
YmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIGlmIChlcnJvciAhPSBXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBQaXBlIGEg
cHJvcGVyIGVycm9yIGluIGZyb20gdGhlIFdlYlBhZ2VQcm94eS4KLSAgICAgICAgICAgIGhhbmRs
ZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOnN0YXRp
Y19jYXN0PGludD4oZXJyb3IpIHVzZXJJbmZvOm5pbF0pOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGhhbmRsZXIoc3RyaW5nLCBuaWwpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9nZXRD
b250ZW50c0FzQXR0cmlidXRlZFN0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
TlNBdHRyaWJ1dGVkU3RyaW5nICosIE5TRGljdGlvbmFyeTxOU0F0dHJpYnV0ZWRTdHJpbmdEb2N1
bWVudEF0dHJpYnV0ZUtleSwgaWQ+ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKLXsK
LSAgICBfcGFnZS0+Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcoW2hhbmRsZXIgPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiBhdHRyaWJ1dGVkU3RyaW5nKSB7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZykKLSAgICAgICAgICAgIGhhbmRsZXIo
W1thdHRyaWJ1dGVkU3RyaW5nLnN0cmluZy5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXSwgW1th
dHRyaWJ1dGVkU3RyaW5nLmRvY3VtZW50QXR0cmlidXRlcy5nZXQoKSByZXRhaW5dIGF1dG9yZWxl
YXNlXSwgbmlsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlcihuaWwsIG5pbCwg
Y3JlYXRlTlNFcnJvcihXS0Vycm9yVW5rbm93bikuZ2V0KCkpOwotICAgIH0pOwotfQotCi0tICh2
b2lkKV9nZXRBcHBsaWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0jaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQotICAgIF9wYWdlLT5nZXRBcHBsaWNhdGlvbk1hbmlm
ZXN0KFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcild
KGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q+JiBtYW5pZmVzdCwg
V2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShlcnJvcik7Ci0gICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikgewotICAgICAgICAgICAg
aWYgKG1hbmlmZXN0KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBhcGlNYW5pZmVzdCA9IEFQSTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6Y3JlYXRlKCptYW5pZmVzdCk7Ci0gICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIod3JhcHBlcihhcGlNYW5pZmVzdCkpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICAgICAgfQot
ICAgIH0pOwotI2Vsc2UKLSAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKG5pbCk7Ci0jZW5kaWYKLX0KLQotLSAoX1dLUGFnaW5hdGlvbk1vZGUpX3Bh
Z2luYXRpb25Nb2RlCi17Ci0gICAgc3dpdGNoIChfcGFnZS0+cGFnaW5hdGlvbk1vZGUoKSkgewot
ICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVy
biBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOwotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5h
dGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9u
TW9kZUxlZnRUb1JpZ2h0OwotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6UmlnaHRUb0xl
ZnRQYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0
OwotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdpbmF0ZWQ6Ci0g
ICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOwotICAgIGNhc2UgV2Vi
Q29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBf
V0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOwotfQotCi0t
ICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZTooX1dLUGFnaW5hdGlvbk1vZGUpcGFnaW5hdGlvbk1v
ZGUKLXsKLSAgICBXZWJDb3JlOjpQYWdpbmF0aW9uOjpNb2RlIG1vZGU7Ci0gICAgc3dpdGNoIChw
YWdpbmF0aW9uTW9kZSkgewotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDoK
LSAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ6Ci0gICAgICAg
IG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OgotICAgICAg
ICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbToKLSAgICAg
ICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A6Ci0gICAg
ICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IF9wYWdlLT5zZXRQYWdpbmF0aW9uTW9kZShtb2RlKTsKLX0KLQotLSAoQk9PTClfcGFnaW5hdGlv
bkJlaGF2ZXNMaWtlQ29sdW1ucwotewotICAgIHJldHVybiBfcGFnZS0+cGFnaW5hdGlvbkJlaGF2
ZXNMaWtlQ29sdW1ucygpOwotfQotCi0tICh2b2lkKV9zZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VD
b2x1bW5zOihCT09MKWJlaGF2ZXNMaWtlQ29sdW1ucwotewotICAgIF9wYWdlLT5zZXRQYWdpbmF0
aW9uQmVoYXZlc0xpa2VDb2x1bW5zKGJlaGF2ZXNMaWtlQ29sdW1ucyk7Ci19Ci0KLS0gKENHRmxv
YXQpX3BhZ2VMZW5ndGgKLXsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2VMZW5ndGgoKTsKLX0KLQot
LSAodm9pZClfc2V0UGFnZUxlbmd0aDooQ0dGbG9hdClwYWdlTGVuZ3RoCi17Ci0gICAgX3BhZ2Ut
PnNldFBhZ2VMZW5ndGgocGFnZUxlbmd0aCk7Ci19Ci0KLS0gKENHRmxvYXQpX2dhcEJldHdlZW5Q
YWdlcwotewotICAgIHJldHVybiBfcGFnZS0+Z2FwQmV0d2VlblBhZ2VzKCk7Ci19Ci0KLS0gKHZv
aWQpX3NldEdhcEJldHdlZW5QYWdlczooQ0dGbG9hdClnYXBCZXR3ZWVuUGFnZXMKLXsKLSAgICBf
cGFnZS0+c2V0R2FwQmV0d2VlblBhZ2VzKGdhcEJldHdlZW5QYWdlcyk7Ci19Ci0KLS0gKEJPT0wp
X3BhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQKLXsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2luYXRp
b25MaW5lR3JpZEVuYWJsZWQoKTsKLX0KLQotLSAodm9pZClfc2V0UGFnaW5hdGlvbkxpbmVHcmlk
RW5hYmxlZDooQk9PTClsaW5lR3JpZEVuYWJsZWQKLXsKLSAgICBfcGFnZS0+c2V0UGFnaW5hdGlv
bkxpbmVHcmlkRW5hYmxlZChsaW5lR3JpZEVuYWJsZWQpOwotfQotCi0tIChOU1VJbnRlZ2VyKV9w
YWdlQ291bnQKLXsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2VDb3VudCgpOwotfQotCi0tIChCT09M
KV9zdXBwb3J0c1RleHRab29tCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5zdXBwb3J0c1RleHRab29t
KCk7Ci19Ci0KLS0gKGRvdWJsZSlfdGV4dFpvb21GYWN0b3IKLXsKLSAgICByZXR1cm4gX3BhZ2Ut
PnRleHRab29tRmFjdG9yKCk7Ci19Ci0KLS0gKHZvaWQpX3NldFRleHRab29tRmFjdG9yOihkb3Vi
bGUpem9vbUZhY3RvcgotewotICAgIF9wYWdlLT5zZXRUZXh0Wm9vbUZhY3Rvcih6b29tRmFjdG9y
KTsKLX0KLQotLSAodm9pZClzZXRQYWdlWm9vbTooQ0dGbG9hdClwYWdlWm9vbQotewotICAgIF9w
YWdlLT5zZXRQYWdlWm9vbUZhY3RvcihwYWdlWm9vbSk7Ci19Ci0KLS0gKENHRmxvYXQpcGFnZVpv
b20KLXsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2Vab29tRmFjdG9yKCk7Ci19Ci0KLS0gKGRvdWJs
ZSlfcGFnZVpvb21GYWN0b3IKLXsKLSAgICByZXR1cm4gW3NlbGYgcGFnZVpvb21dOwotfQotCi0t
ICh2b2lkKV9zZXRQYWdlWm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3IKLXsKLSAgICBbc2Vs
ZiBzZXRQYWdlWm9vbTp6b29tRmFjdG9yXTsKLX0KLQotLSAoaWQgPF9XS0RpYWdub3N0aWNMb2dn
aW5nRGVsZWdhdGU+KV9kaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlCi17Ci0gICAgYXV0byogZGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQgPSBfcGFnZS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKTsK
LSAgICBpZiAoIWRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQm
PigqZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpLmRlbGVnYXRlKCkuYXV0b3JlbGVhc2UoKTsKLX0K
LQotLSAodm9pZClfc2V0RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTooaWQ8X1dLRGlhZ25vc3Rp
Y0xvZ2dpbmdEZWxlZ2F0ZT4pZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZQotewotICAgIGF1dG8q
IGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50ID0gX3BhZ2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50
KCk7Ci0gICAgaWYgKCFkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc3RhdGljX2Nhc3Q8V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCY+KCpkaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCkuc2V0RGVsZWdhdGUoZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0
ZSk7Ci19Ci0KLS0gKGlkIDxfV0tGaW5kRGVsZWdhdGU+KV9maW5kRGVsZWdhdGUKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGllbnQo
KSkuZGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgpOwotfQotCi0tICh2b2lkKV9zZXRGaW5kRGVsZWdh
dGU6KGlkPF9XS0ZpbmREZWxlZ2F0ZT4pZmluZERlbGVnYXRlCi17Ci0gICAgc3RhdGljX2Nhc3Q8
V2ViS2l0OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGllbnQoKSkuc2V0RGVsZWdhdGUoZmlu
ZERlbGVnYXRlKTsKLX0KLQotc3RhdGljIGlubGluZSBXZWJLaXQ6OkZpbmRPcHRpb25zIHRvRmlu
ZE9wdGlvbnMoX1dLRmluZE9wdGlvbnMgd2tGaW5kT3B0aW9ucykKLXsKLSAgICB1bnNpZ25lZCBm
aW5kT3B0aW9ucyA9IDA7Ci0KLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlOwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlv
bnNBdFdvcmRTdGFydHMpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlv
bnNBdFdvcmRTdGFydHM7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Ry
ZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0KQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJL
aXQ6OkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0gICAgaWYgKHdr
RmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0JhY2t3YXJkcykKLSAgICAgICAgZmluZE9wdGlv
bnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0JhY2t3YXJkczsKLSAgICBpZiAod2tGaW5kT3B0aW9u
cyAmIF9XS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2Vi
S2l0OjpGaW5kT3B0aW9uc1dyYXBBcm91bmQ7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tG
aW5kT3B0aW9uc1Nob3dPdmVybGF5KQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZp
bmRPcHRpb25zU2hvd092ZXJsYXk7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0
aW9uc1Nob3dGaW5kSW5kaWNhdG9yKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZp
bmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3I7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tG
aW5kT3B0aW9uc1Nob3dIaWdobGlnaHQpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6
RmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0OwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmlu
ZE9wdGlvbnNOb0luZGV4Q2hhbmdlKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZp
bmRPcHRpb25zTm9JbmRleENoYW5nZTsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRP
cHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleCkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0
OjpGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5kZXg7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V2ViS2l0OjpGaW5kT3B0aW9ucz4oZmluZE9wdGlvbnMpOwotfQotCi0tICh2b2lkKV9jb3Vu
dFN0cmluZ01hdGNoZXM6KE5TU3RyaW5nICopc3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25z
KW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291bnQKLXsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIGlmIChfY3VzdG9tQ29udGVudFZpZXcpIHsKLSAgICAgICAgW19jdXN0
b21Db250ZW50VmlldyB3ZWJfY291bnRTdHJpbmdNYXRjaGVzOnN0cmluZyBvcHRpb25zOm9wdGlv
bnMgbWF4Q291bnQ6bWF4Q291bnRdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0g
ICAgX3BhZ2UtPmNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9u
cyksIG1heENvdW50KTsKLX0KLQotLSAodm9pZClfZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcgb3B0aW9uczooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNVSW50ZWdlcilt
YXhDb3VudAotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLy8gV2hpbGUgQXBwS2l0
IGNvbnRhaW5zIGxvZ2ljIGluIE5TQmFyVGV4dEZpbmRlciB0byBhdXRvbWF0aWNhbGx5IHVwZGF0
ZSB0aGUgZmluZCBwYXN0ZWJvYXJkCi0gICAgLy8gd2hlbiB0aGUgZmluZCBzdHJpbmcgY2hhbmdl
cywgdGhpcyAoYWxvbmcgd2l0aCB0aGUgZmluZCBwYXN0ZWJvYXJkIGl0c2VsZikgYXJlIGJvdGgg
bWlzc2luZwotICAgIC8vIGZyb20gaU9TOyB0aHVzLCBvbiBpT1MsIHdlIHVwZGF0ZSB0aGUgY3Vy
cmVudCBmaW5kLWluLXBhZ2Ugc3RyaW5nIGhlcmUuCi0gICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdG
b3JGaW5kKHN0cmluZyk7Ci0KLSAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7Ci0gICAgICAg
IFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2ZpbmRTdHJpbmc6c3RyaW5nIG9wdGlvbnM6b3B0aW9u
cyBtYXhDb3VudDptYXhDb3VudF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBfcGFnZS0+ZmluZFN0cmluZyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heENv
dW50KTsKLX0KLQotLSAodm9pZClfaGlkZUZpbmRVSQotewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgaWYgKF9jdXN0b21Db250ZW50VmlldykgewotICAgICAgICBbX2N1c3RvbUNvbnRl
bnRWaWV3IHdlYl9oaWRlRmluZFVJXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
ICAgIF9wYWdlLT5oaWRlRmluZFVJKCk7Ci19Ci0KLS0gKHZvaWQpX3NhdmVCYWNrRm9yd2FyZFNu
YXBzaG90Rm9ySXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbQotewotICAgIGlmICgh
aXRlbSkKLSAgICAgICAgcmV0dXJuOwotICAgIF9wYWdlLT5yZWNvcmROYXZpZ2F0aW9uU25hcHNo
b3QoaXRlbS5faXRlbSk7Ci19Ci0KLS0gKGlkIDxfV0tJbnB1dERlbGVnYXRlPilfaW5wdXREZWxl
Z2F0ZQotewotICAgIHJldHVybiBfaW5wdXREZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKLX0K
LQotLSAodm9pZClfc2V0SW5wdXREZWxlZ2F0ZTooaWQgPF9XS0lucHV0RGVsZWdhdGU+KWlucHV0
RGVsZWdhdGUKLXsKLSAgICBfaW5wdXREZWxlZ2F0ZSA9IGlucHV0RGVsZWdhdGU7Ci0KLSAgICBj
bGFzcyBGb3JtQ2xpZW50IDogcHVibGljIEFQSTo6Rm9ybUNsaWVudCB7Ci0gICAgICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgRm9ybUNs
aWVudChXS1dlYlZpZXcgKndlYlZpZXcpCi0gICAgICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIH5Gb3JtQ2xpZW50KCkg
eyB9Ci0KLSAgICAgICAgdm9pZCB3aWxsU3VibWl0Rm9ybShXZWJLaXQ6OldlYlBhZ2VQcm94eSYs
IFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYgc291cmNlRnJh
bWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPj4mIHRl
eHRGaWVsZFZhbHVlcywgQVBJOjpPYmplY3QqIHVzZXJEYXRhLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
dm9pZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh1c2VyRGF0YSAmJiB1c2VyRGF0YS0+dHlwZSgpICE9IEFQSTo6T2JqZWN0OjpUeXBl
OjpEYXRhKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF1c2VyRGF0YSB8fCB1c2VyRGF0YS0+
dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRhKTsKLSAgICAgICAgICAgICAgICBtX3dl
YlZpZXctPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT5tYXJrQ3VycmVudGx5RGlzcGF0
Y2hlZE1lc3NhZ2VBc0ludmFsaWQoKTsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgYXV0byBpbnB1dERlbGVnYXRlID0gbV93ZWJWaWV3LT5faW5wdXREZWxlZ2F0ZS5nZXQoKTsK
LQotICAgICAgICAgICAgaWYgKCFbaW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF93ZWJWaWV3OndpbGxTdWJtaXRGb3JtVmFsdWVzOnVzZXJPYmplY3Q6c3VibWlzc2lv
bkhhbmRsZXI6KV0pIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byB2
YWx1ZU1hcCA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OnRleHRGaWVsZFZhbHVlcy5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcGFpciA6IHRleHRGaWVsZFZhbHVlcykKLSAgICAgICAgICAgICAgICBbdmFsdWVNYXAg
c2V0T2JqZWN0OnBhaXIuc2Vjb25kIGZvcktleTpwYWlyLmZpcnN0XTsKLQotICAgICAgICAgICAg
TlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPiAqdXNlck9iamVjdCA9IG5pbDsKLSAgICAgICAgICAg
IGlmIChBUEk6OkRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxBUEk6OkRhdGEqPih1c2VyRGF0YSkp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dm9pZCo+KGRhdGEtPmJ5dGVzKCkpKSBsZW5ndGg6ZGF0YS0+c2l6ZSgpIGZyZWVXaGVuRG9uZTpO
T10pOwotICAgICAgICAgICAgICAgIGF1dG8gdW5hcmNoaXZlciA9IHNlY3VyZVVuYXJjaGl2ZXJG
cm9tRGF0YShuc0RhdGEuZ2V0KCkpOwotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byogYWxsb3dlZENsYXNzZXMgPSBtX3dlYlZpZXctPl9wYWdlLT5w
cm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hbGxvd2VkQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGluZygp
KQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRlY29k
ZU9iamVjdE9mQ2xhc3NlczphbGxvd2VkQ2xhc3NlcyBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPYmpl
Y3QgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzOltOU09iamVjdCBjbGFzc10gZm9y
S2V5OkAidXNlck9iamVjdCJdOwotICAgICAgICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlv
biAqZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGRlY29kZSB1c2VyIGRhdGE6ICVAIiwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6Q29tcGxl
dGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGlucHV0RGVsZWdhdGUuZ2V0KCksIEBzZWxl
Y3Rvcihfd2ViVmlldzp3aWxsU3VibWl0Rm9ybVZhbHVlczp1c2VyT2JqZWN0OnN1Ym1pc3Npb25I
YW5kbGVyOikpOwotICAgICAgICAgICAgW2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6bV93ZWJWaWV3
IHdpbGxTdWJtaXRGb3JtVmFsdWVzOnZhbHVlTWFwLmdldCgpIHVzZXJPYmplY3Q6dXNlck9iamVj
dCBzdWJtaXNzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxl
ZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2hlY2tl
ci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0pLmdldCgpXTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7Ci0gICAgfTsKLQotICAgIGlmIChp
bnB1dERlbGVnYXRlKQotICAgICAgICBfcGFnZS0+c2V0Rm9ybUNsaWVudChtYWtlVW5pcXVlPEZv
cm1DbGllbnQ+KHNlbGYpKTsKLSAgICBlbHNlCi0gICAgICAgIF9wYWdlLT5zZXRGb3JtQ2xpZW50
KG51bGxwdHIpOwotfQotCi0tIChCT09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1
bWVudAotewotICAgIGlmIChhdXRvKiBtYWluRnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCi0g
ICAgICAgIHJldHVybiBtYWluRnJhbWUtPmlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZURvY3Vt
ZW50KCk7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFs
b25lTWVkaWFEb2N1bWVudAotewotICAgIGlmIChhdXRvKiBtYWluRnJhbWUgPSBfcGFnZS0+bWFp
bkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBtYWluRnJhbWUtPmlzRGlzcGxheWluZ1N0YW5kYWxv
bmVNZWRpYURvY3VtZW50KCk7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKV9pc1BsYXlp
bmdBdWRpbwotewotICAgIHJldHVybiBfcGFnZS0+aXNQbGF5aW5nQXVkaW8oKTsKLX0KLQotLSAo
Qk9PTClfaXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAotewotICAgIHJldHVybiBf
cGFnZS0+aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOwotfQotCi0tIChfV0tM
YXlvdXRNb2RlKV9sYXlvdXRNb2RlCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHN3aXRjaCAo
X2ltcGwtPmxheW91dE1vZGUoKSkgewotICAgIGNhc2Uga1dLTGF5b3V0TW9kZUZpeGVkU2l6ZToK
LSAgICAgICAgcmV0dXJuIF9XS0xheW91dE1vZGVGaXhlZFNpemU7Ci0gICAgY2FzZSBrV0tMYXlv
dXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6Ci0gICAgICAgIHJldHVybiBf
V0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU7Ci0gICAgY2FzZSBr
V0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXplOgot
ICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11
bURvY3VtZW50U2l6ZTsKLSAgICBjYXNlIGtXS0xheW91dE1vZGVWaWV3U2l6ZToKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZVZpZXdTaXplOwotICAgIH0KLSNlbHNl
Ci0gICAgcmV0dXJuIF9wYWdlLT51c2VGaXhlZExheW91dCgpID8gX1dLTGF5b3V0TW9kZUZpeGVk
U2l6ZSA6IF9XS0xheW91dE1vZGVWaWV3U2l6ZTsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9zZXRM
YXlvdXRNb2RlOihfV0tMYXlvdXRNb2RlKWxheW91dE1vZGUKLXsKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgV0tMYXlvdXRNb2RlIHdrVmlld0xheW91dE1vZGU7Ci0gICAgc3dpdGNoIChsYXlvdXRN
b2RlKSB7Ci0gICAgY2FzZSBfV0tMYXlvdXRNb2RlRml4ZWRTaXplOgotICAgICAgICB3a1ZpZXdM
YXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUZpeGVkU2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6Ci0gICAg
ICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZy
b21WaWV3U2NhbGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLTGF5b3V0TW9kZUR5bmFt
aWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZToKLSAgICAgICAgd2tWaWV3TGF5
b3V0TW9kZSA9IGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1
bWVudFNpemU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLTGF5b3V0TW9kZVZpZXdTaXpl
OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2Rl
Vmlld1NpemU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBfaW1wbC0+c2V0TGF5b3V0TW9k
ZSh3a1ZpZXdMYXlvdXRNb2RlKTsKLSNlbHNlCi0gICAgX3BhZ2UtPnNldFVzZUZpeGVkTGF5b3V0
KGxheW91dE1vZGUgPT0gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZSB8fCBsYXlvdXRNb2RlID09IF9X
S0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZSk7Ci0jZW5kaWYKLX0K
LQotLSAoQ0dTaXplKV9maXhlZExheW91dFNpemUKLXsKLSAgICByZXR1cm4gX3BhZ2UtPmZpeGVk
TGF5b3V0U2l6ZSgpOwotfQotCi0tICh2b2lkKV9zZXRGaXhlZExheW91dFNpemU6KENHU2l6ZSlm
aXhlZExheW91dFNpemUKLXsKLSAgICBfcGFnZS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYkNvcmU6
OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoZml4ZWRMYXlvdXRTaXplKSkpOwot
fQotCi0tICh2b2lkKV9zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2U6KEJPT0wpYmFja2dy
b3VuZEV4dGVuZHMKLXsKLSAgICBfcGFnZS0+c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdl
KGJhY2tncm91bmRFeHRlbmRzKTsKLX0KLQotLSAoQk9PTClfYmFja2dyb3VuZEV4dGVuZHNCZXlv
bmRQYWdlCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2Uo
KTsKLX0KLQotLSAoQ0dGbG9hdClfdmlld1NjYWxlCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IHJldHVybiBfcGFnZS0+dmlld1NjYWxlRmFjdG9yKCk7Ci0jZWxzZQotICAgIHJldHVybiBfcGFn
ZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfc2V0Vmll
d1NjYWxlOihDR0Zsb2F0KXZpZXdTY2FsZQotewotICAgIGlmICh2aWV3U2NhbGUgPD0gMCB8fCBp
c25hbih2aWV3U2NhbGUpIHx8IGlzaW5mKHZpZXdTY2FsZSkpCi0gICAgICAgIFtOU0V4Y2VwdGlv
biByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJWaWV3IHNjYWxlIHNo
b3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlciJdOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIF9p
bXBsLT5zZXRWaWV3U2NhbGUodmlld1NjYWxlKTsKLSNlbHNlCi0gICAgaWYgKF9wYWdlLT5sYXlv
dXRTaXplU2NhbGVGYWN0b3IoKSA9PSB2aWV3U2NhbGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IF9wYWdlLT5zZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5b3V0U2l6ZShbc2VsZiBhY3Rp
dmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc10sIHZpZXdTY2FsZSwgX3BhZ2UtPm1pbmltdW1F
ZmZlY3RpdmVEZXZpY2VXaWR0aCgpKTsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9zZXRNaW5pbXVt
RWZmZWN0aXZlRGV2aWNlV2lkdGg6KENHRmxvYXQpbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRo
Ci17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoX3BhZ2UtPm1pbmltdW1FZmZl
Y3RpdmVEZXZpY2VXaWR0aCgpID09IG1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlv
dXRTaXplKFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgX3BhZ2UtPmxh
eW91dFNpemVTY2FsZUZhY3RvcigpLCBtaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgpOwotI2Vu
ZGlmCi19Ci0KLS0gKENHRmxvYXQpX21pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aAotewotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIF9wYWdlLT5taW5pbXVtRWZmZWN0aXZl
RGV2aWNlV2lkdGgoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotI3ByYWdt
YSBtYXJrIHNjcm9sbHBlcmYgbWV0aG9kcwotCi0tICh2b2lkKV9zZXRTY3JvbGxQZXJmb3JtYW5j
ZURhdGFDb2xsZWN0aW9uRW5hYmxlZDooQk9PTCllbmFibGVkCi17Ci0gICAgX3BhZ2UtPnNldFNj
cm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCi0tIChC
T09MKV9zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZAotewotICAgIHJldHVy
biBfcGFnZS0+c2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoKTsKLX0KLQot
LSAoTlNBcnJheSAqKV9zY3JvbGxQZXJmb3JtYW5jZURhdGEKLXsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIGlmIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1h
bmNlRGF0YSogc2Nyb2xsUGVyZkRhdGEgPSBfcGFnZS0+c2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRh
KCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxQZXJmRGF0YS0+ZGF0YSgpOwotI2VuZGlmCi0gICAg
cmV0dXJuIG5pbDsKLX0KLQotI3ByYWdtYSBtYXJrIG1lZGlhIHBsYXliYWNrIHJlc3RyaWN0aW9u
cwotCi0tIChCT09MKV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sKLXsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIHJldHVybiBfcGFnZS0+YWxsb3dzTWVkaWFEb2N1bWVu
dElubGluZVBsYXliYWNrKCk7CisgICAgcmV0dXJuIHdyYXBwZXIoYXR0YWNobWVudCk7CiAjZWxz
ZQotICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gbmlsOwogI2VuZGlmCiB9CiAKLS0gKHZvaWQp
X3NldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjazooQk9PTClmbGFnCistIChfV0tB
dHRhY2htZW50ICopX2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIF9wYWdlLT5zZXRBbGxvd3NNZWRp
YURvY3VtZW50SW5saW5lUGxheWJhY2soZmxhZyk7CisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxF
TUVOVCkKKyAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gX3BhZ2UtPmF0dGFjaG1lbnRGb3JJZGVu
dGlmaWVyKGlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gd3JhcHBlcihhdHRhY2htZW50KTsK
ICNlbmRpZgorICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKEJPT0wpX3dlYlByb2Nlc3NJc1Jlc3Bv
bnNpdmUKKy0gKHZvaWQpX3NpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2VXaXRoQWxwaGE6
KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YSBnYW1tYTooZG91YmxlKWdhbW1hCiB7Ci0g
ICAgcmV0dXJuIF9wYWdlLT5wcm9jZXNzKCkuaXNSZXNwb25zaXZlKCk7CisgICAgX3BhZ2UtPnNp
bXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoYWxwaGEsIGJldGEsIGdhbW1hKTsKIH0KIAot
LSAodm9pZClfc2V0RnVsbHNjcmVlbkRlbGVnYXRlOihpZDxfV0tGdWxsc2NyZWVuRGVsZWdhdGU+
KWRlbGVnYXRlCisrIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0jaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdl
LT5mdWxsc2NyZWVuQ2xpZW50KCkpKQotICAgICAgICBkb3duY2FzdDxXZWJLaXQ6OkZ1bGxzY3Jl
ZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpLnNldERlbGVnYXRlKGRlbGVnYXRl
KTsKLSNlbmRpZgorICAgIHJldHVybiB0cnVlOwogfQogCi0tIChpZDxfV0tGdWxsc2NyZWVuRGVs
ZWdhdGU+KV9mdWxsc2NyZWVuRGVsZWdhdGUKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJu
aW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2Fybmlu
ZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5mdWxs
c2NyZWVuQ2xpZW50KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0OjpGdWxsc2Ny
ZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1dG9yZWxl
YXNlKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbmlsOworICAgIC8vIEZJWE1FOiBBZG9wdCBfc2hv
d1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMIGFuZCByZW1vdmUgdGhpcyBmdW5jdGlvbi4KKyAg
ICBbc2VsZiBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMOm5pbCB0aXRsZTp0aXRsZSB3
YXJuaW5nOndhcm5pbmcgZGV0YWlsczpkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRp
b25IYW5kbGVyXTsKIH0KIAotLSAoQk9PTClfaXNJbkZ1bGxzY3JlZW4KKy0gKHZvaWQpX3Nob3dT
YWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTDooTlNVUkwgKil1cmwgdGl0bGU6KE5TU3RyaW5nICop
dGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0
cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgcmV0dXJuIF9wYWdl
LT5mdWxsU2NyZWVuTWFuYWdlcigpICYmIF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5pc0Z1
bGxTY3JlZW4oKTsKKyAgICBhdXRvIHNhZmVCcm93c2luZ1dhcm5pbmcgPSBXZWJLaXQ6OlNhZmVC
cm93c2luZ1dhcm5pbmc6OmNyZWF0ZSh1cmwsIHRpdGxlLCB3YXJuaW5nLCBkZXRhaWxzKTsKKyAg
ICBhdXRvIHdyYXBwZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgVVJMPiYm
IHZhcmlhbnQpIHsKKyAgICAgICAgc3dpdGNoT24odmFyaWFudCwgWyZdIChXZWJLaXQ6OkNvbnRp
bnVlVW5zYWZlTG9hZCBjb250aW51ZVVuc2FmZUxvYWQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
Y29udGludWVVbnNhZmVMb2FkKSB7CisgICAgICAgICAgICBjYXNlIFdlYktpdDo6Q29udGludWVV
bnNhZmVMb2FkOjpZZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KFlFUyk7CisgICAgICAgICAgICBjYXNlIFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpObzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoTk8pOworICAgICAgICAg
ICAgfQorICAgICAgICB9LCBbJl0gKFVSTCkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOTyk7CisgICAgICAgIH0pOwor
ICAgIH07CisjaWYgUExBVEZPUk0oTUFDKQorICAgIF9pbXBsLT5zaG93U2FmZUJyb3dzaW5nV2Fy
bmluZyhzYWZlQnJvd3NpbmdXYXJuaW5nLCBXVEZNb3ZlKHdyYXBwZXIpKTsKICNlbHNlCi0gICAg
cmV0dXJuIGZhbHNlOworICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZlQnJv
d3NpbmdXYXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOwogI2VuZGlm
CiB9CiAKLS0gKF9XS01lZGlhQ2FwdHVyZVN0YXRlKV9tZWRpYUNhcHR1cmVTdGF0ZQorKyAoTlNV
UkwgKilfY29uZmlybU1hbHdhcmVTZW50aW5lbAogewotICAgIHJldHVybiBXZWJLaXQ6OnRvV0tN
ZWRpYUNhcHR1cmVTdGF0ZShfcGFnZS0+bWVkaWFTdGF0ZUZsYWdzKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKTsKIH0K
IAotLSAodm9pZClfc2V0TWVkaWFDYXB0dXJlRW5hYmxlZDooQk9PTCllbmFibGVkCisrIChOU1VS
TCAqKV92aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbAogewotICAgIF9wYWdlLT5zZXRNZWRpYUNh
cHR1cmVFbmFibGVkKGVuYWJsZWQpOworICAgIHJldHVybiBXZWJLaXQ6OlNhZmVCcm93c2luZ1dh
cm5pbmc6OnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCk7CiB9CiAKLS0gKEJPT0wpX21lZGlh
Q2FwdHVyZUVuYWJsZWQKKy0gKHZvaWQpX2lzSklURW5hYmxlZDoodm9pZCheKShCT09MKSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIHJldHVybiBfcGFnZS0+bWVkaWFDYXB0dXJlRW5hYmxlZCgp
OworICAgIF9wYWdlLT5pc0pJVEVuYWJsZWQoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2Nr
UHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGJvb2wgZW5hYmxlZCkgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihlbmFibGVkKTsKKyAgICB9KTsKIH0KIAotLSAodm9pZClfc2V0UGFnZU11dGVk
OihfV0tNZWRpYU11dGVkU3RhdGUpbXV0ZWRTdGF0ZQorLSAodm9pZClfZXZhbHVhdGVKYXZhU2Ny
aXB0V2l0aG91dFVzZXJHZXN0dXJlOihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKGlkLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7
Ci0gICAgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TXV0ZWRTdGF0ZUZsYWdzIGNvcmVTdGF0ZSA9
IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok5vbmVNdXRlZDsKLQotICAgIGlmIChtdXRlZFN0YXRl
ICYgX1dLTWVkaWFBdWRpb011dGVkKQotICAgICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVk
aWFQcm9kdWNlcjo6QXVkaW9Jc011dGVkOwotICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVkaWFD
YXB0dXJlRGV2aWNlc011dGVkKQotICAgICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQ
cm9kdWNlcjo6QXVkaW9BbmRWaWRlb0NhcHR1cmVJc011dGVkOwotICAgIGlmIChtdXRlZFN0YXRl
ICYgX1dLTWVkaWFTY3JlZW5DYXB0dXJlTXV0ZWQpCi0gICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJD
b3JlOjpNZWRpYVByb2R1Y2VyOjpTY3JlZW5DYXB0dXJlSXNNdXRlZDsKKyAgICBbc2VsZiBfZXZh
bHVhdGVKYXZhU2NyaXB0OmphdmFTY3JpcHRTdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTpOTyBjb21w
bGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Cit9CiAKLSAgICBfcGFnZS0+c2V0TXV0
ZWQoY29yZVN0YXRlKTsKKy0gKHZvaWQpX3VwZGF0ZVdlYnNpdGVQb2xpY2llczooX1dLV2Vic2l0
ZVBvbGljaWVzICopd2Vic2l0ZVBvbGljaWVzCit7CisgICAgYXV0byBkYXRhID0gd2Vic2l0ZVBv
bGljaWVzLndlYnBhZ2VQcmVmZXJlbmNlcy0+X3dlYnNpdGVQb2xpY2llcy0+ZGF0YSgpOworICAg
IGlmIChkYXRhLndlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgICAgICBbTlNFeGNlcHRp
b24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVXBkYXRpbmcgV0tX
ZWJzaXRlRGF0YVN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uLiJdOworICAgIF9wYWdlLT51cGRhdGVXZWJzaXRlUG9saWNpZXMoV1RG
TW92ZShkYXRhKSk7CiB9CiAKLS0gKHZvaWQpX3JlbW92ZURhdGFEZXRlY3RlZExpbmtzOihkaXNw
YXRjaF9ibG9ja190KWNvbXBsZXRpb24KKy0gKEJPT0wpX2FsbG93c1JlbW90ZUluc3BlY3Rpb24K
IHsKLSNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0gICAgX3BhZ2UtPnJlbW92ZURhdGFEZXRl
Y3RlZExpbmtzKFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdlID0g
bWFrZVdlYWtQdHIoX3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChw
YWdlKQotICAgICAgICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQpOwot
ICAgICAgICBpZiAoY29tcGxldGlvbikKLSAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKLSAgICB9
KTsKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICByZXR1cm4gX3BhZ2UtPmFsbG93
c1JlbW90ZUluc3BlY3Rpb24oKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24p
OworICAgIHJldHVybiBOTzsKICNlbmRpZgogfQogCi0vLyBFeGVjdXRlIHRoZSBzdXBwbGllZCBi
bG9jayBhZnRlciB0aGUgbmV4dCB0cmFuc2FjdGlvbiBmcm9tIHRoZSBXZWJQcm9jZXNzLgotLSAo
dm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0
ZUJsb2NrCistICh2b2lkKV9zZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uOihCT09MKWFsbG93CiB7
Ci0gICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRl
QmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpOTyB3aXRob3V0V2FpdGluZ0ZvckFuaW1h
dGVkUmVzaXplOk5PXTsKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBfcGFnZS0+
c2V0QWxsb3dzUmVtb3RlSW5zcGVjdGlvbihhbGxvdyk7CisjZW5kaWYKIH0KIAotLSAodm9pZClf
ZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOih2
b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworLSAoTlNTdHJpbmcgKilfcmVtb3RlSW5zcGVjdGlv
bk5hbWVPdmVycmlkZQogewotICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6WUVTIHdpdGhv
dXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQorICAgIHJldHVybiBfcGFnZS0+cmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZSgpOwor
I2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotLSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3Bh
dGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sKKy0gKHZvaWQpX3NldFJlbW90ZUluc3BlY3Rpb25OYW1l
T3ZlcnJpZGU6KE5TU3RyaW5nICopbmFtZQogewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJk
Q29udGVudFZpZXddKSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1
dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsKLQotICAgIGlm
IChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MpCi0gICAgICAgIFtfc3Rh
YmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgYWRkT2JqZWN0OnVwZGF0ZUJsb2Nr
Q29weS5nZXQoKV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIF9zdGFibGVTdGF0ZVByZXNlbnRhdGlv
blVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmlsXSk7Ci0gICAgICAgIFtzZWxmIF9m
aXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2Fs
bGJhY2tzXTsKLSAgICB9Ci19CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgX3Bh
Z2UtPnNldFJlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGUobmFtZSk7CiAjZW5kaWYKK30KIAot
I3ByYWdtYSBtYXJrIC0gaU9TIFdLUHJpdmF0ZQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LQotLSAodm9pZClfZGV0ZWN0RGF0YVdpdGhUeXBlczooV0tEYXRhRGV0ZWN0b3JUeXBlcyl0eXBl
cyBjb21wbGV0aW9uSGFuZGxlcjooZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uCistIChCT09M
KV9hZGRzVmlzaXRlZExpbmtzCiB7Ci0jaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotICAgIF9w
YWdlLT5kZXRlY3REYXRhSW5BbGxGcmFtZXMoZnJvbVdLRGF0YURldGVjdG9yVHlwZXModHlwZXMp
LCBbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKSwgcGFnZSA9IG1ha2VXZWFr
UHRyKF9wYWdlLmdldCgpKV0gKGF1dG8mIHJlc3VsdCkgewotICAgICAgICBpZiAocGFnZSkKLSAg
ICAgICAgICAgIHBhZ2UtPnNldERhdGFEZXRlY3Rpb25SZXN1bHQocmVzdWx0KTsKLSAgICAgICAg
aWYgKGNvbXBsZXRpb24pCi0gICAgICAgICAgICBjb21wbGV0aW9uKCk7Ci0gICAgfSk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTSh0eXBlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24p
OwotI2VuZGlmCisgICAgcmV0dXJuIF9wYWdlLT5hZGRzVmlzaXRlZExpbmtzKCk7CiB9CiAKLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0tICh2b2lkKXJlbW92ZUZyb21TdXBlcnZpZXcKKy0g
KHZvaWQpX3NldEFkZHNWaXNpdGVkTGlua3M6KEJPT0wpYWRkc1Zpc2l0ZWRMaW5rcwogewotICAg
IFtzdXBlciByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLQotICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pCi0gICAgICAgIFtfZnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIgd2ViVmlld0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbl07
CisgICAgX3BhZ2UtPnNldEFkZHNWaXNpdGVkTGlua3MoYWRkc1Zpc2l0ZWRMaW5rcyk7CiB9Ci0j
ZW5kaWYKIAotLy8gRGVwcmVjYXRlZCBTUEkuCi0tIChDR1NpemUpX21pbmltdW1MYXlvdXRTaXpl
T3ZlcnJpZGUKKy0gKEJPT0wpX25ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MKIHsKLSAgICBBU1NF
UlQoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpOwotICAgIHJldHVybiBfdmlld0xheW91dFNpemVP
dmVycmlkZS52YWx1ZU9yKENHU2l6ZVplcm8pOworICAgIHJldHVybiBfcGFnZS0+cGFnZUxvYWRT
dGF0ZSgpLm5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoKTsKIH0KIAotLSAodm9pZClfc2V0Vmll
d0xheW91dFNpemVPdmVycmlkZTooQ0dTaXplKXZpZXdMYXlvdXRTaXplT3ZlcnJpZGUKK3N0YXRp
YyBpbmxpbmUgT3B0aW9uU2V0PFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZT4gbGF5b3V0TWlsZXN0
b25lcyhfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyBldmVudHMpCiB7Ci0gICAgX3ZpZXdMYXlv
dXRTaXplT3ZlcnJpZGUgPSB2aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOworICAgIE9wdGlvblNldDxX
ZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IG1pbGVzdG9uZXM7CisKKyAgICBpZiAoZXZlbnRzICYg
X1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0TGF5b3V0KQorICAgICAgICBtaWxlc3RvbmVz
LmFkZChXZWJDb3JlOjpEaWRGaXJzdExheW91dCk7CisKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVu
ZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCkKKyAgICAgICAg
bWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsK
KworICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludFdp
dGhTaWduaWZpY2FudEFyZWEpCisgICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEhp
dFJlbGV2YW50UmVwYWludGVkT2JqZWN0c0FyZWFUaHJlc2hvbGQpOworCisgICAgaWYgKGV2ZW50
cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRSZWFjaGVkU2Vzc2lvblJlc3RvcmF0aW9uUmVu
ZGVyVHJlZVNpemVUaHJlc2hvbGQpCisgICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OlJl
YWNoZWRTZXNzaW9uUmVzdG9yYXRpb25SZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCk7CisKKyAgICBp
ZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0TGF5b3V0QWZ0ZXJTdXBw
cmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpCisgICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNv
cmU6OkRpZEZpcnN0TGF5b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpOwor
CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50QWZ0
ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpCisgICAgICAgIG1pbGVzdG9uZXMuYWRk
KFdlYkNvcmU6OkRpZEZpcnN0UGFpbnRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmlu
Zyk7CisKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudERpZFJlbmRl
clNpZ25pZmljYW50QW1vdW50T2ZUZXh0KQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3Jl
OjpEaWRSZW5kZXJTaWduaWZpY2FudEFtb3VudE9mVGV4dCk7CisKKyAgICBpZiAoZXZlbnRzICYg
X1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0TWVhbmluZ2Z1bFBhaW50KQorICAgICAgICBt
aWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdE1lYW5pbmdmdWxQYWludCk7CiAKLSAgICBp
ZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRV
cGRhdGVNb2RlOjpOb3RSZXNpemluZykKLSAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0Vmlld0xh
eW91dFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKHZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpXTsKKyAg
ICByZXR1cm4gbWlsZXN0b25lczsKIH0KIAotLSAoVUlFZGdlSW5zZXRzKV9vYnNjdXJlZEluc2V0
cworLSAodm9pZClfc2V0T2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czooX1dLUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudHMpb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cwogewotICAg
IHJldHVybiBfb2JzY3VyZWRJbnNldHM7CisgICAgX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NF
dmVudHMgPSBvYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzOworICAgIF9wYWdlLT5saXN0
ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKGxheW91dE1pbGVzdG9uZXMob2JzZXJ2ZWRSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50cykpOwogfQogCi0tICh2b2lkKV9zZXRPYnNjdXJlZEluc2V0czooVUlFZGdl
SW5zZXRzKW9ic2N1cmVkSW5zZXRzCistICh2b2lkKV9nZXRNYWluUmVzb3VyY2VEYXRhV2l0aENv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy50b3AgPj0gMCk7Ci0gICAgQVNT
RVJUKG9ic2N1cmVkSW5zZXRzLmxlZnQgPj0gMCk7Ci0gICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRz
LmJvdHRvbSA+PSAwKTsKLSAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMucmlnaHQgPj0gMCk7Ci0K
LSAgICBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzID0gWUVTOwotCi0gICAgaWYgKFVJRWRnZUluc2V0
c0VxdWFsVG9FZGdlSW5zZXRzKF9vYnNjdXJlZEluc2V0cywgb2JzY3VyZWRJbnNldHMpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBfb2JzY3VyZWRJbnNldHMgPSBvYnNjdXJlZEluc2V0czsKKyAg
ICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CiAKLSAg
ICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworICAgIF9wYWdlLT5n
ZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShfcGFnZS0+bWFpbkZyYW1lKCksIFtoYW5kbGVyXShB
UEk6OkRhdGEqIGRhdGEsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAg
ICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXJCbG9jaykoTlNEYXRhICosIE5TRXJyb3IgKikg
PSAodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAg
aWYgKGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAg
ICAgICAgLy8gRklYTUU6IFBpcGUgYSBwcm9wZXIgZXJyb3IgaW4gZnJvbSB0aGUgV2ViUGFnZVBy
b3h5LgorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayhuaWwsIFtOU0Vycm9yIGVy
cm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6c3RhdGljX2Nhc3Q8aW50PihlcnJvcikg
dXNlckluZm86bmlsXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXJCbG9jayh3cmFwcGVyKCpkYXRhKSwgbmlsKTsKKyAgICB9KTsKIH0KIAotLSAoVUlSZWN0
RWRnZSlfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhCistICh2b2lkKV9nZXRX
ZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICosIE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRF
ZGdlc0FmZmVjdGVkQnlTYWZlQXJlYTsKKyAgICBbc2VsZiBjcmVhdGVXZWJBcmNoaXZlRGF0YVdp
dGhDb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLS0gKHZvaWQpX3Nl
dE9ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYTooVUlSZWN0RWRnZSllZGdlcwor
LSAodm9pZClfZ2V0Q29udGVudHNBc1N0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNTdHJpbmcgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmIChl
ZGdlcyA9PSBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhKQotICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KTsKIAotICAgIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEgPSBlZGdlczsK
KyAgICBfcGFnZS0+Z2V0Q29udGVudHNBc1N0cmluZyhbaGFuZGxlcl0oU3RyaW5nIHN0cmluZywg
V2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAh
PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBQaXBlIGEgcHJvcGVyIGVycm9yIGluIGZyb20gdGhlIFdlYlBhZ2VQcm94eS4KKyAgICAg
ICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFp
biBjb2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3IpIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGhhbmRsZXIoc3RyaW5nLCBuaWwpOworICAgIH0pOworfQogCi0g
ICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKKy0gKHZvaWQpX2dl
dENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5PE5TQXR0cmlidXRlZFN0cmluZ0Rv
Y3VtZW50QXR0cmlidXRlS2V5LCBpZD4gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIF9wYWdlLT5nZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhbaGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIGF0dHJpYnV0ZWRTdHJpbmcpIHsK
KyAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nKQorICAgICAgICAgICAgaGFuZGxl
cihbW2F0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nLmdldCgpIHJldGFpbl0gYXV0b3JlbGVhc2VdLCBb
W2F0dHJpYnV0ZWRTdHJpbmcuZG9jdW1lbnRBdHRyaWJ1dGVzLmdldCgpIHJldGFpbl0gYXV0b3Jl
bGVhc2VdLCBuaWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgbmls
LCBjcmVhdGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKS5nZXQoKSk7CisgICAgfSk7CiB9CiAKLS0g
KFVJRWRnZUluc2V0cylfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzCistICh2b2lkKV9nZXRBcHBs
aWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIF91bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHM7CisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQorICAg
IF9wYWdlLT5nZXRBcHBsaWNhdGlvbk1hbmlmZXN0KFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OkFwcGxp
Y2F0aW9uTWFuaWZlc3Q+JiBtYW5pZmVzdCwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVy
cm9yKSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgICAgIGlmIChjb21wbGV0
aW9uSGFuZGxlcikgeworICAgICAgICAgICAgaWYgKG1hbmlmZXN0KSB7CisgICAgICAgICAgICAg
ICAgYXV0byBhcGlNYW5pZmVzdCA9IEFQSTo6QXBwbGljYXRpb25NYW5pZmVzdDo6Y3JlYXRlKCpt
YW5pZmVzdCk7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod3JhcHBlcihhcGlN
YW5pZmVzdCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIobmlsKTsKKyAgICAgICAgfQorICAgIH0pOworI2Vsc2UKKyAgICBpZiAoY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CisjZW5kaWYKIH0K
IAotLSAodm9pZClfc2V0VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOihVSUVkZ2VJbnNldHMpdW5v
YnNjdXJlZFNhZmVBcmVhSW5zZXRzCistIChfV0tQYWdpbmF0aW9uTW9kZSlfcGFnaW5hdGlvbk1v
ZGUKIHsKLSAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnRvcCA+PSAwKTsKLSAg
ICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLmxlZnQgPj0gMCk7Ci0gICAgQVNTRVJU
KHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5ib3R0b20gPj0gMCk7Ci0gICAgQVNTRVJUKHVub2Jz
Y3VyZWRTYWZlQXJlYUluc2V0cy5yaWdodCA+PSAwKTsKKyAgICBzd2l0Y2ggKF9wYWdlLT5wYWdp
bmF0aW9uTW9kZSgpKSB7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRl
ZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7CisgICAgY2Fz
ZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDoKKyAgICAgICAgcmV0
dXJuIF9XS1BhZ2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdp
bmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRp
b25Nb2RlUmlnaHRUb0xlZnQ7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpUb3BUb0Jv
dHRvbVBhZ2luYXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0
b207CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDoK
KyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A7CisgICAgfQogCi0g
ICAgX2hhdmVTZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSBZRVM7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7Cit9
CiAKLSAgICBpZiAoVUlFZGdlSW5zZXRzRXF1YWxUb0VkZ2VJbnNldHMoX3Vub2JzY3VyZWRTYWZl
QXJlYUluc2V0cywgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzKSkKKy0gKHZvaWQpX3NldFBhZ2lu
YXRpb25Nb2RlOihfV0tQYWdpbmF0aW9uTW9kZSlwYWdpbmF0aW9uTW9kZQoreworICAgIFdlYkNv
cmU6OlBhZ2luYXRpb246Ok1vZGUgbW9kZTsKKyAgICBzd2l0Y2ggKHBhZ2luYXRpb25Nb2RlKSB7
CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOgorICAgICAgICBtb2RlID0g
V2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgX1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDoKKyAgICAgICAgbW9kZSA9IFdlYkNvcmU6
OlBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIF9XS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6CisgICAgICAgIG1vZGUgPSBXZWJDb3Jl
OjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOgorICAgICAgICBtb2RlID0gV2ViQ29y
ZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdpbmF0ZWQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDoKKyAgICAgICAgbW9kZSA9IFdlYkNv
cmU6OlBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5hdGVkOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgX3Vub2JzY3VyZWRTYWZl
QXJlYUluc2V0cyA9IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKLQotICAgIFtzZWxmIF9zY2hl
ZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07CisgICAgX3BhZ2UtPnNldFBhZ2luYXRpb25N
b2RlKG1vZGUpOwogfQogCi0tIChCT09MKV9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5z
ZXRzCistIChCT09MKV9wYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zCiB7Ci0gICAgaWYgKCFb
c2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBy
ZXR1cm4gX2F2b2lkc1Vuc2FmZUFyZWE7CisgICAgcmV0dXJuIF9wYWdlLT5wYWdpbmF0aW9uQmVo
YXZlc0xpa2VDb2x1bW5zKCk7CiB9CiAKLS0gKHZvaWQpX3NldEludGVyZmFjZU9yaWVudGF0aW9u
T3ZlcnJpZGU6KFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3JpZW50YXRpb24KKy0g
KHZvaWQpX3NldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM6KEJPT0wpYmVoYXZlc0xpa2VD
b2x1bW5zCiB7Ci0gICAgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uID0gWUVTOwotICAg
IF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlID0gaW50ZXJmYWNlT3JpZW50YXRpb247Ci0K
LSAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmll
d3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykKLSAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0
RGV2aWNlT3JpZW50YXRpb246ZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0
aW9uKF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlKV07CisgICAgX3BhZ2UtPnNldFBhZ2lu
YXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKTsKIH0KIAotLSAoVUlJ
bnRlcmZhY2VPcmllbnRhdGlvbilfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZQorLSAoQ0dG
bG9hdClfcGFnZUxlbmd0aAogewotICAgIEFTU0VSVChfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50
YXRpb24pOwotICAgIHJldHVybiBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTsKKyAgICBy
ZXR1cm4gX3BhZ2UtPnBhZ2VMZW5ndGgoKTsKIH0KIAotLSAodm9pZClfY2xlYXJJbnRlcmZhY2VP
cmllbnRhdGlvbk92ZXJyaWRlCistICh2b2lkKV9zZXRQYWdlTGVuZ3RoOihDR0Zsb2F0KXBhZ2VM
ZW5ndGgKIHsKLSAgICBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24gPSBOTzsKLSAgICBf
aW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9IFVJSW50ZXJmYWNlT3JpZW50YXRpb25Qb3J0
cmFpdDsKKyAgICBfcGFnZS0+c2V0UGFnZUxlbmd0aChwYWdlTGVuZ3RoKTsKIH0KIAotLy8gRGVw
cmVjYXRlZCBTUEkKLS0gKENHU2l6ZSlfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUKKy0g
KENHRmxvYXQpX2dhcEJldHdlZW5QYWdlcwogewotICAgIEFTU0VSVChfbWF4aW11bVVub2JzY3Vy
ZWRTaXplT3ZlcnJpZGUpOwotICAgIHJldHVybiBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUudmFsdWVPcihDR1NpemVaZXJvKTsKKyAgICByZXR1cm4gX3BhZ2UtPmdhcEJldHdlZW5QYWdl
cygpOwogfQogCi0tICh2b2lkKV9zZXRNYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTooQ0dT
aXplKXNpemUKKy0gKHZvaWQpX3NldEdhcEJldHdlZW5QYWdlczooQ0dGbG9hdClnYXBCZXR3ZWVu
UGFnZXMKIHsKLSAgICBBU1NFUlQoc2l6ZS53aWR0aCA8PSBzZWxmLmJvdW5kcy5zaXplLndpZHRo
ICYmIHNpemUuaGVpZ2h0IDw9IHNlbGYuYm91bmRzLnNpemUuaGVpZ2h0KTsKLSAgICBfbWF4aW11
bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUgPSBzaXplOwotCi0gICAgaWYgKF9keW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVz
aXppbmcpCi0gICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpX
ZWJDb3JlOjpGbG9hdFNpemUoc2l6ZSldOworICAgIF9wYWdlLT5zZXRHYXBCZXR3ZWVuUGFnZXMo
Z2FwQmV0d2VlblBhZ2VzKTsKIH0KIAotLSAodm9pZClfc2V0QWxsb3dzVmlld3BvcnRTaHJpbmtU
b0ZpdDooQk9PTClhbGxvd1Nocmlua1RvRml0CistIChCT09MKV9wYWdpbmF0aW9uTGluZUdyaWRF
bmFibGVkCiB7Ci0gICAgX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQgPSBhbGxvd1Nocmlua1Rv
Rml0OworICAgIHJldHVybiBfcGFnZS0+cGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZCgpOwogfQog
Ci0tIChCT09MKV9hbGxvd3NWaWV3cG9ydFNocmlua1RvRml0CistICh2b2lkKV9zZXRQYWdpbmF0
aW9uTGluZUdyaWRFbmFibGVkOihCT09MKWxpbmVHcmlkRW5hYmxlZAogewotICAgIHJldHVybiBf
YWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdDsKKyAgICBfcGFnZS0+c2V0UGFnaW5hdGlvbkxpbmVH
cmlkRW5hYmxlZChsaW5lR3JpZEVuYWJsZWQpOwogfQogCi0tICh2b2lkKV9iZWdpbkludGVyYWN0
aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2UKKy0gKE5TVUludGVnZXIpX3BhZ2VDb3VudAogewotICAg
IEFTU0VSVCghX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpOwotICAgIF9p
c0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0gWUVTOworICAgIHJldHVybiBf
cGFnZS0+cGFnZUNvdW50KCk7CiB9CiAKLS0gKHZvaWQpX2VuZEludGVyYWN0aXZlT2JzY3VyZWRJ
bnNldHNDaGFuZ2UKKy0gKEJPT0wpX3N1cHBvcnRzVGV4dFpvb20KIHsKLSAgICBBU1NFUlQoX2lz
Q2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpOwotICAgIF9pc0NoYW5naW5nT2Jz
Y3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0gTk87Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJs
ZUNvbnRlbnRSZWN0VXBkYXRlXTsKKyAgICByZXR1cm4gX3BhZ2UtPnN1cHBvcnRzVGV4dFpvb20o
KTsKIH0KIAotLSAodm9pZClfaGlkZUNvbnRlbnRVbnRpbE5leHRVcGRhdGUKKy0gKGRvdWJsZSlf
dGV4dFpvb21GYWN0b3IKIHsKLSAgICBpZiAoYXV0byogYXJlYSA9IF9wYWdlLT5kcmF3aW5nQXJl
YSgpKQotICAgICAgICBhcmVhLT5oaWRlQ29udGVudFVudGlsQW55VXBkYXRlKCk7CisgICAgcmV0
dXJuIF9wYWdlLT50ZXh0Wm9vbUZhY3RvcigpOwogfQogCi0tICh2b2lkKV9iZWdpbkFuaW1hdGVk
UmVzaXplV2l0aFVwZGF0ZXM6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistICh2b2lkKV9z
ZXRUZXh0Wm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3IKIHsKLSAgICBDR1JlY3Qgb2xkQm91
bmRzID0gc2VsZi5ib3VuZHM7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG9sZFVub2JzY3VyZWRD
b250ZW50UmVjdCA9IF9wYWdlLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKTsKLQotICAgIGlmICgh
W3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddIHx8ICFfaGFzQ29tbWl0dGVkTG9hZEZvck1h
aW5GcmFtZSB8fCBDR1JlY3RJc0VtcHR5KG9sZEJvdW5kcykgfHwgb2xkVW5vYnNjdXJlZENvbnRl
bnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoW19jdXN0b21Db250ZW50VmlldyByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0
ZXM6KV0pCi0gICAgICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9iZWdpbkFuaW1hdGVk
UmVzaXplV2l0aFVwZGF0ZXM6dXBkYXRlQmxvY2tdOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB1cGRhdGVCbG9jaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVMRUFTRV9M
T0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9iZWdpbkFu
aW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6XSIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9V
SW50NjQoKSk7Ci0KLSAgICBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRoQW5pbWF0aW9uOwotCi0gICAgYXV0
byBvbGRWaWV3TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91
bmRzXTsKLSAgICBhdXRvIG9sZE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IGFjdGl2ZU1heGltdW1V
bm9ic2N1cmVkU2l6ZShzZWxmLCBvbGRCb3VuZHMpOwotICAgIGludDMyX3Qgb2xkT3JpZW50YXRp
b24gPSBhY3RpdmVPcmllbnRhdGlvbihzZWxmKTsKLSAgICBVSUVkZ2VJbnNldHMgb2xkT2JzY3Vy
ZWRJbnNldHMgPSBfb2JzY3VyZWRJbnNldHM7Ci0KLSAgICB1cGRhdGVCbG9jaygpOwotCi0gICAg
Q0dSZWN0IG5ld0JvdW5kcyA9IHNlbGYuYm91bmRzOwotICAgIGF1dG8gbmV3Vmlld0xheW91dFNp
emUgPSBbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpuZXdCb3VuZHNdOwotICAgIGF1dG8gbmV3
TWF4aW11bVVub2JzY3VyZWRTaXplID0gYWN0aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYs
IG5ld0JvdW5kcyk7Ci0gICAgaW50MzJfdCBuZXdPcmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0
aW9uKHNlbGYpOwotICAgIFVJRWRnZUluc2V0cyBuZXdPYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJl
ZEluc2V0czsKLSAgICBDR1JlY3QgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRl
cyA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChuZXdCb3VuZHMsIF9vYnNjdXJlZEluc2V0cyk7Ci0g
ICAgQ0dSZWN0IGNvbnRlbnRWaWV3Qm91bmRzID0gW19jb250ZW50VmlldyBib3VuZHNdOwotCi0g
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlICYmIG5ld1Zp
ZXdMYXlvdXRTaXplLmlzRW1wdHkoKSksICJDbGllbnRzIGNvbnRyb2xsaW5nIHRoZSBsYXlvdXQg
c2l6ZSBzaG91bGQgbWFpbnRhaW4gYSB2YWxpZCBsYXlvdXQgc2l6ZSB0byBtaW5pbWl6ZSBsYXlv
dXRzLiIpOwotICAgIGlmIChDR1JlY3RJc0VtcHR5KG5ld0JvdW5kcykgfHwgbmV3Vmlld0xheW91
dFNpemUuaXNFbXB0eSgpIHx8IENHUmVjdElzRW1wdHkoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNl
bGZDb29yZGluYXRlcykgfHwgQ0dSZWN0SXNFbXB0eShjb250ZW50Vmlld0JvdW5kcykpIHsKLSAg
ICAgICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVkUmVzaXplXTsKLSAgICAgICAgW3NlbGYgX2ZyYW1l
T3JCb3VuZHNDaGFuZ2VkXTsKLSAgICAgICAgaWYgKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKQot
ICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0Vmlld0xheW91dFNpemU6bmV3Vmlld0xheW91
dFNpemVdOwotICAgICAgICBpZiAoX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKQotICAg
ICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0TWF4aW11bVVub2JzY3VyZWRTaXplOldlYkNvcmU6
OkZsb2F0U2l6ZShuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUpXTsKLSAgICAgICAgaWYgKF9vdmVy
cmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbikKLSAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNl
dERldmljZU9yaWVudGF0aW9uOm5ld09yaWVudGF0aW9uXTsKLQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KG9sZEJvdW5kcywgbmV3Qm91bmRzKQot
ICAgICAgICAmJiBvbGRWaWV3TGF5b3V0U2l6ZSA9PSBuZXdWaWV3TGF5b3V0U2l6ZQotICAgICAg
ICAmJiBvbGRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPT0gbmV3TWF4aW11bVVub2JzY3VyZWRTaXpl
Ci0gICAgICAgICYmIG9sZE9yaWVudGF0aW9uID09IG5ld09yaWVudGF0aW9uCi0gICAgICAgICYm
IFVJRWRnZUluc2V0c0VxdWFsVG9FZGdlSW5zZXRzKG9sZE9ic2N1cmVkSW5zZXRzLCBuZXdPYnNj
dXJlZEluc2V0cykpIHsKLSAgICAgICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVkUmVzaXplXTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1
c3RtZW50cyA9IENBVHJhbnNmb3JtM0RJZGVudGl0eTsKLQotICAgIGlmICghX3Jlc2l6ZUFuaW1h
dGlvblZpZXcpIHsKLSAgICAgICAgTlNVSW50ZWdlciBpbmRleE9mQ29udGVudFZpZXcgPSBbW19z
Y3JvbGxWaWV3IHN1YnZpZXdzXSBpbmRleE9mT2JqZWN0Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0g
ICAgICAgIF9yZXNpemVBbmltYXRpb25WaWV3ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5p
dF0pOwotICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJdLm5hbWUgPSBAIlJlc2l6
ZUFuaW1hdGlvbiI7Ci0gICAgICAgIFtfc2Nyb2xsVmlldyBpbnNlcnRTdWJ2aWV3Ol9yZXNpemVB
bmltYXRpb25WaWV3LmdldCgpIGF0SW5kZXg6aW5kZXhPZkNvbnRlbnRWaWV3XTsKLSAgICAgICAg
W19yZXNpemVBbmltYXRpb25WaWV3IGFkZFN1YnZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAg
ICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3IGFkZFN1YnZpZXc6W19jb250ZW50VmlldyB1bnNj
YWxlZFZpZXddXTsKLSAgICB9Ci0KLSAgICBDR1NpemUgY29udGVudFNpemVJbkNvbnRlbnRWaWV3
Q29vcmRpbmF0ZXMgPSBjb250ZW50Vmlld0JvdW5kcy5zaXplOwotICAgIFtfc2Nyb2xsVmlldyBz
ZXRNaW5pbXVtWm9vbVNjYWxlOnN0ZDo6bWluKG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkgLyBj
b250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy53aWR0aCwgW19zY3JvbGxWaWV3IG1p
bmltdW1ab29tU2NhbGVdKV07Ci0gICAgW19zY3JvbGxWaWV3IHNldE1heGltdW1ab29tU2NhbGU6
c3RkOjptYXgobmV3Vmlld0xheW91dFNpemUud2lkdGgoKSAvIGNvbnRlbnRTaXplSW5Db250ZW50
Vmlld0Nvb3JkaW5hdGVzLndpZHRoLCBbX3Njcm9sbFZpZXcgbWF4aW11bVpvb21TY2FsZV0pXTsK
LQotICAgIC8vIENvbXB1dGUgdGhlIG5ldyBzY2FsZSB0byBrZWVwIHRoZSBjdXJyZW50IGNvbnRl
bnQgd2lkdGggaW4gdGhlIHNjcm9sbHZpZXcuCi0gICAgQ0dGbG9hdCBvbGRXZWJWaWV3V2lkdGhJ
bkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMgPSBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgo
KTsKLSAgICBfYW5pbWF0ZWRSZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0aCA9IHN0ZDo6bWluKGNv
bnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoLCBvbGRXZWJWaWV3V2lkdGhJ
bkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMpOwotICAgIENHRmxvYXQgdGFyZ2V0U2NhbGUgPSBuZXdW
aWV3TGF5b3V0U2l6ZS53aWR0aCgpIC8gX2FuaW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50V2lk
dGg7Ci0gICAgQ0dGbG9hdCByZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUgPSB0YXJn
ZXRTY2FsZSAvIGNvbnRlbnRab29tU2NhbGUoc2VsZik7Ci0gICAgW19yZXNpemVBbmltYXRpb25W
aWV3IHNldFRyYW5zZm9ybTpDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShyZXNpemVBbmltYXRp
b25WaWV3QW5pbWF0aW9uU2NhbGUsIHJlc2l6ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSld
OwotCi0gICAgLy8gQ29tcHV0ZSBhIG5ldyBwb3NpdGlvbiB0byBrZWVwIHRoZSBjb250ZW50IGNl
bnRlcmVkLgotICAgIENHUG9pbnQgb3JpZ2luYWxDb250ZW50Q2VudGVyID0gb2xkVW5vYnNjdXJl
ZENvbnRlbnRSZWN0LmNlbnRlcigpOwotICAgIENHUG9pbnQgb3JpZ2luYWxDb250ZW50Q2VudGVy
SW5TZWxmQ29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6b3JpZ2luYWxDb250ZW50Q2Vu
dGVyIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0gICAgQ0dQb2ludCBmdXR1cmVVbm9i
c2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3JkaW5hdGVzID0gQ0dQb2ludE1ha2UoZnV0dXJlVW5v
YnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5vcmlnaW4ueCArIGZ1dHVyZVVub2JzY3VyZWRS
ZWN0SW5TZWxmQ29vcmRpbmF0ZXMuc2l6ZS53aWR0aCAvIDIsIGZ1dHVyZVVub2JzY3VyZWRSZWN0
SW5TZWxmQ29vcmRpbmF0ZXMub3JpZ2luLnkgKyBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNv
b3JkaW5hdGVzLnNpemUuaGVpZ2h0IC8gMik7Ci0KLSAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVu
dE9mZnNldCA9IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKLSAgICBDR1BvaW50IGNvbnRl
bnRPZmZzZXQgPSBvcmlnaW5hbENvbnRlbnRPZmZzZXQ7Ci0gICAgY29udGVudE9mZnNldC54ICs9
IChvcmlnaW5hbENvbnRlbnRDZW50ZXJJblNlbGZDb29yZGluYXRlcy54IC0gZnV0dXJlVW5vYnNj
dXJlZFJlY3RDZW50ZXJJblNlbGZDb29yZGluYXRlcy54KTsKLSAgICBjb250ZW50T2Zmc2V0Lnkg
Kz0gKG9yaWdpbmFsQ29udGVudENlbnRlckluU2VsZkNvb3JkaW5hdGVzLnkgLSBmdXR1cmVVbm9i
c2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3JkaW5hdGVzLnkpOwotCi0gICAgLy8gTGltaXQgdGhl
IG5ldyBvZmZzZXQgd2l0aGluIHRoZSBzY3JvbGx2aWV3LCB3ZSBkbyBub3Qgd2FudCB0byBydWJi
ZXIgYmFuZCBwcm9ncmFtbWF0aWNhbGx5LgotICAgIENHU2l6ZSBmdXR1cmVDb250ZW50U2l6ZUlu
U2VsZkNvb3JkaW5hdGVzID0gQ0dTaXplTWFrZShjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29y
ZGluYXRlcy53aWR0aCAqIHRhcmdldFNjYWxlLCBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29y
ZGluYXRlcy5oZWlnaHQgKiB0YXJnZXRTY2FsZSk7Ci0gICAgQ0dGbG9hdCBtYXhIb3Jpem9udGFs
T2Zmc2V0ID0gZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcy53aWR0aCAtIG5ld0Jv
dW5kcy5zaXplLndpZHRoICsgX29ic2N1cmVkSW5zZXRzLnJpZ2h0OwotICAgIGNvbnRlbnRPZmZz
ZXQueCA9IHN0ZDo6bWluKGNvbnRlbnRPZmZzZXQueCwgbWF4SG9yaXpvbnRhbE9mZnNldCk7Ci0g
ICAgQ0dGbG9hdCBtYXhWZXJ0aWNhbE9mZnNldCA9IGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29v
cmRpbmF0ZXMuaGVpZ2h0IC0gbmV3Qm91bmRzLnNpemUuaGVpZ2h0ICsgX29ic2N1cmVkSW5zZXRz
LmJvdHRvbTsKLSAgICBjb250ZW50T2Zmc2V0LnkgPSBzdGQ6Om1pbihjb250ZW50T2Zmc2V0Lnks
IG1heFZlcnRpY2FsT2Zmc2V0KTsKLQotICAgIGNvbnRlbnRPZmZzZXQueCA9IHN0ZDo6bWF4KGNv
bnRlbnRPZmZzZXQueCwgLV9vYnNjdXJlZEluc2V0cy5sZWZ0KTsKLSAgICBjb250ZW50T2Zmc2V0
LnkgPSBzdGQ6Om1heChjb250ZW50T2Zmc2V0LnksIC1fb2JzY3VyZWRJbnNldHMudG9wKTsKLQot
ICAgIC8vIE1ha2UgdGhlIHRvcC9ib3R0b20gZWRnZXMgInN0aWNreSIgd2l0aGluIDEgcGl4ZWwu
Ci0gICAgaWYgKG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC5tYXhZKCkgPiBjb250ZW50U2l6ZUlu
Q29udGVudFZpZXdDb29yZGluYXRlcy5oZWlnaHQgLSAxKQotICAgICAgICBjb250ZW50T2Zmc2V0
LnkgPSBtYXhWZXJ0aWNhbE9mZnNldDsKLSAgICBpZiAob2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0
LnkoKSA8IDEpCi0gICAgICAgIGNvbnRlbnRPZmZzZXQueSA9IFtzZWxmIF9pbml0aWFsQ29udGVu
dE9mZnNldEZvclNjcm9sbFZpZXddLnk7Ci0KLSAgICAvLyBGSVhNRTogaWYgd2UgaGF2ZSBjb250
ZW50IGNlbnRlcmVkIGFmdGVyIGRvdWJsZSB0YXAgdG8gem9vbSwgd2Ugc2hvdWxkIGFsc28gdHJ5
IHRvIGtlZXAgdGhhdCByZWN0IGluIHZpZXcuCi0gICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRT
aXplOnJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKCpfcGFnZSwgZnV0dXJlQ29udGVudFNpemVJ
blNlbGZDb29yZGluYXRlcyldOwotICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmNv
bnRlbnRPZmZzZXRdOwotCi0gICAgQ0dSZWN0IHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0
ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpuZXdCb3VuZHMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQo
KV07Ci0gICAgQ0dSZWN0IHVub2JzY3VyZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2Vs
ZiBjb252ZXJ0UmVjdDpmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzIHRvVmll
dzpfY29udGVudFZpZXcuZ2V0KCldOwotCi0gICAgVUlFZGdlSW5zZXRzIHVub2JzY3VyZWRTYWZl
QXJlYUluc2V0cyA9IFtzZWxmIF9jb21wdXRlZFVub2JzY3VyZWRTYWZlQXJlYUluc2V0XTsKLSAg
ICBXZWJDb3JlOjpGbG9hdEJveEV4dGVudCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHNFeHRlbnQo
dW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnRvcCwgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJp
Z2h0LCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMuYm90dG9tLCB1bm9ic2N1cmVkU2FmZUFyZWFJ
bnNldHMubGVmdCk7Ci0KLSAgICBfbGFzdFNlbnRWaWV3TGF5b3V0U2l6ZSA9IG5ld1ZpZXdMYXlv
dXRTaXplOwotICAgIF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IG5ld01heGltdW1V
bm9ic2N1cmVkU2l6ZTsKLSAgICBfbGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiA9IG5ld09yaWVu
dGF0aW9uOwotCi0gICAgX3BhZ2UtPmR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUobmV3Vmlld0xh
eW91dFNpemUsIG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZSwgdmlzaWJsZVJlY3RJbkNvbnRlbnRD
b29yZGluYXRlcywgdW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgZnV0dXJlVW5v
YnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcywgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzRXh0
ZW50LCB0YXJnZXRTY2FsZSwgbmV3T3JpZW50YXRpb24sICsrX2N1cnJlbnREeW5hbWljVmlld3Bv
cnRTaXplVXBkYXRlSUQpOwotICAgIGlmIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHkqIGRyYXdp
bmdBcmVhID0gX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5zZXRT
aXplKFdlYkNvcmU6OkludFNpemUobmV3Qm91bmRzLnNpemUpKTsKLQotICAgIF93YWl0aW5nRm9y
Q29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZSA9IFlFUzsKLSAgICBfd2FpdGluZ0ZvckVuZEFuaW1h
dGVkUmVzaXplID0gWUVTOworICAgIF9wYWdlLT5zZXRUZXh0Wm9vbUZhY3Rvcih6b29tRmFjdG9y
KTsKIH0KIAotLSAodm9pZClfZW5kQW5pbWF0ZWRSZXNpemUKKy0gKGRvdWJsZSlfcGFnZVpvb21G
YWN0b3IKIHsKLSAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxs
dSkgLVtXS1dlYlZpZXcgX2VuZEFuaW1hdGVkUmVzaXplXSBfZHluYW1pY1ZpZXdwb3J0VXBkYXRl
TW9kZSAlZCIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSwgX2R5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGUpOwotCi0gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIHVwLXRv
LWRhdGUgbGF5ZXIgdHJlZSwgaW1tZWRpYXRlbHkgY29tcGxldGUKLSAgICAvLyB0aGUgcmVzaXpl
LiBPdGhlcndpc2UsIHdlIHdpbGwgZGVmZXIgY29tcGxldGlvbiB1bnRpbCB3ZSBkby4KLSAgICBf
d2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplID0gTk87Ci0gICAgaWYgKCFfd2FpdGluZ0ZvckNv
bW1pdEFmdGVyQW5pbWF0ZWRSZXNpemUpCi0gICAgICAgIFtzZWxmIF9kaWRDb21wbGV0ZUFuaW1h
dGVkUmVzaXplXTsKKyAgICByZXR1cm4gW3NlbGYgcGFnZVpvb21dOwogfQogCi0tICh2b2lkKV9y
ZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczoodm9pZCAoXikodm9pZCkpdXBkYXRl
QmxvY2sKKy0gKHZvaWQpX3NldFBhZ2Vab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3Rvcgogewot
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2Vi
VmlldyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXM6XSIsIHNlbGYsIF9wYWdl
LT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7Ci0KLSAgICBbc2VsZiBfYmVnaW5BbmltYXRlZFJl
c2l6ZVdpdGhVcGRhdGVzOnVwZGF0ZUJsb2NrXTsKLSAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVw
ZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpSZXNpemluZ1dp
dGhBbmltYXRpb24pIHsKLSAgICAgICAgW19jb250ZW50VmlldyBzZXRIaWRkZW46WUVTXTsKLSAg
ICAgICAgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGU6OlJlc2l6aW5nV2l0aERvY3VtZW50SGlkZGVuOwotICAgICAgICAKLSAgICAg
ICAgLy8gX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzIGlzIHVzZWQgYnkgaXRz
ZWxmOyB0aGUgY2xpZW50IHdpbGwKLSAgICAgICAgLy8gbm90IGNhbGwgZW5kQW5pbWF0ZWRSZXNp
emUsIHNvIHdlIGNhbid0IHdhaXQgZm9yIGl0LgotICAgICAgICBfd2FpdGluZ0ZvckVuZEFuaW1h
dGVkUmVzaXplID0gTk87Ci0gICAgfQorICAgIFtzZWxmIHNldFBhZ2Vab29tOnpvb21GYWN0b3Jd
OwogfQogCi0tICh2b2lkKV9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0
YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzCistIChpZCA8X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxl
Z2F0ZT4pX2RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKIHsKLSAgICBSZXRhaW5QdHI8V0tXZWJW
aWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKLSAgICBbc2VsZiBfZG9BZnRlck5leHRQcmVzZW50YXRp
b25VcGRhdGU6W3N0cm9uZ1NlbGZdIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1NlbGZdIHsKLSAgICAgICAgICAgIGlmIChbc3Ryb25n
U2VsZi0+X3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGNvdW50XSkKLSAg
ICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBfZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRp
bmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc107Ci0gICAgICAgIH0pOwotICAgIH1d
OwotfQorICAgIGF1dG8qIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50ID0gX3BhZ2UtPmRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KCk7CisgICAgaWYgKCFkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKIAotLSAodm9pZClfc2V0T3ZlcmxhaWRBY2Nlc3NvcnlWaWV3c0lu
c2V0OihDR1NpemUpaW5zZXQKLXsKLSAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zZXRPdmVy
bGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6aW5zZXRdOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Jj4oKmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50
KS5kZWxlZ2F0ZSgpLmF1dG9yZWxlYXNlKCk7CiB9CiAKLS0gKHZvaWQpX3NuYXBzaG90UmVjdDoo
Q0dSZWN0KXJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldpZHRoOihDR0Zsb2F0KWlt
YWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQ0dJbWFnZVJlZikpY29tcGxldGlv
bkhhbmRsZXIKKy0gKHZvaWQpX3NldERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6KGlkPF9XS0Rp
YWdub3N0aWNMb2dnaW5nRGVsZWdhdGU+KWRpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKIHsKLSAg
ICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykgewotICAgICAgICAvLyBEZWZlciBzbmFwc2hvdHRp
bmcgdW50aWwgYWZ0ZXIgdGhlIGN1cnJlbnQgcmVzaXplIGNvbXBsZXRlcy4KLSAgICAgICAgdm9p
ZCAoXmNvcGllZENvbXBsZXRpb25IYW5kbGVyKShDR0ltYWdlUmVmKSA9IFtjb21wbGV0aW9uSGFu
ZGxlciBjb3B5XTsKLSAgICAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gcmV0YWluZWRTZWxmID0g
c2VsZjsKLSAgICAgICAgX2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbcmV0
YWluZWRTZWxmLCByZWN0SW5WaWV3Q29vcmRpbmF0ZXMsIGltYWdlV2lkdGgsIGNvcGllZENvbXBs
ZXRpb25IYW5kbGVyXSB7Ci0gICAgICAgICAgICBbcmV0YWluZWRTZWxmIF9zbmFwc2hvdFJlY3Q6
cmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9JbWFnZU9mV2lkdGg6aW1hZ2VXaWR0aCBjb21wbGV0
aW9uSGFuZGxlcjpjb3BpZWRDb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgICAgICAgICBbY29waWVk
Q29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQ0dSZWN0IHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzID0g
W3NlbGYgY29udmVydFJlY3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIHRvVmlldzpzZWxmLl9jdXJy
ZW50Q29udGVudFZpZXddOwotICAgIENHRmxvYXQgaW1hZ2VTY2FsZSA9IGltYWdlV2lkdGggLyBz
bmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcy5zaXplLndpZHRoOwotICAgIENHRmxvYXQg
aW1hZ2VIZWlnaHQgPSBpbWFnZVNjYWxlICogc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0
ZXMuc2l6ZS5oZWlnaHQ7Ci0gICAgQ0dTaXplIGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoaW1hZ2VX
aWR0aCwgaW1hZ2VIZWlnaHQpOwotCi0gICAgaWYgKFtbX2N1c3RvbUNvbnRlbnRWaWV3IGNsYXNz
XSB3ZWJfcmVxdWlyZXNDdXN0b21TbmFwc2hvdHRpbmddKSB7Ci0gICAgICAgIFtfY3VzdG9tQ29u
dGVudFZpZXcgd2ViX3NuYXBzaG90UmVjdEluQ29udGVudFZpZXdDb29yZGluYXRlczpzbmFwc2hv
dFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyBzbmFwc2hvdFdpZHRoOmltYWdlV2lkdGggY29tcGxl
dGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0jaWYgSEFWRShDT1JFX0FOSU1BVElPTl9SRU5ERVJfU0VSVkVSKSAmJiBIQVZFKElPU1VSRkFD
RSkKLSAgICAvLyBJZiB3ZSBhcmUgcGFyZW50ZWQgYW5kIG5vdCBoaWRkZW4sIGFuZCB0aHVzIHdv
bid0IGluY3VyIGEgc2lnbmlmaWNhbnQgcGVuYWx0eSBmcm9tIHBhZ2luZyBpbiB0aWxlcywgc25h
cHNob3QgdGhlIHZpZXcgaGllcmFyY2h5IGRpcmVjdGx5LgotICAgIE5TU3RyaW5nICpkaXNwbGF5
TmFtZSA9IHNlbGYud2luZG93LnNjcmVlbi5kaXNwbGF5Q29uZmlndXJhdGlvbi5uYW1lOwotICAg
IGlmIChkaXNwbGF5TmFtZSAmJiAhc2VsZi53aW5kb3cuaGlkZGVuKSB7Ci0gICAgICAgIGF1dG8g
c3VyZmFjZSA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKFdlYkNvcmU6OmV4cGFuZGVkSW50
U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoaW1hZ2VTaXplKSksIFdlYkNvcmU6OnNSR0JDb2xvclNw
YWNlUmVmKCkpOwotICAgICAgICBpZiAoIXN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIENHRmxvYXQgaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzID0gaW1hZ2VXaWR0aCAvIHJl
Y3RJblZpZXdDb29yZGluYXRlcy5zaXplLndpZHRoOwotICAgICAgICBDQVRyYW5zZm9ybTNEIHRy
YW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5h
dGVzLCBpbWFnZVNjYWxlSW5WaWV3Q29vcmRpbmF0ZXMsIDEpOwotICAgICAgICB0cmFuc2Zvcm0g
PSBDQVRyYW5zZm9ybTNEVHJhbnNsYXRlKHRyYW5zZm9ybSwgLXJlY3RJblZpZXdDb29yZGluYXRl
cy5vcmlnaW4ueCwgLXJlY3RJblZpZXdDb29yZGluYXRlcy5vcmlnaW4ueSwgMCk7Ci0gICAgICAg
IENBUmVuZGVyU2VydmVyUmVuZGVyRGlzcGxheUxheWVyV2l0aFRyYW5zZm9ybUFuZFRpbWVPZmZz
ZXQoTUFDSF9QT1JUX05VTEwsIChDRlN0cmluZ1JlZilkaXNwbGF5TmFtZSwgc2VsZi5sYXllci5j
b250ZXh0LmNvbnRleHRJZCwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oc2VsZi5sYXllciks
IHN1cmZhY2UtPnN1cmZhY2UoKSwgMCwgMCwgJnRyYW5zZm9ybSwgMCk7Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdlYkNvcmU6OklPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKHN1
cmZhY2UpKS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlm
IChfY3VzdG9tQ29udGVudFZpZXcpIHsKLSAgICAgICAgQVNTRVJUKCFbW19jdXN0b21Db250ZW50
VmlldyBjbGFzc10gd2ViX3JlcXVpcmVzQ3VzdG9tU25hcHNob3R0aW5nXSk7Ci0gICAgICAgIFVJ
R3JhcGhpY3NCZWdpbkltYWdlQ29udGV4dFdpdGhPcHRpb25zKGltYWdlU2l6ZSwgWUVTLCAxKTsK
LQotICAgICAgICBVSVZpZXcgKmN1c3RvbUNvbnRlbnRWaWV3ID0gX2N1c3RvbUNvbnRlbnRWaWV3
LmdldCgpOwotICAgICAgICBbY3VzdG9tQ29udGVudFZpZXcuYmFja2dyb3VuZENvbG9yIHNldF07
Ci0gICAgICAgIFVJUmVjdEZpbGwoQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhl
aWdodCkpOwotCi0gICAgICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gVUlHcmFwaGljc0dldEN1
cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAt
c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnggKiBpbWFnZVNjYWxlLCAt
c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnkgKiBpbWFnZVNjYWxlKTsK
LSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgaW1hZ2VTY2FsZSwgaW1hZ2VTY2Fs
ZSk7Ci0gICAgICAgIFtjdXN0b21Db250ZW50Vmlldy5sYXllciByZW5kZXJJbkNvbnRleHQ6Y29u
dGV4dF07Ci0KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW1VJR3JhcGhpY3NHZXRJbWFnZUZy
b21DdXJyZW50SW1hZ2VDb250ZXh0KCkgQ0dJbWFnZV0pOwotCi0gICAgICAgIFVJR3JhcGhpY3NF
bmRJbWFnZUNvbnRleHQoKTsKKyAgICBhdXRvKiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCA9IF9w
YWdlLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOworICAgIGlmICghZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2b2lkKF5jb3BpZWRDb21w
bGV0aW9uSGFuZGxlcikoQ0dJbWFnZVJlZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0g
ICAgX3BhZ2UtPnRha2VTbmFwc2hvdChXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHNuYXBzaG90
UmVjdEluQ29udGVudENvb3JkaW5hdGVzKSwgV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNv
cmU6OkZsb2F0U2l6ZShpbWFnZVNpemUpKSwgV2ViS2l0OjpTbmFwc2hvdE9wdGlvbnNFeGNsdWRl
RGV2aWNlU2NhbGVGYWN0b3IsIFs9XShjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiBpbWFnZUhhbmRsZSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7Ci0gICAgICAg
IGlmIChpbWFnZUhhbmRsZS5pc051bGwoKSkgewotICAgICAgICAgICAgY29waWVkQ29tcGxldGlv
bkhhbmRsZXIobnVsbHB0cik7Ci0gICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIg
cmVsZWFzZV07Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRv
IGJpdG1hcCA9IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFdl
YktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CiAKLSAgICAgICAgaWYg
KCFiaXRtYXApIHsKLSAgICAgICAgICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwotICAgICAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGNnSW1hZ2U7Ci0gICAgICAgIGNnSW1hZ2UgPSBiaXRtYXAtPm1ha2VDR0ltYWdlKCk7Ci0gICAg
ICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKGNnSW1hZ2UuZ2V0KCkpOwotICAgICAgICBbY29w
aWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgfSk7CisgICAgc3RhdGljX2Nhc3Q8
V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dCkuc2V0RGVsZWdhdGUoZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZSk7CiB9CiAKLS0gKHZvaWQp
X292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTooQ0dTaXplKW1p
bmltdW1MYXlvdXRTaXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOihDR1NpemUpbWF4
aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUKKy0gKGlkIDxfV0tGaW5kRGVsZWdhdGU+KV9maW5k
RGVsZWdhdGUKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwg
Ii1bV0tXZWJWaWV3ICIgPDwgX3BhZ2UtPmlkZW50aWZpZXIoKSA8PCAiIF9vdmVycmlkZUxheW91
dFBhcmFtZXRlcnNXaXRoTWluaW11bUxheW91dFNpemU6IiA8PCBXZWJDb3JlOjpGbG9hdFNpemUo
bWluaW11bUxheW91dFNpemUpIDw8ICIgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6IiA8
PCBXZWJDb3JlOjpGbG9hdFNpemUobWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpIDw8ICJd
Iik7Ci0KLSAgICBbc2VsZiBfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTptaW5pbXVtTGF5b3V0
U2l6ZV07Ci0gICAgW3NlbGYgX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOm1heGlt
dW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlXTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0
OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGllbnQoKSkuZGVsZWdhdGUoKS5hdXRvcmVsZWFz
ZSgpOwogfQogCi0tICh2b2lkKV9jbGVhck92ZXJyaWRlTGF5b3V0UGFyYW1ldGVycworLSAodm9p
ZClfc2V0RmluZERlbGVnYXRlOihpZDxfV0tGaW5kRGVsZWdhdGU+KWZpbmREZWxlZ2F0ZQogewot
ICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0gV1RGOjpudWxsb3B0OwotICAgIF9tYXhpbXVt
VW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9wdDsKKyAgICBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5zZXREZWxlZ2F0ZShmaW5k
RGVsZWdhdGUpOwogfQogCi1zdGF0aWMgV1RGOjpPcHRpb25hbDxXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50cz4gdmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeShOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgTlNTdHJpbmcgKj4gKnZpZXdwb3J0QXJndW1lbnRQYWlycywgYm9vbCB2aWV3cG9y
dEZpdEVuYWJsZWQpCitzdGF0aWMgaW5saW5lIFdlYktpdDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0
aW9ucyhfV0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25zKQogewotICAgIGlmICghdmlld3BvcnRB
cmd1bWVudFBhaXJzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHMoV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHM6OlZpZXdwb3J0TWV0YSk7CisgICAgdW5zaWduZWQgZmluZE9wdGlvbnMgPSAwOwog
Ci0gICAgW3ZpZXdwb3J0QXJndW1lbnRQYWlycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5n
QmxvY2s6bWFrZUJsb2NrUHRyKFsmXSAoTlNTdHJpbmcgKmtleSwgTlNTdHJpbmcgKnZhbHVlLCBC
T09MKiBzdG9wKSB7Ci0gICAgICAgIGlmICghW2tleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dIHx8ICFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAgICAg
ICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3Jt
YXQ6QCItW1dLV2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6XTogS2V5cyBh
bmQgdmFsdWVzIG11c3QgYWxsIGJlIE5TU3RyaW5ncy4iXTsKLSAgICAgICAgU3RyaW5nIGtleVN0
cmluZyA9IGtleTsKLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWU7Ci0gICAgICAg
IFdlYkNvcmU6OnNldFZpZXdwb3J0RmVhdHVyZSh2aWV3cG9ydEFyZ3VtZW50cywga2V5U3RyaW5n
LCB2YWx1ZVN0cmluZywgdmlld3BvcnRGaXRFbmFibGVkLCBbXSAoV2ViQ29yZTo6Vmlld3BvcnRF
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICBOU0xv
ZyhAIi1bV0tXZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBFcnJvciBw
YXJzaW5nIHZpZXdwb3J0IGFyZ3VtZW50OiAlcyIsIGVycm9yTWVzc2FnZS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgfSk7Ci0gICAgfSkuZ2V0KCldOworICAgIGlmICh3a0ZpbmRPcHRpb25zICYg
X1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdl
YktpdDo6RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CisgICAgaWYgKHdrRmluZE9wdGlvbnMg
JiBfV0tGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cykKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2Vi
S2l0OjpGaW5kT3B0aW9uc0F0V29yZFN0YXJ0czsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9X
S0ZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQpCisgICAgICAgIGZpbmRP
cHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFy
dDsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zQmFja3dhcmRzKQorICAg
ICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQmFja3dhcmRzOworICAgIGlm
ICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kKQorICAgICAgICBmaW5k
T3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zV3JhcEFyb3VuZDsKKyAgICBpZiAod2tGaW5k
T3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hvd092ZXJsYXkpCisgICAgICAgIGZpbmRPcHRpb25z
IHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93T3ZlcmxheTsKKyAgICBpZiAod2tGaW5kT3B0aW9u
cyAmIF9XS0ZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IpCisgICAgICAgIGZpbmRPcHRpb25z
IHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcjsKKyAgICBpZiAod2tGaW5k
T3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodCkKKyAgICAgICAgZmluZE9wdGlv
bnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQ7CisgICAgaWYgKHdrRmluZE9w
dGlvbnMgJiBfV0tGaW5kT3B0aW9uc05vSW5kZXhDaGFuZ2UpCisgICAgICAgIGZpbmRPcHRpb25z
IHw9IFdlYktpdDo6RmluZE9wdGlvbnNOb0luZGV4Q2hhbmdlOworICAgIGlmICh3a0ZpbmRPcHRp
b25zICYgX1dLRmluZE9wdGlvbnNEZXRlcm1pbmVNYXRjaEluZGV4KQorICAgICAgICBmaW5kT3B0
aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleDsKIAotICAgIHJl
dHVybiB2aWV3cG9ydEFyZ3VtZW50czsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpG
aW5kT3B0aW9ucz4oZmluZE9wdGlvbnMpOwogfQogCi0tICh2b2lkKV9vdmVycmlkZVZpZXdwb3J0
V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopYXJn
dW1lbnRzCistICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXM6KE5TU3RyaW5nICopc3RyaW5nIG9w
dGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291
bnQKIHsKLSAgICBpZiAoIV9wYWdlKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYg
KF9jdXN0b21Db250ZW50VmlldykgeworICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9j
b3VudFN0cmluZ01hdGNoZXM6c3RyaW5nIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3Vu
dF07CiAgICAgICAgIHJldHVybjsKLQotICAgIF9wYWdlLT5zZXRPdmVycmlkZVZpZXdwb3J0QXJn
dW1lbnRzKHZpZXdwb3J0QXJndW1lbnRzRnJvbURpY3Rpb25hcnkoYXJndW1lbnRzLCBfcGFnZS0+
cHJlZmVyZW5jZXMoKS52aWV3cG9ydEZpdEVuYWJsZWQoKSkpOwotfQotCi0tIChVSVZpZXcgKilf
dmlld0ZvckZpbmRVSQotewotICAgIHJldHVybiBbc2VsZiB2aWV3Rm9yWm9vbWluZ0luU2Nyb2xs
Vmlldzpbc2VsZiBzY3JvbGxWaWV3XV07Ci19Ci0KLS0gKEJPT0wpX2lzRGlzcGxheWluZ1BERgot
ewotICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojpw
ZGZNSU1FVHlwZXMoKSkgewotICAgICAgICBDbGFzcyBwcm92aWRlckNsYXNzID0gW1tfY29uZmln
dXJhdGlvbiBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldIHByb3ZpZGVyRm9yTUlNRVR5cGU6bWlt
ZVR5cGVdOwotICAgICAgICBpZiAoW19jdXN0b21Db250ZW50VmlldyBpc0tpbmRPZkNsYXNzOnBy
b3ZpZGVyQ2xhc3NdKQotICAgICAgICAgICAgcmV0dXJuIFlFUzsKICAgICB9Ci0KLSAgICByZXR1
cm4gTk87Ci19Ci0KLS0gKE5TRGF0YSAqKV9kYXRhRm9yRGlzcGxheWVkUERGCi17Ci0gICAgaWYg
KCFbc2VsZiBfaXNEaXNwbGF5aW5nUERGXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1
cm4gW19jdXN0b21Db250ZW50VmlldyB3ZWJfZGF0YVJlcHJlc2VudGF0aW9uXTsKLX0KLQotLSAo
TlNTdHJpbmcgKilfc3VnZ2VzdGVkRmlsZW5hbWVGb3JEaXNwbGF5ZWRQREYKLXsKLSAgICBpZiAo
IVtzZWxmIF9pc0Rpc3BsYXlpbmdQREZdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zdWdnZXN0ZWRGaWxlbmFtZV07CisjZW5kaWYKKyAg
ICBfcGFnZS0+Y291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgdG9GaW5kT3B0aW9ucyhvcHRpb25z
KSwgbWF4Q291bnQpOwogfQogCi0tIChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIgKilfd2ViVmll
d1ByaW50Rm9ybWF0dGVyCistICh2b2lkKV9maW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBv
cHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENv
dW50CiB7Ci0gICAgVUlWaWV3UHJpbnRGb3JtYXR0ZXIgKnZpZXdQcmludEZvcm1hdHRlciA9IHNl
bGYudmlld1ByaW50Rm9ybWF0dGVyOwotICAgIEFTU0VSVChbdmlld1ByaW50Rm9ybWF0dGVyIGlz
S2luZE9mQ2xhc3M6W19XS1dlYlZpZXdQcmludEZvcm1hdHRlciBjbGFzc11dKTsKLSAgICByZXR1
cm4gKF9XS1dlYlZpZXdQcmludEZvcm1hdHRlciAqKXZpZXdQcmludEZvcm1hdHRlcjsKLX0KKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIFdoaWxlIEFwcEtpdCBjb250YWlucyBsb2dp
YyBpbiBOU0JhclRleHRGaW5kZXIgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGZpbmQgcGFz
dGVib2FyZAorICAgIC8vIHdoZW4gdGhlIGZpbmQgc3RyaW5nIGNoYW5nZXMsIHRoaXMgKGFsb25n
IHdpdGggdGhlIGZpbmQgcGFzdGVib2FyZCBpdHNlbGYpIGFyZSBib3RoIG1pc3NpbmcKKyAgICAv
LyBmcm9tIGlPUzsgdGh1cywgb24gaU9TLCB3ZSB1cGRhdGUgdGhlIGN1cnJlbnQgZmluZC1pbi1w
YWdlIHN0cmluZyBoZXJlLgorICAgIFdlYktpdDo6dXBkYXRlU3RyaW5nRm9yRmluZChzdHJpbmcp
OwogCi1zdGF0aWMgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB0b1VzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oVUlTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGUgY29udGVu
dEF0dHJpYnV0ZSkKLXsKLSAgICBhdXRvIGRpcmVjdGlvbiA9IFtVSVZpZXcgdXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbkZvclNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmli
dXRlXTsKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2UgVUlVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7Ci0gICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OlJUTDsKKyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3
KSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2ZpbmRTdHJpbmc6c3RyaW5nIG9w
dGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07CisgICAgICAgIHJldHVybjsKICAgICB9
Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6VXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOworI2VuZGlmCisgICAgX3BhZ2UtPmZpbmRTdHJp
bmcoc3RyaW5nLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhDb3VudCk7CiB9CiAKLS0gKHZv
aWQpc2V0U2VtYW50aWNDb250ZW50QXR0cmlidXRlOihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0
ZSljb250ZW50QXR0cmlidXRlCistICh2b2lkKV9oaWRlRmluZFVJCiB7Ci0gICAgW3N1cGVyIHNl
dFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKLQotICAgIF9wYWdl
LT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHRvVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbihjb250ZW50QXR0cmlidXRlKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcg
d2ViX2hpZGVGaW5kVUldOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgX3Bh
Z2UtPmhpZGVGaW5kVUkoKTsKIH0KIAotI2Vsc2UgLy8gI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0KLSNwcmFnbWEgbWFyayAtIG1hY09TIFdLUHJpdmF0ZQotCi0tIChCT09MKV9kcmF3c0JhY2tn
cm91bmQKKy0gKHZvaWQpX3NhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbTooV0tCYWNrRm9y
d2FyZExpc3RJdGVtICopaXRlbQogewotICAgIHJldHVybiBfaW1wbC0+ZHJhd3NCYWNrZ3JvdW5k
KCk7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm47CisgICAgX3BhZ2UtPnJlY29yZE5h
dmlnYXRpb25TbmFwc2hvdChpdGVtLl9pdGVtKTsKIH0KIAotLSAodm9pZClfc2V0RHJhd3NCYWNr
Z3JvdW5kOihCT09MKWRyYXdzQmFja2dyb3VuZAorLSAoaWQgPF9XS0lucHV0RGVsZWdhdGU+KV9p
bnB1dERlbGVnYXRlCiB7Ci0gICAgX2ltcGwtPnNldERyYXdzQmFja2dyb3VuZChkcmF3c0JhY2tn
cm91bmQpOworICAgIHJldHVybiBfaW5wdXREZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKIH0K
IAotLSAoTlNDb2xvciAqKV9iYWNrZ3JvdW5kQ29sb3IKKy0gKHZvaWQpX3NldElucHV0RGVsZWdh
dGU6KGlkIDxfV0tJbnB1dERlbGVnYXRlPilpbnB1dERlbGVnYXRlCiB7Ci0gICAgcmV0dXJuIF9p
bXBsLT5iYWNrZ3JvdW5kQ29sb3IoKTsKLX0KKyAgICBfaW5wdXREZWxlZ2F0ZSA9IGlucHV0RGVs
ZWdhdGU7CiAKLS0gKHZvaWQpX3NldEJhY2tncm91bmRDb2xvcjooTlNDb2xvciAqKWJhY2tncm91
bmRDb2xvcgotewotICAgIF9pbXBsLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZENvbG9y
KTsKLX0KKyAgICBjbGFzcyBGb3JtQ2xpZW50IDogcHVibGljIEFQSTo6Rm9ybUNsaWVudCB7Cisg
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgZXhw
bGljaXQgRm9ybUNsaWVudChXS1dlYlZpZXcgKndlYlZpZXcpCisgICAgICAgICAgICA6IG1fd2Vi
Vmlldyh3ZWJWaWV3KQorICAgICAgICB7CisgICAgICAgIH0KIAotLSAodm9pZClfc2V0RHJhd3NU
cmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wpZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQKLXsK
LSAgICBzdGF0aWMgQk9PTCBoYXNMb2dnZWREZXByZWNhdGlvbldhcm5pbmc7Ci0gICAgaWYgKCFo
YXNMb2dnZWREZXByZWNhdGlvbldhcm5pbmcpIHsKLSAgICAgICAgLy8gU2VlIGJ1ZyAxNTU1NTAg
Zm9yIGRldGFpbHMuCi0gICAgICAgIE5TTG9nKEAiLVtXS1dlYlZpZXcgX3NldERyYXdzVHJhbnNw
YXJlbnRCYWNrZ3JvdW5kOl0gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiIp
OwotICAgICAgICBoYXNMb2dnZWREZXByZWNhdGlvbldhcm5pbmcgPSBZRVM7Ci0gICAgfQotICAg
IFtzZWxmIF9zZXREcmF3c0JhY2tncm91bmQ6IWRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kXTsK
LX0KKyAgICAgICAgdmlydHVhbCB+Rm9ybUNsaWVudCgpIHsgfQogCi0tIChOU1ZpZXcgKilfaW5z
cGVjdG9yQXR0YWNobWVudFZpZXcKLXsKLSAgICByZXR1cm4gX2ltcGwtPmluc3BlY3RvckF0dGFj
aG1lbnRWaWV3KCk7Ci19CisgICAgICAgIHZvaWQgd2lsbFN1Ym1pdEZvcm0oV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkm
IHNvdXJjZUZyYW1lLCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFdURjo6U3RyaW5nLCBXVEY6OlN0
cmluZz4+JiB0ZXh0RmllbGRWYWx1ZXMsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSwgV1RGOjpGdW5j
dGlvbjx2b2lkKHZvaWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodXNlckRhdGEgJiYgdXNlckRhdGEtPnR5cGUoKSAhPSBBUEk6Ok9i
amVjdDo6VHlwZTo6RGF0YSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlckRhdGEgfHwg
dXNlckRhdGEtPnR5cGUoKSA9PSBBUEk6Ok9iamVjdDo6VHlwZTo6RGF0YSk7CisgICAgICAgICAg
ICAgICAgbV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+bWFya0N1cnJl
bnRseURpc3BhdGNoZWRNZXNzYWdlQXNJbnZhbGlkKCk7CisgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAK
LS0gKHZvaWQpX3NldEluc3BlY3RvckF0dGFjaG1lbnRWaWV3OihOU1ZpZXcgKiluZXdWaWV3Ci17
Ci0gICAgX2ltcGwtPnNldEluc3BlY3RvckF0dGFjaG1lbnRWaWV3KG5ld1ZpZXcpOwotfQorICAg
ICAgICAgICAgYXV0byBpbnB1dERlbGVnYXRlID0gbV93ZWJWaWV3LT5faW5wdXREZWxlZ2F0ZS5n
ZXQoKTsKIAotLSAodm9pZClfc2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlOihfV0tPdmVybGF5U2Ny
b2xsYmFyU3R5bGUpc2Nyb2xsYmFyU3R5bGUKLXsKLSAgICBfaW1wbC0+c2V0T3ZlcmxheVNjcm9s
bGJhclN0eWxlKHRvQ29yZVNjcm9sbGJhclN0eWxlKHNjcm9sbGJhclN0eWxlKSk7Ci19CisgICAg
ICAgICAgICBpZiAoIVtpbnB1dERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1ZXM6dXNlck9iamVjdDpzdWJtaXNzaW9uSGFuZGxl
cjopXSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0tIChfV0tPdmVybGF5U2Nyb2xsYmFyU3R5
bGUpX292ZXJsYXlTY3JvbGxiYXJTdHlsZQotewotICAgIHJldHVybiB0b0FQSVNjcm9sbGJhclN0
eWxlKF9pbXBsLT5vdmVybGF5U2Nyb2xsYmFyU3R5bGUoKSk7Ci19CisgICAgICAgICAgICBhdXRv
IHZhbHVlTWFwID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6dGV4dEZpZWxkVmFsdWVzLnNpemUoKV0pOworICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBwYWlyIDogdGV4dEZpZWxkVmFsdWVzKQorICAgICAgICAgICAgICAgIFt2YWx1ZU1h
cCBzZXRPYmplY3Q6cGFpci5zZWNvbmQgZm9yS2V5OnBhaXIuZmlyc3RdOwogCi0tIChCT09MKV93
aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIF9pbXBsLT53aW5k
b3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKCk7Ci19CisgICAgICAgICAgICBOU09iamVjdCA8
TlNTZWN1cmVDb2Rpbmc+ICp1c2VyT2JqZWN0ID0gbmlsOworICAgICAgICAgICAgaWYgKEFQSTo6
RGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEFQSTo6RGF0YSo+KHVzZXJEYXRhKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlc05vQ29weTpjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oZGF0
YS0+Ynl0ZXMoKSkpIGxlbmd0aDpkYXRhLT5zaXplKCkgZnJlZVdoZW5Eb25lOk5PXSk7CisgICAg
ICAgICAgICAgICAgYXV0byB1bmFyY2hpdmVyID0gc2VjdXJlVW5hcmNoaXZlckZyb21EYXRhKG5z
RGF0YS5nZXQoKSk7CisgICAgICAgICAgICAgICAgQHRyeSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBhbGxvd2VkQ2xhc3NlcyA9IG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5w
cm9jZXNzUG9vbCgpLmFsbG93ZWRDbGFzc2VzRm9yUGFyYW1ldGVyQ29kaW5nKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VyT2JqZWN0ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZD
bGFzc2VzOmFsbG93ZWRDbGFzc2VzIGZvcktleTpAInVzZXJPYmplY3QiXTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlck9iamVjdCA9IFt1bmFy
Y2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TT2JqZWN0IGNsYXNzXSBmb3JLZXk6QCJ1c2Vy
T2JqZWN0Il07CisgICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2RlIHVz
ZXIgZGF0YTogJUAiLCBleGNlcHRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KIAotLSAodm9pZClfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDooQk9PTCll
bmFibGVkCi17Ci0gICAgX2ltcGwtPnNldFdpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQo
ZW5hYmxlZCk7Ci19CisgICAgICAgICAgICBhdXRvIGNoZWNrZXIgPSBXZWJLaXQ6OkNvbXBsZXRp
b25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShpbnB1dERlbGVnYXRlLmdldCgpLCBAc2VsZWN0
b3IoX3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1ZXM6dXNlck9iamVjdDpzdWJtaXNzaW9uSGFu
ZGxlcjopKTsKKyAgICAgICAgICAgIFtpbnB1dERlbGVnYXRlIF93ZWJWaWV3Om1fd2ViVmlldyB3
aWxsU3VibWl0Rm9ybVZhbHVlczp2YWx1ZU1hcC5nZXQoKSB1c2VyT2JqZWN0OnVzZXJPYmplY3Qg
c3VibWlzc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0geworICAg
ICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNoZWNrZXIt
PmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgICAgICB9KS5nZXQoKV07CisgICAgICAgIH0KIAotLSAodm9pZClz
aGFyZVNoZWV0RGlkRGlzbWlzczooV0tTaGFyZVNoZWV0ICopc2hhcmVTaGVldAotewotICAgIF9p
bXBsLT5zaGFyZVNoZWV0RGlkRGlzbWlzcyhzaGFyZVNoZWV0KTsKLX0KKyAgICBwcml2YXRlOgor
ICAgICAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKKyAgICB9OwogCi0tICh2b2lkKV9zZXRPdmVy
cmlkZURldmljZVNjYWxlRmFjdG9yOihDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9yCi17Ci0gICAg
X2ltcGwtPnNldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwor
ICAgIGlmIChpbnB1dERlbGVnYXRlKQorICAgICAgICBfcGFnZS0+c2V0Rm9ybUNsaWVudChtYWtl
VW5pcXVlPEZvcm1DbGllbnQ+KHNlbGYpKTsKKyAgICBlbHNlCisgICAgICAgIF9wYWdlLT5zZXRG
b3JtQ2xpZW50KG51bGxwdHIpOwogfQogCi0tIChDR0Zsb2F0KV9vdmVycmlkZURldmljZVNjYWxl
RmFjdG9yCistIChCT09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudAogewot
ICAgIHJldHVybiBfaW1wbC0+b3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGlmIChh
dXRvKiBtYWluRnJhbWUgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBtYWlu
RnJhbWUtPmlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZURvY3VtZW50KCk7CisgICAgcmV0dXJu
IE5POwogfQogCi0tICh2b2lkKV9zZXRUb3BDb250ZW50SW5zZXQ6KENHRmxvYXQpY29udGVudElu
c2V0CistIChCT09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lTWVkaWFEb2N1bWVudAogewotICAg
IHJldHVybiBfaW1wbC0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCk7CisgICAgaWYg
KGF1dG8qIG1haW5GcmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG1h
aW5GcmFtZS0+aXNEaXNwbGF5aW5nU3RhbmRhbG9uZU1lZGlhRG9jdW1lbnQoKTsKKyAgICByZXR1
cm4gTk87CiB9CiAKLS0gKENHRmxvYXQpX3RvcENvbnRlbnRJbnNldAorLSAoQk9PTClfaXNQbGF5
aW5nQXVkaW8KIHsKLSAgICByZXR1cm4gX2ltcGwtPnRvcENvbnRlbnRJbnNldCgpOworICAgIHJl
dHVybiBfcGFnZS0+aXNQbGF5aW5nQXVkaW8oKTsKIH0KIAotLSAoTlNDb2xvciAqKV9wYWdlRXh0
ZW5kZWRCYWNrZ3JvdW5kQ29sb3IKKy0gKEJPT0wpX2lzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJl
U25hcHNob3QKIHsKLSAgICByZXR1cm4gX2ltcGwtPnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xv
cigpOworICAgIHJldHVybiBfcGFnZS0+aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hv
dCgpOwogfQogCi0tIChfV0tSZWN0RWRnZSlfcGlubmVkU3RhdGUKKy0gKF9XS0xheW91dE1vZGUp
X2xheW91dE1vZGUKIHsKLSAgICByZXR1cm4gX2ltcGwtPnBpbm5lZFN0YXRlKCk7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIHN3aXRjaCAoX2ltcGwtPmxheW91dE1vZGUoKSkgeworICAgIGNhc2Ug
a1dLTGF5b3V0TW9kZUZpeGVkU2l6ZToKKyAgICAgICAgcmV0dXJuIF9XS0xheW91dE1vZGVGaXhl
ZFNpemU7CisgICAgY2FzZSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3
U2NhbGU6CisgICAgICAgIHJldHVybiBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZy
b21WaWV3U2NhbGU7CisgICAgY2FzZSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZy
b21NaW5pbXVtRG9jdW1lbnRTaXplOgorICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFt
aWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZTsKKyAgICBjYXNlIGtXS0xheW91
dE1vZGVWaWV3U2l6ZToKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9k
ZVZpZXdTaXplOworICAgIH0KKyNlbHNlCisgICAgcmV0dXJuIF9wYWdlLT51c2VGaXhlZExheW91
dCgpID8gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZSA6IF9XS0xheW91dE1vZGVWaWV3U2l6ZTsKKyNl
bmRpZgogfQogCi0tIChfV0tSZWN0RWRnZSlfcnViYmVyQmFuZGluZ0VuYWJsZWQKKy0gKHZvaWQp
X3NldExheW91dE1vZGU6KF9XS0xheW91dE1vZGUpbGF5b3V0TW9kZQogewotICAgIHJldHVybiBf
aW1wbC0+cnViYmVyQmFuZGluZ0VuYWJsZWQoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgV0tM
YXlvdXRNb2RlIHdrVmlld0xheW91dE1vZGU7CisgICAgc3dpdGNoIChsYXlvdXRNb2RlKSB7Cisg
ICAgY2FzZSBfV0tMYXlvdXRNb2RlRml4ZWRTaXplOgorICAgICAgICB3a1ZpZXdMYXlvdXRNb2Rl
ID0ga1dLTGF5b3V0TW9kZUZpeGVkU2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBfV0tM
YXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6CisgICAgICAgIHdrVmll
d0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2Nh
bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29t
cHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZToKKyAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9
IGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgX1dLTGF5b3V0TW9kZVZpZXdTaXplOgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlVmlld1NpemU7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBfaW1wbC0+c2V0TGF5b3V0TW9kZSh3a1ZpZXdM
YXlvdXRNb2RlKTsKKyNlbHNlCisgICAgX3BhZ2UtPnNldFVzZUZpeGVkTGF5b3V0KGxheW91dE1v
ZGUgPT0gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZSB8fCBsYXlvdXRNb2RlID09IF9XS0xheW91dE1v
ZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZSk7CisjZW5kaWYKIH0KIAotLSAodm9p
ZClfc2V0UnViYmVyQmFuZGluZ0VuYWJsZWQ6KF9XS1JlY3RFZGdlKXN0YXRlCistIChDR1NpemUp
X2ZpeGVkTGF5b3V0U2l6ZQogewotICAgIF9pbXBsLT5zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZChz
dGF0ZSk7CisgICAgcmV0dXJuIF9wYWdlLT5maXhlZExheW91dFNpemUoKTsKIH0KIAotLSAoaWQp
X2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OihfV0tI
aXRUZXN0UmVzdWx0ICopaGl0VGVzdFJlc3VsdCB3aXRoVHlwZTooX1dLSW1tZWRpYXRlQWN0aW9u
VHlwZSl0eXBlIHVzZXJEYXRhOihpZDxOU1NlY3VyZUNvZGluZz4pdXNlckRhdGEKKy0gKHZvaWQp
X3NldEZpeGVkTGF5b3V0U2l6ZTooQ0dTaXplKWZpeGVkTGF5b3V0U2l6ZQogewotICAgIHJldHVy
biBuaWw7CisgICAgX3BhZ2UtPnNldEZpeGVkTGF5b3V0U2l6ZShXZWJDb3JlOjpleHBhbmRlZElu
dFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGZpeGVkTGF5b3V0U2l6ZSkpKTsKIH0KIAotLSAodm9p
ZClfc2V0QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzOihCT09MKWF1dG9tYXRpY2Fs
bHlBZGp1c3RzQ29udGVudEluc2V0cworLSAodm9pZClfc2V0QmFja2dyb3VuZEV4dGVuZHNCZXlv
bmRQYWdlOihCT09MKWJhY2tncm91bmRFeHRlbmRzCiB7Ci0gICAgX2ltcGwtPnNldEF1dG9tYXRp
Y2FsbHlBZGp1c3RzQ29udGVudEluc2V0cyhhdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNl
dHMpOworICAgIF9wYWdlLT5zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYmFja2dyb3Vu
ZEV4dGVuZHMpOwogfQogCi0tIChCT09MKV9hdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNl
dHMKKy0gKEJPT0wpX2JhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZQogewotICAgIHJldHVybiBf
aW1wbC0+YXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKCk7CisgICAgcmV0dXJuIF9w
YWdlLT5iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKTsKIH0KIAotLSAoQ0dGbG9hdClfbWlu
aW11bUxheW91dFdpZHRoCistIChDR0Zsb2F0KV92aWV3U2NhbGUKIHsKLSAgICByZXR1cm4gX3Bh
Z2UtPm1pbmltdW1TaXplRm9yQXV0b0xheW91dCgpLndpZHRoKCk7CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHJldHVybiBfcGFnZS0+dmlld1NjYWxlRmFjdG9yKCk7CisjZWxzZQorICAgIHJldHVy
biBfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCk7CisjZW5kaWYKIH0KIAotLSAodm9pZClf
c2V0TWluaW11bUxheW91dFdpZHRoOihDR0Zsb2F0KXdpZHRoCistICh2b2lkKV9zZXRWaWV3U2Nh
bGU6KENHRmxvYXQpdmlld1NjYWxlCiB7Ci0gICAgQk9PTCBleHBhbmRzVG9GaXQgPSB3aWR0aCA+
IDA7Ci0KLSAgICBfcGFnZS0+c2V0TWluaW11bVNpemVGb3JBdXRvTGF5b3V0KFdlYkNvcmU6Oklu
dFNpemUod2lkdGgsIDApKTsKLSAgICBfcGFnZS0+c2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKCFl
eHBhbmRzVG9GaXQpOworICAgIGlmICh2aWV3U2NhbGUgPD0gMCB8fCBpc25hbih2aWV3U2NhbGUp
IHx8IGlzaW5mKHZpZXdTY2FsZSkpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFs
aWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJWaWV3IHNjYWxlIHNob3VsZCBiZSBhIHBvc2l0
aXZlIG51bWJlciJdOwogCi0gICAgX2ltcGwtPnNldENsaXBzVG9WaXNpYmxlUmVjdChleHBhbmRz
VG9GaXQpOwotfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBfaW1wbC0+c2V0Vmlld1NjYWxlKHZp
ZXdTY2FsZSk7CisjZWxzZQorICAgIGlmIChfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCkg
PT0gdmlld1NjYWxlKQorICAgICAgICByZXR1cm47CiAKLS0gKEJPT0wpX3Nob3VsZEV4cGFuZENv
bnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91
bGRFeHBhbmRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0KCk7CisgICAgX3BhZ2UtPnNldFZpZXdw
b3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRTaXplKFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXpl
OnNlbGYuYm91bmRzXSwgdmlld1NjYWxlLCBfcGFnZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdp
ZHRoKCkpOworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NldFNob3VsZEV4cGFuZENvbnRlbnRUb1Zp
ZXdIZWlnaHRGb3JBdXRvTGF5b3V0OihCT09MKXNob3VsZEV4cGFuZAorLSAodm9pZClfc2V0TWlu
aW11bUVmZmVjdGl2ZURldmljZVdpZHRoOihDR0Zsb2F0KW1pbmltdW1FZmZlY3RpdmVEZXZpY2VX
aWR0aAogewotICAgIHJldHVybiBfaW1wbC0+c2V0U2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0Rm9y
QXV0b0xheW91dChzaG91bGRFeHBhbmQpOwotfQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgaWYgKF9wYWdlLT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKSA9PSBtaW5pbXVtRWZm
ZWN0aXZlRGV2aWNlV2lkdGgpCisgICAgICAgIHJldHVybjsKIAotLSAoQk9PTClfYWx3YXlzU2hv
d3NIb3Jpem9udGFsU2Nyb2xsZXIKLXsKLSAgICByZXR1cm4gX3BhZ2UtPmFsd2F5c1Nob3dzSG9y
aXpvbnRhbFNjcm9sbGVyKCk7CisgICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZp
ZXdMYXlvdXRTaXplKFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgX3Bh
Z2UtPmxheW91dFNpemVTY2FsZUZhY3RvcigpLCBtaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgp
OworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NldEFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVy
OihCT09MKWFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyCistIChDR0Zsb2F0KV9taW5pbXVt
RWZmZWN0aXZlRGV2aWNlV2lkdGgKIHsKLSAgICBfcGFnZS0+c2V0QWx3YXlzU2hvd3NIb3Jpem9u
dGFsU2Nyb2xsZXIoYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIpOworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgcmV0dXJuIF9wYWdlLT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lk
dGgoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAotLSAoQk9PTClfYWx3YXlz
U2hvd3NWZXJ0aWNhbFNjcm9sbGVyCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5hbHdheXNTaG93c1Zl
cnRpY2FsU2Nyb2xsZXIoKTsKLX0KKyNwcmFnbWEgbWFyayAtIHNjcm9sbFBlcmZvcm1hbmNlRGF0
YQogCi0tICh2b2lkKV9zZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6KEJPT0wpYWx3YXlz
U2hvd3NWZXJ0aWNhbFNjcm9sbGVyCistICh2b2lkKV9zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFD
b2xsZWN0aW9uRW5hYmxlZDooQk9PTCllbmFibGVkCiB7Ci0gICAgX3BhZ2UtPnNldEFsd2F5c1No
b3dzVmVydGljYWxTY3JvbGxlcihhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpOworICAgIF9w
YWdlLT5zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZChlbmFibGVkKTsK
IH0KIAotLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86
KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvCistIChCT09MKV9zY3JvbGxQZXJmb3JtYW5jZURhdGFD
b2xsZWN0aW9uRW5hYmxlZAogewotICAgIHJldHVybiBbc2VsZiBwcmludE9wZXJhdGlvbldpdGhQ
cmludEluZm86cHJpbnRJbmZvXTsKKyAgICByZXR1cm4gX3BhZ2UtPnNjcm9sbFBlcmZvcm1hbmNl
RGF0YUNvbGxlY3Rpb25FbmFibGVkKCk7CiB9CiAKLS0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJp
bnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbyBmb3JGcmFt
ZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZQorLSAoTlNBcnJheSAqKV9zY3JvbGxQZXJm
b3JtYW5jZURhdGEKIHsKLSAgICBpZiAoYXV0byogd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9j
ZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxl
Ll9mcmFtZUlEKSkpCi0gICAgICAgIHJldHVybiBfaW1wbC0+cHJpbnRPcGVyYXRpb25XaXRoUHJp
bnRJbmZvKHByaW50SW5mbywgKndlYkZyYW1lUHJveHkpOworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgaWYgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VE
YXRhKiBzY3JvbGxQZXJmRGF0YSA9IF9wYWdlLT5zY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEoKSkK
KyAgICAgICAgcmV0dXJuIHNjcm9sbFBlcmZEYXRhLT5kYXRhKCk7CisjZW5kaWYKICAgICByZXR1
cm4gbmlsOwogfQogCi0tICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246KE5T
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbil1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
Ci17Ci0gICAgW3N1cGVyIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbl07Ci0KLSAgICBfaW1wbC0+c2V0VXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKTsKLX0KKyNwcmFnbWEgbWFy
ayAtIE1lZGlhIHBsYXliYWNrIHJlc3RyaWN0aW9ucwogCi0tIChCT09MKV93YW50c01lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcKKy0gKEJPT0wpX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5
YmFjawogewotI2lmIEhBVkUoVE9VQ0hfQkFSKQotICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2Fu
dHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICByZXR1cm4gX3BhZ2UtPmFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjaygpOwog
I2Vsc2UKICAgICByZXR1cm4gTk87CiAjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0V2FudHNNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3OihCT09MKXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmll
dworLSAodm9pZClfc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOihCT09MKWZs
YWcKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikKLSAgICBfaW1wbC0+c2V0Q2xpZW50V2FudHNNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3KHdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBfcGFnZS0+c2V0QWxsb3dzTWVkaWFEb2N1bWVu
dElubGluZVBsYXliYWNrKGZsYWcpOwogI2VuZGlmCiB9CiAKLS0gKGlkKV9tZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3CistICh2b2lkKV9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6KGlkPF9XS0Z1bGxz
Y3JlZW5EZWxlZ2F0ZT4pZGVsZWdhdGUKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikKLSAgICByZXR1
cm4gX2ltcGwtPmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpID8gX2ltcGwt
Pm1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA6IG5pbDsKLSNlbHNlCi0gICAgcmV0dXJuIG5p
bDsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGlzPFdlYktpdDo6RnVsbHNj
cmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkpCisgICAgICAgIGRvd25jYXN0
PFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkuc2V0
RGVsZWdhdGUoZGVsZWdhdGUpOwogI2VuZGlmCiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIGZvciBz
dWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotLSAodm9pZClfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xz
VmlldzooaWQpbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwotewotfQotCi0vLyBUaGlzIG1ldGhv
ZCBpcyBmb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLS0gKHZvaWQpX3JlbW92ZU1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcKLXsKLX0KLQotLSAodm9pZClfcHJlcGFyZUZvck1vdmVUb1dpbmRv
dzooTlNXaW5kb3cgKil0YXJnZXRXaW5kb3cgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgX2ltcGwtPnByZXBhcmVGb3JN
b3ZlVG9XaW5kb3codGFyZ2V0V2luZG93LCBbY29tcGxldGlvbkhhbmRsZXJDb3B5XSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weSgpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9zZXRU
aHVtYm5haWxWaWV3OihfV0tUaHVtYm5haWxWaWV3ICopdGh1bWJuYWlsVmlldwotewotICAgIF9p
bXBsLT5zZXRUaHVtYm5haWxWaWV3KHRodW1ibmFpbFZpZXcpOwotfQotCi0tIChfV0tUaHVtYm5h
aWxWaWV3ICopX3RodW1ibmFpbFZpZXcKLXsKLSAgICBpZiAoIV9pbXBsKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIHJldHVybiBfaW1wbC0+dGh1bWJuYWlsVmlldygpOwotfQotCi0tICh2b2lk
KV9zZXRJZ25vcmVzQWxsRXZlbnRzOihCT09MKWlnbm9yZXNBbGxFdmVudHMKLXsKLSAgICBfaW1w
bC0+c2V0SWdub3Jlc0FsbEV2ZW50cyhpZ25vcmVzQWxsRXZlbnRzKTsKLX0KLQotLSAoQk9PTClf
aWdub3Jlc0FsbEV2ZW50cwotewotICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc0FsbEV2ZW50cygp
OwotfQotCi0tIChOU0ludGVnZXIpX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnCistIChpZDxfV0tG
dWxsc2NyZWVuRGVsZWdhdGU+KV9mdWxsc2NyZWVuRGVsZWdhdGUKIHsKLSAgICByZXR1cm4gX2lt
cGwtPnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCk7Ci19Ci0KKyNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCisgICAgaWYgKGlzPFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxz
Y3JlZW5DbGllbnQoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJLaXQ6OkZ1bGxzY3Jl
ZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpLmRlbGVnYXRlKCkuYXV0b3JlbGVh
c2UoKTsKICNlbmRpZgotCi1AZW5kCi0KLSN1bmRlZiBGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRF
TlRWSUVXCi0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEZ1bGxTY3JlZW5BUElfUHJpdmF0ZSkK
LQotLSAoQk9PTCloYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgotewotICAgIHJldHVybiAh
IV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKKyAgICByZXR1cm4gbmlsOwogfQogCi0tICh2
b2lkKWNsb3NlRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIKKy0gKEJPT0wpX2lzSW5GdWxsc2Ny
ZWVuCiB7Ci0gICAgaWYgKCFfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgY2xvc2VdOwotICAgIF9m
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9IG51bGxwdHI7CisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorICAgIHJldHVybiBfcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKSAmJiBfcGFnZS0+
ZnVsbFNjcmVlbk1hbmFnZXIoKS0+aXNGdWxsU2NyZWVuKCk7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgogfQogCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEZ1
bGxTY3JlZW5BUElfSW50ZXJuYWwpCi0KLS0gKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
KilmdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgorLSAoX1dLTWVkaWFDYXB0dXJlU3RhdGUpX21l
ZGlhQ2FwdHVyZVN0YXRlCiB7Ci0gICAgaWYgKCFfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIp
Ci0gICAgICAgIF9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6c2VsZl0pOwotCi0g
ICAgcmV0dXJuIF9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5nZXQoKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b1dLTWVkaWFDYXB0dXJlU3RhdGUoX3BhZ2UtPm1lZGlhU3RhdGVGbGFncygpKTsK
IH0KIAotQGVuZAotI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotQGltcGxlbWVudGF0aW9uIFdLV2Vi
VmlldyAoV0tJQkFjdGlvbnMpCi0KLS0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbToo
aWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KKy0gKHZvaWQpX3NldE1lZGlh
Q2FwdHVyZUVuYWJsZWQ6KEJPT0wpZW5hYmxlZAogewotICAgIFNFTCBhY3Rpb24gPSBpdGVtLmFj
dGlvbjsKLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGdvQmFjazopKQotICAgICAgICBy
ZXR1cm4gISFfcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkuYmFja0l0ZW0oKTsKLQotICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKGdvRm9yd2FyZDopKQotICAgICAgICByZXR1cm4gISFfcGFnZS0+
YmFja0ZvcndhcmRMaXN0KCkuZm9yd2FyZEl0ZW0oKTsKLQotICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKHN0b3BMb2FkaW5nOikpIHsKLSAgICAgICAgLy8gRklYTUU6IFJldHVybiBubyBpZiB3
ZSdyZSBzdG9wcGVkLgotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLQotICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKHJlbG9hZDopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IocmVsb2FkRnJv
bU9yaWdpbjopKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gbm8gaWYgd2UncmUgbG9hZGlu
Zy4KLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0KLSAgICByZXR1cm4gX2ltcGwtPnZhbGlk
YXRlVXNlckludGVyZmFjZUl0ZW0oaXRlbSk7CisgICAgX3BhZ2UtPnNldE1lZGlhQ2FwdHVyZUVu
YWJsZWQoZW5hYmxlZCk7CiB9CiAKLS0gKElCQWN0aW9uKWdvQmFjazooaWQpc2VuZGVyCistIChC
T09MKV9tZWRpYUNhcHR1cmVFbmFibGVkCiB7Ci0gICAgW3NlbGYgZ29CYWNrXTsKKyAgICByZXR1
cm4gX3BhZ2UtPm1lZGlhQ2FwdHVyZUVuYWJsZWQoKTsKIH0KIAotLSAoSUJBY3Rpb24pZ29Gb3J3
YXJkOihpZClzZW5kZXIKKy0gKHZvaWQpX3NldFBhZ2VNdXRlZDooX1dLTWVkaWFNdXRlZFN0YXRl
KW11dGVkU3RhdGUKIHsKLSAgICBbc2VsZiBnb0ZvcndhcmRdOwotfQorICAgIFdlYkNvcmU6Ok1l
ZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBjb3JlU3RhdGUgPSBXZWJDb3JlOjpNZWRpYVBy
b2R1Y2VyOjpOb25lTXV0ZWQ7CiAKLS0gKElCQWN0aW9uKXJlbG9hZDooaWQpc2VuZGVyCi17Ci0g
ICAgW3NlbGYgcmVsb2FkXTsKLX0KKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhQXVkaW9N
dXRlZCkKKyAgICAgICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1ZGlv
SXNNdXRlZDsKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhQ2FwdHVyZURldmljZXNNdXRl
ZCkKKyAgICAgICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OkF1ZGlvQW5k
VmlkZW9DYXB0dXJlSXNNdXRlZDsKKyAgICBpZiAobXV0ZWRTdGF0ZSAmIF9XS01lZGlhU2NyZWVu
Q2FwdHVyZU11dGVkKQorICAgICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNl
cjo6U2NyZWVuQ2FwdHVyZUlzTXV0ZWQ7CiAKLS0gKElCQWN0aW9uKXJlbG9hZEZyb21PcmlnaW46
KGlkKXNlbmRlcgotewotICAgIFtzZWxmIHJlbG9hZEZyb21PcmlnaW5dOworICAgIF9wYWdlLT5z
ZXRNdXRlZChjb3JlU3RhdGUpOwogfQogCi0tIChJQkFjdGlvbilzdG9wTG9hZGluZzooaWQpc2Vu
ZGVyCistICh2b2lkKV9yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczooZGlzcGF0Y2hfYmxvY2tfdClj
b21wbGV0aW9uCiB7Ci0gICAgX3BhZ2UtPnN0b3BMb2FkaW5nKCk7CisjaWYgRU5BQkxFKERBVEFf
REVURUNUSU9OKQorICAgIF9wYWdlLT5yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rcyhbY29tcGxldGlv
biA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKSwgcGFnZSA9IG1ha2VXZWFrUHRyKF9wYWdlLmdl
dCgpKV0gKGF1dG8mIHJlc3VsdCkgeworICAgICAgICBpZiAocGFnZSkKKyAgICAgICAgICAgIHBh
Z2UtPnNldERhdGFEZXRlY3Rpb25SZXN1bHQocmVzdWx0KTsKKyAgICAgICAgaWYgKGNvbXBsZXRp
b24pCisgICAgICAgICAgICBjb21wbGV0aW9uKCk7CisgICAgfSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShjb21wbGV0aW9uKTsKKyNlbmRpZgogfQogCi1AZW5kCi0KLSNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotQGltcGxlbWVudGF0aW9uIFdL
V2ViVmlldyAoX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyKQotCi0tIChDbGFzcylfcHJpbnRGb3Jt
YXR0ZXJDbGFzcworLy8gRXhlY3V0ZSB0aGUgc3VwcGxpZWQgYmxvY2sgYWZ0ZXIgdGhlIG5leHQg
dHJhbnNhY3Rpb24gZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJl
c2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawogewotICAgIHJldHVy
biBbX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyIGNsYXNzXTsKKyAgICBbc2VsZiBfaW50ZXJuYWxE
b0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0Zv
clBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwogfQogCi0t
IChpZCA8X1dLV2ViVmlld1ByaW50UHJvdmlkZXI+KV9wcmludFByb3ZpZGVyCistICh2b2lkKV9k
b0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KHZv
aWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCiB7Ci0gICAgaWQgcHJpbnRQcm92aWRlciA9IF9jdXN0
b21Db250ZW50VmlldyA/IF9jdXN0b21Db250ZW50Vmlldy5nZXQoKSA6IF9jb250ZW50Vmlldy5n
ZXQoKTsKLSAgICBpZiAoW3ByaW50UHJvdmlkZXIgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2Nv
bChfV0tXZWJWaWV3UHJpbnRQcm92aWRlcildKQotICAgICAgICByZXR1cm4gcHJpbnRQcm92aWRl
cjsKLSAgICByZXR1cm4gbmlsOworICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6WUVTIHdp
dGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwogfQogCiBAZW5kCi0jZW5kaWYKIAog
QGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tEZXByZWNhdGVkKQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4
IDhhMjg3ZWY3MjBhODI5YmFjNWRlOTliYzExZGU3MDE0MWMyNGU4YTMuLjZjYjk4M2Y2MDU0MDZi
MzM0YTMyNWFmMmU1YTZmZGMzOTRmOGMwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorI2ltcG9ydCAiRHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZS5oIgogI2ltcG9ydCAiVUlLaXRT
UEkuaCIKICNpbXBvcnQgIldLQ29udGVudFZpZXcuaCIKICNpbXBvcnQgIldLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5oIgpAQCAtNjUsOSArNjYsMTIgQEAgY2xhc3MgQXR0YWNobWVudDsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiBlbnVtIGNsYXNzIENvbnRpbnVlVW5zYWZlTG9hZCA6IGJvb2w7Citj
bGFzcyBJY29uTG9hZGluZ0RlbGVnYXRlOworY2xhc3MgTmF2aWdhdGlvblN0YXRlOwogY2xhc3Mg
U2FmZUJyb3dzaW5nV2FybmluZzsKIGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBhZ2VQ
cm94eTsKK2NsYXNzIFVJRGVsZWdhdGU7CiBzdHJ1Y3QgUHJpbnRJbmZvOwogI2lmIFBMQVRGT1JN
KE1BQykKIGNsYXNzIFdlYlZpZXdJbXBsOwpAQCAtODAsMjIgKzg0LDQ1IEBAIGNsYXNzIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjsKIEBjbGFzcyBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3Ry
eTsKIEBjbGFzcyBXS1Bhc3N3b3JkVmlldzsKIEBjbGFzcyBfV0tGcmFtZUhhbmRsZTsKK0BjbGFz
cyBXS1NhZmVCcm93c2luZ1dhcm5pbmc7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogQGNs
YXNzIFdLU2Nyb2xsVmlldzsKIEBjbGFzcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwor
QHByb3RvY29sIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlcjsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oTUFDKQorQGNsYXNzIFdLVGV4dEZpbmRlckNsaWVudDsKICNlbmRpZgorCiBAcHJvdG9jb2wg
X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOworQHByb3RvY29sIF9XS0lucHV0RGVsZWdhdGU7
CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIFdLX1dFQl9WSUVXX1BST1RPQ09MUyB7CiAKIEBw
YWNrYWdlCiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IF9jb25maWd1cmF0
aW9uOwogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3BhZ2U7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU+IF9uYXZpZ2F0aW9uU3RhdGU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6VUlEZWxlZ2F0ZT4gX3VpRGVsZWdhdGU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6SWNvbkxvYWRpbmdEZWxlZ2F0ZT4gX2ljb25Mb2FkaW5n
RGVsZWdhdGU7CisKICAgICBXZWFrT2JqQ1B0cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlPj4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKKyAgICBXZWFrT2JqQ1B0cjxpZCA8X1dL
SW5wdXREZWxlZ2F0ZT4+IF9pbnB1dERlbGVnYXRlOworCisgICAgUmV0YWluUHRyPFdLU2FmZUJy
b3dzaW5nV2FybmluZz4gX3NhZmVCcm93c2luZ1dhcm5pbmc7CisKICAgICBPcHRpb25hbDxCT09M
PiBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsK
IAorICAgIF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgX3NlbGVjdGlvbkF0dHJpYnV0ZXM7CisgICAg
X1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMgX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVu
dHM7CisgICAgQk9PTCBfdXNlUGxhdGZvcm1GaW5kVUk7CisKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2ViVmlld0ltcGw+IF9pbXBsOworICAgIFJldGFp
blB0cjxXS1RleHRGaW5kZXJDbGllbnQ+IF90ZXh0RmluZGVyQ2xpZW50OwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTA4LDEwMyArMTM1LDEwOCBAQCBjbGFzcyBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXI+IF9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKICNlbmRpZgogCisgICAgUmV0YWlu
UHRyPF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0UmVnaXN0cnk7CisKKyAg
ICBPcHRpb25hbDxDR1NpemU+IF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOworICAgIE9wdGlvbmFs
PFdlYkNvcmU6OkZsb2F0U2l6ZT4gX2xhc3RTZW50Vmlld0xheW91dFNpemU7CisgICAgT3B0aW9u
YWw8Q0dTaXplPiBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRTaXplPiBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemU7CiAgICAg
Q0dSZWN0IF9pbnB1dFZpZXdCb3VuZHM7Ci0jZW5kaWYKLX0KIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0tICh2b2lkKV9wcm9jZXNzRGlkRXhpdDsKLS0gKHZvaWQpX3Byb2Nlc3NXaWxsU3dh
cDsKLS0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzczsKKyAgICBDR0Zsb2F0IF92aWV3cG9ydE1l
dGFUYWdXaWR0aDsKKyAgICBCT09MIF92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0Owor
ICAgIEJPT0wgX3ZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudDsKKyAgICBDR0Zs
b2F0IF9pbml0aWFsU2NhbGVGYWN0b3I7CisgICAgQk9PTCBfZmFzdENsaWNraW5nSXNEaXNhYmxl
ZDsKIAotLSAoVUlWaWV3ICopX2N1cnJlbnRDb250ZW50VmlldzsKKyAgICBCT09MIF9hbGxvd3NM
aW5rUHJldmlldzsKIAotLSAodm9pZClfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTsKLS0gKHZv
aWQpX2RpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb247Ci0tICh2b2lkKV9sYXllclRyZWVDb21taXRD
b21wbGV0ZTsKKyAgICBVSUVkZ2VJbnNldHMgX29ic2N1cmVkSW5zZXRzOworICAgIEJPT0wgX2hh
dmVTZXRPYnNjdXJlZEluc2V0czsKKyAgICBCT09MIF9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJ
bnRlcmFjdGl2ZWx5OwogCi0tICh2b2lkKV9jb3VsZE5vdFJlc3RvcmVQYWdlU3RhdGU7Ci0tICh2
b2lkKV9yZXN0b3JlUGFnZVNjcm9sbFBvc2l0aW9uOihPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBv
aW50PilzY3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpc2Ny
b2xsT3JpZ2luIHByZXZpb3VzT2JzY3VyZWRJbnNldDooV2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQp
aW5zZXRzIHNjYWxlOihkb3VibGUpc2NhbGU7Ci0tICh2b2lkKV9yZXN0b3JlUGFnZVN0YXRlVG9V
bm9ic2N1cmVkQ2VudGVyOihPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PiljZW50ZXIgc2Nh
bGU6KGRvdWJsZSlzY2FsZTsgLy8gRklYTUU6IG5lZWRzIHNjcm9sbCBvcmlnaW4/CisgICAgVUlF
ZGdlSW5zZXRzIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7CisgICAgQk9PTCBfaGF2ZVNldFVu
b2JzY3VyZWRTYWZlQXJlYUluc2V0czsKKyAgICBCT09MIF9hdm9pZHNVbnNhZmVBcmVhOworICAg
IFVJUmVjdEVkZ2UgX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYTsKIAotLSAo
UmVmUHRyPFdlYktpdDo6Vmlld1NuYXBzaG90PilfdGFrZVZpZXdTbmFwc2hvdDsKKyAgICBVSUlu
dGVyZmFjZU9yaWVudGF0aW9uIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOworICAgIEJP
T0wgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uOworICAgIE9wdGlvbmFsPGludDMyX3Q+
IF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uOwogCi0tICh2b2lkKV9zY3JvbGxUb0NvbnRlbnRT
Y3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQb2ludClzY3JvbGxQb3NpdGlvbiBzY3JvbGxP
cmlnaW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9sbE9yaWdpbjsKLS0gKEJPT0wpX3Njcm9sbFRv
UmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgb3JpZ2luOihXZWJDb3JlOjpGbG9h
dFBvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxE
aXN0YW5jZTsKKyAgICBCT09MIF9hbGxvd3NWaWV3cG9ydFNocmlua1RvRml0OwogCi0tIChkb3Vi
bGUpX2luaXRpYWxTY2FsZUZhY3RvcjsKLS0gKGRvdWJsZSlfY29udGVudFpvb21TY2FsZTsKKyAg
ICBCT09MIF9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZyYW1lOworICAgIEJPT0wgX25lZWRzUmVz
ZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWU7CisgICAgV2ViS2l0OjpUcmFu
c2FjdGlvbklEIF9maXJzdFBhaW50QWZ0ZXJDb21taXRMb2FkVHJhbnNhY3Rpb25JRDsKKyAgICBX
ZWJLaXQ6OlRyYW5zYWN0aW9uSUQgX2xhc3RUcmFuc2FjdGlvbklEOworICAgIFdlYktpdDo6RHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTsKKyAgICBX
ZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJRCBfY3VycmVudER5bmFtaWNWaWV3cG9y
dFNpemVVcGRhdGVJRDsKKyAgICBDQVRyYW5zZm9ybTNEIF9yZXNpemVBbmltYXRpb25UcmFuc2Zv
cm1BZGp1c3RtZW50czsKKyAgICBDR0Zsb2F0IF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVu
dFdpZHRoOworICAgIFJldGFpblB0cjxVSVZpZXc+IF9yZXNpemVBbmltYXRpb25WaWV3OworICAg
IENHRmxvYXQgX2xhc3RBZGp1c3RtZW50Rm9yU2Nyb2xsZXI7CisgICAgT3B0aW9uYWw8Q0dSZWN0
PiBfZnJvemVuVmlzaWJsZUNvbnRlbnRSZWN0OworICAgIE9wdGlvbmFsPENHUmVjdD4gX2Zyb3pl
blVub2JzY3VyZWRDb250ZW50UmVjdDsKIAotLSAoZG91YmxlKV90YXJnZXRDb250ZW50Wm9vbVNj
YWxlRm9yUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jil0YXJnZXRSZWN0IGN1cnJlbnRT
Y2FsZTooZG91YmxlKWN1cnJlbnRTY2FsZSBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJl
Y3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91Ymxl
KW1heGltdW1TY2FsZTsKLS0gKHZvaWQpX3pvb21Ub0ZvY3VzUmVjdDooY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jilmb2N1c2VkRWxlbWVudFJlY3Qgc2VsZWN0aW9uUmVjdDooY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JilzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZp
eGVkOihCT09MKWluc2lkZUZpeGVkIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2Nh
bGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxl
IGFsbG93U2NhbGluZzooQk9PTClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VT
Y3JvbGw7Ci0tIChCT09MKV96b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVj
dCB3aXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihC
T09MKWZpdEVudGlyZVJlY3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGlt
dW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0
KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKLS0gKHZvaWQpX3pvb21PdXRXaXRoT3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZDsKLS0gKHZvaWQp
X3pvb21Ub0luaXRpYWxTY2FsZVdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2lu
IGFuaW1hdGVkOihCT09MKWFuaW1hdGVkOwotLSAodm9pZClfZGlkRmluaXNoU2Nyb2xsaW5nOwor
ICAgIEJPT0wgX2NvbW1pdERpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25hbDxX
ZWJDb3JlOjpGbG9hdFBvaW50PiBfc2Nyb2xsT2Zmc2V0VG9SZXN0b3JlOworICAgIFdlYkNvcmU6
OkZsb2F0Qm94RXh0ZW50IF9vYnNjdXJlZEluc2V0c1doZW5TYXZlZDsKIAotLSAodm9pZClfc2V0
SGFzQ3VzdG9tQ29udGVudFZpZXc6KEJPT0wpaGFzQ3VzdG9tQ29udGVudFZpZXcgbG9hZGVkTUlN
RVR5cGU6KGNvbnN0IFdURjo6U3RyaW5nJiltaW1lVHlwZTsKLS0gKHZvaWQpX2RpZEZpbmlzaExv
YWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihj
b25zdCBXVEY6OlN0cmluZyYpc3VnZ2VzdGVkRmlsZW5hbWUgZGF0YTooTlNEYXRhICopZGF0YTsK
KyAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PiBfdW5vYnNjdXJlZENlbnRlclRvUmVz
dG9yZTsKKyAgICBPcHRpb25hbDxXZWJLaXQ6OlRyYW5zYWN0aW9uSUQ+IF9maXJzdFRyYW5zYWN0
aW9uSURBZnRlclBhZ2VSZXN0b3JlOworICAgIGRvdWJsZSBfc2NhbGVUb1Jlc3RvcmU7CiAKLS0g
KHZvaWQpX3dpbGxJbnZva2VVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrOwotLSAodm9pZClf
ZGlkSW52b2tlVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjazsKKyAgICBCT09MIF9hbGxvd3NC
YWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKIAotLSAodm9pZClfc2NoZWR1bGVWaXNpYmxl
Q29udGVudFJlY3RVcGRhdGU7CisgICAgUmV0YWluUHRyPFVJVmlldyA8V0tXZWJWaWV3Q29udGVu
dFByb3ZpZGVyPj4gX2N1c3RvbUNvbnRlbnRWaWV3OworICAgIFJldGFpblB0cjxVSVZpZXc+IF9j
dXN0b21Db250ZW50Rml4ZWRPdmVybGF5VmlldzsKIAotLSAodm9pZClfZGlkQ29tcGxldGVBbmlt
YXRlZFJlc2l6ZTsKKyAgICBSZXRhaW5QdHI8TlNUaW1lcj4gX2VuY2xvc2luZ1Njcm9sbFZpZXdT
Y3JvbGxUaW1lcjsKKyAgICBCT09MIF9kaWRTY3JvbGxTaW5jZUxhc3RUaW1lckZpcmU7CiAKLS0g
KHZvaWQpX2RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lOwotLSAodm9pZClfZGlk
RmluaXNoTG9hZEZvck1haW5GcmFtZTsKLS0gKHZvaWQpX2RpZEZhaWxMb2FkRm9yTWFpbkZyYW1l
OwotLSAodm9pZClfZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZTooV2ViS2l0
OjpTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSluYXZpZ2F0aW9uVHlwZTsKKyAgICBXZWJDb3Jl
OjpDb2xvciBfc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcjsKIAotLSAoQk9PTClfaXNTaG93aW5n
VmlkZW9QaWN0dXJlSW5QaWN0dXJlOwotLSAoQk9PTClfbWF5QXV0b21hdGljYWxseVNob3dWaWRl
b1BpY3R1cmVJblBpY3R1cmU7CisgICAgLy8gVGhpcyB2YWx1ZSB0cmFja3MgdGhlIGN1cnJlbnQg
YWRqdXN0bWVudCBhZGRlZCB0byB0aGUgYm90dG9tIGluc2V0IGR1ZSB0byB0aGUga2V5Ym9hcmQg
c2xpZGluZyBvdXQgZnJvbSB0aGUgYm90dG9tCisgICAgLy8gd2hlbiBjb21wdXRpbmcgb2JzY3Vy
ZWQgY29udGVudCBpbnNldHMuIFRoaXMgaXMgdXNlZCB3aGVuIHVwZGF0aW5nIHRoZSB2aXNpYmxl
IGNvbnRlbnQgcmVjdHMgd2hlcmUgd2Ugc2hvdWxkIG5vdAorICAgIC8vIGluY2x1ZGUgdGhpcyBh
ZGp1c3RtZW50LgorICAgIENHRmxvYXQgX3RvdGFsU2Nyb2xsVmlld0JvdHRvbUluc2V0QWRqdXN0
bWVudEZvcktleWJvYXJkOworICAgIEJPT0wgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJ
bnNldHNGb3JLZXlib2FyZDsKIAotLSAodm9pZClfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmQ7
CisgICAgQk9PTCBfaW52b2tpbmdVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrOworICAgIEJP
T0wgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVJU2Nyb2xsVmlld0RlbGVn
YXRlQ2FsbGJhY2s7CisgICAgQk9PTCBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3Rz
Rm9yQW55UmVhc29uOworICAgIEJPT0wgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0
c0ZvclVuc3RhYmxlU2Nyb2xsVmlldzsKIAotLSAodm9pZClfdmlkZW9Db250cm9sc01hbmFnZXJE
aWRDaGFuZ2U7CisgICAgQk9PTCBfd2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplOworICAgIEJP
T0wgX3dhaXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVkUmVzaXplOwogCi0tICh2b2lkKV9uYXZp
Z2F0aW9uR2VzdHVyZURpZEJlZ2luOwotLSAodm9pZClfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQ7
Ci0tIChCT09MKV9pc05hdmlnYXRpb25Td2lwZUdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVS
ZWNvZ25pemVyICopcmVjb2duaXplcjsKKyAgICBWZWN0b3I8V1RGOjpGdW5jdGlvbjx2b2lkICgp
Pj4gX2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXplOworICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzOwogCi0tICh2
b2lkKV9zaG93UGFzc3dvcmRWaWV3V2l0aERvY3VtZW50TmFtZTooTlNTdHJpbmcgKilkb2N1bWVu
dE5hbWUgcGFzc3dvcmRIYW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqKSlwYXNzd29yZEhhbmRs
ZXI7Ci0tICh2b2lkKV9oaWRlUGFzc3dvcmRWaWV3OworICAgIFJldGFpblB0cjxXS1Bhc3N3b3Jk
Vmlldz4gX3Bhc3N3b3JkVmlldzsKIAotLSAodm9pZClfZGlkQ2hhbmdlRWRpdG9yU3RhdGU7Cisg
ICAgQk9PTCBfaGFzU2NoZWR1bGVkVmlzaWJsZVJlY3RVcGRhdGU7CisgICAgQk9PTCBfdmlzaWJs
ZUNvbnRlbnRSZWN0VXBkYXRlU2NoZWR1bGVkRnJvbVNjcm9sbFZpZXdJblN0YWJsZVN0YXRlOwog
Ci0tICh2b2lkKV9hZGRTaG9ydGN1dDooaWQpc2VuZGVyOwotLSAodm9pZClfZGVmaW5lOihpZClz
ZW5kZXI7Ci0tICh2b2lkKV9sb29rdXA6KGlkKXNlbmRlcjsKLS0gKHZvaWQpX3NoYXJlOihpZClz
ZW5kZXI7Ci0tICh2b2lkKV9zaG93VGV4dFN0eWxlT3B0aW9uczooaWQpc2VuZGVyOwotLSAodm9p
ZClfcHJvbXB0Rm9yUmVwbGFjZTooaWQpc2VuZGVyOwotLSAodm9pZClfdHJhbnNsaXRlcmF0ZUNo
aW5lc2U6KGlkKXNlbmRlcjsKLS0gKHZvaWQpcmVwbGFjZTooaWQpc2VuZGVyOworICAgIF9XS0Ry
YWdJbnRlcmFjdGlvblBvbGljeSBfZHJhZ0ludGVyYWN0aW9uUG9saWN5OwogCi0tICh2b2lkKV9u
ZXh0QWNjZXNzb3J5VGFiOihpZClzZW5kZXI7Ci0tICh2b2lkKV9wcmV2aW91c0FjY2Vzc29yeVRh
YjooaWQpc2VuZGVyOworICAgIC8vIEZvciByZWxlYXNlLWxvZ2dpbmcgZm9yIDxyZGFyOi8vcHJv
YmxlbS8zOTI4MTI2OT4uCisgICAgTW9ub3RvbmljVGltZSBfdGltZU9mUmVxdWVzdEZvclZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZTsKKyAgICBNb25vdG9uaWNUaW1lIF90aW1lT2ZMYXN0VmlzaWJs
ZUNvbnRlbnRSZWN0VXBkYXRlOwogCi0tICh2b2lkKV9pbmNyZW1lbnRGb2N1c1ByZXNlcnZhdGlv
bkNvdW50OwotLSAodm9pZClfZGVjcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKLS0gKHZv
aWQpX3Jlc2V0Rm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKKyAgICBPcHRpb25hbDxNb25vdG9uaWNU
aW1lPiBfdGltZU9mRmlyc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVXaXRoUGVuZGluZ0NvbW1p
dDsKIAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1Bhc3N3b3JkVmlldyAqX3Bh
c3N3b3JkVmlldzsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3Q29u
dGVudFByb3ZpZGVyUmVnaXN0cnkgKl9jb250ZW50UHJvdmlkZXJSZWdpc3RyeTsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tTZWxlY3Rpb25HcmFudWxhcml0eSBfc2VsZWN0aW9u
R3JhbnVsYXJpdHk7CisgICAgTlNVSW50ZWdlciBfZm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKKyAg
ICBOU1VJbnRlZ2VyIF9hY3RpdmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKIAotQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9pc0JhY2tncm91bmQ7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2FsbG93c0RvdWJsZVRhcEdlc3R1cmVzOwotQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zdHlsdXNUYXBHZXN0dXJlU2hvdWxkQ3Jl
YXRlRWRpdGFibGVJbWFnZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBf
aGF2ZVNldE9ic2N1cmVkSW5zZXRzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBV
SUVkZ2VJbnNldHMgX2NvbXB1dGVkT2JzY3VyZWRJbnNldDsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgVUlFZGdlSW5zZXRzIF9jb21wdXRlZFVub2JzY3VyZWRTYWZlQXJlYUluc2V0
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9X2lzUmV0YWluaW5nQWN0
aXZlRm9jdXNlZFN0YXRlKSBCT09MIF9yZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGU7CisgICAg
Qk9PTCBfaGFzRW50ZXJlZERlYWxsb2M7CiAKLS0gKEJPT0wpX2VmZmVjdGl2ZUFwcGVhcmFuY2VJ
c0Rhcms7Ci0tIChCT09MKV9lZmZlY3RpdmVVc2VySW50ZXJmYWNlTGV2ZWxJc0VsZXZhdGVkOwor
I2VuZGlmCit9CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQorLSAoQk9PTClfaXNW
YWxpZDsKKy0gKHZvaWQpX2RpZENoYW5nZUVkaXRvclN0YXRlOwogCiAjaWYgRU5BQkxFKEFUVEFD
SE1FTlRfRUxFTUVOVCkKIC0gKHZvaWQpX2RpZFJlbW92ZUF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNo
bWVudCYpYXR0YWNobWVudDsKQEAgLTIyMywxNyArMjU1LDYgQEAgY2xhc3MgVmlld0dlc3R1cmVD
b250cm9sbGVyOwogLSAoV0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKIC0gKFdlYktpdDo6V2Vi
UGFnZVByb3h5KilfcGFnZTsKIAotI2lmIFBMQVRGT1JNKE1BQykKLQotLSAodm9pZClfcHJlcGFy
ZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKLS0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbiBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9u
QW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotCi0tICh2b2lkKWlu
c2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50
UmFuZ2U7Ci0tICh2b2lkKV93ZWJfZ3JhbnRET01QYXN0ZUFjY2VzczsKLQotI2VuZGlmCi0KIEBl
bmQKIAogV0tXZWJWaWV3KiBmcm9tV2ViUGFnZVByb3h5KFdlYktpdDo6V2ViUGFnZVByb3h5Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaAppbmRleCAyN2QzMDBmNGEwNDk3Y2VhNzhkMzM1NDkyMWVjNGY2MDY3MjI5NGZjLi4y
NTExMzc0MjNlMDc2NDQwMjBmYjA2NjZmY2QyMDA0ODczODJkZjNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTIx
Nyw5ICsyMTcsNiBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2Up
IHsKIAogLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZv
aWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpLCBpb3MoMTAuMCkp
OwogLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2FpdGluZ0Zv
clBhaW50aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOwotI2lmIFRBUkdFVF9PU19JUEhPTkUKLS0gKHZvaWQp
X2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlOihkaXNwYXRjaF9ibG9ja190KXVw
ZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLSNlbmRpZgogCiAtICh2b2lk
KV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJp
bmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9uIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4zKSk7CiAKQEAgLTI0NywxNyArMjQ0
LDgyIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogQHBy
b3BlcnR5IChjbGFzcywgbm9uYXRvbWljLCBjb3B5LCBzZXR0ZXI9X3NldFN0cmluZ0ZvckZpbmQ6
KSBOU1N0cmluZyAqX3N0cmluZ0ZvckZpbmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLU2VsZWN0
aW9uQXR0cmlidXRlcyBfc2VsZWN0aW9uQXR0cmlidXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE1KSwgaW9zKDEzLjApKTsKIAotI2lmIFRBUkdFVF9PU19JUEhPTkUKKy0gKFdLTmF2aWdh
dGlvbiAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIpLCBpb3MoMTAuMCkpOworLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZEV4cGlyZWRP
bmx5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOwogCi1AcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfY29udGVudFZpc2libGVSZWN0IFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250
ZW50c1RvVmlldzooQ0dQb2ludClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0t
IChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBCT09MIF93ZWJQcm9jZXNzSXNSZXNwb25zaXZlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTIpLCBpb3MoMTAuMCkpOworLSAodm9pZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzOworLSAo
dm9pZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZTsKIAotLSAodm9pZClfc2V0
Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlkKXNlbmRlciBXS19BUElfQVZBSUxBQkxFKGlv
cygxMi4yKSk7Ci0tICh2b2lkKV9zZXRGb250U2l6ZTooQ0dGbG9hdClmb250U2l6ZSBzZW5kZXI6
KGlkKXNlbmRlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7Ci0tICh2b2lkKV9zZXRUZXh0
Q29sb3I6KFVJQ29sb3IgKiljb2xvciBzZW5kZXI6KGlkKXNlbmRlciBXS19BUElfQVZBSUxBQkxF
KGlvcygxMi4yKSk7CistICh2b2lkKV9nZXRNYWluUmVzb3VyY2VEYXRhV2l0aENvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsK
Ky0gKHZvaWQpX2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX2dldENv
bnRlbnRzQXNTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nICos
IE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
MyksIGlvcygxMS4wKSk7CistICh2b2lkKV9nZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZ1dp
dGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBdHRyaWJ1dGVkU3RyaW5nICosIE5TRGlj
dGlvbmFyeTxOU0F0dHJpYnV0ZWRTdHJpbmdEb2N1bWVudEF0dHJpYnV0ZUtleSwgaWQ+ICosIE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7CiAKLS0gKHZvaWQpX2RldGVjdERhdGFXaXRoVHlwZXM6KFdLRGF0YURldGVj
dG9yVHlwZXMpdHlwZXMgY29tcGxldGlvbkhhbmRsZXI6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxl
dGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7CistICh2b2lkKV9nZXRBcHBsaWNhdGlv
bk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBcHBsaWNhdGlvbk1h
bmlmZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCksIGlvcygxMS4zKSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFBhZ2lu
YXRpb25Nb2RlOikgX1dLUGFnaW5hdGlvbk1vZGUgX3BhZ2luYXRpb25Nb2RlOworLy8gV2hldGhl
ciB0aGUgY29sdW1uLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9IHByb3BlcnRpZXMgYXJlIHJlc3BlY3Rl
ZCBpbnN0ZWFkIG9mIHRoZQorLy8gcGFnZS1icmVhay17YmVmb3JlLGFmdGVyfSBwcm9wZXJ0aWVz
LgorQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtl
Q29sdW1uczopIEJPT0wgX3BhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM7CisvLyBTZXQgdG8g
MCB0byBoYXZlIHRoZSBwYWdlIGxlbmd0aCBlcXVhbCB0aGUgdmlldyBsZW5ndGguCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRQYWdlTGVuZ3RoOikgQ0dGbG9hdCBfcGFnZUxlbmd0
aDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEdhcEJldHdlZW5QYWdlczopIENH
RmxvYXQgX2dhcEJldHdlZW5QYWdlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3Nl
dFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQ6KSBCT09MIF9wYWdpbmF0aW9uTGluZUdyaWRFbmFi
bGVkOworQHByb3BlcnR5IChyZWFkb25seSkgTlNVSW50ZWdlciBfcGFnZUNvdW50OworCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3N1cHBvcnRzVGV4dFpvb207CitAcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUZXh0Wm9vbUZhY3RvcjopIGRvdWJsZSBfdGV4
dFpvb21GYWN0b3I7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRQYWdlWm9vbUZh
Y3RvcjopIGRvdWJsZSBfcGFnZVpvb21GYWN0b3I7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3
ZWFrLCBzZXR0ZXI9X3NldERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6KSBpZCA8X1dLRGlhZ25v
c3RpY0xvZ2dpbmdEZWxlZ2F0ZT4gX2RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMSksIGlvcyg5LjApKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3
ZWFrLCBzZXR0ZXI9X3NldEZpbmREZWxlZ2F0ZTopIGlkIDxfV0tGaW5kRGVsZWdhdGU+IF9maW5k
RGVsZWdhdGU7CistICh2b2lkKV9maW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25z
OihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENvdW50Owor
LSAodm9pZClfY291bnRTdHJpbmdNYXRjaGVzOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihf
V0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENvdW50OworLSAo
dm9pZClfaGlkZUZpbmRVSTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHdlYWssIHNldHRlcj1f
c2V0SW5wdXREZWxlZ2F0ZTopIGlkIDxfV0tJbnB1dERlbGVnYXRlPiBfaW5wdXREZWxlZ2F0ZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsKKworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9X2lzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZURv
Y3VtZW50KSBCT09MIF9kaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlRG9jdW1lbnQ7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNEaXNwbGF5aW5nU3RhbmRhbG9uZU1l
ZGlhRG9jdW1lbnQpIEJPT0wgX2Rpc3BsYXlpbmdTdGFuZGFsb25lTWVkaWFEb2N1bWVudDsKKwor
QHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29s
bGVjdGlvbkVuYWJsZWQ6KSBCT09MIF9zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5h
YmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjExKSwgaW9zKDkuMCkpOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpfc2Nyb2xsUGVyZm9ybWFuY2VEYXRhIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTEpLCBpb3MoOS4wKSk7CisKKy0gKHZvaWQpX3NhdmVC
YWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjExKSwgaW9zKDkuMCkpOworCitAcHJvcGVydHkgKG5v
bmF0b21pYywgZ2V0dGVyPV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2ssIHNldHRl
cj1fc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOikgQk9PTCBfYWxsb3dzTWVk
aWFEb2N1bWVudElubGluZVBsYXliYWNrOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVy
PV9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6KSBpZDxfV0tGdWxsc2NyZWVuRGVsZWdhdGU+IF9mdWxs
c2NyZWVuRGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lzSW5GdWxsc2NyZWVuIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIF9XS01lZGlhQ2FwdHVyZVN0YXRlIF9tZWRpYUNhcHR1cmVTdGF0ZSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKKworLSAodm9pZClfc2V0UGFnZU11
dGVkOihfV0tNZWRpYU11dGVkU3RhdGUpbXV0ZWRTdGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEzKSwgaW9zKDExLjApKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0
TWVkaWFDYXB0dXJlRW5hYmxlZDopIEJPT0wgX21lZGlhQ2FwdHVyZUVuYWJsZWQgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7CistICh2b2lkKV9zdG9wTWVkaWFDYXB0
dXJlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfY2FuVG9nZ2xlUGljdHVy
ZUluUGljdHVyZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaXNQaWN0
dXJlSW5QaWN0dXJlQWN0aXZlOworLSAodm9pZClfdXBkYXRlTWVkaWFQbGF5YmFja0NvbnRyb2xz
TWFuYWdlcjsKKy0gKHZvaWQpX3RvZ2dsZVBpY3R1cmVJblBpY3R1cmU7CistICh2b2lkKV9zdG9w
QWxsTWVkaWFQbGF5YmFjazsKKy0gKHZvaWQpX3N1c3BlbmRBbGxNZWRpYVBsYXliYWNrOworLSAo
dm9pZClfcmVzdW1lQWxsTWVkaWFQbGF5YmFjazsKKy0gKHZvaWQpX2Nsb3NlQWxsTWVkaWFQcmVz
ZW50YXRpb25zOworCistICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENH
UmVjdClyZWN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0
Q29udGV4dCAqPiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjE1KSwgaW9zKDEzLjApKTsKKy0gKHZvaWQpX2ZvY3VzVGV4dElucHV0Q29udGV4dDooX1dLVGV4
dElucHV0Q29udGV4dCAqKXRleHRJbnB1dEVsZW1lbnQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQo
XikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7CisKKy0gKHZvaWQpX3Rha2VQREZTbmFwc2hvdFdpdGhDb25maWd1cmF0aW9u
OihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICpwZGZTbmFwc2hvdERhdGEsIE5TRXJyb3IgKmVy
cm9yKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworQGVuZAorCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCitAaW50
ZXJmYWNlIFdLV2ViVmlldyAoV0tQcml2YXRlSU9TKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIENHUmVjdCBfY29udGVudFZpc2libGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDEwLjApKTsKIAogLy8gREVSRUNBVEVEOiBUaGUgc2V0dGVycyBvZiB0aGUgdGhyZWUgZm9sbG93
aW5nIGZ1bmN0aW9uIGFyZSBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIG92ZXJyaWRlTGF5b3V0UGFy
YW1ldGVycy4KIC8vIERlZmluZSB0aGUgc21hbGxlc3Qgc2l6ZSBhIHBhZ2UgdGFrZSB3aXRoIGEg
cmVndWxhciB2aWV3cG9ydC4KQEAgLTI3OCw2ICszNDAsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMo
TlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIC8vIE92ZXJyaWRlIHRoZSBpbnRlcmZhY2Ugb3Jp
ZW50YXRpb24uIENsaWVudHMgdXNpbmcgX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczog
bXVzdCB1cGRhdGUgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbgogLy8gaW4gdGhlIHVwZGF0ZSBi
bG9jay4KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEludGVyZmFjZU9yaWVudGF0
aW9uT3ZlcnJpZGU6KSBVSUludGVyZmFjZU9yaWVudGF0aW9uIF9pbnRlcmZhY2VPcmllbnRhdGlv
bk92ZXJyaWRlOworLSAodm9pZClfY2xlYXJJbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0QWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdDopIEJPT0wgX2FsbG93c1ZpZXdwb3J0U2hy
aW5rVG9GaXQ7CiAKQEAgLTI5NSw2ICszNTgsMTkgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUlu
dGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Q0dSZWN0IF91aVRleHRDYXJldFJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwogCitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlldyAqX3NhZmVCcm93c2luZ1dhcm5p
bmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKKworLSAoQ0dQ
b2ludClfY29udmVydFBvaW50RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50IFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3
VG9Db250ZW50czooQ0dQb2ludClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CisK
Ky0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlOihkaXNwYXRjaF9i
bG9ja190KXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKworLSAodm9p
ZClfc2V0Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlkKXNlbmRlciBXS19BUElfQVZBSUxB
QkxFKGlvcygxMi4yKSk7CistICh2b2lkKV9zZXRGb250U2l6ZTooQ0dGbG9hdClmb250U2l6ZSBz
ZW5kZXI6KGlkKXNlbmRlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7CistICh2b2lkKV9z
ZXRUZXh0Q29sb3I6KFVJQ29sb3IgKiljb2xvciBzZW5kZXI6KGlkKXNlbmRlciBXS19BUElfQVZB
SUxBQkxFKGlvcygxMi4yKSk7CisKKy0gKHZvaWQpX2RldGVjdERhdGFXaXRoVHlwZXM6KFdLRGF0
YURldGVjdG9yVHlwZXMpdHlwZXMgY29tcGxldGlvbkhhbmRsZXI6KGRpc3BhdGNoX2Jsb2NrX3Qp
Y29tcGxldGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4yKSk7CisKIC0gKHZvaWQpX3JlcXVl
c3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjooQ0dQb2ludClwb3NpdGlvbiBjb21wbGV0aW9u
QmxvY2s6KHZvaWQgKF4pKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopKWJsb2NrIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDExLjApKTsKIAogLSAodm9pZClkaWRTdGFydEZvcm1Db250cm9sSW50ZXJh
Y3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwpAQCAtMzExLDEwICszODcsOCBAQCB0
eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIC0gKHZvaWQpX3Nu
YXBzaG90UmVjdDooQ0dSZWN0KXJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldpZHRo
OihDR0Zsb2F0KWltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQ0dJbWFnZVJl
ZikpY29tcGxldGlvbkhhbmRsZXI7CiAKIC0gKHZvaWQpX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVy
c1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTooQ0dTaXplKW1pbmltdW1MYXlvdXRTaXplIG1heGltdW1V
bm9ic2N1cmVkU2l6ZU92ZXJyaWRlOihDR1NpemUpbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoOV8wKSk7Ci0tICh2b2lkKV9vdmVycmlkZVZpZXdwb3J0
V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopYXJn
dW1lbnRzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEzLjApKTsKLQogLSAodm9pZClfY2xlYXJPdmVy
cmlkZUxheW91dFBhcmFtZXRlcnMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotLSAodm9p
ZClfY2xlYXJJbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlIFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDExLjApKTsKKy0gKHZvaWQpX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgTlNTdHJpbmcgKj4gKilhcmd1bWVudHMgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTMuMCkpOwogCiAtIChVSVZpZXcgKilfdmlld0ZvckZpbmRVSTsKIApAQCAtMzI3LDYg
KzQwMSw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewog
LSAodm9pZClfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDoo
Qk9PTClzZWxlY3RpbmdGb3J3YXJkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIGRp
ZEJlY29tZUZpcnN0UmVzcG9uZGVyKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxF
KGlvcyg5XzApKTsKIAogLSAoaWQpX3NuYXBzaG90TGF5ZXJDb250ZW50c0ZvckJhY2tGb3J3YXJk
TGlzdEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0gV0tfQVBJX0FWQUlMQUJMRShp
b3MoOV8wKSk7CisKIC0gKE5TQXJyYXkgKilfZGF0YURldGVjdGlvblJlc3VsdHM7CiAKIC0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdl
cilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJ
X0FWQUlMQUJMRShpb3MoMTEuMykpOwpAQCAtMzM2LDExICs0MTEsMjkgQEAgdHlwZWRlZiBOU19P
UFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5
UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkp
OwogLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0aW9uQ29udGVudDooTlNT
dHJpbmcgKiljb250ZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIAotQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVZpZXcgKl9zYWZlQnJvd3NpbmdXYXJuaW5nIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci0KIC0gKFVJVmlldyAqKV9m
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKIAot
I2Vsc2UKK0BlbmQKKworQGludGVyZmFjZSBXS1dlYlZpZXcgKCkgPFVJUmVzcG9uZGVyU3RhbmRh
cmRFZGl0QWN0aW9ucz4KK0BlbmQKKworI2lmICFUQVJHRVRfT1NfV0FUQ0gKKworQGludGVyZmFj
ZSBXS1dlYlZpZXcgKEZ1bGxTY3JlZW5BUElfUHJpdmF0ZSkKKworLShCT09MKWhhc0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyOworLSh2b2lkKWNsb3NlRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXI7CisKK0BlbmQKKyNlbmRpZiAvLyAhVEFSR0VUX09TX1dBVENICisKKyNlbmRpZiAvLyBUQVJH
RVRfT1NfSVBIT05FCisKKworI2lmICFUQVJHRVRfT1NfSVBIT05FCisKK0BpbnRlcmZhY2UgV0tX
ZWJWaWV3IChXS1ByaXZhdGVNYWMpCiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
V0tQYWdlUmVmIF9wYWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3ICBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEzLjQpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9P
TCBfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMikpOwpAQCAtMzY4LDYgKzQ2MSwyNSBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50
ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U0ludGVnZXIgX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQpKTsKIAorLy8gV2hlbiB1c2luZyBfbWluaW11bUxheW91dFdpZHRoLCB0aGUgd2ViIGNv
bnRlbnQgd2lsbCBsYXkgb3V0IHRvIHRoZSBpbnRyaW5zaWMgaGVpZ2h0CisvLyBvZiB0aGUgY29u
dGVudDsgdXNlIHRoaXMgcHJvcGVydHkgdG8gZm9yY2UgaXQgdG8gbGF5IG91dCB0byB0aGUgaGVp
Z2h0IG9mIHRoZSB2aWV3IGluc3RlYWQuCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9z
ZXRTaG91bGRFeHBhbmRDb250ZW50VG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dDopIEJPT0wgX3No
b3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTIpKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0TWlu
aW11bUxheW91dFdpZHRoOikgQ0dGbG9hdCBfbWluaW11bUxheW91dFdpZHRoIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTIpKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0
QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXI6KSBCT09MIF9hbHdheXNTaG93c0hvcml6b250
YWxTY3JvbGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBzZXR0ZXI9X3NldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcjopIEJPT0wg
X2Fsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRVc2VT
eXN0ZW1BcHBlYXJhbmNlOikgQk9PTCBfdXNlU3lzdGVtQXBwZWFyYW5jZSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE0KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRPdmVy
bGF5U2Nyb2xsYmFyU3R5bGU6KSBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUgX292ZXJsYXlTY3Jv
bGxiYXJTdHlsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKK0Bwcm9wZXJ0eSAo
c3Ryb25nLCBub25hdG9taWMsIHNldHRlcj1fc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6KSBO
U1ZpZXcgKl9pbnNwZWN0b3JBdHRhY2htZW50VmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEw
LjEzLjQpKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VGh1bWJuYWlsVmll
dzopIF9XS1RodW1ibmFpbFZpZXcgKl90aHVtYm5haWxWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SWdub3Jlc0Fs
bEV2ZW50czopIEJPT0wgX2lnbm9yZXNBbGxFdmVudHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xMy40KSk7CisKKy8vIERlZmF1bHRzIHRvIFlFUzsgaWYgc2V0IHRvIE5PLCBXZWJLaXQgd2ls
bCBkcmF3IHRoZSBncmV5IHdhc2ggYW5kIGhpZ2hsaWdodHMgaXRzZWxmLgorQHByb3BlcnR5IChu
b25hdG9taWMsIHNldHRlcj1fc2V0VXNlUGxhdGZvcm1GaW5kVUk6KSBCT09MIF91c2VQbGF0Zm9y
bUZpbmRVSSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSk7CisKIC0gKHZvaWQpX3NldFNo
b3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzOihCT09MKXNob3VsZFN1cHByZXNzOwog
LSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5k
bGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAtIChCT09MKV90cnlUb1N3aXBl
V2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25v
cmluZ1Bpbm5lZFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwpAQCAtMzk1
LDEyMCArNTA3LDIwIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRn
ZSkgewogLy8gZG8gc29tZXRoaW5nIGN1c3RvbSwgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGNvbmZv
cm1zIHRvIHRoZSBOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXIgcHJvdG9jb2wu
CiAtIChpZClfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1
bHQ6KF9XS0hpdFRlc3RSZXN1bHQgKiloaXRUZXN0UmVzdWx0IHdpdGhUeXBlOihfV0tJbW1lZGlh
dGVBY3Rpb25UeXBlKXR5cGUgdXNlckRhdGE6KGlkPE5TU2VjdXJlQ29kaW5nPil1c2VyRGF0YTsK
IAotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0TWluaW11bUxheW91dFdpZHRoOikg
Q0dGbG9hdCBfbWluaW11bUxheW91dFdpZHRoIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIp
KTsKLQotLy8gV2hlbiB1c2luZyBfbWluaW11bUxheW91dFdpZHRoLCB0aGUgd2ViIGNvbnRlbnQg
d2lsbCBsYXkgb3V0IHRvIHRoZSBpbnRyaW5zaWMgaGVpZ2h0Ci0vLyBvZiB0aGUgY29udGVudDsg
dXNlIHRoaXMgcHJvcGVydHkgdG8gZm9yY2UgaXQgdG8gbGF5IG91dCB0byB0aGUgaGVpZ2h0IG9m
IHRoZSB2aWV3IGluc3RlYWQuCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTaG91
bGRFeHBhbmRDb250ZW50VG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dDopIEJPT0wgX3Nob3VsZEV4
cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0QWx3YXlzU2hv
d3NIb3Jpem9udGFsU2Nyb2xsZXI6KSBCT09MIF9hbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxl
ciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcjopIEJPT0wgX2Fsd2F5c1No
b3dzVmVydGljYWxTY3JvbGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLQog
LSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJp
bnRJbmZvICopcHJpbnRJbmZvOwogLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlv
bldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGZvckZyYW1lOihfV0tGcmFt
ZUhhbmRsZSAqKWZyYW1lSGFuZGxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpKTsKIAog
Ly8gRklYTUU6IFRoaXMgU1BJIHNob3VsZCBiZWNvbWUgYSBwYXJ0IG9mIHRoZSBXS1VJRGVsZWdh
dGUuIHJkYXI6Ly9wcm9ibGVtLzI2NTYxNTM3CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdy
aXRlLCBzZXR0ZXI9X3NldFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzopIEJPT0wgX3dh
bnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEy
LjMpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgaWQgX21lZGlhUGxheWJhY2tD
b250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykpOworCiAtICh2b2lkKV9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihpZCltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpKTsKIC0gKHZvaWQpX3JlbW92ZU1lZGlhUGxh
eWJhY2tDb250cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7CiAKIC0g
KHZvaWQpX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopdGFyZ2V0V2luZG93IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMpKTsKIAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0
ZSwgc2V0dGVyPV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOikgQk9PTCBfdXNlU3lzdGVtQXBwZWFy
YW5jZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KSBfV0tPdmVybGF5U2Nyb2xsYmFy
U3R5bGUgX292ZXJsYXlTY3JvbGxiYXJTdHlsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
LjQpKTsKLUBwcm9wZXJ0eSAoc3Ryb25nLCBub25hdG9taWMsIHNldHRlcj1fc2V0SW5zcGVjdG9y
QXR0YWNobWVudFZpZXc6KSBOU1ZpZXcgKl9pbnNwZWN0b3JBdHRhY2htZW50VmlldyBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0VGh1bWJuYWlsVmlldzopIF9XS1RodW1ibmFpbFZpZXcgKl90aHVtYm5haWxWaWV3IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHNl
dHRlcj1fc2V0SWdub3Jlc0FsbEV2ZW50czopIEJPT0wgX2lnbm9yZXNBbGxFdmVudHMgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0KLS8vIERlZmF1bHRzIHRvIFlFUzsgaWYgc2V0
IHRvIE5PLCBXZWJLaXQgd2lsbCBkcmF3IHRoZSBncmV5IHdhc2ggYW5kIGhpZ2hsaWdodHMgaXRz
ZWxmLgotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0VXNlUGxhdGZvcm1GaW5kVUk6
KSBCT09MIF91c2VQbGF0Zm9ybUZpbmRVSSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSk7
Ci0KLSNlbmRpZgotCi0tIChXS05hdmlnYXRpb24gKilfcmVsb2FkV2l0aG91dENvbnRlbnRCbG9j
a2VycyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsKLS0gKFdLTmF2
aWdhdGlvbiAqKV9yZWxvYWRFeHBpcmVkT25seSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEz
KSwgaW9zKDExLjApKTsKLQotLSAodm9pZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzOwotLSAodm9p
ZClfa2lsbFdlYkNvbnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZTsKLQotLSAodm9pZClfZ2V0TWFp
blJlc291cmNlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICosIE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7Ci0tICh2b2lkKV9nZXRXZWJBcmNoaXZlRGF0YVdp
dGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXI7Ci0tICh2b2lkKV9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOwotLSAodm9pZClfZ2V0
Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KE5TQXR0cmlidXRlZFN0cmluZyAqLCBOU0RpY3Rpb25hcnk8TlNBdHRyaWJ1dGVkU3RyaW5nRG9j
dW1lbnRBdHRyaWJ1dGVLZXksIGlkPiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotCi0tICh2b2lkKV9nZXRB
cHBsaWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCksIGlvcygxMS4zKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9
X3NldFBhZ2luYXRpb25Nb2RlOikgX1dLUGFnaW5hdGlvbk1vZGUgX3BhZ2luYXRpb25Nb2RlOwot
Ly8gV2hldGhlciB0aGUgY29sdW1uLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9IHByb3BlcnRpZXMgYXJl
IHJlc3BlY3RlZCBpbnN0ZWFkIG9mIHRoZQotLy8gcGFnZS1icmVhay17YmVmb3JlLGFmdGVyfSBw
cm9wZXJ0aWVzLgotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0UGFnaW5hdGlvbkJl
aGF2ZXNMaWtlQ29sdW1uczopIEJPT0wgX3BhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM7Ci0v
LyBTZXQgdG8gMCB0byBoYXZlIHRoZSBwYWdlIGxlbmd0aCBlcXVhbCB0aGUgdmlldyBsZW5ndGgu
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRQYWdlTGVuZ3RoOikgQ0dGbG9hdCBf
cGFnZUxlbmd0aDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEdhcEJldHdlZW5Q
YWdlczopIENHRmxvYXQgX2dhcEJldHdlZW5QYWdlczsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBz
ZXR0ZXI9X3NldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQ6KSBCT09MIF9wYWdpbmF0aW9uTGlu
ZUdyaWRFbmFibGVkOwotQHByb3BlcnR5IChyZWFkb25seSkgTlNVSW50ZWdlciBfcGFnZUNvdW50
OwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3N1cHBvcnRzVGV4dFpv
b207Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUZXh0Wm9vbUZhY3RvcjopIGRv
dWJsZSBfdGV4dFpvb21GYWN0b3I7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRQ
YWdlWm9vbUZhY3RvcjopIGRvdWJsZSBfcGFnZVpvb21GYWN0b3I7Ci0KLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCB3ZWFrLCBzZXR0ZXI9X3NldERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6KSBpZCA8
X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZT4gX2RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMSksIGlvcyg5LjApKTsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCB3ZWFrLCBzZXR0ZXI9X3NldEZpbmREZWxlZ2F0ZTopIGlkIDxfV0tGaW5kRGVsZWdh
dGU+IF9maW5kRGVsZWdhdGU7Ci0tICh2b2lkKV9maW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyBvcHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1h
eENvdW50OwotLSAodm9pZClfY291bnRTdHJpbmdNYXRjaGVzOihOU1N0cmluZyAqKXN0cmluZyBv
cHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENv
dW50OwotLSAodm9pZClfaGlkZUZpbmRVSTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHdlYWss
IHNldHRlcj1fc2V0SW5wdXREZWxlZ2F0ZTopIGlkIDxfV0tJbnB1dERlbGVnYXRlPiBfaW5wdXRE
ZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsKLQotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9X2lzRGlzcGxheWluZ1N0YW5kYWxv
bmVJbWFnZURvY3VtZW50KSBCT09MIF9kaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlRG9jdW1lbnQ7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNEaXNwbGF5aW5nU3Rh
bmRhbG9uZU1lZGlhRG9jdW1lbnQpIEJPT0wgX2Rpc3BsYXlpbmdTdGFuZGFsb25lTWVkaWFEb2N1
bWVudDsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Nyb2xsUGVyZm9ybWFu
Y2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQ6KSBCT09MIF9zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xs
ZWN0aW9uRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjExKSwgaW9zKDkuMCkpOwot
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICpfc2Nyb2xsUGVyZm9ybWFu
Y2VEYXRhIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTEpLCBpb3MoOS4wKSk7Ci0KLS0gKHZv
aWQpX3NhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVt
ICopaXRlbSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjExKSwgaW9zKDkuMCkpOwotCi1AcHJv
cGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJh
Y2ssIHNldHRlcj1fc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOikgQk9PTCBf
YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOwotCi1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgX3dlYlByb2Nlc3NJc1Jlc3BvbnNpdmUgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0
ZXI9X3NldEZ1bGxzY3JlZW5EZWxlZ2F0ZTopIGlkPF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZT4gX2Z1
bGxzY3JlZW5EZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjAp
KTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaXNJbkZ1bGxzY3JlZW4g
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgX1dLTWVkaWFDYXB0dXJlU3RhdGUgX21lZGlhQ2FwdHVyZVN0YXRlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotCi0tICh2b2lkKV9zZXRQYWdl
TXV0ZWQ6KF9XS01lZGlhTXV0ZWRTdGF0ZSltdXRlZFN0YXRlIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMpLCBpb3MoMTEuMCkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9z
ZXRNZWRpYUNhcHR1cmVFbmFibGVkOikgQk9PTCBfbWVkaWFDYXB0dXJlRW5hYmxlZCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjApKTsKLS0gKHZvaWQpX3N0b3BNZWRpYUNh
cHR1cmUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9jYW5Ub2dnbGVQaWN0
dXJlSW5QaWN0dXJlOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9pc1Bp
Y3R1cmVJblBpY3R1cmVBY3RpdmU7Ci0tICh2b2lkKV91cGRhdGVNZWRpYVBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyOwotLSAodm9pZClfdG9nZ2xlUGljdHVyZUluUGljdHVyZTsKLS0gKHZvaWQpX3N0
b3BBbGxNZWRpYVBsYXliYWNrOwotLSAodm9pZClfc3VzcGVuZEFsbE1lZGlhUGxheWJhY2s7Ci0t
ICh2b2lkKV9yZXN1bWVBbGxNZWRpYVBsYXliYWNrOwotLSAodm9pZClfY2xvc2VBbGxNZWRpYVBy
ZXNlbnRhdGlvbnM7Ci0KLS0gKHZvaWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDoo
Q0dSZWN0KXJlY3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0SW5w
dXRDb250ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpLCBpb3MoMTMuMCkpOwotLSAodm9pZClfZm9jdXNUZXh0SW5wdXRDb250ZXh0OihfV0tU
ZXh0SW5wdXRDb250ZXh0ICopdGV4dElucHV0RWxlbWVudCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1
KSwgaW9zKDEzLjApKTsKLQotLSAodm9pZClfdGFrZVBERlNuYXBzaG90V2l0aENvbmZpZ3VyYXRp
b246KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKnBkZlNuYXBzaG90RGF0YSwgTlNFcnJvciAq
ZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiBAZW5kCiAKLSNpZiBUQVJHRVRfT1NfSVBIT05FICYmICFU
QVJHRVRfT1NfV0FUQ0gKLUBpbnRlcmZhY2UgV0tXZWJWaWV3IChGdWxsU2NyZWVuQVBJX1ByaXZh
dGUpCi0tKEJPT0wpaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7Ci0tKHZvaWQpY2xvc2VG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKLUBlbmQKLSNlbmRpZgorI2VuZGlmIC8vICFUQVJH
RVRfT1NfSVBIT05FCiAKLSNpZiBUQVJHRVRfT1NfSVBIT05FCiAKLUBpbnRlcmZhY2UgV0tXZWJW
aWV3ICgpIDxVSVJlc3BvbmRlclN0YW5kYXJkRWRpdEFjdGlvbnM+Ci1AZW5kCi0KLSNlbmRpZiAv
LyBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCmluZGV4IDllNjI1Njk5OWY5YTkzODY5NjZhNzQx
YTZhMDZjZmRiMDhhZmI4MDUuLmM5Yzc1YTMyYWUzZjA4NmJhZGMwOTZiZDU5OWY0Mjg2YjQ1Nzg3
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdUZXN0aW5nLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdUZXN0aW5nLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbXBvcnQgIlVzZXJNZWRpYVBy
b2Nlc3NNYW5hZ2VyLmgiCiAjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJT1MuaCIKICNpbXBv
cnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQg
IldlYlByb2Nlc3NQcm94eS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2lvcy9XS1dlYlZpZXdJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tXZWJWaWV3SU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTIwNWEzZjZmNGY3MjU0MDVhZDVhNTVkNTI0MzAw
YzE2OWFlNDBjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9pb3MvV0tXZWJWaWV3SU9TLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwor
QGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVmlld0ludGVybmFsSU9TKQorCistICh2b2lkKV9rZXli
b2FyZFdpbGxDaGFuZ2VGcmFtZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247CistICh2
b2lkKV9rZXlib2FyZERpZENoYW5nZUZyYW1lOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bjsKKy0gKHZvaWQpX2tleWJvYXJkV2lsbFNob3c6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0
aW9uOworLSAodm9pZClfa2V5Ym9hcmREaWRTaG93OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbjsKKy0gKHZvaWQpX2tleWJvYXJkV2lsbEhpZGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uOworLSAodm9pZClfd2luZG93RGlkUm90YXRlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbjsKKy0gKHZvaWQpX2NvbnRlbnRTaXplQ2F0ZWdvcnlEaWRDaGFuZ2U6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uOworLSAodm9pZClfYWNjZXNzaWJpbGl0eVNldHRpbmdzRGlk
Q2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKKworLSAodm9pZClfZnJhbWVP
ckJvdW5kc0NoYW5nZWQ7CistIChCT09MKXVzZXNTdGFuZGFyZENvbnRlbnRWaWV3OworCistICh2
b2lkKV9wcm9jZXNzRGlkRXhpdDsKKy0gKHZvaWQpX3Byb2Nlc3NXaWxsU3dhcDsKKy0gKHZvaWQp
X2RpZFJlbGF1bmNoUHJvY2VzczsKKworLSAoVUlWaWV3ICopX2N1cnJlbnRDb250ZW50VmlldzsK
KworLSAodm9pZClfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTsKKy0gKHZvaWQpX2RpZENvbW1p
dExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpbGF5
ZXJUcmVlVHJhbnNhY3Rpb247CistICh2b2lkKV9sYXllclRyZWVDb21taXRDb21wbGV0ZTsKKwor
LSAodm9pZClfY291bGROb3RSZXN0b3JlUGFnZVN0YXRlOworLSAodm9pZClfcmVzdG9yZVBhZ2VT
Y3JvbGxQb3NpdGlvbjooT3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4pc2Nyb2xsUG9zaXRp
b24gc2Nyb2xsT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KXNjcm9sbE9yaWdpbiBwcmV2aW91
c09ic2N1cmVkSW5zZXQ6KFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50KWluc2V0cyBzY2FsZTooZG91
YmxlKXNjYWxlOworLSAodm9pZClfcmVzdG9yZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjoo
T3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4pY2VudGVyIHNjYWxlOihkb3VibGUpc2NhbGU7
IC8vIEZJWE1FOiBuZWVkcyBzY3JvbGwgb3JpZ2luPworCistIChSZWZQdHI8V2ViS2l0OjpWaWV3
U25hcHNob3Q+KV90YWtlVmlld1NuYXBzaG90OworCistICh2b2lkKV9zY3JvbGxUb0NvbnRlbnRT
Y3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6RmxvYXRQb2ludClzY3JvbGxQb3NpdGlvbiBzY3JvbGxP
cmlnaW46KFdlYkNvcmU6OkludFBvaW50KXNjcm9sbE9yaWdpbjsKKy0gKEJPT0wpX3Njcm9sbFRv
UmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgb3JpZ2luOihXZWJDb3JlOjpGbG9h
dFBvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxE
aXN0YW5jZTsKKworLSAoZG91YmxlKV9pbml0aWFsU2NhbGVGYWN0b3I7CistIChkb3VibGUpX2Nv
bnRlbnRab29tU2NhbGU7CisKKy0gKGRvdWJsZSlfdGFyZ2V0Q29udGVudFpvb21TY2FsZUZvclJl
Y3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpdGFyZ2V0UmVjdCBjdXJyZW50U2NhbGU6KGRv
dWJsZSljdXJyZW50U2NhbGUgZml0RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmlt
dW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVt
U2NhbGU7CistICh2b2lkKV96b29tVG9Gb2N1c1JlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpZm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpc2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyBpbnNpZGVGaXhlZDooQk9P
TClpbnNpZGVGaXhlZCBmb250U2l6ZTooZmxvYXQpZm9udFNpemUgbWluaW11bVNjYWxlOihkb3Vi
bGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBhbGxvd1Nj
YWxpbmc6KEJPT0wpYWxsb3dTY2FsaW5nIGZvcmNlU2Nyb2xsOihCT09MKWZvcmNlU2Nyb2xsOwor
LSAoQk9PTClfem9vbVRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgd2l0aE9y
aWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gZml0RW50aXJlUmVjdDooQk9PTClmaXRF
bnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6
KGRvdWJsZSltYXhpbXVtU2NhbGUgbWluaW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVt
U2Nyb2xsRGlzdGFuY2U7CistICh2b2lkKV96b29tT3V0V2l0aE9yaWdpbjooV2ViQ29yZTo6Rmxv
YXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQ7CistICh2b2lkKV96b29tVG9J
bml0aWFsU2NhbGVXaXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRl
ZDooQk9PTClhbmltYXRlZDsKKy0gKHZvaWQpX2RpZEZpbmlzaFNjcm9sbGluZzsKKworLSAodm9p
ZClfc2V0SGFzQ3VzdG9tQ29udGVudFZpZXc6KEJPT0wpaGFzQ3VzdG9tQ29udGVudFZpZXcgbG9h
ZGVkTUlNRVR5cGU6KGNvbnN0IFdURjo6U3RyaW5nJiltaW1lVHlwZTsKKy0gKHZvaWQpX2RpZEZp
bmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lOihjb25zdCBXVEY6OlN0cmluZyYpc3VnZ2VzdGVkRmlsZW5hbWUgZGF0YTooTlNEYXRhICop
ZGF0YTsKKworLSAodm9pZClfd2lsbEludm9rZVVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2s7
CistICh2b2lkKV9kaWRJbnZva2VVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrOworCistICh2
b2lkKV9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZTsKKworLSAodm9pZClfZGlkQ29t
cGxldGVBbmltYXRlZFJlc2l6ZTsKKworLSAodm9pZClfZGlkU3RhcnRQcm92aXNpb25hbExvYWRG
b3JNYWluRnJhbWU7CistICh2b2lkKV9kaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lOworLSAodm9p
ZClfZGlkRmFpbExvYWRGb3JNYWluRnJhbWU7CistICh2b2lkKV9kaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yTWFpbkZyYW1lOihXZWJLaXQ6OlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKW5h
dmlnYXRpb25UeXBlOworCistIChCT09MKV9pc1Nob3dpbmdWaWRlb1BpY3R1cmVJblBpY3R1cmU7
CistIChCT09MKV9tYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZTsKKwor
LSAodm9pZClfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmQ7CisKKy0gKHZvaWQpX3ZpZGVvQ29u
dHJvbHNNYW5hZ2VyRGlkQ2hhbmdlOworCistICh2b2lkKV9uYXZpZ2F0aW9uR2VzdHVyZURpZEJl
Z2luOworLSAodm9pZClfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQ7CistIChCT09MKV9pc05hdmln
YXRpb25Td2lwZUdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopcmVjb2du
aXplcjsKKworLSAodm9pZClfc2hvd1Bhc3N3b3JkVmlld1dpdGhEb2N1bWVudE5hbWU6KE5TU3Ry
aW5nICopZG9jdW1lbnROYW1lIHBhc3N3b3JkSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcgKikp
cGFzc3dvcmRIYW5kbGVyOworLSAodm9pZClfaGlkZVBhc3N3b3JkVmlldzsKKworLSAodm9pZClf
YWRkU2hvcnRjdXQ6KGlkKXNlbmRlcjsKKy0gKHZvaWQpX2RlZmluZTooaWQpc2VuZGVyOworLSAo
dm9pZClfbG9va3VwOihpZClzZW5kZXI7CistICh2b2lkKV9zaGFyZTooaWQpc2VuZGVyOworLSAo
dm9pZClfc2hvd1RleHRTdHlsZU9wdGlvbnM6KGlkKXNlbmRlcjsKKy0gKHZvaWQpX3Byb21wdEZv
clJlcGxhY2U6KGlkKXNlbmRlcjsKKy0gKHZvaWQpX3RyYW5zbGl0ZXJhdGVDaGluZXNlOihpZClz
ZW5kZXI7CistICh2b2lkKXJlcGxhY2U6KGlkKXNlbmRlcjsKKworLSAodm9pZClfbmV4dEFjY2Vz
c29yeVRhYjooaWQpc2VuZGVyOworLSAodm9pZClfcHJldmlvdXNBY2Nlc3NvcnlUYWI6KGlkKXNl
bmRlcjsKKworLSAodm9pZClfaW5jcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKKy0gKHZv
aWQpX2RlY3JlbWVudEZvY3VzUHJlc2VydmF0aW9uQ291bnQ7CistICh2b2lkKV9yZXNldEZvY3Vz
UHJlc2VydmF0aW9uQ291bnQ7CisKKy0gKHZvaWQpX3NldE9wYXF1ZUludGVybmFsOihCT09MKW9w
YXF1ZTsKKy0gKE5TU3RyaW5nICopX2NvbnRlbnRTaXplQ2F0ZWdvcnk7CistICh2b2lkKV9kaXNw
YXRjaFNldERldmljZU9yaWVudGF0aW9uOihpbnQzMl90KWRldmljZU9yaWVudGF0aW9uOworLSAo
V2ViQ29yZTo6RmxvYXRTaXplKWFjdGl2ZVZpZXdMYXlvdXRTaXplOihjb25zdCBDR1JlY3QmKWJv
dW5kczsKKy0gKHZvaWQpX3VwZGF0ZVNjcm9sbFZpZXdJbnNldEFkanVzdG1lbnRCZWhhdmlvcjsK
KworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1Bhc3N3b3JkVmlldyAqX3Bhc3N3
b3JkVmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3Q29udGVu
dFByb3ZpZGVyUmVnaXN0cnkgKl9jb250ZW50UHJvdmlkZXJSZWdpc3RyeTsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgV0tTZWxlY3Rpb25HcmFudWxhcml0eSBfc2VsZWN0aW9uR3Jh
bnVsYXJpdHk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaXNCYWNr
Z3JvdW5kOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9hbGxvd3NEb3Vi
bGVUYXBHZXN0dXJlczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc3R5
bHVzVGFwR2VzdHVyZVNob3VsZENyZWF0ZUVkaXRhYmxlSW1hZ2U7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhdmVTZXRPYnNjdXJlZEluc2V0czsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgVUlFZGdlSW5zZXRzIF9jb21wdXRlZE9ic2N1cmVkSW5zZXQ7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJRWRnZUluc2V0cyBfY29tcHV0ZWRV
bm9ic2N1cmVkU2FmZUFyZWFJbnNldDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Z2V0dGVyPV9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZSkgQk9PTCBfcmV0YWluaW5nQWN0
aXZlRm9jdXNlZFN0YXRlOworCistIChCT09MKV9lZmZlY3RpdmVBcHBlYXJhbmNlSXNEYXJrOwor
LSAoQk9PTClfZWZmZWN0aXZlVXNlckludGVyZmFjZUxldmVsSXNFbGV2YXRlZDsKKworQGVuZAor
CitpbnQzMl90IGRldmljZU9yaWVudGF0aW9uKCk7CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1Nf
RkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dl
YlZpZXdJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lP
Uy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44YzQxY2FmMDY2OWQwMDFlYzdmZTYwYWE4MTcwMjIyYmI0N2IzMGJj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dl
YlZpZXdJT1MubW0KQEAgLTAsMCArMSwzMDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5oIgorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKworI2ltcG9ydCAiTmF2aWdhdGlvblN0YXRlLmgiCisjaW1wb3J0ICJSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGEuaCIKKyNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkuaCIKKyNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIKKyNpbXBvcnQgIlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgi
CisjaW1wb3J0ICJXS0JhY2tGb3J3YXJkTGlzdEl0ZW1JbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tD
b250ZW50Vmlldy5oIgorI2ltcG9ydCAiV0tQYXNzd29yZFZpZXcuaCIKKyNpbXBvcnQgIldLU2Fm
ZUJyb3dzaW5nV2FybmluZy5oIgorI2ltcG9ydCAiV0tTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJX
S1VJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlci5oIgorI2ltcG9ydCAi
V0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKKyNpbXBvcnQgIldLV2ViVmlld1By
aXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmgiCisjaW1w
b3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2lt
cG9ydCAiX1dLQWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIgorI2ltcG9ydCA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2ltcG9ydCA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvTG9jYWxDdXJyZW50VHJhaXRDb2xsZWN0aW9uLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6
Q29yZVNQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNlc1NQSS5oPgor
CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorI2ltcG9ydCAiV0tEYXRhRGV0ZWN0b3JUeXBl
c0ludGVybmFsLmgiCisjZW5kaWYKKworI2RlZmluZSBGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRF
TlRWSUVXKF9hY3Rpb24pIFwKKy0gKHZvaWQpX2FjdGlvbjooaWQpc2VuZGVyIFwKK3sgXAorICAg
IGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KSBcCisgICAgICAgIFtfY29udGVudFZp
ZXcgX2FjdGlvbiAjIyBGb3JXZWJWaWV3OnNlbmRlcl07IFwKK30KKworI2RlZmluZSBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKC4uLikgUkVMRUFTRV9MT0dfSUYoX3BhZ2UgJiYgX3BhZ2UtPmlzQWx3
YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBWaWV3U3RhdGUsIF9fVkFfQVJHU19fKQorCitzdGF0aWMg
Y29uc3QgU2Vjb25kcyBkZWxheUJlZm9yZU5vVmlzaWJsZUNvbnRlbnRzUmVjdHNMb2dnaW5nID0g
MV9zOworc3RhdGljIGNvbnN0IFNlY29uZHMgZGVsYXlCZWZvcmVOb0NvbW1pdHNMb2dnaW5nID0g
NV9zOworCitzdGF0aWMgaW50MzJfdCBkZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNlT3Jp
ZW50YXRpb24oVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBzd2l0
Y2ggKG9yaWVudGF0aW9uKSB7CisgICAgY2FzZSBVSUludGVyZmFjZU9yaWVudGF0aW9uVW5rbm93
bjoKKyAgICBjYXNlIFVJSW50ZXJmYWNlT3JpZW50YXRpb25Qb3J0cmFpdDoKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgY2FzZSBVSUludGVyZmFjZU9yaWVudGF0aW9uUG9ydHJhaXRVcHNpZGVEb3du
OgorICAgICAgICByZXR1cm4gMTgwOworICAgIGNhc2UgVUlJbnRlcmZhY2VPcmllbnRhdGlvbkxh
bmRzY2FwZUxlZnQ6CisgICAgICAgIHJldHVybiAtOTA7CisgICAgY2FzZSBVSUludGVyZmFjZU9y
aWVudGF0aW9uTGFuZHNjYXBlUmlnaHQ6CisgICAgICAgIHJldHVybiA5MDsKKyAgICB9Cit9CisK
K2ludDMyX3QgZGV2aWNlT3JpZW50YXRpb24oKQoreworQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfQkVHSU4KKyAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9y
aWVudGF0aW9uKFtbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gc3RhdHVzQmFyT3Jp
ZW50YXRpb25dKTsKK0FMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorfQorCitAaW50
ZXJmYWNlIFVJVmlldyAoVUlWaWV3SW50ZXJuYWwpCistIChVSVZpZXdDb250cm9sbGVyICopX3Zp
ZXdDb250cm9sbGVyRm9yQW5jZXN0b3I7CitAZW5kCisKK0BpbnRlcmZhY2UgVUlXaW5kb3cgKFVJ
V2luZG93SW50ZXJuYWwpCistIChCT09MKV9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3M7CitAZW5k
CisKK0BpbnRlcmZhY2UgVUlWaWV3Q29udHJvbGxlciAoVUlWaWV3Q29udHJvbGxlckludGVybmFs
KQorLSAoVUlWaWV3Q29udHJvbGxlciAqKV9yb290QW5jZXN0b3JWaWV3Q29udHJvbGxlcjsKKy0g
KFVJVmlld0NvbnRyb2xsZXIgKilfdmlld0NvbnRyb2xsZXJGb3JTdXBwb3J0ZWRJbnRlcmZhY2VP
cmllbnRhdGlvbnM7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLVmlld0lu
dGVybmFsSU9TKQorCistICh2b2lkKXNldEZyYW1lOihDR1JlY3QpZnJhbWUKK3sKKyAgICBDR1Jl
Y3Qgb2xkRnJhbWUgPSBzZWxmLmZyYW1lOworICAgIFtzdXBlciBzZXRGcmFtZTpmcmFtZV07CisK
KyAgICBpZiAoIUNHU2l6ZUVxdWFsVG9TaXplKG9sZEZyYW1lLnNpemUsIGZyYW1lLnNpemUpKQor
ICAgICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOworfQorCistICh2b2lkKXNldEJv
dW5kczooQ0dSZWN0KWJvdW5kcworeworICAgIENHUmVjdCBvbGRCb3VuZHMgPSBzZWxmLmJvdW5k
czsKKyAgICBbc3VwZXIgc2V0Qm91bmRzOmJvdW5kc107CisgICAgW19jdXN0b21Db250ZW50Rml4
ZWRPdmVybGF5VmlldyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CisKKyAgICBpZiAoIUNHU2l6ZUVx
dWFsVG9TaXplKG9sZEJvdW5kcy5zaXplLCBib3VuZHMuc2l6ZSkpCisgICAgICAgIFtzZWxmIF9m
cmFtZU9yQm91bmRzQ2hhbmdlZF07Cit9CisKKy0gKHZvaWQpbGF5b3V0U3Vidmlld3MKK3sKKyAg
ICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2VsZi5ib3VuZHNdOworICAgIFtzdXBl
ciBsYXlvdXRTdWJ2aWV3c107CisgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKK30K
KworI3ByYWdtYSBtYXJrIC0gaU9TIGltcGxlbWVudGF0aW9uIG1ldGhvZHMKKworLSAoQk9PTClf
aXNTaG93aW5nVmlkZW9QaWN0dXJlSW5QaWN0dXJlCit7CisjaWYgIUhBVkUoQVZLSVQpCisgICAg
cmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBpZiAoIV9wYWdlIHx8ICFfcGFnZS0+dmlkZW9GdWxs
c2NyZWVuTWFuYWdlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gX3Bh
Z2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKS0+aGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKTsKKyNlbmRp
ZgorfQorCistIChCT09MKV9tYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVy
ZQoreworI2lmICFIQVZFKEFWS0lUKQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgaWYg
KCFfcGFnZSB8fCAhX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkt
Pm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCk7CisjZW5kaWYKK30K
KworLSAodm9pZClfaW5jcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudAoreworICAgICsrX2Zv
Y3VzUHJlc2VydmF0aW9uQ291bnQ7Cit9CisKKy0gKHZvaWQpX2RlY3JlbWVudEZvY3VzUHJlc2Vy
dmF0aW9uQ291bnQKK3sKKyAgICBpZiAoX2ZvY3VzUHJlc2VydmF0aW9uQ291bnQpCisgICAgICAg
IC0tX2ZvY3VzUHJlc2VydmF0aW9uQ291bnQ7Cit9CisKKy0gKHZvaWQpX3Jlc2V0Rm9jdXNQcmVz
ZXJ2YXRpb25Db3VudAoreworICAgIF9mb2N1c1ByZXNlcnZhdGlvbkNvdW50ID0gMDsKK30KKwor
LSAoQk9PTClfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGUKK3sKKyAgICAvLyBGb2N1cyBw
cmVzZXJ2YXRpb24gY291bnQgZnVsZmlsbHMgdGhlIHNhbWUgcm9sZSBhcyBhY3RpdmUgZm9jdXMg
c3RhdGUgY291bnQuCisgICAgLy8gSG93ZXZlciwgdW5saWtlIGFjdGl2ZSBmb2N1cyBzdGF0ZSwg
aXQgbWF5IGJlIHJlc2V0IHRvIDAgd2l0aG91dCBpbXBhY3RpbmcgdGhlCisgICAgLy8gYmVoYXZp
b3Igb2YgLV9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGUsIGFuZCBpdCdzIGhhcm1sZXNzIHRvIGlu
dm9rZQorICAgIC8vIC1fZGVjcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudCBhZnRlciByZXNl
dHRpbmcgdGhlIGNvdW50IHRvIDAuCisgICAgcmV0dXJuIF9mb2N1c1ByZXNlcnZhdGlvbkNvdW50
IHx8IF9hY3RpdmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKK30KKworLSAoQk9PTClfZWZmZWN0
aXZlQXBwZWFyYW5jZUlzRGFyaworeworICAgIHJldHVybiBzZWxmLnRyYWl0Q29sbGVjdGlvbi51
c2VySW50ZXJmYWNlU3R5bGUgPT0gVUlVc2VySW50ZXJmYWNlU3R5bGVEYXJrOworfQorCistIChC
T09MKV9lZmZlY3RpdmVVc2VySW50ZXJmYWNlTGV2ZWxJc0VsZXZhdGVkCit7CisjaWYgSEFWRShP
U19EQVJLX01PREVfU1VQUE9SVCkgJiYgIVBMQVRGT1JNKFdBVENIT1MpCisgICAgcmV0dXJuIHNl
bGYudHJhaXRDb2xsZWN0aW9uLnVzZXJJbnRlcmZhY2VMZXZlbCA9PSBVSVVzZXJJbnRlcmZhY2VM
ZXZlbEVsZXZhdGVkOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKK30KKworLSAodm9p
ZClfcG9wdWxhdGVBcmNoaXZlZFN1YnZpZXdzOihOU011dGFibGVTZXQgKillbmNvZGVkVmlld3MK
K3sKKyAgICBbc3VwZXIgX3BvcHVsYXRlQXJjaGl2ZWRTdWJ2aWV3czplbmNvZGVkVmlld3NdOwor
CisgICAgaWYgKF9zY3JvbGxWaWV3KQorICAgICAgICBbZW5jb2RlZFZpZXdzIHJlbW92ZU9iamVj
dDpfc2Nyb2xsVmlldy5nZXQoKV07CisgICAgaWYgKF9jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5
VmlldykKKyAgICAgICAgW2VuY29kZWRWaWV3cyByZW1vdmVPYmplY3Q6X2N1c3RvbUNvbnRlbnRG
aXhlZE92ZXJsYXlWaWV3LmdldCgpXTsKK30KKworLSAoQk9PTClfaXNCYWNrZ3JvdW5kCit7Cisg
ICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10gJiYgW19jdXN0b21Db250ZW50
VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9pc0JhY2tncm91bmQpXSkKKyAg
ICAgICAgcmV0dXJuIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2lzQmFja2dyb3VuZF07CisgICAg
cmV0dXJuIFtfY29udGVudFZpZXcgaXNCYWNrZ3JvdW5kXTsKK30KKworQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KKy0gKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKWJy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBicm93
c2luZ0NvbnRleHRDb250cm9sbGVyXTsKK30KK0FMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0VORAorCistIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCit7CisgICAgVUlWaWV3ICpjdXJy
ZW50Q29udGVudFZpZXcgPSBzZWxmLl9jdXJyZW50Q29udGVudFZpZXc7CisgICAgaWYgKGN1cnJl
bnRDb250ZW50VmlldyA9PSBfY29udGVudFZpZXcgJiYgW19jb250ZW50VmlldyBzdXBlcnZpZXdd
KQorICAgICAgICByZXR1cm4gW19jb250ZW50VmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlckZvcldl
YlZpZXddIHx8IFtzdXBlciBiZWNvbWVGaXJzdFJlc3BvbmRlcl07CisKKyAgICByZXR1cm4gW2N1
cnJlbnRDb250ZW50VmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl0gfHwgW3N1cGVyIGJlY29tZUZp
cnN0UmVzcG9uZGVyXTsKK30KKworLSAoQk9PTCljYW5CZWNvbWVGaXJzdFJlc3BvbmRlcgorewor
ICAgIGlmIChzZWxmLl9jdXJyZW50Q29udGVudFZpZXcgPT0gX2NvbnRlbnRWaWV3KQorICAgICAg
ICByZXR1cm4gW19jb250ZW50VmlldyBjYW5CZWNvbWVGaXJzdFJlc3BvbmRlckZvcldlYlZpZXdd
OworCisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgor
eworICAgIGlmIChbX2NvbnRlbnRWaWV3IGlzRmlyc3RSZXNwb25kZXJdKQorICAgICAgICByZXR1
cm4gW19jb250ZW50VmlldyByZXNpZ25GaXJzdFJlc3BvbmRlckZvcldlYlZpZXddOworCisgICAg
cmV0dXJuIFtzdXBlciByZXNpZ25GaXJzdFJlc3BvbmRlcl07Cit9CisKK0ZPUl9FQUNIX1dLQ09O
VEVOVFZJRVdfQUNUSU9OKEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcpCisKKy0gKEJP
T0wpY2FuUGVyZm9ybUFjdGlvbjooU0VMKWFjdGlvbiB3aXRoU2VuZGVyOihpZClzZW5kZXIKK3sK
KyNkZWZpbmUgRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcoX2FjdGlv
bikgXAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9hY3Rpb246KSkgXAorICAgICAgICBy
ZXR1cm4gc2VsZi51c2VzU3RhbmRhcmRDb250ZW50VmlldyAmJiBbX2NvbnRlbnRWaWV3IGNhblBl
cmZvcm1BY3Rpb25Gb3JXZWJWaWV3OmFjdGlvbiB3aXRoU2VuZGVyOnNlbmRlcl07CisKKyAgICBG
T1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0NBTlBFUkZPUk1BQ1RJT05fVE9f
V0tDT05URU5UVklFVykKKyAgICBGT1JfRUFDSF9QUklWQVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9O
KEZPUldBUkRfQ0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXKQorICAgIEZPUldBUkRf
Q0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9zZXRUZXh0Q29sb3I6c2VuZGVyKQor
ICAgIEZPUldBUkRfQ0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9zZXRGb250U2l6
ZTpzZW5kZXIpCisgICAgRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVco
X3NldEZvbnQ6c2VuZGVyKQorCisjdW5kZWYgRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9OX1RPX1dL
Q09OVEVOVFZJRVcKKworICAgIHJldHVybiBbc3VwZXIgY2FuUGVyZm9ybUFjdGlvbjphY3Rpb24g
d2l0aFNlbmRlcjpzZW5kZXJdOworfQorCistIChpZCl0YXJnZXRGb3JBY3Rpb246KFNFTClhY3Rp
b24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCit7CisjZGVmaW5lIEZPUldBUkRfVEFSR0VURk9SQUNU
SU9OX1RPX1dLQ09OVEVOVFZJRVcoX2FjdGlvbikgXAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKF9hY3Rpb246KSAmJiBzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KSBcCisgICAgICAg
IHJldHVybiBbX2NvbnRlbnRWaWV3IHRhcmdldEZvckFjdGlvbkZvcldlYlZpZXc6YWN0aW9uIHdp
dGhTZW5kZXI6c2VuZGVyXTsKKworICAgIEZPUl9FQUNIX1dLQ09OVEVOVFZJRVdfQUNUSU9OKEZP
UldBUkRfVEFSR0VURk9SQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcpCisgICAgRk9SX0VBQ0hfUFJJ
VkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NP
TlRFTlRWSUVXKQorICAgIEZPUldBUkRfVEFSR0VURk9SQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVco
X3NldFRleHRDb2xvcjpzZW5kZXIpCisgICAgRk9SV0FSRF9UQVJHRVRGT1JBQ1RJT05fVE9fV0tD
T05URU5UVklFVyhfc2V0Rm9udFNpemU6c2VuZGVyKQorICAgIEZPUldBUkRfVEFSR0VURk9SQUNU
SU9OX1RPX1dLQ09OVEVOVFZJRVcoX3NldEZvbnQ6c2VuZGVyKQorCisjdW5kZWYgRk9SV0FSRF9U
QVJHRVRGT1JBQ1RJT05fVE9fV0tDT05URU5UVklFVworCisgICAgcmV0dXJuIFtzdXBlciB0YXJn
ZXRGb3JBY3Rpb246YWN0aW9uIHdpdGhTZW5kZXI6c2VuZGVyXTsKK30KKworLSAodm9pZCl3aWxs
RmluaXNoSWdub3JpbmdDYWxsb3V0QmFyRmFkZUFmdGVyUGVyZm9ybWluZ0FjdGlvbgoreworICAg
IFtfY29udGVudFZpZXcgd2lsbEZpbmlzaElnbm9yaW5nQ2FsbG91dEJhckZhZGVBZnRlclBlcmZv
cm1pbmdBY3Rpb25dOworfQorCitzdGF0aWMgaW5saW5lIENHRmxvYXQgZmxvb3JUb0RldmljZVBp
eGVsKENHRmxvYXQgaW5wdXQsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQoreworICAgIHJldHVy
biBDR0Zsb29yKGlucHV0ICogZGV2aWNlU2NhbGVGYWN0b3IpIC8gZGV2aWNlU2NhbGVGYWN0b3I7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwb2ludHNFcXVhbEluRGV2aWNlUGl4ZWxzKENHUG9p
bnQgYSwgQ0dQb2ludCBiLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICByZXR1cm4g
ZmFicyhhLnggKiBkZXZpY2VTY2FsZUZhY3RvciAtIGIueCAqIGRldmljZVNjYWxlRmFjdG9yKSA8
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkKKyAgICAgICAgJiYgZmFicyhh
LnkgKiBkZXZpY2VTY2FsZUZhY3RvciAtIGIueSAqIGRldmljZVNjYWxlRmFjdG9yKSA8IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCk7Cit9CisKK3N0YXRpYyBDR1NpemUgcm91
bmRTY3JvbGxWaWV3Q29udGVudFNpemUoY29uc3QgV2ViS2l0OjpXZWJQYWdlUHJveHkmIHBhZ2Us
IENHU2l6ZSBjb250ZW50U2l6ZSkKK3sKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHBh
Z2UuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICByZXR1cm4gQ0dTaXplTWFrZShmbG9vclRvRGV2
aWNlUGl4ZWwoY29udGVudFNpemUud2lkdGgsIGRldmljZVNjYWxlRmFjdG9yKSwgZmxvb3JUb0Rl
dmljZVBpeGVsKGNvbnRlbnRTaXplLmhlaWdodCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKK30KKwor
LSAoVUlWaWV3ICopX2N1cnJlbnRDb250ZW50VmlldworeworICAgIHJldHVybiBfY3VzdG9tQ29u
dGVudFZpZXcgPyBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9jb250ZW50Vmlld10gOiBfY29udGVu
dFZpZXcuZ2V0KCk7Cit9CisKKy0gKFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5ICop
X2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Cit7CisgICAgcmV0dXJuIFtfY29uZmlndXJhdGlvbiBf
Y29udGVudFByb3ZpZGVyUmVnaXN0cnldOworfQorCistIChXS1NlbGVjdGlvbkdyYW51bGFyaXR5
KV9zZWxlY3Rpb25HcmFudWxhcml0eQoreworICAgIHJldHVybiBbX2NvbmZpZ3VyYXRpb24gc2Vs
ZWN0aW9uR3JhbnVsYXJpdHldOworfQorCistICh2b2lkKV9zZXRIYXNDdXN0b21Db250ZW50Vmll
dzooQk9PTClwYWdlSGFzQ3VzdG9tQ29udGVudFZpZXcgbG9hZGVkTUlNRVR5cGU6KGNvbnN0IFdU
Rjo6U3RyaW5nJiltaW1lVHlwZQoreworICAgIGlmIChwYWdlSGFzQ3VzdG9tQ29udGVudFZpZXcp
IHsKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAg
ICAgICAgW19jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKKworICAgICAgICBDbGFzcyByZXByZXNlbnRhdGlvbkNsYXNzID0gW1tfY29uZmlndXJhdGlv
biBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldIHByb3ZpZGVyRm9yTUlNRVR5cGU6bWltZVR5cGVd
OworICAgICAgICBBU1NFUlQocmVwcmVzZW50YXRpb25DbGFzcyk7CisgICAgICAgIF9jdXN0b21D
b250ZW50VmlldyA9IGFkb3B0TlMoW1tyZXByZXNlbnRhdGlvbkNsYXNzIGFsbG9jXSB3ZWJfaW5p
dFdpdGhGcmFtZTpzZWxmLmJvdW5kcyB3ZWJWaWV3OnNlbGYgbWltZVR5cGU6bWltZVR5cGVdKTsK
KyAgICAgICAgX2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3ID0gYWRvcHROUyhbW1VJVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzZWxmLmJvdW5kc10pOworICAgICAgICBbX2N1c3RvbUNv
bnRlbnRGaXhlZE92ZXJsYXlWaWV3IGxheWVyXS5uYW1lID0gQCJDdXN0b21Db250ZW50Rml4ZWRP
dmVybGF5IjsKKyAgICAgICAgW19jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5VmlldyBzZXRVc2Vy
SW50ZXJhY3Rpb25FbmFibGVkOk5PXTsKKworICAgICAgICBbW19jb250ZW50VmlldyB1bnNjYWxl
ZFZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgICAgICBbX2NvbnRlbnRWaWV3IHJlbW92
ZUZyb21TdXBlcnZpZXddOworICAgICAgICBbX3Njcm9sbFZpZXcgYWRkU3VidmlldzpfY3VzdG9t
Q29udGVudFZpZXcuZ2V0KCldOworICAgICAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9jdXN0b21Db250
ZW50Rml4ZWRPdmVybGF5Vmlldy5nZXQoKV07CisKKyAgICAgICAgW19jdXN0b21Db250ZW50Vmll
dyB3ZWJfc2V0TWluaW11bVNpemU6c2VsZi5ib3VuZHMuc2l6ZV07CisgICAgICAgIFtfY3VzdG9t
Q29udGVudFZpZXcgd2ViX3NldEZpeGVkT3ZlcmxheVZpZXc6X2N1c3RvbUNvbnRlbnRGaXhlZE92
ZXJsYXlWaWV3LmdldCgpXTsKKworICAgICAgICBfc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvciA9
IFdlYkNvcmU6OkNvbG9yKCk7CisgICAgICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0
OltzZWxmIF9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9sbFZpZXddXTsKKyAgICAgICAgW19z
Y3JvbGxWaWV3IF9zZXRTY3JvbGxFbmFibGVkSW50ZXJuYWw6WUVTXTsKKworICAgICAgICBbc2Vs
ZiBfc2V0QXZvaWRzVW5zYWZlQXJlYTpOT107CisgICAgfSBlbHNlIGlmIChfY3VzdG9tQ29udGVu
dFZpZXcpIHsKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKKyAgICAgICAgX2N1c3RvbUNvbnRlbnRWaWV3ID0gbnVsbHB0cjsKKworICAgICAgICBbX2N1
c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgICAg
ICBfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcgPSBudWxscHRyOworCisgICAgICAgIFtf
c2Nyb2xsVmlldyBhZGRTdWJ2aWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgICAgIFtfc2Ny
b2xsVmlldyBhZGRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5zY2FsZWRWaWV3XV07CisgICAgICAg
IFtfc2Nyb2xsVmlldyBzZXRDb250ZW50U2l6ZTpyb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6ZSgq
X3BhZ2UsIFtfY29udGVudFZpZXcgZnJhbWVdLnNpemUpXTsKKworICAgICAgICBbX2N1c3RvbUNv
bnRlbnRGaXhlZE92ZXJsYXlWaWV3IHNldEZyYW1lOnNlbGYuYm91bmRzXTsKKyAgICAgICAgW3Nl
bGYgYWRkU3VidmlldzpfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcuZ2V0KCldOworICAg
IH0KKworICAgIGlmIChzZWxmLmlzRmlyc3RSZXNwb25kZXIpIHsKKyAgICAgICAgVUlWaWV3ICpj
dXJyZW50Q29udGVudFZpZXcgPSBzZWxmLl9jdXJyZW50Q29udGVudFZpZXc7CisgICAgICAgIGlm
IChjdXJyZW50Q29udGVudFZpZXcgPT0gX2NvbnRlbnRWaWV3ID8gW19jb250ZW50VmlldyBjYW5C
ZWNvbWVGaXJzdFJlc3BvbmRlckZvcldlYlZpZXddIDogY3VycmVudENvbnRlbnRWaWV3LmNhbkJl
Y29tZUZpcnN0UmVzcG9uZGVyKQorICAgICAgICAgICAgW2N1cnJlbnRDb250ZW50VmlldyBiZWNv
bWVGaXJzdFJlc3BvbmRlcl07CisgICAgfQorfQorCistICh2b2lkKV9kaWRGaW5pc2hMb2FkaW5n
RGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooY29uc3Qg
U3RyaW5nJilzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhOihOU0RhdGEgKilkYXRhCit7CisgICAgQVNT
RVJUKF9jdXN0b21Db250ZW50Vmlldyk7CisgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfc2V0
Q29udGVudFByb3ZpZGVyRGF0YTpkYXRhIHN1Z2dlc3RlZEZpbGVuYW1lOnN1Z2dlc3RlZEZpbGVu
YW1lXTsKKworICAgIC8vIEZJWE1FOiBJdCBtYXkgbWFrZSBtb3JlIHNlbnNlIGZvciBjdXN0b20g
Y29udGVudCBwcm92aWRlcnMgdG8gaW52b2tlIHRoaXMgd2hlbiB0aGV5J3JlIHJlYWR5LAorICAg
IC8vIGJlY2F1c2UgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBhbGwgY3VzdG9tIGNvbnRlbnQg
cHJvdmlkZXJzIHdpbGwgbGF5IG91dCBzeW5jaHJvbm91c2x5LgorICAgIF9wYWdlLT5kaWRMYXlv
dXRGb3JDdXN0b21Db250ZW50UHJvdmlkZXIoKTsKK30KKworLSAodm9pZClfaGFuZGxlS2V5VUlF
dmVudDooOjpVSUV2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBXZSBvbmx5IHdhbnQgdG8gaGFuZGxl
IGtleSBldmVudHMgZnJvbSB0aGUgaGFyZHdhcmUga2V5Ym9hcmQgd2hlbiB3ZSBhcmUKKyAgICAv
LyBmaXJzdCByZXNwb25kZXIgYW5kIGEgY3VzdG9tIGNvbnRlbnQgdmlldyBpcyBpbnN0YWxsZWQ7
IG90aGVyd2lzZSwKKyAgICAvLyBXS0NvbnRlbnRWaWV3IHdpbGwgYmUgdGhlIGZpcnN0IHJlc3Bv
bmRlciBhbmQgZXhwZWN0cyB0byBnZXQga2V5IGV2ZW50cyBkaXJlY3RseS4KKyAgICBpZiAoW3Nl
bGYgaXNGaXJzdFJlc3BvbmRlcl0gJiYgZXZlbnQuX2hpZEV2ZW50KSB7CisgICAgICAgIGlmIChb
X2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViX2hhbmRs
ZUtleUV2ZW50OildKSB7CisgICAgICAgICAgICBpZiAoW19jdXN0b21Db250ZW50VmlldyB3ZWJf
aGFuZGxlS2V5RXZlbnQ6ZXZlbnRdKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFtzdXBlciBfaGFuZGxlS2V5VUlFdmVudDpldmVudF07Cit9CisKKy0g
KHZvaWQpX3dpbGxJbnZva2VVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrCit7CisgICAgX2lu
dm9raW5nVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayA9IFlFUzsKK30KKworLSAodm9pZClf
ZGlkSW52b2tlVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjaworeworICAgIF9pbnZva2luZ1VJ
U2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2sgPSBOTzsKKyAgICBpZiAoX2RpZERlZmVyVXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2spIHsKKyAg
ICAgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVJU2Nyb2xsVmlld0Rl
bGVnYXRlQ2FsbGJhY2sgPSBOTzsKKyAgICAgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlXTsKKyAgICB9Cit9CisKK3N0YXRpYyBDR0Zsb2F0IGNvbnRlbnRab29tU2Nh
bGUoV0tXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIENHRmxvYXQgc2NhbGUgPSB3ZWJWaWV3Ll9j
dXJyZW50Q29udGVudFZpZXcubGF5ZXIuYWZmaW5lVHJhbnNmb3JtLmE7CisgICAgQVNTRVJUKHNj
YWxlID09IFt3ZWJWaWV3LT5fc2Nyb2xsVmlldyB6b29tU2NhbGVdKTsKKyAgICByZXR1cm4gc2Nh
bGU7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpDb2xvciBiYXNlU2Nyb2xsVmlld0JhY2tncm91bmRD
b2xvcihXS1dlYlZpZXcgKndlYlZpZXcpCit7CisgICAgaWYgKHdlYlZpZXctPl9jdXN0b21Db250
ZW50VmlldykKKyAgICAgICAgcmV0dXJuIFt3ZWJWaWV3LT5fY3VzdG9tQ29udGVudFZpZXcgYmFj
a2dyb3VuZENvbG9yXS5DR0NvbG9yOworCisgICAgaWYgKHdlYlZpZXctPl9nZXN0dXJlQ29udHJv
bGxlcikgeworICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvciA9IHdlYlZpZXctPl9nZXN0dXJl
Q29udHJvbGxlci0+YmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90KCk7CisgICAgICAg
IGlmIChjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gY29sb3I7CisgICAgfQor
CisgICAgaWYgKCF3ZWJWaWV3LT5fcGFnZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJl
dHVybiB3ZWJWaWV3LT5fcGFnZS0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7Cit9CisK
K3N0YXRpYyBXZWJDb3JlOjpDb2xvciBzY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yKFdLV2ViVmll
dyAqd2ViVmlldykKK3sKKyAgICBpZiAoIXdlYlZpZXcub3BhcXVlKQorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50OworCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKKyAgICBXZWJDb3JlOjpMb2NhbEN1cnJlbnRUcmFpdENvbGxlY3Rpb24gbG9jYWxUcmFp
dENvbGxlY3Rpb24od2ViVmlldy50cmFpdENvbGxlY3Rpb24pOworI2VuZGlmCisKKyAgICBXZWJD
b3JlOjpDb2xvciBjb2xvciA9IGJhc2VTY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yKHdlYlZpZXcp
OworCisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkgJiYgd2ViVmlldy0+X2NvbnRlbnRWaWV3KQor
ICAgICAgICBjb2xvciA9IFt3ZWJWaWV3LT5fY29udGVudFZpZXcgYmFja2dyb3VuZENvbG9yXS5D
R0NvbG9yOworCisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsKKyNpZiBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKQorICAgICAgICBjb2xvciA9IFVJQ29sb3Iuc3lzdGVtQmFja2dyb3VuZENv
bG9yLkNHQ29sb3I7CisjZWxzZQorICAgICAgICBjb2xvciA9IFdlYkNvcmU6OkNvbG9yOjp3aGl0
ZTsKKyNlbmRpZgorICAgIH0KKworICAgIENHRmxvYXQgem9vbVNjYWxlID0gY29udGVudFpvb21T
Y2FsZSh3ZWJWaWV3KTsKKyAgICBDR0Zsb2F0IG1pbmltdW1ab29tU2NhbGUgPSBbd2ViVmlldy0+
X3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2FsZV07CisgICAgaWYgKHpvb21TY2FsZSA8IG1pbmlt
dW1ab29tU2NhbGUpIHsKKyAgICAgICAgQ0dGbG9hdCBzbG9wZSA9IDEyOworICAgICAgICBDR0Zs
b2F0IG9wYWNpdHkgPSBzdGQ6Om1heDxDR0Zsb2F0PigxIC0gc2xvcGUgKiAobWluaW11bVpvb21T
Y2FsZSAtIHpvb21TY2FsZSksIDApOworICAgICAgICBjb2xvciA9IFdlYkNvcmU6OmNvbG9yV2l0
aE92ZXJyaWRlQWxwaGEoY29sb3IucmdiKCksIG9wYWNpdHkpOworICAgIH0KKworICAgIHJldHVy
biBjb2xvcjsKK30KKworLSAodm9pZClfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmQKK3sKKyAg
ICBXZWJDb3JlOjpDb2xvciBjb2xvciA9IHNjcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3Ioc2VsZik7
CisKKyAgICBpZiAoX3Njcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCisgICAgICAg
IHJldHVybjsKKworICAgIF9zY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yID0gY29sb3I7CisKKyAg
ICBhdXRvIHVpQmFja2dyb3VuZENvbG9yID0gYWRvcHROUyhbW1VJQ29sb3IgYWxsb2NdIGluaXRX
aXRoQ0dDb2xvcjpjYWNoZWRDR0NvbG9yKGNvbG9yKV0pOworICAgIFtfc2Nyb2xsVmlldyBzZXRC
YWNrZ3JvdW5kQ29sb3I6dWlCYWNrZ3JvdW5kQ29sb3IuZ2V0KCldOworCisgICAgLy8gVXBkYXRl
IHRoZSBpbmRpY2F0b3Igc3R5bGUgYmFzZWQgb24gdGhlIGxpZ2h0bmVzcy9kYXJrbmVzcyBvZiB0
aGUgYmFja2dyb3VuZCBjb2xvci4KKyAgICBkb3VibGUgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5l
c3M7CisgICAgY29sb3IuZ2V0SFNMKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzKTsKKyAgICBp
ZiAobGlnaHRuZXNzIDw9IC41ICYmIGNvbG9yLmlzVmlzaWJsZSgpKQorICAgICAgICBbX3Njcm9s
bFZpZXcgc2V0SW5kaWNhdG9yU3R5bGU6VUlTY3JvbGxWaWV3SW5kaWNhdG9yU3R5bGVXaGl0ZV07
CisgICAgZWxzZQorICAgICAgICBbX3Njcm9sbFZpZXcgc2V0SW5kaWNhdG9yU3R5bGU6VUlTY3Jv
bGxWaWV3SW5kaWNhdG9yU3R5bGVCbGFja107Cit9CisKKy0gKHZvaWQpX3ZpZGVvQ29udHJvbHNN
YW5hZ2VyRGlkQ2hhbmdlCit7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChf
ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIpCisgICAgICAgIFtfZnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIgdmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2VdOworI2VuZGlmCit9CisKKy0g
KENHUG9pbnQpX2luaXRpYWxDb250ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlldworeworICAgIGF1dG8g
Y29tYmluZWRVbm9ic2N1cmVkQW5kU2Nyb2xsVmlld0luc2V0ID0gW3NlbGYgX2NvbXB1dGVkQ29u
dGVudEluc2V0XTsKKyAgICByZXR1cm4gQ0dQb2ludE1ha2UoLWNvbWJpbmVkVW5vYnNjdXJlZEFu
ZFNjcm9sbFZpZXdJbnNldC5sZWZ0LCAtY29tYmluZWRVbm9ic2N1cmVkQW5kU2Nyb2xsVmlld0lu
c2V0LnRvcCk7Cit9CisKKy0gKENHUG9pbnQpX2NvbnRlbnRPZmZzZXRBZGp1c3RlZEZvck9ic2N1
cmVkSW5zZXQ6KENHUG9pbnQpcG9pbnQKK3sKKyAgICBDR1BvaW50IHJlc3VsdCA9IHBvaW50Owor
ICAgIFVJRWRnZUluc2V0cyBjb250ZW50SW5zZXQgPSBbc2VsZiBfY29tcHV0ZWRPYnNjdXJlZElu
c2V0XTsKKworICAgIHJlc3VsdC54IC09IGNvbnRlbnRJbnNldC5sZWZ0OworICAgIHJlc3VsdC55
IC09IGNvbnRlbnRJbnNldC50b3A7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChVSVJl
Y3RFZGdlKV9lZmZlY3RpdmVPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEKK3sK
KyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkKKyAgICAgICAgcmV0dXJu
IFVJUmVjdEVkZ2VBbGw7CisgICAgcmV0dXJuIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5
U2FmZUFyZWE7Cit9CisKKy0gKFVJRWRnZUluc2V0cylfY29tcHV0ZWRPYnNjdXJlZEluc2V0Cit7
CisgICAgaWYgKCFsaW5rZWRPbk9yQWZ0ZXIoV2ViS2l0OjpTREtWZXJzaW9uOjpGaXJzdFdoZXJl
U2Nyb2xsVmlld0NvbnRlbnRJbnNldHNBcmVOb3RPYnNjdXJpbmdJbnNldHMpKSB7CisgICAgICAg
IC8vIEZvciBiaW5hcnkgY29tcGFiaWxpdHkgd2l0aCB0aGlyZCBwYXJ0eSBhcHBzLCB0cmVhdCBz
Y3JvbGwgdmlldyBjb250ZW50IGluc2V0cyBhcyBvYnNjdXJpbmcgaW5zZXRzIHdoZW4gdGhlIGFw
cCBpcyBjb21waWxlZAorICAgICAgICAvLyBhZ2FpbnN0IGEgV2ViS2l0IHZlcnNpb24gd2l0aG91
dCB0aGUgZml4IGluIHIyMjk2NDEuCisgICAgICAgIHJldHVybiBbc2VsZiBfY29tcHV0ZWRDb250
ZW50SW5zZXRdOworICAgIH0KKworICAgIGlmIChfaGF2ZVNldE9ic2N1cmVkSW5zZXRzKQorICAg
ICAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRzOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlm
IChzZWxmLl9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzKQorICAgICAgICByZXR1
cm4gVUlFZGdlSW5zZXRzQWRkKFVJRWRnZUluc2V0c1plcm8sIHNlbGYuX3Njcm9sbFZpZXdTeXN0
ZW1Db250ZW50SW5zZXQsIHNlbGYuX2VmZmVjdGl2ZU9ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVk
QnlTYWZlQXJlYSk7CisjZW5kaWYKKworICAgIHJldHVybiBVSUVkZ2VJbnNldHNaZXJvOworfQor
CistIChVSUVkZ2VJbnNldHMpX2NvbXB1dGVkQ29udGVudEluc2V0Cit7CisgICAgaWYgKF9oYXZl
U2V0T2JzY3VyZWRJbnNldHMpCisgICAgICAgIHJldHVybiBfb2JzY3VyZWRJbnNldHM7CisKKyAg
ICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gW19zY3JvbGxWaWV3IGNvbnRlbnRJbnNldF07CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgaWYgKHNlbGYuX3NhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3Vy
ZWRJbnNldHMpCisgICAgICAgIGluc2V0cyA9IFVJRWRnZUluc2V0c0FkZChpbnNldHMsIHNlbGYu
X3Njcm9sbFZpZXdTeXN0ZW1Db250ZW50SW5zZXQsIHNlbGYuX2VmZmVjdGl2ZU9ic2N1cmVkSW5z
ZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSk7CisjZW5kaWYKKworICAgIHJldHVybiBpbnNldHM7
Cit9CisKKy0gKFVJRWRnZUluc2V0cylfY29tcHV0ZWRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldAor
eworICAgIGlmIChfaGF2ZVNldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0cykKKyAgICAgICAgcmV0
dXJuIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAg
aWYgKCFzZWxmLl9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzKQorICAgICAgICBy
ZXR1cm4gc2VsZi5zYWZlQXJlYUluc2V0czsKKyNlbmRpZgorCisgICAgcmV0dXJuIFVJRWRnZUlu
c2V0c1plcm87Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NXaWxsU3dhcE9yRGlkRXhpdAoreworICAg
IC8vIEZJWE1FOiBXaGljaCBvbmVzIG9mIHRoZXNlIG5lZWQgdG8gYmUgZG9uZSBpbiB0aGUgcHJv
Y2VzcyBzd2FwIGNhc2UgYW5kIHdoaWNoIG9uZXMgaW4gdGhlIGV4aXQgY2FzZT8KKyAgICBbc2Vs
ZiBfaGlkZVBhc3N3b3JkVmlld107CisgICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVkUmVzaXplXTsK
KworICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0dXJlQ29udHJvbGxl
ci0+ZGlzY29ubmVjdEZyb21Qcm9jZXNzKCk7CisKKyAgICBfdmlld3BvcnRNZXRhVGFnV2lkdGgg
PSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIF9pbml0aWFsU2Nh
bGVGYWN0b3IgPSAxOworICAgIF9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZyYW1lID0gTk87Cisg
ICAgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUgPSBOTzsK
KyAgICBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0
VXBkYXRlTW9kZTo6Tm90UmVzaXppbmc7CisgICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6
ZSA9IE5POworICAgIF93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZSA9IE5POwor
ICAgIF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoID0gMDsKKyAgICBbX2NvbnRl
bnRWaWV3IHNldEhpZGRlbjpOT107CisgICAgX3Njcm9sbE9mZnNldFRvUmVzdG9yZSA9IFdURjo6
bnVsbG9wdDsKKyAgICBfdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSA9IFdURjo6bnVsbG9wdDsK
KyAgICBfc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6OkNvbG9yKCk7CisgICAg
X2ludm9raW5nVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayA9IE5POworICAgIF9kaWREZWZl
clVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNr
ID0gTk87CisgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvckFueVJlYXNv
biA9IE5POworICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVbnN0YWJs
ZVNjcm9sbFZpZXcgPSBOTzsKKyAgICBfY3VycmVudGx5QWRqdXN0aW5nU2Nyb2xsVmlld0luc2V0
c0ZvcktleWJvYXJkID0gTk87CisgICAgX2xhc3RTZW50Vmlld0xheW91dFNpemUgPSBXVEY6Om51
bGxvcHQ7CisgICAgX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplID0gV1RGOjpudWxsb3B0
OworICAgIF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uID0gV1RGOjpudWxsb3B0OworCisgICAg
X2Zyb3plblZpc2libGVDb250ZW50UmVjdCA9IFdURjo6bnVsbG9wdDsKKyAgICBfZnJvemVuVW5v
YnNjdXJlZENvbnRlbnRSZWN0ID0gV1RGOjpudWxsb3B0OworCisgICAgX2ZpcnN0UGFpbnRBZnRl
ckNvbW1pdExvYWRUcmFuc2FjdGlvbklEID0geyB9OworICAgIF9maXJzdFRyYW5zYWN0aW9uSURB
ZnRlclBhZ2VSZXN0b3JlID0gV1RGOjpudWxsb3B0OworCisgICAgX2xhc3RUcmFuc2FjdGlvbklE
ID0geyB9OworCisgICAgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRlID0gTk87CisgICAg
X2NvbW1pdERpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbiA9IE5POworCisgICAgX2F2b2lkc1Vuc2Fm
ZUFyZWEgPSBZRVM7Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NXaWxsU3dhcAoreworICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJWaWV3IF9wcm9jZXNzV2lsbFN3YXBdIiwgc2Vs
Zik7CisgICAgW3NlbGYgX3Byb2Nlc3NXaWxsU3dhcE9yRGlkRXhpdF07Cit9CisKKy0gKHZvaWQp
X3Byb2Nlc3NEaWRFeGl0Cit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgLVtXS1dl
YlZpZXcgX3Byb2Nlc3NEaWRFeGl0XSIsIHNlbGYpOworCisgICAgW3NlbGYgX3Byb2Nlc3NXaWxs
U3dhcE9yRGlkRXhpdF07CisKKyAgICBbX2NvbnRlbnRWaWV3IHNldEZyYW1lOnNlbGYuYm91bmRz
XTsKKyAgICBbX3Njcm9sbFZpZXcgc2V0QmFja2dyb3VuZENvbG9yOltfY29udGVudFZpZXcgYmFj
a2dyb3VuZENvbG9yXV07CisgICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6W3NlbGYg
X2luaXRpYWxDb250ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld11dOworICAgIFtfc2Nyb2xsVmlldyBz
ZXRab29tU2NhbGU6MV07Cit9CisKKy0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzcworeworICAg
IFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJWaWV3IF9kaWRSZWxhdW5jaFByb2Nl
c3NdIiwgc2VsZik7CisgICAgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRlID0gTk87Cisg
ICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVkdWxlZEZyb21TY3JvbGxWaWV3SW5TdGFi
bGVTdGF0ZSA9IFlFUzsKKyAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQorICAgICAgICBfZ2Vz
dHVyZUNvbnRyb2xsZXItPmNvbm5lY3RUb1Byb2Nlc3MoKTsKK30KKworLSAodm9pZClfZGlkQ29t
bWl0TG9hZEZvck1haW5GcmFtZQoreworICAgIF9maXJzdFBhaW50QWZ0ZXJDb21taXRMb2FkVHJh
bnNhY3Rpb25JRCA9IGRvd25jYXN0PFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eT4oKl9wYWdlLT5kcmF3aW5nQXJlYSgpKS5uZXh0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgp
OworCisgICAgX2hhc0NvbW1pdHRlZExvYWRGb3JNYWluRnJhbWUgPSBZRVM7CisgICAgX25lZWRz
UmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUgPSBZRVM7CisKKyAgICBb
X3Njcm9sbFZpZXcgX3N0b3BTY3JvbGxpbmdBbmRab29taW5nQW5pbWF0aW9uc107Cit9CisKK3N0
YXRpYyBDR1BvaW50IGNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKFVJU2Nyb2xsVmll
dyAqc2Nyb2xsVmlldywgQ0dQb2ludCBjb250ZW50T2Zmc2V0KQoreworI2lmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMAorICAgIFVJRWRnZUluc2V0cyBjb250ZW50
SW5zZXRzID0gc2Nyb2xsVmlldy5hZGp1c3RlZENvbnRlbnRJbnNldDsKKyNlbHNlCisgICAgVUlF
ZGdlSW5zZXRzIGNvbnRlbnRJbnNldHMgPSBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldDsKKyNlbmRp
ZgorCisgICAgQ0dTaXplIGNvbnRlbnRTaXplID0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZTsKKyAg
ICBDR1NpemUgc2Nyb2xsVmlld1NpemUgPSBzY3JvbGxWaWV3LmJvdW5kcy5zaXplOworCisgICAg
Q0dQb2ludCBtaW5pbXVtQ29udGVudE9mZnNldCA9IENHUG9pbnRNYWtlKC1jb250ZW50SW5zZXRz
LmxlZnQsIC1jb250ZW50SW5zZXRzLnRvcCk7CisgICAgQ0dQb2ludCBtYXhpbXVtQ29udGVudE9m
ZnNldCA9IENHUG9pbnRNYWtlKHN0ZDo6bWF4KG1pbmltdW1Db250ZW50T2Zmc2V0LngsIGNvbnRl
bnRTaXplLndpZHRoICsgY29udGVudEluc2V0cy5yaWdodCAtIHNjcm9sbFZpZXdTaXplLndpZHRo
KSwgc3RkOjptYXgobWluaW11bUNvbnRlbnRPZmZzZXQueSwgY29udGVudFNpemUuaGVpZ2h0ICsg
Y29udGVudEluc2V0cy5ib3R0b20gLSBzY3JvbGxWaWV3U2l6ZS5oZWlnaHQpKTsKKworICAgIHJl
dHVybiBDR1BvaW50TWFrZShzdGQ6Om1heChzdGQ6Om1pbihjb250ZW50T2Zmc2V0LngsIG1heGlt
dW1Db250ZW50T2Zmc2V0LngpLCBtaW5pbXVtQ29udGVudE9mZnNldC54KSwgc3RkOjptYXgoc3Rk
OjptaW4oY29udGVudE9mZnNldC55LCBtYXhpbXVtQ29udGVudE9mZnNldC55KSwgbWluaW11bUNv
bnRlbnRPZmZzZXQueSkpOworfQorCitzdGF0aWMgdm9pZCBjaGFuZ2VDb250ZW50T2Zmc2V0Qm91
bmRlZEluVmFsaWRSYW5nZShVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcsIFdlYkNvcmU6OkZsb2F0
UG9pbnQgY29udGVudE9mZnNldCkKK3sKKyAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBj
b250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShzY3JvbGxWaWV3LCBjb250ZW50T2Zmc2V0
KTsKK30KKworLSAoV2ViQ29yZTo6RmxvYXRSZWN0KXZpc2libGVSZWN0SW5WaWV3Q29vcmRpbmF0
ZXMKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzID0gc2VsZi5ib3VuZHM7CisgICAg
Ym91bmRzLm1vdmVCeShbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF0pOworICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBjb250ZW50Vmlld0JvdW5kcyA9IFtfY29udGVudFZpZXcgYm91bmRzXTsKKyAg
ICBib3VuZHMuaW50ZXJzZWN0KGNvbnRlbnRWaWV3Qm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRz
OworfQorCisvLyBXZWJDb3JlIHN0b3JlcyB0aGUgcGFnZSBzY2FsZSBmYWN0b3IgYXMgZmxvYXQg
aW5zdGVhZCBvZiBkb3VibGUuIFdoZW4gd2UgZ2V0IGEgc2NhbGUgZnJvbSBXZWJDb3JlLAorLy8g
d2UgbmVlZCB0byBpZ25vcmUgZGlmZmVyZW5jZXMgdGhhdCBhcmUgd2l0aGluIGEgc21hbGwgcm91
bmRpbmcgZXJyb3Igb24gZmxvYXRzLgorc3RhdGljIGlubGluZSBib29sIGFyZUVzc2VudGlhbGx5
RXF1YWxBc0Zsb2F0KGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChhLCBiKTsKK30KKworLSAodm9pZClfZGlkQ29tbWl0TGF5ZXJUcmVlRHVy
aW5nQW5pbWF0ZWRSZXNpemU6KGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24mKWxheWVyVHJlZVRyYW5zYWN0aW9uCit7CisgICAgYXV0byB1cGRhdGVJRCA9IGxheWVyVHJl
ZVRyYW5zYWN0aW9uLmR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJRCgpOworICAgIGlmICh1cGRh
dGVJRCAmJiAqdXBkYXRlSUQgPT0gX2N1cnJlbnREeW5hbWljVmlld3BvcnRTaXplVXBkYXRlSUQp
IHsKKyAgICAgICAgZG91YmxlIHBhZ2VTY2FsZSA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnBhZ2VT
Y2FsZUZhY3RvcigpOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9
IGxheWVyVHJlZVRyYW5zYWN0aW9uLnNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICAgICAgQ0dGbG9h
dCBhbmltYXRpbmdTY2FsZVRhcmdldCA9IFtbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJdIHRy
YW5zZm9ybV0ubTExOworICAgICAgICBkb3VibGUgY3VycmVudFRhcmdldFNjYWxlID0gYW5pbWF0
aW5nU2NhbGVUYXJnZXQgKiBbW19jb250ZW50VmlldyBsYXllcl0gdHJhbnNmb3JtXS5tMTE7Cisg
ICAgICAgIGRvdWJsZSBzY2FsZSA9IHBhZ2VTY2FsZSAvIGN1cnJlbnRUYXJnZXRTY2FsZTsKKyAg
ICAgICAgX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRzID0gQ0FUcmFuc2Zvcm0z
RE1ha2VTY2FsZShzY2FsZSwgc2NhbGUsIDEpOworCisgICAgICAgIENHUG9pbnQgbmV3Q29udGVu
dE9mZnNldCA9IFtzZWxmIF9jb250ZW50T2Zmc2V0QWRqdXN0ZWRGb3JPYnNjdXJlZEluc2V0OkNH
UG9pbnRNYWtlKHNjcm9sbFBvc2l0aW9uLngoKSAqIHBhZ2VTY2FsZSwgc2Nyb2xsUG9zaXRpb24u
eSgpICogcGFnZVNjYWxlKV07CisgICAgICAgIENHUG9pbnQgY3VycmVudENvbnRlbnRPZmZzZXQg
PSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisKKyAgICAgICAgX3Jlc2l6ZUFuaW1hdGlv
blRyYW5zZm9ybUFkanVzdG1lbnRzLm00MSA9IChjdXJyZW50Q29udGVudE9mZnNldC54IC0gbmV3
Q29udGVudE9mZnNldC54KSAvIGFuaW1hdGluZ1NjYWxlVGFyZ2V0OworICAgICAgICBfcmVzaXpl
QW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMubTQyID0gKGN1cnJlbnRDb250ZW50T2Zmc2V0
LnkgLSBuZXdDb250ZW50T2Zmc2V0LnkpIC8gYW5pbWF0aW5nU2NhbGVUYXJnZXQ7CisKKyAgICAg
ICAgW19yZXNpemVBbmltYXRpb25WaWV3IGxheWVyXS5zdWJsYXllclRyYW5zZm9ybSA9IF9yZXNp
emVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50czsKKworICAgICAgICAvLyBJZiB3ZSd2ZSBh
bHJlYWR5IHBhc3NlZCBlbmRBbmltYXRlZFJlc2l6ZSwgaW1tZWRpYXRlbHkgY29tcGxldGUKKyAg
ICAgICAgLy8gdGhlIHJlc2l6ZSB3aGVuIHdlIGhhdmUgYW4gdXAtdG8tZGF0ZSBsYXllciB0cmVl
LiBPdGhlcndpc2UsCisgICAgICAgIC8vIHdlIHdpbGwgZGVmZXIgY29tcGxldGlvbiB1bnRpbCBl
bmRBbmltYXRlZFJlc2l6ZS4KKyAgICAgICAgX3dhaXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVk
UmVzaXplID0gTk87CisgICAgICAgIGlmICghX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSkK
KyAgICAgICAgICAgIFtzZWxmIF9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplXTsKKworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgYSBjb21taXQgYXJyaXZlcyBkdXJpbmcgdGhl
IGxpdmUgcGFydCBvZiBhIHJlc2l6ZSBidXQgYmVmb3JlIHRoZQorICAgIC8vIGxheWVyIHRyZWUg
dGFrZXMgdGhlIGN1cnJlbnQgcmVzaXplIGludG8gYWNjb3VudCwgaXQgY291bGQgY2hhbmdlIHRo
ZQorICAgIC8vIFdLQ29udGVudFZpZXcncyBzaXplLiBVcGRhdGUgdGhlIHJlc2l6ZUFuaW1hdGlv
blZpZXcncyBzY2FsZSB0byBlbnN1cmUKKyAgICAvLyB3ZSBjb250aW51ZSB0byBmaWxsIHRoZSB3
aWR0aCBvZiB0aGUgcmVzaXplIHRhcmdldC4KKworICAgIGlmIChfd2FpdGluZ0ZvckVuZEFuaW1h
dGVkUmVzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5ld1ZpZXdMYXlvdXRTaXpl
ID0gW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdOworICAgIENHRmxvYXQg
cmVzaXplQW5pbWF0aW9uVmlld1NjYWxlID0gX2FuaW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50
V2lkdGggLyBuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgpOworICAgIFtbX3Jlc2l6ZUFuaW1hdGlv
blZpZXcgbGF5ZXJdIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUo
cmVzaXplQW5pbWF0aW9uVmlld1NjYWxlLCByZXNpemVBbmltYXRpb25WaWV3U2NhbGUsIDEpXTsK
K30KKworLSAodm9pZClfZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbgoreworICAgIGlmIChfZGlk
RGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVW5zdGFibGVTY3JvbGxWaWV3KSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dL
V2ViVmlldyBfZGlkQ29tbWl0TGF5ZXJUcmVlOl0gLSByZWNlaXZlZCBhIGNvbW1pdCAoJWxsdSkg
d2hpbGUgZGVmZXJyaW5nIHZpc2libGUgY29udGVudCByZWN0IHVwZGF0ZXMgKF9keW5hbWljVmll
d3BvcnRVcGRhdGVNb2RlICVkLCBfbmVlZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZv
ck1haW5GcmFtZSAlZCAod2FudHMgY29tbWl0ICVsbHUpLCBzaXplQ2hhbmdlZFNpbmNlTGFzdFZp
c2libGVDb250ZW50UmVjdFVwZGF0ZSAlZCwgW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSAl
ZCwgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNldHNGb3JLZXlib2FyZCAlZCkiLAor
ICAgICAgICBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIGxheWVyVHJlZVRy
YW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKS50b1VJbnQ2NCgpLCBfZHluYW1pY1ZpZXdwb3J0VXBk
YXRlTW9kZSwgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUs
IF9maXJzdFBhaW50QWZ0ZXJDb21taXRMb2FkVHJhbnNhY3Rpb25JRC50b1VJbnQ2NCgpLCBbX2Nv
bnRlbnRWaWV3IHNpemVDaGFuZ2VkU2luY2VMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXSwg
W19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSwgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZp
ZXdJbnNldHNGb3JLZXlib2FyZCk7CisgICAgfQorCisgICAgaWYgKF90aW1lT2ZGaXJzdFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29tbWl0KSB7CisgICAgICAgIGF1dG8gdGlt
ZVNpbmNlRmlyc3RSZXF1ZXN0V2l0aFBlbmRpbmdDb21taXQgPSBNb25vdG9uaWNUaW1lOjpub3co
KSAtICpfdGltZU9mRmlyc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVXaXRoUGVuZGluZ0NvbW1p
dDsKKyAgICAgICAgaWYgKHRpbWVTaW5jZUZpcnN0UmVxdWVzdFdpdGhQZW5kaW5nQ29tbWl0ID4g
ZGVsYXlCZWZvcmVOb0NvbW1pdHNMb2dnaW5nKQorICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9kaWRDb21taXRMYXll
clRyZWU6XSAtIGZpbmFsbHkgcmVjZWl2ZWQgY29tbWl0ICUuMmZzIGFmdGVyIHZpc2libGUgY29u
dGVudCByZWN0IHVwZGF0ZSByZXF1ZXN0OyB0cmFuc2FjdGlvbklEICVsbHUiLCBzZWxmLCBfcGFn
ZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIHRpbWVTaW5jZUZpcnN0UmVxdWVzdFdpdGhQZW5k
aW5nQ29tbWl0LnZhbHVlKCksIGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKS50
b1VJbnQ2NCgpKTsKKyAgICAgICAgX3RpbWVPZkZpcnN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
V2l0aFBlbmRpbmdDb21taXQgPSBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgX2xhc3RUcmFu
c2FjdGlvbklEID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpOworCisgICAg
aWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCisgICAgICAgIHJldHVybjsKKwor
ICAgIExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiLVtXS1dlYlZpZXcg
IiA8PCBfcGFnZS0+aWRlbnRpZmllcigpIDw8ICIgX2RpZENvbW1pdExheWVyVHJlZTpdIHRyYW5z
YWN0aW9uSUQgIiA8PCBsYXllclRyZWVUcmFuc2FjdGlvbi50cmFuc2FjdGlvbklEKCkgPDwgIiBf
ZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAiIDw8IChpbnQpX2R5bmFtaWNWaWV3cG9ydFVwZGF0
ZU1vZGUpOworCisgICAgYm9vbCBuZWVkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyA9IF9wYWdl
LT51cGRhdGVMYXlvdXRWaWV3cG9ydFBhcmFtZXRlcnMobGF5ZXJUcmVlVHJhbnNhY3Rpb24pOwor
CisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdlYktpdDo6RHluYW1pY1Zp
ZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKKyAgICAgICAgW3NlbGYgX2RpZENvbW1p
dExheWVyVHJlZUR1cmluZ0FuaW1hdGVkUmVzaXplOmxheWVyVHJlZVRyYW5zYWN0aW9uXTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChfcmVzaXplQW5pbWF0aW9uVmlldykKKyAg
ICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgLVtXS1dlYlZpZXcgX2RpZENvbW1pdExh
eWVyVHJlZTpdIC0gZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSBpcyBOb3RSZXNpemluZywgYnV0
IHN0aWxsIGhhdmUgYSBsaXZlIHJlc2l6ZUFuaW1hdGlvblZpZXcgKHVucGFpcmVkIGJlZ2luL2Vu
ZEFuaW1hdGVkUmVzaXplPykiLCBzZWxmKTsKKworICAgIENHU2l6ZSBuZXdDb250ZW50U2l6ZSA9
IHJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKCpfcGFnZSwgW19jb250ZW50VmlldyBmcmFtZV0u
c2l6ZSk7CisgICAgW19zY3JvbGxWaWV3IF9zZXRDb250ZW50U2l6ZVByZXNlcnZpbmdDb250ZW50
T2Zmc2V0RHVyaW5nUnViYmVyYmFuZDpuZXdDb250ZW50U2l6ZV07CisKKyAgICBbX3Njcm9sbFZp
ZXcgc2V0TWluaW11bVpvb21TY2FsZTpsYXllclRyZWVUcmFuc2FjdGlvbi5taW5pbXVtU2NhbGVG
YWN0b3IoKV07CisgICAgW19zY3JvbGxWaWV3IHNldE1heGltdW1ab29tU2NhbGU6bGF5ZXJUcmVl
VHJhbnNhY3Rpb24ubWF4aW11bVNjYWxlRmFjdG9yKCldOworICAgIFtfc2Nyb2xsVmlldyBfc2V0
Wm9vbUVuYWJsZWRJbnRlcm5hbDpsYXllclRyZWVUcmFuc2FjdGlvbi5hbGxvd3NVc2VyU2NhbGlu
ZygpXTsKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIGJvb2wgaGFzRG9ja2VkSW5w
dXRWaWV3ID0gIUNHUmVjdElzRW1wdHkoX2lucHV0Vmlld0JvdW5kcyk7CisgICAgYm9vbCBpc1pv
b21lZCA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnBhZ2VTY2FsZUZhY3RvcigpID4gbGF5ZXJUcmVl
VHJhbnNhY3Rpb24uaW5pdGlhbFNjYWxlRmFjdG9yKCk7CisKKyAgICBib29sIHNjcm9sbGluZ05l
ZWRlZFRvUmV2ZWFsVUkgPSBmYWxzZTsKKyAgICBpZiAoX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92
ZXJyaWRlKSB7CisgICAgICAgIGF1dG8gdW5vYnNjdXJlZENvbnRlbnRSZWN0ID0gX3BhZ2UtPnVu
b2JzY3VyZWRDb250ZW50UmVjdCgpOworICAgICAgICBhdXRvIG1heFVub2JzY3VyZWRTaXplID0g
X3BhZ2UtPm1heGltdW1Vbm9ic2N1cmVkU2l6ZSgpOworICAgICAgICBzY3JvbGxpbmdOZWVkZWRU
b1JldmVhbFVJID0gbWF4VW5vYnNjdXJlZFNpemUud2lkdGgoKSA9PSB1bm9ic2N1cmVkQ29udGVu
dFJlY3Qud2lkdGgoKSAmJiBtYXhVbm9ic2N1cmVkU2l6ZS5oZWlnaHQoKSA9PSB1bm9ic2N1cmVk
Q29udGVudFJlY3QuaGVpZ2h0KCk7CisgICAgfQorCisgICAgYm9vbCBzY3JvbGxpbmdFbmFibGVk
ID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+aGFzU2Nyb2xsYWJsZU1haW5G
cmFtZSgpIHx8IGhhc0RvY2tlZElucHV0VmlldyB8fCBpc1pvb21lZCB8fCBzY3JvbGxpbmdOZWVk
ZWRUb1JldmVhbFVJOworICAgIFtfc2Nyb2xsVmlldyBfc2V0U2Nyb2xsRW5hYmxlZEludGVybmFs
OnNjcm9sbGluZ0VuYWJsZWRdOworI2VuZGlmCisgICAgaWYgKCFsYXllclRyZWVUcmFuc2FjdGlv
bi5zY2FsZVdhc1NldEJ5VUlQcm9jZXNzKCkgJiYgIVtfc2Nyb2xsVmlldyBpc1pvb21pbmddICYm
ICFbX3Njcm9sbFZpZXcgaXNab29tQm91bmNpbmddICYmICFbX3Njcm9sbFZpZXcgX2lzQW5pbWF0
aW5nWm9vbV0gJiYgW19zY3JvbGxWaWV3IHpvb21TY2FsZV0gIT0gbGF5ZXJUcmVlVHJhbnNhY3Rp
b24ucGFnZVNjYWxlRmFjdG9yKCkpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFZpc2libGVS
ZWN0cywgc3RyZWFtIDw8ICIgdXBkYXRpbmcgc2Nyb2xsIHZpZXcgd2l0aCBwYWdlU2NhbGVGYWN0
b3IgIiA8PCBsYXllclRyZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgICAg
IFtfc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6bGF5ZXJUcmVlVHJhbnNhY3Rpb24ucGFnZVNjYWxl
RmFjdG9yKCldOworICAgIH0KKworICAgIF92aWV3cG9ydE1ldGFUYWdXaWR0aCA9IGxheWVyVHJl
ZVRyYW5zYWN0aW9uLnZpZXdwb3J0TWV0YVRhZ1dpZHRoKCk7CisgICAgX3ZpZXdwb3J0TWV0YVRh
Z1dpZHRoV2FzRXhwbGljaXQgPSBsYXllclRyZWVUcmFuc2FjdGlvbi52aWV3cG9ydE1ldGFUYWdX
aWR0aFdhc0V4cGxpY2l0KCk7CisgICAgX3ZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1
bWVudCA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VE
b2N1bWVudCgpOworICAgIF9pbml0aWFsU2NhbGVGYWN0b3IgPSBsYXllclRyZWVUcmFuc2FjdGlv
bi5pbml0aWFsU2NhbGVGYWN0b3IoKTsKKyAgICBpZiAoX3BhZ2UtPmluU3RhYmxlU3RhdGUoKSAm
JiBsYXllclRyZWVUcmFuc2FjdGlvbi5pc0luU3RhYmxlU3RhdGUoKSAmJiBbX3N0YWJsZVN0YXRl
UHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGNvdW50XSkgeworICAgICAgICBmb3IgKGRpc3Bh
dGNoX2Jsb2NrX3QgYWN0aW9uIGluIF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxi
YWNrcy5nZXQoKSkKKyAgICAgICAgICAgIGFjdGlvbigpOworCisgICAgICAgIFtfc3RhYmxlU3Rh
dGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgcmVtb3ZlQWxsT2JqZWN0c107CisgICAgICAg
IF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyA9IG5pbDsKKyAgICB9CisK
KyAgICBpZiAoIVtfY29udGVudFZpZXcgX21heURpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1cmlu
Z1NpbmdsZVRhcF0pCisgICAgICAgIFtfY29udGVudFZpZXcgX3NldERvdWJsZVRhcEdlc3R1cmVz
RW5hYmxlZDpzZWxmLl9hbGxvd3NEb3VibGVUYXBHZXN0dXJlc107CisKKyAgICBbc2VsZiBfdXBk
YXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOworICAgIFtzZWxmIF9zZXRBdm9pZHNVbnNhZmVBcmVh
OmxheWVyVHJlZVRyYW5zYWN0aW9uLmF2b2lkc1Vuc2FmZUFyZWEoKV07CisKKyAgICBpZiAoX2dl
c3R1cmVDb250cm9sbGVyKQorICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPnNldFJlbmRlclRy
ZWVTaXplKGxheWVyVHJlZVRyYW5zYWN0aW9uLnJlbmRlclRyZWVTaXplKCkpOworCisgICAgaWYg
KF9uZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lICYmIGxheWVy
VHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKSA+PSBfZmlyc3RQYWludEFmdGVyQ29tbWl0
TG9hZFRyYW5zYWN0aW9uSUQpIHsKKyAgICAgICAgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNv
bW1pdExvYWRGb3JNYWluRnJhbWUgPSBOTzsKKyAgICAgICAgW19zY3JvbGxWaWV3IHNldENvbnRl
bnRPZmZzZXQ6W3NlbGYgX2luaXRpYWxDb250ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld11dOworICAg
ICAgICBpZiAoX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMgJiBfV0tSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50Rmlyc3RQYWludCkKKyAgICAgICAgICAgIF9uYXZpZ2F0aW9uU3RhdGUtPmRp
ZEZpcnN0UGFpbnQoKTsKKworICAgICAgICBuZWVkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyA9
IHRydWU7CisgICAgfQorCisgICAgaWYgKF9maXJzdFRyYW5zYWN0aW9uSURBZnRlclBhZ2VSZXN0
b3JlICYmIGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKSA+PSBfZmlyc3RUcmFu
c2FjdGlvbklEQWZ0ZXJQYWdlUmVzdG9yZS52YWx1ZSgpKSB7CisgICAgICAgIGlmIChfc2Nyb2xs
T2Zmc2V0VG9SZXN0b3JlKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNjYWxl
ZFNjcm9sbE9mZnNldCA9IF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmUudmFsdWUoKTsKKyAgICAgICAg
ICAgIF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmUgPSBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgICAg
IGlmIChhcmVFc3NlbnRpYWxseUVxdWFsQXNGbG9hdChjb250ZW50Wm9vbVNjYWxlKHNlbGYpLCBf
c2NhbGVUb1Jlc3RvcmUpKSB7CisgICAgICAgICAgICAgICAgc2NhbGVkU2Nyb2xsT2Zmc2V0LnNj
YWxlKF9zY2FsZVRvUmVzdG9yZSk7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBjb250ZW50T2Zmc2V0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBzY2FsZWRTY3JvbGxPZmZz
ZXQgLSBXZWJDb3JlOjpGbG9hdFNpemUoX29ic2N1cmVkSW5zZXRzV2hlblNhdmVkLmxlZnQoKSwg
X29ic2N1cmVkSW5zZXRzV2hlblNhdmVkLnRvcCgpKTsKKworICAgICAgICAgICAgICAgIGNoYW5n
ZUNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxWaWV3LmdldCgpLCBjb250
ZW50T2Zmc2V0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgICAgIF9jb21t
aXREaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24gPSBZRVM7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG5lZWRVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzID0gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChfdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSkgeworICAgICAgICAgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCB1bm9ic2N1cmVkQ2VudGVyVG9SZXN0b3JlID0gX3Vub2JzY3Vy
ZWRDZW50ZXJUb1Jlc3RvcmUudmFsdWUoKTsKKyAgICAgICAgICAgIF91bm9ic2N1cmVkQ2VudGVy
VG9SZXN0b3JlID0gV1RGOjpudWxsb3B0OworCisgICAgICAgICAgICBpZiAoYXJlRXNzZW50aWFs
bHlFcXVhbEFzRmxvYXQoY29udGVudFpvb21TY2FsZShzZWxmKSwgX3NjYWxlVG9SZXN0b3JlKSkg
eworICAgICAgICAgICAgICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdCA9IFVJRWRnZUluc2V0c0lu
c2V0UmVjdChzZWxmLmJvdW5kcywgX29ic2N1cmVkSW5zZXRzKTsKKyAgICAgICAgICAgICAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgdW5vYnNjdXJlZENvbnRlbnRTaXplQXROZXdTY2FsZSA9IFdlYkNv
cmU6OkZsb2F0U2l6ZSh1bm9ic2N1cmVkUmVjdC5zaXplKSAvIF9zY2FsZVRvUmVzdG9yZTsKKyAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRvcExlZnRJbkRvY3VtZW50Q29vcmRp
bmF0ZXMgPSB1bm9ic2N1cmVkQ2VudGVyVG9SZXN0b3JlIC0gdW5vYnNjdXJlZENvbnRlbnRTaXpl
QXROZXdTY2FsZSAvIDI7CisKKyAgICAgICAgICAgICAgICB0b3BMZWZ0SW5Eb2N1bWVudENvb3Jk
aW5hdGVzLnNjYWxlKF9zY2FsZVRvUmVzdG9yZSk7CisgICAgICAgICAgICAgICAgdG9wTGVmdElu
RG9jdW1lbnRDb29yZGluYXRlcy5tb3ZlQnkoV2ViQ29yZTo6RmxvYXRQb2ludCgtX29ic2N1cmVk
SW5zZXRzLmxlZnQsIC1fb2JzY3VyZWRJbnNldHMudG9wKSk7CisKKyAgICAgICAgICAgICAgICBj
aGFuZ2VDb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5nZXQoKSwg
dG9wTGVmdEluRG9jdW1lbnRDb29yZGluYXRlcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG5lZWRVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgICAgICBfZ2VzdHVyZUNvbnRy
b2xsZXItPmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOworCisgICAgICAgIF9maXJzdFRyYW5z
YWN0aW9uSURBZnRlclBhZ2VSZXN0b3JlID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGlm
IChuZWVkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cykKKyAgICAgICAgW3NlbGYgX3NjaGVkdWxl
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKKworICAgIGlmIChXZWJLaXQ6OlJlbW90ZUxheWVy
VHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSogc2Nyb2xsUGVyZkRhdGEgPSBfcGFnZS0+c2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhKCkpCisgICAgICAgIHNjcm9sbFBlcmZEYXRhLT5kaWRDb21t
aXRMYXllclRyZWUoW3NlbGYgdmlzaWJsZVJlY3RJblZpZXdDb29yZGluYXRlc10pOworfQorCist
ICh2b2lkKV9sYXllclRyZWVDb21taXRDb21wbGV0ZQoreworICAgIF9jb21taXREaWRSZXN0b3Jl
U2Nyb2xsUG9zaXRpb24gPSBOTzsKK30KKworLSAodm9pZClfY291bGROb3RSZXN0b3JlUGFnZVN0
YXRlCit7CisgICAgLy8gVGhlIGdlc3R1cmVDb250cm9sbGVyIG1heSBiZSB3YWl0aW5nIGZvciB0
aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIGJlIHJlc3RvcmVkCisgICAgLy8gaW4gb3JkZXIgdG8gcmVt
b3ZlIHRoZSBzd2lwZSBzbmFwc2hvdC4gU2luY2UgdGhlIHNjcm9sbCBwb3NpdGlvbiBjb3VsZCBu
b3QgYmUKKyAgICAvLyByZXN0b3JlZCwgdGVsbCB0aGUgZ2VzdHVyZUNvbnRyb2xsZXIgaXQgd2Fz
IHJlc3RvcmVkIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIHdhaXRzCisgICAgLy8gZm9yIGl0LgorICAg
IGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+ZGlk
UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7Cit9CisKKy0gKHZvaWQpX3Jlc3RvcmVQYWdlU2Nyb2xs
UG9zaXRpb246KE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+KXNjcm9sbFBvc2l0aW9uIHNj
cm9sbE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClzY3JvbGxPcmlnaW4gcHJldmlvdXNPYnNj
dXJlZEluc2V0OihXZWJDb3JlOjpGbG9hdEJveEV4dGVudClvYnNjdXJlZEluc2V0cyBzY2FsZToo
ZG91YmxlKXNjYWxlCit7CisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdl
YktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKKyAgICAgICAg
Ly8gRGVmZXIgc2Nyb2xsIHBvc2l0aW9uIHJlc3RvcmF0aW9uIHVudGlsIGFmdGVyIHRoZSBjdXJy
ZW50IHJlc2l6ZSBjb21wbGV0ZXMuCisgICAgICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHJldGFp
bmVkU2VsZiA9IHNlbGY7CisgICAgICAgIF9jYWxsYmFja3NEZWZlcnJlZER1cmluZ1Jlc2l6ZS5h
cHBlbmQoW3JldGFpbmVkU2VsZiwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgb2JzY3Vy
ZWRJbnNldHMsIHNjYWxlXSB7CisgICAgICAgICAgICBbcmV0YWluZWRTZWxmIF9yZXN0b3JlUGFn
ZVNjcm9sbFBvc2l0aW9uOnNjcm9sbFBvc2l0aW9uIHNjcm9sbE9yaWdpbjpzY3JvbGxPcmlnaW4g
cHJldmlvdXNPYnNjdXJlZEluc2V0Om9ic2N1cmVkSW5zZXRzIHNjYWxlOnNjYWxlXTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFu
ZGFyZENvbnRlbnRWaWV3XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX2ZpcnN0VHJhbnNhY3Rp
b25JREFmdGVyUGFnZVJlc3RvcmUgPSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSkubmV4dExheWVyVHJlZVRyYW5z
YWN0aW9uSUQoKTsKKyAgICBpZiAoc2Nyb2xsUG9zaXRpb24pCisgICAgICAgIF9zY3JvbGxPZmZz
ZXRUb1Jlc3RvcmUgPSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsT2Zmc2V0RnJvbVBv
c2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQoc2Nyb2xsUG9zaXRpb24udmFsdWUoKSksIFdlYkNv
cmU6OnRvRmxvYXRTaXplKHNjcm9sbE9yaWdpbikpOworICAgIGVsc2UKKyAgICAgICAgX3Njcm9s
bE9mZnNldFRvUmVzdG9yZSA9IFdURjo6bnVsbG9wdDsKKworICAgIF9vYnNjdXJlZEluc2V0c1do
ZW5TYXZlZCA9IG9ic2N1cmVkSW5zZXRzOworICAgIF9zY2FsZVRvUmVzdG9yZSA9IHNjYWxlOwor
fQorCistICh2b2lkKV9yZXN0b3JlUGFnZVN0YXRlVG9Vbm9ic2N1cmVkQ2VudGVyOihPcHRpb25h
bDxXZWJDb3JlOjpGbG9hdFBvaW50PiljZW50ZXIgc2NhbGU6KGRvdWJsZSlzY2FsZQoreworICAg
IGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7CisgICAgICAgIC8vIERlZmVyIHNjcm9sbCBwb3Np
dGlvbiByZXN0b3JhdGlvbiB1bnRpbCBhZnRlciB0aGUgY3VycmVudCByZXNpemUgY29tcGxldGVz
LgorICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiByZXRhaW5lZFNlbGYgPSBzZWxmOworICAg
ICAgICBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFtyZXRhaW5lZFNlbGYs
IGNlbnRlciwgc2NhbGVdIHsKKyAgICAgICAgICAgIFtyZXRhaW5lZFNlbGYgX3Jlc3RvcmVQYWdl
U3RhdGVUb1Vub2JzY3VyZWRDZW50ZXI6Y2VudGVyIHNjYWxlOnNjYWxlXTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENv
bnRlbnRWaWV3XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX2ZpcnN0VHJhbnNhY3Rpb25JREFm
dGVyUGFnZVJlc3RvcmUgPSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSkubmV4dExheWVyVHJlZVRyYW5zYWN0aW9u
SUQoKTsKKyAgICBfdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSA9IGNlbnRlcjsKKworICAgIF9z
Y2FsZVRvUmVzdG9yZSA9IHNjYWxlOworfQorCistIChSZWZQdHI8V2ViS2l0OjpWaWV3U25hcHNo
b3Q+KV90YWtlVmlld1NuYXBzaG90Cit7CisjaWYgSEFWRShDT1JFX0FOSU1BVElPTl9SRU5ERVJf
U0VSVkVSKQorICAgIGZsb2F0IGRldmljZVNjYWxlID0gV2ViQ29yZTo6c2NyZWVuU2NhbGVGYWN0
b3IoKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc25hcHNob3RTaXplKHNlbGYuYm91bmRzLnNp
emUpOworICAgIHNuYXBzaG90U2l6ZS5zY2FsZShkZXZpY2VTY2FsZSk7CisKKyAgICBDQVRyYW5z
Zm9ybTNEIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoZGV2aWNlU2NhbGUsIGRl
dmljZVNjYWxlLCAxKTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2lmIEhBVkUoSU9TVVJGQUNF
X1JHQjEwKQorICAgIFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0IHNuYXBzaG90Rm9ybWF0ID0g
V2ViQ29yZTo6c2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKCkgPyBXZWJDb3JlOjpJT1N1cmZh
Y2U6OkZvcm1hdDo6UkdCMTAgOiBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdCQTsKKyNl
bHNlCisgICAgV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQgc25hcHNob3RGb3JtYXQgPSBXZWJD
b3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdCQTsKKyNlbmRpZgorICAgIGF1dG8gc3VyZmFjZSA9
IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShzbmFw
c2hvdFNpemUpLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpLCBzbmFwc2hvdEZvcm1hdCk7
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBDQVJlbmRl
clNlcnZlclJlbmRlckxheWVyV2l0aFRyYW5zZm9ybShNQUNIX1BPUlRfTlVMTCwgc2VsZi5sYXll
ci5jb250ZXh0LmNvbnRleHRJZCwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oc2VsZi5sYXll
ciksIHN1cmZhY2UtPnN1cmZhY2UoKSwgMCwgMCwgJnRyYW5zZm9ybSk7CisKKyNpZiBIQVZFKElP
U1VSRkFDRV9BQ0NFTEVSQVRPUikKKyAgICBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdCBjb21w
cmVzc2VkRm9ybWF0ID0gV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OllVVjQyMjsKKyAgICBp
ZiAoV2ViQ29yZTo6SU9TdXJmYWNlOjphbGxvd0NvbnZlcnNpb25Gcm9tRm9ybWF0VG9Gb3JtYXQo
c25hcHNob3RGb3JtYXQsIGNvbXByZXNzZWRGb3JtYXQpKSB7CisgICAgICAgIGF1dG8gdmlld1Nu
YXBzaG90ID0gV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNyZWF0ZShudWxscHRyKTsKKyAgICAgICAg
V2ViQ29yZTo6SU9TdXJmYWNlOjpjb252ZXJ0VG9Gb3JtYXQoV1RGTW92ZShzdXJmYWNlKSwgV2Vi
Q29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OllVVjQyMiwgW3ZpZXdTbmFwc2hvdCA9IHZpZXdTbmFw
c2hvdC5jb3B5UmVmKCldKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IGNvbnZl
cnRlZFN1cmZhY2UpIHsKKyAgICAgICAgICAgIGlmIChjb252ZXJ0ZWRTdXJmYWNlKQorICAgICAg
ICAgICAgICAgIHZpZXdTbmFwc2hvdC0+c2V0U3VyZmFjZShXVEZNb3ZlKGNvbnZlcnRlZFN1cmZh
Y2UpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHZpZXdTbmFwc2hvdDsKKyAgICB9
CisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0VfQUNDRUxFUkFUT1IpCisKKyAgICByZXR1cm4gV2Vi
S2l0OjpWaWV3U25hcHNob3Q6OmNyZWF0ZShXVEZNb3ZlKHN1cmZhY2UpKTsKKyNlbHNlIC8vIEhB
VkUoSU9TVVJGQUNFKQorICAgIHVpbnQzMl90IHNsb3RJRCA9IFtXZWJLaXQ6OlZpZXdTbmFwc2hv
dFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkgY3JlYXRlSW1hZ2VTbG90OnNuYXBzaG90U2l6
ZSBoYXNBbHBoYTpZRVNdOworCisgICAgaWYgKCFzbG90SUQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgQ0FSZW5kZXJTZXJ2ZXJDYXB0dXJlTGF5ZXJXaXRoVHJhbnNmb3JtKE1BQ0hf
UE9SVF9OVUxMLCBzZWxmLmxheWVyLmNvbnRleHQuY29udGV4dElkLCAodWludDY0X3Qpc2VsZi5s
YXllciwgc2xvdElELCAwLCAwLCAmdHJhbnNmb3JtKTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIGlt
YWdlU2l6ZSA9IFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoc25h
cHNob3RTaXplKSk7CisgICAgcmV0dXJuIFdlYktpdDo6Vmlld1NuYXBzaG90OjpjcmVhdGUoc2xv
dElELCBpbWFnZVNpemUsIChpbWFnZVNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworI2Vu
ZGlmIC8vIEhBVkUoSU9TVVJGQUNFKQorI2Vsc2UgLy8gSEFWRShDT1JFX0FOSU1BVElPTl9SRU5E
RVJfU0VSVkVSKQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKKy0gKHZvaWQpX3pv
b21Ub1BvaW50OihXZWJDb3JlOjpGbG9hdFBvaW50KXBvaW50IGF0U2NhbGU6KGRvdWJsZSlzY2Fs
ZSBhbmltYXRlZDooQk9PTClhbmltYXRlZAoreworICAgIENGVGltZUludGVydmFsIGR1cmF0aW9u
ID0gMDsKKyAgICBDR0Zsb2F0IHpvb21TY2FsZSA9IGNvbnRlbnRab29tU2NhbGUoc2VsZik7CisK
KyAgICBpZiAoYW5pbWF0ZWQpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIG1heGltdW1ab29tRHVy
YXRpb24gPSAwLjQ7CisgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5pbXVtWm9vbUR1cmF0aW9uID0g
MC4xOworICAgICAgICBjb25zdCBkb3VibGUgem9vbUR1cmF0aW9uRmFjdG9yID0gMC4zOworCisg
ICAgICAgIGR1cmF0aW9uID0gc3RkOjptaW4oZmFicyhsb2coem9vbVNjYWxlKSAtIGxvZyhzY2Fs
ZSkpICogem9vbUR1cmF0aW9uRmFjdG9yICsgbWluaW11bVpvb21EdXJhdGlvbiwgbWF4aW11bVpv
b21EdXJhdGlvbik7CisgICAgfQorCisgICAgaWYgKHNjYWxlICE9IHpvb21TY2FsZSkKKyAgICAg
ICAgX3BhZ2UtPndpbGxTdGFydFVzZXJUcmlnZ2VyZWRab29taW5nKCk7CisKKyAgICBMT0dfV0lU
SF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIl96b29tVG9Qb2ludDoiIDw8IHBvaW50
IDw8ICIgc2NhbGU6ICIgPDwgc2NhbGUgPDwgIiBkdXJhdGlvbjoiIDw8IGR1cmF0aW9uKTsKKwor
ICAgIFtfc2Nyb2xsVmlldyBfem9vbVRvQ2VudGVyOnBvaW50IHNjYWxlOnNjYWxlIGR1cmF0aW9u
OmR1cmF0aW9uXTsKK30KKworLSAodm9pZClfem9vbVRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0
KXRhcmdldFJlY3QgYXRTY2FsZTooZG91YmxlKXNjYWxlIG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQ
b2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKK3sKKyAgICAvLyBGSVhNRTogU29t
ZSBvZiB0aGlzIGNvdWxkIGJlIHNoYXJlZCB3aXRoIF9zY3JvbGxUb1JlY3QuCisgICAgY29uc3Qg
ZG91YmxlIHZpc2libGVSZWN0U2NhbGVDaGFuZ2UgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpIC8g
c2NhbGU7CisgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVSZWN0KFtzZWxmIGNv
bnZlcnRSZWN0OnNlbGYuYm91bmRzIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddKTsK
KyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QgdW5vYnNjdXJlZFJlY3QoW3NlbGYgX2NvbnRl
bnRSZWN0Rm9yVXNlckludGVyYWN0aW9uXSk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUgdG9wTGVmdE9ic2N1cmVkSW5zZXRBZnRlclpvb20oKHVub2JzY3VyZWRSZWN0Lm1pblhNaW5Z
Q29ybmVyKCkgLSB2aXNpYmxlUmVjdC5taW5YTWluWUNvcm5lcigpKSAqIHZpc2libGVSZWN0U2Nh
bGVDaGFuZ2UpOworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSBib3R0b21SaWdodE9ic2N1
cmVkSW5zZXRBZnRlclpvb20oKHZpc2libGVSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSB1bm9ic2N1
cmVkUmVjdC5tYXhYTWF4WUNvcm5lcigpKSAqIHZpc2libGVSZWN0U2NhbGVDaGFuZ2UpOworCisg
ICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplIHVub2JzY3VyZWRSZWN0U2l6ZUFmdGVyWm9vbSh1
bm9ic2N1cmVkUmVjdC5zaXplKCkgKiB2aXNpYmxlUmVjdFNjYWxlQ2hhbmdlKTsKKworICAgIC8v
IENlbnRlciB0byB0aGUgdGFyZ2V0IHJlY3QuCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB1bm9i
c2N1cmVkUmVjdExvY2F0aW9uQWZ0ZXJab29tID0gdGFyZ2V0UmVjdC5sb2NhdGlvbigpIC0gKHVu
b2JzY3VyZWRSZWN0U2l6ZUFmdGVyWm9vbSAtIHRhcmdldFJlY3Quc2l6ZSgpKSAqIDAuNTsKKwor
ICAgIC8vIENlbnRlciB0byB0aGUgdGFwIHBvaW50IGluc3RlYWQgaW4gY2FzZSB0aGUgdGFyZ2V0
IHJlY3Qgd29uJ3QgZml0IGluIGEgZGlyZWN0aW9uLgorICAgIGlmICh0YXJnZXRSZWN0LndpZHRo
KCkgPiB1bm9ic2N1cmVkUmVjdFNpemVBZnRlclpvb20ud2lkdGgoKSkKKyAgICAgICAgdW5vYnNj
dXJlZFJlY3RMb2NhdGlvbkFmdGVyWm9vbS5zZXRYKG9yaWdpbi54KCkgLSB1bm9ic2N1cmVkUmVj
dFNpemVBZnRlclpvb20ud2lkdGgoKSAvIDIpOworICAgIGlmICh0YXJnZXRSZWN0LmhlaWdodCgp
ID4gdW5vYnNjdXJlZFJlY3RTaXplQWZ0ZXJab29tLmhlaWdodCgpKQorICAgICAgICB1bm9ic2N1
cmVkUmVjdExvY2F0aW9uQWZ0ZXJab29tLnNldFkob3JpZ2luLnkoKSAtIHVub2JzY3VyZWRSZWN0
U2l6ZUFmdGVyWm9vbS5oZWlnaHQoKSAvIDIpOworCisgICAgLy8gV2UgaGF2ZSBjb21wdXRlZCB3
aGVyZSB3ZSB3YW50IHRoZSB1bm9ic2N1cmVkIHJlY3QgdG8gYmUuIE5vdyBhZGp1c3QgZm9yIHRo
ZSBvYnNjdXJpbmcgaW5zZXRzLgorICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlUmVjdEFm
dGVyWm9vbSh1bm9ic2N1cmVkUmVjdExvY2F0aW9uQWZ0ZXJab29tLCB1bm9ic2N1cmVkUmVjdFNp
emVBZnRlclpvb20pOworICAgIHZpc2libGVSZWN0QWZ0ZXJab29tLm1vdmUoLXRvcExlZnRPYnNj
dXJlZEluc2V0QWZ0ZXJab29tKTsKKyAgICB2aXNpYmxlUmVjdEFmdGVyWm9vbS5leHBhbmQodG9w
TGVmdE9ic2N1cmVkSW5zZXRBZnRlclpvb20gKyBib3R0b21SaWdodE9ic2N1cmVkSW5zZXRBZnRl
clpvb20pOworCisgICAgW3NlbGYgX3pvb21Ub1BvaW50OnZpc2libGVSZWN0QWZ0ZXJab29tLmNl
bnRlcigpIGF0U2NhbGU6c2NhbGUgYW5pbWF0ZWQ6YW5pbWF0ZWRdOworfQorCitzdGF0aWMgV2Vi
Q29yZTo6RmxvYXRQb2ludCBjb25zdHJhaW5Db250ZW50T2Zmc2V0KFdlYkNvcmU6OkZsb2F0UG9p
bnQgY29udGVudE9mZnNldCwgV2ViQ29yZTo6RmxvYXRTaXplIGNvbnRlbnRTaXplLCBXZWJDb3Jl
OjpGbG9hdFNpemUgdW5vYnNjdXJlZENvbnRlbnRTaXplKQoreworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBtYXhpbXVtQ29udGVudE9mZnNldCA9IGNvbnRlbnRTaXplIC0gdW5vYnNjdXJlZENvbnRl
bnRTaXplOworICAgIHJldHVybiBjb250ZW50T2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihXZWJD
b3JlOjpGbG9hdFBvaW50KCksIFdlYkNvcmU6OkZsb2F0UG9pbnQobWF4aW11bUNvbnRlbnRPZmZz
ZXQpKTsKK30KKworLSAodm9pZClfc2Nyb2xsVG9Db250ZW50U2Nyb2xsUG9zaXRpb246KFdlYkNv
cmU6OkZsb2F0UG9pbnQpc2Nyb2xsUG9zaXRpb24gc2Nyb2xsT3JpZ2luOihXZWJDb3JlOjpJbnRQ
b2ludClzY3JvbGxPcmlnaW4KK3sKKyAgICBpZiAoX2NvbW1pdERpZFJlc3RvcmVTY3JvbGxQb3Np
dGlvbiB8fCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3
cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmZzZXQgPSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCB0b0Zsb2F0U2l6ZShzY3Jv
bGxPcmlnaW4pKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc2NhbGVkT2Zmc2V0ID0gY29u
dGVudE9mZnNldDsKKyAgICBDR0Zsb2F0IHpvb21TY2FsZSA9IGNvbnRlbnRab29tU2NhbGUoc2Vs
Zik7CisgICAgc2NhbGVkT2Zmc2V0LnNjYWxlKHpvb21TY2FsZSk7CisKKyAgICBDR1BvaW50IGNv
bnRlbnRPZmZzZXRJblNjcm9sbFZpZXdDb29yZGluYXRlcyA9IFtzZWxmIF9jb250ZW50T2Zmc2V0
QWRqdXN0ZWRGb3JPYnNjdXJlZEluc2V0OnNjYWxlZE9mZnNldF07CisgICAgY29udGVudE9mZnNl
dEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzID0gY29udGVudE9mZnNldEJvdW5kZWRJblZhbGlkUmFu
Z2UoX3Njcm9sbFZpZXcuZ2V0KCksIGNvbnRlbnRPZmZzZXRJblNjcm9sbFZpZXdDb29yZGluYXRl
cyk7CisKKyAgICBbX3Njcm9sbFZpZXcgX3N0b3BTY3JvbGxpbmdBbmRab29taW5nQW5pbWF0aW9u
c107CisKKyAgICBpZiAoIUNHUG9pbnRFcXVhbFRvUG9pbnQoY29udGVudE9mZnNldEluU2Nyb2xs
Vmlld0Nvb3JkaW5hdGVzLCBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF0pKQorICAgICAgICBb
X3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpjb250ZW50T2Zmc2V0SW5TY3JvbGxWaWV3Q29v
cmRpbmF0ZXNdOworICAgIGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGNoYW5nZWQg
YW55dGhpbmcsIHRoZXJlIHdvdWxkIG5vdCBiZSBhbnkgVmlzaWJsZUNvbnRlbnRSZWN0IHVwZGF0
ZSBzZW50IHRvIHRoZSBjb250ZW50LgorICAgICAgICAvLyBUaGUgV2ViUHJvY2VzcyB3b3VsZCBr
ZWVwIHRoZSBpbnZhbGlkIGNvbnRlbnRPZmZzZXQgYXMgaXRzIHNjcm9sbCBwb3NpdGlvbi4KKyAg
ICAgICAgLy8gVG8gc3luY2hyb25pemUgdGhlIFdlYlByb2Nlc3Mgd2l0aCB3aGF0IGlzIG9uIHNj
cmVlbiwgd2Ugc2VuZCB0aGUgVmlzaWJsZUNvbnRlbnRSZWN0IGFnYWluLgorICAgICAgICBfcGFn
ZS0+cmVzZW5kTGFzdFZpc2libGVDb250ZW50UmVjdHMoKTsKKyAgICB9Cit9CisKKy0gKEJPT0wp
X3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgb3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmlt
dW1TY3JvbGxEaXN0YW5jZQoreworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB1bm9ic2N1cmVkQ29u
dGVudFJlY3QoW3NlbGYgX2NvbnRlbnRSZWN0Rm9yVXNlckludGVyYWN0aW9uXSk7CisgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCB1bm9ic2N1cmVkQ29udGVudE9mZnNldCA9IHVub2JzY3VyZWRDb250
ZW50UmVjdC5sb2NhdGlvbigpOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBjb250ZW50U2l6ZShb
c2VsZi5fY3VycmVudENvbnRlbnRWaWV3IGJvdW5kc10uc2l6ZSk7CisKKyAgICAvLyBDZW50ZXIg
dGhlIHRhcmdldCByZWN0IGluIHRoZSBzY3JvbGwgdmlldy4KKyAgICAvLyBJZiB0aGUgdGFyZ2V0
IGRvZXNuJ3QgZml0IGluIHRoZSBzY3JvbGwgdmlldywgY2VudGVyIG9uIHRoZSBnZXN0dXJlIGxv
Y2F0aW9uIGluc3RlYWQuCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBuZXdVbm9ic2N1cmVkQ29u
dGVudE9mZnNldDsKKyAgICBpZiAodGFyZ2V0UmVjdC53aWR0aCgpIDw9IHVub2JzY3VyZWRDb250
ZW50UmVjdC53aWR0aCgpKQorICAgICAgICBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldC5zZXRY
KHRhcmdldFJlY3QueCgpIC0gKHVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpIC0gdGFyZ2V0
UmVjdC53aWR0aCgpKSAvIDIpOworICAgIGVsc2UKKyAgICAgICAgbmV3VW5vYnNjdXJlZENvbnRl
bnRPZmZzZXQuc2V0WChvcmlnaW4ueCgpIC0gdW5vYnNjdXJlZENvbnRlbnRSZWN0LndpZHRoKCkg
LyAyKTsKKyAgICBpZiAodGFyZ2V0UmVjdC5oZWlnaHQoKSA8PSB1bm9ic2N1cmVkQ29udGVudFJl
Y3QuaGVpZ2h0KCkpCisgICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LnNldFkodGFy
Z2V0UmVjdC55KCkgLSAodW5vYnNjdXJlZENvbnRlbnRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0UmVj
dC5oZWlnaHQoKSkgLyAyKTsKKyAgICBlbHNlCisgICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50
T2Zmc2V0LnNldFkob3JpZ2luLnkoKSAtIHVub2JzY3VyZWRDb250ZW50UmVjdC5oZWlnaHQoKSAv
IDIpOworICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0ID0gY29uc3RyYWluQ29udGVudE9m
ZnNldChuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldCwgY29udGVudFNpemUsIHVub2JzY3VyZWRD
b250ZW50UmVjdC5zaXplKCkpOworCisgICAgaWYgKHVub2JzY3VyZWRDb250ZW50T2Zmc2V0ID09
IG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0KSB7CisgICAgICAgIGlmICh0YXJnZXRSZWN0Lndp
ZHRoKCkgPiB1bm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgIG5ld1Vu
b2JzY3VyZWRDb250ZW50T2Zmc2V0LnNldFgob3JpZ2luLngoKSAtIHVub2JzY3VyZWRDb250ZW50
UmVjdC53aWR0aCgpIC8gMik7CisgICAgICAgIGlmICh0YXJnZXRSZWN0LmhlaWdodCgpID4gdW5v
YnNjdXJlZENvbnRlbnRSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgbmV3VW5vYnNjdXJlZENv
bnRlbnRPZmZzZXQuc2V0WShvcmlnaW4ueSgpIC0gdW5vYnNjdXJlZENvbnRlbnRSZWN0LmhlaWdo
dCgpIC8gMik7CisgICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0ID0gY29uc3RyYWlu
Q29udGVudE9mZnNldChuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldCwgY29udGVudFNpemUsIHVu
b2JzY3VyZWRDb250ZW50UmVjdC5zaXplKCkpOworICAgIH0KKworICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBzY3JvbGxWaWV3T2Zmc2V0RGVsdGEgPSBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldCAt
IHVub2JzY3VyZWRDb250ZW50T2Zmc2V0OworICAgIHNjcm9sbFZpZXdPZmZzZXREZWx0YS5zY2Fs
ZShjb250ZW50Wm9vbVNjYWxlKHNlbGYpKTsKKworICAgIGZsb2F0IHNjcm9sbERpc3RhbmNlID0g
c2Nyb2xsVmlld09mZnNldERlbHRhLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgaWYgKHNjcm9sbERp
c3RhbmNlIDwgbWluaW11bVNjcm9sbERpc3RhbmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBbX2NvbnRlbnRWaWV3IHdpbGxTdGFydFpvb21PclNjcm9sbF07CisKKyAgICBMT0dfV0lU
SF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIl9zY3JvbGxUb1JlY3Q6IHNjcm9sbGlu
ZyB0byAiIDw8IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XSArIHNjcm9sbFZpZXdPZmZzZXRE
ZWx0YSk7CisKKyAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDooW19zY3JvbGxWaWV3
IGNvbnRlbnRPZmZzZXRdICsgc2Nyb2xsVmlld09mZnNldERlbHRhKSBhbmltYXRlZDpZRVNdOwor
ICAgIHJldHVybiB0cnVlOworfQorCistICh2b2lkKV96b29tT3V0V2l0aE9yaWdpbjooV2ViQ29y
ZTo6RmxvYXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKK3sKKyAgICBbc2Vs
ZiBfem9vbVRvUG9pbnQ6b3JpZ2luIGF0U2NhbGU6W19zY3JvbGxWaWV3IG1pbmltdW1ab29tU2Nh
bGVdIGFuaW1hdGVkOmFuaW1hdGVkXTsKK30KKworLSAodm9pZClfem9vbVRvSW5pdGlhbFNjYWxl
V2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5p
bWF0ZWQKK3sKKyAgICBBU1NFUlQoX2luaXRpYWxTY2FsZUZhY3RvciA+IDApOworICAgIFtzZWxm
IF96b29tVG9Qb2ludDpvcmlnaW4gYXRTY2FsZTpfaW5pdGlhbFNjYWxlRmFjdG9yIGFuaW1hdGVk
OmFuaW1hdGVkXTsKK30KKworLy8gZm9jdXNlZEVsZW1lbnRSZWN0IGFuZCBzZWxlY3Rpb25SZWN0
IGFyZSBib3RoIGluIGRvY3VtZW50IGNvb3JkaW5hdGVzLgorLSAodm9pZClfem9vbVRvRm9jdXNS
ZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKWZvY3VzZWRFbGVtZW50UmVjdEluRG9jdW1l
bnRDb29yZGluYXRlcyBzZWxlY3Rpb25SZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXNl
bGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgaW5zaWRlRml4ZWQ6KEJPT0wpaW5zaWRl
Rml4ZWQKKyAgICBmb250U2l6ZTooZmxvYXQpZm9udFNpemUgbWluaW11bVNjYWxlOihkb3VibGUp
bWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBhbGxvd1NjYWxp
bmc6KEJPT0wpYWxsb3dTY2FsaW5nIGZvcmNlU2Nyb2xsOihCT09MKWZvcmNlU2Nyb2xsCit7Cisg
ICAgTE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICJfem9vbVRvRm9jdXNS
ZWN0OiIgPDwgZm9jdXNlZEVsZW1lbnRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIDw8ICIgc2Vs
ZWN0aW9uUmVjdDoiIDw8IHNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOworICAg
IFVOVVNFRF9QQVJBTShpbnNpZGVGaXhlZCk7CisKKyAgICBjb25zdCBkb3VibGUgbWluaW11bUhl
aWdodFRvU2hvd0NvbnRlbnRBYm92ZUtleWJvYXJkID0gMTA2OworICAgIGNvbnN0IENGVGltZUlu
dGVydmFsIGZvcm1Db250cm9sWm9vbUFuaW1hdGlvbkR1cmF0aW9uID0gMC4yNTsKKyAgICBjb25z
dCBkb3VibGUgY2FyZXRPZmZzZXRGcm9tV2luZG93RWRnZSA9IDg7CisKKyAgICBVSVdpbmRvdyAq
d2luZG93ID0gW19zY3JvbGxWaWV3IHdpbmRvd107CisKKyAgICAvLyBGaW5kIHRoZSBwb3J0aW9u
IG9mIHRoZSB2aWV3IHRoYXQgaXMgdmlzaWJsZSBvbiB0aGUgc2NyZWVuLgorICAgIFVJVmlld0Nv
bnRyb2xsZXIgKnRvcFZpZXdDb250cm9sbGVyID0gW1tbX3Njcm9sbFZpZXcgX3ZpZXdDb250cm9s
bGVyRm9yQW5jZXN0b3JdIF9yb290QW5jZXN0b3JWaWV3Q29udHJvbGxlcl0gX3ZpZXdDb250cm9s
bGVyRm9yU3VwcG9ydGVkSW50ZXJmYWNlT3JpZW50YXRpb25zXTsKKyAgICBVSVZpZXcgKmZ1bGxT
Y3JlZW5WaWV3ID0gdG9wVmlld0NvbnRyb2xsZXIudmlldzsKKyAgICBpZiAoIWZ1bGxTY3JlZW5W
aWV3KQorICAgICAgICBmdWxsU2NyZWVuVmlldyA9IHdpbmRvdzsKKworICAgIENHUmVjdCB1bm9i
c2N1cmVkU2Nyb2xsVmlld1JlY3RJbldlYlZpZXdDb29yZGluYXRlcyA9IFVJRWRnZUluc2V0c0lu
c2V0UmVjdChbc2VsZiBib3VuZHNdLCBfb2JzY3VyZWRJbnNldHMpOworICAgIENHUmVjdCB2aXNp
YmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGVzID0gQ0dSZWN0SW50ZXJzZWN0
aW9uKHVub2JzY3VyZWRTY3JvbGxWaWV3UmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzLCBbZnVsbFNj
cmVlblZpZXcgY29udmVydFJlY3Q6W2Z1bGxTY3JlZW5WaWV3IGJvdW5kc10gdG9WaWV3OnNlbGZd
KTsKKyAgICBDR1JlY3QgZm9ybUFzc2lzdGFudEZyYW1lSW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBb
d2luZG93IGNvbnZlcnRSZWN0Ol9pbnB1dFZpZXdCb3VuZHMgdG9WaWV3OnNlbGZdOworICAgIENH
UmVjdCBpbnRlcnNlY3Rpb25CZXR3ZWVuU2Nyb2xsVmlld0FuZEZvcm1Bc3Npc3RhbnQgPSBDR1Jl
Y3RJbnRlcnNlY3Rpb24odmlzaWJsZVNjcm9sbFZpZXdCb3VuZHNJbldlYlZpZXdDb29yZGluYXRl
cywgZm9ybUFzc2lzdGFudEZyYW1lSW5XZWJWaWV3Q29vcmRpbmF0ZXMpOworICAgIENHU2l6ZSB2
aXNpYmxlU2l6ZSA9IHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3Q29vcmRpbmF0ZXMu
c2l6ZTsKKworICAgIENHRmxvYXQgdmlzaWJsZU9mZnNldEZyb21Ub3AgPSAwOworICAgIENHRmxv
YXQgbWluaW11bURpc3RhbmNlRnJvbUtleWJvYXJkVG9UcmlnZ2VyU2Nyb2xsID0gMDsKKyAgICBp
ZiAoIUNHUmVjdElzRW1wdHkoaW50ZXJzZWN0aW9uQmV0d2VlblNjcm9sbFZpZXdBbmRGb3JtQXNz
aXN0YW50KSkgeworICAgICAgICBDR0Zsb2F0IGhlaWdodFZpc2libGVBYm92ZUZvcm1Bc3Npc3Rh
bnQgPSBDR1JlY3RHZXRNaW5ZKGludGVyc2VjdGlvbkJldHdlZW5TY3JvbGxWaWV3QW5kRm9ybUFz
c2lzdGFudCkgLSBDR1JlY3RHZXRNaW5ZKHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3
Q29vcmRpbmF0ZXMpOworICAgICAgICBDR0Zsb2F0IGhlaWdodFZpc2libGVCZWxvd0Zvcm1Bc3Np
c3RhbnQgPSBDR1JlY3RHZXRNYXhZKHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3Q29v
cmRpbmF0ZXMpIC0gQ0dSZWN0R2V0TWF4WShpbnRlcnNlY3Rpb25CZXR3ZWVuU2Nyb2xsVmlld0Fu
ZEZvcm1Bc3Npc3RhbnQpOworCisgICAgICAgIGlmIChoZWlnaHRWaXNpYmxlQWJvdmVGb3JtQXNz
aXN0YW50ID49IG1pbmltdW1IZWlnaHRUb1Nob3dDb250ZW50QWJvdmVLZXlib2FyZCB8fCBoZWln
aHRWaXNpYmxlQmVsb3dGb3JtQXNzaXN0YW50IDwgaGVpZ2h0VmlzaWJsZUFib3ZlRm9ybUFzc2lz
dGFudCkgeworICAgICAgICAgICAgdmlzaWJsZVNpemUuaGVpZ2h0ID0gaGVpZ2h0VmlzaWJsZUFi
b3ZlRm9ybUFzc2lzdGFudDsKKyAgICAgICAgICAgIG1pbmltdW1EaXN0YW5jZUZyb21LZXlib2Fy
ZFRvVHJpZ2dlclNjcm9sbCA9IDUwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmlz
aWJsZVNpemUuaGVpZ2h0ID0gaGVpZ2h0VmlzaWJsZUJlbG93Rm9ybUFzc2lzdGFudDsKKyAgICAg
ICAgICAgIHZpc2libGVPZmZzZXRGcm9tVG9wID0gQ0dSZWN0R2V0TWF4WShpbnRlcnNlY3Rpb25C
ZXR3ZWVuU2Nyb2xsVmlld0FuZEZvcm1Bc3Npc3RhbnQpIC0gQ0dSZWN0R2V0TWluWSh2aXNpYmxl
U2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFpvb20gYXJvdW5kIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgZnJhbWUuIFdlIHVz
ZSBhICJzdGFuZGFyZCIgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIHByb3BlciBmcmFtZS4KKyAgICBk
b3VibGUgY3VycmVudFNjYWxlID0gY29udGVudFpvb21TY2FsZShzZWxmKTsKKyAgICBkb3VibGUg
c2NhbGUgPSBjdXJyZW50U2NhbGU7CisgICAgaWYgKGFsbG93U2NhbGluZykgeworI2lmIFBMQVRG
T1JNKFdBVENIT1MpCisgICAgICAgIGNvbnN0IENHRmxvYXQgbWluaW11bU1hcmdpbkZvclpvb21p
bmdUb0VudGlyZUZvY3VzUmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzID0gMTA7CisgICAgICAgIGNv
bnN0IENHRmxvYXQgbWF4aW11bU1hcmdpbkZvclpvb21pbmdUb0VudGlyZUZvY3VzUmVjdEluV2Vi
Vmlld0Nvb3JkaW5hdGVzID0gMzU7CisKKyAgICAgICAgQ0dSZWN0IG1pbmltdW1UYXJnZXRSZWN0
SW5Eb2N1bWVudENvb3JkaW5hdGVzID0gVUlSZWN0SW5zZXRFZGdlcyhmb2N1c2VkRWxlbWVudFJl
Y3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMsIFVJUmVjdEVkZ2VBbGwsIC1taW5pbXVtTWFyZ2luRm9y
Wm9vbWluZ1RvRW50aXJlRm9jdXNSZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgLyBjdXJyZW50U2Nh
bGUpOworICAgICAgICBDR1JlY3QgbWF4aW11bVRhcmdldFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0
ZXMgPSBVSVJlY3RJbnNldEVkZ2VzKGZvY3VzZWRFbGVtZW50UmVjdEluRG9jdW1lbnRDb29yZGlu
YXRlcywgVUlSZWN0RWRnZUFsbCwgLW1heGltdW1NYXJnaW5Gb3Jab29taW5nVG9FbnRpcmVGb2N1
c1JlY3RJbldlYlZpZXdDb29yZGluYXRlcyAvIGN1cnJlbnRTY2FsZSk7CisKKyAgICAgICAgZG91
YmxlIGNsYW1wZWRNYXhpbXVtVGFyZ2V0U2NhbGUgPSBjbGFtcFRvPGRvdWJsZT4oc3RkOjptaW4o
dmlzaWJsZVNpemUud2lkdGggLyBDR1JlY3RHZXRXaWR0aChtaW5pbXVtVGFyZ2V0UmVjdEluRG9j
dW1lbnRDb29yZGluYXRlcyksIHZpc2libGVTaXplLmhlaWdodCAvIENHUmVjdEdldEhlaWdodCht
aW5pbXVtVGFyZ2V0UmVjdEluRG9jdW1lbnRDb29yZGluYXRlcykpLCBtaW5pbXVtU2NhbGUsIG1h
eGltdW1TY2FsZSk7CisgICAgICAgIGRvdWJsZSBjbGFtcGVkTWluaW11bVRhcmdldFNjYWxlID0g
Y2xhbXBUbzxkb3VibGU+KHN0ZDo6bWluKHZpc2libGVTaXplLndpZHRoIC8gQ0dSZWN0R2V0V2lk
dGgobWF4aW11bVRhcmdldFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpLCB2aXNpYmxlU2l6ZS5o
ZWlnaHQgLyBDR1JlY3RHZXRIZWlnaHQobWF4aW11bVRhcmdldFJlY3RJbkRvY3VtZW50Q29vcmRp
bmF0ZXMpKSwgbWluaW11bVNjYWxlLCBtYXhpbXVtU2NhbGUpOworICAgICAgICBzY2FsZSA9IGNs
YW1wVG88ZG91YmxlPihjdXJyZW50U2NhbGUsIGNsYW1wZWRNaW5pbXVtVGFyZ2V0U2NhbGUsIGNs
YW1wZWRNYXhpbXVtVGFyZ2V0U2NhbGUpOworI2Vsc2UKKyAgICAgICAgY29uc3QgZG91YmxlIHdl
YlZpZXdTdGFuZGFyZEZvbnRTaXplID0gMTY7CisgICAgICAgIHNjYWxlID0gY2xhbXBUbzxkb3Vi
bGU+KHdlYlZpZXdTdGFuZGFyZEZvbnRTaXplIC8gZm9udFNpemUsIG1pbmltdW1TY2FsZSwgbWF4
aW11bVNjYWxlKTsKKyNlbmRpZgorICAgIH0KKworICAgIENHRmxvYXQgZG9jdW1lbnRXaWR0aCA9
IFtfY29udGVudFZpZXcgYm91bmRzXS5zaXplLndpZHRoOworICAgIHNjYWxlID0gQ0dSb3VuZChk
b2N1bWVudFdpZHRoICogc2NhbGUpIC8gZG9jdW1lbnRXaWR0aDsKKworICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlID0gZm9jdXNlZEVsZW1lbnRSZWN0
SW5Eb2N1bWVudENvb3JkaW5hdGVzOworICAgIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUu
c2NhbGUoc2NhbGUpOworICAgIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUubW92ZUJ5KFtf
Y29udGVudFZpZXcgZnJhbWVdLm9yaWdpbik7CisKKyAgICBCT09MIHNlbGVjdGlvblJlY3RJc05v
dE51bGwgPSAhc2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGluYXRlcy5pc1plcm8oKTsKKyAg
ICBCT09MIGRvTm90U2Nyb2xsV2hlbkNvbnRlbnRJc0FscmVhZHlWaXNpYmxlID0gIWZvcmNlU2Ny
b2xsIHx8IFtfY29udGVudFZpZXcgX3Nob3VsZEF2b2lkU2Nyb2xsaW5nV2hlbkZvY3VzZWRDb250
ZW50SXNWaXNpYmxlXTsKKyAgICBpZiAoZG9Ob3RTY3JvbGxXaGVuQ29udGVudElzQWxyZWFkeVZp
c2libGUpIHsKKyAgICAgICAgQ0dSZWN0IGN1cnJlbnRseVZpc2libGVSZWdpb25JbldlYlZpZXdD
b29yZGluYXRlczsKKyAgICAgICAgY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3Jk
aW5hdGVzLm9yaWdpbiA9IHVub2JzY3VyZWRTY3JvbGxWaWV3UmVjdEluV2ViVmlld0Nvb3JkaW5h
dGVzLm9yaWdpbjsKKyAgICAgICAgY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3Jk
aW5hdGVzLm9yaWdpbi55ICs9IHZpc2libGVPZmZzZXRGcm9tVG9wOworICAgICAgICBjdXJyZW50
bHlWaXNpYmxlUmVnaW9uSW5XZWJWaWV3Q29vcmRpbmF0ZXMuc2l6ZSA9IHZpc2libGVTaXplOwor
ICAgICAgICBjdXJyZW50bHlWaXNpYmxlUmVnaW9uSW5XZWJWaWV3Q29vcmRpbmF0ZXMuc2l6ZS5o
ZWlnaHQgLT0gbWluaW11bURpc3RhbmNlRnJvbUtleWJvYXJkVG9UcmlnZ2VyU2Nyb2xsOworCisg
ICAgICAgIC8vIERvbid0IGJvdGhlciBzY3JvbGxpbmcgaWYgdGhlIGVudGlyZSBub2RlIGlzIGFs
cmVhZHkgdmlzaWJsZSwgd2hldGhlciBvciBub3Qgd2UgZ290IGEgc2VsZWN0aW9uUmVjdC4KKyAg
ICAgICAgaWYgKENHUmVjdENvbnRhaW5zUmVjdChjdXJyZW50bHlWaXNpYmxlUmVnaW9uSW5XZWJW
aWV3Q29vcmRpbmF0ZXMsIFtzZWxmIGNvbnZlcnRSZWN0OmZvY3VzZWRFbGVtZW50UmVjdEluRG9j
dW1lbnRDb29yZGluYXRlcyBmcm9tVmlldzpfY29udGVudFZpZXcuZ2V0KCldKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAvLyBEb24ndCBib3RoZXIgc2Nyb2xsaW5nIGlmIHdlIGhh
dmUgYSB2YWxpZCBzZWxlY3Rpb25SZWN0IGFuZCBpdCBpcyBhbHJlYWR5IHZpc2libGUuCisgICAg
ICAgIGlmIChzZWxlY3Rpb25SZWN0SXNOb3ROdWxsICYmIENHUmVjdENvbnRhaW5zUmVjdChjdXJy
ZW50bHlWaXNpYmxlUmVnaW9uSW5XZWJWaWV3Q29vcmRpbmF0ZXMsIFtzZWxmIGNvbnZlcnRSZWN0
OnNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgZnJvbVZpZXc6X2NvbnRlbnRWaWV3
LmdldCgpXSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ugd2FudCB0
byBjZW50ZXIgdGhlIGZvY3VzZWQgZWxlbWVudCB3aXRoaW4gdGhlIHZpZXdwb3J0LCB3aXRoIGFz
IG11Y2ggc3BhY2luZyBvbiBhbGwgc2lkZXMgYXMKKyAgICAvLyB3ZSBjYW4gZ2V0IGJhc2VkIG9u
IHRoZSB2aXNpYmxlIGFyZWEgYWZ0ZXIgem9vbWluZy4gVGhlIHNwYWNpbmcgaW4gZWl0aGVyIGRp
bWVuc2lvbiBpcyBoYWxmIHRoZQorICAgIC8vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2l6ZSBv
ZiB0aGUgRE9NIG5vZGUgYW5kIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlIGZyYW1lLgorICAgIC8v
IElmIHRoZSBlbGVtZW50IGlzIHRvbyB3aWRlIHRvIGJlIGhvcml6b250YWxseSBjZW50ZXJlZCBv
ciB0b28gdGFsbCB0byBiZSB2ZXJ0aWNhbGx5IGNlbnRlcmVkLCB3ZQorICAgIC8vIGluc3RlYWQg
c2Nyb2xsIHN1Y2ggdGhhdCB0aGUgbGVmdCBlZGdlIG9yIHRvcCBlZGdlIG9mIHRoZSBlbGVtZW50
IGlzIHdpdGhpbiB0aGUgbGVmdCBoYWxmIG9yIHRvcAorICAgIC8vIGhhbGYgb2YgdGhlIHZpZXdw
b3J0LCByZXNwZWN0aXZlbHkuCisgICAgQ0dGbG9hdCBob3Jpem9udGFsU3BhY2VJbldlYlZpZXdD
b29yZGluYXRlcyA9ICh2aXNpYmxlU2l6ZS53aWR0aCAtIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3
U2NhbGUud2lkdGgoKSkgLyAyLjA7CisgICAgQ0dGbG9hdCB2ZXJ0aWNhbFNwYWNlSW5XZWJWaWV3
Q29vcmRpbmF0ZXMgPSAodmlzaWJsZVNpemUuaGVpZ2h0IC0gZm9jdXNlZEVsZW1lbnRSZWN0SW5O
ZXdTY2FsZS5oZWlnaHQoKSkgLyAyLjA7CisKKyAgICBhdXRvIHRvcExlZnQgPSBDR1BvaW50WmVy
bzsKKyAgICBhdXRvIHNjcm9sbFZpZXdJbnNldHMgPSBbX3Njcm9sbFZpZXcgX2VmZmVjdGl2ZUNv
bnRlbnRJbnNldF07CisgICAgYXV0byBjdXJyZW50VG9wTGVmdCA9IFtfc2Nyb2xsVmlldyBjb250
ZW50T2Zmc2V0XTsKKworICAgIGlmIChfaGF2ZVNldE9ic2N1cmVkSW5zZXRzKSB7CisgICAgICAg
IGN1cnJlbnRUb3BMZWZ0LnggKz0gX29ic2N1cmVkSW5zZXRzLmxlZnQ7CisgICAgICAgIGN1cnJl
bnRUb3BMZWZ0LnkgKz0gX29ic2N1cmVkSW5zZXRzLnRvcDsKKyAgICB9CisKKyAgICBpZiAoaG9y
aXpvbnRhbFNwYWNlSW5XZWJWaWV3Q29vcmRpbmF0ZXMgPiAwKQorICAgICAgICB0b3BMZWZ0Lngg
PSBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLngoKSAtIGhvcml6b250YWxTcGFjZUluV2Vi
Vmlld0Nvb3JkaW5hdGVzOworICAgIGVsc2UgeworICAgICAgICBhdXRvIG1pbmltdW1PZmZzZXRU
b1JldmVhbExlZnRFZGdlID0gc3RkOjptYXgoLXNjcm9sbFZpZXdJbnNldHMubGVmdCwgZm9jdXNl
ZEVsZW1lbnRSZWN0SW5OZXdTY2FsZS54KCkgLSB2aXNpYmxlU2l6ZS53aWR0aCAvIDIpOworICAg
ICAgICBhdXRvIG1heGltdW1PZmZzZXRUb1JldmVhbExlZnRFZGdlID0gZm9jdXNlZEVsZW1lbnRS
ZWN0SW5OZXdTY2FsZS54KCk7CisgICAgICAgIHRvcExlZnQueCA9IGNsYW1wVG88ZG91YmxlPihj
dXJyZW50VG9wTGVmdC54LCBtaW5pbXVtT2Zmc2V0VG9SZXZlYWxMZWZ0RWRnZSwgbWF4aW11bU9m
ZnNldFRvUmV2ZWFsTGVmdEVkZ2UpOworICAgIH0KKworICAgIGlmICh2ZXJ0aWNhbFNwYWNlSW5X
ZWJWaWV3Q29vcmRpbmF0ZXMgPiAwKQorICAgICAgICB0b3BMZWZ0LnkgPSBmb2N1c2VkRWxlbWVu
dFJlY3RJbk5ld1NjYWxlLnkoKSAtIHZlcnRpY2FsU3BhY2VJbldlYlZpZXdDb29yZGluYXRlczsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBtaW5pbXVtT2Zmc2V0VG9SZXZlYWxUb3BFZGdlID0g
c3RkOjptYXgoLXNjcm9sbFZpZXdJbnNldHMudG9wLCBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1Nj
YWxlLnkoKSAtIHZpc2libGVTaXplLmhlaWdodCAvIDIpOworICAgICAgICBhdXRvIG1heGltdW1P
ZmZzZXRUb1JldmVhbFRvcEVkZ2UgPSBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLnkoKTsK
KyAgICAgICAgdG9wTGVmdC55ID0gY2xhbXBUbzxkb3VibGU+KGN1cnJlbnRUb3BMZWZ0LnksIG1p
bmltdW1PZmZzZXRUb1JldmVhbFRvcEVkZ2UsIG1heGltdW1PZmZzZXRUb1JldmVhbFRvcEVkZ2Up
OworICAgIH0KKworICAgIHRvcExlZnQueSAtPSB2aXNpYmxlT2Zmc2V0RnJvbVRvcDsKKworICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBkb2N1bWVudEJvdW5kc0luTmV3U2NhbGUgPSBbX2NvbnRlbnRW
aWV3IGJvdW5kc107CisgICAgZG9jdW1lbnRCb3VuZHNJbk5ld1NjYWxlLnNjYWxlKHNjYWxlKTsK
KyAgICBkb2N1bWVudEJvdW5kc0luTmV3U2NhbGUubW92ZUJ5KFtfY29udGVudFZpZXcgZnJhbWVd
Lm9yaWdpbik7CisKKyAgICBDR0Zsb2F0IG1pbmltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0
SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSAtSU5GSU5JVFk7CisgICAgQ0dGbG9hdCBtaW5pbXVtQWxs
b3dhYmxlVmVydGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcyA9IC1JTkZJTklUWTsKKyAg
ICBDR0Zsb2F0IG1heGltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0SW5XZWJWaWV3Q29vcmRp
bmF0ZXMgPSBDR1JlY3RHZXRNYXhYKGRvY3VtZW50Qm91bmRzSW5OZXdTY2FsZSkgLSB2aXNpYmxl
U2l6ZS53aWR0aDsKKyAgICBDR0Zsb2F0IG1heGltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldElu
V2ViVmlld0Nvb3JkaW5hdGVzID0gQ0dSZWN0R2V0TWF4WShkb2N1bWVudEJvdW5kc0luTmV3U2Nh
bGUpIC0gdmlzaWJsZVNpemUuaGVpZ2h0OworCisgICAgaWYgKHNlbGVjdGlvblJlY3RJc05vdE51
bGwpIHsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RJbk5ld1NjYWxl
ID0gc2VsZWN0aW9uUmVjdEluRG9jdW1lbnRDb29yZGluYXRlczsKKyAgICAgICAgc2VsZWN0aW9u
UmVjdEluTmV3U2NhbGUuc2NhbGUoc2NhbGUpOworICAgICAgICBzZWxlY3Rpb25SZWN0SW5OZXdT
Y2FsZS5tb3ZlQnkoW19jb250ZW50VmlldyBmcmFtZV0ub3JpZ2luKTsKKyAgICAgICAgLy8gQWRq
dXN0IHRoZSBtaW4gYW5kIG1heCBhbGxvd2FibGUgc2Nyb2xsIG9mZnNldHMsIHN1Y2ggdGhhdCB0
aGUgc2VsZWN0aW9uIHJlY3QgcmVtYWlucyB2aXNpYmxlLgorICAgICAgICBtaW5pbXVtQWxsb3dh
YmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzID0gQ0dSZWN0R2V0TWF4WChz
ZWxlY3Rpb25SZWN0SW5OZXdTY2FsZSkgKyBjYXJldE9mZnNldEZyb21XaW5kb3dFZGdlIC0gdmlz
aWJsZVNpemUud2lkdGg7CisgICAgICAgIG1pbmltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldElu
V2ViVmlld0Nvb3JkaW5hdGVzID0gQ0dSZWN0R2V0TWF4WShzZWxlY3Rpb25SZWN0SW5OZXdTY2Fs
ZSkgKyBjYXJldE9mZnNldEZyb21XaW5kb3dFZGdlIC0gdmlzaWJsZVNpemUuaGVpZ2h0IC0gdmlz
aWJsZU9mZnNldEZyb21Ub3A7CisgICAgICAgIG1heGltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zm
c2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBzdGQ6Om1pbjxDR0Zsb2F0PihtYXhpbXVtQWxsb3dh
YmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzLCBDR1JlY3RHZXRNaW5YKHNl
bGVjdGlvblJlY3RJbk5ld1NjYWxlKSAtIGNhcmV0T2Zmc2V0RnJvbVdpbmRvd0VkZ2UpOworICAg
ICAgICBtYXhpbXVtQWxsb3dhYmxlVmVydGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcyA9
IHN0ZDo6bWluPENHRmxvYXQ+KG1heGltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldEluV2ViVmll
d0Nvb3JkaW5hdGVzLCBDR1JlY3RHZXRNaW5ZKHNlbGVjdGlvblJlY3RJbk5ld1NjYWxlKSAtIGNh
cmV0T2Zmc2V0RnJvbVdpbmRvd0VkZ2UgLSB2aXNpYmxlT2Zmc2V0RnJvbVRvcCk7CisgICAgfQor
CisgICAgLy8gQ29uc3RyYWluIHRoZSBsZWZ0IGVkZ2UgaW4gZG9jdW1lbnQgY29vcmRpbmF0ZXMg
c28gdGhhdDoKKyAgICAvLyAgLSBpdCBpc24ndCBzbyBzbWFsbCB0aGF0IHRoZSBzY3JvbGxWaXNp
YmxlUmVjdCBpc24ndCB2aXNpYmxlIG9uIHRoZSBzY3JlZW4KKyAgICAvLyAgLSBpdCBpc24ndCBz
byBncmVhdCB0aGF0IHRoZSBkb2N1bWVudCdzIHJpZ2h0IGVkZ2UgaXMgbGVzcyB0aGFuIHRoZSBy
aWdodCBlZGdlIG9mIHRoZSBzY3JlZW4KKyAgICB0b3BMZWZ0LnggPSBjbGFtcFRvPENHRmxvYXQ+
KHRvcExlZnQueCwgbWluaW11bUFsbG93YWJsZUhvcml6b250YWxPZmZzZXRJbldlYlZpZXdDb29y
ZGluYXRlcywgbWF4aW11bUFsbG93YWJsZUhvcml6b250YWxPZmZzZXRJbldlYlZpZXdDb29yZGlu
YXRlcyk7CisKKyAgICAvLyBDb25zdHJhaW4gdGhlIHRvcCBlZGdlIGluIGRvY3VtZW50IGNvb3Jk
aW5hdGVzIHNvIHRoYXQ6CisgICAgLy8gIC0gaXQgaXNuJ3Qgc28gc21hbGwgdGhhdCB0aGUgc2Ny
b2xsVmlzaWJsZVJlY3QgaXNuJ3QgdmlzaWJsZSBvbiB0aGUgc2NyZWVuCisgICAgLy8gIC0gaXQg
aXNuJ3Qgc28gZ3JlYXQgdGhhdCB0aGUgZG9jdW1lbnQncyBib3R0b20gZWRnZSBpcyBoaWdoZXIg
dGhhbiB0aGUgdG9wIG9mIHRoZSBmb3JtIGFzc2lzdGFudAorICAgIHRvcExlZnQueSA9IGNsYW1w
VG88Q0dGbG9hdD4odG9wTGVmdC55LCBtaW5pbXVtQWxsb3dhYmxlVmVydGljYWxPZmZzZXRJbldl
YlZpZXdDb29yZGluYXRlcywgbWF4aW11bUFsbG93YWJsZVZlcnRpY2FsT2Zmc2V0SW5XZWJWaWV3
Q29vcmRpbmF0ZXMpOworCisgICAgaWYgKF9oYXZlU2V0T2JzY3VyZWRJbnNldHMpIHsKKyAgICAg
ICAgLy8gVGhpcyBsb29rcyB1bmludHVpdGl2ZSwgYnV0IGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0
byBwcmVjaXNlbHkgY2VudGVyIHRoZSBmb2N1c2VkIGVsZW1lbnQgaW4gdGhlIHZpc2libGUgYXJl
YS4KKyAgICAgICAgLy8gVGhlIHRvcCBsZWZ0IHBvc2l0aW9uIGFscmVhZHkgYWNjb3VudHMgZm9y
IHRvcCBhbmQgbGVmdCBvYnNjdXJlZCBpbnNldHMgLSBpLmUuLCBhIHRvcExlZnQgb2YgKDAsIDAp
IGNvcnJlc3BvbmRzCisgICAgICAgIC8vIHRvIHRoZSB0b3AtIGFuZCBsZWZ0LW1vc3QgcG9pbnQg
YmVsb3cgKGFuZCB0byB0aGUgcmlnaHQgb2YpIHRoZSB0b3AgaW5zZXQgYXJlYSBhbmQgbGVmdCBp
bnNldCBhcmVhcywgcmVzcGVjdGl2ZWx5LgorICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHRlbGxp
bmcgV0tTY3JvbGxWaWV3IHRvIHNjcm9sbCB0byBhIGdpdmVuIGNlbnRlciBwb3NpdGlvbiwgdGhp
cyBjZW50ZXIgcG9zaXRpb24gaXMgY29tcHV0ZWQgcmVsYXRpdmUKKyAgICAgICAgLy8gdG8gdGhl
IGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIHNjcm9sbCB2aWV3LiBUaHVzLCB0byBjb21wdXRlIG91
ciBjZW50ZXIgcG9zaXRpb24gZnJvbSB0aGUgdG9wIGxlZnQgcG9zaXRpb24sIHdlCisgICAgICAg
IC8vIG5lZWQgdG8gZmlyc3QgbW92ZSB0aGUgdG9wIGxlZnQgcG9zaXRpb24gdXAgYW5kIHRvIHRo
ZSBsZWZ0LCBhbmQgdGhlbiBhZGQgaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgY29u
dGVudAorICAgICAgICAvLyBhcmVhIChpbmNsdWRpbmcgb2JzY3VyZWQgaW5zZXRzKS4KKyAgICAg
ICAgdG9wTGVmdC54IC09IF9vYnNjdXJlZEluc2V0cy5sZWZ0OworICAgICAgICB0b3BMZWZ0Lnkg
LT0gX29ic2N1cmVkSW5zZXRzLnRvcDsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IG5ld0NlbnRlciA9IENHUG9pbnRNYWtlKHRvcExlZnQueCArIENHUmVjdEdldFdpZHRoKHNlbGYu
Ym91bmRzKSAvIDIsIHRvcExlZnQueSArIENHUmVjdEdldEhlaWdodChzZWxmLmJvdW5kcykgLyAy
KTsKKworICAgIGlmIChzY2FsZSAhPSBjdXJyZW50U2NhbGUpCisgICAgICAgIF9wYWdlLT53aWxs
U3RhcnRVc2VyVHJpZ2dlcmVkWm9vbWluZygpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFZpc2li
bGVSZWN0cywgc3RyZWFtIDw8ICJfem9vbVRvRm9jdXNSZWN0OiB6b29taW5nIHRvICIgPDwgbmV3
Q2VudGVyIDw8ICIgc2NhbGU6IiA8PCBzY2FsZSk7CisKKyAgICAvLyBUaGUgbmV3Q2VudGVyIGhh
cyBiZWVuIGNvbXB1dGVkIGluIHRoZSBuZXcgc2NhbGUsIGJ1dCBfem9vbVRvQ2VudGVyIGV4cGVj
dGVkIHRoZSBjZW50ZXIgdG8gYmUgaW4gdGhlIG9yaWdpbmFsIHNjYWxlLgorICAgIG5ld0NlbnRl
ci5zY2FsZSgxIC8gc2NhbGUpOworICAgIFtfc2Nyb2xsVmlldyBfem9vbVRvQ2VudGVyOm5ld0Nl
bnRlciBzY2FsZTpzY2FsZSBkdXJhdGlvbjpmb3JtQ29udHJvbFpvb21BbmltYXRpb25EdXJhdGlv
biBmb3JjZTpZRVNdOworfQorCistIChkb3VibGUpX2luaXRpYWxTY2FsZUZhY3RvcgoreworICAg
IHJldHVybiBfaW5pdGlhbFNjYWxlRmFjdG9yOworfQorCistIChkb3VibGUpX2NvbnRlbnRab29t
U2NhbGUKK3sKKyAgICByZXR1cm4gY29udGVudFpvb21TY2FsZShzZWxmKTsKK30KKworLSAoZG91
YmxlKV90YXJnZXRDb250ZW50Wm9vbVNjYWxlRm9yUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jil0YXJnZXRSZWN0IGN1cnJlbnRTY2FsZTooZG91YmxlKWN1cnJlbnRTY2FsZSBmaXRFbnRp
cmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNj
YWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZQoreworICAgIFdlYkNvcmU6OkZs
b2F0U2l6ZSB1bm9ic2N1cmVkQ29udGVudFNpemUoW3NlbGYgX2NvbnRlbnRSZWN0Rm9yVXNlcklu
dGVyYWN0aW9uXS5zaXplKTsKKyAgICBkb3VibGUgaG9yaXpvbnRhbFNjYWxlID0gdW5vYnNjdXJl
ZENvbnRlbnRTaXplLndpZHRoKCkgKiBjdXJyZW50U2NhbGUgLyB0YXJnZXRSZWN0LndpZHRoKCk7
CisgICAgZG91YmxlIHZlcnRpY2FsU2NhbGUgPSB1bm9ic2N1cmVkQ29udGVudFNpemUuaGVpZ2h0
KCkgKiBjdXJyZW50U2NhbGUgLyB0YXJnZXRSZWN0LmhlaWdodCgpOworCisgICAgaG9yaXpvbnRh
bFNjYWxlID0gc3RkOjptaW4oc3RkOjptYXgoaG9yaXpvbnRhbFNjYWxlLCBtaW5pbXVtU2NhbGUp
LCBtYXhpbXVtU2NhbGUpOworICAgIHZlcnRpY2FsU2NhbGUgPSBzdGQ6Om1pbihzdGQ6Om1heCh2
ZXJ0aWNhbFNjYWxlLCBtaW5pbXVtU2NhbGUpLCBtYXhpbXVtU2NhbGUpOworCisgICAgcmV0dXJu
IGZpdEVudGlyZVJlY3QgPyBzdGQ6Om1pbihob3Jpem9udGFsU2NhbGUsIHZlcnRpY2FsU2NhbGUp
IDogaG9yaXpvbnRhbFNjYWxlOworfQorCistIChCT09MKV96b29tVG9SZWN0OihXZWJDb3JlOjpG
bG9hdFJlY3QpdGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdp
biBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3QgbWluaW11bVNjYWxlOihkb3VibGUp
bWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBtaW5pbXVtU2Ny
b2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5jZQoreworICAgIGNvbnN0IGZs
b2F0IG1heGltdW1TY2FsZUZhY3RvckRlbHRhRm9yUGFuU2Nyb2xsID0gMC4wMjsKKworICAgIGRv
dWJsZSBjdXJyZW50U2NhbGUgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOworICAgIGRvdWJsZSB0
YXJnZXRTY2FsZSA9IFtzZWxmIF90YXJnZXRDb250ZW50Wm9vbVNjYWxlRm9yUmVjdDp0YXJnZXRS
ZWN0IGN1cnJlbnRTY2FsZTpjdXJyZW50U2NhbGUgZml0RW50aXJlUmVjdDpmaXRFbnRpcmVSZWN0
IG1pbmltdW1TY2FsZTptaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOm1heGltdW1TY2FsZV07CisK
KyAgICBpZiAoZmFicyh0YXJnZXRTY2FsZSAtIGN1cnJlbnRTY2FsZSkgPCBtYXhpbXVtU2NhbGVG
YWN0b3JEZWx0YUZvclBhblNjcm9sbCkgeworICAgICAgICBpZiAoW3NlbGYgX3Njcm9sbFRvUmVj
dDp0YXJnZXRSZWN0IG9yaWdpbjpvcmlnaW4gbWluaW11bVNjcm9sbERpc3RhbmNlOm1pbmltdW1T
Y3JvbGxEaXN0YW5jZV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYg
KHRhcmdldFNjYWxlICE9IGN1cnJlbnRTY2FsZSkgeworICAgICAgICBbc2VsZiBfem9vbVRvUmVj
dDp0YXJnZXRSZWN0IGF0U2NhbGU6dGFyZ2V0U2NhbGUgb3JpZ2luOm9yaWdpbiBhbmltYXRlZDpZ
RVNdOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy0gKHZvaWQpZGlkTW92ZVRvV2luZG93Cit7CisgICAgX3BhZ2UtPmFjdGl2aXR5U3RhdGVE
aWRDaGFuZ2UoV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6YWxsRmxhZ3MoKSk7CisgICAgX3BhZ2Ut
PndlYlZpZXdEaWRNb3ZlVG9XaW5kb3coKTsKK30KKworLSAodm9pZClfc2V0T3BhcXVlSW50ZXJu
YWw6KEJPT0wpb3BhcXVlCit7CisgICAgW3N1cGVyIHNldE9wYXF1ZTpvcGFxdWVdOworCisgICAg
W19jb250ZW50VmlldyBzZXRPcGFxdWU6b3BhcXVlXTsKKworICAgIGlmICghX3BhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIE9wdGlvbmFsPFdlYkNvcmU6OkNvbG9yPiBiYWNrZ3JvdW5kQ29s
b3I7CisgICAgaWYgKCFvcGFxdWUpCisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6
OkNvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgX3BhZ2UtPnNldEJhY2tn
cm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworCisgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZp
ZXdCYWNrZ3JvdW5kXTsKK30KKworLSAodm9pZClzZXRPcGFxdWU6KEJPT0wpb3BhcXVlCit7Cisg
ICAgaWYgKG9wYXF1ZSA9PSBzZWxmLm9wYXF1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW3Nl
bGYgX3NldE9wYXF1ZUludGVybmFsOm9wYXF1ZV07Cit9CisKKy0gKHZvaWQpc2V0QmFja2dyb3Vu
ZENvbG9yOihVSUNvbG9yICopYmFja2dyb3VuZENvbG9yCit7CisgICAgW3N1cGVyIHNldEJhY2tn
cm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOworICAgIFtfY29udGVudFZpZXcgc2V0QmFja2dy
b3VuZENvbG9yOmJhY2tncm91bmRDb2xvcl07CisgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdC
YWNrZ3JvdW5kXTsKK30KKworLSAoQk9PTClfYWxsb3dzRG91YmxlVGFwR2VzdHVyZXMKK3sKKyAg
ICBpZiAoX2Zhc3RDbGlja2luZ0lzRGlzYWJsZWQpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAg
ICAvLyBJZiB0aGUgcGFnZSBpcyBub3QgdXNlciBzY2FsYWJsZSwgd2UgZG9uJ3QgYWxsb3cgZG91
YmxlIHRhcCBnZXN0dXJlcy4KKyAgICBpZiAoIVtfc2Nyb2xsVmlldyBpc1pvb21FbmFibGVkXSB8
fCBbX3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2FsZV0gPj0gW19zY3JvbGxWaWV3IG1heGltdW1a
b29tU2NhbGVdKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICAvLyBJZiB0aGUgdmlld3BvcnQg
d2lkdGggd2FzIG5vdCBleHBsaWNpdCwgd2UgYWxsb3cgZG91YmxlIHRhcCBnZXN0dXJlcy4KKyAg
ICBpZiAoIV92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0IHx8IF92aWV3cG9ydE1ldGFU
YWdDYW1lRnJvbUltYWdlRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICAvLyBJ
ZiB0aGUgcGFnZSBzZXQgYSB2aWV3cG9ydCB3aWR0aCB0aGF0IHdhc24ndCB0aGUgZGV2aWNlIHdp
ZHRoLCB0aGVuIGl0IHdhcworICAgIC8vIHNjYWxlZCBhbmQgdGh1cyB3aWxsIHByb2JhYmx5IG5l
ZWQgdG8gem9vbS4KKyAgICBpZiAoX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoICE9IFdlYkNvcmU6OlZp
ZXdwb3J0QXJndW1lbnRzOjpWYWx1ZURldmljZVdpZHRoKQorICAgICAgICByZXR1cm4gWUVTOwor
CisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHBhZ2UgdGhhdCBhc2tlZCBmb3Igd2lk
dGggPSBkZXZpY2Utd2lkdGguIEhvd2V2ZXIsCisgICAgLy8gaWYgdGhlIGNvbnRlbnQncyB3aWR0
aCBhbmQgaGVpZ2h0IHdlcmUgbGFyZ2UsIHdlIG1pZ2h0IGhhdmUgaGFkIHRvIHNocmluayBpdC4K
KyAgICAvLyBXZSdsbCBlbmFibGUgZG91YmxlIHRhcCB6b29tIHdoZW5ldmVyIHdlJ3JlIG5vdCBh
dCB0aGUgYWN0dWFsIGluaXRpYWwgc2NhbGUuCisgICAgcmV0dXJuICFhcmVFc3NlbnRpYWxseUVx
dWFsQXNGbG9hdChjb250ZW50Wm9vbVNjYWxlKHNlbGYpLCBfaW5pdGlhbFNjYWxlRmFjdG9yKTsK
K30KKworLSAoQk9PTClfc3R5bHVzVGFwR2VzdHVyZVNob3VsZENyZWF0ZUVkaXRhYmxlSW1hZ2UK
K3sKKyAgICByZXR1cm4gW19jb25maWd1cmF0aW9uIF9lZGl0YWJsZUltYWdlc0VuYWJsZWRdOwor
fQorCisjcHJhZ21hIG1hcmsgVUlTY3JvbGxWaWV3RGVsZWdhdGUKKworLSAoQk9PTCl1c2VzU3Rh
bmRhcmRDb250ZW50VmlldworeworICAgIHJldHVybiAhX2N1c3RvbUNvbnRlbnRWaWV3ICYmICFf
cGFzc3dvcmRWaWV3OworfQorCistIChDR1NpemUpc2Nyb2xsVmlldzooVUlTY3JvbGxWaWV3Kilz
Y3JvbGxWaWV3IGNvbnRlbnRTaXplRm9yWm9vbVNjYWxlOihDR0Zsb2F0KXNjYWxlIHdpdGhQcm9w
b3NlZFNpemU6KENHU2l6ZSlwcm9wb3NlZFNpemUKK3sKKyAgICByZXR1cm4gcm91bmRTY3JvbGxW
aWV3Q29udGVudFNpemUoKl9wYWdlLCBwcm9wb3NlZFNpemUpOworfQorCistIChVSVZpZXcgKil2
aWV3Rm9yWm9vbWluZ0luU2Nyb2xsVmlldzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworewor
ICAgIEFTU0VSVChfc2Nyb2xsVmlldyA9PSBzY3JvbGxWaWV3KTsKKyAgICByZXR1cm4gc2VsZi5f
Y3VycmVudENvbnRlbnRWaWV3OworfQorCistICh2b2lkKXNjcm9sbFZpZXdXaWxsQmVnaW5ab29t
aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhWaWV3OihVSVZpZXcgKil2aWV3Cit7
CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKKyAgICAgICAgaWYg
KFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJfc2Ny
b2xsVmlld1dpbGxCZWdpblpvb21pbmc6d2l0aFZpZXc6KV0pCisgICAgICAgICAgICBbX2N1c3Rv
bUNvbnRlbnRWaWV3IHdlYl9zY3JvbGxWaWV3V2lsbEJlZ2luWm9vbWluZzpzY3JvbGxWaWV3IHdp
dGhWaWV3OnZpZXddOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNjcm9sbFZp
ZXcucGluY2hHZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVCZWdhbikgeworICAgICAgICBfcGFnZS0+d2lsbFN0YXJ0VXNlclRyaWdnZXJlZFpvb21pbmco
KTsKKyAgICAgICAgW19jb250ZW50VmlldyBzY3JvbGxWaWV3V2lsbFN0YXJ0UGFuT3JQaW5jaEdl
c3R1cmVdOworICAgIH0KKyAgICBbX2NvbnRlbnRWaWV3IHdpbGxTdGFydFpvb21PclNjcm9sbF07
CisKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisgICAgW19jb250ZW50VmlldyBjYW5jZWxQ
b2ludGVyc0Zvckdlc3R1cmVSZWNvZ25pemVyOnNjcm9sbFZpZXcucGluY2hHZXN0dXJlUmVjb2du
aXplcl07CisjZW5kaWYKK30KKworLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNjcm9sbFZpZXcucGFu
R2VzdHVyZVJlY29nbml6ZXIuc3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4p
CisgICAgICAgIFtfY29udGVudFZpZXcgc2Nyb2xsVmlld1dpbGxTdGFydFBhbk9yUGluY2hHZXN0
dXJlXTsKKworICAgIFtfY29udGVudFZpZXcgd2lsbFN0YXJ0Wm9vbU9yU2Nyb2xsXTsKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIC8v
IEZJWE1FOiBXZSB3aWxsIHdhbnQgdG8gZGV0ZWN0IHdoZXRoZXIgc25hcHBpbmcgd2lsbCBvY2N1
ciBiZWZvcmUgYmVnaW5uaW5nIHRvIGRyYWcuIFNlZSBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExh
eWVyVHJlZS4KKyAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNv
b3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKKyAgICBBU1NF
UlQoc2Nyb2xsVmlldyA9PSBfc2Nyb2xsVmlldy5nZXQoKSk7CisgICAgQ0dGbG9hdCBzY3JvbGxE
ZWNlbGVyYXRpb25GYWN0b3IgPSAoY29vcmRpbmF0b3IgJiYgY29vcmRpbmF0b3ItPnNob3VsZFNl
dFNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCgpKSA/IFVJU2Nyb2xsVmlld0RlY2VsZXJh
dGlvblJhdGVGYXN0IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5vcm1hbDsKKyAgICBz
Y3JvbGxWaWV3Lmhvcml6b250YWxTY3JvbGxEZWNlbGVyYXRpb25GYWN0b3IgPSBzY3JvbGxEZWNl
bGVyYXRpb25GYWN0b3I7CisgICAgc2Nyb2xsVmlldy52ZXJ0aWNhbFNjcm9sbERlY2VsZXJhdGlv
bkZhY3RvciA9IHNjcm9sbERlY2VsZXJhdGlvbkZhY3RvcjsKKyNlbmRpZgorfQorCistICh2b2lk
KV9kaWRGaW5pc2hTY3JvbGxpbmcKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRl
bnRWaWV3XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlXTsKKyAgICBbX2NvbnRlbnRWaWV3IGRpZEZpbmlzaFNjcm9sbGluZ107
Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICop
c2Nyb2xsVmlldyB3aXRoVmVsb2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9m
ZnNldDooaW5vdXQgQ0dQb2ludCAqKXRhcmdldENvbnRlbnRPZmZzZXQKK3sKKyAgICAvLyBXb3Jr
IGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTYzNzQ3NTM+IGJ5IGF2b2lkaW5nIGRlY2VsZXJhdGlv
biB3aGlsZQorICAgIC8vIHpvb21pbmcuIFdlJ2xsIGFuaW1hdGUgdG8gdGhlIHJpZ2h0IHBsYWNl
IG9uY2UgdGhlIHpvb20gZmluaXNoZXMuCisgICAgaWYgKFtzY3JvbGxWaWV3IGlzWm9vbWluZ10p
CisgICAgICAgICp0YXJnZXRDb250ZW50T2Zmc2V0ID0gW3Njcm9sbFZpZXcgY29udGVudE9mZnNl
dF07CisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIGVsc2UgeworICAgICAgICBpZiAo
W19jb250ZW50VmlldyBwcmV2ZW50c1Bhbm5pbmdJblhBeGlzXSkKKyAgICAgICAgICAgIHRhcmdl
dENvbnRlbnRPZmZzZXQtPnggPSBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQueDsKKyAgICAgICAg
aWYgKFtfY29udGVudFZpZXcgcHJldmVudHNQYW5uaW5nSW5ZQXhpc10pCisgICAgICAgICAgICB0
YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0Lnk7CisgICAg
fQorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyAgICBpZiAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
KiBjb29yZGluYXRvciA9IF9wYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEhlcmUsIEknbSBmaW5kaW5nIHRoZSBtYXhpbXVtIGhvcml6b250YWwv
dmVydGljYWwgc2Nyb2xsIG9mZnNldHMuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRv
IGRvIHRoaXMuCisgICAgICAgIENHU2l6ZSBtYXhTY3JvbGxPZmZzZXRzID0gQ0dTaXplTWFrZShz
Y3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoIC0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZS53aWR0
aCwgc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQgLSBzY3JvbGxWaWV3LmJvdW5kcy5zaXpl
LmhlaWdodCk7CisKKyAgICAgICAgVUlFZGdlSW5zZXRzIG9ic2N1cmVkSW5zZXQ7CisKKyAgICAg
ICAgaWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZVByaXZhdGUgPSBzdGF0aWNfY2Fz
dDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KFtzZWxmIFVJRGVsZWdhdGVdKTsKKyAgICAgICAg
aWYgKFt1aURlbGVnYXRlUHJpdmF0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJW
aWV3OmZpbmFsT2JzY3VyZWRJbnNldHNGb3JTY3JvbGxWaWV3OndpdGhWZWxvY2l0eTp0YXJnZXRD
b250ZW50T2Zmc2V0OildKQorICAgICAgICAgICAgb2JzY3VyZWRJbnNldCA9IFt1aURlbGVnYXRl
UHJpdmF0ZSBfd2ViVmlldzpzZWxmIGZpbmFsT2JzY3VyZWRJbnNldHNGb3JTY3JvbGxWaWV3OnNj
cm9sbFZpZXcgd2l0aFZlbG9jaXR5OnZlbG9jaXR5IHRhcmdldENvbnRlbnRPZmZzZXQ6dGFyZ2V0
Q29udGVudE9mZnNldF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9ic2N1cmVkSW5zZXQg
PSBbc2VsZiBfY29tcHV0ZWRPYnNjdXJlZEluc2V0XTsKKworICAgICAgICBDR1JlY3QgdW5vYnNj
dXJlZFJlY3QgPSBVSUVkZ2VJbnNldHNJbnNldFJlY3Qoc2VsZi5ib3VuZHMsIG9ic2N1cmVkSW5z
ZXQpOworCisgICAgICAgIGNvb3JkaW5hdG9yLT5hZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9y
U25hcHBpbmcobWF4U2Nyb2xsT2Zmc2V0cywgdmVsb2NpdHksIHVub2JzY3VyZWRSZWN0Lm9yaWdp
bi55LCB0YXJnZXRDb250ZW50T2Zmc2V0KTsKKyAgICB9CisjZW5kaWYKK30KKworLSAodm9pZClz
Y3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2lsbERl
Y2VsZXJhdGU6KEJPT0wpZGVjZWxlcmF0ZQoreworICAgIC8vIElmIHdlJ3JlIGRlY2VsZXJhdGlu
Zywgc2Nyb2xsIG9mZnNldCB3aWxsIGJlIHVwZGF0ZWQgd2hlbiBzY3JvbGxWaWV3RGlkRmluaXNo
RGVjZWxlcmF0aW5nOiBpcyBjYWxsZWQuCisgICAgaWYgKCFkZWNlbGVyYXRlKQorICAgICAgICBb
c2VsZiBfZGlkRmluaXNoU2Nyb2xsaW5nXTsKK30KKworLSAodm9pZClzY3JvbGxWaWV3RGlkRW5k
RGVjZWxlcmF0aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgW3NlbGYgX2Rp
ZEZpbmlzaFNjcm9sbGluZ107Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbFRvVG9w
OihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgW3NlbGYgX2RpZEZpbmlzaFNjcm9s
bGluZ107Cit9CisKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCistIChDR1BvaW50KV9zY3Jv
bGxWaWV3OihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IGFkanVzdGVkT2Zmc2V0Rm9yT2Zmc2V0
OihDR1BvaW50KW9mZnNldCB0cmFuc2xhdGlvbjooQ0dQb2ludCl0cmFuc2xhdGlvbiBzdGFydFBv
aW50OihDR1BvaW50KXN0YXJ0IGxvY2F0aW9uSW5WaWV3OihDR1BvaW50KWxvY2F0aW9uSW5WaWV3
IGhvcml6b250YWxWZWxvY2l0eTooaW5vdXQgZG91YmxlICopaHYgdmVydGljYWxWZWxvY2l0eToo
aW5vdXQgZG91YmxlICopdnYKK3sKKyAgICBpZiAoIVtfY29udGVudFZpZXcgcHJldmVudHNQYW5u
aW5nSW5YQXhpc10gJiYgIVtfY29udGVudFZpZXcgcHJldmVudHNQYW5uaW5nSW5ZQXhpc10pIHsK
KyAgICAgICAgW19jb250ZW50VmlldyBjYW5jZWxQb2ludGVyc0Zvckdlc3R1cmVSZWNvZ25pemVy
OnNjcm9sbFZpZXcucGFuR2VzdHVyZVJlY29nbml6ZXJdOworICAgICAgICByZXR1cm4gb2Zmc2V0
OworICAgIH0KKworICAgIENHUG9pbnQgYWRqdXN0ZWRDb250ZW50T2Zmc2V0ID0gQ0dQb2ludE1h
a2Uob2Zmc2V0LngsIG9mZnNldC55KTsKKyAgICBpZiAoW19jb250ZW50VmlldyBwcmV2ZW50c1Bh
bm5pbmdJblhBeGlzXSkKKyAgICAgICAgYWRqdXN0ZWRDb250ZW50T2Zmc2V0LnggPSBzdGFydC54
OworICAgIGlmIChbX2NvbnRlbnRWaWV3IHByZXZlbnRzUGFubmluZ0luWUF4aXNdKQorICAgICAg
ICBhZGp1c3RlZENvbnRlbnRPZmZzZXQueSA9IHN0YXJ0Lnk7CisKKyAgICBpZiAoKCFbX2NvbnRl
bnRWaWV3IHByZXZlbnRzUGFubmluZ0luWEF4aXNdICYmIGFkanVzdGVkQ29udGVudE9mZnNldC54
ICE9IHN0YXJ0LngpCisgICAgICAgIHx8ICghW19jb250ZW50VmlldyBwcmV2ZW50c1Bhbm5pbmdJ
bllBeGlzXSAmJiBhZGp1c3RlZENvbnRlbnRPZmZzZXQueSAhPSBzdGFydC55KSkgeworICAgICAg
ICBbX2NvbnRlbnRWaWV3IGNhbmNlbFBvaW50ZXJzRm9yR2VzdHVyZVJlY29nbml6ZXI6c2Nyb2xs
Vmlldy5wYW5HZXN0dXJlUmVjb2duaXplcl07CisgICAgfQorCisgICAgcmV0dXJuIGFkanVzdGVk
Q29udGVudE9mZnNldDsKK30KKyNlbmRpZgorCistICh2b2lkKXNjcm9sbFZpZXdEaWRTY3JvbGw6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3XSAmJiBbX2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViX3Njcm9sbFZpZXdEaWRTY3JvbGw6KV0pCisgICAgICAgIFtfY3VzdG9tQ29u
dGVudFZpZXcgd2ViX3Njcm9sbFZpZXdEaWRTY3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZp
ZXddOworCisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJT
Y3JvbGxJblZpZXc6c2Nyb2xsVmlld107CisKKyAgICBpZiAoV2ViS2l0OjpSZW1vdGVMYXllclRy
ZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEqIHNjcm9sbFBlcmZEYXRhID0gX3BhZ2UtPnNjcm9s
bGluZ1BlcmZvcm1hbmNlRGF0YSgpKQorICAgICAgICBzY3JvbGxQZXJmRGF0YS0+ZGlkU2Nyb2xs
KFtzZWxmIHZpc2libGVSZWN0SW5WaWV3Q29vcmRpbmF0ZXNdKTsKK30KKworLSAodm9pZClzY3Jv
bGxWaWV3RGlkWm9vbTooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIGlmICghW3Nl
bGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddICYmIFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJfc2Nyb2xsVmlld0RpZFpvb206KV0pCisgICAgICAg
IFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3Njcm9sbFZpZXdEaWRab29tOnNjcm9sbFZpZXddOwor
CisgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdCYWNrZ3JvdW5kXTsKKyAgICBbc2VsZiBfc2No
ZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNjcm9sbEluVmlldzpzY3JvbGxWaWV3
XTsKK30KKworLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kWm9vbWluZzooVUlTY3JvbGxWaWV3ICop
c2Nyb2xsVmlldyB3aXRoVmlldzooVUlWaWV3ICopdmlldyBhdFNjYWxlOihDR0Zsb2F0KXNjYWxl
Cit7CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10gJiYgW19jdXN0b21D
b250ZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9zY3JvbGxWaWV3RGlk
RW5kWm9vbWluZzp3aXRoVmlldzphdFNjYWxlOildKQorICAgICAgICBbX2N1c3RvbUNvbnRlbnRW
aWV3IHdlYl9zY3JvbGxWaWV3RGlkRW5kWm9vbWluZzpzY3JvbGxWaWV3IHdpdGhWaWV3OnZpZXcg
YXRTY2FsZTpzY2FsZV07CisKKyAgICBBU1NFUlQoc2Nyb2xsVmlldyA9PSBfc2Nyb2xsVmlldyk7
CisgICAgLy8gRklYTUU6IHJlbW92ZSB3aGVuIHJkYXI6Ly9wcm9ibGVtLzM2MDY1NDk1IGlzIGZp
eGVkLgorICAgIC8vIFdoZW4gcm90YXRpbmcgd2l0aCB0d28gZmluZ2VycyBkb3duLCBVSVNjcm9s
bFZpZXcgY2FuIHNldCBhIGJvZ3VzIGNvbnRlbnQgdmlldyBwb3NpdGlvbi4KKyAgICAvLyAiQ2Vu
dGVyIiBpcyB0b3AgbGVmdCBiZWNhdXNlIHdlIHNldCB0aGUgYW5jaG9yUG9pbnQgdG8gMCwwLgor
ICAgIFtfY29udGVudFZpZXcgc2V0Q2VudGVyOnNlbGYuYm91bmRzLm9yaWdpbl07CisKKyAgICBb
c2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNjcm9sbEluVmlldzpz
Y3JvbGxWaWV3XTsKKyAgICBbX2NvbnRlbnRWaWV3IGRpZFpvb21Ub1NjYWxlOnNjYWxlXTsKK30K
KworLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kU2Nyb2xsaW5nQW5pbWF0aW9uOihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3Cit7CisgICAgW3NlbGYgX2RpZEZpbmlzaFNjcm9sbGluZ107Cit9CisK
Ky0gKHZvaWQpX3Njcm9sbFZpZXdEaWRJbnRlcnJ1cHREZWNlbGVyYXRpbmc6KFVJU2Nyb2xsVmll
dyAqKXNjcm9sbFZpZXcKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb250ZW50VmlldyBkaWRJbnRlcnJ1cHRTY3Jv
bGxpbmddOworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVy
U2Nyb2xsSW5WaWV3OnNjcm9sbFZpZXddOworfQorCisjcHJhZ21hIG1hcmsgZW5kIFVJU2Nyb2xs
Vmlld0RlbGVnYXRlCisKKy0gKENHUmVjdClfdmlzaWJsZVJlY3RJbkVuY2xvc2luZ1ZpZXc6KFVJ
VmlldyAqKWVuY2xvc2luZ1ZpZXcKK3sKKyAgICBpZiAoIWVuY2xvc2luZ1ZpZXcpCisgICAgICAg
IHJldHVybiBzZWxmLmJvdW5kczsKKworICAgIENHUmVjdCBleHBvc2VkUmVjdCA9IFtlbmNsb3Np
bmdWaWV3IGNvbnZlcnRSZWN0OmVuY2xvc2luZ1ZpZXcuYm91bmRzIHRvVmlldzpzZWxmXTsKKyAg
ICByZXR1cm4gQ0dSZWN0SW50ZXJzZWN0c1JlY3QoZXhwb3NlZFJlY3QsIHNlbGYuYm91bmRzKSA/
IENHUmVjdEludGVyc2VjdGlvbihleHBvc2VkUmVjdCwgc2VsZi5ib3VuZHMpIDogQ0dSZWN0WmVy
bzsKK30KKworLSAoQ0dSZWN0KV92aXNpYmxlQ29udGVudFJlY3QKK3sKKyAgICBpZiAoX2Zyb3pl
blZpc2libGVDb250ZW50UmVjdCkKKyAgICAgICAgcmV0dXJuIF9mcm96ZW5WaXNpYmxlQ29udGVu
dFJlY3QudmFsdWUoKTsKKworICAgIENHUmVjdCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5h
dGVzID0gW3NlbGYgY29udmVydFJlY3Q6c2VsZi5ib3VuZHMgdG9WaWV3Ol9jb250ZW50Vmlldy5n
ZXQoKV07CisKKyAgICBpZiAoVUlWaWV3ICplbmNsb3NpbmdWaWV3ID0gW3NlbGYgX2VuY2xvc2lu
Z1ZpZXdGb3JFeHBvc2VkUmVjdENvbXB1dGF0aW9uXSkgeworICAgICAgICBDR1JlY3Qgdmlld1Zp
c2libGVSZWN0ID0gW3NlbGYgX3Zpc2libGVSZWN0SW5FbmNsb3NpbmdWaWV3OmVuY2xvc2luZ1Zp
ZXddOworICAgICAgICBDR1JlY3Qgdmlld1Zpc2libGVDb250ZW50UmVjdCA9IFtzZWxmIGNvbnZl
cnRSZWN0OnZpZXdWaXNpYmxlUmVjdCB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICAg
ICAgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IENHUmVjdEludGVyc2VjdGlvbih2
aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzLCB2aWV3VmlzaWJsZUNvbnRlbnRSZWN0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlczsKK30K
KworLy8gQ2FsbGVkIHdoZW4gc29tZSBhbmNlc3RvciBVSVNjcm9sbFZpZXcgc2Nyb2xscy4KKy0g
KHZvaWQpX2RpZFNjcm9sbAoreworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVj
dFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3OltzZWxmIF9zY3JvbGxlcl1dOworCisgICAgY29uc3Qg
TlNUaW1lSW50ZXJ2YWwgU2Nyb2xsaW5nRW5kZWRUaW1lckludGVydmFsID0gMC4wMzI7CisgICAg
aWYgKCFfZW5jbG9zaW5nU2Nyb2xsVmlld1Njcm9sbFRpbWVyKSB7CisgICAgICAgIF9lbmNsb3Np
bmdTY3JvbGxWaWV3U2Nyb2xsVGltZXIgPSBhZG9wdE5TKFtbTlNUaW1lciBhbGxvY10gaW5pdFdp
dGhGaXJlRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2VOb3c6U2Nyb2xsaW5n
RW5kZWRUaW1lckludGVydmFsXQorICAgICAgICAgICAgaW50ZXJ2YWw6MCB0YXJnZXQ6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX2VuY2xvc2luZ1Njcm9sbGVyU2Nyb2xsaW5nRW5kZWQ6KSB1c2Vy
SW5mbzpuaWwgcmVwZWF0czpZRVNdKTsKKyAgICAgICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3Bd
IGFkZFRpbWVyOl9lbmNsb3NpbmdTY3JvbGxWaWV3U2Nyb2xsVGltZXIuZ2V0KCkgZm9yTW9kZTpO
U0RlZmF1bHRSdW5Mb29wTW9kZV07CisgICAgfQorICAgIF9kaWRTY3JvbGxTaW5jZUxhc3RUaW1l
ckZpcmUgPSBZRVM7Cit9CisKKy0gKHZvaWQpX2VuY2xvc2luZ1Njcm9sbGVyU2Nyb2xsaW5nRW5k
ZWQ6KE5TVGltZXIgKil0aW1lcgoreworICAgIGlmIChfZGlkU2Nyb2xsU2luY2VMYXN0VGltZXJG
aXJlKSB7CisgICAgICAgIF9kaWRTY3JvbGxTaW5jZUxhc3RUaW1lckZpcmUgPSBOTzsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVj
dFVwZGF0ZV07CisgICAgW19lbmNsb3NpbmdTY3JvbGxWaWV3U2Nyb2xsVGltZXIgaW52YWxpZGF0
ZV07CisgICAgX2VuY2xvc2luZ1Njcm9sbFZpZXdTY3JvbGxUaW1lciA9IG5pbDsKK30KKworLSAo
VUlFZGdlSW5zZXRzKV9zY3JvbGxWaWV3U3lzdGVtQ29udGVudEluc2V0Cit7CisgICAgLy8gSXQn
cyBub3Qgc2FmZSB0byBhY2Nlc3MgdGhlIHNjcm9sbCB2aWV3J3Mgc2FmZUFyZWFJbnNldHMgb3Ig
X3N5c3RlbUNvbnRlbnRJbnNldCBmcm9tCisgICAgLy8gaW5zaWRlIG91ciBsYXlvdXRTdWJ2aWV3
cyBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGV5IGFyZW4ndCB1cGRhdGVkIHVudGlsIGFmdGVy
d2FyZHMuCisgICAgLy8gSW5zdGVhZCwgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgdGhlIFVJU2Ny
b2xsVmlldyBhbmQgV0tXZWJWaWV3IGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlCisgICAgLy8g
c3BhY2UsIGFuZCBtYXAgdGhlIFdLV2ViVmlldydzIG93biBpbnNldHMgaW50byB0aGUgc2Nyb2xs
IHZpZXcgbWFudWFsbHkuCisgICAgcmV0dXJuIFVJRWRnZUluc2V0c0FkZChbX3Njcm9sbFZpZXcg
X2NvbnRlbnRTY3JvbGxJbnNldF0sIHNlbGYuc2FmZUFyZWFJbnNldHMsIFtfc2Nyb2xsVmlldyBf
ZWRnZXNBcHBseWluZ1NhZmVBcmVhSW5zZXRzVG9Db250ZW50SW5zZXRdKTsKK30KKworLSAoV2Vi
Q29yZTo6RmxvYXRTaXplKWFjdGl2ZVZpZXdMYXlvdXRTaXplOihjb25zdCBDR1JlY3QmKWJvdW5k
cworeworICAgIGlmIChfdmlld0xheW91dFNpemVPdmVycmlkZSkKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkZsb2F0U2l6ZShfdmlld0xheW91dFNpemVPdmVycmlkZS52YWx1ZSgpKTsKKworI2lm
IF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMAorICAgIHJldHVybiBX
ZWJDb3JlOjpGbG9hdFNpemUoVUlFZGdlSW5zZXRzSW5zZXRSZWN0KENHUmVjdE1ha2UoMCwgMCwg
Ym91bmRzLnNpemUud2lkdGgsIGJvdW5kcy5zaXplLmhlaWdodCksIHNlbGYuX3Njcm9sbFZpZXdT
eXN0ZW1Db250ZW50SW5zZXQpLnNpemUpOworI2Vsc2UKKyAgICByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRTaXplIHsgYm91bmRzLnNpemUgfTsKKyNlbmRpZgorfQorCistICh2b2lkKV9kaXNwYXRjaFNl
dFZpZXdMYXlvdXRTaXplOihXZWJDb3JlOjpGbG9hdFNpemUpdmlld0xheW91dFNpemUKK3sKKyAg
ICBpZiAoX2xhc3RTZW50Vmlld0xheW91dFNpemUgJiYgQ0dTaXplRXF1YWxUb1NpemUoX2xhc3RT
ZW50Vmlld0xheW91dFNpemUudmFsdWUoKSwgdmlld0xheW91dFNpemUpKQorICAgICAgICByZXR1
cm47CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1bV0tX
ZWJWaWV3ICIgPDwgX3BhZ2UtPmlkZW50aWZpZXIoKSA8PCAiIF9kaXNwYXRjaFNldFZpZXdMYXlv
dXRTaXplOl0gIiA8PCB2aWV3TGF5b3V0U2l6ZSA8PCAiIGNvbnRlbnRab29tU2NhbGUgIiA8PCBj
b250ZW50Wm9vbVNjYWxlKHNlbGYpKTsKKyAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0
aW9uVmlld0xheW91dFNpemUodmlld0xheW91dFNpemUsIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVG
YWN0b3IoKSwgX3BhZ2UtPm1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpKTsKKyAgICBfbGFz
dFNlbnRWaWV3TGF5b3V0U2l6ZSA9IHZpZXdMYXlvdXRTaXplOworfQorCistICh2b2lkKV9kaXNw
YXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTooV2ViQ29yZTo6RmxvYXRTaXplKW1heGltdW1V
bm9ic2N1cmVkU2l6ZQoreworICAgIGlmIChfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUg
JiYgQ0dTaXplRXF1YWxUb1NpemUoX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplLnZhbHVl
KCksIG1heGltdW1Vbm9ic2N1cmVkU2l6ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIF9wYWdl
LT5zZXRNYXhpbXVtVW5vYnNjdXJlZFNpemUobWF4aW11bVVub2JzY3VyZWRTaXplKTsKKyAgICBf
bGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBtYXhpbXVtVW5vYnNjdXJlZFNpemU7Cit9
CisKKy0gKHZvaWQpX2Rpc3BhdGNoU2V0RGV2aWNlT3JpZW50YXRpb246KGludDMyX3QpZGV2aWNl
T3JpZW50YXRpb24KK3sKKyAgICBpZiAoX2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gJiYgX2xh
c3RTZW50RGV2aWNlT3JpZW50YXRpb24udmFsdWUoKSA9PSBkZXZpY2VPcmllbnRhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX3BhZ2UtPnNldERldmljZU9yaWVudGF0aW9uKGRldmljZU9y
aWVudGF0aW9uKTsKKyAgICBfbGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiA9IGRldmljZU9yaWVu
dGF0aW9uOworfQorCistICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAoreworICAgIENHUmVj
dCBib3VuZHMgPSBzZWxmLmJvdW5kczsKKyAgICBbX3Njcm9sbFZpZXcgc2V0RnJhbWU6Ym91bmRz
XTsKKworICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7CisgICAgICAgIGlmICghX3ZpZXdM
YXlvdXRTaXplT3ZlcnJpZGUpCisgICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRWaWV3TGF5
b3V0U2l6ZTpbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc11dOworICAgICAg
ICBpZiAoIV9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSkKKyAgICAgICAgICAgIFtzZWxm
IF9kaXNwYXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUoYm91
bmRzLnNpemUpXTsKKworICAgICAgICBCT09MIHNpemVDaGFuZ2VkID0gTk87CisgICAgICAgIGlm
IChhdXRvIGRyYXdpbmdBcmVhID0gX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgICAgICBz
aXplQ2hhbmdlZCA9IGRyYXdpbmdBcmVhLT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUoYm91bmRz
LnNpemUpKTsKKworICAgICAgICBpZiAoc2l6ZUNoYW5nZWQgJiBbc2VsZiB1c2VzU3RhbmRhcmRD
b250ZW50Vmlld10pCisgICAgICAgICAgICBbX2NvbnRlbnRWaWV3IHNldFNpemVDaGFuZ2VkU2lu
Y2VMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOllFU107CisgICAgfQorCisgICAgW19jdXN0
b21Db250ZW50VmlldyB3ZWJfc2V0TWluaW11bVNpemU6Ym91bmRzLnNpemVdOworICAgIFtzZWxm
IF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Cit9CisKKy8vIFVub2JzY3VyZWQg
Y29udGVudCByZWN0IHdoZXJlIHRoZSB1c2VyIGNhbiBpbnRlcmFjdC4gV2hlbiB0aGUga2V5Ym9h
cmQgaXMgdXAsIHRoaXMgc2hvdWxkIGJlIHRoZSBhcmVhIGFib3ZlIG9yIGJlbG93IHRoZSBrZXli
b2FyZCwgd2hlcmV2ZXIgdGhlcmUgaXMgZW5vdWdoIHNwYWNlLgorLSAoQ0dSZWN0KV9jb250ZW50
UmVjdEZvclVzZXJJbnRlcmFjdGlvbgoreworICAgIC8vIEZJWE1FOiBoYW5kbGUgc3BsaXQga2V5
Ym9hcmQuCisgICAgVUlFZGdlSW5zZXRzIG9ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVkSW5zZXRz
OworICAgIG9ic2N1cmVkSW5zZXRzLmJvdHRvbSA9IHN0ZDo6bWF4KF9vYnNjdXJlZEluc2V0cy5i
b3R0b20sIF9pbnB1dFZpZXdCb3VuZHMuc2l6ZS5oZWlnaHQpOworICAgIENHUmVjdCB1bm9ic2N1
cmVkUmVjdCA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgb2JzY3VyZWRJbnNl
dHMpOworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDp1bm9ic2N1cmVkUmVjdCB0b1ZpZXc6
c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKK30KKworLy8gSWRlYWxseSBVSVNjcm9sbFZpZXcg
d291bGQgZXhwb3NlIHRoaXMgZm9yIHVzOiA8cmRhcjovL3Byb2JsZW0vMjEzOTQ1Njc+LgorLSAo
Qk9PTClfc2Nyb2xsVmlld0lzUnViYmVyQmFuZGluZworeworICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yID0gX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICBDR1BvaW50IGNvbnRl
bnRPZmZzZXQgPSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisgICAgQ0dQb2ludCBib3Vu
ZGVkT2Zmc2V0ID0gY29udGVudE9mZnNldEJvdW5kZWRJblZhbGlkUmFuZ2UoX3Njcm9sbFZpZXcu
Z2V0KCksIGNvbnRlbnRPZmZzZXQpOworICAgIHJldHVybiAhcG9pbnRzRXF1YWxJbkRldmljZVBp
eGVscyhjb250ZW50T2Zmc2V0LCBib3VuZGVkT2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Cit9
CisKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKy0gKHZv
aWQpc2FmZUFyZWFJbnNldHNEaWRDaGFuZ2UKK3sKKyAgICBbc3VwZXIgc2FmZUFyZWFJbnNldHNE
aWRDaGFuZ2VdOworCisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
XTsKK30KKyNlbmRpZgorCistICh2b2lkKV9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0
ZQoreworICAgIC8vIEZvciB2aXNpYmxlIHJlY3QgdXBkYXRlcyBub3QgYXNzb2NpYXRlZCB3aXRo
IGEgc3BlY2lmaWMgVUlTY3JvbGxWaWV3LCBqdXN0IGNvbnNpZGVyIG91ciBvd24gc2Nyb2xsZXIu
CisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJTY3JvbGxJ
blZpZXc6X3Njcm9sbFZpZXcuZ2V0KCldOworfQorCistIChCT09MKV9zY3JvbGxWaWV3SXNJblN0
YWJsZVN0YXRlOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgQk9PTCBpc1N0YWJs
ZVN0YXRlID0gIShbc2Nyb2xsVmlldyBpc0RyYWdnaW5nXSB8fCBbc2Nyb2xsVmlldyBpc0RlY2Vs
ZXJhdGluZ10gfHwgW3Njcm9sbFZpZXcgaXNab29taW5nXSB8fCBbc2Nyb2xsVmlldyBfaXNBbmlt
YXRpbmdab29tXSB8fCBbc2Nyb2xsVmlldyBfaXNTY3JvbGxpbmdUb1RvcF0pOworCisgICAgaWYg
KGlzU3RhYmxlU3RhdGUgJiYgc2Nyb2xsVmlldyA9PSBfc2Nyb2xsVmlldy5nZXQoKSkKKyAgICAg
ICAgaXNTdGFibGVTdGF0ZSA9ICFfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVs
eTsKKworICAgIGlmIChpc1N0YWJsZVN0YXRlICYmIHNjcm9sbFZpZXcgPT0gX3Njcm9sbFZpZXcu
Z2V0KCkpCisgICAgICAgIGlzU3RhYmxlU3RhdGUgPSAhW3NlbGYgX3Njcm9sbFZpZXdJc1J1YmJl
ckJhbmRpbmddOworCisgICAgaWYgKGlzU3RhYmxlU3RhdGUpCisgICAgICAgIGlzU3RhYmxlU3Rh
dGUgPSAhc2Nyb2xsVmlldy5faXNJbnRlcnJ1cHRpbmdEZWNlbGVyYXRpb247CisKKyAgICBpZiAo
TlNOdW1iZXIgKnN0YWJsZU92ZXJyaWRlID0gc2VsZi5fc3RhYmxlU3RhdGVPdmVycmlkZSkKKyAg
ICAgICAgaXNTdGFibGVTdGF0ZSA9IHN0YWJsZU92ZXJyaWRlLmJvb2xWYWx1ZTsKKworICAgIHJl
dHVybiBpc1N0YWJsZVN0YXRlOworfQorCistICh2b2lkKV9hZGRVcGRhdGVWaXNpYmxlQ29udGVu
dFJlY3RQcmVDb21taXRIYW5kbGVyCit7CisgICAgaWYgKF9oYXNFbnRlcmVkRGVhbGxvYykgewor
ICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChWaWV3U3RhdGUsICItW1dLV2ViVmlldyAlcCBfYWRk
VXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0UHJlQ29tbWl0SGFuZGxlcl06IEF0dGVtcHRlZCB0byBh
ZGQgcHJlLWNvbW1pdCBoYW5kbGVyIHVuZGVyIC1kZWFsbG9jLiBCYWlsaW5nLiIsIHNlbGYpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byByZXRhaW5lZFNlbGYgPSByZXRhaW5Q
dHIoc2VsZik7CisgICAgW0NBVHJhbnNhY3Rpb24gYWRkQ29tbWl0SGFuZGxlcjpbcmV0YWluZWRT
ZWxmXSB7CisgICAgICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IHJldGFpbmVkU2VsZi5nZXQoKTsK
KyAgICAgICAgaWYgKCFbd2ViVmlldyBfaXNWYWxpZF0pIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0lGKHdlYlZpZXcuX3BhZ2UgJiYgd2ViVmlldy5fcGFnZS0+aXNBbHdheXNPbkxvZ2dpbmdB
bGxvd2VkKCksIFZpZXdTdGF0ZSwgIkluIENBVHJhbnNhY3Rpb24gcHJlQ29tbWl0SGFuZGxlciwg
V0tXZWJWaWV3ICVwIGlzIGludmFsaWQiLCB3ZWJWaWV3KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIEB0cnkgeworICAgICAgICAgICAgW3dlYlZpZXcgX3VwZGF0
ZVZpc2libGVDb250ZW50UmVjdHNdOworICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4
Y2VwdGlvbikgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUYod2ViVmlldy5fcGFnZSAmJiB3
ZWJWaWV3Ll9wYWdlLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgVmlld1N0YXRlLCAiSW4g
Q0FUcmFuc2FjdGlvbiBwcmVDb21taXRIYW5kbGVyLCAtW1dLV2ViVmlldyAlcCBfdXBkYXRlVmlz
aWJsZUNvbnRlbnRSZWN0c10gdGhyZXcgYW4gZXhjZXB0aW9uIiwgd2ViVmlldyk7CisgICAgICAg
IH0KKyAgICAgICAgd2ViVmlldy0+X2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRlID0gTk87
CisgICAgfSBmb3JQaGFzZTprQ0FUcmFuc2FjdGlvblBoYXNlUHJlQ29tbWl0XTsKK30KKworLSAo
dm9pZClfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNjcm9sbEluVmlldzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIF92aXNpYmxlQ29udGVudFJlY3RVcGRh
dGVTY2hlZHVsZWRGcm9tU2Nyb2xsVmlld0luU3RhYmxlU3RhdGUgPSBbc2VsZiBfc2Nyb2xsVmll
d0lzSW5TdGFibGVTdGF0ZTpzY3JvbGxWaWV3XTsKKworICAgIGlmIChfaGFzU2NoZWR1bGVkVmlz
aWJsZVJlY3RVcGRhdGUpIHsKKyAgICAgICAgYXV0byB0aW1lTm93ID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CisgICAgICAgIGlmICgodGltZU5vdyAtIF90aW1lT2ZSZXF1ZXN0Rm9yVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlKSA+IGRlbGF5QmVmb3JlTm9WaXNpYmxlQ29udGVudHNSZWN0c0xvZ2dp
bmcpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIi1bV0tXZWJWaWV3ICVw
IF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3XTogX2hh
c1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRlIGlzIHRydWUgYnV0IGhhdmVuJ3QgdXBkYXRlZCB2
aXNpYmxlIGNvbnRlbnQgcmVjdHMgZm9yICUuMmZzIChsYXN0IHVwZGF0ZSB3YXMgJS4yZnMgYWdv
KSAtIHZhbGlkICVkIiwKKyAgICAgICAgICAgICAgICBzZWxmLCAodGltZU5vdyAtIF90aW1lT2ZS
ZXF1ZXN0Rm9yVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKS52YWx1ZSgpLCAodGltZU5vdyAtIF90
aW1lT2ZMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKS52YWx1ZSgpLCBbc2VsZiBfaXNWYWxp
ZF0pOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBfaGFzU2NoZWR1
bGVkVmlzaWJsZVJlY3RVcGRhdGUgPSBZRVM7CisgICAgX3RpbWVPZlJlcXVlc3RGb3JWaXNpYmxl
Q29udGVudFJlY3RVcGRhdGUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIENBVHJhbnNh
Y3Rpb25QaGFzZSB0cmFuc2FjdGlvblBoYXNlID0gW0NBVHJhbnNhY3Rpb24gY3VycmVudFBoYXNl
XTsKKyAgICBpZiAodHJhbnNhY3Rpb25QaGFzZSA9PSBrQ0FUcmFuc2FjdGlvblBoYXNlTnVsbCB8
fCB0cmFuc2FjdGlvblBoYXNlID09IGtDQVRyYW5zYWN0aW9uUGhhc2VQcmVMYXlvdXQpIHsKKyAg
ICAgICAgW3NlbGYgX2FkZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdFByZUNvbW1pdEhhbmRsZXJd
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3JldGFpbmVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0geworICAg
ICAgICBXS1dlYlZpZXcgKndlYlZpZXcgPSByZXRhaW5lZFNlbGYuZ2V0KCk7CisgICAgICAgIGlm
ICghW3dlYlZpZXcgX2lzVmFsaWRdKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBbd2Vi
VmlldyBfYWRkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0UHJlQ29tbWl0SGFuZGxlcl07CisgICAg
fSk7Cit9CisKK3N0YXRpYyBib29sIHNjcm9sbFZpZXdDYW5TY3JvbGwoVUlTY3JvbGxWaWV3ICpz
Y3JvbGxWaWV3KQoreworICAgIGlmICghc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJuIE5POwor
CisgICAgVUlFZGdlSW5zZXRzIGNvbnRlbnRJbnNldCA9IHNjcm9sbFZpZXcuY29udGVudEluc2V0
OworICAgIENHU2l6ZSBjb250ZW50U2l6ZSA9IHNjcm9sbFZpZXcuY29udGVudFNpemU7CisgICAg
Q0dTaXplIGJvdW5kc1NpemUgPSBzY3JvbGxWaWV3LmJvdW5kcy5zaXplOworCisgICAgcmV0dXJu
IChjb250ZW50U2l6ZS53aWR0aCArIGNvbnRlbnRJbnNldC5sZWZ0ICsgY29udGVudEluc2V0LnJp
Z2h0KSA+IGJvdW5kc1NpemUud2lkdGgKKyAgICAgICAgfHwgKGNvbnRlbnRTaXplLmhlaWdodCAr
IGNvbnRlbnRJbnNldC50b3AgKyBjb250ZW50SW5zZXQuYm90dG9tKSA+IGJvdW5kc1NpemUuaGVp
Z2h0OworfQorCistIChDR1JlY3QpX2NvbnRlbnRCb3VuZHNFeHRlbmRlZEZvclJ1YmJlcmJhbmRp
bmdXaXRoU2NhbGU6KENHRmxvYXQpc2NhbGVGYWN0b3IKK3sKKyAgICBDR1BvaW50IGNvbnRlbnRP
ZmZzZXQgPSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisgICAgQ0dQb2ludCBib3VuZGVk
T2Zmc2V0ID0gY29udGVudE9mZnNldEJvdW5kZWRJblZhbGlkUmFuZ2UoX3Njcm9sbFZpZXcuZ2V0
KCksIGNvbnRlbnRPZmZzZXQpOworCisgICAgQ0dGbG9hdCBob3Jpb250YWxSdWJiZXJiYW5kQW1v
dW50SW5Db250ZW50Q29vcmRpbmF0ZXMgPSAoY29udGVudE9mZnNldC54IC0gYm91bmRlZE9mZnNl
dC54KSAvIHNjYWxlRmFjdG9yOworICAgIENHRmxvYXQgdmVydGljYWxSdWJiZXJiYW5kQW1vdW50
SW5Db250ZW50Q29vcmRpbmF0ZXMgPSAoY29udGVudE9mZnNldC55IC0gYm91bmRlZE9mZnNldC55
KSAvIHNjYWxlRmFjdG9yOworCisgICAgQ0dSZWN0IGV4dGVuZGVkQm91bmRzID0gW19jb250ZW50
VmlldyBib3VuZHNdOworCisgICAgaWYgKGhvcmlvbnRhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRl
bnRDb29yZGluYXRlcyA8IDApIHsKKyAgICAgICAgZXh0ZW5kZWRCb3VuZHMub3JpZ2luLnggKz0g
aG9yaW9udGFsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzOworICAgICAgICBl
eHRlbmRlZEJvdW5kcy5zaXplLndpZHRoIC09IGhvcmlvbnRhbFJ1YmJlcmJhbmRBbW91bnRJbkNv
bnRlbnRDb29yZGluYXRlczsKKyAgICB9IGVsc2UgaWYgKGhvcmlvbnRhbFJ1YmJlcmJhbmRBbW91
bnRJbkNvbnRlbnRDb29yZGluYXRlcyA+IDApCisgICAgICAgIGV4dGVuZGVkQm91bmRzLnNpemUu
d2lkdGggKz0gaG9yaW9udGFsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzOwor
CisgICAgaWYgKHZlcnRpY2FsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzIDwg
MCkgeworICAgICAgICBleHRlbmRlZEJvdW5kcy5vcmlnaW4ueSArPSB2ZXJ0aWNhbFJ1YmJlcmJh
bmRBbW91bnRJbkNvbnRlbnRDb29yZGluYXRlczsKKyAgICAgICAgZXh0ZW5kZWRCb3VuZHMuc2l6
ZS5oZWlnaHQgLT0gdmVydGljYWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXM7
CisgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29yZGlu
YXRlcyA+IDApCisgICAgICAgIGV4dGVuZGVkQm91bmRzLnNpemUuaGVpZ2h0ICs9IHZlcnRpY2Fs
UnViYmVyYmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzOworCisgICAgcmV0dXJuIGV4dGVu
ZGVkQm91bmRzOworfQorCistICh2b2lkKV91cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzCit7Cisg
ICAgQk9PTCBpblN0YWJsZVN0YXRlID0gX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVkdWxl
ZEZyb21TY3JvbGxWaWV3SW5TdGFibGVTdGF0ZTsKKworICAgIGlmICghW3NlbGYgdXNlc1N0YW5k
YXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIFtfcGFzc3dvcmRWaWV3IHNldEZyYW1lOnNlbGYu
Ym91bmRzXTsKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfY29tcHV0ZWRDb250ZW50
SW5zZXREaWRDaGFuZ2VdOworICAgICAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJl
Y3RzRm9yQW55UmVhc29uID0gWUVTOworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIl
cCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX3VwZGF0ZVZpc2libGVDb250ZW50UmVj
dHM6XSAtIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3IGlzIE5PLCBiYWlsaW5nIiwgc2VsZiwgX3Bh
Z2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGF1dG8gdGltZU5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGlmIChfdGltZU9m
Rmlyc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVXaXRoUGVuZGluZ0NvbW1pdCkgeworICAgICAg
ICBhdXRvIHRpbWVTaW5jZUZpcnN0UmVxdWVzdFdpdGhQZW5kaW5nQ29tbWl0ID0gdGltZU5vdyAt
ICpfdGltZU9mRmlyc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVXaXRoUGVuZGluZ0NvbW1pdDsK
KyAgICAgICAgaWYgKHRpbWVTaW5jZUZpcnN0UmVxdWVzdFdpdGhQZW5kaW5nQ29tbWl0ID4gZGVs
YXlCZWZvcmVOb0NvbW1pdHNMb2dnaW5nKQorICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxM
T1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF91cGRhdGVWaXNpYmxlQ29u
dGVudFJlY3RzOl0gLSBoYXZlIG5vdCByZWNlaXZlZCBhIGNvbW1pdCAlLjJmcyBhZnRlciB2aXNp
YmxlIGNvbnRlbnQgcmVjdCB1cGRhdGU7IGxhc3RUcmFuc2FjdGlvbklEICVsbHUiLCBzZWxmLCBf
cGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIHRpbWVTaW5jZUZpcnN0UmVxdWVzdFdpdGhQ
ZW5kaW5nQ29tbWl0LnZhbHVlKCksIF9sYXN0VHJhbnNhY3Rpb25JRC50b1VJbnQ2NCgpKTsKKyAg
ICB9CisKKyAgICBpZiAoX2ludm9raW5nVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjaykgewor
ICAgICAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVUlTY3JvbGxWaWV3
RGVsZWdhdGVDYWxsYmFjayA9IFlFUzsKKyAgICAgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNv
bnRlbnRSZWN0c0ZvckFueVJlYXNvbiA9IFlFUzsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxM
T1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF91cGRhdGVWaXNpYmxlQ29u
dGVudFJlY3RzOl0gLSBfaW52b2tpbmdVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrIGlzIFlF
UywgYmFpbGluZyIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUg
IT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZworICAgICAg
ICB8fCAoX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUgJiYg
IVtfY29udGVudFZpZXcgc2l6ZUNoYW5nZWRTaW5jZUxhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRh
dGVdKQorICAgICAgICB8fCBbX3Njcm9sbFZpZXcgaXNab29tQm91bmNpbmddCisgICAgICAgIHx8
IF9jdXJyZW50bHlBZGp1c3RpbmdTY3JvbGxWaWV3SW5zZXRzRm9yS2V5Ym9hcmQpIHsKKyAgICAg
ICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvckFueVJlYXNvbiA9IFlFUzsK
KyAgICAgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVuc3RhYmxlU2Ny
b2xsVmlldyA9IFlFUzsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQ
cm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF91cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzOl0gLSBz
Y3JvbGwgdmlldyBzdGF0ZSBpcyBub24tc3RhYmxlLCBiYWlsaW5nIChfZHluYW1pY1ZpZXdwb3J0
VXBkYXRlTW9kZSAlZCwgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWlu
RnJhbWUgJWQsIHNpemVDaGFuZ2VkU2luY2VMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlICVk
LCBbX3Njcm9sbFZpZXcgaXNab29tQm91bmNpbmddICVkLCBfY3VycmVudGx5QWRqdXN0aW5nU2Ny
b2xsVmlld0luc2V0c0ZvcktleWJvYXJkICVkKSIsCisgICAgICAgICAgICBzZWxmLCBfcGFnZS0+
aWRlbnRpZmllcigpLnRvVUludDY0KCksIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlLCBfbmVl
ZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZSwgW19jb250ZW50Vmll
dyBzaXplQ2hhbmdlZFNpbmNlTGFzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZV0sIFtfc2Nyb2xs
VmlldyBpc1pvb21Cb3VuY2luZ10sIF9jdXJyZW50bHlBZGp1c3RpbmdTY3JvbGxWaWV3SW5zZXRz
Rm9yS2V5Ym9hcmQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKF9kaWREZWZl
clVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFzb24pCisgICAgICAgIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfdXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0czpdIC0gcGVyZm9ybWluZyBmaXJzdCB2aXNpYmxlIGNvbnRlbnQg
cmVjdCB1cGRhdGUgYWZ0ZXIgZGVmZXJyaW5nIHVwZGF0ZXMiLCBzZWxmLCBfcGFnZS0+aWRlbnRp
ZmllcigpLnRvVUludDY0KCkpOworCisgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRS
ZWN0c0ZvclVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2sgPSBOTzsKKyAgICBfZGlkRGVmZXJV
cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVW5zdGFibGVTY3JvbGxWaWV3ID0gTk87CisgICAg
X2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvckFueVJlYXNvbiA9IE5POworCisg
ICAgQ0dSZWN0IHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBfdmlzaWJs
ZUNvbnRlbnRSZWN0XTsKKworICAgIFVJRWRnZUluc2V0cyBjb21wdXRlZENvbnRlbnRJbnNldFVu
YWRqdXN0ZWRGb3JLZXlib2FyZCA9IFtzZWxmIF9jb21wdXRlZE9ic2N1cmVkSW5zZXRdOworICAg
IGlmICghX2hhdmVTZXRPYnNjdXJlZEluc2V0cykKKyAgICAgICAgY29tcHV0ZWRDb250ZW50SW5z
ZXRVbmFkanVzdGVkRm9yS2V5Ym9hcmQuYm90dG9tIC09IF90b3RhbFNjcm9sbFZpZXdCb3R0b21J
bnNldEFkanVzdG1lbnRGb3JLZXlib2FyZDsKKworICAgIENHRmxvYXQgc2NhbGVGYWN0b3IgPSBj
b250ZW50Wm9vbVNjYWxlKHNlbGYpOworCisgICAgQ0dSZWN0IHVub2JzY3VyZWRSZWN0ID0gVUlF
ZGdlSW5zZXRzSW5zZXRSZWN0KHNlbGYuYm91bmRzLCBjb21wdXRlZENvbnRlbnRJbnNldFVuYWRq
dXN0ZWRGb3JLZXlib2FyZCk7CisgICAgQ0dSZWN0IHVub2JzY3VyZWRSZWN0SW5Db250ZW50Q29v
cmRpbmF0ZXMgPSBfZnJvemVuVW5vYnNjdXJlZENvbnRlbnRSZWN0ID8gX2Zyb3plblVub2JzY3Vy
ZWRDb250ZW50UmVjdC52YWx1ZSgpIDogW3NlbGYgY29udmVydFJlY3Q6dW5vYnNjdXJlZFJlY3Qg
dG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgdW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRD
b29yZGluYXRlcyA9IENHUmVjdEludGVyc2VjdGlvbih1bm9ic2N1cmVkUmVjdEluQ29udGVudENv
b3JkaW5hdGVzLCBbc2VsZiBfY29udGVudEJvdW5kc0V4dGVuZGVkRm9yUnViYmVyYmFuZGluZ1dp
dGhTY2FsZTpzY2FsZUZhY3Rvcl0pOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBjb21w
dXRlcyB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoZSBib3R0b20sIHRvcCwgbGVmdCBhbmQgcmlnaHQg
Y29udGVudCBpbnNldHMgYXJlIHZpc2libGUuCisgICAgYXV0byBzY3JvbGxWaWV3SW5zZXRzID0g
W19zY3JvbGxWaWV3IGNvbnRlbnRJbnNldF07CisgICAgYXV0byBzY3JvbGxWaWV3Qm91bmRzID0g
W19zY3JvbGxWaWV3IGJvdW5kc107CisgICAgYXV0byBzY3JvbGxWaWV3Q29udGVudFNpemUgPSBb
X3Njcm9sbFZpZXcgY29udGVudFNpemVdOworICAgIGF1dG8gc2Nyb2xsVmlld09yaWdpbkluY2x1
ZGluZ0luc2V0ID0gVUlFZGdlSW5zZXRzSW5zZXRSZWN0KHNjcm9sbFZpZXdCb3VuZHMsIGNvbXB1
dGVkQ29udGVudEluc2V0VW5hZGp1c3RlZEZvcktleWJvYXJkKS5vcmlnaW47CisgICAgYXV0byBt
YXhpbXVtVmVydGljYWxTY3JvbGxFeHRlbnRXaXRob3V0UmV2ZWFsaW5nQm90dG9tQ29udGVudElu
c2V0ID0gc2Nyb2xsVmlld0NvbnRlbnRTaXplLmhlaWdodCAtIENHUmVjdEdldEhlaWdodChzY3Jv
bGxWaWV3Qm91bmRzKTsKKyAgICBhdXRvIG1heGltdW1Ib3Jpem9udGFsU2Nyb2xsRXh0ZW50V2l0
aG91dFJldmVhbGluZ1JpZ2h0Q29udGVudEluc2V0ID0gc2Nyb2xsVmlld0NvbnRlbnRTaXplLndp
ZHRoIC0gQ0dSZWN0R2V0V2lkdGgoc2Nyb2xsVmlld0JvdW5kcyk7CisgICAgYXV0byBjb250ZW50
SW5zZXRzID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICBpZiAoc2Nyb2xsVmlld0luc2V0cy5sZWZ0
ID4gMCAmJiBzY3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5nSW5zZXQueCA8IDApCisgICAgICAgIGNv
bnRlbnRJbnNldHMubGVmdCA9IHN0ZDo6bWluKC1zY3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5nSW5z
ZXQueCwgc2Nyb2xsVmlld0luc2V0cy5sZWZ0KSAvIHNjYWxlRmFjdG9yOworCisgICAgaWYgKHNj
cm9sbFZpZXdJbnNldHMudG9wID4gMCAmJiBzY3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5nSW5zZXQu
eSA8IDApCisgICAgICAgIGNvbnRlbnRJbnNldHMudG9wID0gc3RkOjptaW4oLXNjcm9sbFZpZXdP
cmlnaW5JbmNsdWRpbmdJbnNldC55LCBzY3JvbGxWaWV3SW5zZXRzLnRvcCkgLyBzY2FsZUZhY3Rv
cjsKKworICAgIGlmIChzY3JvbGxWaWV3SW5zZXRzLnJpZ2h0ID4gMCAmJiBzY3JvbGxWaWV3T3Jp
Z2luSW5jbHVkaW5nSW5zZXQueCA+IG1heGltdW1Ib3Jpem9udGFsU2Nyb2xsRXh0ZW50V2l0aG91
dFJldmVhbGluZ1JpZ2h0Q29udGVudEluc2V0KQorICAgICAgICBjb250ZW50SW5zZXRzLnJpZ2h0
ID0gc3RkOjptaW4oc2Nyb2xsVmlld09yaWdpbkluY2x1ZGluZ0luc2V0LnggLSBtYXhpbXVtSG9y
aXpvbnRhbFNjcm9sbEV4dGVudFdpdGhvdXRSZXZlYWxpbmdSaWdodENvbnRlbnRJbnNldCwgc2Ny
b2xsVmlld0luc2V0cy5yaWdodCkgLyBzY2FsZUZhY3RvcjsKKworICAgIGlmIChzY3JvbGxWaWV3
SW5zZXRzLmJvdHRvbSA+IDAgJiYgc2Nyb2xsVmlld09yaWdpbkluY2x1ZGluZ0luc2V0LnkgPiBt
YXhpbXVtVmVydGljYWxTY3JvbGxFeHRlbnRXaXRob3V0UmV2ZWFsaW5nQm90dG9tQ29udGVudElu
c2V0KQorICAgICAgICBjb250ZW50SW5zZXRzLmJvdHRvbSA9IHN0ZDo6bWluKHNjcm9sbFZpZXdP
cmlnaW5JbmNsdWRpbmdJbnNldC55IC0gbWF4aW11bVZlcnRpY2FsU2Nyb2xsRXh0ZW50V2l0aG91
dFJldmVhbGluZ0JvdHRvbUNvbnRlbnRJbnNldCwgc2Nyb2xsVmlld0luc2V0cy5ib3R0b20pIC8g
c2NhbGVGYWN0b3I7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQorICAgIGlmIChpblN0YWJsZVN0YXRlKSB7CisgICAgICAgIFdlYktpdDo6
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSogY29vcmRpbmF0b3IgPSBfcGFnZS0+c2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpOworICAgICAgICBpZiAoY29vcmRpbmF0b3IgJiYgY29v
cmRpbmF0b3ItPmhhc0FjdGl2ZVNuYXBQb2ludCgpKSB7CisgICAgICAgICAgICBDR1BvaW50IGN1
cnJlbnRQb2ludCA9IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKKyAgICAgICAgICAgIENH
UG9pbnQgYWN0aXZlUG9pbnQgPSBjb29yZGluYXRvci0+bmVhcmVzdEFjdGl2ZUNvbnRlbnRJbnNl
dEFkanVzdGVkU25hcFBvaW50KHVub2JzY3VyZWRSZWN0Lm9yaWdpbi55LCBjdXJyZW50UG9pbnQp
OworCisgICAgICAgICAgICBpZiAoIUNHUG9pbnRFcXVhbFRvUG9pbnQoYWN0aXZlUG9pbnQsIGN1
cnJlbnRQb2ludCkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBz
dHJvbmdTY3JvbGxWaWV3ID0gX3Njcm9sbFZpZXc7CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1Njcm9sbFZpZXcsIGFjdGl2
ZVBvaW50XSB7CisgICAgICAgICAgICAgICAgICAgIFtzdHJvbmdTY3JvbGxWaWV3IHNldENvbnRl
bnRPZmZzZXQ6YWN0aXZlUG9pbnQgYW5pbWF0ZWQ6Tk9dOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBbX2NvbnRlbnRW
aWV3IGRpZFVwZGF0ZVZpc2libGVSZWN0OnZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMK
KyAgICAgICAgdW5vYnNjdXJlZFJlY3Q6dW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRl
cworICAgICAgICBjb250ZW50SW5zZXRzOmNvbnRlbnRJbnNldHMKKyAgICAgICAgdW5vYnNjdXJl
ZFJlY3RJblNjcm9sbFZpZXdDb29yZGluYXRlczp1bm9ic2N1cmVkUmVjdAorICAgICAgICBvYnNj
dXJlZEluc2V0czpfb2JzY3VyZWRJbnNldHMKKyAgICAgICAgdW5vYnNjdXJlZFNhZmVBcmVhSW5z
ZXRzOltzZWxmIF9jb21wdXRlZFVub2JzY3VyZWRTYWZlQXJlYUluc2V0XQorICAgICAgICBpbnB1
dFZpZXdCb3VuZHM6X2lucHV0Vmlld0JvdW5kcworICAgICAgICBzY2FsZTpzY2FsZUZhY3RvciBt
aW5pbXVtU2NhbGU6W19zY3JvbGxWaWV3IG1pbmltdW1ab29tU2NhbGVdCisgICAgICAgIGluU3Rh
YmxlU3RhdGU6aW5TdGFibGVTdGF0ZQorICAgICAgICBpc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJ
bnRlcmFjdGl2ZWx5Ol9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5CisgICAg
ICAgIGVuY2xvc2VkSW5TY3JvbGxhYmxlQW5jZXN0b3JWaWV3OnNjcm9sbFZpZXdDYW5TY3JvbGwo
W3NlbGYgX3Njcm9sbGVyXSldOworCisgICAgd2hpbGUgKCFfdmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlQ2FsbGJhY2tzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIGNhbGxiYWNrID0gX3Zpc2li
bGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy50YWtlTGFzdCgpOworICAgICAgICBjYWxsYmFj
aygpOworICAgIH0KKworICAgIGlmICgodGltZU5vdyAtIF90aW1lT2ZSZXF1ZXN0Rm9yVmlzaWJs
ZUNvbnRlbnRSZWN0VXBkYXRlKSA+IGRlbGF5QmVmb3JlTm9WaXNpYmxlQ29udGVudHNSZWN0c0xv
Z2dpbmcpCisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJWaWV3IF91
cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzOl0gZmluYWxseSByYW4gJS4yZnMgYWZ0ZXIgYmVpbmcg
c2NoZWR1bGVkIiwgc2VsZiwgKHRpbWVOb3cgLSBfdGltZU9mUmVxdWVzdEZvclZpc2libGVDb250
ZW50UmVjdFVwZGF0ZSkudmFsdWUoKSk7CisKKyAgICBfdGltZU9mTGFzdFZpc2libGVDb250ZW50
UmVjdFVwZGF0ZSA9IHRpbWVOb3c7CisgICAgaWYgKCFfdGltZU9mRmlyc3RWaXNpYmxlQ29udGVu
dFJlY3RVcGRhdGVXaXRoUGVuZGluZ0NvbW1pdCkKKyAgICAgICAgX3RpbWVPZkZpcnN0VmlzaWJs
ZUNvbnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQgPSB0aW1lTm93OworfQorCistICh2
b2lkKV9kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZQoreworICAgIGlmIChfZ2Vz
dHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+ZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JNYWluRnJhbWUoKTsKK30KKworc3RhdGljIFdlYkNvcmU6OkZsb2F0U2l6
ZSBhY3RpdmVNYXhpbXVtVW5vYnNjdXJlZFNpemUoV0tXZWJWaWV3ICp3ZWJWaWV3LCBjb25zdCBD
R1JlY3QmIGJvdW5kcykKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRTaXplKHdlYlZpZXct
Pl9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZS52YWx1ZU9yKGJvdW5kcy5zaXplKSk7Cit9
CisKK3N0YXRpYyBpbnQzMl90IGFjdGl2ZU9yaWVudGF0aW9uKFdLV2ViVmlldyAqd2ViVmlldykK
K3sKKyAgICByZXR1cm4gd2ViVmlldy0+X292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uID8g
ZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0aW9uKHdlYlZpZXctPl9pbnRl
cmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlKSA6IHdlYlZpZXctPl9wYWdlLT5kZXZpY2VPcmllbnRh
dGlvbigpOworfQorCistICh2b2lkKV9jYW5jZWxBbmltYXRlZFJlc2l6ZQoreworICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfY2Fu
Y2VsQW5pbWF0ZWRSZXNpemVdIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICVkIiwgc2VsZiwg
X3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9k
ZSk7CisKKyAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5h
bWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFfY3VzdG9tQ29udGVudFZpZXcpIHsKKyAgICAgICAgaWYgKF9yZXNpemVBbmltYXRp
b25WaWV3KSB7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGluZGV4T2ZSZXNpemVBbmltYXRpb25W
aWV3ID0gW1tfc2Nyb2xsVmlldyBzdWJ2aWV3c10gaW5kZXhPZk9iamVjdDpfcmVzaXplQW5pbWF0
aW9uVmlldy5nZXQoKV07CisgICAgICAgICAgICBbX3Njcm9sbFZpZXcgaW5zZXJ0U3Vidmlldzpf
Y29udGVudFZpZXcuZ2V0KCkgYXRJbmRleDppbmRleE9mUmVzaXplQW5pbWF0aW9uVmlld107Cisg
ICAgICAgICAgICBbX3Njcm9sbFZpZXcgaW5zZXJ0U3VidmlldzpbX2NvbnRlbnRWaWV3IHVuc2Nh
bGVkVmlld10gYXRJbmRleDppbmRleE9mUmVzaXplQW5pbWF0aW9uVmlldyArIDFdOworICAgICAg
ICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgICAg
ICAgICAgX3Jlc2l6ZUFuaW1hdGlvblZpZXcgPSBuaWw7CisgICAgICAgIH0KKworICAgICAgICBb
X2NvbnRlbnRWaWV3IHNldEhpZGRlbjpOT107CisgICAgICAgIF9yZXNpemVBbmltYXRpb25UcmFu
c2Zvcm1BZGp1c3RtZW50cyA9IENBVHJhbnNmb3JtM0RJZGVudGl0eTsKKyAgICB9CisKKyAgICBf
ZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRl
TW9kZTo6Tm90UmVzaXppbmc7CisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlXTsKK30KKworLSAodm9pZClfZGlkQ29tcGxldGVBbmltYXRlZFJlc2l6ZQoreworICAg
IGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2NvbnRl
bnRWaWV3IHNldEhpZGRlbjpOT107CisKKyAgICBpZiAoIV9yZXNpemVBbmltYXRpb25WaWV3KSB7
CisgICAgICAgIC8vIFBhcmFub2lhLiBJZiBfcmVzaXplQW5pbWF0aW9uVmlldyBpcyBudWxsIHdl
J2xsIGVuZCB1cCBzZXR0aW5nIGEgemVybyBzY2FsZSBvbiB0aGUgY29udGVudCB2aWV3LgorICAg
ICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAtW1dLV2ViVmlldyBfZGlkQ29tcGxldGVB
bmltYXRlZFJlc2l6ZTpdIC0gX3Jlc2l6ZUFuaW1hdGlvblZpZXcgaXMgbmlsIiwgc2VsZik7Cisg
ICAgICAgIFtzZWxmIF9jYW5jZWxBbmltYXRlZFJlc2l6ZV07CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkg
LVtXS1dlYlZpZXcgX2RpZENvbXBsZXRlQW5pbWF0ZWRSZXNpemVdIiwgc2VsZiwgX3BhZ2UtPmlk
ZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKKworICAgIE5TVUludGVnZXIgaW5kZXhPZlJlc2l6ZUFu
aW1hdGlvblZpZXcgPSBbW19zY3JvbGxWaWV3IHN1YnZpZXdzXSBpbmRleE9mT2JqZWN0Ol9yZXNp
emVBbmltYXRpb25WaWV3LmdldCgpXTsKKyAgICBbX3Njcm9sbFZpZXcgaW5zZXJ0U3Vidmlldzpf
Y29udGVudFZpZXcuZ2V0KCkgYXRJbmRleDppbmRleE9mUmVzaXplQW5pbWF0aW9uVmlld107Cisg
ICAgW19zY3JvbGxWaWV3IGluc2VydFN1YnZpZXc6W19jb250ZW50VmlldyB1bnNjYWxlZFZpZXdd
IGF0SW5kZXg6aW5kZXhPZlJlc2l6ZUFuaW1hdGlvblZpZXcgKyAxXTsKKworICAgIENBTGF5ZXIg
KmNvbnRlbnRMYXllciA9IFtfY29udGVudFZpZXcgbGF5ZXJdOworICAgIENHRmxvYXQgYWRqdXN0
bWVudFNjYWxlID0gX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRzLm0xMTsKKyAg
ICBjb250ZW50TGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7
CisKKyAgICBDR0Zsb2F0IGFuaW1hdGluZ1NjYWxlVGFyZ2V0ID0gW1tfcmVzaXplQW5pbWF0aW9u
VmlldyBsYXllcl0gdHJhbnNmb3JtXS5tMTE7CisgICAgQ0FUcmFuc2Zvcm0zRCBjb250ZW50TGF5
ZXJUcmFuc2Zvcm0gPSBjb250ZW50TGF5ZXIudHJhbnNmb3JtOworICAgIENHRmxvYXQgY3VycmVu
dFNjYWxlID0gW1tfcmVzaXplQW5pbWF0aW9uVmlldyBsYXllcl0gdHJhbnNmb3JtXS5tMTEgKiBj
b250ZW50TGF5ZXJUcmFuc2Zvcm0ubTExOworCisgICAgLy8gV2UgY2Fubm90IHVzZSBbVUlTY3Jv
bGxWaWV3IHNldFpvb21TY2FsZTpdIGRpcmVjdGx5IGJlY2F1c2UgdGhlIFVJU2Nyb2xsVmlldyBk
ZWxlZ2F0ZSB3b3VsZCBnZXQgYSBjYWxsYmFjayB3aXRoCisgICAgLy8gYW4gaW52YWxpZCBjb250
ZW50T2Zmc2V0LiBUaGUgcmVhbCBjb250ZW50IG9mZnNldCBpcyBvbmx5IHNldCBiZWxvdy4KKyAg
ICAvLyBTaW5jZSB0aGVyZSBpcyBubyBwdWJsaWMgQVBJIGZvciBzZXR0aW5nIGJvdGggdGhlIHpv
b21TY2FsZSBhbmQgdGhlIGNvbnRlbnRPZmZzZXQsIHdlIHNldCB0aGUgem9vbVNjYWxlIG1hbnVh
bGx5CisgICAgLy8gb24gdGhlIHpvb20gbGF5ZXIgYW5kIHRoZW4gb25seSBjaGFuZ2UgdGhlIGNv
bnRlbnRPZmZzZXQuCisgICAgQ0dGbG9hdCBhZGp1c3RlZFNjYWxlID0gYWRqdXN0bWVudFNjYWxl
ICogY3VycmVudFNjYWxlOworICAgIGNvbnRlbnRMYXllclRyYW5zZm9ybS5tMTEgPSBhZGp1c3Rl
ZFNjYWxlOworICAgIGNvbnRlbnRMYXllclRyYW5zZm9ybS5tMjIgPSBhZGp1c3RlZFNjYWxlOwor
ICAgIGNvbnRlbnRMYXllci50cmFuc2Zvcm0gPSBjb250ZW50TGF5ZXJUcmFuc2Zvcm07CisKKyAg
ICBDR1BvaW50IGN1cnJlbnRTY3JvbGxPZmZzZXQgPSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNl
dF07CisgICAgZG91YmxlIGhvcml6b250YWxTY3JvbGxBZGp1c3RlbWVudCA9IF9yZXNpemVBbmlt
YXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cy5tNDEgKiBhbmltYXRpbmdTY2FsZVRhcmdldDsKKyAg
ICBkb3VibGUgdmVydGljYWxTY3JvbGxBZGp1c3RtZW50ID0gX3Jlc2l6ZUFuaW1hdGlvblRyYW5z
Zm9ybUFkanVzdG1lbnRzLm00MiAqIGFuaW1hdGluZ1NjYWxlVGFyZ2V0OworCisgICAgW19zY3Jv
bGxWaWV3IHNldENvbnRlbnRTaXplOnJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKCpfcGFnZSwg
W19jb250ZW50VmlldyBmcmFtZV0uc2l6ZSldOworICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50
T2Zmc2V0OkNHUG9pbnRNYWtlKGN1cnJlbnRTY3JvbGxPZmZzZXQueCAtIGhvcml6b250YWxTY3Jv
bGxBZGp1c3RlbWVudCwgY3VycmVudFNjcm9sbE9mZnNldC55IC0gdmVydGljYWxTY3JvbGxBZGp1
c3RtZW50KV07CisKKyAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgcmVtb3ZlRnJvbVN1cGVydmll
d107CisgICAgX3Jlc2l6ZUFuaW1hdGlvblZpZXcgPSBuaWw7CisgICAgX3Jlc2l6ZUFuaW1hdGlv
blRyYW5zZm9ybUFkanVzdG1lbnRzID0gQ0FUcmFuc2Zvcm0zRElkZW50aXR5OworCisgICAgX2R5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1v
ZGU6Ok5vdFJlc2l6aW5nOworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZV07CisKKyAgICBDR1JlY3QgbmV3Qm91bmRzID0gc2VsZi5ib3VuZHM7CisgICAgYXV0byBu
ZXdWaWV3TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOm5ld0JvdW5kc107
CisgICAgYXV0byBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBhY3RpdmVNYXhpbXVtVW5vYnNj
dXJlZFNpemUoc2VsZiwgbmV3Qm91bmRzKTsKKyAgICBpbnQzMl90IG5ld09yaWVudGF0aW9uID0g
YWN0aXZlT3JpZW50YXRpb24oc2VsZik7CisKKyAgICBpZiAoIV9sYXN0U2VudFZpZXdMYXlvdXRT
aXplIHx8IG5ld1ZpZXdMYXlvdXRTaXplICE9IF9sYXN0U2VudFZpZXdMYXlvdXRTaXplLnZhbHVl
KCkpCisgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOm5ld1ZpZXdMYXlv
dXRTaXplXTsKKworICAgIGlmICghX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplIHx8IG5l
d01heGltdW1Vbm9ic2N1cmVkU2l6ZSAhPSBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUu
dmFsdWUoKSkKKyAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0TWF4aW11bVVub2JzY3VyZWRTaXpl
OldlYkNvcmU6OkZsb2F0U2l6ZShuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUpXTsKKworICAgIGlm
ICghX2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gfHwgbmV3T3JpZW50YXRpb24gIT0gX2xhc3RT
ZW50RGV2aWNlT3JpZW50YXRpb24udmFsdWUoKSkKKyAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0
RGV2aWNlT3JpZW50YXRpb246bmV3T3JpZW50YXRpb25dOworCisgICAgd2hpbGUgKCFfY2FsbGJh
Y2tzRGVmZXJyZWREdXJpbmdSZXNpemUuaXNFbXB0eSgpKQorICAgICAgICBfY2FsbGJhY2tzRGVm
ZXJyZWREdXJpbmdSZXNpemUudGFrZUxhc3QoKSgpOworfQorCistICh2b2lkKV9kaWRGaW5pc2hM
b2FkRm9yTWFpbkZyYW1lCit7CisgICAgaWYgKF9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAg
X2dlc3R1cmVDb250cm9sbGVyLT5kaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lKCk7Cit9CisKKy0g
KHZvaWQpX2RpZEZhaWxMb2FkRm9yTWFpbkZyYW1lCit7CisgICAgaWYgKF9nZXN0dXJlQ29udHJv
bGxlcikKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5kaWRGYWlsTG9hZEZvck1haW5GcmFt
ZSgpOworfQorCistICh2b2lkKV9kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1l
OihXZWJLaXQ6OlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKW5hdmlnYXRpb25UeXBlCit7Cisg
ICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbjp0b0FQ
SShuYXZpZ2F0aW9uVHlwZSldOworCisgICAgaWYgKF9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAg
ICAgX2dlc3R1cmVDb250cm9sbGVyLT5kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZy
YW1lKG5hdmlnYXRpb25UeXBlKTsKK30KKworLSAodm9pZClfa2V5Ym9hcmRDaGFuZ2VkV2l0aElu
Zm86KE5TRGljdGlvbmFyeSAqKWtleWJvYXJkSW5mbyBhZGp1c3RTY3JvbGxWaWV3OihCT09MKWFk
anVzdFNjcm9sbFZpZXcKK3sKKyAgICBOU1ZhbHVlICplbmRGcmFtZVZhbHVlID0gW2tleWJvYXJk
SW5mbyBvYmplY3RGb3JLZXk6VUlLZXlib2FyZEZyYW1lRW5kVXNlckluZm9LZXldOworICAgIGlm
ICghZW5kRnJhbWVWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGtleWJvYXJk
IHJlY3QgaXMgYWx3YXlzIGluIHNjcmVlbiBjb29yZGluYXRlcy4gSW4gdGhlIHZpZXcgc2Vydmlj
ZXMgY2FzZSB0aGUgd2luZG93IGRvZXMgbm90CisgICAgLy8gaGF2ZSB0aGUgaW50ZXJmYWNlIG9y
aWVudGF0aW9uIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uOyBpdHMgaG9zdCBkb2VzLiBTbywgaXQg
bWFrZXMgbm8gc2Vuc2UgdG8KKyAgICAvLyBjbGlwIHRoZSBrZXlib2FyZCByZWN0IGFnYWluc3Qg
aXRzIHNjcmVlbi4KKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gX2lzSG9zdGVkSW5Bbm90aGVyUHJv
Y2Vzc10pCisgICAgICAgIF9pbnB1dFZpZXdCb3VuZHMgPSBbc2VsZi53aW5kb3cgY29udmVydFJl
Y3Q6W2VuZEZyYW1lVmFsdWUgQ0dSZWN0VmFsdWVdIGZyb21XaW5kb3c6bmlsXTsKKyAgICBlbHNl
CisgICAgICAgIF9pbnB1dFZpZXdCb3VuZHMgPSBbc2VsZi53aW5kb3cgY29udmVydFJlY3Q6Q0dS
ZWN0SW50ZXJzZWN0aW9uKFtlbmRGcmFtZVZhbHVlIENHUmVjdFZhbHVlXSwgc2VsZi53aW5kb3cu
c2NyZWVuLmJvdW5kcykgZnJvbVdpbmRvdzpuaWxdOworCisgICAgaWYgKFtbVUlQZXJpcGhlcmFs
SG9zdCBzaGFyZWRJbnN0YW5jZV0gaXNVbmRvY2tlZF0pCisgICAgICAgIF9pbnB1dFZpZXdCb3Vu
ZHMgPSBDR1JlY3RaZXJvOworCisgICAgaWYgKGFkanVzdFNjcm9sbFZpZXcpIHsKKyAgICAgICAg
Q0dGbG9hdCBib3R0b21JbnNldEJlZm9yZUFkanVzdG1lbnQgPSBbX3Njcm9sbFZpZXcgY29udGVu
dEluc2V0XS5ib3R0b207CisgICAgICAgIFNldEZvclNjb3BlPEJPT0w+IGluc2V0QWRqdXN0bWVu
dEd1YXJkKF9jdXJyZW50bHlBZGp1c3RpbmdTY3JvbGxWaWV3SW5zZXRzRm9yS2V5Ym9hcmQsIFlF
Uyk7CisgICAgICAgIFtfc2Nyb2xsVmlldyBfYWRqdXN0Rm9yQXV0b21hdGljS2V5Ym9hcmRJbmZv
OmtleWJvYXJkSW5mbyBhbmltYXRlZDpZRVMgbGFzdEFkanVzdG1lbnQ6Jl9sYXN0QWRqdXN0bWVu
dEZvclNjcm9sbGVyXTsKKyAgICAgICAgQ0dGbG9hdCBib3R0b21JbnNldEFmdGVyQWRqdXN0bWVu
dCA9IFtfc2Nyb2xsVmlldyBjb250ZW50SW5zZXRdLmJvdHRvbTsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgInRvdGFsIGJvdHRvbSBjb250ZW50IGluc2V0IGFkanVzdG1lbnQiIG1lY2hhbmlzbSBo
YXNuJ3Qgd29ya2VkIHNpbmNlIGlPUyAxMSwgc2luY2UgLV9hZGp1c3RGb3JBdXRvbWF0aWNLZXli
b2FyZEluZm86YW5pbWF0ZWQ6bGFzdEFkanVzdG1lbnQ6CisgICAgICAgIC8vIG5vIGxvbmdlciBz
ZXRzIC1bVUlTY3JvbGxWaWV3IGNvbnRlbnRJbnNldF0gZm9yIGFwcHMgbGlua2VkIG9uIG9yIGFm
dGVyIGlPUyAxMS4gV2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgbG9naWMsIHNpbmNl
IHRoZSBvcmlnaW5hbCBidWcgdGhpcyB3YXMKKyAgICAgICAgLy8gaW50ZW5kZWQgdG8gZml4LCA8
cmRhcjovL3Byb2JsZW0vMjMyMDIyNTQ+LCByZW1haW5zIGZpeGVkIHRocm91Z2ggb3RoZXIgbWVh
bnMuCisgICAgICAgIGlmIChib3R0b21JbnNldEJlZm9yZUFkanVzdG1lbnQgIT0gYm90dG9tSW5z
ZXRBZnRlckFkanVzdG1lbnQpCisgICAgICAgICAgICBfdG90YWxTY3JvbGxWaWV3Qm90dG9tSW5z
ZXRBZGp1c3RtZW50Rm9yS2V5Ym9hcmQgKz0gYm90dG9tSW5zZXRBZnRlckFkanVzdG1lbnQgLSBi
b3R0b21JbnNldEJlZm9yZUFkanVzdG1lbnQ7CisgICAgfQorCisgICAgW3NlbGYgX3NjaGVkdWxl
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKK30KKworLSAoQk9PTClfc2hvdWxkVXBkYXRlS2V5
Ym9hcmRXaXRoSW5mbzooTlNEaWN0aW9uYXJ5ICopa2V5Ym9hcmRJbmZvCit7CisgICAgaWYgKFtf
Y29udGVudFZpZXcgaXNGb2N1c2luZ0VsZW1lbnRdKQorICAgICAgICByZXR1cm4gWUVTOworCisg
ICAgTlNOdW1iZXIgKmlzTG9jYWxLZXlib2FyZCA9IFtrZXlib2FyZEluZm8gdmFsdWVGb3JLZXk6
VUlLZXlib2FyZElzTG9jYWxVc2VySW5mb0tleV07CisgICAgcmV0dXJuIGlzTG9jYWxLZXlib2Fy
ZCAmJiAhaXNMb2NhbEtleWJvYXJkLmJvb2xWYWx1ZTsKK30KKworLSAodm9pZClfa2V5Ym9hcmRX
aWxsQ2hhbmdlRnJhbWU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYg
KFtzZWxmIF9zaG91bGRVcGRhdGVLZXlib2FyZFdpdGhJbmZvOm5vdGlmaWNhdGlvbi51c2VySW5m
b10pCisgICAgICAgIFtzZWxmIF9rZXlib2FyZENoYW5nZWRXaXRoSW5mbzpub3RpZmljYXRpb24u
dXNlckluZm8gYWRqdXN0U2Nyb2xsVmlldzpZRVNdOworfQorCistICh2b2lkKV9rZXlib2FyZERp
ZENoYW5nZUZyYW1lOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIFtzZWxm
IF9rZXlib2FyZENoYW5nZWRXaXRoSW5mbzpub3RpZmljYXRpb24udXNlckluZm8gYWRqdXN0U2Ny
b2xsVmlldzpOT107Cit9CisKKy0gKHZvaWQpX2tleWJvYXJkV2lsbFNob3c6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKFtzZWxmIF9zaG91bGRVcGRhdGVLZXlib2Fy
ZFdpdGhJbmZvOm5vdGlmaWNhdGlvbi51c2VySW5mb10pCisgICAgICAgIFtzZWxmIF9rZXlib2Fy
ZENoYW5nZWRXaXRoSW5mbzpub3RpZmljYXRpb24udXNlckluZm8gYWRqdXN0U2Nyb2xsVmlldzpZ
RVNdOworCisgICAgX3BhZ2UtPnNldElzS2V5Ym9hcmRBbmltYXRpbmdJbih0cnVlKTsKK30KKwor
LSAodm9pZClfa2V5Ym9hcmREaWRTaG93OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgor
eworICAgIF9wYWdlLT5zZXRJc0tleWJvYXJkQW5pbWF0aW5nSW4oZmFsc2UpOworfQorCistICh2
b2lkKV9rZXlib2FyZFdpbGxIaWRlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorewor
ICAgIGlmIChbX2NvbnRlbnRWaWV3IHNob3VsZElnbm9yZUtleWJvYXJkV2lsbEhpZGVOb3RpZmlj
YXRpb25dKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfa2V5Ym9hcmRDaGFuZ2VkV2l0
aEluZm86bm90aWZpY2F0aW9uLnVzZXJJbmZvIGFkanVzdFNjcm9sbFZpZXc6WUVTXTsKK30KKwor
LSAodm9pZClfd2luZG93RGlkUm90YXRlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgor
eworICAgIGlmICghX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uKQorICAgICAgICBbc2Vs
ZiBfZGlzcGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjpkZXZpY2VPcmllbnRhdGlvbigpXTsKK30K
KworLSAodm9pZClfY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZTooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KK3sKKyAgICBfcGFnZS0+Y29udGVudFNpemVDYXRlZ29yeURpZENoYW5n
ZShbc2VsZiBfY29udGVudFNpemVDYXRlZ29yeV0pOworfQorCistICh2b2lkKV9hY2Nlc3NpYmls
aXR5U2V0dGluZ3NEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgX3BhZ2UtPmFjY2Vzc2liaWxpdHlTZXR0aW5nc0RpZENoYW5nZSgpOworfQorCistIChOU1N0
cmluZyAqKV9jb250ZW50U2l6ZUNhdGVnb3J5Cit7CisgICAgcmV0dXJuIFtbVUlBcHBsaWNhdGlv
biBzaGFyZWRBcHBsaWNhdGlvbl0gcHJlZmVycmVkQ29udGVudFNpemVDYXRlZ29yeV07Cit9CisK
Ky0gKEJPT0wpX2lzTmF2aWdhdGlvblN3aXBlR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJl
Y29nbml6ZXIgKilyZWNvZ25pemVyCit7CisgICAgaWYgKCFfZ2VzdHVyZUNvbnRyb2xsZXIpCisg
ICAgICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX2dlc3R1cmVDb250cm9sbGVyLT5pc05hdmln
YXRpb25Td2lwZUdlc3R1cmVSZWNvZ25pemVyKHJlY29nbml6ZXIpOworfQorCistICh2b2lkKV9u
YXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luCit7CisgICAgLy8gRHVyaW5nIGEgYmFjay9mb3J3YXJk
IHN3aXBlLCB0aGVyZSdzIGEgdmlldyBpbnRlcnBvc2VkIGJldHdlZW4gdGhpcyB2aWV3IGFuZCB0
aGUgY29udGVudCB2aWV3IHRoYXQgaGFzCisgICAgLy8gYW4gb2Zmc2V0IGFuZCBhbmltYXRpb24g
b24gaXQsIHdoaWNoIHJlc3VsdHMgaW4gY29tcHV0aW5nIGluY29ycmVjdCByZWN0YW5nbGVzLiBX
b3JrIGFyb3VuZCBieSB1c2luZworICAgIC8vIGZyb3plbiByZWN0cyBkdXJpbmcgc3dpcGVzLgor
ICAgIENHUmVjdCBmdWxsVmlld1JlY3QgPSBzZWxmLmJvdW5kczsKKyAgICBDR1JlY3QgdW5vYnNj
dXJlZFJlY3QgPSBVSUVkZ2VJbnNldHNJbnNldFJlY3QoZnVsbFZpZXdSZWN0LCBbc2VsZiBfY29t
cHV0ZWRPYnNjdXJlZEluc2V0XSk7CisKKyAgICBfZnJvemVuVmlzaWJsZUNvbnRlbnRSZWN0ID0g
W3NlbGYgY29udmVydFJlY3Q6ZnVsbFZpZXdSZWN0IHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCld
OworICAgIF9mcm96ZW5Vbm9ic2N1cmVkQ29udGVudFJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDp1
bm9ic2N1cmVkUmVjdCB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKworICAgIExPR19XSVRI
X1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiX25hdmlnYXRpb25HZXN0dXJlRGlkQmVn
aW46IGZyZWV6aW5nIHZpc2libGVDb250ZW50UmVjdCAiIDw8IFdlYkNvcmU6OkZsb2F0UmVjdChf
ZnJvemVuVmlzaWJsZUNvbnRlbnRSZWN0LnZhbHVlKCkpIDw8ICIgVW5vYnNjdXJlZENvbnRlbnRS
ZWN0ICIgPDwgV2ViQ29yZTo6RmxvYXRSZWN0KF9mcm96ZW5Vbm9ic2N1cmVkQ29udGVudFJlY3Qu
dmFsdWUoKSkpOworfQorCistICh2b2lkKV9uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZAoreworICAg
IF9mcm96ZW5WaXNpYmxlQ29udGVudFJlY3QgPSBXVEY6Om51bGxvcHQ7CisgICAgX2Zyb3plblVu
b2JzY3VyZWRDb250ZW50UmVjdCA9IFdURjo6bnVsbG9wdDsKK30KKworLSAodm9pZClfc2hvd1Bh
c3N3b3JkVmlld1dpdGhEb2N1bWVudE5hbWU6KE5TU3RyaW5nICopZG9jdW1lbnROYW1lIHBhc3N3
b3JkSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcgKikpcGFzc3dvcmRIYW5kbGVyCit7CisgICAg
QVNTRVJUKCFfcGFzc3dvcmRWaWV3KTsKKyAgICBfcGFzc3dvcmRWaWV3ID0gYWRvcHROUyhbW1dL
UGFzc3dvcmRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYuYm91bmRzIGRvY3VtZW50TmFt
ZTpkb2N1bWVudE5hbWVdKTsKKyAgICBbX3Bhc3N3b3JkVmlldyBzZXRVc2VyRGlkRW50ZXJQYXNz
d29yZDpwYXNzd29yZEhhbmRsZXJdOworICAgIFtfcGFzc3dvcmRWaWV3IHNob3dJblNjcm9sbFZp
ZXc6X3Njcm9sbFZpZXcuZ2V0KCldOworICAgIHNlbGYuX2N1cnJlbnRDb250ZW50Vmlldy5oaWRk
ZW4gPSBZRVM7Cit9CisKKy0gKHZvaWQpX2hpZGVQYXNzd29yZFZpZXcKK3sKKyAgICBpZiAoIV9w
YXNzd29yZFZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIHNlbGYuX2N1cnJlbnRDb250ZW50
Vmlldy5oaWRkZW4gPSBOTzsKKyAgICBbX3Bhc3N3b3JkVmlldyBoaWRlXTsKKyAgICBfcGFzc3dv
cmRWaWV3ID0gbmlsOworfQorCistIChXS1Bhc3N3b3JkVmlldyAqKV9wYXNzd29yZFZpZXcKK3sK
KyAgICByZXR1cm4gX3Bhc3N3b3JkVmlldy5nZXQoKTsKK30KKworLSAodm9pZClfdXBkYXRlU2Ny
b2xsVmlld0luc2V0QWRqdXN0bWVudEJlaGF2aW9yCit7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwCisgICAgaWYgKCFbX3Njcm9sbFZpZXcgX2NvbnRlbnRJ
bnNldEFkanVzdG1lbnRCZWhhdmlvcldhc0V4dGVybmFsbHlPdmVycmlkZGVuXSkKKyAgICAgICAg
W19zY3JvbGxWaWV3IF9zZXRDb250ZW50SW5zZXRBZGp1c3RtZW50QmVoYXZpb3JJbnRlcm5hbDpz
ZWxmLl9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzID8gVUlTY3JvbGxWaWV3Q29u
dGVudEluc2V0QWRqdXN0bWVudEFsd2F5cyA6IFVJU2Nyb2xsVmlld0NvbnRlbnRJbnNldEFkanVz
dG1lbnROZXZlcl07CisjZW5kaWYKK30KKworLSAodm9pZClfc2V0QXZvaWRzVW5zYWZlQXJlYToo
Qk9PTClhdm9pZHNVbnNhZmVBcmVhCit7CisgICAgaWYgKF9hdm9pZHNVbnNhZmVBcmVhID09IGF2
b2lkc1Vuc2FmZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIF9hdm9pZHNVbnNhZmVBcmVh
ID0gYXZvaWRzVW5zYWZlQXJlYTsKKworICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3SW5zZXRB
ZGp1c3RtZW50QmVoYXZpb3JdOworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVj
dFVwZGF0ZV07CisKKyAgICBpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IChp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pW3NlbGYgVUlEZWxlZ2F0ZV07CisgICAgaWYgKFt1aURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkQ2hhbmdlU2Fm
ZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0czopXSkKKyAgICAgICAgW3VpRGVsZWdhdGUg
X3dlYlZpZXc6c2VsZiBkaWRDaGFuZ2VTYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRz
OmF2b2lkc1Vuc2FmZUFyZWFdOworfQorCistIChCT09MKV9oYXZlU2V0T2JzY3VyZWRJbnNldHMK
K3sKKyAgICByZXR1cm4gX2hhdmVTZXRPYnNjdXJlZEluc2V0czsKK30KKworI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKKy0gKHZvaWQpcmVtb3ZlRnJvbVN1cGVydmlldworeworICAgIFtzdXBl
ciByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyIGlzRnVsbFNjcmVlbl0pCisgICAgICAgIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIgd2ViVmlld0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbl07Cit9Cisj
ZW5kaWYKKworLSAodm9pZClfZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVT
dGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrcworeworICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHN0
cm9uZ1NlbGYgPSBzZWxmOworICAgIFtzZWxmIF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZTpbc3Ryb25nU2VsZl0geworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbc3Ryb25nU2VsZl0geworICAgICAgICAgICAgaWYgKFtzdHJvbmdTZWxmLT5f
c3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgY291bnRdKQorICAgICAgICAg
ICAgICAgIFtzdHJvbmdTZWxmIF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJs
ZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKKyAgICAgICAgfSk7CisgICAgfV07Cit9CisK
K3N0YXRpYyBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHRvVXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0ZSBjb250ZW50QXR0
cmlidXRlKQoreworICAgIGF1dG8gZGlyZWN0aW9uID0gW1VJVmlldyB1c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uRm9yU2VtYW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVd
OworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb25MZWZ0VG9SaWdodDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb246OkxUUjsKKyAgICBjYXNlIFVJVXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvblJpZ2h0VG9MZWZ0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbjo6UlRMOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpM
VFI7Cit9CisKKy0gKHZvaWQpc2V0U2VtYW50aWNDb250ZW50QXR0cmlidXRlOihVSVNlbWFudGlj
Q29udGVudEF0dHJpYnV0ZSljb250ZW50QXR0cmlidXRlCit7CisgICAgW3N1cGVyIHNldFNlbWFu
dGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKKworICAgIF9wYWdlLT5zZXRV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHRvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bihjb250ZW50QXR0cmlidXRlKSk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLV2Vi
VmlldyAoV0tQcml2YXRlSU9TKQorCistIChDR1JlY3QpX2NvbnRlbnRWaXNpYmxlUmVjdAorewor
ICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxmLl9j
dXJyZW50Q29udGVudFZpZXddOworfQorCisvLyBEZXByZWNhdGVkIFNQSS4KKy0gKENHU2l6ZSlf
bWluaW11bUxheW91dFNpemVPdmVycmlkZQoreworICAgIEFTU0VSVChfdmlld0xheW91dFNpemVP
dmVycmlkZSk7CisgICAgcmV0dXJuIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlLnZhbHVlT3IoQ0dT
aXplWmVybyk7Cit9CisKKy0gKHZvaWQpX3NldFZpZXdMYXlvdXRTaXplT3ZlcnJpZGU6KENHU2l6
ZSl2aWV3TGF5b3V0U2l6ZU92ZXJyaWRlCit7CisgICAgX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUg
PSB2aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOworCisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcp
CisgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOldlYkNvcmU6OkZsb2F0
U2l6ZSh2aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKV07Cit9CisKKy8vIERlcHJlY2F0ZWQgU1BJCist
IChDR1NpemUpX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlCit7CisgICAgQVNTRVJUKF9t
YXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSk7CisgICAgcmV0dXJuIF9tYXhpbXVtVW5vYnNj
dXJlZFNpemVPdmVycmlkZS52YWx1ZU9yKENHU2l6ZVplcm8pOworfQorCistICh2b2lkKV9zZXRN
YXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTooQ0dTaXplKXNpemUKK3sKKyAgICBBU1NFUlQo
c2l6ZS53aWR0aCA8PSBzZWxmLmJvdW5kcy5zaXplLndpZHRoICYmIHNpemUuaGVpZ2h0IDw9IHNl
bGYuYm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUgPSBzaXplOworCisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktp
dDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCisgICAgICAgIFtzZWxm
IF9kaXNwYXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUoc2l6
ZSldOworfQorCistIChVSUVkZ2VJbnNldHMpX29ic2N1cmVkSW5zZXRzCit7CisgICAgcmV0dXJu
IF9vYnNjdXJlZEluc2V0czsKK30KKworLSAodm9pZClfc2V0T2JzY3VyZWRJbnNldHM6KFVJRWRn
ZUluc2V0cylvYnNjdXJlZEluc2V0cworeworICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy50b3Ag
Pj0gMCk7CisgICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLmxlZnQgPj0gMCk7CisgICAgQVNTRVJU
KG9ic2N1cmVkSW5zZXRzLmJvdHRvbSA+PSAwKTsKKyAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMu
cmlnaHQgPj0gMCk7CisKKyAgICBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzID0gWUVTOworCisgICAg
aWYgKFVJRWRnZUluc2V0c0VxdWFsVG9FZGdlSW5zZXRzKF9vYnNjdXJlZEluc2V0cywgb2JzY3Vy
ZWRJbnNldHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBfb2JzY3VyZWRJbnNldHMgPSBvYnNj
dXJlZEluc2V0czsKKworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0
ZV07Cit9CisKKy0gKFVJUmVjdEVkZ2UpX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZl
QXJlYQoreworICAgIHJldHVybiBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVh
OworfQorCistICh2b2lkKV9zZXRPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWE6
KFVJUmVjdEVkZ2UpZWRnZXMKK3sKKyAgICBpZiAoZWRnZXMgPT0gX29ic2N1cmVkSW5zZXRFZGdl
c0FmZmVjdGVkQnlTYWZlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX29ic2N1cmVkSW5z
ZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSA9IGVkZ2VzOworCisgICAgW3NlbGYgX3NjaGVkdWxl
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKK30KKworLSAoVUlFZGdlSW5zZXRzKV91bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHMKK3sKKyAgICByZXR1cm4gX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0
czsKK30KKworLSAodm9pZClfc2V0VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOihVSUVkZ2VJbnNl
dHMpdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzCit7CisgICAgQVNTRVJUKHVub2JzY3VyZWRTYWZl
QXJlYUluc2V0cy50b3AgPj0gMCk7CisgICAgQVNTRVJUKHVub2JzY3VyZWRTYWZlQXJlYUluc2V0
cy5sZWZ0ID49IDApOworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMuYm90dG9t
ID49IDApOworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMucmlnaHQgPj0gMCk7
CisKKyAgICBfaGF2ZVNldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IFlFUzsKKworICAgIGlm
IChVSUVkZ2VJbnNldHNFcXVhbFRvRWRnZUluc2V0cyhfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRz
LCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBfdW5v
YnNjdXJlZFNhZmVBcmVhSW5zZXRzID0gdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOworCisgICAg
W3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKK30KKworLSAoQk9PTClf
c2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cworeworICAgIGlmICghW3NlbGYgdXNl
c1N0YW5kYXJkQ29udGVudFZpZXddKQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIF9h
dm9pZHNVbnNhZmVBcmVhOworfQorCistIChVSVZpZXcgKilfZW5jbG9zaW5nVmlld0ZvckV4cG9z
ZWRSZWN0Q29tcHV0YXRpb24KK3sKKyAgICByZXR1cm4gW3NlbGYgX3Njcm9sbGVyXTsKK30KKwor
LSAodm9pZClfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTooVUlJbnRlcmZhY2VPcmll
bnRhdGlvbilpbnRlcmZhY2VPcmllbnRhdGlvbgoreworICAgIF9vdmVycmlkZXNJbnRlcmZhY2VP
cmllbnRhdGlvbiA9IFlFUzsKKyAgICBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9IGlu
dGVyZmFjZU9yaWVudGF0aW9uOworCisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
ID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCisgICAg
ICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOmRldmljZU9yaWVudGF0aW9u
Rm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbihfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSld
OworfQorCistIChVSUludGVyZmFjZU9yaWVudGF0aW9uKV9pbnRlcmZhY2VPcmllbnRhdGlvbk92
ZXJyaWRlCit7CisgICAgQVNTRVJUKF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbik7Cisg
ICAgcmV0dXJuIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOworfQorCistICh2b2lkKV9j
bGVhckludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUKK3sKKyAgICBfb3ZlcnJpZGVzSW50ZXJm
YWNlT3JpZW50YXRpb24gPSBOTzsKKyAgICBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9
IFVJSW50ZXJmYWNlT3JpZW50YXRpb25Qb3J0cmFpdDsKK30KKworLSAodm9pZClfc2V0QWxsb3dz
Vmlld3BvcnRTaHJpbmtUb0ZpdDooQk9PTClhbGxvd1Nocmlua1RvRml0Cit7CisgICAgX2FsbG93
c1ZpZXdwb3J0U2hyaW5rVG9GaXQgPSBhbGxvd1Nocmlua1RvRml0OworfQorCistIChCT09MKV9h
bGxvd3NWaWV3cG9ydFNocmlua1RvRml0Cit7CisgICAgcmV0dXJuIF9hbGxvd3NWaWV3cG9ydFNo
cmlua1RvRml0OworfQorCistIChCT09MKV9pc0Rpc3BsYXlpbmdQREYKK3sKKyAgICBmb3IgKGF1
dG8mIG1pbWVUeXBlIDogV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6cGRmTUlNRVR5cGVzKCkp
IHsKKyAgICAgICAgQ2xhc3MgcHJvdmlkZXJDbGFzcyA9IFtbX2NvbmZpZ3VyYXRpb24gX2NvbnRl
bnRQcm92aWRlclJlZ2lzdHJ5XSBwcm92aWRlckZvck1JTUVUeXBlOm1pbWVUeXBlXTsKKyAgICAg
ICAgaWYgKFtfY3VzdG9tQ29udGVudFZpZXcgaXNLaW5kT2ZDbGFzczpwcm92aWRlckNsYXNzXSkK
KyAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorCisgICAgcmV0dXJuIE5POworfQorCist
IChOU0RhdGEgKilfZGF0YUZvckRpc3BsYXllZFBERgoreworICAgIGlmICghW3NlbGYgX2lzRGlz
cGxheWluZ1BERl0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtfY3VzdG9tQ29u
dGVudFZpZXcgd2ViX2RhdGFSZXByZXNlbnRhdGlvbl07Cit9CisKKy0gKE5TU3RyaW5nICopX3N1
Z2dlc3RlZEZpbGVuYW1lRm9yRGlzcGxheWVkUERGCit7CisgICAgaWYgKCFbc2VsZiBfaXNEaXNw
bGF5aW5nUERGXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW19jdXN0b21Db250
ZW50VmlldyB3ZWJfc3VnZ2VzdGVkRmlsZW5hbWVdOworfQorCistIChfV0tXZWJWaWV3UHJpbnRG
b3JtYXR0ZXIgKilfd2ViVmlld1ByaW50Rm9ybWF0dGVyCit7CisgICAgVUlWaWV3UHJpbnRGb3Jt
YXR0ZXIgKnZpZXdQcmludEZvcm1hdHRlciA9IHNlbGYudmlld1ByaW50Rm9ybWF0dGVyOworICAg
IEFTU0VSVChbdmlld1ByaW50Rm9ybWF0dGVyIGlzS2luZE9mQ2xhc3M6W19XS1dlYlZpZXdQcmlu
dEZvcm1hdHRlciBjbGFzc11dKTsKKyAgICByZXR1cm4gKF9XS1dlYlZpZXdQcmludEZvcm1hdHRl
ciAqKXZpZXdQcmludEZvcm1hdHRlcjsKK30KKworLSAoX1dLRHJhZ0ludGVyYWN0aW9uUG9saWN5
KV9kcmFnSW50ZXJhY3Rpb25Qb2xpY3kKK3sKKyAgICByZXR1cm4gX2RyYWdJbnRlcmFjdGlvblBv
bGljeTsKK30KKworLSAodm9pZClfc2V0RHJhZ0ludGVyYWN0aW9uUG9saWN5OihfV0tEcmFnSW50
ZXJhY3Rpb25Qb2xpY3kpcG9saWN5Cit7CisgICAgaWYgKF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3kg
PT0gcG9saWN5KQorICAgICAgICByZXR1cm47CisKKyAgICBfZHJhZ0ludGVyYWN0aW9uUG9saWN5
ID0gcG9saWN5OworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgW19jb250ZW50VmlldyBf
ZGlkQ2hhbmdlRHJhZ0ludGVyYWN0aW9uUG9saWN5XTsKKyNlbmRpZgorfQorCistIChCT09MKV9z
aG91bGRBdm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0NoYW5nZQoreworICAgIHJldHVy
biBbX2NvbnRlbnRWaWV3IF9zaG91bGRBdm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0No
YW5nZV07Cit9CisKKy0gKEJPT0wpX2NvbnRlbnRWaWV3SXNGaXJzdFJlc3BvbmRlcgoreworICAg
IHJldHVybiBzZWxmLl9jdXJyZW50Q29udGVudFZpZXcuaXNGaXJzdFJlc3BvbmRlcjsKK30KKwor
LSAoQ0dSZWN0KV91aVRleHRDYXJldFJlY3QKK3sKKyAgICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9u
IHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KKyAgICBbX2NvbnRlbnRWaWV3IF91cGRhdGVDaGFu
Z2VkU2VsZWN0aW9uXTsKKworICAgIHJldHVybiBbW19jb250ZW50VmlldyB2YWx1ZUZvcktleVBh
dGg6QCJpbnRlcmFjdGlvbkFzc2lzdGFudC5zZWxlY3Rpb25WaWV3LnNlbGVjdGlvbi5jYXJldFJl
Y3QiXSBDR1JlY3RWYWx1ZV07Cit9CisKKy0gKFVJVmlldyAqKV9zYWZlQnJvd3NpbmdXYXJuaW5n
Cit7CisgICAgcmV0dXJuIF9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOworfQorCistIChDR1Bv
aW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6KENHUG9pbnQpcG9pbnQKK3sKKyAg
ICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3OnNlbGYuX2N1cnJlbnRD
b250ZW50Vmlld107Cit9CisKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250
ZW50czooQ0dQb2ludClwb2ludAoreworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9p
bnQgdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107Cit9CisKKy0gKHZvaWQpX2RvQWZ0
ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlOihkaXNwYXRjaF9ibG9ja190KXVwZGF0ZUJs
b2NrCit7CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKKyAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2sp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBt
YWtlQmxvY2tQdHIodXBkYXRlQmxvY2spOworCisgICAgaWYgKF9zdGFibGVTdGF0ZVByZXNlbnRh
dGlvblVwZGF0ZUNhbGxiYWNrcykKKyAgICAgICAgW19zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVw
ZGF0ZUNhbGxiYWNrcyBhZGRPYmplY3Q6dXBkYXRlQmxvY2tDb3B5LmdldCgpXTsKKyAgICBlbHNl
IHsKKyAgICAgICAgX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6dXBkYXRlQmxvY2tD
b3B5LmdldCgpLCBuaWxdKTsKKyAgICAgICAgW3NlbGYgX2ZpcmVQcmVzZW50YXRpb25VcGRhdGVG
b3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3NdOworICAgIH0KK30KKwor
LSAodm9pZClfc2V0Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlkKXNlbmRlcgoreworICAg
IGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQorICAgICAgICBbX2NvbnRlbnRWaWV3
IF9zZXRGb250Rm9yV2ViVmlldzpmb250IHNlbmRlcjpzZW5kZXJdOworfQorCistICh2b2lkKV9z
ZXRGb250U2l6ZTooQ0dGbG9hdClmb250U2l6ZSBzZW5kZXI6KGlkKXNlbmRlcgoreworICAgIGlm
IChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQorICAgICAgICBbX2NvbnRlbnRWaWV3IF9z
ZXRGb250U2l6ZUZvcldlYlZpZXc6Zm9udFNpemUgc2VuZGVyOnNlbmRlcl07Cit9CisKKy0gKHZv
aWQpX3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQpc2VuZGVyCit7Cisg
ICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCisgICAgICAgIFtfY29udGVudFZp
ZXcgX3NldFRleHRDb2xvckZvcldlYlZpZXc6Y29sb3Igc2VuZGVyOnNlbmRlcl07Cit9CisKKy0g
KHZvaWQpX2RldGVjdERhdGFXaXRoVHlwZXM6KFdLRGF0YURldGVjdG9yVHlwZXMpdHlwZXMgY29t
cGxldGlvbkhhbmRsZXI6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbgoreworI2lmIEVOQUJM
RShEQVRBX0RFVEVDVElPTikKKyAgICBfcGFnZS0+ZGV0ZWN0RGF0YUluQWxsRnJhbWVzKGZyb21X
S0RhdGFEZXRlY3RvclR5cGVzKHR5cGVzKSwgW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbiksIHBhZ2UgPSBtYWtlV2Vha1B0cihfcGFnZS5nZXQoKSldIChhdXRvJiByZXN1bHQp
IHsKKyAgICAgICAgaWYgKHBhZ2UpCisgICAgICAgICAgICBwYWdlLT5zZXREYXRhRGV0ZWN0aW9u
UmVzdWx0KHJlc3VsdCk7CisgICAgICAgIGlmIChjb21wbGV0aW9uKQorICAgICAgICAgICAgY29t
cGxldGlvbigpOworICAgIH0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odHlwZXMpOworICAg
IFVOVVNFRF9QQVJBTShjb21wbGV0aW9uKTsKKyNlbmRpZgorfQorCistICh2b2lkKV9yZXF1ZXN0
QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxldGlvbkJs
b2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jaworeworICAgIGF1
dG8gaW5mb1JlcXVlc3QgPSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0KFdl
YkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpOworICAgIGluZm9SZXF1ZXN0LmluY2x1
ZGVTbmFwc2hvdCA9IHRydWU7CisKKyAgICBbX2NvbnRlbnRWaWV3IGRvQWZ0ZXJQb3NpdGlvbklu
Zm9ybWF0aW9uVXBkYXRlOltjYXB0dXJlZEJsb2NrID0gbWFrZUJsb2NrUHRyKGJsb2NrKV0gKFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pIHsKKyAg
ICAgICAgY2FwdHVyZWRCbG9jayhbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gYWN0aXZhdGVkRWxl
bWVudEluZm9XaXRoSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246aW5mb3JtYXRpb24g
dXNlckluZm86bmlsXSk7CisgICAgfSBmb3JSZXF1ZXN0OmluZm9SZXF1ZXN0XTsKK30KKworLSAo
dm9pZClkaWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb24KK3sKKyAgICAvLyBGb3Igc3ViY2xh
c3NlcyB0byBvdmVycmlkZS4KK30KKworLSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0
aW9uCit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCit9CisKKy0gKHZvaWQp
X2JlZ2luSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZQoreworICAgIEFTU0VSVCghX2lz
Q2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpOworICAgIF9pc0NoYW5naW5nT2Jz
Y3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0gWUVTOworfQorCistICh2b2lkKV9lbmRJbnRlcmFj
dGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdlCit7CisgICAgQVNTRVJUKF9pc0NoYW5naW5nT2JzY3Vy
ZWRJbnNldHNJbnRlcmFjdGl2ZWx5KTsKKyAgICBfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50
ZXJhY3RpdmVseSA9IE5POworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZV07Cit9CisKKy0gKHZvaWQpX2hpZGVDb250ZW50VW50aWxOZXh0VXBkYXRlCit7CisgICAg
aWYgKGF1dG8qIGFyZWEgPSBfcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgYXJlYS0+aGlk
ZUNvbnRlbnRVbnRpbEFueVVwZGF0ZSgpOworfQorCistICh2b2lkKV9iZWdpbkFuaW1hdGVkUmVz
aXplV2l0aFVwZGF0ZXM6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCit7CisgICAgQ0dSZWN0
IG9sZEJvdW5kcyA9IHNlbGYuYm91bmRzOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBvbGRVbm9i
c2N1cmVkQ29udGVudFJlY3QgPSBfcGFnZS0+dW5vYnNjdXJlZENvbnRlbnRSZWN0KCk7CisKKyAg
ICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSB8fCAhX2hhc0NvbW1pdHRlZExv
YWRGb3JNYWluRnJhbWUgfHwgQ0dSZWN0SXNFbXB0eShvbGRCb3VuZHMpIHx8IG9sZFVub2JzY3Vy
ZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZp
ZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJfYmVnaW5BbmltYXRlZFJlc2l6ZVdp
dGhVcGRhdGVzOildKQorICAgICAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfYmVnaW5B
bmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOnVwZGF0ZUJsb2NrXTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdXBkYXRlQmxvY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJF
TEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBf
YmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOl0iLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmll
cigpLnRvVUludDY0KCkpOworCisgICAgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJL
aXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6OlJlc2l6aW5nV2l0aEFuaW1hdGlvbjsKKwor
ICAgIGF1dG8gb2xkVmlld0xheW91dFNpemUgPSBbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpz
ZWxmLmJvdW5kc107CisgICAgYXV0byBvbGRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBhY3RpdmVN
YXhpbXVtVW5vYnNjdXJlZFNpemUoc2VsZiwgb2xkQm91bmRzKTsKKyAgICBpbnQzMl90IG9sZE9y
aWVudGF0aW9uID0gYWN0aXZlT3JpZW50YXRpb24oc2VsZik7CisgICAgVUlFZGdlSW5zZXRzIG9s
ZE9ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVkSW5zZXRzOworCisgICAgdXBkYXRlQmxvY2soKTsK
KworICAgIENHUmVjdCBuZXdCb3VuZHMgPSBzZWxmLmJvdW5kczsKKyAgICBhdXRvIG5ld1ZpZXdM
YXlvdXRTaXplID0gW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6bmV3Qm91bmRzXTsKKyAgICBh
dXRvIG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6
ZShzZWxmLCBuZXdCb3VuZHMpOworICAgIGludDMyX3QgbmV3T3JpZW50YXRpb24gPSBhY3RpdmVP
cmllbnRhdGlvbihzZWxmKTsKKyAgICBVSUVkZ2VJbnNldHMgbmV3T2JzY3VyZWRJbnNldHMgPSBf
b2JzY3VyZWRJbnNldHM7CisgICAgQ0dSZWN0IGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29v
cmRpbmF0ZXMgPSBVSUVkZ2VJbnNldHNJbnNldFJlY3QobmV3Qm91bmRzLCBfb2JzY3VyZWRJbnNl
dHMpOworICAgIENHUmVjdCBjb250ZW50Vmlld0JvdW5kcyA9IFtfY29udGVudFZpZXcgYm91bmRz
XTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIShfdmlld0xheW91dFNpemVPdmVycmlkZSAm
JiBuZXdWaWV3TGF5b3V0U2l6ZS5pc0VtcHR5KCkpLCAiQ2xpZW50cyBjb250cm9sbGluZyB0aGUg
bGF5b3V0IHNpemUgc2hvdWxkIG1haW50YWluIGEgdmFsaWQgbGF5b3V0IHNpemUgdG8gbWluaW1p
emUgbGF5b3V0cy4iKTsKKyAgICBpZiAoQ0dSZWN0SXNFbXB0eShuZXdCb3VuZHMpIHx8IG5ld1Zp
ZXdMYXlvdXRTaXplLmlzRW1wdHkoKSB8fCBDR1JlY3RJc0VtcHR5KGZ1dHVyZVVub2JzY3VyZWRS
ZWN0SW5TZWxmQ29vcmRpbmF0ZXMpIHx8IENHUmVjdElzRW1wdHkoY29udGVudFZpZXdCb3VuZHMp
KSB7CisgICAgICAgIFtzZWxmIF9jYW5jZWxBbmltYXRlZFJlc2l6ZV07CisgICAgICAgIFtzZWxm
IF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07CisgICAgICAgIGlmIChfdmlld0xheW91dFNpemVPdmVy
cmlkZSkKKyAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOm5ld1Zp
ZXdMYXlvdXRTaXplXTsKKyAgICAgICAgaWYgKF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlk
ZSkKKyAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpX
ZWJDb3JlOjpGbG9hdFNpemUobmV3TWF4aW11bVVub2JzY3VyZWRTaXplKV07CisgICAgICAgIGlm
IChfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24pCisgICAgICAgICAgICBbc2VsZiBfZGlz
cGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjpuZXdPcmllbnRhdGlvbl07CisKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChvbGRCb3VuZHMsIG5ld0Jv
dW5kcykKKyAgICAgICAgJiYgb2xkVmlld0xheW91dFNpemUgPT0gbmV3Vmlld0xheW91dFNpemUK
KyAgICAgICAgJiYgb2xkTWF4aW11bVVub2JzY3VyZWRTaXplID09IG5ld01heGltdW1Vbm9ic2N1
cmVkU2l6ZQorICAgICAgICAmJiBvbGRPcmllbnRhdGlvbiA9PSBuZXdPcmllbnRhdGlvbgorICAg
ICAgICAmJiBVSUVkZ2VJbnNldHNFcXVhbFRvRWRnZUluc2V0cyhvbGRPYnNjdXJlZEluc2V0cywg
bmV3T2JzY3VyZWRJbnNldHMpKSB7CisgICAgICAgIFtzZWxmIF9jYW5jZWxBbmltYXRlZFJlc2l6
ZV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBfcmVzaXplQW5pbWF0aW9uVHJhbnNm
b3JtQWRqdXN0bWVudHMgPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7CisKKyAgICBpZiAoIV9yZXNp
emVBbmltYXRpb25WaWV3KSB7CisgICAgICAgIE5TVUludGVnZXIgaW5kZXhPZkNvbnRlbnRWaWV3
ID0gW1tfc2Nyb2xsVmlldyBzdWJ2aWV3c10gaW5kZXhPZk9iamVjdDpfY29udGVudFZpZXcuZ2V0
KCldOworICAgICAgICBfcmVzaXplQW5pbWF0aW9uVmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxs
b2NdIGluaXRdKTsKKyAgICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3IGxheWVyXS5uYW1lID0g
QCJSZXNpemVBbmltYXRpb24iOworICAgICAgICBbX3Njcm9sbFZpZXcgaW5zZXJ0U3Vidmlldzpf
cmVzaXplQW5pbWF0aW9uVmlldy5nZXQoKSBhdEluZGV4OmluZGV4T2ZDb250ZW50Vmlld107Cisg
ICAgICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyBhZGRTdWJ2aWV3Ol9jb250ZW50Vmlldy5nZXQo
KV07CisgICAgICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyBhZGRTdWJ2aWV3OltfY29udGVudFZp
ZXcgdW5zY2FsZWRWaWV3XV07CisgICAgfQorCisgICAgQ0dTaXplIGNvbnRlbnRTaXplSW5Db250
ZW50Vmlld0Nvb3JkaW5hdGVzID0gY29udGVudFZpZXdCb3VuZHMuc2l6ZTsKKyAgICBbX3Njcm9s
bFZpZXcgc2V0TWluaW11bVpvb21TY2FsZTpzdGQ6Om1pbihuZXdWaWV3TGF5b3V0U2l6ZS53aWR0
aCgpIC8gY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGgsIFtfc2Nyb2xs
VmlldyBtaW5pbXVtWm9vbVNjYWxlXSldOworICAgIFtfc2Nyb2xsVmlldyBzZXRNYXhpbXVtWm9v
bVNjYWxlOnN0ZDo6bWF4KG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkgLyBjb250ZW50U2l6ZUlu
Q29udGVudFZpZXdDb29yZGluYXRlcy53aWR0aCwgW19zY3JvbGxWaWV3IG1heGltdW1ab29tU2Nh
bGVdKV07CisKKyAgICAvLyBDb21wdXRlIHRoZSBuZXcgc2NhbGUgdG8ga2VlcCB0aGUgY3VycmVu
dCBjb250ZW50IHdpZHRoIGluIHRoZSBzY3JvbGx2aWV3LgorICAgIENHRmxvYXQgb2xkV2ViVmll
d1dpZHRoSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzID0gb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0
LndpZHRoKCk7CisgICAgX2FuaW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50V2lkdGggPSBzdGQ6
Om1pbihjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy53aWR0aCwgb2xkV2ViVmll
d1dpZHRoSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzKTsKKyAgICBDR0Zsb2F0IHRhcmdldFNjYWxl
ID0gbmV3Vmlld0xheW91dFNpemUud2lkdGgoKSAvIF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29u
dGVudFdpZHRoOworICAgIENHRmxvYXQgcmVzaXplQW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxl
ID0gdGFyZ2V0U2NhbGUgLyBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOworICAgIFtfcmVzaXplQW5p
bWF0aW9uVmlldyBzZXRUcmFuc2Zvcm06Q0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocmVzaXpl
QW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxlLCByZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9u
U2NhbGUpXTsKKworICAgIC8vIENvbXB1dGUgYSBuZXcgcG9zaXRpb24gdG8ga2VlcCB0aGUgY29u
dGVudCBjZW50ZXJlZC4KKyAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVudENlbnRlciA9IG9sZFVu
b2JzY3VyZWRDb250ZW50UmVjdC5jZW50ZXIoKTsKKyAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVu
dENlbnRlckluU2VsZkNvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFBvaW50Om9yaWdpbmFsQ29u
dGVudENlbnRlciBmcm9tVmlldzpfY29udGVudFZpZXcuZ2V0KCldOworICAgIENHUG9pbnQgZnV0
dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNlbGZDb29yZGluYXRlcyA9IENHUG9pbnRNYWtlKGZ1
dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMub3JpZ2luLnggKyBmdXR1cmVVbm9i
c2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLnNpemUud2lkdGggLyAyLCBmdXR1cmVVbm9ic2N1
cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLm9yaWdpbi55ICsgZnV0dXJlVW5vYnNjdXJlZFJlY3RJ
blNlbGZDb29yZGluYXRlcy5zaXplLmhlaWdodCAvIDIpOworCisgICAgQ0dQb2ludCBvcmlnaW5h
bENvbnRlbnRPZmZzZXQgPSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisgICAgQ0dQb2lu
dCBjb250ZW50T2Zmc2V0ID0gb3JpZ2luYWxDb250ZW50T2Zmc2V0OworICAgIGNvbnRlbnRPZmZz
ZXQueCArPSAob3JpZ2luYWxDb250ZW50Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMueCAtIGZ1dHVy
ZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMueCk7CisgICAgY29udGVudE9m
ZnNldC55ICs9IChvcmlnaW5hbENvbnRlbnRDZW50ZXJJblNlbGZDb29yZGluYXRlcy55IC0gZnV0
dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNlbGZDb29yZGluYXRlcy55KTsKKworICAgIC8vIExp
bWl0IHRoZSBuZXcgb2Zmc2V0IHdpdGhpbiB0aGUgc2Nyb2xsdmlldywgd2UgZG8gbm90IHdhbnQg
dG8gcnViYmVyIGJhbmQgcHJvZ3JhbW1hdGljYWxseS4KKyAgICBDR1NpemUgZnV0dXJlQ29udGVu
dFNpemVJblNlbGZDb29yZGluYXRlcyA9IENHU2l6ZU1ha2UoY29udGVudFNpemVJbkNvbnRlbnRW
aWV3Q29vcmRpbmF0ZXMud2lkdGggKiB0YXJnZXRTY2FsZSwgY29udGVudFNpemVJbkNvbnRlbnRW
aWV3Q29vcmRpbmF0ZXMuaGVpZ2h0ICogdGFyZ2V0U2NhbGUpOworICAgIENHRmxvYXQgbWF4SG9y
aXpvbnRhbE9mZnNldCA9IGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMud2lkdGgg
LSBuZXdCb3VuZHMuc2l6ZS53aWR0aCArIF9vYnNjdXJlZEluc2V0cy5yaWdodDsKKyAgICBjb250
ZW50T2Zmc2V0LnggPSBzdGQ6Om1pbihjb250ZW50T2Zmc2V0LngsIG1heEhvcml6b250YWxPZmZz
ZXQpOworICAgIENHRmxvYXQgbWF4VmVydGljYWxPZmZzZXQgPSBmdXR1cmVDb250ZW50U2l6ZUlu
U2VsZkNvb3JkaW5hdGVzLmhlaWdodCAtIG5ld0JvdW5kcy5zaXplLmhlaWdodCArIF9vYnNjdXJl
ZEluc2V0cy5ib3R0b207CisgICAgY29udGVudE9mZnNldC55ID0gc3RkOjptaW4oY29udGVudE9m
ZnNldC55LCBtYXhWZXJ0aWNhbE9mZnNldCk7CisKKyAgICBjb250ZW50T2Zmc2V0LnggPSBzdGQ6
Om1heChjb250ZW50T2Zmc2V0LngsIC1fb2JzY3VyZWRJbnNldHMubGVmdCk7CisgICAgY29udGVu
dE9mZnNldC55ID0gc3RkOjptYXgoY29udGVudE9mZnNldC55LCAtX29ic2N1cmVkSW5zZXRzLnRv
cCk7CisKKyAgICAvLyBNYWtlIHRoZSB0b3AvYm90dG9tIGVkZ2VzICJzdGlja3kiIHdpdGhpbiAx
IHBpeGVsLgorICAgIGlmIChvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QubWF4WSgpID4gY29udGVu
dFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMuaGVpZ2h0IC0gMSkKKyAgICAgICAgY29udGVu
dE9mZnNldC55ID0gbWF4VmVydGljYWxPZmZzZXQ7CisgICAgaWYgKG9sZFVub2JzY3VyZWRDb250
ZW50UmVjdC55KCkgPCAxKQorICAgICAgICBjb250ZW50T2Zmc2V0LnkgPSBbc2VsZiBfaW5pdGlh
bENvbnRlbnRPZmZzZXRGb3JTY3JvbGxWaWV3XS55OworCisgICAgLy8gRklYTUU6IGlmIHdlIGhh
dmUgY29udGVudCBjZW50ZXJlZCBhZnRlciBkb3VibGUgdGFwIHRvIHpvb20sIHdlIHNob3VsZCBh
bHNvIHRyeSB0byBrZWVwIHRoYXQgcmVjdCBpbiB2aWV3LgorICAgIFtfc2Nyb2xsVmlldyBzZXRD
b250ZW50U2l6ZTpyb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6ZSgqX3BhZ2UsIGZ1dHVyZUNvbnRl
bnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMpXTsKKyAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9m
ZnNldDpjb250ZW50T2Zmc2V0XTsKKworICAgIENHUmVjdCB2aXNpYmxlUmVjdEluQ29udGVudENv
b3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6bmV3Qm91bmRzIHRvVmlldzpfY29udGVudFZp
ZXcuZ2V0KCldOworICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5hdGVz
ID0gW3NlbGYgY29udmVydFJlY3Q6ZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRl
cyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKworICAgIFVJRWRnZUluc2V0cyB1bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHMgPSBbc2VsZiBfY29tcHV0ZWRVbm9ic2N1cmVkU2FmZUFyZWFJbnNl
dF07CisgICAgV2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRz
RXh0ZW50KHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy50b3AsIHVub2JzY3VyZWRTYWZlQXJlYUlu
c2V0cy5yaWdodCwgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLmJvdHRvbSwgdW5vYnNjdXJlZFNh
ZmVBcmVhSW5zZXRzLmxlZnQpOworCisgICAgX2xhc3RTZW50Vmlld0xheW91dFNpemUgPSBuZXdW
aWV3TGF5b3V0U2l6ZTsKKyAgICBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBuZXdN
YXhpbXVtVW5vYnNjdXJlZFNpemU7CisgICAgX2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gPSBu
ZXdPcmllbnRhdGlvbjsKKworICAgIF9wYWdlLT5keW5hbWljVmlld3BvcnRTaXplVXBkYXRlKG5l
d1ZpZXdMYXlvdXRTaXplLCBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUsIHZpc2libGVSZWN0SW5D
b250ZW50Q29vcmRpbmF0ZXMsIHVub2JzY3VyZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMsIGZ1
dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMsIHVub2JzY3VyZWRTYWZlQXJlYUlu
c2V0c0V4dGVudCwgdGFyZ2V0U2NhbGUsIG5ld09yaWVudGF0aW9uLCArK19jdXJyZW50RHluYW1p
Y1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEKTsKKyAgICBpZiAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
KiBkcmF3aW5nQXJlYSA9IF9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICBkcmF3aW5nQXJl
YS0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKG5ld0JvdW5kcy5zaXplKSk7CisKKyAgICBfd2Fp
dGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRSZXNpemUgPSBZRVM7CisgICAgX3dhaXRpbmdGb3JF
bmRBbmltYXRlZFJlc2l6ZSA9IFlFUzsKK30KKworLSAodm9pZClfZW5kQW5pbWF0ZWRSZXNpemUK
K3sKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtX
S1dlYlZpZXcgX2VuZEFuaW1hdGVkUmVzaXplXSBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAl
ZCIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSwgX2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUpOworCisgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIHVwLXRvLWRhdGUg
bGF5ZXIgdHJlZSwgaW1tZWRpYXRlbHkgY29tcGxldGUKKyAgICAvLyB0aGUgcmVzaXplLiBPdGhl
cndpc2UsIHdlIHdpbGwgZGVmZXIgY29tcGxldGlvbiB1bnRpbCB3ZSBkby4KKyAgICBfd2FpdGlu
Z0ZvckVuZEFuaW1hdGVkUmVzaXplID0gTk87CisgICAgaWYgKCFfd2FpdGluZ0ZvckNvbW1pdEFm
dGVyQW5pbWF0ZWRSZXNpemUpCisgICAgICAgIFtzZWxmIF9kaWRDb21wbGV0ZUFuaW1hdGVkUmVz
aXplXTsKK30KKworLSAodm9pZClfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXM6
KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCit7CisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9yZXNpemVXaGlsZUhpZGluZ0Nv
bnRlbnRXaXRoVXBkYXRlczpdIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgp
KTsKKworICAgIFtzZWxmIF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6dXBkYXRlQmxv
Y2tdOworICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGU6OlJlc2l6aW5nV2l0aEFuaW1hdGlvbikgeworICAgICAgICBb
X2NvbnRlbnRWaWV3IHNldEhpZGRlbjpZRVNdOworICAgICAgICBfZHluYW1pY1ZpZXdwb3J0VXBk
YXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRo
RG9jdW1lbnRIaWRkZW47CisgICAgICAgIAorICAgICAgICAvLyBfcmVzaXplV2hpbGVIaWRpbmdD
b250ZW50V2l0aFVwZGF0ZXMgaXMgdXNlZCBieSBpdHNlbGY7IHRoZSBjbGllbnQgd2lsbAorICAg
ICAgICAvLyBub3QgY2FsbCBlbmRBbmltYXRlZFJlc2l6ZSwgc28gd2UgY2FuJ3Qgd2FpdCBmb3Ig
aXQuCisgICAgICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsKKyAgICB9Cit9
CisKKy0gKHZvaWQpX3NuYXBzaG90UmVjdDooQ0dSZWN0KXJlY3RJblZpZXdDb29yZGluYXRlcyBp
bnRvSW1hZ2VPZldpZHRoOihDR0Zsb2F0KWltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikoQ0dJbWFnZVJlZikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBpZiAoX2R5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpO
b3RSZXNpemluZykgeworICAgICAgICAvLyBEZWZlciBzbmFwc2hvdHRpbmcgdW50aWwgYWZ0ZXIg
dGhlIGN1cnJlbnQgcmVzaXplIGNvbXBsZXRlcy4KKyAgICAgICAgdm9pZCAoXmNvcGllZENvbXBs
ZXRpb25IYW5kbGVyKShDR0ltYWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKKyAg
ICAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gcmV0YWluZWRTZWxmID0gc2VsZjsKKyAgICAgICAg
X2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbcmV0YWluZWRTZWxmLCByZWN0
SW5WaWV3Q29vcmRpbmF0ZXMsIGltYWdlV2lkdGgsIGNvcGllZENvbXBsZXRpb25IYW5kbGVyXSB7
CisgICAgICAgICAgICBbcmV0YWluZWRTZWxmIF9zbmFwc2hvdFJlY3Q6cmVjdEluVmlld0Nvb3Jk
aW5hdGVzIGludG9JbWFnZU9mV2lkdGg6aW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjpjb3Bp
ZWRDb21wbGV0aW9uSGFuZGxlcl07CisgICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRs
ZXIgcmVsZWFzZV07CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Q0dSZWN0IHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJl
Y3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXdd
OworICAgIENHRmxvYXQgaW1hZ2VTY2FsZSA9IGltYWdlV2lkdGggLyBzbmFwc2hvdFJlY3RJbkNv
bnRlbnRDb29yZGluYXRlcy5zaXplLndpZHRoOworICAgIENHRmxvYXQgaW1hZ2VIZWlnaHQgPSBp
bWFnZVNjYWxlICogc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQ7
CisgICAgQ0dTaXplIGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoaW1hZ2VXaWR0aCwgaW1hZ2VIZWln
aHQpOworCisgICAgaWYgKFtbX2N1c3RvbUNvbnRlbnRWaWV3IGNsYXNzXSB3ZWJfcmVxdWlyZXND
dXN0b21TbmFwc2hvdHRpbmddKSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3Nu
YXBzaG90UmVjdEluQ29udGVudFZpZXdDb29yZGluYXRlczpzbmFwc2hvdFJlY3RJbkNvbnRlbnRD
b29yZGluYXRlcyBzbmFwc2hvdFdpZHRoOmltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6Y29t
cGxldGlvbkhhbmRsZXJdOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgSEFWRShDT1JF
X0FOSU1BVElPTl9SRU5ERVJfU0VSVkVSKSAmJiBIQVZFKElPU1VSRkFDRSkKKyAgICAvLyBJZiB3
ZSBhcmUgcGFyZW50ZWQgYW5kIG5vdCBoaWRkZW4sIGFuZCB0aHVzIHdvbid0IGluY3VyIGEgc2ln
bmlmaWNhbnQgcGVuYWx0eSBmcm9tIHBhZ2luZyBpbiB0aWxlcywgc25hcHNob3QgdGhlIHZpZXcg
aGllcmFyY2h5IGRpcmVjdGx5LgorICAgIE5TU3RyaW5nICpkaXNwbGF5TmFtZSA9IHNlbGYud2lu
ZG93LnNjcmVlbi5kaXNwbGF5Q29uZmlndXJhdGlvbi5uYW1lOworICAgIGlmIChkaXNwbGF5TmFt
ZSAmJiAhc2VsZi53aW5kb3cuaGlkZGVuKSB7CisgICAgICAgIGF1dG8gc3VyZmFjZSA9IFdlYkNv
cmU6OklPU3VyZmFjZTo6Y3JlYXRlKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpG
bG9hdFNpemUoaW1hZ2VTaXplKSksIFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCkpOworICAg
ICAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENHRmxvYXQgaW1h
Z2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzID0gaW1hZ2VXaWR0aCAvIHJlY3RJblZpZXdDb29yZGlu
YXRlcy5zaXplLndpZHRoOworICAgICAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RNYWtlU2NhbGUoaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzLCBpbWFnZVNjYWxl
SW5WaWV3Q29vcmRpbmF0ZXMsIDEpOworICAgICAgICB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNE
VHJhbnNsYXRlKHRyYW5zZm9ybSwgLXJlY3RJblZpZXdDb29yZGluYXRlcy5vcmlnaW4ueCwgLXJl
Y3RJblZpZXdDb29yZGluYXRlcy5vcmlnaW4ueSwgMCk7CisgICAgICAgIENBUmVuZGVyU2VydmVy
UmVuZGVyRGlzcGxheUxheWVyV2l0aFRyYW5zZm9ybUFuZFRpbWVPZmZzZXQoTUFDSF9QT1JUX05V
TEwsIChDRlN0cmluZ1JlZilkaXNwbGF5TmFtZSwgc2VsZi5sYXllci5jb250ZXh0LmNvbnRleHRJ
ZCwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oc2VsZi5sYXllciksIHN1cmZhY2UtPnN1cmZh
Y2UoKSwgMCwgMCwgJnRyYW5zZm9ybSwgMCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdl
YkNvcmU6OklPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKHN1cmZhY2UpKS5nZXQoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChfY3VzdG9tQ29udGVu
dFZpZXcpIHsKKyAgICAgICAgQVNTRVJUKCFbW19jdXN0b21Db250ZW50VmlldyBjbGFzc10gd2Vi
X3JlcXVpcmVzQ3VzdG9tU25hcHNob3R0aW5nXSk7CisgICAgICAgIFVJR3JhcGhpY3NCZWdpbklt
YWdlQ29udGV4dFdpdGhPcHRpb25zKGltYWdlU2l6ZSwgWUVTLCAxKTsKKworICAgICAgICBVSVZp
ZXcgKmN1c3RvbUNvbnRlbnRWaWV3ID0gX2N1c3RvbUNvbnRlbnRWaWV3LmdldCgpOworICAgICAg
ICBbY3VzdG9tQ29udGVudFZpZXcuYmFja2dyb3VuZENvbG9yIHNldF07CisgICAgICAgIFVJUmVj
dEZpbGwoQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCkpOworCisgICAg
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gVUlHcmFwaGljc0dldEN1cnJlbnRDb250ZXh0KCk7
CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAtc25hcHNob3RSZWN0SW5D
b250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnggKiBpbWFnZVNjYWxlLCAtc25hcHNob3RSZWN0SW5D
b250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnkgKiBpbWFnZVNjYWxlKTsKKyAgICAgICAgQ0dDb250
ZXh0U2NhbGVDVE0oY29udGV4dCwgaW1hZ2VTY2FsZSwgaW1hZ2VTY2FsZSk7CisgICAgICAgIFtj
dXN0b21Db250ZW50Vmlldy5sYXllciByZW5kZXJJbkNvbnRleHQ6Y29udGV4dF07CisKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoW1VJR3JhcGhpY3NHZXRJbWFnZUZyb21DdXJyZW50SW1hZ2VD
b250ZXh0KCkgQ0dJbWFnZV0pOworCisgICAgICAgIFVJR3JhcGhpY3NFbmRJbWFnZUNvbnRleHQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZvaWQoXmNvcGllZENvbXBsZXRpb25I
YW5kbGVyKShDR0ltYWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKKyAgICBfcGFn
ZS0+dGFrZVNuYXBzaG90KFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3Qoc25hcHNob3RSZWN0SW5D
b250ZW50Q29vcmRpbmF0ZXMpLCBXZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6Rmxv
YXRTaXplKGltYWdlU2l6ZSkpLCBXZWJLaXQ6OlNuYXBzaG90T3B0aW9uc0V4Y2x1ZGVEZXZpY2VT
Y2FsZUZhY3RvciwgWz1dKGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGlt
YWdlSGFuZGxlLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgaWYgKGlt
YWdlSGFuZGxlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxl
cihudWxscHRyKTsKKyAgICAgICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNl
XTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYml0bWFw
ID0gV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhhbmRsZSwgV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKworICAgICAgICBpZiAoIWJpdG1h
cCkgeworICAgICAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAg
ICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFn
ZTsKKyAgICAgICAgY2dJbWFnZSA9IGJpdG1hcC0+bWFrZUNHSW1hZ2UoKTsKKyAgICAgICAgY29w
aWVkQ29tcGxldGlvbkhhbmRsZXIoY2dJbWFnZS5nZXQoKSk7CisgICAgICAgIFtjb3BpZWRDb21w
bGV0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAgICB9KTsKK30KKworLSAodm9pZClfb3ZlcnJpZGVM
YXlvdXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOihDR1NpemUpbWluaW11bUxheW91
dFNpemUgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6KENHU2l6ZSltYXhpbXVtVW5vYnNj
dXJlZFNpemVPdmVycmlkZQoreworICAgIExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0
cmVhbSA8PCAiLVtXS1dlYlZpZXcgIiA8PCBfcGFnZS0+aWRlbnRpZmllcigpIDw8ICIgX292ZXJy
aWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZToiIDw8IFdlYkNvcmU6OkZs
b2F0U2l6ZShtaW5pbXVtTGF5b3V0U2l6ZSkgPDwgIiBtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVy
cmlkZToiIDw8IFdlYkNvcmU6OkZsb2F0U2l6ZShtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlk
ZSkgPDwgIl0iKTsKKworICAgIFtzZWxmIF9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOm1pbmlt
dW1MYXlvdXRTaXplXTsKKyAgICBbc2VsZiBfc2V0TWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGU6bWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGVdOworfQorCistICh2b2lkKV9jbGVhck92
ZXJyaWRlTGF5b3V0UGFyYW1ldGVycworeworICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0g
V1RGOjpudWxsb3B0OworICAgIF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IFdURjo6
bnVsbG9wdDsKK30KKworc3RhdGljIFdURjo6T3B0aW9uYWw8V2ViQ29yZTo6Vmlld3BvcnRBcmd1
bWVudHM+IHZpZXdwb3J0QXJndW1lbnRzRnJvbURpY3Rpb25hcnkoTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIE5TU3RyaW5nICo+ICp2aWV3cG9ydEFyZ3VtZW50UGFpcnMsIGJvb2wgdmlld3BvcnRG
aXRFbmFibGVkKQoreworICAgIGlmICghdmlld3BvcnRBcmd1bWVudFBhaXJzKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmll
d3BvcnRBcmd1bWVudHMoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZpZXdwb3J0TWV0YSk7
CisKKyAgICBbdmlld3BvcnRBcmd1bWVudFBhaXJzIGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNp
bmdCbG9jazptYWtlQmxvY2tQdHIoWyZdIChOU1N0cmluZyAqa2V5LCBOU1N0cmluZyAqdmFsdWUs
IEJPT0wqIHN0b3ApIHsKKyAgICAgICAgaWYgKCFba2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5n
IGNsYXNzXV0gfHwgIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAg
ICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZv
cm1hdDpAIi1bV0tXZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBLZXlz
IGFuZCB2YWx1ZXMgbXVzdCBhbGwgYmUgTlNTdHJpbmdzLiJdOworICAgICAgICBTdHJpbmcga2V5
U3RyaW5nID0ga2V5OworICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSB2YWx1ZTsKKyAgICAg
ICAgV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKHZpZXdwb3J0QXJndW1lbnRzLCBrZXlTdHJp
bmcsIHZhbHVlU3RyaW5nLCB2aWV3cG9ydEZpdEVuYWJsZWQsIFtdIChXZWJDb3JlOjpWaWV3cG9y
dEVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKKyAgICAgICAgICAgIE5T
TG9nKEAiLVtXS1dlYlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl06IEVycm9y
IHBhcnNpbmcgdmlld3BvcnQgYXJndW1lbnQ6ICVzIiwgZXJyb3JNZXNzYWdlLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICB9KTsKKyAgICB9KS5nZXQoKV07CisKKyAgICByZXR1cm4gdmlld3BvcnRB
cmd1bWVudHM7Cit9CisKKy0gKHZvaWQpX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNTdHJpbmcgKj4gKilhcmd1bWVudHMKK3sKKyAgICBp
ZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBfcGFnZS0+c2V0T3ZlcnJpZGVWaWV3
cG9ydEFyZ3VtZW50cyh2aWV3cG9ydEFyZ3VtZW50c0Zyb21EaWN0aW9uYXJ5KGFyZ3VtZW50cywg
X3BhZ2UtPnByZWZlcmVuY2VzKCkudmlld3BvcnRGaXRFbmFibGVkKCkpKTsKK30KKworLSAoVUlW
aWV3ICopX3ZpZXdGb3JGaW5kVUkKK3sKKyAgICByZXR1cm4gW3NlbGYgdmlld0Zvclpvb21pbmdJ
blNjcm9sbFZpZXc6W3NlbGYgc2Nyb2xsVmlld11dOworfQorCistICh2b2lkKV9zZXRPdmVybGFp
ZEFjY2Vzc29yeVZpZXdzSW5zZXQ6KENHU2l6ZSlpbnNldAoreworICAgIFtfY3VzdG9tQ29udGVu
dFZpZXcgd2ViX3NldE92ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDppbnNldF07Cit9CisKKy0g
KHZvaWQgKF4pKHZvaWQpKV9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGUKK3sKKyAgICArK19hY3Rp
dmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKKworICAgIC8vIEZJWE1FOiBVc2Ugc29tZXRoaW5n
IGxpa2UgQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlciB0byBlbnN1cmUgdGhhdCB0aGUgcmV0
dXJuZWQgYmxvY2sgaXMgY2FsbGVkIGJlZm9yZSBpdCdzIHJlbGVhc2VkLgorICAgIHJldHVybiBb
W1tzZWxmXSB7CisgICAgICAgIC0tX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OworICAg
IH0gY29weV0gYXV0b3JlbGVhc2VdOworfQorCistICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRl
cldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3YXJkOihCT09MKXNlbGVjdGluZ0ZvcndhcmQgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisgICAgdHlwZW9mKGNvbXBsZXRpb25IYW5kbGVyKSBjb21wbGV0aW9u
SGFuZGxlckNvcHkgPSBuaWw7CisgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBj
b21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKKwor
ICAgIFtfY29udGVudFZpZXcgX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmlu
Z0ZvcndhcmQ6c2VsZWN0aW5nRm9yd2FyZCBjb21wbGV0aW9uSGFuZGxlcjpbY29tcGxldGlvbkhh
bmRsZXJDb3B5XShCT09MIGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKSB7CisgICAgICAgIGlmICgh
Y29tcGxldGlvbkhhbmRsZXJDb3B5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyQ29weShkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcik7CisgICAgICAgIEJs
b2NrX3JlbGVhc2UoY29tcGxldGlvbkhhbmRsZXJDb3B5KTsKKyAgICB9XTsKK30KKworLSAoaWQp
X3NuYXBzaG90TGF5ZXJDb250ZW50c0ZvckJhY2tGb3J3YXJkTGlzdEl0ZW06KFdLQmFja0Zvcndh
cmRMaXN0SXRlbSAqKWl0ZW0KK3sKKyAgICBpZiAoX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLmN1
cnJlbnRJdGVtKCkgPT0gJml0ZW0uX2l0ZW0pCisgICAgICAgIF9wYWdlLT5yZWNvcmROYXZpZ2F0
aW9uU25hcHNob3QoKl9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgpKTsKKwor
ICAgIGlmIChhdXRvKiB2aWV3U25hcHNob3QgPSBpdGVtLl9pdGVtLnNuYXBzaG90KCkpCisgICAg
ICAgIHJldHVybiB2aWV3U25hcHNob3QtPmFzTGF5ZXJDb250ZW50cygpOworCisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoTlNBcnJheSAqKV9kYXRhRGV0ZWN0aW9uUmVzdWx0cworeworI2lmIEVO
QUJMRShEQVRBX0RFVEVDVElPTikKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBfZGF0YURldGVj
dGlvblJlc3VsdHNdOworI2Vsc2UKKyAgICByZXR1cm4gbmlsOworI2VuZGlmCit9CisKKy0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdl
cilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAg
ICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zm
c2V0Om9mZnNldCB3aXRoVGV4dDp0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBs
ZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgc2VsZWN0aW9uUmVjdHMpIHsKKyAgICAgICAg
aWYgKCFjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBhdXRvIHJlY3RWYWx1ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6c2VsZWN0aW9uUmVjdHMuc2l6ZSgpXSk7CisgICAgICAgIGZvciAoYXV0
byYgc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3RzKQorICAgICAgICAgICAgW3JlY3RWYWx1
ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3Qo
KV1dOworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0KCkp
OworICAgIH1dOworfQorCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb24KK3sK
KyAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dOworfQorCist
ICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3
IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dOworfQorCistICh2b2lkKV9hY2Nlc3NpYmls
aXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnQKK3sKKyAgICBbX2NvbnRlbnRWaWV3IGFj
Y2Vzc2liaWxpdHlSZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudF07Cit9CisKKy8vIFRoaXMg
bWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorLy8gQ3VycmVudGx5IGl0J3Mg
b25seSBpbiBUZXN0UnVubmVyV0tXZWJWaWV3LgorLSAodm9pZClfYWNjZXNzaWJpbGl0eURpZEdl
dFNwZWFrU2VsZWN0aW9uQ29udGVudDooTlNTdHJpbmcgKiljb250ZW50Cit7Cit9CisKKy0gKFVJ
VmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Cit7CisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorICAgIGlmIChbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVl
bl0pCisgICAgICAgIHJldHVybiBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdQ
bGFjZWhvbGRlcl07CisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHJldHVy
biBuaWw7Cit9CisKK0BlbmQgLy8gV0tXZWJWaWV3IChXS1ByaXZhdGVJT1MpCisKKyNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEZ1bGxTY3Jl
ZW5BUElfUHJpdmF0ZSkKKworLSAoQk9PTCloYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgor
eworICAgIHJldHVybiAhIV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKK30KKworLSAodm9p
ZCljbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCit7CisgICAgaWYgKCFfZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgY2xvc2VdOworICAgIF9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9
IG51bGxwdHI7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoRnVsbFNj
cmVlbkFQSV9JbnRlcm5hbCkKKworLSAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciAqKWZ1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCit7CisgICAgaWYgKCFfZnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIpCisgICAgICAgIF9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9IGFkb3B0TlMo
W1tXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6c2Vs
Zl0pOworCisgICAgcmV0dXJuIF9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5nZXQoKTsKK30K
KworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCitAaW1wbGVtZW50
YXRpb24gV0tXZWJWaWV3IChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIpCisKKy0gKENsYXNzKV9w
cmludEZvcm1hdHRlckNsYXNzCit7CisgICAgcmV0dXJuIFtfV0tXZWJWaWV3UHJpbnRGb3JtYXR0
ZXIgY2xhc3NdOworfQorCistIChpZCA8X1dLV2ViVmlld1ByaW50UHJvdmlkZXI+KV9wcmludFBy
b3ZpZGVyCit7CisgICAgaWQgcHJpbnRQcm92aWRlciA9IF9jdXN0b21Db250ZW50VmlldyA/IF9j
dXN0b21Db250ZW50Vmlldy5nZXQoKSA6IF9jb250ZW50Vmlldy5nZXQoKTsKKyAgICBpZiAoW3By
aW50UHJvdmlkZXIgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChfV0tXZWJWaWV3UHJpbnRQ
cm92aWRlcildKQorICAgICAgICByZXR1cm4gcHJpbnRQcm92aWRlcjsKKyAgICByZXR1cm4gbmls
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1t
CmluZGV4IDVhMmYxNGYyN2JlOGMyMTdhNzhjN2JiMmFjYjY3YzU2N2Q3ZmI3ZGQuLjNiMmEwMWVh
NmNmMTZhYzQ2NDc2ZDYyMzUwMGU1YWY2NDhjMDc3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KQEAgLTMxLDcg
KzMxLDcgQEAKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKICNp
bXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKICNpbXBvcnQgIldLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdJT1MuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2lt
cG9ydCAiX1dLQWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IGI5MTQ4NTdlNTJjYzQ0M2YwN2JiN2Y4
NDllNGQ1ODA0YzRiOWYwNzcuLmJiNDFkNmU2OTY1Y2Q0ZmExNjU1MzI4M2ZlOGVkNjQ1MmIyZmIw
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC0zNCw2
ICszNCw3IEBACiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwUHJpdmF0ZS5oIgogI2lt
cG9ydCAiV0tOU0RhdGEuaCIKICNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oIgorI2lt
cG9ydCAiV0tXZWJWaWV3TWFjLmgiCiAjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmgi
CiAjaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgi
CkBAIC0xNDc0LDQwICsxNDc1LDYgQEAgLSAoQ0dGbG9hdClfdG90YWxIZWlnaHRPZkJhbm5lcnMK
ICAgICByZXR1cm4gX2RhdGEtPl9pbXBsLT50b3RhbEhlaWdodE9mQmFubmVycygpOwogfQogCi1z
dGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiB0b0NvcmVTY3Jv
bGxiYXJTdHlsZShfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUgc2Nyb2xsYmFyU3R5bGUpCi17Ci0g
ICAgc3dpdGNoIChzY3JvbGxiYXJTdHlsZSkgewotICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJh
clN0eWxlRGFyazoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHls
ZURhcms7Ci0gICAgY2FzZSBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVMaWdodDoKLSAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OwotICAgIGNhc2UgX1dL
T3ZlcmxheVNjcm9sbGJhclN0eWxlRGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNj
cm9sbGJhck92ZXJsYXlTdHlsZURlZmF1bHQ7Ci0gICAgY2FzZSBfV0tPdmVybGF5U2Nyb2xsYmFy
U3R5bGVBdXRvbWF0aWM6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3RhdGljIF9XS092ZXJsYXlTY3JvbGxiYXJT
dHlsZSB0b0FQSVNjcm9sbGJhclN0eWxlKE9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJs
YXlTdHlsZT4gY29yZVNjcm9sbGJhclN0eWxlKQotewotICAgIGlmICghY29yZVNjcm9sbGJhclN0
eWxlKQotICAgICAgICByZXR1cm4gX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlQXV0b21hdGljOwot
Ci0gICAgc3dpdGNoIChjb3JlU2Nyb2xsYmFyU3R5bGUudmFsdWUoKSkgewotICAgIGNhc2UgV2Vi
Q29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGFyazoKLSAgICAgICAgcmV0dXJuIF9XS092ZXJs
YXlTY3JvbGxiYXJTdHlsZURhcms7Ci0gICAgY2FzZSBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5
U3R5bGVMaWdodDoKLSAgICAgICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZUxpZ2h0
OwotICAgIGNhc2UgV2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZURlZmF1bHQ7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZUF1dG9tYXRpYzsKLSAgICB9
Ci19Ci0KIC0gKHZvaWQpX3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTooX1dLT3ZlcmxheVNjcm9s
bGJhclN0eWxlKXNjcm9sbGJhclN0eWxlCiB7CiAgICAgX2RhdGEtPl9pbXBsLT5zZXRPdmVybGF5
U2Nyb2xsYmFyU3R5bGUodG9Db3JlU2Nyb2xsYmFyU3R5bGUoc2Nyb2xsYmFyU3R5bGUpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3TWFjLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVlYTVjMjFmZWIyYTU5MDU4ZWQ4YjIxNTk2NzhjZTdhNWEyNTAxMTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJXZWJWaWV3SW1wbC5oIgorI2ltcG9y
dCAiX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlLmgiCisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFR5
cGVzLmg+CisKK0Bwcm90b2NvbCBXZWJWaWV3SW1wbERlbGVnYXRlOworCitfV0tPdmVybGF5U2Ny
b2xsYmFyU3R5bGUgdG9BUElTY3JvbGxiYXJTdHlsZShPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxi
YXJPdmVybGF5U3R5bGU+KTsKK09wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHls
ZT4gdG9Db3JlU2Nyb2xsYmFyU3R5bGUoX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlKTsKKworQGlu
dGVyZmFjZSBXS1dlYlZpZXcgKFdLSW50ZXJuYWxNYWMpIDxXZWJWaWV3SW1wbERlbGVnYXRlPgor
CistICh2b2lkKV90YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb25JbnRlcm5hbDooaWQpc2VuZGVy
OworLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5n
ZSlyZXBsYWNlbWVudFJhbmdlOworCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3TWFjLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjFjMTE1N2RhMmFkZjIyOTc3ZmY3NTk3OGM2M2ZlYmNkNjA2ZmMwZjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5t
bQpAQCAtMCwwICsxLDE2MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiV0tXZWJWaWV3TWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBv
cnQgIkFwcEtpdFNQSS5oIgorI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5oIgorI2ltcG9ydCAiV0tT
YWZlQnJvd3NpbmdXYXJuaW5nLmgiCisjaW1wb3J0ICJXS1RleHRGaW5kZXJDbGllbnQuaCIKKyNp
bXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgor
I2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0ICJXZWJWaWV3SW1wbC5oIgorI2lt
cG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLSGl0VGVzdFJlc3Vs
dEludGVybmFsLmgiCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU1RleHRGaW5kZXJTUEkuaD4KKwor
X1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlIHRvQVBJU2Nyb2xsYmFyU3R5bGUoT3B0aW9uYWw8V2Vi
Q29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiBjb3JlU2Nyb2xsYmFyU3R5bGUpCit7CisgICAg
aWYgKCFjb3JlU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHJldHVybiBfV0tPdmVybGF5U2Nyb2xs
YmFyU3R5bGVBdXRvbWF0aWM7CisgICAgCisgICAgc3dpdGNoIChjb3JlU2Nyb2xsYmFyU3R5bGUu
dmFsdWUoKSkgeworICAgIGNhc2UgV2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGFyazoK
KyAgICAgICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZURhcms7CisgICAgY2FzZSBX
ZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDoKKyAgICAgICAgcmV0dXJuIF9XS092
ZXJsYXlTY3JvbGxiYXJTdHlsZUxpZ2h0OworICAgIGNhc2UgV2ViQ29yZTo6U2Nyb2xsYmFyT3Zl
cmxheVN0eWxlRGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHls
ZURlZmF1bHQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBf
V0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVBdXRvbWF0aWM7Cit9CisKK09wdGlvbmFsPFdlYkNvcmU6
OlNjcm9sbGJhck92ZXJsYXlTdHlsZT4gdG9Db3JlU2Nyb2xsYmFyU3R5bGUoX1dLT3ZlcmxheVNj
cm9sbGJhclN0eWxlIHNjcm9sbGJhclN0eWxlKQoreworICAgIHN3aXRjaCAoc2Nyb2xsYmFyU3R5
bGUpIHsKKyAgICBjYXNlIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZURhcms6CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVEYXJrOworICAgIGNhc2UgX1dLT3Zl
cmxheVNjcm9sbGJhclN0eWxlTGlnaHQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxi
YXJPdmVybGF5U3R5bGVMaWdodDsKKyAgICBjYXNlIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZURl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZh
dWx0OworICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlQXV0b21hdGljOgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworQGludGVyZmFj
ZSBXS1dlYlZpZXcgKFdLSW1wbGVtZW50YXRpb25NYWMpIDxOU1RleHRJbnB1dENsaWVudAorICAg
ICwgTlNUZXh0SW5wdXRDbGllbnRfQXN5bmMKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICAsIE5T
VG91Y2hCYXJQcm92aWRlcgorI2VuZGlmCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICAs
IE5TRmlsZVByb21pc2VQcm92aWRlckRlbGVnYXRlCisgICAgLCBOU0RyYWdnaW5nU291cmNlCisj
ZW5kaWYKKyAgICA+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLSW1wbGVt
ZW50YXRpb25NYWMpCisKKyNwcmFnbWEgbWFyayAtIE5TVmlldyBvdmVycmlkZXMKKworLSAoQk9P
TClhY2NlcHRzRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gX2ltcGwtPmFjY2VwdHNGaXJz
dFJlc3BvbmRlcigpOworfQorCistIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCit7CisgICAg
cmV0dXJuIF9pbXBsLT5iZWNvbWVGaXJzdFJlc3BvbmRlcigpOworfQorCistIChCT09MKXJlc2ln
bkZpcnN0UmVzcG9uZGVyCit7CisgICAgcmV0dXJuIF9pbXBsLT5yZXNpZ25GaXJzdFJlc3BvbmRl
cigpOworfQorCistICh2b2lkKXZpZXdXaWxsU3RhcnRMaXZlUmVzaXplCit7CisgICAgX2ltcGwt
PnZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCk7Cit9CisKKy0gKHZvaWQpdmlld0RpZEVuZExpdmVS
ZXNpemUKK3sKKyAgICBfaW1wbC0+dmlld0RpZEVuZExpdmVSZXNpemUoKTsKK30KKworLSAoQk9P
TClpc0ZsaXBwZWQKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChOU1NpemUpaW50cmluc2lj
Q29udGVudFNpemUKK3sKKyAgICByZXR1cm4gTlNTaXplRnJvbUNHU2l6ZShfaW1wbC0+aW50cmlu
c2ljQ29udGVudFNpemUoKSk7Cit9CisKKy0gKHZvaWQpcHJlcGFyZUNvbnRlbnRJblJlY3Q6KE5T
UmVjdClyZWN0Cit7CisgICAgX2ltcGwtPnByZXBhcmVDb250ZW50SW5SZWN0KE5TUmVjdFRvQ0dS
ZWN0KHJlY3QpKTsKK30KKworLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCit7Cisg
ICAgW3N1cGVyIHNldEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcg
c2V0RnJhbWU6c2VsZi5ib3VuZHNdOworICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9D
R1NpemUoc2l6ZSkpOworfQorCistICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b246KE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbil1c2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uCit7CisgICAgW3N1cGVyIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbl07CisKKyAgICBfaW1wbC0+c2V0VXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKTsKK30KKworQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0gKHZvaWQpcmVuZXdHU3RhdGUK
K0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAoreworICAgIF9pbXBsLT5yZW5l
d0dTdGF0ZSgpOworICAgIFtzdXBlciByZW5ld0dTdGF0ZV07Cit9CisKKyNwcmFnbWEgbWFyayAt
IG1hY09TIElCQWN0aW9uL05TUmVzcG9uZGVyCisKKyNkZWZpbmUgV0VCQ09SRV9DT01NQU5EKGNv
bW1hbmQpIC0gKHZvaWQpY29tbWFuZDooaWQpc2VuZGVyIHsgX2ltcGwtPmV4ZWN1dGVFZGl0Q29t
bWFuZEZvclNlbGVjdG9yKF9jbWQpOyB9CisKK1dFQkNPUkVfQ09NTUFORChhbGlnbkNlbnRlcikK
K1dFQkNPUkVfQ09NTUFORChhbGlnbkp1c3RpZmllZCkKK1dFQkNPUkVfQ09NTUFORChhbGlnbkxl
ZnQpCitXRUJDT1JFX0NPTU1BTkQoYWxpZ25SaWdodCkKK1dFQkNPUkVfQ09NTUFORChjb3B5KQor
V0VCQ09SRV9DT01NQU5EKGN1dCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGUpCitXRUJDT1JFX0NP
TU1BTkQoZGVsZXRlQmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlQmFja3dhcmRCeURl
Y29tcG9zaW5nUHJldmlvdXNDaGFyYWN0ZXIpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlRm9yd2Fy
ZCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mTGluZSkKK1dFQkNPUkVfQ09N
TUFORChkZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0
ZVRvRW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgpCitX
RUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9NYXJrKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVdvcmRC
YWNrd2FyZCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkRm9yd2FyZCkKK1dFQkNPUkVfQ09N
TUFORChpZ25vcmVTcGVsbGluZykKK1dFQkNPUkVfQ09NTUFORChpbmRlbnQpCitXRUJDT1JFX0NP
TU1BTkQoaW5zZXJ0QmFja3RhYikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRMaW5lQnJlYWspCitX
RUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZSkKK1dFQkNPUkVfQ09NTUFORChpbnNlcnROZXds
aW5lSWdub3JpbmdGaWVsZEVkaXRvcikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IpCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiKQorV0VCQ09SRV9DT01NQU5EKGlu
c2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3IpCitXRUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0
aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5n
RGlyZWN0aW9uTmF0dXJhbCkKK1dFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rp
b25SaWdodFRvTGVmdCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmQpCitXRUJDT1JFX0NP
TU1BTkQobW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVEb3duKQorV0VCQ09SRV9DT01NQU5EKG1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VC
Q09SRV9DT01NQU5EKG1vdmVGb3J3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3YXJkQW5k
TW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVMZWZ0KQorV0VCQ09SRV9DT01N
QU5EKG1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVQYXJh
Z3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlUGFy
YWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlUmln
aHQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09S
RV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQpCitXRUJDT1JFX0NPTU1BTkQobW92
ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFO
RChtb3ZlVG9CZWdpbm5pbmdPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5n
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmlu
Z09mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mU2Vu
dGVuY2UpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZUFuZE1vZGlm
eVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkRvY3VtZW50KQorV0VCQ09S
RV9DT01NQU5EKG1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JF
X0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mTGlu
ZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBhcmFncmFw
aCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlv
bikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlNlbnRlbmNlKQorV0VCQ09SRV9DT01NQU5E
KG1vdmVUb0VuZE9mU2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQo
bW92ZVRvTGVmdEVuZE9mTGluZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5kT2ZMaW5l
QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5l
KQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9u
KQorV0VCQ09SRV9DT01NQU5EKG1vdmVVcCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVXBBbmRNb2Rp
ZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRCYWNrd2FyZCkKK1dFQkNPUkVf
Q09NTUFORChtb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01N
QU5EKG1vdmVXb3JkRm9yd2FyZCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEZvcndhcmRBbmRN
b2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0KQorV0VCQ09SRV9D
T01NQU5EKG1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORCht
b3ZlV29yZFJpZ2h0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxl
Y3Rpb24pCitXRUJDT1JFX0NPTU1BTkQob3V0ZGVudCkKK1dFQkNPUkVfQ09NTUFORChwYWdlRG93
bikKK1dFQkNPUkVfQ09NTUFORChwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVf
Q09NTUFORChwYWdlVXApCitXRUJDT1JFX0NPTU1BTkQocGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9u
KQorV0VCQ09SRV9DT01NQU5EKHBhc3RlKQorV0VCQ09SRV9DT01NQU5EKHBhc3RlQXNQbGFpblRl
eHQpCitXRUJDT1JFX0NPTU1BTkQoc2Nyb2xsUGFnZURvd24pCitXRUJDT1JFX0NPTU1BTkQoc2Ny
b2xsUGFnZVVwKQorV0VCQ09SRV9DT01NQU5EKHNjcm9sbExpbmVEb3duKQorV0VCQ09SRV9DT01N
QU5EKHNjcm9sbExpbmVVcCkKK1dFQkNPUkVfQ09NTUFORChzY3JvbGxUb0JlZ2lubmluZ09mRG9j
dW1lbnQpCitXRUJDT1JFX0NPTU1BTkQoc2Nyb2xsVG9FbmRPZkRvY3VtZW50KQorV0VCQ09SRV9D
T01NQU5EKHNlbGVjdEFsbCkKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RMaW5lKQorV0VCQ09SRV9D
T01NQU5EKHNlbGVjdFBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RTZW50ZW5jZSkK
K1dFQkNPUkVfQ09NTUFORChzZWxlY3RUb01hcmspCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0V29y
ZCkKK1dFQkNPUkVfQ09NTUFORChzZXRNYXJrKQorV0VCQ09SRV9DT01NQU5EKHN1YnNjcmlwdCkK
K1dFQkNPUkVfQ09NTUFORChzdXBlcnNjcmlwdCkKK1dFQkNPUkVfQ09NTUFORChzd2FwV2l0aE1h
cmspCitXRUJDT1JFX0NPTU1BTkQodGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKQorV0VCQ09S
RV9DT01NQU5EKHRyYW5zcG9zZSkKK1dFQkNPUkVfQ09NTUFORCh1bmRlcmxpbmUpCitXRUJDT1JF
X0NPTU1BTkQodW5zY3JpcHQpCitXRUJDT1JFX0NPTU1BTkQoeWFuaykKK1dFQkNPUkVfQ09NTUFO
RCh5YW5rQW5kU2VsZWN0KQorCisjdW5kZWYgV0VCQ09SRV9DT01NQU5ECisKKy0gKEJPT0wpd3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgdHlwZXM6
KE5TQXJyYXkgKil0eXBlcworeworICAgIHJldHVybiBfaW1wbC0+d3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmQocGFzdGVib2FyZCwgdHlwZXMpOworfQorCistICh2b2lkKWNlbnRlclNlbGVjdGlv
bkluVmlzaWJsZUFyZWE6KGlkKXNlbmRlcgoreworICAgIF9pbXBsLT5jZW50ZXJTZWxlY3Rpb25J
blZpc2libGVBcmVhKCk7Cit9CisKKy0gKGlkKXZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6KE5T
U3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNTdHJpbmcgKilyZXR1cm5UeXBlCit7Cisg
ICAgcmV0dXJuIF9pbXBsLT52YWxpZFJlcXVlc3RvckZvclNlbmRBbmRSZXR1cm5UeXBlcyhzZW5k
VHlwZSwgcmV0dXJuVHlwZSk7Cit9CisKKy0gKEJPT0wpcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJv
YXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgcmV0dXJuIF9pbXBsLT5yZWFk
U2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCk7Cit9CisKK0FMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCistICh2b2lkKWNoYW5nZUZvbnQ6KGlkKXNlbmRlcgor
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECit7CisgICAgX2ltcGwtPmNoYW5n
ZUZvbnRGcm9tRm9udE1hbmFnZXIoKTsKK30KKworQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfQkVHSU4KKy0gKHZvaWQpY2hhbmdlQ29sb3I6KGlkKXNlbmRlcgorQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KK3sKKyAgICBfaW1wbC0+Y2hhbmdlRm9udENvbG9y
RnJvbVNlbmRlcihzZW5kZXIpOworfQorCistICh2b2lkKWNoYW5nZUF0dHJpYnV0ZXM6KGlkKXNl
bmRlcgoreworICAgIF9pbXBsLT5jaGFuZ2VGb250QXR0cmlidXRlc0Zyb21TZW5kZXIoc2VuZGVy
KTsKK30KKworLSAoSUJBY3Rpb24pc3RhcnRTcGVha2luZzooaWQpc2VuZGVyCit7CisgICAgX2lt
cGwtPnN0YXJ0U3BlYWtpbmcoKTsKK30KKworLSAoSUJBY3Rpb24pc3RvcFNwZWFraW5nOihpZClz
ZW5kZXIKK3sKKyAgICBfaW1wbC0+c3RvcFNwZWFraW5nKHNlbmRlcik7Cit9CisKKy0gKElCQWN0
aW9uKXNob3dHdWVzc1BhbmVsOihpZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+c2hvd0d1ZXNzUGFu
ZWwoc2VuZGVyKTsKK30KKworLSAoSUJBY3Rpb24pY2hlY2tTcGVsbGluZzooaWQpc2VuZGVyCit7
CisgICAgX2ltcGwtPmNoZWNrU3BlbGxpbmcoKTsKK30KKworLSAodm9pZCljaGFuZ2VTcGVsbGlu
ZzooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPmNoYW5nZVNwZWxsaW5nKHNlbmRlcik7Cit9CisK
Ky0gKElCQWN0aW9uKXRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nOihpZClzZW5kZXIKK3sK
KyAgICBfaW1wbC0+dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKTsKK30KKworLSAoQk9P
TClpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQKK3sKKyAgICByZXR1cm4gX2ltcGwtPmlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpOworfQorCistICh2b2lkKXNldEdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQ6KEJPT0wpZmxhZworeworICAgIF9pbXBsLT5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGZs
YWcpOworfQorCistIChJQkFjdGlvbil0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6KGlkKXNlbmRlcgor
eworICAgIF9pbXBsLT50b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKTsKK30KKworLSAoSUJBY3Rpb24p
dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBfaW1w
bC0+dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCk7Cit9CisKKy0gKHZvaWQpb3Jk
ZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPm9yZGVy
RnJvbnRTdWJzdGl0dXRpb25zUGFuZWwoc2VuZGVyKTsKK30KKworLSAoSUJBY3Rpb24pdG9nZ2xl
U21hcnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcgoreworICAgIF9pbXBsLT50b2dnbGVTbWFydElu
c2VydERlbGV0ZSgpOworfQorCistIChCT09MKWlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25F
bmFibGVkCit7CisgICAgcmV0dXJuIF9pbXBsLT5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
RW5hYmxlZCgpOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZDooQk9PTClmbGFnCit7CisgICAgX2ltcGwtPnNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZChmbGFnKTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbjooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPnRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vi
c3RpdHV0aW9uKCk7Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5h
YmxlZAoreworICAgIHJldHVybiBfaW1wbC0+aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5h
YmxlZCgpOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVk
OihCT09MKWZsYWcKK3sKKyAgICBfaW1wbC0+c2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWQoZmxhZyk7Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bjooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPnRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRp
b24oKTsKK30KKworLSAoQk9PTClpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkCit7Cisg
ICAgcmV0dXJuIF9pbXBsLT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCk7Cit9CisK
Ky0gKHZvaWQpc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZworewor
ICAgIF9pbXBsLT5zZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChmbGFnKTsKK30KKwor
LSAodm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBf
aW1wbC0+dG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbigpOworfQorCistIChCT09MKWlzQXV0
b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZAoreworICAgIHJldHVybiBfaW1wbC0+aXNBdXRv
bWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Cit9CisKKy0gKHZvaWQpc2V0QXV0b21hdGlj
VGV4dFJlcGxhY2VtZW50RW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgX2ltcGwtPnNldEF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoZmxhZyk7Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0
b21hdGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+dG9nZ2xlQXV0
b21hdGljVGV4dFJlcGxhY2VtZW50KCk7Cit9CisKKy0gKHZvaWQpdXBwZXJjYXNlV29yZDooaWQp
c2VuZGVyCit7CisgICAgX2ltcGwtPnVwcGVyY2FzZVdvcmQoKTsKK30KKworLSAodm9pZClsb3dl
cmNhc2VXb3JkOihpZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+bG93ZXJjYXNlV29yZCgpOworfQor
CistICh2b2lkKWNhcGl0YWxpemVXb3JkOihpZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+Y2FwaXRh
bGl6ZVdvcmQoKTsKK30KKworLSAoQk9PTClfd2FudHNLZXlEb3duRm9yRXZlbnQ6KE5TRXZlbnQg
KilldmVudAoreworICAgIHJldHVybiBfaW1wbC0+d2FudHNLZXlEb3duRm9yRXZlbnQoZXZlbnQp
OworfQorCistICh2b2lkKXNjcm9sbFdoZWVsOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfaW1w
bC0+c2Nyb2xsV2hlZWwoZXZlbnQpOworfQorCistICh2b2lkKXN3aXBlV2l0aEV2ZW50OihOU0V2
ZW50ICopZXZlbnQKK3sKKyAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOworfQorCist
ICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5tb3VzZU1v
dmVkKGV2ZW50KTsKK30KKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAorewor
ICAgIF9pbXBsLT5tb3VzZURvd24oZXZlbnQpOworfQorCistICh2b2lkKW1vdXNlVXA6KE5TRXZl
bnQgKilldmVudAoreworICAgIF9pbXBsLT5tb3VzZVVwKGV2ZW50KTsKK30KKworLSAodm9pZClt
b3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5tb3VzZURyYWdnZWQo
ZXZlbnQpOworfQorCistICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgX2ltcGwtPm1vdXNlRW50ZXJlZChldmVudCk7Cit9CisKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6
KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5tb3VzZUV4aXRlZChldmVudCk7Cit9CisK
Ky0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5v
dGhlck1vdXNlRG93bihldmVudCk7Cit9CisKKy0gKHZvaWQpb3RoZXJNb3VzZURyYWdnZWQ6KE5T
RXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5vdGhlck1vdXNlRHJhZ2dlZChldmVudCk7Cit9
CisKKy0gKHZvaWQpb3RoZXJNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfaW1wbC0+
b3RoZXJNb3VzZVVwKGV2ZW50KTsKK30KKworLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVu
dCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPnJpZ2h0TW91c2VEb3duKGV2ZW50KTsKK30KKworLSAo
dm9pZClyaWdodE1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPnJp
Z2h0TW91c2VEcmFnZ2VkKGV2ZW50KTsKK30KKworLSAodm9pZClyaWdodE1vdXNlVXA6KE5TRXZl
bnQgKilldmVudAoreworICAgIF9pbXBsLT5yaWdodE1vdXNlVXAoZXZlbnQpOworfQorCistICh2
b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfaW1w
bC0+cHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQoZXZlbnQpOworfQorCistIChCT09MKWFjY2VwdHNG
aXJzdE1vdXNlOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICByZXR1cm4gX2ltcGwtPmFjY2VwdHNG
aXJzdE1vdXNlKGV2ZW50KTsKK30KKworLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5n
Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIHJldHVybiBfaW1wbC0+c2hvdWxkRGVs
YXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50KGV2ZW50KTsKK30KKworLSAodm9pZClkb0NvbW1hbmRC
eVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBfaW1wbC0+ZG9Db21tYW5kQnlTZWxlY3Rv
cihzZWxlY3Rvcik7Cit9CisKKy0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dAor
eworICAgIGlmICghX2ltcGwpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIF9pbXBs
LT5pbnB1dENvbnRleHQoKTsKK30KKworLSAoQk9PTClwZXJmb3JtS2V5RXF1aXZhbGVudDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgcmV0dXJuIF9pbXBsLT5wZXJmb3JtS2V5RXF1aXZhbGVudChl
dmVudCk7Cit9CisKKy0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIF9p
bXBsLT5rZXlVcCh0aGVFdmVudCk7Cit9CisKKy0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKXRo
ZUV2ZW50Cit7CisgICAgX2ltcGwtPmtleURvd24odGhlRXZlbnQpOworfQorCistICh2b2lkKWZs
YWdzQ2hhbmdlZDooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgX2ltcGwtPmZsYWdzQ2hhbmdl
ZCh0aGVFdmVudCk7Cit9CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVj
dGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsZWN0ZWRSYW5nZSByZXBsYWNlbWVudFJhbmdlOihOU1Jh
bmdlKXJlcGxhY2VtZW50UmFuZ2UKK3sKKyAgICBfaW1wbC0+c2V0TWFya2VkVGV4dChzdHJpbmcs
IG5ld1NlbGVjdGVkUmFuZ2UsIHJlcGxhY2VtZW50UmFuZ2UpOworfQorCistICh2b2lkKXVubWFy
a1RleHQKK3sKKyAgICBfaW1wbC0+dW5tYXJrVGV4dCgpOworfQorCistIChOU1JhbmdlKXNlbGVj
dGVkUmFuZ2UKK3sKKyAgICByZXR1cm4gX2ltcGwtPnNlbGVjdGVkUmFuZ2UoKTsKK30KKworLSAo
Qk9PTCloYXNNYXJrZWRUZXh0Cit7CisgICAgcmV0dXJuIF9pbXBsLT5oYXNNYXJrZWRUZXh0KCk7
Cit9CisKKy0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKK3sKKyAgICByZXR1cm4gX2ltcGwtPm1hcmtl
ZFJhbmdlKCk7Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJp
bmdGb3JQcm9wb3NlZFJhbmdlOihOU1JhbmdlKW5zUmFuZ2UgYWN0dWFsUmFuZ2U6KE5TUmFuZ2VQ
b2ludGVyKWFjdHVhbFJhbmdlCit7CisgICAgcmV0dXJuIF9pbXBsLT5hdHRyaWJ1dGVkU3Vic3Ry
aW5nRm9yUHJvcG9zZWRSYW5nZShuc1JhbmdlLCBhY3R1YWxSYW5nZSk7Cit9CisKKy0gKE5TVUlu
dGVnZXIpY2hhcmFjdGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0aGVQb2ludAoreworICAgIHJl
dHVybiBfaW1wbC0+Y2hhcmFjdGVySW5kZXhGb3JQb2ludCh0aGVQb2ludCk7Cit9CisKKy0gKHZv
aWQpdHlwaW5nQXR0cmlidXRlc1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopKWNvbXBsZXRpb24KK3sKKyAgICBfaW1wbC0+dHlwaW5n
QXR0cmlidXRlc1dpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9uKTsKK30KKworLSAoTlNS
ZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU1JhbmdlKXRoZVJhbmdlIGFjdHVhbFJh
bmdlOihOU1JhbmdlUG9pbnRlcilhY3R1YWxSYW5nZQoreworICAgIHJldHVybiBfaW1wbC0+Zmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGhlUmFuZ2UsIGFjdHVhbFJhbmdlKTsKK30KKworLSAo
dm9pZClzZWxlY3RlZFJhbmdlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TUmFuZ2Ug
c2VsZWN0ZWRSYW5nZSkpY29tcGxldGlvbkhhbmRsZXJQdHIKK3sKKyAgICBfaW1wbC0+c2VsZWN0
ZWRSYW5nZVdpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9uSGFuZGxlclB0cik7Cit9CisK
Ky0gKHZvaWQpbWFya2VkUmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNSYW5n
ZSBtYXJrZWRSYW5nZSkpY29tcGxldGlvbkhhbmRsZXJQdHIKK3sKKyAgICBfaW1wbC0+bWFya2Vk
UmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXJQdHIpOworfQorCist
ICh2b2lkKWhhc01hcmtlZFRleHRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCBo
YXNNYXJrZWRUZXh0KSljb21wbGV0aW9uSGFuZGxlclB0cgoreworICAgIF9pbXBsLT5oYXNNYXJr
ZWRUZXh0V2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyUHRyKTsKK30KKwor
LSAodm9pZClhdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZTooTlNSYW5nZSluc1Jh
bmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0clN0
cmluZywgTlNSYW5nZSBhY3R1YWxSYW5nZSkpY29tcGxldGlvbkhhbmRsZXJQdHIKK3sKKyAgICBf
aW1wbC0+YXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFuZ2UobnNSYW5nZSwgY29tcGxl
dGlvbkhhbmRsZXJQdHIpOworfQorCistICh2b2lkKWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
OihOU1JhbmdlKXRoZVJhbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TUmVjdCBmaXJz
dFJlY3QsIE5TUmFuZ2UgYWN0dWFsUmFuZ2UpKWNvbXBsZXRpb25IYW5kbGVyUHRyCit7CisgICAg
X2ltcGwtPmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHRoZVJhbmdlLCBjb21wbGV0aW9uSGFu
ZGxlclB0cik7Cit9CisKKy0gKHZvaWQpY2hhcmFjdGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0
aGVQb2ludCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU1VJbnRlZ2VyKSljb21wbGV0aW9u
SGFuZGxlclB0cgoreworICAgIF9pbXBsLT5jaGFyYWN0ZXJJbmRleEZvclBvaW50KHRoZVBvaW50
LCBjb21wbGV0aW9uSGFuZGxlclB0cik7Cit9CisKKy0gKE5TQXJyYXkgKil2YWxpZEF0dHJpYnV0
ZXNGb3JNYXJrZWRUZXh0Cit7CisgICAgcmV0dXJuIF9pbXBsLT52YWxpZEF0dHJpYnV0ZXNGb3JN
YXJrZWRUZXh0KCk7Cit9CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0gKHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdl
ICopaW1hZ2UgZW5kZWRBdDooTlNQb2ludCllbmRQb2ludCBvcGVyYXRpb246KE5TRHJhZ09wZXJh
dGlvbilvcGVyYXRpb24KK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAorewor
ICAgIF9pbXBsLT5kcmFnZ2VkSW1hZ2UoaW1hZ2UsIE5TUG9pbnRUb0NHUG9pbnQoZW5kUG9pbnQp
LCBvcGVyYXRpb24pOworfQorCistIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdFbnRlcmVkOihp
ZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIHJldHVybiBfaW1wbC0+ZHJh
Z2dpbmdFbnRlcmVkKGRyYWdnaW5nSW5mbyk7Cit9CisKKy0gKE5TRHJhZ09wZXJhdGlvbilkcmFn
Z2luZ1VwZGF0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCit7CisgICAgcmV0
dXJuIF9pbXBsLT5kcmFnZ2luZ1VwZGF0ZWQoZHJhZ2dpbmdJbmZvKTsKK30KKworLSAodm9pZClk
cmFnZ2luZ0V4aXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICBf
aW1wbC0+ZHJhZ2dpbmdFeGl0ZWQoZHJhZ2dpbmdJbmZvKTsKK30KKworLSAoQk9PTClwcmVwYXJl
Rm9yRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAg
ICByZXR1cm4gX2ltcGwtPnByZXBhcmVGb3JEcmFnT3BlcmF0aW9uKGRyYWdnaW5nSW5mbyk7Cit9
CisKKy0gKEJPT0wpcGVyZm9ybURyYWdPcGVyYXRpb246KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJh
Z2dpbmdJbmZvCit7CisgICAgcmV0dXJuIF9pbXBsLT5wZXJmb3JtRHJhZ09wZXJhdGlvbihkcmFn
Z2luZ0luZm8pOworfQorCistIChOU1ZpZXcgKilfaGl0VGVzdDooTlNQb2ludCAqKXBvaW50IGRy
YWdUeXBlczooTlNTZXQgKil0eXBlcworeworICAgIHJldHVybiBfaW1wbC0+aGl0VGVzdEZvckRy
YWdUeXBlcyhOU1BvaW50VG9DR1BvaW50KCpwb2ludCksIHR5cGVzKTsKK30KKyNlbmRpZiAvLyBF
TkFCTEUoRFJBR19TVVBQT1JUKQorCistIChCT09MKV93aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9u
SXNJblZpc2libGVTY3JvbGxlclRodW1iOihOU1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIF9p
bXBsLT53aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9uSXNJblZpc2libGVTY3JvbGxlclRodW1iKE5T
UG9pbnRUb0NHUG9pbnQocG9pbnQpKTsKK30KKworLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRv
dzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfaW1wbC0+dmlld1dpbGxNb3ZlVG9XaW5kb3co
d2luZG93KTsKK30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Cit7CisgICAgX2ltcGwt
PnZpZXdEaWRNb3ZlVG9XaW5kb3coKTsKK30KKworLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJl
Y3QKK3sKKyAgICBfaW1wbC0+ZHJhd1JlY3QoTlNSZWN0VG9DR1JlY3QocmVjdCkpOworfQorCist
IChCT09MKWlzT3BhcXVlCit7CisgICAgcmV0dXJuIF9pbXBsLT5pc09wYXF1ZSgpOworfQorCist
IChCT09MKW1vdXNlRG93bkNhbk1vdmVXaW5kb3cKK3sKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJW
aWV3SW1wbDo6bW91c2VEb3duQ2FuTW92ZVdpbmRvdygpOworfQorCistICh2b2lkKXZpZXdEaWRI
aWRlCit7CisgICAgX2ltcGwtPnZpZXdEaWRIaWRlKCk7Cit9CisKKy0gKHZvaWQpdmlld0RpZFVu
aGlkZQoreworICAgIF9pbXBsLT52aWV3RGlkVW5oaWRlKCk7Cit9CisKKy0gKHZvaWQpdmlld0Rp
ZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzCit7CisgICAgX2ltcGwtPnZpZXdEaWRDaGFuZ2VCYWNr
aW5nUHJvcGVydGllcygpOworfQorCistICh2b2lkKV9hY3RpdmVTcGFjZURpZENoYW5nZTooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBfaW1wbC0+YWN0aXZlU3BhY2VEaWRD
aGFuZ2UoKTsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKK3sKKyAg
ICByZXR1cm4gX2ltcGwtPmFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50KCk7Cit9CisKK0FM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCistIChCT09MKWFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAoreworICAg
IHJldHVybiBfaW1wbC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOworfQorCistIChpZClhY2Nl
c3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAgIHJldHVybiBfaW1wbC0+YWNj
ZXNzaWJpbGl0eUhpdFRlc3QoTlNQb2ludFRvQ0dQb2ludChwb2ludCkpOworfQorCitBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgorLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQorQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECit7CisgICAgcmV0dXJuIF9pbXBsLT5hY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWUoYXR0cmlidXRlKTsKK30KKworQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
QkVHSU4KKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRy
aWJ1dGUgZm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAoreworICAgIHJldHVybiBfaW1wbC0+YWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlKGF0dHJpYnV0ZSwgcGFyYW1ldGVyKTsKK30KKworQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfQkVHSU4KKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilhY2Nlc3NpYmlsaXR5
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKK3sKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICpuYW1lcyA9IFtzdXBlciBhY2Nl
c3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzXTsKKyAgICByZXR1cm4gW25hbWVz
IGFycmF5QnlBZGRpbmdPYmplY3Q6QCJBWENvbnZlcnRSZWxhdGl2ZUZyYW1lIl07Cit9CisKKy0g
KE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBpZiAoIV9pbXBsKQorICAg
ICAgICByZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOworICAgIHJldHVybiBfaW1wbC0+aGl0
VGVzdChOU1BvaW50VG9DR1BvaW50KHBvaW50KSk7Cit9CisKKy0gKE5TSW50ZWdlciljb252ZXJz
YXRpb25JZGVudGlmaWVyCit7CisgICAgcmV0dXJuIChOU0ludGVnZXIpc2VsZjsKK30KKworLSAo
dm9pZClxdWlja0xvb2tXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5x
dWlja0xvb2tXaXRoRXZlbnQoZXZlbnQpOworfQorCistIChOU1RyYWNraW5nUmVjdFRhZylhZGRU
cmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAq
KWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZQoreworICAgIHJldHVybiBfaW1w
bC0+YWRkVHJhY2tpbmdSZWN0KE5TUmVjdFRvQ0dSZWN0KHJlY3QpLCBvd25lciwgZGF0YSwgYXNz
dW1lSW5zaWRlKTsKK30KKworLSAoTlNUcmFja2luZ1JlY3RUYWcpX2FkZFRyYWNraW5nUmVjdDoo
TlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJ
bnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlIHVzZVRyYWNraW5nTnVtOihpbnQpdGFnCit7CisgICAg
cmV0dXJuIF9pbXBsLT5hZGRUcmFja2luZ1JlY3RXaXRoVHJhY2tpbmdOdW0oTlNSZWN0VG9DR1Jl
Y3QocmVjdCksIG93bmVyLCBkYXRhLCBhc3N1bWVJbnNpZGUsIHRhZyk7Cit9CisKKy0gKHZvaWQp
X2FkZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3RzIG93bmVyOihpZClvd25lciB1c2VyRGF0
YUxpc3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3VtZUluc2lkZUxpc3Q6KEJPT0wgKilhc3N1
bWVJbnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFja2luZ1JlY3RUYWcgKil0cmFja2luZ051
bXMgY291bnQ6KGludCljb3VudAoreworICAgIENHUmVjdCAqY2dSZWN0cyA9IChDR1JlY3QgKilj
YWxsb2MoMSwgc2l6ZW9mKENHUmVjdCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgY2dSZWN0c1tpXSA9IE5TUmVjdFRvQ0dSZWN0KHJlY3RzW2ldKTsKKyAg
ICBfaW1wbC0+YWRkVHJhY2tpbmdSZWN0c1dpdGhUcmFja2luZ051bXMoY2dSZWN0cywgb3duZXIs
IHVzZXJEYXRhTGlzdCwgYXNzdW1lSW5zaWRlTGlzdCwgdHJhY2tpbmdOdW1zLCBjb3VudCk7Cisg
ICAgZnJlZShjZ1JlY3RzKTsKK30KKworLSAodm9pZClyZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJh
Y2tpbmdSZWN0VGFnKXRhZworeworICAgIGlmICghX2ltcGwpCisgICAgICAgIHJldHVybjsKKyAg
ICBfaW1wbC0+cmVtb3ZlVHJhY2tpbmdSZWN0KHRhZyk7Cit9CisKKy0gKHZvaWQpX3JlbW92ZVRy
YWNraW5nUmVjdHM6KE5TVHJhY2tpbmdSZWN0VGFnICopdGFncyBjb3VudDooaW50KWNvdW50Cit7
CisgICAgaWYgKCFfaW1wbCkKKyAgICAgICAgcmV0dXJuOworICAgIF9pbXBsLT5yZW1vdmVUcmFj
a2luZ1JlY3RzKHRhZ3MsIGNvdW50KTsKK30KKworQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfQkVHSU4KKy0gKE5TU3RyaW5nICopdmlldzooTlNWaWV3ICopdmlldyBzdHJpbmdGb3JU
b29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50OihOU1BvaW50KXBvaW50IHVzZXJEYXRhOih2
b2lkICopZGF0YQorQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECit7CisgICAg
cmV0dXJuIF9pbXBsLT5zdHJpbmdGb3JUb29sVGlwKHRhZyk7Cit9CisKK0FMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCistICh2b2lkKXBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6
KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAoreworICAgIF9pbXBsLT5wYXN0ZWJvYXJkQ2hhbmdlZE93bmVyKHBhc3RlYm9hcmQp
OworfQorCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgorLSAodm9pZClw
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZToo
TlNTdHJpbmcgKil0eXBlCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKK3sK
KyAgICBfaW1wbC0+cHJvdmlkZURhdGFGb3JQYXN0ZWJvYXJkKHBhc3RlYm9hcmQsIHR5cGUpOwor
fQorCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgorLSAoTlNBcnJheSAq
KW5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERl
c3RpbmF0aW9uCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKK3sKKyAgICBy
ZXR1cm4gX2ltcGwtPm5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb24oZHJv
cERlc3RpbmF0aW9uKTsKK30KKworLSAoQk9PTCl3YW50c1VwZGF0ZUxheWVyCit7CisgICAgcmV0
dXJuIFdlYktpdDo6V2ViVmlld0ltcGw6OndhbnRzVXBkYXRlTGF5ZXIoKTsKK30KKworLSAodm9p
ZCl1cGRhdGVMYXllcgoreworICAgIF9pbXBsLT51cGRhdGVMYXllcigpOworfQorCistICh2b2lk
KXNtYXJ0TWFnbmlmeVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPnNt
YXJ0TWFnbmlmeVdpdGhFdmVudChldmVudCk7Cit9CisKKy0gKHZvaWQpbWFnbmlmeVdpdGhFdmVu
dDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPm1hZ25pZnlXaXRoRXZlbnQoZXZlbnQp
OworfQorCisjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5UUykKKy0gKHZvaWQpcm90YXRlV2l0
aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfaW1wbC0+cm90YXRlV2l0aEV2ZW50KGV2
ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQorCistIChXS1Rl
eHRGaW5kZXJDbGllbnQgKilfZW5zdXJlVGV4dEZpbmRlckNsaWVudAoreworICAgIGlmICghX3Rl
eHRGaW5kZXJDbGllbnQpCisgICAgICAgIF90ZXh0RmluZGVyQ2xpZW50ID0gYWRvcHROUyhbW1dL
VGV4dEZpbmRlckNsaWVudCBhbGxvY10gaW5pdFdpdGhQYWdlOipfcGFnZSB2aWV3OnNlbGYgdXNl
UGxhdGZvcm1GaW5kVUk6X3VzZVBsYXRmb3JtRmluZFVJXSk7CisgICAgcmV0dXJuIF90ZXh0Rmlu
ZGVyQ2xpZW50LmdldCgpOworfQorCistICh2b2lkKWZpbmRNYXRjaGVzRm9yU3RyaW5nOihOU1N0
cmluZyAqKXRhcmdldFN0cmluZyByZWxhdGl2ZVRvTWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJBc3lu
Y2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pcmVsYXRpdmVNYXRjaCBmaW5kT3B0aW9uczooTlNU
ZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9ucylmaW5kT3B0aW9ucyBtYXhS
ZXN1bHRzOihOU1VJbnRlZ2VyKW1heFJlc3VsdHMgcmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShO
U0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdyYXApKXJlc3VsdENvbGxlY3RvcgoreworICAgIFtb
c2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0gZmluZE1hdGNoZXNGb3JTdHJpbmc6dGFyZ2V0
U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDpyZWxhdGl2ZU1hdGNoIGZpbmRPcHRpb25zOmZpbmRPcHRp
b25zIG1heFJlc3VsdHM6bWF4UmVzdWx0cyByZXN1bHRDb2xsZWN0b3I6cmVzdWx0Q29sbGVjdG9y
XTsKK30KKworLSAodm9pZClyZXBsYWNlTWF0Y2hlczooTlNBcnJheSAqKW1hdGNoZXMgd2l0aFN0
cmluZzooTlNTdHJpbmcgKilyZXBsYWNlbWVudFN0cmluZyBpblNlbGVjdGlvbk9ubHk6KEJPT0wp
c2VsZWN0aW9uT25seSByZXN1bHRDb2xsZWN0b3I6KHZvaWQgKF4pKE5TVUludGVnZXIgcmVwbGFj
ZW1lbnRDb3VudCkpcmVzdWx0Q29sbGVjdG9yCit7CisgICAgW1tzZWxmIF9lbnN1cmVUZXh0Rmlu
ZGVyQ2xpZW50XSByZXBsYWNlTWF0Y2hlczptYXRjaGVzIHdpdGhTdHJpbmc6cmVwbGFjZW1lbnRT
dHJpbmcgaW5TZWxlY3Rpb25Pbmx5OnNlbGVjdGlvbk9ubHkgcmVzdWx0Q29sbGVjdG9yOnJlc3Vs
dENvbGxlY3Rvcl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsRmluZE1hdGNoVG9WaXNpYmxlOihpZDxO
U1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pbWF0Y2gKK3sKKyAgICBb
W3NlbGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIHNjcm9sbEZpbmRNYXRjaFRvVmlzaWJsZTpt
YXRjaF07Cit9CisKKy0gKE5TVmlldyAqKWRvY3VtZW50Q29udGFpbmVyVmlldworeworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWdldFNlbGVjdGVkVGV4dDoodm9pZCAoXikoTlNTdHJp
bmcgKnNlbGVjdGVkVGV4dFN0cmluZykpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbW3NlbGYg
X2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIGdldFNlbGVjdGVkVGV4dDpjb21wbGV0aW9uSGFuZGxl
cl07Cit9CisKKy0gKHZvaWQpc2VsZWN0RmluZE1hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNo
cm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbW3NlbGYgX2Vuc3VyZVRleHRG
aW5kZXJDbGllbnRdIHNlbGVjdEZpbmRNYXRjaDpmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRsZXI6
Y29tcGxldGlvbkhhbmRsZXJdOworfQorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKworLSAo
TlNTdHJpbmcgKilmaWxlUHJvbWlzZVByb3ZpZGVyOihOU0ZpbGVQcm9taXNlUHJvdmlkZXIgKilm
aWxlUHJvbWlzZVByb3ZpZGVyIGZpbGVOYW1lRm9yVHlwZTooTlNTdHJpbmcgKilmaWxlVHlwZQor
eworICAgIHJldHVybiBfaW1wbC0+ZmlsZU5hbWVGb3JGaWxlUHJvbWlzZVByb3ZpZGVyKGZpbGVQ
cm9taXNlUHJvdmlkZXIsIGZpbGVUeXBlKTsKK30KKworLSAodm9pZClmaWxlUHJvbWlzZVByb3Zp
ZGVyOihOU0ZpbGVQcm9taXNlUHJvdmlkZXIgKilmaWxlUHJvbWlzZVByb3ZpZGVyIHdyaXRlUHJv
bWlzZVRvVVJMOihOU1VSTCAqKXVybCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJv
ciAqZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX2ltcGwtPndyaXRlVG9VUkxGb3JG
aWxlUHJvbWlzZVByb3ZpZGVyKGZpbGVQcm9taXNlUHJvdmlkZXIsIHVybCwgY29tcGxldGlvbkhh
bmRsZXIpOworfQorCistIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdTZXNzaW9uOihOU0RyYWdn
aW5nU2Vzc2lvbiAqKXNlc3Npb24gc291cmNlT3BlcmF0aW9uTWFza0ZvckRyYWdnaW5nQ29udGV4
dDooTlNEcmFnZ2luZ0NvbnRleHQpY29udGV4dAoreworICAgIHJldHVybiBfaW1wbC0+ZHJhZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soc2Vzc2lvbiwgY29udGV4dCk7Cit9CisKKy0gKHZvaWQpZHJhZ2dp
bmdTZXNzaW9uOihOU0RyYWdnaW5nU2Vzc2lvbiAqKXNlc3Npb24gZW5kZWRBdFBvaW50OihOU1Bv
aW50KXNjcmVlblBvaW50IG9wZXJhdGlvbjooTlNEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbgorewor
ICAgIF9pbXBsLT5kcmFnZ2luZ1Nlc3Npb25FbmRlZChzZXNzaW9uLCBzY3JlZW5Qb2ludCwgb3Bl
cmF0aW9uKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCisKKy0gKHZvaWQp
X3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKK30KKworLSAodm9pZClfY2Fu
Y2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCit7Cit9CisKKy0gKHZvaWQpX2NvbXBsZXRlSW1t
ZWRpYXRlQWN0aW9uQW5pbWF0aW9uCit7Cit9CisKKy0gKHZvaWQpX3NldERyYXdzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kOihCT09MKWRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kCit7CisgICAgc3Rh
dGljIEJPT0wgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nOworICAgIGlmICghaGFzTG9nZ2Vk
RGVwcmVjYXRpb25XYXJuaW5nKSB7CisgICAgICAgIC8vIFNlZSBidWcgMTU1NTUwIGZvciBkZXRh
aWxzLgorICAgICAgICBOU0xvZyhAIi1bV0tXZWJWaWV3IF9zZXREcmF3c1RyYW5zcGFyZW50QmFj
a2dyb3VuZDpdIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4iKTsKKyAgICAg
ICAgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nID0gWUVTOworICAgIH0KKyAgICBbc2VsZiBf
c2V0RHJhd3NCYWNrZ3JvdW5kOiFkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZF07Cit9CisKKy0g
KHZvaWQpc2hhcmVTaGVldERpZERpc21pc3M6KFdLU2hhcmVTaGVldCAqKXNoYXJlU2hlZXQKK3sK
KyAgICBfaW1wbC0+c2hhcmVTaGVldERpZERpc21pc3Moc2hhcmVTaGVldCk7Cit9CisKKyNwcmFn
bWEgbWFyayAtIFRvdWNoIEJhcgorCisjaWYgSEFWRShUT1VDSF9CQVIpCisKK0BkeW5hbWljIHRv
dWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFyCit7CisgICAgcmV0dXJuIF9p
bXBsLT5tYWtlVG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVt
ICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJldHVybiBfaW1wbC0+Y2FuZGlk
YXRlTGlzdFRvdWNoQmFySXRlbSgpOworfQorCistICh2b2lkKV93ZWJfZGlkQWRkTWVkaWFDb250
cm9sc01hbmFnZXI6KGlkKWNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9hZGRNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3OmNvbnRyb2xzTWFuYWdlcl07Cit9CisKKy0gKHZvaWQpX3dlYl9k
aWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcgoreworICAgIFtzZWxmIF9yZW1vdmVNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3XTsKK30KKworLSAodm9pZClfaW50ZXJhY3RXaXRoTWVkaWFDb250
cm9sc0ZvclRlc3RpbmcKK3sKKyAgICBbc2VsZiBfc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3OllFU107CisgICAgW3NlbGYgbWFrZVRvdWNoQmFyXTsKK30KKworI2VuZGlmIC8vIEhB
VkUoVE9VQ0hfQkFSKQorCitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbXBsZW1lbnRhdGlv
biBXS1dlYlZpZXcgKFdLSUJBY3Rpb25zKQorCistIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFj
ZUl0ZW06KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCit7CisgICAgU0VM
IGFjdGlvbiA9IGl0ZW0uYWN0aW9uOworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoZ29C
YWNrOikpCisgICAgICAgIHJldHVybiAhIV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5iYWNrSXRl
bSgpOworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoZ29Gb3J3YXJkOikpCisgICAgICAg
IHJldHVybiAhIV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOworCisgICAg
aWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc3RvcExvYWRpbmc6KSkgeworICAgICAgICAvLyBGSVhN
RTogUmV0dXJuIG5vIGlmIHdlJ3JlIHN0b3BwZWQuCisgICAgICAgIHJldHVybiBZRVM7CisgICAg
fQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocmVsb2FkOikgfHwgYWN0aW9uID09IEBz
ZWxlY3RvcihyZWxvYWRGcm9tT3JpZ2luOikpIHsKKyAgICAgICAgLy8gRklYTUU6IFJldHVybiBu
byBpZiB3ZSdyZSBsb2FkaW5nLgorICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKworICAgIHJl
dHVybiBfaW1wbC0+dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbShpdGVtKTsKK30KKworLSAoSUJB
Y3Rpb24pZ29CYWNrOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZiBnb0JhY2tdOworfQorCistIChJ
QkFjdGlvbilnb0ZvcndhcmQ6KGlkKXNlbmRlcgoreworICAgIFtzZWxmIGdvRm9yd2FyZF07Cit9
CisKKy0gKElCQWN0aW9uKXJlbG9hZDooaWQpc2VuZGVyCit7CisgICAgW3NlbGYgcmVsb2FkXTsK
K30KKworLSAoSUJBY3Rpb24pcmVsb2FkRnJvbU9yaWdpbjooaWQpc2VuZGVyCit7CisgICAgW3Nl
bGYgcmVsb2FkRnJvbU9yaWdpbl07Cit9CisKKy0gKElCQWN0aW9uKXN0b3BMb2FkaW5nOihpZClz
ZW5kZXIKK3sKKyAgICBfcGFnZS0+c3RvcExvYWRpbmcoKTsKK30KKworQGVuZAorCisjcHJhZ21h
IG1hcmsgLQorCitAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS0ludGVybmFsTWFjKQorCist
IChOU1RleHRJbnB1dENvbnRleHQgKilfd2ViX3N1cGVySW5wdXRDb250ZXh0Cit7CisgICAgcmV0
dXJuIFtzdXBlciBpbnB1dENvbnRleHRdOworfQorCistICh2b2lkKV93ZWJfc3VwZXJRdWlja0xv
b2tXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIFtzdXBlciBxdWlja0xvb2tXaXRo
RXZlbnQ6ZXZlbnRdOworfQorCistICh2b2lkKV93ZWJfc3VwZXJTd2lwZVdpdGhFdmVudDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgW3N1cGVyIHN3aXBlV2l0aEV2ZW50OmV2ZW50XTsKK30KKwor
LSAodm9pZClfd2ViX3N1cGVyTWFnbmlmeVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgW3N1cGVyIG1hZ25pZnlXaXRoRXZlbnQ6ZXZlbnRdOworfQorCistICh2b2lkKV93ZWJfc3Vw
ZXJTbWFydE1hZ25pZnlXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIFtzdXBlciBz
bWFydE1hZ25pZnlXaXRoRXZlbnQ6ZXZlbnRdOworfQorCistICh2b2lkKV93ZWJfc3VwZXJSZW1v
dmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRhZworeworICAgIFtzdXBlciByZW1v
dmVUcmFja2luZ1JlY3Q6dGFnXTsKK30KKworLSAoaWQpX3dlYl9zdXBlckFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKK3sKKyAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07CisgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECit9CisKKy0gKHZvaWQpX3dlYl9zdXBlckRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClz
ZWxlY3RvcgoreworICAgIFtzdXBlciBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKK30K
KworLSAoQk9PTClfd2ViX3N1cGVyUGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIHJldHVybiBbc3VwZXIgcGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOworfQor
CistICh2b2lkKV93ZWJfc3VwZXJLZXlEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBbc3Vw
ZXIga2V5RG93bjpldmVudF07Cit9CisKKy0gKE5TVmlldyAqKV93ZWJfc3VwZXJIaXRUZXN0OihO
U1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIFtzdXBlciBoaXRUZXN0OnBvaW50XTsKK30KKwor
LSAoaWQpX3dlYl9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJl
c3VsdEludGVybmFsOihBUEk6OkhpdFRlc3RSZXN1bHQqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6
KHVpbnQzMl90KXR5cGUgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1c2VyRGF0YQoreworICAgIGlk
PE5TU2VjdXJlQ29kaW5nPiBkYXRhID0gdXNlckRhdGEgPyBzdGF0aWNfY2FzdDxpZDxOU1NlY3Vy
ZUNvZGluZz4+KHVzZXJEYXRhLT53cmFwcGVyKCkpIDogbmlsOworICAgIHJldHVybiBbc2VsZiBf
aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6d3JhcHBl
cigqaGl0VGVzdFJlc3VsdCkgd2l0aFR5cGU6KF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1
c2VyRGF0YTpkYXRhXTsKK30KKworLSAodm9pZClfd2ViX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rp
b25BbmltYXRpb24KK3sKKyAgICBpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9
IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pW3NlbGYgVUlEZWxlZ2F0ZV07CisgICAgaWYgKFt1
aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3ByZXBhcmVGb3JJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OildKQorICAgICAgICBbdWlEZWxlZ2F0ZSBfcHJl
cGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6c2VsZl07CisgICAgZWxz
ZQorICAgICAgICBbc2VsZiBfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl07Cit9
CisKKy0gKHZvaWQpX3dlYl9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKKyAgICBp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pW3NlbGYgVUlEZWxlZ2F0ZV07CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZp
ZXc6KV0pCisgICAgICAgIFt1aURlbGVnYXRlIF9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRp
b25Gb3JXZWJWaWV3OnNlbGZdOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgX2NhbmNlbEltbWVk
aWF0ZUFjdGlvbkFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpX3dlYl9jb21wbGV0ZUltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbgoreworICAgIGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVn
YXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilbc2VsZiBVSURlbGVnYXRlXTsKKyAgICBp
ZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfY29tcGxldGVJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OildKQorICAgICAgICBbdWlEZWxlZ2F0ZSBf
Y29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OnNlbGZdOworICAgIGVs
c2UKKyAgICAgICAgW3NlbGYgX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXTsKK30K
KworLSAodm9pZClfd2ViX2RpZENoYW5nZUNvbnRlbnRTaXplOihOU1NpemUpbmV3U2l6ZQorewor
fQorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKworLSAoV0tEcmFnRGVzdGluYXRpb25BY3Rp
b24pX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0luZm86KGlkIDxOU0RyYWdn
aW5nSW5mbz4pZHJhZ2dpbmdJbmZvCit7CisgICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVp
RGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KVtzZWxmIFVJRGVsZWdhdGVdOwor
ICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3
OmRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86KV0pCisgICAgICAgIHJl
dHVybiBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tG
b3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKKworICAgIGlmICghbGlua2VkT25PckFmdGVy
KFdlYktpdDo6U0RLVmVyc2lvbjo6Rmlyc3RXaXRoRHJvcFRvTmF2aWdhdGVEaXNhbGxvd2VkQnlE
ZWZhdWx0KSkKKyAgICAgICAgcmV0dXJuIFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55OworCisg
ICAgcmV0dXJuIFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55ICYgfldLRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uTG9hZDsKK30KKworLSAodm9pZClfd2ViX2RpZFBlcmZvcm1EcmFnT3BlcmF0aW9uOihC
T09MKWhhbmRsZWQKK3sKKyAgICBpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9
IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pc2VsZi5VSURlbGVnYXRlOworICAgIGlmIChbdWlE
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZFBlcmZvcm1E
cmFnT3BlcmF0aW9uOildKQorICAgICAgICBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGRpZFBl
cmZvcm1EcmFnT3BlcmF0aW9uOmhhbmRsZWRdOworfQorCisjZW5kaWYgLy8gRU5BQkxFKERSQUdf
U1VQUE9SVCkKKworLSAodm9pZClfd2ViX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRv
d3MKK3sKKyAgICBfaW1wbC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c0Zyb21W
aWV3T25seSgpOworfQorCistICh2b2lkKV93ZWJfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxk
V2luZG93c1dpdGhBbmltYXRpb246KEJPT0wpd2l0aEFuaW1hdGlvbgoreworICAgIF9pbXBsLT5k
aXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbkZyb21WaWV3T25s
eSh3aXRoQW5pbWF0aW9uKTsKK30KKworLSAodm9pZClfd2ViX2VkaXRvclN0YXRlRGlkQ2hhbmdl
Cit7CisgICAgW3NlbGYgX2RpZENoYW5nZUVkaXRvclN0YXRlXTsKK30KKworLSAodm9pZClfd2Vi
X2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVudAorewor
ICAgIFtzZWxmIF9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOmV2ZW50XTsKK30K
KworLSAodm9pZClfd2ViX2dyYW50RE9NUGFzdGVBY2Nlc3MKK3sKKyAgICBfaW1wbC0+aGFuZGxl
RE9NUGFzdGVSZXF1ZXN0V2l0aFJlc3VsdChXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNl
OjpHcmFudGVkRm9yR2VzdHVyZSk7Cit9CisKKy0gKHZvaWQpX3Rha2VGaW5kU3RyaW5nRnJvbVNl
bGVjdGlvbkludGVybmFsOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZiB0YWtlRmluZFN0cmluZ0Zy
b21TZWxlY3Rpb246c2VuZGVyXTsKK30KKworLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcK
K3sKKyAgICBfaW1wbC0+aW5zZXJ0VGV4dChzdHJpbmcpOworfQorCistICh2b2lkKWluc2VydFRl
eHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UK
K3sKKyAgICBfaW1wbC0+aW5zZXJ0VGV4dChzdHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UpOworfQor
CitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdL
UHJpdmF0ZU1hYykKKworLSAoV0tQYWdlUmVmKV9wYWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJW
aWV3Cit7CisgICAgcmV0dXJuIHRvQVBJKF9wYWdlLmdldCgpKTsKK30KKworLSAoQk9PTClfaGFz
QWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIKK3sKKyAgICByZXR1cm4gX3BhZ2UgJiYgX3Bh
Z2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCk7Cit9CisKKy0gKEJPT0wpX2ln
bm9yZXNOb25XaGVlbEV2ZW50cworeworICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc05vbldoZWVs
RXZlbnRzKCk7Cit9CisKKy0gKHZvaWQpX3NldElnbm9yZXNOb25XaGVlbEV2ZW50czooQk9PTClp
Z25vcmVzTm9uV2hlZWxFdmVudHMKK3sKKyAgICBfaW1wbC0+c2V0SWdub3Jlc05vbldoZWVsRXZl
bnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50cyk7Cit9CisKKy0gKE5TVmlldyAqKV9zYWZlQnJvd3Np
bmdXYXJuaW5nCit7CisgICAgcmV0dXJuIF9pbXBsLT5zYWZlQnJvd3NpbmdXYXJuaW5nKCk7Cit9
CisKKy0gKF9XS1JlY3RFZGdlKV9waW5uZWRTdGF0ZQoreworICAgIHJldHVybiBfaW1wbC0+cGlu
bmVkU3RhdGUoKTsKK30KKworLSAoX1dLUmVjdEVkZ2UpX3J1YmJlckJhbmRpbmdFbmFibGVkCit7
CisgICAgcmV0dXJuIF9pbXBsLT5ydWJiZXJCYW5kaW5nRW5hYmxlZCgpOworfQorCistICh2b2lk
KV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDooX1dLUmVjdEVkZ2Upc3RhdGUKK3sKKyAgICBfaW1w
bC0+c2V0UnViYmVyQmFuZGluZ0VuYWJsZWQoc3RhdGUpOworfQorCistIChOU0NvbG9yICopX3Bh
Z2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcgoreworICAgIHJldHVybiBfaW1wbC0+cGFnZUV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yKCk7Cit9CisKKy0gKE5TQ29sb3IgKilfYmFja2dyb3VuZENvbG9y
Cit7CisgICAgcmV0dXJuIF9pbXBsLT5iYWNrZ3JvdW5kQ29sb3IoKTsKK30KKworLSAodm9pZClf
c2V0QmFja2dyb3VuZENvbG9yOihOU0NvbG9yICopYmFja2dyb3VuZENvbG9yCit7CisgICAgX2lt
cGwtPnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworfQorCistIChOU0NvbG9y
ICopX3VuZGVybGF5Q29sb3IKK3sKKyAgICByZXR1cm4gX2ltcGwtPnVuZGVybGF5Q29sb3IoKTsK
K30KKworLSAodm9pZClfc2V0VW5kZXJsYXlDb2xvcjooTlNDb2xvciAqKXVuZGVybGF5Q29sb3IK
K3sKKyAgICBfaW1wbC0+c2V0VW5kZXJsYXlDb2xvcih1bmRlcmxheUNvbG9yKTsKK30KKworLSAo
dm9pZClfc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6KENHRmxvYXQpdG90YWxIZWlnaHRPZkJhbm5l
cnMKK3sKKyAgICBfaW1wbC0+c2V0VG90YWxIZWlnaHRPZkJhbm5lcnModG90YWxIZWlnaHRPZkJh
bm5lcnMpOworfQorCistIChDR0Zsb2F0KV90b3RhbEhlaWdodE9mQmFubmVycworeworICAgIHJl
dHVybiBfaW1wbC0+dG90YWxIZWlnaHRPZkJhbm5lcnMoKTsKK30KKworLSAoQk9PTClfZHJhd3NC
YWNrZ3JvdW5kCit7CisgICAgcmV0dXJuIF9pbXBsLT5kcmF3c0JhY2tncm91bmQoKTsKK30KKwor
LSAodm9pZClfc2V0RHJhd3NCYWNrZ3JvdW5kOihCT09MKWRyYXdzQmFja2dyb3VuZAoreworICAg
IF9pbXBsLT5zZXREcmF3c0JhY2tncm91bmQoZHJhd3NCYWNrZ3JvdW5kKTsKK30KKworLSAodm9p
ZClfc2V0VG9wQ29udGVudEluc2V0OihDR0Zsb2F0KWNvbnRlbnRJbnNldAoreworICAgIHJldHVy
biBfaW1wbC0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCk7Cit9CisKKy0gKENHRmxv
YXQpX3RvcENvbnRlbnRJbnNldAoreworICAgIHJldHVybiBfaW1wbC0+dG9wQ29udGVudEluc2V0
KCk7Cit9CisKKy0gKHZvaWQpX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0czoo
Qk9PTClhdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMKK3sKKyAgICBfaW1wbC0+c2V0
QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKGF1dG9tYXRpY2FsbHlBZGp1c3RzQ29u
dGVudEluc2V0cyk7Cit9CisKKy0gKEJPT0wpX2F1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudElu
c2V0cworeworICAgIHJldHVybiBfaW1wbC0+YXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5z
ZXRzKCk7Cit9CisKKy0gKHZvaWQpX3NldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3I6KENHRmxv
YXQpZGV2aWNlU2NhbGVGYWN0b3IKK3sKKyAgICBfaW1wbC0+c2V0T3ZlcnJpZGVEZXZpY2VTY2Fs
ZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Cit9CisKKy0gKENHRmxvYXQpX292ZXJyaWRlRGV2
aWNlU2NhbGVGYWN0b3IKK3sKKyAgICByZXR1cm4gX2ltcGwtPm92ZXJyaWRlRGV2aWNlU2NhbGVG
YWN0b3IoKTsKK30KKworLSAoQk9PTClfd2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZAor
eworICAgIHJldHVybiBfaW1wbC0+d2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZCgpOwor
fQorCistICh2b2lkKV9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOihCT09MKWVu
YWJsZWQKK3sKKyAgICBfaW1wbC0+c2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZChl
bmFibGVkKTsKK30KKworLSAoTlNJbnRlZ2VyKV9zcGVsbENoZWNrZXJEb2N1bWVudFRhZworewor
ICAgIHJldHVybiBfaW1wbC0+c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKTsKK30KKworLSAoQk9P
TClfc2hvdWxkRXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQKK3sKKyAgICBy
ZXR1cm4gX2ltcGwtPnNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQoKTsKK30K
KworLSAodm9pZClfc2V0U2hvdWxkRXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlv
dXQ6KEJPT0wpc2hvdWxkRXhwYW5kCit7CisgICAgcmV0dXJuIF9pbXBsLT5zZXRTaG91bGRFeHBh
bmRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0KHNob3VsZEV4cGFuZCk7Cit9CisKKy0gKENHRmxv
YXQpX21pbmltdW1MYXlvdXRXaWR0aAoreworICAgIHJldHVybiBfcGFnZS0+bWluaW11bVNpemVG
b3JBdXRvTGF5b3V0KCkud2lkdGgoKTsKK30KKworLSAodm9pZClfc2V0TWluaW11bUxheW91dFdp
ZHRoOihDR0Zsb2F0KXdpZHRoCit7CisgICAgQk9PTCBleHBhbmRzVG9GaXQgPSB3aWR0aCA+IDA7
CisKKyAgICBfcGFnZS0+c2V0TWluaW11bVNpemVGb3JBdXRvTGF5b3V0KFdlYkNvcmU6OkludFNp
emUod2lkdGgsIDApKTsKKyAgICBfcGFnZS0+c2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKCFleHBh
bmRzVG9GaXQpOworCisgICAgX2ltcGwtPnNldENsaXBzVG9WaXNpYmxlUmVjdChleHBhbmRzVG9G
aXQpOworfQorCistIChCT09MKV9hbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcgoreworICAg
IHJldHVybiBfcGFnZS0+YWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoKTsKK30KKworLSAo
dm9pZClfc2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXI6KEJPT0wpYWx3YXlzU2hvd3NI
b3Jpem9udGFsU2Nyb2xsZXIKK3sKKyAgICBfcGFnZS0+c2V0QWx3YXlzU2hvd3NIb3Jpem9udGFs
U2Nyb2xsZXIoYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIpOworfQorCistIChCT09MKV9h
bHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKK3sKKyAgICByZXR1cm4gX3BhZ2UtPmFsd2F5c1No
b3dzVmVydGljYWxTY3JvbGxlcigpOworfQorCistICh2b2lkKV9zZXRBbHdheXNTaG93c1ZlcnRp
Y2FsU2Nyb2xsZXI6KEJPT0wpYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyCit7CisgICAgX3Bh
Z2UtPnNldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcihhbHdheXNTaG93c1ZlcnRpY2FsU2Ny
b2xsZXIpOworfQorCistIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCit7CisgICAgcmV0dXJu
IF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Cit9CisKKy0gKHZvaWQpX3NldFVzZVN5c3Rl
bUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQoreworICAgIF9pbXBsLT5zZXRV
c2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UpOworfQorCistICh2b2lkKV9z
ZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSlzY3JvbGxi
YXJTdHlsZQoreworICAgIF9pbXBsLT5zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGUodG9Db3JlU2Ny
b2xsYmFyU3R5bGUoc2Nyb2xsYmFyU3R5bGUpKTsKK30KKworLSAoX1dLT3ZlcmxheVNjcm9sbGJh
clN0eWxlKV9vdmVybGF5U2Nyb2xsYmFyU3R5bGUKK3sKKyAgICByZXR1cm4gdG9BUElTY3JvbGxi
YXJTdHlsZShfaW1wbC0+b3ZlcmxheVNjcm9sbGJhclN0eWxlKCkpOworfQorCistIChOU1ZpZXcg
KilfaW5zcGVjdG9yQXR0YWNobWVudFZpZXcKK3sKKyAgICByZXR1cm4gX2ltcGwtPmluc3BlY3Rv
ckF0dGFjaG1lbnRWaWV3KCk7Cit9CisKKy0gKHZvaWQpX3NldEluc3BlY3RvckF0dGFjaG1lbnRW
aWV3OihOU1ZpZXcgKiluZXdWaWV3Cit7CisgICAgX2ltcGwtPnNldEluc3BlY3RvckF0dGFjaG1l
bnRWaWV3KG5ld1ZpZXcpOworfQorCistICh2b2lkKV9zZXRUaHVtYm5haWxWaWV3OihfV0tUaHVt
Ym5haWxWaWV3ICopdGh1bWJuYWlsVmlldworeworICAgIF9pbXBsLT5zZXRUaHVtYm5haWxWaWV3
KHRodW1ibmFpbFZpZXcpOworfQorCistIChfV0tUaHVtYm5haWxWaWV3ICopX3RodW1ibmFpbFZp
ZXcKK3sKKyAgICBpZiAoIV9pbXBsKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
aW1wbC0+dGh1bWJuYWlsVmlldygpOworfQorCistICh2b2lkKV9zZXRJZ25vcmVzQWxsRXZlbnRz
OihCT09MKWlnbm9yZXNBbGxFdmVudHMKK3sKKyAgICBfaW1wbC0+c2V0SWdub3Jlc0FsbEV2ZW50
cyhpZ25vcmVzQWxsRXZlbnRzKTsKK30KKworLSAoQk9PTClfaWdub3Jlc0FsbEV2ZW50cworewor
ICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc0FsbEV2ZW50cygpOworfQorCistIChCT09MKV91c2VQ
bGF0Zm9ybUZpbmRVSQoreworICAgIHJldHVybiBfdXNlUGxhdGZvcm1GaW5kVUk7Cit9CisKKy0g
KHZvaWQpX3NldFVzZVBsYXRmb3JtRmluZFVJOihCT09MKXVzZVBsYXRmb3JtRmluZFVJCit7Cisg
ICAgX3VzZVBsYXRmb3JtRmluZFVJID0gdXNlUGxhdGZvcm1GaW5kVUk7CisKKyAgICBpZiAoX3Rl
eHRGaW5kZXJDbGllbnQpCisgICAgICAgIFtzZWxmIF9oaWRlRmluZFVJXTsKKyAgICBfdGV4dEZp
bmRlckNsaWVudCA9IG5pbDsKK30KKworLSAodm9pZClfc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJl
c3BvbmRlckNoYW5nZXM6KEJPT0wpc2hvdWxkU3VwcHJlc3MKK3sKKyAgICBfaW1wbC0+c2V0U2hv
dWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMoc2hvdWxkU3VwcHJlc3MpOworfQorCist
IChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRs
ZQoreworICAgIGlmIChhdXRvKiB3ZWJGcmFtZVByb3h5ID0gX3BhZ2UtPnByb2Nlc3MoKS53ZWJG
cmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQoZnJhbWVIYW5kbGUuX2ZyYW1lSUQp
KSkKKyAgICAgICAgcmV0dXJuIF9pbXBsLT5jYW5DaGFuZ2VGcmFtZUxheW91dCgqd2ViRnJhbWVQ
cm94eSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCistIChCT09MKV90cnlUb1N3aXBlV2l0aEV2
ZW50OihOU0V2ZW50ICopZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0ZTooQk9PTClpZ25vcmluZ1Bp
bm5lZFN0YXRlCit7CisgICAgcmV0dXJuIF9pbXBsLT50cnlUb1N3aXBlV2l0aEV2ZW50KGV2ZW50
LCBpZ25vcmluZ1Bpbm5lZFN0YXRlKTsKK30KKworLSAodm9pZClfZGlzbWlzc0NvbnRlbnRSZWxh
dGl2ZUNoaWxkV2luZG93cworeworICAgIF9pbXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hp
bGRXaW5kb3dzRnJvbVZpZXdPbmx5KCk7Cit9CisKKy0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3Qp
cmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldAoreworICAgIF9pbXBsLT5zZXRGcmFtZUFu
ZFNjcm9sbEJ5KE5TUmVjdFRvQ0dSZWN0KHJlY3QpLCBOU1NpemVUb0NHU2l6ZShvZmZzZXQpKTsK
K30KKworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVu
dCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPmdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNv
cmVGcm9tVmlld09ubHkoZXZlbnQpOworfQorCistICh2b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBk
YXRlcworeworICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOworfQorCistICh2
b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzCit7CisgICAgX2ltcGwtPmVuYWJsZUZyYW1lU2l6
ZVVwZGF0ZXMoKTsKK30KKworLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFu
Z2VzCit7CisgICAgX2ltcGwtPmJlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOwor
fQorCistICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzCit7CisgICAgX2lt
cGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsKK30KKworLSAodm9pZClfZW5k
RGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMKK3sKKyAgICBfaW1wbC0+ZW5kRGVmZXJy
aW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMoKTsKK30KKworLSAodm9pZClfc2V0Q3VzdG9tU3dp
cGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MKK3sKKyAgICBfaW1wbC0+c2V0Q3Vz
dG9tU3dpcGVWaWV3cyhjdXN0b21Td2lwZVZpZXdzKTsKK30KKworLSAodm9pZClfc2V0Q3VzdG9t
U3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0Cit7CisgICAg
X2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQodG9wQ29udGVudEluc2V0
KTsKK30KKworLSAodm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoodm9pZChe
KShDR1JlY3QpKWNhbGxiYWNrCit7CisgICAgX2ltcGwtPnNldERpZE1vdmVTd2lwZVNuYXBzaG90
Q2FsbGJhY2soY2FsbGJhY2spOworfQorCistIChOU1ZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldworeworICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldygp
OworfQorCistIChOU1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93Cit7CisgICAgcmV0dXJuIF9p
bXBsLT5mdWxsU2NyZWVuV2luZG93KCk7Cit9CisKKy0gKGlkKV9pbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDooX1dLSGl0VGVzdFJlc3VsdCAqKWhpdFRl
c3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YToo
aWQ8TlNTZWN1cmVDb2Rpbmc+KXVzZXJEYXRhCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
TlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJ
bmZvICopcHJpbnRJbmZvCit7CisgICAgcmV0dXJuIFtzZWxmIHByaW50T3BlcmF0aW9uV2l0aFBy
aW50SW5mbzpwcmludEluZm9dOworfQorCistIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3Bl
cmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6KF9X
S0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUKK3sKKyAgICBpZiAoYXV0byogd2ViRnJhbWVQcm94
eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJZGVudGlmaWVyRnJv
bUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCisgICAgICAgIHJldHVybiBfaW1wbC0+cHJpbnRP
cGVyYXRpb25XaXRoUHJpbnRJbmZvKHByaW50SW5mbywgKndlYkZyYW1lUHJveHkpOworICAgIHJl
dHVybiBuaWw7Cit9CisKKy0gKEJPT0wpX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwor
eworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRp
YVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgor
fQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEJPT0wpd2Fu
dHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAg
X2ltcGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcpOworI2VuZGlmCit9CisKKy0gKGlkKV9tZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgcmV0dXJuIF9pbXBsLT5j
bGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA/IF9pbXBsLT5tZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3KCkgOiBuaWw7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYK
K30KKworLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCistICh2
b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihpZCltZWRpYVBsYXliYWNrQ29udHJv
bHNWaWV3Cit7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJy
aWRlLgorLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworeworfQorCist
ICh2b2lkKV9wcmVwYXJlRm9yTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXRhcmdldFdpbmRvdyBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAg
IGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5k
bGVyKTsKKyAgICBfaW1wbC0+cHJlcGFyZUZvck1vdmVUb1dpbmRvdyh0YXJnZXRXaW5kb3csIFtj
b21wbGV0aW9uSGFuZGxlckNvcHldIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KCk7
CisgICAgfSk7Cit9CisKK0BlbmQgLy8gV0tXZWJWaWV3IChXS1ByaXZhdGVNYWMpCisKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KaW5kZXggZDZjNTk2ZDhiOTU4OTMyNmNmNjM0
NTJlYWQ5Yzc2NzliOGNiYmYxZS4uMDJiNGQ5MTcwOTc2YzgxZDM5NTEzNDg2NTgyZGIzYjA1ZjM5
ZWEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZp
ZXdUZXN0aW5nTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9tYWMvV0tX
ZWJWaWV3VGVzdGluZ01hYy5tbQpAQCAtMjgsOCArMjgsMTAgQEAKIAogI2lmIFBMQVRGT1JNKE1B
QykKIAotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld01h
Yy5oIgogI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCisjaW1wb3J0ICJXZWJWaWV3SW1wbC5oIgogCiBAaW1wbGVtZW50YXRpb24gV0tX
ZWJWaWV3IChXS1Rlc3RpbmdNYWMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCA0ZGYzYWQ1NTU1MDVkNmQ4M2FkMmFkMWFmZDk4
NTM2ZDExZmI2ZWE3Li5hMjEyNTYzODYxMThjNzM5MjZkOTBhNGQ1YjhiMTE0ZjQwY2I3M2NkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
CkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJW
aWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5oIgog
I2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGVG
b3JUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVByb3h5LmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCmluZGV4IGMwMDFhNTk1YWIxZDYx
MTZiMWUzMjExMGRmMDQ3NzI0NjYzOWE3MjUuLmZmZjJjNWUyNjI1MmE5YzE4NDU3OGZmNWM5ZTRm
M2JhY2VmMzJjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3Lm1tCkBAIC00NSw3ICs0NSw3IEBACiAjaW1wb3J0ICJXS1ByZWZlcmVuY2VzSW50ZXJuYWwu
aCIKICNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvbi5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldLV2ViVmlld0lPUy5oIgogI2ltcG9ydCAiV2ViRnJhbWVQcm94eS5oIgogI2ltcG9ydCAiV2Vi
S2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
aW5kZXggYjM3NjUwYmU0ZGU4NmExNzVjNjFkZDFkMWY3ZTk1MTFmNGM4YTQ2Yy4uYmVjZDkxNTBk
MDIzZjM4ZjE4N2JiOTIxMTkyNjQ2MGVmMDMwOWE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC02OSw3
ICs2OSw3IEBACiAjaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXS1dl
YlZpZXdDb25maWd1cmF0aW9uLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmll
d0lPUy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCIKICNpbXBvcnQgIldlYkF1dG9jb3JyZWN0aW9uQ29udGV4
dC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLUERGVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1BERlZpZXcubW0KaW5kZXggOGNjYzYy
NzgzMGNhYzU3MDk4OWIzODc1ODgwMjgzNDAwMTBlNDUzYi4uZjc2OTY4OTUzM2M0Mzg1ZWFhODVj
MTdhZTNmZTdkN2U2NTRkOWJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLUERGVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tQREZW
aWV3Lm1tCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJXS0tleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3IuaCIKICNpbXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBvcnQgIldLV2Vi
RXZlbnQuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZp
ZXdJT1MuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCAiX1dLV2ViVmlld1By
aW50Rm9ybWF0dGVySW50ZXJuYWwuaCIKICNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2Jp
bGVDb3JlU2VydmljZXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS1Njcm9sbFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tTY3JvbGxW
aWV3Lm1tCmluZGV4IDkwMzU3ZGQ5NjljY2FkNmM2ZjRmZmM2Y2NlMmFjMDYyYTE4M2Y3MTAuLjZh
ZWYyYjNjNWUxZWM1OTdiOGU4M2M0MmNiNjBhMTdhZmFjMjhlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1Njcm9sbFZpZXcubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLU2Nyb2xsVmlldy5tbQpAQCAtMzEsNyArMzEsNyBAQAogI2ltcG9y
dCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIKICNpbXBvcnQgIldLRGVm
ZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdJT1MuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBo
aWNzU1BJLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLU3lzdGVtUHJldmlld1ZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tTeXN0ZW1QcmV2aWV3Vmlldy5tbQppbmRleCBmOWFhZDgz
NzZiMWEwNWIwZmZlZjljNTllNTgyZjUxMTgxYzU2MDY0Li40NTVjYjQyMWNmNTNiNzBhMjcxYWFh
ZmFmODAxN2U1MDA0MDRlM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tTeXN0ZW1QcmV2aWV3Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tTeXN0ZW1QcmV2aWV3Vmlldy5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1wb3J0ICJB
UElGaW5kQ2xpZW50LmgiCiAjaW1wb3J0ICJBUElVSUNsaWVudC5oIgotI2ltcG9ydCAiV0tXZWJW
aWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5oIgogI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCiAjaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2Vz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWM4NWZjMTU0OTRlMWIyMjMxNTZh
MzU0Y2FhOWQyYjJmNmU4OWI5ZC4uZjRhYWZhY2I3ZmM4OWZjZjA5MjUyOGViZmE4NDEwNjU0YWJm
YWEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMzYsNiArMTM2LDggQEAKIAkJMEZGMjRBMkQxODc5RTRCQzAwM0FCRjBDIC8qIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMjRBMkIxODc5RTRCQzAw
M0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OwogCQkwRkYyNEEyRTE4NzlFNEJDMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkYyNEEyQzE4NzlFNEJDMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTBGRjI2NEEwMUExRkY5Q0Mw
MDFGRTc1OSAvKiBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzA3Qzc5MUExRkVF
QTMwMERBN0E0NSAvKiBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCAq
LzsgfTsKKwkJMEZGRUQ5OEUyM0EzMjAwQTAwRUVGNDU5IC8qIFdLV2ViVmlld0lPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRUQ5OEMyM0EzMjAw
NDAwRUVGNDU5IC8qIFdLV2ViVmlld0lPUy5oICovOyB9OworCQkwRkZFRDk5MzIzQTMyMDNEMDBF
RUY0NTkgLyogV0tXZWJWaWV3TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkZFRDk5MDIzQTMyMDM4MDBFRUY0NTkgLyogV0tXZWJWaWV3TWFjLmgg
Ki87IH07CiAJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNDEwRjQ5
MTlBRjdCODAwMDJFQkFCNSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuaCAqLzsgfTsKIAkJMUEwMDJE
NDMxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZUludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAwMkQ0MjE5NkIzMzcwMDBC
OUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMUEwMDJENDQxOTZC
MzM4OTAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMDJEM0YxOTZCMzI5NDAwQjlBRDQ0IC8qIF9XS1Nl
c3Npb25TdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yMTM2LDYgKzIxMzgsMTAgQEAKIAkJMEZGMjRBMkIxODc5RTRCQzAwM0FCRjBDIC8q
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkwRkYyNEEyQzE4NzlFNEJDMDAzQUJG
MEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlN
ZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJMEZGMjRBMkYxODc5RTRGRTAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRUQ5OEMy
M0EzMjAwNDAwRUVGNDU5IC8qIFdLV2ViVmlld0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZp
ZXdJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRUQ5OEQyM0EzMjAwNTAw
RUVGNDU5IC8qIFdLV2ViVmlld0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmll
d0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRUQ5OEYyM0EzMjAzNzAw
RUVGNDU5IC8qIFdLV2ViVmlld01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdLV2ViVmlld01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGRUQ5OTAyM0EzMjAzODAwRUVGNDU5IC8qIFdLV2ViVmlld01hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXdNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTA1OEM3QjFGRUE1NTg1RTExQ0EyQ0JCIC8qIENvY29hLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvQ29jb2EuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9Owog
CQkxQTAwMkQzRTE5NkIzMjk0MDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLU2Vzc2lvblN0YXRlLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAwMkQzRjE5NkIzMjk0MDBCOUFENDQgLyogX1dL
U2Vzc2lvblN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1Nlc3Np
b25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE2Nyw2ICs1MTczLDgg
QEAKIAkJMEY0NUEzMkUyMzlEODk2MDAwMjk0QUJGIC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZGRUQ5OEMyM0EzMjAwNDAwRUVGNDU5IC8q
IFdLV2ViVmlld0lPUy5oICovLAorCQkJCTBGRkVEOThEMjNBMzIwMDUwMEVFRjQ1OSAvKiBXS1dl
YlZpZXdJT1MubW0gKi8sCiAJCQkJMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8qIFdLV2ViVmll
d1ByaXZhdGVGb3JUZXN0aW5nSU9TLmggKi8sCiAJCQkJMEY0NUEzMzAyMzlEODlBMTAwMjk0QUJG
IC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MubW0gKi8sCiAJCQkpOwpAQCAtODU4MCw2ICs4NTg4LDgg
QEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDODY5OUIzMTE2QUFEQUEwMDJBOTI1QiAvKiBXS1Zp
ZXcubW0gKi8sCiAJCQkJQkM4Njk5QjQxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlld0ludGVybmFs
LmggKi8sCisJCQkJMEZGRUQ5OTAyM0EzMjAzODAwRUVGNDU5IC8qIFdLV2ViVmlld01hYy5oICov
LAorCQkJCTBGRkVEOThGMjNBMzIwMzcwMEVFRjQ1OSAvKiBXS1dlYlZpZXdNYWMubW0gKi8sCiAJ
CQkJMEY0NUEzMzMyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5n
TWFjLmggKi8sCiAJCQkJMEY0NUEzMzQyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3Rp
bmdNYWMubW0gKi8sCiAJCQkpOwpAQCAtMTA4NzUsNiArMTA4ODUsOCBAQAogCQkJCTJEN0FBRkQz
MThDODY0MDYwMEE3QUNENCAvKiBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJEQzZEOUMzMThDNDRBNjEwMDQzQkFENCAvKiBXS1dlYlZpZXdDb250ZW50UHJv
dmlkZXJSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2NkJGOEYxOEEwNTJFRDAwMjA3
MUI0IC8qIFdLV2ViVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZFRDk4RTIz
QTMyMDBBMDBFRUY0NTkgLyogV0tXZWJWaWV3SU9TLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZF
RDk5MzIzQTMyMDNEMDBFRUY0NTkgLyogV0tXZWJWaWV3TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyNkY5QTgzQjE4QTM0NjgxMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0NUEzM0QyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1ByaXZhdGVG
b3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1QTMzMTIzOUQ4OUExMDAyOTRBQkYg
LyogV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385683</attachid>
            <date>2019-12-13 22:46:38 -0800</date>
            <delta_ts>2019-12-14 12:18:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205233-20191213224637.patch</filename>
            <type>text/plain</type>
            <size>587396</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ1NzhjN2I1ZTMzMGMzYzNj
MDI3ZTZiNzRmMjMxYWViMzE3Mjk3Y2IuLmRjMGQxODExMGU2YWU1MjYwZDk2MWJiOWYxYTAwYTYy
NzM3OTc4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEzNCBAQAorMjAxOS0xMi0xMyAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNvZGUgb3V0
IG9mIFdLV2ViVmlldy5tbSBpbnRvIHBsYXRmb3JtLXNwZWNpZmljIGZpbGVzLCBmb3IgZWFzaWVy
IG5hdmlnYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNTIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgYXMgbXVjaCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIG91dCBvZiBXS1dlYlZpZXcu
bW0gYXMgcG9zc2libGUsIG1vdmluZyBpdCB0byBXS1dlYlZpZXdNYWMvV0tXZWJWaWV3SU9TLgor
ICAgICAgICBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkgaXMgc3BsaXQgaW50byBXS1dlYlZpZXcgKFdL
UHJpdmF0ZUlPUykgYW5kIFdLV2ViVmlldyAoV0tQcml2YXRlTWFjKSBzbyB0aGUgaW1wbGVtZW50
YXRpb25zCisgICAgICAgIG9mIHRob3NlIGZ1bmN0aW9ucyBjYW4gbW92ZS4KKyAgICAgICAgCisg
ICAgICAgIENvZGUgdGhhdCByZW1haW5zIGluIFdLV2ViVmlldy5tbSBpcyBlaXRoZXIgQ29jb2Et
Z2VuZXJpYywgb3IgaW1wbGVtZW50cyBBUEkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGVu
dGlyZWx5IGN1dC9wYXN0ZSwgb3RoZXIgdGhhbiB0aGUgYWRkaXRpb24gb2YgLV90YWtlRmluZFN0
cmluZ0Zyb21TZWxlY3Rpb25JbnRlcm5hbDogZm9yIG1hY09TCisgICAgICAgIHRvIGFsbG93IFdL
V2ViVmlldy5tbSB0byBjYWxsIC10YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246LgorCisgICAg
ICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbToKKyAgICAgICAgKGhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2Vk
Q2FsbGJhY2spOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QWxsb3dzQmFja0ZvcndhcmROYXZp
Z2F0aW9uR2VzdHVyZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBhbGxvd3NCYWNrRm9yd2Fy
ZE5hdmlnYXRpb25HZXN0dXJlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0UGFnZVpvb206
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBwYWdlWm9vbV0pOgorICAgICAgICAodG9GaW5kT3B0
aW9ucyk6CisgICAgICAgICgtW1dLV2ViVmlldyBmaW5kU3RyaW5nOndpdGhDb25maWd1cmF0aW9u
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgaGFuZGxlc1VSTFNj
aGVtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldE1lZGlhVHlwZTpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IG1lZGlhVHlwZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmll
d10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QWxsb3dzTWFnbmlmaWNhdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGFsbG93c01hZ25pZmljYXRpb25dKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IHNldE1hZ25pZmljYXRpb246Y2VudGVyZWRBdFBvaW50Ol0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgc2V0TWFnbmlmaWNhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1hZ25p
ZmljYXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByaW50T3BlcmF0aW9uV2l0aFByaW50
SW5mbzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhclNhZmVCcm93
c2luZ1dhcm5pbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhclNhZmVCcm93c2luZ1dh
cm5pbmdJZkZvck1haW5GcmFtZU5hdmlnYXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9p
bnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOndpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6d2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpdKToKKyAgICAgICAgKGRpY3Rp
b25hcnlSZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKToKKyAgICAgICAgKG5zVGV4dEFsaWdu
bWVudCk6CisgICAgICAgIChzZWxlY3Rpb25BdHRyaWJ1dGVzKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9kaWRDaGFuZ2VFZGl0b3JTdGF0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvZ2ds
ZVN0cmlrZVRocm91Z2g6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5jcmVhc2VMaXN0TGV2
ZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGVjcmVhc2VMaXN0TGV2ZWw6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY2hhbmdlTGlzdFR5cGU6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBpbnB1dEFjY2Vzc29yeVZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGlucHV0Vmlld10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgaW5wdXRBc3Npc3RhbnRJdGVtXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2VsZWN0aW9uQXR0cmlidXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3ZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2luc3BlY3Rvcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX21haW5GcmFtZV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2lzRWRpdGFibGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRFZGl0YWJsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9leGVjdXRlRWRpdENvbW1h
bmQ6YXJndW1lbnQ6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF90ZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1
bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOl0pOgorICAgICAgICAoK1tX
S1dlYlZpZXcgX3N0cmluZ0ZvckZpbmRdKToKKyAgICAgICAgKCtbV0tXZWJWaWV3IF9zZXRTdHJp
bmdGb3JGaW5kOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW90ZU9iamVjdFJlZ2lzdHJ5
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGFuZGxlXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50c10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2hpc3RvcnlEZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhpc3RvcnlE
ZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVNZWRpYVBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuVG9nZ2xlUGljdHVyZUlu
UGljdHVyZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUGljdHVyZUluUGljdHVyZUFjdGl2
ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvZ2dsZVBpY3R1cmVJblBpY3R1cmVdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jbG9zZUFsbE1lZGlhUHJlc2VudGF0aW9uc10pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3N0b3BNZWRpYUNhcHR1cmVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zdG9wQWxsTWVkaWFQbGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N1c3BlbmRB
bGxNZWRpYVBsYXliYWNrXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzdW1lQWxsTWVkaWFQ
bGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VucmVhY2hhYmxlVVJMXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfbWFpbkZyYW1lVVJMXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
bG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6YmFzZVVSTDpmb3JVbnJlYWNoYWJsZVVSTDpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9sb2FkRGF0YTpNSU1FVHlwZTpjaGFyYWN0ZXJFbmNvZGluZ05h
bWU6YmFzZVVSTDp1c2VyRGF0YTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9sb2FkUmVxdWVz
dDpzaG91bGRPcGVuRXh0ZXJuYWxVUkxzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NlcnRp
ZmljYXRlQ2hhaW5dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21taXR0ZWRVUkxdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9NSU1FVHlwZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vz
ZXJBZ2VudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FwcGxpY2F0aW9uTmFtZUZvclVzZXJB
Z2VudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJB
Z2VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jdXN0b21Vc2VyQWdlbnRdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9zZXRDdXN0b21Vc2VyQWdlbnQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfd2ViUHJvY2Vzc0lkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm92
aXNpb25hbFdlYlByb2Nlc3NJZGVudGlmaWVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2Vi
UHJvY2Vzc0lzUmVzcG9uc2l2ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2tpbGxXZWJDb250
ZW50UHJvY2Vzc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbG9hZFdpdGhvdXRDb250ZW50
QmxvY2tlcnNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZWxvYWRFeHBpcmVkT25seV0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGVd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb252ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5h
dGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nvb3Jk
aW5hdGVzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0
c0luUmVjdDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mb2N1
c1RleHRJbnB1dENvbnRleHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfdGFrZVBERlNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29tcGxldGlvbkhhbmRsZXI6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Vzc2lvblN0YXRlRGF0YV0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3Nlc3Npb25TdGF0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nlc3Np
b25TdGF0ZVdpdGhGaWx0ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzdG9yZUZyb21T
ZXNzaW9uU3RhdGVEYXRhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc3RvcmVTZXNzaW9u
U3RhdGU6YW5kTmF2aWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xvc2VdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOmNvbnRlbnRU
eXBlOmRhdGE6b3B0aW9uczpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lu
c2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Y29udGVudFR5cGU6b3B0aW9uczpjb21wbGV0
aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdy
YXBwZXI6Y29udGVudFR5cGU6Y29tcGxldGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
dHRhY2htZW50Rm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaW11bGF0
ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlV2l0aEFscGhhOmJldGE6Z2FtbWE6XSk6CisgICAgICAg
ICgrW1dLV2ViVmlldyBfaGFuZGxlc1NhZmVCcm93c2luZ10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOndhcm5pbmc6ZGV0YWlsczpjb21w
bGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5n
V2FybmluZ1dpdGhVUkw6dGl0bGU6d2FybmluZzpkZXRhaWxzOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoK1tXS1dlYlZpZXcgX2NvbmZpcm1NYWx3YXJlU2VudGluZWxdKToKKyAgICAg
ICAgKCtbV0tXZWJWaWV3IF92aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbF0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2lzSklURW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9ldmFs
dWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX2FsbG93c1JlbW90ZUluc3BlY3Rpb25dKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3JlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRSZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2FkZHNWaXNpdGVkTGlua3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBZGRzVmlzaXRl
ZExpbmtzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX25ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jl
c3NdKToKKyAgICAgICAgKGxheW91dE1pbGVzdG9uZXMpOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldE9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZ2V0TWFpblJlc291cmNlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9nZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2dldENvbnRlbnRzQXNBdHRyaWJ1
dGVkU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2dldEFwcGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfcGFnaW5hdGlvbk1vZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRQYWdpbmF0aW9uTW9kZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdpbmF0aW9uQmVo
YXZlc0xpa2VDb2x1bW5zXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnaW5hdGlvbkJl
aGF2ZXNMaWtlQ29sdW1uczpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlTGVuZ3RoXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0UGFnZUxlbmd0aDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9nYXBCZXR3ZWVuUGFnZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRHYXBC
ZXR3ZWVuUGFnZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnaW5hdGlvbkxpbmVHcmlk
RW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFBhZ2luYXRpb25MaW5lR3JpZEVu
YWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZUNvdW50XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc3VwcG9ydHNUZXh0Wm9vbV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Rl
eHRab29tRmFjdG9yXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VGV4dFpvb21GYWN0b3I6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcGFnZVpvb21GYWN0b3JdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zZXRQYWdlWm9vbUZhY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
aWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0RGlh
Z25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9maW5kRGVs
ZWdhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGaW5kRGVsZWdhdGU6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY291bnRTdHJpbmdNYXRjaGVzOm9wdGlvbnM6bWF4Q291bnQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfZmluZFN0cmluZzpvcHRpb25zOm1heENvdW50Ol0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2hpZGVGaW5kVUldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckl0ZW06XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfaW5wdXREZWxlZ2F0ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElucHV0RGVsZWdh
dGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdl
RG9jdW1lbnRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0Rpc3BsYXlpbmdTdGFuZGFsb25l
TWVkaWFEb2N1bWVudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUGxheWluZ0F1ZGlvXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hv
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2xheW91dE1vZGVdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRMYXlvdXRNb2RlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ZpeGVkTGF5
b3V0U2l6ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEZpeGVkTGF5b3V0U2l6ZTpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2U6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfdmlld1NjYWxlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
c2V0Vmlld1NjYWxlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1pbmltdW1FZmZlY3Rp
dmVEZXZpY2VXaWR0aDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9taW5pbXVtRWZmZWN0aXZl
RGV2aWNlV2lkdGhdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRTY3JvbGxQZXJmb3JtYW5j
ZURhdGFDb2xsZWN0aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxQ
ZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3Njcm9sbFBlcmZvcm1hbmNlRGF0YV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93c01l
ZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEFs
bG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjazpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZnVsbHNj
cmVlbkRlbGVnYXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNJbkZ1bGxzY3JlZW5dKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9tZWRpYUNhcHR1cmVTdGF0ZV0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfbWVkaWFDYXB0dXJlRW5hYmxlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFBhZ2VN
dXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rczpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdp
dGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6XSk6CisgICAgICAgICh0b0FQSVNjcm9sbGJhclN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKHRvQ29yZVNjcm9sbGJhclN0eWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKGRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChkZXZpY2VPcmllbnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBzZXRGcmFtZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEJv
dW5kczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGxheW91dFN1YnZpZXdzXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaXNTaG93aW5nVmlkZW9QaWN0dXJlSW5Q
aWN0dXJlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9pbmNyZW1lbnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfZGVjcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudF0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc2V0Rm9jdXNQcmVzZXJ2YXRpb25Db3VudF0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0
YXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZWZmZWN0aXZlQXBwZWFyYW5j
ZUlzRGFya10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VmZmVjdGl2ZVVzZXJJ
bnRlcmZhY2VMZXZlbElzRWxldmF0ZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zaG91bGRBdm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0NoYW5nZV0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RyYWdJbnRlcmFjdGlvblBvbGljeV0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldERyYWdJbnRlcmFjdGlvblBvbGljeTpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wb3B1bGF0ZUFyY2hpdmVkU3Vidmlld3M6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaXNCYWNrZ3JvdW5kXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVyXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgY2FuQmVjb21lRmlyc3RSZXNwb25kZXJdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5QZXJmb3JtQWN0aW9uOndpdGhTZW5kZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB0YXJnZXRGb3JBY3Rpb246d2l0aFNlbmRlcjpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHdpbGxGaW5pc2hJZ25vcmluZ0NhbGxv
dXRCYXJGYWRlQWZ0ZXJQZXJmb3JtaW5nQWN0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgIChmbG9v
clRvRGV2aWNlUGl4ZWwpOiBEZWxldGVkLgorICAgICAgICAocG9pbnRzRXF1YWxJbkRldmljZVBp
eGVscyk6IERlbGV0ZWQuCisgICAgICAgIChyb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6ZSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY3VycmVudENvbnRlbnRWaWV3XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZWxlY3Rpb25HcmFudWxhcml0eV0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEhhc0N1c3RvbUNvbnRlbnRWaWV3OmxvYWRl
ZE1JTUVUeXBlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEZpbmlzaExv
YWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOmRh
dGE6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFuZGxlS2V5VUlFdmVudDpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93aWxsSW52b2tlVUlTY3JvbGxWaWV3
RGVsZWdhdGVDYWxsYmFja10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZElu
dm9rZVVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2tdKTogRGVsZXRlZC4KKyAgICAgICAgKGNv
bnRlbnRab29tU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoYmFzZVNjcm9sbFZpZXdCYWNrZ3Jv
dW5kQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91
bmRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF92aWRlb0NvbnRyb2xzTWFuYWdl
ckRpZENoYW5nZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luaXRpYWxDb250
ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X2NvbnRlbnRPZmZzZXRBZGp1c3RlZEZvck9ic2N1cmVkSW5zZXQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZWZmZWN0aXZlT2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNh
ZmVBcmVhXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29tcHV0ZWRPYnNjdXJl
ZEluc2V0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY29tcHV0ZWRDb250ZW50
SW5zZXRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21wdXRlZFVub2JzY3Vy
ZWRTYWZlQXJlYUluc2V0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vz
c1dpbGxTd2FwT3JEaWRFeGl0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJv
Y2Vzc1dpbGxTd2FwXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJvY2Vzc0Rp
ZEV4aXRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRSZWxhdW5jaFByb2Nl
c3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lXSk6IERlbGV0ZWQuCisgICAgICAgIChjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChjaGFuZ2VDb250ZW50T2Zmc2V0Qm91bmRlZEluVmFs
aWRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB2aXNpYmxlUmVjdEluVmll
d0Nvb3JkaW5hdGVzXSk6IERlbGV0ZWQuCisgICAgICAgIChhcmVFc3NlbnRpYWxseUVxdWFsQXNG
bG9hdCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkQ29tbWl0TGF5ZXJUcmVl
RHVyaW5nQW5pbWF0ZWRSZXNpemU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
ZGlkQ29tbWl0TGF5ZXJUcmVlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2xh
eWVyVHJlZUNvbW1pdENvbXBsZXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBf
Y291bGROb3RSZXN0b3JlUGFnZVN0YXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfcmVzdG9yZVBhZ2VTY3JvbGxQb3NpdGlvbjpzY3JvbGxPcmlnaW46cHJldmlvdXNPYnNjdXJl
ZEluc2V0OnNjYWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Jlc3RvcmVQ
YWdlU3RhdGVUb1Vub2JzY3VyZWRDZW50ZXI6c2NhbGU6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfdGFrZVZpZXdTbmFwc2hvdF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3pvb21Ub1BvaW50OmF0U2NhbGU6YW5pbWF0ZWQ6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfem9vbVRvUmVjdDphdFNjYWxlOm9yaWdpbjphbmltYXRlZDpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKGNvbnN0cmFpbkNvbnRlbnRPZmZzZXQpOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Njcm9sbFRvQ29udGVudFNjcm9sbFBvc2l0aW9uOnNjcm9sbE9yaWdp
bjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxUb1JlY3Q6b3JpZ2lu
Om1pbmltdW1TY3JvbGxEaXN0YW5jZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF96b29tT3V0V2l0aE9yaWdpbjphbmltYXRlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF96b29tVG9Jbml0aWFsU2NhbGVXaXRoT3JpZ2luOmFuaW1hdGVkOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3pvb21Ub0ZvY3VzUmVjdDpzZWxlY3Rpb25SZWN0Omlu
c2lkZUZpeGVkOmZvbnRTaXplOm1pbmltdW1TY2FsZTptYXhpbXVtU2NhbGU6YWxsb3dTY2FsaW5n
OmZvcmNlU2Nyb2xsOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luaXRpYWxT
Y2FsZUZhY3Rvcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRab29t
U2NhbGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF90YXJnZXRDb250ZW50Wm9v
bVNjYWxlRm9yUmVjdDpjdXJyZW50U2NhbGU6Zml0RW50aXJlUmVjdDptaW5pbXVtU2NhbGU6bWF4
aW11bVNjYWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3pvb21Ub1JlY3Q6
d2l0aE9yaWdpbjpmaXRFbnRpcmVSZWN0Om1pbmltdW1TY2FsZTptYXhpbXVtU2NhbGU6bWluaW11
bVNjcm9sbERpc3RhbmNlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZGlkTW92
ZVRvV2luZG93XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3BhcXVlSW50
ZXJuYWw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRPcGFxdWU6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWxsb3dzRG91YmxlVGFwR2VzdHVyZXNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdHlsdXNUYXBHZXN0dXJlU2hvdWxkQ3JlYXRl
RWRpdGFibGVJbWFnZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdXNlc1N0YW5k
YXJkQ29udGVudFZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZp
ZXc6Y29udGVudFNpemVGb3Jab29tU2NhbGU6d2l0aFByb3Bvc2VkU2l6ZTpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdGb3Jab29taW5nSW5TY3JvbGxWaWV3Ol0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld1dpbGxCZWdpblpvb21pbmc6d2l0
aFZpZXc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3V2lsbEJl
Z2luRHJhZ2dpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNo
U2Nyb2xsaW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3V2ls
bEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOndpbGxEZWNl
bGVyYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZEVu
ZERlY2VsZXJhdGluZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZp
ZXdEaWRTY3JvbGxUb1RvcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3Jv
bGxWaWV3OmFkanVzdGVkT2Zmc2V0Rm9yT2Zmc2V0OnRyYW5zbGF0aW9uOnN0YXJ0UG9pbnQ6bG9j
YXRpb25JblZpZXc6aG9yaXpvbnRhbFZlbG9jaXR5OnZlcnRpY2FsVmVsb2NpdHk6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkU2Nyb2xsOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZFpvb206XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kWm9vbWluZzp3aXRoVmlldzphdFNj
YWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZEVuZFNj
cm9sbGluZ0FuaW1hdGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3Jv
bGxWaWV3RGlkSW50ZXJydXB0RGVjZWxlcmF0aW5nOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX2VuY2xvc2luZ1ZpZXdGb3JFeHBvc2VkUmVjdENvbXB1dGF0aW9uXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZVJlY3RJbkVuY2xvc2luZ1ZpZXc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZUNvbnRlbnRSZWN0XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2Nyb2xsXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfZW5jbG9zaW5nU2Nyb2xsZXJTY3JvbGxpbmdFbmRlZDpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxWaWV3U3lzdGVtQ29udGVudEluc2V0
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNwYXRjaFNldFZpZXdMYXlvdXRT
aXplOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3BhdGNoU2V0TWF4aW11
bVVub2JzY3VyZWRTaXplOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3Bh
dGNoU2V0RGV2aWNlT3JpZW50YXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfZnJhbWVPckJvdW5kc0NoYW5nZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jb250ZW50UmVjdEZvclVzZXJJbnRlcmFjdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3Njcm9sbFZpZXdJc1J1YmJlckJhbmRpbmddKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNhZmVBcmVhSW5zZXRzRGlkQ2hhbmdlXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxWaWV3SXNJblN0YWJsZVN0YXRlOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZFVwZGF0ZVZpc2libGVDb250ZW50UmVj
dFByZUNvbW1pdEhhbmRsZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY2hl
ZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3Ol0pOiBEZWxldGVk
LgorICAgICAgICAoc2Nyb2xsVmlld0NhblNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY29udGVudEJvdW5kc0V4dGVuZGVkRm9yUnViYmVyYmFuZGluZ1dpdGhTY2FsZTpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVWaXNpYmxlQ29udGVudFJl
Y3RzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JNYWluRnJhbWVdKTogRGVsZXRlZC4KKyAgICAgICAgKGFjdGl2ZU1heGltdW1Vbm9i
c2N1cmVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChhY3RpdmVPcmllbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNoTG9hZEZvck1haW5GcmFtZV0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEZhaWxMb2FkRm9yTWFpbkZyYW1l
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvck1haW5GcmFtZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXli
b2FyZENoYW5nZWRXaXRoSW5mbzphZGp1c3RTY3JvbGxWaWV3Ol0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Nob3VsZFVwZGF0ZUtleWJvYXJkV2l0aEluZm86XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5Ym9hcmRXaWxsQ2hhbmdlRnJhbWU6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5Ym9hcmREaWRDaGFuZ2VGcmFtZTpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxTaG93Ol0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2tleWJvYXJkRGlkU2hvdzpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxIaWRlOl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3dpbmRvd0RpZFJvdGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9jb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2NvbnRlbnRTaXplQ2F0ZWdvcnldKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2U6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaXNOYXZpZ2F0aW9uU3dpcGVHZXN0dXJlUmVjb2du
aXplcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVy
ZURpZEJlZ2luXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbmF2aWdhdGlvbkdl
c3R1cmVEaWRFbmRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93UGFzc3dv
cmRWaWV3V2l0aERvY3VtZW50TmFtZTpwYXNzd29yZEhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfaGlkZVBhc3N3b3JkVmlld10pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3Bhc3N3b3JkVmlld10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3VwZGF0ZVNjcm9sbFZpZXdJbnNldEFkanVzdG1lbnRCZWhhdmlvcl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEF2b2lkc1Vuc2FmZUFyZWE6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyB2aWV3RGlkRW5kTGl2ZVJlc2l6ZV0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgaXNGbGlwcGVkXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBpbnRyaW5zaWNDb250ZW50U2l6ZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgcHJlcGFyZUNvbnRlbnRJblJlY3Q6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBzZXRGcmFtZVNpemU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2dy
YW50RE9NUGFzdGVBY2Nlc3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcmVw
YXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25dKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQ6dHlwZXM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBjZW50
ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpyZXR1cm5UeXBlOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgY2hhbmdlRm9udDpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IGNoYW5nZUNvbG9yOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgY2hhbmdlQXR0cmlidXRlczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHN0
YXJ0U3BlYWtpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzdG9wU3BlYWtp
bmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzaG93R3Vlc3NQYW5lbDpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGNoZWNrU3BlbGxpbmc6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBjaGFuZ2VTcGVsbGluZzpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlR3JhbW1hckNoZWNraW5nOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgb3JkZXJGcm9udFN1YnN0
aXR1dGlvbnNQYW5lbDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZVNt
YXJ0SW5zZXJ0RGVsZXRlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IHNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uRW5hYmxlZF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QXV0b21hdGlj
RGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyB0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZF0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNBdXRvbWF0aWNUZXh0UmVw
bGFjZW1lbnRFbmFibGVkXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBzZXRBdXRv
bWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50Ol0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgdXBwZXJjYXNlV29yZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGxvd2VyY2FzZVdvcmQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBj
YXBpdGFsaXplV29yZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93YW50c0tl
eURvd25Gb3JFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFdo
ZWVsOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc3dpcGVXaXRoRXZlbnQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZU1vdmVkOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEb3duOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgbW91c2VVcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNl
RHJhZ2dlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRW50ZXJlZDpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRXhpdGVkOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJNb3VzZURvd246XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRHJhZ2dlZDpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IG90aGVyTW91c2VVcDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VEb3duOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgcmln
aHRNb3VzZURyYWdnZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyByaWdodE1v
dXNlVXA6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBwcmVzc3VyZUNoYW5nZVdp
dGhFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGFjY2VwdHNGaXJzdE1v
dXNlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2hvdWxkRGVsYXlXaW5kb3dP
cmRlcmluZ0ZvckV2ZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZG9Db21t
YW5kQnlTZWxlY3RvcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGluc2VydFRl
eHQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBpbnNlcnRUZXh0OnJlcGxhY2Vt
ZW50UmFuZ2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBpbnB1dENvbnRleHRd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5VXA6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBrZXlEb3duOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgZmxhZ3NDaGFuZ2VkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0TWFy
a2VkVGV4dDpzZWxlY3RlZFJhbmdlOnJlcGxhY2VtZW50UmFuZ2U6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyB1bm1hcmtUZXh0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBzZWxlY3RlZFJhbmdlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBoYXNN
YXJrZWRUZXh0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBtYXJrZWRSYW5nZV0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0ZvclBy
b3Bvc2VkUmFuZ2U6YWN0dWFsUmFuZ2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBjaGFyYWN0ZXJJbmRleEZvclBvaW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgdHlwaW5nQXR0cmlidXRlc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOmFjdHVhbFJhbmdl
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc2VsZWN0ZWRSYW5nZVdpdGhDb21w
bGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1hcmtlZFJh
bmdlV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgaGFzTWFya2VkVGV4dFdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBjaGFyYWN0ZXJJbmRleEZvclBvaW50OmNvbXBsZXRpb25IYW5kbGVyOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2Vk
VGV4dF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dlZEltYWdlOmVuZGVk
QXQ6b3BlcmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdF
bnRlcmVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdVcGRhdGVk
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdFeGl0ZWQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBwcmVwYXJlRm9yRHJhZ09wZXJhdGlvbjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2hpdFRlc3Q6ZHJhZ1R5cGVzOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dpbmRvd1Jlc2l6ZU1vdXNlTG9jYXRpb25Jc0lu
VmlzaWJsZVNjcm9sbGVyVGh1bWI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB2
aWV3V2lsbE1vdmVUb1dpbmRvdzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZp
ZXdEaWRNb3ZlVG9XaW5kb3ddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYXdS
ZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgaXNPcGFxdWVdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlRG93bkNhbk1vdmVXaW5kb3ddKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdEaWRIaWRlXSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyB2aWV3RGlkVW5oaWRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyB2aWV3RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXNdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hY3RpdmVTcGFjZURpZENoYW5nZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQ
YXJhbWV0ZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBoaXRUZXN0Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgY29udmVyc2F0aW9uSWRlbnRpZmllcl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgcXVpY2tMb29rV2l0aEV2ZW50Ol0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgYWRkVHJhY2tpbmdSZWN0Om93bmVyOnVzZXJEYXRh
OmFzc3VtZUluc2lkZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hZGRUcmFj
a2luZ1JlY3Q6b3duZXI6dXNlckRhdGE6YXNzdW1lSW5zaWRlOnVzZVRyYWNraW5nTnVtOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZFRyYWNraW5nUmVjdHM6b3duZXI6dXNl
ckRhdGFMaXN0OmFzc3VtZUluc2lkZUxpc3Q6dHJhY2tpbmdOdW1zOmNvdW50Ol0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgcmVtb3ZlVHJhY2tpbmdSZWN0Ol0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbW92ZVRyYWNraW5nUmVjdHM6Y291bnQ6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyB2aWV3OnN0cmluZ0ZvclRvb2xUaXA6cG9pbnQ6dXNl
ckRhdGE6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBwYXN0ZWJvYXJkQ2hhbmdl
ZE93bmVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgcGFzdGVib2FyZDpwcm92
aWRlRGF0YUZvclR5cGU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBuYW1lc09m
UHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgd2FudHNVcGRhdGVMYXllcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgdXBkYXRlTGF5ZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNtYXJ0
TWFnbmlmeVdpdGhFdmVudDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IG1hZ25p
ZnlXaXRoRXZlbnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyByb3RhdGVXaXRo
RXZlbnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdXNlUGxhdGZvcm1GaW5k
VUldKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVc2VQbGF0Zm9ybUZpbmRV
STpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbnN1cmVUZXh0RmluZGVyQ2xp
ZW50XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBmaW5kTWF0Y2hlc0ZvclN0cmlu
ZzpyZWxhdGl2ZVRvTWF0Y2g6ZmluZE9wdGlvbnM6bWF4UmVzdWx0czpyZXN1bHRDb2xsZWN0b3I6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyByZXBsYWNlTWF0Y2hlczp3aXRoU3Ry
aW5nOmluU2VsZWN0aW9uT25seTpyZXN1bHRDb2xsZWN0b3I6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBzY3JvbGxGaW5kTWF0Y2hUb1Zpc2libGU6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBkb2N1bWVudENvbnRhaW5lclZpZXddKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IGdldFNlbGVjdGVkVGV4dDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IHNlbGVjdEZpbmRNYXRjaDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJJbnB1dENvbnRleHRdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJRdWlja0xvb2tXaXRoRXZlbnQ6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyU3dpcGVXaXRoRXZlbnQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyTWFnbmlmeVdpdGhFdmVu
dDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJTbWFydE1hZ25p
ZnlXaXRoRXZlbnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVy
UmVtb3ZlVHJhY2tpbmdSZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dl
Yl9zdXBlckFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJEb0NvbW1hbmRCeVNlbGVjdG9yOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlclBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlcktleURvd246XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVySGl0VGVzdDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlckZvckhpdFRlc3RSZXN1bHRJbnRlcm5hbDp3aXRoVHlwZTp1c2VyRGF0YTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9jYW5jZWxJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93
ZWJfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25dKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF93ZWJfZGlkQ2hhbmdlQ29udGVudFNpemU6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyYWdnaW5nSW5m
bzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZGlkUGVyZm9ybURyYWdP
cGVyYXRpb246XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2Rpc21pc3ND
b250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF93ZWJfZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c1dpdGhBbmltYXRpb246
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2VkaXRvclN0YXRlRGlkQ2hh
bmdlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2dlc3R1cmVFdmVudFdh
c05vdEhhbmRsZWRCeVdlYkNvcmU6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBm
aWxlUHJvbWlzZVByb3ZpZGVyOmZpbGVOYW1lRm9yVHlwZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IGZpbGVQcm9taXNlUHJvdmlkZXI6d3JpdGVQcm9taXNlVG9VUkw6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBkcmFnZ2luZ1Nl
c3Npb246c291cmNlT3BlcmF0aW9uTWFza0ZvckRyYWdnaW5nQ29udGV4dDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdnaW5nU2Vzc2lvbjplbmRlZEF0UG9pbnQ6b3BlcmF0
aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVMaXN0VG91Y2hCYXJJdGVtXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlhQ29udHJvbHNN
YW5hZ2VyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVN
ZWRpYUNvbnRyb2xzTWFuYWdlcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lu
dGVyYWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfdXNlU3lzdGVtQXBwZWFyYW5jZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlld10pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2NhbkNoYW5nZUZyYW1lTGF5b3V0Ol0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3RyeVRvU3dpcGVXaXRoRXZlbnQ6aWdub3JpbmdQaW5uZWRT
dGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pZ25vcmVzTm9uV2hlZWxF
dmVudHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRJZ25vcmVzTm9uV2hl
ZWxFdmVudHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGFzQWN0aXZlVmlk
ZW9Gb3JDb250cm9sc01hbmFnZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9k
aXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNhYmxlRnJhbWVTaXplVXBkYXRlc10pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0No
YW5nZXNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmREZWZlcnJpbmdWaWV3
SW5XaW5kb3dDaGFuZ2VzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kRGVm
ZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3XSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfZnVsbFNjcmVlbldpbmRvd10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3VuZGVybGF5Q29sb3JdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRVbmRlcmxheUNvbG9yOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1
c3RvbVN3aXBlVmlld3M6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Q3Vz
dG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldEZyYW1lOmFuZFNjcm9sbEJ5Ol0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5n
ZXM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udDpzZW5kZXI6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Rm9udFNpemU6c2VuZGVyOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRleHRDb2xvcjpzZW5kZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBv
c2l0aW9uOmNvbXBsZXRpb25CbG9jazpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jb250ZW50VmlzaWJsZVJlY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9j
b252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY29udmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdWlUZXh0Q2FyZXRSZWN0XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNl
bGVjdGlvbk9mZnNldDp3aXRoVGV4dDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25k
ZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXRhaW5BY3RpdmVGb2N1c2Vk
U3RhdGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWNvbWVGaXJzdFJlc3Bv
bmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3YXJkOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NuYXBzaG90TGF5ZXJDb250ZW50c0ZvckJhY2tG
b3J3YXJkTGlzdEl0ZW06XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZGF0YURl
dGVjdGlvblJlc3VsdHNdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3Np
YmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rpb25Db250ZW50Ol0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmddKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRh
dGlvblVwZGF0ZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kZXRlY3REYXRh
V2l0aFR5cGVzOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX21pbmltdW1MYXlvdXRTaXplT3ZlcnJpZGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOl0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1dlYlZpZXcgX29ic2N1cmVkSW5zZXRzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0T2JzY3VyZWRJbnNldHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVh
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vub2JzY3VyZWRTYWZlQXJlYUlu
c2V0c10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVub2JzY3VyZWRTYWZl
QXJlYUluc2V0czpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQXJlYVNo
b3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyBfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJJbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlXSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbWF4aW11bVVub2JzY3VyZWRTaXplT3Zl
cnJpZGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRNYXhpbXVtVW5vYnNj
dXJlZFNpemVPdmVycmlkZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRB
bGxvd3NWaWV3cG9ydFNocmlua1RvRml0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9iZWdpbkludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2VdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRzQ2hhbmdl
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZUNvbnRlbnRVbnRpbE5leHRV
cGRhdGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVz
aXplV2l0aFVwZGF0ZXM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kQW5p
bWF0ZWRSZXNpemVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXNpemVXaGls
ZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0
aW9uQ2FsbGJhY2tzXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3Zlcmxh
aWRBY2Nlc3NvcnlWaWV3c0luc2V0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NuYXBzaG90UmVjdDppbnRvSW1hZ2VPZldpZHRoOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhN
aW5pbXVtTGF5b3V0U2l6ZTptYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhck92ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc10p
OiBEZWxldGVkLgorICAgICAgICAodmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVu
dHM6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdmlld0ZvckZpbmRVSV0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2lzRGlzcGxheWluZ1BERl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RhdGFGb3JEaXNwbGF5ZWRQREZdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdWdnZXN0ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYlZpZXdQcmludEZvcm1hdHRlcl0p
OiBEZWxldGVkLgorICAgICAgICAodG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kcmF3c0JhY2tncm91bmRdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXREcmF3c0JhY2tncm91bmQ6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfYmFja2dyb3VuZENvbG9yXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfc2V0QmFja2dyb3VuZENvbG9yOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luc3BlY3RvckF0dGFjaG1lbnRWaWV3XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3ZlcmxheVNjcm9sbGJhclN0
eWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX292ZXJsYXlTY3JvbGxiYXJT
dHlsZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dpbmRvd09jY2x1c2lvbkRl
dGVjdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRXaW5k
b3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2hhcmVTaGVldERpZERpc21pc3M6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfc2V0T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9vdmVycmlkZURldmljZVNjYWxlRmFjdG9yXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfc2V0VG9wQ29udGVudEluc2V0Ol0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNldF0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3Bpbm5lZFN0YXRlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2Vi
VmlldyBfcnViYmVyQmFuZGluZ0VuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3Vs
dDp3aXRoVHlwZTp1c2VyRGF0YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgtW1dLV2ViVmlldyBfYXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzXSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfbWluaW11bUxheW91dFdpZHRoXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWluaW11bUxheW91dFdpZHRoOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRG
b3JBdXRvTGF5b3V0XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxk
RXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyBfYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXJdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxl
cjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbHdheXNTaG93c1ZlcnRpY2Fs
U2Nyb2xsZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbHdheXNTaG93
c1ZlcnRpY2FsU2Nyb2xsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJp
bnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzpmb3JGcmFtZTpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2FudHNNZWRpYVBsYXli
YWNrQ29udHJvbHNWaWV3Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX21lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9h
ZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3JlbW92ZU1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9wcmVwYXJlRm9yTW92ZVRvV2luZG93OmNvbXBsZXRpb25IYW5kbGVy
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFRodW1ibmFpbFZpZXc6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfdGh1bWJuYWlsVmlld10pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElnbm9yZXNBbGxFdmVudHM6XSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dLV2ViVmlldyBfaWdub3Jlc0FsbEV2ZW50c10pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3NwZWxsQ2hlY2tlckRvY3VtZW50VGFnXSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBoYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgY2xvc2VGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgZnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IHZhbGlkYXRlVXNlckludGVy
ZmFjZUl0ZW06XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBnb0JhY2s6XSk6IERl
bGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBnb0ZvcndhcmQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLV2ViVmlldyByZWxvYWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmll
dyByZWxvYWRGcm9tT3JpZ2luOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgc3Rv
cExvYWRpbmc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfcHJpbnRGb3JtYXR0
ZXJDbGFzc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByaW50UHJvdmlkZXJd
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVy
bmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW06IEFkZGVkLgorICAgICAgICAo
ZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0aW9uKToKKyAgICAgICAgKGRl
dmljZU9yaWVudGF0aW9uKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEZyYW1lOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbGF5
b3V0U3Vidmlld3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc1Nob3dpbmdWaWRlb1BpY3R1
cmVJblBpY3R1cmVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9tYXlBdXRvbWF0aWNhbGx5U2hv
d1ZpZGVvUGljdHVyZUluUGljdHVyZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2luY3JlbWVu
dEZvY3VzUHJlc2VydmF0aW9uQ291bnRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kZWNyZW1l
bnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVzZXRG
b2N1c1ByZXNlcnZhdGlvbkNvdW50XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNSZXRhaW5p
bmdBY3RpdmVGb2N1c2VkU3RhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lZmZlY3RpdmVB
cHBlYXJhbmNlSXNEYXJrXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZWZmZWN0aXZlVXNlcklu
dGVyZmFjZUxldmVsSXNFbGV2YXRlZF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3BvcHVsYXRl
QXJjaGl2ZWRTdWJ2aWV3czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0JhY2tncm91bmRd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBjYW5CZWNvbWVGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
cmVzaWduRmlyc3RSZXNwb25kZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGNhblBlcmZvcm1B
Y3Rpb246d2l0aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHRhcmdldEZvckFjdGlv
bjp3aXRoU2VuZGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgd2lsbEZpbmlzaElnbm9yaW5n
Q2FsbG91dEJhckZhZGVBZnRlclBlcmZvcm1pbmdBY3Rpb25dKToKKyAgICAgICAgKGZsb29yVG9E
ZXZpY2VQaXhlbCk6CisgICAgICAgIChwb2ludHNFcXVhbEluRGV2aWNlUGl4ZWxzKToKKyAgICAg
ICAgKHJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9j
dXJyZW50Q29udGVudFZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50UHJvdmlk
ZXJSZWdpc3RyeV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NlbGVjdGlvbkdyYW51bGFyaXR5
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0SGFzQ3VzdG9tQ29udGVudFZpZXc6bG9hZGVk
TUlNRVR5cGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNoTG9hZGluZ0RhdGFG
b3JDdXN0b21Db250ZW50UHJvdmlkZXJXaXRoU3VnZ2VzdGVkRmlsZW5hbWU6ZGF0YTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9oYW5kbGVLZXlVSUV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3dpbGxJbnZva2VVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrXSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfZGlkSW52b2tlVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFja10pOgor
ICAgICAgICAoY29udGVudFpvb21TY2FsZSk6CisgICAgICAgIChiYXNlU2Nyb2xsVmlld0JhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChzY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF91cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3ZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaW5pdGlhbENvbnRlbnRPZmZzZXRGb3JTY3JvbGxWaWV3XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfY29udGVudE9mZnNldEFkanVzdGVkRm9yT2JzY3VyZWRJbnNldDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9lZmZlY3RpdmVPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3Rl
ZEJ5U2FmZUFyZWFdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21wdXRlZE9ic2N1cmVkSW5z
ZXRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb21wdXRlZENvbnRlbnRJbnNldF0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzV2lsbFN3YXBPckRpZEV4aXRdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9wcm9jZXNzV2lsbFN3YXBdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9w
cm9jZXNzRGlkRXhpdF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZFJlbGF1bmNoUHJvY2Vz
c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWVdKToK
KyAgICAgICAgKGNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKToKKyAgICAgICAgKGNo
YW5nZUNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHZpc2libGVSZWN0SW5WaWV3Q29vcmRpbmF0ZXNdKToKKyAgICAgICAgKGFyZUVzc2VudGlh
bGx5RXF1YWxBc0Zsb2F0KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21taXRMYXllclRy
ZWVEdXJpbmdBbmltYXRlZFJlc2l6ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRDb21t
aXRMYXllclRyZWU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbGF5ZXJUcmVlQ29tbWl0Q29t
cGxldGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb3VsZE5vdFJlc3RvcmVQYWdlU3RhdGVd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZXN0b3JlUGFnZVNjcm9sbFBvc2l0aW9uOnNjcm9s
bE9yaWdpbjpwcmV2aW91c09ic2N1cmVkSW5zZXQ6c2NhbGU6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcmVzdG9yZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjpzY2FsZTpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF90YWtlVmlld1NuYXBzaG90XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfem9vbVRvUG9pbnQ6YXRTY2FsZTphbmltYXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF96b29tVG9SZWN0OmF0U2NhbGU6b3JpZ2luOmFuaW1hdGVkOl0pOgorICAgICAgICAoY29uc3Ry
YWluQ29udGVudE9mZnNldCk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2Nyb2xsVG9Db250ZW50
U2Nyb2xsUG9zaXRpb246c2Nyb2xsT3JpZ2luOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nj
cm9sbFRvUmVjdDpvcmlnaW46bWluaW11bVNjcm9sbERpc3RhbmNlOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3pvb21PdXRXaXRoT3JpZ2luOmFuaW1hdGVkOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3pvb21Ub0luaXRpYWxTY2FsZVdpdGhPcmlnaW46YW5pbWF0ZWQ6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfem9vbVRvRm9jdXNSZWN0OnNlbGVjdGlvblJlY3Q6aW5zaWRlRml4ZWQ6
Zm9udFNpemU6bWluaW11bVNjYWxlOm1heGltdW1TY2FsZTphbGxvd1NjYWxpbmc6Zm9yY2VTY3Jv
bGw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5pdGlhbFNjYWxlRmFjdG9yXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29udGVudFpvb21TY2FsZV0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3RhcmdldENvbnRlbnRab29tU2NhbGVGb3JSZWN0OmN1cnJlbnRTY2FsZTpmaXRFbnRpcmVS
ZWN0Om1pbmltdW1TY2FsZTptYXhpbXVtU2NhbGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
em9vbVRvUmVjdDp3aXRoT3JpZ2luOmZpdEVudGlyZVJlY3Q6bWluaW11bVNjYWxlOm1heGltdW1T
Y2FsZTptaW5pbXVtU2Nyb2xsRGlzdGFuY2U6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkaWRN
b3ZlVG9XaW5kb3ddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRPcGFxdWVJbnRlcm5hbDpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldE9wYXF1ZTpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHNldEJhY2tncm91bmRDb2xvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hbGxvd3NE
b3VibGVUYXBHZXN0dXJlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N0eWx1c1RhcEdlc3R1
cmVTaG91bGRDcmVhdGVFZGl0YWJsZUltYWdlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyB1c2Vz
U3RhbmRhcmRDb250ZW50Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlldzpj
b250ZW50U2l6ZUZvclpvb21TY2FsZTp3aXRoUHJvcG9zZWRTaXplOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgdmlld0Zvclpvb21pbmdJblNjcm9sbFZpZXc6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBzY3JvbGxWaWV3V2lsbEJlZ2luWm9vbWluZzp3aXRoVmlldzpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IHNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9kaWRGaW5pc2hTY3JvbGxpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9s
bFZpZXdXaWxsRW5kRHJhZ2dpbmc6d2l0aFZlbG9jaXR5OnRhcmdldENvbnRlbnRPZmZzZXQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kRHJhZ2dpbmc6d2lsbERlY2Vs
ZXJhdGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kRGVjZWxlcmF0
aW5nOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsVmlld0RpZFNjcm9sbFRvVG9wOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbFZpZXc6YWRqdXN0ZWRPZmZzZXRGb3JPZmZz
ZXQ6dHJhbnNsYXRpb246c3RhcnRQb2ludDpsb2NhdGlvbkluVmlldzpob3Jpem9udGFsVmVsb2Np
dHk6dmVydGljYWxWZWxvY2l0eTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdE
aWRTY3JvbGw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkWm9vbTpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbFZpZXdEaWRFbmRab29taW5nOndpdGhWaWV3OmF0
U2NhbGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzY3JvbGxWaWV3RGlkRW5kU2Nyb2xsaW5n
QW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbFZpZXdEaWRJbnRlcnJ1
cHREZWNlbGVyYXRpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZVJlY3RJbkVu
Y2xvc2luZ1ZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdmlzaWJsZUNvbnRlbnRSZWN0
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2Nyb2xsXSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfZW5jbG9zaW5nU2Nyb2xsZXJTY3JvbGxpbmdFbmRlZDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zY3JvbGxWaWV3U3lzdGVtQ29udGVudEluc2V0XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaXNw
YXRjaFNldFZpZXdMYXlvdXRTaXplOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3BhdGNo
U2V0TWF4aW11bVVub2JzY3VyZWRTaXplOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc3Bh
dGNoU2V0RGV2aWNlT3JpZW50YXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZnJhbWVP
ckJvdW5kc0NoYW5nZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50UmVjdEZvclVz
ZXJJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Njcm9sbFZpZXdJc1J1YmJl
ckJhbmRpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNhZmVBcmVhSW5zZXRzRGlkQ2hhbmdl
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRh
dGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY3JvbGxWaWV3SXNJblN0YWJsZVN0YXRlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FkZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdFByZUNv
bW1pdEhhbmRsZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zY2hlZHVsZVZpc2libGVDb250
ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3Ol0pOgorICAgICAgICAoc2Nyb2xsVmlld0Nh
blNjcm9sbCk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udGVudEJvdW5kc0V4dGVuZGVkRm9y
UnViYmVyYmFuZGluZ1dpdGhTY2FsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91cGRhdGVW
aXNpYmxlQ29udGVudFJlY3RzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JNYWluRnJhbWVdKToKKyAgICAgICAgKGFjdGl2ZU1heGltdW1Vbm9ic2N1
cmVkU2l6ZSk6CisgICAgICAgIChhY3RpdmVPcmllbnRhdGlvbik6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kaWRD
b21wbGV0ZUFuaW1hdGVkUmVzaXplXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkRmluaXNo
TG9hZEZvck1haW5GcmFtZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZEZhaWxMb2FkRm9y
TWFpbkZyYW1lXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvck1haW5GcmFtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZENoYW5n
ZWRXaXRoSW5mbzphZGp1c3RTY3JvbGxWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3No
b3VsZFVwZGF0ZUtleWJvYXJkV2l0aEluZm86XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5
Ym9hcmRXaWxsQ2hhbmdlRnJhbWU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfa2V5Ym9hcmRE
aWRDaGFuZ2VGcmFtZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxTaG93
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2tleWJvYXJkRGlkU2hvdzpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9rZXlib2FyZFdpbGxIaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3dpbmRvd0RpZFJvdGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50U2l6ZUNh
dGVnb3J5RGlkQ2hhbmdlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vzc2liaWxpdHlT
ZXR0aW5nc0RpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50U2l6ZUNh
dGVnb3J5XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaXNOYXZpZ2F0aW9uU3dpcGVHZXN0dXJl
UmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVyZURp
ZEJlZ2luXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmRd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zaG93UGFzc3dvcmRWaWV3V2l0aERvY3VtZW50TmFt
ZTpwYXNzd29yZEhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZVBhc3N3b3Jk
Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Bhc3N3b3JkVmlld10pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgX3VwZGF0ZVNjcm9sbFZpZXdJbnNldEFkanVzdG1lbnRCZWhhdmlvcl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEF2b2lkc1Vuc2FmZUFyZWE6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmll
dyByZW1vdmVGcm9tU3VwZXJ2aWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZmlyZVByZXNl
bnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRhdGlvbkNhbGxiYWNrc10p
OgorICAgICAgICAodG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9jb250ZW50VmlzaWJsZVJlY3RdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9taW5p
bXVtTGF5b3V0U2l6ZU92ZXJyaWRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Vmlld0xh
eW91dFNpemVPdmVycmlkZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9tYXhpbXVtVW5vYnNj
dXJlZFNpemVPdmVycmlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE1heGltdW1Vbm9i
c2N1cmVkU2l6ZU92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX29ic2N1cmVkSW5z
ZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T2JzY3VyZWRJbnNldHM6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhXSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNh
ZmVBcmVhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0
c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0czpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5z
ZXRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5jbG9zaW5nVmlld0ZvckV4cG9zZWRSZWN0
Q29tcHV0YXRpb25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRJbnRlcmZhY2VPcmllbnRh
dGlvbk92ZXJyaWRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyZmFjZU9yaWVudGF0
aW9uT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jbGVhckludGVyZmFjZU9yaWVu
dGF0aW9uT3ZlcnJpZGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRBbGxvd3NWaWV3cG9y
dFNocmlua1RvRml0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93c1ZpZXdwb3J0U2hy
aW5rVG9GaXRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pc0Rpc3BsYXlpbmdQREZdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9kYXRhRm9yRGlzcGxheWVkUERGXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfc3VnZ2VzdGVkRmlsZW5hbWVGb3JEaXNwbGF5ZWRQREZdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF93ZWJWaWV3UHJpbnRGb3JtYXR0ZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3ldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXREcmFn
SW50ZXJhY3Rpb25Qb2xpY3k6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvdWxkQXZvaWRS
ZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF91
aVRleHRDYXJldFJlY3RdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJu
aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29udmVydFBvaW50RnJvbUNvbnRlbnRzVG9W
aWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250
ZW50czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRh
dGlvblVwZGF0ZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb250OnNlbmRlcjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRGb250U2l6ZTpzZW5kZXI6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0VGV4dENvbG9yOnNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9kZXRlY3REYXRhV2l0aFR5cGVzOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50QXRQb3NpdGlvbjpjb21wbGV0aW9uQmxv
Y2s6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBkaWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rp
b25dKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb25d
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkludGVyYWN0aXZlT2JzY3VyZWRJbnNldHND
aGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5z
ZXRzQ2hhbmdlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGlkZUNvbnRlbnRVbnRpbE5leHRV
cGRhdGVdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVw
ZGF0ZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5kQW5pbWF0ZWRSZXNpemVdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczpd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zbmFwc2hvdFJlY3Q6aW50b0ltYWdlT2ZXaWR0aDpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9vdmVycmlkZUxheW91
dFBhcmFtZXRlcnNXaXRoTWluaW11bUxheW91dFNpemU6bWF4aW11bVVub2JzY3VyZWRTaXplT3Zl
cnJpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJPdmVycmlkZUxheW91dFBhcmFt
ZXRlcnNdKToKKyAgICAgICAgKHZpZXdwb3J0QXJndW1lbnRzRnJvbURpY3Rpb25hcnkpOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3ZpZXdGb3JGaW5kVUldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfcmV0YWluQWN0aXZlRm9jdXNlZFN0YXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYmVj
b21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zbmFwc2hvdExheWVyQ29udGVudHNGb3JC
YWNrRm9yd2FyZExpc3RJdGVtOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RhdGFEZXRlY3Rp
b25SZXN1bHRzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZl
UmVjdHNBdFNlbGVjdGlvbk9mZnNldDp3aXRoVGV4dDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rpb25dKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rp
b25Db250ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Z1bGxTY3JlZW5QbGFjZWhvbGRl
clZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBmdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByaW50Rm9ybWF0dGVyQ2xhc3NdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9wcmludFByb3ZpZGVyXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW06CisgICAgICAgICh0b0NvcmVTY3JvbGxiYXJTdHlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICh0b0FQSVNjcm9sbGJhclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1dlYlZpZXdNYWMuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tXZWJWaWV3TWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKHRvQVBJU2Nyb2xsYmFyU3R5bGUp
OgorICAgICAgICAodG9Db3JlU2Nyb2xsYmFyU3R5bGUpOgorICAgICAgICAoLVtXS1dlYlZpZXcg
YWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBiZWNvbWVGaXJz
dFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHZpZXdXaWxsU3RhcnRMaXZlUmVzaXplXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyB2aWV3RGlkRW5kTGl2ZVJlc2l6ZV0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgaXNGbGlwcGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpbnRyaW5zaWNDb250ZW50
U2l6ZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcHJlcGFyZUNvbnRlbnRJblJlY3Q6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBzZXRGcmFtZVNpemU6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CisgICAgICAgICgtW1dL
V2ViVmlldyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDp0eXBlczpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyB2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOnJldHVyblR5cGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyByZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBjaGFuZ2VGb250Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgY2hhbmdlQ29s
b3I6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjaGFuZ2VBdHRyaWJ1dGVzOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgc3RhcnRTcGVha2luZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHN0
b3BTcGVha2luZzpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNob3dHdWVzc1BhbmVsOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgY2hlY2tTcGVsbGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IGNoYW5nZVNwZWxsaW5nOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVk
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRp
b246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25F
bmFibGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUF1dG9tYXRpY0Rhc2hT
dWJzdGl0dXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZXRBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHRvZ2dsZUF1dG9tYXRpY0xp
bmtEZXRlY3Rpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBpc0F1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNldEF1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB0b2dnbGVBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyB1cHBlcmNhc2VXb3Jk
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbG93ZXJjYXNlV29yZDpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IGNhcGl0YWxpemVXb3JkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dhbnRz
S2V5RG93bkZvckV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgc2Nyb2xsV2hlZWw6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZURvd246XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
bW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFbnRlcmVkOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG90aGVyTW91c2VEcmFn
Z2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJNb3VzZVVwOl0pOgorICAgICAgICAo
LVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyByaWdo
dE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHJpZ2h0TW91c2VVcDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50Ol0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgYWNjZXB0c0ZpcnN0TW91c2U6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgaW5wdXRD
b250ZXh0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBwZXJmb3JtS2V5RXF1aXZhbGVudDpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IGtleVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcga2V5
RG93bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGZsYWdzQ2hhbmdlZDpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpyZXBsYWNlbWVudFJhbmdl
Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdW5tYXJrVGV4dF0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2VsZWN0ZWRSYW5nZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgaGFzTWFya2VkVGV4
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbWFya2VkUmFuZ2VdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmFjdHVhbFJhbmdlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgY2hhcmFjdGVySW5kZXhGb3JQb2ludDpdKToKKyAgICAg
ICAgKC1bV0tXZWJWaWV3IHR5cGluZ0F0dHJpYnV0ZXNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTphY3R1YWxS
YW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNlbGVjdGVkUmFuZ2VXaXRoQ29tcGxldGlv
bkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtYXJrZWRSYW5nZVdpdGhDb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGhhc01hcmtlZFRleHRXaXRoQ29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBhdHRyaWJ1dGVkU3Vic3Ry
aW5nRm9yUHJvcG9zZWRSYW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgY2hhcmFjdGVySW5kZXhGb3JQb2ludDpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRl
eHRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdnZWRJbWFnZTplbmRlZEF0Om9wZXJhdGlv
bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRy
YWdnaW5nRXhpdGVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcHJlcGFyZUZvckRyYWdPcGVy
YXRpb246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBwZXJmb3JtRHJhZ09wZXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9oaXRUZXN0OmRyYWdUeXBlczpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF93aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9uSXNJblZpc2libGVTY3JvbGxlclRo
dW1iOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlld1dpbGxNb3ZlVG9XaW5kb3c6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyB2aWV3RGlkTW92ZVRvV2luZG93XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGlzT3BhcXVlXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBtb3VzZURvd25DYW5Nb3ZlV2luZG93XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyB2aWV3RGlkSGlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlld0RpZFVu
aGlkZV0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlld0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0
aWVzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWN0aXZlU3BhY2VEaWRDaGFuZ2U6XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF0pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgaGl0VGVzdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGNvbnZlcnNh
dGlvbklkZW50aWZpZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHF1aWNrTG9va1dpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGFkZFRyYWNraW5nUmVjdDpvd25lcjp1c2VyRGF0
YTphc3N1bWVJbnNpZGU6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWRkVHJhY2tpbmdSZWN0
Om93bmVyOnVzZXJEYXRhOmFzc3VtZUluc2lkZTp1c2VUcmFja2luZ051bTpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9hZGRUcmFja2luZ1JlY3RzOm93bmVyOnVzZXJEYXRhTGlzdDphc3N1bWVJ
bnNpZGVMaXN0OnRyYWNraW5nTnVtczpjb3VudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHJl
bW92ZVRyYWNraW5nUmVjdDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9yZW1vdmVUcmFja2lu
Z1JlY3RzOmNvdW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgdmlldzpzdHJpbmdGb3JUb29s
VGlwOnBvaW50OnVzZXJEYXRhOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcGFzdGVib2FyZENo
YW5nZWRPd25lcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHBhc3RlYm9hcmQ6cHJvdmlkZURh
dGFGb3JUeXBlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbmFtZXNPZlByb21pc2VkRmlsZXNE
cm9wcGVkQXREZXN0aW5hdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHdhbnRzVXBkYXRl
TGF5ZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHVwZGF0ZUxheWVyXSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBzbWFydE1hZ25pZnlXaXRoRXZlbnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBtYWduaWZ5V2l0aEV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcm90YXRlV2l0aEV2
ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IGZpbmRNYXRjaGVzRm9yU3RyaW5nOnJlbGF0aXZlVG9NYXRj
aDpmaW5kT3B0aW9uczptYXhSZXN1bHRzOnJlc3VsdENvbGxlY3RvcjpdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IHJlcGxhY2VNYXRjaGVzOndpdGhTdHJpbmc6aW5TZWxlY3Rpb25Pbmx5OnJlc3Vs
dENvbGxlY3RvcjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHNjcm9sbEZpbmRNYXRjaFRvVmlz
aWJsZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGRvY3VtZW50Q29udGFpbmVyVmlld10pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgZ2V0U2VsZWN0ZWRUZXh0Ol0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2VsZWN0RmluZE1hdGNoOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgZmlsZVByb21pc2VQcm92aWRlcjpmaWxlTmFtZUZvclR5cGU6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBmaWxlUHJvbWlzZVByb3ZpZGVyOndyaXRlUHJvbWlzZVRvVVJMOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZHJhZ2dpbmdTZXNzaW9uOnNv
dXJjZU9wZXJhdGlvbk1hc2tGb3JEcmFnZ2luZ0NvbnRleHQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBkcmFnZ2luZ1Nlc3Npb246ZW5kZWRBdFBvaW50Om9wZXJhdGlvbjpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25dKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHNoYXJlU2hlZXREaWREaXNtaXNzOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgbWFrZVRvdWNoQmFyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjYW5kaWRhdGVM
aXN0VG91Y2hCYXJJdGVtXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX2RpZEFkZE1lZGlh
Q29udHJvbHNNYW5hZ2VyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRSZW1vdmVN
ZWRpYUNvbnRyb2xzTWFuYWdlcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ludGVyYWN0V2l0
aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyB2YWxpZGF0
ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZ29CYWNrOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgZ29Gb3J3YXJkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
cmVsb2FkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmVsb2FkRnJvbU9yaWdpbjpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IHN0b3BMb2FkaW5nOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3dlYl9zdXBlcklucHV0Q29udGV4dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBl
clF1aWNrTG9va1dpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJT
d2lwZVdpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJNYWduaWZ5
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlclNtYXJ0TWFnbmlm
eVdpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJSZW1vdmVUcmFj
a2luZ1JlY3Q6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyQWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9zdXBlckRvQ29t
bWFuZEJ5U2VsZWN0b3I6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyUGVyZm9y
bUtleUVxdWl2YWxlbnQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfd2ViX3N1cGVyS2V5RG93
bjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfc3VwZXJIaXRUZXN0Ol0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3dlYl9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9y
SGl0VGVzdFJlc3VsdEludGVybmFsOndpdGhUeXBlOnVzZXJEYXRhOl0pOgorICAgICAgICAoLVtX
S1dlYlZpZXcgX3dlYl9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfd2ViX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRDaGFuZ2VDb250ZW50U2l6ZTpdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJhZ2dp
bmdJbmZvOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaWRQZXJmb3JtRHJhZ09wZXJh
dGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93ZWJfZGlzbWlzc0NvbnRlbnRSZWxhdGl2
ZUNoaWxkV2luZG93c10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3dlYl9kaXNtaXNzQ29udGVu
dFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF93ZWJfZWRpdG9yU3RhdGVEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93
ZWJfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF93ZWJfZ3JhbnRET01QYXN0ZUFjY2Vzc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3Rha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbkludGVybmFsOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgaW5zZXJ0VGV4dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGluc2VydFRleHQ6cmVw
bGFjZW1lbnRSYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlUmVmRm9yVHJhbnNp
dGlvblRvV0tXZWJWaWV3XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfaGFzQWN0aXZlVmlkZW9G
b3JDb250cm9sc01hbmFnZXJdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9pZ25vcmVzTm9uV2hl
ZWxFdmVudHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRJZ25vcmVzTm9uV2hlZWxFdmVu
dHM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ10pOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgX3Bpbm5lZFN0YXRlXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBf
cnViYmVyQmFuZGluZ0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRSdWJiZXJC
YW5kaW5nRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wYWdlRXh0ZW5kZWRCYWNr
Z3JvdW5kQ29sb3JdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9iYWNrZ3JvdW5kQ29sb3JdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRCYWNrZ3JvdW5kQ29sb3I6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfdW5kZXJsYXlDb2xvcl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldFVu
ZGVybGF5Q29sb3I6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VG90YWxIZWlnaHRPZkJh
bm5lcnM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdG90YWxIZWlnaHRPZkJhbm5lcnNdKToK
KyAgICAgICAgKC1bV0tXZWJWaWV3IF9kcmF3c0JhY2tncm91bmRdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXREcmF3c0JhY2tncm91bmQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0
VG9wQ29udGVudEluc2V0Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3RvcENvbnRlbnRJbnNl
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVu
dEluc2V0czpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9hdXRvbWF0aWNhbGx5QWRqdXN0c0Nv
bnRlbnRJbnNldHNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRPdmVycmlkZURldmljZVNj
YWxlRmFjdG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX292ZXJyaWRlRGV2aWNlU2NhbGVG
YWN0b3JdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF93aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25F
bmFibGVkXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0
aW9uRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zcGVsbENoZWNrZXJEb2N1bWVu
dFRhZ10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdI
ZWlnaHRGb3JBdXRvTGF5b3V0XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkRXhw
YW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfbWluaW11bUxheW91dFdpZHRoXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0TWlu
aW11bUxheW91dFdpZHRoOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Fsd2F5c1Nob3dzSG9y
aXpvbnRhbFNjcm9sbGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QWx3YXlzU2hvd3NI
b3Jpem9udGFsU2Nyb2xsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfYWx3YXlzU2hvd3NW
ZXJ0aWNhbFNjcm9sbGVyXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0QWx3YXlzU2hvd3NW
ZXJ0aWNhbFNjcm9sbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3VzZVN5c3RlbUFwcGVh
cmFuY2VdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOl0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTpdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9vdmVybGF5U2Nyb2xsYmFyU3R5bGVdKToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9pbnNwZWN0b3JBdHRhY2htZW50Vmlld10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldEluc3BlY3RvckF0dGFjaG1lbnRWaWV3Ol0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3NldFRodW1ibmFpbFZpZXc6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdGh1bWJuYWlsVmll
d10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldElnbm9yZXNBbGxFdmVudHM6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfaWdub3Jlc0FsbEV2ZW50c10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3VzZVBsYXRmb3JtRmluZFVJXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VXNlUGxh
dGZvcm1GaW5kVUk6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0U2hvdWxkU3VwcHJlc3NG
aXJzdFJlc3BvbmRlckNoYW5nZXM6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2FuQ2hhbmdl
RnJhbWVMYXlvdXQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfdHJ5VG9Td2lwZVdpdGhFdmVu
dDppZ25vcmluZ1Bpbm5lZFN0YXRlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc21pc3ND
b250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXRG
cmFtZTphbmRTY3JvbGxCeTpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9nZXN0dXJlRXZlbnRX
YXNOb3RIYW5kbGVkQnlXZWJDb3JlOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Rpc2FibGVG
cmFtZVNpemVVcGRhdGVzXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5hYmxlRnJhbWVTaXpl
VXBkYXRlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2JlZ2luRGVmZXJyaW5nVmlld0luV2lu
ZG93Q2hhbmdlc10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2VuZERlZmVycmluZ1ZpZXdJbldp
bmRvd0NoYW5nZXNdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9lbmREZWZlcnJpbmdWaWV3SW5X
aW5kb3dDaGFuZ2VzU3luY10pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVN3aXBl
Vmlld3M6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENv
bnRlbnRJbnNldDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zZXREaWRNb3ZlU3dpcGVTbmFw
c2hvdENhbGxiYWNrOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9mdWxsU2NyZWVuV2luZG93XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZv
ckhpdFRlc3RSZXN1bHQ6d2l0aFR5cGU6dXNlckRhdGE6XSk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcg
X3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzpmb3JGcmFtZTpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF93YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXddKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAgICgt
W1dLV2ViVmlldyBfbWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld10pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbToKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLUERGVmlldy5t
bToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLU2Nyb2xsVmlldy5tbToKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLU3lzdGVtUHJldmlld1ZpZXcubW06CisgICAgICAgICogV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMTItMTMgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIFNjcmlwdENvbnRyb2xsZXIncyBw
cm9saWZlcmF0aW9uIG9mIEV4Y2VwdGlvbkRldGFpbHMqLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IDM2ZjI5NWQzZjMwMjY4Y2U5MTIyMjRjMzM1ZTA4MDY3MGE0YmYyM2EuLjY1MTg0ZWRkZmY5
MmU1MzA4OGNlOTgxYTEyNWQ2Y2VhM2Q4YjllNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAg
LTMyOSw5ICszMjksMTEgQEAgVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0
aW9uLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2luZG93RmVhdHVyZXMubW0KIAorVUlQcm9jZXNzL0FQSS9pb3Mv
V0tXZWJWaWV3SU9TLm1tCiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1t
CiAKIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJW
aWV3TWFjLm1tCiBVSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCiAKIFVJ
UHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9jb2NvYS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
Q29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCmluZGV4IGFiODk3ODBlMmVlMzZlZmNmM2JiMWIyNTI0YjM1ZDQ0ZmM2ZTFlNjEuLjEyZjAy
YTE3ZTZjMTI1YWQ1ZGRlMmZhOWE0MjQ4NTVhN2NmNzA3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMzIsNyArMzIsNiBAQAogI2lt
cG9ydCAiQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAiQ29tcGxldGlvbkhhbmRsZXJDYWxs
Q2hlY2tlci5oIgogI2ltcG9ydCAiRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKLSNpbXBvcnQg
IkR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUuaCIKICNpbXBvcnQgIkZpbmRDbGllbnQuaCIKICNp
bXBvcnQgIkZ1bGxzY3JlZW5DbGllbnQuaCIKICNpbXBvcnQgIkdsb2JhbEZpbmRJblBhZ2VTdGF0
ZS5oIgpAQCAtNDUsMTcgKzQ0LDEzIEBACiAjaW1wb3J0ICJQYWdlQ2xpZW50LmgiCiAjaW1wb3J0
ICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xs
aW5nUGVyZm9ybWFuY2VEYXRhLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bi5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlJlbW90ZU9i
amVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCIKICNpbXBvcnQgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIK
LSNpbXBvcnQgIlRleHRDaGVja2VyLmgiCi0jaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAj
aW1wb3J0ICJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJWZXJzaW9uQ2hlY2tzLmgiCiAjaW1wb3J0
ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlZpZXdHZXN0dXJlQ29u
dHJvbGxlci5oIgotI2ltcG9ydCAiVmlld1NuYXBzaG90U3RvcmUuaCIKICNpbXBvcnQgIldLQmFj
a0ZvcndhcmRMaXN0SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQmFja0ZvcndhcmRMaXN0SXRlbUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFsLmgiCkBA
IC04MCw2ICs3NSw4IEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uSW50ZXJuYWwu
aCIKICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlci5oIgogI2ltcG9ydCAiV0tXZWJW
aWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5oIgorI2lt
cG9ydCAiV0tXZWJWaWV3TWFjLmgiCiAjaW1wb3J0ICJXS1dlYnBhZ2VQcmVmZXJlbmNlc0ludGVy
bmFsLmgiCiAjaW1wb3J0ICJXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC0xMTEsOCArMTA4LDYgQEAKICNpbXBvcnQgIl9XS1Zp
c2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2Vic2l0ZVBvbGljaWVzSW50
ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudENvbnRleHQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVNjaGVtZVJlZ2lz
dHJ5Lmg+CkBAIC0xMjYsMTYgKzEyMSwxMyBAQAogI2ltcG9ydCA8V2ViQ29yZS9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dLRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TS2V5ZWRBcmNo
aXZlclNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNUZXh0RmluZGVyU1BJLmg+CiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3
dGYvTWF0aEV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0
IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi9TZXRGb3JTY29wZS5oPgogI2ltcG9ydCA8d3RmL1VVSUQuaD4KICNpbXBvcnQgPHd0Zi9zcGkv
ZGFyd2luL2R5bGRTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTE0
OSw3NSArMTQxLDMyIEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW1w
b3J0ICJGcm9udEJvYXJkU2VydmljZXNTUEkuaCIKLSNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmgiCi0jaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVz
dC5oIgotI2ltcG9ydCAiUHJvY2Vzc1Rocm90dGxlci5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eS5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQgIlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCi0j
aW1wb3J0ICJXS1Bhc3N3b3JkVmlldy5oIgogI2ltcG9ydCAiV0tTY3JvbGxWaWV3LmgiCiAjaW1w
b3J0ICJXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeS5oIgotI2ltcG9ydCAiX1dLV2Vi
Vmlld1ByaW50Rm9ybWF0dGVyLmgiCiAjaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxl
Q29yZVNlcnZpY2VzLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9y
T3ZlcmxheS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbEN1cnJlbnRUcmFpdENvbGxlY3Rpb24u
aD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYlNRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oPgotI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgogI2ltcG9y
dCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNlc1NQSS5oPgogI2ltcG9ydCA8d3RmL2NvY29h
L0VudGl0bGVtZW50cy5oPgogCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoLi4uKSBS
RUxFQVNFX0xPR19JRihfcGFnZSAmJiBfcGFnZS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCks
IFZpZXdTdGF0ZSwgX19WQV9BUkdTX18pCi0KLUBpbnRlcmZhY2UgVUlWaWV3IChVSVZpZXdJbnRl
cm5hbCkKLS0gKFVJVmlld0NvbnRyb2xsZXIgKilfdmlld0NvbnRyb2xsZXJGb3JBbmNlc3RvcjsK
LUBlbmQKLQotQGludGVyZmFjZSBVSVdpbmRvdyAoVUlXaW5kb3dJbnRlcm5hbCkKLS0gKEJPT0wp
X2lzSG9zdGVkSW5Bbm90aGVyUHJvY2VzczsKLUBlbmQKLQotQGludGVyZmFjZSBVSVZpZXdDb250
cm9sbGVyIChVSVZpZXdDb250cm9sbGVySW50ZXJuYWwpCi0tIChVSVZpZXdDb250cm9sbGVyICop
X3Jvb3RBbmNlc3RvclZpZXdDb250cm9sbGVyOwotLSAoVUlWaWV3Q29udHJvbGxlciAqKV92aWV3
Q29udHJvbGxlckZvclN1cHBvcnRlZEludGVyZmFjZU9yaWVudGF0aW9uczsKLUBlbmQKLQogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
c3RhdGljIGNvbnN0IHVpbnQzMl90IGZpcnN0U0RLVmVyc2lvbldpdGhMaW5rUHJldmlld0VuYWJs
ZWRCeURlZmF1bHQgPSAweEEwMDAwOwotc3RhdGljIGNvbnN0IFNlY29uZHMgZGVsYXlCZWZvcmVO
b1Zpc2libGVDb250ZW50c1JlY3RzTG9nZ2luZyA9IDFfczsKLXN0YXRpYyBjb25zdCBTZWNvbmRz
IGRlbGF5QmVmb3JlTm9Db21taXRzTG9nZ2luZyA9IDVfczsKLSNlbmRpZgotCiAjaWYgUExBVEZP
Uk0oTUFDKQogI2ltcG9ydCAiQXBwS2l0U1BJLmgiCiAjaW1wb3J0ICJXS1RleHRGaW5kZXJDbGll
bnQuaCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9y
TWFjLmg+CisjZW5kaWYKIAotQGludGVyZmFjZSBXS1dlYlZpZXcgKCkgPFdlYlZpZXdJbXBsRGVs
ZWdhdGUsIE5TVGV4dElucHV0Q2xpZW50LCBOU1RleHRJbnB1dENsaWVudF9Bc3luYz4KLUBlbmQK
LQotI2lmIEhBVkUoVE9VQ0hfQkFSKQotQGludGVyZmFjZSBXS1dlYlZpZXcgKCkgPE5TVG91Y2hC
YXJQcm92aWRlcj4KLUBlbmQKLSNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKLSNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShEUkFHX1NVUFBPUlQp
Ci0KLUBpbnRlcmZhY2UgV0tXZWJWaWV3ICgpIDxOU0ZpbGVQcm9taXNlUHJvdmlkZXJEZWxlZ2F0
ZSwgTlNEcmFnZ2luZ1NvdXJjZT4KLUBlbmQKLQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitz
dGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTREtWZXJzaW9uV2l0aExpbmtQcmV2aWV3RW5hYmxl
ZEJ5RGVmYXVsdCA9IDB4QTAwMDA7CiAjZW5kaWYKIAogc3RhdGljIEhhc2hNYXA8V2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBfX3Vuc2FmZV91bnJldGFpbmVkIFdLV2ViVmlldyAqPiYgcGFnZVRvVmll
d01hcCgpCkBAIC0yMzEsMTYyICsxODAsNyBAQCBXS1dlYlZpZXcqIGZyb21XZWJQYWdlUHJveHko
V2ViS2l0OjpXZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgcmV0dXJuIHBhZ2VUb1ZpZXdNYXAoKS5n
ZXQoJnBhZ2UpOwogfQogCi0jaWYgUExBVEZPUk0oTUFDKQotc3RhdGljIF9XS092ZXJsYXlTY3Jv
bGxiYXJTdHlsZSB0b0FQSVNjcm9sbGJhclN0eWxlKE9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJh
ck92ZXJsYXlTdHlsZT4gY29yZVNjcm9sbGJhclN0eWxlKQotewotICAgIGlmICghY29yZVNjcm9s
bGJhclN0eWxlKQotICAgICAgICByZXR1cm4gX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlQXV0b21h
dGljOwotICAgIAotICAgIHN3aXRjaCAoY29yZVNjcm9sbGJhclN0eWxlLnZhbHVlKCkpIHsKLSAg
ICBjYXNlIFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZURhcms6Ci0gICAgICAgIHJldHVy
biBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVEYXJrOwotICAgIGNhc2UgV2ViQ29yZTo6U2Nyb2xs
YmFyT3ZlcmxheVN0eWxlTGlnaHQ6Ci0gICAgICAgIHJldHVybiBfV0tPdmVybGF5U2Nyb2xsYmFy
U3R5bGVMaWdodDsKLSAgICBjYXNlIFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZURlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVEZWZhdWx0OwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gX1dLT3ZlcmxheVNjcm9s
bGJhclN0eWxlQXV0b21hdGljOwotfQotCi1zdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xs
YmFyT3ZlcmxheVN0eWxlPiB0b0NvcmVTY3JvbGxiYXJTdHlsZShfV0tPdmVybGF5U2Nyb2xsYmFy
U3R5bGUgc2Nyb2xsYmFyU3R5bGUpCi17Ci0gICAgc3dpdGNoIChzY3JvbGxiYXJTdHlsZSkgewot
ICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlRGFyazoKLSAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZURhcms7Ci0gICAgY2FzZSBfV0tPdmVybGF5U2Ny
b2xsYmFyU3R5bGVMaWdodDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhck92ZXJs
YXlTdHlsZUxpZ2h0OwotICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlRGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZURlZmF1bHQ7Ci0g
ICAgY2FzZSBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVBdXRvbWF0aWM6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotI2VuZGlmCi0KLSNkZWZpbmUg
Rk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklFVyhfYWN0aW9uKSBcCi0gICAgLSAodm9pZClf
YWN0aW9uOihpZClzZW5kZXIgXAotICAgIHsgXAotICAgICAgICBpZiAoc2VsZi51c2VzU3RhbmRh
cmRDb250ZW50VmlldykgXAotICAgICAgICAgICAgW19jb250ZW50VmlldyBfYWN0aW9uICMjIEZv
cldlYlZpZXc6c2VuZGVyXTsgXAotICAgIH0KLQotQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyB7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6TmF2aWdhdGlvblN0YXRlPiBfbmF2aWdhdGlv
blN0YXRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlVJRGVsZWdhdGU+IF91aURlbGVn
YXRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Okljb25Mb2FkaW5nRGVsZWdhdGU+IF9p
Y29uTG9hZGluZ0RlbGVnYXRlOwotCi0gICAgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMgX29i
c2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM7Ci0KLSAgICBXZWFrT2JqQ1B0cjxpZCA8X1dL
SW5wdXREZWxlZ2F0ZT4+IF9pbnB1dERlbGVnYXRlOwotCi0gICAgUmV0YWluUHRyPFdLU2FmZUJy
b3dzaW5nV2FybmluZz4gX3NhZmVCcm93c2luZ1dhcm5pbmc7Ci0KLSAgICBCT09MIF91c2VQbGF0
Zm9ybUZpbmRVSTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgUmV0YWluUHRyPF9X
S1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0UmVnaXN0cnk7Ci0KLSAgICBPcHRp
b25hbDxDR1NpemU+IF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlOwotICAgIE9wdGlvbmFsPFdlYkNv
cmU6OkZsb2F0U2l6ZT4gX2xhc3RTZW50Vmlld0xheW91dFNpemU7Ci0gICAgT3B0aW9uYWw8Q0dT
aXplPiBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8V2ViQ29y
ZTo6RmxvYXRTaXplPiBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemU7Ci0KLSAgICBDR0Zs
b2F0IF92aWV3cG9ydE1ldGFUYWdXaWR0aDsKLSAgICBCT09MIF92aWV3cG9ydE1ldGFUYWdXaWR0
aFdhc0V4cGxpY2l0OwotICAgIEJPT0wgX3ZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1
bWVudDsKLSAgICBDR0Zsb2F0IF9pbml0aWFsU2NhbGVGYWN0b3I7Ci0gICAgQk9PTCBfZmFzdENs
aWNraW5nSXNEaXNhYmxlZDsKLQotICAgIEJPT0wgX2FsbG93c0xpbmtQcmV2aWV3OwotCi0gICAg
VUlFZGdlSW5zZXRzIF9vYnNjdXJlZEluc2V0czsKLSAgICBCT09MIF9oYXZlU2V0T2JzY3VyZWRJ
bnNldHM7Ci0gICAgQk9PTCBfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseTsK
LQotICAgIFVJRWRnZUluc2V0cyBfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOwotICAgIEJPT0wg
X2hhdmVTZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7Ci0gICAgQk9PTCBfYXZvaWRzVW5zYWZl
QXJlYTsKLSAgICBVSVJlY3RFZGdlIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFy
ZWE7Ci0KLSAgICBVSUludGVyZmFjZU9yaWVudGF0aW9uIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92
ZXJyaWRlOwotICAgIEJPT0wgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uOwotICAgIE9w
dGlvbmFsPGludDMyX3Q+IF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uOwotCi0gICAgQk9PTCBf
YWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdDsKLQotICAgIEJPT0wgX2hhc0NvbW1pdHRlZExvYWRG
b3JNYWluRnJhbWU7Ci0gICAgQk9PTCBfbmVlZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9h
ZEZvck1haW5GcmFtZTsKLSAgICBXZWJLaXQ6OlRyYW5zYWN0aW9uSUQgX2ZpcnN0UGFpbnRBZnRl
ckNvbW1pdExvYWRUcmFuc2FjdGlvbklEOwotICAgIFdlYktpdDo6VHJhbnNhY3Rpb25JRCBfbGFz
dFRyYW5zYWN0aW9uSUQ7Ci0gICAgV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlIF9k
eW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOwotICAgIFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0U2l6
ZVVwZGF0ZUlEIF9jdXJyZW50RHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEOwotICAgIENBVHJh
bnNmb3JtM0QgX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRzOwotICAgIENHRmxv
YXQgX2FuaW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50V2lkdGg7Ci0gICAgUmV0YWluUHRyPFVJ
Vmlldz4gX3Jlc2l6ZUFuaW1hdGlvblZpZXc7Ci0gICAgQ0dGbG9hdCBfbGFzdEFkanVzdG1lbnRG
b3JTY3JvbGxlcjsKLSAgICBPcHRpb25hbDxDR1JlY3Q+IF9mcm96ZW5WaXNpYmxlQ29udGVudFJl
Y3Q7Ci0gICAgT3B0aW9uYWw8Q0dSZWN0PiBfZnJvemVuVW5vYnNjdXJlZENvbnRlbnRSZWN0Owot
Ci0gICAgQk9PTCBfY29tbWl0RGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uOwotICAgIE9wdGlvbmFs
PFdlYkNvcmU6OkZsb2F0UG9pbnQ+IF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmU7Ci0gICAgV2ViQ29y
ZTo6RmxvYXRCb3hFeHRlbnQgX29ic2N1cmVkSW5zZXRzV2hlblNhdmVkOwotCi0gICAgT3B0aW9u
YWw8V2ViQ29yZTo6RmxvYXRQb2ludD4gX3Vub2JzY3VyZWRDZW50ZXJUb1Jlc3RvcmU7Ci0gICAg
T3B0aW9uYWw8V2ViS2l0OjpUcmFuc2FjdGlvbklEPiBfZmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQ
YWdlUmVzdG9yZTsKLSAgICBkb3VibGUgX3NjYWxlVG9SZXN0b3JlOwotCi0gICAgQk9PTCBfYWxs
b3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7Ci0KLSAgICBSZXRhaW5QdHI8VUlWaWV3
IDxXS1dlYlZpZXdDb250ZW50UHJvdmlkZXI+PiBfY3VzdG9tQ29udGVudFZpZXc7Ci0gICAgUmV0
YWluUHRyPFVJVmlldz4gX2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3OwotCi0gICAgUmV0
YWluUHRyPE5TVGltZXI+IF9lbmNsb3NpbmdTY3JvbGxWaWV3U2Nyb2xsVGltZXI7Ci0gICAgQk9P
TCBfZGlkU2Nyb2xsU2luY2VMYXN0VGltZXJGaXJlOwotCi0gICAgV2ViQ29yZTo6Q29sb3IgX3Nj
cm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICAvLyBUaGlzIHZhbHVlIHRyYWNrcyB0aGUg
Y3VycmVudCBhZGp1c3RtZW50IGFkZGVkIHRvIHRoZSBib3R0b20gaW5zZXQgZHVlIHRvIHRoZSBr
ZXlib2FyZCBzbGlkaW5nIG91dCBmcm9tIHRoZSBib3R0b20KLSAgICAvLyB3aGVuIGNvbXB1dGlu
ZyBvYnNjdXJlZCBjb250ZW50IGluc2V0cy4gVGhpcyBpcyB1c2VkIHdoZW4gdXBkYXRpbmcgdGhl
IHZpc2libGUgY29udGVudCByZWN0cyB3aGVyZSB3ZSBzaG91bGQgbm90Ci0gICAgLy8gaW5jbHVk
ZSB0aGlzIGFkanVzdG1lbnQuCi0gICAgQ0dGbG9hdCBfdG90YWxTY3JvbGxWaWV3Qm90dG9tSW5z
ZXRBZGp1c3RtZW50Rm9yS2V5Ym9hcmQ7Ci0gICAgQk9PTCBfY3VycmVudGx5QWRqdXN0aW5nU2Ny
b2xsVmlld0luc2V0c0ZvcktleWJvYXJkOwotCi0gICAgQk9PTCBfaW52b2tpbmdVSVNjcm9sbFZp
ZXdEZWxlZ2F0ZUNhbGxiYWNrOwotICAgIEJPT0wgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRl
bnRSZWN0c0ZvclVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2s7Ci0gICAgQk9PTCBfZGlkRGVm
ZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yQW55UmVhc29uOwotICAgIEJPT0wgX2RpZERl
ZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVuc3RhYmxlU2Nyb2xsVmlldzsKLQotICAg
IEJPT0wgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZTsKLSAgICBCT09MIF93YWl0aW5nRm9y
Q29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZTsKLQotICAgIFZlY3RvcjxXVEY6OkZ1bmN0aW9uPHZv
aWQgKCk+PiBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemU7Ci0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3M7Ci0K
LSAgICBSZXRhaW5QdHI8V0tQYXNzd29yZFZpZXc+IF9wYXNzd29yZFZpZXc7Ci0KLSAgICBCT09M
IF9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVwZGF0ZTsKLSAgICBCT09MIF92aXNpYmxlQ29udGVu
dFJlY3RVcGRhdGVTY2hlZHVsZWRGcm9tU2Nyb2xsVmlld0luU3RhYmxlU3RhdGU7Ci0KLSAgICBf
V0tEcmFnSW50ZXJhY3Rpb25Qb2xpY3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeTsKLQotICAgIC8v
IEZvciByZWxlYXNlLWxvZ2dpbmcgZm9yIDxyZGFyOi8vcHJvYmxlbS8zOTI4MTI2OT4uCi0gICAg
TW9ub3RvbmljVGltZSBfdGltZU9mUmVxdWVzdEZvclZpc2libGVDb250ZW50UmVjdFVwZGF0ZTsK
LSAgICBNb25vdG9uaWNUaW1lIF90aW1lT2ZMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOwot
Ci0gICAgT3B0aW9uYWw8TW9ub3RvbmljVGltZT4gX3RpbWVPZkZpcnN0VmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQ7Ci0KLSAgICBOU1VJbnRlZ2VyIF9mb2N1c1ByZXNl
cnZhdGlvbkNvdW50OwotICAgIE5TVUludGVnZXIgX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNv
dW50OwotCi0gICAgQk9PTCBfaGFzRW50ZXJlZERlYWxsb2M7Ci0jZW5kaWYKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgUmV0YWluUHRyPFdLVGV4dEZpbmRlckNsaWVudD4gX3RleHRGaW5kZXJDbGll
bnQ7Ci0jZW5kaWYKLSAgICBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVzIF9zZWxlY3Rpb25BdHRyaWJ1
dGVzOwotfQorQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldwogCiAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lCiB7CkBAIC0zOTksMjcgKzE5Myw2IEBAIC0gKEJPT0wp
X2lzVmFsaWQKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1zdGF0aWMgaW50MzJfdCBk
ZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNlT3JpZW50YXRpb24oVUlJbnRlcmZhY2VPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7Ci0gICAg
Y2FzZSBVSUludGVyZmFjZU9yaWVudGF0aW9uVW5rbm93bjoKLSAgICBjYXNlIFVJSW50ZXJmYWNl
T3JpZW50YXRpb25Qb3J0cmFpdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBVSUludGVy
ZmFjZU9yaWVudGF0aW9uUG9ydHJhaXRVcHNpZGVEb3duOgotICAgICAgICByZXR1cm4gMTgwOwot
ICAgIGNhc2UgVUlJbnRlcmZhY2VPcmllbnRhdGlvbkxhbmRzY2FwZUxlZnQ6Ci0gICAgICAgIHJl
dHVybiAtOTA7Ci0gICAgY2FzZSBVSUludGVyZmFjZU9yaWVudGF0aW9uTGFuZHNjYXBlUmlnaHQ6
Ci0gICAgICAgIHJldHVybiA5MDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQzMl90IGRldmljZU9y
aWVudGF0aW9uKCkKLXsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAg
cmV0dXJuIGRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbihbW1VJQXBw
bGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIHN0YXR1c0Jhck9yaWVudGF0aW9uXSk7Ci1BTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KIAogc3RhdGljIGJvb2wgc2hvdWxkQWxs
b3dQaWN0dXJlSW5QaWN0dXJlTWVkaWFQbGF5YmFjaygpCiB7CkBAIC00OTMsNiArMjY2LDE2IEBA
IHN0YXRpYyB2b2lkIHZhbGlkYXRlKFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRp
b24pCiAjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitzdGF0aWMgdm9pZCBo
YXJkd2FyZUtleWJvYXJkQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKENGTm90aWZpY2F0aW9u
Q2VudGVyUmVmLCB2b2lkKiBvYnNlcnZlciwgQ0ZTdHJpbmdSZWYsIGNvbnN0IHZvaWQqLCBDRkRp
Y3Rpb25hcnlSZWYpCit7CisgICAgQVNTRVJUKG9ic2VydmVyKTsKKyAgICBXS1dlYlZpZXcgKndl
YlZpZXcgPSAoX19icmlkZ2UgV0tXZWJWaWV3ICopb2JzZXJ2ZXI7CisgICAgW3dlYlZpZXctPl9j
b250ZW50VmlldyBfaGFyZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWRdOworICAgIHdl
YlZpZXcuX3BhZ2UtPmhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2VkKEdTRXZlbnRJ
c0hhcmR3YXJlS2V5Ym9hcmRBdHRhY2hlZCgpKTsKK30KKyNlbmRpZgorCiAtICh2b2lkKV9pbml0
aWFsaXplV2l0aENvbmZpZ3VyYXRpb246KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1
cmF0aW9uCiB7CiAgICAgaWYgKCFjb25maWd1cmF0aW9uKQpAQCAtODU0LDcgKzYzNyw3IEBAIC0g
KGlkKXZhbHVlRm9yVW5kZWZpbmVkS2V5OihOU1N0cmluZyAqKWtleQogICAgIHJldHVybiBbc3Vw
ZXIgdmFsdWVGb3JVbmRlZmluZWRLZXk6a2V5XTsKIH0KIAotI3ByYWdtYSBtYXJrIC0gQVBJCisj
cHJhZ21hIG1hcmsgLSBtYWNPUy9pT1MgQVBJCiAKIC0gKFdLV2ViVmlld0NvbmZpZ3VyYXRpb24g
Kiljb25maWd1cmF0aW9uCiB7CkBAIC0xMTc1LDYgKzk1OCwzOSBAQCAtICh2b2lkKXRha2VTbmFw
c2hvdFdpdGhDb25maWd1cmF0aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90
Q29uZmlndQogfQogI2VuZGlmCiAKKy0gKHZvaWQpc2V0QWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0
aW9uR2VzdHVyZXM6KEJPT0wpYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMKK3sK
KyNpZiBQTEFURk9STShNQUMpCisgICAgX2ltcGwtPnNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdh
dGlvbkdlc3R1cmVzKGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzKTsKKyNlbGlm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKF9hbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRp
b25HZXN0dXJlcyA9PSBhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzID0g
YWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CisKKyAgICBpZiAoYWxsb3dzQmFj
a0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMgJiYgIV9nZXN0dXJlQ29udHJvbGxlcikgeworICAg
ICAgICBfZ2VzdHVyZUNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPFdlYktpdDo6Vmlld0dlc3R1cmVD
b250cm9sbGVyPigqX3BhZ2UpOworICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmluc3RhbGxT
d2lwZUhhbmRsZXIoc2VsZiwgW3NlbGYgc2Nyb2xsVmlld10pOworICAgICAgICBpZiAoV0tXZWJW
aWV3ICphbHRlcm5hdGVXZWJWaWV3ID0gW19jb25maWd1cmF0aW9uIF9hbHRlcm5hdGVXZWJWaWV3
Rm9yTmF2aWdhdGlvbkdlc3R1cmVzXSkKKyAgICAgICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+
c2V0QWx0ZXJuYXRlQmFja0ZvcndhcmRMaXN0U291cmNlUGFnZShhbHRlcm5hdGVXZWJWaWV3LT5f
cGFnZS5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKF9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAg
ICAgX2dlc3R1cmVDb250cm9sbGVyLT5zZXRTd2lwZUdlc3R1cmVFbmFibGVkKGFsbG93c0JhY2tG
b3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzKTsKKworICAgIF9wYWdlLT5zZXRTaG91bGRSZWNvcmRO
YXZpZ2F0aW9uU25hcHNob3RzKGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzKTsK
KyNlbmRpZgorfQorCistIChCT09MKWFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVz
Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBfaW1wbC0+YWxsb3dzQmFja0Zvcndh
cmROYXZpZ2F0aW9uR2VzdHVyZXMoKTsKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
cmV0dXJuIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKKyNlbmRpZgorfQor
CiAtIChOU1N0cmluZyAqKWN1c3RvbVVzZXJBZ2VudAogewogICAgIHJldHVybiBfcGFnZS0+Y3Vz
dG9tVXNlckFnZW50KCk7CkBAIC0xMjE1LDEzNCArMTAzMSwxNTUgQEAgLSAodm9pZClzZXRBbGxv
d3NMaW5rUHJldmlldzooQk9PTClhbGxvd3NMaW5rUHJldmlldwogI2VuZGlmIC8vIFBMQVRGT1JN
KElPU19GQU1JTFkpCiB9CiAKLXN0YXRpYyBOU1RleHRBbGlnbm1lbnQgbnNUZXh0QWxpZ25tZW50
KFdlYktpdDo6VGV4dEFsaWdubWVudCBhbGlnbm1lbnQpCistICh2b2lkKXNldFBhZ2Vab29tOihD
R0Zsb2F0KXBhZ2Vab29tCiB7Ci0gICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKLSAgICBjYXNlIFdl
YktpdDo6Tm9BbGlnbm1lbnQ6Ci0gICAgICAgIHJldHVybiBOU1RleHRBbGlnbm1lbnROYXR1cmFs
OwotICAgIGNhc2UgV2ViS2l0OjpMZWZ0QWxpZ25tZW50OgotICAgICAgICByZXR1cm4gTlNUZXh0
QWxpZ25tZW50TGVmdDsKLSAgICBjYXNlIFdlYktpdDo6UmlnaHRBbGlnbm1lbnQ6Ci0gICAgICAg
IHJldHVybiBOU1RleHRBbGlnbm1lbnRSaWdodDsKLSAgICBjYXNlIFdlYktpdDo6Q2VudGVyQWxp
Z25tZW50OgotICAgICAgICByZXR1cm4gTlNUZXh0QWxpZ25tZW50Q2VudGVyOwotICAgIGNhc2Ug
V2ViS2l0OjpKdXN0aWZpZWRBbGlnbm1lbnQ6Ci0gICAgICAgIHJldHVybiBOU1RleHRBbGlnbm1l
bnRKdXN0aWZpZWQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBOU1RleHRBbGlnbm1lbnROYXR1cmFsOworICAgIF9wYWdlLT5zZXRQYWdlWm9vbUZhY3Rvcihw
YWdlWm9vbSk7CiB9CiAKLXN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnlSZXByZXNlbnRh
dGlvbkZvckVkaXRvclN0YXRlKGNvbnN0IFdlYktpdDo6RWRpdG9yU3RhdGUmIHN0YXRlKQorLSAo
Q0dGbG9hdClwYWdlWm9vbQogewotICAgIGlmIChzdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0
YSkKLSAgICAgICAgcmV0dXJuIEB7IEAicG9zdC1sYXlvdXQtZGF0YSIgOiBATk8gfTsKLQotICAg
IGF1dG8mIHBvc3RMYXlvdXREYXRhID0gc3RhdGUucG9zdExheW91dERhdGEoKTsKLSAgICByZXR1
cm4gQHsKLSAgICAgICAgQCJwb3N0LWxheW91dC1kYXRhIiA6IEBZRVMsCi0gICAgICAgIEAiYm9s
ZCI6IHBvc3RMYXlvdXREYXRhLnR5cGluZ0F0dHJpYnV0ZXMgJiBXZWJLaXQ6OkF0dHJpYnV0ZUJv
bGQgPyBAWUVTIDogQE5PLAotICAgICAgICBAIml0YWxpYyI6IHBvc3RMYXlvdXREYXRhLnR5cGlu
Z0F0dHJpYnV0ZXMgJiBXZWJLaXQ6OkF0dHJpYnV0ZUl0YWxpY3MgPyBAWUVTIDogQE5PLAotICAg
ICAgICBAInVuZGVybGluZSI6IHBvc3RMYXlvdXREYXRhLnR5cGluZ0F0dHJpYnV0ZXMgJiBXZWJL
aXQ6OkF0dHJpYnV0ZVVuZGVybGluZSA/IEBZRVMgOiBATk8sCi0gICAgICAgIEAidGV4dC1hbGln
bm1lbnQiOiBAKG5zVGV4dEFsaWdubWVudChzdGF0aWNfY2FzdDxXZWJLaXQ6OlRleHRBbGlnbm1l
bnQ+KHBvc3RMYXlvdXREYXRhLnRleHRBbGlnbm1lbnQpKSksCi0gICAgICAgIEAidGV4dC1jb2xv
ciI6IChOU1N0cmluZyAqKXBvc3RMYXlvdXREYXRhLnRleHRDb2xvci5jc3NUZXh0KCkKLSAgICB9
OworICAgIHJldHVybiBfcGFnZS0+cGFnZVpvb21GYWN0b3IoKTsKIH0KIAotc3RhdGljIF9XS1Nl
bGVjdGlvbkF0dHJpYnV0ZXMgc2VsZWN0aW9uQXR0cmlidXRlcyhjb25zdCBXZWJLaXQ6OkVkaXRv
clN0YXRlJiBlZGl0b3JTdGF0ZSwgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBwcmV2aW91c0F0dHJp
YnV0ZXMpCitpbmxpbmUgV2ViS2l0OjpGaW5kT3B0aW9ucyB0b0ZpbmRPcHRpb25zKFdLRmluZENv
bmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgX1dLU2VsZWN0aW9uQXR0cmlidXRl
cyBhdHRyaWJ1dGVzID0gX1dLU2VsZWN0aW9uQXR0cmlidXRlTm9TZWxlY3Rpb247Ci0gICAgaWYg
KGVkaXRvclN0YXRlLnNlbGVjdGlvbklzTm9uZSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7
Ci0KLSAgICBpZiAoZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSkKLSAgICAgICAgYXR0cmli
dXRlcyB8PSBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVJc1JhbmdlOwotICAgIGVsc2UKLSAgICAgICAg
YXR0cmlidXRlcyB8PSBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVJc0NhcmV0OworICAgIHVuc2lnbmVk
IGZpbmRPcHRpb25zID0gMDsKIAotICAgIGlmICghZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExh
eW91dERhdGEpIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoZWRpdG9y
U3RhdGUucG9zdExheW91dERhdGEoKS5hdFN0YXJ0T2ZTZW50ZW5jZSkKLSAgICAgICAgICAgIGF0
dHJpYnV0ZXMgfD0gX1dLU2VsZWN0aW9uQXR0cmlidXRlQXRTdGFydE9mU2VudGVuY2U7Ci0jZW5k
aWYKLSAgICB9IGVsc2UgaWYgKHByZXZpb3VzQXR0cmlidXRlcyAmIF9XS1NlbGVjdGlvbkF0dHJp
YnV0ZUF0U3RhcnRPZlNlbnRlbmNlKQotICAgICAgICBhdHRyaWJ1dGVzIHw9IF9XS1NlbGVjdGlv
bkF0dHJpYnV0ZUF0U3RhcnRPZlNlbnRlbmNlOworICAgIGlmICghY29uZmlndXJhdGlvbi5jYXNl
U2Vuc2l0aXZlKQorICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQ2Fz
ZUluc2Vuc2l0aXZlOworICAgIGlmIChjb25maWd1cmF0aW9uLmJhY2t3YXJkcykKKyAgICAgICAg
ZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0JhY2t3YXJkczsKKyAgICBpZiAoY29u
ZmlndXJhdGlvbi53cmFwcykKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0
aW9uc1dyYXBBcm91bmQ7CiAKLSAgICByZXR1cm4gYXR0cmlidXRlczsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViS2l0OjpGaW5kT3B0aW9ucz4oZmluZE9wdGlvbnMpOwogfQogCi0tICh2b2lk
KV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQorLSAodm9pZClmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZyB3aXRoQ29uZmlndXJhdGlvbjooV0tGaW5kQ29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRp
b24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLRmluZFJlc3VsdCAqcmVzdWx0KSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIGF1dG8gbmV3U2VsZWN0aW9uQXR0cmlidXRlcyA9IHNlbGVj
dGlvbkF0dHJpYnV0ZXMoX3BhZ2UtPmVkaXRvclN0YXRlKCksIF9zZWxlY3Rpb25BdHRyaWJ1dGVz
KTsKLSAgICBpZiAoX3NlbGVjdGlvbkF0dHJpYnV0ZXMgIT0gbmV3U2VsZWN0aW9uQXR0cmlidXRl
cykgewotICAgICAgICBOU1N0cmluZyAqc2VsZWN0aW9uQXR0cmlidXRlc0tleSA9IE5TU3RyaW5n
RnJvbVNlbGVjdG9yKEBzZWxlY3Rvcihfc2VsZWN0aW9uQXR0cmlidXRlcykpOwotICAgICAgICBb
c2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6c2VsZWN0aW9uQXR0cmlidXRlc0tleV07Ci0gICAg
ICAgIF9zZWxlY3Rpb25BdHRyaWJ1dGVzID0gbmV3U2VsZWN0aW9uQXR0cmlidXRlczsKLSAgICAg
ICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6c2VsZWN0aW9uQXR0cmlidXRlc0tleV07Cisg
ICAgaWYgKCFzdHJpbmcubGVuZ3RoKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtbW1dL
RmluZFJlc3VsdCBhbGxvY10gX2luaXRXaXRoTWF0Y2hGb3VuZDpOT10gYXV0b3JlbGVhc2VdKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZWl0aGVy
IHJlbmFtZSAtX3dlYlZpZXc6ZWRpdG9yU3RhdGVEaWRDaGFuZ2U6IHRvIGNsYXJpZnkgdGhhdCBp
dCdzIG9ubHkgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHRlc3RpbmcsCi0gICAgLy8gb3IgcmVtb3Zl
IGl0IGVudGlyZWx5IGFuZCB1c2UgLV93ZWJWaWV3OmRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOiBp
bnN0ZWFkIG9uY2UgdGV4dCBhbGlnbm1lbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBzZXQgb2YKLSAg
ICAvLyBmb250IGF0dHJpYnV0ZXMuCi0gICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVs
ZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KXNlbGYuVUlEZWxlZ2F0ZTsKLSAgICBp
ZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzplZGl0
b3JTdGF0ZURpZENoYW5nZTopXSkKLSAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6c2VsZiBl
ZGl0b3JTdGF0ZURpZENoYW5nZTpkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25Gb3JFZGl0b3JTdGF0
ZShfcGFnZS0+ZWRpdG9yU3RhdGUoKSldOworICAgIF9wYWdlLT5maW5kU3RyaW5nKHN0cmluZywg
dG9GaW5kT3B0aW9ucyhjb25maWd1cmF0aW9uKSwgMSwgW2hhbmRsZXIgPSBtYWtlQmxvY2tQdHIo
Y29tcGxldGlvbkhhbmRsZXIpXShib29sIGZvdW5kLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJy
b3IgZXJyb3IpIHsKKyAgICAgICAgaGFuZGxlcihbW1tXS0ZpbmRSZXN1bHQgYWxsb2NdIF9pbml0
V2l0aE1hdGNoRm91bmQ6KGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9u
ZSAmJiBmb3VuZCldIGF1dG9yZWxlYXNlXSk7CisgICAgfSk7CiB9CiAKLS0gKF9XS1NlbGVjdGlv
bkF0dHJpYnV0ZXMpX3NlbGVjdGlvbkF0dHJpYnV0ZXMKKysgKEJPT0wpaGFuZGxlc1VSTFNjaGVt
ZTooTlNTdHJpbmcgKil1cmxTY2hlbWUKIHsKLSAgICByZXR1cm4gX3NlbGVjdGlvbkF0dHJpYnV0
ZXM7CisgICAgcmV0dXJuIFdlYkNvcmU6OkxlZ2FjeVNjaGVtZVJlZ2lzdHJ5Ojppc0J1aWx0aW5T
Y2hlbWUodXJsU2NoZW1lKTsKIH0KIAotLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6
KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0aW9uSGFu
ZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNh
ZmVMb2FkLCBVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKXNldE1lZGlhVHlw
ZTooTlNTdHJpbmcgKiltZWRpYVN0eWxlCiB7Ci0gICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBh
ZG9wdE5TKFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYu
Ym91bmRzIHNhZmVCcm93c2luZ1dhcm5pbmc6d2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjpbd2Vh
a1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7Ci0gICAgICAgIGF1dG8g
c3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOwotICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJvb2wgbmF2aWdhdGVzRnJhbWUgPSBXVEY6OnN3
aXRjaE9uKHJlc3VsdCwKLSAgICAgICAgICAgIFtdIChXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZCBjb250aW51ZVVuc2FmZUxvYWQpIHsgcmV0dXJuIGNvbnRpbnVlVW5zYWZlTG9hZCA9PSBXZWJL
aXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzOyB9LAotICAgICAgICAgICAgW10gKGNvbnN0IFVS
TCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgKTsKLSAgICAgICAgYm9vbCBmb3JNYWluRnJh
bWVOYXZpZ2F0aW9uID0gW3N0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nIGZvck1haW5G
cmFtZU5hdmlnYXRpb25dOwotICAgICAgICBpZiAobmF2aWdhdGVzRnJhbWUgJiYgZm9yTWFpbkZy
YW1lTmF2aWdhdGlvbikgewotICAgICAgICAgICAgLy8gVGhlIHNhZmUgYnJvd3Npbmcgd2Fybmlu
ZyB3aWxsIGJlIGhpZGRlbiBvbmNlIHRoZSBuZXh0IHBhZ2UgaXMgc2hvd24uCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYXZpZ2F0ZXNGcmFtZSAmJiBzdHJv
bmdTZWxmLT5fc2FmZUJyb3dzaW5nV2FybmluZyAmJiAhZm9yTWFpbkZyYW1lTmF2aWdhdGlvbikg
ewotICAgICAgICAgICAgc3Ryb25nU2VsZi0+X3BhZ2UtPmdvQmFjaygpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFtzdGQ6OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9z
YWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICB9
XSk7Ci0gICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKV07Cisg
ICAgX3BhZ2UtPnNldE92ZXJyaWRkZW5NZWRpYVR5cGUobWVkaWFTdHlsZSk7CiB9CiAKLS0gKHZv
aWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworLSAoTlNTdHJpbmcgKiltZWRpYVR5cGUKIHsK
LSAgICBbc3RkOjpleGNoYW5nZShfc2FmZUJyb3dzaW5nV2FybmluZywgbnVsbHB0cikgcmVtb3Zl
RnJvbVN1cGVydmlld107CisgICAgcmV0dXJuIF9wYWdlLT5vdmVycmlkZGVuTWVkaWFUeXBlKCku
aXNOdWxsKCkgPyBuaWwgOiAoTlNTdHJpbmcgKilfcGFnZS0+b3ZlcnJpZGRlbk1lZGlhVHlwZSgp
OwogfQogCi0tICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmdJZkZvck1haW5GcmFtZU5h
dmlnYXRpb24KLXsKLSAgICBpZiAoW19zYWZlQnJvd3NpbmdXYXJuaW5nIGZvck1haW5GcmFtZU5h
dmlnYXRpb25dKQotICAgICAgICBbc2VsZiBfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nXTsKLX0K
KyNwcmFnbWEgbWFyayAtIGlPUyBBUEkKIAotLSAodm9pZClfaW50ZXJuYWxEb0FmdGVyTmV4dFBy
ZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgd2l0aG91dFdhaXRp
bmdGb3JQYWludGluZzooQk9PTCl3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nIHdpdGhvdXRXYWl0
aW5nRm9yQW5pbWF0ZWRSZXNpemU6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6
ZQotewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRh
cmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
CistIChVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgcmV0dXJuIF9zY3JvbGxWaWV3
LmdldCgpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLSAgICBpZiAod2l0
aG91dFdhaXRpbmdGb3JQYWludGluZykKLSAgICAgICAgX3BhZ2UtPnNldFNob3VsZFNraXBXYWl0
aW5nRm9yUGFpbnRBZnRlck5leHRWaWV3RGlkTW92ZVRvV2luZG93KHRydWUpOworI3ByYWdtYSBt
YXJrIC0gbWFjT1MgQVBJCiAKLSAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0
cih1cGRhdGVCbG9jayk7CisjaWYgUExBVEZPUk0oTUFDKQorCistICh2b2lkKXNldEFsbG93c01h
Z25pZmljYXRpb246KEJPT0wpYWxsb3dzTWFnbmlmaWNhdGlvbgoreworICAgIF9pbXBsLT5zZXRB
bGxvd3NNYWduaWZpY2F0aW9uKGFsbG93c01hZ25pZmljYXRpb24pOworfQorCistIChCT09MKWFs
bG93c01hZ25pZmljYXRpb24KK3sKKyAgICByZXR1cm4gX2ltcGwtPmFsbG93c01hZ25pZmljYXRp
b24oKTsKK30KKworLSAodm9pZClzZXRNYWduaWZpY2F0aW9uOihkb3VibGUpbWFnbmlmaWNhdGlv
biBjZW50ZXJlZEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBfaW1wbC0+c2V0TWFnbmlm
aWNhdGlvbihtYWduaWZpY2F0aW9uLCBOU1BvaW50VG9DR1BvaW50KHBvaW50KSk7Cit9CisKKy0g
KHZvaWQpc2V0TWFnbmlmaWNhdGlvbjooZG91YmxlKW1hZ25pZmljYXRpb24KK3sKKyAgICBfaW1w
bC0+c2V0TWFnbmlmaWNhdGlvbihtYWduaWZpY2F0aW9uKTsKK30KKworLSAoZG91YmxlKW1hZ25p
ZmljYXRpb24KK3sKKyAgICByZXR1cm4gX2ltcGwtPm1hZ25pZmljYXRpb24oKTsKK30KKworLSAo
TlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludElu
Zm8gKilwcmludEluZm8KK3sKKyAgICBpZiAoYXV0byB3ZWJGcmFtZVByb3h5ID0gX3BhZ2UtPm1h
aW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gX2ltcGwtPnByaW50T3BlcmF0aW9uV2l0aFByaW50
SW5mbyhwcmludEluZm8sICp3ZWJGcmFtZVByb3h5KTsKKyAgICByZXR1cm4gbmlsOworfQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjcHJhZ21hIG1hcmsgLSBtYWNPUy9pT1MgaW50ZXJu
YWwKKworLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2Fm
ZUJyb3dzaW5nV2FybmluZyYpd2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBVUkw+JiYpPiYm
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBhZG9wdE5T
KFtbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYuYm91bmRz
IHNhZmVCcm93c2luZ1dhcm5pbmc6d2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIGF1dG8gc3Ryb25n
U2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGJvb2wgbmF2aWdhdGVzRnJhbWUgPSBXVEY6OnN3aXRjaE9u
KHJlc3VsdCwKKyAgICAgICAgICAgIFtdIChXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCBjb250
aW51ZVVuc2FmZUxvYWQpIHsgcmV0dXJuIGNvbnRpbnVlVW5zYWZlTG9hZCA9PSBXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZDo6WWVzOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IFVSTCYpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICAgICAgKTsKKyAgICAgICAgYm9vbCBmb3JNYWluRnJhbWVOYXZp
Z2F0aW9uID0gW3N0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nIGZvck1haW5GcmFtZU5h
dmlnYXRpb25dOworICAgICAgICBpZiAobmF2aWdhdGVzRnJhbWUgJiYgZm9yTWFpbkZyYW1lTmF2
aWdhdGlvbikgeworICAgICAgICAgICAgLy8gVGhlIHNhZmUgYnJvd3Npbmcgd2FybmluZyB3aWxs
IGJlIGhpZGRlbiBvbmNlIHRoZSBuZXh0IHBhZ2UgaXMgc2hvd24uCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFuYXZpZ2F0ZXNGcmFtZSAmJiBzdHJvbmdTZWxm
LT5fc2FmZUJyb3dzaW5nV2FybmluZyAmJiAhZm9yTWFpbkZyYW1lTmF2aWdhdGlvbikgeworICAg
ICAgICAgICAgc3Ryb25nU2VsZi0+X3BhZ2UtPmdvQmFjaygpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIFtzdGQ6OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJv
d3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICB9XSk7Cisg
ICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKV07Cit9CisKKy0g
KHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAgIFtzdGQ6OmV4Y2hhbmdlKF9z
YWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKK30KKwor
LSAodm9pZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9u
Cit7CisgICAgaWYgKFtfc2FmZUJyb3dzaW5nV2FybmluZyBmb3JNYWluRnJhbWVOYXZpZ2F0aW9u
XSkKKyAgICAgICAgW3NlbGYgX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZ107Cit9CisKKy0gKHZv
aWQpX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQp
KXVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmc6KEJPT0wpd2l0aG91dFdhaXRp
bmdGb3JQYWludGluZyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOihCT09MKXdpdGhv
dXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmcpCisgICAgICAgIF9wYWdlLT5zZXRTaG91bGRTa2lwV2FpdGluZ0ZvclBhaW50QWZ0ZXJO
ZXh0Vmlld0RpZE1vdmVUb1dpbmRvdyh0cnVlKTsKKworICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5
ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsKIAogICAgIFJldGFpblB0cjxXS1dlYlZpZXc+
IHN0cm9uZ1NlbGYgPSBzZWxmOwogICAgIF9wYWdlLT5jYWxsQWZ0ZXJOZXh0UHJlc2VudGF0aW9u
VXBkYXRlKFt1cGRhdGVCbG9ja0NvcHksIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUs
IHN0cm9uZ1NlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewpAQCAtMTM5
MCw4ICsxMjI3LDYgQEAgLSAodm9pZClfZGlkSW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50OihB
UEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQKIAogI2VuZGlmIC8vIEVOQUJMRShBVFRBQ0hNRU5U
X0VMRU1FTlQpCiAKLSNwcmFnbWEgbWFyayAtIG1hY09TL2lPUyBpbXBsZW1lbnRhdGlvbiBtZXRo
b2RzCi0KIC0gKFdLUGFnZVJlZilfcGFnZUZvclRlc3RpbmcKIHsKICAgICByZXR1cm4gdG9BUEko
X3BhZ2UuZ2V0KCkpOwpAQCAtMTQwOCwxMSArMTI0Myw2IEBAIC0gKGlkIDxXS1VSTFNjaGVtZUhh
bmRsZXI+KXVybFNjaGVtZUhhbmRsZXJGb3JVUkxTY2hlbWU6KE5TU3RyaW5nICopdXJsU2NoZW1l
CiAgICAgcmV0dXJuIGhhbmRsZXIgPyBoYW5kbGVyLT5hcGlIYW5kbGVyKCkgOiBuaWw7CiB9CiAK
LSsgKEJPT0wpaGFuZGxlc1VSTFNjaGVtZTooTlNTdHJpbmcgKil1cmxTY2hlbWUKLXsKLSAgICBy
ZXR1cm4gV2ViQ29yZTo6TGVnYWN5U2NoZW1lUmVnaXN0cnk6OmlzQnVpbHRpblNjaGVtZSh1cmxT
Y2hlbWUpOwotfQotCiAtIChPcHRpb25hbDxCT09MPilfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJ
bW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZwogewogICAgIHJldHVybiBfcmVzb2x1dGlvbkZv
clNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKQEAgLTE0NTgsNTk3MiAr
MTI4OCwxNDc4IEBAIC0gKHZvaWQpY3JlYXRlV2ViQXJjaGl2ZURhdGFXaXRoQ29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopCiAgICAgfSk7CiB9CiAKLWlubGlu
ZSBXZWJLaXQ6OkZpbmRPcHRpb25zIHRvRmluZE9wdGlvbnMoV0tGaW5kQ29uZmlndXJhdGlvbiAq
Y29uZmlndXJhdGlvbikKK3N0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnlSZXByZXNlbnRh
dGlvbkZvckVkaXRvclN0YXRlKGNvbnN0IFdlYktpdDo6RWRpdG9yU3RhdGUmIHN0YXRlKQogewot
ICAgIHVuc2lnbmVkIGZpbmRPcHRpb25zID0gMDsKLQotICAgIGlmICghY29uZmlndXJhdGlvbi5j
YXNlU2Vuc2l0aXZlKQotICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlOwotICAgIGlmIChjb25maWd1cmF0aW9uLmJhY2t3YXJkcykKLSAgICAg
ICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0JhY2t3YXJkczsKLSAgICBpZiAo
Y29uZmlndXJhdGlvbi53cmFwcykKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5k
T3B0aW9uc1dyYXBBcm91bmQ7CisgICAgaWYgKHN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRh
KQorICAgICAgICByZXR1cm4gQHsgQCJwb3N0LWxheW91dC1kYXRhIiA6IEBOTyB9OwogCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZE9wdGlvbnM+KGZpbmRPcHRpb25zKTsKKyAg
ICBhdXRvJiBwb3N0TGF5b3V0RGF0YSA9IHN0YXRlLnBvc3RMYXlvdXREYXRhKCk7CisgICAgcmV0
dXJuIEB7CisgICAgICAgIEAicG9zdC1sYXlvdXQtZGF0YSIgOiBAWUVTLAorICAgICAgICBAImJv
bGQiOiBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzICYgV2ViS2l0OjpBdHRyaWJ1dGVC
b2xkID8gQFlFUyA6IEBOTywKKyAgICAgICAgQCJpdGFsaWMiOiBwb3N0TGF5b3V0RGF0YS50eXBp
bmdBdHRyaWJ1dGVzICYgV2ViS2l0OjpBdHRyaWJ1dGVJdGFsaWNzID8gQFlFUyA6IEBOTywKKyAg
ICAgICAgQCJ1bmRlcmxpbmUiOiBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzICYgV2Vi
S2l0OjpBdHRyaWJ1dGVVbmRlcmxpbmUgPyBAWUVTIDogQE5PLAorICAgICAgICBAInRleHQtYWxp
Z25tZW50IjogQChuc1RleHRBbGlnbm1lbnQoc3RhdGljX2Nhc3Q8V2ViS2l0OjpUZXh0QWxpZ25t
ZW50Pihwb3N0TGF5b3V0RGF0YS50ZXh0QWxpZ25tZW50KSkpLAorICAgICAgICBAInRleHQtY29s
b3IiOiAoTlNTdHJpbmcgKilwb3N0TGF5b3V0RGF0YS50ZXh0Q29sb3IuY3NzVGV4dCgpCisgICAg
fTsKIH0KIAotLSAodm9pZClmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB3aXRoQ29uZmln
dXJhdGlvbjooV0tGaW5kQ29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKFdLRmluZFJlc3VsdCAqcmVzdWx0KSljb21wbGV0aW9uSGFuZGxlcgor
c3RhdGljIE5TVGV4dEFsaWdubWVudCBuc1RleHRBbGlnbm1lbnQoV2ViS2l0OjpUZXh0QWxpZ25t
ZW50IGFsaWdubWVudCkKIHsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgpIHsKLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoW1tbV0tGaW5kUmVzdWx0IGFsbG9jXSBfaW5pdFdpdGhNYXRjaEZvdW5k
Ok5PXSBhdXRvcmVsZWFzZV0pOwotICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChhbGlnbm1l
bnQpIHsKKyAgICBjYXNlIFdlYktpdDo6Tm9BbGlnbm1lbnQ6CisgICAgICAgIHJldHVybiBOU1Rl
eHRBbGlnbm1lbnROYXR1cmFsOworICAgIGNhc2UgV2ViS2l0OjpMZWZ0QWxpZ25tZW50OgorICAg
ICAgICByZXR1cm4gTlNUZXh0QWxpZ25tZW50TGVmdDsKKyAgICBjYXNlIFdlYktpdDo6UmlnaHRB
bGlnbm1lbnQ6CisgICAgICAgIHJldHVybiBOU1RleHRBbGlnbm1lbnRSaWdodDsKKyAgICBjYXNl
IFdlYktpdDo6Q2VudGVyQWxpZ25tZW50OgorICAgICAgICByZXR1cm4gTlNUZXh0QWxpZ25tZW50
Q2VudGVyOworICAgIGNhc2UgV2ViS2l0OjpKdXN0aWZpZWRBbGlnbm1lbnQ6CisgICAgICAgIHJl
dHVybiBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CiAgICAgfQotCi0gICAgX3BhZ2UtPmZpbmRT
dHJpbmcoc3RyaW5nLCB0b0ZpbmRPcHRpb25zKGNvbmZpZ3VyYXRpb24pLCAxLCBbaGFuZGxlciA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgZm91bmQsIFdlYktpdDo6Q2Fs
bGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAgICAgICBoYW5kbGVyKFtbW1dLRmluZFJlc3Vs
dCBhbGxvY10gX2luaXRXaXRoTWF0Y2hGb3VuZDooZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yOjpOb25lICYmIGZvdW5kKV0gYXV0b3JlbGVhc2VdKTsKLSAgICB9KTsKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTlNUZXh0QWxpZ25tZW50TmF0dXJhbDsK
IH0KIAotLSAodm9pZClzZXRNZWRpYVR5cGU6KE5TU3RyaW5nICopbWVkaWFTdHlsZQorc3RhdGlj
IF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMgc2VsZWN0aW9uQXR0cmlidXRlcyhjb25zdCBXZWJLaXQ6
OkVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSwgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBwcmV2aW91
c0F0dHJpYnV0ZXMpCiB7Ci0gICAgX3BhZ2UtPnNldE92ZXJyaWRkZW5NZWRpYVR5cGUobWVkaWFT
dHlsZSk7Ci19CisgICAgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gX1dLU2Vs
ZWN0aW9uQXR0cmlidXRlTm9TZWxlY3Rpb247CisgICAgaWYgKGVkaXRvclN0YXRlLnNlbGVjdGlv
bklzTm9uZSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiAKLS0gKE5TU3RyaW5nICopbWVk
aWFUeXBlCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5vdmVycmlkZGVuTWVkaWFUeXBlKCkuaXNOdWxs
KCkgPyBuaWwgOiAoTlNTdHJpbmcgKilfcGFnZS0+b3ZlcnJpZGRlbk1lZGlhVHlwZSgpOwotfQor
ICAgIGlmIChlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlKQorICAgICAgICBhdHRyaWJ1dGVz
IHw9IF9XS1NlbGVjdGlvbkF0dHJpYnV0ZUlzUmFuZ2U7CisgICAgZWxzZQorICAgICAgICBhdHRy
aWJ1dGVzIHw9IF9XS1NlbGVjdGlvbkF0dHJpYnV0ZUlzQ2FyZXQ7CiAKKyAgICBpZiAoIWVkaXRv
clN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICAgICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuYXRTdGFydE9mU2Vu
dGVuY2UpCisgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IF9XS1NlbGVjdGlvbkF0dHJpYnV0ZUF0
U3RhcnRPZlNlbnRlbmNlOworI2VuZGlmCisgICAgfSBlbHNlIGlmIChwcmV2aW91c0F0dHJpYnV0
ZXMgJiBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVBdFN0YXJ0T2ZTZW50ZW5jZSkKKyAgICAgICAgYXR0
cmlidXRlcyB8PSBfV0tTZWxlY3Rpb25BdHRyaWJ1dGVBdFN0YXJ0T2ZTZW50ZW5jZTsKIAotI3By
YWdtYSBtYXJrIC0gVUlWaWV3IG92ZXJyaWRlcwotCi0tICh2b2lkKXNldEZyYW1lOihDR1JlY3Qp
ZnJhbWUKLXsKLSAgICBDR1JlY3Qgb2xkRnJhbWUgPSBzZWxmLmZyYW1lOwotICAgIFtzdXBlciBz
ZXRGcmFtZTpmcmFtZV07Ci0KLSAgICBpZiAoIUNHU2l6ZUVxdWFsVG9TaXplKG9sZEZyYW1lLnNp
emUsIGZyYW1lLnNpemUpKQotICAgICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwor
ICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCi0tICh2b2lkKXNldEJvdW5kczooQ0dSZWN0KWJv
dW5kcworLSAodm9pZClfZGlkQ2hhbmdlRWRpdG9yU3RhdGUKIHsKLSAgICBDR1JlY3Qgb2xkQm91
bmRzID0gc2VsZi5ib3VuZHM7Ci0gICAgW3N1cGVyIHNldEJvdW5kczpib3VuZHNdOwotICAgIFtf
Y3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcgc2V0RnJhbWU6c2VsZi5ib3VuZHNdOworICAg
IGF1dG8gbmV3U2VsZWN0aW9uQXR0cmlidXRlcyA9IHNlbGVjdGlvbkF0dHJpYnV0ZXMoX3BhZ2Ut
PmVkaXRvclN0YXRlKCksIF9zZWxlY3Rpb25BdHRyaWJ1dGVzKTsKKyAgICBpZiAoX3NlbGVjdGlv
bkF0dHJpYnV0ZXMgIT0gbmV3U2VsZWN0aW9uQXR0cmlidXRlcykgeworICAgICAgICBOU1N0cmlu
ZyAqc2VsZWN0aW9uQXR0cmlidXRlc0tleSA9IE5TU3RyaW5nRnJvbVNlbGVjdG9yKEBzZWxlY3Rv
cihfc2VsZWN0aW9uQXR0cmlidXRlcykpOworICAgICAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVG
b3JLZXk6c2VsZWN0aW9uQXR0cmlidXRlc0tleV07CisgICAgICAgIF9zZWxlY3Rpb25BdHRyaWJ1
dGVzID0gbmV3U2VsZWN0aW9uQXR0cmlidXRlczsKKyAgICAgICAgW3NlbGYgZGlkQ2hhbmdlVmFs
dWVGb3JLZXk6c2VsZWN0aW9uQXR0cmlidXRlc0tleV07CisgICAgfQogCi0gICAgaWYgKCFDR1Np
emVFcXVhbFRvU2l6ZShvbGRCb3VuZHMuc2l6ZSwgYm91bmRzLnNpemUpKQotICAgICAgICBbc2Vs
ZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZWl0aGVy
IHJlbmFtZSAtX3dlYlZpZXc6ZWRpdG9yU3RhdGVEaWRDaGFuZ2U6IHRvIGNsYXJpZnkgdGhhdCBp
dCdzIG9ubHkgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHRlc3RpbmcsCisgICAgLy8gb3IgcmVtb3Zl
IGl0IGVudGlyZWx5IGFuZCB1c2UgLV93ZWJWaWV3OmRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOiBp
bnN0ZWFkIG9uY2UgdGV4dCBhbGlnbm1lbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBzZXQgb2YKKyAg
ICAvLyBmb250IGF0dHJpYnV0ZXMuCisgICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVs
ZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KXNlbGYuVUlEZWxlZ2F0ZTsKKyAgICBp
ZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzplZGl0
b3JTdGF0ZURpZENoYW5nZTopXSkKKyAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6c2VsZiBl
ZGl0b3JTdGF0ZURpZENoYW5nZTpkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25Gb3JFZGl0b3JTdGF0
ZShfcGFnZS0+ZWRpdG9yU3RhdGUoKSldOwogfQogCi0tICh2b2lkKWxheW91dFN1YnZpZXdzCi17
Ci0gICAgW19zYWZlQnJvd3NpbmdXYXJuaW5nIHNldEZyYW1lOnNlbGYuYm91bmRzXTsKLSAgICBb
c3VwZXIgbGF5b3V0U3Vidmlld3NdOwotICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07
Ci19CitAZW5kCiAKLS0gKFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICByZXR1cm4g
X3Njcm9sbFZpZXcuZ2V0KCk7Ci19CisjcHJhZ21hIG1hcmsgLQogCi0jcHJhZ21hIG1hcmsgLSBp
T1MgaW1wbGVtZW50YXRpb24gbWV0aG9kcworQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tQ
cml2YXRlKQogCi0tIChCT09MKV9pc1Nob3dpbmdWaWRlb1BpY3R1cmVJblBpY3R1cmUKLXsKLSNp
ZiAhSEFWRShBVktJVCkKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIGlmICghX3BhZ2Ug
fHwgIV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyNwcmFnbWEgbWFyayAtIG1hY09TIFdLUHJpdmF0ZQogCi0gICAgcmV0dXJuIF9wYWdlLT52
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPmhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7Ci0jZW5kaWYKLX0K
KyNpZiBQTEFURk9STShNQUMpCiAKLS0gKEJPT0wpX21heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9Q
aWN0dXJlSW5QaWN0dXJlCi17Ci0jaWYgIUhBVkUoQVZLSVQpCi0gICAgcmV0dXJuIGZhbHNlOwot
I2Vsc2UKLSAgICBpZiAoIV9wYWdlIHx8ICFfcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisjZGVmaW5lIFdFQkNPUkVfUFJJVkFURV9DT01NQU5E
KGNvbW1hbmQpIC0gKHZvaWQpXyMjY29tbWFuZDooaWQpc2VuZGVyIHsgX3BhZ2UtPmV4ZWN1dGVF
ZGl0Q29tbWFuZCgjY29tbWFuZCAjIyBfcyk7IH0KIAotICAgIHJldHVybiBfcGFnZS0+dmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpLT5tYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGlj
dHVyZSgpOwotI2VuZGlmCi19CitXRUJDT1JFX1BSSVZBVEVfQ09NTUFORChhbGlnbkNlbnRlcikK
K1dFQkNPUkVfUFJJVkFURV9DT01NQU5EKGFsaWduSnVzdGlmaWVkKQorV0VCQ09SRV9QUklWQVRF
X0NPTU1BTkQoYWxpZ25MZWZ0KQorV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoYWxpZ25SaWdodCkK
K1dFQkNPUkVfUFJJVkFURV9DT01NQU5EKGluc2VydE9yZGVyZWRMaXN0KQorV0VCQ09SRV9QUklW
QVRFX0NPTU1BTkQoaW5zZXJ0VW5vcmRlcmVkTGlzdCkKK1dFQkNPUkVfUFJJVkFURV9DT01NQU5E
KGluc2VydE5lc3RlZE9yZGVyZWRMaXN0KQorV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoaW5zZXJ0
TmVzdGVkVW5vcmRlcmVkTGlzdCkKK1dFQkNPUkVfUFJJVkFURV9DT01NQU5EKGluZGVudCkKK1dF
QkNPUkVfUFJJVkFURV9DT01NQU5EKG91dGRlbnQpCitXRUJDT1JFX1BSSVZBVEVfQ09NTUFORChw
YXN0ZUFzUXVvdGF0aW9uKQorV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQocGFzdGVBbmRNYXRjaFN0
eWxlKQogCi0tICh2b2lkKV9pbmNyZW1lbnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50Ci17Ci0gICAg
KytfZm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKLX0KKyN1bmRlZiBXRUJDT1JFX1BSSVZBVEVfQ09N
TUFORAogCi0tICh2b2lkKV9kZWNyZW1lbnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50CistICh2b2lk
KV90b2dnbGVTdHJpa2VUaHJvdWdoOihpZClzZW5kZXIKIHsKLSAgICBpZiAoX2ZvY3VzUHJlc2Vy
dmF0aW9uQ291bnQpCi0gICAgICAgIC0tX2ZvY3VzUHJlc2VydmF0aW9uQ291bnQ7CisgICAgX3Bh
Z2UtPmV4ZWN1dGVFZGl0Q29tbWFuZCgic3RyaWtldGhyb3VnaCJfcyk7CiB9CiAKLS0gKHZvaWQp
X3Jlc2V0Rm9jdXNQcmVzZXJ2YXRpb25Db3VudAorLSAodm9pZClfaW5jcmVhc2VMaXN0TGV2ZWw6
KGlkKXNlbmRlcgogewotICAgIF9mb2N1c1ByZXNlcnZhdGlvbkNvdW50ID0gMDsKKyAgICBfcGFn
ZS0+aW5jcmVhc2VMaXN0TGV2ZWwoKTsKIH0KIAotLSAoQk9PTClfaXNSZXRhaW5pbmdBY3RpdmVG
b2N1c2VkU3RhdGUKKy0gKHZvaWQpX2RlY3JlYXNlTGlzdExldmVsOihpZClzZW5kZXIKIHsKLSAg
ICAvLyBGb2N1cyBwcmVzZXJ2YXRpb24gY291bnQgZnVsZmlsbHMgdGhlIHNhbWUgcm9sZSBhcyBh
Y3RpdmUgZm9jdXMgc3RhdGUgY291bnQuCi0gICAgLy8gSG93ZXZlciwgdW5saWtlIGFjdGl2ZSBm
b2N1cyBzdGF0ZSwgaXQgbWF5IGJlIHJlc2V0IHRvIDAgd2l0aG91dCBpbXBhY3RpbmcgdGhlCi0g
ICAgLy8gYmVoYXZpb3Igb2YgLV9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGUsIGFuZCBpdCdzIGhh
cm1sZXNzIHRvIGludm9rZQotICAgIC8vIC1fZGVjcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3Vu
dCBhZnRlciByZXNldHRpbmcgdGhlIGNvdW50IHRvIDAuCi0gICAgcmV0dXJuIF9mb2N1c1ByZXNl
cnZhdGlvbkNvdW50IHx8IF9hY3RpdmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKKyAgICBfcGFn
ZS0+ZGVjcmVhc2VMaXN0TGV2ZWwoKTsKIH0KIAotLSAoQk9PTClfZWZmZWN0aXZlQXBwZWFyYW5j
ZUlzRGFyaworLSAodm9pZClfY2hhbmdlTGlzdFR5cGU6KGlkKXNlbmRlcgogewotICAgIHJldHVy
biBzZWxmLnRyYWl0Q29sbGVjdGlvbi51c2VySW50ZXJmYWNlU3R5bGUgPT0gVUlVc2VySW50ZXJm
YWNlU3R5bGVEYXJrOworICAgIF9wYWdlLT5jaGFuZ2VMaXN0VHlwZSgpOwogfQogCi0tIChCT09M
KV9lZmZlY3RpdmVVc2VySW50ZXJmYWNlTGV2ZWxJc0VsZXZhdGVkCi17Ci0jaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkgJiYgIVBMQVRGT1JNKFdBVENIT1MpCi0gICAgcmV0dXJuIHNlbGYu
dHJhaXRDb2xsZWN0aW9uLnVzZXJJbnRlcmZhY2VMZXZlbCA9PSBVSVVzZXJJbnRlcmZhY2VMZXZl
bEVsZXZhdGVkOwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYKLX0KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCiAKLS0gKEJPT0wpX3Nob3VsZEF2b2lkUmVzaXppbmdXaGVuSW5wdXRWaWV3
Qm91bmRzQ2hhbmdlCi17Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX3Nob3VsZEF2b2lkUmVz
aXppbmdXaGVuSW5wdXRWaWV3Qm91bmRzQ2hhbmdlXTsKLX0KKyNwcmFnbWEgbWFyayAtIGlPUyBX
S1ByaXZhdGUKIAotLSAoX1dLRHJhZ0ludGVyYWN0aW9uUG9saWN5KV9kcmFnSW50ZXJhY3Rpb25Q
b2xpY3kKLXsKLSAgICByZXR1cm4gX2RyYWdJbnRlcmFjdGlvblBvbGljeTsKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorCisjZGVmaW5lIEZPUldBUkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVco
X2FjdGlvbikgXAorLSAodm9pZClfYWN0aW9uOihpZClzZW5kZXIgXAoreyBcCisgICAgaWYgKHNl
bGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpIFwKKyAgICAgICAgW19jb250ZW50VmlldyBfYWN0
aW9uICMjIEZvcldlYlZpZXc6c2VuZGVyXTsgXAogfQogCi0tICh2b2lkKV9zZXREcmFnSW50ZXJh
Y3Rpb25Qb2xpY3k6KF9XS0RyYWdJbnRlcmFjdGlvblBvbGljeSlwb2xpY3kKLXsKLSAgICBpZiAo
X2RyYWdJbnRlcmFjdGlvblBvbGljeSA9PSBwb2xpY3kpCi0gICAgICAgIHJldHVybjsKK0ZPUl9F
QUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05U
RU5UVklFVykKIAotICAgIF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3kgPSBwb2xpY3k7Ci0jaWYgRU5B
QkxFKERSQUdfU1VQUE9SVCkKLSAgICBbX2NvbnRlbnRWaWV3IF9kaWRDaGFuZ2VEcmFnSW50ZXJh
Y3Rpb25Qb2xpY3ldOwotI2VuZGlmCi19CisjdW5kZWYgRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05U
RU5UVklFVwogCi0tICh2b2lkKV9wb3B1bGF0ZUFyY2hpdmVkU3Vidmlld3M6KE5TTXV0YWJsZVNl
dCAqKWVuY29kZWRWaWV3cworLSAoVUlWaWV3ICopaW5wdXRBY2Nlc3NvcnlWaWV3CiB7Ci0gICAg
W3N1cGVyIF9wb3B1bGF0ZUFyY2hpdmVkU3Vidmlld3M6ZW5jb2RlZFZpZXdzXTsKLQotICAgIGlm
IChfc2Nyb2xsVmlldykKLSAgICAgICAgW2VuY29kZWRWaWV3cyByZW1vdmVPYmplY3Q6X3Njcm9s
bFZpZXcuZ2V0KCldOwotICAgIGlmIChfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcpCi0g
ICAgICAgIFtlbmNvZGVkVmlld3MgcmVtb3ZlT2JqZWN0Ol9jdXN0b21Db250ZW50Rml4ZWRPdmVy
bGF5Vmlldy5nZXQoKV07CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgaW5wdXRBY2Nlc3NvcnlW
aWV3Rm9yV2ViVmlld107CiB9CiAKLS0gKEJPT0wpX2lzQmFja2dyb3VuZAorLSAoVUlWaWV3ICop
aW5wdXRWaWV3CiB7Ci0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10gJiYg
W19jdXN0b21Db250ZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9pc0Jh
Y2tncm91bmQpXSkKLSAgICAgICAgcmV0dXJuIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2lzQmFj
a2dyb3VuZF07Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgaXNCYWNrZ3JvdW5kXTsKKyAgICBy
ZXR1cm4gW19jb250ZW50VmlldyBpbnB1dFZpZXdGb3JXZWJWaWV3XTsKIH0KIAotQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLS0gKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ciAqKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIKKy0gKFVJVGV4dElucHV0QXNzaXN0YW50SXRl
bSAqKWlucHV0QXNzaXN0YW50SXRlbQogewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGJyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXJdOworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlucHV0QXNz
aXN0YW50SXRlbUZvcldlYlZpZXddOwogfQotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
RU5ECiAKLS0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKLXsKLSAgICBVSVZpZXcgKmN1cnJl
bnRDb250ZW50VmlldyA9IHNlbGYuX2N1cnJlbnRDb250ZW50VmlldzsKLSAgICBpZiAoY3VycmVu
dENvbnRlbnRWaWV3ID09IF9jb250ZW50VmlldyAmJiBbX2NvbnRlbnRWaWV3IHN1cGVydmlld10p
Ci0gICAgICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyRm9yV2Vi
Vmlld10gfHwgW3N1cGVyIGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1NfRkFNSUxZKQogCi0gICAgcmV0dXJuIFtjdXJyZW50Q29udGVudFZpZXcgYmVjb21lRmly
c3RSZXNwb25kZXJdIHx8IFtzdXBlciBiZWNvbWVGaXJzdFJlc3BvbmRlcl07Ci19CisjcHJhZ21h
IG1hcmsgLSBtYWNPUy9pT1MgV0tQcml2YXRlCiAKLS0gKEJPT0wpY2FuQmVjb21lRmlyc3RSZXNw
b25kZXIKKy0gKF9XS1NlbGVjdGlvbkF0dHJpYnV0ZXMpX3NlbGVjdGlvbkF0dHJpYnV0ZXMKIHsK
LSAgICBpZiAoc2VsZi5fY3VycmVudENvbnRlbnRWaWV3ID09IF9jb250ZW50VmlldykKLSAgICAg
ICAgcmV0dXJuIFtfY29udGVudFZpZXcgY2FuQmVjb21lRmlyc3RSZXNwb25kZXJGb3JXZWJWaWV3
XTsKLQotICAgIHJldHVybiBZRVM7CisgICAgcmV0dXJuIF9zZWxlY3Rpb25BdHRyaWJ1dGVzOwog
fQogCi0tIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCistIChDR1NpemUpX3ZpZXdwb3J0U2l6
ZUZvckNTU1ZpZXdwb3J0VW5pdHMKIHsKLSAgICBpZiAoW19jb250ZW50VmlldyBpc0ZpcnN0UmVz
cG9uZGVyXSkKLSAgICAgICAgcmV0dXJuIFtfY29udGVudFZpZXcgcmVzaWduRmlyc3RSZXNwb25k
ZXJGb3JXZWJWaWV3XTsKLQotICAgIHJldHVybiBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJd
OworICAgIHJldHVybiBfcGFnZS0+dmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cygpOwog
fQogCi1GT1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0FDVElPTl9UT19XS0NP
TlRFTlRWSUVXKQotCi0tIChCT09MKWNhblBlcmZvcm1BY3Rpb246KFNFTClhY3Rpb24gd2l0aFNl
bmRlcjooaWQpc2VuZGVyCistICh2b2lkKV9zZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVu
aXRzOihDR1NpemUpdmlld3BvcnRTaXplCiB7Ci0gICAgI2RlZmluZSBGT1JXQVJEX0NBTlBFUkZP
Uk1BQ1RJT05fVE9fV0tDT05URU5UVklFVyhfYWN0aW9uKSBcCi0gICAgICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKF9hY3Rpb246KSkgXAotICAgICAgICAgICAgcmV0dXJuIHNlbGYudXNlc1N0
YW5kYXJkQ29udGVudFZpZXcgJiYgW19jb250ZW50VmlldyBjYW5QZXJmb3JtQWN0aW9uRm9yV2Vi
VmlldzphY3Rpb24gd2l0aFNlbmRlcjpzZW5kZXJdOwotCi0gICAgRk9SX0VBQ0hfV0tDT05URU5U
VklFV19BQ1RJT04oRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcpCi0g
ICAgRk9SX0VBQ0hfUFJJVkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0NBTlBFUkZP
Uk1BQ1RJT05fVE9fV0tDT05URU5UVklFVykKLSAgICBGT1JXQVJEX0NBTlBFUkZPUk1BQ1RJT05f
VE9fV0tDT05URU5UVklFVyhfc2V0VGV4dENvbG9yOnNlbmRlcikKLSAgICBGT1JXQVJEX0NBTlBF
UkZPUk1BQ1RJT05fVE9fV0tDT05URU5UVklFVyhfc2V0Rm9udFNpemU6c2VuZGVyKQotICAgIEZP
UldBUkRfQ0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9zZXRGb250OnNlbmRlcikK
LQotICAgICN1bmRlZiBGT1JXQVJEX0NBTlBFUkZPUk1BQ1RJT05fVE9fV0tDT05URU5UVklFVwor
ICAgIGF1dG8gdmlld3BvcnRTaXplRm9yVmlld3BvcnRVbml0cyA9IFdlYkNvcmU6OkludFNpemUo
dmlld3BvcnRTaXplKTsKKyAgICBpZiAodmlld3BvcnRTaXplRm9yVmlld3BvcnRVbml0cy5pc0Vt
cHR5KCkpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2Vw
dGlvbiBmb3JtYXQ6QCJWaWV3cG9ydCBzaXplIHNob3VsZCBub3QgYmUgZW1wdHkiXTsKIAotICAg
IHJldHVybiBbc3VwZXIgY2FuUGVyZm9ybUFjdGlvbjphY3Rpb24gd2l0aFNlbmRlcjpzZW5kZXJd
OworICAgIF9wYWdlLT5zZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKHZpZXdwb3J0
U2l6ZUZvclZpZXdwb3J0VW5pdHMpOwogfQogCi0tIChpZCl0YXJnZXRGb3JBY3Rpb246KFNFTClh
Y3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCistIChfV0tJbnNwZWN0b3IgKilfaW5zcGVjdG9y
CiB7Ci0gICAgI2RlZmluZSBGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NPTlRFTlRWSUVX
KF9hY3Rpb24pIFwKLSAgICAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2FjdGlvbjopICYm
IHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpIFwKLSAgICAgICAgICAgIHJldHVybiBbX2Nv
bnRlbnRWaWV3IHRhcmdldEZvckFjdGlvbkZvcldlYlZpZXc6YWN0aW9uIHdpdGhTZW5kZXI6c2Vu
ZGVyXTsKLQotICAgIEZPUl9FQUNIX1dLQ09OVEVOVFZJRVdfQUNUSU9OKEZPUldBUkRfVEFSR0VU
Rk9SQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcpCi0gICAgRk9SX0VBQ0hfUFJJVkFURV9XS0NPTlRF
TlRWSUVXX0FDVElPTihGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NPTlRFTlRWSUVXKQot
ICAgIEZPUldBUkRfVEFSR0VURk9SQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcoX3NldFRleHRDb2xv
cjpzZW5kZXIpCi0gICAgRk9SV0FSRF9UQVJHRVRGT1JBQ1RJT05fVE9fV0tDT05URU5UVklFVyhf
c2V0Rm9udFNpemU6c2VuZGVyKQotICAgIEZPUldBUkRfVEFSR0VURk9SQUNUSU9OX1RPX1dLQ09O
VEVOVFZJRVcoX3NldEZvbnQ6c2VuZGVyKQotCi0gICAgI3VuZGVmIEZPUldBUkRfVEFSR0VURk9S
QUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcKLQotICAgIHJldHVybiBbc3VwZXIgdGFyZ2V0Rm9yQWN0
aW9uOmFjdGlvbiB3aXRoU2VuZGVyOnNlbmRlcl07CisgICAgaWYgKGF1dG8qIGluc3BlY3RvciA9
IF9wYWdlLT5pbnNwZWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoKmluc3BlY3Rvcik7
CisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAodm9pZCl3aWxsRmluaXNoSWdub3JpbmdDYWxsb3V0
QmFyRmFkZUFmdGVyUGVyZm9ybWluZ0FjdGlvbgorLSAoX1dLRnJhbWVIYW5kbGUgKilfbWFpbkZy
YW1lCiB7Ci0gICAgW19jb250ZW50VmlldyB3aWxsRmluaXNoSWdub3JpbmdDYWxsb3V0QmFyRmFk
ZUFmdGVyUGVyZm9ybWluZ0FjdGlvbl07CisgICAgaWYgKGF1dG8qIGZyYW1lID0gX3BhZ2UtPm1h
aW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVh
dGUoZnJhbWUtPmZyYW1lSUQoKSkpOworICAgIHJldHVybiBuaWw7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgQ0dGbG9hdCBmbG9vclRvRGV2aWNlUGl4ZWwoQ0dGbG9hdCBpbnB1dCwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpCistIChCT09MKV9pc0VkaXRhYmxlCiB7Ci0gICAgcmV0dXJuIENHRmxvb3Io
aW5wdXQgKiBkZXZpY2VTY2FsZUZhY3RvcikgLyBkZXZpY2VTY2FsZUZhY3RvcjsKKyAgICByZXR1
cm4gX3BhZ2UgJiYgX3BhZ2UtPmlzRWRpdGFibGUoKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IHBvaW50c0VxdWFsSW5EZXZpY2VQaXhlbHMoQ0dQb2ludCBhLCBDR1BvaW50IGIsIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKQorLSAodm9pZClfc2V0RWRpdGFibGU6KEJPT0wpZWRpdGFibGUKIHsK
LSAgICByZXR1cm4gZmFicyhhLnggKiBkZXZpY2VTY2FsZUZhY3RvciAtIGIueCAqIGRldmljZVNj
YWxlRmFjdG9yKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkKLSAgICAg
ICAgJiYgZmFicyhhLnkgKiBkZXZpY2VTY2FsZUZhY3RvciAtIGIueSAqIGRldmljZVNjYWxlRmFj
dG9yKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCk7Ci19CisgICAgYm9v
bCB3YXNFZGl0YWJsZSA9IF9wYWdlLT5pc0VkaXRhYmxlKCk7CisgICAgX3BhZ2UtPnNldEVkaXRh
YmxlKGVkaXRhYmxlKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKGVkaXRhYmxlKQorICAg
ICAgICBfaW1wbC0+ZGlkQmVjb21lRWRpdGFibGUoKTsKKyNlbmRpZgogCi1zdGF0aWMgQ0dTaXpl
IHJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKGNvbnN0IFdlYktpdDo6V2ViUGFnZVByb3h5JiBw
YWdlLCBDR1NpemUgY29udGVudFNpemUpCi17Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ig
PSBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgcmV0dXJuIENHU2l6ZU1ha2UoZmxvb3JU
b0RldmljZVBpeGVsKGNvbnRlbnRTaXplLndpZHRoLCBkZXZpY2VTY2FsZUZhY3RvciksIGZsb29y
VG9EZXZpY2VQaXhlbChjb250ZW50U2l6ZS5oZWlnaHQsIGRldmljZVNjYWxlRmFjdG9yKSk7Cisg
ICAgaWYgKHdhc0VkaXRhYmxlID09IGVkaXRhYmxlKQorICAgICAgICByZXR1cm47CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIFtfY29udGVudFZpZXcgX2RpZENoYW5nZVdlYlZpZXdF
ZGl0YWJpbGl0eV07CisjZW5kaWYKIH0KIAotLSAoVUlWaWV3ICopX2N1cnJlbnRDb250ZW50Vmll
dworLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKWNvbW1hbmQgYXJndW1l
bnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAoXikoQk9PTCkpY29tcGxl
dGlvbgogewotICAgIHJldHVybiBfY3VzdG9tQ29udGVudFZpZXcgPyBbX2N1c3RvbUNvbnRlbnRW
aWV3IHdlYl9jb250ZW50Vmlld10gOiBfY29udGVudFZpZXcuZ2V0KCk7CisgICAgX3BhZ2UtPmV4
ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kLCBhcmd1bWVudCwgW2NhcHR1cmVkQ29tcGxldGlvbkJs
b2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJy
b3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKQorICAgICAg
ICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yOjpOb25lKTsKKyAgICB9KTsKIH0KIAotLSAoV0tXZWJWaWV3Q29udGVudFByb3Zp
ZGVyUmVnaXN0cnkgKilfY29udGVudFByb3ZpZGVyUmVnaXN0cnkKKy0gKGlkIDxfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU+KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKIHsKLSAgICByZXR1
cm4gW19jb25maWd1cmF0aW9uIF9jb250ZW50UHJvdmlkZXJSZWdpc3RyeV07CisgICAgcmV0dXJu
IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7CiB9CiAKLS0gKFdL
U2VsZWN0aW9uR3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFyaXR5CistICh2b2lkKV9zZXRU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+
KWRlbGVnYXRlCiB7Ci0gICAgcmV0dXJuIFtfY29uZmlndXJhdGlvbiBzZWxlY3Rpb25HcmFudWxh
cml0eV07CisgICAgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOwogfQogCi0t
ICh2b2lkKV9zZXRIYXNDdXN0b21Db250ZW50VmlldzooQk9PTClwYWdlSGFzQ3VzdG9tQ29udGVu
dFZpZXcgbG9hZGVkTUlNRVR5cGU6KGNvbnN0IFdURjo6U3RyaW5nJiltaW1lVHlwZQorLSAodm9p
ZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1
bGF0aW9uQ29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgp
KWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKHBhZ2VIYXNDdXN0b21Db250ZW50Vmlldykg
ewotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAg
ICAgICBbX2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXdd
OworICAgIHVzaW5nIEV4Y2x1c2lvblJ1bGUgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6RXhjbHVzaW9uUnVsZTsKKworICAgIGlmICghX3RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZSB8fCAhX3BhZ2UpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6RXhjbHVzaW9uUnVsZT4gZXhjbHVzaW9uUnVsZXM7CisgICAgaWYgKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZSAq
d2tSdWxlIGluIGNvbmZpZ3VyYXRpb24uZXhjbHVzaW9uUnVsZXMpIHsKKyAgICAgICAgICAgIGF1
dG8gdHlwZSA9IHdrUnVsZS5pc0V4Y2x1c2lvbiA/IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkV4Y2x1
ZGUgOiBFeGNsdXNpb25SdWxlOjpUeXBlOjpJbmNsdWRlOworICAgICAgICAgICAgaWYgKHdrUnVs
ZS5hdHRyaWJ1dGVOYW1lKQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7
dHlwZSwgRXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZSB7IHdrUnVsZS5hdHRyaWJ1dGVOYW1l
LCB3a1J1bGUuYXR0cmlidXRlVmFsdWUgfSB9KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdrUnVs
ZS5jbGFzc05hbWUpCisgICAgICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBl
LCBFeGNsdXNpb25SdWxlOjpDbGFzc1J1bGUgeyB3a1J1bGUuY2xhc3NOYW1lIH0gfSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBl
LCBFeGNsdXNpb25SdWxlOjpFbGVtZW50UnVsZSB7IHdrUnVsZS5lbGVtZW50TmFtZSB9IH0pOwor
ICAgICAgICB9CisgICAgfQogCi0gICAgICAgIENsYXNzIHJlcHJlc2VudGF0aW9uQ2xhc3MgPSBb
W19jb25maWd1cmF0aW9uIF9jb250ZW50UHJvdmlkZXJSZWdpc3RyeV0gcHJvdmlkZXJGb3JNSU1F
VHlwZTptaW1lVHlwZV07Ci0gICAgICAgIEFTU0VSVChyZXByZXNlbnRhdGlvbkNsYXNzKTsKLSAg
ICAgICAgX2N1c3RvbUNvbnRlbnRWaWV3ID0gYWRvcHROUyhbW3JlcHJlc2VudGF0aW9uQ2xhc3Mg
YWxsb2NdIHdlYl9pbml0V2l0aEZyYW1lOnNlbGYuYm91bmRzIHdlYlZpZXc6c2VsZiBtaW1lVHlw
ZTptaW1lVHlwZV0pOwotICAgICAgICBfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcgPSBh
ZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYuYm91bmRzXSk7Ci0gICAg
ICAgIFtfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcgbGF5ZXJdLm5hbWUgPSBAIkN1c3Rv
bUNvbnRlbnRGaXhlZE92ZXJsYXkiOwotICAgICAgICBbX2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJs
YXlWaWV3IHNldFVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ6Tk9dOworICAgIF9wYWdlLT5zdGFydFRl
eHRNYW5pcHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzLCBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxX
S1dlYlZpZXc+KHNlbGYpXSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0
ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAg
ICAgICBpZiAoIXdlYWtTZWxmKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFtbX2Nv
bnRlbnRWaWV3IHVuc2NhbGVkVmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIFtf
Y29udGVudFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIFtfc2Nyb2xsVmlldyBh
ZGRTdWJ2aWV3Ol9jdXN0b21Db250ZW50Vmlldy5nZXQoKV07Ci0gICAgICAgIFtzZWxmIGFkZFN1
YnZpZXc6X2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3LmdldCgpXTsKKyAgICAgICAgYXV0
byByZXRhaW5lZFNlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgYXV0byBkZWxlZ2F0ZSA9
IFtyZXRhaW5lZFNlbGYgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZV07CisgICAgICAgIGlmICgh
ZGVsZWdhdGUpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgW19jdXN0b21Db250ZW50
VmlldyB3ZWJfc2V0TWluaW11bVNpemU6c2VsZi5ib3VuZHMuc2l6ZV07Ci0gICAgICAgIFtfY3Vz
dG9tQ29udGVudFZpZXcgd2ViX3NldEZpeGVkT3ZlcmxheVZpZXc6X2N1c3RvbUNvbnRlbnRGaXhl
ZE92ZXJsYXlWaWV3LmdldCgpXTsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKndrVG9rZW5zID0g
W05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnRva2Vucy5zaXplKCldOworICAgICAg
ICBmb3IgKGF1dG8mIHRva2VuIDogdG9rZW5zKSB7CisgICAgICAgICAgICBhdXRvIHdrVG9rZW4g
PSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7CisgICAg
ICAgICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50
aWZpZXIudG9VSW50NjQoKSldOworICAgICAgICAgICAgW3drVG9rZW4gc2V0Q29udGVudDp0b2tl
bi5jb250ZW50XTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhj
bHVkZWRdOworICAgICAgICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsK
KyAgICAgICAgfQogCi0gICAgICAgIF9zY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yID0gV2ViQ29y
ZTo6Q29sb3IoKTsKLSAgICAgICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6W3NlbGYg
X2luaXRpYWxDb250ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld11dOwotICAgICAgICBbX3Njcm9sbFZp
ZXcgX3NldFNjcm9sbEVuYWJsZWRJbnRlcm5hbDpZRVNdOworICAgICAgICBhdXRvIGl0ZW0gPSBh
ZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpTdHJpbmc6Om51bWJlcihpdGVtSUQudG9VSW50NjQoKSkgdG9rZW5zOndrVG9rZW5zXSk7Cisg
ICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRN
YW5pcHVsYXRpb25JdGVtOml0ZW0uZ2V0KCldOworICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25C
bG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildICgpIHsKKyAgICAgICAgY2Fw
dHVyZWRDb21wbGV0aW9uQmxvY2soKTsKKyAgICB9KTsKK30KIAotICAgICAgICBbc2VsZiBfc2V0
QXZvaWRzVW5zYWZlQXJlYTpOT107Ci0gICAgfSBlbHNlIGlmIChfY3VzdG9tQ29udGVudFZpZXcp
IHsKLSAgICAgICAgW19jdXN0b21Db250ZW50VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAg
ICAgICAgX2N1c3RvbUNvbnRlbnRWaWV3ID0gbnVsbHB0cjsKKy0gKHZvaWQpX2NvbXBsZXRlVGV4
dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246
KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIHVzaW5nIE1h
bmlwdWxhdGlvblJlc3VsdCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25SZXN1bHQ7CiAKLSAgICAgICAgW19jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5
VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgX2N1c3RvbUNvbnRlbnRGaXhlZE92
ZXJsYXlWaWV3ID0gbnVsbHB0cjsKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgW19zY3JvbGxWaWV3IGFkZFN1YnZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAg
ICAgICAgW19zY3JvbGxWaWV3IGFkZFN1YnZpZXc6W19jb250ZW50VmlldyB1bnNjYWxlZFZpZXdd
XTsKLSAgICAgICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRTaXplOnJvdW5kU2Nyb2xsVmlld0Nv
bnRlbnRTaXplKCpfcGFnZSwgW19jb250ZW50VmlldyBmcmFtZV0uc2l6ZSldOworICAgIGF1dG8g
aXRlbUlEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRlbnRpZmllcikudG9V
SW50NjQoKSk7CiAKLSAgICAgICAgW19jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5VmlldyBzZXRG
cmFtZTpzZWxmLmJvdW5kc107Ci0gICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6X2N1c3RvbUNvbnRl
bnRGaXhlZE92ZXJsYXlWaWV3LmdldCgpXTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgZm9yIChf
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKKyAgICAg
ICAgYXV0byB0b2tlbklEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OlRva2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlk
ZW50aWZpZXIpLnRvVUludDY0KCkpOworICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdr
VG9rZW4uY29udGVudCB9KTsKICAgICB9CiAKLSAgICBpZiAoc2VsZi5pc0ZpcnN0UmVzcG9uZGVy
KSB7Ci0gICAgICAgIFVJVmlldyAqY3VycmVudENvbnRlbnRWaWV3ID0gc2VsZi5fY3VycmVudENv
bnRlbnRWaWV3OwotICAgICAgICBpZiAoY3VycmVudENvbnRlbnRWaWV3ID09IF9jb250ZW50Vmll
dyA/IFtfY29udGVudFZpZXcgY2FuQmVjb21lRmlyc3RSZXNwb25kZXJGb3JXZWJWaWV3XSA6IGN1
cnJlbnRDb250ZW50Vmlldy5jYW5CZWNvbWVGaXJzdFJlc3BvbmRlcikKLSAgICAgICAgICAgIFtj
dXJyZW50Q29udGVudFZpZXcgYmVjb21lRmlyc3RSZXNwb25kZXJdOwotICAgIH0KKyAgICBfcGFn
ZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5zLCBbY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoTWFuaXB1bGF0
aW9uUmVzdWx0IHJlc3VsdCkgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jayhyZXN1
bHQgPT0gTWFuaXB1bGF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKKyAgICB9KTsKIH0KIAotLSAodm9p
ZClfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlkZXJXaXRoU3VnZ2Vz
dGVkRmlsZW5hbWU6KGNvbnN0IFN0cmluZyYpc3VnZ2VzdGVkRmlsZW5hbWUgZGF0YTooTlNEYXRh
ICopZGF0YQorLSAodm9pZClfdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIK
IHsKLSAgICBBU1NFUlQoX2N1c3RvbUNvbnRlbnRWaWV3KTsKLSAgICBbX2N1c3RvbUNvbnRlbnRW
aWV3IHdlYl9zZXRDb250ZW50UHJvdmlkZXJEYXRhOmRhdGEgc3VnZ2VzdGVkRmlsZW5hbWU6c3Vn
Z2VzdGVkRmlsZW5hbWVdOwotCi0gICAgLy8gRklYTUU6IEl0IG1heSBtYWtlIG1vcmUgc2Vuc2Ug
Zm9yIGN1c3RvbSBjb250ZW50IHByb3ZpZGVycyB0byBpbnZva2UgdGhpcyB3aGVuIHRoZXkncmUg
cmVhZHksCi0gICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IGFsbCBjdXN0
b20gY29udGVudCBwcm92aWRlcnMgd2lsbCBsYXkgb3V0IHN5bmNocm9ub3VzbHkuCi0gICAgX3Bh
Z2UtPmRpZExheW91dEZvckN1c3RvbUNvbnRlbnRQcm92aWRlcigpOworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBbc2VsZiBfdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uSW50ZXJuYWw6c2VuZGVy
XTsKKyNlbHNlCisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZCgiVGFrZUZpbmRTdHJpbmdG
cm9tU2VsZWN0aW9uIl9zKTsKKyNlbmRpZgogfQogCi0tICh2b2lkKV9oYW5kbGVLZXlVSUV2ZW50
Oig6OlVJRXZlbnQgKilldmVudAorKyAoTlNTdHJpbmcgKilfc3RyaW5nRm9yRmluZAogewotICAg
IC8vIFdlIG9ubHkgd2FudCB0byBoYW5kbGUga2V5IGV2ZW50cyBmcm9tIHRoZSBoYXJkd2FyZSBr
ZXlib2FyZCB3aGVuIHdlIGFyZQotICAgIC8vIGZpcnN0IHJlc3BvbmRlciBhbmQgYSBjdXN0b20g
Y29udGVudCB2aWV3IGlzIGluc3RhbGxlZDsgb3RoZXJ3aXNlLAotICAgIC8vIFdLQ29udGVudFZp
ZXcgd2lsbCBiZSB0aGUgZmlyc3QgcmVzcG9uZGVyIGFuZCBleHBlY3RzIHRvIGdldCBrZXkgZXZl
bnRzIGRpcmVjdGx5LgotICAgIGlmIChbc2VsZiBpc0ZpcnN0UmVzcG9uZGVyXSAmJiBldmVudC5f
aGlkRXZlbnQpIHsKLSAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcih3ZWJfaGFuZGxlS2V5RXZlbnQ6KV0pIHsKLSAgICAgICAgICAgIGlm
IChbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9oYW5kbGVLZXlFdmVudDpldmVudF0pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgW3N1cGVyIF9oYW5kbGVL
ZXlVSUV2ZW50OmV2ZW50XTsKKyAgICByZXR1cm4gV2ViS2l0OjpzdHJpbmdGb3JGaW5kKCk7CiB9
CiAKLS0gKHZvaWQpX3dpbGxJbnZva2VVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrCisrICh2
b2lkKV9zZXRTdHJpbmdGb3JGaW5kOihOU1N0cmluZyAqKWZpbmRTdHJpbmcKIHsKLSAgICBfaW52
b2tpbmdVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrID0gWUVTOworICAgIFdlYktpdDo6dXBk
YXRlU3RyaW5nRm9yRmluZChmaW5kU3RyaW5nKTsKIH0KIAotLSAodm9pZClfZGlkSW52b2tlVUlT
Y3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjaworLSAoX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKilf
cmVtb3RlT2JqZWN0UmVnaXN0cnkKIHsKLSAgICBfaW52b2tpbmdVSVNjcm9sbFZpZXdEZWxlZ2F0
ZUNhbGxiYWNrID0gTk87Ci0gICAgaWYgKF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVj
dHNGb3JVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrKSB7Ci0gICAgICAgIF9kaWREZWZlclVw
ZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrID0g
Tk87Ci0gICAgICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBfaW1wbC0+cmVtb3RlT2JqZWN0UmVnaXN0cnko
KTsKKyNlbHNlCisgICAgaWYgKCFfcmVtb3RlT2JqZWN0UmVnaXN0cnkpIHsKKyAgICAgICAgX3Jl
bW90ZU9iamVjdFJlZ2lzdHJ5ID0gYWRvcHROUyhbW19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5IGFs
bG9jXSBfaW5pdFdpdGhXZWJQYWdlUHJveHk6Kl9wYWdlXSk7CisgICAgICAgIF9wYWdlLT5wcm9j
ZXNzKCkucHJvY2Vzc1Bvb2woKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU9i
amVjdFJlZ2lzdHJ5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIF9wYWdlLT5pZGVudGlmaWVyKCks
IFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2JqZWN0UmVnaXN0cnldKTsKICAgICB9CisK
KyAgICByZXR1cm4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5LmdldCgpOworI2VuZGlmCiB9CiAKLXN0
YXRpYyBDR0Zsb2F0IGNvbnRlbnRab29tU2NhbGUoV0tXZWJWaWV3ICp3ZWJWaWV3KQorLSAoV0tC
cm93c2luZ0NvbnRleHRIYW5kbGUgKilfaGFuZGxlCiB7Ci0gICAgQ0dGbG9hdCBzY2FsZSA9IHdl
YlZpZXcuX2N1cnJlbnRDb250ZW50Vmlldy5sYXllci5hZmZpbmVUcmFuc2Zvcm0uYTsKLSAgICBB
U1NFUlQoc2NhbGUgPT0gW3dlYlZpZXctPl9zY3JvbGxWaWV3IHpvb21TY2FsZV0pOwotICAgIHJl
dHVybiBzY2FsZTsKKyAgICByZXR1cm4gW1tbV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgYWxsb2Nd
IF9pbml0V2l0aFBhZ2VQcm94eToqX3BhZ2VdIGF1dG9yZWxlYXNlXTsKIH0KIAotc3RhdGljIFdl
YkNvcmU6OkNvbG9yIGJhc2VTY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yKFdLV2ViVmlldyAqd2Vi
VmlldykKKy0gKF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKV9vYnNlcnZlZFJlbmRlcmluZ1By
b2dyZXNzRXZlbnRzCiB7Ci0gICAgaWYgKHdlYlZpZXctPl9jdXN0b21Db250ZW50VmlldykKLSAg
ICAgICAgcmV0dXJuIFt3ZWJWaWV3LT5fY3VzdG9tQ29udGVudFZpZXcgYmFja2dyb3VuZENvbG9y
XS5DR0NvbG9yOwotCi0gICAgaWYgKHdlYlZpZXctPl9nZXN0dXJlQ29udHJvbGxlcikgewotICAg
ICAgICBXZWJDb3JlOjpDb2xvciBjb2xvciA9IHdlYlZpZXctPl9nZXN0dXJlQ29udHJvbGxlci0+
YmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90KCk7Ci0gICAgICAgIGlmIChjb2xvci5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgfQotCi0gICAgaWYgKCF3
ZWJWaWV3LT5fcGFnZSkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gX29ic2VydmVk
UmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM7Cit9CiAKLSAgICByZXR1cm4gd2ViVmlldy0+X3BhZ2Ut
PnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpOworLSAoaWQgPFdLSGlzdG9yeURlbGVnYXRl
UHJpdmF0ZT4pX2hpc3RvcnlEZWxlZ2F0ZQoreworICAgIHJldHVybiBfbmF2aWdhdGlvblN0YXRl
LT5oaXN0b3J5RGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgpOwogfQogCi1zdGF0aWMgV2ViQ29yZTo6
Q29sb3Igc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcihXS1dlYlZpZXcgKndlYlZpZXcpCistICh2
b2lkKV9zZXRIaXN0b3J5RGVsZWdhdGU6KGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU+KWhp
c3RvcnlEZWxlZ2F0ZQogewotICAgIGlmICghd2ViVmlldy5vcGFxdWUpCi0gICAgICAgIHJldHVy
biBXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgX3BhZ2UtPnNldEhpc3RvcnlDbGll
bnQoX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRlSGlzdG9yeUNsaWVudCgpKTsKKyAgICBfbmF2aWdh
dGlvblN0YXRlLT5zZXRIaXN0b3J5RGVsZWdhdGUoaGlzdG9yeURlbGVnYXRlKTsKK30KIAotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgV2ViQ29yZTo6TG9jYWxDdXJyZW50VHJh
aXRDb2xsZWN0aW9uIGxvY2FsVHJhaXRDb2xsZWN0aW9uKHdlYlZpZXcudHJhaXRDb2xsZWN0aW9u
KTsKKy0gKHZvaWQpX3VwZGF0ZU1lZGlhUGxheWJhY2tDb250cm9sc01hbmFnZXIKK3sKKyNpZiBI
QVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQor
ICAgIF9pbXBsLT51cGRhdGVNZWRpYVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7CiAjZW5kaWYK
K30KIAotICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yID0gYmFzZVNjcm9sbFZpZXdCYWNrZ3JvdW5k
Q29sb3Iod2ViVmlldyk7Ci0KLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSAmJiB3ZWJWaWV3LT5f
Y29udGVudFZpZXcpCi0gICAgICAgIGNvbG9yID0gW3dlYlZpZXctPl9jb250ZW50VmlldyBiYWNr
Z3JvdW5kQ29sb3JdLkNHQ29sb3I7Ci0KLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkgewotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgIGNvbG9yID0gVUlDb2xvci5zeXN0
ZW1CYWNrZ3JvdW5kQ29sb3IuQ0dDb2xvcjsKKy0gKEJPT0wpX2NhblRvZ2dsZVBpY3R1cmVJblBp
Y3R1cmUKK3sKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2ltcGwtPmNhblRvZ2ds
ZVBpY3R1cmVJblBpY3R1cmUoKTsKICNlbHNlCi0gICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Q29s
b3I6OndoaXRlOworICAgIHJldHVybiBOTzsKICNlbmRpZgotICAgIH0KLQotICAgIENHRmxvYXQg
em9vbVNjYWxlID0gY29udGVudFpvb21TY2FsZSh3ZWJWaWV3KTsKLSAgICBDR0Zsb2F0IG1pbmlt
dW1ab29tU2NhbGUgPSBbd2ViVmlldy0+X3Njcm9sbFZpZXcgbWluaW11bVpvb21TY2FsZV07Ci0g
ICAgaWYgKHpvb21TY2FsZSA8IG1pbmltdW1ab29tU2NhbGUpIHsKLSAgICAgICAgQ0dGbG9hdCBz
bG9wZSA9IDEyOwotICAgICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBzdGQ6Om1heDxDR0Zsb2F0Pigx
IC0gc2xvcGUgKiAobWluaW11bVpvb21TY2FsZSAtIHpvb21TY2FsZSksIDApOwotICAgICAgICBj
b2xvciA9IFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IucmdiKCksIG9wYWNp
dHkpOwotICAgIH0KLQotICAgIHJldHVybiBjb2xvcjsKIH0KIAotLSAodm9pZClfdXBkYXRlU2Ny
b2xsVmlld0JhY2tncm91bmQKKy0gKEJPT0wpX2lzUGljdHVyZUluUGljdHVyZUFjdGl2ZQogewot
ICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yID0gc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcihzZWxm
KTsKLQotICAgIGlmIChfc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvciA9PSBjb2xvcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgX3Njcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKLQot
ICAgIGF1dG8gdWlCYWNrZ3JvdW5kQ29sb3IgPSBhZG9wdE5TKFtbVUlDb2xvciBhbGxvY10gaW5p
dFdpdGhDR0NvbG9yOmNhY2hlZENHQ29sb3IoY29sb3IpXSk7Ci0gICAgW19zY3JvbGxWaWV3IHNl
dEJhY2tncm91bmRDb2xvcjp1aUJhY2tncm91bmRDb2xvci5nZXQoKV07CisjaWYgSEFWRShUT1VD
SF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICByZXR1
cm4gX2ltcGwtPmlzUGljdHVyZUluUGljdHVyZUFjdGl2ZSgpOworI2Vsc2UKKyAgICByZXR1cm4g
Tk87CisjZW5kaWYKK30KIAotICAgIC8vIFVwZGF0ZSB0aGUgaW5kaWNhdG9yIHN0eWxlIGJhc2Vk
IG9uIHRoZSBsaWdodG5lc3MvZGFya25lc3Mgb2YgdGhlIGJhY2tncm91bmQgY29sb3IuCi0gICAg
ZG91YmxlIGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzOwotICAgIGNvbG9yLmdldEhTTChodWUs
IHNhdHVyYXRpb24sIGxpZ2h0bmVzcyk7Ci0gICAgaWYgKGxpZ2h0bmVzcyA8PSAuNSAmJiBjb2xv
ci5pc1Zpc2libGUoKSkKLSAgICAgICAgW19zY3JvbGxWaWV3IHNldEluZGljYXRvclN0eWxlOlVJ
U2Nyb2xsVmlld0luZGljYXRvclN0eWxlV2hpdGVdOwotICAgIGVsc2UKLSAgICAgICAgW19zY3Jv
bGxWaWV3IHNldEluZGljYXRvclN0eWxlOlVJU2Nyb2xsVmlld0luZGljYXRvclN0eWxlQmxhY2td
OworLSAodm9pZClfdG9nZ2xlUGljdHVyZUluUGljdHVyZQoreworI2lmIEhBVkUoVE9VQ0hfQkFS
KSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisgICAgX2ltcGwtPnRv
Z2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKKyNlbmRpZgogfQogCi0tICh2b2lkKV92aWRlb0NvbnRy
b2xzTWFuYWdlckRpZENoYW5nZQorLSAodm9pZClfY2xvc2VBbGxNZWRpYVByZXNlbnRhdGlvbnMK
IHsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKF9mdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcikKLSAgICAgICAgW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB2aWRlb0Nv
bnRyb2xzTWFuYWdlckRpZENoYW5nZV07CisgICAgaWYgKGF1dG8gdmlkZW9GdWxsc2NyZWVuTWFu
YWdlciA9IF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkpIHsKKyAgICAgICAgdmlkZW9G
dWxsc2NyZWVuTWFuYWdlci0+Zm9yRWFjaFNlc3Npb24oW10gKGF1dG8mIG1vZGVsLCBhdXRvJiBp
bnRlcmZhY2UpIHsKKyAgICAgICAgICAgIG1vZGVsLnJlcXVlc3RGdWxsc2NyZWVuTW9kZShXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgaWYgKGF1dG8gZnVsbFNjcmVlbk1hbmFnZXIgPSBfcGFn
ZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKTsgZnVsbFNjcmVlbk1hbmFnZXIgJiYgZnVsbFNjcmVlbk1h
bmFnZXItPmlzRnVsbFNjcmVlbigpKQorICAgICAgICBmdWxsU2NyZWVuTWFuYWdlci0+Y2xvc2Uo
KTsKICNlbmRpZgogfQogCi0tIChDR1BvaW50KV9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9s
bFZpZXcKKy0gKHZvaWQpX3N0b3BNZWRpYUNhcHR1cmUKIHsKLSAgICBhdXRvIGNvbWJpbmVkVW5v
YnNjdXJlZEFuZFNjcm9sbFZpZXdJbnNldCA9IFtzZWxmIF9jb21wdXRlZENvbnRlbnRJbnNldF07
Ci0gICAgcmV0dXJuIENHUG9pbnRNYWtlKC1jb21iaW5lZFVub2JzY3VyZWRBbmRTY3JvbGxWaWV3
SW5zZXQubGVmdCwgLWNvbWJpbmVkVW5vYnNjdXJlZEFuZFNjcm9sbFZpZXdJbnNldC50b3ApOwor
ICAgIF9wYWdlLT5zdG9wTWVkaWFDYXB0dXJlKCk7CiB9CiAKLS0gKENHUG9pbnQpX2NvbnRlbnRP
ZmZzZXRBZGp1c3RlZEZvck9ic2N1cmVkSW5zZXQ6KENHUG9pbnQpcG9pbnQKKy0gKHZvaWQpX3N0
b3BBbGxNZWRpYVBsYXliYWNrCiB7Ci0gICAgQ0dQb2ludCByZXN1bHQgPSBwb2ludDsKLSAgICBV
SUVkZ2VJbnNldHMgY29udGVudEluc2V0ID0gW3NlbGYgX2NvbXB1dGVkT2JzY3VyZWRJbnNldF07
Ci0KLSAgICByZXN1bHQueCAtPSBjb250ZW50SW5zZXQubGVmdDsKLSAgICByZXN1bHQueSAtPSBj
b250ZW50SW5zZXQudG9wOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBfcGFnZS0+c3RvcEFs
bE1lZGlhUGxheWJhY2soKTsKIH0KIAotLSAoVUlSZWN0RWRnZSlfZWZmZWN0aXZlT2JzY3VyZWRJ
bnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhCistICh2b2lkKV9zdXNwZW5kQWxsTWVkaWFQbGF5
YmFjawogewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKQotICAgICAg
ICByZXR1cm4gVUlSZWN0RWRnZUFsbDsKLSAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRFZGdlc0Fm
ZmVjdGVkQnlTYWZlQXJlYTsKKyAgICBfcGFnZS0+c3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKTsK
IH0KIAotLSAoVUlFZGdlSW5zZXRzKV9jb21wdXRlZE9ic2N1cmVkSW5zZXQKKy0gKHZvaWQpX3Jl
c3VtZUFsbE1lZGlhUGxheWJhY2sKIHsKLSAgICBpZiAoIWxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6
OlNES1ZlcnNpb246OkZpcnN0V2hlcmVTY3JvbGxWaWV3Q29udGVudEluc2V0c0FyZU5vdE9ic2N1
cmluZ0luc2V0cykpIHsKLSAgICAgICAgLy8gRm9yIGJpbmFyeSBjb21wYWJpbGl0eSB3aXRoIHRo
aXJkIHBhcnR5IGFwcHMsIHRyZWF0IHNjcm9sbCB2aWV3IGNvbnRlbnQgaW5zZXRzIGFzIG9ic2N1
cmluZyBpbnNldHMgd2hlbiB0aGUgYXBwIGlzIGNvbXBpbGVkCi0gICAgICAgIC8vIGFnYWluc3Qg
YSBXZWJLaXQgdmVyc2lvbiB3aXRob3V0IHRoZSBmaXggaW4gcjIyOTY0MS4KLSAgICAgICAgcmV0
dXJuIFtzZWxmIF9jb21wdXRlZENvbnRlbnRJbnNldF07Ci0gICAgfQotCi0gICAgaWYgKF9oYXZl
U2V0T2JzY3VyZWRJbnNldHMpCi0gICAgICAgIHJldHVybiBfb2JzY3VyZWRJbnNldHM7Ci0KLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgaWYgKHNlbGYuX3NhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3Vy
ZWRJbnNldHMpCi0gICAgICAgIHJldHVybiBVSUVkZ2VJbnNldHNBZGQoVUlFZGdlSW5zZXRzWmVy
bywgc2VsZi5fc2Nyb2xsVmlld1N5c3RlbUNvbnRlbnRJbnNldCwgc2VsZi5fZWZmZWN0aXZlT2Jz
Y3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhKTsKLSNlbmRpZgotCi0gICAgcmV0dXJu
IFVJRWRnZUluc2V0c1plcm87CisgICAgX3BhZ2UtPnJlc3VtZUFsbE1lZGlhUGxheWJhY2soKTsK
IH0KIAotLSAoVUlFZGdlSW5zZXRzKV9jb21wdXRlZENvbnRlbnRJbnNldAorLSAoTlNVUkwgKilf
dW5yZWFjaGFibGVVUkwKIHsKLSAgICBpZiAoX2hhdmVTZXRPYnNjdXJlZEluc2V0cykKLSAgICAg
ICAgcmV0dXJuIF9vYnNjdXJlZEluc2V0czsKLQotICAgIFVJRWRnZUluc2V0cyBpbnNldHMgPSBb
X3Njcm9sbFZpZXcgY29udGVudEluc2V0XTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAo
c2VsZi5fc2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cykKLSAgICAgICAgaW5zZXRz
ID0gVUlFZGdlSW5zZXRzQWRkKGluc2V0cywgc2VsZi5fc2Nyb2xsVmlld1N5c3RlbUNvbnRlbnRJ
bnNldCwgc2VsZi5fZWZmZWN0aXZlT2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVh
KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGluc2V0czsKKyAgICByZXR1cm4gW05TVVJMIF93ZWJf
VVJMV2l0aFdURlN0cmluZzpfcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVucmVhY2hhYmxlVVJMKCld
OwogfQogCi0tIChVSUVkZ2VJbnNldHMpX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5zZXQK
Ky0gKE5TVVJMICopX21haW5GcmFtZVVSTAogewotICAgIGlmIChfaGF2ZVNldFVub2JzY3VyZWRT
YWZlQXJlYUluc2V0cykKLSAgICAgICAgcmV0dXJuIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7
Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKCFzZWxmLl9zYWZlQXJlYVNob3VsZEFmZmVj
dE9ic2N1cmVkSW5zZXRzKQotICAgICAgICByZXR1cm4gc2VsZi5zYWZlQXJlYUluc2V0czsKLSNl
bmRpZgotCi0gICAgcmV0dXJuIFVJRWRnZUluc2V0c1plcm87CisgICAgaWYgKGF1dG8qIGZyYW1l
ID0gX3BhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gZnJhbWUtPnVybCgpOworICAg
IHJldHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpX3Byb2Nlc3NXaWxsU3dhcE9yRGlkRXhpdAorLSAo
dm9pZClfbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGJhc2VVUkw6
KE5TVVJMICopYmFzZVVSTCBmb3JVbnJlYWNoYWJsZVVSTDooTlNVUkwgKil1bnJlYWNoYWJsZVVS
TAogewotICAgIC8vIEZJWE1FOiBXaGljaCBvbmVzIG9mIHRoZXNlIG5lZWQgdG8gYmUgZG9uZSBp
biB0aGUgcHJvY2VzcyBzd2FwIGNhc2UgYW5kIHdoaWNoIG9uZXMgaW4gdGhlIGV4aXQgY2FzZT8K
LSAgICBbc2VsZiBfaGlkZVBhc3N3b3JkVmlld107Ci0gICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVk
UmVzaXplXTsKLQotICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIF9nZXN0dXJl
Q29udHJvbGxlci0+ZGlzY29ubmVjdEZyb21Qcm9jZXNzKCk7Ci0KLSAgICBfdmlld3BvcnRNZXRh
VGFnV2lkdGggPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIF9p
bml0aWFsU2NhbGVGYWN0b3IgPSAxOwotICAgIF9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZyYW1l
ID0gTk87Ci0gICAgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJh
bWUgPSBOTzsKLSAgICBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1p
Y1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmc7Ci0gICAgX3dhaXRpbmdGb3JFbmRBbmlt
YXRlZFJlc2l6ZSA9IE5POwotICAgIF93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6
ZSA9IE5POwotICAgIF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoID0gMDsKLSAg
ICBbX2NvbnRlbnRWaWV3IHNldEhpZGRlbjpOT107Ci0gICAgX3Njcm9sbE9mZnNldFRvUmVzdG9y
ZSA9IFdURjo6bnVsbG9wdDsKLSAgICBfdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSA9IFdURjo6
bnVsbG9wdDsKLSAgICBfc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6OkNvbG9y
KCk7Ci0gICAgX2ludm9raW5nVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayA9IE5POwotICAg
IF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVSVNjcm9sbFZpZXdEZWxlZ2F0
ZUNhbGxiYWNrID0gTk87Ci0gICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0Zv
ckFueVJlYXNvbiA9IE5POwotICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNG
b3JVbnN0YWJsZVNjcm9sbFZpZXcgPSBOTzsKLSAgICBfY3VycmVudGx5QWRqdXN0aW5nU2Nyb2xs
Vmlld0luc2V0c0ZvcktleWJvYXJkID0gTk87Ci0gICAgX2xhc3RTZW50Vmlld0xheW91dFNpemUg
PSBXVEY6Om51bGxvcHQ7Ci0gICAgX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplID0gV1RG
OjpudWxsb3B0OwotICAgIF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uID0gV1RGOjpudWxsb3B0
OwotCi0gICAgX2Zyb3plblZpc2libGVDb250ZW50UmVjdCA9IFdURjo6bnVsbG9wdDsKLSAgICBf
ZnJvemVuVW5vYnNjdXJlZENvbnRlbnRSZWN0ID0gV1RGOjpudWxsb3B0OwotCi0gICAgX2ZpcnN0
UGFpbnRBZnRlckNvbW1pdExvYWRUcmFuc2FjdGlvbklEID0geyB9OwotICAgIF9maXJzdFRyYW5z
YWN0aW9uSURBZnRlclBhZ2VSZXN0b3JlID0gV1RGOjpudWxsb3B0OwotCi0gICAgX2xhc3RUcmFu
c2FjdGlvbklEID0geyB9OwotCi0gICAgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRlID0g
Tk87Ci0gICAgX2NvbW1pdERpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbiA9IE5POwotCi0gICAgX2F2
b2lkc1Vuc2FmZUFyZWEgPSBZRVM7CisgICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBkYXRhVXNp
bmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgX3BhZ2UtPmxvYWRBbHRlcm5h
dGVIVE1MKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxl
bmd0aCB9LCAiVVRGLTgiX3MsIGJhc2VVUkwsIHVucmVhY2hhYmxlVVJMKTsKIH0KIAotLSAodm9p
ZClfcHJvY2Vzc1dpbGxTd2FwCistIChXS05hdmlnYXRpb24gKilfbG9hZERhdGE6KE5TRGF0YSAq
KWRhdGEgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgY2hhcmFjdGVyRW5jb2RpbmdOYW1l
OihOU1N0cmluZyAqKWNoYXJhY3RlckVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VV
UkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhCiB7Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgi
JXAgLVtXS1dlYlZpZXcgX3Byb2Nlc3NXaWxsU3dhcF0iLCBzZWxmKTsKLSAgICBbc2VsZiBfcHJv
Y2Vzc1dpbGxTd2FwT3JEaWRFeGl0XTsKKyAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9hZERh
dGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3Ro
IH0sIE1JTUVUeXBlLCBjaGFyYWN0ZXJFbmNvZGluZ05hbWUsIGJhc2VVUkwuYWJzb2x1dGVTdHJp
bmcsIFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpLnB0cigpKSk7CiB9
CiAKLS0gKHZvaWQpX3Byb2Nlc3NEaWRFeGl0CistIChXS05hdmlnYXRpb24gKilfbG9hZFJlcXVl
c3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Qgc2hvdWxkT3BlbkV4dGVybmFsVVJMczooQk9PTClz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzCiB7Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAg
LVtXS1dlYlZpZXcgX3Byb2Nlc3NEaWRFeGl0XSIsIHNlbGYpOworICAgIHJldHVybiB3cmFwcGVy
KF9wYWdlLT5sb2FkUmVxdWVzdChyZXF1ZXN0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzID8gV2Vi
Q29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cgOiBXZWJDb3Jl
OjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdykpOworfQogCi0g
ICAgW3NlbGYgX3Byb2Nlc3NXaWxsU3dhcE9yRGlkRXhpdF07CistIChOU0FycmF5ICopX2NlcnRp
ZmljYXRlQ2hhaW4KK3sKKyAgICBpZiAoV2ViS2l0OjpXZWJGcmFtZVByb3h5KiBtYWluRnJhbWUg
PSBfcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBtYWluRnJhbWUtPmNlcnRpZmlj
YXRlSW5mbygpID8gKF9fYnJpZGdlIE5TQXJyYXkgKiltYWluRnJhbWUtPmNlcnRpZmljYXRlSW5m
bygpLT5jZXJ0aWZpY2F0ZUluZm8oKS5jZXJ0aWZpY2F0ZUNoYWluKCkgOiBuaWw7CiAKLSAgICBb
X2NvbnRlbnRWaWV3IHNldEZyYW1lOnNlbGYuYm91bmRzXTsKLSAgICBbX3Njcm9sbFZpZXcgc2V0
QmFja2dyb3VuZENvbG9yOltfY29udGVudFZpZXcgYmFja2dyb3VuZENvbG9yXV07Ci0gICAgW19z
Y3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6W3NlbGYgX2luaXRpYWxDb250ZW50T2Zmc2V0Rm9y
U2Nyb2xsVmlld11dOwotICAgIFtfc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6MV07CisgICAgcmV0
dXJuIG5pbDsKIH0KIAotLSAodm9pZClfZGlkUmVsYXVuY2hQcm9jZXNzCistIChOU1VSTCAqKV9j
b21taXR0ZWRVUkwKIHsKLSAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAtW1dLV2ViVmll
dyBfZGlkUmVsYXVuY2hQcm9jZXNzXSIsIHNlbGYpOwotICAgIF9oYXNTY2hlZHVsZWRWaXNpYmxl
UmVjdFVwZGF0ZSA9IE5POwotICAgIF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVTY2hlZHVsZWRG
cm9tU2Nyb2xsVmlld0luU3RhYmxlU3RhdGUgPSBZRVM7Ci0gICAgaWYgKF9nZXN0dXJlQ29udHJv
bGxlcikKLSAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5jb25uZWN0VG9Qcm9jZXNzKCk7Cisg
ICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X3BhZ2UtPnBhZ2VMb2FkU3Rh
dGUoKS51cmwoKV07CiB9CiAKLS0gKHZvaWQpX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWUKKy0g
KE5TU3RyaW5nICopX01JTUVUeXBlCiB7Ci0gICAgX2ZpcnN0UGFpbnRBZnRlckNvbW1pdExvYWRU
cmFuc2FjdGlvbklEID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5PigqX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLm5leHRMYXllclRyZWVUcmFuc2FjdGlvbklE
KCk7Ci0KLSAgICBfaGFzQ29tbWl0dGVkTG9hZEZvck1haW5GcmFtZSA9IFlFUzsKLSAgICBfbmVl
ZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZSA9IFlFUzsKKyAgICBp
ZiAoX3BhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gX3BhZ2UtPm1haW5GcmFtZSgp
LT5taW1lVHlwZSgpOwogCi0gICAgW19zY3JvbGxWaWV3IF9zdG9wU2Nyb2xsaW5nQW5kWm9vbWlu
Z0FuaW1hdGlvbnNdOworICAgIHJldHVybiBuaWw7CiB9CiAKLXN0YXRpYyBDR1BvaW50IGNvbnRl
bnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldywgQ0dQ
b2ludCBjb250ZW50T2Zmc2V0KQorLSAoTlNTdHJpbmcgKilfdXNlckFnZW50CiB7Ci0jaWYgX19J
UEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwCi0gICAgVUlFZGdlSW5zZXRz
IGNvbnRlbnRJbnNldHMgPSBzY3JvbGxWaWV3LmFkanVzdGVkQ29udGVudEluc2V0OwotI2Vsc2UK
LSAgICBVSUVkZ2VJbnNldHMgY29udGVudEluc2V0cyA9IHNjcm9sbFZpZXcuY29udGVudEluc2V0
OwotI2VuZGlmCi0KLSAgICBDR1NpemUgY29udGVudFNpemUgPSBzY3JvbGxWaWV3LmNvbnRlbnRT
aXplOwotICAgIENHU2l6ZSBzY3JvbGxWaWV3U2l6ZSA9IHNjcm9sbFZpZXcuYm91bmRzLnNpemU7
Ci0KLSAgICBDR1BvaW50IG1pbmltdW1Db250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2UoLWNvbnRl
bnRJbnNldHMubGVmdCwgLWNvbnRlbnRJbnNldHMudG9wKTsKLSAgICBDR1BvaW50IG1heGltdW1D
b250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2Uoc3RkOjptYXgobWluaW11bUNvbnRlbnRPZmZzZXQu
eCwgY29udGVudFNpemUud2lkdGggKyBjb250ZW50SW5zZXRzLnJpZ2h0IC0gc2Nyb2xsVmlld1Np
emUud2lkdGgpLCBzdGQ6Om1heChtaW5pbXVtQ29udGVudE9mZnNldC55LCBjb250ZW50U2l6ZS5o
ZWlnaHQgKyBjb250ZW50SW5zZXRzLmJvdHRvbSAtIHNjcm9sbFZpZXdTaXplLmhlaWdodCkpOwot
Ci0gICAgcmV0dXJuIENHUG9pbnRNYWtlKHN0ZDo6bWF4KHN0ZDo6bWluKGNvbnRlbnRPZmZzZXQu
eCwgbWF4aW11bUNvbnRlbnRPZmZzZXQueCksIG1pbmltdW1Db250ZW50T2Zmc2V0LngpLCBzdGQ6
Om1heChzdGQ6Om1pbihjb250ZW50T2Zmc2V0LnksIG1heGltdW1Db250ZW50T2Zmc2V0LnkpLCBt
aW5pbXVtQ29udGVudE9mZnNldC55KSk7CisgICAgcmV0dXJuIF9wYWdlLT51c2VyQWdlbnQoKTsK
IH0KIAotc3RhdGljIHZvaWQgY2hhbmdlQ29udGVudE9mZnNldEJvdW5kZWRJblZhbGlkUmFuZ2Uo
VUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3LCBXZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmZz
ZXQpCistIChOU1N0cmluZyAqKV9hcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQKIHsKLSAgICBz
Y3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5n
ZShzY3JvbGxWaWV3LCBjb250ZW50T2Zmc2V0KTsKKyAgICByZXR1cm4gX3BhZ2UtPmFwcGxpY2F0
aW9uTmFtZUZvclVzZXJBZ2VudCgpOwogfQogCi0tIChXZWJDb3JlOjpGbG9hdFJlY3QpdmlzaWJs
ZVJlY3RJblZpZXdDb29yZGluYXRlcworLSAodm9pZClfc2V0QXBwbGljYXRpb25OYW1lRm9yVXNl
ckFnZW50OihOU1N0cmluZyAqKWFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudAogewotICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCBib3VuZHMgPSBzZWxmLmJvdW5kczsKLSAgICBib3VuZHMubW92ZUJ5
KFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XSk7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNv
bnRlbnRWaWV3Qm91bmRzID0gW19jb250ZW50VmlldyBib3VuZHNdOwotICAgIGJvdW5kcy5pbnRl
cnNlY3QoY29udGVudFZpZXdCb3VuZHMpOwotICAgIHJldHVybiBib3VuZHM7CisgICAgX3BhZ2Ut
PnNldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdl
bnQpOworICAgIF9wYWdlLT5zZXRBcHBsaWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50KGFw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7CiB9CiAKLS8vIFdlYkNvcmUgc3RvcmVzIHRoZSBw
YWdlIHNjYWxlIGZhY3RvciBhcyBmbG9hdCBpbnN0ZWFkIG9mIGRvdWJsZS4gV2hlbiB3ZSBnZXQg
YSBzY2FsZSBmcm9tIFdlYkNvcmUsCi0vLyB3ZSBuZWVkIHRvIGlnbm9yZSBkaWZmZXJlbmNlcyB0
aGF0IGFyZSB3aXRoaW4gYSBzbWFsbCByb3VuZGluZyBlcnJvciBvbiBmbG9hdHMuCi1zdGF0aWMg
aW5saW5lIGJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbEFzRmxvYXQoZmxvYXQgYSwgZmxvYXQgYikK
Ky0gKE5TU3RyaW5nICopX2N1c3RvbVVzZXJBZ2VudAogewotICAgIHJldHVybiBXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYSwgYik7CisgICAgcmV0dXJuIHNlbGYuY3VzdG9tVXNlckFnZW50Owog
fQogCi0tICh2b2lkKV9kaWRDb21taXRMYXllclRyZWVEdXJpbmdBbmltYXRlZFJlc2l6ZTooY29u
c3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rp
b24KKy0gKHZvaWQpX3NldEN1c3RvbVVzZXJBZ2VudDooTlNTdHJpbmcgKiljdXN0b21Vc2VyQWdl
bnQKIHsKLSAgICBhdXRvIHVwZGF0ZUlEID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24uZHluYW1pY1Zp
ZXdwb3J0U2l6ZVVwZGF0ZUlEKCk7Ci0gICAgaWYgKHVwZGF0ZUlEICYmICp1cGRhdGVJRCA9PSBf
Y3VycmVudER5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJRCkgewotICAgICAgICBkb3VibGUgcGFn
ZVNjYWxlID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24ucGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAg
IFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24u
c2Nyb2xsUG9zaXRpb24oKTsKLQotICAgICAgICBDR0Zsb2F0IGFuaW1hdGluZ1NjYWxlVGFyZ2V0
ID0gW1tfcmVzaXplQW5pbWF0aW9uVmlldyBsYXllcl0gdHJhbnNmb3JtXS5tMTE7Ci0gICAgICAg
IGRvdWJsZSBjdXJyZW50VGFyZ2V0U2NhbGUgPSBhbmltYXRpbmdTY2FsZVRhcmdldCAqIFtbX2Nv
bnRlbnRWaWV3IGxheWVyXSB0cmFuc2Zvcm1dLm0xMTsKLSAgICAgICAgZG91YmxlIHNjYWxlID0g
cGFnZVNjYWxlIC8gY3VycmVudFRhcmdldFNjYWxlOwotICAgICAgICBfcmVzaXplQW5pbWF0aW9u
VHJhbnNmb3JtQWRqdXN0bWVudHMgPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKHNjYWxlLCBzY2Fs
ZSwgMSk7Ci0KLSAgICAgICAgQ0dQb2ludCBuZXdDb250ZW50T2Zmc2V0ID0gW3NlbGYgX2NvbnRl
bnRPZmZzZXRBZGp1c3RlZEZvck9ic2N1cmVkSW5zZXQ6Q0dQb2ludE1ha2Uoc2Nyb2xsUG9zaXRp
b24ueCgpICogcGFnZVNjYWxlLCBzY3JvbGxQb3NpdGlvbi55KCkgKiBwYWdlU2NhbGUpXTsKLSAg
ICAgICAgQ0dQb2ludCBjdXJyZW50Q29udGVudE9mZnNldCA9IFtfc2Nyb2xsVmlldyBjb250ZW50
T2Zmc2V0XTsKKyAgICBzZWxmLmN1c3RvbVVzZXJBZ2VudCA9IGN1c3RvbVVzZXJBZ2VudDsKK30K
IAotICAgICAgICBfcmVzaXplQW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMubTQxID0gKGN1
cnJlbnRDb250ZW50T2Zmc2V0LnggLSBuZXdDb250ZW50T2Zmc2V0LngpIC8gYW5pbWF0aW5nU2Nh
bGVUYXJnZXQ7Ci0gICAgICAgIF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cy5t
NDIgPSAoY3VycmVudENvbnRlbnRPZmZzZXQueSAtIG5ld0NvbnRlbnRPZmZzZXQueSkgLyBhbmlt
YXRpbmdTY2FsZVRhcmdldDsKLQotICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJd
LnN1YmxheWVyVHJhbnNmb3JtID0gX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRz
OwotCi0gICAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgcGFzc2VkIGVuZEFuaW1hdGVkUmVzaXpl
LCBpbW1lZGlhdGVseSBjb21wbGV0ZQotICAgICAgICAvLyB0aGUgcmVzaXplIHdoZW4gd2UgaGF2
ZSBhbiB1cC10by1kYXRlIGxheWVyIHRyZWUuIE90aGVyd2lzZSwKLSAgICAgICAgLy8gd2Ugd2ls
bCBkZWZlciBjb21wbGV0aW9uIHVudGlsIGVuZEFuaW1hdGVkUmVzaXplLgotICAgICAgICBfd2Fp
dGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRSZXNpemUgPSBOTzsKLSAgICAgICAgaWYgKCFfd2Fp
dGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplKQotICAgICAgICAgICAgW3NlbGYgX2RpZENvbXBsZXRl
QW5pbWF0ZWRSZXNpemVdOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiBh
IGNvbW1pdCBhcnJpdmVzIGR1cmluZyB0aGUgbGl2ZSBwYXJ0IG9mIGEgcmVzaXplIGJ1dCBiZWZv
cmUgdGhlCi0gICAgLy8gbGF5ZXIgdHJlZSB0YWtlcyB0aGUgY3VycmVudCByZXNpemUgaW50byBh
Y2NvdW50LCBpdCBjb3VsZCBjaGFuZ2UgdGhlCi0gICAgLy8gV0tDb250ZW50VmlldydzIHNpemUu
IFVwZGF0ZSB0aGUgcmVzaXplQW5pbWF0aW9uVmlldydzIHNjYWxlIHRvIGVuc3VyZQotICAgIC8v
IHdlIGNvbnRpbnVlIHRvIGZpbGwgdGhlIHdpZHRoIG9mIHRoZSByZXNpemUgdGFyZ2V0LgotCi0g
ICAgaWYgKF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUpCi0gICAgICAgIHJldHVybjsKKy0g
KHZvaWQpX3NldFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQ6KEJPT0wpdXNlckNvbnRlbnRF
eHRlbnNpb25zRW5hYmxlZAoreworICAgIC8vIFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBh
dGliaWxpdHkgd2l0aCBpT1MgOS4KK30KIAotICAgIGF1dG8gbmV3Vmlld0xheW91dFNpemUgPSBb
c2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc107Ci0gICAgQ0dGbG9hdCByZXNp
emVBbmltYXRpb25WaWV3U2NhbGUgPSBfYW5pbWF0ZWRSZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0
aCAvIG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCk7Ci0gICAgW1tfcmVzaXplQW5pbWF0aW9uVmll
dyBsYXllcl0gc2V0U3VibGF5ZXJUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShyZXNp
emVBbmltYXRpb25WaWV3U2NhbGUsIHJlc2l6ZUFuaW1hdGlvblZpZXdTY2FsZSwgMSldOworLSAo
Qk9PTClfdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZAoreworICAgIC8vIFRoaXMgaXMga2Vw
dCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1MgOS4KKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotLSAodm9pZClfZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbgorLSAocGlkX3QpX3dlYlBy
b2Nlc3NJZGVudGlmaWVyCiB7Ci0gICAgaWYgKF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50
UmVjdHNGb3JVbnN0YWJsZVNjcm9sbFZpZXcpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxM
T1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9kaWRDb21taXRMYXllclRy
ZWU6XSAtIHJlY2VpdmVkIGEgY29tbWl0ICglbGx1KSB3aGlsZSBkZWZlcnJpbmcgdmlzaWJsZSBj
b250ZW50IHJlY3QgdXBkYXRlcyAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgJWQsIF9uZWVk
c1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lICVkICh3YW50cyBjb21t
aXQgJWxsdSksIHNpemVDaGFuZ2VkU2luY2VMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlICVk
LCBbX3Njcm9sbFZpZXcgaXNab29tQm91bmNpbmddICVkLCBfY3VycmVudGx5QWRqdXN0aW5nU2Ny
b2xsVmlld0luc2V0c0ZvcktleWJvYXJkICVkKSIsCi0gICAgICAgIHNlbGYsIF9wYWdlLT5pZGVu
dGlmaWVyKCkudG9VSW50NjQoKSwgbGF5ZXJUcmVlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JRCgp
LnRvVUludDY0KCksIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlLCBfbmVlZHNSZXNldFZpZXdT
dGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZSwgX2ZpcnN0UGFpbnRBZnRlckNvbW1pdExv
YWRUcmFuc2FjdGlvbklELnRvVUludDY0KCksIFtfY29udGVudFZpZXcgc2l6ZUNoYW5nZWRTaW5j
ZUxhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdLCBbX3Njcm9sbFZpZXcgaXNab29tQm91bmNp
bmddLCBfY3VycmVudGx5QWRqdXN0aW5nU2Nyb2xsVmlld0luc2V0c0ZvcktleWJvYXJkKTsKLSAg
ICB9CisgICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCisgICAgICAgIHJldHVybiAwOwogCi0gICAg
aWYgKF90aW1lT2ZGaXJzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29tbWl0
KSB7Ci0gICAgICAgIGF1dG8gdGltZVNpbmNlRmlyc3RSZXF1ZXN0V2l0aFBlbmRpbmdDb21taXQg
PSBNb25vdG9uaWNUaW1lOjpub3coKSAtICpfdGltZU9mRmlyc3RWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGVXaXRoUGVuZGluZ0NvbW1pdDsKLSAgICAgICAgaWYgKHRpbWVTaW5jZUZpcnN0UmVxdWVz
dFdpdGhQZW5kaW5nQ29tbWl0ID4gZGVsYXlCZWZvcmVOb0NvbW1pdHNMb2dnaW5nKQotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tX
ZWJWaWV3IF9kaWRDb21taXRMYXllclRyZWU6XSAtIGZpbmFsbHkgcmVjZWl2ZWQgY29tbWl0ICUu
MmZzIGFmdGVyIHZpc2libGUgY29udGVudCByZWN0IHVwZGF0ZSByZXF1ZXN0OyB0cmFuc2FjdGlv
bklEICVsbHUiLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIHRpbWVTaW5j
ZUZpcnN0UmVxdWVzdFdpdGhQZW5kaW5nQ29tbWl0LnZhbHVlKCksIGxheWVyVHJlZVRyYW5zYWN0
aW9uLnRyYW5zYWN0aW9uSUQoKS50b1VJbnQ2NCgpKTsKLSAgICAgICAgX3RpbWVPZkZpcnN0Vmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQgPSBXVEY6Om51bGxvcHQ7Ci0g
ICAgfQorICAgIHJldHVybiBfcGFnZS0+cHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KIAotICAgIF9s
YXN0VHJhbnNhY3Rpb25JRCA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKTsK
Ky0gKHBpZF90KV9wcm92aXNpb25hbFdlYlByb2Nlc3NJZGVudGlmaWVyCit7CisgICAgaWYgKCFb
c2VsZiBfaXNWYWxpZF0pCisgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFbc2VsZiB1c2Vz
U3RhbmRhcmRDb250ZW50Vmlld10pCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBwcm92aXNp
b25hbFBhZ2UgPSBfcGFnZS0+cHJvdmlzaW9uYWxQYWdlUHJveHkoKTsKKyAgICBpZiAoIXByb3Zp
c2lvbmFsUGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oVmlz
aWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1bV0tXZWJWaWV3ICIgPDwgX3BhZ2UtPmlkZW50aWZpZXIo
KSA8PCAiIF9kaWRDb21taXRMYXllclRyZWU6XSB0cmFuc2FjdGlvbklEICIgPDwgbGF5ZXJUcmVl
VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpIDw8ICIgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1v
ZGUgIiA8PCAoaW50KV9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlKTsKKyAgICByZXR1cm4gcHJv
dmlzaW9uYWxQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKK30KIAotICAgIGJv
b2wgbmVlZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMgPSBfcGFnZS0+dXBkYXRlTGF5b3V0Vmll
d3BvcnRQYXJhbWV0ZXJzKGxheWVyVHJlZVRyYW5zYWN0aW9uKTsKKy0gKEJPT0wpX3dlYlByb2Nl
c3NJc1Jlc3BvbnNpdmUKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnByb2Nlc3MoKS5pc1Jlc3BvbnNp
dmUoKTsKK30KIAotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6
OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgIFtzZWxm
IF9kaWRDb21taXRMYXllclRyZWVEdXJpbmdBbmltYXRlZFJlc2l6ZTpsYXllclRyZWVUcmFuc2Fj
dGlvbl07CistICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3MKK3sKKyAgICBpZiAoIVtzZWxm
IF9pc1ZhbGlkXSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChfcmVzaXplQW5p
bWF0aW9uVmlldykKLSAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgLVtXS1dlYlZp
ZXcgX2RpZENvbW1pdExheWVyVHJlZTpdIC0gZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSBpcyBO
b3RSZXNpemluZywgYnV0IHN0aWxsIGhhdmUgYSBsaXZlIHJlc2l6ZUFuaW1hdGlvblZpZXcgKHVu
cGFpcmVkIGJlZ2luL2VuZEFuaW1hdGVkUmVzaXplPykiLCBzZWxmKTsKLQotICAgIENHU2l6ZSBu
ZXdDb250ZW50U2l6ZSA9IHJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKCpfcGFnZSwgW19jb250
ZW50VmlldyBmcmFtZV0uc2l6ZSk7Ci0gICAgW19zY3JvbGxWaWV3IF9zZXRDb250ZW50U2l6ZVBy
ZXNlcnZpbmdDb250ZW50T2Zmc2V0RHVyaW5nUnViYmVyYmFuZDpuZXdDb250ZW50U2l6ZV07Ci0K
LSAgICBbX3Njcm9sbFZpZXcgc2V0TWluaW11bVpvb21TY2FsZTpsYXllclRyZWVUcmFuc2FjdGlv
bi5taW5pbXVtU2NhbGVGYWN0b3IoKV07Ci0gICAgW19zY3JvbGxWaWV3IHNldE1heGltdW1ab29t
U2NhbGU6bGF5ZXJUcmVlVHJhbnNhY3Rpb24ubWF4aW11bVNjYWxlRmFjdG9yKCldOwotICAgIFtf
c2Nyb2xsVmlldyBfc2V0Wm9vbUVuYWJsZWRJbnRlcm5hbDpsYXllclRyZWVUcmFuc2FjdGlvbi5h
bGxvd3NVc2VyU2NhbGluZygpXTsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGJv
b2wgaGFzRG9ja2VkSW5wdXRWaWV3ID0gIUNHUmVjdElzRW1wdHkoX2lucHV0Vmlld0JvdW5kcyk7
Ci0gICAgYm9vbCBpc1pvb21lZCA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnBhZ2VTY2FsZUZhY3Rv
cigpID4gbGF5ZXJUcmVlVHJhbnNhY3Rpb24uaW5pdGlhbFNjYWxlRmFjdG9yKCk7Ci0KLSAgICBi
b29sIHNjcm9sbGluZ05lZWRlZFRvUmV2ZWFsVUkgPSBmYWxzZTsKLSAgICBpZiAoX21heGltdW1V
bm9ic2N1cmVkU2l6ZU92ZXJyaWRlKSB7Ci0gICAgICAgIGF1dG8gdW5vYnNjdXJlZENvbnRlbnRS
ZWN0ID0gX3BhZ2UtPnVub2JzY3VyZWRDb250ZW50UmVjdCgpOwotICAgICAgICBhdXRvIG1heFVu
b2JzY3VyZWRTaXplID0gX3BhZ2UtPm1heGltdW1Vbm9ic2N1cmVkU2l6ZSgpOwotICAgICAgICBz
Y3JvbGxpbmdOZWVkZWRUb1JldmVhbFVJID0gbWF4VW5vYnNjdXJlZFNpemUud2lkdGgoKSA9PSB1
bm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKSAmJiBtYXhVbm9ic2N1cmVkU2l6ZS5oZWlnaHQo
KSA9PSB1bm9ic2N1cmVkQ29udGVudFJlY3QuaGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgYm9vbCBz
Y3JvbGxpbmdFbmFibGVkID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+aGFz
U2Nyb2xsYWJsZU1haW5GcmFtZSgpIHx8IGhhc0RvY2tlZElucHV0VmlldyB8fCBpc1pvb21lZCB8
fCBzY3JvbGxpbmdOZWVkZWRUb1JldmVhbFVJOwotICAgIFtfc2Nyb2xsVmlldyBfc2V0U2Nyb2xs
RW5hYmxlZEludGVybmFsOnNjcm9sbGluZ0VuYWJsZWRdOwotI2VuZGlmCi0gICAgaWYgKCFsYXll
clRyZWVUcmFuc2FjdGlvbi5zY2FsZVdhc1NldEJ5VUlQcm9jZXNzKCkgJiYgIVtfc2Nyb2xsVmll
dyBpc1pvb21pbmddICYmICFbX3Njcm9sbFZpZXcgaXNab29tQm91bmNpbmddICYmICFbX3Njcm9s
bFZpZXcgX2lzQW5pbWF0aW5nWm9vbV0gJiYgW19zY3JvbGxWaWV3IHpvb21TY2FsZV0gIT0gbGF5
ZXJUcmVlVHJhbnNhY3Rpb24ucGFnZVNjYWxlRmFjdG9yKCkpIHsKLSAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICIgdXBkYXRpbmcgc2Nyb2xsIHZpZXcgd2l0
aCBwYWdlU2NhbGVGYWN0b3IgIiA8PCBsYXllclRyZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0
b3IoKSk7Ci0gICAgICAgIFtfc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6bGF5ZXJUcmVlVHJhbnNh
Y3Rpb24ucGFnZVNjYWxlRmFjdG9yKCldOwotICAgIH0KLQotICAgIF92aWV3cG9ydE1ldGFUYWdX
aWR0aCA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnZpZXdwb3J0TWV0YVRhZ1dpZHRoKCk7Ci0gICAg
X3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhwbGljaXQgPSBsYXllclRyZWVUcmFuc2FjdGlvbi52
aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0KCk7Ci0gICAgX3ZpZXdwb3J0TWV0YVRhZ0Nh
bWVGcm9tSW1hZ2VEb2N1bWVudCA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnZpZXdwb3J0TWV0YVRh
Z0NhbWVGcm9tSW1hZ2VEb2N1bWVudCgpOwotICAgIF9pbml0aWFsU2NhbGVGYWN0b3IgPSBsYXll
clRyZWVUcmFuc2FjdGlvbi5pbml0aWFsU2NhbGVGYWN0b3IoKTsKLSAgICBpZiAoX3BhZ2UtPmlu
U3RhYmxlU3RhdGUoKSAmJiBsYXllclRyZWVUcmFuc2FjdGlvbi5pc0luU3RhYmxlU3RhdGUoKSAm
JiBbX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGNvdW50XSkgewotICAg
ICAgICBmb3IgKGRpc3BhdGNoX2Jsb2NrX3QgYWN0aW9uIGluIF9zdGFibGVTdGF0ZVByZXNlbnRh
dGlvblVwZGF0ZUNhbGxiYWNrcy5nZXQoKSkKLSAgICAgICAgICAgIGFjdGlvbigpOwotCi0gICAg
ICAgIFtfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgcmVtb3ZlQWxsT2Jq
ZWN0c107Ci0gICAgICAgIF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyA9
IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAoIVtfY29udGVudFZpZXcgX21heURpc2FibGVEb3VibGVU
YXBHZXN0dXJlc0R1cmluZ1NpbmdsZVRhcF0pCi0gICAgICAgIFtfY29udGVudFZpZXcgX3NldERv
dWJsZVRhcEdlc3R1cmVzRW5hYmxlZDpzZWxmLl9hbGxvd3NEb3VibGVUYXBHZXN0dXJlc107Ci0K
LSAgICBbc2VsZiBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOwotICAgIFtzZWxmIF9zZXRB
dm9pZHNVbnNhZmVBcmVhOmxheWVyVHJlZVRyYW5zYWN0aW9uLmF2b2lkc1Vuc2FmZUFyZWEoKV07
Ci0KLSAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICBfZ2VzdHVyZUNvbnRyb2xs
ZXItPnNldFJlbmRlclRyZWVTaXplKGxheWVyVHJlZVRyYW5zYWN0aW9uLnJlbmRlclRyZWVTaXpl
KCkpOwotCi0gICAgaWYgKF9uZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFp
bkZyYW1lICYmIGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKSA+PSBfZmlyc3RQ
YWludEFmdGVyQ29tbWl0TG9hZFRyYW5zYWN0aW9uSUQpIHsKLSAgICAgICAgX25lZWRzUmVzZXRW
aWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUgPSBOTzsKLSAgICAgICAgW19zY3Jv
bGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6W3NlbGYgX2luaXRpYWxDb250ZW50T2Zmc2V0Rm9yU2Ny
b2xsVmlld11dOwotICAgICAgICBpZiAoX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMg
JiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludCkKLSAgICAgICAgICAgIF9uYXZp
Z2F0aW9uU3RhdGUtPmRpZEZpcnN0UGFpbnQoKTsKLQotICAgICAgICBuZWVkVXBkYXRlVmlzaWJs
ZUNvbnRlbnRSZWN0cyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKF9maXJzdFRyYW5zYWN0aW9u
SURBZnRlclBhZ2VSZXN0b3JlICYmIGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQo
KSA+PSBfZmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQYWdlUmVzdG9yZS52YWx1ZSgpKSB7Ci0gICAg
ICAgIGlmIChfc2Nyb2xsT2Zmc2V0VG9SZXN0b3JlKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IHNjYWxlZFNjcm9sbE9mZnNldCA9IF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmUudmFs
dWUoKTsKLSAgICAgICAgICAgIF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmUgPSBXVEY6Om51bGxvcHQ7
Ci0KLSAgICAgICAgICAgIGlmIChhcmVFc3NlbnRpYWxseUVxdWFsQXNGbG9hdChjb250ZW50Wm9v
bVNjYWxlKHNlbGYpLCBfc2NhbGVUb1Jlc3RvcmUpKSB7Ci0gICAgICAgICAgICAgICAgc2NhbGVk
U2Nyb2xsT2Zmc2V0LnNjYWxlKF9zY2FsZVRvUmVzdG9yZSk7Ci0gICAgICAgICAgICAgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBjb250ZW50T2Zmc2V0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBz
Y2FsZWRTY3JvbGxPZmZzZXQgLSBXZWJDb3JlOjpGbG9hdFNpemUoX29ic2N1cmVkSW5zZXRzV2hl
blNhdmVkLmxlZnQoKSwgX29ic2N1cmVkSW5zZXRzV2hlblNhdmVkLnRvcCgpKTsKLQotICAgICAg
ICAgICAgICAgIGNoYW5nZUNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxW
aWV3LmdldCgpLCBjb250ZW50T2Zmc2V0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMpOwotICAgICAg
ICAgICAgICAgIF9jb21taXREaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24gPSBZRVM7Ci0gICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIG5lZWRVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzID0gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChfdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSkg
ewotICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB1bm9ic2N1cmVkQ2VudGVyVG9SZXN0
b3JlID0gX3Vub2JzY3VyZWRDZW50ZXJUb1Jlc3RvcmUudmFsdWUoKTsKLSAgICAgICAgICAgIF91
bm9ic2N1cmVkQ2VudGVyVG9SZXN0b3JlID0gV1RGOjpudWxsb3B0OwotCi0gICAgICAgICAgICBp
ZiAoYXJlRXNzZW50aWFsbHlFcXVhbEFzRmxvYXQoY29udGVudFpvb21TY2FsZShzZWxmKSwgX3Nj
YWxlVG9SZXN0b3JlKSkgewotICAgICAgICAgICAgICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdCA9
IFVJRWRnZUluc2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgX29ic2N1cmVkSW5zZXRzKTsKLSAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFNpemUgdW5vYnNjdXJlZENvbnRlbnRTaXplQXRO
ZXdTY2FsZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSh1bm9ic2N1cmVkUmVjdC5zaXplKSAvIF9zY2Fs
ZVRvUmVzdG9yZTsKLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRvcExlZnRJ
bkRvY3VtZW50Q29vcmRpbmF0ZXMgPSB1bm9ic2N1cmVkQ2VudGVyVG9SZXN0b3JlIC0gdW5vYnNj
dXJlZENvbnRlbnRTaXplQXROZXdTY2FsZSAvIDI7Ci0KLSAgICAgICAgICAgICAgICB0b3BMZWZ0
SW5Eb2N1bWVudENvb3JkaW5hdGVzLnNjYWxlKF9zY2FsZVRvUmVzdG9yZSk7Ci0gICAgICAgICAg
ICAgICAgdG9wTGVmdEluRG9jdW1lbnRDb29yZGluYXRlcy5tb3ZlQnkoV2ViQ29yZTo6RmxvYXRQ
b2ludCgtX29ic2N1cmVkSW5zZXRzLmxlZnQsIC1fb2JzY3VyZWRJbnNldHMudG9wKSk7CisgICAg
X3BhZ2UtPnByb2Nlc3MoKS50ZXJtaW5hdGUoKTsKK30KIAotICAgICAgICAgICAgICAgIGNoYW5n
ZUNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxWaWV3LmdldCgpLCB0b3BM
ZWZ0SW5Eb2N1bWVudENvb3JkaW5hdGVzKTsKLSAgICAgICAgICAgIH0KKy0gKFdLTmF2aWdhdGlv
biAqKV9yZWxvYWRXaXRob3V0Q29udGVudEJsb2NrZXJzCit7CisgICAgcmV0dXJuIHdyYXBwZXIo
X3BhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkRpc2FibGVDb250ZW50QmxvY2tl
cnMpKTsKK30KIAotICAgICAgICAgICAgbmVlZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMgPSB0
cnVlOwotICAgICAgICB9CistIChXS05hdmlnYXRpb24gKilfcmVsb2FkRXhwaXJlZE9ubHkKK3sK
KyAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6
RXhwaXJlZE9ubHkpKTsKK30KIAotICAgICAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQotICAg
ICAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5kaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsK
Ky0gKHZvaWQpX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGUKK3sKKyAgICBSZWY8
V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk+IHByb3RlY3RlZFByb2Nlc3NQcm94eShfcGFnZS0+cHJv
Y2VzcygpKTsKKyAgICBwcm90ZWN0ZWRQcm9jZXNzUHJveHktPnJlcXVlc3RUZXJtaW5hdGlvbihX
ZWJLaXQ6OlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6UmVxdWVzdGVkQnlDbGllbnQpOwogCi0g
ICAgICAgIF9maXJzdFRyYW5zYWN0aW9uSURBZnRlclBhZ2VSZXN0b3JlID0gV1RGOjpudWxsb3B0
OworICAgIGlmIChhdXRvKiBwcm92aXNpb25hbFBhZ2VQcm94eSA9IF9wYWdlLT5wcm92aXNpb25h
bFBhZ2VQcm94eSgpKSB7CisgICAgICAgIFJlZjxXZWJLaXQ6OldlYlByb2Nlc3NQcm94eT4gcHJv
dGVjdGVkUHJvY2Vzc1Byb3h5KHByb3Zpc2lvbmFsUGFnZVByb3h5LT5wcm9jZXNzKCkpOworICAg
ICAgICBwcm90ZWN0ZWRQcm9jZXNzUHJveHktPnJlcXVlc3RUZXJtaW5hdGlvbihXZWJLaXQ6OlBy
b2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6UmVxdWVzdGVkQnlDbGllbnQpOwogICAgIH0KLQotICAg
IGlmIChuZWVkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cykKLSAgICAgICAgW3NlbGYgX3NjaGVk
dWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKLQotICAgIGlmIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSogc2Nyb2xsUGVyZkRhdGEgPSBfcGFnZS0+
c2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhKCkpCi0gICAgICAgIHNjcm9sbFBlcmZEYXRhLT5kaWRD
b21taXRMYXllclRyZWUoW3NlbGYgdmlzaWJsZVJlY3RJblZpZXdDb29yZGluYXRlc10pOwogfQog
Ci0tICh2b2lkKV9sYXllclRyZWVDb21taXRDb21wbGV0ZQorLSAoQ0dSZWN0KV9jb252ZXJ0UmVj
dEZyb21Sb290Vmlld0Nvb3JkaW5hdGVzOihDR1JlY3QpcmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cwogewotICAgIF9jb21taXREaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24gPSBOTzsKKyAgICAvLyBG
SVhNRTogSXQgc2hvdWxkIGJlIGVhc2llciB0byB0YWxrIGFib3V0IFdLV2ViVmlldyBjb29yZGlu
YXRlcyBpbiBhIGNvbnNpc3RlbnQgYW5kIGNyb3NzLXBsYXRmb3JtIHdheS4KKyAgICAvLyBDdXJy
ZW50bHksIG5laXRoZXIgInJvb3QgdmlldyIgbm9yICJ3aW5kb3ciIG1lYW4gIldLV2ViVmlldyBj
b29yZGluYXRlcyIgb24gYm90aCBwbGF0Zm9ybXMuCisgICAgLy8gU2VlIGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE5MzY0OSBhbmQgcmVsYXRlZCBidWdzLgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMg
ZnJvbVZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyNlbHNlCisgICAgcmV0dXJuIHJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXM7CisjZW5kaWYKIH0KIAotLSAodm9pZClfY291bGROb3RSZXN0b3Jl
UGFnZVN0YXRlCistIChDR1JlY3QpX2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nvb3JkaW5hdGVzOihD
R1JlY3QpcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzCiB7Ci0gICAgLy8gVGhlIGdlc3R1cmVDb250
cm9sbGVyIG1heSBiZSB3YWl0aW5nIGZvciB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIGJlIHJlc3Rv
cmVkCi0gICAgLy8gaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBzd2lwZSBzbmFwc2hvdC4gU2luY2Ug
dGhlIHNjcm9sbCBwb3NpdGlvbiBjb3VsZCBub3QgYmUKLSAgICAvLyByZXN0b3JlZCwgdGVsbCB0
aGUgZ2VzdHVyZUNvbnRyb2xsZXIgaXQgd2FzIHJlc3RvcmVkIHNvIHRoYXQgaXQgbm8gbG9uZ2Vy
IHdhaXRzCi0gICAgLy8gZm9yIGl0LgotICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAg
ICAgIF9nZXN0dXJlQ29udHJvbGxlci0+ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6cmVjdElu
V2ViVmlld0Nvb3JkaW5hdGVzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOworI2Vsc2UKKyAg
ICByZXR1cm4gcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzOworI2VuZGlmCiB9CiAKLS0gKHZvaWQp
X3Jlc3RvcmVQYWdlU2Nyb2xsUG9zaXRpb246KE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+
KXNjcm9sbFBvc2l0aW9uIHNjcm9sbE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClzY3JvbGxP
cmlnaW4gcHJldmlvdXNPYnNjdXJlZEluc2V0OihXZWJDb3JlOjpGbG9hdEJveEV4dGVudClvYnNj
dXJlZEluc2V0cyBzY2FsZTooZG91YmxlKXNjYWxlCistICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0
Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+ICopKWNvbXBs
ZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdl
YktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKLSAgICAgICAg
Ly8gRGVmZXIgc2Nyb2xsIHBvc2l0aW9uIHJlc3RvcmF0aW9uIHVudGlsIGFmdGVyIHRoZSBjdXJy
ZW50IHJlc2l6ZSBjb21wbGV0ZXMuCi0gICAgICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHJldGFp
bmVkU2VsZiA9IHNlbGY7Ci0gICAgICAgIF9jYWxsYmFja3NEZWZlcnJlZER1cmluZ1Jlc2l6ZS5h
cHBlbmQoW3JldGFpbmVkU2VsZiwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgb2JzY3Vy
ZWRJbnNldHMsIHNjYWxlXSB7Ci0gICAgICAgICAgICBbcmV0YWluZWRTZWxmIF9yZXN0b3JlUGFn
ZVNjcm9sbFBvc2l0aW9uOnNjcm9sbFBvc2l0aW9uIHNjcm9sbE9yaWdpbjpzY3JvbGxPcmlnaW4g
cHJldmlvdXNPYnNjdXJlZEluc2V0Om9ic2N1cmVkSW5zZXRzIHNjYWxlOnNjYWxlXTsKLSAgICAg
ICAgfSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFu
ZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihAW10pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCiAKLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3XSkKLSAgICAgICAgcmV0dXJuOworICAgIENHUmVjdCByZWN0SW5Sb290Vmll
d0Nvb3JkaW5hdGVzID0gW3NlbGYgX2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nvb3JkaW5hdGVzOnJl
Y3RJbldlYlZpZXdDb29yZGluYXRlc107CisgICAgYXV0byB3ZWFrU2VsZiA9IFdlYWtPYmpDUHRy
PFdLV2ViVmlldz4oc2VsZik7CisgICAgX3BhZ2UtPnRleHRJbnB1dENvbnRleHRzSW5SZWN0KHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIFt3ZWFrU2VsZiwgY2FwdHVyZWRDb21wbGV0aW9uSGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6RWxlbWVudENvbnRleHQ+JiBjb250ZXh0cykgeworICAgICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IGVsZW1lbnRzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OmNvbnRleHRzLnNpemUoKV0pOwogCi0gICAgX2ZpcnN0VHJhbnNhY3Rp
b25JREFmdGVyUGFnZVJlc3RvcmUgPSBkb3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+ZHJhd2luZ0FyZWEoKSkubmV4dExheWVyVHJlZVRyYW5z
YWN0aW9uSUQoKTsKLSAgICBpZiAoc2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIF9zY3JvbGxPZmZz
ZXRUb1Jlc3RvcmUgPSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsT2Zmc2V0RnJvbVBv
c2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQoc2Nyb2xsUG9zaXRpb24udmFsdWUoKSksIFdlYkNv
cmU6OnRvRmxvYXRTaXplKHNjcm9sbE9yaWdpbikpOwotICAgIGVsc2UKLSAgICAgICAgX3Njcm9s
bE9mZnNldFRvUmVzdG9yZSA9IFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBzdHJvbmdTZWxm
ID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29udGV4dCA6IGNv
bnRleHRzKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCBjb250ZXh0V2l0
aFdlYlZpZXdCb3VuZGluZ1JlY3QgPSBjb250ZXh0OworICAgICAgICAgICAgY29udGV4dFdpdGhX
ZWJWaWV3Qm91bmRpbmdSZWN0LmJvdW5kaW5nUmVjdCA9IFtzdHJvbmdTZWxmIF9jb252ZXJ0UmVj
dEZyb21Sb290Vmlld0Nvb3JkaW5hdGVzOmNvbnRleHQuYm91bmRpbmdSZWN0XTsKKyAgICAgICAg
ICAgIFtlbGVtZW50cyBhZGRPYmplY3Q6YWRvcHROUyhbW19XS1RleHRJbnB1dENvbnRleHQgYWxs
b2NdIF9pbml0V2l0aFRleHRJbnB1dENvbnRleHQ6Y29udGV4dFdpdGhXZWJWaWV3Qm91bmRpbmdS
ZWN0XSkuZ2V0KCldOworICAgICAgICB9CiAKLSAgICBfb2JzY3VyZWRJbnNldHNXaGVuU2F2ZWQg
PSBvYnNjdXJlZEluc2V0czsKLSAgICBfc2NhbGVUb1Jlc3RvcmUgPSBzY2FsZTsKKyAgICAgICAg
Y2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihlbGVtZW50cy5nZXQoKSk7CisgICAgfSk7CiB9CiAK
LS0gKHZvaWQpX3Jlc3RvcmVQYWdlU3RhdGVUb1Vub2JzY3VyZWRDZW50ZXI6KE9wdGlvbmFsPFdl
YkNvcmU6OkZsb2F0UG9pbnQ+KWNlbnRlciBzY2FsZTooZG91YmxlKXNjYWxlCistICh2b2lkKV9m
b2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKil0ZXh0SW5wdXRDb250
ZXh0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7
Ci0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdlYktpdDo6RHluYW1pY1Zp
ZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKLSAgICAgICAgLy8gRGVmZXIgc2Nyb2xs
IHBvc2l0aW9uIHJlc3RvcmF0aW9uIHVudGlsIGFmdGVyIHRoZSBjdXJyZW50IHJlc2l6ZSBjb21w
bGV0ZXMuCi0gICAgICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHJldGFpbmVkU2VsZiA9IHNlbGY7
Ci0gICAgICAgIF9jYWxsYmFja3NEZWZlcnJlZER1cmluZ1Jlc2l6ZS5hcHBlbmQoW3JldGFpbmVk
U2VsZiwgY2VudGVyLCBzY2FsZV0gewotICAgICAgICAgICAgW3JldGFpbmVkU2VsZiBfcmVzdG9y
ZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjpjZW50ZXIgc2NhbGU6c2NhbGVdOwotICAgICAg
ICB9KTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICghW3NlbGYgdXNlc1N0YW5k
YXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZp
ZXddKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfZmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQYWdl
UmVzdG9yZSA9IGRvd25jYXN0PFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eT4oKl9wYWdlLT5kcmF3aW5nQXJlYSgpKS5uZXh0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpOwot
ICAgIF91bm9ic2N1cmVkQ2VudGVyVG9SZXN0b3JlID0gY2VudGVyOwotCi0gICAgX3NjYWxlVG9S
ZXN0b3JlID0gc2NhbGU7Ci19Ci0KLS0gKFJlZlB0cjxXZWJLaXQ6OlZpZXdTbmFwc2hvdD4pX3Rh
a2VWaWV3U25hcHNob3QKLXsKLSNpZiBIQVZFKENPUkVfQU5JTUFUSU9OX1JFTkRFUl9TRVJWRVIp
Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGUgPSBXZWJDb3JlOjpzY3JlZW5TY2FsZUZhY3RvcigpOwot
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzbmFwc2hvdFNpemUoc2VsZi5ib3VuZHMuc2l6ZSk7Ci0g
ICAgc25hcHNob3RTaXplLnNjYWxlKGRldmljZVNjYWxlKTsKLQotICAgIENBVHJhbnNmb3JtM0Qg
dHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShkZXZpY2VTY2FsZSwgZGV2aWNlU2Nh
bGUsIDEpOwotCi0jaWYgSEFWRShJT1NVUkZBQ0UpCi0jaWYgSEFWRShJT1NVUkZBQ0VfUkdCMTAp
Ci0gICAgV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQgc25hcHNob3RGb3JtYXQgPSBXZWJDb3Jl
OjpzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoKSA/IFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9y
bWF0OjpSR0IxMCA6IFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0OjpSR0JBOwotI2Vsc2UKLSAg
ICBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdCBzbmFwc2hvdEZvcm1hdCA9IFdlYkNvcmU6OklP
U3VyZmFjZTo6Rm9ybWF0OjpSR0JBOwogI2VuZGlmCi0gICAgYXV0byBzdXJmYWNlID0gV2ViQ29y
ZTo6SU9TdXJmYWNlOjpjcmVhdGUoV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKHNuYXBzaG90U2l6
ZSksIFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCksIHNuYXBzaG90Rm9ybWF0KTsKLSAgICBp
ZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIENBUmVuZGVyU2VydmVy
UmVuZGVyTGF5ZXJXaXRoVHJhbnNmb3JtKE1BQ0hfUE9SVF9OVUxMLCBzZWxmLmxheWVyLmNvbnRl
eHQuY29udGV4dElkLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihzZWxmLmxheWVyKSwgc3Vy
ZmFjZS0+c3VyZmFjZSgpLCAwLCAwLCAmdHJhbnNmb3JtKTsKLQotI2lmIEhBVkUoSU9TVVJGQUNF
X0FDQ0VMRVJBVE9SKQotICAgIFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0IGNvbXByZXNzZWRG
b3JtYXQgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6WVVWNDIyOwotICAgIGlmIChXZWJD
b3JlOjpJT1N1cmZhY2U6OmFsbG93Q29udmVyc2lvbkZyb21Gb3JtYXRUb0Zvcm1hdChzbmFwc2hv
dEZvcm1hdCwgY29tcHJlc3NlZEZvcm1hdCkpIHsKLSAgICAgICAgYXV0byB2aWV3U25hcHNob3Qg
PSBXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6Y3JlYXRlKG51bGxwdHIpOwotICAgICAgICBXZWJDb3Jl
OjpJT1N1cmZhY2U6OmNvbnZlcnRUb0Zvcm1hdChXVEZNb3ZlKHN1cmZhY2UpLCBXZWJDb3JlOjpJ
T1N1cmZhY2U6OkZvcm1hdDo6WVVWNDIyLCBbdmlld1NuYXBzaG90ID0gdmlld1NuYXBzaG90LmNv
cHlSZWYoKV0oc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gY29udmVydGVkU3Vy
ZmFjZSkgewotICAgICAgICAgICAgaWYgKGNvbnZlcnRlZFN1cmZhY2UpCi0gICAgICAgICAgICAg
ICAgdmlld1NuYXBzaG90LT5zZXRTdXJmYWNlKFdURk1vdmUoY29udmVydGVkU3VyZmFjZSkpOwot
ICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gdmlld1NuYXBzaG90OwotICAgIH0KLSNlbmRp
ZiAvLyBIQVZFKElPU1VSRkFDRV9BQ0NFTEVSQVRPUikKIAotICAgIHJldHVybiBXZWJLaXQ6OlZp
ZXdTbmFwc2hvdDo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkpOwotI2Vsc2UgLy8gSEFWRShJT1NV
UkZBQ0UpCi0gICAgdWludDMyX3Qgc2xvdElEID0gW1dlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6
OnNuYXBzaG90dGluZ0NvbnRleHQoKSBjcmVhdGVJbWFnZVNsb3Q6c25hcHNob3RTaXplIGhhc0Fs
cGhhOllFU107CisgICAgYXV0byB3ZWJDb250ZXh0ID0gW3RleHRJbnB1dENvbnRleHQgX3RleHRJ
bnB1dENvbnRleHRdOworICAgIGlmICh3ZWJDb250ZXh0LndlYlBhZ2VJZGVudGlmaWVyICE9IF9w
YWdlLT53ZWJQYWdlSUQoKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFy
Z3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlRoZSBwcm92aWRlZCBfV0tUZXh0SW5wdXRDb250ZXh0
IHdhcyBub3QgY3JlYXRlZCBieSB0aGlzIFdLV2ViVmlldy4iXTsKIAotICAgIGlmICghc2xvdElE
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBbc2VsZiBiZWNvbWVGaXJzdFJlc3BvbmRl
cl07CiAKLSAgICBDQVJlbmRlclNlcnZlckNhcHR1cmVMYXllcldpdGhUcmFuc2Zvcm0oTUFDSF9Q
T1JUX05VTEwsIHNlbGYubGF5ZXIuY29udGV4dC5jb250ZXh0SWQsICh1aW50NjRfdClzZWxmLmxh
eWVyLCBzbG90SUQsIDAsIDAsICZ0cmFuc2Zvcm0pOwotICAgIFdlYkNvcmU6OkludFNpemUgaW1h
Z2VTaXplID0gV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShzbmFw
c2hvdFNpemUpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNyZWF0ZShzbG90
SUQsIGltYWdlU2l6ZSwgKGltYWdlU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0jZW5k
aWYgLy8gSEFWRShJT1NVUkZBQ0UpCi0jZWxzZSAvLyBIQVZFKENPUkVfQU5JTUFUSU9OX1JFTkRF
Ul9TRVJWRVIpCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKKyAgICBfcGFnZS0+Zm9jdXNU
ZXh0SW5wdXRDb250ZXh0KHdlYkNvbnRleHQsIFtjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0g
bWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBzdWNjZXNzKSB7CisgICAgICAg
IGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoc3VjY2Vzcyk7CisgICAgfSk7CiB9CiAKLS0gKHZv
aWQpX3pvb21Ub1BvaW50OihXZWJDb3JlOjpGbG9hdFBvaW50KXBvaW50IGF0U2NhbGU6KGRvdWJs
ZSlzY2FsZSBhbmltYXRlZDooQk9PTClhbmltYXRlZAorLSAodm9pZClfdGFrZVBERlNuYXBzaG90
V2l0aENvbmZpZ3VyYXRpb246KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25m
aWd1cmF0aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIENGVGltZUludGVydmFsIGR1cmF0aW9uID0gMDsK
LSAgICBDR0Zsb2F0IHpvb21TY2FsZSA9IGNvbnRlbnRab29tU2NhbGUoc2VsZik7Ci0KLSAgICBp
ZiAoYW5pbWF0ZWQpIHsKLSAgICAgICAgY29uc3QgZG91YmxlIG1heGltdW1ab29tRHVyYXRpb24g
PSAwLjQ7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBtaW5pbXVtWm9vbUR1cmF0aW9uID0gMC4xOwot
ICAgICAgICBjb25zdCBkb3VibGUgem9vbUR1cmF0aW9uRmFjdG9yID0gMC4zOwotCi0gICAgICAg
IGR1cmF0aW9uID0gc3RkOjptaW4oZmFicyhsb2coem9vbVNjYWxlKSAtIGxvZyhzY2FsZSkpICog
em9vbUR1cmF0aW9uRmFjdG9yICsgbWluaW11bVpvb21EdXJhdGlvbiwgbWF4aW11bVpvb21EdXJh
dGlvbik7CisgICAgV0tQREZDb25maWd1cmF0aW9uICpwZGZDb25maWd1cmF0aW9uID0gbmlsOwor
ICAgIGlmIChzbmFwc2hvdENvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgcGRmQ29uZmlndXJhdGlv
biA9IFtbW1dLUERGQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICBwZGZDb25maWd1cmF0aW9uLnJlY3QgPSBzbmFwc2hvdENvbmZpZ3VyYXRpb24ucmVjdDsK
ICAgICB9CiAKLSAgICBpZiAoc2NhbGUgIT0gem9vbVNjYWxlKQotICAgICAgICBfcGFnZS0+d2ls
bFN0YXJ0VXNlclRyaWdnZXJlZFpvb21pbmcoKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShWaXNp
YmxlUmVjdHMsIHN0cmVhbSA8PCAiX3pvb21Ub1BvaW50OiIgPDwgcG9pbnQgPDwgIiBzY2FsZTog
IiA8PCBzY2FsZSA8PCAiIGR1cmF0aW9uOiIgPDwgZHVyYXRpb24pOwotCi0gICAgW19zY3JvbGxW
aWV3IF96b29tVG9DZW50ZXI6cG9pbnQgc2NhbGU6c2NhbGUgZHVyYXRpb246ZHVyYXRpb25dOwor
ICAgIFtzZWxmIGNyZWF0ZVBERldpdGhDb25maWd1cmF0aW9uOnBkZkNvbmZpZ3VyYXRpb24gY29t
cGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCi0tICh2b2lkKV96b29tVG9S
ZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBhdFNjYWxlOihkb3VibGUpc2NhbGUg
b3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRl
ZAorLSAoTlNEYXRhICopX3Nlc3Npb25TdGF0ZURhdGEKIHsKLSAgICAvLyBGSVhNRTogU29tZSBv
ZiB0aGlzIGNvdWxkIGJlIHNoYXJlZCB3aXRoIF9zY3JvbGxUb1JlY3QuCi0gICAgY29uc3QgZG91
YmxlIHZpc2libGVSZWN0U2NhbGVDaGFuZ2UgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpIC8gc2Nh
bGU7Ci0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVSZWN0KFtzZWxmIGNvbnZl
cnRSZWN0OnNlbGYuYm91bmRzIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddKTsKLSAg
ICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QgdW5vYnNjdXJlZFJlY3QoW3NlbGYgX2NvbnRlbnRS
ZWN0Rm9yVXNlckludGVyYWN0aW9uXSk7Ci0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUg
dG9wTGVmdE9ic2N1cmVkSW5zZXRBZnRlclpvb20oKHVub2JzY3VyZWRSZWN0Lm1pblhNaW5ZQ29y
bmVyKCkgLSB2aXNpYmxlUmVjdC5taW5YTWluWUNvcm5lcigpKSAqIHZpc2libGVSZWN0U2NhbGVD
aGFuZ2UpOwotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSBib3R0b21SaWdodE9ic2N1cmVk
SW5zZXRBZnRlclpvb20oKHZpc2libGVSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSB1bm9ic2N1cmVk
UmVjdC5tYXhYTWF4WUNvcm5lcigpKSAqIHZpc2libGVSZWN0U2NhbGVDaGFuZ2UpOwotCi0gICAg
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplIHVub2JzY3VyZWRSZWN0U2l6ZUFmdGVyWm9vbSh1bm9i
c2N1cmVkUmVjdC5zaXplKCkgKiB2aXNpYmxlUmVjdFNjYWxlQ2hhbmdlKTsKLQotICAgIC8vIENl
bnRlciB0byB0aGUgdGFyZ2V0IHJlY3QuCi0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCB1bm9ic2N1
cmVkUmVjdExvY2F0aW9uQWZ0ZXJab29tID0gdGFyZ2V0UmVjdC5sb2NhdGlvbigpIC0gKHVub2Jz
Y3VyZWRSZWN0U2l6ZUFmdGVyWm9vbSAtIHRhcmdldFJlY3Quc2l6ZSgpKSAqIDAuNTsKLQotICAg
IC8vIENlbnRlciB0byB0aGUgdGFwIHBvaW50IGluc3RlYWQgaW4gY2FzZSB0aGUgdGFyZ2V0IHJl
Y3Qgd29uJ3QgZml0IGluIGEgZGlyZWN0aW9uLgotICAgIGlmICh0YXJnZXRSZWN0LndpZHRoKCkg
PiB1bm9ic2N1cmVkUmVjdFNpemVBZnRlclpvb20ud2lkdGgoKSkKLSAgICAgICAgdW5vYnNjdXJl
ZFJlY3RMb2NhdGlvbkFmdGVyWm9vbS5zZXRYKG9yaWdpbi54KCkgLSB1bm9ic2N1cmVkUmVjdFNp
emVBZnRlclpvb20ud2lkdGgoKSAvIDIpOwotICAgIGlmICh0YXJnZXRSZWN0LmhlaWdodCgpID4g
dW5vYnNjdXJlZFJlY3RTaXplQWZ0ZXJab29tLmhlaWdodCgpKQotICAgICAgICB1bm9ic2N1cmVk
UmVjdExvY2F0aW9uQWZ0ZXJab29tLnNldFkob3JpZ2luLnkoKSAtIHVub2JzY3VyZWRSZWN0U2l6
ZUFmdGVyWm9vbS5oZWlnaHQoKSAvIDIpOwotCi0gICAgLy8gV2UgaGF2ZSBjb21wdXRlZCB3aGVy
ZSB3ZSB3YW50IHRoZSB1bm9ic2N1cmVkIHJlY3QgdG8gYmUuIE5vdyBhZGp1c3QgZm9yIHRoZSBv
YnNjdXJpbmcgaW5zZXRzLgotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlUmVjdEFmdGVy
Wm9vbSh1bm9ic2N1cmVkUmVjdExvY2F0aW9uQWZ0ZXJab29tLCB1bm9ic2N1cmVkUmVjdFNpemVB
ZnRlclpvb20pOwotICAgIHZpc2libGVSZWN0QWZ0ZXJab29tLm1vdmUoLXRvcExlZnRPYnNjdXJl
ZEluc2V0QWZ0ZXJab29tKTsKLSAgICB2aXNpYmxlUmVjdEFmdGVyWm9vbS5leHBhbmQodG9wTGVm
dE9ic2N1cmVkSW5zZXRBZnRlclpvb20gKyBib3R0b21SaWdodE9ic2N1cmVkSW5zZXRBZnRlclpv
b20pOwotCi0gICAgW3NlbGYgX3pvb21Ub1BvaW50OnZpc2libGVSZWN0QWZ0ZXJab29tLmNlbnRl
cigpIGF0U2NhbGU6c2NhbGUgYW5pbWF0ZWQ6YW5pbWF0ZWRdOworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBub3QgdXNlIHRoZSBsZWdhY3kgc2Vzc2lvbiBzdGF0ZSBlbmNvZGVyLgorICAgIHJl
dHVybiB3cmFwcGVyKFdlYktpdDo6ZW5jb2RlTGVnYWN5U2Vzc2lvblN0YXRlKF9wYWdlLT5zZXNz
aW9uU3RhdGUoKSkpOwogfQogCi1zdGF0aWMgV2ViQ29yZTo6RmxvYXRQb2ludCBjb25zdHJhaW5D
b250ZW50T2Zmc2V0KFdlYkNvcmU6OkZsb2F0UG9pbnQgY29udGVudE9mZnNldCwgV2ViQ29yZTo6
RmxvYXRTaXplIGNvbnRlbnRTaXplLCBXZWJDb3JlOjpGbG9hdFNpemUgdW5vYnNjdXJlZENvbnRl
bnRTaXplKQorLSAoX1dLU2Vzc2lvblN0YXRlICopX3Nlc3Npb25TdGF0ZQogewotICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSBtYXhpbXVtQ29udGVudE9mZnNldCA9IGNvbnRlbnRTaXplIC0gdW5vYnNj
dXJlZENvbnRlbnRTaXplOwotICAgIHJldHVybiBjb250ZW50T2Zmc2V0LmNvbnN0cmFpbmVkQmV0
d2VlbihXZWJDb3JlOjpGbG9hdFBvaW50KCksIFdlYkNvcmU6OkZsb2F0UG9pbnQobWF4aW11bUNv
bnRlbnRPZmZzZXQpKTsKKyAgICByZXR1cm4gW1tbX1dLU2Vzc2lvblN0YXRlIGFsbG9jXSBfaW5p
dFdpdGhTZXNzaW9uU3RhdGU6X3BhZ2UtPnNlc3Npb25TdGF0ZSgpXSBhdXRvcmVsZWFzZV07CiB9
CiAKLS0gKHZvaWQpX3Njcm9sbFRvQ29udGVudFNjcm9sbFBvc2l0aW9uOihXZWJDb3JlOjpGbG9h
dFBvaW50KXNjcm9sbFBvc2l0aW9uIHNjcm9sbE9yaWdpbjooV2ViQ29yZTo6SW50UG9pbnQpc2Ny
b2xsT3JpZ2luCistIChfV0tTZXNzaW9uU3RhdGUgKilfc2Vzc2lvblN0YXRlV2l0aEZpbHRlcjoo
Qk9PTCAoXikoV0tCYWNrRm9yd2FyZExpc3RJdGVtICppdGVtKSlmaWx0ZXIKIHsKLSAgICBpZiAo
X2NvbW1pdERpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbiB8fCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRl
TW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmZzZXQg
PSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uLCB0b0Zsb2F0U2l6ZShzY3JvbGxPcmlnaW4pKTsKLQotICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgc2NhbGVkT2Zmc2V0ID0gY29udGVudE9mZnNldDsKLSAgICBDR0Zsb2F0IHpvb21T
Y2FsZSA9IGNvbnRlbnRab29tU2NhbGUoc2VsZik7Ci0gICAgc2NhbGVkT2Zmc2V0LnNjYWxlKHpv
b21TY2FsZSk7Ci0KLSAgICBDR1BvaW50IGNvbnRlbnRPZmZzZXRJblNjcm9sbFZpZXdDb29yZGlu
YXRlcyA9IFtzZWxmIF9jb250ZW50T2Zmc2V0QWRqdXN0ZWRGb3JPYnNjdXJlZEluc2V0OnNjYWxl
ZE9mZnNldF07Ci0gICAgY29udGVudE9mZnNldEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzID0gY29u
dGVudE9mZnNldEJvdW5kZWRJblZhbGlkUmFuZ2UoX3Njcm9sbFZpZXcuZ2V0KCksIGNvbnRlbnRP
ZmZzZXRJblNjcm9sbFZpZXdDb29yZGluYXRlcyk7CisgICAgV2ViS2l0OjpTZXNzaW9uU3RhdGUg
c2Vzc2lvblN0YXRlID0gX3BhZ2UtPnNlc3Npb25TdGF0ZShbZmlsdGVyXShXZWJLaXQ6OldlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pIHsKKyAgICAgICAgaWYgKCFmaWx0ZXIpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFtfc2Nyb2xsVmlldyBfc3RvcFNjcm9sbGluZ0FuZFpv
b21pbmdBbmltYXRpb25zXTsKKyAgICAgICAgcmV0dXJuIChib29sKWZpbHRlcih3cmFwcGVyKGl0
ZW0pKTsKKyAgICB9KTsKIAotICAgIGlmICghQ0dQb2ludEVxdWFsVG9Qb2ludChjb250ZW50T2Zm
c2V0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMsIFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XSkp
Ci0gICAgICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmNvbnRlbnRPZmZzZXRJblNj
cm9sbFZpZXdDb29yZGluYXRlc107Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGhhdmVu
J3QgY2hhbmdlZCBhbnl0aGluZywgdGhlcmUgd291bGQgbm90IGJlIGFueSBWaXNpYmxlQ29udGVu
dFJlY3QgdXBkYXRlIHNlbnQgdG8gdGhlIGNvbnRlbnQuCi0gICAgICAgIC8vIFRoZSBXZWJQcm9j
ZXNzIHdvdWxkIGtlZXAgdGhlIGludmFsaWQgY29udGVudE9mZnNldCBhcyBpdHMgc2Nyb2xsIHBv
c2l0aW9uLgotICAgICAgICAvLyBUbyBzeW5jaHJvbml6ZSB0aGUgV2ViUHJvY2VzcyB3aXRoIHdo
YXQgaXMgb24gc2NyZWVuLCB3ZSBzZW5kIHRoZSBWaXNpYmxlQ29udGVudFJlY3QgYWdhaW4uCi0g
ICAgICAgIF9wYWdlLT5yZXNlbmRMYXN0VmlzaWJsZUNvbnRlbnRSZWN0cygpOwotICAgIH0KKyAg
ICByZXR1cm4gW1tbX1dLU2Vzc2lvblN0YXRlIGFsbG9jXSBfaW5pdFdpdGhTZXNzaW9uU3RhdGU6
c2Vzc2lvblN0YXRlXSBhdXRvcmVsZWFzZV07CiB9CiAKLS0gKEJPT0wpX3Njcm9sbFRvUmVjdDoo
V2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgb3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50
KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5j
ZQorLSAodm9pZClfcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhOihOU0RhdGEgKilzZXNzaW9u
U3RhdGVEYXRhCiB7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHVub2JzY3VyZWRDb250ZW50UmVj
dChbc2VsZiBfY29udGVudFJlY3RGb3JVc2VySW50ZXJhY3Rpb25dKTsKLSAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IHVub2JzY3VyZWRDb250ZW50T2Zmc2V0ID0gdW5vYnNjdXJlZENvbnRlbnRSZWN0
LmxvY2F0aW9uKCk7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIGNvbnRlbnRTaXplKFtzZWxmLl9j
dXJyZW50Q29udGVudFZpZXcgYm91bmRzXS5zaXplKTsKLQotICAgIC8vIENlbnRlciB0aGUgdGFy
Z2V0IHJlY3QgaW4gdGhlIHNjcm9sbCB2aWV3LgotICAgIC8vIElmIHRoZSB0YXJnZXQgZG9lc24n
dCBmaXQgaW4gdGhlIHNjcm9sbCB2aWV3LCBjZW50ZXIgb24gdGhlIGdlc3R1cmUgbG9jYXRpb24g
aW5zdGVhZC4KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG5ld1Vub2JzY3VyZWRDb250ZW50T2Zm
c2V0OwotICAgIGlmICh0YXJnZXRSZWN0LndpZHRoKCkgPD0gdW5vYnNjdXJlZENvbnRlbnRSZWN0
LndpZHRoKCkpCi0gICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LnNldFgodGFyZ2V0
UmVjdC54KCkgLSAodW5vYnNjdXJlZENvbnRlbnRSZWN0LndpZHRoKCkgLSB0YXJnZXRSZWN0Lndp
ZHRoKCkpIC8gMik7Ci0gICAgZWxzZQotICAgICAgICBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNl
dC5zZXRYKG9yaWdpbi54KCkgLSB1bm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKSAvIDIpOwot
ICAgIGlmICh0YXJnZXRSZWN0LmhlaWdodCgpIDw9IHVub2JzY3VyZWRDb250ZW50UmVjdC5oZWln
aHQoKSkKLSAgICAgICAgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQuc2V0WSh0YXJnZXRSZWN0
LnkoKSAtICh1bm9ic2N1cmVkQ29udGVudFJlY3QuaGVpZ2h0KCkgLSB0YXJnZXRSZWN0LmhlaWdo
dCgpKSAvIDIpOwotICAgIGVsc2UKLSAgICAgICAgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQu
c2V0WShvcmlnaW4ueSgpIC0gdW5vYnNjdXJlZENvbnRlbnRSZWN0LmhlaWdodCgpIC8gMik7Ci0g
ICAgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQgPSBjb25zdHJhaW5Db250ZW50T2Zmc2V0KG5l
d1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LCBjb250ZW50U2l6ZSwgdW5vYnNjdXJlZENvbnRlbnRS
ZWN0LnNpemUoKSk7Ci0KLSAgICBpZiAodW5vYnNjdXJlZENvbnRlbnRPZmZzZXQgPT0gbmV3VW5v
YnNjdXJlZENvbnRlbnRPZmZzZXQpIHsKLSAgICAgICAgaWYgKHRhcmdldFJlY3Qud2lkdGgoKSA+
IHVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpKQotICAgICAgICAgICAgbmV3VW5vYnNjdXJl
ZENvbnRlbnRPZmZzZXQuc2V0WChvcmlnaW4ueCgpIC0gdW5vYnNjdXJlZENvbnRlbnRSZWN0Lndp
ZHRoKCkgLyAyKTsKLSAgICAgICAgaWYgKHRhcmdldFJlY3QuaGVpZ2h0KCkgPiB1bm9ic2N1cmVk
Q29udGVudFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICBuZXdVbm9ic2N1cmVkQ29udGVudE9m
ZnNldC5zZXRZKG9yaWdpbi55KCkgLSB1bm9ic2N1cmVkQ29udGVudFJlY3QuaGVpZ2h0KCkgLyAy
KTsKLSAgICAgICAgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQgPSBjb25zdHJhaW5Db250ZW50
T2Zmc2V0KG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LCBjb250ZW50U2l6ZSwgdW5vYnNjdXJl
ZENvbnRlbnRSZWN0LnNpemUoKSk7Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6RmxvYXRTaXplIHNj
cm9sbFZpZXdPZmZzZXREZWx0YSA9IG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0IC0gdW5vYnNj
dXJlZENvbnRlbnRPZmZzZXQ7Ci0gICAgc2Nyb2xsVmlld09mZnNldERlbHRhLnNjYWxlKGNvbnRl
bnRab29tU2NhbGUoc2VsZikpOwotCi0gICAgZmxvYXQgc2Nyb2xsRGlzdGFuY2UgPSBzY3JvbGxW
aWV3T2Zmc2V0RGVsdGEuZGlhZ29uYWxMZW5ndGgoKTsKLSAgICBpZiAoc2Nyb2xsRGlzdGFuY2Ug
PCBtaW5pbXVtU2Nyb2xsRGlzdGFuY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFtf
Y29udGVudFZpZXcgd2lsbFN0YXJ0Wm9vbU9yU2Nyb2xsXTsKLQotICAgIExPR19XSVRIX1NUUkVB
TShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiX3Njcm9sbFRvUmVjdDogc2Nyb2xsaW5nIHRvICIg
PDwgW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdICsgc2Nyb2xsVmlld09mZnNldERlbHRhKTsK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHVzZSB0aGUgbGVnYWN5IHNlc3Npb24gc3Rh
dGUgZGVjb2Rlci4KKyAgICBXZWJLaXQ6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGU7CisgICAg
aWYgKCFXZWJLaXQ6OmRlY29kZUxlZ2FjeVNlc3Npb25TdGF0ZShzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oc2Vzc2lvblN0YXRlRGF0YS5ieXRlcyksIHNlc3Npb25TdGF0ZURhdGEubGVuZ3Ro
LCBzZXNzaW9uU3RhdGUpKQorICAgICAgICByZXR1cm47CiAKLSAgICBbX3Njcm9sbFZpZXcgc2V0
Q29udGVudE9mZnNldDooW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdICsgc2Nyb2xsVmlld09m
ZnNldERlbHRhKSBhbmltYXRlZDpZRVNdOwotICAgIHJldHVybiB0cnVlOworICAgIF9wYWdlLT5y
ZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShXVEZNb3ZlKHNlc3Npb25TdGF0ZSksIHRydWUpOwogfQog
Ci0tICh2b2lkKV96b29tT3V0V2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4g
YW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKKy0gKFdLTmF2aWdhdGlvbiAqKV9yZXN0b3JlU2Vzc2lv
blN0YXRlOihfV0tTZXNzaW9uU3RhdGUgKilzZXNzaW9uU3RhdGUgYW5kTmF2aWdhdGU6KEJPT0wp
bmF2aWdhdGUKIHsKLSAgICBbc2VsZiBfem9vbVRvUG9pbnQ6b3JpZ2luIGF0U2NhbGU6W19zY3Jv
bGxWaWV3IG1pbmltdW1ab29tU2NhbGVdIGFuaW1hdGVkOmFuaW1hdGVkXTsKKyAgICByZXR1cm4g
d3JhcHBlcihfcGFnZS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlID8gc2Vz
c2lvblN0YXRlLT5fc2Vzc2lvblN0YXRlIDogV2ViS2l0OjpTZXNzaW9uU3RhdGUgeyB9LCBuYXZp
Z2F0ZSkpOwogfQogCi0tICh2b2lkKV96b29tVG9Jbml0aWFsU2NhbGVXaXRoT3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZAorLSAodm9pZClf
Y2xvc2UKIHsKLSAgICBBU1NFUlQoX2luaXRpYWxTY2FsZUZhY3RvciA+IDApOwotICAgIFtzZWxm
IF96b29tVG9Qb2ludDpvcmlnaW4gYXRTY2FsZTpfaW5pdGlhbFNjYWxlRmFjdG9yIGFuaW1hdGVk
OmFuaW1hdGVkXTsKKyAgICBfcGFnZS0+Y2xvc2UoKTsKIH0KIAotLy8gZm9jdXNlZEVsZW1lbnRS
ZWN0IGFuZCBzZWxlY3Rpb25SZWN0IGFyZSBib3RoIGluIGRvY3VtZW50IGNvb3JkaW5hdGVzLgot
LSAodm9pZClfem9vbVRvRm9jdXNSZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKWZvY3Vz
ZWRFbGVtZW50UmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyBzZWxlY3Rpb25SZWN0Oihjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKXNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgaW5z
aWRlRml4ZWQ6KEJPT0wpaW5zaWRlRml4ZWQKLSAgICBmb250U2l6ZTooZmxvYXQpZm9udFNpemUg
bWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1h
eGltdW1TY2FsZSBhbGxvd1NjYWxpbmc6KEJPT0wpYWxsb3dTY2FsaW5nIGZvcmNlU2Nyb2xsOihC
T09MKWZvcmNlU2Nyb2xsCistIChfV0tBdHRhY2htZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRo
RmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgY29udGVudFR5cGU6KE5TU3RyaW5nICopY29u
dGVudFR5cGUgZGF0YTooTlNEYXRhICopZGF0YSBvcHRpb25zOihfV0tBdHRhY2htZW50RGlzcGxh
eU9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVh
bSA8PCAiX3pvb21Ub0ZvY3VzUmVjdDoiIDw8IGZvY3VzZWRFbGVtZW50UmVjdEluRG9jdW1lbnRD
b29yZGluYXRlcyA8PCAiIHNlbGVjdGlvblJlY3Q6IiA8PCBzZWxlY3Rpb25SZWN0SW5Eb2N1bWVu
dENvb3JkaW5hdGVzKTsKLSAgICBVTlVTRURfUEFSQU0oaW5zaWRlRml4ZWQpOwotCi0gICAgY29u
c3QgZG91YmxlIG1pbmltdW1IZWlnaHRUb1Nob3dDb250ZW50QWJvdmVLZXlib2FyZCA9IDEwNjsK
LSAgICBjb25zdCBDRlRpbWVJbnRlcnZhbCBmb3JtQ29udHJvbFpvb21BbmltYXRpb25EdXJhdGlv
biA9IDAuMjU7Ci0gICAgY29uc3QgZG91YmxlIGNhcmV0T2Zmc2V0RnJvbVdpbmRvd0VkZ2UgPSA4
OwotCi0gICAgVUlXaW5kb3cgKndpbmRvdyA9IFtfc2Nyb2xsVmlldyB3aW5kb3ddOwotCi0gICAg
Ly8gRmluZCB0aGUgcG9ydGlvbiBvZiB0aGUgdmlldyB0aGF0IGlzIHZpc2libGUgb24gdGhlIHNj
cmVlbi4KLSAgICBVSVZpZXdDb250cm9sbGVyICp0b3BWaWV3Q29udHJvbGxlciA9IFtbW19zY3Jv
bGxWaWV3IF92aWV3Q29udHJvbGxlckZvckFuY2VzdG9yXSBfcm9vdEFuY2VzdG9yVmlld0NvbnRy
b2xsZXJdIF92aWV3Q29udHJvbGxlckZvclN1cHBvcnRlZEludGVyZmFjZU9yaWVudGF0aW9uc107
Ci0gICAgVUlWaWV3ICpmdWxsU2NyZWVuVmlldyA9IHRvcFZpZXdDb250cm9sbGVyLnZpZXc7Ci0g
ICAgaWYgKCFmdWxsU2NyZWVuVmlldykKLSAgICAgICAgZnVsbFNjcmVlblZpZXcgPSB3aW5kb3c7
Ci0KLSAgICBDR1JlY3QgdW5vYnNjdXJlZFNjcm9sbFZpZXdSZWN0SW5XZWJWaWV3Q29vcmRpbmF0
ZXMgPSBVSUVkZ2VJbnNldHNJbnNldFJlY3QoW3NlbGYgYm91bmRzXSwgX29ic2N1cmVkSW5zZXRz
KTsKLSAgICBDR1JlY3QgdmlzaWJsZVNjcm9sbFZpZXdCb3VuZHNJbldlYlZpZXdDb29yZGluYXRl
cyA9IENHUmVjdEludGVyc2VjdGlvbih1bm9ic2N1cmVkU2Nyb2xsVmlld1JlY3RJbldlYlZpZXdD
b29yZGluYXRlcywgW2Z1bGxTY3JlZW5WaWV3IGNvbnZlcnRSZWN0OltmdWxsU2NyZWVuVmlldyBi
b3VuZHNdIHRvVmlldzpzZWxmXSk7Ci0gICAgQ0dSZWN0IGZvcm1Bc3Npc3RhbnRGcmFtZUluV2Vi
Vmlld0Nvb3JkaW5hdGVzID0gW3dpbmRvdyBjb252ZXJ0UmVjdDpfaW5wdXRWaWV3Qm91bmRzIHRv
VmlldzpzZWxmXTsKLSAgICBDR1JlY3QgaW50ZXJzZWN0aW9uQmV0d2VlblNjcm9sbFZpZXdBbmRG
b3JtQXNzaXN0YW50ID0gQ0dSZWN0SW50ZXJzZWN0aW9uKHZpc2libGVTY3JvbGxWaWV3Qm91bmRz
SW5XZWJWaWV3Q29vcmRpbmF0ZXMsIGZvcm1Bc3Npc3RhbnRGcmFtZUluV2ViVmlld0Nvb3JkaW5h
dGVzKTsKLSAgICBDR1NpemUgdmlzaWJsZVNpemUgPSB2aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0lu
V2ViVmlld0Nvb3JkaW5hdGVzLnNpemU7Ci0KLSAgICBDR0Zsb2F0IHZpc2libGVPZmZzZXRGcm9t
VG9wID0gMDsKLSAgICBDR0Zsb2F0IG1pbmltdW1EaXN0YW5jZUZyb21LZXlib2FyZFRvVHJpZ2dl
clNjcm9sbCA9IDA7Ci0gICAgaWYgKCFDR1JlY3RJc0VtcHR5KGludGVyc2VjdGlvbkJldHdlZW5T
Y3JvbGxWaWV3QW5kRm9ybUFzc2lzdGFudCkpIHsKLSAgICAgICAgQ0dGbG9hdCBoZWlnaHRWaXNp
YmxlQWJvdmVGb3JtQXNzaXN0YW50ID0gQ0dSZWN0R2V0TWluWShpbnRlcnNlY3Rpb25CZXR3ZWVu
U2Nyb2xsVmlld0FuZEZvcm1Bc3Npc3RhbnQpIC0gQ0dSZWN0R2V0TWluWSh2aXNpYmxlU2Nyb2xs
Vmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgQ0dGbG9hdCBoZWlnaHRW
aXNpYmxlQmVsb3dGb3JtQXNzaXN0YW50ID0gQ0dSZWN0R2V0TWF4WSh2aXNpYmxlU2Nyb2xsVmll
d0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGVzKSAtIENHUmVjdEdldE1heFkoaW50ZXJzZWN0aW9u
QmV0d2VlblNjcm9sbFZpZXdBbmRGb3JtQXNzaXN0YW50KTsKLQotICAgICAgICBpZiAoaGVpZ2h0
VmlzaWJsZUFib3ZlRm9ybUFzc2lzdGFudCA+PSBtaW5pbXVtSGVpZ2h0VG9TaG93Q29udGVudEFi
b3ZlS2V5Ym9hcmQgfHwgaGVpZ2h0VmlzaWJsZUJlbG93Rm9ybUFzc2lzdGFudCA8IGhlaWdodFZp
c2libGVBYm92ZUZvcm1Bc3Npc3RhbnQpIHsKLSAgICAgICAgICAgIHZpc2libGVTaXplLmhlaWdo
dCA9IGhlaWdodFZpc2libGVBYm92ZUZvcm1Bc3Npc3RhbnQ7Ci0gICAgICAgICAgICBtaW5pbXVt
RGlzdGFuY2VGcm9tS2V5Ym9hcmRUb1RyaWdnZXJTY3JvbGwgPSA1MDsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHZpc2libGVTaXplLmhlaWdodCA9IGhlaWdodFZpc2libGVCZWxvd0Zv
cm1Bc3Npc3RhbnQ7Ci0gICAgICAgICAgICB2aXNpYmxlT2Zmc2V0RnJvbVRvcCA9IENHUmVjdEdl
dE1heFkoaW50ZXJzZWN0aW9uQmV0d2VlblNjcm9sbFZpZXdBbmRGb3JtQXNzaXN0YW50KSAtIENH
UmVjdEdldE1pblkodmlzaWJsZVNjcm9sbFZpZXdCb3VuZHNJbldlYlZpZXdDb29yZGluYXRlcyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBab29tIGFyb3VuZCB0aGUgZWxlbWVudCdzIGJv
dW5kaW5nIGZyYW1lLiBXZSB1c2UgYSAic3RhbmRhcmQiIHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBw
cm9wZXIgZnJhbWUuCi0gICAgZG91YmxlIGN1cnJlbnRTY2FsZSA9IGNvbnRlbnRab29tU2NhbGUo
c2VsZik7Ci0gICAgZG91YmxlIHNjYWxlID0gY3VycmVudFNjYWxlOwotICAgIGlmIChhbGxvd1Nj
YWxpbmcpIHsKLSNpZiBQTEFURk9STShXQVRDSE9TKQotICAgICAgICBjb25zdCBDR0Zsb2F0IG1p
bmltdW1NYXJnaW5Gb3Jab29taW5nVG9FbnRpcmVGb2N1c1JlY3RJbldlYlZpZXdDb29yZGluYXRl
cyA9IDEwOwotICAgICAgICBjb25zdCBDR0Zsb2F0IG1heGltdW1NYXJnaW5Gb3Jab29taW5nVG9F
bnRpcmVGb2N1c1JlY3RJbldlYlZpZXdDb29yZGluYXRlcyA9IDM1OwotCi0gICAgICAgIENHUmVj
dCBtaW5pbXVtVGFyZ2V0UmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyA9IFVJUmVjdEluc2V0RWRn
ZXMoZm9jdXNlZEVsZW1lbnRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzLCBVSVJlY3RFZGdlQWxs
LCAtbWluaW11bU1hcmdpbkZvclpvb21pbmdUb0VudGlyZUZvY3VzUmVjdEluV2ViVmlld0Nvb3Jk
aW5hdGVzIC8gY3VycmVudFNjYWxlKTsKLSAgICAgICAgQ0dSZWN0IG1heGltdW1UYXJnZXRSZWN0
SW5Eb2N1bWVudENvb3JkaW5hdGVzID0gVUlSZWN0SW5zZXRFZGdlcyhmb2N1c2VkRWxlbWVudFJl
Y3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMsIFVJUmVjdEVkZ2VBbGwsIC1tYXhpbXVtTWFyZ2luRm9y
Wm9vbWluZ1RvRW50aXJlRm9jdXNSZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgLyBjdXJyZW50U2Nh
bGUpOwotCi0gICAgICAgIGRvdWJsZSBjbGFtcGVkTWF4aW11bVRhcmdldFNjYWxlID0gY2xhbXBU
bzxkb3VibGU+KHN0ZDo6bWluKHZpc2libGVTaXplLndpZHRoIC8gQ0dSZWN0R2V0V2lkdGgobWlu
aW11bVRhcmdldFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpLCB2aXNpYmxlU2l6ZS5oZWlnaHQg
LyBDR1JlY3RHZXRIZWlnaHQobWluaW11bVRhcmdldFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMp
KSwgbWluaW11bVNjYWxlLCBtYXhpbXVtU2NhbGUpOwotICAgICAgICBkb3VibGUgY2xhbXBlZE1p
bmltdW1UYXJnZXRTY2FsZSA9IGNsYW1wVG88ZG91YmxlPihzdGQ6Om1pbih2aXNpYmxlU2l6ZS53
aWR0aCAvIENHUmVjdEdldFdpZHRoKG1heGltdW1UYXJnZXRSZWN0SW5Eb2N1bWVudENvb3JkaW5h
dGVzKSwgdmlzaWJsZVNpemUuaGVpZ2h0IC8gQ0dSZWN0R2V0SGVpZ2h0KG1heGltdW1UYXJnZXRS
ZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzKSksIG1pbmltdW1TY2FsZSwgbWF4aW11bVNjYWxlKTsK
LSAgICAgICAgc2NhbGUgPSBjbGFtcFRvPGRvdWJsZT4oY3VycmVudFNjYWxlLCBjbGFtcGVkTWlu
aW11bVRhcmdldFNjYWxlLCBjbGFtcGVkTWF4aW11bVRhcmdldFNjYWxlKTsKLSNlbHNlCi0gICAg
ICAgIGNvbnN0IGRvdWJsZSB3ZWJWaWV3U3RhbmRhcmRGb250U2l6ZSA9IDE2OwotICAgICAgICBz
Y2FsZSA9IGNsYW1wVG88ZG91YmxlPih3ZWJWaWV3U3RhbmRhcmRGb250U2l6ZSAvIGZvbnRTaXpl
LCBtaW5pbXVtU2NhbGUsIG1heGltdW1TY2FsZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBDR0Zs
b2F0IGRvY3VtZW50V2lkdGggPSBbX2NvbnRlbnRWaWV3IGJvdW5kc10uc2l6ZS53aWR0aDsKLSAg
ICBzY2FsZSA9IENHUm91bmQoZG9jdW1lbnRXaWR0aCAqIHNjYWxlKSAvIGRvY3VtZW50V2lkdGg7
Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2FsZSA9
IGZvY3VzZWRFbGVtZW50UmVjdEluRG9jdW1lbnRDb29yZGluYXRlczsKLSAgICBmb2N1c2VkRWxl
bWVudFJlY3RJbk5ld1NjYWxlLnNjYWxlKHNjYWxlKTsKLSAgICBmb2N1c2VkRWxlbWVudFJlY3RJ
bk5ld1NjYWxlLm1vdmVCeShbX2NvbnRlbnRWaWV3IGZyYW1lXS5vcmlnaW4pOwotCi0gICAgQk9P
TCBzZWxlY3Rpb25SZWN0SXNOb3ROdWxsID0gIXNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRp
bmF0ZXMuaXNaZXJvKCk7Ci0gICAgQk9PTCBkb05vdFNjcm9sbFdoZW5Db250ZW50SXNBbHJlYWR5
VmlzaWJsZSA9ICFmb3JjZVNjcm9sbCB8fCBbX2NvbnRlbnRWaWV3IF9zaG91bGRBdm9pZFNjcm9s
bGluZ1doZW5Gb2N1c2VkQ29udGVudElzVmlzaWJsZV07Ci0gICAgaWYgKGRvTm90U2Nyb2xsV2hl
bkNvbnRlbnRJc0FscmVhZHlWaXNpYmxlKSB7Ci0gICAgICAgIENHUmVjdCBjdXJyZW50bHlWaXNp
YmxlUmVnaW9uSW5XZWJWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGN1cnJlbnRseVZpc2libGVS
ZWdpb25JbldlYlZpZXdDb29yZGluYXRlcy5vcmlnaW4gPSB1bm9ic2N1cmVkU2Nyb2xsVmlld1Jl
Y3RJbldlYlZpZXdDb29yZGluYXRlcy5vcmlnaW47Ci0gICAgICAgIGN1cnJlbnRseVZpc2libGVS
ZWdpb25JbldlYlZpZXdDb29yZGluYXRlcy5vcmlnaW4ueSArPSB2aXNpYmxlT2Zmc2V0RnJvbVRv
cDsKLSAgICAgICAgY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3JkaW5hdGVzLnNp
emUgPSB2aXNpYmxlU2l6ZTsKLSAgICAgICAgY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmll
d0Nvb3JkaW5hdGVzLnNpemUuaGVpZ2h0IC09IG1pbmltdW1EaXN0YW5jZUZyb21LZXlib2FyZFRv
VHJpZ2dlclNjcm9sbDsKLQotICAgICAgICAvLyBEb24ndCBib3RoZXIgc2Nyb2xsaW5nIGlmIHRo
ZSBlbnRpcmUgbm9kZSBpcyBhbHJlYWR5IHZpc2libGUsIHdoZXRoZXIgb3Igbm90IHdlIGdvdCBh
IHNlbGVjdGlvblJlY3QuCi0gICAgICAgIGlmIChDR1JlY3RDb250YWluc1JlY3QoY3VycmVudGx5
VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3JkaW5hdGVzLCBbc2VsZiBjb252ZXJ0UmVjdDpmb2N1
c2VkRWxlbWVudFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgZnJvbVZpZXc6X2NvbnRlbnRWaWV3
LmdldCgpXSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gRG9uJ3QgYm90aGVy
IHNjcm9sbGluZyBpZiB3ZSBoYXZlIGEgdmFsaWQgc2VsZWN0aW9uUmVjdCBhbmQgaXQgaXMgYWxy
ZWFkeSB2aXNpYmxlLgotICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdElzTm90TnVsbCAmJiBDR1Jl
Y3RDb250YWluc1JlY3QoY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3JkaW5hdGVz
LCBbc2VsZiBjb252ZXJ0UmVjdDpzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGZy
b21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV0pKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFdlIHdhbnQgdG8gY2VudGVyIHRoZSBmb2N1c2VkIGVsZW1lbnQgd2l0aGluIHRo
ZSB2aWV3cG9ydCwgd2l0aCBhcyBtdWNoIHNwYWNpbmcgb24gYWxsIHNpZGVzIGFzCi0gICAgLy8g
d2UgY2FuIGdldCBiYXNlZCBvbiB0aGUgdmlzaWJsZSBhcmVhIGFmdGVyIHpvb21pbmcuIFRoZSBz
cGFjaW5nIGluIGVpdGhlciBkaW1lbnNpb24gaXMgaGFsZiB0aGUKLSAgICAvLyBkaWZmZXJlbmNl
IGJldHdlZW4gdGhlIHNpemUgb2YgdGhlIERPTSBub2RlIGFuZCB0aGUgc2l6ZSBvZiB0aGUgdmlz
aWJsZSBmcmFtZS4KLSAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyB0b28gd2lkZSB0byBiZSBob3Jp
em9udGFsbHkgY2VudGVyZWQgb3IgdG9vIHRhbGwgdG8gYmUgdmVydGljYWxseSBjZW50ZXJlZCwg
d2UKLSAgICAvLyBpbnN0ZWFkIHNjcm9sbCBzdWNoIHRoYXQgdGhlIGxlZnQgZWRnZSBvciB0b3Ag
ZWRnZSBvZiB0aGUgZWxlbWVudCBpcyB3aXRoaW4gdGhlIGxlZnQgaGFsZiBvciB0b3AKLSAgICAv
LyBoYWxmIG9mIHRoZSB2aWV3cG9ydCwgcmVzcGVjdGl2ZWx5LgotICAgIENHRmxvYXQgaG9yaXpv
bnRhbFNwYWNlSW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSAodmlzaWJsZVNpemUud2lkdGggLSBmb2N1
c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLndpZHRoKCkpIC8gMi4wOwotICAgIENHRmxvYXQgdmVy
dGljYWxTcGFjZUluV2ViVmlld0Nvb3JkaW5hdGVzID0gKHZpc2libGVTaXplLmhlaWdodCAtIGZv
Y3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUuaGVpZ2h0KCkpIC8gMi4wOwotCi0gICAgYXV0byB0
b3BMZWZ0ID0gQ0dQb2ludFplcm87Ci0gICAgYXV0byBzY3JvbGxWaWV3SW5zZXRzID0gW19zY3Jv
bGxWaWV3IF9lZmZlY3RpdmVDb250ZW50SW5zZXRdOwotICAgIGF1dG8gY3VycmVudFRvcExlZnQg
PSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07Ci0KLSAgICBpZiAoX2hhdmVTZXRPYnNjdXJl
ZEluc2V0cykgewotICAgICAgICBjdXJyZW50VG9wTGVmdC54ICs9IF9vYnNjdXJlZEluc2V0cy5s
ZWZ0OwotICAgICAgICBjdXJyZW50VG9wTGVmdC55ICs9IF9vYnNjdXJlZEluc2V0cy50b3A7Ci0g
ICAgfQotCi0gICAgaWYgKGhvcml6b250YWxTcGFjZUluV2ViVmlld0Nvb3JkaW5hdGVzID4gMCkK
LSAgICAgICAgdG9wTGVmdC54ID0gZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2FsZS54KCkgLSBo
b3Jpem9udGFsU3BhY2VJbldlYlZpZXdDb29yZGluYXRlczsKLSAgICBlbHNlIHsKLSAgICAgICAg
YXV0byBtaW5pbXVtT2Zmc2V0VG9SZXZlYWxMZWZ0RWRnZSA9IHN0ZDo6bWF4KC1zY3JvbGxWaWV3
SW5zZXRzLmxlZnQsIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUueCgpIC0gdmlzaWJsZVNp
emUud2lkdGggLyAyKTsKLSAgICAgICAgYXV0byBtYXhpbXVtT2Zmc2V0VG9SZXZlYWxMZWZ0RWRn
ZSA9IGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUueCgpOwotICAgICAgICB0b3BMZWZ0Lngg
PSBjbGFtcFRvPGRvdWJsZT4oY3VycmVudFRvcExlZnQueCwgbWluaW11bU9mZnNldFRvUmV2ZWFs
TGVmdEVkZ2UsIG1heGltdW1PZmZzZXRUb1JldmVhbExlZnRFZGdlKTsKLSAgICB9Ci0KLSAgICBp
ZiAodmVydGljYWxTcGFjZUluV2ViVmlld0Nvb3JkaW5hdGVzID4gMCkKLSAgICAgICAgdG9wTGVm
dC55ID0gZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2FsZS55KCkgLSB2ZXJ0aWNhbFNwYWNlSW5X
ZWJWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gbWluaW11bU9mZnNl
dFRvUmV2ZWFsVG9wRWRnZSA9IHN0ZDo6bWF4KC1zY3JvbGxWaWV3SW5zZXRzLnRvcCwgZm9jdXNl
ZEVsZW1lbnRSZWN0SW5OZXdTY2FsZS55KCkgLSB2aXNpYmxlU2l6ZS5oZWlnaHQgLyAyKTsKLSAg
ICAgICAgYXV0byBtYXhpbXVtT2Zmc2V0VG9SZXZlYWxUb3BFZGdlID0gZm9jdXNlZEVsZW1lbnRS
ZWN0SW5OZXdTY2FsZS55KCk7Ci0gICAgICAgIHRvcExlZnQueSA9IGNsYW1wVG88ZG91YmxlPihj
dXJyZW50VG9wTGVmdC55LCBtaW5pbXVtT2Zmc2V0VG9SZXZlYWxUb3BFZGdlLCBtYXhpbXVtT2Zm
c2V0VG9SZXZlYWxUb3BFZGdlKTsKLSAgICB9Ci0KLSAgICB0b3BMZWZ0LnkgLT0gdmlzaWJsZU9m
ZnNldEZyb21Ub3A7Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZG9jdW1lbnRCb3VuZHNJbk5l
d1NjYWxlID0gW19jb250ZW50VmlldyBib3VuZHNdOwotICAgIGRvY3VtZW50Qm91bmRzSW5OZXdT
Y2FsZS5zY2FsZShzY2FsZSk7Ci0gICAgZG9jdW1lbnRCb3VuZHNJbk5ld1NjYWxlLm1vdmVCeShb
X2NvbnRlbnRWaWV3IGZyYW1lXS5vcmlnaW4pOwotCi0gICAgQ0dGbG9hdCBtaW5pbXVtQWxsb3dh
YmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzID0gLUlORklOSVRZOwotICAg
IENHRmxvYXQgbWluaW11bUFsbG93YWJsZVZlcnRpY2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0
ZXMgPSAtSU5GSU5JVFk7Ci0gICAgQ0dGbG9hdCBtYXhpbXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9m
ZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzID0gQ0dSZWN0R2V0TWF4WChkb2N1bWVudEJvdW5kc0lu
TmV3U2NhbGUpIC0gdmlzaWJsZVNpemUud2lkdGg7Ci0gICAgQ0dGbG9hdCBtYXhpbXVtQWxsb3dh
YmxlVmVydGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcyA9IENHUmVjdEdldE1heFkoZG9j
dW1lbnRCb3VuZHNJbk5ld1NjYWxlKSAtIHZpc2libGVTaXplLmhlaWdodDsKLQotICAgIGlmIChz
ZWxlY3Rpb25SZWN0SXNOb3ROdWxsKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxl
Y3Rpb25SZWN0SW5OZXdTY2FsZSA9IHNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXM7
Ci0gICAgICAgIHNlbGVjdGlvblJlY3RJbk5ld1NjYWxlLnNjYWxlKHNjYWxlKTsKLSAgICAgICAg
c2VsZWN0aW9uUmVjdEluTmV3U2NhbGUubW92ZUJ5KFtfY29udGVudFZpZXcgZnJhbWVdLm9yaWdp
bik7Ci0gICAgICAgIC8vIEFkanVzdCB0aGUgbWluIGFuZCBtYXggYWxsb3dhYmxlIHNjcm9sbCBv
ZmZzZXRzLCBzdWNoIHRoYXQgdGhlIHNlbGVjdGlvbiByZWN0IHJlbWFpbnMgdmlzaWJsZS4KLSAg
ICAgICAgbWluaW11bUFsbG93YWJsZUhvcml6b250YWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRl
cyA9IENHUmVjdEdldE1heFgoc2VsZWN0aW9uUmVjdEluTmV3U2NhbGUpICsgY2FyZXRPZmZzZXRG
cm9tV2luZG93RWRnZSAtIHZpc2libGVTaXplLndpZHRoOwotICAgICAgICBtaW5pbXVtQWxsb3dh
YmxlVmVydGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcyA9IENHUmVjdEdldE1heFkoc2Vs
ZWN0aW9uUmVjdEluTmV3U2NhbGUpICsgY2FyZXRPZmZzZXRGcm9tV2luZG93RWRnZSAtIHZpc2li
bGVTaXplLmhlaWdodCAtIHZpc2libGVPZmZzZXRGcm9tVG9wOwotICAgICAgICBtYXhpbXVtQWxs
b3dhYmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzID0gc3RkOjptaW48Q0dG
bG9hdD4obWF4aW11bUFsbG93YWJsZUhvcml6b250YWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRl
cywgQ0dSZWN0R2V0TWluWChzZWxlY3Rpb25SZWN0SW5OZXdTY2FsZSkgLSBjYXJldE9mZnNldEZy
b21XaW5kb3dFZGdlKTsKLSAgICAgICAgbWF4aW11bUFsbG93YWJsZVZlcnRpY2FsT2Zmc2V0SW5X
ZWJWaWV3Q29vcmRpbmF0ZXMgPSBzdGQ6Om1pbjxDR0Zsb2F0PihtYXhpbXVtQWxsb3dhYmxlVmVy
dGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcywgQ0dSZWN0R2V0TWluWShzZWxlY3Rpb25S
ZWN0SW5OZXdTY2FsZSkgLSBjYXJldE9mZnNldEZyb21XaW5kb3dFZGdlIC0gdmlzaWJsZU9mZnNl
dEZyb21Ub3ApOwotICAgIH0KLQotICAgIC8vIENvbnN0cmFpbiB0aGUgbGVmdCBlZGdlIGluIGRv
Y3VtZW50IGNvb3JkaW5hdGVzIHNvIHRoYXQ6Ci0gICAgLy8gIC0gaXQgaXNuJ3Qgc28gc21hbGwg
dGhhdCB0aGUgc2Nyb2xsVmlzaWJsZVJlY3QgaXNuJ3QgdmlzaWJsZSBvbiB0aGUgc2NyZWVuCi0g
ICAgLy8gIC0gaXQgaXNuJ3Qgc28gZ3JlYXQgdGhhdCB0aGUgZG9jdW1lbnQncyByaWdodCBlZGdl
IGlzIGxlc3MgdGhhbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgc2NyZWVuCi0gICAgdG9wTGVmdC54
ID0gY2xhbXBUbzxDR0Zsb2F0Pih0b3BMZWZ0LngsIG1pbmltdW1BbGxvd2FibGVIb3Jpem9udGFs
T2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMsIG1heGltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zm
c2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMpOwotCi0gICAgLy8gQ29uc3RyYWluIHRoZSB0b3AgZWRn
ZSBpbiBkb2N1bWVudCBjb29yZGluYXRlcyBzbyB0aGF0OgotICAgIC8vICAtIGl0IGlzbid0IHNv
IHNtYWxsIHRoYXQgdGhlIHNjcm9sbFZpc2libGVSZWN0IGlzbid0IHZpc2libGUgb24gdGhlIHNj
cmVlbgotICAgIC8vICAtIGl0IGlzbid0IHNvIGdyZWF0IHRoYXQgdGhlIGRvY3VtZW50J3MgYm90
dG9tIGVkZ2UgaXMgaGlnaGVyIHRoYW4gdGhlIHRvcCBvZiB0aGUgZm9ybSBhc3Npc3RhbnQKLSAg
ICB0b3BMZWZ0LnkgPSBjbGFtcFRvPENHRmxvYXQ+KHRvcExlZnQueSwgbWluaW11bUFsbG93YWJs
ZVZlcnRpY2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMsIG1heGltdW1BbGxvd2FibGVWZXJ0
aWNhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzKTsKLQotICAgIGlmIChfaGF2ZVNldE9ic2N1
cmVkSW5zZXRzKSB7Ci0gICAgICAgIC8vIFRoaXMgbG9va3MgdW5pbnR1aXRpdmUsIGJ1dCBpcyBu
ZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJlY2lzZWx5IGNlbnRlciB0aGUgZm9jdXNlZCBlbGVtZW50
IGluIHRoZSB2aXNpYmxlIGFyZWEuCi0gICAgICAgIC8vIFRoZSB0b3AgbGVmdCBwb3NpdGlvbiBh
bHJlYWR5IGFjY291bnRzIGZvciB0b3AgYW5kIGxlZnQgb2JzY3VyZWQgaW5zZXRzIC0gaS5lLiwg
YSB0b3BMZWZ0IG9mICgwLCAwKSBjb3JyZXNwb25kcwotICAgICAgICAvLyB0byB0aGUgdG9wLSBh
bmQgbGVmdC1tb3N0IHBvaW50IGJlbG93IChhbmQgdG8gdGhlIHJpZ2h0IG9mKSB0aGUgdG9wIGlu
c2V0IGFyZWEgYW5kIGxlZnQgaW5zZXQgYXJlYXMsIHJlc3BlY3RpdmVseS4KLSAgICAgICAgLy8g
SG93ZXZlciwgd2hlbiB0ZWxsaW5nIFdLU2Nyb2xsVmlldyB0byBzY3JvbGwgdG8gYSBnaXZlbiBj
ZW50ZXIgcG9zaXRpb24sIHRoaXMgY2VudGVyIHBvc2l0aW9uIGlzIGNvbXB1dGVkIHJlbGF0aXZl
Ci0gICAgICAgIC8vIHRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBzY3JvbGwgdmlldy4g
VGh1cywgdG8gY29tcHV0ZSBvdXIgY2VudGVyIHBvc2l0aW9uIGZyb20gdGhlIHRvcCBsZWZ0IHBv
c2l0aW9uLCB3ZQotICAgICAgICAvLyBuZWVkIHRvIGZpcnN0IG1vdmUgdGhlIHRvcCBsZWZ0IHBv
c2l0aW9uIHVwIGFuZCB0byB0aGUgbGVmdCwgYW5kIHRoZW4gYWRkIGhhbGYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgb2YgdGhlIGNvbnRlbnQKLSAgICAgICAgLy8gYXJlYSAoaW5jbHVkaW5nIG9ic2N1
cmVkIGluc2V0cykuCi0gICAgICAgIHRvcExlZnQueCAtPSBfb2JzY3VyZWRJbnNldHMubGVmdDsK
LSAgICAgICAgdG9wTGVmdC55IC09IF9vYnNjdXJlZEluc2V0cy50b3A7Ci0gICAgfQotCi0gICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBuZXdDZW50ZXIgPSBDR1BvaW50TWFrZSh0b3BMZWZ0LnggKyBD
R1JlY3RHZXRXaWR0aChzZWxmLmJvdW5kcykgLyAyLCB0b3BMZWZ0LnkgKyBDR1JlY3RHZXRIZWln
aHQoc2VsZi5ib3VuZHMpIC8gMik7Ci0KLSAgICBpZiAoc2NhbGUgIT0gY3VycmVudFNjYWxlKQot
ICAgICAgICBfcGFnZS0+d2lsbFN0YXJ0VXNlclRyaWdnZXJlZFpvb21pbmcoKTsKLQotICAgIExP
R19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiX3pvb21Ub0ZvY3VzUmVjdDog
em9vbWluZyB0byAiIDw8IG5ld0NlbnRlciA8PCAiIHNjYWxlOiIgPDwgc2NhbGUpOwotCi0gICAg
Ly8gVGhlIG5ld0NlbnRlciBoYXMgYmVlbiBjb21wdXRlZCBpbiB0aGUgbmV3IHNjYWxlLCBidXQg
X3pvb21Ub0NlbnRlciBleHBlY3RlZCB0aGUgY2VudGVyIHRvIGJlIGluIHRoZSBvcmlnaW5hbCBz
Y2FsZS4KLSAgICBuZXdDZW50ZXIuc2NhbGUoMSAvIHNjYWxlKTsKLSAgICBbX3Njcm9sbFZpZXcg
X3pvb21Ub0NlbnRlcjpuZXdDZW50ZXIgc2NhbGU6c2NhbGUgZHVyYXRpb246Zm9ybUNvbnRyb2xa
b29tQW5pbWF0aW9uRHVyYXRpb24gZm9yY2U6WUVTXTsKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9u
cyk7CisgICAgYXV0byBmaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9j
XSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0pOworICAgIGlmIChmaWxlbmFtZSkK
KyAgICAgICAgW2ZpbGVXcmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKKyAg
ICByZXR1cm4gW3NlbGYgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBw
ZXIuZ2V0KCkgY29udGVudFR5cGU6Y29udGVudFR5cGUgY29tcGxldGlvbjpjb21wbGV0aW9uSGFu
ZGxlcl07CiB9CiAKLS0gKGRvdWJsZSlfaW5pdGlhbFNjYWxlRmFjdG9yCistIChfV0tBdHRhY2ht
ZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilm
aWxlV3JhcHBlciBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBvcHRpb25zOihf
V0tBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb246KHZvaWQoXiko
Qk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIHJldHVybiBfaW5pdGlhbFNj
YWxlRmFjdG9yOworICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKKyAgICByZXR1cm4gW3NlbGYg
X2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIgY29udGVudFR5cGU6
Y29udGVudFR5cGUgY29tcGxldGlvbjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLS0gKGRvdWJs
ZSlfY29udGVudFpvb21TY2FsZQorLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50
V2l0aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5cGU6
KE5TU3RyaW5nICopY29udGVudFR5cGUgY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3Mp
KWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIGNvbnRlbnRab29tU2NhbGUoc2VsZik7
Ci19Ci0KLS0gKGRvdWJsZSlfdGFyZ2V0Q29udGVudFpvb21TY2FsZUZvclJlY3Q6KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpdGFyZ2V0UmVjdCBjdXJyZW50U2NhbGU6KGRvdWJsZSljdXJyZW50
U2NhbGUgZml0RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91
YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUKLXsKLSAg
ICBXZWJDb3JlOjpGbG9hdFNpemUgdW5vYnNjdXJlZENvbnRlbnRTaXplKFtzZWxmIF9jb250ZW50
UmVjdEZvclVzZXJJbnRlcmFjdGlvbl0uc2l6ZSk7Ci0gICAgZG91YmxlIGhvcml6b250YWxTY2Fs
ZSA9IHVub2JzY3VyZWRDb250ZW50U2l6ZS53aWR0aCgpICogY3VycmVudFNjYWxlIC8gdGFyZ2V0
UmVjdC53aWR0aCgpOwotICAgIGRvdWJsZSB2ZXJ0aWNhbFNjYWxlID0gdW5vYnNjdXJlZENvbnRl
bnRTaXplLmhlaWdodCgpICogY3VycmVudFNjYWxlIC8gdGFyZ2V0UmVjdC5oZWlnaHQoKTsKLQot
ICAgIGhvcml6b250YWxTY2FsZSA9IHN0ZDo6bWluKHN0ZDo6bWF4KGhvcml6b250YWxTY2FsZSwg
bWluaW11bVNjYWxlKSwgbWF4aW11bVNjYWxlKTsKLSAgICB2ZXJ0aWNhbFNjYWxlID0gc3RkOjpt
aW4oc3RkOjptYXgodmVydGljYWxTY2FsZSwgbWluaW11bVNjYWxlKSwgbWF4aW11bVNjYWxlKTsK
LQotICAgIHJldHVybiBmaXRFbnRpcmVSZWN0ID8gc3RkOjptaW4oaG9yaXpvbnRhbFNjYWxlLCB2
ZXJ0aWNhbFNjYWxlKSA6IGhvcml6b250YWxTY2FsZTsKLX0KLQotLSAoQk9PTClfem9vbVRvUmVj
dDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgd2l0aE9yaWdpbjooV2ViQ29yZTo6Rmxv
YXRQb2ludClvcmlnaW4gZml0RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1T
Y2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2Nh
bGUgbWluaW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2UKLXsK
LSAgICBjb25zdCBmbG9hdCBtYXhpbXVtU2NhbGVGYWN0b3JEZWx0YUZvclBhblNjcm9sbCA9IDAu
MDI7Ci0KLSAgICBkb3VibGUgY3VycmVudFNjYWxlID0gY29udGVudFpvb21TY2FsZShzZWxmKTsK
LSAgICBkb3VibGUgdGFyZ2V0U2NhbGUgPSBbc2VsZiBfdGFyZ2V0Q29udGVudFpvb21TY2FsZUZv
clJlY3Q6dGFyZ2V0UmVjdCBjdXJyZW50U2NhbGU6Y3VycmVudFNjYWxlIGZpdEVudGlyZVJlY3Q6
Zml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6bWluaW11bVNjYWxlIG1heGltdW1TY2FsZTptYXhp
bXVtU2NhbGVdOwotCi0gICAgaWYgKGZhYnModGFyZ2V0U2NhbGUgLSBjdXJyZW50U2NhbGUpIDwg
bWF4aW11bVNjYWxlRmFjdG9yRGVsdGFGb3JQYW5TY3JvbGwpIHsKLSAgICAgICAgaWYgKFtzZWxm
IF9zY3JvbGxUb1JlY3Q6dGFyZ2V0UmVjdCBvcmlnaW46b3JpZ2luIG1pbmltdW1TY3JvbGxEaXN0
YW5jZTptaW5pbXVtU2Nyb2xsRGlzdGFuY2VdKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSBlbHNlIGlmICh0YXJnZXRTY2FsZSAhPSBjdXJyZW50U2NhbGUpIHsKLSAgICAgICAgW3Nl
bGYgX3pvb21Ub1JlY3Q6dGFyZ2V0UmVjdCBhdFNjYWxlOnRhcmdldFNjYWxlIG9yaWdpbjpvcmln
aW4gYW5pbWF0ZWQ6WUVTXTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi0tICh2b2lkKWRpZE1vdmVUb1dpbmRvdwotewotICAgIF9wYWdlLT5h
Y3Rpdml0eVN0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OmFsbEZsYWdzKCkp
OwotICAgIF9wYWdlLT53ZWJWaWV3RGlkTW92ZVRvV2luZG93KCk7Ci19Ci0KLS0gKHZvaWQpX3Nl
dE9wYXF1ZUludGVybmFsOihCT09MKW9wYXF1ZQotewotICAgIFtzdXBlciBzZXRPcGFxdWU6b3Bh
cXVlXTsKLQotICAgIFtfY29udGVudFZpZXcgc2V0T3BhcXVlOm9wYXF1ZV07Ci0KLSAgICBpZiAo
IV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4g
YmFja2dyb3VuZENvbG9yOwotICAgIGlmICghb3BhcXVlKQotICAgICAgICBiYWNrZ3JvdW5kQ29s
b3IgPSBXZWJDb3JlOjpDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgIF9w
YWdlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZENvbG9yKTsKLQotICAgIFtzZWxmIF91
cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF07Ci19Ci0KLS0gKHZvaWQpc2V0T3BhcXVlOihCT09M
KW9wYXF1ZQotewotICAgIGlmIChvcGFxdWUgPT0gc2VsZi5vcGFxdWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtzZWxmIF9zZXRPcGFxdWVJbnRlcm5hbDpvcGFxdWVdOwotfQotCi0tICh2b2lk
KXNldEJhY2tncm91bmRDb2xvcjooVUlDb2xvciAqKWJhY2tncm91bmRDb2xvcgotewotICAgIFtz
dXBlciBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKLSAgICBbX2NvbnRlbnRW
aWV3IHNldEJhY2tncm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOwotICAgIFtzZWxmIF91cGRh
dGVTY3JvbGxWaWV3QmFja2dyb3VuZF07Ci19Ci0KLS0gKEJPT0wpX2FsbG93c0RvdWJsZVRhcEdl
c3R1cmVzCi17Ci0gICAgaWYgKF9mYXN0Q2xpY2tpbmdJc0Rpc2FibGVkKQotICAgICAgICByZXR1
cm4gWUVTOwotCi0gICAgLy8gSWYgdGhlIHBhZ2UgaXMgbm90IHVzZXIgc2NhbGFibGUsIHdlIGRv
bid0IGFsbG93IGRvdWJsZSB0YXAgZ2VzdHVyZXMuCi0gICAgaWYgKCFbX3Njcm9sbFZpZXcgaXNa
b29tRW5hYmxlZF0gfHwgW19zY3JvbGxWaWV3IG1pbmltdW1ab29tU2NhbGVdID49IFtfc2Nyb2xs
VmlldyBtYXhpbXVtWm9vbVNjYWxlXSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgLy8gSWYg
dGhlIHZpZXdwb3J0IHdpZHRoIHdhcyBub3QgZXhwbGljaXQsIHdlIGFsbG93IGRvdWJsZSB0YXAg
Z2VzdHVyZXMuCi0gICAgaWYgKCFfdmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdCB8fCBf
dmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50KQotICAgICAgICByZXR1cm4gWUVT
OwotCi0gICAgLy8gSWYgdGhlIHBhZ2Ugc2V0IGEgdmlld3BvcnQgd2lkdGggdGhhdCB3YXNuJ3Qg
dGhlIGRldmljZSB3aWR0aCwgdGhlbiBpdCB3YXMKLSAgICAvLyBzY2FsZWQgYW5kIHRodXMgd2ls
bCBwcm9iYWJseSBuZWVkIHRvIHpvb20uCi0gICAgaWYgKF92aWV3cG9ydE1ldGFUYWdXaWR0aCAh
PSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVEZXZpY2VXaWR0aCkKLSAgICAgICAg
cmV0dXJuIFlFUzsKLQotICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBwYWdlIHRoYXQg
YXNrZWQgZm9yIHdpZHRoID0gZGV2aWNlLXdpZHRoLiBIb3dldmVyLAotICAgIC8vIGlmIHRoZSBj
b250ZW50J3Mgd2lkdGggYW5kIGhlaWdodCB3ZXJlIGxhcmdlLCB3ZSBtaWdodCBoYXZlIGhhZCB0
byBzaHJpbmsgaXQuCi0gICAgLy8gV2UnbGwgZW5hYmxlIGRvdWJsZSB0YXAgem9vbSB3aGVuZXZl
ciB3ZSdyZSBub3QgYXQgdGhlIGFjdHVhbCBpbml0aWFsIHNjYWxlLgotICAgIHJldHVybiAhYXJl
RXNzZW50aWFsbHlFcXVhbEFzRmxvYXQoY29udGVudFpvb21TY2FsZShzZWxmKSwgX2luaXRpYWxT
Y2FsZUZhY3Rvcik7Ci19Ci0KLS0gKEJPT0wpX3N0eWx1c1RhcEdlc3R1cmVTaG91bGRDcmVhdGVF
ZGl0YWJsZUltYWdlCi17Ci0gICAgcmV0dXJuIFtfY29uZmlndXJhdGlvbiBfZWRpdGFibGVJbWFn
ZXNFbmFibGVkXTsKLX0KLQotI3ByYWdtYSBtYXJrIFVJU2Nyb2xsVmlld0RlbGVnYXRlCi0KLS0g
KEJPT0wpdXNlc1N0YW5kYXJkQ29udGVudFZpZXcKLXsKLSAgICByZXR1cm4gIV9jdXN0b21Db250
ZW50VmlldyAmJiAhX3Bhc3N3b3JkVmlldzsKLX0KLQotLSAoQ0dTaXplKXNjcm9sbFZpZXc6KFVJ
U2Nyb2xsVmlldyopc2Nyb2xsVmlldyBjb250ZW50U2l6ZUZvclpvb21TY2FsZTooQ0dGbG9hdClz
Y2FsZSB3aXRoUHJvcG9zZWRTaXplOihDR1NpemUpcHJvcG9zZWRTaXplCi17Ci0gICAgcmV0dXJu
IHJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXplKCpfcGFnZSwgcHJvcG9zZWRTaXplKTsKLX0KLQot
LSAoVUlWaWV3ICopdmlld0Zvclpvb21pbmdJblNjcm9sbFZpZXc6KFVJU2Nyb2xsVmlldyAqKXNj
cm9sbFZpZXcKLXsKLSAgICBBU1NFUlQoX3Njcm9sbFZpZXcgPT0gc2Nyb2xsVmlldyk7Ci0gICAg
cmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZW50VmlldzsKLX0KLQotLSAodm9pZClzY3JvbGxWaWV3
V2lsbEJlZ2luWm9vbWluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmlldzooVUlW
aWV3ICopdmlldwotewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7
Ci0gICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Iod2ViX3Njcm9sbFZpZXdXaWxsQmVnaW5ab29taW5nOndpdGhWaWV3OildKQotICAgICAg
ICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfc2Nyb2xsVmlld1dpbGxCZWdpblpvb21pbmc6
c2Nyb2xsVmlldyB3aXRoVmlldzp2aWV3XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChzY3JvbGxWaWV3LnBpbmNoR2VzdHVyZVJlY29nbml6ZXIuc3RhdGUgPT0gVUlHZXN0dXJl
UmVjb2duaXplclN0YXRlQmVnYW4pIHsKLSAgICAgICAgX3BhZ2UtPndpbGxTdGFydFVzZXJUcmln
Z2VyZWRab29taW5nKCk7Ci0gICAgICAgIFtfY29udGVudFZpZXcgc2Nyb2xsVmlld1dpbGxTdGFy
dFBhbk9yUGluY2hHZXN0dXJlXTsKLSAgICB9Ci0gICAgW19jb250ZW50VmlldyB3aWxsU3RhcnRa
b29tT3JTY3JvbGxdOwotCi0jaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQotICAgIFtfY29udGVu
dFZpZXcgY2FuY2VsUG9pbnRlcnNGb3JHZXN0dXJlUmVjb2duaXplcjpzY3JvbGxWaWV3LnBpbmNo
R2VzdHVyZVJlY29nbml6ZXJdOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld1dpbGxC
ZWdpbkRyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgaWYgKCFbc2Vs
ZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChz
Y3JvbGxWaWV3LnBhbkdlc3R1cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZUJlZ2FuKQotICAgICAgICBbX2NvbnRlbnRWaWV3IHNjcm9sbFZpZXdXaWxsU3RhcnRQ
YW5PclBpbmNoR2VzdHVyZV07Ci0KLSAgICBbX2NvbnRlbnRWaWV3IHdpbGxTdGFydFpvb21PclNj
cm9sbF07Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKLSAgICAvLyBGSVhNRTogV2Ugd2lsbCB3YW50IHRvIGRldGVjdCB3aGV0aGVyIHNuYXBw
aW5nIHdpbGwgb2NjdXIgYmVmb3JlIGJlZ2lubmluZyB0byBkcmFnLiBTZWUgV2ViUGFnZVByb3h5
OjpkaWRDb21taXRMYXllclRyZWUuCi0gICAgV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5KiBjb29yZGluYXRvciA9IF9wYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5
KCk7Ci0gICAgQVNTRVJUKHNjcm9sbFZpZXcgPT0gX3Njcm9sbFZpZXcuZ2V0KCkpOwotICAgIENH
RmxvYXQgc2Nyb2xsRGVjZWxlcmF0aW9uRmFjdG9yID0gKGNvb3JkaW5hdG9yICYmIGNvb3JkaW5h
dG9yLT5zaG91bGRTZXRTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QoKSkgPyBVSVNjcm9s
bFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVO
b3JtYWw7Ci0gICAgc2Nyb2xsVmlldy5ob3Jpem9udGFsU2Nyb2xsRGVjZWxlcmF0aW9uRmFjdG9y
ID0gc2Nyb2xsRGVjZWxlcmF0aW9uRmFjdG9yOwotICAgIHNjcm9sbFZpZXcudmVydGljYWxTY3Jv
bGxEZWNlbGVyYXRpb25GYWN0b3IgPSBzY3JvbGxEZWNlbGVyYXRpb25GYWN0b3I7Ci0jZW5kaWYK
LX0KLQotLSAodm9pZClfZGlkRmluaXNoU2Nyb2xsaW5nCi17Ci0gICAgaWYgKCFbc2VsZiB1c2Vz
U3RhbmRhcmRDb250ZW50Vmlld10pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9zY2hl
ZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Ci0gICAgW19jb250ZW50VmlldyBkaWRGaW5p
c2hTY3JvbGxpbmddOwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJ
U2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5IHRh
cmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0Ci17
Ci0gICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE2Mzc0NzUzPiBieSBhdm9pZGlu
ZyBkZWNlbGVyYXRpb24gd2hpbGUKLSAgICAvLyB6b29taW5nLiBXZSdsbCBhbmltYXRlIHRvIHRo
ZSByaWdodCBwbGFjZSBvbmNlIHRoZSB6b29tIGZpbmlzaGVzLgotICAgIGlmIChbc2Nyb2xsVmll
dyBpc1pvb21pbmddKQotICAgICAgICAqdGFyZ2V0Q29udGVudE9mZnNldCA9IFtzY3JvbGxWaWV3
IGNvbnRlbnRPZmZzZXRdOwotI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKLSAgICBlbHNlIHsK
LSAgICAgICAgaWYgKFtfY29udGVudFZpZXcgcHJldmVudHNQYW5uaW5nSW5YQXhpc10pCi0gICAg
ICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0
Lng7Ci0gICAgICAgIGlmIChbX2NvbnRlbnRWaWV3IHByZXZlbnRzUGFubmluZ0luWUF4aXNdKQot
ICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHNjcm9sbFZpZXcuY29udGVudE9m
ZnNldC55OwotICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eSogY29vcmRpbmF0b3IgPSBfcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBIZXJlLCBJJ20gZmluZGluZyB0aGUgbWF4aW11
bSBob3Jpem9udGFsL3ZlcnRpY2FsIHNjcm9sbCBvZmZzZXRzLiBUaGVyZSdzIHByb2JhYmx5IGEg
YmV0dGVyIHdheSB0byBkbyB0aGlzLgotICAgICAgICBDR1NpemUgbWF4U2Nyb2xsT2Zmc2V0cyA9
IENHU2l6ZU1ha2Uoc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCAtIHNjcm9sbFZpZXcuYm91
bmRzLnNpemUud2lkdGgsIHNjcm9sbFZpZXcuY29udGVudFNpemUuaGVpZ2h0IC0gc2Nyb2xsVmll
dy5ib3VuZHMuc2l6ZS5oZWlnaHQpOwotCi0gICAgICAgIFVJRWRnZUluc2V0cyBvYnNjdXJlZElu
c2V0OwotCi0gICAgICAgIGlkPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVsZWdhdGVQcml2YXRl
ID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihbc2VsZiBVSURlbGVnYXRl
XSk7Ci0gICAgICAgIGlmIChbdWlEZWxlZ2F0ZVByaXZhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzpmaW5hbE9ic2N1cmVkSW5zZXRzRm9yU2Nyb2xsVmlldzp3aXRoVmVs
b2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDopXSkKLSAgICAgICAgICAgIG9ic2N1cmVkSW5zZXQg
PSBbdWlEZWxlZ2F0ZVByaXZhdGUgX3dlYlZpZXc6c2VsZiBmaW5hbE9ic2N1cmVkSW5zZXRzRm9y
U2Nyb2xsVmlldzpzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTp2ZWxvY2l0eSB0YXJnZXRDb250ZW50
T2Zmc2V0OnRhcmdldENvbnRlbnRPZmZzZXRdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBv
YnNjdXJlZEluc2V0ID0gW3NlbGYgX2NvbXB1dGVkT2JzY3VyZWRJbnNldF07Ci0KLSAgICAgICAg
Q0dSZWN0IHVub2JzY3VyZWRSZWN0ID0gVUlFZGdlSW5zZXRzSW5zZXRSZWN0KHNlbGYuYm91bmRz
LCBvYnNjdXJlZEluc2V0KTsKLQotICAgICAgICBjb29yZGluYXRvci0+YWRqdXN0VGFyZ2V0Q29u
dGVudE9mZnNldEZvclNuYXBwaW5nKG1heFNjcm9sbE9mZnNldHMsIHZlbG9jaXR5LCB1bm9ic2N1
cmVkUmVjdC5vcmlnaW4ueSwgdGFyZ2V0Q29udGVudE9mZnNldCk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3Jv
bGxWaWV3IHdpbGxEZWNlbGVyYXRlOihCT09MKWRlY2VsZXJhdGUKLXsKLSAgICAvLyBJZiB3ZSdy
ZSBkZWNlbGVyYXRpbmcsIHNjcm9sbCBvZmZzZXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4gc2Nyb2xs
Vmlld0RpZEZpbmlzaERlY2VsZXJhdGluZzogaXMgY2FsbGVkLgotICAgIGlmICghZGVjZWxlcmF0
ZSkKLSAgICAgICAgW3NlbGYgX2RpZEZpbmlzaFNjcm9sbGluZ107Ci19Ci0KLS0gKHZvaWQpc2Ny
b2xsVmlld0RpZEVuZERlY2VsZXJhdGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewot
ICAgIFtzZWxmIF9kaWRGaW5pc2hTY3JvbGxpbmddOwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdE
aWRTY3JvbGxUb1RvcDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIFtzZWxmIF9k
aWRGaW5pc2hTY3JvbGxpbmddOwotfQotCi0jaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQotLSAo
Q0dQb2ludClfc2Nyb2xsVmlldzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyBhZGp1c3RlZE9m
ZnNldEZvck9mZnNldDooQ0dQb2ludClvZmZzZXQgdHJhbnNsYXRpb246KENHUG9pbnQpdHJhbnNs
YXRpb24gc3RhcnRQb2ludDooQ0dQb2ludClzdGFydCBsb2NhdGlvbkluVmlldzooQ0dQb2ludCls
b2NhdGlvbkluVmlldyBob3Jpem9udGFsVmVsb2NpdHk6KGlub3V0IGRvdWJsZSAqKWh2IHZlcnRp
Y2FsVmVsb2NpdHk6KGlub3V0IGRvdWJsZSAqKXZ2Ci17Ci0gICAgaWYgKCFbX2NvbnRlbnRWaWV3
IHByZXZlbnRzUGFubmluZ0luWEF4aXNdICYmICFbX2NvbnRlbnRWaWV3IHByZXZlbnRzUGFubmlu
Z0luWUF4aXNdKSB7Ci0gICAgICAgIFtfY29udGVudFZpZXcgY2FuY2VsUG9pbnRlcnNGb3JHZXN0
dXJlUmVjb2duaXplcjpzY3JvbGxWaWV3LnBhbkdlc3R1cmVSZWNvZ25pemVyXTsKLSAgICAgICAg
cmV0dXJuIG9mZnNldDsKLSAgICB9Ci0KLSAgICBDR1BvaW50IGFkanVzdGVkQ29udGVudE9mZnNl
dCA9IENHUG9pbnRNYWtlKG9mZnNldC54LCBvZmZzZXQueSk7Ci0gICAgaWYgKFtfY29udGVudFZp
ZXcgcHJldmVudHNQYW5uaW5nSW5YQXhpc10pCi0gICAgICAgIGFkanVzdGVkQ29udGVudE9mZnNl
dC54ID0gc3RhcnQueDsKLSAgICBpZiAoW19jb250ZW50VmlldyBwcmV2ZW50c1Bhbm5pbmdJbllB
eGlzXSkKLSAgICAgICAgYWRqdXN0ZWRDb250ZW50T2Zmc2V0LnkgPSBzdGFydC55OwotCi0gICAg
aWYgKCghW19jb250ZW50VmlldyBwcmV2ZW50c1Bhbm5pbmdJblhBeGlzXSAmJiBhZGp1c3RlZENv
bnRlbnRPZmZzZXQueCAhPSBzdGFydC54KQotICAgICAgICB8fCAoIVtfY29udGVudFZpZXcgcHJl
dmVudHNQYW5uaW5nSW5ZQXhpc10gJiYgYWRqdXN0ZWRDb250ZW50T2Zmc2V0LnkgIT0gc3RhcnQu
eSkpIHsKLSAgICAgICAgW19jb250ZW50VmlldyBjYW5jZWxQb2ludGVyc0Zvckdlc3R1cmVSZWNv
Z25pemVyOnNjcm9sbFZpZXcucGFuR2VzdHVyZVJlY29nbml6ZXJdOwotICAgIH0KLQotICAgIHJl
dHVybiBhZGp1c3RlZENvbnRlbnRPZmZzZXQ7Ci19Ci0jZW5kaWYKLQotLSAodm9pZClzY3JvbGxW
aWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgaWYgKCFbc2Vs
ZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10gJiYgW19jdXN0b21Db250ZW50VmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9zY3JvbGxWaWV3RGlkU2Nyb2xsOildKQotICAgICAg
ICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3XTsKLQotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVj
dFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3OnNjcm9sbFZpZXddOwotCi0gICAgaWYgKFdlYktpdDo6
UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhKiBzY3JvbGxQZXJmRGF0YSA9
IF9wYWdlLT5zY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEoKSkKLSAgICAgICAgc2Nyb2xsUGVyZkRh
dGEtPmRpZFNjcm9sbChbc2VsZiB2aXNpYmxlUmVjdEluVmlld0Nvb3JkaW5hdGVzXSk7Ci19Ci0K
LS0gKHZvaWQpc2Nyb2xsVmlld0RpZFpvb206KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsK
LSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSAmJiBbX2N1c3RvbUNvbnRl
bnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViX3Njcm9sbFZpZXdEaWRab29t
OildKQotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zY3JvbGxWaWV3RGlkWm9vbTpz
Y3JvbGxWaWV3XTsKLQotICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF07Ci0g
ICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJTY3JvbGxJblZp
ZXc6c2Nyb2xsVmlld107Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZFpvb21pbmc6KFVJ
U2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZpZXc6KFVJVmlldyAqKXZpZXcgYXRTY2FsZToo
Q0dGbG9hdClzY2FsZQotewotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXdd
ICYmIFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJf
c2Nyb2xsVmlld0RpZEVuZFpvb21pbmc6d2l0aFZpZXc6YXRTY2FsZTopXSkKLSAgICAgICAgW19j
dXN0b21Db250ZW50VmlldyB3ZWJfc2Nyb2xsVmlld0RpZEVuZFpvb21pbmc6c2Nyb2xsVmlldyB3
aXRoVmlldzp2aWV3IGF0U2NhbGU6c2NhbGVdOwotCi0gICAgQVNTRVJUKHNjcm9sbFZpZXcgPT0g
X3Njcm9sbFZpZXcpOwotICAgIC8vIEZJWE1FOiByZW1vdmUgd2hlbiByZGFyOi8vcHJvYmxlbS8z
NjA2NTQ5NSBpcyBmaXhlZC4KLSAgICAvLyBXaGVuIHJvdGF0aW5nIHdpdGggdHdvIGZpbmdlcnMg
ZG93biwgVUlTY3JvbGxWaWV3IGNhbiBzZXQgYSBib2d1cyBjb250ZW50IHZpZXcgcG9zaXRpb24u
Ci0gICAgLy8gIkNlbnRlciIgaXMgdG9wIGxlZnQgYmVjYXVzZSB3ZSBzZXQgdGhlIGFuY2hvclBv
aW50IHRvIDAsMC4KLSAgICBbX2NvbnRlbnRWaWV3IHNldENlbnRlcjpzZWxmLmJvdW5kcy5vcmln
aW5dOwotCi0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJT
Y3JvbGxJblZpZXc6c2Nyb2xsVmlld107Ci0gICAgW19jb250ZW50VmlldyBkaWRab29tVG9TY2Fs
ZTpzY2FsZV07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZFNjcm9sbGluZ0FuaW1hdGlv
bjooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIFtzZWxmIF9kaWRGaW5pc2hTY3Jv
bGxpbmddOwotfQotCi0tICh2b2lkKV9zY3JvbGxWaWV3RGlkSW50ZXJydXB0RGVjZWxlcmF0aW5n
OihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRh
cmRDb250ZW50Vmlld10pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfY29udGVudFZpZXcgZGlk
SW50ZXJydXB0U2Nyb2xsaW5nXTsKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJl
Y3RVcGRhdGVBZnRlclNjcm9sbEluVmlldzpzY3JvbGxWaWV3XTsKLX0KLQotI3ByYWdtYSBtYXJr
IGVuZCBVSVNjcm9sbFZpZXdEZWxlZ2F0ZQotCi0tIChVSVZpZXcgKilfZW5jbG9zaW5nVmlld0Zv
ckV4cG9zZWRSZWN0Q29tcHV0YXRpb24KLXsKLSAgICByZXR1cm4gW3NlbGYgX3Njcm9sbGVyXTsK
LX0KLQotLSAoQ0dSZWN0KV92aXNpYmxlUmVjdEluRW5jbG9zaW5nVmlldzooVUlWaWV3ICopZW5j
bG9zaW5nVmlldwotewotICAgIGlmICghZW5jbG9zaW5nVmlldykKLSAgICAgICAgcmV0dXJuIHNl
bGYuYm91bmRzOwotCi0gICAgQ0dSZWN0IGV4cG9zZWRSZWN0ID0gW2VuY2xvc2luZ1ZpZXcgY29u
dmVydFJlY3Q6ZW5jbG9zaW5nVmlldy5ib3VuZHMgdG9WaWV3OnNlbGZdOwotICAgIHJldHVybiBD
R1JlY3RJbnRlcnNlY3RzUmVjdChleHBvc2VkUmVjdCwgc2VsZi5ib3VuZHMpID8gQ0dSZWN0SW50
ZXJzZWN0aW9uKGV4cG9zZWRSZWN0LCBzZWxmLmJvdW5kcykgOiBDR1JlY3RaZXJvOwotfQotCi0t
IChDR1JlY3QpX3Zpc2libGVDb250ZW50UmVjdAotewotICAgIGlmIChfZnJvemVuVmlzaWJsZUNv
bnRlbnRSZWN0KQotICAgICAgICByZXR1cm4gX2Zyb3plblZpc2libGVDb250ZW50UmVjdC52YWx1
ZSgpOwotCi0gICAgQ0dSZWN0IHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2Vs
ZiBjb252ZXJ0UmVjdDpzZWxmLmJvdW5kcyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLQot
ICAgIGlmIChVSVZpZXcgKmVuY2xvc2luZ1ZpZXcgPSBbc2VsZiBfZW5jbG9zaW5nVmlld0ZvckV4
cG9zZWRSZWN0Q29tcHV0YXRpb25dKSB7Ci0gICAgICAgIENHUmVjdCB2aWV3VmlzaWJsZVJlY3Qg
PSBbc2VsZiBfdmlzaWJsZVJlY3RJbkVuY2xvc2luZ1ZpZXc6ZW5jbG9zaW5nVmlld107Ci0gICAg
ICAgIENHUmVjdCB2aWV3VmlzaWJsZUNvbnRlbnRSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6dmll
d1Zpc2libGVSZWN0IHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotICAgICAgICB2aXNpYmxl
UmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gQ0dSZWN0SW50ZXJzZWN0aW9uKHZpc2libGVSZWN0
SW5Db250ZW50Q29vcmRpbmF0ZXMsIHZpZXdWaXNpYmxlQ29udGVudFJlY3QpOwotICAgIH0KLQot
ICAgIHJldHVybiB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzOwotfQotCi0vLyBDYWxs
ZWQgd2hlbiBzb21lIGFuY2VzdG9yIFVJU2Nyb2xsVmlldyBzY3JvbGxzLgotLSAodm9pZClfZGlk
U2Nyb2xsCi17Ci0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0
ZXJTY3JvbGxJblZpZXc6W3NlbGYgX3Njcm9sbGVyXV07Ci0KLSAgICBjb25zdCBOU1RpbWVJbnRl
cnZhbCBTY3JvbGxpbmdFbmRlZFRpbWVySW50ZXJ2YWwgPSAwLjAzMjsKLSAgICBpZiAoIV9lbmNs
b3NpbmdTY3JvbGxWaWV3U2Nyb2xsVGltZXIpIHsKLSAgICAgICAgX2VuY2xvc2luZ1Njcm9sbFZp
ZXdTY3JvbGxUaW1lciA9IGFkb3B0TlMoW1tOU1RpbWVyIGFsbG9jXSBpbml0V2l0aEZpcmVEYXRl
OltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzpTY3JvbGxpbmdFbmRlZFRpbWVy
SW50ZXJ2YWxdCi0gICAgICAgICAgICBpbnRlcnZhbDowIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihfZW5jbG9zaW5nU2Nyb2xsZXJTY3JvbGxpbmdFbmRlZDopIHVzZXJJbmZvOm5pbCBy
ZXBlYXRzOllFU10pOwotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gYWRkVGltZXI6
X2VuY2xvc2luZ1Njcm9sbFZpZXdTY3JvbGxUaW1lci5nZXQoKSBmb3JNb2RlOk5TRGVmYXVsdFJ1
bkxvb3BNb2RlXTsKLSAgICB9Ci0gICAgX2RpZFNjcm9sbFNpbmNlTGFzdFRpbWVyRmlyZSA9IFlF
UzsKLX0KLQotLSAodm9pZClfZW5jbG9zaW5nU2Nyb2xsZXJTY3JvbGxpbmdFbmRlZDooTlNUaW1l
ciAqKXRpbWVyCi17Ci0gICAgaWYgKF9kaWRTY3JvbGxTaW5jZUxhc3RUaW1lckZpcmUpIHsKLSAg
ICAgICAgX2RpZFNjcm9sbFNpbmNlTGFzdFRpbWVyRmlyZSA9IE5POwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsK
LSAgICBbX2VuY2xvc2luZ1Njcm9sbFZpZXdTY3JvbGxUaW1lciBpbnZhbGlkYXRlXTsKLSAgICBf
ZW5jbG9zaW5nU2Nyb2xsVmlld1Njcm9sbFRpbWVyID0gbmlsOwotfQotCi0tIChVSUVkZ2VJbnNl
dHMpX3Njcm9sbFZpZXdTeXN0ZW1Db250ZW50SW5zZXQKLXsKLSAgICAvLyBJdCdzIG5vdCBzYWZl
IHRvIGFjY2VzcyB0aGUgc2Nyb2xsIHZpZXcncyBzYWZlQXJlYUluc2V0cyBvciBfc3lzdGVtQ29u
dGVudEluc2V0IGZyb20KLSAgICAvLyBpbnNpZGUgb3VyIGxheW91dFN1YnZpZXdzIGltcGxlbWVu
dGF0aW9uLCBiZWNhdXNlIHRoZXkgYXJlbid0IHVwZGF0ZWQgdW50aWwgYWZ0ZXJ3YXJkcy4KLSAg
ICAvLyBJbnN0ZWFkLCBkZXBlbmQgb24gdGhlIGZhY3QgdGhhdCB0aGUgVUlTY3JvbGxWaWV3IGFu
ZCBXS1dlYlZpZXcgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUKLSAgICAvLyBzcGFjZSwgYW5k
IG1hcCB0aGUgV0tXZWJWaWV3J3Mgb3duIGluc2V0cyBpbnRvIHRoZSBzY3JvbGwgdmlldyBtYW51
YWxseS4KLSAgICByZXR1cm4gVUlFZGdlSW5zZXRzQWRkKFtfc2Nyb2xsVmlldyBfY29udGVudFNj
cm9sbEluc2V0XSwgc2VsZi5zYWZlQXJlYUluc2V0cywgW19zY3JvbGxWaWV3IF9lZGdlc0FwcGx5
aW5nU2FmZUFyZWFJbnNldHNUb0NvbnRlbnRJbnNldF0pOwotfQotCi0tIChXZWJDb3JlOjpGbG9h
dFNpemUpYWN0aXZlVmlld0xheW91dFNpemU6KGNvbnN0IENHUmVjdCYpYm91bmRzCi17Ci0gICAg
aWYgKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRTaXplKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlLnZhbHVlKCkpOwotCi0jaWYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwCi0gICAgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0U2l6ZShVSUVkZ2VJbnNldHNJbnNldFJlY3QoQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMuc2l6
ZS53aWR0aCwgYm91bmRzLnNpemUuaGVpZ2h0KSwgc2VsZi5fc2Nyb2xsVmlld1N5c3RlbUNvbnRl
bnRJbnNldCkuc2l6ZSk7Ci0jZWxzZQotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNpemUgeyBi
b3VuZHMuc2l6ZSB9OwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2Rpc3BhdGNoU2V0Vmlld0xheW91
dFNpemU6KFdlYkNvcmU6OkZsb2F0U2l6ZSl2aWV3TGF5b3V0U2l6ZQotewotICAgIGlmIChfbGFz
dFNlbnRWaWV3TGF5b3V0U2l6ZSAmJiBDR1NpemVFcXVhbFRvU2l6ZShfbGFzdFNlbnRWaWV3TGF5
b3V0U2l6ZS52YWx1ZSgpLCB2aWV3TGF5b3V0U2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiLVtXS1dlYlZpZXcgIiA8
PCBfcGFnZS0+aWRlbnRpZmllcigpIDw8ICIgX2Rpc3BhdGNoU2V0Vmlld0xheW91dFNpemU6XSAi
IDw8IHZpZXdMYXlvdXRTaXplIDw8ICIgY29udGVudFpvb21TY2FsZSAiIDw8IGNvbnRlbnRab29t
U2NhbGUoc2VsZikpOwotICAgIF9wYWdlLT5zZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5
b3V0U2l6ZSh2aWV3TGF5b3V0U2l6ZSwgX3BhZ2UtPmxheW91dFNpemVTY2FsZUZhY3RvcigpLCBf
cGFnZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCkpOwotICAgIF9sYXN0U2VudFZpZXdM
YXlvdXRTaXplID0gdmlld0xheW91dFNpemU7Ci19Ci0KLS0gKHZvaWQpX2Rpc3BhdGNoU2V0TWF4
aW11bVVub2JzY3VyZWRTaXplOihXZWJDb3JlOjpGbG9hdFNpemUpbWF4aW11bVVub2JzY3VyZWRT
aXplCi17Ci0gICAgaWYgKF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZSAmJiBDR1NpemVF
cXVhbFRvU2l6ZShfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUudmFsdWUoKSwgbWF4aW11
bVVub2JzY3VyZWRTaXplKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX3BhZ2UtPnNldE1heGlt
dW1Vbm9ic2N1cmVkU2l6ZShtYXhpbXVtVW5vYnNjdXJlZFNpemUpOwotICAgIF9sYXN0U2VudE1h
eGltdW1Vbm9ic2N1cmVkU2l6ZSA9IG1heGltdW1Vbm9ic2N1cmVkU2l6ZTsKLX0KLQotLSAodm9p
ZClfZGlzcGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjooaW50MzJfdClkZXZpY2VPcmllbnRhdGlv
bgotewotICAgIGlmIChfbGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiAmJiBfbGFzdFNlbnREZXZp
Y2VPcmllbnRhdGlvbi52YWx1ZSgpID09IGRldmljZU9yaWVudGF0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBfcGFnZS0+c2V0RGV2aWNlT3JpZW50YXRpb24oZGV2aWNlT3JpZW50YXRpb24p
OwotICAgIF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uID0gZGV2aWNlT3JpZW50YXRpb247Ci19
Ci0KLS0gKHZvaWQpX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkCi17Ci0gICAgQ0dSZWN0IGJvdW5kcyA9
IHNlbGYuYm91bmRzOwotICAgIFtfc2Nyb2xsVmlldyBzZXRGcmFtZTpib3VuZHNdOwotCi0gICAg
aWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0
VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKLSAgICAgICAgaWYgKCFfdmlld0xheW91dFNpemVP
dmVycmlkZSkKLSAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOltz
ZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXV07Ci0gICAgICAgIGlmICghX21h
eGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKQotICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNo
U2V0TWF4aW11bVVub2JzY3VyZWRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZShib3VuZHMuc2l6ZSld
OwotCi0gICAgICAgIEJPT0wgc2l6ZUNoYW5nZWQgPSBOTzsKLSAgICAgICAgaWYgKGF1dG8gZHJh
d2luZ0FyZWEgPSBfcGFnZS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgICAgIHNpemVDaGFuZ2Vk
ID0gZHJhd2luZ0FyZWEtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShib3VuZHMuc2l6ZSkpOwot
Ci0gICAgICAgIGlmIChzaXplQ2hhbmdlZCAmIFtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3
XSkKLSAgICAgICAgICAgIFtfY29udGVudFZpZXcgc2V0U2l6ZUNoYW5nZWRTaW5jZUxhc3RWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGU6WUVTXTsKLSAgICB9Ci0KLSAgICBbX2N1c3RvbUNvbnRlbnRW
aWV3IHdlYl9zZXRNaW5pbXVtU2l6ZTpib3VuZHMuc2l6ZV07Ci0gICAgW3NlbGYgX3NjaGVkdWxl
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKLX0KLQotLy8gVW5vYnNjdXJlZCBjb250ZW50IHJl
Y3Qgd2hlcmUgdGhlIHVzZXIgY2FuIGludGVyYWN0LiBXaGVuIHRoZSBrZXlib2FyZCBpcyB1cCwg
dGhpcyBzaG91bGQgYmUgdGhlIGFyZWEgYWJvdmUgb3IgYmVsb3cgdGhlIGtleWJvYXJkLCB3aGVy
ZXZlciB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuCi0tIChDR1JlY3QpX2NvbnRlbnRSZWN0Rm9yVXNl
ckludGVyYWN0aW9uCi17Ci0gICAgLy8gRklYTUU6IGhhbmRsZSBzcGxpdCBrZXlib2FyZC4KLSAg
ICBVSUVkZ2VJbnNldHMgb2JzY3VyZWRJbnNldHMgPSBfb2JzY3VyZWRJbnNldHM7Ci0gICAgb2Jz
Y3VyZWRJbnNldHMuYm90dG9tID0gc3RkOjptYXgoX29ic2N1cmVkSW5zZXRzLmJvdHRvbSwgX2lu
cHV0Vmlld0JvdW5kcy5zaXplLmhlaWdodCk7Ci0gICAgQ0dSZWN0IHVub2JzY3VyZWRSZWN0ID0g
VUlFZGdlSW5zZXRzSW5zZXRSZWN0KHNlbGYuYm91bmRzLCBvYnNjdXJlZEluc2V0cyk7Ci0gICAg
cmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OnVub2JzY3VyZWRSZWN0IHRvVmlldzpzZWxmLl9jdXJy
ZW50Q29udGVudFZpZXddOwotfQotCi0vLyBJZGVhbGx5IFVJU2Nyb2xsVmlldyB3b3VsZCBleHBv
c2UgdGhpcyBmb3IgdXM6IDxyZGFyOi8vcHJvYmxlbS8yMTM5NDU2Nz4uCi0tIChCT09MKV9zY3Jv
bGxWaWV3SXNSdWJiZXJCYW5kaW5nCi17Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBf
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLQotICAgIENHUG9pbnQgY29udGVudE9mZnNldCA9
IFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XTsKLSAgICBDR1BvaW50IGJvdW5kZWRPZmZzZXQg
PSBjb250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5nZXQoKSwgY29u
dGVudE9mZnNldCk7Ci0gICAgcmV0dXJuICFwb2ludHNFcXVhbEluRGV2aWNlUGl4ZWxzKGNvbnRl
bnRPZmZzZXQsIGJvdW5kZWRPZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yKTsKLX0KLQotI2lmIF9f
SVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMAotLSAodm9pZClzYWZlQXJl
YUluc2V0c0RpZENoYW5nZQotewotICAgIFtzdXBlciBzYWZlQXJlYUluc2V0c0RpZENoYW5nZV07
Ci0KLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwotfQotI2Vu
ZGlmCi0KLS0gKHZvaWQpX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlCi17Ci0gICAg
Ly8gRm9yIHZpc2libGUgcmVjdCB1cGRhdGVzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZp
YyBVSVNjcm9sbFZpZXcsIGp1c3QgY29uc2lkZXIgb3VyIG93biBzY3JvbGxlci4KLSAgICBbc2Vs
ZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNjcm9sbEluVmlldzpfc2Ny
b2xsVmlldy5nZXQoKV07Ci19Ci0KLS0gKEJPT0wpX3Njcm9sbFZpZXdJc0luU3RhYmxlU3RhdGU6
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBCT09MIGlzU3RhYmxlU3RhdGUgPSAh
KFtzY3JvbGxWaWV3IGlzRHJhZ2dpbmddIHx8IFtzY3JvbGxWaWV3IGlzRGVjZWxlcmF0aW5nXSB8
fCBbc2Nyb2xsVmlldyBpc1pvb21pbmddIHx8IFtzY3JvbGxWaWV3IF9pc0FuaW1hdGluZ1pvb21d
IHx8IFtzY3JvbGxWaWV3IF9pc1Njcm9sbGluZ1RvVG9wXSk7Ci0KLSAgICBpZiAoaXNTdGFibGVT
dGF0ZSAmJiBzY3JvbGxWaWV3ID09IF9zY3JvbGxWaWV3LmdldCgpKQotICAgICAgICBpc1N0YWJs
ZVN0YXRlID0gIV9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5OwotCi0gICAg
aWYgKGlzU3RhYmxlU3RhdGUgJiYgc2Nyb2xsVmlldyA9PSBfc2Nyb2xsVmlldy5nZXQoKSkKLSAg
ICAgICAgaXNTdGFibGVTdGF0ZSA9ICFbc2VsZiBfc2Nyb2xsVmlld0lzUnViYmVyQmFuZGluZ107
Ci0KLSAgICBpZiAoaXNTdGFibGVTdGF0ZSkKLSAgICAgICAgaXNTdGFibGVTdGF0ZSA9ICFzY3Jv
bGxWaWV3Ll9pc0ludGVycnVwdGluZ0RlY2VsZXJhdGlvbjsKLQotICAgIGlmIChOU051bWJlciAq
c3RhYmxlT3ZlcnJpZGUgPSBzZWxmLl9zdGFibGVTdGF0ZU92ZXJyaWRlKQotICAgICAgICBpc1N0
YWJsZVN0YXRlID0gc3RhYmxlT3ZlcnJpZGUuYm9vbFZhbHVlOwotCi0gICAgcmV0dXJuIGlzU3Rh
YmxlU3RhdGU7Ci19Ci0KLS0gKHZvaWQpX2FkZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdFByZUNv
bW1pdEhhbmRsZXIKLXsKLSAgICBpZiAoX2hhc0VudGVyZWREZWFsbG9jKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HX0ZBVUxUKFZpZXdTdGF0ZSwgIi1bV0tXZWJWaWV3ICVwIF9hZGRVcGRhdGVWaXNp
YmxlQ29udGVudFJlY3RQcmVDb21taXRIYW5kbGVyXTogQXR0ZW1wdGVkIHRvIGFkZCBwcmUtY29t
bWl0IGhhbmRsZXIgdW5kZXIgLWRlYWxsb2MuIEJhaWxpbmcuIiwgc2VsZik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHJldGFpbmVkU2VsZiA9IHJldGFpblB0cihzZWxmKTsK
LSAgICBbQ0FUcmFuc2FjdGlvbiBhZGRDb21taXRIYW5kbGVyOltyZXRhaW5lZFNlbGZdIHsKLSAg
ICAgICAgV0tXZWJWaWV3ICp3ZWJWaWV3ID0gcmV0YWluZWRTZWxmLmdldCgpOwotICAgICAgICBp
ZiAoIVt3ZWJWaWV3IF9pc1ZhbGlkXSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUYod2Vi
Vmlldy5fcGFnZSAmJiB3ZWJWaWV3Ll9wYWdlLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwg
Vmlld1N0YXRlLCAiSW4gQ0FUcmFuc2FjdGlvbiBwcmVDb21taXRIYW5kbGVyLCBXS1dlYlZpZXcg
JXAgaXMgaW52YWxpZCIsIHdlYlZpZXcpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgQHRyeSB7Ci0gICAgICAgICAgICBbd2ViVmlldyBfdXBkYXRlVmlzaWJsZUNv
bnRlbnRSZWN0c107Ci0gICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7
Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JRih3ZWJWaWV3Ll9wYWdlICYmIHdlYlZpZXcuX3Bh
Z2UtPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBWaWV3U3RhdGUsICJJbiBDQVRyYW5zYWN0
aW9uIHByZUNvbW1pdEhhbmRsZXIsIC1bV0tXZWJWaWV3ICVwIF91cGRhdGVWaXNpYmxlQ29udGVu
dFJlY3RzXSB0aHJldyBhbiBleGNlcHRpb24iLCB3ZWJWaWV3KTsKLSAgICAgICAgfQotICAgICAg
ICB3ZWJWaWV3LT5faGFzU2NoZWR1bGVkVmlzaWJsZVJlY3RVcGRhdGUgPSBOTzsKLSAgICB9IGZv
clBoYXNlOmtDQVRyYW5zYWN0aW9uUGhhc2VQcmVDb21taXRdOwotfQotCi0tICh2b2lkKV9zY2hl
ZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3OihVSVNjcm9sbFZp
ZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVkdWxl
ZEZyb21TY3JvbGxWaWV3SW5TdGFibGVTdGF0ZSA9IFtzZWxmIF9zY3JvbGxWaWV3SXNJblN0YWJs
ZVN0YXRlOnNjcm9sbFZpZXddOwotCi0gICAgaWYgKF9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVw
ZGF0ZSkgewotICAgICAgICBhdXRvIHRpbWVOb3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAg
ICAgICAgaWYgKCh0aW1lTm93IC0gX3RpbWVPZlJlcXVlc3RGb3JWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGUpID4gZGVsYXlCZWZvcmVOb1Zpc2libGVDb250ZW50c1JlY3RzTG9nZ2luZykgewotICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiLVtXS1dlYlZpZXcgJXAgX3NjaGVkdWxl
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJTY3JvbGxJblZpZXddOiBfaGFzU2NoZWR1bGVk
VmlzaWJsZVJlY3RVcGRhdGUgaXMgdHJ1ZSBidXQgaGF2ZW4ndCB1cGRhdGVkIHZpc2libGUgY29u
dGVudCByZWN0cyBmb3IgJS4yZnMgKGxhc3QgdXBkYXRlIHdhcyAlLjJmcyBhZ28pIC0gdmFsaWQg
JWQiLAotICAgICAgICAgICAgICAgIHNlbGYsICh0aW1lTm93IC0gX3RpbWVPZlJlcXVlc3RGb3JW
aXNpYmxlQ29udGVudFJlY3RVcGRhdGUpLnZhbHVlKCksICh0aW1lTm93IC0gX3RpbWVPZkxhc3RW
aXNpYmxlQ29udGVudFJlY3RVcGRhdGUpLnZhbHVlKCksIFtzZWxmIF9pc1ZhbGlkXSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIF9oYXNTY2hlZHVsZWRWaXNpYmxl
UmVjdFVwZGF0ZSA9IFlFUzsKLSAgICBfdGltZU9mUmVxdWVzdEZvclZpc2libGVDb250ZW50UmVj
dFVwZGF0ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotCi0gICAgQ0FUcmFuc2FjdGlvblBoYXNl
IHRyYW5zYWN0aW9uUGhhc2UgPSBbQ0FUcmFuc2FjdGlvbiBjdXJyZW50UGhhc2VdOwotICAgIGlm
ICh0cmFuc2FjdGlvblBoYXNlID09IGtDQVRyYW5zYWN0aW9uUGhhc2VOdWxsIHx8IHRyYW5zYWN0
aW9uUGhhc2UgPT0ga0NBVHJhbnNhY3Rpb25QaGFzZVByZUxheW91dCkgewotICAgICAgICBbc2Vs
ZiBfYWRkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0UHJlQ29tbWl0SGFuZGxlcl07Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbcmV0YWluZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSB7Ci0gICAgICAgIFdLV2Vi
VmlldyAqd2ViVmlldyA9IHJldGFpbmVkU2VsZi5nZXQoKTsKLSAgICAgICAgaWYgKCFbd2ViVmll
dyBfaXNWYWxpZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFt3ZWJWaWV3IF9hZGRV
cGRhdGVWaXNpYmxlQ29udGVudFJlY3RQcmVDb21taXRIYW5kbGVyXTsKKyNpZiBFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKQorICAgIGF1dG8gaWRlbnRpZmllciA9IGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKTsKKyAgICBhdXRvIGF0dGFjaG1lbnQgPSBBUEk6OkF0dGFjaG1lbnQ6OmNyZWF0
ZShpZGVudGlmaWVyLCAqX3BhZ2UpOworICAgIGF0dGFjaG1lbnQtPnNldEZpbGVXcmFwcGVyQW5k
VXBkYXRlQ29udGVudFR5cGUoZmlsZVdyYXBwZXIsIGNvbnRlbnRUeXBlKTsKKyAgICBfcGFnZS0+
aW5zZXJ0QXR0YWNobWVudChhdHRhY2htZW50LmNvcHlSZWYoKSwgW2NhcHR1cmVkSGFuZGxlciA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKGNhcHR1cmVkSGFuZGxlcikKKyAgICAgICAgICAg
IGNhcHR1cmVkSGFuZGxlcihlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5v
bmUpOwogICAgIH0pOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxWaWV3Q2FuU2Nyb2xsKFVJU2Ny
b2xsVmlldyAqc2Nyb2xsVmlldykKLXsKLSAgICBpZiAoIXNjcm9sbFZpZXcpCi0gICAgICAgIHJl
dHVybiBOTzsKLQotICAgIFVJRWRnZUluc2V0cyBjb250ZW50SW5zZXQgPSBzY3JvbGxWaWV3LmNv
bnRlbnRJbnNldDsKLSAgICBDR1NpemUgY29udGVudFNpemUgPSBzY3JvbGxWaWV3LmNvbnRlbnRT
aXplOwotICAgIENHU2l6ZSBib3VuZHNTaXplID0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZTsKLQot
ICAgIHJldHVybiAoY29udGVudFNpemUud2lkdGggKyBjb250ZW50SW5zZXQubGVmdCArIGNvbnRl
bnRJbnNldC5yaWdodCkgPiBib3VuZHNTaXplLndpZHRoCi0gICAgICAgIHx8IChjb250ZW50U2l6
ZS5oZWlnaHQgKyBjb250ZW50SW5zZXQudG9wICsgY29udGVudEluc2V0LmJvdHRvbSkgPiBib3Vu
ZHNTaXplLmhlaWdodDsKLX0KLQotLSAoQ0dSZWN0KV9jb250ZW50Qm91bmRzRXh0ZW5kZWRGb3JS
dWJiZXJiYW5kaW5nV2l0aFNjYWxlOihDR0Zsb2F0KXNjYWxlRmFjdG9yCi17Ci0gICAgQ0dQb2lu
dCBjb250ZW50T2Zmc2V0ID0gW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOwotICAgIENHUG9p
bnQgYm91bmRlZE9mZnNldCA9IGNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3Jv
bGxWaWV3LmdldCgpLCBjb250ZW50T2Zmc2V0KTsKLQotICAgIENHRmxvYXQgaG9yaW9udGFsUnVi
YmVyYmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzID0gKGNvbnRlbnRPZmZzZXQueCAtIGJv
dW5kZWRPZmZzZXQueCkgLyBzY2FsZUZhY3RvcjsKLSAgICBDR0Zsb2F0IHZlcnRpY2FsUnViYmVy
YmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzID0gKGNvbnRlbnRPZmZzZXQueSAtIGJvdW5k
ZWRPZmZzZXQueSkgLyBzY2FsZUZhY3RvcjsKLQotICAgIENHUmVjdCBleHRlbmRlZEJvdW5kcyA9
IFtfY29udGVudFZpZXcgYm91bmRzXTsKLQotICAgIGlmIChob3Jpb250YWxSdWJiZXJiYW5kQW1v
dW50SW5Db250ZW50Q29vcmRpbmF0ZXMgPCAwKSB7Ci0gICAgICAgIGV4dGVuZGVkQm91bmRzLm9y
aWdpbi54ICs9IGhvcmlvbnRhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29yZGluYXRlczsK
LSAgICAgICAgZXh0ZW5kZWRCb3VuZHMuc2l6ZS53aWR0aCAtPSBob3Jpb250YWxSdWJiZXJiYW5k
QW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXM7Ci0gICAgfSBlbHNlIGlmIChob3Jpb250YWxSdWJi
ZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXMgPiAwKQotICAgICAgICBleHRlbmRlZEJv
dW5kcy5zaXplLndpZHRoICs9IGhvcmlvbnRhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29y
ZGluYXRlczsKLQotICAgIGlmICh2ZXJ0aWNhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29y
ZGluYXRlcyA8IDApIHsKLSAgICAgICAgZXh0ZW5kZWRCb3VuZHMub3JpZ2luLnkgKz0gdmVydGlj
YWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGV4dGVuZGVk
Qm91bmRzLnNpemUuaGVpZ2h0IC09IHZlcnRpY2FsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENv
b3JkaW5hdGVzOwotICAgIH0gZWxzZSBpZiAodmVydGljYWxSdWJiZXJiYW5kQW1vdW50SW5Db250
ZW50Q29vcmRpbmF0ZXMgPiAwKQotICAgICAgICBleHRlbmRlZEJvdW5kcy5zaXplLmhlaWdodCAr
PSB2ZXJ0aWNhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29yZGluYXRlczsKLQotICAgIHJl
dHVybiBleHRlbmRlZEJvdW5kczsKLX0KIAotLSAodm9pZClfdXBkYXRlVmlzaWJsZUNvbnRlbnRS
ZWN0cwotewotICAgIEJPT0wgaW5TdGFibGVTdGF0ZSA9IF92aXNpYmxlQ29udGVudFJlY3RVcGRh
dGVTY2hlZHVsZWRGcm9tU2Nyb2xsVmlld0luU3RhYmxlU3RhdGU7Ci0KLSAgICBpZiAoIVtzZWxm
IHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgewotICAgICAgICBbX3Bhc3N3b3JkVmlldyBzZXRG
cmFtZTpzZWxmLmJvdW5kc107Ci0gICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2NvbXB1
dGVkQ29udGVudEluc2V0RGlkQ2hhbmdlXTsKLSAgICAgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJs
ZUNvbnRlbnRSZWN0c0ZvckFueVJlYXNvbiA9IFlFUzsKLSAgICAgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF91cGRhdGVWaXNpYmxl
Q29udGVudFJlY3RzOl0gLSB1c2VzU3RhbmRhcmRDb250ZW50VmlldyBpcyBOTywgYmFpbGluZyIs
IHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvIHRpbWVOb3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICBp
ZiAoX3RpbWVPZkZpcnN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQp
IHsKLSAgICAgICAgYXV0byB0aW1lU2luY2VGaXJzdFJlcXVlc3RXaXRoUGVuZGluZ0NvbW1pdCA9
IHRpbWVOb3cgLSAqX3RpbWVPZkZpcnN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRp
bmdDb21taXQ7Ci0gICAgICAgIGlmICh0aW1lU2luY2VGaXJzdFJlcXVlc3RXaXRoUGVuZGluZ0Nv
bW1pdCA+IGRlbGF5QmVmb3JlTm9Db21taXRzTG9nZ2luZykKLSAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfdXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0czpdIC0gaGF2ZSBub3QgcmVjZWl2ZWQgYSBjb21taXQgJS4yZnMg
YWZ0ZXIgdmlzaWJsZSBjb250ZW50IHJlY3QgdXBkYXRlOyBsYXN0VHJhbnNhY3Rpb25JRCAlbGx1
Iiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCB0aW1lU2luY2VGaXJzdFJl
cXVlc3RXaXRoUGVuZGluZ0NvbW1pdC52YWx1ZSgpLCBfbGFzdFRyYW5zYWN0aW9uSUQudG9VSW50
NjQoKSk7Ci0gICAgfQotCi0gICAgaWYgKF9pbnZva2luZ1VJU2Nyb2xsVmlld0RlbGVnYXRlQ2Fs
bGJhY2spIHsKLSAgICAgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVJ
U2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2sgPSBZRVM7Ci0gICAgICAgIF9kaWREZWZlclVwZGF0
ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFzb24gPSBZRVM7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfdXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0czpdIC0gX2ludm9raW5nVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxs
YmFjayBpcyBZRVMsIGJhaWxpbmciLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKF9keW5hbWljVmlld3BvcnRV
cGRhdGVNb2RlICE9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXpp
bmcKLSAgICAgICAgfHwgKF9uZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFp
bkZyYW1lICYmICFbX2NvbnRlbnRWaWV3IHNpemVDaGFuZ2VkU2luY2VMYXN0VmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlXSkKLSAgICAgICAgfHwgW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXQot
ICAgICAgICB8fCBfY3VycmVudGx5QWRqdXN0aW5nU2Nyb2xsVmlld0luc2V0c0ZvcktleWJvYXJk
KSB7Ci0gICAgICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFz
b24gPSBZRVM7Ci0gICAgICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JV
bnN0YWJsZVNjcm9sbFZpZXcgPSBZRVM7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQo
IiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfdXBkYXRlVmlzaWJsZUNvbnRlbnRS
ZWN0czpdIC0gc2Nyb2xsIHZpZXcgc3RhdGUgaXMgbm9uLXN0YWJsZSwgYmFpbGluZyAoX2R5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGUgJWQsIF9uZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRM
b2FkRm9yTWFpbkZyYW1lICVkLCBzaXplQ2hhbmdlZFNpbmNlTGFzdFZpc2libGVDb250ZW50UmVj
dFVwZGF0ZSAlZCwgW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSAlZCwgX2N1cnJlbnRseUFk
anVzdGluZ1Njcm9sbFZpZXdJbnNldHNGb3JLZXlib2FyZCAlZCkiLAotICAgICAgICAgICAgc2Vs
ZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRl
TW9kZSwgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUsIFtf
Y29udGVudFZpZXcgc2l6ZUNoYW5nZWRTaW5jZUxhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVd
LCBbX3Njcm9sbFZpZXcgaXNab29tQm91bmNpbmddLCBfY3VycmVudGx5QWRqdXN0aW5nU2Nyb2xs
Vmlld0luc2V0c0ZvcktleWJvYXJkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yQW55UmVhc29uKQotICAgICAg
ICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZp
ZXcgX3VwZGF0ZVZpc2libGVDb250ZW50UmVjdHM6XSAtIHBlcmZvcm1pbmcgZmlyc3QgdmlzaWJs
ZSBjb250ZW50IHJlY3QgdXBkYXRlIGFmdGVyIGRlZmVycmluZyB1cGRhdGVzIiwgc2VsZiwgX3Bh
Z2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKLQotICAgIF9kaWREZWZlclVwZGF0ZVZpc2li
bGVDb250ZW50UmVjdHNGb3JVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrID0gTk87Ci0gICAg
X2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVuc3RhYmxlU2Nyb2xsVmlldyA9
IE5POwotICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFzb24g
PSBOTzsKLQotICAgIENHUmVjdCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3Nl
bGYgX3Zpc2libGVDb250ZW50UmVjdF07Ci0KLSAgICBVSUVkZ2VJbnNldHMgY29tcHV0ZWRDb250
ZW50SW5zZXRVbmFkanVzdGVkRm9yS2V5Ym9hcmQgPSBbc2VsZiBfY29tcHV0ZWRPYnNjdXJlZElu
c2V0XTsKLSAgICBpZiAoIV9oYXZlU2V0T2JzY3VyZWRJbnNldHMpCi0gICAgICAgIGNvbXB1dGVk
Q29udGVudEluc2V0VW5hZGp1c3RlZEZvcktleWJvYXJkLmJvdHRvbSAtPSBfdG90YWxTY3JvbGxW
aWV3Qm90dG9tSW5zZXRBZGp1c3RtZW50Rm9yS2V5Ym9hcmQ7Ci0KLSAgICBDR0Zsb2F0IHNjYWxl
RmFjdG9yID0gY29udGVudFpvb21TY2FsZShzZWxmKTsKLQotICAgIENHUmVjdCB1bm9ic2N1cmVk
UmVjdCA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChzZWxmLmJvdW5kcywgY29tcHV0ZWRDb250ZW50
SW5zZXRVbmFkanVzdGVkRm9yS2V5Ym9hcmQpOwotICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdElu
Q29udGVudENvb3JkaW5hdGVzID0gX2Zyb3plblVub2JzY3VyZWRDb250ZW50UmVjdCA/IF9mcm96
ZW5Vbm9ic2N1cmVkQ29udGVudFJlY3QudmFsdWUoKSA6IFtzZWxmIGNvbnZlcnRSZWN0OnVub2Jz
Y3VyZWRSZWN0IHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotICAgIHVub2JzY3VyZWRSZWN0
SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBDR1JlY3RJbnRlcnNlY3Rpb24odW5vYnNjdXJlZFJlY3RJ
bkNvbnRlbnRDb29yZGluYXRlcywgW3NlbGYgX2NvbnRlbnRCb3VuZHNFeHRlbmRlZEZvclJ1YmJl
cmJhbmRpbmdXaXRoU2NhbGU6c2NhbGVGYWN0b3JdKTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcg
bG9naWMgY29tcHV0ZXMgdGhlIGV4dGVudCB0byB3aGljaCB0aGUgYm90dG9tLCB0b3AsIGxlZnQg
YW5kIHJpZ2h0IGNvbnRlbnQgaW5zZXRzIGFyZSB2aXNpYmxlLgotICAgIGF1dG8gc2Nyb2xsVmll
d0luc2V0cyA9IFtfc2Nyb2xsVmlldyBjb250ZW50SW5zZXRdOwotICAgIGF1dG8gc2Nyb2xsVmll
d0JvdW5kcyA9IFtfc2Nyb2xsVmlldyBib3VuZHNdOwotICAgIGF1dG8gc2Nyb2xsVmlld0NvbnRl
bnRTaXplID0gW19zY3JvbGxWaWV3IGNvbnRlbnRTaXplXTsKLSAgICBhdXRvIHNjcm9sbFZpZXdP
cmlnaW5JbmNsdWRpbmdJbnNldCA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChzY3JvbGxWaWV3Qm91
bmRzLCBjb21wdXRlZENvbnRlbnRJbnNldFVuYWRqdXN0ZWRGb3JLZXlib2FyZCkub3JpZ2luOwot
ICAgIGF1dG8gbWF4aW11bVZlcnRpY2FsU2Nyb2xsRXh0ZW50V2l0aG91dFJldmVhbGluZ0JvdHRv
bUNvbnRlbnRJbnNldCA9IHNjcm9sbFZpZXdDb250ZW50U2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRI
ZWlnaHQoc2Nyb2xsVmlld0JvdW5kcyk7Ci0gICAgYXV0byBtYXhpbXVtSG9yaXpvbnRhbFNjcm9s
bEV4dGVudFdpdGhvdXRSZXZlYWxpbmdSaWdodENvbnRlbnRJbnNldCA9IHNjcm9sbFZpZXdDb250
ZW50U2l6ZS53aWR0aCAtIENHUmVjdEdldFdpZHRoKHNjcm9sbFZpZXdCb3VuZHMpOwotICAgIGF1
dG8gY29udGVudEluc2V0cyA9IFVJRWRnZUluc2V0c1plcm87Ci0gICAgaWYgKHNjcm9sbFZpZXdJ
bnNldHMubGVmdCA+IDAgJiYgc2Nyb2xsVmlld09yaWdpbkluY2x1ZGluZ0luc2V0LnggPCAwKQot
ICAgICAgICBjb250ZW50SW5zZXRzLmxlZnQgPSBzdGQ6Om1pbigtc2Nyb2xsVmlld09yaWdpbklu
Y2x1ZGluZ0luc2V0LngsIHNjcm9sbFZpZXdJbnNldHMubGVmdCkgLyBzY2FsZUZhY3RvcjsKLQot
ICAgIGlmIChzY3JvbGxWaWV3SW5zZXRzLnRvcCA+IDAgJiYgc2Nyb2xsVmlld09yaWdpbkluY2x1
ZGluZ0luc2V0LnkgPCAwKQotICAgICAgICBjb250ZW50SW5zZXRzLnRvcCA9IHN0ZDo6bWluKC1z
Y3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5nSW5zZXQueSwgc2Nyb2xsVmlld0luc2V0cy50b3ApIC8g
c2NhbGVGYWN0b3I7Ci0KLSAgICBpZiAoc2Nyb2xsVmlld0luc2V0cy5yaWdodCA+IDAgJiYgc2Ny
b2xsVmlld09yaWdpbkluY2x1ZGluZ0luc2V0LnggPiBtYXhpbXVtSG9yaXpvbnRhbFNjcm9sbEV4
dGVudFdpdGhvdXRSZXZlYWxpbmdSaWdodENvbnRlbnRJbnNldCkKLSAgICAgICAgY29udGVudElu
c2V0cy5yaWdodCA9IHN0ZDo6bWluKHNjcm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJbnNldC54IC0g
bWF4aW11bUhvcml6b250YWxTY3JvbGxFeHRlbnRXaXRob3V0UmV2ZWFsaW5nUmlnaHRDb250ZW50
SW5zZXQsIHNjcm9sbFZpZXdJbnNldHMucmlnaHQpIC8gc2NhbGVGYWN0b3I7Ci0KLSAgICBpZiAo
c2Nyb2xsVmlld0luc2V0cy5ib3R0b20gPiAwICYmIHNjcm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJ
bnNldC55ID4gbWF4aW11bVZlcnRpY2FsU2Nyb2xsRXh0ZW50V2l0aG91dFJldmVhbGluZ0JvdHRv
bUNvbnRlbnRJbnNldCkKLSAgICAgICAgY29udGVudEluc2V0cy5ib3R0b20gPSBzdGQ6Om1pbihz
Y3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5nSW5zZXQueSAtIG1heGltdW1WZXJ0aWNhbFNjcm9sbEV4
dGVudFdpdGhvdXRSZXZlYWxpbmdCb3R0b21Db250ZW50SW5zZXQsIHNjcm9sbFZpZXdJbnNldHMu
Ym90dG9tKSAvIHNjYWxlRmFjdG9yOwotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBpZiAoaW5TdGFibGVTdGF0ZSkgewotICAgICAg
ICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNvb3JkaW5hdG9yID0g
X3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKLSAgICAgICAgaWYgKGNvb3JkaW5h
dG9yICYmIGNvb3JkaW5hdG9yLT5oYXNBY3RpdmVTbmFwUG9pbnQoKSkgewotICAgICAgICAgICAg
Q0dQb2ludCBjdXJyZW50UG9pbnQgPSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07Ci0gICAg
ICAgICAgICBDR1BvaW50IGFjdGl2ZVBvaW50ID0gY29vcmRpbmF0b3ItPm5lYXJlc3RBY3RpdmVD
b250ZW50SW5zZXRBZGp1c3RlZFNuYXBQb2ludCh1bm9ic2N1cmVkUmVjdC5vcmlnaW4ueSwgY3Vy
cmVudFBvaW50KTsKLQotICAgICAgICAgICAgaWYgKCFDR1BvaW50RXF1YWxUb1BvaW50KGFjdGl2
ZVBvaW50LCBjdXJyZW50UG9pbnQpKSB7Ci0gICAgICAgICAgICAgICAgUmV0YWluUHRyPFdLU2Ny
b2xsVmlldz4gc3Ryb25nU2Nyb2xsVmlldyA9IF9zY3JvbGxWaWV3OwotICAgICAgICAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdTY3JvbGxW
aWV3LCBhY3RpdmVQb2ludF0gewotICAgICAgICAgICAgICAgICAgICBbc3Ryb25nU2Nyb2xsVmll
dyBzZXRDb250ZW50T2Zmc2V0OmFjdGl2ZVBvaW50IGFuaW1hdGVkOk5PXTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAg
W19jb250ZW50VmlldyBkaWRVcGRhdGVWaXNpYmxlUmVjdDp2aXNpYmxlUmVjdEluQ29udGVudENv
b3JkaW5hdGVzCi0gICAgICAgIHVub2JzY3VyZWRSZWN0OnVub2JzY3VyZWRSZWN0SW5Db250ZW50
Q29vcmRpbmF0ZXMKLSAgICAgICAgY29udGVudEluc2V0czpjb250ZW50SW5zZXRzCi0gICAgICAg
IHVub2JzY3VyZWRSZWN0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXM6dW5vYnNjdXJlZFJlY3QKLSAg
ICAgICAgb2JzY3VyZWRJbnNldHM6X29ic2N1cmVkSW5zZXRzCi0gICAgICAgIHVub2JzY3VyZWRT
YWZlQXJlYUluc2V0czpbc2VsZiBfY29tcHV0ZWRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldF0KLSAg
ICAgICAgaW5wdXRWaWV3Qm91bmRzOl9pbnB1dFZpZXdCb3VuZHMKLSAgICAgICAgc2NhbGU6c2Nh
bGVGYWN0b3IgbWluaW11bVNjYWxlOltfc2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxlXQotICAg
ICAgICBpblN0YWJsZVN0YXRlOmluU3RhYmxlU3RhdGUKLSAgICAgICAgaXNDaGFuZ2luZ09ic2N1
cmVkSW5zZXRzSW50ZXJhY3RpdmVseTpfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3Rp
dmVseQotICAgICAgICBlbmNsb3NlZEluU2Nyb2xsYWJsZUFuY2VzdG9yVmlldzpzY3JvbGxWaWV3
Q2FuU2Nyb2xsKFtzZWxmIF9zY3JvbGxlcl0pXTsKLQotICAgIHdoaWxlICghX3Zpc2libGVDb250
ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBjYWxsYmFj
ayA9IF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVDYWxsYmFja3MudGFrZUxhc3QoKTsKLSAgICAg
ICAgY2FsbGJhY2soKTsKLSAgICB9Ci0KLSAgICBpZiAoKHRpbWVOb3cgLSBfdGltZU9mUmVxdWVz
dEZvclZpc2libGVDb250ZW50UmVjdFVwZGF0ZSkgPiBkZWxheUJlZm9yZU5vVmlzaWJsZUNvbnRl
bnRzUmVjdHNMb2dnaW5nKQotICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAtW1dL
V2ViVmlldyBfdXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0czpdIGZpbmFsbHkgcmFuICUuMmZzIGFm
dGVyIGJlaW5nIHNjaGVkdWxlZCIsIHNlbGYsICh0aW1lTm93IC0gX3RpbWVPZlJlcXVlc3RGb3JW
aXNpYmxlQ29udGVudFJlY3RVcGRhdGUpLnZhbHVlKCkpOwotCi0gICAgX3RpbWVPZkxhc3RWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGUgPSB0aW1lTm93OwotICAgIGlmICghX3RpbWVPZkZpcnN0Vmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQpCi0gICAgICAgIF90aW1lT2ZG
aXJzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29tbWl0ID0gdGltZU5vdzsK
LX0KLQotLSAodm9pZClfZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUKLXsKLSAg
ICBpZiAoX2dlc3R1cmVDb250cm9sbGVyKQotICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmRp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCk7Ci19Ci0KLXN0YXRpYyBXZWJDb3Jl
OjpGbG9hdFNpemUgYWN0aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKFdLV2ViVmlldyAqd2ViVmll
dywgY29uc3QgQ0dSZWN0JiBib3VuZHMpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0U2l6
ZSh3ZWJWaWV3LT5fbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUudmFsdWVPcihib3VuZHMu
c2l6ZSkpOwotfQotCi1zdGF0aWMgaW50MzJfdCBhY3RpdmVPcmllbnRhdGlvbihXS1dlYlZpZXcg
KndlYlZpZXcpCi17Ci0gICAgcmV0dXJuIHdlYlZpZXctPl9vdmVycmlkZXNJbnRlcmZhY2VPcmll
bnRhdGlvbiA/IGRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbih3ZWJW
aWV3LT5faW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSkgOiB3ZWJWaWV3LT5fcGFnZS0+ZGV2
aWNlT3JpZW50YXRpb24oKTsKLX0KLQotLSAodm9pZClfY2FuY2VsQW5pbWF0ZWRSZXNpemUKLXsK
LSAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dl
YlZpZXcgX2NhbmNlbEFuaW1hdGVkUmVzaXplXSBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAl
ZCIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSwgX2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUpOwotCi0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdl
YktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghX2N1c3RvbUNvbnRlbnRWaWV3KSB7Ci0gICAgICAgIGlmIChfcmVz
aXplQW5pbWF0aW9uVmlldykgewotICAgICAgICAgICAgTlNVSW50ZWdlciBpbmRleE9mUmVzaXpl
QW5pbWF0aW9uVmlldyA9IFtbX3Njcm9sbFZpZXcgc3Vidmlld3NdIGluZGV4T2ZPYmplY3Q6X3Jl
c2l6ZUFuaW1hdGlvblZpZXcuZ2V0KCldOwotICAgICAgICAgICAgW19zY3JvbGxWaWV3IGluc2Vy
dFN1YnZpZXc6X2NvbnRlbnRWaWV3LmdldCgpIGF0SW5kZXg6aW5kZXhPZlJlc2l6ZUFuaW1hdGlv
blZpZXddOwotICAgICAgICAgICAgW19zY3JvbGxWaWV3IGluc2VydFN1YnZpZXc6W19jb250ZW50
VmlldyB1bnNjYWxlZFZpZXddIGF0SW5kZXg6aW5kZXhPZlJlc2l6ZUFuaW1hdGlvblZpZXcgKyAx
XTsKLSAgICAgICAgICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKLSAgICAgICAgICAgIF9yZXNpemVBbmltYXRpb25WaWV3ID0gbmlsOwotICAgICAgICB9Ci0K
LSAgICAgICAgW19jb250ZW50VmlldyBzZXRIaWRkZW46Tk9dOwotICAgICAgICBfcmVzaXplQW5p
bWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMgPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7Ci0gICAg
fQotCi0gICAgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3
cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nOwotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVD
b250ZW50UmVjdFVwZGF0ZV07Ci19Ci0KLS0gKHZvaWQpX2RpZENvbXBsZXRlQW5pbWF0ZWRSZXNp
emUKLXsKLSAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5h
bWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW19jb250ZW50VmlldyBzZXRIaWRkZW46Tk9dOwotCi0gICAgaWYgKCFfcmVzaXplQW5pbWF0
aW9uVmlldykgewotICAgICAgICAvLyBQYXJhbm9pYS4gSWYgX3Jlc2l6ZUFuaW1hdGlvblZpZXcg
aXMgbnVsbCB3ZSdsbCBlbmQgdXAgc2V0dGluZyBhIHplcm8gc2NhbGUgb24gdGhlIGNvbnRlbnQg
dmlldy4KLSAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgLVtXS1dlYlZpZXcgX2Rp
ZENvbXBsZXRlQW5pbWF0ZWRSZXNpemU6XSAtIF9yZXNpemVBbmltYXRpb25WaWV3IGlzIG5pbCIs
IHNlbGYpOwotICAgICAgICBbc2VsZiBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94
eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplXSIsIHNlbGYs
IF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7Ci0KLSAgICBOU1VJbnRlZ2VyIGluZGV4
T2ZSZXNpemVBbmltYXRpb25WaWV3ID0gW1tfc2Nyb2xsVmlldyBzdWJ2aWV3c10gaW5kZXhPZk9i
amVjdDpfcmVzaXplQW5pbWF0aW9uVmlldy5nZXQoKV07Ci0gICAgW19zY3JvbGxWaWV3IGluc2Vy
dFN1YnZpZXc6X2NvbnRlbnRWaWV3LmdldCgpIGF0SW5kZXg6aW5kZXhPZlJlc2l6ZUFuaW1hdGlv
blZpZXddOwotICAgIFtfc2Nyb2xsVmlldyBpbnNlcnRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5z
Y2FsZWRWaWV3XSBhdEluZGV4OmluZGV4T2ZSZXNpemVBbmltYXRpb25WaWV3ICsgMV07Ci0KLSAg
ICBDQUxheWVyICpjb250ZW50TGF5ZXIgPSBbX2NvbnRlbnRWaWV3IGxheWVyXTsKLSAgICBDR0Zs
b2F0IGFkanVzdG1lbnRTY2FsZSA9IF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50
cy5tMTE7Ci0gICAgY29udGVudExheWVyLnN1YmxheWVyVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0z
RElkZW50aXR5OwotCi0gICAgQ0dGbG9hdCBhbmltYXRpbmdTY2FsZVRhcmdldCA9IFtbX3Jlc2l6
ZUFuaW1hdGlvblZpZXcgbGF5ZXJdIHRyYW5zZm9ybV0ubTExOwotICAgIENBVHJhbnNmb3JtM0Qg
Y29udGVudExheWVyVHJhbnNmb3JtID0gY29udGVudExheWVyLnRyYW5zZm9ybTsKLSAgICBDR0Zs
b2F0IGN1cnJlbnRTY2FsZSA9IFtbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJdIHRyYW5zZm9y
bV0ubTExICogY29udGVudExheWVyVHJhbnNmb3JtLm0xMTsKLQotICAgIC8vIFdlIGNhbm5vdCB1
c2UgW1VJU2Nyb2xsVmlldyBzZXRab29tU2NhbGU6XSBkaXJlY3RseSBiZWNhdXNlIHRoZSBVSVNj
cm9sbFZpZXcgZGVsZWdhdGUgd291bGQgZ2V0IGEgY2FsbGJhY2sgd2l0aAotICAgIC8vIGFuIGlu
dmFsaWQgY29udGVudE9mZnNldC4gVGhlIHJlYWwgY29udGVudCBvZmZzZXQgaXMgb25seSBzZXQg
YmVsb3cuCi0gICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gcHVibGljIEFQSSBmb3Igc2V0dGluZyBi
b3RoIHRoZSB6b29tU2NhbGUgYW5kIHRoZSBjb250ZW50T2Zmc2V0LCB3ZSBzZXQgdGhlIHpvb21T
Y2FsZSBtYW51YWxseQotICAgIC8vIG9uIHRoZSB6b29tIGxheWVyIGFuZCB0aGVuIG9ubHkgY2hh
bmdlIHRoZSBjb250ZW50T2Zmc2V0LgotICAgIENHRmxvYXQgYWRqdXN0ZWRTY2FsZSA9IGFkanVz
dG1lbnRTY2FsZSAqIGN1cnJlbnRTY2FsZTsKLSAgICBjb250ZW50TGF5ZXJUcmFuc2Zvcm0ubTEx
ID0gYWRqdXN0ZWRTY2FsZTsKLSAgICBjb250ZW50TGF5ZXJUcmFuc2Zvcm0ubTIyID0gYWRqdXN0
ZWRTY2FsZTsKLSAgICBjb250ZW50TGF5ZXIudHJhbnNmb3JtID0gY29udGVudExheWVyVHJhbnNm
b3JtOwotCi0gICAgQ0dQb2ludCBjdXJyZW50U2Nyb2xsT2Zmc2V0ID0gW19zY3JvbGxWaWV3IGNv
bnRlbnRPZmZzZXRdOwotICAgIGRvdWJsZSBob3Jpem9udGFsU2Nyb2xsQWRqdXN0ZW1lbnQgPSBf
cmVzaXplQW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVudHMubTQxICogYW5pbWF0aW5nU2NhbGVU
YXJnZXQ7Ci0gICAgZG91YmxlIHZlcnRpY2FsU2Nyb2xsQWRqdXN0bWVudCA9IF9yZXNpemVBbmlt
YXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cy5tNDIgKiBhbmltYXRpbmdTY2FsZVRhcmdldDsKLQot
ICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50U2l6ZTpyb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6
ZSgqX3BhZ2UsIFtfY29udGVudFZpZXcgZnJhbWVdLnNpemUpXTsKLSAgICBbX3Njcm9sbFZpZXcg
c2V0Q29udGVudE9mZnNldDpDR1BvaW50TWFrZShjdXJyZW50U2Nyb2xsT2Zmc2V0LnggLSBob3Jp
em9udGFsU2Nyb2xsQWRqdXN0ZW1lbnQsIGN1cnJlbnRTY3JvbGxPZmZzZXQueSAtIHZlcnRpY2Fs
U2Nyb2xsQWRqdXN0bWVudCldOwotCi0gICAgW19yZXNpemVBbmltYXRpb25WaWV3IHJlbW92ZUZy
b21TdXBlcnZpZXddOwotICAgIF9yZXNpemVBbmltYXRpb25WaWV3ID0gbmlsOwotICAgIF9yZXNp
emVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cyA9IENBVHJhbnNmb3JtM0RJZGVudGl0eTsK
LQotICAgIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZzsKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVdOwotCi0gICAgQ0dSZWN0IG5ld0JvdW5kcyA9IHNlbGYuYm91bmRzOwot
ICAgIGF1dG8gbmV3Vmlld0xheW91dFNpemUgPSBbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpu
ZXdCb3VuZHNdOwotICAgIGF1dG8gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplID0gYWN0aXZlTWF4
aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG5ld0JvdW5kcyk7Ci0gICAgaW50MzJfdCBuZXdPcmll
bnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9uKHNlbGYpOwotCi0gICAgaWYgKCFfbGFzdFNlbnRW
aWV3TGF5b3V0U2l6ZSB8fCBuZXdWaWV3TGF5b3V0U2l6ZSAhPSBfbGFzdFNlbnRWaWV3TGF5b3V0
U2l6ZS52YWx1ZSgpKQotICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpu
ZXdWaWV3TGF5b3V0U2l6ZV07Ci0KLSAgICBpZiAoIV9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVk
U2l6ZSB8fCBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUgIT0gX2xhc3RTZW50TWF4aW11bVVub2Jz
Y3VyZWRTaXplLnZhbHVlKCkpCi0gICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldE1heGltdW1Vbm9i
c2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUobmV3TWF4aW11bVVub2JzY3VyZWRTaXplKV07
Ci0KLSAgICBpZiAoIV9sYXN0U2VudERldmljZU9yaWVudGF0aW9uIHx8IG5ld09yaWVudGF0aW9u
ICE9IF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uLnZhbHVlKCkpCi0gICAgICAgIFtzZWxmIF9k
aXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOm5ld09yaWVudGF0aW9uXTsKLQotICAgIHdoaWxl
ICghX2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgX2Nh
bGxiYWNrc0RlZmVycmVkRHVyaW5nUmVzaXplLnRha2VMYXN0KCkoKTsKLX0KLQotLSAodm9pZClf
ZGlkRmluaXNoTG9hZEZvck1haW5GcmFtZQotewotICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIp
Ci0gICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+ZGlkRmluaXNoTG9hZEZvck1haW5GcmFtZSgp
OwotfQotCi0tICh2b2lkKV9kaWRGYWlsTG9hZEZvck1haW5GcmFtZQotewotICAgIGlmIChfZ2Vz
dHVyZUNvbnRyb2xsZXIpCi0gICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+ZGlkRmFpbExvYWRG
b3JNYWluRnJhbWUoKTsKLX0KLQotLSAodm9pZClfZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZv
ck1haW5GcmFtZTooV2ViS2l0OjpTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSluYXZpZ2F0aW9u
VHlwZQotewotICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2RpZFNhbWVEb2N1bWVudE5hdmln
YXRpb246dG9BUEkobmF2aWdhdGlvblR5cGUpXTsKLQotICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xs
ZXIpCi0gICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlv
bkZvck1haW5GcmFtZShuYXZpZ2F0aW9uVHlwZSk7Ci19Ci0KLS0gKHZvaWQpX2tleWJvYXJkQ2hh
bmdlZFdpdGhJbmZvOihOU0RpY3Rpb25hcnkgKilrZXlib2FyZEluZm8gYWRqdXN0U2Nyb2xsVmll
dzooQk9PTClhZGp1c3RTY3JvbGxWaWV3Ci17Ci0gICAgTlNWYWx1ZSAqZW5kRnJhbWVWYWx1ZSA9
IFtrZXlib2FyZEluZm8gb2JqZWN0Rm9yS2V5OlVJS2V5Ym9hcmRGcmFtZUVuZFVzZXJJbmZvS2V5
XTsKLSAgICBpZiAoIWVuZEZyYW1lVmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRo
ZSBrZXlib2FyZCByZWN0IGlzIGFsd2F5cyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuIEluIHRoZSB2
aWV3IHNlcnZpY2VzIGNhc2UgdGhlIHdpbmRvdyBkb2VzIG5vdAotICAgIC8vIGhhdmUgdGhlIGlu
dGVyZmFjZSBvcmllbnRhdGlvbiByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbjsgaXRzIGhvc3QgZG9l
cy4gU28sIGl0IG1ha2VzIG5vIHNlbnNlIHRvCi0gICAgLy8gY2xpcCB0aGUga2V5Ym9hcmQgcmVj
dCBhZ2FpbnN0IGl0cyBzY3JlZW4uCi0gICAgaWYgKFtbc2VsZiB3aW5kb3ddIF9pc0hvc3RlZElu
QW5vdGhlclByb2Nlc3NdKQotICAgICAgICBfaW5wdXRWaWV3Qm91bmRzID0gW3NlbGYud2luZG93
IGNvbnZlcnRSZWN0OltlbmRGcmFtZVZhbHVlIENHUmVjdFZhbHVlXSBmcm9tV2luZG93Om5pbF07
Ci0gICAgZWxzZQotICAgICAgICBfaW5wdXRWaWV3Qm91bmRzID0gW3NlbGYud2luZG93IGNvbnZl
cnRSZWN0OkNHUmVjdEludGVyc2VjdGlvbihbZW5kRnJhbWVWYWx1ZSBDR1JlY3RWYWx1ZV0sIHNl
bGYud2luZG93LnNjcmVlbi5ib3VuZHMpIGZyb21XaW5kb3c6bmlsXTsKLQotICAgIGlmIChbW1VJ
UGVyaXBoZXJhbEhvc3Qgc2hhcmVkSW5zdGFuY2VdIGlzVW5kb2NrZWRdKQotICAgICAgICBfaW5w
dXRWaWV3Qm91bmRzID0gQ0dSZWN0WmVybzsKLQotICAgIGlmIChhZGp1c3RTY3JvbGxWaWV3KSB7
Ci0gICAgICAgIENHRmxvYXQgYm90dG9tSW5zZXRCZWZvcmVBZGp1c3RtZW50ID0gW19zY3JvbGxW
aWV3IGNvbnRlbnRJbnNldF0uYm90dG9tOwotICAgICAgICBTZXRGb3JTY29wZTxCT09MPiBpbnNl
dEFkanVzdG1lbnRHdWFyZChfY3VycmVudGx5QWRqdXN0aW5nU2Nyb2xsVmlld0luc2V0c0Zvcktl
eWJvYXJkLCBZRVMpOwotICAgICAgICBbX3Njcm9sbFZpZXcgX2FkanVzdEZvckF1dG9tYXRpY0tl
eWJvYXJkSW5mbzprZXlib2FyZEluZm8gYW5pbWF0ZWQ6WUVTIGxhc3RBZGp1c3RtZW50OiZfbGFz
dEFkanVzdG1lbnRGb3JTY3JvbGxlcl07Ci0gICAgICAgIENHRmxvYXQgYm90dG9tSW5zZXRBZnRl
ckFkanVzdG1lbnQgPSBbX3Njcm9sbFZpZXcgY29udGVudEluc2V0XS5ib3R0b207Ci0gICAgICAg
IC8vIEZJWE1FOiBUaGlzICJ0b3RhbCBib3R0b20gY29udGVudCBpbnNldCBhZGp1c3RtZW50IiBt
ZWNoYW5pc20gaGFzbid0IHdvcmtlZCBzaW5jZSBpT1MgMTEsIHNpbmNlIC1fYWRqdXN0Rm9yQXV0
b21hdGljS2V5Ym9hcmRJbmZvOmFuaW1hdGVkOmxhc3RBZGp1c3RtZW50OgotICAgICAgICAvLyBu
byBsb25nZXIgc2V0cyAtW1VJU2Nyb2xsVmlldyBjb250ZW50SW5zZXRdIGZvciBhcHBzIGxpbmtl
ZCBvbiBvciBhZnRlciBpT1MgMTEuIFdlIHNob3VsZCBjb25zaWRlciByZW1vdmluZyB0aGlzIGxv
Z2ljLCBzaW5jZSB0aGUgb3JpZ2luYWwgYnVnIHRoaXMgd2FzCi0gICAgICAgIC8vIGludGVuZGVk
IHRvIGZpeCwgPHJkYXI6Ly9wcm9ibGVtLzIzMjAyMjU0PiwgcmVtYWlucyBmaXhlZCB0aHJvdWdo
IG90aGVyIG1lYW5zLgotICAgICAgICBpZiAoYm90dG9tSW5zZXRCZWZvcmVBZGp1c3RtZW50ICE9
IGJvdHRvbUluc2V0QWZ0ZXJBZGp1c3RtZW50KQotICAgICAgICAgICAgX3RvdGFsU2Nyb2xsVmll
d0JvdHRvbUluc2V0QWRqdXN0bWVudEZvcktleWJvYXJkICs9IGJvdHRvbUluc2V0QWZ0ZXJBZGp1
c3RtZW50IC0gYm90dG9tSW5zZXRCZWZvcmVBZGp1c3RtZW50OwotICAgIH0KLQotICAgIFtzZWxm
IF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Ci19Ci0KLS0gKEJPT0wpX3Nob3Vs
ZFVwZGF0ZUtleWJvYXJkV2l0aEluZm86KE5TRGljdGlvbmFyeSAqKWtleWJvYXJkSW5mbwotewot
ICAgIGlmIChbX2NvbnRlbnRWaWV3IGlzRm9jdXNpbmdFbGVtZW50XSkKLSAgICAgICAgcmV0dXJu
IFlFUzsKLQotICAgIE5TTnVtYmVyICppc0xvY2FsS2V5Ym9hcmQgPSBba2V5Ym9hcmRJbmZvIHZh
bHVlRm9yS2V5OlVJS2V5Ym9hcmRJc0xvY2FsVXNlckluZm9LZXldOwotICAgIHJldHVybiBpc0xv
Y2FsS2V5Ym9hcmQgJiYgIWlzTG9jYWxLZXlib2FyZC5ib29sVmFsdWU7Ci19Ci0KLS0gKHZvaWQp
X2tleWJvYXJkV2lsbENoYW5nZUZyYW1lOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgot
ewotICAgIGlmIChbc2VsZiBfc2hvdWxkVXBkYXRlS2V5Ym9hcmRXaXRoSW5mbzpub3RpZmljYXRp
b24udXNlckluZm9dKQotICAgICAgICBbc2VsZiBfa2V5Ym9hcmRDaGFuZ2VkV2l0aEluZm86bm90
aWZpY2F0aW9uLnVzZXJJbmZvIGFkanVzdFNjcm9sbFZpZXc6WUVTXTsKLX0KLQotLSAodm9pZClf
a2V5Ym9hcmREaWRDaGFuZ2VGcmFtZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsK
LSAgICBbc2VsZiBfa2V5Ym9hcmRDaGFuZ2VkV2l0aEluZm86bm90aWZpY2F0aW9uLnVzZXJJbmZv
IGFkanVzdFNjcm9sbFZpZXc6Tk9dOwotfQotCi0tICh2b2lkKV9rZXlib2FyZFdpbGxTaG93OihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChbc2VsZiBfc2hvdWxkVXBk
YXRlS2V5Ym9hcmRXaXRoSW5mbzpub3RpZmljYXRpb24udXNlckluZm9dKQotICAgICAgICBbc2Vs
ZiBfa2V5Ym9hcmRDaGFuZ2VkV2l0aEluZm86bm90aWZpY2F0aW9uLnVzZXJJbmZvIGFkanVzdFNj
cm9sbFZpZXc6WUVTXTsKLQotICAgIF9wYWdlLT5zZXRJc0tleWJvYXJkQW5pbWF0aW5nSW4odHJ1
ZSk7Ci19Ci0KLS0gKHZvaWQpX2tleWJvYXJkRGlkU2hvdzooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KLXsKLSAgICBfcGFnZS0+c2V0SXNLZXlib2FyZEFuaW1hdGluZ0luKGZhbHNlKTsK
LX0KLQotLSAodm9pZClfa2V5Ym9hcmRXaWxsSGlkZTooTlNOb3RpZmljYXRpb24gKilub3RpZmlj
YXRpb24KLXsKLSAgICBpZiAoW19jb250ZW50VmlldyBzaG91bGRJZ25vcmVLZXlib2FyZFdpbGxI
aWRlTm90aWZpY2F0aW9uXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3NlbGYgX2tleWJvYXJk
Q2hhbmdlZFdpdGhJbmZvOm5vdGlmaWNhdGlvbi51c2VySW5mbyBhZGp1c3RTY3JvbGxWaWV3OllF
U107Ci19Ci0KLXN0YXRpYyB2b2lkIGhhcmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2Vk
Q2FsbGJhY2soQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYsIHZvaWQqIG9ic2VydmVyLCBDRlN0cmlu
Z1JlZiwgY29uc3Qgdm9pZCosIENGRGljdGlvbmFyeVJlZikKLXsKLSAgICBBU1NFUlQob2JzZXJ2
ZXIpOwotICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IChfX2JyaWRnZSBXS1dlYlZpZXcgKilvYnNl
cnZlcjsKLSAgICBbd2ViVmlldy0+X2NvbnRlbnRWaWV3IF9oYXJkd2FyZUtleWJvYXJkQXZhaWxh
YmlsaXR5Q2hhbmdlZF07Ci0gICAgd2ViVmlldy5fcGFnZS0+aGFyZHdhcmVLZXlib2FyZEF2YWls
YWJpbGl0eUNoYW5nZWQoR1NFdmVudElzSGFyZHdhcmVLZXlib2FyZEF0dGFjaGVkKCkpOwotfQot
Ci0tICh2b2lkKV93aW5kb3dEaWRSb3RhdGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Ci17Ci0gICAgaWYgKCFfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24pCi0gICAgICAgIFtz
ZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOmRldmljZU9yaWVudGF0aW9uKCldOwot
fQotCi0tICh2b2lkKV9jb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgotewotICAgIF9wYWdlLT5jb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hh
bmdlKFtzZWxmIF9jb250ZW50U2l6ZUNhdGVnb3J5XSk7Ci19Ci0KLS0gKE5TU3RyaW5nICopX2Nv
bnRlbnRTaXplQ2F0ZWdvcnkKLXsKLSAgICByZXR1cm4gW1tVSUFwcGxpY2F0aW9uIHNoYXJlZEFw
cGxpY2F0aW9uXSBwcmVmZXJyZWRDb250ZW50U2l6ZUNhdGVnb3J5XTsKLX0KLQotLSAodm9pZClf
YWNjZXNzaWJpbGl0eVNldHRpbmdzRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgotewotICAgIF9wYWdlLT5hY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2UoKTsKLX0K
LQotLSAodm9pZClzZXRBbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczooQk9PTClh
bGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcwotewotICAgIGlmIChfYWxsb3dzQmFj
a0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMgPT0gYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9u
R2VzdHVyZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmln
YXRpb25HZXN0dXJlcyA9IGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOwotCi0g
ICAgaWYgKGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzICYmICFfZ2VzdHVyZUNv
bnRyb2xsZXIpIHsKLSAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyID0gbWFrZVVuaXF1ZTxXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcj4oKl9wYWdlKTsKLSAgICAgICAgX2dlc3R1cmVDb250
cm9sbGVyLT5pbnN0YWxsU3dpcGVIYW5kbGVyKHNlbGYsIFtzZWxmIHNjcm9sbFZpZXddKTsKLSAg
ICAgICAgaWYgKFdLV2ViVmlldyAqYWx0ZXJuYXRlV2ViVmlldyA9IFtfY29uZmlndXJhdGlvbiBf
YWx0ZXJuYXRlV2ViVmlld0Zvck5hdmlnYXRpb25HZXN0dXJlc10pCi0gICAgICAgICAgICBfZ2Vz
dHVyZUNvbnRyb2xsZXItPnNldEFsdGVybmF0ZUJhY2tGb3J3YXJkTGlzdFNvdXJjZVBhZ2UoYWx0
ZXJuYXRlV2ViVmlldy0+X3BhZ2UuZ2V0KCkpOwotICAgIH0KLQotICAgIGlmIChfZ2VzdHVyZUNv
bnRyb2xsZXIpCi0gICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+c2V0U3dpcGVHZXN0dXJlRW5h
YmxlZChhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyk7Ci0KLSAgICBfcGFnZS0+
c2V0U2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90cyhhbGxvd3NCYWNrRm9yd2FyZE5hdmln
YXRpb25HZXN0dXJlcyk7Ci19Ci0KLS0gKEJPT0wpYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9u
R2VzdHVyZXMKLXsKLSAgICByZXR1cm4gX2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1
cmVzOwotfQotCi0tIChCT09MKV9pc05hdmlnYXRpb25Td2lwZUdlc3R1cmVSZWNvZ25pemVyOihV
SUdlc3R1cmVSZWNvZ25pemVyICopcmVjb2duaXplcgotewotICAgIGlmICghX2dlc3R1cmVDb250
cm9sbGVyKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxl
ci0+aXNOYXZpZ2F0aW9uU3dpcGVHZXN0dXJlUmVjb2duaXplcihyZWNvZ25pemVyKTsKLX0KLQot
LSAodm9pZClfbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbgotewotICAgIC8vIER1cmluZyBhIGJh
Y2svZm9yd2FyZCBzd2lwZSwgdGhlcmUncyBhIHZpZXcgaW50ZXJwb3NlZCBiZXR3ZWVuIHRoaXMg
dmlldyBhbmQgdGhlIGNvbnRlbnQgdmlldyB0aGF0IGhhcwotICAgIC8vIGFuIG9mZnNldCBhbmQg
YW5pbWF0aW9uIG9uIGl0LCB3aGljaCByZXN1bHRzIGluIGNvbXB1dGluZyBpbmNvcnJlY3QgcmVj
dGFuZ2xlcy4gV29yayBhcm91bmQgYnkgdXNpbmcKLSAgICAvLyBmcm96ZW4gcmVjdHMgZHVyaW5n
IHN3aXBlcy4KLSAgICBDR1JlY3QgZnVsbFZpZXdSZWN0ID0gc2VsZi5ib3VuZHM7Ci0gICAgQ0dS
ZWN0IHVub2JzY3VyZWRSZWN0ID0gVUlFZGdlSW5zZXRzSW5zZXRSZWN0KGZ1bGxWaWV3UmVjdCwg
W3NlbGYgX2NvbXB1dGVkT2JzY3VyZWRJbnNldF0pOwotCi0gICAgX2Zyb3plblZpc2libGVDb250
ZW50UmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OmZ1bGxWaWV3UmVjdCB0b1ZpZXc6X2NvbnRlbnRW
aWV3LmdldCgpXTsKLSAgICBfZnJvemVuVW5vYnNjdXJlZENvbnRlbnRSZWN0ID0gW3NlbGYgY29u
dmVydFJlY3Q6dW5vYnNjdXJlZFJlY3QgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0KLSAg
ICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIl9uYXZpZ2F0aW9uR2Vz
dHVyZURpZEJlZ2luOiBmcmVlemluZyB2aXNpYmxlQ29udGVudFJlY3QgIiA8PCBXZWJDb3JlOjpG
bG9hdFJlY3QoX2Zyb3plblZpc2libGVDb250ZW50UmVjdC52YWx1ZSgpKSA8PCAiIFVub2JzY3Vy
ZWRDb250ZW50UmVjdCAiIDw8IFdlYkNvcmU6OkZsb2F0UmVjdChfZnJvemVuVW5vYnNjdXJlZENv
bnRlbnRSZWN0LnZhbHVlKCkpKTsKLX0KLQotLSAodm9pZClfbmF2aWdhdGlvbkdlc3R1cmVEaWRF
bmQKLXsKLSAgICBfZnJvemVuVmlzaWJsZUNvbnRlbnRSZWN0ID0gV1RGOjpudWxsb3B0OwotICAg
IF9mcm96ZW5Vbm9ic2N1cmVkQ29udGVudFJlY3QgPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLS0gKHZv
aWQpX3Nob3dQYXNzd29yZFZpZXdXaXRoRG9jdW1lbnROYW1lOihOU1N0cmluZyAqKWRvY3VtZW50
TmFtZSBwYXNzd29yZEhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nICopKXBhc3N3b3JkSGFuZGxl
cgotewotICAgIEFTU0VSVCghX3Bhc3N3b3JkVmlldyk7Ci0gICAgX3Bhc3N3b3JkVmlldyA9IGFk
b3B0TlMoW1tXS1Bhc3N3b3JkVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzZWxmLmJvdW5kcyBk
b2N1bWVudE5hbWU6ZG9jdW1lbnROYW1lXSk7Ci0gICAgW19wYXNzd29yZFZpZXcgc2V0VXNlckRp
ZEVudGVyUGFzc3dvcmQ6cGFzc3dvcmRIYW5kbGVyXTsKLSAgICBbX3Bhc3N3b3JkVmlldyBzaG93
SW5TY3JvbGxWaWV3Ol9zY3JvbGxWaWV3LmdldCgpXTsKLSAgICBzZWxmLl9jdXJyZW50Q29udGVu
dFZpZXcuaGlkZGVuID0gWUVTOwotfQotCi0tICh2b2lkKV9oaWRlUGFzc3dvcmRWaWV3Ci17Ci0g
ICAgaWYgKCFfcGFzc3dvcmRWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZWxmLl9jdXJy
ZW50Q29udGVudFZpZXcuaGlkZGVuID0gTk87Ci0gICAgW19wYXNzd29yZFZpZXcgaGlkZV07Ci0g
ICAgX3Bhc3N3b3JkVmlldyA9IG5pbDsKLX0KLQotLSAoV0tQYXNzd29yZFZpZXcgKilfcGFzc3dv
cmRWaWV3Ci17Ci0gICAgcmV0dXJuIF9wYXNzd29yZFZpZXcuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQp
X3VwZGF0ZVNjcm9sbFZpZXdJbnNldEFkanVzdG1lbnRCZWhhdmlvcgotewotI2lmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMAotICAgIGlmICghW19zY3JvbGxWaWV3
IF9jb250ZW50SW5zZXRBZGp1c3RtZW50QmVoYXZpb3JXYXNFeHRlcm5hbGx5T3ZlcnJpZGRlbl0p
Ci0gICAgICAgIFtfc2Nyb2xsVmlldyBfc2V0Q29udGVudEluc2V0QWRqdXN0bWVudEJlaGF2aW9y
SW50ZXJuYWw6c2VsZi5fc2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cyA/IFVJU2Ny
b2xsVmlld0NvbnRlbnRJbnNldEFkanVzdG1lbnRBbHdheXMgOiBVSVNjcm9sbFZpZXdDb250ZW50
SW5zZXRBZGp1c3RtZW50TmV2ZXJdOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3NldEF2b2lkc1Vu
c2FmZUFyZWE6KEJPT0wpYXZvaWRzVW5zYWZlQXJlYQotewotICAgIGlmIChfYXZvaWRzVW5zYWZl
QXJlYSA9PSBhdm9pZHNVbnNhZmVBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfYXZvaWRz
VW5zYWZlQXJlYSA9IGF2b2lkc1Vuc2FmZUFyZWE7Ci0KLSAgICBbc2VsZiBfdXBkYXRlU2Nyb2xs
Vmlld0luc2V0QWRqdXN0bWVudEJlaGF2aW9yXTsKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxl
Q29udGVudFJlY3RVcGRhdGVdOwotCi0gICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVs
ZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KVtzZWxmIFVJRGVsZWdhdGVdOwotICAg
IGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRp
ZENoYW5nZVNhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHM6KV0pCi0gICAgICAgIFt1
aURlbGVnYXRlIF93ZWJWaWV3OnNlbGYgZGlkQ2hhbmdlU2FmZUFyZWFTaG91bGRBZmZlY3RPYnNj
dXJlZEluc2V0czphdm9pZHNVbnNhZmVBcmVhXTsKLX0KLQotLSAoQk9PTClfaGF2ZVNldE9ic2N1
cmVkSW5zZXRzCi17Ci0gICAgcmV0dXJuIF9oYXZlU2V0T2JzY3VyZWRJbnNldHM7Ci19Ci0KLSNl
bmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jcHJhZ21hIG1hcmsgLSBOU1ZpZXcgb3Zl
cnJpZGVzCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLS0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9u
ZGVyCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5hY2NlcHRzRmlyc3RSZXNwb25kZXIoKTsKLX0KLQot
LSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgotewotICAgIHJldHVybiBfaW1wbC0+YmVjb21l
Rmlyc3RSZXNwb25kZXIoKTsKLX0KLQotLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgotewot
ICAgIHJldHVybiBfaW1wbC0+cmVzaWduRmlyc3RSZXNwb25kZXIoKTsKLX0KLQotLSAodm9pZCl2
aWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZQotewotICAgIF9pbXBsLT52aWV3V2lsbFN0YXJ0TGl2ZVJl
c2l6ZSgpOwotfQotCi0tICh2b2lkKXZpZXdEaWRFbmRMaXZlUmVzaXplCi17Ci0gICAgX2ltcGwt
PnZpZXdEaWRFbmRMaXZlUmVzaXplKCk7Ci19Ci0KLS0gKEJPT0wpaXNGbGlwcGVkCi17Ci0gICAg
cmV0dXJuIFlFUzsKLX0KLQotLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCi17Ci0gICAg
cmV0dXJuIE5TU2l6ZUZyb21DR1NpemUoX2ltcGwtPmludHJpbnNpY0NvbnRlbnRTaXplKCkpOwot
fQotCi0tICh2b2lkKXByZXBhcmVDb250ZW50SW5SZWN0OihOU1JlY3QpcmVjdAotewotICAgIF9p
bXBsLT5wcmVwYXJlQ29udGVudEluUmVjdChOU1JlY3RUb0NHUmVjdChyZWN0KSk7Ci19Ci0KLS0g
KHZvaWQpc2V0RnJhbWVTaXplOihOU1NpemUpc2l6ZQotewotICAgIFtzdXBlciBzZXRGcmFtZVNp
emU6c2l6ZV07Ci0gICAgW19zYWZlQnJvd3NpbmdXYXJuaW5nIHNldEZyYW1lOnNlbGYuYm91bmRz
XTsKLSAgICBfaW1wbC0+c2V0RnJhbWVTaXplKE5TU2l6ZVRvQ0dTaXplKHNpemUpKTsKLX0KLQot
I3ByYWdtYSBtYXJrIC0gbWFjT1MgaW1wbGVtZW50YXRpb24KLQotLSAodm9pZClfd2ViX2dyYW50
RE9NUGFzdGVBY2Nlc3MKLXsKLSAgICBfaW1wbC0+aGFuZGxlRE9NUGFzdGVSZXF1ZXN0V2l0aFJl
c3VsdChXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpHcmFudGVkRm9yR2VzdHVyZSk7
Ci19Ci0KLS0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KLXsKLX0K
LQotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci19Ci0KLS0gKHZv
aWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci19Ci0KLUFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCi0tICh2b2lkKXJlbmV3R1N0YXRlCi1BTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKLXsKLSAgICBfaW1wbC0+cmVuZXdHU3RhdGUo
KTsKLSAgICBbc3VwZXIgcmVuZXdHU3RhdGVdOwotfQotCi0jcHJhZ21hIG1hcmsgLSBtYWNPUyBJ
QkFjdGlvbi9OU1Jlc3BvbmRlcgotCi0jZGVmaW5lIFdFQkNPUkVfQ09NTUFORChjb21tYW5kKSAt
ICh2b2lkKWNvbW1hbmQ6KGlkKXNlbmRlciB7IF9pbXBsLT5leGVjdXRlRWRpdENvbW1hbmRGb3JT
ZWxlY3RvcihfY21kKTsgfQotCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25DZW50ZXIpCi1XRUJDT1JF
X0NPTU1BTkQoYWxpZ25KdXN0aWZpZWQpCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25MZWZ0KQotV0VC
Q09SRV9DT01NQU5EKGFsaWduUmlnaHQpCi1XRUJDT1JFX0NPTU1BTkQoY29weSkKLVdFQkNPUkVf
Q09NTUFORChjdXQpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlKQotV0VCQ09SRV9DT01NQU5EKGRl
bGV0ZUJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJkQnlEZWNvbXBvc2lu
Z1ByZXZpb3VzQ2hhcmFjdGVyKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUZvcndhcmQpCi1XRUJD
T1JFX0NPTU1BTkQoZGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQoZGVs
ZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0VuZE9m
TGluZSkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0VuZE9mUGFyYWdyYXBoKQotV0VCQ09SRV9D
T01NQU5EKGRlbGV0ZVRvTWFyaykKLVdFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkQmFja3dhcmQp
Ci1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlV29yZEZvcndhcmQpCi1XRUJDT1JFX0NPTU1BTkQoaWdu
b3JlU3BlbGxpbmcpCi1XRUJDT1JFX0NPTU1BTkQoaW5kZW50KQotV0VCQ09SRV9DT01NQU5EKGlu
c2VydEJhY2t0YWIpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TGluZUJyZWFrKQotV0VCQ09SRV9D
T01NQU5EKGluc2VydE5ld2xpbmUpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZUlnbm9y
aW5nRmllbGRFZGl0b3IpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KQotV0VCQ09SRV9DT01NQU5EKGluc2VydFRhYikKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRUYWJJ
Z25vcmluZ0ZpZWxkRWRpdG9yKQotV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0KQotV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlv
bk5hdHVyYWwpCi1XRUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRU
b0xlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKG1v
dmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlRG93bikK
LVdFQkNPUkVfQ09NTUFORChtb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09N
TUFORChtb3ZlRm9yd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlRm9yd2FyZEFuZE1vZGlmeVNl
bGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlTGVmdCkKLVdFQkNPUkVfQ09NTUFORChtb3Zl
TGVmdEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlUGFyYWdyYXBoQmFj
a3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFncmFwaEZv
cndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0KQotV0VC
Q09SRV9DT01NQU5EKG1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFO
RChtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50KQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lu
bmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRv
QmVnaW5uaW5nT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGluZUFu
ZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBhcmFn
cmFwaCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFuZE1vZGlm
eVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlKQot
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rp
b24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZEb2N1bWVudCkKLVdFQkNPUkVfQ09NTUFO
RChtb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5E
KG1vdmVUb0VuZE9mTGluZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmVBbmRNb2Rp
ZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGgpCi1XRUJD
T1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJD
T1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50ZW5jZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9F
bmRPZlNlbnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0xl
ZnRFbmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZUFuZE1vZGlm
eVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9SaWdodEVuZE9mTGluZSkKLVdFQkNP
UkVfQ09NTUFORChtb3ZlVG9SaWdodEVuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNP
UkVfQ09NTUFORChtb3ZlVXApCi1XRUJDT1JFX0NPTU1BTkQobW92ZVVwQW5kTW9kaWZ5U2VsZWN0
aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkQmFja3dhcmQpCi1XRUJDT1JFX0NPTU1BTkQo
bW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3Zl
V29yZEZvcndhcmQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdCkKLVdFQkNPUkVfQ09NTUFORCht
b3ZlV29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRS
aWdodCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKQot
V0VCQ09SRV9DT01NQU5EKG91dGRlbnQpCi1XRUJDT1JFX0NPTU1BTkQocGFnZURvd24pCi1XRUJD
T1JFX0NPTU1BTkQocGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQo
cGFnZVVwKQotV0VCQ09SRV9DT01NQU5EKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNP
UkVfQ09NTUFORChwYXN0ZSkKLVdFQkNPUkVfQ09NTUFORChwYXN0ZUFzUGxhaW5UZXh0KQotV0VC
Q09SRV9DT01NQU5EKHNjcm9sbFBhZ2VEb3duKQotV0VCQ09SRV9DT01NQU5EKHNjcm9sbFBhZ2VV
cCkKLVdFQkNPUkVfQ09NTUFORChzY3JvbGxMaW5lRG93bikKLVdFQkNPUkVfQ09NTUFORChzY3Jv
bGxMaW5lVXApCi1XRUJDT1JFX0NPTU1BTkQoc2Nyb2xsVG9CZWdpbm5pbmdPZkRvY3VtZW50KQot
V0VCQ09SRV9DT01NQU5EKHNjcm9sbFRvRW5kT2ZEb2N1bWVudCkKLVdFQkNPUkVfQ09NTUFORChz
ZWxlY3RBbGwpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0TGluZSkKLVdFQkNPUkVfQ09NTUFORChz
ZWxlY3RQYXJhZ3JhcGgpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0U2VudGVuY2UpCi1XRUJDT1JF
X0NPTU1BTkQoc2VsZWN0VG9NYXJrKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdFdvcmQpCi1XRUJD
T1JFX0NPTU1BTkQoc2V0TWFyaykKLVdFQkNPUkVfQ09NTUFORChzdWJzY3JpcHQpCi1XRUJDT1JF
X0NPTU1BTkQoc3VwZXJzY3JpcHQpCi1XRUJDT1JFX0NPTU1BTkQoc3dhcFdpdGhNYXJrKQotV0VC
Q09SRV9DT01NQU5EKHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFO
RCh0cmFuc3Bvc2UpCi1XRUJDT1JFX0NPTU1BTkQodW5kZXJsaW5lKQotV0VCQ09SRV9DT01NQU5E
KHVuc2NyaXB0KQotV0VCQ09SRV9DT01NQU5EKHlhbmspCi1XRUJDT1JFX0NPTU1BTkQoeWFua0Fu
ZFNlbGVjdCkKLQotI3VuZGVmIFdFQkNPUkVfQ09NTUFORAotCi0tIChCT09MKXdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHR5cGVzOihOU0FycmF5
ICopdHlwZXMKLXsKLSAgICByZXR1cm4gX2ltcGwtPndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KHBhc3RlYm9hcmQsIHR5cGVzKTsKLX0KLQotLSAodm9pZCljZW50ZXJTZWxlY3Rpb25JblZpc2li
bGVBcmVhOihpZClzZW5kZXIKLXsKLSAgICBfaW1wbC0+Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxl
QXJlYSgpOwotfQotCi0tIChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0cmluZyAq
KXNlbmRUeXBlIHJldHVyblR5cGU6KE5TU3RyaW5nICopcmV0dXJuVHlwZQotewotICAgIHJldHVy
biBfaW1wbC0+dmFsaWRSZXF1ZXN0b3JGb3JTZW5kQW5kUmV0dXJuVHlwZXMoc2VuZFR5cGUsIHJl
dHVyblR5cGUpOwotfQotCi0tIChCT09MKXJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDooTlNQ
YXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIHJldHVybiBfaW1wbC0+cmVhZFNlbGVjdGlv
bkZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwotfQotCi1BTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19CRUdJTgotLSAodm9pZCljaGFuZ2VGb250OihpZClzZW5kZXIKLUFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAotewotICAgIF9pbXBsLT5jaGFuZ2VGb250RnJv
bUZvbnRNYW5hZ2VyKCk7Ci19Ci0KLUFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JF
R0lOCi0tICh2b2lkKWNoYW5nZUNvbG9yOihpZClzZW5kZXIKLUFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0JFR0lOCi17Ci0gICAgX2ltcGwtPmNoYW5nZUZvbnRDb2xvckZyb21TZW5k
ZXIoc2VuZGVyKTsKLX0KLQotLSAodm9pZCljaGFuZ2VBdHRyaWJ1dGVzOihpZClzZW5kZXIKLXsK
LSAgICBfaW1wbC0+Y2hhbmdlRm9udEF0dHJpYnV0ZXNGcm9tU2VuZGVyKHNlbmRlcik7Ci19Ci0K
LS0gKElCQWN0aW9uKXN0YXJ0U3BlYWtpbmc6KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT5zdGFy
dFNwZWFraW5nKCk7Ci19Ci0KLS0gKElCQWN0aW9uKXN0b3BTcGVha2luZzooaWQpc2VuZGVyCi17
Ci0gICAgX2ltcGwtPnN0b3BTcGVha2luZyhzZW5kZXIpOwotfQotCi0tIChJQkFjdGlvbilzaG93
R3Vlc3NQYW5lbDooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPnNob3dHdWVzc1BhbmVsKHNlbmRl
cik7Ci19Ci0KLS0gKElCQWN0aW9uKWNoZWNrU3BlbGxpbmc6KGlkKXNlbmRlcgotewotICAgIF9p
bXBsLT5jaGVja1NwZWxsaW5nKCk7Ci19Ci0KLS0gKHZvaWQpY2hhbmdlU3BlbGxpbmc6KGlkKXNl
bmRlcgotewotICAgIF9pbXBsLT5jaGFuZ2VTcGVsbGluZyhzZW5kZXIpOwotfQotCi0tIChJQkFj
dGlvbil0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZzooaWQpc2VuZGVyCi17Ci0gICAgX2lt
cGwtPnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCk7Ci19Ci0KLS0gKEJPT0wpaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5pc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQoKTsKLX0KLQotLSAodm9pZClzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOihCT09M
KWZsYWcKLXsKLSAgICBfaW1wbC0+c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChmbGFnKTsKLX0K
LQotLSAoSUJBY3Rpb24pdG9nZ2xlR3JhbW1hckNoZWNraW5nOihpZClzZW5kZXIKLXsKLSAgICBf
aW1wbC0+dG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7Ci19Ci0KLS0gKElCQWN0aW9uKXRvZ2dsZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPnRvZ2ds
ZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpOwotfQotCi0tICh2b2lkKW9yZGVyRnJvbnRT
dWJzdGl0dXRpb25zUGFuZWw6KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT5vcmRlckZyb250U3Vi
c3RpdHV0aW9uc1BhbmVsKHNlbmRlcik7Ci19Ci0KLS0gKElCQWN0aW9uKXRvZ2dsZVNtYXJ0SW5z
ZXJ0RGVsZXRlOihpZClzZW5kZXIKLXsKLSAgICBfaW1wbC0+dG9nZ2xlU21hcnRJbnNlcnREZWxl
dGUoKTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZAot
ewotICAgIHJldHVybiBfaW1wbC0+aXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQo
KTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJP
T0wpZmxhZwotewotICAgIF9pbXBsLT5zZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJs
ZWQoZmxhZyk7Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246
KGlkKXNlbmRlcgotewotICAgIF9pbXBsLT50b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bigpOwotfQotCi0tIChCT09MKWlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQKLXsK
LSAgICByZXR1cm4gX2ltcGwtPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKTsK
LX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClm
bGFnCi17Ci0gICAgX2ltcGwtPnNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKGZs
YWcpOwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246KGlkKXNl
bmRlcgotewotICAgIF9pbXBsLT50b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uKCk7Ci19
Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZAotewotICAgIHJldHVy
biBfaW1wbC0+aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpOwotfQotCi0tICh2b2lk
KXNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBfaW1w
bC0+c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoZmxhZyk7Ci19Ci0KLS0gKHZvaWQp
dG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPnRv
Z2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb24oKTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY1Rl
eHRSZXBsYWNlbWVudEVuYWJsZWQKLXsKLSAgICByZXR1cm4gX2ltcGwtPmlzQXV0b21hdGljVGV4
dFJlcGxhY2VtZW50RW5hYmxlZCgpOwotfQotCi0tICh2b2lkKXNldEF1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIF9pbXBsLT5zZXRBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnRFbmFibGVkKGZsYWcpOwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1Rl
eHRSZXBsYWNlbWVudDooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPnRvZ2dsZUF1dG9tYXRpY1Rl
eHRSZXBsYWNlbWVudCgpOwotfQotCi0tICh2b2lkKXVwcGVyY2FzZVdvcmQ6KGlkKXNlbmRlcgot
ewotICAgIF9pbXBsLT51cHBlcmNhc2VXb3JkKCk7Ci19Ci0KLS0gKHZvaWQpbG93ZXJjYXNlV29y
ZDooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPmxvd2VyY2FzZVdvcmQoKTsKLX0KLQotLSAodm9p
ZCljYXBpdGFsaXplV29yZDooaWQpc2VuZGVyCi17Ci0gICAgX2ltcGwtPmNhcGl0YWxpemVXb3Jk
KCk7Ci19Ci0KLS0gKEJPT0wpX3dhbnRzS2V5RG93bkZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
LXsKLSAgICByZXR1cm4gX2ltcGwtPndhbnRzS2V5RG93bkZvckV2ZW50KGV2ZW50KTsKLX0KLQot
LSAodm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgX2ltcGwtPnNjcm9s
bFdoZWVsKGV2ZW50KTsKLX0KLQotLSAodm9pZClzd2lwZVdpdGhFdmVudDooTlNFdmVudCAqKWV2
ZW50Ci17Ci0gICAgX2ltcGwtPnN3aXBlV2l0aEV2ZW50KGV2ZW50KTsKLX0KLQotLSAodm9pZClt
b3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+bW91c2VNb3ZlZChldmVu
dCk7Ci19Ci0KLS0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1w
bC0+bW91c2VEb3duKGV2ZW50KTsKLX0KLQotLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICBfaW1wbC0+bW91c2VVcChldmVudCk7Ci19Ci0KLS0gKHZvaWQpbW91c2VEcmFn
Z2VkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+bW91c2VEcmFnZ2VkKGV2ZW50KTsK
LX0KLQotLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBs
LT5tb3VzZUVudGVyZWQoZXZlbnQpOwotfQotCi0tICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50
ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+bW91c2VFeGl0ZWQoZXZlbnQpOwotfQotCi0tICh2b2lk
KW90aGVyTW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+b3RoZXJNb3Vz
ZURvd24oZXZlbnQpOwotfQotCi0tICh2b2lkKW90aGVyTW91c2VEcmFnZ2VkOihOU0V2ZW50ICop
ZXZlbnQKLXsKLSAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwotfQotCi0tICh2
b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgX2ltcGwtPm90aGVyTW91
c2VVcChldmVudCk7Ci19Ci0KLS0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVu
dAotewotICAgIF9pbXBsLT5yaWdodE1vdXNlRG93bihldmVudCk7Ci19Ci0KLS0gKHZvaWQpcmln
aHRNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5yaWdodE1vdXNl
RHJhZ2dlZChldmVudCk7Ci19Ci0KLS0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICBfaW1wbC0+cmlnaHRNb3VzZVVwKGV2ZW50KTsKLX0KLQotLSAodm9pZClwcmVz
c3VyZUNoYW5nZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgX2ltcGwtPnByZXNz
dXJlQ2hhbmdlV2l0aEV2ZW50KGV2ZW50KTsKLX0KLQotLSAoQk9PTClhY2NlcHRzRmlyc3RNb3Vz
ZTooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5hY2NlcHRzRmlyc3RNb3Vz
ZShldmVudCk7Ci19Ci0KLS0gKEJPT0wpc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50
OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICByZXR1cm4gX2ltcGwtPnNob3VsZERlbGF5V2luZG93
T3JkZXJpbmdGb3JFdmVudChldmVudCk7Ci19Ci0KLS0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3Rv
cjooU0VMKXNlbGVjdG9yCi17Ci0gICAgX2ltcGwtPmRvQ29tbWFuZEJ5U2VsZWN0b3Ioc2VsZWN0
b3IpOwotfQotCi0tICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwotewotICAgIF9pbXBsLT5p
bnNlcnRUZXh0KHN0cmluZyk7Ci19Ci0KLS0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJl
cGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRSYW5nZQotewotICAgIF9pbXBsLT5p
bnNlcnRUZXh0KHN0cmluZywgcmVwbGFjZW1lbnRSYW5nZSk7Ci19Ci0KLS0gKE5TVGV4dElucHV0
Q29udGV4dCAqKWlucHV0Q29udGV4dAotewotICAgIGlmICghX2ltcGwpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIF9pbXBsLT5pbnB1dENvbnRleHQoKTsKLX0KLQotLSAoQk9PTClw
ZXJmb3JtS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgcmV0dXJuIF9pbXBs
LT5wZXJmb3JtS2V5RXF1aXZhbGVudChldmVudCk7Ci19Ci0KLS0gKHZvaWQpa2V5VXA6KE5TRXZl
bnQgKil0aGVFdmVudAotewotICAgIF9pbXBsLT5rZXlVcCh0aGVFdmVudCk7Ci19Ci0KLS0gKHZv
aWQpa2V5RG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgX2ltcGwtPmtleURvd24odGhl
RXZlbnQpOwotfQotCi0tICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17
Ci0gICAgX2ltcGwtPmZsYWdzQ2hhbmdlZCh0aGVFdmVudCk7Ci19Ci0KLS0gKHZvaWQpc2V0TWFy
a2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsZWN0ZWRSYW5n
ZSByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UKLXsKLSAgICBfaW1w
bC0+c2V0TWFya2VkVGV4dChzdHJpbmcsIG5ld1NlbGVjdGVkUmFuZ2UsIHJlcGxhY2VtZW50UmFu
Z2UpOwotfQotCi0tICh2b2lkKXVubWFya1RleHQKLXsKLSAgICBfaW1wbC0+dW5tYXJrVGV4dCgp
OwotfQotCi0tIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKLXsKLSAgICByZXR1cm4gX2ltcGwtPnNl
bGVjdGVkUmFuZ2UoKTsKLX0KLQotLSAoQk9PTCloYXNNYXJrZWRUZXh0Ci17Ci0gICAgcmV0dXJu
IF9pbXBsLT5oYXNNYXJrZWRUZXh0KCk7Ci19Ci0KLS0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKLXsK
LSAgICByZXR1cm4gX2ltcGwtPm1hcmtlZFJhbmdlKCk7Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0
cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOihOU1JhbmdlKW5zUmFu
Z2UgYWN0dWFsUmFuZ2U6KE5TUmFuZ2VQb2ludGVyKWFjdHVhbFJhbmdlCi17Ci0gICAgcmV0dXJu
IF9pbXBsLT5hdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZShuc1JhbmdlLCBhY3R1
YWxSYW5nZSk7Ci19Ci0KLS0gKE5TVUludGVnZXIpY2hhcmFjdGVySW5kZXhGb3JQb2ludDooTlNQ
b2ludCl0aGVQb2ludAotewotICAgIHJldHVybiBfaW1wbC0+Y2hhcmFjdGVySW5kZXhGb3JQb2lu
dCh0aGVQb2ludCk7Ci19Ci0KLS0gKHZvaWQpdHlwaW5nQXR0cmlidXRlc1dpdGhDb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKShOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopKWNvbXBsZXRp
b24KLXsKLSAgICBfaW1wbC0+dHlwaW5nQXR0cmlidXRlc1dpdGhDb21wbGV0aW9uSGFuZGxlcihj
b21wbGV0aW9uKTsKLX0KLQotLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihO
U1JhbmdlKXRoZVJhbmdlIGFjdHVhbFJhbmdlOihOU1JhbmdlUG9pbnRlcilhY3R1YWxSYW5nZQot
ewotICAgIHJldHVybiBfaW1wbC0+Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGhlUmFuZ2Us
IGFjdHVhbFJhbmdlKTsKLX0KLQotLSAodm9pZClzZWxlY3RlZFJhbmdlV2l0aENvbXBsZXRpb25I
YW5kbGVyOih2b2lkKF4pKE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSkpY29tcGxldGlvbkhhbmRsZXJQ
dHIKLXsKLSAgICBfaW1wbC0+c2VsZWN0ZWRSYW5nZVdpdGhDb21wbGV0aW9uSGFuZGxlcihjb21w
bGV0aW9uSGFuZGxlclB0cik7Ci19Ci0KLS0gKHZvaWQpbWFya2VkUmFuZ2VXaXRoQ29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoTlNSYW5nZSBtYXJrZWRSYW5nZSkpY29tcGxldGlvbkhhbmRsZXJQ
dHIKLXsKLSAgICBfaW1wbC0+bWFya2VkUmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxl
dGlvbkhhbmRsZXJQdHIpOwotfQotCi0tICh2b2lkKWhhc01hcmtlZFRleHRXaXRoQ29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoQk9PTCBoYXNNYXJrZWRUZXh0KSljb21wbGV0aW9uSGFuZGxlclB0
cgotewotICAgIF9pbXBsLT5oYXNNYXJrZWRUZXh0V2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBs
ZXRpb25IYW5kbGVyUHRyKTsKLX0KLQotLSAodm9pZClhdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJv
cG9zZWRSYW5nZTooTlNSYW5nZSluc1JhbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5T
QXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZywgTlNSYW5nZSBhY3R1YWxSYW5nZSkpY29tcGxl
dGlvbkhhbmRsZXJQdHIKLXsKLSAgICBfaW1wbC0+YXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bv
c2VkUmFuZ2UobnNSYW5nZSwgY29tcGxldGlvbkhhbmRsZXJQdHIpOwotfQotCi0tICh2b2lkKWZp
cnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU1JhbmdlKXRoZVJhbmdlIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkKF4pKE5TUmVjdCBmaXJzdFJlY3QsIE5TUmFuZ2UgYWN0dWFsUmFuZ2UpKWNvbXBs
ZXRpb25IYW5kbGVyUHRyCi17Ci0gICAgX2ltcGwtPmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
KHRoZVJhbmdlLCBjb21wbGV0aW9uSGFuZGxlclB0cik7Ci19Ci0KLS0gKHZvaWQpY2hhcmFjdGVy
SW5kZXhGb3JQb2ludDooTlNQb2ludCl0aGVQb2ludCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZChe
KShOU1VJbnRlZ2VyKSljb21wbGV0aW9uSGFuZGxlclB0cgotewotICAgIF9pbXBsLT5jaGFyYWN0
ZXJJbmRleEZvclBvaW50KHRoZVBvaW50LCBjb21wbGV0aW9uSGFuZGxlclB0cik7Ci19Ci0KLS0g
KE5TQXJyYXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0Ci17Ci0gICAgcmV0dXJuIF9p
bXBsLT52YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0KCk7Ci19Ci0KLSNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KLS0gKHZv
aWQpZHJhZ2dlZEltYWdlOihOU0ltYWdlICopaW1hZ2UgZW5kZWRBdDooTlNQb2ludCllbmRQb2lu
dCBvcGVyYXRpb246KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KLUFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAotewotICAgIF9pbXBsLT5kcmFnZ2VkSW1hZ2UoaW1hZ2UsIE5T
UG9pbnRUb0NHUG9pbnQoZW5kUG9pbnQpLCBvcGVyYXRpb24pOwotfQotCi0tIChOU0RyYWdPcGVy
YXRpb24pZHJhZ2dpbmdFbnRlcmVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwot
ewotICAgIHJldHVybiBfaW1wbC0+ZHJhZ2dpbmdFbnRlcmVkKGRyYWdnaW5nSW5mbyk7Ci19Ci0K
LS0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ1VwZGF0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4p
ZHJhZ2dpbmdJbmZvCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5kcmFnZ2luZ1VwZGF0ZWQoZHJhZ2dp
bmdJbmZvKTsKLX0KLQotLSAodm9pZClkcmFnZ2luZ0V4aXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZv
PilkcmFnZ2luZ0luZm8KLXsKLSAgICBfaW1wbC0+ZHJhZ2dpbmdFeGl0ZWQoZHJhZ2dpbmdJbmZv
KTsKLX0KLQotLSAoQk9PTClwcmVwYXJlRm9yRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZ2dpbmdJ
bmZvPilkcmFnZ2luZ0luZm8KLXsKLSAgICByZXR1cm4gX2ltcGwtPnByZXBhcmVGb3JEcmFnT3Bl
cmF0aW9uKGRyYWdnaW5nSW5mbyk7Ci19Ci0KLS0gKEJPT0wpcGVyZm9ybURyYWdPcGVyYXRpb246
KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5w
ZXJmb3JtRHJhZ09wZXJhdGlvbihkcmFnZ2luZ0luZm8pOwotfQotCi0tIChOU1ZpZXcgKilfaGl0
VGVzdDooTlNQb2ludCAqKXBvaW50IGRyYWdUeXBlczooTlNTZXQgKil0eXBlcwotewotICAgIHJl
dHVybiBfaW1wbC0+aGl0VGVzdEZvckRyYWdUeXBlcyhOU1BvaW50VG9DR1BvaW50KCpwb2ludCks
IHR5cGVzKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQotCi0tIChCT09MKV93
aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9uSXNJblZpc2libGVTY3JvbGxlclRodW1iOihOU1BvaW50
KXBvaW50Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT53aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9uSXNJ
blZpc2libGVTY3JvbGxlclRodW1iKE5TUG9pbnRUb0NHUG9pbnQocG9pbnQpKTsKLX0KLQotLSAo
dm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKLXsKLSAgICBfaW1w
bC0+dmlld1dpbGxNb3ZlVG9XaW5kb3cod2luZG93KTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92
ZVRvV2luZG93Ci17Ci0gICAgX2ltcGwtPnZpZXdEaWRNb3ZlVG9XaW5kb3coKTsKLX0KLQotLSAo
dm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBfaW1wbC0+ZHJhd1JlY3QoTlNSZWN0
VG9DR1JlY3QocmVjdCkpOwotfQotCi0tIChCT09MKWlzT3BhcXVlCi17Ci0gICAgcmV0dXJuIF9p
bXBsLT5pc09wYXF1ZSgpOwotfQotCi0tIChCT09MKW1vdXNlRG93bkNhbk1vdmVXaW5kb3cKLXsK
LSAgICByZXR1cm4gV2ViS2l0OjpXZWJWaWV3SW1wbDo6bW91c2VEb3duQ2FuTW92ZVdpbmRvdygp
OwotfQotCi0tICh2b2lkKXZpZXdEaWRIaWRlCi17Ci0gICAgX2ltcGwtPnZpZXdEaWRIaWRlKCk7
Ci19Ci0KLS0gKHZvaWQpdmlld0RpZFVuaGlkZQotewotICAgIF9pbXBsLT52aWV3RGlkVW5oaWRl
KCk7Ci19Ci0KLS0gKHZvaWQpdmlld0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzCi17Ci0gICAg
X2ltcGwtPnZpZXdEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllcygpOwotfQotCi0tICh2b2lkKV9h
Y3RpdmVTcGFjZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAg
ICBfaW1wbC0+YWN0aXZlU3BhY2VEaWRDaGFuZ2UoKTsKLX0KLQotLSAoaWQpYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnQKLXsKLSAgICByZXR1cm4gX2ltcGwtPmFjY2Vzc2liaWxpdHlGb2N1
c2VkVUlFbGVtZW50KCk7Ci19Ci0KLUFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JF
R0lOCi0tIChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQKLUFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAotewotICAgIHJldHVybiBfaW1wbC0+YWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAot
ewotICAgIHJldHVybiBfaW1wbC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoTlNQb2ludFRvQ0dQb2lu
dChwb2ludCkpOwotfQotCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgot
LSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQot
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECi17Ci0gICAgcmV0dXJuIF9pbXBs
LT5hY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlKTsKLX0KLQotQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KLS0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIK
LUFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAotewotICAgIHJldHVybiBfaW1w
bC0+YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSwgcGFyYW1ldGVyKTsKLX0K
LQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KLS0gKE5TQXJyYXk8TlNT
dHJpbmcgKj4gKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCi1BTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKLXsKLSAgICBOU0FycmF5PE5TU3RyaW5n
ICo+ICpuYW1lcyA9IFtzdXBlciBhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5h
bWVzXTsKLSAgICByZXR1cm4gW25hbWVzIGFycmF5QnlBZGRpbmdPYmplY3Q6QCJBWENvbnZlcnRS
ZWxhdGl2ZUZyYW1lIl07Ci19Ci0KLS0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQK
LXsKLSAgICBpZiAoIV9pbXBsKQotICAgICAgICByZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRd
OwotICAgIHJldHVybiBfaW1wbC0+aGl0VGVzdChOU1BvaW50VG9DR1BvaW50KHBvaW50KSk7Ci19
Ci0KLS0gKE5TSW50ZWdlciljb252ZXJzYXRpb25JZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIChO
U0ludGVnZXIpc2VsZjsKLX0KLQotLSAodm9pZClxdWlja0xvb2tXaXRoRXZlbnQ6KE5TRXZlbnQg
KilldmVudAotewotICAgIF9pbXBsLT5xdWlja0xvb2tXaXRoRXZlbnQoZXZlbnQpOwotfQotCi0t
IChOU1RyYWNraW5nUmVjdFRhZylhZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihp
ZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUlu
c2lkZQotewotICAgIHJldHVybiBfaW1wbC0+YWRkVHJhY2tpbmdSZWN0KE5TUmVjdFRvQ0dSZWN0
KHJlY3QpLCBvd25lciwgZGF0YSwgYXNzdW1lSW5zaWRlKTsKLX0KLQotLSAoTlNUcmFja2luZ1Jl
Y3RUYWcpX2FkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJE
YXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlIHVzZVRyYWNr
aW5nTnVtOihpbnQpdGFnCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5hZGRUcmFja2luZ1JlY3RXaXRo
VHJhY2tpbmdOdW0oTlNSZWN0VG9DR1JlY3QocmVjdCksIG93bmVyLCBkYXRhLCBhc3N1bWVJbnNp
ZGUsIHRhZyk7Ci19Ci0KLS0gKHZvaWQpX2FkZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3Rz
IG93bmVyOihpZClvd25lciB1c2VyRGF0YUxpc3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3Vt
ZUluc2lkZUxpc3Q6KEJPT0wgKilhc3N1bWVJbnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFj
a2luZ1JlY3RUYWcgKil0cmFja2luZ051bXMgY291bnQ6KGludCljb3VudAotewotICAgIENHUmVj
dCAqY2dSZWN0cyA9IChDR1JlY3QgKiljYWxsb2MoMSwgc2l6ZW9mKENHUmVjdCkpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgY2dSZWN0c1tpXSA9IE5TUmVj
dFRvQ0dSZWN0KHJlY3RzW2ldKTsKLSAgICBfaW1wbC0+YWRkVHJhY2tpbmdSZWN0c1dpdGhUcmFj
a2luZ051bXMoY2dSZWN0cywgb3duZXIsIHVzZXJEYXRhTGlzdCwgYXNzdW1lSW5zaWRlTGlzdCwg
dHJhY2tpbmdOdW1zLCBjb3VudCk7Ci0gICAgZnJlZShjZ1JlY3RzKTsKLX0KLQotLSAodm9pZCly
ZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRhZwotewotICAgIGlmICghX2lt
cGwpCi0gICAgICAgIHJldHVybjsKLSAgICBfaW1wbC0+cmVtb3ZlVHJhY2tpbmdSZWN0KHRhZyk7
Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZVRyYWNraW5nUmVjdHM6KE5TVHJhY2tpbmdSZWN0VGFnICop
dGFncyBjb3VudDooaW50KWNvdW50Ci17Ci0gICAgaWYgKCFfaW1wbCkKLSAgICAgICAgcmV0dXJu
OwotICAgIF9pbXBsLT5yZW1vdmVUcmFja2luZ1JlY3RzKHRhZ3MsIGNvdW50KTsKLX0KLQotQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KLS0gKE5TU3RyaW5nICopdmlldzoo
TlNWaWV3ICopdmlldyBzdHJpbmdGb3JUb29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50OihO
U1BvaW50KXBvaW50IHVzZXJEYXRhOih2b2lkICopZGF0YQotQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zdHJpbmdGb3JUb29sVGlwKHRh
Zyk7Ci19Ci0KLUFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCi0tICh2b2lk
KXBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLUFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAotewotICAgIF9pbXBsLT5wYXN0ZWJvYXJk
Q2hhbmdlZE93bmVyKHBhc3RlYm9hcmQpOwotfQotCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19CRUdJTgotLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJv
YXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCi1BTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKLXsKLSAgICBfaW1wbC0+cHJvdmlkZURhdGFGb3JQYXN0ZWJv
YXJkKHBhc3RlYm9hcmQsIHR5cGUpOwotfQotCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19CRUdJTgotLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVz
dGluYXRpb246KE5TVVJMICopZHJvcERlc3RpbmF0aW9uCi1BTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKLXsKLSAgICByZXR1cm4gX2ltcGwtPm5hbWVzT2ZQcm9taXNlZEZpbGVz
RHJvcHBlZEF0RGVzdGluYXRpb24oZHJvcERlc3RpbmF0aW9uKTsKLX0KLQotLSAoQk9PTCl3YW50
c1VwZGF0ZUxheWVyCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6V2ViVmlld0ltcGw6OndhbnRzVXBk
YXRlTGF5ZXIoKTsKLX0KLQotLSAodm9pZCl1cGRhdGVMYXllcgotewotICAgIF9pbXBsLT51cGRh
dGVMYXllcigpOwotfQotCi0tICh2b2lkKXNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdl
c3R1cmVzOihCT09MKWFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzCi17Ci0gICAg
X2ltcGwtPnNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzKGFsbG93c0JhY2tG
b3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzKTsKLX0KLQotLSAoQk9PTClhbGxvd3NCYWNrRm9yd2Fy
ZE5hdmlnYXRpb25HZXN0dXJlcwotewotICAgIHJldHVybiBfaW1wbC0+YWxsb3dzQmFja0Zvcndh
cmROYXZpZ2F0aW9uR2VzdHVyZXMoKTsKLX0KLQotLSAodm9pZClzbWFydE1hZ25pZnlXaXRoRXZl
bnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5zbWFydE1hZ25pZnlXaXRoRXZlbnQo
ZXZlbnQpOwotfQotCi0tICh2b2lkKXNldE1hZ25pZmljYXRpb246KGRvdWJsZSltYWduaWZpY2F0
aW9uIGNlbnRlcmVkQXRQb2ludDooTlNQb2ludClwb2ludAotewotICAgIF9pbXBsLT5zZXRNYWdu
aWZpY2F0aW9uKG1hZ25pZmljYXRpb24sIE5TUG9pbnRUb0NHUG9pbnQocG9pbnQpKTsKLX0KLQot
LSAodm9pZClzZXRNYWduaWZpY2F0aW9uOihkb3VibGUpbWFnbmlmaWNhdGlvbgotewotICAgIF9p
bXBsLT5zZXRNYWduaWZpY2F0aW9uKG1hZ25pZmljYXRpb24pOwotfQotCi0tIChkb3VibGUpbWFn
bmlmaWNhdGlvbgotewotICAgIHJldHVybiBfaW1wbC0+bWFnbmlmaWNhdGlvbigpOwotfQotCi0t
ICh2b2lkKXNldEFsbG93c01hZ25pZmljYXRpb246KEJPT0wpYWxsb3dzTWFnbmlmaWNhdGlvbgot
ewotICAgIF9pbXBsLT5zZXRBbGxvd3NNYWduaWZpY2F0aW9uKGFsbG93c01hZ25pZmljYXRpb24p
OwotfQotCi0tIChCT09MKWFsbG93c01hZ25pZmljYXRpb24KLXsKLSAgICByZXR1cm4gX2ltcGwt
PmFsbG93c01hZ25pZmljYXRpb24oKTsKLX0KLQotLSAodm9pZCltYWduaWZ5V2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKLXsKLSAgICBfaW1wbC0+bWFnbmlmeVdpdGhFdmVudChldmVudCk7Ci19
Ci0KLSNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQotLSAodm9pZClyb3RhdGVXaXRoRXZl
bnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIF9pbXBsLT5yb3RhdGVXaXRoRXZlbnQoZXZlbnQp
OwotfQotI2VuZGlmCi0KLS0gKEJPT0wpX3VzZVBsYXRmb3JtRmluZFVJCi17Ci0gICAgcmV0dXJu
IF91c2VQbGF0Zm9ybUZpbmRVSTsKLX0KLQotLSAodm9pZClfc2V0VXNlUGxhdGZvcm1GaW5kVUk6
KEJPT0wpdXNlUGxhdGZvcm1GaW5kVUkKLXsKLSAgICBfdXNlUGxhdGZvcm1GaW5kVUkgPSB1c2VQ
bGF0Zm9ybUZpbmRVSTsKLQotICAgIGlmIChfdGV4dEZpbmRlckNsaWVudCkKLSAgICAgICAgW3Nl
bGYgX2hpZGVGaW5kVUldOwotICAgIF90ZXh0RmluZGVyQ2xpZW50ID0gbmlsOwotfQotCi0tIChX
S1RleHRGaW5kZXJDbGllbnQgKilfZW5zdXJlVGV4dEZpbmRlckNsaWVudAotewotICAgIGlmICgh
X3RleHRGaW5kZXJDbGllbnQpCi0gICAgICAgIF90ZXh0RmluZGVyQ2xpZW50ID0gYWRvcHROUyhb
W1dLVGV4dEZpbmRlckNsaWVudCBhbGxvY10gaW5pdFdpdGhQYWdlOipfcGFnZSB2aWV3OnNlbGYg
dXNlUGxhdGZvcm1GaW5kVUk6X3VzZVBsYXRmb3JtRmluZFVJXSk7Ci0gICAgcmV0dXJuIF90ZXh0
RmluZGVyQ2xpZW50LmdldCgpOwotfQotCi0tICh2b2lkKWZpbmRNYXRjaGVzRm9yU3RyaW5nOihO
U1N0cmluZyAqKXRhcmdldFN0cmluZyByZWxhdGl2ZVRvTWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJB
c3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pcmVsYXRpdmVNYXRjaCBmaW5kT3B0aW9uczoo
TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9ucylmaW5kT3B0aW9ucyBt
YXhSZXN1bHRzOihOU1VJbnRlZ2VyKW1heFJlc3VsdHMgcmVzdWx0Q29sbGVjdG9yOih2b2lkIChe
KShOU0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdyYXApKXJlc3VsdENvbGxlY3RvcgotewotICAg
IFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0gZmluZE1hdGNoZXNGb3JTdHJpbmc6dGFy
Z2V0U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDpyZWxhdGl2ZU1hdGNoIGZpbmRPcHRpb25zOmZpbmRP
cHRpb25zIG1heFJlc3VsdHM6bWF4UmVzdWx0cyByZXN1bHRDb2xsZWN0b3I6cmVzdWx0Q29sbGVj
dG9yXTsKLX0KLQotLSAodm9pZClyZXBsYWNlTWF0Y2hlczooTlNBcnJheSAqKW1hdGNoZXMgd2l0
aFN0cmluZzooTlNTdHJpbmcgKilyZXBsYWNlbWVudFN0cmluZyBpblNlbGVjdGlvbk9ubHk6KEJP
T0wpc2VsZWN0aW9uT25seSByZXN1bHRDb2xsZWN0b3I6KHZvaWQgKF4pKE5TVUludGVnZXIgcmVw
bGFjZW1lbnRDb3VudCkpcmVzdWx0Q29sbGVjdG9yCi17Ci0gICAgW1tzZWxmIF9lbnN1cmVUZXh0
RmluZGVyQ2xpZW50XSByZXBsYWNlTWF0Y2hlczptYXRjaGVzIHdpdGhTdHJpbmc6cmVwbGFjZW1l
bnRTdHJpbmcgaW5TZWxlY3Rpb25Pbmx5OnNlbGVjdGlvbk9ubHkgcmVzdWx0Q29sbGVjdG9yOnJl
c3VsdENvbGxlY3Rvcl07Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsRmluZE1hdGNoVG9WaXNpYmxlOihp
ZDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pbWF0Y2gKLXsKLSAg
ICBbW3NlbGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIHNjcm9sbEZpbmRNYXRjaFRvVmlzaWJs
ZTptYXRjaF07Ci19Ci0KLS0gKE5TVmlldyAqKWRvY3VtZW50Q29udGFpbmVyVmlldwotewotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWdldFNlbGVjdGVkVGV4dDoodm9pZCAoXikoTlNT
dHJpbmcgKnNlbGVjdGVkVGV4dFN0cmluZykpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbW3Nl
bGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIGdldFNlbGVjdGVkVGV4dDpjb21wbGV0aW9uSGFu
ZGxlcl07Ci19Ci0KLS0gKHZvaWQpc2VsZWN0RmluZE1hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5
bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbW3NlbGYgX2Vuc3VyZVRl
eHRGaW5kZXJDbGllbnRdIHNlbGVjdEZpbmRNYXRjaDpmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRs
ZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilfd2Vi
X3N1cGVySW5wdXRDb250ZXh0Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnB1dENvbnRleHRdOwot
fQotCi0tICh2b2lkKV93ZWJfc3VwZXJRdWlja0xvb2tXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAotewotICAgIFtzdXBlciBxdWlja0xvb2tXaXRoRXZlbnQ6ZXZlbnRdOwotfQotCi0tICh2b2lk
KV93ZWJfc3VwZXJTd2lwZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgW3N1cGVy
IHN3aXBlV2l0aEV2ZW50OmV2ZW50XTsKLX0KLQotLSAodm9pZClfd2ViX3N1cGVyTWFnbmlmeVdp
dGhFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgW3N1cGVyIG1hZ25pZnlXaXRoRXZlbnQ6
ZXZlbnRdOwotfQotCi0tICh2b2lkKV93ZWJfc3VwZXJTbWFydE1hZ25pZnlXaXRoRXZlbnQ6KE5T
RXZlbnQgKilldmVudAotewotICAgIFtzdXBlciBzbWFydE1hZ25pZnlXaXRoRXZlbnQ6ZXZlbnRd
OwotfQotCi0tICh2b2lkKV93ZWJfc3VwZXJSZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdS
ZWN0VGFnKXRhZwotewotICAgIFtzdXBlciByZW1vdmVUcmFja2luZ1JlY3Q6dGFnXTsKLX0KLQot
LSAoaWQpX3dlYl9zdXBlckFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilh
dHRyaWJ1dGUKLXsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAg
IHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07Ci0g
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLS0gKHZvaWQpX3dlYl9z
dXBlckRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIFtzdXBlciBkb0Nv
bW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKLX0KLQotLSAoQk9PTClfd2ViX3N1cGVyUGVyZm9y
bUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIHJldHVybiBbc3VwZXIgcGVy
Zm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOwotfQotCi0tICh2b2lkKV93ZWJfc3VwZXJLZXlEb3du
OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBbc3VwZXIga2V5RG93bjpldmVudF07Ci19Ci0KLS0g
KE5TVmlldyAqKV93ZWJfc3VwZXJIaXRUZXN0OihOU1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJu
IFtzdXBlciBoaXRUZXN0OnBvaW50XTsKLX0KLQotLSAoaWQpX3dlYl9pbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdEludGVybmFsOihBUEk6OkhpdFRlc3RS
ZXN1bHQqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KHVpbnQzMl90KXR5cGUgdXNlckRhdGE6KEFQ
STo6T2JqZWN0Kil1c2VyRGF0YQotewotICAgIGlkPE5TU2VjdXJlQ29kaW5nPiBkYXRhID0gdXNl
ckRhdGEgPyBzdGF0aWNfY2FzdDxpZDxOU1NlY3VyZUNvZGluZz4+KHVzZXJEYXRhLT53cmFwcGVy
KCkpIDogbmlsOwotICAgIHJldHVybiBbc2VsZiBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29u
dHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6d3JhcHBlcigqaGl0VGVzdFJlc3VsdCkgd2l0aFR5cGU6
KF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9p
ZClfd2ViX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KLXsKLSAgICBpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
W3NlbGYgVUlEZWxlZ2F0ZV07Ci0gICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3
OildKQotICAgICAgICBbdWlEZWxlZ2F0ZSBfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1h
dGlvbkZvcldlYlZpZXc6c2VsZl07Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBfcHJlcGFyZUZv
ckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl07Ci19Ci0KLS0gKHZvaWQpX3dlYl9jYW5jZWxJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb24KLXsKLSAgICBpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlE
ZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pW3NlbGYgVUlEZWxlZ2F0ZV07Ci0g
ICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2NhbmNlbElt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6KV0pCi0gICAgICAgIFt1aURlbGVnYXRl
IF9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OnNlbGZdOwotICAgIGVs
c2UKLSAgICAgICAgW3NlbGYgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl07Ci19Ci0K
LS0gKHZvaWQpX3dlYl9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgotewotICAgIGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPiB1aURlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilbc2VsZiBVSURlbGVnYXRlXTsKLSAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJW
aWV3OildKQotICAgICAgICBbdWlEZWxlZ2F0ZSBfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Gb3JXZWJWaWV3OnNlbGZdOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYgX2NvbXBsZXRl
SW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uXTsKLX0KLQotLSAodm9pZClfd2ViX2RpZENoYW5nZUNv
bnRlbnRTaXplOihOU1NpemUpbmV3U2l6ZQotewotfQotCi0jaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKLQotLSAoV0tEcmFnRGVzdGluYXRpb25BY3Rpb24pX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rp
b25Gb3JEcmFnZ2luZ0luZm86KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCi17Ci0g
ICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KVtzZWxmIFVJRGVsZWdhdGVdOwotICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tG
b3JEcmFnZ2luZ0luZm86KV0pCi0gICAgICAgIHJldHVybiBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpz
ZWxmIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZv
XTsKLQotICAgIGlmICghbGlua2VkT25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lvbjo6Rmlyc3RX
aXRoRHJvcFRvTmF2aWdhdGVEaXNhbGxvd2VkQnlEZWZhdWx0KSkKLSAgICAgICAgcmV0dXJuIFdL
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55OwotCi0gICAgcmV0dXJuIFdLRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uQW55ICYgfldLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZDsKLX0KLQotLSAodm9pZClf
d2ViX2RpZFBlcmZvcm1EcmFnT3BlcmF0aW9uOihCT09MKWhhbmRsZWQKLXsKLSAgICBpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
c2VsZi5VSURlbGVnYXRlOwotICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF93ZWJWaWV3OmRpZFBlcmZvcm1EcmFnT3BlcmF0aW9uOildKQotICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGRpZFBlcmZvcm1EcmFnT3BlcmF0aW9uOmhhbmRsZWRd
OwotfQotCi0jZW5kaWYKLQotLSAodm9pZClfd2ViX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGls
ZFdpbmRvd3MKLXsKLSAgICBfaW1wbC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93
c0Zyb21WaWV3T25seSgpOwotfQotCi0tICh2b2lkKV93ZWJfZGlzbWlzc0NvbnRlbnRSZWxhdGl2
ZUNoaWxkV2luZG93c1dpdGhBbmltYXRpb246KEJPT0wpd2l0aEFuaW1hdGlvbgotewotICAgIF9p
bXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbkZyb21W
aWV3T25seSh3aXRoQW5pbWF0aW9uKTsKLX0KLQotLSAodm9pZClfd2ViX2VkaXRvclN0YXRlRGlk
Q2hhbmdlCi17Ci0gICAgW3NlbGYgX2RpZENoYW5nZUVkaXRvclN0YXRlXTsKLX0KLQotLSAodm9p
ZClfd2ViX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQgKilldmVu
dAotewotICAgIFtzZWxmIF9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOmV2ZW50
XTsKLX0KLQotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0KLS0gKE5TU3RyaW5nICopZmlsZVBy
b21pc2VQcm92aWRlcjooTlNGaWxlUHJvbWlzZVByb3ZpZGVyICopZmlsZVByb21pc2VQcm92aWRl
ciBmaWxlTmFtZUZvclR5cGU6KE5TU3RyaW5nICopZmlsZVR5cGUKLXsKLSAgICByZXR1cm4gX2lt
cGwtPmZpbGVOYW1lRm9yRmlsZVByb21pc2VQcm92aWRlcihmaWxlUHJvbWlzZVByb3ZpZGVyLCBm
aWxlVHlwZSk7Ci19Ci0KLS0gKHZvaWQpZmlsZVByb21pc2VQcm92aWRlcjooTlNGaWxlUHJvbWlz
ZVByb3ZpZGVyICopZmlsZVByb21pc2VQcm92aWRlciB3cml0ZVByb21pc2VUb1VSTDooTlNVUkwg
Kil1cmwgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKmVycm9yKSljb21wbGV0
aW9uSGFuZGxlcgotewotICAgIF9pbXBsLT53cml0ZVRvVVJMRm9yRmlsZVByb21pc2VQcm92aWRl
cihmaWxlUHJvbWlzZVByb3ZpZGVyLCB1cmwsIGNvbXBsZXRpb25IYW5kbGVyKTsKLX0KLQotLSAo
TlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nU2Vzc2lvbjooTlNEcmFnZ2luZ1Nlc3Npb24gKilzZXNz
aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2tGb3JEcmFnZ2luZ0NvbnRleHQ6KE5TRHJhZ2dpbmdDb250
ZXh0KWNvbnRleHQKLXsKLSAgICByZXR1cm4gX2ltcGwtPmRyYWdTb3VyY2VPcGVyYXRpb25NYXNr
KHNlc3Npb24sIGNvbnRleHQpOwotfQotCi0tICh2b2lkKWRyYWdnaW5nU2Vzc2lvbjooTlNEcmFn
Z2luZ1Nlc3Npb24gKilzZXNzaW9uIGVuZGVkQXRQb2ludDooTlNQb2ludClzY3JlZW5Qb2ludCBv
cGVyYXRpb246KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KLXsKLSAgICBfaW1wbC0+ZHJhZ2dp
bmdTZXNzaW9uRW5kZWQoc2Vzc2lvbiwgc2NyZWVuUG9pbnQsIG9wZXJhdGlvbik7Ci19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQotCi0tIChOU1ByaW50T3BlcmF0aW9uICopcHJp
bnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbwotewotICAg
IGlmIChhdXRvIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJl
dHVybiBfaW1wbC0+cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKHByaW50SW5mbywgKndlYkZy
YW1lUHJveHkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMp
Ci0KLSNwcmFnbWEgbWFyayAtIHRvdWNoQmFyIG1ldGhvZHMKLQotI2lmIEhBVkUoVE9VQ0hfQkFS
KQotCi1AZHluYW1pYyB0b3VjaEJhcjsKLQotLSAoTlNUb3VjaEJhciAqKW1ha2VUb3VjaEJhcgot
ewotICAgIHJldHVybiBfaW1wbC0+bWFrZVRvdWNoQmFyKCk7Ci19Ci0KLS0gKE5TQ2FuZGlkYXRl
TGlzdFRvdWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0KLXsKLSAgICByZXR1
cm4gX2ltcGwtPmNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0oKTsKLX0KLQotLSAodm9pZClfd2Vi
X2RpZEFkZE1lZGlhQ29udHJvbHNNYW5hZ2VyOihpZCljb250cm9sc01hbmFnZXIKLXsKLSAgICBb
c2VsZiBfYWRkTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldzpjb250cm9sc01hbmFnZXJdOwotfQot
Ci0tICh2b2lkKV93ZWJfZGlkUmVtb3ZlTWVkaWFDb250cm9sc01hbmFnZXIKLXsKLSAgICBbc2Vs
ZiBfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlld107Ci19Ci0KLS0gKHZvaWQpX2ludGVy
YWN0V2l0aE1lZGlhQ29udHJvbHNGb3JUZXN0aW5nCi17Ci0gICAgW3NlbGYgX3NldFdhbnRzTWVk
aWFQbGF5YmFja0NvbnRyb2xzVmlldzpZRVNdOwotICAgIFtzZWxmIG1ha2VUb3VjaEJhcl07Ci19
Ci0KLSNlbmRpZiAvLyBIQVZFKFRPVUNIX0JBUikKLQotQGVuZAotCi0jcHJhZ21hIG1hcmsgLSBX
S1dlYlZpZXcgKFdLUHJpdmF0ZSkKLQotQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tQcml2
YXRlKQotCi0jcHJhZ21hIG1hcmsgLSBtYWNPUyBXS1ByaXZhdGUKLQotI2lmIFBMQVRGT1JNKE1B
QykKLQotI2RlZmluZSBXRUJDT1JFX1BSSVZBVEVfQ09NTUFORChjb21tYW5kKSAtICh2b2lkKV8j
I2NvbW1hbmQ6KGlkKXNlbmRlciB7IF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoI2NvbW1hbmQg
IyMgX3MpOyB9Ci0KLVdFQkNPUkVfUFJJVkFURV9DT01NQU5EKGFsaWduQ2VudGVyKQotV0VCQ09S
RV9QUklWQVRFX0NPTU1BTkQoYWxpZ25KdXN0aWZpZWQpCi1XRUJDT1JFX1BSSVZBVEVfQ09NTUFO
RChhbGlnbkxlZnQpCi1XRUJDT1JFX1BSSVZBVEVfQ09NTUFORChhbGlnblJpZ2h0KQotV0VCQ09S
RV9QUklWQVRFX0NPTU1BTkQoaW5zZXJ0T3JkZXJlZExpc3QpCi1XRUJDT1JFX1BSSVZBVEVfQ09N
TUFORChpbnNlcnRVbm9yZGVyZWRMaXN0KQotV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoaW5zZXJ0
TmVzdGVkT3JkZXJlZExpc3QpCi1XRUJDT1JFX1BSSVZBVEVfQ09NTUFORChpbnNlcnROZXN0ZWRV
bm9yZGVyZWRMaXN0KQotV0VCQ09SRV9QUklWQVRFX0NPTU1BTkQoaW5kZW50KQotV0VCQ09SRV9Q
UklWQVRFX0NPTU1BTkQob3V0ZGVudCkKLVdFQkNPUkVfUFJJVkFURV9DT01NQU5EKHBhc3RlQXNR
dW90YXRpb24pCi1XRUJDT1JFX1BSSVZBVEVfQ09NTUFORChwYXN0ZUFuZE1hdGNoU3R5bGUpCi0K
LSN1bmRlZiBXRUJDT1JFX1BSSVZBVEVfQ09NTUFORAotCi0tICh2b2lkKV90b2dnbGVTdHJpa2VU
aHJvdWdoOihpZClzZW5kZXIKLXsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKCJzdHJp
a2V0aHJvdWdoIl9zKTsKLX0KLQotLSAodm9pZClfaW5jcmVhc2VMaXN0TGV2ZWw6KGlkKXNlbmRl
cgotewotICAgIF9wYWdlLT5pbmNyZWFzZUxpc3RMZXZlbCgpOwotfQotCi0tICh2b2lkKV9kZWNy
ZWFzZUxpc3RMZXZlbDooaWQpc2VuZGVyCi17Ci0gICAgX3BhZ2UtPmRlY3JlYXNlTGlzdExldmVs
KCk7Ci19Ci0KLS0gKHZvaWQpX2NoYW5nZUxpc3RUeXBlOihpZClzZW5kZXIKLXsKLSAgICBfcGFn
ZS0+Y2hhbmdlTGlzdFR5cGUoKTsKLX0KLQotLSAoQk9PTClfdXNlU3lzdGVtQXBwZWFyYW5jZQot
ewotICAgIHJldHVybiBfaW1wbC0+dXNlU3lzdGVtQXBwZWFyYW5jZSgpOwotfQotCi0tICh2b2lk
KV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOihCT09MKXVzZVN5c3RlbUFwcGVhcmFuY2UKLXsKLSAg
ICBfaW1wbC0+c2V0VXNlU3lzdGVtQXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlKTsKLX0K
LQotLSAoV0tQYWdlUmVmKV9wYWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3Ci17Ci0gICAg
cmV0dXJuIHRvQVBJKF9wYWdlLmdldCgpKTsKLX0KLQotLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVM
YXlvdXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUKLXsKLSAgICBpZiAoYXV0byogd2Vi
RnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJZGVu
dGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCi0gICAgICAgIHJldHVybiBfaW1w
bC0+Y2FuQ2hhbmdlRnJhbWVMYXlvdXQoKndlYkZyYW1lUHJveHkpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50IGln
bm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQaW5uZWRTdGF0ZQotewotICAgIHJldHVy
biBfaW1wbC0+dHJ5VG9Td2lwZVdpdGhFdmVudChldmVudCwgaWdub3JpbmdQaW5uZWRTdGF0ZSk7
Ci19Ci0KLS0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cwotewotICAgIHJldHVybiBfaW1w
bC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7Ci19Ci0KLS0gKHZvaWQpX3NldElnbm9yZXNOb25X
aGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKLXsKLSAgICBfaW1wbC0+c2V0
SWdub3Jlc05vbldoZWVsRXZlbnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50cyk7Ci19Ci0KLS0gKEJP
T0wpX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyCi17Ci0gICAgcmV0dXJuIF9wYWdl
ICYmIF9wYWdlLT5oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlcigpOwotfQotCi0tICh2
b2lkKV9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzCi17Ci0gICAgX2ltcGwtPmRp
c21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9tVmlld09ubHkoKTsKLX0KLQotLSAo
dm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50
Ci17Ci0gICAgX2ltcGwtPmdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmVGcm9tVmll
d09ubHkoZXZlbnQpOwotfQotCi0tICh2b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBkYXRlcwotewot
ICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwotfQotCi0tICh2b2lkKV9lbmFi
bGVGcmFtZVNpemVVcGRhdGVzCi17Ci0gICAgX2ltcGwtPmVuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMo
KTsKLX0KLQotLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzCi17Ci0g
ICAgX2ltcGwtPmJlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcygpOwotfQotCi0tICh2
b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzCi17Ci0gICAgX2ltcGwtPmVuZERl
ZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsKLX0KLQotLSAodm9pZClfZW5kRGVmZXJyaW5n
Vmlld0luV2luZG93Q2hhbmdlc1N5bmMKLXsKLSAgICBfaW1wbC0+ZW5kRGVmZXJyaW5nVmlld0lu
V2luZG93Q2hhbmdlc1N5bmMoKTsKLX0KLQotLSAoTlNWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcKLXsKLSAgICByZXR1cm4gX2ltcGwtPmZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXco
KTsKLX0KLQotLSAoTlNXaW5kb3cgKilfZnVsbFNjcmVlbldpbmRvdwotewotICAgIHJldHVybiBf
aW1wbC0+ZnVsbFNjcmVlbldpbmRvdygpOwotfQotCi0tIChOU0NvbG9yICopX3VuZGVybGF5Q29s
b3IKLXsKLSAgICByZXR1cm4gX2ltcGwtPnVuZGVybGF5Q29sb3IoKTsKLX0KLQotLSAodm9pZClf
c2V0VW5kZXJsYXlDb2xvcjooTlNDb2xvciAqKXVuZGVybGF5Q29sb3IKLXsKLSAgICBfaW1wbC0+
c2V0VW5kZXJsYXlDb2xvcih1bmRlcmxheUNvbG9yKTsKLX0KLQotLSAodm9pZClfc2V0Q3VzdG9t
U3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MKLXsKLSAgICBfaW1wbC0+c2V0
Q3VzdG9tU3dpcGVWaWV3cyhjdXN0b21Td2lwZVZpZXdzKTsKLX0KLQotLSAodm9pZClfc2V0Q3Vz
dG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0Ci17Ci0g
ICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQodG9wQ29udGVudElu
c2V0KTsKLX0KLQotLSAodm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoodm9p
ZCheKShDR1JlY3QpKWNhbGxiYWNrCi17Ci0gICAgX2ltcGwtPnNldERpZE1vdmVTd2lwZVNuYXBz
aG90Q2FsbGJhY2soY2FsbGJhY2spOwotfQotCi0tICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJl
Y3QgYW5kU2Nyb2xsQnk6KE5TU2l6ZSlvZmZzZXQKLXsKLSAgICBfaW1wbC0+c2V0RnJhbWVBbmRT
Y3JvbGxCeShOU1JlY3RUb0NHUmVjdChyZWN0KSwgTlNTaXplVG9DR1NpemUob2Zmc2V0KSk7Ci19
Ci0KLS0gKHZvaWQpX3NldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzOihDR0Zsb2F0KXRvdGFsSGVpZ2h0
T2ZCYW5uZXJzCi17Ci0gICAgX2ltcGwtPnNldFRvdGFsSGVpZ2h0T2ZCYW5uZXJzKHRvdGFsSGVp
Z2h0T2ZCYW5uZXJzKTsKLX0KLQotLSAoQ0dGbG9hdClfdG90YWxIZWlnaHRPZkJhbm5lcnMKLXsK
LSAgICByZXR1cm4gX2ltcGwtPnRvdGFsSGVpZ2h0T2ZCYW5uZXJzKCk7Ci19Ci0KLS0gKHZvaWQp
X3NldFNob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzOihCT09MKXNob3VsZFN1cHBy
ZXNzCi17Ci0gICAgX2ltcGwtPnNldFNob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2Vz
KHNob3VsZFN1cHByZXNzKTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQotI3ByYWdt
YSBtYXJrIC0gaU9TIFdLUHJpdmF0ZQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotRk9S
X0VBQ0hfUFJJVkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0FDVElPTl9UT19XS0NP
TlRFTlRWSUVXKQotCi0tICh2b2lkKV9zZXRGb250OihVSUZvbnQgKilmb250IHNlbmRlcjooaWQp
c2VuZGVyCi17Ci0gICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCi0gICAgICAg
IFtfY29udGVudFZpZXcgX3NldEZvbnRGb3JXZWJWaWV3OmZvbnQgc2VuZGVyOnNlbmRlcl07Ci19
Ci0KLS0gKHZvaWQpX3NldEZvbnRTaXplOihDR0Zsb2F0KWZvbnRTaXplIHNlbmRlcjooaWQpc2Vu
ZGVyCi17Ci0gICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCi0gICAgICAgIFtf
Y29udGVudFZpZXcgX3NldEZvbnRTaXplRm9yV2ViVmlldzpmb250U2l6ZSBzZW5kZXI6c2VuZGVy
XTsKLX0KLQotLSAodm9pZClfc2V0VGV4dENvbG9yOihVSUNvbG9yICopY29sb3Igc2VuZGVyOihp
ZClzZW5kZXIKLXsKLSAgICBpZiAoc2VsZi51c2VzU3RhbmRhcmRDb250ZW50VmlldykKLSAgICAg
ICAgW19jb250ZW50VmlldyBfc2V0VGV4dENvbG9yRm9yV2ViVmlldzpjb2xvciBzZW5kZXI6c2Vu
ZGVyXTsKLX0KLQotLSAoVUlWaWV3ICopaW5wdXRBY2Nlc3NvcnlWaWV3Ci17Ci0gICAgcmV0dXJu
IFtfY29udGVudFZpZXcgaW5wdXRBY2Nlc3NvcnlWaWV3Rm9yV2ViVmlld107Ci19Ci0KLS0gKFVJ
VmlldyAqKWlucHV0VmlldwotewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlucHV0Vmlld0Zv
cldlYlZpZXddOwotfQotCi0tIChVSVZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldwot
ewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoW19mdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dKQotICAgICAgICByZXR1cm4gW19mdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlciB3ZWJWaWV3UGxhY2Vob2xkZXJdOwotI2VuZGlmIC8vIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKV9yZXF1ZXN0QWN0aXZh
dGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxldGlvbkJsb2NrOih2
b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jawotewotICAgIGF1dG8gaW5m
b1JlcXVlc3QgPSBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0KFdlYkNvcmU6
OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpOwotICAgIGluZm9SZXF1ZXN0LmluY2x1ZGVTbmFw
c2hvdCA9IHRydWU7Ci0KLSAgICBbX2NvbnRlbnRWaWV3IGRvQWZ0ZXJQb3NpdGlvbkluZm9ybWF0
aW9uVXBkYXRlOltjYXB0dXJlZEJsb2NrID0gbWFrZUJsb2NrUHRyKGJsb2NrKV0gKFdlYktpdDo6
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pIHsKLSAgICAgICAg
Y2FwdHVyZWRCbG9jayhbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gYWN0aXZhdGVkRWxlbWVudElu
Zm9XaXRoSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246aW5mb3JtYXRpb24gdXNlcklu
Zm86bmlsXSk7Ci0gICAgfSBmb3JSZXF1ZXN0OmluZm9SZXF1ZXN0XTsKLX0KLQotLSAoQ0dSZWN0
KV9jb250ZW50VmlzaWJsZVJlY3QKLXsKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6W3Nl
bGYgYm91bmRzXSB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKLX0KLQotLSAoQ0dQ
b2ludClfY29udmVydFBvaW50RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50Ci17Ci0g
ICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpzZWxmLl9jdXJyZW50
Q29udGVudFZpZXddOwotfQotCi0tIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29u
dGVudHM6KENHUG9pbnQpcG9pbnQKLXsKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBv
aW50IHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwotfQotCi0tICh2b2lkKWRpZFN0
YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbgotewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92
ZXJyaWRlLgotfQotCi0tICh2b2lkKWRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb24KLXsKLSAg
ICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLX0KLQotLSAoQ0dSZWN0KV91aVRleHRD
YXJldFJlY3QKLXsKLSAgICAvLyBGb3JjZSB0aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlm
IG5lZWRlZC4KLSAgICBbX2NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKLQot
ICAgIHJldHVybiBbW19jb250ZW50VmlldyB2YWx1ZUZvcktleVBhdGg6QCJpbnRlcmFjdGlvbkFz
c2lzdGFudC5zZWxlY3Rpb25WaWV3LnNlbGVjdGlvbi5jYXJldFJlY3QiXSBDR1JlY3RWYWx1ZV07
Ci19Ci0KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZz
ZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhh
bmRsZXIKLXsKLSAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0
U2VsZWN0aW9uT2Zmc2V0Om9mZnNldCB3aXRoVGV4dDp0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltj
YXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgc2VsZWN0aW9uUmVjdHMp
IHsKLSAgICAgICAgaWYgKCFjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBhdXRvIHJlY3RWYWx1ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2VsZWN0aW9uUmVjdHMuc2l6ZSgpXSk7Ci0gICAg
ICAgIGZvciAoYXV0byYgc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3RzKQotICAgICAgICAg
ICAgW3JlY3RWYWx1ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rp
b25SZWN0LnJlY3QoKV1dOwotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHJlY3RW
YWx1ZXMuZ2V0KCkpOwotICAgIH1dOwotfQotCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVT
ZWxlY3Rpb24KLXsKLSAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5U3RvcmVTZWxlY3Rp
b25dOwotfQotCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24KLXsKLSAgICBb
X2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb25dOwotfQotCi0tIChCT09M
KV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gc2VsZi5fY3VycmVu
dENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7Ci19Ci0KLS0gKHZvaWQgKF4pKHZvaWQpKV9y
ZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGUKLXsKLSAgICArK19hY3RpdmVGb2N1c2VkU3RhdGVSZXRh
aW5Db3VudDsKLQotICAgIC8vIEZJWE1FOiBVc2Ugc29tZXRoaW5nIGxpa2UgQ29tcGxldGlvbkhh
bmRsZXJDYWxsQ2hlY2tlciB0byBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgYmxvY2sgaXMgY2Fs
bGVkIGJlZm9yZSBpdCdzIHJlbGVhc2VkLgotICAgIHJldHVybiBbW1tzZWxmXSB7Ci0gICAgICAg
IC0tX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OwotICAgIH0gY29weV0gYXV0b3JlbGVh
c2VdOwotfQotCi0tICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3Zp
bmdGb3J3YXJkOihCT09MKXNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0g
ICAgdHlwZW9mKGNvbXBsZXRpb25IYW5kbGVyKSBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBuaWw7
Ci0gICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNv
cHkgPSBCbG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIFtfY29udGVudFZpZXcg
X2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmluZ0ZvcndhcmQ6c2VsZWN0aW5n
Rm9yd2FyZCBjb21wbGV0aW9uSGFuZGxlcjpbY29tcGxldGlvbkhhbmRsZXJDb3B5XShCT09MIGRp
ZEJlY29tZUZpcnN0UmVzcG9uZGVyKSB7Ci0gICAgICAgIGlmICghY29tcGxldGlvbkhhbmRsZXJD
b3B5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29w
eShkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcik7Ci0gICAgICAgIEJsb2NrX3JlbGVhc2UoY29tcGxl
dGlvbkhhbmRsZXJDb3B5KTsKLSAgICB9XTsKLX0KLQotLSAoaWQpX3NuYXBzaG90TGF5ZXJDb250
ZW50c0ZvckJhY2tGb3J3YXJkTGlzdEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0K
LXsKLSAgICBpZiAoX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJlbnRJdGVtKCkgPT0gJml0
ZW0uX2l0ZW0pCi0gICAgICAgIF9wYWdlLT5yZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKl9wYWdl
LT5iYWNrRm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgpKTsKLQotICAgIGlmIChhdXRvKiB2aWV3
U25hcHNob3QgPSBpdGVtLl9pdGVtLnNuYXBzaG90KCkpCi0gICAgICAgIHJldHVybiB2aWV3U25h
cHNob3QtPmFzTGF5ZXJDb250ZW50cygpOwotCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNB
cnJheSAqKV9kYXRhRGV0ZWN0aW9uUmVzdWx0cwotewotI2lmIEVOQUJMRShEQVRBX0RFVEVDVElP
TikKLSAgICByZXR1cm4gW19jb250ZW50VmlldyBfZGF0YURldGVjdGlvblJlc3VsdHNdOwotI2Vs
c2UKLSAgICByZXR1cm4gbmlsOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlS
ZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudAotewotICAgIFtfY29udGVudFZpZXcgYWNjZXNz
aWJpbGl0eVJldHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50XTsKLX0KLQotLy8gVGhpcyBtZXRo
b2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0vLyBDdXJyZW50bHkgaXQncyBvbmx5
IGluIFRlc3RSdW5uZXJXS1dlYlZpZXcuCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlkR2V0U3Bl
YWtTZWxlY3Rpb25Db250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQKLXsKLX0KLQotI2VuZGlmIC8v
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNwcmFnbWEgbWFyayAtIG1hY09TL2lPUyBXS1ByaXZh
dGUKLQotLSAoQ0dTaXplKV92aWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzCi17Ci0gICAg
cmV0dXJuIF9wYWdlLT52aWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKCk7Ci19Ci0KLS0g
KHZvaWQpX3NldFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHM6KENHU2l6ZSl2aWV3cG9y
dFNpemUKLXsKLSAgICBhdXRvIHZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0VW5pdHMgPSBXZWJDb3Jl
OjpJbnRTaXplKHZpZXdwb3J0U2l6ZSk7Ci0gICAgaWYgKHZpZXdwb3J0U2l6ZUZvclZpZXdwb3J0
VW5pdHMuaXNFbXB0eSgpKQotICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJn
dW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVmlld3BvcnQgc2l6ZSBzaG91bGQgbm90IGJlIGVtcHR5
Il07Ci0KLSAgICBfcGFnZS0+c2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyh2aWV3
cG9ydFNpemVGb3JWaWV3cG9ydFVuaXRzKTsKLX0KLQotLSAoX1dLSW5zcGVjdG9yICopX2luc3Bl
Y3RvcgotewotICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBfcGFnZS0+aW5zcGVjdG9yKCkpCi0g
ICAgICAgIHJldHVybiB3cmFwcGVyKCppbnNwZWN0b3IpOwotICAgIHJldHVybiBuaWw7Ci19Ci0K
LS0gKF9XS0ZyYW1lSGFuZGxlICopX21haW5GcmFtZQotewotICAgIGlmIChhdXRvKiBmcmFtZSA9
IF9wYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpGcmFtZUhh
bmRsZTo6Y3JlYXRlKGZyYW1lLT5mcmFtZUlEKCkpKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0t
IChCT09MKV9pc0VkaXRhYmxlCi17Ci0gICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5pc0VkaXRh
YmxlKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEVkaXRhYmxlOihCT09MKWVkaXRhYmxlCi17Ci0gICAg
Ym9vbCB3YXNFZGl0YWJsZSA9IF9wYWdlLT5pc0VkaXRhYmxlKCk7Ci0gICAgX3BhZ2UtPnNldEVk
aXRhYmxlKGVkaXRhYmxlKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKGVkaXRhYmxlKQot
ICAgICAgICBfaW1wbC0+ZGlkQmVjb21lRWRpdGFibGUoKTsKLSNlbmRpZgotCi0gICAgaWYgKHdh
c0VkaXRhYmxlID09IGVkaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIFtfY29udGVudFZpZXcgX2RpZENoYW5nZVdlYlZpZXdFZGl0YWJpbGl0
eV07Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAq
KWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxldGlvbjoodm9pZCAo
XikoQk9PTCkpY29tcGxldGlvbgotewotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoY29t
bWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAg
IGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKLSAgICAgICAgICAgIGNhcHR1cmVkQ29tcGxl
dGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7Ci0g
ICAgfSk7Ci19Ci0KLS0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KV90ZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUKLXsKLSAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZS5nZXRBdXRvcmVsZWFzZWQoKTsKLX0KLQotLSAodm9pZClfc2V0VGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQotewotICAg
IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotLSAodm9pZClfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9u
Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgpKWNvbXBs
ZXRpb25IYW5kbGVyCi17Ci0gICAgdXNpbmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOwotCi0gICAgaWYgKCFfdGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIHx8ICFfcGFnZSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBleGNsdXNpb25SdWxlczsKLSAg
ICBpZiAoY29uZmlndXJhdGlvbikgewotICAgICAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmlndXJhdGlvbi5leGNsdXNpb25SdWxlcykgewot
ICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxlLmlzRXhjbHVzaW9uID8gRXhjbHVzaW9uUnVs
ZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkluY2x1ZGU7Ci0gICAgICAg
ICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9u
UnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25SdWxlOjpBdHRyaWJ1dGVSdWxlIHsgd2tSdWxl
LmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1dGVWYWx1ZSB9IH0pOwotICAgICAgICAgICAg
ZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKLSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxl
cy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkNsYXNzUnVsZSB7IHdrUnVsZS5jbGFzc05h
bWUgfSB9KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBleGNsdXNpb25SdWxl
cy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlIHsgd2tSdWxlLmVsZW1l
bnROYW1lIH0gfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfcGFnZS0+c3RhcnRUZXh0TWFu
aXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJW
aWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRl
bnRpZmllciBpdGVtSUQsCi0gICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKLSAgICAgICAg
aWYgKCF3ZWFrU2VsZikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIHJldGFp
bmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOwotICAgICAgICBhdXRvIGRlbGVnYXRlID0gW3JldGFp
bmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXTsKLSAgICAgICAgaWYgKCFkZWxlZ2F0
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tl
bnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNpemUoKV07Ci0g
ICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiB0b2tlbnMpIHsKLSAgICAgICAgICAgIGF1dG8gd2tU
b2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsK
LSAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIodG9rZW4u
aWRlbnRpZmllci50b1VJbnQ2NCgpKV07Ci0gICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50
OnRva2VuLmNvbnRlbnRdOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4u
aXNFeGNsdWRlZF07Ci0gICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0
KCldOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRN
YW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIo
aXRlbUlELnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOwotICAgICAgICBbZGVsZWdhdGUg
X3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTpp
dGVtLmdldCgpXTsKLSAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7Ci0gICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJs
b2NrKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjoo
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBz
dWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIHVzaW5nIE1hbmlwdWxhdGlvblJlc3Vs
dCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1
bHQ7Ci0KLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGl0ZW1J
RCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUludDY0
KCkpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOwotICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7Ci0gICAgICAgIGF1dG8gdG9rZW5JRCA9IG1h
a2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpU
b2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJbnQ2NCgp
KTsKLSAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQgfSk7Ci0g
ICAgfQotCi0gICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vu
cywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5k
bGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKLSAgICAgICAgY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2Vzcyk7Ci0gICAg
fSk7Ci19Ci0tICh2b2lkKV90YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlkKXNlbmRlcgot
ewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbc2VsZiB0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rp
b246c2VuZGVyXTsKLSNlbHNlCi0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZCgiVGFrZUZp
bmRTdHJpbmdGcm9tU2VsZWN0aW9uIl9zKTsKLSNlbmRpZgotfQotCi0rIChOU1N0cmluZyAqKV9z
dHJpbmdGb3JGaW5kCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6c3RyaW5nRm9yRmluZCgpOwotfQot
Ci0rICh2b2lkKV9zZXRTdHJpbmdGb3JGaW5kOihOU1N0cmluZyAqKWZpbmRTdHJpbmcKLXsKLSAg
ICBXZWJLaXQ6OnVwZGF0ZVN0cmluZ0ZvckZpbmQoZmluZFN0cmluZyk7Ci19Ci0KLS0gKF9XS1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5ICopX3JlbW90ZU9iamVjdFJlZ2lzdHJ5Ci17Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIHJldHVybiBfaW1wbC0+cmVtb3RlT2JqZWN0UmVnaXN0cnkoKTsKLSNlbHNl
Ci0gICAgaWYgKCFfcmVtb3RlT2JqZWN0UmVnaXN0cnkpIHsKLSAgICAgICAgX3JlbW90ZU9iamVj
dFJlZ2lzdHJ5ID0gYWRvcHROUyhbW19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5IGFsbG9jXSBfaW5p
dFdpdGhXZWJQYWdlUHJveHk6Kl9wYWdlXSk7Ci0gICAgICAgIF9wYWdlLT5wcm9jZXNzKCkucHJv
Y2Vzc1Bvb2woKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU9iamVjdFJlZ2lz
dHJ5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIF9wYWdlLT5pZGVudGlmaWVyKCksIFtfcmVtb3Rl
T2JqZWN0UmVnaXN0cnkgcmVtb3RlT2JqZWN0UmVnaXN0cnldKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5LmdldCgpOwotI2VuZGlmCi19Ci0KLS0gKFdLQnJvd3Np
bmdDb250ZXh0SGFuZGxlICopX2hhbmRsZQotewotICAgIHJldHVybiBbW1tXS0Jyb3dzaW5nQ29u
dGV4dEhhbmRsZSBhbGxvY10gX2luaXRXaXRoUGFnZVByb3h5OipfcGFnZV0gYXV0b3JlbGVhc2Vd
OwotfQotCi0tIChfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylfb2JzZXJ2ZWRSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50cwotewotICAgIHJldHVybiBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2
ZW50czsKLX0KLQotLSAoaWQgPFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZT4pX2hpc3RvcnlEZWxl
Z2F0ZQotewotICAgIHJldHVybiBfbmF2aWdhdGlvblN0YXRlLT5oaXN0b3J5RGVsZWdhdGUoKS5h
dXRvcmVsZWFzZSgpOwotfQotCi0tICh2b2lkKV9zZXRIaXN0b3J5RGVsZWdhdGU6KGlkIDxXS0hp
c3RvcnlEZWxlZ2F0ZVByaXZhdGU+KWhpc3RvcnlEZWxlZ2F0ZQotewotICAgIF9wYWdlLT5zZXRI
aXN0b3J5Q2xpZW50KF9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUhpc3RvcnlDbGllbnQoKSk7Ci0g
ICAgX25hdmlnYXRpb25TdGF0ZS0+c2V0SGlzdG9yeURlbGVnYXRlKGhpc3RvcnlEZWxlZ2F0ZSk7
Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZU1lZGlhUGxheWJhY2tDb250cm9sc01hbmFnZXIKLXsKLSNp
ZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VS
KQotICAgIF9pbXBsLT51cGRhdGVNZWRpYVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5k
aWYKLX0KLQotLSAoQk9PTClfY2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZQotewotI2lmIEhBVkUo
VE9VQ0hfQkFSKQotICAgIHJldHVybiBfaW1wbC0+Y2FuVG9nZ2xlUGljdHVyZUluUGljdHVyZSgp
OwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYKLX0KLQotLSAoQk9PTClfaXNQaWN0dXJl
SW5QaWN0dXJlQWN0aXZlCi17Ci0jaWYgSEFWRShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExB
WUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKLSAgICByZXR1cm4gX2ltcGwtPmlzUGljdHVyZUluUGlj
dHVyZUFjdGl2ZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYKLX0KLQotLSAodm9p
ZClfdG9nZ2xlUGljdHVyZUluUGljdHVyZQotewotI2lmIEhBVkUoVE9VQ0hfQkFSKSAmJiBFTkFC
TEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0gICAgX2ltcGwtPnRvZ2dsZVBpY3R1
cmVJblBpY3R1cmUoKTsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9jbG9zZUFsbE1lZGlhUHJlc2Vu
dGF0aW9ucwotewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoYXV0byB2aWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyID0gX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKSkgewot
ICAgICAgICB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLT5mb3JFYWNoU2Vzc2lvbihbXSAoYXV0byYg
bW9kZWwsIGF1dG8mIGludGVyZmFjZSkgewotICAgICAgICAgICAgbW9kZWwucmVxdWVzdEZ1bGxz
Y3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU5vbmUpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBmdWxsU2NyZWVu
TWFuYWdlciA9IF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpOyBmdWxsU2NyZWVuTWFuYWdlciAm
JiBmdWxsU2NyZWVuTWFuYWdlci0+aXNGdWxsU2NyZWVuKCkpCi0gICAgICAgIGZ1bGxTY3JlZW5N
YW5hZ2VyLT5jbG9zZSgpOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3N0b3BNZWRpYUNhcHR1cmUK
LXsKLSAgICBfcGFnZS0+c3RvcE1lZGlhQ2FwdHVyZSgpOwotfQotCi0tICh2b2lkKV9zdG9wQWxs
TWVkaWFQbGF5YmFjawotewotICAgIF9wYWdlLT5zdG9wQWxsTWVkaWFQbGF5YmFjaygpOwotfQot
Ci0tICh2b2lkKV9zdXNwZW5kQWxsTWVkaWFQbGF5YmFjawotewotICAgIF9wYWdlLT5zdXNwZW5k
QWxsTWVkaWFQbGF5YmFjaygpOwotfQotCi0tICh2b2lkKV9yZXN1bWVBbGxNZWRpYVBsYXliYWNr
Ci17Ci0gICAgX3BhZ2UtPnJlc3VtZUFsbE1lZGlhUGxheWJhY2soKTsKLX0KLQotLSAoTlNVUkwg
KilfdW5yZWFjaGFibGVVUkwKLXsKLSAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0
cmluZzpfcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVucmVhY2hhYmxlVVJMKCldOwotfQotCi0tIChO
U1VSTCAqKV9tYWluRnJhbWVVUkwKLXsKLSAgICBpZiAoYXV0byogZnJhbWUgPSBfcGFnZS0+bWFp
bkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBmcmFtZS0+dXJsKCk7Ci0gICAgcmV0dXJuIG5pbDsK
LX0KLQotLSAodm9pZClfbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
IGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCBmb3JVbnJlYWNoYWJsZVVSTDooTlNVUkwgKil1bnJl
YWNoYWJsZVVSTAotewotICAgIE5TRGF0YSAqZGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIF9wYWdlLT5sb2FkQWx0ZXJuYXRlSFRNTCh7
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwg
IlVURi04Il9zLCBiYXNlVVJMLCB1bnJlYWNoYWJsZVVSTCk7Ci19Ci0KLS0gKFdLTmF2aWdhdGlv
biAqKV9sb2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlw
ZSBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopY2hhcmFjdGVyRW5jb2RpbmdOYW1l
IGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGEKLXsKLSAgICBy
ZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIE1JTUVUeXBlLCBjaGFyYWN0ZXJFbmNvZGlu
Z05hbWUsIGJhc2VVUkwuYWJzb2x1dGVTdHJpbmcsIFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpj
cmVhdGUodXNlckRhdGEpLnB0cigpKSk7Ci19Ci0KLS0gKFdLTmF2aWdhdGlvbiAqKV9sb2FkUmVx
dWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzOihCT09M
KXNob3VsZE9wZW5FeHRlcm5hbFVSTHMKLXsKLSAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9h
ZFJlcXVlc3QocmVxdWVzdCwgc2hvdWxkT3BlbkV4dGVybmFsVVJMcyA/IFdlYkNvcmU6OlNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFsbG93IDogV2ViQ29yZTo6U2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpKTsKLX0KLQotLSAoTlNBcnJheSAq
KV9jZXJ0aWZpY2F0ZUNoYWluCi17Ci0gICAgaWYgKFdlYktpdDo6V2ViRnJhbWVQcm94eSogbWFp
bkZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5j
ZXJ0aWZpY2F0ZUluZm8oKSA/IChfX2JyaWRnZSBOU0FycmF5ICopbWFpbkZyYW1lLT5jZXJ0aWZp
Y2F0ZUluZm8oKS0+Y2VydGlmaWNhdGVJbmZvKCkuY2VydGlmaWNhdGVDaGFpbigpIDogbmlsOwot
Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNVUkwgKilfY29tbWl0dGVkVVJMCi17Ci0gICAg
cmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X3BhZ2UtPnBhZ2VMb2FkU3RhdGUo
KS51cmwoKV07Ci19Ci0KLS0gKE5TU3RyaW5nICopX01JTUVUeXBlCi17Ci0gICAgaWYgKF9wYWdl
LT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIF9wYWdlLT5tYWluRnJhbWUoKS0+bWltZVR5
cGUoKTsKLQotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TU3RyaW5nICopX3VzZXJBZ2VudAot
ewotICAgIHJldHVybiBfcGFnZS0+dXNlckFnZW50KCk7Ci19Ci0KLS0gKE5TU3RyaW5nICopX2Fw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudAotewotICAgIHJldHVybiBfcGFnZS0+YXBwbGljYXRp
b25OYW1lRm9yVXNlckFnZW50KCk7Ci19Ci0KLS0gKHZvaWQpX3NldEFwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudDooTlNTdHJpbmcgKilhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQKLXsKLSAg
ICBfcGFnZS0+c2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KGFwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudCk7Ci0gICAgX3BhZ2UtPnNldEFwcGxpY2F0aW9uTmFtZUZvckRlc2t0b3BVc2Vy
QWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKLX0KLQotLSAoTlNTdHJpbmcgKilf
Y3VzdG9tVXNlckFnZW50Ci17Ci0gICAgcmV0dXJuIHNlbGYuY3VzdG9tVXNlckFnZW50OwotfQot
Ci0tICh2b2lkKV9zZXRDdXN0b21Vc2VyQWdlbnQ6KE5TU3RyaW5nICopY3VzdG9tVXNlckFnZW50
Ci17Ci0gICAgc2VsZi5jdXN0b21Vc2VyQWdlbnQgPSBjdXN0b21Vc2VyQWdlbnQ7Ci19Ci0KLS0g
KHZvaWQpX3NldFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQ6KEJPT0wpdXNlckNvbnRlbnRF
eHRlbnNpb25zRW5hYmxlZAotewotICAgIC8vIFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBh
dGliaWxpdHkgd2l0aCBpT1MgOS4KLX0KLQotLSAoQk9PTClfdXNlckNvbnRlbnRFeHRlbnNpb25z
RW5hYmxlZAotewotICAgIC8vIFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkg
d2l0aCBpT1MgOS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLSAocGlkX3QpX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyCi17Ci0gICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgcmV0dXJuIF9wYWdlLT5wcm9jZXNzSWRlbnRpZmllcigpOwotfQotCi0tIChwaWRf
dClfcHJvdmlzaW9uYWxXZWJQcm9jZXNzSWRlbnRpZmllcgotewotICAgIGlmICghW3NlbGYgX2lz
VmFsaWRdKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGF1dG8qIHByb3Zpc2lvbmFsUGFnZSA9
IF9wYWdlLT5wcm92aXNpb25hbFBhZ2VQcm94eSgpOwotICAgIGlmICghcHJvdmlzaW9uYWxQYWdl
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBwcm92aXNpb25hbFBhZ2UtPnByb2Nl
c3MoKS5wcm9jZXNzSWRlbnRpZmllcigpOwotfQotCi0tICh2b2lkKV9raWxsV2ViQ29udGVudFBy
b2Nlc3MKLXsKLSAgICBpZiAoIVtzZWxmIF9pc1ZhbGlkXSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgX3BhZ2UtPnByb2Nlc3MoKS50ZXJtaW5hdGUoKTsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykK
LS0gKE5TVmlldyAqKV9zYWZlQnJvd3NpbmdXYXJuaW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5z
YWZlQnJvd3NpbmdXYXJuaW5nKCk7Ci19Ci0jZWxzZQotLSAoVUlWaWV3ICopX3NhZmVCcm93c2lu
Z1dhcm5pbmcKLXsKLSAgICByZXR1cm4gX3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCk7Ci19Ci0j
ZW5kaWYKLQotLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZFdpdGhvdXRDb250ZW50QmxvY2tlcnMK
LXsKLSAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlv
bjo6RGlzYWJsZUNvbnRlbnRCbG9ja2VycykpOwotfQotCi0tIChXS05hdmlnYXRpb24gKilfcmVs
b2FkRXhwaXJlZE9ubHkKLXsKLSAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+cmVsb2FkKFdlYkNv
cmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpKTsKLX0KLQotLSAodm9pZClfa2lsbFdlYkNv
bnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZQotewotICAgIFJlZjxXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eT4gcHJvdGVjdGVkUHJvY2Vzc1Byb3h5KF9wYWdlLT5wcm9jZXNzKCkpOwotICAgIHByb3Rl
Y3RlZFByb2Nlc3NQcm94eS0+cmVxdWVzdFRlcm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rlcm1p
bmF0aW9uUmVhc29uOjpSZXF1ZXN0ZWRCeUNsaWVudCk7Ci0KLSAgICBpZiAoYXV0byogcHJvdmlz
aW9uYWxQYWdlUHJveHkgPSBfcGFnZS0+cHJvdmlzaW9uYWxQYWdlUHJveHkoKSkgewotICAgICAg
ICBSZWY8V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk+IHByb3RlY3RlZFByb2Nlc3NQcm94eShwcm92
aXNpb25hbFBhZ2VQcm94eS0+cHJvY2VzcygpKTsKLSAgICAgICAgcHJvdGVjdGVkUHJvY2Vzc1By
b3h5LT5yZXF1ZXN0VGVybWluYXRpb24oV2ViS2l0OjpQcm9jZXNzVGVybWluYXRpb25SZWFzb246
OlJlcXVlc3RlZEJ5Q2xpZW50KTsKLSAgICB9Ci19Ci0KLS0gKENHUmVjdClfY29udmVydFJlY3RG
cm9tUm9vdFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMK
LXsKLSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIGVhc2llciB0byB0YWxrIGFib3V0IFdLV2Vi
VmlldyBjb29yZGluYXRlcyBpbiBhIGNvbnNpc3RlbnQgYW5kIGNyb3NzLXBsYXRmb3JtIHdheS4K
LSAgICAvLyBDdXJyZW50bHksIG5laXRoZXIgInJvb3QgdmlldyIgbm9yICJ3aW5kb3ciIG1lYW4g
IldLV2ViVmlldyBjb29yZGluYXRlcyIgb24gYm90aCBwbGF0Zm9ybXMuCi0gICAgLy8gU2VlIGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE5MzY0OSBhbmQgcmVsYXRlZCBidWdzLgotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMgZnJvbVZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSNlbHNlCi0gICAgcmV0
dXJuIHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0jZW5kaWYKLX0KLQotLSAoQ0dSZWN0KV9j
b252ZXJ0UmVjdFRvUm9vdFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJlY3RJbldlYlZpZXdDb29y
ZGluYXRlcwotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIFtzZWxmIGNv
bnZlcnRSZWN0OnJlY3RJbldlYlZpZXdDb29yZGluYXRlcyB0b1ZpZXc6X2NvbnRlbnRWaWV3Lmdl
dCgpXTsKLSNlbHNlCi0gICAgcmV0dXJuIHJlY3RJbldlYlZpZXdDb29yZGluYXRlczsKLSNlbmRp
ZgotfQotCi0tICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdCly
ZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJh
eTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3
XSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihAW10pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBDR1JlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IFtz
ZWxmIF9jb252ZXJ0UmVjdFRvUm9vdFZpZXdDb29yZGluYXRlczpyZWN0SW5XZWJWaWV3Q29vcmRp
bmF0ZXNdOwotICAgIGF1dG8gd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYp
OwotICAgIF9wYWdlLT50ZXh0SW5wdXRDb250ZXh0c0luUmVjdChyZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLCBbd2Vha1NlbGYsIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkVsZW1lbnRDb250
ZXh0PiYgY29udGV4dHMpIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBlbGVt
ZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpj
b250ZXh0cy5zaXplKCldKTsKLQotICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5n
ZXQoKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZXh0IDogY29udGV4dHMpIHsKLSAg
ICAgICAgICAgIFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0IGNvbnRleHRXaXRoV2ViVmlld0JvdW5k
aW5nUmVjdCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICBjb250ZXh0V2l0aFdlYlZpZXdCb3VuZGlu
Z1JlY3QuYm91bmRpbmdSZWN0ID0gW3N0cm9uZ1NlbGYgX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3
Q29vcmRpbmF0ZXM6Y29udGV4dC5ib3VuZGluZ1JlY3RdOwotICAgICAgICAgICAgW2VsZW1lbnRz
IGFkZE9iamVjdDphZG9wdE5TKFtbX1dLVGV4dElucHV0Q29udGV4dCBhbGxvY10gX2luaXRXaXRo
VGV4dElucHV0Q29udGV4dDpjb250ZXh0V2l0aFdlYlZpZXdCb3VuZGluZ1JlY3RdKS5nZXQoKV07
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKGVsZW1lbnRz
LmdldCgpKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClfZm9jdXNUZXh0SW5wdXRDb250ZXh0Oihf
V0tUZXh0SW5wdXRDb250ZXh0ICopdGV4dElucHV0Q29udGV4dCBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgotewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoTk8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
LSAgICBhdXRvIHdlYkNvbnRleHQgPSBbdGV4dElucHV0Q29udGV4dCBfdGV4dElucHV0Q29udGV4
dF07Ci0gICAgaWYgKHdlYkNvbnRleHQud2ViUGFnZUlkZW50aWZpZXIgIT0gX3BhZ2UtPndlYlBh
Z2VJRCgpKQotICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNl
cHRpb24gZm9ybWF0OkAiVGhlIHByb3ZpZGVkIF9XS1RleHRJbnB1dENvbnRleHQgd2FzIG5vdCBj
cmVhdGVkIGJ5IHRoaXMgV0tXZWJWaWV3LiJdOwotCi0gICAgW3NlbGYgYmVjb21lRmlyc3RSZXNw
b25kZXJdOwotCi0gICAgX3BhZ2UtPmZvY3VzVGV4dElucHV0Q29udGV4dCh3ZWJDb250ZXh0LCBb
Y2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildKGJvb2wgc3VjY2VzcykgewotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHN1
Y2Nlc3MpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV90YWtlUERGU25hcHNob3RXaXRoQ29uZmln
dXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24g
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyCi17Ci0gICAgV0tQREZDb25maWd1cmF0aW9uICpwZGZDb25maWd1cmF0aW9uID0g
bmlsOwotICAgIGlmIChzbmFwc2hvdENvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgcGRmQ29uZmln
dXJhdGlvbiA9IFtbW1dLUERGQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OwotICAgICAgICBwZGZDb25maWd1cmF0aW9uLnJlY3QgPSBzbmFwc2hvdENvbmZpZ3VyYXRpb24u
cmVjdDsKLSAgICB9Ci0KLSAgICBbc2VsZiBjcmVhdGVQREZXaXRoQ29uZmlndXJhdGlvbjpwZGZD
b25maWd1cmF0aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLX0KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS0gKFVJVGV4dElucHV0QXNzaXN0YW50SXRlbSAq
KWlucHV0QXNzaXN0YW50SXRlbQotewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlucHV0QXNz
aXN0YW50SXRlbUZvcldlYlZpZXddOwotfQotCi0jZW5kaWYKLQotLSAoTlNEYXRhICopX3Nlc3Np
b25TdGF0ZURhdGEKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHVzZSB0aGUgbGVn
YWN5IHNlc3Npb24gc3RhdGUgZW5jb2Rlci4KLSAgICByZXR1cm4gd3JhcHBlcihXZWJLaXQ6OmVu
Y29kZUxlZ2FjeVNlc3Npb25TdGF0ZShfcGFnZS0+c2Vzc2lvblN0YXRlKCkpKTsKLX0KLQotLSAo
X1dLU2Vzc2lvblN0YXRlICopX3Nlc3Npb25TdGF0ZQotewotICAgIHJldHVybiBbW1tfV0tTZXNz
aW9uU3RhdGUgYWxsb2NdIF9pbml0V2l0aFNlc3Npb25TdGF0ZTpfcGFnZS0+c2Vzc2lvblN0YXRl
KCldIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoX1dLU2Vzc2lvblN0YXRlICopX3Nlc3Npb25TdGF0
ZVdpdGhGaWx0ZXI6KEJPT0wgKF4pKFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqaXRlbSkpZmlsdGVy
Ci17Ci0gICAgV2ViS2l0OjpTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlID0gX3BhZ2UtPnNlc3Np
b25TdGF0ZShbZmlsdGVyXShXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pIHsK
LSAgICAgICAgaWYgKCFmaWx0ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICByZXR1cm4gKGJvb2wpZmlsdGVyKHdyYXBwZXIoaXRlbSkpOwotICAgIH0pOwotCi0gICAgcmV0
dXJuIFtbW19XS1Nlc3Npb25TdGF0ZSBhbGxvY10gX2luaXRXaXRoU2Vzc2lvblN0YXRlOnNlc3Np
b25TdGF0ZV0gYXV0b3JlbGVhc2VdOwotfQotCi0tICh2b2lkKV9yZXN0b3JlRnJvbVNlc3Npb25T
dGF0ZURhdGE6KE5TRGF0YSAqKXNlc3Npb25TdGF0ZURhdGEKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgbm90IHVzZSB0aGUgbGVnYWN5IHNlc3Npb24gc3RhdGUgZGVjb2Rlci4KLSAgICBX
ZWJLaXQ6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGU7Ci0gICAgaWYgKCFXZWJLaXQ6OmRlY29k
ZUxlZ2FjeVNlc3Npb25TdGF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc2Vzc2lvblN0
YXRlRGF0YS5ieXRlcyksIHNlc3Npb25TdGF0ZURhdGEubGVuZ3RoLCBzZXNzaW9uU3RhdGUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBfcGFnZS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV1RG
TW92ZShzZXNzaW9uU3RhdGUpLCB0cnVlKTsKLX0KLQotLSAoV0tOYXZpZ2F0aW9uICopX3Jlc3Rv
cmVTZXNzaW9uU3RhdGU6KF9XS1Nlc3Npb25TdGF0ZSAqKXNlc3Npb25TdGF0ZSBhbmROYXZpZ2F0
ZTooQk9PTCluYXZpZ2F0ZQotewotICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5yZXN0b3JlRnJv
bVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUgPyBzZXNzaW9uU3RhdGUtPl9zZXNzaW9uU3RhdGUg
OiBXZWJLaXQ6OlNlc3Npb25TdGF0ZSB7IH0sIG5hdmlnYXRlKSk7Ci19Ci0KLS0gKHZvaWQpX2Ns
b3NlCi17Ci0gICAgX3BhZ2UtPmNsb3NlKCk7Ci19Ci0KLS0gKF9XS0F0dGFjaG1lbnQgKilfaW5z
ZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSBjb250ZW50VHlw
ZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBkYXRhOihOU0RhdGEgKilkYXRhIG9wdGlvbnM6KF9X
S0F0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbjoodm9pZCheKShC
T09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9wdGlv
bnMpOwotICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxv
Y10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdKTsKLSAgICBpZiAoZmlsZW5hbWUp
Ci0gICAgICAgIFtmaWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07Ci0g
ICAgcmV0dXJuIFtzZWxmIF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFw
cGVyLmdldCgpIGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNvbXBsZXRpb246Y29tcGxldGlvbkhh
bmRsZXJdOwotfQotCi0tIChfV0tBdHRhY2htZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmls
ZVdyYXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlciBjb250ZW50VHlwZTooTlNTdHJp
bmcgKiljb250ZW50VHlwZSBvcHRpb25zOihfV0tBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgKilv
cHRpb25zIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxl
cgotewotICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKLSAgICByZXR1cm4gW3NlbGYgX2luc2Vy
dEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIgY29udGVudFR5cGU6Y29udGVu
dFR5cGUgY29tcGxldGlvbjpjb21wbGV0aW9uSGFuZGxlcl07Ci19Ci0KLS0gKF9XS0F0dGFjaG1l
bnQgKilfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjooTlNGaWxlV3JhcHBlciAqKWZp
bGVXcmFwcGVyIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRlbnRUeXBlIGNvbXBsZXRpb246
KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgotewotI2lmIEVOQUJMRShB
VFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAgYXV0byBpZGVudGlmaWVyID0gY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpOwotICAgIGF1dG8gYXR0YWNobWVudCA9IEFQSTo6QXR0YWNobWVudDo6Y3Jl
YXRlKGlkZW50aWZpZXIsICpfcGFnZSk7Ci0gICAgYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXJB
bmRVcGRhdGVDb250ZW50VHlwZShmaWxlV3JhcHBlciwgY29udGVudFR5cGUpOwotICAgIF9wYWdl
LT5pbnNlcnRBdHRhY2htZW50KGF0dGFjaG1lbnQuY29weVJlZigpLCBbY2FwdHVyZWRIYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYktpdDo6Q2FsbGJhY2tCYXNl
OjpFcnJvciBlcnJvcikgewotICAgICAgICBpZiAoY2FwdHVyZWRIYW5kbGVyKQotICAgICAgICAg
ICAgY2FwdHVyZWRIYW5kbGVyKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6
Tm9uZSk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gd3JhcHBlcihhdHRhY2htZW50KTsKLSNlbHNl
Ci0gICAgcmV0dXJuIG5pbDsKLSNlbmRpZgotfQotCi0tIChfV0tBdHRhY2htZW50ICopX2F0dGFj
aG1lbnRGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKLXsKLSNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQotICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBfcGFnZS0+YXR0
YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiB3cmFwcGVy
KGF0dGFjaG1lbnQpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClfc2lt
dWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZVdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6
KGRvdWJsZSliZXRhIGdhbW1hOihkb3VibGUpZ2FtbWEKLXsKLSAgICBfcGFnZS0+c2ltdWxhdGVE
ZXZpY2VPcmllbnRhdGlvbkNoYW5nZShhbHBoYSwgYmV0YSwgZ2FtbWEpOwotfQotCi0rIChCT09M
KV9oYW5kbGVzU2FmZUJyb3dzaW5nCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS0gKHZvaWQp
X3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5p
bmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRh
aWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCi17
Ci0gICAgLy8gRklYTUU6IEFkb3B0IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkwgYW5k
IHJlbW92ZSB0aGlzIGZ1bmN0aW9uLgotICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2Fybmlu
Z1dpdGhVUkw6bmlsIHRpdGxlOnRpdGxlIHdhcm5pbmc6d2FybmluZyBkZXRhaWxzOmRldGFpbHMg
Y29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotfQotCi0tICh2b2lkKV9zaG93
U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6KE5TVVJMICopdXJsIHRpdGxlOihOU1N0cmluZyAq
KXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICopd2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRT
dHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRp
b25IYW5kbGVyCi17Ci0gICAgYXV0byBzYWZlQnJvd3NpbmdXYXJuaW5nID0gV2ViS2l0OjpTYWZl
QnJvd3NpbmdXYXJuaW5nOjpjcmVhdGUodXJsLCB0aXRsZSwgd2FybmluZywgZGV0YWlscyk7Ci0g
ICAgYXV0byB3cmFwcGVyID0gW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFVSTD4m
JiB2YXJpYW50KSB7Ci0gICAgICAgIHN3aXRjaE9uKHZhcmlhbnQsIFsmXSAoV2ViS2l0OjpDb250
aW51ZVVuc2FmZUxvYWQgY29udGludWVVbnNhZmVMb2FkKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGNvbnRpbnVlVW5zYWZlTG9hZCkgewotICAgICAgICAgICAgY2FzZSBXZWJLaXQ6OkNvbnRpbnVl
VW5zYWZlTG9hZDo6WWVzOgotICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihZRVMpOwotICAgICAgICAgICAgY2FzZSBXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6Tm86
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSwgWyZdIChVUkwpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTk8pOwotICAgICAgICB9KTsK
LSAgICB9OwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBfaW1wbC0+c2hvd1NhZmVCcm93c2luZ1dh
cm5pbmcoc2FmZUJyb3dzaW5nV2FybmluZywgV1RGTW92ZSh3cmFwcGVyKSk7Ci0jZWxzZQotICAg
IFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZlQnJvd3NpbmdXYXJuaW5nIGNvbXBs
ZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOwotI2VuZGlmCi19Ci0KLSsgKE5TVVJMICop
X2NvbmZpcm1NYWx3YXJlU2VudGluZWwKLXsKLSAgICByZXR1cm4gV2ViS2l0OjpTYWZlQnJvd3Np
bmdXYXJuaW5nOjpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCk7Ci19Ci0KLSsgKE5TVVJMICopX3Zp
c2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6U2FmZUJyb3dz
aW5nV2FybmluZzo6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKTsKLX0KLQotLSAodm9pZClf
aXNKSVRFbmFibGVkOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX3Bh
Z2UtPmlzSklURW5hYmxlZChbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoYm9vbCBlbmFibGVkKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGVuYWJsZWQpOwotICAgIH0pOwotfQotCi0tICh2b2lkKV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRo
b3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBb
c2VsZiBfZXZhbHVhdGVKYXZhU2NyaXB0OmphdmFTY3JpcHRTdHJpbmcgZm9yY2VVc2VyR2VzdHVy
ZTpOTyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci19Ci0KLS0gKHZvaWQp
X3VwZGF0ZVdlYnNpdGVQb2xpY2llczooX1dLV2Vic2l0ZVBvbGljaWVzICopd2Vic2l0ZVBvbGlj
aWVzCi17Ci0gICAgYXV0byBkYXRhID0gd2Vic2l0ZVBvbGljaWVzLndlYnBhZ2VQcmVmZXJlbmNl
cy0+X3dlYnNpdGVQb2xpY2llcy0+ZGF0YSgpOwotICAgIGlmIChkYXRhLndlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzKQotICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1l
bnRFeGNlcHRpb24gZm9ybWF0OkAiVXBkYXRpbmcgV0tXZWJzaXRlRGF0YVN0b3JlIGlzIG9ubHkg
c3VwcG9ydGVkIGR1cmluZyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLiJdOwotICAg
IF9wYWdlLT51cGRhdGVXZWJzaXRlUG9saWNpZXMoV1RGTW92ZShkYXRhKSk7Ci19Ci0KLS0gKEJP
T0wpX2FsbG93c1JlbW90ZUluc3BlY3Rpb24KLXsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKLSAgICByZXR1cm4gX3BhZ2UtPmFsbG93c1JlbW90ZUluc3BlY3Rpb24oKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIE5POwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3NldEFsbG93c1JlbW90ZUluc3Bl
Y3Rpb246KEJPT0wpYWxsb3cKLXsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBf
cGFnZS0+c2V0QWxsb3dzUmVtb3RlSW5zcGVjdGlvbihhbGxvdyk7Ci0jZW5kaWYKLX0KLQotLSAo
TlNTdHJpbmcgKilfcmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZQotewotI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQotICAgIHJldHVybiBfcGFnZS0+cmVtb3RlSW5zcGVjdGlvbk5hbWVP
dmVycmlkZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gbmlsOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQp
X3NldFJlbW90ZUluc3BlY3Rpb25OYW1lT3ZlcnJpZGU6KE5TU3RyaW5nICopbmFtZQotewotI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIF9wYWdlLT5zZXRSZW1vdGVJbnNwZWN0aW9u
TmFtZU92ZXJyaWRlKG5hbWUpOwotI2VuZGlmCi19Ci0KLS0gKEJPT0wpX2FkZHNWaXNpdGVkTGlu
a3MKLXsKLSAgICByZXR1cm4gX3BhZ2UtPmFkZHNWaXNpdGVkTGlua3MoKTsKLX0KLQotLSAodm9p
ZClfc2V0QWRkc1Zpc2l0ZWRMaW5rczooQk9PTClhZGRzVmlzaXRlZExpbmtzCi17Ci0gICAgX3Bh
Z2UtPnNldEFkZHNWaXNpdGVkTGlua3MoYWRkc1Zpc2l0ZWRMaW5rcyk7Ci19Ci0KLS0gKEJPT0wp
X25ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MKLXsKLSAgICByZXR1cm4gX3BhZ2UtPnBhZ2VMb2Fk
U3RhdGUoKS5uZXR3b3JrUmVxdWVzdHNJblByb2dyZXNzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
T3B0aW9uU2V0PFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZT4gbGF5b3V0TWlsZXN0b25lcyhfV0tS
ZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyBldmVudHMpCi17Ci0gICAgT3B0aW9uU2V0PFdlYkNvcmU6
OkxheW91dE1pbGVzdG9uZT4gbWlsZXN0b25lczsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5k
ZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXQpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdl
YkNvcmU6OkRpZEZpcnN0TGF5b3V0KTsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KQotICAgICAgICBtaWxlc3Rv
bmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOwotCi0gICAg
aWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50V2l0aFNpZ25p
ZmljYW50QXJlYSkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkSGl0UmVsZXZh
bnRSZXBhaW50ZWRPYmplY3RzQXJlYVRocmVzaG9sZCk7Ci0KLSAgICBpZiAoZXZlbnRzICYgX1dL
UmVuZGVyaW5nUHJvZ3Jlc3NFdmVudFJlYWNoZWRTZXNzaW9uUmVzdG9yYXRpb25SZW5kZXJUcmVl
U2l6ZVRocmVzaG9sZCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6UmVhY2hlZFNl
c3Npb25SZXN0b3JhdGlvblJlbmRlclRyZWVTaXplVGhyZXNob2xkKTsKLQotICAgIGlmIChldmVu
dHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXRBZnRlclN1cHByZXNzZWRJ
bmNyZW1lbnRhbFJlbmRlcmluZykKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlk
Rmlyc3RMYXlvdXRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZyk7Ci0KLSAgICBp
ZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0UGFpbnRBZnRlclN1cHBy
ZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZykKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29y
ZTo6RGlkRmlyc3RQYWludEFmdGVyU3VwcHJlc3NlZEluY3JlbWVudGFsUmVuZGVyaW5nKTsKLQot
ICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50RGlkUmVuZGVyU2lnbmlm
aWNhbnRBbW91bnRPZlRleHQpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZFJl
bmRlclNpZ25pZmljYW50QW1vdW50T2ZUZXh0KTsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5k
ZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RNZWFuaW5nZnVsUGFpbnQpCi0gICAgICAgIG1pbGVzdG9u
ZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TWVhbmluZ2Z1bFBhaW50KTsKLQotICAgIHJldHVybiBt
aWxlc3RvbmVzOwotfQotCi0tICh2b2lkKV9zZXRPYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZl
bnRzOihfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylvYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNz
RXZlbnRzCi17Ci0gICAgX29ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMgPSBvYnNlcnZl
ZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzOwotICAgIF9wYWdlLT5saXN0ZW5Gb3JMYXlvdXRNaWxl
c3RvbmVzKGxheW91dE1pbGVzdG9uZXMob2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cykp
OwotfQotCi0tICh2b2lkKV9nZXRNYWluUmVzb3VyY2VEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgotewotICAg
IGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLQotICAg
IF9wYWdlLT5nZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShfcGFnZS0+bWFpbkZyYW1lKCksIFto
YW5kbGVyXShBUEk6OkRhdGEqIGRhdGEsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJv
cikgewotICAgICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXJCbG9jaykoTlNEYXRhICosIE5T
RXJyb3IgKikgPSAodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsK
LSAgICAgICAgaWYgKGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkg
ewotICAgICAgICAgICAgLy8gRklYTUU6IFBpcGUgYSBwcm9wZXIgZXJyb3IgaW4gZnJvbSB0aGUg
V2ViUGFnZVByb3h5LgotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayhuaWwsIFtO
U0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6c3RhdGljX2Nhc3Q8aW50
PihlcnJvcikgdXNlckluZm86bmlsXSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXJCbG9jayh3cmFwcGVyKCpkYXRhKSwgbmlsKTsKLSAgICB9KTsKLX0KLQot
LSAodm9pZClfZ2V0V2ViQXJjaGl2ZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgW3NlbGYgY3Jl
YXRlV2ViQXJjaGl2ZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJd
OwotfQotCi0tICh2b2lkKV9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShOU1N0cmluZyAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0g
ICAgYXV0byBoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAg
IF9wYWdlLT5nZXRDb250ZW50c0FzU3RyaW5nKFtoYW5kbGVyXShTdHJpbmcgc3RyaW5nLCBXZWJL
aXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yICE9IFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IFBpcGUgYSBwcm9wZXIgZXJyb3IgaW4gZnJvbSB0aGUgV2ViUGFnZVByb3h5LgotICAgICAgICAg
ICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNv
ZGU6c3RhdGljX2Nhc3Q8aW50PihlcnJvcikgdXNlckluZm86bmlsXSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgaGFuZGxlcihzdHJpbmcsIG5pbCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZv
aWQpX2dldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgTlNEaWN0aW9uYXJ5PE5TQXR0cmlidXRlZFN0
cmluZ0RvY3VtZW50QXR0cmlidXRlS2V5LCBpZD4gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFu
ZGxlcgotewotICAgIF9wYWdlLT5nZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhbaGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIGF0dHJpYnV0ZWRTdHJp
bmcpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nKQotICAgICAgICAgICAg
aGFuZGxlcihbW2F0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nLmdldCgpIHJldGFpbl0gYXV0b3JlbGVh
c2VdLCBbW2F0dHJpYnV0ZWRTdHJpbmcuZG9jdW1lbnRBdHRyaWJ1dGVzLmdldCgpIHJldGFpbl0g
YXV0b3JlbGVhc2VdLCBuaWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVyKG5p
bCwgbmlsLCBjcmVhdGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKS5nZXQoKSk7Ci0gICAgfSk7Ci19
Ci0KLS0gKHZvaWQpX2dldEFwcGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QgKikpY29tcGxldGlvbkhhbmRsZXIKLXsK
LSNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCi0gICAgX3BhZ2UtPmdldEFwcGxpY2F0
aW9uTWFuaWZlc3QoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0oY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdD4mIG1h
bmlmZXN0LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKLSAgICAgICAgVU5V
U0VEX1BBUkFNKGVycm9yKTsKLSAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAg
ICAgICAgICBpZiAobWFuaWZlc3QpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGFwaU1hbmlmZXN0
ID0gQVBJOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpjcmVhdGUoKm1hbmlmZXN0KTsKLSAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFwcGVyKGFwaU1hbmlmZXN0KSk7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwotICAg
ICAgICB9Ci0gICAgfSk7Ci0jZWxzZQotICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSNlbmRpZgotfQotCi0tIChfV0tQYWdpbmF0aW9u
TW9kZSlfcGFnaW5hdGlvbk1vZGUKLXsKLSAgICBzd2l0Y2ggKF9wYWdlLT5wYWdpbmF0aW9uTW9k
ZSgpKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDoKLSAgICAg
ICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7Ci0gICAgY2FzZSBXZWJDb3Jl
OjpQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDoKLSAgICAgICAgcmV0dXJuIF9XS1Bh
Z2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ7Ci0gICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpS
aWdodFRvTGVmdFBhZ2luYXRlZDoKLSAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlUmln
aHRUb0xlZnQ7Ci0gICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2lu
YXRlZDoKLSAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b207Ci0gICAg
Y2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDoKLSAgICAgICAg
cmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A7Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7
Ci19Ci0KLS0gKHZvaWQpX3NldFBhZ2luYXRpb25Nb2RlOihfV0tQYWdpbmF0aW9uTW9kZSlwYWdp
bmF0aW9uTW9kZQotewotICAgIFdlYkNvcmU6OlBhZ2luYXRpb246Ok1vZGUgbW9kZTsKLSAgICBz
d2l0Y2ggKHBhZ2luYXRpb25Nb2RlKSB7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVVucGFn
aW5hdGVkOgotICAgICAgICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDoK
LSAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVk
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6
Ci0gICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRl
ZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9t
OgotICAgICAgICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdpbmF0
ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1Rv
cDoKLSAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5h
dGVkOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgX3BhZ2UtPnNldFBhZ2luYXRpb25Nb2RlKG1vZGUpOwotfQotCi0tIChCT09MKV9w
YWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdpbmF0
aW9uQmVoYXZlc0xpa2VDb2x1bW5zKCk7Ci19Ci0KLS0gKHZvaWQpX3NldFBhZ2luYXRpb25CZWhh
dmVzTGlrZUNvbHVtbnM6KEJPT0wpYmVoYXZlc0xpa2VDb2x1bW5zCi17Ci0gICAgX3BhZ2UtPnNl
dFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKTsKLX0KLQot
LSAoQ0dGbG9hdClfcGFnZUxlbmd0aAotewotICAgIHJldHVybiBfcGFnZS0+cGFnZUxlbmd0aCgp
OwotfQotCi0tICh2b2lkKV9zZXRQYWdlTGVuZ3RoOihDR0Zsb2F0KXBhZ2VMZW5ndGgKLXsKLSAg
ICBfcGFnZS0+c2V0UGFnZUxlbmd0aChwYWdlTGVuZ3RoKTsKLX0KLQotLSAoQ0dGbG9hdClfZ2Fw
QmV0d2VlblBhZ2VzCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5nYXBCZXR3ZWVuUGFnZXMoKTsKLX0K
LQotLSAodm9pZClfc2V0R2FwQmV0d2VlblBhZ2VzOihDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwot
ewotICAgIF9wYWdlLT5zZXRHYXBCZXR3ZWVuUGFnZXMoZ2FwQmV0d2VlblBhZ2VzKTsKLX0KLQot
LSAoQk9PTClfcGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZAotewotICAgIHJldHVybiBfcGFnZS0+
cGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZCgpOwotfQotCi0tICh2b2lkKV9zZXRQYWdpbmF0aW9u
TGluZUdyaWRFbmFibGVkOihCT09MKWxpbmVHcmlkRW5hYmxlZAotewotICAgIF9wYWdlLT5zZXRQ
YWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKGxpbmVHcmlkRW5hYmxlZCk7Ci19Ci0KLS0gKE5TVUlu
dGVnZXIpX3BhZ2VDb3VudAotewotICAgIHJldHVybiBfcGFnZS0+cGFnZUNvdW50KCk7Ci19Ci0K
LS0gKEJPT0wpX3N1cHBvcnRzVGV4dFpvb20KLXsKLSAgICByZXR1cm4gX3BhZ2UtPnN1cHBvcnRz
VGV4dFpvb20oKTsKLX0KLQotLSAoZG91YmxlKV90ZXh0Wm9vbUZhY3RvcgotewotICAgIHJldHVy
biBfcGFnZS0+dGV4dFpvb21GYWN0b3IoKTsKLX0KLQotLSAodm9pZClfc2V0VGV4dFpvb21GYWN0
b3I6KGRvdWJsZSl6b29tRmFjdG9yCi17Ci0gICAgX3BhZ2UtPnNldFRleHRab29tRmFjdG9yKHpv
b21GYWN0b3IpOwotfQotCi0tICh2b2lkKXNldFBhZ2Vab29tOihDR0Zsb2F0KXBhZ2Vab29tCi17
Ci0gICAgX3BhZ2UtPnNldFBhZ2Vab29tRmFjdG9yKHBhZ2Vab29tKTsKLX0KLQotLSAoQ0dGbG9h
dClwYWdlWm9vbQotewotICAgIHJldHVybiBfcGFnZS0+cGFnZVpvb21GYWN0b3IoKTsKLX0KLQot
LSAoZG91YmxlKV9wYWdlWm9vbUZhY3RvcgotewotICAgIHJldHVybiBbc2VsZiBwYWdlWm9vbV07
Ci19Ci0KLS0gKHZvaWQpX3NldFBhZ2Vab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3Rvcgotewot
ICAgIFtzZWxmIHNldFBhZ2Vab29tOnpvb21GYWN0b3JdOwotfQotCi0tIChpZCA8X1dLRGlhZ25v
c3RpY0xvZ2dpbmdEZWxlZ2F0ZT4pX2RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKLXsKLSAgICBh
dXRvKiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCA9IF9wYWdlLT5kaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCgpOwotICAgIGlmICghZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkuZGVsZWdhdGUoKS5hdXRvcmVsZWFz
ZSgpOwotfQotCi0tICh2b2lkKV9zZXREaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlOihpZDxfV0tE
aWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlPilkaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlCi17Ci0g
ICAgYXV0byogZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgPSBfcGFnZS0+ZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQoKTsKLSAgICBpZiAoIWRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzdGF0aWNfY2FzdDxXZWJLaXQ6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50
Jj4oKmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KS5zZXREZWxlZ2F0ZShkaWFnbm9zdGljTG9nZ2lu
Z0RlbGVnYXRlKTsKLX0KLQotLSAoaWQgPF9XS0ZpbmREZWxlZ2F0ZT4pX2ZpbmREZWxlZ2F0ZQot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+Zmlu
ZENsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1dG9yZWxlYXNlKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEZp
bmREZWxlZ2F0ZTooaWQ8X1dLRmluZERlbGVnYXRlPilmaW5kRGVsZWdhdGUKLXsKLSAgICBzdGF0
aWNfY2FzdDxXZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5zZXREZWxl
Z2F0ZShmaW5kRGVsZWdhdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIFdlYktpdDo6RmluZE9wdGlv
bnMgdG9GaW5kT3B0aW9ucyhfV0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25zKQotewotICAgIHVu
c2lnbmVkIGZpbmRPcHRpb25zID0gMDsKLQotICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmlu
ZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6
RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tG
aW5kT3B0aW9uc0F0V29yZFN0YXJ0cykKLSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpG
aW5kT3B0aW9uc0F0V29yZFN0YXJ0czsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRP
cHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQpCi0gICAgICAgIGZpbmRPcHRpb25z
IHw9IFdlYktpdDo6RmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKLSAg
ICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zQmFja3dhcmRzKQotICAgICAgICBm
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQmFja3dhcmRzOwotICAgIGlmICh3a0Zp
bmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kKQotICAgICAgICBmaW5kT3B0aW9u
cyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zV3JhcEFyb3VuZDsKLSAgICBpZiAod2tGaW5kT3B0aW9u
cyAmIF9XS0ZpbmRPcHRpb25zU2hvd092ZXJsYXkpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdl
YktpdDo6RmluZE9wdGlvbnNTaG93T3ZlcmxheTsKLSAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9X
S0ZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdl
YktpdDo6RmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcjsKLSAgICBpZiAod2tGaW5kT3B0aW9u
cyAmIF9XS0ZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodCkKLSAgICAgICAgZmluZE9wdGlvbnMgfD0g
V2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQ7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMg
JiBfV0tGaW5kT3B0aW9uc05vSW5kZXhDaGFuZ2UpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9IFdl
YktpdDo6RmluZE9wdGlvbnNOb0luZGV4Q2hhbmdlOwotICAgIGlmICh3a0ZpbmRPcHRpb25zICYg
X1dLRmluZE9wdGlvbnNEZXRlcm1pbmVNYXRjaEluZGV4KQotICAgICAgICBmaW5kT3B0aW9ucyB8
PSBXZWJLaXQ6OkZpbmRPcHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleDsKLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRPcHRpb25zPihmaW5kT3B0aW9ucyk7Ci19Ci0KLS0gKHZv
aWQpX2NvdW50U3RyaW5nTWF0Y2hlczooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooX1dLRmlu
ZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudAotewotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKF9jdXN0b21Db250ZW50VmlldykgewotICAgICAg
ICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9jb3VudFN0cmluZ01hdGNoZXM6c3RyaW5nIG9wdGlv
bnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLSAgICBfcGFnZS0+Y291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgdG9GaW5kT3B0aW9u
cyhvcHRpb25zKSwgbWF4Q291bnQpOwotfQotCi0tICh2b2lkKV9maW5kU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZyBvcHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJ
bnRlZ2VyKW1heENvdW50Ci17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBXaGls
ZSBBcHBLaXQgY29udGFpbnMgbG9naWMgaW4gTlNCYXJUZXh0RmluZGVyIHRvIGF1dG9tYXRpY2Fs
bHkgdXBkYXRlIHRoZSBmaW5kIHBhc3RlYm9hcmQKLSAgICAvLyB3aGVuIHRoZSBmaW5kIHN0cmlu
ZyBjaGFuZ2VzLCB0aGlzIChhbG9uZyB3aXRoIHRoZSBmaW5kIHBhc3RlYm9hcmQgaXRzZWxmKSBh
cmUgYm90aCBtaXNzaW5nCi0gICAgLy8gZnJvbSBpT1M7IHRodXMsIG9uIGlPUywgd2UgdXBkYXRl
IHRoZSBjdXJyZW50IGZpbmQtaW4tcGFnZSBzdHJpbmcgaGVyZS4KLSAgICBXZWJLaXQ6OnVwZGF0
ZVN0cmluZ0ZvckZpbmQoc3RyaW5nKTsKLQotICAgIGlmIChfY3VzdG9tQ29udGVudFZpZXcpIHsK
LSAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfZmluZFN0cmluZzpzdHJpbmcgb3B0aW9u
czpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotICAgIF9wYWdlLT5maW5kU3RyaW5nKHN0cmluZywgdG9GaW5kT3B0aW9ucyhvcHRpb25z
KSwgbWF4Q291bnQpOwotfQotCi0tICh2b2lkKV9oaWRlRmluZFVJCi17Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7Ci0gICAgICAgIFtfY3Vz
dG9tQ29udGVudFZpZXcgd2ViX2hpZGVGaW5kVUldOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2VuZGlmCi0gICAgX3BhZ2UtPmhpZGVGaW5kVUkoKTsKLX0KLQotLSAodm9pZClfc2F2ZUJhY2tG
b3J3YXJkU25hcHNob3RGb3JJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCi17Ci0g
ICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47Ci0gICAgX3BhZ2UtPnJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdChpdGVtLl9pdGVtKTsKLX0KLQotLSAoaWQgPF9XS0lucHV0RGVsZWdhdGU+KV9p
bnB1dERlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9pbnB1dERlbGVnYXRlLmdldEF1dG9yZWxlYXNl
ZCgpOwotfQotCi0tICh2b2lkKV9zZXRJbnB1dERlbGVnYXRlOihpZCA8X1dLSW5wdXREZWxlZ2F0
ZT4paW5wdXREZWxlZ2F0ZQotewotICAgIF9pbnB1dERlbGVnYXRlID0gaW5wdXREZWxlZ2F0ZTsK
LQotICAgIGNsYXNzIEZvcm1DbGllbnQgOiBwdWJsaWMgQVBJOjpGb3JtQ2xpZW50IHsKLSAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNp
dCBGb3JtQ2xpZW50KFdLV2ViVmlldyAqd2ViVmlldykKLSAgICAgICAgICAgIDogbV93ZWJWaWV3
KHdlYlZpZXcpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgfkZvcm1D
bGllbnQoKSB7IH0KLQotICAgICAgICB2b2lkIHdpbGxTdWJtaXRGb3JtKFdlYktpdDo6V2ViUGFn
ZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5JiBz
b3VyY2VGcmFtZSwgY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxXVEY6OlN0cmluZywgV1RGOjpTdHJp
bmc+PiYgdGV4dEZpZWxkVmFsdWVzLCBBUEk6Ok9iamVjdCogdXNlckRhdGEsIFdURjo6RnVuY3Rp
b248dm9pZCh2b2lkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKHVzZXJEYXRhICYmIHVzZXJEYXRhLT50eXBlKCkgIT0gQVBJOjpPYmpl
Y3Q6OlR5cGU6OkRhdGEpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXVzZXJEYXRhIHx8IHVz
ZXJEYXRhLT50eXBlKCkgPT0gQVBJOjpPYmplY3Q6OlR5cGU6OkRhdGEpOwotICAgICAgICAgICAg
ICAgIG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPm1hcmtDdXJyZW50
bHlEaXNwYXRjaGVkTWVzc2FnZUFzSW52YWxpZCgpOwotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBhdXRvIGlucHV0RGVsZWdhdGUgPSBtX3dlYlZpZXctPl9pbnB1dERlbGVnYXRl
LmdldCgpOwotCi0gICAgICAgICAgICBpZiAoIVtpbnB1dERlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1ZXM6dXNlck9iamVjdDpz
dWJtaXNzaW9uSGFuZGxlcjopXSkgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBhdXRvIHZhbHVlTWFwID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6dGV4dEZpZWxkVmFsdWVzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBwYWlyIDogdGV4dEZpZWxkVmFsdWVzKQotICAgICAgICAgICAgICAgIFt2
YWx1ZU1hcCBzZXRPYmplY3Q6cGFpci5zZWNvbmQgZm9yS2V5OnBhaXIuZmlyc3RdOwotCi0gICAg
ICAgICAgICBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+ICp1c2VyT2JqZWN0ID0gbmlsOwotICAg
ICAgICAgICAgaWYgKEFQSTo6RGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEFQSTo6RGF0YSo+KHVz
ZXJEYXRhKSkgewotICAgICAgICAgICAgICAgIGF1dG8gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weTpjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDxjb25zdCB2b2lkKj4oZGF0YS0+Ynl0ZXMoKSkpIGxlbmd0aDpkYXRhLT5zaXplKCkgZnJlZVdo
ZW5Eb25lOk5PXSk7Ci0gICAgICAgICAgICAgICAgYXV0byB1bmFyY2hpdmVyID0gc2VjdXJlVW5h
cmNoaXZlckZyb21EYXRhKG5zRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgQHRyeSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhbGxvd2VkQ2xhc3NlcyA9IG1fd2ViVmlldy0+
X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmFsbG93ZWRDbGFzc2VzRm9yUGFyYW1ldGVy
Q29kaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VyT2JqZWN0ID0gW3VuYXJjaGl2
ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOmFsbG93ZWRDbGFzc2VzIGZvcktleTpAInVzZXJPYmpl
Y3QiXTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
dXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TT2JqZWN0IGNs
YXNzXSBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07Ci0gICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5T
RXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZGVjb2RlIHVzZXIgZGF0YTogJUAiLCBleGNlcHRpb24pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byBjaGVja2VyID0gV2ViS2l0
OjpDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoaW5wdXREZWxlZ2F0ZS5nZXQo
KSwgQHNlbGVjdG9yKF93ZWJWaWV3OndpbGxTdWJtaXRGb3JtVmFsdWVzOnVzZXJPYmplY3Q6c3Vi
bWlzc2lvbkhhbmRsZXI6KSk7Ci0gICAgICAgICAgICBbaW5wdXREZWxlZ2F0ZSBfd2ViVmlldzpt
X3dlYlZpZXcgd2lsbFN1Ym1pdEZvcm1WYWx1ZXM6dmFsdWVNYXAuZ2V0KCkgdXNlck9iamVjdDp1
c2VyT2JqZWN0IHN1Ym1pc3Npb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tl
cildIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNC
ZWVuQ2FsbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSkuZ2V0KCldOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKLSAgICB9OwotCi0g
ICAgaWYgKGlucHV0RGVsZWdhdGUpCi0gICAgICAgIF9wYWdlLT5zZXRGb3JtQ2xpZW50KG1ha2VV
bmlxdWU8Rm9ybUNsaWVudD4oc2VsZikpOwotICAgIGVsc2UKLSAgICAgICAgX3BhZ2UtPnNldEZv
cm1DbGllbnQobnVsbHB0cik7Ci19Ci0KLS0gKEJPT0wpX2lzRGlzcGxheWluZ1N0YW5kYWxvbmVJ
bWFnZURvY3VtZW50Ci17Ci0gICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9IF9wYWdlLT5tYWluRnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+aXNEaXNwbGF5aW5nU3RhbmRhbG9uZUlt
YWdlRG9jdW1lbnQoKTsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKEJPT0wpX2lzRGlzcGxheWlu
Z1N0YW5kYWxvbmVNZWRpYURvY3VtZW50Ci17Ci0gICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9IF9w
YWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+aXNEaXNwbGF5aW5n
U3RhbmRhbG9uZU1lZGlhRG9jdW1lbnQoKTsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKEJPT0wp
X2lzUGxheWluZ0F1ZGlvCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5pc1BsYXlpbmdBdWRpbygpOwot
fQotCi0tIChCT09MKV9pc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90Ci17Ci0gICAg
cmV0dXJuIF9wYWdlLT5pc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7Ci19Ci0K
LS0gKF9XS0xheW91dE1vZGUpX2xheW91dE1vZGUKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAg
c3dpdGNoIChfaW1wbC0+bGF5b3V0TW9kZSgpKSB7Ci0gICAgY2FzZSBrV0tMYXlvdXRNb2RlRml4
ZWRTaXplOgotICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZTsKLSAgICBjYXNl
IGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZToKLSAgICAgICAg
cmV0dXJuIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZTsKLSAg
ICBjYXNlIGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVu
dFNpemU6Ci0gICAgICAgIHJldHVybiBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZy
b21NaW5pbXVtRG9jdW1lbnRTaXplOwotICAgIGNhc2Uga1dLTGF5b3V0TW9kZVZpZXdTaXplOgot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBfV0tMYXlvdXRNb2RlVmlld1NpemU7Ci0gICAg
fQotI2Vsc2UKLSAgICByZXR1cm4gX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkgPyBfV0tMYXlvdXRN
b2RlRml4ZWRTaXplIDogX1dLTGF5b3V0TW9kZVZpZXdTaXplOwotI2VuZGlmCi19Ci0KLS0gKHZv
aWQpX3NldExheW91dE1vZGU6KF9XS0xheW91dE1vZGUpbGF5b3V0TW9kZQotewotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBXS0xheW91dE1vZGUgd2tWaWV3TGF5b3V0TW9kZTsKLSAgICBzd2l0Y2gg
KGxheW91dE1vZGUpIHsKLSAgICBjYXNlIF9XS0xheW91dE1vZGVGaXhlZFNpemU6Ci0gICAgICAg
IHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRml4ZWRTaXplOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2Fs
ZToKLSAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNv
bXB1dGVkRnJvbVZpZXdTY2FsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tMYXlvdXRN
b2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXplOgotICAgICAgICB3
a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWlu
aW11bURvY3VtZW50U2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tMYXlvdXRNb2Rl
Vmlld1NpemU6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xh
eW91dE1vZGVWaWV3U2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIF9pbXBsLT5zZXRM
YXlvdXRNb2RlKHdrVmlld0xheW91dE1vZGUpOwotI2Vsc2UKLSAgICBfcGFnZS0+c2V0VXNlRml4
ZWRMYXlvdXQobGF5b3V0TW9kZSA9PSBfV0tMYXlvdXRNb2RlRml4ZWRTaXplIHx8IGxheW91dE1v
ZGUgPT0gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxlKTsKLSNl
bmRpZgotfQotCi0tIChDR1NpemUpX2ZpeGVkTGF5b3V0U2l6ZQotewotICAgIHJldHVybiBfcGFn
ZS0+Zml4ZWRMYXlvdXRTaXplKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEZpeGVkTGF5b3V0U2l6ZToo
Q0dTaXplKWZpeGVkTGF5b3V0U2l6ZQotewotICAgIF9wYWdlLT5zZXRGaXhlZExheW91dFNpemUo
V2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShmaXhlZExheW91dFNp
emUpKSk7Ci19Ci0KLS0gKHZvaWQpX3NldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZTooQk9P
TCliYWNrZ3JvdW5kRXh0ZW5kcwotewotICAgIF9wYWdlLT5zZXRCYWNrZ3JvdW5kRXh0ZW5kc0Jl
eW9uZFBhZ2UoYmFja2dyb3VuZEV4dGVuZHMpOwotfQotCi0tIChCT09MKV9iYWNrZ3JvdW5kRXh0
ZW5kc0JleW9uZFBhZ2UKLXsKLSAgICByZXR1cm4gX3BhZ2UtPmJhY2tncm91bmRFeHRlbmRzQmV5
b25kUGFnZSgpOwotfQotCi0tIChDR0Zsb2F0KV92aWV3U2NhbGUKLXsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgcmV0dXJuIF9wYWdlLT52aWV3U2NhbGVGYWN0b3IoKTsKLSNlbHNlCi0gICAgcmV0
dXJuIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKTsKLSNlbmRpZgotfQotCi0tICh2b2lk
KV9zZXRWaWV3U2NhbGU6KENHRmxvYXQpdmlld1NjYWxlCi17Ci0gICAgaWYgKHZpZXdTY2FsZSA8
PSAwIHx8IGlzbmFuKHZpZXdTY2FsZSkgfHwgaXNpbmYodmlld1NjYWxlKSkKLSAgICAgICAgW05T
RXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlZpZXcg
c2NhbGUgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyIl07Ci0KLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgX2ltcGwtPnNldFZpZXdTY2FsZSh2aWV3U2NhbGUpOwotI2Vsc2UKLSAgICBpZiAoX3Bh
Z2UtPmxheW91dFNpemVTY2FsZUZhY3RvcigpID09IHZpZXdTY2FsZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRTaXplKFtz
ZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgdmlld1NjYWxlLCBfcGFnZS0+
bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCkpOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3Nl
dE1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aDooQ0dGbG9hdCltaW5pbXVtRWZmZWN0aXZlRGV2
aWNlV2lkdGgKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChfcGFnZS0+bWlu
aW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCkgPT0gbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRo
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0aW9u
Vmlld0xheW91dFNpemUoW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdLCBf
cGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCksIG1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0
aCk7Ci0jZW5kaWYKLX0KLQotLSAoQ0dGbG9hdClfbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRo
Ci17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1cm4gX3BhZ2UtPm1pbmltdW1F
ZmZlY3RpdmVEZXZpY2VXaWR0aCgpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQot
Ci0jcHJhZ21hIG1hcmsgc2Nyb2xscGVyZiBtZXRob2RzCi0KLS0gKHZvaWQpX3NldFNjcm9sbFBl
cmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkOihCT09MKWVuYWJsZWQKLXsKLSAgICBfcGFn
ZS0+c2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci19
Ci0KLS0gKEJPT0wpX3Njcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkCi17Ci0g
ICAgcmV0dXJuIF9wYWdlLT5zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZCgp
OwotfQotCi0tIChOU0FycmF5ICopX3Njcm9sbFBlcmZvcm1hbmNlRGF0YQotewotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgaWYgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhKiBzY3JvbGxQZXJmRGF0YSA9IF9wYWdlLT5zY3JvbGxpbmdQZXJmb3Jt
YW5jZURhdGEoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbFBlcmZEYXRhLT5kYXRhKCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gbmlsOwotfQotCi0jcHJhZ21hIG1hcmsgbWVkaWEgcGxheWJhY2sgcmVz
dHJpY3Rpb25zCi0KLS0gKEJPT0wpX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjawot
ewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJuIF9wYWdlLT5hbGxvd3NNZWRp
YURvY3VtZW50SW5saW5lUGxheWJhY2soKTsKKyAgICByZXR1cm4gd3JhcHBlcihhdHRhY2htZW50
KTsKICNlbHNlCi0gICAgcmV0dXJuIE5POworICAgIHJldHVybiBuaWw7CiAjZW5kaWYKIH0KIAot
LSAodm9pZClfc2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOihCT09MKWZsYWcK
Ky0gKF9XS0F0dGFjaG1lbnQgKilfYXR0YWNobWVudEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllcgogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgX3BhZ2UtPnNldEFs
bG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhmbGFnKTsKKyNpZiBFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQorICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBfcGFnZS0+YXR0YWNobWVu
dEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiB3cmFwcGVyKGF0dGFj
aG1lbnQpOwogI2VuZGlmCisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQk9PTClfd2ViUHJvY2Vz
c0lzUmVzcG9uc2l2ZQorLSAodm9pZClfc2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZVdp
dGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhIGdhbW1hOihkb3VibGUpZ2Ft
bWEKIHsKLSAgICByZXR1cm4gX3BhZ2UtPnByb2Nlc3MoKS5pc1Jlc3BvbnNpdmUoKTsKKyAgICBf
cGFnZS0+c2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShhbHBoYSwgYmV0YSwgZ2FtbWEp
OwogfQogCi0tICh2b2lkKV9zZXRGdWxsc2NyZWVuRGVsZWdhdGU6KGlkPF9XS0Z1bGxzY3JlZW5E
ZWxlZ2F0ZT4pZGVsZWdhdGUKKysgKEJPT0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKIHsKLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGlzPFdlYktpdDo6RnVsbHNjcmVlbkNsaWVu
dD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkpCi0gICAgICAgIGRvd25jYXN0PFdlYktpdDo6
RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkuc2V0RGVsZWdhdGUo
ZGVsZWdhdGUpOwotI2VuZGlmCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS0gKGlkPF9XS0Z1bGxz
Y3JlZW5EZWxlZ2F0ZT4pX2Z1bGxzY3JlZW5EZWxlZ2F0ZQorLSAodm9pZClfc2hvd1NhZmVCcm93
c2luZ1dhcm5pbmdXaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcg
Kil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGlzPFdlYktpdDo6RnVsbHNjcmVlbkNsaWVudD4oX3Bh
Z2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJLaXQ6
OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpLmRlbGVnYXRlKCku
YXV0b3JlbGVhc2UoKTsKLSNlbmRpZgotICAgIHJldHVybiBuaWw7CisgICAgLy8gRklYTUU6IEFk
b3B0IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkwgYW5kIHJlbW92ZSB0aGlzIGZ1bmN0
aW9uLgorICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZ1dpdGhVUkw6bmlsIHRpdGxl
OnRpdGxlIHdhcm5pbmc6d2FybmluZyBkZXRhaWxzOmRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6
Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCi0tIChCT09MKV9pc0luRnVsbHNjcmVlbgorLSAodm9p
ZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJMOihOU1VSTCAqKXVybCB0aXRsZTooTlNT
dHJpbmcgKil0aXRsZSB3YXJuaW5nOihOU1N0cmluZyAqKXdhcm5pbmcgZGV0YWlsczooTlNBdHRy
aWJ1dGVkU3RyaW5nICopZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShCT09MKSlj
b21wbGV0aW9uSGFuZGxlcgogewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICByZXR1
cm4gX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCkgJiYgX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2Vy
KCktPmlzRnVsbFNjcmVlbigpOworICAgIGF1dG8gc2FmZUJyb3dzaW5nV2FybmluZyA9IFdlYktp
dDo6U2FmZUJyb3dzaW5nV2FybmluZzo6Y3JlYXRlKHVybCwgdGl0bGUsIHdhcm5pbmcsIGRldGFp
bHMpOworICAgIGF1dG8gd3JhcHBlciA9IFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlcildIChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2Fk
LCBVUkw+JiYgdmFyaWFudCkgeworICAgICAgICBzd2l0Y2hPbih2YXJpYW50LCBbJl0gKFdlYktp
dDo6Q29udGludWVVbnNhZmVMb2FkIGNvbnRpbnVlVW5zYWZlTG9hZCkgeworICAgICAgICAgICAg
c3dpdGNoIChjb250aW51ZVVuc2FmZUxvYWQpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpD
b250aW51ZVVuc2FmZUxvYWQ6OlllczoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoWUVTKTsKKyAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQ6Ok5vOgorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihOTyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0sIFsmXSAoVVJMKSB7CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgX2ltcGwtPnNob3dTYWZlQnJv
d3NpbmdXYXJuaW5nKHNhZmVCcm93c2luZ1dhcm5pbmcsIFdURk1vdmUod3JhcHBlcikpOwogI2Vs
c2UKLSAgICByZXR1cm4gZmFsc2U7CisgICAgW3NlbGYgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5n
OnNhZmVCcm93c2luZ1dhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZSh3cmFwcGVyKV07
CiAjZW5kaWYKIH0KIAotLSAoX1dLTWVkaWFDYXB0dXJlU3RhdGUpX21lZGlhQ2FwdHVyZVN0YXRl
CisrIChOU1VSTCAqKV9jb25maXJtTWFsd2FyZVNlbnRpbmVsCiB7Ci0gICAgcmV0dXJuIFdlYktp
dDo6dG9XS01lZGlhQ2FwdHVyZVN0YXRlKF9wYWdlLT5tZWRpYVN0YXRlRmxhZ3MoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6Y29uZmlybU1hbHdhcmVTZW50aW5l
bCgpOwogfQogCi0tICh2b2lkKV9zZXRNZWRpYUNhcHR1cmVFbmFibGVkOihCT09MKWVuYWJsZWQK
KysgKE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsCiB7Ci0gICAgX3BhZ2UtPnNl
dE1lZGlhQ2FwdHVyZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgcmV0dXJuIFdlYktpdDo6U2FmZUJy
b3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKTsKIH0KIAotLSAoQk9P
TClfbWVkaWFDYXB0dXJlRW5hYmxlZAorLSAodm9pZClfaXNKSVRFbmFibGVkOih2b2lkKF4pKEJP
T0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5tZWRpYUNhcHR1cmVF
bmFibGVkKCk7CisgICAgX3BhZ2UtPmlzSklURW5hYmxlZChbY29tcGxldGlvbkhhbmRsZXIgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCBlbmFibGVkKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGVuYWJsZWQpOworICAgIH0pOwogfQogCi0tICh2b2lkKV9zZXRQ
YWdlTXV0ZWQ6KF9XS01lZGlhTXV0ZWRTdGF0ZSltdXRlZFN0YXRlCistICh2b2lkKV9ldmFsdWF0
ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmlu
ZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3MgY29y
ZVN0YXRlID0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6Tm9uZU11dGVkOwotCi0gICAgaWYgKG11
dGVkU3RhdGUgJiBfV0tNZWRpYUF1ZGlvTXV0ZWQpCi0gICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJD
b3JlOjpNZWRpYVByb2R1Y2VyOjpBdWRpb0lzTXV0ZWQ7Ci0gICAgaWYgKG11dGVkU3RhdGUgJiBf
V0tNZWRpYUNhcHR1cmVEZXZpY2VzTXV0ZWQpCi0gICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJDb3Jl
OjpNZWRpYVByb2R1Y2VyOjpBdWRpb0FuZFZpZGVvQ2FwdHVyZUlzTXV0ZWQ7Ci0gICAgaWYgKG11
dGVkU3RhdGUgJiBfV0tNZWRpYVNjcmVlbkNhcHR1cmVNdXRlZCkKLSAgICAgICAgY29yZVN0YXRl
IHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OlNjcmVlbkNhcHR1cmVJc011dGVkOworICAgIFtz
ZWxmIF9ldmFsdWF0ZUphdmFTY3JpcHQ6amF2YVNjcmlwdFN0cmluZyBmb3JjZVVzZXJHZXN0dXJl
Ok5PIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKK30KIAotICAgIF9wYWdl
LT5zZXRNdXRlZChjb3JlU3RhdGUpOworLSAodm9pZClfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOihf
V0tXZWJzaXRlUG9saWNpZXMgKil3ZWJzaXRlUG9saWNpZXMKK3sKKyAgICBhdXRvIGRhdGEgPSB3
ZWJzaXRlUG9saWNpZXMud2VicGFnZVByZWZlcmVuY2VzLT5fd2Vic2l0ZVBvbGljaWVzLT5kYXRh
KCk7CisgICAgaWYgKGRhdGEud2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJVcGRh
dGluZyBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgb25seSBzdXBwb3J0ZWQgZHVyaW5nIGRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24uIl07CisgICAgX3BhZ2UtPnVwZGF0ZVdlYnNpdGVQb2xp
Y2llcyhXVEZNb3ZlKGRhdGEpKTsKIH0KIAotLSAodm9pZClfcmVtb3ZlRGF0YURldGVjdGVkTGlu
a3M6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlvbgorLSAoQk9PTClfYWxsb3dzUmVtb3RlSW5z
cGVjdGlvbgogewotI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKLSAgICBfcGFnZS0+cmVtb3Zl
RGF0YURldGVjdGVkTGlua3MoW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbiks
IHBhZ2UgPSBtYWtlV2Vha1B0cihfcGFnZS5nZXQoKSldIChhdXRvJiByZXN1bHQpIHsKLSAgICAg
ICAgaWYgKHBhZ2UpCi0gICAgICAgICAgICBwYWdlLT5zZXREYXRhRGV0ZWN0aW9uUmVzdWx0KHJl
c3VsdCk7Ci0gICAgICAgIGlmIChjb21wbGV0aW9uKQotICAgICAgICAgICAgY29tcGxldGlvbigp
OwotICAgIH0pOworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIHJldHVybiBfcGFn
ZS0+YWxsb3dzUmVtb3RlSW5zcGVjdGlvbigpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29t
cGxldGlvbik7CisgICAgcmV0dXJuIE5POwogI2VuZGlmCiB9CiAKLS8vIEV4ZWN1dGUgdGhlIHN1
cHBsaWVkIGJsb2NrIGFmdGVyIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGZyb20gdGhlIFdlYlByb2Nl
c3MuCi0tICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9p
ZCkpdXBkYXRlQmxvY2sKKy0gKHZvaWQpX3NldEFsbG93c1JlbW90ZUluc3BlY3Rpb246KEJPT0wp
YWxsb3cKIHsKLSAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5n
Rm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAg
IF9wYWdlLT5zZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uKGFsbG93KTsKKyNlbmRpZgogfQogCi0t
ICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistIChOU1N0cmluZyAqKV9yZW1vdGVJ
bnNwZWN0aW9uTmFtZU92ZXJyaWRlCiB7Ci0gICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQ
cmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpZ
RVMgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107CisjaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCisgICAgcmV0dXJuIF9wYWdlLT5yZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJy
aWRlKCk7CisjZWxzZQorICAgIHJldHVybiBuaWw7CisjZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0tICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0
ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jaworLSAodm9pZClfc2V0UmVtb3RlSW5zcGVj
dGlvbk5hbWVPdmVycmlkZTooTlNTdHJpbmcgKiluYW1lCiB7Ci0gICAgaWYgKCFbc2VsZiB1c2Vz
U3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtlQmxvY2tQdHIodXBkYXRlQmxvY2spOwot
Ci0gICAgaWYgKF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcykKLSAgICAg
ICAgW19zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyBhZGRPYmplY3Q6dXBk
YXRlQmxvY2tDb3B5LmdldCgpXTsKLSAgICBlbHNlIHsKLSAgICAgICAgX3N0YWJsZVN0YXRlUHJl
c2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHM6dXBkYXRlQmxvY2tDb3B5LmdldCgpLCBuaWxdKTsKLSAgICAgICAg
W3NlbGYgX2ZpcmVQcmVzZW50YXRpb25VcGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50
YXRpb25DYWxsYmFja3NdOwotICAgIH0KLX0KKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
KyAgICBfcGFnZS0+c2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZShuYW1lKTsKICNlbmRp
ZgorfQogCi0jcHJhZ21hIG1hcmsgLSBpT1MgV0tQcml2YXRlCi0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi0tICh2b2lkKV9kZXRlY3REYXRhV2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5
cGVzKXR5cGVzIGNvbXBsZXRpb25IYW5kbGVyOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24K
Ky0gKEJPT0wpX2FkZHNWaXNpdGVkTGlua3MKIHsKLSNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04p
Ci0gICAgX3BhZ2UtPmRldGVjdERhdGFJbkFsbEZyYW1lcyhmcm9tV0tEYXRhRGV0ZWN0b3JUeXBl
cyh0eXBlcyksIFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdlID0g
bWFrZVdlYWtQdHIoX3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChw
YWdlKQotICAgICAgICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQpOwot
ICAgICAgICBpZiAoY29tcGxldGlvbikKLSAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKLSAgICB9
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGVzKTsKLSAgICBVTlVTRURfUEFSQU0oY29t
cGxldGlvbik7Ci0jZW5kaWYKKyAgICByZXR1cm4gX3BhZ2UtPmFkZHNWaXNpdGVkTGlua3MoKTsK
IH0KIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLS0gKHZvaWQpcmVtb3ZlRnJvbVN1cGVy
dmlldworLSAodm9pZClfc2V0QWRkc1Zpc2l0ZWRMaW5rczooQk9PTClhZGRzVmlzaXRlZExpbmtz
CiB7Ci0gICAgW3N1cGVyIHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgaWYgKFtfZnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkKLSAgICAgICAgW19mdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciB3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1cGVydmlld1doaWxlSW5GdWxs
c2NyZWVuXTsKKyAgICBfcGFnZS0+c2V0QWRkc1Zpc2l0ZWRMaW5rcyhhZGRzVmlzaXRlZExpbmtz
KTsKIH0KLSNlbmRpZgogCi0vLyBEZXByZWNhdGVkIFNQSS4KLS0gKENHU2l6ZSlfbWluaW11bUxh
eW91dFNpemVPdmVycmlkZQorLSAoQk9PTClfbmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcwogewot
ICAgIEFTU0VSVChfdmlld0xheW91dFNpemVPdmVycmlkZSk7Ci0gICAgcmV0dXJuIF92aWV3TGF5
b3V0U2l6ZU92ZXJyaWRlLnZhbHVlT3IoQ0dTaXplWmVybyk7CisgICAgcmV0dXJuIF9wYWdlLT5w
YWdlTG9hZFN0YXRlKCkubmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcygpOwogfQogCi0tICh2b2lk
KV9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOihDR1NpemUpdmlld0xheW91dFNpemVPdmVycmlk
ZQorc3RhdGljIGlubGluZSBPcHRpb25TZXQ8V2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lPiBsYXlv
dXRNaWxlc3RvbmVzKF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzIGV2ZW50cykKIHsKLSAgICBf
dmlld0xheW91dFNpemVPdmVycmlkZSA9IHZpZXdMYXlvdXRTaXplT3ZlcnJpZGU7CisgICAgT3B0
aW9uU2V0PFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZT4gbWlsZXN0b25lczsKKworICAgIGlmIChl
dmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXQpCisgICAgICAgIG1p
bGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TGF5b3V0KTsKKworICAgIGlmIChldmVudHMg
JiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KQor
ICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXQpOworCisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJz
dFBhaW50V2l0aFNpZ25pZmljYW50QXJlYSkKKyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29y
ZTo6RGlkSGl0UmVsZXZhbnRSZXBhaW50ZWRPYmplY3RzQXJlYVRocmVzaG9sZCk7CisKKyAgICBp
ZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudFJlYWNoZWRTZXNzaW9uUmVzdG9y
YXRpb25SZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCkKKyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2Vi
Q29yZTo6UmVhY2hlZFNlc3Npb25SZXN0b3JhdGlvblJlbmRlclRyZWVTaXplVGhyZXNob2xkKTsK
KworICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlvdXRB
ZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZykKKyAgICAgICAgbWlsZXN0b25lcy5h
ZGQoV2ViQ29yZTo6RGlkRmlyc3RMYXlvdXRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRl
cmluZyk7CisKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0
UGFpbnRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZykKKyAgICAgICAgbWlsZXN0
b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RQYWludEFmdGVyU3VwcHJlc3NlZEluY3JlbWVudGFs
UmVuZGVyaW5nKTsKKworICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50
RGlkUmVuZGVyU2lnbmlmaWNhbnRBbW91bnRPZlRleHQpCisgICAgICAgIG1pbGVzdG9uZXMuYWRk
KFdlYkNvcmU6OkRpZFJlbmRlclNpZ25pZmljYW50QW1vdW50T2ZUZXh0KTsKKworICAgIGlmIChl
dmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RNZWFuaW5nZnVsUGFpbnQpCisg
ICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TWVhbmluZ2Z1bFBhaW50KTsK
IAotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQotICAgICAgICBbc2VsZiBfZGlzcGF0Y2hT
ZXRWaWV3TGF5b3V0U2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUodmlld0xheW91dFNpemVPdmVycmlk
ZSldOworICAgIHJldHVybiBtaWxlc3RvbmVzOwogfQogCi0tIChVSUVkZ2VJbnNldHMpX29ic2N1
cmVkSW5zZXRzCistICh2b2lkKV9zZXRPYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzOihf
V0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylvYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRz
CiB7Ci0gICAgcmV0dXJuIF9vYnNjdXJlZEluc2V0czsKKyAgICBfb2JzZXJ2ZWRSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50cyA9IG9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM7CisgICAgX3Bh
Z2UtPmxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMobGF5b3V0TWlsZXN0b25lcyhvYnNlcnZlZFJl
bmRlcmluZ1Byb2dyZXNzRXZlbnRzKSk7CiB9CiAKLS0gKHZvaWQpX3NldE9ic2N1cmVkSW5zZXRz
OihVSUVkZ2VJbnNldHMpb2JzY3VyZWRJbnNldHMKKy0gKHZvaWQpX2dldE1haW5SZXNvdXJjZURh
dGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLnRvcCA+PSAwKTsK
LSAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMubGVmdCA+PSAwKTsKLSAgICBBU1NFUlQob2JzY3Vy
ZWRJbnNldHMuYm90dG9tID49IDApOwotICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy5yaWdodCA+
PSAwKTsKLQotICAgIF9oYXZlU2V0T2JzY3VyZWRJbnNldHMgPSBZRVM7Ci0KLSAgICBpZiAoVUlF
ZGdlSW5zZXRzRXF1YWxUb0VkZ2VJbnNldHMoX29ic2N1cmVkSW5zZXRzLCBvYnNjdXJlZEluc2V0
cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9vYnNjdXJlZEluc2V0cyA9IG9ic2N1cmVkSW5z
ZXRzOworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHld
KTsKIAotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07CisgICAg
X3BhZ2UtPmdldE1haW5SZXNvdXJjZURhdGFPZkZyYW1lKF9wYWdlLT5tYWluRnJhbWUoKSwgW2hh
bmRsZXJdKEFQSTo6RGF0YSogZGF0YSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7CisgICAgICAgIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlckJsb2NrKShOU0RhdGEgKiwgTlNF
cnJvciAqKSA9ICh2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwor
ICAgICAgICBpZiAoZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogUGlwZSBhIHByb3BlciBlcnJvciBpbiBmcm9tIHRoZSBX
ZWJQYWdlUHJveHkuCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckJsb2NrKG5pbCwgW05T
RXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpzdGF0aWNfY2FzdDxpbnQ+
KGVycm9yKSB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlckJsb2NrKHdyYXBwZXIoKmRhdGEpLCBuaWwpOworICAgIH0pOwogfQogCi0t
IChVSVJlY3RFZGdlKV9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEKKy0gKHZv
aWQpX2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Rh
dGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIHJldHVybiBfb2JzY3Vy
ZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOworICAgIFtzZWxmIGNyZWF0ZVdlYkFyY2hp
dmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAotLSAo
dm9pZClfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOihVSVJlY3RFZGdl
KWVkZ2VzCistICh2b2lkKV9nZXRDb250ZW50c0FzU3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShOU1N0cmluZyAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0g
ICAgaWYgKGVkZ2VzID09IF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEpCi0g
ICAgICAgIHJldHVybjsKKyAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpOwogCi0gICAgX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYSA9
IGVkZ2VzOworICAgIF9wYWdlLT5nZXRDb250ZW50c0FzU3RyaW5nKFtoYW5kbGVyXShTdHJpbmcg
c3RyaW5nLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYg
KGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFBpcGUgYSBwcm9wZXIgZXJyb3IgaW4gZnJvbSB0aGUgV2ViUGFnZVByb3h5
LgorICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vy
cm9yRG9tYWluIGNvZGU6c3RhdGljX2Nhc3Q8aW50PihlcnJvcikgdXNlckluZm86bmlsXSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaGFuZGxlcihzdHJpbmcsIG5pbCk7CisgICAgfSk7
Cit9CiAKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworLSAo
dm9pZClfZ2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TQXR0cmlidXRlZFN0cmluZyAqLCBOU0RpY3Rpb25hcnk8TlNBdHRyaWJ1dGVk
U3RyaW5nRG9jdW1lbnRBdHRyaWJ1dGVLZXksIGlkPiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyCit7CisgICAgX3BhZ2UtPmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKFtoYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgYXR0cmlidXRlZFN0
cmluZykgeworICAgICAgICBpZiAoYXR0cmlidXRlZFN0cmluZy5zdHJpbmcpCisgICAgICAgICAg
ICBoYW5kbGVyKFtbYXR0cmlidXRlZFN0cmluZy5zdHJpbmcuZ2V0KCkgcmV0YWluXSBhdXRvcmVs
ZWFzZV0sIFtbYXR0cmlidXRlZFN0cmluZy5kb2N1bWVudEF0dHJpYnV0ZXMuZ2V0KCkgcmV0YWlu
XSBhdXRvcmVsZWFzZV0sIG5pbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZXIo
bmlsLCBuaWwsIGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pLmdldCgpKTsKKyAgICB9KTsK
IH0KIAotLSAoVUlFZGdlSW5zZXRzKV91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMKKy0gKHZvaWQp
X2dldEFwcGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9X
S0FwcGxpY2F0aW9uTWFuaWZlc3QgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICByZXR1cm4g
X3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZF
U1QpCisgICAgX3BhZ2UtPmdldEFwcGxpY2F0aW9uTWFuaWZlc3QoW2NvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oY29uc3QgT3B0aW9uYWw8V2ViQ29y
ZTo6QXBwbGljYXRpb25NYW5pZmVzdD4mIG1hbmlmZXN0LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICAgICAgaWYg
KGNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgICAgICBpZiAobWFuaWZlc3QpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGFwaU1hbmlmZXN0ID0gQVBJOjpBcHBsaWNhdGlvbk1hbmlmZXN0Ojpj
cmVhdGUoKm1hbmlmZXN0KTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFw
cGVyKGFwaU1hbmlmZXN0KSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihuaWwpOworICAgICAgICB9CisgICAgfSk7CisjZWxzZQorICAgIGlm
IChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyNl
bmRpZgogfQogCi0tICh2b2lkKV9zZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHM6KFVJRWRnZUlu
c2V0cyl1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMKKy0gKF9XS1BhZ2luYXRpb25Nb2RlKV9wYWdp
bmF0aW9uTW9kZQogewotICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMudG9wID49
IDApOwotICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMubGVmdCA+PSAwKTsKLSAg
ICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLmJvdHRvbSA+PSAwKTsKLSAgICBBU1NF
UlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJpZ2h0ID49IDApOworICAgIHN3aXRjaCAoX3Bh
Z2UtPnBhZ2luYXRpb25Nb2RlKCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlVu
cGFnaW5hdGVkOgorICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDsK
KyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOgorICAg
ICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDsKKyAgICBjYXNlIFdlYkNv
cmU6OlBhZ2luYXRpb246OlJpZ2h0VG9MZWZ0UGFnaW5hdGVkOgorICAgICAgICByZXR1cm4gX1dL
UGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDsKKyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246
OlRvcFRvQm90dG9tUGFnaW5hdGVkOgorICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVU
b3BUb0JvdHRvbTsKKyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFn
aW5hdGVkOgorICAgICAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDsKKyAg
ICB9CiAKLSAgICBfaGF2ZVNldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IFlFUzsKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2lu
YXRlZDsKK30KIAotICAgIGlmIChVSUVkZ2VJbnNldHNFcXVhbFRvRWRnZUluc2V0cyhfdW5vYnNj
dXJlZFNhZmVBcmVhSW5zZXRzLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMpKQorLSAodm9pZClf
c2V0UGFnaW5hdGlvbk1vZGU6KF9XS1BhZ2luYXRpb25Nb2RlKXBhZ2luYXRpb25Nb2RlCit7Cisg
ICAgV2ViQ29yZTo6UGFnaW5hdGlvbjo6TW9kZSBtb2RlOworICAgIHN3aXRjaCAocGFnaW5hdGlv
bk1vZGUpIHsKKyAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ6CisgICAgICAg
IG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0OgorICAgICAgICBtb2RlID0g
V2ViQ29yZTo6UGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDoKKyAgICAgICAgbW9kZSA9
IFdlYkNvcmU6OlBhZ2luYXRpb246OlJpZ2h0VG9MZWZ0UGFnaW5hdGVkOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b206CisgICAgICAgIG1vZGUg
PSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2luYXRlZDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOgorICAgICAgICBtb2Rl
ID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBfdW5vYnNj
dXJlZFNhZmVBcmVhSW5zZXRzID0gdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOwotCi0gICAgW3Nl
bGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKKyAgICBfcGFnZS0+c2V0UGFn
aW5hdGlvbk1vZGUobW9kZSk7CiB9CiAKLS0gKEJPT0wpX3NhZmVBcmVhU2hvdWxkQWZmZWN0T2Jz
Y3VyZWRJbnNldHMKKy0gKEJPT0wpX3BhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMKIHsKLSAg
ICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkKLSAgICAgICAgcmV0dXJuIE5P
OwotICAgIHJldHVybiBfYXZvaWRzVW5zYWZlQXJlYTsKKyAgICByZXR1cm4gX3BhZ2UtPnBhZ2lu
YXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoKTsKIH0KIAotLSAodm9pZClfc2V0SW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZTooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VPcmllbnRh
dGlvbgorLSAodm9pZClfc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczooQk9PTCliZWhh
dmVzTGlrZUNvbHVtbnMKIHsKLSAgICBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24gPSBZ
RVM7Ci0gICAgX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSBpbnRlcmZhY2VPcmllbnRh
dGlvbjsKLQotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQotICAgICAgICBbc2VsZiBfZGlz
cGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjpkZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNl
T3JpZW50YXRpb24oX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUpXTsKKyAgICBfcGFnZS0+
c2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhiZWhhdmVzTGlrZUNvbHVtbnMpOwogfQog
Ci0tIChVSUludGVyZmFjZU9yaWVudGF0aW9uKV9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRl
CistIChDR0Zsb2F0KV9wYWdlTGVuZ3RoCiB7Ci0gICAgQVNTRVJUKF9vdmVycmlkZXNJbnRlcmZh
Y2VPcmllbnRhdGlvbik7Ci0gICAgcmV0dXJuIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRl
OworICAgIHJldHVybiBfcGFnZS0+cGFnZUxlbmd0aCgpOwogfQogCi0tICh2b2lkKV9jbGVhcklu
dGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUKKy0gKHZvaWQpX3NldFBhZ2VMZW5ndGg6KENHRmxv
YXQpcGFnZUxlbmd0aAogewotICAgIF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbiA9IE5P
OwotICAgIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlID0gVUlJbnRlcmZhY2VPcmllbnRh
dGlvblBvcnRyYWl0OworICAgIF9wYWdlLT5zZXRQYWdlTGVuZ3RoKHBhZ2VMZW5ndGgpOwogfQog
Ci0vLyBEZXByZWNhdGVkIFNQSQotLSAoQ0dTaXplKV9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVy
cmlkZQorLSAoQ0dGbG9hdClfZ2FwQmV0d2VlblBhZ2VzCiB7Ci0gICAgQVNTRVJUKF9tYXhpbXVt
VW5vYnNjdXJlZFNpemVPdmVycmlkZSk7Ci0gICAgcmV0dXJuIF9tYXhpbXVtVW5vYnNjdXJlZFNp
emVPdmVycmlkZS52YWx1ZU9yKENHU2l6ZVplcm8pOworICAgIHJldHVybiBfcGFnZS0+Z2FwQmV0
d2VlblBhZ2VzKCk7CiB9CiAKLS0gKHZvaWQpX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJy
aWRlOihDR1NpemUpc2l6ZQorLSAodm9pZClfc2V0R2FwQmV0d2VlblBhZ2VzOihDR0Zsb2F0KWdh
cEJldHdlZW5QYWdlcwogewotICAgIEFTU0VSVChzaXplLndpZHRoIDw9IHNlbGYuYm91bmRzLnNp
emUud2lkdGggJiYgc2l6ZS5oZWlnaHQgPD0gc2VsZi5ib3VuZHMuc2l6ZS5oZWlnaHQpOwotICAg
IF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IHNpemU7Ci0KLSAgICBpZiAoX2R5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
OjpOb3RSZXNpemluZykKLSAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0TWF4aW11bVVub2JzY3Vy
ZWRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZShzaXplKV07CisgICAgX3BhZ2UtPnNldEdhcEJldHdl
ZW5QYWdlcyhnYXBCZXR3ZWVuUGFnZXMpOwogfQogCi0tICh2b2lkKV9zZXRBbGxvd3NWaWV3cG9y
dFNocmlua1RvRml0OihCT09MKWFsbG93U2hyaW5rVG9GaXQKKy0gKEJPT0wpX3BhZ2luYXRpb25M
aW5lR3JpZEVuYWJsZWQKIHsKLSAgICBfYWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdCA9IGFsbG93
U2hyaW5rVG9GaXQ7CisgICAgcmV0dXJuIF9wYWdlLT5wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVk
KCk7CiB9CiAKLS0gKEJPT0wpX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQKKy0gKHZvaWQpX3Nl
dFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQ6KEJPT0wpbGluZUdyaWRFbmFibGVkCiB7Ci0gICAg
cmV0dXJuIF9hbGxvd3NWaWV3cG9ydFNocmlua1RvRml0OworICAgIF9wYWdlLT5zZXRQYWdpbmF0
aW9uTGluZUdyaWRFbmFibGVkKGxpbmVHcmlkRW5hYmxlZCk7CiB9CiAKLS0gKHZvaWQpX2JlZ2lu
SW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZQorLSAoTlNVSW50ZWdlcilfcGFnZUNvdW50
CiB7Ci0gICAgQVNTRVJUKCFfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSk7
Ci0gICAgX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkgPSBZRVM7CisgICAg
cmV0dXJuIF9wYWdlLT5wYWdlQ291bnQoKTsKIH0KIAotLSAodm9pZClfZW5kSW50ZXJhY3RpdmVP
YnNjdXJlZEluc2V0c0NoYW5nZQorLSAoQk9PTClfc3VwcG9ydHNUZXh0Wm9vbQogewotICAgIEFT
U0VSVChfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSk7Ci0gICAgX2lzQ2hh
bmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkgPSBOTzsKLSAgICBbc2VsZiBfc2NoZWR1
bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworICAgIHJldHVybiBfcGFnZS0+c3VwcG9ydHNU
ZXh0Wm9vbSgpOwogfQogCi0tICh2b2lkKV9oaWRlQ29udGVudFVudGlsTmV4dFVwZGF0ZQorLSAo
ZG91YmxlKV90ZXh0Wm9vbUZhY3RvcgogewotICAgIGlmIChhdXRvKiBhcmVhID0gX3BhZ2UtPmRy
YXdpbmdBcmVhKCkpCi0gICAgICAgIGFyZWEtPmhpZGVDb250ZW50VW50aWxBbnlVcGRhdGUoKTsK
KyAgICByZXR1cm4gX3BhZ2UtPnRleHRab29tRmFjdG9yKCk7CiB9CiAKLS0gKHZvaWQpX2JlZ2lu
QW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKKy0g
KHZvaWQpX3NldFRleHRab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3RvcgogewotICAgIENHUmVj
dCBvbGRCb3VuZHMgPSBzZWxmLmJvdW5kczsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgb2xkVW5v
YnNjdXJlZENvbnRlbnRSZWN0ID0gX3BhZ2UtPnVub2JzY3VyZWRDb250ZW50UmVjdCgpOwotCi0g
ICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10gfHwgIV9oYXNDb21taXR0ZWRM
b2FkRm9yTWFpbkZyYW1lIHx8IENHUmVjdElzRW1wdHkob2xkQm91bmRzKSB8fCBvbGRVbm9ic2N1
cmVkQ29udGVudFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRW
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViX2JlZ2luQW5pbWF0ZWRSZXNpemVX
aXRoVXBkYXRlczopXSkKLSAgICAgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2JlZ2lu
QW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp1cGRhdGVCbG9ja107Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHVwZGF0ZUJsb2NrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBS
RUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcg
X2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczpdIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZp
ZXIoKS50b1VJbnQ2NCgpKTsKLQotICAgIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2Vi
S2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpSZXNpemluZ1dpdGhBbmltYXRpb247Ci0K
LSAgICBhdXRvIG9sZFZpZXdMYXlvdXRTaXplID0gW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6
c2VsZi5ib3VuZHNdOwotICAgIGF1dG8gb2xkTWF4aW11bVVub2JzY3VyZWRTaXplID0gYWN0aXZl
TWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG9sZEJvdW5kcyk7Ci0gICAgaW50MzJfdCBvbGRP
cmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9uKHNlbGYpOwotICAgIFVJRWRnZUluc2V0cyBv
bGRPYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZEluc2V0czsKLQotICAgIHVwZGF0ZUJsb2NrKCk7
Ci0KLSAgICBDR1JlY3QgbmV3Qm91bmRzID0gc2VsZi5ib3VuZHM7Ci0gICAgYXV0byBuZXdWaWV3
TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOm5ld0JvdW5kc107Ci0gICAg
YXV0byBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBhY3RpdmVNYXhpbXVtVW5vYnNjdXJlZFNp
emUoc2VsZiwgbmV3Qm91bmRzKTsKLSAgICBpbnQzMl90IG5ld09yaWVudGF0aW9uID0gYWN0aXZl
T3JpZW50YXRpb24oc2VsZik7Ci0gICAgVUlFZGdlSW5zZXRzIG5ld09ic2N1cmVkSW5zZXRzID0g
X29ic2N1cmVkSW5zZXRzOwotICAgIENHUmVjdCBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNv
b3JkaW5hdGVzID0gVUlFZGdlSW5zZXRzSW5zZXRSZWN0KG5ld0JvdW5kcywgX29ic2N1cmVkSW5z
ZXRzKTsKLSAgICBDR1JlY3QgY29udGVudFZpZXdCb3VuZHMgPSBbX2NvbnRlbnRWaWV3IGJvdW5k
c107Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUg
JiYgbmV3Vmlld0xheW91dFNpemUuaXNFbXB0eSgpKSwgIkNsaWVudHMgY29udHJvbGxpbmcgdGhl
IGxheW91dCBzaXplIHNob3VsZCBtYWludGFpbiBhIHZhbGlkIGxheW91dCBzaXplIHRvIG1pbmlt
aXplIGxheW91dHMuIik7Ci0gICAgaWYgKENHUmVjdElzRW1wdHkobmV3Qm91bmRzKSB8fCBuZXdW
aWV3TGF5b3V0U2l6ZS5pc0VtcHR5KCkgfHwgQ0dSZWN0SXNFbXB0eShmdXR1cmVVbm9ic2N1cmVk
UmVjdEluU2VsZkNvb3JkaW5hdGVzKSB8fCBDR1JlY3RJc0VtcHR5KGNvbnRlbnRWaWV3Qm91bmRz
KSkgewotICAgICAgICBbc2VsZiBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdOwotICAgICAgICBbc2Vs
ZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwotICAgICAgICBpZiAoX3ZpZXdMYXlvdXRTaXplT3Zl
cnJpZGUpCi0gICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpuZXdW
aWV3TGF5b3V0U2l6ZV07Ci0gICAgICAgIGlmIChfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUpCi0gICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRNYXhpbXVtVW5vYnNjdXJlZFNpemU6
V2ViQ29yZTo6RmxvYXRTaXplKG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZSldOwotICAgICAgICBp
ZiAoX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9uKQotICAgICAgICAgICAgW3NlbGYgX2Rp
c3BhdGNoU2V0RGV2aWNlT3JpZW50YXRpb246bmV3T3JpZW50YXRpb25dOwotCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoQ0dSZWN0RXF1YWxUb1JlY3Qob2xkQm91bmRzLCBuZXdC
b3VuZHMpCi0gICAgICAgICYmIG9sZFZpZXdMYXlvdXRTaXplID09IG5ld1ZpZXdMYXlvdXRTaXpl
Ci0gICAgICAgICYmIG9sZE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9PSBuZXdNYXhpbXVtVW5vYnNj
dXJlZFNpemUKLSAgICAgICAgJiYgb2xkT3JpZW50YXRpb24gPT0gbmV3T3JpZW50YXRpb24KLSAg
ICAgICAgJiYgVUlFZGdlSW5zZXRzRXF1YWxUb0VkZ2VJbnNldHMob2xkT2JzY3VyZWRJbnNldHMs
IG5ld09ic2N1cmVkSW5zZXRzKSkgewotICAgICAgICBbc2VsZiBfY2FuY2VsQW5pbWF0ZWRSZXNp
emVdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgX3Jlc2l6ZUFuaW1hdGlvblRyYW5z
Zm9ybUFkanVzdG1lbnRzID0gQ0FUcmFuc2Zvcm0zRElkZW50aXR5OwotCi0gICAgaWYgKCFfcmVz
aXplQW5pbWF0aW9uVmlldykgewotICAgICAgICBOU1VJbnRlZ2VyIGluZGV4T2ZDb250ZW50Vmll
dyA9IFtbX3Njcm9sbFZpZXcgc3Vidmlld3NdIGluZGV4T2ZPYmplY3Q6X2NvbnRlbnRWaWV3Lmdl
dCgpXTsKLSAgICAgICAgX3Jlc2l6ZUFuaW1hdGlvblZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFs
bG9jXSBpbml0XSk7Ci0gICAgICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyBsYXllcl0ubmFtZSA9
IEAiUmVzaXplQW5pbWF0aW9uIjsKLSAgICAgICAgW19zY3JvbGxWaWV3IGluc2VydFN1YnZpZXc6
X3Jlc2l6ZUFuaW1hdGlvblZpZXcuZ2V0KCkgYXRJbmRleDppbmRleE9mQ29udGVudFZpZXddOwot
ICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgYWRkU3VidmlldzpfY29udGVudFZpZXcuZ2V0
KCldOwotICAgICAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgYWRkU3VidmlldzpbX2NvbnRlbnRW
aWV3IHVuc2NhbGVkVmlld11dOwotICAgIH0KLQotICAgIENHU2l6ZSBjb250ZW50U2l6ZUluQ29u
dGVudFZpZXdDb29yZGluYXRlcyA9IGNvbnRlbnRWaWV3Qm91bmRzLnNpemU7Ci0gICAgW19zY3Jv
bGxWaWV3IHNldE1pbmltdW1ab29tU2NhbGU6c3RkOjptaW4obmV3Vmlld0xheW91dFNpemUud2lk
dGgoKSAvIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoLCBbX3Njcm9s
bFZpZXcgbWluaW11bVpvb21TY2FsZV0pXTsKLSAgICBbX3Njcm9sbFZpZXcgc2V0TWF4aW11bVpv
b21TY2FsZTpzdGQ6Om1heChuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgpIC8gY29udGVudFNpemVJ
bkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGgsIFtfc2Nyb2xsVmlldyBtYXhpbXVtWm9vbVNj
YWxlXSldOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgbmV3IHNjYWxlIHRvIGtlZXAgdGhlIGN1cnJl
bnQgY29udGVudCB3aWR0aCBpbiB0aGUgc2Nyb2xsdmlldy4KLSAgICBDR0Zsb2F0IG9sZFdlYlZp
ZXdXaWR0aEluQ29udGVudFZpZXdDb29yZGluYXRlcyA9IG9sZFVub2JzY3VyZWRDb250ZW50UmVj
dC53aWR0aCgpOwotICAgIF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoID0gc3Rk
OjptaW4oY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGgsIG9sZFdlYlZp
ZXdXaWR0aEluQ29udGVudFZpZXdDb29yZGluYXRlcyk7Ci0gICAgQ0dGbG9hdCB0YXJnZXRTY2Fs
ZSA9IG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkgLyBfYW5pbWF0ZWRSZXNpemVPcmlnaW5hbENv
bnRlbnRXaWR0aDsKLSAgICBDR0Zsb2F0IHJlc2l6ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2Fs
ZSA9IHRhcmdldFNjYWxlIC8gY29udGVudFpvb21TY2FsZShzZWxmKTsKLSAgICBbX3Jlc2l6ZUFu
aW1hdGlvblZpZXcgc2V0VHJhbnNmb3JtOkNHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHJlc2l6
ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSwgcmVzaXplQW5pbWF0aW9uVmlld0FuaW1hdGlv
blNjYWxlKV07Ci0KLSAgICAvLyBDb21wdXRlIGEgbmV3IHBvc2l0aW9uIHRvIGtlZXAgdGhlIGNv
bnRlbnQgY2VudGVyZWQuCi0gICAgQ0dQb2ludCBvcmlnaW5hbENvbnRlbnRDZW50ZXIgPSBvbGRV
bm9ic2N1cmVkQ29udGVudFJlY3QuY2VudGVyKCk7Ci0gICAgQ0dQb2ludCBvcmlnaW5hbENvbnRl
bnRDZW50ZXJJblNlbGZDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRQb2ludDpvcmlnaW5hbENv
bnRlbnRDZW50ZXIgZnJvbVZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAgICBDR1BvaW50IGZ1
dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMgPSBDR1BvaW50TWFrZShm
dXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLm9yaWdpbi54ICsgZnV0dXJlVW5v
YnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5zaXplLndpZHRoIC8gMiwgZnV0dXJlVW5vYnNj
dXJlZFJlY3RJblNlbGZDb29yZGluYXRlcy5vcmlnaW4ueSArIGZ1dHVyZVVub2JzY3VyZWRSZWN0
SW5TZWxmQ29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQgLyAyKTsKLQotICAgIENHUG9pbnQgb3JpZ2lu
YWxDb250ZW50T2Zmc2V0ID0gW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOwotICAgIENHUG9p
bnQgY29udGVudE9mZnNldCA9IG9yaWdpbmFsQ29udGVudE9mZnNldDsKLSAgICBjb250ZW50T2Zm
c2V0LnggKz0gKG9yaWdpbmFsQ29udGVudENlbnRlckluU2VsZkNvb3JkaW5hdGVzLnggLSBmdXR1
cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3JkaW5hdGVzLngpOwotICAgIGNvbnRlbnRP
ZmZzZXQueSArPSAob3JpZ2luYWxDb250ZW50Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMueSAtIGZ1
dHVyZVVub2JzY3VyZWRSZWN0Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMueSk7Ci0KLSAgICAvLyBM
aW1pdCB0aGUgbmV3IG9mZnNldCB3aXRoaW4gdGhlIHNjcm9sbHZpZXcsIHdlIGRvIG5vdCB3YW50
IHRvIHJ1YmJlciBiYW5kIHByb2dyYW1tYXRpY2FsbHkuCi0gICAgQ0dTaXplIGZ1dHVyZUNvbnRl
bnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMgPSBDR1NpemVNYWtlKGNvbnRlbnRTaXplSW5Db250ZW50
Vmlld0Nvb3JkaW5hdGVzLndpZHRoICogdGFyZ2V0U2NhbGUsIGNvbnRlbnRTaXplSW5Db250ZW50
Vmlld0Nvb3JkaW5hdGVzLmhlaWdodCAqIHRhcmdldFNjYWxlKTsKLSAgICBDR0Zsb2F0IG1heEhv
cml6b250YWxPZmZzZXQgPSBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzLndpZHRo
IC0gbmV3Qm91bmRzLnNpemUud2lkdGggKyBfb2JzY3VyZWRJbnNldHMucmlnaHQ7Ci0gICAgY29u
dGVudE9mZnNldC54ID0gc3RkOjptaW4oY29udGVudE9mZnNldC54LCBtYXhIb3Jpem9udGFsT2Zm
c2V0KTsKLSAgICBDR0Zsb2F0IG1heFZlcnRpY2FsT2Zmc2V0ID0gZnV0dXJlQ29udGVudFNpemVJ
blNlbGZDb29yZGluYXRlcy5oZWlnaHQgLSBuZXdCb3VuZHMuc2l6ZS5oZWlnaHQgKyBfb2JzY3Vy
ZWRJbnNldHMuYm90dG9tOwotICAgIGNvbnRlbnRPZmZzZXQueSA9IHN0ZDo6bWluKGNvbnRlbnRP
ZmZzZXQueSwgbWF4VmVydGljYWxPZmZzZXQpOwotCi0gICAgY29udGVudE9mZnNldC54ID0gc3Rk
OjptYXgoY29udGVudE9mZnNldC54LCAtX29ic2N1cmVkSW5zZXRzLmxlZnQpOwotICAgIGNvbnRl
bnRPZmZzZXQueSA9IHN0ZDo6bWF4KGNvbnRlbnRPZmZzZXQueSwgLV9vYnNjdXJlZEluc2V0cy50
b3ApOwotCi0gICAgLy8gTWFrZSB0aGUgdG9wL2JvdHRvbSBlZGdlcyAic3RpY2t5IiB3aXRoaW4g
MSBwaXhlbC4KLSAgICBpZiAob2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0Lm1heFkoKSA+IGNvbnRl
bnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLmhlaWdodCAtIDEpCi0gICAgICAgIGNvbnRl
bnRPZmZzZXQueSA9IG1heFZlcnRpY2FsT2Zmc2V0OwotICAgIGlmIChvbGRVbm9ic2N1cmVkQ29u
dGVudFJlY3QueSgpIDwgMSkKLSAgICAgICAgY29udGVudE9mZnNldC55ID0gW3NlbGYgX2luaXRp
YWxDb250ZW50T2Zmc2V0Rm9yU2Nyb2xsVmlld10ueTsKLQotICAgIC8vIEZJWE1FOiBpZiB3ZSBo
YXZlIGNvbnRlbnQgY2VudGVyZWQgYWZ0ZXIgZG91YmxlIHRhcCB0byB6b29tLCB3ZSBzaG91bGQg
YWxzbyB0cnkgdG8ga2VlcCB0aGF0IHJlY3QgaW4gdmlldy4KLSAgICBbX3Njcm9sbFZpZXcgc2V0
Q29udGVudFNpemU6cm91bmRTY3JvbGxWaWV3Q29udGVudFNpemUoKl9wYWdlLCBmdXR1cmVDb250
ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzKV07Ci0gICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRP
ZmZzZXQ6Y29udGVudE9mZnNldF07Ci0KLSAgICBDR1JlY3QgdmlzaWJsZVJlY3RJbkNvbnRlbnRD
b29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0Om5ld0JvdW5kcyB0b1ZpZXc6X2NvbnRlbnRW
aWV3LmdldCgpXTsKLSAgICBDR1JlY3QgdW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRl
cyA9IFtzZWxmIGNvbnZlcnRSZWN0OmZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0
ZXMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0KLSAgICBVSUVkZ2VJbnNldHMgdW5vYnNj
dXJlZFNhZmVBcmVhSW5zZXRzID0gW3NlbGYgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5z
ZXRdOwotICAgIFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0
c0V4dGVudCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMudG9wLCB1bm9ic2N1cmVkU2FmZUFyZWFJ
bnNldHMucmlnaHQsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5ib3R0b20sIHVub2JzY3VyZWRT
YWZlQXJlYUluc2V0cy5sZWZ0KTsKLQotICAgIF9sYXN0U2VudFZpZXdMYXlvdXRTaXplID0gbmV3
Vmlld0xheW91dFNpemU7Ci0gICAgX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplID0gbmV3
TWF4aW11bVVub2JzY3VyZWRTaXplOwotICAgIF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uID0g
bmV3T3JpZW50YXRpb247Ci0KLSAgICBfcGFnZS0+ZHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZShu
ZXdWaWV3TGF5b3V0U2l6ZSwgbmV3TWF4aW11bVVub2JzY3VyZWRTaXplLCB2aXNpYmxlUmVjdElu
Q29udGVudENvb3JkaW5hdGVzLCB1bm9ic2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5hdGVzLCBm
dXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLCB1bm9ic2N1cmVkU2FmZUFyZWFJ
bnNldHNFeHRlbnQsIHRhcmdldFNjYWxlLCBuZXdPcmllbnRhdGlvbiwgKytfY3VycmVudER5bmFt
aWNWaWV3cG9ydFNpemVVcGRhdGVJRCk7Ci0gICAgaWYgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94
eSogZHJhd2luZ0FyZWEgPSBfcGFnZS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgZHJhd2luZ0Fy
ZWEtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShuZXdCb3VuZHMuc2l6ZSkpOwotCi0gICAgX3dh
aXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVkUmVzaXplID0gWUVTOwotICAgIF93YWl0aW5nRm9y
RW5kQW5pbWF0ZWRSZXNpemUgPSBZRVM7CisgICAgX3BhZ2UtPnNldFRleHRab29tRmFjdG9yKHpv
b21GYWN0b3IpOwogfQogCi0tICh2b2lkKV9lbmRBbmltYXRlZFJlc2l6ZQorLSAoZG91YmxlKV9w
YWdlWm9vbUZhY3RvcgogewotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJv
eHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfZW5kQW5pbWF0ZWRSZXNpemVdIF9keW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlICVkIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCBf
ZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUg
YW4gdXAtdG8tZGF0ZSBsYXllciB0cmVlLCBpbW1lZGlhdGVseSBjb21wbGV0ZQotICAgIC8vIHRo
ZSByZXNpemUuIE90aGVyd2lzZSwgd2Ugd2lsbCBkZWZlciBjb21wbGV0aW9uIHVudGlsIHdlIGRv
LgotICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsKLSAgICBpZiAoIV93YWl0
aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZSkKLSAgICAgICAgW3NlbGYgX2RpZENvbXBs
ZXRlQW5pbWF0ZWRSZXNpemVdOworICAgIHJldHVybiBbc2VsZiBwYWdlWm9vbV07CiB9CiAKLS0g
KHZvaWQpX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOih2b2lkICheKSh2b2lk
KSl1cGRhdGVCbG9jaworLSAodm9pZClfc2V0UGFnZVpvb21GYWN0b3I6KGRvdWJsZSl6b29tRmFj
dG9yCiB7Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUp
IC1bV0tXZWJWaWV3IF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczpdIiwgc2Vs
ZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpKTsKLQotICAgIFtzZWxmIF9iZWdpbkFu
aW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6dXBkYXRlQmxvY2tdOwotICAgIGlmIChfZHluYW1pY1Zp
ZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6OlJl
c2l6aW5nV2l0aEFuaW1hdGlvbikgewotICAgICAgICBbX2NvbnRlbnRWaWV3IHNldEhpZGRlbjpZ
RVNdOwotICAgICAgICBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1p
Y1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRoRG9jdW1lbnRIaWRkZW47Ci0gICAgICAg
IAotICAgICAgICAvLyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXMgaXMgdXNl
ZCBieSBpdHNlbGY7IHRoZSBjbGllbnQgd2lsbAotICAgICAgICAvLyBub3QgY2FsbCBlbmRBbmlt
YXRlZFJlc2l6ZSwgc28gd2UgY2FuJ3Qgd2FpdCBmb3IgaXQuCi0gICAgICAgIF93YWl0aW5nRm9y
RW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsKLSAgICB9CisgICAgW3NlbGYgc2V0UGFnZVpvb206em9v
bUZhY3Rvcl07CiB9CiAKLS0gKHZvaWQpX2ZpcmVQcmVzZW50YXRpb25VcGRhdGVGb3JQZW5kaW5n
U3RhYmxlU3RhdGVQcmVzZW50YXRpb25DYWxsYmFja3MKKy0gKGlkIDxfV0tEaWFnbm9zdGljTG9n
Z2luZ0RlbGVnYXRlPilfZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZQogewotICAgIFJldGFpblB0
cjxXS1dlYlZpZXc+IHN0cm9uZ1NlbGYgPSBzZWxmOwotICAgIFtzZWxmIF9kb0FmdGVyTmV4dFBy
ZXNlbnRhdGlvblVwZGF0ZTpbc3Ryb25nU2VsZl0gewotICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nU2VsZl0gewotICAgICAgICAgICAgaWYg
KFtzdHJvbmdTZWxmLT5fc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgY291
bnRdKQotICAgICAgICAgICAgICAgIFtzdHJvbmdTZWxmIF9maXJlUHJlc2VudGF0aW9uVXBkYXRl
Rm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKLSAgICAgICAgfSk7
Ci0gICAgfV07Ci19CisgICAgYXV0byogZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQgPSBfcGFnZS0+
ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKTsKKyAgICBpZiAoIWRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50KQorICAgICAgICByZXR1cm4gbmlsOwogCi0tICh2b2lkKV9zZXRPdmVybGFpZEFjY2Vzc29y
eVZpZXdzSW5zZXQ6KENHU2l6ZSlpbnNldAotewotICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2Vi
X3NldE92ZXJsYWlkQWNjZXNzb3J5Vmlld3NJbnNldDppbnNldF07CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYktpdDo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQmPigqZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQpLmRlbGVnYXRlKCkuYXV0b3JlbGVhc2UoKTsKIH0KIAotLSAodm9pZClfc25hcHNo
b3RSZWN0OihDR1JlY3QpcmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9JbWFnZU9mV2lkdGg6KENH
RmxvYXQpaW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShDR0ltYWdlUmVmKSlj
b21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClfc2V0RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZToo
aWQ8X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZT4pZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0
ZQogewotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7Ci0gICAgICAgIC8vIERlZmVyIHNu
YXBzaG90dGluZyB1bnRpbCBhZnRlciB0aGUgY3VycmVudCByZXNpemUgY29tcGxldGVzLgotICAg
ICAgICB2b2lkICheY29waWVkQ29tcGxldGlvbkhhbmRsZXIpKENHSW1hZ2VSZWYpID0gW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldOwotICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiByZXRhaW5l
ZFNlbGYgPSBzZWxmOwotICAgICAgICBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBw
ZW5kKFtyZXRhaW5lZFNlbGYsIHJlY3RJblZpZXdDb29yZGluYXRlcywgaW1hZ2VXaWR0aCwgY29w
aWVkQ29tcGxldGlvbkhhbmRsZXJdIHsKLSAgICAgICAgICAgIFtyZXRhaW5lZFNlbGYgX3NuYXBz
aG90UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZXaWR0aDppbWFnZVdpZHRo
IGNvbXBsZXRpb25IYW5kbGVyOmNvcGllZENvbXBsZXRpb25IYW5kbGVyXTsKLSAgICAgICAgICAg
IFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBDR1JlY3Qgc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRp
bmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgdG9WaWV3OnNl
bGYuX2N1cnJlbnRDb250ZW50Vmlld107Ci0gICAgQ0dGbG9hdCBpbWFnZVNjYWxlID0gaW1hZ2VX
aWR0aCAvIHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzLnNpemUud2lkdGg7Ci0gICAg
Q0dGbG9hdCBpbWFnZUhlaWdodCA9IGltYWdlU2NhbGUgKiBzbmFwc2hvdFJlY3RJbkNvbnRlbnRD
b29yZGluYXRlcy5zaXplLmhlaWdodDsKLSAgICBDR1NpemUgaW1hZ2VTaXplID0gQ0dTaXplTWFr
ZShpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7Ci0KLSAgICBpZiAoW1tfY3VzdG9tQ29udGVudFZp
ZXcgY2xhc3NdIHdlYl9yZXF1aXJlc0N1c3RvbVNuYXBzaG90dGluZ10pIHsKLSAgICAgICAgW19j
dXN0b21Db250ZW50VmlldyB3ZWJfc25hcHNob3RSZWN0SW5Db250ZW50Vmlld0Nvb3JkaW5hdGVz
OnNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzIHNuYXBzaG90V2lkdGg6aW1hZ2VXaWR0
aCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSNpZiBIQVZFKENPUkVfQU5JTUFUSU9OX1JFTkRFUl9TRVJWRVIpICYmIEhBVkUo
SU9TVVJGQUNFKQotICAgIC8vIElmIHdlIGFyZSBwYXJlbnRlZCBhbmQgbm90IGhpZGRlbiwgYW5k
IHRodXMgd29uJ3QgaW5jdXIgYSBzaWduaWZpY2FudCBwZW5hbHR5IGZyb20gcGFnaW5nIGluIHRp
bGVzLCBzbmFwc2hvdCB0aGUgdmlldyBoaWVyYXJjaHkgZGlyZWN0bHkuCi0gICAgTlNTdHJpbmcg
KmRpc3BsYXlOYW1lID0gc2VsZi53aW5kb3cuc2NyZWVuLmRpc3BsYXlDb25maWd1cmF0aW9uLm5h
bWU7Ci0gICAgaWYgKGRpc3BsYXlOYW1lICYmICFzZWxmLndpbmRvdy5oaWRkZW4pIHsKLSAgICAg
ICAgYXV0byBzdXJmYWNlID0gV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGUoV2ViQ29yZTo6ZXhw
YW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShpbWFnZVNpemUpKSwgV2ViQ29yZTo6c1JH
QkNvbG9yU3BhY2VSZWYoKSk7Ci0gICAgICAgIGlmICghc3VyZmFjZSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgQ0dGbG9hdCBpbWFnZVNjYWxlSW5WaWV3Q29vcmRpbmF0ZXMgPSBpbWFnZVdp
ZHRoIC8gcmVjdEluVmlld0Nvb3JkaW5hdGVzLnNpemUud2lkdGg7Ci0gICAgICAgIENBVHJhbnNm
b3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbWFnZVNjYWxlSW5WaWV3
Q29vcmRpbmF0ZXMsIGltYWdlU2NhbGVJblZpZXdDb29yZGluYXRlcywgMSk7Ci0gICAgICAgIHRy
YW5zZm9ybSA9IENBVHJhbnNmb3JtM0RUcmFuc2xhdGUodHJhbnNmb3JtLCAtcmVjdEluVmlld0Nv
b3JkaW5hdGVzLm9yaWdpbi54LCAtcmVjdEluVmlld0Nvb3JkaW5hdGVzLm9yaWdpbi55LCAwKTsK
LSAgICAgICAgQ0FSZW5kZXJTZXJ2ZXJSZW5kZXJEaXNwbGF5TGF5ZXJXaXRoVHJhbnNmb3JtQW5k
VGltZU9mZnNldChNQUNIX1BPUlRfTlVMTCwgKENGU3RyaW5nUmVmKWRpc3BsYXlOYW1lLCBzZWxm
LmxheWVyLmNvbnRleHQuY29udGV4dElkLCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihzZWxm
LmxheWVyKSwgc3VyZmFjZS0+c3VyZmFjZSgpLCAwLCAwLCAmdHJhbnNmb3JtLCAwKTsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6SU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKFdU
Rk1vdmUoc3VyZmFjZSkpLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgaWYgKF9jdXN0b21Db250ZW50VmlldykgewotICAgICAgICBBU1NFUlQoIVtbX2N1c3Rv
bUNvbnRlbnRWaWV3IGNsYXNzXSB3ZWJfcmVxdWlyZXNDdXN0b21TbmFwc2hvdHRpbmddKTsKLSAg
ICAgICAgVUlHcmFwaGljc0JlZ2luSW1hZ2VDb250ZXh0V2l0aE9wdGlvbnMoaW1hZ2VTaXplLCBZ
RVMsIDEpOwotCi0gICAgICAgIFVJVmlldyAqY3VzdG9tQ29udGVudFZpZXcgPSBfY3VzdG9tQ29u
dGVudFZpZXcuZ2V0KCk7Ci0gICAgICAgIFtjdXN0b21Db250ZW50Vmlldy5iYWNrZ3JvdW5kQ29s
b3Igc2V0XTsKLSAgICAgICAgVUlSZWN0RmlsbChDR1JlY3RNYWtlKDAsIDAsIGltYWdlV2lkdGgs
IGltYWdlSGVpZ2h0KSk7Ci0KLSAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBVSUdyYXBo
aWNzR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNv
bnRleHQsIC1zbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcy5vcmlnaW4ueCAqIGltYWdl
U2NhbGUsIC1zbmFwc2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcy5vcmlnaW4ueSAqIGltYWdl
U2NhbGUpOwotICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBpbWFnZVNjYWxlLCBp
bWFnZVNjYWxlKTsKLSAgICAgICAgW2N1c3RvbUNvbnRlbnRWaWV3LmxheWVyIHJlbmRlckluQ29u
dGV4dDpjb250ZXh0XTsKLQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbVUlHcmFwaGljc0dl
dEltYWdlRnJvbUN1cnJlbnRJbWFnZUNvbnRleHQoKSBDR0ltYWdlXSk7Ci0KLSAgICAgICAgVUlH
cmFwaGljc0VuZEltYWdlQ29udGV4dCgpOworICAgIGF1dG8qIGRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50ID0gX3BhZ2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7CisgICAgaWYgKCFkaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZvaWQoXmNv
cGllZENvbXBsZXRpb25IYW5kbGVyKShDR0ltYWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBj
b3B5XTsKLSAgICBfcGFnZS0+dGFrZVNuYXBzaG90KFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3Qo
c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMpLCBXZWJDb3JlOjpleHBhbmRlZEludFNp
emUoV2ViQ29yZTo6RmxvYXRTaXplKGltYWdlU2l6ZSkpLCBXZWJLaXQ6OlNuYXBzaG90T3B0aW9u
c0V4Y2x1ZGVEZXZpY2VTY2FsZUZhY3RvciwgWz1dKGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmIGltYWdlSGFuZGxlLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsK
LSAgICAgICAgaWYgKGltYWdlSGFuZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjb3BpZWRD
b21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKLSAgICAgICAgICAgIFtjb3BpZWRDb21wbGV0aW9u
SGFuZGxlciByZWxlYXNlXTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGF1dG8gYml0bWFwID0gV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhh
bmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKIAotICAg
ICAgICBpZiAoIWJpdG1hcCkgewotICAgICAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7Ci0gICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gY2dJbWFnZTsKLSAgICAgICAgY2dJbWFnZSA9IGJpdG1hcC0+bWFrZUNHSW1hZ2Uo
KTsKLSAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIoY2dJbWFnZS5nZXQoKSk7Ci0gICAg
ICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICB9KTsKKyAgICBzdGF0
aWNfY2FzdDxXZWJLaXQ6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Jj4oKmRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50KS5zZXREZWxlZ2F0ZShkaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlKTsKIH0KIAot
LSAodm9pZClfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOihD
R1NpemUpbWluaW11bUxheW91dFNpemUgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6KENH
U2l6ZSltYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZQorLSAoaWQgPF9XS0ZpbmREZWxlZ2F0
ZT4pX2ZpbmREZWxlZ2F0ZQogewotICAgIExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0
cmVhbSA8PCAiLVtXS1dlYlZpZXcgIiA8PCBfcGFnZS0+aWRlbnRpZmllcigpIDw8ICIgX292ZXJy
aWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZToiIDw8IFdlYkNvcmU6OkZs
b2F0U2l6ZShtaW5pbXVtTGF5b3V0U2l6ZSkgPDwgIiBtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVy
cmlkZToiIDw8IFdlYkNvcmU6OkZsb2F0U2l6ZShtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlk
ZSkgPDwgIl0iKTsKLQotICAgIFtzZWxmIF9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOm1pbmlt
dW1MYXlvdXRTaXplXTsKLSAgICBbc2VsZiBfc2V0TWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGU6bWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGVdOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1
dG9yZWxlYXNlKCk7CiB9CiAKLS0gKHZvaWQpX2NsZWFyT3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJz
CistICh2b2lkKV9zZXRGaW5kRGVsZWdhdGU6KGlkPF9XS0ZpbmREZWxlZ2F0ZT4pZmluZERlbGVn
YXRlCiB7Ci0gICAgX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUgPSBXVEY6Om51bGxvcHQ7Ci0gICAg
X21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlID0gV1RGOjpudWxsb3B0OworICAgIHN0YXRp
Y19jYXN0PFdlYktpdDo6RmluZENsaWVudCY+KF9wYWdlLT5maW5kQ2xpZW50KCkpLnNldERlbGVn
YXRlKGZpbmREZWxlZ2F0ZSk7CiB9CiAKLXN0YXRpYyBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6OlZp
ZXdwb3J0QXJndW1lbnRzPiB2aWV3cG9ydEFyZ3VtZW50c0Zyb21EaWN0aW9uYXJ5KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqdmlld3BvcnRBcmd1bWVudFBhaXJzLCBib29s
IHZpZXdwb3J0Rml0RW5hYmxlZCkKK3N0YXRpYyBpbmxpbmUgV2ViS2l0OjpGaW5kT3B0aW9ucyB0
b0ZpbmRPcHRpb25zKF9XS0ZpbmRPcHRpb25zIHdrRmluZE9wdGlvbnMpCiB7Ci0gICAgaWYgKCF2
aWV3cG9ydEFyZ3VtZW50UGFpcnMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50cyhXZWJDb3JlOjpW
aWV3cG9ydEFyZ3VtZW50czo6Vmlld3BvcnRNZXRhKTsKKyAgICB1bnNpZ25lZCBmaW5kT3B0aW9u
cyA9IDA7CiAKLSAgICBbdmlld3BvcnRBcmd1bWVudFBhaXJzIGVudW1lcmF0ZUtleXNBbmRPYmpl
Y3RzVXNpbmdCbG9jazptYWtlQmxvY2tQdHIoWyZdIChOU1N0cmluZyAqa2V5LCBOU1N0cmluZyAq
dmFsdWUsIEJPT0wqIHN0b3ApIHsKLSAgICAgICAgaWYgKCFba2V5IGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIGNsYXNzXV0gfHwgIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KQotICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0
aW9uIGZvcm1hdDpAIi1bV0tXZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpd
OiBLZXlzIGFuZCB2YWx1ZXMgbXVzdCBhbGwgYmUgTlNTdHJpbmdzLiJdOwotICAgICAgICBTdHJp
bmcga2V5U3RyaW5nID0ga2V5OwotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSB2YWx1ZTsK
LSAgICAgICAgV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKHZpZXdwb3J0QXJndW1lbnRzLCBr
ZXlTdHJpbmcsIHZhbHVlU3RyaW5nLCB2aWV3cG9ydEZpdEVuYWJsZWQsIFtdIChXZWJDb3JlOjpW
aWV3cG9ydEVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAg
ICAgIE5TTG9nKEAiLVtXS1dlYlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl06
IEVycm9yIHBhcnNpbmcgdmlld3BvcnQgYXJndW1lbnQ6ICVzIiwgZXJyb3JNZXNzYWdlLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICB9KTsKLSAgICB9KS5nZXQoKV07CisgICAgaWYgKHdrRmluZE9w
dGlvbnMgJiBfV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkKKyAgICAgICAgZmluZE9wdGlv
bnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKKyAgICBpZiAod2tGaW5k
T3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zQXRXb3JkU3RhcnRzKQorICAgICAgICBmaW5kT3B0aW9u
cyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzOworICAgIGlmICh3a0ZpbmRPcHRp
b25zICYgX1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCkKKyAgICAg
ICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFz
V29yZFN0YXJ0OworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNCYWNrd2Fy
ZHMpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNCYWNrd2FyZHM7
CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1dyYXBBcm91bmQpCisgICAg
ICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNXcmFwQXJvdW5kOworICAgIGlm
ICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheSkKKyAgICAgICAgZmlu
ZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dPdmVybGF5OworICAgIGlmICh3a0Zp
bmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcikKKyAgICAgICAgZmlu
ZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yOworICAgIGlm
ICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0KQorICAgICAgICBm
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodDsKKyAgICBpZiAo
d2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zTm9JbmRleENoYW5nZSkKKyAgICAgICAgZmlu
ZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc05vSW5kZXhDaGFuZ2U7CisgICAgaWYgKHdr
RmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5kZXgpCisgICAgICAg
IGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNEZXRlcm1pbmVNYXRjaEluZGV4Owog
Ci0gICAgcmV0dXJuIHZpZXdwb3J0QXJndW1lbnRzOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkZpbmRPcHRpb25zPihmaW5kT3B0aW9ucyk7CiB9CiAKLS0gKHZvaWQpX292ZXJyaWRl
Vmlld3BvcnRXaXRoQXJndW1lbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNTdHJpbmcg
Kj4gKilhcmd1bWVudHMKKy0gKHZvaWQpX2NvdW50U3RyaW5nTWF0Y2hlczooTlNTdHJpbmcgKilz
dHJpbmcgb3B0aW9uczooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNVSW50ZWdl
ciltYXhDb3VudAogewotICAgIGlmICghX3BhZ2UpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZp
ZXcgd2ViX2NvdW50U3RyaW5nTWF0Y2hlczpzdHJpbmcgb3B0aW9uczpvcHRpb25zIG1heENvdW50
Om1heENvdW50XTsKICAgICAgICAgcmV0dXJuOwotCi0gICAgX3BhZ2UtPnNldE92ZXJyaWRlVmll
d3BvcnRBcmd1bWVudHModmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeShhcmd1bWVudHMs
IF9wYWdlLT5wcmVmZXJlbmNlcygpLnZpZXdwb3J0Rml0RW5hYmxlZCgpKSk7Ci19Ci0KLS0gKFVJ
VmlldyAqKV92aWV3Rm9yRmluZFVJCi17Ci0gICAgcmV0dXJuIFtzZWxmIHZpZXdGb3Jab29taW5n
SW5TY3JvbGxWaWV3OltzZWxmIHNjcm9sbFZpZXddXTsKLX0KLQotLSAoQk9PTClfaXNEaXNwbGF5
aW5nUERGCi17Ci0gICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IFdlYkNvcmU6Ok1JTUVUeXBlUmVn
aXN0cnk6OnBkZk1JTUVUeXBlcygpKSB7Ci0gICAgICAgIENsYXNzIHByb3ZpZGVyQ2xhc3MgPSBb
W19jb25maWd1cmF0aW9uIF9jb250ZW50UHJvdmlkZXJSZWdpc3RyeV0gcHJvdmlkZXJGb3JNSU1F
VHlwZTptaW1lVHlwZV07Ci0gICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IGlzS2luZE9m
Q2xhc3M6cHJvdmlkZXJDbGFzc10pCi0gICAgICAgICAgICByZXR1cm4gWUVTOwogICAgIH0KLQot
ICAgIHJldHVybiBOTzsKLX0KLQotLSAoTlNEYXRhICopX2RhdGFGb3JEaXNwbGF5ZWRQREYKLXsK
LSAgICBpZiAoIVtzZWxmIF9pc0Rpc3BsYXlpbmdQREZdKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9kYXRhUmVwcmVzZW50YXRpb25dOwot
fQotCi0tIChOU1N0cmluZyAqKV9zdWdnZXN0ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERgotewot
ICAgIGlmICghW3NlbGYgX2lzRGlzcGxheWluZ1BERl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3N1Z2dlc3RlZEZpbGVuYW1lXTsKKyNl
bmRpZgorICAgIF9wYWdlLT5jb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCB0b0ZpbmRPcHRpb25z
KG9wdGlvbnMpLCBtYXhDb3VudCk7CiB9CiAKLS0gKF9XS1dlYlZpZXdQcmludEZvcm1hdHRlciAq
KV93ZWJWaWV3UHJpbnRGb3JtYXR0ZXIKKy0gKHZvaWQpX2ZpbmRTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVn
ZXIpbWF4Q291bnQKIHsKLSAgICBVSVZpZXdQcmludEZvcm1hdHRlciAqdmlld1ByaW50Rm9ybWF0
dGVyID0gc2VsZi52aWV3UHJpbnRGb3JtYXR0ZXI7Ci0gICAgQVNTRVJUKFt2aWV3UHJpbnRGb3Jt
YXR0ZXIgaXNLaW5kT2ZDbGFzczpbX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyIGNsYXNzXV0pOwot
ICAgIHJldHVybiAoX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyICopdmlld1ByaW50Rm9ybWF0dGVy
OwotfQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gV2hpbGUgQXBwS2l0IGNvbnRh
aW5zIGxvZ2ljIGluIE5TQmFyVGV4dEZpbmRlciB0byBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUg
ZmluZCBwYXN0ZWJvYXJkCisgICAgLy8gd2hlbiB0aGUgZmluZCBzdHJpbmcgY2hhbmdlcywgdGhp
cyAoYWxvbmcgd2l0aCB0aGUgZmluZCBwYXN0ZWJvYXJkIGl0c2VsZikgYXJlIGJvdGggbWlzc2lu
ZworICAgIC8vIGZyb20gaU9TOyB0aHVzLCBvbiBpT1MsIHdlIHVwZGF0ZSB0aGUgY3VycmVudCBm
aW5kLWluLXBhZ2Ugc3RyaW5nIGhlcmUuCisgICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdGb3JGaW5k
KHN0cmluZyk7CiAKLXN0YXRpYyBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
IHRvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0
ZSBjb250ZW50QXR0cmlidXRlKQotewotICAgIGF1dG8gZGlyZWN0aW9uID0gW1VJVmlldyB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uRm9yU2VtYW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRl
bnRBdHRyaWJ1dGVdOwotICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBVSVVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodDoKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OkxUUjsKLSAgICBjYXNlIFVJVXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0OgotICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6UlRMOworICAgIGlmIChfY3VzdG9tQ29u
dGVudFZpZXcpIHsKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfZmluZFN0cmluZzpz
dHJpbmcgb3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXZWJDb3Jl
OjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7CisjZW5kaWYKKyAgICBfcGFnZS0+
ZmluZFN0cmluZyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heENvdW50KTsKIH0K
IAotLSAodm9pZClzZXRTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGU6KFVJU2VtYW50aWNDb250ZW50
QXR0cmlidXRlKWNvbnRlbnRBdHRyaWJ1dGUKKy0gKHZvaWQpX2hpZGVGaW5kVUkKIHsKLSAgICBb
c3VwZXIgc2V0U2VtYW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVdOwotCi0g
ICAgX3BhZ2UtPnNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odG9Vc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uKGNvbnRlbnRBdHRyaWJ1dGUpKTsKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIGlmIChfY3VzdG9tQ29udGVudFZpZXcpIHsKKyAgICAgICAgW19jdXN0b21Db250
ZW50VmlldyB3ZWJfaGlkZUZpbmRVSV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KyAgICBfcGFnZS0+aGlkZUZpbmRVSSgpOwogfQogCi0jZWxzZSAvLyAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLQotI3ByYWdtYSBtYXJrIC0gbWFjT1MgV0tQcml2YXRlCi0KLS0gKEJPT0wpX2Ry
YXdzQmFja2dyb3VuZAorLSAodm9pZClfc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JJdGVtOihX
S0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5kcmF3c0Jh
Y2tncm91bmQoKTsKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybjsKKyAgICBfcGFnZS0+
cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0uX2l0ZW0pOwogfQogCi0tICh2b2lkKV9zZXRE
cmF3c0JhY2tncm91bmQ6KEJPT0wpZHJhd3NCYWNrZ3JvdW5kCistIChpZCA8X1dLSW5wdXREZWxl
Z2F0ZT4pX2lucHV0RGVsZWdhdGUKIHsKLSAgICBfaW1wbC0+c2V0RHJhd3NCYWNrZ3JvdW5kKGRy
YXdzQmFja2dyb3VuZCk7CisgICAgcmV0dXJuIF9pbnB1dERlbGVnYXRlLmdldEF1dG9yZWxlYXNl
ZCgpOwogfQogCi0tIChOU0NvbG9yICopX2JhY2tncm91bmRDb2xvcgorLSAodm9pZClfc2V0SW5w
dXREZWxlZ2F0ZTooaWQgPF9XS0lucHV0RGVsZWdhdGU+KWlucHV0RGVsZWdhdGUKIHsKLSAgICBy
ZXR1cm4gX2ltcGwtPmJhY2tncm91bmRDb2xvcigpOwotfQorICAgIF9pbnB1dERlbGVnYXRlID0g
aW5wdXREZWxlZ2F0ZTsKIAotLSAodm9pZClfc2V0QmFja2dyb3VuZENvbG9yOihOU0NvbG9yICop
YmFja2dyb3VuZENvbG9yCi17Ci0gICAgX2ltcGwtPnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3Jv
dW5kQ29sb3IpOwotfQorICAgIGNsYXNzIEZvcm1DbGllbnQgOiBwdWJsaWMgQVBJOjpGb3JtQ2xp
ZW50IHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAg
ICAgICBleHBsaWNpdCBGb3JtQ2xpZW50KFdLV2ViVmlldyAqd2ViVmlldykKKyAgICAgICAgICAg
IDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgICAgIHsKKyAgICAgICAgfQogCi0tICh2b2lkKV9z
ZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClkcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZAotewotICAgIHN0YXRpYyBCT09MIGhhc0xvZ2dlZERlcHJlY2F0aW9uV2FybmluZzsKLSAg
ICBpZiAoIWhhc0xvZ2dlZERlcHJlY2F0aW9uV2FybmluZykgewotICAgICAgICAvLyBTZWUgYnVn
IDE1NTU1MCBmb3IgZGV0YWlscy4KLSAgICAgICAgTlNMb2coQCItW1dLV2ViVmlldyBfc2V0RHJh
d3NUcmFuc3BhcmVudEJhY2tncm91bmQ6XSBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJl
IHVzZWQuIik7Ci0gICAgICAgIGhhc0xvZ2dlZERlcHJlY2F0aW9uV2FybmluZyA9IFlFUzsKLSAg
ICB9Ci0gICAgW3NlbGYgX3NldERyYXdzQmFja2dyb3VuZDohZHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmRdOwotfQorICAgICAgICB2aXJ0dWFsIH5Gb3JtQ2xpZW50KCkgeyB9CiAKLS0gKE5TVmll
dyAqKV9pbnNwZWN0b3JBdHRhY2htZW50VmlldwotewotICAgIHJldHVybiBfaW1wbC0+aW5zcGVj
dG9yQXR0YWNobWVudFZpZXcoKTsKLX0KKyAgICAgICAgdm9pZCB3aWxsU3VibWl0Rm9ybShXZWJL
aXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIFdlYktpdDo6V2ViRnJh
bWVQcm94eSYgc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8V1RGOjpTdHJpbmcs
IFdURjo6U3RyaW5nPj4mIHRleHRGaWVsZFZhbHVlcywgQVBJOjpPYmplY3QqIHVzZXJEYXRhLCBX
VEY6OkZ1bmN0aW9uPHZvaWQodm9pZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICh1c2VyRGF0YSAmJiB1c2VyRGF0YS0+dHlwZSgpICE9
IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRhKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF1c2Vy
RGF0YSB8fCB1c2VyRGF0YS0+dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRhKTsKKyAg
ICAgICAgICAgICAgICBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT5t
YXJrQ3VycmVudGx5RGlzcGF0Y2hlZE1lc3NhZ2VBc0ludmFsaWQoKTsKKyAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KIAotLSAodm9pZClfc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6KE5TVmlldyAqKW5l
d1ZpZXcKLXsKLSAgICBfaW1wbC0+c2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXcobmV3Vmlldyk7
Ci19CisgICAgICAgICAgICBhdXRvIGlucHV0RGVsZWdhdGUgPSBtX3dlYlZpZXctPl9pbnB1dERl
bGVnYXRlLmdldCgpOwogCi0tICh2b2lkKV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KF9XS092
ZXJsYXlTY3JvbGxiYXJTdHlsZSlzY3JvbGxiYXJTdHlsZQotewotICAgIF9pbXBsLT5zZXRPdmVy
bGF5U2Nyb2xsYmFyU3R5bGUodG9Db3JlU2Nyb2xsYmFyU3R5bGUoc2Nyb2xsYmFyU3R5bGUpKTsK
LX0KKyAgICAgICAgICAgIGlmICghW2lucHV0RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzp3aWxsU3VibWl0Rm9ybVZhbHVlczp1c2VyT2JqZWN0OnN1Ym1pc3Np
b25IYW5kbGVyOildKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLS0gKF9XS092ZXJsYXlTY3Jv
bGxiYXJTdHlsZSlfb3ZlcmxheVNjcm9sbGJhclN0eWxlCi17Ci0gICAgcmV0dXJuIHRvQVBJU2Ny
b2xsYmFyU3R5bGUoX2ltcGwtPm92ZXJsYXlTY3JvbGxiYXJTdHlsZSgpKTsKLX0KKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVNYXAgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTp0ZXh0RmllbGRWYWx1ZXMuc2l6ZSgpXSk7CisgICAgICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB0ZXh0RmllbGRWYWx1ZXMpCisgICAgICAgICAgICAgICAg
W3ZhbHVlTWFwIHNldE9iamVjdDpwYWlyLnNlY29uZCBmb3JLZXk6cGFpci5maXJzdF07CiAKLS0g
KEJPT0wpX3dpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gX2lt
cGwtPndpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQoKTsKLX0KKyAgICAgICAgICAgIE5T
T2JqZWN0IDxOU1NlY3VyZUNvZGluZz4gKnVzZXJPYmplY3QgPSBuaWw7CisgICAgICAgICAgICBp
ZiAoQVBJOjpEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8QVBJOjpEYXRhKj4odXNlckRhdGEpKSB7
CisgICAgICAgICAgICAgICAgYXV0byBuc0RhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0V2l0aEJ5dGVzTm9Db3B5OmNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZv
aWQqPihkYXRhLT5ieXRlcygpKSkgbGVuZ3RoOmRhdGEtPnNpemUoKSBmcmVlV2hlbkRvbmU6Tk9d
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHVuYXJjaGl2ZXIgPSBzZWN1cmVVbmFyY2hpdmVyRnJv
bURhdGEobnNEYXRhLmdldCgpKTsKKyAgICAgICAgICAgICAgICBAdHJ5IHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIGFsbG93ZWRDbGFzc2VzID0gbV93ZWJWaWV3LT5fcGFnZS0+cHJv
Y2VzcygpLnByb2Nlc3NQb29sKCkuYWxsb3dlZENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RpbmcoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPYmplY3QgPSBbdW5hcmNoaXZlciBkZWNvZGVP
YmplY3RPZkNsYXNzZXM6YWxsb3dlZENsYXNzZXMgZm9yS2V5OkAidXNlck9iamVjdCJdOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyT2JqZWN0
ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNPYmplY3QgY2xhc3NdIGZvcktl
eTpAInVzZXJPYmplY3QiXTsKKyAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBk
ZWNvZGUgdXNlciBkYXRhOiAlQCIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQogCi0tICh2b2lkKV9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVk
OihCT09MKWVuYWJsZWQKLXsKLSAgICBfaW1wbC0+c2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9u
RW5hYmxlZChlbmFibGVkKTsKLX0KKyAgICAgICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6
Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGlucHV0RGVsZWdhdGUuZ2V0KCks
IEBzZWxlY3Rvcihfd2ViVmlldzp3aWxsU3VibWl0Rm9ybVZhbHVlczp1c2VyT2JqZWN0OnN1Ym1p
c3Npb25IYW5kbGVyOikpOworICAgICAgICAgICAgW2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6bV93
ZWJWaWV3IHdpbGxTdWJtaXRGb3JtVmFsdWVzOnZhbHVlTWFwLmdldCgpIHVzZXJPYmplY3Q6dXNl
ck9iamVjdCBzdWJtaXNzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIp
XSB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVl
bkNhbGxlZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
Y2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIH0pLmdldCgpXTsKKyAgICAgICAgfQogCi0t
ICh2b2lkKXNoYXJlU2hlZXREaWREaXNtaXNzOihXS1NoYXJlU2hlZXQgKilzaGFyZVNoZWV0Ci17
Ci0gICAgX2ltcGwtPnNoYXJlU2hlZXREaWREaXNtaXNzKHNoYXJlU2hlZXQpOwotfQorICAgIHBy
aXZhdGU6CisgICAgICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3OworICAgIH07CiAKLS0gKHZvaWQp
X3NldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3I6KENHRmxvYXQpZGV2aWNlU2NhbGVGYWN0b3IK
LXsKLSAgICBfaW1wbC0+c2V0T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZh
Y3Rvcik7CisgICAgaWYgKGlucHV0RGVsZWdhdGUpCisgICAgICAgIF9wYWdlLT5zZXRGb3JtQ2xp
ZW50KG1ha2VVbmlxdWU8Rm9ybUNsaWVudD4oc2VsZikpOworICAgIGVsc2UKKyAgICAgICAgX3Bh
Z2UtPnNldEZvcm1DbGllbnQobnVsbHB0cik7CiB9CiAKLS0gKENHRmxvYXQpX292ZXJyaWRlRGV2
aWNlU2NhbGVGYWN0b3IKKy0gKEJPT0wpX2lzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZURvY3Vt
ZW50CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5vdmVycmlkZURldmljZVNjYWxlRmFjdG9yKCk7Cisg
ICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIG1haW5GcmFtZS0+aXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlRG9jdW1lbnQoKTsKKyAg
ICByZXR1cm4gTk87CiB9CiAKLS0gKHZvaWQpX3NldFRvcENvbnRlbnRJbnNldDooQ0dGbG9hdClj
b250ZW50SW5zZXQKKy0gKEJPT0wpX2lzRGlzcGxheWluZ1N0YW5kYWxvbmVNZWRpYURvY3VtZW50
CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5zZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KTsK
KyAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBy
ZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFuZGFsb25lTWVkaWFEb2N1bWVudCgpOwor
ICAgIHJldHVybiBOTzsKIH0KIAotLSAoQ0dGbG9hdClfdG9wQ29udGVudEluc2V0CistIChCT09M
KV9pc1BsYXlpbmdBdWRpbwogewotICAgIHJldHVybiBfaW1wbC0+dG9wQ29udGVudEluc2V0KCk7
CisgICAgcmV0dXJuIF9wYWdlLT5pc1BsYXlpbmdBdWRpbygpOwogfQogCi0tIChOU0NvbG9yICop
X3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcgorLSAoQk9PTClfaXNTaG93aW5nTmF2aWdhdGlv
bkdlc3R1cmVTbmFwc2hvdAogewotICAgIHJldHVybiBfaW1wbC0+cGFnZUV4dGVuZGVkQmFja2dy
b3VuZENvbG9yKCk7CisgICAgcmV0dXJuIF9wYWdlLT5pc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVy
ZVNuYXBzaG90KCk7CiB9CiAKLS0gKF9XS1JlY3RFZGdlKV9waW5uZWRTdGF0ZQorLSAoX1dLTGF5
b3V0TW9kZSlfbGF5b3V0TW9kZQogewotICAgIHJldHVybiBfaW1wbC0+cGlubmVkU3RhdGUoKTsK
KyNpZiBQTEFURk9STShNQUMpCisgICAgc3dpdGNoIChfaW1wbC0+bGF5b3V0TW9kZSgpKSB7Cisg
ICAgY2FzZSBrV0tMYXlvdXRNb2RlRml4ZWRTaXplOgorICAgICAgICByZXR1cm4gX1dLTGF5b3V0
TW9kZUZpeGVkU2l6ZTsKKyAgICBjYXNlIGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVk
RnJvbVZpZXdTY2FsZToKKyAgICAgICAgcmV0dXJuIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNv
bXB1dGVkRnJvbVZpZXdTY2FsZTsKKyAgICBjYXNlIGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNv
bXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU6CisgICAgICAgIHJldHVybiBfV0tMYXlvdXRN
b2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXplOworICAgIGNhc2Ug
a1dLTGF5b3V0TW9kZVZpZXdTaXplOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBfV0tM
YXlvdXRNb2RlVmlld1NpemU7CisgICAgfQorI2Vsc2UKKyAgICByZXR1cm4gX3BhZ2UtPnVzZUZp
eGVkTGF5b3V0KCkgPyBfV0tMYXlvdXRNb2RlRml4ZWRTaXplIDogX1dLTGF5b3V0TW9kZVZpZXdT
aXplOworI2VuZGlmCiB9CiAKLS0gKF9XS1JlY3RFZGdlKV9ydWJiZXJCYW5kaW5nRW5hYmxlZAor
LSAodm9pZClfc2V0TGF5b3V0TW9kZTooX1dLTGF5b3V0TW9kZSlsYXlvdXRNb2RlCiB7Ci0gICAg
cmV0dXJuIF9pbXBsLT5ydWJiZXJCYW5kaW5nRW5hYmxlZCgpOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBXS0xheW91dE1vZGUgd2tWaWV3TGF5b3V0TW9kZTsKKyAgICBzd2l0Y2ggKGxheW91dE1v
ZGUpIHsKKyAgICBjYXNlIF9XS0xheW91dE1vZGVGaXhlZFNpemU6CisgICAgICAgIHdrVmlld0xh
eW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRml4ZWRTaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbVZpZXdTY2FsZToKKyAgICAg
ICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJv
bVZpZXdTY2FsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBfV0tMYXlvdXRNb2RlRHluYW1p
Y1NpemVDb21wdXRlZEZyb21NaW5pbXVtRG9jdW1lbnRTaXplOgorICAgICAgICB3a1ZpZXdMYXlv
dXRNb2RlID0ga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURvY3Vt
ZW50U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBfV0tMYXlvdXRNb2RlVmlld1NpemU6
CisgICAgZGVmYXVsdDoKKyAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVW
aWV3U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIF9pbXBsLT5zZXRMYXlvdXRNb2Rl
KHdrVmlld0xheW91dE1vZGUpOworI2Vsc2UKKyAgICBfcGFnZS0+c2V0VXNlRml4ZWRMYXlvdXQo
bGF5b3V0TW9kZSA9PSBfV0tMYXlvdXRNb2RlRml4ZWRTaXplIHx8IGxheW91dE1vZGUgPT0gX1dL
TGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxlKTsKKyNlbmRpZgogfQog
Ci0tICh2b2lkKV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDooX1dLUmVjdEVkZ2Upc3RhdGUKKy0g
KENHU2l6ZSlfZml4ZWRMYXlvdXRTaXplCiB7Ci0gICAgX2ltcGwtPnNldFJ1YmJlckJhbmRpbmdF
bmFibGVkKHN0YXRlKTsKKyAgICByZXR1cm4gX3BhZ2UtPmZpeGVkTGF5b3V0U2l6ZSgpOwogfQog
Ci0tIChpZClfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1
bHQ6KF9XS0hpdFRlc3RSZXN1bHQgKiloaXRUZXN0UmVzdWx0IHdpdGhUeXBlOihfV0tJbW1lZGlh
dGVBY3Rpb25UeXBlKXR5cGUgdXNlckRhdGE6KGlkPE5TU2VjdXJlQ29kaW5nPil1c2VyRGF0YQor
LSAodm9pZClfc2V0Rml4ZWRMYXlvdXRTaXplOihDR1NpemUpZml4ZWRMYXlvdXRTaXplCiB7Ci0g
ICAgcmV0dXJuIG5pbDsKKyAgICBfcGFnZS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYkNvcmU6OmV4
cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoZml4ZWRMYXlvdXRTaXplKSkpOwogfQog
Ci0tICh2b2lkKV9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6KEJPT0wpYXV0
b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzCistICh2b2lkKV9zZXRCYWNrZ3JvdW5kRXh0
ZW5kc0JleW9uZFBhZ2U6KEJPT0wpYmFja2dyb3VuZEV4dGVuZHMKIHsKLSAgICBfaW1wbC0+c2V0
QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKGF1dG9tYXRpY2FsbHlBZGp1c3RzQ29u
dGVudEluc2V0cyk7CisgICAgX3BhZ2UtPnNldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShi
YWNrZ3JvdW5kRXh0ZW5kcyk7CiB9CiAKLS0gKEJPT0wpX2F1dG9tYXRpY2FsbHlBZGp1c3RzQ29u
dGVudEluc2V0cworLSAoQk9PTClfYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlCiB7Ci0gICAg
cmV0dXJuIF9pbXBsLT5hdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMoKTsKKyAgICBy
ZXR1cm4gX3BhZ2UtPmJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZSgpOwogfQogCi0tIChDR0Zs
b2F0KV9taW5pbXVtTGF5b3V0V2lkdGgKKy0gKENHRmxvYXQpX3ZpZXdTY2FsZQogewotICAgIHJl
dHVybiBfcGFnZS0+bWluaW11bVNpemVGb3JBdXRvTGF5b3V0KCkud2lkdGgoKTsKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgcmV0dXJuIF9wYWdlLT52aWV3U2NhbGVGYWN0b3IoKTsKKyNlbHNlCisg
ICAgcmV0dXJuIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKTsKKyNlbmRpZgogfQogCi0t
ICh2b2lkKV9zZXRNaW5pbXVtTGF5b3V0V2lkdGg6KENHRmxvYXQpd2lkdGgKKy0gKHZvaWQpX3Nl
dFZpZXdTY2FsZTooQ0dGbG9hdCl2aWV3U2NhbGUKIHsKLSAgICBCT09MIGV4cGFuZHNUb0ZpdCA9
IHdpZHRoID4gMDsKLQotICAgIF9wYWdlLT5zZXRNaW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQoV2Vi
Q29yZTo6SW50U2l6ZSh3aWR0aCwgMCkpOwotICAgIF9wYWdlLT5zZXRNYWluRnJhbWVJc1Njcm9s
bGFibGUoIWV4cGFuZHNUb0ZpdCk7CisgICAgaWYgKHZpZXdTY2FsZSA8PSAwIHx8IGlzbmFuKHZp
ZXdTY2FsZSkgfHwgaXNpbmYodmlld1NjYWxlKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNl
Ok5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlZpZXcgc2NhbGUgc2hvdWxkIGJl
IGEgcG9zaXRpdmUgbnVtYmVyIl07CiAKLSAgICBfaW1wbC0+c2V0Q2xpcHNUb1Zpc2libGVSZWN0
KGV4cGFuZHNUb0ZpdCk7Ci19CisjaWYgUExBVEZPUk0oTUFDKQorICAgIF9pbXBsLT5zZXRWaWV3
U2NhbGUodmlld1NjYWxlKTsKKyNlbHNlCisgICAgaWYgKF9wYWdlLT5sYXlvdXRTaXplU2NhbGVG
YWN0b3IoKSA9PSB2aWV3U2NhbGUpCisgICAgICAgIHJldHVybjsKIAotLSAoQk9PTClfc2hvdWxk
RXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQKLXsKLSAgICByZXR1cm4gX2lt
cGwtPnNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQoKTsKKyAgICBfcGFnZS0+
c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uVmlld0xheW91dFNpemUoW3NlbGYgYWN0aXZlVmlld0xh
eW91dFNpemU6c2VsZi5ib3VuZHNdLCB2aWV3U2NhbGUsIF9wYWdlLT5taW5pbXVtRWZmZWN0aXZl
RGV2aWNlV2lkdGgoKSk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0U2hvdWxkRXhwYW5kQ29u
dGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQ6KEJPT0wpc2hvdWxkRXhwYW5kCistICh2b2lk
KV9zZXRNaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGg6KENHRmxvYXQpbWluaW11bUVmZmVjdGl2
ZURldmljZVdpZHRoCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5zZXRTaG91bGRFeHBhbmRUb1ZpZXdI
ZWlnaHRGb3JBdXRvTGF5b3V0KHNob3VsZEV4cGFuZCk7Ci19CisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBpZiAoX3BhZ2UtPm1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpID09IG1p
bmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCkKKyAgICAgICAgcmV0dXJuOwogCi0tIChCT09MKV9h
bHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcgotewotICAgIHJldHVybiBfcGFnZS0+YWx3YXlz
U2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoKTsKKyAgICBfcGFnZS0+c2V0Vmlld3BvcnRDb25maWd1
cmF0aW9uVmlld0xheW91dFNpemUoW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3Vu
ZHNdLCBfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCksIG1pbmltdW1FZmZlY3RpdmVEZXZp
Y2VXaWR0aCk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0QWx3YXlzU2hvd3NIb3Jpem9udGFs
U2Nyb2xsZXI6KEJPT0wpYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIKKy0gKENHRmxvYXQp
X21pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aAogewotICAgIF9wYWdlLT5zZXRBbHdheXNTaG93
c0hvcml6b250YWxTY3JvbGxlcihhbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcik7CisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICByZXR1cm4gX3BhZ2UtPm1pbmltdW1FZmZlY3RpdmVE
ZXZpY2VXaWR0aCgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCi0tIChCT09M
KV9hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKLXsKLSAgICByZXR1cm4gX3BhZ2UtPmFsd2F5
c1Nob3dzVmVydGljYWxTY3JvbGxlcigpOwotfQorI3ByYWdtYSBtYXJrIC0gc2Nyb2xsUGVyZm9y
bWFuY2VEYXRhCiAKLS0gKHZvaWQpX3NldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcjooQk9P
TClhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKKy0gKHZvaWQpX3NldFNjcm9sbFBlcmZvcm1h
bmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkOihCT09MKWVuYWJsZWQKIHsKLSAgICBfcGFnZS0+c2V0
QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKGFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcik7
CisgICAgX3BhZ2UtPnNldFNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkKGVu
YWJsZWQpOwogfQogCi0tIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFBy
aW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8KKy0gKEJPT0wpX3Njcm9sbFBlcmZvcm1h
bmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkCiB7Ci0gICAgcmV0dXJuIFtzZWxmIHByaW50T3BlcmF0
aW9uV2l0aFByaW50SW5mbzpwcmludEluZm9dOworICAgIHJldHVybiBfcGFnZS0+c2Nyb2xsUGVy
Zm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoKTsKIH0KIAotLSAoTlNQcmludE9wZXJhdGlv
biAqKV9wcmludE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZv
IGZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lSGFuZGxlCistIChOU0FycmF5ICopX3Nj
cm9sbFBlcmZvcm1hbmNlRGF0YQogewotICAgIGlmIChhdXRvKiB3ZWJGcmFtZVByb3h5ID0gX3Bh
Z2UtPnByb2Nlc3MoKS53ZWJGcmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQoZnJh
bWVIYW5kbGUuX2ZyYW1lSUQpKSkKLSAgICAgICAgcmV0dXJuIF9pbXBsLT5wcmludE9wZXJhdGlv
bldpdGhQcmludEluZm8ocHJpbnRJbmZvLCAqd2ViRnJhbWVQcm94eSk7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBpZiAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJm
b3JtYW5jZURhdGEqIHNjcm9sbFBlcmZEYXRhID0gX3BhZ2UtPnNjcm9sbGluZ1BlcmZvcm1hbmNl
RGF0YSgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsUGVyZkRhdGEtPmRhdGEoKTsKKyNlbmRpZgog
ICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpc2V0VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbjooTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKXVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24KLXsKLSAgICBbc3VwZXIgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp1
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uXTsKLQotICAgIF9pbXBsLT5zZXRVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uKHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pOwotfQorI3By
YWdtYSBtYXJrIC0gTWVkaWEgcGxheWJhY2sgcmVzdHJpY3Rpb25zCiAKLS0gKEJPT0wpX3dhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworLSAoQk9PTClfYWxsb3dzTWVkaWFEb2N1bWVudElu
bGluZVBsYXliYWNrCiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIpCi0gICAgcmV0dXJuIF9pbXBsLT5j
bGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKTsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIHJldHVybiBfcGFnZS0+YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXli
YWNrKCk7CiAjZWxzZQogICAgIHJldHVybiBOTzsKICNlbmRpZgogfQogCi0tICh2b2lkKV9zZXRX
YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29u
dHJvbHNWaWV3CistICh2b2lkKV9zZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2s6
KEJPT0wpZmxhZwogewotI2lmIEhBVkUoVE9VQ0hfQkFSKQotICAgIF9pbXBsLT5zZXRDbGllbnRX
YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcod2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3KTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIF9wYWdlLT5zZXRBbGxvd3NNZWRp
YURvY3VtZW50SW5saW5lUGxheWJhY2soZmxhZyk7CiAjZW5kaWYKIH0KIAotLSAoaWQpX21lZGlh
UGxheWJhY2tDb250cm9sc1ZpZXcKKy0gKHZvaWQpX3NldEZ1bGxzY3JlZW5EZWxlZ2F0ZTooaWQ8
X1dLRnVsbHNjcmVlbkRlbGVnYXRlPilkZWxlZ2F0ZQogewotI2lmIEhBVkUoVE9VQ0hfQkFSKQot
ICAgIHJldHVybiBfaW1wbC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkg
PyBfaW1wbC0+bWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpIDogbmlsOwotI2Vsc2UKLSAgICBy
ZXR1cm4gbmlsOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoaXM8V2ViS2l0
OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKSkKKyAgICAgICAg
ZG93bmNhc3Q8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVu
dCgpKS5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7CiAjZW5kaWYKIH0KIAotLy8gVGhpcyBtZXRob2Qg
aXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0tICh2b2lkKV9hZGRNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OihpZCltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Ci17Ci19Ci0KLS8vIFRo
aXMgbWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotLSAodm9pZClfcmVtb3Zl
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldwotewotfQotCi0tICh2b2lkKV9wcmVwYXJlRm9yTW92
ZVRvV2luZG93OihOU1dpbmRvdyAqKXRhcmdldFdpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBfaW1wbC0+cHJl
cGFyZUZvck1vdmVUb1dpbmRvdyh0YXJnZXRXaW5kb3csIFtjb21wbGV0aW9uSGFuZGxlckNvcHld
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZv
aWQpX3NldFRodW1ibmFpbFZpZXc6KF9XS1RodW1ibmFpbFZpZXcgKil0aHVtYm5haWxWaWV3Ci17
Ci0gICAgX2ltcGwtPnNldFRodW1ibmFpbFZpZXcodGh1bWJuYWlsVmlldyk7Ci19Ci0KLS0gKF9X
S1RodW1ibmFpbFZpZXcgKilfdGh1bWJuYWlsVmlldwotewotICAgIGlmICghX2ltcGwpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIF9pbXBsLT50aHVtYm5haWxWaWV3KCk7Ci19Ci0K
LS0gKHZvaWQpX3NldElnbm9yZXNBbGxFdmVudHM6KEJPT0wpaWdub3Jlc0FsbEV2ZW50cwotewot
ICAgIF9pbXBsLT5zZXRJZ25vcmVzQWxsRXZlbnRzKGlnbm9yZXNBbGxFdmVudHMpOwotfQotCi0t
IChCT09MKV9pZ25vcmVzQWxsRXZlbnRzCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5pZ25vcmVzQWxs
RXZlbnRzKCk7Ci19Ci0KLS0gKE5TSW50ZWdlcilfc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcKKy0g
KGlkPF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZT4pX2Z1bGxzY3JlZW5EZWxlZ2F0ZQogewotICAgIHJl
dHVybiBfaW1wbC0+c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKTsKLX0KLQorI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoaXM8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFn
ZS0+ZnVsbHNjcmVlbkNsaWVudCgpKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdDo6
RnVsbHNjcmVlbkNsaWVudD4oX3BhZ2UtPmZ1bGxzY3JlZW5DbGllbnQoKSkuZGVsZWdhdGUoKS5h
dXRvcmVsZWFzZSgpOwogI2VuZGlmCi0KLUBlbmQKLQotI3VuZGVmIEZPUldBUkRfQUNUSU9OX1RP
X1dLQ09OVEVOVFZJRVcKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLQotQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoRnVsbFNjcmVlbkFQSV9Q
cml2YXRlKQotCi0tIChCT09MKWhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCi17Ci0gICAg
cmV0dXJuICEhX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOworICAgIHJldHVybiBuaWw7CiB9
CiAKLS0gKHZvaWQpY2xvc2VGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgorLSAoQk9PTClfaXNJ
bkZ1bGxzY3JlZW4KIHsKLSAgICBpZiAoIV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBjbG9zZV07
Ci0gICAgX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyID0gbnVsbHB0cjsKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisgICAgcmV0dXJuIF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpICYm
IF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5pc0Z1bGxTY3JlZW4oKTsKKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLV2Vi
VmlldyAoRnVsbFNjcmVlbkFQSV9JbnRlcm5hbCkKLQotLSAoV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciAqKWZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCistIChfV0tNZWRpYUNhcHR1cmVT
dGF0ZSlfbWVkaWFDYXB0dXJlU3RhdGUKIHsKLSAgICBpZiAoIV9mdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcikKLSAgICAgICAgX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyID0gYWRvcHROUyhb
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpzZWxm
XSk7Ci0KLSAgICByZXR1cm4gX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmdldCgpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvV0tNZWRpYUNhcHR1cmVTdGF0ZShfcGFnZS0+bWVkaWFTdGF0ZUZs
YWdzKCkpOwogfQogCi1AZW5kCi0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQ
TEFURk9STShJT1NfRkFNSUxZKQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1AaW1wbGVtZW50YXRp
b24gV0tXZWJWaWV3IChXS0lCQWN0aW9ucykKLQotLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZh
Y2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQorLSAodm9pZClf
c2V0TWVkaWFDYXB0dXJlRW5hYmxlZDooQk9PTCllbmFibGVkCiB7Ci0gICAgU0VMIGFjdGlvbiA9
IGl0ZW0uYWN0aW9uOwotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoZ29CYWNrOikpCi0g
ICAgICAgIHJldHVybiAhIV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5iYWNrSXRlbSgpOwotCi0g
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoZ29Gb3J3YXJkOikpCi0gICAgICAgIHJldHVybiAh
IV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOwotCi0gICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3Ioc3RvcExvYWRpbmc6KSkgewotICAgICAgICAvLyBGSVhNRTogUmV0dXJu
IG5vIGlmIHdlJ3JlIHN0b3BwZWQuCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotCi0gICAg
aWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocmVsb2FkOikgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihy
ZWxvYWRGcm9tT3JpZ2luOikpIHsKLSAgICAgICAgLy8gRklYTUU6IFJldHVybiBubyBpZiB3ZSdy
ZSBsb2FkaW5nLgotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLQotICAgIHJldHVybiBfaW1w
bC0+dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbShpdGVtKTsKKyAgICBfcGFnZS0+c2V0TWVkaWFD
YXB0dXJlRW5hYmxlZChlbmFibGVkKTsKIH0KIAotLSAoSUJBY3Rpb24pZ29CYWNrOihpZClzZW5k
ZXIKKy0gKEJPT0wpX21lZGlhQ2FwdHVyZUVuYWJsZWQKIHsKLSAgICBbc2VsZiBnb0JhY2tdOwor
ICAgIHJldHVybiBfcGFnZS0+bWVkaWFDYXB0dXJlRW5hYmxlZCgpOwogfQogCi0tIChJQkFjdGlv
bilnb0ZvcndhcmQ6KGlkKXNlbmRlcgorLSAodm9pZClfc2V0UGFnZU11dGVkOihfV0tNZWRpYU11
dGVkU3RhdGUpbXV0ZWRTdGF0ZQogewotICAgIFtzZWxmIGdvRm9yd2FyZF07Ci19CisgICAgV2Vi
Q29yZTo6TWVkaWFQcm9kdWNlcjo6TXV0ZWRTdGF0ZUZsYWdzIGNvcmVTdGF0ZSA9IFdlYkNvcmU6
Ok1lZGlhUHJvZHVjZXI6Ok5vbmVNdXRlZDsKIAotLSAoSUJBY3Rpb24pcmVsb2FkOihpZClzZW5k
ZXIKLXsKLSAgICBbc2VsZiByZWxvYWRdOwotfQorICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVk
aWFBdWRpb011dGVkKQorICAgICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNl
cjo6QXVkaW9Jc011dGVkOworICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVkaWFDYXB0dXJlRGV2
aWNlc011dGVkKQorICAgICAgICBjb3JlU3RhdGUgfD0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6
QXVkaW9BbmRWaWRlb0NhcHR1cmVJc011dGVkOworICAgIGlmIChtdXRlZFN0YXRlICYgX1dLTWVk
aWFTY3JlZW5DYXB0dXJlTXV0ZWQpCisgICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpTY3JlZW5DYXB0dXJlSXNNdXRlZDsKIAotLSAoSUJBY3Rpb24pcmVsb2FkRnJv
bU9yaWdpbjooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYgcmVsb2FkRnJvbU9yaWdpbl07CisgICAg
X3BhZ2UtPnNldE11dGVkKGNvcmVTdGF0ZSk7CiB9CiAKLS0gKElCQWN0aW9uKXN0b3BMb2FkaW5n
OihpZClzZW5kZXIKKy0gKHZvaWQpX3JlbW92ZURhdGFEZXRlY3RlZExpbmtzOihkaXNwYXRjaF9i
bG9ja190KWNvbXBsZXRpb24KIHsKLSAgICBfcGFnZS0+c3RvcExvYWRpbmcoKTsKKyNpZiBFTkFC
TEUoREFUQV9ERVRFQ1RJT04pCisgICAgX3BhZ2UtPnJlbW92ZURhdGFEZXRlY3RlZExpbmtzKFtj
b21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdlID0gbWFrZVdlYWtQdHIo
X3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7CisgICAgICAgIGlmIChwYWdlKQorICAgICAg
ICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQpOworICAgICAgICBpZiAo
Y29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKKyAgICB9KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworI2VuZGlmCiB9CiAKLUBlbmQKLQotI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1AaW1wbGVtZW50
YXRpb24gV0tXZWJWaWV3IChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIpCi0KLS0gKENsYXNzKV9w
cmludEZvcm1hdHRlckNsYXNzCisvLyBFeGVjdXRlIHRoZSBzdXBwbGllZCBibG9jayBhZnRlciB0
aGUgbmV4dCB0cmFuc2FjdGlvbiBmcm9tIHRoZSBXZWJQcm9jZXNzLgorLSAodm9pZClfZG9BZnRl
ck5leHRQcmVzZW50YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCiB7Ci0g
ICAgcmV0dXJuIFtfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIgY2xhc3NdOworICAgIFtzZWxmIF9p
bnRlcm5hbERvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRX
YWl0aW5nRm9yUGFpbnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107
CiB9CiAKLS0gKGlkIDxfV0tXZWJWaWV3UHJpbnRQcm92aWRlcj4pX3ByaW50UHJvdmlkZXIKKy0g
KHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JQYWlu
dGluZzoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sKIHsKLSAgICBpZCBwcmludFByb3ZpZGVy
ID0gX2N1c3RvbUNvbnRlbnRWaWV3ID8gX2N1c3RvbUNvbnRlbnRWaWV3LmdldCgpIDogX2NvbnRl
bnRWaWV3LmdldCgpOwotICAgIGlmIChbcHJpbnRQcm92aWRlciBjb25mb3Jtc1RvUHJvdG9jb2w6
QHByb3RvY29sKF9XS1dlYlZpZXdQcmludFByb3ZpZGVyKV0pCi0gICAgICAgIHJldHVybiBwcmlu
dFByb3ZpZGVyOwotICAgIHJldHVybiBuaWw7CisgICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5l
eHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGlu
ZzpZRVMgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpOT107CiB9CiAKIEBlbmQKLSNl
bmRpZgogCiBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS0RlcHJlY2F0ZWQpCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5h
bC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFs
LmgKaW5kZXggOGEyODdlZjcyMGE4MjliYWM1ZGU5OWJjMTFkZTcwMTQxYzI0ZThhMy4uNmNiOTgz
ZjYwNTQwNmIzMzRhMzI1YWYyZTVhNmZkYzM5NGY4YzAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvV2Vha09iakNQdHIuaD4KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisjaW1wb3J0ICJEeW5hbWljVmlld3BvcnRTaXplVXBkYXRlLmgiCiAjaW1wb3J0
ICJVSUtpdFNQSS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgogI2ltcG9ydCAiV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLmgiCkBAIC02NSw5ICs2NiwxMiBAQCBjbGFzcyBBdHRhY2htZW50
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGVudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDog
Ym9vbDsKK2NsYXNzIEljb25Mb2FkaW5nRGVsZWdhdGU7CitjbGFzcyBOYXZpZ2F0aW9uU3RhdGU7
CiBjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3Mg
V2ViUGFnZVByb3h5OworY2xhc3MgVUlEZWxlZ2F0ZTsKIHN0cnVjdCBQcmludEluZm87CiAjaWYg
UExBVEZPUk0oTUFDKQogY2xhc3MgV2ViVmlld0ltcGw7CkBAIC04MCwyMiArODQsNDUgQEAgY2xh
c3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OworQGNsYXNzIFdLU2FmZUJyb3dzaW5nV2FybmluZzsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiBAY2xhc3MgV0tTY3JvbGxWaWV3OwogQGNsYXNzIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXI7CitAcHJvdG9jb2wgV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyOworI2VuZGlmCisKKyNp
ZiBQTEFURk9STShNQUMpCitAY2xhc3MgV0tUZXh0RmluZGVyQ2xpZW50OwogI2VuZGlmCisKIEBw
cm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CitAcHJvdG9jb2wgX1dLSW5wdXRE
ZWxlZ2F0ZTsKIAogQGludGVyZmFjZSBXS1dlYlZpZXcgKCkgV0tfV0VCX1ZJRVdfUFJPVE9DT0xT
IHsKIAogQHBhY2thZ2UKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gX2Nv
bmZpZ3VyYXRpb247CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfcGFnZTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZT4gX25hdmlnYXRpb25T
dGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpVSURlbGVnYXRlPiBfdWlEZWxlZ2F0
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpJY29uTG9hZGluZ0RlbGVnYXRlPiBfaWNv
bkxvYWRpbmdEZWxlZ2F0ZTsKKwogICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU+PiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOworICAgIFdlYWtPYmpDUHRy
PGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CisKKyAgICBSZXRhaW5QdHI8
V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfc2FmZUJyb3dzaW5nV2FybmluZzsKKwogICAgIE9wdGlv
bmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRpb25Gb3JU
ZXN0aW5nOwogCisgICAgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBfc2VsZWN0aW9uQXR0cmlidXRl
czsKKyAgICBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9n
cmVzc0V2ZW50czsKKyAgICBCT09MIF91c2VQbGF0Zm9ybUZpbmRVSTsKKwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpXZWJWaWV3SW1wbD4gX2ltcGw7Cisg
ICAgUmV0YWluUHRyPFdLVGV4dEZpbmRlckNsaWVudD4gX3RleHRGaW5kZXJDbGllbnQ7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMDgsMTAzICsxMzUsMTA4IEBAIGNs
YXNzIFZpZXdHZXN0dXJlQ29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcj4gX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwogI2VuZGlmCiAKKyAg
ICBSZXRhaW5QdHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3Ry
eTsKKworICAgIE9wdGlvbmFsPENHU2l6ZT4gX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRTaXplPiBfbGFzdFNlbnRWaWV3TGF5b3V0U2l6ZTsKKyAg
ICBPcHRpb25hbDxDR1NpemU+IF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTsKKyAgICBP
cHRpb25hbDxXZWJDb3JlOjpGbG9hdFNpemU+IF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6
ZTsKICAgICBDR1JlY3QgX2lucHV0Vmlld0JvdW5kczsKLSNlbmRpZgotfQogCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLS0gKHZvaWQpX3Byb2Nlc3NEaWRFeGl0OwotLSAodm9pZClfcHJvY2Vz
c1dpbGxTd2FwOwotLSAodm9pZClfZGlkUmVsYXVuY2hQcm9jZXNzOworICAgIENHRmxvYXQgX3Zp
ZXdwb3J0TWV0YVRhZ1dpZHRoOworICAgIEJPT0wgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhw
bGljaXQ7CisgICAgQk9PTCBfdmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50Owor
ICAgIENHRmxvYXQgX2luaXRpYWxTY2FsZUZhY3RvcjsKKyAgICBCT09MIF9mYXN0Q2xpY2tpbmdJ
c0Rpc2FibGVkOwogCi0tIChVSVZpZXcgKilfY3VycmVudENvbnRlbnRWaWV3OworICAgIEJPT0wg
X2FsbG93c0xpbmtQcmV2aWV3OwogCi0tICh2b2lkKV9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1l
OwotLSAodm9pZClfZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbjsKLS0gKHZvaWQpX2xheWVyVHJl
ZUNvbW1pdENvbXBsZXRlOworICAgIFVJRWRnZUluc2V0cyBfb2JzY3VyZWRJbnNldHM7CisgICAg
Qk9PTCBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzOworICAgIEJPT0wgX2lzQ2hhbmdpbmdPYnNjdXJl
ZEluc2V0c0ludGVyYWN0aXZlbHk7CiAKLS0gKHZvaWQpX2NvdWxkTm90UmVzdG9yZVBhZ2VTdGF0
ZTsKLS0gKHZvaWQpX3Jlc3RvcmVQYWdlU2Nyb2xsUG9zaXRpb246KE9wdGlvbmFsPFdlYkNvcmU6
OkZsb2F0UG9pbnQ+KXNjcm9sbFBvc2l0aW9uIHNjcm9sbE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQ
b2ludClzY3JvbGxPcmlnaW4gcHJldmlvdXNPYnNjdXJlZEluc2V0OihXZWJDb3JlOjpGbG9hdEJv
eEV4dGVudClpbnNldHMgc2NhbGU6KGRvdWJsZSlzY2FsZTsKLS0gKHZvaWQpX3Jlc3RvcmVQYWdl
U3RhdGVUb1Vub2JzY3VyZWRDZW50ZXI6KE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+KWNl
bnRlciBzY2FsZTooZG91YmxlKXNjYWxlOyAvLyBGSVhNRTogbmVlZHMgc2Nyb2xsIG9yaWdpbj8K
KyAgICBVSUVkZ2VJbnNldHMgX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKKyAgICBCT09MIF9o
YXZlU2V0VW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzOworICAgIEJPT0wgX2F2b2lkc1Vuc2FmZUFy
ZWE7CisgICAgVUlSZWN0RWRnZSBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVh
OwogCi0tIChSZWZQdHI8V2ViS2l0OjpWaWV3U25hcHNob3Q+KV90YWtlVmlld1NuYXBzaG90Owor
ICAgIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU7
CisgICAgQk9PTCBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb247CisgICAgT3B0aW9uYWw8
aW50MzJfdD4gX2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb247CiAKLS0gKHZvaWQpX3Njcm9sbFRv
Q29udGVudFNjcm9sbFBvc2l0aW9uOihXZWJDb3JlOjpGbG9hdFBvaW50KXNjcm9sbFBvc2l0aW9u
IHNjcm9sbE9yaWdpbjooV2ViQ29yZTo6SW50UG9pbnQpc2Nyb2xsT3JpZ2luOwotLSAoQk9PTClf
c2Nyb2xsVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBvcmlnaW46KFdlYkNv
cmU6OkZsb2F0UG9pbnQpb3JpZ2luIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11
bVNjcm9sbERpc3RhbmNlOworICAgIEJPT0wgX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQ7CiAK
LS0gKGRvdWJsZSlfaW5pdGlhbFNjYWxlRmFjdG9yOwotLSAoZG91YmxlKV9jb250ZW50Wm9vbVNj
YWxlOworICAgIEJPT0wgX2hhc0NvbW1pdHRlZExvYWRGb3JNYWluRnJhbWU7CisgICAgQk9PTCBf
bmVlZHNSZXNldFZpZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZTsKKyAgICBXZWJL
aXQ6OlRyYW5zYWN0aW9uSUQgX2ZpcnN0UGFpbnRBZnRlckNvbW1pdExvYWRUcmFuc2FjdGlvbklE
OworICAgIFdlYktpdDo6VHJhbnNhY3Rpb25JRCBfbGFzdFRyYW5zYWN0aW9uSUQ7CisgICAgV2Vi
S2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
OworICAgIFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEIF9jdXJyZW50RHluYW1p
Y1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEOworICAgIENBVHJhbnNmb3JtM0QgX3Jlc2l6ZUFuaW1hdGlv
blRyYW5zZm9ybUFkanVzdG1lbnRzOworICAgIENHRmxvYXQgX2FuaW1hdGVkUmVzaXplT3JpZ2lu
YWxDb250ZW50V2lkdGg7CisgICAgUmV0YWluUHRyPFVJVmlldz4gX3Jlc2l6ZUFuaW1hdGlvblZp
ZXc7CisgICAgQ0dGbG9hdCBfbGFzdEFkanVzdG1lbnRGb3JTY3JvbGxlcjsKKyAgICBPcHRpb25h
bDxDR1JlY3Q+IF9mcm96ZW5WaXNpYmxlQ29udGVudFJlY3Q7CisgICAgT3B0aW9uYWw8Q0dSZWN0
PiBfZnJvemVuVW5vYnNjdXJlZENvbnRlbnRSZWN0OwogCi0tIChkb3VibGUpX3RhcmdldENvbnRl
bnRab29tU2NhbGVGb3JSZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXRhcmdldFJlY3Qg
Y3VycmVudFNjYWxlOihkb3VibGUpY3VycmVudFNjYWxlIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0
RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxl
Oihkb3VibGUpbWF4aW11bVNjYWxlOwotLSAodm9pZClfem9vbVRvRm9jdXNSZWN0Oihjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKWZvY3VzZWRFbGVtZW50UmVjdCBzZWxlY3Rpb25SZWN0Oihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKXNlbGVjdGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMg
aW5zaWRlRml4ZWQ6KEJPT0wpaW5zaWRlRml4ZWQgZm9udFNpemU6KGZsb2F0KWZvbnRTaXplIG1p
bmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhp
bXVtU2NhbGUgYWxsb3dTY2FsaW5nOihCT09MKWFsbG93U2NhbGluZyBmb3JjZVNjcm9sbDooQk9P
TClmb3JjZVNjcm9sbDsKLS0gKEJPT0wpX3pvb21Ub1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0
YXJnZXRSZWN0IHdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGZpdEVudGly
ZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2Nh
bGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIG1pbmltdW1TY3JvbGxEaXN0YW5j
ZTooZmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlOwotLSAodm9pZClfem9vbU91dFdpdGhPcmln
aW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkOwot
LSAodm9pZClfem9vbVRvSW5pdGlhbFNjYWxlV2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2lu
dClvcmlnaW4gYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQ7Ci0tICh2b2lkKV9kaWRGaW5pc2hTY3Jv
bGxpbmc7CisgICAgQk9PTCBfY29tbWl0RGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uOworICAgIE9w
dGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+IF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmU7CisgICAg
V2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQgX29ic2N1cmVkSW5zZXRzV2hlblNhdmVkOwogCi0tICh2
b2lkKV9zZXRIYXNDdXN0b21Db250ZW50VmlldzooQk9PTCloYXNDdXN0b21Db250ZW50VmlldyBs
b2FkZWRNSU1FVHlwZTooY29uc3QgV1RGOjpTdHJpbmcmKW1pbWVUeXBlOwotLSAodm9pZClfZGlk
RmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlkZXJXaXRoU3VnZ2VzdGVkRmls
ZW5hbWU6KGNvbnN0IFdURjo6U3RyaW5nJilzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhOihOU0RhdGEg
KilkYXRhOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+IF91bm9ic2N1cmVkQ2Vu
dGVyVG9SZXN0b3JlOworICAgIE9wdGlvbmFsPFdlYktpdDo6VHJhbnNhY3Rpb25JRD4gX2ZpcnN0
VHJhbnNhY3Rpb25JREFmdGVyUGFnZVJlc3RvcmU7CisgICAgZG91YmxlIF9zY2FsZVRvUmVzdG9y
ZTsKIAotLSAodm9pZClfd2lsbEludm9rZVVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2s7Ci0t
ICh2b2lkKV9kaWRJbnZva2VVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrOworICAgIEJPT0wg
X2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOwogCi0tICh2b2lkKV9zY2hlZHVs
ZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZTsKKyAgICBSZXRhaW5QdHI8VUlWaWV3IDxXS1dlYlZp
ZXdDb250ZW50UHJvdmlkZXI+PiBfY3VzdG9tQ29udGVudFZpZXc7CisgICAgUmV0YWluUHRyPFVJ
Vmlldz4gX2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3OwogCi0tICh2b2lkKV9kaWRDb21w
bGV0ZUFuaW1hdGVkUmVzaXplOworICAgIFJldGFpblB0cjxOU1RpbWVyPiBfZW5jbG9zaW5nU2Ny
b2xsVmlld1Njcm9sbFRpbWVyOworICAgIEJPT0wgX2RpZFNjcm9sbFNpbmNlTGFzdFRpbWVyRmly
ZTsKIAotLSAodm9pZClfZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWU7Ci0tICh2
b2lkKV9kaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lOwotLSAodm9pZClfZGlkRmFpbExvYWRGb3JN
YWluRnJhbWU7Ci0tICh2b2lkKV9kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1l
OihXZWJLaXQ6OlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKW5hdmlnYXRpb25UeXBlOworICAg
IFdlYkNvcmU6OkNvbG9yIF9zY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yOwogCi0tIChCT09MKV9p
c1Nob3dpbmdWaWRlb1BpY3R1cmVJblBpY3R1cmU7Ci0tIChCT09MKV9tYXlBdXRvbWF0aWNhbGx5
U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZTsKKyAgICAvLyBUaGlzIHZhbHVlIHRyYWNrcyB0aGUg
Y3VycmVudCBhZGp1c3RtZW50IGFkZGVkIHRvIHRoZSBib3R0b20gaW5zZXQgZHVlIHRvIHRoZSBr
ZXlib2FyZCBzbGlkaW5nIG91dCBmcm9tIHRoZSBib3R0b20KKyAgICAvLyB3aGVuIGNvbXB1dGlu
ZyBvYnNjdXJlZCBjb250ZW50IGluc2V0cy4gVGhpcyBpcyB1c2VkIHdoZW4gdXBkYXRpbmcgdGhl
IHZpc2libGUgY29udGVudCByZWN0cyB3aGVyZSB3ZSBzaG91bGQgbm90CisgICAgLy8gaW5jbHVk
ZSB0aGlzIGFkanVzdG1lbnQuCisgICAgQ0dGbG9hdCBfdG90YWxTY3JvbGxWaWV3Qm90dG9tSW5z
ZXRBZGp1c3RtZW50Rm9yS2V5Ym9hcmQ7CisgICAgQk9PTCBfY3VycmVudGx5QWRqdXN0aW5nU2Ny
b2xsVmlld0luc2V0c0ZvcktleWJvYXJkOwogCi0tICh2b2lkKV91cGRhdGVTY3JvbGxWaWV3QmFj
a2dyb3VuZDsKKyAgICBCT09MIF9pbnZva2luZ1VJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2s7
CisgICAgQk9PTCBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVUlTY3JvbGxW
aWV3RGVsZWdhdGVDYWxsYmFjazsKKyAgICBCT09MIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250
ZW50UmVjdHNGb3JBbnlSZWFzb247CisgICAgQk9PTCBfZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29u
dGVudFJlY3RzRm9yVW5zdGFibGVTY3JvbGxWaWV3OwogCi0tICh2b2lkKV92aWRlb0NvbnRyb2xz
TWFuYWdlckRpZENoYW5nZTsKKyAgICBCT09MIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemU7
CisgICAgQk9PTCBfd2FpdGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRSZXNpemU7CiAKLS0gKHZv
aWQpX25hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW47Ci0tICh2b2lkKV9uYXZpZ2F0aW9uR2VzdHVy
ZURpZEVuZDsKLS0gKEJPT0wpX2lzTmF2aWdhdGlvblN3aXBlR2VzdHVyZVJlY29nbml6ZXI6KFVJ
R2VzdHVyZVJlY29nbml6ZXIgKilyZWNvZ25pemVyOworICAgIFZlY3RvcjxXVEY6OkZ1bmN0aW9u
PHZvaWQgKCk+PiBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemU7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3M7
CiAKLS0gKHZvaWQpX3Nob3dQYXNzd29yZFZpZXdXaXRoRG9jdW1lbnROYW1lOihOU1N0cmluZyAq
KWRvY3VtZW50TmFtZSBwYXNzd29yZEhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nICopKXBhc3N3
b3JkSGFuZGxlcjsKLS0gKHZvaWQpX2hpZGVQYXNzd29yZFZpZXc7CisgICAgUmV0YWluUHRyPFdL
UGFzc3dvcmRWaWV3PiBfcGFzc3dvcmRWaWV3OwogCi0tICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JT
dGF0ZTsKKyAgICBCT09MIF9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVwZGF0ZTsKKyAgICBCT09M
IF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVTY2hlZHVsZWRGcm9tU2Nyb2xsVmlld0luU3RhYmxl
U3RhdGU7CiAKLS0gKHZvaWQpX2FkZFNob3J0Y3V0OihpZClzZW5kZXI7Ci0tICh2b2lkKV9kZWZp
bmU6KGlkKXNlbmRlcjsKLS0gKHZvaWQpX2xvb2t1cDooaWQpc2VuZGVyOwotLSAodm9pZClfc2hh
cmU6KGlkKXNlbmRlcjsKLS0gKHZvaWQpX3Nob3dUZXh0U3R5bGVPcHRpb25zOihpZClzZW5kZXI7
Ci0tICh2b2lkKV9wcm9tcHRGb3JSZXBsYWNlOihpZClzZW5kZXI7Ci0tICh2b2lkKV90cmFuc2xp
dGVyYXRlQ2hpbmVzZTooaWQpc2VuZGVyOwotLSAodm9pZClyZXBsYWNlOihpZClzZW5kZXI7Cisg
ICAgX1dLRHJhZ0ludGVyYWN0aW9uUG9saWN5IF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3k7CiAKLS0g
KHZvaWQpX25leHRBY2Nlc3NvcnlUYWI6KGlkKXNlbmRlcjsKLS0gKHZvaWQpX3ByZXZpb3VzQWNj
ZXNzb3J5VGFiOihpZClzZW5kZXI7CisgICAgLy8gRm9yIHJlbGVhc2UtbG9nZ2luZyBmb3IgPHJk
YXI6Ly9wcm9ibGVtLzM5MjgxMjY5Pi4KKyAgICBNb25vdG9uaWNUaW1lIF90aW1lT2ZSZXF1ZXN0
Rm9yVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOworICAgIE1vbm90b25pY1RpbWUgX3RpbWVPZkxh
c3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU7CiAKLS0gKHZvaWQpX2luY3JlbWVudEZvY3VzUHJl
c2VydmF0aW9uQ291bnQ7Ci0tICh2b2lkKV9kZWNyZW1lbnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50
OwotLSAodm9pZClfcmVzZXRGb2N1c1ByZXNlcnZhdGlvbkNvdW50OworICAgIE9wdGlvbmFsPE1v
bm90b25pY1RpbWU+IF90aW1lT2ZGaXJzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZVdpdGhQZW5k
aW5nQ29tbWl0OwogCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFzc3dvcmRW
aWV3ICpfcGFzc3dvcmRWaWV3OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dl
YlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeSAqX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Owot
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1NlbGVjdGlvbkdyYW51bGFyaXR5IF9z
ZWxlY3Rpb25HcmFudWxhcml0eTsKKyAgICBOU1VJbnRlZ2VyIF9mb2N1c1ByZXNlcnZhdGlvbkNv
dW50OworICAgIE5TVUludGVnZXIgX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OwogCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lzQmFja2dyb3VuZDsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfYWxsb3dzRG91YmxlVGFwR2VzdHVyZXM7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX3N0eWx1c1RhcEdlc3R1cmVT
aG91bGRDcmVhdGVFZGl0YWJsZUltYWdlOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBCT09MIF9oYXZlU2V0T2JzY3VyZWRJbnNldHM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIFVJRWRnZUluc2V0cyBfY29tcHV0ZWRPYnNjdXJlZEluc2V0OwotQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBVSUVkZ2VJbnNldHMgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVB
cmVhSW5zZXQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNSZXRh
aW5pbmdBY3RpdmVGb2N1c2VkU3RhdGUpIEJPT0wgX3JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0
ZTsKKyAgICBCT09MIF9oYXNFbnRlcmVkRGVhbGxvYzsKIAotLSAoQk9PTClfZWZmZWN0aXZlQXBw
ZWFyYW5jZUlzRGFyazsKLS0gKEJPT0wpX2VmZmVjdGl2ZVVzZXJJbnRlcmZhY2VMZXZlbElzRWxl
dmF0ZWQ7CisjZW5kaWYKK30KIAotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCistIChC
T09MKV9pc1ZhbGlkOworLSAodm9pZClfZGlkQ2hhbmdlRWRpdG9yU3RhdGU7CiAKICNpZiBFTkFC
TEUoQVRUQUNITUVOVF9FTEVNRU5UKQogLSAodm9pZClfZGlkUmVtb3ZlQXR0YWNobWVudDooQVBJ
OjpBdHRhY2htZW50JilhdHRhY2htZW50OwpAQCAtMjIzLDE3ICsyNTUsNiBAQCBjbGFzcyBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI7CiAtIChXS1BhZ2VSZWYpX3BhZ2VGb3JUZXN0aW5nOwogLSAoV2Vi
S2l0OjpXZWJQYWdlUHJveHkqKV9wYWdlOwogCi0jaWYgUExBVEZPUk0oTUFDKQotCi0tICh2b2lk
KV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOwotLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfY29tcGxldGVJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0KLS0g
KHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVw
bGFjZW1lbnRSYW5nZTsKLS0gKHZvaWQpX3dlYl9ncmFudERPTVBhc3RlQWNjZXNzOwotCi0jZW5k
aWYKLQogQGVuZAogCiBXS1dlYlZpZXcqIGZyb21XZWJQYWdlUHJveHkoV2ViS2l0OjpXZWJQYWdl
UHJveHkmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDI3ZDMwMGY0YTA0OTdjZWE3OGQzMzU0OTIxZWM0ZjYwNjcy
Mjk0ZmMuLjI1MTEzNzQyM2UwNzY0NDAyMGZiMDY2NmZjZDIwMDQ4NzM4MmRmM2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUu
aApAQCAtMjE3LDkgKzIxNyw2IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tS
ZWN0RWRnZSkgewogCiAtICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9p
ZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMiksIGlv
cygxMC4wKSk7CiAtICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRX
YWl0aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTIuMyksIGlvcygxMC4zKSk7Ci0jaWYgVEFSR0VUX09TX0lQSE9ORQot
LSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Js
b2NrX3QpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwotI2VuZGlmCiAK
IC0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5kIGFyZ3VtZW50
OihOU1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRp
b24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIApAQCAtMjQ3
LDE3ICsyNDQsODIgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdl
KSB7CiBAcHJvcGVydHkgKGNsYXNzLCBub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0U3RyaW5n
Rm9yRmluZDopIE5TU3RyaW5nICpfc3RyaW5nRm9yRmluZCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBf
V0tTZWxlY3Rpb25BdHRyaWJ1dGVzIF9zZWxlY3Rpb25BdHRyaWJ1dGVzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogCi0jaWYgVEFSR0VUX09TX0lQSE9ORQorLSAo
V0tOYXZpZ2F0aW9uICopX3JlbG9hZFdpdGhvdXRDb250ZW50QmxvY2tlcnMgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7CistIChXS05hdmlnYXRpb24gKilfcmVsb2Fk
RXhwaXJlZE9ubHkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7CiAK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9jb250ZW50VmlzaWJsZVJl
Y3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOwotLSAoQ0dQb2ludClfY29udmVydFBvaW50
RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjApKTsKLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czooQ0dQb2lu
dClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgX3dlYlByb2Nlc3NJc1Jlc3BvbnNpdmUgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7CistICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nl
c3M7CistICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlOwogCi0tICh2
b2lkKV9zZXRGb250OihVSUZvbnQgKilmb250IHNlbmRlcjooaWQpc2VuZGVyIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDEyLjIpKTsKLS0gKHZvaWQpX3NldEZvbnRTaXplOihDR0Zsb2F0KWZvbnRTaXpl
IHNlbmRlcjooaWQpc2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKLS0gKHZvaWQp
X3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQpc2VuZGVyIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDEyLjIpKTsKKy0gKHZvaWQpX2dldE1haW5SZXNvdXJjZURhdGFXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyOworLSAodm9pZClfZ2V0V2ViQXJjaGl2ZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9p
ZClfZ2V0Q29udGVudHNBc1N0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNT
dHJpbmcgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjEzKSwgaW9zKDExLjApKTsKKy0gKHZvaWQpX2dldENvbnRlbnRzQXNBdHRyaWJ1dGVk
U3RyaW5nV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0F0dHJpYnV0ZWRTdHJpbmcg
KiwgTlNEaWN0aW9uYXJ5PE5TQXR0cmlidXRlZFN0cmluZ0RvY3VtZW50QXR0cmlidXRlS2V5LCBp
ZD4gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE1KSwgaW9zKDEzLjApKTsKIAotLSAodm9pZClfZGV0ZWN0RGF0YVdpdGhUeXBlczooV0tE
YXRhRGV0ZWN0b3JUeXBlcyl0eXBlcyBjb21wbGV0aW9uSGFuZGxlcjooZGlzcGF0Y2hfYmxvY2tf
dCljb21wbGV0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKy0gKHZvaWQpX2dldEFw
cGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0FwcGxp
Y2F0aW9uTWFuaWZlc3QgKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSwgaW9zKDExLjMpKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1f
c2V0UGFnaW5hdGlvbk1vZGU6KSBfV0tQYWdpbmF0aW9uTW9kZSBfcGFnaW5hdGlvbk1vZGU7Cisv
LyBXaGV0aGVyIHRoZSBjb2x1bW4tYnJlYWste2JlZm9yZSxhZnRlcn0gcHJvcGVydGllcyBhcmUg
cmVzcGVjdGVkIGluc3RlYWQgb2YgdGhlCisvLyBwYWdlLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9IHBy
b3BlcnRpZXMuCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRQYWdpbmF0aW9uQmVo
YXZlc0xpa2VDb2x1bW5zOikgQk9PTCBfcGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczsKKy8v
IFNldCB0byAwIHRvIGhhdmUgdGhlIHBhZ2UgbGVuZ3RoIGVxdWFsIHRoZSB2aWV3IGxlbmd0aC4K
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFBhZ2VMZW5ndGg6KSBDR0Zsb2F0IF9w
YWdlTGVuZ3RoOworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0R2FwQmV0d2VlblBh
Z2VzOikgQ0dGbG9hdCBfZ2FwQmV0d2VlblBhZ2VzOworQHByb3BlcnR5IChub25hdG9taWMsIHNl
dHRlcj1fc2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZDopIEJPT0wgX3BhZ2luYXRpb25MaW5l
R3JpZEVuYWJsZWQ7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1VJbnRlZ2VyIF9wYWdlQ291bnQ7
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc3VwcG9ydHNUZXh0Wm9v
bTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFRleHRab29tRmFjdG9yOikgZG91
YmxlIF90ZXh0Wm9vbUZhY3RvcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFBh
Z2Vab29tRmFjdG9yOikgZG91YmxlIF9wYWdlWm9vbUZhY3RvcjsKKworQHByb3BlcnR5IChub25h
dG9taWMsIHdlYWssIHNldHRlcj1fc2V0RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTopIGlkIDxf
V0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlPiBfZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjExKSwgaW9zKDkuMCkpOworQHByb3BlcnR5IChub25h
dG9taWMsIHdlYWssIHNldHRlcj1fc2V0RmluZERlbGVnYXRlOikgaWQgPF9XS0ZpbmREZWxlZ2F0
ZT4gX2ZpbmREZWxlZ2F0ZTsKKy0gKHZvaWQpX2ZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
IG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4
Q291bnQ7CistICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXM6KE5TU3RyaW5nICopc3RyaW5nIG9w
dGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVnZXIpbWF4Q291
bnQ7CistICh2b2lkKV9oaWRlRmluZFVJOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2Vhaywg
c2V0dGVyPV9zZXRJbnB1dERlbGVnYXRlOikgaWQgPF9XS0lucHV0RGVsZWdhdGU+IF9pbnB1dERl
bGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpLCBpb3MoMTAuMCkpOworCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNEaXNwbGF5aW5nU3RhbmRhbG9u
ZUltYWdlRG9jdW1lbnQpIEJPT0wgX2Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudDsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPV9pc0Rpc3BsYXlpbmdTdGFu
ZGFsb25lTWVkaWFEb2N1bWVudCkgQk9PTCBfZGlzcGxheWluZ1N0YW5kYWxvbmVNZWRpYURvY3Vt
ZW50OworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTY3JvbGxQZXJmb3JtYW5j
ZURhdGFDb2xsZWN0aW9uRW5hYmxlZDopIEJPT0wgX3Njcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxl
Y3Rpb25FbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTEpLCBpb3MoOS4wKSk7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKl9zY3JvbGxQZXJmb3JtYW5j
ZURhdGEgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMSksIGlvcyg5LjApKTsKKworLSAodm9p
ZClfc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0g
KilpdGVtIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTEpLCBpb3MoOS4wKSk7CisKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFj
aywgc2V0dGVyPV9zZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2s6KSBCT09MIF9h
bGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2s7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldEZ1bGxzY3JlZW5EZWxlZ2F0ZTopIGlkPF9XS0Z1bGxzY3JlZW5EZWxlZ2F0
ZT4gX2Z1bGxzY3JlZW5EZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9z
KDExLjApKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaXNJbkZ1bGxz
Y3JlZW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7CisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgX1dLTWVkaWFDYXB0dXJlU3RhdGUgX21lZGlhQ2FwdHVyZVN0YXRl
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOworCistICh2b2lkKV9z
ZXRQYWdlTXV0ZWQ6KF9XS01lZGlhTXV0ZWRTdGF0ZSltdXRlZFN0YXRlIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0
dGVyPV9zZXRNZWRpYUNhcHR1cmVFbmFibGVkOikgQk9PTCBfbWVkaWFDYXB0dXJlRW5hYmxlZCBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSwgaW9zKDExLjApKTsKKy0gKHZvaWQpX3N0b3BN
ZWRpYUNhcHR1cmUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9jYW5Ub2dn
bGVQaWN0dXJlSW5QaWN0dXJlOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09M
IF9pc1BpY3R1cmVJblBpY3R1cmVBY3RpdmU7CistICh2b2lkKV91cGRhdGVNZWRpYVBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyOworLSAodm9pZClfdG9nZ2xlUGljdHVyZUluUGljdHVyZTsKKy0gKHZv
aWQpX3N0b3BBbGxNZWRpYVBsYXliYWNrOworLSAodm9pZClfc3VzcGVuZEFsbE1lZGlhUGxheWJh
Y2s7CistICh2b2lkKV9yZXN1bWVBbGxNZWRpYVBsYXliYWNrOworLSAodm9pZClfY2xvc2VBbGxN
ZWRpYVByZXNlbnRhdGlvbnM7CisKKy0gKHZvaWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0lu
UmVjdDooQ0dSZWN0KXJlY3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tU
ZXh0SW5wdXRDb250ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOworLSAodm9pZClfZm9jdXNUZXh0SW5wdXRDb250ZXh0
OihfV0tUZXh0SW5wdXRDb250ZXh0ICopdGV4dElucHV0RWxlbWVudCBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE1KSwgaW9zKDEzLjApKTsKKworLSAodm9pZClfdGFrZVBERlNuYXBzaG90V2l0aENvbmZp
Z3VyYXRpb246KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9u
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKnBkZlNuYXBzaG90RGF0YSwgTlNF
cnJvciAqZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitAZW5kCisKKyNpZiBUQVJHRVRfT1NfSVBIT05F
CisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1ByaXZhdGVJT1MpCisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF9jb250ZW50VmlzaWJsZVJlY3QgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTAuMCkpOwogCiAvLyBERVJFQ0FURUQ6IFRoZSBzZXR0ZXJzIG9mIHRoZSB0aHJl
ZSBmb2xsb3dpbmcgZnVuY3Rpb24gYXJlIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2Ugb3ZlcnJpZGVM
YXlvdXRQYXJhbWV0ZXJzLgogLy8gRGVmaW5lIHRoZSBzbWFsbGVzdCBzaXplIGEgcGFnZSB0YWtl
IHdpdGggYSByZWd1bGFyIHZpZXdwb3J0LgpAQCAtMjc4LDYgKzM0MCw3IEBAIHR5cGVkZWYgTlNf
T1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogLy8gT3ZlcnJpZGUgdGhlIGludGVy
ZmFjZSBvcmllbnRhdGlvbi4gQ2xpZW50cyB1c2luZyBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhV
cGRhdGVzOiBtdXN0IHVwZGF0ZSB0aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uCiAvLyBpbiB0aGUg
dXBkYXRlIGJsb2NrLgogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SW50ZXJmYWNl
T3JpZW50YXRpb25PdmVycmlkZTopIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gX2ludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU7CistICh2b2lkKV9jbGVhckludGVyZmFjZU9yaWVudGF0aW9uT3Zl
cnJpZGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRBbGxvd3NWaWV3cG9ydFNocmlua1RvRml0OikgQk9PTCBfYWxsb3dzVmll
d3BvcnRTaHJpbmtUb0ZpdDsKIApAQCAtMjk1LDYgKzM1OCwxOSBAQCB0eXBlZGVmIE5TX09QVElP
TlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBDR1JlY3QgX3VpVGV4dENhcmV0UmVjdCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4z
KSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlWaWV3ICpfc2FmZUJyb3dz
aW5nV2FybmluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwor
CistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNUb1ZpZXc6KENHUG9pbnQpcG9p
bnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOworLSAoQ0dQb2ludClfY29udmVydFBvaW50
RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjApKTsKKworLSAodm9pZClfZG9BZnRlck5leHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGU6KGRp
c3BhdGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwor
CistICh2b2lkKV9zZXRGb250OihVSUZvbnQgKilmb250IHNlbmRlcjooaWQpc2VuZGVyIFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKy0gKHZvaWQpX3NldEZvbnRTaXplOihDR0Zsb2F0KWZv
bnRTaXplIHNlbmRlcjooaWQpc2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKy0g
KHZvaWQpX3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQpc2VuZGVyIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKworLSAodm9pZClfZGV0ZWN0RGF0YVdpdGhUeXBl
czooV0tEYXRhRGV0ZWN0b3JUeXBlcyl0eXBlcyBjb21wbGV0aW9uSGFuZGxlcjooZGlzcGF0Y2hf
YmxvY2tfdCljb21wbGV0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKwogLSAodm9p
ZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNv
bXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogCiAtICh2b2lkKWRpZFN0YXJ0Rm9ybUNvbnRy
b2xJbnRlcmFjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CkBAIC0zMTEsMTAgKzM4
Nyw4IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogLSAo
dm9pZClfc25hcHNob3RSZWN0OihDR1JlY3QpcmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9JbWFn
ZU9mV2lkdGg6KENHRmxvYXQpaW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShD
R0ltYWdlUmVmKSljb21wbGV0aW9uSGFuZGxlcjsKIAogLSAodm9pZClfb3ZlcnJpZGVMYXlvdXRQ
YXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOihDR1NpemUpbWluaW11bUxheW91dFNpemUg
bWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6KENHU2l6ZSltYXhpbXVtVW5vYnNjdXJlZFNp
emVPdmVycmlkZSBXS19BUElfQVZBSUxBQkxFKGlvcyg5XzApKTsKLS0gKHZvaWQpX292ZXJyaWRl
Vmlld3BvcnRXaXRoQXJndW1lbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgTlNTdHJpbmcg
Kj4gKilhcmd1bWVudHMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOwotCiAtICh2b2lkKV9j
bGVhck92ZXJyaWRlTGF5b3V0UGFyYW1ldGVycyBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7
Ci0tICh2b2lkKV9jbGVhckludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTEuMCkpOworLSAodm9pZClfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqKWFyZ3VtZW50cyBXS19BUElf
QVZBSUxBQkxFKGlvcygxMy4wKSk7CiAKIC0gKFVJVmlldyAqKV92aWV3Rm9yRmluZFVJOwogCkBA
IC0zMjcsNiArNDAxLDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RF
ZGdlKSB7CiAtICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdG
b3J3YXJkOihCT09MKXNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKDlfMCkpOwogCiAtIChpZClfc25hcHNob3RMYXllckNvbnRlbnRzRm9yQmFj
a0ZvcndhcmRMaXN0SXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbSBXS19BUElfQVZB
SUxBQkxFKGlvcyg5XzApKTsKKwogLSAoTlNBcnJheSAqKV9kYXRhRGV0ZWN0aW9uUmVzdWx0czsK
IAogLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDoo
TlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9uSGFuZGxl
ciBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7CkBAIC0zMzYsMTEgKzQxMSwyOSBAQCB0eXBl
ZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkZ2UpIHsKIC0gKHZvaWQpX2FjY2Vz
c2liaWxpdHlSZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudCBXS19BUElfQVZBSUxBQkxFKGlv
cygxMS4wKSk7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rpb25Db250
ZW50OihOU1N0cmluZyAqKWNvbnRlbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlldyAqX3NhZmVCcm93c2luZ1dhcm5p
bmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKLQogLSAoVUlW
aWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIu
MCkpOwogCi0jZWxzZQorQGVuZAorCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoKSA8VUlSZXNwb25k
ZXJTdGFuZGFyZEVkaXRBY3Rpb25zPgorQGVuZAorCisjaWYgIVRBUkdFVF9PU19XQVRDSAorCitA
aW50ZXJmYWNlIFdLV2ViVmlldyAoRnVsbFNjcmVlbkFQSV9Qcml2YXRlKQorCistKEJPT0wpaGFz
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CistKHZvaWQpY2xvc2VGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcjsKKworQGVuZAorI2VuZGlmIC8vICFUQVJHRVRfT1NfV0FUQ0gKKworI2VuZGlm
IC8vIFRBUkdFVF9PU19JUEhPTkUKKworCisjaWYgIVRBUkdFVF9PU19JUEhPTkUKKworQGludGVy
ZmFjZSBXS1dlYlZpZXcgKFdLUHJpdmF0ZU1hYykKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBXS1BhZ2VSZWYgX3BhZ2VSZWZGb3JUcmFuc2l0aW9uVG9XS1dlYlZpZXcgIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBCT09MIF9oYXNBY3RpdmVWaWRlb0ZvckNvbnRyb2xzTWFuYWdlciBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEyKSk7CkBAIC0zNjgsNiArNDYxLDI1IEBAIHR5cGVkZWYgTlNfT1BUSU9O
UyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkgewogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIE5TSW50ZWdlciBfc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNCkpOwogCisvLyBXaGVuIHVzaW5nIF9taW5pbXVtTGF5b3V0V2lkdGgsIHRo
ZSB3ZWIgY29udGVudCB3aWxsIGxheSBvdXQgdG8gdGhlIGludHJpbnNpYyBoZWlnaHQKKy8vIG9m
IHRoZSBjb250ZW50OyB1c2UgdGhpcyBwcm9wZXJ0eSB0byBmb3JjZSBpdCB0byBsYXkgb3V0IHRv
IHRoZSBoZWlnaHQgb2YgdGhlIHZpZXcgaW5zdGVhZC4KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBz
ZXR0ZXI9X3NldFNob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0Oikg
Qk9PTCBfc2hvdWxkRXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMikpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVy
PV9zZXRNaW5pbXVtTGF5b3V0V2lkdGg6KSBDR0Zsb2F0IF9taW5pbXVtTGF5b3V0V2lkdGggV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMikpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0
dGVyPV9zZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcjopIEJPT0wgX2Fsd2F5c1Nob3dz
SG9yaXpvbnRhbFNjcm9sbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVy
OikgQk9PTCBfYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBzZXR0ZXI9
X3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KSBCT09MIF91c2VTeXN0ZW1BcHBlYXJhbmNlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9
X3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTopIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSBfb3Zl
cmxheVNjcm9sbGJhclN0eWxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworQHBy
b3BlcnR5IChzdHJvbmcsIG5vbmF0b21pYywgc2V0dGVyPV9zZXRJbnNwZWN0b3JBdHRhY2htZW50
VmlldzopIE5TVmlldyAqX2luc3BlY3RvckF0dGFjaG1lbnRWaWV3IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTMuNCkpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUaHVt
Ym5haWxWaWV3OikgX1dLVGh1bWJuYWlsVmlldyAqX3RodW1ibmFpbFZpZXcgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRJ
Z25vcmVzQWxsRXZlbnRzOikgQk9PTCBfaWdub3Jlc0FsbEV2ZW50cyBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEzLjQpKTsKKworLy8gRGVmYXVsdHMgdG8gWUVTOyBpZiBzZXQgdG8gTk8sIFdl
YktpdCB3aWxsIGRyYXcgdGhlIGdyZXkgd2FzaCBhbmQgaGlnaGxpZ2h0cyBpdHNlbGYuCitAcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRVc2VQbGF0Zm9ybUZpbmRVSTopIEJPT0wgX3Vz
ZVBsYXRmb3JtRmluZFVJIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpKTsKKwogLSAodm9p
ZClfc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXM6KEJPT0wpc2hvdWxkU3Vw
cHJlc3M7CiAtIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUgKilm
cmFtZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIC0gKEJPT0wpX3Ry
eVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihC
T09MKWlnbm9yaW5nUGlubmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
CkBAIC0zOTUsMTIwICs1MDcsMjAgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9X
S1JlY3RFZGdlKSB7CiAvLyBkbyBzb21ldGhpbmcgY3VzdG9tLCByZXR1cm4gYW4gb2JqZWN0IHRo
YXQgY29uZm9ybXMgdG8gdGhlIE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlciBw
cm90b2NvbC4KIC0gKGlkKV9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0
VGVzdFJlc3VsdDooX1dLSGl0VGVzdFJlc3VsdCAqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9X
S0ltbWVkaWF0ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTooaWQ8TlNTZWN1cmVDb2Rpbmc+KXVz
ZXJEYXRhOwogCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRNaW5pbXVtTGF5b3V0
V2lkdGg6KSBDR0Zsb2F0IF9taW5pbXVtTGF5b3V0V2lkdGggV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMikpOwotCi0vLyBXaGVuIHVzaW5nIF9taW5pbXVtTGF5b3V0V2lkdGgsIHRoZSB3ZWIg
Y29udGVudCB3aWxsIGxheSBvdXQgdG8gdGhlIGludHJpbnNpYyBoZWlnaHQKLS8vIG9mIHRoZSBj
b250ZW50OyB1c2UgdGhpcyBwcm9wZXJ0eSB0byBmb3JjZSBpdCB0byBsYXkgb3V0IHRvIHRoZSBo
ZWlnaHQgb2YgdGhlIHZpZXcgaW5zdGVhZC4KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9
X3NldFNob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0OikgQk9PTCBf
c2hvdWxkRXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMikpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRB
bHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcjopIEJPT0wgX2Fsd2F5c1Nob3dzSG9yaXpvbnRh
bFNjcm9sbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChu
b25hdG9taWMsIHNldHRlcj1fc2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyOikgQk9PTCBf
YWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCkpOwotCiAtIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5m
bzooTlNQcmludEluZm8gKilwcmludEluZm87CiAtIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50
T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6
KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
MikpOwogCiAvLyBGSVhNRTogVGhpcyBTUEkgc2hvdWxkIGJlY29tZSBhIHBhcnQgb2YgdGhlIFdL
VUlEZWxlZ2F0ZS4gcmRhcjovL3Byb2JsZW0vMjY1NjE1MzcKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkd3JpdGUsIHNldHRlcj1fc2V0V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Oikg
Qk9PTCBfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIuMykpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBpZCBfbWVkaWFQ
bGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzKSk7CisKIC0g
KHZvaWQpX2FkZE1lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KGlkKW1lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykpOwogLSAodm9pZClfcmVtb3Zl
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMp
KTsKIAogLSAodm9pZClfcHJlcGFyZUZvck1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil0YXJnZXRX
aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykpOwogCi1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZHdyaXRlLCBzZXR0ZXI9X3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KSBCT09MIF91c2VTeXN0
ZW1BcHBlYXJhbmNlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBzZXR0ZXI9X3NldE92ZXJsYXlTY3JvbGxiYXJTdHlsZTopIF9XS092ZXJsYXlT
Y3JvbGxiYXJTdHlsZSBfb3ZlcmxheVNjcm9sbGJhclN0eWxlIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMuNCkpOwotQHByb3BlcnR5IChzdHJvbmcsIG5vbmF0b21pYywgc2V0dGVyPV9zZXRJ
bnNwZWN0b3JBdHRhY2htZW50VmlldzopIE5TVmlldyAqX2luc3BlY3RvckF0dGFjaG1lbnRWaWV3
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRUaHVtYm5haWxWaWV3OikgX1dLVGh1bWJuYWlsVmlldyAqX3RodW1ibmFp
bFZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgc2V0dGVyPV9zZXRJZ25vcmVzQWxsRXZlbnRzOikgQk9PTCBfaWdub3Jlc0FsbEV2ZW50
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLQotLy8gRGVmYXVsdHMgdG8gWUVT
OyBpZiBzZXQgdG8gTk8sIFdlYktpdCB3aWxsIGRyYXcgdGhlIGdyZXkgd2FzaCBhbmQgaGlnaGxp
Z2h0cyBpdHNlbGYuCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRVc2VQbGF0Zm9y
bUZpbmRVSTopIEJPT0wgX3VzZVBsYXRmb3JtRmluZFVJIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTUpKTsKLQotI2VuZGlmCi0KLS0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRXaXRob3V0Q29u
dGVudEJsb2NrZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpLCBpb3MoMTAuMCkpOwot
LSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZEV4cGlyZWRPbmx5IFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTMpLCBpb3MoMTEuMCkpOwotCi0tICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3M7
Ci0tICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3NBbmRSZXNldFN0YXRlOwotCi0tICh2b2lk
KV9nZXRNYWluUmVzb3VyY2VEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Rh
dGEgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpX2dldFdlYkFyY2hp
dmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpX2dldENvbnRlbnRzQXNTdHJpbmdXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nICosIE5TRXJyb3IgKikpY29tcGxldGlv
bkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7Ci0tICh2
b2lkKV9nZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoTlNBdHRyaWJ1dGVkU3RyaW5nICosIE5TRGljdGlvbmFyeTxOU0F0dHJpYnV0ZWRT
dHJpbmdEb2N1bWVudEF0dHJpYnV0ZUtleSwgaWQ+ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0KLS0gKHZv
aWQpX2dldEFwcGxpY2F0aW9uTWFuaWZlc3RXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QgKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKLQotQHByb3BlcnR5IChub25hdG9taWMs
IHNldHRlcj1fc2V0UGFnaW5hdGlvbk1vZGU6KSBfV0tQYWdpbmF0aW9uTW9kZSBfcGFnaW5hdGlv
bk1vZGU7Ci0vLyBXaGV0aGVyIHRoZSBjb2x1bW4tYnJlYWste2JlZm9yZSxhZnRlcn0gcHJvcGVy
dGllcyBhcmUgcmVzcGVjdGVkIGluc3RlYWQgb2YgdGhlCi0vLyBwYWdlLWJyZWFrLXtiZWZvcmUs
YWZ0ZXJ9IHByb3BlcnRpZXMuCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRQYWdp
bmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zOikgQk9PTCBfcGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29s
dW1uczsKLS8vIFNldCB0byAwIHRvIGhhdmUgdGhlIHBhZ2UgbGVuZ3RoIGVxdWFsIHRoZSB2aWV3
IGxlbmd0aC4KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFBhZ2VMZW5ndGg6KSBD
R0Zsb2F0IF9wYWdlTGVuZ3RoOwotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0R2Fw
QmV0d2VlblBhZ2VzOikgQ0dGbG9hdCBfZ2FwQmV0d2VlblBhZ2VzOwotQHByb3BlcnR5IChub25h
dG9taWMsIHNldHRlcj1fc2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZDopIEJPT0wgX3BhZ2lu
YXRpb25MaW5lR3JpZEVuYWJsZWQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5KSBOU1VJbnRlZ2VyIF9w
YWdlQ291bnQ7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc3VwcG9y
dHNUZXh0Wm9vbTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFRleHRab29tRmFj
dG9yOikgZG91YmxlIF90ZXh0Wm9vbUZhY3RvcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0
ZXI9X3NldFBhZ2Vab29tRmFjdG9yOikgZG91YmxlIF9wYWdlWm9vbUZhY3RvcjsKLQotQHByb3Bl
cnR5IChub25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0
ZTopIGlkIDxfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlPiBfZGlhZ25vc3RpY0xvZ2dpbmdE
ZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjExKSwgaW9zKDkuMCkpOwotQHByb3Bl
cnR5IChub25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0RmluZERlbGVnYXRlOikgaWQgPF9XS0Zp
bmREZWxlZ2F0ZT4gX2ZpbmREZWxlZ2F0ZTsKLS0gKHZvaWQpX2ZpbmRTdHJpbmc6KE5TU3RyaW5n
ICopc3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUlu
dGVnZXIpbWF4Q291bnQ7Ci0tICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXM6KE5TU3RyaW5nICop
c3RyaW5nIG9wdGlvbnM6KF9XS0ZpbmRPcHRpb25zKW9wdGlvbnMgbWF4Q291bnQ6KE5TVUludGVn
ZXIpbWF4Q291bnQ7Ci0tICh2b2lkKV9oaWRlRmluZFVJOwotCi1AcHJvcGVydHkgKG5vbmF0b21p
Yywgd2Vhaywgc2V0dGVyPV9zZXRJbnB1dERlbGVnYXRlOikgaWQgPF9XS0lucHV0RGVsZWdhdGU+
IF9pbnB1dERlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIpLCBpb3MoMTAuMCkp
OwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1faXNEaXNwbGF5aW5n
U3RhbmRhbG9uZUltYWdlRG9jdW1lbnQpIEJPT0wgX2Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VE
b2N1bWVudDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0dGVyPV9pc0Rpc3Bs
YXlpbmdTdGFuZGFsb25lTWVkaWFEb2N1bWVudCkgQk9PTCBfZGlzcGxheWluZ1N0YW5kYWxvbmVN
ZWRpYURvY3VtZW50OwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTY3JvbGxQ
ZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZDopIEJPT0wgX3Njcm9sbFBlcmZvcm1hbmNl
RGF0YUNvbGxlY3Rpb25FbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTEpLCBpb3Mo
OS4wKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKl9zY3JvbGxQ
ZXJmb3JtYW5jZURhdGEgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMSksIGlvcyg5LjApKTsK
LQotLSAodm9pZClfc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JJdGVtOihXS0JhY2tGb3J3YXJk
TGlzdEl0ZW0gKilpdGVtIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTEpLCBpb3MoOS4wKSk7
Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9X2FsbG93c01lZGlhRG9jdW1lbnRJbmxp
bmVQbGF5YmFjaywgc2V0dGVyPV9zZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2s6
KSBCT09MIF9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2s7Ci0KLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfd2ViUHJvY2Vzc0lzUmVzcG9uc2l2ZSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsKLQotQHByb3BlcnR5IChub25hdG9t
aWMsIHNldHRlcj1fc2V0RnVsbHNjcmVlbkRlbGVnYXRlOikgaWQ8X1dLRnVsbHNjcmVlbkRlbGVn
YXRlPiBfZnVsbHNjcmVlbkRlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBp
b3MoMTEuMCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9pc0luRnVs
bHNjcmVlbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKLQotQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBfV0tNZWRpYUNhcHR1cmVTdGF0ZSBfbWVkaWFDYXB0dXJlU3Rh
dGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0KLS0gKHZvaWQp
X3NldFBhZ2VNdXRlZDooX1dLTWVkaWFNdXRlZFN0YXRlKW11dGVkU3RhdGUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSk7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBz
ZXR0ZXI9X3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6KSBCT09MIF9tZWRpYUNhcHR1cmVFbmFibGVk
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOwotLSAodm9pZClfc3Rv
cE1lZGlhQ2FwdHVyZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2NhblRv
Z2dsZVBpY3R1cmVJblBpY3R1cmU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJP
T0wgX2lzUGljdHVyZUluUGljdHVyZUFjdGl2ZTsKLS0gKHZvaWQpX3VwZGF0ZU1lZGlhUGxheWJh
Y2tDb250cm9sc01hbmFnZXI7Ci0tICh2b2lkKV90b2dnbGVQaWN0dXJlSW5QaWN0dXJlOwotLSAo
dm9pZClfc3RvcEFsbE1lZGlhUGxheWJhY2s7Ci0tICh2b2lkKV9zdXNwZW5kQWxsTWVkaWFQbGF5
YmFjazsKLS0gKHZvaWQpX3Jlc3VtZUFsbE1lZGlhUGxheWJhY2s7Ci0tICh2b2lkKV9jbG9zZUFs
bE1lZGlhUHJlc2VudGF0aW9uczsKLQotLSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRz
SW5SZWN0OihDR1JlY3QpcmVjdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PF9X
S1RleHRJbnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7Ci0tICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRl
eHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKil0ZXh0SW5wdXRFbGVtZW50IGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwotCi0tICh2b2lkKV90YWtlUERGU25hcHNob3RXaXRoQ29u
ZmlndXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRp
b24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqcGRmU25hcHNob3REYXRhLCBO
U0Vycm9yICplcnJvcikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIEBlbmQKIAotI2lmIFRBUkdFVF9PU19JUEhP
TkUgJiYgIVRBUkdFVF9PU19XQVRDSAotQGludGVyZmFjZSBXS1dlYlZpZXcgKEZ1bGxTY3JlZW5B
UElfUHJpdmF0ZSkKLS0oQk9PTCloYXNGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjsKLS0odm9p
ZCljbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwotQGVuZAotI2VuZGlmCisjZW5kaWYg
Ly8gIVRBUkdFVF9PU19JUEhPTkUKIAotI2lmIFRBUkdFVF9PU19JUEhPTkUKIAotQGludGVyZmFj
ZSBXS1dlYlZpZXcgKCkgPFVJUmVzcG9uZGVyU3RhbmRhcmRFZGl0QWN0aW9ucz4KLUBlbmQKLQot
I2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KaW5kZXggOWU2MjU2OTk5ZjlhOTM4
Njk2NmE3NDFhNmEwNmNmZGIwOGFmYjgwNS4uYzljNzVhMzJhZTNmMDg2YmFkYzA5NmJkNTk5ZjQy
ODZiNDU3ODdjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld1Rlc3RpbmcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld1Rlc3RpbmcubW0KQEAgLTI4LDcgKzI4LDcgQEAKIAogI2ltcG9ydCAiVXNl
ck1lZGlhUHJvY2Vzc01hbmFnZXIuaCIKICNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5o
IgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5o
IgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgog
I2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2lvcy9XS1dlYlZpZXdJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjA1YTNmNmY0ZjcyNTQwNWFkNWE1
NWQ1MjQzMDBjMTY5YWU0MGNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tWaWV3SW50ZXJuYWxJT1MpCisKKy0gKHZv
aWQpX2tleWJvYXJkV2lsbENoYW5nZUZyYW1lOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bjsKKy0gKHZvaWQpX2tleWJvYXJkRGlkQ2hhbmdlRnJhbWU6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uOworLSAodm9pZClfa2V5Ym9hcmRXaWxsU2hvdzooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb247CistICh2b2lkKV9rZXlib2FyZERpZFNob3c6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uOworLSAodm9pZClfa2V5Ym9hcmRXaWxsSGlkZTooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb247CistICh2b2lkKV93aW5kb3dEaWRSb3RhdGU6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uOworLSAodm9pZClfY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0
dGluZ3NEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOworCistICh2b2lk
KV9mcmFtZU9yQm91bmRzQ2hhbmdlZDsKKy0gKEJPT0wpdXNlc1N0YW5kYXJkQ29udGVudFZpZXc7
CisKKy0gKHZvaWQpX3Byb2Nlc3NEaWRFeGl0OworLSAodm9pZClfcHJvY2Vzc1dpbGxTd2FwOwor
LSAodm9pZClfZGlkUmVsYXVuY2hQcm9jZXNzOworCistIChVSVZpZXcgKilfY3VycmVudENvbnRl
bnRWaWV3OworCistICh2b2lkKV9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lOworLSAodm9pZClf
ZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbjsKKy0gKHZvaWQpX2xheWVyVHJlZUNvbW1pdENvbXBs
ZXRlOworCistICh2b2lkKV9jb3VsZE5vdFJlc3RvcmVQYWdlU3RhdGU7CistICh2b2lkKV9yZXN0
b3JlUGFnZVNjcm9sbFBvc2l0aW9uOihPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PilzY3Jv
bGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpc2Nyb2xsT3JpZ2lu
IHByZXZpb3VzT2JzY3VyZWRJbnNldDooV2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQpaW5zZXRzIHNj
YWxlOihkb3VibGUpc2NhbGU7CistICh2b2lkKV9yZXN0b3JlUGFnZVN0YXRlVG9Vbm9ic2N1cmVk
Q2VudGVyOihPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PiljZW50ZXIgc2NhbGU6KGRvdWJs
ZSlzY2FsZTsgLy8gRklYTUU6IG5lZWRzIHNjcm9sbCBvcmlnaW4/CisKKy0gKFJlZlB0cjxXZWJL
aXQ6OlZpZXdTbmFwc2hvdD4pX3Rha2VWaWV3U25hcHNob3Q7CisKKy0gKHZvaWQpX3Njcm9sbFRv
Q29udGVudFNjcm9sbFBvc2l0aW9uOihXZWJDb3JlOjpGbG9hdFBvaW50KXNjcm9sbFBvc2l0aW9u
IHNjcm9sbE9yaWdpbjooV2ViQ29yZTo6SW50UG9pbnQpc2Nyb2xsT3JpZ2luOworLSAoQk9PTClf
c2Nyb2xsVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBvcmlnaW46KFdlYkNv
cmU6OkZsb2F0UG9pbnQpb3JpZ2luIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11
bVNjcm9sbERpc3RhbmNlOworCistIChkb3VibGUpX2luaXRpYWxTY2FsZUZhY3RvcjsKKy0gKGRv
dWJsZSlfY29udGVudFpvb21TY2FsZTsKKworLSAoZG91YmxlKV90YXJnZXRDb250ZW50Wm9vbVNj
YWxlRm9yUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jil0YXJnZXRSZWN0IGN1cnJlbnRT
Y2FsZTooZG91YmxlKWN1cnJlbnRTY2FsZSBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJl
Y3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91Ymxl
KW1heGltdW1TY2FsZTsKKy0gKHZvaWQpX3pvb21Ub0ZvY3VzUmVjdDooY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jilmb2N1c2VkRWxlbWVudFJlY3Qgc2VsZWN0aW9uUmVjdDooY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JilzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZp
eGVkOihCT09MKWluc2lkZUZpeGVkIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2Nh
bGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxl
IGFsbG93U2NhbGluZzooQk9PTClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VT
Y3JvbGw7CistIChCT09MKV96b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVj
dCB3aXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihC
T09MKWZpdEVudGlyZVJlY3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGlt
dW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0
KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKKy0gKHZvaWQpX3pvb21PdXRXaXRoT3JpZ2luOihXZWJD
b3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZDsKKy0gKHZvaWQp
X3pvb21Ub0luaXRpYWxTY2FsZVdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2lu
IGFuaW1hdGVkOihCT09MKWFuaW1hdGVkOworLSAodm9pZClfZGlkRmluaXNoU2Nyb2xsaW5nOwor
CistICh2b2lkKV9zZXRIYXNDdXN0b21Db250ZW50VmlldzooQk9PTCloYXNDdXN0b21Db250ZW50
VmlldyBsb2FkZWRNSU1FVHlwZTooY29uc3QgV1RGOjpTdHJpbmcmKW1pbWVUeXBlOworLSAodm9p
ZClfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlkZXJXaXRoU3VnZ2Vz
dGVkRmlsZW5hbWU6KGNvbnN0IFdURjo6U3RyaW5nJilzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhOihO
U0RhdGEgKilkYXRhOworCistICh2b2lkKV93aWxsSW52b2tlVUlTY3JvbGxWaWV3RGVsZWdhdGVD
YWxsYmFjazsKKy0gKHZvaWQpX2RpZEludm9rZVVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2s7
CisKKy0gKHZvaWQpX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOworCistICh2b2lk
KV9kaWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplOworCistICh2b2lkKV9kaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvck1haW5GcmFtZTsKKy0gKHZvaWQpX2RpZEZpbmlzaExvYWRGb3JNYWluRnJhbWU7
CistICh2b2lkKV9kaWRGYWlsTG9hZEZvck1haW5GcmFtZTsKKy0gKHZvaWQpX2RpZFNhbWVEb2N1
bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWU6KFdlYktpdDo6U2FtZURvY3VtZW50TmF2aWdhdGlv
blR5cGUpbmF2aWdhdGlvblR5cGU7CisKKy0gKEJPT0wpX2lzU2hvd2luZ1ZpZGVvUGljdHVyZUlu
UGljdHVyZTsKKy0gKEJPT0wpX21heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0
dXJlOworCistICh2b2lkKV91cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZDsKKworLSAodm9pZClf
dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2U7CisKKy0gKHZvaWQpX25hdmlnYXRpb25HZXN0
dXJlRGlkQmVnaW47CistICh2b2lkKV9uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZDsKKy0gKEJPT0wp
X2lzTmF2aWdhdGlvblN3aXBlR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIg
KilyZWNvZ25pemVyOworCistICh2b2lkKV9zaG93UGFzc3dvcmRWaWV3V2l0aERvY3VtZW50TmFt
ZTooTlNTdHJpbmcgKilkb2N1bWVudE5hbWUgcGFzc3dvcmRIYW5kbGVyOih2b2lkICheKShOU1N0
cmluZyAqKSlwYXNzd29yZEhhbmRsZXI7CistICh2b2lkKV9oaWRlUGFzc3dvcmRWaWV3OworCist
ICh2b2lkKV9hZGRTaG9ydGN1dDooaWQpc2VuZGVyOworLSAodm9pZClfZGVmaW5lOihpZClzZW5k
ZXI7CistICh2b2lkKV9sb29rdXA6KGlkKXNlbmRlcjsKKy0gKHZvaWQpX3NoYXJlOihpZClzZW5k
ZXI7CistICh2b2lkKV9zaG93VGV4dFN0eWxlT3B0aW9uczooaWQpc2VuZGVyOworLSAodm9pZClf
cHJvbXB0Rm9yUmVwbGFjZTooaWQpc2VuZGVyOworLSAodm9pZClfdHJhbnNsaXRlcmF0ZUNoaW5l
c2U6KGlkKXNlbmRlcjsKKy0gKHZvaWQpcmVwbGFjZTooaWQpc2VuZGVyOworCistICh2b2lkKV9u
ZXh0QWNjZXNzb3J5VGFiOihpZClzZW5kZXI7CistICh2b2lkKV9wcmV2aW91c0FjY2Vzc29yeVRh
YjooaWQpc2VuZGVyOworCistICh2b2lkKV9pbmNyZW1lbnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50
OworLSAodm9pZClfZGVjcmVtZW50Rm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKKy0gKHZvaWQpX3Jl
c2V0Rm9jdXNQcmVzZXJ2YXRpb25Db3VudDsKKworLSAodm9pZClfc2V0T3BhcXVlSW50ZXJuYWw6
KEJPT0wpb3BhcXVlOworLSAoTlNTdHJpbmcgKilfY29udGVudFNpemVDYXRlZ29yeTsKKy0gKHZv
aWQpX2Rpc3BhdGNoU2V0RGV2aWNlT3JpZW50YXRpb246KGludDMyX3QpZGV2aWNlT3JpZW50YXRp
b247CistIChXZWJDb3JlOjpGbG9hdFNpemUpYWN0aXZlVmlld0xheW91dFNpemU6KGNvbnN0IENH
UmVjdCYpYm91bmRzOworLSAodm9pZClfdXBkYXRlU2Nyb2xsVmlld0luc2V0QWRqdXN0bWVudEJl
aGF2aW9yOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFzc3dvcmRWaWV3
ICpfcGFzc3dvcmRWaWV3OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZp
ZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeSAqX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5OworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1NlbGVjdGlvbkdyYW51bGFyaXR5IF9zZWxl
Y3Rpb25HcmFudWxhcml0eTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09M
IF9pc0JhY2tncm91bmQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2Fs
bG93c0RvdWJsZVRhcEdlc3R1cmVzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIF9zdHlsdXNUYXBHZXN0dXJlU2hvdWxkQ3JlYXRlRWRpdGFibGVJbWFnZTsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGF2ZVNldE9ic2N1cmVkSW5zZXRzOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSUVkZ2VJbnNldHMgX2NvbXB1dGVkT2JzY3Vy
ZWRJbnNldDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlFZGdlSW5zZXRzIF9j
b21wdXRlZFVub2JzY3VyZWRTYWZlQXJlYUluc2V0OworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5LCBnZXR0ZXI9X2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlKSBCT09MIF9yZXRh
aW5pbmdBY3RpdmVGb2N1c2VkU3RhdGU7CisKKy0gKEJPT0wpX2VmZmVjdGl2ZUFwcGVhcmFuY2VJ
c0Rhcms7CistIChCT09MKV9lZmZlY3RpdmVVc2VySW50ZXJmYWNlTGV2ZWxJc0VsZXZhdGVkOwor
CitAZW5kCisKK2ludDMyX3QgZGV2aWNlT3JpZW50YXRpb24oKTsKKworI2VuZGlmIC8vIFBMQVRG
T1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
aW9zL1dLV2ViVmlld0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tX
ZWJWaWV3SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1ZWVlNTVhMjFmZTE4NDI2Zjg1YzUxZGQ3NTMyY2Nk
MjMxZGIwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
aW9zL1dLV2ViVmlld0lPUy5tbQpAQCAtMCwwICsxLDMwNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SU9TLmgiCisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0ICJGcm9udEJvYXJkU2VydmljZXNTUEkuaCIKKyNp
bXBvcnQgIk5hdmlnYXRpb25TdGF0ZS5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFu
Y2VEYXRhLmgiCisjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCisj
aW1wb3J0ICJWZXJzaW9uQ2hlY2tzLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tC
YWNrRm9yd2FyZExpc3RJdGVtSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudFZpZXcuaCIK
KyNpbXBvcnQgIldLUGFzc3dvcmRWaWV3LmgiCisjaW1wb3J0ICJXS1NhZmVCcm93c2luZ1dhcm5p
bmcuaCIKKyNpbXBvcnQgIldLU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV0tVSURlbGVnYXRlUHJp
dmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkludGVybmFsLmgiCisjaW1w
b3J0ICJXS1dlYlZpZXdDb250ZW50UHJvdmlkZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlld0NvbnRl
bnRQcm92aWRlclJlZ2lzdHJ5LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1w
b3J0ICJXS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ0lPUy5oIgorI2ltcG9ydCAiV2ViQmFja0Zv
cndhcmRMaXN0LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIl9XS0FjdGl2
YXRlZEVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Q0cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0xvY2FsQ3VycmVudFRyYWl0Q29sbGVjdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlw
ZVJlZ2lzdHJ5Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNp
bXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KKworI2lmIEVOQUJMRShE
QVRBX0RFVEVDVElPTikKKyNpbXBvcnQgIldLRGF0YURldGVjdG9yVHlwZXNJbnRlcm5hbC5oIgor
I2VuZGlmCisKKyNkZWZpbmUgRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5UVklFVyhfYWN0aW9u
KSBcCistICh2b2lkKV9hY3Rpb246KGlkKXNlbmRlciBcCit7IFwKKyAgICBpZiAoc2VsZi51c2Vz
U3RhbmRhcmRDb250ZW50VmlldykgXAorICAgICAgICBbX2NvbnRlbnRWaWV3IF9hY3Rpb24gIyMg
Rm9yV2ViVmlldzpzZW5kZXJdOyBcCit9CisKKyNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCguLi4pIFJFTEVBU0VfTE9HX0lGKF9wYWdlICYmIF9wYWdlLT5pc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKSwgVmlld1N0YXRlLCBfX1ZBX0FSR1NfXykKKworc3RhdGljIGNvbnN0IFNlY29uZHMg
ZGVsYXlCZWZvcmVOb1Zpc2libGVDb250ZW50c1JlY3RzTG9nZ2luZyA9IDFfczsKK3N0YXRpYyBj
b25zdCBTZWNvbmRzIGRlbGF5QmVmb3JlTm9Db21taXRzTG9nZ2luZyA9IDVfczsKKworc3RhdGlj
IGludDMyX3QgZGV2aWNlT3JpZW50YXRpb25Gb3JVSUludGVyZmFjZU9yaWVudGF0aW9uKFVJSW50
ZXJmYWNlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgc3dpdGNoIChvcmllbnRhdGlv
bikgeworICAgIGNhc2UgVUlJbnRlcmZhY2VPcmllbnRhdGlvblVua25vd246CisgICAgY2FzZSBV
SUludGVyZmFjZU9yaWVudGF0aW9uUG9ydHJhaXQ6CisgICAgICAgIHJldHVybiAwOworICAgIGNh
c2UgVUlJbnRlcmZhY2VPcmllbnRhdGlvblBvcnRyYWl0VXBzaWRlRG93bjoKKyAgICAgICAgcmV0
dXJuIDE4MDsKKyAgICBjYXNlIFVJSW50ZXJmYWNlT3JpZW50YXRpb25MYW5kc2NhcGVMZWZ0Ogor
ICAgICAgICByZXR1cm4gLTkwOworICAgIGNhc2UgVUlJbnRlcmZhY2VPcmllbnRhdGlvbkxhbmRz
Y2FwZVJpZ2h0OgorICAgICAgICByZXR1cm4gOTA7CisgICAgfQorfQorCitpbnQzMl90IGRldmlj
ZU9yaWVudGF0aW9uKCkKK3sKK0FMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisg
ICAgcmV0dXJuIGRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbihbW1VJ
QXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIHN0YXR1c0Jhck9yaWVudGF0aW9uXSk7CitB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKK30KKworQGludGVyZmFjZSBVSVZpZXcg
KFVJVmlld0ludGVybmFsKQorLSAoVUlWaWV3Q29udHJvbGxlciAqKV92aWV3Q29udHJvbGxlckZv
ckFuY2VzdG9yOworQGVuZAorCitAaW50ZXJmYWNlIFVJV2luZG93IChVSVdpbmRvd0ludGVybmFs
KQorLSAoQk9PTClfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzOworQGVuZAorCitAaW50ZXJmYWNl
IFVJVmlld0NvbnRyb2xsZXIgKFVJVmlld0NvbnRyb2xsZXJJbnRlcm5hbCkKKy0gKFVJVmlld0Nv
bnRyb2xsZXIgKilfcm9vdEFuY2VzdG9yVmlld0NvbnRyb2xsZXI7CistIChVSVZpZXdDb250cm9s
bGVyICopX3ZpZXdDb250cm9sbGVyRm9yU3VwcG9ydGVkSW50ZXJmYWNlT3JpZW50YXRpb25zOwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1ZpZXdJbnRlcm5hbElPUykKKwor
LSAodm9pZClzZXRGcmFtZTooQ0dSZWN0KWZyYW1lCit7CisgICAgQ0dSZWN0IG9sZEZyYW1lID0g
c2VsZi5mcmFtZTsKKyAgICBbc3VwZXIgc2V0RnJhbWU6ZnJhbWVdOworCisgICAgaWYgKCFDR1Np
emVFcXVhbFRvU2l6ZShvbGRGcmFtZS5zaXplLCBmcmFtZS5zaXplKSkKKyAgICAgICAgW3NlbGYg
X2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKK30KKworLSAodm9pZClzZXRCb3VuZHM6KENHUmVjdCli
b3VuZHMKK3sKKyAgICBDR1JlY3Qgb2xkQm91bmRzID0gc2VsZi5ib3VuZHM7CisgICAgW3N1cGVy
IHNldEJvdW5kczpib3VuZHNdOworICAgIFtfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcg
c2V0RnJhbWU6c2VsZi5ib3VuZHNdOworCisgICAgaWYgKCFDR1NpemVFcXVhbFRvU2l6ZShvbGRC
b3VuZHMuc2l6ZSwgYm91bmRzLnNpemUpKQorICAgICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0No
YW5nZWRdOworfQorCistICh2b2lkKWxheW91dFN1YnZpZXdzCit7CisgICAgW19zYWZlQnJvd3Np
bmdXYXJuaW5nIHNldEZyYW1lOnNlbGYuYm91bmRzXTsKKyAgICBbc3VwZXIgbGF5b3V0U3Vidmll
d3NdOworICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07Cit9CisKKyNwcmFnbWEgbWFy
ayAtIGlPUyBpbXBsZW1lbnRhdGlvbiBtZXRob2RzCisKKy0gKEJPT0wpX2lzU2hvd2luZ1ZpZGVv
UGljdHVyZUluUGljdHVyZQoreworI2lmICFIQVZFKEFWS0lUKQorICAgIHJldHVybiBmYWxzZTsK
KyNlbHNlCisgICAgaWYgKCFfcGFnZSB8fCAhX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIF9wYWdlLT52aWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyKCktPmhhc01vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSk7CisjZW5kaWYKK30KKworLSAoQk9P
TClfbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUKK3sKKyNpZiAhSEFW
RShBVktJVCkKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIGlmICghX3BhZ2UgfHwgIV9w
YWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBfcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5tYXlBdXRvbWF0aWNh
bGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpOworI2VuZGlmCit9CisKKy0gKHZvaWQpX2lu
Y3JlbWVudEZvY3VzUHJlc2VydmF0aW9uQ291bnQKK3sKKyAgICArK19mb2N1c1ByZXNlcnZhdGlv
bkNvdW50OworfQorCistICh2b2lkKV9kZWNyZW1lbnRGb2N1c1ByZXNlcnZhdGlvbkNvdW50Cit7
CisgICAgaWYgKF9mb2N1c1ByZXNlcnZhdGlvbkNvdW50KQorICAgICAgICAtLV9mb2N1c1ByZXNl
cnZhdGlvbkNvdW50OworfQorCistICh2b2lkKV9yZXNldEZvY3VzUHJlc2VydmF0aW9uQ291bnQK
K3sKKyAgICBfZm9jdXNQcmVzZXJ2YXRpb25Db3VudCA9IDA7Cit9CisKKy0gKEJPT0wpX2lzUmV0
YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlCit7CisgICAgLy8gRm9jdXMgcHJlc2VydmF0aW9uIGNv
dW50IGZ1bGZpbGxzIHRoZSBzYW1lIHJvbGUgYXMgYWN0aXZlIGZvY3VzIHN0YXRlIGNvdW50Lgor
ICAgIC8vIEhvd2V2ZXIsIHVubGlrZSBhY3RpdmUgZm9jdXMgc3RhdGUsIGl0IG1heSBiZSByZXNl
dCB0byAwIHdpdGhvdXQgaW1wYWN0aW5nIHRoZQorICAgIC8vIGJlaGF2aW9yIG9mIC1fcmV0YWlu
QWN0aXZlRm9jdXNlZFN0YXRlLCBhbmQgaXQncyBoYXJtbGVzcyB0byBpbnZva2UKKyAgICAvLyAt
X2RlY3JlbWVudEZvY3VzUHJlc2VydmF0aW9uQ291bnQgYWZ0ZXIgcmVzZXR0aW5nIHRoZSBjb3Vu
dCB0byAwLgorICAgIHJldHVybiBfZm9jdXNQcmVzZXJ2YXRpb25Db3VudCB8fCBfYWN0aXZlRm9j
dXNlZFN0YXRlUmV0YWluQ291bnQ7Cit9CisKKy0gKEJPT0wpX2VmZmVjdGl2ZUFwcGVhcmFuY2VJ
c0RhcmsKK3sKKyAgICByZXR1cm4gc2VsZi50cmFpdENvbGxlY3Rpb24udXNlckludGVyZmFjZVN0
eWxlID09IFVJVXNlckludGVyZmFjZVN0eWxlRGFyazsKK30KKworLSAoQk9PTClfZWZmZWN0aXZl
VXNlckludGVyZmFjZUxldmVsSXNFbGV2YXRlZAoreworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NV
UFBPUlQpICYmICFQTEFURk9STShXQVRDSE9TKQorICAgIHJldHVybiBzZWxmLnRyYWl0Q29sbGVj
dGlvbi51c2VySW50ZXJmYWNlTGV2ZWwgPT0gVUlVc2VySW50ZXJmYWNlTGV2ZWxFbGV2YXRlZDsK
KyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCit9CisKKy0gKHZvaWQpX3BvcHVsYXRlQXJj
aGl2ZWRTdWJ2aWV3czooTlNNdXRhYmxlU2V0ICopZW5jb2RlZFZpZXdzCit7CisgICAgW3N1cGVy
IF9wb3B1bGF0ZUFyY2hpdmVkU3Vidmlld3M6ZW5jb2RlZFZpZXdzXTsKKworICAgIGlmIChfc2Ny
b2xsVmlldykKKyAgICAgICAgW2VuY29kZWRWaWV3cyByZW1vdmVPYmplY3Q6X3Njcm9sbFZpZXcu
Z2V0KCldOworICAgIGlmIChfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcpCisgICAgICAg
IFtlbmNvZGVkVmlld3MgcmVtb3ZlT2JqZWN0Ol9jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5Vmll
dy5nZXQoKV07Cit9CisKKy0gKEJPT0wpX2lzQmFja2dyb3VuZAoreworICAgIGlmICghW3NlbGYg
dXNlc1N0YW5kYXJkQ29udGVudFZpZXddICYmIFtfY3VzdG9tQ29udGVudFZpZXcgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJfaXNCYWNrZ3JvdW5kKV0pCisgICAgICAgIHJldHVybiBb
X2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9pc0JhY2tncm91bmRdOworICAgIHJldHVybiBbX2NvbnRl
bnRWaWV3IGlzQmFja2dyb3VuZF07Cit9CisKK0FMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCistIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilicm93c2luZ0NvbnRleHRD
b250cm9sbGVyCit7CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgYnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlcl07Cit9CitBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKworLSAoQk9P
TCliZWNvbWVGaXJzdFJlc3BvbmRlcgoreworICAgIFVJVmlldyAqY3VycmVudENvbnRlbnRWaWV3
ID0gc2VsZi5fY3VycmVudENvbnRlbnRWaWV3OworICAgIGlmIChjdXJyZW50Q29udGVudFZpZXcg
PT0gX2NvbnRlbnRWaWV3ICYmIFtfY29udGVudFZpZXcgc3VwZXJ2aWV3XSkKKyAgICAgICAgcmV0
dXJuIFtfY29udGVudFZpZXcgYmVjb21lRmlyc3RSZXNwb25kZXJGb3JXZWJWaWV3XSB8fCBbc3Vw
ZXIgYmVjb21lRmlyc3RSZXNwb25kZXJdOworCisgICAgcmV0dXJuIFtjdXJyZW50Q29udGVudFZp
ZXcgYmVjb21lRmlyc3RSZXNwb25kZXJdIHx8IFtzdXBlciBiZWNvbWVGaXJzdFJlc3BvbmRlcl07
Cit9CisKKy0gKEJPT0wpY2FuQmVjb21lRmlyc3RSZXNwb25kZXIKK3sKKyAgICBpZiAoc2VsZi5f
Y3VycmVudENvbnRlbnRWaWV3ID09IF9jb250ZW50VmlldykKKyAgICAgICAgcmV0dXJuIFtfY29u
dGVudFZpZXcgY2FuQmVjb21lRmlyc3RSZXNwb25kZXJGb3JXZWJWaWV3XTsKKworICAgIHJldHVy
biBZRVM7Cit9CisKKy0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKK3sKKyAgICBpZiAoW19j
b250ZW50VmlldyBpc0ZpcnN0UmVzcG9uZGVyXSkKKyAgICAgICAgcmV0dXJuIFtfY29udGVudFZp
ZXcgcmVzaWduRmlyc3RSZXNwb25kZXJGb3JXZWJWaWV3XTsKKworICAgIHJldHVybiBbc3VwZXIg
cmVzaWduRmlyc3RSZXNwb25kZXJdOworfQorCitGT1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElP
TihGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRFTlRWSUVXKQorCistIChCT09MKWNhblBlcmZvcm1B
Y3Rpb246KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCit7CisjZGVmaW5lIEZPUldB
UkRfQ0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9hY3Rpb24pIFwKKyAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3RvcihfYWN0aW9uOikpIFwKKyAgICAgICAgcmV0dXJuIHNlbGYudXNl
c1N0YW5kYXJkQ29udGVudFZpZXcgJiYgW19jb250ZW50VmlldyBjYW5QZXJmb3JtQWN0aW9uRm9y
V2ViVmlldzphY3Rpb24gd2l0aFNlbmRlcjpzZW5kZXJdOworCisgICAgRk9SX0VBQ0hfV0tDT05U
RU5UVklFV19BQ1RJT04oRk9SV0FSRF9DQU5QRVJGT1JNQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcp
CisgICAgRk9SX0VBQ0hfUFJJVkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0NBTlBF
UkZPUk1BQ1RJT05fVE9fV0tDT05URU5UVklFVykKKyAgICBGT1JXQVJEX0NBTlBFUkZPUk1BQ1RJ
T05fVE9fV0tDT05URU5UVklFVyhfc2V0VGV4dENvbG9yOnNlbmRlcikKKyAgICBGT1JXQVJEX0NB
TlBFUkZPUk1BQ1RJT05fVE9fV0tDT05URU5UVklFVyhfc2V0Rm9udFNpemU6c2VuZGVyKQorICAg
IEZPUldBUkRfQ0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9zZXRGb250OnNlbmRl
cikKKworI3VuZGVmIEZPUldBUkRfQ0FOUEVSRk9STUFDVElPTl9UT19XS0NPTlRFTlRWSUVXCisK
KyAgICByZXR1cm4gW3N1cGVyIGNhblBlcmZvcm1BY3Rpb246YWN0aW9uIHdpdGhTZW5kZXI6c2Vu
ZGVyXTsKK30KKworLSAoaWQpdGFyZ2V0Rm9yQWN0aW9uOihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6
KGlkKXNlbmRlcgoreworI2RlZmluZSBGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NPTlRF
TlRWSUVXKF9hY3Rpb24pIFwKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfYWN0aW9uOikg
JiYgc2VsZi51c2VzU3RhbmRhcmRDb250ZW50VmlldykgXAorICAgICAgICByZXR1cm4gW19jb250
ZW50VmlldyB0YXJnZXRGb3JBY3Rpb25Gb3JXZWJWaWV3OmFjdGlvbiB3aXRoU2VuZGVyOnNlbmRl
cl07CisKKyAgICBGT1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX1RBUkdFVEZP
UkFDVElPTl9UT19XS0NPTlRFTlRWSUVXKQorICAgIEZPUl9FQUNIX1BSSVZBVEVfV0tDT05URU5U
VklFV19BQ1RJT04oRk9SV0FSRF9UQVJHRVRGT1JBQ1RJT05fVE9fV0tDT05URU5UVklFVykKKyAg
ICBGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NPTlRFTlRWSUVXKF9zZXRUZXh0Q29sb3I6
c2VuZGVyKQorICAgIEZPUldBUkRfVEFSR0VURk9SQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcoX3Nl
dEZvbnRTaXplOnNlbmRlcikKKyAgICBGT1JXQVJEX1RBUkdFVEZPUkFDVElPTl9UT19XS0NPTlRF
TlRWSUVXKF9zZXRGb250OnNlbmRlcikKKworI3VuZGVmIEZPUldBUkRfVEFSR0VURk9SQUNUSU9O
X1RPX1dLQ09OVEVOVFZJRVcKKworICAgIHJldHVybiBbc3VwZXIgdGFyZ2V0Rm9yQWN0aW9uOmFj
dGlvbiB3aXRoU2VuZGVyOnNlbmRlcl07Cit9CisKKy0gKHZvaWQpd2lsbEZpbmlzaElnbm9yaW5n
Q2FsbG91dEJhckZhZGVBZnRlclBlcmZvcm1pbmdBY3Rpb24KK3sKKyAgICBbX2NvbnRlbnRWaWV3
IHdpbGxGaW5pc2hJZ25vcmluZ0NhbGxvdXRCYXJGYWRlQWZ0ZXJQZXJmb3JtaW5nQWN0aW9uXTsK
K30KKworc3RhdGljIGlubGluZSBDR0Zsb2F0IGZsb29yVG9EZXZpY2VQaXhlbChDR0Zsb2F0IGlu
cHV0LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICByZXR1cm4gQ0dGbG9vcihpbnB1
dCAqIGRldmljZVNjYWxlRmFjdG9yKSAvIGRldmljZVNjYWxlRmFjdG9yOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgcG9pbnRzRXF1YWxJbkRldmljZVBpeGVscyhDR1BvaW50IGEsIENHUG9pbnQg
YiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgcmV0dXJuIGZhYnMoYS54ICogZGV2
aWNlU2NhbGVGYWN0b3IgLSBiLnggKiBkZXZpY2VTY2FsZUZhY3RvcikgPCBzdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpCisgICAgICAgICYmIGZhYnMoYS55ICogZGV2aWNlU2Nh
bGVGYWN0b3IgLSBiLnkgKiBkZXZpY2VTY2FsZUZhY3RvcikgPCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6ZXBzaWxvbigpOworfQorCitzdGF0aWMgQ0dTaXplIHJvdW5kU2Nyb2xsVmlld0Nv
bnRlbnRTaXplKGNvbnN0IFdlYktpdDo6V2ViUGFnZVByb3h5JiBwYWdlLCBDR1NpemUgY29udGVu
dFNpemUpCit7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBwYWdlLmRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgcmV0dXJuIENHU2l6ZU1ha2UoZmxvb3JUb0RldmljZVBpeGVsKGNvbnRl
bnRTaXplLndpZHRoLCBkZXZpY2VTY2FsZUZhY3RvciksIGZsb29yVG9EZXZpY2VQaXhlbChjb250
ZW50U2l6ZS5oZWlnaHQsIGRldmljZVNjYWxlRmFjdG9yKSk7Cit9CisKKy0gKFVJVmlldyAqKV9j
dXJyZW50Q29udGVudFZpZXcKK3sKKyAgICByZXR1cm4gX2N1c3RvbUNvbnRlbnRWaWV3ID8gW19j
dXN0b21Db250ZW50VmlldyB3ZWJfY29udGVudFZpZXddIDogX2NvbnRlbnRWaWV3LmdldCgpOwor
fQorCistIChXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeSAqKV9jb250ZW50UHJvdmlk
ZXJSZWdpc3RyeQoreworICAgIHJldHVybiBbX2NvbmZpZ3VyYXRpb24gX2NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5XTsKK30KKworLSAoV0tTZWxlY3Rpb25HcmFudWxhcml0eSlfc2VsZWN0aW9uR3Jh
bnVsYXJpdHkKK3sKKyAgICByZXR1cm4gW19jb25maWd1cmF0aW9uIHNlbGVjdGlvbkdyYW51bGFy
aXR5XTsKK30KKworLSAodm9pZClfc2V0SGFzQ3VzdG9tQ29udGVudFZpZXc6KEJPT0wpcGFnZUhh
c0N1c3RvbUNvbnRlbnRWaWV3IGxvYWRlZE1JTUVUeXBlOihjb25zdCBXVEY6OlN0cmluZyYpbWlt
ZVR5cGUKK3sKKyAgICBpZiAocGFnZUhhc0N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAgICAgIFtf
Y3VzdG9tQ29udGVudFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgICAgIFtfY3VzdG9t
Q29udGVudEZpeGVkT3ZlcmxheVZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICAgICAg
Q2xhc3MgcmVwcmVzZW50YXRpb25DbGFzcyA9IFtbX2NvbmZpZ3VyYXRpb24gX2NvbnRlbnRQcm92
aWRlclJlZ2lzdHJ5XSBwcm92aWRlckZvck1JTUVUeXBlOm1pbWVUeXBlXTsKKyAgICAgICAgQVNT
RVJUKHJlcHJlc2VudGF0aW9uQ2xhc3MpOworICAgICAgICBfY3VzdG9tQ29udGVudFZpZXcgPSBh
ZG9wdE5TKFtbcmVwcmVzZW50YXRpb25DbGFzcyBhbGxvY10gd2ViX2luaXRXaXRoRnJhbWU6c2Vs
Zi5ib3VuZHMgd2ViVmlldzpzZWxmIG1pbWVUeXBlOm1pbWVUeXBlXSk7CisgICAgICAgIF9jdXN0
b21Db250ZW50Rml4ZWRPdmVybGF5VmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6c2VsZi5ib3VuZHNdKTsKKyAgICAgICAgW19jdXN0b21Db250ZW50Rml4ZWRPdmVy
bGF5VmlldyBsYXllcl0ubmFtZSA9IEAiQ3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheSI7CisgICAg
ICAgIFtfY3VzdG9tQ29udGVudEZpeGVkT3ZlcmxheVZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5h
YmxlZDpOT107CisKKyAgICAgICAgW1tfY29udGVudFZpZXcgdW5zY2FsZWRWaWV3XSByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgW19jb250ZW50VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKKyAgICAgICAgW19zY3JvbGxWaWV3IGFkZFN1YnZpZXc6X2N1c3RvbUNvbnRlbnRWaWV3Lmdl
dCgpXTsKKyAgICAgICAgW3NlbGYgYWRkU3VidmlldzpfY3VzdG9tQ29udGVudEZpeGVkT3Zlcmxh
eVZpZXcuZ2V0KCldOworCisgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3NldE1pbmlt
dW1TaXplOnNlbGYuYm91bmRzLnNpemVdOworICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdl
Yl9zZXRGaXhlZE92ZXJsYXlWaWV3Ol9jdXN0b21Db250ZW50Rml4ZWRPdmVybGF5Vmlldy5nZXQo
KV07CisKKyAgICAgICAgX3Njcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xv
cigpOworICAgICAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpbc2VsZiBfaW5pdGlh
bENvbnRlbnRPZmZzZXRGb3JTY3JvbGxWaWV3XV07CisgICAgICAgIFtfc2Nyb2xsVmlldyBfc2V0
U2Nyb2xsRW5hYmxlZEludGVybmFsOllFU107CisKKyAgICAgICAgW3NlbGYgX3NldEF2b2lkc1Vu
c2FmZUFyZWE6Tk9dOworICAgIH0gZWxzZSBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAg
ICAgIFtfY3VzdG9tQ29udGVudFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgICAgIF9j
dXN0b21Db250ZW50VmlldyA9IG51bGxwdHI7CisKKyAgICAgICAgW19jdXN0b21Db250ZW50Rml4
ZWRPdmVybGF5VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgX2N1c3RvbUNvbnRl
bnRGaXhlZE92ZXJsYXlWaWV3ID0gbnVsbHB0cjsKKworICAgICAgICBbX3Njcm9sbFZpZXcgYWRk
U3VidmlldzpfY29udGVudFZpZXcuZ2V0KCldOworICAgICAgICBbX3Njcm9sbFZpZXcgYWRkU3Vi
dmlldzpbX2NvbnRlbnRWaWV3IHVuc2NhbGVkVmlld11dOworICAgICAgICBbX3Njcm9sbFZpZXcg
c2V0Q29udGVudFNpemU6cm91bmRTY3JvbGxWaWV3Q29udGVudFNpemUoKl9wYWdlLCBbX2NvbnRl
bnRWaWV3IGZyYW1lXS5zaXplKV07CisKKyAgICAgICAgW19jdXN0b21Db250ZW50Rml4ZWRPdmVy
bGF5VmlldyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CisgICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6
X2N1c3RvbUNvbnRlbnRGaXhlZE92ZXJsYXlWaWV3LmdldCgpXTsKKyAgICB9CisKKyAgICBpZiAo
c2VsZi5pc0ZpcnN0UmVzcG9uZGVyKSB7CisgICAgICAgIFVJVmlldyAqY3VycmVudENvbnRlbnRW
aWV3ID0gc2VsZi5fY3VycmVudENvbnRlbnRWaWV3OworICAgICAgICBpZiAoY3VycmVudENvbnRl
bnRWaWV3ID09IF9jb250ZW50VmlldyA/IFtfY29udGVudFZpZXcgY2FuQmVjb21lRmlyc3RSZXNw
b25kZXJGb3JXZWJWaWV3XSA6IGN1cnJlbnRDb250ZW50Vmlldy5jYW5CZWNvbWVGaXJzdFJlc3Bv
bmRlcikKKyAgICAgICAgICAgIFtjdXJyZW50Q29udGVudFZpZXcgYmVjb21lRmlyc3RSZXNwb25k
ZXJdOworICAgIH0KK30KKworLSAodm9pZClfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21D
b250ZW50UHJvdmlkZXJXaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KGNvbnN0IFN0cmluZyYpc3VnZ2Vz
dGVkRmlsZW5hbWUgZGF0YTooTlNEYXRhICopZGF0YQoreworICAgIEFTU0VSVChfY3VzdG9tQ29u
dGVudFZpZXcpOworICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3NldENvbnRlbnRQcm92aWRl
ckRhdGE6ZGF0YSBzdWdnZXN0ZWRGaWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFtZV07CisKKyAgICAv
LyBGSVhNRTogSXQgbWF5IG1ha2UgbW9yZSBzZW5zZSBmb3IgY3VzdG9tIGNvbnRlbnQgcHJvdmlk
ZXJzIHRvIGludm9rZSB0aGlzIHdoZW4gdGhleSdyZSByZWFkeSwKKyAgICAvLyBiZWNhdXNlIHRo
ZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgYWxsIGN1c3RvbSBjb250ZW50IHByb3ZpZGVycyB3aWxs
IGxheSBvdXQgc3luY2hyb25vdXNseS4KKyAgICBfcGFnZS0+ZGlkTGF5b3V0Rm9yQ3VzdG9tQ29u
dGVudFByb3ZpZGVyKCk7Cit9CisKKy0gKHZvaWQpX2hhbmRsZUtleVVJRXZlbnQ6KDo6VUlFdmVu
dCAqKWV2ZW50Cit7CisgICAgLy8gV2Ugb25seSB3YW50IHRvIGhhbmRsZSBrZXkgZXZlbnRzIGZy
b20gdGhlIGhhcmR3YXJlIGtleWJvYXJkIHdoZW4gd2UgYXJlCisgICAgLy8gZmlyc3QgcmVzcG9u
ZGVyIGFuZCBhIGN1c3RvbSBjb250ZW50IHZpZXcgaXMgaW5zdGFsbGVkOyBvdGhlcndpc2UsCisg
ICAgLy8gV0tDb250ZW50VmlldyB3aWxsIGJlIHRoZSBmaXJzdCByZXNwb25kZXIgYW5kIGV4cGVj
dHMgdG8gZ2V0IGtleSBldmVudHMgZGlyZWN0bHkuCisgICAgaWYgKFtzZWxmIGlzRmlyc3RSZXNw
b25kZXJdICYmIGV2ZW50Ll9oaWRFdmVudCkgeworICAgICAgICBpZiAoW19jdXN0b21Db250ZW50
VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9oYW5kbGVLZXlFdmVudDopXSkg
eworICAgICAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2hhbmRsZUtleUV2ZW50
OmV2ZW50XSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBbc3VwZXIgX2hhbmRsZUtleVVJRXZlbnQ6ZXZlbnRdOworfQorCistICh2b2lkKV93aWxsSW52
b2tlVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjaworeworICAgIF9pbnZva2luZ1VJU2Nyb2xs
Vmlld0RlbGVnYXRlQ2FsbGJhY2sgPSBZRVM7Cit9CisKKy0gKHZvaWQpX2RpZEludm9rZVVJU2Ny
b2xsVmlld0RlbGVnYXRlQ2FsbGJhY2sKK3sKKyAgICBfaW52b2tpbmdVSVNjcm9sbFZpZXdEZWxl
Z2F0ZUNhbGxiYWNrID0gTk87CisgICAgaWYgKF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50
UmVjdHNGb3JVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNrKSB7CisgICAgICAgIF9kaWREZWZl
clVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVSVNjcm9sbFZpZXdEZWxlZ2F0ZUNhbGxiYWNr
ID0gTk87CisgICAgICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07
CisgICAgfQorfQorCitzdGF0aWMgQ0dGbG9hdCBjb250ZW50Wm9vbVNjYWxlKFdLV2ViVmlldyAq
d2ViVmlldykKK3sKKyAgICBDR0Zsb2F0IHNjYWxlID0gd2ViVmlldy5fY3VycmVudENvbnRlbnRW
aWV3LmxheWVyLmFmZmluZVRyYW5zZm9ybS5hOworICAgIEFTU0VSVChzY2FsZSA9PSBbd2ViVmll
dy0+X3Njcm9sbFZpZXcgem9vbVNjYWxlXSk7CisgICAgcmV0dXJuIHNjYWxlOworfQorCitzdGF0
aWMgV2ViQ29yZTo6Q29sb3IgYmFzZVNjcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IoV0tXZWJWaWV3
ICp3ZWJWaWV3KQoreworICAgIGlmICh3ZWJWaWV3LT5fY3VzdG9tQ29udGVudFZpZXcpCisgICAg
ICAgIHJldHVybiBbd2ViVmlldy0+X2N1c3RvbUNvbnRlbnRWaWV3IGJhY2tncm91bmRDb2xvcl0u
Q0dDb2xvcjsKKworICAgIGlmICh3ZWJWaWV3LT5fZ2VzdHVyZUNvbnRyb2xsZXIpIHsKKyAgICAg
ICAgV2ViQ29yZTo6Q29sb3IgY29sb3IgPSB3ZWJWaWV3LT5fZ2VzdHVyZUNvbnRyb2xsZXItPmJh
Y2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCgpOworICAgICAgICBpZiAoY29sb3IuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIH0KKworICAgIGlmICghd2Vi
Vmlldy0+X3BhZ2UpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gd2ViVmlldy0+
X3BhZ2UtPnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpOworfQorCitzdGF0aWMgV2ViQ29y
ZTo6Q29sb3Igc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcihXS1dlYlZpZXcgKndlYlZpZXcpCit7
CisgICAgaWYgKCF3ZWJWaWV3Lm9wYXF1ZSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbG9y
Ojp0cmFuc3BhcmVudDsKKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgV2Vi
Q29yZTo6TG9jYWxDdXJyZW50VHJhaXRDb2xsZWN0aW9uIGxvY2FsVHJhaXRDb2xsZWN0aW9uKHdl
YlZpZXcudHJhaXRDb2xsZWN0aW9uKTsKKyNlbmRpZgorCisgICAgV2ViQ29yZTo6Q29sb3IgY29s
b3IgPSBiYXNlU2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcih3ZWJWaWV3KTsKKworICAgIGlmICgh
Y29sb3IuaXNWYWxpZCgpICYmIHdlYlZpZXctPl9jb250ZW50VmlldykKKyAgICAgICAgY29sb3Ig
PSBbd2ViVmlldy0+X2NvbnRlbnRWaWV3IGJhY2tncm91bmRDb2xvcl0uQ0dDb2xvcjsKKworICAg
IGlmICghY29sb3IuaXNWYWxpZCgpKSB7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkK
KyAgICAgICAgY29sb3IgPSBVSUNvbG9yLnN5c3RlbUJhY2tncm91bmRDb2xvci5DR0NvbG9yOwor
I2Vsc2UKKyAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpDb2xvcjo6d2hpdGU7CisjZW5kaWYKKyAg
ICB9CisKKyAgICBDR0Zsb2F0IHpvb21TY2FsZSA9IGNvbnRlbnRab29tU2NhbGUod2ViVmlldyk7
CisgICAgQ0dGbG9hdCBtaW5pbXVtWm9vbVNjYWxlID0gW3dlYlZpZXctPl9zY3JvbGxWaWV3IG1p
bmltdW1ab29tU2NhbGVdOworICAgIGlmICh6b29tU2NhbGUgPCBtaW5pbXVtWm9vbVNjYWxlKSB7
CisgICAgICAgIENHRmxvYXQgc2xvcGUgPSAxMjsKKyAgICAgICAgQ0dGbG9hdCBvcGFjaXR5ID0g
c3RkOjptYXg8Q0dGbG9hdD4oMSAtIHNsb3BlICogKG1pbmltdW1ab29tU2NhbGUgLSB6b29tU2Nh
bGUpLCAwKTsKKyAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpjb2xvcldpdGhPdmVycmlkZUFscGhh
KGNvbG9yLnJnYigpLCBvcGFjaXR5KTsKKyAgICB9CisKKyAgICByZXR1cm4gY29sb3I7Cit9CisK
Ky0gKHZvaWQpX3VwZGF0ZVNjcm9sbFZpZXdCYWNrZ3JvdW5kCit7CisgICAgV2ViQ29yZTo6Q29s
b3IgY29sb3IgPSBzY3JvbGxWaWV3QmFja2dyb3VuZENvbG9yKHNlbGYpOworCisgICAgaWYgKF9z
Y3JvbGxWaWV3QmFja2dyb3VuZENvbG9yID09IGNvbG9yKQorICAgICAgICByZXR1cm47CisKKyAg
ICBfc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvciA9IGNvbG9yOworCisgICAgYXV0byB1aUJhY2tn
cm91bmRDb2xvciA9IGFkb3B0TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0aENHQ29sb3I6Y2Fj
aGVkQ0dDb2xvcihjb2xvcildKTsKKyAgICBbX3Njcm9sbFZpZXcgc2V0QmFja2dyb3VuZENvbG9y
OnVpQmFja2dyb3VuZENvbG9yLmdldCgpXTsKKworICAgIC8vIFVwZGF0ZSB0aGUgaW5kaWNhdG9y
IHN0eWxlIGJhc2VkIG9uIHRoZSBsaWdodG5lc3MvZGFya25lc3Mgb2YgdGhlIGJhY2tncm91bmQg
Y29sb3IuCisgICAgZG91YmxlIGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzOworICAgIGNvbG9y
LmdldEhTTChodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcyk7CisgICAgaWYgKGxpZ2h0bmVzcyA8
PSAuNSAmJiBjb2xvci5pc1Zpc2libGUoKSkKKyAgICAgICAgW19zY3JvbGxWaWV3IHNldEluZGlj
YXRvclN0eWxlOlVJU2Nyb2xsVmlld0luZGljYXRvclN0eWxlV2hpdGVdOworICAgIGVsc2UKKyAg
ICAgICAgW19zY3JvbGxWaWV3IHNldEluZGljYXRvclN0eWxlOlVJU2Nyb2xsVmlld0luZGljYXRv
clN0eWxlQmxhY2tdOworfQorCistICh2b2lkKV92aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBpZiAoX2Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyKQorICAgICAgICBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHZpZGVv
Q29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlXTsKKyNlbmRpZgorfQorCistIChDR1BvaW50KV9pbml0
aWFsQ29udGVudE9mZnNldEZvclNjcm9sbFZpZXcKK3sKKyAgICBhdXRvIGNvbWJpbmVkVW5vYnNj
dXJlZEFuZFNjcm9sbFZpZXdJbnNldCA9IFtzZWxmIF9jb21wdXRlZENvbnRlbnRJbnNldF07Cisg
ICAgcmV0dXJuIENHUG9pbnRNYWtlKC1jb21iaW5lZFVub2JzY3VyZWRBbmRTY3JvbGxWaWV3SW5z
ZXQubGVmdCwgLWNvbWJpbmVkVW5vYnNjdXJlZEFuZFNjcm9sbFZpZXdJbnNldC50b3ApOworfQor
CistIChDR1BvaW50KV9jb250ZW50T2Zmc2V0QWRqdXN0ZWRGb3JPYnNjdXJlZEluc2V0OihDR1Bv
aW50KXBvaW50Cit7CisgICAgQ0dQb2ludCByZXN1bHQgPSBwb2ludDsKKyAgICBVSUVkZ2VJbnNl
dHMgY29udGVudEluc2V0ID0gW3NlbGYgX2NvbXB1dGVkT2JzY3VyZWRJbnNldF07CisKKyAgICBy
ZXN1bHQueCAtPSBjb250ZW50SW5zZXQubGVmdDsKKyAgICByZXN1bHQueSAtPSBjb250ZW50SW5z
ZXQudG9wOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoVUlSZWN0RWRnZSlfZWZmZWN0
aXZlT2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhCit7CisgICAgaWYgKCFbc2Vs
ZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCisgICAgICAgIHJldHVybiBVSVJlY3RFZGdlQWxs
OworICAgIHJldHVybiBfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOworfQor
CistIChVSUVkZ2VJbnNldHMpX2NvbXB1dGVkT2JzY3VyZWRJbnNldAoreworICAgIGlmICghbGlu
a2VkT25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lvbjo6Rmlyc3RXaGVyZVNjcm9sbFZpZXdDb250
ZW50SW5zZXRzQXJlTm90T2JzY3VyaW5nSW5zZXRzKSkgeworICAgICAgICAvLyBGb3IgYmluYXJ5
IGNvbXBhYmlsaXR5IHdpdGggdGhpcmQgcGFydHkgYXBwcywgdHJlYXQgc2Nyb2xsIHZpZXcgY29u
dGVudCBpbnNldHMgYXMgb2JzY3VyaW5nIGluc2V0cyB3aGVuIHRoZSBhcHAgaXMgY29tcGlsZWQK
KyAgICAgICAgLy8gYWdhaW5zdCBhIFdlYktpdCB2ZXJzaW9uIHdpdGhvdXQgdGhlIGZpeCBpbiBy
MjI5NjQxLgorICAgICAgICByZXR1cm4gW3NlbGYgX2NvbXB1dGVkQ29udGVudEluc2V0XTsKKyAg
ICB9CisKKyAgICBpZiAoX2hhdmVTZXRPYnNjdXJlZEluc2V0cykKKyAgICAgICAgcmV0dXJuIF9v
YnNjdXJlZEluc2V0czsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoc2VsZi5fc2FmZUFy
ZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cykKKyAgICAgICAgcmV0dXJuIFVJRWRnZUluc2V0
c0FkZChVSUVkZ2VJbnNldHNaZXJvLCBzZWxmLl9zY3JvbGxWaWV3U3lzdGVtQ29udGVudEluc2V0
LCBzZWxmLl9lZmZlY3RpdmVPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEpOwor
I2VuZGlmCisKKyAgICByZXR1cm4gVUlFZGdlSW5zZXRzWmVybzsKK30KKworLSAoVUlFZGdlSW5z
ZXRzKV9jb21wdXRlZENvbnRlbnRJbnNldAoreworICAgIGlmIChfaGF2ZVNldE9ic2N1cmVkSW5z
ZXRzKQorICAgICAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRzOworCisgICAgVUlFZGdlSW5zZXRz
IGluc2V0cyA9IFtfc2Nyb2xsVmlldyBjb250ZW50SW5zZXRdOworCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIGlmIChzZWxmLl9zYWZlQXJlYVNob3VsZEFmZmVjdE9ic2N1cmVkSW5zZXRzKQorICAg
ICAgICBpbnNldHMgPSBVSUVkZ2VJbnNldHNBZGQoaW5zZXRzLCBzZWxmLl9zY3JvbGxWaWV3U3lz
dGVtQ29udGVudEluc2V0LCBzZWxmLl9lZmZlY3RpdmVPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3Rl
ZEJ5U2FmZUFyZWEpOworI2VuZGlmCisKKyAgICByZXR1cm4gaW5zZXRzOworfQorCistIChVSUVk
Z2VJbnNldHMpX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5zZXQKK3sKKyAgICBpZiAoX2hh
dmVTZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMpCisgICAgICAgIHJldHVybiBfdW5vYnNjdXJl
ZFNhZmVBcmVhSW5zZXRzOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmICghc2VsZi5fc2Fm
ZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cykKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Fm
ZUFyZWFJbnNldHM7CisjZW5kaWYKKworICAgIHJldHVybiBVSUVkZ2VJbnNldHNaZXJvOworfQor
CistICh2b2lkKV9wcm9jZXNzV2lsbFN3YXBPckRpZEV4aXQKK3sKKyAgICAvLyBGSVhNRTogV2hp
Y2ggb25lcyBvZiB0aGVzZSBuZWVkIHRvIGJlIGRvbmUgaW4gdGhlIHByb2Nlc3Mgc3dhcCBjYXNl
IGFuZCB3aGljaCBvbmVzIGluIHRoZSBleGl0IGNhc2U/CisgICAgW3NlbGYgX2hpZGVQYXNzd29y
ZFZpZXddOworICAgIFtzZWxmIF9jYW5jZWxBbmltYXRlZFJlc2l6ZV07CisKKyAgICBpZiAoX2dl
c3R1cmVDb250cm9sbGVyKQorICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmRpc2Nvbm5lY3RG
cm9tUHJvY2VzcygpOworCisgICAgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoID0gV2ViQ29yZTo6Vmll
d3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBfaW5pdGlhbFNjYWxlRmFjdG9yID0gMTsK
KyAgICBfaGFzQ29tbWl0dGVkTG9hZEZvck1haW5GcmFtZSA9IE5POworICAgIF9uZWVkc1Jlc2V0
Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lID0gTk87CisgICAgX2R5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5v
dFJlc2l6aW5nOworICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsKKyAgICBf
d2FpdGluZ0ZvckNvbW1pdEFmdGVyQW5pbWF0ZWRSZXNpemUgPSBOTzsKKyAgICBfYW5pbWF0ZWRS
ZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0aCA9IDA7CisgICAgW19jb250ZW50VmlldyBzZXRIaWRk
ZW46Tk9dOworICAgIF9zY3JvbGxPZmZzZXRUb1Jlc3RvcmUgPSBXVEY6Om51bGxvcHQ7CisgICAg
X3Vub2JzY3VyZWRDZW50ZXJUb1Jlc3RvcmUgPSBXVEY6Om51bGxvcHQ7CisgICAgX3Njcm9sbFZp
ZXdCYWNrZ3JvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcigpOworICAgIF9pbnZva2luZ1VJU2Ny
b2xsVmlld0RlbGVnYXRlQ2FsbGJhY2sgPSBOTzsKKyAgICBfZGlkRGVmZXJVcGRhdGVWaXNpYmxl
Q29udGVudFJlY3RzRm9yVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayA9IE5POworICAgIF9k
aWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFzb24gPSBOTzsKKyAgICBf
ZGlkRGVmZXJVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzRm9yVW5zdGFibGVTY3JvbGxWaWV3ID0g
Tk87CisgICAgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNldHNGb3JLZXlib2FyZCA9
IE5POworICAgIF9sYXN0U2VudFZpZXdMYXlvdXRTaXplID0gV1RGOjpudWxsb3B0OworICAgIF9s
YXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IFdURjo6bnVsbG9wdDsKKyAgICBfbGFzdFNl
bnREZXZpY2VPcmllbnRhdGlvbiA9IFdURjo6bnVsbG9wdDsKKworICAgIF9mcm96ZW5WaXNpYmxl
Q29udGVudFJlY3QgPSBXVEY6Om51bGxvcHQ7CisgICAgX2Zyb3plblVub2JzY3VyZWRDb250ZW50
UmVjdCA9IFdURjo6bnVsbG9wdDsKKworICAgIF9maXJzdFBhaW50QWZ0ZXJDb21taXRMb2FkVHJh
bnNhY3Rpb25JRCA9IHsgfTsKKyAgICBfZmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQYWdlUmVzdG9y
ZSA9IFdURjo6bnVsbG9wdDsKKworICAgIF9sYXN0VHJhbnNhY3Rpb25JRCA9IHsgfTsKKworICAg
IF9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVwZGF0ZSA9IE5POworICAgIF9jb21taXREaWRSZXN0
b3JlU2Nyb2xsUG9zaXRpb24gPSBOTzsKKworICAgIF9hdm9pZHNVbnNhZmVBcmVhID0gWUVTOwor
fQorCistICh2b2lkKV9wcm9jZXNzV2lsbFN3YXAKK3sKKyAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKCIlcCAtW1dLV2ViVmlldyBfcHJvY2Vzc1dpbGxTd2FwXSIsIHNlbGYpOworICAgIFtzZWxm
IF9wcm9jZXNzV2lsbFN3YXBPckRpZEV4aXRdOworfQorCistICh2b2lkKV9wcm9jZXNzRGlkRXhp
dAoreworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJWaWV3IF9wcm9jZXNz
RGlkRXhpdF0iLCBzZWxmKTsKKworICAgIFtzZWxmIF9wcm9jZXNzV2lsbFN3YXBPckRpZEV4aXRd
OworCisgICAgW19jb250ZW50VmlldyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CisgICAgW19zY3Jv
bGxWaWV3IHNldEJhY2tncm91bmRDb2xvcjpbX2NvbnRlbnRWaWV3IGJhY2tncm91bmRDb2xvcl1d
OworICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OltzZWxmIF9pbml0aWFsQ29udGVu
dE9mZnNldEZvclNjcm9sbFZpZXddXTsKKyAgICBbX3Njcm9sbFZpZXcgc2V0Wm9vbVNjYWxlOjFd
OworfQorCistICh2b2lkKV9kaWRSZWxhdW5jaFByb2Nlc3MKK3sKKyAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKCIlcCAtW1dLV2ViVmlldyBfZGlkUmVsYXVuY2hQcm9jZXNzXSIsIHNlbGYpOwor
ICAgIF9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVwZGF0ZSA9IE5POworICAgIF92aXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVTY2hlZHVsZWRGcm9tU2Nyb2xsVmlld0luU3RhYmxlU3RhdGUgPSBZRVM7
CisgICAgaWYgKF9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVy
LT5jb25uZWN0VG9Qcm9jZXNzKCk7Cit9CisKKy0gKHZvaWQpX2RpZENvbW1pdExvYWRGb3JNYWlu
RnJhbWUKK3sKKyAgICBfZmlyc3RQYWludEFmdGVyQ29tbWl0TG9hZFRyYW5zYWN0aW9uSUQgPSBk
b3duY2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+
ZHJhd2luZ0FyZWEoKSkubmV4dExheWVyVHJlZVRyYW5zYWN0aW9uSUQoKTsKKworICAgIF9oYXND
b21taXR0ZWRMb2FkRm9yTWFpbkZyYW1lID0gWUVTOworICAgIF9uZWVkc1Jlc2V0Vmlld1N0YXRl
QWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lID0gWUVTOworCisgICAgW19zY3JvbGxWaWV3IF9z
dG9wU2Nyb2xsaW5nQW5kWm9vbWluZ0FuaW1hdGlvbnNdOworfQorCitzdGF0aWMgQ0dQb2ludCBj
b250ZW50T2Zmc2V0Qm91bmRlZEluVmFsaWRSYW5nZShVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcs
IENHUG9pbnQgY29udGVudE9mZnNldCkKK3sKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMTAwMDAKKyAgICBVSUVkZ2VJbnNldHMgY29udGVudEluc2V0cyA9IHNjcm9s
bFZpZXcuYWRqdXN0ZWRDb250ZW50SW5zZXQ7CisjZWxzZQorICAgIFVJRWRnZUluc2V0cyBjb250
ZW50SW5zZXRzID0gc2Nyb2xsVmlldy5jb250ZW50SW5zZXQ7CisjZW5kaWYKKworICAgIENHU2l6
ZSBjb250ZW50U2l6ZSA9IHNjcm9sbFZpZXcuY29udGVudFNpemU7CisgICAgQ0dTaXplIHNjcm9s
bFZpZXdTaXplID0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZTsKKworICAgIENHUG9pbnQgbWluaW11
bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgtY29udGVudEluc2V0cy5sZWZ0LCAtY29udGVu
dEluc2V0cy50b3ApOworICAgIENHUG9pbnQgbWF4aW11bUNvbnRlbnRPZmZzZXQgPSBDR1BvaW50
TWFrZShzdGQ6Om1heChtaW5pbXVtQ29udGVudE9mZnNldC54LCBjb250ZW50U2l6ZS53aWR0aCAr
IGNvbnRlbnRJbnNldHMucmlnaHQgLSBzY3JvbGxWaWV3U2l6ZS53aWR0aCksIHN0ZDo6bWF4KG1p
bmltdW1Db250ZW50T2Zmc2V0LnksIGNvbnRlbnRTaXplLmhlaWdodCArIGNvbnRlbnRJbnNldHMu
Ym90dG9tIC0gc2Nyb2xsVmlld1NpemUuaGVpZ2h0KSk7CisKKyAgICByZXR1cm4gQ0dQb2ludE1h
a2Uoc3RkOjptYXgoc3RkOjptaW4oY29udGVudE9mZnNldC54LCBtYXhpbXVtQ29udGVudE9mZnNl
dC54KSwgbWluaW11bUNvbnRlbnRPZmZzZXQueCksIHN0ZDo6bWF4KHN0ZDo6bWluKGNvbnRlbnRP
ZmZzZXQueSwgbWF4aW11bUNvbnRlbnRPZmZzZXQueSksIG1pbmltdW1Db250ZW50T2Zmc2V0Lnkp
KTsKK30KKworc3RhdGljIHZvaWQgY2hhbmdlQ29udGVudE9mZnNldEJvdW5kZWRJblZhbGlkUmFu
Z2UoVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3LCBXZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRP
ZmZzZXQpCit7CisgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gY29udGVudE9mZnNldEJv
dW5kZWRJblZhbGlkUmFuZ2Uoc2Nyb2xsVmlldywgY29udGVudE9mZnNldCk7Cit9CisKKy0gKFdl
YkNvcmU6OkZsb2F0UmVjdCl2aXNpYmxlUmVjdEluVmlld0Nvb3JkaW5hdGVzCit7CisgICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IGJvdW5kcyA9IHNlbGYuYm91bmRzOworICAgIGJvdW5kcy5tb3ZlQnko
W19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdKTsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29u
dGVudFZpZXdCb3VuZHMgPSBbX2NvbnRlbnRWaWV3IGJvdW5kc107CisgICAgYm91bmRzLmludGVy
c2VjdChjb250ZW50Vmlld0JvdW5kcyk7CisgICAgcmV0dXJuIGJvdW5kczsKK30KKworLy8gV2Vi
Q29yZSBzdG9yZXMgdGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIGFzIGZsb2F0IGluc3RlYWQgb2YgZG91
YmxlLiBXaGVuIHdlIGdldCBhIHNjYWxlIGZyb20gV2ViQ29yZSwKKy8vIHdlIG5lZWQgdG8gaWdu
b3JlIGRpZmZlcmVuY2VzIHRoYXQgYXJlIHdpdGhpbiBhIHNtYWxsIHJvdW5kaW5nIGVycm9yIG9u
IGZsb2F0cy4KK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsQXNGbG9hdChm
bG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwo
YSwgYik7Cit9CisKKy0gKHZvaWQpX2RpZENvbW1pdExheWVyVHJlZUR1cmluZ0FuaW1hdGVkUmVz
aXplOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVU
cmFuc2FjdGlvbgoreworICAgIGF1dG8gdXBkYXRlSUQgPSBsYXllclRyZWVUcmFuc2FjdGlvbi5k
eW5hbWljVmlld3BvcnRTaXplVXBkYXRlSUQoKTsKKyAgICBpZiAodXBkYXRlSUQgJiYgKnVwZGF0
ZUlEID09IF9jdXJyZW50RHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEKSB7CisgICAgICAgIGRv
dWJsZSBwYWdlU2NhbGUgPSBsYXllclRyZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0b3IoKTsK
KyAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBsYXllclRyZWVUcmFu
c2FjdGlvbi5zY3JvbGxQb3NpdGlvbigpOworCisgICAgICAgIENHRmxvYXQgYW5pbWF0aW5nU2Nh
bGVUYXJnZXQgPSBbW19yZXNpemVBbmltYXRpb25WaWV3IGxheWVyXSB0cmFuc2Zvcm1dLm0xMTsK
KyAgICAgICAgZG91YmxlIGN1cnJlbnRUYXJnZXRTY2FsZSA9IGFuaW1hdGluZ1NjYWxlVGFyZ2V0
ICogW1tfY29udGVudFZpZXcgbGF5ZXJdIHRyYW5zZm9ybV0ubTExOworICAgICAgICBkb3VibGUg
c2NhbGUgPSBwYWdlU2NhbGUgLyBjdXJyZW50VGFyZ2V0U2NhbGU7CisgICAgICAgIF9yZXNpemVB
bmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cyA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoc2Nh
bGUsIHNjYWxlLCAxKTsKKworICAgICAgICBDR1BvaW50IG5ld0NvbnRlbnRPZmZzZXQgPSBbc2Vs
ZiBfY29udGVudE9mZnNldEFkanVzdGVkRm9yT2JzY3VyZWRJbnNldDpDR1BvaW50TWFrZShzY3Jv
bGxQb3NpdGlvbi54KCkgKiBwYWdlU2NhbGUsIHNjcm9sbFBvc2l0aW9uLnkoKSAqIHBhZ2VTY2Fs
ZSldOworICAgICAgICBDR1BvaW50IGN1cnJlbnRDb250ZW50T2Zmc2V0ID0gW19zY3JvbGxWaWV3
IGNvbnRlbnRPZmZzZXRdOworCisgICAgICAgIF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1
c3RtZW50cy5tNDEgPSAoY3VycmVudENvbnRlbnRPZmZzZXQueCAtIG5ld0NvbnRlbnRPZmZzZXQu
eCkgLyBhbmltYXRpbmdTY2FsZVRhcmdldDsKKyAgICAgICAgX3Jlc2l6ZUFuaW1hdGlvblRyYW5z
Zm9ybUFkanVzdG1lbnRzLm00MiA9IChjdXJyZW50Q29udGVudE9mZnNldC55IC0gbmV3Q29udGVu
dE9mZnNldC55KSAvIGFuaW1hdGluZ1NjYWxlVGFyZ2V0OworCisgICAgICAgIFtfcmVzaXplQW5p
bWF0aW9uVmlldyBsYXllcl0uc3VibGF5ZXJUcmFuc2Zvcm0gPSBfcmVzaXplQW5pbWF0aW9uVHJh
bnNmb3JtQWRqdXN0bWVudHM7CisKKyAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBwYXNzZWQg
ZW5kQW5pbWF0ZWRSZXNpemUsIGltbWVkaWF0ZWx5IGNvbXBsZXRlCisgICAgICAgIC8vIHRoZSBy
ZXNpemUgd2hlbiB3ZSBoYXZlIGFuIHVwLXRvLWRhdGUgbGF5ZXIgdHJlZS4gT3RoZXJ3aXNlLAor
ICAgICAgICAvLyB3ZSB3aWxsIGRlZmVyIGNvbXBsZXRpb24gdW50aWwgZW5kQW5pbWF0ZWRSZXNp
emUuCisgICAgICAgIF93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZSA9IE5POwor
ICAgICAgICBpZiAoIV93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUpCisgICAgICAgICAgICBb
c2VsZiBfZGlkQ29tcGxldGVBbmltYXRlZFJlc2l6ZV07CisKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIElmIGEgY29tbWl0IGFycml2ZXMgZHVyaW5nIHRoZSBsaXZlIHBhcnQgb2Yg
YSByZXNpemUgYnV0IGJlZm9yZSB0aGUKKyAgICAvLyBsYXllciB0cmVlIHRha2VzIHRoZSBjdXJy
ZW50IHJlc2l6ZSBpbnRvIGFjY291bnQsIGl0IGNvdWxkIGNoYW5nZSB0aGUKKyAgICAvLyBXS0Nv
bnRlbnRWaWV3J3Mgc2l6ZS4gVXBkYXRlIHRoZSByZXNpemVBbmltYXRpb25WaWV3J3Mgc2NhbGUg
dG8gZW5zdXJlCisgICAgLy8gd2UgY29udGludWUgdG8gZmlsbCB0aGUgd2lkdGggb2YgdGhlIHJl
c2l6ZSB0YXJnZXQuCisKKyAgICBpZiAoX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBuZXdWaWV3TGF5b3V0U2l6ZSA9IFtzZWxmIGFjdGl2
ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXTsKKyAgICBDR0Zsb2F0IHJlc2l6ZUFuaW1hdGlv
blZpZXdTY2FsZSA9IF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoIC8gbmV3Vmll
d0xheW91dFNpemUud2lkdGgoKTsKKyAgICBbW19yZXNpemVBbmltYXRpb25WaWV3IGxheWVyXSBz
ZXRTdWJsYXllclRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKHJlc2l6ZUFuaW1hdGlv
blZpZXdTY2FsZSwgcmVzaXplQW5pbWF0aW9uVmlld1NjYWxlLCAxKV07Cit9CisKKy0gKHZvaWQp
X2RpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb24KK3sKKyAgICBpZiAoX2RpZERlZmVyVXBkYXRlVmlz
aWJsZUNvbnRlbnRSZWN0c0ZvclVuc3RhYmxlU2Nyb2xsVmlldykgeworICAgICAgICBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX2RpZENv
bW1pdExheWVyVHJlZTpdIC0gcmVjZWl2ZWQgYSBjb21taXQgKCVsbHUpIHdoaWxlIGRlZmVycmlu
ZyB2aXNpYmxlIGNvbnRlbnQgcmVjdCB1cGRhdGVzIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9k
ZSAlZCwgX25lZWRzUmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUgJWQg
KHdhbnRzIGNvbW1pdCAlbGx1KSwgc2l6ZUNoYW5nZWRTaW5jZUxhc3RWaXNpYmxlQ29udGVudFJl
Y3RVcGRhdGUgJWQsIFtfc2Nyb2xsVmlldyBpc1pvb21Cb3VuY2luZ10gJWQsIF9jdXJyZW50bHlB
ZGp1c3RpbmdTY3JvbGxWaWV3SW5zZXRzRm9yS2V5Ym9hcmQgJWQpIiwKKyAgICAgICAgc2VsZiwg
X3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgpLCBsYXllclRyZWVUcmFuc2FjdGlvbi50cmFu
c2FjdGlvbklEKCkudG9VSW50NjQoKSwgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUsIF9uZWVk
c1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lLCBfZmlyc3RQYWludEFm
dGVyQ29tbWl0TG9hZFRyYW5zYWN0aW9uSUQudG9VSW50NjQoKSwgW19jb250ZW50VmlldyBzaXpl
Q2hhbmdlZFNpbmNlTGFzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZV0sIFtfc2Nyb2xsVmlldyBp
c1pvb21Cb3VuY2luZ10sIF9jdXJyZW50bHlBZGp1c3RpbmdTY3JvbGxWaWV3SW5zZXRzRm9yS2V5
Ym9hcmQpOworICAgIH0KKworICAgIGlmIChfdGltZU9mRmlyc3RWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGVXaXRoUGVuZGluZ0NvbW1pdCkgeworICAgICAgICBhdXRvIHRpbWVTaW5jZUZpcnN0UmVx
dWVzdFdpdGhQZW5kaW5nQ29tbWl0ID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSAqX3RpbWVPZkZp
cnN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQ7CisgICAgICAgIGlm
ICh0aW1lU2luY2VGaXJzdFJlcXVlc3RXaXRoUGVuZGluZ0NvbW1pdCA+IGRlbGF5QmVmb3JlTm9D
b21taXRzTG9nZ2luZykKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChw
YWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfZGlkQ29tbWl0TGF5ZXJUcmVlOl0gLSBmaW5h
bGx5IHJlY2VpdmVkIGNvbW1pdCAlLjJmcyBhZnRlciB2aXNpYmxlIGNvbnRlbnQgcmVjdCB1cGRh
dGUgcmVxdWVzdDsgdHJhbnNhY3Rpb25JRCAlbGx1Iiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIo
KS50b1VJbnQ2NCgpLCB0aW1lU2luY2VGaXJzdFJlcXVlc3RXaXRoUGVuZGluZ0NvbW1pdC52YWx1
ZSgpLCBsYXllclRyZWVUcmFuc2FjdGlvbi50cmFuc2FjdGlvbklEKCkudG9VSW50NjQoKSk7Cisg
ICAgICAgIF90aW1lT2ZGaXJzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZVdpdGhQZW5kaW5nQ29t
bWl0ID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIF9sYXN0VHJhbnNhY3Rpb25JRCA9IGxh
eWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKTsKKworICAgIGlmICghW3NlbGYgdXNl
c1N0YW5kYXJkQ29udGVudFZpZXddKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lUSF9T
VFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1bV0tXZWJWaWV3ICIgPDwgX3BhZ2UtPmlk
ZW50aWZpZXIoKSA8PCAiIF9kaWRDb21taXRMYXllclRyZWU6XSB0cmFuc2FjdGlvbklEICIgPDwg
bGF5ZXJUcmVlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpIDw8ICIgX2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUgIiA8PCAoaW50KV9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlKTsKKworICAg
IGJvb2wgbmVlZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMgPSBfcGFnZS0+dXBkYXRlTGF5b3V0
Vmlld3BvcnRQYXJhbWV0ZXJzKGxheWVyVHJlZVRyYW5zYWN0aW9uKTsKKworICAgIGlmIChfZHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1v
ZGU6Ok5vdFJlc2l6aW5nKSB7CisgICAgICAgIFtzZWxmIF9kaWRDb21taXRMYXllclRyZWVEdXJp
bmdBbmltYXRlZFJlc2l6ZTpsYXllclRyZWVUcmFuc2FjdGlvbl07CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoX3Jlc2l6ZUFuaW1hdGlvblZpZXcpCisgICAgICAgIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoIiVwIC1bV0tXZWJWaWV3IF9kaWRDb21taXRMYXllclRyZWU6XSAtIGR5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgaXMgTm90UmVzaXppbmcsIGJ1dCBzdGlsbCBoYXZlIGEg
bGl2ZSByZXNpemVBbmltYXRpb25WaWV3ICh1bnBhaXJlZCBiZWdpbi9lbmRBbmltYXRlZFJlc2l6
ZT8pIiwgc2VsZik7CisKKyAgICBDR1NpemUgbmV3Q29udGVudFNpemUgPSByb3VuZFNjcm9sbFZp
ZXdDb250ZW50U2l6ZSgqX3BhZ2UsIFtfY29udGVudFZpZXcgZnJhbWVdLnNpemUpOworICAgIFtf
c2Nyb2xsVmlldyBfc2V0Q29udGVudFNpemVQcmVzZXJ2aW5nQ29udGVudE9mZnNldER1cmluZ1J1
YmJlcmJhbmQ6bmV3Q29udGVudFNpemVdOworCisgICAgW19zY3JvbGxWaWV3IHNldE1pbmltdW1a
b29tU2NhbGU6bGF5ZXJUcmVlVHJhbnNhY3Rpb24ubWluaW11bVNjYWxlRmFjdG9yKCldOworICAg
IFtfc2Nyb2xsVmlldyBzZXRNYXhpbXVtWm9vbVNjYWxlOmxheWVyVHJlZVRyYW5zYWN0aW9uLm1h
eGltdW1TY2FsZUZhY3RvcigpXTsKKyAgICBbX3Njcm9sbFZpZXcgX3NldFpvb21FbmFibGVkSW50
ZXJuYWw6bGF5ZXJUcmVlVHJhbnNhY3Rpb24uYWxsb3dzVXNlclNjYWxpbmcoKV07CisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBib29sIGhhc0RvY2tlZElucHV0VmlldyA9ICFDR1Jl
Y3RJc0VtcHR5KF9pbnB1dFZpZXdCb3VuZHMpOworICAgIGJvb2wgaXNab29tZWQgPSBsYXllclRy
ZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0b3IoKSA+IGxheWVyVHJlZVRyYW5zYWN0aW9uLmlu
aXRpYWxTY2FsZUZhY3RvcigpOworCisgICAgYm9vbCBzY3JvbGxpbmdOZWVkZWRUb1JldmVhbFVJ
ID0gZmFsc2U7CisgICAgaWYgKF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSkgeworICAg
ICAgICBhdXRvIHVub2JzY3VyZWRDb250ZW50UmVjdCA9IF9wYWdlLT51bm9ic2N1cmVkQ29udGVu
dFJlY3QoKTsKKyAgICAgICAgYXV0byBtYXhVbm9ic2N1cmVkU2l6ZSA9IF9wYWdlLT5tYXhpbXVt
VW5vYnNjdXJlZFNpemUoKTsKKyAgICAgICAgc2Nyb2xsaW5nTmVlZGVkVG9SZXZlYWxVSSA9IG1h
eFVub2JzY3VyZWRTaXplLndpZHRoKCkgPT0gdW5vYnNjdXJlZENvbnRlbnRSZWN0LndpZHRoKCkg
JiYgbWF4VW5vYnNjdXJlZFNpemUuaGVpZ2h0KCkgPT0gdW5vYnNjdXJlZENvbnRlbnRSZWN0Lmhl
aWdodCgpOworICAgIH0KKworICAgIGJvb2wgc2Nyb2xsaW5nRW5hYmxlZCA9IF9wYWdlLT5zY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5KCktPmhhc1Njcm9sbGFibGVNYWluRnJhbWUoKSB8fCBoYXNE
b2NrZWRJbnB1dFZpZXcgfHwgaXNab29tZWQgfHwgc2Nyb2xsaW5nTmVlZGVkVG9SZXZlYWxVSTsK
KyAgICBbX3Njcm9sbFZpZXcgX3NldFNjcm9sbEVuYWJsZWRJbnRlcm5hbDpzY3JvbGxpbmdFbmFi
bGVkXTsKKyNlbmRpZgorICAgIGlmICghbGF5ZXJUcmVlVHJhbnNhY3Rpb24uc2NhbGVXYXNTZXRC
eVVJUHJvY2VzcygpICYmICFbX3Njcm9sbFZpZXcgaXNab29taW5nXSAmJiAhW19zY3JvbGxWaWV3
IGlzWm9vbUJvdW5jaW5nXSAmJiAhW19zY3JvbGxWaWV3IF9pc0FuaW1hdGluZ1pvb21dICYmIFtf
c2Nyb2xsVmlldyB6b29tU2NhbGVdICE9IGxheWVyVHJlZVRyYW5zYWN0aW9uLnBhZ2VTY2FsZUZh
Y3RvcigpKSB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8
PCAiIHVwZGF0aW5nIHNjcm9sbCB2aWV3IHdpdGggcGFnZVNjYWxlRmFjdG9yICIgPDwgbGF5ZXJU
cmVlVHJhbnNhY3Rpb24ucGFnZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBbX3Njcm9sbFZpZXcg
c2V0Wm9vbVNjYWxlOmxheWVyVHJlZVRyYW5zYWN0aW9uLnBhZ2VTY2FsZUZhY3RvcigpXTsKKyAg
ICB9CisKKyAgICBfdmlld3BvcnRNZXRhVGFnV2lkdGggPSBsYXllclRyZWVUcmFuc2FjdGlvbi52
aWV3cG9ydE1ldGFUYWdXaWR0aCgpOworICAgIF92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxp
Y2l0ID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24udmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNp
dCgpOworICAgIF92aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1lbnQgPSBsYXllclRy
ZWVUcmFuc2FjdGlvbi52aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1lbnQoKTsKKyAg
ICBfaW5pdGlhbFNjYWxlRmFjdG9yID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24uaW5pdGlhbFNjYWxl
RmFjdG9yKCk7CisgICAgaWYgKF9wYWdlLT5pblN0YWJsZVN0YXRlKCkgJiYgbGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaXNJblN0YWJsZVN0YXRlKCkgJiYgW19zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVw
ZGF0ZUNhbGxiYWNrcyBjb3VudF0pIHsKKyAgICAgICAgZm9yIChkaXNwYXRjaF9ibG9ja190IGFj
dGlvbiBpbiBfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MuZ2V0KCkpCisg
ICAgICAgICAgICBhY3Rpb24oKTsKKworICAgICAgICBbX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9u
VXBkYXRlQ2FsbGJhY2tzIHJlbW92ZUFsbE9iamVjdHNdOworICAgICAgICBfc3RhYmxlU3RhdGVQ
cmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgPSBuaWw7CisgICAgfQorCisgICAgaWYgKCFbX2Nv
bnRlbnRWaWV3IF9tYXlEaXNhYmxlRG91YmxlVGFwR2VzdHVyZXNEdXJpbmdTaW5nbGVUYXBdKQor
ICAgICAgICBbX2NvbnRlbnRWaWV3IF9zZXREb3VibGVUYXBHZXN0dXJlc0VuYWJsZWQ6c2VsZi5f
YWxsb3dzRG91YmxlVGFwR2VzdHVyZXNdOworCisgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdC
YWNrZ3JvdW5kXTsKKyAgICBbc2VsZiBfc2V0QXZvaWRzVW5zYWZlQXJlYTpsYXllclRyZWVUcmFu
c2FjdGlvbi5hdm9pZHNVbnNhZmVBcmVhKCldOworCisgICAgaWYgKF9nZXN0dXJlQ29udHJvbGxl
cikKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5zZXRSZW5kZXJUcmVlU2l6ZShsYXllclRy
ZWVUcmFuc2FjdGlvbi5yZW5kZXJUcmVlU2l6ZSgpKTsKKworICAgIGlmIChfbmVlZHNSZXNldFZp
ZXdTdGF0ZUFmdGVyQ29tbWl0TG9hZEZvck1haW5GcmFtZSAmJiBsYXllclRyZWVUcmFuc2FjdGlv
bi50cmFuc2FjdGlvbklEKCkgPj0gX2ZpcnN0UGFpbnRBZnRlckNvbW1pdExvYWRUcmFuc2FjdGlv
bklEKSB7CisgICAgICAgIF9uZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFp
bkZyYW1lID0gTk87CisgICAgICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OltzZWxm
IF9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9sbFZpZXddXTsKKyAgICAgICAgaWYgKF9vYnNl
cnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZp
cnN0UGFpbnQpCisgICAgICAgICAgICBfbmF2aWdhdGlvblN0YXRlLT5kaWRGaXJzdFBhaW50KCk7
CisKKyAgICAgICAgbmVlZFVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMgPSB0cnVlOworICAgIH0K
KworICAgIGlmIChfZmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQYWdlUmVzdG9yZSAmJiBsYXllclRy
ZWVUcmFuc2FjdGlvbi50cmFuc2FjdGlvbklEKCkgPj0gX2ZpcnN0VHJhbnNhY3Rpb25JREFmdGVy
UGFnZVJlc3RvcmUudmFsdWUoKSkgeworICAgICAgICBpZiAoX3Njcm9sbE9mZnNldFRvUmVzdG9y
ZSkgeworICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBzY2FsZWRTY3JvbGxPZmZzZXQg
PSBfc2Nyb2xsT2Zmc2V0VG9SZXN0b3JlLnZhbHVlKCk7CisgICAgICAgICAgICBfc2Nyb2xsT2Zm
c2V0VG9SZXN0b3JlID0gV1RGOjpudWxsb3B0OworCisgICAgICAgICAgICBpZiAoYXJlRXNzZW50
aWFsbHlFcXVhbEFzRmxvYXQoY29udGVudFpvb21TY2FsZShzZWxmKSwgX3NjYWxlVG9SZXN0b3Jl
KSkgeworICAgICAgICAgICAgICAgIHNjYWxlZFNjcm9sbE9mZnNldC5zY2FsZShfc2NhbGVUb1Jl
c3RvcmUpOworICAgICAgICAgICAgICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY29udGVudE9mZnNl
dEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzID0gc2NhbGVkU2Nyb2xsT2Zmc2V0IC0gV2ViQ29yZTo6
RmxvYXRTaXplKF9vYnNjdXJlZEluc2V0c1doZW5TYXZlZC5sZWZ0KCksIF9vYnNjdXJlZEluc2V0
c1doZW5TYXZlZC50b3AoKSk7CisKKyAgICAgICAgICAgICAgICBjaGFuZ2VDb250ZW50T2Zmc2V0
Qm91bmRlZEluVmFsaWRSYW5nZShfc2Nyb2xsVmlldy5nZXQoKSwgY29udGVudE9mZnNldEluU2Ny
b2xsVmlld0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgICAgICAgICBfY29tbWl0RGlkUmVzdG9yZVNj
cm9sbFBvc2l0aW9uID0gWUVTOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZWVkVXBk
YXRlVmlzaWJsZUNvbnRlbnRSZWN0cyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
X3Vub2JzY3VyZWRDZW50ZXJUb1Jlc3RvcmUpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSA9IF91bm9ic2N1cmVkQ2VudGVyVG9SZXN0
b3JlLnZhbHVlKCk7CisgICAgICAgICAgICBfdW5vYnNjdXJlZENlbnRlclRvUmVzdG9yZSA9IFdU
Rjo6bnVsbG9wdDsKKworICAgICAgICAgICAgaWYgKGFyZUVzc2VudGlhbGx5RXF1YWxBc0Zsb2F0
KGNvbnRlbnRab29tU2NhbGUoc2VsZiksIF9zY2FsZVRvUmVzdG9yZSkpIHsKKyAgICAgICAgICAg
ICAgICBDR1JlY3QgdW5vYnNjdXJlZFJlY3QgPSBVSUVkZ2VJbnNldHNJbnNldFJlY3Qoc2VsZi5i
b3VuZHMsIF9vYnNjdXJlZEluc2V0cyk7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRT
aXplIHVub2JzY3VyZWRDb250ZW50U2l6ZUF0TmV3U2NhbGUgPSBXZWJDb3JlOjpGbG9hdFNpemUo
dW5vYnNjdXJlZFJlY3Quc2l6ZSkgLyBfc2NhbGVUb1Jlc3RvcmU7CisgICAgICAgICAgICAgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCB0b3BMZWZ0SW5Eb2N1bWVudENvb3JkaW5hdGVzID0gdW5vYnNj
dXJlZENlbnRlclRvUmVzdG9yZSAtIHVub2JzY3VyZWRDb250ZW50U2l6ZUF0TmV3U2NhbGUgLyAy
OworCisgICAgICAgICAgICAgICAgdG9wTGVmdEluRG9jdW1lbnRDb29yZGluYXRlcy5zY2FsZShf
c2NhbGVUb1Jlc3RvcmUpOworICAgICAgICAgICAgICAgIHRvcExlZnRJbkRvY3VtZW50Q29vcmRp
bmF0ZXMubW92ZUJ5KFdlYkNvcmU6OkZsb2F0UG9pbnQoLV9vYnNjdXJlZEluc2V0cy5sZWZ0LCAt
X29ic2N1cmVkSW5zZXRzLnRvcCkpOworCisgICAgICAgICAgICAgICAgY2hhbmdlQ29udGVudE9m
ZnNldEJvdW5kZWRJblZhbGlkUmFuZ2UoX3Njcm9sbFZpZXcuZ2V0KCksIHRvcExlZnRJbkRvY3Vt
ZW50Q29vcmRpbmF0ZXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZWVkVXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0cyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX2dl
c3R1cmVDb250cm9sbGVyKQorICAgICAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5kaWRSZXN0
b3JlU2Nyb2xsUG9zaXRpb24oKTsKKworICAgICAgICBfZmlyc3RUcmFuc2FjdGlvbklEQWZ0ZXJQ
YWdlUmVzdG9yZSA9IFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAobmVlZFVwZGF0ZVZp
c2libGVDb250ZW50UmVjdHMpCisgICAgICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50
UmVjdFVwZGF0ZV07CisKKyAgICBpZiAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQ
ZXJmb3JtYW5jZURhdGEqIHNjcm9sbFBlcmZEYXRhID0gX3BhZ2UtPnNjcm9sbGluZ1BlcmZvcm1h
bmNlRGF0YSgpKQorICAgICAgICBzY3JvbGxQZXJmRGF0YS0+ZGlkQ29tbWl0TGF5ZXJUcmVlKFtz
ZWxmIHZpc2libGVSZWN0SW5WaWV3Q29vcmRpbmF0ZXNdKTsKK30KKworLSAodm9pZClfbGF5ZXJU
cmVlQ29tbWl0Q29tcGxldGUKK3sKKyAgICBfY29tbWl0RGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9u
ID0gTk87Cit9CisKKy0gKHZvaWQpX2NvdWxkTm90UmVzdG9yZVBhZ2VTdGF0ZQoreworICAgIC8v
IFRoZSBnZXN0dXJlQ29udHJvbGxlciBtYXkgYmUgd2FpdGluZyBmb3IgdGhlIHNjcm9sbCBwb3Np
dGlvbiB0byBiZSByZXN0b3JlZAorICAgIC8vIGluIG9yZGVyIHRvIHJlbW92ZSB0aGUgc3dpcGUg
c25hcHNob3QuIFNpbmNlIHRoZSBzY3JvbGwgcG9zaXRpb24gY291bGQgbm90IGJlCisgICAgLy8g
cmVzdG9yZWQsIHRlbGwgdGhlIGdlc3R1cmVDb250cm9sbGVyIGl0IHdhcyByZXN0b3JlZCBzbyB0
aGF0IGl0IG5vIGxvbmdlciB3YWl0cworICAgIC8vIGZvciBpdC4KKyAgICBpZiAoX2dlc3R1cmVD
b250cm9sbGVyKQorICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmRpZFJlc3RvcmVTY3JvbGxQ
b3NpdGlvbigpOworfQorCistICh2b2lkKV9yZXN0b3JlUGFnZVNjcm9sbFBvc2l0aW9uOihPcHRp
b25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PilzY3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdl
YkNvcmU6OkZsb2F0UG9pbnQpc2Nyb2xsT3JpZ2luIHByZXZpb3VzT2JzY3VyZWRJbnNldDooV2Vi
Q29yZTo6RmxvYXRCb3hFeHRlbnQpb2JzY3VyZWRJbnNldHMgc2NhbGU6KGRvdWJsZSlzY2FsZQor
eworICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAhPSBXZWJLaXQ6OkR5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKSB7CisgICAgICAgIC8vIERlZmVyIHNjcm9s
bCBwb3NpdGlvbiByZXN0b3JhdGlvbiB1bnRpbCBhZnRlciB0aGUgY3VycmVudCByZXNpemUgY29t
cGxldGVzLgorICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiByZXRhaW5lZFNlbGYgPSBzZWxm
OworICAgICAgICBfY2FsbGJhY2tzRGVmZXJyZWREdXJpbmdSZXNpemUuYXBwZW5kKFtyZXRhaW5l
ZFNlbGYsIHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxPcmlnaW4sIG9ic2N1cmVkSW5zZXRzLCBzY2Fs
ZV0geworICAgICAgICAgICAgW3JldGFpbmVkU2VsZiBfcmVzdG9yZVBhZ2VTY3JvbGxQb3NpdGlv
bjpzY3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46c2Nyb2xsT3JpZ2luIHByZXZpb3VzT2JzY3Vy
ZWRJbnNldDpvYnNjdXJlZEluc2V0cyBzY2FsZTpzY2FsZV07CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmll
d10pCisgICAgICAgIHJldHVybjsKKworICAgIF9maXJzdFRyYW5zYWN0aW9uSURBZnRlclBhZ2VS
ZXN0b3JlID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
PigqX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLm5leHRMYXllclRyZWVUcmFuc2FjdGlvbklEKCk7Cisg
ICAgaWYgKHNjcm9sbFBvc2l0aW9uKQorICAgICAgICBfc2Nyb2xsT2Zmc2V0VG9SZXN0b3JlID0g
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihXZWJDb3Jl
OjpGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uLnZhbHVlKCkpLCBXZWJDb3JlOjp0b0Zsb2F0U2l6
ZShzY3JvbGxPcmlnaW4pKTsKKyAgICBlbHNlCisgICAgICAgIF9zY3JvbGxPZmZzZXRUb1Jlc3Rv
cmUgPSBXVEY6Om51bGxvcHQ7CisKKyAgICBfb2JzY3VyZWRJbnNldHNXaGVuU2F2ZWQgPSBvYnNj
dXJlZEluc2V0czsKKyAgICBfc2NhbGVUb1Jlc3RvcmUgPSBzY2FsZTsKK30KKworLSAodm9pZClf
cmVzdG9yZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjooT3B0aW9uYWw8V2ViQ29yZTo6Rmxv
YXRQb2ludD4pY2VudGVyIHNjYWxlOihkb3VibGUpc2NhbGUKK3sKKyAgICBpZiAoX2R5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpO
b3RSZXNpemluZykgeworICAgICAgICAvLyBEZWZlciBzY3JvbGwgcG9zaXRpb24gcmVzdG9yYXRp
b24gdW50aWwgYWZ0ZXIgdGhlIGN1cnJlbnQgcmVzaXplIGNvbXBsZXRlcy4KKyAgICAgICAgUmV0
YWluUHRyPFdLV2ViVmlldz4gcmV0YWluZWRTZWxmID0gc2VsZjsKKyAgICAgICAgX2NhbGxiYWNr
c0RlZmVycmVkRHVyaW5nUmVzaXplLmFwcGVuZChbcmV0YWluZWRTZWxmLCBjZW50ZXIsIHNjYWxl
XSB7CisgICAgICAgICAgICBbcmV0YWluZWRTZWxmIF9yZXN0b3JlUGFnZVN0YXRlVG9Vbm9ic2N1
cmVkQ2VudGVyOmNlbnRlciBzY2FsZTpzY2FsZV07CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCisg
ICAgICAgIHJldHVybjsKKworICAgIF9maXJzdFRyYW5zYWN0aW9uSURBZnRlclBhZ2VSZXN0b3Jl
ID0gZG93bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqX3Bh
Z2UtPmRyYXdpbmdBcmVhKCkpLm5leHRMYXllclRyZWVUcmFuc2FjdGlvbklEKCk7CisgICAgX3Vu
b2JzY3VyZWRDZW50ZXJUb1Jlc3RvcmUgPSBjZW50ZXI7CisKKyAgICBfc2NhbGVUb1Jlc3RvcmUg
PSBzY2FsZTsKK30KKworLSAoUmVmUHRyPFdlYktpdDo6Vmlld1NuYXBzaG90PilfdGFrZVZpZXdT
bmFwc2hvdAoreworI2lmIEhBVkUoQ09SRV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikKKyAgICBm
bG9hdCBkZXZpY2VTY2FsZSA9IFdlYkNvcmU6OnNjcmVlblNjYWxlRmFjdG9yKCk7CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIHNuYXBzaG90U2l6ZShzZWxmLmJvdW5kcy5zaXplKTsKKyAgICBzbmFw
c2hvdFNpemUuc2NhbGUoZGV2aWNlU2NhbGUpOworCisgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zv
cm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGRldmljZVNjYWxlLCBkZXZpY2VTY2FsZSwgMSk7
CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNpZiBIQVZFKElPU1VSRkFDRV9SR0IxMCkKKyAgICBX
ZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdCBzbmFwc2hvdEZvcm1hdCA9IFdlYkNvcmU6OnNjcmVl
blN1cHBvcnRzRXh0ZW5kZWRDb2xvcigpID8gV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OlJH
QjEwIDogV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OlJHQkE7CisjZWxzZQorICAgIFdlYkNv
cmU6OklPU3VyZmFjZTo6Rm9ybWF0IHNuYXBzaG90Rm9ybWF0ID0gV2ViQ29yZTo6SU9TdXJmYWNl
OjpGb3JtYXQ6OlJHQkE7CisjZW5kaWYKKyAgICBhdXRvIHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1
cmZhY2U6OmNyZWF0ZShXZWJDb3JlOjpleHBhbmRlZEludFNpemUoc25hcHNob3RTaXplKSwgV2Vi
Q29yZTo6c1JHQkNvbG9yU3BhY2VSZWYoKSwgc25hcHNob3RGb3JtYXQpOworICAgIGlmICghc3Vy
ZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgQ0FSZW5kZXJTZXJ2ZXJSZW5kZXJM
YXllcldpdGhUcmFuc2Zvcm0oTUFDSF9QT1JUX05VTEwsIHNlbGYubGF5ZXIuY29udGV4dC5jb250
ZXh0SWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNlbGYubGF5ZXIpLCBzdXJmYWNlLT5z
dXJmYWNlKCksIDAsIDAsICZ0cmFuc2Zvcm0pOworCisjaWYgSEFWRShJT1NVUkZBQ0VfQUNDRUxF
UkFUT1IpCisgICAgV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQgY29tcHJlc3NlZEZvcm1hdCA9
IFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0OjpZVVY0MjI7CisgICAgaWYgKFdlYkNvcmU6OklP
U3VyZmFjZTo6YWxsb3dDb252ZXJzaW9uRnJvbUZvcm1hdFRvRm9ybWF0KHNuYXBzaG90Rm9ybWF0
LCBjb21wcmVzc2VkRm9ybWF0KSkgeworICAgICAgICBhdXRvIHZpZXdTbmFwc2hvdCA9IFdlYktp
dDo6Vmlld1NuYXBzaG90OjpjcmVhdGUobnVsbHB0cik7CisgICAgICAgIFdlYkNvcmU6OklPU3Vy
ZmFjZTo6Y29udmVydFRvRm9ybWF0KFdURk1vdmUoc3VyZmFjZSksIFdlYkNvcmU6OklPU3VyZmFj
ZTo6Rm9ybWF0OjpZVVY0MjIsIFt2aWV3U25hcHNob3QgPSB2aWV3U25hcHNob3QuY29weVJlZigp
XShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBjb252ZXJ0ZWRTdXJmYWNlKSB7
CisgICAgICAgICAgICBpZiAoY29udmVydGVkU3VyZmFjZSkKKyAgICAgICAgICAgICAgICB2aWV3
U25hcHNob3QtPnNldFN1cmZhY2UoV1RGTW92ZShjb252ZXJ0ZWRTdXJmYWNlKSk7CisgICAgICAg
IH0pOworCisgICAgICAgIHJldHVybiB2aWV3U25hcHNob3Q7CisgICAgfQorI2VuZGlmIC8vIEhB
VkUoSU9TVVJGQUNFX0FDQ0VMRVJBVE9SKQorCisgICAgcmV0dXJuIFdlYktpdDo6Vmlld1NuYXBz
aG90OjpjcmVhdGUoV1RGTW92ZShzdXJmYWNlKSk7CisjZWxzZSAvLyBIQVZFKElPU1VSRkFDRSkK
KyAgICB1aW50MzJfdCBzbG90SUQgPSBbV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6c25hcHNo
b3R0aW5nQ29udGV4dCgpIGNyZWF0ZUltYWdlU2xvdDpzbmFwc2hvdFNpemUgaGFzQWxwaGE6WUVT
XTsKKworICAgIGlmICghc2xvdElEKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENB
UmVuZGVyU2VydmVyQ2FwdHVyZUxheWVyV2l0aFRyYW5zZm9ybShNQUNIX1BPUlRfTlVMTCwgc2Vs
Zi5sYXllci5jb250ZXh0LmNvbnRleHRJZCwgKHVpbnQ2NF90KXNlbGYubGF5ZXIsIHNsb3RJRCwg
MCwgMCwgJnRyYW5zZm9ybSk7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBpbWFnZVNpemUgPSBXZWJD
b3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKHNuYXBzaG90U2l6ZSkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6Y3JlYXRlKHNsb3RJRCwgaW1hZ2VTaXpl
LCAoaW1hZ2VTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyNlbmRpZiAvLyBIQVZFKElP
U1VSRkFDRSkKKyNlbHNlIC8vIEhBVkUoQ09SRV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikKKyAg
ICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCistICh2b2lkKV96b29tVG9Qb2ludDooV2Vi
Q29yZTo6RmxvYXRQb2ludClwb2ludCBhdFNjYWxlOihkb3VibGUpc2NhbGUgYW5pbWF0ZWQ6KEJP
T0wpYW5pbWF0ZWQKK3sKKyAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiA9IDA7CisgICAgQ0dG
bG9hdCB6b29tU2NhbGUgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOworCisgICAgaWYgKGFuaW1h
dGVkKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSBtYXhpbXVtWm9vbUR1cmF0aW9uID0gMC40Owor
ICAgICAgICBjb25zdCBkb3VibGUgbWluaW11bVpvb21EdXJhdGlvbiA9IDAuMTsKKyAgICAgICAg
Y29uc3QgZG91YmxlIHpvb21EdXJhdGlvbkZhY3RvciA9IDAuMzsKKworICAgICAgICBkdXJhdGlv
biA9IHN0ZDo6bWluKGZhYnMobG9nKHpvb21TY2FsZSkgLSBsb2coc2NhbGUpKSAqIHpvb21EdXJh
dGlvbkZhY3RvciArIG1pbmltdW1ab29tRHVyYXRpb24sIG1heGltdW1ab29tRHVyYXRpb24pOwor
ICAgIH0KKworICAgIGlmIChzY2FsZSAhPSB6b29tU2NhbGUpCisgICAgICAgIF9wYWdlLT53aWxs
U3RhcnRVc2VyVHJpZ2dlcmVkWm9vbWluZygpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFZpc2li
bGVSZWN0cywgc3RyZWFtIDw8ICJfem9vbVRvUG9pbnQ6IiA8PCBwb2ludCA8PCAiIHNjYWxlOiAi
IDw8IHNjYWxlIDw8ICIgZHVyYXRpb246IiA8PCBkdXJhdGlvbik7CisKKyAgICBbX3Njcm9sbFZp
ZXcgX3pvb21Ub0NlbnRlcjpwb2ludCBzY2FsZTpzY2FsZSBkdXJhdGlvbjpkdXJhdGlvbl07Cit9
CisKKy0gKHZvaWQpX3pvb21Ub1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IGF0
U2NhbGU6KGRvdWJsZSlzY2FsZSBvcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGFu
aW1hdGVkOihCT09MKWFuaW1hdGVkCit7CisgICAgLy8gRklYTUU6IFNvbWUgb2YgdGhpcyBjb3Vs
ZCBiZSBzaGFyZWQgd2l0aCBfc2Nyb2xsVG9SZWN0LgorICAgIGNvbnN0IGRvdWJsZSB2aXNpYmxl
UmVjdFNjYWxlQ2hhbmdlID0gY29udGVudFpvb21TY2FsZShzZWxmKSAvIHNjYWxlOworICAgIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlUmVjdChbc2VsZiBjb252ZXJ0UmVjdDpzZWxm
LmJvdW5kcyB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XSk7CisgICAgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0IHVub2JzY3VyZWRSZWN0KFtzZWxmIF9jb250ZW50UmVjdEZvclVzZXJJ
bnRlcmFjdGlvbl0pOworCisgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplIHRvcExlZnRPYnNj
dXJlZEluc2V0QWZ0ZXJab29tKCh1bm9ic2N1cmVkUmVjdC5taW5YTWluWUNvcm5lcigpIC0gdmlz
aWJsZVJlY3QubWluWE1pbllDb3JuZXIoKSkgKiB2aXNpYmxlUmVjdFNjYWxlQ2hhbmdlKTsKKyAg
ICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUgYm90dG9tUmlnaHRPYnNjdXJlZEluc2V0QWZ0ZXJa
b29tKCh2aXNpYmxlUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gdW5vYnNjdXJlZFJlY3QubWF4WE1h
eFlDb3JuZXIoKSkgKiB2aXNpYmxlUmVjdFNjYWxlQ2hhbmdlKTsKKworICAgIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSB1bm9ic2N1cmVkUmVjdFNpemVBZnRlclpvb20odW5vYnNjdXJlZFJlY3Qu
c2l6ZSgpICogdmlzaWJsZVJlY3RTY2FsZUNoYW5nZSk7CisKKyAgICAvLyBDZW50ZXIgdG8gdGhl
IHRhcmdldCByZWN0LgorICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdW5vYnNjdXJlZFJlY3RMb2Nh
dGlvbkFmdGVyWm9vbSA9IHRhcmdldFJlY3QubG9jYXRpb24oKSAtICh1bm9ic2N1cmVkUmVjdFNp
emVBZnRlclpvb20gLSB0YXJnZXRSZWN0LnNpemUoKSkgKiAwLjU7CisKKyAgICAvLyBDZW50ZXIg
dG8gdGhlIHRhcCBwb2ludCBpbnN0ZWFkIGluIGNhc2UgdGhlIHRhcmdldCByZWN0IHdvbid0IGZp
dCBpbiBhIGRpcmVjdGlvbi4KKyAgICBpZiAodGFyZ2V0UmVjdC53aWR0aCgpID4gdW5vYnNjdXJl
ZFJlY3RTaXplQWZ0ZXJab29tLndpZHRoKCkpCisgICAgICAgIHVub2JzY3VyZWRSZWN0TG9jYXRp
b25BZnRlclpvb20uc2V0WChvcmlnaW4ueCgpIC0gdW5vYnNjdXJlZFJlY3RTaXplQWZ0ZXJab29t
LndpZHRoKCkgLyAyKTsKKyAgICBpZiAodGFyZ2V0UmVjdC5oZWlnaHQoKSA+IHVub2JzY3VyZWRS
ZWN0U2l6ZUFmdGVyWm9vbS5oZWlnaHQoKSkKKyAgICAgICAgdW5vYnNjdXJlZFJlY3RMb2NhdGlv
bkFmdGVyWm9vbS5zZXRZKG9yaWdpbi55KCkgLSB1bm9ic2N1cmVkUmVjdFNpemVBZnRlclpvb20u
aGVpZ2h0KCkgLyAyKTsKKworICAgIC8vIFdlIGhhdmUgY29tcHV0ZWQgd2hlcmUgd2Ugd2FudCB0
aGUgdW5vYnNjdXJlZCByZWN0IHRvIGJlLiBOb3cgYWRqdXN0IGZvciB0aGUgb2JzY3VyaW5nIGlu
c2V0cy4KKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZVJlY3RBZnRlclpvb20odW5vYnNj
dXJlZFJlY3RMb2NhdGlvbkFmdGVyWm9vbSwgdW5vYnNjdXJlZFJlY3RTaXplQWZ0ZXJab29tKTsK
KyAgICB2aXNpYmxlUmVjdEFmdGVyWm9vbS5tb3ZlKC10b3BMZWZ0T2JzY3VyZWRJbnNldEFmdGVy
Wm9vbSk7CisgICAgdmlzaWJsZVJlY3RBZnRlclpvb20uZXhwYW5kKHRvcExlZnRPYnNjdXJlZElu
c2V0QWZ0ZXJab29tICsgYm90dG9tUmlnaHRPYnNjdXJlZEluc2V0QWZ0ZXJab29tKTsKKworICAg
IFtzZWxmIF96b29tVG9Qb2ludDp2aXNpYmxlUmVjdEFmdGVyWm9vbS5jZW50ZXIoKSBhdFNjYWxl
OnNjYWxlIGFuaW1hdGVkOmFuaW1hdGVkXTsKK30KKworc3RhdGljIFdlYkNvcmU6OkZsb2F0UG9p
bnQgY29uc3RyYWluQ29udGVudE9mZnNldChXZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmZz
ZXQsIFdlYkNvcmU6OkZsb2F0U2l6ZSBjb250ZW50U2l6ZSwgV2ViQ29yZTo6RmxvYXRTaXplIHVu
b2JzY3VyZWRDb250ZW50U2l6ZSkKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgbWF4aW11bUNv
bnRlbnRPZmZzZXQgPSBjb250ZW50U2l6ZSAtIHVub2JzY3VyZWRDb250ZW50U2l6ZTsKKyAgICBy
ZXR1cm4gY29udGVudE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oV2ViQ29yZTo6RmxvYXRQb2lu
dCgpLCBXZWJDb3JlOjpGbG9hdFBvaW50KG1heGltdW1Db250ZW50T2Zmc2V0KSk7Cit9CisKKy0g
KHZvaWQpX3Njcm9sbFRvQ29udGVudFNjcm9sbFBvc2l0aW9uOihXZWJDb3JlOjpGbG9hdFBvaW50
KXNjcm9sbFBvc2l0aW9uIHNjcm9sbE9yaWdpbjooV2ViQ29yZTo6SW50UG9pbnQpc2Nyb2xsT3Jp
Z2luCit7CisgICAgaWYgKF9jb21taXREaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24gfHwgX2R5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
OjpOb3RSZXNpemluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBjb250ZW50T2Zmc2V0ID0gV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgdG9GbG9hdFNpemUoc2Nyb2xsT3JpZ2luKSk7CisK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHNjYWxlZE9mZnNldCA9IGNvbnRlbnRPZmZzZXQ7Cisg
ICAgQ0dGbG9hdCB6b29tU2NhbGUgPSBjb250ZW50Wm9vbVNjYWxlKHNlbGYpOworICAgIHNjYWxl
ZE9mZnNldC5zY2FsZSh6b29tU2NhbGUpOworCisgICAgQ0dQb2ludCBjb250ZW50T2Zmc2V0SW5T
Y3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBbc2VsZiBfY29udGVudE9mZnNldEFkanVzdGVkRm9yT2Jz
Y3VyZWRJbnNldDpzY2FsZWRPZmZzZXRdOworICAgIGNvbnRlbnRPZmZzZXRJblNjcm9sbFZpZXdD
b29yZGluYXRlcyA9IGNvbnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxWaWV3
LmdldCgpLCBjb250ZW50T2Zmc2V0SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMpOworCisgICAgW19z
Y3JvbGxWaWV3IF9zdG9wU2Nyb2xsaW5nQW5kWm9vbWluZ0FuaW1hdGlvbnNdOworCisgICAgaWYg
KCFDR1BvaW50RXF1YWxUb1BvaW50KGNvbnRlbnRPZmZzZXRJblNjcm9sbFZpZXdDb29yZGluYXRl
cywgW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdKSkKKyAgICAgICAgW19zY3JvbGxWaWV3IHNl
dENvbnRlbnRPZmZzZXQ6Y29udGVudE9mZnNldEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzXTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBjaGFuZ2VkIGFueXRoaW5nLCB0aGVy
ZSB3b3VsZCBub3QgYmUgYW55IFZpc2libGVDb250ZW50UmVjdCB1cGRhdGUgc2VudCB0byB0aGUg
Y29udGVudC4KKyAgICAgICAgLy8gVGhlIFdlYlByb2Nlc3Mgd291bGQga2VlcCB0aGUgaW52YWxp
ZCBjb250ZW50T2Zmc2V0IGFzIGl0cyBzY3JvbGwgcG9zaXRpb24uCisgICAgICAgIC8vIFRvIHN5
bmNocm9uaXplIHRoZSBXZWJQcm9jZXNzIHdpdGggd2hhdCBpcyBvbiBzY3JlZW4sIHdlIHNlbmQg
dGhlIFZpc2libGVDb250ZW50UmVjdCBhZ2Fpbi4KKyAgICAgICAgX3BhZ2UtPnJlc2VuZExhc3RW
aXNpYmxlQ29udGVudFJlY3RzKCk7CisgICAgfQorfQorCistIChCT09MKV9zY3JvbGxUb1JlY3Q6
KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2lu
dClvcmlnaW4gbWluaW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFu
Y2UKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdW5vYnNjdXJlZENvbnRlbnRSZWN0KFtzZWxm
IF9jb250ZW50UmVjdEZvclVzZXJJbnRlcmFjdGlvbl0pOworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgdW5vYnNjdXJlZENvbnRlbnRPZmZzZXQgPSB1bm9ic2N1cmVkQ29udGVudFJlY3QubG9jYXRp
b24oKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgY29udGVudFNpemUoW3NlbGYuX2N1cnJlbnRD
b250ZW50VmlldyBib3VuZHNdLnNpemUpOworCisgICAgLy8gQ2VudGVyIHRoZSB0YXJnZXQgcmVj
dCBpbiB0aGUgc2Nyb2xsIHZpZXcuCisgICAgLy8gSWYgdGhlIHRhcmdldCBkb2Vzbid0IGZpdCBp
biB0aGUgc2Nyb2xsIHZpZXcsIGNlbnRlciBvbiB0aGUgZ2VzdHVyZSBsb2NhdGlvbiBpbnN0ZWFk
LgorICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQ7Cisg
ICAgaWYgKHRhcmdldFJlY3Qud2lkdGgoKSA8PSB1bm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgo
KSkKKyAgICAgICAgbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQuc2V0WCh0YXJnZXRSZWN0Lngo
KSAtICh1bm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKSAtIHRhcmdldFJlY3Qud2lkdGgoKSkg
LyAyKTsKKyAgICBlbHNlCisgICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LnNldFgo
b3JpZ2luLngoKSAtIHVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpIC8gMik7CisgICAgaWYg
KHRhcmdldFJlY3QuaGVpZ2h0KCkgPD0gdW5vYnNjdXJlZENvbnRlbnRSZWN0LmhlaWdodCgpKQor
ICAgICAgICBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldC5zZXRZKHRhcmdldFJlY3QueSgpIC0g
KHVub2JzY3VyZWRDb250ZW50UmVjdC5oZWlnaHQoKSAtIHRhcmdldFJlY3QuaGVpZ2h0KCkpIC8g
Mik7CisgICAgZWxzZQorICAgICAgICBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldC5zZXRZKG9y
aWdpbi55KCkgLSB1bm9ic2N1cmVkQ29udGVudFJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICBuZXdV
bm9ic2N1cmVkQ29udGVudE9mZnNldCA9IGNvbnN0cmFpbkNvbnRlbnRPZmZzZXQobmV3VW5vYnNj
dXJlZENvbnRlbnRPZmZzZXQsIGNvbnRlbnRTaXplLCB1bm9ic2N1cmVkQ29udGVudFJlY3Quc2l6
ZSgpKTsKKworICAgIGlmICh1bm9ic2N1cmVkQ29udGVudE9mZnNldCA9PSBuZXdVbm9ic2N1cmVk
Q29udGVudE9mZnNldCkgeworICAgICAgICBpZiAodGFyZ2V0UmVjdC53aWR0aCgpID4gdW5vYnNj
dXJlZENvbnRlbnRSZWN0LndpZHRoKCkpCisgICAgICAgICAgICBuZXdVbm9ic2N1cmVkQ29udGVu
dE9mZnNldC5zZXRYKG9yaWdpbi54KCkgLSB1bm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKSAv
IDIpOworICAgICAgICBpZiAodGFyZ2V0UmVjdC5oZWlnaHQoKSA+IHVub2JzY3VyZWRDb250ZW50
UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAgIG5ld1Vub2JzY3VyZWRDb250ZW50T2Zmc2V0LnNl
dFkob3JpZ2luLnkoKSAtIHVub2JzY3VyZWRDb250ZW50UmVjdC5oZWlnaHQoKSAvIDIpOworICAg
ICAgICBuZXdVbm9ic2N1cmVkQ29udGVudE9mZnNldCA9IGNvbnN0cmFpbkNvbnRlbnRPZmZzZXQo
bmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQsIGNvbnRlbnRTaXplLCB1bm9ic2N1cmVkQ29udGVu
dFJlY3Quc2l6ZSgpKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2Nyb2xsVmll
d09mZnNldERlbHRhID0gbmV3VW5vYnNjdXJlZENvbnRlbnRPZmZzZXQgLSB1bm9ic2N1cmVkQ29u
dGVudE9mZnNldDsKKyAgICBzY3JvbGxWaWV3T2Zmc2V0RGVsdGEuc2NhbGUoY29udGVudFpvb21T
Y2FsZShzZWxmKSk7CisKKyAgICBmbG9hdCBzY3JvbGxEaXN0YW5jZSA9IHNjcm9sbFZpZXdPZmZz
ZXREZWx0YS5kaWFnb25hbExlbmd0aCgpOworICAgIGlmIChzY3JvbGxEaXN0YW5jZSA8IG1pbmlt
dW1TY3JvbGxEaXN0YW5jZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgW19jb250ZW50
VmlldyB3aWxsU3RhcnRab29tT3JTY3JvbGxdOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFZpc2li
bGVSZWN0cywgc3RyZWFtIDw8ICJfc2Nyb2xsVG9SZWN0OiBzY3JvbGxpbmcgdG8gIiA8PCBbX3Nj
cm9sbFZpZXcgY29udGVudE9mZnNldF0gKyBzY3JvbGxWaWV3T2Zmc2V0RGVsdGEpOworCisgICAg
W19zY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6KFtfc2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0
XSArIHNjcm9sbFZpZXdPZmZzZXREZWx0YSkgYW5pbWF0ZWQ6WUVTXTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLSAodm9pZClfem9vbU91dFdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQp
b3JpZ2luIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkCit7CisgICAgW3NlbGYgX3pvb21Ub1BvaW50
Om9yaWdpbiBhdFNjYWxlOltfc2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxlXSBhbmltYXRlZDph
bmltYXRlZF07Cit9CisKKy0gKHZvaWQpX3pvb21Ub0luaXRpYWxTY2FsZVdpdGhPcmlnaW46KFdl
YkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkCit7CisgICAg
QVNTRVJUKF9pbml0aWFsU2NhbGVGYWN0b3IgPiAwKTsKKyAgICBbc2VsZiBfem9vbVRvUG9pbnQ6
b3JpZ2luIGF0U2NhbGU6X2luaXRpYWxTY2FsZUZhY3RvciBhbmltYXRlZDphbmltYXRlZF07Cit9
CisKKy8vIGZvY3VzZWRFbGVtZW50UmVjdCBhbmQgc2VsZWN0aW9uUmVjdCBhcmUgYm90aCBpbiBk
b2N1bWVudCBjb29yZGluYXRlcy4KKy0gKHZvaWQpX3pvb21Ub0ZvY3VzUmVjdDooY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jilmb2N1c2VkRWxlbWVudFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMg
c2VsZWN0aW9uUmVjdDooY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JilzZWxlY3Rpb25SZWN0SW5E
b2N1bWVudENvb3JkaW5hdGVzIGluc2lkZUZpeGVkOihCT09MKWluc2lkZUZpeGVkCisgICAgZm9u
dFNpemU6KGZsb2F0KWZvbnRTaXplIG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBt
YXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgYWxsb3dTY2FsaW5nOihCT09MKWFsbG93
U2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClmb3JjZVNjcm9sbAoreworICAgIExPR19XSVRIX1NU
UkVBTShWaXNpYmxlUmVjdHMsIHN0cmVhbSA8PCAiX3pvb21Ub0ZvY3VzUmVjdDoiIDw8IGZvY3Vz
ZWRFbGVtZW50UmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyA8PCAiIHNlbGVjdGlvblJlY3Q6IiA8
PCBzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzKTsKKyAgICBVTlVTRURfUEFSQU0o
aW5zaWRlRml4ZWQpOworCisgICAgY29uc3QgZG91YmxlIG1pbmltdW1IZWlnaHRUb1Nob3dDb250
ZW50QWJvdmVLZXlib2FyZCA9IDEwNjsKKyAgICBjb25zdCBDRlRpbWVJbnRlcnZhbCBmb3JtQ29u
dHJvbFpvb21BbmltYXRpb25EdXJhdGlvbiA9IDAuMjU7CisgICAgY29uc3QgZG91YmxlIGNhcmV0
T2Zmc2V0RnJvbVdpbmRvd0VkZ2UgPSA4OworCisgICAgVUlXaW5kb3cgKndpbmRvdyA9IFtfc2Ny
b2xsVmlldyB3aW5kb3ddOworCisgICAgLy8gRmluZCB0aGUgcG9ydGlvbiBvZiB0aGUgdmlldyB0
aGF0IGlzIHZpc2libGUgb24gdGhlIHNjcmVlbi4KKyAgICBVSVZpZXdDb250cm9sbGVyICp0b3BW
aWV3Q29udHJvbGxlciA9IFtbW19zY3JvbGxWaWV3IF92aWV3Q29udHJvbGxlckZvckFuY2VzdG9y
XSBfcm9vdEFuY2VzdG9yVmlld0NvbnRyb2xsZXJdIF92aWV3Q29udHJvbGxlckZvclN1cHBvcnRl
ZEludGVyZmFjZU9yaWVudGF0aW9uc107CisgICAgVUlWaWV3ICpmdWxsU2NyZWVuVmlldyA9IHRv
cFZpZXdDb250cm9sbGVyLnZpZXc7CisgICAgaWYgKCFmdWxsU2NyZWVuVmlldykKKyAgICAgICAg
ZnVsbFNjcmVlblZpZXcgPSB3aW5kb3c7CisKKyAgICBDR1JlY3QgdW5vYnNjdXJlZFNjcm9sbFZp
ZXdSZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBVSUVkZ2VJbnNldHNJbnNldFJlY3QoW3NlbGYg
Ym91bmRzXSwgX29ic2N1cmVkSW5zZXRzKTsKKyAgICBDR1JlY3QgdmlzaWJsZVNjcm9sbFZpZXdC
b3VuZHNJbldlYlZpZXdDb29yZGluYXRlcyA9IENHUmVjdEludGVyc2VjdGlvbih1bm9ic2N1cmVk
U2Nyb2xsVmlld1JlY3RJbldlYlZpZXdDb29yZGluYXRlcywgW2Z1bGxTY3JlZW5WaWV3IGNvbnZl
cnRSZWN0OltmdWxsU2NyZWVuVmlldyBib3VuZHNdIHRvVmlldzpzZWxmXSk7CisgICAgQ0dSZWN0
IGZvcm1Bc3Npc3RhbnRGcmFtZUluV2ViVmlld0Nvb3JkaW5hdGVzID0gW3dpbmRvdyBjb252ZXJ0
UmVjdDpfaW5wdXRWaWV3Qm91bmRzIHRvVmlldzpzZWxmXTsKKyAgICBDR1JlY3QgaW50ZXJzZWN0
aW9uQmV0d2VlblNjcm9sbFZpZXdBbmRGb3JtQXNzaXN0YW50ID0gQ0dSZWN0SW50ZXJzZWN0aW9u
KHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3Q29vcmRpbmF0ZXMsIGZvcm1Bc3Npc3Rh
bnRGcmFtZUluV2ViVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBDR1NpemUgdmlzaWJsZVNpemUgPSB2
aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGVzLnNpemU7CisKKyAgICBD
R0Zsb2F0IHZpc2libGVPZmZzZXRGcm9tVG9wID0gMDsKKyAgICBDR0Zsb2F0IG1pbmltdW1EaXN0
YW5jZUZyb21LZXlib2FyZFRvVHJpZ2dlclNjcm9sbCA9IDA7CisgICAgaWYgKCFDR1JlY3RJc0Vt
cHR5KGludGVyc2VjdGlvbkJldHdlZW5TY3JvbGxWaWV3QW5kRm9ybUFzc2lzdGFudCkpIHsKKyAg
ICAgICAgQ0dGbG9hdCBoZWlnaHRWaXNpYmxlQWJvdmVGb3JtQXNzaXN0YW50ID0gQ0dSZWN0R2V0
TWluWShpbnRlcnNlY3Rpb25CZXR3ZWVuU2Nyb2xsVmlld0FuZEZvcm1Bc3Npc3RhbnQpIC0gQ0dS
ZWN0R2V0TWluWSh2aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGVzKTsK
KyAgICAgICAgQ0dGbG9hdCBoZWlnaHRWaXNpYmxlQmVsb3dGb3JtQXNzaXN0YW50ID0gQ0dSZWN0
R2V0TWF4WSh2aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGVzKSAtIENH
UmVjdEdldE1heFkoaW50ZXJzZWN0aW9uQmV0d2VlblNjcm9sbFZpZXdBbmRGb3JtQXNzaXN0YW50
KTsKKworICAgICAgICBpZiAoaGVpZ2h0VmlzaWJsZUFib3ZlRm9ybUFzc2lzdGFudCA+PSBtaW5p
bXVtSGVpZ2h0VG9TaG93Q29udGVudEFib3ZlS2V5Ym9hcmQgfHwgaGVpZ2h0VmlzaWJsZUJlbG93
Rm9ybUFzc2lzdGFudCA8IGhlaWdodFZpc2libGVBYm92ZUZvcm1Bc3Npc3RhbnQpIHsKKyAgICAg
ICAgICAgIHZpc2libGVTaXplLmhlaWdodCA9IGhlaWdodFZpc2libGVBYm92ZUZvcm1Bc3Npc3Rh
bnQ7CisgICAgICAgICAgICBtaW5pbXVtRGlzdGFuY2VGcm9tS2V5Ym9hcmRUb1RyaWdnZXJTY3Jv
bGwgPSA1MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZpc2libGVTaXplLmhlaWdo
dCA9IGhlaWdodFZpc2libGVCZWxvd0Zvcm1Bc3Npc3RhbnQ7CisgICAgICAgICAgICB2aXNpYmxl
T2Zmc2V0RnJvbVRvcCA9IENHUmVjdEdldE1heFkoaW50ZXJzZWN0aW9uQmV0d2VlblNjcm9sbFZp
ZXdBbmRGb3JtQXNzaXN0YW50KSAtIENHUmVjdEdldE1pblkodmlzaWJsZVNjcm9sbFZpZXdCb3Vu
ZHNJbldlYlZpZXdDb29yZGluYXRlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBab29t
IGFyb3VuZCB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGZyYW1lLiBXZSB1c2UgYSAic3RhbmRhcmQi
IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBwcm9wZXIgZnJhbWUuCisgICAgZG91YmxlIGN1cnJlbnRT
Y2FsZSA9IGNvbnRlbnRab29tU2NhbGUoc2VsZik7CisgICAgZG91YmxlIHNjYWxlID0gY3VycmVu
dFNjYWxlOworICAgIGlmIChhbGxvd1NjYWxpbmcpIHsKKyNpZiBQTEFURk9STShXQVRDSE9TKQor
ICAgICAgICBjb25zdCBDR0Zsb2F0IG1pbmltdW1NYXJnaW5Gb3Jab29taW5nVG9FbnRpcmVGb2N1
c1JlY3RJbldlYlZpZXdDb29yZGluYXRlcyA9IDEwOworICAgICAgICBjb25zdCBDR0Zsb2F0IG1h
eGltdW1NYXJnaW5Gb3Jab29taW5nVG9FbnRpcmVGb2N1c1JlY3RJbldlYlZpZXdDb29yZGluYXRl
cyA9IDM1OworCisgICAgICAgIENHUmVjdCBtaW5pbXVtVGFyZ2V0UmVjdEluRG9jdW1lbnRDb29y
ZGluYXRlcyA9IFVJUmVjdEluc2V0RWRnZXMoZm9jdXNlZEVsZW1lbnRSZWN0SW5Eb2N1bWVudENv
b3JkaW5hdGVzLCBVSVJlY3RFZGdlQWxsLCAtbWluaW11bU1hcmdpbkZvclpvb21pbmdUb0VudGly
ZUZvY3VzUmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzIC8gY3VycmVudFNjYWxlKTsKKyAgICAgICAg
Q0dSZWN0IG1heGltdW1UYXJnZXRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzID0gVUlSZWN0SW5z
ZXRFZGdlcyhmb2N1c2VkRWxlbWVudFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMsIFVJUmVjdEVk
Z2VBbGwsIC1tYXhpbXVtTWFyZ2luRm9yWm9vbWluZ1RvRW50aXJlRm9jdXNSZWN0SW5XZWJWaWV3
Q29vcmRpbmF0ZXMgLyBjdXJyZW50U2NhbGUpOworCisgICAgICAgIGRvdWJsZSBjbGFtcGVkTWF4
aW11bVRhcmdldFNjYWxlID0gY2xhbXBUbzxkb3VibGU+KHN0ZDo6bWluKHZpc2libGVTaXplLndp
ZHRoIC8gQ0dSZWN0R2V0V2lkdGgobWluaW11bVRhcmdldFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0
ZXMpLCB2aXNpYmxlU2l6ZS5oZWlnaHQgLyBDR1JlY3RHZXRIZWlnaHQobWluaW11bVRhcmdldFJl
Y3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpKSwgbWluaW11bVNjYWxlLCBtYXhpbXVtU2NhbGUpOwor
ICAgICAgICBkb3VibGUgY2xhbXBlZE1pbmltdW1UYXJnZXRTY2FsZSA9IGNsYW1wVG88ZG91Ymxl
PihzdGQ6Om1pbih2aXNpYmxlU2l6ZS53aWR0aCAvIENHUmVjdEdldFdpZHRoKG1heGltdW1UYXJn
ZXRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzKSwgdmlzaWJsZVNpemUuaGVpZ2h0IC8gQ0dSZWN0
R2V0SGVpZ2h0KG1heGltdW1UYXJnZXRSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzKSksIG1pbmlt
dW1TY2FsZSwgbWF4aW11bVNjYWxlKTsKKyAgICAgICAgc2NhbGUgPSBjbGFtcFRvPGRvdWJsZT4o
Y3VycmVudFNjYWxlLCBjbGFtcGVkTWluaW11bVRhcmdldFNjYWxlLCBjbGFtcGVkTWF4aW11bVRh
cmdldFNjYWxlKTsKKyNlbHNlCisgICAgICAgIGNvbnN0IGRvdWJsZSB3ZWJWaWV3U3RhbmRhcmRG
b250U2l6ZSA9IDE2OworICAgICAgICBzY2FsZSA9IGNsYW1wVG88ZG91YmxlPih3ZWJWaWV3U3Rh
bmRhcmRGb250U2l6ZSAvIGZvbnRTaXplLCBtaW5pbXVtU2NhbGUsIG1heGltdW1TY2FsZSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICBDR0Zsb2F0IGRvY3VtZW50V2lkdGggPSBbX2NvbnRlbnRWaWV3
IGJvdW5kc10uc2l6ZS53aWR0aDsKKyAgICBzY2FsZSA9IENHUm91bmQoZG9jdW1lbnRXaWR0aCAq
IHNjYWxlKSAvIGRvY3VtZW50V2lkdGg7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZm9jdXNl
ZEVsZW1lbnRSZWN0SW5OZXdTY2FsZSA9IGZvY3VzZWRFbGVtZW50UmVjdEluRG9jdW1lbnRDb29y
ZGluYXRlczsKKyAgICBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLnNjYWxlKHNjYWxlKTsK
KyAgICBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLm1vdmVCeShbX2NvbnRlbnRWaWV3IGZy
YW1lXS5vcmlnaW4pOworCisgICAgQk9PTCBzZWxlY3Rpb25SZWN0SXNOb3ROdWxsID0gIXNlbGVj
dGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMuaXNaZXJvKCk7CisgICAgQk9PTCBkb05vdFNj
cm9sbFdoZW5Db250ZW50SXNBbHJlYWR5VmlzaWJsZSA9ICFmb3JjZVNjcm9sbCB8fCBbX2NvbnRl
bnRWaWV3IF9zaG91bGRBdm9pZFNjcm9sbGluZ1doZW5Gb2N1c2VkQ29udGVudElzVmlzaWJsZV07
CisgICAgaWYgKGRvTm90U2Nyb2xsV2hlbkNvbnRlbnRJc0FscmVhZHlWaXNpYmxlKSB7CisgICAg
ICAgIENHUmVjdCBjdXJyZW50bHlWaXNpYmxlUmVnaW9uSW5XZWJWaWV3Q29vcmRpbmF0ZXM7Cisg
ICAgICAgIGN1cnJlbnRseVZpc2libGVSZWdpb25JbldlYlZpZXdDb29yZGluYXRlcy5vcmlnaW4g
PSB1bm9ic2N1cmVkU2Nyb2xsVmlld1JlY3RJbldlYlZpZXdDb29yZGluYXRlcy5vcmlnaW47Cisg
ICAgICAgIGN1cnJlbnRseVZpc2libGVSZWdpb25JbldlYlZpZXdDb29yZGluYXRlcy5vcmlnaW4u
eSArPSB2aXNpYmxlT2Zmc2V0RnJvbVRvcDsKKyAgICAgICAgY3VycmVudGx5VmlzaWJsZVJlZ2lv
bkluV2ViVmlld0Nvb3JkaW5hdGVzLnNpemUgPSB2aXNpYmxlU2l6ZTsKKyAgICAgICAgY3VycmVu
dGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3JkaW5hdGVzLnNpemUuaGVpZ2h0IC09IG1pbmlt
dW1EaXN0YW5jZUZyb21LZXlib2FyZFRvVHJpZ2dlclNjcm9sbDsKKworICAgICAgICAvLyBEb24n
dCBib3RoZXIgc2Nyb2xsaW5nIGlmIHRoZSBlbnRpcmUgbm9kZSBpcyBhbHJlYWR5IHZpc2libGUs
IHdoZXRoZXIgb3Igbm90IHdlIGdvdCBhIHNlbGVjdGlvblJlY3QuCisgICAgICAgIGlmIChDR1Jl
Y3RDb250YWluc1JlY3QoY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3JkaW5hdGVz
LCBbc2VsZiBjb252ZXJ0UmVjdDpmb2N1c2VkRWxlbWVudFJlY3RJbkRvY3VtZW50Q29vcmRpbmF0
ZXMgZnJvbVZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXSkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHNjcm9sbGluZyBpZiB3ZSBoYXZlIGEgdmFsaWQgc2Vs
ZWN0aW9uUmVjdCBhbmQgaXQgaXMgYWxyZWFkeSB2aXNpYmxlLgorICAgICAgICBpZiAoc2VsZWN0
aW9uUmVjdElzTm90TnVsbCAmJiBDR1JlY3RDb250YWluc1JlY3QoY3VycmVudGx5VmlzaWJsZVJl
Z2lvbkluV2ViVmlld0Nvb3JkaW5hdGVzLCBbc2VsZiBjb252ZXJ0UmVjdDpzZWxlY3Rpb25SZWN0
SW5Eb2N1bWVudENvb3JkaW5hdGVzIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV0pKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIHdhbnQgdG8gY2VudGVyIHRoZSBm
b2N1c2VkIGVsZW1lbnQgd2l0aGluIHRoZSB2aWV3cG9ydCwgd2l0aCBhcyBtdWNoIHNwYWNpbmcg
b24gYWxsIHNpZGVzIGFzCisgICAgLy8gd2UgY2FuIGdldCBiYXNlZCBvbiB0aGUgdmlzaWJsZSBh
cmVhIGFmdGVyIHpvb21pbmcuIFRoZSBzcGFjaW5nIGluIGVpdGhlciBkaW1lbnNpb24gaXMgaGFs
ZiB0aGUKKyAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNpemUgb2YgdGhlIERPTSBub2Rl
IGFuZCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSBmcmFtZS4KKyAgICAvLyBJZiB0aGUgZWxlbWVu
dCBpcyB0b28gd2lkZSB0byBiZSBob3Jpem9udGFsbHkgY2VudGVyZWQgb3IgdG9vIHRhbGwgdG8g
YmUgdmVydGljYWxseSBjZW50ZXJlZCwgd2UKKyAgICAvLyBpbnN0ZWFkIHNjcm9sbCBzdWNoIHRo
YXQgdGhlIGxlZnQgZWRnZSBvciB0b3AgZWRnZSBvZiB0aGUgZWxlbWVudCBpcyB3aXRoaW4gdGhl
IGxlZnQgaGFsZiBvciB0b3AKKyAgICAvLyBoYWxmIG9mIHRoZSB2aWV3cG9ydCwgcmVzcGVjdGl2
ZWx5LgorICAgIENHRmxvYXQgaG9yaXpvbnRhbFNwYWNlSW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSAo
dmlzaWJsZVNpemUud2lkdGggLSBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlLndpZHRoKCkp
IC8gMi4wOworICAgIENHRmxvYXQgdmVydGljYWxTcGFjZUluV2ViVmlld0Nvb3JkaW5hdGVzID0g
KHZpc2libGVTaXplLmhlaWdodCAtIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUuaGVpZ2h0
KCkpIC8gMi4wOworCisgICAgYXV0byB0b3BMZWZ0ID0gQ0dQb2ludFplcm87CisgICAgYXV0byBz
Y3JvbGxWaWV3SW5zZXRzID0gW19zY3JvbGxWaWV3IF9lZmZlY3RpdmVDb250ZW50SW5zZXRdOwor
ICAgIGF1dG8gY3VycmVudFRvcExlZnQgPSBbX3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisK
KyAgICBpZiAoX2hhdmVTZXRPYnNjdXJlZEluc2V0cykgeworICAgICAgICBjdXJyZW50VG9wTGVm
dC54ICs9IF9vYnNjdXJlZEluc2V0cy5sZWZ0OworICAgICAgICBjdXJyZW50VG9wTGVmdC55ICs9
IF9vYnNjdXJlZEluc2V0cy50b3A7CisgICAgfQorCisgICAgaWYgKGhvcml6b250YWxTcGFjZUlu
V2ViVmlld0Nvb3JkaW5hdGVzID4gMCkKKyAgICAgICAgdG9wTGVmdC54ID0gZm9jdXNlZEVsZW1l
bnRSZWN0SW5OZXdTY2FsZS54KCkgLSBob3Jpem9udGFsU3BhY2VJbldlYlZpZXdDb29yZGluYXRl
czsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBtaW5pbXVtT2Zmc2V0VG9SZXZlYWxMZWZ0RWRn
ZSA9IHN0ZDo6bWF4KC1zY3JvbGxWaWV3SW5zZXRzLmxlZnQsIGZvY3VzZWRFbGVtZW50UmVjdElu
TmV3U2NhbGUueCgpIC0gdmlzaWJsZVNpemUud2lkdGggLyAyKTsKKyAgICAgICAgYXV0byBtYXhp
bXVtT2Zmc2V0VG9SZXZlYWxMZWZ0RWRnZSA9IGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUu
eCgpOworICAgICAgICB0b3BMZWZ0LnggPSBjbGFtcFRvPGRvdWJsZT4oY3VycmVudFRvcExlZnQu
eCwgbWluaW11bU9mZnNldFRvUmV2ZWFsTGVmdEVkZ2UsIG1heGltdW1PZmZzZXRUb1JldmVhbExl
ZnRFZGdlKTsKKyAgICB9CisKKyAgICBpZiAodmVydGljYWxTcGFjZUluV2ViVmlld0Nvb3JkaW5h
dGVzID4gMCkKKyAgICAgICAgdG9wTGVmdC55ID0gZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2Fs
ZS55KCkgLSB2ZXJ0aWNhbFNwYWNlSW5XZWJWaWV3Q29vcmRpbmF0ZXM7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gbWluaW11bU9mZnNldFRvUmV2ZWFsVG9wRWRnZSA9IHN0ZDo6bWF4KC1zY3Jv
bGxWaWV3SW5zZXRzLnRvcCwgZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2FsZS55KCkgLSB2aXNp
YmxlU2l6ZS5oZWlnaHQgLyAyKTsKKyAgICAgICAgYXV0byBtYXhpbXVtT2Zmc2V0VG9SZXZlYWxU
b3BFZGdlID0gZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2FsZS55KCk7CisgICAgICAgIHRvcExl
ZnQueSA9IGNsYW1wVG88ZG91YmxlPihjdXJyZW50VG9wTGVmdC55LCBtaW5pbXVtT2Zmc2V0VG9S
ZXZlYWxUb3BFZGdlLCBtYXhpbXVtT2Zmc2V0VG9SZXZlYWxUb3BFZGdlKTsKKyAgICB9CisKKyAg
ICB0b3BMZWZ0LnkgLT0gdmlzaWJsZU9mZnNldEZyb21Ub3A7CisKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgZG9jdW1lbnRCb3VuZHNJbk5ld1NjYWxlID0gW19jb250ZW50VmlldyBib3VuZHNdOwor
ICAgIGRvY3VtZW50Qm91bmRzSW5OZXdTY2FsZS5zY2FsZShzY2FsZSk7CisgICAgZG9jdW1lbnRC
b3VuZHNJbk5ld1NjYWxlLm1vdmVCeShbX2NvbnRlbnRWaWV3IGZyYW1lXS5vcmlnaW4pOworCisg
ICAgQ0dGbG9hdCBtaW5pbXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nvb3Jk
aW5hdGVzID0gLUlORklOSVRZOworICAgIENHRmxvYXQgbWluaW11bUFsbG93YWJsZVZlcnRpY2Fs
T2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSAtSU5GSU5JVFk7CisgICAgQ0dGbG9hdCBtYXhp
bXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzID0gQ0dSZWN0
R2V0TWF4WChkb2N1bWVudEJvdW5kc0luTmV3U2NhbGUpIC0gdmlzaWJsZVNpemUud2lkdGg7Cisg
ICAgQ0dGbG9hdCBtYXhpbXVtQWxsb3dhYmxlVmVydGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGlu
YXRlcyA9IENHUmVjdEdldE1heFkoZG9jdW1lbnRCb3VuZHNJbk5ld1NjYWxlKSAtIHZpc2libGVT
aXplLmhlaWdodDsKKworICAgIGlmIChzZWxlY3Rpb25SZWN0SXNOb3ROdWxsKSB7CisgICAgICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0SW5OZXdTY2FsZSA9IHNlbGVjdGlvblJl
Y3RJbkRvY3VtZW50Q29vcmRpbmF0ZXM7CisgICAgICAgIHNlbGVjdGlvblJlY3RJbk5ld1NjYWxl
LnNjYWxlKHNjYWxlKTsKKyAgICAgICAgc2VsZWN0aW9uUmVjdEluTmV3U2NhbGUubW92ZUJ5KFtf
Y29udGVudFZpZXcgZnJhbWVdLm9yaWdpbik7CisgICAgICAgIC8vIEFkanVzdCB0aGUgbWluIGFu
ZCBtYXggYWxsb3dhYmxlIHNjcm9sbCBvZmZzZXRzLCBzdWNoIHRoYXQgdGhlIHNlbGVjdGlvbiBy
ZWN0IHJlbWFpbnMgdmlzaWJsZS4KKyAgICAgICAgbWluaW11bUFsbG93YWJsZUhvcml6b250YWxP
ZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcyA9IENHUmVjdEdldE1heFgoc2VsZWN0aW9uUmVjdElu
TmV3U2NhbGUpICsgY2FyZXRPZmZzZXRGcm9tV2luZG93RWRnZSAtIHZpc2libGVTaXplLndpZHRo
OworICAgICAgICBtaW5pbXVtQWxsb3dhYmxlVmVydGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGlu
YXRlcyA9IENHUmVjdEdldE1heFkoc2VsZWN0aW9uUmVjdEluTmV3U2NhbGUpICsgY2FyZXRPZmZz
ZXRGcm9tV2luZG93RWRnZSAtIHZpc2libGVTaXplLmhlaWdodCAtIHZpc2libGVPZmZzZXRGcm9t
VG9wOworICAgICAgICBtYXhpbXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nv
b3JkaW5hdGVzID0gc3RkOjptaW48Q0dGbG9hdD4obWF4aW11bUFsbG93YWJsZUhvcml6b250YWxP
ZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcywgQ0dSZWN0R2V0TWluWChzZWxlY3Rpb25SZWN0SW5O
ZXdTY2FsZSkgLSBjYXJldE9mZnNldEZyb21XaW5kb3dFZGdlKTsKKyAgICAgICAgbWF4aW11bUFs
bG93YWJsZVZlcnRpY2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBzdGQ6Om1pbjxDR0Zs
b2F0PihtYXhpbXVtQWxsb3dhYmxlVmVydGljYWxPZmZzZXRJbldlYlZpZXdDb29yZGluYXRlcywg
Q0dSZWN0R2V0TWluWShzZWxlY3Rpb25SZWN0SW5OZXdTY2FsZSkgLSBjYXJldE9mZnNldEZyb21X
aW5kb3dFZGdlIC0gdmlzaWJsZU9mZnNldEZyb21Ub3ApOworICAgIH0KKworICAgIC8vIENvbnN0
cmFpbiB0aGUgbGVmdCBlZGdlIGluIGRvY3VtZW50IGNvb3JkaW5hdGVzIHNvIHRoYXQ6CisgICAg
Ly8gIC0gaXQgaXNuJ3Qgc28gc21hbGwgdGhhdCB0aGUgc2Nyb2xsVmlzaWJsZVJlY3QgaXNuJ3Qg
dmlzaWJsZSBvbiB0aGUgc2NyZWVuCisgICAgLy8gIC0gaXQgaXNuJ3Qgc28gZ3JlYXQgdGhhdCB0
aGUgZG9jdW1lbnQncyByaWdodCBlZGdlIGlzIGxlc3MgdGhhbiB0aGUgcmlnaHQgZWRnZSBvZiB0
aGUgc2NyZWVuCisgICAgdG9wTGVmdC54ID0gY2xhbXBUbzxDR0Zsb2F0Pih0b3BMZWZ0LngsIG1p
bmltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMsIG1heGlt
dW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMpOworCisgICAg
Ly8gQ29uc3RyYWluIHRoZSB0b3AgZWRnZSBpbiBkb2N1bWVudCBjb29yZGluYXRlcyBzbyB0aGF0
OgorICAgIC8vICAtIGl0IGlzbid0IHNvIHNtYWxsIHRoYXQgdGhlIHNjcm9sbFZpc2libGVSZWN0
IGlzbid0IHZpc2libGUgb24gdGhlIHNjcmVlbgorICAgIC8vICAtIGl0IGlzbid0IHNvIGdyZWF0
IHRoYXQgdGhlIGRvY3VtZW50J3MgYm90dG9tIGVkZ2UgaXMgaGlnaGVyIHRoYW4gdGhlIHRvcCBv
ZiB0aGUgZm9ybSBhc3Npc3RhbnQKKyAgICB0b3BMZWZ0LnkgPSBjbGFtcFRvPENHRmxvYXQ+KHRv
cExlZnQueSwgbWluaW11bUFsbG93YWJsZVZlcnRpY2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0
ZXMsIG1heGltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzKTsK
KworICAgIGlmIChfaGF2ZVNldE9ic2N1cmVkSW5zZXRzKSB7CisgICAgICAgIC8vIFRoaXMgbG9v
a3MgdW5pbnR1aXRpdmUsIGJ1dCBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJlY2lzZWx5IGNl
bnRlciB0aGUgZm9jdXNlZCBlbGVtZW50IGluIHRoZSB2aXNpYmxlIGFyZWEuCisgICAgICAgIC8v
IFRoZSB0b3AgbGVmdCBwb3NpdGlvbiBhbHJlYWR5IGFjY291bnRzIGZvciB0b3AgYW5kIGxlZnQg
b2JzY3VyZWQgaW5zZXRzIC0gaS5lLiwgYSB0b3BMZWZ0IG9mICgwLCAwKSBjb3JyZXNwb25kcwor
ICAgICAgICAvLyB0byB0aGUgdG9wLSBhbmQgbGVmdC1tb3N0IHBvaW50IGJlbG93IChhbmQgdG8g
dGhlIHJpZ2h0IG9mKSB0aGUgdG9wIGluc2V0IGFyZWEgYW5kIGxlZnQgaW5zZXQgYXJlYXMsIHJl
c3BlY3RpdmVseS4KKyAgICAgICAgLy8gSG93ZXZlciwgd2hlbiB0ZWxsaW5nIFdLU2Nyb2xsVmll
dyB0byBzY3JvbGwgdG8gYSBnaXZlbiBjZW50ZXIgcG9zaXRpb24sIHRoaXMgY2VudGVyIHBvc2l0
aW9uIGlzIGNvbXB1dGVkIHJlbGF0aXZlCisgICAgICAgIC8vIHRvIHRoZSBjb29yZGluYXRlIHNw
YWNlIG9mIHRoZSBzY3JvbGwgdmlldy4gVGh1cywgdG8gY29tcHV0ZSBvdXIgY2VudGVyIHBvc2l0
aW9uIGZyb20gdGhlIHRvcCBsZWZ0IHBvc2l0aW9uLCB3ZQorICAgICAgICAvLyBuZWVkIHRvIGZp
cnN0IG1vdmUgdGhlIHRvcCBsZWZ0IHBvc2l0aW9uIHVwIGFuZCB0byB0aGUgbGVmdCwgYW5kIHRo
ZW4gYWRkIGhhbGYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGNvbnRlbnQKKyAgICAgICAg
Ly8gYXJlYSAoaW5jbHVkaW5nIG9ic2N1cmVkIGluc2V0cykuCisgICAgICAgIHRvcExlZnQueCAt
PSBfb2JzY3VyZWRJbnNldHMubGVmdDsKKyAgICAgICAgdG9wTGVmdC55IC09IF9vYnNjdXJlZElu
c2V0cy50b3A7CisgICAgfQorCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBuZXdDZW50ZXIgPSBD
R1BvaW50TWFrZSh0b3BMZWZ0LnggKyBDR1JlY3RHZXRXaWR0aChzZWxmLmJvdW5kcykgLyAyLCB0
b3BMZWZ0LnkgKyBDR1JlY3RHZXRIZWlnaHQoc2VsZi5ib3VuZHMpIC8gMik7CisKKyAgICBpZiAo
c2NhbGUgIT0gY3VycmVudFNjYWxlKQorICAgICAgICBfcGFnZS0+d2lsbFN0YXJ0VXNlclRyaWdn
ZXJlZFpvb21pbmcoKTsKKworICAgIExPR19XSVRIX1NUUkVBTShWaXNpYmxlUmVjdHMsIHN0cmVh
bSA8PCAiX3pvb21Ub0ZvY3VzUmVjdDogem9vbWluZyB0byAiIDw8IG5ld0NlbnRlciA8PCAiIHNj
YWxlOiIgPDwgc2NhbGUpOworCisgICAgLy8gVGhlIG5ld0NlbnRlciBoYXMgYmVlbiBjb21wdXRl
ZCBpbiB0aGUgbmV3IHNjYWxlLCBidXQgX3pvb21Ub0NlbnRlciBleHBlY3RlZCB0aGUgY2VudGVy
IHRvIGJlIGluIHRoZSBvcmlnaW5hbCBzY2FsZS4KKyAgICBuZXdDZW50ZXIuc2NhbGUoMSAvIHNj
YWxlKTsKKyAgICBbX3Njcm9sbFZpZXcgX3pvb21Ub0NlbnRlcjpuZXdDZW50ZXIgc2NhbGU6c2Nh
bGUgZHVyYXRpb246Zm9ybUNvbnRyb2xab29tQW5pbWF0aW9uRHVyYXRpb24gZm9yY2U6WUVTXTsK
K30KKworLSAoZG91YmxlKV9pbml0aWFsU2NhbGVGYWN0b3IKK3sKKyAgICByZXR1cm4gX2luaXRp
YWxTY2FsZUZhY3RvcjsKK30KKworLSAoZG91YmxlKV9jb250ZW50Wm9vbVNjYWxlCit7CisgICAg
cmV0dXJuIGNvbnRlbnRab29tU2NhbGUoc2VsZik7Cit9CisKKy0gKGRvdWJsZSlfdGFyZ2V0Q29u
dGVudFpvb21TY2FsZUZvclJlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpdGFyZ2V0UmVj
dCBjdXJyZW50U2NhbGU6KGRvdWJsZSljdXJyZW50U2NhbGUgZml0RW50aXJlUmVjdDooQk9PTClm
aXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2Nh
bGU6KGRvdWJsZSltYXhpbXVtU2NhbGUKK3sKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdW5vYnNj
dXJlZENvbnRlbnRTaXplKFtzZWxmIF9jb250ZW50UmVjdEZvclVzZXJJbnRlcmFjdGlvbl0uc2l6
ZSk7CisgICAgZG91YmxlIGhvcml6b250YWxTY2FsZSA9IHVub2JzY3VyZWRDb250ZW50U2l6ZS53
aWR0aCgpICogY3VycmVudFNjYWxlIC8gdGFyZ2V0UmVjdC53aWR0aCgpOworICAgIGRvdWJsZSB2
ZXJ0aWNhbFNjYWxlID0gdW5vYnNjdXJlZENvbnRlbnRTaXplLmhlaWdodCgpICogY3VycmVudFNj
YWxlIC8gdGFyZ2V0UmVjdC5oZWlnaHQoKTsKKworICAgIGhvcml6b250YWxTY2FsZSA9IHN0ZDo6
bWluKHN0ZDo6bWF4KGhvcml6b250YWxTY2FsZSwgbWluaW11bVNjYWxlKSwgbWF4aW11bVNjYWxl
KTsKKyAgICB2ZXJ0aWNhbFNjYWxlID0gc3RkOjptaW4oc3RkOjptYXgodmVydGljYWxTY2FsZSwg
bWluaW11bVNjYWxlKSwgbWF4aW11bVNjYWxlKTsKKworICAgIHJldHVybiBmaXRFbnRpcmVSZWN0
ID8gc3RkOjptaW4oaG9yaXpvbnRhbFNjYWxlLCB2ZXJ0aWNhbFNjYWxlKSA6IGhvcml6b250YWxT
Y2FsZTsKK30KKworLSAoQk9PTClfem9vbVRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXRhcmdl
dFJlY3Qgd2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gZml0RW50aXJlUmVj
dDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBt
YXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgbWluaW11bVNjcm9sbERpc3RhbmNlOihm
bG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2UKK3sKKyAgICBjb25zdCBmbG9hdCBtYXhpbXVtU2Nh
bGVGYWN0b3JEZWx0YUZvclBhblNjcm9sbCA9IDAuMDI7CisKKyAgICBkb3VibGUgY3VycmVudFNj
YWxlID0gY29udGVudFpvb21TY2FsZShzZWxmKTsKKyAgICBkb3VibGUgdGFyZ2V0U2NhbGUgPSBb
c2VsZiBfdGFyZ2V0Q29udGVudFpvb21TY2FsZUZvclJlY3Q6dGFyZ2V0UmVjdCBjdXJyZW50U2Nh
bGU6Y3VycmVudFNjYWxlIGZpdEVudGlyZVJlY3Q6Zml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6
bWluaW11bVNjYWxlIG1heGltdW1TY2FsZTptYXhpbXVtU2NhbGVdOworCisgICAgaWYgKGZhYnMo
dGFyZ2V0U2NhbGUgLSBjdXJyZW50U2NhbGUpIDwgbWF4aW11bVNjYWxlRmFjdG9yRGVsdGFGb3JQ
YW5TY3JvbGwpIHsKKyAgICAgICAgaWYgKFtzZWxmIF9zY3JvbGxUb1JlY3Q6dGFyZ2V0UmVjdCBv
cmlnaW46b3JpZ2luIG1pbmltdW1TY3JvbGxEaXN0YW5jZTptaW5pbXVtU2Nyb2xsRGlzdGFuY2Vd
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmICh0YXJnZXRTY2FsZSAh
PSBjdXJyZW50U2NhbGUpIHsKKyAgICAgICAgW3NlbGYgX3pvb21Ub1JlY3Q6dGFyZ2V0UmVjdCBh
dFNjYWxlOnRhcmdldFNjYWxlIG9yaWdpbjpvcmlnaW4gYW5pbWF0ZWQ6WUVTXTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCistICh2b2lkKWRp
ZE1vdmVUb1dpbmRvdworeworICAgIF9wYWdlLT5hY3Rpdml0eVN0YXRlRGlkQ2hhbmdlKFdlYkNv
cmU6OkFjdGl2aXR5U3RhdGU6OmFsbEZsYWdzKCkpOworICAgIF9wYWdlLT53ZWJWaWV3RGlkTW92
ZVRvV2luZG93KCk7Cit9CisKKy0gKHZvaWQpX3NldE9wYXF1ZUludGVybmFsOihCT09MKW9wYXF1
ZQoreworICAgIFtzdXBlciBzZXRPcGFxdWU6b3BhcXVlXTsKKworICAgIFtfY29udGVudFZpZXcg
c2V0T3BhcXVlOm9wYXF1ZV07CisKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4gYmFja2dyb3VuZENvbG9yOworICAgIGlmICgh
b3BhcXVlKQorICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcihXZWJDb3Jl
OjpDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIF9wYWdlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmFj
a2dyb3VuZENvbG9yKTsKKworICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF07
Cit9CisKKy0gKHZvaWQpc2V0T3BhcXVlOihCT09MKW9wYXF1ZQoreworICAgIGlmIChvcGFxdWUg
PT0gc2VsZi5vcGFxdWUpCisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIF9zZXRPcGFxdWVJ
bnRlcm5hbDpvcGFxdWVdOworfQorCistICh2b2lkKXNldEJhY2tncm91bmRDb2xvcjooVUlDb2xv
ciAqKWJhY2tncm91bmRDb2xvcgoreworICAgIFtzdXBlciBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFj
a2dyb3VuZENvbG9yXTsKKyAgICBbX2NvbnRlbnRWaWV3IHNldEJhY2tncm91bmRDb2xvcjpiYWNr
Z3JvdW5kQ29sb3JdOworICAgIFtzZWxmIF91cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF07Cit9
CisKKy0gKEJPT0wpX2FsbG93c0RvdWJsZVRhcEdlc3R1cmVzCit7CisgICAgaWYgKF9mYXN0Q2xp
Y2tpbmdJc0Rpc2FibGVkKQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgLy8gSWYgdGhlIHBh
Z2UgaXMgbm90IHVzZXIgc2NhbGFibGUsIHdlIGRvbid0IGFsbG93IGRvdWJsZSB0YXAgZ2VzdHVy
ZXMuCisgICAgaWYgKCFbX3Njcm9sbFZpZXcgaXNab29tRW5hYmxlZF0gfHwgW19zY3JvbGxWaWV3
IG1pbmltdW1ab29tU2NhbGVdID49IFtfc2Nyb2xsVmlldyBtYXhpbXVtWm9vbVNjYWxlXSkKKyAg
ICAgICAgcmV0dXJuIE5POworCisgICAgLy8gSWYgdGhlIHZpZXdwb3J0IHdpZHRoIHdhcyBub3Qg
ZXhwbGljaXQsIHdlIGFsbG93IGRvdWJsZSB0YXAgZ2VzdHVyZXMuCisgICAgaWYgKCFfdmlld3Bv
cnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdCB8fCBfdmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFn
ZURvY3VtZW50KQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgLy8gSWYgdGhlIHBhZ2Ugc2V0
IGEgdmlld3BvcnQgd2lkdGggdGhhdCB3YXNuJ3QgdGhlIGRldmljZSB3aWR0aCwgdGhlbiBpdCB3
YXMKKyAgICAvLyBzY2FsZWQgYW5kIHRodXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIHpvb20uCisg
ICAgaWYgKF92aWV3cG9ydE1ldGFUYWdXaWR0aCAhPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50
czo6VmFsdWVEZXZpY2VXaWR0aCkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIC8vIEF0IHRo
aXMgcG9pbnQsIHdlIGhhdmUgYSBwYWdlIHRoYXQgYXNrZWQgZm9yIHdpZHRoID0gZGV2aWNlLXdp
ZHRoLiBIb3dldmVyLAorICAgIC8vIGlmIHRoZSBjb250ZW50J3Mgd2lkdGggYW5kIGhlaWdodCB3
ZXJlIGxhcmdlLCB3ZSBtaWdodCBoYXZlIGhhZCB0byBzaHJpbmsgaXQuCisgICAgLy8gV2UnbGwg
ZW5hYmxlIGRvdWJsZSB0YXAgem9vbSB3aGVuZXZlciB3ZSdyZSBub3QgYXQgdGhlIGFjdHVhbCBp
bml0aWFsIHNjYWxlLgorICAgIHJldHVybiAhYXJlRXNzZW50aWFsbHlFcXVhbEFzRmxvYXQoY29u
dGVudFpvb21TY2FsZShzZWxmKSwgX2luaXRpYWxTY2FsZUZhY3Rvcik7Cit9CisKKy0gKEJPT0wp
X3N0eWx1c1RhcEdlc3R1cmVTaG91bGRDcmVhdGVFZGl0YWJsZUltYWdlCit7CisgICAgcmV0dXJu
IFtfY29uZmlndXJhdGlvbiBfZWRpdGFibGVJbWFnZXNFbmFibGVkXTsKK30KKworI3ByYWdtYSBt
YXJrIFVJU2Nyb2xsVmlld0RlbGVnYXRlCisKKy0gKEJPT0wpdXNlc1N0YW5kYXJkQ29udGVudFZp
ZXcKK3sKKyAgICByZXR1cm4gIV9jdXN0b21Db250ZW50VmlldyAmJiAhX3Bhc3N3b3JkVmlldzsK
K30KKworLSAoQ0dTaXplKXNjcm9sbFZpZXc6KFVJU2Nyb2xsVmlldyopc2Nyb2xsVmlldyBjb250
ZW50U2l6ZUZvclpvb21TY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoUHJvcG9zZWRTaXplOihDR1Np
emUpcHJvcG9zZWRTaXplCit7CisgICAgcmV0dXJuIHJvdW5kU2Nyb2xsVmlld0NvbnRlbnRTaXpl
KCpfcGFnZSwgcHJvcG9zZWRTaXplKTsKK30KKworLSAoVUlWaWV3ICopdmlld0Zvclpvb21pbmdJ
blNjcm9sbFZpZXc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBBU1NFUlQoX3Nj
cm9sbFZpZXcgPT0gc2Nyb2xsVmlldyk7CisgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZW50
VmlldzsKK30KKworLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luWm9vbWluZzooVUlTY3JvbGxW
aWV3ICopc2Nyb2xsVmlldyB3aXRoVmlldzooVUlWaWV3ICopdmlldworeworICAgIGlmICghW3Nl
bGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIGlmIChbX2N1c3RvbUNvbnRl
bnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViX3Njcm9sbFZpZXdXaWxsQmVn
aW5ab29taW5nOndpdGhWaWV3OildKQorICAgICAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3
ZWJfc2Nyb2xsVmlld1dpbGxCZWdpblpvb21pbmc6c2Nyb2xsVmlldyB3aXRoVmlldzp2aWV3XTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzY3JvbGxWaWV3LnBpbmNoR2VzdHVy
ZVJlY29nbml6ZXIuc3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4pIHsKKyAg
ICAgICAgX3BhZ2UtPndpbGxTdGFydFVzZXJUcmlnZ2VyZWRab29taW5nKCk7CisgICAgICAgIFtf
Y29udGVudFZpZXcgc2Nyb2xsVmlld1dpbGxTdGFydFBhbk9yUGluY2hHZXN0dXJlXTsKKyAgICB9
CisgICAgW19jb250ZW50VmlldyB3aWxsU3RhcnRab29tT3JTY3JvbGxdOworCisjaWYgRU5BQkxF
KFBPSU5URVJfRVZFTlRTKQorICAgIFtfY29udGVudFZpZXcgY2FuY2VsUG9pbnRlcnNGb3JHZXN0
dXJlUmVjb2duaXplcjpzY3JvbGxWaWV3LnBpbmNoR2VzdHVyZVJlY29nbml6ZXJdOworI2VuZGlm
Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3Cit7CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxWaWV3LnBhbkdlc3R1cmVSZWNvZ25p
emVyLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuKQorICAgICAgICBbX2Nv
bnRlbnRWaWV3IHNjcm9sbFZpZXdXaWxsU3RhcnRQYW5PclBpbmNoR2VzdHVyZV07CisKKyAgICBb
X2NvbnRlbnRWaWV3IHdpbGxTdGFydFpvb21PclNjcm9sbF07CisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICAvLyBGSVhNRTogV2Ugd2ls
bCB3YW50IHRvIGRldGVjdCB3aGV0aGVyIHNuYXBwaW5nIHdpbGwgb2NjdXIgYmVmb3JlIGJlZ2lu
bmluZyB0byBkcmFnLiBTZWUgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMYXllclRyZWUuCisgICAg
V2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KiBjb29yZGluYXRvciA9IF9w
YWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7CisgICAgQVNTRVJUKHNjcm9sbFZpZXcg
PT0gX3Njcm9sbFZpZXcuZ2V0KCkpOworICAgIENHRmxvYXQgc2Nyb2xsRGVjZWxlcmF0aW9uRmFj
dG9yID0gKGNvb3JkaW5hdG9yICYmIGNvb3JkaW5hdG9yLT5zaG91bGRTZXRTY3JvbGxWaWV3RGVj
ZWxlcmF0aW9uUmF0ZUZhc3QoKSkgPyBVSVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6
IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVOb3JtYWw7CisgICAgc2Nyb2xsVmlldy5ob3Jp
em9udGFsU2Nyb2xsRGVjZWxlcmF0aW9uRmFjdG9yID0gc2Nyb2xsRGVjZWxlcmF0aW9uRmFjdG9y
OworICAgIHNjcm9sbFZpZXcudmVydGljYWxTY3JvbGxEZWNlbGVyYXRpb25GYWN0b3IgPSBzY3Jv
bGxEZWNlbGVyYXRpb25GYWN0b3I7CisjZW5kaWYKK30KKworLSAodm9pZClfZGlkRmluaXNoU2Ny
b2xsaW5nCit7CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCisgICAg
ICAgIHJldHVybjsKKworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0
ZV07CisgICAgW19jb250ZW50VmlldyBkaWRGaW5pc2hTY3JvbGxpbmddOworfQorCistICh2b2lk
KXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0
aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENH
UG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0Cit7CisgICAgLy8gV29yayBhcm91bmQgPHJkYXI6
Ly9wcm9ibGVtLzE2Mzc0NzUzPiBieSBhdm9pZGluZyBkZWNlbGVyYXRpb24gd2hpbGUKKyAgICAv
LyB6b29taW5nLiBXZSdsbCBhbmltYXRlIHRvIHRoZSByaWdodCBwbGFjZSBvbmNlIHRoZSB6b29t
IGZpbmlzaGVzLgorICAgIGlmIChbc2Nyb2xsVmlldyBpc1pvb21pbmddKQorICAgICAgICAqdGFy
Z2V0Q29udGVudE9mZnNldCA9IFtzY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOworI2lmIEVOQUJM
RShQT0lOVEVSX0VWRU5UUykKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFtfY29udGVudFZpZXcg
cHJldmVudHNQYW5uaW5nSW5YQXhpc10pCisgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0
LT54ID0gc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0Lng7CisgICAgICAgIGlmIChbX2NvbnRlbnRW
aWV3IHByZXZlbnRzUGFubmluZ0luWUF4aXNdKQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9m
ZnNldC0+eSA9IHNjcm9sbFZpZXcuY29udGVudE9mZnNldC55OworICAgIH0KKyNlbmRpZgorI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAg
aWYgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSogY29vcmRpbmF0b3Ig
PSBfcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBIZXJlLCBJJ20gZmluZGluZyB0aGUgbWF4aW11bSBob3Jpem9udGFsL3ZlcnRpY2FsIHNjcm9s
bCBvZmZzZXRzLiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLgorICAg
ICAgICBDR1NpemUgbWF4U2Nyb2xsT2Zmc2V0cyA9IENHU2l6ZU1ha2Uoc2Nyb2xsVmlldy5jb250
ZW50U2l6ZS53aWR0aCAtIHNjcm9sbFZpZXcuYm91bmRzLnNpemUud2lkdGgsIHNjcm9sbFZpZXcu
Y29udGVudFNpemUuaGVpZ2h0IC0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZS5oZWlnaHQpOworCisg
ICAgICAgIFVJRWRnZUluc2V0cyBvYnNjdXJlZEluc2V0OworCisgICAgICAgIGlkPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+IHVpRGVsZWdhdGVQcml2YXRlID0gc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+Pihbc2VsZiBVSURlbGVnYXRlXSk7CisgICAgICAgIGlmIChbdWlEZWxlZ2F0
ZVByaXZhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpmaW5hbE9ic2N1
cmVkSW5zZXRzRm9yU2Nyb2xsVmlldzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDop
XSkKKyAgICAgICAgICAgIG9ic2N1cmVkSW5zZXQgPSBbdWlEZWxlZ2F0ZVByaXZhdGUgX3dlYlZp
ZXc6c2VsZiBmaW5hbE9ic2N1cmVkSW5zZXRzRm9yU2Nyb2xsVmlldzpzY3JvbGxWaWV3IHdpdGhW
ZWxvY2l0eTp2ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0OnRhcmdldENvbnRlbnRPZmZzZXRd
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvYnNjdXJlZEluc2V0ID0gW3NlbGYgX2NvbXB1
dGVkT2JzY3VyZWRJbnNldF07CisKKyAgICAgICAgQ0dSZWN0IHVub2JzY3VyZWRSZWN0ID0gVUlF
ZGdlSW5zZXRzSW5zZXRSZWN0KHNlbGYuYm91bmRzLCBvYnNjdXJlZEluc2V0KTsKKworICAgICAg
ICBjb29yZGluYXRvci0+YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKG1heFNj
cm9sbE9mZnNldHMsIHZlbG9jaXR5LCB1bm9ic2N1cmVkUmVjdC5vcmlnaW4ueSwgdGFyZ2V0Q29u
dGVudE9mZnNldCk7CisgICAgfQorI2VuZGlmCit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZEVu
ZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpbGxEZWNlbGVyYXRlOihCT09M
KWRlY2VsZXJhdGUKK3sKKyAgICAvLyBJZiB3ZSdyZSBkZWNlbGVyYXRpbmcsIHNjcm9sbCBvZmZz
ZXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4gc2Nyb2xsVmlld0RpZEZpbmlzaERlY2VsZXJhdGluZzog
aXMgY2FsbGVkLgorICAgIGlmICghZGVjZWxlcmF0ZSkKKyAgICAgICAgW3NlbGYgX2RpZEZpbmlz
aFNjcm9sbGluZ107Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJhdGluZzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIFtzZWxmIF9kaWRGaW5pc2hTY3JvbGxp
bmddOworfQorCistICh2b2lkKXNjcm9sbFZpZXdEaWRTY3JvbGxUb1RvcDooVUlTY3JvbGxWaWV3
ICopc2Nyb2xsVmlldworeworICAgIFtzZWxmIF9kaWRGaW5pc2hTY3JvbGxpbmddOworfQorCisj
aWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorLSAoQ0dQb2ludClfc2Nyb2xsVmlldzooVUlTY3Jv
bGxWaWV3ICopc2Nyb2xsVmlldyBhZGp1c3RlZE9mZnNldEZvck9mZnNldDooQ0dQb2ludClvZmZz
ZXQgdHJhbnNsYXRpb246KENHUG9pbnQpdHJhbnNsYXRpb24gc3RhcnRQb2ludDooQ0dQb2ludClz
dGFydCBsb2NhdGlvbkluVmlldzooQ0dQb2ludClsb2NhdGlvbkluVmlldyBob3Jpem9udGFsVmVs
b2NpdHk6KGlub3V0IGRvdWJsZSAqKWh2IHZlcnRpY2FsVmVsb2NpdHk6KGlub3V0IGRvdWJsZSAq
KXZ2Cit7CisgICAgaWYgKCFbX2NvbnRlbnRWaWV3IHByZXZlbnRzUGFubmluZ0luWEF4aXNdICYm
ICFbX2NvbnRlbnRWaWV3IHByZXZlbnRzUGFubmluZ0luWUF4aXNdKSB7CisgICAgICAgIFtfY29u
dGVudFZpZXcgY2FuY2VsUG9pbnRlcnNGb3JHZXN0dXJlUmVjb2duaXplcjpzY3JvbGxWaWV3LnBh
bkdlc3R1cmVSZWNvZ25pemVyXTsKKyAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICB9CisKKyAg
ICBDR1BvaW50IGFkanVzdGVkQ29udGVudE9mZnNldCA9IENHUG9pbnRNYWtlKG9mZnNldC54LCBv
ZmZzZXQueSk7CisgICAgaWYgKFtfY29udGVudFZpZXcgcHJldmVudHNQYW5uaW5nSW5YQXhpc10p
CisgICAgICAgIGFkanVzdGVkQ29udGVudE9mZnNldC54ID0gc3RhcnQueDsKKyAgICBpZiAoW19j
b250ZW50VmlldyBwcmV2ZW50c1Bhbm5pbmdJbllBeGlzXSkKKyAgICAgICAgYWRqdXN0ZWRDb250
ZW50T2Zmc2V0LnkgPSBzdGFydC55OworCisgICAgaWYgKCghW19jb250ZW50VmlldyBwcmV2ZW50
c1Bhbm5pbmdJblhBeGlzXSAmJiBhZGp1c3RlZENvbnRlbnRPZmZzZXQueCAhPSBzdGFydC54KQor
ICAgICAgICB8fCAoIVtfY29udGVudFZpZXcgcHJldmVudHNQYW5uaW5nSW5ZQXhpc10gJiYgYWRq
dXN0ZWRDb250ZW50T2Zmc2V0LnkgIT0gc3RhcnQueSkpIHsKKyAgICAgICAgW19jb250ZW50Vmll
dyBjYW5jZWxQb2ludGVyc0Zvckdlc3R1cmVSZWNvZ25pemVyOnNjcm9sbFZpZXcucGFuR2VzdHVy
ZVJlY29nbml6ZXJdOworICAgIH0KKworICAgIHJldHVybiBhZGp1c3RlZENvbnRlbnRPZmZzZXQ7
Cit9CisjZW5kaWYKKworLSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3Cit7CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10g
JiYgW19jdXN0b21Db250ZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYl9z
Y3JvbGxWaWV3RGlkU2Nyb2xsOildKQorICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9z
Y3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3XTsKKworICAgIFtz
ZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3OnNj
cm9sbFZpZXddOworCisgICAgaWYgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVy
Zm9ybWFuY2VEYXRhKiBzY3JvbGxQZXJmRGF0YSA9IF9wYWdlLT5zY3JvbGxpbmdQZXJmb3JtYW5j
ZURhdGEoKSkKKyAgICAgICAgc2Nyb2xsUGVyZkRhdGEtPmRpZFNjcm9sbChbc2VsZiB2aXNpYmxl
UmVjdEluVmlld0Nvb3JkaW5hdGVzXSk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZFpvb206
KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3XSAmJiBbX2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViX3Njcm9sbFZpZXdEaWRab29tOildKQorICAgICAgICBbX2N1c3RvbUNvbnRl
bnRWaWV3IHdlYl9zY3JvbGxWaWV3RGlkWm9vbTpzY3JvbGxWaWV3XTsKKworICAgIFtzZWxmIF91
cGRhdGVTY3JvbGxWaWV3QmFja2dyb3VuZF07CisgICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlQWZ0ZXJTY3JvbGxJblZpZXc6c2Nyb2xsVmlld107Cit9CisKKy0gKHZv
aWQpc2Nyb2xsVmlld0RpZEVuZFpvb21pbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0
aFZpZXc6KFVJVmlldyAqKXZpZXcgYXRTY2FsZTooQ0dGbG9hdClzY2FsZQoreworICAgIGlmICgh
W3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddICYmIFtfY3VzdG9tQ29udGVudFZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJfc2Nyb2xsVmlld0RpZEVuZFpvb21pbmc6d2l0
aFZpZXc6YXRTY2FsZTopXSkKKyAgICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfc2Nyb2xs
Vmlld0RpZEVuZFpvb21pbmc6c2Nyb2xsVmlldyB3aXRoVmlldzp2aWV3IGF0U2NhbGU6c2NhbGVd
OworCisgICAgQVNTRVJUKHNjcm9sbFZpZXcgPT0gX3Njcm9sbFZpZXcpOworICAgIC8vIEZJWE1F
OiByZW1vdmUgd2hlbiByZGFyOi8vcHJvYmxlbS8zNjA2NTQ5NSBpcyBmaXhlZC4KKyAgICAvLyBX
aGVuIHJvdGF0aW5nIHdpdGggdHdvIGZpbmdlcnMgZG93biwgVUlTY3JvbGxWaWV3IGNhbiBzZXQg
YSBib2d1cyBjb250ZW50IHZpZXcgcG9zaXRpb24uCisgICAgLy8gIkNlbnRlciIgaXMgdG9wIGxl
ZnQgYmVjYXVzZSB3ZSBzZXQgdGhlIGFuY2hvclBvaW50IHRvIDAsMC4KKyAgICBbX2NvbnRlbnRW
aWV3IHNldENlbnRlcjpzZWxmLmJvdW5kcy5vcmlnaW5dOworCisgICAgW3NlbGYgX3NjaGVkdWxl
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJTY3JvbGxJblZpZXc6c2Nyb2xsVmlld107Cisg
ICAgW19jb250ZW50VmlldyBkaWRab29tVG9TY2FsZTpzY2FsZV07Cit9CisKKy0gKHZvaWQpc2Ny
b2xsVmlld0RpZEVuZFNjcm9sbGluZ0FuaW1hdGlvbjooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmll
dworeworICAgIFtzZWxmIF9kaWRGaW5pc2hTY3JvbGxpbmddOworfQorCistICh2b2lkKV9zY3Jv
bGxWaWV3RGlkSW50ZXJydXB0RGVjZWxlcmF0aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3
Cit7CisgICAgaWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pCisgICAgICAgIHJl
dHVybjsKKworICAgIFtfY29udGVudFZpZXcgZGlkSW50ZXJydXB0U2Nyb2xsaW5nXTsKKyAgICBb
c2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNjcm9sbEluVmlldzpz
Y3JvbGxWaWV3XTsKK30KKworI3ByYWdtYSBtYXJrIGVuZCBVSVNjcm9sbFZpZXdEZWxlZ2F0ZQor
CistIChDR1JlY3QpX3Zpc2libGVSZWN0SW5FbmNsb3NpbmdWaWV3OihVSVZpZXcgKillbmNsb3Np
bmdWaWV3Cit7CisgICAgaWYgKCFlbmNsb3NpbmdWaWV3KQorICAgICAgICByZXR1cm4gc2VsZi5i
b3VuZHM7CisKKyAgICBDR1JlY3QgZXhwb3NlZFJlY3QgPSBbZW5jbG9zaW5nVmlldyBjb252ZXJ0
UmVjdDplbmNsb3NpbmdWaWV3LmJvdW5kcyB0b1ZpZXc6c2VsZl07CisgICAgcmV0dXJuIENHUmVj
dEludGVyc2VjdHNSZWN0KGV4cG9zZWRSZWN0LCBzZWxmLmJvdW5kcykgPyBDR1JlY3RJbnRlcnNl
Y3Rpb24oZXhwb3NlZFJlY3QsIHNlbGYuYm91bmRzKSA6IENHUmVjdFplcm87Cit9CisKKy0gKENH
UmVjdClfdmlzaWJsZUNvbnRlbnRSZWN0Cit7CisgICAgaWYgKF9mcm96ZW5WaXNpYmxlQ29udGVu
dFJlY3QpCisgICAgICAgIHJldHVybiBfZnJvemVuVmlzaWJsZUNvbnRlbnRSZWN0LnZhbHVlKCk7
CisKKyAgICBDR1JlY3QgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNv
bnZlcnRSZWN0OnNlbGYuYm91bmRzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOworCisgICAg
aWYgKFVJVmlldyAqZW5jbG9zaW5nVmlldyA9IFtzZWxmIF9lbmNsb3NpbmdWaWV3Rm9yRXhwb3Nl
ZFJlY3RDb21wdXRhdGlvbl0pIHsKKyAgICAgICAgQ0dSZWN0IHZpZXdWaXNpYmxlUmVjdCA9IFtz
ZWxmIF92aXNpYmxlUmVjdEluRW5jbG9zaW5nVmlldzplbmNsb3NpbmdWaWV3XTsKKyAgICAgICAg
Q0dSZWN0IHZpZXdWaXNpYmxlQ29udGVudFJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDp2aWV3Vmlz
aWJsZVJlY3QgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgICAgIHZpc2libGVSZWN0
SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBDR1JlY3RJbnRlcnNlY3Rpb24odmlzaWJsZVJlY3RJbkNv
bnRlbnRDb29yZGluYXRlcywgdmlld1Zpc2libGVDb250ZW50UmVjdCk7CisgICAgfQorCisgICAg
cmV0dXJuIHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXM7Cit9CisKKy8vIENhbGxlZCB3
aGVuIHNvbWUgYW5jZXN0b3IgVUlTY3JvbGxWaWV3IHNjcm9sbHMuCistICh2b2lkKV9kaWRTY3Jv
bGwKK3sKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNj
cm9sbEluVmlldzpbc2VsZiBfc2Nyb2xsZXJdXTsKKworICAgIGNvbnN0IE5TVGltZUludGVydmFs
IFNjcm9sbGluZ0VuZGVkVGltZXJJbnRlcnZhbCA9IDAuMDMyOworICAgIGlmICghX2VuY2xvc2lu
Z1Njcm9sbFZpZXdTY3JvbGxUaW1lcikgeworICAgICAgICBfZW5jbG9zaW5nU2Nyb2xsVmlld1Nj
cm9sbFRpbWVyID0gYWRvcHROUyhbW05TVGltZXIgYWxsb2NdIGluaXRXaXRoRmlyZURhdGU6W05T
RGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlTm93OlNjcm9sbGluZ0VuZGVkVGltZXJJbnRl
cnZhbF0KKyAgICAgICAgICAgIGludGVydmFsOjAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKF9lbmNsb3NpbmdTY3JvbGxlclNjcm9sbGluZ0VuZGVkOikgdXNlckluZm86bmlsIHJlcGVh
dHM6WUVTXSk7CisgICAgICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBhZGRUaW1lcjpfZW5j
bG9zaW5nU2Nyb2xsVmlld1Njcm9sbFRpbWVyLmdldCgpIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9v
cE1vZGVdOworICAgIH0KKyAgICBfZGlkU2Nyb2xsU2luY2VMYXN0VGltZXJGaXJlID0gWUVTOwor
fQorCistICh2b2lkKV9lbmNsb3NpbmdTY3JvbGxlclNjcm9sbGluZ0VuZGVkOihOU1RpbWVyICop
dGltZXIKK3sKKyAgICBpZiAoX2RpZFNjcm9sbFNpbmNlTGFzdFRpbWVyRmlyZSkgeworICAgICAg
ICBfZGlkU2Nyb2xsU2luY2VMYXN0VGltZXJGaXJlID0gTk87CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworICAg
IFtfZW5jbG9zaW5nU2Nyb2xsVmlld1Njcm9sbFRpbWVyIGludmFsaWRhdGVdOworICAgIF9lbmNs
b3NpbmdTY3JvbGxWaWV3U2Nyb2xsVGltZXIgPSBuaWw7Cit9CisKKy0gKFVJRWRnZUluc2V0cylf
c2Nyb2xsVmlld1N5c3RlbUNvbnRlbnRJbnNldAoreworICAgIC8vIEl0J3Mgbm90IHNhZmUgdG8g
YWNjZXNzIHRoZSBzY3JvbGwgdmlldydzIHNhZmVBcmVhSW5zZXRzIG9yIF9zeXN0ZW1Db250ZW50
SW5zZXQgZnJvbQorICAgIC8vIGluc2lkZSBvdXIgbGF5b3V0U3Vidmlld3MgaW1wbGVtZW50YXRp
b24sIGJlY2F1c2UgdGhleSBhcmVuJ3QgdXBkYXRlZCB1bnRpbCBhZnRlcndhcmRzLgorICAgIC8v
IEluc3RlYWQsIGRlcGVuZCBvbiB0aGUgZmFjdCB0aGF0IHRoZSBVSVNjcm9sbFZpZXcgYW5kIFdL
V2ViVmlldyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZQorICAgIC8vIHNwYWNlLCBhbmQgbWFw
IHRoZSBXS1dlYlZpZXcncyBvd24gaW5zZXRzIGludG8gdGhlIHNjcm9sbCB2aWV3IG1hbnVhbGx5
LgorICAgIHJldHVybiBVSUVkZ2VJbnNldHNBZGQoW19zY3JvbGxWaWV3IF9jb250ZW50U2Nyb2xs
SW5zZXRdLCBzZWxmLnNhZmVBcmVhSW5zZXRzLCBbX3Njcm9sbFZpZXcgX2VkZ2VzQXBwbHlpbmdT
YWZlQXJlYUluc2V0c1RvQ29udGVudEluc2V0XSk7Cit9CisKKy0gKFdlYkNvcmU6OkZsb2F0U2l6
ZSlhY3RpdmVWaWV3TGF5b3V0U2l6ZTooY29uc3QgQ0dSZWN0Jilib3VuZHMKK3sKKyAgICBpZiAo
X3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFNp
emUoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUudmFsdWUoKSk7CisKKyNpZiBfX0lQSE9ORV9PU19W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRT
aXplKFVJRWRnZUluc2V0c0luc2V0UmVjdChDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy5zaXplLndp
ZHRoLCBib3VuZHMuc2l6ZS5oZWlnaHQpLCBzZWxmLl9zY3JvbGxWaWV3U3lzdGVtQ29udGVudElu
c2V0KS5zaXplKTsKKyNlbHNlCisgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0U2l6ZSB7IGJvdW5k
cy5zaXplIH07CisjZW5kaWYKK30KKworLSAodm9pZClfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6
ZTooV2ViQ29yZTo6RmxvYXRTaXplKXZpZXdMYXlvdXRTaXplCit7CisgICAgaWYgKF9sYXN0U2Vu
dFZpZXdMYXlvdXRTaXplICYmIENHU2l6ZUVxdWFsVG9TaXplKF9sYXN0U2VudFZpZXdMYXlvdXRT
aXplLnZhbHVlKCksIHZpZXdMYXlvdXRTaXplKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9H
X1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8ICItW1dLV2ViVmlldyAiIDw8IF9w
YWdlLT5pZGVudGlmaWVyKCkgPDwgIiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpdICIgPDwg
dmlld0xheW91dFNpemUgPDwgIiBjb250ZW50Wm9vbVNjYWxlICIgPDwgY29udGVudFpvb21TY2Fs
ZShzZWxmKSk7CisgICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRT
aXplKHZpZXdMYXlvdXRTaXplLCBfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFjdG9yKCksIF9wYWdl
LT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKSk7CisgICAgX2xhc3RTZW50Vmlld0xheW91
dFNpemUgPSB2aWV3TGF5b3V0U2l6ZTsKK30KKworLSAodm9pZClfZGlzcGF0Y2hTZXRNYXhpbXVt
VW5vYnNjdXJlZFNpemU6KFdlYkNvcmU6OkZsb2F0U2l6ZSltYXhpbXVtVW5vYnNjdXJlZFNpemUK
K3sKKyAgICBpZiAoX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplICYmIENHU2l6ZUVxdWFs
VG9TaXplKF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZS52YWx1ZSgpLCBtYXhpbXVtVW5v
YnNjdXJlZFNpemUpKQorICAgICAgICByZXR1cm47CisKKyAgICBfcGFnZS0+c2V0TWF4aW11bVVu
b2JzY3VyZWRTaXplKG1heGltdW1Vbm9ic2N1cmVkU2l6ZSk7CisgICAgX2xhc3RTZW50TWF4aW11
bVVub2JzY3VyZWRTaXplID0gbWF4aW11bVVub2JzY3VyZWRTaXplOworfQorCistICh2b2lkKV9k
aXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOihpbnQzMl90KWRldmljZU9yaWVudGF0aW9uCit7
CisgICAgaWYgKF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uICYmIF9sYXN0U2VudERldmljZU9y
aWVudGF0aW9uLnZhbHVlKCkgPT0gZGV2aWNlT3JpZW50YXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIF9wYWdlLT5zZXREZXZpY2VPcmllbnRhdGlvbihkZXZpY2VPcmllbnRhdGlvbik7Cisg
ICAgX2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gPSBkZXZpY2VPcmllbnRhdGlvbjsKK30KKwor
LSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKK3sKKyAgICBDR1JlY3QgYm91bmRzID0gc2Vs
Zi5ib3VuZHM7CisgICAgW19zY3JvbGxWaWV3IHNldEZyYW1lOmJvdW5kc107CisKKyAgICBpZiAo
X2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlOjpOb3RSZXNpemluZykgeworICAgICAgICBpZiAoIV92aWV3TGF5b3V0U2l6ZU92ZXJy
aWRlKQorICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0Vmlld0xheW91dFNpemU6W3NlbGYg
YWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdXTsKKyAgICAgICAgaWYgKCFfbWF4aW11
bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpCisgICAgICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRN
YXhpbXVtVW5vYnNjdXJlZFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKGJvdW5kcy5zaXplKV07CisK
KyAgICAgICAgQk9PTCBzaXplQ2hhbmdlZCA9IE5POworICAgICAgICBpZiAoYXV0byBkcmF3aW5n
QXJlYSA9IF9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICAgICAgc2l6ZUNoYW5nZWQgPSBk
cmF3aW5nQXJlYS0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKGJvdW5kcy5zaXplKSk7CisKKyAg
ICAgICAgaWYgKHNpemVDaGFuZ2VkICYgW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKQor
ICAgICAgICAgICAgW19jb250ZW50VmlldyBzZXRTaXplQ2hhbmdlZFNpbmNlTGFzdFZpc2libGVD
b250ZW50UmVjdFVwZGF0ZTpZRVNdOworICAgIH0KKworICAgIFtfY3VzdG9tQ29udGVudFZpZXcg
d2ViX3NldE1pbmltdW1TaXplOmJvdW5kcy5zaXplXTsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCisvLyBVbm9ic2N1cmVkIGNvbnRlbnQgcmVjdCB3
aGVyZSB0aGUgdXNlciBjYW4gaW50ZXJhY3QuIFdoZW4gdGhlIGtleWJvYXJkIGlzIHVwLCB0aGlz
IHNob3VsZCBiZSB0aGUgYXJlYSBhYm92ZSBvciBiZWxvdyB0aGUga2V5Ym9hcmQsIHdoZXJldmVy
IHRoZXJlIGlzIGVub3VnaCBzcGFjZS4KKy0gKENHUmVjdClfY29udGVudFJlY3RGb3JVc2VySW50
ZXJhY3Rpb24KK3sKKyAgICAvLyBGSVhNRTogaGFuZGxlIHNwbGl0IGtleWJvYXJkLgorICAgIFVJ
RWRnZUluc2V0cyBvYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZEluc2V0czsKKyAgICBvYnNjdXJl
ZEluc2V0cy5ib3R0b20gPSBzdGQ6Om1heChfb2JzY3VyZWRJbnNldHMuYm90dG9tLCBfaW5wdXRW
aWV3Qm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICBDR1JlY3QgdW5vYnNjdXJlZFJlY3QgPSBVSUVk
Z2VJbnNldHNJbnNldFJlY3Qoc2VsZi5ib3VuZHMsIG9ic2N1cmVkSW5zZXRzKTsKKyAgICByZXR1
cm4gW3NlbGYgY29udmVydFJlY3Q6dW5vYnNjdXJlZFJlY3QgdG9WaWV3OnNlbGYuX2N1cnJlbnRD
b250ZW50Vmlld107Cit9CisKKy8vIElkZWFsbHkgVUlTY3JvbGxWaWV3IHdvdWxkIGV4cG9zZSB0
aGlzIGZvciB1czogPHJkYXI6Ly9wcm9ibGVtLzIxMzk0NTY3Pi4KKy0gKEJPT0wpX3Njcm9sbFZp
ZXdJc1J1YmJlckJhbmRpbmcKK3sKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IF9wYWdl
LT5kZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgQ0dQb2ludCBjb250ZW50T2Zmc2V0ID0gW19z
Y3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOworICAgIENHUG9pbnQgYm91bmRlZE9mZnNldCA9IGNv
bnRlbnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxWaWV3LmdldCgpLCBjb250ZW50
T2Zmc2V0KTsKKyAgICByZXR1cm4gIXBvaW50c0VxdWFsSW5EZXZpY2VQaXhlbHMoY29udGVudE9m
ZnNldCwgYm91bmRlZE9mZnNldCwgZGV2aWNlU2NhbGVGYWN0b3IpOworfQorCisjaWYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwCistICh2b2lkKXNhZmVBcmVhSW5z
ZXRzRGlkQ2hhbmdlCit7CisgICAgW3N1cGVyIHNhZmVBcmVhSW5zZXRzRGlkQ2hhbmdlXTsKKwor
ICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Cit9CisjZW5kaWYK
KworLSAodm9pZClfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUKK3sKKyAgICAvLyBG
b3IgdmlzaWJsZSByZWN0IHVwZGF0ZXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIFVJ
U2Nyb2xsVmlldywganVzdCBjb25zaWRlciBvdXIgb3duIHNjcm9sbGVyLgorICAgIFtzZWxmIF9z
Y2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZUFmdGVyU2Nyb2xsSW5WaWV3Ol9zY3JvbGxW
aWV3LmdldCgpXTsKK30KKworLSAoQk9PTClfc2Nyb2xsVmlld0lzSW5TdGFibGVTdGF0ZTooVUlT
Y3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIEJPT0wgaXNTdGFibGVTdGF0ZSA9ICEoW3Nj
cm9sbFZpZXcgaXNEcmFnZ2luZ10gfHwgW3Njcm9sbFZpZXcgaXNEZWNlbGVyYXRpbmddIHx8IFtz
Y3JvbGxWaWV3IGlzWm9vbWluZ10gfHwgW3Njcm9sbFZpZXcgX2lzQW5pbWF0aW5nWm9vbV0gfHwg
W3Njcm9sbFZpZXcgX2lzU2Nyb2xsaW5nVG9Ub3BdKTsKKworICAgIGlmIChpc1N0YWJsZVN0YXRl
ICYmIHNjcm9sbFZpZXcgPT0gX3Njcm9sbFZpZXcuZ2V0KCkpCisgICAgICAgIGlzU3RhYmxlU3Rh
dGUgPSAhX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHk7CisKKyAgICBpZiAo
aXNTdGFibGVTdGF0ZSAmJiBzY3JvbGxWaWV3ID09IF9zY3JvbGxWaWV3LmdldCgpKQorICAgICAg
ICBpc1N0YWJsZVN0YXRlID0gIVtzZWxmIF9zY3JvbGxWaWV3SXNSdWJiZXJCYW5kaW5nXTsKKwor
ICAgIGlmIChpc1N0YWJsZVN0YXRlKQorICAgICAgICBpc1N0YWJsZVN0YXRlID0gIXNjcm9sbFZp
ZXcuX2lzSW50ZXJydXB0aW5nRGVjZWxlcmF0aW9uOworCisgICAgaWYgKE5TTnVtYmVyICpzdGFi
bGVPdmVycmlkZSA9IHNlbGYuX3N0YWJsZVN0YXRlT3ZlcnJpZGUpCisgICAgICAgIGlzU3RhYmxl
U3RhdGUgPSBzdGFibGVPdmVycmlkZS5ib29sVmFsdWU7CisKKyAgICByZXR1cm4gaXNTdGFibGVT
dGF0ZTsKK30KKworLSAodm9pZClfYWRkVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0UHJlQ29tbWl0
SGFuZGxlcgoreworICAgIGlmIChfaGFzRW50ZXJlZERlYWxsb2MpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRkFVTFQoVmlld1N0YXRlLCAiLVtXS1dlYlZpZXcgJXAgX2FkZFVwZGF0ZVZpc2libGVD
b250ZW50UmVjdFByZUNvbW1pdEhhbmRsZXJdOiBBdHRlbXB0ZWQgdG8gYWRkIHByZS1jb21taXQg
aGFuZGxlciB1bmRlciAtZGVhbGxvYy4gQmFpbGluZy4iLCBzZWxmKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gcmV0YWluZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpOworICAg
IFtDQVRyYW5zYWN0aW9uIGFkZENvbW1pdEhhbmRsZXI6W3JldGFpbmVkU2VsZl0geworICAgICAg
ICBXS1dlYlZpZXcgKndlYlZpZXcgPSByZXRhaW5lZFNlbGYuZ2V0KCk7CisgICAgICAgIGlmICgh
W3dlYlZpZXcgX2lzVmFsaWRdKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRih3ZWJWaWV3
Ll9wYWdlICYmIHdlYlZpZXcuX3BhZ2UtPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBWaWV3
U3RhdGUsICJJbiBDQVRyYW5zYWN0aW9uIHByZUNvbW1pdEhhbmRsZXIsIFdLV2ViVmlldyAlcCBp
cyBpbnZhbGlkIiwgd2ViVmlldyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBAdHJ5IHsKKyAgICAgICAgICAgIFt3ZWJWaWV3IF91cGRhdGVWaXNpYmxlQ29udGVu
dFJlY3RzXTsKKyAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKHdlYlZpZXcuX3BhZ2UgJiYgd2ViVmlldy5fcGFnZS0+
aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIFZpZXdTdGF0ZSwgIkluIENBVHJhbnNhY3Rpb24g
cHJlQ29tbWl0SGFuZGxlciwgLVtXS1dlYlZpZXcgJXAgX3VwZGF0ZVZpc2libGVDb250ZW50UmVj
dHNdIHRocmV3IGFuIGV4Y2VwdGlvbiIsIHdlYlZpZXcpOworICAgICAgICB9CisgICAgICAgIHdl
YlZpZXctPl9oYXNTY2hlZHVsZWRWaXNpYmxlUmVjdFVwZGF0ZSA9IE5POworICAgIH0gZm9yUGhh
c2U6a0NBVHJhbnNhY3Rpb25QaGFzZVByZUNvbW1pdF07Cit9CisKKy0gKHZvaWQpX3NjaGVkdWxl
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQWZ0ZXJTY3JvbGxJblZpZXc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcKK3sKKyAgICBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlU2NoZWR1bGVkRnJv
bVNjcm9sbFZpZXdJblN0YWJsZVN0YXRlID0gW3NlbGYgX3Njcm9sbFZpZXdJc0luU3RhYmxlU3Rh
dGU6c2Nyb2xsVmlld107CisKKyAgICBpZiAoX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRl
KSB7CisgICAgICAgIGF1dG8gdGltZU5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAg
ICBpZiAoKHRpbWVOb3cgLSBfdGltZU9mUmVxdWVzdEZvclZpc2libGVDb250ZW50UmVjdFVwZGF0
ZSkgPiBkZWxheUJlZm9yZU5vVmlzaWJsZUNvbnRlbnRzUmVjdHNMb2dnaW5nKSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCItW1dLV2ViVmlldyAlcCBfc2NoZWR1bGVWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVBZnRlclNjcm9sbEluVmlld106IF9oYXNTY2hlZHVsZWRWaXNp
YmxlUmVjdFVwZGF0ZSBpcyB0cnVlIGJ1dCBoYXZlbid0IHVwZGF0ZWQgdmlzaWJsZSBjb250ZW50
IHJlY3RzIGZvciAlLjJmcyAobGFzdCB1cGRhdGUgd2FzICUuMmZzIGFnbykgLSB2YWxpZCAlZCIs
CisgICAgICAgICAgICAgICAgc2VsZiwgKHRpbWVOb3cgLSBfdGltZU9mUmVxdWVzdEZvclZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZSkudmFsdWUoKSwgKHRpbWVOb3cgLSBfdGltZU9mTGFzdFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZSkudmFsdWUoKSwgW3NlbGYgX2lzVmFsaWRdKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0
VXBkYXRlID0gWUVTOworICAgIF90aW1lT2ZSZXF1ZXN0Rm9yVmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisKKyAgICBDQVRyYW5zYWN0aW9uUGhhc2UgdHJh
bnNhY3Rpb25QaGFzZSA9IFtDQVRyYW5zYWN0aW9uIGN1cnJlbnRQaGFzZV07CisgICAgaWYgKHRy
YW5zYWN0aW9uUGhhc2UgPT0ga0NBVHJhbnNhY3Rpb25QaGFzZU51bGwgfHwgdHJhbnNhY3Rpb25Q
aGFzZSA9PSBrQ0FUcmFuc2FjdGlvblBoYXNlUHJlTGF5b3V0KSB7CisgICAgICAgIFtzZWxmIF9h
ZGRVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RQcmVDb21taXRIYW5kbGVyXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtyZXRhaW5lZFNlbGYgPSByZXRhaW5QdHIoc2VsZildIHsKKyAgICAgICAgV0tXZWJWaWV3
ICp3ZWJWaWV3ID0gcmV0YWluZWRTZWxmLmdldCgpOworICAgICAgICBpZiAoIVt3ZWJWaWV3IF9p
c1ZhbGlkXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgW3dlYlZpZXcgX2FkZFVwZGF0
ZVZpc2libGVDb250ZW50UmVjdFByZUNvbW1pdEhhbmRsZXJdOworICAgIH0pOworfQorCitzdGF0
aWMgYm9vbCBzY3JvbGxWaWV3Q2FuU2Nyb2xsKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldykKK3sK
KyAgICBpZiAoIXNjcm9sbFZpZXcpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIFVJRWRnZUlu
c2V0cyBjb250ZW50SW5zZXQgPSBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldDsKKyAgICBDR1NpemUg
Y29udGVudFNpemUgPSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplOworICAgIENHU2l6ZSBib3VuZHNT
aXplID0gc2Nyb2xsVmlldy5ib3VuZHMuc2l6ZTsKKworICAgIHJldHVybiAoY29udGVudFNpemUu
d2lkdGggKyBjb250ZW50SW5zZXQubGVmdCArIGNvbnRlbnRJbnNldC5yaWdodCkgPiBib3VuZHNT
aXplLndpZHRoCisgICAgICAgIHx8IChjb250ZW50U2l6ZS5oZWlnaHQgKyBjb250ZW50SW5zZXQu
dG9wICsgY29udGVudEluc2V0LmJvdHRvbSkgPiBib3VuZHNTaXplLmhlaWdodDsKK30KKworLSAo
Q0dSZWN0KV9jb250ZW50Qm91bmRzRXh0ZW5kZWRGb3JSdWJiZXJiYW5kaW5nV2l0aFNjYWxlOihD
R0Zsb2F0KXNjYWxlRmFjdG9yCit7CisgICAgQ0dQb2ludCBjb250ZW50T2Zmc2V0ID0gW19zY3Jv
bGxWaWV3IGNvbnRlbnRPZmZzZXRdOworICAgIENHUG9pbnQgYm91bmRlZE9mZnNldCA9IGNvbnRl
bnRPZmZzZXRCb3VuZGVkSW5WYWxpZFJhbmdlKF9zY3JvbGxWaWV3LmdldCgpLCBjb250ZW50T2Zm
c2V0KTsKKworICAgIENHRmxvYXQgaG9yaW9udGFsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENv
b3JkaW5hdGVzID0gKGNvbnRlbnRPZmZzZXQueCAtIGJvdW5kZWRPZmZzZXQueCkgLyBzY2FsZUZh
Y3RvcjsKKyAgICBDR0Zsb2F0IHZlcnRpY2FsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENvb3Jk
aW5hdGVzID0gKGNvbnRlbnRPZmZzZXQueSAtIGJvdW5kZWRPZmZzZXQueSkgLyBzY2FsZUZhY3Rv
cjsKKworICAgIENHUmVjdCBleHRlbmRlZEJvdW5kcyA9IFtfY29udGVudFZpZXcgYm91bmRzXTsK
KworICAgIGlmIChob3Jpb250YWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXMg
PCAwKSB7CisgICAgICAgIGV4dGVuZGVkQm91bmRzLm9yaWdpbi54ICs9IGhvcmlvbnRhbFJ1YmJl
cmJhbmRBbW91bnRJbkNvbnRlbnRDb29yZGluYXRlczsKKyAgICAgICAgZXh0ZW5kZWRCb3VuZHMu
c2l6ZS53aWR0aCAtPSBob3Jpb250YWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0
ZXM7CisgICAgfSBlbHNlIGlmIChob3Jpb250YWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29v
cmRpbmF0ZXMgPiAwKQorICAgICAgICBleHRlbmRlZEJvdW5kcy5zaXplLndpZHRoICs9IGhvcmlv
bnRhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29yZGluYXRlczsKKworICAgIGlmICh2ZXJ0
aWNhbFJ1YmJlcmJhbmRBbW91bnRJbkNvbnRlbnRDb29yZGluYXRlcyA8IDApIHsKKyAgICAgICAg
ZXh0ZW5kZWRCb3VuZHMub3JpZ2luLnkgKz0gdmVydGljYWxSdWJiZXJiYW5kQW1vdW50SW5Db250
ZW50Q29vcmRpbmF0ZXM7CisgICAgICAgIGV4dGVuZGVkQm91bmRzLnNpemUuaGVpZ2h0IC09IHZl
cnRpY2FsUnViYmVyYmFuZEFtb3VudEluQ29udGVudENvb3JkaW5hdGVzOworICAgIH0gZWxzZSBp
ZiAodmVydGljYWxSdWJiZXJiYW5kQW1vdW50SW5Db250ZW50Q29vcmRpbmF0ZXMgPiAwKQorICAg
ICAgICBleHRlbmRlZEJvdW5kcy5zaXplLmhlaWdodCArPSB2ZXJ0aWNhbFJ1YmJlcmJhbmRBbW91
bnRJbkNvbnRlbnRDb29yZGluYXRlczsKKworICAgIHJldHVybiBleHRlbmRlZEJvdW5kczsKK30K
KworLSAodm9pZClfdXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cworeworICAgIEJPT0wgaW5TdGFi
bGVTdGF0ZSA9IF92aXNpYmxlQ29udGVudFJlY3RVcGRhdGVTY2hlZHVsZWRGcm9tU2Nyb2xsVmll
d0luU3RhYmxlU3RhdGU7CisKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3
XSkgeworICAgICAgICBbX3Bhc3N3b3JkVmlldyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CisgICAg
ICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2NvbXB1dGVkQ29udGVudEluc2V0RGlkQ2hhbmdl
XTsKKyAgICAgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvckFueVJlYXNv
biA9IFlFUzsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlE
PSVsbHUpIC1bV0tXZWJWaWV3IF91cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzOl0gLSB1c2VzU3Rh
bmRhcmRDb250ZW50VmlldyBpcyBOTywgYmFpbGluZyIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVy
KCkudG9VSW50NjQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHRpbWVO
b3cgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBpZiAoX3RpbWVPZkZpcnN0VmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQpIHsKKyAgICAgICAgYXV0byB0aW1lU2lu
Y2VGaXJzdFJlcXVlc3RXaXRoUGVuZGluZ0NvbW1pdCA9IHRpbWVOb3cgLSAqX3RpbWVPZkZpcnN0
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0aFBlbmRpbmdDb21taXQ7CisgICAgICAgIGlmICh0
aW1lU2luY2VGaXJzdFJlcXVlc3RXaXRoUGVuZGluZ0NvbW1pdCA+IGRlbGF5QmVmb3JlTm9Db21t
aXRzTG9nZ2luZykKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdl
UHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfdXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0czpdIC0g
aGF2ZSBub3QgcmVjZWl2ZWQgYSBjb21taXQgJS4yZnMgYWZ0ZXIgdmlzaWJsZSBjb250ZW50IHJl
Y3QgdXBkYXRlOyBsYXN0VHJhbnNhY3Rpb25JRCAlbGx1Iiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZp
ZXIoKS50b1VJbnQ2NCgpLCB0aW1lU2luY2VGaXJzdFJlcXVlc3RXaXRoUGVuZGluZ0NvbW1pdC52
YWx1ZSgpLCBfbGFzdFRyYW5zYWN0aW9uSUQudG9VSW50NjQoKSk7CisgICAgfQorCisgICAgaWYg
KF9pbnZva2luZ1VJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJhY2spIHsKKyAgICAgICAgX2RpZERl
ZmVyVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c0ZvclVJU2Nyb2xsVmlld0RlbGVnYXRlQ2FsbGJh
Y2sgPSBZRVM7CisgICAgICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JB
bnlSZWFzb24gPSBZRVM7CisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdl
UHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfdXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0czpdIC0g
X2ludm9raW5nVUlTY3JvbGxWaWV3RGVsZWdhdGVDYWxsYmFjayBpcyBZRVMsIGJhaWxpbmciLCBz
ZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdlYktpdDo6RHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcKKyAgICAgICAgfHwgKF9uZWVkc1Jl
c2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lICYmICFbX2NvbnRlbnRWaWV3
IHNpemVDaGFuZ2VkU2luY2VMYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXSkKKyAgICAgICAg
fHwgW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXQorICAgICAgICB8fCBfY3VycmVudGx5QWRq
dXN0aW5nU2Nyb2xsVmlld0luc2V0c0ZvcktleWJvYXJkKSB7CisgICAgICAgIF9kaWREZWZlclVw
ZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFzb24gPSBZRVM7CisgICAgICAgIF9kaWRE
ZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVbnN0YWJsZVNjcm9sbFZpZXcgPSBZRVM7
CisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAt
W1dLV2ViVmlldyBfdXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0czpdIC0gc2Nyb2xsIHZpZXcgc3Rh
dGUgaXMgbm9uLXN0YWJsZSwgYmFpbGluZyAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgJWQs
IF9uZWVkc1Jlc2V0Vmlld1N0YXRlQWZ0ZXJDb21taXRMb2FkRm9yTWFpbkZyYW1lICVkLCBzaXpl
Q2hhbmdlZFNpbmNlTGFzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSAlZCwgW19zY3JvbGxWaWV3
IGlzWm9vbUJvdW5jaW5nXSAlZCwgX2N1cnJlbnRseUFkanVzdGluZ1Njcm9sbFZpZXdJbnNldHNG
b3JLZXlib2FyZCAlZCkiLAorICAgICAgICAgICAgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50
b1VJbnQ2NCgpLCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSwgX25lZWRzUmVzZXRWaWV3U3Rh
dGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUsIFtfY29udGVudFZpZXcgc2l6ZUNoYW5nZWRT
aW5jZUxhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdLCBbX3Njcm9sbFZpZXcgaXNab29tQm91
bmNpbmddLCBfY3VycmVudGx5QWRqdXN0aW5nU2Nyb2xsVmlld0luc2V0c0ZvcktleWJvYXJkKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChfZGlkRGVmZXJVcGRhdGVWaXNpYmxl
Q29udGVudFJlY3RzRm9yQW55UmVhc29uKQorICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX3VwZGF0ZVZpc2libGVDb250ZW50
UmVjdHM6XSAtIHBlcmZvcm1pbmcgZmlyc3QgdmlzaWJsZSBjb250ZW50IHJlY3QgdXBkYXRlIGFm
dGVyIGRlZmVycmluZyB1cGRhdGVzIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2
NCgpKTsKKworICAgIF9kaWREZWZlclVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNGb3JVSVNjcm9s
bFZpZXdEZWxlZ2F0ZUNhbGxiYWNrID0gTk87CisgICAgX2RpZERlZmVyVXBkYXRlVmlzaWJsZUNv
bnRlbnRSZWN0c0ZvclVuc3RhYmxlU2Nyb2xsVmlldyA9IE5POworICAgIF9kaWREZWZlclVwZGF0
ZVZpc2libGVDb250ZW50UmVjdHNGb3JBbnlSZWFzb24gPSBOTzsKKworICAgIENHUmVjdCB2aXNp
YmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgX3Zpc2libGVDb250ZW50UmVjdF07
CisKKyAgICBVSUVkZ2VJbnNldHMgY29tcHV0ZWRDb250ZW50SW5zZXRVbmFkanVzdGVkRm9yS2V5
Ym9hcmQgPSBbc2VsZiBfY29tcHV0ZWRPYnNjdXJlZEluc2V0XTsKKyAgICBpZiAoIV9oYXZlU2V0
T2JzY3VyZWRJbnNldHMpCisgICAgICAgIGNvbXB1dGVkQ29udGVudEluc2V0VW5hZGp1c3RlZEZv
cktleWJvYXJkLmJvdHRvbSAtPSBfdG90YWxTY3JvbGxWaWV3Qm90dG9tSW5zZXRBZGp1c3RtZW50
Rm9yS2V5Ym9hcmQ7CisKKyAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gY29udGVudFpvb21TY2Fs
ZShzZWxmKTsKKworICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdCA9IFVJRWRnZUluc2V0c0luc2V0
UmVjdChzZWxmLmJvdW5kcywgY29tcHV0ZWRDb250ZW50SW5zZXRVbmFkanVzdGVkRm9yS2V5Ym9h
cmQpOworICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gX2Zy
b3plblVub2JzY3VyZWRDb250ZW50UmVjdCA/IF9mcm96ZW5Vbm9ic2N1cmVkQ29udGVudFJlY3Qu
dmFsdWUoKSA6IFtzZWxmIGNvbnZlcnRSZWN0OnVub2JzY3VyZWRSZWN0IHRvVmlldzpfY29udGVu
dFZpZXcuZ2V0KCldOworICAgIHVub2JzY3VyZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBD
R1JlY3RJbnRlcnNlY3Rpb24odW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgW3Nl
bGYgX2NvbnRlbnRCb3VuZHNFeHRlbmRlZEZvclJ1YmJlcmJhbmRpbmdXaXRoU2NhbGU6c2NhbGVG
YWN0b3JdKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgbG9naWMgY29tcHV0ZXMgdGhlIGV4dGVu
dCB0byB3aGljaCB0aGUgYm90dG9tLCB0b3AsIGxlZnQgYW5kIHJpZ2h0IGNvbnRlbnQgaW5zZXRz
IGFyZSB2aXNpYmxlLgorICAgIGF1dG8gc2Nyb2xsVmlld0luc2V0cyA9IFtfc2Nyb2xsVmlldyBj
b250ZW50SW5zZXRdOworICAgIGF1dG8gc2Nyb2xsVmlld0JvdW5kcyA9IFtfc2Nyb2xsVmlldyBi
b3VuZHNdOworICAgIGF1dG8gc2Nyb2xsVmlld0NvbnRlbnRTaXplID0gW19zY3JvbGxWaWV3IGNv
bnRlbnRTaXplXTsKKyAgICBhdXRvIHNjcm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJbnNldCA9IFVJ
RWRnZUluc2V0c0luc2V0UmVjdChzY3JvbGxWaWV3Qm91bmRzLCBjb21wdXRlZENvbnRlbnRJbnNl
dFVuYWRqdXN0ZWRGb3JLZXlib2FyZCkub3JpZ2luOworICAgIGF1dG8gbWF4aW11bVZlcnRpY2Fs
U2Nyb2xsRXh0ZW50V2l0aG91dFJldmVhbGluZ0JvdHRvbUNvbnRlbnRJbnNldCA9IHNjcm9sbFZp
ZXdDb250ZW50U2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRIZWlnaHQoc2Nyb2xsVmlld0JvdW5kcyk7
CisgICAgYXV0byBtYXhpbXVtSG9yaXpvbnRhbFNjcm9sbEV4dGVudFdpdGhvdXRSZXZlYWxpbmdS
aWdodENvbnRlbnRJbnNldCA9IHNjcm9sbFZpZXdDb250ZW50U2l6ZS53aWR0aCAtIENHUmVjdEdl
dFdpZHRoKHNjcm9sbFZpZXdCb3VuZHMpOworICAgIGF1dG8gY29udGVudEluc2V0cyA9IFVJRWRn
ZUluc2V0c1plcm87CisgICAgaWYgKHNjcm9sbFZpZXdJbnNldHMubGVmdCA+IDAgJiYgc2Nyb2xs
Vmlld09yaWdpbkluY2x1ZGluZ0luc2V0LnggPCAwKQorICAgICAgICBjb250ZW50SW5zZXRzLmxl
ZnQgPSBzdGQ6Om1pbigtc2Nyb2xsVmlld09yaWdpbkluY2x1ZGluZ0luc2V0LngsIHNjcm9sbFZp
ZXdJbnNldHMubGVmdCkgLyBzY2FsZUZhY3RvcjsKKworICAgIGlmIChzY3JvbGxWaWV3SW5zZXRz
LnRvcCA+IDAgJiYgc2Nyb2xsVmlld09yaWdpbkluY2x1ZGluZ0luc2V0LnkgPCAwKQorICAgICAg
ICBjb250ZW50SW5zZXRzLnRvcCA9IHN0ZDo6bWluKC1zY3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5n
SW5zZXQueSwgc2Nyb2xsVmlld0luc2V0cy50b3ApIC8gc2NhbGVGYWN0b3I7CisKKyAgICBpZiAo
c2Nyb2xsVmlld0luc2V0cy5yaWdodCA+IDAgJiYgc2Nyb2xsVmlld09yaWdpbkluY2x1ZGluZ0lu
c2V0LnggPiBtYXhpbXVtSG9yaXpvbnRhbFNjcm9sbEV4dGVudFdpdGhvdXRSZXZlYWxpbmdSaWdo
dENvbnRlbnRJbnNldCkKKyAgICAgICAgY29udGVudEluc2V0cy5yaWdodCA9IHN0ZDo6bWluKHNj
cm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJbnNldC54IC0gbWF4aW11bUhvcml6b250YWxTY3JvbGxF
eHRlbnRXaXRob3V0UmV2ZWFsaW5nUmlnaHRDb250ZW50SW5zZXQsIHNjcm9sbFZpZXdJbnNldHMu
cmlnaHQpIC8gc2NhbGVGYWN0b3I7CisKKyAgICBpZiAoc2Nyb2xsVmlld0luc2V0cy5ib3R0b20g
PiAwICYmIHNjcm9sbFZpZXdPcmlnaW5JbmNsdWRpbmdJbnNldC55ID4gbWF4aW11bVZlcnRpY2Fs
U2Nyb2xsRXh0ZW50V2l0aG91dFJldmVhbGluZ0JvdHRvbUNvbnRlbnRJbnNldCkKKyAgICAgICAg
Y29udGVudEluc2V0cy5ib3R0b20gPSBzdGQ6Om1pbihzY3JvbGxWaWV3T3JpZ2luSW5jbHVkaW5n
SW5zZXQueSAtIG1heGltdW1WZXJ0aWNhbFNjcm9sbEV4dGVudFdpdGhvdXRSZXZlYWxpbmdCb3R0
b21Db250ZW50SW5zZXQsIHNjcm9sbFZpZXdJbnNldHMuYm90dG9tKSAvIHNjYWxlRmFjdG9yOwor
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
KyAgICBpZiAoaW5TdGFibGVTdGF0ZSkgeworICAgICAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHkqIGNvb3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkoKTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdG9yICYmIGNvb3JkaW5hdG9yLT5oYXNB
Y3RpdmVTbmFwUG9pbnQoKSkgeworICAgICAgICAgICAgQ0dQb2ludCBjdXJyZW50UG9pbnQgPSBb
X3Njcm9sbFZpZXcgY29udGVudE9mZnNldF07CisgICAgICAgICAgICBDR1BvaW50IGFjdGl2ZVBv
aW50ID0gY29vcmRpbmF0b3ItPm5lYXJlc3RBY3RpdmVDb250ZW50SW5zZXRBZGp1c3RlZFNuYXBQ
b2ludCh1bm9ic2N1cmVkUmVjdC5vcmlnaW4ueSwgY3VycmVudFBvaW50KTsKKworICAgICAgICAg
ICAgaWYgKCFDR1BvaW50RXF1YWxUb1BvaW50KGFjdGl2ZVBvaW50LCBjdXJyZW50UG9pbnQpKSB7
CisgICAgICAgICAgICAgICAgUmV0YWluUHRyPFdLU2Nyb2xsVmlldz4gc3Ryb25nU2Nyb2xsVmll
dyA9IF9zY3JvbGxWaWV3OworICAgICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdTY3JvbGxWaWV3LCBhY3RpdmVQb2ludF0geworICAg
ICAgICAgICAgICAgICAgICBbc3Ryb25nU2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmFjdGl2
ZVBvaW50IGFuaW1hdGVkOk5PXTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgW19jb250ZW50VmlldyBkaWRVcGRhdGVW
aXNpYmxlUmVjdDp2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5hdGVzCisgICAgICAgIHVub2Jz
Y3VyZWRSZWN0OnVub2JzY3VyZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMKKyAgICAgICAgY29u
dGVudEluc2V0czpjb250ZW50SW5zZXRzCisgICAgICAgIHVub2JzY3VyZWRSZWN0SW5TY3JvbGxW
aWV3Q29vcmRpbmF0ZXM6dW5vYnNjdXJlZFJlY3QKKyAgICAgICAgb2JzY3VyZWRJbnNldHM6X29i
c2N1cmVkSW5zZXRzCisgICAgICAgIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0czpbc2VsZiBfY29t
cHV0ZWRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldF0KKyAgICAgICAgaW5wdXRWaWV3Qm91bmRzOl9p
bnB1dFZpZXdCb3VuZHMKKyAgICAgICAgc2NhbGU6c2NhbGVGYWN0b3IgbWluaW11bVNjYWxlOltf
c2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxlXQorICAgICAgICBpblN0YWJsZVN0YXRlOmluU3Rh
YmxlU3RhdGUKKyAgICAgICAgaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseTpf
aXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseQorICAgICAgICBlbmNsb3NlZElu
U2Nyb2xsYWJsZUFuY2VzdG9yVmlldzpzY3JvbGxWaWV3Q2FuU2Nyb2xsKFtzZWxmIF9zY3JvbGxl
cl0pXTsKKworICAgIHdoaWxlICghX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZUNhbGxiYWNrcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBjYWxsYmFjayA9IF92aXNpYmxlQ29udGVudFJlY3RV
cGRhdGVDYWxsYmFja3MudGFrZUxhc3QoKTsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9CisK
KyAgICBpZiAoKHRpbWVOb3cgLSBfdGltZU9mUmVxdWVzdEZvclZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZSkgPiBkZWxheUJlZm9yZU5vVmlzaWJsZUNvbnRlbnRzUmVjdHNMb2dnaW5nKQorICAgICAg
ICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAtW1dLV2ViVmlldyBfdXBkYXRlVmlzaWJsZUNv
bnRlbnRSZWN0czpdIGZpbmFsbHkgcmFuICUuMmZzIGFmdGVyIGJlaW5nIHNjaGVkdWxlZCIsIHNl
bGYsICh0aW1lTm93IC0gX3RpbWVPZlJlcXVlc3RGb3JWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUp
LnZhbHVlKCkpOworCisgICAgX3RpbWVPZkxhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUgPSB0
aW1lTm93OworICAgIGlmICghX3RpbWVPZkZpcnN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlV2l0
aFBlbmRpbmdDb21taXQpCisgICAgICAgIF90aW1lT2ZGaXJzdFZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZVdpdGhQZW5kaW5nQ29tbWl0ID0gdGltZU5vdzsKK30KKworLSAodm9pZClfZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUKK3sKKyAgICBpZiAoX2dlc3R1cmVDb250cm9sbGVy
KQorICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
TWFpbkZyYW1lKCk7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpGbG9hdFNpemUgYWN0aXZlTWF4aW11
bVVub2JzY3VyZWRTaXplKFdLV2ViVmlldyAqd2ViVmlldywgY29uc3QgQ0dSZWN0JiBib3VuZHMp
Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0U2l6ZSh3ZWJWaWV3LT5fbWF4aW11bVVub2Jz
Y3VyZWRTaXplT3ZlcnJpZGUudmFsdWVPcihib3VuZHMuc2l6ZSkpOworfQorCitzdGF0aWMgaW50
MzJfdCBhY3RpdmVPcmllbnRhdGlvbihXS1dlYlZpZXcgKndlYlZpZXcpCit7CisgICAgcmV0dXJu
IHdlYlZpZXctPl9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbiA/IGRldmljZU9yaWVudGF0
aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbih3ZWJWaWV3LT5faW50ZXJmYWNlT3JpZW50YXRp
b25PdmVycmlkZSkgOiB3ZWJWaWV3LT5fcGFnZS0+ZGV2aWNlT3JpZW50YXRpb24oKTsKK30KKwor
LSAodm9pZClfY2FuY2VsQW5pbWF0ZWRSZXNpemUKK3sKKyAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX2NhbmNlbEFuaW1hdGVkUmVz
aXplXSBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSAlZCIsIHNlbGYsIF9wYWdlLT5pZGVudGlm
aWVyKCkudG9VSW50NjQoKSwgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUpOworCisgICAgaWYg
KF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBk
YXRlTW9kZTo6Tm90UmVzaXppbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghX2N1c3Rv
bUNvbnRlbnRWaWV3KSB7CisgICAgICAgIGlmIChfcmVzaXplQW5pbWF0aW9uVmlldykgeworICAg
ICAgICAgICAgTlNVSW50ZWdlciBpbmRleE9mUmVzaXplQW5pbWF0aW9uVmlldyA9IFtbX3Njcm9s
bFZpZXcgc3Vidmlld3NdIGluZGV4T2ZPYmplY3Q6X3Jlc2l6ZUFuaW1hdGlvblZpZXcuZ2V0KCld
OworICAgICAgICAgICAgW19zY3JvbGxWaWV3IGluc2VydFN1YnZpZXc6X2NvbnRlbnRWaWV3Lmdl
dCgpIGF0SW5kZXg6aW5kZXhPZlJlc2l6ZUFuaW1hdGlvblZpZXddOworICAgICAgICAgICAgW19z
Y3JvbGxWaWV3IGluc2VydFN1YnZpZXc6W19jb250ZW50VmlldyB1bnNjYWxlZFZpZXddIGF0SW5k
ZXg6aW5kZXhPZlJlc2l6ZUFuaW1hdGlvblZpZXcgKyAxXTsKKyAgICAgICAgICAgIFtfcmVzaXpl
QW5pbWF0aW9uVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgICAgIF9yZXNpemVB
bmltYXRpb25WaWV3ID0gbmlsOworICAgICAgICB9CisKKyAgICAgICAgW19jb250ZW50VmlldyBz
ZXRIaWRkZW46Tk9dOworICAgICAgICBfcmVzaXplQW5pbWF0aW9uVHJhbnNmb3JtQWRqdXN0bWVu
dHMgPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7CisgICAgfQorCisgICAgX2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUgPSBXZWJLaXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6
aW5nOworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Cit9CisK
Ky0gKHZvaWQpX2RpZENvbXBsZXRlQW5pbWF0ZWRSZXNpemUKK3sKKyAgICBpZiAoX2R5bmFtaWNW
aWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpO
b3RSZXNpemluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb250ZW50VmlldyBzZXRIaWRk
ZW46Tk9dOworCisgICAgaWYgKCFfcmVzaXplQW5pbWF0aW9uVmlldykgeworICAgICAgICAvLyBQ
YXJhbm9pYS4gSWYgX3Jlc2l6ZUFuaW1hdGlvblZpZXcgaXMgbnVsbCB3ZSdsbCBlbmQgdXAgc2V0
dGluZyBhIHplcm8gc2NhbGUgb24gdGhlIGNvbnRlbnQgdmlldy4KKyAgICAgICAgUkVMRUFTRV9M
T0dfSUZfQUxMT1dFRCgiJXAgLVtXS1dlYlZpZXcgX2RpZENvbXBsZXRlQW5pbWF0ZWRSZXNpemU6
XSAtIF9yZXNpemVBbmltYXRpb25WaWV3IGlzIG5pbCIsIHNlbGYpOworICAgICAgICBbc2VsZiBf
Y2FuY2VsQW5pbWF0ZWRSZXNpemVdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9k
aWRDb21wbGV0ZUFuaW1hdGVkUmVzaXplXSIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9V
SW50NjQoKSk7CisKKyAgICBOU1VJbnRlZ2VyIGluZGV4T2ZSZXNpemVBbmltYXRpb25WaWV3ID0g
W1tfc2Nyb2xsVmlldyBzdWJ2aWV3c10gaW5kZXhPZk9iamVjdDpfcmVzaXplQW5pbWF0aW9uVmll
dy5nZXQoKV07CisgICAgW19zY3JvbGxWaWV3IGluc2VydFN1YnZpZXc6X2NvbnRlbnRWaWV3Lmdl
dCgpIGF0SW5kZXg6aW5kZXhPZlJlc2l6ZUFuaW1hdGlvblZpZXddOworICAgIFtfc2Nyb2xsVmll
dyBpbnNlcnRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5zY2FsZWRWaWV3XSBhdEluZGV4OmluZGV4
T2ZSZXNpemVBbmltYXRpb25WaWV3ICsgMV07CisKKyAgICBDQUxheWVyICpjb250ZW50TGF5ZXIg
PSBbX2NvbnRlbnRWaWV3IGxheWVyXTsKKyAgICBDR0Zsb2F0IGFkanVzdG1lbnRTY2FsZSA9IF9y
ZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cy5tMTE7CisgICAgY29udGVudExheWVy
LnN1YmxheWVyVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRElkZW50aXR5OworCisgICAgQ0dGbG9h
dCBhbmltYXRpbmdTY2FsZVRhcmdldCA9IFtbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJdIHRy
YW5zZm9ybV0ubTExOworICAgIENBVHJhbnNmb3JtM0QgY29udGVudExheWVyVHJhbnNmb3JtID0g
Y29udGVudExheWVyLnRyYW5zZm9ybTsKKyAgICBDR0Zsb2F0IGN1cnJlbnRTY2FsZSA9IFtbX3Jl
c2l6ZUFuaW1hdGlvblZpZXcgbGF5ZXJdIHRyYW5zZm9ybV0ubTExICogY29udGVudExheWVyVHJh
bnNmb3JtLm0xMTsKKworICAgIC8vIFdlIGNhbm5vdCB1c2UgW1VJU2Nyb2xsVmlldyBzZXRab29t
U2NhbGU6XSBkaXJlY3RseSBiZWNhdXNlIHRoZSBVSVNjcm9sbFZpZXcgZGVsZWdhdGUgd291bGQg
Z2V0IGEgY2FsbGJhY2sgd2l0aAorICAgIC8vIGFuIGludmFsaWQgY29udGVudE9mZnNldC4gVGhl
IHJlYWwgY29udGVudCBvZmZzZXQgaXMgb25seSBzZXQgYmVsb3cuCisgICAgLy8gU2luY2UgdGhl
cmUgaXMgbm8gcHVibGljIEFQSSBmb3Igc2V0dGluZyBib3RoIHRoZSB6b29tU2NhbGUgYW5kIHRo
ZSBjb250ZW50T2Zmc2V0LCB3ZSBzZXQgdGhlIHpvb21TY2FsZSBtYW51YWxseQorICAgIC8vIG9u
IHRoZSB6b29tIGxheWVyIGFuZCB0aGVuIG9ubHkgY2hhbmdlIHRoZSBjb250ZW50T2Zmc2V0Lgor
ICAgIENHRmxvYXQgYWRqdXN0ZWRTY2FsZSA9IGFkanVzdG1lbnRTY2FsZSAqIGN1cnJlbnRTY2Fs
ZTsKKyAgICBjb250ZW50TGF5ZXJUcmFuc2Zvcm0ubTExID0gYWRqdXN0ZWRTY2FsZTsKKyAgICBj
b250ZW50TGF5ZXJUcmFuc2Zvcm0ubTIyID0gYWRqdXN0ZWRTY2FsZTsKKyAgICBjb250ZW50TGF5
ZXIudHJhbnNmb3JtID0gY29udGVudExheWVyVHJhbnNmb3JtOworCisgICAgQ0dQb2ludCBjdXJy
ZW50U2Nyb2xsT2Zmc2V0ID0gW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOworICAgIGRvdWJs
ZSBob3Jpem9udGFsU2Nyb2xsQWRqdXN0ZW1lbnQgPSBfcmVzaXplQW5pbWF0aW9uVHJhbnNmb3Jt
QWRqdXN0bWVudHMubTQxICogYW5pbWF0aW5nU2NhbGVUYXJnZXQ7CisgICAgZG91YmxlIHZlcnRp
Y2FsU2Nyb2xsQWRqdXN0bWVudCA9IF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50
cy5tNDIgKiBhbmltYXRpbmdTY2FsZVRhcmdldDsKKworICAgIFtfc2Nyb2xsVmlldyBzZXRDb250
ZW50U2l6ZTpyb3VuZFNjcm9sbFZpZXdDb250ZW50U2l6ZSgqX3BhZ2UsIFtfY29udGVudFZpZXcg
ZnJhbWVdLnNpemUpXTsKKyAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpDR1BvaW50
TWFrZShjdXJyZW50U2Nyb2xsT2Zmc2V0LnggLSBob3Jpem9udGFsU2Nyb2xsQWRqdXN0ZW1lbnQs
IGN1cnJlbnRTY3JvbGxPZmZzZXQueSAtIHZlcnRpY2FsU2Nyb2xsQWRqdXN0bWVudCldOworCisg
ICAgW19yZXNpemVBbmltYXRpb25WaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIF9yZXNp
emVBbmltYXRpb25WaWV3ID0gbmlsOworICAgIF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1
c3RtZW50cyA9IENBVHJhbnNmb3JtM0RJZGVudGl0eTsKKworICAgIF9keW5hbWljVmlld3BvcnRV
cGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemlu
ZzsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworCisgICAg
Q0dSZWN0IG5ld0JvdW5kcyA9IHNlbGYuYm91bmRzOworICAgIGF1dG8gbmV3Vmlld0xheW91dFNp
emUgPSBbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpuZXdCb3VuZHNdOworICAgIGF1dG8gbmV3
TWF4aW11bVVub2JzY3VyZWRTaXplID0gYWN0aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYs
IG5ld0JvdW5kcyk7CisgICAgaW50MzJfdCBuZXdPcmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0
aW9uKHNlbGYpOworCisgICAgaWYgKCFfbGFzdFNlbnRWaWV3TGF5b3V0U2l6ZSB8fCBuZXdWaWV3
TGF5b3V0U2l6ZSAhPSBfbGFzdFNlbnRWaWV3TGF5b3V0U2l6ZS52YWx1ZSgpKQorICAgICAgICBb
c2VsZiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpuZXdWaWV3TGF5b3V0U2l6ZV07CisKKyAg
ICBpZiAoIV9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZSB8fCBuZXdNYXhpbXVtVW5vYnNj
dXJlZFNpemUgIT0gX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplLnZhbHVlKCkpCisgICAg
ICAgIFtzZWxmIF9kaXNwYXRjaFNldE1heGltdW1Vbm9ic2N1cmVkU2l6ZTpXZWJDb3JlOjpGbG9h
dFNpemUobmV3TWF4aW11bVVub2JzY3VyZWRTaXplKV07CisKKyAgICBpZiAoIV9sYXN0U2VudERl
dmljZU9yaWVudGF0aW9uIHx8IG5ld09yaWVudGF0aW9uICE9IF9sYXN0U2VudERldmljZU9yaWVu
dGF0aW9uLnZhbHVlKCkpCisgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0
aW9uOm5ld09yaWVudGF0aW9uXTsKKworICAgIHdoaWxlICghX2NhbGxiYWNrc0RlZmVycmVkRHVy
aW5nUmVzaXplLmlzRW1wdHkoKSkKKyAgICAgICAgX2NhbGxiYWNrc0RlZmVycmVkRHVyaW5nUmVz
aXplLnRha2VMYXN0KCkoKTsKK30KKworLSAodm9pZClfZGlkRmluaXNoTG9hZEZvck1haW5GcmFt
ZQoreworICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0dXJlQ29udHJv
bGxlci0+ZGlkRmluaXNoTG9hZEZvck1haW5GcmFtZSgpOworfQorCistICh2b2lkKV9kaWRGYWls
TG9hZEZvck1haW5GcmFtZQoreworICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAg
IF9nZXN0dXJlQ29udHJvbGxlci0+ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUoKTsKK30KKworLSAo
dm9pZClfZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZTooV2ViS2l0OjpTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uVHlwZSluYXZpZ2F0aW9uVHlwZQoreworICAgIFtfY3VzdG9tQ29u
dGVudFZpZXcgd2ViX2RpZFNhbWVEb2N1bWVudE5hdmlnYXRpb246dG9BUEkobmF2aWdhdGlvblR5
cGUpXTsKKworICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0dXJlQ29u
dHJvbGxlci0+ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZShuYXZpZ2F0aW9u
VHlwZSk7Cit9CisKKy0gKHZvaWQpX2tleWJvYXJkQ2hhbmdlZFdpdGhJbmZvOihOU0RpY3Rpb25h
cnkgKilrZXlib2FyZEluZm8gYWRqdXN0U2Nyb2xsVmlldzooQk9PTClhZGp1c3RTY3JvbGxWaWV3
Cit7CisgICAgTlNWYWx1ZSAqZW5kRnJhbWVWYWx1ZSA9IFtrZXlib2FyZEluZm8gb2JqZWN0Rm9y
S2V5OlVJS2V5Ym9hcmRGcmFtZUVuZFVzZXJJbmZvS2V5XTsKKyAgICBpZiAoIWVuZEZyYW1lVmFs
dWUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBrZXlib2FyZCByZWN0IGlzIGFsd2F5
cyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuIEluIHRoZSB2aWV3IHNlcnZpY2VzIGNhc2UgdGhlIHdp
bmRvdyBkb2VzIG5vdAorICAgIC8vIGhhdmUgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbiByb3Rh
dGlvbiB0cmFuc2Zvcm1hdGlvbjsgaXRzIGhvc3QgZG9lcy4gU28sIGl0IG1ha2VzIG5vIHNlbnNl
IHRvCisgICAgLy8gY2xpcCB0aGUga2V5Ym9hcmQgcmVjdCBhZ2FpbnN0IGl0cyBzY3JlZW4uCisg
ICAgaWYgKFtbc2VsZiB3aW5kb3ddIF9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3NdKQorICAgICAg
ICBfaW5wdXRWaWV3Qm91bmRzID0gW3NlbGYud2luZG93IGNvbnZlcnRSZWN0OltlbmRGcmFtZVZh
bHVlIENHUmVjdFZhbHVlXSBmcm9tV2luZG93Om5pbF07CisgICAgZWxzZQorICAgICAgICBfaW5w
dXRWaWV3Qm91bmRzID0gW3NlbGYud2luZG93IGNvbnZlcnRSZWN0OkNHUmVjdEludGVyc2VjdGlv
bihbZW5kRnJhbWVWYWx1ZSBDR1JlY3RWYWx1ZV0sIHNlbGYud2luZG93LnNjcmVlbi5ib3VuZHMp
IGZyb21XaW5kb3c6bmlsXTsKKworICAgIGlmIChbW1VJUGVyaXBoZXJhbEhvc3Qgc2hhcmVkSW5z
dGFuY2VdIGlzVW5kb2NrZWRdKQorICAgICAgICBfaW5wdXRWaWV3Qm91bmRzID0gQ0dSZWN0WmVy
bzsKKworICAgIGlmIChhZGp1c3RTY3JvbGxWaWV3KSB7CisgICAgICAgIENHRmxvYXQgYm90dG9t
SW5zZXRCZWZvcmVBZGp1c3RtZW50ID0gW19zY3JvbGxWaWV3IGNvbnRlbnRJbnNldF0uYm90dG9t
OworICAgICAgICBTZXRGb3JTY29wZTxCT09MPiBpbnNldEFkanVzdG1lbnRHdWFyZChfY3VycmVu
dGx5QWRqdXN0aW5nU2Nyb2xsVmlld0luc2V0c0ZvcktleWJvYXJkLCBZRVMpOworICAgICAgICBb
X3Njcm9sbFZpZXcgX2FkanVzdEZvckF1dG9tYXRpY0tleWJvYXJkSW5mbzprZXlib2FyZEluZm8g
YW5pbWF0ZWQ6WUVTIGxhc3RBZGp1c3RtZW50OiZfbGFzdEFkanVzdG1lbnRGb3JTY3JvbGxlcl07
CisgICAgICAgIENHRmxvYXQgYm90dG9tSW5zZXRBZnRlckFkanVzdG1lbnQgPSBbX3Njcm9sbFZp
ZXcgY29udGVudEluc2V0XS5ib3R0b207CisgICAgICAgIC8vIEZJWE1FOiBUaGlzICJ0b3RhbCBi
b3R0b20gY29udGVudCBpbnNldCBhZGp1c3RtZW50IiBtZWNoYW5pc20gaGFzbid0IHdvcmtlZCBz
aW5jZSBpT1MgMTEsIHNpbmNlIC1fYWRqdXN0Rm9yQXV0b21hdGljS2V5Ym9hcmRJbmZvOmFuaW1h
dGVkOmxhc3RBZGp1c3RtZW50OgorICAgICAgICAvLyBubyBsb25nZXIgc2V0cyAtW1VJU2Nyb2xs
VmlldyBjb250ZW50SW5zZXRdIGZvciBhcHBzIGxpbmtlZCBvbiBvciBhZnRlciBpT1MgMTEuIFdl
IHNob3VsZCBjb25zaWRlciByZW1vdmluZyB0aGlzIGxvZ2ljLCBzaW5jZSB0aGUgb3JpZ2luYWwg
YnVnIHRoaXMgd2FzCisgICAgICAgIC8vIGludGVuZGVkIHRvIGZpeCwgPHJkYXI6Ly9wcm9ibGVt
LzIzMjAyMjU0PiwgcmVtYWlucyBmaXhlZCB0aHJvdWdoIG90aGVyIG1lYW5zLgorICAgICAgICBp
ZiAoYm90dG9tSW5zZXRCZWZvcmVBZGp1c3RtZW50ICE9IGJvdHRvbUluc2V0QWZ0ZXJBZGp1c3Rt
ZW50KQorICAgICAgICAgICAgX3RvdGFsU2Nyb2xsVmlld0JvdHRvbUluc2V0QWRqdXN0bWVudEZv
cktleWJvYXJkICs9IGJvdHRvbUluc2V0QWZ0ZXJBZGp1c3RtZW50IC0gYm90dG9tSW5zZXRCZWZv
cmVBZGp1c3RtZW50OworICAgIH0KKworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50
UmVjdFVwZGF0ZV07Cit9CisKKy0gKEJPT0wpX3Nob3VsZFVwZGF0ZUtleWJvYXJkV2l0aEluZm86
KE5TRGljdGlvbmFyeSAqKWtleWJvYXJkSW5mbworeworICAgIGlmIChbX2NvbnRlbnRWaWV3IGlz
Rm9jdXNpbmdFbGVtZW50XSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIE5TTnVtYmVyICpp
c0xvY2FsS2V5Ym9hcmQgPSBba2V5Ym9hcmRJbmZvIHZhbHVlRm9yS2V5OlVJS2V5Ym9hcmRJc0xv
Y2FsVXNlckluZm9LZXldOworICAgIHJldHVybiBpc0xvY2FsS2V5Ym9hcmQgJiYgIWlzTG9jYWxL
ZXlib2FyZC5ib29sVmFsdWU7Cit9CisKKy0gKHZvaWQpX2tleWJvYXJkV2lsbENoYW5nZUZyYW1l
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChbc2VsZiBfc2hvdWxk
VXBkYXRlS2V5Ym9hcmRXaXRoSW5mbzpub3RpZmljYXRpb24udXNlckluZm9dKQorICAgICAgICBb
c2VsZiBfa2V5Ym9hcmRDaGFuZ2VkV2l0aEluZm86bm90aWZpY2F0aW9uLnVzZXJJbmZvIGFkanVz
dFNjcm9sbFZpZXc6WUVTXTsKK30KKworLSAodm9pZClfa2V5Ym9hcmREaWRDaGFuZ2VGcmFtZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiBfa2V5Ym9hcmRDaGFu
Z2VkV2l0aEluZm86bm90aWZpY2F0aW9uLnVzZXJJbmZvIGFkanVzdFNjcm9sbFZpZXc6Tk9dOwor
fQorCistICh2b2lkKV9rZXlib2FyZFdpbGxTaG93OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIGlmIChbc2VsZiBfc2hvdWxkVXBkYXRlS2V5Ym9hcmRXaXRoSW5mbzpub3Rp
ZmljYXRpb24udXNlckluZm9dKQorICAgICAgICBbc2VsZiBfa2V5Ym9hcmRDaGFuZ2VkV2l0aElu
Zm86bm90aWZpY2F0aW9uLnVzZXJJbmZvIGFkanVzdFNjcm9sbFZpZXc6WUVTXTsKKworICAgIF9w
YWdlLT5zZXRJc0tleWJvYXJkQW5pbWF0aW5nSW4odHJ1ZSk7Cit9CisKKy0gKHZvaWQpX2tleWJv
YXJkRGlkU2hvdzooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBfcGFnZS0+
c2V0SXNLZXlib2FyZEFuaW1hdGluZ0luKGZhbHNlKTsKK30KKworLSAodm9pZClfa2V5Ym9hcmRX
aWxsSGlkZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoW19jb250
ZW50VmlldyBzaG91bGRJZ25vcmVLZXlib2FyZFdpbGxIaWRlTm90aWZpY2F0aW9uXSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW3NlbGYgX2tleWJvYXJkQ2hhbmdlZFdpdGhJbmZvOm5vdGlmaWNh
dGlvbi51c2VySW5mbyBhZGp1c3RTY3JvbGxWaWV3OllFU107Cit9CisKKy0gKHZvaWQpX3dpbmRv
d0RpZFJvdGF0ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV9v
dmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbikKKyAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0
RGV2aWNlT3JpZW50YXRpb246ZGV2aWNlT3JpZW50YXRpb24oKV07Cit9CisKKy0gKHZvaWQpX2Nv
bnRlbnRTaXplQ2F0ZWdvcnlEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Cit7CisgICAgX3BhZ2UtPmNvbnRlbnRTaXplQ2F0ZWdvcnlEaWRDaGFuZ2UoW3NlbGYgX2NvbnRl
bnRTaXplQ2F0ZWdvcnldKTsKK30KKworLSAodm9pZClfYWNjZXNzaWJpbGl0eVNldHRpbmdzRGlk
Q2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9wYWdlLT5hY2Nl
c3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilfY29udGVu
dFNpemVDYXRlZ29yeQoreworICAgIHJldHVybiBbW1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGlj
YXRpb25dIHByZWZlcnJlZENvbnRlbnRTaXplQ2F0ZWdvcnldOworfQorCistIChCT09MKV9pc05h
dmlnYXRpb25Td2lwZUdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopcmVj
b2duaXplcgoreworICAgIGlmICghX2dlc3R1cmVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4g
Tk87CisgICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxlci0+aXNOYXZpZ2F0aW9uU3dpcGVHZXN0
dXJlUmVjb2duaXplcihyZWNvZ25pemVyKTsKK30KKworLSAodm9pZClfbmF2aWdhdGlvbkdlc3R1
cmVEaWRCZWdpbgoreworICAgIC8vIER1cmluZyBhIGJhY2svZm9yd2FyZCBzd2lwZSwgdGhlcmUn
cyBhIHZpZXcgaW50ZXJwb3NlZCBiZXR3ZWVuIHRoaXMgdmlldyBhbmQgdGhlIGNvbnRlbnQgdmll
dyB0aGF0IGhhcworICAgIC8vIGFuIG9mZnNldCBhbmQgYW5pbWF0aW9uIG9uIGl0LCB3aGljaCBy
ZXN1bHRzIGluIGNvbXB1dGluZyBpbmNvcnJlY3QgcmVjdGFuZ2xlcy4gV29yayBhcm91bmQgYnkg
dXNpbmcKKyAgICAvLyBmcm96ZW4gcmVjdHMgZHVyaW5nIHN3aXBlcy4KKyAgICBDR1JlY3QgZnVs
bFZpZXdSZWN0ID0gc2VsZi5ib3VuZHM7CisgICAgQ0dSZWN0IHVub2JzY3VyZWRSZWN0ID0gVUlF
ZGdlSW5zZXRzSW5zZXRSZWN0KGZ1bGxWaWV3UmVjdCwgW3NlbGYgX2NvbXB1dGVkT2JzY3VyZWRJ
bnNldF0pOworCisgICAgX2Zyb3plblZpc2libGVDb250ZW50UmVjdCA9IFtzZWxmIGNvbnZlcnRS
ZWN0OmZ1bGxWaWV3UmVjdCB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICBfZnJvemVu
VW5vYnNjdXJlZENvbnRlbnRSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6dW5vYnNjdXJlZFJlY3Qg
dG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJs
ZVJlY3RzLCBzdHJlYW0gPDwgIl9uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luOiBmcmVlemluZyB2
aXNpYmxlQ29udGVudFJlY3QgIiA8PCBXZWJDb3JlOjpGbG9hdFJlY3QoX2Zyb3plblZpc2libGVD
b250ZW50UmVjdC52YWx1ZSgpKSA8PCAiIFVub2JzY3VyZWRDb250ZW50UmVjdCAiIDw8IFdlYkNv
cmU6OkZsb2F0UmVjdChfZnJvemVuVW5vYnNjdXJlZENvbnRlbnRSZWN0LnZhbHVlKCkpKTsKK30K
KworLSAodm9pZClfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQKK3sKKyAgICBfZnJvemVuVmlzaWJs
ZUNvbnRlbnRSZWN0ID0gV1RGOjpudWxsb3B0OworICAgIF9mcm96ZW5Vbm9ic2N1cmVkQ29udGVu
dFJlY3QgPSBXVEY6Om51bGxvcHQ7Cit9CisKKy0gKHZvaWQpX3Nob3dQYXNzd29yZFZpZXdXaXRo
RG9jdW1lbnROYW1lOihOU1N0cmluZyAqKWRvY3VtZW50TmFtZSBwYXNzd29yZEhhbmRsZXI6KHZv
aWQgKF4pKE5TU3RyaW5nICopKXBhc3N3b3JkSGFuZGxlcgoreworICAgIEFTU0VSVCghX3Bhc3N3
b3JkVmlldyk7CisgICAgX3Bhc3N3b3JkVmlldyA9IGFkb3B0TlMoW1tXS1Bhc3N3b3JkVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpzZWxmLmJvdW5kcyBkb2N1bWVudE5hbWU6ZG9jdW1lbnROYW1l
XSk7CisgICAgW19wYXNzd29yZFZpZXcgc2V0VXNlckRpZEVudGVyUGFzc3dvcmQ6cGFzc3dvcmRI
YW5kbGVyXTsKKyAgICBbX3Bhc3N3b3JkVmlldyBzaG93SW5TY3JvbGxWaWV3Ol9zY3JvbGxWaWV3
LmdldCgpXTsKKyAgICBzZWxmLl9jdXJyZW50Q29udGVudFZpZXcuaGlkZGVuID0gWUVTOworfQor
CistICh2b2lkKV9oaWRlUGFzc3dvcmRWaWV3Cit7CisgICAgaWYgKCFfcGFzc3dvcmRWaWV3KQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZWxmLl9jdXJyZW50Q29udGVudFZpZXcuaGlkZGVuID0g
Tk87CisgICAgW19wYXNzd29yZFZpZXcgaGlkZV07CisgICAgX3Bhc3N3b3JkVmlldyA9IG5pbDsK
K30KKworLSAoV0tQYXNzd29yZFZpZXcgKilfcGFzc3dvcmRWaWV3Cit7CisgICAgcmV0dXJuIF9w
YXNzd29yZFZpZXcuZ2V0KCk7Cit9CisKKy0gKHZvaWQpX3VwZGF0ZVNjcm9sbFZpZXdJbnNldEFk
anVzdG1lbnRCZWhhdmlvcgoreworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDExMDAwMAorICAgIGlmICghW19zY3JvbGxWaWV3IF9jb250ZW50SW5zZXRBZGp1c3RtZW50
QmVoYXZpb3JXYXNFeHRlcm5hbGx5T3ZlcnJpZGRlbl0pCisgICAgICAgIFtfc2Nyb2xsVmlldyBf
c2V0Q29udGVudEluc2V0QWRqdXN0bWVudEJlaGF2aW9ySW50ZXJuYWw6c2VsZi5fc2FmZUFyZWFT
aG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cyA/IFVJU2Nyb2xsVmlld0NvbnRlbnRJbnNldEFkanVz
dG1lbnRBbHdheXMgOiBVSVNjcm9sbFZpZXdDb250ZW50SW5zZXRBZGp1c3RtZW50TmV2ZXJdOwor
I2VuZGlmCit9CisKKy0gKHZvaWQpX3NldEF2b2lkc1Vuc2FmZUFyZWE6KEJPT0wpYXZvaWRzVW5z
YWZlQXJlYQoreworICAgIGlmIChfYXZvaWRzVW5zYWZlQXJlYSA9PSBhdm9pZHNVbnNhZmVBcmVh
KQorICAgICAgICByZXR1cm47CisKKyAgICBfYXZvaWRzVW5zYWZlQXJlYSA9IGF2b2lkc1Vuc2Fm
ZUFyZWE7CisKKyAgICBbc2VsZiBfdXBkYXRlU2Nyb2xsVmlld0luc2V0QWRqdXN0bWVudEJlaGF2
aW9yXTsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworCisg
ICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KVtzZWxmIFVJRGVsZWdhdGVdOworICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZENoYW5nZVNhZmVBcmVhU2hvdWxkQWZm
ZWN0T2JzY3VyZWRJbnNldHM6KV0pCisgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3OnNlbGYg
ZGlkQ2hhbmdlU2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0czphdm9pZHNVbnNhZmVB
cmVhXTsKK30KKworLSAoQk9PTClfaGF2ZVNldE9ic2N1cmVkSW5zZXRzCit7CisgICAgcmV0dXJu
IF9oYXZlU2V0T2JzY3VyZWRJbnNldHM7Cit9CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CistICh2b2lkKXJlbW92ZUZyb21TdXBlcnZpZXcKK3sKKyAgICBbc3VwZXIgcmVtb3ZlRnJvbVN1
cGVydmlld107CisKKyAgICBpZiAoW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxT
Y3JlZW5dKQorICAgICAgICBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdEaWRS
ZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW5dOworfQorI2VuZGlmCisKKy0gKHZv
aWQpX2ZpcmVQcmVzZW50YXRpb25VcGRhdGVGb3JQZW5kaW5nU3RhYmxlU3RhdGVQcmVzZW50YXRp
b25DYWxsYmFja3MKK3sKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2Vs
ZjsKKyAgICBbc2VsZiBfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6W3N0cm9uZ1NlbGZd
IHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0
cm9uZ1NlbGZdIHsKKyAgICAgICAgICAgIGlmIChbc3Ryb25nU2VsZi0+X3N0YWJsZVN0YXRlUHJl
c2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGNvdW50XSkKKyAgICAgICAgICAgICAgICBbc3Ryb25n
U2VsZiBfZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRh
dGlvbkNhbGxiYWNrc107CisgICAgICAgIH0pOworICAgIH1dOworfQorCitzdGF0aWMgV2ViQ29y
ZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB0b1VzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24oVUlTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGUgY29udGVudEF0dHJpYnV0ZSkKK3sKKyAg
ICBhdXRvIGRpcmVjdGlvbiA9IFtVSVZpZXcgdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkZv
clNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKKyAgICBzd2l0Y2gg
KGRpcmVjdGlvbikgeworICAgIGNhc2UgVUlVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVm
dFRvUmlnaHQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uOjpMVFI7CisgICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdo
dFRvTGVmdDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb246OlJUTDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOworfQorCistICh2
b2lkKXNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTooVUlTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1
dGUpY29udGVudEF0dHJpYnV0ZQoreworICAgIFtzdXBlciBzZXRTZW1hbnRpY0NvbnRlbnRBdHRy
aWJ1dGU6Y29udGVudEF0dHJpYnV0ZV07CisKKyAgICBfcGFnZS0+c2V0VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbih0b1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oY29udGVudEF0dHJp
YnV0ZSkpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLUHJpdmF0
ZUlPUykKKworLSAoQ0dSZWN0KV9jb250ZW50VmlzaWJsZVJlY3QKK3sKKyAgICByZXR1cm4gW3Nl
bGYgY29udmVydFJlY3Q6W3NlbGYgYm91bmRzXSB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRW
aWV3XTsKK30KKworLy8gRGVwcmVjYXRlZCBTUEkuCistIChDR1NpemUpX21pbmltdW1MYXlvdXRT
aXplT3ZlcnJpZGUKK3sKKyAgICBBU1NFUlQoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpOworICAg
IHJldHVybiBfdmlld0xheW91dFNpemVPdmVycmlkZS52YWx1ZU9yKENHU2l6ZVplcm8pOworfQor
CistICh2b2lkKV9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOihDR1NpemUpdmlld0xheW91dFNp
emVPdmVycmlkZQoreworICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0gdmlld0xheW91dFNp
emVPdmVycmlkZTsKKworICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJL
aXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQorICAgICAgICBbc2Vs
ZiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpXZWJDb3JlOjpGbG9hdFNpemUodmlld0xheW91
dFNpemVPdmVycmlkZSldOworfQorCisvLyBEZXByZWNhdGVkIFNQSQorLSAoQ0dTaXplKV9tYXhp
bXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZQoreworICAgIEFTU0VSVChfbWF4aW11bVVub2JzY3Vy
ZWRTaXplT3ZlcnJpZGUpOworICAgIHJldHVybiBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUudmFsdWVPcihDR1NpemVaZXJvKTsKK30KKworLSAodm9pZClfc2V0TWF4aW11bVVub2JzY3Vy
ZWRTaXplT3ZlcnJpZGU6KENHU2l6ZSlzaXplCit7CisgICAgQVNTRVJUKHNpemUud2lkdGggPD0g
c2VsZi5ib3VuZHMuc2l6ZS53aWR0aCAmJiBzaXplLmhlaWdodCA8PSBzZWxmLmJvdW5kcy5zaXpl
LmhlaWdodCk7CisgICAgX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlID0gc2l6ZTsKKwor
ICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFtaWNWaWV3
cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQorICAgICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRN
YXhpbXVtVW5vYnNjdXJlZFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKHNpemUpXTsKK30KKworLSAo
VUlFZGdlSW5zZXRzKV9vYnNjdXJlZEluc2V0cworeworICAgIHJldHVybiBfb2JzY3VyZWRJbnNl
dHM7Cit9CisKKy0gKHZvaWQpX3NldE9ic2N1cmVkSW5zZXRzOihVSUVkZ2VJbnNldHMpb2JzY3Vy
ZWRJbnNldHMKK3sKKyAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMudG9wID49IDApOworICAgIEFT
U0VSVChvYnNjdXJlZEluc2V0cy5sZWZ0ID49IDApOworICAgIEFTU0VSVChvYnNjdXJlZEluc2V0
cy5ib3R0b20gPj0gMCk7CisgICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLnJpZ2h0ID49IDApOwor
CisgICAgX2hhdmVTZXRPYnNjdXJlZEluc2V0cyA9IFlFUzsKKworICAgIGlmIChVSUVkZ2VJbnNl
dHNFcXVhbFRvRWRnZUluc2V0cyhfb2JzY3VyZWRJbnNldHMsIG9ic2N1cmVkSW5zZXRzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX29ic2N1cmVkSW5zZXRzID0gb2JzY3VyZWRJbnNldHM7CisK
KyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCistIChV
SVJlY3RFZGdlKV9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEKK3sKKyAgICBy
ZXR1cm4gX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlTYWZlQXJlYTsKK30KKworLSAodm9p
ZClfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOihVSVJlY3RFZGdlKWVk
Z2VzCit7CisgICAgaWYgKGVkZ2VzID09IF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2Fm
ZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3Rl
ZEJ5U2FmZUFyZWEgPSBlZGdlczsKKworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50
UmVjdFVwZGF0ZV07Cit9CisKKy0gKFVJRWRnZUluc2V0cylfdW5vYnNjdXJlZFNhZmVBcmVhSW5z
ZXRzCit7CisgICAgcmV0dXJuIF91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHM7Cit9CisKKy0gKHZv
aWQpX3NldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0czooVUlFZGdlSW5zZXRzKXVub2JzY3VyZWRT
YWZlQXJlYUluc2V0cworeworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMudG9w
ID49IDApOworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMubGVmdCA+PSAwKTsK
KyAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLmJvdHRvbSA+PSAwKTsKKyAgICBB
U1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJpZ2h0ID49IDApOworCisgICAgX2hhdmVT
ZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSBZRVM7CisKKyAgICBpZiAoVUlFZGdlSW5zZXRz
RXF1YWxUb0VkZ2VJbnNldHMoX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0cywgdW5vYnNjdXJlZFNh
ZmVBcmVhSW5zZXRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3Vub2JzY3VyZWRTYWZlQXJl
YUluc2V0cyA9IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0czsKKworICAgIFtzZWxmIF9zY2hlZHVs
ZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Cit9CisKKy0gKEJPT0wpX3NhZmVBcmVhU2hvdWxk
QWZmZWN0T2JzY3VyZWRJbnNldHMKK3sKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRl
bnRWaWV3XSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJldHVybiBfYXZvaWRzVW5zYWZlQXJl
YTsKK30KKworLSAoVUlWaWV3ICopX2VuY2xvc2luZ1ZpZXdGb3JFeHBvc2VkUmVjdENvbXB1dGF0
aW9uCit7CisgICAgcmV0dXJuIFtzZWxmIF9zY3JvbGxlcl07Cit9CisKKy0gKHZvaWQpX3NldElu
dGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6KFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJm
YWNlT3JpZW50YXRpb24KK3sKKyAgICBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24gPSBZ
RVM7CisgICAgX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSBpbnRlcmZhY2VPcmllbnRh
dGlvbjsKKworICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQorICAgICAgICBbc2VsZiBfZGlz
cGF0Y2hTZXREZXZpY2VPcmllbnRhdGlvbjpkZXZpY2VPcmllbnRhdGlvbkZvclVJSW50ZXJmYWNl
T3JpZW50YXRpb24oX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUpXTsKK30KKworLSAoVUlJ
bnRlcmZhY2VPcmllbnRhdGlvbilfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZQoreworICAg
IEFTU0VSVChfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24pOworICAgIHJldHVybiBfaW50
ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTsKK30KKworLSAodm9pZClfY2xlYXJJbnRlcmZhY2VP
cmllbnRhdGlvbk92ZXJyaWRlCit7CisgICAgX292ZXJyaWRlc0ludGVyZmFjZU9yaWVudGF0aW9u
ID0gTk87CisgICAgX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSBVSUludGVyZmFjZU9y
aWVudGF0aW9uUG9ydHJhaXQ7Cit9CisKKy0gKHZvaWQpX3NldEFsbG93c1ZpZXdwb3J0U2hyaW5r
VG9GaXQ6KEJPT0wpYWxsb3dTaHJpbmtUb0ZpdAoreworICAgIF9hbGxvd3NWaWV3cG9ydFNocmlu
a1RvRml0ID0gYWxsb3dTaHJpbmtUb0ZpdDsKK30KKworLSAoQk9PTClfYWxsb3dzVmlld3BvcnRT
aHJpbmtUb0ZpdAoreworICAgIHJldHVybiBfYWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdDsKK30K
KworLSAoQk9PTClfaXNEaXNwbGF5aW5nUERGCit7CisgICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6
IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OnBkZk1JTUVUeXBlcygpKSB7CisgICAgICAgIENs
YXNzIHByb3ZpZGVyQ2xhc3MgPSBbW19jb25maWd1cmF0aW9uIF9jb250ZW50UHJvdmlkZXJSZWdp
c3RyeV0gcHJvdmlkZXJGb3JNSU1FVHlwZTptaW1lVHlwZV07CisgICAgICAgIGlmIChbX2N1c3Rv
bUNvbnRlbnRWaWV3IGlzS2luZE9mQ2xhc3M6cHJvdmlkZXJDbGFzc10pCisgICAgICAgICAgICBy
ZXR1cm4gWUVTOworICAgIH0KKworICAgIHJldHVybiBOTzsKK30KKworLSAoTlNEYXRhICopX2Rh
dGFGb3JEaXNwbGF5ZWRQREYKK3sKKyAgICBpZiAoIVtzZWxmIF9pc0Rpc3BsYXlpbmdQREZdKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9k
YXRhUmVwcmVzZW50YXRpb25dOworfQorCistIChOU1N0cmluZyAqKV9zdWdnZXN0ZWRGaWxlbmFt
ZUZvckRpc3BsYXllZFBERgoreworICAgIGlmICghW3NlbGYgX2lzRGlzcGxheWluZ1BERl0pCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX3N1
Z2dlc3RlZEZpbGVuYW1lXTsKK30KKworLSAoX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyICopX3dl
YlZpZXdQcmludEZvcm1hdHRlcgoreworICAgIFVJVmlld1ByaW50Rm9ybWF0dGVyICp2aWV3UHJp
bnRGb3JtYXR0ZXIgPSBzZWxmLnZpZXdQcmludEZvcm1hdHRlcjsKKyAgICBBU1NFUlQoW3ZpZXdQ
cmludEZvcm1hdHRlciBpc0tpbmRPZkNsYXNzOltfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIgY2xh
c3NdXSk7CisgICAgcmV0dXJuIChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIgKil2aWV3UHJpbnRG
b3JtYXR0ZXI7Cit9CisKKy0gKF9XS0RyYWdJbnRlcmFjdGlvblBvbGljeSlfZHJhZ0ludGVyYWN0
aW9uUG9saWN5Cit7CisgICAgcmV0dXJuIF9kcmFnSW50ZXJhY3Rpb25Qb2xpY3k7Cit9CisKKy0g
KHZvaWQpX3NldERyYWdJbnRlcmFjdGlvblBvbGljeTooX1dLRHJhZ0ludGVyYWN0aW9uUG9saWN5
KXBvbGljeQoreworICAgIGlmIChfZHJhZ0ludGVyYWN0aW9uUG9saWN5ID09IHBvbGljeSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX2RyYWdJbnRlcmFjdGlvblBvbGljeSA9IHBvbGljeTsKKyNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorICAgIFtfY29udGVudFZpZXcgX2RpZENoYW5nZURyYWdJ
bnRlcmFjdGlvblBvbGljeV07CisjZW5kaWYKK30KKworLSAoQk9PTClfc2hvdWxkQXZvaWRSZXNp
emluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2UKK3sKKyAgICByZXR1cm4gW19jb250ZW50Vmll
dyBfc2hvdWxkQXZvaWRSZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2VdOworfQorCist
IChCT09MKV9jb250ZW50Vmlld0lzRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gc2VsZi5f
Y3VycmVudENvbnRlbnRWaWV3LmlzRmlyc3RSZXNwb25kZXI7Cit9CisKKy0gKENHUmVjdClfdWlU
ZXh0Q2FyZXRSZWN0Cit7CisgICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0
ZSBpZiBuZWVkZWQuCisgICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07
CisKKyAgICByZXR1cm4gW1tfY29udGVudFZpZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rp
b25Bc3Npc3RhbnQuc2VsZWN0aW9uVmlldy5zZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFs
dWVdOworfQorCistIChVSVZpZXcgKilfc2FmZUJyb3dzaW5nV2FybmluZworeworICAgIHJldHVy
biBfc2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKK30KKworLSAoQ0dQb2ludClfY29udmVydFBv
aW50RnJvbUNvbnRlbnRzVG9WaWV3OihDR1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIFtzZWxm
IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOwor
fQorCistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQp
cG9pbnQKK3sKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpzZWxm
Ll9jdXJyZW50Q29udGVudFZpZXddOworfQorCistICh2b2lkKV9kb0FmdGVyTmV4dFN0YWJsZVBy
ZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jaworeworICAgIGlm
ICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKSB7CisgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gdXBkYXRlQmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVw
ZGF0ZUJsb2NrKTsKKworICAgIGlmIChfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxs
YmFja3MpCisgICAgICAgIFtfc3RhYmxlU3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3Mg
YWRkT2JqZWN0OnVwZGF0ZUJsb2NrQ29weS5nZXQoKV07CisgICAgZWxzZSB7CisgICAgICAgIF9z
dGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNhbGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmls
XSk7CisgICAgICAgIFtzZWxmIF9maXJlUHJlc2VudGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJs
ZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3NldEZv
bnQ6KFVJRm9udCAqKWZvbnQgc2VuZGVyOihpZClzZW5kZXIKK3sKKyAgICBpZiAoc2VsZi51c2Vz
U3RhbmRhcmRDb250ZW50VmlldykKKyAgICAgICAgW19jb250ZW50VmlldyBfc2V0Rm9udEZvcldl
YlZpZXc6Zm9udCBzZW5kZXI6c2VuZGVyXTsKK30KKworLSAodm9pZClfc2V0Rm9udFNpemU6KENH
RmxvYXQpZm9udFNpemUgc2VuZGVyOihpZClzZW5kZXIKK3sKKyAgICBpZiAoc2VsZi51c2VzU3Rh
bmRhcmRDb250ZW50VmlldykKKyAgICAgICAgW19jb250ZW50VmlldyBfc2V0Rm9udFNpemVGb3JX
ZWJWaWV3OmZvbnRTaXplIHNlbmRlcjpzZW5kZXJdOworfQorCistICh2b2lkKV9zZXRUZXh0Q29s
b3I6KFVJQ29sb3IgKiljb2xvciBzZW5kZXI6KGlkKXNlbmRlcgoreworICAgIGlmIChzZWxmLnVz
ZXNTdGFuZGFyZENvbnRlbnRWaWV3KQorICAgICAgICBbX2NvbnRlbnRWaWV3IF9zZXRUZXh0Q29s
b3JGb3JXZWJWaWV3OmNvbG9yIHNlbmRlcjpzZW5kZXJdOworfQorCistICh2b2lkKV9kZXRlY3RE
YXRhV2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5cGVzKXR5cGVzIGNvbXBsZXRpb25IYW5kbGVy
OihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24KK3sKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJ
T04pCisgICAgX3BhZ2UtPmRldGVjdERhdGFJbkFsbEZyYW1lcyhmcm9tV0tEYXRhRGV0ZWN0b3JU
eXBlcyh0eXBlcyksIFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdl
ID0gbWFrZVdlYWtQdHIoX3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7CisgICAgICAgIGlm
IChwYWdlKQorICAgICAgICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQp
OworICAgICAgICBpZiAoY29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKKyAg
ICB9KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHR5cGVzKTsKKyAgICBVTlVTRURfUEFSQU0o
Y29tcGxldGlvbik7CisjZW5kaWYKK30KKworLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1l
bnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXiko
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sKK3sKKyAgICBhdXRvIGluZm9SZXF1ZXN0
ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdChXZWJDb3JlOjpyb3VuZGVk
SW50UG9pbnQocG9zaXRpb24pKTsKKyAgICBpbmZvUmVxdWVzdC5pbmNsdWRlU25hcHNob3QgPSB0
cnVlOworCisgICAgW19jb250ZW50VmlldyBkb0FmdGVyUG9zaXRpb25JbmZvcm1hdGlvblVwZGF0
ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihibG9jayldIChXZWJLaXQ6OkludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0aW9uKSB7CisgICAgICAgIGNhcHR1cmVk
QmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFjdGl2YXRlZEVsZW1lbnRJbmZvV2l0aElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOmluZm9ybWF0aW9uIHVzZXJJbmZvOm5pbF0p
OworICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVzdF07Cit9CisKKy0gKHZvaWQpZGlkU3RhcnRG
b3JtQ29udHJvbEludGVyYWN0aW9uCit7CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJp
ZGUuCit9CisKKy0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbgoreworICAgIC8v
IEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQorCistICh2b2lkKV9iZWdpbkludGVyYWN0
aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2UKK3sKKyAgICBBU1NFUlQoIV9pc0NoYW5naW5nT2JzY3Vy
ZWRJbnNldHNJbnRlcmFjdGl2ZWx5KTsKKyAgICBfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50
ZXJhY3RpdmVseSA9IFlFUzsKK30KKworLSAodm9pZClfZW5kSW50ZXJhY3RpdmVPYnNjdXJlZElu
c2V0c0NoYW5nZQoreworICAgIEFTU0VSVChfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJh
Y3RpdmVseSk7CisgICAgX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkgPSBO
TzsKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCist
ICh2b2lkKV9oaWRlQ29udGVudFVudGlsTmV4dFVwZGF0ZQoreworICAgIGlmIChhdXRvKiBhcmVh
ID0gX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIGFyZWEtPmhpZGVDb250ZW50VW50aWxB
bnlVcGRhdGUoKTsKK30KKworLSAodm9pZClfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVz
Oih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jaworeworICAgIENHUmVjdCBvbGRCb3VuZHMgPSBz
ZWxmLmJvdW5kczsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgb2xkVW5vYnNjdXJlZENvbnRlbnRS
ZWN0ID0gX3BhZ2UtPnVub2JzY3VyZWRDb250ZW50UmVjdCgpOworCisgICAgaWYgKCFbc2VsZiB1
c2VzU3RhbmRhcmRDb250ZW50Vmlld10gfHwgIV9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZyYW1l
IHx8IENHUmVjdElzRW1wdHkob2xkQm91bmRzKSB8fCBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczopXSkK
KyAgICAgICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2JlZ2luQW5pbWF0ZWRSZXNpemVX
aXRoVXBkYXRlczp1cGRhdGVCbG9ja107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVwZGF0
ZUJsb2NrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0xPR19JRl9B
TExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtXS1dlYlZpZXcgX2JlZ2luQW5pbWF0ZWRS
ZXNpemVXaXRoVXBkYXRlczpdIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIoKS50b1VJbnQ2NCgp
KTsKKworICAgIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmll
d3BvcnRVcGRhdGVNb2RlOjpSZXNpemluZ1dpdGhBbmltYXRpb247CisKKyAgICBhdXRvIG9sZFZp
ZXdMYXlvdXRTaXplID0gW3NlbGYgYWN0aXZlVmlld0xheW91dFNpemU6c2VsZi5ib3VuZHNdOwor
ICAgIGF1dG8gb2xkTWF4aW11bVVub2JzY3VyZWRTaXplID0gYWN0aXZlTWF4aW11bVVub2JzY3Vy
ZWRTaXplKHNlbGYsIG9sZEJvdW5kcyk7CisgICAgaW50MzJfdCBvbGRPcmllbnRhdGlvbiA9IGFj
dGl2ZU9yaWVudGF0aW9uKHNlbGYpOworICAgIFVJRWRnZUluc2V0cyBvbGRPYnNjdXJlZEluc2V0
cyA9IF9vYnNjdXJlZEluc2V0czsKKworICAgIHVwZGF0ZUJsb2NrKCk7CisKKyAgICBDR1JlY3Qg
bmV3Qm91bmRzID0gc2VsZi5ib3VuZHM7CisgICAgYXV0byBuZXdWaWV3TGF5b3V0U2l6ZSA9IFtz
ZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOm5ld0JvdW5kc107CisgICAgYXV0byBuZXdNYXhpbXVt
VW5vYnNjdXJlZFNpemUgPSBhY3RpdmVNYXhpbXVtVW5vYnNjdXJlZFNpemUoc2VsZiwgbmV3Qm91
bmRzKTsKKyAgICBpbnQzMl90IG5ld09yaWVudGF0aW9uID0gYWN0aXZlT3JpZW50YXRpb24oc2Vs
Zik7CisgICAgVUlFZGdlSW5zZXRzIG5ld09ic2N1cmVkSW5zZXRzID0gX29ic2N1cmVkSW5zZXRz
OworICAgIENHUmVjdCBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzID0gVUlF
ZGdlSW5zZXRzSW5zZXRSZWN0KG5ld0JvdW5kcywgX29ic2N1cmVkSW5zZXRzKTsKKyAgICBDR1Jl
Y3QgY29udGVudFZpZXdCb3VuZHMgPSBbX2NvbnRlbnRWaWV3IGJvdW5kc107CisKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCEoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUgJiYgbmV3Vmlld0xheW91
dFNpemUuaXNFbXB0eSgpKSwgIkNsaWVudHMgY29udHJvbGxpbmcgdGhlIGxheW91dCBzaXplIHNo
b3VsZCBtYWludGFpbiBhIHZhbGlkIGxheW91dCBzaXplIHRvIG1pbmltaXplIGxheW91dHMuIik7
CisgICAgaWYgKENHUmVjdElzRW1wdHkobmV3Qm91bmRzKSB8fCBuZXdWaWV3TGF5b3V0U2l6ZS5p
c0VtcHR5KCkgfHwgQ0dSZWN0SXNFbXB0eShmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3Jk
aW5hdGVzKSB8fCBDR1JlY3RJc0VtcHR5KGNvbnRlbnRWaWV3Qm91bmRzKSkgeworICAgICAgICBb
c2VsZiBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdOworICAgICAgICBbc2VsZiBfZnJhbWVPckJvdW5k
c0NoYW5nZWRdOworICAgICAgICBpZiAoX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUpCisgICAgICAg
ICAgICBbc2VsZiBfZGlzcGF0Y2hTZXRWaWV3TGF5b3V0U2l6ZTpuZXdWaWV3TGF5b3V0U2l6ZV07
CisgICAgICAgIGlmIChfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpCisgICAgICAgICAg
ICBbc2VsZiBfZGlzcGF0Y2hTZXRNYXhpbXVtVW5vYnNjdXJlZFNpemU6V2ViQ29yZTo6RmxvYXRT
aXplKG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZSldOworICAgICAgICBpZiAoX292ZXJyaWRlc0lu
dGVyZmFjZU9yaWVudGF0aW9uKQorICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0RGV2aWNl
T3JpZW50YXRpb246bmV3T3JpZW50YXRpb25dOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoQ0dSZWN0RXF1YWxUb1JlY3Qob2xkQm91bmRzLCBuZXdCb3VuZHMpCisgICAgICAg
ICYmIG9sZFZpZXdMYXlvdXRTaXplID09IG5ld1ZpZXdMYXlvdXRTaXplCisgICAgICAgICYmIG9s
ZE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9PSBuZXdNYXhpbXVtVW5vYnNjdXJlZFNpemUKKyAgICAg
ICAgJiYgb2xkT3JpZW50YXRpb24gPT0gbmV3T3JpZW50YXRpb24KKyAgICAgICAgJiYgVUlFZGdl
SW5zZXRzRXF1YWxUb0VkZ2VJbnNldHMob2xkT2JzY3VyZWRJbnNldHMsIG5ld09ic2N1cmVkSW5z
ZXRzKSkgeworICAgICAgICBbc2VsZiBfY2FuY2VsQW5pbWF0ZWRSZXNpemVdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgX3Jlc2l6ZUFuaW1hdGlvblRyYW5zZm9ybUFkanVzdG1lbnRz
ID0gQ0FUcmFuc2Zvcm0zRElkZW50aXR5OworCisgICAgaWYgKCFfcmVzaXplQW5pbWF0aW9uVmll
dykgeworICAgICAgICBOU1VJbnRlZ2VyIGluZGV4T2ZDb250ZW50VmlldyA9IFtbX3Njcm9sbFZp
ZXcgc3Vidmlld3NdIGluZGV4T2ZPYmplY3Q6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICAgICAg
X3Jlc2l6ZUFuaW1hdGlvblZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7Cisg
ICAgICAgIFtfcmVzaXplQW5pbWF0aW9uVmlldyBsYXllcl0ubmFtZSA9IEAiUmVzaXplQW5pbWF0
aW9uIjsKKyAgICAgICAgW19zY3JvbGxWaWV3IGluc2VydFN1YnZpZXc6X3Jlc2l6ZUFuaW1hdGlv
blZpZXcuZ2V0KCkgYXRJbmRleDppbmRleE9mQ29udGVudFZpZXddOworICAgICAgICBbX3Jlc2l6
ZUFuaW1hdGlvblZpZXcgYWRkU3VidmlldzpfY29udGVudFZpZXcuZ2V0KCldOworICAgICAgICBb
X3Jlc2l6ZUFuaW1hdGlvblZpZXcgYWRkU3VidmlldzpbX2NvbnRlbnRWaWV3IHVuc2NhbGVkVmll
d11dOworICAgIH0KKworICAgIENHU2l6ZSBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGlu
YXRlcyA9IGNvbnRlbnRWaWV3Qm91bmRzLnNpemU7CisgICAgW19zY3JvbGxWaWV3IHNldE1pbmlt
dW1ab29tU2NhbGU6c3RkOjptaW4obmV3Vmlld0xheW91dFNpemUud2lkdGgoKSAvIGNvbnRlbnRT
aXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoLCBbX3Njcm9sbFZpZXcgbWluaW11bVpv
b21TY2FsZV0pXTsKKyAgICBbX3Njcm9sbFZpZXcgc2V0TWF4aW11bVpvb21TY2FsZTpzdGQ6Om1h
eChuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgpIC8gY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29v
cmRpbmF0ZXMud2lkdGgsIFtfc2Nyb2xsVmlldyBtYXhpbXVtWm9vbVNjYWxlXSldOworCisgICAg
Ly8gQ29tcHV0ZSB0aGUgbmV3IHNjYWxlIHRvIGtlZXAgdGhlIGN1cnJlbnQgY29udGVudCB3aWR0
aCBpbiB0aGUgc2Nyb2xsdmlldy4KKyAgICBDR0Zsb2F0IG9sZFdlYlZpZXdXaWR0aEluQ29udGVu
dFZpZXdDb29yZGluYXRlcyA9IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC53aWR0aCgpOworICAg
IF9hbmltYXRlZFJlc2l6ZU9yaWdpbmFsQ29udGVudFdpZHRoID0gc3RkOjptaW4oY29udGVudFNp
emVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMud2lkdGgsIG9sZFdlYlZpZXdXaWR0aEluQ29udGVu
dFZpZXdDb29yZGluYXRlcyk7CisgICAgQ0dGbG9hdCB0YXJnZXRTY2FsZSA9IG5ld1ZpZXdMYXlv
dXRTaXplLndpZHRoKCkgLyBfYW5pbWF0ZWRSZXNpemVPcmlnaW5hbENvbnRlbnRXaWR0aDsKKyAg
ICBDR0Zsb2F0IHJlc2l6ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSA9IHRhcmdldFNjYWxl
IC8gY29udGVudFpvb21TY2FsZShzZWxmKTsKKyAgICBbX3Jlc2l6ZUFuaW1hdGlvblZpZXcgc2V0
VHJhbnNmb3JtOkNHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHJlc2l6ZUFuaW1hdGlvblZpZXdB
bmltYXRpb25TY2FsZSwgcmVzaXplQW5pbWF0aW9uVmlld0FuaW1hdGlvblNjYWxlKV07CisKKyAg
ICAvLyBDb21wdXRlIGEgbmV3IHBvc2l0aW9uIHRvIGtlZXAgdGhlIGNvbnRlbnQgY2VudGVyZWQu
CisgICAgQ0dQb2ludCBvcmlnaW5hbENvbnRlbnRDZW50ZXIgPSBvbGRVbm9ic2N1cmVkQ29udGVu
dFJlY3QuY2VudGVyKCk7CisgICAgQ0dQb2ludCBvcmlnaW5hbENvbnRlbnRDZW50ZXJJblNlbGZD
b29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRQb2ludDpvcmlnaW5hbENvbnRlbnRDZW50ZXIgZnJv
bVZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICBDR1BvaW50IGZ1dHVyZVVub2JzY3VyZWRS
ZWN0Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMgPSBDR1BvaW50TWFrZShmdXR1cmVVbm9ic2N1cmVk
UmVjdEluU2VsZkNvb3JkaW5hdGVzLm9yaWdpbi54ICsgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNl
bGZDb29yZGluYXRlcy5zaXplLndpZHRoIC8gMiwgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZD
b29yZGluYXRlcy5vcmlnaW4ueSArIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0
ZXMuc2l6ZS5oZWlnaHQgLyAyKTsKKworICAgIENHUG9pbnQgb3JpZ2luYWxDb250ZW50T2Zmc2V0
ID0gW19zY3JvbGxWaWV3IGNvbnRlbnRPZmZzZXRdOworICAgIENHUG9pbnQgY29udGVudE9mZnNl
dCA9IG9yaWdpbmFsQ29udGVudE9mZnNldDsKKyAgICBjb250ZW50T2Zmc2V0LnggKz0gKG9yaWdp
bmFsQ29udGVudENlbnRlckluU2VsZkNvb3JkaW5hdGVzLnggLSBmdXR1cmVVbm9ic2N1cmVkUmVj
dENlbnRlckluU2VsZkNvb3JkaW5hdGVzLngpOworICAgIGNvbnRlbnRPZmZzZXQueSArPSAob3Jp
Z2luYWxDb250ZW50Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMueSAtIGZ1dHVyZVVub2JzY3VyZWRS
ZWN0Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMueSk7CisKKyAgICAvLyBMaW1pdCB0aGUgbmV3IG9m
ZnNldCB3aXRoaW4gdGhlIHNjcm9sbHZpZXcsIHdlIGRvIG5vdCB3YW50IHRvIHJ1YmJlciBiYW5k
IHByb2dyYW1tYXRpY2FsbHkuCisgICAgQ0dTaXplIGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29v
cmRpbmF0ZXMgPSBDR1NpemVNYWtlKGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVz
LndpZHRoICogdGFyZ2V0U2NhbGUsIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVz
LmhlaWdodCAqIHRhcmdldFNjYWxlKTsKKyAgICBDR0Zsb2F0IG1heEhvcml6b250YWxPZmZzZXQg
PSBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzLndpZHRoIC0gbmV3Qm91bmRzLnNp
emUud2lkdGggKyBfb2JzY3VyZWRJbnNldHMucmlnaHQ7CisgICAgY29udGVudE9mZnNldC54ID0g
c3RkOjptaW4oY29udGVudE9mZnNldC54LCBtYXhIb3Jpem9udGFsT2Zmc2V0KTsKKyAgICBDR0Zs
b2F0IG1heFZlcnRpY2FsT2Zmc2V0ID0gZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRl
cy5oZWlnaHQgLSBuZXdCb3VuZHMuc2l6ZS5oZWlnaHQgKyBfb2JzY3VyZWRJbnNldHMuYm90dG9t
OworICAgIGNvbnRlbnRPZmZzZXQueSA9IHN0ZDo6bWluKGNvbnRlbnRPZmZzZXQueSwgbWF4VmVy
dGljYWxPZmZzZXQpOworCisgICAgY29udGVudE9mZnNldC54ID0gc3RkOjptYXgoY29udGVudE9m
ZnNldC54LCAtX29ic2N1cmVkSW5zZXRzLmxlZnQpOworICAgIGNvbnRlbnRPZmZzZXQueSA9IHN0
ZDo6bWF4KGNvbnRlbnRPZmZzZXQueSwgLV9vYnNjdXJlZEluc2V0cy50b3ApOworCisgICAgLy8g
TWFrZSB0aGUgdG9wL2JvdHRvbSBlZGdlcyAic3RpY2t5IiB3aXRoaW4gMSBwaXhlbC4KKyAgICBp
ZiAob2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0Lm1heFkoKSA+IGNvbnRlbnRTaXplSW5Db250ZW50
Vmlld0Nvb3JkaW5hdGVzLmhlaWdodCAtIDEpCisgICAgICAgIGNvbnRlbnRPZmZzZXQueSA9IG1h
eFZlcnRpY2FsT2Zmc2V0OworICAgIGlmIChvbGRVbm9ic2N1cmVkQ29udGVudFJlY3QueSgpIDwg
MSkKKyAgICAgICAgY29udGVudE9mZnNldC55ID0gW3NlbGYgX2luaXRpYWxDb250ZW50T2Zmc2V0
Rm9yU2Nyb2xsVmlld10ueTsKKworICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXZlIGNvbnRlbnQgY2Vu
dGVyZWQgYWZ0ZXIgZG91YmxlIHRhcCB0byB6b29tLCB3ZSBzaG91bGQgYWxzbyB0cnkgdG8ga2Vl
cCB0aGF0IHJlY3QgaW4gdmlldy4KKyAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudFNpemU6cm91
bmRTY3JvbGxWaWV3Q29udGVudFNpemUoKl9wYWdlLCBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNv
b3JkaW5hdGVzKV07CisgICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Y29udGVudE9m
ZnNldF07CisKKyAgICBDR1JlY3QgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtz
ZWxmIGNvbnZlcnRSZWN0Om5ld0JvdW5kcyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAg
ICBDR1JlY3QgdW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZl
cnRSZWN0OmZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMgdG9WaWV3Ol9jb250
ZW50Vmlldy5nZXQoKV07CisKKyAgICBVSUVkZ2VJbnNldHMgdW5vYnNjdXJlZFNhZmVBcmVhSW5z
ZXRzID0gW3NlbGYgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRdOworICAgIFdlYkNv
cmU6OkZsb2F0Qm94RXh0ZW50IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0c0V4dGVudCh1bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHMudG9wLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMucmlnaHQsIHVu
b2JzY3VyZWRTYWZlQXJlYUluc2V0cy5ib3R0b20sIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5s
ZWZ0KTsKKworICAgIF9sYXN0U2VudFZpZXdMYXlvdXRTaXplID0gbmV3Vmlld0xheW91dFNpemU7
CisgICAgX2xhc3RTZW50TWF4aW11bVVub2JzY3VyZWRTaXplID0gbmV3TWF4aW11bVVub2JzY3Vy
ZWRTaXplOworICAgIF9sYXN0U2VudERldmljZU9yaWVudGF0aW9uID0gbmV3T3JpZW50YXRpb247
CisKKyAgICBfcGFnZS0+ZHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZShuZXdWaWV3TGF5b3V0U2l6
ZSwgbmV3TWF4aW11bVVub2JzY3VyZWRTaXplLCB2aXNpYmxlUmVjdEluQ29udGVudENvb3JkaW5h
dGVzLCB1bm9ic2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5hdGVzLCBmdXR1cmVVbm9ic2N1cmVk
UmVjdEluU2VsZkNvb3JkaW5hdGVzLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHNFeHRlbnQsIHRh
cmdldFNjYWxlLCBuZXdPcmllbnRhdGlvbiwgKytfY3VycmVudER5bmFtaWNWaWV3cG9ydFNpemVV
cGRhdGVJRCk7CisgICAgaWYgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEg
PSBfcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPnNldFNpemUoV2Vi
Q29yZTo6SW50U2l6ZShuZXdCb3VuZHMuc2l6ZSkpOworCisgICAgX3dhaXRpbmdGb3JDb21taXRB
ZnRlckFuaW1hdGVkUmVzaXplID0gWUVTOworICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNp
emUgPSBZRVM7Cit9CisKKy0gKHZvaWQpX2VuZEFuaW1hdGVkUmVzaXplCit7CisgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9lbmRB
bmltYXRlZFJlc2l6ZV0gX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgJWQiLCBzZWxmLCBfcGFn
ZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCksIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlKTsK
KworICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiB1cC10by1kYXRlIGxheWVyIHRyZWUsIGlt
bWVkaWF0ZWx5IGNvbXBsZXRlCisgICAgLy8gdGhlIHJlc2l6ZS4gT3RoZXJ3aXNlLCB3ZSB3aWxs
IGRlZmVyIGNvbXBsZXRpb24gdW50aWwgd2UgZG8uCisgICAgX3dhaXRpbmdGb3JFbmRBbmltYXRl
ZFJlc2l6ZSA9IE5POworICAgIGlmICghX3dhaXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVkUmVz
aXplKQorICAgICAgICBbc2VsZiBfZGlkQ29tcGxldGVBbmltYXRlZFJlc2l6ZV07Cit9CisKKy0g
KHZvaWQpX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOih2b2lkICheKSh2b2lk
KSl1cGRhdGVCbG9jaworeworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJv
eHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0
ZXM6XSIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7CisKKyAgICBbc2Vs
ZiBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOnVwZGF0ZUJsb2NrXTsKKyAgICBpZiAo
X2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlOjpSZXNpemluZ1dpdGhBbmltYXRpb24pIHsKKyAgICAgICAgW19jb250ZW50VmlldyBz
ZXRIaWRkZW46WUVTXTsKKyAgICAgICAgX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPSBXZWJL
aXQ6OkR5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6OlJlc2l6aW5nV2l0aERvY3VtZW50SGlkZGVu
OworICAgICAgICAKKyAgICAgICAgLy8gX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRh
dGVzIGlzIHVzZWQgYnkgaXRzZWxmOyB0aGUgY2xpZW50IHdpbGwKKyAgICAgICAgLy8gbm90IGNh
bGwgZW5kQW5pbWF0ZWRSZXNpemUsIHNvIHdlIGNhbid0IHdhaXQgZm9yIGl0LgorICAgICAgICBf
d2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplID0gTk87CisgICAgfQorfQorCistICh2b2lkKV9z
bmFwc2hvdFJlY3Q6KENHUmVjdClyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZXaWR0
aDooQ0dGbG9hdClpbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKENHSW1hZ2VS
ZWYpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlICE9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsK
KyAgICAgICAgLy8gRGVmZXIgc25hcHNob3R0aW5nIHVudGlsIGFmdGVyIHRoZSBjdXJyZW50IHJl
c2l6ZSBjb21wbGV0ZXMuCisgICAgICAgIHZvaWQgKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlciko
Q0dJbWFnZVJlZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAgICAgIFJldGFpblB0
cjxXS1dlYlZpZXc+IHJldGFpbmVkU2VsZiA9IHNlbGY7CisgICAgICAgIF9jYWxsYmFja3NEZWZl
cnJlZER1cmluZ1Jlc2l6ZS5hcHBlbmQoW3JldGFpbmVkU2VsZiwgcmVjdEluVmlld0Nvb3JkaW5h
dGVzLCBpbWFnZVdpZHRoLCBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAg
W3JldGFpbmVkU2VsZiBfc25hcHNob3RSZWN0OnJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1h
Z2VPZldpZHRoOmltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6Y29waWVkQ29tcGxldGlvbkhh
bmRsZXJdOworICAgICAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENHUmVjdCBzbmFwc2hv
dFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJblZpZXdD
b29yZGluYXRlcyB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKKyAgICBDR0Zsb2F0
IGltYWdlU2NhbGUgPSBpbWFnZVdpZHRoIC8gc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0
ZXMuc2l6ZS53aWR0aDsKKyAgICBDR0Zsb2F0IGltYWdlSGVpZ2h0ID0gaW1hZ2VTY2FsZSAqIHNu
YXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzLnNpemUuaGVpZ2h0OworICAgIENHU2l6ZSBp
bWFnZVNpemUgPSBDR1NpemVNYWtlKGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKKworICAgIGlm
IChbW19jdXN0b21Db250ZW50VmlldyBjbGFzc10gd2ViX3JlcXVpcmVzQ3VzdG9tU25hcHNob3R0
aW5nXSkgeworICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zbmFwc2hvdFJlY3RJbkNv
bnRlbnRWaWV3Q29vcmRpbmF0ZXM6c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgc25h
cHNob3RXaWR0aDppbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVy
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEhBVkUoQ09SRV9BTklNQVRJT05fUkVO
REVSX1NFUlZFUikgJiYgSEFWRShJT1NVUkZBQ0UpCisgICAgLy8gSWYgd2UgYXJlIHBhcmVudGVk
IGFuZCBub3QgaGlkZGVuLCBhbmQgdGh1cyB3b24ndCBpbmN1ciBhIHNpZ25pZmljYW50IHBlbmFs
dHkgZnJvbSBwYWdpbmcgaW4gdGlsZXMsIHNuYXBzaG90IHRoZSB2aWV3IGhpZXJhcmNoeSBkaXJl
Y3RseS4KKyAgICBOU1N0cmluZyAqZGlzcGxheU5hbWUgPSBzZWxmLndpbmRvdy5zY3JlZW4uZGlz
cGxheUNvbmZpZ3VyYXRpb24ubmFtZTsKKyAgICBpZiAoZGlzcGxheU5hbWUgJiYgIXNlbGYud2lu
ZG93LmhpZGRlbikgeworICAgICAgICBhdXRvIHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6
OmNyZWF0ZShXZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGltYWdl
U2l6ZSkpLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKKyAgICAgICAgaWYgKCFzdXJm
YWNlKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDR0Zsb2F0IGltYWdlU2NhbGVJblZpZXdD
b29yZGluYXRlcyA9IGltYWdlV2lkdGggLyByZWN0SW5WaWV3Q29vcmRpbmF0ZXMuc2l6ZS53aWR0
aDsKKyAgICAgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNj
YWxlKGltYWdlU2NhbGVJblZpZXdDb29yZGluYXRlcywgaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5h
dGVzLCAxKTsKKyAgICAgICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFu
c2Zvcm0sIC1yZWN0SW5WaWV3Q29vcmRpbmF0ZXMub3JpZ2luLngsIC1yZWN0SW5WaWV3Q29vcmRp
bmF0ZXMub3JpZ2luLnksIDApOworICAgICAgICBDQVJlbmRlclNlcnZlclJlbmRlckRpc3BsYXlM
YXllcldpdGhUcmFuc2Zvcm1BbmRUaW1lT2Zmc2V0KE1BQ0hfUE9SVF9OVUxMLCAoQ0ZTdHJpbmdS
ZWYpZGlzcGxheU5hbWUsIHNlbGYubGF5ZXIuY29udGV4dC5jb250ZXh0SWQsIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDY0X3Q+KHNlbGYubGF5ZXIpLCBzdXJmYWNlLT5zdXJmYWNlKCksIDAsIDAsICZ0
cmFuc2Zvcm0sIDApOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpJT1N1cmZh
Y2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShzdXJmYWNlKSkuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAg
ICAgIEFTU0VSVCghW1tfY3VzdG9tQ29udGVudFZpZXcgY2xhc3NdIHdlYl9yZXF1aXJlc0N1c3Rv
bVNuYXBzaG90dGluZ10pOworICAgICAgICBVSUdyYXBoaWNzQmVnaW5JbWFnZUNvbnRleHRXaXRo
T3B0aW9ucyhpbWFnZVNpemUsIFlFUywgMSk7CisKKyAgICAgICAgVUlWaWV3ICpjdXN0b21Db250
ZW50VmlldyA9IF9jdXN0b21Db250ZW50Vmlldy5nZXQoKTsKKyAgICAgICAgW2N1c3RvbUNvbnRl
bnRWaWV3LmJhY2tncm91bmRDb2xvciBzZXRdOworICAgICAgICBVSVJlY3RGaWxsKENHUmVjdE1h
a2UoMCwgMCwgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpKTsKKworICAgICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IFVJR3JhcGhpY3NHZXRDdXJyZW50Q29udGV4dCgpOworICAgICAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLXNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5h
dGVzLm9yaWdpbi54ICogaW1hZ2VTY2FsZSwgLXNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5h
dGVzLm9yaWdpbi55ICogaW1hZ2VTY2FsZSk7CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNv
bnRleHQsIGltYWdlU2NhbGUsIGltYWdlU2NhbGUpOworICAgICAgICBbY3VzdG9tQ29udGVudFZp
ZXcubGF5ZXIgcmVuZGVySW5Db250ZXh0OmNvbnRleHRdOworCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFtVSUdyYXBoaWNzR2V0SW1hZ2VGcm9tQ3VycmVudEltYWdlQ29udGV4dCgpIENHSW1h
Z2VdKTsKKworICAgICAgICBVSUdyYXBoaWNzRW5kSW1hZ2VDb250ZXh0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICB2b2lkKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoQ0dJbWFn
ZVJlZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAgX3BhZ2UtPnRha2VTbmFwc2hv
dChXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5h
dGVzKSwgV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShpbWFnZVNp
emUpKSwgV2ViS2l0OjpTbmFwc2hvdE9wdGlvbnNFeGNsdWRlRGV2aWNlU2NhbGVGYWN0b3IsIFs9
XShjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgV2Vi
S2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAgIGlmIChpbWFnZUhhbmRsZS5pc051
bGwoKSkgeworICAgICAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Cisg
ICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGJpdG1hcCA9IFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQ
cm90ZWN0aW9uOjpSZWFkT25seSk7CisKKyAgICAgICAgaWYgKCFiaXRtYXApIHsKKyAgICAgICAg
ICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAgW2NvcGll
ZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2U7CisgICAgICAgIGNn
SW1hZ2UgPSBiaXRtYXAtPm1ha2VDR0ltYWdlKCk7CisgICAgICAgIGNvcGllZENvbXBsZXRpb25I
YW5kbGVyKGNnSW1hZ2UuZ2V0KCkpOworICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIg
cmVsZWFzZV07CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVy
c1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTooQ0dTaXplKW1pbmltdW1MYXlvdXRTaXplIG1heGltdW1V
bm9ic2N1cmVkU2l6ZU92ZXJyaWRlOihDR1NpemUpbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGUKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1bV0tX
ZWJWaWV3ICIgPDwgX3BhZ2UtPmlkZW50aWZpZXIoKSA8PCAiIF9vdmVycmlkZUxheW91dFBhcmFt
ZXRlcnNXaXRoTWluaW11bUxheW91dFNpemU6IiA8PCBXZWJDb3JlOjpGbG9hdFNpemUobWluaW11
bUxheW91dFNpemUpIDw8ICIgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6IiA8PCBXZWJD
b3JlOjpGbG9hdFNpemUobWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpIDw8ICJdIik7CisK
KyAgICBbc2VsZiBfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTptaW5pbXVtTGF5b3V0U2l6ZV07
CisgICAgW3NlbGYgX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOm1heGltdW1Vbm9i
c2N1cmVkU2l6ZU92ZXJyaWRlXTsKK30KKworLSAodm9pZClfY2xlYXJPdmVycmlkZUxheW91dFBh
cmFtZXRlcnMKK3sKKyAgICBfdmlld0xheW91dFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9wdDsK
KyAgICBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUgPSBXVEY6Om51bGxvcHQ7Cit9CisK
K3N0YXRpYyBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzPiB2aWV3cG9y
dEFyZ3VtZW50c0Zyb21EaWN0aW9uYXJ5KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0cmlu
ZyAqPiAqdmlld3BvcnRBcmd1bWVudFBhaXJzLCBib29sIHZpZXdwb3J0Rml0RW5hYmxlZCkKK3sK
KyAgICBpZiAoIXZpZXdwb3J0QXJndW1lbnRQYWlycykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRz
KFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWaWV3cG9ydE1ldGEpOworCisgICAgW3ZpZXdw
b3J0QXJndW1lbnRQYWlycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6bWFrZUJs
b2NrUHRyKFsmXSAoTlNTdHJpbmcgKmtleSwgTlNTdHJpbmcgKnZhbHVlLCBCT09MKiBzdG9wKSB7
CisgICAgICAgIGlmICghW2tleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dIHx8ICFb
dmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCItW1dLV2Vi
VmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6XTogS2V5cyBhbmQgdmFsdWVzIG11
c3QgYWxsIGJlIE5TU3RyaW5ncy4iXTsKKyAgICAgICAgU3RyaW5nIGtleVN0cmluZyA9IGtleTsK
KyAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWU7CisgICAgICAgIFdlYkNvcmU6OnNl
dFZpZXdwb3J0RmVhdHVyZSh2aWV3cG9ydEFyZ3VtZW50cywga2V5U3RyaW5nLCB2YWx1ZVN0cmlu
Zywgdmlld3BvcnRGaXRFbmFibGVkLCBbXSAoV2ViQ29yZTo6Vmlld3BvcnRFcnJvckNvZGUsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7CisgICAgICAgICAgICBOU0xvZyhAIi1bV0tXZWJW
aWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBFcnJvciBwYXJzaW5nIHZpZXdw
b3J0IGFyZ3VtZW50OiAlcyIsIGVycm9yTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
fSk7CisgICAgfSkuZ2V0KCldOworCisgICAgcmV0dXJuIHZpZXdwb3J0QXJndW1lbnRzOworfQor
CistICh2b2lkKV9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIE5TU3RyaW5nICo+ICopYXJndW1lbnRzCit7CisgICAgaWYgKCFfcGFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX3BhZ2UtPnNldE92ZXJyaWRlVmlld3BvcnRBcmd1bWVudHMo
dmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeShhcmd1bWVudHMsIF9wYWdlLT5wcmVmZXJl
bmNlcygpLnZpZXdwb3J0Rml0RW5hYmxlZCgpKSk7Cit9CisKKy0gKFVJVmlldyAqKV92aWV3Rm9y
RmluZFVJCit7CisgICAgcmV0dXJuIFtzZWxmIHZpZXdGb3Jab29taW5nSW5TY3JvbGxWaWV3Oltz
ZWxmIHNjcm9sbFZpZXddXTsKK30KKworLSAodm9pZClfc2V0T3ZlcmxhaWRBY2Nlc3NvcnlWaWV3
c0luc2V0OihDR1NpemUpaW5zZXQKK3sKKyAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zZXRP
dmVybGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6aW5zZXRdOworfQorCistICh2b2lkICheKSh2b2lk
KSlfcmV0YWluQWN0aXZlRm9jdXNlZFN0YXRlCit7CisgICAgKytfYWN0aXZlRm9jdXNlZFN0YXRl
UmV0YWluQ291bnQ7CisKKyAgICAvLyBGSVhNRTogVXNlIHNvbWV0aGluZyBsaWtlIENvbXBsZXRp
b25IYW5kbGVyQ2FsbENoZWNrZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGJsb2NrIGlz
IGNhbGxlZCBiZWZvcmUgaXQncyByZWxlYXNlZC4KKyAgICByZXR1cm4gW1tbc2VsZl0geworICAg
ICAgICAtLV9hY3RpdmVGb2N1c2VkU3RhdGVSZXRhaW5Db3VudDsKKyAgICB9IGNvcHldIGF1dG9y
ZWxlYXNlXTsKK30KKworLSAodm9pZClfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9u
TW92aW5nRm9yd2FyZDooQk9PTClzZWxlY3RpbmdGb3J3YXJkIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShCT09MIGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIHR5cGVvZihjb21wbGV0aW9uSGFuZGxlcikgY29tcGxldGlvbkhhbmRsZXJDb3B5ID0g
bmlsOworICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXJDb3B5ID0gQmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7CisKKyAgICBbX2NvbnRlbnRW
aWV3IF9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3YXJkOnNlbGVj
dGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6W2NvbXBsZXRpb25IYW5kbGVyQ29weV0oQk9P
TCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcikgeworICAgICAgICBpZiAoIWNvbXBsZXRpb25IYW5k
bGVyQ29weSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
ckNvcHkoZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpOworICAgICAgICBCbG9ja19yZWxlYXNlKGNv
bXBsZXRpb25IYW5kbGVyQ29weSk7CisgICAgfV07Cit9CisKKy0gKGlkKV9zbmFwc2hvdExheWVy
Q29udGVudHNGb3JCYWNrRm9yd2FyZExpc3RJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilp
dGVtCit7CisgICAgaWYgKF9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgpID09
ICZpdGVtLl9pdGVtKQorICAgICAgICBfcGFnZS0+cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KCpf
cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkuY3VycmVudEl0ZW0oKSk7CisKKyAgICBpZiAoYXV0byog
dmlld1NuYXBzaG90ID0gaXRlbS5faXRlbS5zbmFwc2hvdCgpKQorICAgICAgICByZXR1cm4gdmll
d1NuYXBzaG90LT5hc0xheWVyQ29udGVudHMoKTsKKworICAgIHJldHVybiBuaWw7Cit9CisKKy0g
KE5TQXJyYXkgKilfZGF0YURldGVjdGlvblJlc3VsdHMKK3sKKyNpZiBFTkFCTEUoREFUQV9ERVRF
Q1RJT04pCisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2RhdGFEZXRlY3Rpb25SZXN1bHRzXTsK
KyNlbHNlCisgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgorfQorCistICh2b2lkKV9hY2Nlc3NpYmls
aXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhU
ZXh0OihOU1N0cmluZyAqKXRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8
TlNWYWx1ZSAqPiAqcmVjdHMpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW19jb250ZW50Vmll
dyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDpvZmZzZXQgd2l0
aFRleHQ6dGV4dCBjb21wbGV0aW9uSGFuZGxlcjpbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
U2VsZWN0aW9uUmVjdD4mIHNlbGVjdGlvblJlY3RzKSB7CisgICAgICAgIGlmICghY2FwdHVyZWRD
b21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byByZWN0
VmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5
OnNlbGVjdGlvblJlY3RzLnNpemUoKV0pOworICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdGlvblJl
Y3QgOiBzZWxlY3Rpb25SZWN0cykKKyAgICAgICAgICAgIFtyZWN0VmFsdWVzIGFkZE9iamVjdDpb
TlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6c2VsZWN0aW9uUmVjdC5yZWN0KCldXTsKKyAgICAgICAg
Y2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihyZWN0VmFsdWVzLmdldCgpKTsKKyAgICB9XTsKK30K
KworLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uCit7CisgICAgW19jb250ZW50
VmlldyBfYWNjZXNzaWJpbGl0eVN0b3JlU2VsZWN0aW9uXTsKK30KKworLSAodm9pZClfYWNjZXNz
aWJpbGl0eUNsZWFyU2VsZWN0aW9uCit7CisgICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0
eUNsZWFyU2VsZWN0aW9uXTsKK30KKworLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlU3Bl
YWtTZWxlY3Rpb25Db250ZW50Cit7CisgICAgW19jb250ZW50VmlldyBhY2Nlc3NpYmlsaXR5UmV0
cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnRdOworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBmb3Ig
c3ViY2xhc3NlcyB0byBvdmVycmlkZS4KKy8vIEN1cnJlbnRseSBpdCdzIG9ubHkgaW4gVGVzdFJ1
bm5lcldLV2ViVmlldy4KKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlEaWRHZXRTcGVha1NlbGVjdGlv
bkNvbnRlbnQ6KE5TU3RyaW5nICopY29udGVudAoreworfQorCistIChVSVZpZXcgKilfZnVsbFNj
cmVlblBsYWNlaG9sZGVyVmlldworeworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBp
ZiAoW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3JlZW5dKQorICAgICAgICBy
ZXR1cm4gW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3UGxhY2Vob2xkZXJdOwor
I2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICByZXR1cm4gbmlsOworfQorCitA
ZW5kIC8vIFdLV2ViVmlldyAoV0tQcml2YXRlSU9TKQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQorCitAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChGdWxsU2NyZWVuQVBJX1ByaXZhdGUp
CisKKy0gKEJPT0wpaGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4g
ISFfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7Cit9CisKKy0gKHZvaWQpY2xvc2VGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcgoreworICAgIGlmICghX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IGNsb3NlXTsKKyAgICBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgPSBudWxscHRyOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEZ1bGxTY3JlZW5BUElfSW50ZXJu
YWwpCisKKy0gKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgKilmdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcgoreworICAgIGlmICghX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKQorICAg
ICAgICBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OnNlbGZdKTsKKworICAgIHJl
dHVybiBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuZ2V0KCk7Cit9CisKK0BlbmQKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworQGltcGxlbWVudGF0aW9uIFdLV2ViVmll
dyAoX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyKQorCistIChDbGFzcylfcHJpbnRGb3JtYXR0ZXJD
bGFzcworeworICAgIHJldHVybiBbX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyIGNsYXNzXTsKK30K
KworLSAoaWQgPF9XS1dlYlZpZXdQcmludFByb3ZpZGVyPilfcHJpbnRQcm92aWRlcgoreworICAg
IGlkIHByaW50UHJvdmlkZXIgPSBfY3VzdG9tQ29udGVudFZpZXcgPyBfY3VzdG9tQ29udGVudFZp
ZXcuZ2V0KCkgOiBfY29udGVudFZpZXcuZ2V0KCk7CisgICAgaWYgKFtwcmludFByb3ZpZGVyIGNv
bmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woX1dLV2ViVmlld1ByaW50UHJvdmlkZXIpXSkKKyAg
ICAgICAgcmV0dXJuIHByaW50UHJvdmlkZXI7CisgICAgcmV0dXJuIG5pbDsKK30KKworQGVuZAor
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQppbmRleCA1YTJmMTRm
MjdiZThjMjE3YTc4YzdiYjJhY2I2N2M1NjdkN2ZiN2RkLi4zYjJhMDFlYTZjZjE2YWM0NjQ3NmQ2
MjM1MDBlNWFmNjQ4YzA3Nzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1w
b3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCiAjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tX
ZWJWaWV3SU9TLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIl9XS0FjdGl2
YXRlZEVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQppbmRleCBiOTE0ODU3ZTUyY2M0NDNmMDdiYjdmODQ5ZTRkNTgwNGM0Yjlm
MDc3Li5iYjQxZDZlNjk2NWNkNGZhMTY1NTMyODNmZThlZDY0NTJiMmZiMDNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtMzQsNiArMzQsNyBAQAogI2lt
cG9ydCAiV0tCcm93c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaCIKICNpbXBvcnQgIldLTlNEYXRh
LmgiCiAjaW1wb3J0ICJXS1Byb2Nlc3NHcm91cFByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmll
d01hYy5oIgogI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIgogI2ltcG9ydCAiV2Vi
S2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgpAQCAtMTQ3NCw0MCAr
MTQ3NSw2IEBAIC0gKENHRmxvYXQpX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzCiAgICAgcmV0dXJuIF9k
YXRhLT5faW1wbC0+dG90YWxIZWlnaHRPZkJhbm5lcnMoKTsKIH0KIAotc3RhdGljIE9wdGlvbmFs
PFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZT4gdG9Db3JlU2Nyb2xsYmFyU3R5bGUoX1dL
T3ZlcmxheVNjcm9sbGJhclN0eWxlIHNjcm9sbGJhclN0eWxlKQotewotICAgIHN3aXRjaCAoc2Ny
b2xsYmFyU3R5bGUpIHsKLSAgICBjYXNlIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZURhcms6Ci0g
ICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVEYXJrOwotICAgIGNh
c2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlTGlnaHQ6Ci0gICAgICAgIHJldHVybiBXZWJDb3Jl
OjpTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKLSAgICBjYXNlIF9XS092ZXJsYXlTY3JvbGxi
YXJTdHlsZURlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5
U3R5bGVEZWZhdWx0OwotICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlQXV0b21hdGlj
OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUgdG9BUElTY3Jv
bGxiYXJTdHlsZShPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGU+IGNvcmVT
Y3JvbGxiYXJTdHlsZSkKLXsKLSAgICBpZiAoIWNvcmVTY3JvbGxiYXJTdHlsZSkKLSAgICAgICAg
cmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZUF1dG9tYXRpYzsKLQotICAgIHN3aXRjaCAo
Y29yZVNjcm9sbGJhclN0eWxlLnZhbHVlKCkpIHsKLSAgICBjYXNlIFdlYkNvcmU6OlNjcm9sbGJh
ck92ZXJsYXlTdHlsZURhcms6Ci0gICAgICAgIHJldHVybiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5
bGVEYXJrOwotICAgIGNhc2UgV2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlTGlnaHQ6Ci0g
ICAgICAgIHJldHVybiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVMaWdodDsKLSAgICBjYXNlIFdl
YkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZURlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBfV0tP
dmVybGF5U2Nyb2xsYmFyU3R5bGVEZWZhdWx0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVBdXRvbWF0aWM7Ci0gICAgfQotfQotCiAtICh2b2lk
KV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSlzY3Jv
bGxiYXJTdHlsZQogewogICAgIF9kYXRhLT5faW1wbC0+c2V0T3ZlcmxheVNjcm9sbGJhclN0eWxl
KHRvQ29yZVNjcm9sbGJhclN0eWxlKHNjcm9sbGJhclN0eWxlKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdNYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZWE1YzIxZmVi
MmE1OTA1OGVkOGIyMTU5Njc4Y2U3YTVhMjUwMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdNYWMuaApAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKworI2lmIFBMQVRG
T1JNKE1BQykKKworI2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKKyNpbXBvcnQgIl9XS092ZXJsYXlT
Y3JvbGxiYXJTdHlsZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxUeXBlcy5oPgorCitAcHJv
dG9jb2wgV2ViVmlld0ltcGxEZWxlZ2F0ZTsKKworX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlIHRv
QVBJU2Nyb2xsYmFyU3R5bGUoT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxl
Pik7CitPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGU+IHRvQ29yZVNjcm9s
bGJhclN0eWxlKF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSk7CisKK0BpbnRlcmZhY2UgV0tXZWJW
aWV3IChXS0ludGVybmFsTWFjKSA8V2ViVmlld0ltcGxEZWxlZ2F0ZT4KKworLSAodm9pZClfdGFr
ZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uSW50ZXJuYWw6KGlkKXNlbmRlcjsKKy0gKHZvaWQpaW5z
ZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFjZW1lbnRS
YW5nZTsKKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld01hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTZhMTU1
ODUxNzA3NmRiZDQxZWMxNDM3ZDBhMTVlNDZmMTVkN2YxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL21hYy9XS1dlYlZpZXdNYWMubW0KQEAgLTAsMCArMSwx
NjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldL
V2ViVmlld01hYy5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJBcHBLaXRTUEku
aCIKKyNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIKKyNpbXBvcnQgIldLU2FmZUJyb3dzaW5nV2Fy
bmluZy5oIgorI2ltcG9ydCAiV0tUZXh0RmluZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJXS1VJRGVs
ZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0ICJX
ZWJWaWV3SW1wbC5oIgorI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgorI2ltcG9y
dCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCisjaW1wb3J0IDxwYWwvc3BpL21hYy9OU1Rl
eHRGaW5kZXJTUEkuaD4KKworX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlIHRvQVBJU2Nyb2xsYmFy
U3R5bGUoT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiBjb3JlU2Nyb2xs
YmFyU3R5bGUpCit7CisgICAgaWYgKCFjb3JlU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHJldHVy
biBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVBdXRvbWF0aWM7CisgICAgCisgICAgc3dpdGNoIChj
b3JlU2Nyb2xsYmFyU3R5bGUudmFsdWUoKSkgeworICAgIGNhc2UgV2ViQ29yZTo6U2Nyb2xsYmFy
T3ZlcmxheVN0eWxlRGFyazoKKyAgICAgICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHls
ZURhcms7CisgICAgY2FzZSBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDoKKyAg
ICAgICAgcmV0dXJuIF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZUxpZ2h0OworICAgIGNhc2UgV2Vi
Q29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIF9XS092
ZXJsYXlTY3JvbGxiYXJTdHlsZURlZmF1bHQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGVBdXRvbWF0aWM7Cit9CisK
K09wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZT4gdG9Db3JlU2Nyb2xsYmFy
U3R5bGUoX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlIHNjcm9sbGJhclN0eWxlKQoreworICAgIHN3
aXRjaCAoc2Nyb2xsYmFyU3R5bGUpIHsKKyAgICBjYXNlIF9XS092ZXJsYXlTY3JvbGxiYXJTdHls
ZURhcms6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVEYXJr
OworICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlTGlnaHQ6CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKKyAgICBjYXNlIF9XS092ZXJs
YXlTY3JvbGxiYXJTdHlsZURlZmF1bHQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxi
YXJPdmVybGF5U3R5bGVEZWZhdWx0OworICAgIGNhc2UgX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxl
QXV0b21hdGljOgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLSW1wbGVtZW50YXRpb25NYWMpIDxOU1Rl
eHRJbnB1dENsaWVudAorICAgICwgTlNUZXh0SW5wdXRDbGllbnRfQXN5bmMKKyNpZiBIQVZFKFRP
VUNIX0JBUikKKyAgICAsIE5TVG91Y2hCYXJQcm92aWRlcgorI2VuZGlmCisjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKKyAgICAsIE5TRmlsZVByb21pc2VQcm92aWRlckRlbGVnYXRlCisgICAgLCBO
U0RyYWdnaW5nU291cmNlCisjZW5kaWYKKyAgICA+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
S1dlYlZpZXcgKFdLSW1wbGVtZW50YXRpb25NYWMpCisKKyNwcmFnbWEgbWFyayAtIE5TVmlldyBv
dmVycmlkZXMKKworLSAoQk9PTClhY2NlcHRzRmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4g
X2ltcGwtPmFjY2VwdHNGaXJzdFJlc3BvbmRlcigpOworfQorCistIChCT09MKWJlY29tZUZpcnN0
UmVzcG9uZGVyCit7CisgICAgcmV0dXJuIF9pbXBsLT5iZWNvbWVGaXJzdFJlc3BvbmRlcigpOwor
fQorCistIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCit7CisgICAgcmV0dXJuIF9pbXBsLT5y
ZXNpZ25GaXJzdFJlc3BvbmRlcigpOworfQorCistICh2b2lkKXZpZXdXaWxsU3RhcnRMaXZlUmVz
aXplCit7CisgICAgX2ltcGwtPnZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCk7Cit9CisKKy0gKHZv
aWQpdmlld0RpZEVuZExpdmVSZXNpemUKK3sKKyAgICBfaW1wbC0+dmlld0RpZEVuZExpdmVSZXNp
emUoKTsKK30KKworLSAoQk9PTClpc0ZsaXBwZWQKK3sKKyAgICByZXR1cm4gWUVTOworfQorCist
IChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUKK3sKKyAgICByZXR1cm4gTlNTaXplRnJvbUNH
U2l6ZShfaW1wbC0+aW50cmluc2ljQ29udGVudFNpemUoKSk7Cit9CisKKy0gKHZvaWQpcHJlcGFy
ZUNvbnRlbnRJblJlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgX2ltcGwtPnByZXBhcmVDb250ZW50
SW5SZWN0KE5TUmVjdFRvQ0dSZWN0KHJlY3QpKTsKK30KKworLSAodm9pZClzZXRGcmFtZVNpemU6
KE5TU2l6ZSlzaXplCit7CisgICAgW3N1cGVyIHNldEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3Nh
ZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2VsZi5ib3VuZHNdOworICAgIF9pbXBsLT5zZXRG
cmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkpOworfQorCistICh2b2lkKXNldFVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb246KE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbil1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uCit7CisgICAgW3N1cGVyIHNldFVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb246dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbl07CisKKyAgICBfaW1w
bC0+c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uKTsKK30KKworQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0g
KHZvaWQpcmVuZXdHU3RhdGUKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAor
eworICAgIF9pbXBsLT5yZW5ld0dTdGF0ZSgpOworICAgIFtzdXBlciByZW5ld0dTdGF0ZV07Cit9
CisKKyNwcmFnbWEgbWFyayAtIG1hY09TIElCQWN0aW9uL05TUmVzcG9uZGVyCisKKyNkZWZpbmUg
V0VCQ09SRV9DT01NQU5EKGNvbW1hbmQpIC0gKHZvaWQpY29tbWFuZDooaWQpc2VuZGVyIHsgX2lt
cGwtPmV4ZWN1dGVFZGl0Q29tbWFuZEZvclNlbGVjdG9yKF9jbWQpOyB9CisKK1dFQkNPUkVfQ09N
TUFORChhbGlnbkNlbnRlcikKK1dFQkNPUkVfQ09NTUFORChhbGlnbkp1c3RpZmllZCkKK1dFQkNP
UkVfQ09NTUFORChhbGlnbkxlZnQpCitXRUJDT1JFX0NPTU1BTkQoYWxpZ25SaWdodCkKK1dFQkNP
UkVfQ09NTUFORChjb3B5KQorV0VCQ09SRV9DT01NQU5EKGN1dCkKK1dFQkNPUkVfQ09NTUFORChk
ZWxldGUpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlQmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQo
ZGVsZXRlQmFja3dhcmRCeURlY29tcG9zaW5nUHJldmlvdXNDaGFyYWN0ZXIpCitXRUJDT1JFX0NP
TU1BTkQoZGVsZXRlRm9yd2FyZCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09m
TGluZSkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoKQorV0VC
Q09SRV9DT01NQU5EKGRlbGV0ZVRvRW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRv
RW5kT2ZQYXJhZ3JhcGgpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9NYXJrKQorV0VCQ09SRV9D
T01NQU5EKGRlbGV0ZVdvcmRCYWNrd2FyZCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkRm9y
d2FyZCkKK1dFQkNPUkVfQ09NTUFORChpZ25vcmVTcGVsbGluZykKK1dFQkNPUkVfQ09NTUFORChp
bmRlbnQpCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0QmFja3RhYikKK1dFQkNPUkVfQ09NTUFORChp
bnNlcnRMaW5lQnJlYWspCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZSkKK1dFQkNPUkVf
Q09NTUFORChpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcikKK1dFQkNPUkVfQ09NTUFO
RChpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiKQor
V0VCQ09SRV9DT01NQU5EKGluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3IpCitXRUJDT1JFX0NP
TU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQpCitXRUJDT1JFX0NPTU1B
TkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCkKK1dFQkNPUkVfQ09NTUFORChtYWtl
VGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlQmFj
a3dhcmQpCitXRUJDT1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQor
V0VCQ09SRV9DT01NQU5EKG1vdmVEb3duKQorV0VCQ09SRV9DT01NQU5EKG1vdmVEb3duQW5kTW9k
aWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3YXJkKQorV0VCQ09SRV9DT01N
QU5EKG1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVM
ZWZ0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09S
RV9DT01NQU5EKG1vdmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNP
UkVfQ09NTUFORChtb3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNP
UkVfQ09NTUFORChtb3ZlUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0QW5kTW9kaWZ5
U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQpCitX
RUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlv
bikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkxpbmUpCitXRUJDT1JFX0NPTU1B
TkQobW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01N
QU5EKG1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0Jl
Z2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0JlZ2lubmluZ09mU2VudGVuY2UpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5n
T2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRP
ZkRvY3VtZW50KQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlT
ZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lKQorV0VCQ09SRV9DT01N
QU5EKG1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORCht
b3ZlVG9FbmRPZlBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBhcmFncmFw
aEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlNlbnRlbmNl
KQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mU2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24p
CitXRUJDT1JFX0NPTU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZSkKK1dFQkNPUkVfQ09NTUFORCht
b3ZlVG9MZWZ0RW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVUb1JpZ2h0RW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5l
QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVVcCkKK1dFQkNPUkVfQ09N
TUFORChtb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRC
YWNrd2FyZCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkRm9yd2FyZCkKK1dFQkNPUkVfQ09NTUFORCht
b3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdv
cmRMZWZ0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikK
K1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZFJpZ2h0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3Jk
UmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQob3V0ZGVudCkKK1dFQkNP
UkVfQ09NTUFORChwYWdlRG93bikKK1dFQkNPUkVfQ09NTUFORChwYWdlRG93bkFuZE1vZGlmeVNl
bGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChwYWdlVXApCitXRUJDT1JFX0NPTU1BTkQocGFnZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKHBhc3RlKQorV0VCQ09SRV9DT01N
QU5EKHBhc3RlQXNQbGFpblRleHQpCitXRUJDT1JFX0NPTU1BTkQoc2Nyb2xsUGFnZURvd24pCitX
RUJDT1JFX0NPTU1BTkQoc2Nyb2xsUGFnZVVwKQorV0VCQ09SRV9DT01NQU5EKHNjcm9sbExpbmVE
b3duKQorV0VCQ09SRV9DT01NQU5EKHNjcm9sbExpbmVVcCkKK1dFQkNPUkVfQ09NTUFORChzY3Jv
bGxUb0JlZ2lubmluZ09mRG9jdW1lbnQpCitXRUJDT1JFX0NPTU1BTkQoc2Nyb2xsVG9FbmRPZkRv
Y3VtZW50KQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdEFsbCkKK1dFQkNPUkVfQ09NTUFORChzZWxl
Y3RMaW5lKQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdFBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFO
RChzZWxlY3RTZW50ZW5jZSkKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RUb01hcmspCitXRUJDT1JF
X0NPTU1BTkQoc2VsZWN0V29yZCkKK1dFQkNPUkVfQ09NTUFORChzZXRNYXJrKQorV0VCQ09SRV9D
T01NQU5EKHN1YnNjcmlwdCkKK1dFQkNPUkVfQ09NTUFORChzdXBlcnNjcmlwdCkKK1dFQkNPUkVf
Q09NTUFORChzd2FwV2l0aE1hcmspCitXRUJDT1JFX0NPTU1BTkQodGFrZUZpbmRTdHJpbmdGcm9t
U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKHRyYW5zcG9zZSkKK1dFQkNPUkVfQ09NTUFORCh1
bmRlcmxpbmUpCitXRUJDT1JFX0NPTU1BTkQodW5zY3JpcHQpCitXRUJDT1JFX0NPTU1BTkQoeWFu
aykKK1dFQkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0KQorCisjdW5kZWYgV0VCQ09SRV9DT01N
QU5ECisKKy0gKEJPT0wpd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAq
KXBhc3RlYm9hcmQgdHlwZXM6KE5TQXJyYXkgKil0eXBlcworeworICAgIHJldHVybiBfaW1wbC0+
d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQocGFzdGVib2FyZCwgdHlwZXMpOworfQorCistICh2
b2lkKWNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6KGlkKXNlbmRlcgoreworICAgIF9pbXBs
LT5jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCk7Cit9CisKKy0gKGlkKXZhbGlkUmVxdWVz
dG9yRm9yU2VuZFR5cGU6KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNTdHJpbmcg
KilyZXR1cm5UeXBlCit7CisgICAgcmV0dXJuIF9pbXBsLT52YWxpZFJlcXVlc3RvckZvclNlbmRB
bmRSZXR1cm5UeXBlcyhzZW5kVHlwZSwgcmV0dXJuVHlwZSk7Cit9CisKKy0gKEJPT0wpcmVhZFNl
bGVjdGlvbkZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAg
cmV0dXJuIF9pbXBsLT5yZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCk7Cit9
CisKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCistICh2b2lkKWNoYW5n
ZUZvbnQ6KGlkKXNlbmRlcgorQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECit7
CisgICAgX2ltcGwtPmNoYW5nZUZvbnRGcm9tRm9udE1hbmFnZXIoKTsKK30KKworQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0gKHZvaWQpY2hhbmdlQ29sb3I6KGlkKXNl
bmRlcgorQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KK3sKKyAgICBfaW1w
bC0+Y2hhbmdlRm9udENvbG9yRnJvbVNlbmRlcihzZW5kZXIpOworfQorCistICh2b2lkKWNoYW5n
ZUF0dHJpYnV0ZXM6KGlkKXNlbmRlcgoreworICAgIF9pbXBsLT5jaGFuZ2VGb250QXR0cmlidXRl
c0Zyb21TZW5kZXIoc2VuZGVyKTsKK30KKworLSAoSUJBY3Rpb24pc3RhcnRTcGVha2luZzooaWQp
c2VuZGVyCit7CisgICAgX2ltcGwtPnN0YXJ0U3BlYWtpbmcoKTsKK30KKworLSAoSUJBY3Rpb24p
c3RvcFNwZWFraW5nOihpZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+c3RvcFNwZWFraW5nKHNlbmRl
cik7Cit9CisKKy0gKElCQWN0aW9uKXNob3dHdWVzc1BhbmVsOihpZClzZW5kZXIKK3sKKyAgICBf
aW1wbC0+c2hvd0d1ZXNzUGFuZWwoc2VuZGVyKTsKK30KKworLSAoSUJBY3Rpb24pY2hlY2tTcGVs
bGluZzooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPmNoZWNrU3BlbGxpbmcoKTsKK30KKworLSAo
dm9pZCljaGFuZ2VTcGVsbGluZzooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPmNoYW5nZVNwZWxs
aW5nKHNlbmRlcik7Cit9CisKKy0gKElCQWN0aW9uKXRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nOihpZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tp
bmcoKTsKK30KKworLSAoQk9PTClpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQKK3sKKyAgICByZXR1
cm4gX2ltcGwtPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworfQorCistICh2b2lkKXNldEdy
YW1tYXJDaGVja2luZ0VuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIF9pbXBsLT5zZXRHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKGZsYWcpOworfQorCistIChJQkFjdGlvbil0b2dnbGVHcmFtbWFyQ2hl
Y2tpbmc6KGlkKXNlbmRlcgoreworICAgIF9pbXBsLT50b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKTsK
K30KKworLSAoSUJBY3Rpb24pdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOihpZClz
ZW5kZXIKK3sKKyAgICBfaW1wbC0+dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCk7
Cit9CisKKy0gKHZvaWQpb3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyCit7
CisgICAgX2ltcGwtPm9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWwoc2VuZGVyKTsKK30KKwor
LSAoSUJBY3Rpb24pdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcgoreworICAgIF9p
bXBsLT50b2dnbGVTbWFydEluc2VydERlbGV0ZSgpOworfQorCistIChCT09MKWlzQXV0b21hdGlj
UXVvdGVTdWJzdGl0dXRpb25FbmFibGVkCit7CisgICAgcmV0dXJuIF9pbXBsLT5pc0F1dG9tYXRp
Y1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY1F1
b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgX2ltcGwtPnNldEF1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZChmbGFnKTsKK30KKworLSAodm9pZCl0b2dnbGVB
dXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPnRvZ2ds
ZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uKCk7Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0aWNE
YXNoU3Vic3RpdHV0aW9uRW5hYmxlZAoreworICAgIHJldHVybiBfaW1wbC0+aXNBdXRvbWF0aWNE
YXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY0Rhc2hT
dWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBfaW1wbC0+c2V0QXV0b21hdGlj
RGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoZmxhZyk7Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbjooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPnRvZ2dsZUF1dG9t
YXRpY0Rhc2hTdWJzdGl0dXRpb24oKTsKK30KKworLSAoQk9PTClpc0F1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkCit7CisgICAgcmV0dXJuIF9pbXBsLT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rp
b25FbmFibGVkKCk7Cit9CisKKy0gKHZvaWQpc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJs
ZWQ6KEJPT0wpZmxhZworeworICAgIF9pbXBsLT5zZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZChmbGFnKTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihp
ZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+dG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbigpOwor
fQorCistIChCT09MKWlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZAoreworICAgIHJl
dHVybiBfaW1wbC0+aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Cit9CisKKy0g
KHZvaWQpc2V0QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDooQk9PTClmbGFnCit7Cisg
ICAgX2ltcGwtPnNldEF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoZmxhZyk7Cit9CisK
Ky0gKHZvaWQpdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXIKK3sKKyAg
ICBfaW1wbC0+dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50KCk7Cit9CisKKy0gKHZvaWQp
dXBwZXJjYXNlV29yZDooaWQpc2VuZGVyCit7CisgICAgX2ltcGwtPnVwcGVyY2FzZVdvcmQoKTsK
K30KKworLSAodm9pZClsb3dlcmNhc2VXb3JkOihpZClzZW5kZXIKK3sKKyAgICBfaW1wbC0+bG93
ZXJjYXNlV29yZCgpOworfQorCistICh2b2lkKWNhcGl0YWxpemVXb3JkOihpZClzZW5kZXIKK3sK
KyAgICBfaW1wbC0+Y2FwaXRhbGl6ZVdvcmQoKTsKK30KKworLSAoQk9PTClfd2FudHNLZXlEb3du
Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIHJldHVybiBfaW1wbC0+d2FudHNLZXlE
b3duRm9yRXZlbnQoZXZlbnQpOworfQorCistICh2b2lkKXNjcm9sbFdoZWVsOihOU0V2ZW50ICop
ZXZlbnQKK3sKKyAgICBfaW1wbC0+c2Nyb2xsV2hlZWwoZXZlbnQpOworfQorCistICh2b2lkKXN3
aXBlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfaW1wbC0+c3dpcGVXaXRoRXZl
bnQoZXZlbnQpOworfQorCistICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAorewor
ICAgIF9pbXBsLT5tb3VzZU1vdmVkKGV2ZW50KTsKK30KKworLSAodm9pZCltb3VzZURvd246KE5T
RXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5tb3VzZURvd24oZXZlbnQpOworfQorCistICh2
b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5tb3VzZVVwKGV2ZW50
KTsKK30KKworLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIF9p
bXBsLT5tb3VzZURyYWdnZWQoZXZlbnQpOworfQorCistICh2b2lkKW1vdXNlRW50ZXJlZDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPm1vdXNlRW50ZXJlZChldmVudCk7Cit9CisKKy0g
KHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5tb3VzZUV4
aXRlZChldmVudCk7Cit9CisKKy0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVu
dAoreworICAgIF9pbXBsLT5vdGhlck1vdXNlRG93bihldmVudCk7Cit9CisKKy0gKHZvaWQpb3Ro
ZXJNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5vdGhlck1vdXNl
RHJhZ2dlZChldmVudCk7Cit9CisKKy0gKHZvaWQpb3RoZXJNb3VzZVVwOihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICBfaW1wbC0+b3RoZXJNb3VzZVVwKGV2ZW50KTsKK30KKworLSAodm9pZClyaWdo
dE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPnJpZ2h0TW91c2VEb3du
KGV2ZW50KTsKK30KKworLSAodm9pZClyaWdodE1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgX2ltcGwtPnJpZ2h0TW91c2VEcmFnZ2VkKGV2ZW50KTsKK30KKworLSAodm9pZCly
aWdodE1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIF9pbXBsLT5yaWdodE1vdXNlVXAo
ZXZlbnQpOworfQorCistICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihOU0V2ZW50ICop
ZXZlbnQKK3sKKyAgICBfaW1wbC0+cHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQoZXZlbnQpOworfQor
CistIChCT09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICByZXR1
cm4gX2ltcGwtPmFjY2VwdHNGaXJzdE1vdXNlKGV2ZW50KTsKK30KKworLSAoQk9PTClzaG91bGRE
ZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIHJldHVy
biBfaW1wbC0+c2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50KGV2ZW50KTsKK30KKwor
LSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBfaW1wbC0+
ZG9Db21tYW5kQnlTZWxlY3RvcihzZWxlY3Rvcik7Cit9CisKKy0gKE5TVGV4dElucHV0Q29udGV4
dCAqKWlucHV0Q29udGV4dAoreworICAgIGlmICghX2ltcGwpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIF9pbXBsLT5pbnB1dENvbnRleHQoKTsKK30KKworLSAoQk9PTClwZXJmb3Jt
S2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgcmV0dXJuIF9pbXBsLT5wZXJm
b3JtS2V5RXF1aXZhbGVudChldmVudCk7Cit9CisKKy0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKil0
aGVFdmVudAoreworICAgIF9pbXBsLT5rZXlVcCh0aGVFdmVudCk7Cit9CisKKy0gKHZvaWQpa2V5
RG93bjooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgX2ltcGwtPmtleURvd24odGhlRXZlbnQp
OworfQorCistICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAg
X2ltcGwtPmZsYWdzQ2hhbmdlZCh0aGVFdmVudCk7Cit9CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4
dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsZWN0ZWRSYW5nZSByZXBs
YWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UKK3sKKyAgICBfaW1wbC0+c2V0
TWFya2VkVGV4dChzdHJpbmcsIG5ld1NlbGVjdGVkUmFuZ2UsIHJlcGxhY2VtZW50UmFuZ2UpOwor
fQorCistICh2b2lkKXVubWFya1RleHQKK3sKKyAgICBfaW1wbC0+dW5tYXJrVGV4dCgpOworfQor
CistIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKK3sKKyAgICByZXR1cm4gX2ltcGwtPnNlbGVjdGVk
UmFuZ2UoKTsKK30KKworLSAoQk9PTCloYXNNYXJrZWRUZXh0Cit7CisgICAgcmV0dXJuIF9pbXBs
LT5oYXNNYXJrZWRUZXh0KCk7Cit9CisKKy0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKK3sKKyAgICBy
ZXR1cm4gX2ltcGwtPm1hcmtlZFJhbmdlKCk7Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KWF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOihOU1JhbmdlKW5zUmFuZ2UgYWN0
dWFsUmFuZ2U6KE5TUmFuZ2VQb2ludGVyKWFjdHVhbFJhbmdlCit7CisgICAgcmV0dXJuIF9pbXBs
LT5hdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZShuc1JhbmdlLCBhY3R1YWxSYW5n
ZSk7Cit9CisKKy0gKE5TVUludGVnZXIpY2hhcmFjdGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0
aGVQb2ludAoreworICAgIHJldHVybiBfaW1wbC0+Y2hhcmFjdGVySW5kZXhGb3JQb2ludCh0aGVQ
b2ludCk7Cit9CisKKy0gKHZvaWQpdHlwaW5nQXR0cmlidXRlc1dpdGhDb21wbGV0aW9uSGFuZGxl
cjoodm9pZCheKShOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopKWNvbXBsZXRpb24KK3sK
KyAgICBfaW1wbC0+dHlwaW5nQXR0cmlidXRlc1dpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0
aW9uKTsKK30KKworLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU1Jhbmdl
KXRoZVJhbmdlIGFjdHVhbFJhbmdlOihOU1JhbmdlUG9pbnRlcilhY3R1YWxSYW5nZQoreworICAg
IHJldHVybiBfaW1wbC0+Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGhlUmFuZ2UsIGFjdHVh
bFJhbmdlKTsKK30KKworLSAodm9pZClzZWxlY3RlZFJhbmdlV2l0aENvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSkpY29tcGxldGlvbkhhbmRsZXJQdHIKK3sK
KyAgICBfaW1wbC0+c2VsZWN0ZWRSYW5nZVdpdGhDb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9u
SGFuZGxlclB0cik7Cit9CisKKy0gKHZvaWQpbWFya2VkUmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQoXikoTlNSYW5nZSBtYXJrZWRSYW5nZSkpY29tcGxldGlvbkhhbmRsZXJQdHIKK3sK
KyAgICBfaW1wbC0+bWFya2VkUmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhh
bmRsZXJQdHIpOworfQorCistICh2b2lkKWhhc01hcmtlZFRleHRXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQoXikoQk9PTCBoYXNNYXJrZWRUZXh0KSljb21wbGV0aW9uSGFuZGxlclB0cgorewor
ICAgIF9pbXBsLT5oYXNNYXJrZWRUZXh0V2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25I
YW5kbGVyUHRyKTsKK30KKworLSAodm9pZClhdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRS
YW5nZTooTlNSYW5nZSluc1JhbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0clN0cmluZywgTlNSYW5nZSBhY3R1YWxSYW5nZSkpY29tcGxldGlvbkhh
bmRsZXJQdHIKK3sKKyAgICBfaW1wbC0+YXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFu
Z2UobnNSYW5nZSwgY29tcGxldGlvbkhhbmRsZXJQdHIpOworfQorCistICh2b2lkKWZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlOihOU1JhbmdlKXRoZVJhbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkKF4pKE5TUmVjdCBmaXJzdFJlY3QsIE5TUmFuZ2UgYWN0dWFsUmFuZ2UpKWNvbXBsZXRpb25I
YW5kbGVyUHRyCit7CisgICAgX2ltcGwtPmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHRoZVJh
bmdlLCBjb21wbGV0aW9uSGFuZGxlclB0cik7Cit9CisKKy0gKHZvaWQpY2hhcmFjdGVySW5kZXhG
b3JQb2ludDooTlNQb2ludCl0aGVQb2ludCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU1VJ
bnRlZ2VyKSljb21wbGV0aW9uSGFuZGxlclB0cgoreworICAgIF9pbXBsLT5jaGFyYWN0ZXJJbmRl
eEZvclBvaW50KHRoZVBvaW50LCBjb21wbGV0aW9uSGFuZGxlclB0cik7Cit9CisKKy0gKE5TQXJy
YXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0Cit7CisgICAgcmV0dXJuIF9pbXBsLT52
YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0KCk7Cit9CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQorQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0gKHZvaWQpZHJh
Z2dlZEltYWdlOihOU0ltYWdlICopaW1hZ2UgZW5kZWRBdDooTlNQb2ludCllbmRQb2ludCBvcGVy
YXRpb246KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAoreworICAgIF9pbXBsLT5kcmFnZ2VkSW1hZ2UoaW1hZ2UsIE5TUG9pbnRU
b0NHUG9pbnQoZW5kUG9pbnQpLCBvcGVyYXRpb24pOworfQorCistIChOU0RyYWdPcGVyYXRpb24p
ZHJhZ2dpbmdFbnRlcmVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAg
IHJldHVybiBfaW1wbC0+ZHJhZ2dpbmdFbnRlcmVkKGRyYWdnaW5nSW5mbyk7Cit9CisKKy0gKE5T
RHJhZ09wZXJhdGlvbilkcmFnZ2luZ1VwZGF0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dp
bmdJbmZvCit7CisgICAgcmV0dXJuIF9pbXBsLT5kcmFnZ2luZ1VwZGF0ZWQoZHJhZ2dpbmdJbmZv
KTsKK30KKworLSAodm9pZClkcmFnZ2luZ0V4aXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFn
Z2luZ0luZm8KK3sKKyAgICBfaW1wbC0+ZHJhZ2dpbmdFeGl0ZWQoZHJhZ2dpbmdJbmZvKTsKK30K
KworLSAoQk9PTClwcmVwYXJlRm9yRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZ2dpbmdJbmZvPilk
cmFnZ2luZ0luZm8KK3sKKyAgICByZXR1cm4gX2ltcGwtPnByZXBhcmVGb3JEcmFnT3BlcmF0aW9u
KGRyYWdnaW5nSW5mbyk7Cit9CisKKy0gKEJPT0wpcGVyZm9ybURyYWdPcGVyYXRpb246KGlkIDxO
U0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCit7CisgICAgcmV0dXJuIF9pbXBsLT5wZXJmb3Jt
RHJhZ09wZXJhdGlvbihkcmFnZ2luZ0luZm8pOworfQorCistIChOU1ZpZXcgKilfaGl0VGVzdDoo
TlNQb2ludCAqKXBvaW50IGRyYWdUeXBlczooTlNTZXQgKil0eXBlcworeworICAgIHJldHVybiBf
aW1wbC0+aGl0VGVzdEZvckRyYWdUeXBlcyhOU1BvaW50VG9DR1BvaW50KCpwb2ludCksIHR5cGVz
KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQorCistIChCT09MKV93aW5kb3dS
ZXNpemVNb3VzZUxvY2F0aW9uSXNJblZpc2libGVTY3JvbGxlclRodW1iOihOU1BvaW50KXBvaW50
Cit7CisgICAgcmV0dXJuIF9pbXBsLT53aW5kb3dSZXNpemVNb3VzZUxvY2F0aW9uSXNJblZpc2li
bGVTY3JvbGxlclRodW1iKE5TUG9pbnRUb0NHUG9pbnQocG9pbnQpKTsKK30KKworLSAodm9pZCl2
aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICBfaW1wbC0+dmll
d1dpbGxNb3ZlVG9XaW5kb3cod2luZG93KTsKK30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvV2lu
ZG93Cit7CisgICAgX2ltcGwtPnZpZXdEaWRNb3ZlVG9XaW5kb3coKTsKK30KKworLSAodm9pZClk
cmF3UmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBfaW1wbC0+ZHJhd1JlY3QoTlNSZWN0VG9DR1Jl
Y3QocmVjdCkpOworfQorCistIChCT09MKWlzT3BhcXVlCit7CisgICAgcmV0dXJuIF9pbXBsLT5p
c09wYXF1ZSgpOworfQorCistIChCT09MKW1vdXNlRG93bkNhbk1vdmVXaW5kb3cKK3sKKyAgICBy
ZXR1cm4gV2ViS2l0OjpXZWJWaWV3SW1wbDo6bW91c2VEb3duQ2FuTW92ZVdpbmRvdygpOworfQor
CistICh2b2lkKXZpZXdEaWRIaWRlCit7CisgICAgX2ltcGwtPnZpZXdEaWRIaWRlKCk7Cit9CisK
Ky0gKHZvaWQpdmlld0RpZFVuaGlkZQoreworICAgIF9pbXBsLT52aWV3RGlkVW5oaWRlKCk7Cit9
CisKKy0gKHZvaWQpdmlld0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzCit7CisgICAgX2ltcGwt
PnZpZXdEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllcygpOworfQorCistICh2b2lkKV9hY3RpdmVT
cGFjZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBfaW1w
bC0+YWN0aXZlU3BhY2VEaWRDaGFuZ2UoKTsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3Vz
ZWRVSUVsZW1lbnQKK3sKKyAgICByZXR1cm4gX2ltcGwtPmFjY2Vzc2liaWxpdHlGb2N1c2VkVUlF
bGVtZW50KCk7Cit9CisKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCist
IChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAoreworICAgIHJldHVybiBfaW1wbC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
OworfQorCistIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAg
IHJldHVybiBfaW1wbC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoTlNQb2ludFRvQ0dQb2ludChwb2lu
dCkpOworfQorCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19CRUdJTgorLSAoaWQp
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQorQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECit7CisgICAgcmV0dXJuIF9pbXBsLT5hY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlKTsKK30KKworQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKK0FMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAoreworICAgIHJldHVybiBfaW1wbC0+YWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSwgcGFyYW1ldGVyKTsKK30KKworQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0gKE5TQXJyYXk8TlNTdHJpbmcg
Kj4gKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCitBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKK3sKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICpu
YW1lcyA9IFtzdXBlciBhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzXTsK
KyAgICByZXR1cm4gW25hbWVzIGFycmF5QnlBZGRpbmdPYmplY3Q6QCJBWENvbnZlcnRSZWxhdGl2
ZUZyYW1lIl07Cit9CisKKy0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAg
ICBpZiAoIV9pbXBsKQorICAgICAgICByZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOworICAg
IHJldHVybiBfaW1wbC0+aGl0VGVzdChOU1BvaW50VG9DR1BvaW50KHBvaW50KSk7Cit9CisKKy0g
KE5TSW50ZWdlciljb252ZXJzYXRpb25JZGVudGlmaWVyCit7CisgICAgcmV0dXJuIChOU0ludGVn
ZXIpc2VsZjsKK30KKworLSAodm9pZClxdWlja0xvb2tXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIF9pbXBsLT5xdWlja0xvb2tXaXRoRXZlbnQoZXZlbnQpOworfQorCistIChOU1Ry
YWNraW5nUmVjdFRhZylhZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25l
ciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZQor
eworICAgIHJldHVybiBfaW1wbC0+YWRkVHJhY2tpbmdSZWN0KE5TUmVjdFRvQ0dSZWN0KHJlY3Qp
LCBvd25lciwgZGF0YSwgYXNzdW1lSW5zaWRlKTsKK30KKworLSAoTlNUcmFja2luZ1JlY3RUYWcp
X2FkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2
b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlIHVzZVRyYWNraW5nTnVt
OihpbnQpdGFnCit7CisgICAgcmV0dXJuIF9pbXBsLT5hZGRUcmFja2luZ1JlY3RXaXRoVHJhY2tp
bmdOdW0oTlNSZWN0VG9DR1JlY3QocmVjdCksIG93bmVyLCBkYXRhLCBhc3N1bWVJbnNpZGUsIHRh
Zyk7Cit9CisKKy0gKHZvaWQpX2FkZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3RzIG93bmVy
OihpZClvd25lciB1c2VyRGF0YUxpc3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3VtZUluc2lk
ZUxpc3Q6KEJPT0wgKilhc3N1bWVJbnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFja2luZ1Jl
Y3RUYWcgKil0cmFja2luZ051bXMgY291bnQ6KGludCljb3VudAoreworICAgIENHUmVjdCAqY2dS
ZWN0cyA9IChDR1JlY3QgKiljYWxsb2MoMSwgc2l6ZW9mKENHUmVjdCkpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgY2dSZWN0c1tpXSA9IE5TUmVjdFRvQ0dS
ZWN0KHJlY3RzW2ldKTsKKyAgICBfaW1wbC0+YWRkVHJhY2tpbmdSZWN0c1dpdGhUcmFja2luZ051
bXMoY2dSZWN0cywgb3duZXIsIHVzZXJEYXRhTGlzdCwgYXNzdW1lSW5zaWRlTGlzdCwgdHJhY2tp
bmdOdW1zLCBjb3VudCk7CisgICAgZnJlZShjZ1JlY3RzKTsKK30KKworLSAodm9pZClyZW1vdmVU
cmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRhZworeworICAgIGlmICghX2ltcGwpCisg
ICAgICAgIHJldHVybjsKKyAgICBfaW1wbC0+cmVtb3ZlVHJhY2tpbmdSZWN0KHRhZyk7Cit9CisK
Ky0gKHZvaWQpX3JlbW92ZVRyYWNraW5nUmVjdHM6KE5TVHJhY2tpbmdSZWN0VGFnICopdGFncyBj
b3VudDooaW50KWNvdW50Cit7CisgICAgaWYgKCFfaW1wbCkKKyAgICAgICAgcmV0dXJuOworICAg
IF9pbXBsLT5yZW1vdmVUcmFja2luZ1JlY3RzKHRhZ3MsIGNvdW50KTsKK30KKworQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfQkVHSU4KKy0gKE5TU3RyaW5nICopdmlldzooTlNWaWV3
ICopdmlldyBzdHJpbmdGb3JUb29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50OihOU1BvaW50
KXBvaW50IHVzZXJEYXRhOih2b2lkICopZGF0YQorQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECit7CisgICAgcmV0dXJuIF9pbXBsLT5zdHJpbmdGb3JUb29sVGlwKHRhZyk7Cit9
CisKK0FMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCistICh2b2lkKXBhc3Rl
Ym9hcmRDaGFuZ2VkT3duZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK0FMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAoreworICAgIF9pbXBsLT5wYXN0ZWJvYXJkQ2hhbmdl
ZE93bmVyKHBhc3RlYm9hcmQpOworfQorCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19CRUdJTgorLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHBy
b3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCitBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKK3sKKyAgICBfaW1wbC0+cHJvdmlkZURhdGFGb3JQYXN0ZWJvYXJkKHBh
c3RlYm9hcmQsIHR5cGUpOworfQorCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19C
RUdJTgorLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRp
b246KE5TVVJMICopZHJvcERlc3RpbmF0aW9uCitBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKK3sKKyAgICByZXR1cm4gX2ltcGwtPm5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBl
ZEF0RGVzdGluYXRpb24oZHJvcERlc3RpbmF0aW9uKTsKK30KKworLSAoQk9PTCl3YW50c1VwZGF0
ZUxheWVyCit7CisgICAgcmV0dXJuIFdlYktpdDo6V2ViVmlld0ltcGw6OndhbnRzVXBkYXRlTGF5
ZXIoKTsKK30KKworLSAodm9pZCl1cGRhdGVMYXllcgoreworICAgIF9pbXBsLT51cGRhdGVMYXll
cigpOworfQorCistICh2b2lkKXNtYXJ0TWFnbmlmeVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgX2ltcGwtPnNtYXJ0TWFnbmlmeVdpdGhFdmVudChldmVudCk7Cit9CisKKy0gKHZv
aWQpbWFnbmlmeVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPm1hZ25p
ZnlXaXRoRXZlbnQoZXZlbnQpOworfQorCisjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5UUykK
Ky0gKHZvaWQpcm90YXRlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfaW1wbC0+
cm90YXRlV2l0aEV2ZW50KGV2ZW50KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoTUFDX0dFU1RVUkVf
RVZFTlRTKQorCistIChXS1RleHRGaW5kZXJDbGllbnQgKilfZW5zdXJlVGV4dEZpbmRlckNsaWVu
dAoreworICAgIGlmICghX3RleHRGaW5kZXJDbGllbnQpCisgICAgICAgIF90ZXh0RmluZGVyQ2xp
ZW50ID0gYWRvcHROUyhbW1dLVGV4dEZpbmRlckNsaWVudCBhbGxvY10gaW5pdFdpdGhQYWdlOipf
cGFnZSB2aWV3OnNlbGYgdXNlUGxhdGZvcm1GaW5kVUk6X3VzZVBsYXRmb3JtRmluZFVJXSk7Cisg
ICAgcmV0dXJuIF90ZXh0RmluZGVyQ2xpZW50LmdldCgpOworfQorCistICh2b2lkKWZpbmRNYXRj
aGVzRm9yU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldFN0cmluZyByZWxhdGl2ZVRvTWF0Y2g6KGlk
IDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pcmVsYXRpdmVNYXRj
aCBmaW5kT3B0aW9uczooTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9u
cylmaW5kT3B0aW9ucyBtYXhSZXN1bHRzOihOU1VJbnRlZ2VyKW1heFJlc3VsdHMgcmVzdWx0Q29s
bGVjdG9yOih2b2lkICheKShOU0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdyYXApKXJlc3VsdENv
bGxlY3RvcgoreworICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0gZmluZE1hdGNo
ZXNGb3JTdHJpbmc6dGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDpyZWxhdGl2ZU1hdGNoIGZp
bmRPcHRpb25zOmZpbmRPcHRpb25zIG1heFJlc3VsdHM6bWF4UmVzdWx0cyByZXN1bHRDb2xsZWN0
b3I6cmVzdWx0Q29sbGVjdG9yXTsKK30KKworLSAodm9pZClyZXBsYWNlTWF0Y2hlczooTlNBcnJh
eSAqKW1hdGNoZXMgd2l0aFN0cmluZzooTlNTdHJpbmcgKilyZXBsYWNlbWVudFN0cmluZyBpblNl
bGVjdGlvbk9ubHk6KEJPT0wpc2VsZWN0aW9uT25seSByZXN1bHRDb2xsZWN0b3I6KHZvaWQgKF4p
KE5TVUludGVnZXIgcmVwbGFjZW1lbnRDb3VudCkpcmVzdWx0Q29sbGVjdG9yCit7CisgICAgW1tz
ZWxmIF9lbnN1cmVUZXh0RmluZGVyQ2xpZW50XSByZXBsYWNlTWF0Y2hlczptYXRjaGVzIHdpdGhT
dHJpbmc6cmVwbGFjZW1lbnRTdHJpbmcgaW5TZWxlY3Rpb25Pbmx5OnNlbGVjdGlvbk9ubHkgcmVz
dWx0Q29sbGVjdG9yOnJlc3VsdENvbGxlY3Rvcl07Cit9CisKKy0gKHZvaWQpc2Nyb2xsRmluZE1h
dGNoVG9WaXNpYmxlOihpZDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRj
aD4pbWF0Y2gKK3sKKyAgICBbW3NlbGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIHNjcm9sbEZp
bmRNYXRjaFRvVmlzaWJsZTptYXRjaF07Cit9CisKKy0gKE5TVmlldyAqKWRvY3VtZW50Q29udGFp
bmVyVmlldworeworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWdldFNlbGVjdGVkVGV4
dDoodm9pZCAoXikoTlNTdHJpbmcgKnNlbGVjdGVkVGV4dFN0cmluZykpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyAgICBbW3NlbGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIGdldFNlbGVjdGVkVGV4
dDpjb21wbGV0aW9uSGFuZGxlcl07Cit9CisKKy0gKHZvaWQpc2VsZWN0RmluZE1hdGNoOihpZCA8
TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KWZpbmRNYXRjaCBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBb
W3NlbGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIHNlbGVjdEZpbmRNYXRjaDpmaW5kTWF0Y2gg
Y29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworfQorCisjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKKworLSAoTlNTdHJpbmcgKilmaWxlUHJvbWlzZVByb3ZpZGVyOihOU0ZpbGVQ
cm9taXNlUHJvdmlkZXIgKilmaWxlUHJvbWlzZVByb3ZpZGVyIGZpbGVOYW1lRm9yVHlwZTooTlNT
dHJpbmcgKilmaWxlVHlwZQoreworICAgIHJldHVybiBfaW1wbC0+ZmlsZU5hbWVGb3JGaWxlUHJv
bWlzZVByb3ZpZGVyKGZpbGVQcm9taXNlUHJvdmlkZXIsIGZpbGVUeXBlKTsKK30KKworLSAodm9p
ZClmaWxlUHJvbWlzZVByb3ZpZGVyOihOU0ZpbGVQcm9taXNlUHJvdmlkZXIgKilmaWxlUHJvbWlz
ZVByb3ZpZGVyIHdyaXRlUHJvbWlzZVRvVVJMOihOU1VSTCAqKXVybCBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX2lt
cGwtPndyaXRlVG9VUkxGb3JGaWxlUHJvbWlzZVByb3ZpZGVyKGZpbGVQcm9taXNlUHJvdmlkZXIs
IHVybCwgY29tcGxldGlvbkhhbmRsZXIpOworfQorCistIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dp
bmdTZXNzaW9uOihOU0RyYWdnaW5nU2Vzc2lvbiAqKXNlc3Npb24gc291cmNlT3BlcmF0aW9uTWFz
a0ZvckRyYWdnaW5nQ29udGV4dDooTlNEcmFnZ2luZ0NvbnRleHQpY29udGV4dAoreworICAgIHJl
dHVybiBfaW1wbC0+ZHJhZ1NvdXJjZU9wZXJhdGlvbk1hc2soc2Vzc2lvbiwgY29udGV4dCk7Cit9
CisKKy0gKHZvaWQpZHJhZ2dpbmdTZXNzaW9uOihOU0RyYWdnaW5nU2Vzc2lvbiAqKXNlc3Npb24g
ZW5kZWRBdFBvaW50OihOU1BvaW50KXNjcmVlblBvaW50IG9wZXJhdGlvbjooTlNEcmFnT3BlcmF0
aW9uKW9wZXJhdGlvbgoreworICAgIF9pbXBsLT5kcmFnZ2luZ1Nlc3Npb25FbmRlZChzZXNzaW9u
LCBzY3JlZW5Qb2ludCwgb3BlcmF0aW9uKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NV
UFBPUlQpCisKKy0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sK
K30KKworLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCit7Cit9CisKKy0g
KHZvaWQpX2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCit7Cit9CisKKy0gKHZvaWQp
X3NldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOihCT09MKWRyYXdzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kCit7CisgICAgc3RhdGljIEJPT0wgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nOwor
ICAgIGlmICghaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nKSB7CisgICAgICAgIC8vIFNlZSBi
dWcgMTU1NTUwIGZvciBkZXRhaWxzLgorICAgICAgICBOU0xvZyhAIi1bV0tXZWJWaWV3IF9zZXRE
cmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDpdIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3Qg
YmUgdXNlZC4iKTsKKyAgICAgICAgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nID0gWUVTOwor
ICAgIH0KKyAgICBbc2VsZiBfc2V0RHJhd3NCYWNrZ3JvdW5kOiFkcmF3c1RyYW5zcGFyZW50QmFj
a2dyb3VuZF07Cit9CisKKy0gKHZvaWQpc2hhcmVTaGVldERpZERpc21pc3M6KFdLU2hhcmVTaGVl
dCAqKXNoYXJlU2hlZXQKK3sKKyAgICBfaW1wbC0+c2hhcmVTaGVldERpZERpc21pc3Moc2hhcmVT
aGVldCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFRvdWNoIEJhcgorCisjaWYgSEFWRShUT1VDSF9C
QVIpCisKK0BkeW5hbWljIHRvdWNoQmFyOworCistIChOU1RvdWNoQmFyICopbWFrZVRvdWNoQmFy
Cit7CisgICAgcmV0dXJuIF9pbXBsLT5tYWtlVG91Y2hCYXIoKTsKK30KKworLSAoTlNDYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQoreworICAgIHJl
dHVybiBfaW1wbC0+Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbSgpOworfQorCistICh2b2lkKV93
ZWJfZGlkQWRkTWVkaWFDb250cm9sc01hbmFnZXI6KGlkKWNvbnRyb2xzTWFuYWdlcgoreworICAg
IFtzZWxmIF9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OmNvbnRyb2xzTWFuYWdlcl07Cit9
CisKKy0gKHZvaWQpX3dlYl9kaWRSZW1vdmVNZWRpYUNvbnRyb2xzTWFuYWdlcgoreworICAgIFtz
ZWxmIF9yZW1vdmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3XTsKK30KKworLSAodm9pZClfaW50
ZXJhY3RXaXRoTWVkaWFDb250cm9sc0ZvclRlc3RpbmcKK3sKKyAgICBbc2VsZiBfc2V0V2FudHNN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OllFU107CisgICAgW3NlbGYgbWFrZVRvdWNoQmFyXTsK
K30KKworI2VuZGlmIC8vIEhBVkUoVE9VQ0hfQkFSKQorCitAZW5kCisKKyNwcmFnbWEgbWFyayAt
CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKFdLSUJBY3Rpb25zKQorCistIChCT09MKXZh
bGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVt
PilpdGVtCit7CisgICAgU0VMIGFjdGlvbiA9IGl0ZW0uYWN0aW9uOworCisgICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3IoZ29CYWNrOikpCisgICAgICAgIHJldHVybiAhIV9wYWdlLT5iYWNrRm9y
d2FyZExpc3QoKS5iYWNrSXRlbSgpOworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoZ29G
b3J3YXJkOikpCisgICAgICAgIHJldHVybiAhIV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5mb3J3
YXJkSXRlbSgpOworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc3RvcExvYWRpbmc6KSkg
eworICAgICAgICAvLyBGSVhNRTogUmV0dXJuIG5vIGlmIHdlJ3JlIHN0b3BwZWQuCisgICAgICAg
IHJldHVybiBZRVM7CisgICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocmVsb2Fk
OikgfHwgYWN0aW9uID09IEBzZWxlY3RvcihyZWxvYWRGcm9tT3JpZ2luOikpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFJldHVybiBubyBpZiB3ZSdyZSBsb2FkaW5nLgorICAgICAgICByZXR1cm4gWUVT
OworICAgIH0KKworICAgIHJldHVybiBfaW1wbC0+dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbShp
dGVtKTsKK30KKworLSAoSUJBY3Rpb24pZ29CYWNrOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZiBn
b0JhY2tdOworfQorCistIChJQkFjdGlvbilnb0ZvcndhcmQ6KGlkKXNlbmRlcgoreworICAgIFtz
ZWxmIGdvRm9yd2FyZF07Cit9CisKKy0gKElCQWN0aW9uKXJlbG9hZDooaWQpc2VuZGVyCit7Cisg
ICAgW3NlbGYgcmVsb2FkXTsKK30KKworLSAoSUJBY3Rpb24pcmVsb2FkRnJvbU9yaWdpbjooaWQp
c2VuZGVyCit7CisgICAgW3NlbGYgcmVsb2FkRnJvbU9yaWdpbl07Cit9CisKKy0gKElCQWN0aW9u
KXN0b3BMb2FkaW5nOihpZClzZW5kZXIKK3sKKyAgICBfcGFnZS0+c3RvcExvYWRpbmcoKTsKK30K
KworQGVuZAorCisjcHJhZ21hIG1hcmsgLQorCitAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChX
S0ludGVybmFsTWFjKQorCistIChOU1RleHRJbnB1dENvbnRleHQgKilfd2ViX3N1cGVySW5wdXRD
b250ZXh0Cit7CisgICAgcmV0dXJuIFtzdXBlciBpbnB1dENvbnRleHRdOworfQorCistICh2b2lk
KV93ZWJfc3VwZXJRdWlja0xvb2tXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIFtz
dXBlciBxdWlja0xvb2tXaXRoRXZlbnQ6ZXZlbnRdOworfQorCistICh2b2lkKV93ZWJfc3VwZXJT
d2lwZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgW3N1cGVyIHN3aXBlV2l0aEV2
ZW50OmV2ZW50XTsKK30KKworLSAodm9pZClfd2ViX3N1cGVyTWFnbmlmeVdpdGhFdmVudDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgW3N1cGVyIG1hZ25pZnlXaXRoRXZlbnQ6ZXZlbnRdOworfQor
CistICh2b2lkKV93ZWJfc3VwZXJTbWFydE1hZ25pZnlXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIFtzdXBlciBzbWFydE1hZ25pZnlXaXRoRXZlbnQ6ZXZlbnRdOworfQorCistICh2
b2lkKV93ZWJfc3VwZXJSZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRhZwor
eworICAgIFtzdXBlciByZW1vdmVUcmFja2luZ1JlY3Q6dGFnXTsKK30KKworLSAoaWQpX3dlYl9z
dXBlckFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKK3sK
KyAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgIHJldHVybiBbc3Vw
ZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZV07CisgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECit9CisKKy0gKHZvaWQpX3dlYl9zdXBlckRvQ29tbWFu
ZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIFtzdXBlciBkb0NvbW1hbmRCeVNlbGVj
dG9yOnNlbGVjdG9yXTsKK30KKworLSAoQk9PTClfd2ViX3N1cGVyUGVyZm9ybUtleUVxdWl2YWxl
bnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIHJldHVybiBbc3VwZXIgcGVyZm9ybUtleUVxdWl2
YWxlbnQ6ZXZlbnRdOworfQorCistICh2b2lkKV93ZWJfc3VwZXJLZXlEb3duOihOU0V2ZW50ICop
ZXZlbnQKK3sKKyAgICBbc3VwZXIga2V5RG93bjpldmVudF07Cit9CisKKy0gKE5TVmlldyAqKV93
ZWJfc3VwZXJIaXRUZXN0OihOU1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIFtzdXBlciBoaXRU
ZXN0OnBvaW50XTsKK30KKworLSAoaWQpX3dlYl9pbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250
cm9sbGVyRm9ySGl0VGVzdFJlc3VsdEludGVybmFsOihBUEk6OkhpdFRlc3RSZXN1bHQqKWhpdFRl
c3RSZXN1bHQgd2l0aFR5cGU6KHVpbnQzMl90KXR5cGUgdXNlckRhdGE6KEFQSTo6T2JqZWN0Kil1
c2VyRGF0YQoreworICAgIGlkPE5TU2VjdXJlQ29kaW5nPiBkYXRhID0gdXNlckRhdGEgPyBzdGF0
aWNfY2FzdDxpZDxOU1NlY3VyZUNvZGluZz4+KHVzZXJEYXRhLT53cmFwcGVyKCkpIDogbmlsOwor
ICAgIHJldHVybiBbc2VsZiBfaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhp
dFRlc3RSZXN1bHQ6d3JhcHBlcigqaGl0VGVzdFJlc3VsdCkgd2l0aFR5cGU6KF9XS0ltbWVkaWF0
ZUFjdGlvblR5cGUpdHlwZSB1c2VyRGF0YTpkYXRhXTsKK30KKworLSAodm9pZClfd2ViX3ByZXBh
cmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKKyAgICBpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4gdWlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pW3NlbGYgVUlEZWxl
Z2F0ZV07CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OildKQorICAgICAg
ICBbdWlEZWxlZ2F0ZSBfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZp
ZXc6c2VsZl07CisgICAgZWxzZQorICAgICAgICBbc2VsZiBfcHJlcGFyZUZvckltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpX3dlYl9jYW5jZWxJbW1lZGlhdGVBY3Rpb25B
bmltYXRpb24KK3sKKyAgICBpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0ZSA9IChp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pW3NlbGYgVUlEZWxlZ2F0ZV07CisgICAgaWYgKFt1aURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2NhbmNlbEltbWVkaWF0ZUFjdGlv
bkFuaW1hdGlvbkZvcldlYlZpZXc6KV0pCisgICAgICAgIFt1aURlbGVnYXRlIF9jYW5jZWxJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OnNlbGZdOworICAgIGVsc2UKKyAgICAgICAg
W3NlbGYgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpX3dl
Yl9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgoreworICAgIGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPiB1aURlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilbc2VsZiBV
SURlbGVnYXRlXTsKKyAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OildKQorICAg
ICAgICBbdWlEZWxlZ2F0ZSBfY29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJW
aWV3OnNlbGZdOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgX2NvbXBsZXRlSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uXTsKK30KKworLSAodm9pZClfd2ViX2RpZENoYW5nZUNvbnRlbnRTaXplOihO
U1NpemUpbmV3U2l6ZQoreworfQorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKworLSAoV0tE
cmFnRGVzdGluYXRpb25BY3Rpb24pX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2lu
Z0luZm86KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCit7CisgICAgaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KVtz
ZWxmIFVJRGVsZWdhdGVdOworICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF93ZWJWaWV3OmRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0lu
Zm86KV0pCisgICAgICAgIHJldHVybiBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKKworICAgIGlm
ICghbGlua2VkT25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lvbjo6Rmlyc3RXaXRoRHJvcFRvTmF2
aWdhdGVEaXNhbGxvd2VkQnlEZWZhdWx0KSkKKyAgICAgICAgcmV0dXJuIFdLRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uQW55OworCisgICAgcmV0dXJuIFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55ICYg
fldLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZDsKK30KKworLSAodm9pZClfd2ViX2RpZFBlcmZv
cm1EcmFnT3BlcmF0aW9uOihCT09MKWhhbmRsZWQKK3sKKyAgICBpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4gdWlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pc2VsZi5VSURlbGVn
YXRlOworICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJWaWV3OmRpZFBlcmZvcm1EcmFnT3BlcmF0aW9uOildKQorICAgICAgICBbdWlEZWxlZ2F0ZSBf
d2ViVmlldzpzZWxmIGRpZFBlcmZvcm1EcmFnT3BlcmF0aW9uOmhhbmRsZWRdOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKKworLSAodm9pZClfd2ViX2Rpc21pc3NDb250ZW50
UmVsYXRpdmVDaGlsZFdpbmRvd3MKK3sKKyAgICBfaW1wbC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2
ZUNoaWxkV2luZG93c0Zyb21WaWV3T25seSgpOworfQorCistICh2b2lkKV93ZWJfZGlzbWlzc0Nv
bnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c1dpdGhBbmltYXRpb246KEJPT0wpd2l0aEFuaW1hdGlv
bgoreworICAgIF9pbXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFu
aW1hdGlvbkZyb21WaWV3T25seSh3aXRoQW5pbWF0aW9uKTsKK30KKworLSAodm9pZClfd2ViX2Vk
aXRvclN0YXRlRGlkQ2hhbmdlCit7CisgICAgW3NlbGYgX2RpZENoYW5nZUVkaXRvclN0YXRlXTsK
K30KKworLSAodm9pZClfd2ViX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5T
RXZlbnQgKilldmVudAoreworICAgIFtzZWxmIF9nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlX
ZWJDb3JlOmV2ZW50XTsKK30KKworLSAodm9pZClfd2ViX2dyYW50RE9NUGFzdGVBY2Nlc3MKK3sK
KyAgICBfaW1wbC0+aGFuZGxlRE9NUGFzdGVSZXF1ZXN0V2l0aFJlc3VsdChXZWJDb3JlOjpET01Q
YXN0ZUFjY2Vzc1Jlc3BvbnNlOjpHcmFudGVkRm9yR2VzdHVyZSk7Cit9CisKKy0gKHZvaWQpX3Rh
a2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbkludGVybmFsOihpZClzZW5kZXIKK3sKKyAgICBbc2Vs
ZiB0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246c2VuZGVyXTsKK30KKworLSAodm9pZClpbnNl
cnRUZXh0OihpZClzdHJpbmcKK3sKKyAgICBfaW1wbC0+aW5zZXJ0VGV4dChzdHJpbmcpOworfQor
CistICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1Jhbmdl
KXJlcGxhY2VtZW50UmFuZ2UKK3sKKyAgICBfaW1wbC0+aW5zZXJ0VGV4dChzdHJpbmcsIHJlcGxh
Y2VtZW50UmFuZ2UpOworfQorCitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbXBsZW1lbnRh
dGlvbiBXS1dlYlZpZXcgKFdLUHJpdmF0ZU1hYykKKworLSAoV0tQYWdlUmVmKV9wYWdlUmVmRm9y
VHJhbnNpdGlvblRvV0tXZWJWaWV3Cit7CisgICAgcmV0dXJuIHRvQVBJKF9wYWdlLmdldCgpKTsK
K30KKworLSAoQk9PTClfaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIKK3sKKyAgICBy
ZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyKCk7
Cit9CisKKy0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cworeworICAgIHJldHVybiBfaW1w
bC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7Cit9CisKKy0gKHZvaWQpX3NldElnbm9yZXNOb25X
aGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKK3sKKyAgICBfaW1wbC0+c2V0
SWdub3Jlc05vbldoZWVsRXZlbnRzKGlnbm9yZXNOb25XaGVlbEV2ZW50cyk7Cit9CisKKy0gKE5T
VmlldyAqKV9zYWZlQnJvd3NpbmdXYXJuaW5nCit7CisgICAgcmV0dXJuIF9pbXBsLT5zYWZlQnJv
d3NpbmdXYXJuaW5nKCk7Cit9CisKKy0gKF9XS1JlY3RFZGdlKV9waW5uZWRTdGF0ZQoreworICAg
IHJldHVybiBfaW1wbC0+cGlubmVkU3RhdGUoKTsKK30KKworLSAoX1dLUmVjdEVkZ2UpX3J1YmJl
ckJhbmRpbmdFbmFibGVkCit7CisgICAgcmV0dXJuIF9pbXBsLT5ydWJiZXJCYW5kaW5nRW5hYmxl
ZCgpOworfQorCistICh2b2lkKV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDooX1dLUmVjdEVkZ2Up
c3RhdGUKK3sKKyAgICBfaW1wbC0+c2V0UnViYmVyQmFuZGluZ0VuYWJsZWQoc3RhdGUpOworfQor
CistIChOU0NvbG9yICopX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcgoreworICAgIHJldHVy
biBfaW1wbC0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7Cit9CisKKy0gKE5TQ29sb3Ig
KilfYmFja2dyb3VuZENvbG9yCit7CisgICAgcmV0dXJuIF9pbXBsLT5iYWNrZ3JvdW5kQ29sb3Io
KTsKK30KKworLSAodm9pZClfc2V0QmFja2dyb3VuZENvbG9yOihOU0NvbG9yICopYmFja2dyb3Vu
ZENvbG9yCit7CisgICAgX2ltcGwtPnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3Ip
OworfQorCistIChOU0NvbG9yICopX3VuZGVybGF5Q29sb3IKK3sKKyAgICByZXR1cm4gX2ltcGwt
PnVuZGVybGF5Q29sb3IoKTsKK30KKworLSAodm9pZClfc2V0VW5kZXJsYXlDb2xvcjooTlNDb2xv
ciAqKXVuZGVybGF5Q29sb3IKK3sKKyAgICBfaW1wbC0+c2V0VW5kZXJsYXlDb2xvcih1bmRlcmxh
eUNvbG9yKTsKK30KKworLSAodm9pZClfc2V0VG90YWxIZWlnaHRPZkJhbm5lcnM6KENHRmxvYXQp
dG90YWxIZWlnaHRPZkJhbm5lcnMKK3sKKyAgICBfaW1wbC0+c2V0VG90YWxIZWlnaHRPZkJhbm5l
cnModG90YWxIZWlnaHRPZkJhbm5lcnMpOworfQorCistIChDR0Zsb2F0KV90b3RhbEhlaWdodE9m
QmFubmVycworeworICAgIHJldHVybiBfaW1wbC0+dG90YWxIZWlnaHRPZkJhbm5lcnMoKTsKK30K
KworLSAoQk9PTClfZHJhd3NCYWNrZ3JvdW5kCit7CisgICAgcmV0dXJuIF9pbXBsLT5kcmF3c0Jh
Y2tncm91bmQoKTsKK30KKworLSAodm9pZClfc2V0RHJhd3NCYWNrZ3JvdW5kOihCT09MKWRyYXdz
QmFja2dyb3VuZAoreworICAgIF9pbXBsLT5zZXREcmF3c0JhY2tncm91bmQoZHJhd3NCYWNrZ3Jv
dW5kKTsKK30KKworLSAodm9pZClfc2V0VG9wQ29udGVudEluc2V0OihDR0Zsb2F0KWNvbnRlbnRJ
bnNldAoreworICAgIHJldHVybiBfaW1wbC0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNl
dCk7Cit9CisKKy0gKENHRmxvYXQpX3RvcENvbnRlbnRJbnNldAoreworICAgIHJldHVybiBfaW1w
bC0+dG9wQ29udGVudEluc2V0KCk7Cit9CisKKy0gKHZvaWQpX3NldEF1dG9tYXRpY2FsbHlBZGp1
c3RzQ29udGVudEluc2V0czooQk9PTClhdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHMK
K3sKKyAgICBfaW1wbC0+c2V0QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKGF1dG9t
YXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cyk7Cit9CisKKy0gKEJPT0wpX2F1dG9tYXRpY2Fs
bHlBZGp1c3RzQ29udGVudEluc2V0cworeworICAgIHJldHVybiBfaW1wbC0+YXV0b21hdGljYWxs
eUFkanVzdHNDb250ZW50SW5zZXRzKCk7Cit9CisKKy0gKHZvaWQpX3NldE92ZXJyaWRlRGV2aWNl
U2NhbGVGYWN0b3I6KENHRmxvYXQpZGV2aWNlU2NhbGVGYWN0b3IKK3sKKyAgICBfaW1wbC0+c2V0
T3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Cit9CisKKy0gKENH
RmxvYXQpX292ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IKK3sKKyAgICByZXR1cm4gX2ltcGwtPm92
ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworLSAoQk9PTClfd2luZG93T2NjbHVzaW9u
RGV0ZWN0aW9uRW5hYmxlZAoreworICAgIHJldHVybiBfaW1wbC0+d2luZG93T2NjbHVzaW9uRGV0
ZWN0aW9uRW5hYmxlZCgpOworfQorCistICh2b2lkKV9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rp
b25FbmFibGVkOihCT09MKWVuYWJsZWQKK3sKKyAgICBfaW1wbC0+c2V0V2luZG93T2NjbHVzaW9u
RGV0ZWN0aW9uRW5hYmxlZChlbmFibGVkKTsKK30KKworLSAoTlNJbnRlZ2VyKV9zcGVsbENoZWNr
ZXJEb2N1bWVudFRhZworeworICAgIHJldHVybiBfaW1wbC0+c3BlbGxDaGVja2VyRG9jdW1lbnRU
YWcoKTsKK30KKworLSAoQk9PTClfc2hvdWxkRXhwYW5kQ29udGVudFRvVmlld0hlaWdodEZvckF1
dG9MYXlvdXQKK3sKKyAgICByZXR1cm4gX2ltcGwtPnNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZv
ckF1dG9MYXlvdXQoKTsKK30KKworLSAodm9pZClfc2V0U2hvdWxkRXhwYW5kQ29udGVudFRvVmll
d0hlaWdodEZvckF1dG9MYXlvdXQ6KEJPT0wpc2hvdWxkRXhwYW5kCit7CisgICAgcmV0dXJuIF9p
bXBsLT5zZXRTaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0KHNob3VsZEV4cGFu
ZCk7Cit9CisKKy0gKENHRmxvYXQpX21pbmltdW1MYXlvdXRXaWR0aAoreworICAgIHJldHVybiBf
cGFnZS0+bWluaW11bVNpemVGb3JBdXRvTGF5b3V0KCkud2lkdGgoKTsKK30KKworLSAodm9pZClf
c2V0TWluaW11bUxheW91dFdpZHRoOihDR0Zsb2F0KXdpZHRoCit7CisgICAgQk9PTCBleHBhbmRz
VG9GaXQgPSB3aWR0aCA+IDA7CisKKyAgICBfcGFnZS0+c2V0TWluaW11bVNpemVGb3JBdXRvTGF5
b3V0KFdlYkNvcmU6OkludFNpemUod2lkdGgsIDApKTsKKyAgICBfcGFnZS0+c2V0TWFpbkZyYW1l
SXNTY3JvbGxhYmxlKCFleHBhbmRzVG9GaXQpOworCisgICAgX2ltcGwtPnNldENsaXBzVG9WaXNp
YmxlUmVjdChleHBhbmRzVG9GaXQpOworfQorCistIChCT09MKV9hbHdheXNTaG93c0hvcml6b250
YWxTY3JvbGxlcgoreworICAgIHJldHVybiBfcGFnZS0+YWx3YXlzU2hvd3NIb3Jpem9udGFsU2Ny
b2xsZXIoKTsKK30KKworLSAodm9pZClfc2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXI6
KEJPT0wpYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIKK3sKKyAgICBfcGFnZS0+c2V0QWx3
YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIp
OworfQorCistIChCT09MKV9hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKK3sKKyAgICByZXR1
cm4gX3BhZ2UtPmFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcigpOworfQorCistICh2b2lkKV9z
ZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6KEJPT0wpYWx3YXlzU2hvd3NWZXJ0aWNhbFNj
cm9sbGVyCit7CisgICAgX3BhZ2UtPnNldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcihhbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpOworfQorCistIChCT09MKV91c2VTeXN0ZW1BcHBlYXJh
bmNlCit7CisgICAgcmV0dXJuIF9pbXBsLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCk7Cit9CisKKy0g
KHZvaWQpX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6KEJPT0wpdXNlU3lzdGVtQXBwZWFyYW5jZQor
eworICAgIF9pbXBsLT5zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2Up
OworfQorCistICh2b2lkKV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KF9XS092ZXJsYXlTY3Jv
bGxiYXJTdHlsZSlzY3JvbGxiYXJTdHlsZQoreworICAgIF9pbXBsLT5zZXRPdmVybGF5U2Nyb2xs
YmFyU3R5bGUodG9Db3JlU2Nyb2xsYmFyU3R5bGUoc2Nyb2xsYmFyU3R5bGUpKTsKK30KKworLSAo
X1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlKV9vdmVybGF5U2Nyb2xsYmFyU3R5bGUKK3sKKyAgICBy
ZXR1cm4gdG9BUElTY3JvbGxiYXJTdHlsZShfaW1wbC0+b3ZlcmxheVNjcm9sbGJhclN0eWxlKCkp
OworfQorCistIChOU1ZpZXcgKilfaW5zcGVjdG9yQXR0YWNobWVudFZpZXcKK3sKKyAgICByZXR1
cm4gX2ltcGwtPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Cit9CisKKy0gKHZvaWQpX3NldElu
c3BlY3RvckF0dGFjaG1lbnRWaWV3OihOU1ZpZXcgKiluZXdWaWV3Cit7CisgICAgX2ltcGwtPnNl
dEluc3BlY3RvckF0dGFjaG1lbnRWaWV3KG5ld1ZpZXcpOworfQorCistICh2b2lkKV9zZXRUaHVt
Ym5haWxWaWV3OihfV0tUaHVtYm5haWxWaWV3ICopdGh1bWJuYWlsVmlldworeworICAgIF9pbXBs
LT5zZXRUaHVtYm5haWxWaWV3KHRodW1ibmFpbFZpZXcpOworfQorCistIChfV0tUaHVtYm5haWxW
aWV3ICopX3RodW1ibmFpbFZpZXcKK3sKKyAgICBpZiAoIV9pbXBsKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBfaW1wbC0+dGh1bWJuYWlsVmlldygpOworfQorCistICh2b2lkKV9z
ZXRJZ25vcmVzQWxsRXZlbnRzOihCT09MKWlnbm9yZXNBbGxFdmVudHMKK3sKKyAgICBfaW1wbC0+
c2V0SWdub3Jlc0FsbEV2ZW50cyhpZ25vcmVzQWxsRXZlbnRzKTsKK30KKworLSAoQk9PTClfaWdu
b3Jlc0FsbEV2ZW50cworeworICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc0FsbEV2ZW50cygpOwor
fQorCistIChCT09MKV91c2VQbGF0Zm9ybUZpbmRVSQoreworICAgIHJldHVybiBfdXNlUGxhdGZv
cm1GaW5kVUk7Cit9CisKKy0gKHZvaWQpX3NldFVzZVBsYXRmb3JtRmluZFVJOihCT09MKXVzZVBs
YXRmb3JtRmluZFVJCit7CisgICAgX3VzZVBsYXRmb3JtRmluZFVJID0gdXNlUGxhdGZvcm1GaW5k
VUk7CisKKyAgICBpZiAoX3RleHRGaW5kZXJDbGllbnQpCisgICAgICAgIFtzZWxmIF9oaWRlRmlu
ZFVJXTsKKyAgICBfdGV4dEZpbmRlckNsaWVudCA9IG5pbDsKK30KKworLSAodm9pZClfc2V0U2hv
dWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXM6KEJPT0wpc2hvdWxkU3VwcHJlc3MKK3sK
KyAgICBfaW1wbC0+c2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMoc2hvdWxk
U3VwcHJlc3MpOworfQorCistIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJhbWVI
YW5kbGUgKilmcmFtZUhhbmRsZQoreworICAgIGlmIChhdXRvKiB3ZWJGcmFtZVByb3h5ID0gX3Bh
Z2UtPnByb2Nlc3MoKS53ZWJGcmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQoZnJh
bWVIYW5kbGUuX2ZyYW1lSUQpKSkKKyAgICAgICAgcmV0dXJuIF9pbXBsLT5jYW5DaGFuZ2VGcmFt
ZUxheW91dCgqd2ViRnJhbWVQcm94eSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCistIChCT09M
KV90cnlUb1N3aXBlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQgaWdub3JpbmdQaW5uZWRTdGF0
ZTooQk9PTClpZ25vcmluZ1Bpbm5lZFN0YXRlCit7CisgICAgcmV0dXJuIF9pbXBsLT50cnlUb1N3
aXBlV2l0aEV2ZW50KGV2ZW50LCBpZ25vcmluZ1Bpbm5lZFN0YXRlKTsKK30KKworLSAodm9pZClf
ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93cworeworICAgIF9pbXBsLT5kaXNtaXNz
Q29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzRnJvbVZpZXdPbmx5KCk7Cit9CisKKy0gKHZvaWQp
X3NldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldAoreworICAg
IF9pbXBsLT5zZXRGcmFtZUFuZFNjcm9sbEJ5KE5TUmVjdFRvQ0dSZWN0KHJlY3QpLCBOU1NpemVU
b0NHU2l6ZShvZmZzZXQpKTsKK30KKworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxl
ZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPmdlc3R1cmVFdmVudFdh
c05vdEhhbmRsZWRCeVdlYkNvcmVGcm9tVmlld09ubHkoZXZlbnQpOworfQorCistICh2b2lkKV9k
aXNhYmxlRnJhbWVTaXplVXBkYXRlcworeworICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBk
YXRlcygpOworfQorCistICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzCit7CisgICAgX2lt
cGwtPmVuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMoKTsKK30KKworLSAodm9pZClfYmVnaW5EZWZlcnJp
bmdWaWV3SW5XaW5kb3dDaGFuZ2VzCit7CisgICAgX2ltcGwtPmJlZ2luRGVmZXJyaW5nVmlld0lu
V2luZG93Q2hhbmdlcygpOworfQorCistICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dD
aGFuZ2VzCit7CisgICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMoKTsK
K30KKworLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMKK3sKKyAg
ICBfaW1wbC0+ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMoKTsKK30KKworLSAo
dm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MKK3sK
KyAgICBfaW1wbC0+c2V0Q3VzdG9tU3dpcGVWaWV3cyhjdXN0b21Td2lwZVZpZXdzKTsKK30KKwor
LSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29u
dGVudEluc2V0Cit7CisgICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5z
ZXQodG9wQ29udGVudEluc2V0KTsKK30KKworLSAodm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNo
b3RDYWxsYmFjazoodm9pZCheKShDR1JlY3QpKWNhbGxiYWNrCit7CisgICAgX2ltcGwtPnNldERp
ZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soY2FsbGJhY2spOworfQorCistIChOU1ZpZXcgKilf
ZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldworeworICAgIHJldHVybiBfaW1wbC0+ZnVsbFNjcmVl
blBsYWNlaG9sZGVyVmlldygpOworfQorCistIChOU1dpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93
Cit7CisgICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuV2luZG93KCk7Cit9CisKKy0gKGlkKV9p
bW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDooX1dLSGl0
VGVzdFJlc3VsdCAqKWhpdFRlc3RSZXN1bHQgd2l0aFR5cGU6KF9XS0ltbWVkaWF0ZUFjdGlvblR5
cGUpdHlwZSB1c2VyRGF0YTooaWQ8TlNTZWN1cmVDb2Rpbmc+KXVzZXJEYXRhCit7CisgICAgcmV0
dXJuIG5pbDsKK30KKworLSAoTlNQcmludE9wZXJhdGlvbiAqKV9wcmludE9wZXJhdGlvbldpdGhQ
cmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvCit7CisgICAgcmV0dXJuIFtzZWxmIHBy
aW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzpwcmludEluZm9dOworfQorCistIChOU1ByaW50T3Bl
cmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmlu
dEluZm8gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUKK3sKKyAgICBpZiAo
YXV0byogd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6
ZnJhbWVJZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCisgICAgICAgIHJl
dHVybiBfaW1wbC0+cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKHByaW50SW5mbywgKndlYkZy
YW1lUHJveHkpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKEJPT0wpX3dhbnRzTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldworeworI2lmIEhBVkUoVE9VQ0hfQkFSKQorICAgIHJldHVybiBfaW1w
bC0+Y2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCk7CisjZWxzZQorICAgIHJl
dHVybiBOTzsKKyNlbmRpZgorfQorCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250
cm9sc1ZpZXc6KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFW
RShUT1VDSF9CQVIpCisgICAgX2ltcGwtPnNldENsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldyh3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcpOworI2VuZGlmCit9CisKKy0g
KGlkKV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7CisjaWYgSEFWRShUT1VDSF9CQVIpCisg
ICAgcmV0dXJuIF9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKSA/
IF9pbXBsLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgOiBuaWw7CisjZWxzZQorICAgIHJl
dHVybiBuaWw7CisjZW5kaWYKK30KKworLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMg
dG8gb3ZlcnJpZGUuCistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihpZClt
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cit7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIGZvciBz
dWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorLSAodm9pZClfcmVtb3ZlTWVkaWFQbGF5YmFja0NvbnRy
b2xzVmlldworeworfQorCistICh2b2lkKV9wcmVwYXJlRm9yTW92ZVRvV2luZG93OihOU1dpbmRv
dyAqKXRhcmdldFdpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgoreworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbWFrZUJsb2Nr
UHRyKGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBfaW1wbC0+cHJlcGFyZUZvck1vdmVUb1dpbmRv
dyh0YXJnZXRXaW5kb3csIFtjb21wbGV0aW9uSGFuZGxlckNvcHldIHsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXJDb3B5KCk7CisgICAgfSk7Cit9CisKK0BlbmQgLy8gV0tXZWJWaWV3IChXS1By
aXZhdGVNYWMpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMubW0KaW5kZXggZDZj
NTk2ZDhiOTU4OTMyNmNmNjM0NTJlYWQ5Yzc2NzliOGNiYmYxZS4uMDJiNGQ5MTcwOTc2YzgxZDM5
NTEzNDg2NTgyZGIzYjA1ZjM5ZWEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQpAQCAtMjgsOCArMjgsMTAgQEAK
IAogI2lmIFBMQVRGT1JNKE1BQykKIAotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNp
bXBvcnQgIldLV2ViVmlld01hYy5oIgogI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5o
IgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJWaWV3SW1wbC5oIgogCiBA
aW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1Rlc3RpbmdNYWMpCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCA0ZGYzYWQ1NTU1
MDVkNmQ4M2FkMmFkMWFmZDk4NTM2ZDExZmI2ZWE3Li5hMjEyNTYzODYxMThjNzM5MjZkOTBhNGQ1
YjhiMTE0ZjQwY2I3M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLm1tCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJXS1Byb2Nlc3NQ
b29sSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnkuaCIKKyNpbXBvcnQg
IldLV2ViVmlld0lPUy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQg
IldLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudVBy
b3h5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCmlu
ZGV4IGMwMDFhNTk1YWIxZDYxMTZiMWUzMjExMGRmMDQ3NzI0NjYzOWE3MjUuLmZmZjJjNWUyNjI1
MmE5YzE4NDU3OGZmNWM5ZTRmM2JhY2VmMzJjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC00NSw3ICs0NSw3IEBACiAjaW1wb3J0ICJXS1By
ZWZlcmVuY2VzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oIgog
I2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5oIgogI2ltcG9ydCAiV2ViRnJhbWVQcm94
eS5oIgogI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIldlYlBhZ2VHcm91
cC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggYjM3NjUwYmU0ZGU4NmExNzVjNjFkZDFkMWY3ZTk1MTFm
NGM4YTQ2Yy4uYmVjZDkxNTBkMDIzZjM4ZjE4N2JiOTIxMTkyNjQ2MGVmMDMwOWE1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCkBAIC02OSw3ICs2OSw3IEBACiAjaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRl
LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uLmgiCiAjaW1wb3J0ICJXS1dlYlZp
ZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIK
KyNpbXBvcnQgIldLV2ViVmlld0lPUy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgog
I2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCIKICNpbXBvcnQgIldlYkF1
dG9jb3JyZWN0aW9uQ29udGV4dC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLUERGVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1BERlZp
ZXcubW0KaW5kZXggOGNjYzYyNzgzMGNhYzU3MDk4OWIzODc1ODgwMjgzNDAwMTBlNDUzYi4uZjc2
OTY4OTUzM2M0Mzg1ZWFhODVjMTdhZTNmZTdkN2U2NTRkOWJkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLUERGVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tQREZWaWV3Lm1tCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJXS0tl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCIKICNpbXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUu
aCIKICNpbXBvcnQgIldLV2ViRXZlbnQuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdJT1MuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2lt
cG9ydCAiX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCIKICNpbXBvcnQgPE1vYmls
ZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1Njcm9sbFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tTY3JvbGxWaWV3Lm1tCmluZGV4IDkwMzU3ZGQ5NjljY2FkNmM2ZjRmZmM2Y2Nl
MmFjMDYyYTE4M2Y3MTAuLjZhZWYyYjNjNWUxZWM1OTdiOGU4M2M0MmNiNjBhMTdhZmFjMjhlNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1Njcm9sbFZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLU2Nyb2xsVmlldy5tbQpAQCAtMzEs
NyArMzEsNyBAQAogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgIlZlcnNpb25DaGVja3Mu
aCIKICNpbXBvcnQgIldLRGVmZXJyaW5nR2VzdHVyZVJlY29nbml6ZXIuaCIKLSNpbXBvcnQgIldL
V2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJT1MuaCIKICNpbXBvcnQgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLU3lzdGVtUHJldmll
d1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tTeXN0ZW1QcmV2aWV3Vmll
dy5tbQppbmRleCBmOWFhZDgzNzZiMWEwNWIwZmZlZjljNTllNTgyZjUxMTgxYzU2MDY0Li40NTVj
YjQyMWNmNTNiNzBhMjcxYWFhZmFmODAxN2U1MDA0MDRlM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tTeXN0ZW1QcmV2aWV3Vmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tTeXN0ZW1QcmV2aWV3Vmlldy5tbQpAQCAtMzAsNyArMzAs
NyBAQAogCiAjaW1wb3J0ICJBUElGaW5kQ2xpZW50LmgiCiAjaW1wb3J0ICJBUElVSUNsaWVudC5o
IgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lPUy5o
IgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMv
TW9iaWxlQ29yZVNlcnZpY2VzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWM4
NWZjMTU0OTRlMWIyMjMxNTZhMzU0Y2FhOWQyYjJmNmU4OWI5ZC4uZjRhYWZhY2I3ZmM4OWZjZjA5
MjUyOGViZmE4NDEwNjU0YWJmYWEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzYsNiArMTM2LDggQEAKIAkJMEZGMjRBMkQxODc5
RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGMjRBMkIxODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkwRkYyNEEyRTE4NzlFNEJDMDAzQUJGMEMg
LyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYyNEEyQzE4NzlFNEJDMDAzQUJG
MEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJ
CTBGRjI2NEEwMUExRkY5Q0MwMDFGRTc1OSAvKiBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJm
b3JtYW5jZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzA3Qzc5MUExRkVFQTMwMERBN0E0NSAvKiBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQ
ZXJmb3JtYW5jZURhdGEuaCAqLzsgfTsKKwkJMEZGRUQ5OEUyM0EzMjAwQTAwRUVGNDU5IC8qIFdL
V2ViVmlld0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGRUQ5OEMyM0EzMjAwNDAwRUVGNDU5IC8qIFdLV2ViVmlld0lPUy5oICovOyB9OworCQkw
RkZFRDk5MzIzQTMyMDNEMDBFRUY0NTkgLyogV0tXZWJWaWV3TWFjLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZFRDk5MDIzQTMyMDM4MDBFRUY0NTkg
LyogV0tXZWJWaWV3TWFjLmggKi87IH07CiAJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThDMSAvKiBX
ZWJVc2VyTWVkaWFDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBNDEwRjQ5MTlBRjdCODAwMDJFQkFCNSAvKiBXZWJVc2VyTWVkaWFDbGllbnQu
aCAqLzsgfTsKIAkJMUEwMDJENDMxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZUlu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTAwMkQ0MjE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJMUEwMDJENDQxOTZCMzM4OTAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMDJEM0YxOTZCMzI5
NDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTM2LDYgKzIxMzgsMTAgQEAKIAkJMEZGMjRBMkIx
ODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkwRkYy
NEEyQzE4NzlFNEJDMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1l
c3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMEZGMjRBMkYxODc5RTRGRTAwM0FCRjBDIC8qIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZGRUQ5OEMyM0EzMjAwNDAwRUVGNDU5IC8qIFdLV2ViVmlld0lPUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS1dlYlZpZXdJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGRUQ5OEQyM0EzMjAwNTAwRUVGNDU5IC8qIFdLV2ViVmlld0lPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdLV2ViVmlld0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGRUQ5OEYyM0EzMjAzNzAwRUVGNDU5IC8qIFdLV2ViVmlld01hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld01hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRUQ5OTAyM0EzMjAzODAwRUVGNDU5IC8qIFdLV2ViVmlld01h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXdNYWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTA1OEM3QjFGRUE1NTg1RTExQ0EyQ0JCIC8qIENv
Y29hLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29jb2EuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
IjxhYnNvbHV0ZT4iOyB9OwogCQkxQTAwMkQzRTE5NkIzMjk0MDBCOUFENDQgLyogX1dLU2Vzc2lv
blN0YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLU2Vz
c2lvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAwMkQzRjE5NkIz
Mjk0MDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1Nlc3Npb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTE2Nyw2ICs1MTczLDggQEAKIAkJMEY0NUEzMkUyMzlEODk2MDAwMjk0QUJGIC8qIGlvcyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZGRUQ5OEMy
M0EzMjAwNDAwRUVGNDU5IC8qIFdLV2ViVmlld0lPUy5oICovLAorCQkJCTBGRkVEOThEMjNBMzIw
MDUwMEVFRjQ1OSAvKiBXS1dlYlZpZXdJT1MubW0gKi8sCiAJCQkJMEY0NUEzMkYyMzlEODlBMDAw
Mjk0QUJGIC8qIFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmggKi8sCiAJCQkJMEY0NUEz
MzAyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MubW0gKi8sCiAJCQkpOwpA
QCAtODU4MCw2ICs4NTg4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDODY5OUIzMTE2QUFE
QUEwMDJBOTI1QiAvKiBXS1ZpZXcubW0gKi8sCiAJCQkJQkM4Njk5QjQxMTZBQURBQTAwMkE5MjVC
IC8qIFdLVmlld0ludGVybmFsLmggKi8sCisJCQkJMEZGRUQ5OTAyM0EzMjAzODAwRUVGNDU5IC8q
IFdLV2ViVmlld01hYy5oICovLAorCQkJCTBGRkVEOThGMjNBMzIwMzcwMEVFRjQ1OSAvKiBXS1dl
YlZpZXdNYWMubW0gKi8sCiAJCQkJMEY0NUEzMzMyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmll
d1ByaXZhdGVGb3JUZXN0aW5nTWFjLmggKi8sCiAJCQkJMEY0NUEzMzQyMzlEODlBRjAwMjk0QUJG
IC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMubW0gKi8sCiAJCQkpOwpAQCAtMTA4NzUsNiArMTA4ODUs
OCBAQAogCQkJCTJEN0FBRkQzMThDODY0MDYwMEE3QUNENCAvKiBXS1dlYlZpZXdDb250ZW50UHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQzZEOUMzMThDNDRBNjEwMDQzQkFENCAvKiBX
S1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2
NkJGOEYxOEEwNTJFRDAwMjA3MUI0IC8qIFdLV2ViVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkZFRDk4RTIzQTMyMDBBMDBFRUY0NTkgLyogV0tXZWJWaWV3SU9TLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkZFRDk5MzIzQTMyMDNEMDBFRUY0NTkgLyogV0tXZWJWaWV3TWFjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyNkY5QTgzQjE4QTM0NjgxMDBBRUI4OEEgLyogV0tXZWJWaWV3
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NUEzM0QyMzlEOENDNDAwMjk0QUJGIC8q
IFdLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1QTMz
MTIzOUQ4OUExMDAyOTRBQkYgLyogV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCBpbiBI
ZWFkZXJzICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>