<?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>176239</bug_id>
          
          <creation_ts>2017-09-01 12:32:30 -0700</creation_ts>
          <short_desc>Make PageClientImplCocoa a proper superclass of PageClientImpls for Mac and iOS</short_desc>
          <delta_ts>2017-09-27 12:51:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>buildbot</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344521</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-01 12:32:30 -0700</bug_when>
    <thetext>Make PageClientImplCocoa a proper superclass of PageClientImpls for Mac and iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344524</commentid>
    <comment_count>1</comment_count>
      <attachid>319629</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-01 12:34:03 -0700</bug_when>
    <thetext>Created attachment 319629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344525</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-01 12:35:46 -0700</bug_when>
    <thetext>Attachment 319629 did not pass style-queue:


ERROR: Source/WebKit/UIProcess/mac/PageClientImplMac.h:120:  The parameter name &quot;layer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/UIProcess/mac/PageClientImplMac.mm:180:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/UIProcess/mac/PageClientImplMac.mm:403:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344531</commentid>
    <comment_count>3</comment_count>
      <attachid>319630</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-01 12:39:31 -0700</bug_when>
    <thetext>Created attachment 319630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344552</commentid>
    <comment_count>4</comment_count>
      <attachid>319639</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-01 13:16:23 -0700</bug_when>
    <thetext>Created attachment 319639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344611</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-01 15:19:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/r221502</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353684</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:51:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694145&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319629</attachid>
            <date>2017-09-01 12:34:03 -0700</date>
            <delta_ts>2017-09-01 12:39:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176239-20170901123402.patch</filename>
            <type>text/plain</type>
            <size>100774</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE0OTIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE3LTA5LTAxICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBQYWdlQ2xp
ZW50SW1wbENvY29hIGEgcHJvcGVyIHN1cGVyY2xhc3Mgb2YgUGFnZUNsaWVudEltcGxzIGZvciBN
YWMgYW5kIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc2MjM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGxDb2NvYTo6UGFnZUNsaWVudEltcGxDb2NvYSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvV2lsbENoYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzUGxheWluZ0F1ZGlv
V2lsbENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpp
c1BsYXlpbmdBdWRpb0RpZENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmguCisgICAgICAgICogVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbE1hYy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
UGFnZUNsaWVudEltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQ
cm94eU1hYy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tOgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE3LTA5LTAxICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFj
ZSBXS1VJRGVsZWdhdGVQcml2YXRlJ3MgaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2Ugd2l0aCBLVk8g
X2lzUGxheWluZ0F1ZGlvIG9uIFdLV2ViVmlldwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorCitAY2xhc3MgV0tXZWJWaWV3OworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgUGFnZUNsaWVudEltcGxDb2NvYSA6IHB1YmxpYyBQYWdlQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBQYWdlQ2xpZW50SW1wbENvY29hKFdLV2ViVmlldyAqd2ViVmll
dykKKyAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykgeyB9CisgICAgdm9pZCBpc1BsYXlpbmdB
dWRpb1dpbGxDaGFuZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdl
KCkgZmluYWw7Citwcm90ZWN0ZWQ6CisgICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7Cit9OworCit9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGll
bnRJbXBsQ29jb2EubW0JKHJldmlzaW9uIDIyMTQ4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDIx
ICsyNCwyMCBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGFnZUNsaWVu
dEltcGwuaCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsQ29jb2EuaCIKIAotI2ltcG9ydCAiUGFn
ZUNsaWVudEltcGxJT1MuaCIKICNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmlzUGxheWluZ0F1ZGlvV2lsbENo
YW5nZSgpCit2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvV2lsbENoYW5n
ZSgpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICBbbV93ZWJWaWV3IHdpbGxDaGFuZ2VWYWx1
ZUZvcktleTpOU1N0cmluZ0Zyb21TZWxlY3RvcihAc2VsZWN0b3IoX2lzUGxheWluZ0F1ZGlvKSld
OwogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmlzUGxheWluZ0F1ZGlvRGlkQ2hh
bmdlKCkKK3ZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2Uo
KQogewogI2lmIFdLX0FQSV9FTkFCTEVECiAgICAgW21fd2ViVmlldyBkaWRDaGFuZ2VWYWx1ZUZv
cktleTpOU1N0cmluZ0Zyb21TZWxlY3RvcihAc2VsZWN0b3IoX2lzUGxheWluZ0F1ZGlvKSldOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJl
dmlzaW9uIDIyMTQ2NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW1wb3J0ICJOYXRpdmVX
ZWJNb3VzZUV2ZW50LmgiCiAjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW1wb3J0
ICJQYWdlQ2xpZW50LmgiCi0jaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorI2ltcG9ydCAiUGFn
ZUNsaWVudEltcGxNYWMuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgogI2ltcG9ydCAi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNpb24gMjIxNDg5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDE3ICsyNywxNiBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQogCi0jaW1wb3J0ICJQYWdlQ2xpZW50
LmgiCisjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbENvY29hLmgiCiAjaW1wb3J0ICJXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xB
U1MgV0tDb250ZW50VmlldzsKLU9CSkNfQ0xBU1MgV0tXZWJWaWV3OwogT0JKQ19DTEFTUyBXS0Vk
aXRvclVuZG9UYXJnZXRPYmpDOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAKLWNsYXNzIFBh
Z2VDbGllbnRJbXBsIDogcHVibGljIFBhZ2VDbGllbnQKK2NsYXNzIFBhZ2VDbGllbnRJbXBsIDog
cHVibGljIFBhZ2VDbGllbnRJbXBsQ29jb2EKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAg
ICAgLCBwdWJsaWMgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAogI2VuZGlmCkBAIC0x
OTQsOCArMTkzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlcmVmVmlldygpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSBvdmVycmlkZTsKLSAgICB2b2lk
IGlzUGxheWluZ0F1ZGlvV2lsbENoYW5nZSgpIGZpbmFsOwotICAgIHZvaWQgaXNQbGF5aW5nQXVk
aW9EaWRDaGFuZ2UoKSBmaW5hbDsKIAogICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIG92ZXJyaWRlOwogCkBAIC0y
MTQsNyArMjExLDYgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgV0tDb250ZW50VmlldyAqbV9j
b250ZW50VmlldzsKLSAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKICAgICBSZXRhaW5QdHI8V0tF
ZGl0b3JVbmRvVGFyZ2V0T2JqQz4gbV91bmRvVGFyZ2V0OwogfTsKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5tbQkocmV2aXNpb24gMjIxNDY3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOCArMTEzLDgg
QEAgLSAodm9pZClyZWRvRWRpdGluZzooaWQpc2VuZGVyCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKFdLQ29udGVudFZpZXcgKmNvbnRlbnRWaWV3
LCBXS1dlYlZpZXcgKndlYlZpZXcpCisgICAgOiBQYWdlQ2xpZW50SW1wbENvY29hKHdlYlZpZXcp
CiAgICAgOiBtX2NvbnRlbnRWaWV3KGNvbnRlbnRWaWV3KQotICAgICwgbV93ZWJWaWV3KHdlYlZp
ZXcpCiAgICAgLCBtX3VuZG9UYXJnZXQoYWRvcHROUyhbW1dLRWRpdG9yVW5kb1RhcmdldE9iakMg
YWxsb2NdIGluaXRdKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAyMjE0ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDI2MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9S
TShNQUMpCi0KLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKLSNpbmNsdWRlICJQYWdlQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7Ci1AY2xh
c3MgV0tWaWV3OwotQGNsYXNzIFdLV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViVmlld0ltcGw7Ci0KLWNsYXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDogcHVi
bGljIFBhZ2VDbGllbnQKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgLCBwdWJsaWMg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAotI2VuZGlmCi0gICAgewotcHVibGljOgot
ICAgIFBhZ2VDbGllbnRJbXBsKE5TVmlldyAqLCBXS1dlYlZpZXcgKik7Ci0gICAgdmlydHVhbCB+
UGFnZUNsaWVudEltcGwoKTsKLQotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IFdlYlZpZXdJbXBs
IHNob3VsZCBiZWNvbWUgdGhlIFBhZ2VDbGllbnQuCi0gICAgdm9pZCBzZXRJbXBsKFdlYlZpZXdJ
bXBsJiBpbXBsKSB7IG1faW1wbCA9ICZpbXBsOyB9Ci0KLSAgICB2b2lkIHZpZXdXaWxsTW92ZVRv
QW5vdGhlcldpbmRvdygpOwotCi1wcml2YXRlOgotICAgIC8vIFBhZ2VDbGllbnQKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdp
b24mKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxP
cmlnaW4sIGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgdmlld1Njcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3Jl
OjpJbnRTaXplIHZpZXdTaXplKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1ZpZXdXaW5kb3dBY3Rp
dmUoKSBvdmVycmlkZTsKLSAgICBib29sIGlzVmlld0ZvY3VzZWQoKSBvdmVycmlkZTsKLSAgICBi
b29sIGlzVmlld1Zpc2libGUoKSBvdmVycmlkZTsKLSAgICBib29sIGlzVmlld1Zpc2libGVPck9j
Y2x1ZGVkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1ZpZXdJbldpbmRvdygpIG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNWaXN1YWxseUlkbGUoKSBvdmVycmlkZTsKLSAgICBMYXllckhvc3RpbmdNb2Rl
IHZpZXdMYXllckhvc3RpbmdNb2RlKCkgb3ZlcnJpZGU7Ci0gICAgQ29sb3JTcGFjZURhdGEgY29s
b3JTcGFjZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jv
b3RMYXllcihMYXllck9yVmlldyAqKSBvdmVycmlkZTsKLSAgICBMYXllck9yVmlldyAqYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBw
cm9jZXNzRGlkRXhpdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGFnZUNsb3NlZCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcmVm
ZXJlbmNlc0RpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29u
c3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29y
ZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpc1BsYXlpbmdBdWRp
b1dpbGxDaGFuZ2UoKSBmaW5hbDsKLSAgICB2b2lkIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkg
ZmluYWw7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUmVmPFdlYkVkaXRDb21tYW5k
UHJveHk+JiYsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGVhckFsbEVkaXRDb21tYW5kcygpIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuVW5kb1JlZG8oV2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKLSAgICB2b2lkIGV4ZWN1dGVVbmRvUmVk
byhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOwotICAgIGJvb2wgZXhlY3V0ZVNh
dmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0
aW9uLCBSZWY8U2hhcmVhYmxlQml0bWFwPiYmIGRyYWdJbWFnZSwgV2ViQ29yZTo6RHJhZ1NvdXJj
ZUFjdGlvbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGlt
YWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lv
biwgY29uc3QgU3RyaW5nJiB0aXRsZSwKLSAgICAgICAgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgdmlzaWJsZVVybCwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBhcmNo
aXZlQnVmZmVyKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotICAg
IHZvaWQgc2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlz
aWJsZVVybCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3Rh
dGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0KLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1Vz
ZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICBXZWJDb3Jl
OjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3Zl
cnJpZGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgV2ViQ29yZTo6
SW50UmVjdCByb290Vmlld1RvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlk
ZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKElPUykKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBv
aW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JikgPSAwOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJp
bGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotI2VuZGlmCi0KLSAgICBD
R1JlY3QgYm91bmRzT2ZMYXllckluTGF5ZXJCYWNrZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVy
ICpsYXllcikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlk
ZTsKLQotICAgIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHko
V2ViUGFnZVByb3h5Jikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAg
UmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFn
ZVByb3h5JiwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikg
b3ZlcnJpZGU7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgIFJl
ZlB0cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBSZWY8V2ViQ29yZTo6VmFsaWRhdGlvbkJ1YmJsZT4g
Y3JlYXRlVmFsaWRhdGlvbkJ1YmJsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdlYkNv
cmU6OlZhbGlkYXRpb25CdWJibGU6OlNldHRpbmdzJikgZmluYWw7Ci0KLSAgICB2b2lkIHNldFRl
eHRJbmRpY2F0b3IoUmVmPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+LCBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yV2luZG93TGlmZXRpbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNh
dG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25z
dCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKLQotICAgIFJl
ZlB0cjxWaWV3U25hcHNob3Q+IHRha2VWaWV3U25hcHNob3QoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZl
bnQmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQotICAgIHZvaWQg
Z2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJHZXN0dXJl
RXZlbnQmKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJv
Y2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dI
YXNGb2N1cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG1ha2VGaXJzdFJlc3BvbmRl
cigpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNo
YW5nZXMoYm9vbCBzaG91bGRTdXBwcmVzcykgb3ZlcnJpZGUgeyBtX3Nob3VsZFN1cHByZXNzRmly
c3RSZXNwb25kZXJDaGFuZ2VzID0gc2hvdWxkU3VwcHJlc3M7IH0KLQotICAgIHZvaWQgZGlkUGVy
Zm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSBvdmVycmlkZTsK
LSAgICBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdl
KFdlYkNvcmU6OlNjcm9sbGJhclN0eWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW50cmluc2lj
Q29udGVudFNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50cmluc2ljQ29u
dGVudFNpemUpIG92ZXJyaWRlOwotCi0jaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0g
ICAgdWludDY0X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1Rl
eHRBbHRlcm5hdGl2ZXM+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
aG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIG92ZXJyaWRl
OwotICAgIFZlY3RvcjxTdHJpbmc+IGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgc2V0RWRpdGFibGVFbGVt
ZW50SXNGb2N1c2VkKGJvb2wpIG92ZXJyaWRlOwotCi0jaWYgVVNFKElOU0VSVElPTl9VTkRPX0dS
T1VQSU5HKQotICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlk
ZTsKLSNlbmRpZgotCi0gICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKLSAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBm
dWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAvLyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xp
ZW50Ci0gICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBpc0Z1bGxTY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGVudGVyRnVsbFNjcmVlbigpIG92
ZXJyaWRlOwotICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGJl
Z2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBi
ZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQot
ICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpIG92ZXJyaWRlOwotICAgIHZvaWQg
bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChi
b29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOwotICAg
IHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxS
ZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpIG92ZXJyaWRl
OwotCi0gICAgTlNWaWV3ICphY3RpdmVWaWV3KCkgY29uc3Q7Ci0gICAgTlNXaW5kb3cgKmFjdGl2
ZVdpbmRvdygpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JNYWlu
RnJhbWUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNh
bWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUNvbnRy
b2xsZWRFbGVtZW50SURSZXNwb25zZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGhhbmRsZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mb1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZl
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxh
cHNlZFRpbWUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9u
SGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRz
RGVmYXVsdCwgQVBJOjpPYmplY3QqKSBvdmVycmlkZTsKLSAgICB2b2lkKiBpbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0
UmVzdWx0PiwgdWludDY0X3QsIFJlZlB0cjxBUEk6Ok9iamVjdD4pIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBkaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB2
aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaG93
UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUgKiwgV2ViQ29yZTo6SW50UG9pbnQpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgc3RhcnRXaW5kb3dEcmFnKCkgb3ZlcnJpZGU7Ci0gICAgTlNXaW5kb3cgKnBsYXRmb3Jt
V2luZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBvdmVycmlkZTsKLQotI2lmIFdL
X0FQSV9FTkFCTEVECi0gICAgTlNWaWV3ICppbnNwZWN0b3JBdHRhY2htZW50VmlldygpIG92ZXJy
aWRlOwotICAgIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeSgp
IG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBOU1ZpZXcgKm1fdmlldzsKLSAgICBXS1dlYlZpZXcg
Km1fd2ViVmlldzsKLSAgICBXZWJWaWV3SW1wbCogbV9pbXBsIHsgbnVsbHB0ciB9OwotI2lmIFVT
RShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICBDb3JyZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9u
UGFuZWw7Ci0jZW5kaWYKLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyPiBtX2FsdGVy
bmF0aXZlVGV4dFVJQ29udHJvbGxlcjsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3Nob3VsZFN1cHBy
ZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzIHsgZmFsc2UgfTsKLQotI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCi0gICAgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYg
bWVkaWFTZXNzaW9uTWFuYWdlcigpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIHJlZlZp
ZXcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmVmlldygpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSBvdmVycmlkZTsKLSAgICBib29sIHdpbmRvd0lz
RnJvbnRXaW5kb3dVbmRlck1vdXNlKGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmKSBvdmVycmlk
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAg
IyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAyMjE0
NjcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0JKG5v
bmV4aXN0ZW50KQpAQCAtMSw4ODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKLQotI2lmIFBMQVRG
T1JNKE1BQykKLQotI2ltcG9ydCAiQVBJSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiQ29sb3JT
cGFjZURhdGEuaCIKLSNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbXBvcnQgIkRvd25sb2Fk
UHJveHkuaCIKLSNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIk5hdGl2ZVdl
Ykdlc3R1cmVFdmVudC5oIgotI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgotI2lt
cG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgotI2ltcG9ydCAiTmF0aXZlV2ViV2hlZWxFdmVu
dC5oIgotI2ltcG9ydCAiTmF2aWdhdGlvblN0YXRlLmgiCi0jaW1wb3J0ICJTdHJpbmdVdGlsaXRp
ZXMuaCIKLSNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgotI2ltcG9ydCAiVmlld1Nu
YXBzaG90U3RvcmUuaCIKLSNpbXBvcnQgIldLQVBJQ2FzdC5oIgotI2ltcG9ydCAiV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5oIgotI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgotI2ltcG9ydCAi
V0tWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0
ICJXZWJDb2xvclBpY2tlck1hYy5oIgotI2ltcG9ydCAiV2ViQ29udGV4dE1lbnVQcm94eU1hYy5o
IgotI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgotI2ltcG9ydCAiV2ViUG9wdXBNZW51
UHJveHlNYWMuaCIKLSNpbXBvcnQgIldlYlZpZXdJbXBsLmgiCi0jaW1wb3J0ICJXaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uLmgiCi0jaW1wb3J0ICJfV0tEb3dubG9hZEludGVybmFsLmgiCi0jaW1wb3J0
ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS1RodW1ibmFpbFZpZXcu
aCIKLSNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvSW1hZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2lt
cG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9UZXh0SW5kaWNhdG9yV2luZG93Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RleHRVbmRvSW5z
ZXJ0aW9uTWFya3VwTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4K
LSNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBVU0UoRElDVEFU
SU9OX0FMVEVSTkFUSVZFUykKLSNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMuaD4K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSNpbmNsdWRl
IDxXZWJDb3JlL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4KLSNlbmRpZgotCi1AaW50ZXJmYWNl
IE5TQXBwbGljYXRpb24gKFdlYk5TQXBwbGljYXRpb25EZXRhaWxzKQotLSAoTlNDdXJzb3IgKilf
Y3Vyc29yUmVjdEN1cnNvcjsKLUBlbmQKLQotI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJf
SE9TVElORykKLUBpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykKLS0gKEJP
T0wpX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7Ci1AZW5kCi0jZW5kaWYKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKE5TVmlldyogdmlldywgV0tX
ZWJWaWV3ICp3ZWJWaWV3KQotICAgIDogbV92aWV3KHZpZXcpCi0gICAgLCBtX3dlYlZpZXcod2Vi
VmlldykKLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICAsIG1fYWx0ZXJuYXRp
dmVUZXh0VUlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyPigpKQotI2VuZGlmCi17Ci0jaWYgIVdLX0FQSV9FTkFCTEVECi0gICAgQVNTRVJUX1VO
VVNFRChtX3dlYlZpZXcsICFtX3dlYlZpZXcpOwotI2VuZGlmCi19Ci0KLVBhZ2VDbGllbnRJbXBs
Ojp+UGFnZUNsaWVudEltcGwoKQotewotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQ
cm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQotewotICAgIHJl
dHVybiBtX2ltcGwtPmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdpb24mKQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1
ZXN0U2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsT3JpZ2luLCBib29sIGlzUHJvZ3JhbW1hdGljU2Nyb2xsKQotewotfQotCi1XZWJD
b3JlOjpGbG9hdFBvaW50IFBhZ2VDbGllbnRJbXBsOjp2aWV3U2Nyb2xsUG9zaXRpb24oKQotewot
ICAgIHJldHVybiB7IH07Ci19Ci0KLUludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkK
LXsKLSAgICByZXR1cm4gSW50U2l6ZShbbV92aWV3IGJvdW5kc10uc2l6ZSk7Ci19Ci0KLU5TVmll
dyAqUGFnZUNsaWVudEltcGw6OmFjdGl2ZVZpZXcoKSBjb25zdAotewotI2lmIFdLX0FQSV9FTkFC
TEVECi0gICAgcmV0dXJuIChtX2ltcGwgJiYgbV9pbXBsLT50aHVtYm5haWxWaWV3KCkpID8gKE5T
VmlldyAqKW1faW1wbC0+dGh1bWJuYWlsVmlldygpIDogbV92aWV3OwotI2Vsc2UKLSAgICByZXR1
cm4gbV92aWV3OwotI2VuZGlmCi19Ci0KLU5TV2luZG93ICpQYWdlQ2xpZW50SW1wbDo6YWN0aXZl
V2luZG93KCkgY29uc3QKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX2ltcGwgJiYg
bV9pbXBsLT50aHVtYm5haWxWaWV3KCkpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnRodW1ibmFp
bFZpZXcoKS53aW5kb3c7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsICYmIG1faW1wbC0+dGFyZ2V0
V2luZG93Rm9yTW92ZVByZXBhcmF0aW9uKCkpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnRhcmdl
dFdpbmRvd0Zvck1vdmVQcmVwYXJhdGlvbigpOwotICAgIHJldHVybiBtX3ZpZXcud2luZG93Owot
fQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQotewotICAgIE5T
V2luZG93ICphY3RpdmVWaWV3V2luZG93ID0gYWN0aXZlV2luZG93KCk7Ci0gICAgcmV0dXJuIGFj
dGl2ZVZpZXdXaW5kb3cuaXNLZXlXaW5kb3cgfHwgW05TQXBwIGtleVdpbmRvd10gPT0gYWN0aXZl
Vmlld1dpbmRvdzsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIFdlYlBhZ2VQcm94eSBjb25z
dHJ1Y3RvciBiZWZvcmUgd2UgaGF2ZSBhIFdlYlZpZXdJbXBsLgotICAgIC8vIE9uY2UgV2ViVmll
d0ltcGwgYW5kIFBhZ2VDbGllbnQgbWVyZ2UsIHRoaXMgd29uJ3QgYmUgYSBwcm9ibGVtLgotICAg
IGlmICghbV9pbXBsKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICByZXR1cm4gbV9pbXBsLT5p
c0ZvY3VzZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6bWFrZUZpcnN0UmVzcG9uZGVy
KCkKLXsKLSAgICBpZiAobV9zaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgIFtbbV92aWV3IHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVy
Om1fdmlld107Ci19Ci0gICAgCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkK
LXsKLSAgICBOU1ZpZXcgKmFjdGl2ZVZpZXcgPSB0aGlzLT5hY3RpdmVWaWV3KCk7Ci0gICAgTlNX
aW5kb3cgKmFjdGl2ZVZpZXdXaW5kb3cgPSBhY3RpdmVXaW5kb3coKTsKLQotICAgIGlmICghYWN0
aXZlVmlld1dpbmRvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFhY3RpdmVW
aWV3V2luZG93LmlzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGFj
dGl2ZVZpZXcuaXNIaWRkZW5Pckhhc0hpZGRlbkFuY2VzdG9yKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAobV9pbXBsLT53aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKCkg
JiYgKGFjdGl2ZVZpZXdXaW5kb3cub2NjbHVzaW9uU3RhdGUgJiBOU1dpbmRvd09jY2x1c2lvblN0
YXRlVmlzaWJsZSkgIT0gTlNXaW5kb3dPY2NsdXNpb25TdGF0ZVZpc2libGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBs
Ojppc1ZpZXdWaXNpYmxlT3JPY2NsdWRlZCgpCi17Ci0gICAgcmV0dXJuIGFjdGl2ZVdpbmRvdygp
LmlzVmlzaWJsZTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQot
ewotICAgIHJldHVybiBhY3RpdmVXaW5kb3coKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6
aXNWaXN1YWxseUlkbGUoKQotewotICAgIHJldHVybiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpz
aW5nbGV0b24oKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZCgpIHx8
ICFpc1ZpZXdWaXNpYmxlKCk7Ci19Ci0KLUxheWVySG9zdGluZ01vZGUgUGFnZUNsaWVudEltcGw6
OnZpZXdMYXllckhvc3RpbmdNb2RlKCkKLXsKLSNpZiBIQVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVS
X0hPU1RJTkcpCi0gICAgaWYgKFthY3RpdmVXaW5kb3coKSBfaG9zdHNMYXllcnNJbldpbmRvd1Nl
cnZlcl0pCi0gICAgICAgIHJldHVybiBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gTGF5ZXJIb3N0aW5nTW9kZTo6SW5Qcm9jZXNzOwotfQotCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjp2aWV3V2lsbE1vdmVUb0Fub3RoZXJXaW5kb3coKQotewotICAgIGNs
ZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci19Ci0KLUNvbG9yU3BhY2VEYXRhIFBhZ2VDbGllbnRJbXBs
Ojpjb2xvclNwYWNlKCkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5jb2xvclNwYWNlKCk7Ci19Ci0K
LXZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRFeGl0KCkKLXsKLSAgICBtX2ltcGwtPnBy
b2Nlc3NEaWRFeGl0KCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQot
ewotICAgIG1faW1wbC0+cGFnZUNsb3NlZCgpOwotI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQotICAgIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5jbGVhcigpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAg
bV9pbXBsLT5kaWRSZWxhdW5jaFByb2Nlc3MoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
cHJlZmVyZW5jZXNEaWRDaGFuZ2UoKQotewotICAgIG1faW1wbC0+cHJlZmVyZW5jZXNEaWRDaGFu
Z2UoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApCi17Ci0gICAgbV9pbXBs
LT50b29sVGlwQ2hhbmdlZChvbGRUb29sVGlwLCBuZXdUb29sVGlwKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikKLXsKLSAgICBtX2ltcGwtPnVwZGF0
ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMoKTsKLSAgICBtX2ltcGwtPmRpc21pc3NDb250
ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NXaXRoQW5pbWF0aW9uKHRydWUpOwotfQotCi12b2lkIFBh
Z2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRl
cihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIGRhdGFSZWZlcmVuY2UpCi17Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKLXsKLSAgICBBU1NFUlRfQVJH
KGRvd25sb2FkLCBkb3dubG9hZCk7Ci0jaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBBU1NFUlQoW2Rv
d25sb2FkLT53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dLRG93bmxvYWQgY2xhc3NdXSk7Ci0g
ICAgW3N0YXRpY19jYXN0PF9XS0Rvd25sb2FkICo+KGRvd25sb2FkLT53cmFwcGVyKCkpIHNldE9y
aWdpbmF0aW5nV2ViVmlldzptX3dlYlZpZXddOwotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1Np
emUpCi17Ci0gICAgbV9pbXBsLT5kaWRDaGFuZ2VDb250ZW50U2l6ZShuZXdTaXplKTsKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vy
c29yKQotewotICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIHNoYXJlIHRoaXMgY29kZSB3
aXRoIFdlYktpdDEncyBXZWJDaHJvbWVDbGllbnQuCi0KLSAgICAvLyBUaGUgV2ViIHByb2Nlc3Mg
bWF5IGhhdmUgYXNrZWQgdG8gY2hhbmdlIHRoZSBjdXJzb3Igd2hlbiB0aGUgdmlldyB3YXMgaW4g
YW4gYWN0aXZlIHdpbmRvdywgYnV0Ci0gICAgLy8gaWYgaXQgaXMgbm8gbG9uZ2VyIGluIGEgd2lu
ZG93IG9yIHRoZSB3aW5kb3cgaXMgbm90IGFjdGl2ZSwgdGhlbiB0aGUgY3Vyc29yIHNob3VsZCBu
b3QgY2hhbmdlLgotICAgIGlmICghaXNWaWV3V2luZG93QWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChbTlNBcHAgX2N1cnNvclJlY3RDdXJzb3JdKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNXaW5kb3cgKndp
bmRvdyA9IFttX3ZpZXcgd2luZG93XTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKFt3aW5kb3cgd2luZG93TnVtYmVyXSAhPSBbTlNXaW5kb3cgd2luZG93TnVt
YmVyQXRQb2ludDpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXSBiZWxvd1dpbmRvd1dpdGhXaW5kb3dO
dW1iZXI6MF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TQ3Vyc29yICpwbGF0Zm9ybUN1cnNv
ciA9IGN1cnNvci5wbGF0Zm9ybUN1cnNvcigpOwotICAgIGlmIChbTlNDdXJzb3IgY3VycmVudEN1
cnNvcl0gPT0gcGxhdGZvcm1DdXJzb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtwbGF0Zm9y
bUN1cnNvciBzZXRdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCi17Ci0gICAgW05TQ3Vy
c29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpoaWRkZW5VbnRpbE1vdXNlTW92ZXNdOwotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3Qg
V2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJikKLXsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6cmVnaXN0ZXJFZGl0Q29tbWFuZChSZWY8V2ViRWRpdENvbW1hbmRQcm94eT4mJiBjb21tYW5k
LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBtX2ltcGwtPnJl
Z2lzdGVyRWRpdENvbW1hbmQoV1RGTW92ZShjb21tYW5kKSwgdW5kb09yUmVkbyk7Ci19Ci0KLSNp
ZiBVU0UoSU5TRVJUSU9OX1VORE9fR1JPVVBJTkcpCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdp
c3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpCi17Ci0gICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRv
R3JvdXBpbmdXaXRoVW5kb01hbmFnZXIoW21fdmlldyB1bmRvTWFuYWdlcl0pOwotfQotI2VuZGlm
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKLXsKLSAgICBt
X2ltcGwtPmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6
OmNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAg
IHJldHVybiAodW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pID8gW1ttX3ZpZXcgdW5k
b01hbmFnZXJdIGNhblVuZG9dIDogW1ttX3ZpZXcgdW5kb01hbmFnZXJdIGNhblJlZG9dOwotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRv
T3JSZWRvIHVuZG9PclJlZG8pCi17Ci0gICAgcmV0dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQ
cm94eTo6VW5kbykgPyBbW21fdmlldyB1bmRvTWFuYWdlcl0gdW5kb10gOiBbW21fdmlldyB1bmRv
TWFuYWdlcl0gcmVkb107Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZShj
b25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIFJlZjxTaGFyZWFibGVCaXRtYXA+JiYgZHJh
Z0ltYWdlLCBEcmFnU291cmNlQWN0aW9uIGFjdGlvbikKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gZHJhZ0NHSW1hZ2UgPSBkcmFnSW1hZ2UtPm1ha2VDR0ltYWdlKCk7Ci0gICAgUmV0YWlu
UHRyPE5TSW1hZ2U+IGRyYWdOU0ltYWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRX
aXRoQ0dJbWFnZTpkcmFnQ0dJbWFnZS5nZXQoKSBzaXplOmRyYWdJbWFnZS0+c2l6ZSgpXSk7Ci0g
ICAgSW50U2l6ZSBzaXplKFtkcmFnTlNJbWFnZSBzaXplXSk7Ci0gICAgc2l6ZS5zY2FsZSgxLjAg
LyBtX2ltcGwtPnBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBbZHJhZ05TSW1hZ2Ug
c2V0U2l6ZTpzaXplXTsKLQotICAgIG1faW1wbC0+ZHJhZ0ltYWdlRm9yVmlldyhtX3ZpZXcsIGRy
YWdOU0ltYWdlLmdldCgpLCBjbGllbnRQb3NpdGlvbiwgYWN0aW9uID09IERyYWdTb3VyY2VBY3Rp
b25MaW5rKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhRm9ySW1h
Z2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbWFn
ZUJ1ZmZlciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24s
IGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZp
c2libGVVUkwsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYXJjaGl2ZUJ1ZmZlcikKLXsKLSAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgIGltYWdlLT5z
ZXREYXRhKFdURk1vdmUoaW1hZ2VCdWZmZXIpLCB0cnVlKTsKLSAgICBtX2ltcGwtPnNldFByb21p
c2VkRGF0YUZvckltYWdlKGltYWdlLmdldCgpLCBmaWxlbmFtZSwgZXh0ZW5zaW9uLCB0aXRsZSwg
dXJsLCB2aXNpYmxlVVJMLCBhcmNoaXZlQnVmZmVyLmdldCgpLCBwYXN0ZWJvYXJkTmFtZSk7Ci19
Ci0KLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVS
TCkKLXsKLSAgICBtX2ltcGwtPnNldFByb21pc2VkRGF0YUZvckF0dGFjaG1lbnQoZmlsZW5hbWUs
IGV4dGVuc2lvbiwgdGl0bGUsIHVybCwgdmlzaWJsZVVSTCwgcGFzdGVib2FyZE5hbWUpOwotfQot
I2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKQot
ewotICAgIG1faW1wbC0+dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSgpOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpyZXNldFNlY3VyZUlucHV0U3RhdGUoKQotewotICAgIG1faW1wbC0+cmVzZXRT
ZWN1cmVJbnB1dFN0YXRlKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6Om5vdGlmeUlucHV0
Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKQotewotICAgIG1faW1wbC0+bm90aWZ5
SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpOwotfQotCi1GbG9hdFJlY3Qg
UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICByZXR1cm4gdG9EZXZpY2VTcGFjZShyZWN0LCBbbV92aWV3IHdpbmRvd10pOwot
fQotCi1GbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHRvVXNlclNwYWNlKHJlY3QsIFttX3ZpZXcg
d2luZG93XSk7Ci19Ci0gICAKLUludFBvaW50IFBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICBOU1BvaW50IHdpbmRvd0Nvb3JkID0gW1ttX3ZpZXcgd2luZG93XSBjb252
ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAg
ICByZXR1cm4gSW50UG9pbnQoW21fdmlldyBjb252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZp
ZXc6bmlsXSk7Ci19Ci0gICAgCi1JbnRSZWN0IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvU2Ny
ZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgTlNSZWN0IHRlbXBSZWN0ID0gcmVjdDsK
LSAgICB0ZW1wUmVjdCA9IFttX3ZpZXcgY29udmVydFJlY3Q6dGVtcFJlY3QgdG9WaWV3Om5pbF07
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgdGVtcFJlY3Qub3JpZ2lu
ID0gW1ttX3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOnRlbXBSZWN0Lm9yaWdpbl07
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QodGVtcFJlY3QpOwotfQotCi1JbnRSZWN0IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvV2lu
ZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgTlNSZWN0IHRlbXBSZWN0
ID0gcmVjdDsKLSAgICB0ZW1wUmVjdCA9IFttX3ZpZXcgY29udmVydFJlY3Q6dGVtcFJlY3QgdG9W
aWV3Om5pbF07Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodGVtcFJlY3QpOwotfQotCi12
b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmIGV2ZW50LCBib29sIGV2ZW50V2FzSGFuZGxlZCkKLXsKLSAgICBtX2ltcGwtPmRv
bmVXaXRoS2V5RXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZlbnRXYXNIYW5kbGVkKTsKLX0K
LQotUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBN
ZW51UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQotewotICAgIHJldHVybiBXZWJQb3B1cE1lbnVQ
cm94eU1hYzo6Y3JlYXRlKG1fdmlldywgcGFnZSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ09OVEVYVF9N
RU5VUykKLVJlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRl
Q29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IENvbnRleHRNZW51Q29u
dGV4dERhdGEmIGNvbnRleHQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKLXsKLSAgICByZXR1
cm4gV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Y3JlYXRlKG1fdmlldywgcGFnZSwgY29udGV4dCwg
dXNlckRhdGEpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKLVJl
ZlB0cjxXZWJDb2xvclBpY2tlcj4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbG9yUGlja2VyKFdl
YlBhZ2VQcm94eSogcGFnZSwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIFdlYkNvbG9yUGlja2Vy
TWFjOjpjcmVhdGUocGFnZSwgaW5pdGlhbENvbG9yLCByZWN0LCBtX3ZpZXcpOwotfQotI2VuZGlm
Ci0KLVJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlVmFsaWRhdGlv
bkJ1YmJsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFZhbGlkYXRpb25CdWJibGU6OlNl
dHRpbmdzJiBzZXR0aW5ncykKLXsKLSAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRl
KG1fdmlldywgbWVzc2FnZSwgc2V0dGluZ3MpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpz
ZXRUZXh0SW5kaWNhdG9yKFJlZjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUgbGlmZXRpbWUpCi17Ci0gICAgbV9pbXBsLT5z
ZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRpY2F0b3IuZ2V0KCksIGxpZmV0aW1lKTsKLX0KLQotdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24gZGlzbWlzc2FsQW5pbWF0aW9uKQotewotICAgIG1f
aW1wbC0+Y2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbihkaXNtaXNzYWxBbmltYXRpb24p
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJv
Z3Jlc3MoZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgbV9pbXBsLT5zZXRUZXh0SW5kaWNhdG9yQW5p
bWF0aW9uUHJvZ3Jlc3MocHJvZ3Jlc3MpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjphY2Nl
c3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhKQotewotICAgIG1faW1wbC0+c2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbihb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXSk7Ci19
Ci0gICAgCi12b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNT
RVJUKCFsYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSk7Ci0KLSAgICBDQUxheWVyICpyZW5kZXJM
YXllciA9IFdLTWFrZVJlbmRlckxheWVyKGxheWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKLSAg
ICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIocmVuZGVyTGF5ZXIp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKQotewotICAgIG1faW1wbC0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihu
aWwpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAg
IEFTU0VSVCghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpOwotCi0gICAgQ0FMYXllciAqcmVu
ZGVyTGF5ZXIgPSBXS01ha2VSZW5kZXJMYXllcihsYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCk7
Ci0gICAgbV9pbXBsLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJlbmRlckxh
eWVyKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z1Jvb3RMYXllcihDQUxheWVyICpyb290TGF5ZXIpCi17Ci0gICAgbV9pbXBsLT5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJvb3RMYXllcik7Ci19Ci0KLUNBTGF5ZXIgKlBhZ2VD
bGllbnRJbXBsOjphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9pbXBsLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCk7Ci19Ci0K
LVJlZlB0cjxWaWV3U25hcHNob3Q+IFBhZ2VDbGllbnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KCkK
LXsKLSAgICByZXR1cm4gbV9pbXBsLT50YWtlVmlld1NuYXBzaG90KCk7Ci19Ci0KLXZvaWQgUGFn
ZUNsaWVudEltcGw6OnNlbGVjdGlvbkRpZENoYW5nZSgpCi17Ci0gICAgbV9pbXBsLT5zZWxlY3Rp
b25EaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05v
dEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi17Ci0g
ICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIgPSBtX2ltcGwtPmdlc3R1cmVDb250cm9sbGVy
KCkpCi0gICAgICAgIGdlc3R1cmVDb250cm9sbGVyLT53aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5
V2ViQ29yZShldmVudC5uYXRpdmVFdmVudCgpKTsKLX0KLQotI2lmIEVOQUJMRShNQUNfR0VTVFVS
RV9FVkVOVFMpCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpnZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVk
QnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYkdlc3R1cmVFdmVudCYgZXZlbnQpCi17Ci0gICAgbV9p
bXBsLT5nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGV2ZW50Lm5hdGl2ZUV2ZW50
KCkpOwotfQotI2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnBsdWdpbkZvY3VzT3JXaW5k
b3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIs
IGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykKLXsKLSAgICBtX2ltcGwtPnBs
dWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQocGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNG
b2N1cywgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBw
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpCi17Ci0gICAgbV9pbXBsLT5zZXRQbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGVBbmRJZGVudGlmaWVyKHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSwgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJ
bmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvKQotewotICAgIG1faW1wbC0+cHJlcGFyZUZvckRpY3Rp
b25hcnlMb29rdXAoKTsKLQotICAgIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cChkaWN0aW9u
YXJ5UG9wdXBJbmZvLCBtX3ZpZXcsIFt0aGlzXShUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9y
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLCBUZXh0
SW5kaWNhdG9yV2luZG93TGlmZXRpbWU6OlBlcm1hbmVudCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwoQWx0ZXJuYXRpdmVUZXh0VHlwZSB0
eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQotewot
I2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICBpZiAoIWlzVmlld1Zpc2libGUoKSB8
fCAhaXNWaWV3SW5XaW5kb3coKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBh
bmVsLnNob3cobV92aWV3LCAqbV9pbXBsLCB0eXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNl
bWVudFN0cmluZ3MpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24p
Ci17Ci0jaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIG1fY29ycmVjdGlvblBhbmVs
LmRpc21pc3MocmVhc29uKTsKLSNlbmRpZgotfQotCi1TdHJpbmcgUGFnZUNsaWVudEltcGw6OmRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRl
cm5hdGl2ZVRleHQgcmVhc29uKQotewotI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAg
ICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWwuZGlzbWlzcyhyZWFzb24pOwotI2Vsc2UKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25S
ZXNwb25zZSB0b0NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlIHJlc3Bv
bnNlKQotewotICAgIHN3aXRjaCAocmVzcG9uc2UpIHsKLSAgICBjYXNlIFdlYkNvcmU6OkF1dG9j
b3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkOgotICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9u
UmVzcG9uc2VSZXZlcnRlZDsKLSAgICBjYXNlIFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9u
c2U6OkVkaXRlZDoKLSAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvblJlc3BvbnNlRWRpdGVkOwot
ICAgIGNhc2UgV2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQ6Ci0gICAg
ICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNwb25zZUFjY2VwdGVkOwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNwb25zZUFjY2Vw
dGVkOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCi17Ci0gICAgQ29ycmVj
dGlvblBhbmVsOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKG1faW1wbC0+c3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKSwgdG9Db3JyZWN0aW9uUmVzcG9uc2UocmVzcG9uc2UpLCByZXBsYWNl
ZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpy
ZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKFNjcm9sbGJhclN0eWxlIG5ld1N0eWxl
KQotewotICAgIC8vIE5vdyByZS1jcmVhdGUgYSB0cmFja2luZyBhcmVhIHdpdGggdGhlIGFwcHJv
cHJpYXRlIG9wdGlvbnMgZ2l2ZW4gdGhlIG5ldyBzY3JvbGxiYXIgc3R5bGUKLSAgICBOU1RyYWNr
aW5nQXJlYU9wdGlvbnMgb3B0aW9ucyA9IE5TVHJhY2tpbmdNb3VzZU1vdmVkIHwgTlNUcmFja2lu
Z01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdJblZpc2libGVSZWN0IHwgTlNUcmFj
a2luZ0N1cnNvclVwZGF0ZTsKLSAgICBpZiAobmV3U3R5bGUgPT0gU2Nyb2xsYmFyU3R5bGU6OkFs
d2F5c1Zpc2libGUpCi0gICAgICAgIG9wdGlvbnMgfD0gTlNUcmFja2luZ0FjdGl2ZUFsd2F5czsK
LSAgICBlbHNlCi0gICAgICAgIG9wdGlvbnMgfD0gTlNUcmFja2luZ0FjdGl2ZUluS2V5V2luZG93
OwotCi0gICAgUmV0YWluUHRyPE5TVHJhY2tpbmdBcmVhPiB0cmFja2luZ0FyZWEgPSBhZG9wdE5T
KFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbbV92aWV3IGZyYW1lXSBvcHRp
b25zOm9wdGlvbnMgb3duZXI6bV92aWV3IHVzZXJJbmZvOm5pbF0pOwotICAgIG1faW1wbC0+c2V0
UHJpbWFyeVRyYWNraW5nQXJlYSh0cmFja2luZ0FyZWEuZ2V0KCkpOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjppbnRyaW5zaWNDb250ZW50U2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBp
bnRyaW5zaWNDb250ZW50U2l6ZSkKLXsKLSAgICBtX2ltcGwtPnNldEludHJpbnNpY0NvbnRlbnRT
aXplKGludHJpbnNpY0NvbnRlbnRTaXplKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhl
Y3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykK
LXsKLSAgICByZXR1cm4gbV9pbXBsLT5leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcihOU1Nl
bGVjdG9yRnJvbVN0cmluZyhzZWxlY3RvclN0cmluZykpOwotfQotCi0jaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCi11aW50NjRfdCBQYWdlQ2xpZW50SW1wbDo6YWRkRGljdGF0aW9uQWx0
ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2
ZXMpCi17Ci0gICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5hZGRBbHRl
cm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3Zl
RGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCi17Ci0gICAg
bV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPnJlbW92ZUFsdGVybmF0aXZlcyhkaWN0YXRp
b25Db250ZXh0KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0RpY3RhdGlvbkFsdGVy
bmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRU
ZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQotewotICAgIGlmICghaXNWaWV3VmlzaWJs
ZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9hbHRlcm5h
dGl2ZVRleHRVSUNvbnRyb2xsZXItPnNob3dBbHRlcm5hdGl2ZXMobV92aWV3LCBib3VuZGluZ0Jv
eE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25Db250ZXh0LCBeKE5TU3RyaW5nICphY2NlcHRlZEFs
dGVybmF0aXZlKSB7Ci0gICAgICAgIG1faW1wbC0+aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRl
eHQoYWNjZXB0ZWRBbHRlcm5hdGl2ZSk7Ci0gICAgfSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBh
Z2VDbGllbnRJbXBsOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29u
dGV4dCkKLXsKLSAgICByZXR1cm4gbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPmFsdGVy
bmF0aXZlc0ZvckNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGJvb2wgZWRpdGFibGVF
bGVtZW50SXNGb2N1c2VkKQotewotICAgIG1faW1wbC0+c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1
c2VkKGVkaXRhYmxlRWxlbWVudElzRm9jdXNlZCk7Ci19Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCi0KLVdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIFBhZ2VDbGllbnRJbXBs
OjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkKLXsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLS8vIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQKLQotdm9pZCBQYWdlQ2xpZW50
SW1wbDo6Y2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpCi17Ci0gICAgbV9pbXBsLT5jbG9zZUZ1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmlzRnVs
bFNjcmVlbigpCi17Ci0gICAgaWYgKCFtX2ltcGwtPmhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2ltcGwtPmZ1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKCkuaXNGdWxsU2NyZWVuOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjplbnRlckZ1bGxTY3JlZW4oKQotewotICAgIFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyKCkgZW50ZXJGdWxsU2NyZWVuOm5pbF07Ci19Ci0KLXZvaWQgUGFnZUNsaWVu
dEltcGw6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAgICBbbV9pbXBsLT5mdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcigpIGV4aXRGdWxsU2NyZWVuXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgSW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBJ
bnRSZWN0JiBmaW5hbEZyYW1lKQotewotICAgIFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyKCkgYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxGcmFt
ZSBmaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwotICAgIG1faW1wbC0+dXBkYXRlU3VwcG9ydHNBcmJp
dHJhcnlMYXlvdXRNb2RlcygpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdhbkV4aXRG
dWxsU2NyZWVuKGNvbnN0IEludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgZmlu
YWxGcmFtZSkKLXsKLSAgICBbbV9pbXBsLT5mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpIGJl
Z2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxGcmFtZSBmaW5hbEZyYW1l
OmZpbmFsRnJhbWVdOwotICAgIG1faW1wbC0+dXBkYXRlU3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRN
b2RlcygpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotCi12b2lkIFBh
Z2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCkKLXsKLSAgICBtX2ltcGwt
PmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NXaXRoQW5pbWF0aW9uKHRydWUpOwot
Ci0jaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0
aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVy
ZURpZEJlZ2luKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVt
JiBpdGVtKQotewotI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAg
ICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdh
dGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTSh3aWxsTmF2aWdhdGUpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSNlbmRpZgot
fQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdp
bGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKLXsKLSNpZiBXS19BUElf
RU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJv
bVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxO
YXZpZ2F0ZSwgaXRlbSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwot
ICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCgpCi17Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6
OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRl
bSkKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5h
dmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLndpbGxSZWNvcmRO
YXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsK
LSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2Vz
dHVyZVNuYXBzaG90KCkKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcp
Ci0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2Up
Lm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZy
YW1lKCkKLXsKLSAgICBpZiAoYXV0byBnZXN0dXJlQ29udHJvbGxlciA9IG1faW1wbC0+Z2VzdHVy
ZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXItPmRpZEZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpkaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lKCkKLXsKLSAgICBpZiAoYXV0byBnZXN0dXJlQ29u
dHJvbGxlciA9IG1faW1wbC0+Z2VzdHVyZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgZ2VzdHVyZUNv
bnRyb2xsZXItPmRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUoKQotewotICAgIGlmIChhdXRvIGdlc3R1
cmVDb250cm9sbGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJvbGxlcigpKQotICAgICAgICBnZXN0
dXJlQ29udHJvbGxlci0+ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUoKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZShTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBlKQotewotICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9s
bGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJvbGxlcigpKQotICAgICAgICBnZXN0dXJlQ29udHJv
bGxlci0+ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZSh0eXBlKTsKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIFttX3dl
YlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZTpuc1N0cmluZ0Zyb21XZWJD
b3JlU3RyaW5nKGlkZW50aWZpZXIpXTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpoYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm9SZXNwb25zZShib29sIGhhc0FjdGl2
ZVNlc3Npb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVs
YXBzZWRUaW1lKQotewotI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgW21fd2ViVmlldyBfaGFuZGxl
QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvUmVzcG9uc2U6aGFzQWN0aXZlU2Vzc2lvbiB0aXRs
ZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKHRpdGxlKSBkdXJhdGlvbjpkdXJhdGlvbiBlbGFw
c2VkVGltZTplbGFwc2VkVGltZV07Ci0jZW5kaWYKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkQ2hhbmdlQmFja2dyb3VuZENvbG9yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1DR1JlY3QgUGFnZUNsaWVudEltcGw6OmJvdW5kc09mTGF5ZXJJbkxheWVyQmFja2VkV2luZG93
Q29vcmRpbmF0ZXMoQ0FMYXllciAqbGF5ZXIpIGNvbnN0Ci17Ci0gICAgQ0FMYXllciAqd2luZG93
Q29udGVudExheWVyID0gc3RhdGljX2Nhc3Q8TlNWaWV3ICo+KG1fdmlldy53aW5kb3cuY29udGVu
dFZpZXcpLmxheWVyOwotICAgIEFTU0VSVCh3aW5kb3dDb250ZW50TGF5ZXIpOwotCi0gICAgcmV0
dXJuIFt3aW5kb3dDb250ZW50TGF5ZXIgY29udmVydFJlY3Q6bGF5ZXIuYm91bmRzIGZyb21MYXll
cjpsYXllcl07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1bHQsIGJvb2wgY29u
dGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQotewotICAgIG1faW1w
bC0+ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QocmVzdWx0LCBjb250ZW50UHJldmVu
dHNEZWZhdWx0LCB1c2VyRGF0YSk7Ci19Ci0KLXZvaWQqIFBhZ2VDbGllbnRJbXBsOjppbW1lZGlh
dGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpI
aXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0LCB1aW50NjRfdCB0eXBlLCBSZWZQdHI8QVBJOjpP
YmplY3Q+IHVzZXJEYXRhKQotewotICAgIHJldHVybiBtX2ltcGwtPmltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHQuZ2V0KCksIHR5
cGUsIHVzZXJEYXRhLmdldCgpKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkSGFuZGxl
QWNjZXB0ZWRDYW5kaWRhdGUoKQotewotICAgIG1faW1wbC0+ZGlkSGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGUoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dmlkZW9Db250cm9sc01hbmFnZXJE
aWRDaGFuZ2UoKQotewotICAgIG1faW1wbC0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2Uo
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1BsYXRmb3JtQ29udGV4dE1lbnUoTlNN
ZW51ICptZW51LCBJbnRQb2ludCBsb2NhdGlvbikKLXsKLSAgICBbbWVudSBwb3BVcE1lbnVQb3Np
dGlvbmluZ0l0ZW06bmlsIGF0TG9jYXRpb246bG9jYXRpb24gaW5WaWV3Om1fdmlld107Ci19Ci0K
LSNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotV2ViQ29yZTo6V2ViTWVkaWFT
ZXNzaW9uTWFuYWdlciYgUGFnZUNsaWVudEltcGw6Om1lZGlhU2Vzc2lvbk1hbmFnZXIoKQotewot
ICAgIHJldHVybiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWQoKTsKLX0KLSNlbmRpZgot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWZWaWV3KCkKLXsKLSAgICBDRlJldGFpbihtX3ZpZXcp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkZXJlZlZpZXcoKQotewotICAgIENGUmVsZWFz
ZShtX3ZpZXcpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydFdpbmRvd0RyYWcoKQot
ewotICAgIG1faW1wbC0+c3RhcnRXaW5kb3dEcmFnKCk7Ci19Ci0KLU5TV2luZG93ICpQYWdlQ2xp
ZW50SW1wbDo6cGxhdGZvcm1XaW5kb3coKQotewotICAgIHJldHVybiBtX2ltcGwtPndpbmRvdygp
OwotfQotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLU5TVmlldyAqUGFnZUNsaWVudEltcGw6Omluc3Bl
Y3RvckF0dGFjaG1lbnRWaWV3KCkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5pbnNwZWN0b3JBdHRh
Y2htZW50VmlldygpOwotfQotCi1fV0tSZW1vdGVPYmplY3RSZWdpc3RyeSAqUGFnZUNsaWVudElt
cGw6OnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5yZW1vdGVP
YmplY3RSZWdpc3RyeSgpOwotfQotI2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJl
c3RvcmVTY3JvbGxQb3NpdGlvbigpCi17Ci0gICAgbV9pbXBsLT5kaWRSZXN0b3JlU2Nyb2xsUG9z
aXRpb24oKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6d2luZG93SXNGcm9udFdpbmRvd1Vu
ZGVyTW91c2UoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgcmV0dXJu
IG1faW1wbC0+d2luZG93SXNGcm9udFdpbmRvd1VuZGVyTW91c2UoZXZlbnQubmF0aXZlRXZlbnQo
KSk7Ci19Ci0KLVdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gUGFnZUNsaWVu
dEltcGw6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKQotewotICAgIGlmICghbV92aWV3
KQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6
TFRSOwotICAgIHJldHVybiAobV92aWV3LnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPT0g
TlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQpID8gV2ViQ29yZTo6VXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSIDogV2ViQ29yZTo6VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbjo6UlRMOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oCShyZXZpc2lvbiAyMjE0ODkpCShmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbC5oOjIyMTQ4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMp
CisKKyNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7CitAY2xhc3MgV0tW
aWV3OworQGNsYXNzIFdLV2ViVmlldzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQWx0
ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViVmlld0ltcGw7CisKK2NsYXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDogcHVibGljIFBh
Z2VDbGllbnQKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLCBwdWJsaWMgV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAorI2VuZGlmCisgICAgeworcHVibGljOgorICAgIFBh
Z2VDbGllbnRJbXBsKE5TVmlldyAqLCBXS1dlYlZpZXcgKik7CisgICAgdmlydHVhbCB+UGFnZUNs
aWVudEltcGwoKTsKKworICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IFdlYlZpZXdJbXBsIHNob3Vs
ZCBiZWNvbWUgdGhlIFBhZ2VDbGllbnQuCisgICAgdm9pZCBzZXRJbXBsKFdlYlZpZXdJbXBsJiBp
bXBsKSB7IG1faW1wbCA9ICZpbXBsOyB9CisKKyAgICB2b2lkIHZpZXdXaWxsTW92ZVRvQW5vdGhl
cldpbmRvdygpOworCitwcml2YXRlOgorICAgIC8vIFBhZ2VDbGllbnQKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdpb24mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxPcmlnaW4s
IGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgdmlld1Njcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIHZpZXdTaXplKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKSBv
dmVycmlkZTsKKyAgICBib29sIGlzVmlld0ZvY3VzZWQoKSBvdmVycmlkZTsKKyAgICBib29sIGlz
Vmlld1Zpc2libGUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmlld1Zpc2libGVPck9jY2x1ZGVk
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZpZXdJbldpbmRvdygpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWaXN1YWxseUlkbGUoKSBvdmVycmlkZTsKKyAgICBMYXllckhvc3RpbmdNb2RlIHZpZXdM
YXllckhvc3RpbmdNb2RlKCkgb3ZlcnJpZGU7CisgICAgQ29sb3JTcGFjZURhdGEgY29sb3JTcGFj
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXll
cihMYXllck9yVmlldyAqKSBvdmVycmlkZTsKKyAgICBMYXllck9yVmlldyAqYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBwcm9jZXNz
RGlkRXhpdCgpIG92ZXJyaWRlOworICAgIHZvaWQgcGFnZUNsb3NlZCgpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcmVmZXJlbmNl
c0RpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7CisgICAg
dm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmll
d3BvcnRBdHRyaWJ1dGVzJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpc1BsYXlpbmdBdWRpb1dpbGxD
aGFuZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkgZmluYWw7
CisKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUmVmPFdlYkVkaXRDb21tYW5kUHJveHk+
JiYsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckFs
bEVkaXRDb21tYW5kcygpIG92ZXJyaWRlOworICAgIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVBy
b3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKKyAgICB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOworICAgIGJvb2wgZXhlY3V0ZVNhdmVkQ29t
bWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBS
ZWY8U2hhcmVhYmxlQml0bWFwPiYmIGRyYWdJbWFnZSwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
bikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGltYWdlQnVm
ZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29u
c3QgU3RyaW5nJiB0aXRsZSwKKyAgICAgICAgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdmlzaWJsZVVybCwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBhcmNoaXZlQnVm
ZmVyKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIHZvaWQg
c2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVy
bCkgb3ZlcnJpZGU7CisjZW5kaWYKKyAgICB2b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJy
aWRlOworICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFj
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRQ
b2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7
CisgICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBvdmVycmlkZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgV2ViQ29yZTo6SW50UmVj
dCByb290Vmlld1RvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFj
Y2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAw
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNj
cmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworI2VuZGlmCisKKyAgICBDR1JlY3Qg
Ym91bmRzT2ZMYXllckluTGF5ZXJCYWNrZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVyICpsYXll
cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKKwor
ICAgIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFn
ZVByb3h5Jikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAgUmVmUHRy
PFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5
JiwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikgb3ZlcnJp
ZGU7CisjZW5kaWYKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIFJlZlB0cjxX
ZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJy
aWRlOworI2VuZGlmCisKKyAgICBSZWY8V2ViQ29yZTo6VmFsaWRhdGlvbkJ1YmJsZT4gY3JlYXRl
VmFsaWRhdGlvbkJ1YmJsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdlYkNvcmU6OlZh
bGlkYXRpb25CdWJibGU6OlNldHRpbmdzJikgZmluYWw7CisKKyAgICB2b2lkIHNldFRleHRJbmRp
Y2F0b3IoUmVmPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
V2luZG93TGlmZXRpbWUpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdl
YkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxW
aWV3U25hcHNob3Q+IHRha2VWaWV3U25hcHNob3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdoZWVs
RXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBv
dmVycmlkZTsKKyNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQorICAgIHZvaWQgZ2VzdHVy
ZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJHZXN0dXJlRXZlbnQm
KSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rv
a2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxl
eFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1
cykgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWlu
dDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcigpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMo
Ym9vbCBzaG91bGRTdXBwcmVzcykgb3ZlcnJpZGUgeyBtX3Nob3VsZFN1cHByZXNzRmlyc3RSZXNw
b25kZXJDaGFuZ2VzID0gc2hvdWxkU3VwcHJlc3M7IH0KKworICAgIHZvaWQgZGlkUGVyZm9ybURp
Y3Rpb25hcnlMb29rdXAoY29uc3QgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVu
dFN0cmluZ3MpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSBvdmVycmlkZTsKKyAgICBT
dHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpIG92ZXJy
aWRlOworCisgICAgdm9pZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKFdlYkNv
cmU6OlNjcm9sbGJhclN0eWxlKSBvdmVycmlkZTsKKworICAgIHZvaWQgaW50cmluc2ljQ29udGVu
dFNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50cmluc2ljQ29udGVudFNp
emUpIG92ZXJyaWRlOworCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdWlu
dDY0X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRl
cm5hdGl2ZXM+Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93RGlj
dGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIG92ZXJyaWRlOworICAg
IFZlY3RvcjxTdHJpbmc+IGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KSBvdmVycmlkZTsKKyNlbmRpZgorICAgIHZvaWQgc2V0RWRpdGFibGVFbGVtZW50SXNG
b2N1c2VkKGJvb2wpIG92ZXJyaWRlOworCisjaWYgVVNFKElOU0VSVElPTl9VTkRPX0dST1VQSU5H
KQorICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlkZTsKKyNl
bmRpZgorCisgICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgorI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKKyAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2Ny
ZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJpZGU7CisjZW5kaWYKKworI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKKyAgICAvLyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50Cisg
ICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0Z1
bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGVudGVyRnVsbFNjcmVlbigpIG92ZXJyaWRl
OworICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGJlZ2FuRW50
ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBiZWdhbkV4
aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZv
aWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpIG92ZXJyaWRlOworICAgIHZvaWQgbmF2aWdh
dGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdp
bGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOworICAgIHZvaWQg
bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdpbGxSZWNvcmRO
YXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpIG92ZXJyaWRlOworCisg
ICAgTlNWaWV3ICphY3RpdmVWaWV3KCkgY29uc3Q7CisgICAgTlNXaW5kb3cgKmFjdGl2ZVdpbmRv
dygpIGNvbnN0OworCisgICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JN
YWluRnJhbWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1
bWVudE5hdmlnYXRpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRF
bGVtZW50SURSZXNwb25zZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRs
ZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mb1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZlU2Vzc2lv
biwgY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRp
bWUpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVz
dChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVs
dCwgQVBJOjpPYmplY3QqKSBvdmVycmlkZTsKKyAgICB2b2lkKiBpbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0
PiwgdWludDY0X3QsIFJlZlB0cjxBUEk6Ok9iamVjdD4pIG92ZXJyaWRlOworCisgICAgdm9pZCBk
aWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpIG92ZXJyaWRlOworCisgICAgdm9pZCB2aWRlb0Nv
bnRyb2xzTWFuYWdlckRpZENoYW5nZSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBzaG93UGxhdGZv
cm1Db250ZXh0TWVudShOU01lbnUgKiwgV2ViQ29yZTo6SW50UG9pbnQpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSBvdmVycmlkZTsKKworICAgIHZvaWQg
c3RhcnRXaW5kb3dEcmFnKCkgb3ZlcnJpZGU7CisgICAgTlNXaW5kb3cgKnBsYXRmb3JtV2luZG93
KCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
IHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBvdmVycmlkZTsKKworI2lmIFdLX0FQSV9F
TkFCTEVECisgICAgTlNWaWV3ICppbnNwZWN0b3JBdHRhY2htZW50VmlldygpIG92ZXJyaWRlOwor
ICAgIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeSgpIG92ZXJy
aWRlOworI2VuZGlmCisKKyAgICBOU1ZpZXcgKm1fdmlldzsKKyAgICBXS1dlYlZpZXcgKm1fd2Vi
VmlldzsKKyAgICBXZWJWaWV3SW1wbCogbV9pbXBsIHsgbnVsbHB0ciB9OworI2lmIFVTRShBVVRP
Q09SUkVDVElPTl9QQU5FTCkKKyAgICBDb3JyZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9uUGFuZWw7
CisjZW5kaWYKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyPiBtX2FsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlcjsKKyNlbmRpZgorCisgICAgYm9vbCBtX3Nob3VsZFN1cHByZXNzRmly
c3RSZXNwb25kZXJDaGFuZ2VzIHsgZmFsc2UgfTsKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCisgICAgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgbWVkaWFT
ZXNzaW9uTWFuYWdlcigpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHJlZlZpZXcoKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRlcmVmVmlldygpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRS
ZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSBvdmVycmlkZTsKKyAgICBib29sIHdpbmRvd0lzRnJvbnRX
aW5kb3dVbmRlck1vdXNlKGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRp
dmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDIyMTQ4OSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTIgQEAKICNpZiBQTEFURk9STShNQUMpCiAKICNpbmNs
dWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiUGFnZUNsaWVudEltcGxDb2NvYS5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIEBjbGFzcyBXS0VkaXRvclVu
ZG9UYXJnZXRPYmpDOwogQGNsYXNzIFdLVmlldzsKLUBjbGFzcyBXS1dlYlZpZXc7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjsKQEAgLTQ0
LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlZpZXdJbXBsOwogCi1j
bGFzcyBQYWdlQ2xpZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBQYWdlQ2xpZW50CitjbGFzcyBQYWdl
Q2xpZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBQYWdlQ2xpZW50SW1wbENvY29hCiAjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQogICAgICwgcHVibGljIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlD
bGllbnQKICNlbmRpZgpAQCAtODksOCArODgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2hhbmdl
Vmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9XaWxsQ2hhbmdlKCkgZmluYWw7Ci0gICAg
dm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpIGZpbmFsOwogCiAgICAgdm9pZCByZWdpc3Rl
ckVkaXRDb21tYW5kKFJlZjxXZWJFZGl0Q29tbWFuZFByb3h5PiYmLCBXZWJQYWdlUHJveHk6OlVu
ZG9PclJlZG8pIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBvdmVy
cmlkZTsKQEAgLTIzNCw3ICsyMzEsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBOU1ZpZXcg
Km1fdmlldzsKLSAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKICAgICBXZWJWaWV3SW1wbCogbV9p
bXBsIHsgbnVsbHB0ciB9OwogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKICAgICBDb3Jy
ZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9uUGFuZWw7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyMjE0NjcpCShm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbToyMjE0Njcp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCisKKyNpZiBQTEFU
Rk9STShNQUMpCisKKyNpbXBvcnQgIkFQSUhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIkNvbG9y
U3BhY2VEYXRhLmgiCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCisjaW1wb3J0ICJEb3dubG9h
ZFByb3h5LmgiCisjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW1wb3J0ICJOYXRpdmVX
ZWJHZXN0dXJlRXZlbnQuaCIKKyNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNp
bXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKKyNpbXBvcnQgIk5hdGl2ZVdlYldoZWVsRXZl
bnQuaCIKKyNpbXBvcnQgIk5hdmlnYXRpb25TdGF0ZS5oIgorI2ltcG9ydCAiU3RyaW5nVXRpbGl0
aWVzLmgiCisjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlZpZXdT
bmFwc2hvdFN0b3JlLmgiCisjaW1wb3J0ICJXS0FQSUNhc3QuaCIKKyNpbXBvcnQgIldLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLU3RyaW5nQ0YuaCIKKyNpbXBvcnQg
IldLVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV2ViQ29sb3JQaWNrZXJNYWMuaCIKKyNpbXBvcnQgIldlYkNvbnRleHRNZW51UHJveHlNYWMu
aCIKKyNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKKyNpbXBvcnQgIldlYlBvcHVwTWVu
dVByb3h5TWFjLmgiCisjaW1wb3J0ICJXZWJWaWV3SW1wbC5oIgorI2ltcG9ydCAiV2luZG93U2Vy
dmVyQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiX1dLRG93bmxvYWRJbnRlcm5hbC5oIgorI2ltcG9y
dCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCisjaW1wb3J0ICJfV0tUaHVtYm5haWxWaWV3
LmgiCisjaW1wb3J0IDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL0ltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVk
QnVmZmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0VW5kb0lu
c2VydGlvbk1hcmt1cE1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9uQnViYmxlLmg+
CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgVVNFKERJQ1RB
VElPTl9BTFRFUk5BVElWRVMpCisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+
CisjZW5kaWYKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisjaW5jbHVk
ZSA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmg+CisjZW5kaWYKKworQGludGVyZmFj
ZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0YWlscykKKy0gKE5TQ3Vyc29yICop
X2N1cnNvclJlY3RDdXJzb3I7CitAZW5kCisKKyNpZiBIQVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVS
X0hPU1RJTkcpCitAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCistIChC
T09MKV9ob3N0c0xheWVyc0luV2luZG93U2VydmVyOworQGVuZAorI2VuZGlmCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1BhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbChOU1ZpZXcqIHZpZXcsIFdL
V2ViVmlldyAqd2ViVmlldykKKyAgICA6IG1fdmlldyh2aWV3KQorICAgICwgbV93ZWJWaWV3KHdl
YlZpZXcpCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgLCBtX2FsdGVybmF0
aXZlVGV4dFVJQ29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0aXZlVGV4dFVJQ29u
dHJvbGxlcj4oKSkKKyNlbmRpZgoreworI2lmICFXS19BUElfRU5BQkxFRAorICAgIEFTU0VSVF9V
TlVTRUQobV93ZWJWaWV3LCAhbV93ZWJWaWV3KTsKKyNlbmRpZgorfQorCitQYWdlQ2xpZW50SW1w
bDo6flBhZ2VDbGllbnRJbXBsKCkKK3sKK30KKworc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVh
UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKK3sKKyAgICBy
ZXR1cm4gbV9pbXBsLT5jcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6UmVnaW9uJikKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVx
dWVzdFNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50UG9p
bnQmIHNjcm9sbE9yaWdpbiwgYm9vbCBpc1Byb2dyYW1tYXRpY1Njcm9sbCkKK3sKK30KKworV2Vi
Q29yZTo6RmxvYXRQb2ludCBQYWdlQ2xpZW50SW1wbDo6dmlld1Njcm9sbFBvc2l0aW9uKCkKK3sK
KyAgICByZXR1cm4geyB9OworfQorCitJbnRTaXplIFBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSgp
Cit7CisgICAgcmV0dXJuIEludFNpemUoW21fdmlldyBib3VuZHNdLnNpemUpOworfQorCitOU1Zp
ZXcgKlBhZ2VDbGllbnRJbXBsOjphY3RpdmVWaWV3KCkgY29uc3QKK3sKKyNpZiBXS19BUElfRU5B
QkxFRAorICAgIHJldHVybiAobV9pbXBsICYmIG1faW1wbC0+dGh1bWJuYWlsVmlldygpKSA/IChO
U1ZpZXcgKiltX2ltcGwtPnRodW1ibmFpbFZpZXcoKSA6IG1fdmlldzsKKyNlbHNlCisgICAgcmV0
dXJuIG1fdmlldzsKKyNlbmRpZgorfQorCitOU1dpbmRvdyAqUGFnZUNsaWVudEltcGw6OmFjdGl2
ZVdpbmRvdygpIGNvbnN0Cit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBpZiAobV9pbXBsICYm
IG1faW1wbC0+dGh1bWJuYWlsVmlldygpKQorICAgICAgICByZXR1cm4gbV9pbXBsLT50aHVtYm5h
aWxWaWV3KCkud2luZG93OworI2VuZGlmCisgICAgaWYgKG1faW1wbCAmJiBtX2ltcGwtPnRhcmdl
dFdpbmRvd0Zvck1vdmVQcmVwYXJhdGlvbigpKQorICAgICAgICByZXR1cm4gbV9pbXBsLT50YXJn
ZXRXaW5kb3dGb3JNb3ZlUHJlcGFyYXRpb24oKTsKKyAgICByZXR1cm4gbV92aWV3LndpbmRvdzsK
K30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3V2luZG93QWN0aXZlKCkKK3sKKyAgICBO
U1dpbmRvdyAqYWN0aXZlVmlld1dpbmRvdyA9IGFjdGl2ZVdpbmRvdygpOworICAgIHJldHVybiBh
Y3RpdmVWaWV3V2luZG93LmlzS2V5V2luZG93IHx8IFtOU0FwcCBrZXlXaW5kb3ddID09IGFjdGl2
ZVZpZXdXaW5kb3c7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQor
eworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBXZWJQYWdlUHJveHkgY29u
c3RydWN0b3IgYmVmb3JlIHdlIGhhdmUgYSBXZWJWaWV3SW1wbC4KKyAgICAvLyBPbmNlIFdlYlZp
ZXdJbXBsIGFuZCBQYWdlQ2xpZW50IG1lcmdlLCB0aGlzIHdvbid0IGJlIGEgcHJvYmxlbS4KKyAg
ICBpZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJuIG1faW1wbC0+
aXNGb2N1c2VkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Om1ha2VGaXJzdFJlc3BvbmRl
cigpCit7CisgICAgaWYgKG1fc2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMpCisg
ICAgICAgIHJldHVybjsKKworICAgICBbW21fdmlldyB3aW5kb3ddIG1ha2VGaXJzdFJlc3BvbmRl
cjptX3ZpZXddOworfQorICAgIAorYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgp
Cit7CisgICAgTlNWaWV3ICphY3RpdmVWaWV3ID0gdGhpcy0+YWN0aXZlVmlldygpOworICAgIE5T
V2luZG93ICphY3RpdmVWaWV3V2luZG93ID0gYWN0aXZlV2luZG93KCk7CisKKyAgICBpZiAoIWFj
dGl2ZVZpZXdXaW5kb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghYWN0aXZl
Vmlld1dpbmRvdy5pc1Zpc2libGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChh
Y3RpdmVWaWV3LmlzSGlkZGVuT3JIYXNIaWRkZW5BbmNlc3RvcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKG1faW1wbC0+d2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZCgp
ICYmIChhY3RpdmVWaWV3V2luZG93Lm9jY2x1c2lvblN0YXRlICYgTlNXaW5kb3dPY2NsdXNpb25T
dGF0ZVZpc2libGUpICE9IE5TV2luZG93T2NjbHVzaW9uU3RhdGVWaXNpYmxlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1w
bDo6aXNWaWV3VmlzaWJsZU9yT2NjbHVkZWQoKQoreworICAgIHJldHVybiBhY3RpdmVXaW5kb3co
KS5pc1Zpc2libGU7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0luV2luZG93KCkK
K3sKKyAgICByZXR1cm4gYWN0aXZlV2luZG93KCk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6
OmlzVmlzdWFsbHlJZGxlKCkKK3sKKyAgICByZXR1cm4gV2luZG93U2VydmVyQ29ubmVjdGlvbjo6
c2luZ2xldG9uKCkuYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zSGF2ZVN0b3BwZWQoKSB8
fCAhaXNWaWV3VmlzaWJsZSgpOworfQorCitMYXllckhvc3RpbmdNb2RlIFBhZ2VDbGllbnRJbXBs
Ojp2aWV3TGF5ZXJIb3N0aW5nTW9kZSgpCit7CisjaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlF
Ul9IT1NUSU5HKQorICAgIGlmIChbYWN0aXZlV2luZG93KCkgX2hvc3RzTGF5ZXJzSW5XaW5kb3dT
ZXJ2ZXJdKQorICAgICAgICByZXR1cm4gTGF5ZXJIb3N0aW5nTW9kZTo6T3V0T2ZQcm9jZXNzOwor
I2VuZGlmCisgICAgcmV0dXJuIExheWVySG9zdGluZ01vZGU6OkluUHJvY2VzczsKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6dmlld1dpbGxNb3ZlVG9Bbm90aGVyV2luZG93KCkKK3sKKyAgICBj
bGVhckFsbEVkaXRDb21tYW5kcygpOworfQorCitDb2xvclNwYWNlRGF0YSBQYWdlQ2xpZW50SW1w
bDo6Y29sb3JTcGFjZSgpCit7CisgICAgcmV0dXJuIG1faW1wbC0+Y29sb3JTcGFjZSgpOworfQor
Cit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkRXhpdCgpCit7CisgICAgbV9pbXBsLT5w
cm9jZXNzRGlkRXhpdCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlQ2xvc2VkKCkK
K3sKKyAgICBtX2ltcGwtPnBhZ2VDbG9zZWQoKTsKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFU
SVZFUykKKyAgICBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+Y2xlYXIoKTsKKyNlbmRp
ZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAg
IG1faW1wbC0+ZGlkUmVsYXVuY2hQcm9jZXNzKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnByZWZlcmVuY2VzRGlkQ2hhbmdlKCkKK3sKKyAgICBtX2ltcGwtPnByZWZlcmVuY2VzRGlkQ2hh
bmdlKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgb2xkVG9vbFRpcCwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKQoreworICAgIG1faW1w
bC0+dG9vbFRpcENoYW5nZWQob2xkVG9vbFRpcCwgbmV3VG9vbFRpcCk7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJvdmlkZXIpCit7CisgICAgbV9pbXBsLT51cGRh
dGVTdXBwb3J0c0FyYml0cmFyeUxheW91dE1vZGVzKCk7CisgICAgbV9pbXBsLT5kaXNtaXNzQ29u
dGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbih0cnVlKTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlk
ZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiBkYXRhUmVmZXJlbmNlKQoreworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVE
b3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCit7CisgICAgQVNTRVJUX0FS
Ryhkb3dubG9hZCwgZG93bmxvYWQpOworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgQVNTRVJUKFtk
b3dubG9hZC0+d3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS0Rvd25sb2FkIGNsYXNzXV0pOwor
ICAgIFtzdGF0aWNfY2FzdDxfV0tEb3dubG9hZCAqPihkb3dubG9hZC0+d3JhcHBlcigpKSBzZXRP
cmlnaW5hdGluZ1dlYlZpZXc6bV93ZWJWaWV3XTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdT
aXplKQoreworICAgIG1faW1wbC0+ZGlkQ2hhbmdlQ29udGVudFNpemUobmV3U2l6ZSk7Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1
cnNvcikKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBzaGFyZSB0aGlzIGNvZGUg
d2l0aCBXZWJLaXQxJ3MgV2ViQ2hyb21lQ2xpZW50LgorCisgICAgLy8gVGhlIFdlYiBwcm9jZXNz
IG1heSBoYXZlIGFza2VkIHRvIGNoYW5nZSB0aGUgY3Vyc29yIHdoZW4gdGhlIHZpZXcgd2FzIGlu
IGFuIGFjdGl2ZSB3aW5kb3csIGJ1dAorICAgIC8vIGlmIGl0IGlzIG5vIGxvbmdlciBpbiBhIHdp
bmRvdyBvciB0aGUgd2luZG93IGlzIG5vdCBhY3RpdmUsIHRoZW4gdGhlIGN1cnNvciBzaG91bGQg
bm90IGNoYW5nZS4KKyAgICBpZiAoIWlzVmlld1dpbmRvd0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoW05TQXBwIF9jdXJzb3JSZWN0Q3Vyc29yXSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX3ZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIE5TV2luZG93ICp3
aW5kb3cgPSBbbV92aWV3IHdpbmRvd107CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChbd2luZG93IHdpbmRvd051bWJlcl0gIT0gW05TV2luZG93IHdpbmRvd051
bWJlckF0UG9pbnQ6W05TRXZlbnQgbW91c2VMb2NhdGlvbl0gYmVsb3dXaW5kb3dXaXRoV2luZG93
TnVtYmVyOjBdKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0N1cnNvciAqcGxhdGZvcm1DdXJz
b3IgPSBjdXJzb3IucGxhdGZvcm1DdXJzb3IoKTsKKyAgICBpZiAoW05TQ3Vyc29yIGN1cnJlbnRD
dXJzb3JdID09IHBsYXRmb3JtQ3Vyc29yKQorICAgICAgICByZXR1cm47CisKKyAgICBbcGxhdGZv
cm1DdXJzb3Igc2V0XTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29ySGlkZGVu
VW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQoreworICAgIFtOU0N1
cnNvciBzZXRIaWRkZW5VbnRpbE1vdXNlTW92ZXM6aGlkZGVuVW50aWxNb3VzZU1vdmVzXTsKK30K
Kwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpCit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUmVmPFdlYkVkaXRDb21tYW5kUHJveHk+JiYgY29tbWFu
ZCwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgbV9pbXBsLT5y
ZWdpc3RlckVkaXRDb21tYW5kKFdURk1vdmUoY29tbWFuZCksIHVuZG9PclJlZG8pOworfQorCisj
aWYgVVNFKElOU0VSVElPTl9VTkRPX0dST1VQSU5HKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVn
aXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKQoreworICAgIHJlZ2lzdGVySW5zZXJ0aW9uVW5k
b0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFttX3ZpZXcgdW5kb01hbmFnZXJdKTsKK30KKyNlbmRp
ZgorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisgICAg
bV9pbXBsLT5jbGVhckFsbEVkaXRDb21tYW5kcygpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBs
OjpjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAg
ICByZXR1cm4gKHVuZG9PclJlZG8gPT0gV2ViUGFnZVByb3h5OjpVbmRvKSA/IFtbbV92aWV3IHVu
ZG9NYW5hZ2VyXSBjYW5VbmRvXSA6IFtbbV92aWV3IHVuZG9NYW5hZ2VyXSBjYW5SZWRvXTsKK30K
Kwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5k
b09yUmVkbyB1bmRvT3JSZWRvKQoreworICAgIHJldHVybiAodW5kb09yUmVkbyA9PSBXZWJQYWdl
UHJveHk6OlVuZG8pID8gW1ttX3ZpZXcgdW5kb01hbmFnZXJdIHVuZG9dIDogW1ttX3ZpZXcgdW5k
b01hbmFnZXJdIHJlZG9dOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXREcmFnSW1hZ2Uo
Y29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBSZWY8U2hhcmVhYmxlQml0bWFwPiYmIGRy
YWdJbWFnZSwgRHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24pCit7CisgICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGRyYWdDR0ltYWdlID0gZHJhZ0ltYWdlLT5tYWtlQ0dJbWFnZSgpOworICAgIFJldGFp
blB0cjxOU0ltYWdlPiBkcmFnTlNJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0
V2l0aENHSW1hZ2U6ZHJhZ0NHSW1hZ2UuZ2V0KCkgc2l6ZTpkcmFnSW1hZ2UtPnNpemUoKV0pOwor
ICAgIEludFNpemUgc2l6ZShbZHJhZ05TSW1hZ2Ugc2l6ZV0pOworICAgIHNpemUuc2NhbGUoMS4w
IC8gbV9pbXBsLT5wYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgW2RyYWdOU0ltYWdl
IHNldFNpemU6c2l6ZV07CisKKyAgICBtX2ltcGwtPmRyYWdJbWFnZUZvclZpZXcobV92aWV3LCBk
cmFnTlNJbWFnZS5nZXQoKSwgY2xpZW50UG9zaXRpb24sIGFjdGlvbiA9PSBEcmFnU291cmNlQWN0
aW9uTGluayk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFByb21pc2VkRGF0YUZvcklt
YWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW1h
Z2VCdWZmZXIsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2
aXNpYmxlVVJMLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGFyY2hpdmVCdWZmZXIpCit7CisgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAgICBpbWFnZS0+
c2V0RGF0YShXVEZNb3ZlKGltYWdlQnVmZmVyKSwgdHJ1ZSk7CisgICAgbV9pbXBsLT5zZXRQcm9t
aXNlZERhdGFGb3JJbWFnZShpbWFnZS5nZXQoKSwgZmlsZW5hbWUsIGV4dGVuc2lvbiwgdGl0bGUs
IHVybCwgdmlzaWJsZVVSTCwgYXJjaGl2ZUJ1ZmZlci5nZXQoKSwgcGFzdGVib2FyZE5hbWUpOwor
fQorCisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnNldFByb21pc2VkRGF0YUZvckF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIGNvbnN0
IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVV
UkwpCit7CisgICAgbV9pbXBsLT5zZXRQcm9taXNlZERhdGFGb3JBdHRhY2htZW50KGZpbGVuYW1l
LCBleHRlbnNpb24sIHRpdGxlLCB1cmwsIHZpc2libGVVUkwsIHBhc3RlYm9hcmROYW1lKTsKK30K
KyNlbmRpZgorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKCkK
K3sKKyAgICBtX2ltcGwtPnVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6cmVzZXRTZWN1cmVJbnB1dFN0YXRlKCkKK3sKKyAgICBtX2ltcGwtPnJlc2V0
U2VjdXJlSW5wdXRTdGF0ZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpub3RpZnlJbnB1
dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uKCkKK3sKKyAgICBtX2ltcGwtPm5vdGlm
eUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKTsKK30KKworRmxvYXRSZWN0
IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgcmV0dXJuIHRvRGV2aWNlU3BhY2UocmVjdCwgW21fdmlldyB3aW5kb3ddKTsK
K30KKworRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiB0b1VzZXJTcGFjZShyZWN0LCBbbV92aWV3
IHdpbmRvd10pOworfQorICAgCitJbnRQb2ludCBQYWdlQ2xpZW50SW1wbDo6c2NyZWVuVG9Sb290
Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiCisgICAgTlNQb2ludCB3aW5kb3dDb29yZCA9IFtbbV92aWV3IHdpbmRvd10gY29u
dmVydFNjcmVlblRvQmFzZTpwb2ludF07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisg
ICAgcmV0dXJuIEludFBvaW50KFttX3ZpZXcgY29udmVydFBvaW50OndpbmRvd0Nvb3JkIGZyb21W
aWV3Om5pbF0pOworfQorICAgIAorSW50UmVjdCBQYWdlQ2xpZW50SW1wbDo6cm9vdFZpZXdUb1Nj
cmVlbihjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIE5TUmVjdCB0ZW1wUmVjdCA9IHJlY3Q7
CisgICAgdGVtcFJlY3QgPSBbbV92aWV3IGNvbnZlcnRSZWN0OnRlbXBSZWN0IHRvVmlldzpuaWxd
OworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIHRlbXBSZWN0Lm9yaWdp
biA9IFtbbV92aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjp0ZW1wUmVjdC5vcmlnaW5d
OworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KHRlbXBSZWN0KTsKK30KKworSW50UmVjdCBQYWdlQ2xpZW50SW1wbDo6cm9vdFZpZXdUb1dp
bmRvdyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIE5TUmVjdCB0ZW1wUmVj
dCA9IHJlY3Q7CisgICAgdGVtcFJlY3QgPSBbbV92aWV3IGNvbnZlcnRSZWN0OnRlbXBSZWN0IHRv
VmlldzpuaWxdOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRlbXBSZWN0KTsKK30KKwor
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiBldmVudCwgYm9vbCBldmVudFdhc0hhbmRsZWQpCit7CisgICAgbV9pbXBsLT5k
b25lV2l0aEtleUV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2ZW50V2FzSGFuZGxlZCk7Cit9
CisKK1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVw
TWVudVByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSkKK3sKKyAgICByZXR1cm4gV2ViUG9wdXBNZW51
UHJveHlNYWM6OmNyZWF0ZShtX3ZpZXcsIHBhZ2UpOworfQorCisjaWYgRU5BQkxFKENPTlRFWFRf
TUVOVVMpCitSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0
ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBDb250ZXh0TWVudUNv
bnRleHREYXRhJiBjb250ZXh0LCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCit7CisgICAgcmV0
dXJuIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OmNyZWF0ZShtX3ZpZXcsIHBhZ2UsIGNvbnRleHQs
IHVzZXJEYXRhKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCitS
ZWZQdHI8V2ViQ29sb3JQaWNrZXI+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb2xvclBpY2tlcihX
ZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsICBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBXZWJDb2xvclBpY2tl
ck1hYzo6Y3JlYXRlKHBhZ2UsIGluaXRpYWxDb2xvciwgcmVjdCwgbV92aWV3KTsKK30KKyNlbmRp
ZgorCitSZWY8VmFsaWRhdGlvbkJ1YmJsZT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVZhbGlkYXRp
b25CdWJibGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBWYWxpZGF0aW9uQnViYmxlOjpT
ZXR0aW5ncyYgc2V0dGluZ3MpCit7CisgICAgcmV0dXJuIFZhbGlkYXRpb25CdWJibGU6OmNyZWF0
ZShtX3ZpZXcsIG1lc3NhZ2UsIHNldHRpbmdzKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2V0VGV4dEluZGljYXRvcihSZWY8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciwgV2ViQ29y
ZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lIGxpZmV0aW1lKQoreworICAgIG1faW1wbC0+
c2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLmdldCgpLCBsaWZldGltZSk7Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OmNsZWFyVGV4dEluZGljYXRvcihXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uIGRpc21pc3NhbEFuaW1hdGlvbikKK3sKKyAgICBt
X2ltcGwtPmNsZWFyVGV4dEluZGljYXRvcldpdGhBbmltYXRpb24oZGlzbWlzc2FsQW5pbWF0aW9u
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvckFuaW1hdGlvblBy
b2dyZXNzKGZsb2F0IHByb2dyZXNzKQoreworICAgIG1faW1wbC0+c2V0VGV4dEluZGljYXRvckFu
aW1hdGlvblByb2dyZXNzKHByb2dyZXNzKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNj
ZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYgZGF0YSkKK3sKKyAgICBtX2ltcGwtPnNldEFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW4o
W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV0pOwor
fQorICAgIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQoreworICAgIEFT
U0VSVCghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpOworCisgICAgQ0FMYXllciAqcmVuZGVy
TGF5ZXIgPSBXS01ha2VSZW5kZXJMYXllcihsYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCk7Cisg
ICAgbV9pbXBsLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJlbmRlckxheWVy
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCkKK3sKKyAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIo
bmlsKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKK3sKKyAg
ICBBU1NFUlQoIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKKworICAgIENBTGF5ZXIgKnJl
bmRlckxheWVyID0gV0tNYWtlUmVuZGVyTGF5ZXIobGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQp
OworICAgIG1faW1wbC0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihyZW5kZXJM
YXllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdSb290TGF5ZXIoQ0FMYXllciAqcm9vdExheWVyKQoreworICAgIG1faW1wbC0+c2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihyb290TGF5ZXIpOworfQorCitDQUxheWVyICpQYWdl
Q2xpZW50SW1wbDo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faW1wbC0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpOworfQor
CitSZWZQdHI8Vmlld1NuYXBzaG90PiBQYWdlQ2xpZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCgp
Cit7CisgICAgcmV0dXJuIG1faW1wbC0+dGFrZVZpZXdTbmFwc2hvdCgpOworfQorCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UoKQoreworICAgIG1faW1wbC0+c2VsZWN0
aW9uRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OndoZWVsRXZlbnRXYXNO
b3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQorewor
ICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJvbGxl
cigpKQorICAgICAgICBnZXN0dXJlQ29udHJvbGxlci0+d2hlZWxFdmVudFdhc05vdEhhbmRsZWRC
eVdlYkNvcmUoZXZlbnQubmF0aXZlRXZlbnQoKSk7Cit9CisKKyNpZiBFTkFCTEUoTUFDX0dFU1RV
UkVfRVZFTlRTKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6Z2VzdHVyZUV2ZW50V2FzTm90SGFuZGxl
ZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJHZXN0dXJlRXZlbnQmIGV2ZW50KQoreworICAgIG1f
aW1wbC0+Z2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShldmVudC5uYXRpdmVFdmVu
dCgpKTsKK30KKyNlbmRpZgorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwbHVnaW5Gb2N1c09yV2lu
ZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVy
LCBib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpCit7CisgICAgbV9pbXBsLT5w
bHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFz
Rm9jdXMsIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUg
cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKQoreworICAgIG1faW1wbC0+c2V0UGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlQW5kSWRlbnRpZmllcihwbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUsIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbykKK3sKKyAgICBtX2ltcGwtPnByZXBhcmVGb3JEaWN0
aW9uYXJ5TG9va3VwKCk7CisKKyAgICBEaWN0aW9uYXJ5TG9va3VwOjpzaG93UG9wdXAoZGljdGlv
bmFyeVBvcHVwSW5mbywgbV92aWV3LCBbdGhpc10oVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRv
cikgeworICAgICAgICBtX2ltcGwtPnNldFRleHRJbmRpY2F0b3IodGV4dEluZGljYXRvciwgVGV4
dEluZGljYXRvcldpbmRvd0xpZmV0aW1lOjpQZXJtYW5lbnQpOworICAgIH0pOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKEFsdGVybmF0aXZlVGV4dFR5cGUg
dHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3sK
KyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCisgICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkg
fHwgIWlzVmlld0luV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25Q
YW5lbC5zaG93KG1fdmlldywgKm1faW1wbCwgdHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3Ry
aW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29u
KQoreworI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKKyAgICBtX2NvcnJlY3Rpb25QYW5l
bC5kaXNtaXNzKHJlYXNvbik7CisjZW5kaWYKK30KKworU3RyaW5nIFBhZ2VDbGllbnRJbXBsOjpk
aXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0
ZXJuYXRpdmVUZXh0IHJlYXNvbikKK3sKKyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCisg
ICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVsLmRpc21pc3MocmVhc29uKTsKKyNlbHNlCisgICAg
cmV0dXJuIFN0cmluZygpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9u
UmVzcG9uc2UgdG9Db3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSByZXNw
b25zZSkKK3sKKyAgICBzd2l0Y2ggKHJlc3BvbnNlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpBdXRv
Y29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZDoKKyAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlv
blJlc3BvbnNlUmV2ZXJ0ZWQ7CisgICAgY2FzZSBXZWJDb3JlOjpBdXRvY29ycmVjdGlvblJlc3Bv
bnNlOjpFZGl0ZWQ6CisgICAgICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNwb25zZUVkaXRlZDsK
KyAgICBjYXNlIFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkFjY2VwdGVkOgorICAg
ICAgICByZXR1cm4gTlNDb3JyZWN0aW9uUmVzcG9uc2VBY2NlcHRlZDsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTlNDb3JyZWN0aW9uUmVzcG9uc2VBY2Nl
cHRlZDsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQoreworICAgIENvcnJl
Y3Rpb25QYW5lbDo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShtX2ltcGwtPnNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnKCksIHRvQ29ycmVjdGlvblJlc3BvbnNlKHJlc3BvbnNlKSwgcmVwbGFj
ZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6
cmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShTY3JvbGxiYXJTdHlsZSBuZXdTdHls
ZSkKK3sKKyAgICAvLyBOb3cgcmUtY3JlYXRlIGEgdHJhY2tpbmcgYXJlYSB3aXRoIHRoZSBhcHBy
b3ByaWF0ZSBvcHRpb25zIGdpdmVuIHRoZSBuZXcgc2Nyb2xsYmFyIHN0eWxlCisgICAgTlNUcmFj
a2luZ0FyZWFPcHRpb25zIG9wdGlvbnMgPSBOU1RyYWNraW5nTW91c2VNb3ZlZCB8IE5TVHJhY2tp
bmdNb3VzZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nSW5WaXNpYmxlUmVjdCB8IE5TVHJh
Y2tpbmdDdXJzb3JVcGRhdGU7CisgICAgaWYgKG5ld1N0eWxlID09IFNjcm9sbGJhclN0eWxlOjpB
bHdheXNWaXNpYmxlKQorICAgICAgICBvcHRpb25zIHw9IE5TVHJhY2tpbmdBY3RpdmVBbHdheXM7
CisgICAgZWxzZQorICAgICAgICBvcHRpb25zIHw9IE5TVHJhY2tpbmdBY3RpdmVJbktleVdpbmRv
dzsKKworICAgIFJldGFpblB0cjxOU1RyYWNraW5nQXJlYT4gdHJhY2tpbmdBcmVhID0gYWRvcHRO
UyhbW05TVHJhY2tpbmdBcmVhIGFsbG9jXSBpbml0V2l0aFJlY3Q6W21fdmlldyBmcmFtZV0gb3B0
aW9uczpvcHRpb25zIG93bmVyOm1fdmlldyB1c2VySW5mbzpuaWxdKTsKKyAgICBtX2ltcGwtPnNl
dFByaW1hcnlUcmFja2luZ0FyZWEodHJhY2tpbmdBcmVhLmdldCgpKTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6aW50cmluc2ljQ29udGVudFNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYg
aW50cmluc2ljQ29udGVudFNpemUpCit7CisgICAgbV9pbXBsLT5zZXRJbnRyaW5zaWNDb250ZW50
U2l6ZShpbnRyaW5zaWNDb250ZW50U2l6ZSk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmV4
ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcp
Cit7CisgICAgcmV0dXJuIG1faW1wbC0+ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoTlNT
ZWxlY3RvckZyb21TdHJpbmcoc2VsZWN0b3JTdHJpbmcpKTsKK30KKworI2lmIFVTRShESUNUQVRJ
T05fQUxURVJOQVRJVkVTKQordWludDY0X3QgUGFnZUNsaWVudEltcGw6OmFkZERpY3RhdGlvbkFs
dGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0QWx0ZXJuYXRpdmVzPiYgYWx0ZXJuYXRp
dmVzKQoreworICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+YWRkQWx0
ZXJuYXRpdmVzKGFsdGVybmF0aXZlcyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlbW92
ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAg
IG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5yZW1vdmVBbHRlcm5hdGl2ZXMoZGljdGF0
aW9uQ29udGV4dCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dEaWN0YXRpb25BbHRl
cm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZkRpY3RhdGVk
VGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBpZiAoIWlzVmlld1Zpc2li
bGUoKSB8fCAhaXNWaWV3SW5XaW5kb3coKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyLT5zaG93QWx0ZXJuYXRpdmVzKG1fdmlldywgYm91bmRpbmdC
b3hPZkRpY3RhdGVkVGV4dCwgZGljdGF0aW9uQ29udGV4dCwgXihOU1N0cmluZyAqYWNjZXB0ZWRB
bHRlcm5hdGl2ZSkgeworICAgICAgICBtX2ltcGwtPmhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVU
ZXh0KGFjY2VwdGVkQWx0ZXJuYXRpdmUpOworICAgIH0pOworfQorCitWZWN0b3I8U3RyaW5nPiBQ
YWdlQ2xpZW50SW1wbDo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpCit7CisgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5hbHRl
cm5hdGl2ZXNGb3JDb250ZXh0KGRpY3RhdGlvbkNvbnRleHQpOworfQorI2VuZGlmCisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OnNldEVkaXRhYmxlRWxlbWVudElzRm9jdXNlZChib29sIGVkaXRhYmxl
RWxlbWVudElzRm9jdXNlZCkKK3sKKyAgICBtX2ltcGwtPnNldEVkaXRhYmxlRWxlbWVudElzRm9j
dXNlZChlZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpOworfQorCisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorCitXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBQYWdlQ2xpZW50SW1w
bDo6ZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpCit7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCisvLyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OmNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKQoreworICAgIG1faW1wbC0+Y2xvc2VGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcigpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppc0Z1
bGxTY3JlZW4oKQoreworICAgIGlmICghbV9pbXBsLT5oYXNGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9pbXBsLT5mdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcigpLmlzRnVsbFNjcmVlbjsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBbbV9pbXBsLT5mdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcigpIGVudGVyRnVsbFNjcmVlbjpuaWxdOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpleGl0RnVsbFNjcmVlbigpCit7CisgICAgW21faW1wbC0+ZnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIoKSBleGl0RnVsbFNjcmVlbl07Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IEludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3Qg
SW50UmVjdCYgZmluYWxGcmFtZSkKK3sKKyAgICBbbV9pbXBsLT5mdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcigpIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTppbml0aWFsRnJh
bWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKKyAgICBtX2ltcGwtPnVwZGF0ZVN1cHBvcnRzQXJi
aXRyYXJ5TGF5b3V0TW9kZXMoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0
RnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGZp
bmFsRnJhbWUpCit7CisgICAgW21faW1wbC0+ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSBi
ZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTppbml0aWFsRnJhbWUgZmluYWxGcmFt
ZTpmaW5hbEZyYW1lXTsKKyAgICBtX2ltcGwtPnVwZGF0ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0
TW9kZXMoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpCit7CisgICAgbV9pbXBs
LT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbih0cnVlKTsK
KworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgaWYgKG1fd2ViVmlldykKKyAgICAgICAgTmF2aWdh
dGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1
cmVEaWRCZWdpbigpOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRp
b25HZXN0dXJlV2lsbEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSYgaXRlbSkKK3sKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIGlmIChtX3dlYlZpZXcpCisgICAg
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmln
YXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0od2lsbE5hdmlnYXRlKTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisjZW5kaWYK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCB3
aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCit7CisjaWYgV0tfQVBJ
X0VOQUJMRUQKKyAgICBpZiAobV93ZWJWaWV3KQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZy
b21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxs
TmF2aWdhdGUsIGl0ZW0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsK
KyAgICBVTlVTRURfUEFSQU0oaXRlbSk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoKQoreworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
Ojp3aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0
ZW0pCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBpZiAobV93ZWJWaWV3KQorICAgICAgICBO
YXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS53aWxsUmVjb3Jk
TmF2aWdhdGlvblNuYXBzaG90KGl0ZW0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7
CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdCgpCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBpZiAobV93ZWJWaWV3
KQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdl
KS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOworI2VuZGlmCit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5G
cmFtZSgpCit7CisgICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIgPSBtX2ltcGwtPmdlc3R1
cmVDb250cm9sbGVyKCkpCisgICAgICAgIGdlc3R1cmVDb250cm9sbGVyLT5kaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGlkRmluaXNoTG9hZEZvck1haW5GcmFtZSgpCit7CisgICAgaWYgKGF1dG8gZ2VzdHVyZUNv
bnRyb2xsZXIgPSBtX2ltcGwtPmdlc3R1cmVDb250cm9sbGVyKCkpCisgICAgICAgIGdlc3R1cmVD
b250cm9sbGVyLT5kaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lKCk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkKK3sKKyAgICBpZiAoYXV0byBnZXN0
dXJlQ29udHJvbGxlciA9IG1faW1wbC0+Z2VzdHVyZUNvbnRyb2xsZXIoKSkKKyAgICAgICAgZ2Vz
dHVyZUNvbnRyb2xsZXItPmRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCk7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUoU2FtZURv
Y3VtZW50TmF2aWdhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBpZiAoYXV0byBnZXN0dXJlQ29udHJv
bGxlciA9IG1faW1wbC0+Z2VzdHVyZUNvbnRyb2xsZXIoKSkKKyAgICAgICAgZ2VzdHVyZUNvbnRy
b2xsZXItPmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUodHlwZSk7Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBbbV93
ZWJWaWV3IF9oYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2U6bnNTdHJpbmdGcm9tV2Vi
Q29yZVN0cmluZyhpZGVudGlmaWVyKV07CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6aGFuZGxlQWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvUmVzcG9uc2UoYm9vbCBoYXNBY3Rp
dmVTZXNzaW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSBl
bGFwc2VkVGltZSkKK3sKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIFttX3dlYlZpZXcgX2hhbmRs
ZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mb1Jlc3BvbnNlOmhhc0FjdGl2ZVNlc3Npb24gdGl0
bGU6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyh0aXRsZSkgZHVyYXRpb246ZHVyYXRpb24gZWxh
cHNlZFRpbWU6ZWxhcHNlZFRpbWVdOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OmRpZENoYW5nZUJhY2tncm91bmRDb2xvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworQ0dSZWN0IFBhZ2VDbGllbnRJbXBsOjpib3VuZHNPZkxheWVySW5MYXllckJhY2tlZFdpbmRv
d0Nvb3JkaW5hdGVzKENBTGF5ZXIgKmxheWVyKSBjb25zdAoreworICAgIENBTGF5ZXIgKndpbmRv
d0NvbnRlbnRMYXllciA9IHN0YXRpY19jYXN0PE5TVmlldyAqPihtX3ZpZXcud2luZG93LmNvbnRl
bnRWaWV3KS5sYXllcjsKKyAgICBBU1NFUlQod2luZG93Q29udGVudExheWVyKTsKKworICAgIHJl
dHVybiBbd2luZG93Q29udGVudExheWVyIGNvbnZlcnRSZWN0OmxheWVyLmJvdW5kcyBmcm9tTGF5
ZXI6bGF5ZXJdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRQZXJmb3JtSW1tZWRpYXRl
QWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgcmVzdWx0LCBib29sIGNv
bnRlbnRQcmV2ZW50c0RlZmF1bHQsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkKK3sKKyAgICBtX2lt
cGwtPmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KHJlc3VsdCwgY29udGVudFByZXZl
bnRzRGVmYXVsdCwgdXNlckRhdGEpOworfQorCit2b2lkKiBQYWdlQ2xpZW50SW1wbDo6aW1tZWRp
YXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoUmVmUHRyPEFQSTo6
SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCwgdWludDY0X3QgdHlwZSwgUmVmUHRyPEFQSTo6
T2JqZWN0PiB1c2VyRGF0YSkKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5pbW1lZGlhdGVBY3Rpb25B
bmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0LmdldCgpLCB0
eXBlLCB1c2VyRGF0YS5nZXQoKSk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlKCkKK3sKKyAgICBtX2ltcGwtPmRpZEhhbmRsZUFjY2VwdGVkQ2Fu
ZGlkYXRlKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnZpZGVvQ29udHJvbHNNYW5hZ2Vy
RGlkQ2hhbmdlKCkKK3sKKyAgICBtX2ltcGwtPnZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdl
KCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dQbGF0Zm9ybUNvbnRleHRNZW51KE5T
TWVudSAqbWVudSwgSW50UG9pbnQgbG9jYXRpb24pCit7CisgICAgW21lbnUgcG9wVXBNZW51UG9z
aXRpb25pbmdJdGVtOm5pbCBhdExvY2F0aW9uOmxvY2F0aW9uIGluVmlldzptX3ZpZXddOworfQor
CisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKK1dlYkNvcmU6OldlYk1lZGlh
U2Vzc2lvbk1hbmFnZXImIFBhZ2VDbGllbnRJbXBsOjptZWRpYVNlc3Npb25NYW5hZ2VyKCkKK3sK
KyAgICByZXR1cm4gV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkKCk7Cit9CisjZW5kaWYK
Kwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVmVmlldygpCit7CisgICAgQ0ZSZXRhaW4obV92aWV3
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGVyZWZWaWV3KCkKK3sKKyAgICBDRlJlbGVh
c2UobV92aWV3KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RhcnRXaW5kb3dEcmFnKCkK
K3sKKyAgICBtX2ltcGwtPnN0YXJ0V2luZG93RHJhZygpOworfQorCitOU1dpbmRvdyAqUGFnZUNs
aWVudEltcGw6OnBsYXRmb3JtV2luZG93KCkKK3sKKyAgICByZXR1cm4gbV9pbXBsLT53aW5kb3co
KTsKK30KKworI2lmIFdLX0FQSV9FTkFCTEVECitOU1ZpZXcgKlBhZ2VDbGllbnRJbXBsOjppbnNw
ZWN0b3JBdHRhY2htZW50VmlldygpCit7CisgICAgcmV0dXJuIG1faW1wbC0+aW5zcGVjdG9yQXR0
YWNobWVudFZpZXcoKTsKK30KKworX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKlBhZ2VDbGllbnRJ
bXBsOjpyZW1vdGVPYmplY3RSZWdpc3RyeSgpCit7CisgICAgcmV0dXJuIG1faW1wbC0+cmVtb3Rl
T2JqZWN0UmVnaXN0cnkoKTsKK30KKyNlbmRpZgorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRS
ZXN0b3JlU2Nyb2xsUG9zaXRpb24oKQoreworICAgIG1faW1wbC0+ZGlkUmVzdG9yZVNjcm9sbFBv
c2l0aW9uKCk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OndpbmRvd0lzRnJvbnRXaW5kb3dV
bmRlck1vdXNlKGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIHJldHVy
biBtX2ltcGwtPndpbmRvd0lzRnJvbnRXaW5kb3dVbmRlck1vdXNlKGV2ZW50Lm5hdGl2ZUV2ZW50
KCkpOworfQorCitXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIFBhZ2VDbGll
bnRJbXBsOjp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1fdmll
dykKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246
OkxUUjsKKyAgICByZXR1cm4gKG1fdmlldy51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uID09
IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0KSA/IFdlYkNvcmU6OlVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OkxUUiA6IFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb246OlJUTDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5tbQkocmV2aXNpb24gMjIxNDY3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAg
Ki8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorI2lt
cG9ydCAiUGFnZUNsaWVudEltcGxNYWMuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykKIApAQCAtOTcs
OCArOTcsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IFBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbChOU1ZpZXcqIHZpZXcsIFdLV2ViVmlldyAq
d2ViVmlldykKLSAgICA6IG1fdmlldyh2aWV3KQotICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCisg
ICAgOiBQYWdlQ2xpZW50SW1wbENvY29hKHdlYlZpZXcpCisgICAgLCBtX3ZpZXcodmlldykKICNp
ZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKICAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyPigp
KQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQkocmV2aXNpb24gMjIxNDY3KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIkFQSUNvbnRleHRNZW51Q2xpZW50LmgiCiAj
aW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJNZW51VXRpbGl0aWVzLmgiCi0jaW1w
b3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorI2ltcG9ydCAiUGFnZUNsaWVudEltcGxNYWMuaCIKICNp
bXBvcnQgIlNlcnZpY2VzQ29udHJvbGxlci5oIgogI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgi
CiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjIxNDY3KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCAiTWVudVV0aWxpdGllcy5oIgogI2ltcG9ydCAi
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiUGFnZUNsaWVudC5oIgotI2ltcG9y
dCAiUGFnZUNsaWVudEltcGwuaCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsTWFjLmgiCiAjaW1w
b3J0ICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKICNpbXBvcnQgIlN0cmluZ1V0aWxp
dGllcy5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0JKHJldmlzaW9uIDIy
MTQ2NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIFVTRShBUFBLSVQpCiAK
ICNpbXBvcnQgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKLSNpbXBvcnQgIlBhZ2VDbGllbnRJbXBs
LmgiCisjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbE1hYy5oIgogI2ltcG9ydCAiUGxhdGZvcm1Qb3B1
cE1lbnVEYXRhLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldlYlBv
cHVwSXRlbS5oIgpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjE0ODkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDgg
QEAKIAkJMEZDQjRFNTExOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklP
U09iakNTZWN1cml0eU9yaWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0I0RTQxMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJv
dmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gKi87IH07CiAJCTBGQ0I0RTU0MThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQ0MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcu
aCAqLzsgfTsKIAkJMEZDQjRFNTUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQ1MThC
QkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gKi87IH07Ci0JCTBGQ0I0RTYyMThCQkUz
RDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGll
bnRJbXBsLmggKi87IH07Ci0JCTBGQ0I0RTYzMThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50
SW1wbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLzsgfTsKKwkJMEZD
QjRFNjIxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1ODE4QkJFM0Q5MDAwRkNG
QzkgLyogUGFnZUNsaWVudEltcGxNYWMuaCAqLzsgfTsKKwkJMEZDQjRFNjMxOEJCRTNEOTAwMEZD
RkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJ
bXBsTWFjLm1tICovOyB9OwogCQkwRkNCNEU2NjE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGlu
Z1ZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0I0RTVDMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5oICovOyB9OwogCQkwRkNC
NEU2NzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1RDE4QkJFM0Q5MDAwRkNGQzkg
LyogV0tQcmludGluZ1ZpZXcubW0gKi87IH07CiAJCTBGQ0I0RTY4MThCQkUzRDkwMDBGQ0ZDOSAv
KiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1RleHRJ
bnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTIzMTQsOCArMjMxNCw4IEBACiAJCTBG
Q0I0RTQxMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2Vj
dXJpdHlPcmlnaW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW07IHBhdGggPSBpb3Mv
V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU0NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxW
aWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLU2Nyb2xsVmlldy5oOyBw
YXRoID0gaW9zL1dLU2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkNCNEU0NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tTY3JvbGxWaWV3Lm1tOyBwYXRoID0gaW9zL1dL
U2Nyb2xsVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDQjRFNTgxOEJC
RTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhZ2VDbGllbnRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhZ2VDbGllbnRJbXBsLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkNCNEU1ODE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNs
aWVudEltcGxNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUNsaWVu
dEltcGxNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRFNTkxOEJCRTNE
OTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUGFnZUNsaWVudEltcGxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQ0I0RTVDMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByaW50aW5nVmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU1RDE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQ
cmludGluZ1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
S1ByaW50aW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNUUx
OEJCRTNEOTAwMEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MTEsNiArMzUxMSw3IEBACiAJCTVDMjk4
RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUGVuZGluZ0Rvd25sb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDNjJGREY4MUVGQzI2M0MwMENFMDcyRSAvKiBXS1VSTFNjaGVtZVRhc2tQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLVVJMU2NoZW1lVGFza1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUM2Q0U2RDAxRjU5QkM0NjAwMDdDNkNCIC8qIFBhZ2VDbGllbnRJbXBs
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlQ2xp
ZW50SW1wbENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzZDRTZEMzFG
NTlFQTM1MDAwN0M2Q0IgLyogUGFnZUNsaWVudEltcGxDb2NvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYWdlQ2xpZW50SW1wbENvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDNzcwNjczMUQxMTFEOEIwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRQcm92
aWRlci5jcHA7IHBhdGggPSBOZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4REMxRDBGNDFBMDAwOUQyRjZEIC8qIFdlYlNvY2tl
dFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNvY2tldFBy
b3ZpZGVyLmg7IHBhdGggPSBOZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDODVDNzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5kaW5nRG93
bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGVuZGluZ0Rv
d25sb2FkLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxv
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI3NSw2ICs1Mjc2LDcgQEAK
IAkJCQk3QTgyMUY0RDFFMkY2NzlFMDA2MDQ1NzcgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50Lm1tICovLAogCQkJCTFBQkMzREY0MTg5OUU0MzcwMDRGMDYyNiAvKiBOYXZpZ2F0
aW9uU3RhdGUuaCAqLywKIAkJCQkxQUJDM0RGMzE4OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlv
blN0YXRlLm1tICovLAorCQkJCTVDNkNFNkQzMUY1OUVBMzUwMDA3QzZDQiAvKiBQYWdlQ2xpZW50
SW1wbENvY29hLmggKi8sCiAJCQkJNUM2Q0U2RDAxRjU5QkM0NjAwMDdDNkNCIC8qIFBhZ2VDbGll
bnRJbXBsQ29jb2EubW0gKi8sCiAJCQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oICovLAogCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC03Njk2
LDggKzc2OTgsOCBAQAogCQkJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9u
UGFuZWwuaCAqLywKIAkJCQlCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBh
bmVsLm1tICovLAogCQkJCTFBRkRFNjVCMTk1NEU4RDUwMEM0OEZGQSAvKiBMZWdhY3lTZXNzaW9u
U3RhdGVDb2RpbmcuY3BwICovLAotCQkJCTBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdl
Q2xpZW50SW1wbC5oICovLAotCQkJCTBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xp
ZW50SW1wbC5tbSAqLywKKwkJCQkwRkNCNEU1ODE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVu
dEltcGxNYWMuaCAqLywKKwkJCQkwRkNCNEU1OTE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVu
dEltcGxNYWMubW0gKi8sCiAJCQkJMUFCMTZBRTAxNjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCAqLywKIAkJCQkwRkYyNEEyRjE4NzlFNEZFMDAzQUJG
MEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJ
CQkxQUIxNkFERjE2NDg2NTZEMDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5tbSAqLywKQEAgLTg2MzIsOCArODYzNCw4IEBACiAJCQkJMzdCNDdFMkQxRDY0REI3NjAw
NUY0RUZGIC8qIG9iamNTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRjQ3RkZCMTcyNzVDNTcw
MDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZFREFBNjExMTI3
MUM2MDBFNzY3OEIgLyogUGFnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDQjRFNjIx
OEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkNCNEU0NjE4QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxJT1MuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQ0I0RTYyMThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNzUzN0MxODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2Fk
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEI2NkIwMUJDNDNDODYwMDgyREY3NyAvKiBQ
YWdlTG9hZFN0YXRlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2
ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAyMDIs
OSArMTAyMDQsOSBAQAogCQkJCUJDOEFDQTE0MTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0
R3JhcGgubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzM4NzQzNDE3MkY1NjE1MDAxQkQ4OEEgLyog
UGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzZEMzdGQzE3MkY1NTVGMDA5RDI4
NDcgLyogUGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTBGQ0I0RTYzMThCQkUz
RDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDNkNF
NkQxMUY1OUJDN0EwMDA3QzZDQiAvKiBQYWdlQ2xpZW50SW1wbENvY29hLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZDQjRFNDcxOEJCRTA0NDAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsSU9TLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZDQjRFNjMxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGll
bnRJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDNzUzN0IxODNBOUZEQjAwNzJDQjE1
IC8qIFBhZ2VMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU3NEE1ODIxMkU2NjY4
MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxOTU4
MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319630</attachid>
            <date>2017-09-01 12:39:31 -0700</date>
            <delta_ts>2017-09-01 13:16:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176239-20170901123930.patch</filename>
            <type>text/plain</type>
            <size>101666</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE0OTIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE3LTA5LTAxICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBQYWdlQ2xp
ZW50SW1wbENvY29hIGEgcHJvcGVyIHN1cGVyY2xhc3Mgb2YgUGFnZUNsaWVudEltcGxzIGZvciBN
YWMgYW5kIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc2MjM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGxDb2NvYTo6UGFnZUNsaWVudEltcGxDb2NvYSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvV2lsbENoYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzUGxheWluZ0F1ZGlv
V2lsbENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpp
c1BsYXlpbmdBdWRpb0RpZENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmguCisgICAgICAgICogVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbE1hYy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
UGFnZUNsaWVudEltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQ
cm94eU1hYy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tOgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE3LTA5LTAxICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFj
ZSBXS1VJRGVsZWdhdGVQcml2YXRlJ3MgaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2Ugd2l0aCBLVk8g
X2lzUGxheWluZ0F1ZGlvIG9uIFdLV2ViVmlldwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorCitAY2xhc3MgV0tXZWJWaWV3OworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgUGFnZUNsaWVudEltcGxDb2NvYSA6IHB1YmxpYyBQYWdlQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBQYWdlQ2xpZW50SW1wbENvY29hKFdLV2ViVmlldyAqd2ViVmll
dykKKyAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykgeyB9CisgICAgdm9pZCBpc1BsYXlpbmdB
dWRpb1dpbGxDaGFuZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdl
KCkgZmluYWw7Citwcm90ZWN0ZWQ6CisgICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7Cit9OworCit9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGll
bnRJbXBsQ29jb2EubW0JKHJldmlzaW9uIDIyMTQ4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDIx
ICsyNCwyMCBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGFnZUNsaWVu
dEltcGwuaCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsQ29jb2EuaCIKIAotI2ltcG9ydCAiUGFn
ZUNsaWVudEltcGxJT1MuaCIKICNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmlzUGxheWluZ0F1ZGlvV2lsbENo
YW5nZSgpCit2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvV2lsbENoYW5n
ZSgpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICBbbV93ZWJWaWV3IHdpbGxDaGFuZ2VWYWx1
ZUZvcktleTpOU1N0cmluZ0Zyb21TZWxlY3RvcihAc2VsZWN0b3IoX2lzUGxheWluZ0F1ZGlvKSld
OwogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmlzUGxheWluZ0F1ZGlvRGlkQ2hh
bmdlKCkKK3ZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2Uo
KQogewogI2lmIFdLX0FQSV9FTkFCTEVECiAgICAgW21fd2ViVmlldyBkaWRDaGFuZ2VWYWx1ZUZv
cktleTpOU1N0cmluZ0Zyb21TZWxlY3RvcihAc2VsZWN0b3IoX2lzUGxheWluZ0F1ZGlvKSldOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJl
dmlzaW9uIDIyMTQ2NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW1wb3J0ICJOYXRpdmVX
ZWJNb3VzZUV2ZW50LmgiCiAjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW1wb3J0
ICJQYWdlQ2xpZW50LmgiCi0jaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorI2ltcG9ydCAiUGFn
ZUNsaWVudEltcGxNYWMuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgogI2ltcG9ydCAi
UGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNpb24gMjIxNDg5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDE3ICsyNywxNiBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQogCi0jaW1wb3J0ICJQYWdlQ2xpZW50
LmgiCisjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbENvY29hLmgiCiAjaW1wb3J0ICJXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xB
U1MgV0tDb250ZW50VmlldzsKLU9CSkNfQ0xBU1MgV0tXZWJWaWV3OwogT0JKQ19DTEFTUyBXS0Vk
aXRvclVuZG9UYXJnZXRPYmpDOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAKLWNsYXNzIFBh
Z2VDbGllbnRJbXBsIDogcHVibGljIFBhZ2VDbGllbnQKK2NsYXNzIFBhZ2VDbGllbnRJbXBsIDog
cHVibGljIFBhZ2VDbGllbnRJbXBsQ29jb2EKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAg
ICAgLCBwdWJsaWMgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAogI2VuZGlmCkBAIC0x
OTQsOCArMTkzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlcmVmVmlldygpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSBvdmVycmlkZTsKLSAgICB2b2lk
IGlzUGxheWluZ0F1ZGlvV2lsbENoYW5nZSgpIGZpbmFsOwotICAgIHZvaWQgaXNQbGF5aW5nQXVk
aW9EaWRDaGFuZ2UoKSBmaW5hbDsKIAogICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIG92ZXJyaWRlOwogCkBAIC0y
MTQsNyArMjExLDYgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgV0tDb250ZW50VmlldyAqbV9j
b250ZW50VmlldzsKLSAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKICAgICBSZXRhaW5QdHI8V0tF
ZGl0b3JVbmRvVGFyZ2V0T2JqQz4gbV91bmRvVGFyZ2V0OwogfTsKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5tbQkocmV2aXNpb24gMjIxNDY3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOCArMTEzLDgg
QEAgLSAodm9pZClyZWRvRWRpdGluZzooaWQpc2VuZGVyCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKFdLQ29udGVudFZpZXcgKmNvbnRlbnRWaWV3
LCBXS1dlYlZpZXcgKndlYlZpZXcpCisgICAgOiBQYWdlQ2xpZW50SW1wbENvY29hKHdlYlZpZXcp
CiAgICAgOiBtX2NvbnRlbnRWaWV3KGNvbnRlbnRWaWV3KQotICAgICwgbV93ZWJWaWV3KHdlYlZp
ZXcpCiAgICAgLCBtX3VuZG9UYXJnZXQoYWRvcHROUyhbW1dLRWRpdG9yVW5kb1RhcmdldE9iakMg
YWxsb2NdIGluaXRdKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAyMjE0ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDI2MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9S
TShNQUMpCi0KLSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKLSNpbmNsdWRlICJQYWdlQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7Ci1AY2xh
c3MgV0tWaWV3OwotQGNsYXNzIFdLV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViVmlld0ltcGw7Ci0KLWNsYXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDogcHVi
bGljIFBhZ2VDbGllbnQKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgLCBwdWJsaWMg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAotI2VuZGlmCi0gICAgewotcHVibGljOgot
ICAgIFBhZ2VDbGllbnRJbXBsKE5TVmlldyAqLCBXS1dlYlZpZXcgKik7Ci0gICAgdmlydHVhbCB+
UGFnZUNsaWVudEltcGwoKTsKLQotICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IFdlYlZpZXdJbXBs
IHNob3VsZCBiZWNvbWUgdGhlIFBhZ2VDbGllbnQuCi0gICAgdm9pZCBzZXRJbXBsKFdlYlZpZXdJ
bXBsJiBpbXBsKSB7IG1faW1wbCA9ICZpbXBsOyB9Ci0KLSAgICB2b2lkIHZpZXdXaWxsTW92ZVRv
QW5vdGhlcldpbmRvdygpOwotCi1wcml2YXRlOgotICAgIC8vIFBhZ2VDbGllbnQKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdp
b24mKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxP
cmlnaW4sIGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgdmlld1Njcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3Jl
OjpJbnRTaXplIHZpZXdTaXplKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1ZpZXdXaW5kb3dBY3Rp
dmUoKSBvdmVycmlkZTsKLSAgICBib29sIGlzVmlld0ZvY3VzZWQoKSBvdmVycmlkZTsKLSAgICBi
b29sIGlzVmlld1Zpc2libGUoKSBvdmVycmlkZTsKLSAgICBib29sIGlzVmlld1Zpc2libGVPck9j
Y2x1ZGVkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1ZpZXdJbldpbmRvdygpIG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNWaXN1YWxseUlkbGUoKSBvdmVycmlkZTsKLSAgICBMYXllckhvc3RpbmdNb2Rl
IHZpZXdMYXllckhvc3RpbmdNb2RlKCkgb3ZlcnJpZGU7Ci0gICAgQ29sb3JTcGFjZURhdGEgY29s
b3JTcGFjZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jv
b3RMYXllcihMYXllck9yVmlldyAqKSBvdmVycmlkZTsKLSAgICBMYXllck9yVmlldyAqYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBw
cm9jZXNzRGlkRXhpdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGFnZUNsb3NlZCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcmVm
ZXJlbmNlc0RpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29u
c3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29y
ZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpc1BsYXlpbmdBdWRp
b1dpbGxDaGFuZ2UoKSBmaW5hbDsKLSAgICB2b2lkIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkg
ZmluYWw7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUmVmPFdlYkVkaXRDb21tYW5k
UHJveHk+JiYsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGVhckFsbEVkaXRDb21tYW5kcygpIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuVW5kb1JlZG8oV2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKLSAgICB2b2lkIGV4ZWN1dGVVbmRvUmVk
byhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOwotICAgIGJvb2wgZXhlY3V0ZVNh
dmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0
aW9uLCBSZWY8U2hhcmVhYmxlQml0bWFwPiYmIGRyYWdJbWFnZSwgV2ViQ29yZTo6RHJhZ1NvdXJj
ZUFjdGlvbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGlt
YWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lv
biwgY29uc3QgU3RyaW5nJiB0aXRsZSwKLSAgICAgICAgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgdmlzaWJsZVVybCwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBhcmNo
aXZlQnVmZmVyKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotICAg
IHZvaWQgc2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlz
aWJsZVVybCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3Rh
dGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0KLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1Vz
ZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICBXZWJDb3Jl
OjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3Zl
cnJpZGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgV2ViQ29yZTo6
SW50UmVjdCByb290Vmlld1RvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlk
ZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKElPUykKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBv
aW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JikgPSAwOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJp
bGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotI2VuZGlmCi0KLSAgICBD
R1JlY3QgYm91bmRzT2ZMYXllckluTGF5ZXJCYWNrZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVy
ICpsYXllcikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlk
ZTsKLQotICAgIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHko
V2ViUGFnZVByb3h5Jikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAg
UmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFn
ZVByb3h5JiwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikg
b3ZlcnJpZGU7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgIFJl
ZlB0cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBSZWY8V2ViQ29yZTo6VmFsaWRhdGlvbkJ1YmJsZT4g
Y3JlYXRlVmFsaWRhdGlvbkJ1YmJsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdlYkNv
cmU6OlZhbGlkYXRpb25CdWJibGU6OlNldHRpbmdzJikgZmluYWw7Ci0KLSAgICB2b2lkIHNldFRl
eHRJbmRpY2F0b3IoUmVmPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+LCBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yV2luZG93TGlmZXRpbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNh
dG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25z
dCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKLQotICAgIFJl
ZlB0cjxWaWV3U25hcHNob3Q+IHRha2VWaWV3U25hcHNob3QoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZl
bnQmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQotICAgIHZvaWQg
Z2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJHZXN0dXJl
RXZlbnQmKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJv
Y2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dI
YXNGb2N1cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG1ha2VGaXJzdFJlc3BvbmRl
cigpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNo
YW5nZXMoYm9vbCBzaG91bGRTdXBwcmVzcykgb3ZlcnJpZGUgeyBtX3Nob3VsZFN1cHByZXNzRmly
c3RSZXNwb25kZXJDaGFuZ2VzID0gc2hvdWxkU3VwcHJlc3M7IH0KLQotICAgIHZvaWQgZGlkUGVy
Zm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSBvdmVycmlkZTsK
LSAgICBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdl
KFdlYkNvcmU6OlNjcm9sbGJhclN0eWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW50cmluc2lj
Q29udGVudFNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50cmluc2ljQ29u
dGVudFNpemUpIG92ZXJyaWRlOwotCi0jaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0g
ICAgdWludDY0X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1Rl
eHRBbHRlcm5hdGl2ZXM+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
aG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIG92ZXJyaWRl
OwotICAgIFZlY3RvcjxTdHJpbmc+IGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0
YXRpb25Db250ZXh0KSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgc2V0RWRpdGFibGVFbGVt
ZW50SXNGb2N1c2VkKGJvb2wpIG92ZXJyaWRlOwotCi0jaWYgVVNFKElOU0VSVElPTl9VTkRPX0dS
T1VQSU5HKQotICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlk
ZTsKLSNlbmRpZgotCi0gICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKLSAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBm
dWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAvLyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xp
ZW50Ci0gICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBpc0Z1bGxTY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGVudGVyRnVsbFNjcmVlbigpIG92
ZXJyaWRlOwotICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGJl
Z2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBi
ZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQot
ICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpIG92ZXJyaWRlOwotICAgIHZvaWQg
bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChi
b29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOwotICAg
IHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxS
ZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpIG92ZXJyaWRl
OwotCi0gICAgTlNWaWV3ICphY3RpdmVWaWV3KCkgY29uc3Q7Ci0gICAgTlNXaW5kb3cgKmFjdGl2
ZVdpbmRvdygpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JNYWlu
RnJhbWUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNh
bWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUNvbnRy
b2xsZWRFbGVtZW50SURSZXNwb25zZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGhhbmRsZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mb1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZl
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxh
cHNlZFRpbWUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9u
SGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRz
RGVmYXVsdCwgQVBJOjpPYmplY3QqKSBvdmVycmlkZTsKLSAgICB2b2lkKiBpbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0
UmVzdWx0PiwgdWludDY0X3QsIFJlZlB0cjxBUEk6Ok9iamVjdD4pIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBkaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB2
aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaG93
UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUgKiwgV2ViQ29yZTo6SW50UG9pbnQpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgc3RhcnRXaW5kb3dEcmFnKCkgb3ZlcnJpZGU7Ci0gICAgTlNXaW5kb3cgKnBsYXRmb3Jt
V2luZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBvdmVycmlkZTsKLQotI2lmIFdL
X0FQSV9FTkFCTEVECi0gICAgTlNWaWV3ICppbnNwZWN0b3JBdHRhY2htZW50VmlldygpIG92ZXJy
aWRlOwotICAgIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeSgp
IG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBOU1ZpZXcgKm1fdmlldzsKLSAgICBXS1dlYlZpZXcg
Km1fd2ViVmlldzsKLSAgICBXZWJWaWV3SW1wbCogbV9pbXBsIHsgbnVsbHB0ciB9OwotI2lmIFVT
RShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICBDb3JyZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9u
UGFuZWw7Ci0jZW5kaWYKLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyPiBtX2FsdGVy
bmF0aXZlVGV4dFVJQ29udHJvbGxlcjsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3Nob3VsZFN1cHBy
ZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzIHsgZmFsc2UgfTsKLQotI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCi0gICAgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYg
bWVkaWFTZXNzaW9uTWFuYWdlcigpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIHJlZlZp
ZXcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmVmlldygpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSBvdmVycmlkZTsKLSAgICBib29sIHdpbmRvd0lz
RnJvbnRXaW5kb3dVbmRlck1vdXNlKGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmKSBvdmVycmlk
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAg
IyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAyMjE0
NjcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0JKG5v
bmV4aXN0ZW50KQpAQCAtMSw4ODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKLQotI2lmIFBMQVRG
T1JNKE1BQykKLQotI2ltcG9ydCAiQVBJSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiQ29sb3JT
cGFjZURhdGEuaCIKLSNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbXBvcnQgIkRvd25sb2Fk
UHJveHkuaCIKLSNpbXBvcnQgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbXBvcnQgIk5hdGl2ZVdl
Ykdlc3R1cmVFdmVudC5oIgotI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgotI2lt
cG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgotI2ltcG9ydCAiTmF0aXZlV2ViV2hlZWxFdmVu
dC5oIgotI2ltcG9ydCAiTmF2aWdhdGlvblN0YXRlLmgiCi0jaW1wb3J0ICJTdHJpbmdVdGlsaXRp
ZXMuaCIKLSNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgotI2ltcG9ydCAiVmlld1Nu
YXBzaG90U3RvcmUuaCIKLSNpbXBvcnQgIldLQVBJQ2FzdC5oIgotI2ltcG9ydCAiV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5oIgotI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgotI2ltcG9ydCAi
V0tWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0
ICJXZWJDb2xvclBpY2tlck1hYy5oIgotI2ltcG9ydCAiV2ViQ29udGV4dE1lbnVQcm94eU1hYy5o
IgotI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgotI2ltcG9ydCAiV2ViUG9wdXBNZW51
UHJveHlNYWMuaCIKLSNpbXBvcnQgIldlYlZpZXdJbXBsLmgiCi0jaW1wb3J0ICJXaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uLmgiCi0jaW1wb3J0ICJfV0tEb3dubG9hZEludGVybmFsLmgiCi0jaW1wb3J0
ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS1RodW1ibmFpbFZpZXcu
aCIKLSNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvSW1hZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2lt
cG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9UZXh0SW5kaWNhdG9yV2luZG93Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RleHRVbmRvSW5z
ZXJ0aW9uTWFya3VwTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4K
LSNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBVU0UoRElDVEFU
SU9OX0FMVEVSTkFUSVZFUykKLSNpbXBvcnQgPEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMuaD4K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSNpbmNsdWRl
IDxXZWJDb3JlL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4KLSNlbmRpZgotCi1AaW50ZXJmYWNl
IE5TQXBwbGljYXRpb24gKFdlYk5TQXBwbGljYXRpb25EZXRhaWxzKQotLSAoTlNDdXJzb3IgKilf
Y3Vyc29yUmVjdEN1cnNvcjsKLUBlbmQKLQotI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJf
SE9TVElORykKLUBpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykKLS0gKEJP
T0wpX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7Ci1AZW5kCi0jZW5kaWYKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKE5TVmlldyogdmlldywgV0tX
ZWJWaWV3ICp3ZWJWaWV3KQotICAgIDogbV92aWV3KHZpZXcpCi0gICAgLCBtX3dlYlZpZXcod2Vi
VmlldykKLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICAsIG1fYWx0ZXJuYXRp
dmVUZXh0VUlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyPigpKQotI2VuZGlmCi17Ci0jaWYgIVdLX0FQSV9FTkFCTEVECi0gICAgQVNTRVJUX1VO
VVNFRChtX3dlYlZpZXcsICFtX3dlYlZpZXcpOwotI2VuZGlmCi19Ci0KLVBhZ2VDbGllbnRJbXBs
Ojp+UGFnZUNsaWVudEltcGwoKQotewotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQ
cm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQotewotICAgIHJl
dHVybiBtX2ltcGwtPmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdpb24mKQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1
ZXN0U2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsT3JpZ2luLCBib29sIGlzUHJvZ3JhbW1hdGljU2Nyb2xsKQotewotfQotCi1XZWJD
b3JlOjpGbG9hdFBvaW50IFBhZ2VDbGllbnRJbXBsOjp2aWV3U2Nyb2xsUG9zaXRpb24oKQotewot
ICAgIHJldHVybiB7IH07Ci19Ci0KLUludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkK
LXsKLSAgICByZXR1cm4gSW50U2l6ZShbbV92aWV3IGJvdW5kc10uc2l6ZSk7Ci19Ci0KLU5TVmll
dyAqUGFnZUNsaWVudEltcGw6OmFjdGl2ZVZpZXcoKSBjb25zdAotewotI2lmIFdLX0FQSV9FTkFC
TEVECi0gICAgcmV0dXJuIChtX2ltcGwgJiYgbV9pbXBsLT50aHVtYm5haWxWaWV3KCkpID8gKE5T
VmlldyAqKW1faW1wbC0+dGh1bWJuYWlsVmlldygpIDogbV92aWV3OwotI2Vsc2UKLSAgICByZXR1
cm4gbV92aWV3OwotI2VuZGlmCi19Ci0KLU5TV2luZG93ICpQYWdlQ2xpZW50SW1wbDo6YWN0aXZl
V2luZG93KCkgY29uc3QKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX2ltcGwgJiYg
bV9pbXBsLT50aHVtYm5haWxWaWV3KCkpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnRodW1ibmFp
bFZpZXcoKS53aW5kb3c7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsICYmIG1faW1wbC0+dGFyZ2V0
V2luZG93Rm9yTW92ZVByZXBhcmF0aW9uKCkpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnRhcmdl
dFdpbmRvd0Zvck1vdmVQcmVwYXJhdGlvbigpOwotICAgIHJldHVybiBtX3ZpZXcud2luZG93Owot
fQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQotewotICAgIE5T
V2luZG93ICphY3RpdmVWaWV3V2luZG93ID0gYWN0aXZlV2luZG93KCk7Ci0gICAgcmV0dXJuIGFj
dGl2ZVZpZXdXaW5kb3cuaXNLZXlXaW5kb3cgfHwgW05TQXBwIGtleVdpbmRvd10gPT0gYWN0aXZl
Vmlld1dpbmRvdzsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIFdlYlBhZ2VQcm94eSBjb25z
dHJ1Y3RvciBiZWZvcmUgd2UgaGF2ZSBhIFdlYlZpZXdJbXBsLgotICAgIC8vIE9uY2UgV2ViVmll
d0ltcGwgYW5kIFBhZ2VDbGllbnQgbWVyZ2UsIHRoaXMgd29uJ3QgYmUgYSBwcm9ibGVtLgotICAg
IGlmICghbV9pbXBsKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICByZXR1cm4gbV9pbXBsLT5p
c0ZvY3VzZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6bWFrZUZpcnN0UmVzcG9uZGVy
KCkKLXsKLSAgICBpZiAobV9zaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgIFtbbV92aWV3IHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVy
Om1fdmlld107Ci19Ci0gICAgCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkK
LXsKLSAgICBOU1ZpZXcgKmFjdGl2ZVZpZXcgPSB0aGlzLT5hY3RpdmVWaWV3KCk7Ci0gICAgTlNX
aW5kb3cgKmFjdGl2ZVZpZXdXaW5kb3cgPSBhY3RpdmVXaW5kb3coKTsKLQotICAgIGlmICghYWN0
aXZlVmlld1dpbmRvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFhY3RpdmVW
aWV3V2luZG93LmlzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGFj
dGl2ZVZpZXcuaXNIaWRkZW5Pckhhc0hpZGRlbkFuY2VzdG9yKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAobV9pbXBsLT53aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKCkg
JiYgKGFjdGl2ZVZpZXdXaW5kb3cub2NjbHVzaW9uU3RhdGUgJiBOU1dpbmRvd09jY2x1c2lvblN0
YXRlVmlzaWJsZSkgIT0gTlNXaW5kb3dPY2NsdXNpb25TdGF0ZVZpc2libGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBs
Ojppc1ZpZXdWaXNpYmxlT3JPY2NsdWRlZCgpCi17Ci0gICAgcmV0dXJuIGFjdGl2ZVdpbmRvdygp
LmlzVmlzaWJsZTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQot
ewotICAgIHJldHVybiBhY3RpdmVXaW5kb3coKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6
aXNWaXN1YWxseUlkbGUoKQotewotICAgIHJldHVybiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpz
aW5nbGV0b24oKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZCgpIHx8
ICFpc1ZpZXdWaXNpYmxlKCk7Ci19Ci0KLUxheWVySG9zdGluZ01vZGUgUGFnZUNsaWVudEltcGw6
OnZpZXdMYXllckhvc3RpbmdNb2RlKCkKLXsKLSNpZiBIQVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVS
X0hPU1RJTkcpCi0gICAgaWYgKFthY3RpdmVXaW5kb3coKSBfaG9zdHNMYXllcnNJbldpbmRvd1Nl
cnZlcl0pCi0gICAgICAgIHJldHVybiBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gTGF5ZXJIb3N0aW5nTW9kZTo6SW5Qcm9jZXNzOwotfQotCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjp2aWV3V2lsbE1vdmVUb0Fub3RoZXJXaW5kb3coKQotewotICAgIGNs
ZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci19Ci0KLUNvbG9yU3BhY2VEYXRhIFBhZ2VDbGllbnRJbXBs
Ojpjb2xvclNwYWNlKCkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5jb2xvclNwYWNlKCk7Ci19Ci0K
LXZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRFeGl0KCkKLXsKLSAgICBtX2ltcGwtPnBy
b2Nlc3NEaWRFeGl0KCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQot
ewotICAgIG1faW1wbC0+cGFnZUNsb3NlZCgpOwotI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQotICAgIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5jbGVhcigpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAg
bV9pbXBsLT5kaWRSZWxhdW5jaFByb2Nlc3MoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
cHJlZmVyZW5jZXNEaWRDaGFuZ2UoKQotewotICAgIG1faW1wbC0+cHJlZmVyZW5jZXNEaWRDaGFu
Z2UoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApCi17Ci0gICAgbV9pbXBs
LT50b29sVGlwQ2hhbmdlZChvbGRUb29sVGlwLCBuZXdUb29sVGlwKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikKLXsKLSAgICBtX2ltcGwtPnVwZGF0
ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMoKTsKLSAgICBtX2ltcGwtPmRpc21pc3NDb250
ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NXaXRoQW5pbWF0aW9uKHRydWUpOwotfQotCi12b2lkIFBh
Z2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRl
cihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIGRhdGFSZWZlcmVuY2UpCi17Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKLXsKLSAgICBBU1NFUlRfQVJH
KGRvd25sb2FkLCBkb3dubG9hZCk7Ci0jaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBBU1NFUlQoW2Rv
d25sb2FkLT53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dLRG93bmxvYWQgY2xhc3NdXSk7Ci0g
ICAgW3N0YXRpY19jYXN0PF9XS0Rvd25sb2FkICo+KGRvd25sb2FkLT53cmFwcGVyKCkpIHNldE9y
aWdpbmF0aW5nV2ViVmlldzptX3dlYlZpZXddOwotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1Np
emUpCi17Ci0gICAgbV9pbXBsLT5kaWRDaGFuZ2VDb250ZW50U2l6ZShuZXdTaXplKTsKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vy
c29yKQotewotICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIHNoYXJlIHRoaXMgY29kZSB3
aXRoIFdlYktpdDEncyBXZWJDaHJvbWVDbGllbnQuCi0KLSAgICAvLyBUaGUgV2ViIHByb2Nlc3Mg
bWF5IGhhdmUgYXNrZWQgdG8gY2hhbmdlIHRoZSBjdXJzb3Igd2hlbiB0aGUgdmlldyB3YXMgaW4g
YW4gYWN0aXZlIHdpbmRvdywgYnV0Ci0gICAgLy8gaWYgaXQgaXMgbm8gbG9uZ2VyIGluIGEgd2lu
ZG93IG9yIHRoZSB3aW5kb3cgaXMgbm90IGFjdGl2ZSwgdGhlbiB0aGUgY3Vyc29yIHNob3VsZCBu
b3QgY2hhbmdlLgotICAgIGlmICghaXNWaWV3V2luZG93QWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChbTlNBcHAgX2N1cnNvclJlY3RDdXJzb3JdKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNXaW5kb3cgKndp
bmRvdyA9IFttX3ZpZXcgd2luZG93XTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKFt3aW5kb3cgd2luZG93TnVtYmVyXSAhPSBbTlNXaW5kb3cgd2luZG93TnVt
YmVyQXRQb2ludDpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXSBiZWxvd1dpbmRvd1dpdGhXaW5kb3dO
dW1iZXI6MF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TQ3Vyc29yICpwbGF0Zm9ybUN1cnNv
ciA9IGN1cnNvci5wbGF0Zm9ybUN1cnNvcigpOwotICAgIGlmIChbTlNDdXJzb3IgY3VycmVudEN1
cnNvcl0gPT0gcGxhdGZvcm1DdXJzb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtwbGF0Zm9y
bUN1cnNvciBzZXRdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCi17Ci0gICAgW05TQ3Vy
c29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpoaWRkZW5VbnRpbE1vdXNlTW92ZXNdOwotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3Qg
V2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJikKLXsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6cmVnaXN0ZXJFZGl0Q29tbWFuZChSZWY8V2ViRWRpdENvbW1hbmRQcm94eT4mJiBjb21tYW5k
LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBtX2ltcGwtPnJl
Z2lzdGVyRWRpdENvbW1hbmQoV1RGTW92ZShjb21tYW5kKSwgdW5kb09yUmVkbyk7Ci19Ci0KLSNp
ZiBVU0UoSU5TRVJUSU9OX1VORE9fR1JPVVBJTkcpCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdp
c3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpCi17Ci0gICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRv
R3JvdXBpbmdXaXRoVW5kb01hbmFnZXIoW21fdmlldyB1bmRvTWFuYWdlcl0pOwotfQotI2VuZGlm
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKLXsKLSAgICBt
X2ltcGwtPmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6
OmNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAg
IHJldHVybiAodW5kb09yUmVkbyA9PSBXZWJQYWdlUHJveHk6OlVuZG8pID8gW1ttX3ZpZXcgdW5k
b01hbmFnZXJdIGNhblVuZG9dIDogW1ttX3ZpZXcgdW5kb01hbmFnZXJdIGNhblJlZG9dOwotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRv
T3JSZWRvIHVuZG9PclJlZG8pCi17Ci0gICAgcmV0dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQ
cm94eTo6VW5kbykgPyBbW21fdmlldyB1bmRvTWFuYWdlcl0gdW5kb10gOiBbW21fdmlldyB1bmRv
TWFuYWdlcl0gcmVkb107Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZShj
b25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIFJlZjxTaGFyZWFibGVCaXRtYXA+JiYgZHJh
Z0ltYWdlLCBEcmFnU291cmNlQWN0aW9uIGFjdGlvbikKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gZHJhZ0NHSW1hZ2UgPSBkcmFnSW1hZ2UtPm1ha2VDR0ltYWdlKCk7Ci0gICAgUmV0YWlu
UHRyPE5TSW1hZ2U+IGRyYWdOU0ltYWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRX
aXRoQ0dJbWFnZTpkcmFnQ0dJbWFnZS5nZXQoKSBzaXplOmRyYWdJbWFnZS0+c2l6ZSgpXSk7Ci0g
ICAgSW50U2l6ZSBzaXplKFtkcmFnTlNJbWFnZSBzaXplXSk7Ci0gICAgc2l6ZS5zY2FsZSgxLjAg
LyBtX2ltcGwtPnBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBbZHJhZ05TSW1hZ2Ug
c2V0U2l6ZTpzaXplXTsKLQotICAgIG1faW1wbC0+ZHJhZ0ltYWdlRm9yVmlldyhtX3ZpZXcsIGRy
YWdOU0ltYWdlLmdldCgpLCBjbGllbnRQb3NpdGlvbiwgYWN0aW9uID09IERyYWdTb3VyY2VBY3Rp
b25MaW5rKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhRm9ySW1h
Z2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbWFn
ZUJ1ZmZlciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24s
IGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZp
c2libGVVUkwsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYXJjaGl2ZUJ1ZmZlcikKLXsKLSAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgIGltYWdlLT5z
ZXREYXRhKFdURk1vdmUoaW1hZ2VCdWZmZXIpLCB0cnVlKTsKLSAgICBtX2ltcGwtPnNldFByb21p
c2VkRGF0YUZvckltYWdlKGltYWdlLmdldCgpLCBmaWxlbmFtZSwgZXh0ZW5zaW9uLCB0aXRsZSwg
dXJsLCB2aXNpYmxlVVJMLCBhcmNoaXZlQnVmZmVyLmdldCgpLCBwYXN0ZWJvYXJkTmFtZSk7Ci19
Ci0KLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVS
TCkKLXsKLSAgICBtX2ltcGwtPnNldFByb21pc2VkRGF0YUZvckF0dGFjaG1lbnQoZmlsZW5hbWUs
IGV4dGVuc2lvbiwgdGl0bGUsIHVybCwgdmlzaWJsZVVSTCwgcGFzdGVib2FyZE5hbWUpOwotfQot
I2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKQot
ewotICAgIG1faW1wbC0+dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSgpOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpyZXNldFNlY3VyZUlucHV0U3RhdGUoKQotewotICAgIG1faW1wbC0+cmVzZXRT
ZWN1cmVJbnB1dFN0YXRlKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6Om5vdGlmeUlucHV0
Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKQotewotICAgIG1faW1wbC0+bm90aWZ5
SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpOwotfQotCi1GbG9hdFJlY3Qg
UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICByZXR1cm4gdG9EZXZpY2VTcGFjZShyZWN0LCBbbV92aWV3IHdpbmRvd10pOwot
fQotCi1GbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHRvVXNlclNwYWNlKHJlY3QsIFttX3ZpZXcg
d2luZG93XSk7Ci19Ci0gICAKLUludFBvaW50IFBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICBOU1BvaW50IHdpbmRvd0Nvb3JkID0gW1ttX3ZpZXcgd2luZG93XSBjb252
ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAg
ICByZXR1cm4gSW50UG9pbnQoW21fdmlldyBjb252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZp
ZXc6bmlsXSk7Ci19Ci0gICAgCi1JbnRSZWN0IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvU2Ny
ZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgTlNSZWN0IHRlbXBSZWN0ID0gcmVjdDsK
LSAgICB0ZW1wUmVjdCA9IFttX3ZpZXcgY29udmVydFJlY3Q6dGVtcFJlY3QgdG9WaWV3Om5pbF07
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgdGVtcFJlY3Qub3JpZ2lu
ID0gW1ttX3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOnRlbXBSZWN0Lm9yaWdpbl07
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QodGVtcFJlY3QpOwotfQotCi1JbnRSZWN0IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvV2lu
ZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgTlNSZWN0IHRlbXBSZWN0
ID0gcmVjdDsKLSAgICB0ZW1wUmVjdCA9IFttX3ZpZXcgY29udmVydFJlY3Q6dGVtcFJlY3QgdG9W
aWV3Om5pbF07Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodGVtcFJlY3QpOwotfQotCi12
b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmIGV2ZW50LCBib29sIGV2ZW50V2FzSGFuZGxlZCkKLXsKLSAgICBtX2ltcGwtPmRv
bmVXaXRoS2V5RXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZlbnRXYXNIYW5kbGVkKTsKLX0K
LQotUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBN
ZW51UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQotewotICAgIHJldHVybiBXZWJQb3B1cE1lbnVQ
cm94eU1hYzo6Y3JlYXRlKG1fdmlldywgcGFnZSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ09OVEVYVF9N
RU5VUykKLVJlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRl
Q29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IENvbnRleHRNZW51Q29u
dGV4dERhdGEmIGNvbnRleHQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKLXsKLSAgICByZXR1
cm4gV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Y3JlYXRlKG1fdmlldywgcGFnZSwgY29udGV4dCwg
dXNlckRhdGEpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKLVJl
ZlB0cjxXZWJDb2xvclBpY2tlcj4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbG9yUGlja2VyKFdl
YlBhZ2VQcm94eSogcGFnZSwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIFdlYkNvbG9yUGlja2Vy
TWFjOjpjcmVhdGUocGFnZSwgaW5pdGlhbENvbG9yLCByZWN0LCBtX3ZpZXcpOwotfQotI2VuZGlm
Ci0KLVJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlVmFsaWRhdGlv
bkJ1YmJsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFZhbGlkYXRpb25CdWJibGU6OlNl
dHRpbmdzJiBzZXR0aW5ncykKLXsKLSAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRl
KG1fdmlldywgbWVzc2FnZSwgc2V0dGluZ3MpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpz
ZXRUZXh0SW5kaWNhdG9yKFJlZjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUgbGlmZXRpbWUpCi17Ci0gICAgbV9pbXBsLT5z
ZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRpY2F0b3IuZ2V0KCksIGxpZmV0aW1lKTsKLX0KLQotdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24gZGlzbWlzc2FsQW5pbWF0aW9uKQotewotICAgIG1f
aW1wbC0+Y2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbihkaXNtaXNzYWxBbmltYXRpb24p
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJv
Z3Jlc3MoZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgbV9pbXBsLT5zZXRUZXh0SW5kaWNhdG9yQW5p
bWF0aW9uUHJvZ3Jlc3MocHJvZ3Jlc3MpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjphY2Nl
c3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhKQotewotICAgIG1faW1wbC0+c2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbihb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXSk7Ci19
Ci0gICAgCi12b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNT
RVJUKCFsYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSk7Ci0KLSAgICBDQUxheWVyICpyZW5kZXJM
YXllciA9IFdLTWFrZVJlbmRlckxheWVyKGxheWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKLSAg
ICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIocmVuZGVyTGF5ZXIp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKQotewotICAgIG1faW1wbC0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihu
aWwpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAg
IEFTU0VSVCghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpOwotCi0gICAgQ0FMYXllciAqcmVu
ZGVyTGF5ZXIgPSBXS01ha2VSZW5kZXJMYXllcihsYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCk7
Ci0gICAgbV9pbXBsLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJlbmRlckxh
eWVyKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z1Jvb3RMYXllcihDQUxheWVyICpyb290TGF5ZXIpCi17Ci0gICAgbV9pbXBsLT5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJvb3RMYXllcik7Ci19Ci0KLUNBTGF5ZXIgKlBhZ2VD
bGllbnRJbXBsOjphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9pbXBsLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCk7Ci19Ci0K
LVJlZlB0cjxWaWV3U25hcHNob3Q+IFBhZ2VDbGllbnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KCkK
LXsKLSAgICByZXR1cm4gbV9pbXBsLT50YWtlVmlld1NuYXBzaG90KCk7Ci19Ci0KLXZvaWQgUGFn
ZUNsaWVudEltcGw6OnNlbGVjdGlvbkRpZENoYW5nZSgpCi17Ci0gICAgbV9pbXBsLT5zZWxlY3Rp
b25EaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05v
dEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi17Ci0g
ICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIgPSBtX2ltcGwtPmdlc3R1cmVDb250cm9sbGVy
KCkpCi0gICAgICAgIGdlc3R1cmVDb250cm9sbGVyLT53aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5
V2ViQ29yZShldmVudC5uYXRpdmVFdmVudCgpKTsKLX0KLQotI2lmIEVOQUJMRShNQUNfR0VTVFVS
RV9FVkVOVFMpCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpnZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVk
QnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYkdlc3R1cmVFdmVudCYgZXZlbnQpCi17Ci0gICAgbV9p
bXBsLT5nZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGV2ZW50Lm5hdGl2ZUV2ZW50
KCkpOwotfQotI2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnBsdWdpbkZvY3VzT3JXaW5k
b3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIs
IGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykKLXsKLSAgICBtX2ltcGwtPnBs
dWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQocGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNG
b2N1cywgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBw
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpCi17Ci0gICAgbV9pbXBsLT5zZXRQbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGVBbmRJZGVudGlmaWVyKHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSwgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJ
bmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvKQotewotICAgIG1faW1wbC0+cHJlcGFyZUZvckRpY3Rp
b25hcnlMb29rdXAoKTsKLQotICAgIERpY3Rpb25hcnlMb29rdXA6OnNob3dQb3B1cChkaWN0aW9u
YXJ5UG9wdXBJbmZvLCBtX3ZpZXcsIFt0aGlzXShUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9y
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLCBUZXh0
SW5kaWNhdG9yV2luZG93TGlmZXRpbWU6OlBlcm1hbmVudCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwoQWx0ZXJuYXRpdmVUZXh0VHlwZSB0
eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQotewot
I2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICBpZiAoIWlzVmlld1Zpc2libGUoKSB8
fCAhaXNWaWV3SW5XaW5kb3coKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBh
bmVsLnNob3cobV92aWV3LCAqbV9pbXBsLCB0eXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNl
bWVudFN0cmluZ3MpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24p
Ci17Ci0jaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIG1fY29ycmVjdGlvblBhbmVs
LmRpc21pc3MocmVhc29uKTsKLSNlbmRpZgotfQotCi1TdHJpbmcgUGFnZUNsaWVudEltcGw6OmRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRl
cm5hdGl2ZVRleHQgcmVhc29uKQotewotI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAg
ICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWwuZGlzbWlzcyhyZWFzb24pOwotI2Vsc2UKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25S
ZXNwb25zZSB0b0NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlIHJlc3Bv
bnNlKQotewotICAgIHN3aXRjaCAocmVzcG9uc2UpIHsKLSAgICBjYXNlIFdlYkNvcmU6OkF1dG9j
b3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkOgotICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9u
UmVzcG9uc2VSZXZlcnRlZDsKLSAgICBjYXNlIFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9u
c2U6OkVkaXRlZDoKLSAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvblJlc3BvbnNlRWRpdGVkOwot
ICAgIGNhc2UgV2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQ6Ci0gICAg
ICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNwb25zZUFjY2VwdGVkOwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNwb25zZUFjY2Vw
dGVkOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCi17Ci0gICAgQ29ycmVj
dGlvblBhbmVsOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKG1faW1wbC0+c3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKSwgdG9Db3JyZWN0aW9uUmVzcG9uc2UocmVzcG9uc2UpLCByZXBsYWNl
ZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpy
ZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKFNjcm9sbGJhclN0eWxlIG5ld1N0eWxl
KQotewotICAgIC8vIE5vdyByZS1jcmVhdGUgYSB0cmFja2luZyBhcmVhIHdpdGggdGhlIGFwcHJv
cHJpYXRlIG9wdGlvbnMgZ2l2ZW4gdGhlIG5ldyBzY3JvbGxiYXIgc3R5bGUKLSAgICBOU1RyYWNr
aW5nQXJlYU9wdGlvbnMgb3B0aW9ucyA9IE5TVHJhY2tpbmdNb3VzZU1vdmVkIHwgTlNUcmFja2lu
Z01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdJblZpc2libGVSZWN0IHwgTlNUcmFj
a2luZ0N1cnNvclVwZGF0ZTsKLSAgICBpZiAobmV3U3R5bGUgPT0gU2Nyb2xsYmFyU3R5bGU6OkFs
d2F5c1Zpc2libGUpCi0gICAgICAgIG9wdGlvbnMgfD0gTlNUcmFja2luZ0FjdGl2ZUFsd2F5czsK
LSAgICBlbHNlCi0gICAgICAgIG9wdGlvbnMgfD0gTlNUcmFja2luZ0FjdGl2ZUluS2V5V2luZG93
OwotCi0gICAgUmV0YWluUHRyPE5TVHJhY2tpbmdBcmVhPiB0cmFja2luZ0FyZWEgPSBhZG9wdE5T
KFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbbV92aWV3IGZyYW1lXSBvcHRp
b25zOm9wdGlvbnMgb3duZXI6bV92aWV3IHVzZXJJbmZvOm5pbF0pOwotICAgIG1faW1wbC0+c2V0
UHJpbWFyeVRyYWNraW5nQXJlYSh0cmFja2luZ0FyZWEuZ2V0KCkpOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjppbnRyaW5zaWNDb250ZW50U2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBp
bnRyaW5zaWNDb250ZW50U2l6ZSkKLXsKLSAgICBtX2ltcGwtPnNldEludHJpbnNpY0NvbnRlbnRT
aXplKGludHJpbnNpY0NvbnRlbnRTaXplKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhl
Y3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykK
LXsKLSAgICByZXR1cm4gbV9pbXBsLT5leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcihOU1Nl
bGVjdG9yRnJvbVN0cmluZyhzZWxlY3RvclN0cmluZykpOwotfQotCi0jaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCi11aW50NjRfdCBQYWdlQ2xpZW50SW1wbDo6YWRkRGljdGF0aW9uQWx0
ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2
ZXMpCi17Ci0gICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5hZGRBbHRl
cm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3Zl
RGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCi17Ci0gICAg
bV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPnJlbW92ZUFsdGVybmF0aXZlcyhkaWN0YXRp
b25Db250ZXh0KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0RpY3RhdGlvbkFsdGVy
bmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRU
ZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQotewotICAgIGlmICghaXNWaWV3VmlzaWJs
ZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9hbHRlcm5h
dGl2ZVRleHRVSUNvbnRyb2xsZXItPnNob3dBbHRlcm5hdGl2ZXMobV92aWV3LCBib3VuZGluZ0Jv
eE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25Db250ZXh0LCBeKE5TU3RyaW5nICphY2NlcHRlZEFs
dGVybmF0aXZlKSB7Ci0gICAgICAgIG1faW1wbC0+aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRl
eHQoYWNjZXB0ZWRBbHRlcm5hdGl2ZSk7Ci0gICAgfSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBh
Z2VDbGllbnRJbXBsOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29u
dGV4dCkKLXsKLSAgICByZXR1cm4gbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPmFsdGVy
bmF0aXZlc0ZvckNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGJvb2wgZWRpdGFibGVF
bGVtZW50SXNGb2N1c2VkKQotewotICAgIG1faW1wbC0+c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1
c2VkKGVkaXRhYmxlRWxlbWVudElzRm9jdXNlZCk7Ci19Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCi0KLVdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIFBhZ2VDbGllbnRJbXBs
OjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkKLXsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLS8vIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQKLQotdm9pZCBQYWdlQ2xpZW50
SW1wbDo6Y2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpCi17Ci0gICAgbV9pbXBsLT5jbG9zZUZ1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmlzRnVs
bFNjcmVlbigpCi17Ci0gICAgaWYgKCFtX2ltcGwtPmhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2ltcGwtPmZ1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKCkuaXNGdWxsU2NyZWVuOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjplbnRlckZ1bGxTY3JlZW4oKQotewotICAgIFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyKCkgZW50ZXJGdWxsU2NyZWVuOm5pbF07Ci19Ci0KLXZvaWQgUGFnZUNsaWVu
dEltcGw6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAgICBbbV9pbXBsLT5mdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcigpIGV4aXRGdWxsU2NyZWVuXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgSW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBJ
bnRSZWN0JiBmaW5hbEZyYW1lKQotewotICAgIFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyKCkgYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxGcmFt
ZSBmaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwotICAgIG1faW1wbC0+dXBkYXRlU3VwcG9ydHNBcmJp
dHJhcnlMYXlvdXRNb2RlcygpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdhbkV4aXRG
dWxsU2NyZWVuKGNvbnN0IEludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgZmlu
YWxGcmFtZSkKLXsKLSAgICBbbV9pbXBsLT5mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpIGJl
Z2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxGcmFtZSBmaW5hbEZyYW1l
OmZpbmFsRnJhbWVdOwotICAgIG1faW1wbC0+dXBkYXRlU3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRN
b2RlcygpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotCi12b2lkIFBh
Z2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCkKLXsKLSAgICBtX2ltcGwt
PmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NXaXRoQW5pbWF0aW9uKHRydWUpOwot
Ci0jaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0
aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVy
ZURpZEJlZ2luKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVt
JiBpdGVtKQotewotI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAg
ICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdh
dGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTSh3aWxsTmF2aWdhdGUpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSNlbmRpZgot
fQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdp
bGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKLXsKLSNpZiBXS19BUElf
RU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJv
bVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxO
YXZpZ2F0ZSwgaXRlbSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwot
ICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCgpCi17Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6
OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRl
bSkKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5h
dmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLndpbGxSZWNvcmRO
YXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsK
LSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2Vz
dHVyZVNuYXBzaG90KCkKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcp
Ci0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2Up
Lm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZy
YW1lKCkKLXsKLSAgICBpZiAoYXV0byBnZXN0dXJlQ29udHJvbGxlciA9IG1faW1wbC0+Z2VzdHVy
ZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXItPmRpZEZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvck1haW5GcmFtZSgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpkaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1lKCkKLXsKLSAgICBpZiAoYXV0byBnZXN0dXJlQ29u
dHJvbGxlciA9IG1faW1wbC0+Z2VzdHVyZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgZ2VzdHVyZUNv
bnRyb2xsZXItPmRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUoKQotewotICAgIGlmIChhdXRvIGdlc3R1
cmVDb250cm9sbGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJvbGxlcigpKQotICAgICAgICBnZXN0
dXJlQ29udHJvbGxlci0+ZGlkRmFpbExvYWRGb3JNYWluRnJhbWUoKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZShTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBlKQotewotICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9s
bGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJvbGxlcigpKQotICAgICAgICBnZXN0dXJlQ29udHJv
bGxlci0+ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvck1haW5GcmFtZSh0eXBlKTsKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIFttX3dl
YlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZTpuc1N0cmluZ0Zyb21XZWJD
b3JlU3RyaW5nKGlkZW50aWZpZXIpXTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpoYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm9SZXNwb25zZShib29sIGhhc0FjdGl2
ZVNlc3Npb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVs
YXBzZWRUaW1lKQotewotI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgW21fd2ViVmlldyBfaGFuZGxl
QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvUmVzcG9uc2U6aGFzQWN0aXZlU2Vzc2lvbiB0aXRs
ZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKHRpdGxlKSBkdXJhdGlvbjpkdXJhdGlvbiBlbGFw
c2VkVGltZTplbGFwc2VkVGltZV07Ci0jZW5kaWYKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkQ2hhbmdlQmFja2dyb3VuZENvbG9yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1DR1JlY3QgUGFnZUNsaWVudEltcGw6OmJvdW5kc09mTGF5ZXJJbkxheWVyQmFja2VkV2luZG93
Q29vcmRpbmF0ZXMoQ0FMYXllciAqbGF5ZXIpIGNvbnN0Ci17Ci0gICAgQ0FMYXllciAqd2luZG93
Q29udGVudExheWVyID0gc3RhdGljX2Nhc3Q8TlNWaWV3ICo+KG1fdmlldy53aW5kb3cuY29udGVu
dFZpZXcpLmxheWVyOwotICAgIEFTU0VSVCh3aW5kb3dDb250ZW50TGF5ZXIpOwotCi0gICAgcmV0
dXJuIFt3aW5kb3dDb250ZW50TGF5ZXIgY29udmVydFJlY3Q6bGF5ZXIuYm91bmRzIGZyb21MYXll
cjpsYXllcl07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1bHQsIGJvb2wgY29u
dGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQotewotICAgIG1faW1w
bC0+ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QocmVzdWx0LCBjb250ZW50UHJldmVu
dHNEZWZhdWx0LCB1c2VyRGF0YSk7Ci19Ci0KLXZvaWQqIFBhZ2VDbGllbnRJbXBsOjppbW1lZGlh
dGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpI
aXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0LCB1aW50NjRfdCB0eXBlLCBSZWZQdHI8QVBJOjpP
YmplY3Q+IHVzZXJEYXRhKQotewotICAgIHJldHVybiBtX2ltcGwtPmltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHQuZ2V0KCksIHR5
cGUsIHVzZXJEYXRhLmdldCgpKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkSGFuZGxl
QWNjZXB0ZWRDYW5kaWRhdGUoKQotewotICAgIG1faW1wbC0+ZGlkSGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGUoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dmlkZW9Db250cm9sc01hbmFnZXJE
aWRDaGFuZ2UoKQotewotICAgIG1faW1wbC0+dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2Uo
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1BsYXRmb3JtQ29udGV4dE1lbnUoTlNN
ZW51ICptZW51LCBJbnRQb2ludCBsb2NhdGlvbikKLXsKLSAgICBbbWVudSBwb3BVcE1lbnVQb3Np
dGlvbmluZ0l0ZW06bmlsIGF0TG9jYXRpb246bG9jYXRpb24gaW5WaWV3Om1fdmlld107Ci19Ci0K
LSNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotV2ViQ29yZTo6V2ViTWVkaWFT
ZXNzaW9uTWFuYWdlciYgUGFnZUNsaWVudEltcGw6Om1lZGlhU2Vzc2lvbk1hbmFnZXIoKQotewot
ICAgIHJldHVybiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWQoKTsKLX0KLSNlbmRpZgot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWZWaWV3KCkKLXsKLSAgICBDRlJldGFpbihtX3ZpZXcp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkZXJlZlZpZXcoKQotewotICAgIENGUmVsZWFz
ZShtX3ZpZXcpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydFdpbmRvd0RyYWcoKQot
ewotICAgIG1faW1wbC0+c3RhcnRXaW5kb3dEcmFnKCk7Ci19Ci0KLU5TV2luZG93ICpQYWdlQ2xp
ZW50SW1wbDo6cGxhdGZvcm1XaW5kb3coKQotewotICAgIHJldHVybiBtX2ltcGwtPndpbmRvdygp
OwotfQotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLU5TVmlldyAqUGFnZUNsaWVudEltcGw6Omluc3Bl
Y3RvckF0dGFjaG1lbnRWaWV3KCkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5pbnNwZWN0b3JBdHRh
Y2htZW50VmlldygpOwotfQotCi1fV0tSZW1vdGVPYmplY3RSZWdpc3RyeSAqUGFnZUNsaWVudElt
cGw6OnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5yZW1vdGVP
YmplY3RSZWdpc3RyeSgpOwotfQotI2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJl
c3RvcmVTY3JvbGxQb3NpdGlvbigpCi17Ci0gICAgbV9pbXBsLT5kaWRSZXN0b3JlU2Nyb2xsUG9z
aXRpb24oKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6d2luZG93SXNGcm9udFdpbmRvd1Vu
ZGVyTW91c2UoY29uc3QgTmF0aXZlV2ViTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgcmV0dXJu
IG1faW1wbC0+d2luZG93SXNGcm9udFdpbmRvd1VuZGVyTW91c2UoZXZlbnQubmF0aXZlRXZlbnQo
KSk7Ci19Ci0KLVdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gUGFnZUNsaWVu
dEltcGw6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKQotewotICAgIGlmICghbV92aWV3
KQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6
TFRSOwotICAgIHJldHVybiAobV92aWV3LnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPT0g
TlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQpID8gV2ViQ29yZTo6VXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSIDogV2ViQ29yZTo6VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbjo6UlRMOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oCShyZXZpc2lvbiAyMjE0ODkpCShmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbC5oOjIyMTQ4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMp
CisKKyNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7CitAY2xhc3MgV0tW
aWV3OworQGNsYXNzIFdLV2ViVmlldzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQWx0
ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViVmlld0ltcGw7CisKK2NsYXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDogcHVibGljIFBh
Z2VDbGllbnQKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLCBwdWJsaWMgV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAorI2VuZGlmCisgICAgeworcHVibGljOgorICAgIFBh
Z2VDbGllbnRJbXBsKE5TVmlldyAqLCBXS1dlYlZpZXcgKik7CisgICAgdmlydHVhbCB+UGFnZUNs
aWVudEltcGwoKTsKKworICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IFdlYlZpZXdJbXBsIHNob3Vs
ZCBiZWNvbWUgdGhlIFBhZ2VDbGllbnQuCisgICAgdm9pZCBzZXRJbXBsKFdlYlZpZXdJbXBsJiBp
bXBsKSB7IG1faW1wbCA9ICZpbXBsOyB9CisKKyAgICB2b2lkIHZpZXdXaWxsTW92ZVRvQW5vdGhl
cldpbmRvdygpOworCitwcml2YXRlOgorICAgIC8vIFBhZ2VDbGllbnQKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdpb24mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxPcmlnaW4s
IGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgdmlld1Njcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIHZpZXdTaXplKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKSBv
dmVycmlkZTsKKyAgICBib29sIGlzVmlld0ZvY3VzZWQoKSBvdmVycmlkZTsKKyAgICBib29sIGlz
Vmlld1Zpc2libGUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmlld1Zpc2libGVPck9jY2x1ZGVk
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZpZXdJbldpbmRvdygpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWaXN1YWxseUlkbGUoKSBvdmVycmlkZTsKKyAgICBMYXllckhvc3RpbmdNb2RlIHZpZXdM
YXllckhvc3RpbmdNb2RlKCkgb3ZlcnJpZGU7CisgICAgQ29sb3JTcGFjZURhdGEgY29sb3JTcGFj
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXll
cihMYXllck9yVmlldyAqKSBvdmVycmlkZTsKKyAgICBMYXllck9yVmlldyAqYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBwcm9jZXNz
RGlkRXhpdCgpIG92ZXJyaWRlOworICAgIHZvaWQgcGFnZUNsb3NlZCgpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcmVmZXJlbmNl
c0RpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7CisgICAg
dm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmll
d3BvcnRBdHRyaWJ1dGVzJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpc1BsYXlpbmdBdWRpb1dpbGxD
aGFuZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkgZmluYWw7
CisKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUmVmPFdlYkVkaXRDb21tYW5kUHJveHk+
JiYsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckFs
bEVkaXRDb21tYW5kcygpIG92ZXJyaWRlOworICAgIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVBy
b3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKKyAgICB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOworICAgIGJvb2wgZXhlY3V0ZVNhdmVkQ29t
bWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBS
ZWY8U2hhcmVhYmxlQml0bWFwPiYmIGRyYWdJbWFnZSwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
bikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGltYWdlQnVm
ZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29u
c3QgU3RyaW5nJiB0aXRsZSwKKyAgICAgICAgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdmlzaWJsZVVybCwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBhcmNoaXZlQnVm
ZmVyKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIHZvaWQg
c2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVy
bCkgb3ZlcnJpZGU7CisjZW5kaWYKKyAgICB2b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJy
aWRlOworICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFj
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRQ
b2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7
CisgICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBvdmVycmlkZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgV2ViQ29yZTo6SW50UmVj
dCByb290Vmlld1RvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFj
Y2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAw
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNj
cmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworI2VuZGlmCisKKyAgICBDR1JlY3Qg
Ym91bmRzT2ZMYXllckluTGF5ZXJCYWNrZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVyICpsYXll
cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKKwor
ICAgIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFn
ZVByb3h5Jikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAgUmVmUHRy
PFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5
JiwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikgb3ZlcnJp
ZGU7CisjZW5kaWYKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIFJlZlB0cjxX
ZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJy
aWRlOworI2VuZGlmCisKKyAgICBSZWY8V2ViQ29yZTo6VmFsaWRhdGlvbkJ1YmJsZT4gY3JlYXRl
VmFsaWRhdGlvbkJ1YmJsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdlYkNvcmU6OlZh
bGlkYXRpb25CdWJibGU6OlNldHRpbmdzJikgZmluYWw7CisKKyAgICB2b2lkIHNldFRleHRJbmRp
Y2F0b3IoUmVmPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
V2luZG93TGlmZXRpbWUpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdl
YkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxW
aWV3U25hcHNob3Q+IHRha2VWaWV3U25hcHNob3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdoZWVs
RXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBv
dmVycmlkZTsKKyNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQorICAgIHZvaWQgZ2VzdHVy
ZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJHZXN0dXJlRXZlbnQm
KSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rv
a2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxl
eFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1
cykgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWlu
dDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcigpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMo
Ym9vbCBzaG91bGRTdXBwcmVzcykgb3ZlcnJpZGUgeyBtX3Nob3VsZFN1cHByZXNzRmlyc3RSZXNw
b25kZXJDaGFuZ2VzID0gc2hvdWxkU3VwcHJlc3M7IH0KKworICAgIHZvaWQgZGlkUGVyZm9ybURp
Y3Rpb25hcnlMb29rdXAoY29uc3QgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVu
dFN0cmluZ3MpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSBvdmVycmlkZTsKKyAgICBT
dHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpIG92ZXJy
aWRlOworCisgICAgdm9pZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKFdlYkNv
cmU6OlNjcm9sbGJhclN0eWxlKSBvdmVycmlkZTsKKworICAgIHZvaWQgaW50cmluc2ljQ29udGVu
dFNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50cmluc2ljQ29udGVudFNp
emUpIG92ZXJyaWRlOworCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdWlu
dDY0X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRl
cm5hdGl2ZXM+Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93RGlj
dGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIG92ZXJyaWRlOworICAg
IFZlY3RvcjxTdHJpbmc+IGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25D
b250ZXh0KSBvdmVycmlkZTsKKyNlbmRpZgorICAgIHZvaWQgc2V0RWRpdGFibGVFbGVtZW50SXNG
b2N1c2VkKGJvb2wpIG92ZXJyaWRlOworCisjaWYgVVNFKElOU0VSVElPTl9VTkRPX0dST1VQSU5H
KQorICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlkZTsKKyNl
bmRpZgorCisgICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgorI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKKyAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2Ny
ZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3ZlcnJpZGU7CisjZW5kaWYKKworI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKKyAgICAvLyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50Cisg
ICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0Z1
bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGVudGVyRnVsbFNjcmVlbigpIG92ZXJyaWRl
OworICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGJlZ2FuRW50
ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBiZWdhbkV4
aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZv
aWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpIG92ZXJyaWRlOworICAgIHZvaWQgbmF2aWdh
dGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdp
bGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOworICAgIHZvaWQg
bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdpbGxSZWNvcmRO
YXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpIG92ZXJyaWRlOworCisg
ICAgTlNWaWV3ICphY3RpdmVWaWV3KCkgY29uc3Q7CisgICAgTlNXaW5kb3cgKmFjdGl2ZVdpbmRv
dygpIGNvbnN0OworCisgICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JN
YWluRnJhbWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1
bWVudE5hdmlnYXRpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRF
bGVtZW50SURSZXNwb25zZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRs
ZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mb1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZlU2Vzc2lv
biwgY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRp
bWUpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVz
dChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVs
dCwgQVBJOjpPYmplY3QqKSBvdmVycmlkZTsKKyAgICB2b2lkKiBpbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0
PiwgdWludDY0X3QsIFJlZlB0cjxBUEk6Ok9iamVjdD4pIG92ZXJyaWRlOworCisgICAgdm9pZCBk
aWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpIG92ZXJyaWRlOworCisgICAgdm9pZCB2aWRlb0Nv
bnRyb2xzTWFuYWdlckRpZENoYW5nZSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBzaG93UGxhdGZv
cm1Db250ZXh0TWVudShOU01lbnUgKiwgV2ViQ29yZTo6SW50UG9pbnQpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKSBvdmVycmlkZTsKKworICAgIHZvaWQg
c3RhcnRXaW5kb3dEcmFnKCkgb3ZlcnJpZGU7CisgICAgTlNXaW5kb3cgKnBsYXRmb3JtV2luZG93
KCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
IHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBvdmVycmlkZTsKKworI2lmIFdLX0FQSV9F
TkFCTEVECisgICAgTlNWaWV3ICppbnNwZWN0b3JBdHRhY2htZW50VmlldygpIG92ZXJyaWRlOwor
ICAgIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeSgpIG92ZXJy
aWRlOworI2VuZGlmCisKKyAgICBOU1ZpZXcgKm1fdmlldzsKKyAgICBXS1dlYlZpZXcgKm1fd2Vi
VmlldzsKKyAgICBXZWJWaWV3SW1wbCogbV9pbXBsIHsgbnVsbHB0ciB9OworI2lmIFVTRShBVVRP
Q09SUkVDVElPTl9QQU5FTCkKKyAgICBDb3JyZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9uUGFuZWw7
CisjZW5kaWYKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyPiBtX2FsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlcjsKKyNlbmRpZgorCisgICAgYm9vbCBtX3Nob3VsZFN1cHByZXNzRmly
c3RSZXNwb25kZXJDaGFuZ2VzIHsgZmFsc2UgfTsKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCisgICAgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgbWVkaWFT
ZXNzaW9uTWFuYWdlcigpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHJlZlZpZXcoKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRlcmVmVmlldygpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRS
ZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSBvdmVycmlkZTsKKyAgICBib29sIHdpbmRvd0lzRnJvbnRX
aW5kb3dVbmRlck1vdXNlKGNvbnN0IE5hdGl2ZVdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRp
dmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDIyMTQ4OSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTIgQEAKICNpZiBQTEFURk9STShNQUMpCiAKICNpbmNs
dWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiUGFnZUNsaWVudEltcGxDb2NvYS5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIEBjbGFzcyBXS0VkaXRvclVu
ZG9UYXJnZXRPYmpDOwogQGNsYXNzIFdLVmlldzsKLUBjbGFzcyBXS1dlYlZpZXc7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjsKQEAgLTQ0
LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlZpZXdJbXBsOwogCi1j
bGFzcyBQYWdlQ2xpZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBQYWdlQ2xpZW50CitjbGFzcyBQYWdl
Q2xpZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBQYWdlQ2xpZW50SW1wbENvY29hCiAjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQogICAgICwgcHVibGljIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlD
bGllbnQKICNlbmRpZgpAQCAtODksOCArODgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2hhbmdl
Vmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9XaWxsQ2hhbmdlKCkgZmluYWw7Ci0gICAg
dm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpIGZpbmFsOwogCiAgICAgdm9pZCByZWdpc3Rl
ckVkaXRDb21tYW5kKFJlZjxXZWJFZGl0Q29tbWFuZFByb3h5PiYmLCBXZWJQYWdlUHJveHk6OlVu
ZG9PclJlZG8pIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBvdmVy
cmlkZTsKQEAgLTEyMCw3ICsxMTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikgPSAwOwogI2VuZGlmCiAKLSAgICBDR1JlY3QgYm91bmRzT2ZMYXllckluTGF5ZXJCYWNr
ZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVyICpsYXllcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Q0dSZWN0IGJvdW5kc09mTGF5ZXJJbkxheWVyQmFja2VkV2luZG93Q29vcmRpbmF0ZXMoQ0FMYXll
ciAqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIG92ZXJyaWRlOwog
CkBAIC0yMzQsNyArMjMxLDYgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgTlNWaWV3ICptX3Zp
ZXc7Ci0gICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7CiAgICAgV2ViVmlld0ltcGwqIG1faW1wbCB7
IG51bGxwdHIgfTsKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiAgICAgQ29ycmVjdGlv
blBhbmVsIG1fY29ycmVjdGlvblBhbmVsOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjIxNDY3KQkoZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW06MjIxNDY3KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorCisjaWYgUExBVEZPUk0o
TUFDKQorCisjaW1wb3J0ICJBUElIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJDb2xvclNwYWNl
RGF0YS5oIgorI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgorI2ltcG9ydCAiRG93bmxvYWRQcm94
eS5oIgorI2ltcG9ydCAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiTmF0aXZlV2ViR2Vz
dHVyZUV2ZW50LmgiCisjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW1wb3J0
ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCisjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50Lmgi
CisjaW1wb3J0ICJOYXZpZ2F0aW9uU3RhdGUuaCIKKyNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5o
IgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisjaW1wb3J0ICJWaWV3U25hcHNo
b3RTdG9yZS5oIgorI2ltcG9ydCAiV0tBUElDYXN0LmgiCisjaW1wb3J0ICJXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCisjaW1wb3J0ICJXS1Zp
ZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldl
YkNvbG9yUGlja2VyTWFjLmgiCisjaW1wb3J0ICJXZWJDb250ZXh0TWVudVByb3h5TWFjLmgiCisj
aW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCisjaW1wb3J0ICJXZWJQb3B1cE1lbnVQcm94
eU1hYy5oIgorI2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKKyNpbXBvcnQgIldpbmRvd1NlcnZlckNv
bm5lY3Rpb24uaCIKKyNpbXBvcnQgIl9XS0Rvd25sb2FkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9X
S0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVGh1bWJuYWlsVmlldy5oIgor
I2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9JbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1RleHRJbmRpY2F0b3JXaW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dFVuZG9JbnNlcnRp
b25NYXJrdXBNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgorI2lt
cG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorI2luY2x1ZGUgPFdl
YkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oPgorI2VuZGlmCisKK0BpbnRlcmZhY2UgTlNB
cHBsaWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlvbkRldGFpbHMpCistIChOU0N1cnNvciAqKV9jdXJz
b3JSZWN0Q3Vyc29yOworQGVuZAorCisjaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NU
SU5HKQorQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQorLSAoQk9PTClf
aG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcjsKK0BlbmQKKyNlbmRpZgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoTlNWaWV3KiB2aWV3LCBXS1dlYlZp
ZXcgKndlYlZpZXcpCisgICAgOiBtX3ZpZXcodmlldykKKyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3
KQorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgICwgbV9hbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXI+KCkpCisjZW5kaWYKK3sKKyNpZiAhV0tfQVBJX0VOQUJMRUQKKyAgICBBU1NFUlRfVU5VU0VE
KG1fd2ViVmlldywgIW1fd2ViVmlldyk7CisjZW5kaWYKK30KKworUGFnZUNsaWVudEltcGw6On5Q
YWdlQ2xpZW50SW1wbCgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5
PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgcmV0dXJu
IG1faW1wbC0+Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpCit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlcXVlc3RT
Y3JvbGwoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBz
Y3JvbGxPcmlnaW4sIGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwpCit7Cit9CisKK1dlYkNvcmU6
OkZsb2F0UG9pbnQgUGFnZUNsaWVudEltcGw6OnZpZXdTY3JvbGxQb3NpdGlvbigpCit7CisgICAg
cmV0dXJuIHsgfTsKK30KKworSW50U2l6ZSBQYWdlQ2xpZW50SW1wbDo6dmlld1NpemUoKQorewor
ICAgIHJldHVybiBJbnRTaXplKFttX3ZpZXcgYm91bmRzXS5zaXplKTsKK30KKworTlNWaWV3ICpQ
YWdlQ2xpZW50SW1wbDo6YWN0aXZlVmlldygpIGNvbnN0Cit7CisjaWYgV0tfQVBJX0VOQUJMRUQK
KyAgICByZXR1cm4gKG1faW1wbCAmJiBtX2ltcGwtPnRodW1ibmFpbFZpZXcoKSkgPyAoTlNWaWV3
ICopbV9pbXBsLT50aHVtYm5haWxWaWV3KCkgOiBtX3ZpZXc7CisjZWxzZQorICAgIHJldHVybiBt
X3ZpZXc7CisjZW5kaWYKK30KKworTlNXaW5kb3cgKlBhZ2VDbGllbnRJbXBsOjphY3RpdmVXaW5k
b3coKSBjb25zdAoreworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgaWYgKG1faW1wbCAmJiBtX2lt
cGwtPnRodW1ibmFpbFZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+dGh1bWJuYWlsVmll
dygpLndpbmRvdzsKKyNlbmRpZgorICAgIGlmIChtX2ltcGwgJiYgbV9pbXBsLT50YXJnZXRXaW5k
b3dGb3JNb3ZlUHJlcGFyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+dGFyZ2V0V2lu
ZG93Rm9yTW92ZVByZXBhcmF0aW9uKCk7CisgICAgcmV0dXJuIG1fdmlldy53aW5kb3c7Cit9CisK
K2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCit7CisgICAgTlNXaW5k
b3cgKmFjdGl2ZVZpZXdXaW5kb3cgPSBhY3RpdmVXaW5kb3coKTsKKyAgICByZXR1cm4gYWN0aXZl
Vmlld1dpbmRvdy5pc0tleVdpbmRvdyB8fCBbTlNBcHAga2V5V2luZG93XSA9PSBhY3RpdmVWaWV3
V2luZG93OworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdGb2N1c2VkKCkKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgV2ViUGFnZVByb3h5IGNvbnN0cnVj
dG9yIGJlZm9yZSB3ZSBoYXZlIGEgV2ViVmlld0ltcGwuCisgICAgLy8gT25jZSBXZWJWaWV3SW1w
bCBhbmQgUGFnZUNsaWVudCBtZXJnZSwgdGhpcyB3b24ndCBiZSBhIHByb2JsZW0uCisgICAgaWYg
KCFtX2ltcGwpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBtX2ltcGwtPmlzRm9j
dXNlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjptYWtlRmlyc3RSZXNwb25kZXIoKQor
eworICAgIGlmIChtX3Nob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzKQorICAgICAg
ICByZXR1cm47CisKKyAgICAgW1ttX3ZpZXcgd2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6bV92
aWV3XTsKK30KKyAgICAKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUoKQorewor
ICAgIE5TVmlldyAqYWN0aXZlVmlldyA9IHRoaXMtPmFjdGl2ZVZpZXcoKTsKKyAgICBOU1dpbmRv
dyAqYWN0aXZlVmlld1dpbmRvdyA9IGFjdGl2ZVdpbmRvdygpOworCisgICAgaWYgKCFhY3RpdmVW
aWV3V2luZG93KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWFjdGl2ZVZpZXdX
aW5kb3cuaXNWaXNpYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYWN0aXZl
Vmlldy5pc0hpZGRlbk9ySGFzSGlkZGVuQW5jZXN0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChtX2ltcGwtPndpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQoKSAmJiAo
YWN0aXZlVmlld1dpbmRvdy5vY2NsdXNpb25TdGF0ZSAmIE5TV2luZG93T2NjbHVzaW9uU3RhdGVW
aXNpYmxlKSAhPSBOU1dpbmRvd09jY2x1c2lvblN0YXRlVmlzaWJsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6Omlz
Vmlld1Zpc2libGVPck9jY2x1ZGVkKCkKK3sKKyAgICByZXR1cm4gYWN0aXZlV2luZG93KCkuaXNW
aXNpYmxlOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCit7Cisg
ICAgcmV0dXJuIGFjdGl2ZVdpbmRvdygpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppc1Zp
c3VhbGx5SWRsZSgpCit7CisgICAgcmV0dXJuIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNpbmds
ZXRvbigpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc0hhdmVTdG9wcGVkKCkgfHwgIWlz
Vmlld1Zpc2libGUoKTsKK30KKworTGF5ZXJIb3N0aW5nTW9kZSBQYWdlQ2xpZW50SW1wbDo6dmll
d0xheWVySG9zdGluZ01vZGUoKQoreworI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJfSE9T
VElORykKKyAgICBpZiAoW2FjdGl2ZVdpbmRvdygpIF9ob3N0c0xheWVyc0luV2luZG93U2VydmVy
XSkKKyAgICAgICAgcmV0dXJuIExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczsKKyNlbmRp
ZgorICAgIHJldHVybiBMYXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3M7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OnZpZXdXaWxsTW92ZVRvQW5vdGhlcldpbmRvdygpCit7CisgICAgY2xlYXJB
bGxFZGl0Q29tbWFuZHMoKTsKK30KKworQ29sb3JTcGFjZURhdGEgUGFnZUNsaWVudEltcGw6OmNv
bG9yU3BhY2UoKQoreworICAgIHJldHVybiBtX2ltcGwtPmNvbG9yU3BhY2UoKTsKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6cHJvY2Vzc0RpZEV4aXQoKQoreworICAgIG1faW1wbC0+cHJvY2Vz
c0RpZEV4aXQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCgpCit7Cisg
ICAgbV9pbXBsLT5wYWdlQ2xvc2VkKCk7CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMp
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPmNsZWFyKCk7CisjZW5kaWYKK30K
Kwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBtX2lt
cGwtPmRpZFJlbGF1bmNoUHJvY2VzcygpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcmVm
ZXJlbmNlc0RpZENoYW5nZSgpCit7CisgICAgbV9pbXBsLT5wcmVmZXJlbmNlc0RpZENoYW5nZSgp
OworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcm
IG9sZFRvb2xUaXAsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkKK3sKKyAgICBtX2ltcGwtPnRv
b2xUaXBDaGFuZ2VkKG9sZFRvb2xUaXAsIG5ld1Rvb2xUaXApOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKQoreworICAgIG1faW1wbC0+dXBkYXRlU3Vw
cG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpOworICAgIG1faW1wbC0+ZGlzbWlzc0NvbnRlbnRS
ZWxhdGl2ZUNoaWxkV2luZG93c1dpdGhBbmltYXRpb24odHJ1ZSk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
ZGF0YVJlZmVyZW5jZSkKK3sKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxv
YWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQoreworICAgIEFTU0VSVF9BUkcoZG93
bmxvYWQsIGRvd25sb2FkKTsKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIEFTU0VSVChbZG93bmxv
YWQtPndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tEb3dubG9hZCBjbGFzc11dKTsKKyAgICBb
c3RhdGljX2Nhc3Q8X1dLRG93bmxvYWQgKj4oZG93bmxvYWQtPndyYXBwZXIoKSkgc2V0T3JpZ2lu
YXRpbmdXZWJWaWV3Om1fd2ViVmlld107CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkK
K3sKKyAgICBtX2ltcGwtPmRpZENoYW5nZUNvbnRlbnRTaXplKG5ld1NpemUpOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3Ip
Cit7CisgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gc2hhcmUgdGhpcyBjb2RlIHdpdGgg
V2ViS2l0MSdzIFdlYkNocm9tZUNsaWVudC4KKworICAgIC8vIFRoZSBXZWIgcHJvY2VzcyBtYXkg
aGF2ZSBhc2tlZCB0byBjaGFuZ2UgdGhlIGN1cnNvciB3aGVuIHRoZSB2aWV3IHdhcyBpbiBhbiBh
Y3RpdmUgd2luZG93LCBidXQKKyAgICAvLyBpZiBpdCBpcyBubyBsb25nZXIgaW4gYSB3aW5kb3cg
b3IgdGhlIHdpbmRvdyBpcyBub3QgYWN0aXZlLCB0aGVuIHRoZSBjdXJzb3Igc2hvdWxkIG5vdCBj
aGFuZ2UuCisgICAgaWYgKCFpc1ZpZXdXaW5kb3dBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKFtOU0FwcCBfY3Vyc29yUmVjdEN1cnNvcl0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV92aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1dpbmRvdyAqd2luZG93
ID0gW21fdmlldyB3aW5kb3ddOworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoW3dpbmRvdyB3aW5kb3dOdW1iZXJdICE9IFtOU1dpbmRvdyB3aW5kb3dOdW1iZXJB
dFBvaW50OltOU0V2ZW50IG1vdXNlTG9jYXRpb25dIGJlbG93V2luZG93V2l0aFdpbmRvd051bWJl
cjowXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNDdXJzb3IgKnBsYXRmb3JtQ3Vyc29yID0g
Y3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCk7CisgICAgaWYgKFtOU0N1cnNvciBjdXJyZW50Q3Vyc29y
XSA9PSBwbGF0Zm9ybUN1cnNvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW3BsYXRmb3JtQ3Vy
c29yIHNldF07Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKK3sKKyAgICBbTlNDdXJzb3Ig
c2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOmhpZGRlblVudGlsTW91c2VNb3Zlc107Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKQoreworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpy
ZWdpc3RlckVkaXRDb21tYW5kKFJlZjxXZWJFZGl0Q29tbWFuZFByb3h5PiYmIGNvbW1hbmQsIFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQoreworICAgIG1faW1wbC0+cmVnaXN0
ZXJFZGl0Q29tbWFuZChXVEZNb3ZlKGNvbW1hbmQpLCB1bmRvT3JSZWRvKTsKK30KKworI2lmIFVT
RShJTlNFUlRJT05fVU5ET19HUk9VUElORykKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVy
SW5zZXJ0aW9uVW5kb0dyb3VwaW5nKCkKK3sKKyAgICByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91
cGluZ1dpdGhVbmRvTWFuYWdlcihbbV92aWV3IHVuZG9NYW5hZ2VyXSk7Cit9CisjZW5kaWYKKwor
dm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQoreworICAgIG1faW1w
bC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6Y2Fu
VW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgcmV0
dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94eTo6VW5kbykgPyBbW21fdmlldyB1bmRvTWFu
YWdlcl0gY2FuVW5kb10gOiBbW21fdmlldyB1bmRvTWFuYWdlcl0gY2FuUmVkb107Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJl
ZG8gdW5kb09yUmVkbykKK3sKKyAgICByZXR1cm4gKHVuZG9PclJlZG8gPT0gV2ViUGFnZVByb3h5
OjpVbmRvKSA/IFtbbV92aWV3IHVuZG9NYW5hZ2VyXSB1bmRvXSA6IFtbbV92aWV3IHVuZG9NYW5h
Z2VyXSByZWRvXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKGNvbnN0
IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgUmVmPFNoYXJlYWJsZUJpdG1hcD4mJiBkcmFnSW1h
Z2UsIERyYWdTb3VyY2VBY3Rpb24gYWN0aW9uKQoreworICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBkcmFnQ0dJbWFnZSA9IGRyYWdJbWFnZS0+bWFrZUNHSW1hZ2UoKTsKKyAgICBSZXRhaW5QdHI8
TlNJbWFnZT4gZHJhZ05TSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhD
R0ltYWdlOmRyYWdDR0ltYWdlLmdldCgpIHNpemU6ZHJhZ0ltYWdlLT5zaXplKCldKTsKKyAgICBJ
bnRTaXplIHNpemUoW2RyYWdOU0ltYWdlIHNpemVdKTsKKyAgICBzaXplLnNjYWxlKDEuMCAvIG1f
aW1wbC0+cGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIFtkcmFnTlNJbWFnZSBzZXRT
aXplOnNpemVdOworCisgICAgbV9pbXBsLT5kcmFnSW1hZ2VGb3JWaWV3KG1fdmlldywgZHJhZ05T
SW1hZ2UuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBhY3Rpb24gPT0gRHJhZ1NvdXJjZUFjdGlvbkxp
bmspOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQcm9taXNlZERhdGFGb3JJbWFnZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGltYWdlQnVm
ZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29u
c3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJs
ZVVSTCwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBhcmNoaXZlQnVmZmVyKQoreworICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgaW1hZ2UtPnNldERh
dGEoV1RGTW92ZShpbWFnZUJ1ZmZlciksIHRydWUpOworICAgIG1faW1wbC0+c2V0UHJvbWlzZWRE
YXRhRm9ySW1hZ2UoaW1hZ2UuZ2V0KCksIGZpbGVuYW1lLCBleHRlbnNpb24sIHRpdGxlLCB1cmws
IHZpc2libGVVUkwsIGFyY2hpdmVCdWZmZXIuZ2V0KCksIHBhc3RlYm9hcmROYW1lKTsKK30KKwor
I2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQ
cm9taXNlZERhdGFGb3JBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBjb25zdCBTdHJp
bmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNpYmxlVVJMKQor
eworICAgIG1faW1wbC0+c2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVudChmaWxlbmFtZSwgZXh0
ZW5zaW9uLCB0aXRsZSwgdXJsLCB2aXNpYmxlVVJMLCBwYXN0ZWJvYXJkTmFtZSk7Cit9CisjZW5k
aWYKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSgpCit7Cisg
ICAgbV9pbXBsLT51cGRhdGVTZWN1cmVJbnB1dFN0YXRlKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OnJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpCit7CisgICAgbV9pbXBsLT5yZXNldFNlY3Vy
ZUlucHV0U3RhdGUoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6bm90aWZ5SW5wdXRDb250
ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpCit7CisgICAgbV9pbXBsLT5ub3RpZnlJbnB1
dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uKCk7Cit9CisKK0Zsb2F0UmVjdCBQYWdl
Q2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
eworICAgIHJldHVybiB0b0RldmljZVNwYWNlKHJlY3QsIFttX3ZpZXcgd2luZG93XSk7Cit9CisK
K0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gdG9Vc2VyU3BhY2UocmVjdCwgW21fdmlldyB3aW5k
b3ddKTsKK30KKyAgIAorSW50UG9pbnQgUGFnZUNsaWVudEltcGw6OnNjcmVlblRvUm9vdFZpZXco
Y29uc3QgSW50UG9pbnQmIHBvaW50KQoreworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRp
b25zIgorICAgIE5TUG9pbnQgd2luZG93Q29vcmQgPSBbW21fdmlldyB3aW5kb3ddIGNvbnZlcnRT
Y3JlZW5Ub0Jhc2U6cG9pbnRdOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAgIHJl
dHVybiBJbnRQb2ludChbbV92aWV3IGNvbnZlcnRQb2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpu
aWxdKTsKK30KKyAgICAKK0ludFJlY3QgUGFnZUNsaWVudEltcGw6OnJvb3RWaWV3VG9TY3JlZW4o
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBOU1JlY3QgdGVtcFJlY3QgPSByZWN0OworICAg
IHRlbXBSZWN0ID0gW21fdmlldyBjb252ZXJ0UmVjdDp0ZW1wUmVjdCB0b1ZpZXc6bmlsXTsKKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICB0ZW1wUmVjdC5vcmlnaW4gPSBb
W21fdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46dGVtcFJlY3Qub3JpZ2luXTsKKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0
ZW1wUmVjdCk7Cit9CisKK0ludFJlY3QgUGFnZUNsaWVudEltcGw6OnJvb3RWaWV3VG9XaW5kb3co
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBOU1JlY3QgdGVtcFJlY3QgPSBy
ZWN0OworICAgIHRlbXBSZWN0ID0gW21fdmlldyBjb252ZXJ0UmVjdDp0ZW1wUmVjdCB0b1ZpZXc6
bmlsXTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0ZW1wUmVjdCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudCYgZXZlbnQsIGJvb2wgZXZlbnRXYXNIYW5kbGVkKQoreworICAgIG1faW1wbC0+ZG9uZVdp
dGhLZXlFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVudFdhc0hhbmRsZWQpOworfQorCitS
ZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQ
cm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCit7CisgICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5
TWFjOjpjcmVhdGUobV92aWV3LCBwYWdlKTsKK30KKworI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQorUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0
RGF0YSYgY29udGV4dCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQoreworICAgIHJldHVybiBX
ZWJDb250ZXh0TWVudVByb3h5TWFjOjpjcmVhdGUobV92aWV3LCBwYWdlLCBjb250ZXh0LCB1c2Vy
RGF0YSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorUmVmUHRy
PFdlYkNvbG9yUGlja2VyPiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFn
ZVByb3h5KiBwYWdlLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgaW5pdGlhbENvbG9yLCAgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gV2ViQ29sb3JQaWNrZXJNYWM6
OmNyZWF0ZShwYWdlLCBpbml0aWFsQ29sb3IsIHJlY3QsIG1fdmlldyk7Cit9CisjZW5kaWYKKwor
UmVmPFZhbGlkYXRpb25CdWJibGU+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVWYWxpZGF0aW9uQnVi
YmxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgVmFsaWRhdGlvbkJ1YmJsZTo6U2V0dGlu
Z3MmIHNldHRpbmdzKQoreworICAgIHJldHVybiBWYWxpZGF0aW9uQnViYmxlOjpjcmVhdGUobV92
aWV3LCBtZXNzYWdlLCBzZXR0aW5ncyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFRl
eHRJbmRpY2F0b3IoUmVmPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IsIFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZSBsaWZldGltZSkKK3sKKyAgICBtX2ltcGwtPnNldFRl
eHRJbmRpY2F0b3IodGV4dEluZGljYXRvci5nZXQoKSwgbGlmZXRpbWUpOworfQorCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjpjbGVhclRleHRJbmRpY2F0b3IoV2ViQ29yZTo6VGV4dEluZGljYXRvcldp
bmRvd0Rpc21pc3NhbEFuaW1hdGlvbiBkaXNtaXNzYWxBbmltYXRpb24pCit7CisgICAgbV9pbXBs
LT5jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5pbWF0aW9uKGRpc21pc3NhbEFuaW1hdGlvbik7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVz
cyhmbG9hdCBwcm9ncmVzcykKK3sKKyAgICBtX2ltcGwtPnNldFRleHRJbmRpY2F0b3JBbmltYXRp
b25Qcm9ncmVzcyhwcm9ncmVzcyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmFjY2Vzc2li
aWxpdHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRh
dGEpCit7CisgICAgbV9pbXBsLT5zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuKFtOU0Rh
dGEgZGF0YVdpdGhCeXRlczpkYXRhLmRhdGEoKSBsZW5ndGg6ZGF0YS5zaXplKCldKTsKK30KKyAg
ICAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKK3sKKyAgICBBU1NFUlQo
IWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKKworICAgIENBTGF5ZXIgKnJlbmRlckxheWVy
ID0gV0tNYWtlUmVuZGVyTGF5ZXIobGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQpOworICAgIG1f
aW1wbC0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihyZW5kZXJMYXllcik7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
Cit7CisgICAgbV9pbXBsLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKG5pbCk7
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNT
RVJUKCFsYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSk7CisKKyAgICBDQUxheWVyICpyZW5kZXJM
YXllciA9IFdLTWFrZVJlbmRlckxheWVyKGxheWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKKyAg
ICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIocmVuZGVyTGF5ZXIp
OworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9v
dExheWVyKENBTGF5ZXIgKnJvb3RMYXllcikKK3sKKyAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdSb290TGF5ZXIocm9vdExheWVyKTsKK30KKworQ0FMYXllciAqUGFnZUNsaWVu
dEltcGw6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ltcGwtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKTsKK30KKworUmVm
UHRyPFZpZXdTbmFwc2hvdD4gUGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3QoKQorewor
ICAgIHJldHVybiBtX2ltcGwtPnRha2VWaWV3U25hcHNob3QoKTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKCkKK3sKKyAgICBtX2ltcGwtPnNlbGVjdGlvbkRp
ZENoYW5nZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFu
ZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBp
ZiAoYXV0byBnZXN0dXJlQ29udHJvbGxlciA9IG1faW1wbC0+Z2VzdHVyZUNvbnRyb2xsZXIoKSkK
KyAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXItPndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJD
b3JlKGV2ZW50Lm5hdGl2ZUV2ZW50KCkpOworfQorCisjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VW
RU5UUykKK3ZvaWQgUGFnZUNsaWVudEltcGw6Omdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdl
YkNvcmUoY29uc3QgTmF0aXZlV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKK3sKKyAgICBtX2ltcGwt
Pmdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoZXZlbnQubmF0aXZlRXZlbnQoKSk7
Cit9CisjZW5kaWYKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cGx1Z2luRm9jdXNPcldpbmRvd0Zv
Y3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9v
bCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKQoreworICAgIG1faW1wbC0+cGx1Z2lu
Rm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3Vz
LCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBwbHVnaW5Db21w
bGV4VGV4dElucHV0SWRlbnRpZmllciwgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKK3sKKyAgICBtX2ltcGwtPnNldFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZUFuZElkZW50aWZpZXIocGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLCBw
bHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8m
IGRpY3Rpb25hcnlQb3B1cEluZm8pCit7CisgICAgbV9pbXBsLT5wcmVwYXJlRm9yRGljdGlvbmFy
eUxvb2t1cCgpOworCisgICAgRGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVwKGRpY3Rpb25hcnlQ
b3B1cEluZm8sIG1fdmlldywgW3RoaXNdKFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpIHsK
KyAgICAgICAgbV9pbXBsLT5zZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRpY2F0b3IsIFRleHRJbmRp
Y2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50KTsKKyAgICB9KTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUs
IGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit7CisjaWYg
VVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8ICFp
c1ZpZXdJbldpbmRvdygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWwu
c2hvdyhtX3ZpZXcsICptX2ltcGwsIHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncyk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKK3sK
KyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCisgICAgbV9jb3JyZWN0aW9uUGFuZWwuZGlz
bWlzcyhyZWFzb24pOworI2VuZGlmCit9CisKK1N0cmluZyBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dCByZWFzb24pCit7CisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorICAgIHJl
dHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7CisjZWxzZQorICAgIHJldHVy
biBTdHJpbmcoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIE5TQ29ycmVjdGlvblJlc3Bv
bnNlIHRvQ29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2Up
Cit7CisgICAgc3dpdGNoIChyZXNwb25zZSkgeworICAgIGNhc2UgV2ViQ29yZTo6QXV0b2NvcnJl
Y3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQ6CisgICAgICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNw
b25zZVJldmVydGVkOworICAgIGNhc2UgV2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6
RWRpdGVkOgorICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uUmVzcG9uc2VFZGl0ZWQ7CisgICAg
Y2FzZSBXZWJDb3JlOjpBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpBY2NlcHRlZDoKKyAgICAgICAg
cmV0dXJuIE5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQ7CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQ7
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
QXV0b2NvcnJlY3Rpb25SZXNwb25zZSByZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykKK3sKKyAgICBDb3JyZWN0aW9u
UGFuZWw6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UobV9pbXBsLT5zcGVsbENoZWNrZXJE
b2N1bWVudFRhZygpLCB0b0NvcnJlY3Rpb25SZXNwb25zZShyZXNwb25zZSksIHJlcGxhY2VkU3Ry
aW5nLCByZXBsYWNlbWVudFN0cmluZyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlY29t
bWVuZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFuZ2UoU2Nyb2xsYmFyU3R5bGUgbmV3U3R5bGUpCit7
CisgICAgLy8gTm93IHJlLWNyZWF0ZSBhIHRyYWNraW5nIGFyZWEgd2l0aCB0aGUgYXBwcm9wcmlh
dGUgb3B0aW9ucyBnaXZlbiB0aGUgbmV3IHNjcm9sbGJhciBzdHlsZQorICAgIE5TVHJhY2tpbmdB
cmVhT3B0aW9ucyBvcHRpb25zID0gTlNUcmFja2luZ01vdXNlTW92ZWQgfCBOU1RyYWNraW5nTW91
c2VFbnRlcmVkQW5kRXhpdGVkIHwgTlNUcmFja2luZ0luVmlzaWJsZVJlY3QgfCBOU1RyYWNraW5n
Q3Vyc29yVXBkYXRlOworICAgIGlmIChuZXdTdHlsZSA9PSBTY3JvbGxiYXJTdHlsZTo6QWx3YXlz
VmlzaWJsZSkKKyAgICAgICAgb3B0aW9ucyB8PSBOU1RyYWNraW5nQWN0aXZlQWx3YXlzOworICAg
IGVsc2UKKyAgICAgICAgb3B0aW9ucyB8PSBOU1RyYWNraW5nQWN0aXZlSW5LZXlXaW5kb3c7CisK
KyAgICBSZXRhaW5QdHI8TlNUcmFja2luZ0FyZWE+IHRyYWNraW5nQXJlYSA9IGFkb3B0TlMoW1tO
U1RyYWNraW5nQXJlYSBhbGxvY10gaW5pdFdpdGhSZWN0OlttX3ZpZXcgZnJhbWVdIG9wdGlvbnM6
b3B0aW9ucyBvd25lcjptX3ZpZXcgdXNlckluZm86bmlsXSk7CisgICAgbV9pbXBsLT5zZXRQcmlt
YXJ5VHJhY2tpbmdBcmVhKHRyYWNraW5nQXJlYS5nZXQoKSk7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OmludHJpbnNpY0NvbnRlbnRTaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIGludHJp
bnNpY0NvbnRlbnRTaXplKQoreworICAgIG1faW1wbC0+c2V0SW50cmluc2ljQ29udGVudFNpemUo
aW50cmluc2ljQ29udGVudFNpemUpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRl
U2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQorewor
ICAgIHJldHVybiBtX2ltcGwtPmV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKE5TU2VsZWN0
b3JGcm9tU3RyaW5nKHNlbGVjdG9yU3RyaW5nKSk7Cit9CisKKyNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKK3VpbnQ2NF90IFBhZ2VDbGllbnRJbXBsOjphZGREaWN0YXRpb25BbHRlcm5h
dGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykK
K3sKKyAgICByZXR1cm4gbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPmFkZEFsdGVybmF0
aXZlcyhhbHRlcm5hdGl2ZXMpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVEaWN0
YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX2Fs
dGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+cmVtb3ZlQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNv
bnRleHQpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuYXRp
dmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQs
IHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7CisgICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkg
fHwgIWlzVmlld0luV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2FsdGVybmF0aXZl
VGV4dFVJQ29udHJvbGxlci0+c2hvd0FsdGVybmF0aXZlcyhtX3ZpZXcsIGJvdW5kaW5nQm94T2ZE
aWN0YXRlZFRleHQsIGRpY3RhdGlvbkNvbnRleHQsIF4oTlNTdHJpbmcgKmFjY2VwdGVkQWx0ZXJu
YXRpdmUpIHsKKyAgICAgICAgbV9pbXBsLT5oYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChh
Y2NlcHRlZEFsdGVybmF0aXZlKTsKKyAgICB9KTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFnZUNs
aWVudEltcGw6OmRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
KQoreworICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+YWx0ZXJuYXRp
dmVzRm9yQ29udGV4dChkaWN0YXRpb25Db250ZXh0KTsKK30KKyNlbmRpZgorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQoYm9vbCBlZGl0YWJsZUVsZW1l
bnRJc0ZvY3VzZWQpCit7CisgICAgbV9pbXBsLT5zZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQo
ZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKTsKK30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKworV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCYgUGFnZUNsaWVudEltcGw6OmZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKQoreworICAgIHJldHVybiAqdGhpczsKK30KKwor
Ly8gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkKK3sKKyAgICBtX2ltcGwtPmNsb3NlRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIoKTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNGdWxsU2Ny
ZWVuKCkKK3sKKyAgICBpZiAoIW1faW1wbC0+aGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1faW1wbC0+ZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIoKS5pc0Z1bGxTY3JlZW47Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmVudGVyRnVsbFNjcmVlbigpCit7CisgICAgW21faW1wbC0+ZnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIoKSBlbnRlckZ1bGxTY3JlZW46bmlsXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAgIFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyKCkgZXhpdEZ1bGxTY3JlZW5dOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdh
bkVudGVyRnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJl
Y3QmIGZpbmFsRnJhbWUpCit7CisgICAgW21faW1wbC0+ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIoKSBiZWdhbkVudGVyRnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6aW5pdGlhbEZyYW1lIGZp
bmFsRnJhbWU6ZmluYWxGcmFtZV07CisgICAgbV9pbXBsLT51cGRhdGVTdXBwb3J0c0FyYml0cmFy
eUxheW91dE1vZGVzKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmJlZ2FuRXhpdEZ1bGxT
Y3JlZW4oY29uc3QgSW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBJbnRSZWN0JiBmaW5hbEZy
YW1lKQoreworICAgIFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCkgYmVnYW5F
eGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6Zmlu
YWxGcmFtZV07CisgICAgbV9pbXBsLT51cGRhdGVTdXBwb3J0c0FyYml0cmFyeUxheW91dE1vZGVz
KCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKQoreworICAgIG1faW1wbC0+ZGlz
bWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c1dpdGhBbmltYXRpb24odHJ1ZSk7CisKKyNp
ZiBXS19BUElfRU5BQkxFRAorICAgIGlmIChtX3dlYlZpZXcpCisgICAgICAgIE5hdmlnYXRpb25T
dGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlk
QmVnaW4oKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0
ZW0pCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBpZiAobV93ZWJWaWV3KQorICAgICAgICBO
YXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9u
R2VzdHVyZVdpbGxFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHdpbGxOYXZpZ2F0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworI2VuZGlmCit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5h
dmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQoreworI2lmIFdLX0FQSV9FTkFC
TEVECisgICAgaWYgKG1fd2ViVmlldykKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2Vi
UGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQod2lsbE5hdmln
YXRlLCBpdGVtKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdpbGxOYXZpZ2F0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGl0ZW0pOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Om5h
dmlnYXRpb25HZXN0dXJlRGlkRW5kKCkKK3sKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6d2ls
bFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQor
eworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgaWYgKG1fd2ViVmlldykKKyAgICAgICAgTmF2aWdh
dGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmln
YXRpb25TbmFwc2hvdChpdGVtKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworI2Vu
ZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJl
U25hcHNob3QoKQoreworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgaWYgKG1fd2ViVmlldykKKyAg
ICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2
aWdhdGlvbkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQoKTsKKyNlbmRpZgorfQorCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUo
KQoreworICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gbV9pbXBsLT5nZXN0dXJlQ29u
dHJvbGxlcigpKQorICAgICAgICBnZXN0dXJlQ29udHJvbGxlci0+ZGlkRmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRp
ZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoKQoreworICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9s
bGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJvbGxlcigpKQorICAgICAgICBnZXN0dXJlQ29udHJv
bGxlci0+ZGlkRmluaXNoTG9hZEZvck1haW5GcmFtZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpkaWRGYWlsTG9hZEZvck1haW5GcmFtZSgpCit7CisgICAgaWYgKGF1dG8gZ2VzdHVyZUNv
bnRyb2xsZXIgPSBtX2ltcGwtPmdlc3R1cmVDb250cm9sbGVyKCkpCisgICAgICAgIGdlc3R1cmVD
b250cm9sbGVyLT5kaWRGYWlsTG9hZEZvck1haW5GcmFtZSgpOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVu
dE5hdmlnYXRpb25UeXBlIHR5cGUpCit7CisgICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIg
PSBtX2ltcGwtPmdlc3R1cmVDb250cm9sbGVyKCkpCisgICAgICAgIGdlc3R1cmVDb250cm9sbGVy
LT5kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKHR5cGUpOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyKQoreworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgW21fd2ViVmll
dyBfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOm5zU3RyaW5nRnJvbVdlYkNvcmVT
dHJpbmcoaWRlbnRpZmllcildOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Omhh
bmRsZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mb1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZlU2Vz
c2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNl
ZFRpbWUpCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBbbV93ZWJWaWV3IF9oYW5kbGVBY3Rp
dmVOb3dQbGF5aW5nU2Vzc2lvbkluZm9SZXNwb25zZTpoYXNBY3RpdmVTZXNzaW9uIHRpdGxlOm5z
U3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcodGl0bGUpIGR1cmF0aW9uOmR1cmF0aW9uIGVsYXBzZWRU
aW1lOmVsYXBzZWRUaW1lXTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRD
aGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0NH
UmVjdCBQYWdlQ2xpZW50SW1wbDo6Ym91bmRzT2ZMYXllckluTGF5ZXJCYWNrZWRXaW5kb3dDb29y
ZGluYXRlcyhDQUxheWVyICpsYXllcikgY29uc3QKK3sKKyAgICBDQUxheWVyICp3aW5kb3dDb250
ZW50TGF5ZXIgPSBzdGF0aWNfY2FzdDxOU1ZpZXcgKj4obV92aWV3LndpbmRvdy5jb250ZW50Vmll
dykubGF5ZXI7CisgICAgQVNTRVJUKHdpbmRvd0NvbnRlbnRMYXllcik7CisKKyAgICByZXR1cm4g
W3dpbmRvd0NvbnRlbnRMYXllciBjb252ZXJ0UmVjdDpsYXllci5ib3VuZHMgZnJvbUxheWVyOmxh
eWVyXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIHJlc3VsdCwgYm9vbCBjb250ZW50
UHJldmVudHNEZWZhdWx0LCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCit7CisgICAgbV9pbXBsLT5k
aWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChyZXN1bHQsIGNvbnRlbnRQcmV2ZW50c0Rl
ZmF1bHQsIHVzZXJEYXRhKTsKK30KKwordm9pZCogUGFnZUNsaWVudEltcGw6OmltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KFJlZlB0cjxBUEk6OkhpdFRl
c3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQsIHVpbnQ2NF90IHR5cGUsIFJlZlB0cjxBUEk6Ok9iamVj
dD4gdXNlckRhdGEpCit7CisgICAgcmV0dXJuIG1faW1wbC0+aW1tZWRpYXRlQWN0aW9uQW5pbWF0
aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdC5nZXQoKSwgdHlwZSwg
dXNlckRhdGEuZ2V0KCkpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRIYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZSgpCit7CisgICAgbV9pbXBsLT5kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENo
YW5nZSgpCit7CisgICAgbV9pbXBsLT52aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpOwor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUg
Km1lbnUsIEludFBvaW50IGxvY2F0aW9uKQoreworICAgIFttZW51IHBvcFVwTWVudVBvc2l0aW9u
aW5nSXRlbTpuaWwgYXRMb2NhdGlvbjpsb2NhdGlvbiBpblZpZXc6bV92aWV3XTsKK30KKworI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCitXZWJDb3JlOjpXZWJNZWRpYVNlc3Np
b25NYW5hZ2VyJiBQYWdlQ2xpZW50SW1wbDo6bWVkaWFTZXNzaW9uTWFuYWdlcigpCit7CisgICAg
cmV0dXJuIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZCgpOworfQorI2VuZGlmCisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OnJlZlZpZXcoKQoreworICAgIENGUmV0YWluKG1fdmlldyk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRlcmVmVmlldygpCit7CisgICAgQ0ZSZWxlYXNlKG1f
dmlldyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0V2luZG93RHJhZygpCit7Cisg
ICAgbV9pbXBsLT5zdGFydFdpbmRvd0RyYWcoKTsKK30KKworTlNXaW5kb3cgKlBhZ2VDbGllbnRJ
bXBsOjpwbGF0Zm9ybVdpbmRvdygpCit7CisgICAgcmV0dXJuIG1faW1wbC0+d2luZG93KCk7Cit9
CisKKyNpZiBXS19BUElfRU5BQkxFRAorTlNWaWV3ICpQYWdlQ2xpZW50SW1wbDo6aW5zcGVjdG9y
QXR0YWNobWVudFZpZXcoKQoreworICAgIHJldHVybiBtX2ltcGwtPmluc3BlY3RvckF0dGFjaG1l
bnRWaWV3KCk7Cit9CisKK19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpQYWdlQ2xpZW50SW1wbDo6
cmVtb3RlT2JqZWN0UmVnaXN0cnkoKQoreworICAgIHJldHVybiBtX2ltcGwtPnJlbW90ZU9iamVj
dFJlZ2lzdHJ5KCk7Cit9CisjZW5kaWYKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVzdG9y
ZVNjcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBtX2ltcGwtPmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlv
bigpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjp3aW5kb3dJc0Zyb250V2luZG93VW5kZXJN
b3VzZShjb25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICByZXR1cm4gbV9p
bXBsLT53aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShldmVudC5uYXRpdmVFdmVudCgpKTsK
K30KKworV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBQYWdlQ2xpZW50SW1w
bDo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpCit7CisgICAgaWYgKCFtX3ZpZXcpCisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7
CisgICAgcmV0dXJuIChtX3ZpZXcudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiA9PSBOU1Vz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCkgPyBXZWJDb3JlOjpVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFIgOiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uOjpSVEw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMu
bW0JKHJldmlzaW9uIDIyMTQ2NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAK
ICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKKyNpbXBvcnQg
IlBhZ2VDbGllbnRJbXBsTWFjLmgiCiAKICNpZiBQTEFURk9STShNQUMpCiAKQEAgLTk3LDggKzk3
LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQYWdl
Q2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoTlNWaWV3KiB2aWV3LCBXS1dlYlZpZXcgKndlYlZp
ZXcpCi0gICAgOiBtX3ZpZXcodmlldykKLSAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQorICAgIDog
UGFnZUNsaWVudEltcGxDb2NvYSh3ZWJWaWV3KQorICAgICwgbV92aWV3KHZpZXcpCiAjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCiAgICAgLCBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJv
bGxlcihzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcj4oKSkKICNl
bmRpZgpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6Om1ha2VGaXJzdFJl
c3BvbmRlcigKICAgICBpZiAobV9zaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgIFtbbV92aWV3IHdpbmRvd10gbWFrZUZpcnN0UmVzcG9u
ZGVyOm1fdmlld107CisgICAgW1ttX3ZpZXcgd2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6bV92
aWV3XTsKIH0KICAgICAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUoKQpAQCAt
NDAwLDcgKzQwMCw3IEBAIEZsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclMK
IHsKICAgICByZXR1cm4gdG9Vc2VyU3BhY2UocmVjdCwgW21fdmlldyB3aW5kb3ddKTsKIH0KLSAg
IAorCiBJbnRQb2ludCBQYWdlQ2xpZW50SW1wbDo6c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCiB7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlN
YWMubW0JKHJldmlzaW9uIDIyMTQ2NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW1wb3J0ICJBUElDb250ZXh0TWVudUNsaWVudC5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5j
ZS5oIgogI2ltcG9ydCAiTWVudVV0aWxpdGllcy5oIgotI2ltcG9ydCAiUGFnZUNsaWVudEltcGwu
aCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsTWFjLmgiCiAjaW1wb3J0ICJTZXJ2aWNlc0NvbnRy
b2xsZXIuaCIKICNpbXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2ltcG9ydCAiU3RyaW5nVXRp
bGl0aWVzLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHJldmlzaW9uIDIyMTQ2NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAK
ICNpbXBvcnQgIk1lbnVVdGlsaXRpZXMuaCIKICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZl
bnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnQuaCIKLSNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgi
CisjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbE1hYy5oIgogI2ltcG9ydCAiUGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2VyLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBN
ZW51UHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCShyZXZpc2lvbiAyMjE0NjcpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpZiBVU0UoQVBQS0lUKQogCiAjaW1wb3J0ICJOYXRpdmVXZWJN
b3VzZUV2ZW50LmgiCi0jaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorI2ltcG9ydCAiUGFnZUNs
aWVudEltcGxNYWMuaCIKICNpbXBvcnQgIlBsYXRmb3JtUG9wdXBNZW51RGF0YS5oIgogI2ltcG9y
dCAiU3RyaW5nVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJXZWJQb3B1cEl0ZW0uaCIKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjIxNDg5KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw4IEBACiAJCTBGQ0I0RTUxMThCQkUw
NDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4u
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0
MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5
T3JpZ2luLm1tICovOyB9OwogCQkwRkNCNEU1NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxW
aWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNC
NEU0NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3LmggKi87IH07CiAJCTBGQ0I0RTU1
MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tT
Y3JvbGxWaWV3Lm1tICovOyB9OwotCQkwRkNCNEU2MjE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNs
aWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oICovOyB9OwotCQkw
RkNCNEU2MzE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1OTE4QkJFM0Q5MDAwRkNG
QzkgLyogUGFnZUNsaWVudEltcGwubW0gKi87IH07CisJCTBGQ0I0RTYyMThCQkUzRDkwMDBGQ0ZD
OSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBs
TWFjLmggKi87IH07CisJCTBGQ0I0RTYzMThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1w
bE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSAqLzsgfTsKIAkJ
MEZDQjRFNjYxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1QzE4QkJFM0Q5MDAwRkNG
QzkgLyogV0tQcmludGluZ1ZpZXcuaCAqLzsgfTsKIAkJMEZDQjRFNjcxOEJCRTNEOTAwMEZDRkM5
IC8qIFdLUHJpbnRpbmdWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDQjRFNUQxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1t
ICovOyB9OwogCQkwRkNCNEU2ODE4QkJFM0Q5MDAwRkNGQzkgLyogV0tUZXh0SW5wdXRXaW5kb3dD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkNCNEU1RTE4QkJFM0Q5MDAwRkNGQzkgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVy
LmggKi87IH07CkBAIC0yMzE0LDggKzIzMTQsOCBAQAogCQkwRkNCNEU0MTE4QkJFMDQ0MDAwRkNG
QzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tHZW9sb2NhdGlvblByb3ZpZGVy
SU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tOyBwYXRoID0gaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRl
cklPU09iakNTZWN1cml0eU9yaWdpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDQjRFNDQxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Njcm9sbFZpZXcuaDsgcGF0aCA9IGlvcy9XS1Njcm9sbFZp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNDUxOEJCRTA0NDAwMEZD
RkM5IC8qIFdLU2Nyb2xsVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdLU2Nyb2xsVmlldy5tbTsgcGF0aCA9IGlvcy9XS1Njcm9sbFZpZXcubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdl
Q2xpZW50SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2xpZW50
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNCNEU1OTE4QkJFM0Q5MDAw
RkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQYWdlQ2xpZW50SW1wbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VDbGllbnRJbXBsTWFjLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xp
ZW50SW1wbE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBh
Z2VDbGllbnRJbXBsTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU1
QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tQcmludGluZ1ZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDQjRFNUQxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tQcmludGluZ1ZpZXcubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZDOSAvKiBX
S1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNTExLDYgKzM1MTEsNyBAQAogCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUg
LyogUGVuZGluZ0Rvd25sb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBl
bmRpbmdEb3dubG9hZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdE
b3dubG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzYyRkRGODFFRkMyNjND
MDBDRTA3MkUgLyogV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VS
TFNjaGVtZVRhc2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNkNF
NkQwMUY1OUJDNDYwMDA3QzZDQiAvKiBQYWdlQ2xpZW50SW1wbENvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZUNsaWVudEltcGxDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM2Q0U2RDMxRjU5RUEzNTAwMDdDNkNCIC8qIFBh
Z2VDbGllbnRJbXBsQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFn
ZUNsaWVudEltcGxDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qzc3MDY3
MzFEMTExRDhCMDAxMjcwMEYgLyogV2ViU29ja2V0UHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0UHJvdmlkZXIuY3BwOyBwYXRoID0gTmV0
d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDN0M4OERDMUQwRjQxQTAwMDlEMkY2RCAvKiBXZWJTb2NrZXRQcm92aWRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJTb2NrZXRQcm92aWRlci5oOyBwYXRoID0gTmV0
d29yay9XZWJTb2NrZXRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
Qzg1Qzc4NjFDM0YyM0M1MDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBlbmRpbmdEb3dubG9hZC5jcHA7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNzUsNiArNTI3Niw3IEBACiAJCQkJN0E4MjFGNEQxRTJGNjc5
RTAwNjA0NTc3IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbSAqLywKIAkJ
CQkxQUJDM0RGNDE4OTlFNDM3MDA0RjA2MjYgLyogTmF2aWdhdGlvblN0YXRlLmggKi8sCiAJCQkJ
MUFCQzNERjMxODk5RTQzNzAwNEYwNjI2IC8qIE5hdmlnYXRpb25TdGF0ZS5tbSAqLywKKwkJCQk1
QzZDRTZEMzFGNTlFQTM1MDAwN0M2Q0IgLyogUGFnZUNsaWVudEltcGxDb2NvYS5oICovLAogCQkJ
CTVDNkNFNkQwMUY1OUJDNDYwMDA3QzZDQiAvKiBQYWdlQ2xpZW50SW1wbENvY29hLm1tICovLAog
CQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHkuaCAqLywKIAkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtNzY5Niw4ICs3Njk4LDggQEAKIAkJCQlC
ODc4QjYxMzEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggKi8sCiAJCQkJQjg3
OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLywKIAkJCQkxQUZE
RTY1QjE5NTRFOEQ1MDBDNDhGRkEgLyogTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcCAqLywK
LQkJCQkwRkNCNEU1ODE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwuaCAqLywKLQkJ
CQkwRkNCNEU1OTE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0gKi8sCisJCQkJ
MEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggKi8sCisJCQkJ
MEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLm1tICovLAogCQkJ
CTFBQjE2QUUwMTY0ODY1NkQwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5LmggKi8sCiAJCQkJMEZGMjRBMkYxODc5RTRGRTAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFCMTZBREYxNjQ4NjU2RDAw
MjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0gKi8sCkBAIC04NjMy
LDggKzg2MzQsOCBAQAogCQkJCTM3QjQ3RTJEMUQ2NERCNzYwMDVGNEVGRiAvKiBvYmpjU1BJLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFDNjAwRTc2NzhCIC8qIFBhZ2VD
bGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQ0I0RTYyMThCQkUzRDkwMDBGQ0ZDOSAvKiBQ
YWdlQ2xpZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDQjRFNDYxOEJCRTA0NDAwMEZD
RkM5IC8qIFBhZ2VDbGllbnRJbXBsSU9TLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkNCNEU2MjE4
QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQzc1MzdDMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQThCNjZCMDFCQzQzQzg2MDA4MkRGNzcgLyogUGFnZUxvYWRTdGF0ZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVi
b2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjAyLDkgKzEwMjA0LDkgQEAKIAkJCQlC
QzhBQ0ExNDE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0MzODc0MzQxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M2RDM3RkMxNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKLQkJCQkwRkNCNEU2MzE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNs
aWVudEltcGwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzZDRTZEMTFGNTlCQzdBMDAwN0M2Q0Ig
LyogUGFnZUNsaWVudEltcGxDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0I0RTQ3MThC
QkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTBGQ0I0RTYzMThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBQzc1MzdCMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJv
YXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTk1ODJENjE1M0NDMDU0MDBCNjA4NzUg
LyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319639</attachid>
            <date>2017-09-01 13:16:23 -0700</date>
            <delta_ts>2017-09-01 13:31:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176239-20170901131622.patch</filename>
            <type>text/plain</type>
            <size>101696</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE0OTIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE3LTA5LTAxICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBQYWdlQ2xp
ZW50SW1wbENvY29hIGEgcHJvcGVyIHN1cGVyY2xhc3Mgb2YgUGFnZUNsaWVudEltcGxzIGZvciBN
YWMgYW5kIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc2MjM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbENvY29hOjpQYWdlQ2xpZW50SW1wbENvY29hKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6UGFnZUNsaWVudEltcGxDb2NvYTo6aXNQbGF5aW5nQXVkaW9XaWxsQ2hhbmdlKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGxDb2NvYTo6aXNQbGF5aW5nQXVkaW9EaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNQbGF5aW5nQXVkaW9XaWxs
Q2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzUGxh
eWluZ0F1ZGlvRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW06CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbCk6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW06IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGwubW0uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpQYWdl
Q2xpZW50SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5
TWFjLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW06CisgICAgICAgICog
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTctMDktMDEgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXBsYWNlIFdL
VUlEZWxlZ2F0ZVByaXZhdGUncyBpc1BsYXlpbmdNZWRpYURpZENoYW5nZSB3aXRoIEtWTyBfaXNQ
bGF5aW5nQXVkaW8gb24gV0tXZWJWaWV3CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJQYWdlQ2xpZW50LmgiCisKK0BjbGFzcyBXS1dlYlZpZXc7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBQYWdlQ2xpZW50SW1wbENvY29hIDogcHVibGljIFBhZ2VDbGllbnQg
eworcHVibGljOgorICAgIFBhZ2VDbGllbnRJbXBsQ29jb2EoV0tXZWJWaWV3ICp3ZWJWaWV3KQor
ICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KSB7IH0KKyAgICB2b2lkIGlzUGxheWluZ0F1ZGlv
V2lsbENoYW5nZSgpIGZpbmFsOworICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKSBm
aW5hbDsKK3Byb3RlY3RlZDoKKyAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKK307CisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudElt
cGxDb2NvYS5tbQkocmV2aXNpb24gMjIxNDg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsMjEgKzI0
LDIwIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQYWdlQ2xpZW50SW1w
bC5oIgorI2ltcG9ydCAiUGFnZUNsaWVudEltcGxDb2NvYS5oIgogCi0jaW1wb3J0ICJQYWdlQ2xp
ZW50SW1wbElPUy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aXNQbGF5aW5nQXVkaW9XaWxsQ2hhbmdl
KCkKK3ZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6aXNQbGF5aW5nQXVkaW9XaWxsQ2hhbmdlKCkK
IHsKICNpZiBXS19BUElfRU5BQkxFRAogICAgIFttX3dlYlZpZXcgd2lsbENoYW5nZVZhbHVlRm9y
S2V5Ok5TU3RyaW5nRnJvbVNlbGVjdG9yKEBzZWxlY3RvcihfaXNQbGF5aW5nQXVkaW8pKV07CiAj
ZW5kaWYKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2Uo
KQordm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjppc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpCiB7
CiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICBbbV93ZWJWaWV3IGRpZENoYW5nZVZhbHVlRm9yS2V5
Ok5TU3RyaW5nRnJvbVNlbGVjdG9yKEBzZWxlY3RvcihfaXNQbGF5aW5nQXVkaW8pKV07CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNp
b24gMjIxNDY3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbXBvcnQgIk5hdGl2ZVdlYk1v
dXNlRXZlbnQuaCIKICNpbXBvcnQgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlBh
Z2VDbGllbnQuaCIKLSNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCisjaW1wb3J0ICJQYWdlQ2xp
ZW50SW1wbE1hYy5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFR5cGVzLmgiCiAjaW1wb3J0ICJQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oCShyZXZpc2lvbiAyMjE0ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTcg
KzI3LDE2IEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgIlBhZ2VDbGllbnQuaCIK
KyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsQ29jb2EuaCIKICNpbXBvcnQgIldlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogT0JKQ19DTEFTUyBX
S0NvbnRlbnRWaWV3OwotT0JKQ19DTEFTUyBXS1dlYlZpZXc7CiBPQkpDX0NMQVNTIFdLRWRpdG9y
VW5kb1RhcmdldE9iakM7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIAotY2xhc3MgUGFnZUNs
aWVudEltcGwgOiBwdWJsaWMgUGFnZUNsaWVudAorY2xhc3MgUGFnZUNsaWVudEltcGwgOiBwdWJs
aWMgUGFnZUNsaWVudEltcGxDb2NvYQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAs
IHB1YmxpYyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50CiAjZW5kaWYKQEAgLTE5NCw4
ICsxOTMsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVyZWZWaWV3KCkgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpIG92ZXJyaWRlOwotICAgIHZvaWQgaXNQ
bGF5aW5nQXVkaW9XaWxsQ2hhbmdlKCkgZmluYWw7Ci0gICAgdm9pZCBpc1BsYXlpbmdBdWRpb0Rp
ZENoYW5nZSgpIGZpbmFsOwogCiAgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNCw3
ICsyMTEsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBXS0NvbnRlbnRWaWV3ICptX2NvbnRl
bnRWaWV3OwotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3OwogICAgIFJldGFpblB0cjxXS0VkaXRv
clVuZG9UYXJnZXRPYmpDPiBtX3VuZG9UYXJnZXQ7CiB9OwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLm1tCShyZXZpc2lvbiAyMjE0NjcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsOCBAQCAt
ICh2b2lkKXJlZG9FZGl0aW5nOihpZClzZW5kZXIKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQYWdl
Q2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV0tDb250ZW50VmlldyAqY29udGVudFZpZXcsIFdL
V2ViVmlldyAqd2ViVmlldykKLSAgICA6IG1fY29udGVudFZpZXcoY29udGVudFZpZXcpCi0gICAg
LCBtX3dlYlZpZXcod2ViVmlldykKKyAgICA6IFBhZ2VDbGllbnRJbXBsQ29jb2Eod2ViVmlldykK
KyAgICAsIG1fY29udGVudFZpZXcoY29udGVudFZpZXcpCiAgICAgLCBtX3VuZG9UYXJnZXQoYWRv
cHROUyhbW1dLRWRpdG9yVW5kb1RhcmdldE9iakMgYWxsb2NdIGluaXRdKSkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lv
biAyMjE0ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDI2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbmNsdWRlICJDb3JyZWN0
aW9uUGFuZWwuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViRnVsbFNj
cmVlbk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQGNsYXNz
IFdLRWRpdG9yVW5kb1RhcmdldE9iakM7Ci1AY2xhc3MgV0tWaWV3OwotQGNsYXNzIFdLV2ViVmll
dzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9s
bGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViVmlld0ltcGw7Ci0KLWNs
YXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDogcHVibGljIFBhZ2VDbGllbnQKLSNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCi0gICAgLCBwdWJsaWMgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNs
aWVudAotI2VuZGlmCi0gICAgewotcHVibGljOgotICAgIFBhZ2VDbGllbnRJbXBsKE5TVmlldyAq
LCBXS1dlYlZpZXcgKik7Ci0gICAgdmlydHVhbCB+UGFnZUNsaWVudEltcGwoKTsKLQotICAgIC8v
IEZJWE1FOiBFdmVudHVhbGx5IFdlYlZpZXdJbXBsIHNob3VsZCBiZWNvbWUgdGhlIFBhZ2VDbGll
bnQuCi0gICAgdm9pZCBzZXRJbXBsKFdlYlZpZXdJbXBsJiBpbXBsKSB7IG1faW1wbCA9ICZpbXBs
OyB9Ci0KLSAgICB2b2lkIHZpZXdXaWxsTW92ZVRvQW5vdGhlcldpbmRvdygpOwotCi1wcml2YXRl
OgotICAgIC8vIFBhZ2VDbGllbnQKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94
eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vmlld05l
ZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
cXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxPcmlnaW4sIGJvb2wgaXNQcm9ncmFtbWF0aWNT
Y3JvbGwpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdmlld1Njcm9sbFBvc2l0
aW9uKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCkgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKSBvdmVycmlkZTsKLSAgICBib29sIGlz
Vmlld0ZvY3VzZWQoKSBvdmVycmlkZTsKLSAgICBib29sIGlzVmlld1Zpc2libGUoKSBvdmVycmlk
ZTsKLSAgICBib29sIGlzVmlld1Zpc2libGVPck9jY2x1ZGVkKCkgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBpc1ZpZXdJbldpbmRvdygpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNWaXN1YWxseUlkbGUoKSBv
dmVycmlkZTsKLSAgICBMYXllckhvc3RpbmdNb2RlIHZpZXdMYXllckhvc3RpbmdNb2RlKCkgb3Zl
cnJpZGU7Ci0gICAgQ29sb3JTcGFjZURhdGEgY29sb3JTcGFjZSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihMYXllck9yVmlldyAqKSBvdmVy
cmlkZTsKLSAgICBMYXllck9yVmlldyAqYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBwcm9jZXNzRGlkRXhpdCgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcGFnZUNsb3NlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVsYXVuY2hQcm9j
ZXNzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcmVmZXJlbmNlc0RpZENoYW5nZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25z
dCBTdHJpbmcmIG5ld1Rvb2xUaXApIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZv
ck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQ
cm92aWRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3Rv
bUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50
U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDdXJz
b3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDdXJzb3JI
aWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRDaGFuZ2VW
aWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBpc1BsYXlpbmdBdWRpb1dpbGxDaGFuZ2UoKSBmaW5hbDsKLSAgICB2
b2lkIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkgZmluYWw7Ci0KLSAgICB2b2lkIHJlZ2lzdGVy
RWRpdENvbW1hbmQoUmVmPFdlYkVkaXRDb21tYW5kUHJveHk+JiYsIFdlYlBhZ2VQcm94eTo6VW5k
b09yUmVkbykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpIG92ZXJy
aWRlOwotICAgIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8p
IG92ZXJyaWRlOwotICAgIGJvb2wgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3Qg
U3RyaW5nJiBzZWxlY3Rvcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBSZWY8U2hhcmVhYmxlQml0bWFwPiYm
IGRyYWdJbWFnZSwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBS
ZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwKLSAg
ICAgICAgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBhcmNoaXZlQnVmZmVyKSBvdmVycmlkZTsKLSNpZiBF
TkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotICAgIHZvaWQgc2V0UHJvbWlzZWREYXRhRm9yQXR0
YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCkgb3ZlcnJpZGU7Ci0jZW5kaWYK
LSAgICB2b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
c2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgbm90aWZ5SW5wdXRDb250
ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VsZWN0
aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6SW50UmVj
dCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvV2luZG93KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKElP
UykKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jv
b3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOwotI2VuZGlmCi0KLSAgICBDR1JlY3QgYm91bmRzT2ZMYXllckluTGF5ZXJC
YWNrZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVyICpsYXllcikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYs
IGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxXZWJQb3B1cE1l
bnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5Jikgb3ZlcnJpZGU7Ci0j
aWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+
IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgQ29udGV4dE1lbnVD
b250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgIFJlZlB0cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRl
Q29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxD
b2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBS
ZWY8V2ViQ29yZTo6VmFsaWRhdGlvbkJ1YmJsZT4gY3JlYXRlVmFsaWRhdGlvbkJ1YmJsZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdlYkNvcmU6OlZhbGlkYXRpb25CdWJibGU6OlNldHRp
bmdzJikgZmluYWw7Ci0KLSAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUmVmPFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3I+LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUpIG92ZXJy
aWRlOwotICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0b3JX
aW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VGV4dEluZGlj
YXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxWaWV3U25hcHNob3Q+IHRha2VWaWV3
U25hcHNob3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlX
ZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUo
TUFDX0dFU1RVUkVfRVZFTlRTKQotICAgIHZvaWQgZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5
V2ViQ29yZShjb25zdCBOYXRpdmVXZWJHZXN0dXJlRXZlbnQmKSBvdmVycmlkZTsKLSNlbmRpZgot
Ci0gICAgdm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5k
b3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIs
IGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRl
eHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMoYm9vbCBzaG91bGRTdXBwcmVzcykg
b3ZlcnJpZGUgeyBtX3Nob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzID0gc2hvdWxk
U3VwcHJlc3M7IH0KLQotICAgIHZvaWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3Qg
V2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaG93
Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNz
aW5nQWx0ZXJuYXRpdmVUZXh0KSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6
OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpIG92ZXJyaWRlOwotCi0gICAgdm9pZCByZWNv
bW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKFdlYkNvcmU6OlNjcm9sbGJhclN0eWxlKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgaW50cmluc2ljQ29udGVudFNpemVEaWRDaGFuZ2UoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgaW50cmluc2ljQ29udGVudFNpemUpIG92ZXJyaWRlOwotCi0jaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgdWludDY0X3QgYWRkRGljdGF0aW9uQWx0
ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9u
Q29udGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2
NF90IGRpY3RhdGlvbkNvbnRleHQpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxTdHJpbmc+IGRpY3Rh
dGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSBvdmVycmlkZTsKLSNl
bmRpZgotICAgIHZvaWQgc2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGJvb2wpIG92ZXJyaWRl
OwotCi0jaWYgVVNFKElOU0VSVElPTl9VTkRPX0dST1VQSU5HKQotICAgIHZvaWQgcmVnaXN0ZXJJ
bnNlcnRpb25VbmRvR3JvdXBpbmcoKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgLy8gQXV4aWxp
YXJ5IENsaWVudCBDcmVhdGlvbgotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50
KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAv
LyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50Ci0gICAgdm9pZCBjbG9zZUZ1bGxTY3Jl
ZW5NYW5hZ2VyKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBvdmVycmlkZTsK
LSAgICB2b2lkIGVudGVyRnVsbFNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZXhpdEZ1bGxT
Y3JlZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmlu
YWxGcmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmlu
YWxGcmFtZSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbigpIG92ZXJyaWRlOwotICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJv
b2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOwotICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRF
bmQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVtb3ZlTmF2aWdh
dGlvbkdlc3R1cmVTbmFwc2hvdCgpIG92ZXJyaWRlOwotCi0gICAgTlNWaWV3ICphY3RpdmVWaWV3
KCkgY29uc3Q7Ci0gICAgTlNXaW5kb3cgKmFjdGl2ZVdpbmRvdygpIGNvbnN0OwotCi0gICAgdm9p
ZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRpZEZhaWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKSBv
dmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUFjdGl2ZU5vd1BsYXlpbmdTZXNz
aW9uSW5mb1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZlU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSwgZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBkaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVz
dWx0RGF0YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqKSBvdmVy
cmlkZTsKLSAgICB2b2lkKiBpbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0
VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiwgdWludDY0X3QsIFJlZlB0cjxB
UEk6Ok9iamVjdD4pIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRIYW5kbGVBY2NlcHRlZENhbmRp
ZGF0ZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzaG93UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUg
KiwgV2ViQ29yZTo6SW50UG9pbnQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRDaGFuZ2VCYWNr
Z3JvdW5kQ29sb3IoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCkgb3Zl
cnJpZGU7Ci0gICAgTlNXaW5kb3cgKnBsYXRmb3JtV2luZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICBX
ZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24oKSBvdmVycmlkZTsKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgTlNWaWV3ICpp
bnNwZWN0b3JBdHRhY2htZW50VmlldygpIG92ZXJyaWRlOwotICAgIF9XS1JlbW90ZU9iamVjdFJl
Z2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBO
U1ZpZXcgKm1fdmlldzsKLSAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKLSAgICBXZWJWaWV3SW1w
bCogbV9pbXBsIHsgbnVsbHB0ciB9OwotI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAg
ICBDb3JyZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9uUGFuZWw7Ci0jZW5kaWYKLSNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyPiBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjsKLSNl
bmRpZgotCi0gICAgYm9vbCBtX3Nob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzIHsg
ZmFsc2UgfTsKLQotI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgV2Vi
Q29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgbWVkaWFTZXNzaW9uTWFuYWdlcigpIG92ZXJy
aWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIHJlZlZpZXcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
cmVmVmlldygpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24o
KSBvdmVycmlkZTsKLSAgICBib29sIHdpbmRvd0lzRnJvbnRXaW5kb3dVbmRlck1vdXNlKGNvbnN0
IE5hdGl2ZVdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAyMjE0NjcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0JKG5vbmV4aXN0ZW50KQpAQCAtMSw4ODYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
UGFnZUNsaWVudEltcGwuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAiQVBJSGl0
VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiQ29sb3JTcGFjZURhdGEuaCIKLSNpbXBvcnQgIkRhdGFS
ZWZlcmVuY2UuaCIKLSNpbXBvcnQgIkRvd25sb2FkUHJveHkuaCIKLSNpbXBvcnQgIkRyYXdpbmdB
cmVhUHJveHkuaCIKLSNpbXBvcnQgIk5hdGl2ZVdlYkdlc3R1cmVFdmVudC5oIgotI2ltcG9ydCAi
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgotI2ltcG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5o
IgotI2ltcG9ydCAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgotI2ltcG9ydCAiTmF2aWdhdGlvblN0
YXRlLmgiCi0jaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbXBvcnQgIlZpZXdHZXN0dXJl
Q29udHJvbGxlci5oIgotI2ltcG9ydCAiVmlld1NuYXBzaG90U3RvcmUuaCIKLSNpbXBvcnQgIldL
QVBJQ2FzdC5oIgotI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIgotI2lt
cG9ydCAiV0tTdHJpbmdDRi5oIgotI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQg
IldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJDb2xvclBpY2tlck1hYy5oIgotI2lt
cG9ydCAiV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oIgotI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQ
cm94eS5oIgotI2ltcG9ydCAiV2ViUG9wdXBNZW51UHJveHlNYWMuaCIKLSNpbXBvcnQgIldlYlZp
ZXdJbXBsLmgiCi0jaW1wb3J0ICJXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmgiCi0jaW1wb3J0ICJf
V0tEb3dubG9hZEludGVybmFsLmgiCi0jaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwu
aCIKLSNpbXBvcnQgIl9XS1RodW1ibmFpbFZpZXcuaCIKLSNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5
TG9va3VwLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
VGV4dEluZGljYXRvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yV2luZG93Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1RleHRVbmRvSW5zZXJ0aW9uTWFya3VwTWFjLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4KLSNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSNpbXBvcnQg
PEFwcEtpdC9OU1RleHRBbHRlcm5hdGl2ZXMuaD4KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkKLSNpbmNsdWRlIDxXZWJDb3JlL1dlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaD4KLSNlbmRpZgotCi1AaW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKFdlYk5TQXBwbGlj
YXRpb25EZXRhaWxzKQotLSAoTlNDdXJzb3IgKilfY3Vyc29yUmVjdEN1cnNvcjsKLUBlbmQKLQot
I2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJfSE9TVElORykKLUBpbnRlcmZhY2UgTlNXaW5k
b3cgKFdlYk5TV2luZG93RGV0YWlscykKLS0gKEJPT0wpX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2
ZXI7Ci1AZW5kCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZUNsaWVudEltcGw6OlBh
Z2VDbGllbnRJbXBsKE5TVmlldyogdmlldywgV0tXZWJWaWV3ICp3ZWJWaWV3KQotICAgIDogbV92
aWV3KHZpZXcpCi0gICAgLCBtX3dlYlZpZXcod2ViVmlldykKLSNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyKHN0ZDo6bWFr
ZV91bmlxdWU8QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyPigpKQotI2VuZGlmCi17Ci0jaWYg
IVdLX0FQSV9FTkFCTEVECi0gICAgQVNTRVJUX1VOVVNFRChtX3dlYlZpZXcsICFtX3dlYlZpZXcp
OwotI2VuZGlmCi19Ci0KLVBhZ2VDbGllbnRJbXBsOjp+UGFnZUNsaWVudEltcGwoKQotewotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0
ZURyYXdpbmdBcmVhUHJveHkoKQotewotICAgIHJldHVybiBtX2ltcGwtPmNyZWF0ZURyYXdpbmdB
cmVhUHJveHkoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpSZWdpb24mKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0U2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQm
IHNjcm9sbFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luLCBib29sIGlzUHJv
Z3JhbW1hdGljU2Nyb2xsKQotewotfQotCi1XZWJDb3JlOjpGbG9hdFBvaW50IFBhZ2VDbGllbnRJ
bXBsOjp2aWV3U2Nyb2xsUG9zaXRpb24oKQotewotICAgIHJldHVybiB7IH07Ci19Ci0KLUludFNp
emUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShbbV92
aWV3IGJvdW5kc10uc2l6ZSk7Ci19Ci0KLU5TVmlldyAqUGFnZUNsaWVudEltcGw6OmFjdGl2ZVZp
ZXcoKSBjb25zdAotewotI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgcmV0dXJuIChtX2ltcGwgJiYg
bV9pbXBsLT50aHVtYm5haWxWaWV3KCkpID8gKE5TVmlldyAqKW1faW1wbC0+dGh1bWJuYWlsVmll
dygpIDogbV92aWV3OwotI2Vsc2UKLSAgICByZXR1cm4gbV92aWV3OwotI2VuZGlmCi19Ci0KLU5T
V2luZG93ICpQYWdlQ2xpZW50SW1wbDo6YWN0aXZlV2luZG93KCkgY29uc3QKLXsKLSNpZiBXS19B
UElfRU5BQkxFRAotICAgIGlmIChtX2ltcGwgJiYgbV9pbXBsLT50aHVtYm5haWxWaWV3KCkpCi0g
ICAgICAgIHJldHVybiBtX2ltcGwtPnRodW1ibmFpbFZpZXcoKS53aW5kb3c7Ci0jZW5kaWYKLSAg
ICBpZiAobV9pbXBsICYmIG1faW1wbC0+dGFyZ2V0V2luZG93Rm9yTW92ZVByZXBhcmF0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPnRhcmdldFdpbmRvd0Zvck1vdmVQcmVwYXJhdGlvbigp
OwotICAgIHJldHVybiBtX3ZpZXcud2luZG93OwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjpp
c1ZpZXdXaW5kb3dBY3RpdmUoKQotewotICAgIE5TV2luZG93ICphY3RpdmVWaWV3V2luZG93ID0g
YWN0aXZlV2luZG93KCk7Ci0gICAgcmV0dXJuIGFjdGl2ZVZpZXdXaW5kb3cuaXNLZXlXaW5kb3cg
fHwgW05TQXBwIGtleVdpbmRvd10gPT0gYWN0aXZlVmlld1dpbmRvdzsKLX0KLQotYm9vbCBQYWdl
Q2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgY2Fs
bGVkIGZyb20gdGhlIFdlYlBhZ2VQcm94eSBjb25zdHJ1Y3RvciBiZWZvcmUgd2UgaGF2ZSBhIFdl
YlZpZXdJbXBsLgotICAgIC8vIE9uY2UgV2ViVmlld0ltcGwgYW5kIFBhZ2VDbGllbnQgbWVyZ2Us
IHRoaXMgd29uJ3QgYmUgYSBwcm9ibGVtLgotICAgIGlmICghbV9pbXBsKQotICAgICAgICByZXR1
cm4gTk87Ci0KLSAgICByZXR1cm4gbV9pbXBsLT5pc0ZvY3VzZWQoKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6bWFrZUZpcnN0UmVzcG9uZGVyKCkKLXsKLSAgICBpZiAobV9zaG91bGRTdXBw
cmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgIFtbbV92
aWV3IHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVyOm1fdmlld107Ci19Ci0gICAgCi1ib29sIFBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKLXsKLSAgICBOU1ZpZXcgKmFjdGl2ZVZpZXcg
PSB0aGlzLT5hY3RpdmVWaWV3KCk7Ci0gICAgTlNXaW5kb3cgKmFjdGl2ZVZpZXdXaW5kb3cgPSBh
Y3RpdmVXaW5kb3coKTsKLQotICAgIGlmICghYWN0aXZlVmlld1dpbmRvdykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFhY3RpdmVWaWV3V2luZG93LmlzVmlzaWJsZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGFjdGl2ZVZpZXcuaXNIaWRkZW5Pckhhc0hpZGRl
bkFuY2VzdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9pbXBsLT53aW5k
b3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKCkgJiYgKGFjdGl2ZVZpZXdXaW5kb3cub2NjbHVz
aW9uU3RhdGUgJiBOU1dpbmRvd09jY2x1c2lvblN0YXRlVmlzaWJsZSkgIT0gTlNXaW5kb3dPY2Ns
dXNpb25TdGF0ZVZpc2libGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlT3JPY2NsdWRlZCgp
Ci17Ci0gICAgcmV0dXJuIGFjdGl2ZVdpbmRvdygpLmlzVmlzaWJsZTsKLX0KLQotYm9vbCBQYWdl
Q2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQotewotICAgIHJldHVybiBhY3RpdmVXaW5kb3co
KTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaXN1YWxseUlkbGUoKQotewotICAgIHJl
dHVybiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpzaW5nbGV0b24oKS5hcHBsaWNhdGlvbldpbmRv
d01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZCgpIHx8ICFpc1ZpZXdWaXNpYmxlKCk7Ci19Ci0KLUxh
eWVySG9zdGluZ01vZGUgUGFnZUNsaWVudEltcGw6OnZpZXdMYXllckhvc3RpbmdNb2RlKCkKLXsK
LSNpZiBIQVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVSX0hPU1RJTkcpCi0gICAgaWYgKFthY3RpdmVX
aW5kb3coKSBfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcl0pCi0gICAgICAgIHJldHVybiBMYXll
ckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M7Ci0jZW5kaWYKLSAgICByZXR1cm4gTGF5ZXJIb3N0
aW5nTW9kZTo6SW5Qcm9jZXNzOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp2aWV3V2lsbE1v
dmVUb0Fub3RoZXJXaW5kb3coKQotewotICAgIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci19Ci0K
LUNvbG9yU3BhY2VEYXRhIFBhZ2VDbGllbnRJbXBsOjpjb2xvclNwYWNlKCkKLXsKLSAgICByZXR1
cm4gbV9pbXBsLT5jb2xvclNwYWNlKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nl
c3NEaWRFeGl0KCkKLXsKLSAgICBtX2ltcGwtPnByb2Nlc3NEaWRFeGl0KCk7Ci19Ci0KLXZvaWQg
UGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQotewotICAgIG1faW1wbC0+cGFnZUNsb3NlZCgp
OwotI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQotICAgIG1fYWx0ZXJuYXRpdmVUZXh0
VUlDb250cm9sbGVyLT5jbGVhcigpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6
OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAgbV9pbXBsLT5kaWRSZWxhdW5jaFByb2Nlc3Mo
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UoKQotewot
ICAgIG1faW1wbC0+cHJlZmVyZW5jZXNEaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50
SW1wbDo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJp
bmcmIG5ld1Rvb2xUaXApCi17Ci0gICAgbV9pbXBsLT50b29sVGlwQ2hhbmdlZChvbGRUb29sVGlw
LCBuZXdUb29sVGlwKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZv
ck1haW5GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQ
cm92aWRlcikKLXsKLSAgICBtX2ltcGwtPnVwZGF0ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9k
ZXMoKTsKLSAgICBtX2ltcGwtPmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NXaXRo
QW5pbWF0aW9uKHRydWUpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2Fk
aW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpCi17Ci19Ci0K
LXZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5
KiBkb3dubG9hZCkKLXsKLSAgICBBU1NFUlRfQVJHKGRvd25sb2FkLCBkb3dubG9hZCk7Ci0jaWYg
V0tfQVBJX0VOQUJMRUQKLSAgICBBU1NFUlQoW2Rvd25sb2FkLT53cmFwcGVyKCkgaXNLaW5kT2ZD
bGFzczpbX1dLRG93bmxvYWQgY2xhc3NdXSk7Ci0gICAgW3N0YXRpY19jYXN0PF9XS0Rvd25sb2Fk
ICo+KGRvd25sb2FkLT53cmFwcGVyKCkpIHNldE9yaWdpbmF0aW5nV2ViVmlldzptX3dlYlZpZXdd
OwotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNvbnRlbnRTaXpl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCi17Ci0gICAgbV9pbXBsLT5kaWRDaGFu
Z2VDb250ZW50U2l6ZShuZXdTaXplKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vy
c29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKQotewotICAgIC8vIEZJWE1FOiBXb3Vs
ZCBiZSBuaWNlIHRvIHNoYXJlIHRoaXMgY29kZSB3aXRoIFdlYktpdDEncyBXZWJDaHJvbWVDbGll
bnQuCi0KLSAgICAvLyBUaGUgV2ViIHByb2Nlc3MgbWF5IGhhdmUgYXNrZWQgdG8gY2hhbmdlIHRo
ZSBjdXJzb3Igd2hlbiB0aGUgdmlldyB3YXMgaW4gYW4gYWN0aXZlIHdpbmRvdywgYnV0Ci0gICAg
Ly8gaWYgaXQgaXMgbm8gbG9uZ2VyIGluIGEgd2luZG93IG9yIHRoZSB3aW5kb3cgaXMgbm90IGFj
dGl2ZSwgdGhlbiB0aGUgY3Vyc29yIHNob3VsZCBub3QgY2hhbmdlLgotICAgIGlmICghaXNWaWV3
V2luZG93QWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbTlNBcHAgX2N1cnNv
clJlY3RDdXJzb3JdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fdmlldykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFttX3ZpZXcgd2luZG93XTsKLSAg
ICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFt3aW5kb3cgd2luZG93
TnVtYmVyXSAhPSBbTlNXaW5kb3cgd2luZG93TnVtYmVyQXRQb2ludDpbTlNFdmVudCBtb3VzZUxv
Y2F0aW9uXSBiZWxvd1dpbmRvd1dpdGhXaW5kb3dOdW1iZXI6MF0pCi0gICAgICAgIHJldHVybjsK
LQotICAgIE5TQ3Vyc29yICpwbGF0Zm9ybUN1cnNvciA9IGN1cnNvci5wbGF0Zm9ybUN1cnNvcigp
OwotICAgIGlmIChbTlNDdXJzb3IgY3VycmVudEN1cnNvcl0gPT0gcGxhdGZvcm1DdXJzb3IpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFtwbGF0Zm9ybUN1cnNvciBzZXRdOwotfQotCi12b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5V
bnRpbE1vdXNlTW92ZXMpCi17Ci0gICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3Zl
czpoaWRkZW5VbnRpbE1vdXNlTW92ZXNdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRD
aGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVz
JikKLXsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJFZGl0Q29tbWFuZChSZWY8
V2ViRWRpdENvbW1hbmRQcm94eT4mJiBjb21tYW5kLCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8g
dW5kb09yUmVkbykKLXsKLSAgICBtX2ltcGwtPnJlZ2lzdGVyRWRpdENvbW1hbmQoV1RGTW92ZShj
b21tYW5kKSwgdW5kb09yUmVkbyk7Ci19Ci0KLSNpZiBVU0UoSU5TRVJUSU9OX1VORE9fR1JPVVBJ
TkcpCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygp
Ci17Ci0gICAgcmVnaXN0ZXJJbnNlcnRpb25VbmRvR3JvdXBpbmdXaXRoVW5kb01hbmFnZXIoW21f
dmlldyB1bmRvTWFuYWdlcl0pOwotfQotI2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNs
ZWFyQWxsRWRpdENvbW1hbmRzKCkKLXsKLSAgICBtX2ltcGwtPmNsZWFyQWxsRWRpdENvbW1hbmRz
KCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIHJldHVybiAodW5kb09yUmVkbyA9PSBXZWJQ
YWdlUHJveHk6OlVuZG8pID8gW1ttX3ZpZXcgdW5kb01hbmFnZXJdIGNhblVuZG9dIDogW1ttX3Zp
ZXcgdW5kb01hbmFnZXJdIGNhblJlZG9dOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVj
dXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCi17Ci0gICAg
cmV0dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94eTo6VW5kbykgPyBbW21fdmlldyB1bmRv
TWFuYWdlcl0gdW5kb10gOiBbW21fdmlldyB1bmRvTWFuYWdlcl0gcmVkb107Ci19Ci0KLXZvaWQg
UGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZShjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRp
b24sIFJlZjxTaGFyZWFibGVCaXRtYXA+JiYgZHJhZ0ltYWdlLCBEcmFnU291cmNlQWN0aW9uIGFj
dGlvbikKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZHJhZ0NHSW1hZ2UgPSBkcmFnSW1h
Z2UtPm1ha2VDR0ltYWdlKCk7Ci0gICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdOU0ltYWdlID0g
YWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpkcmFnQ0dJbWFnZS5nZXQo
KSBzaXplOmRyYWdJbWFnZS0+c2l6ZSgpXSk7Ci0gICAgSW50U2l6ZSBzaXplKFtkcmFnTlNJbWFn
ZSBzaXplXSk7Ci0gICAgc2l6ZS5zY2FsZSgxLjAgLyBtX2ltcGwtPnBhZ2UoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKLSAgICBbZHJhZ05TSW1hZ2Ugc2V0U2l6ZTpzaXplXTsKLQotICAgIG1faW1w
bC0+ZHJhZ0ltYWdlRm9yVmlldyhtX3ZpZXcsIGRyYWdOU0ltYWdlLmdldCgpLCBjbGllbnRQb3Np
dGlvbiwgYWN0aW9uID09IERyYWdTb3VyY2VBY3Rpb25MaW5rKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhRm9ySW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlciwgY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVVUkwsIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+JiYgYXJjaGl2ZUJ1ZmZlcikKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZSgpOwotICAgIGltYWdlLT5zZXREYXRhKFdURk1vdmUoaW1hZ2VCdWZmZXIp
LCB0cnVlKTsKLSAgICBtX2ltcGwtPnNldFByb21pc2VkRGF0YUZvckltYWdlKGltYWdlLmdldCgp
LCBmaWxlbmFtZSwgZXh0ZW5zaW9uLCB0aXRsZSwgdXJsLCB2aXNpYmxlVVJMLCBhcmNoaXZlQnVm
ZmVyLmdldCgpLCBwYXN0ZWJvYXJkTmFtZSk7Ci19Ci0KLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9F
TEVNRU5UKQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVu
dChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVSTCkKLXsKLSAgICBtX2ltcGwtPnNldFByb21p
c2VkRGF0YUZvckF0dGFjaG1lbnQoZmlsZW5hbWUsIGV4dGVuc2lvbiwgdGl0bGUsIHVybCwgdmlz
aWJsZVVSTCwgcGFzdGVib2FyZE5hbWUpOwotfQotI2VuZGlmCi0KLXZvaWQgUGFnZUNsaWVudElt
cGw6OnVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKQotewotICAgIG1faW1wbC0+dXBkYXRlU2VjdXJl
SW5wdXRTdGF0ZSgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXNldFNlY3VyZUlucHV0
U3RhdGUoKQotewotICAgIG1faW1wbC0+cmVzZXRTZWN1cmVJbnB1dFN0YXRlKCk7Ci19Ci0KLXZv
aWQgUGFnZUNsaWVudEltcGw6Om5vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9z
aXRpb24oKQotewotICAgIG1faW1wbC0+bm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRD
b21wb3NpdGlvbigpOwotfQotCi1GbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0Rl
dmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gdG9EZXZpY2VT
cGFjZShyZWN0LCBbbV92aWV3IHdpbmRvd10pOwotfQotCi1GbG9hdFJlY3QgUGFnZUNsaWVudElt
cGw6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0
dXJuIHRvVXNlclNwYWNlKHJlY3QsIFttX3ZpZXcgd2luZG93XSk7Ci19Ci0gICAKLUludFBvaW50
IFBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkK
LXsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICBOU1BvaW50IHdpbmRv
d0Nvb3JkID0gW1ttX3ZpZXcgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICByZXR1cm4gSW50UG9pbnQoW21fdmlldyBj
b252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZpZXc6bmlsXSk7Ci19Ci0gICAgCi1JbnRSZWN0
IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgTlNSZWN0IHRlbXBSZWN0ID0gcmVjdDsKLSAgICB0ZW1wUmVjdCA9IFttX3ZpZXcgY29u
dmVydFJlY3Q6dGVtcFJlY3QgdG9WaWV3Om5pbF07Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiCi0gICAgdGVtcFJlY3Qub3JpZ2luID0gW1ttX3ZpZXcgd2luZG93XSBjb252ZXJ0
QmFzZVRvU2NyZWVuOnRlbXBSZWN0Lm9yaWdpbl07Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QodGVtcFJlY3QpOwotfQotCi1JbnRSZWN0
IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHJlY3QpCi17Ci0gICAgTlNSZWN0IHRlbXBSZWN0ID0gcmVjdDsKLSAgICB0ZW1wUmVjdCA9IFtt
X3ZpZXcgY29udmVydFJlY3Q6dGVtcFJlY3QgdG9WaWV3Om5pbF07Ci0gICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QodGVtcFJlY3QpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0
aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBib29sIGV2ZW50
V2FzSGFuZGxlZCkKLXsKLSAgICBtX2ltcGwtPmRvbmVXaXRoS2V5RXZlbnQoZXZlbnQubmF0aXZl
RXZlbnQoKSwgZXZlbnRXYXNIYW5kbGVkKTsKLX0KLQotUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5
PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JiBwYWdl
KQotewotICAgIHJldHVybiBXZWJQb3B1cE1lbnVQcm94eU1hYzo6Y3JlYXRlKG1fdmlldywgcGFn
ZSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLVJlZlB0cjxXZWJDb250ZXh0TWVu
dVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJv
eHkmIHBhZ2UsIGNvbnN0IENvbnRleHRNZW51Q29udGV4dERhdGEmIGNvbnRleHQsIGNvbnN0IFVz
ZXJEYXRhJiB1c2VyRGF0YSkKLXsKLSAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
Y3JlYXRlKG1fdmlldywgcGFnZSwgY29udGV4dCwgdXNlckRhdGEpOwotfQotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKLVJlZlB0cjxXZWJDb2xvclBpY2tlcj4gUGFnZUNs
aWVudEltcGw6OmNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgcmV0dXJuIFdlYkNvbG9yUGlja2VyTWFjOjpjcmVhdGUocGFnZSwgaW5pdGlhbENv
bG9yLCByZWN0LCBtX3ZpZXcpOwotfQotI2VuZGlmCi0KLVJlZjxWYWxpZGF0aW9uQnViYmxlPiBQ
YWdlQ2xpZW50SW1wbDo6Y3JlYXRlVmFsaWRhdGlvbkJ1YmJsZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIGNvbnN0IFZhbGlkYXRpb25CdWJibGU6OlNldHRpbmdzJiBzZXR0aW5ncykKLXsKLSAgICBy
ZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1fdmlldywgbWVzc2FnZSwgc2V0dGluZ3Mp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKFJlZjxUZXh0SW5k
aWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRp
bWUgbGlmZXRpbWUpCi17Ci0gICAgbV9pbXBsLT5zZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRpY2F0
b3IuZ2V0KCksIGxpZmV0aW1lKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJUZXh0
SW5kaWNhdG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24g
ZGlzbWlzc2FsQW5pbWF0aW9uKQotewotICAgIG1faW1wbC0+Y2xlYXJUZXh0SW5kaWNhdG9yV2l0
aEFuaW1hdGlvbihkaXNtaXNzYWxBbmltYXRpb24pOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpzZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3MoZmxvYXQgcHJvZ3Jlc3MpCi17Ci0g
ICAgbV9pbXBsLT5zZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3MocHJvZ3Jlc3MpOwot
fQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjphY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVj
ZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQotewotICAgIG1faW1wbC0+c2V0
QWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbihbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5k
YXRhKCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXSk7Ci19Ci0gICAgCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQm
IGxheWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUKCFsYXllclRyZWVDb250ZXh0LmlzRW1w
dHkoKSk7Ci0KLSAgICBDQUxheWVyICpyZW5kZXJMYXllciA9IFdLTWFrZVJlbmRlckxheWVyKGxh
eWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKLSAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSb290TGF5ZXIocmVuZGVyTGF5ZXIpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAgIG1faW1wbC0+c2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihuaWwpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJ
bXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250
ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAgIEFTU0VSVCghbGF5ZXJUcmVlQ29udGV4dC5p
c0VtcHR5KCkpOwotCi0gICAgQ0FMYXllciAqcmVuZGVyTGF5ZXIgPSBXS01ha2VSZW5kZXJMYXll
cihsYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCk7Ci0gICAgbV9pbXBsLT5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nUm9vdExheWVyKHJlbmRlckxheWVyKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50
SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihDQUxheWVyICpyb290TGF5
ZXIpCi17Ci0gICAgbV9pbXBsLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJv
b3RMYXllcik7Ci19Ci0KLUNBTGF5ZXIgKlBhZ2VDbGllbnRJbXBsOjphY2NlbGVyYXRlZENvbXBv
c2l0aW5nUm9vdExheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nUm9vdExheWVyKCk7Ci19Ci0KLVJlZlB0cjxWaWV3U25hcHNob3Q+IFBhZ2VD
bGllbnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KCkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT50YWtl
Vmlld1NuYXBzaG90KCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnNlbGVjdGlvbkRpZENo
YW5nZSgpCi17Ci0gICAgbV9pbXBsLT5zZWxlY3Rpb25EaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0
aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xs
ZXIgPSBtX2ltcGwtPmdlc3R1cmVDb250cm9sbGVyKCkpCi0gICAgICAgIGdlc3R1cmVDb250cm9s
bGVyLT53aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShldmVudC5uYXRpdmVFdmVudCgp
KTsKLX0KLQotI2lmIEVOQUJMRShNQUNfR0VTVFVSRV9FVkVOVFMpCi12b2lkIFBhZ2VDbGllbnRJ
bXBsOjpnZXN0dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYkdl
c3R1cmVFdmVudCYgZXZlbnQpCi17Ci0gICAgbV9pbXBsLT5nZXN0dXJlRXZlbnRXYXNOb3RIYW5k
bGVkQnlXZWJDb3JlKGV2ZW50Lm5hdGl2ZUV2ZW50KCkpOwotfQotI2VuZGlmCi0KLXZvaWQgUGFn
ZUNsaWVudEltcGw6OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1
Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5k
b3dIYXNGb2N1cykKLXsKLSAgICBtX2ltcGwtPnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5n
ZWQocGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cywgcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQbHVnaW5Db21wbGV4
VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIs
IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUp
Ci17Ci0gICAgbV9pbXBsLT5zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGVBbmRJZGVudGlm
aWVyKHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSwgcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXIpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRQZXJmb3JtRGljdGlvbmFy
eUxvb2t1cChjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvKQot
ewotICAgIG1faW1wbC0+cHJlcGFyZUZvckRpY3Rpb25hcnlMb29rdXAoKTsKLQotICAgIERpY3Rp
b25hcnlMb29rdXA6OnNob3dQb3B1cChkaWN0aW9uYXJ5UG9wdXBJbmZvLCBtX3ZpZXcsIFt0aGlz
XShUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0VGV4
dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLCBUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWU6OlBl
cm1hbmVudCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0
aW9uUGFuZWwoQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVy
bmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQotewotI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5F
TCkKLSAgICBpZiAoIWlzVmlld1Zpc2libGUoKSB8fCAhaXNWaWV3SW5XaW5kb3coKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsLnNob3cobV92aWV3LCAqbV9pbXBsLCB0
eXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNl
bWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwotI2VuZGlmCi19Ci0K
LXZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCi17Ci0jaWYgVVNFKEFVVE9DT1JSRUNUSU9O
X1BBTkVMKQotICAgIG1fY29ycmVjdGlvblBhbmVsLmRpc21pc3MocmVhc29uKTsKLSNlbmRpZgot
fQotCi1TdHJpbmcgUGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdl
YkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQotewotI2lm
IFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWwu
ZGlzbWlzcyhyZWFzb24pOwotI2Vsc2UKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci0jZW5kaWYKLX0K
LQotc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25SZXNwb25zZSB0b0NvcnJlY3Rpb25SZXNwb25z
ZShBdXRvY29ycmVjdGlvblJlc3BvbnNlIHJlc3BvbnNlKQotewotICAgIHN3aXRjaCAocmVzcG9u
c2UpIHsKLSAgICBjYXNlIFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVk
OgotICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnRlZDsKLSAgICBjYXNl
IFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkVkaXRlZDoKLSAgICAgICAgcmV0dXJu
IE5TQ29ycmVjdGlvblJlc3BvbnNlRWRpdGVkOwotICAgIGNhc2UgV2ViQ29yZTo6QXV0b2NvcnJl
Y3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQ6Ci0gICAgICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNw
b25zZUFjY2VwdGVkOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBOU0NvcnJlY3Rpb25SZXNwb25zZUFjY2VwdGVkOwotfQotCi12b2lkIFBhZ2VDbGllbnRJ
bXBsOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Ug
cmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcpCi17Ci0gICAgQ29ycmVjdGlvblBhbmVsOjpyZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKG1faW1wbC0+c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSwgdG9Db3JyZWN0
aW9uUmVzcG9uc2UocmVzcG9uc2UpLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlk
Q2hhbmdlKFNjcm9sbGJhclN0eWxlIG5ld1N0eWxlKQotewotICAgIC8vIE5vdyByZS1jcmVhdGUg
YSB0cmFja2luZyBhcmVhIHdpdGggdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgZ2l2ZW4gdGhlIG5l
dyBzY3JvbGxiYXIgc3R5bGUKLSAgICBOU1RyYWNraW5nQXJlYU9wdGlvbnMgb3B0aW9ucyA9IE5T
VHJhY2tpbmdNb3VzZU1vdmVkIHwgTlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5T
VHJhY2tpbmdJblZpc2libGVSZWN0IHwgTlNUcmFja2luZ0N1cnNvclVwZGF0ZTsKLSAgICBpZiAo
bmV3U3R5bGUgPT0gU2Nyb2xsYmFyU3R5bGU6OkFsd2F5c1Zpc2libGUpCi0gICAgICAgIG9wdGlv
bnMgfD0gTlNUcmFja2luZ0FjdGl2ZUFsd2F5czsKLSAgICBlbHNlCi0gICAgICAgIG9wdGlvbnMg
fD0gTlNUcmFja2luZ0FjdGl2ZUluS2V5V2luZG93OwotCi0gICAgUmV0YWluUHRyPE5TVHJhY2tp
bmdBcmVhPiB0cmFja2luZ0FyZWEgPSBhZG9wdE5TKFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGlu
aXRXaXRoUmVjdDpbbV92aWV3IGZyYW1lXSBvcHRpb25zOm9wdGlvbnMgb3duZXI6bV92aWV3IHVz
ZXJJbmZvOm5pbF0pOwotICAgIG1faW1wbC0+c2V0UHJpbWFyeVRyYWNraW5nQXJlYSh0cmFja2lu
Z0FyZWEuZ2V0KCkpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjppbnRyaW5zaWNDb250ZW50
U2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBpbnRyaW5zaWNDb250ZW50U2l6ZSkKLXsKLSAg
ICBtX2ltcGwtPnNldEludHJpbnNpY0NvbnRlbnRTaXplKGludHJpbnNpY0NvbnRlbnRTaXplKTsK
LX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3Io
Y29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5leGVj
dXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcihOU1NlbGVjdG9yRnJvbVN0cmluZyhzZWxlY3RvclN0
cmluZykpOwotfQotCi0jaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi11aW50NjRfdCBQ
YWdlQ2xpZW50SW1wbDo6YWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxO
U1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRlcm5hdGl2ZXMpCi17Ci0gICAgcmV0dXJuIG1fYWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyLT5hZGRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKLX0K
LQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2
NF90IGRpY3RhdGlvbkNvbnRleHQpCi17Ci0gICAgbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXItPnJlbW92ZUFsdGVybmF0aXZlcyhkaWN0YXRpb25Db250ZXh0KTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2hvd0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250
ZXh0KQotewotICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPnNob3dB
bHRlcm5hdGl2ZXMobV92aWV3LCBib3VuZGluZ0JveE9mRGljdGF0ZWRUZXh0LCBkaWN0YXRpb25D
b250ZXh0LCBeKE5TU3RyaW5nICphY2NlcHRlZEFsdGVybmF0aXZlKSB7Ci0gICAgICAgIG1faW1w
bC0+aGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQoYWNjZXB0ZWRBbHRlcm5hdGl2ZSk7Ci0g
ICAgfSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBhZ2VDbGllbnRJbXBsOjpkaWN0YXRpb25BbHRl
cm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKLXsKLSAgICByZXR1cm4gbV9hbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPmFsdGVybmF0aXZlc0ZvckNvbnRleHQoZGljdGF0aW9u
Q29udGV4dCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RWRpdGFibGVF
bGVtZW50SXNGb2N1c2VkKGJvb2wgZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKQotewotICAgIG1f
aW1wbC0+c2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGVkaXRhYmxlRWxlbWVudElzRm9jdXNl
ZCk7Ci19Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0KLVdlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlDbGllbnQmIFBhZ2VDbGllbnRJbXBsOjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xp
ZW50KCkKLXsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLS8vIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlDbGllbnQKLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xvc2VGdWxsU2NyZWVuTWFuYWdl
cigpCi17Ci0gICAgbV9pbXBsLT5jbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCk7Ci19
Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmlzRnVsbFNjcmVlbigpCi17Ci0gICAgaWYgKCFtX2lt
cGwtPmhhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBtX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCkuaXNG
dWxsU2NyZWVuOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckZ1bGxTY3JlZW4oKQot
ewotICAgIFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCkgZW50ZXJGdWxsU2Ny
ZWVuOm5pbF07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmV4aXRGdWxsU2NyZWVuKCkKLXsK
LSAgICBbbV9pbXBsLT5mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpIGV4aXRGdWxsU2NyZWVu
XTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3Qg
SW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBJbnRSZWN0JiBmaW5hbEZyYW1lKQotewotICAg
IFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCkgYmVnYW5FbnRlckZ1bGxTY3Jl
ZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwot
ICAgIG1faW1wbC0+dXBkYXRlU3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpOwotfQotCi12
b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IEludFJlY3QmIGlu
aXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgZmluYWxGcmFtZSkKLXsKLSAgICBbbV9pbXBsLT5m
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpIGJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlh
bEZyYW1lOmluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwotICAgIG1faW1wbC0+
dXBkYXRlU3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpOwotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZURpZEJlZ2luKCkKLXsKLSAgICBtX2ltcGwtPmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGls
ZFdpbmRvd3NXaXRoQW5pbWF0aW9uKHRydWUpOwotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBp
ZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dl
YlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5h
dmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQotewotI2lmIFdLX0FQSV9FTkFC
TEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2Vi
UGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZp
Z2F0ZSwgaXRlbSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwotICAg
IFVOVVNFRF9QQVJBTShpdGVtKTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpu
YXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSYgaXRlbSkKLXsKLSNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcp
Ci0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2Up
Lm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSNl
bmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCgp
Ci17Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNo
b3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKLXsKLSNpZiBXS19BUElfRU5BQkxFRAot
ICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2Uo
Km1fd2ViVmlldy0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkKLXsKLSNpZiBXS19B
UElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6
ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RX
YXNSZW1vdmVkKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCkKLXsKLSAgICBpZiAoYXV0byBnZXN0
dXJlQ29udHJvbGxlciA9IG1faW1wbC0+Z2VzdHVyZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgZ2Vz
dHVyZUNvbnRyb2xsZXItPmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvck1haW5GcmFt
ZSgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkRm9yTWFpbkZyYW1l
KCkKLXsKLSAgICBpZiAoYXV0byBnZXN0dXJlQ29udHJvbGxlciA9IG1faW1wbC0+Z2VzdHVyZUNv
bnRyb2xsZXIoKSkKLSAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXItPmRpZEZpbmlzaExvYWRGb3JN
YWluRnJhbWUoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmFpbExvYWRGb3JNYWlu
RnJhbWUoKQotewotICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gbV9pbXBsLT5nZXN0
dXJlQ29udHJvbGxlcigpKQotICAgICAgICBnZXN0dXJlQ29udHJvbGxlci0+ZGlkRmFpbExvYWRG
b3JNYWluRnJhbWUoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbkZvck1haW5GcmFtZShTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBlKQot
ewotICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJv
bGxlcigpKQotICAgICAgICBnZXN0dXJlQ29udHJvbGxlci0+ZGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvck1haW5GcmFtZSh0eXBlKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxl
Q29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsK
LSNpZiBXS19BUElfRU5BQkxFRAotICAgIFttX3dlYlZpZXcgX2hhbmRsZUNvbnRyb2xsZWRFbGVt
ZW50SURSZXNwb25zZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGlkZW50aWZpZXIpXTsKLSNl
bmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vz
c2lvbkluZm9SZXNwb25zZShib29sIGhhc0FjdGl2ZVNlc3Npb24sIGNvbnN0IFN0cmluZyYgdGl0
bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lKQotewotI2lmIFdLX0FQSV9F
TkFCTEVECi0gICAgW21fd2ViVmlldyBfaGFuZGxlQWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZv
UmVzcG9uc2U6aGFzQWN0aXZlU2Vzc2lvbiB0aXRsZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5n
KHRpdGxlKSBkdXJhdGlvbjpkdXJhdGlvbiBlbGFwc2VkVGltZTplbGFwc2VkVGltZV07Ci0jZW5k
aWYKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQmFja2dyb3VuZENvbG9yKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1DR1JlY3QgUGFnZUNsaWVudEltcGw6OmJv
dW5kc09mTGF5ZXJJbkxheWVyQmFja2VkV2luZG93Q29vcmRpbmF0ZXMoQ0FMYXllciAqbGF5ZXIp
IGNvbnN0Ci17Ci0gICAgQ0FMYXllciAqd2luZG93Q29udGVudExheWVyID0gc3RhdGljX2Nhc3Q8
TlNWaWV3ICo+KG1fdmlldy53aW5kb3cuY29udGVudFZpZXcpLmxheWVyOwotICAgIEFTU0VSVCh3
aW5kb3dDb250ZW50TGF5ZXIpOwotCi0gICAgcmV0dXJuIFt3aW5kb3dDb250ZW50TGF5ZXIgY29u
dmVydFJlY3Q6bGF5ZXIuYm91bmRzIGZyb21MYXllcjpsYXllcl07Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRl
c3RSZXN1bHREYXRhJiByZXN1bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpP
YmplY3QqIHVzZXJEYXRhKQotewotICAgIG1faW1wbC0+ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3QocmVzdWx0LCBjb250ZW50UHJldmVudHNEZWZhdWx0LCB1c2VyRGF0YSk7Ci19Ci0K
LXZvaWQqIFBhZ2VDbGllbnRJbXBsOjppbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVy
Rm9ySGl0VGVzdFJlc3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0
LCB1aW50NjRfdCB0eXBlLCBSZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhKQotewotICAgIHJl
dHVybiBtX2ltcGwtPmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0
UmVzdWx0KGhpdFRlc3RSZXN1bHQuZ2V0KCksIHR5cGUsIHVzZXJEYXRhLmdldCgpKTsKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoKQotewotICAg
IG1faW1wbC0+ZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKQotewotICAgIG1faW1wbC0+
dmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2hvd1BsYXRmb3JtQ29udGV4dE1lbnUoTlNNZW51ICptZW51LCBJbnRQb2ludCBsb2NhdGlv
bikKLXsKLSAgICBbbWVudSBwb3BVcE1lbnVQb3NpdGlvbmluZ0l0ZW06bmlsIGF0TG9jYXRpb246
bG9jYXRpb24gaW5WaWV3Om1fdmlld107Ci19Ci0KLSNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJB
Q0tfVEFSR0VUKQotV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgUGFnZUNsaWVudElt
cGw6Om1lZGlhU2Vzc2lvbk1hbmFnZXIoKQotewotICAgIHJldHVybiBXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyOjpzaGFyZWQoKTsKLX0KLSNlbmRpZgotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWZW
aWV3KCkKLXsKLSAgICBDRlJldGFpbihtX3ZpZXcpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpkZXJlZlZpZXcoKQotewotICAgIENGUmVsZWFzZShtX3ZpZXcpOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpzdGFydFdpbmRvd0RyYWcoKQotewotICAgIG1faW1wbC0+c3RhcnRXaW5kb3dE
cmFnKCk7Ci19Ci0KLU5TV2luZG93ICpQYWdlQ2xpZW50SW1wbDo6cGxhdGZvcm1XaW5kb3coKQot
ewotICAgIHJldHVybiBtX2ltcGwtPndpbmRvdygpOwotfQotCi0jaWYgV0tfQVBJX0VOQUJMRUQK
LU5TVmlldyAqUGFnZUNsaWVudEltcGw6Omluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCkKLXsKLSAg
ICByZXR1cm4gbV9pbXBsLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotfQotCi1fV0tSZW1v
dGVPYmplY3RSZWdpc3RyeSAqUGFnZUNsaWVudEltcGw6OnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCkK
LXsKLSAgICByZXR1cm4gbV9pbXBsLT5yZW1vdGVPYmplY3RSZWdpc3RyeSgpOwotfQotI2VuZGlm
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCi17Ci0g
ICAgbV9pbXBsLT5kaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKLX0KLQotYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6d2luZG93SXNGcm9udFdpbmRvd1VuZGVyTW91c2UoY29uc3QgTmF0aXZlV2ViTW91
c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgcmV0dXJuIG1faW1wbC0+d2luZG93SXNGcm9udFdpbmRv
d1VuZGVyTW91c2UoZXZlbnQubmF0aXZlRXZlbnQoKSk7Ci19Ci0KLVdlYkNvcmU6OlVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb24gUGFnZUNsaWVudEltcGw6OnVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24oKQotewotICAgIGlmICghbV92aWV3KQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOwotICAgIHJldHVybiAobV92aWV3LnVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPT0gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uTGVmdFRvUmlnaHQpID8gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6
TFRSIDogV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6UlRMOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5t
bQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZl
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCShyZXZpc2lvbiAyMjE0ODkpCShm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oOjIyMTQ4OSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJDb3JyZWN0aW9uUGFu
ZWwuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGNsYXNzIFdLRWRp
dG9yVW5kb1RhcmdldE9iakM7CitAY2xhc3MgV0tWaWV3OworQGNsYXNzIFdLV2ViVmlldzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlld0ltcGw7CisKK2NsYXNzIFBh
Z2VDbGllbnRJbXBsIGZpbmFsIDogcHVibGljIFBhZ2VDbGllbnQKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisgICAgLCBwdWJsaWMgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAor
I2VuZGlmCisgICAgeworcHVibGljOgorICAgIFBhZ2VDbGllbnRJbXBsKE5TVmlldyAqLCBXS1dl
YlZpZXcgKik7CisgICAgdmlydHVhbCB+UGFnZUNsaWVudEltcGwoKTsKKworICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IFdlYlZpZXdJbXBsIHNob3VsZCBiZWNvbWUgdGhlIFBhZ2VDbGllbnQuCisg
ICAgdm9pZCBzZXRJbXBsKFdlYlZpZXdJbXBsJiBpbXBsKSB7IG1faW1wbCA9ICZpbXBsOyB9CisK
KyAgICB2b2lkIHZpZXdXaWxsTW92ZVRvQW5vdGhlcldpbmRvdygpOworCitwcml2YXRlOgorICAg
IC8vIFBhZ2VDbGllbnQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gY3Jl
YXRlRHJhd2luZ0FyZWFQcm94eSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Vmlld05lZWRzRGlz
cGxheShjb25zdCBXZWJDb3JlOjpSZWdpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RT
Y3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBzY3JvbGxPcmlnaW4sIGJvb2wgaXNQcm9ncmFtbWF0aWNTY3JvbGwp
IG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdmlld1Njcm9sbFBvc2l0aW9uKCkg
b3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmlld0Zv
Y3VzZWQoKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmlld1Zpc2libGUoKSBvdmVycmlkZTsKKyAg
ICBib29sIGlzVmlld1Zpc2libGVPck9jY2x1ZGVkKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1Zp
ZXdJbldpbmRvdygpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWaXN1YWxseUlkbGUoKSBvdmVycmlk
ZTsKKyAgICBMYXllckhvc3RpbmdNb2RlIHZpZXdMYXllckhvc3RpbmdNb2RlKCkgb3ZlcnJpZGU7
CisgICAgQ29sb3JTcGFjZURhdGEgY29sb3JTcGFjZSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihMYXllck9yVmlldyAqKSBvdmVycmlkZTsK
KyAgICBMYXllck9yVmlldyAqYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgdm9pZCBwcm9jZXNzRGlkRXhpdCgpIG92ZXJyaWRlOworICAgIHZv
aWQgcGFnZUNsb3NlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBwcmVmZXJlbmNlc0RpZENoYW5nZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJp
bmcmIG5ld1Rvb2xUaXApIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5G
cmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRl
cikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRl
bnRQcm92aWRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChE
b3dubG9hZFByb3h5Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDdXJzb3IoY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9y
dFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBpc1BsYXlpbmdBdWRpb1dpbGxDaGFuZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGlz
UGxheWluZ0F1ZGlvRGlkQ2hhbmdlKCkgZmluYWw7CisKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENv
bW1hbmQoUmVmPFdlYkVkaXRDb21tYW5kUHJveHk+JiYsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVk
bykgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpIG92ZXJyaWRlOwor
ICAgIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsK
KyAgICB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJy
aWRlOworICAgIGJvb2wgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5n
JiBzZWxlY3Rvcikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBSZWY8U2hhcmVhYmxlQml0bWFwPiYmIGRyYWdJ
bWFnZSwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQ
cm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBSZWY8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiYmIGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4mJiBhcmNoaXZlQnVmZmVyKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQorICAgIHZvaWQgc2V0UHJvbWlzZWREYXRhRm9yQXR0YWNobWVu
dChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCkgb3ZlcnJpZGU7CisjZW5kaWYKKyAgICB2
b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc2V0U2Vj
dXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJv
dXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRlOworICAgIHZvaWQgc2VsZWN0aW9uRGlk
Q2hhbmdlKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2
aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCByb290
Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvV2luZG93KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgPSAwOworI2VuZGlmCisKKyAgICBDR1JlY3QgYm91bmRzT2ZMYXllckluTGF5ZXJCYWNrZWRX
aW5kb3dDb29yZGluYXRlcyhDQUxheWVyICpsYXllcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wg
d2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94
eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5Jikgb3ZlcnJpZGU7CisjaWYgRU5B
QkxFKENPTlRFWFRfTUVOVVMpCisgICAgUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0
ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0
RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikgb3ZlcnJpZGU7CisjZW5kaWYKKworI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX0NPTE9SKQorICAgIFJlZlB0cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQ
aWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBSZWY8V2Vi
Q29yZTo6VmFsaWRhdGlvbkJ1YmJsZT4gY3JlYXRlVmFsaWRhdGlvbkJ1YmJsZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFdlYkNvcmU6OlZhbGlkYXRpb25CdWJibGU6OlNldHRpbmdzJikg
ZmluYWw7CisKKyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUmVmPFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3I+LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUpIG92ZXJyaWRlOwor
ICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dE
aXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VGV4dEluZGljYXRvckFu
aW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlkZTsKKworICAgIHZvaWQgZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKKyAgICB2
b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRl
eHQmKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxWaWV3U25hcHNob3Q+IHRha2VWaWV3U25hcHNo
b3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3Jl
KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoTUFDX0dF
U1RVUkVfRVZFTlRTKQorICAgIHZvaWQgZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29y
ZShjb25zdCBOYXRpdmVXZWJHZXN0dXJlRXZlbnQmKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAg
dm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1
c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wg
cGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQ
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2hvdWxk
U3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXMoYm9vbCBzaG91bGRTdXBwcmVzcykgb3ZlcnJp
ZGUgeyBtX3Nob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzID0gc2hvdWxkU3VwcHJl
c3M7IH0KKworICAgIHZvaWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgV2ViQ29y
ZTo6RGljdGlvbmFyeVBvcHVwSW5mbyYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzaG93Q29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIG92ZXJyaWRlOworICAgIHZv
aWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0
ZXJuYXRpdmVUZXh0KSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6OkF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWNvbW1lbmRl
ZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKFdlYkNvcmU6OlNjcm9sbGJhclN0eWxlKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgaW50cmluc2ljQ29udGVudFNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgaW50cmluc2ljQ29udGVudFNpemUpIG92ZXJyaWRlOworCisjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgdWludDY0X3QgYWRkRGljdGF0aW9uQWx0ZXJuYXRp
dmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+Jikgb3ZlcnJpZGU7CisgICAg
dm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4
dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRp
Y3RhdGlvbkNvbnRleHQpIG92ZXJyaWRlOworICAgIFZlY3RvcjxTdHJpbmc+IGRpY3RhdGlvbkFs
dGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSBvdmVycmlkZTsKKyNlbmRpZgor
ICAgIHZvaWQgc2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKGJvb2wpIG92ZXJyaWRlOworCisj
aWYgVVNFKElOU0VSVElPTl9VTkRPX0dST1VQSU5HKQorICAgIHZvaWQgcmVnaXN0ZXJJbnNlcnRp
b25VbmRvR3JvdXBpbmcoKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgLy8gQXV4aWxpYXJ5IENs
aWVudCBDcmVhdGlvbgorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkgb3Zl
cnJpZGU7CisjZW5kaWYKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAvLyBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50CisgICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5h
Z2VyKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2
b2lkIGVudGVyRnVsbFNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4o
KSBvdmVycmlkZTsKKyAgICB2b2lkIGJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFt
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFt
ZSkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdp
bigpIG92ZXJyaWRlOworICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2ls
bE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBu
YXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSYpIG92ZXJyaWRlOworICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHdpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdCgpIG92ZXJyaWRlOworCisgICAgTlNWaWV3ICphY3RpdmVWaWV3KCkgY29u
c3Q7CisgICAgTlNXaW5kb3cgKmFjdGl2ZVdpbmRvdygpIGNvbnN0OworCisgICAgdm9pZCBkaWRG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEZh
aWxMb2FkRm9yTWFpbkZyYW1lKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGhhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZShjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5m
b1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZlU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91
YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOworCisgICAgdm9pZCBk
aWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0
YSYsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgQVBJOjpPYmplY3QqKSBvdmVycmlkZTsK
KyAgICB2b2lkKiBpbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJl
c3VsdChSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiwgdWludDY0X3QsIFJlZlB0cjxBUEk6Ok9i
amVjdD4pIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgp
IG92ZXJyaWRlOworCisgICAgdm9pZCB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpIG92
ZXJyaWRlOworCisgICAgdm9pZCBzaG93UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUgKiwgV2Vi
Q29yZTo6SW50UG9pbnQpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5k
Q29sb3IoKSBvdmVycmlkZTsKKworICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCkgb3ZlcnJpZGU7
CisgICAgTlNXaW5kb3cgKnBsYXRmb3JtV2luZG93KCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3Jl
OjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b24oKSBvdmVycmlkZTsKKworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgTlNWaWV3ICppbnNwZWN0
b3JBdHRhY2htZW50VmlldygpIG92ZXJyaWRlOworICAgIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5
ICpyZW1vdGVPYmplY3RSZWdpc3RyeSgpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBOU1ZpZXcg
Km1fdmlldzsKKyAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKKyAgICBXZWJWaWV3SW1wbCogbV9p
bXBsIHsgbnVsbHB0ciB9OworI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKKyAgICBDb3Jy
ZWN0aW9uUGFuZWwgbV9jb3JyZWN0aW9uUGFuZWw7CisjZW5kaWYKKyNpZiBVU0UoRElDVEFUSU9O
X0FMVEVSTkFUSVZFUykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0VUlDb250cm9sbGVyPiBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjsKKyNlbmRpZgor
CisgICAgYm9vbCBtX3Nob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzIHsgZmFsc2Ug
fTsKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgV2ViQ29yZTo6
V2ViTWVkaWFTZXNzaW9uTWFuYWdlciYgbWVkaWFTZXNzaW9uTWFuYWdlcigpIG92ZXJyaWRlOwor
I2VuZGlmCisKKyAgICB2b2lkIHJlZlZpZXcoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcmVmVmll
dygpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSBvdmVy
cmlkZTsKKyAgICBib29sIHdpbmRvd0lzRnJvbnRXaW5kb3dVbmRlck1vdXNlKGNvbnN0IE5hdGl2
ZVdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
TWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLmgJKHJldmlzaW9uIDIyMTQ4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTIg
QEAKICNpZiBQTEFURk9STShNQUMpCiAKICNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKLSNp
bmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudEltcGxDb2NvYS5oIgog
I2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAKIEBjbGFzcyBXS0VkaXRvclVuZG9UYXJnZXRPYmpDOwogQGNsYXNzIFdLVmll
dzsKLUBjbGFzcyBXS1dlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFsdGVy
bmF0aXZlVGV4dFVJQ29udHJvbGxlcjsKQEAgLTQ0LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIFdlYlZpZXdJbXBsOwogCi1jbGFzcyBQYWdlQ2xpZW50SW1wbCBmaW5hbCA6
IHB1YmxpYyBQYWdlQ2xpZW50CitjbGFzcyBQYWdlQ2xpZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBQ
YWdlQ2xpZW50SW1wbENvY29hCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICwgcHVi
bGljIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQKICNlbmRpZgpAQCAtODksOCArODgs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wp
IG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIG92ZXJyaWRlOwotICAgIHZvaWQgaXNQbGF5aW5n
QXVkaW9XaWxsQ2hhbmdlKCkgZmluYWw7Ci0gICAgdm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5n
ZSgpIGZpbmFsOwogCiAgICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFJlZjxXZWJFZGl0Q29t
bWFuZFByb3h5PiYmLCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOwogICAgIHZv
aWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBvdmVycmlkZTsKQEAgLTEyMCw3ICsxMTcsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJp
bGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogI2VuZGlmCiAKLSAgICBD
R1JlY3QgYm91bmRzT2ZMYXllckluTGF5ZXJCYWNrZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVy
ICpsYXllcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ0dSZWN0IGJvdW5kc09mTGF5ZXJJbkxheWVy
QmFja2VkV2luZG93Q29vcmRpbmF0ZXMoQ0FMYXllciAqKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpIG92ZXJyaWRlOwogCkBAIC0yMzQsNyArMjMxLDYgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAgICAgTlNWaWV3ICptX3ZpZXc7Ci0gICAgV0tXZWJWaWV3ICptX3dlYlZp
ZXc7CiAgICAgV2ViVmlld0ltcGwqIG1faW1wbCB7IG51bGxwdHIgfTsKICNpZiBVU0UoQVVUT0NP
UlJFQ1RJT05fUEFORUwpCiAgICAgQ29ycmVjdGlvblBhbmVsIG1fY29ycmVjdGlvblBhbmVsOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1h
Yy5tbQkocmV2aXNpb24gMjIxNDY3KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGwubW06MjIxNDY3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQYWdl
Q2xpZW50SW1wbC5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJBUElIaXRUZXN0
UmVzdWx0LmgiCisjaW1wb3J0ICJDb2xvclNwYWNlRGF0YS5oIgorI2ltcG9ydCAiRGF0YVJlZmVy
ZW5jZS5oIgorI2ltcG9ydCAiRG93bmxvYWRQcm94eS5oIgorI2ltcG9ydCAiRHJhd2luZ0FyZWFQ
cm94eS5oIgorI2ltcG9ydCAiTmF0aXZlV2ViR2VzdHVyZUV2ZW50LmgiCisjaW1wb3J0ICJOYXRp
dmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW1wb3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCisj
aW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCisjaW1wb3J0ICJOYXZpZ2F0aW9uU3RhdGUu
aCIKKyNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250
cm9sbGVyLmgiCisjaW1wb3J0ICJWaWV3U25hcHNob3RTdG9yZS5oIgorI2ltcG9ydCAiV0tBUElD
YXN0LmgiCisjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisjaW1wb3J0
ICJXS1N0cmluZ0NGLmgiCisjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tX
ZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkNvbG9yUGlja2VyTWFjLmgiCisjaW1wb3J0
ICJXZWJDb250ZXh0TWVudVByb3h5TWFjLmgiCisjaW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5
LmgiCisjaW1wb3J0ICJXZWJQb3B1cE1lbnVQcm94eU1hYy5oIgorI2ltcG9ydCAiV2ViVmlld0lt
cGwuaCIKKyNpbXBvcnQgIldpbmRvd1NlcnZlckNvbm5lY3Rpb24uaCIKKyNpbXBvcnQgIl9XS0Rv
d25sb2FkSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIgor
I2ltcG9ydCAiX1dLVGh1bWJuYWlsVmlldy5oIgorI2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29r
dXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0
SW5kaWNhdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3JXaW5kb3cuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvVGV4dFVuZG9JbnNlcnRpb25NYXJrdXBNYWMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNl
Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBw
S2l0L05TVGV4dEFsdGVybmF0aXZlcy5oPgorI2VuZGlmCisKKyNpZiBFTkFCTEUoV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKQorI2luY2x1ZGUgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdl
ci5oPgorI2VuZGlmCisKK0BpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlv
bkRldGFpbHMpCistIChOU0N1cnNvciAqKV9jdXJzb3JSZWN0Q3Vyc29yOworQGVuZAorCisjaWYg
SEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQorQGludGVyZmFjZSBOU1dpbmRvdyAo
V2ViTlNXaW5kb3dEZXRhaWxzKQorLSAoQk9PTClfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcjsK
K0BlbmQKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYWdlQ2xpZW50SW1wbDo6UGFnZUNs
aWVudEltcGwoTlNWaWV3KiB2aWV3LCBXS1dlYlZpZXcgKndlYlZpZXcpCisgICAgOiBtX3ZpZXco
dmlldykKKyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQorI2lmIFVTRShESUNUQVRJT05fQUxURVJO
QVRJVkVTKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIoc3RkOjptYWtlX3Vu
aXF1ZTxBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXI+KCkpCisjZW5kaWYKK3sKKyNpZiAhV0tf
QVBJX0VOQUJMRUQKKyAgICBBU1NFUlRfVU5VU0VEKG1fd2ViVmlldywgIW1fd2ViVmlldyk7Cisj
ZW5kaWYKK30KKworUGFnZUNsaWVudEltcGw6On5QYWdlQ2xpZW50SW1wbCgpCit7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJh
d2luZ0FyZWFQcm94eSgpCit7CisgICAgcmV0dXJuIG1faW1wbC0+Y3JlYXRlRHJhd2luZ0FyZWFQ
cm94eSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNv
bnN0IFdlYkNvcmU6OlJlZ2lvbiYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlcXVlc3RTY3JvbGwoY29uc3QgRmxvYXRQb2ludCYgc2Ny
b2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4sIGJvb2wgaXNQcm9ncmFt
bWF0aWNTY3JvbGwpCit7Cit9CisKK1dlYkNvcmU6OkZsb2F0UG9pbnQgUGFnZUNsaWVudEltcGw6
OnZpZXdTY3JvbGxQb3NpdGlvbigpCit7CisgICAgcmV0dXJuIHsgfTsKK30KKworSW50U2l6ZSBQ
YWdlQ2xpZW50SW1wbDo6dmlld1NpemUoKQoreworICAgIHJldHVybiBJbnRTaXplKFttX3ZpZXcg
Ym91bmRzXS5zaXplKTsKK30KKworTlNWaWV3ICpQYWdlQ2xpZW50SW1wbDo6YWN0aXZlVmlldygp
IGNvbnN0Cit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICByZXR1cm4gKG1faW1wbCAmJiBtX2lt
cGwtPnRodW1ibmFpbFZpZXcoKSkgPyAoTlNWaWV3ICopbV9pbXBsLT50aHVtYm5haWxWaWV3KCkg
OiBtX3ZpZXc7CisjZWxzZQorICAgIHJldHVybiBtX3ZpZXc7CisjZW5kaWYKK30KKworTlNXaW5k
b3cgKlBhZ2VDbGllbnRJbXBsOjphY3RpdmVXaW5kb3coKSBjb25zdAoreworI2lmIFdLX0FQSV9F
TkFCTEVECisgICAgaWYgKG1faW1wbCAmJiBtX2ltcGwtPnRodW1ibmFpbFZpZXcoKSkKKyAgICAg
ICAgcmV0dXJuIG1faW1wbC0+dGh1bWJuYWlsVmlldygpLndpbmRvdzsKKyNlbmRpZgorICAgIGlm
IChtX2ltcGwgJiYgbV9pbXBsLT50YXJnZXRXaW5kb3dGb3JNb3ZlUHJlcGFyYXRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIG1faW1wbC0+dGFyZ2V0V2luZG93Rm9yTW92ZVByZXBhcmF0aW9uKCk7Cisg
ICAgcmV0dXJuIG1fdmlldy53aW5kb3c7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmll
d1dpbmRvd0FjdGl2ZSgpCit7CisgICAgTlNXaW5kb3cgKmFjdGl2ZVZpZXdXaW5kb3cgPSBhY3Rp
dmVXaW5kb3coKTsKKyAgICByZXR1cm4gYWN0aXZlVmlld1dpbmRvdy5pc0tleVdpbmRvdyB8fCBb
TlNBcHAga2V5V2luZG93XSA9PSBhY3RpdmVWaWV3V2luZG93OworfQorCitib29sIFBhZ2VDbGll
bnRJbXBsOjppc1ZpZXdGb2N1c2VkKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBjYWxsZWQg
ZnJvbSB0aGUgV2ViUGFnZVByb3h5IGNvbnN0cnVjdG9yIGJlZm9yZSB3ZSBoYXZlIGEgV2ViVmll
d0ltcGwuCisgICAgLy8gT25jZSBXZWJWaWV3SW1wbCBhbmQgUGFnZUNsaWVudCBtZXJnZSwgdGhp
cyB3b24ndCBiZSBhIHByb2JsZW0uCisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiBO
TzsKKworICAgIHJldHVybiBtX2ltcGwtPmlzRm9jdXNlZCgpOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjptYWtlRmlyc3RSZXNwb25kZXIoKQoreworICAgIGlmIChtX3Nob3VsZFN1cHByZXNz
Rmlyc3RSZXNwb25kZXJDaGFuZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICAgW1ttX3ZpZXcg
d2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6bV92aWV3XTsKK30KKyAgICAKK2Jvb2wgUGFnZUNs
aWVudEltcGw6OmlzVmlld1Zpc2libGUoKQoreworICAgIE5TVmlldyAqYWN0aXZlVmlldyA9IHRo
aXMtPmFjdGl2ZVZpZXcoKTsKKyAgICBOU1dpbmRvdyAqYWN0aXZlVmlld1dpbmRvdyA9IGFjdGl2
ZVdpbmRvdygpOworCisgICAgaWYgKCFhY3RpdmVWaWV3V2luZG93KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWFjdGl2ZVZpZXdXaW5kb3cuaXNWaXNpYmxlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYWN0aXZlVmlldy5pc0hpZGRlbk9ySGFzSGlkZGVuQW5j
ZXN0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2ltcGwtPndpbmRvd09j
Y2x1c2lvbkRldGVjdGlvbkVuYWJsZWQoKSAmJiAoYWN0aXZlVmlld1dpbmRvdy5vY2NsdXNpb25T
dGF0ZSAmIE5TV2luZG93T2NjbHVzaW9uU3RhdGVWaXNpYmxlKSAhPSBOU1dpbmRvd09jY2x1c2lv
blN0YXRlVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGVPck9jY2x1ZGVkKCkKK3sK
KyAgICByZXR1cm4gYWN0aXZlV2luZG93KCkuaXNWaXNpYmxlOworfQorCitib29sIFBhZ2VDbGll
bnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCit7CisgICAgcmV0dXJuIGFjdGl2ZVdpbmRvdygpOwor
fQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppc1Zpc3VhbGx5SWRsZSgpCit7CisgICAgcmV0dXJu
IFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNpbmdsZXRvbigpLmFwcGxpY2F0aW9uV2luZG93TW9k
aWZpY2F0aW9uc0hhdmVTdG9wcGVkKCkgfHwgIWlzVmlld1Zpc2libGUoKTsKK30KKworTGF5ZXJI
b3N0aW5nTW9kZSBQYWdlQ2xpZW50SW1wbDo6dmlld0xheWVySG9zdGluZ01vZGUoKQoreworI2lm
IEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJfSE9TVElORykKKyAgICBpZiAoW2FjdGl2ZVdpbmRv
dygpIF9ob3N0c0xheWVyc0luV2luZG93U2VydmVyXSkKKyAgICAgICAgcmV0dXJuIExheWVySG9z
dGluZ01vZGU6Ok91dE9mUHJvY2VzczsKKyNlbmRpZgorICAgIHJldHVybiBMYXllckhvc3RpbmdN
b2RlOjpJblByb2Nlc3M7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnZpZXdXaWxsTW92ZVRv
QW5vdGhlcldpbmRvdygpCit7CisgICAgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKK30KKworQ29s
b3JTcGFjZURhdGEgUGFnZUNsaWVudEltcGw6OmNvbG9yU3BhY2UoKQoreworICAgIHJldHVybiBt
X2ltcGwtPmNvbG9yU3BhY2UoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cHJvY2Vzc0Rp
ZEV4aXQoKQoreworICAgIG1faW1wbC0+cHJvY2Vzc0RpZEV4aXQoKTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6cGFnZUNsb3NlZCgpCit7CisgICAgbV9pbXBsLT5wYWdlQ2xvc2VkKCk7Cisj
aWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgbV9hbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXItPmNsZWFyKCk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlk
UmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBtX2ltcGwtPmRpZFJlbGF1bmNoUHJvY2VzcygpOwor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcmVmZXJlbmNlc0RpZENoYW5nZSgpCit7CisgICAg
bV9pbXBsLT5wcmVmZXJlbmNlc0RpZENoYW5nZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
Ojp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmIG9sZFRvb2xUaXAsIGNvbnN0IFN0cmluZyYg
bmV3VG9vbFRpcCkKK3sKKyAgICBtX2ltcGwtPnRvb2xUaXBDaGFuZ2VkKG9sZFRvb2xUaXAsIG5l
d1Rvb2xUaXApOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3Zp
ZGVyKQoreworICAgIG1faW1wbC0+dXBkYXRlU3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2Rlcygp
OworICAgIG1faW1wbC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2luZG93c1dpdGhBbmlt
YXRpb24odHJ1ZSk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdE
YXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkKK3sKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRv
d25sb2FkKQoreworICAgIEFTU0VSVF9BUkcoZG93bmxvYWQsIGRvd25sb2FkKTsKKyNpZiBXS19B
UElfRU5BQkxFRAorICAgIEFTU0VSVChbZG93bmxvYWQtPndyYXBwZXIoKSBpc0tpbmRPZkNsYXNz
OltfV0tEb3dubG9hZCBjbGFzc11dKTsKKyAgICBbc3RhdGljX2Nhc3Q8X1dLRG93bmxvYWQgKj4o
ZG93bmxvYWQtPndyYXBwZXIoKSkgc2V0T3JpZ2luYXRpbmdXZWJWaWV3Om1fd2ViVmlld107Cisj
ZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ29udGVudFNpemUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX2ltcGwtPmRpZENoYW5nZUNv
bnRlbnRTaXplKG5ld1NpemUpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3Io
Y29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7CisgICAgLy8gRklYTUU6IFdvdWxkIGJl
IG5pY2UgdG8gc2hhcmUgdGhpcyBjb2RlIHdpdGggV2ViS2l0MSdzIFdlYkNocm9tZUNsaWVudC4K
KworICAgIC8vIFRoZSBXZWIgcHJvY2VzcyBtYXkgaGF2ZSBhc2tlZCB0byBjaGFuZ2UgdGhlIGN1
cnNvciB3aGVuIHRoZSB2aWV3IHdhcyBpbiBhbiBhY3RpdmUgd2luZG93LCBidXQKKyAgICAvLyBp
ZiBpdCBpcyBubyBsb25nZXIgaW4gYSB3aW5kb3cgb3IgdGhlIHdpbmRvdyBpcyBub3QgYWN0aXZl
LCB0aGVuIHRoZSBjdXJzb3Igc2hvdWxkIG5vdCBjaGFuZ2UuCisgICAgaWYgKCFpc1ZpZXdXaW5k
b3dBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFtOU0FwcCBfY3Vyc29yUmVj
dEN1cnNvcl0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV92aWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW21fdmlldyB3aW5kb3ddOworICAgIGlm
ICghd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3dpbmRvdyB3aW5kb3dOdW1i
ZXJdICE9IFtOU1dpbmRvdyB3aW5kb3dOdW1iZXJBdFBvaW50OltOU0V2ZW50IG1vdXNlTG9jYXRp
b25dIGJlbG93V2luZG93V2l0aFdpbmRvd051bWJlcjowXSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTlNDdXJzb3IgKnBsYXRmb3JtQ3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCk7Cisg
ICAgaWYgKFtOU0N1cnNvciBjdXJyZW50Q3Vyc29yXSA9PSBwbGF0Zm9ybUN1cnNvcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW3BsYXRmb3JtQ3Vyc29yIHNldF07Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGls
TW91c2VNb3ZlcykKK3sKKyAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOmhp
ZGRlblVudGlsTW91c2VNb3Zlc107Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5n
ZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKQor
eworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3RlckVkaXRDb21tYW5kKFJlZjxXZWJF
ZGl0Q29tbWFuZFByb3h5PiYmIGNvbW1hbmQsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRv
T3JSZWRvKQoreworICAgIG1faW1wbC0+cmVnaXN0ZXJFZGl0Q29tbWFuZChXVEZNb3ZlKGNvbW1h
bmQpLCB1bmRvT3JSZWRvKTsKK30KKworI2lmIFVTRShJTlNFUlRJT05fVU5ET19HUk9VUElORykK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVySW5zZXJ0aW9uVW5kb0dyb3VwaW5nKCkKK3sK
KyAgICByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZ1dpdGhVbmRvTWFuYWdlcihbbV92aWV3
IHVuZG9NYW5hZ2VyXSk7Cit9CisjZW5kaWYKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJB
bGxFZGl0Q29tbWFuZHMoKQoreworICAgIG1faW1wbC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsK
K30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRv
T3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgcmV0dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQ
cm94eTo6VW5kbykgPyBbW21fdmlldyB1bmRvTWFuYWdlcl0gY2FuVW5kb10gOiBbW21fdmlldyB1
bmRvTWFuYWdlcl0gY2FuUmVkb107Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVV
bmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAgICByZXR1
cm4gKHVuZG9PclJlZG8gPT0gV2ViUGFnZVByb3h5OjpVbmRvKSA/IFtbbV92aWV3IHVuZG9NYW5h
Z2VyXSB1bmRvXSA6IFtbbV92aWV3IHVuZG9NYW5hZ2VyXSByZWRvXTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwg
UmVmPFNoYXJlYWJsZUJpdG1hcD4mJiBkcmFnSW1hZ2UsIERyYWdTb3VyY2VBY3Rpb24gYWN0aW9u
KQoreworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBkcmFnQ0dJbWFnZSA9IGRyYWdJbWFnZS0+
bWFrZUNHSW1hZ2UoKTsKKyAgICBSZXRhaW5QdHI8TlNJbWFnZT4gZHJhZ05TSW1hZ2UgPSBhZG9w
dE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmRyYWdDR0ltYWdlLmdldCgpIHNp
emU6ZHJhZ0ltYWdlLT5zaXplKCldKTsKKyAgICBJbnRTaXplIHNpemUoW2RyYWdOU0ltYWdlIHNp
emVdKTsKKyAgICBzaXplLnNjYWxlKDEuMCAvIG1faW1wbC0+cGFnZSgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOworICAgIFtkcmFnTlNJbWFnZSBzZXRTaXplOnNpemVdOworCisgICAgbV9pbXBsLT5k
cmFnSW1hZ2VGb3JWaWV3KG1fdmlldywgZHJhZ05TSW1hZ2UuZ2V0KCksIGNsaWVudFBvc2l0aW9u
LCBhY3Rpb24gPT0gRHJhZ1NvdXJjZUFjdGlvbkxpbmspOworfQorCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBSZWY8U2hhcmVkQnVmZmVyPiYmIGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVSTCwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4m
JiBhcmNoaXZlQnVmZmVyKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKCk7CisgICAgaW1hZ2UtPnNldERhdGEoV1RGTW92ZShpbWFnZUJ1ZmZlciksIHRy
dWUpOworICAgIG1faW1wbC0+c2V0UHJvbWlzZWREYXRhRm9ySW1hZ2UoaW1hZ2UuZ2V0KCksIGZp
bGVuYW1lLCBleHRlbnNpb24sIHRpdGxlLCB1cmwsIHZpc2libGVVUkwsIGFyY2hpdmVCdWZmZXIu
Z2V0KCksIHBhc3RlYm9hcmROYW1lKTsKK30KKworI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQcm9taXNlZERhdGFGb3JBdHRhY2htZW50KGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFN0cmluZyYgZXh0ZW5zaW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiB2aXNpYmxlVVJMKQoreworICAgIG1faW1wbC0+c2V0UHJvbWlzZWRE
YXRhRm9yQXR0YWNobWVudChmaWxlbmFtZSwgZXh0ZW5zaW9uLCB0aXRsZSwgdXJsLCB2aXNpYmxl
VVJMLCBwYXN0ZWJvYXJkTmFtZSk7Cit9CisjZW5kaWYKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6
dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSgpCit7CisgICAgbV9pbXBsLT51cGRhdGVTZWN1cmVJbnB1
dFN0YXRlKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlc2V0U2VjdXJlSW5wdXRTdGF0
ZSgpCit7CisgICAgbV9pbXBsLT5yZXNldFNlY3VyZUlucHV0U3RhdGUoKTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6bm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlv
bigpCit7CisgICAgbV9pbXBsLT5ub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBv
c2l0aW9uKCk7Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNl
U3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiB0b0RldmljZVNwYWNl
KHJlY3QsIFttX3ZpZXcgd2luZG93XSk7Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6
Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4g
dG9Vc2VyU3BhY2UocmVjdCwgW21fdmlldyB3aW5kb3ddKTsKK30KKyAgIAorSW50UG9pbnQgUGFn
ZUNsaWVudEltcGw6OnNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBp
Z25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIE5TUG9pbnQgd2luZG93Q29v
cmQgPSBbW21fdmlldyB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6cG9pbnRdOworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAgIHJldHVybiBJbnRQb2ludChbbV92aWV3IGNvbnZl
cnRQb2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdKTsKK30KKyAgICAKK0ludFJlY3QgUGFn
ZUNsaWVudEltcGw6OnJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBOU1JlY3QgdGVtcFJlY3QgPSByZWN0OworICAgIHRlbXBSZWN0ID0gW21fdmlldyBjb252ZXJ0
UmVjdDp0ZW1wUmVjdCB0b1ZpZXc6bmlsXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0
aW9ucyIKKyAgICB0ZW1wUmVjdC5vcmlnaW4gPSBbW21fdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNl
VG9TY3JlZW46dGVtcFJlY3Qub3JpZ2luXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK
KyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0ZW1wUmVjdCk7Cit9CisKK0ludFJlY3QgUGFn
ZUNsaWVudEltcGw6OnJvb3RWaWV3VG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVj
dCkKK3sKKyAgICBOU1JlY3QgdGVtcFJlY3QgPSByZWN0OworICAgIHRlbXBSZWN0ID0gW21fdmll
dyBjb252ZXJ0UmVjdDp0ZW1wUmVjdCB0b1ZpZXc6bmlsXTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdCh0ZW1wUmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5
RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIGJvb2wgZXZlbnRXYXNI
YW5kbGVkKQoreworICAgIG1faW1wbC0+ZG9uZVdpdGhLZXlFdmVudChldmVudC5uYXRpdmVFdmVu
dCgpLCBldmVudFdhc0hhbmRsZWQpOworfQorCitSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBh
Z2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCit7
CisgICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5TWFjOjpjcmVhdGUobV92aWV3LCBwYWdlKTsK
K30KKworI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQorUmVmUHRyPFdlYkNvbnRleHRNZW51UHJv
eHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSYg
cGFnZSwgY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYgY29udGV4dCwgY29uc3QgVXNlckRh
dGEmIHVzZXJEYXRhKQoreworICAgIHJldHVybiBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpjcmVh
dGUobV92aWV3LCBwYWdlLCBjb250ZXh0LCB1c2VyRGF0YSk7Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0NPTE9SKQorUmVmUHRyPFdlYkNvbG9yUGlja2VyPiBQYWdlQ2xpZW50
SW1wbDo6Y3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYgaW5pdGlhbENvbG9yLCAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sK
KyAgICByZXR1cm4gV2ViQ29sb3JQaWNrZXJNYWM6OmNyZWF0ZShwYWdlLCBpbml0aWFsQ29sb3Is
IHJlY3QsIG1fdmlldyk7Cit9CisjZW5kaWYKKworUmVmPFZhbGlkYXRpb25CdWJibGU+IFBhZ2VD
bGllbnRJbXBsOjpjcmVhdGVWYWxpZGF0aW9uQnViYmxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgVmFsaWRhdGlvbkJ1YmJsZTo6U2V0dGluZ3MmIHNldHRpbmdzKQoreworICAgIHJldHVy
biBWYWxpZGF0aW9uQnViYmxlOjpjcmVhdGUobV92aWV3LCBtZXNzYWdlLCBzZXR0aW5ncyk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFRleHRJbmRpY2F0b3IoUmVmPFRleHRJbmRpY2F0
b3I+IHRleHRJbmRpY2F0b3IsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZSBs
aWZldGltZSkKK3sKKyAgICBtX2ltcGwtPnNldFRleHRJbmRpY2F0b3IodGV4dEluZGljYXRvci5n
ZXQoKSwgbGlmZXRpbWUpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbGVhclRleHRJbmRp
Y2F0b3IoV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbiBkaXNt
aXNzYWxBbmltYXRpb24pCit7CisgICAgbV9pbXBsLT5jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5p
bWF0aW9uKGRpc21pc3NhbEFuaW1hdGlvbik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNl
dFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCBwcm9ncmVzcykKK3sKKyAgICBt
X2ltcGwtPnNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhwcm9ncmVzcyk7Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZl
ZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCit7CisgICAgbV9pbXBsLT5zZXRBY2Nl
c3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuKFtOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLmRhdGEo
KSBsZW5ndGg6ZGF0YS5zaXplKCldKTsKK30KKyAgICAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5
ZXJUcmVlQ29udGV4dCkKK3sKKyAgICBBU1NFUlQoIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgp
KTsKKworICAgIENBTGF5ZXIgKnJlbmRlckxheWVyID0gV0tNYWtlUmVuZGVyTGF5ZXIobGF5ZXJU
cmVlQ29udGV4dC5jb250ZXh0SUQpOworICAgIG1faW1wbC0+c2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ1Jvb3RMYXllcihyZW5kZXJMYXllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCit7CisgICAgbV9pbXBsLT5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nUm9vdExheWVyKG5pbCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQm
IGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUKCFsYXllclRyZWVDb250ZXh0LmlzRW1w
dHkoKSk7CisKKyAgICBDQUxheWVyICpyZW5kZXJMYXllciA9IFdLTWFrZVJlbmRlckxheWVyKGxh
eWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKKyAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSb290TGF5ZXIocmVuZGVyTGF5ZXIpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKENBTGF5ZXIgKnJvb3RMYXllcikK
K3sKKyAgICBtX2ltcGwtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIocm9vdExh
eWVyKTsKK30KKworQ0FMYXllciAqUGFnZUNsaWVudEltcGw6OmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdSb290TGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwtPmFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSb290TGF5ZXIoKTsKK30KKworUmVmUHRyPFZpZXdTbmFwc2hvdD4gUGFnZUNsaWVu
dEltcGw6OnRha2VWaWV3U25hcHNob3QoKQoreworICAgIHJldHVybiBtX2ltcGwtPnRha2VWaWV3
U25hcHNob3QoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdl
KCkKK3sKKyAgICBtX2ltcGwtPnNlbGVjdGlvbkRpZENoYW5nZSgpOworfQorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVX
ZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoYXV0byBnZXN0dXJlQ29udHJvbGxlciA9
IG1faW1wbC0+Z2VzdHVyZUNvbnRyb2xsZXIoKSkKKyAgICAgICAgZ2VzdHVyZUNvbnRyb2xsZXIt
PndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGV2ZW50Lm5hdGl2ZUV2ZW50KCkpOwor
fQorCisjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5UUykKK3ZvaWQgUGFnZUNsaWVudEltcGw6
Omdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0aXZlV2ViR2VzdHVy
ZUV2ZW50JiBldmVudCkKK3sKKyAgICBtX2ltcGwtPmdlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRC
eVdlYkNvcmUoZXZlbnQubmF0aXZlRXZlbnQoKSk7Cit9CisjZW5kaWYKKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5D
b21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hh
c0ZvY3VzKQoreworICAgIG1faW1wbC0+cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChw
bHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzLCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgUGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKK3sK
KyAgICBtX2ltcGwtPnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZUFuZElkZW50aWZpZXIo
cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRp
Zmllcik7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwKGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8pCit7Cisg
ICAgbV9pbXBsLT5wcmVwYXJlRm9yRGljdGlvbmFyeUxvb2t1cCgpOworCisgICAgRGljdGlvbmFy
eUxvb2t1cDo6c2hvd1BvcHVwKGRpY3Rpb25hcnlQb3B1cEluZm8sIG1fdmlldywgW3RoaXNdKFRl
eHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpIHsKKyAgICAgICAgbV9pbXBsLT5zZXRUZXh0SW5k
aWNhdG9yKHRleHRJbmRpY2F0b3IsIFRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFu
ZW50KTsKKyAgICB9KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25Q
YW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRp
dmVSZXBsYWNlbWVudFN0cmluZ3MpCit7CisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQor
ICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWwuc2hvdyhtX3ZpZXcsICptX2ltcGwsIHR5cGUs
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50
U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisjZW5kaWYKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKK3sKKyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFO
RUwpCisgICAgbV9jb3JyZWN0aW9uUGFuZWwuZGlzbWlzcyhyZWFzb24pOworI2VuZGlmCit9CisK
K1N0cmluZyBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29y
ZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCit7CisjaWYgVVNF
KEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNt
aXNzKHJlYXNvbik7CisjZWxzZQorICAgIHJldHVybiBTdHJpbmcoKTsKKyNlbmRpZgorfQorCitz
dGF0aWMgaW5saW5lIE5TQ29ycmVjdGlvblJlc3BvbnNlIHRvQ29ycmVjdGlvblJlc3BvbnNlKEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2UpCit7CisgICAgc3dpdGNoIChyZXNwb25zZSkg
eworICAgIGNhc2UgV2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQ6Cisg
ICAgICAgIHJldHVybiBOU0NvcnJlY3Rpb25SZXNwb25zZVJldmVydGVkOworICAgIGNhc2UgV2Vi
Q29yZTo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6RWRpdGVkOgorICAgICAgICByZXR1cm4gTlND
b3JyZWN0aW9uUmVzcG9uc2VFZGl0ZWQ7CisgICAgY2FzZSBXZWJDb3JlOjpBdXRvY29ycmVjdGlv
blJlc3BvbnNlOjpBY2NlcHRlZDoKKyAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvblJlc3BvbnNl
QWNjZXB0ZWQ7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IE5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQ7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSByZXNw
b25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZykKK3sKKyAgICBDb3JyZWN0aW9uUGFuZWw6OnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UobV9pbXBsLT5zcGVsbENoZWNrZXJEb2N1bWVudFRhZygpLCB0b0NvcnJlY3Rpb25S
ZXNwb25zZShyZXNwb25zZSksIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZyk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlY29tbWVuZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFu
Z2UoU2Nyb2xsYmFyU3R5bGUgbmV3U3R5bGUpCit7CisgICAgLy8gTm93IHJlLWNyZWF0ZSBhIHRy
YWNraW5nIGFyZWEgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyBnaXZlbiB0aGUgbmV3IHNj
cm9sbGJhciBzdHlsZQorICAgIE5TVHJhY2tpbmdBcmVhT3B0aW9ucyBvcHRpb25zID0gTlNUcmFj
a2luZ01vdXNlTW92ZWQgfCBOU1RyYWNraW5nTW91c2VFbnRlcmVkQW5kRXhpdGVkIHwgTlNUcmFj
a2luZ0luVmlzaWJsZVJlY3QgfCBOU1RyYWNraW5nQ3Vyc29yVXBkYXRlOworICAgIGlmIChuZXdT
dHlsZSA9PSBTY3JvbGxiYXJTdHlsZTo6QWx3YXlzVmlzaWJsZSkKKyAgICAgICAgb3B0aW9ucyB8
PSBOU1RyYWNraW5nQWN0aXZlQWx3YXlzOworICAgIGVsc2UKKyAgICAgICAgb3B0aW9ucyB8PSBO
U1RyYWNraW5nQWN0aXZlSW5LZXlXaW5kb3c7CisKKyAgICBSZXRhaW5QdHI8TlNUcmFja2luZ0Fy
ZWE+IHRyYWNraW5nQXJlYSA9IGFkb3B0TlMoW1tOU1RyYWNraW5nQXJlYSBhbGxvY10gaW5pdFdp
dGhSZWN0OlttX3ZpZXcgZnJhbWVdIG9wdGlvbnM6b3B0aW9ucyBvd25lcjptX3ZpZXcgdXNlcklu
Zm86bmlsXSk7CisgICAgbV9pbXBsLT5zZXRQcmltYXJ5VHJhY2tpbmdBcmVhKHRyYWNraW5nQXJl
YS5nZXQoKSk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmludHJpbnNpY0NvbnRlbnRTaXpl
RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIGludHJpbnNpY0NvbnRlbnRTaXplKQoreworICAgIG1f
aW1wbC0+c2V0SW50cmluc2ljQ29udGVudFNpemUoaW50cmluc2ljQ29udGVudFNpemUpOworfQor
Citib29sIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25z
dCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQoreworICAgIHJldHVybiBtX2ltcGwtPmV4ZWN1dGVT
YXZlZENvbW1hbmRCeVNlbGVjdG9yKE5TU2VsZWN0b3JGcm9tU3RyaW5nKHNlbGVjdG9yU3RyaW5n
KSk7Cit9CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKK3VpbnQ2NF90IFBhZ2VD
bGllbnRJbXBsOjphZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoY29uc3QgUmV0YWluUHRyPE5TVGV4
dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKK3sKKyAgICByZXR1cm4gbV9hbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXItPmFkZEFsdGVybmF0aXZlcyhhbHRlcm5hdGl2ZXMpOworfQorCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3Qg
ZGljdGF0aW9uQ29udGV4dCkKK3sKKyAgICBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+
cmVtb3ZlQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQpOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQp
Cit7CisgICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwgIWlzVmlld0luV2luZG93KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+c2hvd0FsdGVy
bmF0aXZlcyhtX3ZpZXcsIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIGRpY3RhdGlvbkNvbnRl
eHQsIF4oTlNTdHJpbmcgKmFjY2VwdGVkQWx0ZXJuYXRpdmUpIHsKKyAgICAgICAgbV9pbXBsLT5o
YW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChhY2NlcHRlZEFsdGVybmF0aXZlKTsKKyAgICB9
KTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFnZUNsaWVudEltcGw6OmRpY3RhdGlvbkFsdGVybmF0
aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIHJldHVybiBtX2FsdGVybmF0
aXZlVGV4dFVJQ29udHJvbGxlci0+YWx0ZXJuYXRpdmVzRm9yQ29udGV4dChkaWN0YXRpb25Db250
ZXh0KTsKK30KKyNlbmRpZgorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRFZGl0YWJsZUVsZW1l
bnRJc0ZvY3VzZWQoYm9vbCBlZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQpCit7CisgICAgbV9pbXBs
LT5zZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQoZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKTsK
K30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eUNsaWVudCYgUGFnZUNsaWVudEltcGw6OmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQo
KQoreworICAgIHJldHVybiAqdGhpczsKK30KKworLy8gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eUNsaWVudAorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkK
K3sKKyAgICBtX2ltcGwtPmNsb3NlRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKTsKK30KKwor
Ym9vbCBQYWdlQ2xpZW50SW1wbDo6aXNGdWxsU2NyZWVuKCkKK3sKKyAgICBpZiAoIW1faW1wbC0+
aGFzRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIG1faW1wbC0+ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKS5pc0Z1bGxT
Y3JlZW47Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyRnVsbFNjcmVlbigpCit7Cisg
ICAgW21faW1wbC0+ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSBlbnRlckZ1bGxTY3JlZW46
bmlsXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAg
IFttX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKCkgZXhpdEZ1bGxTY3JlZW5dOwor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBJbnRS
ZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGZpbmFsRnJhbWUpCit7CisgICAgW21f
aW1wbC0+ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKSBiZWdhbkVudGVyRnVsbFNjcmVlbldp
dGhJbml0aWFsRnJhbWU6aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6ZmluYWxGcmFtZV07CisgICAg
bV9pbXBsLT51cGRhdGVTdXBwb3J0c0FyYml0cmFyeUxheW91dE1vZGVzKCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgSW50UmVjdCYgaW5pdGlh
bEZyYW1lLCBjb25zdCBJbnRSZWN0JiBmaW5hbEZyYW1lKQoreworICAgIFttX2ltcGwtPmZ1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKCkgYmVnYW5FeGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJh
bWU6aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6ZmluYWxGcmFtZV07CisgICAgbV9pbXBsLT51cGRh
dGVTdXBwb3J0c0FyYml0cmFyeUxheW91dE1vZGVzKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJl
RGlkQmVnaW4oKQoreworICAgIG1faW1wbC0+ZGlzbWlzc0NvbnRlbnRSZWxhdGl2ZUNoaWxkV2lu
ZG93c1dpdGhBbmltYXRpb24odHJ1ZSk7CisKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIGlmICht
X3dlYlZpZXcpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmll
dy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKKyNlbmRpZgorfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdh
dGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCit7CisjaWYgV0tfQVBJX0VOQUJMRUQK
KyAgICBpZiAobV93ZWJWaWV3KQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdl
KCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQod2lsbE5hdmlnYXRl
LCBpdGVtKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdpbGxOYXZpZ2F0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGl0ZW0pOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmln
YXRpb25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJiBpdGVtKQoreworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgaWYgKG1fd2ViVmlldykKKyAg
ICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2
aWdhdGlvbkdlc3R1cmVEaWRFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHdpbGxOYXZpZ2F0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworI2VuZGlm
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKCkKK3sK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQoreworI2lmIFdLX0FQSV9FTkFCTEVECisgICAg
aWYgKG1fd2ViVmlldykKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93
ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QoKQoreworI2lmIFdLX0FQSV9F
TkFCTEVECisgICAgaWYgKG1fd2ViVmlldykKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9t
V2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdFdhc1Jl
bW92ZWQoKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKQoreworICAgIGlmIChhdXRvIGdlc3R1cmVD
b250cm9sbGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJvbGxlcigpKQorICAgICAgICBnZXN0dXJl
Q29udHJvbGxlci0+ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCk7
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoKQor
eworICAgIGlmIChhdXRvIGdlc3R1cmVDb250cm9sbGVyID0gbV9pbXBsLT5nZXN0dXJlQ29udHJv
bGxlcigpKQorICAgICAgICBnZXN0dXJlQ29udHJvbGxlci0+ZGlkRmluaXNoTG9hZEZvck1haW5G
cmFtZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGYWlsTG9hZEZvck1haW5GcmFt
ZSgpCit7CisgICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIgPSBtX2ltcGwtPmdlc3R1cmVD
b250cm9sbGVyKCkpCisgICAgICAgIGdlc3R1cmVDb250cm9sbGVyLT5kaWRGYWlsTG9hZEZvck1h
aW5GcmFtZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yTWFpbkZyYW1lKFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlIHR5cGUpCit7Cisg
ICAgaWYgKGF1dG8gZ2VzdHVyZUNvbnRyb2xsZXIgPSBtX2ltcGwtPmdlc3R1cmVDb250cm9sbGVy
KCkpCisgICAgICAgIGdlc3R1cmVDb250cm9sbGVyLT5kaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9u
Rm9yTWFpbkZyYW1lKHR5cGUpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVDb250
cm9sbGVkRWxlbWVudElEUmVzcG9uc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQoreworI2lm
IFdLX0FQSV9FTkFCTEVECisgICAgW21fd2ViVmlldyBfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJ
RFJlc3BvbnNlOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoaWRlbnRpZmllcildOworI2VuZGlm
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZUFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9u
SW5mb1Jlc3BvbnNlKGJvb2wgaGFzQWN0aXZlU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwg
ZG91YmxlIGR1cmF0aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUpCit7CisjaWYgV0tfQVBJX0VOQUJM
RUQKKyAgICBbbV93ZWJWaWV3IF9oYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm9SZXNw
b25zZTpoYXNBY3RpdmVTZXNzaW9uIHRpdGxlOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcodGl0
bGUpIGR1cmF0aW9uOmR1cmF0aW9uIGVsYXBzZWRUaW1lOmVsYXBzZWRUaW1lXTsKKyNlbmRpZgor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0NHUmVjdCBQYWdlQ2xpZW50SW1wbDo6Ym91bmRz
T2ZMYXllckluTGF5ZXJCYWNrZWRXaW5kb3dDb29yZGluYXRlcyhDQUxheWVyICpsYXllcikgY29u
c3QKK3sKKyAgICBDQUxheWVyICp3aW5kb3dDb250ZW50TGF5ZXIgPSBzdGF0aWNfY2FzdDxOU1Zp
ZXcgKj4obV92aWV3LndpbmRvdy5jb250ZW50VmlldykubGF5ZXI7CisgICAgQVNTRVJUKHdpbmRv
d0NvbnRlbnRMYXllcik7CisKKyAgICByZXR1cm4gW3dpbmRvd0NvbnRlbnRMYXllciBjb252ZXJ0
UmVjdDpsYXllci5ib3VuZHMgZnJvbUxheWVyOmxheWVyXTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6ZGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJl
c3VsdERhdGEmIHJlc3VsdCwgYm9vbCBjb250ZW50UHJldmVudHNEZWZhdWx0LCBBUEk6Ok9iamVj
dCogdXNlckRhdGEpCit7CisgICAgbV9pbXBsLT5kaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0
VGVzdChyZXN1bHQsIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIHVzZXJEYXRhKTsKK30KKwordm9p
ZCogUGFnZUNsaWVudEltcGw6OmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JI
aXRUZXN0UmVzdWx0KFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQsIHVp
bnQ2NF90IHR5cGUsIFJlZlB0cjxBUEk6Ok9iamVjdD4gdXNlckRhdGEpCit7CisgICAgcmV0dXJu
IG1faW1wbC0+aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1
bHQoaGl0VGVzdFJlc3VsdC5nZXQoKSwgdHlwZSwgdXNlckRhdGEuZ2V0KCkpOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpkaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpCit7CisgICAgbV9p
bXBsLT5kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjp2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpCit7CisgICAgbV9pbXBsLT52aWRl
b0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
aG93UGxhdGZvcm1Db250ZXh0TWVudShOU01lbnUgKm1lbnUsIEludFBvaW50IGxvY2F0aW9uKQor
eworICAgIFttZW51IHBvcFVwTWVudVBvc2l0aW9uaW5nSXRlbTpuaWwgYXRMb2NhdGlvbjpsb2Nh
dGlvbiBpblZpZXc6bV92aWV3XTsKK30KKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpCitXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyJiBQYWdlQ2xpZW50SW1wbDo6
bWVkaWFTZXNzaW9uTWFuYWdlcigpCit7CisgICAgcmV0dXJuIFdlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OnNoYXJlZCgpOworfQorI2VuZGlmCisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlZlZpZXco
KQoreworICAgIENGUmV0YWluKG1fdmlldyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRl
cmVmVmlldygpCit7CisgICAgQ0ZSZWxlYXNlKG1fdmlldyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbV9pbXBsLT5zdGFydFdpbmRvd0RyYWco
KTsKK30KKworTlNXaW5kb3cgKlBhZ2VDbGllbnRJbXBsOjpwbGF0Zm9ybVdpbmRvdygpCit7Cisg
ICAgcmV0dXJuIG1faW1wbC0+d2luZG93KCk7Cit9CisKKyNpZiBXS19BUElfRU5BQkxFRAorTlNW
aWV3ICpQYWdlQ2xpZW50SW1wbDo6aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKQoreworICAgIHJl
dHVybiBtX2ltcGwtPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Cit9CisKK19XS1JlbW90ZU9i
amVjdFJlZ2lzdHJ5ICpQYWdlQ2xpZW50SW1wbDo6cmVtb3RlT2JqZWN0UmVnaXN0cnkoKQorewor
ICAgIHJldHVybiBtX2ltcGwtPnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCk7Cit9CisjZW5kaWYKKwor
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBt
X2ltcGwtPmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOworfQorCitib29sIFBhZ2VDbGllbnRJ
bXBsOjp3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShjb25zdCBOYXRpdmVXZWJNb3VzZUV2
ZW50JiBldmVudCkKK3sKKyAgICByZXR1cm4gbV9pbXBsLT53aW5kb3dJc0Zyb250V2luZG93VW5k
ZXJNb3VzZShldmVudC5uYXRpdmVFdmVudCgpKTsKK30KKworV2ViQ29yZTo6VXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbiBQYWdlQ2xpZW50SW1wbDo6dXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbigpCit7CisgICAgaWYgKCFtX3ZpZXcpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7CisgICAgcmV0dXJuIChtX3ZpZXcudXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbiA9PSBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25M
ZWZ0VG9SaWdodCkgPyBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFIg
OiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpSVEw7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHJldmlzaW9uIDIyMTQ2NykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiUGFnZUNsaWVudEltcGwuaCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsTWFjLmgiCiAKICNp
ZiBQTEFURk9STShNQUMpCiAKQEAgLTk3LDggKzk3LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwo
TlNWaWV3KiB2aWV3LCBXS1dlYlZpZXcgKndlYlZpZXcpCi0gICAgOiBtX3ZpZXcodmlldykKLSAg
ICAsIG1fd2ViVmlldyh3ZWJWaWV3KQorICAgIDogUGFnZUNsaWVudEltcGxDb2NvYSh3ZWJWaWV3
KQorICAgICwgbV92aWV3KHZpZXcpCiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCiAg
ICAgLCBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPEFsdGVy
bmF0aXZlVGV4dFVJQ29udHJvbGxlcj4oKSkKICNlbmRpZgpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZv
aWQgUGFnZUNsaWVudEltcGw6Om1ha2VGaXJzdFJlc3BvbmRlcigKICAgICBpZiAobV9zaG91bGRT
dXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgIFtb
bV92aWV3IHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVyOm1fdmlld107CisgICAgW1ttX3ZpZXcg
d2luZG93XSBtYWtlRmlyc3RSZXNwb25kZXI6bV92aWV3XTsKIH0KICAgICAKIGJvb2wgUGFnZUNs
aWVudEltcGw6OmlzVmlld1Zpc2libGUoKQpAQCAtNDAwLDcgKzQwMCw3IEBAIEZsb2F0UmVjdCBQ
YWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclMKIHsKICAgICByZXR1cm4gdG9Vc2VyU3BhY2Uo
cmVjdCwgW21fdmlldyB3aW5kb3ddKTsKIH0KLSAgIAorCiBJbnRQb2ludCBQYWdlQ2xpZW50SW1w
bDo6c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiAjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcHVzaApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YkNvbnRleHRNZW51UHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0JKHJldmlzaW9uIDIyMTQ2NykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJBUElDb250ZXh0TWVudUNs
aWVudC5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiTWVudVV0aWxpdGll
cy5oIgotI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBs
TWFjLmgiCiAjaW1wb3J0ICJTZXJ2aWNlc0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2ltcG9ydCAiU3RyaW5nVXRpbGl0aWVzLmgiCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJldmlzaW9uIDIyMTQ2
NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbXBvcnQgIk1lbnVVdGlsaXRpZXMuaCIK
ICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnQu
aCIKLSNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCisjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbE1h
Yy5oIgogI2ltcG9ydCAiUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAjaW1wb3J0ICJT
dHJpbmdVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyLmgiCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCShy
ZXZpc2lvbiAyMjE0NjcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBN
ZW51UHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBVU0Uo
QVBQS0lUKQogCiAjaW1wb3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCi0jaW1wb3J0ICJQYWdl
Q2xpZW50SW1wbC5oIgorI2ltcG9ydCAiUGFnZUNsaWVudEltcGxNYWMuaCIKICNpbXBvcnQgIlBs
YXRmb3JtUG9wdXBNZW51RGF0YS5oIgogI2ltcG9ydCAiU3RyaW5nVXRpbGl0aWVzLmgiCiAjaW1w
b3J0ICJXZWJQb3B1cEl0ZW0uaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIxNDg5KQorKysgU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDggKzEwNCw4IEBACiAJCTBGQ0I0RTUxMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9u
UHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9s
b2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovOyB9OwogCQkwRkNCNEU1
NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tT
Y3JvbGxWaWV3LmggKi87IH07CiAJCTBGQ0I0RTU1MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9s
bFZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNCNEU0NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3Lm1tICovOyB9OwotCQkwRkNC
NEU2MjE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAv
KiBQYWdlQ2xpZW50SW1wbC5oICovOyB9OwotCQkwRkNCNEU2MzE4QkJFM0Q5MDAwRkNGQzkgLyog
UGFnZUNsaWVudEltcGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkNCNEU1OTE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0gKi87
IH07CisJCTBGQ0I0RTYyMThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNTgxOEJC
RTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggKi87IH07CisJCTBGQ0I0RTYzMThC
QkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQ
YWdlQ2xpZW50SW1wbE1hYy5tbSAqLzsgfTsKIAkJMEZDQjRFNjYxOEJCRTNEOTAwMEZDRkM5IC8q
IFdLUHJpbnRpbmdWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkNCNEU1QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcuaCAqLzsg
fTsKIAkJMEZDQjRFNjcxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNUQxOEJCRTNE
OTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovOyB9OwogCQkwRkNCNEU2ODE4QkJFM0Q5
MDAwRkNGQzkgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1RTE4QkJFM0Q5MDAwRkNGQzkg
LyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmggKi87IH07CkBAIC0yMzE0LDggKzIzMTQs
OCBAQAogCQkwRkNCNEU0MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVy
SU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tOyBw
YXRoID0gaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNDQxOEJCRTA0NDAwMEZDRkM5IC8q
IFdLU2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Njcm9s
bFZpZXcuaDsgcGF0aCA9IGlvcy9XS1Njcm9sbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDQjRFNDUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLU2Nyb2xsVmlldy5tbTsgcGF0
aCA9IGlvcy9XS1Njcm9sbFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
Q0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2xpZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkNCNEU1OTE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlQ2xpZW50SW1wbC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5
IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VDbGllbnRJbXBsTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0
RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhZ2VDbGllbnRJbXBsTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU1QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmlu
dGluZ1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcmludGluZ1Zp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNUQxOEJCRTNEOTAwMEZD
RkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tQcmludGluZ1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTExLDYgKzM1MTEsNyBA
QAogCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBlbmRpbmdEb3dubG9hZC5oOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1QzYyRkRGODFFRkMyNjNDMDBDRTA3MkUgLyogV0tVUkxTY2hlbWVUYXNr
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNkNFNkQwMUY1OUJDNDYwMDA3QzZDQiAvKiBQYWdl
Q2xpZW50SW1wbENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gUGFnZUNsaWVudEltcGxDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUM2Q0U2RDMxRjU5RUEzNTAwMDdDNkNCIC8qIFBhZ2VDbGllbnRJbXBsQ29jb2EuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUNsaWVudEltcGxDb2NvYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Qzc3MDY3MzFEMTExRDhCMDAxMjcwMEYgLyogV2ViU29j
a2V0UHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
U29ja2V0UHJvdmlkZXIuY3BwOyBwYXRoID0gTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDN0M4OERDMUQwRjQxQTAwMDlEMkY2RCAv
KiBXZWJTb2NrZXRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJTb2NrZXRQcm92aWRlci5oOyBwYXRoID0gTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qzg1Qzc4NjFDM0YyM0M1MDA2MUE0RkEgLyog
UGVuZGluZ0Rvd25sb2FkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFBlbmRpbmdEb3dubG9hZC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVu
ZGluZ0Rvd25sb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNzUsNiAr
NTI3Niw3IEBACiAJCQkJN0E4MjFGNEQxRTJGNjc5RTAwNjA0NTc3IC8qIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudC5tbSAqLywKIAkJCQkxQUJDM0RGNDE4OTlFNDM3MDA0RjA2MjYg
LyogTmF2aWdhdGlvblN0YXRlLmggKi8sCiAJCQkJMUFCQzNERjMxODk5RTQzNzAwNEYwNjI2IC8q
IE5hdmlnYXRpb25TdGF0ZS5tbSAqLywKKwkJCQk1QzZDRTZEMzFGNTlFQTM1MDAwN0M2Q0IgLyog
UGFnZUNsaWVudEltcGxDb2NvYS5oICovLAogCQkJCTVDNkNFNkQwMUY1OUJDNDYwMDA3QzZDQiAv
KiBQYWdlQ2xpZW50SW1wbENvY29hLm1tICovLAogCQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKIAkJCQlDREEyOUEyMjFDQkVC
NjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICov
LApAQCAtNzY5Niw4ICs3Njk4LDggQEAKIAkJCQlCODc4QjYxMzEzMzQyOERDMDA2ODg4RTkgLyog
Q29ycmVjdGlvblBhbmVsLmggKi8sCiAJCQkJQjg3OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENv
cnJlY3Rpb25QYW5lbC5tbSAqLywKIAkJCQkxQUZERTY1QjE5NTRFOEQ1MDBDNDhGRkEgLyogTGVn
YWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcCAqLywKLQkJCQkwRkNCNEU1ODE4QkJFM0Q5MDAwRkNG
QzkgLyogUGFnZUNsaWVudEltcGwuaCAqLywKLQkJCQkwRkNCNEU1OTE4QkJFM0Q5MDAwRkNGQzkg
LyogUGFnZUNsaWVudEltcGwubW0gKi8sCisJCQkJMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8q
IFBhZ2VDbGllbnRJbXBsTWFjLmggKi8sCisJCQkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8q
IFBhZ2VDbGllbnRJbXBsTWFjLm1tICovLAogCQkJCTFBQjE2QUUwMTY0ODY1NkQwMDI5MEQ2MiAv
KiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmggKi8sCiAJCQkJMEZGMjRBMkYxODc5
RTRGRTAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMu
aW4gKi8sCiAJCQkJMUFCMTZBREYxNjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkubW0gKi8sCkBAIC04NjMyLDggKzg2MzQsOCBAQAogCQkJCTM3QjQ3RTJE
MUQ2NERCNzYwMDVGNEVGRiAvKiBvYmpjU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZG
QjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2
RURBQTYxMTEyNzFDNjAwRTc2NzhCIC8qIFBhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTBGQ0I0RTYyMThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDQjRFNDYxOEJCRTA0NDAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsSU9TLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkNCNEU2MjE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVu
dEltcGxNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzc1MzdDMTgzQTlGREIwMDcyQ0IxNSAv
KiBQYWdlTG9hZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThCNjZCMDFCQzQzQzg2MDA4
MkRGNzcgLyogUGFnZUxvYWRTdGF0ZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTc0
QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwMjAyLDkgKzEwMjA0LDkgQEAKIAkJCQlCQzhBQ0ExNDE2NjcwRDg5MDA0QzE5NDEgLyog
T2JqQ09iamVjdEdyYXBoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzODc0MzQxNzJGNTYxNTAw
MUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M2RDM3RkMxNzJG
NTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkwRkNC
NEU2MzE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1QzZDRTZEMTFGNTlCQzdBMDAwN0M2Q0IgLyogUGFnZUNsaWVudEltcGxDb2NvYS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTBGQ0I0RTQ3MThCQkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50
SW1wbElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0I0RTYzMThCQkUzRDkwMDBGQ0ZDOSAv
KiBQYWdlQ2xpZW50SW1wbE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzc1MzdCMTgzQTlG
REIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NzRB
NTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlFMTk1ODJENjE1M0NDMDU0MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3Vy
Y2VzICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>