<?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>151673</bug_id>
          
          <creation_ts>2015-11-30 13:16:27 -0800</creation_ts>
          <short_desc>Get rid of the !USE(ASYNC_NSTEXTINPUTCLIENT) codepath</short_desc>
          <delta_ts>2015-11-30 15:06:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1144902</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-30 13:16:27 -0800</bug_when>
    <thetext>Get rid of the !USE(ASYNC_NSTEXTINPUTCLIENT) codepath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144903</commentid>
    <comment_count>1</comment_count>
      <attachid>266267</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-30 13:17:40 -0800</bug_when>
    <thetext>Created attachment 266267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144909</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-30 13:25:41 -0800</bug_when>
    <thetext>Not landing this one yet because there might be more to remove and I want the EWS to chew on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144952</commentid>
    <comment_count>3</comment_count>
      <attachid>266267</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-11-30 14:41:30 -0800</bug_when>
    <thetext>Comment on attachment 266267
Patch

None of the touched files are compiled on iOS, or are they?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144956</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-30 14:55:05 -0800</bug_when>
    <thetext>I checked to make sure things were inside PLATFORM(MAC), but I will double-check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144957</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-30 14:56:07 -0800</bug_when>
    <thetext>Yeah, I think WebPage is the only one and I left the PLATFORM(MAC) behind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144966</commentid>
    <comment_count>6</comment_count>
      <attachid>266267</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 15:06:30 -0800</bug_when>
    <thetext>Comment on attachment 266267
Patch

Clearing flags on attachment: 266267

Committed r192834: &lt;http://trac.webkit.org/changeset/192834&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144967</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 15:06:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266267</attachid>
            <date>2015-11-30 13:17:40 -0800</date>
            <delta_ts>2015-11-30 15:06:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151673-20151130131717.patch</filename>
            <type>text/plain</type>
            <size>57517</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyODExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGEwYjg2ZTlmNDVhMDMxMmY3NDU0ODdj
MDYyM2VlYmI3YzZmYmMzZmMuLjQ0ZmUzNzI2OTBhOWFlMzlmZDMxNjIwYzYzMzBkZmJmNTRkNDc3
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBvZiB0aGUgIVVTRShBU1lOQ19O
U1RFWFRJTlBVVENMSUVOVCkgY29kZXBhdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTY3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTUtMTEtMzAgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXSBS
ZW1vdmUgR01haW5Mb29wU291cmNlIGFuZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggZDkzMDYwM2MwZDljNTZlOGQxNGJhY2UwZTY0NTc4M2NkNDE5ZWVmOS4uMTE1NmFi
ZDc2YWQ4NDk1OGM4ZDQ4NGMzMWMxNDZmMzFjMTliZTljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDcyIEBACiAyMDE1LTExLTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgogCisgICAgICAgIEdldCByaWQgb2YgdGhlICFVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQp
IGNvZGVwYXRoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTE2NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpZ25GaXJzdFJlc3BvbmRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnRlcnByZXRLZXlFdmVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpleGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1h
bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQ29tbWFuZEJ5
U2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW5zZXJ0
VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnB1dENvbnRl
eHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2VsZWN0ZWRSYW5n
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoYXNNYXJrZWRUZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVubWFya1RleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0TWFya2VkVGV4dCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjptYXJrZWRSYW5nZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9y
UHJvcG9zZWRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpj
aGFyYWN0ZXJJbmRleEZvclBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnBlcmZvcm1LZXlFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmtleVVwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmtleURvd24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6ZmxhZ3NDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bm90aWZ5
QXBwbGljYXRpb25BYm91dElucHV0Q29udGV4dENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2V0Q29tcG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6aW5zZXJ0VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpnZXRNYXJrZWRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2hhcmFjdGVySW5kZXhGb3JQ
b2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpjYW5jZWxDb21wb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZWRpdG9yU3RhdGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmRpZENoYW5nZVNlbGVjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldENvbXBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6aW5zZXJ0VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKTogRGVs
ZXRlZC4KKworMjAxNS0xMS0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KKwogICAgICAgICBbaU9TXSBPcHRpb24tdXAgYW5kIE9wdGlvbi1kb3duIHNob3VsZCBzY3Jv
bGwgYSBsaXR0bGUgbGVzcyB0aGFuIGEgZnVsbCBwYWdlCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1MzgKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzIzNjQyNjc1PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggZDRlODE5MjZjMDBkODY1ZTVmN2I3NWM2ODI3YzIx
Yjk0YzVmYjY5NS4uZjc4OGQ4YmJlNTQ4NGQwOWQzODBmZWE5YzUwM2UyODc0YmExZTQ3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oCkBAIC0xMTEwLDEwICsxMTEwLDYgQEAKICNkZWZpbmUgSEFWRV9OU19BQ1RJVklU
WSAxCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDEwMDAKLSNkZWZpbmUgVVNFX0FTWU5DX05TVEVYVElOUFVUQ0xJRU5U
IDEKLSNlbmRpZgotCiAjaWYgKE9TKERBUldJTikgJiYgVVNFKENHKSkgfHwgVVNFKEZSRUVUWVBF
KSB8fCAoUExBVEZPUk0oV0lOKSAmJiAoVVNFKENHKSB8fCBVU0UoQ0FJUk8pKSkKICN1bmRlZiBF
TkFCTEVfT1BFTlRZUEVfTUFUSAogI2RlZmluZSBFTkFCTEVfT1BFTlRZUEVfTUFUSCAxCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IGRm
ZmM1YzliMWM1NzVlYWZiMzUxNTFhMWJmOWI0NzI1ZmFjNzllNGUuLmVkMDUzZGZlOWI1ODE4NjMy
MzQxYzA2ZDQyZTY3ODFhZTJjOTI4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0yNDAwLDggKzI0MDAsNiBAQCBXRUJDT1JFX0NP
TU1BTkQoeWFua0FuZFNlbGVjdCkKICAgICByZXR1cm4gX2ltcGwtPmZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlKHRoZVJhbmdlLCBhY3R1YWxSYW5nZSk7CiB9CiAKLSNpZiBVU0UoQVNZTkNfTlNU
RVhUSU5QVVRDTElFTlQpCi0KIC0gKHZvaWQpc2VsZWN0ZWRSYW5nZVdpdGhDb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCheKShOU1JhbmdlIHNlbGVjdGVkUmFuZ2UpKWNvbXBsZXRpb25IYW5kbGVyUHRy
CiB7CiAgICAgX2ltcGwtPnNlbGVjdGVkUmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxl
dGlvbkhhbmRsZXJQdHIpOwpAQCAtMjQzMiw4ICsyNDMwLDYgQEAgV0VCQ09SRV9DT01NQU5EKHlh
bmtBbmRTZWxlY3QpCiAgICAgX2ltcGwtPmNoYXJhY3RlckluZGV4Rm9yUG9pbnQodGhlUG9pbnQs
IGNvbXBsZXRpb25IYW5kbGVyUHRyKTsKIH0KIAotI2VuZGlmIC8vIFVTRShBU1lOQ19OU1RFWFRJ
TlBVVENMSUVOVCkKLQogLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQK
IHsKICAgICByZXR1cm4gX2ltcGwtPnZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCA1ZWFmM2RiMTU5
NDcwODY1NmUyOTliZDkyODBlZGYwNjMxZjQ3ODdlLi5hN2RiYzQxNDY3NWE4YWQ0MWI5ODc0YTU4
MWZlNzAyNzRhYzM3ZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tCkBAIC02MzAsOCArNjMwLDYgQEAgU29tZSBvdGhlciBlZGl0aW5nLXJlbGF0ZWQgbWV0
aG9kcyBzdGlsbCB1bmltcGxlbWVudGVkOgogICAgIHJldHVybiBfZGF0YS0+X2ltcGwtPmZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlKHRoZVJhbmdlLCBhY3R1YWxSYW5nZSk7CiB9CiAKLSNpZiBV
U0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCi0KIC0gKHZvaWQpc2VsZWN0ZWRSYW5nZVdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU1JhbmdlIHNlbGVjdGVkUmFuZ2UpKWNvbXBsZXRp
b25IYW5kbGVyUHRyCiB7CiAgICAgX2RhdGEtPl9pbXBsLT5zZWxlY3RlZFJhbmdlV2l0aENvbXBs
ZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyUHRyKTsKQEAgLTY2Miw4ICs2NjAsNiBAQCBT
b21lIG90aGVyIGVkaXRpbmctcmVsYXRlZCBtZXRob2RzIHN0aWxsIHVuaW1wbGVtZW50ZWQ6CiAg
ICAgX2RhdGEtPl9pbXBsLT5jaGFyYWN0ZXJJbmRleEZvclBvaW50KHRoZVBvaW50LCBjb21wbGV0
aW9uSGFuZGxlclB0cik7CiB9CiAKLSNlbmRpZiAvLyBVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElF
TlQpCi0KIC0gKE5TQXJyYXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0CiB7CiAgICAg
cmV0dXJuIF9kYXRhLT5faW1wbC0+dmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAppbmRleCBjMzFjYzU2
ZTRjODVhMjkwYzM1YTk3MTIxNTNmODQ0ODcyMGQ1NDJiLi43NDZhMzRmMTNjM2Y3ZjNkMmNlYTA0
NGM1YmNhMDBjNDNhYzFjN2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwuaApAQCAtOTUsMTUgKzk1LDYgQEAgdHlwZWRlZiBpZCA8TlNWYWxpZGF0ZWRV
c2VySW50ZXJmYWNlSXRlbT4gVmFsaWRhdGlvbkl0ZW07CiB0eXBlZGVmIFZlY3RvcjxSZXRhaW5Q
dHI8VmFsaWRhdGlvbkl0ZW0+PiBWYWxpZGF0aW9uVmVjdG9yOwogdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVmFsaWRhdGlvblZlY3Rvcj4gVmFsaWRhdGlvbk1hcDsKIAotI2lmICFVU0UoQVNZTkNf
TlNURVhUSU5QVVRDTElFTlQpCi1zdHJ1Y3QgV0tWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyB7Ci0gICAgYm9vbCBldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHM7Ci0gICAg
Ym9vbCBjb25zdW1lZEJ5SU07Ci0gICAgYm9vbCBleGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFu
ZHM7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4qIGNvbW1hbmRzOwotfTsK
LSNlbmRpZgotCiBjbGFzcyBXZWJWaWV3SW1wbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVmlld0ltcGwpOwpAQCAtNDUwLDE0ICs0
NDEsMTIgQEAgcHVibGljOgogICAgIC8vIHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBiaW5kaW5n
cyBtZWNoYW5pc20uCiAgICAgc3RhdGljIGJvb2wgd2FudHNLZXlEb3duRm9yRXZlbnQoTlNFdmVu
dCAqKSB7IHJldHVybiB0cnVlOyB9CiAKLSNpZiBVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQp
CiAgICAgdm9pZCBzZWxlY3RlZFJhbmdlV2l0aENvbXBsZXRpb25IYW5kbGVyKHZvaWQoXikoTlNS
YW5nZSkpOwogICAgIHZvaWQgaGFzTWFya2VkVGV4dFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lk
KF4pKEJPT0wgaGFzTWFya2VkVGV4dCkpOwogICAgIHZvaWQgbWFya2VkUmFuZ2VXaXRoQ29tcGxl
dGlvbkhhbmRsZXIodm9pZCheKShOU1JhbmdlKSk7CiAgICAgdm9pZCBhdHRyaWJ1dGVkU3Vic3Ry
aW5nRm9yUHJvcG9zZWRSYW5nZShOU1JhbmdlLCB2b2lkKF4pKE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0clN0cmluZywgTlNSYW5nZSBhY3R1YWxSYW5nZSkpOwogICAgIHZvaWQgZmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2UoTlNSYW5nZSwgdm9pZCheKShOU1JlY3QgZmlyc3RSZWN0LCBOU1Jhbmdl
IGFjdHVhbFJhbmdlKSk7CiAgICAgdm9pZCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KE5TUG9pbnQs
IHZvaWQoXikoTlNVSW50ZWdlcikpOwotI2VuZGlmIC8vIFVTRShBU1lOQ19OU1RFWFRJTlBVVENM
SUVOVCkKIAogICAgIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50ICopOwogICAgIHZvaWQgbW91c2VE
b3duKE5TRXZlbnQgKik7CkBAIC00OTEsMTMgKzQ4MCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHNldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGUoTlNTdHJpbmcgKmNvbW1hbmROYW1lLCBib29sIGVu
YWJsZWQsIGludCBzdGF0ZSk7CiAKLSNpZiBVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCiAg
ICAgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gY29sbGVjdEtleWJvYXJkTGF5b3V0
Q29tbWFuZHNGb3JFdmVudChOU0V2ZW50ICopOwogICAgIHZvaWQgaW50ZXJwcmV0S2V5RXZlbnQo
TlNFdmVudCAqLCB2b2lkKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCBoYW5kbGVkLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpKTsKLSNlbHNlCi0gICAgdm9pZCBleGVj
dXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzKCk7Ci0gICAgYm9vbCBpbnRlcnByZXRLZXlFdmVudChO
U0V2ZW50ICosIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7Ci0jZW5kaWYKIAog
ICAgIHZvaWQgbW91c2VNb3ZlZEludGVybmFsKE5TRXZlbnQgKik7CiAgICAgdm9pZCBtb3VzZURv
d25JbnRlcm5hbChOU0V2ZW50ICopOwpAQCAtNjE3LDExICs2MDEsNyBAQCBwcml2YXRlOgogICAg
IC8vIHRoZSBhcHBsaWNhdGlvbiB0byBkaXN0aW5ndWlzaCB0aGUgY2FzZSBvZiBhIG5ldyBldmVu
dCBmcm9tIG9uZQogICAgIC8vIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSBzZW50IHRvIFdlYkNvcmUu
CiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQ7Ci0jaWYg
VVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQogICAgIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVz
c0NvbW1hbmQ+KiBtX2NvbGxlY3RlZEtleXByZXNzQ29tbWFuZHMgeyBudWxscHRyIH07Ci0jZWxz
ZQotICAgIFdLVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIG1faW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVycyB7IG51bGxwdHIgfTsKLSNlbmRpZgogfTsKICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCmluZGV4IGUwMzVhOWQwY2JjMjIwM2EzMGFlZjcxYzdmYjgwZDUyMTc1NmRiMzYuLjA3
NWU0ZGUxMzExYmMwM2QyZTE1OTUyYzg2OWYwNjRlOTU0OWJjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTkzLDEzICs5MywxMSBAQAog
U09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMKExvb2t1cCwgTFVOb3RpZmljYXRpb25Qb3BvdmVy
V2lsbENsb3NlLCBOU1N0cmluZyAqKQogCiAvLyBGSVhNRTogTW92ZSB0byBhbiBTUEkgaGVhZGVy
LgotI2lmIFVTRShBU1lOQ19OU1RFWFRJTlBVVENMSUVOVCkKIEBpbnRlcmZhY2UgTlNUZXh0SW5w
dXRDb250ZXh0IChXS05TVGV4dElucHV0Q29udGV4dERldGFpbHMpCiAtICh2b2lkKWhhbmRsZUV2
ZW50OihOU0V2ZW50ICopZXZlbnQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCBoYW5k
bGVkKSljb21wbGV0aW9uSGFuZGxlcjsKIC0gKHZvaWQpaGFuZGxlRXZlbnRCeUlucHV0TWV0aG9k
OihOU0V2ZW50ICopZXZlbnQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCBoYW5kbGVk
KSljb21wbGV0aW9uSGFuZGxlcjsKIC0gKEJPT0wpaGFuZGxlRXZlbnRCeUtleWJvYXJkTGF5b3V0
OihOU0V2ZW50ICopZXZlbnQ7CiBAZW5kCi0jZW5kaWYKIAogQGludGVyZmFjZSBXS1dpbmRvd1Zp
c2liaWxpdHlPYnNlcnZlciA6IE5TT2JqZWN0IHsKICAgICBOU1ZpZXcgKl92aWV3OwpAQCAtNjA3
LDEyICs2MDUsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpyZXNpZ25GaXJzdFJlc3BvbmRlcigpCiAg
ICAgbV93aWxsQmVjb21lRmlyc3RSZXNwb25kZXJBZ2FpbiA9IGZhbHNlOwogICAgIG1faW5SZXNp
Z25GaXJzdFJlc3BvbmRlciA9IHRydWU7CiAKLSNpZiBVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElF
TlQpCiAgICAgbV9wYWdlLT5jb25maXJtQ29tcG9zaXRpb25Bc3luYygpOwotI2Vsc2UKLSAgICBp
ZiAobV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uICYmICFtX3BhZ2UtPmVkaXRv
clN0YXRlKCkuc2hvdWxkSWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UpCi0gICAgICAg
IG1fcGFnZS0+Y2FuY2VsQ29tcG9zaXRpb24oKTsKLSNlbmRpZgogCiAgICAgbm90aWZ5SW5wdXRD
b250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpOwogCkBAIC0zMzA2LDggKzMyOTksNiBA
QCBzdGF0aWMgYm9vbCBldmVudEtleUNvZGVJc1plcm9Pck51bUxvY2tPckZuKE5TRXZlbnQgKmV2
ZW50KQogICAgIHJldHVybiAha2V5Q29kZSB8fCBrZXlDb2RlID09IDEwIHx8IGtleUNvZGUgPT0g
NjM7CiB9CiAKLSNpZiBVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCi0KIFZlY3RvcjxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+IFdlYlZpZXdJbXBsOjpjb2xsZWN0S2V5Ym9hcmRMYXlvdXRD
b21tYW5kc0ZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIFZlY3RvcjxXZWJDb3JlOjpL
ZXlwcmVzc0NvbW1hbmQ+IGNvbW1hbmRzOwpAQCAtMzc2Miw0NTkgKzM3NTMsNiBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpmbGFnc0NoYW5nZWQoTlNFdmVudCAqZXZlbnQpCiAgICAgfSk7CiB9CiAKLSNl
bHNlIC8vIFVTRShBU1lOQ19OU1RFWFRJTlBVVENMSUVOVCkKLQotYm9vbCBXZWJWaWV3SW1wbDo6
aW50ZXJwcmV0S2V5RXZlbnQoTlNFdmVudCAqZXZlbnQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVz
c0NvbW1hbmQ+JiBjb21tYW5kcykKLXsKLSAgICBBU1NFUlQoIW1faW50ZXJwcmV0S2V5RXZlbnRz
UGFyYW1ldGVycyk7Ci0gICAgQVNTRVJUKGNvbW1hbmRzLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAo
W2V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFuZ2VkKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAg
ICBXS1ZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgcGFy
YW1ldGVycy5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgPSBmYWxzZTsKLSAgICBw
YXJhbWV0ZXJzLmV4ZWN1dGluZ1NhdmVkS2V5cHJlc3NDb21tYW5kcyA9IGZhbHNlOwotICAgIC8v
IFdlIGFzc3VtZSB0aGF0IGFuIGlucHV0IG1ldGhvZCBoYXMgY29uc3VtZWQgdGhlIGV2ZW50LCBh
bmQgb25seSBjaGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0aGUgTlNUZXh0SW5wdXQg
bWV0aG9kcyBpcyBjYWxsZWQuCi0gICAgLy8gV2UgYXNzdW1lIHRoZSBJTSB3aWxsICpub3QqIGNv
bnN1bWUgaG90a2V5IHNlcXVlbmNlcy4KLSAgICBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTSA9ICEo
W2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb21tYW5kS2V5TWFzayk7Ci0gICAgcGFyYW1ldGVy
cy5jb21tYW5kcyA9ICZjb21tYW5kczsKLSAgICBtX2ludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMgPSAmcGFyYW1ldGVyczsKLQotICAgIExPRyhUZXh0SW5wdXQsICItPiBpbnRlcnByZXRLZXlF
dmVudHM6JXAgJUAiLCBldmVudCwgZXZlbnQpOwotICAgIFttX3ZpZXcgaW50ZXJwcmV0S2V5RXZl
bnRzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpldmVudF1dOwotCi0gICAgbV9pbnRlcnByZXRL
ZXlFdmVudHNQYXJhbWV0ZXJzID0gbnVsbHB0cjsKLQotICAgIC8vIEFuIGlucHV0IG1ldGhvZCBt
YXkgY29uc3VtZSBhbiBldmVudCBhbmQgbm90IHRlbGwgdXMgKGUuZy4gd2hlbiBkaXNwbGF5aW5n
IGEgY2FuZGlkYXRlIHdpbmRvdyksCi0gICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgbm90
IGJ1YmJsZSB0aGUgZXZlbnQgdXAgdGhlIERPTS4KLSAgICBpZiAocGFyYW1ldGVycy5jb25zdW1l
ZEJ5SU0pIHsKLSAgICAgICAgQVNTRVJUKGNvbW1hbmRzLmlzRW1wdHkoKSk7Ci0gICAgICAgIExP
RyhUZXh0SW5wdXQsICIuLi5ldmVudCAlcCB3YXMgY29uc3VtZWQgYnkgYW4gaW5wdXQgbWV0aG9k
IiwgZXZlbnQpOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLQotICAgIExPRyhUZXh0SW5w
dXQsICIuLi5pbnRlcnByZXRLZXlFdmVudHMgZm9yIGV2ZW50ICVwIGRvbmUsIHJldHVybnMgJWQi
LCBldmVudCwgcGFyYW1ldGVycy5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMpOwot
Ci0gICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVkIGFsbCBvciBzb21lIG9mIHRoZSBj
b21tYW5kcywgdGhlIGV2ZW50IGlzICJoYW5kbGVkIi4gTm90ZSB0aGF0IHRoZXJlIGFyZSBhZGRp
dGlvbmFsIGNoZWNrcyBvbiB3ZWIgcHJvY2VzcyBzaWRlLgotICAgIHJldHVybiBwYXJhbWV0ZXJz
LmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0czsKLX0KLQotdm9pZCBXZWJWaWV3SW1w
bDo6ZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcygpCi17Ci0gICAgYXV0byogcGFyYW1ldGVy
cyA9IG1faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBpZiAoIXBhcmFtZXRlcnMg
fHwgcGFyYW1ldGVycy0+Y29tbWFuZHMtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gV2UgY291bGQgYmUgY2FsbGVkIGFnYWluIGlmIHRoZSBleGVjdXRpb24gb2Ygb25lIGNv
bW1hbmQgdHJpZ2dlcnMgYSBjYWxsIHRvIHNlbGVjdGVkUmFuZ2UuCi0gICAgLy8gSW4gdGhpcyBj
YXNlLCB0aGUgc3RhdGUgaXMgdXAgdG8gZGF0ZSwgYW5kIHdlIGRvbid0IG5lZWQgdG8gZXhlY3V0
ZSBhbnkgbW9yZSBzYXZlZCBjb21tYW5kcyB0byByZXR1cm4gYSByZXN1bHQuCi0gICAgaWYgKHBh
cmFtZXRlcnMtPmV4ZWN1dGluZ1NhdmVkS2V5cHJlc3NDb21tYW5kcykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTE9HKFRleHRJbnB1dCwgIkV4ZWN1dGluZyAldSBzYXZlZCBrZXlwcmVzcyBjb21t
YW5kcy4uLiIsIHBhcmFtZXRlcnMtPmNvbW1hbmRzLT5zaXplKCkpOwotCi0gICAgcGFyYW1ldGVy
cy0+ZXhlY3V0aW5nU2F2ZWRLZXlwcmVzc0NvbW1hbmRzID0gdHJ1ZTsKLSAgICBwYXJhbWV0ZXJz
LT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgfD0gbV9wYWdlLT5leGVjdXRlS2V5
cHJlc3NDb21tYW5kcygqcGFyYW1ldGVycy0+Y29tbWFuZHMpOwotICAgIHBhcmFtZXRlcnMtPmNv
bW1hbmRzLT5jbGVhcigpOwotICAgIHBhcmFtZXRlcnMtPmV4ZWN1dGluZ1NhdmVkS2V5cHJlc3ND
b21tYW5kcyA9IGZhbHNlOwotCi0gICAgTE9HKFRleHRJbnB1dCwgIi4uLmRvbmUgZXhlY3V0aW5n
IHNhdmVkIGtleXByZXNzIGNvbW1hbmRzLiIpOwotfQotCi12b2lkIFdlYlZpZXdJbXBsOjpkb0Nv
bW1hbmRCeVNlbGVjdG9yKFNFTCBzZWxlY3RvcikKLXsKLSAgICBMT0coVGV4dElucHV0LCAiZG9D
b21tYW5kQnlTZWxlY3RvcjpcIiVzXCIiLCBzZWxfZ2V0TmFtZShzZWxlY3RvcikpOwotCi0gICAg
YXV0byogcGFyYW1ldGVycyA9IG1faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBp
ZiAocGFyYW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gZmFsc2U7
Ci0KLSAgICAvLyBBcyBpbiBpbnNlcnRUZXh0OnJlcGxhY2VtZW50UmFuZ2U6LCB3ZSBhc3N1bWUg
dGhhdCB0aGUgY2FsbCBjb21lcyBmcm9tIGFuIGlucHV0IG1ldGhvZCBpZiB0aGVyZSBpcyBtYXJr
ZWQgdGV4dC4KLSAgICBib29sIGlzRnJvbUlucHV0TWV0aG9kID0gbV9wYWdlLT5lZGl0b3JTdGF0
ZSgpLmhhc0NvbXBvc2l0aW9uOwotCi0gICAgaWYgKHBhcmFtZXRlcnMgJiYgIWlzRnJvbUlucHV0
TWV0aG9kKSB7Ci0gICAgICAgIFdlYkNvcmU6OktleXByZXNzQ29tbWFuZCBjb21tYW5kKE5TU3Ry
aW5nRnJvbVNlbGVjdG9yKHNlbGVjdG9yKSk7Ci0gICAgICAgIHBhcmFtZXRlcnMtPmNvbW1hbmRz
LT5hcHBlbmQoY29tbWFuZCk7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICIuLi5zdG9yZWQiKTsK
LSAgICAgICAgbV9wYWdlLT5yZWdpc3RlcktleXByZXNzQ29tbWFuZE5hbWUoY29tbWFuZC5jb21t
YW5kTmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlIGNvbW1h
bmQgdG8gRWRpdG9yIHN5bmNocm9ub3VzbHkgYW5kIG9ubHkgc2VuZCBpdCBhbG9uZyB0aGUKLSAg
ICAgICAgLy8gcmVzcG9uZGVyIGNoYWluIGlmIGl0J3MgYSBzZWxlY3RvciB0aGF0IGRvZXMgbm90
IGNvcnJlc3BvbmQgdG8gYW4gZWRpdGluZyBjb21tYW5kLgotICAgICAgICBbbV92aWV3IF93ZWJf
c3VwZXJEb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
Vmlld0ltcGw6Omluc2VydFRleHQoaWQgc3RyaW5nKQotewotICAgIC8vIFVubGlrZSBhbiBOU1Rl
eHRJbnB1dENsaWVudCB2YXJpYW50IHdpdGggcmVwbGFjZW1lbnRSYW5nZSwgdGhpcyBOU1Jlc3Bv
bmRlciBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gaW5wdXQgY29udGV4dCwKLSAg
ICAvLyBzbyB0ZXh0IGlucHV0IHByb2Nlc3NpbmcgaXNuJ3QgcGVyZm9ybWVkLiBXZSBhcmUgbm90
IGdvaW5nIHRvIGFjdHVhbGx5IGluc2VydCBhbnkgdGV4dCBpbiB0aGF0IGNhc2UsIGJ1dCBzYXZp
bmcgYW4gaW5zZXJ0VGV4dAotICAgIC8vIGNvbW1hbmQgZW5zdXJlcyB0aGF0IGEga2V5cHJlc3Mg
ZXZlbnQgaXMgZGlzcGF0Y2hlZCBhcyBhcHByb3ByaWF0ZS4KLSAgICBpbnNlcnRUZXh0KHN0cmlu
ZywgTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCkpOwotfQotCi12b2lkIFdlYlZpZXdJbXBsOjpp
bnNlcnRUZXh0KGlkIHN0cmluZywgTlNSYW5nZSByZXBsYWNlbWVudFJhbmdlKQotewotICAgIGJv
b2wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0
ZWRTdHJpbmcgY2xhc3NdXTsKLSAgICBBU1NFUlQoaXNBdHRyaWJ1dGVkU3RyaW5nIHx8IFtzdHJp
bmcgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7Ci0KLSAgICBpZiAocmVwbGFjZW1l
bnRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQotICAgICAgICBMT0coVGV4dElucHV0LCAi
aW5zZXJ0VGV4dDpcIiVAXCIgcmVwbGFjZW1lbnRSYW5nZTooJXUsICV1KSIsIGlzQXR0cmlidXRl
ZFN0cmluZyA/IFtzdHJpbmcgc3RyaW5nXSA6IHN0cmluZywgcmVwbGFjZW1lbnRSYW5nZS5sb2Nh
dGlvbiwgcmVwbGFjZW1lbnRSYW5nZS5sZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgTE9HKFRl
eHRJbnB1dCwgImluc2VydFRleHQ6XCIlQFwiIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmlu
ZyBzdHJpbmddIDogc3RyaW5nKTsKLSAgICBhdXRvKiBwYXJhbWV0ZXJzID0gbV9pbnRlcnByZXRL
ZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIGlmIChwYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0
ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKLQotICAgIE5TU3RyaW5nICp0ZXh0OwotICAgIGJv
b2wgaXNGcm9tSW5wdXRNZXRob2QgPSBtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRp
b247Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiBkaWN0
YXRpb25BbHRlcm5hdGl2ZXM7Ci0KLSAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7Ci0jaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgICAgIFdlYkNvcmU6OmNvbGxlY3REaWN0
YXRpb25UZXh0QWx0ZXJuYXRpdmVzKHN0cmluZywgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKLSNl
bmRpZgotICAgICAgICAvLyBGSVhNRTogV2UgaWdub3JlIG1vc3QgYXR0cmlidXRlcyBmcm9tIHRo
ZSBzdHJpbmcsIHNvIGZvciBleGFtcGxlIGluc2VydGluZyBmcm9tIENoYXJhY3RlciBQYWxldHRl
IGxvc2VzIGZvbnQgYW5kIGdseXBoIHZhcmlhdGlvbiBkYXRhLgotICAgICAgICB0ZXh0ID0gW3N0
cmluZyBzdHJpbmddOwotICAgIH0gZWxzZQotICAgICAgICB0ZXh0ID0gc3RyaW5nOwotCi0gICAg
Ly8gaW5zZXJ0VGV4dCBjYW4gYmUgY2FsbGVkIGZvciBzZXZlcmFsIHJlYXNvbnM6Ci0gICAgLy8g
LSBJZiBpdCdzIGZyb20gbm9ybWFsIGtleSBldmVudCBwcm9jZXNzaW5nIChpbmNsdWRpbmcga2V5
IGJpbmRpbmdzKSwgd2UgbWF5IG5lZWQgdG8gc2F2ZSB0aGUgYWN0aW9uIHRvIHBlcmZvcm0gaXQg
bGF0ZXIuCi0gICAgLy8gLSBJZiBpdCdzIGZyb20gYW4gaW5wdXQgbWV0aG9kLCB0aGVuIHdlIHNo
b3VsZCBpbnNlcnQgdGhlIHRleHQgbm93LiBXZSBhc3N1bWUgaXQncyBmcm9tIHRoZSBpbnB1dCBt
ZXRob2QgaWYgd2UgaGF2ZSBtYXJrZWQgdGV4dC4KLSAgICAvLyBGSVhNRTogSW4gdGhlb3J5LCB0
aGlzIGNvdWxkIGJlIHdyb25nIGZvciBzb21lIGlucHV0IG1ldGhvZHMsIHNvIHdlIHNob3VsZCB0
cnkgdG8gZmluZCBhbm90aGVyIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIGNhbGwgaXMgZnJvbSB0
aGUgaW5wdXQgbWV0aG9kLgotICAgIC8vIC0gSWYgaXQncyBzZW50IG91dHNpZGUgb2Yga2V5Ym9h
cmQgZXZlbnQgcHJvY2Vzc2luZyAoZS5nLiBmcm9tIENoYXJhY3RlciBWaWV3ZXIsIG9yIHdoZW4g
Y29uZmlybWluZyBhbiBpbmxpbmUgaW5wdXQgYXJlYSB3aXRoIGEgbW91c2UpLAotICAgIC8vIHRo
ZW4gd2UgYWxzbyBleGVjdXRlIGl0IGltbWVkaWF0ZWx5LCBhcyB0aGVyZSB3aWxsIGJlIG5vIG90
aGVyIGNoYW5jZS4KLSAgICBpZiAocGFyYW1ldGVycyAmJiAhaXNGcm9tSW5wdXRNZXRob2QpIHsK
LSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSByZXBsYWNlbWVudFJhbmdlIGluIHRoaXMgY2FzZSwg
dG9vLiBJdCdzIGtub3duIHRvIG9jY3VyIGluIHByYWN0aWNlIHdoZW4gY2FuY2VsaW5nIFByZXNz
IGFuZCBIb2xkIChzZWUgPHJkYXI6Ly8xMTk0MDY3MD4pLgotICAgICAgICBBU1NFUlQocmVwbGFj
ZW1lbnRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKTsKLSAgICAgICAgV2ViQ29yZTo6S2V5
cHJlc3NDb21tYW5kIGNvbW1hbmQoImluc2VydFRleHQ6IiwgdGV4dCk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMtPmNvbW1hbmRzLT5hcHBlbmQoY29tbWFuZCk7Ci0gICAgICAgIG1fcGFnZS0+cmVnaXN0
ZXJLZXlwcmVzc0NvbW1hbmROYW1lKGNvbW1hbmQuY29tbWFuZE5hbWUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIGV2ZW50VGV4dCA9IHRleHQ7Ci0gICAgZXZlbnRUZXh0
LnJlcGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUgdGhp
bmcgaXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJDb3JlCi0gICAgYm9vbCBldmVudEhh
bmRsZWQ7Ci0gICAgaWYgKCFkaWN0YXRpb25BbHRlcm5hdGl2ZXMuaXNFbXB0eSgpKQotICAgICAg
ICBldmVudEhhbmRsZWQgPSBtX3BhZ2UtPmluc2VydERpY3RhdGVkVGV4dChldmVudFRleHQsIHJl
cGxhY2VtZW50UmFuZ2UsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7Ci0gICAgZWxzZQotICAgICAg
ICBldmVudEhhbmRsZWQgPSBtX3BhZ2UtPmluc2VydFRleHQoZXZlbnRUZXh0LCByZXBsYWNlbWVu
dFJhbmdlKTsKLQotICAgIGlmIChwYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLT5ldmVu
dEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgfD0gZXZlbnRIYW5kbGVkOwotfQotCi1OU1Rl
eHRJbnB1dENvbnRleHQgKldlYlZpZXdJbXBsOjppbnB1dENvbnRleHQoKQotewotICAgIGF1dG8q
IHBhcmFtZXRlcnMgPSBtX2ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0KLSAgICBpZiAo
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSAmJiAhcGFyYW1ldGVycykKLSAgICAg
ICAgcmV0dXJuIFtbV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyIHNoYXJlZFRleHRJbnB1dFdp
bmRvd0NvbnRyb2xsZXJdIGlucHV0Q29udGV4dF07Ci0KLSAgICAvLyBEaXNhYmxlIHRleHQgaW5w
dXQgbWFjaGluZXJ5IHdoZW4gaW4gbm9uLWVkaXRhYmxlIGNvbnRlbnQuIEFuIGludmlzaWJsZSBp
bmxpbmUgaW5wdXQgYXJlYSBhZmZlY3RzIHBlcmZvcm1hbmNlLCBhbmQgY2FuIHByZXZlbnQgRXhw
b3NlIGZyb20gd29ya2luZy4KLSAgICBpZiAoIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRl
bnRFZGl0YWJsZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBbbV92aWV3IF93
ZWJfc3VwZXJJbnB1dENvbnRleHRdOwotfQotCi1OU1JhbmdlIFdlYlZpZXdJbXBsOjpzZWxlY3Rl
ZFJhbmdlKCkKLXsKLSAgICBleGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzKCk7Ci0KLSAgICBF
ZGl0aW5nUmFuZ2Ugc2VsZWN0ZWRSYW5nZTsKLSAgICBtX3BhZ2UtPmdldFNlbGVjdGVkUmFuZ2Uo
c2VsZWN0ZWRSYW5nZSk7Ci0KLSAgICBOU1JhbmdlIHJlc3VsdCA9IHNlbGVjdGVkUmFuZ2U7Ci0g
ICAgaWYgKHJlc3VsdC5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICBMT0coVGV4dElu
cHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoTlNOb3RGb3VuZCwgJXUpIiwgcmVzdWx0Lmxlbmd0aCk7
Ci0gICAgZWxzZQotICAgICAgICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoJXUs
ICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1ib29sIFdlYlZpZXdJbXBsOjpoYXNNYXJrZWRUZXh0KCkKLXsKLSAgICBhdXRv
KiBwYXJhbWV0ZXJzID0gbV9pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotCi0gICAgQk9P
TCByZXN1bHQ7Ci0gICAgaWYgKHBhcmFtZXRlcnMpIHsKLSAgICAgICAgcmVzdWx0ID0gbV9wYWdl
LT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgICAgICAvLyBBIHNhdmVkIGNvbW1hbmQgY2FuIGNvbmZpcm0gYSBjb21wb3NpdGlvbiwg
YnV0IGl0IGNhbm5vdCBzdGFydCBhIG5ldyBvbmUuCi0gICAgICAgICAgICBleGVjdXRlU2F2ZWRL
ZXlwcmVzc0NvbW1hbmRzKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBtX3BhZ2UtPmVkaXRvclN0
YXRlKCkuaGFzQ29tcG9zaXRpb247Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBF
ZGl0aW5nUmFuZ2UgbWFya2VkUmFuZ2U7Ci0gICAgICAgIG1fcGFnZS0+Z2V0TWFya2VkUmFuZ2Uo
bWFya2VkUmFuZ2UpOwotICAgICAgICByZXN1bHQgPSBtYXJrZWRSYW5nZS5sb2NhdGlvbiAhPSBu
b3RGb3VuZDsKLSAgICB9Ci0KLSAgICBMT0coVGV4dElucHV0LCAiaGFzTWFya2VkVGV4dCAtPiAl
dSIsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJWaWV3SW1wbDo6
dW5tYXJrVGV4dCgpCi17Ci0gICAgZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcygpOwotCi0g
ICAgTE9HKFRleHRJbnB1dCwgInVubWFya1RleHQiKTsKLQotICAgIGF1dG8qIHBhcmFtZXRlcnMg
PSBtX2ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0KLSAgICBpZiAocGFyYW1ldGVycykg
ewotICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMg
PSB0cnVlOwotICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBtX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlvbigpOwotfQotCi12b2lkIFdlYlZpZXdJ
bXBsOjpzZXRNYXJrZWRUZXh0KGlkIHN0cmluZywgTlNSYW5nZSBuZXdTZWxlY3RlZFJhbmdlLCBO
U1JhbmdlIHJlcGxhY2VtZW50UmFuZ2UpCi17Ci0gICAgZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21t
YW5kcygpOwotCi0gICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9m
Q2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOwotICAgIEFTU0VSVChpc0F0dHJpYnV0
ZWRTdHJpbmcgfHwgW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKLQot
ICAgIExPRyhUZXh0SW5wdXQsICJzZXRNYXJrZWRUZXh0OlwiJUBcIiBzZWxlY3RlZFJhbmdlOigl
dSwgJXUpIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nLCBu
ZXdTZWxlY3RlZFJhbmdlLmxvY2F0aW9uLCBuZXdTZWxlY3RlZFJhbmdlLmxlbmd0aCk7Ci0KLSAg
ICBhdXRvKiBwYXJhbWV0ZXJzID0gbV9pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotCi0g
ICAgaWYgKHBhcmFtZXRlcnMpIHsKLSAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRh
dGlvbkhhZFNpZGVFZmZlY3RzID0gdHJ1ZTsKLSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRC
eUlNID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlv
blVuZGVybGluZT4gdW5kZXJsaW5lczsKLSAgICBOU1N0cmluZyAqdGV4dDsKLQotICAgIGlmIChp
c0F0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9yZSBtb3N0IGF0
dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBhbiBpbnB1dCBtZXRob2QgY2Fubm90IHNwZWNp
ZnkgZS5nLiBhIGZvbnQgb3IgYSBnbHlwaCB2YXJpYXRpb24uCi0gICAgICAgIHRleHQgPSBbc3Ry
aW5nIHN0cmluZ107Ci0gICAgICAgIHVuZGVybGluZXMgPSBleHRyYWN0VW5kZXJsaW5lcyhzdHJp
bmcpOwotICAgIH0gZWxzZQotICAgICAgICB0ZXh0ID0gc3RyaW5nOwotCi0gICAgaWYgKG1fcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCkgewotICAgICAgICAvLyBJbiBwYXNz
d29yZCBmaWVsZHMsIHdlIG9ubHkgYWxsb3cgQVNDSUkgZGVhZCBrZXlzLCBhbmQgZG9uJ3QgYWxs
b3cgaW5saW5lIGlucHV0LCBtYXRjaGluZyBOU1NlY3VyZVRleHRJbnB1dEZpZWxkLgotICAgICAg
ICAvLyBBbGxvd2luZyBBU0NJSSBkZWFkIGtleXMgaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBmdWxs
IFJvbWFuIGlucHV0IHdoZW4gdXNpbmcgYSBWaWV0bmFtZXNlIGtleWJvYXJkLgotICAgICAgICBB
U1NFUlQoIW1fcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbik7Ci0gICAgICAgIG5v
dGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKTsKLSAgICAgICAgaWYg
KFt0ZXh0IGxlbmd0aF0gPT0gMSAmJiBbW3RleHQgZGVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmlj
YWxNYXBwaW5nXSBjaGFyYWN0ZXJBdEluZGV4OjBdIDwgMHg4MCkgewotICAgICAgICAgICAgbV9w
YWdlLT5pbnNlcnRUZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2UpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIE5TQmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9w
YWdlLT5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxlY3RlZFJhbmdlLCBy
ZXBsYWNlbWVudFJhbmdlKTsKLX0KLQotTlNSYW5nZSBXZWJWaWV3SW1wbDo6bWFya2VkUmFuZ2Uo
KQotewotICAgIGV4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMoKTsKLQotICAgIEVkaXRpbmdS
YW5nZSBtYXJrZWRSYW5nZTsKLSAgICBtX3BhZ2UtPmdldE1hcmtlZFJhbmdlKG1hcmtlZFJhbmdl
KTsKLQotICAgIE5TUmFuZ2UgcmVzdWx0ID0gbWFya2VkUmFuZ2U7Ci0gICAgaWYgKHJlc3VsdC5s
b2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICBMT0coVGV4dElucHV0LCAibWFya2VkUmFu
Z2UgLT4gKE5TTm90Rm91bmQsICV1KSIsIHJlc3VsdC5sZW5ndGgpOwotICAgIGVsc2UKLSAgICAg
ICAgTE9HKFRleHRJbnB1dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0
aW9uLCByZXN1bHQubGVuZ3RoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5TQXR0cmli
dXRlZFN0cmluZyAqV2ViVmlld0ltcGw6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJh
bmdlKE5TUmFuZ2UgcHJvcG9zZWRSYW5nZSwgTlNSYW5nZVBvaW50ZXIgYWN0dWFsUmFuZ2UpCi17
Ci0gICAgZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcygpOwotCi0gICAgaWYgKCFtX3BhZ2Ut
PmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1
dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwgcHJvcG9z
ZWRSYW5nZS5sb2NhdGlvbiwgcHJvcG9zZWRSYW5nZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4g
bmlsOwotICAgIH0KLQotICAgIGlmIChtX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3Jk
RmllbGQpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBBdHRyaWJ1dGVkU3RyaW5nIHJlc3Vs
dDsKLSAgICBtX3BhZ2UtPmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UocHJvcG9zZWRS
YW5nZSwgcmVzdWx0KTsKLQotICAgIGlmIChhY3R1YWxSYW5nZSkgewotICAgICAgICAqYWN0dWFs
UmFuZ2UgPSBwcm9wb3NlZFJhbmdlOwotICAgICAgICBhY3R1YWxSYW5nZS0+bGVuZ3RoID0gW3Jl
c3VsdC5zdHJpbmcgbGVuZ3RoXTsKLSAgICB9Ci0KLSAgICBMT0coVGV4dElucHV0LCAiYXR0cmli
dXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBwcm9wb3NlZFJhbmdl
LmxvY2F0aW9uLCBwcm9wb3NlZFJhbmdlLmxlbmd0aCwgW3Jlc3VsdC5zdHJpbmcgc3RyaW5nXSk7
Ci0gICAgcmV0dXJuIFtbcmVzdWx0LnN0cmluZyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLX0KLQot
TlNVSW50ZWdlciBXZWJWaWV3SW1wbDo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChOU1BvaW50IHBv
aW50KQotewotICAgIGV4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMoKTsKLQotICAgIE5TV2lu
ZG93ICp3aW5kb3cgPSBtX3ZpZXcud2luZG93OwotICAgIAotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQt
ZGVjbGFyYXRpb25zIgotICAgIGlmICh3aW5kb3cpCi0gICAgICAgIHBvaW50ID0gW3dpbmRvdyBj
b252ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK
LSAgICBwb2ludCA9IFttX3ZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF07ICAv
LyB0aGUgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIG1haW4gZnJhbWUKLSAgICAKLSAgICB1aW50
NjRfdCByZXN1bHQgPSBtX3BhZ2UtPmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoV2ViQ29yZTo6SW50
UG9pbnQocG9pbnQpKTsKLSAgICBpZiAocmVzdWx0ID09IG5vdEZvdW5kKQotICAgICAgICByZXN1
bHQgPSBOU05vdEZvdW5kOwotICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0ZXJJbmRleEZvclBv
aW50OiglZiwgJWYpIC0+ICV1IiwgcG9pbnQueCwgcG9pbnQueSwgcmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1OU1JlY3QgV2ViVmlld0ltcGw6OmZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlKE5TUmFuZ2UgcmFuZ2UsIE5TUmFuZ2VQb2ludGVyIGFjdHVhbFJhbmdlKQotewotICAg
IGV4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMoKTsKLQotICAgIC8vIEp1c3QgdG8gbWF0Y2gg
TlNUZXh0VmlldydzIGJlaGF2aW9yLiBSZWdyZXNzaW9uIHRlc3RzIGNhbm5vdCBkZXRlY3QgdGhp
czsKLSAgICAvLyB0byByZXByb2R1Y2UsIHVzZSBhIHRlc3QgYXBwbGljYXRpb24gZnJvbSBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjgyCi0gICAgLy8gKHR5cGUgc29t
ZXRoaW5nOyB0cnkgcmFuZ2VzICgxLCAtMSkgYW5kICgyLCAtMSkuCi0gICAgaWYgKChyYW5nZS5s
b2NhdGlvbiArIHJhbmdlLmxlbmd0aCA8IHJhbmdlLmxvY2F0aW9uKSAmJiAocmFuZ2UubG9jYXRp
b24gKyByYW5nZS5sZW5ndGggIT0gMCkpCi0gICAgICAgIHJhbmdlLmxlbmd0aCA9IDA7Ci0KLSAg
ICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgewotICAgICAgICBpZiAoYWN0dWFs
UmFuZ2UpCi0gICAgICAgICAgICAqYWN0dWFsUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgTE9HKFRl
eHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU05vdEZvdW5kLCAldSkgLT4g
TlNaZXJvUmVjdCIsIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBOU1plcm9SZWN0Owot
ICAgIH0KLQotICAgIE5TUmVjdCByZXN1bHRSZWN0ID0gbV9wYWdlLT5maXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZShyYW5nZSk7Ci0gICAgcmVzdWx0UmVjdCA9IFttX3ZpZXcgY29udmVydFJlY3Q6
cmVzdWx0UmVjdCB0b1ZpZXc6bmlsXTsKLSAgICByZXN1bHRSZWN0ID0gW21fdmlldy53aW5kb3cg
Y29udmVydFJlY3RUb1NjcmVlbjpyZXN1bHRSZWN0XTsKLQotICAgIGlmIChhY3R1YWxSYW5nZSkg
ewotICAgICAgICAvLyBGSVhNRTogVXBkYXRlIGFjdHVhbFJhbmdlIHRvIG1hdGNoIHRoZSByYW5n
ZSBvZiBmaXJzdCByZWN0LgotICAgICAgICAqYWN0dWFsUmFuZ2UgPSByYW5nZTsKLSAgICB9Ci0K
LSAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkg
LT4gKCVmLCAlZiwgJWYsICVmKSIsIHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgsIHJlc3Vs
dFJlY3Qub3JpZ2luLngsIHJlc3VsdFJlY3Qub3JpZ2luLnksIHJlc3VsdFJlY3Quc2l6ZS53aWR0
aCwgcmVzdWx0UmVjdC5zaXplLmhlaWdodCk7Ci0gICAgcmV0dXJuIHJlc3VsdFJlY3Q7Ci19Ci0K
LWJvb2wgV2ViVmlld0ltcGw6OnBlcmZvcm1LZXlFcXVpdmFsZW50KE5TRXZlbnQgKmV2ZW50KQot
ewotICAgIGlmIChpZ25vcmVzTm9uV2hlZWxFdmVudHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVu
dCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5l
dyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0
b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBj
YXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZl
bnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICAvLyBXZSBnZXQgRXNjIGtleSBoZXJlIGFm
dGVyIHByb2Nlc3NpbmcgZWl0aGVyIEVzYyBvciBDbWQrcGVyaW9kLiBUaGUgZm9ybWVyIHN0YXJ0
cyBhcyBhIGtleURvd24sIGFuZCB0aGUgbGF0dGVyIHN0YXJ0cyBhcyBhIGtleSBlcXVpdmFsZW50
LAotICAgIC8vIGJ1dCBib3RoIGdldCB0cmFuc2Zvcm1lZCB0byBhIGNhbmNlbE9wZXJhdGlvbjog
Y29tbWFuZCwgZXhlY3V0aW5nIHdoaWNoIHBhc3NlcyBhbiBFc2Mga2V5IGV2ZW50IHRvIC1wZXJm
b3JtS2V5RXF1aXZhbGVudDouCi0gICAgLy8gRG9uJ3QgaW50ZXJwcmV0IHRoaXMgZXZlbnQgYWdh
aW4sIGF2b2lkaW5nIHJlLWVudHJhbmN5IGFuZCBpbmZpbml0ZSBsb29wcy4KLSAgICBpZiAoW1tl
dmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdIGlzRXF1YWxUb1N0cmluZzpAIlxlIl0g
JiYgIShbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0RldmljZUluZGVwZW5kZW50TW9kaWZpZXJG
bGFnc01hc2spKQotICAgICAgICByZXR1cm4gW21fdmlldyBfd2ViX3N1cGVyUGVyZm9ybUtleUVx
dWl2YWxlbnQ6ZXZlbnRdOwotCi0gICAgaWYgKG1fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQpIHsK
LSAgICAgICAgLy8gV2ViQ29yZSBoYXMgYWxyZWFkeSBzZWVuIHRoZSBldmVudCwgbm8gbmVlZCBm
b3IgY3VzdG9tIHByb2Nlc3NpbmcuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gZ2V0IG11
bHRpcGxlIGV2ZW50cyBmb3IgZWFjaCBldmVudCBiZWluZyByZS1zZW50LiBGb3IgZXhhbXBsZSwg
Zm9yIENtZCsnPScgQXBwS2l0Ci0gICAgICAgIC8vIGZpcnN0IHBlcmZvcm1zIHRoZSBvcmlnaW5h
bCBrZXkgZXF1aXZhbGVudCwgYW5kIGlmIHRoYXQgaXNuJ3QgaGFuZGxlZCwgaXQgZGlzcGF0Y2hl
cyBhIHN5bnRoZXRpYyBDbWQrJysnLgotICAgICAgICByZXR1cm4gW21fdmlldyBfd2ViX3N1cGVy
UGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOwotICAgIH0KLQotICAgIEFTU0VSVChldmVudCA9
PSBbTlNBcHAgY3VycmVudEV2ZW50XSk7Ci0KLSAgICBkaXNhYmxlQ29tcGxleFRleHRJbnB1dElm
TmVjZXNzYXJ5KCk7Ci0KLSAgICAvLyBQYXNzIGtleSBjb21ib3MgdGhyb3VnaCBXZWJDb3JlIGlm
IHRoZXJlIGlzIGEga2V5IGJpbmRpbmcgYXZhaWxhYmxlIGZvcgotICAgIC8vIHRoaXMgZXZlbnQu
IFRoaXMgbGV0cyB3ZWJwYWdlcyBoYXZlIGEgY3JhY2sgYXQgaW50ZXJjZXB0aW5nIGtleS1tb2Rp
ZmllZCBrZXlwcmVzc2VzLgotICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhlIGZpcnN0UmVzcG9uZGVy
IGNoZWNrIG5lZWRlZD8KLSAgICBpZiAobV92aWV3ID09IG1fdmlldy53aW5kb3cuZmlyc3RSZXNw
b25kZXIpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gY29tbWFu
ZHM7Ci0gICAgICAgIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QgPSBpbnRlcnByZXRLZXlFdmVu
dChldmVudCwgY29tbWFuZHMpOwotICAgICAgICBtX3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQo
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChldmVudCwgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbW1h
bmRzKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gW21f
dmlldyBfd2ViX3N1cGVyUGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOwotfQotCi12b2lkIFdl
YlZpZXdJbXBsOjprZXlVcChOU0V2ZW50ICpldmVudCkKLXsKLSAgICBpZiAoaWdub3Jlc05vbldo
ZWVsRXZlbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExPRyhUZXh0SW5wdXQsICJrZXlV
cDolcCAlQCIsIGV2ZW50LCBldmVudCk7Ci0gICAgLy8gV2UgZG9uJ3QgaW50ZXJwcmV0IHRoZSBr
ZXlVcCBldmVudCwgYXMgdGhpcyBicmVha3Mga2V5IGJpbmRpbmdzIChzZWUgPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAxMDA+KS4KLSAgICBtX3BhZ2UtPmhhbmRs
ZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChldmVudCwgZmFsc2UsIHsgfSkp
OwotfQotCi12b2lkIFdlYlZpZXdJbXBsOjprZXlEb3duKE5TRXZlbnQgKmV2ZW50KQotewotICAg
IGlmIChpZ25vcmVzTm9uV2hlZWxFdmVudHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9H
KFRleHRJbnB1dCwgImtleURvd246JXAgJUAlcyIsIGV2ZW50LCBldmVudCwgKGV2ZW50ID09IG1f
a2V5RG93bkV2ZW50QmVpbmdSZXNlbnQpID8gIiAocmUtc2VudCkiIDogIiIpOwotCi0gICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdo
dCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwot
ICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBh
dXRvcmVsZWFzZV07Ci0KLSAgICBpZiAodHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtl
eURvd24oZXZlbnQpKSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICIuLi5oYW5kbGVkIGJ5IHBs
dWctaW4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGNvdWxkIGJlIHJl
Y2VpdmluZyBhIGtleSBkb3duIGZyb20gQXBwS2l0IGlmIHdlIGhhdmUgcmUtc2VudCBhbiBldmVu
dAotICAgIC8vIHRoYXQgbWFwcyB0byBhbiBhY3Rpb24gdGhhdCBpcyBjdXJyZW50bHkgdW5hdmFp
bGFibGUgKGZvciBleGFtcGxlIGEgY29weSB3aGVuCi0gICAgLy8gdGhlcmUgaXMgbm8gcmFuZ2Ug
c2VsZWN0aW9uKS4KLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlIHdlIHNob3VsZCBpZ25vcmUg
dGhlIGtleSBkb3duLgotICAgIGlmIChtX2tleURvd25FdmVudEJlaW5nUmVzZW50ID09IGV2ZW50
KSB7Ci0gICAgICAgIFttX3ZpZXcgX3dlYl9zdXBlcktleURvd246ZXZlbnRdOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gY29t
bWFuZHM7Ci0gICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGludGVycHJldEtleUV2ZW50
KGV2ZW50LCBjb21tYW5kcyk7Ci0gICAgaWYgKCFjb21tYW5kcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgLy8gQW4gaW5wdXQgbWV0aG9kIG1heSBtYWtlIHNldmVyYWwgYWN0aW9ucyBwZXIga2V5cHJl
c3MuIEZvciBleGFtcGxlLCBwcmVzc2luZyBSZXR1cm4gd2l0aCBLb3JlYW4gSU0gYm90aCBjb25m
aXJtcyBpdCBhbmQgc2VuZHMgYSBuZXdsaW5lLgotICAgICAgICAvLyBJTS1saWtlIGFjdGlvbnMg
YXJlIGhhbmRsZWQgaW1tZWRpYXRlbHkgKHNvIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBVSSBwcm9j
ZXNzIGlzIHRydWUpLCBidXQgdGhlcmUgYXJlIHNhdmVkIGNvbW1hbmRzIHRoYXQKLSAgICAgICAg
Ly8gc2hvdWxkIGJlIGhhbmRsZWQgbGlrZSBub3JtYWwgdGV4dCBpbnB1dCBhZnRlciBET00gZXZl
bnQgZGlzcGF0Y2guCi0gICAgICAgIGhhbmRsZWRCeUlucHV0TWV0aG9kID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgbV9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZl
bnQoZXZlbnQsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcykpOwotfQotCi12b2lkIFdl
YlZpZXdJbXBsOjpmbGFnc0NoYW5nZWQoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAgaWYgKGlnbm9y
ZXNOb25XaGVlbEV2ZW50cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coVGV4dElucHV0
LCAiZmxhZ3NDaGFuZ2VkOiVwICVAIiwgZXZlbnQsIGV2ZW50KTsKLQotICAgIC8vIFRoZXJlJ3Mg
YSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQg
ZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFz
ZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0
aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5z
aWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVh
c2VdOwotCi0gICAgLy8gRG9uJ3QgbWFrZSBhbiBldmVudCBmcm9tIHRoZSBudW0gbG9jayBhbmQg
ZnVuY3Rpb24ga2V5cwotICAgIGlmIChldmVudEtleUNvZGVJc1plcm9Pck51bUxvY2tPckZuKGV2
ZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50
KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQsIGZhbHNlLCB7IH0pKTsKLX0KLQotI2VuZGlm
IC8vIFVTRShBU1lOQ19OU1RFWFRJTlBVVENMSUVOVCkKLQotI2lmIFVTRShBU1lOQ19OU1RFWFRJ
TlBVVENMSUVOVCkKICNkZWZpbmUgTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRMRVIoRXZlbnROYW1l
KSBcCiAgICAgdm9pZCBXZWJWaWV3SW1wbDo6RXZlbnROYW1lKE5TRXZlbnQgKmV2ZW50KSBcCiAg
ICAgeyBcCkBAIC00MjYxLDMzICszNzk5LDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZmxhZ3NDaGFu
Z2VkKE5TRXZlbnQgKmV2ZW50KQogICAgICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50IHdlYkV2ZW50
KGV2ZW50LCBtX2xhc3RQcmVzc3VyZUV2ZW50LmdldCgpLCBtX3ZpZXcpOyBcCiAgICAgICAgIG1f
cGFnZS0+aGFuZGxlTW91c2VFdmVudCh3ZWJFdmVudCk7IFwKICAgICB9Ci0gICAgCi0jZWxzZSAv
LyBVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCi0jZGVmaW5lIE5BVElWRV9NT1VTRV9FVkVO
VF9IQU5ETEVSKEV2ZW50TmFtZSkgXAotICAgIHZvaWQgV2ViVmlld0ltcGw6OkV2ZW50TmFtZShO
U0V2ZW50ICpldmVudCkgXAotICAgIHsgXAotICAgICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxF
dmVudHMpIFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICBpZiAoW21fdmlldy5pbnB1
dENvbnRleHQgaGFuZGxlRXZlbnQ6ZXZlbnRdKSB7IFwKLSAgICAgICAgICAgIExPRyhUZXh0SW5w
dXQsICIlcyB3YXMgaGFuZGxlZCBieSB0ZXh0IGlucHV0IGNvbnRleHQiLCBTdHJpbmcoI0V2ZW50
TmFtZSkuc3Vic3RyaW5nKDAsIFN0cmluZygjRXZlbnROYW1lKS5maW5kKCJJbnRlcm5hbCIpKS5h
c2NpaSgpLmRhdGEoKSk7IFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9IFwKLSAg
ICAgICAgTmF0aXZlV2ViTW91c2VFdmVudCB3ZWJFdmVudChldmVudCwgbV9sYXN0UHJlc3N1cmVF
dmVudC5nZXQoKSwgbV92aWV3KTsgXAotICAgICAgICBtX3BhZ2UtPmhhbmRsZU1vdXNlRXZlbnQo
d2ViRXZlbnQpOyBcCi0gICAgfQotI2RlZmluZSBOQVRJVkVfTU9VU0VfRVZFTlRfSEFORExFUl9J
TlRFUk5BTChFdmVudE5hbWUpIFwKLSAgICB2b2lkIFdlYlZpZXdJbXBsOjpFdmVudE5hbWUoTlNF
dmVudCAqZXZlbnQpIFwKLSAgICB7IFwKLSAgICAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZl
bnRzKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICAgICAgaWYgKFttX3ZpZXcuaW5wdXRD
b250ZXh0IGhhbmRsZUV2ZW50OmV2ZW50XSkgeyBcCi0gICAgICAgICAgICBMT0coVGV4dElucHV0
LCAiJXMgd2FzIGhhbmRsZWQgYnkgdGV4dCBpbnB1dCBjb250ZXh0IiwgU3RyaW5nKCNFdmVudE5h
bWUpLnN1YnN0cmluZygwLCBTdHJpbmcoI0V2ZW50TmFtZSkuZmluZCgiSW50ZXJuYWwiKSkuYXNj
aWkoKS5kYXRhKCkpOyBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICAgICAgfSBcCi0gICAg
ICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQgd2ViRXZlbnQoZXZlbnQsIG1fbGFzdFByZXNzdXJlRXZl
bnQuZ2V0KCksIG1fdmlldyk7IFwKLSAgICAgICAgbV9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KHdl
YkV2ZW50KTsgXAotICAgIH0KLSNlbmRpZiAvLyBVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQp
CiAKIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlRW50ZXJlZCkKIE5BVElWRV9NT1VT
RV9FVkVOVF9IQU5ETEVSKG1vdXNlRXhpdGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmgKaW5kZXggZWMzZDdkMTJhNmMxZjIxNWExYjY5YzMzZDE3MzAwOGIxM2NmMDAyNy4uNzNm
MTgyZDVmZTZhZjYxYzU1NTYyM2NiN2NkZTJmNzcxYTFhMDk3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0xOTQsMTAgKzE5NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgPSAwOwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShNQUMpICYmICFVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCi0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFwcGxpY2F0aW9uQWJvdXRJbnB1dENvbnRleHRDaGFuZ2UoKSA9IDA7Ci0jZW5kaWYK
LQogI2lmIFVTRShBUFBLSVQpCiAgICAgdmlydHVhbCB2b2lkIHNldFByb21pc2VkRGF0YUZvcklt
YWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBpbWFnZUJ1ZmZlciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNpYmxlVXJs
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZUJ1ZmZlcikgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBmMWZhNmM5ZTlh
M2JkZDE5Yjc4YjQ1YjIxMmUyZDQ1YTFhMDkzNzkwLi5lZmIzNGQyZTdiNDE5MDdhYzJjZDlmNGZi
MTcyNDUzZmE1M2Q1YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcApAQCAtMzQ1LDkgKzM0NSw2IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VD
bGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgdWluCiAgICAgLCBt
X2JhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSgqdGhpcykpCiAgICAg
LCBtX21haW50YWluc0luYWN0aXZlU2VsZWN0aW9uKGZhbHNlKQogICAgICwgbV9pc0VkaXRhYmxl
KGZhbHNlKQotI2lmIFBMQVRGT1JNKE1BQykgJiYgIVVTRShBU1lOQ19OU1RFWFRJTlBVVENMSUVO
VCkKLSAgICAsIG1fdGVtcG9yYXJpbHlDbG9zZWRDb21wb3NpdGlvbihmYWxzZSkKLSNlbmRpZgog
ICAgICwgbV90ZXh0Wm9vbUZhY3RvcigxKQogICAgICwgbV9wYWdlWm9vbUZhY3RvcigxKQogICAg
ICwgbV9wYWdlU2NhbGVGYWN0b3IoMSkKQEAgLTUwNDMsOSArNTA0MCw2IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkKICAgICBtX2lzUGFnZVN1c3Bl
bmRlZCA9IGZhbHNlOwogCiAgICAgbV9lZGl0b3JTdGF0ZSA9IEVkaXRvclN0YXRlKCk7Ci0jaWYg
UExBVEZPUk0oTUFDKSAmJiAhVVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQotICAgIG1fdGVt
cG9yYXJpbHlDbG9zZWRDb21wb3NpdGlvbiA9IGZhbHNlOwotI2VuZGlmCiAKICAgICBtX3BhZ2VD
bGllbnQucHJvY2Vzc0RpZEV4aXQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCmluZGV4IGY5ODZhYTViMGIyZTUzNzQwZGI2ZjlmNWM1NzZkNDVkMWVmMTJhNzguLmZi
OTJhNzI1MDIzYjVjOGFiMWQ5MjAwZWFmNTc0OGY5NzdmZGI4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTU2OCwyMCArNTY4LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Rm9udChjb25zdCBTdHJpbmcmIGZvbnRGYW1pbHksIGRvdWJsZSBmb250U2l6ZSwg
dWludDY0X3QgZm9udFRyYWl0cyk7CiAgICAgdm9pZCBmb250QXRTZWxlY3Rpb24oc3RkOjpmdW5j
dGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBkb3VibGUsIGJvb2wsIENhbGxiYWNrQmFzZTo6RXJy
b3IpPik7CiAKLSNpZiAhVVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQotICAgIGJvb2wgaW5z
ZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1l
bnRSYW5nZSk7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZl
Y3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgY29uc3QgRWRp
dGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVu
dFJhbmdlKTsKLSAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIGJvb2wgaW5zZXJ0
RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBs
YWNlbWVudFJhbmdlLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKLSAgICB2b2lkIGdldEF0dHJpYnV0ZWRTdWJz
dHJpbmdGcm9tUmFuZ2UoY29uc3QgRWRpdGluZ1JhbmdlJiwgQXR0cmlidXRlZFN0cmluZyYpOwot
ICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UoRWRpdGluZ1JhbmdlJik7Ci0gICAgdm9pZCBnZXRTZWxl
Y3RlZFJhbmdlKEVkaXRpbmdSYW5nZSYpOwotICAgIHVpbnQ2NF90IGNoYXJhY3RlckluZGV4Rm9y
UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQpOwotICAgIFdlYkNvcmU6OkludFJlY3QgZmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoY29uc3QgRWRpdGluZ1JhbmdlJik7Ci0gICAgYm9vbCBl
eGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kPiYpOwotICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKLSNlbmRpZiAvLyAhVVNFKEFT
WU5DX05TVEVYVElOUFVUQ0xJRU5UKQotCiAgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKTsKICAg
ICBOU1dpbmRvdyAqcGxhdGZvcm1XaW5kb3coKTsKIApAQCAtMTU4Myw5ICsxNTY5LDYgQEAgcHJp
dmF0ZToKIAogICAgIEVkaXRvclN0YXRlIG1fZWRpdG9yU3RhdGU7CiAgICAgYm9vbCBtX2lzRWRp
dGFibGU7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhVVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5U
KQotICAgIGJvb2wgbV90ZW1wb3JhcmlseUNsb3NlZENvbXBvc2l0aW9uOyAvLyBFZGl0b3Igc3Rh
dGUgY2hhbmdlZCBmcm9tIGhhc0NvbXBvc2l0aW9uIHRvICFoYXNDb21wb3NpdGlvbiwgYnV0IHRo
YXQgd2FzIG9ubHkgd2l0aCBzaG91bGRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSB5
ZXQuCi0jZW5kaWYKIAogICAgIGRvdWJsZSBtX3RleHRab29tRmFjdG9yOwogICAgIGRvdWJsZSBt
X3BhZ2Vab29tRmFjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCmluZGV4IDRhOTFjMDQ5ODgxZTcwYTQ3ZWVhNDVmZDYwMDM3NzQzYzMzYTQ0MWMu
LmZhNmZkZjhlYTgzZjgwZmE4YTA0YjI5NmJhMTAyMDM5ODhmNGQxYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTEwOCw5ICsxMDgsNiBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZXNldFNlY3VyZUlucHV0U3RhdGUoKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRD
b21wb3NpdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25EaWRDaGFu
Z2UoKSBvdmVycmlkZTsKLSNpZiBQTEFURk9STShNQUMpICYmICFVU0UoQVNZTkNfTlNURVhUSU5Q
VVRDTElFTlQpCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFwcGxpY2F0aW9uQWJvdXRJbnB1dENv
bnRleHRDaGFuZ2UoKSBvdmVycmlkZTsKLSNlbmRpZgogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNw
YWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KaW5kZXggNzVjMWNlYWJlY2VkMThm
OGZkMmYzYTQ1YmNhMWIwYzcxNmVhZjczYy4uZTUyNzJiMmEyZTQ3NTFmNjYzZjAyM2YzNjhiOTJk
OWMyZmY1MGU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tCkBAIC0zOTAsMTMgKzM5MCw2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6Om5vdGlm
eUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKQogICAgIG1faW1wbC0+bm90
aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpOwogfQogCi0jaWYgUExB
VEZPUk0oTUFDKSAmJiAhVVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6bm90aWZ5QXBwbGljYXRpb25BYm91dElucHV0Q29udGV4dENoYW5nZSgpCi17Ci0g
ICAgW05TQXBwIHVwZGF0ZVdpbmRvd3NdOwotfQotI2VuZGlmCi0KIEZsb2F0UmVjdCBQYWdlQ2xp
ZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIHJldHVybiB0b0RldmljZVNwYWNlKHJlY3QsIFttX3ZpZXcgd2luZG93XSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IGRmMDA2
Y2RkNDJiZDI2N2MxYjJlMjAyOTJkZTE2ZGJkOTlmYzFmZDIuLjAzODUzZDA2MTc3ZThhNzQyYTA0
ZWRhYzFjMWVmMmRlODdkOWM2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0xNDMsMTQyICsxNDMsNiBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKGJvb2wgaXNTY3JvbGxhYmxlKQogICAgIHBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRNYWluRnJhbWVJc1Njcm9sbGFibGUo
aXNTY3JvbGxhYmxlKSwgbV9wYWdlSUQpOwogfQogCi0jaWYgIVVTRShBU1lOQ19OU1RFWFRJTlBV
VENMSUVOVCkKLQotdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCBjb25zdCBF
ZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2Vt
ZW50UmFuZ2UpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gSWYgdGhpcyBm
YWlscywgd2Ugc2hvdWxkIGNhbGwgLWRpc2NhcmRNYXJrZWRUZXh0IG9uIGlucHV0IGNvbnRleHQg
dG8gbm90aWZ5IHRoZSBpbnB1dCBtZXRob2QuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBoYXBwZW4g
bmF0dXJhbGx5IGxhdGVyLCBhcyBwYXJ0IG9mIHJlbG9hZGluZyB0aGUgcGFnZS4KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZTo6U2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uUmFuZ2UsIHJlcGxh
Y2VtZW50UmFuZ2UpLCBNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9zaXRpb246OlJlcGx5KG1f
ZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5Ojpjb25maXJt
Q29tcG9zaXRpb24oKQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3Np
dGlvbigpLCBNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uOjpSZXBseShtX2Vk
aXRvclN0YXRlKSwgbV9wYWdlSUQpOwotfQotCi1ib29sIFdlYlBhZ2VQcm94eTo6aW5zZXJ0VGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5n
ZSkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBi
b29sIGhhbmRsZWQgPSB0cnVlOwotICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZTo6SW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlKSwgTWVzc2FnZXM6OldlYlBh
Z2U6Okluc2VydFRleHQ6OlJlcGx5KGhhbmRsZWQsIG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7
Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhVVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQotICAg
IG1fdGVtcG9yYXJpbHlDbG9zZWRDb21wb3NpdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBy
ZXR1cm4gaGFuZGxlZDsKLX0KLQotYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydERpY3RhdGVkVGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5n
ZSwgY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFsdGVy
bmF0aXZlc1dpdGhSYW5nZSkKLXsKLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAg
ICBpZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVzV2l0aFJhbmdlLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIGluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZSk7Ci0KLSAgICBpZiAoIWlz
VmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBWZWN0b3I8RGljdGF0aW9uQWx0
ZXJuYXRpdmU+IGRpY3RhdGlvbkFsdGVybmF0aXZlczsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzV2l0aFJhbmdlLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYWx0ZXJuYXRpdmVXaXRoUmFuZ2Ug
PSBkaWN0YXRpb25BbHRlcm5hdGl2ZXNXaXRoUmFuZ2VbaV07Ci0gICAgICAgIHVpbnQ2NF90IGRp
Y3RhdGlvbkNvbnRleHQgPSBtX3BhZ2VDbGllbnQuYWRkRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGFs
dGVybmF0aXZlV2l0aFJhbmdlLmFsdGVybmF0aXZlcyk7Ci0gICAgICAgIGlmIChkaWN0YXRpb25D
b250ZXh0KQotICAgICAgICAgICAgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLmFwcGVuZChEaWN0YXRp
b25BbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZVdpdGhSYW5nZS5yYW5nZS5sb2NhdGlvbiwgYWx0ZXJu
YXRpdmVXaXRoUmFuZ2UucmFuZ2UubGVuZ3RoLCBkaWN0YXRpb25Db250ZXh0KSk7Ci0gICAgfQot
Ci0gICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0aXZlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBpbnNlcnRUZXh0KHRleHQsIHJlcGxhY2VtZW50UmFuZ2UpOwotCi0gICAgYm9vbCBoYW5kbGVk
ID0gdHJ1ZTsKLSAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2Vy
dERpY3RhdGVkVGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlLCBkaWN0YXRpb25BbHRlcm5hdGl2
ZXMpLCBNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0RGljdGF0ZWRUZXh0OjpSZXBseShoYW5kbGVk
LCBtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOwotICAgIHJldHVybiBoYW5kbGVkOwotI2Vsc2UK
LSAgICByZXR1cm4gaW5zZXJ0VGV4dCh0ZXh0LCByZXBsYWNlbWVudFJhbmdlKTsKLSNlbmRpZgot
fQotCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFya2VkUmFuZ2UoRWRpdGluZ1JhbmdlJiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0ID0gRWRpdGluZ1JhbmdlKCk7Ci0KLSAgICBpZiAoIWlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpHZXRNYXJrZWRSYW5nZSgpLCBNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFya2VkUmFu
Z2U6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlEKTsKLSAgICBNRVNTQUdFX0NIRUNLKHJlc3VsdC5p
c1ZhbGlkKCkpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZShFZGl0
aW5nUmFuZ2UmIHJlc3VsdCkKLXsKLSAgICByZXN1bHQgPSBFZGl0aW5nUmFuZ2UoKTsKLQotICAg
IGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCkuc2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVkUmFuZ2UoKSwgTWVzc2FnZXM6OldlYlBh
Z2U6OkdldFNlbGVjdGVkUmFuZ2U6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlEKTsKLSAgICBNRVNT
QUdFX0NIRUNLKHJlc3VsdC5pc1ZhbGlkKCkpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdlLCBB
dHRyaWJ1dGVkU3RyaW5nJiByZXN1bHQpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldEF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UocmFuZ2UpLCBNZXNzYWdlczo6V2ViUGFnZTo6R2V0
QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQpOwot
fQotCi11aW50NjRfdCBXZWJQYWdlUHJveHk6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3Qg
SW50UG9pbnQgcG9pbnQpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgdWludDY0X3QgcmVzdWx0ID0gMDsKLSAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2U6OkNoYXJhY3RlckluZGV4Rm9yUG9pbnQocG9pbnQpLCBNZXNzYWdlczo6
V2ViUGFnZTo6Q2hhcmFjdGVySW5kZXhGb3JQb2ludDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFJlY3QgV2ViUGFnZVByb3h5OjpmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZShjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdlKQotewotICAgIGlm
ICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50UmVjdCBy
ZXN1bHRSZWN0OwotICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Rmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UocmFuZ2UpLCBNZXNzYWdlczo6V2ViUGFnZTo6Rmlyc3RS
ZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6OlJlcGx5KHJlc3VsdFJlY3QpLCBtX3BhZ2VJRCk7Ci0gICAg
cmV0dXJuIHJlc3VsdFJlY3Q7Ci19Ci0KLWJvb2wgV2ViUGFnZVByb3h5OjpleGVjdXRlS2V5cHJl
c3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFu
ZHMpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb21tYW5kcyksIE1lc3NhZ2VzOjpXZWJQ
YWdlOjpFeGVjdXRlS2V5cHJlc3NDb21tYW5kczo6UmVwbHkocmVzdWx0LCBtX2VkaXRvclN0YXRl
KSwgbV9wYWdlSUQpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIVVTRShBU1lOQ19OU1RFWFRJTlBV
VENMSUVOVCkKLSAgICBtX3RlbXBvcmFyaWx5Q2xvc2VkQ29tcG9zaXRpb24gPSBmYWxzZTsKLSNl
bmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpjYW5jZWxD
b21wb3NpdGlvbigpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q2FuY2VsQ29tcG9zaXRp
b24oKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbENvbXBvc2l0aW9uOjpSZXBseShtX2VkaXRv
clN0YXRlKSwgbV9wYWdlSUQpOwotfQotCi0jZW5kaWYgLy8gIVVTRShBU1lOQ19OU1RFWFRJTlBV
VENMSUVOVCkKLQogdm9pZCBXZWJQYWdlUHJveHk6Omluc2VydERpY3RhdGVkVGV4dEFzeW5jKGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlLCBj
b25zdCBWZWN0b3I8VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYgZGljdGF0aW9uQWx0ZXJuYXRp
dmVzV2l0aFJhbmdlLCBib29sIHJlZ2lzdGVyVW5kb0dyb3VwKQogewogI2lmIFVTRShESUNUQVRJ
T05fQUxURVJOQVRJVkVTKQpAQCAtNjk3LDExICs1NjEsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0Rm9udChjb25zdCBTdHJpbmcmIGZvbnRGYW1pbHksIGRvdWJsZSBmb250U2l6ZSwgdWludDY0
X3QgZgogdm9pZCBXZWJQYWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JT
dGF0ZSYgZWRpdG9yU3RhdGUpCiB7CiAgICAgYm9vbCBjb3VsZENoYW5nZVNlY3VyZUlucHV0U3Rh
dGUgPSBtX2VkaXRvclN0YXRlLmlzSW5QYXNzd29yZEZpZWxkICE9IGVkaXRvclN0YXRlLmlzSW5Q
YXNzd29yZEZpZWxkIHx8IG1fZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNOb25lOwotI2lmICFVU0Uo
QVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCi0gICAgYm9vbCBjbG9zZWRDb21wb3NpdGlvbiA9ICFl
ZGl0b3JTdGF0ZS5zaG91bGRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSAmJiAhZWRp
dG9yU3RhdGUuaGFzQ29tcG9zaXRpb24gJiYgKG1fZWRpdG9yU3RhdGUuaGFzQ29tcG9zaXRpb24g
fHwgbV90ZW1wb3JhcmlseUNsb3NlZENvbXBvc2l0aW9uKTsKLSAgICBtX3RlbXBvcmFyaWx5Q2xv
c2VkQ29tcG9zaXRpb24gPSBlZGl0b3JTdGF0ZS5zaG91bGRJZ25vcmVDb21wb3NpdGlvblNlbGVj
dGlvbkNoYW5nZSAmJiAobV90ZW1wb3JhcmlseUNsb3NlZENvbXBvc2l0aW9uIHx8IG1fZWRpdG9y
U3RhdGUuaGFzQ29tcG9zaXRpb24pICYmICFlZGl0b3JTdGF0ZS5oYXNDb21wb3NpdGlvbjsKLSAg
ICBib29sIGVkaXRhYmlsaXR5Q2hhbmdlZCA9IG1fZWRpdG9yU3RhdGUuaXNDb250ZW50RWRpdGFi
bGUgIT0gZWRpdG9yU3RhdGUuaXNDb250ZW50RWRpdGFibGU7Ci0jZW5kaWYKICAgICAKICAgICBt
X2VkaXRvclN0YXRlID0gZWRpdG9yU3RhdGU7CiAgICAgCkBAIC03MTMsMjEgKzU3Miw2IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY29uc3QgRWRpdG9yU3RhdGUmIGVk
aXRvclN0YXRlKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgbV9wYWdlQ2xpZW50LnNlbGVj
dGlvbkRpZENoYW5nZSgpOwotCi0jaWYgIVVTRShBU1lOQ19OU1RFWFRJTlBVVENMSUVOVCkKLSAg
ICBpZiAoY2xvc2VkQ29tcG9zaXRpb24pCi0gICAgICAgIG1fcGFnZUNsaWVudC5ub3RpZnlJbnB1
dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uKCk7Ci0gICAgaWYgKGVkaXRhYmlsaXR5
Q2hhbmdlZCkgewotICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIGluIHN5bmMgY29kZSBw
YXRoLCBiZWNhdXNlIEFwcEtpdCBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlcyBpbnB1dCBjb250ZXh0
IGZvciBhc3luYyBjbGllbnRzICg8cmRhcjovL3Byb2JsZW0vMTg2MDQzNjA+KS4KLSAgICAgICAg
bV9wYWdlQ2xpZW50Lm5vdGlmeUFwcGxpY2F0aW9uQWJvdXRJbnB1dENvbnRleHRDaGFuZ2UoKTsK
LSAgICB9Ci0gICAgaWYgKGVkaXRvclN0YXRlLmhhc0NvbXBvc2l0aW9uKSB7Ci0gICAgICAgIC8v
IEFiYW5kb24gdGhlIGN1cnJlbnQgaW5saW5lIGlucHV0IHNlc3Npb24gaWYgc2VsZWN0aW9uIGNo
YW5nZWQgZm9yIGFueSBvdGhlciByZWFzb24gYnV0IGFuIGlucHV0IG1ldGhvZCBjaGFuZ2luZyB0
aGUgY29tcG9zaXRpb24uCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvZ2ljIHNob3VsZCBiZSBp
biBXZWJDb3JlLCBubyBuZWVkIHRvIHJvdW5kLXRyaXAgdG8gVUkgcHJvY2VzcyB0byBjYW5jZWwg
dGhlIGNvbXBvc2l0aW9uLgotICAgICAgICBjYW5jZWxDb21wb3NpdGlvbigpOwotICAgICAgICBt
X3BhZ2VDbGllbnQubm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigp
OwotICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRXaW5kb3dEcmFn
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRl
eCAyMzEzZGJmZjFiNTM2NTllOWIyY2RlM2U2NzkzMThhMzYzYzJiMDU0Li4yMjBjNjc1YjkzNzll
ZjdiMDNkYzJkY2E1Y2M2ZTE3ZWZiY2Y3MDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC00NDcwLDcgKzQ0NzAsNyBAQCB2b2lkIFdlYlBh
Z2U6OmRpZENoYW5nZVNlbGVjdGlvbigpCiAgICAgYXV0byBlZGl0b3JTdGF0ZSA9IHRoaXMtPmVk
aXRvclN0YXRlKHZpZXcgJiYgdmlldy0+bmVlZHNMYXlvdXQoKSA/IEluY2x1ZGVQb3N0TGF5b3V0
RGF0YUhpbnQ6Ok5vIDogSW5jbHVkZVBvc3RMYXlvdXREYXRhSGludDo6WWVzKTsKICAgICBtX2lz
RWRpdG9yU3RhdGVNaXNzaW5nUG9zdExheW91dERhdGEgPSBlZGl0b3JTdGF0ZS5pc01pc3NpbmdQ
b3N0TGF5b3V0RGF0YTsKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKEFTWU5DX05TVEVYVElO
UFVUQ0xJRU5UKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBBYmFuZG9uIHRoZSBjdXJyZW50
IGlubGluZSBpbnB1dCBzZXNzaW9uIGlmIHNlbGVjdGlvbiBjaGFuZ2VkIGZvciBhbnkgb3RoZXIg
cmVhc29uIGJ1dCBhbiBpbnB1dCBtZXRob2QgZGlyZWN0IGFjdGlvbi4KICAgICAvLyBGSVhNRTog
VGhpcyBsb2dpYyBzaG91bGQgYmUgaW4gV2ViQ29yZS4KICAgICAvLyBGSVhNRTogTWFueSBjaGFu
Z2VzIHRoYXQgYWZmZWN0IGNvbXBvc2l0aW9uIG5vZGUgZG8gbm90IGdvIHRocm91Z2ggZGlkQ2hh
bmdlU2VsZWN0aW9uKCkuIFdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIHdoZW4gRE9NIG1hbmlwdWxh
dGlvbiBhZmZlY3RzIHRoZSBjb21wb3NpdGlvbiwgYmVjYXVzZSBvdGhlcndpc2UgaW5wdXQgbWV0
aG9kJ3MgaWRlYSBhYm91dCBpdCB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIEVkaXRvcidzLgpAQCAt
NDQ4MCw4ICs0NDgwLDYgQEAgdm9pZCBXZWJQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oKQogICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNvbXBvc2l0aW9uV2FzQ2FuY2VsZWQo
ZWRpdG9yU3RhdGUpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQoZWRpdG9yU3RhdGUpKTsKLSNlbHNlCi0gICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQoZWRpdG9yU3RhdGUp
LCBwYWdlSUQoKSwgSVBDOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHkpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAyMWEzZGZjMDM1ZGFhODg4YjdlMzNkYTA4ODEz
MWFlZWNhZjBjNDAwLi5jNmY5ZGM2NmViOTAwZmJiNWI1ZWQ2ZGQ1MDQ1ZWY4OWM4ZDA3YTMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTY1Mywx
OSArNjUzLDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0RGljdGF0ZWRUZXh0QXN5bmMoY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4mIGRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb25zLCBib29sIHJlZ2lzdGVyVW5kb0dyb3VwID0gZmFsc2UpOwogICAgIHZv
aWQgYXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGlu
Z1JhbmdlJiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBmb250QXRTZWxlY3Rpb24o
dWludDY0X3QgY2FsbGJhY2tJRCk7Ci0jaWYgIVVTRShBU1lOQ19OU1RFWFRJTlBVVENMSUVOVCkK
LSAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFu
Z2UmIHJlcGxhY2VtZW50UmFuZ2UsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRlJiBuZXdTdGF0
ZSk7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxX
ZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgY29uc3QgRWRpdGluZ1Jh
bmdlJiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdl
LCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOwotICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKEVk
aXRvclN0YXRlJiBuZXdTdGF0ZSk7Ci0gICAgdm9pZCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UsIGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4mIGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zLCBib29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOwotICAg
IHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBFZGl0aW5nUmFuZ2Um
LCBBdHRyaWJ1dGVkU3RyaW5nJik7Ci0gICAgdm9pZCBnZXRNYXJrZWRSYW5nZShFZGl0aW5nUmFu
Z2UmKTsKLSAgICB2b2lkIGdldFNlbGVjdGVkUmFuZ2UoRWRpdGluZ1JhbmdlJik7Ci0gICAgdm9p
ZCBjaGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1
aW50NjRfdCYgcmVzdWx0KTsKLSAgICB2b2lkIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGNv
bnN0IEVkaXRpbmdSYW5nZSYsIFdlYkNvcmU6OkludFJlY3QmIHJlc3VsdFJlY3QpOwotICAgIHZv
aWQgZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNz
Q29tbWFuZD4mLCBib29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpOwotICAgIHZv
aWQgY2FuY2VsQ29tcG9zaXRpb24oRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKLSNlbmRpZgogI2Vu
ZGlmCiAKICAgICB2b2lkIHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBXVEY6OlN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGJvb2wmIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IGEwMTRh
NmIyNzQ4MDg0OTE3MTQ2ZGU1MzA3OGYwMGQyMjc2NWQ4ZWUuLjM1NzY5YTc1MGM1M2Y5NGEzODM4
MjI3OGNiYjQyNjIxZTk4NjE2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0zNjgsMTkgKzM2OCw2IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIEF0dHJpYnV0ZWRTdWJzdHJp
bmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKHN0cnVjdCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSByYW5n
ZSwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgRm9udEF0U2VsZWN0aW9uKHVpbnQ2NF90IGNh
bGxiYWNrSUQpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhVVNFKEFTWU5DX05TVEVY
VElOUFVUQ0xJRU5UKQotICAgIEluc2VydFRleHQoU3RyaW5nIHRleHQsIHN0cnVjdCBXZWJLaXQ6
OkVkaXRpbmdSYW5nZSByZXBsYWNlbWVudFJhbmdlKSAtPiAoYm9vbCBoYW5kbGVkLCBzdHJ1Y3Qg
V2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKLSAgICBTZXRDb21wb3NpdGlvbihTdHJpbmcg
dGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCBz
dHJ1Y3QgV2ViS2l0OjpFZGl0aW5nUmFuZ2Ugc2VsZWN0aW9uUmFuZ2UsIHN0cnVjdCBXZWJLaXQ6
OkVkaXRpbmdSYW5nZSByZXBsYWNlbWVudFJhbmdlKSAtPiAoc3RydWN0IFdlYktpdDo6RWRpdG9y
U3RhdGUgbmV3U3RhdGUpCi0gICAgQ29uZmlybUNvbXBvc2l0aW9uKCkgLT4gKHN0cnVjdCBXZWJL
aXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQotICAgIEluc2VydERpY3RhdGVkVGV4dChTdHJpbmcg
dGV4dCwgc3RydWN0IFdlYktpdDo6RWRpdGluZ1JhbmdlIHJlcGxhY2VtZW50UmFuZ2UsIFZlY3Rv
cjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzKSAt
PiAoYm9vbCBoYW5kbGVkLCBzdHJ1Y3QgV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKLSAg
ICBHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKHN0cnVjdCBXZWJLaXQ6OkVkaXRpbmdS
YW5nZSByYW5nZSkgLT4gKHN0cnVjdCBXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcgcmVzdWx0KQot
ICAgIEdldE1hcmtlZFJhbmdlKCkgLT4gKHN0cnVjdCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSByYW5n
ZSkKLSAgICBHZXRTZWxlY3RlZFJhbmdlKCkgLT4gKHN0cnVjdCBXZWJLaXQ6OkVkaXRpbmdSYW5n
ZSByYW5nZSkKLSAgICBDaGFyYWN0ZXJJbmRleEZvclBvaW50KFdlYkNvcmU6OkludFBvaW50IHBv
aW50KSAtPiAodWludDY0X3QgcmVzdWx0KQotICAgIEZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
KHN0cnVjdCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSByYW5nZSkgLT4gKFdlYkNvcmU6OkludFJlY3Qg
cmVzdWx0UmVjdCkKLSAgICBFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhWZWN0b3I8V2ViQ29yZTo6
S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKSAtPiAoYm9vbCBoYW5kbGVkLCBzdHJ1Y3Qg
V2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKLSAgICBDYW5jZWxDb21wb3NpdGlvbigpIC0+
IChzdHJ1Y3QgV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKLSNlbmRpZgogCiAgICAgU2V0
TWluaW11bUxheW91dFNpemUoV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtTGF5b3V0U2l6ZSkKICAg
ICBTZXRBdXRvU2l6aW5nU2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0KGJvb2wgc2hvdWxkRXhwYW5k
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCmluZGV4IGZkMDEwMjkwYTc0YmI1ZWE5ZDU5NWM4MjdlZjVkZDYwZDczYzU2MmMuLjgz
YmQ5ZjFmZjRhOGNkMTU4NDExMDljOGQzOTUyNWNjZjUyMjU4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTI2OSwx
NjcgKzI2OSw2IEBAIHZvaWQgV2ViUGFnZTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1
aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpCiAgICAgfQogfQogCi0jaWYgIVVT
RShBU1lOQ19OU1RFWFRJTlBVVENMSUVOVCkKLQotdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlv
bihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJs
aW5lcywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGluZ1Jh
bmdlJiByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQotewot
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0KLSAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50RWRpdGFibGUoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2U7
Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudEVkaXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBub3RGb3Vu
ZCkgewotICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9IHJhbmdlRnJvbUVkaXRpbmdSYW5n
ZShmcmFtZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpOwotICAgICAgICAgICAgaWYgKHJlcGxh
Y2VtZW50UmFuZ2UpCi0gICAgICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlcGxhY2VtZW50UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklO
SVRZKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRDb21wb3NpdGlv
bih0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25SYW5nZS5sb2NhdGlvbiwgc2VsZWN0aW9uUmFu
Z2UubG9jYXRpb24gKyBzZWxlY3Rpb25SYW5nZS5sZW5ndGgpOwotICAgIH0KLQotICAgIG5ld1N0
YXRlID0gZWRpdG9yU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRp
b24oRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQotewotICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgZnJhbWUuZWRpdG9y
KCkuY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwot
fQotCi12b2lkIFdlYlBhZ2U6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBF
ZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlLCBib29sJiBoYW5kbGVkLCBFZGl0
b3JTdGF0ZSYgbmV3U3RhdGUpCi17Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQotICAgIGlmIChyZXBsYWNlbWVudEVk
aXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJlcGxhY2Vt
ZW50RWRpdGluZ1JhbmdlKTsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCi0gICAgICAg
ICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVw
bGFjZW1lbnRSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKLSAgICAgICAgLy8gQW4gaW5zZXJ0
VGV4dDogbWlnaHQgYmUgaGFuZGxlZCBieSBvdGhlciByZXNwb25kZXJzIGluIHRoZSBjaGFpbiBp
ZiB3ZSBkb24ndCBoYW5kbGUgaXQuCi0gICAgICAgIC8vIE9uZSBleGFtcGxlIGlzIHNwYWNlIGJh
ciB0aGF0IHJlc3VsdHMgaW4gc2Nyb2xsaW5nIGRvd24gdGhlIHBhZ2UuCi0gICAgICAgIGhhbmRs
ZWQgPSBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KHRleHQsIG51bGxwdHIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICBmcmFtZS5lZGl0b3IoKS5jb25m
aXJtQ29tcG9zaXRpb24odGV4dCk7Ci0gICAgfQotCi0gICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0
ZSgpOwotfQotCi12b2lkIFdlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UsIGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4mIGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zLCBib29sJiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpCi17Ci0g
ICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKLQotICAgIGlmIChyZXBsYWNlbWVudEVkaXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBu
b3RGb3VuZCkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSByYW5n
ZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlKTsKLSAgICAg
ICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCi0gICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVwbGFjZW1lbnRSYW5nZSwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWZyYW1lLmVkaXRvcigpLmhhc0Nv
bXBvc2l0aW9uKCkpOwotICAgIGhhbmRsZWQgPSBmcmFtZS5lZGl0b3IoKS5pbnNlcnREaWN0YXRl
ZFRleHQodGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMsIG51bGxwdHIpOwotICAg
IG5ld1N0YXRlID0gZWRpdG9yU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRS
YW5nZShFZGl0aW5nUmFuZ2UmIHJlc3VsdCkKLXsKLSAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICBzaXpl
X3QgbG9jYXRpb25TaXplOwotICAgIHNpemVfdCBsZW5ndGhTaXplOwotICAgIGlmIChyYW5nZSAm
JiBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5nZS5nZXQo
KSwgbG9jYXRpb25TaXplLCBsZW5ndGhTaXplKSkKLSAgICAgICAgcmVzdWx0ID0gRWRpdGluZ1Jh
bmdlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pihsb2NhdGlvblNpemUpLCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obGVuZ3RoU2l6ZSkpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gRWRpdGluZ1Jh
bmdlKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZShFZGl0aW5nUmFuZ2Um
IHJlc3VsdCkKLXsKLSAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwotCi0gICAgc2l6ZV90IGxvY2F0aW9uU2l6ZTsKLSAgICBz
aXplX3QgbGVuZ3RoU2l6ZTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAocmFuZ2UgJiYgVGV4dEl0ZXJhdG9y
OjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UuZ2V0KCksIGxvY2F0aW9uU2l6
ZSwgbGVuZ3RoU2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9IEVkaXRpbmdSYW5nZShzdGF0aWNfY2Fz
dDx1aW50NjRfdD4obG9jYXRpb25TaXplKSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aFNp
emUpKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IEVkaXRpbmdSYW5nZSgpOwotfQotCi12
b2lkIFdlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UoY29uc3QgRWRpdGlu
Z1JhbmdlJiBlZGl0aW5nUmFuZ2UsIEF0dHJpYnV0ZWRTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBG
cmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOwotCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZUZy
b21FZGl0aW5nUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7Ci0gICAgaWYgKCFyYW5nZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcmVzdWx0LnN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKCpyYW5nZSk7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyaWJ1dGVk
U3RyaW5nID0gcmVzdWx0LnN0cmluZy5nZXQoKTsKLSAgICAKLSAgICAvLyBXZWJDb3JlOjplZGl0
aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJh
aWxpbmcKLSAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBi
cmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+Ci0g
ICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50IHN0cmlu
ZyB0byB0aGUgY29ycmVjdCBsZW5ndGguCi0gICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0
aF0gPiBlZGl0aW5nUmFuZ2UubGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChbYXR0cmlidXRlZFN0
cmluZyBsZW5ndGhdID09IGVkaXRpbmdSYW5nZS5sZW5ndGggKyAxKTsKLSAgICAgICAgQVNTRVJU
KFtbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6ZWRpdGluZ1Jhbmdl
Lmxlbmd0aF0gPT0gJ1xuJyB8fCBbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjaGFyYWN0ZXJB
dEluZGV4OmVkaXRpbmdSYW5nZS5sZW5ndGhdID09ICcgJyk7Ci0gICAgICAgIHJlc3VsdC5zdHJp
bmcgPSBbYXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFr
ZVJhbmdlKDAsIGVkaXRpbmdSYW5nZS5sZW5ndGgpXTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViUGFn
ZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChJbnRQb2ludCBwb2ludCwgdWludDY0X3QmIGluZGV4
KQotewotICAgIGluZGV4ID0gbm90Rm91bmQ7Ci0KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQo
cG9pbnQpOwotICAgIEZyYW1lKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSA/
IHJlc3VsdC5pbm5lck5vZGVGcmFtZSgpIDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1l
LT5yYW5nZUZvclBvaW50KHJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOwot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBsb2NhdGlvbjsK
LSAgICBzaXplX3QgbGVuZ3RoOwotICAgIGlmIChUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5k
TGVuZ3RoRnJvbVJhbmdlKGZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JE
b2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UuZ2V0KCksIGxvY2F0aW9uLCBsZW5ndGgpKQotICAgICAg
ICBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihsb2NhdGlvbik7Ci19Ci0gICAgCi12b2lk
IFdlYlBhZ2U6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGNvbnN0IEVkaXRpbmdSYW5nZSYg
ZWRpdGluZ1JhbmdlLCBXZWJDb3JlOjpJbnRSZWN0JiByZXN1bHRSZWN0KQotewotICAgIEZyYW1l
JiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7
Ci0gICAgcmVzdWx0UmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCgwLCAwKSk7Ci0gICAgcmVzdWx0
UmVjdC5zZXRTaXplKEludFNpemUoMCwgMCkpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7Ci0gICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAKLSAgICBJbnRSZWN0IHJlY3QgPSBmcmFt
ZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7Ci0gICAgcmVzdWx0UmVj
dCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKLX0KLQotdm9pZCBXZWJQ
YWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJl
c3NDb21tYW5kPiYgY29tbWFuZHMsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRlJiBuZXdTdGF0
ZSkKLXsKLSAgICBoYW5kbGVkID0gZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChjb21t
YW5kcywgbnVsbHB0cik7Ci0gICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwotfQotCi12b2lk
IFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKLXsKLSAg
ICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIGZyYW1lLmVkaXRvcigpLmNhbmNlbENvbXBvc2l0aW9uKCk7Ci0gICAgbmV3
U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwotfQotCi0jZW5kaWYgLy8gIVVTRShBU1lOQ19OU1RFWFRJ
TlBVVENMSUVOVCkKLQogdm9pZCBXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHRBc3luYyhjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRFZGl0aW5nUmFu
Z2UsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4mIGRpY3RhdGlv
bkFsdGVybmF0aXZlTG9jYXRpb25zLCBib29sIHJlZ2lzdGVyVW5kb0dyb3VwKQogewogICAgIEZy
YW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>